From 9b12d695753fa6b21d339e54f9cd38d5a7536c63 Mon Sep 17 00:00:00 2001 From: toly <1981462002@qq.com> Date: Sat, 28 Jun 2025 14:30:54 +0800 Subject: [PATCH 1/7] fix:pull to refresh jumping --- .../app/lib/app/theme/app_theme.dart | 18 +++++++++--------- .../lib/project_ui/refresh/refresh.dart | 2 +- .../refresh/refresh_config_wrapper.dart | 12 ++++++++---- .../refresh/toly_refresh_indicator.dart | 15 ++++++++++----- .../view/article/toly_article_scroll_page.dart | 13 ++++--------- .../mobile/widget_page/standard_home_page.dart | 3 +-- .../widget_page/standard_home_search.dart | 2 +- .../views/mobile/widget_page/widget_page.dart | 4 ++-- pubspec.lock | 15 +++++++-------- pubspec.yaml | 2 +- 10 files changed, 44 insertions(+), 42 deletions(-) diff --git a/modules/basic_system/app/lib/app/theme/app_theme.dart b/modules/basic_system/app/lib/app/theme/app_theme.dart index 7940d16a0..26ef5d10c 100644 --- a/modules/basic_system/app/lib/app/theme/app_theme.dart +++ b/modules/basic_system/app/lib/app/theme/app_theme.dart @@ -3,13 +3,13 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; ThemeData darkTheme(AppConfig state) { - Color scaffoldBackgroundColor = const Color(0xff010201); + const Color scaffoldBackgroundColor = Color(0xff010201); SystemUiOverlayStyle overlayStyle = const SystemUiOverlayStyle( - statusBarColor: Colors.transparent, - statusBarBrightness: Brightness.dark, - statusBarIconBrightness: Brightness.light, - ); + statusBarColor: Colors.transparent, + statusBarBrightness: Brightness.dark, + statusBarIconBrightness: Brightness.light, + systemNavigationBarColor: Color(0xff181818)); return ThemeData( scaffoldBackgroundColor: scaffoldBackgroundColor, @@ -61,10 +61,10 @@ ThemeData darkTheme(AppConfig state) { ThemeData lightTheme(AppConfig state) { SystemUiOverlayStyle overlayStyle = const SystemUiOverlayStyle( - statusBarColor: Colors.transparent, - statusBarBrightness: Brightness.light, - statusBarIconBrightness: Brightness.dark, - ); + statusBarColor: Colors.transparent, + statusBarBrightness: Brightness.light, + statusBarIconBrightness: Brightness.dark, + systemNavigationBarColor: Colors.transparent); String fontFamily = state.fontFamily; if (kAppEnv.isWindows) { diff --git a/modules/basic_system/components/lib/project_ui/refresh/refresh.dart b/modules/basic_system/components/lib/project_ui/refresh/refresh.dart index fa66aedd0..27edcb913 100644 --- a/modules/basic_system/components/lib/project_ui/refresh/refresh.dart +++ b/modules/basic_system/components/lib/project_ui/refresh/refresh.dart @@ -1,2 +1,2 @@ export 'refresh_config_wrapper.dart'; -export 'package:refresh/refresh.dart' show SmartRefresher,RefreshController; \ No newline at end of file +export 'package:tolyui_refresh/tolyui_refresh.dart' show TolyRefresh,RefreshController; \ No newline at end of file diff --git a/modules/basic_system/components/lib/project_ui/refresh/refresh_config_wrapper.dart b/modules/basic_system/components/lib/project_ui/refresh/refresh_config_wrapper.dart index 23d5dc367..d9ffba556 100644 --- a/modules/basic_system/components/lib/project_ui/refresh/refresh_config_wrapper.dart +++ b/modules/basic_system/components/lib/project_ui/refresh/refresh_config_wrapper.dart @@ -1,6 +1,6 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:refresh/refresh.dart'; +import 'package:tolyui_refresh/tolyui_refresh.dart'; import 'toly_refresh_indicator.dart'; @@ -11,10 +11,15 @@ class RefreshConfigWrapper extends StatelessWidget { @override Widget build(BuildContext context) { Color themeColor = Theme.of(context).primaryColor; - return RefreshConfiguration( + return RefreshConfigScope( headerTriggerDistance: 60, topHitBoundary: 20, child: child, + springDescription: SpringDescription.withDampingRatio( + mass: 0.5, + stiffness: 100.0, + ratio: 1.1, + ), headerBuilder: () => const TolyRefreshIndicator(), footerBuilder: () => CustomFooter( builder: (BuildContext context, LoadStatus? mode) { @@ -25,8 +30,7 @@ class RefreshConfigWrapper extends StatelessWidget { crossAxisAlignment: WrapCrossAlignment.center, children: [ Icon(Icons.arrow_upward, color: themeColor), - Text("上拉加载", - style: TextStyle(color: themeColor, height: 1)), + Text("上拉加载", style: TextStyle(color: themeColor, height: 1)), ], ); } else if (mode == LoadStatus.loading) { diff --git a/modules/basic_system/components/lib/project_ui/refresh/toly_refresh_indicator.dart b/modules/basic_system/components/lib/project_ui/refresh/toly_refresh_indicator.dart index d44ac625f..cd239d439 100644 --- a/modules/basic_system/components/lib/project_ui/refresh/toly_refresh_indicator.dart +++ b/modules/basic_system/components/lib/project_ui/refresh/toly_refresh_indicator.dart @@ -4,7 +4,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart' hide RefreshIndicator, RefreshIndicatorState; import 'package:flutter/services.dart'; -import 'package:refresh/refresh.dart'; +import 'package:tolyui_refresh/tolyui_refresh.dart'; class TolyRefreshIndicator extends RefreshIndicator { const TolyRefreshIndicator({super.key}); @@ -22,8 +22,8 @@ class _TolyRefreshIndicatorState @override void initState() { super.initState(); - _iconRotateCtrl = - AnimationController(vsync: this, duration: const Duration(milliseconds: 250)); + _iconRotateCtrl = AnimationController( + vsync: this, duration: const Duration(milliseconds: 250)); rotateAnima = Tween(begin: 0.0, end: -0.5).animate(_iconRotateCtrl); } @@ -63,8 +63,13 @@ class _TolyRefreshIndicatorState @override Widget buildContent(BuildContext context, RefreshStatus mode) { Widget child = switch (mode) { - RefreshStatus.refreshing => const CupertinoActivityIndicator(radius: 10,), - RefreshStatus.completed => const Icon(Icons.check,color: Colors.green,), + RefreshStatus.refreshing => const CupertinoActivityIndicator( + radius: 10, + ), + RefreshStatus.completed => const Icon( + Icons.check, + color: Colors.green, + ), RefreshStatus.idle || RefreshStatus.canRefresh => RotationTransition( turns: rotateAnima, child: Icon( diff --git a/modules/knowledge_system/artifact/lib/src/articles/view/article/toly_article_scroll_page.dart b/modules/knowledge_system/artifact/lib/src/articles/view/article/toly_article_scroll_page.dart index d1deb5d09..81815e97a 100644 --- a/modules/knowledge_system/artifact/lib/src/articles/view/article/toly_article_scroll_page.dart +++ b/modules/knowledge_system/artifact/lib/src/articles/view/article/toly_article_scroll_page.dart @@ -1,11 +1,10 @@ - import 'package:artifact/artifact.dart'; import 'package:components/components.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:refresh/refresh.dart'; +import 'package:tolyui_refresh/tolyui_refresh.dart'; import '../../bloc/exp.dart'; @@ -20,7 +19,6 @@ class TolyArticleScrollPage extends StatefulWidget { } class _TolyArticleScrollPageState extends State { - final RefreshController _refreshController = RefreshController(initialRefresh: false); @@ -35,7 +33,7 @@ class _TolyArticleScrollPageState extends State { @override Widget build(BuildContext context) { return RefreshConfigWrapper( - child: SmartRefresher( + child: TolyRefresh( enablePullUp: true, onRefresh: _onRefresh, onLoading: _loadMore, @@ -46,7 +44,7 @@ class _TolyArticleScrollPageState extends State { // handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), // ), SliverPadding( - padding: EdgeInsets.only(top: 10,bottom: 10), + padding: EdgeInsets.only(top: 10, bottom: 10), sliver: const SliverToBoxAdapter( child: ColumnizeViewPage(), ), @@ -76,7 +74,7 @@ class _TolyArticleScrollPageState extends State { await context.read().loadNextPageMore(); // int length = data.length; ArticleState state = bloc.state; - if(state is ArticleWithData){ + if (state is ArticleWithData) { if (state.data.length >= state.total) { _refreshController.loadNoData(); await Future.delayed(Duration(milliseconds: 2000)); @@ -86,8 +84,5 @@ class _TolyArticleScrollPageState extends State { _refreshController.loadComplete(); } - } - - } diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_page.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_page.dart index 06e3c6479..f6ed061e2 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_page.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_page.dart @@ -76,7 +76,6 @@ class _StandardHomePageState extends State Expanded( child: NestedScrollView( floatHeaderSlivers: true, - physics: const BouncingScrollPhysics(), headerSliverBuilder: _buildHeader, body: const WidgetPage()), ), @@ -100,7 +99,7 @@ class _StandardHomePageState extends State SliverToBoxAdapter( child: Container( height: 168, - color: Colors.white, + color: isDark ? Colors.black : Colors.white, child: widget.heard, ), ), diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_search.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_search.dart index cec885812..b9c59a8bd 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_search.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_search.dart @@ -18,7 +18,7 @@ class StandardHomeSearch extends StatelessWidget bool isDark = Theme.of(context).brightness == Brightness.dark; return ColoredBox( - color: isDark ? Colors.transparent : Colors.white, + color: isDark ? Colors.black : Colors.white, child: Row( children: [ _buildHead(context), diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_page/widget_page.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_page/widget_page.dart index 51326cf8a..4bb471810 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_page/widget_page.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_page/widget_page.dart @@ -5,6 +5,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:widget_module/blocs/blocs.dart'; import 'package:note/note.dart'; import 'widget_list_panel.dart'; +import 'package:tolyui_refresh/tolyui_refresh.dart'; class WidgetPage extends StatefulWidget { const WidgetPage({Key? key}) : super(key: key); @@ -28,14 +29,13 @@ class _WidgetPageState extends State { return BlocListener( listener: _listenStateChange, child: RefreshConfigWrapper( - child: SmartRefresher( + child: TolyRefresh( physics: BouncingScrollPhysics(), controller: _refreshController, onRefresh: _onRefresh, enablePullUp: true, onLoading: _onLoadMore, child: CustomScrollView( - physics: BouncingScrollPhysics(), // key: PageStorageKey(name), slivers: [ const WidgetListPanel(), diff --git a/pubspec.lock b/pubspec.lock index 35cb81af2..5ab7108c5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -876,14 +876,6 @@ packages: relative: true source: path version: "0.4.2" - refresh: - dependency: "direct main" - description: - name: refresh - sha256: cbf2254cd1a54135855c9a544af1e1c25472781a9f2c973e56b2068907d669dc - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.0.1" screen_retriever: dependency: transitive description: @@ -1193,6 +1185,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "0.2.0+3" + tolyui_refresh: + dependency: "direct main" + description: + path: "D:\\Projects\\Flutter\\Fx\\toly_ui\\modules\\tolyui_refresh" + relative: false + source: path + version: "0.0.1+1" tolyui_rx_layout: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 80339e0aa..c10551964 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -65,7 +65,7 @@ dependencies: # 视图展示 tolyui: 0.0.4+10 # tolyui - refresh: ^1.0.1 # 下拉刷新 + tolyui_refresh: 0.0.1+1 # 下拉刷新 dash_painter: ^1.0.2 # 虚线 flutter_star: ^1.0.2 # 星星组件 flutter_spinkit: ^5.2.0 # loading From b925114a825e5c60ff71f38463c81c3734f41882 Mon Sep 17 00:00:00 2001 From: toly <1981462002@qq.com> Date: Thu, 21 Aug 2025 09:41:36 +0800 Subject: [PATCH 2/7] update:Flutter3.35.1 --- README-EN.md | 8 +- README.md | 8 +- linux/flutter/generated_plugin_registrant.cc | 8 - linux/flutter/generated_plugins.cmake | 2 - macos/Flutter/GeneratedPluginRegistrant.swift | 4 - .../lib/flutter_ui/toly_date_picker.dart | 537 +++++++++++------- .../widget_page/standard_home_page.dart | 2 +- .../AboutDialog/AboutDialog_en-US.json | 1 + .../AboutDialog/AboutDialog_zh-CN.json | 1 + .../AboutListTile/AboutListTile_en-US.json | 1 + .../AboutListTile/AboutListTile_zh-CN.json | 1 + .../AbsorbPointer/AbsorbPointer_en-US.json | 1 + .../AbsorbPointer/AbsorbPointer_zh-CN.json | 1 + .../AbstractLayoutBuilder_en-US.json | 1 + .../AbstractLayoutBuilder_zh-CN.json | 1 + .../widgets/ActionChip/ActionChip_en-US.json | 1 + .../widgets/ActionChip/ActionChip_zh-CN.json | 1 + .../ActionIconTheme_en-US.json | 1 + .../ActionIconTheme_zh-CN.json | 1 + .../ActionListener/ActionListener_en-US.json | 1 + .../ActionListener/ActionListener_zh-CN.json | 1 + .../doc/widgets/Actions/Actions_en-US.json | 1 + .../doc/widgets/Actions/Actions_zh-CN.json | 1 + .../AdaptiveTextSelectionToolbar_en-US.json | 1 + .../AdaptiveTextSelectionToolbar_zh-CN.json | 1 + .../AlertDialog/AlertDialog_en-US.json | 1 + .../AlertDialog/AlertDialog_zh-CN.json | 1 + .../doc/widgets/Align/Align_en-US.json | 1 + .../doc/widgets/Align/Align_zh-CN.json | 1 + .../AlignTransition_en-US.json | 1 + .../AlignTransition_zh-CN.json | 1 + .../AndroidView/AndroidView_en-US.json | 1 + .../AndroidView/AndroidView_zh-CN.json | 1 + .../AndroidViewSurface_en-US.json | 1 + .../AndroidViewSurface_zh-CN.json | 1 + .../AnimatedAlign/AnimatedAlign_en-US.json | 1 + .../AnimatedAlign/AnimatedAlign_zh-CN.json | 1 + .../AnimatedBuilder_en-US.json | 1 + .../AnimatedBuilder_zh-CN.json | 1 + .../AnimatedContainer_en-US.json | 1 + .../AnimatedContainer_zh-CN.json | 1 + .../AnimatedCrossFade_en-US.json | 1 + .../AnimatedCrossFade_zh-CN.json | 1 + .../AnimatedDefaultTextStyle_en-US.json | 1 + .../AnimatedDefaultTextStyle_zh-CN.json | 1 + .../AnimatedFractionallySizedBox_en-US.json | 1 + .../AnimatedFractionallySizedBox_zh-CN.json | 1 + .../AnimatedGrid/AnimatedGrid_en-US.json | 1 + .../AnimatedGrid/AnimatedGrid_zh-CN.json | 1 + .../AnimatedIcon/AnimatedIcon_en-US.json | 1 + .../AnimatedIcon/AnimatedIcon_zh-CN.json | 1 + .../AnimatedList/AnimatedList_en-US.json | 1 + .../AnimatedList/AnimatedList_zh-CN.json | 1 + .../AnimatedModalBarrier_en-US.json | 1 + .../AnimatedModalBarrier_zh-CN.json | 58 ++ .../AnimatedOpacity_en-US.json | 49 ++ .../AnimatedOpacity_zh-CN.json | 1 + .../AnimatedPadding_en-US.json | 1 + .../AnimatedPadding_zh-CN.json | 1 + .../AnimatedPhysicalModel_en-US.json | 1 + .../AnimatedPhysicalModel_zh-CN.json | 1 + .../AnimatedPositioned_en-US.json | 1 + .../AnimatedPositioned_zh-CN.json | 1 + .../AnimatedPositionedDirectional_en-US.json | 1 + .../AnimatedPositionedDirectional_zh-CN.json | 1 + .../AnimatedRotation_en-US.json | 1 + .../AnimatedRotation_zh-CN.json | 1 + .../AnimatedScale/AnimatedScale_en-US.json | 1 + .../AnimatedScale/AnimatedScale_zh-CN.json | 1 + .../AnimatedSize/AnimatedSize_en-US.json | 1 + .../AnimatedSize/AnimatedSize_zh-CN.json | 1 + .../AnimatedSlide/AnimatedSlide_en-US.json | 44 ++ .../AnimatedSlide/AnimatedSlide_zh-CN.json | 45 ++ .../AnimatedSwitcher_en-US.json | 1 + .../AnimatedSwitcher_zh-CN.json | 1 + .../AnimatedTheme/AnimatedTheme_en-US.json | 1 + .../AnimatedTheme/AnimatedTheme_zh-CN.json | 1 + .../AnimatedWidget/AnimatedWidget_en-US.json | 1 + .../AnimatedWidget/AnimatedWidget_zh-CN.json | 1 + .../AnnotatedRegion_en-US.json | 1 + .../AnnotatedRegion_zh-CN.json | 1 + .../doc/widgets/AppBar/AppBar_en-US.json | 1 + .../doc/widgets/AppBar/AppBar_zh-CN.json | 1 + .../widgets/AppKitView/AppKitView_en-US.json | 1 + .../widgets/AppKitView/AppKitView_zh-CN.json | 1 + .../AspectRatio/AspectRatio_en-US.json | 1 + .../AspectRatio/AspectRatio_zh-CN.json | 1 + .../Autocomplete/Autocomplete_en-US.json | 1 + .../Autocomplete/Autocomplete_zh-CN.json | 1 + .../AutocompleteHighlightedOption_en-US.json | 1 + .../AutocompleteHighlightedOption_zh-CN.json | 1 + .../AutofillGroup/AutofillGroup_en-US.json | 1 + .../AutofillGroup/AutofillGroup_zh-CN.json | 1 + .../AutomaticKeepAlive_en-US.json | 1 + .../AutomaticKeepAlive_zh-CN.json | 1 + .../widgets/BackButton/BackButton_en-US.json | 1 + .../widgets/BackButton/BackButton_zh-CN.json | 1 + .../BackButtonIcon/BackButtonIcon_en-US.json | 1 + .../BackButtonIcon/BackButtonIcon_zh-CN.json | 1 + .../BackButtonListener_en-US.json | 1 + .../BackButtonListener_zh-CN.json | 1 + .../BackdropFilter/BackdropFilter_en-US.json | 1 + .../BackdropFilter/BackdropFilter_zh-CN.json | 1 + .../BackdropGroup/BackdropGroup_en-US.json | 1 + .../BackdropGroup/BackdropGroup_zh-CN.json | 1 + .../doc/widgets/Badge/Badge_en-US.json | 1 + .../doc/widgets/Badge/Badge_zh-CN.json | 1 + .../widgets/BadgeTheme/BadgeTheme_en-US.json | 1 + .../widgets/BadgeTheme/BadgeTheme_zh-CN.json | 1 + .../doc/widgets/Banner/Banner_en-US.json | 1 + .../doc/widgets/Banner/Banner_zh-CN.json | 1 + .../doc/widgets/Baseline/Baseline_en-US.json | 1 + .../doc/widgets/Baseline/Baseline_zh-CN.json | 1 + .../BlockSemantics/BlockSemantics_en-US.json | 1 + .../BlockSemantics/BlockSemantics_zh-CN.json | 1 + .../BottomAppBar/BottomAppBar_en-US.json | 1 + .../BottomAppBar/BottomAppBar_zh-CN.json | 1 + .../BottomNavigationBar_en-US.json | 1 + .../BottomNavigationBar_zh-CN.json | 1 + .../BottomNavigationBarTheme_en-US.json | 1 + .../BottomNavigationBarTheme_zh-CN.json | 1 + .../BottomSheet/BottomSheet_en-US.json | 1 + .../BottomSheet/BottomSheet_zh-CN.json | 1 + .../BoxScrollView/BoxScrollView_en-US.json | 1 + .../BoxScrollView/BoxScrollView_zh-CN.json | 1 + .../doc/widgets/Builder/Builder_en-US.json | 1 + .../doc/widgets/Builder/Builder_zh-CN.json | 1 + .../widgets/ButtonBar/ButtonBar_en-US.json | 1 + .../widgets/ButtonBar/ButtonBar_zh-CN.json | 1 + .../ButtonBarTheme/ButtonBarTheme_en-US.json | 1 + .../ButtonBarTheme/ButtonBarTheme_zh-CN.json | 1 + .../ButtonStyleButton_en-US.json | 1 + .../ButtonStyleButton_zh-CN.json | 84 +++ .../ButtonTheme/ButtonTheme_en-US.json | 1 + .../ButtonTheme/ButtonTheme_zh-CN.json | 1 + .../CalendarDatePicker_en-US.json | 1 + .../CalendarDatePicker_zh-CN.json | 1 + .../CallbackShortcuts_en-US.json | 1 + .../CallbackShortcuts_zh-CN.json | 1 + .../widgets/doc/widgets/Card/Card_en-US.json | 1 + .../widgets/doc/widgets/Card/Card_zh-CN.json | 1 + .../widgets/CardTheme/CardTheme_en-US.json | 1 + .../widgets/CardTheme/CardTheme_zh-CN.json | 1 + .../CarouselView/CarouselView_en-US.json | 1 + .../CarouselView/CarouselView_zh-CN.json | 1 + .../doc/widgets/Center/Center_en-US.json | 1 + .../doc/widgets/Center/Center_zh-CN.json | 1 + .../doc/widgets/Checkbox/Checkbox_en-US.json | 1 + .../doc/widgets/Checkbox/Checkbox_zh-CN.json | 1 + .../CheckboxListTile_en-US.json | 1 + .../CheckboxListTile_zh-CN.json | 1 + .../CheckboxMenuButton_en-US.json | 1 + .../CheckboxMenuButton_zh-CN.json | 1 + .../CheckboxTheme/CheckboxTheme_en-US.json | 1 + .../CheckboxTheme/CheckboxTheme_zh-CN.json | 1 + .../CheckedModeBanner_en-US.json | 1 + .../CheckedModeBanner_zh-CN.json | 1 + .../CheckedPopupMenuItem_en-US.json | 1 + .../CheckedPopupMenuItem_zh-CN.json | 1 + .../widgets/doc/widgets/Chip/Chip_en-US.json | 1 + .../widgets/doc/widgets/Chip/Chip_zh-CN.json | 1 + .../widgets/ChipTheme/ChipTheme_en-US.json | 1 + .../widgets/ChipTheme/ChipTheme_zh-CN.json | 1 + .../widgets/ChoiceChip/ChoiceChip_en-US.json | 1 + .../widgets/ChoiceChip/ChoiceChip_zh-CN.json | 1 + .../CircleAvatar/CircleAvatar_en-US.json | 1 + .../CircleAvatar/CircleAvatar_zh-CN.json | 1 + .../CircularProgressIndicator_en-US.json | 1 + .../CircularProgressIndicator_zh-CN.json | 67 +++ .../doc/widgets/ClipOval/ClipOval_en-US.json | 1 + .../doc/widgets/ClipOval/ClipOval_zh-CN.json | 1 + .../doc/widgets/ClipPath/ClipPath_en-US.json | 1 + .../doc/widgets/ClipPath/ClipPath_zh-CN.json | 1 + .../widgets/ClipRRect/ClipRRect_en-US.json | 1 + .../widgets/ClipRRect/ClipRRect_zh-CN.json | 1 + .../ClipRSuperellipse_en-US.json | 1 + .../ClipRSuperellipse_zh-CN.json | 1 + .../doc/widgets/ClipRect/ClipRect_en-US.json | 1 + .../doc/widgets/ClipRect/ClipRect_zh-CN.json | 1 + .../CloseButton/CloseButton_en-US.json | 1 + .../CloseButton/CloseButton_zh-CN.json | 1 + .../CloseButtonIcon_en-US.json | 1 + .../CloseButtonIcon_zh-CN.json | 1 + .../ColorFiltered/ColorFiltered_en-US.json | 1 + .../ColorFiltered/ColorFiltered_zh-CN.json | 1 + .../widgets/ColoredBox/ColoredBox_en-US.json | 1 + .../widgets/ColoredBox/ColoredBox_zh-CN.json | 1 + .../doc/widgets/Column/Column_en-US.json | 1 + .../doc/widgets/Column/Column_zh-CN.json | 1 + .../CompositedTransformFollower_en-US.json | 1 + .../CompositedTransformFollower_zh-CN.json | 1 + .../CompositedTransformTarget_en-US.json | 1 + .../CompositedTransformTarget_zh-CN.json | 1 + .../ConstrainedBox/ConstrainedBox_en-US.json | 1 + .../ConstrainedBox/ConstrainedBox_zh-CN.json | 1 + .../ConstrainedLayoutBuilder_en-US.json | 1 + .../ConstrainedLayoutBuilder_zh-CN.json | 1 + .../ConstraintsTransformBox_en-US.json | 1 + .../ConstraintsTransformBox_zh-CN.json | 1 + .../widgets/Container/Container_en-US.json | 1 + .../widgets/Container/Container_zh-CN.json | 1 + .../CupertinoActionSheet_en-US.json | 1 + .../CupertinoActionSheet_zh-CN.json | 1 + .../CupertinoActionSheetAction_en-US.json | 1 + .../CupertinoActionSheetAction_zh-CN.json | 1 + .../CupertinoActivityIndicator_en-US.json | 1 + .../CupertinoActivityIndicator_zh-CN.json | 1 + ...inoAdaptiveTextSelectionToolbar_en-US.json | 1 + ...inoAdaptiveTextSelectionToolbar_zh-CN.json | 1 + .../CupertinoAlertDialog_en-US.json | 1 + .../CupertinoAlertDialog_zh-CN.json | 1 + .../CupertinoApp/CupertinoApp_en-US.json | 1 + .../CupertinoApp/CupertinoApp_zh-CN.json | 1 + .../CupertinoButton_en-US.json | 1 + .../CupertinoButton_zh-CN.json | 1 + .../CupertinoCheckbox_en-US.json | 1 + .../CupertinoCheckbox_zh-CN.json | 1 + .../CupertinoContextMenu_en-US.json | 1 + .../CupertinoContextMenu_zh-CN.json | 1 + .../CupertinoContextMenuAction_en-US.json | 1 + .../CupertinoContextMenuAction_zh-CN.json | 1 + .../CupertinoDatePicker_en-US.json | 1 + .../CupertinoDatePicker_zh-CN.json | 1 + ...tinoDesktopTextSelectionToolbar_en-US.json | 1 + ...tinoDesktopTextSelectionToolbar_zh-CN.json | 1 + ...sktopTextSelectionToolbarButton_en-US.json | 1 + ...sktopTextSelectionToolbarButton_zh-CN.json | 1 + .../CupertinoDialogAction_en-US.json | 1 + .../CupertinoDialogAction_zh-CN.json | 1 + .../CupertinoFormRow_en-US.json | 1 + .../CupertinoFormRow_zh-CN.json | 1 + .../CupertinoFormSection_en-US.json | 1 + .../CupertinoFormSection_zh-CN.json | 1 + ...rtinoFullscreenDialogTransition_en-US.json | 1 + ...rtinoFullscreenDialogTransition_zh-CN.json | 1 + .../CupertinoListSection_en-US.json | 1 + .../CupertinoListSection_zh-CN.json | 1 + .../CupertinoListTile_en-US.json | 1 + .../CupertinoListTile_zh-CN.json | 1 + .../CupertinoListTileChevron_en-US.json | 1 + .../CupertinoListTileChevron_zh-CN.json | 1 + .../CupertinoMagnifier_en-US.json | 1 + .../CupertinoMagnifier_zh-CN.json | 1 + .../CupertinoNavigationBar_en-US.json | 1 + .../CupertinoNavigationBar_zh-CN.json | 1 + ...upertinoNavigationBarBackButton_en-US.json | 1 + ...upertinoNavigationBarBackButton_zh-CN.json | 1 + .../CupertinoPageScaffold_en-US.json | 1 + .../CupertinoPageScaffold_zh-CN.json | 1 + ...tinoPageScaffoldBackgroundColor_en-US.json | 1 + ...tinoPageScaffoldBackgroundColor_zh-CN.json | 1 + .../CupertinoPageTransition_en-US.json | 1 + .../CupertinoPageTransition_zh-CN.json | 1 + .../CupertinoPicker_en-US.json | 1 + .../CupertinoPicker_zh-CN.json | 1 + ...noPickerDefaultSelectionOverlay_en-US.json | 1 + ...noPickerDefaultSelectionOverlay_zh-CN.json | 1 + .../CupertinoPopupSurface_en-US.json | 1 + .../CupertinoPopupSurface_zh-CN.json | 1 + .../CupertinoRadio/CupertinoRadio_en-US.json | 1 + .../CupertinoRadio/CupertinoRadio_zh-CN.json | 1 + .../CupertinoScrollbar_en-US.json | 1 + .../CupertinoScrollbar_zh-CN.json | 1 + .../CupertinoSearchTextField_en-US.json | 1 + .../CupertinoSearchTextField_zh-CN.json | 1 + .../CupertinoSegmentedControl_en-US.json | 1 + .../CupertinoSegmentedControl_zh-CN.json | 1 + .../CupertinoSheetTransition_en-US.json | 1 + .../CupertinoSheetTransition_zh-CN.json | 1 + .../CupertinoSlider_en-US.json | 1 + .../CupertinoSlider_zh-CN.json | 1 + ...upertinoSlidingSegmentedControl_en-US.json | 1 + ...upertinoSlidingSegmentedControl_zh-CN.json | 1 + .../CupertinoSliverNavigationBar_en-US.json | 1 + .../CupertinoSliverNavigationBar_zh-CN.json | 1 + .../CupertinoSliverRefreshControl_en-US.json | 1 + .../CupertinoSliverRefreshControl_zh-CN.json | 1 + ...inoSpellCheckSuggestionsToolbar_en-US.json | 1 + ...inoSpellCheckSuggestionsToolbar_zh-CN.json | 1 + .../CupertinoSwitch_en-US.json | 1 + .../CupertinoSwitch_zh-CN.json | 1 + .../CupertinoTabBar_en-US.json | 1 + .../CupertinoTabBar_zh-CN.json | 1 + .../CupertinoTabScaffold_en-US.json | 1 + .../CupertinoTabScaffold_zh-CN.json | 1 + .../CupertinoTabView_en-US.json | 1 + .../CupertinoTabView_zh-CN.json | 1 + .../CupertinoTextField_en-US.json | 1 + .../CupertinoTextField_zh-CN.json | 1 + .../CupertinoTextFormFieldRow_en-US.json | 1 + .../CupertinoTextFormFieldRow_zh-CN.json | 1 + .../CupertinoTextMagnifier_en-US.json | 1 + .../CupertinoTextMagnifier_zh-CN.json | 1 + .../CupertinoTextSelectionToolbar_en-US.json | 1 + .../CupertinoTextSelectionToolbar_zh-CN.json | 1 + ...rtinoTextSelectionToolbarButton_en-US.json | 1 + ...rtinoTextSelectionToolbarButton_zh-CN.json | 1 + .../CupertinoTheme/CupertinoTheme_en-US.json | 1 + .../CupertinoTheme/CupertinoTheme_zh-CN.json | 1 + .../CupertinoTimerPicker_en-US.json | 1 + .../CupertinoTimerPicker_zh-CN.json | 1 + .../CupertinoUserInterfaceLevel_en-US.json | 1 + .../CupertinoUserInterfaceLevel_zh-CN.json | 1 + .../CustomMultiChildLayout_en-US.json | 1 + .../CustomMultiChildLayout_zh-CN.json | 1 + .../CustomPaint/CustomPaint_en-US.json | 1 + .../CustomPaint/CustomPaint_zh-CN.json | 1 + .../CustomScrollView_en-US.json | 1 + .../CustomScrollView_zh-CN.json | 1 + .../CustomSingleChildLayout_en-US.json | 1 + .../CustomSingleChildLayout_zh-CN.json | 1 + .../widgets/DataTable/DataTable_en-US.json | 1 + .../widgets/DataTable/DataTable_zh-CN.json | 1 + .../DataTableTheme/DataTableTheme_en-US.json | 1 + .../DataTableTheme/DataTableTheme_zh-CN.json | 1 + .../DatePickerDialog_en-US.json | 1 + .../DatePickerDialog_zh-CN.json | 1 + .../DatePickerTheme_en-US.json | 1 + .../DatePickerTheme_zh-CN.json | 1 + .../DateRangePickerDialog_en-US.json | 1 + .../DateRangePickerDialog_zh-CN.json | 1 + .../DecoratedBox/DecoratedBox_en-US.json | 1 + .../DecoratedBox/DecoratedBox_zh-CN.json | 1 + .../DecoratedBoxTransition_en-US.json | 1 + .../DecoratedBoxTransition_zh-CN.json | 1 + .../DecoratedSliver_en-US.json | 1 + .../DecoratedSliver_zh-CN.json | 1 + .../DefaultAssetBundle_en-US.json | 1 + .../DefaultAssetBundle_zh-CN.json | 1 + .../DefaultSelectionStyle_en-US.json | 1 + .../DefaultSelectionStyle_zh-CN.json | 1 + .../DefaultTabController_en-US.json | 1 + .../DefaultTabController_zh-CN.json | 1 + .../DefaultTextEditingShortcuts_en-US.json | 1 + .../DefaultTextEditingShortcuts_zh-CN.json | 1 + .../DefaultTextHeightBehavior_en-US.json | 1 + .../DefaultTextHeightBehavior_zh-CN.json | 1 + .../DefaultTextStyle_en-US.json | 1 + .../DefaultTextStyle_zh-CN.json | 1 + .../DefaultTextStyleTransition_en-US.json | 1 + .../DefaultTextStyleTransition_zh-CN.json | 1 + .../DesktopTextSelectionToolbar_en-US.json | 1 + .../DesktopTextSelectionToolbar_zh-CN.json | 1 + ...sktopTextSelectionToolbarButton_en-US.json | 1 + ...sktopTextSelectionToolbarButton_zh-CN.json | 1 + .../doc/widgets/Dialog/Dialog_en-US.json | 1 + .../doc/widgets/Dialog/Dialog_zh-CN.json | 1 + .../DialogTheme/DialogTheme_en-US.json | 1 + .../DialogTheme/DialogTheme_zh-CN.json | 1 + .../Directionality/Directionality_en-US.json | 1 + .../Directionality/Directionality_zh-CN.json | 1 + .../Dismissible/Dismissible_en-US.json | 1 + .../Dismissible/Dismissible_zh-CN.json | 1 + .../DisplayFeatureSubScreen_en-US.json | 1 + .../DisplayFeatureSubScreen_zh-CN.json | 1 + .../doc/widgets/Divider/Divider_en-US.json | 1 + .../doc/widgets/Divider/Divider_zh-CN.json | 1 + .../DividerTheme/DividerTheme_en-US.json | 1 + .../DividerTheme/DividerTheme_zh-CN.json | 1 + .../DragBoundary/DragBoundary_en-US.json | 1 + .../DragBoundary/DragBoundary_zh-CN.json | 1 + .../widgets/DragTarget/DragTarget_en-US.json | 1 + .../widgets/DragTarget/DragTarget_zh-CN.json | 1 + .../widgets/Draggable/Draggable_en-US.json | 1 + .../widgets/Draggable/Draggable_zh-CN.json | 1 + .../DraggableScrollableActuator_en-US.json | 1 + .../DraggableScrollableActuator_zh-CN.json | 1 + .../DraggableScrollableSheet_en-US.json | 1 + .../DraggableScrollableSheet_zh-CN.json | 1 + .../doc/widgets/Drawer/Drawer_en-US.json | 1 + .../doc/widgets/Drawer/Drawer_zh-CN.json | 1 + .../DrawerButton/DrawerButton_en-US.json | 1 + .../DrawerButton/DrawerButton_zh-CN.json | 1 + .../DrawerButtonIcon_en-US.json | 1 + .../DrawerButtonIcon_zh-CN.json | 1 + .../DrawerController_en-US.json | 1 + .../DrawerController_zh-CN.json | 1 + .../DrawerHeader/DrawerHeader_en-US.json | 1 + .../DrawerHeader/DrawerHeader_zh-CN.json | 1 + .../DrawerTheme/DrawerTheme_en-US.json | 1 + .../DrawerTheme/DrawerTheme_zh-CN.json | 1 + .../DropdownButton/DropdownButton_en-US.json | 1 + .../DropdownButton/DropdownButton_zh-CN.json | 1 + .../DropdownButtonFormField_en-US.json | 1 + .../DropdownButtonFormField_zh-CN.json | 1 + .../DropdownButtonHideUnderline_en-US.json | 1 + .../DropdownButtonHideUnderline_zh-CN.json | 1 + .../DropdownMenu/DropdownMenu_en-US.json | 1 + .../DropdownMenu/DropdownMenu_zh-CN.json | 1 + .../DropdownMenuItem_en-US.json | 1 + .../DropdownMenuItem_zh-CN.json | 1 + .../DropdownMenuTheme_en-US.json | 1 + .../DropdownMenuTheme_zh-CN.json | 1 + .../DualTransitionBuilder_en-US.json | 1 + .../DualTransitionBuilder_zh-CN.json | 1 + .../EditableText/EditableText_en-US.json | 1 + .../EditableText/EditableText_zh-CN.json | 1 + .../ElevatedButton/ElevatedButton_en-US.json | 1 + .../ElevatedButton/ElevatedButton_zh-CN.json | 1 + .../ElevatedButtonTheme_en-US.json | 1 + .../ElevatedButtonTheme_zh-CN.json | 1 + .../EndDrawerButton_en-US.json | 1 + .../EndDrawerButton_zh-CN.json | 1 + .../EndDrawerButtonIcon_en-US.json | 1 + .../EndDrawerButtonIcon_zh-CN.json | 1 + .../ErrorWidget/ErrorWidget_en-US.json | 1 + .../ErrorWidget/ErrorWidget_zh-CN.json | 1 + .../ExcludeFocus/ExcludeFocus_en-US.json | 1 + .../ExcludeFocus/ExcludeFocus_zh-CN.json | 1 + .../ExcludeFocusTraversal_en-US.json | 1 + .../ExcludeFocusTraversal_zh-CN.json | 1 + .../ExcludeSemantics_en-US.json | 1 + .../ExcludeSemantics_zh-CN.json | 1 + .../widgets/ExpandIcon/ExpandIcon_en-US.json | 1 + .../widgets/ExpandIcon/ExpandIcon_zh-CN.json | 1 + .../doc/widgets/Expanded/Expanded_en-US.json | 1 + .../doc/widgets/Expanded/Expanded_zh-CN.json | 1 + .../widgets/Expansible/Expansible_en-US.json | 1 + .../widgets/Expansible/Expansible_zh-CN.json | 1 + .../ExpansionPanelList_en-US.json | 1 + .../ExpansionPanelList_zh-CN.json | 1 + .../ExpansionTile/ExpansionTile_en-US.json | 1 + .../ExpansionTile/ExpansionTile_zh-CN.json | 1 + .../ExpansionTileTheme_en-US.json | 1 + .../ExpansionTileTheme_zh-CN.json | 1 + .../FadeInImage/FadeInImage_en-US.json | 1 + .../FadeInImage/FadeInImage_zh-CN.json | 1 + .../FadeTransition/FadeTransition_en-US.json | 1 + .../FadeTransition/FadeTransition_zh-CN.json | 1 + .../FilledButton/FilledButton_en-US.json | 1 + .../FilledButton/FilledButton_zh-CN.json | 1 + .../FilledButtonTheme_en-US.json | 1 + .../FilledButtonTheme_zh-CN.json | 1 + .../widgets/FilterChip/FilterChip_en-US.json | 1 + .../widgets/FilterChip/FilterChip_zh-CN.json | 1 + .../widgets/FittedBox/FittedBox_en-US.json | 1 + .../widgets/FittedBox/FittedBox_zh-CN.json | 1 + .../widgets/doc/widgets/Flex/Flex_en-US.json | 1 + .../widgets/doc/widgets/Flex/Flex_zh-CN.json | 1 + .../doc/widgets/Flexible/Flexible_en-US.json | 1 + .../doc/widgets/Flexible/Flexible_zh-CN.json | 1 + .../FlexibleSpaceBar_en-US.json | 1 + .../FlexibleSpaceBar_zh-CN.json | 1 + .../FlexibleSpaceBarSettings_en-US.json | 1 + .../FlexibleSpaceBarSettings_zh-CN.json | 1 + .../FloatingActionButton_en-US.json | 1 + .../FloatingActionButton_zh-CN.json | 1 + .../widgets/doc/widgets/Flow/Flow_en-US.json | 1 + .../widgets/doc/widgets/Flow/Flow_zh-CN.json | 1 + .../FlutterLogo/FlutterLogo_en-US.json | 1 + .../FlutterLogo/FlutterLogo_zh-CN.json | 1 + .../doc/widgets/Focus/Focus_en-US.json | 1 + .../doc/widgets/Focus/Focus_zh-CN.json | 1 + .../widgets/FocusScope/FocusScope_en-US.json | 1 + .../widgets/FocusScope/FocusScope_zh-CN.json | 1 + .../FocusTraversalGroup_en-US.json | 1 + .../FocusTraversalGroup_zh-CN.json | 1 + .../FocusTraversalOrder_en-US.json | 1 + .../FocusTraversalOrder_zh-CN.json | 1 + .../FocusableActionDetector_en-US.json | 1 + .../FocusableActionDetector_zh-CN.json | 1 + .../widgets/doc/widgets/Form/Form_en-US.json | 1 + .../widgets/doc/widgets/Form/Form_zh-CN.json | 1 + .../widgets/FormField/FormField_en-US.json | 1 + .../widgets/FormField/FormField_zh-CN.json | 1 + .../FractionalTranslation_en-US.json | 1 + .../FractionalTranslation_zh-CN.json | 1 + .../FractionallySizedBox_en-US.json | 1 + .../FractionallySizedBox_zh-CN.json | 1 + .../FutureBuilder/FutureBuilder_en-US.json | 1 + .../FutureBuilder/FutureBuilder_zh-CN.json | 1 + .../GestureDetector_en-US.json | 1 + .../GestureDetector_zh-CN.json | 1 + .../GlowingOverscrollIndicator_en-US.json | 1 + .../GlowingOverscrollIndicator_zh-CN.json | 1 + .../widgets/GridPaper/GridPaper_en-US.json | 1 + .../widgets/GridPaper/GridPaper_zh-CN.json | 1 + .../doc/widgets/GridTile/GridTile_en-US.json | 1 + .../doc/widgets/GridTile/GridTile_zh-CN.json | 1 + .../GridTileBar/GridTileBar_en-US.json | 1 + .../GridTileBar/GridTileBar_zh-CN.json | 1 + .../doc/widgets/GridView/GridView_en-US.json | 1 + .../doc/widgets/GridView/GridView_zh-CN.json | 1 + .../widgets/doc/widgets/Hero/Hero_en-US.json | 1 + .../widgets/doc/widgets/Hero/Hero_zh-CN.json | 1 + .../HeroControllerScope_en-US.json | 1 + .../HeroControllerScope_zh-CN.json | 1 + .../doc/widgets/HeroMode/HeroMode_en-US.json | 1 + .../doc/widgets/HeroMode/HeroMode_zh-CN.json | 1 + .../HtmlElementView_en-US.json | 1 + .../HtmlElementView_zh-CN.json | 1 + .../widgets/doc/widgets/Icon/Icon_en-US.json | 1 + .../widgets/doc/widgets/Icon/Icon_zh-CN.json | 1 + .../widgets/IconButton/IconButton_en-US.json | 1 + .../widgets/IconButton/IconButton_zh-CN.json | 1 + .../IconButtonTheme_en-US.json | 1 + .../IconButtonTheme_zh-CN.json | 1 + .../widgets/IconTheme/IconTheme_en-US.json | 1 + .../widgets/IconTheme/IconTheme_zh-CN.json | 1 + .../IgnoreBaseline/IgnoreBaseline_en-US.json | 1 + .../IgnoreBaseline/IgnoreBaseline_zh-CN.json | 1 + .../IgnorePointer/IgnorePointer_en-US.json | 1 + .../IgnorePointer/IgnorePointer_zh-CN.json | 1 + .../doc/widgets/Image/Image_en-US.json | 1 + .../doc/widgets/Image/Image_zh-CN.json | 1 + .../ImageFiltered/ImageFiltered_en-US.json | 1 + .../ImageFiltered/ImageFiltered_zh-CN.json | 1 + .../widgets/ImageIcon/ImageIcon_en-US.json | 1 + .../widgets/ImageIcon/ImageIcon_zh-CN.json | 1 + .../ImgElementPlatformView_en-US.json | 1 + .../ImgElementPlatformView_zh-CN.json | 1 + .../ImplicitlyAnimatedWidget_en-US.json | 1 + .../ImplicitlyAnimatedWidget_zh-CN.json | 1 + .../IndexedSemantics_en-US.json | 1 + .../IndexedSemantics_zh-CN.json | 1 + .../IndexedStack/IndexedStack_en-US.json | 1 + .../IndexedStack/IndexedStack_zh-CN.json | 1 + .../InheritedCupertinoTheme_en-US.json | 1 + .../InheritedCupertinoTheme_zh-CN.json | 1 + .../InheritedModel/InheritedModel_en-US.json | 1 + .../InheritedModel/InheritedModel_zh-CN.json | 1 + .../InheritedNotifier_en-US.json | 1 + .../InheritedNotifier_zh-CN.json | 1 + .../InheritedTheme/InheritedTheme_en-US.json | 1 + .../InheritedTheme/InheritedTheme_zh-CN.json | 1 + .../InheritedWidget_en-US.json | 1 + .../InheritedWidget_zh-CN.json | 1 + .../widgets/doc/widgets/Ink/Ink_en-US.json | 1 + .../widgets/doc/widgets/Ink/Ink_zh-CN.json | 1 + .../InkResponse/InkResponse_en-US.json | 1 + .../InkResponse/InkResponse_zh-CN.json | 1 + .../doc/widgets/InkWell/InkWell_en-US.json | 1 + .../doc/widgets/InkWell/InkWell_zh-CN.json | 1 + .../widgets/InputChip/InputChip_en-US.json | 1 + .../widgets/InputChip/InputChip_zh-CN.json | 1 + .../InputDatePickerFormField_en-US.json | 1 + .../InputDatePickerFormField_zh-CN.json | 1 + .../InputDecorator/InputDecorator_en-US.json | 1 + .../InputDecorator/InputDecorator_zh-CN.json | 1 + .../InspectorButton_en-US.json | 1 + .../InspectorButton_zh-CN.json | 1 + .../InteractiveViewer_en-US.json | 1 + .../InteractiveViewer_zh-CN.json | 1 + .../IntrinsicHeight_en-US.json | 1 + .../IntrinsicHeight_zh-CN.json | 1 + .../IntrinsicWidth/IntrinsicWidth_en-US.json | 1 + .../IntrinsicWidth/IntrinsicWidth_zh-CN.json | 1 + .../widgets/KeepAlive/KeepAlive_en-US.json | 1 + .../widgets/KeepAlive/KeepAlive_zh-CN.json | 1 + .../KeyboardListener_en-US.json | 1 + .../KeyboardListener_zh-CN.json | 1 + .../KeyedSubtree/KeyedSubtree_en-US.json | 1 + .../KeyedSubtree/KeyedSubtree_zh-CN.json | 1 + .../LayoutBuilder/LayoutBuilder_en-US.json | 1 + .../LayoutBuilder/LayoutBuilder_zh-CN.json | 1 + .../doc/widgets/LayoutId/LayoutId_en-US.json | 1 + .../doc/widgets/LayoutId/LayoutId_zh-CN.json | 1 + .../LeafRenderObjectWidget_en-US.json | 1 + .../LeafRenderObjectWidget_zh-CN.json | 1 + .../LicensePage/LicensePage_en-US.json | 1 + .../LicensePage/LicensePage_zh-CN.json | 1 + .../widgets/LimitedBox/LimitedBox_en-US.json | 1 + .../widgets/LimitedBox/LimitedBox_zh-CN.json | 1 + .../LinearProgressIndicator_en-US.json | 1 + .../LinearProgressIndicator_zh-CN.json | 1 + .../doc/widgets/ListBody/ListBody_en-US.json | 1 + .../doc/widgets/ListBody/ListBody_zh-CN.json | 1 + .../doc/widgets/ListTile/ListTile_en-US.json | 1 + .../doc/widgets/ListTile/ListTile_zh-CN.json | 1 + .../ListTileTheme/ListTileTheme_en-US.json | 1 + .../ListTileTheme/ListTileTheme_zh-CN.json | 1 + .../doc/widgets/ListView/ListView_en-US.json | 1 + .../doc/widgets/ListView/ListView_zh-CN.json | 1 + .../ListWheelScrollView_en-US.json | 1 + .../ListWheelScrollView_zh-CN.json | 1 + .../ListWheelViewport_en-US.json | 1 + .../ListWheelViewport_zh-CN.json | 1 + .../ListenableBuilder_en-US.json | 1 + .../ListenableBuilder_zh-CN.json | 1 + .../doc/widgets/Listener/Listener_en-US.json | 1 + .../doc/widgets/Listener/Listener_zh-CN.json | 1 + .../Localizations/Localizations_en-US.json | 1 + .../Localizations/Localizations_zh-CN.json | 1 + .../LongPressDraggable_en-US.json | 1 + .../LongPressDraggable_zh-CN.json | 1 + .../LookupBoundary/LookupBoundary_en-US.json | 1 + .../LookupBoundary/LookupBoundary_zh-CN.json | 1 + .../widgets/Magnifier/Magnifier_en-US.json | 1 + .../widgets/Magnifier/Magnifier_zh-CN.json | 1 + .../doc/widgets/Material/Material_en-US.json | 1 + .../doc/widgets/Material/Material_zh-CN.json | 1 + .../MaterialApp/MaterialApp_en-US.json | 1 + .../MaterialApp/MaterialApp_zh-CN.json | 1 + .../MaterialBanner/MaterialBanner_en-US.json | 1 + .../MaterialBanner/MaterialBanner_zh-CN.json | 1 + .../MaterialBannerTheme_en-US.json | 1 + .../MaterialBannerTheme_zh-CN.json | 1 + .../MaterialButton/MaterialButton_en-US.json | 1 + .../MaterialButton/MaterialButton_zh-CN.json | 1 + .../MatrixTransition_en-US.json | 1 + .../MatrixTransition_zh-CN.json | 1 + .../widgets/MediaQuery/MediaQuery_en-US.json | 1 + .../widgets/MediaQuery/MediaQuery_zh-CN.json | 1 + .../MenuAcceleratorCallbackBinding_en-US.json | 1 + .../MenuAcceleratorCallbackBinding_zh-CN.json | 1 + .../MenuAcceleratorLabel_en-US.json | 1 + .../MenuAcceleratorLabel_zh-CN.json | 1 + .../widgets/MenuAnchor/MenuAnchor_en-US.json | 1 + .../widgets/MenuAnchor/MenuAnchor_zh-CN.json | 1 + .../doc/widgets/MenuBar/MenuBar_en-US.json | 1 + .../doc/widgets/MenuBar/MenuBar_zh-CN.json | 1 + .../MenuBarTheme/MenuBarTheme_en-US.json | 1 + .../MenuBarTheme/MenuBarTheme_zh-CN.json | 1 + .../MenuButtonTheme_en-US.json | 1 + .../MenuButtonTheme_zh-CN.json | 1 + .../MenuItemButton/MenuItemButton_en-US.json | 1 + .../MenuItemButton/MenuItemButton_zh-CN.json | 1 + .../widgets/MenuTheme/MenuTheme_en-US.json | 1 + .../widgets/MenuTheme/MenuTheme_zh-CN.json | 1 + .../MergeSemantics/MergeSemantics_en-US.json | 1 + .../MergeSemantics/MergeSemantics_zh-CN.json | 1 + .../MergeableMaterial_en-US.json | 1 + .../MergeableMaterial_zh-CN.json | 1 + .../doc/widgets/MetaData/MetaData_en-US.json | 1 + .../doc/widgets/MetaData/MetaData_zh-CN.json | 1 + .../ModalBarrier/ModalBarrier_en-US.json | 1 + .../ModalBarrier/ModalBarrier_zh-CN.json | 1 + .../MouseRegion/MouseRegion_en-US.json | 1 + .../MouseRegion/MouseRegion_zh-CN.json | 1 + .../MultiChildRenderObjectWidget_en-US.json | 1 + .../MultiChildRenderObjectWidget_zh-CN.json | 1 + .../NavigationBar/NavigationBar_en-US.json | 1 + .../NavigationBar/NavigationBar_zh-CN.json | 1 + .../NavigationBarTheme_en-US.json | 1 + .../NavigationBarTheme_zh-CN.json | 1 + .../NavigationDestination_en-US.json | 1 + .../NavigationDestination_zh-CN.json | 1 + .../NavigationDrawer_en-US.json | 1 + .../NavigationDrawer_zh-CN.json | 1 + .../NavigationDrawerDestination_en-US.json | 1 + .../NavigationDrawerDestination_zh-CN.json | 1 + .../NavigationDrawerTheme_en-US.json | 1 + .../NavigationDrawerTheme_zh-CN.json | 1 + .../NavigationIndicator_en-US.json | 1 + .../NavigationIndicator_zh-CN.json | 1 + .../NavigationRail/NavigationRail_en-US.json | 1 + .../NavigationRail/NavigationRail_zh-CN.json | 1 + .../NavigationRailTheme_en-US.json | 1 + .../NavigationRailTheme_zh-CN.json | 1 + .../NavigationToolbar_en-US.json | 1 + .../NavigationToolbar_zh-CN.json | 1 + .../widgets/Navigator/Navigator_en-US.json | 1 + .../widgets/Navigator/Navigator_zh-CN.json | 1 + .../NavigatorPopHandler_en-US.json | 1 + .../NavigatorPopHandler_zh-CN.json | 1 + .../NestedScrollView_en-US.json | 1 + .../NestedScrollView_zh-CN.json | 1 + .../NestedScrollViewViewport_en-US.json | 1 + .../NestedScrollViewViewport_zh-CN.json | 1 + .../NotificationListener_en-US.json | 1 + .../NotificationListener_zh-CN.json | 1 + .../ObstructingPreferredSizeWidget_en-US.json | 1 + .../ObstructingPreferredSizeWidget_zh-CN.json | 1 + .../doc/widgets/Offstage/Offstage_en-US.json | 1 + .../doc/widgets/Offstage/Offstage_zh-CN.json | 1 + .../doc/widgets/Opacity/Opacity_en-US.json | 1 + .../doc/widgets/Opacity/Opacity_zh-CN.json | 1 + .../OrientationBuilder_en-US.json | 1 + .../OrientationBuilder_zh-CN.json | 1 + .../OutlinedButton/OutlinedButton_en-US.json | 1 + .../OutlinedButton/OutlinedButton_zh-CN.json | 1 + .../OutlinedButtonTheme_en-US.json | 1 + .../OutlinedButtonTheme_zh-CN.json | 1 + .../OverflowBar/OverflowBar_en-US.json | 1 + .../OverflowBar/OverflowBar_zh-CN.json | 1 + .../OverflowBox/OverflowBox_en-US.json | 1 + .../OverflowBox/OverflowBox_zh-CN.json | 1 + .../doc/widgets/Overlay/Overlay_en-US.json | 1 + .../doc/widgets/Overlay/Overlay_zh-CN.json | 1 + .../OverlayPortal/OverlayPortal_en-US.json | 1 + .../OverlayPortal/OverlayPortal_zh-CN.json | 1 + .../doc/widgets/Padding/Padding_en-US.json | 1 + .../doc/widgets/Padding/Padding_zh-CN.json | 1 + .../PageStorage/PageStorage_en-US.json | 1 + .../PageStorage/PageStorage_zh-CN.json | 1 + .../doc/widgets/PageView/PageView_en-US.json | 1 + .../doc/widgets/PageView/PageView_zh-CN.json | 1 + .../PaginatedDataTable_en-US.json | 1 + .../PaginatedDataTable_zh-CN.json | 1 + .../ParentDataWidget_en-US.json | 1 + .../ParentDataWidget_zh-CN.json | 1 + .../PerformanceOverlay_en-US.json | 1 + .../PerformanceOverlay_zh-CN.json | 1 + .../PhysicalModel/PhysicalModel_en-US.json | 1 + .../PhysicalModel/PhysicalModel_zh-CN.json | 1 + .../PhysicalShape/PhysicalShape_en-US.json | 1 + .../PhysicalShape/PhysicalShape_zh-CN.json | 1 + .../PinnedHeaderSliver_en-US.json | 1 + .../PinnedHeaderSliver_zh-CN.json | 1 + .../Placeholder/Placeholder_en-US.json | 1 + .../Placeholder/Placeholder_zh-CN.json | 1 + .../PlatformMenuBar_en-US.json | 1 + .../PlatformMenuBar_zh-CN.json | 1 + ...formSelectableRegionContextMenu_en-US.json | 1 + ...formSelectableRegionContextMenu_zh-CN.json | 1 + .../PlatformViewLink_en-US.json | 1 + .../PlatformViewLink_zh-CN.json | 1 + .../PlatformViewSurface_en-US.json | 1 + .../PlatformViewSurface_zh-CN.json | 1 + .../doc/widgets/PopScope/PopScope_en-US.json | 1 + .../doc/widgets/PopScope/PopScope_zh-CN.json | 1 + .../PopupMenuButton_en-US.json | 1 + .../PopupMenuButton_zh-CN.json | 1 + .../PopupMenuDivider_en-US.json | 1 + .../PopupMenuDivider_zh-CN.json | 1 + .../PopupMenuEntry/PopupMenuEntry_en-US.json | 1 + .../PopupMenuEntry/PopupMenuEntry_zh-CN.json | 1 + .../PopupMenuItem/PopupMenuItem_en-US.json | 1 + .../PopupMenuItem/PopupMenuItem_zh-CN.json | 1 + .../PopupMenuTheme/PopupMenuTheme_en-US.json | 1 + .../PopupMenuTheme/PopupMenuTheme_zh-CN.json | 1 + .../widgets/Positioned/Positioned_en-US.json | 1 + .../widgets/Positioned/Positioned_zh-CN.json | 1 + .../PositionedDirectional_en-US.json | 1 + .../PositionedDirectional_zh-CN.json | 1 + .../PositionedTransition_en-US.json | 1 + .../PositionedTransition_zh-CN.json | 1 + .../PreferredSize/PreferredSize_en-US.json | 1 + .../PreferredSize/PreferredSize_zh-CN.json | 1 + .../PreferredSizeWidget_en-US.json | 1 + .../PreferredSizeWidget_zh-CN.json | 1 + .../PrimaryScrollController_en-US.json | 1 + .../PrimaryScrollController_zh-CN.json | 1 + .../ProgressIndicator_en-US.json | 1 + .../ProgressIndicator_zh-CN.json | 1 + .../ProgressIndicatorTheme_en-US.json | 1 + .../ProgressIndicatorTheme_zh-CN.json | 1 + .../ProxyWidget/ProxyWidget_en-US.json | 1 + .../ProxyWidget/ProxyWidget_zh-CN.json | 1 + .../doc/widgets/Radio/Radio_en-US.json | 1 + .../doc/widgets/Radio/Radio_zh-CN.json | 1 + .../RadioListTile/RadioListTile_en-US.json | 1 + .../RadioListTile/RadioListTile_zh-CN.json | 1 + .../RadioMenuButton_en-US.json | 1 + .../RadioMenuButton_zh-CN.json | 1 + .../widgets/RadioTheme/RadioTheme_en-US.json | 1 + .../widgets/RadioTheme/RadioTheme_zh-CN.json | 1 + .../RangeSlider/RangeSlider_en-US.json | 1 + .../RangeSlider/RangeSlider_zh-CN.json | 1 + .../RawAutocomplete_en-US.json | 1 + .../RawAutocomplete_zh-CN.json | 1 + .../doc/widgets/RawChip/RawChip_en-US.json | 1 + .../doc/widgets/RawChip/RawChip_zh-CN.json | 1 + .../RawGestureDetector_en-US.json | 1 + .../RawGestureDetector_zh-CN.json | 1 + .../doc/widgets/RawImage/RawImage_en-US.json | 1 + .../doc/widgets/RawImage/RawImage_zh-CN.json | 1 + .../RawKeyboardListener_en-US.json | 1 + .../RawKeyboardListener_zh-CN.json | 1 + .../RawMagnifier/RawMagnifier_en-US.json | 1 + .../RawMagnifier/RawMagnifier_zh-CN.json | 1 + .../RawMaterialButton_en-US.json | 1 + .../RawMaterialButton_zh-CN.json | 1 + .../RawMenuAnchor/RawMenuAnchor_en-US.json | 1 + .../RawMenuAnchor/RawMenuAnchor_zh-CN.json | 1 + .../RawMenuAnchorGroup_en-US.json | 1 + .../RawMenuAnchorGroup_zh-CN.json | 1 + .../RawScrollbar/RawScrollbar_en-US.json | 1 + .../RawScrollbar/RawScrollbar_zh-CN.json | 1 + .../doc/widgets/RawView/RawView_en-US.json | 1 + .../doc/widgets/RawView/RawView_zh-CN.json | 1 + .../RawWebImage/RawWebImage_en-US.json | 1 + .../RawWebImage/RawWebImage_zh-CN.json | 1 + .../RefreshIndicator_en-US.json | 1 + .../RefreshIndicator_zh-CN.json | 1 + .../RefreshProgressIndicator_en-US.json | 1 + .../RefreshProgressIndicator_zh-CN.json | 1 + .../RelativePositionedTransition_en-US.json | 1 + .../RelativePositionedTransition_zh-CN.json | 1 + .../RenderObjectToWidgetAdapter_en-US.json | 1 + .../RenderObjectToWidgetAdapter_zh-CN.json | 1 + .../RenderObjectWidget_en-US.json | 1 + .../RenderObjectWidget_zh-CN.json | 1 + ...derableDelayedDragStartListener_en-US.json | 1 + ...derableDelayedDragStartListener_zh-CN.json | 1 + .../ReorderableDragStartListener_en-US.json | 1 + .../ReorderableDragStartListener_zh-CN.json | 1 + .../ReorderableList_en-US.json | 1 + .../ReorderableList_zh-CN.json | 1 + .../ReorderableListView_en-US.json | 1 + .../ReorderableListView_zh-CN.json | 1 + .../RepaintBoundary_en-US.json | 1 + .../RepaintBoundary_zh-CN.json | 1 + .../RestorationScope_en-US.json | 1 + .../RestorationScope_zh-CN.json | 1 + .../doc/widgets/RichText/RichText_en-US.json | 1 + .../doc/widgets/RichText/RichText_zh-CN.json | 1 + .../RootRestorationScope_en-US.json | 1 + .../RootRestorationScope_zh-CN.json | 1 + .../widgets/RootWidget/RootWidget_en-US.json | 1 + .../widgets/RootWidget/RootWidget_zh-CN.json | 1 + .../widgets/RotatedBox/RotatedBox_en-US.json | 1 + .../widgets/RotatedBox/RotatedBox_zh-CN.json | 1 + .../RotationTransition_en-US.json | 1 + .../RotationTransition_zh-CN.json | 1 + .../doc/widgets/Router/Router_en-US.json | 1 + .../doc/widgets/Router/Router_zh-CN.json | 1 + .../widgets/doc/widgets/Row/Row_en-US.json | 1 + .../widgets/doc/widgets/Row/Row_zh-CN.json | 1 + .../doc/widgets/SafeArea/SafeArea_en-US.json | 1 + .../doc/widgets/SafeArea/SafeArea_zh-CN.json | 1 + .../doc/widgets/Scaffold/Scaffold_en-US.json | 1 + .../doc/widgets/Scaffold/Scaffold_zh-CN.json | 1 + .../ScaffoldMessenger_en-US.json | 1 + .../ScaffoldMessenger_zh-CN.json | 1 + .../ScaleTransition_en-US.json | 1 + .../ScaleTransition_zh-CN.json | 1 + .../ScrollConfiguration_en-US.json | 1 + .../ScrollConfiguration_zh-CN.json | 1 + .../ScrollNotificationObserver_en-US.json | 1 + .../ScrollNotificationObserver_zh-CN.json | 1 + .../widgets/ScrollView/ScrollView_en-US.json | 1 + .../widgets/ScrollView/ScrollView_zh-CN.json | 1 + .../widgets/Scrollable/Scrollable_en-US.json | 1 + .../widgets/Scrollable/Scrollable_zh-CN.json | 1 + .../widgets/Scrollbar/Scrollbar_en-US.json | 1 + .../widgets/Scrollbar/Scrollbar_zh-CN.json | 1 + .../ScrollbarTheme/ScrollbarTheme_en-US.json | 1 + .../ScrollbarTheme/ScrollbarTheme_zh-CN.json | 1 + .../SearchAnchor/SearchAnchor_en-US.json | 1 + .../SearchAnchor/SearchAnchor_zh-CN.json | 1 + .../widgets/SearchBar/SearchBar_en-US.json | 1 + .../widgets/SearchBar/SearchBar_zh-CN.json | 1 + .../SearchBarTheme/SearchBarTheme_en-US.json | 1 + .../SearchBarTheme/SearchBarTheme_zh-CN.json | 1 + .../SearchViewTheme_en-US.json | 1 + .../SearchViewTheme_zh-CN.json | 1 + .../SegmentedButton_en-US.json | 1 + .../SegmentedButton_zh-CN.json | 1 + .../SegmentedButtonTheme_en-US.json | 1 + .../SegmentedButtonTheme_zh-CN.json | 1 + .../SelectableRegion_en-US.json | 1 + .../SelectableRegion_zh-CN.json | 1 + ...tableRegionSelectionStatusScope_en-US.json | 1 + ...tableRegionSelectionStatusScope_zh-CN.json | 1 + .../SelectableText/SelectableText_en-US.json | 1 + .../SelectableText/SelectableText_zh-CN.json | 1 + .../SelectionArea/SelectionArea_en-US.json | 1 + .../SelectionArea/SelectionArea_zh-CN.json | 1 + .../SelectionContainer_en-US.json | 1 + .../SelectionContainer_zh-CN.json | 1 + .../SelectionListener_en-US.json | 1 + .../SelectionListener_zh-CN.json | 1 + .../SelectionRegistrarScope_en-US.json | 1 + .../SelectionRegistrarScope_zh-CN.json | 1 + .../widgets/Semantics/Semantics_en-US.json | 1 + .../widgets/Semantics/Semantics_zh-CN.json | 1 + .../SemanticsDebugger_en-US.json | 1 + .../SemanticsDebugger_zh-CN.json | 1 + .../widgets/ShaderMask/ShaderMask_en-US.json | 1 + .../widgets/ShaderMask/ShaderMask_zh-CN.json | 1 + .../SharedAppData/SharedAppData_en-US.json | 1 + .../SharedAppData/SharedAppData_zh-CN.json | 1 + .../ShortcutRegistrar_en-US.json | 1 + .../ShortcutRegistrar_zh-CN.json | 1 + .../widgets/Shortcuts/Shortcuts_en-US.json | 1 + .../widgets/Shortcuts/Shortcuts_zh-CN.json | 1 + .../ShrinkWrappingViewport_en-US.json | 1 + .../ShrinkWrappingViewport_zh-CN.json | 1 + .../SimpleDialog/SimpleDialog_en-US.json | 1 + .../SimpleDialog/SimpleDialog_zh-CN.json | 1 + .../SimpleDialogOption_en-US.json | 1 + .../SimpleDialogOption_zh-CN.json | 1 + .../SingleChildRenderObjectWidget_en-US.json | 1 + .../SingleChildRenderObjectWidget_zh-CN.json | 1 + .../SingleChildScrollView_en-US.json | 1 + .../SingleChildScrollView_zh-CN.json | 1 + .../SizeChangedLayoutNotifier_en-US.json | 1 + .../SizeChangedLayoutNotifier_zh-CN.json | 1 + .../SizeTransition/SizeTransition_en-US.json | 1 + .../SizeTransition/SizeTransition_zh-CN.json | 1 + .../doc/widgets/SizedBox/SizedBox_en-US.json | 1 + .../doc/widgets/SizedBox/SizedBox_zh-CN.json | 1 + .../SizedOverflowBox_en-US.json | 1 + .../SizedOverflowBox_zh-CN.json | 1 + .../SlideTransition_en-US.json | 1 + .../SlideTransition_zh-CN.json | 1 + .../doc/widgets/Slider/Slider_en-US.json | 1 + .../doc/widgets/Slider/Slider_zh-CN.json | 1 + .../SliderTheme/SliderTheme_en-US.json | 1 + .../SliderTheme/SliderTheme_zh-CN.json | 1 + .../SliverAnimatedGrid_en-US.json | 1 + .../SliverAnimatedGrid_zh-CN.json | 1 + .../SliverAnimatedList_en-US.json | 1 + .../SliverAnimatedList_zh-CN.json | 1 + .../SliverAnimatedOpacity_en-US.json | 1 + .../SliverAnimatedOpacity_zh-CN.json | 1 + .../SliverAppBar/SliverAppBar_en-US.json | 1 + .../SliverAppBar/SliverAppBar_zh-CN.json | 1 + .../SliverConstrainedCrossAxis_en-US.json | 1 + .../SliverConstrainedCrossAxis_zh-CN.json | 1 + .../SliverCrossAxisExpanded_en-US.json | 1 + .../SliverCrossAxisExpanded_zh-CN.json | 1 + .../SliverCrossAxisGroup_en-US.json | 1 + .../SliverCrossAxisGroup_zh-CN.json | 1 + .../SliverEnsureSemantics_en-US.json | 1 + .../SliverEnsureSemantics_zh-CN.json | 1 + .../SliverFadeTransition_en-US.json | 1 + .../SliverFadeTransition_zh-CN.json | 1 + .../SliverFillRemaining_en-US.json | 1 + .../SliverFillRemaining_zh-CN.json | 1 + .../SliverFillViewport_en-US.json | 1 + .../SliverFillViewport_zh-CN.json | 1 + .../SliverFixedExtentList_en-US.json | 1 + .../SliverFixedExtentList_zh-CN.json | 1 + .../SliverFloatingHeader_en-US.json | 1 + .../SliverFloatingHeader_zh-CN.json | 1 + .../widgets/SliverGrid/SliverGrid_en-US.json | 1 + .../widgets/SliverGrid/SliverGrid_zh-CN.json | 1 + .../SliverIgnorePointer_en-US.json | 1 + .../SliverIgnorePointer_zh-CN.json | 1 + .../SliverLayoutBuilder_en-US.json | 1 + .../SliverLayoutBuilder_zh-CN.json | 1 + .../widgets/SliverList/SliverList_en-US.json | 1 + .../widgets/SliverList/SliverList_zh-CN.json | 1 + .../SliverMainAxisGroup_en-US.json | 1 + .../SliverMainAxisGroup_zh-CN.json | 1 + .../SliverMultiBoxAdaptorWidget_en-US.json | 1 + .../SliverMultiBoxAdaptorWidget_zh-CN.json | 1 + .../SliverOffstage/SliverOffstage_en-US.json | 1 + .../SliverOffstage/SliverOffstage_zh-CN.json | 1 + .../SliverOpacity/SliverOpacity_en-US.json | 1 + .../SliverOpacity/SliverOpacity_zh-CN.json | 1 + .../SliverOverlapAbsorber_en-US.json | 1 + .../SliverOverlapAbsorber_zh-CN.json | 1 + .../SliverOverlapInjector_en-US.json | 1 + .../SliverOverlapInjector_zh-CN.json | 1 + .../SliverPadding/SliverPadding_en-US.json | 1 + .../SliverPadding/SliverPadding_zh-CN.json | 1 + .../SliverPersistentHeader_en-US.json | 1 + .../SliverPersistentHeader_zh-CN.json | 1 + .../SliverPrototypeExtentList_en-US.json | 1 + .../SliverPrototypeExtentList_zh-CN.json | 1 + .../SliverReorderableList_en-US.json | 1 + .../SliverReorderableList_zh-CN.json | 1 + .../SliverResizingHeader_en-US.json | 1 + .../SliverResizingHeader_zh-CN.json | 1 + .../SliverSafeArea/SliverSafeArea_en-US.json | 1 + .../SliverSafeArea/SliverSafeArea_zh-CN.json | 1 + .../SliverToBoxAdapter_en-US.json | 1 + .../SliverToBoxAdapter_zh-CN.json | 1 + .../SliverVariedExtentList_en-US.json | 1 + .../SliverVariedExtentList_zh-CN.json | 1 + .../SliverVisibility_en-US.json | 1 + .../SliverVisibility_zh-CN.json | 1 + .../SliverWithKeepAliveWidget_en-US.json | 1 + .../SliverWithKeepAliveWidget_zh-CN.json | 1 + ...tedMultiChildRenderObjectWidget_en-US.json | 1 + ...tedMultiChildRenderObjectWidget_zh-CN.json | 1 + .../doc/widgets/SnackBar/SnackBar_en-US.json | 1 + .../doc/widgets/SnackBar/SnackBar_zh-CN.json | 1 + .../SnackBarAction/SnackBarAction_en-US.json | 1 + .../SnackBarAction/SnackBarAction_zh-CN.json | 1 + .../SnapshotWidget/SnapshotWidget_en-US.json | 1 + .../SnapshotWidget/SnapshotWidget_zh-CN.json | 1 + .../doc/widgets/Spacer/Spacer_en-US.json | 1 + .../doc/widgets/Spacer/Spacer_zh-CN.json | 1 + .../SpellCheckSuggestionsToolbar_en-US.json | 1 + .../SpellCheckSuggestionsToolbar_zh-CN.json | 1 + .../doc/widgets/Stack/Stack_en-US.json | 1 + .../doc/widgets/Stack/Stack_zh-CN.json | 1 + .../StatefulBuilder_en-US.json | 1 + .../StatefulBuilder_zh-CN.json | 1 + .../StatefulWidget/StatefulWidget_en-US.json | 1 + .../StatefulWidget/StatefulWidget_zh-CN.json | 1 + .../StatelessWidget_en-US.json | 1 + .../StatelessWidget_zh-CN.json | 1 + .../StatusTransitionWidget_en-US.json | 1 + .../StatusTransitionWidget_zh-CN.json | 1 + .../doc/widgets/Stepper/Stepper_en-US.json | 1 + .../doc/widgets/Stepper/Stepper_zh-CN.json | 1 + .../StreamBuilder/StreamBuilder_en-US.json | 1 + .../StreamBuilder/StreamBuilder_zh-CN.json | 1 + .../StreamBuilderBase_en-US.json | 1 + .../StreamBuilderBase_zh-CN.json | 1 + .../StretchingOverscrollIndicator_en-US.json | 1 + .../StretchingOverscrollIndicator_zh-CN.json | 1 + .../SubmenuButton/SubmenuButton_en-US.json | 1 + .../SubmenuButton/SubmenuButton_zh-CN.json | 1 + .../doc/widgets/Switch/Switch_en-US.json | 1 + .../doc/widgets/Switch/Switch_zh-CN.json | 1 + .../SwitchListTile/SwitchListTile_en-US.json | 1 + .../SwitchListTile/SwitchListTile_zh-CN.json | 1 + .../SwitchTheme/SwitchTheme_en-US.json | 1 + .../SwitchTheme/SwitchTheme_zh-CN.json | 1 + .../SystemContextMenu_en-US.json | 1 + .../SystemContextMenu_zh-CN.json | 1 + .../widgets/doc/widgets/Tab/Tab_en-US.json | 1 + .../widgets/doc/widgets/Tab/Tab_zh-CN.json | 1 + .../doc/widgets/TabBar/TabBar_en-US.json | 1 + .../doc/widgets/TabBar/TabBar_zh-CN.json | 1 + .../TabBarTheme/TabBarTheme_en-US.json | 1 + .../TabBarTheme/TabBarTheme_zh-CN.json | 1 + .../widgets/TabBarView/TabBarView_en-US.json | 1 + .../widgets/TabBarView/TabBarView_zh-CN.json | 1 + .../TabPageSelector_en-US.json | 1 + .../TabPageSelector_zh-CN.json | 1 + .../TabPageSelectorIndicator_en-US.json | 1 + .../TabPageSelectorIndicator_zh-CN.json | 1 + .../doc/widgets/Table/Table_en-US.json | 1 + .../doc/widgets/Table/Table_zh-CN.json | 1 + .../widgets/TableCell/TableCell_en-US.json | 1 + .../widgets/TableCell/TableCell_zh-CN.json | 1 + .../TableRowInkWell_en-US.json | 1 + .../TableRowInkWell_zh-CN.json | 1 + .../widgets/TapRegion/TapRegion_en-US.json | 1 + .../widgets/TapRegion/TapRegion_zh-CN.json | 1 + .../TapRegionSurface_en-US.json | 1 + .../TapRegionSurface_zh-CN.json | 1 + .../widgets/doc/widgets/Text/Text_en-US.json | 1 + .../widgets/doc/widgets/Text/Text_zh-CN.json | 1 + .../widgets/TextButton/TextButton_en-US.json | 1 + .../widgets/TextButton/TextButton_zh-CN.json | 1 + .../TextButtonTheme_en-US.json | 1 + .../TextButtonTheme_zh-CN.json | 1 + .../widgets/TextField/TextField_en-US.json | 1 + .../widgets/TextField/TextField_zh-CN.json | 1 + .../TextFieldTapRegion_en-US.json | 1 + .../TextFieldTapRegion_zh-CN.json | 1 + .../TextFormField/TextFormField_en-US.json | 1 + .../TextFormField/TextFormField_zh-CN.json | 1 + .../TextMagnifier/TextMagnifier_en-US.json | 1 + .../TextMagnifier/TextMagnifier_zh-CN.json | 1 + .../TextSelectionGestureDetector_en-US.json | 1 + .../TextSelectionGestureDetector_zh-CN.json | 1 + .../TextSelectionTheme_en-US.json | 1 + .../TextSelectionTheme_zh-CN.json | 1 + .../TextSelectionToolbar_en-US.json | 1 + .../TextSelectionToolbar_zh-CN.json | 1 + .../TextSelectionToolbarTextButton_en-US.json | 1 + .../TextSelectionToolbarTextButton_zh-CN.json | 1 + .../doc/widgets/Texture/Texture_en-US.json | 1 + .../doc/widgets/Texture/Texture_zh-CN.json | 1 + .../doc/widgets/Theme/Theme_en-US.json | 1 + .../doc/widgets/Theme/Theme_zh-CN.json | 1 + .../widgets/TickerMode/TickerMode_en-US.json | 1 + .../widgets/TickerMode/TickerMode_zh-CN.json | 1 + .../TimePickerDialog_en-US.json | 1 + .../TimePickerDialog_zh-CN.json | 1 + .../TimePickerTheme_en-US.json | 1 + .../TimePickerTheme_zh-CN.json | 1 + .../doc/widgets/Title/Title_en-US.json | 1 + .../doc/widgets/Title/Title_zh-CN.json | 1 + .../ToggleButtons/ToggleButtons_en-US.json | 1 + .../ToggleButtons/ToggleButtons_zh-CN.json | 1 + .../ToggleButtonsTheme_en-US.json | 1 + .../ToggleButtonsTheme_zh-CN.json | 1 + .../doc/widgets/Tooltip/Tooltip_en-US.json | 1 + .../doc/widgets/Tooltip/Tooltip_zh-CN.json | 1 + .../TooltipTheme/TooltipTheme_en-US.json | 1 + .../TooltipTheme/TooltipTheme_zh-CN.json | 1 + .../TooltipVisibility_en-US.json | 1 + .../TooltipVisibility_zh-CN.json | 1 + .../widgets/Transform/Transform_en-US.json | 1 + .../widgets/Transform/Transform_zh-CN.json | 1 + .../widgets/TreeSliver/TreeSliver_en-US.json | 1 + .../widgets/TreeSliver/TreeSliver_zh-CN.json | 1 + .../TweenAnimationBuilder_en-US.json | 1 + .../TweenAnimationBuilder_zh-CN.json | 1 + .../TwoDimensionalScrollView_en-US.json | 1 + .../TwoDimensionalScrollView_zh-CN.json | 1 + .../TwoDimensionalScrollable_en-US.json | 1 + .../TwoDimensionalScrollable_zh-CN.json | 1 + .../TwoDimensionalViewport_en-US.json | 1 + .../TwoDimensionalViewport_zh-CN.json | 1 + .../widgets/UiKitView/UiKitView_en-US.json | 1 + .../widgets/UiKitView/UiKitView_zh-CN.json | 1 + .../UnconstrainedBox_en-US.json | 1 + .../UnconstrainedBox_zh-CN.json | 1 + .../UndoHistory/UndoHistory_en-US.json | 1 + .../UndoHistory/UndoHistory_zh-CN.json | 1 + .../UniqueWidget/UniqueWidget_en-US.json | 1 + .../UniqueWidget/UniqueWidget_zh-CN.json | 1 + .../UnmanagedRestorationScope_en-US.json | 1 + .../UnmanagedRestorationScope_zh-CN.json | 1 + .../UserAccountsDrawerHeader_en-US.json | 1 + .../UserAccountsDrawerHeader_zh-CN.json | 1 + .../ValueListenableBuilder_en-US.json | 1 + .../ValueListenableBuilder_zh-CN.json | 1 + .../VerticalDivider_en-US.json | 1 + .../VerticalDivider_zh-CN.json | 1 + .../widgets/doc/widgets/View/View_en-US.json | 1 + .../widgets/doc/widgets/View/View_zh-CN.json | 1 + .../widgets/ViewAnchor/ViewAnchor_en-US.json | 1 + .../widgets/ViewAnchor/ViewAnchor_zh-CN.json | 1 + .../ViewCollection/ViewCollection_en-US.json | 1 + .../ViewCollection/ViewCollection_zh-CN.json | 1 + .../doc/widgets/Viewport/Viewport_en-US.json | 1 + .../doc/widgets/Viewport/Viewport_zh-CN.json | 1 + .../widgets/Visibility/Visibility_en-US.json | 1 + .../widgets/Visibility/Visibility_zh-CN.json | 1 + .../WidgetInspector_en-US.json | 1 + .../WidgetInspector_zh-CN.json | 1 + .../WidgetToRenderBoxAdapter_en-US.json | 1 + .../WidgetToRenderBoxAdapter_zh-CN.json | 1 + .../widgets/WidgetsApp/WidgetsApp_en-US.json | 1 + .../widgets/WidgetsApp/WidgetsApp_zh-CN.json | 1 + .../WillPopScope/WillPopScope_en-US.json | 1 + .../WillPopScope/WillPopScope_zh-CN.json | 1 + .../widgets/doc/widgets/Wrap/Wrap_en-US.json | 1 + .../widgets/doc/widgets/Wrap/Wrap_zh-CN.json | 1 + .../widgets/YearPicker/YearPicker_en-US.json | 1 + .../widgets/YearPicker/YearPicker_zh-CN.json | 1 + .../widgets/doc/widgets/translation_plan.md | 8 + .../toly_date_picker.dart | 537 +++++++++++------- .../WidgetInspector/node1_base.dart | 22 +- pubspec.lock | 22 +- .../flutter/generated_plugin_registrant.cc | 3 - windows/flutter/generated_plugins.cmake | 1 - 1119 files changed, 2152 insertions(+), 457 deletions(-) create mode 100644 modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Actions/Actions_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Actions/Actions_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Align/Align_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Align/Align_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AppBar/AppBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AppBar/AppBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/BackButton/BackButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/BackButton/BackButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Badge/Badge_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Badge/Badge_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Banner/Banner_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Banner/Banner_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Baseline/Baseline_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Baseline/Baseline_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Builder/Builder_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Builder/Builder_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Card/Card_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Card/Card_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Center/Center_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Center/Center_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Chip/Chip_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Chip/Chip_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Column/Column_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Column/Column_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Container/Container_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Container/Container_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DataTable/DataTable_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DataTable/DataTable_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Dialog/Dialog_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Dialog/Dialog_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Directionality/Directionality_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Directionality/Directionality_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Divider/Divider_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Divider/Divider_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Draggable/Draggable_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Draggable/Draggable_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Drawer/Drawer_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Drawer/Drawer_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/EditableText/EditableText_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/EditableText/EditableText_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Expanded/Expanded_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Expanded/Expanded_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Expansible/Expansible_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Expansible/Expansible_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Flex/Flex_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Flex/Flex_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Flexible/Flexible_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Flexible/Flexible_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Flow/Flow_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Flow/Flow_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Focus/Focus_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Focus/Focus_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Form/Form_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Form/Form_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FormField/FormField_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FormField/FormField_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/GridTile/GridTile_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/GridTile/GridTile_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/GridView/GridView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/GridView/GridView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Hero/Hero_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Hero/Hero_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Icon/Icon_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Icon/Icon_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/IconButton/IconButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/IconButton/IconButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Image/Image_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Image/Image_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Ink/Ink_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Ink/Ink_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/InkWell/InkWell_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/InkWell/InkWell_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/InputChip/InputChip_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/InputChip/InputChip_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ListBody/ListBody_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ListBody/ListBody_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ListTile/ListTile_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ListTile/ListTile_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ListView/ListView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ListView/ListView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Listener/Listener_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Listener/Listener_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Localizations/Localizations_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Localizations/Localizations_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Material/Material_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Material/Material_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MetaData/MetaData_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MetaData/MetaData_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Navigator/Navigator_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Navigator/Navigator_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Offstage/Offstage_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Offstage/Offstage_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Opacity/Opacity_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Opacity/Opacity_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Overlay/Overlay_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Overlay/Overlay_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Padding/Padding_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Padding/Padding_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PageView/PageView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PageView/PageView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PopScope/PopScope_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PopScope/PopScope_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Positioned/Positioned_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Positioned/Positioned_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Radio/Radio_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Radio/Radio_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawChip/RawChip_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawChip/RawChip_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawImage/RawImage_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawImage/RawImage_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawView/RawView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawView/RawView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RichText/RichText_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RichText/RichText_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Router/Router_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Router/Router_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Row/Row_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Row/Row_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Semantics/Semantics_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Semantics/Semantics_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Slider/Slider_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Slider/Slider_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverList/SliverList_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverList/SliverList_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Spacer/Spacer_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Spacer/Spacer_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Stack/Stack_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Stack/Stack_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Stepper/Stepper_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Stepper/Stepper_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Switch/Switch_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Switch/Switch_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Tab/Tab_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Tab/Tab_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TabBar/TabBar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TabBar/TabBar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Table/Table_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Table/Table_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TableCell/TableCell_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TableCell/TableCell_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Text/Text_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Text/Text_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextButton/TextButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextButton/TextButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextField/TextField_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextField/TextField_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Texture/Texture_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Texture/Texture_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Theme/Theme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Theme/Theme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Title/Title_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Title/Title_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Transform/Transform_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Transform/Transform_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/View/View_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/View/View_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Viewport/Viewport_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Viewport/Viewport_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Visibility/Visibility_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Visibility/Visibility_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/Wrap/Wrap_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/Wrap/Wrap_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_en-US.json create mode 100644 modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_zh-CN.json create mode 100644 modules/widget_system/widgets/doc/widgets/translation_plan.md diff --git a/README-EN.md b/README-EN.md index 11044f8f6..f2be1229c 100644 --- a/README-EN.md +++ b/README-EN.md @@ -35,10 +35,10 @@ FlutterUnit is a cross-platform experience app, Here, you can fully explore the ``` ·]>> flutter --version -Flutter 3.32.0 • channel stable • https://github.com/flutter/flutter.git -Framework • revision be698c48a6 (2 days ago) • 2025-05-19 12:59:14 -0700 -Engine • revision 1881800949 (2 days ago) • 2025-05-19 10:54:07 -0700 -Tools • Dart 3.8.0 • DevTools 2.45.1 +Flutter 3.35.1 • channel stable • https://github.com/flutter/flutter.git +Framework • revision 20f8274939 (6 days ago) • 2025-08-14 10:53:09 -0700 +Engine • hash 6cd51c08a88e7bbe848a762c20ad3ecb8b063c0e (revision 1e9a811bf8) (7 days ago) • 2025-08-13 23:35:25.000Z +Tools • Dart 3.9.0 • DevTools 2.48.0 ``` #### Build Application diff --git a/README.md b/README.md index 9e4306022..0881234c8 100644 --- a/README.md +++ b/README.md @@ -34,10 +34,10 @@ FlutterUnit 是一个全平台体验应用,你可以在这里尽情体验 Flut ``` ·]>> flutter --version -Flutter 3.32.0 • channel stable • https://github.com/flutter/flutter.git -Framework • revision be698c48a6 (2 days ago) • 2025-05-19 12:59:14 -0700 -Engine • revision 1881800949 (2 days ago) • 2025-05-19 10:54:07 -0700 -Tools • Dart 3.8.0 • DevTools 2.45.1 +Flutter 3.35.1 • channel stable • https://github.com/flutter/flutter.git +Framework • revision 20f8274939 (6 days ago) • 2025-08-14 10:53:09 -0700 +Engine • hash 6cd51c08a88e7bbe848a762c20ad3ecb8b063c0e (revision 1e9a811bf8) (7 days ago) • 2025-08-13 23:35:25.000Z +Tools • Dart 3.9.0 • DevTools 2.48.0 ``` #### 构建应用 diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 43f825ccf..faea87d4e 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,19 +6,11 @@ #include "generated_plugin_registrant.h" -#include -#include #include #include #include void fl_register_plugins(FlPluginRegistry* registry) { - g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); - file_selector_plugin_register_with_registrar(file_selector_linux_registrar); - g_autoptr(FlPluginRegistrar) open_file_linux_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "OpenFileLinuxPlugin"); - open_file_linux_plugin_register_with_registrar(open_file_linux_registrar); g_autoptr(FlPluginRegistrar) screen_retriever_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverLinuxPlugin"); screen_retriever_linux_plugin_register_with_registrar(screen_retriever_linux_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 95b737f5c..4f427dd2a 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,8 +3,6 @@ # list(APPEND FLUTTER_PLUGIN_LIST - file_selector_linux - open_file_linux screen_retriever_linux url_launcher_linux window_manager diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 25112d2fa..ab2f2a3fc 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,10 +6,8 @@ import FlutterMacOS import Foundation import file_picker -import open_file_mac import package_info_plus import path_provider_foundation -import quill_native_bridge_macos import screen_retriever_macos import share_plus import shared_preferences_foundation @@ -20,10 +18,8 @@ import window_manager func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin")) - OpenFilePlugin.register(with: registry.registrar(forPlugin: "OpenFilePlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) - QuillNativeBridgePlugin.register(with: registry.registrar(forPlugin: "QuillNativeBridgePlugin")) ScreenRetrieverMacosPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverMacosPlugin")) SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin")) diff --git a/modules/basic_system/components/lib/flutter_ui/toly_date_picker.dart b/modules/basic_system/components/lib/flutter_ui/toly_date_picker.dart index 7d7bc385a..495884cbc 100644 --- a/modules/basic_system/components/lib/flutter_ui/toly_date_picker.dart +++ b/modules/basic_system/components/lib/flutter_ui/toly_date_picker.dart @@ -144,20 +144,20 @@ Future showDatePicker({ firstDate = DateUtils.dateOnly(firstDate); lastDate = DateUtils.dateOnly(lastDate); assert( - !lastDate.isBefore(firstDate), - 'lastDate $lastDate must be on or after firstDate $firstDate.', + !lastDate.isBefore(firstDate), + 'lastDate $lastDate must be on or after firstDate $firstDate.', ); assert( - !initialDate.isBefore(firstDate), - 'initialDate $initialDate must be on or after firstDate $firstDate.', + !initialDate.isBefore(firstDate), + 'initialDate $initialDate must be on or after firstDate $firstDate.', ); assert( - !initialDate.isAfter(lastDate), - 'initialDate $initialDate must be on or before lastDate $lastDate.', + !initialDate.isAfter(lastDate), + 'initialDate $initialDate must be on or before lastDate $lastDate.', ); assert( - selectableDayPredicate == null || selectableDayPredicate(initialDate), - 'Provided initialDate $initialDate must satisfy provided selectableDayPredicate.', + selectableDayPredicate == null || selectableDayPredicate(initialDate), + 'Provided initialDate $initialDate must satisfy provided selectableDayPredicate.', ); assert(initialEntryMode != null); assert(useRootNavigator != null); @@ -237,7 +237,7 @@ class DatePickerDialog extends StatefulWidget { this.fieldLabelText, this.keyboardType, this.restorationId, - }) : assert(initialDate != null), + }) : assert(initialDate != null), assert(firstDate != null), assert(lastDate != null), initialDate = DateUtils.dateOnly(initialDate), @@ -247,20 +247,21 @@ class DatePickerDialog extends StatefulWidget { assert(initialEntryMode != null), assert(initialCalendarMode != null) { assert( - !this.lastDate.isBefore(this.firstDate), - 'lastDate ${this.lastDate} must be on or after firstDate ${this.firstDate}.', + !this.lastDate.isBefore(this.firstDate), + 'lastDate ${this.lastDate} must be on or after firstDate ${this.firstDate}.', ); assert( - !this.initialDate.isBefore(this.firstDate), - 'initialDate ${this.initialDate} must be on or after firstDate ${this.firstDate}.', + !this.initialDate.isBefore(this.firstDate), + 'initialDate ${this.initialDate} must be on or after firstDate ${this.firstDate}.', ); assert( - !this.initialDate.isAfter(this.lastDate), - 'initialDate ${this.initialDate} must be on or before lastDate ${this.lastDate}.', + !this.initialDate.isAfter(this.lastDate), + 'initialDate ${this.initialDate} must be on or before lastDate ${this.lastDate}.', ); assert( - selectableDayPredicate == null || selectableDayPredicate!(this.initialDate), - 'Provided initialDate ${this.initialDate} must satisfy provided selectableDayPredicate', + selectableDayPredicate == null || + selectableDayPredicate!(this.initialDate), + 'Provided initialDate ${this.initialDate} must satisfy provided selectableDayPredicate', ); } @@ -343,10 +344,14 @@ class DatePickerDialog extends StatefulWidget { State createState() => _DatePickerDialogState(); } -class _DatePickerDialogState extends State with RestorationMixin { - late final RestorableDateTime _selectedDate = RestorableDateTime(widget.initialDate); - late final _RestorableDatePickerEntryMode _entryMode = _RestorableDatePickerEntryMode(widget.initialEntryMode); - final _RestorableAutovalidateMode _autovalidateMode = _RestorableAutovalidateMode(AutovalidateMode.disabled); +class _DatePickerDialogState extends State + with RestorationMixin { + late final RestorableDateTime _selectedDate = + RestorableDateTime(widget.initialDate); + late final _RestorableDatePickerEntryMode _entryMode = + _RestorableDatePickerEntryMode(widget.initialEntryMode); + final _RestorableAutovalidateMode _autovalidateMode = + _RestorableAutovalidateMode(AutovalidateMode.disabled); @override String? get restorationId => widget.restorationId; @@ -362,7 +367,8 @@ class _DatePickerDialogState extends State with RestorationMix final GlobalKey _formKey = GlobalKey(); void _handleOk() { - if (_entryMode.value == DatePickerEntryMode.input || _entryMode.value == DatePickerEntryMode.inputOnly) { + if (_entryMode.value == DatePickerEntryMode.input || + _entryMode.value == DatePickerEntryMode.inputOnly) { final FormState form = _formKey.currentState!; if (!form.validate()) { setState(() => _autovalidateMode.value = AutovalidateMode.always); @@ -424,7 +430,8 @@ class _DatePickerDialogState extends State with RestorationMix } } - static const Map _formShortcutMap = { + static const Map _formShortcutMap = + { // Pressing enter on the field will move focus to the next field or control. SingleActivator(LogicalKeyboardKey.enter): NextFocusIntent(), }; @@ -433,12 +440,14 @@ class _DatePickerDialogState extends State with RestorationMix Widget build(BuildContext context) { final ThemeData theme = Theme.of(context); final ColorScheme colorScheme = theme.colorScheme; - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); final Orientation orientation = MediaQuery.of(context).orientation; final TextTheme textTheme = theme.textTheme; // Constrain the textScaleFactor to the largest supported value to prevent // layout issues. - final double textScaleFactor = math.min(MediaQuery.of(context).textScaleFactor, 1.3); + final double textScaleFactor = + math.min(MediaQuery.of(context).textScaleFactor, 1.3); final String dateText = localizations.formatMediumDate(_selectedDate.value); final Color onPrimarySurface = colorScheme.brightness == Brightness.light @@ -486,7 +495,9 @@ class _DatePickerDialogState extends State with RestorationMix autovalidateMode: _autovalidateMode.value, child: Container( padding: const EdgeInsets.symmetric(horizontal: 24), - height: orientation == Orientation.portrait ? _inputFormPortraitHeight : _inputFormLandscapeHeight, + height: orientation == Orientation.portrait + ? _inputFormPortraitHeight + : _inputFormLandscapeHeight, child: Shortcuts( shortcuts: _formShortcutMap, child: Column( @@ -559,7 +570,8 @@ class _DatePickerDialogState extends State with RestorationMix final Size dialogSize = _dialogSize(context) * textScaleFactor; return Dialog( - insetPadding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0), + insetPadding: + const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0), clipBehavior: Clip.antiAlias, child: AnimatedContainer( width: dialogSize.width, @@ -611,10 +623,11 @@ class _DatePickerDialogState extends State with RestorationMix // A restorable [DatePickerEntryMode] value. // // This serializes each entry as a unique `int` value. -class _RestorableDatePickerEntryMode extends RestorableValue { +class _RestorableDatePickerEntryMode + extends RestorableValue { _RestorableDatePickerEntryMode( - DatePickerEntryMode defaultValue, - ) : _defaultValue = defaultValue; + DatePickerEntryMode defaultValue, + ) : _defaultValue = defaultValue; final DatePickerEntryMode _defaultValue; @@ -628,7 +641,8 @@ class _RestorableDatePickerEntryMode extends RestorableValue DatePickerEntryMode.values[data! as int]; + DatePickerEntryMode fromPrimitives(Object? data) => + DatePickerEntryMode.values[data! as int]; @override Object? toPrimitives() => value.index; @@ -639,8 +653,8 @@ class _RestorableDatePickerEntryMode extends RestorableValue { _RestorableAutovalidateMode( - AutovalidateMode defaultValue, - ) : _defaultValue = defaultValue; + AutovalidateMode defaultValue, + ) : _defaultValue = defaultValue; final AutovalidateMode _defaultValue; @@ -654,7 +668,8 @@ class _RestorableAutovalidateMode extends RestorableValue { } @override - AutovalidateMode fromPrimitives(Object? data) => AutovalidateMode.values[data! as int]; + AutovalidateMode fromPrimitives(Object? data) => + AutovalidateMode.values[data! as int]; @override Object? toPrimitives() => value.index; @@ -672,7 +687,6 @@ class _RestorableAutovalidateMode extends RestorableValue { /// [helpText], [orientation], [icon], [onIconPressed] are required and must be /// non-null. class _DatePickerHeader extends StatelessWidget { - /// Creates a header for use in a date picker dialog. const _DatePickerHeader({ required this.helpText, @@ -682,7 +696,7 @@ class _DatePickerHeader extends StatelessWidget { required this.orientation, this.isShort = false, this.entryModeButton, - }) : assert(helpText != null), + }) : assert(helpText != null), assert(orientation != null), assert(isShort != null); @@ -727,8 +741,10 @@ class _DatePickerHeader extends StatelessWidget { // The header should use the primary color in light themes and surface color in dark final bool isDark = colorScheme.brightness == Brightness.dark; - final Color primarySurfaceColor = isDark ? colorScheme.surface : colorScheme.primary; - final Color onPrimarySurfaceColor = isDark ? colorScheme.onSurface : colorScheme.onPrimary; + final Color primarySurfaceColor = + isDark ? colorScheme.surface : colorScheme.primary; + final Color onPrimarySurfaceColor = + isDark ? colorScheme.onSurface : colorScheme.onPrimary; final TextStyle? helpStyle = textTheme.headlineMedium?.copyWith( color: onPrimarySurfaceColor, @@ -768,8 +784,7 @@ class _DatePickerHeader extends StatelessWidget { Row( children: [ Expanded(child: title), - if (entryModeButton != null) - entryModeButton!, + if (entryModeButton != null) entryModeButton!, ], ), ], @@ -935,37 +950,40 @@ Future showDateRangePicker({ }) async { assert(context != null); assert( - initialDateRange == null || (initialDateRange.start != null && initialDateRange.end != null), - 'initialDateRange must be null or have non-null start and end dates.', + initialDateRange == null || + (initialDateRange.start != null && initialDateRange.end != null), + 'initialDateRange must be null or have non-null start and end dates.', ); assert( - initialDateRange == null || !initialDateRange.start.isAfter(initialDateRange.end), - "initialDateRange's start date must not be after it's end date.", + initialDateRange == null || + !initialDateRange.start.isAfter(initialDateRange.end), + "initialDateRange's start date must not be after it's end date.", ); - initialDateRange = initialDateRange == null ? null : DateUtils.datesOnly(initialDateRange); + initialDateRange = + initialDateRange == null ? null : DateUtils.datesOnly(initialDateRange); assert(firstDate != null); firstDate = DateUtils.dateOnly(firstDate); assert(lastDate != null); lastDate = DateUtils.dateOnly(lastDate); assert( - !lastDate.isBefore(firstDate), - 'lastDate $lastDate must be on or after firstDate $firstDate.', + !lastDate.isBefore(firstDate), + 'lastDate $lastDate must be on or after firstDate $firstDate.', ); assert( - initialDateRange == null || !initialDateRange.start.isBefore(firstDate), - "initialDateRange's start date must be on or after firstDate $firstDate.", + initialDateRange == null || !initialDateRange.start.isBefore(firstDate), + "initialDateRange's start date must be on or after firstDate $firstDate.", ); assert( - initialDateRange == null || !initialDateRange.end.isBefore(firstDate), - "initialDateRange's end date must be on or after firstDate $firstDate.", + initialDateRange == null || !initialDateRange.end.isBefore(firstDate), + "initialDateRange's end date must be on or after firstDate $firstDate.", ); assert( - initialDateRange == null || !initialDateRange.start.isAfter(lastDate), - "initialDateRange's start date must be on or before lastDate $lastDate.", + initialDateRange == null || !initialDateRange.start.isAfter(lastDate), + "initialDateRange's start date must be on or before lastDate $lastDate.", ); assert( - initialDateRange == null || !initialDateRange.end.isAfter(lastDate), - "initialDateRange's end date must be on or before lastDate $lastDate.", + initialDateRange == null || !initialDateRange.end.isAfter(lastDate), + "initialDateRange's end date must be on or before lastDate $lastDate.", ); currentDate = DateUtils.dateOnly(currentDate ?? DateTime.now()); assert(initialEntryMode != null); @@ -1024,12 +1042,13 @@ Future showDateRangePicker({ /// is in the same year as the `endDate` then it will use the short month /// day format (i.e. 'Jan 21'). Otherwise it will return the short date format /// (i.e. 'Jan 21, 2020'). -String _formatRangeStartDate(MaterialLocalizations localizations, DateTime? startDate, DateTime? endDate) { +String _formatRangeStartDate(MaterialLocalizations localizations, + DateTime? startDate, DateTime? endDate) { return startDate == null ? localizations.dateRangeStartLabel : (endDate == null || startDate.year == endDate.year) - ? localizations.formatShortMonthDay(startDate) - : localizations.formatShortDate(startDate); + ? localizations.formatShortMonthDay(startDate) + : localizations.formatShortDate(startDate); } /// Returns an locale-appropriate string to describe the end of a date range. @@ -1038,12 +1057,15 @@ String _formatRangeStartDate(MaterialLocalizations localizations, DateTime? star /// is in the same year as the `startDate` and the `currentDate` then it will /// just use the short month day format (i.e. 'Jan 21'), otherwise it will /// include the year (i.e. 'Jan 21, 2020'). -String _formatRangeEndDate(MaterialLocalizations localizations, DateTime? startDate, DateTime? endDate, DateTime currentDate) { +String _formatRangeEndDate(MaterialLocalizations localizations, + DateTime? startDate, DateTime? endDate, DateTime currentDate) { return endDate == null ? localizations.dateRangeEndLabel - : (startDate != null && startDate.year == endDate.year && startDate.year == currentDate.year) - ? localizations.formatShortMonthDay(endDate) - : localizations.formatShortDate(endDate); + : (startDate != null && + startDate.year == endDate.year && + startDate.year == currentDate.year) + ? localizations.formatShortMonthDay(endDate) + : localizations.formatShortDate(endDate); } /// A Material-style date range picker dialog. @@ -1199,13 +1221,18 @@ class DateRangePickerDialog extends StatefulWidget { State createState() => _DateRangePickerDialogState(); } -class _DateRangePickerDialogState extends State with RestorationMixin { - late final _RestorableDatePickerEntryMode _entryMode = _RestorableDatePickerEntryMode(widget.initialEntryMode); - late final RestorableDateTimeN _selectedStart = RestorableDateTimeN(widget.initialDateRange?.start); - late final RestorableDateTimeN _selectedEnd = RestorableDateTimeN(widget.initialDateRange?.end); +class _DateRangePickerDialogState extends State + with RestorationMixin { + late final _RestorableDatePickerEntryMode _entryMode = + _RestorableDatePickerEntryMode(widget.initialEntryMode); + late final RestorableDateTimeN _selectedStart = + RestorableDateTimeN(widget.initialDateRange?.start); + late final RestorableDateTimeN _selectedEnd = + RestorableDateTimeN(widget.initialDateRange?.end); final RestorableBool _autoValidate = RestorableBool(false); final GlobalKey _calendarPickerKey = GlobalKey(); - final GlobalKey<_InputDateRangePickerState> _inputPickerKey = GlobalKey<_InputDateRangePickerState>(); + final GlobalKey<_InputDateRangePickerState> _inputPickerKey = + GlobalKey<_InputDateRangePickerState>(); @override String? get restorationId => widget.restorationId; @@ -1219,7 +1246,8 @@ class _DateRangePickerDialogState extends State with Rest } void _handleOk() { - if (_entryMode.value == DatePickerEntryMode.input || _entryMode.value == DatePickerEntryMode.inputOnly) { + if (_entryMode.value == DatePickerEntryMode.input || + _entryMode.value == DatePickerEntryMode.inputOnly) { final _InputDateRangePickerState picker = _inputPickerKey.currentState!; if (!picker.validate()) { setState(() { @@ -1248,19 +1276,23 @@ class _DateRangePickerDialogState extends State with Rest break; case DatePickerEntryMode.input: - // Validate the range dates + // Validate the range dates if (_selectedStart.value != null && - (_selectedStart.value!.isBefore(widget.firstDate) || _selectedStart.value!.isAfter(widget.lastDate))) { + (_selectedStart.value!.isBefore(widget.firstDate) || + _selectedStart.value!.isAfter(widget.lastDate))) { _selectedStart.value = null; // With no valid start date, having an end date makes no sense for the UI. _selectedEnd.value = null; } if (_selectedEnd.value != null && - (_selectedEnd.value!.isBefore(widget.firstDate) || _selectedEnd.value!.isAfter(widget.lastDate))) { + (_selectedEnd.value!.isBefore(widget.firstDate) || + _selectedEnd.value!.isAfter(widget.lastDate))) { _selectedEnd.value = null; } // If invalid range (start after end), then just use the start date - if (_selectedStart.value != null && _selectedEnd.value != null && _selectedStart.value!.isAfter(_selectedEnd.value!)) { + if (_selectedStart.value != null && + _selectedEnd.value != null && + _selectedStart.value!.isAfter(_selectedEnd.value!)) { _selectedEnd.value = null; } _entryMode.value = DatePickerEntryMode.calendar; @@ -1282,14 +1314,16 @@ class _DateRangePickerDialogState extends State with Rest setState(() => _selectedEnd.value = date); } - bool get _hasSelectedDateRange => _selectedStart.value != null && _selectedEnd.value != null; + bool get _hasSelectedDateRange => + _selectedStart.value != null && _selectedEnd.value != null; @override Widget build(BuildContext context) { final MediaQueryData mediaQuery = MediaQuery.of(context); final Orientation orientation = mediaQuery.orientation; final double textScaleFactor = math.min(mediaQuery.textScaleFactor, 1.3); - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); final ColorScheme colors = Theme.of(context).colorScheme; final Color onPrimarySurface = colors.brightness == Brightness.light ? colors.onPrimary @@ -1319,12 +1353,12 @@ class _DateRangePickerDialogState extends State with Rest onCancel: _handleCancel, entryModeButton: showEntryModeButton ? IconButton( - icon: const Icon(Icons.edit), - padding: EdgeInsets.zero, - color: onPrimarySurface, - tooltip: localizations.inputDateModeButtonLabel, - onPressed: _handleEntryModeToggle, - ) + icon: const Icon(Icons.edit), + padding: EdgeInsets.zero, + color: onPrimarySurface, + tooltip: localizations.inputDateModeButtonLabel, + onPressed: _handleEntryModeToggle, + ) : null, confirmText: widget.saveText ?? localizations.saveButtonLabel, helpText: widget.helpText ?? localizations.dateRangePickerHelpText, @@ -1376,20 +1410,23 @@ class _DateRangePickerDialogState extends State with Rest onCancel: _handleCancel, entryModeButton: showEntryModeButton ? IconButton( - icon: const Icon(Icons.calendar_today), - padding: EdgeInsets.zero, - color: onPrimarySurface, - tooltip: localizations.calendarModeButtonLabel, - onPressed: _handleEntryModeToggle, - ) + icon: const Icon(Icons.calendar_today), + padding: EdgeInsets.zero, + color: onPrimarySurface, + tooltip: localizations.calendarModeButtonLabel, + onPressed: _handleEntryModeToggle, + ) : null, confirmText: widget.confirmText ?? localizations.okButtonLabel, cancelText: widget.cancelText ?? localizations.cancelButtonLabel, helpText: widget.helpText ?? localizations.dateRangePickerHelpText, ); final DialogThemeData dialogTheme = Theme.of(context).dialogTheme; - size = orientation == Orientation.portrait ? _inputPortraitDialogSize : _inputRangeLandscapeDialogSize; - insetPadding = const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0); + size = orientation == Orientation.portrait + ? _inputPortraitDialogSize + : _inputRangeLandscapeDialogSize; + insetPadding = + const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0); shape = dialogTheme.shape; elevation = dialogTheme.elevation ?? 24; break; @@ -1452,21 +1489,27 @@ class _CalendarRangePickerDialog extends StatelessWidget { Widget build(BuildContext context) { final ThemeData theme = Theme.of(context); final ColorScheme colorScheme = theme.colorScheme; - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); final Orientation orientation = MediaQuery.of(context).orientation; final TextTheme textTheme = theme.textTheme; final Color headerForeground = colorScheme.brightness == Brightness.light ? colorScheme.onPrimary : colorScheme.onSurface; final Color headerDisabledForeground = headerForeground.withOpacity(0.38); - final String startDateText = _formatRangeStartDate(localizations, selectedStartDate, selectedEndDate); - final String endDateText = _formatRangeEndDate(localizations, selectedStartDate, selectedEndDate, DateTime.now()); + final String startDateText = _formatRangeStartDate( + localizations, selectedStartDate, selectedEndDate); + final String endDateText = _formatRangeEndDate( + localizations, selectedStartDate, selectedEndDate, DateTime.now()); final TextStyle? headlineStyle = textTheme.headlineMedium; final TextStyle? startDateStyle = headlineStyle?.apply( - color: selectedStartDate != null ? headerForeground : headerDisabledForeground, + color: selectedStartDate != null + ? headerForeground + : headerDisabledForeground, ); final TextStyle? endDateStyle = headlineStyle?.apply( - color: selectedEndDate != null ? headerForeground : headerDisabledForeground, + color: + selectedEndDate != null ? headerForeground : headerDisabledForeground, ); final TextStyle saveButtonStyle = textTheme.headlineMedium!.apply( color: onConfirm != null ? headerForeground : headerDisabledForeground, @@ -1493,7 +1536,8 @@ class _CalendarRangePickerDialog extends StatelessWidget { bottom: PreferredSize( preferredSize: const Size(double.infinity, 64), child: Row(children: [ - SizedBox(width: MediaQuery.of(context).size.width < 360 ? 42 : 72), + SizedBox( + width: MediaQuery.of(context).size.width < 360 ? 42 : 72), Expanded( child: Semantics( label: '$helpText $startDateText to $endDateText', @@ -1516,7 +1560,9 @@ class _CalendarRangePickerDialog extends StatelessWidget { maxLines: 1, overflow: TextOverflow.ellipsis, ), - Text(' – ', style: startDateStyle, + Text( + ' – ', + style: startDateStyle, ), Flexible( child: Text( @@ -1533,7 +1579,8 @@ class _CalendarRangePickerDialog extends StatelessWidget { ), ), ), - if (orientation == Orientation.portrait && entryModeButton != null) + if (orientation == Orientation.portrait && + entryModeButton != null) Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0), child: entryModeButton, @@ -1577,20 +1624,25 @@ class _CalendarDateRangePicker extends StatefulWidget { DateTime? currentDate, required this.onStartDateChanged, required this.onEndDateChanged, - }) : initialStartDate = initialStartDate != null ? DateUtils.dateOnly(initialStartDate) : null, - initialEndDate = initialEndDate != null ? DateUtils.dateOnly(initialEndDate) : null, + }) : initialStartDate = initialStartDate != null + ? DateUtils.dateOnly(initialStartDate) + : null, + initialEndDate = + initialEndDate != null ? DateUtils.dateOnly(initialEndDate) : null, assert(firstDate != null), assert(lastDate != null), firstDate = DateUtils.dateOnly(firstDate), lastDate = DateUtils.dateOnly(lastDate), currentDate = DateUtils.dateOnly(currentDate ?? DateTime.now()) { assert( - this.initialStartDate == null || this.initialEndDate == null || !this.initialStartDate!.isAfter(initialEndDate!), - 'initialStartDate must be on or before initialEndDate.', + this.initialStartDate == null || + this.initialEndDate == null || + !this.initialStartDate!.isAfter(initialEndDate!), + 'initialStartDate must be on or before initialEndDate.', ); assert( - !this.lastDate.isBefore(this.firstDate), - 'firstDate must be on or before lastDate.', + !this.lastDate.isBefore(this.firstDate), + 'firstDate must be on or before lastDate.', ); } @@ -1616,7 +1668,8 @@ class _CalendarDateRangePicker extends StatefulWidget { final ValueChanged? onEndDateChanged; @override - _CalendarDateRangePickerState createState() => _CalendarDateRangePickerState(); + _CalendarDateRangePickerState createState() => + _CalendarDateRangePickerState(); } class _CalendarDateRangePickerState extends State<_CalendarDateRangePicker> { @@ -1665,7 +1718,8 @@ class _CalendarDateRangePickerState extends State<_CalendarDateRangePicker> { } } - int get _numberOfMonths => DateUtils.monthDelta(widget.firstDate, widget.lastDate) + 1; + int get _numberOfMonths => + DateUtils.monthDelta(widget.firstDate, widget.lastDate) + 1; void _vibrate() { switch (Theme.of(context).platform) { @@ -1693,7 +1747,9 @@ class _CalendarDateRangePickerState extends State<_CalendarDateRangePicker> { void _updateSelection(DateTime date) { _vibrate(); setState(() { - if (_startDate != null && _endDate == null && !date.isBefore(_startDate!)) { + if (_startDate != null && + _endDate == null && + !date.isBefore(_startDate!)) { _endDate = date; widget.onEndDateChanged?.call(_endDate); } else { @@ -1707,15 +1763,20 @@ class _CalendarDateRangePickerState extends State<_CalendarDateRangePicker> { }); } - Widget _buildMonthItem(BuildContext context, int index, bool beforeInitialMonth) { + Widget _buildMonthItem( + BuildContext context, int index, bool beforeInitialMonth) { final int monthIndex = beforeInitialMonth ? _initialMonthIndex - index - 1 : _initialMonthIndex + index; - final DateTime month = DateUtils.addMonthsToMonthDate(widget.firstDate, monthIndex); + final DateTime month = + DateUtils.addMonthsToMonthDate(widget.firstDate, monthIndex); return Stack( alignment: Alignment.center, children: [ - Text("${month.month}",style: TextStyle(fontSize: 200,color: Colors.grey.withOpacity(0.1)),), + Text( + "${month.month}", + style: TextStyle(fontSize: 200, color: Colors.grey.withOpacity(0.1)), + ), _MonthItem( selectedDateStart: _startDate, selectedDateEnd: _endDate, @@ -1741,7 +1802,8 @@ class _CalendarDateRangePickerState extends State<_CalendarDateRangePicker> { child: _CalendarKeyboardNavigator( firstDate: widget.firstDate, lastDate: widget.lastDate, - initialFocusedDay: _startDate ?? widget.initialStartDate ?? widget.currentDate, + initialFocusedDay: + _startDate ?? widget.initialStartDate ?? widget.currentDate, // In order to prevent performance issues when displaying the // correct initial month, 2 `SliverList`s are used to split the // months. The first item in the second SliverList is the initial @@ -1753,14 +1815,16 @@ class _CalendarDateRangePickerState extends State<_CalendarDateRangePicker> { slivers: [ SliverList( delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) => _buildMonthItem(context, index, true), + (BuildContext context, int index) => + _buildMonthItem(context, index, true), childCount: _initialMonthIndex, ), ), SliverList( key: sliverAfterKey, delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) => _buildMonthItem(context, index, false), + (BuildContext context, int index) => + _buildMonthItem(context, index, false), childCount: _numberOfMonths - _initialMonthIndex, ), ), @@ -1787,16 +1851,22 @@ class _CalendarKeyboardNavigator extends StatefulWidget { final DateTime initialFocusedDay; @override - _CalendarKeyboardNavigatorState createState() => _CalendarKeyboardNavigatorState(); + _CalendarKeyboardNavigatorState createState() => + _CalendarKeyboardNavigatorState(); } -class _CalendarKeyboardNavigatorState extends State<_CalendarKeyboardNavigator> { - - final Map _shortcutMap = const { - SingleActivator(LogicalKeyboardKey.arrowLeft): DirectionalFocusIntent(TraversalDirection.left), - SingleActivator(LogicalKeyboardKey.arrowRight): DirectionalFocusIntent(TraversalDirection.right), - SingleActivator(LogicalKeyboardKey.arrowDown): DirectionalFocusIntent(TraversalDirection.down), - SingleActivator(LogicalKeyboardKey.arrowUp): DirectionalFocusIntent(TraversalDirection.up), +class _CalendarKeyboardNavigatorState + extends State<_CalendarKeyboardNavigator> { + final Map _shortcutMap = + const { + SingleActivator(LogicalKeyboardKey.arrowLeft): + DirectionalFocusIntent(TraversalDirection.left), + SingleActivator(LogicalKeyboardKey.arrowRight): + DirectionalFocusIntent(TraversalDirection.right), + SingleActivator(LogicalKeyboardKey.arrowDown): + DirectionalFocusIntent(TraversalDirection.down), + SingleActivator(LogicalKeyboardKey.arrowUp): + DirectionalFocusIntent(TraversalDirection.up), }; late Map> _actionMap; late FocusNode _dayGridFocus; @@ -1808,9 +1878,12 @@ class _CalendarKeyboardNavigatorState extends State<_CalendarKeyboardNavigator> super.initState(); _actionMap = >{ - NextFocusIntent: CallbackAction(onInvoke: _handleGridNextFocus), - PreviousFocusIntent: CallbackAction(onInvoke: _handleGridPreviousFocus), - DirectionalFocusIntent: CallbackAction(onInvoke: _handleDirectionFocus), + NextFocusIntent: + CallbackAction(onInvoke: _handleGridNextFocus), + PreviousFocusIntent: CallbackAction( + onInvoke: _handleGridPreviousFocus), + DirectionalFocusIntent: CallbackAction( + onInvoke: _handleDirectionFocus), }; _dayGridFocus = FocusNode(debugLabel: 'Day Grid'); } @@ -1853,7 +1926,8 @@ class _CalendarKeyboardNavigatorState extends State<_CalendarKeyboardNavigator> void _handleDirectionFocus(DirectionalFocusIntent intent) { assert(_focusedDay != null); setState(() { - final DateTime? nextDate = _nextDateInDirection(_focusedDay!, intent.direction); + final DateTime? nextDate = + _nextDateInDirection(_focusedDay!, intent.direction); if (nextDate != null) { _focusedDay = nextDate; _dayTraversalDirection = intent.direction; @@ -1861,14 +1935,16 @@ class _CalendarKeyboardNavigatorState extends State<_CalendarKeyboardNavigator> }); } - static const Map _directionOffset = { + static const Map _directionOffset = + { TraversalDirection.up: -DateTime.daysPerWeek, TraversalDirection.right: 1, TraversalDirection.down: DateTime.daysPerWeek, TraversalDirection.left: -1, }; - int _dayDirectionOffset(TraversalDirection traversalDirection, TextDirection textDirection) { + int _dayDirectionOffset( + TraversalDirection traversalDirection, TextDirection textDirection) { // Swap left and right if the text direction if RTL if (textDirection == TextDirection.rtl) { if (traversalDirection == TraversalDirection.left) { @@ -1882,8 +1958,10 @@ class _CalendarKeyboardNavigatorState extends State<_CalendarKeyboardNavigator> DateTime? _nextDateInDirection(DateTime date, TraversalDirection direction) { final TextDirection textDirection = Directionality.of(context); - final DateTime nextDate = DateUtils.addDaysToDate(date, _dayDirectionOffset(direction, textDirection)); - if (!nextDate.isBefore(widget.firstDate) && !nextDate.isAfter(widget.lastDate)) { + final DateTime nextDate = DateUtils.addDaysToDate( + date, _dayDirectionOffset(direction, textDirection)); + if (!nextDate.isBefore(widget.firstDate) && + !nextDate.isAfter(widget.lastDate)) { return nextDate; } return null; @@ -1921,7 +1999,8 @@ class _FocusedDate extends InheritedWidget { @override bool updateShouldNotify(_FocusedDate oldWidget) { - return !DateUtils.isSameDay(date, oldWidget.date) || scrollDirection != oldWidget.scrollDirection; + return !DateUtils.isSameDay(date, oldWidget.date) || + scrollDirection != oldWidget.scrollDirection; } static _FocusedDate? of(BuildContext context) { @@ -1929,7 +2008,6 @@ class _FocusedDate extends InheritedWidget { } } - class _DayHeaders extends StatelessWidget { const _DayHeaders(); @@ -1951,7 +2029,8 @@ class _DayHeaders extends StatelessWidget { /// _ _ _ _ 1 2 3 /// 4 5 6 7 8 9 10 /// ``` - List _getDayHeaders(TextStyle headerStyle, MaterialLocalizations localizations) { + List _getDayHeaders( + TextStyle headerStyle, MaterialLocalizations localizations) { final List result = []; for (int i = localizations.firstDayOfWeekIndex; true; i = (i + 1) % 7) { final String weekday = localizations.narrowWeekdays[i]; @@ -1969,8 +2048,10 @@ class _DayHeaders extends StatelessWidget { Widget build(BuildContext context) { final ThemeData themeData = Theme.of(context); final ColorScheme colorScheme = themeData.colorScheme; - final TextStyle textStyle = themeData.textTheme.headlineMedium!.apply(color: colorScheme.onSurface); - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final TextStyle textStyle = + themeData.textTheme.headlineMedium!.apply(color: colorScheme.onSurface); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); final List labels = _getDayHeaders(textStyle, localizations); // Add leading and trailing containers for edges of the custom grid layout. @@ -2001,7 +2082,9 @@ class _MonthItemGridDelegate extends SliverGridDelegate { @override SliverGridLayout getLayout(SliverConstraints constraints) { - final double tileWidth = (constraints.crossAxisExtent - 2 * _horizontalPadding) / DateTime.daysPerWeek; + final double tileWidth = + (constraints.crossAxisExtent - 2 * _horizontalPadding) / + DateTime.daysPerWeek; return _MonthSliverGridLayout( crossAxisCount: DateTime.daysPerWeek + 2, dayChildWidth: tileWidth, @@ -2028,7 +2111,7 @@ class _MonthSliverGridLayout extends SliverGridLayout { required this.dayChildWidth, required this.edgeChildWidth, required this.reverseCrossAxis, - }) : assert(crossAxisCount != null && crossAxisCount > 0), + }) : assert(crossAxisCount != null && crossAxisCount > 0), assert(dayChildWidth != null && dayChildWidth >= 0), assert(edgeChildWidth != null && edgeChildWidth >= 0), assert(reverseCrossAxis != null); @@ -2077,10 +2160,9 @@ class _MonthSliverGridLayout extends SliverGridLayout { double _getCrossAxisOffset(double crossAxisStart, bool isPadding) { if (reverseCrossAxis) { - return - ((crossAxisCount - 2) * dayChildWidth + 2 * edgeChildWidth) - - crossAxisStart - - (isPadding ? edgeChildWidth : dayChildWidth); + return ((crossAxisCount - 2) * dayChildWidth + 2 * edgeChildWidth) - + crossAxisStart - + (isPadding ? edgeChildWidth : dayChildWidth); } return crossAxisStart; } @@ -2088,8 +2170,10 @@ class _MonthSliverGridLayout extends SliverGridLayout { @override SliverGridGeometry getGeometryForChildIndex(int index) { final int adjustedIndex = index % crossAxisCount; - final bool isEdge = adjustedIndex == 0 || adjustedIndex == crossAxisCount - 1; - final double crossAxisStart = math.max(0, (adjustedIndex - 1) * dayChildWidth + edgeChildWidth); + final bool isEdge = + adjustedIndex == 0 || adjustedIndex == crossAxisCount - 1; + final double crossAxisStart = + math.max(0, (adjustedIndex - 1) * dayChildWidth + edgeChildWidth); return SliverGridGeometry( scrollOffset: (index ~/ crossAxisCount) * _rowHeight, @@ -2123,14 +2207,18 @@ class _MonthItem extends StatefulWidget { required this.lastDate, required this.displayedMonth, this.dragStartBehavior = DragStartBehavior.start, - }) : assert(firstDate != null), + }) : assert(firstDate != null), assert(lastDate != null), assert(!firstDate.isAfter(lastDate)), - assert(selectedDateStart == null || !selectedDateStart.isBefore(firstDate)), + assert(selectedDateStart == null || + !selectedDateStart.isBefore(firstDate)), assert(selectedDateEnd == null || !selectedDateEnd.isBefore(firstDate)), - assert(selectedDateStart == null || !selectedDateStart.isAfter(lastDate)), + assert( + selectedDateStart == null || !selectedDateStart.isAfter(lastDate)), assert(selectedDateEnd == null || !selectedDateEnd.isAfter(lastDate)), - assert(selectedDateStart == null || selectedDateEnd == null || !selectedDateStart.isAfter(selectedDateEnd)), + assert(selectedDateStart == null || + selectedDateEnd == null || + !selectedDateStart.isAfter(selectedDateEnd)), assert(currentDate != null), assert(onChanged != null), assert(displayedMonth != null), @@ -2191,10 +2279,12 @@ class _MonthItemState extends State<_MonthItem> { @override void initState() { super.initState(); - final int daysInMonth = DateUtils.getDaysInMonth(widget.displayedMonth.year, widget.displayedMonth.month); + final int daysInMonth = DateUtils.getDaysInMonth( + widget.displayedMonth.year, widget.displayedMonth.month); _dayFocusNodes = List.generate( daysInMonth, - (int index) => FocusNode(skipTraversal: true, debugLabel: 'Day ${index + 1}'), + (int index) => + FocusNode(skipTraversal: true, debugLabel: 'Day ${index + 1}'), ); } @@ -2203,7 +2293,8 @@ class _MonthItemState extends State<_MonthItem> { super.didChangeDependencies(); // Check to see if the focused date is in this month, if so focus it. final DateTime? focusedDate = _FocusedDate.of(context)?.date; - if (focusedDate != null && DateUtils.isSameMonth(widget.displayedMonth, focusedDate)) { + if (focusedDate != null && + DateUtils.isSameMonth(widget.displayedMonth, focusedDate)) { _dayFocusNodes[focusedDate.day - 1].requestFocus(); } } @@ -2222,9 +2313,11 @@ class _MonthItemState extends State<_MonthItem> { void _dayFocusChanged(bool focused) { if (focused) { - final TraversalDirection? focusDirection = _FocusedDate.of(context)?.scrollDirection; + final TraversalDirection? focusDirection = + _FocusedDate.of(context)?.scrollDirection; if (focusDirection != null) { - ScrollPositionAlignmentPolicy policy = ScrollPositionAlignmentPolicy.explicit; + ScrollPositionAlignmentPolicy policy = + ScrollPositionAlignmentPolicy.explicit; switch (focusDirection) { case TraversalDirection.up: case TraversalDirection.left: @@ -2235,7 +2328,8 @@ class _MonthItemState extends State<_MonthItem> { policy = ScrollPositionAlignmentPolicy.keepVisibleAtEnd; break; } - Scrollable.ensureVisible(primaryFocus!.context!, + Scrollable.ensureVisible( + primaryFocus!.context!, duration: _monthScrollDuration, alignmentPolicy: policy, ); @@ -2243,23 +2337,29 @@ class _MonthItemState extends State<_MonthItem> { } } - Widget _buildDayItem(BuildContext context, DateTime dayToBuild, int firstDayOffset, int daysInMonth) { + Widget _buildDayItem(BuildContext context, DateTime dayToBuild, + int firstDayOffset, int daysInMonth) { final ThemeData theme = Theme.of(context); final ColorScheme colorScheme = theme.colorScheme; final TextTheme textTheme = theme.textTheme; - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); final TextDirection textDirection = Directionality.of(context); final Color highlightColor = _highlightColor(context); final int day = dayToBuild.day; - final bool isDisabled = dayToBuild.isAfter(widget.lastDate) || dayToBuild.isBefore(widget.firstDate); + final bool isDisabled = dayToBuild.isAfter(widget.lastDate) || + dayToBuild.isBefore(widget.firstDate); BoxDecoration? decoration; TextStyle? itemStyle = textTheme.headlineMedium; - final bool isRangeSelected = widget.selectedDateStart != null && widget.selectedDateEnd != null; - final bool isSelectedDayStart = widget.selectedDateStart != null && dayToBuild.isAtSameMomentAs(widget.selectedDateStart!); - final bool isSelectedDayEnd = widget.selectedDateEnd != null && dayToBuild.isAtSameMomentAs(widget.selectedDateEnd!); + final bool isRangeSelected = + widget.selectedDateStart != null && widget.selectedDateEnd != null; + final bool isSelectedDayStart = widget.selectedDateStart != null && + dayToBuild.isAtSameMomentAs(widget.selectedDateStart!); + final bool isSelectedDayEnd = widget.selectedDateEnd != null && + dayToBuild.isAtSameMomentAs(widget.selectedDateEnd!); final bool isInRange = isRangeSelected && dayToBuild.isAfter(widget.selectedDateStart!) && dayToBuild.isBefore(widget.selectedDateEnd!); @@ -2275,7 +2375,8 @@ class _MonthItemState extends State<_MonthItem> { shape: BoxShape.circle, ); - if (isRangeSelected && widget.selectedDateStart != widget.selectedDateEnd) { + if (isRangeSelected && + widget.selectedDateStart != widget.selectedDateEnd) { final _HighlightPainterStyle style = isSelectedDayStart ? _HighlightPainterStyle.highlightTrailing : _HighlightPainterStyle.highlightLeading; @@ -2293,7 +2394,8 @@ class _MonthItemState extends State<_MonthItem> { textDirection: textDirection, ); } else if (isDisabled) { - itemStyle = textTheme.headlineMedium?.apply(color: colorScheme.onSurface.withOpacity(0.38)); + itemStyle = textTheme.headlineMedium + ?.apply(color: colorScheme.onSurface.withOpacity(0.38)); } else if (DateUtils.isSameDay(widget.currentDate, dayToBuild)) { // The current day gets a different text color and a circle stroke // border. @@ -2310,11 +2412,14 @@ class _MonthItemState extends State<_MonthItem> { // day of month before the rest of the date, as they are looking // for the day of month. To do that we prepend day of month to the // formatted full date. - String semanticLabel = '${localizations.formatDecimal(day)}, ${localizations.formatFullDate(dayToBuild)}'; + String semanticLabel = + '${localizations.formatDecimal(day)}, ${localizations.formatFullDate(dayToBuild)}'; if (isSelectedDayStart) { - semanticLabel = localizations.dateRangeStartDateSemanticLabel(semanticLabel); + semanticLabel = + localizations.dateRangeStartDateSemanticLabel(semanticLabel); } else if (isSelectedDayEnd) { - semanticLabel = localizations.dateRangeEndDateSemanticLabel(semanticLabel); + semanticLabel = + localizations.dateRangeEndDateSemanticLabel(semanticLabel); } Widget dayWidget = Container( @@ -2359,7 +2464,8 @@ class _MonthItemState extends State<_MonthItem> { Widget build(BuildContext context) { final ThemeData themeData = Theme.of(context); final TextTheme textTheme = themeData.textTheme; - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); final int year = widget.displayedMonth.year; final int month = widget.displayedMonth.month; final int daysInMonth = DateUtils.getDaysInMonth(year, month); @@ -2401,38 +2507,40 @@ class _MonthItemState extends State<_MonthItem> { ); final List weekList = dayItems.sublist(start, end); - final DateTime dateAfterLeadingPadding = DateTime(year, month, start - dayOffset + 1); + final DateTime dateAfterLeadingPadding = + DateTime(year, month, start - dayOffset + 1); // Only color the edge container if it is after the start date and // on/before the end date. - final bool isLeadingInRange = - !(dayOffset > 0 && i == 0) && - widget.selectedDateStart != null && - widget.selectedDateEnd != null && - dateAfterLeadingPadding.isAfter(widget.selectedDateStart!) && - !dateAfterLeadingPadding.isAfter(widget.selectedDateEnd!); + final bool isLeadingInRange = !(dayOffset > 0 && i == 0) && + widget.selectedDateStart != null && + widget.selectedDateEnd != null && + dateAfterLeadingPadding.isAfter(widget.selectedDateStart!) && + !dateAfterLeadingPadding.isAfter(widget.selectedDateEnd!); weekList.insert(0, _buildEdgeContainer(context, isLeadingInRange)); // Only add a trailing edge container if it is for a full week and not a // partial week. - if (end < dayItems.length || (end == dayItems.length && dayItems.length % DateTime.daysPerWeek == 0)) { + if (end < dayItems.length || + (end == dayItems.length && + dayItems.length % DateTime.daysPerWeek == 0)) { final DateTime dateBeforeTrailingPadding = - DateTime(year, month, end - dayOffset); + DateTime(year, month, end - dayOffset); // Only color the edge container if it is on/after the start date and // before the end date. - final bool isTrailingInRange = - widget.selectedDateStart != null && - widget.selectedDateEnd != null && - !dateBeforeTrailingPadding.isBefore(widget.selectedDateStart!) && - dateBeforeTrailingPadding.isBefore(widget.selectedDateEnd!); + final bool isTrailingInRange = widget.selectedDateStart != null && + widget.selectedDateEnd != null && + !dateBeforeTrailingPadding.isBefore(widget.selectedDateStart!) && + dateBeforeTrailingPadding.isBefore(widget.selectedDateEnd!); weekList.add(_buildEdgeContainer(context, isTrailingInRange)); } paddedDayItems.addAll(weekList); } - final double maxWidth = MediaQuery.of(context).orientation == Orientation.landscape - ? _maxCalendarWidthLandscape - : _maxCalendarWidthPortrait; + final double maxWidth = + MediaQuery.of(context).orientation == Orientation.landscape + ? _maxCalendarWidthLandscape + : _maxCalendarWidthPortrait; return Column( children: [ Container( @@ -2443,7 +2551,8 @@ class _MonthItemState extends State<_MonthItem> { child: ExcludeSemantics( child: Text( localizations.formatMonthYear(widget.displayedMonth), - style: textTheme.headlineMedium!.apply(color: themeData.colorScheme.onSurface), + style: textTheme.headlineMedium! + .apply(color: themeData.colorScheme.onSurface), ), ), ), @@ -2510,7 +2619,8 @@ class _HighlightPainter extends CustomPainter { ..style = PaintingStyle.fill; final Rect rectLeft = Rect.fromLTWH(0, 0, size.width / 2, size.height); - final Rect rectRight = Rect.fromLTWH(size.width / 2, 0, size.width / 2, size.height); + final Rect rectRight = + Rect.fromLTWH(size.width / 2, 0, size.width / 2, size.height); switch (style) { case _HighlightPainterStyle.highlightTrailing: @@ -2565,8 +2675,10 @@ class _InputDateRangePickerDialog extends StatelessWidget { final String? helpText; final Widget? entryModeButton; - String _formatDateRange(BuildContext context, DateTime? start, DateTime? end, DateTime now) { - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + String _formatDateRange( + BuildContext context, DateTime? start, DateTime? end, DateTime now) { + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); final String startText = _formatRangeStartDate(localizations, start, end); final String endText = _formatRangeEndDate(localizations, start, end, now); if (start == null || end == null) { @@ -2583,18 +2695,22 @@ class _InputDateRangePickerDialog extends StatelessWidget { Widget build(BuildContext context) { final ThemeData theme = Theme.of(context); final ColorScheme colorScheme = theme.colorScheme; - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); final Orientation orientation = MediaQuery.of(context).orientation; final TextTheme textTheme = theme.textTheme; - final Color onPrimarySurfaceColor = colorScheme.brightness == Brightness.light - ? colorScheme.onPrimary - : colorScheme.onSurface; + final Color onPrimarySurfaceColor = + colorScheme.brightness == Brightness.light + ? colorScheme.onPrimary + : colorScheme.onSurface; final TextStyle? dateStyle = orientation == Orientation.landscape ? textTheme.headlineMedium?.apply(color: onPrimarySurfaceColor) : textTheme.headlineMedium?.apply(color: onPrimarySurfaceColor); - final String dateText = _formatDateRange(context, selectedStartDate, selectedEndDate, currentDate!); - final String semanticDateText = selectedStartDate != null && selectedEndDate != null + final String dateText = _formatDateRange( + context, selectedStartDate, selectedEndDate, currentDate!); + final String semanticDateText = selectedStartDate != null && + selectedEndDate != null ? '${localizations.formatMediumDate(selectedStartDate!)} – ${localizations.formatMediumDate(selectedEndDate!)}' : ''; @@ -2684,8 +2800,11 @@ class _InputDateRangePicker extends StatefulWidget { this.fieldEndLabelText, this.autofocus = false, this.autovalidate = false, - }) : initialStartDate = initialStartDate == null ? null : DateUtils.dateOnly(initialStartDate), - initialEndDate = initialEndDate == null ? null : DateUtils.dateOnly(initialEndDate), + }) : initialStartDate = initialStartDate == null + ? null + : DateUtils.dateOnly(initialStartDate), + initialEndDate = + initialEndDate == null ? null : DateUtils.dateOnly(initialEndDate), assert(firstDate != null), firstDate = DateUtils.dateOnly(firstDate), assert(lastDate != null), @@ -2785,7 +2904,8 @@ class _InputDateRangePickerState extends State<_InputDateRangePicker> { @override void didChangeDependencies() { super.didChangeDependencies(); - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); if (_startDate != null) { _startInputText = localizations.formatCompactDate(_startDate!); final bool selectText = widget.autofocus && !_autoSelected; @@ -2810,7 +2930,8 @@ class _InputDateRangePickerState extends State<_InputDateRangePicker> { final String? endError = _validateDate(_endDate); if (startError == null && endError == null) { if (_startDate!.isAfter(_endDate!)) { - startError = widget.errorInvalidRangeText ?? MaterialLocalizations.of(context).invalidDateRangeLabel; + startError = widget.errorInvalidRangeText ?? + MaterialLocalizations.of(context).invalidDateRangeLabel; } } setState(() { @@ -2821,23 +2942,29 @@ class _InputDateRangePickerState extends State<_InputDateRangePicker> { } DateTime? _parseDate(String? text) { - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); return localizations.parseCompactDate(text); } String? _validateDate(DateTime? date) { if (date == null) { - return widget.errorFormatText ?? MaterialLocalizations.of(context).invalidDateFormatLabel; - } else if (date.isBefore(widget.firstDate) || date.isAfter(widget.lastDate)) { - return widget.errorInvalidText ?? MaterialLocalizations.of(context).dateOutOfRangeLabel; + return widget.errorFormatText ?? + MaterialLocalizations.of(context).invalidDateFormatLabel; + } else if (date.isBefore(widget.firstDate) || + date.isAfter(widget.lastDate)) { + return widget.errorInvalidText ?? + MaterialLocalizations.of(context).dateOutOfRangeLabel; } return null; } - void _updateController(TextEditingController controller, String text, bool selectText) { + void _updateController( + TextEditingController controller, String text, bool selectText) { TextEditingValue textEditingValue = controller.value.copyWith(text: text); if (selectText) { - textEditingValue = textEditingValue.copyWith(selection: TextSelection( + textEditingValue = textEditingValue.copyWith( + selection: TextSelection( baseOffset: 0, extentOffset: text.length, )); @@ -2869,8 +2996,10 @@ class _InputDateRangePickerState extends State<_InputDateRangePicker> { @override Widget build(BuildContext context) { - final MaterialLocalizations localizations = MaterialLocalizations.of(context); - final InputDecorationTheme inputTheme = Theme.of(context).inputDecorationTheme; + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); + final InputDecorationThemeData inputTheme = + Theme.of(context).inputDecorationTheme; return Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -2881,7 +3010,8 @@ class _InputDateRangePickerState extends State<_InputDateRangePicker> { border: inputTheme.border ?? const UnderlineInputBorder(), filled: inputTheme.filled, hintText: widget.fieldStartHintText ?? localizations.dateHelpText, - labelText: widget.fieldStartLabelText ?? localizations.dateRangeStartLabel, + labelText: widget.fieldStartLabelText ?? + localizations.dateRangeStartLabel, errorText: _startErrorText, ), keyboardType: TextInputType.datetime, @@ -2897,7 +3027,8 @@ class _InputDateRangePickerState extends State<_InputDateRangePicker> { border: inputTheme.border ?? const UnderlineInputBorder(), filled: inputTheme.filled, hintText: widget.fieldEndHintText ?? localizations.dateHelpText, - labelText: widget.fieldEndLabelText ?? localizations.dateRangeEndLabel, + labelText: + widget.fieldEndLabelText ?? localizations.dateRangeEndLabel, errorText: _endErrorText, ), keyboardType: TextInputType.datetime, diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_page.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_page.dart index f6ed061e2..719520e9d 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_page.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_page.dart @@ -58,7 +58,7 @@ class _StandardHomePageState extends State @override Widget build(BuildContext context) { super.build(context); - final AppBarTheme appBarTheme = AppBarTheme.of(context); + final AppBarThemeData appBarTheme = AppBarTheme.of(context); bool isDark = Theme.of(context).brightness == Brightness.dark; double bottom = MediaQuery.of(context).padding.bottom; return Scaffold( diff --git a/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_en-US.json new file mode 100644 index 000000000..f882976b4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_en-US.json @@ -0,0 +1 @@ +{"name":"AboutDialog","path":"/src/material/about.dart","parents":["StatelessWidget","Widget"],"desc":" An about box. This is a dialog box with the application's icon, name, version number, and copyright, plus a button to show licenses for software used by the application.","fields":[{"name":"applicationName","type":"String?","desc":"The name of the application."},{"name":"applicationVersion","type":"String?","desc":"The version of this build of the application."},{"name":"applicationIcon","type":"Widget?","desc":"The icon to show next to the application name."},{"name":"applicationLegalese","type":"String?","desc":"A string to show in small print."},{"name":"children","type":"List?","desc":"Widgets to add to the dialog box after the name, version, and legalese."}],"id":130,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AboutDialog","desc":["【applicationIcon】: Top-left icon 【Widget】","【applicationVersion】: Version number 【String】","【applicationName】: Application name 【String】","【applicationLegalese】: Application legal terms 【String】","【children】: Sub-component list 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_zh-CN.json new file mode 100644 index 000000000..60dcf9681 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_zh-CN.json @@ -0,0 +1 @@ +{"name":"AboutDialog","path":"/src/material/about.dart","parents":["StatelessWidget","Widget"],"desc":"关于对话框。这是一个包含应用程序图标、名称、版本号和版权信息的对话框,还有一个按钮用于显示应用程序使用的软件许可证。","fields":[{"name":"applicationName","type":"String?","desc":"应用程序的名称。"},{"name":"applicationVersion","type":"String?","desc":"此应用程序构建的版本。"},{"name":"applicationIcon","type":"Widget?","desc":"显示在应用程序名称旁边的图标。"},{"name":"applicationLegalese","type":"String?","desc":"以小字体显示的字符串。"},{"name":"children","type":"List?","desc":"在名称、版本和法律声明之后添加到对话框的小部件。"}],"id":130,"localName":"关于对话框","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AboutDialog基本使用","desc":["【applicationIcon】 : 左上图标 【Widget】","【applicationVersion】 : 版本号 【String】","【applicationName】 : 应用名 【String】","【applicationLegalese】 : 应用律术 【String】","【children】 : 子组件列表 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_en-US.json new file mode 100644 index 000000000..d96a816d0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_en-US.json @@ -0,0 +1 @@ +{"name":"AboutListTile","path":"/src/material/about.dart","parents":["StatelessWidget","Widget"],"desc":" A [ListTile] that shows an about box.","fields":[{"name":"icon","type":"Widget?","desc":"The icon to show for this drawer item."},{"name":"child","type":"Widget?","desc":"The label to show on this drawer item."},{"name":"applicationName","type":"String?","desc":"The name of the application."},{"name":"applicationVersion","type":"String?","desc":"The version of this build of the application."},{"name":"applicationIcon","type":"Widget?","desc":"The icon to show next to the application name in the [AboutDialog]."},{"name":"applicationLegalese","type":"String?","desc":"A string to show in small print in the [AboutDialog]."},{"name":"aboutBoxChildren","type":"List?","desc":"Widgets to add to the [AboutDialog] after the name, version, and legalese."},{"name":"dense","type":"bool?","desc":"Whether this list tile is part of a vertically dense list."}],"id":193,"lever":3,"family":0,"linkIds":[130,145],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AboutListTile","desc":["【icon】 : Left icon 【Widget】","【applicationIcon】 : Top-left icon 【Widget】","【applicationVersion】 : Version number 【String】","【applicationName】 : Application name 【String】","【applicationLegalese】 : Application legalese 【String】","【aboutBoxChildren】 : Dialog content components 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_zh-CN.json new file mode 100644 index 000000000..452c96015 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_zh-CN.json @@ -0,0 +1 @@ +{"name":"AboutListTile","path":"/src/material/about.dart","parents":["StatelessWidget","Widget"],"desc":"显示关于框的 [ListTile]。","fields":[{"name":"icon","type":"Widget?","desc":"为此抽屉项显示的图标。"},{"name":"child","type":"Widget?","desc":"在此抽屉项上显示的标签。"},{"name":"applicationName","type":"String?","desc":"应用程序的名称。"},{"name":"applicationVersion","type":"String?","desc":"应用程序此构建的版本。"},{"name":"applicationIcon","type":"Widget?","desc":"在 [AboutDialog] 中应用程序名称旁边显示的图标。"},{"name":"applicationLegalese","type":"String?","desc":"在 [AboutDialog] 中以小字体显示的字符串。"},{"name":"aboutBoxChildren","type":"List?","desc":"在名称、版本和法律声明之后添加到 [AboutDialog] 的小部件。"},{"name":"dense","type":"bool?","desc":"此列表瓦片是否是垂直密集列表的一部分。"}],"id":193,"localName":"关于应用条目","lever":3,"family":0,"linkIds":[130,145],"nodes":[{"file":"node1_base.dart","name":"AboutListTile基本使用","desc":["【icon】 : 左图标 【Widget】","【applicationIcon】 : 左上图标 【Widget】","【applicationVersion】 : 版本号 【String】","【applicationName】 : 应用名 【String】","【applicationLegalese】 : 应用律术 【String】","【aboutBoxChildren】 : 弹框内容组件 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_en-US.json b/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_en-US.json new file mode 100644 index 000000000..d35364063 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_en-US.json @@ -0,0 +1 @@ +{"name":"AbsorbPointer","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that absorbs pointers during hit testing.","fields":[{"name":"absorbing","type":"bool","required":true,"desc":"Whether this widget absorbs pointers during hit testing."},{"name":"ignoringSemantics","type":"bool?","desc":"Whether the semantics of this render object is ignored when compiling the semantics tree."}],"id":295,"lever":4,"family":2,"linkIds":[146,149,150,292],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AbsorbPointer","desc":["【child】: Child component 【Widget】","【absorbing】: Whether to absorb events 【bool】","As shown below, when the Switch is selected, absorbing is true, and the button event will be absorbed and cannot be clicked."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_zh-CN.json new file mode 100644 index 000000000..79bc70fc3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_zh-CN.json @@ -0,0 +1 @@ +{"name":"AbsorbPointer","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在命中测试期间吸收指针的小部件。","fields":[{"name":"absorbing","type":"bool","required":true,"desc":"此小部件是否在命中测试期间吸收指针。"},{"name":"ignoringSemantics","type":"bool?","desc":"编译语义树时是否忽略此渲染对象的语义。"}],"id":295,"localName":"吸收点击","lever":4,"family":2,"linkIds":[146,149,150,292],"nodes":[{"file":"node1_base.dart","name":"AbsorbPointer基本使用","desc":["【child】 : 孩子组件 【Widget】","【absorbing】 : 是否吸收事件 【bool】","如下,Switch选中时absorbing为true,按钮事件将被吸收,无法点击。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_en-US.json new file mode 100644 index 000000000..b9564411e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_en-US.json @@ -0,0 +1 @@ +{"name":"AbstractLayoutBuilder","path":"/src/widgets/layout_builder.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" An abstract superclass for widgets that defer their building until layout.","fields":[],"id":286,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_zh-CN.json new file mode 100644 index 000000000..bbaa23dbe --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_zh-CN.json @@ -0,0 +1 @@ +{"name":"AbstractLayoutBuilder","path":"/src/widgets/layout_builder.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"将其构建推迟到布局的小部件的抽象超类。","fields":[],"id":286,"localName":"AbstractLayoutBuilder","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_en-US.json b/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_en-US.json new file mode 100644 index 000000000..538b3ef68 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_en-US.json @@ -0,0 +1 @@ +{"name":"ActionChip","path":"/src/material/action_chip.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design action chip.","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"disabledColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":13,"lever":3,"family":0,"linkIds":[11,12,14,15,153],"nodes":[{"file":"node1_base.dart","name":"The normal performance of ActionChip is as follows","desc":["【onPressed】: Click event 【Function】","【pressElevation】: Shadow depth when pressed 【double】","Other properties are the same as the Chip component, no right component."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_zh-CN.json new file mode 100644 index 000000000..64f3b1f1c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_zh-CN.json @@ -0,0 +1 @@ +{"name":"ActionChip","path":"/src/material/action_chip.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 操作芯片。","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"disabledColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":13,"localName":"事件小条","lever":3,"family":0,"linkIds":[11,12,14,15,153],"nodes":[{"file":"node1_base.dart","name":"ActionChip的普通表现如下","desc":["【onPressed】: 点击事件 【Function】","【pressElevation】: 按下时影深 【double】","其他属性同Chip组件,无右侧组件。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_en-US.json new file mode 100644 index 000000000..4f5482883 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_en-US.json @@ -0,0 +1 @@ +{"name":"ActionIconTheme","path":"/src/material/action_icons_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that overrides the default icon of [BackButtonIcon], [CloseButtonIcon], [DrawerButtonIcon], and [EndDrawerButtonIcon] in this widget's subtree.","fields":[{"name":"data","type":"ActionIconThemeData","required":true,"desc":"Specifies the default icon overrides for descendant [BackButtonIcon], [CloseButtonIcon], [DrawerButtonIcon], and [EndDrawerButtonIcon] widgets."}],"id":300,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_zh-CN.json new file mode 100644 index 000000000..4c5b81eae --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"ActionIconTheme","path":"/src/material/action_icons_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖此小部件子树中 [BackButtonIcon]、[CloseButtonIcon]、[DrawerButtonIcon] 和 [EndDrawerButtonIcon] 的默认图标的继承小部件。","fields":[{"name":"data","type":"ActionIconThemeData","required":true,"desc":"指定后代 [BackButtonIcon]、[CloseButtonIcon]、[DrawerButtonIcon] 和 [EndDrawerButtonIcon] 小部件的默认图标覆盖。"}],"id":300,"localName":"ActionIconTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_en-US.json b/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_en-US.json new file mode 100644 index 000000000..41d6a5f82 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_en-US.json @@ -0,0 +1 @@ +{"name":"ActionListener","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":" A helper widget for making sure that listeners on an action are removed properly.","fields":[{"name":"listener","type":"ActionListenerCallback","required":true,"desc":"The [ActionListenerCallback] callback to register with the [action]."},{"name":"action","type":"Action","required":true,"desc":"The [Action] that the callback will be registered with."},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":310,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_zh-CN.json new file mode 100644 index 000000000..0d540e6de --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_zh-CN.json @@ -0,0 +1 @@ +{"name":"ActionListener","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":"确保正确移除操作上的监听器的辅助小部件。","fields":[{"name":"listener","type":"ActionListenerCallback","required":true,"desc":"要向 [action] 注册的 [ActionListenerCallback] 回调。"},{"name":"action","type":"Action","required":true,"desc":"回调将注册到的 [Action]。"},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":310,"localName":"ActionListener","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Actions/Actions_en-US.json b/modules/widget_system/widgets/doc/widgets/Actions/Actions_en-US.json new file mode 100644 index 000000000..0cba06ce2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Actions/Actions_en-US.json @@ -0,0 +1 @@ +{"name":"Actions","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that maps [Intent]s to [Action]s to be used by its descendants when invoking an [Action].","fields":[{"name":"dispatcher","type":"ActionDispatcher?","desc":"The [ActionDispatcher] object that invokes actions."},{"name":"actions","type":"Map>","required":true,"desc":"{@template flutter.widgets.actions.actions} A map of [Intent] keys to [Action] objects that defines which actions this widget knows about."},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":311,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Actions/Actions_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Actions/Actions_zh-CN.json new file mode 100644 index 000000000..d7a99a048 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Actions/Actions_zh-CN.json @@ -0,0 +1 @@ +{"name":"Actions","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":"将 [Intent] 映射到 [Action] 的小部件,供其后代在调用 [Action] 时使用。","fields":[{"name":"dispatcher","type":"ActionDispatcher?","desc":"调用操作的 [ActionDispatcher] 对象。"},{"name":"actions","type":"Map>","required":true,"desc":"{@template flutter.widgets.actions.actions} [Intent] 键到 [Action] 对象的映射,定义此小部件了解的操作。"},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":311,"localName":"Actions","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_en-US.json new file mode 100644 index 000000000..64ba467e5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_en-US.json @@ -0,0 +1 @@ +{"name":"AdaptiveTextSelectionToolbar","path":"/src/material/adaptive_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" The default context menu for text selection for the current platform.","fields":[{"name":"buttonItems","type":"List?","desc":"{@template flutter.material.AdaptiveTextSelectionToolbar.buttonItems} The [ContextMenuButtonItem]s that will be turned into the correct button widgets for the current platform. {@endtemplate}"},{"name":"children","type":"List?","desc":"The children of the toolbar, typically buttons."},{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"{@template flutter.material.AdaptiveTextSelectionToolbar.anchors} The location on which to anchor the menu. {@endtemplate}"}],"id":318,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_zh-CN.json new file mode 100644 index 000000000..b1ba8d84c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_zh-CN.json @@ -0,0 +1 @@ +{"name":"AdaptiveTextSelectionToolbar","path":"/src/material/adaptive_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"当前平台文本选择的默认上下文菜单。","fields":[{"name":"buttonItems","type":"List?","desc":"{@template flutter.material.AdaptiveTextSelectionToolbar.buttonItems} 将转换为当前平台正确按钮小部件的 [ContextMenuButtonItem]。{@endtemplate}"},{"name":"children","type":"List?","desc":"工具栏的子项,通常是按钮。"},{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"{@template flutter.material.AdaptiveTextSelectionToolbar.anchors} 锚定菜单的位置。{@endtemplate}"}],"id":318,"localName":"AdaptiveTextSelectionToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_en-US.json new file mode 100644 index 000000000..71c27d760 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_en-US.json @@ -0,0 +1 @@ +{"name":"AlertDialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design alert dialog.","fields":[{"name":"icon","type":"Widget?","desc":"An optional icon to display at the top of the dialog."},{"name":"iconColor","type":"Color?","desc":"Color for the [Icon] in the [icon] of this [AlertDialog]."},{"name":"iconPadding","type":"EdgeInsetsGeometry?","desc":"Padding around the [icon]."},{"name":"title","type":"Widget?","desc":"The (optional) title of the dialog is displayed in a large font at the top of the dialog, below the (optional) [icon]."},{"name":"titlePadding","type":"EdgeInsetsGeometry?","desc":"Padding around the title."},{"name":"titleTextStyle","type":"TextStyle?","desc":"Style for the text in the [title] of this [AlertDialog]."},{"name":"content","type":"Widget?","desc":"The (optional) content of the dialog is displayed in the center of the dialog in a lighter font."},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"Padding around the content."},{"name":"contentTextStyle","type":"TextStyle?","desc":"Style for the text in the [content] of this [AlertDialog]."},{"name":"actions","type":"List?","desc":"The (optional) set of actions that are displayed at the bottom of the dialog with an [OverflowBar]."},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"Padding around the set of [actions] at the bottom of the dialog."},{"name":"actionsAlignment","type":"MainAxisAlignment?","desc":"Defines the horizontal layout of the [actions] according to the same rules as for [Row.mainAxisAlignment]."},{"name":"actionsOverflowAlignment","type":"OverflowBarAlignment?","desc":"The horizontal alignment of [actions] within the vertical \"overflow\" layout."},{"name":"actionsOverflowDirection","type":"VerticalDirection?","desc":"The vertical direction of [actions] if the children overflow horizontally."},{"name":"actionsOverflowButtonSpacing","type":"double?","desc":"The spacing between [actions] when the [OverflowBar] switches to a column layout because the actions don't fit horizontally."},{"name":"buttonPadding","type":"EdgeInsetsGeometry?","desc":"The padding that surrounds each button in [actions]."},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.dialog.backgroundColor}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.dialog.elevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.dialog.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.dialog.surfaceTintColor}"},{"name":"semanticLabel","type":"String?","desc":"The semantic label of the dialog used by accessibility frameworks to announce screen transitions when the dialog is opened and closed."},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@macro flutter.material.dialog.insetPadding}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.dialog.clipBehavior}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.dialog.shape}"},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@macro flutter.material.dialog.alignment}"},{"name":"scrollable","type":"bool","required":true,"desc":"Determines whether the [title] and [content] widgets are wrapped in a scrollable."}],"id":127,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AlertDialog","desc":["【title】 : Top component 【Widget】","【content】 : Content component 【Widget】","【titleTextStyle】 : Top text style 【TextStyle】","【contentTextStyle】 : Content text style 【TextStyle】","【titlePadding】 : Top padding 【EdgeInsetsGeometry】","【contentPadding】 : Content padding 【EdgeInsetsGeometry】","【actions】 : Bottom right component list 【List】","【backgroundColor】 : Background color 【Color】","【elevation】 : Elevation 【double】","【shape】 : Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_zh-CN.json new file mode 100644 index 000000000..681dfccc3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_zh-CN.json @@ -0,0 +1 @@ +{"name":"AlertDialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 警告对话框。","fields":[{"name":"icon","type":"Widget?","desc":"在对话框顶部显示的可选图标。"},{"name":"iconColor","type":"Color?","desc":"此 [AlertDialog] 的 [icon] 中 [Icon] 的颜色。"},{"name":"iconPadding","type":"EdgeInsetsGeometry?","desc":"[icon] 周围的内边距。"},{"name":"title","type":"Widget?","desc":"对话框的(可选)标题以大字体显示在对话框顶部,位于(可选)[icon] 下方。"},{"name":"titlePadding","type":"EdgeInsetsGeometry?","desc":"标题周围的内边距。"},{"name":"titleTextStyle","type":"TextStyle?","desc":"此 [AlertDialog] 的 [title] 中文本的样式。"},{"name":"content","type":"Widget?","desc":"对话框的(可选)内容以较浅的字体显示在对话框中心。"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"内容周围的内边距。"},{"name":"contentTextStyle","type":"TextStyle?","desc":"此 [AlertDialog] 的 [content] 中文本的样式。"},{"name":"actions","type":"List?","desc":"显示在对话框底部的(可选)操作集合,使用 [OverflowBar]。"},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"对话框底部 [actions] 集合周围的内边距。"},{"name":"actionsAlignment","type":"MainAxisAlignment?","desc":"根据与 [Row.mainAxisAlignment] 相同的规则定义 [actions] 的水平布局。"},{"name":"actionsOverflowAlignment","type":"OverflowBarAlignment?","desc":"垂直\\"},{"name":"actionsOverflowDirection","type":"VerticalDirection?","desc":"如果子项水平溢出,[actions] 的垂直方向。"},{"name":"actionsOverflowButtonSpacing","type":"double?","desc":"当 [OverflowBar] 因操作无法水平放置而切换到列布局时,[actions] 之间的间距。"},{"name":"buttonPadding","type":"EdgeInsetsGeometry?","desc":"[actions] 中每个按钮周围的内边距。"},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.dialog.backgroundColor}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.dialog.elevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.dialog.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.dialog.surfaceTintColor}"},{"name":"semanticLabel","type":"String?","desc":"辅助功能框架用于在对话框打开和关闭时宣布屏幕转换的对话框语义标签。"},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@macro flutter.material.dialog.insetPadding}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.dialog.clipBehavior}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.dialog.shape}"},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@macro flutter.material.dialog.alignment}"},{"name":"scrollable","type":"bool","required":true,"desc":"确定 [title] 和 [content] 小部件是否包装在可滚动容器中。"}],"id":127,"localName":"弹出对话框","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AlertDialog基本使用","desc":["【title】 : 顶部组件 【Widget】","【content】 : 内容组件 【Widget】","【titleTextStyle】 : 顶部文字样式 【TextStyle】","【contentTextStyle】 : 内容文字样式 【TextStyle】","【titlePadding】 : 顶部内边距 【EdgeInsetsGeometry】","【contentPadding】 : 内容内边距 【EdgeInsetsGeometry】","【actions】 : 右下角组件列表 【List】","【backgroundColor】 : 背景色 【Color】","【elevation】 : 影深 【double】","【shape】 : 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Align/Align_en-US.json b/modules/widget_system/widgets/doc/widgets/Align/Align_en-US.json new file mode 100644 index 000000000..8862a8a61 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Align/Align_en-US.json @@ -0,0 +1 @@ +{"name":"Align","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that aligns its child within itself and optionally sizes itself based on the child's size.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the child."},{"name":"widthFactor","type":"double?","desc":"If non-null, sets its width to the child's width multiplied by this factor."},{"name":"heightFactor","type":"double?","desc":"If non-null, sets its height to the child's height multiplied by this factor."}],"id":85,"lever":5,"family":2,"linkIds":[1,86,111,120],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Align","desc":["【child】 : Child component 【Widget】","【alignment】 : Alignment method 【AlignmentGeometry】"]},{"file":"node2_other.dart","name":"Other Usages of Align","desc":["Since the Alignment object can specify the fractional position of the width and height in the parent container","Align can be used to achieve some complex layout requirements, such as changing positions according to specified mathematical equations"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Align/Align_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Align/Align_zh-CN.json new file mode 100644 index 000000000..042e8284b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Align/Align_zh-CN.json @@ -0,0 +1 @@ +{"name":"Align","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"一个在自身内对齐其子项的小部件,可选择根据子项的大小调整自身大小。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何对齐子项。"},{"name":"widthFactor","type":"double?","desc":"如果非空,将其宽度设置为子项宽度乘以此因子。"},{"name":"heightFactor","type":"double?","desc":"如果非空,将其高度设置为子项高度乘以此因子。"}],"id":85,"localName":"对齐组件","lever":5,"family":2,"linkIds":[1,86,111,120],"nodes":[{"file":"node1_base.dart","name":"Align基本使用","desc":["【child】 : 孩子组件 【Widget】","【alignment】 : 对齐方式 【AlignmentGeometry】"]},{"file":"node2_other.dart","name":"Align其他用法","desc":["由于Alignment对象可指定在父容器中宽高的分率位置","可以使用Align实现一些复杂的排布需求,比如按指定的数学方程变化位置"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_en-US.json new file mode 100644 index 000000000..6b5904426 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_en-US.json @@ -0,0 +1 @@ +{"name":"AlignTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of an [Align] that animates its [Align.alignment] property.","fields":[{"name":"widthFactor","type":"double?","desc":"If non-null, the child's width factor, see [Align.widthFactor]."},{"name":"heightFactor","type":"double?","desc":"If non-null, the child's height factor, see [Align.heightFactor]."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":111,"lever":3,"family":1,"linkIds":[85,120],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AlignTransition","desc":["【child】: Child component 【Widget】","【alignment】: Alignment animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_zh-CN.json new file mode 100644 index 000000000..6582a505e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_zh-CN.json @@ -0,0 +1 @@ +{"name":"AlignTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"[Align] 的动画版本,用于动画其 [Align.alignment] 属性。","fields":[{"name":"widthFactor","type":"double?","desc":"如果非空,子项的宽度因子,参见 [Align.widthFactor]。"},{"name":"heightFactor","type":"double?","desc":"如果非空,子项的高度因子,参见 [Align.heightFactor]。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":111,"localName":"对齐变换","lever":3,"family":1,"linkIds":[85,120],"nodes":[{"file":"node1_base.dart","name":"AlignTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【alignment】 : 对齐动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_en-US.json b/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_en-US.json new file mode 100644 index 000000000..31eeee380 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_en-US.json @@ -0,0 +1 @@ +{"name":"AndroidView","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":" Embeds an Android view in the Widget hierarchy.","fields":[{"name":"viewType","type":"String","required":true,"desc":"The unique identifier for Android view type to be embedded by this widget."},{"name":"onPlatformViewCreated","type":"PlatformViewCreatedCallback?","desc":"{@template flutter.widgets.AndroidView.onPlatformViewCreated} Callback to invoke after the platform view has been created."},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@template flutter.widgets.AndroidView.hitTestBehavior} How this widget should behave during hit testing."},{"name":"layoutDirection","type":"TextDirection?","desc":"{@template flutter.widgets.AndroidView.layoutDirection} The text direction to use for the embedded view."},{"name":"gestureRecognizers","type":"Set>?","desc":"Which gestures should be forwarded to the Android view."},{"name":"creationParams","type":"dynamic","required":true,"desc":"Passed as the args argument of [PlatformViewFactory#create](/javadoc/io/flutter/plugin/platform/PlatformViewFactory.html#create-android.content.Context-int-java.lang.Object-)"},{"name":"creationParamsCodec","type":"MessageCodec?","desc":"The codec used to encode `creationParams` before sending it to the platform side. It should match the codec passed to the constructor of [PlatformViewFactory](/javadoc/io/flutter/plugin/platform/PlatformViewFactory.html#PlatformViewFactory-io.flutter.plugin.common.MessageCodec-)."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":321,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_zh-CN.json new file mode 100644 index 000000000..fe9bd286a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_zh-CN.json @@ -0,0 +1 @@ +{"name":"AndroidView","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":"在小部件层次结构中嵌入 Android 视图。","fields":[{"name":"viewType","type":"String","required":true,"desc":"此小部件要嵌入的 Android 视图类型的唯一标识符。"},{"name":"onPlatformViewCreated","type":"PlatformViewCreatedCallback?","desc":"{@template flutter.widgets.AndroidView.onPlatformViewCreated} 平台视图创建后调用的回调。"},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@template flutter.widgets.AndroidView.hitTestBehavior} 此小部件在命中测试期间的行为方式。"},{"name":"layoutDirection","type":"TextDirection?","desc":"{@template flutter.widgets.AndroidView.layoutDirection} 嵌入视图使用的文本方向。"},{"name":"gestureRecognizers","type":"Set>?","desc":"哪些手势应转发到 Android 视图。"},{"name":"creationParams","type":"dynamic","required":true,"desc":"作为 [PlatformViewFactory#create](/javadoc/io/flutter/plugin/platform/PlatformViewFactory.html#create-android.content.Context-int-java.lang.Object-) 的 args 参数传递"},{"name":"creationParamsCodec","type":"MessageCodec?","desc":"在将 `creationParams` 发送到平台端之前用于编码的编解码器。它应与传递给 [PlatformViewFactory](/javadoc/io/flutter/plugin/platform/PlatformViewFactory.html#PlatformViewFactory-io.flutter.plugin.common.MessageCodec-) 构造函数的编解码器匹配。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":321,"localName":"AndroidView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_en-US.json b/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_en-US.json new file mode 100644 index 000000000..6d4b6fe73 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_en-US.json @@ -0,0 +1 @@ +{"name":"AndroidViewSurface","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":" Integrates an Android view with Flutter's compositor, touch, and semantics subsystems.","fields":[{"name":"controller","type":"AndroidViewController","required":true,"desc":"The controller for the platform view integrated by this [AndroidViewSurface]."},{"name":"gestureRecognizers","type":"Set>","required":true,"desc":"Which gestures should be forwarded to the PlatformView."},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":322,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_zh-CN.json new file mode 100644 index 000000000..ca9282a74 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_zh-CN.json @@ -0,0 +1 @@ +{"name":"AndroidViewSurface","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":"将 Android 视图与 Flutter 的合成器、触摸和语义子系统集成。","fields":[{"name":"controller","type":"AndroidViewController","required":true,"desc":"此 [AndroidViewSurface] 集成的平台视图的控制器。"},{"name":"gestureRecognizers","type":"Set>","required":true,"desc":"哪些手势应转发到 PlatformView。"},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":322,"localName":"AndroidViewSurface","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_en-US.json new file mode 100644 index 000000000..b2f9b32ae --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedAlign","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Align] which automatically transitions the child's position over a given duration whenever the given [alignment] changes.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the child."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"heightFactor","type":"double?","desc":"If non-null, sets its height to the child's height multiplied by this factor."},{"name":"widthFactor","type":"double?","desc":"If non-null, sets its width to the child's width multiplied by this factor."}],"id":120,"lever":3,"family":1,"linkIds":[85,111],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedAlign","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【alignment】: Alignment method 【AlignmentGeometry】","【curve】: Animation curve 【Duration】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_zh-CN.json new file mode 100644 index 000000000..1fb05311f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedAlign","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Align] 的动画版本,当给定的 [alignment] 发生变化时,会在给定的持续时间内自动过渡子项的位置。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何对齐子项。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"heightFactor","type":"double?","desc":"如果非空,将其高度设置为子项高度乘以此因子。"},{"name":"widthFactor","type":"double?","desc":"如果非空,将其宽度设置为子项宽度乘以此因子。"}],"id":120,"localName":"对齐动画","lever":3,"family":1,"linkIds":[85,111],"nodes":[{"file":"node1_base.dart","name":"AnimatedAlign基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【alignment】 : 对齐方式 【AlignmentGeometry】","【curve】 : 动画曲线 【Duration】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_en-US.json new file mode 100644 index 000000000..5af52a2d5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedBuilder","path":"/src/widgets/transitions.dart","parents":["ListenableBuilder","AnimatedWidget","StatefulWidget","Widget"],"desc":" A general-purpose widget for building animations.","fields":[],"id":228,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedBuilder Usage Example","desc":["【animation】: *Listenable object 【Listenable】","【builder】: *Component builder 【TransitionBuilder】","【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_zh-CN.json new file mode 100644 index 000000000..2f40262ff --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedBuilder","path":"/src/widgets/transitions.dart","parents":["ListenableBuilder","AnimatedWidget","StatefulWidget","Widget"],"desc":"用于构建动画的通用小部件。","fields":[],"id":228,"localName":"动画构造器","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedBuilder 使用案例","desc":["【animation】 : *可监听对象 【Listenable】","【builder】 : *组件构造器 【TransitionBuilder】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_en-US.json new file mode 100644 index 000000000..92ebd9249 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedContainer","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Container] that gradually changes its values over a period of time.","fields":[{"name":"child","type":"Widget?","desc":"The [child] contained by the container."},{"name":"alignment","type":"AlignmentGeometry?","desc":"Align the [child] within the container."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Empty space to inscribe inside the [decoration]. The [child], if any, is placed inside this padding."},{"name":"decoration","type":"Decoration?","desc":"The decoration to paint behind the [child]."},{"name":"foregroundDecoration","type":"Decoration?","desc":"The decoration to paint in front of the child."},{"name":"constraints","type":"BoxConstraints?","desc":"Additional constraints to apply to the child."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"Empty space to surround the [decoration] and [child]."},{"name":"transform","type":"Matrix4?","desc":"The transformation matrix to apply before painting the container."},{"name":"transformAlignment","type":"AlignmentGeometry?","desc":"The alignment of the origin, relative to the size of the container, if [transform] is specified."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"The clip behavior when [AnimatedContainer.decoration] is not null."}],"id":123,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedContainer","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【color】: Color 【Color】","【width】: Width 【double】","【height】: Height 【double】","【alignment】: Alignment 【AlignmentGeometry】","【decoration】: Decoration 【Decoration】","【constraints】: Constraints 【BoxConstraints】","【transform】: Transformation 【Matrix4】","【margin】: Margin 【EdgeInsetsGeometry】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_zh-CN.json new file mode 100644 index 000000000..ecc92a1af --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedContainer","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Container] 的动画版本,在一段时间内逐渐改变其值。","fields":[{"name":"child","type":"Widget?","desc":"容器包含的 [child]。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"在容器内对齐 [child]。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在 [decoration] 内部刻画的空白空间。[child](如果有)放置在此内边距内。"},{"name":"decoration","type":"Decoration?","desc":"在 [child] 后面绘制的装饰。"},{"name":"foregroundDecoration","type":"Decoration?","desc":"在子项前面绘制的装饰。"},{"name":"constraints","type":"BoxConstraints?","desc":"应用于子项的附加约束。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕 [decoration] 和 [child] 的空白空间。"},{"name":"transform","type":"Matrix4?","desc":"在绘制容器之前应用的变换矩阵。"},{"name":"transformAlignment","type":"AlignmentGeometry?","desc":"如果指定了 [transform],相对于容器大小的原点对齐方式。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"当 [AnimatedContainer.decoration] 不为空时的裁剪行为。"}],"id":123,"localName":"容器动画","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedContainer基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【color】 : 颜色 【Color】","【width】 : 宽 【double】","【height】 : 高 【double】","【alignment】 : 对齐 【AlignmentGeometry】","【decoration】 : 装饰 【Decoration】","【constraints】 : 约束 【BoxConstraints】","【transform】 : 变化 【Matrix4】","【margin】 : 外边距 【EdgeInsetsGeometry】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_en-US.json new file mode 100644 index 000000000..7640d86bc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedCrossFade","path":"/src/widgets/animated_cross_fade.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that cross-fades between two given children and animates itself between their sizes.","fields":[{"name":"firstChild","type":"Widget","required":true,"desc":"The child that is visible when [crossFadeState] is [CrossFadeState.showFirst]. It fades out when transitioning [crossFadeState] from [CrossFadeState.showFirst] to [CrossFadeState.showSecond] and vice versa."},{"name":"secondChild","type":"Widget","required":true,"desc":"The child that is visible when [crossFadeState] is [CrossFadeState.showSecond]. It fades in when transitioning [crossFadeState] from [CrossFadeState.showFirst] to [CrossFadeState.showSecond] and vice versa."},{"name":"crossFadeState","type":"CrossFadeState","required":true,"desc":"The child that will be shown when the animation has completed."},{"name":"duration","type":"Duration","required":true,"desc":"The duration of the whole orchestrated animation."},{"name":"reverseDuration","type":"Duration?","desc":"The duration of the whole orchestrated animation when running in reverse."},{"name":"firstCurve","type":"Curve","required":true,"desc":"The fade curve of the first child."},{"name":"secondCurve","type":"Curve","required":true,"desc":"The fade curve of the second child."},{"name":"sizeCurve","type":"Curve","required":true,"desc":"The curve of the animation between the two children's sizes."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How the children should be aligned while the size is animating."},{"name":"layoutBuilder","type":"AnimatedCrossFadeBuilder","required":true,"desc":"A builder that positions the [firstChild] and [secondChild] widgets."},{"name":"excludeBottomFocus","type":"bool","required":true,"desc":"When true, this is equivalent to wrapping the bottom widget with an [ExcludeFocus] widget while it is at the bottom of the cross-fade stack."}],"id":100,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedCrossFade","desc":["【firstChild】 : First Child 【Widget】","【secondChild】 : Second Child 【Widget】","【crossFadeState】 : Which to Display 【CrossFadeState】","【duration】 : Duration 【Duration】"]},{"file":"node2_curve.dart","name":"Animation Curves of AnimatedCrossFade","desc":["【firstCurve】 : First Curve 【Curve】","【secondCurve】 : Second Curve 【Curve】","【sizeCurve】 : Size Change Curve 【CrossFadeState】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_zh-CN.json new file mode 100644 index 000000000..0ea991a04 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedCrossFade","path":"/src/widgets/animated_cross_fade.dart","parents":["StatefulWidget","Widget"],"desc":"在两个给定子项之间交叉淡入淡出并在它们的大小之间进行动画的小部件。","fields":[{"name":"firstChild","type":"Widget","required":true,"desc":"当 [crossFadeState] 为 [CrossFadeState.showFirst] 时可见的子项。当 [crossFadeState] 从 [CrossFadeState.showFirst] 转换到 [CrossFadeState.showSecond] 时淡出,反之亦然。"},{"name":"secondChild","type":"Widget","required":true,"desc":"当 [crossFadeState] 为 [CrossFadeState.showSecond] 时可见的子项。当 [crossFadeState] 从 [CrossFadeState.showFirst] 转换到 [CrossFadeState.showSecond] 时淡入,反之亦然。"},{"name":"crossFadeState","type":"CrossFadeState","required":true,"desc":"动画完成时将显示的子项。"},{"name":"duration","type":"Duration","required":true,"desc":"整个编排动画的持续时间。"},{"name":"reverseDuration","type":"Duration?","desc":"反向运行时整个编排动画的持续时间。"},{"name":"firstCurve","type":"Curve","required":true,"desc":"第一个子项的淡入淡出曲线。"},{"name":"secondCurve","type":"Curve","required":true,"desc":"第二个子项的淡入淡出曲线。"},{"name":"sizeCurve","type":"Curve","required":true,"desc":"两个子项大小之间动画的曲线。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"在大小进行动画时子项应如何对齐。"},{"name":"layoutBuilder","type":"AnimatedCrossFadeBuilder","required":true,"desc":"定位 [firstChild] 和 [secondChild] 小部件的构建器。"},{"name":"excludeBottomFocus","type":"bool","required":true,"desc":"当为 true 时,这等同于在底部小部件位于交叉淡入淡出堆栈底部时用 [ExcludeFocus] 小部件包装它。"}],"id":100,"localName":"组件切换","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedCrossFade基本使用","desc":["【firstChild】 : 第一孩子 【Widget】","【secondChild】 : 第二孩子 【Widget】","【crossFadeState】 : 显示第几个 【CrossFadeState】","【duration】 : 时长 【Duration】"]},{"file":"node2_curve.dart","name":"AnimatedCrossFade动画曲线","desc":["【firstCurve】 : 第一曲线 【Curve】","【secondCurve】 : 第二曲线 【Curve】","【sizeCurve】 : 尺寸变化曲线 【CrossFadeState】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_en-US.json new file mode 100644 index 000000000..9b8af9e58 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedDefaultTextStyle","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [DefaultTextStyle] which automatically transitions the default text style (the text style to apply to descendant [Text] widgets without explicit style) over a given duration whenever the given style changes.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"style","type":"TextStyle","required":true,"desc":"The target text style."},{"name":"textAlign","type":"TextAlign?","desc":"How the text should be aligned horizontally."},{"name":"softWrap","type":"bool","required":true,"desc":"Whether the text should break at soft line breaks."},{"name":"overflow","type":"TextOverflow","required":true,"desc":"How visual overflow should be handled."},{"name":"maxLines","type":"int?","desc":"An optional maximum number of lines for the text to span, wrapping if necessary."},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"The strategy to use when calculating the width of the Text."},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"}],"id":124,"lever":3,"family":1,"linkIds":[114,324],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedDefaultTextStyle","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【textAlign】: Text alignment 【TextAlign】","【softWrap】: Whether to wrap 【bool】","【maxLines】: Maximum number of lines 【int】","【overflow】: Overflow mode 【TextOverflow】","【style】: Text style 【TextStyle】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_zh-CN.json new file mode 100644 index 000000000..9174d25dd --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedDefaultTextStyle","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[DefaultTextStyle] 的动画版本,当给定样式发生变化时,会在给定持续时间内自动过渡默认文本样式(应用于没有显式样式的后代 [Text] 小部件的文本样式)。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"style","type":"TextStyle","required":true,"desc":"目标文本样式。"},{"name":"textAlign","type":"TextAlign?","desc":"文本应如何水平对齐。"},{"name":"softWrap","type":"bool","required":true,"desc":"文本是否应在软换行符处换行。"},{"name":"overflow","type":"TextOverflow","required":true,"desc":"应如何处理视觉溢出。"},{"name":"maxLines","type":"int?","desc":"文本跨越的可选最大行数,必要时换行。"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"计算文本宽度时使用的策略。"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"}],"id":124,"localName":"容器动画","lever":3,"family":1,"linkIds":[114,324],"nodes":[{"file":"node1_base.dart","name":"AnimatedDefaultTextStyle基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【textAlign】 : 文字对齐方式 【TextAlign】","【softWrap】 : 是否包裹 【bool】","【maxLines】 : 最大行数 【int】","【overflow】 : 溢出模式 【TextOverflow】","【style】 : 文字样式 【TextStyle】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_en-US.json new file mode 100644 index 000000000..c80008ea8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedFractionallySizedBox","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [FractionallySizedBox] which automatically transitions the child's size over a given duration whenever the given [widthFactor] or [heightFactor] changes, as well as the position whenever the given [alignment] changes.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"heightFactor","type":"double?","desc":"{@macro flutter.widgets.basic.fractionallySizedBox.heightFactor}"},{"name":"widthFactor","type":"double?","desc":"{@macro flutter.widgets.basic.fractionallySizedBox.widthFactor}"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"{@macro flutter.widgets.basic.fractionallySizedBox.alignment}"}],"id":260,"lever":3,"family":1,"linkIds":[82,120,123,121],"nodes":[{"file":"node1.dart","name":"Animation Transition Effect","desc":["In this case, the heightFactor, widthFactor, and alignment parameters are modified when clicked to view the animation effect.","【child】 : Child component 【Widget】","【duration】 : Animation duration 【Duration】","【onEnd】 : Animation end callback 【Function()】","【alignment】 : Animation transformation center 【Alignment】","【curve】 : Animation curve 【Duration】","【heightFactor】 : Height factor 【double?】","【widthFactor】 : Width factor 【double?】","【turns】 : Rotation amount 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_zh-CN.json new file mode 100644 index 000000000..3dffd8d5c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedFractionallySizedBox","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[FractionallySizedBox] 的动画版本,当给定的 [widthFactor] 或 [heightFactor] 发生变化时,会在给定持续时间内自动过渡子项的大小,以及当给定的 [alignment] 发生变化时过渡位置。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"heightFactor","type":"double?","desc":"{@macro flutter.widgets.basic.fractionallySizedBox.heightFactor}"},{"name":"widthFactor","type":"double?","desc":"{@macro flutter.widgets.basic.fractionallySizedBox.widthFactor}"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"{@macro flutter.widgets.basic.fractionallySizedBox.alignment}"}],"id":260,"localName":"动画分率盒","lever":3,"family":1,"linkIds":[82,120,123,121],"nodes":[{"file":"node1.dart","name":"动画过渡效果","desc":["该案例中,点击时会修改 heightFactor、widthFactor、alignment 参数,查看动画运动效果。","【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【alignment】 : 动画变换中心 【Alignment】","【curve】 : 动画曲线 【Duration】","【heightFactor】 : 高度分率 【double?】","【widthFactor】 : 宽度分率 【double?】","【turns】 : 旋转量 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_en-US.json new file mode 100644 index 000000000..87a68edc8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedGrid","path":"/src/widgets/animated_scroll_view.dart","parents":["_AnimatedScrollView","StatefulWidget","Widget"],"desc":" A scrolling container that animates items when they are inserted into or removed from a grid. in a grid.","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"{@template flutter.widgets.AnimatedGrid.gridDelegate} A delegate that controls the layout of the children within the [AnimatedGrid]."}],"id":323,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_zh-CN.json new file mode 100644 index 000000000..c77eb16ab --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedGrid","path":"/src/widgets/animated_scroll_view.dart","parents":["_AnimatedScrollView","StatefulWidget","Widget"],"desc":"一个滚动容器,当项目插入或从网格中移除时对其进行动画处理。","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"{@template flutter.widgets.AnimatedGrid.gridDelegate} 控制 [AnimatedGrid] 内子项布局的委托。"}],"id":323,"localName":"AnimatedGrid","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_en-US.json new file mode 100644 index 000000000..c2336bb58 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedIcon","path":"/src/material/animated_icons/animated_icons.dart","parents":["StatelessWidget","Widget"],"desc":" Shows an animated icon at a given animation [progress].","fields":[{"name":"progress","type":"Animation","required":true,"desc":"The animation progress for the animated icon."},{"name":"color","type":"Color?","desc":"The color to use when drawing the icon."},{"name":"size","type":"double?","desc":"The size of the icon in logical pixels."},{"name":"icon","type":"AnimatedIconData","required":true,"desc":"The icon to display. Available icons are listed in [AnimatedIcons]."},{"name":"semanticLabel","type":"String?","desc":"Semantic label for the icon."},{"name":"textDirection","type":"TextDirection?","desc":"The text direction to use for rendering the icon."}],"id":125,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedIcon","desc":["【icon】: Animation icon data 【AnimatedIcons】","【size】: Size 【double】","【color】: Color 【Color】","【progress】: Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_zh-CN.json new file mode 100644 index 000000000..d2c467769 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedIcon","path":"/src/material/animated_icons/animated_icons.dart","parents":["StatelessWidget","Widget"],"desc":"在给定动画 [progress] 处显示动画图标。","fields":[{"name":"progress","type":"Animation","required":true,"desc":"动画图标的动画进度。"},{"name":"color","type":"Color?","desc":"绘制图标时使用的颜色。"},{"name":"size","type":"double?","desc":"图标的逻辑像素大小。"},{"name":"icon","type":"AnimatedIconData","required":true,"desc":"要显示的图标。可用图标列在 [AnimatedIcons] 中。"},{"name":"semanticLabel","type":"String?","desc":"图标的语义标签。"},{"name":"textDirection","type":"TextDirection?","desc":"用于渲染图标的文本方向。"}],"id":125,"localName":"图标动画","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedIcon基本使用","desc":["【icon】 : 动画图标数据 【AnimatedIcons】","【size】 : 大小 【double】","【color】 : 颜色 【Color】","【progress】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_en-US.json new file mode 100644 index 000000000..f3488814b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedList","path":"/src/widgets/animated_scroll_view.dart","parents":["_AnimatedScrollView","StatefulWidget","Widget"],"desc":" A scrolling container that animates items when they are inserted or removed.","fields":[],"id":117,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedList","desc":["【itemBuilder】: Component builder 【AnimatedListItemBuilder】","【initialItemCount】: Number of child components 【int】","【scrollDirection】: Scroll direction 【Axis】","【controller】: Scroll controller 【ScrollController】","【reverse】: Whether the data is reversed 【bool】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_zh-CN.json new file mode 100644 index 000000000..299865f1e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedList","path":"/src/widgets/animated_scroll_view.dart","parents":["_AnimatedScrollView","StatefulWidget","Widget"],"desc":"一个滚动容器,当项目插入或移除时对其进行动画处理。","fields":[],"id":117,"localName":"动画列表","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedList基本使用","desc":["【itemBuilder】 : 组件构造器 【AnimatedListItemBuilder】","【initialItemCount】 : 子组件数量 【int】","【scrollDirection】 : 滑动方向 【Axis】","【controller】 : 滑动控制器 【ScrollController】","【reverse】 : 数据是否反向 【bool】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_en-US.json new file mode 100644 index 000000000..2d8056198 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedModalBarrier","path":"/src/widgets/modal_barrier.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" A widget that prevents the user from interacting with widgets behind itself, and can be configured with an animated color value.","fields":[{"name":"dismissible","type":"bool","required":true,"desc":"Whether touching the barrier will pop the current route off the [Navigator]."},{"name":"semanticsLabel","type":"String?","desc":"Semantics label used for the barrier if it is [dismissible]."},{"name":"barrierSemanticsDismissible","type":"bool?","desc":"Whether the modal barrier semantics are included in the semantics tree."},{"name":"onDismiss","type":"VoidCallback?","desc":"{@macro flutter.widgets.ModalBarrier.onDismiss}"},{"name":"clipDetailsNotifier","type":"ValueNotifier?","desc":"{@macro flutter.widgets.ModalBarrier.clipDetailsNotifier}"},{"name":"semanticsOnTapHint","type":"String?","desc":"This hint text instructs users what they are able to do when they tap on the [ModalBarrier]"}],"id":227,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to AnimatedModalBarrier","desc":["【dismissible】: Whether to return on click 【bool】","【color】: Color 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_zh-CN.json new file mode 100644 index 000000000..243903aa6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_zh-CN.json @@ -0,0 +1,58 @@ +{ + "name": "AnimatedModalBarrier", + "path": "/src/widgets/modal_barrier.dart", + "parents": [ + "AnimatedWidget", + "StatefulWidget", + "Widget" + ], + "desc": "一个阻止用户与其后面的小部件交互的小部件,可以配置动画颜色值。", + "fields": [ + { + "name": "dismissible", + "type": "bool", + "required": true, + "desc": "触摸屏障是否会从 [Navigator] 中弹出当前路由。" + }, + { + "name": "semanticsLabel", + "type": "String?", + "desc": "如果屏障是 [dismissible] 的,用于屏障的语义标签。" + }, + { + "name": "barrierSemanticsDismissible", + "type": "bool?", + "desc": "模态屏障语义是否包含在语义树中。" + }, + { + "name": "onDismiss", + "type": "VoidCallback?", + "desc": "{@macro flutter.widgets.ModalBarrier.onDismiss}" + }, + { + "name": "clipDetailsNotifier", + "type": "ValueNotifier?", + "desc": "{@macro flutter.widgets.ModalBarrier.clipDetailsNotifier}" + }, + { + "name": "semanticsOnTapHint", + "type": "String?", + "desc": "此提示文本指示用户在点击 [ModalBarrier] 时能够执行的操作" + } + ], + "id": 227, + "localName": "动画屏障模", + "lever": 1, + "family": 1, + "linkIds": [], + "nodes": [ + { + "file": "node1_base.dart", + "name": "AnimatedModalBarrier 介绍", + "desc": [ + "【dismissible】 : 点击是否返回 【bool】", + "【color】 : 颜色 【Animation】" + ] + } + ] +} diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_en-US.json new file mode 100644 index 000000000..3ded2b301 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_en-US.json @@ -0,0 +1,49 @@ +{ + "name": "AnimatedOpacity", + "path": "/src/widgets/implicit_animations.dart", + "parents": [ + "ImplicitlyAnimatedWidget", + "StatefulWidget", + "Widget" + ], + "desc": " Animated version of [Opacity] which automatically transitions the child's opacity over a given duration whenever the given opacity changes.", + "fields": [ + { + "name": "child", + "type": "Widget?", + "desc": "The widget below this widget in the tree." + }, + { + "name": "opacity", + "type": "double", + "required": true, + "desc": "The target opacity." + }, + { + "name": "alwaysIncludeSemantics", + "type": "bool", + "required": true, + "desc": "Whether the semantic information of the children is always included." + } + ], + "id": 118, + "lever": 3, + "family": 1, + "linkIds": [ + 89, + 73 + ], + "nodes": [ + { + "file": "node1_base.dart", + "name": "Basic Usage of AnimatedOpacity", + "desc": [ + "【child】: Child component 【Widget】", + "【duration】: Animation duration 【Duration】", + "【onEnd】: Animation end callback 【Function()】", + "【curve】: Animation curve 【Duration】", + "【opacity】: Opacity 【double】" + ] + } + ] +} diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_zh-CN.json new file mode 100644 index 000000000..17a99e6fa --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedOpacity","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Opacity] 的动画版本,当给定的不透明度发生变化时,会在给定持续时间内自动过渡子项的不透明度。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"opacity","type":"double","required":true,"desc":"目标不透明度。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含子项的语义信息。"}],"id":118,"localName":"透明动画","lever":3,"family":1,"linkIds":[89,73],"nodes":[{"file":"node1_base.dart","name":"AnimatedOpacity基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【opacity】 : 透明度 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_en-US.json new file mode 100644 index 000000000..84849e02a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedPadding","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Padding] which automatically transitions the indentation over a given duration whenever the given inset changes.","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the child."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":119,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedPadding","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_zh-CN.json new file mode 100644 index 000000000..28d5c3d7e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedPadding","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Padding] 的动画版本,当给定的插入值发生变化时,会在给定持续时间内自动过渡缩进。","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"子项的插入空间量。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":119,"localName":"边距动画","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedPadding基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_en-US.json new file mode 100644 index 000000000..abf4767a7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedPhysicalModel","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [PhysicalModel].","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"shape","type":"BoxShape","required":true,"desc":"The type of shape."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"borderRadius","type":"BorderRadius?","desc":"The target border radius of the rounded corners for a rectangle shape."},{"name":"elevation","type":"double","required":true,"desc":"The target z-coordinate relative to the parent at which to place this physical object."},{"name":"color","type":"Color","required":true,"desc":"The target background color."},{"name":"animateColor","type":"bool","required":true,"desc":"Whether the color should be animated."},{"name":"shadowColor","type":"Color","required":true,"desc":"The target shadow color."},{"name":"animateShadowColor","type":"bool","required":true,"desc":"Whether the shadow color should be animated."}],"id":225,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedPhysicalModel","desc":["【color】: Background color 【Color】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【shape】: Shape 【BoxShape】","【elevation】: Elevation 【double】","【borderRadius】: Border radius 【BorderRadius】","【shadowColor】: Shadow color 【Color】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_zh-CN.json new file mode 100644 index 000000000..c5e54acd7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedPhysicalModel","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[PhysicalModel] 的动画版本。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"shape","type":"BoxShape","required":true,"desc":"形状的类型。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"borderRadius","type":"BorderRadius?","desc":"矩形形状圆角的目标边框半径。"},{"name":"elevation","type":"double","required":true,"desc":"相对于父级放置此物理对象的目标 z 坐标。"},{"name":"color","type":"Color","required":true,"desc":"目标背景颜色。"},{"name":"animateColor","type":"bool","required":true,"desc":"颜色是否应该动画。"},{"name":"shadowColor","type":"Color","required":true,"desc":"目标阴影颜色。"},{"name":"animateShadowColor","type":"bool","required":true,"desc":"阴影颜色是否应该动画。"}],"id":225,"localName":"物理模块动画","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedPhysicalModel基本使用","desc":["【color】 : 背景色 【Color】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【shape】 : 形状 【BoxShape】","【elevation】 : 影深 【double】","【borderRadius】 : 圆角 【BorderRadius】","【shadowColor】 : 阴影色 【Color】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_en-US.json new file mode 100644 index 000000000..efa0430a8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedPositioned","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Positioned] which automatically transitions the child's position over a given duration whenever the given position changes.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"left","type":"double?","desc":"The offset of the child's left edge from the left of the stack."},{"name":"top","type":"double?","desc":"The offset of the child's top edge from the top of the stack."},{"name":"right","type":"double?","desc":"The offset of the child's right edge from the right of the stack."},{"name":"bottom","type":"double?","desc":"The offset of the child's bottom edge from the bottom of the stack."},{"name":"width","type":"double?","desc":"The child's width."},{"name":"height","type":"double?","desc":"The child's height."}],"id":121,"lever":3,"family":1,"linkIds":[108,93,122],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedPositioned","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【top】: Distance to parent top 【double】","【right】: Distance to parent right 【double】","【left】: Distance to parent left 【double】","【bottom】: Distance to parent bottom 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_zh-CN.json new file mode 100644 index 000000000..bbc09b37a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedPositioned","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Positioned] 的动画版本,当给定位置发生变化时,会在给定持续时间内自动过渡子项的位置。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"left","type":"double?","desc":"子项左边缘距离堆栈左侧的偏移量。"},{"name":"top","type":"double?","desc":"子项顶部边缘距离堆栈顶部的偏移量。"},{"name":"right","type":"double?","desc":"子项右边缘距离堆栈右侧的偏移量。"},{"name":"bottom","type":"double?","desc":"子项底部边缘距离堆栈底部的偏移量。"},{"name":"width","type":"double?","desc":"子项的宽度。"},{"name":"height","type":"double?","desc":"子项的高度。"}],"id":121,"localName":"定位动画","lever":3,"family":1,"linkIds":[108,93,122],"nodes":[{"file":"node1_base.dart","name":"AnimatedPositioned基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【top】 : 到父顶距离 【double】","【right】 : 到父右距离 【double】","【left】 : 到父左距离 【double】","【bottom】 : 到父底距离 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_en-US.json new file mode 100644 index 000000000..fb5a5f6ef --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedPositionedDirectional","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [PositionedDirectional] which automatically transitions the child's position over a given duration whenever the given position changes.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"start","type":"double?","desc":"The offset of the child's start edge from the start of the stack."},{"name":"top","type":"double?","desc":"The offset of the child's top edge from the top of the stack."},{"name":"end","type":"double?","desc":"The offset of the child's end edge from the end of the stack."},{"name":"bottom","type":"double?","desc":"The offset of the child's bottom edge from the bottom of the stack."},{"name":"width","type":"double?","desc":"The child's width."},{"name":"height","type":"double?","desc":"The child's height."}],"id":122,"lever":3,"family":1,"linkIds":[121,159],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedPositionedDirectional","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【top】: Distance to parent top 【double】","【end】: Distance to parent right 【double】","【start】: Distance to parent left 【double】","【bottom】: Distance to parent bottom 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_zh-CN.json new file mode 100644 index 000000000..3fc0ae575 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedPositionedDirectional","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[PositionedDirectional] 的动画版本,当给定位置发生变化时,会在给定持续时间内自动过渡子项的位置。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"start","type":"double?","desc":"子项起始边缘距离堆栈起始位置的偏移量。"},{"name":"top","type":"double?","desc":"子项顶部边缘距离堆栈顶部的偏移量。"},{"name":"end","type":"double?","desc":"子项结束边缘距离堆栈结束位置的偏移量。"},{"name":"bottom","type":"double?","desc":"子项底部边缘距离堆栈底部的偏移量。"},{"name":"width","type":"double?","desc":"子项的宽度。"},{"name":"height","type":"double?","desc":"子项的高度。"}],"id":122,"localName":"方向定位动画","lever":3,"family":1,"linkIds":[121,159],"nodes":[{"file":"node1_base.dart","name":"AnimatedPositionedDirectional基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【top】 : 到父顶距离 【double】","【end】 : 到父右距离 【double】","【start】 : 到父左距离 【double】","【bottom】 : 到父底距离 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_en-US.json new file mode 100644 index 000000000..42c89f958 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedRotation","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Transform.rotate] which automatically transitions the child's rotation over a given duration whenever the given rotation changes.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"turns","type":"double","required":true,"desc":"The animation that controls the rotation of the child."},{"name":"alignment","type":"Alignment","required":true,"desc":"The alignment of the origin of the coordinate system in which the rotation takes place, relative to the size of the box."},{"name":"filterQuality","type":"FilterQuality?","desc":"The filter quality with which to apply the transform as a bitmap operation."}],"id":259,"lever":3,"family":1,"linkIds":[247,249],"nodes":[{"file":"node1.dart","name":"Rotation Animation Effect","desc":["In this case, drag to adjust the turns parameter to see the animation effect. The rotation angle is: turns*2*pi","【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【alignment】: Animation transformation center 【Alignment】","【curve】: Animation curve 【Duration】","【filterQuality】: Filter quality 【FilterQuality】","【turns】: Rotation amount 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_zh-CN.json new file mode 100644 index 000000000..b1b43acd6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedRotation","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Transform.rotate] 的动画版本,当给定旋转发生变化时,会在给定持续时间内自动过渡子项的旋转。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"turns","type":"double","required":true,"desc":"控制子项旋转的动画。"},{"name":"alignment","type":"Alignment","required":true,"desc":"旋转发生的坐标系原点相对于盒子大小的对齐方式。"},{"name":"filterQuality","type":"FilterQuality?","desc":"作为位图操作应用变换的滤镜质量。"}],"id":259,"localName":"旋转动画","lever":3,"family":1,"linkIds":[247,249],"nodes":[{"file":"node1.dart","name":"旋转动画效果","desc":["该案例中,拖拽调节 turns 参数,查看动画运动效果。旋转角度为: turns*2*pi","【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【alignment】 : 动画变换中心 【Alignment】","【curve】 : 动画曲线 【Duration】","【filterQuality】 : 滤镜质量 【FilterQuality】","【turns】 : 旋转量 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_en-US.json new file mode 100644 index 000000000..d5b2379e3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedScale","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Transform.scale] which automatically transitions the child's scale over a given duration whenever the given scale changes.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"scale","type":"double","required":true,"desc":"The target scale."},{"name":"alignment","type":"Alignment","required":true,"desc":"The alignment of the origin of the coordinate system in which the scale takes place, relative to the size of the box."},{"name":"filterQuality","type":"FilterQuality?","desc":"The filter quality with which to apply the transform as a bitmap operation."}],"id":249,"lever":3,"family":1,"linkIds":[120,247,201],"nodes":[{"file":"node1.dart","name":"Scaling Animation Effect","desc":["In this case, drag to adjust the scale parameter to view the animation effect.","【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【alignment】: Animation transformation center 【Alignment】","【filterQuality】: Filter quality 【FilterQuality】","【scale】: Scaling amount 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_zh-CN.json new file mode 100644 index 000000000..8f18c532e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedScale","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Transform.scale] 的动画版本,当给定缩放发生变化时,会在给定持续时间内自动过渡子项的缩放。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"scale","type":"double","required":true,"desc":"目标缩放。"},{"name":"alignment","type":"Alignment","required":true,"desc":"缩放发生的坐标系原点相对于盒子大小的对齐方式。"},{"name":"filterQuality","type":"FilterQuality?","desc":"作为位图操作应用变换的滤镜质量。"}],"id":249,"localName":"缩放动画","lever":3,"family":1,"linkIds":[120,247,201],"nodes":[{"file":"node1.dart","name":"缩放动画效果","desc":["该案例中,拖拽调节 scale 参数,查看动画运动效果。","【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【alignment】 : 动画变换中心 【Alignment】","【filterQuality】 : 滤镜质量 【FilterQuality】","【scale】 : 缩放量 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_en-US.json new file mode 100644 index 000000000..ba3fa709b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedSize","path":"/src/widgets/animated_size.dart","parents":["StatefulWidget","Widget"],"desc":" Animated widget that automatically transitions its size over a given duration whenever the given child's size changes.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"The alignment of the child within the parent when the parent is not yet the same size as the child."},{"name":"curve","type":"Curve","required":true,"desc":"The animation curve when transitioning this widget's size to match the child's size."},{"name":"duration","type":"Duration","required":true,"desc":"The duration when transitioning this widget's size to match the child's size."},{"name":"reverseDuration","type":"Duration?","desc":"The duration when transitioning this widget's size to match the child's size when going in reverse."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"onEnd","type":"VoidCallback?","desc":"Called every time an animation completes."}],"id":201,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedSize","desc":["【child】 : Child component 【Widget】","【duration】 : Animation duration 【Duration】","【alignment】 : Alignment 【AlignmentGeometry】","【curve】 : Animation curve 【Duration】","【vsync】 : vsync 【TickerProvider】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_zh-CN.json new file mode 100644 index 000000000..78a578f41 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedSize","path":"/src/widgets/animated_size.dart","parents":["StatefulWidget","Widget"],"desc":"动画小部件,当给定子项的大小发生变化时,会在给定持续时间内自动过渡其大小。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"当父级尚未与子级大小相同时,子级在父级内的对齐方式。"},{"name":"curve","type":"Curve","required":true,"desc":"过渡此小部件大小以匹配子项大小时的动画曲线。"},{"name":"duration","type":"Duration","required":true,"desc":"过渡此小部件大小以匹配子项大小时的持续时间。"},{"name":"reverseDuration","type":"Duration?","desc":"反向过渡此小部件大小以匹配子项大小时的持续时间。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"onEnd","type":"VoidCallback?","desc":"每次动画完成时调用。"}],"id":201,"localName":"尺寸动画","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedSize基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【alignment】 : 对齐方式 【AlignmentGeometry】","【curve】 : 动画曲线 【Duration】","【vsync】 : vsync 【TickerProvider】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_en-US.json new file mode 100644 index 000000000..6d3a49ab1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_en-US.json @@ -0,0 +1,44 @@ +{ + "name": "AnimatedSlide", + "path": "/src/widgets/implicit_animations.dart", + "parents": [ + "ImplicitlyAnimatedWidget", + "StatefulWidget", + "Widget" + ], + "desc": " Widget which automatically transitions the child's offset relative to its normal position whenever the given offset changes.", + "fields": [ + { + "name": "child", + "type": "Widget?", + "desc": "The widget below this widget in the tree." + }, + { + "name": "offset", + "type": "Offset", + "required": true, + "desc": "The target offset. The child will be translated horizontally by `width * dx` and vertically by `height * dy`" + } + ], + "id": 247, + "lever": 3, + "family": 1, + "linkIds": [ + 120, + 201 + ], + "nodes": [ + { + "file": "node1.dart", + "name": "Slide Animation Effect", + "desc": [ + "In this case, drag to adjust the x, y parameters to view the animation effect. The offset = x, y * the width and height of the box.", + "【child】: child component 【Widget】", + "【duration】: animation duration 【Duration】", + "【onEnd】: animation end callback 【Function()】", + "【curve】: animation curve 【Duration】", + "【offset】: offset 【Offset】" + ] + } + ] +} diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_zh-CN.json new file mode 100644 index 000000000..0fc2f0116 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_zh-CN.json @@ -0,0 +1,45 @@ +{ + "name": "AnimatedSlide", + "path": "/src/widgets/implicit_animations.dart", + "parents": [ + "ImplicitlyAnimatedWidget", + "StatefulWidget", + "Widget" + ], + "desc": "当给定偏移量发生变化时,自动过渡子项相对于其正常位置的偏移量的小部件。", + "fields": [ + { + "name": "child", + "type": "Widget?", + "desc": "树中此小部件下方的小部件。" + }, + { + "name": "offset", + "type": "Offset", + "required": true, + "desc": "目标偏移量。子项将水平平移 `width * dx`,垂直平移 `height * dy`" + } + ], + "id": 247, + "localName": "滑动动画", + "lever": 3, + "family": 1, + "linkIds": [ + 120, + 201 + ], + "nodes": [ + { + "file": "node1.dart", + "name": "滑动动画效果", + "desc": [ + "该案例中,拖拽调节 x,y 参数,查看动画运动效果。其中偏移量 = x,y * 方框宽高", + "【child】 : 孩子组件 【Widget】", + "【duration】 : 动画时长 【Duration】", + "【onEnd】 : 动画结束回调 【Function()】", + "【curve】 : 动画曲线 【Duration】", + "【offset】 : 偏移量 【Offset】" + ] + } + ] +} diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_en-US.json new file mode 100644 index 000000000..67ea4b1ce --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedSwitcher","path":"/src/widgets/animated_switcher.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that by default does a cross-fade between a new widget and the widget previously set on the [AnimatedSwitcher] as a child.","fields":[{"name":"child","type":"Widget?","desc":"The current child widget to display. If there was a previous child, then that child will be faded out using the [switchOutCurve], while the new child is faded in with the [switchInCurve], over the [duration]."},{"name":"duration","type":"Duration","required":true,"desc":"The duration of the transition from the old [child] value to the new one."},{"name":"reverseDuration","type":"Duration?","desc":"The duration of the transition from the new [child] value to the old one."},{"name":"switchInCurve","type":"Curve","required":true,"desc":"The animation curve to use when transitioning in a new [child]."},{"name":"switchOutCurve","type":"Curve","required":true,"desc":"The animation curve to use when transitioning a previous [child] out."},{"name":"transitionBuilder","type":"AnimatedSwitcherTransitionBuilder","required":true,"desc":"A function that wraps a new [child] with an animation that transitions the [child] in when the animation runs in the forward direction and out when the animation runs in the reverse direction. This is only called when a new [child] is set (not for each build), or when a new [transitionBuilder] is set. If a new [transitionBuilder] is set, then the transition is rebuilt for the current child and all previous children using the new [transitionBuilder]. The function must not return null."},{"name":"layoutBuilder","type":"AnimatedSwitcherLayoutBuilder","required":true,"desc":"A function that wraps all of the children that are transitioning out, and the [child] that's transitioning in, with a widget that lays all of them out. This is called every time this widget is built. The function must not return null."}],"id":116,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedSwitcher","desc":["【child】 : Child component 【Widget】","【duration】 : Animation duration 【Duration】","【switchOutCurve】 : Switch out curve 【Curves】","【switchInCurve】 : Switch in curve 【Curves】","【switchInCurve】 : Switch in curve 【Curves】","【transitionBuilder】 : Animation builder 【Widget Function(Widget, Animation)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_zh-CN.json new file mode 100644 index 000000000..0b00daa8f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedSwitcher","path":"/src/widgets/animated_switcher.dart","parents":["StatefulWidget","Widget"],"desc":"默认情况下在新小部件和之前设置为 [AnimatedSwitcher] 子项的小部件之间进行交叉淡入淡出的小部件。","fields":[{"name":"child","type":"Widget?","desc":"要显示的当前子小部件。如果之前有子项,则该子项将使用 [switchOutCurve] 淡出,而新子项将使用 [switchInCurve] 在 [duration] 内淡入。"},{"name":"duration","type":"Duration","required":true,"desc":"从旧 [child] 值到新值的过渡持续时间。"},{"name":"reverseDuration","type":"Duration?","desc":"从新 [child] 值到旧值的过渡持续时间。"},{"name":"switchInCurve","type":"Curve","required":true,"desc":"过渡新 [child] 时使用的动画曲线。"},{"name":"switchOutCurve","type":"Curve","required":true,"desc":"过渡之前的 [child] 时使用的动画曲线。"},{"name":"transitionBuilder","type":"AnimatedSwitcherTransitionBuilder","required":true,"desc":"一个函数,用动画包装新的 [child],当动画正向运行时过渡 [child] 进入,当动画反向运行时过渡出去。仅在设置新 [child] 时(不是每次构建时)或设置新 [transitionBuilder] 时调用。如果设置了新的 [transitionBuilder],则使用新的 [transitionBuilder] 为当前子项和所有之前的子项重建过渡。该函数不得返回 null。"},{"name":"layoutBuilder","type":"AnimatedSwitcherLayoutBuilder","required":true,"desc":"一个函数,用小部件包装所有正在过渡出去的子项和正在过渡进入的 [child],该小部件布局所有这些子项。每次构建此小部件时都会调用此函数。该函数不得返回 null。"}],"id":116,"localName":"动画切换","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedSwitcher基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【switchOutCurve】 : 切出曲线 【Curves】","【switchInCurve】 : 切入曲线 【Curves】","【switchInCurve】 : 切入曲线 【Curves】","【transitionBuilder】 : 动画构造器 【Widget Function(Widget, Animation)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_en-US.json new file mode 100644 index 000000000..4b4506883 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedTheme","path":"/src/material/theme.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Theme] which automatically transitions the colors, etc, over a given duration whenever the given theme changes.","fields":[{"name":"data","type":"ThemeData","required":true,"desc":"Specifies the color and typography values for descendant widgets."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":224,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedTheme","desc":["【data】 : Theme data 【ThemeData】","【duration】 : Animation duration 【Duration】","【onEnd】 : Animation end callback 【Function()】","【curve】 : Animation curve 【Duration】","【child】 : Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_zh-CN.json new file mode 100644 index 000000000..2ef3a2461 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedTheme","path":"/src/material/theme.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Theme] 的动画版本,当给定主题发生变化时,会在给定持续时间内自动过渡颜色等。","fields":[{"name":"data","type":"ThemeData","required":true,"desc":"为后代小部件指定颜色和排版值。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":224,"localName":"动画主题","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedTheme基本使用","desc":["【data】 : 主题数据 【ThemeData】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_en-US.json new file mode 100644 index 000000000..8d12f50b3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_en-US.json @@ -0,0 +1 @@ +{"name":"AnimatedWidget","path":"/src/widgets/transitions.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" A widget that rebuilds when the given [Listenable] changes value.","fields":[{"name":"listenable","type":"Listenable","required":true,"desc":"The [Listenable] to which this widget is listening."}],"id":362,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_zh-CN.json new file mode 100644 index 000000000..119153985 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnimatedWidget","path":"/src/widgets/transitions.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"当给定的 [Listenable] 值发生变化时重建的小部件。","fields":[{"name":"listenable","type":"Listenable","required":true,"desc":"此小部件正在监听的 [Listenable]。"}],"id":362,"localName":"AnimatedWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_en-US.json b/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_en-US.json new file mode 100644 index 000000000..40a8efc2e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_en-US.json @@ -0,0 +1 @@ +{"name":"AnnotatedRegion","path":"/src/widgets/annotated_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Annotates a region of the layer tree with a value.","fields":[{"name":"value","type":"T","required":true,"desc":"A value which can be retrieved using [Layer.find]."},{"name":"sized","type":"bool","required":true,"desc":"If false, the layer pushed into the tree will not be provided with a size."}],"id":288,"lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnnotatedRegion Changes State Variables and Styles","desc":["【value】 : value 【T】","【sized】 : whether to provide size 【bool】","【child】 : child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_zh-CN.json new file mode 100644 index 000000000..92e237535 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_zh-CN.json @@ -0,0 +1 @@ +{"name":"AnnotatedRegion","path":"/src/widgets/annotated_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"用值注释图层树的区域。","fields":[{"name":"value","type":"T","required":true,"desc":"可以使用 [Layer.find] 检索的值。"},{"name":"sized","type":"bool","required":true,"desc":"如果为 false,推入树中的图层将不会提供大小。"}],"id":288,"localName":"标注区域","lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnnotatedRegion改变状态量样式","desc":["【value】 : 值 【T】","【sized】 : 是否提供大小 【bool】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_en-US.json b/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_en-US.json new file mode 100644 index 000000000..22065f42a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_en-US.json @@ -0,0 +1 @@ +{"name":"AppBar","path":"/src/material/app_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design app bar.","fields":[{"name":"leading","type":"Widget?","desc":"{@template flutter.material.appbar.leading} A widget to display before the toolbar's [title]."},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@template flutter.material.appbar.automaticallyImplyLeading} Controls whether we should try to imply the leading widget if null."},{"name":"title","type":"Widget?","desc":"{@template flutter.material.appbar.title} The primary widget displayed in the app bar."},{"name":"actions","type":"List?","desc":"{@template flutter.material.appbar.actions} A list of Widgets to display in a row after the [title] widget."},{"name":"flexibleSpace","type":"Widget?","desc":"{@template flutter.material.appbar.flexibleSpace} This widget is stacked behind the toolbar and the tab bar. Its height will be the same as the app bar's overall height."},{"name":"bottom","type":"PreferredSizeWidget?","desc":"{@template flutter.material.appbar.bottom} This widget appears across the bottom of the app bar."},{"name":"elevation","type":"double?","desc":"{@template flutter.material.appbar.elevation} The z-coordinate at which to place this app bar relative to its parent."},{"name":"scrolledUnderElevation","type":"double?","desc":"{@template flutter.material.appbar.scrolledUnderElevation} The elevation that will be used if this app bar has something scrolled underneath it."},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"A check that specifies which child's [ScrollNotification]s should be listened to."},{"name":"shadowColor","type":"Color?","desc":"{@template flutter.material.appbar.shadowColor} The color of the shadow below the app bar."},{"name":"surfaceTintColor","type":"Color?","desc":"{@template flutter.material.appbar.surfaceTintColor} The color of the surface tint overlay applied to the app bar's background color to indicate elevation."},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.appbar.shape} The shape of the app bar's [Material] as well as its shadow."},{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.material.appbar.backgroundColor} The fill color to use for an app bar's [Material]."},{"name":"foregroundColor","type":"Color?","desc":"{@template flutter.material.appbar.foregroundColor} The default color for [Text] and [Icon]s within the app bar."},{"name":"iconTheme","type":"IconThemeData?","desc":"{@template flutter.material.appbar.iconTheme} The color, opacity, and size to use for toolbar icons."},{"name":"actionsIconTheme","type":"IconThemeData?","desc":"{@template flutter.material.appbar.actionsIconTheme} The color, opacity, and size to use for the icons that appear in the app bar's [actions]."},{"name":"primary","type":"bool","required":true,"desc":"{@template flutter.material.appbar.primary} Whether this app bar is being displayed at the top of the screen."},{"name":"centerTitle","type":"bool?","desc":"{@template flutter.material.appbar.centerTitle} Whether the title should be centered."},{"name":"excludeHeaderSemantics","type":"bool","required":true,"desc":"{@template flutter.material.appbar.excludeHeaderSemantics} Whether the title should be wrapped with header [Semantics]."},{"name":"titleSpacing","type":"double?","desc":"{@template flutter.material.appbar.titleSpacing} The spacing around [title] content on the horizontal axis. This spacing is applied even if there is no [leading] content or [actions]. If you want [title] to take all the space available, set this value to 0.0."},{"name":"toolbarOpacity","type":"double","required":true,"desc":"{@template flutter.material.appbar.toolbarOpacity} How opaque the toolbar part of the app bar is."},{"name":"bottomOpacity","type":"double","required":true,"desc":"{@template flutter.material.appbar.bottomOpacity} How opaque the bottom part of the app bar is."},{"name":"preferredSize","type":"Size","required":true,"desc":"{@template flutter.material.appbar.preferredSize} A size whose height is the sum of [toolbarHeight] and the [bottom] widget's preferred height."},{"name":"toolbarHeight","type":"double?","desc":"{@template flutter.material.appbar.toolbarHeight} Defines the height of the toolbar component of an [AppBar]."},{"name":"leadingWidth","type":"double?","desc":"{@template flutter.material.appbar.leadingWidth} Defines the width of [AppBar.leading] widget."},{"name":"toolbarTextStyle","type":"TextStyle?","desc":"{@template flutter.material.appbar.toolbarTextStyle} The default text style for the AppBar's [leading], and [actions] widgets, but not its [title]."},{"name":"titleTextStyle","type":"TextStyle?","desc":"{@template flutter.material.appbar.titleTextStyle} The default text style for the AppBar's [title] widget."},{"name":"systemOverlayStyle","type":"SystemUiOverlayStyle?","desc":"{@template flutter.material.appbar.systemOverlayStyle} Specifies the style to use for the system overlays (e.g. the status bar on Android or iOS, the system navigation bar on Android)."},{"name":"forceMaterialTransparency","type":"bool","required":true,"desc":"{@template flutter.material.appbar.forceMaterialTransparency} Forces the AppBar's Material widget type to be [MaterialType.transparency] (instead of Material's default type)."},{"name":"useDefaultSemanticsOrder","type":"bool","required":true,"desc":"{@template flutter.material.appbar.useDefaultSemanticsOrder} Whether to use the default semantic ordering for the app bar's children for accessibility traversal order."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"{@template flutter.material.appbar.actionsPadding} The padding between the [actions] and the end of the AppBar."}],"id":57,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AppBar","desc":["【leading】 : Left component 【Widget】","【title】 : Middle component 【Widget】","【actions】 : Right component 【List】","【elevation】 : Shadow depth 【double】","【shape】 : Shape 【ShapeBorder】","【backgroundColor】 : Background color 【Color】","【centerTitle】 : Whether the title is centered 【bool】"]},{"file":"node2_tab.dart","name":"Using AppBar with TabBar and TabBarView","desc":["【bottom】 : Bottom component 【PreferredSizeWidget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_zh-CN.json new file mode 100644 index 000000000..7b439af90 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"AppBar","path":"/src/material/app_bar.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 应用栏。","fields":[{"name":"leading","type":"Widget?","desc":"{@template flutter.material.appbar.leading} 在工具栏 [title] 之前显示的小部件。"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@template flutter.material.appbar.automaticallyImplyLeading} 控制当 leading 为 null 时是否应尝试推断 leading 小部件。"},{"name":"title","type":"Widget?","desc":"{@template flutter.material.appbar.title} 在应用栏中显示的主要小部件。"},{"name":"actions","type":"List?","desc":"{@template flutter.material.appbar.actions} 在 [title] 小部件之后以行形式显示的小部件列表。"},{"name":"flexibleSpace","type":"Widget?","desc":"{@template flutter.material.appbar.flexibleSpace} 此小部件堆叠在工具栏和选项卡栏后面。其高度将与应用栏的整体高度相同。"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"{@template flutter.material.appbar.bottom} 此小部件出现在应用栏底部。"},{"name":"elevation","type":"double?","desc":"{@template flutter.material.appbar.elevation} 相对于其父级放置此应用栏的 z 坐标。"},{"name":"scrolledUnderElevation","type":"double?","desc":"{@template flutter.material.appbar.scrolledUnderElevation} 如果此应用栏下方有滚动内容,将使用的高度。"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"指定应监听哪个子项的 [ScrollNotification] 的检查。"},{"name":"shadowColor","type":"Color?","desc":"{@template flutter.material.appbar.shadowColor} 应用栏下方阴影的颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"{@template flutter.material.appbar.surfaceTintColor} 应用于应用栏背景颜色以指示高度的表面色调叠加的颜色。"},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.appbar.shape} 应用栏 [Material] 及其阴影的形状。"},{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.material.appbar.backgroundColor} 用于应用栏 [Material] 的填充颜色。"},{"name":"foregroundColor","type":"Color?","desc":"{@template flutter.material.appbar.foregroundColor} 应用栏内 [Text] 和 [Icon] 的默认颜色。"},{"name":"iconTheme","type":"IconThemeData?","desc":"{@template flutter.material.appbar.iconTheme} 用于工具栏图标的颜色、不透明度和大小。"},{"name":"actionsIconTheme","type":"IconThemeData?","desc":"{@template flutter.material.appbar.actionsIconTheme} 用于应用栏 [actions] 中出现的图标的颜色、不透明度和大小。"},{"name":"primary","type":"bool","required":true,"desc":"{@template flutter.material.appbar.primary} 此应用栏是否显示在屏幕顶部。"},{"name":"centerTitle","type":"bool?","desc":"{@template flutter.material.appbar.centerTitle} 标题是否应居中。"},{"name":"excludeHeaderSemantics","type":"bool","required":true,"desc":"{@template flutter.material.appbar.excludeHeaderSemantics} 标题是否应用标题 [Semantics] 包装。"},{"name":"titleSpacing","type":"double?","desc":"{@template flutter.material.appbar.titleSpacing} 水平轴上 [title] 内容周围的间距。即使没有 [leading] 内容或 [actions],也会应用此间距。如果希望 [title] 占用所有可用空间,请将此值设置为 0.0。"},{"name":"toolbarOpacity","type":"double","required":true,"desc":"{@template flutter.material.appbar.toolbarOpacity} 应用栏工具栏部分的不透明度。"},{"name":"bottomOpacity","type":"double","required":true,"desc":"{@template flutter.material.appbar.bottomOpacity} 应用栏底部部分的不透明度。"},{"name":"preferredSize","type":"Size","required":true,"desc":"{@template flutter.material.appbar.preferredSize} 高度为 [toolbarHeight] 和 [bottom] 小部件首选高度之和的大小。"},{"name":"toolbarHeight","type":"double?","desc":"{@template flutter.material.appbar.toolbarHeight} 定义 [AppBar] 工具栏组件的高度。"},{"name":"leadingWidth","type":"double?","desc":"{@template flutter.material.appbar.leadingWidth} 定义 [AppBar.leading] 小部件的宽度。"},{"name":"toolbarTextStyle","type":"TextStyle?","desc":"{@template flutter.material.appbar.toolbarTextStyle} AppBar 的 [leading] 和 [actions] 小部件的默认文本样式,但不包括其 [title]。"},{"name":"titleTextStyle","type":"TextStyle?","desc":"{@template flutter.material.appbar.titleTextStyle} AppBar 的 [title] 小部件的默认文本样式。"},{"name":"systemOverlayStyle","type":"SystemUiOverlayStyle?","desc":"{@template flutter.material.appbar.systemOverlayStyle} 指定用于系统叠加层的样式(例如 Android 或 iOS 上的状态栏,Android 上的系统导航栏)。"},{"name":"forceMaterialTransparency","type":"bool","required":true,"desc":"{@template flutter.material.appbar.forceMaterialTransparency} 强制 AppBar 的 Material 小部件类型为 [MaterialType.transparency](而不是 Material 的默认类型)。"},{"name":"useDefaultSemanticsOrder","type":"bool","required":true,"desc":"{@template flutter.material.appbar.useDefaultSemanticsOrder} 是否对应用栏的子项使用默认语义顺序进行辅助功能遍历顺序。"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"{@template flutter.material.appbar.actionsPadding} [actions] 和 AppBar 末端之间的内边距。"}],"id":57,"localName":"应用头栏","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AppBar基本使用","desc":["【leading】 : 左侧组件 【Widget】","【title】 : 中间组件 【Widget】","【actions】 : 右侧组件 【List】","【elevation】 : 影深 【double】","【shape】 : 形状 【ShapeBorder】","【backgroundColor】 : 影深 【背景色】","【centerTitle】 : 中间是否居中 【bool】"]},{"file":"node2_tab.dart","name":"AppBar与TabBar、TabBarView联用","desc":["【bottom】 : 底部组件 【PreferredSizeWidget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_en-US.json b/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_en-US.json new file mode 100644 index 000000000..f3801b33a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_en-US.json @@ -0,0 +1 @@ +{"name":"AppKitView","path":"/src/widgets/platform_view.dart","parents":["_DarwinView","StatefulWidget","Widget"],"desc":" Widget that contains a macOS AppKit view.","fields":[],"id":363,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_zh-CN.json new file mode 100644 index 000000000..0e4e9ad84 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_zh-CN.json @@ -0,0 +1 @@ +{"name":"AppKitView","path":"/src/widgets/platform_view.dart","parents":["_DarwinView","StatefulWidget","Widget"],"desc":"包含 macOS AppKit 视图的小部件。","fields":[],"id":363,"localName":"AppKitView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_en-US.json b/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_en-US.json new file mode 100644 index 000000000..5f650c97b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_en-US.json @@ -0,0 +1 @@ +{"name":"AspectRatio","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that attempts to size the child to a specific aspect ratio.","fields":[{"name":"aspectRatio","type":"double","required":true,"desc":"The aspect ratio to attempt to use."}],"id":77,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AspectRatio","desc":["【child】: Child component 【Widget】","【aspectRatio】: Aspect ratio 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_zh-CN.json new file mode 100644 index 000000000..fb6f6a8e5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_zh-CN.json @@ -0,0 +1 @@ +{"name":"AspectRatio","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"尝试将子项调整为特定宽高比的小部件。","fields":[{"name":"aspectRatio","type":"double","required":true,"desc":"尝试使用的宽高比。"}],"id":77,"localName":"比例盒","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AspectRatio基本使用","desc":["【child】 : 孩子组件 【Widget】","【aspectRatio】 : 宽高比例 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_en-US.json b/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_en-US.json new file mode 100644 index 000000000..7e0582130 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_en-US.json @@ -0,0 +1 @@ +{"name":"Autocomplete","path":"/src/material/autocomplete.dart","parents":["StatelessWidget","Widget"],"desc":" {@macro flutter.widgets.RawAutocomplete.RawAutocomplete}","fields":[{"name":"displayStringForOption","type":"AutocompleteOptionToString","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.displayStringForOption}"},{"name":"fieldViewBuilder","type":"AutocompleteFieldViewBuilder","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.fieldViewBuilder}"},{"name":"onSelected","type":"AutocompleteOnSelected?","desc":"{@macro flutter.widgets.RawAutocomplete.onSelected}"},{"name":"optionsBuilder","type":"AutocompleteOptionsBuilder","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.optionsBuilder}"},{"name":"optionsViewBuilder","type":"AutocompleteOptionsViewBuilder?","desc":"{@macro flutter.widgets.RawAutocomplete.optionsViewBuilder}"},{"name":"optionsViewOpenDirection","type":"OptionsViewOpenDirection","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.optionsViewOpenDirection}"},{"name":"optionsMaxHeight","type":"double","required":true,"desc":"The maximum height used for the default Material options list widget."},{"name":"initialValue","type":"TextEditingValue?","desc":"{@macro flutter.widgets.RawAutocomplete.initialValue}"}],"id":356,"lever":4,"family":0,"linkIds":[54,199],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Autocomplete","desc":["【optionsBuilder】: Option builder 【AutocompleteOptionsBuilder】","【onSelected】: Callback when selected 【AutocompleteOnSelected】"]},{"file":"node2_type.dart","name":"Generics of Autocomplete","desc":["【optionsViewBuilder】: Panel builder 【AutocompleteOptionsViewBuilder】","【fieldViewBuilder】: Input builder 【AutocompleteFieldViewBuilder】","【displayStringForOption】: Text display 【AutocompleteOptionToString】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_zh-CN.json new file mode 100644 index 000000000..54a48da22 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_zh-CN.json @@ -0,0 +1 @@ +{"name":"Autocomplete","path":"/src/material/autocomplete.dart","parents":["StatelessWidget","Widget"],"desc":"{@macro flutter.widgets.RawAutocomplete.RawAutocomplete}","fields":[{"name":"displayStringForOption","type":"AutocompleteOptionToString","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.displayStringForOption}"},{"name":"fieldViewBuilder","type":"AutocompleteFieldViewBuilder","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.fieldViewBuilder}"},{"name":"onSelected","type":"AutocompleteOnSelected?","desc":"{@macro flutter.widgets.RawAutocomplete.onSelected}"},{"name":"optionsBuilder","type":"AutocompleteOptionsBuilder","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.optionsBuilder}"},{"name":"optionsViewBuilder","type":"AutocompleteOptionsViewBuilder?","desc":"{@macro flutter.widgets.RawAutocomplete.optionsViewBuilder}"},{"name":"optionsViewOpenDirection","type":"OptionsViewOpenDirection","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.optionsViewOpenDirection}"},{"name":"optionsMaxHeight","type":"double","required":true,"desc":"用于默认 Material 选项列表小部件的最大高度。"},{"name":"initialValue","type":"TextEditingValue?","desc":"{@macro flutter.widgets.RawAutocomplete.initialValue}"}],"id":356,"localName":"自动填充","lever":4,"family":0,"linkIds":[54,199],"nodes":[{"file":"node1_base.dart","name":"Autocomplete基本使用","desc":["【optionsBuilder】 : 选项构造器 【AutocompleteOptionsBuilder】","【onSelected】 : 选择时回调 【AutocompleteOnSelected】"]},{"file":"node2_type.dart","name":"Autocomplete的泛型","desc":["【optionsViewBuilder】 : 面板构造器 【AutocompleteOptionsViewBuilder】","【fieldViewBuilder】 : 输入构造器 【AutocompleteFieldViewBuilder】","【displayStringForOption】 : 文字展示 【AutocompleteOptionToString】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_en-US.json b/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_en-US.json new file mode 100644 index 000000000..1de4e8c7d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_en-US.json @@ -0,0 +1 @@ +{"name":"AutocompleteHighlightedOption","path":"/src/widgets/autocomplete.dart","parents":["InheritedNotifier","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget used to indicate which autocomplete option should be highlighted for keyboard navigation.","fields":[],"id":364,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_zh-CN.json new file mode 100644 index 000000000..a4e8a4db6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_zh-CN.json @@ -0,0 +1 @@ +{"name":"AutocompleteHighlightedOption","path":"/src/widgets/autocomplete.dart","parents":["InheritedNotifier","InheritedWidget","ProxyWidget","Widget"],"desc":"用于指示应为键盘导航突出显示哪个自动完成选项的继承小部件。","fields":[],"id":364,"localName":"AutocompleteHighlightedOption","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_en-US.json new file mode 100644 index 000000000..946138ff1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_en-US.json @@ -0,0 +1 @@ +{"name":"AutofillGroup","path":"/src/widgets/autofill.dart","parents":["StatefulWidget","Widget"],"desc":" An [AutofillScope] widget that groups [AutofillClient]s together.","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"},{"name":"onDisposeAction","type":"AutofillContextAction","required":true,"desc":"The [AutofillContextAction] to be run when this [AutofillGroup] is the topmost [AutofillGroup] and it's being disposed, in order to clean up the current autofill context."}],"id":365,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_zh-CN.json new file mode 100644 index 000000000..86ac6f402 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_zh-CN.json @@ -0,0 +1 @@ +{"name":"AutofillGroup","path":"/src/widgets/autofill.dart","parents":["StatefulWidget","Widget"],"desc":"将 [AutofillClient] 组合在一起的 [AutofillScope] 小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"},{"name":"onDisposeAction","type":"AutofillContextAction","required":true,"desc":"当此 [AutofillGroup] 是最顶层的 [AutofillGroup] 且正在被释放时要运行的 [AutofillContextAction],以清理当前自动填充上下文。"}],"id":365,"localName":"AutofillGroup","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_en-US.json b/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_en-US.json new file mode 100644 index 000000000..861cb968a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_en-US.json @@ -0,0 +1 @@ +{"name":"AutomaticKeepAlive","path":"/src/widgets/automatic_keep_alive.dart","parents":["StatefulWidget","Widget"],"desc":" Allows subtrees to request to be kept alive in lazy lists.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":239,"lever":1,"family":1,"linkIds":[59,162,163,165,185,188],"nodes":[{"file":"node1_base.dart","name":"Introduction to AutomaticKeepAlive","desc":["【child】: Child component 【Widget】","The AutomaticKeepAlive component is used in the source code of list and page-switching components such as ListView, SliverList, GridView, SliverGrid, PageView, and TabBarView. When keeping a State alive, you can use AutomaticKeepAliveClientMixin, which is a simple encapsulation of the use of KeepAliveNotification. This example demonstrates the state preservation of ListView items."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_zh-CN.json new file mode 100644 index 000000000..bba5a60e8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_zh-CN.json @@ -0,0 +1 @@ +{"name":"AutomaticKeepAlive","path":"/src/widgets/automatic_keep_alive.dart","parents":["StatefulWidget","Widget"],"desc":"允许子树请求在惰性列表中保持活动状态。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":239,"localName":"自动保活","lever":1,"family":1,"linkIds":[59,162,163,165,185,188],"nodes":[{"file":"node1_base.dart","name":"AutomaticKeepAlive 介绍","desc":["【child】 : 子组件 【Widget】","在 ListView、SliverList、GridView、SliverGrid、PageView、TabBarView 等列表、切页组件源码中都有使用到 AutomaticKeepAlive 组件。在保活某个 State 时,可以使用 AutomaticKeepAliveClientMixin 进行操作,它是对 KeepAliveNotification 使用的一个简易封装。该示例展示出 ListView 条目的状态保活。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_en-US.json b/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_en-US.json new file mode 100644 index 000000000..454dad3f2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_en-US.json @@ -0,0 +1 @@ +{"name":"BackButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":" A Material Design back icon button.","fields":[],"id":31,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BackButton Properties","desc":["【color】: Color 【Color】","【style】: Button Style 【ButtonStyle?】","【onPressed】: Click Event 【Function】"," If onPressed is empty, it will exit the current stack."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_zh-CN.json new file mode 100644 index 000000000..273d51db6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"BackButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":"Material Design 返回图标按钮。","fields":[],"id":31,"localName":"返回按钮","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BackButton属性","desc":["【color】: 颜色 【Color】","【style】: 按钮样式 【ButtonStyle?】","【onPressed】: 点击事件 【Function】"," onPressed为空会退出当前栈"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_en-US.json new file mode 100644 index 000000000..d0a12532a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_en-US.json @@ -0,0 +1 @@ +{"name":"BackButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":" A \"back\" icon that's appropriate for the current [TargetPlatform].","fields":[],"id":272,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BackButtonIcon Effect","desc":["The _ActionIcon component adapts the back button icon for different platforms according to the ActionIconTheme."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_zh-CN.json new file mode 100644 index 000000000..8d4f0d49f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_zh-CN.json @@ -0,0 +1 @@ +{"name":"BackButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":"适合当前 [TargetPlatform] 的\"返回\"图标。","fields":[],"id":272,"localName":"返回按钮图标","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BackButtonIcon 效果","desc":["通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的返回按钮图标。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_en-US.json b/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_en-US.json new file mode 100644 index 000000000..27e115a58 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_en-US.json @@ -0,0 +1 @@ +{"name":"BackButtonListener","path":"/src/widgets/router.dart","parents":["StatefulWidget","Widget"],"desc":" A convenience widget that registers a callback for when the back button is pressed.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"onBackButtonPressed","type":"ValueGetter>","required":true,"desc":"The callback function that will be called when the back button is pressed."}],"id":366,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_zh-CN.json new file mode 100644 index 000000000..1b44432da --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_zh-CN.json @@ -0,0 +1 @@ +{"name":"BackButtonListener","path":"/src/widgets/router.dart","parents":["StatefulWidget","Widget"],"desc":"一个便利小部件,用于注册按下返回按钮时的回调。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"onBackButtonPressed","type":"ValueGetter>","required":true,"desc":"按下返回按钮时将调用的回调函数。"}],"id":366,"localName":"BackButtonListener","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_en-US.json b/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_en-US.json new file mode 100644 index 000000000..2f7288ba8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_en-US.json @@ -0,0 +1 @@ +{"name":"BackdropFilter","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that applies a filter to the existing painted content and then paints [child].","fields":[{"name":"filter","type":"ui.ImageFilter","required":true,"desc":"The image filter to apply to the existing painted content before painting the child."},{"name":"blendMode","type":"BlendMode","required":true,"desc":"The blend mode to use to apply the filtered background content onto the background surface."},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not to apply the backdrop filter operation to the child of this widget."},{"name":"backdropGroupKey","type":"BackdropKey?","desc":"The [BackdropKey] that identifies the backdrop this filter will apply to."}],"id":278,"lever":4,"family":2,"linkIds":[88,97,67],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of BackdropFilter","desc":["【child】: Child component 【Widget】","【filter】: Filter 【ImageFilter】","ImageFilter.blur can achieve Gaussian blur by specifying the x and y blur factors."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_zh-CN.json new file mode 100644 index 000000000..f228b5815 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_zh-CN.json @@ -0,0 +1 @@ +{"name":"BackdropFilter","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对现有绘制内容应用滤镜然后绘制 [child] 的小部件。","fields":[{"name":"filter","type":"ui.ImageFilter","required":true,"desc":"在绘制子项之前应用于现有绘制内容的图像滤镜。"},{"name":"blendMode","type":"BlendMode","required":true,"desc":"用于将过滤的背景内容应用到背景表面的混合模式。"},{"name":"enabled","type":"bool","required":true,"desc":"是否对此小部件的子项应用背景滤镜操作。"},{"name":"backdropGroupKey","type":"BackdropKey?","desc":"标识此滤镜将应用到的背景的 [BackdropKey]。"}],"id":278,"localName":"背景滤镜","lever":4,"family":2,"linkIds":[88,97,67],"nodes":[{"file":"node1_base.dart","name":"BackdropFilter基本使用","desc":["【child】 : 孩子组件 【Widget】","【filter】 : 过滤器 【ImageFilter】","ImageFilter.blur可以实现高斯模糊,指定x,y模糊因子。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_en-US.json new file mode 100644 index 000000000..05e616f64 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_en-US.json @@ -0,0 +1 @@ +{"name":"BackdropGroup","path":"/src/widgets/basic.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" A widget that establishes a shared backdrop layer for all child [BackdropFilter] widgets that opt into using it.","fields":[{"name":"backdropKey","type":"BackdropKey","required":true,"desc":"The backdrop key this backdrop group will use with shared child layers."}],"id":367,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_zh-CN.json new file mode 100644 index 000000000..21006a441 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_zh-CN.json @@ -0,0 +1 @@ +{"name":"BackdropGroup","path":"/src/widgets/basic.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为所有选择使用它的子 [BackdropFilter] 小部件建立共享背景层的小部件。","fields":[{"name":"backdropKey","type":"BackdropKey","required":true,"desc":"此背景组将与共享子层一起使用的背景键。"}],"id":367,"localName":"BackdropGroup","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Badge/Badge_en-US.json b/modules/widget_system/widgets/doc/widgets/Badge/Badge_en-US.json new file mode 100644 index 000000000..e5b0052d4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Badge/Badge_en-US.json @@ -0,0 +1 @@ +{"name":"Badge","path":"/src/material/badge.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design \"badge\".","fields":[{"name":"backgroundColor","type":"Color?","desc":"The badge's fill color."},{"name":"textColor","type":"Color?","desc":"The color of the badge's [label] text."},{"name":"smallSize","type":"double?","desc":"The diameter of the badge if [label] is null."},{"name":"largeSize","type":"double?","desc":"The badge's height if [label] is non-null."},{"name":"textStyle","type":"TextStyle?","desc":"The [DefaultTextStyle] for the badge's label."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The padding added to the badge's label."},{"name":"alignment","type":"AlignmentGeometry?","desc":"Combined with [offset] to determine the location of the [label] relative to the [child]."},{"name":"offset","type":"Offset?","desc":"Combined with [alignment] to determine the location of the [label] relative to the [child]."},{"name":"label","type":"Widget?","desc":"The badge's content, typically a [Text] widget that contains 1 to 4 characters."},{"name":"isLabelVisible","type":"bool","required":true,"desc":"If false, the badge's [label] is not included."},{"name":"child","type":"Widget?","desc":"The widget that the badge is stacked on top of."}],"id":258,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node_1.dart","name":"Usage of Badge Dot Marker","desc":["【backgroundColor】: Background color 【Color?】","【isLabelVisible】: Whether to display the marker 【bool】","【smallSize】: Diameter when there is no label 【double?】","【child】: Child component 【Widget?】"]},{"file":"node_2.dart","name":"Badge Label Marker","desc":["【label】: Title component 【Widget?】","【textStyle】: Title color 【TextStyle?】","【textColor】: Title style 【Color?】","【padding】: Title margin 【EdgeInsetsGeometry?】","【largeSize】: Height when there is a label 【double?】"]},{"file":"node_3.dart","name":"Badge Offset","desc":["【offset】: Marker offset 【Offset?】","【alignment】: Title offset 【AlignmentDirectional?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Badge/Badge_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Badge/Badge_zh-CN.json new file mode 100644 index 000000000..c79a3528f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Badge/Badge_zh-CN.json @@ -0,0 +1 @@ +{"name":"Badge","path":"/src/material/badge.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design \",徽章\"。","fields":[{"name":"backgroundColor","type":"Color?","desc":"徽章的填充颜色。"},{"name":"textColor","type":"Color?","desc":"徽章 [label] 文本的颜色。"},{"name":"smallSize","type":"double?","desc":"如果 [label] 为 null,徽章的直径。"},{"name":"largeSize","type":"double?","desc":"如果 [label] 非空,徽章的高度。"},{"name":"textStyle","type":"TextStyle?","desc":"徽章标签的 [DefaultTextStyle]。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"添加到徽章标签的内边距。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"与 [offset] 结合确定 [label] 相对于 [child] 的位置。"},{"name":"offset","type":"Offset?","desc":"与 [alignment] 结合确定 [label] 相对于 [child] 的位置。"},{"name":"label","type":"Widget?","desc":"徽章的内容,通常是包含 1 到 4 个字符的 [Text] 小部件。"},{"name":"isLabelVisible","type":"bool","required":true,"desc":"如果为 false,则不包含徽章的 [label]。"},{"name":"child","type":"Widget?","desc":"徽章堆叠在其上方的小部件。"}],"id":258,"localName":"标记组件","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node_1.dart","name":"Badge 圆点标记的使用","desc":["【backgroundColor】 : 背景色 【Color?】","【isLabelVisible】 : 是否显示标记 【bool】","【smallSize】 : 无标签时直径 【double?】","【child】 : 子组件 【Widget?】"]},{"file":"node_2.dart","name":"Badge 标签标记","desc":["【label】 : 标题组件 【Widget?】","【textStyle】 : 标题颜色 【TextStyle?】","【textColor】 : 标题样式 【Color?】","【padding】 : 标题边距 【EdgeInsetsGeometry?】","【largeSize】 : 有标签时高度 【double?】,"]},{"file":"node_3.dart","name":"Badge 的偏移量","desc":["【offset】 : 标记偏移量 【Offset?】","【alignment】 : 标题偏移 【AlignmentDirectional?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_en-US.json new file mode 100644 index 000000000..aced9a51c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_en-US.json @@ -0,0 +1 @@ +{"name":"BadgeTheme","path":"/src/material/badge_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that overrides the default color style, and size parameters for [Badge]s in this widget's subtree.","fields":[{"name":"data","type":"BadgeThemeData","required":true,"desc":"Specifies the default color and size overrides for descendant [Badge] widgets."}],"id":368,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_zh-CN.json new file mode 100644 index 000000000..4ebb77071 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"BadgeTheme","path":"/src/material/badge_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"一个继承小部件,用于覆盖此小部件子树中 [Badge] 的默认颜色样式和大小参数。","fields":[{"name":"data","type":"BadgeThemeData","required":true,"desc":"为后代 [Badge] 小部件指定默认颜色和大小覆盖。"}],"id":368,"localName":"BadgeTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Banner/Banner_en-US.json b/modules/widget_system/widgets/doc/widgets/Banner/Banner_en-US.json new file mode 100644 index 000000000..ca771789a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Banner/Banner_en-US.json @@ -0,0 +1 @@ +{"name":"Banner","path":"/src/widgets/banner.dart","parents":["StatefulWidget","Widget"],"desc":" Displays a diagonal message above the corner of another widget.","fields":[{"name":"child","type":"Widget?","desc":"The widget to show behind the banner."},{"name":"message","type":"String","required":true,"desc":"The message to show in the banner."},{"name":"textDirection","type":"TextDirection?","desc":"The directionality of the text."},{"name":"location","type":"BannerLocation","required":true,"desc":"Where to show the banner (e.g., the upper right corner)."},{"name":"layoutDirection","type":"TextDirection?","desc":"The directionality of the layout."},{"name":"color","type":"Color","required":true,"desc":"The color of the banner."},{"name":"textStyle","type":"TextStyle","required":true,"desc":"The style of the text shown on the banner."},{"name":"shadow","type":"BoxShadow","required":true,"desc":"The shadow properties for the banner."}],"id":5,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Used to display a badge","desc":["【message】: The text message to display 【String】","【location】: Position*4 【BannerLocation】","【color】: Badge color 【Color】","【child】: Child 【Widget】","【textStyle】: Text style 【TextStyle】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Banner/Banner_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Banner/Banner_zh-CN.json new file mode 100644 index 000000000..60885513e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Banner/Banner_zh-CN.json @@ -0,0 +1 @@ +{"name":"Banner","path":"/src/widgets/banner.dart","parents":["StatefulWidget","Widget"],"desc":"在另一个小部件的角落上方显示对角线消息。","fields":[{"name":"child","type":"Widget?","desc":"在横幅后面显示的小部件。"},{"name":"message","type":"String","required":true,"desc":"在横幅中显示的消息。"},{"name":"textDirection","type":"TextDirection?","desc":"文本的方向性。"},{"name":"location","type":"BannerLocation","required":true,"desc":"显示横幅的位置(例如,右上角)。"},{"name":"layoutDirection","type":"TextDirection?","desc":"布局的方向性。"},{"name":"color","type":"Color","required":true,"desc":"横幅的颜色。"},{"name":"textStyle","type":"TextStyle","required":true,"desc":"横幅上显示的文本样式。"},{"name":"shadow","type":"BoxShadow","required":true,"desc":"横幅的阴影属性。"}],"id":5,"localName":"角标组件","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"用于显示一个角标","desc":["【message】 : 显示的文字信息 【String】","【location】 : 位置*4 【BannerLocation】","【color】: 角标颜色 【Color】","【child】: 孩子 【Widget】","【textStyle】: 文字样式 【TextStyle】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_en-US.json b/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_en-US.json new file mode 100644 index 000000000..343a98d04 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_en-US.json @@ -0,0 +1 @@ +{"name":"Baseline","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that positions its child according to the child's baseline.","fields":[{"name":"baseline","type":"double","required":true,"desc":"The number of logical pixels from the top of this box at which to position the child's baseline."},{"name":"baselineType","type":"TextBaseline","required":true,"desc":"The type of baseline to use for positioning the child."}],"id":75,"lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Baseline","desc":["【child】 : Child component 【Widget】","【baseline】 : Baseline position 【double】","【baselineType】 : Baseline type 【TextBaseline】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_zh-CN.json new file mode 100644 index 000000000..701d44e6d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_zh-CN.json @@ -0,0 +1 @@ +{"name":"Baseline","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"根据子项的基线定位其子项的小部件。","fields":[{"name":"baseline","type":"double","required":true,"desc":"从此盒子顶部开始的逻辑像素数,用于定位子项的基线。"},{"name":"baselineType","type":"TextBaseline","required":true,"desc":"用于定位子项的基线类型。"}],"id":75,"localName":"基线组件","lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Baseline基本使用","desc":["【child】 : 孩子组件 【Widget】","【baseline】 : 基线位置 【double】","【baselineType】 : 基线类型 【TextBaseline】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_en-US.json b/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_en-US.json new file mode 100644 index 000000000..938fbb779 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_en-US.json @@ -0,0 +1 @@ +{"name":"BlockSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that drops the semantics of all widget that were painted before it in the same semantic container.","fields":[{"name":"blocking","type":"bool","required":true,"desc":"Whether this widget is blocking semantics of all widget that were painted before it in the same semantic container."}],"id":369,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_zh-CN.json new file mode 100644 index 000000000..98b6986b8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_zh-CN.json @@ -0,0 +1 @@ +{"name":"BlockSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"一个小部件,用于丢弃在同一语义容器中在其之前绘制的所有小部件的语义。","fields":[{"name":"blocking","type":"bool","required":true,"desc":"此小部件是否阻止在同一语义容器中在其之前绘制的所有小部件的语义。"}],"id":369,"localName":"BlockSemantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_en-US.json b/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_en-US.json new file mode 100644 index 000000000..f0cdbc9e4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_en-US.json @@ -0,0 +1 @@ +{"name":"BottomAppBar","path":"/src/material/bottom_app_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A container that is typically used with [Scaffold.bottomNavigationBar].","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space to surround the child inside the bounds of the [BottomAppBar]."},{"name":"color","type":"Color?","desc":"The bottom app bar's background color."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this bottom app bar relative to its parent."},{"name":"shape","type":"NotchedShape?","desc":"The notch that is made for the floating action button."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"notchMargin","type":"double","required":true,"desc":"The margin between the [FloatingActionButton] and the [BottomAppBar]'s notch."},{"name":"surfaceTintColor","type":"Color?","desc":"A custom color for the Material 3 surface-tint elevation effect."},{"name":"shadowColor","type":"Color?","desc":"The color of the shadow below the app bar."},{"name":"height","type":"double?","desc":"The double value used to indicate the height of the [BottomAppBar]."}],"id":61,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of BottomAppBar","desc":["【elevation】: Elevation 【double】","【shape】: Shape 【NotchedShape】","【notchMargin】: Notch Margin 【double】","【color】: Color 【Color】","【child】: Child 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_zh-CN.json new file mode 100644 index 000000000..3fe91f384 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"BottomAppBar","path":"/src/material/bottom_app_bar.dart","parents":["StatefulWidget","Widget"],"desc":"通常与 [Scaffold.bottomNavigationBar] 一起使用的容器。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在 [BottomAppBar] 边界内围绕子项的空间量。"},{"name":"color","type":"Color?","desc":"底部应用栏的背景颜色。"},{"name":"elevation","type":"double?","desc":"相对于其父级放置此底部应用栏的 z 坐标。"},{"name":"shape","type":"NotchedShape?","desc":"为浮动操作按钮制作的缺口。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"notchMargin","type":"double","required":true,"desc":"[FloatingActionButton] 和 [BottomAppBar] 缺口之间的边距。"},{"name":"surfaceTintColor","type":"Color?","desc":"Material 3 表面色调高度效果的自定义颜色。"},{"name":"shadowColor","type":"Color?","desc":"应用栏下方阴影的颜色。"},{"name":"height","type":"double?","desc":"用于指示 [BottomAppBar] 高度的双精度值。"}],"id":61,"localName":"底部导航","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BottomAppBar基本用法","desc":["【elevation】 : 影深 【double】","【shape】 : 形状 【NotchedShape】","【notchMargin】 : 间隔距离 【double】","【color】 : 颜色 【Color】","【child】 : 孩子 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_en-US.json b/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_en-US.json new file mode 100644 index 000000000..beaec3f6c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_en-US.json @@ -0,0 +1 @@ +{"name":"BottomNavigationBar","path":"/src/material/bottom_navigation_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A material widget that's displayed at the bottom of an app for selecting among a small number of views, typically between three and five.","fields":[{"name":"items","type":"List","required":true,"desc":"Defines the appearance of the button items that are arrayed within the bottom navigation bar."},{"name":"onTap","type":"ValueChanged?","desc":"Called when one of the [items] is tapped."},{"name":"currentIndex","type":"int","required":true,"desc":"The index into [items] for the current active [BottomNavigationBarItem]."},{"name":"elevation","type":"double?","desc":"The z-coordinate of this [BottomNavigationBar]."},{"name":"type","type":"BottomNavigationBarType?","desc":"Defines the layout and behavior of a [BottomNavigationBar]."},{"name":"backgroundColor","type":"Color?","desc":"The color of the [BottomNavigationBar] itself."},{"name":"iconSize","type":"double","required":true,"desc":"The size of all of the [BottomNavigationBarItem] icons."},{"name":"selectedItemColor","type":"Color?","desc":"The color of the selected [BottomNavigationBarItem.icon] and [BottomNavigationBarItem.label]."},{"name":"unselectedItemColor","type":"Color?","desc":"The color of the unselected [BottomNavigationBarItem.icon] and [BottomNavigationBarItem.label]s."},{"name":"selectedIconTheme","type":"IconThemeData?","desc":"The size, opacity, and color of the icon in the currently selected [BottomNavigationBarItem.icon]."},{"name":"unselectedIconTheme","type":"IconThemeData?","desc":"The size, opacity, and color of the icon in the currently unselected [BottomNavigationBarItem.icon]s."},{"name":"selectedLabelStyle","type":"TextStyle?","desc":"The [TextStyle] of the [BottomNavigationBarItem] labels when they are selected."},{"name":"unselectedLabelStyle","type":"TextStyle?","desc":"The [TextStyle] of the [BottomNavigationBarItem] labels when they are not selected."},{"name":"selectedFontSize","type":"double","required":true,"desc":"The font size of the [BottomNavigationBarItem] labels when they are selected."},{"name":"unselectedFontSize","type":"double","required":true,"desc":"The font size of the [BottomNavigationBarItem] labels when they are not selected."},{"name":"showUnselectedLabels","type":"bool?","desc":"Whether the labels are shown for the unselected [BottomNavigationBarItem]s."},{"name":"showSelectedLabels","type":"bool?","desc":"Whether the labels are shown for the selected [BottomNavigationBarItem]."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the items."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"landscapeLayout","type":"BottomNavigationBarLandscapeLayout?","desc":"The arrangement of the bar's [items] when the enclosing [MediaQueryData.orientation] is [Orientation.landscape]."},{"name":"useLegacyColorScheme","type":"bool","required":true,"desc":"This flag is controlling how [BottomNavigationBar] is going to use the colors provided by the [selectedIconTheme], [unselectedIconTheme], [selectedItemColor], [unselectedItemColor]. The default value is `true` as the new theming logic is a breaking change. To opt-in the new theming logic set the flag to `false`"}],"id":60,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of BottomNavigationBar","desc":["【currentIndex】 : Current index 【int】","【elevation】 : Shadow depth 【double】","【type】 : Type*2 【BottomNavigationBarType】","【fixedColor】 : Color when type is fix 【Color】","【backgroundColor】 : Background color 【Color】","【iconSize】 : Icon size 【double】","【selectedLabelStyle】 : Selected text style 【TextStyle】","【unselectedLabelStyle】 : Unselected text style 【TextStyle】","【showUnselectedLabels】 : Show unselected labels 【bool】","【showSelectedLabels】 : Show selected labels 【bool】","【items】 : Items 【List】","【onTap】 : Click event 【Function(int)】"]},{"file":"node2_page.dart","name":"Page Switching with PageView","desc":["Use the controller for page switching during onTap"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_zh-CN.json new file mode 100644 index 000000000..2a4ce1b3f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"BottomNavigationBar","path":"/src/material/bottom_navigation_bar.dart","parents":["StatefulWidget","Widget"],"desc":"显示在应用底部的 Material 小部件,用于在少量视图中进行选择,通常在三到五个之间。","fields":[{"name":"items","type":"List","required":true,"desc":"定义排列在底部导航栏内的按钮项的外观。"},{"name":"onTap","type":"ValueChanged?","desc":"点击 [items] 中的一个时调用。"},{"name":"currentIndex","type":"int","required":true,"desc":"当前活动 [BottomNavigationBarItem] 在 [items] 中的索引。"},{"name":"elevation","type":"double?","desc":"此 [BottomNavigationBar] 的 z 坐标。"},{"name":"type","type":"BottomNavigationBarType?","desc":"定义 [BottomNavigationBar] 的布局和行为。"},{"name":"backgroundColor","type":"Color?","desc":"[BottomNavigationBar] 本身的颜色。"},{"name":"iconSize","type":"double","required":true,"desc":"所有 [BottomNavigationBarItem] 图标的大小。"},{"name":"selectedItemColor","type":"Color?","desc":"选中的 [BottomNavigationBarItem.icon] 和 [BottomNavigationBarItem.label] 的颜色。"},{"name":"unselectedItemColor","type":"Color?","desc":"未选中的 [BottomNavigationBarItem.icon] 和 [BottomNavigationBarItem.label] 的颜色。"},{"name":"selectedIconTheme","type":"IconThemeData?","desc":"当前选中的 [BottomNavigationBarItem.icon] 中图标的大小、不透明度和颜色。"},{"name":"unselectedIconTheme","type":"IconThemeData?","desc":"当前未选中的 [BottomNavigationBarItem.icon] 中图标的大小、不透明度和颜色。"},{"name":"selectedLabelStyle","type":"TextStyle?","desc":"选中时 [BottomNavigationBarItem] 标签的 [TextStyle]。"},{"name":"unselectedLabelStyle","type":"TextStyle?","desc":"未选中时 [BottomNavigationBarItem] 标签的 [TextStyle]。"},{"name":"selectedFontSize","type":"double","required":true,"desc":"选中时 [BottomNavigationBarItem] 标签的字体大小。"},{"name":"unselectedFontSize","type":"double","required":true,"desc":"未选中时 [BottomNavigationBarItem] 标签的字体大小。"},{"name":"showUnselectedLabels","type":"bool?","desc":"是否为未选中的 [BottomNavigationBarItem] 显示标签。"},{"name":"showSelectedLabels","type":"bool?","desc":"是否为选中的 [BottomNavigationBarItem] 显示标签。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在项目上时的光标。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"landscapeLayout","type":"BottomNavigationBarLandscapeLayout?","desc":"当包围的 [MediaQueryData.orientation] 为 [Orientation.landscape] 时,栏的 [items] 的排列。"},{"name":"useLegacyColorScheme","type":"bool","required":true,"desc":"此标志控制 [BottomNavigationBar] 如何使用 [selectedIconTheme]、[unselectedIconTheme]、[selectedItemColor]、[unselectedItemColor] 提供的颜色。默认值为 `true`,因为新的主题逻辑是一个破坏性更改。要选择新的主题逻辑,请将标志设置为 `false`"}],"id":60,"localName":"底部导航","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BottomNavigationBar基本使用","desc":["【currentIndex】 : 当前索引 【int】","【elevation】 : 影深 【double】","【type】 : 类型*2 【BottomNavigationBarType】","【fixedColor】 : type为fix的颜色 【Color】","【backgroundColor】 : 背景色 【Color】","【iconSize】 : 图标大小 【double】","【selectedLabelStyle】 : 选中文字样式 【TextStyle】","【unselectedLabelStyle】 : 未选中文字样式 【TextStyle】","【showUnselectedLabels】 : 显示未选中标签 【bool】","【showSelectedLabels】 : 显示选中标签 【bool】","【items】 : 条目 【List】","【onTap】 : 点击事件 【Function(int)】"]},{"file":"node2_page.dart","name":"可结合PageView进行切页","desc":["在onTap时进行使用控制器进行切页"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_en-US.json new file mode 100644 index 000000000..d2402bb48 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_en-US.json @@ -0,0 +1 @@ +{"name":"BottomNavigationBarTheme","path":"/src/material/bottom_navigation_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a bottom navigation bar theme to descendant [BottomNavigationBar] widgets.","fields":[{"name":"data","type":"BottomNavigationBarThemeData","required":true,"desc":"The properties used for all descendant [BottomNavigationBar] widgets."}],"id":371,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_zh-CN.json new file mode 100644 index 000000000..8c53e6265 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"BottomNavigationBarTheme","path":"/src/material/bottom_navigation_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将底部导航栏主题应用于后代 [BottomNavigationBar] 小部件。","fields":[{"name":"data","type":"BottomNavigationBarThemeData","required":true,"desc":"用于所有后代 [BottomNavigationBar] 小部件的属性。"}],"id":371,"localName":"BottomNavigationBarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_en-US.json b/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_en-US.json new file mode 100644 index 000000000..fed4f770e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_en-US.json @@ -0,0 +1 @@ +{"name":"BottomSheet","path":"/src/material/bottom_sheet.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design bottom sheet.","fields":[{"name":"animationController","type":"AnimationController?","desc":"The animation controller that controls the bottom sheet's entrance and exit animations."},{"name":"onClosing","type":"VoidCallback","required":true,"desc":"Called when the bottom sheet begins to close."},{"name":"builder","type":"WidgetBuilder","required":true,"desc":"A builder for the contents of the sheet."},{"name":"enableDrag","type":"bool","required":true,"desc":"If true, the bottom sheet can be dragged up and down and dismissed by swiping downwards."},{"name":"showDragHandle","type":"bool?","desc":"Specifies whether a drag handle is shown."},{"name":"dragHandleColor","type":"Color?","desc":"The bottom sheet drag handle's color."},{"name":"dragHandleSize","type":"Size?","desc":"Defaults to [BottomSheetThemeData.dragHandleSize]. If that is also null, defaults to Size(32, 4)."},{"name":"onDragStart","type":"BottomSheetDragStartHandler?","desc":"Called when the user begins dragging the bottom sheet vertically, if [enableDrag] is true."},{"name":"onDragEnd","type":"BottomSheetDragEndHandler?","desc":"Called when the user stops dragging the bottom sheet, if [enableDrag] is true."},{"name":"backgroundColor","type":"Color?","desc":"The bottom sheet's background color."},{"name":"shadowColor","type":"Color?","desc":"The color of the shadow below the sheet."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this material relative to its parent."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the bottom sheet."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"constraints","type":"BoxConstraints?","desc":"Defines minimum and maximum sizes for a [BottomSheet]."}],"id":142,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of BottomSheet","desc":["【builder】: Component constructor 【WidgetBuilder】","【backgroundColor】: Background color 【Color】","【elevation】: Shadow depth 【double】","【shape】: Shape 【ShapeBorder】","【onClosing】: Closing callback 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_zh-CN.json new file mode 100644 index 000000000..e99fe53a6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_zh-CN.json @@ -0,0 +1 @@ +{"name":"BottomSheet","path":"/src/material/bottom_sheet.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 底部表单。","fields":[{"name":"animationController","type":"AnimationController?","desc":"控制底部表单进入和退出动画的动画控制器。"},{"name":"onClosing","type":"VoidCallback","required":true,"desc":"底部表单开始关闭时调用。"},{"name":"builder","type":"WidgetBuilder","required":true,"desc":"表单内容的构建器。"},{"name":"enableDrag","type":"bool","required":true,"desc":"如果为 true,底部表单可以上下拖动并通过向下滑动来关闭。"},{"name":"showDragHandle","type":"bool?","desc":"指定是否显示拖动手柄。"},{"name":"dragHandleColor","type":"Color?","desc":"底部表单拖动手柄的颜色。"},{"name":"dragHandleSize","type":"Size?","desc":"默认为 [BottomSheetThemeData.dragHandleSize]。如果也为 null,则默认为 Size(32, 4)。"},{"name":"onDragStart","type":"BottomSheetDragStartHandler?","desc":"如果 [enableDrag] 为 true,当用户开始垂直拖动底部表单时调用。"},{"name":"onDragEnd","type":"BottomSheetDragEndHandler?","desc":"如果 [enableDrag] 为 true,当用户停止拖动底部表单时调用。"},{"name":"backgroundColor","type":"Color?","desc":"底部表单的背景颜色。"},{"name":"shadowColor","type":"Color?","desc":"表单下方阴影的颜色。"},{"name":"elevation","type":"double?","desc":"相对于其父级放置此材料的 z 坐标。"},{"name":"shape","type":"ShapeBorder?","desc":"底部表单的形状。"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"constraints","type":"BoxConstraints?","desc":"定义 [BottomSheet] 的最小和最大大小。"}],"id":142,"localName":"底部抽屉","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BottomSheet基本使用","desc":["【builder】 : 组件构造器 【WidgetBuilder】","【backgroundColor】 : 背景色 【Color】","【elevation】 : 影深 【double】","【shape】 : 形状 【ShapeBorder】","【onClosing】 : 关闭回调 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_en-US.json new file mode 100644 index 000000000..4d8cb28a3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_en-US.json @@ -0,0 +1 @@ +{"name":"BoxScrollView","path":"/src/widgets/scroll_view.dart","abstract":true,"parents":["ScrollView","StatelessWidget","Widget"],"desc":" A [ScrollView] that uses a single child layout model.","fields":[{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the children."}],"id":350,"lever":1,"family":0,"linkIds":[183,162,163],"nodes":[{"file":"node1_base.dart","name":"Introduction to BoxScrollView","desc":["【reverse】 : Whether to reverse 【bool】","【scrollDirection】 : Scroll direction 【Axis】","【cacheExtent】 : Cache length 【double】","【dragStartBehavior】 : Drag start behavior 【DragStartBehavior】","【clipBehavior】 : Clip behavior 【ClipBehavior】","【controller】 : Controller 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_zh-CN.json new file mode 100644 index 000000000..caea2438b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_zh-CN.json @@ -0,0 +1 @@ +{"name":"BoxScrollView","path":"/src/widgets/scroll_view.dart","abstract":true,"parents":["ScrollView","StatelessWidget","Widget"],"desc":"使用单子布局模型的 [ScrollView]。","fields":[{"name":"padding","type":"EdgeInsetsGeometry?","desc":"子项的插入空间量。"}],"id":350,"localName":"盒滑动视图","lever":1,"family":0,"linkIds":[183,162,163],"nodes":[{"file":"node1_base.dart","name":"BoxScrollView 介绍","desc":["【reverse】 : 是否反向 【bool】","【scrollDirection】 : 滑动方向 【Axis】","【cacheExtent】 : 缓存长 【double】","【dragStartBehavior】 : 拖动行为 【DragStartBehavior】","【clipBehavior】 : 裁剪行为 【ClipBehavior】","【controller】 : 控制器 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Builder/Builder_en-US.json b/modules/widget_system/widgets/doc/widgets/Builder/Builder_en-US.json new file mode 100644 index 000000000..b4417931b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Builder/Builder_en-US.json @@ -0,0 +1 @@ +{"name":"Builder","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":" A stateless utility widget whose [build] method uses its [builder] callback to create the widget's child.","fields":[{"name":"builder","type":"WidgetBuilder","required":true,"desc":"Called to obtain the child widget."}],"id":202,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Usage of Builder","desc":["【builder】: Component Constructor 【WidgetBuilder】","Using `XXX.of(context)` to obtain a state object of a certain class within the same class may result in a 'context lag' error, which can be resolved using Builder."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Builder/Builder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Builder/Builder_zh-CN.json new file mode 100644 index 000000000..2fe0ac7fa --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Builder/Builder_zh-CN.json @@ -0,0 +1 @@ +{"name":"Builder","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":"一个无状态实用小部件,其 [build] 方法使用其 [builder] 回调来创建小部件的子项。","fields":[{"name":"builder","type":"WidgetBuilder","required":true,"desc":"调用以获取子小部件。"}],"id":202,"localName":"构造器","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Builder的使用","desc":["【builder】 : 组件构造器 【WidgetBuilder】","同一个类中使用`XXX.of(context)`获取某类状态对象方法会存在`上下文滞后`的错误,使用Builder解决。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_en-US.json b/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_en-US.json new file mode 100644 index 000000000..496fd226e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_en-US.json @@ -0,0 +1 @@ +{"name":"ButtonBar","path":"/src/material/button_bar.dart","parents":["StatelessWidget","Widget"],"desc":" An end-aligned row of buttons, laying out into a column if there is not enough horizontal space.","fields":[{"name":"alignment","type":"MainAxisAlignment?","desc":"How the children should be placed along the horizontal axis."},{"name":"mainAxisSize","type":"MainAxisSize?","desc":"How much horizontal space is available. See [Row.mainAxisSize]."},{"name":"buttonTextTheme","type":"ButtonTextTheme?","desc":"Overrides the surrounding [ButtonBarThemeData.buttonTextTheme] to define a button's base colors, size, internal padding and shape."},{"name":"buttonMinWidth","type":"double?","desc":"Overrides the surrounding [ButtonThemeData.minWidth] to define a button's minimum width."},{"name":"buttonHeight","type":"double?","desc":"Overrides the surrounding [ButtonThemeData.height] to define a button's minimum height."},{"name":"buttonPadding","type":"EdgeInsetsGeometry?","desc":"Overrides the surrounding [ButtonThemeData.padding] to define the padding for a button's child (typically the button's label)."},{"name":"buttonAlignedDropdown","type":"bool?","desc":"Overrides the surrounding [ButtonThemeData.alignedDropdown] to define whether a [DropdownButton] menu's width will match the button's width."},{"name":"layoutBehavior","type":"ButtonBarLayoutBehavior?","desc":"Defines whether a [ButtonBar] should size itself with a minimum size constraint or with padding."},{"name":"overflowDirection","type":"VerticalDirection?","desc":"Defines the vertical direction of a [ButtonBar]'s children if it overflows."},{"name":"overflowButtonSpacing","type":"double?","desc":"The spacing between buttons when the button bar overflows."},{"name":"children","type":"List","required":true,"desc":"The buttons to arrange horizontally."}],"id":29,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ButtonBar Alignment","desc":["【alignment】: Alignment 【MainAxisAlignment】","【children】: Child components 【List】"]},{"file":"node2_padding.dart","name":"ButtonBar Margin and Height","desc":["【buttonPadding】: Padding 【EdgeInsetsGeometry】","【buttonHeight】: Height 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_zh-CN.json new file mode 100644 index 000000000..fa67aef23 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"ButtonBar","path":"/src/material/button_bar.dart","parents":["StatelessWidget","Widget"],"desc":"末端对齐的按钮行,如果没有足够的水平空间则布局为列。","fields":[{"name":"alignment","type":"MainAxisAlignment?","desc":"子项应如何沿水平轴放置。"},{"name":"mainAxisSize","type":"MainAxisSize?","desc":"有多少水平空间可用。参见 [Row.mainAxisSize]。"},{"name":"buttonTextTheme","type":"ButtonTextTheme?","desc":"覆盖周围的 [ButtonBarThemeData.buttonTextTheme] 以定义按钮的基本颜色、大小、内部内边距和形状。"},{"name":"buttonMinWidth","type":"double?","desc":"覆盖周围的 [ButtonThemeData.minWidth] 以定义按钮的最小宽度。"},{"name":"buttonHeight","type":"double?","desc":"覆盖周围的 [ButtonThemeData.height] 以定义按钮的最小高度。"},{"name":"buttonPadding","type":"EdgeInsetsGeometry?","desc":"覆盖周围的 [ButtonThemeData.padding] 以定义按钮子项(通常是按钮标签)的内边距。"},{"name":"buttonAlignedDropdown","type":"bool?","desc":"覆盖周围的 [ButtonThemeData.alignedDropdown] 以定义 [DropdownButton] 菜单的宽度是否与按钮宽度匹配。"},{"name":"layoutBehavior","type":"ButtonBarLayoutBehavior?","desc":"定义 [ButtonBar] 是否应使用最小大小约束或内边距来调整自身大小。"},{"name":"overflowDirection","type":"VerticalDirection?","desc":"定义 [ButtonBar] 子项溢出时的垂直方向。"},{"name":"overflowButtonSpacing","type":"double?","desc":"按钮栏溢出时按钮之间的间距。"},{"name":"children","type":"List","required":true,"desc":"要水平排列的按钮。"}],"id":29,"localName":"按钮栏","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ButtonBar对齐方式","desc":["【alignment】: 对齐方式 【MainAxisAlignment】","【children】: 子组件集 【List】"]},{"file":"node2_padding.dart","name":"ButtonBar边距和高","desc":["【buttonPadding】: 内边距 【EdgeInsetsGeometry】","【buttonHeight】: 高 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_en-US.json new file mode 100644 index 000000000..f253d6f3e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_en-US.json @@ -0,0 +1 @@ +{"name":"ButtonBarTheme","path":"/src/material/button_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a button bar theme to descendant [ButtonBar] widgets.","fields":[{"name":"data","type":"ButtonBarThemeData","required":true,"desc":"The properties used for all descendant [ButtonBar] widgets."}],"id":338,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ButtonBarTheme","desc":["You can specify the ButtonBarThemeData properties to set default styles for descendant ButtonBar components, such as alignment, style, margins, etc. You can also use ButtonBarTheme.of to get the theme properties of ButtonBar."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_zh-CN.json new file mode 100644 index 000000000..6a2d4d378 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"ButtonBarTheme","path":"/src/material/button_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将按钮栏主题应用于后代 [ButtonBar] 小部件。","fields":[{"name":"data","type":"ButtonBarThemeData","required":true,"desc":"用于所有后代 [ButtonBar] 小部件的属性。"}],"id":338,"localName":"按钮条主题","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ButtonBarTheme基本使用","desc":["可指定ButtonBarThemeData数据属性为【后代】的ButtonBar组件设置默认样式,如对齐方式、样式、边距等。也可以用ButtonBarTheme.of获取ButtonBar的主题属性。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_en-US.json b/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_en-US.json new file mode 100644 index 000000000..987eb205f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_en-US.json @@ -0,0 +1 @@ +{"name":"ButtonStyleButton","path":"/src/material/button_style_button.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" The base [StatefulWidget] class for buttons whose style is defined by a [ButtonStyle] object.","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"Called when the button is tapped or otherwise activated."},{"name":"onLongPress","type":"VoidCallback?","desc":"Called when the button is long-pressed."},{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the button response area."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"isSemanticButton","type":"bool?","desc":"Determine whether this subtree represents a button."},{"name":"iconAlignment","type":"IconAlignment?","desc":"{@macro flutter.material.ButtonStyleButton.iconAlignment}"},{"name":"tooltip","type":"String?","desc":"Text that describes the action that will occur when the button is pressed or hovered over."},{"name":"child","type":"Widget?","desc":"Typically the button's label."}],"id":372,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_zh-CN.json new file mode 100644 index 000000000..45b9f114f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_zh-CN.json @@ -0,0 +1,84 @@ +{ + "name": "ButtonStyleButton", + "path": "/src/material/button_style_button.dart", + "abstract": true, + "parents": [ + "StatefulWidget", + "Widget" + ], + "desc": "样式由 [ButtonStyle] 对象定义的按钮的基础 [StatefulWidget] 类。", + "fields": [ + { + "name": "onPressed", + "type": "VoidCallback?", + "desc": "点击或以其他方式激活按钮时调用。" + }, + { + "name": "onLongPress", + "type": "VoidCallback?", + "desc": "长按按钮时调用。" + }, + { + "name": "onHover", + "type": "ValueChanged?", + "desc": "指针进入或退出按钮响应区域时调用。" + }, + { + "name": "onFocusChange", + "type": "ValueChanged?", + "desc": "焦点改变时调用的处理程序。" + }, + { + "name": "style", + "type": "ButtonStyle?", + "desc": "自定义此按钮的外观。" + }, + { + "name": "clipBehavior", + "type": "Clip?", + "desc": "{@macro flutter.material.Material.clipBehavior}" + }, + { + "name": "focusNode", + "type": "FocusNode?", + "desc": "{@macro flutter.widgets.Focus.focusNode}" + }, + { + "name": "autofocus", + "type": "bool", + "required": true, + "desc": "{@macro flutter.widgets.Focus.autofocus}" + }, + { + "name": "statesController", + "type": "MaterialStatesController?", + "desc": "{@macro flutter.material.inkwell.statesController}" + }, + { + "name": "isSemanticButton", + "type": "bool?", + "desc": "确定此子树是否表示按钮。" + }, + { + "name": "iconAlignment", + "type": "IconAlignment?", + "desc": "{@macro flutter.material.ButtonStyleButton.iconAlignment}" + }, + { + "name": "tooltip", + "type": "String?", + "desc": "描述按下或悬停按钮时将发生的操作的文本。" + }, + { + "name": "child", + "type": "Widget?", + "desc": "通常是按钮的标签。" + } + ], + "id": 372, + "localName": "ButtonStyleButton", + "lever": 3, + "family": 3, + "linkIds": [], + "nodes": [] +} diff --git a/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_en-US.json new file mode 100644 index 000000000..4cd3d9a45 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_en-US.json @@ -0,0 +1 @@ +{"name":"ButtonTheme","path":"/src/material/button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Used with [ButtonThemeData] to configure the color and geometry of buttons.","fields":[{"name":"data","type":"ButtonThemeData","required":true,"desc":"Specifies the color and geometry of buttons."}],"id":326,"lever":3,"family":5,"linkIds":[23,25,26,27],"nodes":[{"file":"node1_base.dart","name":"ButtonTheme Usage","desc":["The property parameters are the same as MaterialButton. You can obtain button theme data through ButtonTheme.of, \"","and also set default styles for button components that are descendants of ButtonTheme, including color, shape, size, etc."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_zh-CN.json new file mode 100644 index 000000000..9fad72e75 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"ButtonTheme","path":"/src/material/button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"与 [ButtonThemeData] 一起使用来配置按钮的颜色和几何形状。","fields":[{"name":"data","type":"ButtonThemeData","required":true,"desc":"指定按钮的颜色和几何形状。"}],"id":326,"localName":"按钮样式","lever":3,"family":5,"linkIds":[23,25,26,27],"nodes":[{"file":"node1_base.dart","name":"ButtonTheme使用","desc":["属性参数同MaterialButton,可以通过ButtonTheme.of获取按钮主题数据,\"","也可以为ButtonTheme【后代】的按钮组件设置默认样式,包括颜色、形状、尺寸等。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_en-US.json b/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_en-US.json new file mode 100644 index 000000000..e35e281bb --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_en-US.json @@ -0,0 +1 @@ +{"name":"CalendarDatePicker","path":"/src/material/calendar_date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" Displays a grid of days for a given month and allows the user to select a date.","fields":[{"name":"initialDate","type":"DateTime?","desc":"The initially selected [DateTime] that the picker should display."},{"name":"firstDate","type":"DateTime","required":true,"desc":"The earliest allowable [DateTime] that the user can select."},{"name":"lastDate","type":"DateTime","required":true,"desc":"The latest allowable [DateTime] that the user can select."},{"name":"currentDate","type":"DateTime","required":true,"desc":"The [DateTime] representing today. It will be highlighted in the day grid."},{"name":"onDateChanged","type":"ValueChanged","required":true,"desc":"Called when the user selects a date in the picker."},{"name":"onDisplayedMonthChanged","type":"ValueChanged?","desc":"Called when the user navigates to a new month/year in the picker."},{"name":"initialCalendarMode","type":"DatePickerMode","required":true,"desc":"The initial display of the calendar picker."},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"Function to provide full control over which dates in the calendar can be selected."},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":373,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_zh-CN.json new file mode 100644 index 000000000..5e6f9c116 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_zh-CN.json @@ -0,0 +1 @@ +{"name":"CalendarDatePicker","path":"/src/material/calendar_date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"显示给定月份的日期网格并允许用户选择日期。","fields":[{"name":"initialDate","type":"DateTime?","desc":"选择器应显示的初始选中 [DateTime]。"},{"name":"firstDate","type":"DateTime","required":true,"desc":"用户可以选择的最早允许的 [DateTime]。"},{"name":"lastDate","type":"DateTime","required":true,"desc":"用户可以选择的最晚允许的 [DateTime]。"},{"name":"currentDate","type":"DateTime","required":true,"desc":"表示今天的 [DateTime]。它将在日期网格中突出显示。"},{"name":"onDateChanged","type":"ValueChanged","required":true,"desc":"用户在选择器中选择日期时调用。"},{"name":"onDisplayedMonthChanged","type":"ValueChanged?","desc":"用户在选择器中导航到新月份/年份时调用。"},{"name":"initialCalendarMode","type":"DatePickerMode","required":true,"desc":"日历选择器的初始显示。"},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"提供对日历中哪些日期可以选择的完全控制的函数。"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":373,"localName":"CalendarDatePicker","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_en-US.json b/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_en-US.json new file mode 100644 index 000000000..36fa96eaf --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_en-US.json @@ -0,0 +1 @@ +{"name":"CallbackShortcuts","path":"/src/widgets/shortcuts.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that binds key combinations to specific callbacks.","fields":[{"name":"bindings","type":"Map","required":true,"desc":"A map of key combinations to callbacks used to define the shortcut bindings."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":283,"lever":3,"family":2,"linkIds":[282,284],"nodes":[{"file":"node1.dart","name":"Shortcut Usage","desc":["After activating focus in the example, the Ctrl+↑ and Ctrl+↓ key combinations can increase or decrease the number","【enabled】: Whether it is available 【bool】","【onTapOutside】: Click outside listener 【TapRegionCallback?】","【onTapInside】: Click inside listener 【TapRegionCallback?】","【groupId】: Click area group identifier 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_zh-CN.json new file mode 100644 index 000000000..482f61efd --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_zh-CN.json @@ -0,0 +1 @@ +{"name":"CallbackShortcuts","path":"/src/widgets/shortcuts.dart","parents":["StatelessWidget","Widget"],"desc":"将键组合绑定到特定回调的小部件。","fields":[{"name":"bindings","type":"Map","required":true,"desc":"用于定义快捷键绑定的键组合到回调的映射。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":283,"localName":"快捷键回调","lever":3,"family":2,"linkIds":[282,284],"nodes":[{"file":"node1.dart","name":"快捷键使用","desc":["案例中激活焦点后,Ctrl+↑ 和 Ctrl+↓ 组合键可以增加或减少数字","【enabled】 : 是否可用 【bool】","【onTapOutside】 : 点击外界监听 【TapRegionCallback?】","【onTapInside】 : 点击内部监听 【TapRegionCallback?】","【groupId】 : 点击区域组标识 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Card/Card_en-US.json b/modules/widget_system/widgets/doc/widgets/Card/Card_en-US.json new file mode 100644 index 000000000..d84d294b0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Card/Card_en-US.json @@ -0,0 +1 @@ +{"name":"Card","path":"/src/material/card.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design card: a panel with slightly rounded corners and an elevation shadow.","fields":[{"name":"color","type":"Color?","desc":"The card's background color."},{"name":"shadowColor","type":"Color?","desc":"The color to paint the shadow below the card."},{"name":"surfaceTintColor","type":"Color?","desc":"The color used as an overlay on [color] to indicate elevation."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this card. This controls the size of the shadow below the card."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the card's [Material]."},{"name":"borderOnForeground","type":"bool","required":true,"desc":"Whether to paint the [shape] border in front of the [child]."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"The empty space that surrounds the card."},{"name":"semanticContainer","type":"bool","required":true,"desc":"Whether this widget represents a single semantic container, or if false a collection of individual semantic nodes."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":3,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Card can cardify a component","desc":["【elevation】: Shadow depth 【double】","【margin】: Margin 【double】","【color】: Color 【Color】","【child】: Child 【Widget】"]},{"file":"node2_shape.dart","name":"Can achieve clipping effect through the shape property","desc":["【shape】: Shape 【ShapeBorder】","【margin】: Margin 【double】","【color】: Color 【Color】","【child】: Child 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Card/Card_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Card/Card_zh-CN.json new file mode 100644 index 000000000..60c783690 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Card/Card_zh-CN.json @@ -0,0 +1 @@ +{"name":"Card","path":"/src/material/card.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 卡片:具有略微圆角和高度阴影的面板。","fields":[{"name":"color","type":"Color?","desc":"卡片的背景颜色。"},{"name":"shadowColor","type":"Color?","desc":"绘制卡片下方阴影的颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"用作 [color] 上的叠加层以指示高度的颜色。"},{"name":"elevation","type":"double?","desc":"放置此卡片的 z 坐标。这控制卡片下方阴影的大小。"},{"name":"shape","type":"ShapeBorder?","desc":"卡片 [Material] 的形状。"},{"name":"borderOnForeground","type":"bool","required":true,"desc":"是否在 [child] 前面绘制 [shape] 边框。"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕卡片的空白空间。"},{"name":"semanticContainer","type":"bool","required":true,"desc":"此小部件是否表示单个语义容器,或者如果为 false,则表示单个语义节点的集合。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":3,"localName":"卡片组件","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Card可以让一个组件卡片化","desc":["【elevation】 : 影深 【double】","【margin】: 外边距 【double】","【color】: 颜色 【Color】","【child】: 孩子 【Widget】"]},{"file":"node2_shape.dart","name":"可以通过shape属性实现裁切效果","desc":["【shape】 : 形状 【ShapeBorder】","【margin】: 外边距 【double】","【color】: 颜色 【Color】","【child】: 孩子 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_en-US.json new file mode 100644 index 000000000..7a0d539dc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_en-US.json @@ -0,0 +1 @@ +{"name":"CardTheme","path":"/src/material/card_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Defines default property values for descendant [Card] widgets.","fields":[],"id":374,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_zh-CN.json new file mode 100644 index 000000000..585066f81 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"CardTheme","path":"/src/material/card_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为后代 [Card] 小部件定义默认属性值。","fields":[],"id":374,"localName":"CardTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_en-US.json b/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_en-US.json new file mode 100644 index 000000000..f1177ac05 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_en-US.json @@ -0,0 +1 @@ +{"name":"CarouselView","path":"/src/material/carousel.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design carousel widget.","fields":[{"name":"padding","type":"EdgeInsets?","desc":"The amount of space to surround each carousel item with."},{"name":"backgroundColor","type":"Color?","desc":"The background color for each carousel item."},{"name":"elevation","type":"double?","desc":"The z-coordinate of each carousel item."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of each carousel item's [Material]."},{"name":"overlayColor","type":"WidgetStateProperty?","desc":"The highlight color to indicate the carousel items are in pressed, hovered or focused states."},{"name":"shrinkExtent","type":"double","required":true,"desc":"The minimum allowable extent (size) in the main axis for carousel items during scrolling transitions."},{"name":"itemSnapping","type":"bool","required":true,"desc":"Whether the carousel should keep scrolling to the next/previous items to maintain the original layout."},{"name":"controller","type":"CarouselController?","desc":"An object that can be used to control the position to which this scroll view is scrolled."},{"name":"scrollDirection","type":"Axis","required":true,"desc":"The [Axis] along which the scroll view's offset increases with each item."},{"name":"reverse","type":"bool","required":true,"desc":"Whether the carousel list scrolls in the reading direction."},{"name":"consumeMaxWeight","type":"bool","required":true,"desc":"Whether the collapsed items are allowed to expand to the max size."},{"name":"onTap","type":"ValueChanged?","desc":"Called when one of the [children] is tapped."},{"name":"enableSplash","type":"bool","required":true,"desc":"Determines whether an [InkWell] will cover each Carousel item."},{"name":"itemExtent","type":"double?","desc":"The extent the children are forced to have in the main axis."},{"name":"flexWeights","type":"List?","desc":"The weights that each visible child should occupy in the viewport."},{"name":"children","type":"List","required":true,"desc":"The child widgets for the carousel."}],"id":237,"lever":4,"family":1,"linkIds":[253,340,160],"nodes":[{"file":"node1_base.dart","name":"CarouselView Basic Usage","desc":["【itemExtent】 : Forced size in the main axis direction 【double】","【shrinkExtent】: Minimum size of the item in the main axis direction during scrolling 【double】","【scrollDirection】 : Scroll axis direction 【Axis?】","【children】: List of child components 【List】"]},{"file":"node2.dart","name":"CarouselView Style Configuration","desc":["【padding】 : Padding 【EdgeInsets? 】","【backgroundColor】 : Background color 【Color? 】","【elevation】 : Shadow depth 【double?】","【shape】 : Shape 【ShapeBorder?】","【controller】 : Controller 【CarouselController?】","【reverse】 : Whether to scroll in reverse 【bool】","【onTap】 : Click event 【ValueChanged? 】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_zh-CN.json new file mode 100644 index 000000000..ebcd75fde --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_zh-CN.json @@ -0,0 +1 @@ +{"name":"CarouselView","path":"/src/material/carousel.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 轮播小部件。","fields":[{"name":"padding","type":"EdgeInsets?","desc":"围绕每个轮播项的空间量。"},{"name":"backgroundColor","type":"Color?","desc":"每个轮播项的背景颜色。"},{"name":"elevation","type":"double?","desc":"每个轮播项的 z 坐标。"},{"name":"shape","type":"ShapeBorder?","desc":"每个轮播项 [Material] 的形状。"},{"name":"overlayColor","type":"WidgetStateProperty?","desc":"指示轮播项处于按下、悬停或聚焦状态的高亮颜色。"},{"name":"shrinkExtent","type":"double","required":true,"desc":"滚动过渡期间轮播项在主轴上的最小允许范围(大小)。"},{"name":"itemSnapping","type":"bool","required":true,"desc":"轮播是否应继续滚动到下一个/上一个项目以保持原始布局。"},{"name":"controller","type":"CarouselController?","desc":"可用于控制此滚动视图滚动到的位置的对象。"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"滚动视图的偏移量随每个项目增加的 [Axis]。"},{"name":"reverse","type":"bool","required":true,"desc":"轮播列表是否按阅读方向滚动。"},{"name":"consumeMaxWeight","type":"bool","required":true,"desc":"是否允许折叠的项目扩展到最大大小。"},{"name":"onTap","type":"ValueChanged?","desc":"点击 [children] 中的一个时调用。"},{"name":"enableSplash","type":"bool","required":true,"desc":"确定 [InkWell] 是否会覆盖每个轮播项。"},{"name":"itemExtent","type":"double?","desc":"子项在主轴上被强制具有的范围。"},{"name":"flexWeights","type":"List?","desc":"每个可见子项应在视口中占据的权重。"},{"name":"children","type":"List","required":true,"desc":"轮播的子小部件。"}],"id":237,"localName":"轮播视图","lever":4,"family":1,"linkIds":[253,340,160],"nodes":[{"file":"node1_base.dart","name":"CarouselView 基础用法","desc":["【itemExtent】 : 主轴方向强制尺寸 【double】","【shrinkExtent】: 滑动中,主轴方向条目最小尺寸 【double】","【scrollDirection】 : 滑动轴向 【Axis?】","【children】: 子组件列表 【List】"]},{"file":"node2.dart","name":"CarouselView 样式配置","desc":["【padding】 : 内边距 【EdgeInsets? 】","【backgroundColor】 : 背景色 【Color? 】","【elevation】 : 阴影深 【double?】","【shape】 : 形状 【ShapeBorder?】","【controller】 : 控制器 【CarouselController?】","【reverse】 : 是否反向滑动 【bool】","【onTap】 : 点击事件 【ValueChanged? 】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Center/Center_en-US.json b/modules/widget_system/widgets/doc/widgets/Center/Center_en-US.json new file mode 100644 index 000000000..86b996e1b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Center/Center_en-US.json @@ -0,0 +1 @@ +{"name":"Center","path":"/src/widgets/basic.dart","parents":["Align","SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that centers its child within itself.","fields":[],"id":86,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Center","desc":["【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Center/Center_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Center/Center_zh-CN.json new file mode 100644 index 000000000..a1a5742e7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Center/Center_zh-CN.json @@ -0,0 +1 @@ +{"name":"Center","path":"/src/widgets/basic.dart","parents":["Align","SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项在自身内居中的小部件。","fields":[],"id":86,"localName":"居中组件","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Center基本使用","desc":["【child】 : 孩子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_en-US.json b/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_en-US.json new file mode 100644 index 000000000..d97289d82 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_en-US.json @@ -0,0 +1 @@ +{"name":"Checkbox","path":"/src/material/checkbox.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design checkbox.","fields":[{"name":"value","type":"bool?","desc":"Whether this checkbox is checked."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the value of the checkbox should change."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.checkbox.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"activeColor","type":"Color?","desc":"The color to use when this checkbox is checked."},{"name":"fillColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.checkbox.fillColor} The color that fills the checkbox, in all [WidgetState]s."},{"name":"checkColor","type":"Color?","desc":"{@template flutter.material.checkbox.checkColor} The color to use for the check icon when this checkbox is checked. {@endtemplate}"},{"name":"tristate","type":"bool","required":true,"desc":"If true the checkbox's [value] can be true, false, or null."},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.checkbox.materialTapTargetSize} Configures the minimum size of the tap target. {@endtemplate}"},{"name":"visualDensity","type":"VisualDensity?","desc":"{@template flutter.material.checkbox.visualDensity} Defines how compact the checkbox's layout will be. {@endtemplate}"},{"name":"focusColor","type":"Color?","desc":"The color for the checkbox's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"{@template flutter.material.checkbox.hoverColor} The color for the checkbox's [Material] when a pointer is hovering over it."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.checkbox.overlayColor} The color for the checkbox's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.checkbox.splashRadius} The splash radius of the circular [Material] ink response. {@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shape","type":"OutlinedBorder?","desc":"{@template flutter.material.checkbox.shape} The shape of the checkbox's [Material]. {@endtemplate}"},{"name":"side","type":"BorderSide?","desc":"{@template flutter.material.checkbox.side} The color and width of the checkbox's border."},{"name":"isError","type":"bool","required":true,"desc":"{@template flutter.material.checkbox.isError} True if this checkbox wants to show an error state."},{"name":"semanticLabel","type":"String?","desc":"{@template flutter.material.checkbox.semanticLabel} The semantic label for the checkbox that will be announced by screen readers."}],"id":39,"lever":4,"family":1,"linkIds":[326,17],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Checkbox","desc":["【value】 : Whether it is selected 【double】","【checkColor】: Color of ✔️ when selected 【Color】","【activeColor】: Color inside the box when selected 【Color】","【onChanged】: State change event 【Function(bool)】,"]},{"file":"node2_tristate.dart","name":"Tristate of Checkbox","desc":["【tristate】 : Whether it is tristate 【double】"," when onChanged,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_zh-CN.json new file mode 100644 index 000000000..b4b0ef171 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_zh-CN.json @@ -0,0 +1 @@ +{"name":"Checkbox","path":"/src/material/checkbox.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 复选框。","fields":[{"name":"value","type":"bool?","desc":"此复选框是否被选中。"},{"name":"onChanged","type":"ValueChanged?","desc":"复选框的值应该改变时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.checkbox.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"activeColor","type":"Color?","desc":"此复选框被选中时使用的颜色。"},{"name":"fillColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.checkbox.fillColor} 在所有 [WidgetState] 中填充复选框的颜色。"},{"name":"checkColor","type":"Color?","desc":"{@template flutter.material.checkbox.checkColor} 此复选框被选中时用于勾选图标的颜色。{@endtemplate}"},{"name":"tristate","type":"bool","required":true,"desc":"如果为 true,复选框的 [value] 可以是 true、false 或 null。"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.checkbox.materialTapTargetSize} 配置点击目标的最小大小。{@endtemplate}"},{"name":"visualDensity","type":"VisualDensity?","desc":"{@template flutter.material.checkbox.visualDensity} 定义复选框布局的紧凑程度。{@endtemplate}"},{"name":"focusColor","type":"Color?","desc":"复选框具有输入焦点时其 [Material] 的颜色。"},{"name":"hoverColor","type":"Color?","desc":"{@template flutter.material.checkbox.hoverColor} 指针悬停在复选框上时其 [Material] 的颜色。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.checkbox.overlayColor} 复选框 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.checkbox.splashRadius} 圆形 [Material] 墨水响应的飞溅半径。{@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shape","type":"OutlinedBorder?","desc":"{@template flutter.material.checkbox.shape} 复选框 [Material] 的形状。{@endtemplate}"},{"name":"side","type":"BorderSide?","desc":"{@template flutter.material.checkbox.side} 复选框边框的颜色和宽度。"},{"name":"isError","type":"bool","required":true,"desc":"{@template flutter.material.checkbox.isError} 如果此复选框想要显示错误状态,则为 true。"},{"name":"semanticLabel","type":"String?","desc":"{@template flutter.material.checkbox.semanticLabel} 屏幕阅读器将宣布的复选框语义标签。"}],"id":39,"localName":"复选框","lever":4,"family":1,"linkIds":[326,17],"nodes":[{"file":"node1_base.dart","name":"Checkbox基础用法","desc":["【value】 : 是否选中 【double】","【checkColor】: 选中时✔️gou颜色 【Color】","【activeColor】: 选中时框内颜色 【Color】","【onChanged】: 状态改变事件 【Function(bool)】,"]},{"file":"node2_tristate.dart","name":"Checkbox的三态","desc":["【tristate】 : 是否是三态 【double】"," onChanged时,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_en-US.json new file mode 100644 index 000000000..9fb6bf037 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_en-US.json @@ -0,0 +1 @@ +{"name":"CheckboxListTile","path":"/src/material/checkbox_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A [ListTile] with a [Checkbox]. In other words, a checkbox with a label.","fields":[{"name":"value","type":"bool?","desc":"Whether this checkbox is checked."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the value of the checkbox should change."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"activeColor","type":"Color?","desc":"The color to use when this checkbox is checked."},{"name":"fillColor","type":"MaterialStateProperty?","desc":"The color that fills the checkbox."},{"name":"checkColor","type":"Color?","desc":"The color to use for the check icon when this checkbox is checked."},{"name":"hoverColor","type":"Color?","desc":"{@macro flutter.material.checkbox.hoverColor}"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The color for the checkbox's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.checkbox.splashRadius}"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.checkbox.materialTapTargetSize}"},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the list tile's layout will be."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.ListTile.shape}"},{"name":"side","type":"BorderSide?","desc":"{@macro flutter.material.checkbox.side}"},{"name":"isError","type":"bool","required":true,"desc":"{@macro flutter.material.checkbox.isError}"},{"name":"tileColor","type":"Color?","desc":"{@macro flutter.material.ListTile.tileColor}"},{"name":"title","type":"Widget?","desc":"The primary content of the list tile."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"secondary","type":"Widget?","desc":"A widget to display on the opposite side of the tile from the checkbox."},{"name":"isThreeLine","type":"bool","required":true,"desc":"Whether this list tile is intended to display three lines of text."},{"name":"dense","type":"bool?","desc":"Whether this list tile is part of a vertically dense list."},{"name":"selected","type":"bool","required":true,"desc":"Whether to render icons and text in the [activeColor]."},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"Where to place the control relative to the text."},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"Defines insets surrounding the tile's contents."},{"name":"tristate","type":"bool","required":true,"desc":"If true the checkbox's [value] can be true, false, or null."},{"name":"checkboxShape","type":"OutlinedBorder?","desc":"{@macro flutter.material.checkbox.shape}"},{"name":"selectedTileColor","type":"Color?","desc":"If non-null, defines the background color when [CheckboxListTile.selected] is true."},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"enabled","type":"bool?","desc":"Whether the CheckboxListTile is interactive."},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"Whether to add button:true to the semantics if onTap is provided. This is a temporary flag to help changing the behavior of ListTile onTap semantics."},{"name":"checkboxScaleFactor","type":"double","required":true,"desc":"Controls the scaling factor applied to the [Checkbox] within the [CheckboxListTile]."},{"name":"checkboxSemanticLabel","type":"String?","desc":"{@macro flutter.material.checkbox.semanticLabel}"}],"id":17,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic representation of CheckBoxListTile","desc":["【secondary】: Left component 【Widget】","【checkColor】: ✔️ color 【Color】","【activeColor】: Frame color when selected 【Color】","【title】: Top middle component 【Widget】","【subtitle】: Bottom middle component 【Widget】","【onChanged】: Selection event 【Function(bool)】"]},{"file":"node2_select.dart","name":"Selection effect of CheckBoxListTile","desc":["【selected】: Whether selected 【bool】"]},{"file":"node3_dense.dart","name":"Dense property of CheckBoxListTile","desc":["【dense】: Whether dense 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_zh-CN.json new file mode 100644 index 000000000..7453ba0ef --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_zh-CN.json @@ -0,0 +1 @@ +{"name":"CheckboxListTile","path":"/src/material/checkbox_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":"带有 [Checkbox] 的 [ListTile]。换句话说,带有标签的复选框。","fields":[{"name":"value","type":"bool?","desc":"此复选框是否被选中。"},{"name":"onChanged","type":"ValueChanged?","desc":"复选框的值应该改变时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"activeColor","type":"Color?","desc":"此复选框被选中时使用的颜色。"},{"name":"fillColor","type":"MaterialStateProperty?","desc":"填充复选框的颜色。"},{"name":"checkColor","type":"Color?","desc":"此复选框被选中时用于勾选图标的颜色。"},{"name":"hoverColor","type":"Color?","desc":"{@macro flutter.material.checkbox.hoverColor}"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"复选框 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.checkbox.splashRadius}"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.checkbox.materialTapTargetSize}"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义列表项布局的紧凑程度。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.ListTile.shape}"},{"name":"side","type":"BorderSide?","desc":"{@macro flutter.material.checkbox.side}"},{"name":"isError","type":"bool","required":true,"desc":"{@macro flutter.material.checkbox.isError}"},{"name":"tileColor","type":"Color?","desc":"{@macro flutter.material.ListTile.tileColor}"},{"name":"title","type":"Widget?","desc":"列表项的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"secondary","type":"Widget?","desc":"显示在与复选框相对侧的小部件。"},{"name":"isThreeLine","type":"bool","required":true,"desc":"此列表项是否旨在显示三行文本。"},{"name":"dense","type":"bool?","desc":"此列表项是否为垂直密集列表的一部分。"},{"name":"selected","type":"bool","required":true,"desc":"是否以 [activeColor] 渲染图标和文本。"},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"控件相对于文本的放置位置。"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"定义围绕项目内容的插入。"},{"name":"tristate","type":"bool","required":true,"desc":"如果为 true,复选框的 [value] 可以是 true、false 或 null。"},{"name":"checkboxShape","type":"OutlinedBorder?","desc":"{@macro flutter.material.checkbox.shape}"},{"name":"selectedTileColor","type":"Color?","desc":"如果非空,定义 [CheckboxListTile.selected] 为 true 时的背景颜色。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"enabled","type":"bool?","desc":"CheckboxListTile 是否可交互。"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"如果提供了 onTap,是否向语义添加 button:true。这是一个临时标志,用于帮助更改 ListTile onTap 语义的行为。"},{"name":"checkboxScaleFactor","type":"double","required":true,"desc":"控制应用于 [CheckboxListTile] 内 [Checkbox] 的缩放因子。"},{"name":"checkboxSemanticLabel","type":"String?","desc":"{@macro flutter.material.checkbox.semanticLabel}"}],"id":17,"localName":"复选瓦片","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CheckBoxListTile的基本表现如下","desc":["【secondary】: 左侧组件 【Widget】","【checkColor】: ✔️颜色 【Color】","【activeColor】: 选中时外框颜色 【Color】","【title】: 中间上组件 【Widget】","【subtitle】: 中间下组件 【Widget】","【onChanged】: 选中事件 【Function(bool)】"]},{"file":"node2_select.dart","name":"CheckBoxListTile的选中效果","desc":["【selected】: 是否选中 【bool】"]},{"file":"node3_dense.dart","name":"CheckBoxListTile的密排属性","desc":["【dense】: 是否密排 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_en-US.json new file mode 100644 index 000000000..41f69d3c8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_en-US.json @@ -0,0 +1 @@ +{"name":"CheckboxMenuButton","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":" A menu item that combines a [Checkbox] widget with a [MenuItemButton].","fields":[{"name":"value","type":"bool?","desc":"Whether this checkbox is checked."},{"name":"tristate","type":"bool","required":true,"desc":"If true, then the checkbox's [value] can be true, false, or null."},{"name":"isError","type":"bool","required":true,"desc":"True if this checkbox wants to show an error state."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the value of the checkbox should change."},{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the button response area."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"The optional shortcut that selects this [MenuItemButton]."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"trailingIcon","type":"Widget?","desc":"An optional icon to display after the [child] label."},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@macro flutter.material.menu_anchor.closeOnActivate}"},{"name":"child","type":"Widget?","desc":"The widget displayed in the center of this button."}],"id":375,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_zh-CN.json new file mode 100644 index 000000000..6772d1683 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"CheckboxMenuButton","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":"将 [Checkbox] 小部件与 [MenuItemButton] 结合的菜单项。","fields":[{"name":"value","type":"bool?","desc":"此复选框是否被选中。"},{"name":"tristate","type":"bool","required":true,"desc":"如果为 true,则复选框的 [value] 可以是 true、false 或 null。"},{"name":"isError","type":"bool","required":true,"desc":"如果此复选框想要显示错误状态,则为 true。"},{"name":"onChanged","type":"ValueChanged?","desc":"复选框的值应该改变时调用。"},{"name":"onHover","type":"ValueChanged?","desc":"指针进入或退出按钮响应区域时调用。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点改变时调用的处理程序。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"选择此 [MenuItemButton] 的可选快捷键。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"trailingIcon","type":"Widget?","desc":"在 [child] 标签后显示的可选图标。"},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@macro flutter.material.menu_anchor.closeOnActivate}"},{"name":"child","type":"Widget?","desc":"显示在此按钮中心的小部件。"}],"id":375,"localName":"CheckboxMenuButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_en-US.json new file mode 100644 index 000000000..8bf70e0b6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_en-US.json @@ -0,0 +1 @@ +{"name":"CheckboxTheme","path":"/src/material/checkbox_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a checkbox theme to descendant [Checkbox] widgets.","fields":[{"name":"data","type":"CheckboxThemeData","required":true,"desc":"The properties used for all descendant [Checkbox] widgets."}],"id":376,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_zh-CN.json new file mode 100644 index 000000000..e34293583 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"CheckboxTheme","path":"/src/material/checkbox_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将复选框主题应用于后代 [Checkbox] 小部件。","fields":[{"name":"data","type":"CheckboxThemeData","required":true,"desc":"用于所有后代 [Checkbox] 小部件的属性。"}],"id":376,"localName":"CheckboxTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_en-US.json b/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_en-US.json new file mode 100644 index 000000000..f404abc36 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_en-US.json @@ -0,0 +1 @@ +{"name":"CheckedModeBanner","path":"/src/widgets/banner.dart","parents":["StatelessWidget","Widget"],"desc":" Displays a [Banner] saying \"DEBUG\" when running in debug mode. [MaterialApp] builds one of these by default.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget to show behind the banner."}],"id":215,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic usage of CheckedModeBanner","desc":["【child】 : Component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_zh-CN.json new file mode 100644 index 000000000..a6e229d36 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_zh-CN.json @@ -0,0 +1 @@ +{"name":"CheckedModeBanner","path":"/src/widgets/banner.dart","parents":["StatelessWidget","Widget"],"desc":"在调试模式下运行时显示写着\",DEBUG\"的 [Banner]。[MaterialApp] 默认构建其中一个。","fields":[{"name":"child","type":"Widget","required":true,"desc":"在横幅后面显示的小部件。"}],"id":215,"localName":"debug标签","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CheckedModeBanner基本使用","desc":["【child】 : 组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_en-US.json b/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_en-US.json new file mode 100644 index 000000000..08c1b95c5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_en-US.json @@ -0,0 +1 @@ +{"name":"CheckedPopupMenuItem","path":"/src/material/popup_menu.dart","parents":["PopupMenuItem","PopupMenuEntry","StatefulWidget","Widget"],"desc":" An item with a checkmark in a Material Design popup menu.","fields":[{"name":"checked","type":"bool","required":true,"desc":"Whether to display a checkmark next to the menu item."}],"id":377,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_zh-CN.json new file mode 100644 index 000000000..87c148b80 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_zh-CN.json @@ -0,0 +1 @@ +{"name":"CheckedPopupMenuItem","path":"/src/material/popup_menu.dart","parents":["PopupMenuItem","PopupMenuEntry","StatefulWidget","Widget"],"desc":"Material Design 弹出菜单中带有勾选标记的项目。","fields":[{"name":"checked","type":"bool","required":true,"desc":"是否在菜单项旁边显示勾选标记。"}],"id":377,"localName":"CheckedPopupMenuItem","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Chip/Chip_en-US.json b/modules/widget_system/widgets/doc/widgets/Chip/Chip_en-US.json new file mode 100644 index 000000000..f85482293 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Chip/Chip_en-US.json @@ -0,0 +1 @@ +{"name":"Chip","path":"/src/material/chip.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design chip.","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"WidgetStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":11,"lever":4,"family":0,"linkIds":[12,13,14,15,153],"nodes":[{"file":"node1_base.dart","name":"The normal appearance of Chip is as follows","desc":["【avatar】: Left component 【Widget】","【label】: Middle component 【Widget】","【padding】: Padding 【EdgeInsetsGeometry】","【labelPadding】: Label padding 【EdgeInsetsGeometry】"]},{"file":"node2_color.dart","name":"You can set colors and shadows","desc":["【backgroundColor】: Background color 【Color】","【shadowColor】: Shadow color 【Color】","【elevation】: Shadow depth 【double】"]},{"file":"node3_delete.dart","name":"You can set the right click button","desc":["【deleteIcon】: Right component (usually an Icon) 【Widget】","【deleteIconColor】: Right component color 【Color】","【onDeleted】: Right component click event 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Chip/Chip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Chip/Chip_zh-CN.json new file mode 100644 index 000000000..3a6f4dbb1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Chip/Chip_zh-CN.json @@ -0,0 +1 @@ +{"name":"Chip","path":"/src/material/chip.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 芯片。","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"WidgetStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":11,"localName":"小条组件","lever":4,"family":0,"linkIds":[12,13,14,15,153],"nodes":[{"file":"node1_base.dart","name":"Chip的普通表现如下","desc":["【avatar】: 左侧组件 【Widget】","【label】: 中间组件 【Widget】","【padding】 : 内边距 【EdgeInsetsGeometry】","【labelPadding】: label边距 【EdgeInsetsGeometry】"]},{"file":"node2_color.dart","name":"可以设置颜色和阴影","desc":["【backgroundColor】: 背景色 【Color】","【shadowColor】: 阴影色 【Color】","【elevation】: 影深 【double】"]},{"file":"node3_delete.dart","name":"可以设置右侧点击按钮","desc":["【deleteIcon】: 右侧组件(通常为Icon) 【Widget】","【deleteIconColor】: 右侧组件颜色 【Color】","【onDeleted】: 右侧组件点击事件 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_en-US.json new file mode 100644 index 000000000..3fb9a6702 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_en-US.json @@ -0,0 +1 @@ +{"name":"ChipTheme","path":"/src/material/chip_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a chip theme to descendant [RawChip]-based widgets, like [Chip], [InputChip], [ChoiceChip], [FilterChip], and [ActionChip].","fields":[{"name":"data","type":"ChipThemeData","required":true,"desc":"Specifies the color, shape, and text style values for descendant chip widgets."}],"id":328,"lever":3,"family":5,"linkIds":[11,153,12,13,14,15],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ChipTheme","desc":["You can specify the ChipThemeData properties to set default styles for Chip type components of descendants. The properties are similar to those of Chip, such as shadow, color, margin, shape, text style, etc. You can also use ChipTheme.of to get the theme data of Chip."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_zh-CN.json new file mode 100644 index 000000000..4511e6b3f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"ChipTheme","path":"/src/material/chip_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"将芯片主题应用于基于 [RawChip] 的后代小部件,如 [Chip]、[InputChip]、[ChoiceChip]、[FilterChip] 和 [ActionChip]。","fields":[{"name":"data","type":"ChipThemeData","required":true,"desc":"为后代芯片小部件指定颜色、形状和文本样式值。"}],"id":328,"localName":"小条样式","lever":3,"family":5,"linkIds":[11,153,12,13,14,15],"nodes":[{"file":"node1_base.dart","name":"ChipTheme基本使用","desc":["可指定ChipThemeData数据属性为【后代】的Chip类型组件设置默认样式,属性和Chip属性类似,如阴影、颜色、边距、形状、文字样式等。也可以用ChipTheme.of获取Chip的主题数据。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_en-US.json b/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_en-US.json new file mode 100644 index 000000000..72ca46a69 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_en-US.json @@ -0,0 +1 @@ +{"name":"ChoiceChip","path":"/src/material/choice_chip.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design choice chip.","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"onSelected","type":"ValueChanged?"},{"name":"pressElevation","type":"double?"},{"name":"selected","type":"bool","required":true},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":12,"lever":3,"family":0,"linkIds":[11,13,14,15,153],"nodes":[{"file":"node1_base.dart","name":"The normal performance of ChoiceChip is as follows","desc":["【selectedColor】: Color when selected 【Color】","【selectedShadowColor】: Shadow color when selected 【Color】","【onSelected】: Selection event 【Fuction(bool)】"," Other properties are the same as the Chip component, with no right component."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_zh-CN.json new file mode 100644 index 000000000..d36b0e591 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_zh-CN.json @@ -0,0 +1 @@ +{"name":"ChoiceChip","path":"/src/material/choice_chip.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 选择芯片。","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"onSelected","type":"ValueChanged?"},{"name":"pressElevation","type":"double?"},{"name":"selected","type":"bool","required":true},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":12,"localName":"选择小条","lever":3,"family":0,"linkIds":[11,13,14,15,153],"nodes":[{"file":"node1_base.dart","name":"ChoiceChip的普通表现如下","desc":["【selectedColor】: 选中时颜色 【Color】","【selectedShadowColor】: 选中时阴影颜色 【Color】","【onSelected】: 选中事件 【Fuction(bool)】"," 其他属性同Chip组件,无右侧组件。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_en-US.json b/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_en-US.json new file mode 100644 index 000000000..090b820c1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_en-US.json @@ -0,0 +1 @@ +{"name":"CircleAvatar","path":"/src/material/circle_avatar.dart","parents":["StatelessWidget","Widget"],"desc":" A circle that represents a user.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"backgroundColor","type":"Color?","desc":"The color with which to fill the circle. Changing the background color will cause the avatar to animate to the new color."},{"name":"foregroundColor","type":"Color?","desc":"The default text color for text in the circle."},{"name":"backgroundImage","type":"ImageProvider?","desc":"The background image of the circle. Changing the background image will cause the avatar to animate to the new image."},{"name":"foregroundImage","type":"ImageProvider?","desc":"The foreground image of the circle."},{"name":"onBackgroundImageError","type":"ImageErrorListener?","desc":"An optional error callback for errors emitted when loading [backgroundImage]."},{"name":"onForegroundImageError","type":"ImageErrorListener?","desc":"An optional error callback for errors emitted when loading [foregroundImage]."},{"name":"radius","type":"double?","desc":"The size of the avatar, expressed as the radius (half the diameter)."},{"name":"minRadius","type":"double?","desc":"The minimum size of the avatar, expressed as the radius (half the diameter)."},{"name":"maxRadius","type":"double?","desc":"The maximum size of the avatar, expressed as the radius (half the diameter)."}],"id":9,"lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CircleAvatar Performance","desc":["【radius】: radius 【double】","【backgroundImage】: image resource 【ImageProvider】","【foregroundColor】: foreground color 【Color】","【backgroundColor】: background color 【Color】","【minRadius】: minimum radius 【double】","【maxRadius】: maximum radius 【double】","【child】: child component 【Child】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_zh-CN.json new file mode 100644 index 000000000..6647d02ee --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_zh-CN.json @@ -0,0 +1 @@ +{"name":"CircleAvatar","path":"/src/material/circle_avatar.dart","parents":["StatelessWidget","Widget"],"desc":"代表用户的圆形。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"backgroundColor","type":"Color?","desc":"填充圆形的颜色。更改背景颜色将导致头像动画到新颜色。"},{"name":"foregroundColor","type":"Color?","desc":"圆形中文本的默认文本颜色。"},{"name":"backgroundImage","type":"ImageProvider?","desc":"圆形的背景图像。更改背景图像将导致头像动画到新图像。"},{"name":"foregroundImage","type":"ImageProvider?","desc":"圆形的前景图像。"},{"name":"onBackgroundImageError","type":"ImageErrorListener?","desc":"加载 [backgroundImage] 时发出错误的可选错误回调。"},{"name":"onForegroundImageError","type":"ImageErrorListener?","desc":"加载 [foregroundImage] 时发出错误的可选错误回调。"},{"name":"radius","type":"double?","desc":"头像的大小,表示为半径(直径的一半)。"},{"name":"minRadius","type":"double?","desc":"头像的最小大小,表示为半径(直径的一半)。"},{"name":"maxRadius","type":"double?","desc":"头像的最大大小,表示为半径(直径的一半)。"}],"id":9,"localName":"圆形组件","lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CircleAvatar的表现","desc":["【radius】 : 半径 【double】","【backgroundImage】 : 图片资源 【ImageProvider】","【foregroundColor】: 前景色 【Color】","【backgroundColor】: 背景色 【Color】","【minRadius】: 最小半径 【double】","【maxRadius】: 最大半径 【double】","【child】: 孩子组件 【Child】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_en-US.json new file mode 100644 index 000000000..99e06e875 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_en-US.json @@ -0,0 +1 @@ +{"name":"CircularProgressIndicator","path":"/src/material/progress_indicator.dart","parents":["ProgressIndicator","StatefulWidget","Widget"],"desc":" A Material Design circular progress indicator, which spins to indicate that the application is busy.","fields":[{"name":"strokeWidth","type":"double?","desc":"The width of the line used to draw the circle."},{"name":"strokeAlign","type":"double?","desc":"The relative position of the stroke on a [CircularProgressIndicator]."},{"name":"strokeCap","type":"StrokeCap?","desc":"The progress indicator's line ending."},{"name":"constraints","type":"BoxConstraints?","desc":"Defines minimum and maximum sizes for a [CircularProgressIndicator]."},{"name":"trackGap","type":"double?","desc":"The gap between the active indicator and the background track."},{"name":"year2023","type":"bool?","desc":"When true, the [CircularProgressIndicator] will use the 2023 Material Design 3 appearance."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The padding around the indicator track."}],"id":46,"lever":3,"family":1,"linkIds":[47,48],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CircularProgressIndicator","desc":["【value】 : Progress 【double】","【backgroundColor】 : Background Color 【Color】","【valueColor】 : Progress Color 【Animation】","【strokeWidth】 : Line Width 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_zh-CN.json new file mode 100644 index 000000000..bbce9db45 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_zh-CN.json @@ -0,0 +1,67 @@ +{ + "name": "CircularProgressIndicator", + "path": "/src/material/progress_indicator.dart", + "parents": [ + "ProgressIndicator", + "StatefulWidget", + "Widget" + ], + "desc": "Material Design 圆形进度指示器,旋转以指示应用程序正忙。", + "fields": [ + { + "name": "strokeWidth", + "type": "double?", + "desc": "用于绘制圆形的线条宽度。" + }, + { + "name": "strokeAlign", + "type": "double?", + "desc": "[CircularProgressIndicator] 上笔画的相对位置。" + }, + { + "name": "strokeCap", + "type": "StrokeCap?", + "desc": "进度指示器的线条结尾。" + }, + { + "name": "constraints", + "type": "BoxConstraints?", + "desc": "定义 [CircularProgressIndicator] 的最小和最大大小。" + }, + { + "name": "trackGap", + "type": "double?", + "desc": "活动指示器和背景轨道之间的间隙。" + }, + { + "name": "year2023", + "type": "bool?", + "desc": "当为 true 时,[CircularProgressIndicator] 将使用 2023 Material Design 3 外观。" + }, + { + "name": "padding", + "type": "EdgeInsetsGeometry?", + "desc": "指示器轨道周围的内边距。" + } + ], + "id": 46, + "localName": "圆形进度", + "lever": 3, + "family": 1, + "linkIds": [ + 47, + 48 + ], + "nodes": [ + { + "file": "node1_base.dart", + "name": "CircularProgressIndicator基本使用", + "desc": [ + "【value】 : 进度 【double】", + "【backgroundColor】 : 背景色 【Color】", + "【valueColor】 : 进度颜色 【Animation】", + "【strokeWidth】 : 线宽 【double】" + ] + } + ] +} diff --git a/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_en-US.json b/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_en-US.json new file mode 100644 index 000000000..f973f9e6a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_en-US.json @@ -0,0 +1 @@ +{"name":"ClipOval","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that clips its child using an oval.","fields":[{"name":"clipper","type":"CustomClipper?","desc":"If non-null, determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":66,"lever":3,"family":2,"linkIds":[67,68,69],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ClipOval","desc":["【child】: Child component 【Widget】","【clipBehavior】: Clipping behavior 【Clip】","【clipper】: Clipper 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_zh-CN.json new file mode 100644 index 000000000..27b811ee8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_zh-CN.json @@ -0,0 +1 @@ +{"name":"ClipOval","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用椭圆形裁剪其子项的小部件。","fields":[{"name":"clipper","type":"CustomClipper?","desc":"如果非空,确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":66,"localName":"椭圆裁剪","lever":3,"family":2,"linkIds":[67,68,69],"nodes":[{"file":"node1_base.dart","name":"ClipOval基本使用","desc":["【child】 : 子组件 【Widget】","【clipBehavior】 : 裁剪行为 【Clip】","【clipper】 : 裁剪器 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_en-US.json b/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_en-US.json new file mode 100644 index 000000000..d5f9f4ea0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_en-US.json @@ -0,0 +1 @@ +{"name":"ClipPath","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that clips its child using a path.","fields":[{"name":"clipper","type":"CustomClipper?","desc":"If non-null, determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":69,"lever":5,"family":2,"linkIds":[66,67,68],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ClipPath","desc":["【child】 : Child component 【Widget】","【clipBehavior】 : Clipping behavior 【Clip】","【clipper】 : Clipper 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_zh-CN.json new file mode 100644 index 000000000..514aa5359 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_zh-CN.json @@ -0,0 +1 @@ +{"name":"ClipPath","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用路径裁剪其子项的小部件。","fields":[{"name":"clipper","type":"CustomClipper?","desc":"如果非空,确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":69,"localName":"路径裁剪","lever":5,"family":2,"linkIds":[66,67,68],"nodes":[{"file":"node1_base.dart","name":"ClipPath基本使用","desc":["【child】 : 子组件 【Widget】","【clipBehavior】 : 裁剪行为 【Clip】","【clipper】 : 裁剪器 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_en-US.json b/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_en-US.json new file mode 100644 index 000000000..2a48f3d0e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_en-US.json @@ -0,0 +1 @@ +{"name":"ClipRRect","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that clips its child using a rounded rectangle.","fields":[{"name":"borderRadius","type":"BorderRadiusGeometry","required":true,"desc":"The border radius of the rounded corners."},{"name":"clipper","type":"CustomClipper?","desc":"If non-null, determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":68,"lever":3,"family":2,"linkIds":[66,67,69],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ClipRRect","desc":["【child】: Child component 【Widget】","【borderRadius】: Border radius 【BorderRadius】","【clipBehavior】: Clipping behavior 【Clip】","【clipper】: Clipper 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_zh-CN.json new file mode 100644 index 000000000..586234f5f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_zh-CN.json @@ -0,0 +1 @@ +{"name":"ClipRRect","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用圆角矩形裁剪其子项的小部件。","fields":[{"name":"borderRadius","type":"BorderRadiusGeometry","required":true,"desc":"圆角的边框半径。"},{"name":"clipper","type":"CustomClipper?","desc":"如果非空,确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":68,"localName":"圆角矩形裁剪","lever":3,"family":2,"linkIds":[66,67,69],"nodes":[{"file":"node1_base.dart","name":"ClipRRect基本使用","desc":["【child】 : 子组件 【Widget】","【borderRadius】 : 边线半径 【BorderRadius】","【clipBehavior】 : 裁剪行为 【Clip】","【clipper】 : 裁剪器 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_en-US.json b/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_en-US.json new file mode 100644 index 000000000..f4656838d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_en-US.json @@ -0,0 +1 @@ +{"name":"ClipRSuperellipse","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that clips its child using a rounded superellipse.","fields":[{"name":"borderRadius","type":"BorderRadiusGeometry","required":true,"desc":"The border radius of the rounded corners."},{"name":"clipper","type":"CustomClipper?","desc":"If non-null, determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":378,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_zh-CN.json new file mode 100644 index 000000000..716e2a55d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_zh-CN.json @@ -0,0 +1 @@ +{"name":"ClipRSuperellipse","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用圆角超椭圆裁剪其子项的小部件。","fields":[{"name":"borderRadius","type":"BorderRadiusGeometry","required":true,"desc":"圆角的边框半径。"},{"name":"clipper","type":"CustomClipper?","desc":"如果非空,确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":378,"localName":"ClipRSuperellipse","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_en-US.json b/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_en-US.json new file mode 100644 index 000000000..5b75661cc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_en-US.json @@ -0,0 +1 @@ +{"name":"ClipRect","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that clips its child using a rectangle.","fields":[{"name":"clipper","type":"CustomClipper?","desc":"If non-null, determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":67,"lever":3,"family":2,"linkIds":[66,68,69],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ClipRect","desc":["【child】: Child component 【Widget】","【clipBehavior】: Clipping behavior 【Clip】","【clipper】: Clipper 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_zh-CN.json new file mode 100644 index 000000000..4caea1381 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_zh-CN.json @@ -0,0 +1 @@ +{"name":"ClipRect","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用矩形裁剪其子项的小部件。","fields":[{"name":"clipper","type":"CustomClipper?","desc":"如果非空,确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":67,"localName":"矩形裁剪","lever":3,"family":2,"linkIds":[66,68,69],"nodes":[{"file":"node1_base.dart","name":"ClipRect基本使用","desc":["【child】 : 子组件 【Widget】","【clipBehavior】 : 裁剪行为 【Clip】","【clipper】 : 裁剪器 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_en-US.json new file mode 100644 index 000000000..98828d271 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_en-US.json @@ -0,0 +1 @@ +{"name":"CloseButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":" A Material Design close icon button.","fields":[],"id":32,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CloseButton Click Event","desc":["【onPressed】: Click event 【VoidCallback?】","【style】: Button style 【ButtonStyle?】","【color】: Color 【Color】","When onPressed is null, clicking will exit the current interface."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_zh-CN.json new file mode 100644 index 000000000..8bc73cbf7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"CloseButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":"Material Design 关闭图标按钮。","fields":[],"id":32,"localName":"关闭按钮","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CloseButton点击事件","desc":["【onPressed】 : 点击事件 【VoidCallback?】","【style】: 按钮样式 【ButtonStyle?】","【color】: 颜色 【Color】","onPressed 为空时,点击时会退出当前界面。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_en-US.json new file mode 100644 index 000000000..a2b31f44f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_en-US.json @@ -0,0 +1 @@ +{"name":"CloseButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":" A \"close\" icon that's appropriate for the current [TargetPlatform].","fields":[],"id":274,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CloseButtonIcon Effect","desc":["The _ActionIcon component adapts the close button icon for different platforms based on the ActionIconTheme."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_zh-CN.json new file mode 100644 index 000000000..316ed41c3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_zh-CN.json @@ -0,0 +1 @@ +{"name":"CloseButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":"适合当前 [TargetPlatform] 的\"关闭\"图标。","fields":[],"id":274,"localName":"关闭按钮图标","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CloseButtonIcon 效果","desc":["通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的关闭按钮图标。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_en-US.json b/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_en-US.json new file mode 100644 index 000000000..06bf6aed8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_en-US.json @@ -0,0 +1 @@ +{"name":"ColorFiltered","path":"/src/widgets/color_filter.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Applies a [ColorFilter] to its child.","fields":[{"name":"colorFilter","type":"ColorFilter","required":true,"desc":"The color filter to apply to the child of this widget."}],"id":88,"lever":5,"family":2,"linkIds":[277,38],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ColorFiltered","desc":["【child】: Child component 【Widget】","【colorFilter】: Color filter 【ColorFilter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_zh-CN.json new file mode 100644 index 000000000..89ae48d50 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_zh-CN.json @@ -0,0 +1 @@ +{"name":"ColorFiltered","path":"/src/widgets/color_filter.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将 [ColorFilter] 应用于其子项。","fields":[{"name":"colorFilter","type":"ColorFilter","required":true,"desc":"应用于此小部件子项的颜色滤镜。"}],"id":88,"localName":"滤色器","lever":5,"family":2,"linkIds":[277,38],"nodes":[{"file":"node1_base.dart","name":"ColorFiltered基本使用","desc":["【child】 : 孩子组件 【Widget】","【colorFilter】 : 滤色器 【ColorFilter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_en-US.json b/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_en-US.json new file mode 100644 index 000000000..e3d8be703 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_en-US.json @@ -0,0 +1 @@ +{"name":"ColoredBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that paints its area with a specified [Color] and then draws its child on top of that color.","fields":[{"name":"color","type":"Color","required":true,"desc":"The color to paint the background area with."}],"id":267,"lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ColoredBox","desc":["【color】: Component 【Color】","【child】: Component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_zh-CN.json new file mode 100644 index 000000000..b3ea48884 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_zh-CN.json @@ -0,0 +1 @@ +{"name":"ColoredBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"用指定的 [Color] 绘制其区域,然后在该颜色之上绘制其子项的小部件。","fields":[{"name":"color","type":"Color","required":true,"desc":"用于绘制背景区域的颜色。"}],"id":267,"localName":"颜色盒","lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ColoredBox基本使用","desc":["【color】 : 组件 【Color】","【child】 : 组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Column/Column_en-US.json b/modules/widget_system/widgets/doc/widgets/Column/Column_en-US.json new file mode 100644 index 000000000..d8d11c4b2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Column/Column_en-US.json @@ -0,0 +1 @@ +{"name":"Column","path":"/src/widgets/basic.dart","parents":["Flex","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that displays its children in a vertical array.","fields":[],"id":96,"lever":4,"family":3,"linkIds":[94,95],"nodes":[{"file":"node_01.dart","name":"Basic Usage of Column","desc":["【children】: Component list 【List】","【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】","【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】","【textBaseline】: Text baseline 【TextBaseline】","【verticalDirection】: Vertical direction 【VerticalDirection】","【mainAxisSize】: Main axis size 【MainAxisSize】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Column/Column_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Column/Column_zh-CN.json new file mode 100644 index 000000000..973fb6e9d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Column/Column_zh-CN.json @@ -0,0 +1 @@ +{"name":"Column","path":"/src/widgets/basic.dart","parents":["Flex","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"以垂直数组显示其子项的小部件。","fields":[],"id":96,"localName":"列布局","lever":4,"family":3,"linkIds":[94,95],"nodes":[{"file":"node_01.dart","name":"Column基本使用","desc":["【children】 : 组件列表 【List】","【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】","【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】","【textBaseline】 : 文字基线 【TextBaseline】","【verticalDirection】 : 竖直方向 【VerticalDirection】","【mainAxisSize】 : 主轴尺寸 【MainAxisSize】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_en-US.json b/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_en-US.json new file mode 100644 index 000000000..40ca4adaa --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_en-US.json @@ -0,0 +1 @@ +{"name":"CompositedTransformFollower","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that follows a [CompositedTransformTarget].","fields":[{"name":"link","type":"LayerLink","required":true,"desc":"The link object that connects this [CompositedTransformFollower] with a [CompositedTransformTarget]."},{"name":"showWhenUnlinked","type":"bool","required":true,"desc":"Whether to show the widget's contents when there is no corresponding [CompositedTransformTarget] with the same [link]."},{"name":"targetAnchor","type":"Alignment","required":true,"desc":"The anchor point on the linked [CompositedTransformTarget] that [followerAnchor] will line up with."},{"name":"followerAnchor","type":"Alignment","required":true,"desc":"The anchor point on this widget that will line up with [targetAnchor] on the linked [CompositedTransformTarget]."},{"name":"offset","type":"Offset","required":true,"desc":"The additional offset to apply to the [targetAnchor] of the linked [CompositedTransformTarget] to obtain this widget's [followerAnchor] position."}],"id":265,"lever":3,"family":2,"linkIds":[266,182],"nodes":[{"file":"node1_base.dart","name":"Usage of CompositedTransformFollower","desc":["【child】 : Child widget 【Widget】","【link】 : Link 【LayerLink】","【offset】 : Offset 【Offset】","【targetAnchor】 : Target anchor 【Alignment】","【followerAnchor】 : Follower anchor 【Alignment】","【showWhenUnlinked】 : Whether to show when unlinked 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_zh-CN.json new file mode 100644 index 000000000..8a95ea6f9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_zh-CN.json @@ -0,0 +1 @@ +{"name":"CompositedTransformFollower","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"跟随 [CompositedTransformTarget] 的小部件。","fields":[{"name":"link","type":"LayerLink","required":true,"desc":"连接此 [CompositedTransformFollower] 与 [CompositedTransformTarget] 的链接对象。"},{"name":"showWhenUnlinked","type":"bool","required":true,"desc":"当没有具有相同 [link] 的对应 [CompositedTransformTarget] 时,是否显示小部件的内容。"},{"name":"targetAnchor","type":"Alignment","required":true,"desc":"链接的 [CompositedTransformTarget] 上的锚点,[followerAnchor] 将与之对齐。"},{"name":"followerAnchor","type":"Alignment","required":true,"desc":"此小部件上的锚点,将与链接的 [CompositedTransformTarget] 上的 [targetAnchor] 对齐。"},{"name":"offset","type":"Offset","required":true,"desc":"应用于链接的 [CompositedTransformTarget] 的 [targetAnchor] 以获得此小部件的 [followerAnchor] 位置的附加偏移量。"}],"id":265,"localName":"合成变换跟随者","lever":3,"family":2,"linkIds":[266,182],"nodes":[{"file":"node1_base.dart","name":"CompositedTransformFollower 使用","desc":["【child】 : 子组件 【Widget】","【link】 : 链接 【LayerLink】","【offset】 : 偏移 【Offset】","【targetAnchor】 : 目标锚点 【Alignment】","【followerAnchor】 : 伴随者锚点 【Alignment】","【showWhenUnlinked】 : 为链接是否显示 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_en-US.json b/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_en-US.json new file mode 100644 index 000000000..77fc0322c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_en-US.json @@ -0,0 +1 @@ +{"name":"CompositedTransformTarget","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that can be targeted by a [CompositedTransformFollower].","fields":[{"name":"link","type":"LayerLink","required":true,"desc":"The link object that connects this [CompositedTransformTarget] with one or more [CompositedTransformFollower]s."}],"id":266,"lever":3,"family":2,"linkIds":[265,182],"nodes":[{"file":"node1_base.dart","name":"CompositedTransformTarget Usage","desc":["【child】 : Child component 【Widget】","【link】 : Link 【LayerLink】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_zh-CN.json new file mode 100644 index 000000000..ab744dc85 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_zh-CN.json @@ -0,0 +1 @@ +{"name":"CompositedTransformTarget","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"可以被 [CompositedTransformFollower] 定位的小部件。","fields":[{"name":"link","type":"LayerLink","required":true,"desc":"连接此 [CompositedTransformTarget] 与一个或多个 [CompositedTransformFollower] 的链接对象。"}],"id":266,"localName":"合成变换目标","lever":3,"family":2,"linkIds":[265,182],"nodes":[{"file":"node1_base.dart","name":"CompositedTransformTarget 使用","desc":["【child】 : 子组件 【Widget】","【link】 : 链接 【LayerLink】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_en-US.json new file mode 100644 index 000000000..3e05daa94 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_en-US.json @@ -0,0 +1 @@ +{"name":"ConstrainedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that imposes additional constraints on its child.","fields":[{"name":"constraints","type":"BoxConstraints","required":true,"desc":"The additional constraints to impose on the child."}],"id":80,"lever":3,"family":2,"linkIds":[1,79,81],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of BoxConstraints","desc":["【child】 : Child component 【Widget】","【minWidth】 : Minimum width 【double】","【minHeight】 : Minimum height 【double】","【maxHeight】 : Maximum height 【double】","【maxWidth】 : Maximum width 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_zh-CN.json new file mode 100644 index 000000000..9f2c91e02 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_zh-CN.json @@ -0,0 +1 @@ +{"name":"ConstrainedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对其子项施加额外约束的小部件。","fields":[{"name":"constraints","type":"BoxConstraints","required":true,"desc":"对子项施加的额外约束。"}],"id":80,"localName":"约束盒","lever":3,"family":2,"linkIds":[1,79,81],"nodes":[{"file":"node1_base.dart","name":"BoxConstraints基本使用","desc":["【child】 : 孩子组件 【Widget】","【minWidth】 : 最小宽 【double】","【minHeight】 : 最小高 【double】","【maxHeight】 : 最大高 【double】","【maxWidth】 : 最大宽 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_en-US.json new file mode 100644 index 000000000..cdf6c01a2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_en-US.json @@ -0,0 +1 @@ +{"name":"ConstrainedLayoutBuilder","path":"/src/widgets/layout_builder.dart","abstract":true,"parents":["AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":" A specialized [AbstractLayoutBuilder] whose widget subtree depends on the incoming [ConstraintType] that will be imposed on the widget.","fields":[{"name":"builder","type":"Widget Function(BuildContext context, ConstraintType constraints)","required":true}],"id":379,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_zh-CN.json new file mode 100644 index 000000000..2028a9081 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_zh-CN.json @@ -0,0 +1 @@ +{"name":"ConstrainedLayoutBuilder","path":"/src/widgets/layout_builder.dart","abstract":true,"parents":["AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":"专门的 [AbstractLayoutBuilder],其小部件子树依赖于将施加在小部件上的传入 [ConstraintType]。","fields":[{"name":"builder","type":"Widget Function(BuildContext context, ConstraintType constraints)","required":true}],"id":379,"localName":"ConstrainedLayoutBuilder","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_en-US.json b/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_en-US.json new file mode 100644 index 000000000..0c75a93b9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_en-US.json @@ -0,0 +1 @@ +{"name":"ConstraintsTransformBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A container widget that applies an arbitrary transform to its constraints, and sizes its child using the resulting [BoxConstraints], optionally clipping, or treating the overflow as an error.","fields":[{"name":"textDirection","type":"TextDirection?","desc":"The text direction to use when interpreting the [alignment] if it is an [AlignmentDirectional]."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"The alignment to use when laying out the child, if it has a different size than this widget."},{"name":"constraintsTransform","type":"BoxConstraintsTransform","required":true,"desc":"{@template flutter.widgets.constraintsTransform} The function used to transform the incoming [BoxConstraints], to size [child]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":380,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_zh-CN.json new file mode 100644 index 000000000..22992d565 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_zh-CN.json @@ -0,0 +1 @@ +{"name":"ConstraintsTransformBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对其约束应用任意变换的容器小部件,使用生成的 [BoxConstraints] 调整其子项大小,可选择裁剪或将溢出视为错误。","fields":[{"name":"textDirection","type":"TextDirection?","desc":"如果 [alignment] 是 [AlignmentDirectional],则在解释 [alignment] 时使用的文本方向。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如果子项的大小与此小部件不同,则在布局子项时使用的对齐方式。"},{"name":"constraintsTransform","type":"BoxConstraintsTransform","required":true,"desc":"{@template flutter.widgets.constraintsTransform} 用于变换传入 [BoxConstraints] 以调整 [child] 大小的函数。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":380,"localName":"ConstraintsTransformBox","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Container/Container_en-US.json b/modules/widget_system/widgets/doc/widgets/Container/Container_en-US.json new file mode 100644 index 000000000..983f6ce80 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Container/Container_en-US.json @@ -0,0 +1 @@ +{"name":"Container","path":"/src/widgets/container.dart","parents":["StatelessWidget","Widget"],"desc":" A convenience widget that combines common painting, positioning, and sizing widgets.","fields":[{"name":"child","type":"Widget?","desc":"The [child] contained by the container."},{"name":"alignment","type":"AlignmentGeometry?","desc":"Align the [child] within the container."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Empty space to inscribe inside the [decoration]. The [child], if any, is placed inside this padding."},{"name":"color","type":"Color?","desc":"The color to paint behind the [child]."},{"name":"decoration","type":"Decoration?","desc":"The decoration to paint behind the [child]."},{"name":"foregroundDecoration","type":"Decoration?","desc":"The decoration to paint in front of the [child]."},{"name":"constraints","type":"BoxConstraints?","desc":"Additional constraints to apply to the child."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"Empty space to surround the [decoration] and [child]."},{"name":"transform","type":"Matrix4?","desc":"The transformation matrix to apply before painting the container."},{"name":"transformAlignment","type":"AlignmentGeometry?","desc":"The alignment of the origin, relative to the size of the container, if [transform] is specified."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"The clip behavior when [Container.decoration] is not null."}],"id":1,"lever":5,"family":0,"linkIds":[74,85,80,78,70,123],"nodes":[{"file":"node1_base.dart","name":"Can be used to display an area with specified width and height","desc":["【width】 : width 【int】","【height】: height 【int】","【color】: color 【Color】"]},{"file":"node2_child.dart","name":"Can place a child component within the area","desc":["【padding】 : padding 【EdgeInsetsGeometry】","【margin】: margin 【EdgeInsetsGeometry】","【child】: child component 【Widget】"]},{"file":"node3_alignment.dart","name":"Can align and position the child component","desc":["【alignment】 : alignment 【AlignmentGeometry】"]},{"file":"node4_decoration.dart","name":"Can decorate the child component","desc":["【decoration】 : decoration 【Decoration】","Can decorate: borders, rounded corners, colors, gradients, shadows, images, etc."]},{"file":"node5_transform.dart","name":"Container also has transformation capabilities","desc":["【transform】 : transformation matrix 【Matrix4】","Matrix transformation based on Matrix4, see linear algebra for details"]},{"file":"node6_constraints.dart","name":"Constraints of the Container","desc":["【constraints】 : constraints 【BoxConstraints】","Will constrain the size of the area, it will not be smaller than the specified minimum width and height, nor larger than the specified maximum width and height."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Container/Container_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Container/Container_zh-CN.json new file mode 100644 index 000000000..e3bcb66ae --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Container/Container_zh-CN.json @@ -0,0 +1 @@ +{"name":"Container","path":"/src/widgets/container.dart","parents":["StatelessWidget","Widget"],"desc":"结合常见绘制、定位和大小调整小部件的便利小部件。","fields":[{"name":"child","type":"Widget?","desc":"容器包含的 [child]。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"在容器内对齐 [child]。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在 [decoration] 内部刻写的空白空间。[child](如果有)放置在此内边距内。"},{"name":"color","type":"Color?","desc":"在 [child] 后面绘制的颜色。"},{"name":"decoration","type":"Decoration?","desc":"在 [child] 后面绘制的装饰。"},{"name":"foregroundDecoration","type":"Decoration?","desc":"在 [child] 前面绘制的装饰。"},{"name":"constraints","type":"BoxConstraints?","desc":"应用于子项的额外约束。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕 [decoration] 和 [child] 的空白空间。"},{"name":"transform","type":"Matrix4?","desc":"在绘制容器之前应用的变换矩阵。"},{"name":"transformAlignment","type":"AlignmentGeometry?","desc":"如果指定了 [transform],相对于容器大小的原点对齐。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"当 [Container.decoration] 不为 null 时的裁剪行为。"}],"id":1,"localName":"容器组件","lever":5,"family":0,"linkIds":[74,85,80,78,70,123],"nodes":[{"file":"node1_base.dart","name":"可用于显示一个指定宽高的区域","desc":["【width】 : 宽 【int】","【height】: 高 【int】","【color】: 颜色 【Color】"]},{"file":"node2_child.dart","name":"可以在区域中放入一个子组件","desc":["【padding】 : 内边距 【EdgeInsetsGeometry】","【margin】: 外边距 【EdgeInsetsGeometry】","【child】: 子组件 【Widget】"]},{"file":"node3_alignment.dart","name":"可对子组件进行对齐定位","desc":["【alignment】 : 对齐定位 【AlignmentGeometry】"]},{"file":"node4_decoration.dart","name":"可对子组件进行装饰","desc":["【decoration】 : 装饰 【Decoration】","可装饰: 边线、圆弧、颜色、渐变色、阴影、图片等内容"]},{"file":"node5_transform.dart","name":"Container还具有变换性","desc":["【transform】 : 变换矩阵 【Matrix4】","基于Matrix4的矩阵变换,变换详情见线性代数"]},{"file":"node6_constraints.dart","name":"Container的约束性","desc":["【constraints】 : 约束 【BoxConstraints】","会约束该区域的尺寸,不会小于指定的最小宽高,也不会大于指定的最大宽高。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_en-US.json new file mode 100644 index 000000000..2b6d7cd28 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoActionSheet","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style action sheet.","fields":[{"name":"title","type":"Widget?","desc":"An optional title of the action sheet. When the [message] is non-null, the font of the [title] is bold."},{"name":"message","type":"Widget?","desc":"An optional descriptive message that provides more details about the reason for the alert."},{"name":"actions","type":"List?","desc":"The set of actions that are displayed for the user to select."},{"name":"messageScrollController","type":"ScrollController?","desc":"A scroll controller that can be used to control the scrolling of the [message] in the action sheet."},{"name":"actionScrollController","type":"ScrollController?","desc":"A scroll controller that can be used to control the scrolling of the [actions] in the action sheet."},{"name":"cancelButton","type":"Widget?","desc":"The optional cancel button that is grouped separately from the other actions."}],"id":131,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoActionSheet","desc":["【title】: First row component 【Widget】","【message】: Second row component 【Widget】","【cancelButton】: Component at the cancel button 【Widget】","【actions】: List of middle components 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_zh-CN.json new file mode 100644 index 000000000..c7c339259 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoActionSheet","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的操作表单。","fields":[{"name":"title","type":"Widget?","desc":"操作表单的可选标题。当 [message] 非空时,[title] 的字体为粗体。"},{"name":"message","type":"Widget?","desc":"提供有关警报原因的更多详细信息的可选描述性消息。"},{"name":"actions","type":"List?","desc":"为用户选择显示的操作集合。"},{"name":"messageScrollController","type":"ScrollController?","desc":"可用于控制操作表单中 [message] 滚动的滚动控制器。"},{"name":"actionScrollController","type":"ScrollController?","desc":"可用于控制操作表单中 [actions] 滚动的滚动控制器。"},{"name":"cancelButton","type":"Widget?","desc":"与其他操作分开分组的可选取消按钮。"}],"id":131,"localName":"iOS行为单","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoActionSheet基本使用","desc":["【title】 : 第一行组件 【Widget】","【message】 : 第二行组件 【Widget】","【cancelButton】 : 取消按钮处组件 【Widget】","【actions】 : 中间组件列表 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_en-US.json new file mode 100644 index 000000000..de9a0ccb0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoActionSheetAction","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":" The content of a typical action button in a [CupertinoActionSheet].","fields":[{"name":"onPressed","type":"VoidCallback","required":true,"desc":"The callback that is called when the button is selected."},{"name":"isDefaultAction","type":"bool","required":true,"desc":"Whether this action is the default choice in the action sheet."},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"Whether this action might change or delete data."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor that will be shown when hovering over the button."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":132,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoActionSheetAction","desc":["【child】: Child widget 【Widget】","【isDefaultAction】: Whether it is the default action 【bool】","【onPressed】: Click event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_zh-CN.json new file mode 100644 index 000000000..1f26e71cb --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoActionSheetAction","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":"[CupertinoActionSheet] 中典型操作按钮的内容。","fields":[{"name":"onPressed","type":"VoidCallback","required":true,"desc":"选择按钮时调用的回调。"},{"name":"isDefaultAction","type":"bool","required":true,"desc":"此操作是否是操作表单中的默认选择。"},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"此操作是否可能更改或删除数据。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"悬停在按钮上时将显示的光标。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":132,"localName":"iOS行为单按键","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoActionSheetAction基本使用","desc":["【child】 : 子组件 【Widget】","【isDefaultAction】 : 是否默认选中 【bool】","【onPressed】 : 点击事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_en-US.json new file mode 100644 index 000000000..393d290c3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoActivityIndicator","path":"/src/cupertino/activity_indicator.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style activity indicator that spins clockwise.","fields":[{"name":"color","type":"Color?","desc":"Color of the activity indicator."},{"name":"animating","type":"bool","required":true,"desc":"Whether the activity indicator is running its animation."},{"name":"radius","type":"double","required":true,"desc":"Radius of the spinner widget."},{"name":"progress","type":"double","required":true,"desc":"Determines the percentage of spinner ticks that will be shown. Typical usage would display all ticks, however, this allows for more fine-grained control such as during pull-to-refresh when the drag-down action shows one tick at a time as the user continues to drag down."}],"id":48,"lever":2,"family":1,"linkIds":[46,47],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoActivityIndicator","desc":["【animating】 : Whether the loading animation is active 【bool】","【radius】 : Radius 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_zh-CN.json new file mode 100644 index 000000000..d6df91cc9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoActivityIndicator","path":"/src/cupertino/activity_indicator.dart","parents":["StatefulWidget","Widget"],"desc":"顺时针旋转的 iOS 风格活动指示器。","fields":[{"name":"color","type":"Color?","desc":"活动指示器的颜色。"},{"name":"animating","type":"bool","required":true,"desc":"活动指示器是否正在运行其动画。"},{"name":"radius","type":"double","required":true,"desc":"旋转器小部件的半径。"},{"name":"progress","type":"double","required":true,"desc":"确定将显示的旋转器刻度的百分比。典型用法会显示所有刻度,但是,这允许更细粒度的控制,例如在下拉刷新期间,当用户继续向下拖动时,拖拽动作一次显示一个刻度。"}],"id":48,"localName":"iOS指示器","lever":2,"family":1,"linkIds":[46,47],"nodes":[{"file":"node1_base.dart","name":"CupertinoActivityIndicator基本使用","desc":["【animating】 : 是否loading动画 【bool】","【radius】 : 半径 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_en-US.json new file mode 100644 index 000000000..25daf7ad1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoAdaptiveTextSelectionToolbar","path":"/src/cupertino/adaptive_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" The default Cupertino context menu for text selection for the current platform with the given children.","fields":[{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"{@macro flutter.material.AdaptiveTextSelectionToolbar.anchors}"},{"name":"children","type":"List?","desc":"The children of the toolbar, typically buttons."},{"name":"buttonItems","type":"List?","desc":"The [ContextMenuButtonItem]s that will be turned into the correct button widgets for the current platform."}],"id":381,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_zh-CN.json new file mode 100644 index 000000000..21502c6a7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoAdaptiveTextSelectionToolbar","path":"/src/cupertino/adaptive_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"当前平台的默认 Cupertino 文本选择上下文菜单,包含给定的子项。","fields":[{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"{@macro flutter.material.AdaptiveTextSelectionToolbar.anchors}"},{"name":"children","type":"List?","desc":"工具栏的子项,通常是按钮。"},{"name":"buttonItems","type":"List?","desc":"将转换为当前平台正确按钮小部件的 [ContextMenuButtonItem]。"}],"id":381,"localName":"CupertinoAdaptiveTextSelectionToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_en-US.json new file mode 100644 index 000000000..00ef27b39 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoAlertDialog","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style alert dialog.","fields":[{"name":"title","type":"Widget?","desc":"The (optional) title of the dialog is displayed in a large font at the top of the dialog."},{"name":"content","type":"Widget?","desc":"The (optional) content of the dialog is displayed in the center of the dialog in a lighter font."},{"name":"actions","type":"List","required":true,"desc":"The (optional) set of actions that are displayed at the bottom of the dialog."},{"name":"scrollController","type":"ScrollController?","desc":"A scroll controller that can be used to control the scrolling of the [content] in the dialog."},{"name":"actionScrollController","type":"ScrollController?","desc":"A scroll controller that can be used to control the scrolling of the actions in the dialog."},{"name":"insetAnimationDuration","type":"Duration","required":true,"desc":"{@macro flutter.material.dialog.insetAnimationDuration}"},{"name":"insetAnimationCurve","type":"Curve","required":true,"desc":"{@macro flutter.material.dialog.insetAnimationCurve}"}],"id":129,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoActionSheetAction","desc":["【child】 : Child component 【Widget】","【isDefaultAction】 : Whether it is selected by default 【bool】","【onPressed】 : Click event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_zh-CN.json new file mode 100644 index 000000000..d1cdd5575 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoAlertDialog","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的警告对话框。","fields":[{"name":"title","type":"Widget?","desc":"对话框的(可选)标题以大字体显示在对话框顶部。"},{"name":"content","type":"Widget?","desc":"对话框的(可选)内容以较浅的字体显示在对话框中心。"},{"name":"actions","type":"List","required":true,"desc":"显示在对话框底部的(可选)操作集合。"},{"name":"scrollController","type":"ScrollController?","desc":"可用于控制对话框中 [content] 滚动的滚动控制器。"},{"name":"actionScrollController","type":"ScrollController?","desc":"可用于控制对话框中操作滚动的滚动控制器。"},{"name":"insetAnimationDuration","type":"Duration","required":true,"desc":"{@macro flutter.material.dialog.insetAnimationDuration}"},{"name":"insetAnimationCurve","type":"Curve","required":true,"desc":"{@macro flutter.material.dialog.insetAnimationCurve}"}],"id":129,"localName":"iOS对话框","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoActionSheetAction基本使用","desc":["【child】 : 子组件 【Widget】","【isDefaultAction】 : 是否默认选中 【bool】","【onPressed】 : 点击事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_en-US.json new file mode 100644 index 000000000..93d930ae7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoApp","path":"/src/cupertino/app.dart","parents":["StatefulWidget","Widget"],"desc":" An application that uses Cupertino design.","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@macro flutter.widgets.widgetsApp.navigatorKey}"},{"name":"home","type":"Widget?","desc":"{@macro flutter.widgets.widgetsApp.home}"},{"name":"theme","type":"CupertinoThemeData?","desc":"The top-level [CupertinoTheme] styling."},{"name":"routes","type":"Map?","desc":"The application's top-level routing table."},{"name":"initialRoute","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.initialRoute}"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateRoute}"},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateInitialRoutes}"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onUnknownRoute}"},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@macro flutter.widgets.widgetsApp.onNavigationNotification}"},{"name":"navigatorObservers","type":"List?","desc":"{@macro flutter.widgets.widgetsApp.navigatorObservers}"},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationProvider}"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationParser}"},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@macro flutter.widgets.widgetsApp.routerDelegate}"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@macro flutter.widgets.widgetsApp.backButtonDispatcher}"},{"name":"routerConfig","type":"RouterConfig?","desc":"{@macro flutter.widgets.widgetsApp.routerConfig}"},{"name":"builder","type":"TransitionBuilder?","desc":"{@macro flutter.widgets.widgetsApp.builder}"},{"name":"title","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.title}"},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateTitle}"},{"name":"color","type":"Color?","desc":"{@macro flutter.widgets.widgetsApp.color}"},{"name":"locale","type":"Locale?","desc":"{@macro flutter.widgets.widgetsApp.locale}"},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@macro flutter.widgets.widgetsApp.localizationsDelegates}"},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.LocaleResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@macro flutter.widgets.widgetsApp.supportedLocales}"},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"Turns on a performance overlay."},{"name":"checkerboardRasterCacheImages","type":"bool","required":true,"desc":"Turns on checkerboarding of raster cache images."},{"name":"checkerboardOffscreenLayers","type":"bool","required":true,"desc":"Turns on checkerboarding of layers rendered to offscreen bitmaps."},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"Turns on an overlay that shows the accessibility information reported by the framework."},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.debugShowCheckedModeBanner}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.widgetsApp.shortcuts} {@tool snippet} This example shows how to add a single shortcut for [LogicalKeyboardKey.select] to the default shortcuts without needing to add your own [Shortcuts] widget."},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.widgetsApp.actions} {@tool snippet} This example shows how to add a single action handling an [ActivateAction] to the default actions without needing to add your own [Actions] widget."},{"name":"restorationScopeId","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.restorationScopeId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.material.materialApp.scrollBehavior}"},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.useInheritedMediaQuery}"}],"id":156,"lever":4,"family":1,"linkIds":[157,158],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoApp","desc":["【theme】 : Theme 【ThemeData】","【title】 : Taskbar Title 【String】","【onGenerateRoute】 : Route Generator 【RouteFactory】","【home】 : Home Page 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_zh-CN.json new file mode 100644 index 000000000..0f5ddaa64 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoApp","path":"/src/cupertino/app.dart","parents":["StatefulWidget","Widget"],"desc":"使用 Cupertino 设计的应用程序。","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@macro flutter.widgets.widgetsApp.navigatorKey}"},{"name":"home","type":"Widget?","desc":"{@macro flutter.widgets.widgetsApp.home}"},{"name":"theme","type":"CupertinoThemeData?","desc":"顶级 [CupertinoTheme] 样式。"},{"name":"routes","type":"Map?","desc":"应用程序的顶级路由表。"},{"name":"initialRoute","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.initialRoute}"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateRoute}"},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateInitialRoutes}"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onUnknownRoute}"},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@macro flutter.widgets.widgetsApp.onNavigationNotification}"},{"name":"navigatorObservers","type":"List?","desc":"{@macro flutter.widgets.widgetsApp.navigatorObservers}"},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationProvider}"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationParser}"},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@macro flutter.widgets.widgetsApp.routerDelegate}"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@macro flutter.widgets.widgetsApp.backButtonDispatcher}"},{"name":"routerConfig","type":"RouterConfig?","desc":"{@macro flutter.widgets.widgetsApp.routerConfig}"},{"name":"builder","type":"TransitionBuilder?","desc":"{@macro flutter.widgets.widgetsApp.builder}"},{"name":"title","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.title}"},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateTitle}"},{"name":"color","type":"Color?","desc":"{@macro flutter.widgets.widgetsApp.color}"},{"name":"locale","type":"Locale?","desc":"{@macro flutter.widgets.widgetsApp.locale}"},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@macro flutter.widgets.widgetsApp.localizationsDelegates}"},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.LocaleResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@macro flutter.widgets.widgetsApp.supportedLocales}"},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"开启性能叠加层。"},{"name":"checkerboardRasterCacheImages","type":"bool","required":true,"desc":"开启光栅缓存图像的棋盘格显示。"},{"name":"checkerboardOffscreenLayers","type":"bool","required":true,"desc":"开启渲染到离屏位图的图层的棋盘格显示。"},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"开启显示框架报告的辅助功能信息的叠加层。"},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.debugShowCheckedModeBanner}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.widgetsApp.shortcuts} {@tool snippet} 此示例显示如何在不需要添加自己的 [Shortcuts] 小部件的情况下,将 [LogicalKeyboardKey.select] 的单个快捷键添加到默认快捷键中。"},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.widgetsApp.actions} {@tool snippet} 此示例显示如何在不需要添加自己的 [Actions] 小部件的情况下,将处理 [ActivateAction] 的单个操作添加到默认操作中。"},{"name":"restorationScopeId","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.restorationScopeId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.material.materialApp.scrollBehavior}"},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.useInheritedMediaQuery}"}],"id":156,"localName":"iOS应用","lever":4,"family":1,"linkIds":[157,158],"nodes":[{"file":"node1_base.dart","name":"CupertinoApp基本用法","desc":["【theme】 : 主题 【ThemeData】","【title】 : 任务栏标题 【String】","【onGenerateRoute】 : 路由生成器 【RouteFactory】","【home】 : 主页 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_en-US.json new file mode 100644 index 000000000..3fbaea233 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoButton","path":"/src/cupertino/button.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style button.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space to surround the child inside the bounds of the button."},{"name":"color","type":"Color?","desc":"The color of the button's background."},{"name":"disabledColor","type":"Color","required":true,"desc":"The color of the button's background when the button is disabled."},{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when the button is tapped or otherwise activated."},{"name":"onLongPress","type":"VoidCallback?","desc":"If [onPressed] and [onLongPress] callbacks are null, then the button will be disabled."},{"name":"minSize","type":"double?","desc":"Minimum size of the button."},{"name":"minimumSize","type":"Size?","desc":"The minimum size of the button."},{"name":"pressedOpacity","type":"double?","desc":"The opacity that the button will fade to when it is pressed. The button will have an opacity of 1.0 when it is not pressed."},{"name":"borderRadius","type":"BorderRadius?","desc":"The radius of the button's corners when it has a background color."},{"name":"sizeStyle","type":"CupertinoButtonSize","required":true,"desc":"The size of the button."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"The alignment of the button's [child]."},{"name":"focusColor","type":"Color?","desc":"The color to use for the focus highlight for keyboard interactions."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."}],"id":24,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoButton Click Event","desc":["【color】: Color 【Color】","【pressedOpacity】: Opacity when pressed 【double】","【child】: Child widget 【Widget】","【padding】: Padding 【EdgeInsetsGeometry】","【borderRadius】: Border radius 【BorderRadius】","【onPressed】: Click event 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_zh-CN.json new file mode 100644 index 000000000..14d249344 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoButton","path":"/src/cupertino/button.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的按钮。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在按钮边界内围绕子项的空间量。"},{"name":"color","type":"Color?","desc":"按钮背景的颜色。"},{"name":"disabledColor","type":"Color","required":true,"desc":"按钮禁用时按钮背景的颜色。"},{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用的回调。"},{"name":"onLongPress","type":"VoidCallback?","desc":"如果 [onPressed] 和 [onLongPress] 回调为 null,则按钮将被禁用。"},{"name":"minSize","type":"double?","desc":"按钮的最小大小。"},{"name":"minimumSize","type":"Size?","desc":"按钮的最小大小。"},{"name":"pressedOpacity","type":"double?","desc":"按钮被按下时将淡化到的不透明度。按钮未被按下时不透明度为 1.0。"},{"name":"borderRadius","type":"BorderRadius?","desc":"按钮有背景颜色时按钮角的半径。"},{"name":"sizeStyle","type":"CupertinoButtonSize","required":true,"desc":"按钮的大小。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"按钮 [child] 的对齐方式。"},{"name":"focusColor","type":"Color?","desc":"用于键盘交互的焦点高亮的颜色。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点改变时调用的处理程序。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"}],"id":24,"localName":"iOS按钮","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoButton点击事件","desc":["【color】: 颜色 【Color】","【pressedOpacity】: 按下时透明度 【double】","【child】: 子组件 【Widget】","【padding】: 内边距 【EdgeInsetsGeometry】","【borderRadius】: 圆角半径 【BorderRadius】","【onPressed】: 点击事件 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_en-US.json new file mode 100644 index 000000000..e986b04cd --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoCheckbox","path":"/src/cupertino/checkbox.dart","parents":["StatefulWidget","Widget"],"desc":" A macOS style checkbox.","fields":[{"name":"value","type":"bool?","desc":"Whether this checkbox is checked."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the value of the checkbox should change."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"activeColor","type":"Color?","desc":"The color to use when this checkbox is checked."},{"name":"fillColor","type":"WidgetStateProperty?","desc":"{@template flutter.cupertino.CupertinoCheckbox.fillColor} The color used to fill this checkbox."},{"name":"inactiveColor","type":"Color?","desc":"The color used if the checkbox is inactive."},{"name":"checkColor","type":"Color?","desc":"The color to use for the check icon when this checkbox is checked."},{"name":"tristate","type":"bool","required":true,"desc":"If true, the checkbox's [value] can be true, false, or null."},{"name":"focusColor","type":"Color?","desc":"The color for the checkbox's border shadow when it has the input focus."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"side","type":"BorderSide?","desc":"The color and width of the checkbox's border."},{"name":"shape","type":"OutlinedBorder?","desc":"The shape of the checkbox."},{"name":"semanticLabel","type":"String?","desc":"The semantic label for the checkbox that will be announced by screen readers."}],"id":238,"lever":4,"family":1,"linkIds":[39,17],"nodes":[{"file":"node1.dart","name":"CupertinoCheckbox Usage","desc":["【value】: Whether it is selected 【bool?】","【onChanged】: Change callback 【ValueChanged?】","【checkColor】: Checkmark color when selected 【Color?】","【activeColor】: Background color when selected 【Color?】","【activeColor】: Background color when selected 【Color?】","【inactiveColor】: Border color when inactive/background color when disabled 【Color?】","When onChanged is null, it means it is disabled."]},{"file":"node2.dart","name":"CupertinoCheckbox Three States","desc":["【tristate】: Whether to enable three states 【bool】","In three states, the value is null for -"]},{"file":"node3.dart","name":"CupertinoCheckbox Border and Shape","desc":["【shape】: Shape 【OutlinedBorder?】","【side】: Border 【BorderSide?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_zh-CN.json new file mode 100644 index 000000000..6a3938b56 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoCheckbox","path":"/src/cupertino/checkbox.dart","parents":["StatefulWidget","Widget"],"desc":"macOS 风格的复选框。","fields":[{"name":"value","type":"bool?","desc":"此复选框是否被选中。"},{"name":"onChanged","type":"ValueChanged?","desc":"复选框的值应该改变时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"activeColor","type":"Color?","desc":"此复选框被选中时使用的颜色。"},{"name":"fillColor","type":"WidgetStateProperty?","desc":"{@template flutter.cupertino.CupertinoCheckbox.fillColor} 用于填充此复选框的颜色。"},{"name":"inactiveColor","type":"Color?","desc":"复选框处于非活动状态时使用的颜色。"},{"name":"checkColor","type":"Color?","desc":"此复选框被选中时用于勾选图标的颜色。"},{"name":"tristate","type":"bool","required":true,"desc":"如果为 true,复选框的 [value] 可以是 true、false 或 null。"},{"name":"focusColor","type":"Color?","desc":"复选框具有输入焦点时其边框阴影的颜色。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"side","type":"BorderSide?","desc":"复选框边框的颜色和宽度。"},{"name":"shape","type":"OutlinedBorder?","desc":"复选框的形状。"},{"name":"semanticLabel","type":"String?","desc":"屏幕阅读器将宣布的复选框语义标签。"}],"id":238,"localName":"复选框·macOS风格","lever":4,"family":1,"linkIds":[39,17],"nodes":[{"file":"node1.dart","name":"CupertinoCheckbox 使用","desc":["【value】 : 是否选中 【bool?】","【onChanged】 : 变化回调 【ValueChanged?】","【checkColor】 : 选中时√颜色 【Color?】","【activeColor】 : 选中背景颜色 【Color?】","【activeColor】 : 选中背景颜色 【Color?】","【inactiveColor】 : 非激活是边线色/不可用背景色 【Color?】","onChanged 为 null 时,表示不可用。"]},{"file":"node2.dart","name":"CupertinoCheckbox 三态","desc":["【tristate】 : 是否启用三态 【bool】","三态时,值为 null 为 - "]},{"file":"node3.dart","name":"CupertinoCheckbox 边线与形状","desc":["【shape】 : 形状 【OutlinedBorder?】","【side】 : 边线 【BorderSide?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_en-US.json new file mode 100644 index 000000000..b839181d5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoContextMenu","path":"/src/cupertino/context_menu.dart","parents":["StatefulWidget","Widget"],"desc":" A full-screen modal route that opens when the [child] is long-pressed.","fields":[{"name":"builder","type":"CupertinoContextMenuBuilder","required":true,"desc":"A function that returns a widget to be used alternatively from [child]."},{"name":"child","type":"Widget?","desc":"The widget that can be \"opened\" with the [CupertinoContextMenu]."},{"name":"actions","type":"List","required":true,"desc":"The actions that are shown in the menu."},{"name":"enableHapticFeedback","type":"bool","required":true,"desc":"If true, clicking on the [CupertinoContextMenuAction]s will produce haptic feedback."}],"id":143,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoContextMenu","desc":["【child】 : Child Component 【Widget】","【actions】 : Action Components Set 【List】","【previewBuilder】 : Animation Builder 【ContextMenuPreviewBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_zh-CN.json new file mode 100644 index 000000000..78d3d34a6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoContextMenu","path":"/src/cupertino/context_menu.dart","parents":["StatefulWidget","Widget"],"desc":"长按 [child] 时打开的全屏模态路由。","fields":[{"name":"builder","type":"CupertinoContextMenuBuilder","required":true,"desc":"返回用作 [child] 替代的小部件的函数。"},{"name":"child","type":"Widget?","desc":"可以用 [CupertinoContextMenu] \\"},{"name":"actions","type":"List","required":true,"desc":"在菜单中显示的操作。"},{"name":"enableHapticFeedback","type":"bool","required":true,"desc":"如果为 true,点击 [CupertinoContextMenuAction] 将产生触觉反馈。"}],"id":143,"localName":"ios弹出菜单","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoContextMenu基本使用","desc":["【child】 : 子组件 【Widget】","【actions】 : 行为组件集 【List】","【previewBuilder】 : 动画构造器 【ContextMenuPreviewBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_en-US.json new file mode 100644 index 000000000..6f781e3a1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoContextMenuAction","path":"/src/cupertino/context_menu_action.dart","parents":["StatefulWidget","Widget"],"desc":" A button in a _ContextMenuSheet.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget that will be placed inside the action."},{"name":"isDefaultAction","type":"bool","required":true,"desc":"Indicates whether this action should receive the style of an emphasized, default action."},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"Indicates whether this action should receive the style of a destructive action."},{"name":"onPressed","type":"VoidCallback?","desc":"Called when the action is pressed."},{"name":"trailingIcon","type":"IconData?","desc":"An optional icon to display to the right of the child."}],"id":144,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoContextMenuAction","desc":["【child】 : Child Component 【Widget】","【isDefaultAction】 : Whether it is the default action 【bool】","【trailingIcon】 : Trailing Icon 【bool】","【onPressed】 : Click Event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_zh-CN.json new file mode 100644 index 000000000..b3dde5457 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoContextMenuAction","path":"/src/cupertino/context_menu_action.dart","parents":["StatefulWidget","Widget"],"desc":"_ContextMenuSheet 中的按钮。","fields":[{"name":"child","type":"Widget","required":true,"desc":"将放置在操作内部的小部件。"},{"name":"isDefaultAction","type":"bool","required":true,"desc":"指示此操作是否应接收强调的默认操作样式。"},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"指示此操作是否应接收破坏性操作的样式。"},{"name":"onPressed","type":"VoidCallback?","desc":"按下操作时调用。"},{"name":"trailingIcon","type":"IconData?","desc":"在子项右侧显示的可选图标。"}],"id":144,"localName":"ios弹出菜单按钮","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoContextMenuAction基本使用","desc":["【child】 : 子组件 【Widget】","【isDefaultAction】 : 是否默认选中 【bool】","【trailingIcon】 : 尾部 【bool】","【onPressed】 : 点击事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_en-US.json new file mode 100644 index 000000000..4133ae5c8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoDatePicker","path":"/src/cupertino/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A date picker widget in iOS style.","fields":[{"name":"mode","type":"CupertinoDatePickerMode","required":true,"desc":"The mode of the date picker as one of [CupertinoDatePickerMode]. Defaults to [CupertinoDatePickerMode.dateAndTime]. Value cannot change after initial build."},{"name":"initialDateTime","type":"DateTime","required":true,"desc":"The initial date and/or time of the picker. Defaults to the present date and time. The present must conform to the intervals set in [minimumDate], [maximumDate], [minimumYear], and [maximumYear]."},{"name":"minimumDate","type":"DateTime?","desc":"The minimum selectable date that the picker can settle on."},{"name":"maximumDate","type":"DateTime?","desc":"The maximum selectable date that the picker can settle on."},{"name":"minimumYear","type":"int","required":true,"desc":"Minimum year that the picker can be scrolled to in [CupertinoDatePickerMode.date] mode. Defaults to 1."},{"name":"maximumYear","type":"int?","desc":"Maximum year that the picker can be scrolled to in [CupertinoDatePickerMode.date] mode. Null if there's no limit."},{"name":"minuteInterval","type":"int","required":true,"desc":"The granularity of the minutes spinner, if it is shown in the current mode. Must be an integer factor of 60."},{"name":"use24hFormat","type":"bool","required":true,"desc":"Whether to use 24 hour format. Defaults to false."},{"name":"dateOrder","type":"DatePickerDateOrder?","desc":"Determines the order of the columns inside [CupertinoDatePicker] in [CupertinoDatePickerMode.date] and [CupertinoDatePickerMode.monthYear] mode. When using monthYear mode, both [DatePickerDateOrder.dmy] and [DatePickerDateOrder.mdy] will result in the month|year order. Defaults to the locale's default date format/order."},{"name":"onDateTimeChanged","type":"ValueChanged","required":true,"desc":"Callback called when the selected date and/or time changes. If the new selected [DateTime] is not valid, or is not in the [minimumDate] through [maximumDate] range, this callback will not be called."},{"name":"backgroundColor","type":"Color?","desc":"Background color of date picker."},{"name":"showDayOfWeek","type":"bool","required":true,"desc":"Whether to show the day of week alongside the day in [CupertinoDatePickerMode.date] mode."},{"name":"showTimeSeparator","type":"bool","required":true,"desc":"Whether to show the time separator between hour and minute in the time [CupertinoDatePickerMode.time] and datetime [CupertinoDatePickerMode.dateAndTime] picker modes."},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.cupertino.picker.itemExtent}"},{"name":"selectionOverlayBuilder","type":"SelectionOverlayBuilder?","desc":"A function that returns a widget that is overlaid on the picker to highlight the currently selected entry."}],"id":137,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoDatePicker","desc":["【initialDateTime】 : Initial date 【DateTime】","【minimumYear】 : Minimum year 【int】","【maximumYear】 : Maximum year 【int】","【onDateTimeChanged】 : Click callback 【Function(DateTime)】","【minuteInterval】 : Minute interval 【int】","【use24hFormat】 : Whether it is 24-hour format 【bool】","【backgroundColor】 : Background color 【Color】","【mode】 : Mode*3 【CupertinoDatePickerMode】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_zh-CN.json new file mode 100644 index 000000000..c38f8819e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoDatePicker","path":"/src/cupertino/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的日期选择器小部件。","fields":[{"name":"mode","type":"CupertinoDatePickerMode","required":true,"desc":"日期选择器的模式,为 [CupertinoDatePickerMode] 之一。默认为 [CupertinoDatePickerMode.dateAndTime]。值在初始构建后无法更改。"},{"name":"initialDateTime","type":"DateTime","required":true,"desc":"选择器的初始日期和/或时间。默认为当前日期和时间。当前值必须符合 [minimumDate]、[maximumDate]、[minimumYear] 和 [maximumYear] 中设置的间隔。"},{"name":"minimumDate","type":"DateTime?","desc":"选择器可以确定的最小可选日期。"},{"name":"maximumDate","type":"DateTime?","desc":"选择器可以确定的最大可选日期。"},{"name":"minimumYear","type":"int","required":true,"desc":"在 [CupertinoDatePickerMode.date] 模式下选择器可以滚动到的最小年份。默认为 1。"},{"name":"maximumYear","type":"int?","desc":"在 [CupertinoDatePickerMode.date] 模式下选择器可以滚动到的最大年份。如果没有限制则为 null。"},{"name":"minuteInterval","type":"int","required":true,"desc":"如果在当前模式下显示分钟旋转器的粒度。必须是 60 的整数因子。"},{"name":"use24hFormat","type":"bool","required":true,"desc":"是否使用 24 小时格式。默认为 false。"},{"name":"dateOrder","type":"DatePickerDateOrder?","desc":"确定 [CupertinoDatePicker] 在 [CupertinoDatePickerMode.date] 和 [CupertinoDatePickerMode.monthYear] 模式下内部列的顺序。使用 monthYear 模式时,[DatePickerDateOrder.dmy] 和 [DatePickerDateOrder.mdy] 都将导致月|年顺序。默认为区域设置的默认日期格式/顺序。"},{"name":"onDateTimeChanged","type":"ValueChanged","required":true,"desc":"选定日期和/或时间更改时调用的回调。如果新选择的 [DateTime] 无效,或不在 [minimumDate] 到 [maximumDate] 范围内,则不会调用此回调。"},{"name":"backgroundColor","type":"Color?","desc":"日期选择器的背景颜色。"},{"name":"showDayOfWeek","type":"bool","required":true,"desc":"在 [CupertinoDatePickerMode.date] 模式下是否在日期旁边显示星期几。"},{"name":"showTimeSeparator","type":"bool","required":true,"desc":"在时间 [CupertinoDatePickerMode.time] 和日期时间 [CupertinoDatePickerMode.dateAndTime] 选择器模式下是否显示小时和分钟之间的时间分隔符。"},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.cupertino.picker.itemExtent}"},{"name":"selectionOverlayBuilder","type":"SelectionOverlayBuilder?","desc":"返回覆盖在选择器上以突出显示当前选定条目的小部件的函数。"}],"id":137,"localName":"iOS日期选择器","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoDatePicker基本使用","desc":["【initialDateTime】 : 初始日期 【DateTime】","【minimumYear】 : 最小年份 【int】","【maximumYear】 : 最大年份 【int】","【onDateTimeChanged】 : 点击回调 【Function(DateTime)】","【minuteInterval】 : 分钟间隔 【int】","【use24hFormat】 : 是否是24小时制 【bool】","【backgroundColor】 : 背景色 【Color】","【mode】 : 模式*3 【CupertinoDatePickerMode】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_en-US.json new file mode 100644 index 000000000..883521bb2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoDesktopTextSelectionToolbar","path":"/src/cupertino/desktop_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" A macOS-style text selection toolbar.","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@macro flutter.material.DesktopTextSelectionToolbar.anchor}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"}],"id":382,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_zh-CN.json new file mode 100644 index 000000000..e062c56a3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoDesktopTextSelectionToolbar","path":"/src/cupertino/desktop_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"macOS 风格的文本选择工具栏。","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@macro flutter.material.DesktopTextSelectionToolbar.anchor}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"}],"id":382,"localName":"CupertinoDesktopTextSelectionToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_en-US.json new file mode 100644 index 000000000..76a4ef9b0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoDesktopTextSelectionToolbarButton","path":"/src/cupertino/desktop_text_selection_toolbar_button.dart","parents":["StatefulWidget","Widget"],"desc":" A button in the style of the Mac context menu buttons.","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed}"},{"name":"child","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.child}"},{"name":"buttonItem","type":"ContextMenuButtonItem?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed}"},{"name":"text","type":"String?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.text}"}],"id":383,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_zh-CN.json new file mode 100644 index 000000000..cddf6e76a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoDesktopTextSelectionToolbarButton","path":"/src/cupertino/desktop_text_selection_toolbar_button.dart","parents":["StatefulWidget","Widget"],"desc":"Mac 上下文菜单按钮样式的按钮。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed}"},{"name":"child","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.child}"},{"name":"buttonItem","type":"ContextMenuButtonItem?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed}"},{"name":"text","type":"String?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.text}"}],"id":383,"localName":"CupertinoDesktopTextSelectionToolbarButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_en-US.json new file mode 100644 index 000000000..58718fb9b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoDialogAction","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":" A button typically used in a [CupertinoAlertDialog].","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when the button is tapped or otherwise activated."},{"name":"isDefaultAction","type":"bool","required":true,"desc":"Set to true if button is the default choice in the dialog."},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"Whether this action destroys an object."},{"name":"textStyle","type":"TextStyle?","desc":"[TextStyle] to apply to any text that appears in this button."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":352,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoDialogAction","desc":["【isDefaultAction】: Whether it is a default action 【bool】","【isDestructiveAction】: Whether it is a destructive action 【bool】","【textStyle】: Text style 【TextStyle】","【onPressed】: Click event 【VoidCallback】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_zh-CN.json new file mode 100644 index 000000000..9df748f86 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoDialogAction","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":"通常在 [CupertinoAlertDialog] 中使用的按钮。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用的回调。"},{"name":"isDefaultAction","type":"bool","required":true,"desc":"如果按钮是对话框中的默认选择,则设置为 true。"},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"此操作是否销毁对象。"},{"name":"textStyle","type":"TextStyle?","desc":"应用于此按钮中出现的任何文本的 [TextStyle]。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":352,"localName":"交互视图","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoDialogAction基本使用","desc":["【isDefaultAction】 : 是否是默认性操作 【bool】","【isDestructiveAction】 : 是否是毁灭性操作 【bool】","【textStyle】: 文字样式 【TextStyle】","【onPressed】: 点击事件 【VoidCallback】","【child】: 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_en-US.json new file mode 100644 index 000000000..6b1359751 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoFormRow","path":"/src/cupertino/form_row.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-style form row.","fields":[{"name":"prefix","type":"Widget?","desc":"A widget that is displayed at the start of the row."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Content padding for the row."},{"name":"helper","type":"Widget?","desc":"A widget that is displayed underneath the [prefix] and [child] widgets."},{"name":"error","type":"Widget?","desc":"A widget that is displayed underneath the [prefix] and [child] widgets."},{"name":"child","type":"Widget","required":true,"desc":"Child widget."}],"id":384,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_zh-CN.json new file mode 100644 index 000000000..98df5615b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoFormRow","path":"/src/cupertino/form_row.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 风格的表单行。","fields":[{"name":"prefix","type":"Widget?","desc":"显示在行开始处的小部件。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"行的内容内边距。"},{"name":"helper","type":"Widget?","desc":"显示在 [prefix] 和 [child] 小部件下方的小部件。"},{"name":"error","type":"Widget?","desc":"显示在 [prefix] 和 [child] 小部件下方的小部件。"},{"name":"child","type":"Widget","required":true,"desc":"子小部件。"}],"id":384,"localName":"CupertinoFormRow","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_en-US.json new file mode 100644 index 000000000..efdcb6685 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoFormSection","path":"/src/cupertino/form_section.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-style form section.","fields":[{"name":"header","type":"Widget?","desc":"Sets the form section header. The section header lies above the [children] rows."},{"name":"footer","type":"Widget?","desc":"Sets the form section footer. The section footer lies below the [children] rows."},{"name":"margin","type":"EdgeInsetsGeometry","required":true,"desc":"Margin around the content area of the section encapsulating [children]."},{"name":"children","type":"List","required":true,"desc":"The list of rows in the section."},{"name":"decoration","type":"BoxDecoration?","desc":"Sets the decoration around [children]."},{"name":"backgroundColor","type":"Color","required":true,"desc":"Sets the background color behind the section."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":385,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_zh-CN.json new file mode 100644 index 000000000..ee095c6ae --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoFormSection","path":"/src/cupertino/form_section.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 风格的表单部分。","fields":[{"name":"header","type":"Widget?","desc":"设置表单部分标题。部分标题位于 [children] 行上方。"},{"name":"footer","type":"Widget?","desc":"设置表单部分页脚。部分页脚位于 [children] 行下方。"},{"name":"margin","type":"EdgeInsetsGeometry","required":true,"desc":"围绕包含 [children] 的部分内容区域的边距。"},{"name":"children","type":"List","required":true,"desc":"部分中的行列表。"},{"name":"decoration","type":"BoxDecoration?","desc":"设置 [children] 周围的装饰。"},{"name":"backgroundColor","type":"Color","required":true,"desc":"设置部分后面的背景颜色。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":385,"localName":"CupertinoFormSection","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_en-US.json new file mode 100644 index 000000000..20ee64fd9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoFullscreenDialogTransition","path":"/src/cupertino/route.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style transition used for summoning fullscreen dialogs.","fields":[{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"* `primaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when this screen is being pushed."},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"* `secondaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when another screen is being pushed on top of this one."},{"name":"linearTransition","type":"bool","required":true,"desc":"* `linearTransition` is whether to perform the transitions linearly. Used to precisely track back gesture drags."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":219,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Component Introduction","desc":["【child】 : Child component 【Widget】","【linearTransition】 : Whether to use linear transition 【bool】","【primaryRouteAnimation】 : Initial route animation 【Animation】","【secondaryRouteAnimation】 : Secondary route animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_zh-CN.json new file mode 100644 index 000000000..409a5465c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoFullscreenDialogTransition","path":"/src/cupertino/route.dart","parents":["StatefulWidget","Widget"],"desc":"用于召唤全屏对话框的 iOS 风格过渡。","fields":[{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"* `primaryRouteAnimation` 是推送此屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"* `secondaryRouteAnimation` 是在此屏幕之上推送另一个屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"linearTransition","type":"bool","required":true,"desc":"* `linearTransition` 是否线性执行过渡。用于精确跟踪返回手势拖动。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":219,"localName":"全页面过渡变换","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"组件介绍","desc":["【child】 : 子组件 【Widget】","【linearTransition】 : 是否线性转换 【bool】","【primaryRouteAnimation】 : 初始路由动画 【Animation】","【secondaryRouteAnimation】 : 第二路由动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_en-US.json new file mode 100644 index 000000000..d88523302 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoListSection","path":"/src/cupertino/list_section.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-style list section.","fields":[{"name":"type","type":"CupertinoListSectionType","required":true,"desc":"The type of list section, either base or inset grouped."},{"name":"header","type":"Widget?","desc":"Sets the form section header. The section header lies above the [children] rows. Usually a [Text] widget."},{"name":"footer","type":"Widget?","desc":"Sets the form section footer. The section footer lies below the [children] rows. Usually a [Text] widget."},{"name":"margin","type":"EdgeInsetsGeometry","required":true,"desc":"Margin around the content area of the section encapsulating [children]."},{"name":"children","type":"List?","desc":"The list of rows in the section. Usually a list of [CupertinoListTile]s."},{"name":"decoration","type":"BoxDecoration?","desc":"Sets the decoration around [children]."},{"name":"backgroundColor","type":"Color","required":true,"desc":"Sets the background color behind the section."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"dividerMargin","type":"double","required":true,"desc":"The starting offset of a margin between two list tiles."},{"name":"additionalDividerMargin","type":"double","required":true,"desc":"Additional starting inset of the divider used between rows. This is used when adding a leading icon to children and a divider should start at the text inset instead of the icon."},{"name":"topMargin","type":"double?","desc":"Margin above the list section. Only used in edge-to-edge variant and it matches iOS style by default."},{"name":"separatorColor","type":"Color?","desc":"Sets the color for the dividers between rows, and borders on top and bottom of the rows."}],"id":386,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_zh-CN.json new file mode 100644 index 000000000..c524e0f57 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoListSection","path":"/src/cupertino/list_section.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 风格的列表部分。","fields":[{"name":"type","type":"CupertinoListSectionType","required":true,"desc":"列表部分的类型,基础或插入分组。"},{"name":"header","type":"Widget?","desc":"设置表单部分标题。部分标题位于 [children] 行上方。通常是 [Text] 小部件。"},{"name":"footer","type":"Widget?","desc":"设置表单部分页脚。部分页脚位于 [children] 行下方。通常是 [Text] 小部件。"},{"name":"margin","type":"EdgeInsetsGeometry","required":true,"desc":"围绕包含 [children] 的部分内容区域的边距。"},{"name":"children","type":"List?","desc":"部分中的行列表。通常是 [CupertinoListTile] 的列表。"},{"name":"decoration","type":"BoxDecoration?","desc":"设置 [children] 周围的装饰。"},{"name":"backgroundColor","type":"Color","required":true,"desc":"设置部分后面的背景颜色。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"dividerMargin","type":"double","required":true,"desc":"两个列表项之间边距的起始偏移量。"},{"name":"additionalDividerMargin","type":"double","required":true,"desc":"行之间使用的分隔符的附加起始插入。当向子项添加前导图标且分隔符应从文本插入而不是图标开始时使用。"},{"name":"topMargin","type":"double?","desc":"列表部分上方的边距。仅在边到边变体中使用,默认情况下匹配 iOS 样式。"},{"name":"separatorColor","type":"Color?","desc":"设置行之间分隔符以及行顶部和底部边框的颜色。"}],"id":386,"localName":"CupertinoListSection","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_en-US.json new file mode 100644 index 000000000..1ef2eeb3e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoListTile","path":"/src/cupertino/list_tile.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style list tile.","fields":[{"name":"title","type":"Widget","required":true,"desc":"A [title] is used to convey the central information. Usually a [Text]."},{"name":"subtitle","type":"Widget?","desc":"A [subtitle] is used to display additional information. It is located below [title]. Usually a [Text] widget."},{"name":"additionalInfo","type":"Widget?","desc":"Similar to [subtitle], an [additionalInfo] is used to display additional information. However, instead of being displayed below [title], it is displayed on the right, before [trailing]. Usually a [Text] widget."},{"name":"leading","type":"Widget?","desc":"A widget displayed at the start of the [CupertinoListTile]. This is typically an `Icon` or an `Image`."},{"name":"trailing","type":"Widget?","desc":"A widget displayed at the end of the [CupertinoListTile]. This is usually a right chevron icon (e.g. `CupertinoListTileChevron`), or an `Icon`."},{"name":"onTap","type":"FutureOr Function()?","desc":"The [onTap] function is called when a user taps on [CupertinoListTile]. If left `null`, the [CupertinoListTile] will not react on taps. If this is a `Future Function()`, then the [CupertinoListTile] remains activated until the returned future is awaited. This is according to iOS behavior. However, if this function is a `void Function()`, then the tile is active only for the duration of invocation."},{"name":"backgroundColor","type":"Color?","desc":"The [backgroundColor] of the tile in normal state. Once the tile is tapped, the background color switches to [backgroundColorActivated]. It is set to match the iOS look by default."},{"name":"backgroundColorActivated","type":"Color?","desc":"The [backgroundColorActivated] is the background color of the tile after the tile was tapped. It is set to match the iOS look by default."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Padding of the content inside [CupertinoListTile]."},{"name":"leadingSize","type":"double","required":true,"desc":"The [leadingSize] is used to constrain the width and height of [leading] widget."},{"name":"leadingToTitle","type":"double","required":true,"desc":"The horizontal space between [leading] widget and [title]."}],"id":387,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_zh-CN.json new file mode 100644 index 000000000..27ee69aae --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoListTile","path":"/src/cupertino/list_tile.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的列表项。","fields":[{"name":"title","type":"Widget","required":true,"desc":"[title] 用于传达中心信息。通常是 [Text]。"},{"name":"subtitle","type":"Widget?","desc":"[subtitle] 用于显示附加信息。它位于 [title] 下方。通常是 [Text] 小部件。"},{"name":"additionalInfo","type":"Widget?","desc":"与 [subtitle] 类似,[additionalInfo] 用于显示附加信息。但是,它不是显示在 [title] 下方,而是显示在右侧,在 [trailing] 之前。通常是 [Text] 小部件。"},{"name":"leading","type":"Widget?","desc":"显示在 [CupertinoListTile] 开始处的小部件。这通常是 `Icon` 或 `Image`。"},{"name":"trailing","type":"Widget?","desc":"显示在 [CupertinoListTile] 末尾的小部件。这通常是右箭头图标(例如 `CupertinoListTileChevron`)或 `Icon`。"},{"name":"onTap","type":"FutureOr Function()?","desc":"当用户点击 [CupertinoListTile] 时调用 [onTap] 函数。如果保留为 `null`,[CupertinoListTile] 将不会对点击做出反应。如果这是 `Future Function()`,则 [CupertinoListTile] 保持激活状态,直到返回的 future 被等待。这符合 iOS 行为。但是,如果此函数是 `void Function()`,则项目仅在调用期间处于活动状态。"},{"name":"backgroundColor","type":"Color?","desc":"项目在正常状态下的 [backgroundColor]。一旦点击项目,背景颜色切换到 [backgroundColorActivated]。默认设置为匹配 iOS 外观。"},{"name":"backgroundColorActivated","type":"Color?","desc":"[backgroundColorActivated] 是点击项目后项目的背景颜色。默认设置为匹配 iOS 外观。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"[CupertinoListTile] 内部内容的内边距。"},{"name":"leadingSize","type":"double","required":true,"desc":"[leadingSize] 用于约束 [leading] 小部件的宽度和高度。"},{"name":"leadingToTitle","type":"double","required":true,"desc":"[leading] 小部件和 [title] 之间的水平空间。"}],"id":387,"localName":"CupertinoListTile","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_en-US.json new file mode 100644 index 000000000..493707680 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoListTileChevron","path":"/src/cupertino/list_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A typical iOS trailing widget used to denote that a `CupertinoListTile` is a button with an action.","fields":[],"id":388,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_zh-CN.json new file mode 100644 index 000000000..223f7ac82 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoListTileChevron","path":"/src/cupertino/list_tile.dart","parents":["StatelessWidget","Widget"],"desc":"用于表示 `CupertinoListTile` 是带有操作的按钮的典型 iOS 尾随小部件。","fields":[],"id":388,"localName":"CupertinoListTileChevron","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_en-US.json new file mode 100644 index 000000000..4c22d5347 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoMagnifier","path":"/src/cupertino/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":" A [RawMagnifier] used for magnifying text in cases where a user's finger may be blocking the point of interest, like a selection handle.","fields":[{"name":"shadows","type":"List","required":true,"desc":"A list of shadows cast by the [Magnifier]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"Whether and how to clip the [shadows] that render inside the loupe."},{"name":"borderSide","type":"BorderSide","required":true,"desc":"The border, or \"rim\", of this magnifier."},{"name":"size","type":"Size","required":true,"desc":"The size of this magnifier."},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"The border radius of this magnifier."},{"name":"inOutAnimation","type":"Animation?","desc":"This [RawMagnifier]'s controller."},{"name":"additionalFocalPointOffset","type":"Offset","required":true,"desc":"Any additional focal point offset, applied over the regular focal point offset defined in [kMagnifierAboveFocalPoint]."},{"name":"magnificationScale","type":"double","required":true,"desc":"The magnification scale for the magnifier."}],"id":389,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_zh-CN.json new file mode 100644 index 000000000..41fdf800c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoMagnifier","path":"/src/cupertino/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":"用于在用户手指可能阻挡兴趣点(如选择手柄)的情况下放大文本的 [RawMagnifier]。","fields":[{"name":"shadows","type":"List","required":true,"desc":"[Magnifier] 投射的阴影列表。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"是否以及如何裁剪在放大镜内渲染的 [shadows]。"},{"name":"borderSide","type":"BorderSide","required":true,"desc":"此放大镜的边框或\\"},{"name":"size","type":"Size","required":true,"desc":"此放大镜的大小。"},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"此放大镜的边框半径。"},{"name":"inOutAnimation","type":"Animation?","desc":"此 [RawMagnifier] 的控制器。"},{"name":"additionalFocalPointOffset","type":"Offset","required":true,"desc":"任何附加的焦点偏移量,应用于 [kMagnifierAboveFocalPoint] 中定义的常规焦点偏移量之上。"},{"name":"magnificationScale","type":"double","required":true,"desc":"放大镜的放大比例。"}],"id":389,"localName":"CupertinoMagnifier","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_en-US.json new file mode 100644 index 000000000..56cd626a1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoNavigationBar","path":"/src/cupertino/nav_bar.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-styled navigation bar.","fields":[{"name":"largeTitle","type":"Widget?","desc":"The navigation bar's title, when using [CupertinoNavigationBar.large]."},{"name":"leading","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.leading} Widget to place at the start of the navigation bar. Normally a back button for a normal page or a cancel button for full page dialogs."},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.automaticallyImplyLeading} Controls whether we should try to imply the leading widget if null."},{"name":"automaticallyImplyMiddle","type":"bool","required":true,"desc":"Controls whether we should try to imply the middle widget if null."},{"name":"previousPageTitle","type":"String?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.previousPageTitle} Manually specify the previous route's title when automatically implying the leading back button."},{"name":"middle","type":"Widget?","desc":"The navigation bar's default title."},{"name":"trailing","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.trailing} Widget to place at the end of the navigation bar. Normally additional actions taken on the page such as a search or edit function. {@endtemplate}"},{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.backgroundColor} The background color of the navigation bar. If it contains transparency, the tab bar will automatically produce a blurring effect to the content behind it. This behavior can be disabled by setting [enableBackgroundFilterBlur] to false."},{"name":"automaticBackgroundVisibility","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.automaticBackgroundVisibility} Whether the navigation bar appears transparent when no content is scrolled under."},{"name":"brightness","type":"Brightness?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.brightness} The brightness of the specified [backgroundColor]."},{"name":"padding","type":"EdgeInsetsDirectional?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.padding} Padding for the contents of the navigation bar."},{"name":"border","type":"Border?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.border} The border of the navigation bar. By default renders a single pixel bottom border side."},{"name":"transitionBetweenRoutes","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.transitionBetweenRoutes} Whether to transition between navigation bars."},{"name":"enableBackgroundFilterBlur","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.enableBackgroundFilterBlur} Whether to have a blur effect when a non-opaque background color is used."},{"name":"heroTag","type":"Object","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.heroTag} Tag for the navigation bar's Hero widget if [transitionBetweenRoutes] is true."},{"name":"bottom","type":"PreferredSizeWidget?","desc":"A widget to place at the bottom of the navigation bar."}],"id":62,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoNavigationBar","desc":["【leading】: Left component 【Widget】","【middle】: Middle component 【Widget】","【trailing】: Trailing component 【Widget】","【backgroundColor】: Background color 【Color】","【padding】: Padding 【EdgeInsetsDirectional】","【border】: Border 【Border】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_zh-CN.json new file mode 100644 index 000000000..58f40bf70 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoNavigationBar","path":"/src/cupertino/nav_bar.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的导航栏。","fields":[{"name":"largeTitle","type":"Widget?","desc":"使用 [CupertinoNavigationBar.large] 时导航栏的标题。"},{"name":"leading","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.leading} 放置在导航栏开始处的小部件。通常是普通页面的返回按钮或全页对话框的取消按钮。"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.automaticallyImplyLeading} 控制如果为 null,我们是否应该尝试暗示前导小部件。"},{"name":"automaticallyImplyMiddle","type":"bool","required":true,"desc":"控制如果为 null,我们是否应该尝试暗示中间小部件。"},{"name":"previousPageTitle","type":"String?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.previousPageTitle} 在自动暗示前导返回按钮时手动指定上一个路由的标题。"},{"name":"middle","type":"Widget?","desc":"导航栏的默认标题。"},{"name":"trailing","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.trailing} 放置在导航栏末尾的小部件。通常是在页面上执行的附加操作,如搜索或编辑功能。{@endtemplate}"},{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.backgroundColor} 导航栏的背景颜色。如果包含透明度,标签栏将自动对其后面的内容产生模糊效果。可以通过将 [enableBackgroundFilterBlur] 设置为 false 来禁用此行为。"},{"name":"automaticBackgroundVisibility","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.automaticBackgroundVisibility} 当没有内容滚动到下方时,导航栏是否显示为透明。"},{"name":"brightness","type":"Brightness?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.brightness} 指定 [backgroundColor] 的亮度。"},{"name":"padding","type":"EdgeInsetsDirectional?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.padding} 导航栏内容的内边距。"},{"name":"border","type":"Border?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.border} 导航栏的边框。默认渲染单像素底部边框。"},{"name":"transitionBetweenRoutes","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.transitionBetweenRoutes} 是否在导航栏之间过渡。"},{"name":"enableBackgroundFilterBlur","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.enableBackgroundFilterBlur} 当使用非不透明背景颜色时是否具有模糊效果。"},{"name":"heroTag","type":"Object","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.heroTag} 如果 [transitionBetweenRoutes] 为 true,导航栏 Hero 小部件的标签。"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"放置在导航栏底部的小部件。"}],"id":62,"localName":"iOS导航","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoNavigationBar基本用法","desc":["【leading】 : 左侧组件 【Widget】","【middle】 : 中间组件 【Widget】","【trailing】 : 尾部组件 【Widget】","【backgroundColor】 : 背景色 【Color】","【padding】 : 内边距 【EdgeInsetsDirectional】","【border】 : 边线 【Border】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_en-US.json new file mode 100644 index 000000000..cdc390a26 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoNavigationBarBackButton","path":"/src/cupertino/nav_bar.dart","parents":["StatelessWidget","Widget"],"desc":" A nav bar back button typically used in [CupertinoNavigationBar].","fields":[{"name":"color","type":"Color?","desc":"The [Color] of the back button."},{"name":"previousPageTitle","type":"String?","desc":"An override for showing the previous route's title. If null, it will be automatically derived from [CupertinoPageRoute.title] if the current and previous routes are both [CupertinoPageRoute]s."},{"name":"onPressed","type":"VoidCallback?","desc":"An override callback to perform instead of the default behavior which is to pop the [Navigator]."}],"id":218,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Back Button","desc":["【onPressed】: Click event 【VoidCallback】","【color】: Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_zh-CN.json new file mode 100644 index 000000000..6d81c4e48 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoNavigationBarBackButton","path":"/src/cupertino/nav_bar.dart","parents":["StatelessWidget","Widget"],"desc":"通常在 [CupertinoNavigationBar] 中使用的导航栏返回按钮。","fields":[{"name":"color","type":"Color?","desc":"返回按钮的 [Color]。"},{"name":"previousPageTitle","type":"String?","desc":"显示上一个路由标题的覆盖。如果为 null,如果当前和上一个路由都是 [CupertinoPageRoute],它将自动从 [CupertinoPageRoute.title] 派生。"},{"name":"onPressed","type":"VoidCallback?","desc":"执行的覆盖回调,而不是默认行为,即弹出 [Navigator]。"}],"id":218,"localName":"iOS风格返回按钮","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"返回按钮基本使用","desc":["【onPressed】 : 点击事件 【VoidCallback】","【color】: 颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_en-US.json new file mode 100644 index 000000000..0646ff05f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoPageScaffold","path":"/src/cupertino/page_scaffold.dart","parents":["StatefulWidget","Widget"],"desc":" Implements a single iOS application page's layout.","fields":[{"name":"navigationBar","type":"ObstructingPreferredSizeWidget?","desc":"The [navigationBar], typically a [CupertinoNavigationBar], is drawn at the top of the screen."},{"name":"child","type":"Widget","required":true,"desc":"Widget to show in the main content area."},{"name":"backgroundColor","type":"Color?","desc":"The color of the widget that underlies the entire scaffold."},{"name":"resizeToAvoidBottomInset","type":"bool","required":true,"desc":"Whether the [child] should size itself to avoid the window's bottom inset."}],"id":157,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoPageScaffold","desc":["【child】 : Content 【Widget】","【backgroundColor】 : Background Color 【Color】","【navigationBar】 : Header 【ObstructingPreferredSizeWidget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_zh-CN.json new file mode 100644 index 000000000..206938a4a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoPageScaffold","path":"/src/cupertino/page_scaffold.dart","parents":["StatefulWidget","Widget"],"desc":"实现单个 iOS 应用程序页面的布局。","fields":[{"name":"navigationBar","type":"ObstructingPreferredSizeWidget?","desc":"[navigationBar],通常是 [CupertinoNavigationBar],绘制在屏幕顶部。"},{"name":"child","type":"Widget","required":true,"desc":"在主内容区域显示的小部件。"},{"name":"backgroundColor","type":"Color?","desc":"整个脚手架下方小部件的颜色。"},{"name":"resizeToAvoidBottomInset","type":"bool","required":true,"desc":"[child] 是否应调整自身大小以避免窗口的底部插入。"}],"id":157,"localName":"iOS页面脚手架","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoPageScaffold基本用法","desc":["【child】 : 内容 【Widget】","【backgroundColor】 : 背景色 【Color】","【navigationBar】 : 头部 【ObstructingPreferredSizeWidget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_en-US.json new file mode 100644 index 000000000..ca3567342 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoPageScaffoldBackgroundColor","path":"/src/cupertino/page_scaffold.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" [InheritedWidget] indicating what the current scaffold background color is for its children.","fields":[{"name":"color","type":"Color","required":true,"desc":"The background color defined in [CupertinoPageScaffold]."}],"id":390,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_zh-CN.json new file mode 100644 index 000000000..adf20954e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoPageScaffoldBackgroundColor","path":"/src/cupertino/page_scaffold.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"[InheritedWidget] 指示其子项的当前脚手架背景颜色。","fields":[{"name":"color","type":"Color","required":true,"desc":"在 [CupertinoPageScaffold] 中定义的背景颜色。"}],"id":390,"localName":"CupertinoPageScaffoldBackgroundColor","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_en-US.json new file mode 100644 index 000000000..a5574693f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoPageTransition","path":"/src/cupertino/route.dart","parents":["StatefulWidget","Widget"],"desc":" Provides an iOS-style page transition animation.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"* `primaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when this screen is being pushed."},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"* `secondaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when another screen is being pushed on top of this one."},{"name":"linearTransition","type":"bool","required":true,"desc":"* `linearTransition` is whether to perform the transitions linearly. Used to precisely track back gesture drags."}],"id":216,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to CupertinoPageTransition","desc":["【child】 : Child widget 【Widget】","【linearTransition】 : Whether to use linear transition 【bool】","【primaryRouteAnimation】 : Primary route animation 【Animation】","【secondaryRouteAnimation】 : Secondary route animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_zh-CN.json new file mode 100644 index 000000000..972782f65 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoPageTransition","path":"/src/cupertino/route.dart","parents":["StatefulWidget","Widget"],"desc":"提供 iOS 风格的页面过渡动画。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"* `primaryRouteAnimation` 是推送此屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"* `secondaryRouteAnimation` 是在此屏幕之上推送另一个屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"linearTransition","type":"bool","required":true,"desc":"* `linearTransition` 是否线性执行过渡。用于精确跟踪返回手势拖动。"}],"id":216,"localName":"页面过渡变换","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoPageTransition 介绍","desc":["【child】 : 子组件 【Widget】","【linearTransition】 : 是否线性转换 【bool】","【primaryRouteAnimation】 : 初始路由动画 【Animation】","【secondaryRouteAnimation】 : 第二路由动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_en-US.json new file mode 100644 index 000000000..c5b30bc68 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoPicker","path":"/src/cupertino/picker.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-styled picker.","fields":[{"name":"diameterRatio","type":"double","required":true,"desc":"Relative ratio between this picker's height and the simulated cylinder's diameter."},{"name":"backgroundColor","type":"Color?","desc":"Background color behind the children."},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"scrollController","type":"FixedExtentScrollController?","desc":"A [FixedExtentScrollController] to read and control the current item, and to set the initial item."},{"name":"itemExtent","type":"double","required":true,"desc":"{@template flutter.cupertino.picker.itemExtent} The uniform height of all children."},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"onSelectedItemChanged","type":"ValueChanged?","desc":"An option callback when the currently centered item changes."},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"A delegate that lazily instantiates children."},{"name":"selectionOverlay","type":"Widget?","desc":"A widget overlaid on the picker to highlight the currently selected entry."}],"id":139,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoPicker","desc":["【children】 : List of child components 【List】","【offAxisFraction】 : Axis offset rate 【double】","【squeeze】 : Squeeze rate 【double】","【diameterRatio】 : Ratio of height to cylinder diameter 【double】","【itemExtent】 : Spacing 【double】","【backgroundColor】 : Background color 【Color】","【onSelectedItemChanged】 : Selected event 【Function(int)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_zh-CN.json new file mode 100644 index 000000000..8f1691ebb --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoPicker","path":"/src/cupertino/picker.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的选择器。","fields":[{"name":"diameterRatio","type":"double","required":true,"desc":"此选择器高度与模拟圆柱体直径之间的相对比率。"},{"name":"backgroundColor","type":"Color?","desc":"子项后面的背景颜色。"},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"scrollController","type":"FixedExtentScrollController?","desc":"用于读取和控制当前项目以及设置初始项目的 [FixedExtentScrollController]。"},{"name":"itemExtent","type":"double","required":true,"desc":"{@template flutter.cupertino.picker.itemExtent} 所有子项的统一高度。"},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"onSelectedItemChanged","type":"ValueChanged?","desc":"当前居中项目更改时的可选回调。"},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"延迟实例化子项的委托。"},{"name":"selectionOverlay","type":"Widget?","desc":"覆盖在选择器上以突出显示当前选定条目的小部件。"}],"id":139,"localName":"iOS选择器","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoPicker基本使用","desc":["【children】 : 子组件列表 【List】","【offAxisFraction】 : 轴偏移率 【double】","【squeeze】 : 挤压率 【double】","【diameterRatio】 : 高与圆柱直径比率 【double】","【itemExtent】 : 间距 【double】","【backgroundColor】 : 背景色 【Color】","【onSelectedItemChanged】 : 选中事件 【Function(int)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_en-US.json new file mode 100644 index 000000000..8bcb992d7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoPickerDefaultSelectionOverlay","path":"/src/cupertino/picker.dart","parents":["StatelessWidget","Widget"],"desc":" A default selection overlay for [CupertinoPicker]s.","fields":[{"name":"capStartEdge","type":"bool","required":true,"desc":"Whether to use the default use rounded corners and margin on the start side."},{"name":"capEndEdge","type":"bool","required":true,"desc":"Whether to use the default use rounded corners and margin on the end side."},{"name":"background","type":"Color","required":true,"desc":"The color to fill in the background of the [CupertinoPickerDefaultSelectionOverlay]. It Support for use [CupertinoDynamicColor]."}],"id":391,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_zh-CN.json new file mode 100644 index 000000000..f8975b4da --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoPickerDefaultSelectionOverlay","path":"/src/cupertino/picker.dart","parents":["StatelessWidget","Widget"],"desc":"[CupertinoPicker] 的默认选择覆盖层。","fields":[{"name":"capStartEdge","type":"bool","required":true,"desc":"是否在开始侧使用默认的圆角和边距。"},{"name":"capEndEdge","type":"bool","required":true,"desc":"是否在结束侧使用默认的圆角和边距。"},{"name":"background","type":"Color","required":true,"desc":"填充 [CupertinoPickerDefaultSelectionOverlay] 背景的颜色。支持使用 [CupertinoDynamicColor]。"}],"id":391,"localName":"CupertinoPickerDefaultSelectionOverlay","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_en-US.json new file mode 100644 index 000000000..31ad87e91 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoPopupSurface","path":"/src/cupertino/dialog.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-style component for creating modal overlays like dialogs and action sheets.","fields":[{"name":"blurSigma","type":"double","required":true,"desc":"The strength of the gaussian blur applied to the area beneath this surface."},{"name":"isSurfacePainted","type":"bool","required":true,"desc":"Whether or not to paint a translucent white on top of this surface's blurred background. [isSurfacePainted] should be true for a typical popup that contains content without any dividers. A popup that requires dividers should set [isSurfacePainted] to false and then paint its own surface area."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":217,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoPopupSurface Usage","desc":["【isSurfacePainted】: Whether to paint white 【bool】","【child】: Child component 【Widget】","Test effect: left isSurfacePainted = false, right isSurfacePainted = true"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_zh-CN.json new file mode 100644 index 000000000..8b9b38173 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoPopupSurface","path":"/src/cupertino/dialog.dart","parents":["StatelessWidget","Widget"],"desc":"用于创建对话框和操作表单等模态覆盖层的 iOS 风格组件。","fields":[{"name":"blurSigma","type":"double","required":true,"desc":"应用于此表面下方区域的高斯模糊强度。"},{"name":"isSurfacePainted","type":"bool","required":true,"desc":"是否在此表面的模糊背景之上绘制半透明白色。对于包含没有任何分隔符内容的典型弹出窗口,[isSurfacePainted] 应为 true。需要分隔符的弹出窗口应将 [isSurfacePainted] 设置为 false,然后绘制自己的表面区域。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":217,"localName":"模糊弹出层","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoPopupSurface 使用","desc":["【isSurfacePainted】 : 是否绘白 【bool】","【child】 : 子组件 【Widget】","测试效果左侧 isSurfacePainted = false,右侧 isSurfacePainted = true"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_en-US.json new file mode 100644 index 000000000..7f5d2e6ab --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoRadio","path":"/src/cupertino/radio.dart","parents":["StatefulWidget","Widget"],"desc":" A macOS-style radio button.","fields":[{"name":"value","type":"T","required":true,"desc":"The value represented by this radio button."},{"name":"groupValue","type":"T?","desc":"The currently selected value for a group of radio buttons."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user selects this [CupertinoRadio] button."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"toggleable","type":"bool","required":true,"desc":"Set to true if this radio button is allowed to be returned to an indeterminate state by selecting it again when selected."},{"name":"useCheckmarkStyle","type":"bool","required":true,"desc":"Controls whether the radio displays in a checkbox style or the default iOS radio style."},{"name":"activeColor","type":"Color?","desc":"The color to use when this radio button is selected."},{"name":"inactiveColor","type":"Color?","desc":"The color to use when this radio button is not selected."},{"name":"fillColor","type":"Color?","desc":"The color that fills the inner circle of the radio button when selected."},{"name":"focusColor","type":"Color?","desc":"The color for the radio's border when it has the input focus."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"}],"id":240,"lever":4,"family":1,"linkIds":[19,45],"nodes":[{"file":"node1.dart","name":"CupertinoRadio Usage","desc":["【value】: Radio button value 【T】","【groupValue】: Current matching value 【T】","【onChanged】: Callback when changed 【Function(T)】"]},{"file":"node2.dart","name":"CupertinoRadio Colors","desc":["【activeColor】: Active background color 【Color?】","【fillColor】: Fill color 【Color?】","【inactiveColor】: Inactive background color 【Color?】","【focusColor】: Focus color 【Color?】","【mouseCursor】: Mouse cursor style 【MouseCursor?】"]},{"file":"node3.dart","name":"Toggle Support","desc":["【toggleable】: Whether toggle is supported 【bool】","toggleable defaults to false. When set to true, clicking an active radio button will call back null data, supporting the need for toggling between selected and unselected states."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_zh-CN.json new file mode 100644 index 000000000..d285c83cc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoRadio","path":"/src/cupertino/radio.dart","parents":["StatefulWidget","Widget"],"desc":"macOS 风格的单选按钮。","fields":[{"name":"value","type":"T","required":true,"desc":"此单选按钮表示的值。"},{"name":"groupValue","type":"T?","desc":"一组单选按钮的当前选定值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户选择此 [CupertinoRadio] 按钮时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"toggleable","type":"bool","required":true,"desc":"如果允许此单选按钮在选中时再次选择以返回到不确定状态,则设置为 true。"},{"name":"useCheckmarkStyle","type":"bool","required":true,"desc":"控制单选按钮是以复选框样式显示还是以默认 iOS 单选样式显示。"},{"name":"activeColor","type":"Color?","desc":"选择此单选按钮时使用的颜色。"},{"name":"inactiveColor","type":"Color?","desc":"未选择此单选按钮时使用的颜色。"},{"name":"fillColor","type":"Color?","desc":"选择时填充单选按钮内圆的颜色。"},{"name":"focusColor","type":"Color?","desc":"单选按钮具有输入焦点时其边框的颜色。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"}],"id":240,"localName":"单选钮·macOS风格","lever":4,"family":1,"linkIds":[19,45],"nodes":[{"file":"node1.dart","name":"CupertinoRadio 使用","desc":["【value】 : 选钮值 【T】","【groupValue】 : 当前匹配值 【T】","【onChanged】 : 改变时回调 【Function(T)】"]},{"file":"node2.dart","name":"CupertinoRadio 颜色","desc":["【activeColor】 : 激活背景颜色 【Color?】","【fillColor】 : 填充 【Color?】","【inactiveColor】 : 未激活背景颜色 【Color?】","【focusColor】 : 聚焦色 【Color?】","【mouseCursor】 : 鼠标指针样式 【MouseCursor?】"]},{"file":"node3.dart","name":"是否支持切换","desc":["【toggleable】 : 是否支持切换 【bool】","toggleable 默认为 false, 为 true 时,点击激活的选钮,会回调 null 数据,以此支持选中和非选择切换需求。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_en-US.json new file mode 100644 index 000000000..44565efd6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoScrollbar","path":"/src/cupertino/scrollbar.dart","parents":["RawScrollbar","StatefulWidget","Widget"],"desc":" An iOS style scrollbar.","fields":[{"name":"thicknessWhileDragging","type":"double","required":true,"desc":"The thickness of the scrollbar when it's being dragged by the user."},{"name":"radiusWhileDragging","type":"Radius","required":true,"desc":"The radius of the scrollbar edges when the scrollbar is being dragged by the user."}],"id":195,"lever":3,"family":1,"linkIds":[194,164,162],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoScrollbar","desc":["【child】 : Child widget 【Widget】","【controller】 : Controller 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_zh-CN.json new file mode 100644 index 000000000..3e5e577a2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoScrollbar","path":"/src/cupertino/scrollbar.dart","parents":["RawScrollbar","StatefulWidget","Widget"],"desc":"iOS 风格的滚动条。","fields":[{"name":"thicknessWhileDragging","type":"double","required":true,"desc":"用户拖动滚动条时滚动条的厚度。"},{"name":"radiusWhileDragging","type":"Radius","required":true,"desc":"用户拖动滚动条时滚动条边缘的半径。"}],"id":195,"localName":"iOS滑动指示栏","lever":3,"family":1,"linkIds":[194,164,162],"nodes":[{"file":"node1_base.dart","name":"CupertinoScrollbar基本使用","desc":["【child】 : 子组件 【Widget】","【controller】 : 控制器 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_en-US.json new file mode 100644 index 000000000..2f50698c7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoSearchTextField","path":"/src/cupertino/search_field.dart","parents":["StatefulWidget","Widget"],"desc":" A [CupertinoTextField] that mimics the look and behavior of UIKit's `UISearchTextField`.","fields":[{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited."},{"name":"onChanged","type":"ValueChanged?","desc":"Invoked upon user input."},{"name":"onSubmitted","type":"ValueChanged?","desc":"Invoked upon keyboard submission."},{"name":"style","type":"TextStyle?","desc":"Allows changing the style of the text."},{"name":"placeholder","type":"String?","desc":"A hint placeholder text that appears when the text entry is empty."},{"name":"placeholderStyle","type":"TextStyle?","desc":"Sets the style of the placeholder of the text field."},{"name":"decoration","type":"BoxDecoration?","desc":"Sets the decoration for the text field."},{"name":"backgroundColor","type":"Color?","desc":"Set the [decoration] property's background color."},{"name":"borderRadius","type":"BorderRadius?","desc":"Sets the [decoration] property's border radius."},{"name":"keyboardType","type":"TextInputType?","desc":"The keyboard type for this search field."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"Sets the padding insets for the text and placeholder."},{"name":"itemColor","type":"Color","required":true,"desc":"Sets the color for the suffix and prefix icons."},{"name":"itemSize","type":"double","required":true,"desc":"Sets the base icon size for the suffix and prefix icons."},{"name":"prefixInsets","type":"EdgeInsetsGeometry","required":true,"desc":"Sets the padding insets for the suffix."},{"name":"prefixIcon","type":"Widget","required":true,"desc":"Sets a prefix widget."},{"name":"suffixInsets","type":"EdgeInsetsGeometry","required":true,"desc":"Sets the padding insets for the prefix."},{"name":"suffixIcon","type":"Icon","required":true,"desc":"Sets the suffix widget's icon."},{"name":"suffixMode","type":"OverlayVisibilityMode","required":true,"desc":"Dictates when the X-Mark (suffix) should be visible."},{"name":"onSuffixTap","type":"VoidCallback?","desc":"Sets the X-Mark (suffix) action."},{"name":"restorationId","type":"String?","desc":"{@macro flutter.material.textfield.restorationId}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"onTap","type":"VoidCallback?","desc":"{@macro flutter.material.textfield.onTap}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartQuotesType","type":"SmartQuotesType?","desc":"Whether to allow the platform to automatically format quotes."},{"name":"smartDashesType","type":"SmartDashesType?","desc":"Whether to allow the platform to automatically format dashes."},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"enabled","type":"bool?","desc":"Disables the text field when false."},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius","required":true,"desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"The color to use when painting the cursor."}],"id":392,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_zh-CN.json new file mode 100644 index 000000000..1b8af9f86 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoSearchTextField","path":"/src/cupertino/search_field.dart","parents":["StatefulWidget","Widget"],"desc":"模仿 UIKit 的 `UISearchTextField` 外观和行为的 [CupertinoTextField]。","fields":[{"name":"controller","type":"TextEditingController?","desc":"控制正在编辑的文本。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户输入时调用。"},{"name":"onSubmitted","type":"ValueChanged?","desc":"键盘提交时调用。"},{"name":"style","type":"TextStyle?","desc":"允许更改文本的样式。"},{"name":"placeholder","type":"String?","desc":"文本输入为空时出现的提示占位符文本。"},{"name":"placeholderStyle","type":"TextStyle?","desc":"设置文本字段占位符的样式。"},{"name":"decoration","type":"BoxDecoration?","desc":"设置文本字段的装饰。"},{"name":"backgroundColor","type":"Color?","desc":"设置 [decoration] 属性的背景颜色。"},{"name":"borderRadius","type":"BorderRadius?","desc":"设置 [decoration] 属性的边框半径。"},{"name":"keyboardType","type":"TextInputType?","desc":"此搜索字段的键盘类型。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"设置文本和占位符的内边距插入。"},{"name":"itemColor","type":"Color","required":true,"desc":"设置后缀和前缀图标的颜色。"},{"name":"itemSize","type":"double","required":true,"desc":"设置后缀和前缀图标的基本图标大小。"},{"name":"prefixInsets","type":"EdgeInsetsGeometry","required":true,"desc":"设置后缀的内边距插入。"},{"name":"prefixIcon","type":"Widget","required":true,"desc":"设置前缀小部件。"},{"name":"suffixInsets","type":"EdgeInsetsGeometry","required":true,"desc":"设置前缀的内边距插入。"},{"name":"suffixIcon","type":"Icon","required":true,"desc":"设置后缀小部件的图标。"},{"name":"suffixMode","type":"OverlayVisibilityMode","required":true,"desc":"决定 X 标记(后缀)何时应该可见。"},{"name":"onSuffixTap","type":"VoidCallback?","desc":"设置 X 标记(后缀)操作。"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.material.textfield.restorationId}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"onTap","type":"VoidCallback?","desc":"{@macro flutter.material.textfield.onTap}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartQuotesType","type":"SmartQuotesType?","desc":"是否允许平台自动格式化引号。"},{"name":"smartDashesType","type":"SmartDashesType?","desc":"是否允许平台自动格式化破折号。"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"enabled","type":"bool?","desc":"为 false 时禁用文本字段。"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius","required":true,"desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"绘制光标时使用的颜色。"}],"id":392,"localName":"CupertinoSearchTextField","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_en-US.json new file mode 100644 index 000000000..0e464a279 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoSegmentedControl","path":"/src/cupertino/segmented_control.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style segmented control.","fields":[{"name":"children","type":"Map","required":true,"desc":"The identifying keys and corresponding widget values in the segmented control."},{"name":"groupValue","type":"T?","desc":"The identifier of the widget that is currently selected."},{"name":"onValueChanged","type":"ValueChanged","required":true,"desc":"The callback that is called when a new option is tapped."},{"name":"unselectedColor","type":"Color?","desc":"The color used to fill the backgrounds of unselected widgets and as the text color of the selected widget."},{"name":"selectedColor","type":"Color?","desc":"The color used to fill the background of the selected widget and as the text color of unselected widgets."},{"name":"borderColor","type":"Color?","desc":"The color used as the border around each widget."},{"name":"pressedColor","type":"Color?","desc":"The color used to fill the background of the widget the user is temporarily interacting with through a long press or drag."},{"name":"disabledColor","type":"Color?","desc":"The color used to fill the background of the segment when it is disabled."},{"name":"disabledTextColor","type":"Color?","desc":"The color used for the text of the segment when it is disabled."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The CupertinoSegmentedControl will be placed inside this padding."},{"name":"disabledChildren","type":"Set","required":true,"desc":"The set of identifying keys that correspond to the segments that should be disabled."}],"id":262,"lever":4,"family":1,"linkIds":[33,256],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of iOS Tabs","desc":["【children】: Component Map 【Map】","【onValueChanged】: Value Change Callback 【ValueChanged】","【groupValue】: Selected Value 【T】","【padding】: Padding 【EdgeInsetsGeometry】"]},{"file":"node2_color.dart","name":"Colors of CupertinoSegmentedControl","desc":["【unselectedColor】: Unselected Color 【Color】","【selectedColor】: Selected Color 【Color】","【pressedColor】: Pressed Color 【Color】","【borderColor】: Border Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_zh-CN.json new file mode 100644 index 000000000..4a544411f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoSegmentedControl","path":"/src/cupertino/segmented_control.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的分段控件。","fields":[{"name":"children","type":"Map","required":true,"desc":"分段控件中的标识键和相应的小部件值。"},{"name":"groupValue","type":"T?","desc":"当前选定的小部件的标识符。"},{"name":"onValueChanged","type":"ValueChanged","required":true,"desc":"点击新选项时调用的回调。"},{"name":"unselectedColor","type":"Color?","desc":"用于填充未选中小部件背景和作为选中小部件文本颜色的颜色。"},{"name":"selectedColor","type":"Color?","desc":"用于填充选中小部件背景和作为未选中小部件文本颜色的颜色。"},{"name":"borderColor","type":"Color?","desc":"用作每个小部件周围边框的颜色。"},{"name":"pressedColor","type":"Color?","desc":"用于填充用户通过长按或拖动临时交互的小部件背景的颜色。"},{"name":"disabledColor","type":"Color?","desc":"段被禁用时用于填充段背景的颜色。"},{"name":"disabledTextColor","type":"Color?","desc":"段被禁用时用于段文本的颜色。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"CupertinoSegmentedControl 将放置在此内边距内。"},{"name":"disabledChildren","type":"Set","required":true,"desc":"对应于应被禁用的段的标识键集合。"}],"id":262,"localName":"iOS多栏切换","lever":4,"family":1,"linkIds":[33,256],"nodes":[{"file":"node1_base.dart","name":"iOS页签基本使用","desc":["【children】 : 组件Map 【Map】","【onValueChanged】 : 值改变回调 【ValueChanged】","【groupValue】 : 选中值 【T】","【padding】 : 内边距 【EdgeInsetsGeometry】"]},{"file":"node2_color.dart","name":"CupertinoSegmentedControl的颜色","desc":["【unselectedColor】 : 未选中色 【Color】","【selectedColor】 : 选中色 【Color】","【pressedColor】 : 按下色 【Color】","【borderColor】 : 边线色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_en-US.json new file mode 100644 index 000000000..9c138db88 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoSheetTransition","path":"/src/cupertino/sheet.dart","parents":["StatefulWidget","Widget"],"desc":" Provides an iOS-style sheet transition.","fields":[{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"`primaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when this screen is being pushed."},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"`secondaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when another screen is being pushed on top of this one."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"linearTransition","type":"bool","required":true,"desc":"Whether to perform the transition linearly."}],"id":393,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_zh-CN.json new file mode 100644 index 000000000..253998c5d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoSheetTransition","path":"/src/cupertino/sheet.dart","parents":["StatefulWidget","Widget"],"desc":"提供 iOS 风格的表单过渡。","fields":[{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"`primaryRouteAnimation` 是推送此屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"`secondaryRouteAnimation` 是在此屏幕之上推送另一个屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"linearTransition","type":"bool","required":true,"desc":"是否线性执行过渡。"}],"id":393,"localName":"CupertinoSheetTransition","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_en-US.json new file mode 100644 index 000000000..bd999c11e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoSlider","path":"/src/cupertino/slider.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style slider.","fields":[{"name":"value","type":"double","required":true,"desc":"The currently selected value for this slider."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user selects a new value for the slider."},{"name":"onChangeStart","type":"ValueChanged?","desc":"Called when the user starts selecting a new value for the slider."},{"name":"onChangeEnd","type":"ValueChanged?","desc":"Called when the user is done selecting a new value for the slider."},{"name":"min","type":"double","required":true,"desc":"The minimum value the user can select."},{"name":"max","type":"double","required":true,"desc":"The maximum value the user can select."},{"name":"divisions","type":"int?","desc":"The number of discrete divisions."},{"name":"activeColor","type":"Color?","desc":"The color to use for the portion of the slider that has been selected."},{"name":"thumbColor","type":"Color","required":true,"desc":"The color to use for the thumb of the slider."}],"id":43,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoSlider","desc":["【value】: value 【double】","【min】: minimum value 【double】","【max】: maximum value 【double】","【activeColor】: active color 【Color】","【thumbColor】: thumb color 【Color】","【divisions】: number of divisions 【int】","【onChangeStart】: callback when sliding starts 【Function(double)】","【onChangeEnd】: callback when sliding ends 【Function(double)】","【onChanged】: callback when value changes 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_zh-CN.json new file mode 100644 index 000000000..a60be95d9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoSlider","path":"/src/cupertino/slider.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的滑块。","fields":[{"name":"value","type":"double","required":true,"desc":"此滑块当前选定的值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户为滑块选择新值时调用。"},{"name":"onChangeStart","type":"ValueChanged?","desc":"用户开始为滑块选择新值时调用。"},{"name":"onChangeEnd","type":"ValueChanged?","desc":"用户完成为滑块选择新值时调用。"},{"name":"min","type":"double","required":true,"desc":"用户可以选择的最小值。"},{"name":"max","type":"double","required":true,"desc":"用户可以选择的最大值。"},{"name":"divisions","type":"int?","desc":"离散分割的数量。"},{"name":"activeColor","type":"Color?","desc":"用于滑块已选择部分的颜色。"},{"name":"thumbColor","type":"Color","required":true,"desc":"用于滑块拇指的颜色。"}],"id":43,"localName":"iOS滑块","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoSlider基本使用","desc":["【value】 : 数值 【double】","【min】 : 最小值 【double】","【max】 : 最大值 【double】","【activeColor】 : 激活颜色 【Color】","【thumbColor】 : 圆形颜色 【Color】","【divisions】 : 分段数 【int】","【onChangeStart】 : 开始滑动回调 【Function(double)】","【onChangeEnd】 : 滑动结束回调 【Function(double)】","【onChanged】 : 改变时回调 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_en-US.json new file mode 100644 index 000000000..65ee5d06c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoSlidingSegmentedControl","path":"/src/cupertino/sliding_segmented_control.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS 13 style segmented control.","fields":[{"name":"children","type":"Map","required":true,"desc":"The identifying keys and corresponding widget values in the segmented control."},{"name":"disabledChildren","type":"Set","required":true,"desc":"The set of identifying keys that correspond to the segments that should be disabled."},{"name":"groupValue","type":"T?","desc":"The identifier of the widget that is currently selected."},{"name":"onValueChanged","type":"ValueChanged","required":true,"desc":"The callback that is called when a new option is tapped."},{"name":"backgroundColor","type":"Color","required":true,"desc":"The color used to paint the rounded rect behind the [children] and the separators."},{"name":"proportionalWidth","type":"bool","required":true,"desc":"Determine whether segments have proportional widths based on their content."},{"name":"thumbColor","type":"Color","required":true,"desc":"The color used to paint the interior of the thumb that appears behind the currently selected item."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the [children]."}],"id":256,"lever":3,"family":1,"linkIds":[33,262],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of iOS Sliding Tabs","desc":["【children】: Component Map 【Map】","【onValueChanged】: Value Change Callback 【ValueChanged】","【groupValue】: Selected Value 【T】","【thumbColor】: Selected Color 【Color】","【backgroundColor】: Background Color 【Color】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_zh-CN.json new file mode 100644 index 000000000..2a3336655 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoSlidingSegmentedControl","path":"/src/cupertino/sliding_segmented_control.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 13 风格的分段控件。","fields":[{"name":"children","type":"Map","required":true,"desc":"分段控件中的标识键和相应的小部件值。"},{"name":"disabledChildren","type":"Set","required":true,"desc":"对应于应被禁用的段的标识键集合。"},{"name":"groupValue","type":"T?","desc":"当前选定的小部件的标识符。"},{"name":"onValueChanged","type":"ValueChanged","required":true,"desc":"点击新选项时调用的回调。"},{"name":"backgroundColor","type":"Color","required":true,"desc":"用于绘制 [children] 和分隔符后面的圆角矩形的颜色。"},{"name":"proportionalWidth","type":"bool","required":true,"desc":"确定段是否根据其内容具有比例宽度。"},{"name":"thumbColor","type":"Color","required":true,"desc":"用于绘制出现在当前选定项目后面的拇指内部的颜色。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"插入 [children] 的空间量。"}],"id":256,"localName":"iOS滑动页签","lever":3,"family":1,"linkIds":[33,262],"nodes":[{"file":"node1_base.dart","name":"iOS滑动页签基本使用","desc":["【children】 : 组件Map 【Map】","【onValueChanged】 : 值改变回调 【ValueChanged】","【groupValue】 : 选中值 【T】","【thumbColor】 : 选中色 【Color】","【backgroundColor】 : 背景色 【Color】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_en-US.json new file mode 100644 index 000000000..9aa22a36b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoSliverNavigationBar","path":"/src/cupertino/nav_bar.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-styled navigation bar with iOS-11-style large titles using slivers.","fields":[{"name":"largeTitle","type":"Widget?","desc":"The navigation bar's title."},{"name":"leading","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.leading}"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.automaticallyImplyLeading}"},{"name":"automaticallyImplyTitle","type":"bool","required":true,"desc":"Controls whether we should try to imply the [largeTitle] widget if null."},{"name":"alwaysShowMiddle","type":"bool","required":true,"desc":"Controls whether [middle] widget should always be visible (even in expanded state)."},{"name":"previousPageTitle","type":"String?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.previousPageTitle}"},{"name":"middle","type":"Widget?","desc":"A widget to place in the middle of the static navigation bar instead of the [largeTitle]."},{"name":"trailing","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.trailing}"},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.backgroundColor}"},{"name":"automaticBackgroundVisibility","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.automaticBackgroundVisibility}"},{"name":"enableBackgroundFilterBlur","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.enableBackgroundFilterBlur}"},{"name":"brightness","type":"Brightness?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.brightness}"},{"name":"padding","type":"EdgeInsetsDirectional?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.padding}"},{"name":"border","type":"Border?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.border}"},{"name":"transitionBetweenRoutes","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.transitionBetweenRoutes}"},{"name":"heroTag","type":"Object","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.heroTag}"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"A widget to place at the bottom of the large title or static navigation bar if there is no large title."},{"name":"bottomMode","type":"NavigationBarBottomMode?","desc":"Modes that determine how to display the navigation bar's [bottom], or the search field in a [CupertinoSliverNavigationBar.search]."},{"name":"onSearchableBottomTap","type":"ValueChanged?","desc":"Called when the search field in [CupertinoSliverNavigationBar.search] is tapped, toggling between an active and an inactive search state."},{"name":"stretch","type":"bool","required":true,"desc":"Whether the nav bar should stretch to fill the over-scroll area."},{"name":"searchField","type":"Widget?","desc":"The search field used in [CupertinoSliverNavigationBar.search]."}],"id":302,"lever":2,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Navigation Bar","desc":["【leading】: Left component 【Widget】","【middle】: Middle component 【Widget】","【trailing】: Trailing component 【Widget】","【largeTitle】: Bottom expandable component 【Widget】","【border】: Border 【Border】","【backgroundColor】: Background color 【Color】","【padding】: Padding 【EdgeInsetsDirectional】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_zh-CN.json new file mode 100644 index 000000000..a6b277787 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoSliverNavigationBar","path":"/src/cupertino/nav_bar.dart","parents":["StatefulWidget","Widget"],"desc":"使用 sliver 的 iOS 风格导航栏,具有 iOS-11 风格的大标题。","fields":[{"name":"largeTitle","type":"Widget?","desc":"导航栏的标题。"},{"name":"leading","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.leading}"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.automaticallyImplyLeading}"},{"name":"automaticallyImplyTitle","type":"bool","required":true,"desc":"控制如果为 null,我们是否应该尝试暗示 [largeTitle] 小部件。"},{"name":"alwaysShowMiddle","type":"bool","required":true,"desc":"控制 [middle] 小部件是否应始终可见(即使在展开状态下)。"},{"name":"previousPageTitle","type":"String?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.previousPageTitle}"},{"name":"middle","type":"Widget?","desc":"放置在静态导航栏中间而不是 [largeTitle] 的小部件。"},{"name":"trailing","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.trailing}"},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.backgroundColor}"},{"name":"automaticBackgroundVisibility","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.automaticBackgroundVisibility}"},{"name":"enableBackgroundFilterBlur","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.enableBackgroundFilterBlur}"},{"name":"brightness","type":"Brightness?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.brightness}"},{"name":"padding","type":"EdgeInsetsDirectional?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.padding}"},{"name":"border","type":"Border?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.border}"},{"name":"transitionBetweenRoutes","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.transitionBetweenRoutes}"},{"name":"heroTag","type":"Object","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.heroTag}"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"如果没有大标题,则放置在大标题或静态导航栏底部的小部件。"},{"name":"bottomMode","type":"NavigationBarBottomMode?","desc":"确定如何显示导航栏的 [bottom] 或 [CupertinoSliverNavigationBar.search] 中的搜索字段的模式。"},{"name":"onSearchableBottomTap","type":"ValueChanged?","desc":"点击 [CupertinoSliverNavigationBar.search] 中的搜索字段时调用,在活动和非活动搜索状态之间切换。"},{"name":"stretch","type":"bool","required":true,"desc":"导航栏是否应拉伸以填充过度滚动区域。"},{"name":"searchField","type":"Widget?","desc":"[CupertinoSliverNavigationBar.search] 中使用的搜索字段。"}],"id":302,"localName":"Sliver导航条","lever":2,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"导航条基本使用","desc":["【leading】 : 左侧组件 【Widget】","【middle】 : 中间组件 【Widget】","【trailing】 : 尾部组件 【Widget】","【largeTitle】 : 底部折展组件 【Widget】","【border】 : 边线 【Border】","【backgroundColor】 : 背景色 【Color】","【padding】 : 内边距 【EdgeInsetsDirectional】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_en-US.json new file mode 100644 index 000000000..22c50bf5d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoSliverRefreshControl","path":"/src/cupertino/refresh.dart","parents":["StatefulWidget","Widget"],"desc":" A sliver widget implementing the iOS-style pull to refresh content control.","fields":[{"name":"refreshTriggerPullDistance","type":"double","required":true,"desc":"The amount of overscroll the scrollable must be dragged to trigger a reload."},{"name":"refreshIndicatorExtent","type":"double","required":true,"desc":"The amount of space the refresh indicator sliver will keep holding while [onRefresh]'s [Future] is still running."},{"name":"builder","type":"RefreshControlIndicatorBuilder?","desc":"A builder that's called as this sliver's size changes, and as the state changes."},{"name":"onRefresh","type":"RefreshCallback?","desc":"Callback invoked when pulled by [refreshTriggerPullDistance]."}],"id":303,"lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Refresh Controller","desc":["【refreshIndicatorExtent】: Height of the loading indicator 【double】","【refreshTriggerPullDistance】: Scroll height that triggers loading 【double】","【onRefresh】: Pull-down event 【RefreshCallback】","【builder】: Indicator builder 【RefreshControlIndicatorBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_zh-CN.json new file mode 100644 index 000000000..c1cfc35e6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoSliverRefreshControl","path":"/src/cupertino/refresh.dart","parents":["StatefulWidget","Widget"],"desc":"实现 iOS 风格下拉刷新内容控件的 sliver 小部件。","fields":[{"name":"refreshTriggerPullDistance","type":"double","required":true,"desc":"可滚动内容必须被拖动以触发重新加载的过度滚动量。"},{"name":"refreshIndicatorExtent","type":"double","required":true,"desc":"在 [onRefresh] 的 [Future] 仍在运行时,刷新指示器 sliver 将保持占用的空间量。"},{"name":"builder","type":"RefreshControlIndicatorBuilder?","desc":"随着此 sliver 大小变化和状态变化而调用的构建器。"},{"name":"onRefresh","type":"RefreshCallback?","desc":"被 [refreshTriggerPullDistance] 拉动时调用的回调。"}],"id":303,"localName":"Sliver刷新控制器","lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"刷新控制器基本使用","desc":["【refreshIndicatorExtent】 : 加载中指示器高度 【double】","【refreshTriggerPullDistance】 : 触发加载的滑动高度 【double】","【onRefresh】 : 下拉事件 【RefreshCallback】","【builder】 : 指示器构造器 【RefreshControlIndicatorBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_en-US.json new file mode 100644 index 000000000..2dd7c816b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoSpellCheckSuggestionsToolbar","path":"/src/cupertino/spell_check_suggestions_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" The default spell check suggestions toolbar for iOS.","fields":[{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"The location on which to anchor the menu."},{"name":"buttonItems","type":"List","required":true,"desc":"The [ContextMenuButtonItem]s that will be turned into the correct button widgets and displayed in the spell check suggestions toolbar."}],"id":394,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_zh-CN.json new file mode 100644 index 000000000..4f46cda1d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoSpellCheckSuggestionsToolbar","path":"/src/cupertino/spell_check_suggestions_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 的默认拼写检查建议工具栏。","fields":[{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"锚定菜单的位置。"},{"name":"buttonItems","type":"List","required":true,"desc":"将转换为正确按钮小部件并显示在拼写检查建议工具栏中的 [ContextMenuButtonItem]。"}],"id":394,"localName":"CupertinoSpellCheckSuggestionsToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_en-US.json new file mode 100644 index 000000000..dda31e2b0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoSwitch","path":"/src/cupertino/switch.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style switch.","fields":[{"name":"value","type":"bool","required":true,"desc":"Whether this switch is on or off."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user toggles the switch on or off."},{"name":"activeTrackColor","type":"Color?","desc":"The color to use for the track when the switch is on."},{"name":"inactiveTrackColor","type":"Color?","desc":"The color to use for the track when the switch is off."},{"name":"thumbColor","type":"Color?","desc":"The color to use for the thumb when the switch is on."},{"name":"inactiveThumbColor","type":"Color?","desc":"The color to use on the thumb when the switch is off."},{"name":"focusColor","type":"Color?","desc":"The color to use for the focus highlight for keyboard interactions."},{"name":"onLabelColor","type":"Color?","desc":"The color to use for the accessibility label when the switch is on."},{"name":"offLabelColor","type":"Color?","desc":"The color to use for the accessibility label when the switch is off."},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.activeThumbImage}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onActiveThumbImageError}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.inactiveThumbImage}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onInactiveThumbImageError}"},{"name":"trackOutlineColor","type":"WidgetStateProperty?","desc":"The outline color of this [CupertinoSwitch]'s track."},{"name":"trackOutlineWidth","type":"WidgetStateProperty?","desc":"The outline width of this [CupertinoSwitch]'s track."},{"name":"thumbIcon","type":"WidgetStateProperty?","desc":"The icon to use on the thumb of this switch."},{"name":"mouseCursor","type":"WidgetStateProperty?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"applyTheme","type":"bool?","desc":"{@template flutter.cupertino.CupertinoSwitch.applyTheme} Whether to apply the ambient [CupertinoThemeData]."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.cupertino.CupertinoSwitch.dragStartBehavior} Determines the way that drag start behavior is handled."}],"id":41,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoSwitch","desc":["【value】: Whether it is selected 【double】","【activeColor】: Active state color 【Color】","【onChanged】: Toggle callback 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_zh-CN.json new file mode 100644 index 000000000..ae7f74745 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoSwitch","path":"/src/cupertino/switch.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的开关。","fields":[{"name":"value","type":"bool","required":true,"desc":"此开关是开启还是关闭。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户切换开关开启或关闭时调用。"},{"name":"activeTrackColor","type":"Color?","desc":"开关开启时用于轨道的颜色。"},{"name":"inactiveTrackColor","type":"Color?","desc":"开关关闭时用于轨道的颜色。"},{"name":"thumbColor","type":"Color?","desc":"开关开启时用于拇指的颜色。"},{"name":"inactiveThumbColor","type":"Color?","desc":"开关关闭时用于拇指的颜色。"},{"name":"focusColor","type":"Color?","desc":"用于键盘交互的焦点高亮的颜色。"},{"name":"onLabelColor","type":"Color?","desc":"开关开启时用于辅助功能标签的颜色。"},{"name":"offLabelColor","type":"Color?","desc":"开关关闭时用于辅助功能标签的颜色。"},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.activeThumbImage}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onActiveThumbImageError}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.inactiveThumbImage}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onInactiveThumbImageError}"},{"name":"trackOutlineColor","type":"WidgetStateProperty?","desc":"此 [CupertinoSwitch] 轨道的轮廓颜色。"},{"name":"trackOutlineWidth","type":"WidgetStateProperty?","desc":"此 [CupertinoSwitch] 轨道的轮廓宽度。"},{"name":"thumbIcon","type":"WidgetStateProperty?","desc":"在此开关拇指上使用的图标。"},{"name":"mouseCursor","type":"WidgetStateProperty?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点改变时调用的处理程序。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"applyTheme","type":"bool?","desc":"{@template flutter.cupertino.CupertinoSwitch.applyTheme} 是否应用环境 [CupertinoThemeData]。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.cupertino.CupertinoSwitch.dragStartBehavior} 确定拖动开始行为的处理方式。"}],"id":41,"localName":"iOS切钮","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoSwitch基本使用","desc":["【value】 : 是否选中 【double】","【activeColor】 : 激活态颜色 【Color】","【onChanged】 : 切换回调 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_en-US.json new file mode 100644 index 000000000..56cd80008 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoTabBar","path":"/src/cupertino/bottom_tab_bar.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-styled bottom navigation tab bar.","fields":[{"name":"items","type":"List","required":true,"desc":"The interactive items laid out within the bottom navigation bar."},{"name":"onTap","type":"ValueChanged?","desc":"The callback that is called when a item is tapped."},{"name":"currentIndex","type":"int","required":true,"desc":"The index into [items] of the current active item."},{"name":"backgroundColor","type":"Color?","desc":"The background color of the tab bar. If it contains transparency, the tab bar will automatically produce a blurring effect to the content behind it."},{"name":"activeColor","type":"Color?","desc":"The foreground color of the icon and title for the [BottomNavigationBarItem] of the selected tab."},{"name":"inactiveColor","type":"Color","required":true,"desc":"The foreground color of the icon and title for the [BottomNavigationBarItem]s in the unselected state."},{"name":"iconSize","type":"double","required":true,"desc":"The size of all of the [BottomNavigationBarItem] icons."},{"name":"height","type":"double","required":true,"desc":"The height of the [CupertinoTabBar]."},{"name":"border","type":"Border?","desc":"The border of the [CupertinoTabBar]."}],"id":63,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoTabBar","desc":["【currentIndex】 : Current active index 【Widget】","【items】 : Item components 【Widget】","【backgroundColor】 : Background color 【Color】","【inactiveColor】 : Inactive color 【Color】","【activeColor】 : Active color 【Color】","【iconSize】 : Icon size 【double】","【border】 : Border 【Border】","【onTap】 : Click event 【Function(int)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_zh-CN.json new file mode 100644 index 000000000..e9d6e0233 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoTabBar","path":"/src/cupertino/bottom_tab_bar.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 风格的底部导航标签栏。","fields":[{"name":"items","type":"List","required":true,"desc":"在底部导航栏内布局的交互项目。"},{"name":"onTap","type":"ValueChanged?","desc":"点击项目时调用的回调。"},{"name":"currentIndex","type":"int","required":true,"desc":"当前活动项目在 [items] 中的索引。"},{"name":"backgroundColor","type":"Color?","desc":"标签栏的背景颜色。如果包含透明度,标签栏将自动对其后面的内容产生模糊效果。"},{"name":"activeColor","type":"Color?","desc":"选定标签的 [BottomNavigationBarItem] 图标和标题的前景颜色。"},{"name":"inactiveColor","type":"Color","required":true,"desc":"未选中状态下 [BottomNavigationBarItem] 图标和标题的前景颜色。"},{"name":"iconSize","type":"double","required":true,"desc":"所有 [BottomNavigationBarItem] 图标的大小。"},{"name":"height","type":"double","required":true,"desc":"[CupertinoTabBar] 的高度。"},{"name":"border","type":"Border?","desc":"[CupertinoTabBar] 的边框。"}],"id":63,"localName":"iOS页签","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoTabBar基本用法","desc":["【currentIndex】 : 当前激活索引 【Widget】","【items】 : 条目组件 【Widget】","【backgroundColor】 : 背景色 【Color】","【inactiveColor】 : 非激活色 【Color】","【activeColor】 : 激活色 【Color】","【iconSize】 : 图标大小 【double】","【border】 : 边线 【Border】","【onTap】 : 点击事件 【Function(int)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_en-US.json new file mode 100644 index 000000000..f54f0ad48 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoTabScaffold","path":"/src/cupertino/tab_scaffold.dart","parents":["StatefulWidget","Widget"],"desc":" Implements a tabbed iOS application's root layout and behavior structure.","fields":[{"name":"tabBar","type":"CupertinoTabBar","required":true,"desc":"The [tabBar] is a [CupertinoTabBar] drawn at the bottom of the screen that lets the user switch between different tabs in the main content area when present."},{"name":"controller","type":"CupertinoTabController?","desc":"Controls the currently selected tab index of the [tabBar], as well as the active tab index of the [tabBuilder]. Providing a different [controller] will also update the scaffold's current active index to the new controller's index value."},{"name":"tabBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"An [IndexedWidgetBuilder] that's called when tabs become active."},{"name":"backgroundColor","type":"Color?","desc":"The color of the widget that underlies the entire scaffold."},{"name":"resizeToAvoidBottomInset","type":"bool","required":true,"desc":"Whether the body should size itself to avoid the window's bottom inset."},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the [CupertinoTabScaffold]."}],"id":158,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoTabScaffold","desc":["【tabBar】: Tab bar 【CupertinoTabBar】","【backgroundColor】: Background color 【Color】","【controller】: Controller 【CupertinoTabController】","【tabBuilder】: Page builder 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_zh-CN.json new file mode 100644 index 000000000..3c74e82d4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoTabScaffold","path":"/src/cupertino/tab_scaffold.dart","parents":["StatefulWidget","Widget"],"desc":"实现标签式 iOS 应用程序的根布局和行为结构。","fields":[{"name":"tabBar","type":"CupertinoTabBar","required":true,"desc":"[tabBar] 是绘制在屏幕底部的 [CupertinoTabBar],让用户在存在时在主内容区域的不同标签之间切换。"},{"name":"controller","type":"CupertinoTabController?","desc":"控制 [tabBar] 的当前选定标签索引,以及 [tabBuilder] 的活动标签索引。提供不同的 [controller] 也会将脚手架的当前活动索引更新为新控制器的索引值。"},{"name":"tabBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"标签变为活动时调用的 [IndexedWidgetBuilder]。"},{"name":"backgroundColor","type":"Color?","desc":"整个脚手架下方小部件的颜色。"},{"name":"resizeToAvoidBottomInset","type":"bool","required":true,"desc":"主体是否应调整自身大小以避免窗口的底部插入。"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [CupertinoTabScaffold] 状态的恢复 ID。"}],"id":158,"localName":"iOS页签脚手架","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoTabScaffold基本用法","desc":["【tabBar】 : 页签条 【CupertinoTabBar】","【backgroundColor】 : 背景色 【Color】","【controller】 : 控制器 【CupertinoTabController】","【tabBuilder】 : 页面构造器 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_en-US.json new file mode 100644 index 000000000..884bdb282 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoTabView","path":"/src/cupertino/tab_view.dart","parents":["StatefulWidget","Widget"],"desc":" A single tab view with its own [Navigator] state and history.","fields":[{"name":"builder","type":"WidgetBuilder?","desc":"The widget builder for the default route of the tab view ([Navigator.defaultRouteName], which is `/`)."},{"name":"navigatorKey","type":"GlobalKey?","desc":"A key to use when building this widget's [Navigator]."},{"name":"defaultTitle","type":"String?","desc":"The title of the default route."},{"name":"routes","type":"Map?","desc":"This tab view's routing table."},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"The route generator callback used when the tab view is navigated to a named route."},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"Called when [onGenerateRoute] also fails to generate a route."},{"name":"navigatorObservers","type":"List","required":true,"desc":"The list of observers for the [Navigator] created in this tab view."},{"name":"restorationScopeId","type":"String?","desc":"Restoration ID to save and restore the state of the [Navigator] built by this [CupertinoTabView]."}],"id":229,"lever":3,"family":1,"linkIds":[65,158],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoTabView","desc":["【builder】 : Homepage builder 【WidgetBuilder】","【navigatorObservers】 : Route observers 【List】","【routes】 : Route mapping 【Map】","【onGenerateRoute】 : Route factory 【RouteFactory】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_zh-CN.json new file mode 100644 index 000000000..69f3489d5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoTabView","path":"/src/cupertino/tab_view.dart","parents":["StatefulWidget","Widget"],"desc":"具有自己的 [Navigator] 状态和历史记录的单个标签视图。","fields":[{"name":"builder","type":"WidgetBuilder?","desc":"标签视图默认路由的小部件构建器([Navigator.defaultRouteName],即 `/`)。"},{"name":"navigatorKey","type":"GlobalKey?","desc":"构建此小部件的 [Navigator] 时使用的键。"},{"name":"defaultTitle","type":"String?","desc":"默认路由的标题。"},{"name":"routes","type":"Map?","desc":"此标签视图的路由表。"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"标签视图导航到命名路由时使用的路由生成器回调。"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"当 [onGenerateRoute] 也无法生成路由时调用。"},{"name":"navigatorObservers","type":"List","required":true,"desc":"在此标签视图中创建的 [Navigator] 的观察者列表。"},{"name":"restorationScopeId","type":"String?","desc":"保存和恢复此 [CupertinoTabView] 构建的 [Navigator] 状态的恢复 ID。"}],"id":229,"localName":"Cupertino页面","lever":3,"family":1,"linkIds":[65,158],"nodes":[{"file":"node1_base.dart","name":"CupertinoTabView基本使用","desc":["【builder】 : 主页构造器 【WidgetBuilder】","【navigatorObservers】 : 路由监听器 【List】","【routes】 : 路由映射 【Map】","【onGenerateRoute】 : 路由工厂 【RouteFactory】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_en-US.json new file mode 100644 index 000000000..011f06fd0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoTextField","path":"/src/cupertino/text_field.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style text field.","fields":[{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"decoration","type":"BoxDecoration?","desc":"Controls the [BoxDecoration] of the box behind the text input."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"Padding around the text entry area between the [prefix] and [suffix] or the clear button when [clearButtonMode] is not never."},{"name":"placeholder","type":"String?","desc":"A lighter colored placeholder hint that appears on the first line of the text field when the text entry is empty."},{"name":"placeholderStyle","type":"TextStyle?","desc":"The style to use for the placeholder text."},{"name":"prefix","type":"Widget?","desc":"An optional [Widget] to display before the text."},{"name":"prefixMode","type":"OverlayVisibilityMode","required":true,"desc":"Controls the visibility of the [prefix] widget based on the state of text entry when the [prefix] argument is not null."},{"name":"suffix","type":"Widget?","desc":"An optional [Widget] to display after the text."},{"name":"suffixMode","type":"OverlayVisibilityMode","required":true,"desc":"Controls the visibility of the [suffix] widget based on the state of text entry when the [suffix] argument is not null."},{"name":"crossAxisAlignment","type":"CrossAxisAlignment","required":true,"desc":"Controls the vertical alignment of the [prefix] and the [suffix] widget in relation to content."},{"name":"clearButtonMode","type":"OverlayVisibilityMode","required":true,"desc":"Show an iOS-style clear button to clear the current text entry."},{"name":"clearButtonSemanticLabel","type":"String?","desc":"The semantic label for the clear button used by screen readers."},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.widgets.editableText.keyboardType}"},{"name":"textInputAction","type":"TextInputAction?","desc":"The type of action button to use for the keyboard."},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"style","type":"TextStyle?","desc":"The style to use for the text being edited."},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"Configuration of toolbar options."},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@macro flutter.material.InputDecorator.textAlignVertical}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.readOnly}"},{"name":"showCursor","type":"bool?","desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@macro flutter.widgets.editableText.obscuringCharacter}"},{"name":"obscureText","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.obscureText}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines} * [expands], which determines whether the field should fill the height of its parent."},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines} * [expands], which determines whether the field should fill the height of its parent."},{"name":"expands","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.expands}"},{"name":"maxLength","type":"int?","desc":"The maximum number of characters (Unicode grapheme clusters) to allow in the text field."},{"name":"maxLengthEnforcement","type":"MaxLengthEnforcement?","desc":"Determines how the [maxLength] limit should be enforced."},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onChanged}"},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@macro flutter.widgets.editableText.onEditingComplete}"},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onSubmitted}"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapOutside}"},{"name":"onTapUpOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapUpOutside}"},{"name":"inputFormatters","type":"List?","desc":"{@macro flutter.widgets.editableText.inputFormatters}"},{"name":"enabled","type":"bool","required":true,"desc":"Disables the text field when false."},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius","required":true,"desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"The color to use when painting the cursor."},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"Controls how tall the selection highlight boxes are computed to be."},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"Controls how wide the selection highlight boxes are computed to be."},{"name":"keyboardAppearance","type":"Brightness?","desc":"The appearance of the keyboard."},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.editableText.scrollController}"},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"onTap","type":"GestureTapCallback?","desc":"{@macro flutter.material.textfield.onTap}"},{"name":"autofillHints","type":"Iterable?","desc":"{@macro flutter.widgets.editableText.autofillHints} {@macro flutter.services.AutofillConfiguration.autofillHints}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.material.textfield.restorationId}"},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.scribbleEnabled}"},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.stylusHandwritingEnabled}"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@macro flutter.widgets.editableText.contentInsertionConfiguration}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"Configuration for the text field magnifier."},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@macro flutter.widgets.EditableText.spellCheckConfiguration}"},{"name":"undoController","type":"UndoHistoryController?","desc":"{@macro flutter.widgets.undoHistory.controller}"}],"id":245,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoTextField","desc":["【placeholder】 : Hint text 【String】","【showCursor】 : Whether to show cursor 【bool】","【minLines】 : Minimum number of lines 【int】","【maxLines】 : Maximum number of lines 【int】","【padding】 : Padding 【EdgeInsetsGeometry】","【onChanged】 : Change listener 【ValueChanged】","【onTap】: Tap listener 【GestureTapCallback】","【onSubmitted】: Submit listener 【ValueChanged】"]},{"file":"node2_style.dart","name":"Common Style Properties of CupertinoTextField","desc":["【style】 : Input text style 【TextStyle】","【prefix】: Prefix component 【Widget】","【prefixMode】: Prefix mode 【OverlayVisibilityMode】","【suffix】: Suffix component 【Widget】","【suffixMode】: Suffix mode 【OverlayVisibilityMode】","【cursorColor】: Cursor color 【Color】","【cursorWidth】: Cursor width 【double】","【cursorRadius】: Cursor radius 【Radius】","【readOnly】: Whether read-only 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_zh-CN.json new file mode 100644 index 000000000..a0f10f02a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoTextField","path":"/src/cupertino/text_field.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的文本字段。","fields":[{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"controller","type":"TextEditingController?","desc":"控制正在编辑的文本。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"decoration","type":"BoxDecoration?","desc":"控制文本输入后面框的 [BoxDecoration]。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"当 [clearButtonMode] 不为 never 时,[prefix] 和 [suffix] 或清除按钮之间文本输入区域周围的内边距。"},{"name":"placeholder","type":"String?","desc":"当文本输入为空时出现在文本字段第一行的较浅颜色占位符提示。"},{"name":"placeholderStyle","type":"TextStyle?","desc":"用于占位符文本的样式。"},{"name":"prefix","type":"Widget?","desc":"在文本前显示的可选 [Widget]。"},{"name":"prefixMode","type":"OverlayVisibilityMode","required":true,"desc":"当 [prefix] 参数不为 null 时,根据文本输入状态控制 [prefix] 小部件的可见性。"},{"name":"suffix","type":"Widget?","desc":"在文本后显示的可选 [Widget]。"},{"name":"suffixMode","type":"OverlayVisibilityMode","required":true,"desc":"当 [suffix] 参数不为 null 时,根据文本输入状态控制 [suffix] 小部件的可见性。"},{"name":"crossAxisAlignment","type":"CrossAxisAlignment","required":true,"desc":"控制 [prefix] 和 [suffix] 小部件相对于内容的垂直对齐。"},{"name":"clearButtonMode","type":"OverlayVisibilityMode","required":true,"desc":"显示 iOS 风格的清除按钮以清除当前文本输入。"},{"name":"clearButtonSemanticLabel","type":"String?","desc":"屏幕阅读器使用的清除按钮的语义标签。"},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.widgets.editableText.keyboardType}"},{"name":"textInputAction","type":"TextInputAction?","desc":"用于键盘的操作按钮类型。"},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"style","type":"TextStyle?","desc":"用于正在编辑的文本的样式。"},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"工具栏选项的配置。"},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@macro flutter.material.InputDecorator.textAlignVertical}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.readOnly}"},{"name":"showCursor","type":"bool?","desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@macro flutter.widgets.editableText.obscuringCharacter}"},{"name":"obscureText","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.obscureText}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines} * [expands],确定字段是否应填充其父级的高度。"},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines} * [expands],确定字段是否应填充其父级的高度。"},{"name":"expands","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.expands}"},{"name":"maxLength","type":"int?","desc":"文本字段中允许的最大字符数(Unicode 字素簇)。"},{"name":"maxLengthEnforcement","type":"MaxLengthEnforcement?","desc":"确定如何强制执行 [maxLength] 限制。"},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onChanged}"},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@macro flutter.widgets.editableText.onEditingComplete}"},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onSubmitted}"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapOutside}"},{"name":"onTapUpOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapUpOutside}"},{"name":"inputFormatters","type":"List?","desc":"{@macro flutter.widgets.editableText.inputFormatters}"},{"name":"enabled","type":"bool","required":true,"desc":"为 false 时禁用文本字段。"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius","required":true,"desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"绘制光标时使用的颜色。"},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"控制选择高亮框的计算高度。"},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"控制选择高亮框的计算宽度。"},{"name":"keyboardAppearance","type":"Brightness?","desc":"键盘的外观。"},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.editableText.scrollController}"},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"onTap","type":"GestureTapCallback?","desc":"{@macro flutter.material.textfield.onTap}"},{"name":"autofillHints","type":"Iterable?","desc":"{@macro flutter.widgets.editableText.autofillHints} {@macro flutter.services.AutofillConfiguration.autofillHints}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.material.textfield.restorationId}"},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.scribbleEnabled}"},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.stylusHandwritingEnabled}"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@macro flutter.widgets.editableText.contentInsertionConfiguration}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"文本字段放大镜的配置。"},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@macro flutter.widgets.EditableText.spellCheckConfiguration}"},{"name":"undoController","type":"UndoHistoryController?","desc":"{@macro flutter.widgets.undoHistory.controller}"}],"id":245,"localName":"iOS风格输入框","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoTextField基础使用","desc":["【placeholder】 : 提示文字 【String】","【showCursor】 : 是否显示游标 【bool】","【minLines】 : 最小行数 【int】","【maxLines】 : 最大行数 【int】","【padding】 : 内边距 【EdgeInsetsGeometry】","【onChanged】 : 变化监听 【ValueChanged】","【onTap】: 点击监听 【GestureTapCallback】","【onSubmitted】: 提交监听 【ValueChanged】"]},{"file":"node2_style.dart","name":"CupertinoTextField常用样式属性","desc":["【style】 : 输入文字样式 【TextStyle】","【prefix】: 前缀组件 【Widget】","【prefixMode】: 前缀模式 【OverlayVisibilityMode】","【suffix】: 后缀组件 【Widget】","【suffixMode】: 后缀模式 【OverlayVisibilityMode】","【cursorColor】: 游标颜色 【Color】","【cursorWidth】: 游标宽度 【double】","【cursorRadius】: 游标圆角 【Radius】","【readOnly】: 是否只读 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_en-US.json new file mode 100644 index 000000000..67b033562 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoTextFormFieldRow","path":"/src/cupertino/text_form_field_row.dart","parents":["FormField","StatefulWidget","Widget"],"desc":" Creates a [CupertinoFormRow] containing a [FormField] that wraps a [CupertinoTextField].","fields":[{"name":"prefix","type":"Widget?","desc":"A widget that is displayed at the start of the row."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Content padding for the row."},{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited."},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.material.TextFormField.onChanged}"}],"id":395,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_zh-CN.json new file mode 100644 index 000000000..a82a0ff3d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoTextFormFieldRow","path":"/src/cupertino/text_form_field_row.dart","parents":["FormField","StatefulWidget","Widget"],"desc":"创建包含包装 [CupertinoTextField] 的 [FormField] 的 [CupertinoFormRow]。","fields":[{"name":"prefix","type":"Widget?","desc":"显示在行开始处的小部件。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"行的内容内边距。"},{"name":"controller","type":"TextEditingController?","desc":"控制正在编辑的文本。"},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.material.TextFormField.onChanged}"}],"id":395,"localName":"CupertinoTextFormFieldRow","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_en-US.json new file mode 100644 index 000000000..a8b91f938 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoTextMagnifier","path":"/src/cupertino/magnifier.dart","parents":["StatefulWidget","Widget"],"desc":" A [CupertinoMagnifier] used for magnifying text in cases where a user's finger may be blocking the point of interest, like a selection handle.","fields":[{"name":"animationCurve","type":"Curve","required":true,"desc":"The curve used for the in / out animations."},{"name":"controller","type":"MagnifierController","required":true,"desc":"This magnifier's controller."},{"name":"dragResistance","type":"double","required":true,"desc":"A drag resistance on the downward Y position of the lens."},{"name":"hideBelowThreshold","type":"double","required":true,"desc":"The difference in Y between the gesture position and the caret center so that the magnifier hides itself."},{"name":"horizontalScreenEdgePadding","type":"double","required":true,"desc":"The padding on either edge of the screen that any part of the magnifier cannot exist past."},{"name":"magnifierInfo","type":"ValueNotifier","required":true,"desc":"[CupertinoTextMagnifier] will determine its own positioning based on the [MagnifierInfo] of this notifier."}],"id":396,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_zh-CN.json new file mode 100644 index 000000000..24eb7fc26 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoTextMagnifier","path":"/src/cupertino/magnifier.dart","parents":["StatefulWidget","Widget"],"desc":"用于在用户手指可能阻挡兴趣点(如选择手柄)的情况下放大文本的 [CupertinoMagnifier]。","fields":[{"name":"animationCurve","type":"Curve","required":true,"desc":"用于进入/退出动画的曲线。"},{"name":"controller","type":"MagnifierController","required":true,"desc":"此放大镜的控制器。"},{"name":"dragResistance","type":"double","required":true,"desc":"镜头向下 Y 位置的拖动阻力。"},{"name":"hideBelowThreshold","type":"double","required":true,"desc":"手势位置和插入符中心之间的 Y 差异,以便放大镜隐藏自己。"},{"name":"horizontalScreenEdgePadding","type":"double","required":true,"desc":"屏幕任一边缘的内边距,放大镜的任何部分都不能超出此范围。"},{"name":"magnifierInfo","type":"ValueNotifier","required":true,"desc":"[CupertinoTextMagnifier] 将根据此通知器的 [MagnifierInfo] 确定自己的定位。"}],"id":396,"localName":"CupertinoTextMagnifier","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_en-US.json new file mode 100644 index 000000000..4141bdbce --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoTextSelectionToolbar","path":"/src/cupertino/text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-style text selection toolbar.","fields":[{"name":"anchorAbove","type":"Offset","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.anchorAbove}"},{"name":"anchorBelow","type":"Offset","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.anchorBelow}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"},{"name":"toolbarBuilder","type":"CupertinoToolbarBuilder","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.toolbarBuilder}"}],"id":299,"lever":1,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"This component is not available","desc":["【-】 : - 【-】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_zh-CN.json new file mode 100644 index 000000000..a5526e370 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoTextSelectionToolbar","path":"/src/cupertino/text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 风格的文本选择工具栏。","fields":[{"name":"anchorAbove","type":"Offset","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.anchorAbove}"},{"name":"anchorBelow","type":"Offset","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.anchorBelow}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"},{"name":"toolbarBuilder","type":"CupertinoToolbarBuilder","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.toolbarBuilder}"}],"id":299,"localName":"ios文字选择工具条","lever":1,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"该组件无法使用","desc":["【-】 : - 【-】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_en-US.json new file mode 100644 index 000000000..6af01d655 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoTextSelectionToolbarButton","path":"/src/cupertino/text_selection_toolbar_button.dart","parents":["StatefulWidget","Widget"],"desc":" A button in the style of the iOS text selection toolbar buttons.","fields":[{"name":"child","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.child} The child of this button."},{"name":"onPressed","type":"VoidCallback?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed} Called when this button is pressed. {@endtemplate}"},{"name":"buttonItem","type":"ContextMenuButtonItem?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed} The buttonItem used to generate the button when using [CupertinoTextSelectionToolbarButton.buttonItem]. {@endtemplate}"},{"name":"text","type":"String?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.text} The text used in the button's label when using [CupertinoTextSelectionToolbarButton.text]. {@endtemplate}"}],"id":397,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_zh-CN.json new file mode 100644 index 000000000..916d685c8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoTextSelectionToolbarButton","path":"/src/cupertino/text_selection_toolbar_button.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 文本选择工具栏按钮样式的按钮。","fields":[{"name":"child","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.child} 此按钮的子项。"},{"name":"onPressed","type":"VoidCallback?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed} 按下此按钮时调用。{@endtemplate}"},{"name":"buttonItem","type":"ContextMenuButtonItem?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed} 使用 [CupertinoTextSelectionToolbarButton.buttonItem] 时用于生成按钮的 buttonItem。{@endtemplate}"},{"name":"text","type":"String?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.text} 使用 [CupertinoTextSelectionToolbarButton.text] 时按钮标签中使用的文本。{@endtemplate}"}],"id":397,"localName":"CupertinoTextSelectionToolbarButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_en-US.json new file mode 100644 index 000000000..0d84d7a67 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoTheme","path":"/src/cupertino/theme.dart","parents":["StatelessWidget","Widget"],"desc":" Applies a visual styling theme to descendant Cupertino widgets.","fields":[{"name":"data","type":"CupertinoThemeData","required":true,"desc":"The [CupertinoThemeData] styling for this theme."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":169,"lever":3,"family":0,"linkIds":[156,168],"nodes":[{"file":"node1_base.dart","name":"Text Style-TextTheme","desc":["Descendant components can obtain and use the theme data through CupertinoTheme.of."]},{"file":"node2_use.dart","name":"Usage of CupertinoThemeData","desc":["Like Theme, you can share specified properties among descendants, but there are fewer properties. Note that if you need to use the theme, you cannot obtain it in the current context."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_zh-CN.json new file mode 100644 index 000000000..fd3ece290 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoTheme","path":"/src/cupertino/theme.dart","parents":["StatelessWidget","Widget"],"desc":"将视觉样式主题应用于后代 Cupertino 小部件。","fields":[{"name":"data","type":"CupertinoThemeData","required":true,"desc":"此主题的 [CupertinoThemeData] 样式。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":169,"localName":"iOS主题","lever":3,"family":0,"linkIds":[156,168],"nodes":[{"file":"node1_base.dart","name":"文字样式-TextTheme","desc":["后代组件可以通过CupertinoTheme.of获取主题的数据进行使用。"]},{"file":"node2_use.dart","name":"CupertinoThemeData的使用","desc":["和Theme一样可以通过指定的属性,让它们在后代中共享,不过属性较少。注意如果需要使用主题,不能在当前的context中获取。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_en-US.json new file mode 100644 index 000000000..f795a2677 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoTimerPicker","path":"/src/cupertino/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A countdown timer picker in iOS style.","fields":[{"name":"mode","type":"CupertinoTimerPickerMode","required":true,"desc":"The mode of the timer picker."},{"name":"initialTimerDuration","type":"Duration","required":true,"desc":"The initial duration of the countdown timer."},{"name":"minuteInterval","type":"int","required":true,"desc":"The granularity of the minute spinner. Must be a positive integer factor of 60."},{"name":"secondInterval","type":"int","required":true,"desc":"The granularity of the second spinner. Must be a positive integer factor of 60."},{"name":"onTimerDurationChanged","type":"ValueChanged","required":true,"desc":"Callback called when the timer duration changes."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"Defines how the timer picker should be positioned within its parent."},{"name":"backgroundColor","type":"Color?","desc":"Background color of timer picker."},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.cupertino.picker.itemExtent}"},{"name":"selectionOverlayBuilder","type":"SelectionOverlayBuilder?","desc":"A function that returns a widget that is overlaid on the picker to highlight the currently selected entry."}],"id":138,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoTimerPicker","desc":["【initialTimerDuration】: Initial time 【Duration】","【minuteInterval】: Minute interval 【double】","【secondInterval】: Second interval 【double】","【alignment】: Alignment 【AlignmentGeometry】","【backgroundColor】: Background color 【Color】","【mode】: Mode*3 【CupertinoTimerPickerMode】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_zh-CN.json new file mode 100644 index 000000000..1d73b55a1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoTimerPicker","path":"/src/cupertino/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的倒计时器选择器。","fields":[{"name":"mode","type":"CupertinoTimerPickerMode","required":true,"desc":"计时器选择器的模式。"},{"name":"initialTimerDuration","type":"Duration","required":true,"desc":"倒计时器的初始持续时间。"},{"name":"minuteInterval","type":"int","required":true,"desc":"分钟旋转器的粒度。必须是 60 的正整数因子。"},{"name":"secondInterval","type":"int","required":true,"desc":"秒旋转器的粒度。必须是 60 的正整数因子。"},{"name":"onTimerDurationChanged","type":"ValueChanged","required":true,"desc":"计时器持续时间更改时调用的回调。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"定义计时器选择器在其父级内的定位方式。"},{"name":"backgroundColor","type":"Color?","desc":"计时器选择器的背景颜色。"},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.cupertino.picker.itemExtent}"},{"name":"selectionOverlayBuilder","type":"SelectionOverlayBuilder?","desc":"返回覆盖在选择器上以突出显示当前选定条目的小部件的函数。"}],"id":138,"localName":"iOS时间选择器","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoTimerPicker基本使用","desc":["【initialTimerDuration】 : 初始时间 【Duration】","【minuteInterval】 : 分钟间隔数 【double】","【secondInterval】 : 秒间隔数 【double】","【alignment】 : 对齐方式 【AlignmentGeometry】","【backgroundColor】 : 背景色 【Color】","【mode】 : 模式*3 【CupertinoTimerPickerMode】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_en-US.json new file mode 100644 index 000000000..c00871740 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_en-US.json @@ -0,0 +1 @@ +{"name":"CupertinoUserInterfaceLevel","path":"/src/cupertino/interface_level.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Establishes a subtree in which [CupertinoUserInterfaceLevel.of] resolves to the given visual elevation from the [CupertinoUserInterfaceLevelData]. This can be used to apply style differences based on a widget's elevation.","fields":[],"id":337,"lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to CupertinoUserInterfaceLevel","desc":["CupertinoUserInterfaceLevel.of(context) can retrieve CupertinoUserInterfaceLevelData. This component can also be used to set and share this data with the subtree. For more information about the data source, see: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_zh-CN.json new file mode 100644 index 000000000..8c1c62180 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_zh-CN.json @@ -0,0 +1 @@ +{"name":"CupertinoUserInterfaceLevel","path":"/src/cupertino/interface_level.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"建立一个子树,其中 [CupertinoUserInterfaceLevel.of] 解析为来自 [CupertinoUserInterfaceLevelData] 的给定视觉高度。这可用于根据小部件的高度应用样式差异。","fields":[],"id":337,"localName":"用户接口等级","lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoUserInterfaceLevel 介绍","desc":["CupertinoUserInterfaceLevel.of(context) 可以获取 CupertinoUserInterfaceLevelData 数据。也可以使用该组件设置该数据与子树共享。关于数据原图详见: https:developer.apple.com/documentation/uikit/uiuserinterfacelevel"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_en-US.json b/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_en-US.json new file mode 100644 index 000000000..ebe6223ab --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_en-US.json @@ -0,0 +1 @@ +{"name":"CustomMultiChildLayout","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that uses a delegate to size and position multiple children.","fields":[{"name":"delegate","type":"MultiChildLayoutDelegate","required":true,"desc":"The delegate that controls the layout of the children."}],"id":341,"lever":4,"family":3,"linkIds":[315,285],"nodes":[{"file":"node_01.dart","name":"Basic Usage of CustomMultiChildLayout","desc":["【children】: Set of child components 【List】","【delegate】: Layout delegate 【MultiChildLayoutDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_zh-CN.json new file mode 100644 index 000000000..007f72cd2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_zh-CN.json @@ -0,0 +1 @@ +{"name":"CustomMultiChildLayout","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用委托来调整大小和定位多个子项的小部件。","fields":[{"name":"delegate","type":"MultiChildLayoutDelegate","required":true,"desc":"控制子项布局的委托。"}],"id":341,"localName":"通用多子布局","lever":4,"family":3,"linkIds":[315,285],"nodes":[{"file":"node_01.dart","name":"CustomMultiChildLayout基本使用","desc":["【children】 : 子组件集 【List】","【delegate】 : 布局代理 【MultiChildLayoutDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_en-US.json b/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_en-US.json new file mode 100644 index 000000000..a8923ba2a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_en-US.json @@ -0,0 +1 @@ +{"name":"CustomPaint","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that provides a canvas on which to draw during the paint phase.","fields":[{"name":"painter","type":"CustomPainter?","desc":"The painter that paints before the children."},{"name":"foregroundPainter","type":"CustomPainter?","desc":"The painter that paints after the children."},{"name":"size","type":"Size","required":true,"desc":"The size that this [CustomPaint] should aim for, given the layout constraints, if there is no child."},{"name":"isComplex","type":"bool","required":true,"desc":"Whether the painting is complex enough to benefit from caching."},{"name":"willChange","type":"bool","required":true,"desc":"Whether the raster cache should be told that this painting is likely to change in the next frame."}],"id":166,"lever":5,"family":2,"linkIds":[],"nodes":[{"file":"node1_clock.dart","name":"CustomPaint Line Drawing","desc":["【painter】: Painter 【CustomPainter】"]},{"file":"node2_bezier.dart","name":"CustomPaint Bezier Curve","desc":["Flutter also supports complex drawings such as Bezier curves."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_zh-CN.json new file mode 100644 index 000000000..47fe09652 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_zh-CN.json @@ -0,0 +1 @@ +{"name":"CustomPaint","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在绘制阶段提供画布进行绘制的小部件。","fields":[{"name":"painter","type":"CustomPainter?","desc":"在子项之前绘制的画家。"},{"name":"foregroundPainter","type":"CustomPainter?","desc":"在子项之后绘制的画家。"},{"name":"size","type":"Size","required":true,"desc":"如果没有子项,此 [CustomPaint] 在给定布局约束的情况下应该瞄准的大小。"},{"name":"isComplex","type":"bool","required":true,"desc":"绘制是否足够复杂以从缓存中受益。"},{"name":"willChange","type":"bool","required":true,"desc":"是否应该告诉光栅缓存此绘制可能在下一帧中更改。"}],"id":166,"localName":"绘制组件","lever":5,"family":2,"linkIds":[],"nodes":[{"file":"node1_clock.dart","name":"CustomPaint绘线图形","desc":["【painter】 : 绘画器 【CustomPainter】"]},{"file":"node2_bezier.dart","name":"CustomPaint绘线贝塞尔曲线","desc":["Flutter也支持贝塞尔曲线等复杂绘制。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_en-US.json new file mode 100644 index 000000000..24f0d7cf7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_en-US.json @@ -0,0 +1 @@ +{"name":"CustomScrollView","path":"/src/widgets/scroll_view.dart","parents":["ScrollView","StatelessWidget","Widget"],"desc":" A [ScrollView] that creates custom scroll effects using [slivers].","fields":[{"name":"slivers","type":"List","required":true,"desc":"The slivers to place inside the viewport."}],"id":183,"lever":5,"family":4,"linkIds":[184,185,188],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CustomScrollView","desc":["【slivers】 : Child component list 【List】","【reverse】 : Whether to reverse 【bool】","【scrollDirection】 : Scroll direction 【Axis】","【controller】 : Controller 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_zh-CN.json new file mode 100644 index 000000000..b014b692b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_zh-CN.json @@ -0,0 +1 @@ +{"name":"CustomScrollView","path":"/src/widgets/scroll_view.dart","parents":["ScrollView","StatelessWidget","Widget"],"desc":"使用 [slivers] 创建自定义滚动效果的 [ScrollView]。","fields":[{"name":"slivers","type":"List","required":true,"desc":"放置在视口内的 sliver。"}],"id":183,"localName":"通用滑动视图","lever":5,"family":4,"linkIds":[184,185,188],"nodes":[{"file":"node1_base.dart","name":"CustomScrollView基本使用","desc":["【slivers】 : 子组件列表 【List】","【reverse】 : 是否反向 【bool】","【scrollDirection】 : 滑动方向 【Axis】","【controller】 : 控制器 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_en-US.json b/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_en-US.json new file mode 100644 index 000000000..bd667e22e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_en-US.json @@ -0,0 +1 @@ +{"name":"CustomSingleChildLayout","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that defers the layout of its single child to a delegate.","fields":[{"name":"delegate","type":"SingleChildLayoutDelegate","required":true,"desc":"The delegate that controls the layout of the child."}],"id":285,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CustomSingleChildLayout","desc":["【delegate】 : delegate 【SingleChildLayoutDelegate】"]},{"file":"node2_offset.dart","name":"Offset Usage of CustomSingleChildLayout","desc":["The offset capability of the delegate can be used to position the child component with an offset."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_zh-CN.json new file mode 100644 index 000000000..334c69666 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_zh-CN.json @@ -0,0 +1 @@ +{"name":"CustomSingleChildLayout","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其单个子项的布局委托给委托的小部件。","fields":[{"name":"delegate","type":"SingleChildLayoutDelegate","required":true,"desc":"控制子项布局的委托。"}],"id":285,"localName":"通用单子布局","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CustomSingleChildLayout基本使用","desc":["【delegate】 : 代理 【SingleChildLayoutDelegate】"]},{"file":"node2_offset.dart","name":"CustomSingleChildLayout的偏移使用","desc":["可以利用代理的偏移能力,对子组件进行偏移定位。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_en-US.json b/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_en-US.json new file mode 100644 index 000000000..2e2081554 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_en-US.json @@ -0,0 +1 @@ +{"name":"DataTable","path":"/src/material/data_table.dart","parents":["StatelessWidget","Widget"],"desc":" A data table that follows the [Material 2](https://material.io/go/design-data-tables) design specification.","fields":[{"name":"columns","type":"List","required":true,"desc":"The configuration and labels for the columns in the table."},{"name":"sortColumnIndex","type":"int?","desc":"The current primary sort key's column."},{"name":"sortAscending","type":"bool","required":true,"desc":"Whether the column mentioned in [sortColumnIndex], if any, is sorted in ascending order."},{"name":"onSelectAll","type":"ValueSetter?","desc":"Invoked when the user selects or unselects every row, using the checkbox in the heading row."},{"name":"decoration","type":"Decoration?","desc":"{@template flutter.material.dataTable.decoration} The background and border decoration for the table. {@endtemplate}"},{"name":"dataRowColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.dataTable.dataRowColor} The background color for the data rows."},{"name":"dataRowMinHeight","type":"double?","desc":"{@template flutter.material.dataTable.dataRowMinHeight} The minimum height of each row (excluding the row that contains column headings). {@endtemplate}"},{"name":"dataRowMaxHeight","type":"double?","desc":"{@template flutter.material.dataTable.dataRowMaxHeight} The maximum height of each row (excluding the row that contains column headings). {@endtemplate}"},{"name":"dataTextStyle","type":"TextStyle?","desc":"{@template flutter.material.dataTable.dataTextStyle} The text style for data rows. {@endtemplate}"},{"name":"headingRowColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.dataTable.headingRowColor} The background color for the heading row."},{"name":"headingRowHeight","type":"double?","desc":"{@template flutter.material.dataTable.headingRowHeight} The height of the heading row. {@endtemplate}"},{"name":"headingTextStyle","type":"TextStyle?","desc":"{@template flutter.material.dataTable.headingTextStyle} The text style for the heading row. {@endtemplate}"},{"name":"horizontalMargin","type":"double?","desc":"{@template flutter.material.dataTable.horizontalMargin} The horizontal margin between the edges of the table and the content in the first and last cells of each row."},{"name":"columnSpacing","type":"double?","desc":"{@template flutter.material.dataTable.columnSpacing} The horizontal margin between the contents of each data column. {@endtemplate}"},{"name":"showCheckboxColumn","type":"bool","required":true,"desc":"{@template flutter.material.dataTable.showCheckboxColumn} Whether the widget should display checkboxes for selectable rows."},{"name":"rows","type":"List","required":true,"desc":"The data to show in each row (excluding the row that contains the column headings)."},{"name":"dividerThickness","type":"double?","desc":"{@template flutter.material.dataTable.dividerThickness} The width of the divider that appears between [TableRow]s."},{"name":"showBottomBorder","type":"bool","required":true,"desc":"Whether a border at the bottom of the table is displayed."},{"name":"checkboxHorizontalMargin","type":"double?","desc":"{@template flutter.material.dataTable.checkboxHorizontalMargin} Horizontal margin around the checkbox, if it is displayed. {@endtemplate}"},{"name":"border","type":"TableBorder?","desc":"The style to use when painting the boundary and interior divisions of the table."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":102,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DataTable","desc":["【columns】 : columns 【List】","【rows】 : rows 【List】"]},{"file":"node2_operation.dart","name":"Sorting in DataTable","desc":["【sortColumnIndex】 : column index 【int】","【columnSpacing】 : column spacing 【double】","【sortAscending】 : ascending order 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_zh-CN.json new file mode 100644 index 000000000..8886617e8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_zh-CN.json @@ -0,0 +1 @@ +{"name":"DataTable","path":"/src/material/data_table.dart","parents":["StatelessWidget","Widget"],"desc":"遵循 [Material 2](https://material.io/go/design-data-tables) 设计规范的数据表。","fields":[{"name":"columns","type":"List","required":true,"desc":"表中列的配置和标签。"},{"name":"sortColumnIndex","type":"int?","desc":"当前主要排序键的列。"},{"name":"sortAscending","type":"bool","required":true,"desc":"[sortColumnIndex] 中提到的列(如果有)是否按升序排序。"},{"name":"onSelectAll","type":"ValueSetter?","desc":"当用户使用标题行中的复选框选择或取消选择每一行时调用。"},{"name":"decoration","type":"Decoration?","desc":"{@template flutter.material.dataTable.decoration} 表的背景和边框装饰。{@endtemplate}"},{"name":"dataRowColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.dataTable.dataRowColor} 数据行的背景颜色。"},{"name":"dataRowMinHeight","type":"double?","desc":"{@template flutter.material.dataTable.dataRowMinHeight} 每行的最小高度(不包括包含列标题的行)。{@endtemplate}"},{"name":"dataRowMaxHeight","type":"double?","desc":"{@template flutter.material.dataTable.dataRowMaxHeight} 每行的最大高度(不包括包含列标题的行)。{@endtemplate}"},{"name":"dataTextStyle","type":"TextStyle?","desc":"{@template flutter.material.dataTable.dataTextStyle} 数据行的文本样式。{@endtemplate}"},{"name":"headingRowColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.dataTable.headingRowColor} 标题行的背景颜色。"},{"name":"headingRowHeight","type":"double?","desc":"{@template flutter.material.dataTable.headingRowHeight} 标题行的高度。{@endtemplate}"},{"name":"headingTextStyle","type":"TextStyle?","desc":"{@template flutter.material.dataTable.headingTextStyle} 标题行的文本样式。{@endtemplate}"},{"name":"horizontalMargin","type":"double?","desc":"{@template flutter.material.dataTable.horizontalMargin} 表边缘与每行第一个和最后一个单元格内容之间的水平边距。"},{"name":"columnSpacing","type":"double?","desc":"{@template flutter.material.dataTable.columnSpacing} 每个数据列内容之间的水平边距。{@endtemplate}"},{"name":"showCheckboxColumn","type":"bool","required":true,"desc":"{@template flutter.material.dataTable.showCheckboxColumn} 小部件是否应为可选择的行显示复选框。"},{"name":"rows","type":"List","required":true,"desc":"在每行中显示的数据(不包括包含列标题的行)。"},{"name":"dividerThickness","type":"double?","desc":"{@template flutter.material.dataTable.dividerThickness} 出现在 [TableRow] 之间的分隔符宽度。"},{"name":"showBottomBorder","type":"bool","required":true,"desc":"是否显示表底部的边框。"},{"name":"checkboxHorizontalMargin","type":"double?","desc":"{@template flutter.material.dataTable.checkboxHorizontalMargin} 复选框周围的水平边距(如果显示)。{@endtemplate}"},{"name":"border","type":"TableBorder?","desc":"绘制表的边界和内部分割时使用的样式。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":102,"localName":"数据表格","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DataTable基本使用","desc":["【columns】 : 列 【List】","【rows】 : 行 【List】"]},{"file":"node2_operation.dart","name":"DataTable的sort","desc":["【sortColumnIndex】 : 列号 【int】","【columnSpacing】 : 列间距 【double】","【sortAscending】 : 是否顺序 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_en-US.json new file mode 100644 index 000000000..75708ef89 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_en-US.json @@ -0,0 +1 @@ +{"name":"DataTableTheme","path":"/src/material/data_table_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a data table theme to descendant [DataTable] widgets.","fields":[{"name":"data","type":"DataTableThemeData","required":true,"desc":"The properties used for all descendant [DataTable] widgets."}],"id":398,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_zh-CN.json new file mode 100644 index 000000000..39bf3e1dc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"DataTableTheme","path":"/src/material/data_table_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将数据表主题应用于后代 [DataTable] 小部件。","fields":[{"name":"data","type":"DataTableThemeData","required":true,"desc":"用于所有后代 [DataTable] 小部件的属性。"}],"id":398,"localName":"DataTableTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_en-US.json new file mode 100644 index 000000000..5a9f0fd99 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_en-US.json @@ -0,0 +1 @@ +{"name":"DatePickerDialog","path":"/src/material/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A Material-style date picker dialog.","fields":[{"name":"initialDate","type":"DateTime?","desc":"The initially selected [DateTime] that the picker should display."},{"name":"firstDate","type":"DateTime","required":true,"desc":"The earliest allowable [DateTime] that the user can select."},{"name":"lastDate","type":"DateTime","required":true,"desc":"The latest allowable [DateTime] that the user can select."},{"name":"currentDate","type":"DateTime","required":true,"desc":"The [DateTime] representing today. It will be highlighted in the day grid."},{"name":"initialEntryMode","type":"DatePickerEntryMode","required":true,"desc":"The initial mode of date entry method for the date picker dialog."},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"Function to provide full control over which [DateTime] can be selected."},{"name":"cancelText","type":"String?","desc":"The text that is displayed on the cancel button."},{"name":"confirmText","type":"String?","desc":"The text that is displayed on the confirm button."},{"name":"helpText","type":"String?","desc":"The text that is displayed at the top of the header."},{"name":"initialCalendarMode","type":"DatePickerMode","required":true,"desc":"The initial display of the calendar picker."},{"name":"errorFormatText","type":"String?","desc":"The error text displayed if the entered date is not in the correct format."},{"name":"errorInvalidText","type":"String?","desc":"The error text displayed if the date is not valid."},{"name":"fieldHintText","type":"String?","desc":"The hint text displayed in the [TextField]."},{"name":"fieldLabelText","type":"String?","desc":"The label text displayed in the [TextField]."},{"name":"keyboardType","type":"TextInputType?","desc":"{@template flutter.material.datePickerDialog} The keyboard type of the [TextField]."},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the [DatePickerDialog]."},{"name":"onDatePickerModeChange","type":"ValueChanged?","desc":"Called when the [DatePickerDialog] is toggled between [DatePickerEntryMode.calendar],[DatePickerEntryMode.input]."},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToInputEntryModeIcon}"},{"name":"switchToCalendarEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToCalendarEntryModeIcon}"},{"name":"insetPadding","type":"EdgeInsets","required":true,"desc":"The amount of padding added to [MediaQueryData.viewInsets] on the outside of the dialog. This defines the minimum space between the screen's edges and the dialog."},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":399,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_zh-CN.json new file mode 100644 index 000000000..e2dc067f2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_zh-CN.json @@ -0,0 +1 @@ +{"name":"DatePickerDialog","path":"/src/material/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"Material 风格的日期选择器对话框。","fields":[{"name":"initialDate","type":"DateTime?","desc":"选择器应显示的初始选定 [DateTime]。"},{"name":"firstDate","type":"DateTime","required":true,"desc":"用户可以选择的最早允许的 [DateTime]。"},{"name":"lastDate","type":"DateTime","required":true,"desc":"用户可以选择的最晚允许的 [DateTime]。"},{"name":"currentDate","type":"DateTime","required":true,"desc":"表示今天的 [DateTime]。它将在日期网格中突出显示。"},{"name":"initialEntryMode","type":"DatePickerEntryMode","required":true,"desc":"日期选择器对话框的日期输入方法的初始模式。"},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"提供对哪个 [DateTime] 可以选择的完全控制的函数。"},{"name":"cancelText","type":"String?","desc":"取消按钮上显示的文本。"},{"name":"confirmText","type":"String?","desc":"确认按钮上显示的文本。"},{"name":"helpText","type":"String?","desc":"在标题顶部显示的文本。"},{"name":"initialCalendarMode","type":"DatePickerMode","required":true,"desc":"日历选择器的初始显示。"},{"name":"errorFormatText","type":"String?","desc":"如果输入的日期格式不正确,显示的错误文本。"},{"name":"errorInvalidText","type":"String?","desc":"如果日期无效,显示的错误文本。"},{"name":"fieldHintText","type":"String?","desc":"在 [TextField] 中显示的提示文本。"},{"name":"fieldLabelText","type":"String?","desc":"在 [TextField] 中显示的标签文本。"},{"name":"keyboardType","type":"TextInputType?","desc":"{@template flutter.material.datePickerDialog} [TextField] 的键盘类型。"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [DatePickerDialog] 状态的恢复 ID。"},{"name":"onDatePickerModeChange","type":"ValueChanged?","desc":"当 [DatePickerDialog] 在 [DatePickerEntryMode.calendar]、[DatePickerEntryMode.input] 之间切换时调用。"},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToInputEntryModeIcon}"},{"name":"switchToCalendarEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToCalendarEntryModeIcon}"},{"name":"insetPadding","type":"EdgeInsets","required":true,"desc":"添加到对话框外部 [MediaQueryData.viewInsets] 的内边距量。这定义了屏幕边缘和对话框之间的最小空间。"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":399,"localName":"DatePickerDialog","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_en-US.json new file mode 100644 index 000000000..41f9d5720 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_en-US.json @@ -0,0 +1 @@ +{"name":"DatePickerTheme","path":"/src/material/date_picker_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the visual properties for [DatePickerDialog]s in this widget's subtree.","fields":[{"name":"data","type":"DatePickerThemeData","required":true,"desc":"Specifies the visual properties used by descendant [DatePickerDialog] widgets."}],"id":400,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_zh-CN.json new file mode 100644 index 000000000..9fd66c707 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"DatePickerTheme","path":"/src/material/date_picker_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [DatePickerDialog] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"DatePickerThemeData","required":true,"desc":"指定后代 [DatePickerDialog] 小部件使用的视觉属性。"}],"id":400,"localName":"DatePickerTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_en-US.json new file mode 100644 index 000000000..e84702510 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_en-US.json @@ -0,0 +1 @@ +{"name":"DateRangePickerDialog","path":"/src/material/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A Material-style date range picker dialog.","fields":[{"name":"initialDateRange","type":"DateTimeRange?","desc":"The date range that the date range picker starts with when it opens."},{"name":"firstDate","type":"DateTime","required":true,"desc":"The earliest allowable date on the date range."},{"name":"lastDate","type":"DateTime","required":true,"desc":"The latest allowable date on the date range."},{"name":"currentDate","type":"DateTime?","desc":"The [currentDate] represents the current day (i.e. today)."},{"name":"initialEntryMode","type":"DatePickerEntryMode","required":true,"desc":"The initial date range picker entry mode."},{"name":"cancelText","type":"String?","desc":"The label on the cancel button for the text input mode."},{"name":"confirmText","type":"String?","desc":"The label on the \"OK\" button for the text input mode."},{"name":"saveText","type":"String?","desc":"The label on the save button for the fullscreen calendar mode."},{"name":"helpText","type":"String?","desc":"The label displayed at the top of the dialog."},{"name":"errorInvalidRangeText","type":"String?","desc":"The message used when the date range is invalid (e.g. start date is after end date)."},{"name":"errorFormatText","type":"String?","desc":"The message used when an input text isn't in a proper date format."},{"name":"errorInvalidText","type":"String?","desc":"The message used when an input text isn't a selectable date."},{"name":"fieldStartHintText","type":"String?","desc":"The text used to prompt the user when no text has been entered in the start field."},{"name":"fieldEndHintText","type":"String?","desc":"The text used to prompt the user when no text has been entered in the end field."},{"name":"fieldStartLabelText","type":"String?","desc":"The label for the start date text input field."},{"name":"fieldEndLabelText","type":"String?","desc":"The label for the end date text input field."},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.material.datePickerDialog}"},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the [DateRangePickerDialog]."},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToInputEntryModeIcon}"},{"name":"switchToCalendarEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToCalendarEntryModeIcon}"},{"name":"selectableDayPredicate","type":"SelectableDayForRangePredicate?","desc":"Function to provide full control over which [DateTime] can be selected."},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":339,"lever":4,"family":1,"linkIds":[135,136,137],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DateRangePickerDialog","desc":["【firstDate】 : Earliest date 【DateTime】","【lastDate】 : Latest date 【DateTime】","【initialDateRange】 : Initial range 【DateTimeRange?】","【saveText】 : Save text 【String?】"]},{"file":"node2_diy.dart","name":"Customize DateRangePickerDialog","desc":["Modify the source code of DateRangePickerDialog to display a numerical background for month entries."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_zh-CN.json new file mode 100644 index 000000000..3d889e0fb --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_zh-CN.json @@ -0,0 +1 @@ +{"name":"DateRangePickerDialog","path":"/src/material/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"Material 风格的日期范围选择器对话框。","fields":[{"name":"initialDateRange","type":"DateTimeRange?","desc":"日期范围选择器打开时开始的日期范围。"},{"name":"firstDate","type":"DateTime","required":true,"desc":"日期范围上最早允许的日期。"},{"name":"lastDate","type":"DateTime","required":true,"desc":"日期范围上最晚允许的日期。"},{"name":"currentDate","type":"DateTime?","desc":"[currentDate] 表示当前日期(即今天)。"},{"name":"initialEntryMode","type":"DatePickerEntryMode","required":true,"desc":"初始日期范围选择器输入模式。"},{"name":"cancelText","type":"String?","desc":"文本输入模式下取消按钮的标签。"},{"name":"confirmText","type":"String?","desc":"文本输入模式下\\"},{"name":"saveText","type":"String?","desc":"全屏日历模式下保存按钮的标签。"},{"name":"helpText","type":"String?","desc":"显示在对话框顶部的标签。"},{"name":"errorInvalidRangeText","type":"String?","desc":"日期范围无效时使用的消息(例如开始日期在结束日期之后)。"},{"name":"errorFormatText","type":"String?","desc":"输入文本不是正确日期格式时使用的消息。"},{"name":"errorInvalidText","type":"String?","desc":"输入文本不是可选择日期时使用的消息。"},{"name":"fieldStartHintText","type":"String?","desc":"在开始字段中未输入文本时用于提示用户的文本。"},{"name":"fieldEndHintText","type":"String?","desc":"在结束字段中未输入文本时用于提示用户的文本。"},{"name":"fieldStartLabelText","type":"String?","desc":"开始日期文本输入字段的标签。"},{"name":"fieldEndLabelText","type":"String?","desc":"结束日期文本输入字段的标签。"},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.material.datePickerDialog}"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [DateRangePickerDialog] 状态的恢复 ID。"},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToInputEntryModeIcon}"},{"name":"switchToCalendarEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToCalendarEntryModeIcon}"},{"name":"selectableDayPredicate","type":"SelectableDayForRangePredicate?","desc":"提供对哪个 [DateTime] 可以选择的完全控制的函数。"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":339,"localName":"日期范围","lever":4,"family":1,"linkIds":[135,136,137],"nodes":[{"file":"node1_base.dart","name":"DateRangePickerDialog 基本使用","desc":["【firstDate】 : 最早日期 【DateTime】","【lastDate】 : 最晚日期 【DateTime】","【initialDateRange】 : 初始范围 【DateTimeRange?】","【saveText】 : 保存文字 【String?】"]},{"file":"node2_diy.dart","name":"魔改 DateRangePickerDialog","desc":["修改 DateRangePickerDialog 源码,使得月份条目显示数值背景。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_en-US.json new file mode 100644 index 000000000..f9d03b1ef --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_en-US.json @@ -0,0 +1 @@ +{"name":"DecoratedBox","path":"/src/widgets/container.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that paints a [Decoration] either before or after its child paints.","fields":[{"name":"decoration","type":"Decoration","required":true,"desc":"What decoration to paint."},{"name":"position","type":"DecorationPosition","required":true,"desc":"Whether to paint the box decoration behind or in front of the child."}],"id":70,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DecoratedBox","desc":["【decoration】: Decoration object 【Decoration】","【position】: Foreground color (left)/Background color (right) 【DecorationPosition】"]},{"file":"node2_image.dart","name":"Shape and Image Decoration of DecoratedBox","desc":["【shape】: Shape 【BoxShape】","【image】: Background image 【DecorationImage】,"]},{"file":"node3_border.dart","name":"Border Decoration of DecoratedBox","desc":["【border】: Border 【BoxBorder】,"]},{"file":"node4_shape.dart","name":"Shape Decoration of DecoratedBox","desc":["You can specify the border shape through the ShapeDecoration object,"]},{"file":"node5_line.dart","name":"Bottom Line Decoration of DecoratedBox","desc":["You can specify the bottom line through the UnderlineTabIndicator object,"]},{"file":"node6_flutterLogo.dart","name":"FlutterLogoDecoration Decoration","desc":["You can specify Flutter icon decoration through the FlutterLogoDecoration object (not very useful),"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_zh-CN.json new file mode 100644 index 000000000..eaf0dc432 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_zh-CN.json @@ -0,0 +1 @@ +{"name":"DecoratedBox","path":"/src/widgets/container.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在其子项绘制之前或之后绘制 [Decoration] 的小部件。","fields":[{"name":"decoration","type":"Decoration","required":true,"desc":"要绘制的装饰。"},{"name":"position","type":"DecorationPosition","required":true,"desc":"是否在子项后面或前面绘制框装饰。"}],"id":70,"localName":"装饰盒","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DecoratedBox基本使用","desc":["【decoration】 : 装饰对象 【Decoration】","【position】 : 前景色(左)/后景色(右) 【DecorationPosition】"]},{"file":"node2_image.dart","name":"DecoratedBox形状和图片装饰","desc":["【shape】 : 形状 【BoxShape】","【image】 : 背景图片 【DecorationImage】,"]},{"file":"node3_border.dart","name":"DecoratedBox边线装饰","desc":["【border】 : 边线 【BoxBorder】,"]},{"file":"node4_shape.dart","name":"DecoratedBox形状装饰","desc":["通过ShapeDecoration对象可指定边线形状,"]},{"file":"node5_line.dart","name":"DecoratedBox底线装饰","desc":["通过UnderlineTabIndicator对象可指定底线,"]},{"file":"node6_flutterLogo.dart","name":"FlutterLogoDecoration装饰","desc":["通过FlutterLogoDecoration对象可指定Flutter图标装饰(并没有什么太大的作用),"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_en-US.json new file mode 100644 index 000000000..0224cd6fc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_en-US.json @@ -0,0 +1 @@ +{"name":"DecoratedBoxTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of a [DecoratedBox] that animates the different properties of its [Decoration].","fields":[{"name":"decoration","type":"Animation","required":true,"desc":"Animation of the decoration to paint."},{"name":"position","type":"DecorationPosition","required":true,"desc":"Whether to paint the box decoration behind or in front of the child."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":113,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DecoratedBoxTransition","desc":["【child】: Child component 【Widget】","【position】: Foreground/Background color 【DecorationPosition】","【decoration】: Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_zh-CN.json new file mode 100644 index 000000000..435b0ba41 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_zh-CN.json @@ -0,0 +1 @@ +{"name":"DecoratedBoxTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"[DecoratedBox] 的动画版本,对其 [Decoration] 的不同属性进行动画处理。","fields":[{"name":"decoration","type":"Animation","required":true,"desc":"要绘制的装饰动画。"},{"name":"position","type":"DecorationPosition","required":true,"desc":"是否在子项后面或前面绘制框装饰。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":113,"localName":"装饰变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DecoratedBoxTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【position】 : 前/背景色 【DecorationPosition】","【decoration】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_en-US.json b/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_en-US.json new file mode 100644 index 000000000..1b42f1a0e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_en-US.json @@ -0,0 +1 @@ +{"name":"DecoratedSliver","path":"/src/widgets/decorated_sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver widget that paints a [Decoration] either before or after its child paints.","fields":[{"name":"decoration","type":"Decoration","required":true,"desc":"What decoration to paint."},{"name":"position","type":"DecorationPosition","required":true,"desc":"Whether to paint the box decoration behind or in front of the child."}],"id":209,"lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1.dart","name":"Basic Usage of DecoratedSliver","desc":["【sliver】: Child component 【Widget?】","【decoration】: Decoration object 【Decoration】","【position】: Decoration position 【DecorationPosition】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_zh-CN.json new file mode 100644 index 000000000..f53c9108d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_zh-CN.json @@ -0,0 +1 @@ +{"name":"DecoratedSliver","path":"/src/widgets/decorated_sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在其子项绘制之前或之后绘制 [Decoration] 的 sliver 小部件。","fields":[{"name":"decoration","type":"Decoration","required":true,"desc":"要绘制的装饰。"},{"name":"position","type":"DecorationPosition","required":true,"desc":"是否在子项后面或前面绘制框装饰。"}],"id":209,"localName":"装饰滑片","lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1.dart","name":"DecoratedSliver 基本使用","desc":["【sliver】 : 孩子组件 【Widget?】","【decoration】 : 装饰对象 【Decoration】","【position】 : 装饰位置 【DecorationPosition】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_en-US.json new file mode 100644 index 000000000..72867325f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_en-US.json @@ -0,0 +1 @@ +{"name":"DefaultAssetBundle","path":"/src/widgets/basic.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" A widget that determines the default asset bundle for its descendants.","fields":[{"name":"bundle","type":"AssetBundle","required":true,"desc":"The bundle to use as a default."}],"id":320,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to DefaultAssetBundle","desc":["【bundle】: *Resource Bundle 【AssetBundle】","【child】: *Child Widget 【Widget】","We can define our own DefaultAssetBundle for use by subsequent nodes, or we can directly use the default one. This case demonstrates loading and displaying a resource image using the DefaultAssetBundle provided by the framework."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_zh-CN.json new file mode 100644 index 000000000..caac12e30 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_zh-CN.json @@ -0,0 +1 @@ +{"name":"DefaultAssetBundle","path":"/src/widgets/basic.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为其后代确定默认资产包的小部件。","fields":[{"name":"bundle","type":"AssetBundle","required":true,"desc":"用作默认值的包。"}],"id":320,"localName":"默认资源包","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DefaultAssetBundle 介绍","desc":["【bundle】 : *资源包 【AssetBundle】","【child】 : *子组件 【Widget】","我们可以定义自己的 DefaultAssetBundle 来供后续节点使用,也可以直接使用默认的。该案例演示通过框架提供的 DefaultAssetBundle 加载一张资源图片进行显示。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_en-US.json new file mode 100644 index 000000000..2acfb4165 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_en-US.json @@ -0,0 +1 @@ +{"name":"DefaultSelectionStyle","path":"/src/widgets/default_selection_style.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" The selection style to apply to descendant [EditableText] widgets which don't have an explicit style.","fields":[{"name":"cursorColor","type":"Color?","desc":"The color of the text field's cursor."},{"name":"selectionColor","type":"Color?","desc":"The background color of selected text."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The [MouseCursor] for mouse pointers hovering over selectable Text widgets."}],"id":401,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_zh-CN.json new file mode 100644 index 000000000..c863a2b07 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_zh-CN.json @@ -0,0 +1 @@ +{"name":"DefaultSelectionStyle","path":"/src/widgets/default_selection_style.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"应用于没有显式样式的后代 [EditableText] 小部件的选择样式。","fields":[{"name":"cursorColor","type":"Color?","desc":"文本字段光标的颜色。"},{"name":"selectionColor","type":"Color?","desc":"选定文本的背景颜色。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"悬停在可选择文本小部件上的鼠标指针的 [MouseCursor]。"}],"id":401,"localName":"DefaultSelectionStyle","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_en-US.json new file mode 100644 index 000000000..4855c980a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_en-US.json @@ -0,0 +1 @@ +{"name":"DefaultTabController","path":"/src/material/tab_controller.dart","parents":["StatefulWidget","Widget"],"desc":" The [TabController] for descendant widgets that don't specify one explicitly.","fields":[{"name":"length","type":"int","required":true,"desc":"The total number of tabs."},{"name":"initialIndex","type":"int","required":true,"desc":"The initial index of the selected tab."},{"name":"animationDuration","type":"Duration?","desc":"Controls the duration of DefaultTabController and TabBarView animations."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":230,"lever":3,"family":1,"linkIds":[148,59],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DefaultTabController","desc":["【length】: Number of tabs 【int】","【initialIndex】: Initial tab index 【int】","【child】: Component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_zh-CN.json new file mode 100644 index 000000000..dbd0417e8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_zh-CN.json @@ -0,0 +1 @@ +{"name":"DefaultTabController","path":"/src/material/tab_controller.dart","parents":["StatefulWidget","Widget"],"desc":"未明确指定的后代小部件的 [TabController]。","fields":[{"name":"length","type":"int","required":true,"desc":"标签的总数。"},{"name":"initialIndex","type":"int","required":true,"desc":"选定标签的初始索引。"},{"name":"animationDuration","type":"Duration?","desc":"控制 DefaultTabController 和 TabBarView 动画的持续时间。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":230,"localName":"默认页签控制器","lever":3,"family":1,"linkIds":[148,59],"nodes":[{"file":"node1_base.dart","name":"DefaultTabController基本使用","desc":["【length】 : 页签数量 【int】","【initialIndex】 : 初始页签索引 【int】","【child】 : 组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_en-US.json new file mode 100644 index 000000000..d726ccf5e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_en-US.json @@ -0,0 +1 @@ +{"name":"DefaultTextEditingShortcuts","path":"/src/widgets/default_text_editing_shortcuts.dart","parents":["StatelessWidget","Widget"],"desc":" A widget with the shortcuts used for the default text editing behavior.","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":402,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_zh-CN.json new file mode 100644 index 000000000..2e4990741 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_zh-CN.json @@ -0,0 +1 @@ +{"name":"DefaultTextEditingShortcuts","path":"/src/widgets/default_text_editing_shortcuts.dart","parents":["StatelessWidget","Widget"],"desc":"具有用于默认文本编辑行为的快捷键的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":402,"localName":"DefaultTextEditingShortcuts","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_en-US.json new file mode 100644 index 000000000..f2dc1d524 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_en-US.json @@ -0,0 +1 @@ +{"name":"DefaultTextHeightBehavior","path":"/src/widgets/text.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" The [TextHeightBehavior] that will apply to descendant [Text] and [EditableText] widgets which have not explicitly set [Text.textHeightBehavior].","fields":[{"name":"textHeightBehavior","type":"TextHeightBehavior","required":true,"desc":"{@macro dart.ui.textHeightBehavior}"}],"id":403,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_zh-CN.json new file mode 100644 index 000000000..aeced7fe6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_zh-CN.json @@ -0,0 +1 @@ +{"name":"DefaultTextHeightBehavior","path":"/src/widgets/text.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"将应用于未明确设置 [Text.textHeightBehavior] 的后代 [Text] 和 [EditableText] 小部件的 [TextHeightBehavior]。","fields":[{"name":"textHeightBehavior","type":"TextHeightBehavior","required":true,"desc":"{@macro dart.ui.textHeightBehavior}"}],"id":403,"localName":"DefaultTextHeightBehavior","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_en-US.json new file mode 100644 index 000000000..868b996b9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_en-US.json @@ -0,0 +1 @@ +{"name":"DefaultTextStyle","path":"/src/widgets/text.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" The text style to apply to descendant [Text] widgets which don't have an explicit style.","fields":[{"name":"style","type":"TextStyle","required":true,"desc":"The text style to apply."},{"name":"textAlign","type":"TextAlign?","desc":"How each line of text in the Text widget should be aligned horizontally."},{"name":"softWrap","type":"bool","required":true,"desc":"Whether the text should break at soft line breaks."},{"name":"overflow","type":"TextOverflow","required":true,"desc":"How visual overflow should be handled."},{"name":"maxLines","type":"int?","desc":"An optional maximum number of lines for the text to span, wrapping if necessary. If the text exceeds the given number of lines, it will be truncated according to [overflow]."},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"The strategy to use when calculating the width of the Text."},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"}],"id":324,"lever":3,"family":5,"linkIds":[2,114,124],"nodes":[{"file":"node1_base.dart","name":"DefaultTextStyle Usage","desc":["The properties are the same as Text, see details there.","Its function is: Set the default text style to be applied to [descendant widgets], note that descendant widgets can also specify their own styles."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_zh-CN.json new file mode 100644 index 000000000..0b49c96cd --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_zh-CN.json @@ -0,0 +1 @@ +{"name":"DefaultTextStyle","path":"/src/widgets/text.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"应用于没有显式样式的后代 [Text] 小部件的文本样式。","fields":[{"name":"style","type":"TextStyle","required":true,"desc":"要应用的文本样式。"},{"name":"textAlign","type":"TextAlign?","desc":"Text 小部件中每行文本应如何水平对齐。"},{"name":"softWrap","type":"bool","required":true,"desc":"文本是否应在软换行符处换行。"},{"name":"overflow","type":"TextOverflow","required":true,"desc":"应如何处理视觉溢出。"},{"name":"maxLines","type":"int?","desc":"文本跨越的可选最大行数,必要时换行。如果文本超过给定的行数,将根据 [overflow] 截断。"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"计算文本宽度时使用的策略。"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"}],"id":324,"localName":"默认字体样式","lever":3,"family":5,"linkIds":[2,114,124],"nodes":[{"file":"node1_base.dart","name":"DefaultTextStyle使用","desc":["各属性同Text,详见之。","其功能是: 设置默认的文字样式应用于【后代组件】,注意后代组件也可以指定自身的样式"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_en-US.json new file mode 100644 index 000000000..f5c876589 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_en-US.json @@ -0,0 +1 @@ +{"name":"DefaultTextStyleTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of a [DefaultTextStyle] that animates the different properties of its [TextStyle].","fields":[{"name":"textAlign","type":"TextAlign?","desc":"How the text should be aligned horizontally."},{"name":"softWrap","type":"bool","required":true,"desc":"Whether the text should break at soft line breaks."},{"name":"overflow","type":"TextOverflow","required":true,"desc":"How visual overflow should be handled."},{"name":"maxLines","type":"int?","desc":"An optional maximum number of lines for the text to span, wrapping if necessary."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":114,"lever":3,"family":1,"linkIds":[124,324],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DefaultTextStyleTransition","desc":["【child】 : Child component 【Widget】","【textAlign】 : Text alignment 【TextAlign】","【softWrap】 : Whether to wrap 【bool】","【maxLines】 : Maximum number of lines 【int】","【overflow】 : Overflow mode 【TextOverflow】","【style】 : Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_zh-CN.json new file mode 100644 index 000000000..848cae741 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_zh-CN.json @@ -0,0 +1 @@ +{"name":"DefaultTextStyleTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"[DefaultTextStyle] 的动画版本,对其 [TextStyle] 的不同属性进行动画处理。","fields":[{"name":"textAlign","type":"TextAlign?","desc":"文本应如何水平对齐。"},{"name":"softWrap","type":"bool","required":true,"desc":"文本是否应在软换行符处换行。"},{"name":"overflow","type":"TextOverflow","required":true,"desc":"应如何处理视觉溢出。"},{"name":"maxLines","type":"int?","desc":"文本跨越的可选最大行数,必要时换行。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":114,"localName":"文字样式变换","lever":3,"family":1,"linkIds":[124,324],"nodes":[{"file":"node1_base.dart","name":"DefaultTextStyleTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【textAlign】 : 文字对齐方式 【TextAlign】","【softWrap】 : 是否包裹 【bool】","【maxLines】 : 最大行数 【int】","【overflow】 : 溢出模式 【TextOverflow】","【style】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_en-US.json new file mode 100644 index 000000000..1160c5640 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_en-US.json @@ -0,0 +1 @@ +{"name":"DesktopTextSelectionToolbar","path":"/src/material/desktop_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" A Material-style desktop text selection toolbar.","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@template flutter.material.DesktopTextSelectionToolbar.anchor} The point where the toolbar will attempt to position itself as closely as possible. {@endtemplate}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"}],"id":404,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_zh-CN.json new file mode 100644 index 000000000..2ba4efea0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_zh-CN.json @@ -0,0 +1 @@ +{"name":"DesktopTextSelectionToolbar","path":"/src/material/desktop_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"Material 风格的桌面文本选择工具栏。","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@template flutter.material.DesktopTextSelectionToolbar.anchor} 工具栏将尝试尽可能接近定位自己的点。{@endtemplate}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"}],"id":404,"localName":"DesktopTextSelectionToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_en-US.json b/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_en-US.json new file mode 100644 index 000000000..3fc6f17d1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_en-US.json @@ -0,0 +1 @@ +{"name":"DesktopTextSelectionToolbarButton","path":"/src/material/desktop_text_selection_toolbar_button.dart","parents":["StatelessWidget","Widget"],"desc":" A [TextButton] for the Material desktop text selection toolbar.","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"{@macro flutter.material.TextSelectionToolbarTextButton.onPressed}"},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.material.TextSelectionToolbarTextButton.child}"}],"id":405,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_zh-CN.json new file mode 100644 index 000000000..941810ca0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"DesktopTextSelectionToolbarButton","path":"/src/material/desktop_text_selection_toolbar_button.dart","parents":["StatelessWidget","Widget"],"desc":"Material 桌面文本选择工具栏的 [TextButton]。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"{@macro flutter.material.TextSelectionToolbarTextButton.onPressed}"},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.material.TextSelectionToolbarTextButton.child}"}],"id":405,"localName":"DesktopTextSelectionToolbarButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_en-US.json b/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_en-US.json new file mode 100644 index 000000000..9458a63dd --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_en-US.json @@ -0,0 +1 @@ +{"name":"Dialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design dialog.","fields":[{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.material.dialog.backgroundColor} The background color of the surface of this [Dialog]."},{"name":"elevation","type":"double?","desc":"{@template flutter.material.dialog.elevation} The z-coordinate of this [Dialog]."},{"name":"shadowColor","type":"Color?","desc":"{@template flutter.material.dialog.shadowColor} The color used to paint a drop shadow under the dialog's [Material], which reflects the dialog's [elevation]."},{"name":"surfaceTintColor","type":"Color?","desc":"{@template flutter.material.dialog.surfaceTintColor} The color used as a surface tint overlay on the dialog's background color, which reflects the dialog's [elevation]."},{"name":"insetAnimationDuration","type":"Duration","required":true,"desc":"{@template flutter.material.dialog.insetAnimationDuration} The duration of the animation to show when the system keyboard intrudes into the space that the dialog is placed in."},{"name":"insetAnimationCurve","type":"Curve","required":true,"desc":"{@template flutter.material.dialog.insetAnimationCurve} The curve to use for the animation shown when the system keyboard intrudes into the space that the dialog is placed in."},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@template flutter.material.dialog.insetPadding} The amount of padding added to [MediaQueryData.viewInsets] on the outside of the dialog. This defines the minimum space between the screen's edges and the dialog."},{"name":"clipBehavior","type":"Clip?","desc":"{@template flutter.material.dialog.clipBehavior} Controls how the contents of the dialog are clipped (or not) to the given [shape]."},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.dialog.shape} The shape of this dialog's border."},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@template flutter.material.dialog.alignment} How to align the [Dialog]."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"semanticsRole","type":"SemanticsRole","required":true,"desc":"The role this dialog represent in assist technologies."}],"id":126,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Dialog","desc":["【child】: Animation icon data 【Widget】","【elevation】: Shadow depth 【double】","【backgroundColor】: Background color 【Color】","【shape】: Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_zh-CN.json new file mode 100644 index 000000000..e8e8deb4d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_zh-CN.json @@ -0,0 +1 @@ +{"name":"Dialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 对话框。","fields":[{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.material.dialog.backgroundColor} 此 [Dialog] 表面的背景颜色。"},{"name":"elevation","type":"double?","desc":"{@template flutter.material.dialog.elevation} 此 [Dialog] 的 z 坐标。"},{"name":"shadowColor","type":"Color?","desc":"{@template flutter.material.dialog.shadowColor} 用于在对话框的 [Material] 下绘制投影的颜色,反映对话框的 [elevation]。"},{"name":"surfaceTintColor","type":"Color?","desc":"{@template flutter.material.dialog.surfaceTintColor} 用作对话框背景颜色上的表面色调叠加的颜色,反映对话框的 [elevation]。"},{"name":"insetAnimationDuration","type":"Duration","required":true,"desc":"{@template flutter.material.dialog.insetAnimationDuration} 当系统键盘侵入对话框放置空间时显示的动画持续时间。"},{"name":"insetAnimationCurve","type":"Curve","required":true,"desc":"{@template flutter.material.dialog.insetAnimationCurve} 当系统键盘侵入对话框放置空间时显示的动画使用的曲线。"},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@template flutter.material.dialog.insetPadding} 添加到对话框外部 [MediaQueryData.viewInsets] 的内边距量。这定义了屏幕边缘和对话框之间的最小空间。"},{"name":"clipBehavior","type":"Clip?","desc":"{@template flutter.material.dialog.clipBehavior} 控制对话框内容如何裁剪(或不裁剪)到给定的 [shape]。"},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.dialog.shape} 此对话框边框的形状。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@template flutter.material.dialog.alignment} 如何对齐 [Dialog]。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"semanticsRole","type":"SemanticsRole","required":true,"desc":"此对话框在辅助技术中代表的角色。"}],"id":126,"localName":"对话框","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Dialog基本使用","desc":["【child】 : 动画图标数据 【Widget】","【elevation】 : 影深 【double】","【backgroundColor】 : 背景色 【Color】","【shape】 : 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_en-US.json new file mode 100644 index 000000000..cd4129add --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_en-US.json @@ -0,0 +1 @@ +{"name":"DialogTheme","path":"/src/material/dialog_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Defines a theme for [Dialog] widgets.","fields":[],"id":406,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_zh-CN.json new file mode 100644 index 000000000..2d756f412 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"DialogTheme","path":"/src/material/dialog_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为 [Dialog] 小部件定义主题。","fields":[],"id":406,"localName":"DialogTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_en-US.json b/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_en-US.json new file mode 100644 index 000000000..fc2b114a6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_en-US.json @@ -0,0 +1 @@ +{"name":"Directionality","path":"/src/widgets/basic.dart","parents":["_UbiquitousInheritedWidget","InheritedWidget","ProxyWidget","Widget"],"desc":" A widget that determines the ambient directionality of text and text-direction-sensitive render objects.","fields":[{"name":"textDirection","type":"TextDirection","required":true,"desc":"The text direction for this subtree."}],"id":319,"lever":2,"family":5,"linkIds":[2,94],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Directionality","desc":["【textDirection】: Text arrangement direction 【TextDirection】","【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_zh-CN.json new file mode 100644 index 000000000..040557780 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_zh-CN.json @@ -0,0 +1 @@ +{"name":"Directionality","path":"/src/widgets/basic.dart","parents":["_UbiquitousInheritedWidget","InheritedWidget","ProxyWidget","Widget"],"desc":"确定文本和文本方向敏感渲染对象的环境方向性的小部件。","fields":[{"name":"textDirection","type":"TextDirection","required":true,"desc":"此子树的文本方向。"}],"id":319,"localName":"定向性","lever":2,"family":5,"linkIds":[2,94],"nodes":[{"file":"node1_base.dart","name":"Directionality基本使用","desc":["【textDirection】 : 文字排列方向 【TextDirection】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_en-US.json b/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_en-US.json new file mode 100644 index 000000000..df3a87371 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_en-US.json @@ -0,0 +1 @@ +{"name":"Dismissible","path":"/src/widgets/dismissible.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that can be dismissed by dragging in the indicated [direction].","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"background","type":"Widget?","desc":"A widget that is stacked behind the child. If secondaryBackground is also specified then this widget only appears when the child has been dragged down or to the right."},{"name":"secondaryBackground","type":"Widget?","desc":"A widget that is stacked behind the child and is exposed when the child has been dragged up or to the left. It may only be specified when background has also been specified."},{"name":"confirmDismiss","type":"ConfirmDismissCallback?","desc":"Gives the app an opportunity to confirm or veto a pending dismissal."},{"name":"onResize","type":"VoidCallback?","desc":"Called when the widget changes size (i.e., when contracting before being dismissed)."},{"name":"onDismissed","type":"DismissDirectionCallback?","desc":"Called when the widget has been dismissed, after finishing resizing."},{"name":"direction","type":"DismissDirection","required":true,"desc":"The direction in which the widget can be dismissed."},{"name":"resizeDuration","type":"Duration?","desc":"The amount of time the widget will spend contracting before [onDismissed] is called."},{"name":"dismissThresholds","type":"Map","required":true,"desc":"The offset threshold the item has to be dragged in order to be considered dismissed."},{"name":"movementDuration","type":"Duration","required":true,"desc":"Defines the duration for card to dismiss or to come back to original position if not dismissed."},{"name":"crossAxisEndOffset","type":"double","required":true,"desc":"Defines the end offset across the main axis after the card is dismissed."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"Determines the way that drag start behavior is handled."},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit tests."},{"name":"onUpdate","type":"DismissUpdateCallback?","desc":"Called when the dismissible widget has been dragged."}],"id":176,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Dismissible","desc":["【child】: Child component 【Widget】","【background】: Left bottom 【Widget】","【secondaryBackground】: Right bottom 【Widget】","【key】: Key 【Key】","【confirmDismiss】: Confirmation callback 【DismissDirectionCallback】","【onDismissed】: Dismissal callback 【DismissDirectionCallback】"]},{"file":"node2_direction.dart","name":"Basic Usage of Dismissible","desc":["【direction】: Direction 【DismissDirection】","【crossAxisEndOffset】: Offset 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_zh-CN.json new file mode 100644 index 000000000..a17d0bd16 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_zh-CN.json @@ -0,0 +1 @@ +{"name":"Dismissible","path":"/src/widgets/dismissible.dart","parents":["StatefulWidget","Widget"],"desc":"可以通过在指定 [direction] 中拖动来关闭的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"background","type":"Widget?","desc":"堆叠在子项后面的小部件。如果还指定了 secondaryBackground,则此小部件仅在子项被向下或向右拖动时出现。"},{"name":"secondaryBackground","type":"Widget?","desc":"堆叠在子项后面的小部件,当子项被向上或向左拖动时暴露。只有在也指定了 background 时才能指定。"},{"name":"confirmDismiss","type":"ConfirmDismissCallback?","desc":"给应用程序一个确认或否决待定关闭的机会。"},{"name":"onResize","type":"VoidCallback?","desc":"当小部件改变大小时调用(即在被关闭之前收缩时)。"},{"name":"onDismissed","type":"DismissDirectionCallback?","desc":"当小部件被关闭时调用,在完成调整大小后。"},{"name":"direction","type":"DismissDirection","required":true,"desc":"小部件可以被关闭的方向。"},{"name":"resizeDuration","type":"Duration?","desc":"小部件在调用 [onDismissed] 之前收缩所花费的时间。"},{"name":"dismissThresholds","type":"Map","required":true,"desc":"项目必须被拖动的偏移阈值,以便被认为已关闭。"},{"name":"movementDuration","type":"Duration","required":true,"desc":"定义卡片关闭或如果未关闭则返回原始位置的持续时间。"},{"name":"crossAxisEndOffset","type":"double","required":true,"desc":"定义卡片被关闭后跨主轴的结束偏移量。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"确定拖动开始行为的处理方式。"},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"在命中测试期间如何表现。"},{"name":"onUpdate","type":"DismissUpdateCallback?","desc":"当可关闭小部件被拖动时调用。"}],"id":176,"localName":"滑动消失","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Dismissible基本使用","desc":["【child】 : 子组件 【Widget】","【background】 : 左底 【Widget】","【secondaryBackground】 : 右底 【Widget】","【key】 : 键 【Key】","【confirmDismiss】 : 确认回调 【DismissDirectionCallback】","【onDismissed】 : 消失回调 【DismissDirectionCallback】,"]},{"file":"node2_direction.dart","name":"Dismissible基本使用","desc":["【direction】 : 方向 【DismissDirection】","【crossAxisEndOffset】 : 偏移 【double】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_en-US.json b/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_en-US.json new file mode 100644 index 000000000..ca0d12b56 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_en-US.json @@ -0,0 +1 @@ +{"name":"DisplayFeatureSubScreen","path":"/src/widgets/display_feature_sub_screen.dart","parents":["StatelessWidget","Widget"],"desc":" Positions [child] such that it avoids overlapping any [DisplayFeature] that splits the screen into sub-screens.","fields":[{"name":"anchorPoint","type":"Offset?","desc":"{@template flutter.widgets.DisplayFeatureSubScreen.anchorPoint} The anchor point used to pick the closest sub-screen."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":407,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_zh-CN.json new file mode 100644 index 000000000..6eb040da9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_zh-CN.json @@ -0,0 +1 @@ +{"name":"DisplayFeatureSubScreen","path":"/src/widgets/display_feature_sub_screen.dart","parents":["StatelessWidget","Widget"],"desc":"定位 [child] 以避免与将屏幕分割为子屏幕的任何 [DisplayFeature] 重叠。","fields":[{"name":"anchorPoint","type":"Offset?","desc":"{@template flutter.widgets.DisplayFeatureSubScreen.anchorPoint} 用于选择最近子屏幕的锚点。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":407,"localName":"DisplayFeatureSubScreen","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Divider/Divider_en-US.json b/modules/widget_system/widgets/doc/widgets/Divider/Divider_en-US.json new file mode 100644 index 000000000..71d0d26d9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Divider/Divider_en-US.json @@ -0,0 +1 @@ +{"name":"Divider","path":"/src/material/divider.dart","parents":["StatelessWidget","Widget"],"desc":" A thin horizontal line, with padding on either side.","fields":[{"name":"height","type":"double?","desc":"The divider's height extent."},{"name":"thickness","type":"double?","desc":"The thickness of the line drawn within the divider."},{"name":"indent","type":"double?","desc":"The amount of empty space to the leading edge of the divider."},{"name":"endIndent","type":"double?","desc":"The amount of empty space to the trailing edge of the divider."},{"name":"radius","type":"BorderRadiusGeometry?","desc":"The amount of radius for the border of the divider."},{"name":"color","type":"Color?","desc":"{@template flutter.material.Divider.color} The color to use when painting the line."}],"id":34,"lever":2,"family":0,"linkIds":[35,329],"nodes":[{"file":"node1_base.dart","name":"Divider Color and Thickness","desc":["【color】: Color 【Color】","【thickness】: Line thickness 【double】"]},{"file":"node2_height.dart","name":"Divider Height and Indent","desc":["【indent】: Front indent length 【double】","【endIndent】: Rear indent length 【double】","【height】: Placeholder height 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Divider/Divider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Divider/Divider_zh-CN.json new file mode 100644 index 000000000..f2a152b66 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Divider/Divider_zh-CN.json @@ -0,0 +1 @@ +{"name":"Divider","path":"/src/material/divider.dart","parents":["StatelessWidget","Widget"],"desc":"两侧带内边距的细水平线。","fields":[{"name":"height","type":"double?","desc":"分隔符的高度范围。"},{"name":"thickness","type":"double?","desc":"分隔符内绘制线条的厚度。"},{"name":"indent","type":"double?","desc":"分隔符前缘的空白空间量。"},{"name":"endIndent","type":"double?","desc":"分隔符后缘的空白空间量。"},{"name":"radius","type":"BorderRadiusGeometry?","desc":"分隔符边框的半径量。"},{"name":"color","type":"Color?","desc":"{@template flutter.material.Divider.color} 绘制线条时使用的颜色。"}],"id":34,"localName":"水平分割线","lever":2,"family":0,"linkIds":[35,329],"nodes":[{"file":"node1_base.dart","name":"Divider颜色和粗细","desc":["【color】: 颜色 【Color】","【thickness】: 线粗细 【double】"]},{"file":"node2_height.dart","name":"Divider高度和空缺","desc":["【indent】: 前面空缺长度 【double】","【endIndent】: 后面空缺长度 【double】","【height】: 占位高 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_en-US.json new file mode 100644 index 000000000..ae9e0425c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_en-US.json @@ -0,0 +1 @@ +{"name":"DividerTheme","path":"/src/material/divider_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for [Divider]s, [VerticalDivider]s, dividers between [ListTile]s, and dividers between rows in [DataTable]s in this widget's subtree.","fields":[{"name":"data","type":"DividerThemeData","required":true,"desc":"The properties for descendant [Divider]s, [VerticalDivider]s, dividers between [ListTile]s, and dividers between rows in [DataTable]s."}],"id":329,"lever":3,"family":5,"linkIds":[34,35],"nodes":[{"file":"node1_base.dart","name":"Using DividerTheme","desc":["The property parameters are similar to Divider. You can obtain the divider theme data through DividerTheme.of,","and you can also set default styles for the dividers of DividerTheme【descendants】, including color, thickness, height, etc."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_zh-CN.json new file mode 100644 index 000000000..436ba778c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"DividerTheme","path":"/src/material/divider_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [Divider]、[VerticalDivider]、[ListTile] 之间的分隔符和 [DataTable] 中行之间的分隔符定义配置的继承小部件。","fields":[{"name":"data","type":"DividerThemeData","required":true,"desc":"后代 [Divider]、[VerticalDivider]、[ListTile] 之间的分隔符和 [DataTable] 中行之间的分隔符的属性。"}],"id":329,"localName":"分割线样式","lever":3,"family":5,"linkIds":[34,35],"nodes":[{"file":"node1_base.dart","name":"DividerTheme使用","desc":["属性参数与Divider类似,可以通过DividerTheme.of获取分割线主题数据,\"","也可以为DividerTheme【后代】的分割线设置默认样式,包括颜色、粗细、高度等。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_en-US.json b/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_en-US.json new file mode 100644 index 000000000..446642fde --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_en-US.json @@ -0,0 +1 @@ +{"name":"DragBoundary","path":"/src/widgets/drag_boundary.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Provides a [DragBoundaryDelegate] for its descendants whose bounds are those defined by this widget.","fields":[],"id":408,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_zh-CN.json new file mode 100644 index 000000000..004435ac2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_zh-CN.json @@ -0,0 +1 @@ +{"name":"DragBoundary","path":"/src/widgets/drag_boundary.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为其后代提供 [DragBoundaryDelegate],其边界由此小部件定义。","fields":[],"id":408,"localName":"DragBoundary","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_en-US.json b/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_en-US.json new file mode 100644 index 000000000..485052c1c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_en-US.json @@ -0,0 +1 @@ +{"name":"DragTarget","path":"/src/widgets/drag_target.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that receives data when a [Draggable] widget is dropped.","fields":[{"name":"builder","type":"DragTargetBuilder","required":true,"desc":"Called to build the contents of this widget."},{"name":"onWillAccept","type":"DragTargetWillAccept?","desc":"Called to determine whether this widget is interested in receiving a given piece of data being dragged over this drag target."},{"name":"onWillAcceptWithDetails","type":"DragTargetWillAcceptWithDetails?","desc":"Called to determine whether this widget is interested in receiving a given piece of data being dragged over this drag target."},{"name":"onAccept","type":"DragTargetAccept?","desc":"Called when an acceptable piece of data was dropped over this drag target. It will not be called if `data` is `null`."},{"name":"onAcceptWithDetails","type":"DragTargetAcceptWithDetails?","desc":"Called when an acceptable piece of data was dropped over this drag target. It will not be called if `data` is `null`."},{"name":"onLeave","type":"DragTargetLeave?","desc":"Called when a given piece of data being dragged over this target leaves the target."},{"name":"onMove","type":"DragTargetMove?","desc":"Called when a [Draggable] moves within this [DragTarget]. It will not be called if `data` is `null`."},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit testing."}],"id":104,"lever":4,"family":1,"linkIds":[103,105],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DragTarget","desc":["【builder】: Component builder 【DragTargetBuilder】","【onWillAccept】: When dragging in 【Function(T)】","【onAccept】: Drag success 【Function(T)】","【onLeave】: Drag in and then out 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_zh-CN.json new file mode 100644 index 000000000..968f0e528 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_zh-CN.json @@ -0,0 +1 @@ +{"name":"DragTarget","path":"/src/widgets/drag_target.dart","parents":["StatefulWidget","Widget"],"desc":"当 [Draggable] 小部件被放下时接收数据的小部件。","fields":[{"name":"builder","type":"DragTargetBuilder","required":true,"desc":"调用以构建此小部件的内容。"},{"name":"onWillAccept","type":"DragTargetWillAccept?","desc":"调用以确定此小部件是否有兴趣接收在此拖动目标上拖动的给定数据片段。"},{"name":"onWillAcceptWithDetails","type":"DragTargetWillAcceptWithDetails?","desc":"调用以确定此小部件是否有兴趣接收在此拖动目标上拖动的给定数据片段。"},{"name":"onAccept","type":"DragTargetAccept?","desc":"当可接受的数据片段被放在此拖动目标上时调用。如果 `data` 为 `null`,则不会调用。"},{"name":"onAcceptWithDetails","type":"DragTargetAcceptWithDetails?","desc":"当可接受的数据片段被放在此拖动目标上时调用。如果 `data` 为 `null`,则不会调用。"},{"name":"onLeave","type":"DragTargetLeave?","desc":"当在此目标上拖动的给定数据片段离开目标时调用。"},{"name":"onMove","type":"DragTargetMove?","desc":"当 [Draggable] 在此 [DragTarget] 内移动时调用。如果 `data` 为 `null`,则不会调用。"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"在命中测试期间如何表现。"}],"id":104,"localName":"拖拽目标","lever":4,"family":1,"linkIds":[103,105],"nodes":[{"file":"node1_base.dart","name":"DragTarget基本使用","desc":["【builder】 : 组件构造器 【DragTargetBuilder】","【onWillAccept】 : 拖入时 【Function(T)】","【onAccept】 : 拖拽成功 【Function(T)】","【onLeave】 : 拖入再脱出 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_en-US.json b/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_en-US.json new file mode 100644 index 000000000..bb97b593c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_en-US.json @@ -0,0 +1 @@ +{"name":"Draggable","path":"/src/widgets/drag_target.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that can be dragged from to a [DragTarget].","fields":[{"name":"data","type":"T?","desc":"The data that will be dropped by this draggable."},{"name":"axis","type":"Axis?","desc":"The [Axis] to restrict this draggable's movement, if specified."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"childWhenDragging","type":"Widget?","desc":"The widget to display instead of [child] when one or more drags are under way."},{"name":"feedback","type":"Widget","required":true,"desc":"The widget to show under the pointer when a drag is under way."},{"name":"feedbackOffset","type":"Offset","required":true,"desc":"The feedbackOffset can be used to set the hit test target point for the purposes of finding a drag target. It is especially useful if the feedback is transformed compared to the child."},{"name":"dragAnchorStrategy","type":"DragAnchorStrategy","required":true,"desc":"A strategy that is used by this draggable to get the anchor offset when it is dragged."},{"name":"ignoringFeedbackSemantics","type":"bool","required":true,"desc":"Whether the semantics of the [feedback] widget is ignored when building the semantics tree."},{"name":"ignoringFeedbackPointer","type":"bool","required":true,"desc":"Whether the [feedback] widget is ignored during hit testing."},{"name":"affinity","type":"Axis?","desc":"Controls how this widget competes with other gestures to initiate a drag."},{"name":"maxSimultaneousDrags","type":"int?","desc":"How many simultaneous drags to support."},{"name":"onDragStarted","type":"VoidCallback?","desc":"Called when the draggable starts being dragged."},{"name":"onDragUpdate","type":"DragUpdateCallback?","desc":"Called when the draggable is dragged."},{"name":"onDraggableCanceled","type":"DraggableCanceledCallback?","desc":"Called when the draggable is dropped without being accepted by a [DragTarget]."},{"name":"onDragCompleted","type":"VoidCallback?","desc":"Called when the draggable is dropped and accepted by a [DragTarget]."},{"name":"onDragEnd","type":"DragEndCallback?","desc":"Called when the draggable is dropped."},{"name":"rootOverlay","type":"bool","required":true,"desc":"Whether the feedback widget will be put on the root [Overlay]."},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit test."},{"name":"allowedButtonsFilter","type":"AllowedButtonsFilter?","desc":"{@macro flutter.gestures.multidrag._allowedButtonsFilter}"}],"id":103,"lever":4,"family":1,"linkIds":[104,105],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Draggable","desc":["【child】 : child 【Widget】","【feedback】 : child during dragging 【Widget】","【axis】 : axis of dragging 【Axis】"]},{"file":"node2_data.dart","name":"Combined Usage of Draggable and DragTarget","desc":["【data】 : data 【T】","【onDragStarted】 : start dragging 【Function()】","【onDragEnd】 : end dragging 【Function(DraggableDetails)】","【onDragCompleted】 : drag completed 【Function()】","【onDraggableCanceled】 : drag canceled 【Function(Velocity,Offset)】","【onChanged】 : callback when changed 【Function(T)】"]},{"file":"node3_use.dart","name":"Other Usages of Draggable","desc":["Some events can be handled based on dragging, such as deletion, querying, pop-ups, etc."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_zh-CN.json new file mode 100644 index 000000000..6e4ad63b2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_zh-CN.json @@ -0,0 +1 @@ +{"name":"Draggable","path":"/src/widgets/drag_target.dart","parents":["StatefulWidget","Widget"],"desc":"可以从中拖动到 [DragTarget] 的小部件。","fields":[{"name":"data","type":"T?","desc":"此可拖动项将放下的数据。"},{"name":"axis","type":"Axis?","desc":"限制此可拖动项移动的 [Axis](如果指定)。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"childWhenDragging","type":"Widget?","desc":"当一个或多个拖动正在进行时显示的小部件,而不是 [child]。"},{"name":"feedback","type":"Widget","required":true,"desc":"拖动进行时在指针下显示的小部件。"},{"name":"feedbackOffset","type":"Offset","required":true,"desc":"feedbackOffset 可用于设置命中测试目标点以查找拖动目标。如果反馈相对于子项进行了变换,这特别有用。"},{"name":"dragAnchorStrategy","type":"DragAnchorStrategy","required":true,"desc":"此可拖动项用于在拖动时获取锚点偏移量的策略。"},{"name":"ignoringFeedbackSemantics","type":"bool","required":true,"desc":"构建语义树时是否忽略 [feedback] 小部件的语义。"},{"name":"ignoringFeedbackPointer","type":"bool","required":true,"desc":"命中测试期间是否忽略 [feedback] 小部件。"},{"name":"affinity","type":"Axis?","desc":"控制此小部件如何与其他手势竞争以启动拖动。"},{"name":"maxSimultaneousDrags","type":"int?","desc":"支持多少个同时拖动。"},{"name":"onDragStarted","type":"VoidCallback?","desc":"可拖动项开始被拖动时调用。"},{"name":"onDragUpdate","type":"DragUpdateCallback?","desc":"可拖动项被拖动时调用。"},{"name":"onDraggableCanceled","type":"DraggableCanceledCallback?","desc":"可拖动项被放下但未被 [DragTarget] 接受时调用。"},{"name":"onDragCompleted","type":"VoidCallback?","desc":"可拖动项被放下并被 [DragTarget] 接受时调用。"},{"name":"onDragEnd","type":"DragEndCallback?","desc":"可拖动项被放下时调用。"},{"name":"rootOverlay","type":"bool","required":true,"desc":"反馈小部件是否将放在根 [Overlay] 上。"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"命中测试期间如何表现。"},{"name":"allowedButtonsFilter","type":"AllowedButtonsFilter?","desc":"{@macro flutter.gestures.multidrag._allowedButtonsFilter}"}],"id":103,"localName":"可拖拽组件","lever":4,"family":1,"linkIds":[104,105],"nodes":[{"file":"node1_base.dart","name":"Draggable基本使用","desc":["【child】 : 孩子 【Widget】","【feedback】 : 拖拽时的孩子 【Widget】","【axis】 : 拖动的轴 【Axis】"]},{"file":"node2_data.dart","name":"Draggable与DragTarget联用","desc":["【data】 : 数据 【T】","【onDragStarted】 : 开始拖拽 【Function()】","【onDragEnd】 : 结束拖拽 【Function(DraggableDetails)】","【onDragCompleted】 : 拖拽完成 【Function()】","【onDraggableCanceled】 : 拖拽取消 【Function(Velocity,Offset)】","【onChanged】 : 改变时回调 【Function(T)】"]},{"file":"node3_use.dart","name":"Draggable其他使用","desc":["可以根据拖拽来处理一些事件。如删除、查询、弹框等"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_en-US.json b/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_en-US.json new file mode 100644 index 000000000..32c7e840a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_en-US.json @@ -0,0 +1 @@ +{"name":"DraggableScrollableActuator","path":"/src/widgets/draggable_scrollable_sheet.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that can notify a descendent [DraggableScrollableSheet] that it should reset its position to the initial state.","fields":[{"name":"child","type":"Widget","required":true,"desc":"This child's [DraggableScrollableSheet] descendant will be reset when the [reset] method is applied to a context that includes it."}],"id":221,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage","desc":["【child】: Child component 【Widget】","Use DraggableScrollableActuator.reset(context) to reset the position of the descendant DraggableScrollableSheet to the initial position."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_zh-CN.json new file mode 100644 index 000000000..aa3d6682d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_zh-CN.json @@ -0,0 +1 @@ +{"name":"DraggableScrollableActuator","path":"/src/widgets/draggable_scrollable_sheet.dart","parents":["StatefulWidget","Widget"],"desc":"可以通知后代 [DraggableScrollableSheet] 应将其位置重置为初始状态的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"当 [reset] 方法应用于包含它的上下文时,此子项的 [DraggableScrollableSheet] 后代将被重置。"}],"id":221,"localName":"拖滑重置器","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"基本使用方法","desc":["【child】 : 子组件 【Widget】","使用 DraggableScrollableActuator.reset(context) 重置后代 DraggableScrollableSheet 位初始位置。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_en-US.json b/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_en-US.json new file mode 100644 index 000000000..7ba5cc695 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_en-US.json @@ -0,0 +1 @@ +{"name":"DraggableScrollableSheet","path":"/src/widgets/draggable_scrollable_sheet.dart","parents":["StatefulWidget","Widget"],"desc":" A container for a [Scrollable] that responds to drag gestures by resizing the scrollable until a limit is reached, and then scrolling.","fields":[{"name":"initialChildSize","type":"double","required":true,"desc":"The initial fractional value of the parent container's height to use when displaying the widget."},{"name":"minChildSize","type":"double","required":true,"desc":"The minimum fractional value of the parent container's height to use when displaying the widget."},{"name":"maxChildSize","type":"double","required":true,"desc":"The maximum fractional value of the parent container's height to use when displaying the widget."},{"name":"expand","type":"bool","required":true,"desc":"Whether the widget should expand to fill the available space in its parent or not."},{"name":"snap","type":"bool","required":true,"desc":"Whether the widget should snap between [snapSizes] when the user lifts their finger during a drag."},{"name":"snapSizes","type":"List?","desc":"A list of target sizes that the widget should snap to."},{"name":"snapAnimationDuration","type":"Duration?","desc":"Defines a duration for the snap animations."},{"name":"controller","type":"DraggableScrollableController?","desc":"A controller that can be used to programmatically control this sheet."},{"name":"shouldCloseOnMinExtent","type":"bool","required":true,"desc":"Whether the sheet, when dragged (or flung) to its minimum size, should cause its parent sheet to close."},{"name":"builder","type":"ScrollableWidgetBuilder","required":true,"desc":"The builder that creates a child to display in this widget, which will use the provided [ScrollController] to enable dragging and scrolling of the contents."}],"id":252,"lever":2,"family":1,"linkIds":[221,142],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DraggableScrollableSheet","desc":["【initialChildSize】: Initial fraction 【double】","【minChildSize】: Minimum fraction 【double】","【maxChildSize】: Maximum fraction 【double】","【builder】: Scrollable component builder 【ScrollableWidgetBuilder】","【expand】: Whether to expand 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_zh-CN.json new file mode 100644 index 000000000..08ede04fe --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_zh-CN.json @@ -0,0 +1 @@ +{"name":"DraggableScrollableSheet","path":"/src/widgets/draggable_scrollable_sheet.dart","parents":["StatefulWidget","Widget"],"desc":"通过拖动手势调整可滚动大小直到达到限制,然后滚动的 [Scrollable] 容器。","fields":[{"name":"initialChildSize","type":"double","required":true,"desc":"显示小部件时使用的父容器高度的初始分数值。"},{"name":"minChildSize","type":"double","required":true,"desc":"显示小部件时使用的父容器高度的最小分数值。"},{"name":"maxChildSize","type":"double","required":true,"desc":"显示小部件时使用的父容器高度的最大分数值。"},{"name":"expand","type":"bool","required":true,"desc":"小部件是否应扩展以填充其父级中的可用空间。"},{"name":"snap","type":"bool","required":true,"desc":"当用户在拖动期间抬起手指时,小部件是否应在 [snapSizes] 之间捕捉。"},{"name":"snapSizes","type":"List?","desc":"小部件应捕捉到的目标大小列表。"},{"name":"snapAnimationDuration","type":"Duration?","desc":"定义捕捉动画的持续时间。"},{"name":"controller","type":"DraggableScrollableController?","desc":"可用于以编程方式控制此表单的控制器。"},{"name":"shouldCloseOnMinExtent","type":"bool","required":true,"desc":"当表单被拖动(或抛出)到其最小大小时,是否应导致其父表单关闭。"},{"name":"builder","type":"ScrollableWidgetBuilder","required":true,"desc":"创建要在此小部件中显示的子项的构建器,它将使用提供的 [ScrollController] 来启用内容的拖动和滚动。"}],"id":252,"localName":"拖滑页","lever":2,"family":1,"linkIds":[221,142],"nodes":[{"file":"node1_base.dart","name":"DraggableScrollableSheet基本使用","desc":["【initialChildSize】 : 初始分度 【double】","【minChildSize】 : 最小分度 【double】","【maxChildSize】 : 最大分度 【double】","【builder】 : 滑动组件构造器 【ScrollableWidgetBuilder】","【expand】 : 是否延展 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_en-US.json b/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_en-US.json new file mode 100644 index 000000000..6c8763020 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_en-US.json @@ -0,0 +1 @@ +{"name":"Drawer","path":"/src/material/drawer.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design panel that slides in horizontally from the edge of a [Scaffold] to show navigation links in an application.","fields":[{"name":"backgroundColor","type":"Color?","desc":"Sets the color of the [Material] that holds all of the [Drawer]'s contents."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this drawer relative to its parent."},{"name":"shadowColor","type":"Color?","desc":"The color used to paint a drop shadow under the drawer's [Material], which reflects the drawer's [elevation]."},{"name":"surfaceTintColor","type":"Color?","desc":"The color used as a surface tint overlay on the drawer's background color, which reflects the drawer's [elevation]."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the drawer."},{"name":"width","type":"double?","desc":"The width of the drawer."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"semanticLabel","type":"String?","desc":"The semantic label of the drawer used by accessibility frameworks to announce screen transitions when the drawer is opened and closed."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":154,"lever":2,"family":0,"linkIds":[64,155],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Drawer","desc":["【child】 : Child component 【Widget】","【elevation】 : Elevation 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_zh-CN.json new file mode 100644 index 000000000..54dd507f9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_zh-CN.json @@ -0,0 +1 @@ +{"name":"Drawer","path":"/src/material/drawer.dart","parents":["StatelessWidget","Widget"],"desc":"从 [Scaffold] 边缘水平滑入以显示应用程序中导航链接的 Material Design 面板。","fields":[{"name":"backgroundColor","type":"Color?","desc":"设置包含所有 [Drawer] 内容的 [Material] 的颜色。"},{"name":"elevation","type":"double?","desc":"相对于其父级放置此抽屉的 z 坐标。"},{"name":"shadowColor","type":"Color?","desc":"用于在抽屉的 [Material] 下绘制投影的颜色,反映抽屉的 [elevation]。"},{"name":"surfaceTintColor","type":"Color?","desc":"用作抽屉背景颜色上的表面色调叠加的颜色,反映抽屉的 [elevation]。"},{"name":"shape","type":"ShapeBorder?","desc":"抽屉的形状。"},{"name":"width","type":"double?","desc":"抽屉的宽度。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"semanticLabel","type":"String?","desc":"辅助功能框架使用的抽屉语义标签,用于在打开和关闭抽屉时宣布屏幕转换。"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":154,"localName":"滑页栏","lever":2,"family":0,"linkIds":[64,155],"nodes":[{"file":"node1_base.dart","name":"Drawer基本使用","desc":["【child】 : 子组件 【Widget】","【elevation】 : 影深 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_en-US.json b/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_en-US.json new file mode 100644 index 000000000..17d57c016 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_en-US.json @@ -0,0 +1 @@ +{"name":"DrawerButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":" A Material Design drawer icon button.","fields":[],"id":276,"lever":1,"family":0,"linkIds":[273,361],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DrawerButton","desc":["【onPressed】: Click event 【VoidCallback?】","【style】: Button style 【ButtonStyle?】","When onPressed is empty, clicking will open the left drawer."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_zh-CN.json new file mode 100644 index 000000000..ee3076ef6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"DrawerButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":"Material Design 抽屉图标按钮。","fields":[],"id":276,"localName":"抽屉按钮","lever":1,"family":0,"linkIds":[273,361],"nodes":[{"file":"node1_base.dart","name":"DrawerButton 基本使用","desc":["【onPressed】 : 点击事件 【VoidCallback?】","【style】: 按钮样式 【ButtonStyle?】","onPressed 为空时,点击时会打开左抽屉。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_en-US.json new file mode 100644 index 000000000..6f951ce1f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_en-US.json @@ -0,0 +1 @@ +{"name":"DrawerButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":" A \"drawer\" icon that's appropriate for the current [TargetPlatform].","fields":[],"id":273,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DrawerButtonIcon Effect","desc":["The _ActionIcon component adapts the drawer button icon for different platforms based on the ActionIconTheme."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_zh-CN.json new file mode 100644 index 000000000..e7e06fe92 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_zh-CN.json @@ -0,0 +1 @@ +{"name":"DrawerButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":"适合当前 [TargetPlatform] 的\"抽屉\"图标。","fields":[],"id":273,"localName":"抽屉按钮图标","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DrawerButtonIcon 效果","desc":["通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的抽屉按钮图标。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_en-US.json b/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_en-US.json new file mode 100644 index 000000000..cd28b9c98 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_en-US.json @@ -0,0 +1 @@ +{"name":"DrawerController","path":"/src/material/drawer.dart","parents":["StatefulWidget","Widget"],"desc":" Provides interactive behavior for [Drawer] widgets.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"alignment","type":"DrawerAlignment","required":true,"desc":"The alignment of the [Drawer]."},{"name":"drawerCallback","type":"DrawerCallback?","desc":"Optional callback that is called when a [Drawer] is opened or closed."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.material.DrawerController.dragStartBehavior} Determines the way that drag start behavior is handled."},{"name":"scrimColor","type":"Color?","desc":"The color to use for the scrim that obscures the underlying content while a drawer is open."},{"name":"enableOpenDragGesture","type":"bool","required":true,"desc":"Determines if the [Drawer] can be opened with a drag gesture."},{"name":"edgeDragWidth","type":"double?","desc":"The width of the area within which a horizontal swipe will open the drawer."},{"name":"isDrawerOpen","type":"bool","required":true,"desc":"Whether or not the drawer is opened or closed."}],"id":257,"lever":3,"family":1,"linkIds":[154,64],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DrawerController","desc":["【drawerCallback】: Event callback 【DrawerCallback】","【enableOpenDragGesture】: Whether to slide open from the side 【bool】","【alignment】: Alignment 【DrawerAlignment】","【scrimColor】: Background color 【Color】","【child】: Drawer component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_zh-CN.json new file mode 100644 index 000000000..a71745d6b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_zh-CN.json @@ -0,0 +1 @@ +{"name":"DrawerController","path":"/src/material/drawer.dart","parents":["StatefulWidget","Widget"],"desc":"为 [Drawer] 小部件提供交互行为。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"alignment","type":"DrawerAlignment","required":true,"desc":"[Drawer] 的对齐方式。"},{"name":"drawerCallback","type":"DrawerCallback?","desc":"打开或关闭 [Drawer] 时调用的可选回调。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.material.DrawerController.dragStartBehavior} 确定拖动开始行为的处理方式。"},{"name":"scrimColor","type":"Color?","desc":"抽屉打开时用于遮挡底层内容的纱幕颜色。"},{"name":"enableOpenDragGesture","type":"bool","required":true,"desc":"确定是否可以通过拖动手势打开 [Drawer]。"},{"name":"edgeDragWidth","type":"double?","desc":"水平滑动将打开抽屉的区域宽度。"},{"name":"isDrawerOpen","type":"bool","required":true,"desc":"抽屉是打开还是关闭。"}],"id":257,"localName":"iOS滑动页签","lever":3,"family":1,"linkIds":[154,64],"nodes":[{"file":"node1_base.dart","name":"DrawerController基本使用","desc":["【drawerCallback】 : 事件回调 【DrawerCallback】","【enableOpenDragGesture】 : 是否侧边滑开 【bool】","【alignment】 : 对齐方式 【DrawerAlignment】","【scrimColor】 : 背景颜色 【Color】","【child】 : Drawer组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_en-US.json b/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_en-US.json new file mode 100644 index 000000000..e6ca7462b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_en-US.json @@ -0,0 +1 @@ +{"name":"DrawerHeader","path":"/src/material/drawer_header.dart","parents":["StatelessWidget","Widget"],"desc":" The top-most region of a Material Design drawer. The header's [child] widget, if any, is placed inside a [Container] whose [decoration] can be passed as an argument, inset by the given [padding].","fields":[{"name":"decoration","type":"Decoration?","desc":"Decoration for the main drawer header [Container]; useful for applying backgrounds."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The padding by which to inset [child]."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"The margin around the drawer header."},{"name":"duration","type":"Duration","required":true,"desc":"The duration for animations of the [decoration]."},{"name":"curve","type":"Curve","required":true,"desc":"The curve for animations of the [decoration]."},{"name":"child","type":"Widget?","desc":"A widget to be placed inside the drawer header, inset by the [padding]."}],"id":155,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DrawerHeader","desc":["【child】 : Child Component 【Widget】","【decoration】 : Decoration 【Decoration】","【margin】 : Margin 【EdgeInsetsGeometry】","【padding】 : Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_zh-CN.json new file mode 100644 index 000000000..36204c95f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_zh-CN.json @@ -0,0 +1 @@ +{"name":"DrawerHeader","path":"/src/material/drawer_header.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 抽屉的最顶部区域。标题的 [child] 小部件(如果有)放置在 [Container] 内,其 [decoration] 可以作为参数传递,由给定的 [padding] 插入。","fields":[{"name":"decoration","type":"Decoration?","desc":"主抽屉标题 [Container] 的装饰;用于应用背景。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"插入 [child] 的内边距。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"抽屉标题周围的边距。"},{"name":"duration","type":"Duration","required":true,"desc":"[decoration] 动画的持续时间。"},{"name":"curve","type":"Curve","required":true,"desc":"[decoration] 动画的曲线。"},{"name":"child","type":"Widget?","desc":"放置在抽屉标题内的小部件,由 [padding] 插入。"}],"id":155,"localName":"滑页栏标题","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DrawerHeader基本使用","desc":["【child】 : 子组件 【Widget】","【decoration】 : 装饰 【Decoration】","【margin】 : 外边距 【EdgeInsetsGeometry】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_en-US.json new file mode 100644 index 000000000..db98dabff --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_en-US.json @@ -0,0 +1 @@ +{"name":"DrawerTheme","path":"/src/material/drawer_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines visual properties for [Drawer]s in this widget's subtree.","fields":[{"name":"data","type":"DrawerThemeData","required":true,"desc":"Specifies the background color, scrim color, elevation, and shape for descendant [Drawer] widgets."}],"id":409,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_zh-CN.json new file mode 100644 index 000000000..a20589a9e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"DrawerTheme","path":"/src/material/drawer_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [Drawer] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"DrawerThemeData","required":true,"desc":"指定后代 [Drawer] 小部件的背景颜色、纱幕颜色、高度和形状。"}],"id":409,"localName":"DrawerTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_en-US.json new file mode 100644 index 000000000..12755894f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_en-US.json @@ -0,0 +1 @@ +{"name":"DropdownButton","path":"/src/material/dropdown.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design button for selecting from a list of items.","fields":[{"name":"items","type":"List>?","desc":"The list of items the user can select."},{"name":"value","type":"T?","desc":"The value of the currently selected [DropdownMenuItem]."},{"name":"hint","type":"Widget?","desc":"A placeholder widget that is displayed by the dropdown button."},{"name":"disabledHint","type":"Widget?","desc":"A preferred placeholder widget that is displayed when the dropdown is disabled."},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.material.dropdownButton.onChanged} Called when the user selects an item."},{"name":"onTap","type":"VoidCallback?","desc":"Called when the dropdown button is tapped."},{"name":"selectedItemBuilder","type":"DropdownButtonBuilder?","desc":"A builder to customize the dropdown buttons corresponding to the [DropdownMenuItem]s in [items]."},{"name":"elevation","type":"int","required":true,"desc":"The z-coordinate at which to place the menu when open."},{"name":"style","type":"TextStyle?","desc":"The text style to use for text in the dropdown button and the dropdown menu that appears when you tap the button."},{"name":"underline","type":"Widget?","desc":"The widget to use for drawing the drop-down button's underline."},{"name":"icon","type":"Widget?","desc":"The widget to use for the drop-down button's icon."},{"name":"iconDisabledColor","type":"Color?","desc":"The color of any [Icon] descendant of [icon] if this button is disabled, i.e. if [onChanged] is null."},{"name":"iconEnabledColor","type":"Color?","desc":"The color of any [Icon] descendant of [icon] if this button is enabled, i.e. if [onChanged] is defined."},{"name":"iconSize","type":"double","required":true,"desc":"The size to use for the drop-down button's down arrow icon button."},{"name":"isDense","type":"bool","required":true,"desc":"Reduce the button's height."},{"name":"isExpanded","type":"bool","required":true,"desc":"Set the dropdown's inner contents to horizontally fill its parent."},{"name":"itemHeight","type":"double?","desc":"If null, then the menu item heights will vary according to each menu item's intrinsic height."},{"name":"menuWidth","type":"double?","desc":"The width of the menu."},{"name":"focusColor","type":"Color?","desc":"The color for the button's [Material] when it has the input focus."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"dropdownColor","type":"Color?","desc":"The background color of the dropdown."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Padding around the visible portion of the dropdown widget."},{"name":"menuMaxHeight","type":"double?","desc":"The maximum height of the menu."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"Defines how the hint or the selected item is positioned within the button."},{"name":"borderRadius","type":"BorderRadius?","desc":"Defines the corner radii of the menu's rounded rectangle shape."}],"id":55,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DropdownButton","desc":["【value】 : Current value 【T】","【items】 : Dropdown items 【List>】","【icon】 : Icon 【Widget】","【elevation】 : Elevation 【double】","【onChanged】 : Selection change event 【Function(T)】","【backgroundColor】 : Background color 【Color】"]},{"file":"node2_style.dart","name":"Styling of DropdownButton","desc":["【isDense】 : Whether to be dense 【bool】","【iconSize】 : Icon size 【double】","【hint】 : Hint widget 【Widget】","【iconEnabledColor】 : Icon color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_zh-CN.json new file mode 100644 index 000000000..5ccba7524 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"DropdownButton","path":"/src/material/dropdown.dart","parents":["StatefulWidget","Widget"],"desc":"用于从项目列表中选择的 Material Design 按钮。","fields":[{"name":"items","type":"List>?","desc":"用户可以选择的项目列表。"},{"name":"value","type":"T?","desc":"当前选定的 [DropdownMenuItem] 的值。"},{"name":"hint","type":"Widget?","desc":"下拉按钮显示的占位符小部件。"},{"name":"disabledHint","type":"Widget?","desc":"下拉菜单禁用时显示的首选占位符小部件。"},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.material.dropdownButton.onChanged} 用户选择项目时调用。"},{"name":"onTap","type":"VoidCallback?","desc":"点击下拉按钮时调用。"},{"name":"selectedItemBuilder","type":"DropdownButtonBuilder?","desc":"用于自定义对应于 [items] 中 [DropdownMenuItem] 的下拉按钮的构建器。"},{"name":"elevation","type":"int","required":true,"desc":"打开时放置菜单的 z 坐标。"},{"name":"style","type":"TextStyle?","desc":"用于下拉按钮和点击按钮时出现的下拉菜单中文本的文本样式。"},{"name":"underline","type":"Widget?","desc":"用于绘制下拉按钮下划线的小部件。"},{"name":"icon","type":"Widget?","desc":"用于下拉按钮图标的小部件。"},{"name":"iconDisabledColor","type":"Color?","desc":"如果此按钮被禁用(即 [onChanged] 为 null),[icon] 的任何 [Icon] 后代的颜色。"},{"name":"iconEnabledColor","type":"Color?","desc":"如果此按钮启用(即定义了 [onChanged]),[icon] 的任何 [Icon] 后代的颜色。"},{"name":"iconSize","type":"double","required":true,"desc":"用于下拉按钮向下箭头图标按钮的大小。"},{"name":"isDense","type":"bool","required":true,"desc":"减少按钮的高度。"},{"name":"isExpanded","type":"bool","required":true,"desc":"设置下拉菜单的内部内容水平填充其父级。"},{"name":"itemHeight","type":"double?","desc":"如果为 null,则菜单项高度将根据每个菜单项的固有高度而变化。"},{"name":"menuWidth","type":"double?","desc":"菜单的宽度。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时其 [Material] 的颜色。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"dropdownColor","type":"Color?","desc":"下拉菜单的背景颜色。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"下拉小部件可见部分周围的内边距。"},{"name":"menuMaxHeight","type":"double?","desc":"菜单的最大高度。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"定义提示或选定项目在按钮内的定位方式。"},{"name":"borderRadius","type":"BorderRadius?","desc":"定义菜单圆角矩形形状的角半径。"}],"id":55,"localName":"下拉按钮","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DropdownButton基本用法","desc":["【value】 : 当前值 【T】","【items】 : 下拉选框 【List>】","【icon】 : 图标 【Widget】","【elevation】 : 影深 【double】","【onChanged】 : 选择条目事件 【Function(T)】","【backgroundColor】 : 背景色 【Color】"]},{"file":"node2_style.dart","name":"DropdownButton的样式指定","desc":["【isDense】 : 是否紧排 【bool】","【iconSize】 : 图标大小 【double】","【hint】 : 提示组件 【Widget】","【iconEnabledColor】 : 图标颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_en-US.json new file mode 100644 index 000000000..dfc5438bc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_en-US.json @@ -0,0 +1 @@ +{"name":"DropdownButtonFormField","path":"/src/material/dropdown.dart","parents":["FormField","StatefulWidget","Widget"],"desc":" A [FormField] that contains a [DropdownButton].","fields":[{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.material.dropdownButton.onChanged}"},{"name":"decoration","type":"InputDecoration","required":true,"desc":"The decoration to show around the dropdown button form field."}],"id":223,"lever":2,"family":1,"linkIds":[55,222],"nodes":[{"file":"node1_base.dart","name":"Simple Usage of Form Dropdown","desc":["【items】: List of child components 【List>】","【validator】: Form validation callback 【FormFieldValidator】","【onSaved】: Form save callback 【FormFieldSetter】","For other properties, refer to DropdownButton. For form validation features, refer to FormField."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_zh-CN.json new file mode 100644 index 000000000..2d8a0efe3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_zh-CN.json @@ -0,0 +1 @@ +{"name":"DropdownButtonFormField","path":"/src/material/dropdown.dart","parents":["FormField","StatefulWidget","Widget"],"desc":"包含 [DropdownButton] 的 [FormField]。","fields":[{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.material.dropdownButton.onChanged}"},{"name":"decoration","type":"InputDecoration","required":true,"desc":"在下拉按钮表单字段周围显示的装饰。"}],"id":223,"localName":"表单下拉框","lever":2,"family":1,"linkIds":[55,222],"nodes":[{"file":"node1_base.dart","name":"表单下拉框简单使用","desc":["【items】 : 子组件列表 【List>】","【validator】 : 表单验证回调 【FormFieldValidator】","【onSaved】 : 表单保存回调 【FormFieldSetter】","其他属性详见 DropdownButton,表单校验特性详见 FormField。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_en-US.json new file mode 100644 index 000000000..1edffc17e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_en-US.json @@ -0,0 +1 @@ +{"name":"DropdownButtonHideUnderline","path":"/src/material/dropdown.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that causes any descendant [DropdownButton] widgets to not include their regular underline.","fields":[],"id":181,"lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DropDownButtonHideUnderline Usage","desc":["【child】 : Child component 【Widget】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_zh-CN.json new file mode 100644 index 000000000..764468a48 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_zh-CN.json @@ -0,0 +1 @@ +{"name":"DropdownButtonHideUnderline","path":"/src/material/dropdown.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"导致任何后代 [DropdownButton] 小部件不包含其常规下划线的继承小部件。","fields":[],"id":181,"localName":"下拉按钮隐藏线","lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DropDownButtonHideUnderline使用","desc":["【child】 : 子组件 【Widget】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_en-US.json new file mode 100644 index 000000000..e127fa335 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_en-US.json @@ -0,0 +1 @@ +{"name":"DropdownMenu","path":"/src/material/dropdown_menu.dart","parents":["StatefulWidget","Widget"],"desc":" A dropdown menu that can be opened from a [TextField]. The selected menu item is displayed in that field.","fields":[{"name":"enabled","type":"bool","required":true,"desc":"Determine if the [DropdownMenu] is enabled."},{"name":"width","type":"double?","desc":"Determine the width of the [DropdownMenu]."},{"name":"menuHeight","type":"double?","desc":"Determine the height of the menu."},{"name":"leadingIcon","type":"Widget?","desc":"An optional Icon at the front of the text input field."},{"name":"trailingIcon","type":"Widget?","desc":"An optional icon at the end of the text field."},{"name":"label","type":"Widget?","desc":"Optional widget that describes the input field."},{"name":"hintText","type":"String?","desc":"Text that suggests what sort of input the field accepts."},{"name":"helperText","type":"String?","desc":"Text that provides context about the [DropdownMenu]'s value, such as how the value will be used."},{"name":"errorText","type":"String?","desc":"Text that appears below the input field and the border to show the error message."},{"name":"selectedTrailingIcon","type":"Widget?","desc":"An optional icon at the end of the text field to indicate that the text field is pressed."},{"name":"enableFilter","type":"bool","required":true,"desc":"Determine if the menu list can be filtered by the text input."},{"name":"enableSearch","type":"bool","required":true,"desc":"Determine if the first item that matches the text input can be highlighted."},{"name":"keyboardType","type":"TextInputType?","desc":"The type of keyboard to use for editing the text."},{"name":"textStyle","type":"TextStyle?","desc":"The text style for the [TextField] of the [DropdownMenu];"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"The text align for the [TextField] of the [DropdownMenu]."},{"name":"inputDecorationTheme","type":"InputDecorationTheme?","desc":"Defines the default appearance of [InputDecoration] to show around the text field."},{"name":"menuStyle","type":"MenuStyle?","desc":"The [MenuStyle] that defines the visual attributes of the menu."},{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited or selected in the menu."},{"name":"initialSelection","type":"T?","desc":"The value used to for an initial selection."},{"name":"onSelected","type":"ValueChanged?","desc":"The callback is called when a selection is made."},{"name":"focusNode","type":"FocusNode?","desc":"Defines the keyboard focus for this widget."},{"name":"requestFocusOnTap","type":"bool?","desc":"Determine if the dropdown button requests focus and the on-screen virtual keyboard is shown in response to a touch event."},{"name":"dropdownMenuEntries","type":"List>","required":true,"desc":"Descriptions of the menu items in the [DropdownMenu]."},{"name":"expandedInsets","type":"EdgeInsetsGeometry?","desc":"Defines the menu text field's width to be equal to its parent's width plus the horizontal width of the specified insets."},{"name":"filterCallback","type":"FilterCallback?","desc":"When [DropdownMenu.enableFilter] is true, this callback is used to compute the list of filtered items."},{"name":"searchCallback","type":"SearchCallback?","desc":"When [DropdownMenu.enableSearch] is true, this callback is used to compute the index of the search result to be highlighted."},{"name":"inputFormatters","type":"List?","desc":"Optional input validation and formatting overrides."},{"name":"alignmentOffset","type":"Offset?","desc":"{@macro flutter.material.MenuAnchor.alignmentOffset}"},{"name":"closeBehavior","type":"DropdownMenuCloseBehavior","required":true,"desc":"Defines the behavior for closing the dropdown menu when an item is selected."},{"name":"maxLines","type":"int?","desc":"Specifies the maximum number of lines the selected value can display in the [DropdownMenu]."},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"}],"id":370,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1.dart","name":"Simple Usage of Dropdown Menu","desc":["【dropdownMenuEntries】 : Menu item list 【List>】","【initialSelection】 : Form validation callback 【T?】","【onSelected】 : Form save callback 【ValueChanged?】","【menuHeight】 : Menu height 【double】","【width】 : Input box width 【double】"]},{"file":"node2.dart","name":"Dropdown Menu Style Settings","desc":["【controller】 : Text input controller 【TextEditingController?】","【label】 : Input box label 【Widget?】","【textStyle】 : Input box text style 【TextStyle?】","【inputDecorationTheme】 : Input box decoration theme 【InputDecorationTheme?】","【leadingIcon】 : Left icon 【Widget?】","【trailingIcon】 : Right icon when menu is expanded 【Widget?】","【selectedTrailingIcon】 : Right icon when menu is expanded 【Widget?】","【hintText】 : Input box hint text 【String?】","【helperText】 : Input box helper text 【String?】","【errorText】 : Input box error text 【String?】","【menuStyle】 : Popup menu style 【MenuStyle?】"]},{"file":"node3.dart","name":"Custom Menu Items for Dropdown Menu","desc":["You can customize the menu items by using the labelWidget of DropdownMenuEntry."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_zh-CN.json new file mode 100644 index 000000000..97a23825e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_zh-CN.json @@ -0,0 +1 @@ +{"name":"DropdownMenu","path":"/src/material/dropdown_menu.dart","parents":["StatefulWidget","Widget"],"desc":"可以从 [TextField] 打开的下拉菜单。选定的菜单项显示在该字段中。","fields":[{"name":"enabled","type":"bool","required":true,"desc":"确定 [DropdownMenu] 是否启用。"},{"name":"width","type":"double?","desc":"确定 [DropdownMenu] 的宽度。"},{"name":"menuHeight","type":"double?","desc":"确定菜单的高度。"},{"name":"leadingIcon","type":"Widget?","desc":"文本输入字段前面的可选图标。"},{"name":"trailingIcon","type":"Widget?","desc":"文本字段末尾的可选图标。"},{"name":"label","type":"Widget?","desc":"描述输入字段的可选小部件。"},{"name":"hintText","type":"String?","desc":"建议字段接受何种输入的文本。"},{"name":"helperText","type":"String?","desc":"提供有关 [DropdownMenu] 值上下文的文本,例如如何使用该值。"},{"name":"errorText","type":"String?","desc":"出现在输入字段和边框下方以显示错误消息的文本。"},{"name":"selectedTrailingIcon","type":"Widget?","desc":"文本字段末尾的可选图标,指示文本字段被按下。"},{"name":"enableFilter","type":"bool","required":true,"desc":"确定菜单列表是否可以通过文本输入进行过滤。"},{"name":"enableSearch","type":"bool","required":true,"desc":"确定是否可以突出显示与文本输入匹配的第一个项目。"},{"name":"keyboardType","type":"TextInputType?","desc":"用于编辑文本的键盘类型。"},{"name":"textStyle","type":"TextStyle?","desc":"[DropdownMenu] 的 [TextField] 的文本样式。"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"[DropdownMenu] 的 [TextField] 的文本对齐。"},{"name":"inputDecorationTheme","type":"InputDecorationTheme?","desc":"定义在文本字段周围显示的 [InputDecoration] 的默认外观。"},{"name":"menuStyle","type":"MenuStyle?","desc":"定义菜单视觉属性的 [MenuStyle]。"},{"name":"controller","type":"TextEditingController?","desc":"控制菜单中正在编辑或选择的文本。"},{"name":"initialSelection","type":"T?","desc":"用于初始选择的值。"},{"name":"onSelected","type":"ValueChanged?","desc":"进行选择时调用的回调。"},{"name":"focusNode","type":"FocusNode?","desc":"定义此小部件的键盘焦点。"},{"name":"requestFocusOnTap","type":"bool?","desc":"确定下拉按钮是否请求焦点并且屏幕虚拟键盘是否响应触摸事件显示。"},{"name":"dropdownMenuEntries","type":"List>","required":true,"desc":"[DropdownMenu] 中菜单项的描述。"},{"name":"expandedInsets","type":"EdgeInsetsGeometry?","desc":"定义菜单文本字段的宽度等于其父级的宽度加上指定插入的水平宽度。"},{"name":"filterCallback","type":"FilterCallback?","desc":"当 [DropdownMenu.enableFilter] 为 true 时,此回调用于计算过滤项目列表。"},{"name":"searchCallback","type":"SearchCallback?","desc":"当 [DropdownMenu.enableSearch] 为 true 时,此回调用于计算要突出显示的搜索结果的索引。"},{"name":"inputFormatters","type":"List?","desc":"可选的输入验证和格式化覆盖。"},{"name":"alignmentOffset","type":"Offset?","desc":"{@macro flutter.material.MenuAnchor.alignmentOffset}"},{"name":"closeBehavior","type":"DropdownMenuCloseBehavior","required":true,"desc":"定义选择项目时关闭下拉菜单的行为。"},{"name":"maxLines","type":"int?","desc":"指定选定值可以在 [DropdownMenu] 中显示的最大行数。"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"}],"id":370,"localName":"下拉菜单","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1.dart","name":"下拉菜单的简单使用","desc":["【dropdownMenuEntries】 : 菜单条目列表 【List>】","【initialSelection】 : 表单验证回调 【T?】","【onSelected】 : 表单保存回调 【ValueChanged?】","【menuHeight】 : 菜单高度 【double】","【width】 : 输入框宽度 【double】"]},{"file":"node2.dart","name":"下拉菜单样式设置","desc":["【controller】 : 文字输入控制器 【TextEditingController?】","【label】 : 输入框标签 【Widget?】","【textStyle】 : 输入框文字样式 【TextStyle?】","【inputDecorationTheme】 : 输入框装饰主题 【InputDecorationTheme?】","【leadingIcon】 : 左侧图标 【Widget?】","【trailingIcon】 : 右侧为展开菜单时图标 【Widget?】","【selectedTrailingIcon】 : 右侧展开菜单时图标 【Widget?】","【hintText】 : 输入框提示文字 【String?】","【helperText】 : 输入框辅助文字 【String?】","【errorText】 : 输入框错误文字 【String?】","【menuStyle】 : 弹出菜单样式 【MenuStyle?】"]},{"file":"node3.dart","name":"下拉菜单自定义菜单项","desc":["可以通过 DropdownMenuEntry 的 labelWidget 定制构建菜单项。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_en-US.json new file mode 100644 index 000000000..e2d9fe27c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_en-US.json @@ -0,0 +1 @@ +{"name":"DropdownMenuItem","path":"/src/material/dropdown.dart","parents":["_DropdownMenuItemContainer","StatelessWidget","Widget"],"desc":" An item in a menu created by a [DropdownButton].","fields":[{"name":"onTap","type":"VoidCallback?","desc":"Called when the dropdown menu item is tapped."},{"name":"value","type":"T?","desc":"The value to return if the user selects this menu item."},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not a user can select this menu item."}],"id":410,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_zh-CN.json new file mode 100644 index 000000000..bb8ed83ed --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_zh-CN.json @@ -0,0 +1 @@ +{"name":"DropdownMenuItem","path":"/src/material/dropdown.dart","parents":["_DropdownMenuItemContainer","StatelessWidget","Widget"],"desc":"由 [DropdownButton] 创建的菜单中的项目。","fields":[{"name":"onTap","type":"VoidCallback?","desc":"点击下拉菜单项时调用。"},{"name":"value","type":"T?","desc":"如果用户选择此菜单项,要返回的值。"},{"name":"enabled","type":"bool","required":true,"desc":"用户是否可以选择此菜单项。"}],"id":410,"localName":"DropdownMenuItem","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_en-US.json new file mode 100644 index 000000000..0d3cb5944 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_en-US.json @@ -0,0 +1 @@ +{"name":"DropdownMenuTheme","path":"/src/material/dropdown_menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the visual properties for [DropdownMenu]s in this widget's subtree.","fields":[{"name":"data","type":"DropdownMenuThemeData","required":true,"desc":"Specifies the visual properties used by descendant [DropdownMenu] widgets."}],"id":411,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_zh-CN.json new file mode 100644 index 000000000..7bcc31cec --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"DropdownMenuTheme","path":"/src/material/dropdown_menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [DropdownMenu] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"DropdownMenuThemeData","required":true,"desc":"指定后代 [DropdownMenu] 小部件使用的视觉属性。"}],"id":411,"localName":"DropdownMenuTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_en-US.json new file mode 100644 index 000000000..340036dac --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_en-US.json @@ -0,0 +1 @@ +{"name":"DualTransitionBuilder","path":"/src/widgets/dual_transition_builder.dart","parents":["StatefulWidget","Widget"],"desc":" A transition builder that animates its [child] based on the [AnimationStatus] of the provided [animation].","fields":[{"name":"animation","type":"Animation","required":true,"desc":"The animation that drives the [child]'s transition."},{"name":"forwardBuilder","type":"AnimatedTransitionBuilder","required":true,"desc":"A builder for the transition that makes [child] appear on screen."},{"name":"reverseBuilder","type":"AnimatedTransitionBuilder","required":true,"desc":"A builder for a transition that makes [child] disappear from the screen."},{"name":"child","type":"Widget?","desc":"The widget below this [DualTransitionBuilder] in the tree."}],"id":412,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_zh-CN.json new file mode 100644 index 000000000..517c16af0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_zh-CN.json @@ -0,0 +1 @@ +{"name":"DualTransitionBuilder","path":"/src/widgets/dual_transition_builder.dart","parents":["StatefulWidget","Widget"],"desc":"根据提供的 [animation] 的 [AnimationStatus] 对其 [child] 进行动画处理的过渡构建器。","fields":[{"name":"animation","type":"Animation","required":true,"desc":"驱动 [child] 过渡的动画。"},{"name":"forwardBuilder","type":"AnimatedTransitionBuilder","required":true,"desc":"使 [child] 出现在屏幕上的过渡构建器。"},{"name":"reverseBuilder","type":"AnimatedTransitionBuilder","required":true,"desc":"使 [child] 从屏幕上消失的过渡构建器。"},{"name":"child","type":"Widget?","desc":"树中此 [DualTransitionBuilder] 下方的小部件。"}],"id":412,"localName":"DualTransitionBuilder","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_en-US.json b/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_en-US.json new file mode 100644 index 000000000..ecc1d45fe --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_en-US.json @@ -0,0 +1 @@ +{"name":"EditableText","path":"/src/widgets/editable_text.dart","parents":["StatefulWidget","Widget"],"desc":" A basic text input field.","fields":[{"name":"controller","type":"TextEditingController","required":true,"desc":"Controls the text being edited."},{"name":"focusNode","type":"FocusNode","required":true,"desc":"Controls whether this widget has keyboard focus."},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@template flutter.widgets.editableText.obscuringCharacter} Character used for obscuring text if [obscureText] is true."},{"name":"obscureText","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.obscureText} Whether to hide the text being edited (e.g., for passwords)."},{"name":"textHeightBehavior","type":"TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.readOnly} Whether the text can be changed."},{"name":"forceLine","type":"bool","required":true,"desc":"Whether the text will take the full width regardless of the text width."},{"name":"toolbarOptions","type":"ToolbarOptions","required":true,"desc":"Configuration of toolbar options."},{"name":"showSelectionHandles","type":"bool","required":true,"desc":"Whether to show selection handles."},{"name":"showCursor","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.showCursor} Whether to show cursor."},{"name":"autocorrect","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.autocorrect} Whether to enable autocorrection."},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"style","type":"TextStyle","required":true,"desc":"The text style to use for the editable text."},{"name":"undoController","type":"UndoHistoryController?","desc":"Controls the undo state of the current editable text."},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@template flutter.widgets.editableText.textAlign} How the text should be aligned horizontally."},{"name":"textDirection","type":"TextDirection?","desc":"{@template flutter.widgets.editableText.textDirection} The directionality of the text."},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@template flutter.widgets.editableText.textCapitalization} Configures how the platform keyboard will select an uppercase or lowercase keyboard."},{"name":"locale","type":"Locale?","desc":"Used to select a font when the same Unicode character can be rendered differently, depending on the locale."},{"name":"textScaleFactor","type":"double?","desc":"{@template flutter.widgets.editableText.textScaleFactor} Deprecated. Will be removed in a future version of Flutter. Use [textScaler] instead."},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"cursorColor","type":"Color","required":true,"desc":"The color to use when painting the cursor."},{"name":"autocorrectionTextRectColor","type":"Color?","desc":"The color to use when painting the autocorrection Rect."},{"name":"backgroundCursorColor","type":"Color","required":true,"desc":"The color to use when painting the background cursor aligned with the text while rendering the floating cursor."},{"name":"maxLines","type":"int?","desc":"{@template flutter.widgets.editableText.maxLines} The maximum number of lines to show at one time, wrapping if necessary."},{"name":"minLines","type":"int?","desc":"{@template flutter.widgets.editableText.minLines} The minimum number of lines to occupy when the content spans fewer lines."},{"name":"expands","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.expands} Whether this widget's height will be sized to fill its parent."},{"name":"autofocus","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.autofocus} Whether this text field should focus itself if nothing else is already focused."},{"name":"selectionColor","type":"Color?","desc":"The color to use when painting the selection."},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@template flutter.widgets.editableText.selectionControls} Optional delegate for building the text selection handles."},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@template flutter.widgets.editableText.keyboardType} The type of keyboard to use for editing the text."},{"name":"textInputAction","type":"TextInputAction?","desc":"The type of action button to use with the soft keyboard."},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.widgets.editableText.onChanged} Called when the user initiates a change to the TextField's value: when they have inserted or deleted text."},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@template flutter.widgets.editableText.onEditingComplete} Called when the user submits editable content (e.g., user presses the \"done\" button on the keyboard)."},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@template flutter.widgets.editableText.onSubmitted} Called when the user indicates that they are done editing the text in the field."},{"name":"onAppPrivateCommand","type":"AppPrivateCommandCallback?","desc":"{@template flutter.widgets.editableText.onAppPrivateCommand} This is used to receive a private command from the input method."},{"name":"onSelectionChanged","type":"SelectionChangedCallback?","desc":"{@template flutter.widgets.editableText.onSelectionChanged} Called when the user changes the selection of text (including the cursor location). {@endtemplate}"},{"name":"onSelectionHandleTapped","type":"VoidCallback?","desc":"{@macro flutter.widgets.SelectionOverlay.onSelectionHandleTapped}"},{"name":"groupId","type":"Object","required":true,"desc":"{@template flutter.widgets.editableText.groupId} The group identifier for the [TextFieldTapRegion] of this text field."},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@template flutter.widgets.editableText.onTapOutside} Called for each tap down that occurs outside of the [TextFieldTapRegion] group when the text field is focused."},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"{@template flutter.widgets.editableText.onTapUpOutside} Called for each tap up that occurs outside of the [TextFieldTapRegion] group when the text field is focused."},{"name":"inputFormatters","type":"List?","desc":"{@template flutter.widgets.editableText.inputFormatters} Optional input validation and formatting overrides."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"rendererIgnoresPointer","type":"bool","required":true,"desc":"Whether the caller will provide gesture handling (true), or if the [EditableText] is expected to handle basic gestures (false)."},{"name":"cursorWidth","type":"double","required":true,"desc":"{@template flutter.widgets.editableText.cursorWidth} How thick the cursor will be."},{"name":"cursorHeight","type":"double?","desc":"{@template flutter.widgets.editableText.cursorHeight} How tall the cursor will be."},{"name":"cursorRadius","type":"Radius?","desc":"{@template flutter.widgets.editableText.cursorRadius} How rounded the corners of the cursor should be."},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.cursorOpacityAnimates} Whether the cursor will animate from fully transparent to fully opaque during each cursor blink."},{"name":"cursorOffset","type":"Offset?","desc":"{@macro flutter.rendering.RenderEditable.cursorOffset}"},{"name":"paintCursorAboveText","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderEditable.paintCursorAboveText}"},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"Controls how tall the selection highlight boxes are computed to be."},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"Controls how wide the selection highlight boxes are computed to be."},{"name":"keyboardAppearance","type":"Brightness","required":true,"desc":"The appearance of the keyboard."},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@template flutter.widgets.editableText.scrollPadding} Configures the padding for the edges surrounding a [Scrollable] when the text field scrolls into view."},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.enableInteractiveSelection} Whether to enable user interface affordances for changing the text selection."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"scrollController","type":"ScrollController?","desc":"{@template flutter.widgets.editableText.scrollController} The [ScrollController] to use when vertically scrolling the input."},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.editableText.scrollPhysics} The [ScrollPhysics] to use when vertically scrolling the input."},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.scribbleEnabled} Whether iOS 14 Scribble features are enabled for this widget."},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.stylusHandwritingEnabled} Whether this input supports stylus handwriting, where the user can write directly on top of a field."},{"name":"autofillHints","type":"Iterable?","desc":"{@template flutter.widgets.editableText.autofillHints} A list of strings that helps the autofill service identify the type of this text input."},{"name":"autofillClient","type":"AutofillClient?","desc":"The [AutofillClient] that controls this input field's autofill behavior."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the scroll offset of the [EditableText]."},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.widgets.editableText.scrollBehavior} A [ScrollBehavior] that will be applied to this widget individually."},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@template flutter.widgets.editableText.contentInsertionConfiguration} Configuration of handler for media content inserted via the system input method."},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@template flutter.widgets.EditableText.contextMenuBuilder} Builds the text selection toolbar when requested by the user."},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@template flutter.widgets.EditableText.spellCheckConfiguration} Configuration that details how spell check should be performed."},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration","required":true,"desc":"The configuration for the magnifier to use with selections in this text field."}],"id":244,"lever":2,"family":1,"linkIds":[2,54],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of EditableText","desc":["【controller】: Controller 【TextEditingController】","【focusNode】: Focus Node 【FocusNode】","【style】: Text Style 【TextStyle】","【backgroundCursorColor】: Background Cursor Color 【Color】","【cursorColor】: Cursor Color 【Color】","The above five are the essential properties of EditableText. Others are the same as TextField and will not be listed here."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_zh-CN.json b/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_zh-CN.json new file mode 100644 index 000000000..5a9de9e6b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_zh-CN.json @@ -0,0 +1 @@ +{"name":"EditableText","path":"/src/widgets/editable_text.dart","parents":["StatefulWidget","Widget"],"desc":"基本文本输入字段。","fields":[{"name":"controller","type":"TextEditingController","required":true,"desc":"控制正在编辑的文本。"},{"name":"focusNode","type":"FocusNode","required":true,"desc":"控制此小部件是否具有键盘焦点。"},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@template flutter.widgets.editableText.obscuringCharacter} 如果 [obscureText] 为 true,用于遮挡文本的字符。"},{"name":"obscureText","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.obscureText} 是否隐藏正在编辑的文本(例如,用于密码)。"},{"name":"textHeightBehavior","type":"TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.readOnly} 文本是否可以更改。"},{"name":"forceLine","type":"bool","required":true,"desc":"无论文本宽度如何,文本是否占用全宽。"},{"name":"toolbarOptions","type":"ToolbarOptions","required":true,"desc":"工具栏选项的配置。"},{"name":"showSelectionHandles","type":"bool","required":true,"desc":"是否显示选择手柄。"},{"name":"showCursor","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.showCursor} 是否显示光标。"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.autocorrect} 是否启用自动更正。"},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"style","type":"TextStyle","required":true,"desc":"用于可编辑文本的文本样式。"},{"name":"undoController","type":"UndoHistoryController?","desc":"控制当前可编辑文本的撤销状态。"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@template flutter.widgets.editableText.textAlign} 文本应如何水平对齐。"},{"name":"textDirection","type":"TextDirection?","desc":"{@template flutter.widgets.editableText.textDirection} 文本的方向性。"},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@template flutter.widgets.editableText.textCapitalization} 配置平台键盘如何选择大写或小写键盘。"},{"name":"locale","type":"Locale?","desc":"用于在同一 Unicode 字符可以根据区域设置以不同方式呈现时选择字体。"},{"name":"textScaleFactor","type":"double?","desc":"{@template flutter.widgets.editableText.textScaleFactor} 已弃用。将在 Flutter 的未来版本中删除。请改用 [textScaler]。"},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"cursorColor","type":"Color","required":true,"desc":"绘制光标时使用的颜色。"},{"name":"autocorrectionTextRectColor","type":"Color?","desc":"绘制自动更正矩形时使用的颜色。"},{"name":"backgroundCursorColor","type":"Color","required":true,"desc":"在渲染浮动光标时绘制与文本对齐的背景光标时使用的颜色。"},{"name":"maxLines","type":"int?","desc":"{@template flutter.widgets.editableText.maxLines} 一次显示的最大行数,必要时换行。"},{"name":"minLines","type":"int?","desc":"{@template flutter.widgets.editableText.minLines} 当内容跨越较少行时占用的最小行数。"},{"name":"expands","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.expands} 此小部件的高度是否将调整大小以填充其父级。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.autofocus} 如果没有其他内容已经聚焦,此文本字段是否应该聚焦自己。"},{"name":"selectionColor","type":"Color?","desc":"绘制选择时使用的颜色。"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@template flutter.widgets.editableText.selectionControls} 用于构建文本选择手柄的可选委托。"},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@template flutter.widgets.editableText.keyboardType} 用于编辑文本的键盘类型。"},{"name":"textInputAction","type":"TextInputAction?","desc":"与软键盘一起使用的操作按钮类型。"},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.widgets.editableText.onChanged} 当用户启动对 TextField 值的更改时调用:当他们插入或删除文本时。"},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@template flutter.widgets.editableText.onEditingComplete} 当用户提交可编辑内容时调用(例如,用户按下键盘上的\\"},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@template flutter.widgets.editableText.onSubmitted} 当用户指示他们已完成编辑字段中的文本时调用。"},{"name":"onAppPrivateCommand","type":"AppPrivateCommandCallback?","desc":"{@template flutter.widgets.editableText.onAppPrivateCommand} 这用于从输入法接收私有命令。"},{"name":"onSelectionChanged","type":"SelectionChangedCallback?","desc":"{@template flutter.widgets.editableText.onSelectionChanged} 当用户更改文本选择时调用(包括光标位置)。{@endtemplate}"},{"name":"onSelectionHandleTapped","type":"VoidCallback?","desc":"{@macro flutter.widgets.SelectionOverlay.onSelectionHandleTapped}"},{"name":"groupId","type":"Object","required":true,"desc":"{@template flutter.widgets.editableText.groupId} 此文本字段的 [TextFieldTapRegion] 的组标识符。"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@template flutter.widgets.editableText.onTapOutside} 当文本字段聚焦时,对于发生在 [TextFieldTapRegion] 组外的每次点击调用。"},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"{@template flutter.widgets.editableText.onTapUpOutside} 当文本字段聚焦时,对于发生在 [TextFieldTapRegion] 组外的每次点击抬起调用。"},{"name":"inputFormatters","type":"List?","desc":"{@template flutter.widgets.editableText.inputFormatters} 可选的输入验证和格式化覆盖。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"rendererIgnoresPointer","type":"bool","required":true,"desc":"调用者是否将提供手势处理(true),或者 [EditableText] 是否应该处理基本手势(false)。"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@template flutter.widgets.editableText.cursorWidth} 光标的厚度。"},{"name":"cursorHeight","type":"double?","desc":"{@template flutter.widgets.editableText.cursorHeight} 光标的高度。"},{"name":"cursorRadius","type":"Radius?","desc":"{@template flutter.widgets.editableText.cursorRadius} 光标角的圆度。"},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.cursorOpacityAnimates} 光标是否在每次光标闪烁期间从完全透明动画到完全不透明。"},{"name":"cursorOffset","type":"Offset?","desc":"{@macro flutter.rendering.RenderEditable.cursorOffset}"},{"name":"paintCursorAboveText","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderEditable.paintCursorAboveText}"},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"控制选择高亮框的计算高度。"},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"控制选择高亮框的计算宽度。"},{"name":"keyboardAppearance","type":"Brightness","required":true,"desc":"键盘的外观。"},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@template flutter.widgets.editableText.scrollPadding} 当文本字段滚动到视图中时,为围绕 [Scrollable] 的边缘配置内边距。"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.enableInteractiveSelection} 是否启用用于更改文本选择的用户界面功能。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"scrollController","type":"ScrollController?","desc":"{@template flutter.widgets.editableText.scrollController} 垂直滚动输入时使用的 [ScrollController]。"},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.editableText.scrollPhysics} 垂直滚动输入时使用的 [ScrollPhysics]。"},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.scribbleEnabled} 是否为此小部件启用 iOS 14 Scribble 功能。"},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.stylusHandwritingEnabled} 此输入是否支持手写笔手写,用户可以直接在字段顶部书写。"},{"name":"autofillHints","type":"Iterable?","desc":"{@template flutter.widgets.editableText.autofillHints} 帮助自动填充服务识别此文本输入类型的字符串列表。"},{"name":"autofillClient","type":"AutofillClient?","desc":"控制此输入字段自动填充行为的 [AutofillClient]。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [EditableText] 滚动偏移量的恢复 ID。"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.widgets.editableText.scrollBehavior} 将单独应用于此小部件的 [ScrollBehavior]。"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@template flutter.widgets.editableText.contentInsertionConfiguration} 通过系统输入法插入的媒体内容处理程序的配置。"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@template flutter.widgets.EditableText.contextMenuBuilder} 用户请求时构建文本选择工具栏。"},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@template flutter.widgets.EditableText.spellCheckConfiguration} 详细说明如何执行拼写检查的配置。"},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration","required":true,"desc":"用于此文本字段中选择的放大镜配置。"}],"id":244,"localName":"可编辑文字","lever":2,"family":1,"linkIds":[2,54],"nodes":[{"file":"node1_base.dart","name":"EditableText基本使用","desc":["【controller】 : 控制器 【TextEditingController】","【focusNode】 : 焦点 【FocusNode】","【style】 : 文字样式 【TextStyle】","【backgroundCursorColor】 : 背景游标颜色 【Color】","【cursorColor】 : 游标颜色 【Color】","上面五个是EditableText必须的属性,其他同TextField,此处不再列举。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_en-US.json b/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_en-US.json new file mode 100644 index 000000000..f114cdb90 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_en-US.json @@ -0,0 +1 @@ +{"name":"ElevatedButton","path":"/src/material/elevated_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":" A Material Design \"elevated button\".","fields":[],"id":354,"lever":3,"family":1,"linkIds":[353,26,355],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ElevatedButton","desc":["【child】: Whether it has a scrollable body 【Widget】","【onPressed】: Click event 【VoidCallback】","【onLongPress】: Long press event 【VoidCallback】"]},{"file":"node2_style.dart","name":"ElevatedButton Style","desc":["【style】: Button style 【ButtonStyle】","【focusNode】: Focus 【FocusNode】","【clipBehavior】: Clip behavior 【Clip】","【autofocus】: Auto focus 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_zh-CN.json new file mode 100644 index 000000000..b7d126a64 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"ElevatedButton","path":"/src/material/elevated_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":"Material Design \"凸起按钮\"。","fields":[],"id":354,"localName":"升起按钮","lever":3,"family":1,"linkIds":[353,26,355],"nodes":[{"file":"node1_base.dart","name":"ElevatedButton基本使用","desc":["【child】 : 是否具有滚动主体 【Widget】","【onPressed】 : 点击事件 【VoidCallback】","【onLongPress】 : 长按事件 【VoidCallback】"]},{"file":"node2_style.dart","name":"ElevatedButton样式","desc":["【style】 : 按钮样式 【ButtonStyle】","【focusNode】 : 焦点 【FocusNode】","【clipBehavior】 : 裁剪行为 【Clip】","【autofocus】 : 自动聚焦 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_en-US.json new file mode 100644 index 000000000..68859bba1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_en-US.json @@ -0,0 +1 @@ +{"name":"ElevatedButtonTheme","path":"/src/material/elevated_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [ElevatedButton] descendants.","fields":[{"name":"data","type":"ElevatedButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":413,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_zh-CN.json new file mode 100644 index 000000000..9cf35e5fa --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"ElevatedButtonTheme","path":"/src/material/elevated_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [ElevatedButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"ElevatedButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":413,"localName":"ElevatedButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_en-US.json b/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_en-US.json new file mode 100644 index 000000000..8e538eae0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_en-US.json @@ -0,0 +1 @@ +{"name":"EndDrawerButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":" A Material Design end drawer icon button.","fields":[],"id":361,"lever":1,"family":0,"linkIds":[275,276],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of EndDrawerButton","desc":["【onPressed】: Click event 【VoidCallback?】","【style】: Button style 【ButtonStyle?】","When onPressed is empty, clicking will open the right drawer."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_zh-CN.json new file mode 100644 index 000000000..c9e8112e9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"EndDrawerButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":"Material Design 末端抽屉图标按钮。","fields":[],"id":361,"localName":"右抽屉按钮","lever":1,"family":0,"linkIds":[275,276],"nodes":[{"file":"node1_base.dart","name":"EndDrawerButton 基本使用","desc":["【onPressed】 : 点击事件 【VoidCallback?】","【style】: 按钮样式 【ButtonStyle?】","onPressed 为空时,点击时会打开右抽屉。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_en-US.json new file mode 100644 index 000000000..e04ef0752 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_en-US.json @@ -0,0 +1 @@ +{"name":"EndDrawerButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":" A \"end drawer\" icon that's appropriate for the current [TargetPlatform].","fields":[],"id":275,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"EndDrawerButtonIcon Effect","desc":["The _ActionIcon component adapts the right drawer button icon for different platforms based on the ActionIconTheme."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_zh-CN.json new file mode 100644 index 000000000..e1c023ebf --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_zh-CN.json @@ -0,0 +1 @@ +{"name":"EndDrawerButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":"适合当前 [TargetPlatform] 的\"末端抽屉\"图标。","fields":[],"id":275,"localName":"右抽屉按钮图标","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"EndDrawerButtonIcon 效果","desc":["通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的右抽屉按钮图标。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_en-US.json new file mode 100644 index 000000000..21af38d9b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_en-US.json @@ -0,0 +1 @@ +{"name":"ErrorWidget","path":"/src/widgets/framework.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that renders an exception's message.","fields":[{"name":"message","type":"String","required":true,"desc":"The message to display."}],"id":197,"lever":1,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ErrorWidget","desc":["Parameters: Display Message 【Object】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_zh-CN.json new file mode 100644 index 000000000..d9117796c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"ErrorWidget","path":"/src/widgets/framework.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"渲染异常消息的小部件。","fields":[{"name":"message","type":"String","required":true,"desc":"要显示的消息。"}],"id":197,"localName":"错误组件","lever":1,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ErrorWidget基本使用","desc":["入参 : 显示信息 【Object】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_en-US.json b/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_en-US.json new file mode 100644 index 000000000..1b98bf364 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_en-US.json @@ -0,0 +1 @@ +{"name":"ExcludeFocus","path":"/src/widgets/focus_scope.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that controls whether or not the descendants of this widget are focusable.","fields":[{"name":"excluding","type":"bool","required":true,"desc":"If true, will make this widget's descendants unfocusable."},{"name":"child","type":"Widget","required":true,"desc":"The child widget of this [ExcludeFocus]."}],"id":414,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_zh-CN.json new file mode 100644 index 000000000..cab9a0e84 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_zh-CN.json @@ -0,0 +1 @@ +{"name":"ExcludeFocus","path":"/src/widgets/focus_scope.dart","parents":["StatelessWidget","Widget"],"desc":"控制此小部件的后代是否可聚焦的小部件。","fields":[{"name":"excluding","type":"bool","required":true,"desc":"如果为 true,将使此小部件的后代无法聚焦。"},{"name":"child","type":"Widget","required":true,"desc":"此 [ExcludeFocus] 的子小部件。"}],"id":414,"localName":"ExcludeFocus","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_en-US.json b/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_en-US.json new file mode 100644 index 000000000..f7522fea9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_en-US.json @@ -0,0 +1 @@ +{"name":"ExcludeFocusTraversal","path":"/src/widgets/focus_traversal.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that controls whether or not the descendants of this widget are traversable.","fields":[{"name":"excluding","type":"bool","required":true,"desc":"If true, will make this widget's descendants untraversable."},{"name":"child","type":"Widget","required":true,"desc":"The child widget of this [ExcludeFocusTraversal]."}],"id":415,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_zh-CN.json new file mode 100644 index 000000000..82712d623 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_zh-CN.json @@ -0,0 +1 @@ +{"name":"ExcludeFocusTraversal","path":"/src/widgets/focus_traversal.dart","parents":["StatelessWidget","Widget"],"desc":"控制此小部件的后代是否可遍历的小部件。","fields":[{"name":"excluding","type":"bool","required":true,"desc":"如果为 true,将使此小部件的后代不可遍历。"},{"name":"child","type":"Widget","required":true,"desc":"此 [ExcludeFocusTraversal] 的子小部件。"}],"id":415,"localName":"ExcludeFocusTraversal","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_en-US.json b/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_en-US.json new file mode 100644 index 000000000..8ab178fb0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_en-US.json @@ -0,0 +1 @@ +{"name":"ExcludeSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that drops all the semantics of its descendants.","fields":[{"name":"excluding","type":"bool","required":true,"desc":"Whether this widget is excluded in the semantics tree."}],"id":416,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_zh-CN.json new file mode 100644 index 000000000..4ee73f1de --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_zh-CN.json @@ -0,0 +1 @@ +{"name":"ExcludeSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"丢弃其所有后代语义的小部件。","fields":[{"name":"excluding","type":"bool","required":true,"desc":"此小部件是否在语义树中被排除。"}],"id":416,"localName":"ExcludeSemantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_en-US.json new file mode 100644 index 000000000..ac2b3f416 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_en-US.json @@ -0,0 +1 @@ +{"name":"ExpandIcon","path":"/src/material/expand_icon.dart","parents":["StatefulWidget","Widget"],"desc":" A widget representing a rotating expand/collapse button. The icon rotates 180 degrees when pressed, then reverts the animation on a second press. The underlying icon is [Icons.expand_more].","fields":[{"name":"isExpanded","type":"bool","required":true,"desc":"Whether the icon is in an expanded state."},{"name":"size","type":"double","required":true,"desc":"The size of the icon."},{"name":"onPressed","type":"ValueChanged?","desc":"The callback triggered when the icon is pressed and the state changes between expanded and collapsed. The value passed to the current state."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The padding around the icon. The entire padded icon will react to input gestures."},{"name":"color","type":"Color?","desc":"{@template flutter.material.ExpandIcon.color} The color of the icon."},{"name":"disabledColor","type":"Color?","desc":"The color of the icon when it is disabled, i.e. if [onPressed] is null."},{"name":"expandedColor","type":"Color?","desc":"The color of the icon when the icon is expanded."},{"name":"splashColor","type":"Color?","desc":"Defines the splash color of the IconButton."},{"name":"highlightColor","type":"Color?","desc":"Defines the highlight color of the IconButton."}],"id":51,"lever":1,"family":1,"linkIds":[66,125],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ExpandIcon","desc":["【isExpanded】 : Whether expanded 【bool】","【padding】 : Padding 【EdgeInsetsGeometry】,","【size】 : Icon size 【double】","【color】 : Color when not expanded 【Color】","【expandedColor】 : Color when expanded 【Color】","【onPressed】 : Click event 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_zh-CN.json new file mode 100644 index 000000000..8506faf29 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_zh-CN.json @@ -0,0 +1 @@ +{"name":"ExpandIcon","path":"/src/material/expand_icon.dart","parents":["StatefulWidget","Widget"],"desc":"表示旋转展开/折叠按钮的小部件。按下时图标旋转 180 度,第二次按下时恢复动画。底层图标是 [Icons.expand_more]。","fields":[{"name":"isExpanded","type":"bool","required":true,"desc":"图标是否处于展开状态。"},{"name":"size","type":"double","required":true,"desc":"图标的大小。"},{"name":"onPressed","type":"ValueChanged?","desc":"按下图标且状态在展开和折叠之间变化时触发的回调。传递给当前状态的值。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"图标周围的内边距。整个带内边距的图标将对输入手势做出反应。"},{"name":"color","type":"Color?","desc":"{@template flutter.material.ExpandIcon.color} 图标的颜色。"},{"name":"disabledColor","type":"Color?","desc":"图标禁用时的颜色,即 [onPressed] 为 null 时。"},{"name":"expandedColor","type":"Color?","desc":"图标展开时的颜色。"},{"name":"splashColor","type":"Color?","desc":"定义 IconButton 的飞溅颜色。"},{"name":"highlightColor","type":"Color?","desc":"定义 IconButton 的高亮颜色。"}],"id":51,"localName":"展开图标","lever":1,"family":1,"linkIds":[66,125],"nodes":[{"file":"node1_base.dart","name":"ExpandIcon基本使用","desc":["【isExpanded】 : 是否展开 【bool】","【padding】 : 内边距 【EdgeInsetsGeometry】,","【size】 : 图标大小 【double】","【color】 : 不展开时颜色 【Color】","【expandedColor】 : 展开时颜色 【Color】","【onPressed】 : 点击事件 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_en-US.json b/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_en-US.json new file mode 100644 index 000000000..3564f26b0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_en-US.json @@ -0,0 +1 @@ +{"name":"Expanded","path":"/src/widgets/basic.dart","parents":["Flexible","ParentDataWidget","ProxyWidget","Widget"],"desc":" A widget that expands a child of a [Row], [Column], or [Flex] so that the child fills the available space.","fields":[],"id":106,"lever":4,"family":5,"linkIds":[94,109],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Expanded","desc":["【child】: child 【Widget】","【flex】: Proportion of remaining space allocation 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_zh-CN.json new file mode 100644 index 000000000..b64f100cd --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_zh-CN.json @@ -0,0 +1 @@ +{"name":"Expanded","path":"/src/widgets/basic.dart","parents":["Flexible","ParentDataWidget","ProxyWidget","Widget"],"desc":"扩展 [Row]、[Column] 或 [Flex] 的子项,使子项填充可用空间的小部件。","fields":[],"id":106,"localName":"延展组件","lever":4,"family":5,"linkIds":[94,109],"nodes":[{"file":"node1_base.dart","name":"Expanded基本使用","desc":["【child】 : 孩子 【Widget】","【flex】 : 剩余空间分配占比 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_en-US.json b/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_en-US.json new file mode 100644 index 000000000..21e156d47 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_en-US.json @@ -0,0 +1 @@ +{"name":"Expansible","path":"/src/widgets/expansible.dart","parents":["StatefulWidget","Widget"],"desc":" A [StatefulWidget] that expands and collapses.","fields":[{"name":"controller","type":"ExpansibleController","required":true,"desc":"Expands and collapses the widget."},{"name":"headerBuilder","type":"ExpansibleComponentBuilder","required":true,"desc":"Builds the always-displayed header."},{"name":"bodyBuilder","type":"ExpansibleComponentBuilder","required":true,"desc":"Builds the collapsible body."},{"name":"duration","type":"Duration","required":true,"desc":"The duration of the expansion animation."},{"name":"curve","type":"Curve","required":true,"desc":"The curve of the expansion animation."},{"name":"reverseCurve","type":"Curve?","desc":"The reverse curve of the expansion animation."},{"name":"maintainState","type":"bool","required":true,"desc":"Whether the state of the body is maintained when the widget expands or collapses."},{"name":"expansibleBuilder","type":"ExpansibleBuilder","required":true,"desc":"Builds the widget with the results of [headerBuilder] and [bodyBuilder]."}],"id":417,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_zh-CN.json new file mode 100644 index 000000000..befc9509c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_zh-CN.json @@ -0,0 +1 @@ +{"name":"Expansible","path":"/src/widgets/expansible.dart","parents":["StatefulWidget","Widget"],"desc":"展开和折叠的 [StatefulWidget]。","fields":[{"name":"controller","type":"ExpansibleController","required":true,"desc":"展开和折叠小部件。"},{"name":"headerBuilder","type":"ExpansibleComponentBuilder","required":true,"desc":"构建始终显示的标题。"},{"name":"bodyBuilder","type":"ExpansibleComponentBuilder","required":true,"desc":"构建可折叠的主体。"},{"name":"duration","type":"Duration","required":true,"desc":"展开动画的持续时间。"},{"name":"curve","type":"Curve","required":true,"desc":"展开动画的曲线。"},{"name":"reverseCurve","type":"Curve?","desc":"展开动画的反向曲线。"},{"name":"maintainState","type":"bool","required":true,"desc":"当小部件展开或折叠时是否保持主体的状态。"},{"name":"expansibleBuilder","type":"ExpansibleBuilder","required":true,"desc":"使用 [headerBuilder] 和 [bodyBuilder] 的结果构建小部件。"}],"id":417,"localName":"Expansible","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_en-US.json b/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_en-US.json new file mode 100644 index 000000000..db0f4249d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_en-US.json @@ -0,0 +1 @@ +{"name":"ExpansionPanelList","path":"/src/material/expansion_panel.dart","parents":["StatefulWidget","Widget"],"desc":" A material expansion panel list that lays out its children and animates expansions.","fields":[{"name":"children","type":"List","required":true,"desc":"The children of the expansion panel list. They are laid out in a similar fashion to [ListBody]."},{"name":"expansionCallback","type":"ExpansionPanelCallback?","desc":"The callback that gets called whenever one of the expand/collapse buttons is pressed. The arguments passed to the callback are the index of the pressed panel and whether the panel is currently expanded or not."},{"name":"animationDuration","type":"Duration","required":true,"desc":"The duration of the expansion animation."},{"name":"initialOpenPanelValue","type":"Object?","desc":"The value of the panel that initially begins open. (This value is only used when initializing with the [ExpansionPanelList.radio] constructor.)"},{"name":"expandedHeaderPadding","type":"EdgeInsets","required":true,"desc":"The padding that surrounds the panel header when expanded."},{"name":"dividerColor","type":"Color?","desc":"Defines color for the divider when [ExpansionPanel.isExpanded] is false."},{"name":"elevation","type":"double","required":true,"desc":"Defines elevation for the [ExpansionPanel] while it's expanded."},{"name":"expandIconColor","type":"Color?","desc":"{@macro flutter.material.ExpandIcon.color}"},{"name":"materialGapSize","type":"double","required":true,"desc":"Defines the [MaterialGap.size] of the [MaterialGap] which is placed between the [ExpansionPanelList.children] when they're expanded."}],"id":178,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ExpansionPanelList","desc":["【children】: List of child components 【List】","【animationDuration】: Animation duration 【Duration】","【expansionCallback】: Expansion callback 【List】","【onPressed】: Click event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_zh-CN.json new file mode 100644 index 000000000..947300299 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_zh-CN.json @@ -0,0 +1 @@ +{"name":"ExpansionPanelList","path":"/src/material/expansion_panel.dart","parents":["StatefulWidget","Widget"],"desc":"布局其子项并为展开设置动画的 material 展开面板列表。","fields":[{"name":"children","type":"List","required":true,"desc":"展开面板列表的子项。它们以类似于 [ListBody] 的方式布局。"},{"name":"expansionCallback","type":"ExpansionPanelCallback?","desc":"每当按下展开/折叠按钮之一时调用的回调。传递给回调的参数是按下的面板的索引以及面板当前是否展开。"},{"name":"animationDuration","type":"Duration","required":true,"desc":"展开动画的持续时间。"},{"name":"initialOpenPanelValue","type":"Object?","desc":"最初开始打开的面板的值。(此值仅在使用 [ExpansionPanelList.radio] 构造函数初始化时使用。)"},{"name":"expandedHeaderPadding","type":"EdgeInsets","required":true,"desc":"展开时围绕面板标题的内边距。"},{"name":"dividerColor","type":"Color?","desc":"当 [ExpansionPanel.isExpanded] 为 false 时定义分隔符的颜色。"},{"name":"elevation","type":"double","required":true,"desc":"定义 [ExpansionPanel] 展开时的高度。"},{"name":"expandIconColor","type":"Color?","desc":"{@macro flutter.material.ExpandIcon.color}"},{"name":"materialGapSize","type":"double","required":true,"desc":"定义当 [ExpansionPanelList.children] 展开时放置在它们之间的 [MaterialGap] 的 [MaterialGap.size]。"}],"id":178,"localName":"展开列表","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ExpansionPanelList基本使用","desc":["【children】 : 子组件列表 【List】","【animationDuration】 : 动画时长 【Duration】","【expansionCallback】 : 展开回调 【List】","【onPressed】 : 点击事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_en-US.json b/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_en-US.json new file mode 100644 index 000000000..2795d5c63 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_en-US.json @@ -0,0 +1 @@ +{"name":"ExpansionTile","path":"/src/material/expansion_tile.dart","parents":["StatefulWidget","Widget"],"desc":" A single-line [ListTile] with an expansion arrow icon that expands or collapses the tile to reveal or hide the [children].","fields":[{"name":"leading","type":"Widget?","desc":"A widget to display before the title."},{"name":"title","type":"Widget","required":true,"desc":"The primary content of the list item."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"onExpansionChanged","type":"ValueChanged?","desc":"Called when the tile expands or collapses."},{"name":"children","type":"List","required":true,"desc":"The widgets that are displayed when the tile expands."},{"name":"backgroundColor","type":"Color?","desc":"The color to display behind the sublist when expanded."},{"name":"collapsedBackgroundColor","type":"Color?","desc":"When not null, defines the background color of tile when the sublist is collapsed."},{"name":"trailing","type":"Widget?","desc":"A widget to display after the title."},{"name":"showTrailingIcon","type":"bool","required":true,"desc":"Specifies if the [ExpansionTile] should build a default trailing icon if [trailing] is null."},{"name":"initiallyExpanded","type":"bool","required":true,"desc":"Specifies if the list tile is initially expanded (true) or collapsed (false)."},{"name":"maintainState","type":"bool","required":true,"desc":"Specifies whether the state of the children is maintained when the tile expands and collapses."},{"name":"tilePadding","type":"EdgeInsetsGeometry?","desc":"Specifies padding for the [ListTile]."},{"name":"expandedAlignment","type":"Alignment?","desc":"Specifies the alignment of [children], which are arranged in a column when the tile is expanded."},{"name":"expandedCrossAxisAlignment","type":"CrossAxisAlignment?","desc":"Specifies the alignment of each child within [children] when the tile is expanded."},{"name":"childrenPadding","type":"EdgeInsetsGeometry?","desc":"Specifies padding for [children]."},{"name":"iconColor","type":"Color?","desc":"The icon color of tile's expansion arrow icon when the sublist is expanded."},{"name":"collapsedIconColor","type":"Color?","desc":"The icon color of tile's expansion arrow icon when the sublist is collapsed."},{"name":"textColor","type":"Color?","desc":"The color of the tile's titles when the sublist is expanded."},{"name":"collapsedTextColor","type":"Color?","desc":"The color of the tile's titles when the sublist is collapsed."},{"name":"shape","type":"ShapeBorder?","desc":"The tile's border shape when the sublist is expanded."},{"name":"collapsedShape","type":"ShapeBorder?","desc":"The tile's border shape when the sublist is collapsed."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"Typically used to force the expansion arrow icon to the tile's leading or trailing edge."},{"name":"controller","type":"ExpansionTileController?","desc":"If provided, the controller can be used to expand and collapse tiles."},{"name":"dense","type":"bool?","desc":"{@macro flutter.material.ListTile.dense}"},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the expansion tile's layout will be."},{"name":"minTileHeight","type":"double?","desc":"{@macro flutter.material.ListTile.minTileHeight}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"enabled","type":"bool","required":true,"desc":"Whether this expansion tile is interactive."},{"name":"expansionAnimationStyle","type":"AnimationStyle?","desc":"Used to override the expansion animation curve and duration."},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"Whether to add button:true to the semantics if onTap is provided. This is a temporary flag to help changing the behavior of ListTile onTap semantics."}],"id":52,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ExpansionTile","desc":["【children】: Expanded content 【List】","【leading】: Leading component 【Widget】","【title】: Title component 【Widget】","【trailing】: Trailing component 【Widget】","【backgroundColor】: Background color 【Color】","【onExpansionChanged】: Collapse event 【Function(bool)】","【initiallyExpanded】: Whether initially expanded 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_zh-CN.json new file mode 100644 index 000000000..08cdca65f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_zh-CN.json @@ -0,0 +1 @@ +{"name":"ExpansionTile","path":"/src/material/expansion_tile.dart","parents":["StatefulWidget","Widget"],"desc":"带有展开箭头图标的单行 [ListTile],展开或折叠磁贴以显示或隐藏 [children]。","fields":[{"name":"leading","type":"Widget?","desc":"在标题前显示的小部件。"},{"name":"title","type":"Widget","required":true,"desc":"列表项的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"onExpansionChanged","type":"ValueChanged?","desc":"磁贴展开或折叠时调用。"},{"name":"children","type":"List","required":true,"desc":"磁贴展开时显示的小部件。"},{"name":"backgroundColor","type":"Color?","desc":"展开时子列表后面显示的颜色。"},{"name":"collapsedBackgroundColor","type":"Color?","desc":"当不为 null 时,定义子列表折叠时磁贴的背景颜色。"},{"name":"trailing","type":"Widget?","desc":"在标题后显示的小部件。"},{"name":"showTrailingIcon","type":"bool","required":true,"desc":"指定如果 [trailing] 为 null,[ExpansionTile] 是否应构建默认尾随图标。"},{"name":"initiallyExpanded","type":"bool","required":true,"desc":"指定列表磁贴最初是展开(true)还是折叠(false)。"},{"name":"maintainState","type":"bool","required":true,"desc":"指定磁贴展开和折叠时是否保持子项的状态。"},{"name":"tilePadding","type":"EdgeInsetsGeometry?","desc":"指定 [ListTile] 的内边距。"},{"name":"expandedAlignment","type":"Alignment?","desc":"指定磁贴展开时排列在列中的 [children] 的对齐方式。"},{"name":"expandedCrossAxisAlignment","type":"CrossAxisAlignment?","desc":"指定磁贴展开时 [children] 内每个子项的对齐方式。"},{"name":"childrenPadding","type":"EdgeInsetsGeometry?","desc":"指定 [children] 的内边距。"},{"name":"iconColor","type":"Color?","desc":"子列表展开时磁贴展开箭头图标的图标颜色。"},{"name":"collapsedIconColor","type":"Color?","desc":"子列表折叠时磁贴展开箭头图标的图标颜色。"},{"name":"textColor","type":"Color?","desc":"子列表展开时磁贴标题的颜色。"},{"name":"collapsedTextColor","type":"Color?","desc":"子列表折叠时磁贴标题的颜色。"},{"name":"shape","type":"ShapeBorder?","desc":"子列表展开时磁贴的边框形状。"},{"name":"collapsedShape","type":"ShapeBorder?","desc":"子列表折叠时磁贴的边框形状。"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"通常用于强制展开箭头图标到磁贴的前缘或后缘。"},{"name":"controller","type":"ExpansionTileController?","desc":"如果提供,控制器可用于展开和折叠磁贴。"},{"name":"dense","type":"bool?","desc":"{@macro flutter.material.ListTile.dense}"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义展开磁贴布局的紧凑程度。"},{"name":"minTileHeight","type":"double?","desc":"{@macro flutter.material.ListTile.minTileHeight}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"enabled","type":"bool","required":true,"desc":"此展开磁贴是否可交互。"},{"name":"expansionAnimationStyle","type":"AnimationStyle?","desc":"用于覆盖展开动画曲线和持续时间。"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"如果提供了 onTap,是否向语义添加 button:true。这是一个临时标志,用于帮助更改 ListTile onTap 语义的行为。"}],"id":52,"localName":"展开瓦片","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ExpansionTile基本使用","desc":["【children】 : 展开内容 【List】","【leading】 : 头左组件 【Widget】","【title】 : 头中组件 【Widget】","【trailing】 : 头尾组件 【Widget】","【backgroundColor】 : 背景色 【Color】","【onExpansionChanged】 : 折叠事件 【Function(bool)】","【initiallyExpanded】 : 是否初始时展开 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_en-US.json new file mode 100644 index 000000000..06b75b646 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_en-US.json @@ -0,0 +1 @@ +{"name":"ExpansionTileTheme","path":"/src/material/expansion_tile_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ExpansionTileTheme] of its [ExpansionTile] descendants.","fields":[{"name":"data","type":"ExpansionTileThemeData","required":true,"desc":"Specifies color, alignment, and text style values for descendant [ExpansionTile] widgets."}],"id":418,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_zh-CN.json new file mode 100644 index 000000000..d88de856c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"ExpansionTileTheme","path":"/src/material/expansion_tile_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [ExpansionTile] 后代的默认 [ExpansionTileTheme]。","fields":[{"name":"data","type":"ExpansionTileThemeData","required":true,"desc":"指定后代 [ExpansionTile] 小部件的颜色、对齐和文本样式值。"}],"id":418,"localName":"ExpansionTileTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_en-US.json b/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_en-US.json new file mode 100644 index 000000000..07c8d6b1d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_en-US.json @@ -0,0 +1 @@ +{"name":"FadeInImage","path":"/src/widgets/fade_in_image.dart","parents":["StatefulWidget","Widget"],"desc":" An image that shows a [placeholder] image while the target [image] is loading, then fades in the new image when it loads.","fields":[{"name":"placeholder","type":"ImageProvider","required":true,"desc":"Image displayed while the target [image] is loading."},{"name":"placeholderErrorBuilder","type":"ImageErrorWidgetBuilder?","desc":"A builder function that is called if an error occurs during placeholder image loading."},{"name":"image","type":"ImageProvider","required":true,"desc":"The target image that is displayed once it has loaded."},{"name":"imageErrorBuilder","type":"ImageErrorWidgetBuilder?","desc":"A builder function that is called if an error occurs during image loading."},{"name":"fadeOutDuration","type":"Duration","required":true,"desc":"The duration of the fade-out animation for the [placeholder]."},{"name":"fadeOutCurve","type":"Curve","required":true,"desc":"The curve of the fade-out animation for the [placeholder]."},{"name":"fadeInDuration","type":"Duration","required":true,"desc":"The duration of the fade-in animation for the [image]."},{"name":"fadeInCurve","type":"Curve","required":true,"desc":"The curve of the fade-in animation for the [image]."},{"name":"width","type":"double?","desc":"If non-null, require the image to have this width."},{"name":"color","type":"Color?","desc":"If non-null, this color is blended with each image pixel using [colorBlendMode]."},{"name":"colorBlendMode","type":"BlendMode?","desc":"Used to combine [color] with this [image]."},{"name":"placeholderColor","type":"Color?","desc":"If non-null, this color is blended with each placeholder image pixel using [placeholderColorBlendMode]."},{"name":"placeholderColorBlendMode","type":"BlendMode?","desc":"Used to combine [placeholderColor] with the [placeholder] image."},{"name":"height","type":"double?","desc":"If non-null, require the image to have this height."},{"name":"fit","type":"BoxFit?","desc":"How to inscribe the image into the space allocated during layout."},{"name":"placeholderFit","type":"BoxFit?","desc":"How to inscribe the placeholder image into the space allocated during layout."},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"The rendering quality of the image."},{"name":"placeholderFilterQuality","type":"FilterQuality?","desc":"The rendering quality of the placeholder image."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the image within its bounds."},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"How to paint any portions of the layout bounds not covered by the image."},{"name":"matchTextDirection","type":"bool","required":true,"desc":"Whether to paint the image in the direction of the [TextDirection]."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"Whether to exclude this image from semantics."},{"name":"imageSemanticLabel","type":"String?","desc":"A semantic description of the [image]."}],"id":8,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FadeInImage.assetNetwork Load Network Image","desc":["【placeholder】 : Placeholder image address 【String】","【image】 : Display image address 【String】","【width】: Width 【double】","【height】: Height 【double】","【fadeInDuration】: Fade-in duration 【Duration】","【fadeOutDuration】: Fade-out duration 【Duration】","【fadeInCurve】: Fade-in curve 【Cubic】","【fadeOutCurve】: Fade-out curve 【Cubic】","【fit】: Fit mode 【BoxFit】","【alignment】: Alignment mode 【Alignment】","【repeat】: Repeat mode 【ImageRepeat】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_zh-CN.json new file mode 100644 index 000000000..d000632e5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_zh-CN.json @@ -0,0 +1 @@ +{"name":"FadeInImage","path":"/src/widgets/fade_in_image.dart","parents":["StatefulWidget","Widget"],"desc":"在目标 [image] 加载时显示 [placeholder] 图像,然后在加载时淡入新图像的图像。","fields":[{"name":"placeholder","type":"ImageProvider","required":true,"desc":"目标 [image] 加载时显示的图像。"},{"name":"placeholderErrorBuilder","type":"ImageErrorWidgetBuilder?","desc":"如果在占位符图像加载期间发生错误,则调用的构建器函数。"},{"name":"image","type":"ImageProvider","required":true,"desc":"加载后显示的目标图像。"},{"name":"imageErrorBuilder","type":"ImageErrorWidgetBuilder?","desc":"如果在图像加载期间发生错误,则调用的构建器函数。"},{"name":"fadeOutDuration","type":"Duration","required":true,"desc":"[placeholder] 的淡出动画持续时间。"},{"name":"fadeOutCurve","type":"Curve","required":true,"desc":"[placeholder] 的淡出动画曲线。"},{"name":"fadeInDuration","type":"Duration","required":true,"desc":"[image] 的淡入动画持续时间。"},{"name":"fadeInCurve","type":"Curve","required":true,"desc":"[image] 的淡入动画曲线。"},{"name":"width","type":"double?","desc":"如果非空,要求图像具有此宽度。"},{"name":"color","type":"Color?","desc":"如果非空,此颜色使用 [colorBlendMode] 与每个图像像素混合。"},{"name":"colorBlendMode","type":"BlendMode?","desc":"用于将 [color] 与此 [image] 组合。"},{"name":"placeholderColor","type":"Color?","desc":"如果非空,此颜色使用 [placeholderColorBlendMode] 与每个占位符图像像素混合。"},{"name":"placeholderColorBlendMode","type":"BlendMode?","desc":"用于将 [placeholderColor] 与 [placeholder] 图像组合。"},{"name":"height","type":"double?","desc":"如果非空,要求图像具有此高度。"},{"name":"fit","type":"BoxFit?","desc":"如何在布局期间分配的空间中刻画图像。"},{"name":"placeholderFit","type":"BoxFit?","desc":"如何在布局期间分配的空间中刻画占位符图像。"},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"图像的渲染质量。"},{"name":"placeholderFilterQuality","type":"FilterQuality?","desc":"占位符图像的渲染质量。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在其边界内对齐图像。"},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"如何绘制图像未覆盖的布局边界的任何部分。"},{"name":"matchTextDirection","type":"bool","required":true,"desc":"是否在 [TextDirection] 的方向上绘制图像。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"是否从语义中排除此图像。"},{"name":"imageSemanticLabel","type":"String?","desc":"[image] 的语义描述。"}],"id":8,"localName":"淡入图片","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FadeInImage.assetNetwork加载网络图片","desc":["【placeholder】 : 展位图地址 【String】","【image】 : 显示图地址 【String】","【width】: 宽 【double】","【height】: 高 【double】","【fadeInDuration】: 淡入时长 【Duration】","【fadeOutDuration】: 淡出时长 【Duration】","【fadeInCurve】: 淡入曲线 【Cubic】","【fadeOutCurve】: 淡出曲线 【Cubic】","【fit】: 适应模式 【BoxFit】","【alignment】: 对齐模式 【Alignment】","【repeat】: 重复模式 【ImageRepeat】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_en-US.json new file mode 100644 index 000000000..cb13f8cb6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_en-US.json @@ -0,0 +1 @@ +{"name":"FadeTransition","path":"/src/widgets/transitions.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Animates the opacity of a widget.","fields":[{"name":"opacity","type":"Animation","required":true,"desc":"The animation that controls the opacity of the child."},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"Whether the semantic information of the children is always included."}],"id":89,"lever":3,"family":2,"linkIds":[73,118],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FadeTransition","desc":["【child】 : Child Component 【Widget】","【opacity】 : Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_zh-CN.json new file mode 100644 index 000000000..f11a92370 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_zh-CN.json @@ -0,0 +1 @@ +{"name":"FadeTransition","path":"/src/widgets/transitions.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对小部件的不透明度进行动画处理。","fields":[{"name":"opacity","type":"Animation","required":true,"desc":"控制子项不透明度的动画。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含子项的语义信息。"}],"id":89,"localName":"透明变换","lever":3,"family":2,"linkIds":[73,118],"nodes":[{"file":"node1_base.dart","name":"FadeTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【opacity】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_en-US.json b/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_en-US.json new file mode 100644 index 000000000..c2a7ab200 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_en-US.json @@ -0,0 +1 @@ +{"name":"FilledButton","path":"/src/material/filled_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":" A Material Design filled button.","fields":[],"id":359,"lever":4,"family":1,"linkIds":[354,355,353],"nodes":[{"file":"node1.dart","name":"Basic Usage","desc":["【child】: Button content 【Widget】","【onPressed】: Click event 【VoidCallback】","【onHover】: Long press event 【ValueChanged? 】","【onLongPress】: Long press event 【VoidCallback?】","The filled button is visually second only to [FloatingActionButton] and is used for important, finalizing actions such as save, join now, or confirm."]},{"file":"node2.dart","name":"Tonal Variant","desc":["FilledButton.tonal is a tonal filled button, visually between [FilledButton] and [OutlinedButton], suitable for scenarios requiring slightly stronger emphasis than an outlined button but with lower priority. For example, a [Next] button."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_zh-CN.json new file mode 100644 index 000000000..76654b760 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"FilledButton","path":"/src/material/filled_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":"Material Design 填充按钮。","fields":[],"id":359,"localName":"填充按钮","lever":4,"family":1,"linkIds":[354,355,353],"nodes":[{"file":"node1.dart","name":"基本使用","desc":["【child】 : 按钮内容 【Widget】","【onPressed】 : 点击事件 【VoidCallback】","【onHover】 : 长按事件 【ValueChanged? 】","【onLongPress】 : 长按事件 【VoidCallback?】","填充按钮在视觉上仅次于 [FloatingActionButton],应用于重要的、最终完成流程的操作,例如: 保存、立即加入 或 确认。"]},{"file":"node2.dart","name":"色调变体","desc":["FilledButton.tonal 是色调填充按钮,视觉上介于 [FilledButton] 和 [OutlinedButton] 之间,适用于需要比轮廓按钮稍强一些的强调但优先级较低的场景。例如 [下一步] 按钮 "]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_en-US.json new file mode 100644 index 000000000..4ea4fc714 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_en-US.json @@ -0,0 +1 @@ +{"name":"FilledButtonTheme","path":"/src/material/filled_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [FilledButton] descendants.","fields":[{"name":"data","type":"FilledButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":419,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_zh-CN.json new file mode 100644 index 000000000..d28ecd30c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"FilledButtonTheme","path":"/src/material/filled_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [FilledButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"FilledButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":419,"localName":"FilledButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_en-US.json b/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_en-US.json new file mode 100644 index 000000000..36425a3d4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_en-US.json @@ -0,0 +1 @@ +{"name":"FilterChip","path":"/src/material/filter_chip.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design filter chip.","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"selected","type":"bool","required":true},{"name":"onSelected","type":"ValueChanged?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"pressElevation","type":"double?"},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":15,"lever":4,"family":0,"linkIds":[11,12,13,14,153],"nodes":[{"file":"node1_base.dart","name":"FilterChip can accept selection events","desc":["【selected】: Whether selected 【bool】","【onSelected】: Selection event 【Function(bool)】","【selectedColor】: Color after selection 【Color】","【selectedShadowColor】: Shadow color after selection 【Color】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_zh-CN.json new file mode 100644 index 000000000..03f9843e8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_zh-CN.json @@ -0,0 +1 @@ +{"name":"FilterChip","path":"/src/material/filter_chip.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 过滤芯片。","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"selected","type":"bool","required":true},{"name":"onSelected","type":"ValueChanged?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"pressElevation","type":"double?"},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":15,"localName":"过滤小条","lever":4,"family":0,"linkIds":[11,12,13,14,153],"nodes":[{"file":"node1_base.dart","name":"FilterChip可接受选择事件","desc":["【selected】: 是否选择 【bool】","【onSelected】: 选择事件 【Function(bool)】","【selectedColor】: 选择后的颜色 【Color】","【selectedShadowColor】: 选择后的阴影颜色 【Color】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_en-US.json new file mode 100644 index 000000000..747d85f9e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_en-US.json @@ -0,0 +1 @@ +{"name":"FittedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Scales and positions its child within itself according to [fit].","fields":[{"name":"fit","type":"BoxFit","required":true,"desc":"How to inscribe the child into the space allocated during layout."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the child within its parent's bounds."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":87,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FittedBox","desc":["【child】: Child component 【Widget】","【fit】: Adaptation mode 【BoxFit】","【alignment】: Alignment method 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_zh-CN.json new file mode 100644 index 000000000..800238914 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_zh-CN.json @@ -0,0 +1 @@ +{"name":"FittedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"根据 [fit] 在自身内缩放和定位其子项。","fields":[{"name":"fit","type":"BoxFit","required":true,"desc":"如何在布局期间分配的空间中刻画子项。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在其父级边界内对齐子项。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":87,"localName":"适应盒","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FittedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【fit】 : 适应模式 【BoxFit】","【alignment】 : 对齐方式 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flex/Flex_en-US.json b/modules/widget_system/widgets/doc/widgets/Flex/Flex_en-US.json new file mode 100644 index 000000000..360fa4244 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Flex/Flex_en-US.json @@ -0,0 +1 @@ +{"name":"Flex","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that displays its children in a one-dimensional array.","fields":[{"name":"direction","type":"Axis","required":true,"desc":"The direction to use as the main axis."},{"name":"mainAxisAlignment","type":"MainAxisAlignment","required":true,"desc":"How the children should be placed along the main axis."},{"name":"mainAxisSize","type":"MainAxisSize","required":true,"desc":"How much space should be occupied in the main axis."},{"name":"crossAxisAlignment","type":"CrossAxisAlignment","required":true,"desc":"How the children should be placed along the cross axis."},{"name":"textDirection","type":"TextDirection?","desc":"Determines the order to lay children out horizontally and how to interpret `start` and `end` in the horizontal direction."},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"Determines the order to lay children out vertically and how to interpret `start` and `end` in the vertical direction."},{"name":"textBaseline","type":"TextBaseline?","desc":"If aligning items according to their baseline, which baseline to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"spacing","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderFlex.spacing}"}],"id":94,"lever":5,"family":3,"linkIds":[95,96,106,107,109],"nodes":[{"file":"node_01.dart","name":"Flex Direction","desc":["【children】: Component list 【List】","【direction】: Direction 【Axis】"]},{"file":"node_02.dart","name":"Flex Main Axis Alignment","desc":["【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】"]},{"file":"node_03.dart","name":"Flex Cross Axis Alignment","desc":["【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】"]},{"file":"node_04.dart","name":"Flex Vertical Direction","desc":["【verticalDirection】: Vertical direction 【VerticalDirection】"]},{"file":"node_05.dart","name":"Flex Horizontal Direction","desc":["【textDirection】: Horizontal direction 【TextDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flex/Flex_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Flex/Flex_zh-CN.json new file mode 100644 index 000000000..d1305f97d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Flex/Flex_zh-CN.json @@ -0,0 +1 @@ +{"name":"Flex","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在一维数组中显示其子项的小部件。","fields":[{"name":"direction","type":"Axis","required":true,"desc":"用作主轴的方向。"},{"name":"mainAxisAlignment","type":"MainAxisAlignment","required":true,"desc":"子项应如何沿主轴放置。"},{"name":"mainAxisSize","type":"MainAxisSize","required":true,"desc":"主轴应占用多少空间。"},{"name":"crossAxisAlignment","type":"CrossAxisAlignment","required":true,"desc":"子项应如何沿交叉轴放置。"},{"name":"textDirection","type":"TextDirection?","desc":"确定水平布局子项的顺序以及如何解释水平方向上的 `start` 和 `end`。"},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"确定垂直布局子项的顺序以及如何解释垂直方向上的 `start` 和 `end`。"},{"name":"textBaseline","type":"TextBaseline?","desc":"如果根据基线对齐项目,使用哪个基线。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"spacing","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderFlex.spacing}"}],"id":94,"localName":"弹性布局","lever":5,"family":3,"linkIds":[95,96,106,107,109],"nodes":[{"file":"node_01.dart","name":"Flex的排布方向","desc":["【children】 : 组件列表 【List】","【direction】 : 方向 【Axis】"]},{"file":"node_02.dart","name":"Flex主轴对齐方式","desc":["【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】"]},{"file":"node_03.dart","name":"Flex交叉轴对齐方式","desc":["【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】"]},{"file":"node_04.dart","name":"Flex垂直方向顺序","desc":["【verticalDirection】 : 垂直方向顺序 【VerticalDirection】"]},{"file":"node_05.dart","name":"Flex水平方向顺序","desc":["【textDirection】 : 水平方向顺序 【TextDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_en-US.json b/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_en-US.json new file mode 100644 index 000000000..dbdf3a95a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_en-US.json @@ -0,0 +1 @@ +{"name":"Flexible","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":" A widget that controls how a child of a [Row], [Column], or [Flex] flexes.","fields":[{"name":"flex","type":"int","required":true,"desc":"The flex factor to use for this child."},{"name":"fit","type":"FlexFit","required":true,"desc":"How a flexible child is inscribed into the available space."}],"id":109,"lever":3,"family":5,"linkIds":[94,106],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Flexible","desc":["【child】: child 【Widget】","【fit】: adaptation mode*2 【FlexFit】","【flex】: remaining space allocation ratio 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_zh-CN.json new file mode 100644 index 000000000..1e73702f1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_zh-CN.json @@ -0,0 +1 @@ +{"name":"Flexible","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":"控制 [Row]、[Column] 或 [Flex] 的子项如何弯曲的小部件。","fields":[{"name":"flex","type":"int","required":true,"desc":"用于此子项的弹性因子。"},{"name":"fit","type":"FlexFit","required":true,"desc":"弹性子项如何刻画到可用空间中。"}],"id":109,"localName":"灵活组件","lever":3,"family":5,"linkIds":[94,106],"nodes":[{"file":"node1_base.dart","name":"Flexible基本使用","desc":["【child】 : 孩子 【Widget】","【fit】 : 适应模式*2 【FlexFit】","【flex】 : 剩余空间分配占比 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_en-US.json b/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_en-US.json new file mode 100644 index 000000000..3201deb21 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_en-US.json @@ -0,0 +1 @@ +{"name":"FlexibleSpaceBar","path":"/src/material/flexible_space_bar.dart","parents":["StatefulWidget","Widget"],"desc":" The part of a Material Design [AppBar] that expands, collapses, and stretches.","fields":[{"name":"title","type":"Widget?","desc":"The primary contents of the flexible space bar when expanded."},{"name":"background","type":"Widget?","desc":"Shown behind the [title] when expanded."},{"name":"centerTitle","type":"bool?","desc":"Whether the title should be centered."},{"name":"collapseMode","type":"CollapseMode","required":true,"desc":"Collapse effect while scrolling."},{"name":"stretchModes","type":"List","required":true,"desc":"Stretch effect while over-scrolling."},{"name":"titlePadding","type":"EdgeInsetsGeometry?","desc":"Defines how far the [title] is inset from either the widget's bottom-left or its center."},{"name":"expandedTitleScale","type":"double","required":true,"desc":"Defines how much the title is scaled when the FlexibleSpaceBar is expanded due to the user scrolling downwards. The title is scaled uniformly on the x and y axes while maintaining its bottom-left position (bottom-center if [centerTitle] is true)."}],"id":196,"lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FlexibleSpaceBar","desc":["【title】 : Title component 【Widget】","【titlePadding】 : Title spacing 【EdgeInsetsGeometry】","【collapseMode】 : Collapse mode 【CollapseMode】","【stretchModes】 : Stretch modes 【List】","【background】 : Background component 【Widget】","【centerTitle】 : Whether to center 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_zh-CN.json new file mode 100644 index 000000000..9fdba93cf --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"FlexibleSpaceBar","path":"/src/material/flexible_space_bar.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design [AppBar] 中展开、折叠和拉伸的部分。","fields":[{"name":"title","type":"Widget?","desc":"展开时弹性空间栏的主要内容。"},{"name":"background","type":"Widget?","desc":"展开时显示在 [title] 后面。"},{"name":"centerTitle","type":"bool?","desc":"标题是否应居中。"},{"name":"collapseMode","type":"CollapseMode","required":true,"desc":"滚动时的折叠效果。"},{"name":"stretchModes","type":"List","required":true,"desc":"过度滚动时的拉伸效果。"},{"name":"titlePadding","type":"EdgeInsetsGeometry?","desc":"定义 [title] 从小部件左下角或中心插入多远。"},{"name":"expandedTitleScale","type":"double","required":true,"desc":"定义当用户向下滚动导致 FlexibleSpaceBar 展开时标题缩放多少。标题在 x 和 y 轴上均匀缩放,同时保持其左下位置(如果 [centerTitle] 为 true,则为底部中心)。"}],"id":196,"localName":"伸展空间栏","lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FlexibleSpaceBar基本使用","desc":["【title】 : 标题组件 【Widget】","【titlePadding】 : 标题间距 【EdgeInsetsGeometry】","【collapseMode】 : 折叠模式 【CollapseMode】","【stretchModes】 : 延伸模式 【List】","【background】 : 背景组件 【Widget】","【centerTitle】 : 是否居中 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_en-US.json b/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_en-US.json new file mode 100644 index 000000000..6cdb69aa4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_en-US.json @@ -0,0 +1 @@ +{"name":"FlexibleSpaceBarSettings","path":"/src/material/flexible_space_bar.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Provides sizing and opacity information to a [FlexibleSpaceBar].","fields":[{"name":"toolbarOpacity","type":"double","required":true,"desc":"Affects how transparent the text within the toolbar appears."},{"name":"minExtent","type":"double","required":true,"desc":"Minimum height of the resulting [FlexibleSpaceBar] when fully collapsed."},{"name":"maxExtent","type":"double","required":true,"desc":"Maximum height of the resulting [FlexibleSpaceBar] when fully expanded."},{"name":"currentExtent","type":"double","required":true,"desc":"If the [FlexibleSpaceBar.title] or the [FlexibleSpaceBar.background] is not null, then this value is used to calculate the relative scale of these elements upon initialization."},{"name":"isScrolledUnder","type":"bool?","desc":"True if the FlexibleSpaceBar overlaps the primary scrollable's contents."},{"name":"hasLeading","type":"bool?","desc":"True if the FlexibleSpaceBar has a leading widget."}],"id":420,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_zh-CN.json new file mode 100644 index 000000000..269cef06a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_zh-CN.json @@ -0,0 +1 @@ +{"name":"FlexibleSpaceBarSettings","path":"/src/material/flexible_space_bar.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为 [FlexibleSpaceBar] 提供大小和不透明度信息。","fields":[{"name":"toolbarOpacity","type":"double","required":true,"desc":"影响工具栏内文本的透明度。"},{"name":"minExtent","type":"double","required":true,"desc":"完全折叠时生成的 [FlexibleSpaceBar] 的最小高度。"},{"name":"maxExtent","type":"double","required":true,"desc":"完全展开时生成的 [FlexibleSpaceBar] 的最大高度。"},{"name":"currentExtent","type":"double","required":true,"desc":"如果 [FlexibleSpaceBar.title] 或 [FlexibleSpaceBar.background] 不为 null,则此值用于在初始化时计算这些元素的相对比例。"},{"name":"isScrolledUnder","type":"bool?","desc":"如果 FlexibleSpaceBar 与主要可滚动内容重叠,则为 true。"},{"name":"hasLeading","type":"bool?","desc":"如果 FlexibleSpaceBar 有前导小部件,则为 true。"}],"id":420,"localName":"FlexibleSpaceBarSettings","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_en-US.json b/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_en-US.json new file mode 100644 index 000000000..946a8458a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_en-US.json @@ -0,0 +1 @@ +{"name":"FloatingActionButton","path":"/src/material/floating_action_button.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design floating action button.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"tooltip","type":"String?","desc":"Text that describes the action that will occur when the button is pressed."},{"name":"foregroundColor","type":"Color?","desc":"The default foreground color for icons and text within the button."},{"name":"backgroundColor","type":"Color?","desc":"The button's background color."},{"name":"focusColor","type":"Color?","desc":"The color to use for filling the button when the button has input focus."},{"name":"hoverColor","type":"Color?","desc":"The color to use for filling the button when the button has a pointer hovering over it."},{"name":"splashColor","type":"Color?","desc":"The splash color for this [FloatingActionButton]'s [InkWell]."},{"name":"heroTag","type":"Object?","desc":"The tag to apply to the button's [Hero] widget."},{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when the button is tapped or otherwise activated."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this button relative to its parent."},{"name":"focusElevation","type":"double?","desc":"The z-coordinate at which to place this button relative to its parent when the button has the input focus."},{"name":"hoverElevation","type":"double?","desc":"The z-coordinate at which to place this button relative to its parent when the button is enabled and has a pointer hovering over it."},{"name":"highlightElevation","type":"double?","desc":"The z-coordinate at which to place this button relative to its parent when the user is touching the button."},{"name":"disabledElevation","type":"double?","desc":"The z-coordinate at which to place this button when the button is disabled ([onPressed] is null)."},{"name":"mini","type":"bool","required":true,"desc":"Controls the size of this button."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the button's [Material]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"isExtended","type":"bool","required":true,"desc":"True if this is an \"extended\" floating action button."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"Configures the minimum size of the tap target."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"extendedIconLabelSpacing","type":"double?","desc":"The spacing between the icon and the label for an extended [FloatingActionButton]."},{"name":"extendedPadding","type":"EdgeInsetsGeometry?","desc":"The padding for an extended [FloatingActionButton]'s content."},{"name":"extendedTextStyle","type":"TextStyle?","desc":"The text style for an extended [FloatingActionButton]'s label."}],"id":28,"lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FloatingActionButton Click Event","desc":["【child】: Child widget 【Widget】","【tooltip】: Tooltip text when long pressed 【String】","【backgroundColor】: Background color 【Color】","【foregroundColor】: Foreground color 【Color】","【elevation】: Elevation 【double】","【onPressed】: Click event 【Function】"]},{"file":"node2_mini.dart","name":"mini Property","desc":["【mini】: Whether it is mini 【bool】"]},{"file":"node3_shape.dart","name":"shape Property","desc":["【shape】: Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_zh-CN.json new file mode 100644 index 000000000..9b9a5e6f6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"FloatingActionButton","path":"/src/material/floating_action_button.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 浮动操作按钮。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"tooltip","type":"String?","desc":"描述按下按钮时将发生的操作的文本。"},{"name":"foregroundColor","type":"Color?","desc":"按钮内图标和文本的默认前景色。"},{"name":"backgroundColor","type":"Color?","desc":"按钮的背景颜色。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时用于填充按钮的颜色。"},{"name":"hoverColor","type":"Color?","desc":"按钮有指针悬停在其上时用于填充按钮的颜色。"},{"name":"splashColor","type":"Color?","desc":"此 [FloatingActionButton] 的 [InkWell] 的飞溅颜色。"},{"name":"heroTag","type":"Object?","desc":"应用于按钮的 [Hero] 小部件的标签。"},{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用的回调。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"elevation","type":"double?","desc":"相对于其父级放置此按钮的 z 坐标。"},{"name":"focusElevation","type":"double?","desc":"按钮具有输入焦点时相对于其父级放置此按钮的 z 坐标。"},{"name":"hoverElevation","type":"double?","desc":"按钮启用且有指针悬停在其上时相对于其父级放置此按钮的 z 坐标。"},{"name":"highlightElevation","type":"double?","desc":"用户触摸按钮时相对于其父级放置此按钮的 z 坐标。"},{"name":"disabledElevation","type":"double?","desc":"按钮禁用时([onPressed] 为 null)放置此按钮的 z 坐标。"},{"name":"mini","type":"bool","required":true,"desc":"控制此按钮的大小。"},{"name":"shape","type":"ShapeBorder?","desc":"按钮的 [Material] 的形状。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"isExtended","type":"bool","required":true,"desc":"如果这是"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"配置点击目标的最小大小。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"extendedIconLabelSpacing","type":"double?","desc":"扩展 [FloatingActionButton] 的图标和标签之间的间距。"},{"name":"extendedPadding","type":"EdgeInsetsGeometry?","desc":"扩展 [FloatingActionButton] 内容的内边距。"},{"name":"extendedTextStyle","type":"TextStyle?","desc":"扩展 [FloatingActionButton] 标签的文本样式。"}],"id":28,"localName":"浮动按钮","lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FloatingActionButton点击事件","desc":["【child】: 子组件 【Widget】","【tooltip】: 长按时提示文字 【String】","【backgroundColor】: 背景色 【Color】","【foregroundColor】: 前景色 【Color】","【elevation】: 影深 【double】","【onPressed】: 点击事件 【Function】"]},{"file":"node2_mini.dart","name":"mini属性","desc":["【mini】: 是否是迷你 【bool】"]},{"file":"node3_shape.dart","name":"shape属性","desc":["【shape】: 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flow/Flow_en-US.json b/modules/widget_system/widgets/doc/widgets/Flow/Flow_en-US.json new file mode 100644 index 000000000..ba199c7a1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Flow/Flow_en-US.json @@ -0,0 +1 @@ +{"name":"Flow","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that sizes and positions children efficiently, according to the logic in a [FlowDelegate].","fields":[{"name":"delegate","type":"FlowDelegate","required":true,"desc":"The delegate that controls the transformation matrices of the children."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":99,"lever":5,"family":3,"linkIds":[98,94],"nodes":[{"file":"node_01.dart","name":"Flow Circular Arrangement","desc":["【children】: Component list 【List】","【delegate】: Agent 【FlowDelegate】"]},{"file":"node_02.dart","name":"Flow Circular with Animation","desc":["Achieve effects by changing the position of surrounding components through animation"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flow/Flow_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Flow/Flow_zh-CN.json new file mode 100644 index 000000000..fa6bc2c94 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Flow/Flow_zh-CN.json @@ -0,0 +1 @@ +{"name":"Flow","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"根据 [FlowDelegate] 中的逻辑高效调整大小和定位子项的小部件。","fields":[{"name":"delegate","type":"FlowDelegate","required":true,"desc":"控制子项变换矩阵的委托。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":99,"localName":"流动布局","lever":5,"family":3,"linkIds":[98,94],"nodes":[{"file":"node_01.dart","name":"Flow圆形排布","desc":["【children】 : 组件列表 【List】","【delegate】 : 代理 【FlowDelegate】"]},{"file":"node_02.dart","name":"Flow圆形与动画结合","desc":["通过动画来更改周围组件的位置实现效果"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_en-US.json b/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_en-US.json new file mode 100644 index 000000000..e3749e5b0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_en-US.json @@ -0,0 +1 @@ +{"name":"FlutterLogo","path":"/src/widgets/flutter_logo.dart","parents":["StatelessWidget","Widget"],"desc":" The Flutter logo, in widget form. This widget respects the [IconTheme]. For guidelines on using the Flutter logo, visit https://flutter.dev/brand.","fields":[{"name":"size","type":"double?","desc":"The size of the logo in logical pixels."},{"name":"textColor","type":"Color","required":true,"desc":"The color used to paint the \"Flutter\" text on the logo, if [style] is [FlutterLogoStyle.horizontal] or [FlutterLogoStyle.stacked]."},{"name":"style","type":"FlutterLogoStyle","required":true,"desc":"Whether and where to draw the \"Flutter\" text. By default, only the logo itself is drawn."},{"name":"duration","type":"Duration","required":true,"desc":"The length of time for the animation if the [style] or [textColor] properties are changed."},{"name":"curve","type":"Curve","required":true,"desc":"The curve for the logo animation if the [style] or [textColor] change."}],"id":4,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Used to display a FlutterLogo","desc":["【size】 : Size 【double】","【colors】: Color 【MaterialColor】"]},{"file":"node2_style.dart","name":"Style used to display text","desc":["【style】 : Style - 3 types of enumeration 【FlutterLogoStyle】","【textColor】: Text color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_zh-CN.json new file mode 100644 index 000000000..b5c0bf702 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_zh-CN.json @@ -0,0 +1 @@ +{"name":"FlutterLogo","path":"/src/widgets/flutter_logo.dart","parents":["StatelessWidget","Widget"],"desc":"小部件形式的 Flutter 标志。此小部件遵循 [IconTheme]。有关使用 Flutter 标志的指南,请访问 https://flutter.dev/brand。","fields":[{"name":"size","type":"double?","desc":"标志的逻辑像素大小。"},{"name":"textColor","type":"Color","required":true,"desc":"如果 [style] 是 [FlutterLogoStyle.horizontal] 或 [FlutterLogoStyle.stacked],用于绘制标志上"},{"name":"style","type":"FlutterLogoStyle","required":true,"desc":"是否以及在何处绘制"},{"name":"duration","type":"Duration","required":true,"desc":"如果 [style] 或 [textColor] 属性更改,动画的时长。"},{"name":"curve","type":"Curve","required":true,"desc":"如果 [style] 或 [textColor] 更改,标志动画的曲线。"}],"id":4,"localName":"Flutter图标","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"用于显示一个FlutterLogo","desc":["【size】 : 大小 【double】","【colors】: 颜色 【MaterialColor】"]},{"file":"node2_style.dart","name":"样式用于显示文字","desc":["【style】 : 样式-3种枚举 【FlutterLogoStyle】","【textColor】: 文字颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Focus/Focus_en-US.json b/modules/widget_system/widgets/doc/widgets/Focus/Focus_en-US.json new file mode 100644 index 000000000..f0fc248c3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Focus/Focus_en-US.json @@ -0,0 +1 @@ +{"name":"Focus","path":"/src/widgets/focus_scope.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that manages a [FocusNode] to allow keyboard focus to be given to this widget and its descendants.","fields":[{"name":"parentNode","type":"FocusNode?","desc":"The optional parent node to use when reparenting the [focusNode] for this [Focus] widget."},{"name":"child","type":"Widget","required":true,"desc":"The child widget of this [Focus]."},{"name":"focusNode","type":"FocusNode?","desc":"{@template flutter.widgets.Focus.focusNode} An optional focus node to use as the focus node for this widget."},{"name":"autofocus","type":"bool","required":true,"desc":"{@template flutter.widgets.Focus.autofocus} True if this widget will be selected as the initial focus when no other node in its scope is currently focused."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@template flutter.widgets.Focus.includeSemantics} Include semantics information in this widget."}],"id":282,"lever":5,"family":1,"linkIds":[283,284],"nodes":[{"file":"node1.dart","name":"FocusNode Focus and Blur","desc":["【focusNode】 : Focus 【FocusNode?】","【onFocusChange】 : Focus change listener 【ValueChanged?】","【child】 : Child widget 【Widget】"]},{"file":"node2.dart","name":"Auto Focus","desc":["【autofocus】 : Whether to auto focus 【bool】","The Flutter framework has built-in shortcuts for focus switching, such as ← and → for horizontal sliding lists to focus on the previous and next items respectively. The Tab key can focus on the next Focus node."]},{"file":"node3.dart","name":"Keyboard Event Callback","desc":["【onKeyEvent】 : Keyboard event callback 【FocusOnKeyEventCallback?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Focus/Focus_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Focus/Focus_zh-CN.json new file mode 100644 index 000000000..02f2ace25 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Focus/Focus_zh-CN.json @@ -0,0 +1 @@ +{"name":"Focus","path":"/src/widgets/focus_scope.dart","parents":["StatefulWidget","Widget"],"desc":"管理 [FocusNode] 以允许将键盘焦点给予此小部件及其后代的小部件。","fields":[{"name":"parentNode","type":"FocusNode?","desc":"为此 [Focus] 小部件重新设置 [focusNode] 父级时使用的可选父节点。"},{"name":"child","type":"Widget","required":true,"desc":"此 [Focus] 的子小部件。"},{"name":"focusNode","type":"FocusNode?","desc":"{@template flutter.widgets.Focus.focusNode} 用作此小部件焦点节点的可选焦点节点。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@template flutter.widgets.Focus.autofocus} 如果此小部件将在其范围内当前没有其他节点聚焦时被选为初始焦点,则为 true。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点更改时调用的处理程序。"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@template flutter.widgets.Focus.includeSemantics} 在此小部件中包含语义信息。"}],"id":282,"localName":"焦点组件","lever":5,"family":1,"linkIds":[283,284],"nodes":[{"file":"node1.dart","name":"FocusNode 聚焦与失焦","desc":["【focusNode】 : 焦点 【FocusNode?】","【onFocusChange】 : 焦点变化监听 【ValueChanged?】","【child】 : 子组件 【Widget】"]},{"file":"node2.dart","name":"自动聚焦","desc":["【autofocus】 : 是否自动聚焦 【bool】","Flutter 框架内置了焦点切换的快捷键,比如横向滑动的列表 ←、→ 分别让前项和后项聚焦。Tab 键可以让下一个 Focus 节点聚焦"]},{"file":"node3.dart","name":"键盘事件回调","desc":["【onKeyEvent】 : 键盘事件回调 【FocusOnKeyEventCallback?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_en-US.json b/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_en-US.json new file mode 100644 index 000000000..dc18d05cc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_en-US.json @@ -0,0 +1 @@ +{"name":"FocusScope","path":"/src/widgets/focus_scope.dart","parents":["Focus","StatefulWidget","Widget"],"desc":" A [FocusScope] is similar to a [Focus], but also serves as a scope for its descendants, restricting focus traversal to the scoped controls.","fields":[],"id":421,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_zh-CN.json new file mode 100644 index 000000000..9e7285b45 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_zh-CN.json @@ -0,0 +1 @@ +{"name":"FocusScope","path":"/src/widgets/focus_scope.dart","parents":["Focus","StatefulWidget","Widget"],"desc":"[FocusScope] 类似于 [Focus],但也作为其后代的范围,将焦点遍历限制为范围内的控件。","fields":[],"id":421,"localName":"FocusScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_en-US.json new file mode 100644 index 000000000..2786d575c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_en-US.json @@ -0,0 +1 @@ +{"name":"FocusTraversalGroup","path":"/src/widgets/focus_traversal.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that describes the inherited focus policy for focus traversal for its descendants, grouping them into a separate traversal group.","fields":[{"name":"policy","type":"FocusTraversalPolicy","required":true,"desc":"The policy used to move the focus from one focus node to another when traversing them using a keyboard."},{"name":"descendantsAreFocusable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreFocusable}"},{"name":"descendantsAreTraversable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreTraversable}"},{"name":"child","type":"Widget","required":true,"desc":"The child widget of this [FocusTraversalGroup]."}],"id":422,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_zh-CN.json new file mode 100644 index 000000000..665445a13 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_zh-CN.json @@ -0,0 +1 @@ +{"name":"FocusTraversalGroup","path":"/src/widgets/focus_traversal.dart","parents":["StatefulWidget","Widget"],"desc":"描述其后代的继承焦点策略以进行焦点遍历的小部件,将它们分组到单独的遍历组中。","fields":[{"name":"policy","type":"FocusTraversalPolicy","required":true,"desc":"使用键盘遍历时用于将焦点从一个焦点节点移动到另一个焦点节点的策略。"},{"name":"descendantsAreFocusable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreFocusable}"},{"name":"descendantsAreTraversable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreTraversable}"},{"name":"child","type":"Widget","required":true,"desc":"此 [FocusTraversalGroup] 的子小部件。"}],"id":422,"localName":"FocusTraversalGroup","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_en-US.json b/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_en-US.json new file mode 100644 index 000000000..372519c83 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_en-US.json @@ -0,0 +1 @@ +{"name":"FocusTraversalOrder","path":"/src/widgets/focus_traversal.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that describes the order in which its child subtree should be traversed.","fields":[{"name":"order","type":"FocusOrder","required":true,"desc":"The order for the widget descendants of this [FocusTraversalOrder]."}],"id":423,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_zh-CN.json new file mode 100644 index 000000000..e9e6d35b4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_zh-CN.json @@ -0,0 +1 @@ +{"name":"FocusTraversalOrder","path":"/src/widgets/focus_traversal.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"描述其子子树应遍历顺序的继承小部件。","fields":[{"name":"order","type":"FocusOrder","required":true,"desc":"此 [FocusTraversalOrder] 的小部件后代的顺序。"}],"id":423,"localName":"FocusTraversalOrder","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_en-US.json b/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_en-US.json new file mode 100644 index 000000000..f18c35738 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_en-US.json @@ -0,0 +1 @@ +{"name":"FocusableActionDetector","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that combines the functionality of [Actions], [Shortcuts], [MouseRegion] and a [Focus] widget to create a detector that defines actions and key bindings, and provides callbacks for handling focus and hover highlights.","fields":[{"name":"enabled","type":"bool","required":true,"desc":"Is this widget enabled or not."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"descendantsAreFocusable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreFocusable}"},{"name":"descendantsAreTraversable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreTraversable}"},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.actions.actions}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.shortcuts.shortcuts}"},{"name":"onShowFocusHighlight","type":"ValueChanged?","desc":"A function that will be called when the focus highlight should be shown or hidden."},{"name":"onShowHoverHighlight","type":"ValueChanged?","desc":"A function that will be called when the hover highlight should be shown or hidden."},{"name":"onFocusChange","type":"ValueChanged?","desc":"A function that will be called when the focus changes."},{"name":"mouseCursor","type":"MouseCursor","required":true,"desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"includeFocusSemantics","type":"bool","required":true,"desc":"Whether to include semantics from [Focus]."},{"name":"child","type":"Widget","required":true,"desc":"The child widget for this [FocusableActionDetector] widget."}],"id":424,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_zh-CN.json new file mode 100644 index 000000000..938fcbd67 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_zh-CN.json @@ -0,0 +1 @@ +{"name":"FocusableActionDetector","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":"结合 [Actions]、[Shortcuts]、[MouseRegion] 和 [Focus] 小部件功能的小部件,创建定义操作和键绑定的检测器,并提供处理焦点和悬停高亮的回调。","fields":[{"name":"enabled","type":"bool","required":true,"desc":"此小部件是否启用。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"descendantsAreFocusable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreFocusable}"},{"name":"descendantsAreTraversable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreTraversable}"},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.actions.actions}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.shortcuts.shortcuts}"},{"name":"onShowFocusHighlight","type":"ValueChanged?","desc":"当应显示或隐藏焦点高亮时将调用的函数。"},{"name":"onShowHoverHighlight","type":"ValueChanged?","desc":"当应显示或隐藏悬停高亮时将调用的函数。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点更改时将调用的函数。"},{"name":"mouseCursor","type":"MouseCursor","required":true,"desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"includeFocusSemantics","type":"bool","required":true,"desc":"是否包含来自 [Focus] 的语义。"},{"name":"child","type":"Widget","required":true,"desc":"此 [FocusableActionDetector] 小部件的子小部件。"}],"id":424,"localName":"FocusableActionDetector","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Form/Form_en-US.json b/modules/widget_system/widgets/doc/widgets/Form/Form_en-US.json new file mode 100644 index 000000000..d6a18e717 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Form/Form_en-US.json @@ -0,0 +1 @@ +{"name":"Form","path":"/src/widgets/form.dart","parents":["StatefulWidget","Widget"],"desc":" An optional container for grouping together multiple form field widgets (e.g. [TextField] widgets).","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"onWillPop","type":"WillPopCallback?","desc":"Enables the form to veto attempts by the user to dismiss the [ModalRoute] that contains the form."},{"name":"canPop","type":"bool?","desc":"{@macro flutter.widgets.PopScope.canPop}"},{"name":"onPopInvoked","type":"PopInvokedCallback?","desc":"{@macro flutter.widgets.navigator.onPopInvokedWithResult}"},{"name":"onPopInvokedWithResult","type":"PopInvokedWithResultCallback?","desc":"{@macro flutter.widgets.navigator.onPopInvokedWithResult}"},{"name":"onChanged","type":"VoidCallback?","desc":"Called when one of the form fields changes."},{"name":"autovalidateMode","type":"AutovalidateMode","required":true,"desc":"Used to enable/disable form fields auto validation and update their error text."}],"id":198,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Form","desc":["【child】 : Child component 【Widget】","【onChanged】 : Form change callback 【VoidCallback】","【onWillPop】 : Return callback 【WillPopCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Form/Form_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Form/Form_zh-CN.json new file mode 100644 index 000000000..d011d12eb --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Form/Form_zh-CN.json @@ -0,0 +1 @@ +{"name":"Form","path":"/src/widgets/form.dart","parents":["StatefulWidget","Widget"],"desc":"用于将多个表单字段小部件(例如 [TextField] 小部件)分组在一起的可选容器。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"onWillPop","type":"WillPopCallback?","desc":"使表单能够否决用户关闭包含表单的 [ModalRoute] 的尝试。"},{"name":"canPop","type":"bool?","desc":"{@macro flutter.widgets.PopScope.canPop}"},{"name":"onPopInvoked","type":"PopInvokedCallback?","desc":"{@macro flutter.widgets.navigator.onPopInvokedWithResult}"},{"name":"onPopInvokedWithResult","type":"PopInvokedWithResultCallback?","desc":"{@macro flutter.widgets.navigator.onPopInvokedWithResult}"},{"name":"onChanged","type":"VoidCallback?","desc":"表单字段之一更改时调用。"},{"name":"autovalidateMode","type":"AutovalidateMode","required":true,"desc":"用于启用/禁用表单字段自动验证并更新其错误文本。"}],"id":198,"localName":"表单组件","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Form基本使用","desc":["【child】 : 子组件 【Widget】","【onChanged】 : 表单变化回调 【VoidCallback】","【onWillPop】 : 返回回调 【WillPopCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FormField/FormField_en-US.json b/modules/widget_system/widgets/doc/widgets/FormField/FormField_en-US.json new file mode 100644 index 000000000..d5db3021c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FormField/FormField_en-US.json @@ -0,0 +1 @@ +{"name":"FormField","path":"/src/widgets/form.dart","parents":["StatefulWidget","Widget"],"desc":" A single form field.","fields":[{"name":"builder","type":"FormFieldBuilder","required":true,"desc":"Function that returns the widget representing this form field."},{"name":"onSaved","type":"FormFieldSetter?","desc":"An optional method to call with the final value when the form is saved via [FormState.save]."},{"name":"forceErrorText","type":"String?","desc":"An optional property that forces the [FormFieldState] into an error state by directly setting the [FormFieldState.errorText] property without running the validator function."},{"name":"validator","type":"FormFieldValidator?","desc":"An optional method that validates an input. Returns an error string to display if the input is invalid, or null otherwise."},{"name":"errorBuilder","type":"FormFieldErrorBuilder?","desc":"Function that returns the widget representing the error to display."},{"name":"initialValue","type":"T?","desc":"An optional value to initialize the form field to, or null otherwise."},{"name":"enabled","type":"bool","required":true,"desc":"Whether the form is able to receive user input."},{"name":"autovalidateMode","type":"AutovalidateMode","required":true,"desc":"Used to enable/disable this form field auto validation and update its error text."},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the form field."}],"id":222,"lever":2,"family":1,"linkIds":[198,199,223],"nodes":[{"file":"node1_base.dart","name":"FormField Introduction","desc":["【builder】 : Content builder 【FormFieldBuilder】","【initialValue】 : Initial value 【T】","【validator】 : Validation function 【FormFieldValidator】","【enabled】 : Whether it is enabled 【bool】","【onSaved】 : Callback when the form is saved 【FormFieldSetter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FormField/FormField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FormField/FormField_zh-CN.json new file mode 100644 index 000000000..beb6e303d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FormField/FormField_zh-CN.json @@ -0,0 +1 @@ +{"name":"FormField","path":"/src/widgets/form.dart","parents":["StatefulWidget","Widget"],"desc":"单个表单字段。","fields":[{"name":"builder","type":"FormFieldBuilder","required":true,"desc":"返回表示此表单字段的小部件的函数。"},{"name":"onSaved","type":"FormFieldSetter?","desc":"通过 [FormState.save] 保存表单时使用最终值调用的可选方法。"},{"name":"forceErrorText","type":"String?","desc":"通过直接设置 [FormFieldState.errorText] 属性而不运行验证器函数,强制 [FormFieldState] 进入错误状态的可选属性。"},{"name":"validator","type":"FormFieldValidator?","desc":"验证输入的可选方法。如果输入无效,则返回要显示的错误字符串,否则返回 null。"},{"name":"errorBuilder","type":"FormFieldErrorBuilder?","desc":"返回表示要显示的错误的小部件的函数。"},{"name":"initialValue","type":"T?","desc":"初始化表单字段的可选值,否则为 null。"},{"name":"enabled","type":"bool","required":true,"desc":"表单是否能够接收用户输入。"},{"name":"autovalidateMode","type":"AutovalidateMode","required":true,"desc":"用于启用/禁用此表单字段自动验证并更新其错误文本。"},{"name":"restorationId","type":"String?","desc":"保存和恢复表单字段状态的恢复 ID。"}],"id":222,"localName":"表单字段","lever":2,"family":1,"linkIds":[198,199,223],"nodes":[{"file":"node1_base.dart","name":"FormField 介绍","desc":["【builder】 : 内容构造器 【FormFieldBuilder】","【initialValue】 : 初始值 【T】","【validator】 : 验证函数 【FormFieldValidator 】","【enabled】 : 是否有效 【bool】","【onSaved】 : 表单save时回调 【FormFieldSetter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_en-US.json b/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_en-US.json new file mode 100644 index 000000000..92c8bd8d3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_en-US.json @@ -0,0 +1 @@ +{"name":"FractionalTranslation","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Applies a translation transformation before painting its child.","fields":[{"name":"translation","type":"Offset","required":true,"desc":"The translation to apply to the child, scaled to the child's size."},{"name":"transformHitTests","type":"bool","required":true,"desc":"Whether to apply the translation when performing hit tests."}],"id":263,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FractionalTranslation","desc":["【translation】: Offset fraction value 【Offset】","【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_zh-CN.json new file mode 100644 index 000000000..aeaa7eee2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_zh-CN.json @@ -0,0 +1 @@ +{"name":"FractionalTranslation","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在绘制其子项之前应用平移变换。","fields":[{"name":"translation","type":"Offset","required":true,"desc":"应用于子项的平移,按子项的大小缩放。"},{"name":"transformHitTests","type":"bool","required":true,"desc":"执行命中测试时是否应用平移。"}],"id":263,"localName":"分度偏移","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FractionalTranslation基本使用","desc":["【translation】 : 偏移分度值 【Offset】","【child】: 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_en-US.json new file mode 100644 index 000000000..4008ae74f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_en-US.json @@ -0,0 +1 @@ +{"name":"FractionallySizedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that sizes its child to a fraction of the total available space. For more details about the layout algorithm, see [RenderFractionallySizedOverflowBox].","fields":[{"name":"widthFactor","type":"double?","desc":"{@template flutter.widgets.basic.fractionallySizedBox.widthFactor} If non-null, the fraction of the incoming width given to the child."},{"name":"heightFactor","type":"double?","desc":"{@template flutter.widgets.basic.fractionallySizedBox.heightFactor} If non-null, the fraction of the incoming height given to the child."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"{@template flutter.widgets.basic.fractionallySizedBox.alignment} How to align the child."}],"id":82,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FractionallySizedBox","desc":["【child】 : Child component 【Widget】","【widthFactor】 : Width fraction 【double】","【heightFactor】 : Height fraction 【double】","【alignment】 : Alignment 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_zh-CN.json new file mode 100644 index 000000000..1d52eb73a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_zh-CN.json @@ -0,0 +1 @@ +{"name":"FractionallySizedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项大小调整为总可用空间的一部分的小部件。有关布局算法的更多详细信息,请参阅 [RenderFractionallySizedOverflowBox]。","fields":[{"name":"widthFactor","type":"double?","desc":"{@template flutter.widgets.basic.fractionallySizedBox.widthFactor} 如果非空,给予子项的传入宽度的分数。"},{"name":"heightFactor","type":"double?","desc":"{@template flutter.widgets.basic.fractionallySizedBox.heightFactor} 如果非空,给予子项的传入高度的分数。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"{@template flutter.widgets.basic.fractionallySizedBox.alignment} 如何对齐子项。"}],"id":82,"localName":"分率盒","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FractionallySizedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【widthFactor】 : 宽分率 【double】","【heightFactor】 : 高分率 【double】","【alignment】 : 对齐方式 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_en-US.json new file mode 100644 index 000000000..4067e47a4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_en-US.json @@ -0,0 +1 @@ +{"name":"FutureBuilder","path":"/src/widgets/async.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that builds itself based on the latest snapshot of interaction with a [Future].","fields":[{"name":"future","type":"Future?","desc":"The asynchronous computation to which this builder is currently connected, possibly null."},{"name":"builder","type":"AsyncWidgetBuilder","required":true,"desc":"The build strategy currently used by this builder."},{"name":"initialData","type":"T?","desc":"The data that will be used to create the snapshots provided until a non-null [future] has completed."}],"id":172,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FutureBuilder","desc":["【builder】 : Subcomponent 【AsyncWidgetBuilder】","【initialData】 : Initial Data 【T】","【future】 : Asynchronous Task 【Future】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_zh-CN.json new file mode 100644 index 000000000..4eb6d1dae --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_zh-CN.json @@ -0,0 +1 @@ +{"name":"FutureBuilder","path":"/src/widgets/async.dart","parents":["StatefulWidget","Widget"],"desc":"基于与 [Future] 交互的最新快照构建自身的小部件。","fields":[{"name":"future","type":"Future?","desc":"此构建器当前连接的异步计算,可能为 null。"},{"name":"builder","type":"AsyncWidgetBuilder","required":true,"desc":"此构建器当前使用的构建策略。"},{"name":"initialData","type":"T?","desc":"将用于创建快照的数据,直到非空 [future] 完成。"}],"id":172,"localName":"异步构造器","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FutureBuilder基本使用","desc":["【builder】 : 子组件 【AsyncWidgetBuilder】","【initialData】 : 初始数据 【T】","【future】 : 异步任务 【Future】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_en-US.json b/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_en-US.json new file mode 100644 index 000000000..ec3f923eb --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_en-US.json @@ -0,0 +1 @@ +{"name":"GestureDetector","path":"/src/widgets/gesture_detector.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that detects gestures.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"onTapDown","type":"GestureTapDownCallback?","desc":"A pointer that might cause a tap with a primary button has contacted the screen at a particular location."},{"name":"onTapUp","type":"GestureTapUpCallback?","desc":"A pointer that will trigger a tap with a primary button has stopped contacting the screen at a particular location."},{"name":"onTap","type":"GestureTapCallback?","desc":"A tap with a primary button has occurred."},{"name":"onTapMove","type":"GestureTapMoveCallback?","desc":"A pointer that triggered a tap has moved."},{"name":"onTapCancel","type":"GestureTapCancelCallback?","desc":"The pointer that previously triggered [onTapDown] will not end up causing a tap."},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"A tap with a secondary button has occurred."},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"A pointer that might cause a tap with a secondary button has contacted the screen at a particular location."},{"name":"onSecondaryTapUp","type":"GestureTapUpCallback?","desc":"A pointer that will trigger a tap with a secondary button has stopped contacting the screen at a particular location."},{"name":"onSecondaryTapCancel","type":"GestureTapCancelCallback?","desc":"The pointer that previously triggered [onSecondaryTapDown] will not end up causing a tap."},{"name":"onTertiaryTapDown","type":"GestureTapDownCallback?","desc":"A pointer that might cause a tap with a tertiary button has contacted the screen at a particular location."},{"name":"onTertiaryTapUp","type":"GestureTapUpCallback?","desc":"A pointer that will trigger a tap with a tertiary button has stopped contacting the screen at a particular location."},{"name":"onTertiaryTapCancel","type":"GestureTapCancelCallback?","desc":"The pointer that previously triggered [onTertiaryTapDown] will not end up causing a tap."},{"name":"onDoubleTapDown","type":"GestureTapDownCallback?","desc":"A pointer that might cause a double tap has contacted the screen at a particular location."},{"name":"onDoubleTap","type":"GestureTapCallback?","desc":"The user has tapped the screen with a primary button at the same location twice in quick succession."},{"name":"onDoubleTapCancel","type":"GestureTapCancelCallback?","desc":"The pointer that previously triggered [onDoubleTapDown] will not end up causing a double tap."},{"name":"onLongPressDown","type":"GestureLongPressDownCallback?","desc":"The pointer has contacted the screen with a primary button, which might be the start of a long-press."},{"name":"onLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"A pointer that previously triggered [onLongPressDown] will not end up causing a long-press."},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"Called when a long press gesture with a primary button has been recognized."},{"name":"onLongPressStart","type":"GestureLongPressStartCallback?","desc":"Called when a long press gesture with a primary button has been recognized."},{"name":"onLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"A pointer has been drag-moved after a long-press with a primary button."},{"name":"onLongPressUp","type":"GestureLongPressUpCallback?","desc":"A pointer that has triggered a long-press with a primary button has stopped contacting the screen."},{"name":"onLongPressEnd","type":"GestureLongPressEndCallback?","desc":"A pointer that has triggered a long-press with a primary button has stopped contacting the screen."},{"name":"onSecondaryLongPressDown","type":"GestureLongPressDownCallback?","desc":"The pointer has contacted the screen with a secondary button, which might be the start of a long-press."},{"name":"onSecondaryLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"A pointer that previously triggered [onSecondaryLongPressDown] will not end up causing a long-press."},{"name":"onSecondaryLongPress","type":"GestureLongPressCallback?","desc":"Called when a long press gesture with a secondary button has been recognized."},{"name":"onSecondaryLongPressStart","type":"GestureLongPressStartCallback?","desc":"Called when a long press gesture with a secondary button has been recognized."},{"name":"onSecondaryLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"A pointer has been drag-moved after a long press with a secondary button."},{"name":"onSecondaryLongPressUp","type":"GestureLongPressUpCallback?","desc":"A pointer that has triggered a long-press with a secondary button has stopped contacting the screen."},{"name":"onSecondaryLongPressEnd","type":"GestureLongPressEndCallback?","desc":"A pointer that has triggered a long-press with a secondary button has stopped contacting the screen."},{"name":"onTertiaryLongPressDown","type":"GestureLongPressDownCallback?","desc":"The pointer has contacted the screen with a tertiary button, which might be the start of a long-press."},{"name":"onTertiaryLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"A pointer that previously triggered [onTertiaryLongPressDown] will not end up causing a long-press."},{"name":"onTertiaryLongPress","type":"GestureLongPressCallback?","desc":"Called when a long press gesture with a tertiary button has been recognized."},{"name":"onTertiaryLongPressStart","type":"GestureLongPressStartCallback?","desc":"Called when a long press gesture with a tertiary button has been recognized."},{"name":"onTertiaryLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"A pointer has been drag-moved after a long press with a tertiary button."},{"name":"onTertiaryLongPressUp","type":"GestureLongPressUpCallback?","desc":"A pointer that has triggered a long-press with a tertiary button has stopped contacting the screen."},{"name":"onTertiaryLongPressEnd","type":"GestureLongPressEndCallback?","desc":"A pointer that has triggered a long-press with a tertiary button has stopped contacting the screen."},{"name":"onVerticalDragDown","type":"GestureDragDownCallback?","desc":"A pointer has contacted the screen with a primary button and might begin to move vertically."},{"name":"onVerticalDragStart","type":"GestureDragStartCallback?","desc":"A pointer has contacted the screen with a primary button and has begun to move vertically."},{"name":"onVerticalDragUpdate","type":"GestureDragUpdateCallback?","desc":"A pointer that is in contact with the screen with a primary button and moving vertically has moved in the vertical direction."},{"name":"onVerticalDragEnd","type":"GestureDragEndCallback?","desc":"A pointer that was previously in contact with the screen with a primary button and moving vertically is no longer in contact with the screen and was moving at a specific velocity when it stopped contacting the screen."},{"name":"onVerticalDragCancel","type":"GestureDragCancelCallback?","desc":"The pointer that previously triggered [onVerticalDragDown] did not complete."},{"name":"onHorizontalDragDown","type":"GestureDragDownCallback?","desc":"A pointer has contacted the screen with a primary button and might begin to move horizontally."},{"name":"onHorizontalDragStart","type":"GestureDragStartCallback?","desc":"A pointer has contacted the screen with a primary button and has begun to move horizontally."},{"name":"onHorizontalDragUpdate","type":"GestureDragUpdateCallback?","desc":"A pointer that is in contact with the screen with a primary button and moving horizontally has moved in the horizontal direction."},{"name":"onHorizontalDragEnd","type":"GestureDragEndCallback?","desc":"A pointer that was previously in contact with the screen with a primary button and moving horizontally is no longer in contact with the screen and was moving at a specific velocity when it stopped contacting the screen."},{"name":"onHorizontalDragCancel","type":"GestureDragCancelCallback?","desc":"The pointer that previously triggered [onHorizontalDragDown] did not complete."},{"name":"onPanDown","type":"GestureDragDownCallback?","desc":"A pointer has contacted the screen with a primary button and might begin to move."},{"name":"onPanStart","type":"GestureDragStartCallback?","desc":"A pointer has contacted the screen with a primary button and has begun to move."},{"name":"onPanUpdate","type":"GestureDragUpdateCallback?","desc":"A pointer that is in contact with the screen with a primary button and moving has moved again."},{"name":"onPanEnd","type":"GestureDragEndCallback?","desc":"A pointer that was previously in contact with the screen with a primary button and moving is no longer in contact with the screen and was moving at a specific velocity when it stopped contacting the screen."},{"name":"onPanCancel","type":"GestureDragCancelCallback?","desc":"The pointer that previously triggered [onPanDown] did not complete."},{"name":"onScaleStart","type":"GestureScaleStartCallback?","desc":"The pointers in contact with the screen have established a focal point and initial scale of 1.0."},{"name":"onScaleUpdate","type":"GestureScaleUpdateCallback?","desc":"The pointers in contact with the screen have indicated a new focal point and/or scale."},{"name":"onScaleEnd","type":"GestureScaleEndCallback?","desc":"The pointers are no longer in contact with the screen."},{"name":"onForcePressStart","type":"GestureForcePressStartCallback?","desc":"The pointer is in contact with the screen and has pressed with sufficient force to initiate a force press. The amount of force is at least [ForcePressGestureRecognizer.startPressure]."},{"name":"onForcePressPeak","type":"GestureForcePressPeakCallback?","desc":"The pointer is in contact with the screen and has pressed with the maximum force. The amount of force is at least [ForcePressGestureRecognizer.peakPressure]."},{"name":"onForcePressUpdate","type":"GestureForcePressUpdateCallback?","desc":"A pointer is in contact with the screen, has previously passed the [ForcePressGestureRecognizer.startPressure] and is either moving on the plane of the screen, pressing the screen with varying forces or both simultaneously."},{"name":"onForcePressEnd","type":"GestureForcePressEndCallback?","desc":"The pointer tracked by [onForcePressStart] is no longer in contact with the screen."},{"name":"behavior","type":"HitTestBehavior?","desc":"How this gesture detector should behave during hit testing when deciding how the hit test propagates to children and whether to consider targets behind this one."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"Whether to exclude these gestures from the semantics tree. For example, the long-press gesture for showing a tooltip is excluded because the tooltip itself is included in the semantics tree directly and so having a gesture to show it would result in duplication of information."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"Determines the way that drag start behavior is handled."},{"name":"supportedDevices","type":"Set?","desc":"The kind of devices that are allowed to be recognized."},{"name":"trackpadScrollCausesScale","type":"bool","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollCausesScale}"},{"name":"trackpadScrollToScaleFactor","type":"Offset","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollToScaleFactor}"}],"id":146,"lever":5,"family":0,"linkIds":[147,150],"nodes":[{"file":"node1_base.dart","name":"Basic Events of GestureDetector","desc":["【child】 : Child component 【Widget】","【onTap】 : Tap event 【Function()】","【onDoubleTap】 : Double tap event 【GestureTapCallback】","【onLongPress】 : Long press event 【GestureLongPressCallback】"]},{"file":"node2_tap.dart","name":"Details of GestureDetector","desc":["【onTapDown】 : Press down callback 【GestureTapDownCallback】","【onTapUp】 : Tap release callback 【GestureTapUpCallback】","【onTapCancel】 : Tap cancel 【GestureTapCancelCallback】"]},{"file":"node3_pan.dart","name":"Pan Events of GestureDetector","desc":["【onPanDown】 : Press down callback 【GestureDragDownCallback】","【onPanEnd】 : Drag end 【GestureDragEndCallback】","【onPanStart】 : Drag start 【GestureDragStartCallback】","【onPanUpdate】 : Drag update 【GestureDragUpdateCallback】","【onPanCancel】 : Drag cancel 【GestureDragCancelCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_zh-CN.json new file mode 100644 index 000000000..6361c84f2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_zh-CN.json @@ -0,0 +1 @@ +{"name":"GestureDetector","path":"/src/widgets/gesture_detector.dart","parents":["StatelessWidget","Widget"],"desc":"检测手势的小部件。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"onTapDown","type":"GestureTapDownCallback?","desc":"可能导致主按钮点击的指针已在特定位置接触屏幕。"},{"name":"onTapUp","type":"GestureTapUpCallback?","desc":"将触发主按钮点击的指针已在特定位置停止接触屏幕。"},{"name":"onTap","type":"GestureTapCallback?","desc":"发生了主按钮点击。"},{"name":"onTapMove","type":"GestureTapMoveCallback?","desc":"触发点击的指针已移动。"},{"name":"onTapCancel","type":"GestureTapCancelCallback?","desc":"先前触发 [onTapDown] 的指针不会最终导致点击。"},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"发生了辅助按钮点击。"},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"可能导致辅助按钮点击的指针已在特定位置接触屏幕。"},{"name":"onSecondaryTapUp","type":"GestureTapUpCallback?","desc":"将触发辅助按钮点击的指针已在特定位置停止接触屏幕。"},{"name":"onSecondaryTapCancel","type":"GestureTapCancelCallback?","desc":"先前触发 [onSecondaryTapDown] 的指针不会最终导致点击。"},{"name":"onTertiaryTapDown","type":"GestureTapDownCallback?","desc":"可能导致第三按钮点击的指针已在特定位置接触屏幕。"},{"name":"onTertiaryTapUp","type":"GestureTapUpCallback?","desc":"将触发第三按钮点击的指针已在特定位置停止接触屏幕。"},{"name":"onTertiaryTapCancel","type":"GestureTapCancelCallback?","desc":"先前触发 [onTertiaryTapDown] 的指针不会最终导致点击。"},{"name":"onDoubleTapDown","type":"GestureTapDownCallback?","desc":"可能导致双击的指针已在特定位置接触屏幕。"},{"name":"onDoubleTap","type":"GestureTapCallback?","desc":"用户在同一位置快速连续用主按钮点击屏幕两次。"},{"name":"onDoubleTapCancel","type":"GestureTapCancelCallback?","desc":"先前触发 [onDoubleTapDown] 的指针不会最终导致双击。"},{"name":"onLongPressDown","type":"GestureLongPressDownCallback?","desc":"指针已用主按钮接触屏幕,这可能是长按的开始。"},{"name":"onLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"先前触发 [onLongPressDown] 的指针不会最终导致长按。"},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"识别到主按钮长按手势时调用。"},{"name":"onLongPressStart","type":"GestureLongPressStartCallback?","desc":"识别到主按钮长按手势时调用。"},{"name":"onLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"指针在主按钮长按后被拖动移动。"},{"name":"onLongPressUp","type":"GestureLongPressUpCallback?","desc":"触发主按钮长按的指针已停止接触屏幕。"},{"name":"onLongPressEnd","type":"GestureLongPressEndCallback?","desc":"触发主按钮长按的指针已停止接触屏幕。"},{"name":"onSecondaryLongPressDown","type":"GestureLongPressDownCallback?","desc":"指针已用辅助按钮接触屏幕,这可能是长按的开始。"},{"name":"onSecondaryLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"先前触发 [onSecondaryLongPressDown] 的指针不会最终导致长按。"},{"name":"onSecondaryLongPress","type":"GestureLongPressCallback?","desc":"识别到辅助按钮长按手势时调用。"},{"name":"onSecondaryLongPressStart","type":"GestureLongPressStartCallback?","desc":"识别到辅助按钮长按手势时调用。"},{"name":"onSecondaryLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"指针在辅助按钮长按后被拖动移动。"},{"name":"onSecondaryLongPressUp","type":"GestureLongPressUpCallback?","desc":"触发辅助按钮长按的指针已停止接触屏幕。"},{"name":"onSecondaryLongPressEnd","type":"GestureLongPressEndCallback?","desc":"触发辅助按钮长按的指针已停止接触屏幕。"},{"name":"onTertiaryLongPressDown","type":"GestureLongPressDownCallback?","desc":"指针已用第三按钮接触屏幕,这可能是长按的开始。"},{"name":"onTertiaryLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"先前触发 [onTertiaryLongPressDown] 的指针不会最终导致长按。"},{"name":"onTertiaryLongPress","type":"GestureLongPressCallback?","desc":"识别到第三按钮长按手势时调用。"},{"name":"onTertiaryLongPressStart","type":"GestureLongPressStartCallback?","desc":"识别到第三按钮长按手势时调用。"},{"name":"onTertiaryLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"指针在第三按钮长按后被拖动移动。"},{"name":"onTertiaryLongPressUp","type":"GestureLongPressUpCallback?","desc":"触发第三按钮长按的指针已停止接触屏幕。"},{"name":"onTertiaryLongPressEnd","type":"GestureLongPressEndCallback?","desc":"触发第三按钮长按的指针已停止接触屏幕。"},{"name":"onVerticalDragDown","type":"GestureDragDownCallback?","desc":"指针已用主按钮接触屏幕,可能开始垂直移动。"},{"name":"onVerticalDragStart","type":"GestureDragStartCallback?","desc":"指针已用主按钮接触屏幕并开始垂直移动。"},{"name":"onVerticalDragUpdate","type":"GestureDragUpdateCallback?","desc":"与屏幕接触的主按钮指针垂直移动,已在垂直方向上移动。"},{"name":"onVerticalDragEnd","type":"GestureDragEndCallback?","desc":"先前与屏幕接触的主按钮指针垂直移动,不再与屏幕接触,并在停止接触屏幕时以特定速度移动。"},{"name":"onVerticalDragCancel","type":"GestureDragCancelCallback?","desc":"先前触发 [onVerticalDragDown] 的指针未完成。"},{"name":"onHorizontalDragDown","type":"GestureDragDownCallback?","desc":"指针已用主按钮接触屏幕,可能开始水平移动。"},{"name":"onHorizontalDragStart","type":"GestureDragStartCallback?","desc":"指针已用主按钮接触屏幕并开始水平移动。"},{"name":"onHorizontalDragUpdate","type":"GestureDragUpdateCallback?","desc":"与屏幕接触的主按钮指针水平移动,已在水平方向上移动。"},{"name":"onHorizontalDragEnd","type":"GestureDragEndCallback?","desc":"先前与屏幕接触的主按钮指针水平移动,不再与屏幕接触,并在停止接触屏幕时以特定速度移动。"},{"name":"onHorizontalDragCancel","type":"GestureDragCancelCallback?","desc":"先前触发 [onHorizontalDragDown] 的指针未完成。"},{"name":"onPanDown","type":"GestureDragDownCallback?","desc":"指针已用主按钮接触屏幕,可能开始移动。"},{"name":"onPanStart","type":"GestureDragStartCallback?","desc":"指针已用主按钮接触屏幕并开始移动。"},{"name":"onPanUpdate","type":"GestureDragUpdateCallback?","desc":"与屏幕接触的主按钮指针移动,已再次移动。"},{"name":"onPanEnd","type":"GestureDragEndCallback?","desc":"先前与屏幕接触的主按钮指针移动,不再与屏幕接触,并在停止接触屏幕时以特定速度移动。"},{"name":"onPanCancel","type":"GestureDragCancelCallback?","desc":"先前触发 [onPanDown] 的指针未完成。"},{"name":"onScaleStart","type":"GestureScaleStartCallback?","desc":"与屏幕接触的指针已建立焦点并初始比例为 1.0。"},{"name":"onScaleUpdate","type":"GestureScaleUpdateCallback?","desc":"与屏幕接触的指针已指示新的焦点和/或比例。"},{"name":"onScaleEnd","type":"GestureScaleEndCallback?","desc":"指针不再与屏幕接触。"},{"name":"onForcePressStart","type":"GestureForcePressStartCallback?","desc":"指针与屏幕接触并以足够的力按下以启动力按。力量至少为 [ForcePressGestureRecognizer.startPressure]。"},{"name":"onForcePressPeak","type":"GestureForcePressPeakCallback?","desc":"指针与屏幕接触并以最大力按下。力量至少为 [ForcePressGestureRecognizer.peakPressure]。"},{"name":"onForcePressUpdate","type":"GestureForcePressUpdateCallback?","desc":"指针与屏幕接触,先前已通过 [ForcePressGestureRecognizer.startPressure],并且正在屏幕平面上移动、以不同力量按压屏幕或两者同时进行。"},{"name":"onForcePressEnd","type":"GestureForcePressEndCallback?","desc":"[onForcePressStart] 跟踪的指针不再与屏幕接触。"},{"name":"behavior","type":"HitTestBehavior?","desc":"此手势检测器在命中测试期间应如何表现,决定命中测试如何传播到子项以及是否考虑此项后面的目标。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"是否从语义树中排除这些手势。例如,显示工具提示的长按手势被排除,因为工具提示本身直接包含在语义树中,因此有显示它的手势会导致信息重复。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"确定拖动开始行为的处理方式。"},{"name":"supportedDevices","type":"Set?","desc":"允许识别的设备类型。"},{"name":"trackpadScrollCausesScale","type":"bool","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollCausesScale}"},{"name":"trackpadScrollToScaleFactor","type":"Offset","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollToScaleFactor}"}],"id":146,"localName":"手势监听器","lever":5,"family":0,"linkIds":[147,150],"nodes":[{"file":"node1_base.dart","name":"GestureDetector基本事件","desc":["【child】 : 子组件 【Widget】","【onTap】 : 点击事件 【Function()】","【onDoubleTap】 : 双击事件 【GestureTapCallback】","【onLongPress】 : 长按事件 【GestureLongPressCallback】"]},{"file":"node2_tap.dart","name":"GestureDetector详情信息","desc":["【onTapDown】 : 按下回调 【GestureTapDownCallback】","【onTapUp】 : 点击抬起回调 【GestureTapUpCallback】","【onTapCancel】 : 点击取消 【GestureTapCancelCallback】"]},{"file":"node3_pan.dart","name":"GestureDetector的Pan事件","desc":["【onPanDown】 : 按下回调 【GestureDragDownCallback】","【onPanEnd】 : 拖动结束 【GestureDragEndCallback】","【onPanStart】 : 开始拖动 【GestureDragStartCallback】","【onPanUpdate】 : 拖动更新 【GestureDragUpdateCallback】","【onPanCancel】 : 拖动取消 【GestureDragCancelCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_en-US.json new file mode 100644 index 000000000..4c2cf34ff --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_en-US.json @@ -0,0 +1 @@ +{"name":"GlowingOverscrollIndicator","path":"/src/widgets/overscroll_indicator.dart","parents":["StatefulWidget","Widget"],"desc":" A visual indication that a scroll view has overscrolled.","fields":[{"name":"showLeading","type":"bool","required":true,"desc":"Whether to show the overscroll glow on the side with negative scroll offsets."},{"name":"showTrailing","type":"bool","required":true,"desc":"Whether to show the overscroll glow on the side with positive scroll offsets."},{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@template flutter.overscroll.axisDirection} The direction of positive scroll offsets in the [Scrollable] whose overscrolls are to be visualized. {@endtemplate}"},{"name":"color","type":"Color","required":true,"desc":"The color of the glow. The alpha channel is ignored."},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@template flutter.overscroll.notificationPredicate} A check that specifies whether a [ScrollNotification] should be handled by this widget."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":250,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage","desc":["【showLeading】: Whether the header is active 【bool】","【showTrailing】: Whether the footer is active 【bool】","【axisDirection】: Axis direction 【AxisDirection】","【color】: Color 【Color】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_zh-CN.json new file mode 100644 index 000000000..6bcd134ea --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_zh-CN.json @@ -0,0 +1 @@ +{"name":"GlowingOverscrollIndicator","path":"/src/widgets/overscroll_indicator.dart","parents":["StatefulWidget","Widget"],"desc":"滚动视图已过度滚动的视觉指示。","fields":[{"name":"showLeading","type":"bool","required":true,"desc":"是否在负滚动偏移的一侧显示过度滚动发光。"},{"name":"showTrailing","type":"bool","required":true,"desc":"是否在正滚动偏移的一侧显示过度滚动发光。"},{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@template flutter.overscroll.axisDirection} 要可视化其过度滚动的 [Scrollable] 中正滚动偏移的方向。{@endtemplate}"},{"name":"color","type":"Color","required":true,"desc":"发光的颜色。忽略 alpha 通道。"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@template flutter.overscroll.notificationPredicate} 指定此小部件是否应处理 [ScrollNotification] 的检查。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":250,"localName":"滑动越域指示器","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"基本使用","desc":["【showLeading】 : 头部是否生效 【bool】","【showTrailing】 : 底部是否生效 【bool】","【axisDirection】 : 轴向 【AxisDirection】","【color】 : 颜色 【Color】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_en-US.json b/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_en-US.json new file mode 100644 index 000000000..d13daa118 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_en-US.json @@ -0,0 +1 @@ +{"name":"GridPaper","path":"/src/widgets/grid_paper.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that draws a rectilinear grid of lines one pixel wide.","fields":[{"name":"color","type":"Color","required":true,"desc":"The color to draw the lines in the grid."},{"name":"interval","type":"double","required":true,"desc":"The distance between the primary lines in the grid, in logical pixels."},{"name":"divisions","type":"int","required":true,"desc":"The number of major divisions within each primary grid cell."},{"name":"subdivisions","type":"int","required":true,"desc":"The number of minor divisions within each major division, including the major division itself."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":37,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"GridPager Basic Properties","desc":["【child】: Child component 【Widget】","【color】: Color 【Color】","【interval】: Small block side length 【double】"]},{"file":"node2_divisions.dart","name":"GridPager Subdivision","desc":["【child】: Child component 【Widget】","【color】: Color 【Color】","【subdivisions】: Number of sub-blocks in a small block 【int】","【divisions】: Number of subdivisions of sub-blocks in a small block 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_zh-CN.json new file mode 100644 index 000000000..20a57b9cc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_zh-CN.json @@ -0,0 +1 @@ +{"name":"GridPaper","path":"/src/widgets/grid_paper.dart","parents":["StatelessWidget","Widget"],"desc":"绘制一像素宽的直线网格的小部件。","fields":[{"name":"color","type":"Color","required":true,"desc":"绘制网格中线条的颜色。"},{"name":"interval","type":"double","required":true,"desc":"网格中主要线条之间的距离,以逻辑像素为单位。"},{"name":"divisions","type":"int","required":true,"desc":"每个主要网格单元内的主要分割数。"},{"name":"subdivisions","type":"int","required":true,"desc":"每个主要分割内的次要分割数,包括主要分割本身。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":37,"localName":"网格线组件","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"GridPager 基础属性","desc":["【child】: 子组件 【Widget】","【color】: 颜色 【Color】","【interval】: 小块边长 【double】"]},{"file":"node2_divisions.dart","name":"GridPager 再分割","desc":["【child】: 子组件 【Widget】","【color】: 颜色 【Color】","【subdivisions】: 小块中子块个数 【int】","【divisions】: 小块中子块的分割数 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_en-US.json b/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_en-US.json new file mode 100644 index 000000000..45dd360c3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_en-US.json @@ -0,0 +1 @@ +{"name":"GridTile","path":"/src/material/grid_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A tile in a Material Design grid list.","fields":[{"name":"header","type":"Widget?","desc":"The widget to show over the top of this grid tile."},{"name":"footer","type":"Widget?","desc":"The widget to show over the bottom of this grid tile."},{"name":"child","type":"Widget","required":true,"desc":"The widget that fills the tile."}],"id":21,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"The basic representation of GridTile is as follows","desc":["【header】: Header component 【Widget】","【child】: Child component 【Widget】","【footer】: Footer component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_zh-CN.json new file mode 100644 index 000000000..652e69eb5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_zh-CN.json @@ -0,0 +1 @@ +{"name":"GridTile","path":"/src/material/grid_tile.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 网格列表中的磁贴。","fields":[{"name":"header","type":"Widget?","desc":"显示在此网格磁贴顶部的小部件。"},{"name":"footer","type":"Widget?","desc":"显示在此网格磁贴底部的小部件。"},{"name":"child","type":"Widget","required":true,"desc":"填充磁贴的小部件。"}],"id":21,"localName":"网格瓦片","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"GridTile的基本表现如下","desc":["【header】: 头组件 【Widget】","【child】: 子组件 【Widget】","【footer】: 脚组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_en-US.json b/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_en-US.json new file mode 100644 index 000000000..0d9f02560 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_en-US.json @@ -0,0 +1 @@ +{"name":"GridTileBar","path":"/src/material/grid_tile_bar.dart","parents":["StatelessWidget","Widget"],"desc":" A header used in a Material Design [GridTile].","fields":[{"name":"backgroundColor","type":"Color?","desc":"The color to paint behind the child widgets."},{"name":"leading","type":"Widget?","desc":"A widget to display before the title."},{"name":"title","type":"Widget?","desc":"The primary content of the list item."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"trailing","type":"Widget?","desc":"A widget to display after the title."}],"id":20,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"The basic representation of GridTileBar is as follows","desc":["【leading】: Left component 【Widget】","【trailing】: Trailing component 【Widget】","【title】: Top middle component 【Widget】","【subtitle】: Bottom middle component 【Widget】","【backgroundColor】: Background color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_zh-CN.json new file mode 100644 index 000000000..3a7ba73f4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"GridTileBar","path":"/src/material/grid_tile_bar.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design [GridTile] 中使用的标题。","fields":[{"name":"backgroundColor","type":"Color?","desc":"在子小部件后面绘制的颜色。"},{"name":"leading","type":"Widget?","desc":"在标题前显示的小部件。"},{"name":"title","type":"Widget?","desc":"列表项的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"trailing","type":"Widget?","desc":"在标题后显示的小部件。"}],"id":20,"localName":"网格瓦片头","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"GridTileBar的基本表现如下","desc":["【leading】: 左侧组件 【Widget】","【trailing】: 尾组件 【Widget】","【title】: 中间上组件 【Widget】","【subtitle】: 中间下组件 【Widget】","【backgroundColor】: 背景色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridView/GridView_en-US.json b/modules/widget_system/widgets/doc/widgets/GridView/GridView_en-US.json new file mode 100644 index 000000000..a4fe22453 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/GridView/GridView_en-US.json @@ -0,0 +1 @@ +{"name":"GridView","path":"/src/widgets/scroll_view.dart","parents":["BoxScrollView","ScrollView","StatelessWidget","Widget"],"desc":" A scrollable, 2D array of widgets.","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"A delegate that controls the layout of the children within the [GridView]."},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"A delegate that provides the children for the [GridView]."}],"id":163,"lever":5,"family":0,"linkIds":[21,162],"nodes":[{"file":"node1_base.dart","name":"GridView.count Construction","desc":["【children】 : List of child components 【List】","【crossAxisCount】 : Number of boxes per row on the main axis 【int】","【mainAxisSpacing】 : Spacing between rows on the main axis 【double】","【crossAxisSpacing】 : Spacing between rows on the cross axis 【double】","【childAspectRatio】 : Main length/cross length of the box 【double】","【crossAxisCount】 : Number of boxes per row on the main axis 【int】"]},{"file":"node2_direction.dart","name":"GridView Scroll Direction","desc":["【scrollDirection】 : Scroll direction 【Axis】","【reverse】 : Whether to scroll in reverse 【bool】","【shrinkWrap】 : Whether to wrap when there is no boundary 【bool】"]},{"file":"node3_extend.dart","name":"GridView Scroll Direction","desc":["【scrollDirection】 : Scroll direction 【Axis】","【reverse】 : Whether to scroll in reverse 【bool】","【shrinkWrap】 : Whether to wrap when there is no boundary 【bool】"]},{"file":"node4_builder.dart","name":"GridView.builder Construction","desc":["【itemCount】 : Number of items 【int】","【gridDelegate】 : Grid delegate 【SliverGridDelegate】","【itemBuilder】 : Item builder 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridView/GridView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GridView/GridView_zh-CN.json new file mode 100644 index 000000000..8d9d4b837 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/GridView/GridView_zh-CN.json @@ -0,0 +1 @@ +{"name":"GridView","path":"/src/widgets/scroll_view.dart","parents":["BoxScrollView","ScrollView","StatelessWidget","Widget"],"desc":"可滚动的二维小部件数组。","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"控制 [GridView] 内子项布局的委托。"},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"为 [GridView] 提供子项的委托。"}],"id":163,"localName":"网格组件","lever":5,"family":0,"linkIds":[21,162],"nodes":[{"file":"node1_base.dart","name":"GridView.count构造","desc":["【children】 : 子组件列表 【List】","【crossAxisCount】 : 主轴一行box数量 【int】","【mainAxisSpacing】 : 主轴每行间距 【double】","【crossAxisSpacing】 : 交叉轴每行间距 【double】","【childAspectRatio】 : box主长/交叉轴长 【double】","【crossAxisCount】 : 主轴一行数量 【int】"]},{"file":"node2_direction.dart","name":"GridView滑动方向","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向滑动 【bool】","【shrinkWrap】 : 无边界时是否包裹 【bool】"]},{"file":"node3_extend.dart","name":"GridView滑动方向","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向滑动 【bool】","【shrinkWrap】 : 无边界时是否包裹 【bool】"]},{"file":"node4_builder.dart","name":"GridView.builder构造","desc":["【itemCount】 : 条目数量 【int】","【gridDelegate】 : 网格代理 【SliverGridDelegate】","【itemBuilder】 : 条目构造器 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Hero/Hero_en-US.json b/modules/widget_system/widgets/doc/widgets/Hero/Hero_en-US.json new file mode 100644 index 000000000..68adb1db1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Hero/Hero_en-US.json @@ -0,0 +1 @@ +{"name":"Hero","path":"/src/widgets/heroes.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that marks its child as being a candidate for [hero animations](https://docs.flutter.dev/ui/animations/hero-animations).","fields":[{"name":"tag","type":"Object","required":true,"desc":"The identifier for this particular hero. If the tag of this hero matches the tag of a hero on a [PageRoute] that we're navigating to or from, then a hero animation will be triggered."},{"name":"createRectTween","type":"CreateRectTween?","desc":"Defines how the destination hero's bounds change as it flies from the starting route to the destination route."},{"name":"child","type":"Widget","required":true,"desc":"The widget subtree that will \"fly\" from one route to another during a [Navigator] push or pop transition."},{"name":"flightShuttleBuilder","type":"HeroFlightShuttleBuilder?","desc":"Optional override to supply a widget that's shown during the hero's flight."},{"name":"placeholderBuilder","type":"HeroPlaceholderBuilder?","desc":"Placeholder widget left in place as the Hero's [child] once the flight takes off."},{"name":"transitionOnUserGestures","type":"bool","required":true,"desc":"Whether to perform the hero transition if the [PageRoute] transition was triggered by a user gesture, such as a back swipe on iOS."}],"id":171,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Hero","desc":["【tag】 : tag 【String】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Hero/Hero_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Hero/Hero_zh-CN.json new file mode 100644 index 000000000..5cd534a04 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Hero/Hero_zh-CN.json @@ -0,0 +1 @@ +{"name":"Hero","path":"/src/widgets/heroes.dart","parents":["StatefulWidget","Widget"],"desc":"将其子项标记为[英雄动画](https://docs.flutter.dev/ui/animations/hero-animations)候选者的小部件。","fields":[{"name":"tag","type":"Object","required":true,"desc":"此特定英雄的标识符。如果此英雄的标签与我们导航到或来自的 [PageRoute] 上的英雄标签匹配,则将触发英雄动画。"},{"name":"createRectTween","type":"CreateRectTween?","desc":"定义目标英雄的边界在从起始路由飞到目标路由时如何变化。"},{"name":"child","type":"Widget","required":true,"desc":"在 [Navigator] 推送或弹出转换期间将从一个路由"},{"name":"flightShuttleBuilder","type":"HeroFlightShuttleBuilder?","desc":"可选覆盖,提供在英雄飞行期间显示的小部件。"},{"name":"placeholderBuilder","type":"HeroPlaceholderBuilder?","desc":"一旦飞行起飞,留在原地作为英雄 [child] 的占位符小部件。"},{"name":"transitionOnUserGestures","type":"bool","required":true,"desc":"如果 [PageRoute] 转换是由用户手势(如 iOS 上的后退滑动)触发的,是否执行英雄转换。"}],"id":171,"localName":"共享动画","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Hero基本使用","desc":["【tag】 : 标签 【String】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_en-US.json b/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_en-US.json new file mode 100644 index 000000000..37a8d0e2c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_en-US.json @@ -0,0 +1 @@ +{"name":"HeroControllerScope","path":"/src/widgets/navigator.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget to host a hero controller.","fields":[{"name":"controller","type":"HeroController?","desc":"The hero controller that is hosted inside this widget."}],"id":425,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_zh-CN.json new file mode 100644 index 000000000..f30899095 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_zh-CN.json @@ -0,0 +1 @@ +{"name":"HeroControllerScope","path":"/src/widgets/navigator.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"托管英雄控制器的继承小部件。","fields":[{"name":"controller","type":"HeroController?","desc":"托管在此小部件内的英雄控制器。"}],"id":425,"localName":"HeroControllerScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_en-US.json b/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_en-US.json new file mode 100644 index 000000000..87dce6c60 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_en-US.json @@ -0,0 +1 @@ +{"name":"HeroMode","path":"/src/widgets/heroes.dart","parents":["StatelessWidget","Widget"],"desc":" Enables or disables [Hero]es in the widget subtree.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The subtree to place inside the [HeroMode]."},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not [Hero]es are enabled in this subtree."}],"id":426,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_zh-CN.json b/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_zh-CN.json new file mode 100644 index 000000000..8d79a5ae3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_zh-CN.json @@ -0,0 +1 @@ +{"name":"HeroMode","path":"/src/widgets/heroes.dart","parents":["StatelessWidget","Widget"],"desc":"启用或禁用小部件子树中的 [Hero]。","fields":[{"name":"child","type":"Widget","required":true,"desc":"放置在 [HeroMode] 内的子树。"},{"name":"enabled","type":"bool","required":true,"desc":"此子树中是否启用 [Hero]。"}],"id":426,"localName":"HeroMode","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_en-US.json b/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_en-US.json new file mode 100644 index 000000000..879736d2c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_en-US.json @@ -0,0 +1 @@ +{"name":"HtmlElementView","path":"/src/widgets/platform_view.dart","parents":["StatelessWidget","Widget"],"desc":" Embeds an HTML element in the Widget hierarchy in Flutter web.","fields":[{"name":"viewType","type":"String","required":true,"desc":"The unique identifier for the HTML view type to be embedded by this widget."},{"name":"onPlatformViewCreated","type":"PlatformViewCreatedCallback?","desc":"Callback to invoke after the platform view has been created."},{"name":"creationParams","type":"Object?","desc":"Passed as the 2nd argument (i.e. `params`) of the registered view factory."},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":213,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to HtmlElementView","desc":["【child】 : Child widget 【child】","【viewType】 : Unique identifier for the HTML element 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_zh-CN.json new file mode 100644 index 000000000..295b808d8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_zh-CN.json @@ -0,0 +1 @@ +{"name":"HtmlElementView","path":"/src/widgets/platform_view.dart","parents":["StatelessWidget","Widget"],"desc":"在 Flutter web 的小部件层次结构中嵌入 HTML 元素。","fields":[{"name":"viewType","type":"String","required":true,"desc":"此小部件要嵌入的 HTML 视图类型的唯一标识符。"},{"name":"onPlatformViewCreated","type":"PlatformViewCreatedCallback?","desc":"创建平台视图后调用的回调。"},{"name":"creationParams","type":"Object?","desc":"作为注册视图工厂的第二个参数(即 `params`)传递。"},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":213,"localName":"html 元素视图","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"HtmlElementView 介绍","desc":["【child】 : 子组件 【child】","【viewType】 : html元素唯一表识 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Icon/Icon_en-US.json b/modules/widget_system/widgets/doc/widgets/Icon/Icon_en-US.json new file mode 100644 index 000000000..948314ac5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Icon/Icon_en-US.json @@ -0,0 +1 @@ +{"name":"Icon","path":"/src/widgets/icon.dart","parents":["StatelessWidget","Widget"],"desc":" A graphical icon widget drawn with a glyph from a font described in an [IconData] such as material's predefined [IconData]s in [Icons].","fields":[{"name":"icon","type":"IconData?","desc":"The icon to display. The available icons are described in [Icons]."},{"name":"size","type":"double?","desc":"The size of the icon in logical pixels."},{"name":"fill","type":"double?","desc":"The fill for drawing the icon."},{"name":"weight","type":"double?","desc":"The stroke weight for drawing the icon."},{"name":"grade","type":"double?","desc":"The grade (granular stroke weight) for drawing the icon."},{"name":"opticalSize","type":"double?","desc":"The optical size for drawing the icon."},{"name":"color","type":"Color?","desc":"The color to use when drawing the icon."},{"name":"shadows","type":"List?","desc":"A list of [Shadow]s that will be painted underneath the icon."},{"name":"semanticLabel","type":"String?","desc":"Semantic label for the icon."},{"name":"textDirection","type":"TextDirection?","desc":"The text direction to use for rendering the icon."},{"name":"applyTextScaling","type":"bool?","desc":"Whether to scale the size of this widget using the ambient [MediaQuery]'s [TextScaler]."},{"name":"blendMode","type":"BlendMode?","desc":"The [BlendMode] to apply to the foreground of the icon."}],"id":6,"lever":2,"family":0,"linkIds":[7,30,125],"nodes":[{"file":"node1_base.dart","name":"Used to display an icon","desc":["【Input】 : Icon data 【IconData】","【size】 : Size 【double】","【color】: Color 【Color】"]},{"file":"node2_diy.dart","name":"Use custom icons","desc":["You can download icon fonts from the iconfont website for use"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Icon/Icon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Icon/Icon_zh-CN.json new file mode 100644 index 000000000..6c434b787 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Icon/Icon_zh-CN.json @@ -0,0 +1 @@ +{"name":"Icon","path":"/src/widgets/icon.dart","parents":["StatelessWidget","Widget"],"desc":"使用 [IconData] 中描述的字体字形绘制的图形图标小部件,例如 material 的 [Icons] 中预定义的 [IconData]。","fields":[{"name":"icon","type":"IconData?","desc":"要显示的图标。可用图标在 [Icons] 中描述。"},{"name":"size","type":"double?","desc":"图标的逻辑像素大小。"},{"name":"fill","type":"double?","desc":"绘制图标的填充。"},{"name":"weight","type":"double?","desc":"绘制图标的笔画粗细。"},{"name":"grade","type":"double?","desc":"绘制图标的等级(细粒度笔画粗细)。"},{"name":"opticalSize","type":"double?","desc":"绘制图标的光学大小。"},{"name":"color","type":"Color?","desc":"绘制图标时使用的颜色。"},{"name":"shadows","type":"List?","desc":"将在图标下方绘制的 [Shadow] 列表。"},{"name":"semanticLabel","type":"String?","desc":"图标的语义标签。"},{"name":"textDirection","type":"TextDirection?","desc":"用于渲染图标的文本方向。"},{"name":"applyTextScaling","type":"bool?","desc":"是否使用环境 [MediaQuery] 的 [TextScaler] 缩放此小部件的大小。"},{"name":"blendMode","type":"BlendMode?","desc":"应用于图标前景的 [BlendMode]。"}],"id":6,"localName":"图标组件","lever":2,"family":0,"linkIds":[7,30,125],"nodes":[{"file":"node1_base.dart","name":"用于显示一个图标","desc":["【入参】 :图标数据 【IconData】","【size】 : 大小 【double】","【color】: 颜色 【Color】"]},{"file":"node2_diy.dart","name":"使用自定义图标","desc":["可在iconfont网站中下载图标字体进行使用"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_en-US.json b/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_en-US.json new file mode 100644 index 000000000..41b89881c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_en-US.json @@ -0,0 +1 @@ +{"name":"IconButton","path":"/src/material/icon_button.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design icon button.","fields":[{"name":"iconSize","type":"double?","desc":"The size of the icon inside the button."},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the icon button's layout will be."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The padding around the button's icon. The entire padded icon will react to input gestures."},{"name":"alignment","type":"AlignmentGeometry?","desc":"Defines how the icon is positioned within the IconButton."},{"name":"splashRadius","type":"double?","desc":"The splash radius."},{"name":"icon","type":"Widget","required":true,"desc":"The icon to display inside the button."},{"name":"focusColor","type":"Color?","desc":"The color for the button when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"The color for the button when a pointer is hovering over it."},{"name":"color","type":"Color?","desc":"The color to use for the icon inside the button, if the icon is enabled. Defaults to leaving this up to the [icon] widget."},{"name":"splashColor","type":"Color?","desc":"The primary color of the button when the button is in the down (pressed) state. The splash is represented as a circular overlay that appears above the [highlightColor] overlay. The splash overlay has a center point that matches the hit point of the user touch event. The splash overlay will expand to fill the button area if the touch is held for long enough time. If the splash color has transparency then the highlight and button color will show through."},{"name":"highlightColor","type":"Color?","desc":"The secondary color of the button when the button is in the down (pressed) state. The highlight color is represented as a solid color that is overlaid over the button color (if any). If the highlight color has transparency, the button color will show through. The highlight fades in quickly as the button is held down."},{"name":"disabledColor","type":"Color?","desc":"The color to use for the icon inside the button, if the icon is disabled. Defaults to the [ThemeData.disabledColor] of the current [Theme]."},{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when the button is tapped or otherwise activated."},{"name":"onHover","type":"ValueChanged?","desc":"The callback that is called when the button is hovered."},{"name":"onLongPress","type":"VoidCallback?","desc":"The callback that is called when the button is long-pressed."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tooltip","type":"String?","desc":"Text that describes the action that will occur when the button is pressed."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"constraints","type":"BoxConstraints?","desc":"Optional size constraints for the button."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"isSelected","type":"bool?","desc":"The optional selection state of the icon button."},{"name":"selectedIcon","type":"Widget?","desc":"The icon to display inside the button when [isSelected] is true. This property can be null. The original [icon] will be used for both selected and unselected status if it is null."}],"id":30,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IconButton Properties","desc":["【icon】: Icon component 【Widget】","【tooltip】: Long press tooltip text 【String】","【highlightColor】: Long press highlight color 【Color】","【splashColor】: Ripple color 【Color】","【onPressed】: Click event 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_zh-CN.json new file mode 100644 index 000000000..5965c23d5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"IconButton","path":"/src/material/icon_button.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 图标按钮。","fields":[{"name":"iconSize","type":"double?","desc":"按钮内图标的大小。"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义图标按钮布局的紧凑程度。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"按钮图标周围的内边距。整个带内边距的图标将对输入手势做出反应。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"定义图标在 IconButton 内的定位方式。"},{"name":"splashRadius","type":"double?","desc":"飞溅半径。"},{"name":"icon","type":"Widget","required":true,"desc":"在按钮内显示的图标。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时的颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在按钮上时的颜色。"},{"name":"color","type":"Color?","desc":"如果图标启用,用于按钮内图标的颜色。默认情况下将此留给 [icon] 小部件。"},{"name":"splashColor","type":"Color?","desc":"按钮处于按下状态时的主要颜色。飞溅表示为出现在 [highlightColor] 覆盖层上方的圆形覆盖层。飞溅覆盖层的中心点与用户触摸事件的命中点匹配。如果触摸保持足够长的时间,飞溅覆盖层将扩展以填充按钮区域。如果飞溅颜色具有透明度,则高亮和按钮颜色将透过。"},{"name":"highlightColor","type":"Color?","desc":"按钮处于按下状态时的次要颜色。高亮颜色表示为覆盖在按钮颜色(如果有)上的纯色。如果高亮颜色具有透明度,按钮颜色将透过。高亮在按钮被按住时快速淡入。"},{"name":"disabledColor","type":"Color?","desc":"如果图标禁用,用于按钮内图标的颜色。默认为当前 [Theme] 的 [ThemeData.disabledColor]。"},{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用的回调。"},{"name":"onHover","type":"ValueChanged?","desc":"悬停按钮时调用的回调。"},{"name":"onLongPress","type":"VoidCallback?","desc":"长按按钮时调用的回调。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tooltip","type":"String?","desc":"描述按下按钮时将发生的操作的文本。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"constraints","type":"BoxConstraints?","desc":"按钮的可选大小约束。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"isSelected","type":"bool?","desc":"图标按钮的可选选择状态。"},{"name":"selectedIcon","type":"Widget?","desc":"当 [isSelected] 为 true 时在按钮内显示的图标。此属性可以为 null。如果为 null,原始 [icon] 将用于选定和未选定状态。"}],"id":30,"localName":"图标按钮","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IconButton属性","desc":["【icon】: 图标组件 【Widget】","【tooltip】: 长按提示文字 【String】","【highlightColor】: 长按高亮色 【Color】","【splashColor】: 水波纹色 【Color】","【onPressed】: 点击事件 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_en-US.json new file mode 100644 index 000000000..8d8f266b5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_en-US.json @@ -0,0 +1 @@ +{"name":"IconButtonTheme","path":"/src/material/icon_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [IconButton] descendants.","fields":[{"name":"data","type":"IconButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":427,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_zh-CN.json new file mode 100644 index 000000000..7908c0769 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"IconButtonTheme","path":"/src/material/icon_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [IconButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"IconButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":427,"localName":"IconButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_en-US.json new file mode 100644 index 000000000..38fb9fadc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_en-US.json @@ -0,0 +1 @@ +{"name":"IconTheme","path":"/src/widgets/icon_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Controls the default properties of icons in a widget subtree.","fields":[{"name":"data","type":"IconThemeData","required":true,"desc":"The set of properties to use for icons in this subtree."}],"id":325,"lever":3,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IconTheme Usage","desc":["You can obtain the icon theme data through IconTheme.of, or set the default style for the icon components of IconTheme【descendants】, including color, opacity, and size."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_zh-CN.json new file mode 100644 index 000000000..00a6357d5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"IconTheme","path":"/src/widgets/icon_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"控制小部件子树中图标的默认属性。","fields":[{"name":"data","type":"IconThemeData","required":true,"desc":"用于此子树中图标的属性集。"}],"id":325,"localName":"图标样式","lever":3,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IconTheme使用","desc":["可以通过IconTheme.of获取图标主题数据,也可以为IconTheme【后代】的图标组件设置默认样式,包括颜色、透明度、尺寸。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_en-US.json b/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_en-US.json new file mode 100644 index 000000000..da136a135 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_en-US.json @@ -0,0 +1 @@ +{"name":"IgnoreBaseline","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that causes the parent to ignore the [child] for the purposes of baseline alignment.","fields":[],"id":428,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_zh-CN.json new file mode 100644 index 000000000..89a27069b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_zh-CN.json @@ -0,0 +1 @@ +{"name":"IgnoreBaseline","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"导致父级为了基线对齐目的而忽略 [child] 的小部件。","fields":[],"id":428,"localName":"IgnoreBaseline","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_en-US.json b/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_en-US.json new file mode 100644 index 000000000..0a3409d3b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_en-US.json @@ -0,0 +1 @@ +{"name":"IgnorePointer","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that is invisible during hit testing.","fields":[{"name":"ignoring","type":"bool","required":true,"desc":"Whether this widget is ignored during hit testing."},{"name":"ignoringSemantics","type":"bool?","desc":"Whether the semantics of this widget is ignored when compiling the semantics subtree."}],"id":292,"lever":4,"family":2,"linkIds":[295,146,149,150],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of IgnorePointer","desc":["【child】 : Child component 【Widget】","【ignoring】 : Whether to ignore events 【bool】","As shown below, when the Switch is selected, ignoring is true, and the button event will be locked and cannot be clicked."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_zh-CN.json new file mode 100644 index 000000000..80a881384 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_zh-CN.json @@ -0,0 +1 @@ +{"name":"IgnorePointer","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在命中测试期间不可见的小部件。","fields":[{"name":"ignoring","type":"bool","required":true,"desc":"此小部件在命中测试期间是否被忽略。"},{"name":"ignoringSemantics","type":"bool?","desc":"编译语义子树时是否忽略此小部件的语义。"}],"id":292,"localName":"忽视点击","lever":4,"family":2,"linkIds":[295,146,149,150],"nodes":[{"file":"node1_base.dart","name":"IgnorePointer基本使用","desc":["【child】 : 孩子组件 【Widget】","【ignoring】 : 是否忽视事件 【bool】","如下,Switch选中时ignoring为true,按钮事件将被锁定,无法点击。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Image/Image_en-US.json b/modules/widget_system/widgets/doc/widgets/Image/Image_en-US.json new file mode 100644 index 000000000..6c5a409ad --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Image/Image_en-US.json @@ -0,0 +1 @@ +{"name":"Image","path":"/src/widgets/image.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that displays an image.","fields":[{"name":"image","type":"ImageProvider","required":true,"desc":"The image to display."},{"name":"frameBuilder","type":"ImageFrameBuilder?","desc":"A builder function responsible for creating the widget that represents this image."},{"name":"loadingBuilder","type":"ImageLoadingBuilder?","desc":"A builder that specifies the widget to display to the user while an image is still loading."},{"name":"errorBuilder","type":"ImageErrorWidgetBuilder?","desc":"A builder function that is called if an error occurs during image loading."},{"name":"width","type":"double?","desc":"If non-null, require the image to have this width (in logical pixels)."},{"name":"height","type":"double?","desc":"If non-null, require the image to have this height (in logical pixels)."},{"name":"color","type":"Color?","desc":"If non-null, this color is blended with each image pixel using [colorBlendMode]."},{"name":"opacity","type":"Animation?","desc":"If non-null, the value from the [Animation] is multiplied with the opacity of each image pixel before painting onto the canvas."},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"The rendering quality of the image."},{"name":"colorBlendMode","type":"BlendMode?","desc":"Used to combine [color] with this image."},{"name":"fit","type":"BoxFit?","desc":"How to inscribe the image into the space allocated during layout."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the image within its bounds."},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"How to paint any portions of the layout bounds not covered by the image."},{"name":"centerSlice","type":"Rect?","desc":"The center slice for a nine-patch image."},{"name":"matchTextDirection","type":"bool","required":true,"desc":"Whether to paint the image in the direction of the [TextDirection]."},{"name":"gaplessPlayback","type":"bool","required":true,"desc":"Whether to continue showing the old image (true), or briefly show nothing (false), when the image provider changes. The default value is false."},{"name":"semanticLabel","type":"String?","desc":"A Semantic description of the image."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"Whether to exclude this image from semantics."},{"name":"isAntiAlias","type":"bool","required":true,"desc":"Whether to paint the image with anti-aliasing."}],"id":38,"lever":5,"family":1,"linkIds":[8,87],"nodes":[{"file":"node1_base.dart","name":"Load images from resource files and the network","desc":["Image.asset loads resource images,"]},{"file":"node2_fit.dart","name":"Image adaptation mode","desc":["【fit】 : Adaptation mode*7 【BoxFit】,"]},{"file":"node3_alignment.dart","name":"Image alignment mode","desc":["【alignment】 : Color 【AlignmentGeometry】"," Common nine static constants of the Alignment class, but custom positions are also possible"]},{"file":"node4_colorBlendMode.dart","name":"Image color and blending mode","desc":["【color】 : Color 【Color】","【colorBlendMode】: Blending mode*29 【BlendMode】"]},{"file":"node5_repeat.dart","name":"Image repeat mode","desc":["【repeat】 : Repeat mode*4 【ImageRepeat】"]},{"file":"node6_centerSlice.dart","name":"Image partial zoom implementation","desc":["【centerSlice】 : Reserved area 【Rect】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Image/Image_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Image/Image_zh-CN.json new file mode 100644 index 000000000..a0bcfb89e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Image/Image_zh-CN.json @@ -0,0 +1 @@ +{"name":"Image","path":"/src/widgets/image.dart","parents":["StatefulWidget","Widget"],"desc":"显示图像的小部件。","fields":[{"name":"image","type":"ImageProvider","required":true,"desc":"要显示的图像。"},{"name":"frameBuilder","type":"ImageFrameBuilder?","desc":"负责创建表示此图像的小部件的构建器函数。"},{"name":"loadingBuilder","type":"ImageLoadingBuilder?","desc":"指定在图像仍在加载时向用户显示的小部件的构建器。"},{"name":"errorBuilder","type":"ImageErrorWidgetBuilder?","desc":"如果在图像加载期间发生错误,则调用的构建器函数。"},{"name":"width","type":"double?","desc":"如果非空,要求图像具有此宽度(以逻辑像素为单位)。"},{"name":"height","type":"double?","desc":"如果非空,要求图像具有此高度(以逻辑像素为单位)。"},{"name":"color","type":"Color?","desc":"如果非空,此颜色使用 [colorBlendMode] 与每个图像像素混合。"},{"name":"opacity","type":"Animation?","desc":"如果非空,[Animation] 的值在绘制到画布之前与每个图像像素的不透明度相乘。"},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"图像的渲染质量。"},{"name":"colorBlendMode","type":"BlendMode?","desc":"用于将 [color] 与此图像组合。"},{"name":"fit","type":"BoxFit?","desc":"如何在布局期间分配的空间中刻画图像。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在其边界内对齐图像。"},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"如何绘制图像未覆盖的布局边界的任何部分。"},{"name":"centerSlice","type":"Rect?","desc":"九宫格图像的中心切片。"},{"name":"matchTextDirection","type":"bool","required":true,"desc":"是否在 [TextDirection] 的方向上绘制图像。"},{"name":"gaplessPlayback","type":"bool","required":true,"desc":"当图像提供程序更改时,是否继续显示旧图像(true)还是短暂显示无内容(false)。默认值为 false。"},{"name":"semanticLabel","type":"String?","desc":"图像的语义描述。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"是否从语义中排除此图像。"},{"name":"isAntiAlias","type":"bool","required":true,"desc":"是否使用抗锯齿绘制图像。"}],"id":38,"localName":"图片组件","lever":5,"family":1,"linkIds":[8,87],"nodes":[{"file":"node1_base.dart","name":"可从资源文件和网络加载图片","desc":["Image.asset加载资源图片,"]},{"file":"node2_fit.dart","name":"图片的适应模式","desc":["【fit】 : 适应模式*7 【BoxFit】,"]},{"file":"node3_alignment.dart","name":"图片对齐模式","desc":["【alignment】 : 颜色 【AlignmentGeometry】"," 常用Alignment类的九个静态常量,但也可定制位置"]},{"file":"node4_colorBlendMode.dart","name":"图片颜色及混合模式","desc":["【color】 : 颜色 【Color】","【colorBlendMode】: 混合模式*29 【BlendMode】"]},{"file":"node5_repeat.dart","name":"图片重复模式","desc":["【repeat】 : 重复模式*4 【ImageRepeat】"]},{"file":"node6_centerSlice.dart","name":"图片实现局部放大","desc":["【centerSlice】 : 保留的区域 【Rect】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_en-US.json b/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_en-US.json new file mode 100644 index 000000000..5523003e6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_en-US.json @@ -0,0 +1 @@ +{"name":"ImageFiltered","path":"/src/widgets/image_filter.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Applies an [ImageFilter] to its child.","fields":[{"name":"imageFilter","type":"ImageFilter","required":true,"desc":"The image filter to apply to the child of this widget."},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not to apply the image filter operation to the child of this widget."}],"id":357,"lever":4,"family":2,"linkIds":[278,88],"nodes":[{"file":"node1_blur.dart","name":"ImageFilter Gaussian Blur","desc":["【imageFilter】 : Image filter 【ImageFilter】","【child】 : Child component 【Widget】"]},{"file":"node2_color.dart","name":"ImageFilter Color Effect","desc":["Achieve color filter through the ColorFilter object."]},{"file":"node3_matrix.dart","name":"ImageFilter Transformation Effect","desc":["Perform matrix transformation through the ImageFilter.matrix constructor, but it is relatively weak."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_zh-CN.json new file mode 100644 index 000000000..c89fcf0b5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_zh-CN.json @@ -0,0 +1 @@ +{"name":"ImageFiltered","path":"/src/widgets/image_filter.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对其子项应用 [ImageFilter]。","fields":[{"name":"imageFilter","type":"ImageFilter","required":true,"desc":"应用于此小部件子项的图像过滤器。"},{"name":"enabled","type":"bool","required":true,"desc":"是否对此小部件的子项应用图像过滤器操作。"}],"id":357,"localName":"图像滤镜","lever":4,"family":2,"linkIds":[278,88],"nodes":[{"file":"node1_blur.dart","name":"ImageFilter 高斯模糊","desc":["【imageFilter】 : 图像滤镜 【ImageFilter】","【child】 : 子组件 【Widget】"]},{"file":"node2_color.dart","name":"ImageFilter 滤色效果","desc":["通过 ColorFilter 对象实现颜色滤镜。"]},{"file":"node3_matrix.dart","name":"ImageFilter 变换效果","desc":["通过 ImageFilter.matrix 构造,进行矩阵变换,但比较鸡肋。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_en-US.json new file mode 100644 index 000000000..b4cc0da2b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_en-US.json @@ -0,0 +1 @@ +{"name":"ImageIcon","path":"/src/widgets/image_icon.dart","parents":["StatelessWidget","Widget"],"desc":" An icon that comes from an [ImageProvider], e.g. an [AssetImage].","fields":[{"name":"image","type":"ImageProvider?","desc":"The image to display as the icon."},{"name":"size","type":"double?","desc":"The size of the icon in logical pixels."},{"name":"color","type":"Color?","desc":"The color to use when drawing the icon."},{"name":"semanticLabel","type":"String?","desc":"Semantic label for the icon."}],"id":7,"lever":1,"family":0,"linkIds":[6,30,125],"nodes":[{"file":"node1_base.dart","name":"Used to display a solid color image","desc":["【Parameter】: Image resource 【ImageProvider】","【size】: Size 【double】","【color】: Badge color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_zh-CN.json new file mode 100644 index 000000000..3ef862676 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_zh-CN.json @@ -0,0 +1 @@ +{"name":"ImageIcon","path":"/src/widgets/image_icon.dart","parents":["StatelessWidget","Widget"],"desc":"来自 [ImageProvider] 的图标,例如 [AssetImage]。","fields":[{"name":"image","type":"ImageProvider?","desc":"要显示为图标的图像。"},{"name":"size","type":"double?","desc":"图标的逻辑像素大小。"},{"name":"color","type":"Color?","desc":"绘制图标时使用的颜色。"},{"name":"semanticLabel","type":"String?","desc":"图标的语义标签。"}],"id":7,"localName":"容器","lever":1,"family":0,"linkIds":[6,30,125],"nodes":[{"file":"node1_base.dart","name":"用于显示一个纯色图片","desc":["【入参】 : 图片资源 【ImageProvider】","【size】 : 大小 【double】","【color】: 角标颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_en-US.json b/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_en-US.json new file mode 100644 index 000000000..49e3e588e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_en-US.json @@ -0,0 +1 @@ +{"name":"ImgElementPlatformView","path":"/src/widgets/_web_image_web.dart","parents":["StatelessWidget","Widget"],"desc":" Displays an `` element with `src` set to [src].","fields":[{"name":"src","type":"String?","desc":"The `src` URL for the `` tag."}],"id":429,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_zh-CN.json new file mode 100644 index 000000000..ee9ed504a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_zh-CN.json @@ -0,0 +1 @@ +{"name":"ImgElementPlatformView","path":"/src/widgets/_web_image_web.dart","parents":["StatelessWidget","Widget"],"desc":"显示 `src` 设置为 [src] 的 `` 元素。","fields":[{"name":"src","type":"String?","desc":"`` 标签的 `src` URL。"}],"id":429,"localName":"ImgElementPlatformView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_en-US.json new file mode 100644 index 000000000..8a3c8b6e0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_en-US.json @@ -0,0 +1 @@ +{"name":"ImplicitlyAnimatedWidget","path":"/src/widgets/implicit_animations.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" An abstract class for building widgets that animate changes to their properties.","fields":[{"name":"curve","type":"Curve","required":true,"desc":"The curve to apply when animating the parameters of this container."},{"name":"duration","type":"Duration","required":true,"desc":"The duration over which to animate the parameters of this container."},{"name":"onEnd","type":"VoidCallback?","desc":"Called every time an animation completes."}],"id":430,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_zh-CN.json new file mode 100644 index 000000000..dc627ee16 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"ImplicitlyAnimatedWidget","path":"/src/widgets/implicit_animations.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"用于构建对其属性更改进行动画处理的小部件的抽象类。","fields":[{"name":"curve","type":"Curve","required":true,"desc":"对此容器的参数进行动画处理时应用的曲线。"},{"name":"duration","type":"Duration","required":true,"desc":"对此容器的参数进行动画处理的持续时间。"},{"name":"onEnd","type":"VoidCallback?","desc":"每次动画完成时调用。"}],"id":430,"localName":"ImplicitlyAnimatedWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_en-US.json b/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_en-US.json new file mode 100644 index 000000000..6ec67f65c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_en-US.json @@ -0,0 +1 @@ +{"name":"IndexedSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that annotates the child semantics with an index.","fields":[{"name":"index","type":"int","required":true,"desc":"The index used to annotate the first child semantics node."}],"id":431,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_zh-CN.json new file mode 100644 index 000000000..56021e98b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_zh-CN.json @@ -0,0 +1 @@ +{"name":"IndexedSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用索引注释子语义的小部件。","fields":[{"name":"index","type":"int","required":true,"desc":"用于注释第一个子语义节点的索引。"}],"id":431,"localName":"IndexedSemantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_en-US.json b/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_en-US.json new file mode 100644 index 000000000..4def35435 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_en-US.json @@ -0,0 +1 @@ +{"name":"IndexedStack","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":" A [Stack] that shows a single child from a list of children.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the non-positioned and partially-positioned children in the stack."},{"name":"textDirection","type":"TextDirection?","desc":"The text direction with which to resolve [alignment]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"sizing","type":"StackFit","required":true,"desc":"How to size the non-positioned children in the stack."},{"name":"index","type":"int?","desc":"The index of the child to show."},{"name":"children","type":"List","required":true,"desc":"The child widgets of the stack."}],"id":161,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of IndexedStack","desc":["【children】: List of child components 【List】","【alignment】: Alignment 【AlignmentGeometry】","【index】: Currently displayed component 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_zh-CN.json new file mode 100644 index 000000000..e2e89905f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_zh-CN.json @@ -0,0 +1 @@ +{"name":"IndexedStack","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":"从子项列表中显示单个子项的 [Stack]。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在堆栈中对齐非定位和部分定位的子项。"},{"name":"textDirection","type":"TextDirection?","desc":"用于解析 [alignment] 的文本方向。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"sizing","type":"StackFit","required":true,"desc":"如何调整堆栈中非定位子项的大小。"},{"name":"index","type":"int?","desc":"要显示的子项的索引。"},{"name":"children","type":"List","required":true,"desc":"堆栈的子小部件。"}],"id":161,"localName":"索引堆叠","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IndexedStack基本使用","desc":["【children】 : 子组件列表 【Lis】","【alignment】 : 对齐方式 【AlignmentGeometry】","【index】 : 当前显示组件 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_en-US.json new file mode 100644 index 000000000..665d0fdb1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_en-US.json @@ -0,0 +1 @@ +{"name":"InheritedCupertinoTheme","path":"/src/cupertino/theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Provides a [CupertinoTheme] to all descendents.","fields":[{"name":"theme","type":"CupertinoTheme","required":true,"desc":"The [CupertinoTheme] that is provided to widgets lower in the tree."}],"id":432,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_zh-CN.json new file mode 100644 index 000000000..078ab0432 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"InheritedCupertinoTheme","path":"/src/cupertino/theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为所有后代提供 [CupertinoTheme]。","fields":[{"name":"theme","type":"CupertinoTheme","required":true,"desc":"提供给树中较低小部件的 [CupertinoTheme]。"}],"id":432,"localName":"InheritedCupertinoTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_en-US.json b/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_en-US.json new file mode 100644 index 000000000..54b995787 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_en-US.json @@ -0,0 +1 @@ +{"name":"InheritedModel","path":"/src/widgets/inherited_model.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An [InheritedWidget] that's intended to be used as the base class for models whose dependents may only depend on one part or \"aspect\" of the overall model.","fields":[],"id":336,"lever":4,"family":5,"linkIds":[346],"nodes":[{"file":"node1.dart","name":"InheritedModel Usage","desc":["【child】: child component 【Widget】","Below is a custom InheritedModel that implements subtree sharing of data; and defines two aspects, color and value, to control the granularity of dependency notifications."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_zh-CN.json new file mode 100644 index 000000000..5aa33fdd5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_zh-CN.json @@ -0,0 +1 @@ +{"name":"InheritedModel","path":"/src/widgets/inherited_model.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"旨在用作模型基类的 [InheritedWidget],其依赖项可能仅依赖于整个模型的一部分或\"方面\"。","fields":[],"id":336,"localName":"共享模型","lever":4,"family":5,"linkIds":[346],"nodes":[{"file":"node1.dart","name":"InheritedModel 使用","desc":["【child】 : 子组件 【Widget】","下面是一个自定义 InheritedModel,实现数据的子树共享;并且定义颜色和数值两个方面,控制依赖通知的粒度。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_en-US.json b/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_en-US.json new file mode 100644 index 000000000..0bac7054d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_en-US.json @@ -0,0 +1 @@ +{"name":"InheritedNotifier","path":"/src/widgets/inherited_notifier.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget for a [Listenable] [notifier], which updates its dependencies when the [notifier] is triggered.","fields":[{"name":"notifier","type":"T?","desc":"The [Listenable] object to which to listen."}],"id":433,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_zh-CN.json new file mode 100644 index 000000000..f5a2737c8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_zh-CN.json @@ -0,0 +1 @@ +{"name":"InheritedNotifier","path":"/src/widgets/inherited_notifier.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"[Listenable] [notifier] 的继承小部件,当 [notifier] 被触发时更新其依赖项。","fields":[{"name":"notifier","type":"T?","desc":"要监听的 [Listenable] 对象。"}],"id":433,"localName":"InheritedNotifier","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_en-US.json new file mode 100644 index 000000000..72f3b22f8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_en-US.json @@ -0,0 +1 @@ +{"name":"InheritedTheme","path":"/src/widgets/inherited_theme.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An [InheritedWidget] that defines visual properties like colors and text styles, which the [child]'s subtree depends on.","fields":[],"id":345,"lever":1,"family":5,"linkIds":[324,326,328,329],"nodes":[{"file":"node1_base.dart","name":"Introduction to InheritedTheme","desc":["InheritedTheme.capture can capture the upper theme, obtain the CapturedThemes object, and use the captured theme across routes through the wrap method of this object."," ","","class InheritedThemeDemo extends StatelessWidget {"," const InheritedThemeDemo({Key? key) : super(key: key);","",""," @override"," Widget build(BuildContext context) {"," return const DefaultTextStyle("," style: TextStyle(fontSize: 24, color: Colors.blue),"," child: TestBody(),"," );"," ","","","class TestBody extends StatelessWidget {"," const TestBody({Key? key) : super(key: key);",""," @override"," Widget build(BuildContext context) {",""," return GestureDetector("," onTap: () => _toNextPage(context),"," child: Container("," height: 60,"," margin: const EdgeInsets.only(left: 40,right: 40),"," alignment: Alignment.center,"," color: Theme.of(context).primaryColor.withOpacity(0.1),"," child: const Text('InheritedTheme')));"," ",""," void _toNextPage(BuildContext context) {"," final NavigatorState navigator = Navigator.of(context);"," final CapturedThemes themes ="," InheritedTheme.capture(from: context, to: navigator.context);"," "," Navigator.of(context).push("," MaterialPageRoute("," builder: (BuildContext _) {"," return themes.wrap(Container("," alignment: Alignment.center,"," color: Colors.white,"," child: Text('Flutter Unit'),"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_zh-CN.json new file mode 100644 index 000000000..757bccb9a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"InheritedTheme","path":"/src/widgets/inherited_theme.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"定义视觉属性(如颜色和文本样式)的 [InheritedWidget],[child] 的子树依赖于这些属性。","fields":[],"id":345,"localName":"传承主题","lever":1,"family":5,"linkIds":[324,326,328,329],"nodes":[{"file":"node1_base.dart","name":"InheritedTheme 介绍","desc":["InheritedTheme.capture 可以抓取上层主题,获取 CapturedThemes 对象,通过该对象 wrap 方法可以跨路由使用抓到的主题。"," ","","class InheritedThemeDemo extends StatelessWidget {"," const InheritedThemeDemo({Key? key) : super(key: key);","",""," @override"," Widget build(BuildContext context) {"," return const DefaultTextStyle("," style: TextStyle(fontSize: 24, color: Colors.blue),"," child: TestBody(),"," );"," ","","","class TestBody extends StatelessWidget {"," const TestBody({Key? key) : super(key: key);",""," @override"," Widget build(BuildContext context) {",""," return GestureDetector("," onTap: () => _toNextPage(context),"," child: Container("," height: 60,"," margin: const EdgeInsets.only(left: 40,right: 40),"," alignment: Alignment.center,"," color: Theme.of(context).primaryColor.withOpacity(0.1),"," child: const Text('InheritedTheme')));"," ",""," void _toNextPage(BuildContext context) {"," final NavigatorState navigator = Navigator.of(context);"," final CapturedThemes themes ="," InheritedTheme.capture(from: context, to: navigator.context);"," "," Navigator.of(context).push("," MaterialPageRoute("," builder: (BuildContext _) {"," return themes.wrap(Container("," alignment: Alignment.center,"," color: Colors.white,"," child: Text('Flutter Unit'),"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_en-US.json new file mode 100644 index 000000000..6265073cf --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_en-US.json @@ -0,0 +1 @@ +{"name":"InheritedWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["ProxyWidget","Widget"],"desc":" Base class for widgets that efficiently propagate information down the tree.","fields":[],"id":346,"lever":4,"family":5,"linkIds":[167,319,328,324,331],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Column","desc":["【children】: Component list 【List】","【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】","【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】","【textBaseline】: Text baseline 【TextBaseline】","【verticalDirection】: Vertical direction 【VerticalDirection】","【mainAxisSize】: Main axis size 【MainAxisSize】"]},{"file":"node2_use.dart","name":"InheritedWidget Example","desc":["Below is an example of using the InheritedWidget component through a color counter project."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_zh-CN.json new file mode 100644 index 000000000..184e25f85 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"InheritedWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["ProxyWidget","Widget"],"desc":"高效地向下传播信息的小部件的基类。","fields":[],"id":346,"localName":"传承组件","lever":4,"family":5,"linkIds":[167,319,328,324,331],"nodes":[{"file":"node1_base.dart","name":"Column基本使用","desc":["【children】 : 组件列表 【List】","【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】","【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】","【textBaseline】 : 文字基线 【TextBaseline】","【verticalDirection】 : 竖直方向 【VerticalDirection】","【mainAxisSize】 : 主轴尺寸 【MainAxisSize】"]},{"file":"node2_use.dart","name":"InheritedWidget 案例","desc":["下面是通过一个颜色计数器项目展示 InheritedWidget 组件的使用。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Ink/Ink_en-US.json b/modules/widget_system/widgets/doc/widgets/Ink/Ink_en-US.json new file mode 100644 index 000000000..5480dfe94 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Ink/Ink_en-US.json @@ -0,0 +1 @@ +{"name":"Ink","path":"/src/material/ink_decoration.dart","parents":["StatefulWidget","Widget"],"desc":" A convenience widget for drawing images and other decorations on [Material] widgets, so that [InkWell] and [InkResponse] splashes will render over them.","fields":[{"name":"child","type":"Widget?","desc":"The [child] contained by the container."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Empty space to inscribe inside the [decoration]. The [child], if any, is placed inside this padding."},{"name":"decoration","type":"Decoration?","desc":"The decoration to paint on the nearest ancestor [Material] widget."},{"name":"width","type":"double?","desc":"A width to apply to the [decoration] and the [child]. The width includes any [padding]."},{"name":"height","type":"double?","desc":"A height to apply to the [decoration] and the [child]. The height includes any [padding]."}],"id":152,"lever":3,"family":1,"linkIds":[149,150],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Ink","desc":["【child】: Child component 【Widget】","【padding】: Padding 【EdgeInsetsGeometry】","【decoration】: Decoration 【Decoration】","【width】: Width 【double】","【height】: Height 【double】","【color】: Color 【Color】"]},{"file":"node2_image.dart","name":"Ink.image Ripple with Image","desc":["The properties are consistent with the Image component, see the Image component for details"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Ink/Ink_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Ink/Ink_zh-CN.json new file mode 100644 index 000000000..d40f285d9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Ink/Ink_zh-CN.json @@ -0,0 +1 @@ +{"name":"Ink","path":"/src/material/ink_decoration.dart","parents":["StatefulWidget","Widget"],"desc":"在 [Material] 小部件上绘制图像和其他装饰的便利小部件,以便 [InkWell] 和 [InkResponse] 飞溅将在它们上方渲染。","fields":[{"name":"child","type":"Widget?","desc":"容器包含的 [child]。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在 [decoration] 内刻画的空白空间。[child](如果有)放置在此内边距内。"},{"name":"decoration","type":"Decoration?","desc":"在最近的祖先 [Material] 小部件上绘制的装饰。"},{"name":"width","type":"double?","desc":"应用于 [decoration] 和 [child] 的宽度。宽度包括任何 [padding]。"},{"name":"height","type":"double?","desc":"应用于 [decoration] 和 [child] 的高度。高度包括任何 [padding]。"}],"id":152,"localName":"水波","lever":3,"family":1,"linkIds":[149,150],"nodes":[{"file":"node1_base.dart","name":"Ink基本使用","desc":["【child】 : 子组件 【Widget】","【padding】 : 内边距 【EdgeInsetsGeometry】","【decoration】 : 装饰 【Decoration】","【width】 : 宽 【double】","【height】 : 高 【double】","【color】 : 颜色 【Color】"]},{"file":"node2_image.dart","name":"Ink.image图片水波纹","desc":["其中属性与Image组件一致,详见Image组件"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_en-US.json b/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_en-US.json new file mode 100644 index 000000000..48120abad --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_en-US.json @@ -0,0 +1 @@ +{"name":"InkResponse","path":"/src/material/ink_well.dart","parents":["StatelessWidget","Widget"],"desc":" An area of a [Material] that responds to touch. Has a configurable shape and can be configured to clip splashes that extend outside its bounds or not.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"onTap","type":"GestureTapCallback?","desc":"Called when the user taps this part of the material."},{"name":"onTapDown","type":"GestureTapDownCallback?","desc":"Called when the user taps down this part of the material."},{"name":"onTapUp","type":"GestureTapUpCallback?","desc":"Called when the user releases a tap that was started on this part of the material. [onTap] is called immediately after."},{"name":"onTapCancel","type":"GestureTapCallback?","desc":"Called when the user cancels a tap that was started on this part of the material."},{"name":"onDoubleTap","type":"GestureTapCallback?","desc":"Called when the user double taps this part of the material."},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"Called when the user long-presses on this part of the material."},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"Called when the user taps this part of the material with a secondary button."},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"Called when the user taps down on this part of the material with a secondary button."},{"name":"onSecondaryTapUp","type":"GestureTapUpCallback?","desc":"Called when the user releases a secondary button tap that was started on this part of the material. [onSecondaryTap] is called immediately after."},{"name":"onSecondaryTapCancel","type":"GestureTapCallback?","desc":"Called when the user cancels a secondary button tap that was started on this part of the material."},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"Called when this part of the material either becomes highlighted or stops being highlighted."},{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the ink response area."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"containedInkWell","type":"bool","required":true,"desc":"Whether this ink response should be clipped its bounds."},{"name":"highlightShape","type":"BoxShape","required":true,"desc":"The shape (e.g., circle, rectangle) to use for the highlight drawn around this part of the material when pressed, hovered over, or focused."},{"name":"radius","type":"double?","desc":"The radius of the ink splash."},{"name":"borderRadius","type":"BorderRadius?","desc":"The border radius of the containing rectangle. This is effective only if [highlightShape] is [BoxShape.rectangle]."},{"name":"customBorder","type":"ShapeBorder?","desc":"The custom clip border."},{"name":"focusColor","type":"Color?","desc":"The color of the ink response when the parent widget is focused. If this property is null then the focus color of the theme, [ThemeData.focusColor], will be used."},{"name":"hoverColor","type":"Color?","desc":"The color of the ink response when a pointer is hovering over it. If this property is null then the hover color of the theme, [ThemeData.hoverColor], will be used."},{"name":"highlightColor","type":"Color?","desc":"The highlight color of the ink response when pressed. If this property is null then the highlight color of the theme, [ThemeData.highlightColor], will be used."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"Defines the ink response focus, hover, and splash colors."},{"name":"splashColor","type":"Color?","desc":"The splash color of the ink response. If this property is null then the splash color of the theme, [ThemeData.splashColor], will be used."},{"name":"splashFactory","type":"InteractiveInkFeatureFactory?","desc":"Defines the appearance of the splash."},{"name":"enableFeedback","type":"bool","required":true,"desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"Whether to exclude the gestures introduced by this widget from the semantics tree."},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@template flutter.material.inkwell.onFocusChange} Handler called when the focus changes."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"canRequestFocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.canRequestFocus}"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@template flutter.material.inkwell.statesController} Represents the interactive \"state\" of this widget in terms of a set of [WidgetState]s, like [WidgetState.pressed] and [WidgetState.focused]."},{"name":"hoverDuration","type":"Duration?","desc":"The duration of the animation that animates the hover effect."}],"id":149,"lever":1,"family":1,"linkIds":[150,152],"nodes":[{"file":"node1_base.dart","name":"Basic Events of InkResponse","desc":["【child】 : Child component 【Widget】","【onTap】 : Click event 【Function()】","【onDoubleTap】 : Double-click event 【Function()】","【onTapCancel】 : Click cancel 【Function()】","【onLongPress】 : Long press event 【Function()】"]},{"file":"node2_color.dart","name":"Other Properties of InkResponse","desc":["【child】 : Child component 【Widget】","【onHighlightChanged】 : Highlight change callback 【Function(bool)】","【highlightColor】 : Highlight color 【Color】","【splashColor】 : Ripple color 【Color】","【radius】 : Ripple radius 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_zh-CN.json new file mode 100644 index 000000000..f71d48980 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_zh-CN.json @@ -0,0 +1 @@ +{"name":"InkResponse","path":"/src/material/ink_well.dart","parents":["StatelessWidget","Widget"],"desc":"响应触摸的 [Material] 区域。具有可配置的形状,可以配置为裁剪延伸到其边界之外的飞溅或不裁剪。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"onTap","type":"GestureTapCallback?","desc":"用户点击 material 的此部分时调用。"},{"name":"onTapDown","type":"GestureTapDownCallback?","desc":"用户点击 material 的此部分时调用。"},{"name":"onTapUp","type":"GestureTapUpCallback?","desc":"用户释放在 material 的此部分开始的点击时调用。[onTap] 立即在之后调用。"},{"name":"onTapCancel","type":"GestureTapCallback?","desc":"用户取消在 material 的此部分开始的点击时调用。"},{"name":"onDoubleTap","type":"GestureTapCallback?","desc":"用户双击 material 的此部分时调用。"},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"用户长按 material 的此部分时调用。"},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"用户用辅助按钮点击 material 的此部分时调用。"},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"用户用辅助按钮点击 material 的此部分时调用。"},{"name":"onSecondaryTapUp","type":"GestureTapUpCallback?","desc":"用户释放在 material 的此部分开始的辅助按钮点击时调用。[onSecondaryTap] 立即在之后调用。"},{"name":"onSecondaryTapCancel","type":"GestureTapCallback?","desc":"用户取消在 material 的此部分开始的辅助按钮点击时调用。"},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"当 material 的此部分变为高亮或停止高亮时调用。"},{"name":"onHover","type":"ValueChanged?","desc":"指针进入或退出墨水响应区域时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"containedInkWell","type":"bool","required":true,"desc":"此墨水响应是否应裁剪其边界。"},{"name":"highlightShape","type":"BoxShape","required":true,"desc":"按下、悬停或聚焦时在 material 的此部分周围绘制的高亮的形状(例如,圆形、矩形)。"},{"name":"radius","type":"double?","desc":"墨水飞溅的半径。"},{"name":"borderRadius","type":"BorderRadius?","desc":"包含矩形的边框半径。仅当 [highlightShape] 为 [BoxShape.rectangle] 时有效。"},{"name":"customBorder","type":"ShapeBorder?","desc":"自定义裁剪边框。"},{"name":"focusColor","type":"Color?","desc":"父小部件聚焦时墨水响应的颜色。如果此属性为 null,则将使用主题的焦点颜色 [ThemeData.focusColor]。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在其上时墨水响应的颜色。如果此属性为 null,则将使用主题的悬停颜色 [ThemeData.hoverColor]。"},{"name":"highlightColor","type":"Color?","desc":"按下时墨水响应的高亮颜色。如果此属性为 null,则将使用主题的高亮颜色 [ThemeData.highlightColor]。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"定义墨水响应焦点、悬停和飞溅颜色。"},{"name":"splashColor","type":"Color?","desc":"墨水响应的飞溅颜色。如果此属性为 null,则将使用主题的飞溅颜色 [ThemeData.splashColor]。"},{"name":"splashFactory","type":"InteractiveInkFeatureFactory?","desc":"定义飞溅的外观。"},{"name":"enableFeedback","type":"bool","required":true,"desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"是否从语义树中排除此小部件引入的手势。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@template flutter.material.inkwell.onFocusChange} 焦点更改时调用的处理程序。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"canRequestFocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.canRequestFocus}"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@template flutter.material.inkwell.statesController} 表示此小部件在一组 [WidgetState] 方面的交互"},{"name":"hoverDuration","type":"Duration?","desc":"悬停效果动画的持续时间。"}],"id":149,"localName":"水波纹响应","lever":1,"family":1,"linkIds":[150,152],"nodes":[{"file":"node1_base.dart","name":"InkResponse基本事件","desc":["【child】 : 子组件 【Widget】","【onTap】 : 点击事件 【Function()】","【onDoubleTap】 : 双击事件 【Function()】","【onTapCancel】 : 点击取消 【Function()】","【onLongPress】 : 长按事件 【Function()】"]},{"file":"node2_color.dart","name":"InkResponse其他属性","desc":["【child】 : 子组件 【Widget】","【onHighlightChanged】 : 高亮变化回调 【Function(bool)】","【highlightColor】 : 高亮色 【Color】","【splashColor】 : 水波纹色 【Color】","【radius】 : 水波半径 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_en-US.json b/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_en-US.json new file mode 100644 index 000000000..d21dd3b42 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_en-US.json @@ -0,0 +1 @@ +{"name":"InkWell","path":"/src/material/ink_well.dart","parents":["InkResponse","StatelessWidget","Widget"],"desc":" A rectangular area of a [Material] that responds to touch.","fields":[],"id":150,"lever":4,"family":1,"linkIds":[149,152],"nodes":[{"file":"node1_base.dart","name":"InkWell Basic Events","desc":["【child】: Child component 【Widget】","【onTap】: Tap event 【Function()】","【onDoubleTap】: Double tap event 【Function()】","【onTapCancel】: Tap cancel 【Function()】","【onLongPress】: Long press event 【Function()】"]},{"file":"node2_color.dart","name":"InkWell Other Properties","desc":["【child】: Child component 【Widget】","【onHighlightChanged】: Highlight change callback 【Function(bool)】","【highlightColor】: Highlight color 【Color】","【splashColor】: Ripple color 【Color】","【radius】: Ripple radius 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_zh-CN.json new file mode 100644 index 000000000..3fdfbdd42 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_zh-CN.json @@ -0,0 +1 @@ +{"name":"InkWell","path":"/src/material/ink_well.dart","parents":["InkResponse","StatelessWidget","Widget"],"desc":"响应触摸的 [Material] 矩形区域。","fields":[],"id":150,"localName":"水波纹","lever":4,"family":1,"linkIds":[149,152],"nodes":[{"file":"node1_base.dart","name":"InkWell基本事件","desc":["【child】 : 子组件 【Widget】","【onTap】 : 点击事件 【Function()】","【onDoubleTap】 : 双击事件 【Function()】","【onTapCancel】 : 点击取消 【Function()】","【onLongPress】 : 长按事件 【Function()】"]},{"file":"node2_color.dart","name":"InkWell其他属性","desc":["【child】 : 子组件 【Widget】","【onHighlightChanged】 : 高亮变化回调 【Function(bool)】","【highlightColor】 : 高亮色 【Color】","【splashColor】 : 水波纹色 【Color】","【radius】 : 水波半径 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_en-US.json b/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_en-US.json new file mode 100644 index 000000000..81c98c69c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_en-US.json @@ -0,0 +1 @@ +{"name":"InputChip","path":"/src/material/input_chip.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design input chip.","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"selected","type":"bool","required":true},{"name":"isEnabled","type":"bool","required":true},{"name":"onSelected","type":"ValueChanged?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":14,"lever":4,"family":0,"linkIds":[11,12,13,15,153],"nodes":[{"file":"node1_base.dart","name":"Can accept click and delete events","desc":["【onPressed】: Click event 【Function()】","【onDeleted】: Delete event 【Function()】"]},{"file":"node2_select.dart","name":"Can accept select event","desc":["【selected】: Whether selected 【bool】","【onSelected】: Select event 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_zh-CN.json new file mode 100644 index 000000000..d7ccd906d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_zh-CN.json @@ -0,0 +1 @@ +{"name":"InputChip","path":"/src/material/input_chip.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 输入芯片。","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"selected","type":"bool","required":true},{"name":"isEnabled","type":"bool","required":true},{"name":"onSelected","type":"ValueChanged?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":14,"localName":"综合小条","lever":4,"family":0,"linkIds":[11,12,13,15,153],"nodes":[{"file":"node1_base.dart","name":"可以接受点击、删除事件","desc":["【onPressed】: 点击事件 【Function()】","【onDeleted】: 删除事件 【Function()】"]},{"file":"node2_select.dart","name":"可以接受选中事件","desc":["【selected】: 是否选中 【bool】","【onSelected】: 选中事件 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_en-US.json b/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_en-US.json new file mode 100644 index 000000000..24707acf2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_en-US.json @@ -0,0 +1 @@ +{"name":"InputDatePickerFormField","path":"/src/material/input_date_picker_form_field.dart","parents":["StatefulWidget","Widget"],"desc":" A [TextFormField] configured to accept and validate a date entered by a user.","fields":[{"name":"initialDate","type":"DateTime?","desc":"If provided, it will be used as the default value of the field."},{"name":"firstDate","type":"DateTime","required":true,"desc":"The earliest allowable [DateTime] that the user can input."},{"name":"lastDate","type":"DateTime","required":true,"desc":"The latest allowable [DateTime] that the user can input."},{"name":"onDateSubmitted","type":"ValueChanged?","desc":"An optional method to call when the user indicates they are done editing the text in the field. Will only be called if the input represents a valid [DateTime]."},{"name":"onDateSaved","type":"ValueChanged?","desc":"An optional method to call with the final date when the form is saved via [FormState.save]. Will only be called if the input represents a valid [DateTime]."},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"Function to provide full control over which [DateTime] can be selected."},{"name":"errorFormatText","type":"String?","desc":"The error text displayed if the entered date is not in the correct format."},{"name":"errorInvalidText","type":"String?","desc":"The error text displayed if the date is not valid."},{"name":"fieldHintText","type":"String?","desc":"The hint text displayed in the [TextField]."},{"name":"fieldLabelText","type":"String?","desc":"The label text displayed in the [TextField]."},{"name":"keyboardType","type":"TextInputType?","desc":"The keyboard type of the [TextField]."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"acceptEmptyDate","type":"bool","required":true,"desc":"Determines if an empty date would show [errorFormatText] or not."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":434,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_zh-CN.json new file mode 100644 index 000000000..6d3757e0d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_zh-CN.json @@ -0,0 +1 @@ +{"name":"InputDatePickerFormField","path":"/src/material/input_date_picker_form_field.dart","parents":["StatefulWidget","Widget"],"desc":"配置为接受和验证用户输入日期的 [TextFormField]。","fields":[{"name":"initialDate","type":"DateTime?","desc":"如果提供,将用作字段的默认值。"},{"name":"firstDate","type":"DateTime","required":true,"desc":"用户可以输入的最早允许的 [DateTime]。"},{"name":"lastDate","type":"DateTime","required":true,"desc":"用户可以输入的最晚允许的 [DateTime]。"},{"name":"onDateSubmitted","type":"ValueChanged?","desc":"当用户指示他们已完成编辑字段中的文本时调用的可选方法。仅当输入表示有效的 [DateTime] 时才会调用。"},{"name":"onDateSaved","type":"ValueChanged?","desc":"通过 [FormState.save] 保存表单时使用最终日期调用的可选方法。仅当输入表示有效的 [DateTime] 时才会调用。"},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"提供对可选择哪个 [DateTime] 的完全控制的函数。"},{"name":"errorFormatText","type":"String?","desc":"如果输入的日期格式不正确,显示的错误文本。"},{"name":"errorInvalidText","type":"String?","desc":"如果日期无效,显示的错误文本。"},{"name":"fieldHintText","type":"String?","desc":"在 [TextField] 中显示的提示文本。"},{"name":"fieldLabelText","type":"String?","desc":"在 [TextField] 中显示的标签文本。"},{"name":"keyboardType","type":"TextInputType?","desc":"[TextField] 的键盘类型。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"acceptEmptyDate","type":"bool","required":true,"desc":"确定空日期是否会显示 [errorFormatText]。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":434,"localName":"InputDatePickerFormField","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_en-US.json b/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_en-US.json new file mode 100644 index 000000000..9668cc598 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_en-US.json @@ -0,0 +1 @@ +{"name":"InputDecorator","path":"/src/material/input_decorator.dart","parents":["StatefulWidget","Widget"],"desc":" Defines the appearance of a Material Design text field.","fields":[{"name":"decoration","type":"InputDecoration","required":true,"desc":"The text and styles to use when decorating the child."},{"name":"baseStyle","type":"TextStyle?","desc":"The style on which to base the label, hint, counter, and error styles if the [decoration] does not provide explicit styles."},{"name":"textAlign","type":"TextAlign?","desc":"How the text in the decoration should be aligned horizontally."},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@template flutter.material.InputDecorator.textAlignVertical} How the text should be aligned vertically."},{"name":"isFocused","type":"bool","required":true,"desc":"Whether the input field has focus."},{"name":"isHovering","type":"bool","required":true,"desc":"Whether the input field is being hovered over by a mouse pointer."},{"name":"expands","type":"bool","required":true,"desc":"If true, the height of the input field will be as large as possible."},{"name":"isEmpty","type":"bool","required":true,"desc":"Whether the input field is empty."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":231,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of InputDecorator","desc":["【decoration】: Decoration object 【InputDecoration】","【textAlign】: Text alignment 【TextAlign】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_zh-CN.json new file mode 100644 index 000000000..fee4e3c8d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_zh-CN.json @@ -0,0 +1 @@ +{"name":"InputDecorator","path":"/src/material/input_decorator.dart","parents":["StatefulWidget","Widget"],"desc":"定义 Material Design 文本字段的外观。","fields":[{"name":"decoration","type":"InputDecoration","required":true,"desc":"装饰子项时使用的文本和样式。"},{"name":"baseStyle","type":"TextStyle?","desc":"如果 [decoration] 不提供显式样式,则作为标签、提示、计数器和错误样式基础的样式。"},{"name":"textAlign","type":"TextAlign?","desc":"装饰中的文本应如何水平对齐。"},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@template flutter.material.InputDecorator.textAlignVertical} 文本应如何垂直对齐。"},{"name":"isFocused","type":"bool","required":true,"desc":"输入字段是否具有焦点。"},{"name":"isHovering","type":"bool","required":true,"desc":"输入字段是否被鼠标指针悬停。"},{"name":"expands","type":"bool","required":true,"desc":"如果为 true,输入字段的高度将尽可能大。"},{"name":"isEmpty","type":"bool","required":true,"desc":"输入字段是否为空。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":231,"localName":"输入装饰","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"InputDecorator基本使用","desc":["【decoration】 : 装饰对象 【InputDecoration】","【textAlign】 : 文字对齐方式 【TextAlign】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_en-US.json b/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_en-US.json new file mode 100644 index 000000000..8d98bd925 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_en-US.json @@ -0,0 +1 @@ +{"name":"InspectorButton","path":"/src/widgets/widget_inspector.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":" An abstract base class for creating Material or Cupertino-styled inspector buttons.","fields":[{"name":"onPressed","type":"VoidCallback","required":true,"desc":"The callback that is called when the button is tapped."},{"name":"semanticLabel","type":"String","required":true,"desc":"The semantic label for the button, used for accessibility."},{"name":"icon","type":"IconData","required":true,"desc":"The icon to display within the button."},{"name":"buttonKey","type":"GlobalKey?","desc":"An optional key to identify the button widget."},{"name":"variant","type":"InspectorButtonVariant","required":true,"desc":"The visual and behavioral variant of the button."},{"name":"toggledOn","type":"bool?","desc":"For [InspectorButtonVariant.toggle] buttons, this determines if the button is currently in the \"on\" (true) or \"off\" (false) state."}],"id":435,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_zh-CN.json new file mode 100644 index 000000000..2a9a49fc6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"InspectorButton","path":"/src/widgets/widget_inspector.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":"用于创建 Material 或 Cupertino 样式检查器按钮的抽象基类。","fields":[{"name":"onPressed","type":"VoidCallback","required":true,"desc":"点击按钮时调用的回调。"},{"name":"semanticLabel","type":"String","required":true,"desc":"按钮的语义标签,用于辅助功能。"},{"name":"icon","type":"IconData","required":true,"desc":"在按钮内显示的图标。"},{"name":"buttonKey","type":"GlobalKey?","desc":"用于标识按钮小部件的可选键。"},{"name":"variant","type":"InspectorButtonVariant","required":true,"desc":"按钮的视觉和行为变体。"},{"name":"toggledOn","type":"bool?","desc":"对于 [InspectorButtonVariant.toggle] 按钮,这确定按钮当前是处于"}],"id":435,"localName":"InspectorButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_en-US.json b/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_en-US.json new file mode 100644 index 000000000..029b4829d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_en-US.json @@ -0,0 +1 @@ +{"name":"InteractiveViewer","path":"/src/widgets/interactive_viewer.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that enables pan and zoom interactions with its child.","fields":[{"name":"alignment","type":"Alignment?","desc":"The alignment of the child's origin, relative to the size of the box."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"If set to [Clip.none], the child may extend beyond the size of the InteractiveViewer, but it will not receive gestures in these areas. Be sure that the InteractiveViewer is the desired size when using [Clip.none]."},{"name":"panAxis","type":"PanAxis","required":true,"desc":"When set to [PanAxis.aligned], panning is only allowed in the horizontal axis or the vertical axis, diagonal panning is not allowed."},{"name":"boundaryMargin","type":"EdgeInsets","required":true,"desc":"A margin for the visible boundaries of the child."},{"name":"builder","type":"InteractiveViewerWidgetBuilder?","desc":"Builds the child of this widget."},{"name":"child","type":"Widget?","desc":"The child [Widget] that is transformed by InteractiveViewer."},{"name":"constrained","type":"bool","required":true,"desc":"Whether the normal size constraints at this point in the widget tree are applied to the child."},{"name":"panEnabled","type":"bool","required":true,"desc":"If false, the user will be prevented from panning."},{"name":"scaleEnabled","type":"bool","required":true,"desc":"If false, the user will be prevented from scaling."},{"name":"trackpadScrollCausesScale","type":"bool","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollCausesScale}"},{"name":"scaleFactor","type":"double","required":true,"desc":"Determines the amount of scale to be performed per pointer scroll."},{"name":"maxScale","type":"double","required":true,"desc":"The maximum allowed scale."},{"name":"minScale","type":"double","required":true,"desc":"The minimum allowed scale."},{"name":"interactionEndFrictionCoefficient","type":"double","required":true,"desc":"Changes the deceleration behavior after a gesture."},{"name":"onInteractionEnd","type":"GestureScaleEndCallback?","desc":"Called when the user ends a pan or scale gesture on the widget."},{"name":"onInteractionStart","type":"GestureScaleStartCallback?","desc":"Called when the user begins a pan or scale gesture on the widget."},{"name":"onInteractionUpdate","type":"GestureScaleUpdateCallback?","desc":"Called when the user updates a pan or scale gesture on the widget."},{"name":"transformationController","type":"TransformationController?","desc":"A [TransformationController] for the transformation performed on the child."}],"id":351,"lever":4,"family":1,"linkIds":[147,146,78],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of InteractiveViewer","desc":["【alignPanAxis】: Drag along the axis 【bool】","【boundaryMargin】: Boundary margin 【EdgeInsets】","【panEnabled】: Whether panning is enabled 【bool】","【scaleEnabled】: Whether scaling is enabled 【bool】","【maxScale】: Maximum zoom scale 【double】","【minScale】: Minimum zoom scale 【double】","【onInteractionEnd】: Interaction end callback 【GestureScaleEndCallback】","【onInteractionStart】: Interaction start callback 【GestureScaleStartCallback】","【onInteractionUpdate】: Interaction update callback 【GestureScaleUpdateCallback】","【child】: Cursor color 【Widget】"]},{"file":"node2_constrained.dart","name":"Constrained Property Test","desc":["【constrained】: Constrained 【bool】"]},{"file":"node3_controller.dart","name":"Usage of Transformation Controller","desc":["【transformationController】: Transformation controller 【TransformationController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_zh-CN.json new file mode 100644 index 000000000..1b867f28b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_zh-CN.json @@ -0,0 +1 @@ +{"name":"InteractiveViewer","path":"/src/widgets/interactive_viewer.dart","parents":["StatefulWidget","Widget"],"desc":"启用与其子项的平移和缩放交互的小部件。","fields":[{"name":"alignment","type":"Alignment?","desc":"子项原点相对于框大小的对齐方式。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"如果设置为 [Clip.none],子项可能会超出 InteractiveViewer 的大小,但在这些区域中不会接收手势。使用 [Clip.none] 时确保 InteractiveViewer 是所需的大小。"},{"name":"panAxis","type":"PanAxis","required":true,"desc":"当设置为 [PanAxis.aligned] 时,平移仅允许在水平轴或垂直轴上,不允许对角线平移。"},{"name":"boundaryMargin","type":"EdgeInsets","required":true,"desc":"子项可见边界的边距。"},{"name":"builder","type":"InteractiveViewerWidgetBuilder?","desc":"构建此小部件的子项。"},{"name":"child","type":"Widget?","desc":"由 InteractiveViewer 变换的子 [Widget]。"},{"name":"constrained","type":"bool","required":true,"desc":"小部件树中此点的正常大小约束是否应用于子项。"},{"name":"panEnabled","type":"bool","required":true,"desc":"如果为 false,将阻止用户平移。"},{"name":"scaleEnabled","type":"bool","required":true,"desc":"如果为 false,将阻止用户缩放。"},{"name":"trackpadScrollCausesScale","type":"bool","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollCausesScale}"},{"name":"scaleFactor","type":"double","required":true,"desc":"确定每次指针滚动要执行的缩放量。"},{"name":"maxScale","type":"double","required":true,"desc":"允许的最大缩放。"},{"name":"minScale","type":"double","required":true,"desc":"允许的最小缩放。"},{"name":"interactionEndFrictionCoefficient","type":"double","required":true,"desc":"更改手势后的减速行为。"},{"name":"onInteractionEnd","type":"GestureScaleEndCallback?","desc":"用户在小部件上结束平移或缩放手势时调用。"},{"name":"onInteractionStart","type":"GestureScaleStartCallback?","desc":"用户在小部件上开始平移或缩放手势时调用。"},{"name":"onInteractionUpdate","type":"GestureScaleUpdateCallback?","desc":"用户在小部件上更新平移或缩放手势时调用。"},{"name":"transformationController","type":"TransformationController?","desc":"对子项执行变换的 [TransformationController]。"}],"id":351,"localName":"交互视图","lever":4,"family":1,"linkIds":[147,146,78],"nodes":[{"file":"node1_base.dart","name":"InteractiveViewer基本使用","desc":["【alignPanAxis】 : 沿轴拖动 【bool】","【boundaryMargin】 : 边界边距 【EdgeInsets】","【panEnabled】 : 是否可平移 【bool】","【scaleEnabled】 : 是否可缩放 【bool】","【maxScale】 : 最大放大倍数 【double】","【minScale】 : 最小缩小倍数 【double】","【onInteractionEnd】 : 交互结束回调 【GestureScaleEndCallback】","【onInteractionStart】 : 交互开始回调 【GestureScaleStartCallback】","【onInteractionUpdate】 : 交互更新回调 【GestureScaleUpdateCallback】","【child】 : 游标颜色 【Widget】"]},{"file":"node2_constrained.dart","name":"constrained属性测试","desc":["【constrained】 : 受约束的 【bool】"]},{"file":"node3_controller.dart","name":"变换控制器的使用","desc":["【transformationController】 : 变换控制器 【TransformationController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_en-US.json b/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_en-US.json new file mode 100644 index 000000000..3d706cf08 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_en-US.json @@ -0,0 +1 @@ +{"name":"IntrinsicHeight","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that sizes its child to the child's intrinsic height.","fields":[],"id":298,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of IntrinsicHeight","desc":["【child】: Child component 【Widget】","As shown in the example: the height on the left can vary, the height in the middle is fixed, and the height on the right takes the highest value of the previous two."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_zh-CN.json new file mode 100644 index 000000000..36422bd4f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_zh-CN.json @@ -0,0 +1 @@ +{"name":"IntrinsicHeight","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项大小调整为子项固有高度的小部件。","fields":[],"id":298,"localName":"固有高","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IntrinsicHeight基本使用","desc":["【child】 : 子组件 【Widget】","如示例:左侧高可变动,中间高固定,右侧高取前两者的最高值。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_en-US.json b/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_en-US.json new file mode 100644 index 000000000..a942b2377 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_en-US.json @@ -0,0 +1 @@ +{"name":"IntrinsicWidth","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that sizes its child to the child's maximum intrinsic width.","fields":[{"name":"stepWidth","type":"double?","desc":"If non-null, force the child's width to be a multiple of this value."},{"name":"stepHeight","type":"double?","desc":"If non-null, force the child's height to be a multiple of this value."}],"id":297,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of IntrinsicWidth","desc":["【child】: Child component 【Widget】","As shown in the example: the width above can be changed, the width in the middle is fixed, and the width below takes the highest value of the former two."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_zh-CN.json new file mode 100644 index 000000000..aa0f3c4b0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_zh-CN.json @@ -0,0 +1 @@ +{"name":"IntrinsicWidth","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项大小调整为子项最大固有宽度的小部件。","fields":[{"name":"stepWidth","type":"double?","desc":"如果非空,强制子项的宽度为此值的倍数。"},{"name":"stepHeight","type":"double?","desc":"如果非空,强制子项的高度为此值的倍数。"}],"id":297,"localName":"固有宽","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IntrinsicWidth基本使用","desc":["【child】 : 子组件 【Widget】","如示例:上面宽可变动,中间宽固定,下面宽取前两者的最高值。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_en-US.json b/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_en-US.json new file mode 100644 index 000000000..414ab5c1f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_en-US.json @@ -0,0 +1 @@ +{"name":"KeepAlive","path":"/src/widgets/sliver.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":" Mark a child as needing to stay alive even when it's in a lazy list that would otherwise remove it.","fields":[{"name":"keepAlive","type":"bool","required":true,"desc":"Whether to keep the child alive."}],"id":316,"lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to KeepAlive","desc":["【child】: *Child component 【Widget】","【keepAlive】: *Whether to keep alive 【bool】","In the Flutter framework layer, it is only used in AutomaticKeepAlive. The source code also mentions that it is rarely used alone. This example demonstrates the state keep-alive of ListView items."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_zh-CN.json b/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_zh-CN.json new file mode 100644 index 000000000..294c2f261 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_zh-CN.json @@ -0,0 +1 @@ +{"name":"KeepAlive","path":"/src/widgets/sliver.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":"将子项标记为需要保持活动状态,即使它在否则会删除它的惰性列表中。","fields":[{"name":"keepAlive","type":"bool","required":true,"desc":"是否保持子项活动。"}],"id":316,"localName":"保活","lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"KeepAlive 介绍","desc":["【child】 : *子组件 【Widget】","【keepAlive】 : *是否保活 【bool】","在 flutter 框架层中,只用于 AutomaticKeepAlive 中,源码中也说很少单独使用它。该示例展示出 ListView 条目的状态保活。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_en-US.json b/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_en-US.json new file mode 100644 index 000000000..c82ba710f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_en-US.json @@ -0,0 +1 @@ +{"name":"KeyboardListener","path":"/src/widgets/keyboard_listener.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that calls a callback whenever the user presses or releases a key on a keyboard.","fields":[{"name":"focusNode","type":"FocusNode","required":true,"desc":"Controls whether this widget has keyboard focus."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"},{"name":"onKeyEvent","type":"ValueChanged?","desc":"Called whenever this widget receives a keyboard event."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":284,"lever":5,"family":1,"linkIds":[282,283],"nodes":[{"file":"node1.dart","name":"Listen to Keyboard Events","desc":["In the example, click the area to gain focus, and then press the keyboard to see the event trigger information.","【focusNode】 : Focus 【FocusNode】","【autofocus】 : Whether to auto-focus 【bool】","【includeSemantics】 : Include semantics 【bool】","【onKeyEvent】 : Key callback event 【ValueChanged?】","【child】 : Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_zh-CN.json new file mode 100644 index 000000000..b54a38cc0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_zh-CN.json @@ -0,0 +1 @@ +{"name":"KeyboardListener","path":"/src/widgets/keyboard_listener.dart","parents":["StatelessWidget","Widget"],"desc":"每当用户在键盘上按下或释放键时调用回调的小部件。","fields":[{"name":"focusNode","type":"FocusNode","required":true,"desc":"控制此小部件是否具有键盘焦点。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"},{"name":"onKeyEvent","type":"ValueChanged?","desc":"每当此小部件接收到键盘事件时调用。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":284,"localName":"键盘监听器","lever":5,"family":1,"linkIds":[282,283],"nodes":[{"file":"node1.dart","name":"监听键盘事件","desc":["案例中区域点击获取焦点,然后敲击键盘可以看到事件触发信息。","【focusNode】 : 焦点 【FocusNode】","【autofocus】 : 是否自动聚焦 【bool】","【includeSemantics】 : 包含语义 【bool】","【onKeyEvent】 : 按键回调事件 【ValueChanged?】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_en-US.json b/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_en-US.json new file mode 100644 index 000000000..d38e1b248 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_en-US.json @@ -0,0 +1 @@ +{"name":"KeyedSubtree","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that builds its child.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":436,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_zh-CN.json b/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_zh-CN.json new file mode 100644 index 000000000..e2b145a4d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_zh-CN.json @@ -0,0 +1 @@ +{"name":"KeyedSubtree","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":"构建其子项的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":436,"localName":"KeyedSubtree","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_en-US.json new file mode 100644 index 000000000..f56038d38 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_en-US.json @@ -0,0 +1 @@ +{"name":"LayoutBuilder","path":"/src/widgets/layout_builder.dart","parents":["ConstrainedLayoutBuilder","AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":" Builds a widget tree that can depend on the parent widget's size.","fields":[],"id":287,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Understanding of LayoutBuilder","desc":["【builder】: Layout Constructor 【LayoutWidgetBuilder】"]},{"file":"node2_fit.dart","name":"Adaptive Layout of LayoutBuilder","desc":["Can design component display based on the size of the area.","For example, displaying different layout structures in different width areas.","After all, it is not easy to obtain the parent component area in many places, and using LayoutBuilder will be very refreshing."]},{"file":"node3_expend.dart","name":"Expanded Use of LayoutBuilder","desc":["Use TextPainter to detect the number of lines of text to implement expand or collapse functionality."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_zh-CN.json new file mode 100644 index 000000000..96774189a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_zh-CN.json @@ -0,0 +1 @@ +{"name":"LayoutBuilder","path":"/src/widgets/layout_builder.dart","parents":["ConstrainedLayoutBuilder","AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":"构建可以依赖于父小部件大小的小部件树。","fields":[],"id":287,"localName":"布局构造器","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"LayoutBuilder基本认识","desc":["【builder】 : 布局构造器 【LayoutWidgetBuilder】"]},{"file":"node2_fit.dart","name":"LayoutBuilder的适应布局","desc":["可以根据区域的大小进行组件展示设计。\"","比如在不同的宽度区域显示不同的布局结构。\"","毕竟很多地方不容易获取父组件区域,使用LayoutBuilder就会非常爽口。"]},{"file":"node3_expend.dart","name":"LayoutBuilder的展开使用","desc":["使用TextPainter来检测文字的行数,实现展开或收起功能。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_en-US.json b/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_en-US.json new file mode 100644 index 000000000..d407ba313 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_en-US.json @@ -0,0 +1 @@ +{"name":"LayoutId","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":" Metadata for identifying children in a [CustomMultiChildLayout].","fields":[{"name":"id","type":"Object","required":true,"desc":"An object representing the identity of this child."}],"id":315,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"LayoutId Usage Scenarios","desc":["【id】 : Identifier id 【Object】","【child】 : Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_zh-CN.json new file mode 100644 index 000000000..3e93ccd5a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_zh-CN.json @@ -0,0 +1 @@ +{"name":"LayoutId","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":"用于在 [CustomMultiChildLayout] 中标识子项的元数据。","fields":[{"name":"id","type":"Object","required":true,"desc":"表示此子项身份的对象。"}],"id":315,"localName":"布局Id","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"LayoutId使用场景","desc":["【id】 : 标识id 【Object】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_en-US.json new file mode 100644 index 000000000..95edcedf8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_en-US.json @@ -0,0 +1 @@ +{"name":"LeafRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A superclass for [RenderObjectWidget]s that configure [RenderObject] subclasses that have no children.","fields":[],"id":437,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_zh-CN.json new file mode 100644 index 000000000..ce03dba47 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"LeafRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"配置没有子项的 [RenderObject] 子类的 [RenderObjectWidget] 的超类。","fields":[],"id":437,"localName":"LeafRenderObjectWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_en-US.json b/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_en-US.json new file mode 100644 index 000000000..3290afeb2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_en-US.json @@ -0,0 +1 @@ +{"name":"LicensePage","path":"/src/material/about.dart","parents":["StatefulWidget","Widget"],"desc":" A page that shows licenses for software used by the application.","fields":[{"name":"applicationName","type":"String?","desc":"The name of the application."},{"name":"applicationVersion","type":"String?","desc":"The version of this build of the application."},{"name":"applicationIcon","type":"Widget?","desc":"The icon to show below the application name."},{"name":"applicationLegalese","type":"String?","desc":"A string to show in small print."}],"id":145,"lever":1,"family":1,"linkIds":[130,193],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of LicensePage","desc":["【applicationIcon】: Top-left icon 【Widget】","【applicationVersion】: Version number 【String】","【applicationName】: Application name 【String】","【applicationLegalese】: Application legalese 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_zh-CN.json new file mode 100644 index 000000000..d26b89330 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_zh-CN.json @@ -0,0 +1 @@ +{"name":"LicensePage","path":"/src/material/about.dart","parents":["StatefulWidget","Widget"],"desc":"显示应用程序使用的软件许可证的页面。","fields":[{"name":"applicationName","type":"String?","desc":"应用程序的名称。"},{"name":"applicationVersion","type":"String?","desc":"此应用程序构建的版本。"},{"name":"applicationIcon","type":"Widget?","desc":"在应用程序名称下方显示的图标。"},{"name":"applicationLegalese","type":"String?","desc":"以小字体显示的字符串。"}],"id":145,"localName":"证书页","lever":1,"family":1,"linkIds":[130,193],"nodes":[{"file":"node1_base.dart","name":"LicensePage基本使用","desc":["【applicationIcon】 : 左上图标 【Widget】","【applicationVersion】 : 版本号 【String】","【applicationName】 : 应用名 【String】","【applicationLegalese】 : 应用律术 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_en-US.json new file mode 100644 index 000000000..723574f5f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_en-US.json @@ -0,0 +1 @@ +{"name":"LimitedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A box that limits its size only when it's unconstrained.","fields":[{"name":"maxWidth","type":"double","required":true,"desc":"The maximum width limit to apply in the absence of a [BoxConstraints.maxWidth] constraint."},{"name":"maxHeight","type":"double","required":true,"desc":"The maximum height limit to apply in the absence of a [BoxConstraints.maxHeight] constraint."}],"id":79,"lever":3,"family":2,"linkIds":[80],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of LimitedBox","desc":["【child】: Child component 【Widget】","【maxHeight】: Maximum height 【double】","【maxWidth】: Maximum width 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_zh-CN.json new file mode 100644 index 000000000..9aaedc3e6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_zh-CN.json @@ -0,0 +1 @@ +{"name":"LimitedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"仅在无约束时限制其大小的框。","fields":[{"name":"maxWidth","type":"double","required":true,"desc":"在没有 [BoxConstraints.maxWidth] 约束时应用的最大宽度限制。"},{"name":"maxHeight","type":"double","required":true,"desc":"在没有 [BoxConstraints.maxHeight] 约束时应用的最大高度限制。"}],"id":79,"localName":"限制盒","lever":3,"family":2,"linkIds":[80],"nodes":[{"file":"node1_base.dart","name":"LimitedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【maxHeight】 : 最大高 【double】","【maxWidth】 : 最大宽 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_en-US.json new file mode 100644 index 000000000..e600f5c2f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_en-US.json @@ -0,0 +1 @@ +{"name":"LinearProgressIndicator","path":"/src/material/progress_indicator.dart","parents":["ProgressIndicator","StatefulWidget","Widget"],"desc":" A Material Design linear progress indicator, also known as a progress bar.","fields":[{"name":"minHeight","type":"double?","desc":"{@template flutter.material.LinearProgressIndicator.minHeight} The minimum height of the line used to draw the linear indicator."},{"name":"borderRadius","type":"BorderRadiusGeometry?","desc":"The border radius of both the indicator and the track."},{"name":"stopIndicatorColor","type":"Color?","desc":"The color of the stop indicator."},{"name":"stopIndicatorRadius","type":"double?","desc":"The radius of the stop indicator."},{"name":"trackGap","type":"double?","desc":"The gap between the indicator and the track."},{"name":"year2023","type":"bool?","desc":"When true, the [LinearProgressIndicator] will use the 2023 Material Design 3 appearance."}],"id":47,"lever":3,"family":1,"linkIds":[46,48],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of LinearProgressIndicator","desc":["【value】: Progress 【double】","【backgroundColor】: Background Color 【Color】","【valueColor】: Progress Color 【Animation】"," It will keep looping when the value is null"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_zh-CN.json new file mode 100644 index 000000000..2ebfa9ea7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_zh-CN.json @@ -0,0 +1 @@ +{"name":"LinearProgressIndicator","path":"/src/material/progress_indicator.dart","parents":["ProgressIndicator","StatefulWidget","Widget"],"desc":"Material Design 线性进度指示器,也称为进度条。","fields":[{"name":"minHeight","type":"double?","desc":"{@template flutter.material.LinearProgressIndicator.minHeight} 用于绘制线性指示器的线的最小高度。"},{"name":"borderRadius","type":"BorderRadiusGeometry?","desc":"指示器和轨道的边框半径。"},{"name":"stopIndicatorColor","type":"Color?","desc":"停止指示器的颜色。"},{"name":"stopIndicatorRadius","type":"double?","desc":"停止指示器的半径。"},{"name":"trackGap","type":"double?","desc":"指示器和轨道之间的间隙。"},{"name":"year2023","type":"bool?","desc":"当为 true 时,[LinearProgressIndicator] 将使用 2023 Material Design 3 外观。"}],"id":47,"localName":"水平进度","lever":3,"family":1,"linkIds":[46,48],"nodes":[{"file":"node1_base.dart","name":"LinearProgressIndicator基本使用","desc":["【value】 : 进度 【double】","【backgroundColor】 : 背景色 【Color】","【valueColor】 : 进度颜色 【Animation】"," value为null时会不停循环"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_en-US.json b/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_en-US.json new file mode 100644 index 000000000..f6746c4a2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_en-US.json @@ -0,0 +1 @@ +{"name":"ListBody","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that arranges its children sequentially along a given axis, forcing them to the dimension of the parent in the other axis.","fields":[{"name":"mainAxis","type":"Axis","required":true,"desc":"The direction to use as the main axis."},{"name":"reverse","type":"bool","required":true,"desc":"Whether the list body positions children in the reading direction."}],"id":342,"lever":4,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ListView","desc":["【mainAxis】: Main axis direction 【Axis】","【reverse】: Whether to reverse 【bool】","【children】: Child component collection 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_zh-CN.json new file mode 100644 index 000000000..4c6d7ec4d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_zh-CN.json @@ -0,0 +1 @@ +{"name":"ListBody","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"沿给定轴顺序排列其子项的小部件,强制它们在另一个轴上符合父级的尺寸。","fields":[{"name":"mainAxis","type":"Axis","required":true,"desc":"用作主轴的方向。"},{"name":"reverse","type":"bool","required":true,"desc":"列表主体是否在阅读方向上定位子项。"}],"id":342,"localName":"列表体","lever":4,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ListView的基本使用","desc":["【mainAxis】 : 主轴方向 【Axis】","【reverse】: 是否反向 【bool】","【children】: 子组件集 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_en-US.json new file mode 100644 index 000000000..bdb71dbc9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_en-US.json @@ -0,0 +1 @@ +{"name":"ListTile","path":"/src/material/list_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A single fixed-height row that typically contains some text as well as a leading or trailing icon.","fields":[{"name":"leading","type":"Widget?","desc":"A widget to display before the title."},{"name":"title","type":"Widget?","desc":"The primary content of the list tile."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"trailing","type":"Widget?","desc":"A widget to display after the title."},{"name":"isThreeLine","type":"bool?","desc":"Whether this list tile is intended to display three lines of text."},{"name":"dense","type":"bool?","desc":"{@template flutter.material.ListTile.dense} Whether this list tile is part of a vertically dense list."},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the list tile's layout will be."},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.ListTile.shape} Defines the tile's [InkWell.customBorder] and [Ink.decoration] shape. {@endtemplate}"},{"name":"selectedColor","type":"Color?","desc":"Defines the color used for icons and text when the list tile is selected."},{"name":"iconColor","type":"Color?","desc":"Defines the default color for [leading] and [trailing] icons."},{"name":"textColor","type":"Color?","desc":"Defines the text color for the [title], [subtitle], [leading], and [trailing]."},{"name":"titleTextStyle","type":"TextStyle?","desc":"The text style for ListTile's [title]."},{"name":"subtitleTextStyle","type":"TextStyle?","desc":"The text style for ListTile's [subtitle]."},{"name":"leadingAndTrailingTextStyle","type":"TextStyle?","desc":"The text style for ListTile's [leading] and [trailing]."},{"name":"style","type":"ListTileStyle?","desc":"Defines the font used for the [title]."},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"The tile's internal padding."},{"name":"enabled","type":"bool","required":true,"desc":"Whether this list tile is interactive."},{"name":"onTap","type":"GestureTapCallback?","desc":"Called when the user taps this list tile."},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"Called when the user long-presses on this list tile."},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.ListTile.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"selected","type":"bool","required":true,"desc":"If this tile is also [enabled] then icons and text are rendered with the same color."},{"name":"focusColor","type":"Color?","desc":"The color for the tile's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"The color for the tile's [Material] when a pointer is hovering over it."},{"name":"splashColor","type":"Color?","desc":"The color of splash for the tile's [Material]."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tileColor","type":"Color?","desc":"{@template flutter.material.ListTile.tileColor} Defines the background color of `ListTile` when [selected] is false."},{"name":"selectedTileColor","type":"Color?","desc":"Defines the background color of `ListTile` when [selected] is true."},{"name":"enableFeedback","type":"bool?","desc":"{@template flutter.material.ListTile.enableFeedback} Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"horizontalTitleGap","type":"double?","desc":"The horizontal gap between the titles and the leading/trailing widgets."},{"name":"minVerticalPadding","type":"double?","desc":"The minimum padding on the top and bottom of the title and subtitle widgets."},{"name":"minLeadingWidth","type":"double?","desc":"The minimum width allocated for the [ListTile.leading] widget."},{"name":"minTileHeight","type":"double?","desc":"{@template flutter.material.ListTile.minTileHeight} The minimum height allocated for the [ListTile] widget."},{"name":"titleAlignment","type":"ListTileTitleAlignment?","desc":"Defines how [ListTile.leading] and [ListTile.trailing] are vertically aligned relative to the [ListTile]'s titles ([ListTile.title] and [ListTile.subtitle])."},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"Whether to add button:true to the semantics if onTap is provided. This is a temporary flag to help changing the behavior of ListTile onTap semantics."}],"id":16,"lever":3,"family":0,"linkIds":[162,334],"nodes":[{"file":"node1_base.dart","name":"The basic representation of ListTile is as follows","desc":["【leading】: Left component 【Widget】","【title】: Top middle component 【Widget】","【subtitle】: Bottom middle component 【Widget】","【trailing】: Trailing component 【Widget】","【contentPadding】: Inner padding 【EdgeInsetsGeometry】","【onLongPress】: Click event 【Function()】"]},{"file":"node2_select.dart","name":"ListTile selection effect and long press event","desc":["【selected】: Whether selected 【bool】","【onTap】: Click event 【Function()】"]},{"file":"node3_dense.dart","name":"Dense property of ListTile","desc":["【dense】: Whether dense 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_zh-CN.json new file mode 100644 index 000000000..d9776111b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_zh-CN.json @@ -0,0 +1 @@ +{"name":"ListTile","path":"/src/material/list_tile.dart","parents":["StatelessWidget","Widget"],"desc":"单个固定高度行,通常包含一些文本以及前导或尾随图标。","fields":[{"name":"leading","type":"Widget?","desc":"在标题前显示的小部件。"},{"name":"title","type":"Widget?","desc":"列表磁贴的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"trailing","type":"Widget?","desc":"在标题后显示的小部件。"},{"name":"isThreeLine","type":"bool?","desc":"此列表磁贴是否旨在显示三行文本。"},{"name":"dense","type":"bool?","desc":"{@template flutter.material.ListTile.dense} 此列表磁贴是否是垂直密集列表的一部分。"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义列表磁贴布局的紧凑程度。"},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.ListTile.shape} 定义磁贴的 [InkWell.customBorder] 和 [Ink.decoration] 形状。{@endtemplate}"},{"name":"selectedColor","type":"Color?","desc":"定义选择列表磁贴时用于图标和文本的颜色。"},{"name":"iconColor","type":"Color?","desc":"定义 [leading] 和 [trailing] 图标的默认颜色。"},{"name":"textColor","type":"Color?","desc":"定义 [title]、[subtitle]、[leading] 和 [trailing] 的文本颜色。"},{"name":"titleTextStyle","type":"TextStyle?","desc":"ListTile 的 [title] 的文本样式。"},{"name":"subtitleTextStyle","type":"TextStyle?","desc":"ListTile 的 [subtitle] 的文本样式。"},{"name":"leadingAndTrailingTextStyle","type":"TextStyle?","desc":"ListTile 的 [leading] 和 [trailing] 的文本样式。"},{"name":"style","type":"ListTileStyle?","desc":"定义 [title] 使用的字体。"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"磁贴的内部内边距。"},{"name":"enabled","type":"bool","required":true,"desc":"此列表磁贴是否可交互。"},{"name":"onTap","type":"GestureTapCallback?","desc":"用户点击此列表磁贴时调用。"},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"用户长按此列表磁贴时调用。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.ListTile.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"selected","type":"bool","required":true,"desc":"如果此磁贴也是 [enabled],则图标和文本以相同颜色渲染。"},{"name":"focusColor","type":"Color?","desc":"磁贴具有输入焦点时其 [Material] 的颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在磁贴上时其 [Material] 的颜色。"},{"name":"splashColor","type":"Color?","desc":"磁贴的 [Material] 的飞溅颜色。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tileColor","type":"Color?","desc":"{@template flutter.material.ListTile.tileColor} 当 [selected] 为 false 时定义 `ListTile` 的背景颜色。"},{"name":"selectedTileColor","type":"Color?","desc":"当 [selected] 为 true 时定义 `ListTile` 的背景颜色。"},{"name":"enableFeedback","type":"bool?","desc":"{@template flutter.material.ListTile.enableFeedback} 检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"horizontalTitleGap","type":"double?","desc":"标题和前导/尾随小部件之间的水平间隙。"},{"name":"minVerticalPadding","type":"double?","desc":"标题和副标题小部件顶部和底部的最小内边距。"},{"name":"minLeadingWidth","type":"double?","desc":"为 [ListTile.leading] 小部件分配的最小宽度。"},{"name":"minTileHeight","type":"double?","desc":"{@template flutter.material.ListTile.minTileHeight} 为 [ListTile] 小部件分配的最小高度。"},{"name":"titleAlignment","type":"ListTileTitleAlignment?","desc":"定义 [ListTile.leading] 和 [ListTile.trailing] 相对于 [ListTile] 的标题([ListTile.title] 和 [ListTile.subtitle])如何垂直对齐。"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"如果提供了 onTap,是否向语义添加 button:true。这是一个临时标志,用于帮助更改 ListTile onTap 语义的行为。"}],"id":16,"localName":"列表瓦片","lever":3,"family":0,"linkIds":[162,334],"nodes":[{"file":"node1_base.dart","name":"ListTile的基本表现如下","desc":["【leading】: 左侧组件 【Widget】","【title】: 中间上组件 【Widget】","【subtitle】: 中间下组件 【Widget】","【trailing】: 尾组件 【Widget】","【contentPadding】: 内边距 【EdgeInsetsGeometry】","【onLongPress】: 点击事件 【Function()】"]},{"file":"node2_select.dart","name":"ListTile选中效果和长按事件","desc":["【selected】: 是否选中 【bool】","【onTap】: 点击事件 【Function()】"]},{"file":"node3_dense.dart","name":"ListTile的密排属性","desc":["【dense】: 是否密排 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_en-US.json new file mode 100644 index 000000000..ee636e467 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_en-US.json @@ -0,0 +1 @@ +{"name":"ListTileTheme","path":"/src/material/list_tile_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines color and style parameters for [ListTile]s in this widget's subtree.","fields":[],"id":334,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ListTileTheme","desc":["You can specify the ListTileThemeData properties to set default styles for descendant ListTile components, such as styles, colors, decorations, margins, etc. You can also use ListTileTheme.of to get the theme properties of ListTile."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_zh-CN.json new file mode 100644 index 000000000..b0814aa12 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"ListTileTheme","path":"/src/material/list_tile_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [ListTile] 定义颜色和样式参数的继承小部件。","fields":[],"id":334,"localName":"ListTile主题","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ListTileTheme基本使用","desc":["可指定ListTileThemeData数据属性为【后代】的ListTile组件设置默认样式,如样式、颜色、装饰、边距等。也可以用ListTileTheme.of获取ListTile的主题属性。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListView/ListView_en-US.json b/modules/widget_system/widgets/doc/widgets/ListView/ListView_en-US.json new file mode 100644 index 000000000..4e84ed65d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ListView/ListView_en-US.json @@ -0,0 +1 @@ +{"name":"ListView","path":"/src/widgets/scroll_view.dart","parents":["BoxScrollView","ScrollView","StatelessWidget","Widget"],"desc":" A scrollable list of widgets arranged linearly.","fields":[{"name":"itemExtent","type":"double?","desc":"{@template flutter.widgets.list_view.itemExtent} If non-null, forces the children to have the given extent in the scroll direction."},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@template flutter.widgets.list_view.itemExtentBuilder} If non-null, forces the children to have the corresponding extent returned by the builder."},{"name":"prototypeItem","type":"Widget?","desc":"{@template flutter.widgets.list_view.prototypeItem} If non-null, forces the children to have the same extent as the given widget in the scroll direction."},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"A delegate that provides the children for the [ListView]."}],"id":162,"lever":5,"family":0,"linkIds":[16,163],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ListView","desc":["【children】 : List of child components 【List】","【padding】 : Padding 【EdgeInsetsGeometry】"]},{"file":"node2_direction.dart","name":"Horizontal Scrolling of ListView","desc":["【scrollDirection】 : Scroll direction 【Axis】","【reverse】 : Whether to scroll in reverse 【bool】","【shrinkWrap】 : Whether to wrap when unbounded 【bool】"]},{"file":"node3_builder.dart","name":"ListView.builder Construction","desc":["【itemCount】 : Number of items 【int】","【itemBuilder】 : Item builder 【IndexedWidgetBuilder】"]},{"file":"node4_separated.dart","name":"ListView.separated Construction","desc":["【separatorBuilder】 : Item builder 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListView/ListView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListView/ListView_zh-CN.json new file mode 100644 index 000000000..ea88e0865 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ListView/ListView_zh-CN.json @@ -0,0 +1 @@ +{"name":"ListView","path":"/src/widgets/scroll_view.dart","parents":["BoxScrollView","ScrollView","StatelessWidget","Widget"],"desc":"线性排列的可滚动小部件列表。","fields":[{"name":"itemExtent","type":"double?","desc":"{@template flutter.widgets.list_view.itemExtent} 如果非空,强制子项在滚动方向上具有给定的范围。"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@template flutter.widgets.list_view.itemExtentBuilder} 如果非空,强制子项具有构建器返回的相应范围。"},{"name":"prototypeItem","type":"Widget?","desc":"{@template flutter.widgets.list_view.prototypeItem} 如果非空,强制子项在滚动方向上与给定小部件具有相同的范围。"},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"为 [ListView] 提供子项的委托。"}],"id":162,"localName":"列表组件","lever":5,"family":0,"linkIds":[16,163],"nodes":[{"file":"node1_base.dart","name":"ListView基本使用","desc":["【children】 : 子组件列表 【List】","【padding】 : 内边距 【EdgeInsetsGeometry】"]},{"file":"node2_direction.dart","name":"ListView横向滑动","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向滑动 【bool】","【shrinkWrap】 : 无边界时是否包裹 【bool】"]},{"file":"node3_builder.dart","name":"ListView.builder构造","desc":["【itemCount】 : 条目个数 【int】","【itemBuilder】 : 条目构造器 【IndexedWidgetBuilder】"]},{"file":"node4_separated.dart","name":"ListView.separated构造","desc":["【separatorBuilder】 : 条目构造器 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_en-US.json new file mode 100644 index 000000000..b4da019f6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_en-US.json @@ -0,0 +1 @@ +{"name":"ListWheelScrollView","path":"/src/widgets/list_wheel_scroll_view.dart","parents":["StatefulWidget","Widget"],"desc":" A box in which children on a wheel can be scrolled.","fields":[{"name":"controller","type":"ScrollController?","desc":"Typically a [FixedExtentScrollController] used to control the current item."},{"name":"physics","type":"ScrollPhysics?","desc":"How the scroll view should respond to user input."},{"name":"diameterRatio","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.diameterRatio}"},{"name":"perspective","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.perspective}"},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"overAndUnderCenterOpacity","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.overAndUnderCenterOpacity}"},{"name":"itemExtent","type":"double","required":true,"desc":"Size of each child in the main axis."},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"onSelectedItemChanged","type":"ValueChanged?","desc":"On optional listener that's called when the centered item changes."},{"name":"renderChildrenOutsideViewport","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.renderChildrenOutsideViewport}"},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"A delegate that helps lazily instantiating child."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"}],"id":179,"lever":4,"family":1,"linkIds":[139,291],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ListWheelScrollView","desc":["【children】: List of child components 【List】","【perspective】: Perspective 【double】","【itemExtent】: Item height 【EdgeInsets】","【onSelectedItemChanged】: Selection callback 【ValueChanged】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_zh-CN.json new file mode 100644 index 000000000..454e131b5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_zh-CN.json @@ -0,0 +1 @@ +{"name":"ListWheelScrollView","path":"/src/widgets/list_wheel_scroll_view.dart","parents":["StatefulWidget","Widget"],"desc":"可以滚动轮子上子项的框。","fields":[{"name":"controller","type":"ScrollController?","desc":"通常是用于控制当前项目的 [FixedExtentScrollController]。"},{"name":"physics","type":"ScrollPhysics?","desc":"滚动视图应如何响应用户输入。"},{"name":"diameterRatio","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.diameterRatio}"},{"name":"perspective","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.perspective}"},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"overAndUnderCenterOpacity","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.overAndUnderCenterOpacity}"},{"name":"itemExtent","type":"double","required":true,"desc":"主轴中每个子项的大小。"},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"onSelectedItemChanged","type":"ValueChanged?","desc":"当居中项目更改时调用的可选监听器。"},{"name":"renderChildrenOutsideViewport","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.renderChildrenOutsideViewport}"},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"帮助惰性实例化子项的委托。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"}],"id":179,"localName":"滚轮列表","lever":4,"family":1,"linkIds":[139,291],"nodes":[{"file":"node1_base.dart","name":"ListWheelScrollView基本使用","desc":["【children】 : 子组件列表 【List】","【perspective】 : 透视度 【double】","【itemExtent】 : item高 【EdgeInsets】","【onSelectedItemChanged】 : 选中回调 【ValueChanged 】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_en-US.json b/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_en-US.json new file mode 100644 index 000000000..814549756 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_en-US.json @@ -0,0 +1 @@ +{"name":"ListWheelViewport","path":"/src/widgets/list_wheel_scroll_view.dart","parents":["RenderObjectWidget","Widget"],"desc":" A viewport showing a subset of children on a wheel.","fields":[{"name":"diameterRatio","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.diameterRatio}"},{"name":"perspective","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.perspective}"},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"overAndUnderCenterOpacity","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.overAndUnderCenterOpacity}"},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.itemExtent}"},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"renderChildrenOutsideViewport","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.renderChildrenOutsideViewport}"},{"name":"offset","type":"ViewportOffset","required":true,"desc":"[ViewportOffset] object describing the content that should be visible in the viewport."},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"A delegate that lazily instantiates children."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":291,"lever":4,"family":6,"linkIds":[179,139,137,253],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ListWheelViewport","desc":["【itemExtent】 : Axial item size 【double】","【offset】 : Viewport offset 【ViewportOffset】","【childDelegate】 : Child delegate constructor 【ListWheelChildDelegate】"]},{"file":"node2_perspective.dart","name":"Perspective Effect of ListWheelViewport","desc":["【perspective】 : Perspective parameter 【double】","【squeeze】 : Squeeze value 【double】","【diameterRatio】 : Diameter ratio 【double】"]},{"file":"node3_magnifier.dart","name":"Magnification of ListWheelViewport","desc":["【useMagnifier】 : Whether to magnify 【bool】","【magnification】 : Magnification ratio 【double】","【clipBehavior】 : Clip behavior 【Clip】","【renderChildrenOutsideViewport】 : Whether to render children outside the viewport 【bool】"]},{"file":"node4_opacity.dart","name":"Offset and Opacity","desc":["【offAxisFraction】 : Axis center offset ratio 【double】","【overAndUnderCenterOpacity】 : Opacity outside the magnifier 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_zh-CN.json new file mode 100644 index 000000000..dddda210e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_zh-CN.json @@ -0,0 +1 @@ +{"name":"ListWheelViewport","path":"/src/widgets/list_wheel_scroll_view.dart","parents":["RenderObjectWidget","Widget"],"desc":"显示轮子上子项子集的视口。","fields":[{"name":"diameterRatio","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.diameterRatio}"},{"name":"perspective","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.perspective}"},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"overAndUnderCenterOpacity","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.overAndUnderCenterOpacity}"},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.itemExtent}"},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"renderChildrenOutsideViewport","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.renderChildrenOutsideViewport}"},{"name":"offset","type":"ViewportOffset","required":true,"desc":"描述应在视口中可见的内容的 [ViewportOffset] 对象。"},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"惰性实例化子项的委托。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":291,"localName":"列表滚轮视口","lever":4,"family":6,"linkIds":[179,139,137,253],"nodes":[{"file":"node1_base.dart","name":"ListWheelViewport 简单使用","desc":["【itemExtent】 : 轴向item尺寸 【double】","【offset】 : 视口偏移 【ViewportOffset】","【childDelegate】 : 孩子代理构造器 【ListWheelChildDelegate】"]},{"file":"node2_perspective.dart","name":"ListWheelViewport 透视效果","desc":["【perspective】 : 透视参数 【double】","【squeeze】 : 挤压值 【double】","【diameterRatio】 : 直径分率 【double】"]},{"file":"node3_magnifier.dart","name":"ListWheelViewport 放大","desc":["【useMagnifier】 : 是否放大 【bool】","【magnification】 : 放大比例 【double】","【clipBehavior】 : 剪裁行为 【Clip】","【renderChildrenOutsideViewport】 : 出视野是否渲染 【bool】"]},{"file":"node4_opacity.dart","name":"偏移和透明度","desc":["【offAxisFraction】 : 轴中心偏移比 【double】","【overAndUnderCenterOpacity】 : 放大器之外的透明度 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_en-US.json new file mode 100644 index 000000000..a11ac82ef --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_en-US.json @@ -0,0 +1 @@ +{"name":"ListenableBuilder","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" A general-purpose widget for building a widget subtree when a [Listenable] changes.","fields":[{"name":"builder","type":"TransitionBuilder","required":true,"desc":"Called every time the [listenable] notifies about a change."},{"name":"child","type":"Widget?","desc":"The child widget to pass to the [builder]."}],"id":438,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_zh-CN.json new file mode 100644 index 000000000..fde9f320f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_zh-CN.json @@ -0,0 +1 @@ +{"name":"ListenableBuilder","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"当 [Listenable] 更改时用于构建小部件子树的通用小部件。","fields":[{"name":"builder","type":"TransitionBuilder","required":true,"desc":"每次 [listenable] 通知更改时调用。"},{"name":"child","type":"Widget?","desc":"传递给 [builder] 的子小部件。"}],"id":438,"localName":"ListenableBuilder","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Listener/Listener_en-US.json b/modules/widget_system/widgets/doc/widgets/Listener/Listener_en-US.json new file mode 100644 index 000000000..1738bc5e0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Listener/Listener_en-US.json @@ -0,0 +1 @@ +{"name":"Listener","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that calls callbacks in response to common pointer events.","fields":[{"name":"onPointerDown","type":"PointerDownEventListener?","desc":"Called when a pointer comes into contact with the screen (for touch pointers), or has its button pressed (for mouse pointers) at this widget's location."},{"name":"onPointerMove","type":"PointerMoveEventListener?","desc":"Called when a pointer that triggered an [onPointerDown] changes position."},{"name":"onPointerUp","type":"PointerUpEventListener?","desc":"Called when a pointer that triggered an [onPointerDown] is no longer in contact with the screen."},{"name":"onPointerHover","type":"PointerHoverEventListener?","desc":"Called when a pointer that has not triggered an [onPointerDown] changes position."},{"name":"onPointerCancel","type":"PointerCancelEventListener?","desc":"Called when the input from a pointer that triggered an [onPointerDown] is no longer directed towards this receiver."},{"name":"onPointerPanZoomStart","type":"PointerPanZoomStartEventListener?","desc":"Called when a pan/zoom begins such as from a trackpad gesture."},{"name":"onPointerPanZoomUpdate","type":"PointerPanZoomUpdateEventListener?","desc":"Called when a pan/zoom is updated."},{"name":"onPointerPanZoomEnd","type":"PointerPanZoomEndEventListener?","desc":"Called when a pan/zoom finishes."},{"name":"onPointerSignal","type":"PointerSignalEventListener?","desc":"Called when a pointer signal occurs over this object."},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit testing."}],"id":147,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Events of Listener","desc":["【child】 : Child component 【Widget】","【onPointerDown】 : Press event 【Function(PointerDownEvent)】","【onPointerMove】 : Move event 【Function(PointerMoveEvent)】","【onPointerMove】 : Release event 【Function(PointerUpEvent)】","【onPointerCancel】 : Cancel event 【Function(PointerUpEvent)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Listener/Listener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Listener/Listener_zh-CN.json new file mode 100644 index 000000000..fa8733546 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Listener/Listener_zh-CN.json @@ -0,0 +1 @@ +{"name":"Listener","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"响应常见指针事件调用回调的小部件。","fields":[{"name":"onPointerDown","type":"PointerDownEventListener?","desc":"当指针与屏幕接触(对于触摸指针)或在此小部件位置按下按钮(对于鼠标指针)时调用。"},{"name":"onPointerMove","type":"PointerMoveEventListener?","desc":"当触发 [onPointerDown] 的指针改变位置时调用。"},{"name":"onPointerUp","type":"PointerUpEventListener?","desc":"当触发 [onPointerDown] 的指针不再与屏幕接触时调用。"},{"name":"onPointerHover","type":"PointerHoverEventListener?","desc":"当未触发 [onPointerDown] 的指针改变位置时调用。"},{"name":"onPointerCancel","type":"PointerCancelEventListener?","desc":"当触发 [onPointerDown] 的指针的输入不再指向此接收器时调用。"},{"name":"onPointerPanZoomStart","type":"PointerPanZoomStartEventListener?","desc":"当平移/缩放开始时调用,例如来自触控板手势。"},{"name":"onPointerPanZoomUpdate","type":"PointerPanZoomUpdateEventListener?","desc":"当平移/缩放更新时调用。"},{"name":"onPointerPanZoomEnd","type":"PointerPanZoomEndEventListener?","desc":"当平移/缩放完成时调用。"},{"name":"onPointerSignal","type":"PointerSignalEventListener?","desc":"当指针信号在此对象上发生时调用。"},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"命中测试期间的行为方式。"}],"id":147,"localName":"事件监听器","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Listener基本事件","desc":["【child】 : 子组件 【Widget】","【onPointerDown】 : 按下事件 【Function(PointerDownEvent)】","【onPointerMove】 : 移动事件 【Function(PointerMoveEvent)】","【onPointerMove】 : 抬起事件 【Function(PointerUpEvent)】","【onPointerCancel】 : 取消事件 【Function(PointerUpEvent)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_en-US.json b/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_en-US.json new file mode 100644 index 000000000..ec44d5668 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_en-US.json @@ -0,0 +1 @@ +{"name":"Localizations","path":"/src/widgets/localizations.dart","parents":["StatefulWidget","Widget"],"desc":" Defines the [Locale] for its `child` and the localized resources that the child depends on.","fields":[{"name":"locale","type":"Locale","required":true,"desc":"The resources returned by [Localizations.of] will be specific to this locale."},{"name":"delegates","type":"List>","required":true,"desc":"This list collectively defines the localized resources objects that can be retrieved with [Localizations.of]."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":290,"lever":4,"family":1,"linkIds":[65,346],"nodes":[{"file":"node1.dart","name":"Get Current Language","desc":["Through Localizations.localeOf(context), you can retrieve the Locale data information stored in the nearest upper-level Localizations component based on the context."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_zh-CN.json new file mode 100644 index 000000000..0acb6f0f3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_zh-CN.json @@ -0,0 +1 @@ +{"name":"Localizations","path":"/src/widgets/localizations.dart","parents":["StatefulWidget","Widget"],"desc":"为其 `child` 定义 [Locale] 以及子项依赖的本地化资源。","fields":[{"name":"locale","type":"Locale","required":true,"desc":"[Localizations.of] 返回的资源将特定于此区域设置。"},{"name":"delegates","type":"List>","required":true,"desc":"此列表共同定义了可以使用 [Localizations.of] 检索的本地化资源对象。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":290,"localName":"国际化","lever":4,"family":1,"linkIds":[65,346],"nodes":[{"file":"node1.dart","name":"获取当前语言","desc":["通过 Localizations.localeOf(context) 可以根据上下文获取最近上层的 Localizations 组件存储的 Locale 数据信息。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_en-US.json b/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_en-US.json new file mode 100644 index 000000000..c1160c098 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_en-US.json @@ -0,0 +1 @@ +{"name":"LongPressDraggable","path":"/src/widgets/drag_target.dart","parents":["Draggable","StatefulWidget","Widget"],"desc":" Makes its child draggable starting from long press.","fields":[{"name":"hapticFeedbackOnStart","type":"bool","required":true,"desc":"Whether haptic feedback should be triggered on drag start."},{"name":"delay","type":"Duration","required":true,"desc":"The duration that a user has to press down before a long press is registered."}],"id":105,"lever":4,"family":1,"linkIds":[103,104],"nodes":[{"file":"node1_base.dart","name":"LongPressDraggable used with DragTarget","desc":["【child】 : child 【Widget】","【feedback】 : child during drag 【Widget】","【axis】 : axis of drag 【Axis】","【data】 : data 【T】","【onDragStarted】 : start drag 【Function()】","【onDragEnd】 : end drag 【Function(DraggableDetails)】","【onDragCompleted】 : drag completed 【Function()】","【onDraggableCanceled】 : drag canceled 【Function(Velocity,Offset)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_zh-CN.json new file mode 100644 index 000000000..99846022f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_zh-CN.json @@ -0,0 +1 @@ +{"name":"LongPressDraggable","path":"/src/widgets/drag_target.dart","parents":["Draggable","StatefulWidget","Widget"],"desc":"使其子项从长按开始可拖动。","fields":[{"name":"hapticFeedbackOnStart","type":"bool","required":true,"desc":"拖动开始时是否应触发触觉反馈。"},{"name":"delay","type":"Duration","required":true,"desc":"用户必须按下才能注册长按的持续时间。"}],"id":105,"localName":"拖拽目标","lever":4,"family":1,"linkIds":[103,104],"nodes":[{"file":"node1_base.dart","name":"LongPressDraggable与DragTarget联用","desc":["【child】 : 孩子 【Widget】","【feedback】 : 拖拽时的孩子 【Widget】","【axis】 : 拖动的轴 【Axis】","【data】 : 数据 【T】","【onDragStarted】 : 开始拖拽 【Function()】","【onDragEnd】 : 结束拖拽 【Function(DraggableDetails)】","【onDragCompleted】 : 拖拽完成 【Function()】","【onDraggableCanceled】 : 拖拽取消 【Function(Velocity,Offset)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_en-US.json b/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_en-US.json new file mode 100644 index 000000000..882cd5130 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_en-US.json @@ -0,0 +1 @@ +{"name":"LookupBoundary","path":"/src/widgets/lookup_boundary.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" A lookup boundary controls what entities are visible to descendants of the boundary via the static lookup methods provided by the boundary.","fields":[],"id":439,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_zh-CN.json new file mode 100644 index 000000000..453580e97 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_zh-CN.json @@ -0,0 +1 @@ +{"name":"LookupBoundary","path":"/src/widgets/lookup_boundary.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"查找边界控制通过边界提供的静态查找方法对边界后代可见的实体。","fields":[],"id":439,"localName":"LookupBoundary","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_en-US.json b/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_en-US.json new file mode 100644 index 000000000..407724ee6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_en-US.json @@ -0,0 +1 @@ +{"name":"Magnifier","path":"/src/material/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":" A Material-styled magnifying glass.","fields":[{"name":"additionalFocalPointOffset","type":"Offset","required":true,"desc":"Any additional offset the focal point requires to \"point\" to the correct place."},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"The border radius for this magnifier."},{"name":"filmColor","type":"Color","required":true,"desc":"The color to tint the image in this [Magnifier]."},{"name":"shadows","type":"List","required":true,"desc":"A list of shadows cast by the [Magnifier]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"Whether and how to clip the [shadows] that render inside the loupe."},{"name":"size","type":"Size","required":true,"desc":"The [Size] of this [Magnifier]."}],"id":440,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_zh-CN.json new file mode 100644 index 000000000..96c8eea4c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_zh-CN.json @@ -0,0 +1 @@ +{"name":"Magnifier","path":"/src/material/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":"Material 样式的放大镜。","fields":[{"name":"additionalFocalPointOffset","type":"Offset","required":true,"desc":"焦点需要"},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"此放大镜的边框半径。"},{"name":"filmColor","type":"Color","required":true,"desc":"在此 [Magnifier] 中为图像着色的颜色。"},{"name":"shadows","type":"List","required":true,"desc":"[Magnifier] 投射的阴影列表。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"是否以及如何裁剪在放大镜内渲染的 [shadows]。"},{"name":"size","type":"Size","required":true,"desc":"此 [Magnifier] 的 [Size]。"}],"id":440,"localName":"Magnifier","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Material/Material_en-US.json b/modules/widget_system/widgets/doc/widgets/Material/Material_en-US.json new file mode 100644 index 000000000..8d144dd7a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Material/Material_en-US.json @@ -0,0 +1 @@ +{"name":"Material","path":"/src/material/material.dart","parents":["StatefulWidget","Widget"],"desc":" A piece of material.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"type","type":"MaterialType","required":true,"desc":"The kind of material to show (e.g., card or canvas). This affects the shape of the widget, the roundness of its corners if the shape is rectangular, and the default color."},{"name":"elevation","type":"double","required":true,"desc":"{@template flutter.material.material.elevation} The z-coordinate at which to place this material relative to its parent."},{"name":"color","type":"Color?","desc":"The color to paint the material."},{"name":"shadowColor","type":"Color?","desc":"The color to paint the shadow below the material."},{"name":"surfaceTintColor","type":"Color?","desc":"The color of the surface tint overlay applied to the material color to indicate elevation."},{"name":"textStyle","type":"TextStyle?","desc":"The typographical style to use for text within this material."},{"name":"shape","type":"ShapeBorder?","desc":"Defines the material's shape as well its shadow."},{"name":"borderOnForeground","type":"bool","required":true,"desc":"Whether to paint the [shape] border in front of the [child]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@template flutter.material.Material.clipBehavior} The content will be clipped (or not) according to this option."},{"name":"animationDuration","type":"Duration","required":true,"desc":"Defines the duration of animated changes for [shape], [elevation], [shadowColor], [surfaceTintColor] and the elevation overlay if it is applied."},{"name":"borderRadius","type":"BorderRadiusGeometry?","desc":"If non-null, the corners of this box are rounded by this [BorderRadiusGeometry] value."}],"id":160,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Material","desc":["【child】 : Child Component 【Widget】","【type】 : Type 【MaterialType】","【elevation】 : Elevation 【double】","【shadowColor】 : Shadow Color 【Color】","【color】 : Color 【Color】"]},{"file":"node2_shape.dart","name":"Shape Property of Material","desc":["【shape】 : Shape 【ShapeBorder】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Material/Material_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Material/Material_zh-CN.json new file mode 100644 index 000000000..c658ddce3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Material/Material_zh-CN.json @@ -0,0 +1 @@ +{"name":"Material","path":"/src/material/material.dart","parents":["StatefulWidget","Widget"],"desc":"一块材料。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"type","type":"MaterialType","required":true,"desc":"要显示的材料类型(例如,卡片或画布)。这影响小部件的形状、如果形状是矩形则影响其角的圆度以及默认颜色。"},{"name":"elevation","type":"double","required":true,"desc":"{@template flutter.material.material.elevation} 相对于其父级放置此材料的 z 坐标。"},{"name":"color","type":"Color?","desc":"绘制材料的颜色。"},{"name":"shadowColor","type":"Color?","desc":"绘制材料下方阴影的颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"应用于材料颜色以指示高度的表面色调覆盖的颜色。"},{"name":"textStyle","type":"TextStyle?","desc":"用于此材料内文本的排版样式。"},{"name":"shape","type":"ShapeBorder?","desc":"定义材料的形状及其阴影。"},{"name":"borderOnForeground","type":"bool","required":true,"desc":"是否在 [child] 前面绘制 [shape] 边框。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@template flutter.material.Material.clipBehavior} 内容将根据此选项进行裁剪(或不裁剪)。"},{"name":"animationDuration","type":"Duration","required":true,"desc":"定义 [shape]、[elevation]、[shadowColor]、[surfaceTintColor] 和高度覆盖(如果应用)的动画更改持续时间。"},{"name":"borderRadius","type":"BorderRadiusGeometry?","desc":"如果非空,此框的角由此 [BorderRadiusGeometry] 值圆化。"}],"id":160,"localName":"材料组件","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Material基本使用","desc":["【child】 : 子组件 【Widget】","【type】 : 类型 【MaterialType】","【elevation】 : 影深 【double】","【shadowColor】 : 阴影颜色 【Color】","【color】 : 颜色 【Color】"]},{"file":"node2_shape.dart","name":"Material的shape属性","desc":["【shape】 : 形状 【ShapeBorder】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_en-US.json b/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_en-US.json new file mode 100644 index 000000000..5d0404693 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_en-US.json @@ -0,0 +1 @@ +{"name":"MaterialApp","path":"/src/material/app.dart","parents":["StatefulWidget","Widget"],"desc":" An application that uses Material Design.","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@macro flutter.widgets.widgetsApp.navigatorKey}"},{"name":"scaffoldMessengerKey","type":"GlobalKey?","desc":"A key to use when building the [ScaffoldMessenger]."},{"name":"home","type":"Widget?","desc":"{@macro flutter.widgets.widgetsApp.home}"},{"name":"routes","type":"Map?","desc":"The application's top-level routing table."},{"name":"initialRoute","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.initialRoute}"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateRoute}"},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateInitialRoutes}"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onUnknownRoute}"},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@macro flutter.widgets.widgetsApp.onNavigationNotification}"},{"name":"navigatorObservers","type":"List?","desc":"{@macro flutter.widgets.widgetsApp.navigatorObservers}"},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationProvider}"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationParser}"},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@macro flutter.widgets.widgetsApp.routerDelegate}"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@macro flutter.widgets.widgetsApp.backButtonDispatcher}"},{"name":"routerConfig","type":"RouterConfig?","desc":"{@macro flutter.widgets.widgetsApp.routerConfig}"},{"name":"builder","type":"TransitionBuilder?","desc":"{@macro flutter.widgets.widgetsApp.builder}"},{"name":"title","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.title}"},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateTitle}"},{"name":"theme","type":"ThemeData?","desc":"Default visual properties, like colors fonts and shapes, for this app's material widgets."},{"name":"darkTheme","type":"ThemeData?","desc":"The [ThemeData] to use when a 'dark mode' is requested by the system."},{"name":"highContrastTheme","type":"ThemeData?","desc":"The [ThemeData] to use when 'high contrast' is requested by the system."},{"name":"highContrastDarkTheme","type":"ThemeData?","desc":"The [ThemeData] to use when a 'dark mode' and 'high contrast' is requested by the system."},{"name":"themeMode","type":"ThemeMode?","desc":"Determines which theme will be used by the application if both [theme] and [darkTheme] are provided."},{"name":"themeAnimationDuration","type":"Duration","required":true,"desc":"The duration of animated theme changes."},{"name":"themeAnimationCurve","type":"Curve","required":true,"desc":"The curve to apply when animating theme changes."},{"name":"color","type":"Color?","desc":"{@macro flutter.widgets.widgetsApp.color}"},{"name":"locale","type":"Locale?","desc":"{@macro flutter.widgets.widgetsApp.locale}"},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@macro flutter.widgets.widgetsApp.localizationsDelegates}"},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.LocaleResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@macro flutter.widgets.widgetsApp.supportedLocales}"},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"Turns on a performance overlay."},{"name":"checkerboardRasterCacheImages","type":"bool","required":true,"desc":"Turns on checkerboarding of raster cache images."},{"name":"checkerboardOffscreenLayers","type":"bool","required":true,"desc":"Turns on checkerboarding of layers rendered to offscreen bitmaps."},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"Turns on an overlay that shows the accessibility information reported by the framework."},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.debugShowCheckedModeBanner}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.widgetsApp.shortcuts} {@tool snippet} This example shows how to add a single shortcut for [LogicalKeyboardKey.select] to the default shortcuts without needing to add your own [Shortcuts] widget."},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.widgetsApp.actions} {@tool snippet} This example shows how to add a single action handling an [ActivateAction] to the default actions without needing to add your own [Actions] widget."},{"name":"restorationScopeId","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.restorationScopeId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.material.materialApp.scrollBehavior} The default [ScrollBehavior] for the application."},{"name":"debugShowMaterialGrid","type":"bool","required":true,"desc":"Turns on a [GridPaper] overlay that paints a baseline grid Material apps."},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.useInheritedMediaQuery}"},{"name":"themeAnimationStyle","type":"AnimationStyle?","desc":"Used to override the theme animation curve and duration."}],"id":65,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of MaterialApp","desc":["【theme】 : Theme 【ThemeData】","【title】 : Taskbar Title 【String】","【debugShowCheckedModeBanner】 : Enable Badge 【bool】","【showPerformanceOverlay】 : Enable Performance Overlay 【bool】","【debugShowMaterialGrid】 : Enable Grid 【bool】","【onGenerateRoute】 : Route Generator 【RouteFactory】","【home】 : Home Page 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_zh-CN.json new file mode 100644 index 000000000..68cce7301 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_zh-CN.json @@ -0,0 +1 @@ +{"name":"MaterialApp","path":"/src/material/app.dart","parents":["StatefulWidget","Widget"],"desc":"使用 Material Design 的应用程序。","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@macro flutter.widgets.widgetsApp.navigatorKey}"},{"name":"scaffoldMessengerKey","type":"GlobalKey?","desc":"构建 [ScaffoldMessenger] 时使用的键。"},{"name":"home","type":"Widget?","desc":"{@macro flutter.widgets.widgetsApp.home}"},{"name":"routes","type":"Map?","desc":"应用程序的顶级路由表。"},{"name":"initialRoute","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.initialRoute}"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateRoute}"},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateInitialRoutes}"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onUnknownRoute}"},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@macro flutter.widgets.widgetsApp.onNavigationNotification}"},{"name":"navigatorObservers","type":"List?","desc":"{@macro flutter.widgets.widgetsApp.navigatorObservers}"},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationProvider}"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationParser}"},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@macro flutter.widgets.widgetsApp.routerDelegate}"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@macro flutter.widgets.widgetsApp.backButtonDispatcher}"},{"name":"routerConfig","type":"RouterConfig?","desc":"{@macro flutter.widgets.widgetsApp.routerConfig}"},{"name":"builder","type":"TransitionBuilder?","desc":"{@macro flutter.widgets.widgetsApp.builder}"},{"name":"title","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.title}"},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateTitle}"},{"name":"theme","type":"ThemeData?","desc":"此应用程序的 material 小部件的默认视觉属性,如颜色字体和形状。"},{"name":"darkTheme","type":"ThemeData?","desc":"系统请求"},{"name":"highContrastTheme","type":"ThemeData?","desc":"系统请求"},{"name":"highContrastDarkTheme","type":"ThemeData?","desc":"系统请求"},{"name":"themeMode","type":"ThemeMode?","desc":"如果同时提供 [theme] 和 [darkTheme],确定应用程序将使用哪个主题。"},{"name":"themeAnimationDuration","type":"Duration","required":true,"desc":"动画主题更改的持续时间。"},{"name":"themeAnimationCurve","type":"Curve","required":true,"desc":"动画主题更改时应用的曲线。"},{"name":"color","type":"Color?","desc":"{@macro flutter.widgets.widgetsApp.color}"},{"name":"locale","type":"Locale?","desc":"{@macro flutter.widgets.widgetsApp.locale}"},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@macro flutter.widgets.widgetsApp.localizationsDelegates}"},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.LocaleResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@macro flutter.widgets.widgetsApp.supportedLocales}"},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"打开性能覆盖。"},{"name":"checkerboardRasterCacheImages","type":"bool","required":true,"desc":"打开光栅缓存图像的棋盘格。"},{"name":"checkerboardOffscreenLayers","type":"bool","required":true,"desc":"打开渲染到离屏位图的图层的棋盘格。"},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"打开显示框架报告的辅助功能信息的覆盖。"},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.debugShowCheckedModeBanner}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.widgetsApp.shortcuts} {@tool snippet} 此示例显示如何在不需要添加自己的 [Shortcuts] 小部件的情况下为 [LogicalKeyboardKey.select] 添加单个快捷方式到默认快捷方式。"},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.widgetsApp.actions} {@tool snippet} 此示例显示如何在不需要添加自己的 [Actions] 小部件的情况下添加处理 [ActivateAction] 的单个操作到默认操作。"},{"name":"restorationScopeId","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.restorationScopeId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.material.materialApp.scrollBehavior} 应用程序的默认 [ScrollBehavior]。"},{"name":"debugShowMaterialGrid","type":"bool","required":true,"desc":"打开绘制基线网格 Material 应用程序的 [GridPaper] 覆盖。"},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.useInheritedMediaQuery}"},{"name":"themeAnimationStyle","type":"AnimationStyle?","desc":"用于覆盖主题动画曲线和持续时间。"}],"id":65,"localName":"Material应用","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MaterialApp基本用法","desc":["【theme】 : 主题 【ThemeData】","【title】 : 任务栏标题 【String】","【debugShowCheckedModeBanner】 : 开启角标 【bool】","【showPerformanceOverlay】 : 开启性能浮层 【bool】","【debugShowMaterialGrid】 : 开启网格 【bool】","【onGenerateRoute】 : 路由生成器 【RouteFactory】","【home】 : 主页 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_en-US.json b/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_en-US.json new file mode 100644 index 000000000..eb64c5460 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_en-US.json @@ -0,0 +1 @@ +{"name":"MaterialBanner","path":"/src/material/banner.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design banner.","fields":[{"name":"content","type":"Widget","required":true,"desc":"The content of the [MaterialBanner]."},{"name":"contentTextStyle","type":"TextStyle?","desc":"Style for the text in the [content] of the [MaterialBanner]."},{"name":"actions","type":"List","required":true,"desc":"The set of actions that are displayed at the bottom or trailing side of the [MaterialBanner]."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place the material banner."},{"name":"leading","type":"Widget?","desc":"The (optional) leading widget of the [MaterialBanner]."},{"name":"minActionBarHeight","type":"double","required":true,"desc":"The optional minimum action bar height."},{"name":"backgroundColor","type":"Color?","desc":"The color of the surface of this [MaterialBanner]."},{"name":"surfaceTintColor","type":"Color?","desc":"The color used as an overlay on [backgroundColor] to indicate elevation."},{"name":"shadowColor","type":"Color?","desc":"The color of the shadow below the [MaterialBanner]."},{"name":"dividerColor","type":"Color?","desc":"The color of the divider."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the [content]."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"Empty space to surround the [MaterialBanner]."},{"name":"leadingPadding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the [leading] widget."},{"name":"forceActionsBelow","type":"bool","required":true,"desc":"An override to force the [actions] to be below the [content] regardless of how many there are."},{"name":"overflowAlignment","type":"OverflowBarAlignment","required":true,"desc":"The horizontal alignment of the [actions] when the [actions] laid out in a column."},{"name":"animation","type":"Animation?","desc":"The animation driving the entrance and exit of the material banner when presented by the [ScaffoldMessenger]."},{"name":"onVisible","type":"VoidCallback?","desc":"Called the first time that the material banner is visible within a [Scaffold] when presented by the [ScaffoldMessenger]."}],"id":211,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_one_btn.dart","name":"Usage of MaterialBanner in a Single Line","desc":["【content】: Middle component 【Widget】","【leading】: Left component 【Widget】","【actions】: List of right components 【List】","【padding】: Padding 【EdgeInsetsGeometry】","【forceActionsBelow】: Whether buttons are below 【bool】","【backgroundColor】: Background color 【Color】"]},{"file":"node2_two_btn.dart","name":"Usage of MaterialBanner in Two Lines","desc":["【contentTextStyle】: Style for the middle position 【TextStyle】","【leadingPadding】: Padding for the left component 【EdgeInsetsGeometry】","When the number of trailing components is greater than 1, the component structure is left-center-bottom."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_zh-CN.json new file mode 100644 index 000000000..33a537f5d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_zh-CN.json @@ -0,0 +1 @@ +{"name":"MaterialBanner","path":"/src/material/banner.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 横幅。","fields":[{"name":"content","type":"Widget","required":true,"desc":"[MaterialBanner] 的内容。"},{"name":"contentTextStyle","type":"TextStyle?","desc":"[MaterialBanner] 的 [content] 中文本的样式。"},{"name":"actions","type":"List","required":true,"desc":"显示在 [MaterialBanner] 底部或尾随侧的操作集。"},{"name":"elevation","type":"double?","desc":"放置 material 横幅的 z 坐标。"},{"name":"leading","type":"Widget?","desc":"[MaterialBanner] 的(可选)前导小部件。"},{"name":"minActionBarHeight","type":"double","required":true,"desc":"可选的最小操作栏高度。"},{"name":"backgroundColor","type":"Color?","desc":"此 [MaterialBanner] 表面的颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"用作 [backgroundColor] 上的覆盖以指示高度的颜色。"},{"name":"shadowColor","type":"Color?","desc":"[MaterialBanner] 下方阴影的颜色。"},{"name":"dividerColor","type":"Color?","desc":"分隔符的颜色。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"插入 [content] 的空间量。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕 [MaterialBanner] 的空白空间。"},{"name":"leadingPadding","type":"EdgeInsetsGeometry?","desc":"插入 [leading] 小部件的空间量。"},{"name":"forceActionsBelow","type":"bool","required":true,"desc":"强制 [actions] 位于 [content] 下方的覆盖,无论有多少个。"},{"name":"overflowAlignment","type":"OverflowBarAlignment","required":true,"desc":"当 [actions] 在列中布局时的水平对齐。"},{"name":"animation","type":"Animation?","desc":"由 [ScaffoldMessenger] 呈现时驱动 material 横幅进入和退出的动画。"},{"name":"onVisible","type":"VoidCallback?","desc":"由 [ScaffoldMessenger] 呈现时,material 横幅在 [Scaffold] 内首次可见时调用。"}],"id":211,"localName":"横幅组件","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_one_btn.dart","name":"MaterialBanner一行的使用","desc":["【content】 : 中间组件 【Widget】","【leading】: 左侧组件 【Widget】","【actions】: 右侧组件列表 【List】","【padding】: 内边距 【EdgeInsetsGeometry】","【forceActionsBelow】: 是否按钮在下方 【bool】","【backgroundColor】: 背景色 【Color】"]},{"file":"node2_two_btn.dart","name":"MaterialBanner两行的使用","desc":["【contentTextStyle】: 中间位置样式 【TextStyle】","【leadingPadding】: 左侧组件边距 【EdgeInsetsGeometry】","当尾部组件数量大于1,该组件结构为左中下。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_en-US.json new file mode 100644 index 000000000..bcf5e5af8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_en-US.json @@ -0,0 +1 @@ +{"name":"MaterialBannerTheme","path":"/src/material/banner_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for [MaterialBanner]s in this widget's subtree.","fields":[{"name":"data","type":"MaterialBannerThemeData?","desc":"The properties for descendant [MaterialBanner] widgets."}],"id":327,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of MaterialBannerTheme","desc":["You can specify the MaterialBannerThemeData properties to set default styles for descendant MaterialBanner components, such as background color, margins, text styles, etc. You can also use MaterialBannerTheme.of to get the theme data of MaterialBanner."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_zh-CN.json new file mode 100644 index 000000000..3bba15d14 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"MaterialBannerTheme","path":"/src/material/banner_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [MaterialBanner] 定义配置的继承小部件。","fields":[{"name":"data","type":"MaterialBannerThemeData?","desc":"后代 [MaterialBanner] 小部件的属性。"}],"id":327,"localName":"横幅样式","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MaterialBannerTheme基本使用","desc":["可指定MaterialBannerThemeData数据属性为【后代】的MaterialBanner组件设置默认样式,如背景色、边距、文字样式等。也可以用MaterialBannerTheme.of获取MaterialBanner的主题数据。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_en-US.json b/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_en-US.json new file mode 100644 index 000000000..97c7fa085 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_en-US.json @@ -0,0 +1 @@ +{"name":"MaterialButton","path":"/src/material/material_button.dart","parents":["StatelessWidget","Widget"],"desc":" A utility class for building Material buttons that depend on the ambient [ButtonTheme] and [Theme].","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when the button is tapped or otherwise activated."},{"name":"onLongPress","type":"VoidCallback?","desc":"The callback that is called when the button is long-pressed."},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"Called by the underlying [InkWell] widget's [InkWell.onHighlightChanged] callback."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"textTheme","type":"ButtonTextTheme?","desc":"Defines the button's base colors, and the defaults for the button's minimum size, internal padding, and shape."},{"name":"textColor","type":"Color?","desc":"The color to use for this button's text."},{"name":"disabledTextColor","type":"Color?","desc":"The color to use for this button's text when the button is disabled."},{"name":"color","type":"Color?","desc":"The button's fill color, displayed by its [Material], while it is in its default (unpressed, [enabled]) state."},{"name":"disabledColor","type":"Color?","desc":"The fill color of the button when the button is disabled."},{"name":"splashColor","type":"Color?","desc":"The splash color of the button's [InkWell]."},{"name":"focusColor","type":"Color?","desc":"The fill color of the button's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"The fill color of the button's [Material] when a pointer is hovering over it."},{"name":"highlightColor","type":"Color?","desc":"The highlight color of the button's [InkWell]."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this button relative to its parent."},{"name":"hoverElevation","type":"double?","desc":"The elevation for the button's [Material] when the button is [enabled] and a pointer is hovering over it."},{"name":"focusElevation","type":"double?","desc":"The elevation for the button's [Material] when the button is [enabled] and has the input focus."},{"name":"highlightElevation","type":"double?","desc":"The elevation for the button's [Material] relative to its parent when the button is [enabled] and pressed."},{"name":"disabledElevation","type":"double?","desc":"The elevation for the button's [Material] relative to its parent when the button is not [enabled]."},{"name":"colorBrightness","type":"Brightness?","desc":"The theme brightness to use for this button."},{"name":"child","type":"Widget?","desc":"The button's label."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The internal padding for the button's [child]."},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the button's layout will be."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the button's [Material]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"animationDuration","type":"Duration?","desc":"Defines the duration of animated changes for [shape] and [elevation]."},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"Configures the minimum size of the tap target."},{"name":"minWidth","type":"double?","desc":"The smallest horizontal extent that the button will occupy."},{"name":"height","type":"double?","desc":"The vertical extent of the button."},{"name":"enableFeedback","type":"bool","required":true,"desc":"Whether detected gestures should provide acoustic and/or haptic feedback."}],"id":23,"lever":4,"family":0,"linkIds":[25,26,27,326,175],"nodes":[{"file":"node1_base.dart","name":"MaterialButton Click Event","desc":["【color】: Color 【Color】","【splashColor】: Ripple Color 【Color】","【height】: Height 【double】","【elevation】: Elevation 【double】","【child】: Child Component 【Widget】","【textColor】: Child Component Text Color 【Color】","【highlightColor】: Long Press Highlight Color 【Color】","【padding】: Padding 【EdgeInsetsGeometry】","【onPressed】: Click Event 【Function】"]},{"file":"node2_onLongPress.dart","name":"MaterialButton Long Press Event","desc":["【highlightColor】: Long Press Highlight Color 【Color】","【onLongPress】: Long Press Event 【Function】"]},{"file":"node3_shape.dart","name":"MaterialButton Custom Shape","desc":["【shape】: Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_zh-CN.json new file mode 100644 index 000000000..6c3d3ccd1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"MaterialButton","path":"/src/material/material_button.dart","parents":["StatelessWidget","Widget"],"desc":"用于构建依赖于环境 [ButtonTheme] 和 [Theme] 的 Material 按钮的实用类。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用的回调。"},{"name":"onLongPress","type":"VoidCallback?","desc":"长按按钮时调用的回调。"},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"由底层 [InkWell] 小部件的 [InkWell.onHighlightChanged] 回调调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"textTheme","type":"ButtonTextTheme?","desc":"定义按钮的基本颜色,以及按钮的最小大小、内部内边距和形状的默认值。"},{"name":"textColor","type":"Color?","desc":"用于此按钮文本的颜色。"},{"name":"disabledTextColor","type":"Color?","desc":"按钮禁用时用于此按钮文本的颜色。"},{"name":"color","type":"Color?","desc":"按钮处于默认(未按下、[enabled])状态时,由其 [Material] 显示的按钮填充颜色。"},{"name":"disabledColor","type":"Color?","desc":"按钮禁用时的填充颜色。"},{"name":"splashColor","type":"Color?","desc":"按钮的 [InkWell] 的飞溅颜色。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时其 [Material] 的填充颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在按钮上时其 [Material] 的填充颜色。"},{"name":"highlightColor","type":"Color?","desc":"按钮的 [InkWell] 的高亮颜色。"},{"name":"elevation","type":"double?","desc":"相对于其父级放置此按钮的 z 坐标。"},{"name":"hoverElevation","type":"double?","desc":"按钮 [enabled] 且指针悬停在其上时按钮的 [Material] 的高度。"},{"name":"focusElevation","type":"double?","desc":"按钮 [enabled] 且具有输入焦点时按钮的 [Material] 的高度。"},{"name":"highlightElevation","type":"double?","desc":"按钮 [enabled] 且被按下时按钮的 [Material] 相对于其父级的高度。"},{"name":"disabledElevation","type":"double?","desc":"按钮未 [enabled] 时按钮的 [Material] 相对于其父级的高度。"},{"name":"colorBrightness","type":"Brightness?","desc":"用于此按钮的主题亮度。"},{"name":"child","type":"Widget?","desc":"按钮的标签。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"按钮的 [child] 的内部内边距。"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义按钮布局的紧凑程度。"},{"name":"shape","type":"ShapeBorder?","desc":"按钮的 [Material] 的形状。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"animationDuration","type":"Duration?","desc":"定义 [shape] 和 [elevation] 动画更改的持续时间。"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"配置点击目标的最小大小。"},{"name":"minWidth","type":"double?","desc":"按钮将占用的最小水平范围。"},{"name":"height","type":"double?","desc":"按钮的垂直范围。"},{"name":"enableFeedback","type":"bool","required":true,"desc":"检测到的手势是否应提供声音和/或触觉反馈。"}],"id":23,"localName":"材料按钮","lever":4,"family":0,"linkIds":[25,26,27,326,175],"nodes":[{"file":"node1_base.dart","name":"MaterialButton点击事件","desc":["【color】: 颜色 【Color】","【splashColor】: 水波纹颜色 【Color】","【height】: 高 【double】","【elevation】: 影深 【double】","【child】: 子组件 【Widget】","【textColor】: 子组件文字颜色 【Color】","【highlightColor】: 长按高亮色 【Color】","【padding】: 内边距 【EdgeInsetsGeometry】","【onPressed】: 点击事件 【Function】"]},{"file":"node2_onLongPress.dart","name":"MaterialButton长按事件","desc":["【highlightColor】: 长按高亮色 【Color】","【onLongPress】: 长按事件 【Function】"]},{"file":"node3_shape.dart","name":"MaterialButton的自定义形状","desc":["【shape】: 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_en-US.json new file mode 100644 index 000000000..1d7623b75 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_en-US.json @@ -0,0 +1 @@ +{"name":"MatrixTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animates the [Matrix4] of a transformed widget.","fields":[{"name":"onTransform","type":"TransformCallback","required":true,"desc":"The callback to compute a [Matrix4] from the [animation]. It's called every time [animation] changes its value."},{"name":"alignment","type":"Alignment","required":true,"desc":"The alignment of the origin of the coordinate system in which the transform takes place, relative to the size of the box."},{"name":"filterQuality","type":"FilterQuality?","desc":"The filter quality with which to apply the transform as a bitmap operation."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":441,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_zh-CN.json new file mode 100644 index 000000000..09a1ec645 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_zh-CN.json @@ -0,0 +1 @@ +{"name":"MatrixTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"对变换小部件的 [Matrix4] 进行动画处理。","fields":[{"name":"onTransform","type":"TransformCallback","required":true,"desc":"从 [animation] 计算 [Matrix4] 的回调。每次 [animation] 更改其值时都会调用它。"},{"name":"alignment","type":"Alignment","required":true,"desc":"变换发生的坐标系原点相对于框大小的对齐方式。"},{"name":"filterQuality","type":"FilterQuality?","desc":"将变换作为位图操作应用的过滤质量。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":441,"localName":"MatrixTransition","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_en-US.json b/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_en-US.json new file mode 100644 index 000000000..76b09f5cf --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_en-US.json @@ -0,0 +1 @@ +{"name":"MediaQuery","path":"/src/widgets/media_query.dart","parents":["InheritedModel","InheritedWidget","ProxyWidget","Widget"],"desc":" Establishes a subtree in which media queries resolve to the given data.","fields":[{"name":"data","type":"MediaQueryData","required":true,"desc":"Contains information about the current media."}],"id":167,"lever":4,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MediaQuery Get Data Information","desc":["MediaQuery.of(context) can obtain MediaQueryData"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_zh-CN.json new file mode 100644 index 000000000..08a530876 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_zh-CN.json @@ -0,0 +1 @@ +{"name":"MediaQuery","path":"/src/widgets/media_query.dart","parents":["InheritedModel","InheritedWidget","ProxyWidget","Widget"],"desc":"建立一个子树,其中媒体查询解析为给定数据。","fields":[{"name":"data","type":"MediaQueryData","required":true,"desc":"包含有关当前媒体的信息。"}],"id":167,"localName":"媒体查询","lever":4,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MediaQuery获取数据信息","desc":["MediaQuery.of(context)可以获取MediaQueryData"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_en-US.json new file mode 100644 index 000000000..0d23640af --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_en-US.json @@ -0,0 +1 @@ +{"name":"MenuAcceleratorCallbackBinding","path":"/src/material/menu_anchor.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An [InheritedWidget] that provides a descendant [MenuAcceleratorLabel] with the function to invoke when the accelerator is pressed.","fields":[{"name":"onInvoke","type":"VoidCallback?","desc":"The function that pressing the accelerator defined in a descendant [MenuAcceleratorLabel] will invoke."},{"name":"hasSubmenu","type":"bool","required":true,"desc":"Whether or not the associated label will host its own submenu or not."}],"id":442,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_zh-CN.json new file mode 100644 index 000000000..8ee542850 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_zh-CN.json @@ -0,0 +1 @@ +{"name":"MenuAcceleratorCallbackBinding","path":"/src/material/menu_anchor.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为后代 [MenuAcceleratorLabel] 提供按下加速器时调用的函数的 [InheritedWidget]。","fields":[{"name":"onInvoke","type":"VoidCallback?","desc":"按下后代 [MenuAcceleratorLabel] 中定义的加速器将调用的函数。"},{"name":"hasSubmenu","type":"bool","required":true,"desc":"关联的标签是否将托管自己的子菜单。"}],"id":442,"localName":"MenuAcceleratorCallbackBinding","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_en-US.json new file mode 100644 index 000000000..2c39aa07a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_en-US.json @@ -0,0 +1 @@ +{"name":"MenuAcceleratorLabel","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that draws the label text for a menu item (typically a [MenuItemButton] or [SubmenuButton]) and renders its child with information about the currently active keyboard accelerator.","fields":[{"name":"label","type":"String","required":true,"desc":"The label string that should be displayed."},{"name":"builder","type":"MenuAcceleratorChildBuilder","required":true,"desc":"The optional [MenuAcceleratorChildBuilder] which is used to build the widget that displays the label itself."}],"id":443,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_zh-CN.json new file mode 100644 index 000000000..15eea1c1f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_zh-CN.json @@ -0,0 +1 @@ +{"name":"MenuAcceleratorLabel","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"为菜单项(通常是 [MenuItemButton] 或 [SubmenuButton])绘制标签文本并使用有关当前活动键盘加速器的信息渲染其子项的小部件。","fields":[{"name":"label","type":"String","required":true,"desc":"应显示的标签字符串。"},{"name":"builder","type":"MenuAcceleratorChildBuilder","required":true,"desc":"用于构建显示标签本身的小部件的可选 [MenuAcceleratorChildBuilder]。"}],"id":443,"localName":"MenuAcceleratorLabel","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_en-US.json new file mode 100644 index 000000000..14f59d96a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_en-US.json @@ -0,0 +1 @@ +{"name":"MenuAnchor","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A widget used to mark the \"anchor\" for a set of submenus, defining the rectangle used to position the menu, which can be done either with an explicit location, or with an alignment.","fields":[{"name":"controller","type":"MenuController?","desc":"An optional controller that allows opening and closing of the menu from other widgets."},{"name":"childFocusNode","type":"FocusNode?","desc":"The [childFocusNode] attribute is the optional [FocusNode] also associated to the [child] or [builder] widget that opens the menu."},{"name":"style","type":"MenuStyle?","desc":"The [MenuStyle] that defines the visual attributes of the menu bar."},{"name":"alignmentOffset","type":"Offset?","desc":"{@template flutter.material.MenuAnchor.alignmentOffset} The offset of the menu relative to the alignment origin determined by [MenuStyle.alignment] on the [style] attribute and the ambient [Directionality]."},{"name":"layerLink","type":"LayerLink?","desc":"An optional [LayerLink] to attach the menu to the widget that this [MenuAnchor] surrounds."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"anchorTapClosesMenu","type":"bool","required":true,"desc":"Whether the menus will be closed if the anchor area is tapped."},{"name":"consumeOutsideTap","type":"bool","required":true,"desc":"Whether or not a tap event that closes the menu will be permitted to continue on to the gesture arena."},{"name":"onOpen","type":"VoidCallback?","desc":"A callback that is invoked when the menu is opened."},{"name":"onClose","type":"VoidCallback?","desc":"A callback that is invoked when the menu is closed."},{"name":"crossAxisUnconstrained","type":"bool","required":true,"desc":"Determine if the menu panel can be wrapped by a [UnconstrainedBox] which allows the panel to render at its \"natural\" size."},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@macro flutter.widgets.RawMenuAnchor.useRootOverlay}"},{"name":"menuChildren","type":"List","required":true,"desc":"A list of children containing the menu items that are the contents of the menu surrounded by this [MenuAnchor]."},{"name":"builder","type":"MenuAnchorChildBuilder?","desc":"The widget that this [MenuAnchor] surrounds."},{"name":"child","type":"Widget?","desc":"The optional child to be passed to the [builder]."}],"id":444,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_zh-CN.json new file mode 100644 index 000000000..a1b377078 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_zh-CN.json @@ -0,0 +1 @@ +{"name":"MenuAnchor","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"用于标记一组子菜单的\"锚点\"的小部件,定义用于定位菜单的矩形,可以使用显式位置或对齐方式完成。","fields":[{"name":"controller","type":"MenuController?","desc":"允许从其他小部件打开和关闭菜单的可选控制器。"},{"name":"childFocusNode","type":"FocusNode?","desc":"[childFocusNode] 属性是与打开菜单的 [child] 或 [builder] 小部件关联的可选 [FocusNode]。"},{"name":"style","type":"MenuStyle?","desc":"定义菜单栏视觉属性的 [MenuStyle]。"},{"name":"alignmentOffset","type":"Offset?","desc":"{@template flutter.material.MenuAnchor.alignmentOffset} 菜单相对于由 [style] 属性上的 [MenuStyle.alignment] 和环境 [Directionality] 确定的对齐原点的偏移。"},{"name":"layerLink","type":"LayerLink?","desc":"将菜单附加到此 [MenuAnchor] 围绕的小部件的可选 [LayerLink]。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"anchorTapClosesMenu","type":"bool","required":true,"desc":"如果点击锚点区域,菜单是否会关闭。"},{"name":"consumeOutsideTap","type":"bool","required":true,"desc":"关闭菜单的点击事件是否被允许继续到手势竞技场。"},{"name":"onOpen","type":"VoidCallback?","desc":"菜单打开时调用的回调。"},{"name":"onClose","type":"VoidCallback?","desc":"菜单关闭时调用的回调。"},{"name":"crossAxisUnconstrained","type":"bool","required":true,"desc":"确定菜单面板是否可以被 [UnconstrainedBox] 包装,这允许面板以其"},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@macro flutter.widgets.RawMenuAnchor.useRootOverlay}"},{"name":"menuChildren","type":"List","required":true,"desc":"包含菜单项的子项列表,这些菜单项是此 [MenuAnchor] 围绕的菜单的内容。"},{"name":"builder","type":"MenuAnchorChildBuilder?","desc":"此 [MenuAnchor] 围绕的小部件。"},{"name":"child","type":"Widget?","desc":"传递给 [builder] 的可选子项。"}],"id":444,"localName":"MenuAnchor","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_en-US.json new file mode 100644 index 000000000..34e624a72 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_en-US.json @@ -0,0 +1 @@ +{"name":"MenuBar","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":" A menu bar that manages cascading child menus.","fields":[{"name":"style","type":"MenuStyle?","desc":"The [MenuStyle] that defines the visual attributes of the menu bar."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"controller","type":"MenuController?","desc":"The [MenuController] to use for this menu bar."},{"name":"children","type":"List","required":true,"desc":"The list of menu items that are the top level children of the [MenuBar]."}],"id":445,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_zh-CN.json new file mode 100644 index 000000000..da40df364 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"MenuBar","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":"管理级联子菜单的菜单栏。","fields":[{"name":"style","type":"MenuStyle?","desc":"定义菜单栏视觉属性的 [MenuStyle]。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"controller","type":"MenuController?","desc":"用于此菜单栏的 [MenuController]。"},{"name":"children","type":"List","required":true,"desc":"作为 [MenuBar] 顶级子项的菜单项列表。"}],"id":445,"localName":"MenuBar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_en-US.json new file mode 100644 index 000000000..a1552483f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_en-US.json @@ -0,0 +1 @@ +{"name":"MenuBarTheme","path":"/src/material/menu_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for the [MenuBar] widgets in this widget's descendants.","fields":[{"name":"data","type":"MenuBarThemeData","required":true,"desc":"The properties to set for [MenuBar] in this widget's descendants."}],"id":446,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_zh-CN.json new file mode 100644 index 000000000..ee9011166 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"MenuBarTheme","path":"/src/material/menu_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件后代中的 [MenuBar] 小部件定义配置的继承小部件。","fields":[{"name":"data","type":"MenuBarThemeData","required":true,"desc":"为此小部件后代中的 [MenuBar] 设置的属性。"}],"id":446,"localName":"MenuBarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_en-US.json new file mode 100644 index 000000000..ac2ae8de2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_en-US.json @@ -0,0 +1 @@ +{"name":"MenuButtonTheme","path":"/src/material/menu_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [MenuItemButton] and [SubmenuButton] descendants.","fields":[{"name":"data","type":"MenuButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":447,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_zh-CN.json new file mode 100644 index 000000000..cb9a256e1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"MenuButtonTheme","path":"/src/material/menu_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [MenuItemButton] 和 [SubmenuButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"MenuButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":447,"localName":"MenuButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_en-US.json new file mode 100644 index 000000000..eff2b4244 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_en-US.json @@ -0,0 +1 @@ +{"name":"MenuItemButton","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A button for use in a [MenuBar], in a menu created with [MenuAnchor], or on its own, that can be activated by click or keyboard navigation.","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"Called when the button is tapped or otherwise activated."},{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the button response area."},{"name":"requestFocusOnHover","type":"bool","required":true,"desc":"Determine if hovering can request focus."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"The optional shortcut that selects this [MenuItemButton]."},{"name":"semanticsLabel","type":"String?","desc":"An optional Semantics label, applied to the entire [MenuItemButton]."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"leadingIcon","type":"Widget?","desc":"An optional icon to display before the [child] label."},{"name":"trailingIcon","type":"Widget?","desc":"An optional icon to display after the [child] label."},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@template flutter.material.menu_anchor.closeOnActivate} Determines if the menu will be closed when a [MenuItemButton] is pressed."},{"name":"overflowAxis","type":"Axis","required":true,"desc":"The direction in which the menu item expands."},{"name":"child","type":"Widget?","desc":"The widget displayed in the center of this button."}],"id":448,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_zh-CN.json new file mode 100644 index 000000000..b2ba313ad --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"MenuItemButton","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"用于 [MenuBar]、使用 [MenuAnchor] 创建的菜单或单独使用的按钮,可以通过点击或键盘导航激活。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用。"},{"name":"onHover","type":"ValueChanged?","desc":"指针进入或退出按钮响应区域时调用。"},{"name":"requestFocusOnHover","type":"bool","required":true,"desc":"确定悬停是否可以请求焦点。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点更改时调用的处理程序。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"选择此 [MenuItemButton] 的可选快捷方式。"},{"name":"semanticsLabel","type":"String?","desc":"应用于整个 [MenuItemButton] 的可选语义标签。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"leadingIcon","type":"Widget?","desc":"在 [child] 标签前显示的可选图标。"},{"name":"trailingIcon","type":"Widget?","desc":"在 [child] 标签后显示的可选图标。"},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@template flutter.material.menu_anchor.closeOnActivate} 确定按下 [MenuItemButton] 时菜单是否会关闭。"},{"name":"overflowAxis","type":"Axis","required":true,"desc":"菜单项展开的方向。"},{"name":"child","type":"Widget?","desc":"显示在此按钮中心的小部件。"}],"id":448,"localName":"MenuItemButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_en-US.json new file mode 100644 index 000000000..dd80645f1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_en-US.json @@ -0,0 +1 @@ +{"name":"MenuTheme","path":"/src/material/menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration in this widget's descendants for menus created by the [SubmenuButton], [MenuBar], or [MenuAnchor] widgets.","fields":[{"name":"data","type":"MenuThemeData","required":true,"desc":"The properties for [MenuBar] and [MenuItemButton] in this widget's descendants."}],"id":449,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_zh-CN.json new file mode 100644 index 000000000..bf8d1190c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"MenuTheme","path":"/src/material/menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件后代中由 [SubmenuButton]、[MenuBar] 或 [MenuAnchor] 小部件创建的菜单定义配置的继承小部件。","fields":[{"name":"data","type":"MenuThemeData","required":true,"desc":"此小部件后代中 [MenuBar] 和 [MenuItemButton] 的属性。"}],"id":449,"localName":"MenuTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_en-US.json b/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_en-US.json new file mode 100644 index 000000000..8aa4a7767 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_en-US.json @@ -0,0 +1 @@ +{"name":"MergeSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that merges the semantics of its descendants.","fields":[],"id":450,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_zh-CN.json new file mode 100644 index 000000000..e0c3568bf --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_zh-CN.json @@ -0,0 +1 @@ +{"name":"MergeSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"合并其后代语义的小部件。","fields":[],"id":450,"localName":"MergeSemantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_en-US.json b/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_en-US.json new file mode 100644 index 000000000..1083f89c3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_en-US.json @@ -0,0 +1 @@ +{"name":"MergeableMaterial","path":"/src/material/mergeable_material.dart","parents":["StatefulWidget","Widget"],"desc":" Displays a list of [MergeableMaterialItem] children. The list contains [MaterialSlice] items whose boundaries are either \"merged\" with adjacent items or separated by a [MaterialGap]. The [children] are distributed along the given [mainAxis] in the same way as the children of a [ListBody]. When the list of children changes, gaps are automatically animated open or closed as needed.","fields":[{"name":"children","type":"List","required":true,"desc":"The children of the [MergeableMaterial]."},{"name":"mainAxis","type":"Axis","required":true,"desc":"The main layout axis."},{"name":"elevation","type":"double","required":true,"desc":"The z-coordinate at which to place all the [Material] slices."},{"name":"hasDividers","type":"bool","required":true,"desc":"Whether connected pieces of [MaterialSlice] have dividers between them."},{"name":"dividerColor","type":"Color?","desc":"Defines color used for dividers if [hasDividers] is true."}],"id":261,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of MergeableMaterial","desc":["【elevation】 : Shadow depth 【double】","【hasDividers】 : Whether there are dividers 【bool】","【dividerColor】 : Divider color 【Color】","【mainAxis】 : Axis direction 【Axis】","【children】 : Child components collection 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_zh-CN.json new file mode 100644 index 000000000..55b3822ca --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_zh-CN.json @@ -0,0 +1 @@ +{"name":"MergeableMaterial","path":"/src/material/mergeable_material.dart","parents":["StatefulWidget","Widget"],"desc":"显示 [MergeableMaterialItem] 子项列表。该列表包含 [MaterialSlice] 项,其边界要么与相邻项\"合并\",要么由 [MaterialGap] 分隔。[children] 沿给定的 [mainAxis] 分布,方式与 [ListBody] 的子项相同。当子项列表更改时,间隙会根据需要自动动画打开或关闭。","fields":[{"name":"children","type":"List","required":true,"desc":"[MergeableMaterial] 的子项。"},{"name":"mainAxis","type":"Axis","required":true,"desc":"主要布局轴。"},{"name":"elevation","type":"double","required":true,"desc":"放置所有 [Material] 切片的 z 坐标。"},{"name":"hasDividers","type":"bool","required":true,"desc":"[MaterialSlice] 的连接片段之间是否有分隔符。"},{"name":"dividerColor","type":"Color?","desc":"如果 [hasDividers] 为 true,定义用于分隔符的颜色。"}],"id":261,"localName":"可合并材料","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MergeableMaterial基本使用","desc":["【elevation】 : 影深 【double】","【hasDividers】 : 是否有分隔线 【bool】","【dividerColor】 : 分隔线颜色 【Color】","【mainAxis】 : 轴向 【Axis】","【children】 : 子组件集 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_en-US.json b/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_en-US.json new file mode 100644 index 000000000..9526cccf6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_en-US.json @@ -0,0 +1 @@ +{"name":"MetaData","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Holds opaque meta data in the render tree.","fields":[{"name":"metaData","type":"dynamic","required":true,"desc":"Opaque meta data ignored by the render tree."},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit testing."}],"id":451,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_zh-CN.json new file mode 100644 index 000000000..c8d99ae03 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_zh-CN.json @@ -0,0 +1 @@ +{"name":"MetaData","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在渲染树中保存不透明元数据。","fields":[{"name":"metaData","type":"dynamic","required":true,"desc":"被渲染树忽略的不透明元数据。"},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"命中测试期间的行为方式。"}],"id":451,"localName":"MetaData","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_en-US.json b/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_en-US.json new file mode 100644 index 000000000..e5922184e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_en-US.json @@ -0,0 +1 @@ +{"name":"ModalBarrier","path":"/src/widgets/modal_barrier.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that prevents the user from interacting with widgets behind itself.","fields":[{"name":"color","type":"Color?","desc":"If non-null, fill the barrier with this color."},{"name":"dismissible","type":"bool","required":true,"desc":"Specifies if the barrier will be dismissed when the user taps on it."},{"name":"onDismiss","type":"VoidCallback?","desc":"{@template flutter.widgets.ModalBarrier.onDismiss} Called when the barrier is being dismissed."},{"name":"barrierSemanticsDismissible","type":"bool?","desc":"Whether the modal barrier semantics are included in the semantics tree."},{"name":"semanticsLabel","type":"String?","desc":"Semantics label used for the barrier if it is [dismissible]."},{"name":"clipDetailsNotifier","type":"ValueNotifier?","desc":"{@template flutter.widgets.ModalBarrier.clipDetailsNotifier} Contains a value of type [EdgeInsets] that specifies how the [SemanticsNode.rect] of the widget should be clipped."},{"name":"semanticsOnTapHint","type":"String?","desc":"{@macro flutter.material.ModalBottomSheetRoute.barrierOnTapHint}"}],"id":212,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to ModalBarrier","desc":["【dismissible】: Whether to return when clicked 【bool】","【color】: Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_zh-CN.json new file mode 100644 index 000000000..c41bfb2af --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_zh-CN.json @@ -0,0 +1 @@ +{"name":"ModalBarrier","path":"/src/widgets/modal_barrier.dart","parents":["StatelessWidget","Widget"],"desc":"阻止用户与其后面的小部件交互的小部件。","fields":[{"name":"color","type":"Color?","desc":"如果非空,用此颜色填充屏障。"},{"name":"dismissible","type":"bool","required":true,"desc":"指定用户点击屏障时是否会被关闭。"},{"name":"onDismiss","type":"VoidCallback?","desc":"{@template flutter.widgets.ModalBarrier.onDismiss} 屏障被关闭时调用。"},{"name":"barrierSemanticsDismissible","type":"bool?","desc":"模态屏障语义是否包含在语义树中。"},{"name":"semanticsLabel","type":"String?","desc":"如果屏障是 [dismissible],用于屏障的语义标签。"},{"name":"clipDetailsNotifier","type":"ValueNotifier?","desc":"{@template flutter.widgets.ModalBarrier.clipDetailsNotifier} 包含 [EdgeInsets] 类型的值,指定小部件的 [SemanticsNode.rect] 应如何裁剪。"},{"name":"semanticsOnTapHint","type":"String?","desc":"{@macro flutter.material.ModalBottomSheetRoute.barrierOnTapHint}"}],"id":212,"localName":"屏障模","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ModalBarrier 介绍","desc":["【dismissible】 : 点击是否返回 【bool】","【color】 : 颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_en-US.json b/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_en-US.json new file mode 100644 index 000000000..b4d53c1a3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_en-US.json @@ -0,0 +1 @@ +{"name":"MouseRegion","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that tracks the movement of mice.","fields":[{"name":"onEnter","type":"PointerEnterEventListener?","desc":"Triggered when a mouse pointer has entered this widget."},{"name":"onHover","type":"PointerHoverEventListener?","desc":"Triggered when a pointer moves into a position within this widget without buttons pressed."},{"name":"onExit","type":"PointerExitEventListener?","desc":"Triggered when a mouse pointer has exited this widget when the widget is still mounted."},{"name":"cursor","type":"MouseCursor","required":true,"desc":"The mouse cursor for mouse pointers that are hovering over the region."},{"name":"opaque","type":"bool","required":true,"desc":"Whether this widget should prevent other [MouseRegion]s visually behind it from detecting the pointer."},{"name":"hitTestBehavior","type":"HitTestBehavior?","desc":"How to behave during hit testing."}],"id":293,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of MouseRegion","desc":["【onEnter】: Enter event 【PointerEnterEventListener】","【onHover】: Move event 【PointerHoverEventListener】","【onExit】: Exit event 【PointerExitEventListener】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_zh-CN.json new file mode 100644 index 000000000..93297b82a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_zh-CN.json @@ -0,0 +1 @@ +{"name":"MouseRegion","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"跟踪鼠标移动的小部件。","fields":[{"name":"onEnter","type":"PointerEnterEventListener?","desc":"鼠标指针进入此小部件时触发。"},{"name":"onHover","type":"PointerHoverEventListener?","desc":"指针在未按下按钮的情况下移动到此小部件内的位置时触发。"},{"name":"onExit","type":"PointerExitEventListener?","desc":"当小部件仍然挂载时,鼠标指针退出此小部件时触发。"},{"name":"cursor","type":"MouseCursor","required":true,"desc":"悬停在区域上的鼠标指针的鼠标光标。"},{"name":"opaque","type":"bool","required":true,"desc":"此小部件是否应阻止视觉上位于其后面的其他 [MouseRegion] 检测指针。"},{"name":"hitTestBehavior","type":"HitTestBehavior?","desc":"命中测试期间的行为方式。"}],"id":293,"localName":"鼠标区域","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MouseRegion基本使用","desc":["【onEnter】 : 移入事件 【PointerEnterEventListener】","【onHover】: 移动事件 【PointerHoverEventListener】","【onExit】: 移出事件 【PointerExitEventListener】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_en-US.json new file mode 100644 index 000000000..f4f15aa8e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_en-US.json @@ -0,0 +1 @@ +{"name":"MultiChildRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A superclass for [RenderObjectWidget]s that configure [RenderObject] subclasses that have a single list of children. (This superclass only provides the storage for that child list, it doesn't actually provide the updating logic.)","fields":[{"name":"children","type":"List","required":true,"desc":"The widgets below this widget in the tree."}],"id":452,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_zh-CN.json new file mode 100644 index 000000000..50356a76d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"MultiChildRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"配置具有单个子项列表的 [RenderObject] 子类的 [RenderObjectWidget] 的超类。(此超类仅提供该子项列表的存储,实际上不提供更新逻辑。)","fields":[{"name":"children","type":"List","required":true,"desc":"树中此小部件下方的小部件。"}],"id":452,"localName":"MultiChildRenderObjectWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_en-US.json new file mode 100644 index 000000000..8a7af743b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_en-US.json @@ -0,0 +1 @@ +{"name":"NavigationBar","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":" Material 3 Navigation Bar component.","fields":[{"name":"animationDuration","type":"Duration?","desc":"Determines the transition time for each destination as it goes between selected and unselected."},{"name":"selectedIndex","type":"int","required":true,"desc":"Determines which one of the [destinations] is currently selected."},{"name":"destinations","type":"List","required":true,"desc":"The list of destinations (usually [NavigationDestination]s) in this [NavigationBar]."},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"Called when one of the [destinations] is selected."},{"name":"backgroundColor","type":"Color?","desc":"The color of the [NavigationBar] itself."},{"name":"elevation","type":"double?","desc":"The elevation of the [NavigationBar] itself."},{"name":"shadowColor","type":"Color?","desc":"The color used for the drop shadow to indicate elevation."},{"name":"surfaceTintColor","type":"Color?","desc":"The color used as an overlay on [backgroundColor] to indicate elevation."},{"name":"indicatorColor","type":"Color?","desc":"The color of the [indicatorShape] when this destination is selected."},{"name":"indicatorShape","type":"ShapeBorder?","desc":"The shape of the selected indicator."},{"name":"height","type":"double?","desc":"The height of the [NavigationBar] itself."},{"name":"labelBehavior","type":"NavigationDestinationLabelBehavior?","desc":"Defines how the [destinations]' labels will be laid out and when they'll be displayed."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The highlight color that's typically used to indicate that the [NavigationDestination] is focused, hovered, or pressed."},{"name":"labelTextStyle","type":"MaterialStateProperty?","desc":"/ The text style of the label."},{"name":"labelPadding","type":"EdgeInsetsGeometry?","desc":"The padding around the [NavigationDestination.label] widget."},{"name":"maintainBottomViewPadding","type":"bool","required":true,"desc":"Specifies whether the underlying [SafeArea] should maintain the bottom [MediaQueryData.viewPadding] instead of the bottom [MediaQueryData.padding]."}],"id":453,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_zh-CN.json new file mode 100644 index 000000000..22c80b38f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"NavigationBar","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":"Material 3 导航栏组件。","fields":[{"name":"animationDuration","type":"Duration?","desc":"确定每个目标在选中和未选中之间转换的过渡时间。"},{"name":"selectedIndex","type":"int","required":true,"desc":"确定当前选择了 [destinations] 中的哪一个。"},{"name":"destinations","type":"List","required":true,"desc":"此 [NavigationBar] 中的目标列表(通常是 [NavigationDestination])。"},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"选择 [destinations] 之一时调用。"},{"name":"backgroundColor","type":"Color?","desc":"[NavigationBar] 本身的颜色。"},{"name":"elevation","type":"double?","desc":"[NavigationBar] 本身的高度。"},{"name":"shadowColor","type":"Color?","desc":"用于指示高度的投影颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"用作 [backgroundColor] 上的覆盖以指示高度的颜色。"},{"name":"indicatorColor","type":"Color?","desc":"选择此目标时 [indicatorShape] 的颜色。"},{"name":"indicatorShape","type":"ShapeBorder?","desc":"选中指示器的形状。"},{"name":"height","type":"double?","desc":"[NavigationBar] 本身的高度。"},{"name":"labelBehavior","type":"NavigationDestinationLabelBehavior?","desc":"定义 [destinations] 的标签如何布局以及何时显示。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"通常用于指示 [NavigationDestination] 被聚焦、悬停或按下的高亮颜色。"},{"name":"labelTextStyle","type":"MaterialStateProperty?","desc":"标签的文本样式。"},{"name":"labelPadding","type":"EdgeInsetsGeometry?","desc":"[NavigationDestination.label] 小部件周围的内边距。"},{"name":"maintainBottomViewPadding","type":"bool","required":true,"desc":"指定底层 [SafeArea] 是否应维护底部 [MediaQueryData.viewPadding] 而不是底部 [MediaQueryData.padding]。"}],"id":453,"localName":"NavigationBar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_en-US.json new file mode 100644 index 000000000..1c58c9af7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_en-US.json @@ -0,0 +1 @@ +{"name":"NavigationBarTheme","path":"/src/material/navigation_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines visual properties for [NavigationBar]s and [NavigationDestination]s in this widget's subtree.","fields":[{"name":"data","type":"NavigationBarThemeData","required":true,"desc":"Specifies the background color, label text style, icon theme, and label type values for descendant [NavigationBar] widgets."}],"id":454,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_zh-CN.json new file mode 100644 index 000000000..c1ea99857 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"NavigationBarTheme","path":"/src/material/navigation_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [NavigationBar] 和 [NavigationDestination] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"NavigationBarThemeData","required":true,"desc":"为后代 [NavigationBar] 小部件指定背景颜色、标签文本样式、图标主题和标签类型值。"}],"id":454,"localName":"NavigationBarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_en-US.json new file mode 100644 index 000000000..864bc46b0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_en-US.json @@ -0,0 +1 @@ +{"name":"NavigationDestination","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":" A Material 3 [NavigationBar] destination.","fields":[{"name":"icon","type":"Widget","required":true,"desc":"The [Widget] (usually an [Icon]) that's displayed for this [NavigationDestination]."},{"name":"selectedIcon","type":"Widget?","desc":"The optional [Widget] (usually an [Icon]) that's displayed when this [NavigationDestination] is selected."},{"name":"label","type":"String","required":true,"desc":"The text label that appears below the icon of this [NavigationDestination]."},{"name":"tooltip","type":"String?","desc":"The text to display in the tooltip for this [NavigationDestination], when the user long presses the destination."},{"name":"enabled","type":"bool","required":true,"desc":"Indicates that this destination is selectable."}],"id":455,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_zh-CN.json new file mode 100644 index 000000000..394deffc7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_zh-CN.json @@ -0,0 +1 @@ +{"name":"NavigationDestination","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":"Material 3 [NavigationBar] 目标。","fields":[{"name":"icon","type":"Widget","required":true,"desc":"为此 [NavigationDestination] 显示的 [Widget](通常是 [Icon])。"},{"name":"selectedIcon","type":"Widget?","desc":"选择此 [NavigationDestination] 时显示的可选 [Widget](通常是 [Icon])。"},{"name":"label","type":"String","required":true,"desc":"出现在此 [NavigationDestination] 图标下方的文本标签。"},{"name":"tooltip","type":"String?","desc":"当用户长按目标时,在此 [NavigationDestination] 的工具提示中显示的文本。"},{"name":"enabled","type":"bool","required":true,"desc":"指示此目标是否可选择。"}],"id":455,"localName":"NavigationDestination","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_en-US.json new file mode 100644 index 000000000..5676ab70d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_en-US.json @@ -0,0 +1 @@ +{"name":"NavigationDrawer","path":"/src/material/navigation_drawer.dart","parents":["StatelessWidget","Widget"],"desc":" Material Design Navigation Drawer component.","fields":[{"name":"backgroundColor","type":"Color?","desc":"The background color of the [Material] that holds the [NavigationDrawer]'s contents."},{"name":"shadowColor","type":"Color?","desc":"The color used for the drop shadow to indicate elevation."},{"name":"surfaceTintColor","type":"Color?","desc":"The surface tint of the [Material] that holds the [NavigationDrawer]'s contents."},{"name":"elevation","type":"double?","desc":"The elevation of the [NavigationDrawer] itself."},{"name":"indicatorColor","type":"Color?","desc":"The color of the [indicatorShape] when this destination is selected."},{"name":"indicatorShape","type":"ShapeBorder?","desc":"The shape of the selected indicator."},{"name":"children","type":"List","required":true,"desc":"Defines the appearance of the items within the navigation drawer."},{"name":"selectedIndex","type":"int?","desc":"The index into destinations for the current selected [NavigationDrawerDestination] or null if no destination is selected."},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"Called when one of the [NavigationDrawerDestination] children is selected."},{"name":"tilePadding","type":"EdgeInsetsGeometry","required":true,"desc":"Defines the padding for [NavigationDrawerDestination] widgets (Drawer items)."}],"id":456,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_zh-CN.json new file mode 100644 index 000000000..d6337801c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_zh-CN.json @@ -0,0 +1 @@ +{"name":"NavigationDrawer","path":"/src/material/navigation_drawer.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 导航抽屉组件。","fields":[{"name":"backgroundColor","type":"Color?","desc":"保存 [NavigationDrawer] 内容的 [Material] 的背景颜色。"},{"name":"shadowColor","type":"Color?","desc":"用于指示高度的投影颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"保存 [NavigationDrawer] 内容的 [Material] 的表面色调。"},{"name":"elevation","type":"double?","desc":"[NavigationDrawer] 本身的高度。"},{"name":"indicatorColor","type":"Color?","desc":"选择此目标时 [indicatorShape] 的颜色。"},{"name":"indicatorShape","type":"ShapeBorder?","desc":"选中指示器的形状。"},{"name":"children","type":"List","required":true,"desc":"定义导航抽屉内项目的外观。"},{"name":"selectedIndex","type":"int?","desc":"当前选择的 [NavigationDrawerDestination] 在目标中的索引,如果没有选择目标则为 null。"},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"选择 [NavigationDrawerDestination] 子项之一时调用。"},{"name":"tilePadding","type":"EdgeInsetsGeometry","required":true,"desc":"定义 [NavigationDrawerDestination] 小部件(抽屉项)的内边距。"}],"id":456,"localName":"NavigationDrawer","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_en-US.json new file mode 100644 index 000000000..82a68a261 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_en-US.json @@ -0,0 +1 @@ +{"name":"NavigationDrawerDestination","path":"/src/material/navigation_drawer.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design [NavigationDrawer] destination.","fields":[{"name":"backgroundColor","type":"Color?","desc":"The background color of the destination."},{"name":"icon","type":"Widget","required":true,"desc":"The [Widget] (usually an [Icon]) that's displayed for this [NavigationDestination]."},{"name":"selectedIcon","type":"Widget?","desc":"The optional [Widget] (usually an [Icon]) that's displayed when this [NavigationDestination] is selected."},{"name":"label","type":"Widget","required":true,"desc":"The text label that appears on the right of the icon"},{"name":"enabled","type":"bool","required":true,"desc":"Indicates that this destination is selectable."}],"id":457,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_zh-CN.json new file mode 100644 index 000000000..b51118076 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_zh-CN.json @@ -0,0 +1 @@ +{"name":"NavigationDrawerDestination","path":"/src/material/navigation_drawer.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design [NavigationDrawer] 目标。","fields":[{"name":"backgroundColor","type":"Color?","desc":"目标的背景颜色。"},{"name":"icon","type":"Widget","required":true,"desc":"为此 [NavigationDestination] 显示的 [Widget](通常是 [Icon])。"},{"name":"selectedIcon","type":"Widget?","desc":"选择此 [NavigationDestination] 时显示的可选 [Widget](通常是 [Icon])。"},{"name":"label","type":"Widget","required":true,"desc":"出现在图标右侧的文本标签"},{"name":"enabled","type":"bool","required":true,"desc":"指示此目标是否可选择。"}],"id":457,"localName":"NavigationDrawerDestination","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_en-US.json new file mode 100644 index 000000000..3782b98d1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_en-US.json @@ -0,0 +1 @@ +{"name":"NavigationDrawerTheme","path":"/src/material/navigation_drawer_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines visual properties for [NavigationDrawer]s and [NavigationDestination]s in this widget's subtree.","fields":[{"name":"data","type":"NavigationDrawerThemeData","required":true,"desc":"Specifies the background color, label text style, icon theme, and label type values for descendant [NavigationDrawer] widgets."}],"id":458,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_zh-CN.json new file mode 100644 index 000000000..c098b8675 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"NavigationDrawerTheme","path":"/src/material/navigation_drawer_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [NavigationDrawer] 和 [NavigationDestination] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"NavigationDrawerThemeData","required":true,"desc":"为后代 [NavigationDrawer] 小部件指定背景颜色、标签文本样式、图标主题和标签类型值。"}],"id":458,"localName":"NavigationDrawerTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_en-US.json new file mode 100644 index 000000000..9d688f305 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_en-US.json @@ -0,0 +1 @@ +{"name":"NavigationIndicator","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":" Selection Indicator for the Material 3 [NavigationBar] and [NavigationRail] components.","fields":[{"name":"animation","type":"Animation","required":true,"desc":"Determines the scale of the indicator."},{"name":"color","type":"Color?","desc":"The fill color of this indicator."},{"name":"width","type":"double","required":true,"desc":"The width of this indicator."},{"name":"height","type":"double","required":true,"desc":"The height of this indicator."},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"The border radius of the shape of the indicator."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the indicator."}],"id":459,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_zh-CN.json new file mode 100644 index 000000000..1c2143191 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_zh-CN.json @@ -0,0 +1 @@ +{"name":"NavigationIndicator","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":"Material 3 [NavigationBar] 和 [NavigationRail] 组件的选择指示器。","fields":[{"name":"animation","type":"Animation","required":true,"desc":"确定指示器的比例。"},{"name":"color","type":"Color?","desc":"此指示器的填充颜色。"},{"name":"width","type":"double","required":true,"desc":"此指示器的宽度。"},{"name":"height","type":"double","required":true,"desc":"此指示器的高度。"},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"指示器形状的边框半径。"},{"name":"shape","type":"ShapeBorder?","desc":"指示器的形状。"}],"id":459,"localName":"NavigationIndicator","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_en-US.json new file mode 100644 index 000000000..f99294773 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_en-US.json @@ -0,0 +1 @@ +{"name":"NavigationRail","path":"/src/material/navigation_rail.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design widget that is meant to be displayed at the left or right of an app to navigate between a small number of views, typically between three and five.","fields":[{"name":"backgroundColor","type":"Color?","desc":"Sets the color of the Container that holds all of the [NavigationRail]'s contents."},{"name":"extended","type":"bool","required":true,"desc":"Indicates that the [NavigationRail] should be in the extended state."},{"name":"leading","type":"Widget?","desc":"The leading widget in the rail that is placed above the destinations."},{"name":"trailing","type":"Widget?","desc":"The trailing widget in the rail that is placed below the destinations."},{"name":"destinations","type":"List","required":true,"desc":"Defines the appearance of the button items that are arrayed within the navigation rail."},{"name":"selectedIndex","type":"int?","desc":"The index into [destinations] for the current selected [NavigationRailDestination] or null if no destination is selected."},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"Called when one of the [destinations] is selected."},{"name":"elevation","type":"double?","desc":"The rail's elevation or z-coordinate."},{"name":"groupAlignment","type":"double?","desc":"The vertical alignment for the group of [destinations] within the rail."},{"name":"labelType","type":"NavigationRailLabelType?","desc":"Defines the layout and behavior of the labels for the default, unextended [NavigationRail]."},{"name":"unselectedLabelTextStyle","type":"TextStyle?","desc":"The [TextStyle] of a destination's label when it is unselected."},{"name":"selectedLabelTextStyle","type":"TextStyle?","desc":"The [TextStyle] of a destination's label when it is selected."},{"name":"unselectedIconTheme","type":"IconThemeData?","desc":"The visual properties of the icon in the unselected destination."},{"name":"selectedIconTheme","type":"IconThemeData?","desc":"The visual properties of the icon in the selected destination."},{"name":"minWidth","type":"double?","desc":"The smallest possible width for the rail regardless of the destination's icon or label size."},{"name":"minExtendedWidth","type":"double?","desc":"The final width when the animation is complete for setting [extended] to true."},{"name":"useIndicator","type":"bool?","desc":"If `true`, adds a rounded [NavigationIndicator] behind the selected destination's icon."},{"name":"indicatorColor","type":"Color?","desc":"Overrides the default value of [NavigationRail]'s selection indicator color, when [useIndicator] is true."},{"name":"indicatorShape","type":"ShapeBorder?","desc":"Overrides the default value of [NavigationRail]'s selection indicator shape, when [useIndicator] is true."}],"id":358,"lever":4,"family":1,"linkIds":[60,61],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of NavigationRail","desc":["【destinations】 : Menu data list 【List】","【selectedIndex】: Active index 【int】","【labelType】: Label style 【NavigationRailLabelType?】","【onDestinationSelected】: Menu click event 【ValueChanged?】"]},{"file":"node2_extend.dart","name":"Collapse Effect of NavigationRail","desc":["【elevation】 : Shadow depth 【double】","【leading】: Leading component 【Widget?】","【trailing】: Trailing component 【Widget?】","【extended】: Whether to expand 【bool】"]},{"file":"node3_dark.dart","name":"NavigationRail Style","desc":["【useIndicator】 : Whether to show the indicator 【bool】","【indicatorColor】: Indicator color 【Color?】","【backgroundColor】: Background color 【Color?】","【labelType】: Label style 【NavigationRailLabelType?】","【selectedIconTheme】: Selected icon style 【IconThemeData?】","【unselectedIconTheme】: Unselected icon style 【IconThemeData?】","【selectedLabelTextStyle】: Selected text style 【TextStyle?】","【unselectedLabelTextStyle】: Unselected text style 【TextStyle?】","【minExtendedWidth】: Expanded width 【double?】","【minWidth】: Unexpanded width 【double?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_zh-CN.json new file mode 100644 index 000000000..cb8a95a5b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_zh-CN.json @@ -0,0 +1 @@ +{"name":"NavigationRail","path":"/src/material/navigation_rail.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 小部件,旨在显示在应用程序的左侧或右侧,用于在少数视图之间导航,通常在三到五个之间。","fields":[{"name":"backgroundColor","type":"Color?","desc":"设置包含所有 [NavigationRail] 内容的容器的颜色。"},{"name":"extended","type":"bool","required":true,"desc":"指示 [NavigationRail] 应处于扩展状态。"},{"name":"leading","type":"Widget?","desc":"导航栏中位于目标上方的前导小部件。"},{"name":"trailing","type":"Widget?","desc":"导航栏中位于目标下方的尾随小部件。"},{"name":"destinations","type":"List","required":true,"desc":"定义导航栏内排列的按钮项的外观。"},{"name":"selectedIndex","type":"int?","desc":"当前选择的 [NavigationRailDestination] 在 [destinations] 中的索引,如果没有选择目标则为 null。"},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"选择 [destinations] 之一时调用。"},{"name":"elevation","type":"double?","desc":"导航栏的高度或 z 坐标。"},{"name":"groupAlignment","type":"double?","desc":"导航栏内 [destinations] 组的垂直对齐。"},{"name":"labelType","type":"NavigationRailLabelType?","desc":"定义默认、未扩展 [NavigationRail] 的标签布局和行为。"},{"name":"unselectedLabelTextStyle","type":"TextStyle?","desc":"目标未选择时其标签的 [TextStyle]。"},{"name":"selectedLabelTextStyle","type":"TextStyle?","desc":"目标选择时其标签的 [TextStyle]。"},{"name":"unselectedIconTheme","type":"IconThemeData?","desc":"未选择目标中图标的视觉属性。"},{"name":"selectedIconTheme","type":"IconThemeData?","desc":"选择目标中图标的视觉属性。"},{"name":"minWidth","type":"double?","desc":"无论目标的图标或标签大小如何,导航栏的最小可能宽度。"},{"name":"minExtendedWidth","type":"double?","desc":"将 [extended] 设置为 true 的动画完成时的最终宽度。"},{"name":"useIndicator","type":"bool?","desc":"如果为 `true`,在选定目标的图标后面添加圆形 [NavigationIndicator]。"},{"name":"indicatorColor","type":"Color?","desc":"当 [useIndicator] 为 true 时,覆盖 [NavigationRail] 选择指示器颜色的默认值。"},{"name":"indicatorShape","type":"ShapeBorder?","desc":"当 [useIndicator] 为 true 时,覆盖 [NavigationRail] 选择指示器形状的默认值。"}],"id":358,"localName":"侧栏导航","lever":4,"family":1,"linkIds":[60,61],"nodes":[{"file":"node1_base.dart","name":"NavigationRail 基本使用","desc":["【destinations】 : 菜单数据列表 【List】","【selectedIndex】: 激活索引 【int】","【labelType】: 标签样式 【NavigationRailLabelType?】","【onDestinationSelected】: 菜单点击事件 【ValueChanged?】"]},{"file":"node2_extend.dart","name":"NavigationRail 折叠效果","desc":["【elevation】 : 影深 【double】","【leading】: 首组件 【Widget?】","【trailing】: 尾组件 【Widget?】","【extended】: 是否展开 【bool】"]},{"file":"node3_dark.dart","name":"NavigationRail 样式","desc":["【useIndicator】 : 是否显示指示器 【bool】","【indicatorColor】: 指示器颜色 【Color?】","【backgroundColor】: 背景色 【Color?】","【labelType】: 标签样式 【NavigationRailLabelType?】","【selectedIconTheme】: 选中图标样式 【IconThemeData?】","【unselectedIconTheme】: 未选中图标样式 【IconThemeData?】","【selectedLabelTextStyle】: 选中文字样式 【TextStyle?】","【unselectedLabelTextStyle】: 未选中文字样式 【TextStyle?】","【minExtendedWidth】: 展开宽度 【double?】","【minWidth】: 未展开宽度 【double?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_en-US.json new file mode 100644 index 000000000..62f06a59e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_en-US.json @@ -0,0 +1 @@ +{"name":"NavigationRailTheme","path":"/src/material/navigation_rail_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines visual properties for [NavigationRail]s and [NavigationRailDestination]s in this widget's subtree.","fields":[{"name":"data","type":"NavigationRailThemeData","required":true,"desc":"Specifies the background color, elevation, label text style, icon theme, group alignment, and label type and border values for descendant [NavigationRail] widgets."}],"id":460,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_zh-CN.json new file mode 100644 index 000000000..81519f8f1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"NavigationRailTheme","path":"/src/material/navigation_rail_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [NavigationRail] 和 [NavigationRailDestination] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"NavigationRailThemeData","required":true,"desc":"为后代 [NavigationRail] 小部件指定背景颜色、高度、标签文本样式、图标主题、组对齐以及标签类型和边框值。"}],"id":460,"localName":"NavigationRailTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_en-US.json new file mode 100644 index 000000000..0b61d4088 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_en-US.json @@ -0,0 +1 @@ +{"name":"NavigationToolbar","path":"/src/widgets/navigation_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" [NavigationToolbar] is a layout helper to position 3 widgets or groups of widgets along a horizontal axis that's sensible for an application's navigation bar such as in Material Design and in iOS.","fields":[{"name":"leading","type":"Widget?","desc":"Widget to place at the start of the horizontal toolbar."},{"name":"middle","type":"Widget?","desc":"Widget to place in the middle of the horizontal toolbar, occupying as much remaining space as possible."},{"name":"trailing","type":"Widget?","desc":"Widget to place at the end of the horizontal toolbar."},{"name":"centerMiddle","type":"bool","required":true,"desc":"Whether to align the [middle] widget to the center of this widget or next to the [leading] widget when false."},{"name":"middleSpacing","type":"double","required":true,"desc":"The spacing around the [middle] widget on horizontal axis."}],"id":214,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of NavigationToolbar","desc":["【leading】: Left component 【Widget】","【middle】: Middle component 【Widget】","【trailing】: Right component 【Widget】","【centerMiddle】: Whether the middle component is centered 【bool】","【middleSpacing】: Distance of the middle component from the left 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_zh-CN.json new file mode 100644 index 000000000..67356dbb2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_zh-CN.json @@ -0,0 +1 @@ +{"name":"NavigationToolbar","path":"/src/widgets/navigation_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"[NavigationToolbar] 是一个布局助手,用于沿水平轴定位 3 个小部件或小部件组,这对于应用程序的导航栏(如 Material Design 和 iOS 中)是合理的。","fields":[{"name":"leading","type":"Widget?","desc":"放置在水平工具栏开始处的小部件。"},{"name":"middle","type":"Widget?","desc":"放置在水平工具栏中间的小部件,占用尽可能多的剩余空间。"},{"name":"trailing","type":"Widget?","desc":"放置在水平工具栏末端的小部件。"},{"name":"centerMiddle","type":"bool","required":true,"desc":"是否将 [middle] 小部件对齐到此小部件的中心,或者当为 false 时对齐到 [leading] 小部件旁边。"},{"name":"middleSpacing","type":"double","required":true,"desc":"水平轴上 [middle] 小部件周围的间距。"}],"id":214,"localName":"导航工具条","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"NavigationToolbar基本使用","desc":["【leading】 : 左侧组件 【Widget】","【middle】: 中间组件 【Widget】","【trailing】: 右侧组件组件 【Widget】","【centerMiddle】: 中间组件是否居中 【bool】","【middleSpacing】: 中间组件距左距离 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_en-US.json b/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_en-US.json new file mode 100644 index 000000000..25eac2c66 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_en-US.json @@ -0,0 +1 @@ +{"name":"Navigator","path":"/src/widgets/navigator.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that manages a set of child widgets with a stack discipline.","fields":[{"name":"pages","type":"List>","required":true,"desc":"The list of pages with which to populate the history."},{"name":"onPopPage","type":"PopPageCallback?","desc":"This is deprecated and replaced by [onDidRemovePage]."},{"name":"onDidRemovePage","type":"DidRemovePageCallback?","desc":"Called when the [Route] associated with the given [Page] has been removed from the Navigator."},{"name":"transitionDelegate","type":"TransitionDelegate","required":true,"desc":"The delegate used for deciding how routes transition in or off the screen during the [pages] updates."},{"name":"initialRoute","type":"String?","desc":"The name of the first route to show."},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"Called to generate a route for a given [RouteSettings]."},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"Called when [onGenerateRoute] fails to generate a route."},{"name":"observers","type":"List","required":true,"desc":"A list of observers for this navigator."},{"name":"restorationScopeId","type":"String?","desc":"Restoration ID to save and restore the state of the navigator, including its history."},{"name":"routeTraversalEdgeBehavior","type":"TraversalEdgeBehavior","required":true,"desc":"Controls the transfer of focus beyond the first and the last items of a focus scope that defines focus traversal of widgets within a route."},{"name":"routeDirectionalTraversalEdgeBehavior","type":"TraversalEdgeBehavior","required":true,"desc":"Controls the directional transfer of focus beyond the first and the last items of a focus scope that defines focus traversal of widgets within a route."},{"name":"onGenerateInitialRoutes","type":"RouteListFactory","required":true,"desc":"Called when the widget is created to generate the initial list of [Route] objects if [initialRoute] is not null."},{"name":"reportsRouteUpdateToEngine","type":"bool","required":true,"desc":"Whether this navigator should report route update message back to the engine when the top-most route changes."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"requestFocus","type":"bool","required":true,"desc":"Whether or not the navigator and it's new topmost route should request focus when the new route is pushed onto the navigator."}],"id":232,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Navigator","desc":["【initialRoute】: Initial display route 【String】","【onGenerateRoute】: Route generator 【RouteFactory】","【observers】: Route observers 【List】","【onPopPage】: Pop page callback 【PopPageCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_zh-CN.json new file mode 100644 index 000000000..188ee00dc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_zh-CN.json @@ -0,0 +1 @@ +{"name":"Navigator","path":"/src/widgets/navigator.dart","parents":["StatefulWidget","Widget"],"desc":"使用堆栈规则管理一组子小部件的小部件。","fields":[{"name":"pages","type":"List>","required":true,"desc":"用于填充历史记录的页面列表。"},{"name":"onPopPage","type":"PopPageCallback?","desc":"这已弃用并被 [onDidRemovePage] 替换。"},{"name":"onDidRemovePage","type":"DidRemovePageCallback?","desc":"当与给定 [Page] 关联的 [Route] 从 Navigator 中移除时调用。"},{"name":"transitionDelegate","type":"TransitionDelegate","required":true,"desc":"用于决定在 [pages] 更新期间路由如何进入或离开屏幕的委托。"},{"name":"initialRoute","type":"String?","desc":"要显示的第一个路由的名称。"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"调用以为给定的 [RouteSettings] 生成路由。"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"当 [onGenerateRoute] 无法生成路由时调用。"},{"name":"observers","type":"List","required":true,"desc":"此导航器的观察者列表。"},{"name":"restorationScopeId","type":"String?","desc":"保存和恢复导航器状态(包括其历史记录)的恢复 ID。"},{"name":"routeTraversalEdgeBehavior","type":"TraversalEdgeBehavior","required":true,"desc":"控制焦点在定义路由内小部件焦点遍历的焦点范围的第一个和最后一个项目之外的传递。"},{"name":"routeDirectionalTraversalEdgeBehavior","type":"TraversalEdgeBehavior","required":true,"desc":"控制焦点在定义路由内小部件焦点遍历的焦点范围的第一个和最后一个项目之外的方向传递。"},{"name":"onGenerateInitialRoutes","type":"RouteListFactory","required":true,"desc":"如果 [initialRoute] 不为 null,在创建小部件时调用以生成初始 [Route] 对象列表。"},{"name":"reportsRouteUpdateToEngine","type":"bool","required":true,"desc":"当最顶层路由更改时,此导航器是否应向引擎报告路由更新消息。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"requestFocus","type":"bool","required":true,"desc":"当新路由被推送到导航器上时,导航器及其新的最顶层路由是否应请求焦点。"}],"id":232,"localName":"导航器","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Navigator基本用法","desc":["【initialRoute】 : 最初显示路由 【String】","【onGenerateRoute】 : 路由生成器 【RouteFactory】","【observers】 : 路由监听器 【List】","【onPopPage】 : 出栈回调 【PopPageCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_en-US.json new file mode 100644 index 000000000..f6ca0c2a4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_en-US.json @@ -0,0 +1 @@ +{"name":"NavigatorPopHandler","path":"/src/widgets/navigator_pop_handler.dart","parents":["StatefulWidget","Widget"],"desc":" Enables the handling of system back gestures.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget to place below this in the widget tree."},{"name":"enabled","type":"bool","required":true,"desc":"Whether this widget's ability to handle system back gestures is enabled or disabled."},{"name":"onPop","type":"VoidCallback?","desc":"Called when a handleable pop event happens."},{"name":"onPopWithResult","type":"PopResultCallback?","desc":"Called when a handleable pop event happens."}],"id":461,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_zh-CN.json new file mode 100644 index 000000000..7f7656d87 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_zh-CN.json @@ -0,0 +1 @@ +{"name":"NavigatorPopHandler","path":"/src/widgets/navigator_pop_handler.dart","parents":["StatefulWidget","Widget"],"desc":"启用系统返回手势的处理。","fields":[{"name":"child","type":"Widget","required":true,"desc":"在小部件树中放置在此下方的小部件。"},{"name":"enabled","type":"bool","required":true,"desc":"此小部件处理系统返回手势的能力是启用还是禁用。"},{"name":"onPop","type":"VoidCallback?","desc":"发生可处理的弹出事件时调用。"},{"name":"onPopWithResult","type":"PopResultCallback?","desc":"发生可处理的弹出事件时调用。"}],"id":461,"localName":"NavigatorPopHandler","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_en-US.json new file mode 100644 index 000000000..e3262f552 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_en-US.json @@ -0,0 +1 @@ +{"name":"NestedScrollView","path":"/src/widgets/nested_scroll_view.dart","parents":["StatefulWidget","Widget"],"desc":" A scrolling view inside of which can be nested other scrolling views, with their scroll positions being intrinsically linked.","fields":[{"name":"controller","type":"ScrollController?","desc":"An object that can be used to control the position to which the outer scroll view is scrolled."},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"Whether the scroll view scrolls in the reading direction."},{"name":"physics","type":"ScrollPhysics?","desc":"How the scroll view should respond to user input."},{"name":"headerSliverBuilder","type":"NestedScrollViewHeaderSliversBuilder","required":true,"desc":"A builder for any widgets that are to precede the inner scroll views (as given by [body])."},{"name":"body","type":"Widget","required":true,"desc":"The widget to show inside the [NestedScrollView]."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"floatHeaderSlivers","type":"bool","required":true,"desc":"Whether or not the [NestedScrollView]'s coordinator should prioritize the outer scrollable over the inner when scrolling back."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"}],"id":251,"lever":4,"family":4,"linkIds":[183,344],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of NestedScrollView","desc":["【controller】 : Scroll Controller 【ScrollController】","【scrollDirection】 : Scroll Direction 【Axis】","【reverse】 : Whether to Reverse 【bool】","【physics】 : Scroll Physics 【ScrollPhysics】","【dragStartBehavior】 : Drag Start Behavior 【DragStartBehavior】","【headerSliverBuilder】 : *Header Builder 【NestedScrollViewHeaderSliversBuilder】","【body】 : *Content 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_zh-CN.json new file mode 100644 index 000000000..986339e49 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_zh-CN.json @@ -0,0 +1 @@ +{"name":"NestedScrollView","path":"/src/widgets/nested_scroll_view.dart","parents":["StatefulWidget","Widget"],"desc":"一个滚动视图,其中可以嵌套其他滚动视图,它们的滚动位置本质上是链接的。","fields":[{"name":"controller","type":"ScrollController?","desc":"可用于控制外部滚动视图滚动到的位置的对象。"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"滚动视图是否在阅读方向上滚动。"},{"name":"physics","type":"ScrollPhysics?","desc":"滚动视图应如何响应用户输入。"},{"name":"headerSliverBuilder","type":"NestedScrollViewHeaderSliversBuilder","required":true,"desc":"用于构建在内部滚动视图(由 [body] 给出)之前的任何小部件的构建器。"},{"name":"body","type":"Widget","required":true,"desc":"在 [NestedScrollView] 内显示的小部件。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"floatHeaderSlivers","type":"bool","required":true,"desc":"[NestedScrollView] 的协调器在向后滚动时是否应优先考虑外部可滚动而不是内部。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"}],"id":251,"localName":"嵌套滑动视图","lever":4,"family":4,"linkIds":[183,344],"nodes":[{"file":"node1_base.dart","name":"NestedScrollView基本用法","desc":["【controller】 : 滑动控制器 【ScrollController】","【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向 【bool】","【physics】 : 滑顶样式 【ScrollPhysics】","【dragStartBehavior】 : 开始拖动行为 【DragStartBehavior】","【headerSliverBuilder】 : *头部构造器 【NestedScrollViewHeaderSliversBuilder】","【body】 : *内容 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_en-US.json b/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_en-US.json new file mode 100644 index 000000000..2829f5729 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_en-US.json @@ -0,0 +1 @@ +{"name":"NestedScrollViewViewport","path":"/src/widgets/nested_scroll_view.dart","parents":["Viewport","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" The [Viewport] variant used by [NestedScrollView].","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"The handle to the [SliverOverlapAbsorber] that is feeding this injector."}],"id":344,"lever":1,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to NestedScrollViewViewport","desc":["【offset】 : *Offset 【ViewportOffset】","【handle】 : *Handle 【SliverOverlapAbsorberHandle】","【axisDirection】 : Axis Direction 【AxisDirection】","【crossAxisDirection】 : Cross Axis Direction 【AxisDirection】","【slivers】 : Child Components 【List】","【clipBehavior】 : Clip Behavior 【Clip】","【anchor】 : Anchor 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_zh-CN.json new file mode 100644 index 000000000..b6e6e2208 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_zh-CN.json @@ -0,0 +1 @@ +{"name":"NestedScrollViewViewport","path":"/src/widgets/nested_scroll_view.dart","parents":["Viewport","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"[NestedScrollView] 使用的 [Viewport] 变体。","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"正在为此注入器提供数据的 [SliverOverlapAbsorber] 的句柄。"}],"id":344,"localName":"嵌套滑动视口","lever":1,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"NestedScrollViewViewport 介绍","desc":["【offset】 : *偏移 【ViewportOffset】","【handle】 : *处理器 【SliverOverlapAbsorberHandle】","【axisDirection】 : 轴向 【AxisDirection】","【crossAxisDirection】 : 交叉轴向 【AxisDirection】","【slivers】 : 子组件 【List】","【clipBehavior】 : 裁剪行为 【Clip】","【anchor】 : 锚点 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_en-US.json b/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_en-US.json new file mode 100644 index 000000000..983ef077c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_en-US.json @@ -0,0 +1 @@ +{"name":"NotificationListener","path":"/src/widgets/notification_listener.dart","parents":["ProxyWidget","Widget"],"desc":" A widget that listens for [Notification]s bubbling up the tree.","fields":[{"name":"onNotification","type":"NotificationListenerCallback?","desc":"Called when a notification of the appropriate type arrives at this location in the tree."}],"id":220,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Listen to OverscrollIndicatorNotification","desc":["This notification is called back when sliding to the top and bottom, and it is judged whether it is the top or bottom by the leading property. In addition, you can remove the blue shadow at the top and bottom sliding through notification#disallowGlow()."]},{"file":"node2_update.dart","name":"Listen to ScrollUpdateNotification","desc":["During the sliding process, the sliding data is called back, and you can obtain a large amount of data to operate."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_zh-CN.json new file mode 100644 index 000000000..aa445b5ea --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_zh-CN.json @@ -0,0 +1 @@ +{"name":"NotificationListener","path":"/src/widgets/notification_listener.dart","parents":["ProxyWidget","Widget"],"desc":"监听树中冒泡的 [Notification] 的小部件。","fields":[{"name":"onNotification","type":"NotificationListenerCallback?","desc":"当适当类型的通知到达树中的此位置时调用。"}],"id":220,"localName":"通知监听器","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"监听OverscrollIndicatorNotification","desc":["该通知之后在滑动到最顶和最底是回调,通过leading属性判断是顶部还是底部。另外通过notification#disallowGlow(),可以去除顶底滑动蓝色阴影"]},{"file":"node2_update.dart","name":"监听ScrollUpdateNotification","desc":["在滑动过程中对滑动数据进行回调,你可以获取大量数据来进行操作。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_en-US.json new file mode 100644 index 000000000..c4da0fe7f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_en-US.json @@ -0,0 +1 @@ +{"name":"ObstructingPreferredSizeWidget","path":"/src/cupertino/page_scaffold.dart","abstract":true,"parents":["Object","PreferredSizeWidget","Widget"],"desc":" Widget that has a preferred size and reports whether it fully obstructs widgets behind it.","fields":[],"id":462,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_zh-CN.json new file mode 100644 index 000000000..b8894a60e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"ObstructingPreferredSizeWidget","path":"/src/cupertino/page_scaffold.dart","abstract":true,"parents":["Object","PreferredSizeWidget","Widget"],"desc":"具有首选大小并报告是否完全阻挡其后面小部件的小部件。","fields":[],"id":462,"localName":"ObstructingPreferredSizeWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_en-US.json b/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_en-US.json new file mode 100644 index 000000000..b7354b4e6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_en-US.json @@ -0,0 +1 @@ +{"name":"Offstage","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that lays the child out as if it was in the tree, but without painting anything, without making the child available for hit testing, and without taking any room in the parent.","fields":[{"name":"offstage","type":"bool","required":true,"desc":"Whether the child is hidden from the rest of the tree."}],"id":71,"lever":3,"family":2,"linkIds":[10],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of LimitedBox","desc":["【child】: Child component 【Widget】","【offstage】: Whether to disappear 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_zh-CN.json new file mode 100644 index 000000000..9848c03fc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_zh-CN.json @@ -0,0 +1 @@ +{"name":"Offstage","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将子项布局为好像它在树中一样,但不绘制任何内容,不使子项可用于命中测试,也不在父项中占用任何空间的小部件。","fields":[{"name":"offstage","type":"bool","required":true,"desc":"子项是否从树的其余部分隐藏。"}],"id":71,"localName":"消失组件","lever":3,"family":2,"linkIds":[10],"nodes":[{"file":"node1_base.dart","name":"LimitedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【offstage】 : 是否消失 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_en-US.json b/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_en-US.json new file mode 100644 index 000000000..b7ee467dc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_en-US.json @@ -0,0 +1 @@ +{"name":"Opacity","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that makes its child partially transparent.","fields":[{"name":"opacity","type":"double","required":true,"desc":"The fraction to scale the child's alpha value."},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"Whether the semantic information of the children is always included."}],"id":73,"lever":3,"family":2,"linkIds":[89,118],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Opacity","desc":["【child】 : Child component 【Widget】","【opacity】 : Transparency 0~1 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_zh-CN.json new file mode 100644 index 000000000..00a4d91d3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_zh-CN.json @@ -0,0 +1 @@ +{"name":"Opacity","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使其子项部分透明的小部件。","fields":[{"name":"opacity","type":"double","required":true,"desc":"缩放子项 alpha 值的分数。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含子项的语义信息。"}],"id":73,"localName":"透明化","lever":3,"family":2,"linkIds":[89,118],"nodes":[{"file":"node1_base.dart","name":"Opacity基本使用","desc":["【child】 : 孩子组件 【Widget】","【opacity】 : 透明度0~1 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_en-US.json new file mode 100644 index 000000000..fbfb57493 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_en-US.json @@ -0,0 +1 @@ +{"name":"OrientationBuilder","path":"/src/widgets/orientation_builder.dart","parents":["StatelessWidget","Widget"],"desc":" Builds a widget tree that can depend on the parent widget's orientation (distinct from the device orientation).","fields":[{"name":"builder","type":"OrientationWidgetBuilder","required":true,"desc":"Builds the widgets below this widget given this widget's orientation."}],"id":203,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of OrientationBuilder","desc":["【builder】: Orientation component builder 【OrientationWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_zh-CN.json new file mode 100644 index 000000000..81018041c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_zh-CN.json @@ -0,0 +1 @@ +{"name":"OrientationBuilder","path":"/src/widgets/orientation_builder.dart","parents":["StatelessWidget","Widget"],"desc":"构建可以依赖于父小部件方向(与设备方向不同)的小部件树。","fields":[{"name":"builder","type":"OrientationWidgetBuilder","required":true,"desc":"根据此小部件的方向构建此小部件下方的小部件。"}],"id":203,"localName":"方向构造器","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"OrientationBuilder基本使用","desc":["【builder】 : 方向组件构造器 【OrientationWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_en-US.json b/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_en-US.json new file mode 100644 index 000000000..83894a74e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_en-US.json @@ -0,0 +1 @@ +{"name":"OutlinedButton","path":"/src/material/outlined_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":" A Material Design \"Outlined Button\"; essentially a [TextButton] with an outlined border.","fields":[],"id":355,"lever":3,"family":1,"linkIds":[353,27,354],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of OutlinedButton","desc":["【child】: Button content 【Widget】","【onPressed】: Click event 【VoidCallback】","【onLongPress】: Long press event 【VoidCallback】"]},{"file":"node2_style.dart","name":"OutlinedButton Style","desc":["【style】: Button style 【ButtonStyle】","【focusNode】: Focus 【FocusNode】","【clipBehavior】: Clip behavior 【Clip】","【autofocus】: Autofocus 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_zh-CN.json new file mode 100644 index 000000000..e34f90293 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"OutlinedButton","path":"/src/material/outlined_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":"Material Design \"轮廓按钮\";本质上是带有轮廓边框的 [TextButton]。","fields":[],"id":355,"localName":"边框按钮","lever":3,"family":1,"linkIds":[353,27,354],"nodes":[{"file":"node1_base.dart","name":"OutlinedButton基本使用","desc":["【child】 : 按钮内容 【Widget】","【onPressed】 : 点击事件 【VoidCallback】","【onLongPress】 : 长按事件 【VoidCallback】"]},{"file":"node2_style.dart","name":"OutlinedButton样式","desc":["【style】 : 按钮样式 【ButtonStyle】","【focusNode】 : 焦点 【FocusNode】","【clipBehavior】 : 裁剪行为 【Clip】","【autofocus】 : 自动聚焦 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_en-US.json new file mode 100644 index 000000000..087a19b86 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_en-US.json @@ -0,0 +1 @@ +{"name":"OutlinedButtonTheme","path":"/src/material/outlined_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [OutlinedButton] descendants.","fields":[{"name":"data","type":"OutlinedButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":463,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_zh-CN.json new file mode 100644 index 000000000..c3632eae8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"OutlinedButtonTheme","path":"/src/material/outlined_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [OutlinedButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"OutlinedButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":463,"localName":"OutlinedButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_en-US.json b/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_en-US.json new file mode 100644 index 000000000..d211c8881 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_en-US.json @@ -0,0 +1 @@ +{"name":"OverflowBar","path":"/src/widgets/overflow_bar.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that lays out its [children] in a row unless they \"overflow\" the available horizontal space, in which case it lays them out in a column instead.","fields":[{"name":"spacing","type":"double","required":true,"desc":"The width of the gap between [children] for the default horizontal layout."},{"name":"alignment","type":"MainAxisAlignment?","desc":"Defines the [children]'s horizontal layout according to the same rules as for [Row.mainAxisAlignment]."},{"name":"overflowSpacing","type":"double","required":true,"desc":"The height of the gap between [children] in the vertical \"overflow\" layout."},{"name":"overflowAlignment","type":"OverflowBarAlignment","required":true,"desc":"The horizontal alignment of the [children] within the vertical \"overflow\" layout."},{"name":"overflowDirection","type":"VerticalDirection","required":true,"desc":"Defines the order that the [children] appear in, if the horizontal layout overflows."},{"name":"textDirection","type":"TextDirection?","desc":"Determines the order that the [children] appear in for the default horizontal layout, and the interpretation of [OverflowBarAlignment.start] and [OverflowBarAlignment.end] for the vertical overflow layout."}],"id":464,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_zh-CN.json new file mode 100644 index 000000000..3f469dc70 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"OverflowBar","path":"/src/widgets/overflow_bar.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其 [children] 布局在一行中的小部件,除非它们溢出可用的水平空间,在这种情况下,它会将它们布局在一列中。","fields":[{"name":"spacing","type":"double","required":true,"desc":"默认水平布局中 [children] 之间间隙的宽度。"},{"name":"alignment","type":"MainAxisAlignment?","desc":"根据与 [Row.mainAxisAlignment] 相同的规则定义 [children] 的水平布局。"},{"name":"overflowSpacing","type":"double","required":true,"desc":"垂直"},{"name":"overflowAlignment","type":"OverflowBarAlignment","required":true,"desc":"垂直"},{"name":"overflowDirection","type":"VerticalDirection","required":true,"desc":"如果水平布局溢出,定义 [children] 出现的顺序。"},{"name":"textDirection","type":"TextDirection?","desc":"确定默认水平布局中 [children] 出现的顺序,以及垂直溢出布局中 [OverflowBarAlignment.start] 和 [OverflowBarAlignment.end] 的解释。"}],"id":464,"localName":"OverflowBar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_en-US.json b/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_en-US.json new file mode 100644 index 000000000..6848a88f1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_en-US.json @@ -0,0 +1 @@ +{"name":"OverflowBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that imposes different constraints on its child than it gets from its parent, possibly allowing the child to overflow the parent.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the child."},{"name":"minWidth","type":"double?","desc":"The minimum width constraint to give the child. Set this to null (the default) to use the constraint from the parent instead."},{"name":"maxWidth","type":"double?","desc":"The maximum width constraint to give the child. Set this to null (the default) to use the constraint from the parent instead."},{"name":"minHeight","type":"double?","desc":"The minimum height constraint to give the child. Set this to null (the default) to use the constraint from the parent instead."},{"name":"maxHeight","type":"double?","desc":"The maximum height constraint to give the child. Set this to null (the default) to use the constraint from the parent instead."},{"name":"fit","type":"OverflowBoxFit","required":true,"desc":"The way to size the render object."}],"id":83,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of OverflowBox","desc":["【child】: Child component 【Widget】","【minWidth】: Minimum width 【double】","【minHeight】: Minimum height 【double】","【maxHeight】: Maximum height 【double】","【maxWidth】: Maximum width 【double】","【alignment】: Alignment 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_zh-CN.json new file mode 100644 index 000000000..0410be0f3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_zh-CN.json @@ -0,0 +1 @@ +{"name":"OverflowBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对其子项施加与从其父项获得的约束不同的约束的小部件,可能允许子项溢出父项。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何对齐子项。"},{"name":"minWidth","type":"double?","desc":"给子项的最小宽度约束。将此设置为 null(默认值)以使用来自父项的约束。"},{"name":"maxWidth","type":"double?","desc":"给子项的最大宽度约束。将此设置为 null(默认值)以使用来自父项的约束。"},{"name":"minHeight","type":"double?","desc":"给子项的最小高度约束。将此设置为 null(默认值)以使用来自父项的约束。"},{"name":"maxHeight","type":"double?","desc":"给子项的最大高度约束。将此设置为 null(默认值)以使用来自父项的约束。"},{"name":"fit","type":"OverflowBoxFit","required":true,"desc":"调整渲染对象大小的方式。"}],"id":83,"localName":"溢出盒","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"OverflowBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【minWidth】 : 最小宽 【double】","【minHeight】 : 最小高 【double】","【maxHeight】 : 最大高 【double】","【maxWidth】 : 最大宽 【double】","【alignment】 : 对齐方式 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_en-US.json b/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_en-US.json new file mode 100644 index 000000000..d37a8f9d7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_en-US.json @@ -0,0 +1 @@ +{"name":"Overlay","path":"/src/widgets/overlay.dart","parents":["StatefulWidget","Widget"],"desc":" A stack of entries that can be managed independently.","fields":[{"name":"initialEntries","type":"List","required":true,"desc":"The entries to include in the overlay initially."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":182,"lever":5,"family":1,"linkIds":[265,266],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Overlay","desc":["Overlay.of(context).insert inserts a global component"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_zh-CN.json new file mode 100644 index 000000000..28d85c94f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_zh-CN.json @@ -0,0 +1 @@ +{"name":"Overlay","path":"/src/widgets/overlay.dart","parents":["StatefulWidget","Widget"],"desc":"可以独立管理的条目堆栈。","fields":[{"name":"initialEntries","type":"List","required":true,"desc":"最初包含在覆盖层中的条目。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":182,"localName":"悬浮组件","lever":5,"family":1,"linkIds":[265,266],"nodes":[{"file":"node1_base.dart","name":"Overlay基本使用","desc":["Overlay.of(context).insert插入全局组件"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_en-US.json b/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_en-US.json new file mode 100644 index 000000000..f456006c4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_en-US.json @@ -0,0 +1 @@ +{"name":"OverlayPortal","path":"/src/widgets/overlay.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that renders its overlay child on an [Overlay].","fields":[{"name":"controller","type":"OverlayPortalController","required":true,"desc":"The controller to show, hide and bring to top the overlay child."},{"name":"overlayChildBuilder","type":"WidgetBuilder","required":true,"desc":"A [WidgetBuilder] used to build a widget below this widget in the tree, that renders on the closest [Overlay]."},{"name":"child","type":"Widget?","desc":"A widget below this widget in the tree."}],"id":465,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_zh-CN.json new file mode 100644 index 000000000..b52bdf2cc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_zh-CN.json @@ -0,0 +1 @@ +{"name":"OverlayPortal","path":"/src/widgets/overlay.dart","parents":["StatefulWidget","Widget"],"desc":"在 [Overlay] 上渲染其覆盖子项的小部件。","fields":[{"name":"controller","type":"OverlayPortalController","required":true,"desc":"显示、隐藏和置顶覆盖子项的控制器。"},{"name":"overlayChildBuilder","type":"WidgetBuilder","required":true,"desc":"用于在树中此小部件下方构建小部件的 [WidgetBuilder],该小部件在最近的 [Overlay] 上渲染。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":465,"localName":"OverlayPortal","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Padding/Padding_en-US.json b/modules/widget_system/widgets/doc/widgets/Padding/Padding_en-US.json new file mode 100644 index 000000000..76ff9bef5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Padding/Padding_en-US.json @@ -0,0 +1 @@ +{"name":"Padding","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that insets its child by the given padding.","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the child."}],"id":74,"lever":4,"family":2,"linkIds":[1,191],"nodes":[{"file":"node1_all.dart","name":"Padding Equal Margin on All Sides","desc":["【child】: Child component 【Widget】","【padding】: Inner four-sided margin 【EdgeInsetsGeometry】","EdgeInsets.all is used to define the same margin on all four sides"]},{"file":"node2_only.dart","name":"Padding Individual Margin","desc":["EdgeInsets.only is used to define the same margin on all four sides"]},{"file":"node3_symmetric.dart","name":"Padding Directional Margin","desc":["EdgeInsets.symmetric is used to define horizontal and vertical margins"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Padding/Padding_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Padding/Padding_zh-CN.json new file mode 100644 index 000000000..1a6c23e98 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Padding/Padding_zh-CN.json @@ -0,0 +1 @@ +{"name":"Padding","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"通过给定的内边距插入其子项的小部件。","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"插入子项的空间量。"}],"id":74,"localName":"边距组件","lever":4,"family":2,"linkIds":[1,191],"nodes":[{"file":"node1_all.dart","name":"Padding四面等边距","desc":["【child】 : 孩子组件 【Widget】","【padding】 : 内四边距 【EdgeInsetsGeometry】\"","EdgeInsets.all用来限定相同的四边边距"]},{"file":"node2_only.dart","name":"Padding单独边距边距","desc":["EdgeInsets.only用来限定相同的四边边距"]},{"file":"node3_symmetric.dart","name":"Padding方向边距","desc":["EdgeInsets.symmetric用来限定水平和竖直方向的边距"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_en-US.json b/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_en-US.json new file mode 100644 index 000000000..03a4dc1e1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_en-US.json @@ -0,0 +1 @@ +{"name":"PageStorage","path":"/src/widgets/page_storage.dart","parents":["StatelessWidget","Widget"],"desc":" Establish a subtree in which widgets can opt into persisting states after being destroyed.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"bucket","type":"PageStorageBucket","required":true,"desc":"The page storage bucket to use for this subtree."}],"id":210,"lever":3,"family":0,"linkIds":[52,165],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PageStorage","desc":["【bucket】: Storage Area 【PageStorageBucket】","【child】: Child Widget 【Widget】","When switching interfaces and initializing components, the state will not be reset. As in the CountWidget example, the child component needs to read the state from the storage during initialization and write the state to the storage when changing the state. Additionally, MaterialApp already has PageStorage built-in, but you can also create your own PageStorage."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_zh-CN.json new file mode 100644 index 000000000..da56e4f7f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_zh-CN.json @@ -0,0 +1 @@ +{"name":"PageStorage","path":"/src/widgets/page_storage.dart","parents":["StatelessWidget","Widget"],"desc":"建立一个子树,其中小部件可以选择在被销毁后持久化状态。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"bucket","type":"PageStorageBucket","required":true,"desc":"用于此子树的页面存储桶。"}],"id":210,"localName":"页面存储器","lever":3,"family":0,"linkIds":[52,165],"nodes":[{"file":"node1_base.dart","name":"PageStorage基本使用","desc":["【bucket】 : 存储区 【PageStorageBucket】","【child】: 子组件 【Widget】","上面切换界面初始化组件时并不会将状态重置。如上CountWidget,子组件需要在初始化时从存储器中读取状态,在改变状态时将状态量写入存储器。另外,如果使用MaterialApp已经内置了PageStorage,不过你也可以创建PageStorage。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PageView/PageView_en-US.json b/modules/widget_system/widgets/doc/widgets/PageView/PageView_en-US.json new file mode 100644 index 000000000..2b5968560 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PageView/PageView_en-US.json @@ -0,0 +1 @@ +{"name":"PageView","path":"/src/widgets/page_view.dart","parents":["StatefulWidget","Widget"],"desc":" A scrollable list that works page by page.","fields":[{"name":"allowImplicitScrolling","type":"bool","required":true,"desc":"Controls whether the widget's pages will respond to [RenderObject.showOnScreen], which will allow for implicit accessibility scrolling."},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"The [Axis] along which the scroll view's offset increases with each page."},{"name":"reverse","type":"bool","required":true,"desc":"Whether the page view scrolls in the reading direction."},{"name":"controller","type":"PageController?","desc":"An object that can be used to control the position to which this page view is scrolled."},{"name":"physics","type":"ScrollPhysics?","desc":"How the page view should respond to user input."},{"name":"pageSnapping","type":"bool","required":true,"desc":"Set to false to disable page snapping, useful for custom scroll behavior."},{"name":"onPageChanged","type":"ValueChanged?","desc":"Called whenever the page in the center of the viewport changes."},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"A delegate that provides the children for the [PageView]."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"padEnds","type":"bool","required":true,"desc":"Whether to add padding to both ends of the list."}],"id":165,"lever":5,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PageView","desc":["【children】 : List of child components 【List】","【onPageChanged】 : Click event 【ValueChanged】"]},{"file":"node2_direction.dart","name":"Swipe Direction of PageView","desc":["【scrollDirection】 : Swipe direction 【Axis】","【reverse】 : Whether to reverse 【bool】"]},{"file":"node3_controller.dart","name":"Simple Use of PageView Controller","desc":["【controller】 : Page controller 【PageController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PageView/PageView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PageView/PageView_zh-CN.json new file mode 100644 index 000000000..d0b462757 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PageView/PageView_zh-CN.json @@ -0,0 +1 @@ +{"name":"PageView","path":"/src/widgets/page_view.dart","parents":["StatefulWidget","Widget"],"desc":"逐页工作的可滚动列表。","fields":[{"name":"allowImplicitScrolling","type":"bool","required":true,"desc":"控制小部件的页面是否会响应 [RenderObject.showOnScreen],这将允许隐式辅助功能滚动。"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"滚动视图的偏移随每页增加的 [Axis]。"},{"name":"reverse","type":"bool","required":true,"desc":"页面视图是否在阅读方向上滚动。"},{"name":"controller","type":"PageController?","desc":"可用于控制此页面视图滚动到的位置的对象。"},{"name":"physics","type":"ScrollPhysics?","desc":"页面视图应如何响应用户输入。"},{"name":"pageSnapping","type":"bool","required":true,"desc":"设置为 false 以禁用页面捕捉,对自定义滚动行为很有用。"},{"name":"onPageChanged","type":"ValueChanged?","desc":"每当视口中心的页面更改时调用。"},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"为 [PageView] 提供子项的委托。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"padEnds","type":"bool","required":true,"desc":"是否在列表的两端添加内边距。"}],"id":165,"localName":"滑页","lever":5,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PageView基本使用","desc":["【children】 : 子组件列表 【List】","【onPageChanged】 : 点击事件 【ValueChanged】"]},{"file":"node2_direction.dart","name":"PageView滑动方向","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向 【bool】"]},{"file":"node3_controller.dart","name":"PageView控制器简单实用","desc":["【controller】 : 页面控制器 【PageController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_en-US.json b/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_en-US.json new file mode 100644 index 000000000..f260f82e7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_en-US.json @@ -0,0 +1 @@ +{"name":"PaginatedDataTable","path":"/src/material/paginated_data_table.dart","parents":["StatefulWidget","Widget"],"desc":" A table that follows the [Material 2](https://material.io/go/design-data-tables) design specification, using multiple pages to display data.","fields":[{"name":"header","type":"Widget?","desc":"The table card's optional header."},{"name":"actions","type":"List?","desc":"Icon buttons to show at the top end side of the table. The [header] must not be null to show the actions."},{"name":"columns","type":"List","required":true,"desc":"The configuration and labels for the columns in the table."},{"name":"sortColumnIndex","type":"int?","desc":"The current primary sort key's column."},{"name":"sortAscending","type":"bool","required":true,"desc":"Whether the column mentioned in [sortColumnIndex], if any, is sorted in ascending order."},{"name":"onSelectAll","type":"ValueSetter?","desc":"Invoked when the user selects or unselects every row, using the checkbox in the heading row."},{"name":"dataRowMinHeight","type":"double?","desc":"The minimum height of each row (excluding the row that contains column headings)."},{"name":"dataRowMaxHeight","type":"double?","desc":"The maximum height of each row (excluding the row that contains column headings)."},{"name":"headingRowHeight","type":"double","required":true,"desc":"The height of the heading row."},{"name":"horizontalMargin","type":"double","required":true,"desc":"The horizontal margin between the edges of the table and the content in the first and last cells of each row."},{"name":"columnSpacing","type":"double","required":true,"desc":"The horizontal margin between the contents of each data column."},{"name":"showCheckboxColumn","type":"bool","required":true,"desc":"{@macro flutter.material.dataTable.showCheckboxColumn}"},{"name":"showFirstLastButtons","type":"bool","required":true,"desc":"Flag to display the pagination buttons to go to the first and last pages."},{"name":"initialFirstRowIndex","type":"int?","desc":"The index of the first row to display when the widget is first created."},{"name":"dividerThickness","type":"double?","desc":"{@macro flutter.material.dataTable.dividerThickness}"},{"name":"onPageChanged","type":"ValueChanged?","desc":"Invoked when the user switches to another page."},{"name":"rowsPerPage","type":"int","required":true,"desc":"The number of rows to show on each page."},{"name":"availableRowsPerPage","type":"List","required":true,"desc":"The options to offer for the rowsPerPage."},{"name":"onRowsPerPageChanged","type":"ValueChanged?","desc":"Invoked when the user selects a different number of rows per page."},{"name":"source","type":"DataTableSource","required":true,"desc":"The data source which provides data to show in each row."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"checkboxHorizontalMargin","type":"double?","desc":"Horizontal margin around the checkbox, if it is displayed."},{"name":"arrowHeadColor","type":"Color?","desc":"Defines the color of the arrow heads in the footer."},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"headingRowColor","type":"MaterialStateProperty?","desc":"{@macro flutter.material.dataTable.headingRowColor}"},{"name":"showEmptyRows","type":"bool","required":true,"desc":"Controls the visibility of empty rows on the last page of a [PaginatedDataTable]."}],"id":235,"lever":4,"family":1,"linkIds":[110,102],"nodes":[{"file":"node1_base.dart","name":"PaginatedDataTable Usage","desc":["【header】 : Table Name 【Widget】","【rowsPerPage】 : Number of records per page 【int】","【actions】 : Action components 【List】","【columns】 : Data columns 【List】","【sortColumnIndex】 : Sort column index 【int】","【sortAscending】 : Whether ascending 【bool】","【onSelectAll】 : Select all callback 【ValueSetter】","【onRowsPerPageChanged】 : Page change listener 【ValueChanged】","【availableRowsPerPage】 : Available page list 【List】","【source】 : Data source 【DataTableSource】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_zh-CN.json new file mode 100644 index 000000000..a2ed88e6f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_zh-CN.json @@ -0,0 +1 @@ +{"name":"PaginatedDataTable","path":"/src/material/paginated_data_table.dart","parents":["StatefulWidget","Widget"],"desc":"遵循 [Material 2](https://material.io/go/design-data-tables) 设计规范的表格,使用多个页面显示数据。","fields":[{"name":"header","type":"Widget?","desc":"表格卡片的可选标题。"},{"name":"actions","type":"List?","desc":"在表格顶部末端显示的图标按钮。[header] 不能为 null 才能显示操作。"},{"name":"columns","type":"List","required":true,"desc":"表格中列的配置和标签。"},{"name":"sortColumnIndex","type":"int?","desc":"当前主要排序键的列。"},{"name":"sortAscending","type":"bool","required":true,"desc":"[sortColumnIndex] 中提到的列(如果有)是否按升序排序。"},{"name":"onSelectAll","type":"ValueSetter?","desc":"当用户使用标题行中的复选框选择或取消选择每一行时调用。"},{"name":"dataRowMinHeight","type":"double?","desc":"每行的最小高度(不包括包含列标题的行)。"},{"name":"dataRowMaxHeight","type":"double?","desc":"每行的最大高度(不包括包含列标题的行)。"},{"name":"headingRowHeight","type":"double","required":true,"desc":"标题行的高度。"},{"name":"horizontalMargin","type":"double","required":true,"desc":"表格边缘与每行第一个和最后一个单元格中内容之间的水平边距。"},{"name":"columnSpacing","type":"double","required":true,"desc":"每个数据列内容之间的水平边距。"},{"name":"showCheckboxColumn","type":"bool","required":true,"desc":"{@macro flutter.material.dataTable.showCheckboxColumn}"},{"name":"showFirstLastButtons","type":"bool","required":true,"desc":"显示转到第一页和最后一页的分页按钮的标志。"},{"name":"initialFirstRowIndex","type":"int?","desc":"首次创建小部件时要显示的第一行的索引。"},{"name":"dividerThickness","type":"double?","desc":"{@macro flutter.material.dataTable.dividerThickness}"},{"name":"onPageChanged","type":"ValueChanged?","desc":"用户切换到另一页时调用。"},{"name":"rowsPerPage","type":"int","required":true,"desc":"每页显示的行数。"},{"name":"availableRowsPerPage","type":"List","required":true,"desc":"为 rowsPerPage 提供的选项。"},{"name":"onRowsPerPageChanged","type":"ValueChanged?","desc":"用户选择不同的每页行数时调用。"},{"name":"source","type":"DataTableSource","required":true,"desc":"提供在每行中显示的数据的数据源。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"checkboxHorizontalMargin","type":"double?","desc":"复选框周围的水平边距(如果显示)。"},{"name":"arrowHeadColor","type":"Color?","desc":"定义页脚中箭头头的颜色。"},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"headingRowColor","type":"MaterialStateProperty?","desc":"{@macro flutter.material.dataTable.headingRowColor}"},{"name":"showEmptyRows","type":"bool","required":true,"desc":"控制 [PaginatedDataTable] 最后一页上空行的可见性。"}],"id":235,"localName":"可分页表格","lever":4,"family":1,"linkIds":[110,102],"nodes":[{"file":"node1_base.dart","name":"PaginatedDataTable 使用","desc":["【header】 : 表名 【Widget】","【rowsPerPage】 : 每页记录数 【int】","【actions】 : 操作组件 【List】","【columns】 : 数据列 【List】","【sortColumnIndex】 : 排序列索引 【int】","【sortAscending】 : 是否升序 【bool】","【onSelectAll】 : 全选回调 【ValueSetter】","【onRowsPerPageChanged】 : 分页改变监听 【ValueChanged】","【availableRowsPerPage】 : 可用分页列表 【List】","【source】 : 数据源 【DataTableSource】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_en-US.json new file mode 100644 index 000000000..13f9890ca --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_en-US.json @@ -0,0 +1 @@ +{"name":"ParentDataWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["ProxyWidget","Widget"],"desc":" Base class for widgets that hook [ParentData] information to children of [RenderObjectWidget]s.","fields":[],"id":347,"lever":1,"family":5,"linkIds":[106,109,108,315],"nodes":[{"file":"node1_base.dart","name":"Introduction to ParentDataWidget","desc":["【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_zh-CN.json new file mode 100644 index 000000000..d899faa4e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"ParentDataWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["ProxyWidget","Widget"],"desc":"将 [ParentData] 信息挂钩到 [RenderObjectWidget] 子项的小部件的基类。","fields":[],"id":347,"localName":"父数据组件","lever":1,"family":5,"linkIds":[106,109,108,315],"nodes":[{"file":"node1_base.dart","name":"ParentDataWidget 介绍","desc":["【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_en-US.json b/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_en-US.json new file mode 100644 index 000000000..0acc29275 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_en-US.json @@ -0,0 +1 @@ +{"name":"PerformanceOverlay","path":"/src/widgets/performance_overlay.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Displays performance statistics.","fields":[{"name":"optionsMask","type":"int","required":true,"desc":"The mask is created by shifting 1 by the index of the specific [PerformanceOverlayOption] to enable."}],"id":312,"lever":2,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PerformanceOverlay","desc":["Using PerformanceOverlay.allEnabled can start all monitoring items."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_zh-CN.json new file mode 100644 index 000000000..84cd78dd8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_zh-CN.json @@ -0,0 +1 @@ +{"name":"PerformanceOverlay","path":"/src/widgets/performance_overlay.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"显示性能统计信息。","fields":[{"name":"optionsMask","type":"int","required":true,"desc":"掩码是通过将 1 按要启用的特定 [PerformanceOverlayOption] 的索引移位创建的。"}],"id":312,"localName":"性能浮层","lever":2,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PerformanceOverlay基本使用","desc":["使用PerformanceOverlay.allEnabled可以开始所有的监测项。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_en-US.json b/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_en-US.json new file mode 100644 index 000000000..d222fbf4f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_en-US.json @@ -0,0 +1 @@ +{"name":"PhysicalModel","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget representing a physical layer that clips its children to a shape.","fields":[{"name":"shape","type":"BoxShape","required":true,"desc":"The type of shape."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"borderRadius","type":"BorderRadius?","desc":"The border radius of the rounded corners."},{"name":"elevation","type":"double","required":true,"desc":"The z-coordinate relative to the parent at which to place this physical object."},{"name":"color","type":"Color","required":true,"desc":"The background color."},{"name":"shadowColor","type":"Color","required":true,"desc":"The shadow color."}],"id":296,"lever":3,"family":2,"linkIds":[279,69],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PhysicalModel","desc":["【clipBehavior】: Clipping Behavior 【Clip】","【borderRadius】: Rounded Corners 【BorderRadius】","【child】: Child Component 【Widget】","【elevation】: Shadow Depth 【double】","【shadowColor】: Shadow Color 【Color】","【shape】: Shape 【BoxShape】","【color】: Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_zh-CN.json new file mode 100644 index 000000000..699d60ef8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_zh-CN.json @@ -0,0 +1 @@ +{"name":"PhysicalModel","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"表示将其子项裁剪为形状的物理层的小部件。","fields":[{"name":"shape","type":"BoxShape","required":true,"desc":"形状的类型。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"borderRadius","type":"BorderRadius?","desc":"圆角的边框半径。"},{"name":"elevation","type":"double","required":true,"desc":"相对于父级放置此物理对象的 z 坐标。"},{"name":"color","type":"Color","required":true,"desc":"背景颜色。"},{"name":"shadowColor","type":"Color","required":true,"desc":"阴影颜色。"}],"id":296,"localName":"物理模块","lever":3,"family":2,"linkIds":[279,69],"nodes":[{"file":"node1_base.dart","name":"PhysicalModel基本使用","desc":["【clipBehavior】 : 裁剪行为 【Clip】","【borderRadius】 : 圆角 【BorderRadius】","【child】 : 子组件 【Widget】","【elevation】 : 阴影深 【double】","【shadowColor】 : 阴影颜色 【Color】","【shape】 : 形状 【BoxShape】","【color】: 颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_en-US.json b/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_en-US.json new file mode 100644 index 000000000..3423ddb53 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_en-US.json @@ -0,0 +1 @@ +{"name":"PhysicalShape","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget representing a physical layer that clips its children to a path.","fields":[{"name":"clipper","type":"CustomClipper","required":true,"desc":"Determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"elevation","type":"double","required":true,"desc":"The z-coordinate relative to the parent at which to place this physical object."},{"name":"color","type":"Color","required":true,"desc":"The background color."},{"name":"shadowColor","type":"Color","required":true,"desc":"When elevation is non zero the color to use for the shadow color."}],"id":279,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PhysicalShape","desc":["【clipper】: Clipper 【CustomClipper】","【clipBehavior】: Clipping Behavior 【Clip】","【child】: Child Component 【Widget】","【elevation】: Shadow Depth 【double】","【shadowColor】: Shadow Color 【Color】","【color】: Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_zh-CN.json new file mode 100644 index 000000000..3104ddb08 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_zh-CN.json @@ -0,0 +1 @@ +{"name":"PhysicalShape","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"表示将其子项裁剪为路径的物理层的小部件。","fields":[{"name":"clipper","type":"CustomClipper","required":true,"desc":"确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"elevation","type":"double","required":true,"desc":"相对于父级放置此物理对象的 z 坐标。"},{"name":"color","type":"Color","required":true,"desc":"背景颜色。"},{"name":"shadowColor","type":"Color","required":true,"desc":"当高度非零时用于阴影颜色的颜色。"}],"id":279,"localName":"物理形状","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PhysicalShape基本使用","desc":["【clipper】 : 裁剪器 【CustomClipper】","【clipBehavior】 : 裁剪行为 【Clip】","【child】 : 子组件 【Widget】","【elevation】 : 阴影深 【double】","【shadowColor】 : 阴影颜色 【Color】","【color】: 颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_en-US.json b/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_en-US.json new file mode 100644 index 000000000..3a48f49dc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_en-US.json @@ -0,0 +1 @@ +{"name":"PinnedHeaderSliver","path":"/src/widgets/pinned_header_sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that keeps its Widget child at the top of the a [CustomScrollView].","fields":[],"id":309,"lever":4,"family":4,"linkIds":[190],"nodes":[{"file":"node_01.dart","name":"PinnedHeaderSliver Official Example","display":"new_page","desc":["【child】 : Child widget 【Widget?】","PinnedHeaderSliver can only be used in a scroll viewport, where the child widget will not move out of the viewport when scrolling to the top, thus staying above the viewport."]},{"file":"node_02.dart","name":"Sticky Header","display":"new_page","desc":["The sticky header effect implemented based on PinnedHeaderSliver, note that the divider below also has a sticky effect."]},{"file":"node_03.dart","name":"Sticky Header + Search","display":"new_page","desc":["The sticky header + search box effect implemented based on PinnedHeaderSliver."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_zh-CN.json new file mode 100644 index 000000000..20d3b62e8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_zh-CN.json @@ -0,0 +1 @@ +{"name":"PinnedHeaderSliver","path":"/src/widgets/pinned_header_sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其 Widget 子项保持在 [CustomScrollView] 顶部的 sliver。","fields":[],"id":309,"localName":"固定头部滑片","lever":4,"family":4,"linkIds":[190],"nodes":[{"file":"node_01.dart","name":"PinnedHeaderSliver 官方案例","display":"new_page","desc":["【child】 : 子组件 【Widget?】","PinnedHeaderSliver 只能用在滚动视口中,其中子组件在滑动到顶部时,不会移出视口,从而会停留在视口上方。"]},{"file":"node_02.dart","name":"标题吸顶","display":"new_page","desc":["基于 PinnedHeaderSliver 实现的标题吸顶效果,注意看下方的分隔线也有吸顶效果哦。"]},{"file":"node_03.dart","name":"标题+搜索吸顶","display":"new_page","desc":["基于 PinnedHeaderSliver 实现的标题+搜索框的吸顶效果。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_en-US.json b/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_en-US.json new file mode 100644 index 000000000..864ef6c16 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_en-US.json @@ -0,0 +1 @@ +{"name":"Placeholder","path":"/src/widgets/placeholder.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that draws a box that represents where other widgets will one day be added.","fields":[{"name":"color","type":"Color","required":true,"desc":"The color to draw the placeholder box."},{"name":"strokeWidth","type":"double","required":true,"desc":"The width of the lines in the placeholder box."},{"name":"fallbackWidth","type":"double","required":true,"desc":"The width to use when the placeholder is in a situation with an unbounded width."},{"name":"fallbackHeight","type":"double","required":true,"desc":"The height to use when the placeholder is in a situation with an unbounded height."},{"name":"child","type":"Widget?","desc":"The [child] contained by the placeholder box."}],"id":36,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Placeholder Basic Properties","desc":["【color】: Color 【Color】","【strokeWidth】: Stroke Width 【double】"]},{"file":"node2_fallback.dart","name":"Placeholder Fallback Properties","desc":["When there are no width and height constraints in the area, the width and height of the placeholder component.","【fallbackHeight】: Height 【double】","【fallbackWidth】: Width 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_zh-CN.json new file mode 100644 index 000000000..44a8c2818 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_zh-CN.json @@ -0,0 +1 @@ +{"name":"Placeholder","path":"/src/widgets/placeholder.dart","parents":["StatelessWidget","Widget"],"desc":"绘制一个框的小部件,该框表示将来某天会添加其他小部件的位置。","fields":[{"name":"color","type":"Color","required":true,"desc":"绘制占位符框的颜色。"},{"name":"strokeWidth","type":"double","required":true,"desc":"占位符框中线条的宽度。"},{"name":"fallbackWidth","type":"double","required":true,"desc":"当占位符处于无界宽度情况时使用的宽度。"},{"name":"fallbackHeight","type":"double","required":true,"desc":"当占位符处于无界高度情况时使用的高度。"},{"name":"child","type":"Widget?","desc":"占位符框包含的 [child]。"}],"id":36,"localName":"占位组件","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Placeholder基础属性","desc":["【color】: 颜色 【Color】","【strokeWidth】: 线粗 【double】"]},{"file":"node2_fallback.dart","name":"Placeholder的fallback属性","desc":["当所在区域无宽高约束时,占位组件的宽高。\"","【fallbackHeight】: 高 【double】","【fallbackWidth】: 宽 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_en-US.json b/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_en-US.json new file mode 100644 index 000000000..00aa117f7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_en-US.json @@ -0,0 +1 @@ +{"name":"PlatformMenuBar","path":"/src/widgets/platform_menu_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A menu bar that uses the platform's native APIs to construct and render a menu described by a [PlatformMenu]/[PlatformMenuItem] hierarchy.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"menus","type":"List","required":true,"desc":"The list of menu items that are the top level children of the [PlatformMenuBar]."}],"id":466,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_zh-CN.json new file mode 100644 index 000000000..7aecd9bd4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"PlatformMenuBar","path":"/src/widgets/platform_menu_bar.dart","parents":["StatefulWidget","Widget"],"desc":"使用平台的原生 API 构建和渲染由 [PlatformMenu]/[PlatformMenuItem] 层次结构描述的菜单的菜单栏。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"menus","type":"List","required":true,"desc":"作为 [PlatformMenuBar] 顶级子项的菜单项列表。"}],"id":466,"localName":"PlatformMenuBar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_en-US.json b/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_en-US.json new file mode 100644 index 000000000..62f4aa49c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_en-US.json @@ -0,0 +1 @@ +{"name":"PlatformSelectableRegionContextMenu","path":"/src/widgets/_platform_selectable_region_context_menu_web.dart","parents":["StatelessWidget","Widget"],"desc":" See `_platform_selectable_region_context_menu_io.dart` for full documentation.","fields":[{"name":"child","type":"Widget","required":true,"desc":"See `_platform_selectable_region_context_menu_io.dart`."}],"id":467,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_zh-CN.json new file mode 100644 index 000000000..1fc3f8e04 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_zh-CN.json @@ -0,0 +1 @@ +{"name":"PlatformSelectableRegionContextMenu","path":"/src/widgets/_platform_selectable_region_context_menu_web.dart","parents":["StatelessWidget","Widget"],"desc":"请参阅 `_platform_selectable_region_context_menu_io.dart` 获取完整文档。","fields":[{"name":"child","type":"Widget","required":true,"desc":"请参阅 `_platform_selectable_region_context_menu_io.dart`。"}],"id":467,"localName":"PlatformSelectableRegionContextMenu","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_en-US.json b/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_en-US.json new file mode 100644 index 000000000..71c7c7ac2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_en-US.json @@ -0,0 +1 @@ +{"name":"PlatformViewLink","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":" Links a platform view with the Flutter framework.","fields":[{"name":"viewType","type":"String","required":true,"desc":"The unique identifier for the view type to be embedded."}],"id":468,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_zh-CN.json new file mode 100644 index 000000000..4ca7a99a6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_zh-CN.json @@ -0,0 +1 @@ +{"name":"PlatformViewLink","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":"将平台视图与 Flutter 框架链接。","fields":[{"name":"viewType","type":"String","required":true,"desc":"要嵌入的视图类型的唯一标识符。"}],"id":468,"localName":"PlatformViewLink","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_en-US.json b/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_en-US.json new file mode 100644 index 000000000..3fdf281ab --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_en-US.json @@ -0,0 +1 @@ +{"name":"PlatformViewSurface","path":"/src/widgets/platform_view.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Integrates a platform view with Flutter's compositor, touch, and semantics subsystems.","fields":[{"name":"controller","type":"PlatformViewController","required":true,"desc":"The controller for the platform view integrated by this [PlatformViewSurface]."},{"name":"gestureRecognizers","type":"Set>","required":true,"desc":"Which gestures should be forwarded to the PlatformView."},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":469,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_zh-CN.json new file mode 100644 index 000000000..babfb148a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_zh-CN.json @@ -0,0 +1 @@ +{"name":"PlatformViewSurface","path":"/src/widgets/platform_view.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将平台视图与 Flutter 的合成器、触摸和语义子系统集成。","fields":[{"name":"controller","type":"PlatformViewController","required":true,"desc":"此 [PlatformViewSurface] 集成的平台视图的控制器。"},{"name":"gestureRecognizers","type":"Set>","required":true,"desc":"哪些手势应转发到 PlatformView。"},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":469,"localName":"PlatformViewSurface","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_en-US.json b/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_en-US.json new file mode 100644 index 000000000..08da65c35 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_en-US.json @@ -0,0 +1 @@ +{"name":"PopScope","path":"/src/widgets/pop_scope.dart","parents":["StatefulWidget","Widget"],"desc":" Manages back navigation gestures.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"onPopInvokedWithResult","type":"PopInvokedWithResultCallback?","desc":"{@template flutter.widgets.PopScope.onPopInvokedWithResult} Called after a route pop was handled. {@endtemplate}"},{"name":"onPopInvoked","type":"PopInvokedCallback?","desc":"Called after a route pop was handled."},{"name":"canPop","type":"bool","required":true,"desc":"{@template flutter.widgets.PopScope.canPop} When false, blocks the current route from being popped."}],"id":470,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_zh-CN.json new file mode 100644 index 000000000..06a5bd078 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_zh-CN.json @@ -0,0 +1 @@ +{"name":"PopScope","path":"/src/widgets/pop_scope.dart","parents":["StatefulWidget","Widget"],"desc":"管理返回导航手势。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"onPopInvokedWithResult","type":"PopInvokedWithResultCallback?","desc":"{@template flutter.widgets.PopScope.onPopInvokedWithResult} 在处理路由弹出后调用。{@endtemplate}"},{"name":"onPopInvoked","type":"PopInvokedCallback?","desc":"在处理路由弹出后调用。"},{"name":"canPop","type":"bool","required":true,"desc":"{@template flutter.widgets.PopScope.canPop} 当为 false 时,阻止当前路由被弹出。"}],"id":470,"localName":"PopScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_en-US.json b/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_en-US.json new file mode 100644 index 000000000..c3172fc3a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_en-US.json @@ -0,0 +1 @@ +{"name":"PopupMenuButton","path":"/src/material/popup_menu.dart","parents":["StatefulWidget","Widget"],"desc":" Displays a menu when pressed and calls [onSelected] when the menu is dismissed because an item was selected. The value passed to [onSelected] is the value of the selected menu item.","fields":[{"name":"itemBuilder","type":"PopupMenuItemBuilder","required":true,"desc":"Called when the button is pressed to create the items to show in the menu."},{"name":"initialValue","type":"T?","desc":"The value of the menu item, if any, that should be highlighted when the menu opens."},{"name":"onOpened","type":"VoidCallback?","desc":"Called when the popup menu is shown."},{"name":"onSelected","type":"PopupMenuItemSelected?","desc":"Called when the user selects a value from the popup menu created by this button."},{"name":"onCanceled","type":"PopupMenuCanceled?","desc":"Called when the user dismisses the popup menu without selecting an item."},{"name":"tooltip","type":"String?","desc":"Text that describes the action that will occur when the button is pressed."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place the menu when open. This controls the size of the shadow below the menu."},{"name":"shadowColor","type":"Color?","desc":"The color used to paint the shadow below the menu."},{"name":"surfaceTintColor","type":"Color?","desc":"The color used as an overlay on [color] to indicate elevation."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"Matches IconButton's 8 dps padding by default. In some cases, notably where this button appears as the trailing element of a list item, it's useful to be able to set the padding to zero."},{"name":"menuPadding","type":"EdgeInsetsGeometry?","desc":"If provided, menu padding is used for empty space around the outside of the popup menu."},{"name":"splashRadius","type":"double?","desc":"The splash radius."},{"name":"child","type":"Widget?","desc":"If provided, [child] is the widget used for this button and the button will utilize an [InkWell] for taps."},{"name":"borderRadius","type":"BorderRadius?","desc":"The border radius for the [InkWell] that wraps the [child]."},{"name":"icon","type":"Widget?","desc":"If provided, the [icon] is used for this button and the button will behave like an [IconButton]."},{"name":"offset","type":"Offset","required":true,"desc":"The offset is applied relative to the initial position set by the [position]."},{"name":"enabled","type":"bool","required":true,"desc":"Whether this popup menu button is interactive."},{"name":"shape","type":"ShapeBorder?","desc":"If provided, the shape used for the menu."},{"name":"color","type":"Color?","desc":"If provided, the background color used for the menu."},{"name":"iconColor","type":"Color?","desc":"If provided, this color is used for the button icon."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"iconSize","type":"double?","desc":"If provided, the size of the [Icon]."},{"name":"constraints","type":"BoxConstraints?","desc":"Optional size constraints for the menu."},{"name":"position","type":"PopupMenuPosition?","desc":"Whether the popup menu is positioned over or under the popup menu button."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"useRootNavigator","type":"bool","required":true,"desc":"Used to determine whether to push the menu to the [Navigator] furthest from or nearest to the given `context`."},{"name":"popUpAnimationStyle","type":"AnimationStyle?","desc":"Used to override the default animation curves and durations of the popup menu's open and close transitions."},{"name":"routeSettings","type":"RouteSettings?","desc":"Optional route settings for the menu."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this icon button's appearance."},{"name":"requestFocus","type":"bool?","desc":"Whether to request focus when the menu appears."}],"id":56,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PopupMenuButton","desc":["【itemBuilder】: Constructor 【PopupMenuItemBuilder】","【offset】: Offset 【Offset】","【color】: Background Color 【Color】","【shape】: Shape 【ShapeBorder】","【elevation】: Elevation 【double】","【onCanceled】: Cancel Event 【Function()】","【onSelected】: Selection Event 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_zh-CN.json new file mode 100644 index 000000000..7fe3362ec --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"PopupMenuButton","path":"/src/material/popup_menu.dart","parents":["StatefulWidget","Widget"],"desc":"按下时显示菜单,并在因选择项目而关闭菜单时调用 [onSelected]。传递给 [onSelected] 的值是所选菜单项的值。","fields":[{"name":"itemBuilder","type":"PopupMenuItemBuilder","required":true,"desc":"按下按钮时调用以创建要在菜单中显示的项目。"},{"name":"initialValue","type":"T?","desc":"菜单打开时应突出显示的菜单项的值(如果有)。"},{"name":"onOpened","type":"VoidCallback?","desc":"显示弹出菜单时调用。"},{"name":"onSelected","type":"PopupMenuItemSelected?","desc":"用户从此按钮创建的弹出菜单中选择值时调用。"},{"name":"onCanceled","type":"PopupMenuCanceled?","desc":"用户在不选择项目的情况下关闭弹出菜单时调用。"},{"name":"tooltip","type":"String?","desc":"描述按下按钮时将发生的操作的文本。"},{"name":"elevation","type":"double?","desc":"菜单打开时放置菜单的 z 坐标。这控制菜单下方阴影的大小。"},{"name":"shadowColor","type":"Color?","desc":"用于绘制菜单下方阴影的颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"用作 [color] 上的覆盖以指示高度的颜色。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"默认匹配 IconButton 的 8 dps 内边距。在某些情况下,特别是当此按钮作为列表项的尾随元素出现时,能够将内边距设置为零很有用。"},{"name":"menuPadding","type":"EdgeInsetsGeometry?","desc":"如果提供,菜单内边距用于弹出菜单外部的空白空间。"},{"name":"splashRadius","type":"double?","desc":"飞溅半径。"},{"name":"child","type":"Widget?","desc":"如果提供,[child] 是用于此按钮的小部件,按钮将利用 [InkWell] 进行点击。"},{"name":"borderRadius","type":"BorderRadius?","desc":"包装 [child] 的 [InkWell] 的边框半径。"},{"name":"icon","type":"Widget?","desc":"如果提供,[icon] 用于此按钮,按钮将表现得像 [IconButton]。"},{"name":"offset","type":"Offset","required":true,"desc":"偏移相对于由 [position] 设置的初始位置应用。"},{"name":"enabled","type":"bool","required":true,"desc":"此弹出菜单按钮是否可交互。"},{"name":"shape","type":"ShapeBorder?","desc":"如果提供,用于菜单的形状。"},{"name":"color","type":"Color?","desc":"如果提供,用于菜单的背景颜色。"},{"name":"iconColor","type":"Color?","desc":"如果提供,此颜色用于按钮图标。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"iconSize","type":"double?","desc":"如果提供,[Icon] 的大小。"},{"name":"constraints","type":"BoxConstraints?","desc":"菜单的可选大小约束。"},{"name":"position","type":"PopupMenuPosition?","desc":"弹出菜单是位于弹出菜单按钮上方还是下方。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"useRootNavigator","type":"bool","required":true,"desc":"用于确定是否将菜单推送到距离给定 `context` 最远或最近的 [Navigator]。"},{"name":"popUpAnimationStyle","type":"AnimationStyle?","desc":"用于覆盖弹出菜单打开和关闭过渡的默认动画曲线和持续时间。"},{"name":"routeSettings","type":"RouteSettings?","desc":"菜单的可选路由设置。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此图标按钮的外观。"},{"name":"requestFocus","type":"bool?","desc":"菜单出现时是否请求焦点。"}],"id":56,"localName":"菜单按钮","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PopupMenuButton基本使用","desc":["【itemBuilder】 : 构造器 【PopupMenuItemBuilder】","【offset】 : 偏移 【Offset】","【color】 : 背景颜色 【Color】","【shape】 : 形状 【ShapeBorder】","【elevation】 : 影深 【double】","【onCanceled】 : 取消事件 【Function()】","【onSelected】 : 选择事件 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_en-US.json b/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_en-US.json new file mode 100644 index 000000000..1a43d7dd1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_en-US.json @@ -0,0 +1 @@ +{"name":"PopupMenuDivider","path":"/src/material/popup_menu.dart","parents":["PopupMenuEntry","StatefulWidget","Widget"],"desc":" A horizontal divider in a Material Design popup menu.","fields":[{"name":"height","type":"double","required":true,"desc":"The height of the divider entry."},{"name":"thickness","type":"double?","desc":"The thickness of the line drawn within the [PopupMenuDivider]."},{"name":"indent","type":"double?","desc":"The amount of empty space to the leading edge of the [PopupMenuDivider]."},{"name":"endIndent","type":"double?","desc":"The amount of empty space to the trailing edge of the [PopupMenuDivider]."},{"name":"radius","type":"BorderRadiusGeometry?","desc":"The amount of radius for the border of the [PopupMenuDivider]."},{"name":"color","type":"Color?","desc":"{@macro flutter.material.Divider.color}"}],"id":174,"lever":1,"family":1,"linkIds":[56,34],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PopupMenuDivider","desc":["【height】 : height 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_zh-CN.json new file mode 100644 index 000000000..aabcb55cb --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_zh-CN.json @@ -0,0 +1 @@ +{"name":"PopupMenuDivider","path":"/src/material/popup_menu.dart","parents":["PopupMenuEntry","StatefulWidget","Widget"],"desc":"Material Design 弹出菜单中的水平分隔符。","fields":[{"name":"height","type":"double","required":true,"desc":"分隔符条目的高度。"},{"name":"thickness","type":"double?","desc":"在 [PopupMenuDivider] 内绘制的线的厚度。"},{"name":"indent","type":"double?","desc":"[PopupMenuDivider] 前导边缘的空白空间量。"},{"name":"endIndent","type":"double?","desc":"[PopupMenuDivider] 尾随边缘的空白空间量。"},{"name":"radius","type":"BorderRadiusGeometry?","desc":"[PopupMenuDivider] 边框的半径量。"},{"name":"color","type":"Color?","desc":"{@macro flutter.material.Divider.color}"}],"id":174,"localName":"弹出菜单分割线","lever":1,"family":1,"linkIds":[56,34],"nodes":[{"file":"node1_base.dart","name":"PopupMenuDivider基本使用","desc":["【height】 : 高度 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_en-US.json b/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_en-US.json new file mode 100644 index 000000000..0914ad0fa --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_en-US.json @@ -0,0 +1 @@ +{"name":"PopupMenuEntry","path":"/src/material/popup_menu.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" A base class for entries in a Material Design popup menu.","fields":[],"id":471,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_zh-CN.json new file mode 100644 index 000000000..4e5a571f0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_zh-CN.json @@ -0,0 +1 @@ +{"name":"PopupMenuEntry","path":"/src/material/popup_menu.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"Material Design 弹出菜单中条目的基类。","fields":[],"id":471,"localName":"PopupMenuEntry","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_en-US.json b/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_en-US.json new file mode 100644 index 000000000..74061b9f8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_en-US.json @@ -0,0 +1 @@ +{"name":"PopupMenuItem","path":"/src/material/popup_menu.dart","parents":["PopupMenuEntry","StatefulWidget","Widget"],"desc":" An item in a Material Design popup menu.","fields":[{"name":"value","type":"T?","desc":"The value that will be returned by [showMenu] if this entry is selected."},{"name":"onTap","type":"VoidCallback?","desc":"Called when the menu item is tapped."},{"name":"enabled","type":"bool","required":true,"desc":"Whether the user is permitted to select this item."},{"name":"height","type":"double","required":true,"desc":"The minimum height of the menu item."},{"name":"padding","type":"EdgeInsets?","desc":"The padding of the menu item."},{"name":"textStyle","type":"TextStyle?","desc":"The text style of the popup menu item."},{"name":"labelTextStyle","type":"MaterialStateProperty?","desc":"The label style of the popup menu item."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.popupmenu.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":472,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_zh-CN.json new file mode 100644 index 000000000..e326eac39 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_zh-CN.json @@ -0,0 +1 @@ +{"name":"PopupMenuItem","path":"/src/material/popup_menu.dart","parents":["PopupMenuEntry","StatefulWidget","Widget"],"desc":"Material Design 弹出菜单中的项目。","fields":[{"name":"value","type":"T?","desc":"如果选择此条目,[showMenu] 将返回的值。"},{"name":"onTap","type":"VoidCallback?","desc":"点击菜单项时调用。"},{"name":"enabled","type":"bool","required":true,"desc":"是否允许用户选择此项目。"},{"name":"height","type":"double","required":true,"desc":"菜单项的最小高度。"},{"name":"padding","type":"EdgeInsets?","desc":"菜单项的内边距。"},{"name":"textStyle","type":"TextStyle?","desc":"弹出菜单项的文本样式。"},{"name":"labelTextStyle","type":"MaterialStateProperty?","desc":"弹出菜单项的标签样式。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.popupmenu.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":472,"localName":"PopupMenuItem","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_en-US.json new file mode 100644 index 000000000..25e4a8ad2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_en-US.json @@ -0,0 +1 @@ +{"name":"PopupMenuTheme","path":"/src/material/popup_menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for popup menus in this widget's subtree.","fields":[{"name":"data","type":"PopupMenuThemeData","required":true,"desc":"The properties for descendant popup menu widgets."}],"id":330,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PopupMenuTheme","desc":["You can specify the PopupMenuThemeData properties to set default styles for descendant PopupMenuButton components, such as shape, elevation, color, text style, etc. You can also use PopupMenuTheme.of to obtain the theme data of PopupMenu."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_zh-CN.json new file mode 100644 index 000000000..546444d1b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"PopupMenuTheme","path":"/src/material/popup_menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的弹出菜单定义配置的继承小部件。","fields":[{"name":"data","type":"PopupMenuThemeData","required":true,"desc":"后代弹出菜单小部件的属性。"}],"id":330,"localName":"弹出菜单样式","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PopupMenuTheme基本使用","desc":["可指定PopupMenuThemeData数据属性为【后代】的PopupMenuButton组件设置默认样式,如形状、影深、颜色、文字样式等。也可以用PopupMenuTheme.of获取PopupMenu的主题数据。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_en-US.json b/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_en-US.json new file mode 100644 index 000000000..af6a0ea11 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_en-US.json @@ -0,0 +1 @@ +{"name":"Positioned","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":" A widget that controls where a child of a [Stack] is positioned.","fields":[{"name":"left","type":"double?","desc":"The distance that the child's left edge is inset from the left of the stack."},{"name":"top","type":"double?","desc":"The distance that the child's top edge is inset from the top of the stack."},{"name":"right","type":"double?","desc":"The distance that the child's right edge is inset from the right of the stack."},{"name":"bottom","type":"double?","desc":"The distance that the child's bottom edge is inset from the bottom of the stack."},{"name":"width","type":"double?","desc":"The child's width."},{"name":"height","type":"double?","desc":"The child's height."}],"id":108,"lever":3,"family":5,"linkIds":[97,159,121],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Positioned","desc":["【child】: Component 【Widget】","【top】: Distance to the top of the parent 【double】","【right】: Distance to the right of the parent 【double】","【left】: Distance to the left of the parent 【double】","【bottom】: Distance to the bottom of the parent 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_zh-CN.json new file mode 100644 index 000000000..557ee8183 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_zh-CN.json @@ -0,0 +1 @@ +{"name":"Positioned","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":"控制 [Stack] 子项位置的小部件。","fields":[{"name":"left","type":"double?","desc":"子项左边缘从堆栈左侧插入的距离。"},{"name":"top","type":"double?","desc":"子项顶边缘从堆栈顶部插入的距离。"},{"name":"right","type":"double?","desc":"子项右边缘从堆栈右侧插入的距离。"},{"name":"bottom","type":"double?","desc":"子项底边缘从堆栈底部插入的距离。"},{"name":"width","type":"double?","desc":"子项的宽度。"},{"name":"height","type":"double?","desc":"子项的高度。"}],"id":108,"localName":"定位组件","lever":3,"family":5,"linkIds":[97,159,121],"nodes":[{"file":"node1_base.dart","name":"Positioned基本使用","desc":["【child】 : 组件 【Widget】","【top】 : 到父顶距离 【double】","【right】 : 到父右距离 【double】","【left】 : 到父左距离 【double】","【bottom】 : 到父底距离 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_en-US.json b/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_en-US.json new file mode 100644 index 000000000..c958b89de --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_en-US.json @@ -0,0 +1 @@ +{"name":"PositionedDirectional","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that controls where a child of a [Stack] is positioned without committing to a specific [TextDirection].","fields":[{"name":"start","type":"double?","desc":"The distance that the child's leading edge is inset from the leading edge of the stack."},{"name":"top","type":"double?","desc":"The distance that the child's top edge is inset from the top of the stack."},{"name":"end","type":"double?","desc":"The distance that the child's trailing edge is inset from the trailing edge of the stack."},{"name":"bottom","type":"double?","desc":"The distance that the child's bottom edge is inset from the bottom of the stack."},{"name":"width","type":"double?","desc":"The child's width."},{"name":"height","type":"double?","desc":"The child's height."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":159,"lever":3,"family":0,"linkIds":[108,122],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PositionedDirectional","desc":["【child】 : Component 【Widget】","【top】 : Distance to the top of the parent 【double】","【end】 : Distance to the right of the parent 【double】","【start】 : Distance to the left of the parent 【double】","【bottom】 : Distance to the bottom of the parent 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_zh-CN.json new file mode 100644 index 000000000..85f59a581 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_zh-CN.json @@ -0,0 +1 @@ +{"name":"PositionedDirectional","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":"控制 [Stack] 子项位置的小部件,不提交特定的 [TextDirection]。","fields":[{"name":"start","type":"double?","desc":"子项前导边缘从堆栈前导边缘插入的距离。"},{"name":"top","type":"double?","desc":"子项顶边缘从堆栈顶部插入的距离。"},{"name":"end","type":"double?","desc":"子项尾随边缘从堆栈尾随边缘插入的距离。"},{"name":"bottom","type":"double?","desc":"子项底边缘从堆栈底部插入的距离。"},{"name":"width","type":"double?","desc":"子项的宽度。"},{"name":"height","type":"double?","desc":"子项的高度。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":159,"localName":"方向定位","lever":3,"family":0,"linkIds":[108,122],"nodes":[{"file":"node1_base.dart","name":"PositionedDirectional基本使用","desc":["【child】 : 组件 【Widget】","【top】 : 到父顶距离 【double】","【end】 : 到父右距离 【double】","【start】 : 到父左距离 【double】","【bottom】 : 到父底距离 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_en-US.json new file mode 100644 index 000000000..243717cb6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_en-US.json @@ -0,0 +1 @@ +{"name":"PositionedTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Positioned] which takes a specific [Animation] to transition the child's position from a start position to an end position over the lifetime of the animation.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":93,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PositionedTransition","desc":["【child】 : Child component 【Widget】","【rect】 : Animation 【Animation】"," The PositionedTransition component only works within a Stack"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_zh-CN.json new file mode 100644 index 000000000..493618dd2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_zh-CN.json @@ -0,0 +1 @@ +{"name":"PositionedTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"[Positioned] 的动画版本,它接受特定的 [Animation] 在动画的生命周期内将子项的位置从开始位置过渡到结束位置。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":93,"localName":"位置变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PositionedTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【rect】 : 动画 【Animation】"," PositionedTransition组件只能在Stack内起作用"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_en-US.json b/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_en-US.json new file mode 100644 index 000000000..3effceeaf --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_en-US.json @@ -0,0 +1 @@ +{"name":"PreferredSize","path":"/src/widgets/preferred_size.dart","parents":["StatelessWidget","Widget"],"desc":" A widget with a preferred size.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"preferredSize","type":"Size","required":true}],"id":204,"lever":2,"family":0,"linkIds":[57,64],"nodes":[{"file":"node1_base.dart","name":"Adjusting AppBar Height with PreferredSize","desc":["【preferredSize】 : size 【Size】"]},{"file":"node2_adapter.dart","name":"Conversion and Usage of PreferredSize","desc":["【PreferredSize converts a regular component into a PreferredSizeWidget"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_zh-CN.json new file mode 100644 index 000000000..25c7aa027 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_zh-CN.json @@ -0,0 +1 @@ +{"name":"PreferredSize","path":"/src/widgets/preferred_size.dart","parents":["StatelessWidget","Widget"],"desc":"具有首选大小的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"preferredSize","type":"Size","required":true}],"id":204,"localName":"优先尺寸","lever":2,"family":0,"linkIds":[57,64],"nodes":[{"file":"node1_base.dart","name":"PreferredSize调整AppBar高度","desc":["【preferredSize】 : 尺寸 【Size】"]},{"file":"node2_adapter.dart","name":"PreferredSize的转化使用","desc":["【PreferredSize将普通组件转化为PreferredSizeWidget"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_en-US.json new file mode 100644 index 000000000..8871352e5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_en-US.json @@ -0,0 +1 @@ +{"name":"PreferredSizeWidget","path":"/src/widgets/preferred_size.dart","abstract":true,"parents":["Object","Widget"],"desc":" An interface for widgets that can return the size this widget would prefer if it were otherwise unconstrained.","fields":[],"id":473,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_zh-CN.json new file mode 100644 index 000000000..e91e001dd --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"PreferredSizeWidget","path":"/src/widgets/preferred_size.dart","abstract":true,"parents":["Object","Widget"],"desc":"可以返回此小部件在其他情况下不受约束时首选大小的小部件接口。","fields":[],"id":473,"localName":"PreferredSizeWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_en-US.json b/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_en-US.json new file mode 100644 index 000000000..fb6a3539a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_en-US.json @@ -0,0 +1 @@ +{"name":"PrimaryScrollController","path":"/src/widgets/primary_scroll_controller.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Associates a [ScrollController] with a subtree.","fields":[{"name":"controller","type":"ScrollController?","desc":"The [ScrollController] associated with the subtree."},{"name":"scrollDirection","type":"Axis?","desc":"The [Axis] this controller is configured for [ScrollView]s to automatically inherit."},{"name":"automaticallyInheritForPlatforms","type":"Set","required":true,"desc":"The [TargetPlatform]s this controller is configured for [ScrollView]s to automatically inherit."}],"id":335,"lever":1,"family":5,"linkIds":[349,344,164],"nodes":[{"file":"node1_base.dart","name":"Introduction to PrimaryScrollController","desc":["【controller】: Scroll Controller 【ScrollController】","【child】: Child Widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_zh-CN.json new file mode 100644 index 000000000..9158dc376 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_zh-CN.json @@ -0,0 +1 @@ +{"name":"PrimaryScrollController","path":"/src/widgets/primary_scroll_controller.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将 [ScrollController] 与子树关联。","fields":[{"name":"controller","type":"ScrollController?","desc":"与子树关联的 [ScrollController]。"},{"name":"scrollDirection","type":"Axis?","desc":"此控制器配置为 [ScrollView] 自动继承的 [Axis]。"},{"name":"automaticallyInheritForPlatforms","type":"Set","required":true,"desc":"此控制器配置为 [ScrollView] 自动继承的 [TargetPlatform]。"}],"id":335,"localName":"初始滑动控制器","lever":1,"family":5,"linkIds":[349,344,164],"nodes":[{"file":"node1_base.dart","name":"PrimaryScrollController 介绍","desc":["【controller】 : 滑动控制器 【ScrollController】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_en-US.json new file mode 100644 index 000000000..cdd3e97ab --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_en-US.json @@ -0,0 +1 @@ +{"name":"ProgressIndicator","path":"/src/material/progress_indicator.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" A base class for Material Design progress indicators.","fields":[{"name":"value","type":"double?","desc":"If non-null, the value of this progress indicator."},{"name":"backgroundColor","type":"Color?","desc":"The progress indicator's background color."},{"name":"color","type":"Color?","desc":"{@template flutter.progress_indicator.ProgressIndicator.color} The progress indicator's color."},{"name":"valueColor","type":"Animation?","desc":"The progress indicator's color as an animated value."},{"name":"semanticsLabel","type":"String?","desc":"{@template flutter.progress_indicator.ProgressIndicator.semanticsLabel} The [SemanticsProperties.label] for this progress indicator."},{"name":"semanticsValue","type":"String?","desc":"{@template flutter.progress_indicator.ProgressIndicator.semanticsValue} The [SemanticsProperties.value] for this progress indicator."}],"id":474,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_zh-CN.json new file mode 100644 index 000000000..b03634757 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_zh-CN.json @@ -0,0 +1 @@ +{"name":"ProgressIndicator","path":"/src/material/progress_indicator.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"Material Design 进度指示器的基类。","fields":[{"name":"value","type":"double?","desc":"如果非空,此进度指示器的值。"},{"name":"backgroundColor","type":"Color?","desc":"进度指示器的背景颜色。"},{"name":"color","type":"Color?","desc":"{@template flutter.progress_indicator.ProgressIndicator.color} 进度指示器的颜色。"},{"name":"valueColor","type":"Animation?","desc":"进度指示器的颜色作为动画值。"},{"name":"semanticsLabel","type":"String?","desc":"{@template flutter.progress_indicator.ProgressIndicator.semanticsLabel} 此进度指示器的 [SemanticsProperties.label]。"},{"name":"semanticsValue","type":"String?","desc":"{@template flutter.progress_indicator.ProgressIndicator.semanticsValue} 此进度指示器的 [SemanticsProperties.value]。"}],"id":474,"localName":"ProgressIndicator","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_en-US.json new file mode 100644 index 000000000..da8a5fdde --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_en-US.json @@ -0,0 +1 @@ +{"name":"ProgressIndicatorTheme","path":"/src/material/progress_indicator_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for [ProgressIndicator]s in this widget's subtree.","fields":[{"name":"data","type":"ProgressIndicatorThemeData","required":true,"desc":"The properties for descendant [ProgressIndicator] widgets."}],"id":475,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_zh-CN.json new file mode 100644 index 000000000..d87bb022c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"ProgressIndicatorTheme","path":"/src/material/progress_indicator_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [ProgressIndicator] 定义配置的继承小部件。","fields":[{"name":"data","type":"ProgressIndicatorThemeData","required":true,"desc":"后代 [ProgressIndicator] 小部件的属性。"}],"id":475,"localName":"ProgressIndicatorTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_en-US.json new file mode 100644 index 000000000..12ffc5f31 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_en-US.json @@ -0,0 +1 @@ +{"name":"ProxyWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":" A widget that has a child widget provided to it, instead of building a new widget.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":476,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_zh-CN.json new file mode 100644 index 000000000..86e7daf42 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"ProxyWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":"具有提供给它的子小部件的小部件,而不是构建新小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":476,"localName":"ProxyWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Radio/Radio_en-US.json b/modules/widget_system/widgets/doc/widgets/Radio/Radio_en-US.json new file mode 100644 index 000000000..099ac0471 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Radio/Radio_en-US.json @@ -0,0 +1 @@ +{"name":"Radio","path":"/src/material/radio.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design radio button.","fields":[{"name":"value","type":"T","required":true,"desc":"The value represented by this radio button."},{"name":"groupValue","type":"T?","desc":"The currently selected value for a group of radio buttons."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user selects this radio button."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.radio.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"toggleable","type":"bool","required":true,"desc":"Set to true if this radio button is allowed to be returned to an indeterminate state by selecting it again when selected."},{"name":"activeColor","type":"Color?","desc":"The color to use when this radio button is selected."},{"name":"fillColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.radio.fillColor} The color that fills the radio button, in all [WidgetState]s."},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.radio.materialTapTargetSize} Configures the minimum size of the tap target. {@endtemplate}"},{"name":"visualDensity","type":"VisualDensity?","desc":"{@template flutter.material.radio.visualDensity} Defines how compact the radio's layout will be. {@endtemplate}"},{"name":"focusColor","type":"Color?","desc":"The color for the radio's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"{@template flutter.material.radio.hoverColor} The color for the radio's [Material] when a pointer is hovering over it."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.radio.overlayColor} The color for the radio's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.radio.splashRadius} The splash radius of the circular [Material] ink response. {@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"useCupertinoCheckmarkStyle","type":"bool","required":true,"desc":"Controls whether the checkmark style is used in an iOS-style radio."}],"id":45,"lever":4,"family":1,"linkIds":[19,240],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Radio","desc":["【value】: Radio button value 【T】","【groupValue】: Current matching value 【T】","【activeColor】: Active color 【Color】","【onChanged】: Callback on change 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Radio/Radio_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Radio/Radio_zh-CN.json new file mode 100644 index 000000000..f4d55ddc6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Radio/Radio_zh-CN.json @@ -0,0 +1 @@ +{"name":"Radio","path":"/src/material/radio.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 单选按钮。","fields":[{"name":"value","type":"T","required":true,"desc":"此单选按钮表示的值。"},{"name":"groupValue","type":"T?","desc":"一组单选按钮的当前选定值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户选择此单选按钮时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.radio.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"toggleable","type":"bool","required":true,"desc":"如果此单选按钮在选中时再次选择可以返回到不确定状态,则设置为 true。"},{"name":"activeColor","type":"Color?","desc":"选择此单选按钮时使用的颜色。"},{"name":"fillColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.radio.fillColor} 在所有 [WidgetState] 中填充单选按钮的颜色。"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.radio.materialTapTargetSize} 配置点击目标的最小大小。{@endtemplate}"},{"name":"visualDensity","type":"VisualDensity?","desc":"{@template flutter.material.radio.visualDensity} 定义单选按钮布局的紧凑程度。{@endtemplate}"},{"name":"focusColor","type":"Color?","desc":"单选按钮具有输入焦点时其 [Material] 的颜色。"},{"name":"hoverColor","type":"Color?","desc":"{@template flutter.material.radio.hoverColor} 指针悬停在单选按钮上时其 [Material] 的颜色。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.radio.overlayColor} 单选按钮的 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.radio.splashRadius} 圆形 [Material] 墨水响应的飞溅半径。{@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"useCupertinoCheckmarkStyle","type":"bool","required":true,"desc":"控制是否在 iOS 风格的单选按钮中使用复选标记样式。"}],"id":45,"localName":"选钮","lever":4,"family":1,"linkIds":[19,240],"nodes":[{"file":"node1_base.dart","name":"Radio基本使用","desc":["【value】 : 选钮值 【T】","【groupValue】 : 当前匹配值 【T】","【activeColor】 : 激活颜色 【Color】","【onChanged】 : 改变时回调 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_en-US.json new file mode 100644 index 000000000..179e4e90a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_en-US.json @@ -0,0 +1 @@ +{"name":"RadioListTile","path":"/src/material/radio_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A [ListTile] with a [Radio]. In other words, a radio button with a label.","fields":[{"name":"value","type":"T","required":true,"desc":"The value represented by this radio button."},{"name":"groupValue","type":"T?","desc":"The currently selected value for this group of radio buttons."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user selects this radio button."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"toggleable","type":"bool","required":true,"desc":"Set to true if this radio list tile is allowed to be returned to an indeterminate state by selecting it again when selected."},{"name":"activeColor","type":"Color?","desc":"The color to use when this radio button is selected."},{"name":"fillColor","type":"MaterialStateProperty?","desc":"The color that fills the radio button."},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.radio.materialTapTargetSize}"},{"name":"hoverColor","type":"Color?","desc":"{@macro flutter.material.radio.hoverColor}"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The color for the radio's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.radio.splashRadius}"},{"name":"title","type":"Widget?","desc":"The primary content of the list tile."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"secondary","type":"Widget?","desc":"A widget to display on the opposite side of the tile from the radio button."},{"name":"isThreeLine","type":"bool","required":true,"desc":"Whether this list tile is intended to display three lines of text."},{"name":"dense","type":"bool?","desc":"Whether this list tile is part of a vertically dense list."},{"name":"selected","type":"bool","required":true,"desc":"Whether to render icons and text in the [activeColor]."},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"Where to place the control relative to the text."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"Defines the insets surrounding the contents of the tile."},{"name":"shape","type":"ShapeBorder?","desc":"If specified, [shape] defines the shape of the [RadioListTile]'s [InkWell] border."},{"name":"tileColor","type":"Color?","desc":"If specified, defines the background color for `RadioListTile` when [RadioListTile.selected] is false."},{"name":"selectedTileColor","type":"Color?","desc":"If non-null, defines the background color when [RadioListTile.selected] is true."},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the list tile's layout will be."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"Whether to add button:true to the semantics if onTap is provided. This is a temporary flag to help changing the behavior of ListTile onTap semantics."},{"name":"useCupertinoCheckmarkStyle","type":"bool","required":true,"desc":"Whether to use the checkbox style for the [CupertinoRadio] control."},{"name":"radioScaleFactor","type":"double","required":true,"desc":"Controls the scaling factor applied to the [Radio] within the [RadioListTile]."}],"id":19,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RadioListTile requires a generic type T","desc":["【value】 : Item object 【T】","【groupValue】 : Selected object 【T】","【selected】: Whether selected 【bool】","【secondary】: Right component 【Widget】","【title】: Middle top component 【Widget】","【subtitle】: Middle bottom component 【Widget】","【onChanged】: Switch event 【Function(T)】"]},{"file":"node2_dense.dart","name":"RadioListTile selection color and dense layout","desc":["【activeColor】 : Color when selected 【Color】","【dense】: Whether dense layout 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_zh-CN.json new file mode 100644 index 000000000..246794c06 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_zh-CN.json @@ -0,0 +1 @@ +{"name":"RadioListTile","path":"/src/material/radio_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":"带有 [Radio] 的 [ListTile]。换句话说,带有标签的单选按钮。","fields":[{"name":"value","type":"T","required":true,"desc":"此单选按钮表示的值。"},{"name":"groupValue","type":"T?","desc":"此单选按钮组当前选择的值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户选择此单选按钮时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"toggleable","type":"bool","required":true,"desc":"设置为 true 如果此单选列表磁贴允许通过在选中时再次选择它来返回到不确定状态。"},{"name":"activeColor","type":"Color?","desc":"选择此单选按钮时使用的颜色。"},{"name":"fillColor","type":"MaterialStateProperty?","desc":"填充单选按钮的颜色。"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.radio.materialTapTargetSize}"},{"name":"hoverColor","type":"Color?","desc":"{@macro flutter.material.radio.hoverColor}"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"单选按钮的 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.radio.splashRadius}"},{"name":"title","type":"Widget?","desc":"列表磁贴的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"secondary","type":"Widget?","desc":"在磁贴上与单选按钮相对侧显示的小部件。"},{"name":"isThreeLine","type":"bool","required":true,"desc":"此列表磁贴是否旨在显示三行文本。"},{"name":"dense","type":"bool?","desc":"此列表磁贴是否是垂直密集列表的一部分。"},{"name":"selected","type":"bool","required":true,"desc":"是否在 [activeColor] 中渲染图标和文本。"},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"控件相对于文本的放置位置。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"定义磁贴内容周围的插入。"},{"name":"shape","type":"ShapeBorder?","desc":"如果指定,[shape] 定义 [RadioListTile] 的 [InkWell] 边框的形状。"},{"name":"tileColor","type":"Color?","desc":"如果指定,当 [RadioListTile.selected] 为 false 时定义 `RadioListTile` 的背景颜色。"},{"name":"selectedTileColor","type":"Color?","desc":"如果非空,当 [RadioListTile.selected] 为 true 时定义背景颜色。"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义列表磁贴布局的紧凑程度。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"如果提供了 onTap,是否向语义添加 button:true。这是一个临时标志,用于帮助更改 ListTile onTap 语义的行为。"},{"name":"useCupertinoCheckmarkStyle","type":"bool","required":true,"desc":"是否为 [CupertinoRadio] 控件使用复选框样式。"},{"name":"radioScaleFactor","type":"double","required":true,"desc":"控制应用于 [RadioListTile] 内 [Radio] 的缩放因子。"}],"id":19,"localName":"选钮瓦片","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RadioListTile需要一个泛型T","desc":["【value】 : 条目对象 【T】","【groupValue】 : 选中对象 【T】","【selected】: 是否选中 【bool】","【secondary】: 右侧组件 【Widget】","【title】: 中间上组件 【Widget】","【subtitle】: 中间下组件 【Widget】","【onChanged】: 切换事件 【Function(T)】"]},{"file":"node2_dense.dart","name":"RadioListTile选中色和密排","desc":["【activeColor】 : 选中时颜色 【Color】","【dense】: 是否密排 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_en-US.json b/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_en-US.json new file mode 100644 index 000000000..fb6fe0151 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_en-US.json @@ -0,0 +1 @@ +{"name":"RadioMenuButton","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":" A menu item that combines a [Radio] widget with a [MenuItemButton].","fields":[{"name":"value","type":"T","required":true,"desc":"The value represented by this radio button."},{"name":"groupValue","type":"T?","desc":"The currently selected value for a group of radio buttons."},{"name":"toggleable","type":"bool","required":true,"desc":"Set to true if this radio button is allowed to be returned to an indeterminate state by selecting it again when selected."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user selects this radio button."},{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the button response area."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"The optional shortcut that selects this [MenuItemButton]."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"trailingIcon","type":"Widget?","desc":"An optional icon to display after the [child] label."},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@macro flutter.material.menu_anchor.closeOnActivate}"},{"name":"child","type":"Widget?","desc":"The widget displayed in the center of this button."}],"id":477,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_zh-CN.json new file mode 100644 index 000000000..2456abb59 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"RadioMenuButton","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":"将 [Radio] 小部件与 [MenuItemButton] 结合的菜单项。","fields":[{"name":"value","type":"T","required":true,"desc":"此单选按钮表示的值。"},{"name":"groupValue","type":"T?","desc":"一组单选按钮当前选择的值。"},{"name":"toggleable","type":"bool","required":true,"desc":"设置为 true 如果此单选按钮允许通过在选中时再次选择它来返回到不确定状态。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户选择此单选按钮时调用。"},{"name":"onHover","type":"ValueChanged?","desc":"指针进入或退出按钮响应区域时调用。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点更改时调用的处理程序。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"选择此 [MenuItemButton] 的可选快捷方式。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"trailingIcon","type":"Widget?","desc":"在 [child] 标签后显示的可选图标。"},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@macro flutter.material.menu_anchor.closeOnActivate}"},{"name":"child","type":"Widget?","desc":"显示在此按钮中心的小部件。"}],"id":477,"localName":"RadioMenuButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_en-US.json new file mode 100644 index 000000000..3e6a5eb40 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_en-US.json @@ -0,0 +1 @@ +{"name":"RadioTheme","path":"/src/material/radio_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a radio theme to descendant [Radio] widgets.","fields":[{"name":"data","type":"RadioThemeData","required":true,"desc":"The properties used for all descendant [Radio] widgets."}],"id":478,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_zh-CN.json new file mode 100644 index 000000000..1df2cd892 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"RadioTheme","path":"/src/material/radio_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将单选按钮主题应用于后代 [Radio] 小部件。","fields":[{"name":"data","type":"RadioThemeData","required":true,"desc":"用于所有后代 [Radio] 小部件的属性。"}],"id":478,"localName":"RadioTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_en-US.json b/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_en-US.json new file mode 100644 index 000000000..7b07873fb --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_en-US.json @@ -0,0 +1 @@ +{"name":"RangeSlider","path":"/src/material/range_slider.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design range slider.","fields":[{"name":"values","type":"RangeValues","required":true,"desc":"The currently selected values for this range slider."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user is selecting a new value for the slider by dragging."},{"name":"onChangeStart","type":"ValueChanged?","desc":"Called when the user starts selecting new values for the slider."},{"name":"onChangeEnd","type":"ValueChanged?","desc":"Called when the user is done selecting new values for the slider."},{"name":"min","type":"double","required":true,"desc":"The minimum value the user can select."},{"name":"max","type":"double","required":true,"desc":"The maximum value the user can select."},{"name":"divisions","type":"int?","desc":"The number of discrete divisions."},{"name":"labels","type":"RangeLabels?","desc":"Labels to show as text in the [SliderThemeData.rangeValueIndicatorShape] when the slider is active and [SliderThemeData.showValueIndicator] is satisfied."},{"name":"activeColor","type":"Color?","desc":"The color of the track's active segment, i.e. the span of track between the thumbs."},{"name":"inactiveColor","type":"Color?","desc":"The color of the track's inactive segments, i.e. the span of tracks between the min and the start thumb, and the end thumb and the max."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The highlight color that's typically used to indicate that the range slider thumb is hovered or dragged."},{"name":"mouseCursor","type":"MaterialStateProperty?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"semanticFormatterCallback","type":"SemanticFormatterCallback?","desc":"The callback used to create a semantic value from the slider's values."}],"id":44,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RangeSlider","desc":["【values】 : Values 【RangeValues】","【min】 : Minimum value 【double】","【max】 : Maximum value 【double】","【divisions】 : Number of divisions 【int】","【label】 : Tooltip text 【String】","【activeColor】 : Active color 【Color】","【inactiveColor】 : Inactive color 【Color】","【onChangeStart】 : Listener when sliding starts 【Function(RangeValues)】","【onChangeEnd】 : Listener when sliding ends 【Function(RangeValues)】","【onChanged】 : Callback when changed 【Function(RangeValues)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_zh-CN.json new file mode 100644 index 000000000..acce0180b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_zh-CN.json @@ -0,0 +1 @@ +{"name":"RangeSlider","path":"/src/material/range_slider.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 范围滑块。","fields":[{"name":"values","type":"RangeValues","required":true,"desc":"此范围滑块当前选择的值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户通过拖动为滑块选择新值时调用。"},{"name":"onChangeStart","type":"ValueChanged?","desc":"用户开始为滑块选择新值时调用。"},{"name":"onChangeEnd","type":"ValueChanged?","desc":"用户完成为滑块选择新值时调用。"},{"name":"min","type":"double","required":true,"desc":"用户可以选择的最小值。"},{"name":"max","type":"double","required":true,"desc":"用户可以选择的最大值。"},{"name":"divisions","type":"int?","desc":"离散分割的数量。"},{"name":"labels","type":"RangeLabels?","desc":"当滑块处于活动状态且满足 [SliderThemeData.showValueIndicator] 时,在 [SliderThemeData.rangeValueIndicatorShape] 中显示为文本的标签。"},{"name":"activeColor","type":"Color?","desc":"轨道活动段的颜色,即拇指之间的轨道跨度。"},{"name":"inactiveColor","type":"Color?","desc":"轨道非活动段的颜色,即最小值和开始拇指之间以及结束拇指和最大值之间的轨道跨度。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"通常用于指示范围滑块拇指被悬停或拖动的高亮颜色。"},{"name":"mouseCursor","type":"MaterialStateProperty?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"semanticFormatterCallback","type":"SemanticFormatterCallback?","desc":"用于从滑块值创建语义值的回调。"}],"id":44,"localName":"范围滑块","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RangeSlider基本使用","desc":["【values】 : 数值 【RangeValues】","【min】 : 最小值 【double】","【max】 : 最大值 【double】","【divisions】 : 分段数 【int】","【label】 : 提示气泡文字 【String】","【activeColor】 : 激活颜色 【Color】","【inactiveColor】 : 非激活颜色 【Color】","【onChangeStart】 : 开始滑动时监听 【Function(RangeValues)】","【onChangeEnd】 : 滑动结束时监听 【Function(RangeValues)】","【onChanged】 : 改变时回调 【Function(RangeValues)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_en-US.json b/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_en-US.json new file mode 100644 index 000000000..68661bb15 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_en-US.json @@ -0,0 +1 @@ +{"name":"RawAutocomplete","path":"/src/widgets/autocomplete.dart","parents":["StatefulWidget","Widget"],"desc":" {@template flutter.widgets.RawAutocomplete.RawAutocomplete} A widget for helping the user make a selection by entering some text and choosing from among a list of options.","fields":[{"name":"fieldViewBuilder","type":"AutocompleteFieldViewBuilder?","desc":"{@template flutter.widgets.RawAutocomplete.fieldViewBuilder} Builds the field whose input is used to get the options."},{"name":"focusNode","type":"FocusNode?","desc":"The [FocusNode] that is used for the text field."},{"name":"optionsViewBuilder","type":"AutocompleteOptionsViewBuilder","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsViewBuilder} Builds the selectable options widgets from a list of options objects."},{"name":"optionsViewOpenDirection","type":"OptionsViewOpenDirection","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsViewOpenDirection} The direction in which to open the options-view overlay."},{"name":"displayStringForOption","type":"AutocompleteOptionToString","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.displayStringForOption} Returns the string to display in the field when the option is selected."},{"name":"onSelected","type":"AutocompleteOnSelected?","desc":"{@template flutter.widgets.RawAutocomplete.onSelected} Called when an option is selected by the user. {@endtemplate}"},{"name":"optionsBuilder","type":"AutocompleteOptionsBuilder","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsBuilder} A function that returns the current selectable options objects given the current TextEditingValue. {@endtemplate}"},{"name":"textEditingController","type":"TextEditingController?","desc":"The [TextEditingController] that is used for the text field."},{"name":"initialValue","type":"TextEditingValue?","desc":"{@template flutter.widgets.RawAutocomplete.initialValue} The initial value to use for the text field. {@endtemplate}"}],"id":479,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_zh-CN.json new file mode 100644 index 000000000..db96fcefd --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_zh-CN.json @@ -0,0 +1 @@ +{"name":"RawAutocomplete","path":"/src/widgets/autocomplete.dart","parents":["StatefulWidget","Widget"],"desc":"{@template flutter.widgets.RawAutocomplete.RawAutocomplete} 通过输入一些文本并从选项列表中选择来帮助用户进行选择的小部件。","fields":[{"name":"fieldViewBuilder","type":"AutocompleteFieldViewBuilder?","desc":"{@template flutter.widgets.RawAutocomplete.fieldViewBuilder} 构建其输入用于获取选项的字段。"},{"name":"focusNode","type":"FocusNode?","desc":"用于文本字段的 [FocusNode]。"},{"name":"optionsViewBuilder","type":"AutocompleteOptionsViewBuilder","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsViewBuilder} 从选项对象列表构建可选择的选项小部件。"},{"name":"optionsViewOpenDirection","type":"OptionsViewOpenDirection","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsViewOpenDirection} 打开选项视图覆盖的方向。"},{"name":"displayStringForOption","type":"AutocompleteOptionToString","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.displayStringForOption} 返回选择选项时在字段中显示的字符串。"},{"name":"onSelected","type":"AutocompleteOnSelected?","desc":"{@template flutter.widgets.RawAutocomplete.onSelected} 用户选择选项时调用。{@endtemplate}"},{"name":"optionsBuilder","type":"AutocompleteOptionsBuilder","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsBuilder} 给定当前 TextEditingValue 返回当前可选择选项对象的函数。{@endtemplate}"},{"name":"textEditingController","type":"TextEditingController?","desc":"用于文本字段的 [TextEditingController]。"},{"name":"initialValue","type":"TextEditingValue?","desc":"{@template flutter.widgets.RawAutocomplete.initialValue} 用于文本字段的初始值。{@endtemplate}"}],"id":479,"localName":"RawAutocomplete","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_en-US.json b/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_en-US.json new file mode 100644 index 000000000..f775f7f26 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_en-US.json @@ -0,0 +1 @@ +{"name":"RawChip","path":"/src/material/chip.dart","parents":["StatefulWidget","Widget"],"desc":" A raw Material Design chip.","fields":[{"name":"defaultProperties","type":"ChipThemeData?","desc":"Defines the defaults for the chip properties if they are not specified elsewhere."},{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"deleteIcon","type":"Widget","required":true},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"onSelected","type":"ValueChanged?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"selected","type":"bool","required":true},{"name":"isEnabled","type":"bool","required":true},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"WidgetStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"},{"name":"tapEnabled","type":"bool","required":true,"desc":"If set, this indicates that the chip should be disabled if all of the tap callbacks ([onSelected], [onPressed]) are null."}],"id":153,"lever":5,"family":1,"linkIds":[11,12,13,14,15],"nodes":[{"file":"node1_press.dart","name":"RawChip Click Effect","desc":["【label】: Middle component 【Widget】","【padding】 : Padding 【EdgeInsetsGeometry】","【labelPadding】 : Label padding 【EdgeInsetsGeometry】","【shadowColor】: Shadow color 【Color】","【avatar】: Left component 【Widget】","【elevation】: Elevation 【double】","【pressElevation】: Elevation when pressed 【double】","【onPressed】 : Click event 【Function()】"]},{"file":"node2_select.dart","name":"RawChip Selection and Deletion Effect","desc":["【selected】: Whether selected 【bool】","【deleteIconColor】: Trailing icon color 【Color】","【selectedColor】: Selected color 【Color】","【deleteIcon】: Trailing component 【Widget】","【onSelected】: Selection event 【Function(bool)】","【onDeleted】 : Trailing event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_zh-CN.json new file mode 100644 index 000000000..b30f7a6a1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_zh-CN.json @@ -0,0 +1 @@ +{"name":"RawChip","path":"/src/material/chip.dart","parents":["StatefulWidget","Widget"],"desc":"原始 Material Design 芯片。","fields":[{"name":"defaultProperties","type":"ChipThemeData?","desc":"如果芯片属性未在其他地方指定,则定义芯片属性的默认值。"},{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"deleteIcon","type":"Widget","required":true},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"onSelected","type":"ValueChanged?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"selected","type":"bool","required":true},{"name":"isEnabled","type":"bool","required":true},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"WidgetStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"},{"name":"tapEnabled","type":"bool","required":true,"desc":"如果设置,这表示如果所有点击回调([onSelected]、[onPressed])都为 null,则应禁用芯片。"}],"id":153,"localName":"原生小条","lever":5,"family":1,"linkIds":[11,12,13,14,15],"nodes":[{"file":"node1_press.dart","name":"RawChip点击效果","desc":["【label】: 中间组件 【Widget】","【padding】 : 内边距 【EdgeInsetsGeometry】","【labelPadding】 : label边距 【EdgeInsetsGeometry】","【shadowColor】: 阴影色 【Color】","【avatar】: 左侧组件 【Widget】","【elevation】: 影深 【double】","【pressElevation】: 点击时影深 【double】","【onPressed】 : 点击事件 【Function()】"]},{"file":"node2_select.dart","name":"RawChip选中和删除效果","desc":["【selected】: 是否选中 【bool】","【deleteIconColor】: 尾部图标色 【Color】","【selectedColor】: 选中色 【Color】","【deleteIcon】: 尾部组件 【Widget】","【onSelected】: 选中事件 【Function(bool)】","【onDeleted】 : 尾部事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_en-US.json b/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_en-US.json new file mode 100644 index 000000000..536e711d8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_en-US.json @@ -0,0 +1 @@ +{"name":"RawGestureDetector","path":"/src/widgets/gesture_detector.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that detects gestures described by the given gesture factories.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"gestures","type":"Map","required":true,"desc":"The gestures that this widget will attempt to recognize."},{"name":"behavior","type":"HitTestBehavior?","desc":"How this gesture detector should behave during hit testing."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"Whether to exclude these gestures from the semantics tree. For example, the long-press gesture for showing a tooltip is excluded because the tooltip itself is included in the semantics tree directly and so having a gesture to show it would result in duplication of information."},{"name":"semantics","type":"SemanticsGestureDelegate?","desc":"Describes the semantics notations that should be added to the underlying render object [RenderSemanticsGestureHandler]."}],"id":248,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RawGestureDetector","desc":["【behavior】: Detection behavior 【HitTestBehavior】","【gestures】: Gesture mapping 【Map】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_zh-CN.json new file mode 100644 index 000000000..f3c80b7fb --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_zh-CN.json @@ -0,0 +1 @@ +{"name":"RawGestureDetector","path":"/src/widgets/gesture_detector.dart","parents":["StatefulWidget","Widget"],"desc":"检测由给定手势工厂描述的手势的小部件。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"gestures","type":"Map","required":true,"desc":"此小部件将尝试识别的手势。"},{"name":"behavior","type":"HitTestBehavior?","desc":"此手势检测器在命中测试期间应如何表现。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"是否从语义树中排除这些手势。例如,显示工具提示的长按手势被排除,因为工具提示本身直接包含在语义树中,因此具有显示它的手势会导致信息重复。"},{"name":"semantics","type":"SemanticsGestureDelegate?","desc":"描述应添加到底层渲染对象 [RenderSemanticsGestureHandler] 的语义符号。"}],"id":248,"localName":"原手势检测器","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RawGestureDetector基本使用","desc":["【behavior】 : 侦测行为 【HitTestBehavior】","【gestures】 : 手势映射 【Map】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_en-US.json b/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_en-US.json new file mode 100644 index 000000000..5a747b072 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_en-US.json @@ -0,0 +1 @@ +{"name":"RawImage","path":"/src/widgets/basic.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that displays a [dart:ui.Image] directly.","fields":[{"name":"image","type":"ui.Image?","desc":"The image to display."},{"name":"debugImageLabel","type":"String?","desc":"A string identifying the source of the image."},{"name":"width","type":"double?","desc":"If non-null, require the image to have this width."},{"name":"height","type":"double?","desc":"If non-null, require the image to have this height."},{"name":"scale","type":"double","required":true,"desc":"The linear scale factor for drawing this image at its intended size."},{"name":"color","type":"Color?","desc":"If non-null, this color is blended with each image pixel using [colorBlendMode]."},{"name":"opacity","type":"Animation?","desc":"If non-null, the value from the [Animation] is multiplied with the opacity of each image pixel before painting onto the canvas."},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"Used to set the filterQuality of the image."},{"name":"colorBlendMode","type":"BlendMode?","desc":"Used to combine [color] with this image."},{"name":"fit","type":"BoxFit?","desc":"How to inscribe the image into the space allocated during layout."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the image within its bounds."},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"How to paint any portions of the layout bounds not covered by the image."},{"name":"centerSlice","type":"Rect?","desc":"The center slice for a nine-patch image."},{"name":"matchTextDirection","type":"bool","required":true,"desc":"Whether to paint the image in the direction of the [TextDirection]."},{"name":"invertColors","type":"bool","required":true,"desc":"Whether the colors of the image are inverted when drawn."},{"name":"isAntiAlias","type":"bool","required":true,"desc":"Whether to paint the image with anti-aliasing."}],"id":313,"lever":2,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RawImage","desc":["【image】: Image 【ui.Image】","【width】: Width 【int】","【height】: Height 【int】","【isAntiAlias】: Whether to anti-alias 【bool】","【filterQuality】: Filter quality 【FilterQuality】","Many properties are the same as Image, see details there."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_zh-CN.json new file mode 100644 index 000000000..c491e9232 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_zh-CN.json @@ -0,0 +1 @@ +{"name":"RawImage","path":"/src/widgets/basic.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"直接显示 [dart:ui.Image] 的小部件。","fields":[{"name":"image","type":"ui.Image?","desc":"要显示的图像。"},{"name":"debugImageLabel","type":"String?","desc":"标识图像来源的字符串。"},{"name":"width","type":"double?","desc":"如果非空,要求图像具有此宽度。"},{"name":"height","type":"double?","desc":"如果非空,要求图像具有此高度。"},{"name":"scale","type":"double","required":true,"desc":"以其预期大小绘制此图像的线性比例因子。"},{"name":"color","type":"Color?","desc":"如果非空,此颜色使用 [colorBlendMode] 与每个图像像素混合。"},{"name":"opacity","type":"Animation?","desc":"如果非空,在绘制到画布之前,[Animation] 的值与每个图像像素的不透明度相乘。"},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"用于设置图像的 filterQuality。"},{"name":"colorBlendMode","type":"BlendMode?","desc":"用于将 [color] 与此图像组合。"},{"name":"fit","type":"BoxFit?","desc":"如何将图像刻入布局期间分配的空间。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在其边界内对齐图像。"},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"如何绘制图像未覆盖的布局边界的任何部分。"},{"name":"centerSlice","type":"Rect?","desc":"九宫格图像的中心切片。"},{"name":"matchTextDirection","type":"bool","required":true,"desc":"是否在 [TextDirection] 的方向上绘制图像。"},{"name":"invertColors","type":"bool","required":true,"desc":"绘制时是否反转图像的颜色。"},{"name":"isAntiAlias","type":"bool","required":true,"desc":"是否使用抗锯齿绘制图像。"}],"id":313,"localName":"原图片","lever":2,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RawImage基本使用","desc":["【image】 : 图片 【ui.Image】","【width】 : 宽 【int】","【height】: 高 【int】","【isAntiAlias】: 是否抗锯齿 【bool】","【filterQuality】: 过滤质量 【FilterQuality】","很多属性同Image,详见之."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_en-US.json b/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_en-US.json new file mode 100644 index 000000000..7fce1d266 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_en-US.json @@ -0,0 +1 @@ +{"name":"RawKeyboardListener","path":"/src/widgets/raw_keyboard_listener.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that calls a callback whenever the user presses or releases a key on a keyboard.","fields":[{"name":"focusNode","type":"FocusNode","required":true,"desc":"Controls whether this widget has keyboard focus."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"},{"name":"onKey","type":"ValueChanged?","desc":"Called whenever this widget receives a raw keyboard event."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":254,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RawGestureDetector","desc":["【onKey】 : Keyboard event 【ValueChanged】","【focusNode】 : Focus 【FocusNode】","【autofocus】 : Whether to auto focus 【bool】","【child】 : Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_zh-CN.json new file mode 100644 index 000000000..1844c76d9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_zh-CN.json @@ -0,0 +1 @@ +{"name":"RawKeyboardListener","path":"/src/widgets/raw_keyboard_listener.dart","parents":["StatefulWidget","Widget"],"desc":"每当用户在键盘上按下或释放键时调用回调的小部件。","fields":[{"name":"focusNode","type":"FocusNode","required":true,"desc":"控制此小部件是否具有键盘焦点。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"},{"name":"onKey","type":"ValueChanged?","desc":"每当此小部件接收到原始键盘事件时调用。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":254,"localName":"原键盘监听器","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RawGestureDetector基本使用","desc":["【onKey】 : 键盘事件 【ValueChanged】","【focusNode】 : 焦点 【FocusNode】","【autofocus】 : 是否自动聚焦 【bool】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_en-US.json b/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_en-US.json new file mode 100644 index 000000000..f2b20c172 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_en-US.json @@ -0,0 +1 @@ +{"name":"RawMagnifier","path":"/src/widgets/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":" A common base class for magnifiers.","fields":[{"name":"child","type":"Widget?","desc":"An optional widget to position inside the len of the [RawMagnifier]."},{"name":"decoration","type":"MagnifierDecoration","required":true,"desc":"This magnifier's decoration."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"Whether and how to clip the parts of [decoration] that render inside the loupe."},{"name":"focalPointOffset","type":"Offset","required":true,"desc":"The offset of the magnifier from [RawMagnifier]'s center."},{"name":"magnificationScale","type":"double","required":true,"desc":"How \"zoomed in\" the magnification subject is in the lens."},{"name":"size","type":"Size","required":true,"desc":"The size of the magnifier."}],"id":360,"lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Simple use of RawMagnifier","desc":["【size】: Size 【Size】","【magnificationScale】: Magnification 【double】","【focalPointOffset】: Magnification content offset 【Offset】","【decoration】: Decoration 【MagnifierDecoration】","【child】: Child component 【Widget?】"]},{"file":"node2_shape.dart","name":"Custom decoration shape for RawMagnifier","desc":["Customize the five-pointed star decoration shape here"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_zh-CN.json new file mode 100644 index 000000000..888c33b56 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_zh-CN.json @@ -0,0 +1 @@ +{"name":"RawMagnifier","path":"/src/widgets/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":"放大镜的通用基类。","fields":[{"name":"child","type":"Widget?","desc":"在 [RawMagnifier] 镜头内定位的可选小部件。"},{"name":"decoration","type":"MagnifierDecoration","required":true,"desc":"此放大镜的装饰。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"是否以及如何裁剪在放大镜内渲染的 [decoration] 部分。"},{"name":"focalPointOffset","type":"Offset","required":true,"desc":"放大镜从 [RawMagnifier] 中心的偏移。"},{"name":"magnificationScale","type":"double","required":true,"desc":"放大主体在镜头中的"},{"name":"size","type":"Size","required":true,"desc":"放大镜的大小。"}],"id":360,"localName":"原放大镜","lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RawMagnifier 的简单使用","desc":["【size】 : 尺寸 【Size】","【magnificationScale】 : 放大倍率 【double】","【focalPointOffset】: 放大内容偏移量 【Offset】","【decoration】: 发现装饰 【MagnifierDecoration】","【child】: 子组件 【Widget?】,"]},{"file":"node2_shape.dart","name":"RawMagnifier 自定义装饰形状","desc":["这里自定义五角星装饰形状"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_en-US.json b/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_en-US.json new file mode 100644 index 000000000..9363dfcd9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_en-US.json @@ -0,0 +1 @@ +{"name":"RawMaterialButton","path":"/src/material/button.dart","parents":["StatefulWidget","Widget"],"desc":" Creates a button based on [Semantics], [Material], and [InkWell] widgets.","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"Called when the button is tapped or otherwise activated."},{"name":"onLongPress","type":"VoidCallback?","desc":"Called when the button is long-pressed."},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"Called by the underlying [InkWell] widget's [InkWell.onHighlightChanged] callback."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.RawMaterialButton.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the button."},{"name":"textStyle","type":"TextStyle?","desc":"Defines the default text style, with [Material.textStyle], for the button's [child]."},{"name":"fillColor","type":"Color?","desc":"The color of the button's [Material]."},{"name":"focusColor","type":"Color?","desc":"The color for the button's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"The color for the button's [Material] when a pointer is hovering over it."},{"name":"highlightColor","type":"Color?","desc":"The highlight color for the button's [InkWell]."},{"name":"splashColor","type":"Color?","desc":"The splash color for the button's [InkWell]."},{"name":"elevation","type":"double","required":true,"desc":"The elevation for the button's [Material] when the button is [enabled] but not pressed."},{"name":"hoverElevation","type":"double","required":true,"desc":"The elevation for the button's [Material] when the button is [enabled] and a pointer is hovering over it."},{"name":"focusElevation","type":"double","required":true,"desc":"The elevation for the button's [Material] when the button is [enabled] and has the input focus."},{"name":"highlightElevation","type":"double","required":true,"desc":"The elevation for the button's [Material] when the button is [enabled] and pressed."},{"name":"disabledElevation","type":"double","required":true,"desc":"The elevation for the button's [Material] when the button is not [enabled]."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The internal padding for the button's [child]."},{"name":"visualDensity","type":"VisualDensity","required":true,"desc":"Defines how compact the button's layout will be."},{"name":"constraints","type":"BoxConstraints","required":true,"desc":"Defines the button's size."},{"name":"shape","type":"ShapeBorder","required":true,"desc":"The shape of the button's [Material]."},{"name":"animationDuration","type":"Duration","required":true,"desc":"Defines the duration of animated changes for [shape] and [elevation]."},{"name":"child","type":"Widget?","desc":"Typically the button's label."},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize","required":true,"desc":"Configures the minimum size of the tap target."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"enableFeedback","type":"bool","required":true,"desc":"Whether detected gestures should provide acoustic and/or haptic feedback."}],"id":175,"lever":5,"family":1,"linkIds":[23,25,26,27],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RawMaterialButton","desc":["【child】: Child component 【Widget】","【elevation】: Shadow depth 【double】","【fillColor】: Fill color 【Color】","【splashColor】: Ripple color 【Color】","【textStyle】: Text style 【TextStyle】","【onLongPress】: Long press event 【Function()】","【onPressed】: Click event 【Function()】"]},{"file":"node2_shape.dart","name":"Highlight and Shape of RawMaterialButton","desc":["【highlightElevation】: Highlight shadow depth 【double】","【shape】: Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_zh-CN.json new file mode 100644 index 000000000..d267ca02d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"RawMaterialButton","path":"/src/material/button.dart","parents":["StatefulWidget","Widget"],"desc":"基于 [Semantics]、[Material] 和 [InkWell] 小部件创建按钮。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用。"},{"name":"onLongPress","type":"VoidCallback?","desc":"长按按钮时调用。"},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"由底层 [InkWell] 小部件的 [InkWell.onHighlightChanged] 回调调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.RawMaterialButton.mouseCursor} 鼠标指针进入或悬停在按钮上时的光标。"},{"name":"textStyle","type":"TextStyle?","desc":"使用 [Material.textStyle] 为按钮的 [child] 定义默认文本样式。"},{"name":"fillColor","type":"Color?","desc":"按钮的 [Material] 的颜色。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时其 [Material] 的颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在按钮上时其 [Material] 的颜色。"},{"name":"highlightColor","type":"Color?","desc":"按钮的 [InkWell] 的高亮颜色。"},{"name":"splashColor","type":"Color?","desc":"按钮的 [InkWell] 的飞溅颜色。"},{"name":"elevation","type":"double","required":true,"desc":"按钮 [enabled] 但未按下时按钮的 [Material] 的高度。"},{"name":"hoverElevation","type":"double","required":true,"desc":"按钮 [enabled] 且指针悬停在其上时按钮的 [Material] 的高度。"},{"name":"focusElevation","type":"double","required":true,"desc":"按钮 [enabled] 且具有输入焦点时按钮的 [Material] 的高度。"},{"name":"highlightElevation","type":"double","required":true,"desc":"按钮 [enabled] 且被按下时按钮的 [Material] 的高度。"},{"name":"disabledElevation","type":"double","required":true,"desc":"按钮未 [enabled] 时按钮的 [Material] 的高度。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"按钮的 [child] 的内部内边距。"},{"name":"visualDensity","type":"VisualDensity","required":true,"desc":"定义按钮布局的紧凑程度。"},{"name":"constraints","type":"BoxConstraints","required":true,"desc":"定义按钮的大小。"},{"name":"shape","type":"ShapeBorder","required":true,"desc":"按钮的 [Material] 的形状。"},{"name":"animationDuration","type":"Duration","required":true,"desc":"定义 [shape] 和 [elevation] 动画更改的持续时间。"},{"name":"child","type":"Widget?","desc":"通常是按钮的标签。"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize","required":true,"desc":"配置点击目标的最小大小。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"enableFeedback","type":"bool","required":true,"desc":"检测到的手势是否应提供声音和/或触觉反馈。"}],"id":175,"localName":"原始按钮","lever":5,"family":1,"linkIds":[23,25,26,27],"nodes":[{"file":"node1_base.dart","name":"RawMaterialButton基本使用","desc":["【child】 : 子组件 【Widget】","【elevation】 : 影深 【double】","【fillColor】 : 填充色 【Color】","【splashColor】 : 水波纹色 【Color】","【textStyle】 : 文字样式 【TextStyle】","【onLongPress】 : 长按事件 【Function()】","【onPressed】 : 点击事件 【Function()】"]},{"file":"node2_shape.dart","name":"RawMaterialButton高亮和形状","desc":["【highlightElevation】 : 高亮影深 【double】","【shape】 : 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_en-US.json b/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_en-US.json new file mode 100644 index 000000000..55b66cfbe --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_en-US.json @@ -0,0 +1 @@ +{"name":"RawMenuAnchor","path":"/src/widgets/raw_menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that wraps a child and anchors a floating menu.","fields":[{"name":"onOpen","type":"VoidCallback?","desc":"A callback that is invoked when the menu is opened."},{"name":"onClose","type":"VoidCallback?","desc":"A callback that is invoked when the menu is closed."},{"name":"builder","type":"RawMenuAnchorChildBuilder?","desc":"A builder that builds the widget that this [RawMenuAnchor] surrounds."},{"name":"child","type":"Widget?","desc":"The optional child to be passed to the [builder]."},{"name":"overlayBuilder","type":"RawMenuAnchorOverlayBuilder","required":true,"desc":"The [overlayBuilder] function is passed a [RawMenuOverlayInfo] object that defines the anchor's [Rect], the [Size] of the overlay, the [TapRegion.groupId] for the menu system, and the position [Offset] passed to [MenuController.open]."},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@template flutter.widgets.RawMenuAnchor.useRootOverlay} Whether the menu panel should be rendered in the root [Overlay]."},{"name":"childFocusNode","type":"FocusNode?","desc":"The [FocusNode] attached to the widget that takes focus when the menu is opened or closed."},{"name":"consumeOutsideTaps","type":"bool","required":true,"desc":"Whether or not a tap event that closes the menu will be permitted to continue on to the gesture arena."},{"name":"controller","type":"MenuController","required":true,"desc":"A [MenuController] that allows opening and closing of the menu from other widgets."}],"id":480,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_zh-CN.json new file mode 100644 index 000000000..4e005c46e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_zh-CN.json @@ -0,0 +1 @@ +{"name":"RawMenuAnchor","path":"/src/widgets/raw_menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"包装子项并锚定浮动菜单的小部件。","fields":[{"name":"onOpen","type":"VoidCallback?","desc":"菜单打开时调用的回调。"},{"name":"onClose","type":"VoidCallback?","desc":"菜单关闭时调用的回调。"},{"name":"builder","type":"RawMenuAnchorChildBuilder?","desc":"构建此 [RawMenuAnchor] 围绕的小部件的构建器。"},{"name":"child","type":"Widget?","desc":"要传递给 [builder] 的可选子项。"},{"name":"overlayBuilder","type":"RawMenuAnchorOverlayBuilder","required":true,"desc":"[overlayBuilder] 函数传递一个 [RawMenuOverlayInfo] 对象,该对象定义锚点的 [Rect]、覆盖的 [Size]、菜单系统的 [TapRegion.groupId] 以及传递给 [MenuController.open] 的位置 [Offset]。"},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@template flutter.widgets.RawMenuAnchor.useRootOverlay} 菜单面板是否应在根 [Overlay] 中渲染。"},{"name":"childFocusNode","type":"FocusNode?","desc":"附加到在菜单打开或关闭时获得焦点的小部件的 [FocusNode]。"},{"name":"consumeOutsideTaps","type":"bool","required":true,"desc":"关闭菜单的点击事件是否被允许继续到手势竞技场。"},{"name":"controller","type":"MenuController","required":true,"desc":"允许从其他小部件打开和关闭菜单的 [MenuController]。"}],"id":480,"localName":"RawMenuAnchor","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_en-US.json new file mode 100644 index 000000000..77d60fe30 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_en-US.json @@ -0,0 +1 @@ +{"name":"RawMenuAnchorGroup","path":"/src/widgets/raw_menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" Creates a menu anchor that is always visible and is not displayed in an [OverlayPortal].","fields":[{"name":"child","type":"Widget","required":true,"desc":"The child displayed by the [RawMenuAnchorGroup]."},{"name":"controller","type":"MenuController","required":true,"desc":"An [MenuController] that allows the closing of the menu from other widgets."}],"id":481,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_zh-CN.json new file mode 100644 index 000000000..9db05e2d7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_zh-CN.json @@ -0,0 +1 @@ +{"name":"RawMenuAnchorGroup","path":"/src/widgets/raw_menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"创建始终可见且不在 [OverlayPortal] 中显示的菜单锚点。","fields":[{"name":"child","type":"Widget","required":true,"desc":"[RawMenuAnchorGroup] 显示的子项。"},{"name":"controller","type":"MenuController","required":true,"desc":"允许从其他小部件关闭菜单的 [MenuController]。"}],"id":481,"localName":"RawMenuAnchorGroup","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_en-US.json b/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_en-US.json new file mode 100644 index 000000000..2086a24c3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_en-US.json @@ -0,0 +1 @@ +{"name":"RawScrollbar","path":"/src/widgets/scrollbar.dart","parents":["StatefulWidget","Widget"],"desc":" An extendable base class for building scrollbars that fade in and out.","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@template flutter.widgets.Scrollbar.child} The widget below this widget in the tree."},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.Scrollbar.controller} The [ScrollController] used to implement Scrollbar dragging."},{"name":"thumbVisibility","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.thumbVisibility} Indicates that the scrollbar thumb should be visible, even when a scroll is not underway."},{"name":"shape","type":"OutlinedBorder?","desc":"The [OutlinedBorder] of the scrollbar's thumb."},{"name":"radius","type":"Radius?","desc":"The [Radius] of the scrollbar thumb's rounded rectangle corners."},{"name":"thickness","type":"double?","desc":"The thickness of the scrollbar in the cross axis of the scrollable."},{"name":"thumbColor","type":"Color?","desc":"The color of the scrollbar thumb."},{"name":"minThumbLength","type":"double","required":true,"desc":"The preferred smallest size the scrollbar thumb can shrink to when the total scrollable extent is large, the current visible viewport is small, and the viewport is not overscrolled."},{"name":"minOverscrollLength","type":"double?","desc":"The preferred smallest size the scrollbar thumb can shrink to when viewport is overscrolled."},{"name":"trackVisibility","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.trackVisibility} Indicates that the scrollbar track should be visible."},{"name":"trackRadius","type":"Radius?","desc":"The [Radius] of the scrollbar track's rounded rectangle corners."},{"name":"trackColor","type":"Color?","desc":"The color of the scrollbar track."},{"name":"trackBorderColor","type":"Color?","desc":"The color of the scrollbar track's border."},{"name":"fadeDuration","type":"Duration","required":true,"desc":"The [Duration] of the fade animation."},{"name":"timeToFade","type":"Duration","required":true,"desc":"The [Duration] of time until the fade animation begins."},{"name":"pressDuration","type":"Duration","required":true,"desc":"The [Duration] of time that a LongPress will trigger the drag gesture of the scrollbar thumb."},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@template flutter.widgets.Scrollbar.notificationPredicate} A check that specifies whether a [ScrollNotification] should be handled by this widget."},{"name":"interactive","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.interactive} Whether the Scrollbar should be interactive and respond to dragging on the thumb, or tapping in the track area."},{"name":"scrollbarOrientation","type":"ScrollbarOrientation?","desc":"{@macro flutter.widgets.Scrollbar.scrollbarOrientation}"},{"name":"mainAxisMargin","type":"double","required":true,"desc":"Distance from the scrollbar thumb's start or end to the nearest edge of the viewport in logical pixels. It affects the amount of available paint area."},{"name":"crossAxisMargin","type":"double","required":true,"desc":"Distance from the scrollbar thumb's side to the nearest cross axis edge in logical pixels."},{"name":"padding","type":"EdgeInsets?","desc":"The insets by which the scrollbar thumb and track should be padded."}],"id":482,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_zh-CN.json new file mode 100644 index 000000000..dc590b07f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_zh-CN.json @@ -0,0 +1 @@ +{"name":"RawScrollbar","path":"/src/widgets/scrollbar.dart","parents":["StatefulWidget","Widget"],"desc":"用于构建淡入淡出滚动条的可扩展基类。","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@template flutter.widgets.Scrollbar.child} 树中此小部件下方的小部件。"},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.Scrollbar.controller} 用于实现滚动条拖动的 [ScrollController]。"},{"name":"thumbVisibility","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.thumbVisibility} 指示滚动条拇指应该可见,即使没有进行滚动。"},{"name":"shape","type":"OutlinedBorder?","desc":"滚动条拇指的 [OutlinedBorder]。"},{"name":"radius","type":"Radius?","desc":"滚动条拇指圆角矩形角的 [Radius]。"},{"name":"thickness","type":"double?","desc":"滚动条在可滚动交叉轴上的厚度。"},{"name":"thumbColor","type":"Color?","desc":"滚动条拇指的颜色。"},{"name":"minThumbLength","type":"double","required":true,"desc":"当总可滚动范围很大、当前可见视口很小且视口未过度滚动时,滚动条拇指可以缩小到的首选最小大小。"},{"name":"minOverscrollLength","type":"double?","desc":"当视口过度滚动时,滚动条拇指可以缩小到的首选最小大小。"},{"name":"trackVisibility","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.trackVisibility} 指示滚动条轨道应该可见。"},{"name":"trackRadius","type":"Radius?","desc":"滚动条轨道圆角矩形角的 [Radius]。"},{"name":"trackColor","type":"Color?","desc":"滚动条轨道的颜色。"},{"name":"trackBorderColor","type":"Color?","desc":"滚动条轨道边框的颜色。"},{"name":"fadeDuration","type":"Duration","required":true,"desc":"淡入淡出动画的 [Duration]。"},{"name":"timeToFade","type":"Duration","required":true,"desc":"淡入淡出动画开始前的时间 [Duration]。"},{"name":"pressDuration","type":"Duration","required":true,"desc":"长按将触发滚动条拇指拖动手势的时间 [Duration]。"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@template flutter.widgets.Scrollbar.notificationPredicate} 指定 [ScrollNotification] 是否应由此小部件处理的检查。"},{"name":"interactive","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.interactive} 滚动条是否应该是交互式的并响应拇指拖动或轨道区域点击。"},{"name":"scrollbarOrientation","type":"ScrollbarOrientation?","desc":"{@macro flutter.widgets.Scrollbar.scrollbarOrientation}"},{"name":"mainAxisMargin","type":"double","required":true,"desc":"滚动条拇指的开始或结束到视口最近边缘的距离(以逻辑像素为单位)。它影响可用绘制区域的数量。"},{"name":"crossAxisMargin","type":"double","required":true,"desc":"滚动条拇指侧面到最近交叉轴边缘的距离(以逻辑像素为单位)。"},{"name":"padding","type":"EdgeInsets?","desc":"滚动条拇指和轨道应填充的插入。"}],"id":482,"localName":"RawScrollbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawView/RawView_en-US.json b/modules/widget_system/widgets/doc/widgets/RawView/RawView_en-US.json new file mode 100644 index 000000000..8cfda5433 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawView/RawView_en-US.json @@ -0,0 +1 @@ +{"name":"RawView","path":"/src/widgets/view.dart","parents":["StatelessWidget","Widget"],"desc":" The lower level workhorse widget for [View] that bootstraps a render tree for a view.","fields":[{"name":"view","type":"FlutterView","required":true,"desc":"The [FlutterView] into which [child] is drawn."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree, which will be drawn into the [view]."}],"id":483,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawView/RawView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawView/RawView_zh-CN.json new file mode 100644 index 000000000..b2630ef6b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawView/RawView_zh-CN.json @@ -0,0 +1 @@ +{"name":"RawView","path":"/src/widgets/view.dart","parents":["StatelessWidget","Widget"],"desc":"为视图引导渲染树的 [View] 的较低级别工作小部件。","fields":[{"name":"view","type":"FlutterView","required":true,"desc":"绘制 [child] 的 [FlutterView]。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件,将绘制到 [view] 中。"}],"id":483,"localName":"RawView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_en-US.json b/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_en-US.json new file mode 100644 index 000000000..1d7c1ba2b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_en-US.json @@ -0,0 +1 @@ +{"name":"RawWebImage","path":"/src/widgets/_web_image_web.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget which displays and lays out an underlying HTML element in a platform view.","fields":[{"name":"image","type":"WebImageInfo","required":true,"desc":"The underlying HTML element to be displayed."},{"name":"debugImageLabel","type":"String?","desc":"A debug label explaining the image."},{"name":"width","type":"double?","desc":"The requested width for this widget."},{"name":"height","type":"double?","desc":"The requested height for this widget."},{"name":"fit","type":"BoxFit?","desc":"How the HTML element should be inscribed in the box constraining it."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How the image should be aligned in the box constraining it."},{"name":"matchTextDirection","type":"bool","required":true,"desc":"Whether or not the alignment of the image should match the text direction."}],"id":484,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_zh-CN.json new file mode 100644 index 000000000..9b256dd07 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_zh-CN.json @@ -0,0 +1 @@ +{"name":"RawWebImage","path":"/src/widgets/_web_image_web.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在平台视图中显示和布局底层 HTML 元素的小部件。","fields":[{"name":"image","type":"WebImageInfo","required":true,"desc":"要显示的底层 HTML 元素。"},{"name":"debugImageLabel","type":"String?","desc":"解释图像的调试标签。"},{"name":"width","type":"double?","desc":"此小部件的请求宽度。"},{"name":"height","type":"double?","desc":"此小部件的请求高度。"},{"name":"fit","type":"BoxFit?","desc":"HTML 元素应如何刻入约束它的框中。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"图像应如何在约束它的框中对齐。"},{"name":"matchTextDirection","type":"bool","required":true,"desc":"图像的对齐是否应与文本方向匹配。"}],"id":484,"localName":"RawWebImage","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_en-US.json new file mode 100644 index 000000000..2f13cb152 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_en-US.json @@ -0,0 +1 @@ +{"name":"RefreshIndicator","path":"/src/material/refresh_indicator.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that supports the Material \"swipe to refresh\" idiom.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"displacement","type":"double","required":true,"desc":"The distance from the child's top or bottom [edgeOffset] where the refresh indicator will settle. During the drag that exposes the refresh indicator, its actual displacement may significantly exceed this value."},{"name":"edgeOffset","type":"double","required":true,"desc":"The offset where [RefreshProgressIndicator] starts to appear on drag start."},{"name":"onRefresh","type":"RefreshCallback","required":true,"desc":"A function that's called when the user has dragged the refresh indicator far enough to demonstrate that they want the app to refresh. The returned [Future] must complete when the refresh operation is finished."},{"name":"onStatusChange","type":"ValueChanged?","desc":"Called to get the current status of the [RefreshIndicator] to update the UI as needed. This is an optional parameter, used to fine tune app cases."},{"name":"color","type":"Color?","desc":"The progress indicator's foreground color. The current theme's [ColorScheme.primary] by default."},{"name":"backgroundColor","type":"Color?","desc":"The progress indicator's background color. The current theme's [ThemeData.canvasColor] by default."},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"A check that specifies whether a [ScrollNotification] should be handled by this widget."},{"name":"semanticsLabel","type":"String?","desc":"{@macro flutter.progress_indicator.ProgressIndicator.semanticsLabel}"},{"name":"semanticsValue","type":"String?","desc":"{@macro flutter.progress_indicator.ProgressIndicator.semanticsValue}"},{"name":"strokeWidth","type":"double","required":true,"desc":"Defines [strokeWidth] for `RefreshIndicator`."},{"name":"triggerMode","type":"RefreshIndicatorTriggerMode","required":true,"desc":"Defines how this [RefreshIndicator] can be triggered when users overscroll."},{"name":"elevation","type":"double","required":true,"desc":"Defines the elevation of the underlying [RefreshIndicator]."}],"id":49,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RefreshIndicator","desc":["【child】 : Child (scrollable) 【Widget】","【displacement】 : Indicator floating height 【double】","【color】 : Indicator color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_zh-CN.json new file mode 100644 index 000000000..4bc3bbf60 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_zh-CN.json @@ -0,0 +1 @@ +{"name":"RefreshIndicator","path":"/src/material/refresh_indicator.dart","parents":["StatefulWidget","Widget"],"desc":"支持 Material 滑动刷新习语的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"displacement","type":"double","required":true,"desc":"从子项的顶部或底部 [edgeOffset] 到刷新指示器将停留的距离。在暴露刷新指示器的拖动过程中,其实际位移可能会显著超过此值。"},{"name":"edgeOffset","type":"double","required":true,"desc":"[RefreshProgressIndicator] 在拖动开始时开始出现的偏移。"},{"name":"onRefresh","type":"RefreshCallback","required":true,"desc":"当用户拖动刷新指示器足够远以表明他们希望应用程序刷新时调用的函数。返回的 [Future] 必须在刷新操作完成时完成。"},{"name":"onStatusChange","type":"ValueChanged?","desc":"调用以获取 [RefreshIndicator] 的当前状态以根据需要更新 UI。这是一个可选参数,用于微调应用程序案例。"},{"name":"color","type":"Color?","desc":"进度指示器的前景色。默认为当前主题的 [ColorScheme.primary]。"},{"name":"backgroundColor","type":"Color?","desc":"进度指示器的背景色。默认为当前主题的 [ThemeData.canvasColor]。"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"指定 [ScrollNotification] 是否应由此小部件处理的检查。"},{"name":"semanticsLabel","type":"String?","desc":"{@macro flutter.progress_indicator.ProgressIndicator.semanticsLabel}"},{"name":"semanticsValue","type":"String?","desc":"{@macro flutter.progress_indicator.ProgressIndicator.semanticsValue}"},{"name":"strokeWidth","type":"double","required":true,"desc":"为 `RefreshIndicator` 定义 [strokeWidth]。"},{"name":"triggerMode","type":"RefreshIndicatorTriggerMode","required":true,"desc":"定义当用户过度滚动时如何触发此 [RefreshIndicator]。"},{"name":"elevation","type":"double","required":true,"desc":"定义底层 [RefreshIndicator] 的高度。"}],"id":49,"localName":"刷新指示器","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RefreshIndicator基本使用","desc":["【child】 : 孩子(可滑动) 【Widget】","【displacement】 : 指示器悬浮高度 【double】","【color】 : 指示器颜色 【Color】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_en-US.json new file mode 100644 index 000000000..85aae322e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_en-US.json @@ -0,0 +1 @@ +{"name":"RefreshProgressIndicator","path":"/src/material/progress_indicator.dart","parents":["CircularProgressIndicator","ProgressIndicator","StatefulWidget","Widget"],"desc":" An indicator for the progress of refreshing the contents of a widget.","fields":[{"name":"elevation","type":"double","required":true,"desc":"{@macro flutter.material.material.elevation}"},{"name":"indicatorMargin","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the whole indicator. It accommodates the [elevation] of the indicator."},{"name":"indicatorPadding","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the inner refresh indicator."}],"id":485,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_zh-CN.json new file mode 100644 index 000000000..8dd285c9f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_zh-CN.json @@ -0,0 +1 @@ +{"name":"RefreshProgressIndicator","path":"/src/material/progress_indicator.dart","parents":["CircularProgressIndicator","ProgressIndicator","StatefulWidget","Widget"],"desc":"刷新小部件内容进度的指示器。","fields":[{"name":"elevation","type":"double","required":true,"desc":"{@macro flutter.material.material.elevation}"},{"name":"indicatorMargin","type":"EdgeInsetsGeometry","required":true,"desc":"插入整个指示器的空间量。它适应指示器的 [elevation]。"},{"name":"indicatorPadding","type":"EdgeInsetsGeometry","required":true,"desc":"插入内部刷新指示器的空间量。"}],"id":485,"localName":"RefreshProgressIndicator","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_en-US.json new file mode 100644 index 000000000..7312f981d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_en-US.json @@ -0,0 +1 @@ +{"name":"RelativePositionedTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Positioned] which transitions the child's position based on the value of [rect] relative to a bounding box with the specified [size].","fields":[{"name":"size","type":"Size","required":true,"desc":"The [Positioned] widget's offsets are relative to a box of this size whose origin is 0,0."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":115,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RelativePositionedTransition","desc":["【child】: Child component 【Widget】","【size】: Left and top offset 【Size】","【rect】: Animation 【Animation】"," PositionedTransition component only works within a Stack"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_zh-CN.json new file mode 100644 index 000000000..363550b5a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_zh-CN.json @@ -0,0 +1 @@ +{"name":"RelativePositionedTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"[Positioned] 的动画版本,根据相对于具有指定 [size] 的边界框的 [rect] 值转换子项的位置。","fields":[{"name":"size","type":"Size","required":true,"desc":"[Positioned] 小部件的偏移相对于原点为 0,0 的此大小的框。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":115,"localName":"矩形位置变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RelativePositionedTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【size】 : 左和上的偏移量 【Size】","【rect】 : 动画 【Animation】"," PositionedTransition组件只能在Stack内起作用"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_en-US.json b/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_en-US.json new file mode 100644 index 000000000..961a73030 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_en-US.json @@ -0,0 +1 @@ +{"name":"RenderObjectToWidgetAdapter","path":"/src/widgets/adapter.dart","parents":["RenderObjectWidget","Widget"],"desc":" A bridge from a [RenderObject] to an [Element] tree.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"container","type":"RenderObjectWithChildMixin","required":true,"desc":"The [RenderObject] that is the parent of the [Element] created by this widget."},{"name":"debugShortDescription","type":"String?","desc":"A short description of this widget used by debugging aids."}],"id":289,"lever":1,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to RenderObjectToWidgetAdapter","desc":["【container】 : Render object 【RenderObjectWithChildMixin】","【child】 : Child component 【Widget】","【debugShortDescription】 : Debugging introduction 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_zh-CN.json new file mode 100644 index 000000000..09c00729e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_zh-CN.json @@ -0,0 +1 @@ +{"name":"RenderObjectToWidgetAdapter","path":"/src/widgets/adapter.dart","parents":["RenderObjectWidget","Widget"],"desc":"从 [RenderObject] 到 [Element] 树的桥梁。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"container","type":"RenderObjectWithChildMixin","required":true,"desc":"作为此小部件创建的 [Element] 的父级的 [RenderObject]。"},{"name":"debugShortDescription","type":"String?","desc":"调试辅助工具使用的此小部件的简短描述。"}],"id":289,"localName":"根组件","lever":1,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RenderObjectToWidgetAdapter 介绍","desc":["【container】 : 渲染对象 【RenderObjectWithChildMixin】","【child】 : 子组件 【Widget】","【debugShortDescription】 : 调试简介 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_en-US.json new file mode 100644 index 000000000..376cd5013 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_en-US.json @@ -0,0 +1 @@ +{"name":"RenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":" [RenderObjectWidget]s provide the configuration for [RenderObjectElement]s, which wrap [RenderObject]s, which provide the actual rendering of the application.","fields":[],"id":486,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_zh-CN.json new file mode 100644 index 000000000..b5eeaf5ce --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"RenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":"[RenderObjectWidget] 为 [RenderObjectElement] 提供配置,后者包装 [RenderObject],提供应用程序的实际渲染。","fields":[],"id":486,"localName":"RenderObjectWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_en-US.json b/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_en-US.json new file mode 100644 index 000000000..c1fc3b3b6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_en-US.json @@ -0,0 +1 @@ +{"name":"ReorderableDelayedDragStartListener","path":"/src/widgets/reorderable_list.dart","parents":["ReorderableDragStartListener","StatelessWidget","Widget"],"desc":" A wrapper widget that will recognize the start of a drag operation by looking for a long press event. Once it is recognized, it will start a drag operation on the wrapped item in the reorderable list.","fields":[],"id":487,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_zh-CN.json new file mode 100644 index 000000000..6f1b74208 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_zh-CN.json @@ -0,0 +1 @@ +{"name":"ReorderableDelayedDragStartListener","path":"/src/widgets/reorderable_list.dart","parents":["ReorderableDragStartListener","StatelessWidget","Widget"],"desc":"通过寻找长按事件来识别拖动操作开始的包装器小部件。一旦识别,它将在可重新排序列表中的包装项目上开始拖动操作。","fields":[],"id":487,"localName":"ReorderableDelayedDragStartListener","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_en-US.json b/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_en-US.json new file mode 100644 index 000000000..704516393 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_en-US.json @@ -0,0 +1 @@ +{"name":"ReorderableDragStartListener","path":"/src/widgets/reorderable_list.dart","parents":["StatelessWidget","Widget"],"desc":" A wrapper widget that will recognize the start of a drag on the wrapped widget by a [PointerDownEvent], and immediately initiate dragging the wrapped item to a new location in a reorderable list.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget for which the application would like to respond to a tap and drag gesture by starting a reordering drag on a reorderable list."},{"name":"index","type":"int","required":true,"desc":"The index of the associated item that will be dragged in the list."},{"name":"enabled","type":"bool","required":true,"desc":"Whether the [child] item can be dragged and moved in the list."}],"id":488,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_zh-CN.json new file mode 100644 index 000000000..48ed7dc42 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_zh-CN.json @@ -0,0 +1 @@ +{"name":"ReorderableDragStartListener","path":"/src/widgets/reorderable_list.dart","parents":["StatelessWidget","Widget"],"desc":"通过 [PointerDownEvent] 识别包装小部件上拖动开始的包装器小部件,并立即启动将包装项目拖动到可重新排序列表中新位置的操作。","fields":[{"name":"child","type":"Widget","required":true,"desc":"应用程序希望通过在可重新排序列表上开始重新排序拖动来响应点击和拖动手势的小部件。"},{"name":"index","type":"int","required":true,"desc":"将在列表中拖动的关联项目的索引。"},{"name":"enabled","type":"bool","required":true,"desc":"[child] 项目是否可以在列表中拖动和移动。"}],"id":488,"localName":"ReorderableDragStartListener","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_en-US.json b/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_en-US.json new file mode 100644 index 000000000..9fcaaafe7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_en-US.json @@ -0,0 +1 @@ +{"name":"ReorderableList","path":"/src/widgets/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":" A scrolling container that allows the user to interactively reorder the list items.","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@template flutter.widgets.reorderable_list.itemBuilder} Called, as needed, to build list item widgets."},{"name":"itemCount","type":"int","required":true,"desc":"{@template flutter.widgets.reorderable_list.itemCount} The number of items in the list."},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@template flutter.widgets.reorderable_list.onReorder} A callback used by the list to report that a list item has been dragged to a new location in the list and the application should update the order of the items. {@endtemplate}"},{"name":"onReorderStart","type":"void Function(int index)?","desc":"{@template flutter.widgets.reorderable_list.onReorderStart} A callback that is called when an item drag has started."},{"name":"onReorderEnd","type":"void Function(int index)?","desc":"{@template flutter.widgets.reorderable_list.onReorderEnd} A callback that is called when the dragged item is dropped."},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@template flutter.widgets.reorderable_list.proxyDecorator} A callback that allows the app to add an animated decoration around an item when it is being dragged. {@endtemplate}"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"{@template flutter.widgets.reorderable_list.padding} The amount of space by which to inset the list contents."},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.reverse}"},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"physics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.scroll_view.physics}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.shrinkWrap}"},{"name":"anchor","type":"double","required":true,"desc":"{@macro flutter.widgets.scroll_view.anchor}"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double?","desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@template flutter.widgets.reorderable_list.dragBoundaryProvider} A callback used to provide drag boundaries during drag-and-drop reordering."}],"id":489,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_zh-CN.json new file mode 100644 index 000000000..54cdad7cb --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_zh-CN.json @@ -0,0 +1 @@ +{"name":"ReorderableList","path":"/src/widgets/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":"允许用户交互式重新排序列表项的滚动容器。","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@template flutter.widgets.reorderable_list.itemBuilder} 根据需要调用以构建列表项小部件。"},{"name":"itemCount","type":"int","required":true,"desc":"{@template flutter.widgets.reorderable_list.itemCount} 列表中的项目数。"},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@template flutter.widgets.reorderable_list.onReorder} 列表用于报告列表项已拖动到列表中新位置且应用程序应更新项目顺序的回调。{@endtemplate}"},{"name":"onReorderStart","type":"void Function(int index)?","desc":"{@template flutter.widgets.reorderable_list.onReorderStart} 项目拖动开始时调用的回调。"},{"name":"onReorderEnd","type":"void Function(int index)?","desc":"{@template flutter.widgets.reorderable_list.onReorderEnd} 拖动的项目被放下时调用的回调。"},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@template flutter.widgets.reorderable_list.proxyDecorator} 允许应用程序在拖动项目时在其周围添加动画装饰的回调。{@endtemplate}"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"{@template flutter.widgets.reorderable_list.padding} 插入列表内容的空间量。"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.reverse}"},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"physics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.scroll_view.physics}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.shrinkWrap}"},{"name":"anchor","type":"double","required":true,"desc":"{@macro flutter.widgets.scroll_view.anchor}"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double?","desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@template flutter.widgets.reorderable_list.dragBoundaryProvider} 在拖放重新排序期间用于提供拖动边界的回调。"}],"id":489,"localName":"ReorderableList","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_en-US.json b/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_en-US.json new file mode 100644 index 000000000..444aa6f8b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_en-US.json @@ -0,0 +1 @@ +{"name":"ReorderableListView","path":"/src/material/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":" A list whose items the user can interactively reorder by dragging.","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemBuilder}"},{"name":"itemCount","type":"int","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemCount}"},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@macro flutter.widgets.reorderable_list.onReorder}"},{"name":"onReorderStart","type":"void Function(int index)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderStart}"},{"name":"onReorderEnd","type":"void Function(int index)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderEnd}"},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@macro flutter.widgets.reorderable_list.proxyDecorator}"},{"name":"buildDefaultDragHandles","type":"bool","required":true,"desc":"If true: on desktop platforms, a drag handle is stacked over the center of each item's trailing edge; on mobile platforms, a long press anywhere on the item starts a drag."},{"name":"padding","type":"EdgeInsets?","desc":"{@macro flutter.widgets.reorderable_list.padding}"},{"name":"header","type":"Widget?","desc":"A non-reorderable header item to show before the items of the list."},{"name":"footer","type":"Widget?","desc":"A non-reorderable footer item to show after the items of the list."},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.reverse}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary} Defaults to true when [scrollDirection] is [Axis.vertical] and [scrollController] is null."},{"name":"physics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.scroll_view.physics}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.shrinkWrap}"},{"name":"anchor","type":"double","required":true,"desc":"{@macro flutter.widgets.scroll_view.anchor}"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double?","desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@macro flutter.widgets.reorderable_list.dragBoundaryProvider}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the drag handle."}],"id":177,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ReorderableListView","desc":["【children】 : List of child components 【List】","【header】 : Header component 【Widget】","【padding】 : Padding 【EdgeInsets】","【onReorder】 : Callback when reordering 【ReorderCallback】"]},{"file":"node2_direction.dart","name":"Scroll Direction of ReorderableListView","desc":["【scrollDirection】 : Scroll direction 【Axis】","【reverse】 : Whether to reverse 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_zh-CN.json new file mode 100644 index 000000000..32572fe84 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_zh-CN.json @@ -0,0 +1 @@ +{"name":"ReorderableListView","path":"/src/material/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":"用户可以通过拖动交互式重新排序其项目的列表。","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemBuilder}"},{"name":"itemCount","type":"int","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemCount}"},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@macro flutter.widgets.reorderable_list.onReorder}"},{"name":"onReorderStart","type":"void Function(int index)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderStart}"},{"name":"onReorderEnd","type":"void Function(int index)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderEnd}"},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@macro flutter.widgets.reorderable_list.proxyDecorator}"},{"name":"buildDefaultDragHandles","type":"bool","required":true,"desc":"如果为 true:在桌面平台上,拖动手柄堆叠在每个项目尾随边缘的中心;在移动平台上,在项目上的任何地方长按都会开始拖动。"},{"name":"padding","type":"EdgeInsets?","desc":"{@macro flutter.widgets.reorderable_list.padding}"},{"name":"header","type":"Widget?","desc":"在列表项目之前显示的不可重新排序的标题项目。"},{"name":"footer","type":"Widget?","desc":"在列表项目之后显示的不可重新排序的页脚项目。"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.reverse}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary} 当 [scrollDirection] 为 [Axis.vertical] 且 [scrollController] 为 null 时默认为 true。"},{"name":"physics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.scroll_view.physics}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.shrinkWrap}"},{"name":"anchor","type":"double","required":true,"desc":"{@macro flutter.widgets.scroll_view.anchor}"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double?","desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@macro flutter.widgets.reorderable_list.dragBoundaryProvider}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在拖动手柄上时的光标。"}],"id":177,"localName":"可重排序列表","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ReorderableListView基本使用","desc":["【children】 : 子组件列表 【List】","【header】 : 头部组件 【Widget】","【padding】 : 内边距 【EdgeInsets】","【onReorder】 : 调换时回调 【ReorderCallback】"]},{"file":"node2_direction.dart","name":"ReorderableListView滑动方向","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_en-US.json b/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_en-US.json new file mode 100644 index 000000000..faab03734 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_en-US.json @@ -0,0 +1 @@ +{"name":"RepaintBoundary","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that creates a separate display list for its child.","fields":[],"id":264,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RepaintBoundary","desc":["【child】 : Child component 【Widget】","For example, in the above drawing view, even if shouldRepaint is false, the paint method will be continuously executed during scrolling. Using RepaintBoundary can avoid unnecessary drawing."]},{"file":"node2_save.dart","name":"Save Widget as Image","desc":["Through RenderRepaintBoundary, you can obtain the Image information of the child component, and then save the bytes as an image file."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_zh-CN.json new file mode 100644 index 000000000..99d80ef5e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_zh-CN.json @@ -0,0 +1 @@ +{"name":"RepaintBoundary","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"为其子项创建单独显示列表的小部件。","fields":[],"id":264,"localName":"重绘边界","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RepaintBoundary基本使用","desc":["【child】 : 子组件 【Widget】","比如上面的绘制视图,即使shouldRepaint为false,在滑动中会也会不断执行paint方法,使用RepaintBoundary可以避免不必要的绘制。"]},{"file":"node2_save.dart","name":"保存Widget成为图片","desc":["通过RenderRepaintBoundary可以获取子组件的Image信息,从而获取字节保存为图片文件。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_en-US.json b/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_en-US.json new file mode 100644 index 000000000..ade1e78e2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_en-US.json @@ -0,0 +1 @@ +{"name":"RestorationScope","path":"/src/widgets/restoration.dart","parents":["StatefulWidget","Widget"],"desc":" Creates a new scope for restoration IDs used by descendant widgets to claim [RestorationBucket]s.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"restorationId","type":"String?","desc":"The restoration ID used by this widget to obtain a child bucket from the surrounding [RestorationScope]."}],"id":490,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_zh-CN.json new file mode 100644 index 000000000..96f7271f6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_zh-CN.json @@ -0,0 +1 @@ +{"name":"RestorationScope","path":"/src/widgets/restoration.dart","parents":["StatefulWidget","Widget"],"desc":"为后代小部件用于声明 [RestorationBucket] 的恢复 ID 创建新范围。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"restorationId","type":"String?","desc":"此小部件用于从周围的 [RestorationScope] 获取子存储桶的恢复 ID。"}],"id":490,"localName":"RestorationScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RichText/RichText_en-US.json b/modules/widget_system/widgets/doc/widgets/RichText/RichText_en-US.json new file mode 100644 index 000000000..214927c08 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RichText/RichText_en-US.json @@ -0,0 +1 @@ +{"name":"RichText","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A paragraph of rich text.","fields":[{"name":"text","type":"InlineSpan","required":true,"desc":"The text to display in this widget."},{"name":"textAlign","type":"TextAlign","required":true,"desc":"How the text should be aligned horizontally."},{"name":"textDirection","type":"TextDirection?","desc":"The directionality of the text."},{"name":"softWrap","type":"bool","required":true,"desc":"Whether the text should break at soft line breaks."},{"name":"overflow","type":"TextOverflow","required":true,"desc":"How visual overflow should be handled."},{"name":"textScaler","type":"TextScaler","required":true,"desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"maxLines","type":"int?","desc":"An optional maximum number of lines for the text to span, wrapping if necessary. If the text exceeds the given number of lines, it will be truncated according to [overflow]."},{"name":"locale","type":"Locale?","desc":"Used to select a font when the same Unicode character can be rendered differently, depending on the locale."},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.painting.textPainter.strutStyle}"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"selectionRegistrar","type":"SelectionRegistrar?","desc":"The [SelectionRegistrar] this rich text is subscribed to."},{"name":"selectionColor","type":"Color?","desc":"The color to use when painting the selection."}],"id":101,"lever":5,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RichText","desc":["【text】: text 【TextSpan】"," Other properties are the same as Text, see it for details."]},{"file":"node2_widget.dart","name":"RichText Contains Other Components","desc":["Use WidgetSpan to carry ordinary components as the content of RichText"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RichText/RichText_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RichText/RichText_zh-CN.json new file mode 100644 index 000000000..b0cead989 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RichText/RichText_zh-CN.json @@ -0,0 +1 @@ +{"name":"RichText","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"富文本段落。","fields":[{"name":"text","type":"InlineSpan","required":true,"desc":"在此小部件中显示的文本。"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"文本应如何水平对齐。"},{"name":"textDirection","type":"TextDirection?","desc":"文本的方向性。"},{"name":"softWrap","type":"bool","required":true,"desc":"文本是否应在软换行符处换行。"},{"name":"overflow","type":"TextOverflow","required":true,"desc":"应如何处理视觉溢出。"},{"name":"textScaler","type":"TextScaler","required":true,"desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"maxLines","type":"int?","desc":"文本跨越的可选最大行数,必要时换行。如果文本超过给定的行数,它将根据 [overflow] 被截断。"},{"name":"locale","type":"Locale?","desc":"当同一个 Unicode 字符可以根据区域设置以不同方式渲染时,用于选择字体。"},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.painting.textPainter.strutStyle}"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"selectionRegistrar","type":"SelectionRegistrar?","desc":"此富文本订阅的 [SelectionRegistrar]。"},{"name":"selectionColor","type":"Color?","desc":"绘制选择时使用的颜色。"}],"id":101,"localName":"富文本","lever":5,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RichText基本使用","desc":["【text】 : 文字 【TextSpan】"," 其他属性与Text相同,详见之。"]},{"file":"node2_widget.dart","name":"RichText包含其他组件","desc":["使用WidgetSpan来承载普通组件,作为RichText的内容"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_en-US.json b/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_en-US.json new file mode 100644 index 000000000..4191d9e0d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_en-US.json @@ -0,0 +1 @@ +{"name":"RootRestorationScope","path":"/src/widgets/restoration.dart","parents":["StatefulWidget","Widget"],"desc":" Inserts a child bucket of [RestorationManager.rootBucket] into the widget tree and makes it available to descendants via [RestorationScope.of].","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"restorationId","type":"String?","desc":"The restoration ID used to identify the child bucket that this widget will insert into the tree."}],"id":491,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_zh-CN.json new file mode 100644 index 000000000..93df7a4da --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_zh-CN.json @@ -0,0 +1 @@ +{"name":"RootRestorationScope","path":"/src/widgets/restoration.dart","parents":["StatefulWidget","Widget"],"desc":"将 [RestorationManager.rootBucket] 的子存储桶插入小部件树并通过 [RestorationScope.of] 使其对后代可用。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"restorationId","type":"String?","desc":"用于标识此小部件将插入树中的子存储桶的恢复 ID。"}],"id":491,"localName":"RootRestorationScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_en-US.json new file mode 100644 index 000000000..e14faac2b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_en-US.json @@ -0,0 +1 @@ +{"name":"RootWidget","path":"/src/widgets/binding.dart","parents":["Widget"],"desc":" A widget for the root of the widget tree.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"debugShortDescription","type":"String?","desc":"A short description of this widget used by debugging aids."}],"id":492,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_zh-CN.json new file mode 100644 index 000000000..790462cdf --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"RootWidget","path":"/src/widgets/binding.dart","parents":["Widget"],"desc":"小部件树根部的小部件。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"debugShortDescription","type":"String?","desc":"调试辅助工具使用的此小部件的简短描述。"}],"id":492,"localName":"RootWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_en-US.json new file mode 100644 index 000000000..5cca121c2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_en-US.json @@ -0,0 +1 @@ +{"name":"RotatedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that rotates its child by a integral number of quarter turns.","fields":[{"name":"quarterTurns","type":"int","required":true,"desc":"The number of clockwise quarter turns the child should be rotated."}],"id":72,"lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RotatedBox","desc":["【child】 : Child widget 【Widget】","【quarterTurns】 : How many 90° to rotate 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_zh-CN.json new file mode 100644 index 000000000..23b977c91 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_zh-CN.json @@ -0,0 +1 @@ +{"name":"RotatedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项旋转整数个四分之一圈的小部件。","fields":[{"name":"quarterTurns","type":"int","required":true,"desc":"子项应顺时针旋转的四分之一圈数。"}],"id":72,"localName":"旋转盒","lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RotatedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【quarterTurns】 : 旋转多少个90° 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_en-US.json new file mode 100644 index 000000000..713ebe4f2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_en-US.json @@ -0,0 +1 @@ +{"name":"RotationTransition","path":"/src/widgets/transitions.dart","parents":["MatrixTransition","AnimatedWidget","StatefulWidget","Widget"],"desc":" Animates the rotation of a widget.","fields":[],"id":90,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RotationTransition","desc":["【child】 : Child component 【Widget】","【turns】 : Whether to disappear 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_zh-CN.json new file mode 100644 index 000000000..9bfe246f5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_zh-CN.json @@ -0,0 +1 @@ +{"name":"RotationTransition","path":"/src/widgets/transitions.dart","parents":["MatrixTransition","AnimatedWidget","StatefulWidget","Widget"],"desc":"对小部件的旋转进行动画处理。","fields":[],"id":90,"localName":"旋转变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RotationTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【turns】 : 是否消失 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Router/Router_en-US.json b/modules/widget_system/widgets/doc/widgets/Router/Router_en-US.json new file mode 100644 index 000000000..9207e5896 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Router/Router_en-US.json @@ -0,0 +1 @@ +{"name":"Router","path":"/src/widgets/router.dart","parents":["StatefulWidget","Widget"],"desc":" The dispatcher for opening and closing pages of an application.","fields":[{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"The route information provider for the router."},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"The route information parser for the router."},{"name":"routerDelegate","type":"RouterDelegate","required":true,"desc":"The router delegate for the router."},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"The back button dispatcher for the router."},{"name":"restorationScopeId","type":"String?","desc":"Restoration ID to save and restore the state of the [Router]."}],"id":493,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Router/Router_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Router/Router_zh-CN.json new file mode 100644 index 000000000..40e0aeb9c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Router/Router_zh-CN.json @@ -0,0 +1 @@ +{"name":"Router","path":"/src/widgets/router.dart","parents":["StatefulWidget","Widget"],"desc":"应用程序页面打开和关闭的调度器。","fields":[{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"路由器的路由信息提供者。"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"路由器的路由信息解析器。"},{"name":"routerDelegate","type":"RouterDelegate","required":true,"desc":"路由器的路由器委托。"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"路由器的返回按钮调度器。"},{"name":"restorationScopeId","type":"String?","desc":"保存和恢复 [Router] 状态的恢复 ID。"}],"id":493,"localName":"Router","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Row/Row_en-US.json b/modules/widget_system/widgets/doc/widgets/Row/Row_en-US.json new file mode 100644 index 000000000..86512c334 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Row/Row_en-US.json @@ -0,0 +1 @@ +{"name":"Row","path":"/src/widgets/basic.dart","parents":["Flex","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that displays its children in a horizontal array.","fields":[],"id":95,"lever":4,"family":3,"linkIds":[94,96],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Row","desc":["【children】: Component list 【List】","【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】","【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】","【textBaseline】: Text baseline 【TextBaseline】","【verticalDirection】: Vertical direction 【VerticalDirection】","【mainAxisSize】: Main axis size 【MainAxisSize】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Row/Row_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Row/Row_zh-CN.json new file mode 100644 index 000000000..e88f056d4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Row/Row_zh-CN.json @@ -0,0 +1 @@ +{"name":"Row","path":"/src/widgets/basic.dart","parents":["Flex","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在水平数组中显示其子项的小部件。","fields":[],"id":95,"localName":"行布局","lever":4,"family":3,"linkIds":[94,96],"nodes":[{"file":"node1_base.dart","name":"Row基本使用","desc":["【children】 : 组件列表 【List】","【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】","【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】","【textBaseline】 : 文字基线 【TextBaseline】","【verticalDirection】 : 竖直方向 【VerticalDirection】","【mainAxisSize】 : 主轴尺寸 【MainAxisSize】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_en-US.json b/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_en-US.json new file mode 100644 index 000000000..e0448e10b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_en-US.json @@ -0,0 +1 @@ +{"name":"SafeArea","path":"/src/widgets/safe_area.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that insets its child with sufficient padding to avoid intrusions by the operating system.","fields":[{"name":"left","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the left."},{"name":"top","type":"bool","required":true,"desc":"Whether to avoid system intrusions at the top of the screen, typically the system status bar."},{"name":"right","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the right."},{"name":"bottom","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the bottom side of the screen."},{"name":"minimum","type":"EdgeInsets","required":true,"desc":"This minimum padding to apply."},{"name":"maintainBottomViewPadding","type":"bool","required":true,"desc":"Specifies whether the [SafeArea] should maintain the bottom [MediaQueryData.viewPadding] instead of the bottom [MediaQueryData.padding], defaults to false."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":207,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SafeArea Usage Test","desc":["【left】: Whether to enable the left side 【bool】","【top】: Whether to enable the top 【bool】","【bottom】: Whether to enable the bottom 【bool】","【right】: Whether to enable the right side 【bool】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_zh-CN.json new file mode 100644 index 000000000..0367dfe95 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_zh-CN.json @@ -0,0 +1 @@ +{"name":"SafeArea","path":"/src/widgets/safe_area.dart","parents":["StatelessWidget","Widget"],"desc":"用足够的内边距插入其子项以避免操作系统入侵的小部件。","fields":[{"name":"left","type":"bool","required":true,"desc":"是否避免左侧的系统入侵。"},{"name":"top","type":"bool","required":true,"desc":"是否避免屏幕顶部的系统入侵,通常是系统状态栏。"},{"name":"right","type":"bool","required":true,"desc":"是否避免右侧的系统入侵。"},{"name":"bottom","type":"bool","required":true,"desc":"是否避免屏幕底部的系统入侵。"},{"name":"minimum","type":"EdgeInsets","required":true,"desc":"要应用的最小内边距。"},{"name":"maintainBottomViewPadding","type":"bool","required":true,"desc":"指定 [SafeArea] 是否应维护底部 [MediaQueryData.viewPadding] 而不是底部 [MediaQueryData.padding],默认为 false。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":207,"localName":"安全区","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SafeArea 使用测试","desc":["【left】 : 左侧是否启用 【bool】","【top】 : 上方是否启用 【bool】","【bottom】 : 下方是否启用 【bool】","【right】 : 右侧是否启用 【bool】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_en-US.json b/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_en-US.json new file mode 100644 index 000000000..2fc3afbf7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_en-US.json @@ -0,0 +1 @@ +{"name":"Scaffold","path":"/src/material/scaffold.dart","parents":["StatefulWidget","Widget"],"desc":" Implements the basic Material Design visual layout structure.","fields":[{"name":"extendBody","type":"bool","required":true,"desc":"If true, and [bottomNavigationBar] or [persistentFooterButtons] is specified, then the [body] extends to the bottom of the Scaffold, instead of only extending to the top of the [bottomNavigationBar] or the [persistentFooterButtons]."},{"name":"extendBodyBehindAppBar","type":"bool","required":true,"desc":"If true, and an [appBar] is specified, then the height of the [body] is extended to include the height of the app bar and the top of the body is aligned with the top of the app bar."},{"name":"appBar","type":"PreferredSizeWidget?","desc":"An app bar to display at the top of the scaffold."},{"name":"body","type":"Widget?","desc":"The primary content of the scaffold."},{"name":"floatingActionButton","type":"Widget?","desc":"A button displayed floating above [body], in the bottom right corner."},{"name":"floatingActionButtonLocation","type":"FloatingActionButtonLocation?","desc":"Responsible for determining where the [floatingActionButton] should go."},{"name":"floatingActionButtonAnimator","type":"FloatingActionButtonAnimator?","desc":"Animator to move the [floatingActionButton] to a new [floatingActionButtonLocation]."},{"name":"persistentFooterButtons","type":"List?","desc":"A set of buttons that are displayed at the bottom of the scaffold."},{"name":"persistentFooterAlignment","type":"AlignmentDirectional","required":true,"desc":"The alignment of the [persistentFooterButtons] inside the [OverflowBar]."},{"name":"drawer","type":"Widget?","desc":"A panel displayed to the side of the [body], often hidden on mobile devices. Swipes in from either left-to-right ([TextDirection.ltr]) or right-to-left ([TextDirection.rtl])"},{"name":"onDrawerChanged","type":"DrawerCallback?","desc":"Optional callback that is called when the [Scaffold.drawer] is opened or closed."},{"name":"endDrawer","type":"Widget?","desc":"A panel displayed to the side of the [body], often hidden on mobile devices. Swipes in from right-to-left ([TextDirection.ltr]) or left-to-right ([TextDirection.rtl])"},{"name":"onEndDrawerChanged","type":"DrawerCallback?","desc":"Optional callback that is called when the [Scaffold.endDrawer] is opened or closed."},{"name":"drawerScrimColor","type":"Color?","desc":"The color to use for the scrim that obscures primary content while a drawer is open."},{"name":"backgroundColor","type":"Color?","desc":"The color of the [Material] widget that underlies the entire Scaffold."},{"name":"bottomNavigationBar","type":"Widget?","desc":"A bottom navigation bar to display at the bottom of the scaffold."},{"name":"bottomSheet","type":"Widget?","desc":"The persistent bottom sheet to display."},{"name":"resizeToAvoidBottomInset","type":"bool?","desc":"If true the [body] and the scaffold's floating widgets should size themselves to avoid the onscreen keyboard whose height is defined by the ambient [MediaQuery]'s [MediaQueryData.viewInsets] `bottom` property."},{"name":"primary","type":"bool","required":true,"desc":"Whether this scaffold is being displayed at the top of the screen."},{"name":"drawerDragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.material.DrawerController.dragStartBehavior}"},{"name":"drawerEdgeDragWidth","type":"double?","desc":"The width of the area within which a horizontal swipe will open the drawer."},{"name":"drawerEnableOpenDragGesture","type":"bool","required":true,"desc":"Determines if the [Scaffold.drawer] can be opened with a drag gesture on mobile."},{"name":"endDrawerEnableOpenDragGesture","type":"bool","required":true,"desc":"Determines if the [Scaffold.endDrawer] can be opened with a gesture on mobile."},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the [Scaffold]."}],"id":64,"lever":4,"family":1,"linkIds":[57,60,61],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Scaffold","desc":["【appBar】: Header component 【PreferredSizeWidget】","【bottomNavigationBar】: Bottom component 【Widget】","【drawer】: Left sliding component 【Widget】","【endDrawer】: Right sliding component 【Widget】","【body】: Content component 【Widget】","【backgroundColor】: Background color 【Color】","【floatingActionButton】: Floating button 【Widget】","【floatingActionButtonLocation】: Floating button position 【FloatingActionButtonLocation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_zh-CN.json new file mode 100644 index 000000000..5f1cf2e19 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_zh-CN.json @@ -0,0 +1 @@ +{"name":"Scaffold","path":"/src/material/scaffold.dart","parents":["StatefulWidget","Widget"],"desc":"实现基本的 Material Design 视觉布局结构。","fields":[{"name":"extendBody","type":"bool","required":true,"desc":"如果为 true,并且指定了 [bottomNavigationBar] 或 [persistentFooterButtons],则 [body] 扩展到 Scaffold 的底部,而不是仅扩展到 [bottomNavigationBar] 或 [persistentFooterButtons] 的顶部。"},{"name":"extendBodyBehindAppBar","type":"bool","required":true,"desc":"如果为 true,并且指定了 [appBar],则 [body] 的高度扩展为包括应用栏的高度,并且主体的顶部与应用栏的顶部对齐。"},{"name":"appBar","type":"PreferredSizeWidget?","desc":"在脚手架顶部显示的应用栏。"},{"name":"body","type":"Widget?","desc":"脚手架的主要内容。"},{"name":"floatingActionButton","type":"Widget?","desc":"显示在 [body] 上方、右下角的浮动按钮。"},{"name":"floatingActionButtonLocation","type":"FloatingActionButtonLocation?","desc":"负责确定 [floatingActionButton] 应该放在哪里。"},{"name":"floatingActionButtonAnimator","type":"FloatingActionButtonAnimator?","desc":"将 [floatingActionButton] 移动到新 [floatingActionButtonLocation] 的动画器。"},{"name":"persistentFooterButtons","type":"List?","desc":"显示在脚手架底部的一组按钮。"},{"name":"persistentFooterAlignment","type":"AlignmentDirectional","required":true,"desc":"[OverflowBar] 内 [persistentFooterButtons] 的对齐。"},{"name":"drawer","type":"Widget?","desc":"显示在 [body] 侧面的面板,通常在移动设备上隐藏。从左到右 ([TextDirection.ltr]) 或从右到左 ([TextDirection.rtl]) 滑入"},{"name":"onDrawerChanged","type":"DrawerCallback?","desc":"打开或关闭 [Scaffold.drawer] 时调用的可选回调。"},{"name":"endDrawer","type":"Widget?","desc":"显示在 [body] 侧面的面板,通常在移动设备上隐藏。从右到左 ([TextDirection.ltr]) 或从左到右 ([TextDirection.rtl]) 滑入"},{"name":"onEndDrawerChanged","type":"DrawerCallback?","desc":"打开或关闭 [Scaffold.endDrawer] 时调用的可选回调。"},{"name":"drawerScrimColor","type":"Color?","desc":"抽屉打开时用于遮挡主要内容的纱幕颜色。"},{"name":"backgroundColor","type":"Color?","desc":"整个 Scaffold 下方的 [Material] 小部件的颜色。"},{"name":"bottomNavigationBar","type":"Widget?","desc":"在脚手架底部显示的底部导航栏。"},{"name":"bottomSheet","type":"Widget?","desc":"要显示的持久底部表单。"},{"name":"resizeToAvoidBottomInset","type":"bool?","desc":"如果为 true,[body] 和脚手架的浮动小部件应调整自身大小以避免屏幕键盘,其高度由环境 [MediaQuery] 的 [MediaQueryData.viewInsets] `bottom` 属性定义。"},{"name":"primary","type":"bool","required":true,"desc":"此脚手架是否显示在屏幕顶部。"},{"name":"drawerDragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.material.DrawerController.dragStartBehavior}"},{"name":"drawerEdgeDragWidth","type":"double?","desc":"水平滑动将打开抽屉的区域宽度。"},{"name":"drawerEnableOpenDragGesture","type":"bool","required":true,"desc":"确定 [Scaffold.drawer] 是否可以在移动设备上通过拖动手势打开。"},{"name":"endDrawerEnableOpenDragGesture","type":"bool","required":true,"desc":"确定 [Scaffold.endDrawer] 是否可以在移动设备上通过手势打开。"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [Scaffold] 状态的恢复 ID。"}],"id":64,"localName":"脚手架","lever":4,"family":1,"linkIds":[57,60,61],"nodes":[{"file":"node1_base.dart","name":"Scaffold基本用法","desc":["【appBar】 : 头部组件 【PreferredSizeWidget】","【bottomNavigationBar】 : 底部组件 【Widget】","【drawer】 : 左侧滑组件 【Widget】","【endDrawer】 : 右侧滑组件 【Widget】","【body】 : 内容组件 【Widget】","【backgroundColor】 : 背景色 【Color】","【floatingActionButton】 : 浮动按钮 【Widget】","【floatingActionButtonLocation】 : 浮动按钮位置 【FloatingActionButtonLocation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_en-US.json b/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_en-US.json new file mode 100644 index 000000000..62521aa9f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_en-US.json @@ -0,0 +1 @@ +{"name":"ScaffoldMessenger","path":"/src/material/scaffold.dart","parents":["StatefulWidget","Widget"],"desc":" Manages [SnackBar]s and [MaterialBanner]s for descendant [Scaffold]s.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":494,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_zh-CN.json new file mode 100644 index 000000000..039392450 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_zh-CN.json @@ -0,0 +1 @@ +{"name":"ScaffoldMessenger","path":"/src/material/scaffold.dart","parents":["StatefulWidget","Widget"],"desc":"为后代 [Scaffold] 管理 [SnackBar] 和 [MaterialBanner]。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":494,"localName":"ScaffoldMessenger","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_en-US.json new file mode 100644 index 000000000..44d57296e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_en-US.json @@ -0,0 +1 @@ +{"name":"ScaleTransition","path":"/src/widgets/transitions.dart","parents":["MatrixTransition","AnimatedWidget","StatefulWidget","Widget"],"desc":" Animates the scale of a transformed widget.","fields":[],"id":91,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ScaleTransition","desc":["【child】: Child component 【Widget】","【scale】: Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_zh-CN.json new file mode 100644 index 000000000..26a455ce3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_zh-CN.json @@ -0,0 +1 @@ +{"name":"ScaleTransition","path":"/src/widgets/transitions.dart","parents":["MatrixTransition","AnimatedWidget","StatefulWidget","Widget"],"desc":"对变换小部件的缩放进行动画处理。","fields":[],"id":91,"localName":"缩放变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ScaleTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【scale】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_en-US.json b/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_en-US.json new file mode 100644 index 000000000..dcab68f0a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_en-US.json @@ -0,0 +1 @@ +{"name":"ScrollConfiguration","path":"/src/widgets/scroll_configuration.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Controls how [Scrollable] widgets behave in a subtree.","fields":[{"name":"behavior","type":"ScrollBehavior","required":true,"desc":"How [Scrollable] widgets that are descendants of [child] should behave."}],"id":180,"lever":3,"family":5,"linkIds":[162,163,164],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ScrollConfiguration","desc":["【child】: Child component 【Widget】","【behavior】: Scroll behavior 【ScrollBehavior】"," ScrollConfiguration can be used to remove the blue shadow of ListView"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_zh-CN.json new file mode 100644 index 000000000..e6e004a46 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_zh-CN.json @@ -0,0 +1 @@ +{"name":"ScrollConfiguration","path":"/src/widgets/scroll_configuration.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"控制子树中 [Scrollable] 小部件的行为方式。","fields":[{"name":"behavior","type":"ScrollBehavior","required":true,"desc":"作为 [child] 后代的 [Scrollable] 小部件应如何表现。"}],"id":180,"localName":"ios菜单按钮","lever":3,"family":5,"linkIds":[162,163,164],"nodes":[{"file":"node1_base.dart","name":"ScrollConfiguration基本使用","desc":["【child】 : 子组件 【Widget】","【behavior】 : 滑动行为 【ScrollBehavior】"," 可以使用ScrollConfiguration让ListView无蓝色阴影"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_en-US.json b/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_en-US.json new file mode 100644 index 000000000..98519c3ff --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_en-US.json @@ -0,0 +1 @@ +{"name":"ScrollNotificationObserver","path":"/src/widgets/scroll_notification_observer.dart","parents":["StatefulWidget","Widget"],"desc":" Notifies its listeners when a descendant scrolls.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The subtree below this widget."}],"id":495,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_zh-CN.json new file mode 100644 index 000000000..e951ec80f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_zh-CN.json @@ -0,0 +1 @@ +{"name":"ScrollNotificationObserver","path":"/src/widgets/scroll_notification_observer.dart","parents":["StatefulWidget","Widget"],"desc":"当后代滚动时通知其监听器。","fields":[{"name":"child","type":"Widget","required":true,"desc":"此小部件下方的子树。"}],"id":495,"localName":"ScrollNotificationObserver","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_en-US.json new file mode 100644 index 000000000..57296d8e2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_en-US.json @@ -0,0 +1 @@ +{"name":"ScrollView","path":"/src/widgets/scroll_view.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":" A widget that combines a [Scrollable] and a [Viewport] to create an interactive scrolling pane of content in one dimension.","fields":[{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@template flutter.widgets.scroll_view.scrollDirection} The [Axis] along which the scroll view's offset increases."},{"name":"reverse","type":"bool","required":true,"desc":"{@template flutter.widgets.scroll_view.reverse} Whether the scroll view scrolls in the reading direction."},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.scroll_view.controller} An object that can be used to control the position to which this scroll view is scrolled."},{"name":"primary","type":"bool?","desc":"{@template flutter.widgets.scroll_view.primary} Whether this is the primary scroll view associated with the parent [PrimaryScrollController]."},{"name":"physics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.scroll_view.physics} How the scroll view should respond to user input."},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@template flutter.widgets.scroll_view.shrinkWrap} Whether the extent of the scroll view in the [scrollDirection] should be determined by the contents being viewed."},{"name":"center","type":"Key?","desc":"The first child in the [GrowthDirection.forward] growth direction."},{"name":"anchor","type":"double","required":true,"desc":"{@template flutter.widgets.scroll_view.anchor} The relative position of the zero scroll offset."},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"semanticChildCount","type":"int?","desc":"The number of children that will contribute semantic information."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@template flutter.widgets.scroll_view.keyboardDismissBehavior} The [ScrollViewKeyboardDismissBehavior] defines how this [ScrollView] will dismiss the keyboard automatically. {@endtemplate}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"}],"id":349,"lever":2,"family":0,"linkIds":[183,162,163,253,340],"nodes":[{"file":"node1_base.dart","name":"Introduction to ScrollView","desc":["【reverse】: Whether to reverse 【bool】","【scrollDirection】: Scroll direction 【Axis】","【cacheExtent】: Cache length 【double】","【dragStartBehavior】: Drag behavior 【DragStartBehavior】","【clipBehavior】: Clip behavior 【ClipBehavior】","【controller】: Controller 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_zh-CN.json new file mode 100644 index 000000000..2c76b54ce --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_zh-CN.json @@ -0,0 +1 @@ +{"name":"ScrollView","path":"/src/widgets/scroll_view.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":"结合 [Scrollable] 和 [Viewport] 在一个维度上创建交互式滚动内容窗格的小部件。","fields":[{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@template flutter.widgets.scroll_view.scrollDirection} 滚动视图偏移增加的 [Axis]。"},{"name":"reverse","type":"bool","required":true,"desc":"{@template flutter.widgets.scroll_view.reverse} 滚动视图是否在阅读方向上滚动。"},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.scroll_view.controller} 可用于控制此滚动视图滚动到的位置的对象。"},{"name":"primary","type":"bool?","desc":"{@template flutter.widgets.scroll_view.primary} 这是否是与父 [PrimaryScrollController] 关联的主要滚动视图。"},{"name":"physics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.scroll_view.physics} 滚动视图应如何响应用户输入。"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@template flutter.widgets.scroll_view.shrinkWrap} 滚动视图在 [scrollDirection] 中的范围是否应由正在查看的内容确定。"},{"name":"center","type":"Key?","desc":"[GrowthDirection.forward] 增长方向中的第一个子项。"},{"name":"anchor","type":"double","required":true,"desc":"{@template flutter.widgets.scroll_view.anchor} 零滚动偏移的相对位置。"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"semanticChildCount","type":"int?","desc":"将贡献语义信息的子项数。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@template flutter.widgets.scroll_view.keyboardDismissBehavior} [ScrollViewKeyboardDismissBehavior] 定义此 [ScrollView] 如何自动关闭键盘。{@endtemplate}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"}],"id":349,"localName":"视滑动图","lever":2,"family":0,"linkIds":[183,162,163,253,340],"nodes":[{"file":"node1_base.dart","name":"ScrollView 介绍","desc":["【reverse】 : 是否反向 【bool】","【scrollDirection】 : 滑动方向 【Axis】","【cacheExtent】 : 缓存长 【double】","【dragStartBehavior】 : 拖动行为 【DragStartBehavior】","【clipBehavior】 : 裁剪行为 【ClipBehavior】","【controller】 : 控制器 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_en-US.json b/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_en-US.json new file mode 100644 index 000000000..f40ba40f2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_en-US.json @@ -0,0 +1 @@ +{"name":"Scrollable","path":"/src/widgets/scrollable.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that manages scrolling in one dimension and informs the [Viewport] through which the content is viewed.","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@template flutter.widgets.Scrollable.axisDirection} The direction in which this widget scrolls."},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.Scrollable.controller} An object that can be used to control the position to which this widget is scrolled."},{"name":"physics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.Scrollable.physics} How the widgets should respond to user input."},{"name":"viewportBuilder","type":"ViewportBuilder","required":true,"desc":"Builds the viewport through which the scrollable content is displayed."},{"name":"incrementCalculator","type":"ScrollIncrementCalculator?","desc":"{@template flutter.widgets.Scrollable.incrementCalculator} An optional function that will be called to calculate the distance to scroll when the scrollable is asked to scroll via the keyboard using a [ScrollAction]."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"{@template flutter.widgets.scrollable.excludeFromSemantics} Whether the scroll actions introduced by this [Scrollable] are exposed in the semantics tree."},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@template flutter.widgets.scrollable.hitTestBehavior} Defines the behavior of gesture detector used in this [Scrollable]."},{"name":"semanticChildCount","type":"int?","desc":"The number of children that will contribute semantic information."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.widgets.scrollable.dragStartBehavior} Determines the way that drag start behavior is handled."},{"name":"restorationId","type":"String?","desc":"{@template flutter.widgets.scrollable.restorationId} Restoration ID to save and restore the scroll offset of the scrollable."},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.widgets.scrollable.scrollBehavior} A [ScrollBehavior] that will be applied to this widget individually."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":253,"lever":4,"family":1,"linkIds":[340,349],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Scrollable","desc":["【viewportBuilder】: Viewport Constructor 【ViewportBuilder】","【axisDirection】: Scroll Direction 【AxisDirection】","【controller】: Scroll Controller 【ScrollController】","【dragStartBehavior】: Drag Behavior 【DragStartBehavior】","【physics】: Scroll Physics 【ScrollPhysics】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_zh-CN.json new file mode 100644 index 000000000..86205f8f1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_zh-CN.json @@ -0,0 +1 @@ +{"name":"Scrollable","path":"/src/widgets/scrollable.dart","parents":["StatefulWidget","Widget"],"desc":"在一个维度上管理滚动并通过 [Viewport] 通知查看内容的小部件。","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@template flutter.widgets.Scrollable.axisDirection} 此小部件滚动的方向。"},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.Scrollable.controller} 可用于控制此小部件滚动到的位置的对象。"},{"name":"physics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.Scrollable.physics} 小部件应如何响应用户输入。"},{"name":"viewportBuilder","type":"ViewportBuilder","required":true,"desc":"构建显示可滚动内容的视口。"},{"name":"incrementCalculator","type":"ScrollIncrementCalculator?","desc":"{@template flutter.widgets.Scrollable.incrementCalculator} 当要求可滚动通过使用 [ScrollAction] 的键盘滚动时,将调用以计算滚动距离的可选函数。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"{@template flutter.widgets.scrollable.excludeFromSemantics} 此 [Scrollable] 引入的滚动操作是否在语义树中公开。"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@template flutter.widgets.scrollable.hitTestBehavior} 定义此 [Scrollable] 中使用的手势检测器的行为。"},{"name":"semanticChildCount","type":"int?","desc":"将贡献语义信息的子项数。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.widgets.scrollable.dragStartBehavior} 确定处理拖动开始行为的方式。"},{"name":"restorationId","type":"String?","desc":"{@template flutter.widgets.scrollable.restorationId} 保存和恢复可滚动滚动偏移的恢复 ID。"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.widgets.scrollable.scrollBehavior} 将单独应用于此小部件的 [ScrollBehavior]。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":253,"localName":"可滑动组件","lever":4,"family":1,"linkIds":[340,349],"nodes":[{"file":"node1_base.dart","name":"Scrollable的基本使用","desc":["【viewportBuilder】 : 视口构造器 【ViewportBuilder】","【axisDirection】: 滑动方向 【AxisDirection】","【controller】: 滑动控制器 【ScrollController】","【dragStartBehavior】: t拖动行为 【DragStartBehavior】","【physics】: 滚动现象 【ScrollPhysics】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_en-US.json b/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_en-US.json new file mode 100644 index 000000000..85e66d283 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_en-US.json @@ -0,0 +1 @@ +{"name":"Scrollbar","path":"/src/material/scrollbar.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design scrollbar.","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.Scrollbar.child}"},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.Scrollbar.controller}"},{"name":"thumbVisibility","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.thumbVisibility}"},{"name":"trackVisibility","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.trackVisibility}"},{"name":"thickness","type":"double?","desc":"The thickness of the scrollbar in the cross axis of the scrollable."},{"name":"radius","type":"Radius?","desc":"The [Radius] of the scrollbar thumb's rounded rectangle corners."},{"name":"interactive","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.interactive}"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate?","desc":"{@macro flutter.widgets.Scrollbar.notificationPredicate}"},{"name":"scrollbarOrientation","type":"ScrollbarOrientation?","desc":"{@macro flutter.widgets.Scrollbar.scrollbarOrientation}"}],"id":194,"lever":3,"family":1,"linkIds":[195,164,162],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Scrollbar","desc":["【child】: Child widget 【Widget】","【controller】: Controller 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_zh-CN.json new file mode 100644 index 000000000..d322a2299 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_zh-CN.json @@ -0,0 +1 @@ +{"name":"Scrollbar","path":"/src/material/scrollbar.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 滚动条。","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.Scrollbar.child}"},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.Scrollbar.controller}"},{"name":"thumbVisibility","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.thumbVisibility}"},{"name":"trackVisibility","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.trackVisibility}"},{"name":"thickness","type":"double?","desc":"滚动条在可滚动交叉轴上的厚度。"},{"name":"radius","type":"Radius?","desc":"滚动条拇指圆角矩形角的 [Radius]。"},{"name":"interactive","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.interactive}"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate?","desc":"{@macro flutter.widgets.Scrollbar.notificationPredicate}"},{"name":"scrollbarOrientation","type":"ScrollbarOrientation?","desc":"{@macro flutter.widgets.Scrollbar.scrollbarOrientation}"}],"id":194,"localName":"滑动指示栏","lever":3,"family":1,"linkIds":[195,164,162],"nodes":[{"file":"node1_base.dart","name":"Scrollbar基本使用","desc":["【child】 : 子组件 【Widget】","【controller】 : 控制器 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_en-US.json new file mode 100644 index 000000000..ec987a075 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_en-US.json @@ -0,0 +1 @@ +{"name":"ScrollbarTheme","path":"/src/material/scrollbar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a scrollbar theme to descendant [Scrollbar] widgets.","fields":[{"name":"data","type":"ScrollbarThemeData","required":true,"desc":"The properties used for all descendant [Scrollbar] widgets."}],"id":496,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_zh-CN.json new file mode 100644 index 000000000..9bf92e667 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"ScrollbarTheme","path":"/src/material/scrollbar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"将滚动条主题应用于后代 [Scrollbar] 小部件。","fields":[{"name":"data","type":"ScrollbarThemeData","required":true,"desc":"用于所有后代 [Scrollbar] 小部件的属性。"}],"id":496,"localName":"ScrollbarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_en-US.json b/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_en-US.json new file mode 100644 index 000000000..0d17c246e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_en-US.json @@ -0,0 +1 @@ +{"name":"SearchAnchor","path":"/src/material/search_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" Manages a \"search view\" route that allows the user to select one of the suggested completions for a search query.","fields":[{"name":"isFullScreen","type":"bool?","desc":"Whether the search view grows to fill the entire screen when the [SearchAnchor] is tapped."},{"name":"searchController","type":"SearchController?","desc":"An optional controller that allows opening and closing of the search view from other widgets."},{"name":"viewBuilder","type":"ViewBuilder?","desc":"Optional callback to obtain a widget to lay out the suggestion list of the search view."},{"name":"viewLeading","type":"Widget?","desc":"An optional widget to display before the text input field when the search view is open."},{"name":"viewTrailing","type":"Iterable?","desc":"An optional widget list to display after the text input field when the search view is open."},{"name":"viewHintText","type":"String?","desc":"Text that is displayed when the search bar's input field is empty."},{"name":"viewBackgroundColor","type":"Color?","desc":"The search view's background fill color."},{"name":"viewElevation","type":"double?","desc":"The elevation of the search view's [Material]."},{"name":"viewSurfaceTintColor","type":"Color?","desc":"The surface tint color of the search view's [Material]."},{"name":"viewSide","type":"BorderSide?","desc":"The color and weight of the search view's outline."},{"name":"viewShape","type":"OutlinedBorder?","desc":"The shape of the search view's underlying [Material]."},{"name":"viewBarPadding","type":"EdgeInsetsGeometry?","desc":"The padding to use for the search view's search bar."},{"name":"headerHeight","type":"double?","desc":"The height of the search field on the search view."},{"name":"headerTextStyle","type":"TextStyle?","desc":"The style to use for the text being edited on the search view."},{"name":"headerHintStyle","type":"TextStyle?","desc":"The style to use for the [viewHintText] on the search view."},{"name":"dividerColor","type":"Color?","desc":"The color of the divider on the search view."},{"name":"viewConstraints","type":"BoxConstraints?","desc":"Optional size constraints for the search view."},{"name":"viewPadding","type":"EdgeInsetsGeometry?","desc":"The padding to use for the search view."},{"name":"shrinkWrap","type":"bool?","desc":"Whether the search view should shrink-wrap its contents."},{"name":"textCapitalization","type":"TextCapitalization?","desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"viewOnChanged","type":"ValueChanged?","desc":"Called each time the user modifies the search view's text field."},{"name":"viewOnSubmitted","type":"ValueChanged?","desc":"Called when the user indicates that they are done editing the text in the text field of a search view. Typically this is called when the user presses the enter key."},{"name":"viewOnClose","type":"VoidCallback?","desc":"Called when the search view is closed."},{"name":"viewOnOpen","type":"VoidCallback?","desc":"Called when the search view is opened."},{"name":"builder","type":"SearchAnchorChildBuilder","required":true,"desc":"Called to create a widget which can open a search view route when it is tapped."},{"name":"suggestionsBuilder","type":"SuggestionsBuilder","required":true,"desc":"Called to get the suggestion list for the search view."},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"},{"name":"keyboardType","type":"TextInputType?","desc":"The type of action button to use for the keyboard."},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not this widget is currently interactive."}],"id":497,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_zh-CN.json new file mode 100644 index 000000000..de191b4a5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_zh-CN.json @@ -0,0 +1 @@ +{"name":"SearchAnchor","path":"/src/material/search_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"管理搜索视图路由,允许用户为搜索查询选择建议的完成项之一。","fields":[{"name":"isFullScreen","type":"bool?","desc":"点击 [SearchAnchor] 时搜索视图是否增长以填充整个屏幕。"},{"name":"searchController","type":"SearchController?","desc":"允许从其他小部件打开和关闭搜索视图的可选控制器。"},{"name":"viewBuilder","type":"ViewBuilder?","desc":"获取小部件以布局搜索视图建议列表的可选回调。"},{"name":"viewLeading","type":"Widget?","desc":"搜索视图打开时在文本输入字段之前显示的可选小部件。"},{"name":"viewTrailing","type":"Iterable?","desc":"搜索视图打开时在文本输入字段之后显示的可选小部件列表。"},{"name":"viewHintText","type":"String?","desc":"搜索栏输入字段为空时显示的文本。"},{"name":"viewBackgroundColor","type":"Color?","desc":"搜索视图的背景填充颜色。"},{"name":"viewElevation","type":"double?","desc":"搜索视图的 [Material] 的高度。"},{"name":"viewSurfaceTintColor","type":"Color?","desc":"搜索视图的 [Material] 的表面色调颜色。"},{"name":"viewSide","type":"BorderSide?","desc":"搜索视图轮廓的颜色和权重。"},{"name":"viewShape","type":"OutlinedBorder?","desc":"搜索视图底层 [Material] 的形状。"},{"name":"viewBarPadding","type":"EdgeInsetsGeometry?","desc":"用于搜索视图搜索栏的内边距。"},{"name":"headerHeight","type":"double?","desc":"搜索视图上搜索字段的高度。"},{"name":"headerTextStyle","type":"TextStyle?","desc":"用于搜索视图上正在编辑的文本的样式。"},{"name":"headerHintStyle","type":"TextStyle?","desc":"用于搜索视图上 [viewHintText] 的样式。"},{"name":"dividerColor","type":"Color?","desc":"搜索视图上分隔符的颜色。"},{"name":"viewConstraints","type":"BoxConstraints?","desc":"搜索视图的可选大小约束。"},{"name":"viewPadding","type":"EdgeInsetsGeometry?","desc":"用于搜索视图的内边距。"},{"name":"shrinkWrap","type":"bool?","desc":"搜索视图是否应收缩包装其内容。"},{"name":"textCapitalization","type":"TextCapitalization?","desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"viewOnChanged","type":"ValueChanged?","desc":"每次用户修改搜索视图的文本字段时调用。"},{"name":"viewOnSubmitted","type":"ValueChanged?","desc":"当用户指示他们已完成编辑搜索视图文本字段中的文本时调用。通常在用户按下回车键时调用。"},{"name":"viewOnClose","type":"VoidCallback?","desc":"搜索视图关闭时调用。"},{"name":"viewOnOpen","type":"VoidCallback?","desc":"搜索视图打开时调用。"},{"name":"builder","type":"SearchAnchorChildBuilder","required":true,"desc":"调用以创建点击时可以打开搜索视图路由的小部件。"},{"name":"suggestionsBuilder","type":"SuggestionsBuilder","required":true,"desc":"调用以获取搜索视图的建议列表。"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"},{"name":"keyboardType","type":"TextInputType?","desc":"用于键盘的操作按钮类型。"},{"name":"enabled","type":"bool","required":true,"desc":"此小部件当前是否可交互。"}],"id":497,"localName":"SearchAnchor","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_en-US.json b/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_en-US.json new file mode 100644 index 000000000..2b66bd066 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_en-US.json @@ -0,0 +1 @@ +{"name":"SearchBar","path":"/src/material/search_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design search bar.","fields":[{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited in the search bar's text field."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"hintText","type":"String?","desc":"Text that suggests what sort of input the field accepts."},{"name":"leading","type":"Widget?","desc":"A widget to display before the text input field."},{"name":"trailing","type":"Iterable?","desc":"A list of Widgets to display in a row after the text field."},{"name":"onTap","type":"GestureTapCallback?","desc":"Called when the user taps this search bar."},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"Called when the user taps outside the search bar."},{"name":"onChanged","type":"ValueChanged?","desc":"Invoked upon user input."},{"name":"onSubmitted","type":"ValueChanged?","desc":"Called when the user indicates that they are done editing the text in the field."},{"name":"constraints","type":"BoxConstraints?","desc":"Optional size constraints for the search bar."},{"name":"elevation","type":"MaterialStateProperty?","desc":"The elevation of the search bar's [Material]."},{"name":"backgroundColor","type":"MaterialStateProperty?","desc":"The search bar's background fill color."},{"name":"shadowColor","type":"MaterialStateProperty?","desc":"The shadow color of the search bar's [Material]."},{"name":"surfaceTintColor","type":"MaterialStateProperty?","desc":"The surface tint color of the search bar's [Material]."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The highlight color that's typically used to indicate that the search bar is focused, hovered, or pressed."},{"name":"side","type":"MaterialStateProperty?","desc":"The color and weight of the search bar's outline."},{"name":"shape","type":"MaterialStateProperty?","desc":"The shape of the search bar's underlying [Material]."},{"name":"padding","type":"MaterialStateProperty?","desc":"The padding between the search bar's boundary and its contents."},{"name":"textStyle","type":"MaterialStateProperty?","desc":"The style to use for the text being edited."},{"name":"hintStyle","type":"MaterialStateProperty?","desc":"The style to use for the [hintText]."},{"name":"textCapitalization","type":"TextCapitalization?","desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not this widget is currently interactive."},{"name":"autoFocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"},{"name":"keyboardType","type":"TextInputType?","desc":"The type of action button to use for the keyboard."},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"}],"id":498,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_zh-CN.json new file mode 100644 index 000000000..34163d555 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"SearchBar","path":"/src/material/search_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 搜索栏。","fields":[{"name":"controller","type":"TextEditingController?","desc":"控制搜索栏文本字段中正在编辑的文本。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"hintText","type":"String?","desc":"建议字段接受何种输入的文本。"},{"name":"leading","type":"Widget?","desc":"在文本输入字段之前显示的小部件。"},{"name":"trailing","type":"Iterable?","desc":"在文本字段之后一行显示的小部件列表。"},{"name":"onTap","type":"GestureTapCallback?","desc":"用户点击此搜索栏时调用。"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"用户点击搜索栏外部时调用。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户输入时调用。"},{"name":"onSubmitted","type":"ValueChanged?","desc":"当用户指示他们已完成编辑字段中的文本时调用。"},{"name":"constraints","type":"BoxConstraints?","desc":"搜索栏的可选大小约束。"},{"name":"elevation","type":"MaterialStateProperty?","desc":"搜索栏的 [Material] 的高度。"},{"name":"backgroundColor","type":"MaterialStateProperty?","desc":"搜索栏的背景填充颜色。"},{"name":"shadowColor","type":"MaterialStateProperty?","desc":"搜索栏的 [Material] 的阴影颜色。"},{"name":"surfaceTintColor","type":"MaterialStateProperty?","desc":"搜索栏的 [Material] 的表面色调颜色。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"通常用于指示搜索栏被聚焦、悬停或按下的高亮颜色。"},{"name":"side","type":"MaterialStateProperty?","desc":"搜索栏轮廓的颜色和权重。"},{"name":"shape","type":"MaterialStateProperty?","desc":"搜索栏底层 [Material] 的形状。"},{"name":"padding","type":"MaterialStateProperty?","desc":"搜索栏边界与其内容之间的内边距。"},{"name":"textStyle","type":"MaterialStateProperty?","desc":"用于正在编辑的文本的样式。"},{"name":"hintStyle","type":"MaterialStateProperty?","desc":"用于 [hintText] 的样式。"},{"name":"textCapitalization","type":"TextCapitalization?","desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"enabled","type":"bool","required":true,"desc":"此小部件当前是否可交互。"},{"name":"autoFocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"},{"name":"keyboardType","type":"TextInputType?","desc":"用于键盘的操作按钮类型。"},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"}],"id":498,"localName":"SearchBar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_en-US.json new file mode 100644 index 000000000..f592ac1e4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_en-US.json @@ -0,0 +1 @@ +{"name":"SearchBarTheme","path":"/src/material/search_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a search bar theme to descendant [SearchBar] widgets.","fields":[{"name":"data","type":"SearchBarThemeData","required":true,"desc":"The properties used for all descendant [SearchBar] widgets."}],"id":499,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_zh-CN.json new file mode 100644 index 000000000..2d252d98f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"SearchBarTheme","path":"/src/material/search_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将搜索栏主题应用于后代 [SearchBar] 小部件。","fields":[{"name":"data","type":"SearchBarThemeData","required":true,"desc":"用于所有后代 [SearchBar] 小部件的属性。"}],"id":499,"localName":"SearchBarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_en-US.json new file mode 100644 index 000000000..c38ffbc8e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_en-US.json @@ -0,0 +1 @@ +{"name":"SearchViewTheme","path":"/src/material/search_view_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration in this widget's descendants for search view created by the [SearchAnchor] widget.","fields":[{"name":"data","type":"SearchViewThemeData","required":true,"desc":"The properties used for all descendant [SearchAnchor] widgets."}],"id":500,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_zh-CN.json new file mode 100644 index 000000000..8ef038a3a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"SearchViewTheme","path":"/src/material/search_view_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件后代中由 [SearchAnchor] 小部件创建的搜索视图定义配置的继承小部件。","fields":[{"name":"data","type":"SearchViewThemeData","required":true,"desc":"用于所有后代 [SearchAnchor] 小部件的属性。"}],"id":500,"localName":"SearchViewTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_en-US.json b/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_en-US.json new file mode 100644 index 000000000..35ccc7b74 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_en-US.json @@ -0,0 +1 @@ +{"name":"SegmentedButton","path":"/src/material/segmented_button.dart","parents":["StatefulWidget","Widget"],"desc":" A Material button that allows the user to select from limited set of options.","fields":[{"name":"segments","type":"List>","required":true,"desc":"Descriptions of the segments in the button."},{"name":"direction","type":"Axis","required":true,"desc":"The orientation of the button's [segments]."},{"name":"selected","type":"Set","required":true,"desc":"The set of [ButtonSegment.value]s that indicate which [segments] are selected."},{"name":"onSelectionChanged","type":"void Function(Set)?","desc":"The function that is called when the selection changes."},{"name":"multiSelectionEnabled","type":"bool","required":true,"desc":"Determines if multiple segments can be selected at one time."},{"name":"emptySelectionAllowed","type":"bool","required":true,"desc":"Determines if having no selected segments is allowed."},{"name":"expandedInsets","type":"EdgeInsets?","desc":"Determines the segmented button's size and padding based on [expandedInsets]."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"showSelectedIcon","type":"bool","required":true,"desc":"Determines if the [selectedIcon] (usually an icon using [Icons.check]) is displayed on the selected segments."},{"name":"selectedIcon","type":"Widget?","desc":"An icon that is used to indicate a segment is selected."}],"id":501,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_zh-CN.json new file mode 100644 index 000000000..d36006ea3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"SegmentedButton","path":"/src/material/segmented_button.dart","parents":["StatefulWidget","Widget"],"desc":"允许用户从有限选项集中选择的 Material 按钮。","fields":[{"name":"segments","type":"List>","required":true,"desc":"按钮中段的描述。"},{"name":"direction","type":"Axis","required":true,"desc":"按钮的 [segments] 的方向。"},{"name":"selected","type":"Set","required":true,"desc":"指示哪些 [segments] 被选中的 [ButtonSegment.value] 集合。"},{"name":"onSelectionChanged","type":"void Function(Set)?","desc":"选择更改时调用的函数。"},{"name":"multiSelectionEnabled","type":"bool","required":true,"desc":"确定是否可以同时选择多个段。"},{"name":"emptySelectionAllowed","type":"bool","required":true,"desc":"确定是否允许没有选中的段。"},{"name":"expandedInsets","type":"EdgeInsets?","desc":"根据 [expandedInsets] 确定分段按钮的大小和内边距。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"showSelectedIcon","type":"bool","required":true,"desc":"确定是否在选中的段上显示 [selectedIcon](通常是使用 [Icons.check] 的图标)。"},{"name":"selectedIcon","type":"Widget?","desc":"用于指示段被选中的图标。"}],"id":501,"localName":"SegmentedButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_en-US.json new file mode 100644 index 000000000..37d2c0fd1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_en-US.json @@ -0,0 +1 @@ +{"name":"SegmentedButtonTheme","path":"/src/material/segmented_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the visual properties for [SegmentedButton]s in this widget's subtree.","fields":[{"name":"data","type":"SegmentedButtonThemeData","required":true,"desc":"Specifies the visual properties used by descendant [SegmentedButton] widgets."}],"id":502,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_zh-CN.json new file mode 100644 index 000000000..e66744982 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"SegmentedButtonTheme","path":"/src/material/segmented_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [SegmentedButton] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"SegmentedButtonThemeData","required":true,"desc":"指定后代 [SegmentedButton] 小部件使用的视觉属性。"}],"id":502,"localName":"SegmentedButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_en-US.json new file mode 100644 index 000000000..1a14266b9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_en-US.json @@ -0,0 +1 @@ +{"name":"SelectableRegion","path":"/src/widgets/selectable_region.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that introduces an area for user selections.","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration","required":true,"desc":"The configuration for the magnifier used with selections in this region."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"child","type":"Widget","required":true,"desc":"The child widget this selection area applies to."},{"name":"contextMenuBuilder","type":"SelectableRegionContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"selectionControls","type":"TextSelectionControls","required":true,"desc":"The delegate to build the selection handles and toolbar for mobile devices."},{"name":"onSelectionChanged","type":"ValueChanged?","desc":"Called when the selected content changes."}],"id":503,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_zh-CN.json new file mode 100644 index 000000000..cb07c21af --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_zh-CN.json @@ -0,0 +1 @@ +{"name":"SelectableRegion","path":"/src/widgets/selectable_region.dart","parents":["StatefulWidget","Widget"],"desc":"引入用户选择区域的小部件。","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration","required":true,"desc":"此区域中选择使用的放大镜配置。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"child","type":"Widget","required":true,"desc":"此选择区域应用的子小部件。"},{"name":"contextMenuBuilder","type":"SelectableRegionContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"selectionControls","type":"TextSelectionControls","required":true,"desc":"为移动设备构建选择手柄和工具栏的委托。"},{"name":"onSelectionChanged","type":"ValueChanged?","desc":"选中内容更改时调用。"}],"id":503,"localName":"SelectableRegion","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_en-US.json new file mode 100644 index 000000000..936b3c270 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_en-US.json @@ -0,0 +1 @@ +{"name":"SelectableRegionSelectionStatusScope","path":"/src/widgets/selectable_region.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Notifies its listeners when the selection under a [SelectableRegion] or [SelectionArea] is being changed or finalized.","fields":[{"name":"selectionStatusNotifier","type":"ValueListenable","required":true,"desc":"Tracks updates to the [SelectableRegionSelectionStatus] of the owning [SelectableRegion]."}],"id":504,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_zh-CN.json new file mode 100644 index 000000000..d7cabaafd --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_zh-CN.json @@ -0,0 +1 @@ +{"name":"SelectableRegionSelectionStatusScope","path":"/src/widgets/selectable_region.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"当 [SelectableRegion] 或 [SelectionArea] 下的选择正在更改或完成时通知其监听器。","fields":[{"name":"selectionStatusNotifier","type":"ValueListenable","required":true,"desc":"跟踪拥有 [SelectableRegion] 的 [SelectableRegionSelectionStatus] 的更新。"}],"id":504,"localName":"SelectableRegionSelectionStatusScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_en-US.json new file mode 100644 index 000000000..0614bdbc7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_en-US.json @@ -0,0 +1 @@ +{"name":"SelectableText","path":"/src/material/selectable_text.dart","parents":["StatefulWidget","Widget"],"desc":" A run of selectable text with a single style.","fields":[{"name":"data","type":"String?","desc":"The text to display."},{"name":"textSpan","type":"TextSpan?","desc":"The text to display as a [TextSpan]."},{"name":"focusNode","type":"FocusNode?","desc":"Defines the focus for this widget."},{"name":"style","type":"TextStyle?","desc":"The style to use for the text."},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign?","desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"textScaleFactor","type":"double?","desc":"{@macro flutter.widgets.editableText.textScaleFactor}"},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines}"},{"name":"showCursor","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius?","desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorColor","type":"Color?","desc":"The color of the cursor."},{"name":"selectionColor","type":"Color?","desc":"The color to use when painting the selection."},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"Controls how tall the selection highlight boxes are computed to be."},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"Controls how wide the selection highlight boxes are computed to be."},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"Configuration of toolbar options."},{"name":"onTap","type":"GestureTapCallback?","desc":"Called when the user taps on this selectable text."},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.editableText.scrollBehavior}"},{"name":"semanticsLabel","type":"String?","desc":"{@macro flutter.widgets.Text.semanticsLabel}"},{"name":"textHeightBehavior","type":"TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"textWidthBasis","type":"TextWidthBasis?","desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"onSelectionChanged","type":"SelectionChangedCallback?","desc":"{@macro flutter.widgets.editableText.onSelectionChanged}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"The configuration for the magnifier used when the text is selected."}],"id":53,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SelectableText","desc":["【Parameter】 : Display text 【String】","【style】 : Text style 【TextStyle】","【cursorRadius】 : Cursor radius 【Radius】","【cursorColor】 : Cursor color 【Color】","【cursorWidth】 : Cursor width 【double】","【showCursor】 : Whether to show the cursor 【bool】","【autofocus】 : Auto focus 【bool】"]},{"file":"node2_align.dart","name":"Alignment Properties of SelectableText","desc":["【textAlign】 : Alignment method*6 【textAlign】","【textDirection】 : Text direction*2 【TextDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_zh-CN.json new file mode 100644 index 000000000..26d8b0186 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_zh-CN.json @@ -0,0 +1 @@ +{"name":"SelectableText","path":"/src/material/selectable_text.dart","parents":["StatefulWidget","Widget"],"desc":"具有单一样式的可选择文本运行。","fields":[{"name":"data","type":"String?","desc":"要显示的文本。"},{"name":"textSpan","type":"TextSpan?","desc":"要显示为 [TextSpan] 的文本。"},{"name":"focusNode","type":"FocusNode?","desc":"定义此小部件的焦点。"},{"name":"style","type":"TextStyle?","desc":"用于文本的样式。"},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign?","desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"textScaleFactor","type":"double?","desc":"{@macro flutter.widgets.editableText.textScaleFactor}"},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines}"},{"name":"showCursor","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius?","desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorColor","type":"Color?","desc":"光标的颜色。"},{"name":"selectionColor","type":"Color?","desc":"绘制选择时使用的颜色。"},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"控制选择高亮框的计算高度。"},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"控制选择高亮框的计算宽度。"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"工具栏选项的配置。"},{"name":"onTap","type":"GestureTapCallback?","desc":"用户点击此可选择文本时调用。"},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.editableText.scrollBehavior}"},{"name":"semanticsLabel","type":"String?","desc":"{@macro flutter.widgets.Text.semanticsLabel}"},{"name":"textHeightBehavior","type":"TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"textWidthBasis","type":"TextWidthBasis?","desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"onSelectionChanged","type":"SelectionChangedCallback?","desc":"{@macro flutter.widgets.editableText.onSelectionChanged}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"选择文本时使用的放大镜配置。"}],"id":53,"localName":"可选择文字","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SelectableText基本使用","desc":["【入参】 : 显示文字 【String】","【style】 : 文字样式 【TextStyle】","【cursorRadius】 : 光标半径 【Radius】","【cursorColor】 : 光标颜色 【Color】","【cursorWidth】 : 光标宽度 【double】","【showCursor】 : 是否显示光标 【bool】","【autofocus】 : 自动聚焦 【bool】"]},{"file":"node2_align.dart","name":"SelectableText对齐属性","desc":["【textAlign】 : 对齐方式*6 【textAlign】","【textDirection】 : 文字方向*2 【TextDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_en-US.json new file mode 100644 index 000000000..75b2a60d5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_en-US.json @@ -0,0 +1 @@ +{"name":"SelectionArea","path":"/src/material/selection_area.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that introduces an area for user selections with adaptive selection controls.","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"The configuration for the magnifier in the selection region."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"The delegate to build the selection handles and toolbar."},{"name":"contextMenuBuilder","type":"SelectableRegionContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"onSelectionChanged","type":"ValueChanged?","desc":"Called when the selected content changes."},{"name":"child","type":"Widget","required":true,"desc":"The child widget this selection area applies to."}],"id":505,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_zh-CN.json new file mode 100644 index 000000000..de3d5080c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_zh-CN.json @@ -0,0 +1 @@ +{"name":"SelectionArea","path":"/src/material/selection_area.dart","parents":["StatefulWidget","Widget"],"desc":"引入具有自适应选择控件的用户选择区域的小部件。","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"选择区域中放大镜的配置。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"构建选择手柄和工具栏的委托。"},{"name":"contextMenuBuilder","type":"SelectableRegionContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"onSelectionChanged","type":"ValueChanged?","desc":"选中内容更改时调用。"},{"name":"child","type":"Widget","required":true,"desc":"此选择区域应用的子小部件。"}],"id":505,"localName":"SelectionArea","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_en-US.json new file mode 100644 index 000000000..09d801e6d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_en-US.json @@ -0,0 +1 @@ +{"name":"SelectionContainer","path":"/src/widgets/selection_container.dart","parents":["StatefulWidget","Widget"],"desc":" A container that handles [SelectionEvent]s for the [Selectable]s in the subtree.","fields":[{"name":"registrar","type":"SelectionRegistrar?","desc":"The [SelectionRegistrar] this container is registered to."},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"},{"name":"delegate","type":"SelectionContainerDelegate?","desc":"The delegate for [SelectionEvent]s sent to this selection container."}],"id":506,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_zh-CN.json new file mode 100644 index 000000000..246994a6a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_zh-CN.json @@ -0,0 +1 @@ +{"name":"SelectionContainer","path":"/src/widgets/selection_container.dart","parents":["StatefulWidget","Widget"],"desc":"为子树中的 [Selectable] 处理 [SelectionEvent] 的容器。","fields":[{"name":"registrar","type":"SelectionRegistrar?","desc":"此容器注册到的 [SelectionRegistrar]。"},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"},{"name":"delegate","type":"SelectionContainerDelegate?","desc":"发送到此选择容器的 [SelectionEvent] 的委托。"}],"id":506,"localName":"SelectionContainer","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_en-US.json new file mode 100644 index 000000000..3d602c828 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_en-US.json @@ -0,0 +1 @@ +{"name":"SelectionListener","path":"/src/widgets/selectable_region.dart","parents":["StatefulWidget","Widget"],"desc":" A [SelectionContainer] that allows the user to access the [SelectionDetails] and listen to selection changes for the child subtree it wraps under a [SelectionArea] or [SelectableRegion].","fields":[{"name":"selectionNotifier","type":"SelectionListenerNotifier","required":true,"desc":"Notifies listeners when the selection has changed."},{"name":"child","type":"Widget","required":true,"desc":"The child widget this selection listener applies to."}],"id":507,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_zh-CN.json new file mode 100644 index 000000000..9f322209c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_zh-CN.json @@ -0,0 +1 @@ +{"name":"SelectionListener","path":"/src/widgets/selectable_region.dart","parents":["StatefulWidget","Widget"],"desc":"允许用户访问 [SelectionDetails] 并监听在 [SelectionArea] 或 [SelectableRegion] 下包装的子子树的选择更改的 [SelectionContainer]。","fields":[{"name":"selectionNotifier","type":"SelectionListenerNotifier","required":true,"desc":"选择更改时通知监听器。"},{"name":"child","type":"Widget","required":true,"desc":"此选择监听器应用的子小部件。"}],"id":507,"localName":"SelectionListener","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_en-US.json new file mode 100644 index 000000000..44a4a9c3e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_en-US.json @@ -0,0 +1 @@ +{"name":"SelectionRegistrarScope","path":"/src/widgets/selection_container.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget to host a [SelectionRegistrar] for the subtree.","fields":[{"name":"registrar","type":"SelectionRegistrar?","desc":"The [SelectionRegistrar] hosted by this widget."}],"id":508,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_zh-CN.json new file mode 100644 index 000000000..bf79d6a95 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_zh-CN.json @@ -0,0 +1 @@ +{"name":"SelectionRegistrarScope","path":"/src/widgets/selection_container.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为子树托管 [SelectionRegistrar] 的继承小部件。","fields":[{"name":"registrar","type":"SelectionRegistrar?","desc":"此小部件托管的 [SelectionRegistrar]。"}],"id":508,"localName":"SelectionRegistrarScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_en-US.json b/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_en-US.json new file mode 100644 index 000000000..7e3d38d62 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_en-US.json @@ -0,0 +1 @@ +{"name":"Semantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that annotates the widget tree with a description of the meaning of the widgets.","fields":[{"name":"properties","type":"SemanticsProperties","required":true,"desc":"Contains properties used by assistive technologies to make the application more accessible."},{"name":"container","type":"bool","required":true,"desc":"If [container] is true, this widget will introduce a new node in the semantics tree. Otherwise, the semantics will be merged with the semantics of any ancestors (if the ancestor allows that)."},{"name":"explicitChildNodes","type":"bool","required":true,"desc":"Whether descendants of this widget are allowed to add semantic information to the [SemanticsNode] annotated by this widget."},{"name":"excludeSemantics","type":"bool","required":true,"desc":"Whether to replace all child semantics with this node."},{"name":"blockUserActions","type":"bool","required":true,"desc":"Whether to block user interactions for the rendering subtree."}],"id":509,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_zh-CN.json new file mode 100644 index 000000000..48f87a588 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_zh-CN.json @@ -0,0 +1 @@ +{"name":"Semantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"用小部件含义描述注释小部件树的小部件。","fields":[{"name":"properties","type":"SemanticsProperties","required":true,"desc":"包含辅助技术用于使应用程序更易于访问的属性。"},{"name":"container","type":"bool","required":true,"desc":"如果 [container] 为 true,此小部件将在语义树中引入新节点。否则,语义将与任何祖先的语义合并(如果祖先允许)。"},{"name":"explicitChildNodes","type":"bool","required":true,"desc":"此小部件的后代是否允许向此小部件注释的 [SemanticsNode] 添加语义信息。"},{"name":"excludeSemantics","type":"bool","required":true,"desc":"是否用此节点替换所有子语义。"},{"name":"blockUserActions","type":"bool","required":true,"desc":"是否阻止渲染子树的用户交互。"}],"id":509,"localName":"Semantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_en-US.json b/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_en-US.json new file mode 100644 index 000000000..180d13849 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_en-US.json @@ -0,0 +1 @@ +{"name":"SemanticsDebugger","path":"/src/widgets/semantics_debugger.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that visualizes the semantics for the child.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"labelStyle","type":"TextStyle","required":true,"desc":"The [TextStyle] to use when rendering semantics labels."}],"id":510,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_zh-CN.json new file mode 100644 index 000000000..562fb8b81 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_zh-CN.json @@ -0,0 +1 @@ +{"name":"SemanticsDebugger","path":"/src/widgets/semantics_debugger.dart","parents":["StatefulWidget","Widget"],"desc":"可视化子项语义的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"labelStyle","type":"TextStyle","required":true,"desc":"渲染语义标签时使用的 [TextStyle]。"}],"id":510,"localName":"SemanticsDebugger","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_en-US.json b/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_en-US.json new file mode 100644 index 000000000..ac8b1a602 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_en-US.json @@ -0,0 +1 @@ +{"name":"ShaderMask","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that applies a mask generated by a [Shader] to its child.","fields":[{"name":"shaderCallback","type":"ShaderCallback","required":true,"desc":"Called to create the [dart:ui.Shader] that generates the mask."},{"name":"blendMode","type":"BlendMode","required":true,"desc":"The [BlendMode] to use when applying the shader to the child."}],"id":277,"lever":4,"family":2,"linkIds":[88,38],"nodes":[{"file":"node1_radial.dart","name":"Radial Gradient Shading","desc":["【child】: Child component 【Widget】","【shaderCallback】: Shader callback 【ShaderCallback】","【blendMode】: Blending mode 【BlendMode】"," Create a radial gradient shader through RadialGradient#createShader."]},{"file":"node2_linear.dart","name":"Linear Gradient Shading","desc":["Create a linear gradient shader through LinearGradient#createShader","For more information on shaders, see 【Drawing Album】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_zh-CN.json new file mode 100644 index 000000000..8e52b4f5f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_zh-CN.json @@ -0,0 +1 @@ +{"name":"ShaderMask","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将由 [Shader] 生成的蒙版应用于其子项的小部件。","fields":[{"name":"shaderCallback","type":"ShaderCallback","required":true,"desc":"调用以创建生成蒙版的 [dart:ui.Shader]。"},{"name":"blendMode","type":"BlendMode","required":true,"desc":"将着色器应用于子项时使用的 [BlendMode]。"}],"id":277,"localName":"着色器遮罩","lever":4,"family":2,"linkIds":[88,38],"nodes":[{"file":"node1_radial.dart","name":"径向渐变着色","desc":["【child】 : 孩子组件 【Widget】","【shaderCallback】 : 着色器回调 【ShaderCallback】","【blendMode】 : 混色模式 【BlendMode】"," 通过RadialGradient#createShader创建径向渐变着色器。"]},{"file":"node2_linear.dart","name":"线性渐变着色","desc":["通过LinearGradient#createShader创建线性渐变着色器","着色器相关知识详见【绘制专辑】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_en-US.json b/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_en-US.json new file mode 100644 index 000000000..b3bf7fe4b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_en-US.json @@ -0,0 +1 @@ +{"name":"SharedAppData","path":"/src/widgets/shared_app_data.dart","parents":["StatefulWidget","Widget"],"desc":" Enables sharing key/value data with its `child` and all of the child's descendants.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":511,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_zh-CN.json new file mode 100644 index 000000000..ba17e0dfe --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_zh-CN.json @@ -0,0 +1 @@ +{"name":"SharedAppData","path":"/src/widgets/shared_app_data.dart","parents":["StatefulWidget","Widget"],"desc":"允许与其 `child` 及所有子项的后代共享键/值数据。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":511,"localName":"SharedAppData","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_en-US.json b/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_en-US.json new file mode 100644 index 000000000..811d84c38 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_en-US.json @@ -0,0 +1 @@ +{"name":"ShortcutRegistrar","path":"/src/widgets/shortcuts.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that holds a [ShortcutRegistry] which allows descendants to add, remove, or replace shortcuts.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":512,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_zh-CN.json new file mode 100644 index 000000000..75f380f3d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_zh-CN.json @@ -0,0 +1 @@ +{"name":"ShortcutRegistrar","path":"/src/widgets/shortcuts.dart","parents":["StatefulWidget","Widget"],"desc":"持有 [ShortcutRegistry] 的小部件,允许后代添加、删除或替换快捷方式。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":512,"localName":"ShortcutRegistrar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_en-US.json b/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_en-US.json new file mode 100644 index 000000000..803984103 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_en-US.json @@ -0,0 +1 @@ +{"name":"Shortcuts","path":"/src/widgets/shortcuts.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that creates key bindings to specific actions for its descendants.","fields":[{"name":"manager","type":"ShortcutManager?","desc":"The [ShortcutManager] that will manage the mapping between key combinations and [Action]s."},{"name":"child","type":"Widget","required":true,"desc":"The child widget for this [Shortcuts] widget."},{"name":"debugLabel","type":"String?","desc":"The debug label that is printed for this node when logged."},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"}],"id":513,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_zh-CN.json new file mode 100644 index 000000000..fffb24ff1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_zh-CN.json @@ -0,0 +1 @@ +{"name":"Shortcuts","path":"/src/widgets/shortcuts.dart","parents":["StatefulWidget","Widget"],"desc":"为其后代创建特定操作的键绑定的小部件。","fields":[{"name":"manager","type":"ShortcutManager?","desc":"将管理键组合和 [Action] 之间映射的 [ShortcutManager]。"},{"name":"child","type":"Widget","required":true,"desc":"此 [Shortcuts] 小部件的子小部件。"},{"name":"debugLabel","type":"String?","desc":"记录时为此节点打印的调试标签。"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"}],"id":513,"localName":"Shortcuts","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_en-US.json b/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_en-US.json new file mode 100644 index 000000000..dce50e11c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_en-US.json @@ -0,0 +1 @@ +{"name":"ShrinkWrappingViewport","path":"/src/widgets/viewport.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that is bigger on the inside and shrink wraps its children in the main axis.","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"The direction in which the [offset]'s [ViewportOffset.pixels] increases."},{"name":"crossAxisDirection","type":"AxisDirection?","desc":"The direction in which child should be laid out in the cross axis."},{"name":"offset","type":"ViewportOffset","required":true,"desc":"Which part of the content inside the viewport should be visible."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":343,"lever":1,"family":3,"linkIds":[349,162,163],"nodes":[{"file":"node1_base.dart","name":"Introduction to NestedScrollViewViewport","desc":["【offset】: *offset 【ViewportOffset】","【axisDirection】: Axis direction 【AxisDirection】","【crossAxisDirection】: Cross axis direction 【AxisDirection】","【slivers】: Child components 【List】","【clipBehavior】: Clip behavior 【Clip】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_zh-CN.json new file mode 100644 index 000000000..c4cff1b89 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_zh-CN.json @@ -0,0 +1 @@ +{"name":"ShrinkWrappingViewport","path":"/src/widgets/viewport.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"内部更大且在主轴上收缩包装其子项的小部件。","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"[offset] 的 [ViewportOffset.pixels] 增加的方向。"},{"name":"crossAxisDirection","type":"AxisDirection?","desc":"子项应在交叉轴上布局的方向。"},{"name":"offset","type":"ViewportOffset","required":true,"desc":"视口内容的哪一部分应该可见。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":343,"localName":"收缩包围视图","lever":1,"family":3,"linkIds":[349,162,163],"nodes":[{"file":"node1_base.dart","name":"NestedScrollViewViewport 介绍","desc":["【offset】 : *偏移 【ViewportOffset】","【axisDirection】 : 轴向 【AxisDirection】","【crossAxisDirection】 : 交叉轴向 【AxisDirection】","【slivers】 : 子组件 【List】","【clipBehavior】 : 裁剪行为 【Clip】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_en-US.json new file mode 100644 index 000000000..6ae6d1991 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_en-US.json @@ -0,0 +1 @@ +{"name":"SimpleDialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":" A simple Material Design dialog.","fields":[{"name":"title","type":"Widget?","desc":"The (optional) title of the dialog is displayed in a large font at the top of the dialog."},{"name":"titlePadding","type":"EdgeInsetsGeometry","required":true,"desc":"Padding around the title."},{"name":"titleTextStyle","type":"TextStyle?","desc":"Style for the text in the [title] of this [SimpleDialog]."},{"name":"children","type":"List?","desc":"The (optional) content of the dialog is displayed in a [SingleChildScrollView] underneath the title."},{"name":"contentPadding","type":"EdgeInsetsGeometry","required":true,"desc":"Padding around the content."},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.dialog.backgroundColor}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.dialog.elevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.dialog.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.dialog.surfaceTintColor}"},{"name":"semanticLabel","type":"String?","desc":"The semantic label of the dialog used by accessibility frameworks to announce screen transitions when the dialog is opened and closed."},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@macro flutter.material.dialog.insetPadding}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.dialog.clipBehavior}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.dialog.shape}"},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@macro flutter.material.dialog.shape}"}],"id":128,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SimpleDialog","desc":["【title】 : Top component 【Widget】","【children】 : List of child components 【List】","【titlePadding】 : Top padding 【EdgeInsetsGeometry】","【contentPadding】 : Content padding 【EdgeInsetsGeometry】","【backgroundColor】 : Background color 【Color】","【elevation】 : Shadow depth 【double】","【shape】 : Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_zh-CN.json new file mode 100644 index 000000000..1ac4442fc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_zh-CN.json @@ -0,0 +1 @@ +{"name":"SimpleDialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":"简单的 Material Design 对话框。","fields":[{"name":"title","type":"Widget?","desc":"对话框的(可选)标题以大字体显示在对话框顶部。"},{"name":"titlePadding","type":"EdgeInsetsGeometry","required":true,"desc":"标题周围的内边距。"},{"name":"titleTextStyle","type":"TextStyle?","desc":"此 [SimpleDialog] 的 [title] 中文本的样式。"},{"name":"children","type":"List?","desc":"对话框的(可选)内容显示在标题下方的 [SingleChildScrollView] 中。"},{"name":"contentPadding","type":"EdgeInsetsGeometry","required":true,"desc":"内容周围的内边距。"},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.dialog.backgroundColor}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.dialog.elevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.dialog.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.dialog.surfaceTintColor}"},{"name":"semanticLabel","type":"String?","desc":"辅助功能框架用于在打开和关闭对话框时宣布屏幕转换的对话框语义标签。"},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@macro flutter.material.dialog.insetPadding}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.dialog.clipBehavior}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.dialog.shape}"},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@macro flutter.material.dialog.shape}"}],"id":128,"localName":"简单对话框","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SimpleDialog基本使用","desc":["【title】 : 顶部组件 【Widget】","【children】 : 子组件列表 【List】","【titlePadding】 : 顶部内边距 【EdgeInsetsGeometry】","【contentPadding】 : 内容内边距 【EdgeInsetsGeometry】","【backgroundColor】 : 背景色 【Color】","【elevation】 : 影深 【double】","【shape】 : 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_en-US.json b/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_en-US.json new file mode 100644 index 000000000..144559a93 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_en-US.json @@ -0,0 +1 @@ +{"name":"SimpleDialogOption","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":" An option used in a [SimpleDialog].","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when this option is selected."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"padding","type":"EdgeInsets?","desc":"The amount of space to surround the [child] with."}],"id":133,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SimpleDialogOption","desc":["【child】 : Child widget 【Widget】","【onPressed】 : Click event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_zh-CN.json new file mode 100644 index 000000000..40072e243 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_zh-CN.json @@ -0,0 +1 @@ +{"name":"SimpleDialogOption","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":"[SimpleDialog] 中使用的选项。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"选择此选项时调用的回调。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"padding","type":"EdgeInsets?","desc":"围绕 [child] 的空间量。"}],"id":133,"localName":"简单对话框选项","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SimpleDialogOption基本使用","desc":["【child】 : 子组件 【Widget】","【onPressed】 : 点击事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_en-US.json new file mode 100644 index 000000000..23ca594d2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_en-US.json @@ -0,0 +1 @@ +{"name":"SingleChildRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A superclass for [RenderObjectWidget]s that configure [RenderObject] subclasses that have a single child slot.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":514,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_zh-CN.json new file mode 100644 index 000000000..4df33a258 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"SingleChildRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"配置具有单个子插槽的 [RenderObject] 子类的 [RenderObjectWidget] 的超类。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":514,"localName":"SingleChildRenderObjectWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_en-US.json new file mode 100644 index 000000000..764101189 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_en-US.json @@ -0,0 +1 @@ +{"name":"SingleChildScrollView","path":"/src/widgets/single_child_scroll_view.dart","parents":["StatelessWidget","Widget"],"desc":" A box in which a single widget can be scrolled.","fields":[{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"Whether the scroll view scrolls in the reading direction."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the child."},{"name":"controller","type":"ScrollController?","desc":"An object that can be used to control the position to which this scroll view is scrolled."},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"physics","type":"ScrollPhysics?","desc":"How the scroll view should respond to user input."},{"name":"child","type":"Widget?","desc":"The widget that scrolls."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"}],"id":164,"lever":5,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SingleChildScrollView","desc":["【child】: Child widget 【Widget】","【padding】: Padding 【EdgeInsetsGeometry】"]},{"file":"node2_direction.dart","name":"Scroll Direction of SingleChildScrollView","desc":["【scrollDirection】: Scroll direction 【Axis】","【reverse】: Whether to reverse 【Axis】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_zh-CN.json new file mode 100644 index 000000000..ad4496fef --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_zh-CN.json @@ -0,0 +1 @@ +{"name":"SingleChildScrollView","path":"/src/widgets/single_child_scroll_view.dart","parents":["StatelessWidget","Widget"],"desc":"可以滚动单个小部件的框。","fields":[{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"滚动视图是否在阅读方向上滚动。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"插入子项的空间量。"},{"name":"controller","type":"ScrollController?","desc":"可用于控制此滚动视图滚动到的位置的对象。"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"physics","type":"ScrollPhysics?","desc":"滚动视图应如何响应用户输入。"},{"name":"child","type":"Widget?","desc":"滚动的小部件。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"}],"id":164,"localName":"单子滑动","lever":5,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SingleChildScrollView基本使用","desc":["【child】 : 子组件 【Widget】","【padding】 : 内边距 【EdgeInsetsGeometry】"]},{"file":"node2_direction.dart","name":"SingleChildScrollView滑动方向","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向 【Axis】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_en-US.json b/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_en-US.json new file mode 100644 index 000000000..9977fb473 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_en-US.json @@ -0,0 +1 @@ +{"name":"SizeChangedLayoutNotifier","path":"/src/widgets/size_changed_layout_notifier.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that automatically dispatches a [SizeChangedLayoutNotification] when the layout dimensions of its child change.","fields":[],"id":294,"lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage","desc":["【child】 : Component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_zh-CN.json new file mode 100644 index 000000000..140a24049 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_zh-CN.json @@ -0,0 +1 @@ +{"name":"SizeChangedLayoutNotifier","path":"/src/widgets/size_changed_layout_notifier.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"当其子项的布局尺寸发生变化时自动分发 [SizeChangedLayoutNotification] 的小部件。","fields":[],"id":294,"localName":"尺寸变化通告","lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"基本使用","desc":["【child】 : 组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_en-US.json new file mode 100644 index 000000000..5997abe05 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_en-US.json @@ -0,0 +1 @@ +{"name":"SizeTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animates its own size and clips and aligns its child.","fields":[{"name":"axis","type":"Axis","required":true,"desc":"[Axis.horizontal] if [sizeFactor] modifies the width, otherwise [Axis.vertical]."},{"name":"axisAlignment","type":"double","required":true,"desc":"Describes how to align the child along the axis that [sizeFactor] is modifying."},{"name":"fixedCrossAxisSizeFactor","type":"double?","desc":"The factor by which to multiply the cross axis size of the child."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":92,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SizeTransition","desc":["【child】: Child component 【Widget】","【axis】: Axis*2 【Axis】","【sizeFactor】: Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_zh-CN.json new file mode 100644 index 000000000..562784e39 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_zh-CN.json @@ -0,0 +1 @@ +{"name":"SizeTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"对其自身大小进行动画处理并裁剪和对齐其子项。","fields":[{"name":"axis","type":"Axis","required":true,"desc":"如果 [sizeFactor] 修改宽度则为 [Axis.horizontal],否则为 [Axis.vertical]。"},{"name":"axisAlignment","type":"double","required":true,"desc":"描述如何沿着 [sizeFactor] 正在修改的轴对齐子项。"},{"name":"fixedCrossAxisSizeFactor","type":"double?","desc":"乘以子项交叉轴大小的因子。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":92,"localName":"尺寸变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SizeTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【axis】 : 轴向*2 【Axis】","【sizeFactor】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_en-US.json new file mode 100644 index 000000000..c9a79ef03 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_en-US.json @@ -0,0 +1 @@ +{"name":"SizedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A box with a specified size.","fields":[{"name":"width","type":"double?","desc":"If non-null, requires the child to have exactly this width."},{"name":"height","type":"double?","desc":"If non-null, requires the child to have exactly this height."}],"id":76,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SizedBox","desc":["【child】 : Child component 【Widget】","【width】 : Width 【double】","【height】 : Height 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_zh-CN.json new file mode 100644 index 000000000..e7941d7ff --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_zh-CN.json @@ -0,0 +1 @@ +{"name":"SizedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"具有指定大小的框。","fields":[{"name":"width","type":"double?","desc":"如果非空,要求子项具有确切的此宽度。"},{"name":"height","type":"double?","desc":"如果非空,要求子项具有确切的此高度。"}],"id":76,"localName":"定尺寸盒","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SizedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【width】 : 宽 【double】","【height】 : 高 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_en-US.json b/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_en-US.json new file mode 100644 index 000000000..e0468096c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_en-US.json @@ -0,0 +1 @@ +{"name":"SizedOverflowBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that is a specific size but passes its original constraints through to its child, which may then overflow.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the child."},{"name":"size","type":"Size","required":true,"desc":"The size this widget should attempt to be."}],"id":84,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SizedOverflowBox","desc":["【child】: Child component 【Widget】","【size】: Size offset 【Size】","【alignment】: Alignment method 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_zh-CN.json new file mode 100644 index 000000000..ae9a63018 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_zh-CN.json @@ -0,0 +1 @@ +{"name":"SizedOverflowBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"具有特定大小但将其原始约束传递给其子项的小部件,然后子项可能会溢出。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何对齐子项。"},{"name":"size","type":"Size","required":true,"desc":"此小部件应尝试达到的大小。"}],"id":84,"localName":"尺寸溢出盒","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SizedOverflowBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【size】 : 尺寸偏移 【Size】","【alignment】 : 对齐方式 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_en-US.json new file mode 100644 index 000000000..2d89b8a45 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_en-US.json @@ -0,0 +1 @@ +{"name":"SlideTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animates the position of a widget relative to its normal position.","fields":[{"name":"textDirection","type":"TextDirection?","desc":"The direction to use for the x offset described by the [position]."},{"name":"transformHitTests","type":"bool","required":true,"desc":"Whether hit testing should be affected by the slide animation."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":112,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SlideTransition","desc":["【child】: Child component 【Widget】","【textDirection】: X-axis direction 【TextDirection】","【position】: Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_zh-CN.json new file mode 100644 index 000000000..8cafd2977 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_zh-CN.json @@ -0,0 +1 @@ +{"name":"SlideTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"相对于其正常位置对小部件位置进行动画处理。","fields":[{"name":"textDirection","type":"TextDirection?","desc":"用于 [position] 描述的 x 偏移的方向。"},{"name":"transformHitTests","type":"bool","required":true,"desc":"命中测试是否应受滑动动画影响。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":112,"localName":"滑动变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SlideTransition 基本使用","desc":["【child】 : 孩子组件 【Widget】","【textDirection】 : x轴方向 【TextDirection】","【position】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Slider/Slider_en-US.json b/modules/widget_system/widgets/doc/widgets/Slider/Slider_en-US.json new file mode 100644 index 000000000..c7986489d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Slider/Slider_en-US.json @@ -0,0 +1 @@ +{"name":"Slider","path":"/src/material/slider.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design slider.","fields":[{"name":"value","type":"double","required":true,"desc":"The currently selected value for this slider."},{"name":"secondaryTrackValue","type":"double?","desc":"The secondary track value for this slider."},{"name":"onChanged","type":"ValueChanged?","desc":"Called during a drag when the user is selecting a new value for the slider by dragging."},{"name":"onChangeStart","type":"ValueChanged?","desc":"Called when the user starts selecting a new value for the slider."},{"name":"onChangeEnd","type":"ValueChanged?","desc":"Called when the user is done selecting a new value for the slider."},{"name":"min","type":"double","required":true,"desc":"The minimum value the user can select."},{"name":"max","type":"double","required":true,"desc":"The maximum value the user can select."},{"name":"divisions","type":"int?","desc":"The number of discrete divisions."},{"name":"label","type":"String?","desc":"A label to show above the slider when the slider is active and [SliderThemeData.showValueIndicator] is satisfied."},{"name":"activeColor","type":"Color?","desc":"The color to use for the portion of the slider track that is active."},{"name":"inactiveColor","type":"Color?","desc":"The color for the inactive portion of the slider track."},{"name":"secondaryActiveColor","type":"Color?","desc":"The color to use for the portion of the slider track between the thumb and the [Slider.secondaryTrackValue]."},{"name":"thumbColor","type":"Color?","desc":"The color of the thumb."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The highlight color that's typically used to indicate that the slider thumb is focused, hovered, or dragged."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.slider.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"semanticFormatterCallback","type":"SemanticFormatterCallback?","desc":"The callback used to create a semantic value from a slider value."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"allowedInteraction","type":"SliderInteraction?","desc":"Allowed way for the user to interact with the [Slider]."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Determines the padding around the [Slider]."},{"name":"year2023","type":"bool?","desc":"When true, the [Slider] will use the 2023 Material Design 3 appearance. Defaults to true."}],"id":42,"lever":4,"family":1,"linkIds":[43,44,331],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Slider","desc":["【value】 : value 【double】","【min】 : minimum value 【double】","【max】 : maximum value 【double】","【activeColor】 : active color 【Color】","【inactiveColor】 : inactive color 【Color】","【onChanged】 : callback when changed 【Function(double)】"]},{"file":"node2_lable.dart","name":"Slider Segments and Labels","desc":["【divisions】 : number of segments 【int】","【label】 : tooltip text 【String】","【onChangeStart】 : listener when sliding starts 【Function(double)】","【onChangeEnd】 : listener when sliding ends 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Slider/Slider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Slider/Slider_zh-CN.json new file mode 100644 index 000000000..a5593aea4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Slider/Slider_zh-CN.json @@ -0,0 +1 @@ +{"name":"Slider","path":"/src/material/slider.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 滑块。","fields":[{"name":"value","type":"double","required":true,"desc":"此滑块当前选择的值。"},{"name":"secondaryTrackValue","type":"double?","desc":"此滑块的次要轨道值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户通过拖动为滑块选择新值时在拖动期间调用。"},{"name":"onChangeStart","type":"ValueChanged?","desc":"用户开始为滑块选择新值时调用。"},{"name":"onChangeEnd","type":"ValueChanged?","desc":"用户完成为滑块选择新值时调用。"},{"name":"min","type":"double","required":true,"desc":"用户可以选择的最小值。"},{"name":"max","type":"double","required":true,"desc":"用户可以选择的最大值。"},{"name":"divisions","type":"int?","desc":"离散分割的数量。"},{"name":"label","type":"String?","desc":"当滑块处于活动状态且满足 [SliderThemeData.showValueIndicator] 时在滑块上方显示的标签。"},{"name":"activeColor","type":"Color?","desc":"用于滑块轨道活动部分的颜色。"},{"name":"inactiveColor","type":"Color?","desc":"滑块轨道非活动部分的颜色。"},{"name":"secondaryActiveColor","type":"Color?","desc":"用于拇指和 [Slider.secondaryTrackValue] 之间滑块轨道部分的颜色。"},{"name":"thumbColor","type":"Color?","desc":"拇指的颜色。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"通常用于指示滑块拇指被聚焦、悬停或拖动的高亮颜色。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.slider.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"semanticFormatterCallback","type":"SemanticFormatterCallback?","desc":"用于从滑块值创建语义值的回调。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"allowedInteraction","type":"SliderInteraction?","desc":"用户与 [Slider] 交互的允许方式。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"确定 [Slider] 周围的内边距。"},{"name":"year2023","type":"bool?","desc":"当为 true 时,[Slider] 将使用 2023 Material Design 3 外观。默认为 true。"}],"id":42,"localName":"滑块","lever":4,"family":1,"linkIds":[43,44,331],"nodes":[{"file":"node1_base.dart","name":"Slider基本使用","desc":["【value】 : 数值 【double】","【min】 : 最小值 【double】","【max】 : 最大值 【double】","【activeColor】 : 激活颜色 【Color】","【inactiveColor】 : 非激活颜色 【Color】","【onChanged】 : 改变时回调 【Function(double)】"]},{"file":"node2_lable.dart","name":"Slider的分段与标签","desc":["【divisions】 : 分段数 【int】","【label】 : 提示气泡文字 【String】","【onChangeStart】 : 开始滑动时监听 【Function(double)】","【onChangeEnd】 : 滑动结束时监听 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_en-US.json new file mode 100644 index 000000000..bfdfa8e08 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_en-US.json @@ -0,0 +1 @@ +{"name":"SliderTheme","path":"/src/material/slider_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a slider theme to descendant [Slider] widgets.","fields":[{"name":"data","type":"SliderThemeData","required":true,"desc":"Specifies the color and shape values for descendant slider widgets."}],"id":331,"lever":3,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliderTheme Usage","desc":["You can obtain the Slider theme data object through SliderTheme.of, which contains a large number of properties for setting the Slider.","You can set the default style for the button components of ButtonTheme【descendants】, including color, shape, size, etc."]},{"file":"node2_diy.dart","name":"SliderTheme Customization for Slider","desc":["You can customize the style of the Slider through thumbShape and valueIndicatorShape.","Note: This example refers to the SlideDemo in flutter-gallery"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_zh-CN.json new file mode 100644 index 000000000..6f9cf02fb --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliderTheme","path":"/src/material/slider_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"将滑块主题应用于后代 [Slider] 小部件。","fields":[{"name":"data","type":"SliderThemeData","required":true,"desc":"指定后代滑块小部件的颜色和形状值。"}],"id":331,"localName":"滑块样式","lever":3,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliderTheme使用","desc":["可通过SliderTheme.of获取Slider主题数据对象,其中包含大量属性用于对Slider的设定。\"","可以为ButtonTheme【后代】的按钮组件设置默认样式,包括颜色、形状、尺寸等。"]},{"file":"node2_diy.dart","name":"SliderTheme对Slider的样式定制","desc":["通过thumbShape和valueIndicatorShape可以对Slider进行样式定制。\"","注: 本例参考flutter-gallery中的SlideDemo"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_en-US.json new file mode 100644 index 000000000..81752abd1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_en-US.json @@ -0,0 +1 @@ +{"name":"SliverAnimatedGrid","path":"/src/widgets/animated_scroll_view.dart","parents":["_SliverAnimatedMultiBoxAdaptor","StatefulWidget","Widget"],"desc":" A [SliverGrid] that animates items when they are inserted or removed.","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"{@macro flutter.widgets.AnimatedGrid.gridDelegate}"}],"id":515,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_zh-CN.json new file mode 100644 index 000000000..9568fe492 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverAnimatedGrid","path":"/src/widgets/animated_scroll_view.dart","parents":["_SliverAnimatedMultiBoxAdaptor","StatefulWidget","Widget"],"desc":"在插入或删除项目时对其进行动画处理的 [SliverGrid]。","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"{@macro flutter.widgets.AnimatedGrid.gridDelegate}"}],"id":515,"localName":"SliverAnimatedGrid","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_en-US.json new file mode 100644 index 000000000..28ef9193c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_en-US.json @@ -0,0 +1 @@ +{"name":"SliverAnimatedList","path":"/src/widgets/animated_scroll_view.dart","parents":["_SliverAnimatedMultiBoxAdaptor","StatefulWidget","Widget"],"desc":" A [SliverList] that animates items when they are inserted or removed.","fields":[],"id":301,"lever":3,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverAnimatedList","desc":["【itemBuilder】: Item builder 【AnimatedListItemBuilder】","【initialItemCount】: Initial item count 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_zh-CN.json new file mode 100644 index 000000000..c9bc46a49 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverAnimatedList","path":"/src/widgets/animated_scroll_view.dart","parents":["_SliverAnimatedMultiBoxAdaptor","StatefulWidget","Widget"],"desc":"在插入或删除项目时对其进行动画处理的 [SliverList]。","fields":[],"id":301,"localName":"Sliver动画列表","lever":3,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"SliverAnimatedList基本使用","desc":["【itemBuilder】 : item构造器 【AnimatedListItemBuilder】","【initialItemCount】 : 初始item个数 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_en-US.json new file mode 100644 index 000000000..1b8eab9ec --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_en-US.json @@ -0,0 +1 @@ +{"name":"SliverAnimatedOpacity","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [SliverOpacity] which automatically transitions the sliver child's opacity over a given duration whenever the given opacity changes.","fields":[{"name":"sliver","type":"Widget?","desc":"The sliver below this widget in the tree."},{"name":"opacity","type":"double","required":true,"desc":"The target opacity."},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"Whether the semantic information of the children is always included."}],"id":516,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_zh-CN.json new file mode 100644 index 000000000..0780a70b7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverAnimatedOpacity","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[SliverOpacity] 的动画版本,每当给定的不透明度发生变化时,会在给定的持续时间内自动过渡 sliver 子项的不透明度。","fields":[{"name":"sliver","type":"Widget?","desc":"树中此小部件下方的 sliver。"},{"name":"opacity","type":"double","required":true,"desc":"目标不透明度。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含子项的语义信息。"}],"id":516,"localName":"SliverAnimatedOpacity","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_en-US.json new file mode 100644 index 000000000..00d1147d9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_en-US.json @@ -0,0 +1 @@ +{"name":"SliverAppBar","path":"/src/material/app_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design app bar that integrates with a [CustomScrollView].","fields":[{"name":"leading","type":"Widget?","desc":"{@macro flutter.material.appbar.leading}"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.automaticallyImplyLeading}"},{"name":"title","type":"Widget?","desc":"{@macro flutter.material.appbar.title}"},{"name":"actions","type":"List?","desc":"{@macro flutter.material.appbar.actions}"},{"name":"flexibleSpace","type":"Widget?","desc":"{@macro flutter.material.appbar.flexibleSpace}"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"{@macro flutter.material.appbar.bottom}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.appbar.elevation}"},{"name":"scrolledUnderElevation","type":"double?","desc":"{@macro flutter.material.appbar.scrolledUnderElevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.appbar.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.appbar.surfaceTintColor}"},{"name":"forceElevated","type":"bool","required":true,"desc":"Whether to show the shadow appropriate for the [elevation] even if the content is not scrolled under the [AppBar]."},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.appbar.backgroundColor}"},{"name":"foregroundColor","type":"Color?","desc":"{@macro flutter.material.appbar.foregroundColor}"},{"name":"iconTheme","type":"IconThemeData?","desc":"{@macro flutter.material.appbar.iconTheme}"},{"name":"actionsIconTheme","type":"IconThemeData?","desc":"{@macro flutter.material.appbar.actionsIconTheme}"},{"name":"primary","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.primary}"},{"name":"centerTitle","type":"bool?","desc":"{@macro flutter.material.appbar.centerTitle}"},{"name":"excludeHeaderSemantics","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.excludeHeaderSemantics}"},{"name":"titleSpacing","type":"double?","desc":"{@macro flutter.material.appbar.titleSpacing}"},{"name":"collapsedHeight","type":"double?","desc":"Defines the height of the app bar when it is collapsed."},{"name":"expandedHeight","type":"double?","desc":"The size of the app bar when it is fully expanded."},{"name":"floating","type":"bool","required":true,"desc":"Whether the app bar should become visible as soon as the user scrolls towards the app bar."},{"name":"pinned","type":"bool","required":true,"desc":"Whether the app bar should remain visible at the start of the scroll view."},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.appbar.shape}"},{"name":"snap","type":"bool","required":true,"desc":"If [snap] and [floating] are true then the floating app bar will \"snap\" into view."},{"name":"stretch","type":"bool","required":true,"desc":"Whether the app bar should stretch to fill the over-scroll area."},{"name":"stretchTriggerOffset","type":"double","required":true,"desc":"The offset of overscroll required to activate [onStretchTrigger]."},{"name":"onStretchTrigger","type":"AsyncCallback?","desc":"The callback function to be executed when a user over-scrolls to the offset specified by [stretchTriggerOffset]."},{"name":"toolbarHeight","type":"double","required":true,"desc":"{@macro flutter.material.appbar.toolbarHeight}"},{"name":"leadingWidth","type":"double?","desc":"{@macro flutter.material.appbar.leadingWidth}"},{"name":"toolbarTextStyle","type":"TextStyle?","desc":"{@macro flutter.material.appbar.toolbarTextStyle}"},{"name":"titleTextStyle","type":"TextStyle?","desc":"{@macro flutter.material.appbar.titleTextStyle}"},{"name":"systemOverlayStyle","type":"SystemUiOverlayStyle?","desc":"{@macro flutter.material.appbar.systemOverlayStyle}"},{"name":"forceMaterialTransparency","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.forceMaterialTransparency}"},{"name":"useDefaultSemanticsOrder","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.useDefaultSemanticsOrder}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"{@macro flutter.material.appbar.actionsPadding}"}],"id":184,"lever":4,"family":4,"linkIds":[183,196],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverAppBar","desc":["【leading】: Left component 【Widget】","【title】: Center component 【Widget】","【actions】: List of trailing components 【List】","【floating】: Whether to float 【bool】","【pinned】: Whether to stay at the top 【bool】","【snap】: Whether to semi-collapse 【bool】","【bottom】: Bottom component 【PreferredSizeWidget】","【expandedHeight】: Expanded height 【double】","【elevation】: Shadow depth 【double】","【flexibleSpace】: Expanded space 【FlexibleSpaceBar】","【backgroundColor】: Background color 【Color】","【controller】: Controller 【ScrollController】"," When snap is true, floating must be true"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_zh-CN.json new file mode 100644 index 000000000..54f9b2075 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverAppBar","path":"/src/material/app_bar.dart","parents":["StatefulWidget","Widget"],"desc":"与 [CustomScrollView] 集成的 Material Design 应用栏。","fields":[{"name":"leading","type":"Widget?","desc":"{@macro flutter.material.appbar.leading}"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.automaticallyImplyLeading}"},{"name":"title","type":"Widget?","desc":"{@macro flutter.material.appbar.title}"},{"name":"actions","type":"List?","desc":"{@macro flutter.material.appbar.actions}"},{"name":"flexibleSpace","type":"Widget?","desc":"{@macro flutter.material.appbar.flexibleSpace}"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"{@macro flutter.material.appbar.bottom}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.appbar.elevation}"},{"name":"scrolledUnderElevation","type":"double?","desc":"{@macro flutter.material.appbar.scrolledUnderElevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.appbar.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.appbar.surfaceTintColor}"},{"name":"forceElevated","type":"bool","required":true,"desc":"即使内容未滚动到 [AppBar] 下方,是否显示适合 [elevation] 的阴影。"},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.appbar.backgroundColor}"},{"name":"foregroundColor","type":"Color?","desc":"{@macro flutter.material.appbar.foregroundColor}"},{"name":"iconTheme","type":"IconThemeData?","desc":"{@macro flutter.material.appbar.iconTheme}"},{"name":"actionsIconTheme","type":"IconThemeData?","desc":"{@macro flutter.material.appbar.actionsIconTheme}"},{"name":"primary","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.primary}"},{"name":"centerTitle","type":"bool?","desc":"{@macro flutter.material.appbar.centerTitle}"},{"name":"excludeHeaderSemantics","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.excludeHeaderSemantics}"},{"name":"titleSpacing","type":"double?","desc":"{@macro flutter.material.appbar.titleSpacing}"},{"name":"collapsedHeight","type":"double?","desc":"定义应用栏折叠时的高度。"},{"name":"expandedHeight","type":"double?","desc":"应用栏完全展开时的大小。"},{"name":"floating","type":"bool","required":true,"desc":"用户向应用栏滚动时应用栏是否应立即变为可见。"},{"name":"pinned","type":"bool","required":true,"desc":"应用栏是否应在滚动视图的开始处保持可见。"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.appbar.shape}"},{"name":"snap","type":"bool","required":true,"desc":"如果 [snap] 和 [floating] 都为 true,则浮动应用栏将"},{"name":"stretch","type":"bool","required":true,"desc":"应用栏是否应拉伸以填充过度滚动区域。"},{"name":"stretchTriggerOffset","type":"double","required":true,"desc":"激活 [onStretchTrigger] 所需的过度滚动偏移。"},{"name":"onStretchTrigger","type":"AsyncCallback?","desc":"当用户过度滚动到 [stretchTriggerOffset] 指定的偏移时要执行的回调函数。"},{"name":"toolbarHeight","type":"double","required":true,"desc":"{@macro flutter.material.appbar.toolbarHeight}"},{"name":"leadingWidth","type":"double?","desc":"{@macro flutter.material.appbar.leadingWidth}"},{"name":"toolbarTextStyle","type":"TextStyle?","desc":"{@macro flutter.material.appbar.toolbarTextStyle}"},{"name":"titleTextStyle","type":"TextStyle?","desc":"{@macro flutter.material.appbar.titleTextStyle}"},{"name":"systemOverlayStyle","type":"SystemUiOverlayStyle?","desc":"{@macro flutter.material.appbar.systemOverlayStyle}"},{"name":"forceMaterialTransparency","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.forceMaterialTransparency}"},{"name":"useDefaultSemanticsOrder","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.useDefaultSemanticsOrder}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"{@macro flutter.material.appbar.actionsPadding}"}],"id":184,"localName":"Sliver头部栏","lever":4,"family":4,"linkIds":[183,196],"nodes":[{"file":"node1_base.dart","name":"SliverAppBar基本使用","desc":["【leading】 : 左侧组件 【Widget】","【title】 : 中间组件 【Widget】","【actions】 : 尾部组件列表 【List】","【floating】 : 是否浮动 【bool】","【pinned】 : 是否顶部停留 【bool】","【snap】 : 是否半收展 【bool】","【bottom】 : 底部组件 【PreferredSizeWidget】","【expandedHeight】 : 延展高度 【double】","【elevation】 : 影深 【double】","【flexibleSpace】 : 延展空间 【FlexibleSpaceBar】","【backgroundColor】 : 背景色 【Color】","【controller】 : 控制器 【ScrollController】"," snap为true时必需floating为true"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_en-US.json new file mode 100644 index 000000000..3955f9dbb --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_en-US.json @@ -0,0 +1 @@ +{"name":"SliverConstrainedCrossAxis","path":"/src/widgets/sliver.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver that constrains the cross axis extent of its sliver child.","fields":[{"name":"maxExtent","type":"double","required":true,"desc":"The cross axis extent to apply to the sliver child."},{"name":"sliver","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":270,"lever":3,"family":4,"linkIds":[269,271],"nodes":[{"file":"node1.dart","name":"Basic Usage of SliverConstrainedCrossAxis","desc":["【maxExtent】 : size 【double】","【sliver】 : child component 【Widget?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_zh-CN.json new file mode 100644 index 000000000..8312d9afd --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverConstrainedCrossAxis","path":"/src/widgets/sliver.dart","parents":["StatelessWidget","Widget"],"desc":"约束其 sliver 子项交叉轴范围的 sliver。","fields":[{"name":"maxExtent","type":"double","required":true,"desc":"应用于 sliver 子项的交叉轴范围。"},{"name":"sliver","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":270,"localName":"交叉轴尺寸约束滑片","lever":3,"family":4,"linkIds":[269,271],"nodes":[{"file":"node1.dart","name":"SliverConstrainedCrossAxis 基本使用","desc":["【maxExtent】 : 大小 【double】","【sliver】 : 子组件 【Widget?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_en-US.json new file mode 100644 index 000000000..3503c7040 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_en-US.json @@ -0,0 +1 @@ +{"name":"SliverCrossAxisExpanded","path":"/src/widgets/sliver.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":" Set a flex factor for allocating space in the cross axis direction.","fields":[{"name":"flex","type":"int","required":true,"desc":"Flex value for allocating cross axis extent left after laying out the children with constrained cross axis. The children with flex values will have the remaining extent allocated proportionally to their flex value. This must an integer between 0 and infinity, exclusive."}],"id":271,"lever":3,"family":4,"linkIds":[269,270],"nodes":[{"file":"node1.dart","name":"Basic Usage of SliverCrossAxisExpanded","desc":["【flex】: Ratio 【int】","【sliver】: Child Component 【Widget?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_zh-CN.json new file mode 100644 index 000000000..906f36ccc --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverCrossAxisExpanded","path":"/src/widgets/sliver.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":"为在交叉轴方向分配空间设置弹性因子。","fields":[{"name":"flex","type":"int","required":true,"desc":"在布局具有约束交叉轴的子项后,用于分配剩余交叉轴范围的弹性值。具有弹性值的子项将按其弹性值的比例分配剩余范围。这必须是 0 和无穷大之间的整数,不包括边界。"}],"id":271,"localName":"交叉轴延展滑片","lever":3,"family":4,"linkIds":[269,270],"nodes":[{"file":"node1.dart","name":"SliverCrossAxisExpanded 基本使用","desc":["【flex】 : 占比 【int】","【sliver】 : 子组件 【Widget?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_en-US.json new file mode 100644 index 000000000..ebc1142be --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_en-US.json @@ -0,0 +1 @@ +{"name":"SliverCrossAxisGroup","path":"/src/widgets/sliver.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places multiple sliver children in a linear array along the cross axis.","fields":[],"id":269,"lever":4,"family":4,"linkIds":[268,270,271],"nodes":[{"file":"node1.dart","name":"Basic Usage of SliverCrossAxisGroup","desc":["【slivers】 : List of child components 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_zh-CN.json new file mode 100644 index 000000000..65ef43c2d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverCrossAxisGroup","path":"/src/widgets/sliver.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"沿交叉轴将多个 sliver 子项放置在线性数组中的 sliver。","fields":[],"id":269,"localName":"交叉轴滑片组","lever":4,"family":4,"linkIds":[268,270,271],"nodes":[{"file":"node1.dart","name":"SliverCrossAxisGroup 基本使用","desc":["【slivers】 : 子组件列表 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_en-US.json new file mode 100644 index 000000000..b160b0c05 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_en-US.json @@ -0,0 +1 @@ +{"name":"SliverEnsureSemantics","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that ensures its sliver child is included in the semantics tree.","fields":[],"id":517,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_zh-CN.json new file mode 100644 index 000000000..a37fd2e91 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverEnsureSemantics","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"确保其 sliver 子项包含在语义树中的 sliver。","fields":[],"id":517,"localName":"SliverEnsureSemantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_en-US.json new file mode 100644 index 000000000..094d6a625 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_en-US.json @@ -0,0 +1 @@ +{"name":"SliverFadeTransition","path":"/src/widgets/transitions.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Animates the opacity of a sliver widget.","fields":[{"name":"opacity","type":"Animation","required":true,"desc":"The animation that controls the opacity of the sliver child."},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"Whether the semantic information of the sliver child is always included."}],"id":518,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_zh-CN.json new file mode 100644 index 000000000..e9cb22cc6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverFadeTransition","path":"/src/widgets/transitions.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对 sliver 小部件的不透明度进行动画处理。","fields":[{"name":"opacity","type":"Animation","required":true,"desc":"控制 sliver 子项不透明度的动画。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含 sliver 子项的语义信息。"}],"id":518,"localName":"SliverFadeTransition","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_en-US.json new file mode 100644 index 000000000..c5d99260e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_en-US.json @@ -0,0 +1 @@ +{"name":"SliverFillRemaining","path":"/src/widgets/sliver_fill.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver that contains a single box child that fills the remaining space in the viewport.","fields":[{"name":"child","type":"Widget?","desc":"Box child widget that fills the remaining space in the viewport."},{"name":"hasScrollBody","type":"bool","required":true,"desc":"Indicates whether the child has a scrollable body, this value cannot be null."},{"name":"fillOverscroll","type":"bool","required":true,"desc":"Indicates whether the child should stretch to fill the overscroll area created by certain scroll physics, such as iOS' default scroll physics. This flag is only relevant when [hasScrollBody] is false."}],"id":306,"lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverFillRemaining","desc":["【hasScrollBody】: Whether it has a scroll body 【bool】","【fillOverscroll】: Whether it can fill the scroll area 【bool】","【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_zh-CN.json new file mode 100644 index 000000000..b7279821a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverFillRemaining","path":"/src/widgets/sliver_fill.dart","parents":["StatelessWidget","Widget"],"desc":"包含单个框子项的 sliver,该子项填充视口中的剩余空间。","fields":[{"name":"child","type":"Widget?","desc":"填充视口中剩余空间的框子小部件。"},{"name":"hasScrollBody","type":"bool","required":true,"desc":"指示子项是否具有可滚动主体,此值不能为 null。"},{"name":"fillOverscroll","type":"bool","required":true,"desc":"指示子项是否应拉伸以填充由某些滚动物理(如 iOS 的默认滚动物理)创建的过度滚动区域。此标志仅在 [hasScrollBody] 为 false 时相关。"}],"id":306,"localName":"Sliver填补剩余","lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"SliverFillRemaining基本使用","desc":["【hasScrollBody】 : 是否具有滚动主体 【bool】","【fillOverscroll】 : 是否可填充滚动区域 【bool】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_en-US.json new file mode 100644 index 000000000..efcc4c668 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_en-US.json @@ -0,0 +1 @@ +{"name":"SliverFillViewport","path":"/src/widgets/sliver_fill.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver that contains multiple box children that each fills the viewport.","fields":[{"name":"viewportFraction","type":"double","required":true,"desc":"The fraction of the viewport that each child should fill in the main axis."},{"name":"padEnds","type":"bool","required":true,"desc":"Whether to add padding to both ends of the list."},{"name":"delegate","type":"SliverChildDelegate","required":true,"desc":"{@macro flutter.widgets.SliverMultiBoxAdaptorWidget.delegate}"}],"id":187,"lever":3,"family":4,"linkIds":[183,185,186],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverFillViewport","desc":["【viewportFraction】 : Viewport Fraction 【double】","【delegate】 : Child Delegate 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_zh-CN.json new file mode 100644 index 000000000..99c1c7c7a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverFillViewport","path":"/src/widgets/sliver_fill.dart","parents":["StatelessWidget","Widget"],"desc":"包含多个框子项的 sliver,每个子项都填充视口。","fields":[{"name":"viewportFraction","type":"double","required":true,"desc":"每个子项在主轴上应填充的视口分数。"},{"name":"padEnds","type":"bool","required":true,"desc":"是否在列表的两端添加内边距。"},{"name":"delegate","type":"SliverChildDelegate","required":true,"desc":"{@macro flutter.widgets.SliverMultiBoxAdaptorWidget.delegate}"}],"id":187,"localName":"Sliver填充视图列表","lever":3,"family":4,"linkIds":[183,185,186],"nodes":[{"file":"node1_base.dart","name":"SliverFillViewport基本使用","desc":["【viewportFraction】 : 视口分率 【double】","【delegate】 : 孩子代理 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_en-US.json new file mode 100644 index 000000000..cdd0fd4a5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_en-US.json @@ -0,0 +1 @@ +{"name":"SliverFixedExtentList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places multiple box children with the same main axis extent in a linear array.","fields":[{"name":"itemExtent","type":"double","required":true,"desc":"The extent the children are forced to have in the main axis."}],"id":186,"lever":3,"family":4,"linkIds":[183,185,187],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverFixedExtentList","desc":["【itemExtent】: Forced length in the main axis 【double】","【delegate】: Child delegate 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_zh-CN.json new file mode 100644 index 000000000..8ed879c4c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverFixedExtentList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"在线性数组中放置具有相同主轴范围的多个框子项的 sliver。","fields":[{"name":"itemExtent","type":"double","required":true,"desc":"子项在主轴上被强制具有的范围。"}],"id":186,"localName":"Sliver固定延展列表","lever":3,"family":4,"linkIds":[183,185,187],"nodes":[{"file":"node1_base.dart","name":"SliverFixedExtentList基本使用","desc":["【itemExtent】 : 主轴方向强迫长度 【double】","【delegate】 : 孩子代理 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_en-US.json new file mode 100644 index 000000000..a2c4dc1e6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_en-US.json @@ -0,0 +1 @@ +{"name":"SliverFloatingHeader","path":"/src/widgets/sliver_floating_header.dart","parents":["StatefulWidget","Widget"],"desc":" A sliver that shows its [child] when the user scrolls forward and hides it when the user scrolls backwards.","fields":[{"name":"animationStyle","type":"AnimationStyle?","desc":"Non null properties override the default durations (300ms) and curves (Curves.easeInOut) for subsequent header animations."},{"name":"snapMode","type":"FloatingHeaderSnapMode?","desc":"Specifies how a partially visible [SliverFloatingHeader] animates into a view when a user scroll gesture ends."},{"name":"child","type":"Widget","required":true,"desc":"The widget contained by this sliver."}],"id":519,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_zh-CN.json new file mode 100644 index 000000000..aaa6197f3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverFloatingHeader","path":"/src/widgets/sliver_floating_header.dart","parents":["StatefulWidget","Widget"],"desc":"当用户向前滚动时显示其 [child],当用户向后滚动时隐藏它的 sliver。","fields":[{"name":"animationStyle","type":"AnimationStyle?","desc":"非空属性覆盖后续标题动画的默认持续时间(300ms)和曲线(Curves.easeInOut)。"},{"name":"snapMode","type":"FloatingHeaderSnapMode?","desc":"指定当用户滚动手势结束时,部分可见的 [SliverFloatingHeader] 如何动画进入视图。"},{"name":"child","type":"Widget","required":true,"desc":"此 sliver 包含的小部件。"}],"id":519,"localName":"SliverFloatingHeader","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_en-US.json new file mode 100644 index 000000000..5b76afbba --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_en-US.json @@ -0,0 +1 @@ +{"name":"SliverGrid","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places multiple box children in a two dimensional arrangement.","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"The delegate that controls the size and position of the children."}],"id":188,"lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverList","desc":["SliverGrid.count constructs with specified axial count","SliverGrid.extent constructs with specified axial length","The attribute characteristics are the same as GridView, see it for details"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_zh-CN.json new file mode 100644 index 000000000..a6e47ce8d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverGrid","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"在二维排列中放置多个框子项的 sliver。","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"控制子项大小和位置的委托。"}],"id":188,"localName":"Sliver网格","lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliverList基本使用","desc":["SliverGrid.count 指定轴向数量构造","SliverGrid.extent 指定轴向长度构造","属性特征同GridView,可详见之"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_en-US.json new file mode 100644 index 000000000..8ac528d78 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_en-US.json @@ -0,0 +1 @@ +{"name":"SliverIgnorePointer","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver widget that is invisible during hit testing.","fields":[{"name":"ignoring","type":"bool","required":true,"desc":"Whether this sliver is ignored during hit testing."},{"name":"ignoringSemantics","type":"bool?","desc":"Whether the semantics of this sliver is ignored when compiling the semantics tree."}],"id":305,"lever":3,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverIgnorePointer","desc":["【sliver】: sliver component 【Widget】","【ignoring】: whether to ignore events 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_zh-CN.json new file mode 100644 index 000000000..573292b3d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverIgnorePointer","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在命中测试期间不可见的 sliver 小部件。","fields":[{"name":"ignoring","type":"bool","required":true,"desc":"此 sliver 在命中测试期间是否被忽略。"},{"name":"ignoringSemantics","type":"bool?","desc":"编译语义树时是否忽略此 sliver 的语义。"}],"id":305,"localName":"Sliver忽略事件","lever":3,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"SliverIgnorePointer基本使用","desc":["【sliver】 : sliver组件 【Widget】","【ignoring】 : 是否忽略事件 【bool】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_en-US.json new file mode 100644 index 000000000..c8db5c945 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_en-US.json @@ -0,0 +1 @@ +{"name":"SliverLayoutBuilder","path":"/src/widgets/sliver_layout_builder.dart","parents":["ConstrainedLayoutBuilder","AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":" Builds a sliver widget tree that can depend on its own [SliverConstraints].","fields":[],"id":304,"lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverLayoutBuilder","desc":["【builder】: Component Builder 【SliverLayoutWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_zh-CN.json new file mode 100644 index 000000000..12c9fdb40 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverLayoutBuilder","path":"/src/widgets/sliver_layout_builder.dart","parents":["ConstrainedLayoutBuilder","AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":"构建可以依赖于其自身 [SliverConstraints] 的 sliver 小部件树。","fields":[],"id":304,"localName":"Sliver布局构造器","lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"SliverLayoutBuilder基本使用","desc":["【builder】 : 组件构造器 【SliverLayoutWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_en-US.json new file mode 100644 index 000000000..2fe27d68a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_en-US.json @@ -0,0 +1 @@ +{"name":"SliverList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places multiple box children in a linear array along the main axis.","fields":[],"id":185,"lever":5,"family":4,"linkIds":[183,186,187],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverList","desc":["【delegate】: Child delegate 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_zh-CN.json new file mode 100644 index 000000000..c0328a173 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"沿主轴在线性数组中放置多个框子项的 sliver。","fields":[],"id":185,"localName":"Sliver列表","lever":5,"family":4,"linkIds":[183,186,187],"nodes":[{"file":"node1_base.dart","name":"SliverList基本使用","desc":["【delegate】 : 孩子代理 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_en-US.json new file mode 100644 index 000000000..eac1101f4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_en-US.json @@ -0,0 +1 @@ +{"name":"SliverMainAxisGroup","path":"/src/widgets/sliver.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places multiple sliver children in a linear array along the main axis, one after another.","fields":[],"id":268,"lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1.dart","name":"Basic Usage of SliverMainAxisGroup","desc":["【slivers】: List of child components 【List】","Can be combined with SliverPersistentHeader to achieve grouping and sticky header effects."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_zh-CN.json new file mode 100644 index 000000000..21f28dd53 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverMainAxisGroup","path":"/src/widgets/sliver.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"沿主轴在线性数组中一个接一个地放置多个 sliver 子项的 sliver。","fields":[],"id":268,"localName":"主轴滑片组","lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1.dart","name":"SliverMainAxisGroup 基本使用","desc":["【slivers】 : 子组件列表 【List】","可结合 SliverPersistentHeader 实现分组,标题吸顶效果。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_en-US.json new file mode 100644 index 000000000..e0b658725 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_en-US.json @@ -0,0 +1 @@ +{"name":"SliverMultiBoxAdaptorWidget","path":"/src/widgets/sliver.dart","abstract":true,"parents":["SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A base class for slivers that have multiple box children.","fields":[{"name":"delegate","type":"SliverChildDelegate","required":true,"desc":"{@template flutter.widgets.SliverMultiBoxAdaptorWidget.delegate} The delegate that provides the children for this widget."}],"id":520,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_zh-CN.json new file mode 100644 index 000000000..8dfe5b07e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverMultiBoxAdaptorWidget","path":"/src/widgets/sliver.dart","abstract":true,"parents":["SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"具有多个框子项的 sliver 的基类。","fields":[{"name":"delegate","type":"SliverChildDelegate","required":true,"desc":"{@template flutter.widgets.SliverMultiBoxAdaptorWidget.delegate} 为此小部件提供子项的委托。"}],"id":520,"localName":"SliverMultiBoxAdaptorWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_en-US.json new file mode 100644 index 000000000..6ad6554cb --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_en-US.json @@ -0,0 +1 @@ +{"name":"SliverOffstage","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that lays its sliver child out as if it was in the tree, but without painting anything, without making the sliver child available for hit testing, and without taking any room in the parent.","fields":[{"name":"offstage","type":"bool","required":true,"desc":"Whether the sliver child is hidden from the rest of the tree."}],"id":521,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_zh-CN.json new file mode 100644 index 000000000..0355edc39 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverOffstage","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其 sliver 子项布局为好像它在树中,但不绘制任何内容,不使 sliver 子项可用于命中测试,并且不在父项中占用任何空间的 sliver。","fields":[{"name":"offstage","type":"bool","required":true,"desc":"sliver 子项是否从树的其余部分隐藏。"}],"id":521,"localName":"SliverOffstage","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_en-US.json new file mode 100644 index 000000000..10b997d9d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_en-US.json @@ -0,0 +1 @@ +{"name":"SliverOpacity","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver widget that makes its sliver child partially transparent.","fields":[{"name":"opacity","type":"double","required":true,"desc":"The fraction to scale the sliver child's alpha value."},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"Whether the semantic information of the sliver child is always included."}],"id":192,"lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverOpacity","desc":["【opacity】: Opacity 【double】","【sliver】: Child Component 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_zh-CN.json new file mode 100644 index 000000000..718fb92d3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverOpacity","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使其 sliver 子项部分透明的 sliver 小部件。","fields":[{"name":"opacity","type":"double","required":true,"desc":"缩放 sliver 子项 alpha 值的分数。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含 sliver 子项的语义信息。"}],"id":192,"localName":"Sliver透明度","lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliverOpacity基本使用","desc":["【opacity】 : 透明度 【double】","【sliver】 : 子组件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_en-US.json new file mode 100644 index 000000000..04c0faf4f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_en-US.json @@ -0,0 +1 @@ +{"name":"SliverOverlapAbsorber","path":"/src/widgets/nested_scroll_view.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that wraps another, forcing its layout extent to be treated as overlap.","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"The object in which the absorbed overlap is recorded."}],"id":307,"lever":3,"family":4,"linkIds":[251,308],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverOverlapAbsorber","desc":["【sliver】 : Child component 【Widget】","【handle】 : *Handler 【SliverOverlapAbsorberHandle】","If the SliverOverlapAbsorber and SliverOverlapInjector components are not used, the content of the NestedScrollView will overlap with the header bar."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_zh-CN.json new file mode 100644 index 000000000..fedbebee3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverOverlapAbsorber","path":"/src/widgets/nested_scroll_view.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"包装另一个 sliver 的 sliver,强制其布局范围被视为重叠。","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"记录吸收重叠的对象。"}],"id":307,"localName":"重叠吸收器","lever":3,"family":4,"linkIds":[251,308],"nodes":[{"file":"node1_base.dart","name":"SliverOverlapAbsorber基本使用","desc":["【sliver】 : 子组件 【Widget】","【handle】 : *处理器 【SliverOverlapAbsorberHandle】","如果不使用SliverOverlapAbsorber和SliverOverlapInjector组件,NestedScrollView的内容会和头部栏重叠。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_en-US.json new file mode 100644 index 000000000..eac702756 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_en-US.json @@ -0,0 +1 @@ +{"name":"SliverOverlapInjector","path":"/src/widgets/nested_scroll_view.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that has a sliver geometry based on the values stored in a [SliverOverlapAbsorberHandle].","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"The handle to the [SliverOverlapAbsorber] that is feeding this injector."}],"id":308,"lever":3,"family":4,"linkIds":[251,307],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverOverlapInjector","desc":["【sliver】 : Child component 【Widget】","【handle】 : *Handler 【SliverOverlapAbsorberHandle】","If the SliverOverlapAbsorber and SliverOverlapInjector components are not used, the content of the NestedScrollView will overlap with the header bar."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_zh-CN.json new file mode 100644 index 000000000..4b31d62ca --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverOverlapInjector","path":"/src/widgets/nested_scroll_view.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"具有基于存储在 [SliverOverlapAbsorberHandle] 中的值的 sliver 几何形状的 sliver。","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"正在为此注入器提供数据的 [SliverOverlapAbsorber] 的句柄。"}],"id":308,"localName":"重叠注射器","lever":3,"family":4,"linkIds":[251,307],"nodes":[{"file":"node1_base.dart","name":"SliverOverlapInjector基本使用","desc":["【sliver】 : 子组件 【Widget】","【handle】 : *处理器 【SliverOverlapAbsorberHandle】","如果不使用SliverOverlapAbsorber和SliverOverlapInjector组件,NestedScrollView的内容会和头部栏重叠。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_en-US.json new file mode 100644 index 000000000..d3c7c11ec --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_en-US.json @@ -0,0 +1 @@ +{"name":"SliverPadding","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that applies padding on each side of another sliver.","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the child sliver."}],"id":191,"lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverPadding","desc":["【sliver】: Child component 【Widget】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_zh-CN.json new file mode 100644 index 000000000..08606b41c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverPadding","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在另一个 sliver 的每一侧应用内边距的 sliver。","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"插入子 sliver 的空间量。"}],"id":191,"localName":"Sliver内间距","lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliverPadding基本使用","desc":["【sliver】 : 子组件 【Widget】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_en-US.json new file mode 100644 index 000000000..1100aeff9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_en-US.json @@ -0,0 +1 @@ +{"name":"SliverPersistentHeader","path":"/src/widgets/sliver_persistent_header.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver whose size varies when the sliver is scrolled to the edge of the viewport opposite the sliver's [GrowthDirection].","fields":[{"name":"delegate","type":"SliverPersistentHeaderDelegate","required":true,"desc":"Configuration for the sliver's layout."},{"name":"pinned","type":"bool","required":true,"desc":"Whether to stick the header to the start of the viewport once it has reached its minimum size."},{"name":"floating","type":"bool","required":true,"desc":"Whether the header should immediately grow again if the user reverses scroll direction."}],"id":190,"lever":5,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverPersistentHeader","desc":["【delegate】: Delegate 【SliverPersistentHeaderDelegate】","【floating】: Whether to float 【bool】","【pinned】: Whether to stay at the top 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_zh-CN.json new file mode 100644 index 000000000..ee3ef1df8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverPersistentHeader","path":"/src/widgets/sliver_persistent_header.dart","parents":["StatelessWidget","Widget"],"desc":"当 sliver 滚动到与 sliver 的 [GrowthDirection] 相对的视口边缘时,其大小会发生变化的 sliver。","fields":[{"name":"delegate","type":"SliverPersistentHeaderDelegate","required":true,"desc":"sliver 布局的配置。"},{"name":"pinned","type":"bool","required":true,"desc":"标题达到最小大小后是否粘贴到视口的开始处。"},{"name":"floating","type":"bool","required":true,"desc":"如果用户反转滚动方向,标题是否应立即再次增长。"}],"id":190,"localName":"吸顶滑片","lever":5,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliverPersistentHeader基本使用","desc":["【delegate】 : 代理 【SliverPersistentHeaderDelegate】","【floating】 : 是否浮动 【bool】","【pinned】 : 是否顶部停留 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_en-US.json new file mode 100644 index 000000000..82caa0f14 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_en-US.json @@ -0,0 +1 @@ +{"name":"SliverPrototypeExtentList","path":"/src/widgets/sliver_prototype_extent_list.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places its box children in a linear array and constrains them to have the same extent as a prototype item along the main axis.","fields":[{"name":"prototypeItem","type":"Widget","required":true,"desc":"Defines the main axis extent of all of this sliver's children."}],"id":314,"lever":2,"family":4,"linkIds":[185,186],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverPrototypeExtentList","desc":["【prototypeItem】 : Main axis size component 【Widget】","【delegate】 : Child delegate 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_zh-CN.json new file mode 100644 index 000000000..242b525e9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverPrototypeExtentList","path":"/src/widgets/sliver_prototype_extent_list.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"将其框子项放置在线性数组中并约束它们沿主轴具有与原型项目相同范围的 sliver。","fields":[{"name":"prototypeItem","type":"Widget","required":true,"desc":"定义此 sliver 所有子项的主轴范围。"}],"id":314,"localName":"Sliver原型延伸列表","lever":2,"family":4,"linkIds":[185,186],"nodes":[{"file":"node1_base.dart","name":"SliverPrototypeExtentList基本使用","desc":["【prototypeItem】 : 主轴方向尺寸组件 【Widget】","【delegate】 : 孩子代理 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_en-US.json new file mode 100644 index 000000000..bda82bcd6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_en-US.json @@ -0,0 +1 @@ +{"name":"SliverReorderableList","path":"/src/widgets/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":" A sliver list that allows the user to interactively reorder the list items.","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemBuilder}"},{"name":"findChildIndexCallback","type":"ChildIndexGetter?","desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.findChildIndexCallback}"},{"name":"itemCount","type":"int","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemCount}"},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@macro flutter.widgets.reorderable_list.onReorder}"},{"name":"onReorderStart","type":"void Function(int)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderStart}"},{"name":"onReorderEnd","type":"void Function(int)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderEnd}"},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@macro flutter.widgets.reorderable_list.proxyDecorator}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double","required":true,"desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@macro flutter.widgets.reorderable_list.dragBoundaryProvider}"}],"id":522,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_zh-CN.json new file mode 100644 index 000000000..0c7b192d8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverReorderableList","path":"/src/widgets/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":"允许用户交互式重新排序列表项的 sliver 列表。","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemBuilder}"},{"name":"findChildIndexCallback","type":"ChildIndexGetter?","desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.findChildIndexCallback}"},{"name":"itemCount","type":"int","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemCount}"},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@macro flutter.widgets.reorderable_list.onReorder}"},{"name":"onReorderStart","type":"void Function(int)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderStart}"},{"name":"onReorderEnd","type":"void Function(int)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderEnd}"},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@macro flutter.widgets.reorderable_list.proxyDecorator}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double","required":true,"desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@macro flutter.widgets.reorderable_list.dragBoundaryProvider}"}],"id":522,"localName":"SliverReorderableList","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_en-US.json new file mode 100644 index 000000000..c0583a6ce --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_en-US.json @@ -0,0 +1 @@ +{"name":"SliverResizingHeader","path":"/src/widgets/sliver_resizing_header.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver that is pinned to the start of its [CustomScrollView] and reacts to scrolling by resizing between the intrinsic sizes of its min and max extent prototypes.","fields":[{"name":"minExtentPrototype","type":"Widget?","desc":"Laid out once to define the minimum size of this sliver along the [CustomScrollView.scrollDirection] axis."},{"name":"maxExtentPrototype","type":"Widget?","desc":"Laid out once to define the maximum size of this sliver along the [CustomScrollView.scrollDirection] axis."},{"name":"child","type":"Widget?","desc":"The widget contained by this sliver."}],"id":523,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_zh-CN.json new file mode 100644 index 000000000..4c033cae4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverResizingHeader","path":"/src/widgets/sliver_resizing_header.dart","parents":["StatelessWidget","Widget"],"desc":"固定到其 [CustomScrollView] 开始处并通过在其最小和最大范围原型的内在大小之间调整大小来响应滚动的 sliver。","fields":[{"name":"minExtentPrototype","type":"Widget?","desc":"布局一次以定义此 sliver 沿 [CustomScrollView.scrollDirection] 轴的最小大小。"},{"name":"maxExtentPrototype","type":"Widget?","desc":"布局一次以定义此 sliver 沿 [CustomScrollView.scrollDirection] 轴的最大大小。"},{"name":"child","type":"Widget?","desc":"此 sliver 包含的小部件。"}],"id":523,"localName":"SliverResizingHeader","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_en-US.json new file mode 100644 index 000000000..08d32794c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_en-US.json @@ -0,0 +1 @@ +{"name":"SliverSafeArea","path":"/src/widgets/safe_area.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver that insets another sliver by sufficient padding to avoid intrusions by the operating system.","fields":[{"name":"left","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the left."},{"name":"top","type":"bool","required":true,"desc":"Whether to avoid system intrusions at the top of the screen, typically the system status bar."},{"name":"right","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the right."},{"name":"bottom","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the bottom side of the screen."},{"name":"minimum","type":"EdgeInsets","required":true,"desc":"This minimum padding to apply."},{"name":"sliver","type":"Widget","required":true,"desc":"The sliver below this sliver in the tree."}],"id":524,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_zh-CN.json new file mode 100644 index 000000000..7b371a125 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverSafeArea","path":"/src/widgets/safe_area.dart","parents":["StatelessWidget","Widget"],"desc":"通过足够的内边距插入另一个 sliver 以避免操作系统入侵的 sliver。","fields":[{"name":"left","type":"bool","required":true,"desc":"是否避免左侧的系统入侵。"},{"name":"top","type":"bool","required":true,"desc":"是否避免屏幕顶部的系统入侵,通常是系统状态栏。"},{"name":"right","type":"bool","required":true,"desc":"是否避免右侧的系统入侵。"},{"name":"bottom","type":"bool","required":true,"desc":"是否避免屏幕底部的系统入侵。"},{"name":"minimum","type":"EdgeInsets","required":true,"desc":"要应用的最小内边距。"},{"name":"sliver","type":"Widget","required":true,"desc":"树中此 sliver 下方的 sliver。"}],"id":524,"localName":"SliverSafeArea","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_en-US.json new file mode 100644 index 000000000..4dc3b4e5a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_en-US.json @@ -0,0 +1 @@ +{"name":"SliverToBoxAdapter","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that contains a single box widget.","fields":[],"id":189,"lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverToBoxAdapter","desc":["【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_zh-CN.json new file mode 100644 index 000000000..e36440329 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverToBoxAdapter","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"包含单个框小部件的 sliver。","fields":[],"id":189,"localName":"Sliver适配器","lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliverToBoxAdapter基本使用","desc":["【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_en-US.json new file mode 100644 index 000000000..25c38fe31 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_en-US.json @@ -0,0 +1 @@ +{"name":"SliverVariedExtentList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places its box children in a linear array and constrains them to have the corresponding extent returned by [itemExtentBuilder].","fields":[{"name":"itemExtentBuilder","type":"ItemExtentBuilder","required":true,"desc":"The children extent builder."}],"id":525,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_zh-CN.json new file mode 100644 index 000000000..cf2c42b44 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverVariedExtentList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"将其框子项放置在线性数组中并约束它们具有 [itemExtentBuilder] 返回的相应范围的 sliver。","fields":[{"name":"itemExtentBuilder","type":"ItemExtentBuilder","required":true,"desc":"子项范围构建器。"}],"id":525,"localName":"SliverVariedExtentList","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_en-US.json new file mode 100644 index 000000000..17816be98 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_en-US.json @@ -0,0 +1 @@ +{"name":"SliverVisibility","path":"/src/widgets/visibility.dart","parents":["StatelessWidget","Widget"],"desc":" Whether to show or hide a sliver child.","fields":[{"name":"sliver","type":"Widget","required":true,"desc":"The sliver to show or hide, as controlled by [visible]."},{"name":"replacementSliver","type":"Widget","required":true,"desc":"The widget to use when the sliver child is not [visible], assuming that none of the `maintain` flags (in particular, [maintainState]) are set."},{"name":"visible","type":"bool","required":true,"desc":"Switches between showing the [sliver] or hiding it."},{"name":"maintainState","type":"bool","required":true,"desc":"Whether to maintain the [State] objects of the [sliver] subtree when it is not [visible]."},{"name":"maintainAnimation","type":"bool","required":true,"desc":"Whether to maintain animations within the [sliver] subtree when it is not [visible]."},{"name":"maintainSize","type":"bool","required":true,"desc":"Whether to maintain space for where the sliver would have been."},{"name":"maintainSemantics","type":"bool","required":true,"desc":"Whether to maintain the semantics for the sliver when it is hidden (e.g. for accessibility)."},{"name":"maintainInteractivity","type":"bool","required":true,"desc":"Whether to allow the sliver to be interactive when hidden."}],"id":526,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_zh-CN.json new file mode 100644 index 000000000..24388be3f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverVisibility","path":"/src/widgets/visibility.dart","parents":["StatelessWidget","Widget"],"desc":"是否显示或隐藏 sliver 子项。","fields":[{"name":"sliver","type":"Widget","required":true,"desc":"要显示或隐藏的 sliver,由 [visible] 控制。"},{"name":"replacementSliver","type":"Widget","required":true,"desc":"当 sliver 子项不 [visible] 时使用的小部件,假设没有设置任何 `maintain` 标志(特别是 [maintainState])。"},{"name":"visible","type":"bool","required":true,"desc":"在显示 [sliver] 或隐藏它之间切换。"},{"name":"maintainState","type":"bool","required":true,"desc":"当 [sliver] 子树不 [visible] 时是否维护其 [State] 对象。"},{"name":"maintainAnimation","type":"bool","required":true,"desc":"当 [sliver] 子树不 [visible] 时是否维护其中的动画。"},{"name":"maintainSize","type":"bool","required":true,"desc":"是否为 sliver 本来所在的位置维护空间。"},{"name":"maintainSemantics","type":"bool","required":true,"desc":"当 sliver 隐藏时是否维护其语义(例如用于辅助功能)。"},{"name":"maintainInteractivity","type":"bool","required":true,"desc":"隐藏时是否允许 sliver 可交互。"}],"id":526,"localName":"SliverVisibility","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_en-US.json new file mode 100644 index 000000000..663296888 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_en-US.json @@ -0,0 +1 @@ +{"name":"SliverWithKeepAliveWidget","path":"/src/widgets/sliver.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A base class for slivers that have [KeepAlive] children.","fields":[],"id":348,"lever":1,"family":4,"linkIds":[316,239,188,185,314,186],"nodes":[{"file":"node1_base.dart","name":"Introduction to SliverWithKeepAliveWidget","desc":["【key】 : key 【Key】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_zh-CN.json new file mode 100644 index 000000000..b05be0ed5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"SliverWithKeepAliveWidget","path":"/src/widgets/sliver.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"具有 [KeepAlive] 子项的 sliver 的基类。","fields":[],"id":348,"localName":"Sliver保活容器","lever":1,"family":4,"linkIds":[316,239,188,185,314,186],"nodes":[{"file":"node1_base.dart","name":"SliverWithKeepAliveWidget 介绍","desc":["【key】 : 键 【Key】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_en-US.json new file mode 100644 index 000000000..ab6a865ff --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_en-US.json @@ -0,0 +1 @@ +{"name":"SlottedMultiChildRenderObjectWidget","path":"/src/widgets/slotted_render_object_widget.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A superclass for [RenderObjectWidget]s that configure [RenderObject] subclasses that organize their children in different slots.","fields":[],"id":527,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_zh-CN.json new file mode 100644 index 000000000..80f0f1fdd --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"SlottedMultiChildRenderObjectWidget","path":"/src/widgets/slotted_render_object_widget.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"配置在不同插槽中组织其子项的 [RenderObject] 子类的 [RenderObjectWidget] 的超类。","fields":[],"id":527,"localName":"SlottedMultiChildRenderObjectWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_en-US.json b/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_en-US.json new file mode 100644 index 000000000..40e3ad7b4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_en-US.json @@ -0,0 +1 @@ +{"name":"SnackBar","path":"/src/material/snack_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A lightweight message with an optional action which briefly displays at the bottom of the screen.","fields":[{"name":"content","type":"Widget","required":true,"desc":"The primary content of the snack bar."},{"name":"backgroundColor","type":"Color?","desc":"The snack bar's background color."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place the snack bar. This controls the size of the shadow below the snack bar."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"Empty space to surround the snack bar."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of padding to apply to the snack bar's content and optional action."},{"name":"width","type":"double?","desc":"The width of the snack bar."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the snack bar's [Material]."},{"name":"hitTestBehavior","type":"HitTestBehavior?","desc":"Defines how the snack bar area, including margin, will behave during hit testing."},{"name":"behavior","type":"SnackBarBehavior?","desc":"This defines the behavior and location of the snack bar."},{"name":"action","type":"SnackBarAction?","desc":"(optional) An action that the user can take based on the snack bar."},{"name":"actionOverflowThreshold","type":"double?","desc":"(optional) The percentage threshold for action widget's width before it overflows to a new line."},{"name":"showCloseIcon","type":"bool?","desc":"(optional) Whether to include a \"close\" icon widget."},{"name":"closeIconColor","type":"Color?","desc":"An optional color for the close icon, if [showCloseIcon] is true."},{"name":"duration","type":"Duration","required":true,"desc":"The amount of time the snack bar should be displayed."},{"name":"animation","type":"Animation?","desc":"The animation driving the entrance and exit of the snack bar."},{"name":"onVisible","type":"VoidCallback?","desc":"Called the first time that the snackbar is visible within a [Scaffold]."},{"name":"dismissDirection","type":"DismissDirection?","desc":"The direction in which the SnackBar can be dismissed."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":140,"lever":4,"family":1,"linkIds":[141,142],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SnackBar","desc":["【content】: Middle content component 【Widget】","【action】: Right side button 【SnackBarAction】","【duration】: Duration 【Widget】","【backgroundColor】: Background color 【Color】","【elevation】: Shadow depth 【double】","【shape】: Shape 【ShapeBorder】","【onVisible】: Callback when shown 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_zh-CN.json new file mode 100644 index 000000000..f114d899c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"SnackBar","path":"/src/material/snack_bar.dart","parents":["StatefulWidget","Widget"],"desc":"带有可选操作的轻量级消息,在屏幕底部短暂显示。","fields":[{"name":"content","type":"Widget","required":true,"desc":"快餐栏的主要内容。"},{"name":"backgroundColor","type":"Color?","desc":"快餐栏的背景颜色。"},{"name":"elevation","type":"double?","desc":"放置快餐栏的 z 坐标。这控制快餐栏下方阴影的大小。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕快餐栏的空白空间。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"应用于快餐栏内容和可选操作的内边距量。"},{"name":"width","type":"double?","desc":"快餐栏的宽度。"},{"name":"shape","type":"ShapeBorder?","desc":"快餐栏的 [Material] 的形状。"},{"name":"hitTestBehavior","type":"HitTestBehavior?","desc":"定义快餐栏区域(包括边距)在命中测试期间的行为方式。"},{"name":"behavior","type":"SnackBarBehavior?","desc":"这定义了快餐栏的行为和位置。"},{"name":"action","type":"SnackBarAction?","desc":"(可选)用户可以基于快餐栏采取的操作。"},{"name":"actionOverflowThreshold","type":"double?","desc":"(可选)操作小部件宽度在溢出到新行之前的百分比阈值。"},{"name":"showCloseIcon","type":"bool?","desc":"(可选)是否包含"},{"name":"closeIconColor","type":"Color?","desc":"如果 [showCloseIcon] 为 true,关闭图标的可选颜色。"},{"name":"duration","type":"Duration","required":true,"desc":"快餐栏应显示的时间量。"},{"name":"animation","type":"Animation?","desc":"驱动快餐栏进入和退出的动画。"},{"name":"onVisible","type":"VoidCallback?","desc":"快餐栏在 [Scaffold] 中首次可见时调用。"},{"name":"dismissDirection","type":"DismissDirection?","desc":"SnackBar 可以被关闭的方向。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":140,"localName":"信息提示条","lever":4,"family":1,"linkIds":[141,142],"nodes":[{"file":"node1_base.dart","name":"SnackBar基本使用","desc":["【content】 : 中间内容组件 【Widget】","【action】 : 右侧按钮 【SnackBarAction】","【duration】 : 持续时长 【Widget】","【backgroundColor】 : 背景色 【Color】","【elevation】 : 影深 【double】","【shape】 : 形状 【ShapeBorder】","【onVisible】 : 显示时回调 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_en-US.json b/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_en-US.json new file mode 100644 index 000000000..837828e42 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_en-US.json @@ -0,0 +1 @@ +{"name":"SnackBarAction","path":"/src/material/snack_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A button for a [SnackBar], known as an \"action\".","fields":[{"name":"textColor","type":"Color?","desc":"The button label color. If not provided, defaults to [SnackBarThemeData.actionTextColor]."},{"name":"backgroundColor","type":"Color?","desc":"The button background fill color. If not provided, defaults to [SnackBarThemeData.actionBackgroundColor]."},{"name":"disabledTextColor","type":"Color?","desc":"The button disabled label color. This color is shown after the [SnackBarAction] is dismissed."},{"name":"disabledBackgroundColor","type":"Color?","desc":"The button disabled background color. This color is shown after the [SnackBarAction] is dismissed."},{"name":"label","type":"String","required":true,"desc":"The button label."},{"name":"onPressed","type":"VoidCallback","required":true,"desc":"The callback to be called when the button is pressed."}],"id":141,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SnackBarAction","desc":["【label】 : Label 【String】","【textColor】 : Text Color 【Color】","【disabledTextColor】 : Disabled Text Color 【Color】","【onPressed】 : Click Callback 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_zh-CN.json new file mode 100644 index 000000000..4a171fa04 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_zh-CN.json @@ -0,0 +1 @@ +{"name":"SnackBarAction","path":"/src/material/snack_bar.dart","parents":["StatefulWidget","Widget"],"desc":"[SnackBar] 的按钮,称为操作。","fields":[{"name":"textColor","type":"Color?","desc":"按钮标签颜色。如果未提供,默认为 [SnackBarThemeData.actionTextColor]。"},{"name":"backgroundColor","type":"Color?","desc":"按钮背景填充颜色。如果未提供,默认为 [SnackBarThemeData.actionBackgroundColor]。"},{"name":"disabledTextColor","type":"Color?","desc":"按钮禁用标签颜色。此颜色在 [SnackBarAction] 被关闭后显示。"},{"name":"disabledBackgroundColor","type":"Color?","desc":"按钮禁用背景颜色。此颜色在 [SnackBarAction] 被关闭后显示。"},{"name":"label","type":"String","required":true,"desc":"按钮标签。"},{"name":"onPressed","type":"VoidCallback","required":true,"desc":"按下按钮时要调用的回调。"}],"id":141,"localName":"信息提示条按钮","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SnackBarAction基本使用","desc":["【label】 : 标签 【String】","【textColor】 : 文字颜色 【Color】","【disabledTextColor】 : 文字失效色 【Color】","【onPressed】 : 点击回调 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_en-US.json new file mode 100644 index 000000000..1dd481ddb --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_en-US.json @@ -0,0 +1 @@ +{"name":"SnapshotWidget","path":"/src/widgets/snapshot_widget.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that can replace its child with a snapshotted version of the child.","fields":[{"name":"controller","type":"SnapshotController","required":true,"desc":"The controller that determines when to display the children as a snapshot."},{"name":"mode","type":"SnapshotMode","required":true,"desc":"Configuration that controls how the snapshot widget decides to paint its children."},{"name":"autoresize","type":"bool","required":true,"desc":"Whether or not changes in render object size should automatically re-create the snapshot."},{"name":"painter","type":"SnapshotPainter","required":true,"desc":"The painter used to paint the child snapshot or child widgets."}],"id":528,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_zh-CN.json new file mode 100644 index 000000000..d79fc3193 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"SnapshotWidget","path":"/src/widgets/snapshot_widget.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"可以用子项的快照版本替换其子项的小部件。","fields":[{"name":"controller","type":"SnapshotController","required":true,"desc":"确定何时将子项显示为快照的控制器。"},{"name":"mode","type":"SnapshotMode","required":true,"desc":"控制快照小部件如何决定绘制其子项的配置。"},{"name":"autoresize","type":"bool","required":true,"desc":"渲染对象大小的更改是否应自动重新创建快照。"},{"name":"painter","type":"SnapshotPainter","required":true,"desc":"用于绘制子快照或子小部件的绘制器。"}],"id":528,"localName":"SnapshotWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_en-US.json b/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_en-US.json new file mode 100644 index 000000000..6710229d2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_en-US.json @@ -0,0 +1 @@ +{"name":"Spacer","path":"/src/widgets/spacer.dart","parents":["StatelessWidget","Widget"],"desc":" Spacer creates an adjustable, empty spacer that can be used to tune the spacing between widgets in a [Flex] container, like [Row] or [Column].","fields":[{"name":"flex","type":"int","required":true,"desc":"The flex factor to use in determining how much space to take up."}],"id":107,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Spacer","desc":["A Spacer will occupy the extendable area"]},{"file":"node2_flex.dart","name":"Space Allocation with Multiple Spacers","desc":["【flex】 : Proportion of remaining space allocation 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_zh-CN.json new file mode 100644 index 000000000..346b4dbd6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_zh-CN.json @@ -0,0 +1 @@ +{"name":"Spacer","path":"/src/widgets/spacer.dart","parents":["StatelessWidget","Widget"],"desc":"Spacer 创建一个可调整的空白间隔器,可用于调整 [Flex] 容器(如 [Row] 或 [Column])中小部件之间的间距。","fields":[{"name":"flex","type":"int","required":true,"desc":"用于确定占用多少空间的弹性因子。"}],"id":107,"localName":"空间组件","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Spacer基本使用","desc":["一个Spacer会占据可延伸区域"]},{"file":"node2_flex.dart","name":"多个Spacer空间分配","desc":["【flex】 : 剩余空间分配占比 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_en-US.json new file mode 100644 index 000000000..5058bcfc1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_en-US.json @@ -0,0 +1 @@ +{"name":"SpellCheckSuggestionsToolbar","path":"/src/material/spell_check_suggestions_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" The default spell check suggestions toolbar for Android.","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@template flutter.material.SpellCheckSuggestionsToolbar.anchor} The focal point below which the toolbar attempts to position itself. {@endtemplate}"},{"name":"buttonItems","type":"List","required":true,"desc":"The [ContextMenuButtonItem]s that will be turned into the correct button widgets and displayed in the spell check suggestions toolbar."}],"id":529,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_zh-CN.json new file mode 100644 index 000000000..a6f794946 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_zh-CN.json @@ -0,0 +1 @@ +{"name":"SpellCheckSuggestionsToolbar","path":"/src/material/spell_check_suggestions_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"Android 的默认拼写检查建议工具栏。","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@template flutter.material.SpellCheckSuggestionsToolbar.anchor} 工具栏尝试定位自己的焦点下方。{@endtemplate}"},{"name":"buttonItems","type":"List","required":true,"desc":"将转换为正确按钮小部件并显示在拼写检查建议工具栏中的 [ContextMenuButtonItem]。"}],"id":529,"localName":"SpellCheckSuggestionsToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Stack/Stack_en-US.json b/modules/widget_system/widgets/doc/widgets/Stack/Stack_en-US.json new file mode 100644 index 000000000..6be6e7296 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Stack/Stack_en-US.json @@ -0,0 +1 @@ +{"name":"Stack","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that positions its children relative to the edges of its box.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the non-positioned and partially-positioned children in the stack."},{"name":"textDirection","type":"TextDirection?","desc":"The text direction with which to resolve [alignment]."},{"name":"fit","type":"StackFit","required":true,"desc":"How to size the non-positioned children in the stack."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":97,"lever":5,"family":3,"linkIds":[94,95,161],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Stack","desc":["【children】: Component list 【List】","【textDirection】: Child arrangement direction 【MainAxisAlignment】","【alignment】: Alignment method 【AlignmentGeometry】","【overflow】: Overflow mode 【Overflow】","【fit】: Fit mode 【StackFit】"]},{"file":"node2_positioned.dart","name":"Combined Usage of Stack and Positioned","desc":["The Positioned component can only be used within a Stack, allowing precise placement of a component by specifying distances from the top, left, right, and bottom."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Stack/Stack_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Stack/Stack_zh-CN.json new file mode 100644 index 000000000..f6c7f9c40 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Stack/Stack_zh-CN.json @@ -0,0 +1 @@ +{"name":"Stack","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"相对于其框边缘定位其子项的小部件。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在堆栈中对齐非定位和部分定位的子项。"},{"name":"textDirection","type":"TextDirection?","desc":"用于解析 [alignment] 的文本方向。"},{"name":"fit","type":"StackFit","required":true,"desc":"如何调整堆栈中非定位子项的大小。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":97,"localName":"堆叠布局","lever":5,"family":3,"linkIds":[94,95,161],"nodes":[{"file":"node1_base.dart","name":"Stack基本使用","desc":["【children】 : 组件列表 【List】","【textDirection】 : 孩子排布方向 【MainAxisAlignment】","【alignment】 : 对齐方式 【AlignmentGeometry】","【overflow】 : 溢出模式 【Overflow】","【fit】 : 适应模式 【StackFit】"]},{"file":"node2_positioned.dart","name":"Stack和Positioned结合使用","desc":["Positioned组件只能用与Stack中,可以指定左上右下的距离对某个组件进行位置精确安放。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_en-US.json new file mode 100644 index 000000000..8b3559477 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_en-US.json @@ -0,0 +1 @@ +{"name":"StatefulBuilder","path":"/src/widgets/basic.dart","parents":["StatefulWidget","Widget"],"desc":" A platonic widget that both has state and calls a closure to obtain its child widget.","fields":[{"name":"builder","type":"StatefulWidgetBuilder","required":true,"desc":"Called to obtain the child widget."}],"id":242,"lever":3,"family":1,"linkIds":[202,203,280,255],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of StatefulBuilder","desc":["【builder】 : Component Constructor 【StatefulWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_zh-CN.json new file mode 100644 index 000000000..a124fba26 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_zh-CN.json @@ -0,0 +1 @@ +{"name":"StatefulBuilder","path":"/src/widgets/basic.dart","parents":["StatefulWidget","Widget"],"desc":"既有状态又调用闭包来获取其子小部件的柏拉图式小部件。","fields":[{"name":"builder","type":"StatefulWidgetBuilder","required":true,"desc":"调用以获取子小部件。"}],"id":242,"localName":"状态构造器","lever":3,"family":1,"linkIds":[202,203,280,255],"nodes":[{"file":"node1_base.dart","name":"StatefulBuilder基本使用","desc":["【builder】 : 组件构造器 【StatefulWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_en-US.json new file mode 100644 index 000000000..9a950914d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_en-US.json @@ -0,0 +1 @@ +{"name":"StatefulWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":" A widget that has mutable state.","fields":[],"id":530,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_zh-CN.json new file mode 100644 index 000000000..d0a923ffe --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"StatefulWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":"具有可变状态的小部件。","fields":[],"id":530,"localName":"StatefulWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_en-US.json new file mode 100644 index 000000000..e05c44681 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_en-US.json @@ -0,0 +1 @@ +{"name":"StatelessWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":" A widget that does not require mutable state.","fields":[],"id":531,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_zh-CN.json new file mode 100644 index 000000000..56d648d93 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"StatelessWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":"不需要可变状态的小部件。","fields":[],"id":531,"localName":"StatelessWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_en-US.json new file mode 100644 index 000000000..c5c677df4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_en-US.json @@ -0,0 +1 @@ +{"name":"StatusTransitionWidget","path":"/src/widgets/status_transitions.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" A widget that rebuilds when the given animation changes status.","fields":[{"name":"animation","type":"Animation","required":true,"desc":"The animation to which this widget is listening."}],"id":233,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to StatusTransitionWidget","desc":["【animation】 : Child component 【Animation】","Here, a custom ColorStatusTransitionWidget is used to build different colors when the state of the animator changes."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_zh-CN.json new file mode 100644 index 000000000..3a8a3af1a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"StatusTransitionWidget","path":"/src/widgets/status_transitions.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"当给定动画更改状态时重建的小部件。","fields":[{"name":"animation","type":"Animation","required":true,"desc":"此小部件正在监听的动画。"}],"id":233,"localName":"状态转变组件","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"StatusTransitionWidget 介绍","desc":["【animation】 : 子组件 【Animation】","这里自定义 ColorStatusTransitionWidget 进行使用,在动画器的状态改变时构建不同的颜色。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_en-US.json b/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_en-US.json new file mode 100644 index 000000000..8111d1f6e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_en-US.json @@ -0,0 +1 @@ +{"name":"Stepper","path":"/src/material/stepper.dart","parents":["StatefulWidget","Widget"],"desc":" A material stepper widget that displays progress through a sequence of steps. Steppers are particularly useful in the case of forms where one step requires the completion of another one, or where multiple steps need to be completed in order to submit the whole form.","fields":[{"name":"steps","type":"List","required":true,"desc":"The steps of the stepper whose titles, subtitles, icons always get shown."},{"name":"physics","type":"ScrollPhysics?","desc":"How the stepper's scroll view should respond to user input."},{"name":"controller","type":"ScrollController?","desc":"An object that can be used to control the position to which this scroll view is scrolled."},{"name":"type","type":"StepperType","required":true,"desc":"The type of stepper that determines the layout. In the case of [StepperType.horizontal], the content of the current step is displayed underneath as opposed to the [StepperType.vertical] case where it is displayed in-between."},{"name":"currentStep","type":"int","required":true,"desc":"The index into [steps] of the current step whose content is displayed."},{"name":"onStepTapped","type":"ValueChanged?","desc":"The callback called when a step is tapped, with its index passed as an argument."},{"name":"onStepContinue","type":"VoidCallback?","desc":"The callback called when the 'continue' button is tapped."},{"name":"onStepCancel","type":"VoidCallback?","desc":"The callback called when the 'cancel' button is tapped."},{"name":"controlsBuilder","type":"ControlsWidgetBuilder?","desc":"The callback for creating custom controls."},{"name":"elevation","type":"double?","desc":"The elevation of this stepper's [Material] when [type] is [StepperType.horizontal]."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"Custom margin on vertical stepper."},{"name":"connectorColor","type":"MaterialStateProperty?","desc":"Customize connected lines colors."},{"name":"connectorThickness","type":"double?","desc":"The thickness of the connecting lines."},{"name":"stepIconBuilder","type":"StepIconBuilder?","desc":"Callback for creating custom icons for the [steps]."},{"name":"stepIconHeight","type":"double?","desc":"Overrides the default step icon size height."},{"name":"stepIconWidth","type":"double?","desc":"Overrides the default step icon size width."},{"name":"stepIconMargin","type":"EdgeInsets?","desc":"Overrides the default step icon margin."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"The [Step.content] will be clipped to this Clip type."}],"id":200,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Stepper","desc":["【steps】: Step list 【List】","【currentStep】: Current step 【double】","【onStepTapped】: Click callback 【ValueChanged】","【onStepCancel】: Previous step callback 【VoidCallback】","【controlsBuilder】: Controller construction 【ControlsWidgetBuilder】"]},{"file":"node2_type.dart","name":"Direction of Stepper","desc":["【type】: Direction 【StepperType】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_zh-CN.json new file mode 100644 index 000000000..bf5fab3a9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_zh-CN.json @@ -0,0 +1 @@ +{"name":"Stepper","path":"/src/material/stepper.dart","parents":["StatefulWidget","Widget"],"desc":"显示通过一系列步骤进度的 material 步进器小部件。步进器在表单中特别有用,其中一个步骤需要完成另一个步骤,或者需要按顺序完成多个步骤才能提交整个表单。","fields":[{"name":"steps","type":"List","required":true,"desc":"步进器的步骤,其标题、副标题、图标始终显示。"},{"name":"physics","type":"ScrollPhysics?","desc":"步进器的滚动视图应如何响应用户输入。"},{"name":"controller","type":"ScrollController?","desc":"可用于控制此滚动视图滚动到的位置的对象。"},{"name":"type","type":"StepperType","required":true,"desc":"确定布局的步进器类型。在 [StepperType.horizontal] 的情况下,当前步骤的内容显示在下方,而不是 [StepperType.vertical] 情况下显示在中间。"},{"name":"currentStep","type":"int","required":true,"desc":"显示其内容的当前步骤在 [steps] 中的索引。"},{"name":"onStepTapped","type":"ValueChanged?","desc":"点击步骤时调用的回调,将其索引作为参数传递。"},{"name":"onStepContinue","type":"VoidCallback?","desc":"点击"},{"name":"onStepCancel","type":"VoidCallback?","desc":"点击"},{"name":"controlsBuilder","type":"ControlsWidgetBuilder?","desc":"创建自定义控件的回调。"},{"name":"elevation","type":"double?","desc":"当 [type] 为 [StepperType.horizontal] 时此步进器的 [Material] 的高度。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"垂直步进器上的自定义边距。"},{"name":"connectorColor","type":"MaterialStateProperty?","desc":"自定义连接线颜色。"},{"name":"connectorThickness","type":"double?","desc":"连接线的厚度。"},{"name":"stepIconBuilder","type":"StepIconBuilder?","desc":"为 [steps] 创建自定义图标的回调。"},{"name":"stepIconHeight","type":"double?","desc":"覆盖默认步骤图标大小高度。"},{"name":"stepIconWidth","type":"double?","desc":"覆盖默认步骤图标大小宽度。"},{"name":"stepIconMargin","type":"EdgeInsets?","desc":"覆盖默认步骤图标边距。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"[Step.content] 将被裁剪到此 Clip 类型。"}],"id":200,"localName":"步骤组件","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Stepper基本使用","desc":["【steps】 : 步骤列表 【List】","【currentStep】 : 当前步骤 【double】","【onStepTapped】 : 点击回调 【ValueChanged】","【onStepCancel】 : 上一步回调 【VoidCallback】","【controlsBuilder】 : 控制器构造 【ControlsWidgetBuilder】"]},{"file":"node2_type.dart","name":"Stepper的方向","desc":["【type】 : 方向 【StepperType】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_en-US.json new file mode 100644 index 000000000..0150161d1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_en-US.json @@ -0,0 +1 @@ +{"name":"StreamBuilder","path":"/src/widgets/async.dart","parents":["StreamBuilderBase","StatefulWidget","Widget"],"desc":" Widget that builds itself based on the latest snapshot of interaction with a [Stream].","fields":[{"name":"builder","type":"AsyncWidgetBuilder","required":true,"desc":"The build strategy currently used by this builder."},{"name":"initialData","type":"T?","desc":"The data that will be used to create the initial snapshot."}],"id":173,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of StreamBuilder","desc":["【stream】 : Child component 【Stream】","【initialData】 : Initial data 【T】","【builder】 : Click event 【AsyncWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_zh-CN.json new file mode 100644 index 000000000..31bbc1189 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_zh-CN.json @@ -0,0 +1 @@ +{"name":"StreamBuilder","path":"/src/widgets/async.dart","parents":["StreamBuilderBase","StatefulWidget","Widget"],"desc":"基于与 [Stream] 交互的最新快照构建自身的小部件。","fields":[{"name":"builder","type":"AsyncWidgetBuilder","required":true,"desc":"此构建器当前使用的构建策略。"},{"name":"initialData","type":"T?","desc":"将用于创建初始快照的数据。"}],"id":173,"localName":"流构造器","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"StreamBuilder基本使用","desc":["【stream】 : 子组件 【Stream】","【initialData】 : 初始数据 【T】","【builder】 : 点击事件 【AsyncWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_en-US.json b/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_en-US.json new file mode 100644 index 000000000..98ee8900a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_en-US.json @@ -0,0 +1 @@ +{"name":"StreamBuilderBase","path":"/src/widgets/async.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" Base class for widgets that build themselves based on interaction with a specified [Stream].","fields":[{"name":"stream","type":"Stream?","desc":"The asynchronous computation to which this builder is currently connected, possibly null. When changed, the current summary is updated using [afterDisconnected], if the previous stream was not null, followed by [afterConnected], if the new stream is not null."}],"id":532,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_zh-CN.json new file mode 100644 index 000000000..8ce8ee271 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_zh-CN.json @@ -0,0 +1 @@ +{"name":"StreamBuilderBase","path":"/src/widgets/async.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"基于与指定 [Stream] 交互构建自身的小部件的基类。","fields":[{"name":"stream","type":"Stream?","desc":"此构建器当前连接的异步计算,可能为 null。更改时,如果先前的流不为 null,则使用 [afterDisconnected] 更新当前摘要,如果新流不为 null,则使用 [afterConnected]。"}],"id":532,"localName":"StreamBuilderBase","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_en-US.json new file mode 100644 index 000000000..88a0f7da3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_en-US.json @@ -0,0 +1 @@ +{"name":"StretchingOverscrollIndicator","path":"/src/widgets/overscroll_indicator.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design visual indication that a scroll view has overscrolled.","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@macro flutter.overscroll.axisDirection}"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@macro flutter.overscroll.notificationPredicate}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":533,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_zh-CN.json new file mode 100644 index 000000000..538c02fd4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_zh-CN.json @@ -0,0 +1 @@ +{"name":"StretchingOverscrollIndicator","path":"/src/widgets/overscroll_indicator.dart","parents":["StatefulWidget","Widget"],"desc":"滚动视图已过度滚动的 Material Design 视觉指示。","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@macro flutter.overscroll.axisDirection}"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@macro flutter.overscroll.notificationPredicate}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":533,"localName":"StretchingOverscrollIndicator","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_en-US.json b/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_en-US.json new file mode 100644 index 000000000..a2ddecdfd --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_en-US.json @@ -0,0 +1 @@ +{"name":"SubmenuButton","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A menu button that displays a cascading menu.","fields":[{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the button response area."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"onOpen","type":"VoidCallback?","desc":"A callback that is invoked when the menu is opened."},{"name":"onClose","type":"VoidCallback?","desc":"A callback that is invoked when the menu is closed."},{"name":"controller","type":"MenuController?","desc":"An optional [MenuController] for this submenu."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"menuStyle","type":"MenuStyle?","desc":"The [MenuStyle] of the menu specified by [menuChildren]."},{"name":"alignmentOffset","type":"Offset?","desc":"The offset of the menu relative to the alignment origin determined by [MenuStyle.alignment] on the [style] attribute."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"leadingIcon","type":"Widget?","desc":"An optional icon to display before the [child]."},{"name":"submenuIcon","type":"MaterialStateProperty?","desc":"If provided, the widget replaces the default [SubmenuButton] arrow icon."},{"name":"trailingIcon","type":"Widget?","desc":"An optional icon to display after the [child]."},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@macro flutter.widgets.RawMenuAnchor.useRootOverlay}"},{"name":"menuChildren","type":"List","required":true,"desc":"The list of widgets that appear in the menu when it is opened."},{"name":"child","type":"Widget?","desc":"The widget displayed in the middle portion of this button."}],"id":534,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_zh-CN.json new file mode 100644 index 000000000..36765be6d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"SubmenuButton","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"显示级联菜单的菜单按钮。","fields":[{"name":"onHover","type":"ValueChanged?","desc":"指针进入或退出按钮响应区域时调用。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点更改时调用的处理程序。"},{"name":"onOpen","type":"VoidCallback?","desc":"菜单打开时调用的回调。"},{"name":"onClose","type":"VoidCallback?","desc":"菜单关闭时调用的回调。"},{"name":"controller","type":"MenuController?","desc":"此子菜单的可选 [MenuController]。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"menuStyle","type":"MenuStyle?","desc":"由 [menuChildren] 指定的菜单的 [MenuStyle]。"},{"name":"alignmentOffset","type":"Offset?","desc":"菜单相对于由 [style] 属性上的 [MenuStyle.alignment] 确定的对齐原点的偏移。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"leadingIcon","type":"Widget?","desc":"在 [child] 之前显示的可选图标。"},{"name":"submenuIcon","type":"MaterialStateProperty?","desc":"如果提供,小部件将替换默认的 [SubmenuButton] 箭头图标。"},{"name":"trailingIcon","type":"Widget?","desc":"在 [child] 之后显示的可选图标。"},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@macro flutter.widgets.RawMenuAnchor.useRootOverlay}"},{"name":"menuChildren","type":"List","required":true,"desc":"菜单打开时出现在菜单中的小部件列表。"},{"name":"child","type":"Widget?","desc":"显示在此按钮中间部分的小部件。"}],"id":534,"localName":"SubmenuButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Switch/Switch_en-US.json b/modules/widget_system/widgets/doc/widgets/Switch/Switch_en-US.json new file mode 100644 index 000000000..59e02ae4b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Switch/Switch_en-US.json @@ -0,0 +1 @@ +{"name":"Switch","path":"/src/material/switch.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design switch.","fields":[{"name":"value","type":"bool","required":true,"desc":"Whether this switch is on or off."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user toggles the switch on or off."},{"name":"activeColor","type":"Color?","desc":"{@template flutter.material.switch.activeColor} The color to use when this switch is on. {@endtemplate}"},{"name":"activeTrackColor","type":"Color?","desc":"{@template flutter.material.switch.activeTrackColor} The color to use on the track when this switch is on. {@endtemplate}"},{"name":"inactiveThumbColor","type":"Color?","desc":"{@template flutter.material.switch.inactiveThumbColor} The color to use on the thumb when this switch is off. {@endtemplate}"},{"name":"inactiveTrackColor","type":"Color?","desc":"{@template flutter.material.switch.inactiveTrackColor} The color to use on the track when this switch is off. {@endtemplate}"},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@template flutter.material.switch.activeThumbImage} An image to use on the thumb of this switch when the switch is on. {@endtemplate}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@template flutter.material.switch.onActiveThumbImageError} An optional error callback for errors emitted when loading [activeThumbImage]. {@endtemplate}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@template flutter.material.switch.inactiveThumbImage} An image to use on the thumb of this switch when the switch is off. {@endtemplate}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@template flutter.material.switch.onInactiveThumbImageError} An optional error callback for errors emitted when loading [inactiveThumbImage]. {@endtemplate}"},{"name":"thumbColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.thumbColor} The color of this [Switch]'s thumb."},{"name":"trackColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackColor} The color of this [Switch]'s track."},{"name":"trackOutlineColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackOutlineColor} The outline color of this [Switch]'s track."},{"name":"trackOutlineWidth","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackOutlineWidth} The outline width of this [Switch]'s track."},{"name":"thumbIcon","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.thumbIcon} The icon to use on the thumb of this switch"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.switch.materialTapTargetSize} Configures the minimum size of the tap target. {@endtemplate}"},{"name":"applyCupertinoTheme","type":"bool?","desc":"{@macro flutter.cupertino.CupertinoSwitch.applyTheme}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.cupertino.CupertinoSwitch.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.switch.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"focusColor","type":"Color?","desc":"The color for the button's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"The color for the button's [Material] when a pointer is hovering over it."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.overlayColor} The color for the switch's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.switch.splashRadius} The splash radius of the circular [Material] ink response. {@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space to surround the child inside the bounds of the [Switch]."}],"id":40,"lever":4,"family":1,"linkIds":[41,18],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Switch","desc":["【inactiveThumbColor】 : Unselected small circle color 【Color】","【inactiveTrackColor】 : Unselected track color 【Color】","【activeColor】 : Selected small circle color 【Color】","【activeTrackColor】 : Selected track color 【Color】","【onChanged】 : Toggle callback 【Function(double)】","When onChanged, callbacks for true, null, and false states"]},{"file":"node2_image.dart","name":"Switch Image","desc":["【inactiveThumbImage】 : Unselected small circle image 【ImageProvider】","【activeThumbImage】 : Selected small circle image 【ImageProvider】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Switch/Switch_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Switch/Switch_zh-CN.json new file mode 100644 index 000000000..24f63615c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Switch/Switch_zh-CN.json @@ -0,0 +1 @@ +{"name":"Switch","path":"/src/material/switch.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 开关。","fields":[{"name":"value","type":"bool","required":true,"desc":"此开关是打开还是关闭。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户打开或关闭开关时调用。"},{"name":"activeColor","type":"Color?","desc":"{@template flutter.material.switch.activeColor} 此开关打开时使用的颜色。{@endtemplate}"},{"name":"activeTrackColor","type":"Color?","desc":"{@template flutter.material.switch.activeTrackColor} 此开关打开时轨道上使用的颜色。{@endtemplate}"},{"name":"inactiveThumbColor","type":"Color?","desc":"{@template flutter.material.switch.inactiveThumbColor} 此开关关闭时拇指上使用的颜色。{@endtemplate}"},{"name":"inactiveTrackColor","type":"Color?","desc":"{@template flutter.material.switch.inactiveTrackColor} 此开关关闭时轨道上使用的颜色。{@endtemplate}"},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@template flutter.material.switch.activeThumbImage} 开关打开时在此开关拇指上使用的图像。{@endtemplate}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@template flutter.material.switch.onActiveThumbImageError} 加载 [activeThumbImage] 时发出错误的可选错误回调。{@endtemplate}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@template flutter.material.switch.inactiveThumbImage} 开关关闭时在此开关拇指上使用的图像。{@endtemplate}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@template flutter.material.switch.onInactiveThumbImageError} 加载 [inactiveThumbImage] 时发出错误的可选错误回调。{@endtemplate}"},{"name":"thumbColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.thumbColor} 此 [Switch] 拇指的颜色。"},{"name":"trackColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackColor} 此 [Switch] 轨道的颜色。"},{"name":"trackOutlineColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackOutlineColor} 此 [Switch] 轨道的轮廓颜色。"},{"name":"trackOutlineWidth","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackOutlineWidth} 此 [Switch] 轨道的轮廓宽度。"},{"name":"thumbIcon","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.thumbIcon} 在此开关拇指上使用的图标"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.switch.materialTapTargetSize} 配置点击目标的最小大小。{@endtemplate}"},{"name":"applyCupertinoTheme","type":"bool?","desc":"{@macro flutter.cupertino.CupertinoSwitch.applyTheme}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.cupertino.CupertinoSwitch.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.switch.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时按钮的 [Material] 的颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在按钮上时按钮的 [Material] 的颜色。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.overlayColor} 开关的 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.switch.splashRadius} 圆形 [Material] 墨水响应的飞溅半径。{@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在 [Switch] 边界内围绕子项的空间量。"}],"id":40,"localName":"切钮","lever":4,"family":1,"linkIds":[41,18],"nodes":[{"file":"node1_base.dart","name":"Switch基础用法","desc":["【inactiveThumbColor】 : 未选中小圈颜色 【Color】","【inactiveTrackColor】 : 未选中滑槽颜色 【Color】","【activeColor】 : 选中时小圈颜色 【Color】","【activeTrackColor】 : 选中时滑槽颜色 【Color】","【onChanged】 : 切换回调 【Function(double)】\""," onChanged时,回调true、null、false三种状态"]},{"file":"node2_image.dart","name":"Switch图片","desc":["【inactiveThumbImage】 : 未选中小圈图片 【ImageProvider】","【activeThumbImage】 : 选中小圈图片 【ImageProvider】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_en-US.json new file mode 100644 index 000000000..9bf64ba45 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_en-US.json @@ -0,0 +1 @@ +{"name":"SwitchListTile","path":"/src/material/switch_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A [ListTile] with a [Switch]. In other words, a switch with a label.","fields":[{"name":"value","type":"bool","required":true,"desc":"Whether this switch is checked."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user toggles the switch on or off."},{"name":"activeColor","type":"Color?","desc":"{@macro flutter.material.switch.activeColor}"},{"name":"activeTrackColor","type":"Color?","desc":"{@macro flutter.material.switch.activeTrackColor}"},{"name":"inactiveThumbColor","type":"Color?","desc":"{@macro flutter.material.switch.inactiveThumbColor}"},{"name":"inactiveTrackColor","type":"Color?","desc":"{@macro flutter.material.switch.inactiveTrackColor}"},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.activeThumbImage}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onActiveThumbImageError}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.inactiveThumbImage}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onInactiveThumbImageError}"},{"name":"thumbColor","type":"MaterialStateProperty?","desc":"The color of this switch's thumb."},{"name":"trackColor","type":"MaterialStateProperty?","desc":"The color of this switch's track."},{"name":"trackOutlineColor","type":"MaterialStateProperty?","desc":"{@macro flutter.material.switch.trackOutlineColor}"},{"name":"thumbIcon","type":"MaterialStateProperty?","desc":"The icon to use on the thumb of this switch"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.switch.materialTapTargetSize}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.cupertino.CupertinoSwitch.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The color for the switch's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.switch.splashRadius}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tileColor","type":"Color?","desc":"{@macro flutter.material.ListTile.tileColor}"},{"name":"title","type":"Widget?","desc":"The primary content of the list tile."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"secondary","type":"Widget?","desc":"A widget to display on the opposite side of the tile from the switch."},{"name":"isThreeLine","type":"bool","required":true,"desc":"Whether this list tile is intended to display three lines of text."},{"name":"dense","type":"bool?","desc":"Whether this list tile is part of a vertically dense list."},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"The tile's internal padding."},{"name":"selected","type":"bool","required":true,"desc":"Whether to render icons and text in the [activeColor]."},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"Defines the position of control and [secondary], relative to text."},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.ListTile.shape}"},{"name":"selectedTileColor","type":"Color?","desc":"If non-null, defines the background color when [SwitchListTile.selected] is true."},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the list tile's layout will be."},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"hoverColor","type":"Color?","desc":"The color for the tile's [Material] when a pointer is hovering over it."},{"name":"applyCupertinoTheme","type":"bool?","desc":"{@macro flutter.cupertino.CupertinoSwitch.applyTheme}"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"Whether to add button:true to the semantics if onTap is provided. This is a temporary flag to help changing the behavior of ListTile onTap semantics."}],"id":18,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic representation of SwitchListTile","desc":["【secondary】: Left component 【Widget】","【title】: Top middle component 【Widget】","【subtitle】: Bottom middle component 【Widget】","【inactiveThumbColor】: Circle color when not selected 【Color】","【inactiveTrackColor】: Track color when not selected 【Color】","【activeColor】: Circle color when selected 【Color】","【activeTrackColor】: Track color when selected 【Color】","【onChanged】: Selection event 【Function(bool)】"]},{"file":"node2_select.dart","name":"Selection effect of SwitchListTile","desc":["【selected】: Whether selected 【bool】","【inactiveThumbImage】: Circle image when not selected 【ImageProvider】","【activeThumbImage】: Circle image when selected 【ImageProvider】"]},{"file":"node3_dense.dart","name":"Dense property of SwitchListTile","desc":["【dense】: Whether dense 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_zh-CN.json new file mode 100644 index 000000000..7b9c69549 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_zh-CN.json @@ -0,0 +1 @@ +{"name":"SwitchListTile","path":"/src/material/switch_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":"带有 [Switch] 的 [ListTile]。换句话说,带有标签的开关。","fields":[{"name":"value","type":"bool","required":true,"desc":"此开关是否被选中。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户打开或关闭开关时调用。"},{"name":"activeColor","type":"Color?","desc":"{@macro flutter.material.switch.activeColor}"},{"name":"activeTrackColor","type":"Color?","desc":"{@macro flutter.material.switch.activeTrackColor}"},{"name":"inactiveThumbColor","type":"Color?","desc":"{@macro flutter.material.switch.inactiveThumbColor}"},{"name":"inactiveTrackColor","type":"Color?","desc":"{@macro flutter.material.switch.inactiveTrackColor}"},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.activeThumbImage}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onActiveThumbImageError}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.inactiveThumbImage}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onInactiveThumbImageError}"},{"name":"thumbColor","type":"MaterialStateProperty?","desc":"此开关拇指的颜色。"},{"name":"trackColor","type":"MaterialStateProperty?","desc":"此开关轨道的颜色。"},{"name":"trackOutlineColor","type":"MaterialStateProperty?","desc":"{@macro flutter.material.switch.trackOutlineColor}"},{"name":"thumbIcon","type":"MaterialStateProperty?","desc":"在此开关拇指上使用的图标"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.switch.materialTapTargetSize}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.cupertino.CupertinoSwitch.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"开关的 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.switch.splashRadius}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tileColor","type":"Color?","desc":"{@macro flutter.material.ListTile.tileColor}"},{"name":"title","type":"Widget?","desc":"列表瓦片的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"secondary","type":"Widget?","desc":"在瓦片与开关相对侧显示的小部件。"},{"name":"isThreeLine","type":"bool","required":true,"desc":"此列表瓦片是否旨在显示三行文本。"},{"name":"dense","type":"bool?","desc":"此列表瓦片是否是垂直密集列表的一部分。"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"瓦片的内部内边距。"},{"name":"selected","type":"bool","required":true,"desc":"是否以 [activeColor] 渲染图标和文本。"},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"定义控件和 [secondary] 相对于文本的位置。"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.ListTile.shape}"},{"name":"selectedTileColor","type":"Color?","desc":"如果非空,定义 [SwitchListTile.selected] 为 true 时的背景颜色。"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义列表瓦片布局的紧凑程度。"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在瓦片上时瓦片的 [Material] 的颜色。"},{"name":"applyCupertinoTheme","type":"bool?","desc":"{@macro flutter.cupertino.CupertinoSwitch.applyTheme}"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"如果提供了 onTap,是否向语义添加 button:true。这是一个临时标志,用于帮助更改 ListTile onTap 语义的行为。"}],"id":18,"localName":"切钮瓦片","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SwitchListTile的基本表现如下","desc":["【secondary】: 左侧组件 【Widget】","【title】: 中间上组件 【Widget】","【subtitle】: 中间下组件 【Widget】","【inactiveThumbColor】: 未选中时圆圈颜色 【Color】","【inactiveTrackColor】: 未选中滑槽颜色 【Color】","【activeColor】: 选中时圆圈颜色 【Color】","【activeTrackColor】: 选中滑槽颜色 【Color】","【onChanged】: 选中事件 【Function(bool)】"]},{"file":"node2_select.dart","name":"SwitchListTile的选中效果","desc":["【selected】: 是否选中 【bool】","【inactiveThumbImage】: 未选中时圆圈图片 【ImageProvider】","【activeThumbImage】: 选中时圆圈图片 【ImageProvider】"]},{"file":"node3_dense.dart","name":"SwitchListTile的密排属性","desc":["【dense】: 是否密排 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_en-US.json new file mode 100644 index 000000000..5c164cec5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_en-US.json @@ -0,0 +1 @@ +{"name":"SwitchTheme","path":"/src/material/switch_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a switch theme to descendant [Switch] widgets.","fields":[{"name":"data","type":"SwitchThemeData","required":true,"desc":"The properties used for all descendant [Switch] widgets."}],"id":535,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_zh-CN.json new file mode 100644 index 000000000..0395a89b8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"SwitchTheme","path":"/src/material/switch_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将开关主题应用于后代 [Switch] 小部件。","fields":[{"name":"data","type":"SwitchThemeData","required":true,"desc":"用于所有后代 [Switch] 小部件的属性。"}],"id":535,"localName":"SwitchTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_en-US.json b/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_en-US.json new file mode 100644 index 000000000..8edee1a51 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_en-US.json @@ -0,0 +1 @@ +{"name":"SystemContextMenu","path":"/src/widgets/system_context_menu.dart","parents":["StatefulWidget","Widget"],"desc":" Displays the system context menu on top of the Flutter view.","fields":[{"name":"anchor","type":"Rect","required":true,"desc":"The [Rect] that the context menu should point to."},{"name":"items","type":"List","required":true,"desc":"A list of the items to be displayed in the system context menu."},{"name":"onSystemHide","type":"VoidCallback?","desc":"Called when the system hides this context menu."}],"id":536,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_zh-CN.json new file mode 100644 index 000000000..59ec9cced --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_zh-CN.json @@ -0,0 +1 @@ +{"name":"SystemContextMenu","path":"/src/widgets/system_context_menu.dart","parents":["StatefulWidget","Widget"],"desc":"在 Flutter 视图顶部显示系统上下文菜单。","fields":[{"name":"anchor","type":"Rect","required":true,"desc":"上下文菜单应指向的 [Rect]。"},{"name":"items","type":"List","required":true,"desc":"要在系统上下文菜单中显示的项目列表。"},{"name":"onSystemHide","type":"VoidCallback?","desc":"系统隐藏此上下文菜单时调用。"}],"id":536,"localName":"SystemContextMenu","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Tab/Tab_en-US.json b/modules/widget_system/widgets/doc/widgets/Tab/Tab_en-US.json new file mode 100644 index 000000000..0813c5fd4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Tab/Tab_en-US.json @@ -0,0 +1 @@ +{"name":"Tab","path":"/src/material/tabs.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design [TabBar] tab.","fields":[{"name":"text","type":"String?","desc":"The text to display as the tab's label."},{"name":"child","type":"Widget?","desc":"The widget to be used as the tab's label."},{"name":"icon","type":"Widget?","desc":"An icon to display as the tab's label."},{"name":"iconMargin","type":"EdgeInsetsGeometry?","desc":"The margin added around the tab's icon."},{"name":"height","type":"double?","desc":"The height of the [Tab]."}],"id":148,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Tab","desc":["【child】: Child component 【Widget】","【text】: Text 【String】","【icon】: Bottom component 【Widget】"," text and child cannot exist simultaneously"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Tab/Tab_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Tab/Tab_zh-CN.json new file mode 100644 index 000000000..b932529ca --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Tab/Tab_zh-CN.json @@ -0,0 +1 @@ +{"name":"Tab","path":"/src/material/tabs.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design [TabBar] 选项卡。","fields":[{"name":"text","type":"String?","desc":"作为选项卡标签显示的文本。"},{"name":"child","type":"Widget?","desc":"用作选项卡标签的小部件。"},{"name":"icon","type":"Widget?","desc":"作为选项卡标签显示的图标。"},{"name":"iconMargin","type":"EdgeInsetsGeometry?","desc":"选项卡图标周围添加的边距。"},{"name":"height","type":"double?","desc":"[Tab] 的高度。"}],"id":148,"localName":"标签","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Tab基本使用","desc":["【child】 : 子组件 【Widget】","【text】 : 文字 【String】","【icon】 : 下方组件 【Widgit】"," text和child不能同时存在"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_en-US.json b/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_en-US.json new file mode 100644 index 000000000..1fbad7ec1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_en-US.json @@ -0,0 +1 @@ +{"name":"TabBar","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design primary tab bar.","fields":[{"name":"tabs","type":"List","required":true,"desc":"Typically a list of two or more [Tab] widgets."},{"name":"controller","type":"TabController?","desc":"This widget's selection and animation state."},{"name":"isScrollable","type":"bool","required":true,"desc":"Whether this tab bar can be scrolled horizontally."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the tab bar."},{"name":"indicatorColor","type":"Color?","desc":"The color of the line that appears below the selected tab."},{"name":"indicatorWeight","type":"double","required":true,"desc":"The thickness of the line that appears below the selected tab."},{"name":"indicatorPadding","type":"EdgeInsetsGeometry","required":true,"desc":"The padding for the indicator."},{"name":"indicator","type":"Decoration?","desc":"Defines the appearance of the selected tab indicator."},{"name":"automaticIndicatorColorAdjustment","type":"bool","required":true,"desc":"Whether this tab bar should automatically adjust the [indicatorColor]."},{"name":"indicatorSize","type":"TabBarIndicatorSize?","desc":"Defines how the selected tab indicator's size is computed."},{"name":"dividerColor","type":"Color?","desc":"The color of the divider."},{"name":"dividerHeight","type":"double?","desc":"The height of the divider."},{"name":"labelColor","type":"Color?","desc":"The color of selected tab labels."},{"name":"unselectedLabelColor","type":"Color?","desc":"The color of unselected tab labels."},{"name":"labelStyle","type":"TextStyle?","desc":"The text style of the selected tab labels."},{"name":"unselectedLabelStyle","type":"TextStyle?","desc":"The text style of the unselected tab labels."},{"name":"labelPadding","type":"EdgeInsetsGeometry?","desc":"The padding added to each of the tab labels."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"Defines the ink response focus, hover, and splash colors."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.tabs.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the individual tab widgets."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"onTap","type":"ValueChanged?","desc":"An optional callback that's called when the [TabBar] is tapped."},{"name":"onHover","type":"TabValueChanged?","desc":"An optional callback that's called when a [Tab]'s hover state in the [TabBar] changes."},{"name":"onFocusChange","type":"TabValueChanged?","desc":"An optional callback that's called when a [Tab]'s focus state in the [TabBar] changes."},{"name":"physics","type":"ScrollPhysics?","desc":"How the [TabBar]'s scroll view should respond to user input."},{"name":"splashFactory","type":"InteractiveInkFeatureFactory?","desc":"Creates the tab bar's [InkWell] splash factory, which defines the appearance of \"ink\" splashes that occur in response to taps."},{"name":"splashBorderRadius","type":"BorderRadius?","desc":"Defines the clipping radius of splashes that extend outside the bounds of the tab."},{"name":"tabAlignment","type":"TabAlignment?","desc":"Specifies the horizontal alignment of the tabs within a [TabBar]."},{"name":"textScaler","type":"TextScaler?","desc":"Specifies the text scaling behavior for the [Tab] label."},{"name":"indicatorAnimation","type":"TabIndicatorAnimation?","desc":"Specifies the animation behavior of the tab indicator."}],"id":58,"lever":3,"family":1,"linkIds":[57,59,148],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TabBar","desc":["【controller】 : Controller 【TabController】","【indicatorColor】 : Indicator Color 【Indicator Color】","【indicatorWeight】 : Indicator Height 【double】","【indicatorPadding】 : Indicator Margin 【EdgeInsetsGeometry】","【labelStyle】 : Tab Text Style 【TextStyle】","【unselectedLabelStyle】 : Unselected Text Style 【TextStyle】","【isScrollable】 : Whether Scrollable 【bool】","【onTap】 : Tab Click Callback 【Function(int)】","【tabs】 : Tab Components 【List】"]},{"file":"node2_noShadow.dart","name":"Achieve No Ripple Effect by Setting Theme","desc":["Set the ripple color in the Theme to transparent."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_zh-CN.json new file mode 100644 index 000000000..ec378338f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_zh-CN.json @@ -0,0 +1 @@ +{"name":"TabBar","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 主选项卡栏。","fields":[{"name":"tabs","type":"List","required":true,"desc":"通常是两个或更多 [Tab] 小部件的列表。"},{"name":"controller","type":"TabController?","desc":"此小部件的选择和动画状态。"},{"name":"isScrollable","type":"bool","required":true,"desc":"此选项卡栏是否可以水平滚动。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"插入选项卡栏的空间量。"},{"name":"indicatorColor","type":"Color?","desc":"出现在选定选项卡下方的线的颜色。"},{"name":"indicatorWeight","type":"double","required":true,"desc":"出现在选定选项卡下方的线的厚度。"},{"name":"indicatorPadding","type":"EdgeInsetsGeometry","required":true,"desc":"指示器的内边距。"},{"name":"indicator","type":"Decoration?","desc":"定义选定选项卡指示器的外观。"},{"name":"automaticIndicatorColorAdjustment","type":"bool","required":true,"desc":"此选项卡栏是否应自动调整 [indicatorColor]。"},{"name":"indicatorSize","type":"TabBarIndicatorSize?","desc":"定义如何计算选定选项卡指示器的大小。"},{"name":"dividerColor","type":"Color?","desc":"分隔符的颜色。"},{"name":"dividerHeight","type":"double?","desc":"分隔符的高度。"},{"name":"labelColor","type":"Color?","desc":"选定选项卡标签的颜色。"},{"name":"unselectedLabelColor","type":"Color?","desc":"未选定选项卡标签的颜色。"},{"name":"labelStyle","type":"TextStyle?","desc":"选定选项卡标签的文本样式。"},{"name":"unselectedLabelStyle","type":"TextStyle?","desc":"未选定选项卡标签的文本样式。"},{"name":"labelPadding","type":"EdgeInsetsGeometry?","desc":"添加到每个选项卡标签的内边距。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"定义墨水响应焦点、悬停和飞溅颜色。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.tabs.mouseCursor} 鼠标指针进入或悬停在各个选项卡小部件上时的光标。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"onTap","type":"ValueChanged?","desc":"点击 [TabBar] 时调用的可选回调。"},{"name":"onHover","type":"TabValueChanged?","desc":"[TabBar] 中 [Tab] 的悬停状态发生变化时调用的可选回调。"},{"name":"onFocusChange","type":"TabValueChanged?","desc":"[TabBar] 中 [Tab] 的焦点状态发生变化时调用的可选回调。"},{"name":"physics","type":"ScrollPhysics?","desc":"[TabBar] 的滚动视图应如何响应用户输入。"},{"name":"splashFactory","type":"InteractiveInkFeatureFactory?","desc":"创建选项卡栏的 [InkWell] 飞溅工厂,定义响应点击而出现的"},{"name":"splashBorderRadius","type":"BorderRadius?","desc":"定义延伸到选项卡边界之外的飞溅的裁剪半径。"},{"name":"tabAlignment","type":"TabAlignment?","desc":"指定 [TabBar] 内选项卡的水平对齐。"},{"name":"textScaler","type":"TextScaler?","desc":"指定 [Tab] 标签的文本缩放行为。"},{"name":"indicatorAnimation","type":"TabIndicatorAnimation?","desc":"指定选项卡指示器的动画行为。"}],"id":58,"localName":"标签栏","lever":3,"family":1,"linkIds":[57,59,148],"nodes":[{"file":"node1_base.dart","name":"TabBar基本使用","desc":["【controller】 : 控制器 【TabController】","【indicatorColor】 : 指示器颜色 【指示器颜色】","【indicatorWeight】 : 指示器高 【double】","【indicatorPadding】 : 指示器边距 【EdgeInsetsGeometry】","【labelStyle】 : 页签文字样式 【TextStyle】","【unselectedLabelStyle】 : 未选中文字样式 【TextStyle】","【isScrollable】 : 是否可滑动 【bool】","【onTap】 : 页签点击回调 【Function(int)】","【tabs】 : 标签组件 【List】"]},{"file":"node2_noShadow.dart","name":"通过设置Theme可实现无水波纹","desc":["将Theme关于水波纹的颜色设置为透明即可。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_en-US.json new file mode 100644 index 000000000..d3d0343e1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_en-US.json @@ -0,0 +1 @@ +{"name":"TabBarTheme","path":"/src/material/tab_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Defines a theme for [TabBar] widgets.","fields":[],"id":537,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_zh-CN.json new file mode 100644 index 000000000..3b92fec07 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"TabBarTheme","path":"/src/material/tab_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为 [TabBar] 小部件定义主题。","fields":[],"id":537,"localName":"TabBarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_en-US.json b/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_en-US.json new file mode 100644 index 000000000..e93a1e222 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_en-US.json @@ -0,0 +1 @@ +{"name":"TabBarView","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":" A page view that displays the widget which corresponds to the currently selected tab.","fields":[{"name":"controller","type":"TabController?","desc":"This widget's selection and animation state."},{"name":"children","type":"List","required":true,"desc":"One widget per tab."},{"name":"physics","type":"ScrollPhysics?","desc":"How the page view should respond to user input."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"viewportFraction","type":"double","required":true,"desc":"{@macro flutter.widgets.pageview.viewportFraction}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":59,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TabBarView needs to be used in conjunction with TabBar","desc":["【controller】 : Controller 【TabController】","【children】 : Children 【Indicator Color】","【physics】 : Behavior 【ScrollPhysics】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_zh-CN.json new file mode 100644 index 000000000..143f3f73d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_zh-CN.json @@ -0,0 +1 @@ +{"name":"TabBarView","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":"显示与当前选定选项卡对应的小部件的页面视图。","fields":[{"name":"controller","type":"TabController?","desc":"此小部件的选择和动画状态。"},{"name":"children","type":"List","required":true,"desc":"每个选项卡一个小部件。"},{"name":"physics","type":"ScrollPhysics?","desc":"页面视图应如何响应用户输入。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"viewportFraction","type":"double","required":true,"desc":"{@macro flutter.widgets.pageview.viewportFraction}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":59,"localName":"标签页","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TabBarView需要与TabBar联用","desc":["【controller】 : 控制器 【TabController】","【children】 : 孩子们 【指示器颜色】","【physics】 : 表现 【ScrollPhysics】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_en-US.json b/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_en-US.json new file mode 100644 index 000000000..a4ab4ac40 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_en-US.json @@ -0,0 +1 @@ +{"name":"TabPageSelector","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":" Uses [TabPageSelectorIndicator] to display a row of small circular indicators, one per tab.","fields":[{"name":"controller","type":"TabController?","desc":"This widget's selection and animation state."},{"name":"indicatorSize","type":"double","required":true,"desc":"The indicator circle's diameter (the default value is 12.0)."},{"name":"color","type":"Color?","desc":"The indicator circle's fill color for unselected pages."},{"name":"selectedColor","type":"Color?","desc":"The indicator circle's fill color for selected pages and border color for all indicator circles."},{"name":"borderStyle","type":"BorderStyle?","desc":"The indicator circle's border style."}],"id":205,"lever":2,"family":0,"linkIds":[206,59],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TabPageSelector","desc":["【controller】 : Controller 【TabController】","【indicatorSize】: Indicator Size 【double】","【selectedColor】: Selected Color 【Color】","【color】: Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_zh-CN.json new file mode 100644 index 000000000..af98d402d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_zh-CN.json @@ -0,0 +1 @@ +{"name":"TabPageSelector","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":"使用 [TabPageSelectorIndicator] 显示一行小圆形指示器,每个选项卡一个。","fields":[{"name":"controller","type":"TabController?","desc":"此小部件的选择和动画状态。"},{"name":"indicatorSize","type":"double","required":true,"desc":"指示器圆圈的直径(默认值为 12.0)。"},{"name":"color","type":"Color?","desc":"未选定页面的指示器圆圈的填充颜色。"},{"name":"selectedColor","type":"Color?","desc":"选定页面的指示器圆圈的填充颜色和所有指示器圆圈的边框颜色。"},{"name":"borderStyle","type":"BorderStyle?","desc":"指示器圆圈的边框样式。"}],"id":205,"localName":"页签滑动选择器","lever":2,"family":0,"linkIds":[206,59],"nodes":[{"file":"node1_base.dart","name":"TabPageSelector基本使用","desc":["【controller】 : 控制器 【TabController】","【indicatorSize】: 指示器大小 【double】","【selectedColor】: 选中色 【Color】","【color】: 颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_en-US.json new file mode 100644 index 000000000..300d872f6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_en-US.json @@ -0,0 +1 @@ +{"name":"TabPageSelectorIndicator","path":"/src/material/tabs.dart","parents":["StatelessWidget","Widget"],"desc":" Displays a single circle with the specified size, border style, border color and background colors.","fields":[{"name":"backgroundColor","type":"Color","required":true,"desc":"The indicator circle's background color."},{"name":"borderColor","type":"Color","required":true,"desc":"The indicator circle's border color."},{"name":"size","type":"double","required":true,"desc":"The indicator circle's diameter."},{"name":"borderStyle","type":"BorderStyle","required":true,"desc":"The indicator circle's border style."}],"id":206,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TabPageSelectorIndicator","desc":["【size】: size 【double】","【backgroundColor】: background color 【Color】","【borderColor】: border color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_zh-CN.json new file mode 100644 index 000000000..90761263a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_zh-CN.json @@ -0,0 +1 @@ +{"name":"TabPageSelectorIndicator","path":"/src/material/tabs.dart","parents":["StatelessWidget","Widget"],"desc":"显示具有指定大小、边框样式、边框颜色和背景颜色的单个圆圈。","fields":[{"name":"backgroundColor","type":"Color","required":true,"desc":"指示器圆圈的背景颜色。"},{"name":"borderColor","type":"Color","required":true,"desc":"指示器圆圈的边框颜色。"},{"name":"size","type":"double","required":true,"desc":"指示器圆圈的直径。"},{"name":"borderStyle","type":"BorderStyle","required":true,"desc":"指示器圆圈的边框样式。"}],"id":206,"localName":"页签指示器","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TabPageSelectorIndicator基本使用","desc":["【size】: 大小 【double】","【backgroundColor】: 背景色 【Color】","【borderColor】: 边线色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Table/Table_en-US.json b/modules/widget_system/widgets/doc/widgets/Table/Table_en-US.json new file mode 100644 index 000000000..48e1b49aa --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Table/Table_en-US.json @@ -0,0 +1 @@ +{"name":"Table","path":"/src/widgets/table.dart","parents":["RenderObjectWidget","Widget"],"desc":" A widget that uses the table layout algorithm for its children.","fields":[{"name":"children","type":"List","required":true,"desc":"The rows of the table."},{"name":"columnWidths","type":"Map?","desc":"How the horizontal extents of the columns of this table should be determined."},{"name":"defaultColumnWidth","type":"TableColumnWidth","required":true,"desc":"How to determine with widths of columns that don't have an explicit sizing algorithm."},{"name":"textDirection","type":"TextDirection?","desc":"The direction in which the columns are ordered."},{"name":"border","type":"TableBorder?","desc":"The style to use when painting the boundary and interior divisions of the table."},{"name":"defaultVerticalAlignment","type":"TableCellVerticalAlignment","required":true,"desc":"How cells that do not explicitly specify a vertical alignment are aligned vertically."},{"name":"textBaseline","type":"TextBaseline?","desc":"The text baseline to use when aligning rows using [TableCellVerticalAlignment.baseline]."}],"id":110,"lever":4,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Table","desc":["【children】: Component list 【List】","【columnWidths】: Column widths 【Map】","【defaultColumnWidth】: Default column width 【TableColumnWidth】","【border】: Border 【TableBorder】","【textDirection】: Text direction 【TextDirection】","【defaultVerticalAlignment】: Vertical alignment mode of cells 【TableCellVerticalAlignment】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Table/Table_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Table/Table_zh-CN.json new file mode 100644 index 000000000..30eecaeba --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Table/Table_zh-CN.json @@ -0,0 +1 @@ +{"name":"Table","path":"/src/widgets/table.dart","parents":["RenderObjectWidget","Widget"],"desc":"为其子项使用表格布局算法的小部件。","fields":[{"name":"children","type":"List","required":true,"desc":"表格的行。"},{"name":"columnWidths","type":"Map?","desc":"如何确定此表格列的水平范围。"},{"name":"defaultColumnWidth","type":"TableColumnWidth","required":true,"desc":"如何确定没有显式大小算法的列的宽度。"},{"name":"textDirection","type":"TextDirection?","desc":"列的排序方向。"},{"name":"border","type":"TableBorder?","desc":"绘制表格边界和内部分割时使用的样式。"},{"name":"defaultVerticalAlignment","type":"TableCellVerticalAlignment","required":true,"desc":"未明确指定垂直对齐的单元格如何垂直对齐。"},{"name":"textBaseline","type":"TextBaseline?","desc":"使用 [TableCellVerticalAlignment.baseline] 对齐行时使用的文本基线。"}],"id":110,"localName":"表格组件","lever":4,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Table基本使用","desc":["【children】 : 组件列表 【List】","【columnWidths】 : 列宽 【Map】","【defaultColumnWidth】 : 默认列宽 【TableColumnWidth】","【border】 : 边线 【TableBorder】","【textDirection】 : 文字方向 【TextDirection】","【defaultVerticalAlignment】 : 单元格竖直方向对齐模式 【TableCellVerticalAlignment】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_en-US.json b/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_en-US.json new file mode 100644 index 000000000..afdadd1c9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_en-US.json @@ -0,0 +1 @@ +{"name":"TableCell","path":"/src/widgets/table.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that controls how a child of a [Table] is aligned.","fields":[{"name":"verticalAlignment","type":"TableCellVerticalAlignment?","desc":"How this cell is aligned vertically."},{"name":"child","type":"Widget","required":true,"desc":"The child of this cell."}],"id":317,"lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TableCell","desc":["【child】: Component 【Widget】","【verticalAlignment】: Vertical Alignment 【TableCellVerticalAlignment】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_zh-CN.json new file mode 100644 index 000000000..26f3a9156 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_zh-CN.json @@ -0,0 +1 @@ +{"name":"TableCell","path":"/src/widgets/table.dart","parents":["StatelessWidget","Widget"],"desc":"控制 [Table] 的子项如何对齐的小部件。","fields":[{"name":"verticalAlignment","type":"TableCellVerticalAlignment?","desc":"此单元格如何垂直对齐。"},{"name":"child","type":"Widget","required":true,"desc":"此单元格的子项。"}],"id":317,"localName":"表室","lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TableCell基本使用","desc":["【child】 : 组件 【Widget】","【verticalAlignment】 : 竖直对齐方式 【TableCellVerticalAlignment】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_en-US.json b/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_en-US.json new file mode 100644 index 000000000..09e3f2a97 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_en-US.json @@ -0,0 +1 @@ +{"name":"TableRowInkWell","path":"/src/material/data_table.dart","parents":["InkResponse","StatelessWidget","Widget"],"desc":" A rectangular area of a Material that responds to touch but clips its ink splashes to the current table row of the nearest table.","fields":[],"id":151,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TableRowInkWell Basic Events","desc":["【child】 : Child component 【Widget】","【onTap】 : Click event 【Function()】","【onDoubleTap】 : Double-click event 【Function()】","【onLongPress】 : Long-press event 【Function()】","【onHighlightChanged】 : Highlight change callback 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_zh-CN.json new file mode 100644 index 000000000..9afb9bb7f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_zh-CN.json @@ -0,0 +1 @@ +{"name":"TableRowInkWell","path":"/src/material/data_table.dart","parents":["InkResponse","StatelessWidget","Widget"],"desc":"Material 的矩形区域,响应触摸但将其墨水飞溅裁剪到最近表格的当前表格行。","fields":[],"id":151,"localName":"表格水波纹","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TableRowInkWell基本事件","desc":["【child】 : 子组件 【Widget】","【onTap】 : 点击事件 【Function()】","【onDoubleTap】 : 双击事件 【Function()】","【onLongPress】 : 长按事件 【Function()】","【onHighlightChanged】 : 高亮变化回调 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_en-US.json b/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_en-US.json new file mode 100644 index 000000000..dfd931210 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_en-US.json @@ -0,0 +1 @@ +{"name":"TapRegion","path":"/src/widgets/tap_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that defines a region that can detect taps inside or outside of itself and any group of regions it belongs to, without participating in the [gesture disambiguation](https://flutter.dev/to/gesture-disambiguation) system (other than to consume tap down events if [consumeOutsideTaps] is true).","fields":[{"name":"enabled","type":"bool","required":true,"desc":"Whether or not this [TapRegion] is enabled as part of the composite region."},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit testing when deciding how the hit test propagates to children and whether to consider targets behind this [TapRegion]."},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"A callback to be invoked when a tap down is detected outside of this [TapRegion] and any other region with the same [groupId], if any."},{"name":"onTapInside","type":"TapRegionCallback?","desc":"A callback to be invoked when a tap down is detected inside of this [TapRegion], or any other tap region with the same [groupId], if any."},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"A callback to be invoked when a tap up is detected outside of this [TapRegion] and any other region with the same [groupId], if any."},{"name":"onTapUpInside","type":"TapRegionUpCallback?","desc":"A callback to be invoked when a tap up is detected inside of this [TapRegion], or any other tap region with the same [groupId], if any."},{"name":"groupId","type":"Object?","desc":"An optional group ID that groups [TapRegion]s together so that they operate as one region. If any member of a group is hit by a particular tap, then the [onTapOutside] / [onTapUpOutside] will not be called for any members of the group. If any member of the group is hit, then all members will have their [onTapInside] / [onTapUpInside] called."},{"name":"consumeOutsideTaps","type":"bool","required":true,"desc":"If true, then the group that this region belongs to will stop the propagation of all events in the gesture arena."},{"name":"debugLabel","type":"String?","desc":"An optional debug label to help with debugging in debug mode."}],"id":280,"lever":4,"family":2,"linkIds":[146,54],"nodes":[{"file":"node1.dart","name":"Listen to clicks inside and outside the component","desc":["【enabled】 : Whether it is available 【bool】","【onTapOutside】 : Listen to clicks outside 【TapRegionCallback?】","【onTapInside】 : Listen to clicks inside 【TapRegionCallback?】","【groupId】 : Click region group identifier 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_zh-CN.json new file mode 100644 index 000000000..7f9e74b7c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_zh-CN.json @@ -0,0 +1 @@ +{"name":"TapRegion","path":"/src/widgets/tap_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"定义一个区域的小部件,该区域可以检测其内部或外部以及它所属的任何区域组的点击,而不参与[手势消歧](https://flutter.dev/to/gesture-disambiguation)系统(除了在 [consumeOutsideTaps] 为 true 时消费点击向下事件)。","fields":[{"name":"enabled","type":"bool","required":true,"desc":"此 [TapRegion] 是否作为复合区域的一部分启用。"},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"在命中测试期间如何表现,决定命中测试如何传播到子项以及是否考虑此 [TapRegion] 后面的目标。"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"在此 [TapRegion] 和具有相同 [groupId] 的任何其他区域之外检测到点击向下时要调用的回调(如果有)。"},{"name":"onTapInside","type":"TapRegionCallback?","desc":"在此 [TapRegion] 内部或具有相同 [groupId] 的任何其他点击区域内检测到点击向下时要调用的回调(如果有)。"},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"在此 [TapRegion] 和具有相同 [groupId] 的任何其他区域之外检测到点击向上时要调用的回调(如果有)。"},{"name":"onTapUpInside","type":"TapRegionUpCallback?","desc":"在此 [TapRegion] 内部或具有相同 [groupId] 的任何其他点击区域内检测到点击向上时要调用的回调(如果有)。"},{"name":"groupId","type":"Object?","desc":"将 [TapRegion] 组合在一起以便它们作为一个区域操作的可选组 ID。如果组的任何成员被特定点击命中,则不会为组的任何成员调用 [onTapOutside] / [onTapUpOutside]。如果组的任何成员被命中,则所有成员都将调用其 [onTapInside] / [onTapUpInside]。"},{"name":"consumeOutsideTaps","type":"bool","required":true,"desc":"如果为 true,则此区域所属的组将停止手势竞技场中所有事件的传播。"},{"name":"debugLabel","type":"String?","desc":"在调试模式下帮助调试的可选调试标签。"}],"id":280,"localName":"点击范围","lever":4,"family":2,"linkIds":[146,54],"nodes":[{"file":"node1.dart","name":"监听点击组件内部和外部","desc":["【enabled】 : 是否可用 【bool】","【onTapOutside】 : 点击外界监听 【TapRegionCallback?】","【onTapInside】 : 点击内部监听 【TapRegionCallback?】","【groupId】 : 点击区域组标识 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_en-US.json b/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_en-US.json new file mode 100644 index 000000000..a8d4b9b37 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_en-US.json @@ -0,0 +1 @@ +{"name":"TapRegionSurface","path":"/src/widgets/tap_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that provides notification of a tap inside or outside of a set of registered regions, without participating in the [gesture disambiguation](https://flutter.dev/to/gesture-disambiguation) system.","fields":[],"id":538,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_zh-CN.json new file mode 100644 index 000000000..fba258821 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_zh-CN.json @@ -0,0 +1 @@ +{"name":"TapRegionSurface","path":"/src/widgets/tap_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"提供一组注册区域内部或外部点击通知的小部件,而不参与[手势消歧](https://flutter.dev/to/gesture-disambiguation)系统。","fields":[],"id":538,"localName":"TapRegionSurface","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Text/Text_en-US.json b/modules/widget_system/widgets/doc/widgets/Text/Text_en-US.json new file mode 100644 index 000000000..5f9cfd591 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Text/Text_en-US.json @@ -0,0 +1 @@ +{"name":"Text","path":"/src/widgets/text.dart","parents":["StatelessWidget","Widget"],"desc":" A run of text with a single style.","fields":[{"name":"data","type":"String?","desc":"The text to display."},{"name":"textSpan","type":"InlineSpan?","desc":"The text to display as a [InlineSpan]."},{"name":"style","type":"TextStyle?","desc":"If non-null, the style to use for this text."},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.painting.textPainter.strutStyle}"},{"name":"textAlign","type":"TextAlign?","desc":"How the text should be aligned horizontally."},{"name":"textDirection","type":"TextDirection?","desc":"The directionality of the text."},{"name":"locale","type":"Locale?","desc":"Used to select a font when the same Unicode character can be rendered differently, depending on the locale."},{"name":"softWrap","type":"bool?","desc":"Whether the text should break at soft line breaks."},{"name":"overflow","type":"TextOverflow?","desc":"How visual overflow should be handled."},{"name":"textScaleFactor","type":"double?","desc":"Deprecated. Will be removed in a future version of Flutter. Use [textScaler] instead."},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"maxLines","type":"int?","desc":"An optional maximum number of lines for the text to span, wrapping if necessary. If the text exceeds the given number of lines, it will be truncated according to [overflow]."},{"name":"semanticsLabel","type":"String?","desc":"{@template flutter.widgets.Text.semanticsLabel} An alternative semantics label for this text."},{"name":"semanticsIdentifier","type":"String?","desc":"A unique identifier for the semantics node for this widget."},{"name":"textWidthBasis","type":"TextWidthBasis?","desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"selectionColor","type":"Color?","desc":"The color to use when painting the selection."}],"id":2,"lever":5,"family":0,"linkIds":[101,324],"nodes":[{"file":"node1.dart","name":"Basic Text Styles","desc":["【Parameter】 : Text 【String】","【style】: Text Style 【TextStyle】","【color】: Text Color 【Color】","【fontSize】: Font Size 【double】","【fontWeight】: Font Weight 【FontWeight】","【fontStyle】: Font Style 【fontStyle】","【letterSpacing】: Letter Spacing 【double】"]},{"file":"node2.dart","name":"Text Shadow","desc":["【shadows】 : Text Shadows 【List】","【backgroundColor】: Background Color 【Color】"]},{"file":"node3_decoration.dart","name":"Text Decoration","desc":["【fontFamily】 : Font Family 【String】","【decoration】: Decoration Line 【TextDecoration】","【decorationColor】: Decoration Line Color 【Color】","【decorationThickness】: Decoration Line Thickness 【double】","【decorationStyle】: Decoration Line Style 【TextDecorationStyle】"]},{"file":"node4_textAlign.dart","name":"Text Alignment","desc":["【textAlign】: Alignment 【TextAlign】","The following are: left, right, center, justify, start, end."]},{"file":"node5_textDirection.dart","name":"Text Direction and Maximum Lines","desc":["【maxLines】 : Maximum Lines 【int】","【textDirection】 : Text Direction 【TextDirection】","The following are: rtl, ltr."]},{"file":"node6_softWrap.dart","name":"Wrapping and Overflow Effects","desc":["【softWrap】 : Whether to Wrap 【bool】","【overflow】 : Overflow Effect 【TextOverflow】","When softWrap=false; overflow options are: clip, fade, ellipsis, visible."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Text/Text_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Text/Text_zh-CN.json new file mode 100644 index 000000000..70f64ff59 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Text/Text_zh-CN.json @@ -0,0 +1 @@ +{"name":"Text","path":"/src/widgets/text.dart","parents":["StatelessWidget","Widget"],"desc":"具有单一样式的文本运行。","fields":[{"name":"data","type":"String?","desc":"要显示的文本。"},{"name":"textSpan","type":"InlineSpan?","desc":"要显示为 [InlineSpan] 的文本。"},{"name":"style","type":"TextStyle?","desc":"如果非空,用于此文本的样式。"},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.painting.textPainter.strutStyle}"},{"name":"textAlign","type":"TextAlign?","desc":"文本应如何水平对齐。"},{"name":"textDirection","type":"TextDirection?","desc":"文本的方向性。"},{"name":"locale","type":"Locale?","desc":"当同一个 Unicode 字符可以根据区域设置以不同方式呈现时,用于选择字体。"},{"name":"softWrap","type":"bool?","desc":"文本是否应在软换行符处换行。"},{"name":"overflow","type":"TextOverflow?","desc":"应如何处理视觉溢出。"},{"name":"textScaleFactor","type":"double?","desc":"已弃用。将在 Flutter 的未来版本中删除。请改用 [textScaler]。"},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"maxLines","type":"int?","desc":"文本跨越的可选最大行数,必要时换行。如果文本超过给定的行数,将根据 [overflow] 截断。"},{"name":"semanticsLabel","type":"String?","desc":"{@template flutter.widgets.Text.semanticsLabel} 此文本的替代语义标签。"},{"name":"semanticsIdentifier","type":"String?","desc":"此小部件语义节点的唯一标识符。"},{"name":"textWidthBasis","type":"TextWidthBasis?","desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"selectionColor","type":"Color?","desc":"绘制选择时使用的颜色。"}],"id":2,"localName":"文字组件","lever":5,"family":0,"linkIds":[101,324],"nodes":[{"file":"node1.dart","name":"文字的基本样式","desc":["【入参】 : 文字 【String】","【style】: 文字样式 【TextStyle】","【color】: 文字样式 【Color】","【fontSize】: 文字大小 【double】","【fontWeight】: 字重 【FontWeight】","【fontStyle】: 字体样式 【fontStyle】","【letterSpacing】: 字距 【double】"]},{"file":"node2.dart","name":"文字阴影","desc":["【shadows】 : 文字 【List】","【backgroundColor】: 背景颜色 【Color】"]},{"file":"node3_decoration.dart","name":"文字装饰线","desc":["【fontFamily】 : 文字字体 【String】","【decoration】: 装饰线 【TextDecoration】","【decorationColor】: 装饰线颜色 【Color】","【decorationThickness】: 装饰线粗 【double】","【decorationStyle】: 装饰线样式 【TextDecorationStyle】"]},{"file":"node4_textAlign.dart","name":"文字对齐方式","desc":["【textAlign】: 对齐方式 【TextAlign】","下面依次是:left、right、center、justify、start、end,"]},{"file":"node5_textDirection.dart","name":"文字方向与最大行数","desc":["【maxLines】 : 最大行数 【int】","【textDirection】 : 文字方向 【TextDirection】","下面依次是:rtl、ltr,"]},{"file":"node6_softWrap.dart","name":"是否包裹与越界效果","desc":["【softWrap】 : 是否换行 【bool】","【overflow】 : 越界效果 【TextOverflow】","下面softWrap=false; overflow依次是:clip、fade、ellipsis、visible,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_en-US.json b/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_en-US.json new file mode 100644 index 000000000..18a4ee1c5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_en-US.json @@ -0,0 +1 @@ +{"name":"TextButton","path":"/src/material/text_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":" A Material Design \"Text Button\".","fields":[],"id":353,"lever":3,"family":1,"linkIds":[354,355],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TextButton","desc":["【child】 : Whether it has a scrollable body 【Widget】","【onPressed】 : Click event 【VoidCallback】","【onLongPress】 : Long press event 【VoidCallback】"]},{"file":"node2_style.dart","name":"TextButton Style","desc":["【style】 : Button style 【ButtonStyle】","【focusNode】 : Focus 【FocusNode】","【clipBehavior】 : Clip behavior 【Clip】","【autofocus】 : Auto focus 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_zh-CN.json new file mode 100644 index 000000000..35652ce8b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"TextButton","path":"/src/material/text_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":"Material Design 文本按钮。","fields":[],"id":353,"localName":"文字按钮","lever":3,"family":1,"linkIds":[354,355],"nodes":[{"file":"node1_base.dart","name":"TextButton基本使用","desc":["【child】 : 是否具有滚动主体 【Widget】","【onPressed】 : 点击事件 【VoidCallback】","【onLongPress】 : 长按事件 【VoidCallback】"]},{"file":"node2_style.dart","name":"TextButton样式","desc":["【style】 : 按钮样式 【ButtonStyle】","【focusNode】 : 焦点 【FocusNode】","【clipBehavior】 : 裁剪行为 【Clip】","【autofocus】 : 自动聚焦 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_en-US.json new file mode 100644 index 000000000..f9cacb2d3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_en-US.json @@ -0,0 +1 @@ +{"name":"TextButtonTheme","path":"/src/material/text_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [TextButton] descendants.","fields":[{"name":"data","type":"TextButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":539,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_zh-CN.json new file mode 100644 index 000000000..1b8fe6708 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"TextButtonTheme","path":"/src/material/text_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [TextButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"TextButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":539,"localName":"TextButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextField/TextField_en-US.json b/modules/widget_system/widgets/doc/widgets/TextField/TextField_en-US.json new file mode 100644 index 000000000..40c92423f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextField/TextField_en-US.json @@ -0,0 +1 @@ +{"name":"TextField","path":"/src/material/text_field.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design text field.","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"The configuration for the magnifier of this text field."},{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited."},{"name":"focusNode","type":"FocusNode?","desc":"Defines the keyboard focus for this widget."},{"name":"decoration","type":"InputDecoration?","desc":"The decoration to show around the text field."},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.widgets.editableText.keyboardType}"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@template flutter.widgets.TextField.textInputAction} The type of action button to use for the keyboard."},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"style","type":"TextStyle?","desc":"The style to use for the text being edited."},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@macro flutter.material.InputDecorator.textAlignVertical}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"statesController","type":"MaterialStatesController?","desc":"Represents the interactive \"state\" of this widget in terms of a set of [WidgetState]s, including [WidgetState.disabled], [WidgetState.hovered], [WidgetState.error], and [WidgetState.focused]."},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@macro flutter.widgets.editableText.obscuringCharacter}"},{"name":"obscureText","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.obscureText}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines} * [expands], which determines whether the field should fill the height of its parent."},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines} * [expands], which determines whether the field should fill the height of its parent."},{"name":"expands","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.expands}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.readOnly}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"Configuration of toolbar options."},{"name":"showCursor","type":"bool?","desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"maxLength","type":"int?","desc":"The maximum number of characters (Unicode grapheme clusters) to allow in the text field."},{"name":"maxLengthEnforcement","type":"MaxLengthEnforcement?","desc":"Determines how the [maxLength] limit should be enforced."},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onChanged}"},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@macro flutter.widgets.editableText.onEditingComplete}"},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onSubmitted}"},{"name":"onAppPrivateCommand","type":"AppPrivateCommandCallback?","desc":"{@macro flutter.widgets.editableText.onAppPrivateCommand}"},{"name":"inputFormatters","type":"List?","desc":"{@macro flutter.widgets.editableText.inputFormatters}"},{"name":"enabled","type":"bool?","desc":"If false the text field is \"disabled\": it ignores taps and its [decoration] is rendered in grey."},{"name":"ignorePointers","type":"bool?","desc":"Determines whether this widget ignores pointer events."},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius?","desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool?","desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"The color of the cursor."},{"name":"cursorErrorColor","type":"Color?","desc":"The color of the cursor when the [InputDecorator] is showing an error."},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"Controls how tall the selection highlight boxes are computed to be."},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"Controls how wide the selection highlight boxes are computed to be."},{"name":"keyboardAppearance","type":"Brightness?","desc":"The appearance of the keyboard."},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"onTap","type":"GestureTapCallback?","desc":"{@template flutter.material.textfield.onTap} Called for the first tap in a series of taps."},{"name":"onTapAlwaysCalled","type":"bool","required":true,"desc":"Whether [onTap] should be called for every tap."},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapOutside}"},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"{@macro flutter.widgets.editableText.onTapUpOutside}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"buildCounter","type":"InputCounterWidgetBuilder?","desc":"Callback that generates a custom [InputDecoration.counter] widget."},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.editableText.scrollController}"},{"name":"autofillHints","type":"Iterable?","desc":"{@macro flutter.widgets.editableText.autofillHints} {@macro flutter.services.AutofillConfiguration.autofillHints}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"{@template flutter.material.textfield.restorationId} Restoration ID to save and restore the state of the text field."},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.scribbleEnabled}"},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.stylusHandwritingEnabled}"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@macro flutter.widgets.editableText.contentInsertionConfiguration}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"canRequestFocus","type":"bool","required":true,"desc":"Determine whether this text field can request the primary focus."},{"name":"undoController","type":"UndoHistoryController?","desc":"{@macro flutter.widgets.undoHistory.controller}"},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@macro flutter.widgets.EditableText.spellCheckConfiguration}"}],"id":54,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TextField","desc":["【controller】 : Controller 【TextEditingController】","【style】 : Text Style 【TextStyle】","【decoration】 : Decoration 【InputDecoration】","【onEditingComplete】 : Input Completion Event 【Function()】","【onSubmitted】 : Submission Event 【Function(String)】","【onChanged】 : Input Event 【Function(String)】"]},{"file":"node2_cursor.dart","name":"Line Number and Cursor of TextField","desc":["【minLines】 : Minimum Lines 【int】","【maxLines】 : Maximum Lines 【int】","【cursorRadius】 : Cursor Radius 【Radius】","【cursorColor】 : Cursor Color 【Color】","【cursorWidth】 : Cursor Width 【double】","【showCursor】 : Whether to Show Cursor 【bool】","【autofocus】 : Auto Focus 【bool】"]},{"file":"node3_decoration.dart","name":"Complex Decoration of Decoration","desc":["InputDecoration has many decoration points, corresponding to the code:","border: Border related","helper: Bottom left corner related hints","counter: Bottom right corner related hints","prefix: Innermost left side of the input box","suffix: Innermost right side of the input box","label: Text when no focus","label: Text when no focus","hint: Hint text related","border: Border related"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextField/TextField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextField/TextField_zh-CN.json new file mode 100644 index 000000000..adeb57e32 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextField/TextField_zh-CN.json @@ -0,0 +1 @@ +{"name":"TextField","path":"/src/material/text_field.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 文本字段。","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"此文本字段放大镜的配置。"},{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"controller","type":"TextEditingController?","desc":"控制正在编辑的文本。"},{"name":"focusNode","type":"FocusNode?","desc":"定义此小部件的键盘焦点。"},{"name":"decoration","type":"InputDecoration?","desc":"在文本字段周围显示的装饰。"},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.widgets.editableText.keyboardType}"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@template flutter.widgets.TextField.textInputAction} 用于键盘的操作按钮类型。"},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"style","type":"TextStyle?","desc":"用于正在编辑的文本的样式。"},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@macro flutter.material.InputDecorator.textAlignVertical}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"statesController","type":"MaterialStatesController?","desc":"表示此小部件在一组 [WidgetState] 方面的交互"},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@macro flutter.widgets.editableText.obscuringCharacter}"},{"name":"obscureText","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.obscureText}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines} * [expands],确定字段是否应填充其父项的高度。"},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines} * [expands],确定字段是否应填充其父项的高度。"},{"name":"expands","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.expands}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.readOnly}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"工具栏选项的配置。"},{"name":"showCursor","type":"bool?","desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"maxLength","type":"int?","desc":"文本字段中允许的最大字符数(Unicode 字素簇)。"},{"name":"maxLengthEnforcement","type":"MaxLengthEnforcement?","desc":"确定如何强制执行 [maxLength] 限制。"},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onChanged}"},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@macro flutter.widgets.editableText.onEditingComplete}"},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onSubmitted}"},{"name":"onAppPrivateCommand","type":"AppPrivateCommandCallback?","desc":"{@macro flutter.widgets.editableText.onAppPrivateCommand}"},{"name":"inputFormatters","type":"List?","desc":"{@macro flutter.widgets.editableText.inputFormatters}"},{"name":"enabled","type":"bool?","desc":"如果为 false,文本字段被"},{"name":"ignorePointers","type":"bool?","desc":"确定此小部件是否忽略指针事件。"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius?","desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool?","desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"光标的颜色。"},{"name":"cursorErrorColor","type":"Color?","desc":"[InputDecorator] 显示错误时光标的颜色。"},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"控制选择高亮框的计算高度。"},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"控制选择高亮框的计算宽度。"},{"name":"keyboardAppearance","type":"Brightness?","desc":"键盘的外观。"},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"onTap","type":"GestureTapCallback?","desc":"{@template flutter.material.textfield.onTap} 为一系列点击中的第一次点击调用。"},{"name":"onTapAlwaysCalled","type":"bool","required":true,"desc":"是否应为每次点击调用 [onTap]。"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapOutside}"},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"{@macro flutter.widgets.editableText.onTapUpOutside}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"buildCounter","type":"InputCounterWidgetBuilder?","desc":"生成自定义 [InputDecoration.counter] 小部件的回调。"},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.editableText.scrollController}"},{"name":"autofillHints","type":"Iterable?","desc":"{@macro flutter.widgets.editableText.autofillHints} {@macro flutter.services.AutofillConfiguration.autofillHints}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"{@template flutter.material.textfield.restorationId} 用于保存和恢复文本字段状态的恢复 ID。"},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.scribbleEnabled}"},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.stylusHandwritingEnabled}"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@macro flutter.widgets.editableText.contentInsertionConfiguration}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"canRequestFocus","type":"bool","required":true,"desc":"确定此文本字段是否可以请求主要焦点。"},{"name":"undoController","type":"UndoHistoryController?","desc":"{@macro flutter.widgets.undoHistory.controller}"},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@macro flutter.widgets.EditableText.spellCheckConfiguration}"}],"id":54,"localName":"输入框","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TextField基本用法","desc":["【controller】 : 控制器 【TextEditingController】","【style】 : 文字样式 【TextStyle】","【decoration】 : 装饰线 【InputDecoration】","【onEditingComplete】 : 输入完成事件 【Function()】","【onSubmitted】 : 提交事件 【Function(String)】","【onChanged】 : 输入事件 【Function(String)】"]},{"file":"node2_cursor.dart","name":"TextField行数和cursor","desc":["【minLines】 : 最小行数 【int】","【maxLines】 : 最大行数 【int】","【cursorRadius】 : 光标半径 【Radius】","【cursorColor】 : 光标颜色 【Color】","【cursorWidth】 : 光标宽度 【double】","【showCursor】 : 是否显示光标 【bool】","【autofocus】 : 自动聚焦 【bool】"]},{"file":"node3_decoration.dart","name":"decoration的复杂装饰","desc":["InputDecoration有非常多的装饰点,对应点缀见代码:","border: 边线相关","helper: 左下角相关提示","counter: 右下角相关提示","prefix: 输入框内部最左侧","suffix: 输入框内部最右侧","label: 无焦点时文字","label: 无焦点时文字","hint: 提示文字相关","border: 边线相关"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_en-US.json b/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_en-US.json new file mode 100644 index 000000000..4d4a3cc8c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_en-US.json @@ -0,0 +1 @@ +{"name":"TextFieldTapRegion","path":"/src/widgets/tap_region.dart","parents":["TapRegion","SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A [TapRegion] that adds its children to the tap region group for widgets based on the [EditableText] text editing widget, such as [TextField] and [CupertinoTextField].","fields":[],"id":281,"lever":3,"family":2,"linkIds":[280,54,245],"nodes":[{"file":"node1.dart","name":"Monitor Clicks Inside and Outside the Component","desc":["In the example, clicking the plus and minus signs does not cancel the focus of the input field, and the keyboard can still be used for input.","【enabled】 : Whether it is available 【bool】","【onTapOutside】 : External click listener 【TapRegionCallback?】","【onTapInside】 : Internal click listener 【TapRegionCallback?】","【groupId】 : Clickable area group identifier 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_zh-CN.json new file mode 100644 index 000000000..050575390 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_zh-CN.json @@ -0,0 +1 @@ +{"name":"TextFieldTapRegion","path":"/src/widgets/tap_region.dart","parents":["TapRegion","SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项添加到基于 [EditableText] 文本编辑小部件(如 [TextField] 和 [CupertinoTextField])的小部件的点击区域组的 [TapRegion]。","fields":[],"id":281,"localName":"输入框点击范围","lever":3,"family":2,"linkIds":[280,54,245],"nodes":[{"file":"node1.dart","name":"监听点击组件内部和外部","desc":["案例中点击加号和减号,不会取消输入框的焦点,键盘仍然可以输入。","【enabled】 : 是否可用 【bool】","【onTapOutside】 : 点击外界监听 【TapRegionCallback?】","【onTapInside】 : 点击内部监听 【TapRegionCallback?】","【groupId】 : 点击区域组标识 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_en-US.json b/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_en-US.json new file mode 100644 index 000000000..78f57b606 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_en-US.json @@ -0,0 +1 @@ +{"name":"TextFormField","path":"/src/material/text_form_field.dart","parents":["FormField","StatefulWidget","Widget"],"desc":" A [FormField] that contains a [TextField].","fields":[{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited."},{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.material.TextFormField.onChanged} Called when the user initiates a change to the TextField's value: when they have inserted or deleted text or reset the form. {@endtemplate}"}],"id":199,"lever":4,"family":1,"linkIds":[54,198],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TextFormField","desc":["The basic properties are the same as TextField, see details there","【validator】: Validation function 【FormFieldValidator】","【onFieldSubmitted】: Submission callback 【ValueChanged】","【onSaved】: Callback when the form is saved 【FormFieldSetter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_zh-CN.json new file mode 100644 index 000000000..efea97220 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_zh-CN.json @@ -0,0 +1 @@ +{"name":"TextFormField","path":"/src/material/text_form_field.dart","parents":["FormField","StatefulWidget","Widget"],"desc":"包含 [TextField] 的 [FormField]。","fields":[{"name":"controller","type":"TextEditingController?","desc":"控制正在编辑的文本。"},{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.material.TextFormField.onChanged} 当用户启动对 TextField 值的更改时调用:当他们插入或删除文本或重置表单时。{@endtemplate}"}],"id":199,"localName":"文字表单输入","lever":4,"family":1,"linkIds":[54,198],"nodes":[{"file":"node1_base.dart","name":"TextFormField基本使用","desc":["基本属性和TextField一致,详见之","【validator】 : 验证函数 【FormFieldValidator 】","【onFieldSubmitted】 : 提交回调 【ValueChanged】","【onSaved】 : 表单save时回调 【FormFieldSetter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_en-US.json b/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_en-US.json new file mode 100644 index 000000000..d4dd5e6a9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_en-US.json @@ -0,0 +1 @@ +{"name":"TextMagnifier","path":"/src/material/magnifier.dart","parents":["StatefulWidget","Widget"],"desc":" A [Magnifier] positioned by rules dictated by the native Android magnifier.","fields":[{"name":"magnifierInfo","type":"ValueNotifier","required":true,"desc":"The current status of the user's touch."}],"id":540,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_zh-CN.json new file mode 100644 index 000000000..64d79faee --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_zh-CN.json @@ -0,0 +1 @@ +{"name":"TextMagnifier","path":"/src/material/magnifier.dart","parents":["StatefulWidget","Widget"],"desc":"由原生 Android 放大镜规则决定位置的 [Magnifier]。","fields":[{"name":"magnifierInfo","type":"ValueNotifier","required":true,"desc":"用户触摸的当前状态。"}],"id":540,"localName":"TextMagnifier","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_en-US.json b/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_en-US.json new file mode 100644 index 000000000..88b923e72 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_en-US.json @@ -0,0 +1 @@ +{"name":"TextSelectionGestureDetector","path":"/src/widgets/text_selection.dart","parents":["StatefulWidget","Widget"],"desc":" A gesture detector to respond to non-exclusive event chains for a text field.","fields":[{"name":"onTapTrackStart","type":"VoidCallback?","desc":"{@template flutter.gestures.selectionrecognizers.TextSelectionGestureDetector.onTapTrackStart} Callback used to indicate that a tap tracking has started upon a [PointerDownEvent]. {@endtemplate}"},{"name":"onTapTrackReset","type":"VoidCallback?","desc":"{@template flutter.gestures.selectionrecognizers.TextSelectionGestureDetector.onTapTrackReset} Callback used to indicate that a tap tracking has been reset which happens on the next [PointerDownEvent] after the timer between two taps elapses, the recognizer loses the arena, the gesture is cancelled or the recognizer is disposed of. {@endtemplate}"},{"name":"onTapDown","type":"GestureTapDragDownCallback?","desc":"Called for every tap down including every tap down that's part of a double click or a long press, except touches that include enough movement to not qualify as taps (e.g. pans and flings)."},{"name":"onForcePressStart","type":"GestureForcePressStartCallback?","desc":"Called when a pointer has tapped down and the force of the pointer has just become greater than [ForcePressGestureRecognizer.startPressure]."},{"name":"onForcePressEnd","type":"GestureForcePressEndCallback?","desc":"Called when a pointer that had previously triggered [onForcePressStart] is lifted off the screen."},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"Called for a tap event with the secondary mouse button."},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"Called for a tap down event with the secondary mouse button."},{"name":"onSingleTapUp","type":"GestureTapDragUpCallback?","desc":"Called for the first tap in a series of taps, consecutive taps do not call this method."},{"name":"onSingleTapCancel","type":"GestureCancelCallback?","desc":"Called for each touch that becomes recognized as a gesture that is not a short tap, such as a long tap or drag. It is called at the moment when another gesture from the touch is recognized."},{"name":"onUserTap","type":"GestureTapCallback?","desc":"Called for the first tap in a series of taps when [onUserTapAlwaysCalled] is disabled, which is the default behavior."},{"name":"onSingleLongTapStart","type":"GestureLongPressStartCallback?","desc":"Called for a single long tap that's sustained for longer than [kLongPressTimeout] but not necessarily lifted. Not called for a double-tap-hold, which calls [onDoubleTapDown] instead."},{"name":"onSingleLongTapMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"Called after [onSingleLongTapStart] when the pointer is dragged."},{"name":"onSingleLongTapEnd","type":"GestureLongPressEndCallback?","desc":"Called after [onSingleLongTapStart] when the pointer is lifted."},{"name":"onDoubleTapDown","type":"GestureTapDragDownCallback?","desc":"Called after a momentary hold or a short tap that is close in space and time (within [kDoubleTapTimeout]) to a previous short tap."},{"name":"onTripleTapDown","type":"GestureTapDragDownCallback?","desc":"Called after a momentary hold or a short tap that is close in space and time (within [kDoubleTapTimeout]) to a previous double-tap."},{"name":"onDragSelectionStart","type":"GestureTapDragStartCallback?","desc":"Called when a mouse starts dragging to select text."},{"name":"onDragSelectionUpdate","type":"GestureTapDragUpdateCallback?","desc":"Called repeatedly as a mouse moves while dragging."},{"name":"onDragSelectionEnd","type":"GestureTapDragEndCallback?","desc":"Called when a mouse that was previously dragging is released."},{"name":"onUserTapAlwaysCalled","type":"bool","required":true,"desc":"Whether [onUserTap] will be called for all taps including consecutive taps."},{"name":"behavior","type":"HitTestBehavior?","desc":"How this gesture detector should behave during hit testing."},{"name":"child","type":"Widget","required":true,"desc":"Child below this widget."}],"id":541,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_zh-CN.json new file mode 100644 index 000000000..cb13dfbbf --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_zh-CN.json @@ -0,0 +1 @@ +{"name":"TextSelectionGestureDetector","path":"/src/widgets/text_selection.dart","parents":["StatefulWidget","Widget"],"desc":"响应文本字段的非独占事件链的手势检测器。","fields":[{"name":"onTapTrackStart","type":"VoidCallback?","desc":"{@template flutter.gestures.selectionrecognizers.TextSelectionGestureDetector.onTapTrackStart} 用于指示在 [PointerDownEvent] 上已开始点击跟踪的回调。{@endtemplate}"},{"name":"onTapTrackReset","type":"VoidCallback?","desc":"{@template flutter.gestures.selectionrecognizers.TextSelectionGestureDetector.onTapTrackReset} 用于指示点击跟踪已重置的回调,这发生在两次点击之间的计时器过期后的下一个 [PointerDownEvent] 上,识别器失去竞技场,手势被取消或识别器被处置。{@endtemplate}"},{"name":"onTapDown","type":"GestureTapDragDownCallback?","desc":"为每次点击向下调用,包括作为双击或长按一部分的每次点击向下,除了包含足够移动而不符合点击条件的触摸(例如平移和滑动)。"},{"name":"onForcePressStart","type":"GestureForcePressStartCallback?","desc":"当指针已点击向下且指针的力刚刚变得大于 [ForcePressGestureRecognizer.startPressure] 时调用。"},{"name":"onForcePressEnd","type":"GestureForcePressEndCallback?","desc":"当先前触发 [onForcePressStart] 的指针从屏幕上抬起时调用。"},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"使用辅助鼠标按钮的点击事件调用。"},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"使用辅助鼠标按钮的点击向下事件调用。"},{"name":"onSingleTapUp","type":"GestureTapDragUpCallback?","desc":"为一系列点击中的第一次点击调用,连续点击不调用此方法。"},{"name":"onSingleTapCancel","type":"GestureCancelCallback?","desc":"为每个被识别为非短点击手势(如长点击或拖动)的触摸调用。在触摸的另一个手势被识别的那一刻调用。"},{"name":"onUserTap","type":"GestureTapCallback?","desc":"当 [onUserTapAlwaysCalled] 被禁用时(这是默认行为),为一系列点击中的第一次点击调用。"},{"name":"onSingleLongTapStart","type":"GestureLongPressStartCallback?","desc":"为持续时间超过 [kLongPressTimeout] 但不一定抬起的单次长点击调用。不为双击保持调用,而是调用 [onDoubleTapDown]。"},{"name":"onSingleLongTapMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"在 [onSingleLongTapStart] 之后当指针被拖动时调用。"},{"name":"onSingleLongTapEnd","type":"GestureLongPressEndCallback?","desc":"在 [onSingleLongTapStart] 之后当指针抬起时调用。"},{"name":"onDoubleTapDown","type":"GestureTapDragDownCallback?","desc":"在短暂保持或在空间和时间上接近(在 [kDoubleTapTimeout] 内)先前短点击的短点击之后调用。"},{"name":"onTripleTapDown","type":"GestureTapDragDownCallback?","desc":"在短暂保持或在空间和时间上接近(在 [kDoubleTapTimeout] 内)先前双击的短点击之后调用。"},{"name":"onDragSelectionStart","type":"GestureTapDragStartCallback?","desc":"当鼠标开始拖动以选择文本时调用。"},{"name":"onDragSelectionUpdate","type":"GestureTapDragUpdateCallback?","desc":"当鼠标在拖动时移动时重复调用。"},{"name":"onDragSelectionEnd","type":"GestureTapDragEndCallback?","desc":"当先前拖动的鼠标被释放时调用。"},{"name":"onUserTapAlwaysCalled","type":"bool","required":true,"desc":"是否为所有点击(包括连续点击)调用 [onUserTap]。"},{"name":"behavior","type":"HitTestBehavior?","desc":"此手势检测器在命中测试期间应如何表现。"},{"name":"child","type":"Widget","required":true,"desc":"此小部件下方的子项。"}],"id":541,"localName":"TextSelectionGestureDetector","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_en-US.json new file mode 100644 index 000000000..fc0507e6f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_en-US.json @@ -0,0 +1 @@ +{"name":"TextSelectionTheme","path":"/src/material/text_selection_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the appearance of text selection in this widget's subtree.","fields":[{"name":"data","type":"TextSelectionThemeData","required":true,"desc":"The properties for descendant [TextField] and [SelectableText] widgets."}],"id":542,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_zh-CN.json new file mode 100644 index 000000000..0362e8687 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"TextSelectionTheme","path":"/src/material/text_selection_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"定义此小部件子树中文本选择外观的继承小部件。","fields":[{"name":"data","type":"TextSelectionThemeData","required":true,"desc":"后代 [TextField] 和 [SelectableText] 小部件的属性。"}],"id":542,"localName":"TextSelectionTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_en-US.json new file mode 100644 index 000000000..70d38ca24 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_en-US.json @@ -0,0 +1 @@ +{"name":"TextSelectionToolbar","path":"/src/material/text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" A fully-functional Material-style text selection toolbar.","fields":[{"name":"anchorAbove","type":"Offset","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.anchorAbove} The focal point above which the toolbar attempts to position itself."},{"name":"anchorBelow","type":"Offset","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.anchorBelow} The focal point below which the toolbar attempts to position itself, if it doesn't fit above [anchorAbove]. {@endtemplate}"},{"name":"children","type":"List","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.children} The children that will be displayed in the text selection toolbar."},{"name":"toolbarBuilder","type":"ToolbarBuilder","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.toolbarBuilder} Builds the toolbar container."}],"id":543,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_zh-CN.json new file mode 100644 index 000000000..2403b2071 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_zh-CN.json @@ -0,0 +1 @@ +{"name":"TextSelectionToolbar","path":"/src/material/text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"功能齐全的 Material 风格文本选择工具栏。","fields":[{"name":"anchorAbove","type":"Offset","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.anchorAbove} 工具栏尝试定位自己的上方焦点。"},{"name":"anchorBelow","type":"Offset","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.anchorBelow} 如果工具栏不适合在 [anchorAbove] 上方,则工具栏尝试定位自己的下方焦点。{@endtemplate}"},{"name":"children","type":"List","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.children} 将在文本选择工具栏中显示的子项。"},{"name":"toolbarBuilder","type":"ToolbarBuilder","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.toolbarBuilder} 构建工具栏容器。"}],"id":543,"localName":"TextSelectionToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_en-US.json b/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_en-US.json new file mode 100644 index 000000000..9f907d4f1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_en-US.json @@ -0,0 +1 @@ +{"name":"TextSelectionToolbarTextButton","path":"/src/material/text_selection_toolbar_text_button.dart","parents":["StatelessWidget","Widget"],"desc":" A button styled like a Material native Android text selection menu button.","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@template flutter.material.TextSelectionToolbarTextButton.child} The child of this button."},{"name":"onPressed","type":"VoidCallback?","desc":"{@template flutter.material.TextSelectionToolbarTextButton.onPressed} Called when this button is pressed. {@endtemplate}"},{"name":"padding","type":"EdgeInsets","required":true,"desc":"The padding between the button's edge and its child."},{"name":"alignment","type":"AlignmentGeometry?","desc":"The alignment of the button's child."}],"id":544,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_zh-CN.json new file mode 100644 index 000000000..ab63d380d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_zh-CN.json @@ -0,0 +1 @@ +{"name":"TextSelectionToolbarTextButton","path":"/src/material/text_selection_toolbar_text_button.dart","parents":["StatelessWidget","Widget"],"desc":"样式类似 Material 原生 Android 文本选择菜单按钮的按钮。","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@template flutter.material.TextSelectionToolbarTextButton.child} 此按钮的子项。"},{"name":"onPressed","type":"VoidCallback?","desc":"{@template flutter.material.TextSelectionToolbarTextButton.onPressed} 按下此按钮时调用。{@endtemplate}"},{"name":"padding","type":"EdgeInsets","required":true,"desc":"按钮边缘与其子项之间的内边距。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"按钮子项的对齐。"}],"id":544,"localName":"TextSelectionToolbarTextButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Texture/Texture_en-US.json b/modules/widget_system/widgets/doc/widgets/Texture/Texture_en-US.json new file mode 100644 index 000000000..7724b90de --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Texture/Texture_en-US.json @@ -0,0 +1 @@ +{"name":"Texture","path":"/src/widgets/texture.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A rectangle upon which a backend texture is mapped.","fields":[{"name":"textureId","type":"int","required":true,"desc":"The identity of the backend texture."},{"name":"freeze","type":"bool","required":true,"desc":"When true the texture will not be updated with new frames."},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"{@template flutter.widgets.Texture.filterQuality} The quality of sampling the texture and rendering it on screen."}],"id":545,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Texture/Texture_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Texture/Texture_zh-CN.json new file mode 100644 index 000000000..9e722ae89 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Texture/Texture_zh-CN.json @@ -0,0 +1 @@ +{"name":"Texture","path":"/src/widgets/texture.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"映射后端纹理的矩形。","fields":[{"name":"textureId","type":"int","required":true,"desc":"后端纹理的标识。"},{"name":"freeze","type":"bool","required":true,"desc":"为 true 时,纹理不会用新帧更新。"},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"{@template flutter.widgets.Texture.filterQuality} 采样纹理并在屏幕上渲染的质量。"}],"id":545,"localName":"Texture","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Theme/Theme_en-US.json b/modules/widget_system/widgets/doc/widgets/Theme/Theme_en-US.json new file mode 100644 index 000000000..0e52979bf --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Theme/Theme_en-US.json @@ -0,0 +1 @@ +{"name":"Theme","path":"/src/material/theme.dart","parents":["StatelessWidget","Widget"],"desc":" Applies a theme to descendant widgets.","fields":[{"name":"data","type":"ThemeData","required":true,"desc":"Specifies the color and typography values for descendant widgets."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":168,"lever":4,"family":0,"linkIds":[65,169,224],"nodes":[{"file":"node1_base.dart","name":"Text Style-ThemeData#TextTheme","desc":["Child components can use the theme data obtained through ThemeData.of."]},{"file":"node2_use.dart","name":"Usage of Theme","desc":["Using Theme, you can specify a wide range of properties as themes, which will be applied to all descendant components, such as specifying properties for fonts, sliders, cards, text, dividers, buttons, etc."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Theme/Theme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Theme/Theme_zh-CN.json new file mode 100644 index 000000000..929ef09e4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Theme/Theme_zh-CN.json @@ -0,0 +1 @@ +{"name":"Theme","path":"/src/material/theme.dart","parents":["StatelessWidget","Widget"],"desc":"将主题应用于后代小部件。","fields":[{"name":"data","type":"ThemeData","required":true,"desc":"指定后代小部件的颜色和排版值。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":168,"localName":"主题","lever":4,"family":0,"linkIds":[65,169,224],"nodes":[{"file":"node1_base.dart","name":"文字样式-ThemeData#TextTheme","desc":["子组件可以通过ThemeData.of获取主题的数据进行使用。"]},{"file":"node2_use.dart","name":"Theme的用法","desc":["使用Theme,可以指定非常多的属性作为主题,这些属性将应用于所有的后代组件,如指定字体、滑块、卡片、文字、分割线、按钮等属性。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_en-US.json b/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_en-US.json new file mode 100644 index 000000000..41888ddb0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_en-US.json @@ -0,0 +1 @@ +{"name":"TickerMode","path":"/src/widgets/ticker_provider.dart","parents":["StatefulWidget","Widget"],"desc":" Enables or disables tickers (and thus animation controllers) in the widget subtree.","fields":[{"name":"enabled","type":"bool","required":true,"desc":"The requested ticker mode for this subtree."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":246,"lever":2,"family":1,"linkIds":[346],"nodes":[{"file":"node1.dart","name":"Unified Enable/Disable Animation","desc":["The enabled property of TickerMode can uniformly enable/disable the animation effects of the subtree."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_zh-CN.json new file mode 100644 index 000000000..f9053a4f7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_zh-CN.json @@ -0,0 +1 @@ +{"name":"TickerMode","path":"/src/widgets/ticker_provider.dart","parents":["StatefulWidget","Widget"],"desc":"在小部件子树中启用或禁用计时器(以及动画控制器)。","fields":[{"name":"enabled","type":"bool","required":true,"desc":"此子树请求的计时器模式。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":246,"localName":"计时器模式","lever":2,"family":1,"linkIds":[346],"nodes":[{"file":"node1.dart","name":"统一禁用/启用动画","desc":["TickerMode 的 enabled 可以统一启用/禁用子树的动画效果。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_en-US.json new file mode 100644 index 000000000..bbdc4fc38 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_en-US.json @@ -0,0 +1 @@ +{"name":"TimePickerDialog","path":"/src/material/time_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design time picker designed to appear inside a popup dialog.","fields":[{"name":"initialTime","type":"TimeOfDay","required":true,"desc":"The time initially selected when the dialog is shown."},{"name":"cancelText","type":"String?","desc":"Optionally provide your own text for the cancel button."},{"name":"confirmText","type":"String?","desc":"Optionally provide your own text for the confirm button."},{"name":"helpText","type":"String?","desc":"Optionally provide your own help text to the header of the time picker."},{"name":"errorInvalidText","type":"String?","desc":"Optionally provide your own validation error text."},{"name":"hourLabelText","type":"String?","desc":"Optionally provide your own hour label text."},{"name":"minuteLabelText","type":"String?","desc":"Optionally provide your own minute label text."},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the [TimePickerDialog]."},{"name":"initialEntryMode","type":"TimePickerEntryMode","required":true,"desc":"The entry mode for the picker. Whether it's text input or a dial."},{"name":"orientation","type":"Orientation?","desc":"The optional [orientation] parameter sets the [Orientation] to use when displaying the dialog."},{"name":"onEntryModeChanged","type":"EntryModeChangeCallback?","desc":"Callback called when the selected entry mode is changed."},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.time_picker.switchToInputEntryModeIcon}"},{"name":"switchToTimerEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.time_picker.switchToTimerEntryModeIcon}"}],"id":546,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_zh-CN.json new file mode 100644 index 000000000..a5cabdf2b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_zh-CN.json @@ -0,0 +1 @@ +{"name":"TimePickerDialog","path":"/src/material/time_picker.dart","parents":["StatefulWidget","Widget"],"desc":"设计为出现在弹出对话框内的 Material Design 时间选择器。","fields":[{"name":"initialTime","type":"TimeOfDay","required":true,"desc":"显示对话框时最初选择的时间。"},{"name":"cancelText","type":"String?","desc":"可选择为取消按钮提供您自己的文本。"},{"name":"confirmText","type":"String?","desc":"可选择为确认按钮提供您自己的文本。"},{"name":"helpText","type":"String?","desc":"可选择为时间选择器标题提供您自己的帮助文本。"},{"name":"errorInvalidText","type":"String?","desc":"可选择提供您自己的验证错误文本。"},{"name":"hourLabelText","type":"String?","desc":"可选择提供您自己的小时标签文本。"},{"name":"minuteLabelText","type":"String?","desc":"可选择提供您自己的分钟标签文本。"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [TimePickerDialog] 状态的恢复 ID。"},{"name":"initialEntryMode","type":"TimePickerEntryMode","required":true,"desc":"选择器的输入模式。是文本输入还是表盘。"},{"name":"orientation","type":"Orientation?","desc":"可选的 [orientation] 参数设置显示对话框时使用的 [Orientation]。"},{"name":"onEntryModeChanged","type":"EntryModeChangeCallback?","desc":"选定的输入模式更改时调用的回调。"},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.time_picker.switchToInputEntryModeIcon}"},{"name":"switchToTimerEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.time_picker.switchToTimerEntryModeIcon}"}],"id":546,"localName":"TimePickerDialog","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_en-US.json new file mode 100644 index 000000000..974123189 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_en-US.json @@ -0,0 +1 @@ +{"name":"TimePickerTheme","path":"/src/material/time_picker_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for time pickers displayed using [showTimePicker] in this widget's subtree.","fields":[{"name":"data","type":"TimePickerThemeData","required":true,"desc":"The properties for descendant time picker widgets."}],"id":547,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_zh-CN.json new file mode 100644 index 000000000..1a4d7996f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"TimePickerTheme","path":"/src/material/time_picker_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中使用 [showTimePicker] 显示的时间选择器定义配置的继承小部件。","fields":[{"name":"data","type":"TimePickerThemeData","required":true,"desc":"后代时间选择器小部件的属性。"}],"id":547,"localName":"TimePickerTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Title/Title_en-US.json b/modules/widget_system/widgets/doc/widgets/Title/Title_en-US.json new file mode 100644 index 000000000..66b0b0894 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Title/Title_en-US.json @@ -0,0 +1 @@ +{"name":"Title","path":"/src/widgets/title.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that describes this app in the operating system.","fields":[{"name":"title","type":"String","required":true,"desc":"A one-line description of this app for use in the window manager."},{"name":"color","type":"Color","required":true,"desc":"A color that the window manager should use to identify this app. Must be an opaque color (i.e. color.alpha must be 255 (0xFF)), and must not be null."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":208,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Title","desc":["【title】: Name 【int】","【color】: Color 【Color】","【child】: Child Component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Title/Title_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Title/Title_zh-CN.json new file mode 100644 index 000000000..17302f6c5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Title/Title_zh-CN.json @@ -0,0 +1 @@ +{"name":"Title","path":"/src/widgets/title.dart","parents":["StatelessWidget","Widget"],"desc":"在操作系统中描述此应用程序的小部件。","fields":[{"name":"title","type":"String","required":true,"desc":"在窗口管理器中使用的此应用程序的单行描述。"},{"name":"color","type":"Color","required":true,"desc":"窗口管理器应用于识别此应用程序的颜色。必须是不透明颜色(即 color.alpha 必须为 255 (0xFF)),且不能为 null。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":208,"localName":"应用标题","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Title基本使用","desc":["【title】 : 名称 【int】","【color】: 颜色 【Color】","【child】: 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_en-US.json b/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_en-US.json new file mode 100644 index 000000000..8de947d6f --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_en-US.json @@ -0,0 +1 @@ +{"name":"ToggleButtons","path":"/src/material/toggle_buttons.dart","parents":["StatelessWidget","Widget"],"desc":" A set of toggle buttons.","fields":[{"name":"children","type":"List","required":true,"desc":"The toggle button widgets."},{"name":"isSelected","type":"List","required":true,"desc":"The corresponding selection state of each toggle button."},{"name":"onPressed","type":"void Function(int index)?","desc":"The callback that is called when a button is tapped."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"tapTargetSize","type":"MaterialTapTargetSize?","desc":"Configures the minimum size of the area within which the buttons may be pressed."},{"name":"textStyle","type":"TextStyle?","desc":"The [TextStyle] to apply to any text in these toggle buttons."},{"name":"constraints","type":"BoxConstraints?","desc":"Defines the button's size."},{"name":"color","type":"Color?","desc":"The color for descendant [Text] and [Icon] widgets if the button is enabled and not selected."},{"name":"selectedColor","type":"Color?","desc":"The color for descendant [Text] and [Icon] widgets if the button is selected."},{"name":"disabledColor","type":"Color?","desc":"The color for descendant [Text] and [Icon] widgets if the button is disabled."},{"name":"fillColor","type":"Color?","desc":"The fill color for selected toggle buttons."},{"name":"focusColor","type":"Color?","desc":"The color to use for filling the button when the button has input focus."},{"name":"highlightColor","type":"Color?","desc":"The highlight color for the button's [InkWell]."},{"name":"splashColor","type":"Color?","desc":"The splash color for the button's [InkWell]."},{"name":"hoverColor","type":"Color?","desc":"The color to use for filling the button when the button has a pointer hovering over it."},{"name":"focusNodes","type":"List?","desc":"The list of [FocusNode]s, corresponding to each toggle button."},{"name":"renderBorder","type":"bool","required":true,"desc":"Whether or not to render a border around each toggle button."},{"name":"borderColor","type":"Color?","desc":"The border color to display when the toggle button is enabled and not selected."},{"name":"selectedBorderColor","type":"Color?","desc":"The border color to display when the toggle button is selected."},{"name":"disabledBorderColor","type":"Color?","desc":"The border color to display when the toggle button is disabled."},{"name":"borderWidth","type":"double?","desc":"The width of the border surrounding each toggle button."},{"name":"borderRadius","type":"BorderRadius?","desc":"The radii of the border's corners."},{"name":"direction","type":"Axis","required":true,"desc":"The direction along which the buttons are rendered."},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"If [direction] is [Axis.vertical], this parameter determines whether to lay out the buttons starting from the first or last child from top to bottom."}],"id":33,"lever":4,"family":0,"linkIds":[332,262],"nodes":[{"file":"node1_single.dart","name":"ToggleButtons Single Selection","desc":["【children】: Children components 【List】","【borderWidth】: Border width 【double】","【borderRadius】: Rounded corners 【BorderRadius】","【isSelected】: Selection status set 【List】","【onPressed】: Click event 【Function(int)】"]},{"file":"node2_color.dart","name":"ToggleButtons Color Properties","desc":["【borderColor】: Border color 【Color】","【selectedBorderColor】: Selected border color 【Color】","【selectedColor】: Component color when selected 【Color】","【fillColor】: Fill color when selected 【Color】","【splashColor】: Ripple color 【Color】"]},{"file":"node3_multi.dart","name":"ToggleButtons Multiple Selection","desc":["The logic of state transformation can be controlled to create different effects."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_zh-CN.json new file mode 100644 index 000000000..764b7038b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_zh-CN.json @@ -0,0 +1 @@ +{"name":"ToggleButtons","path":"/src/material/toggle_buttons.dart","parents":["StatelessWidget","Widget"],"desc":"一组切换按钮。","fields":[{"name":"children","type":"List","required":true,"desc":"切换按钮小部件。"},{"name":"isSelected","type":"List","required":true,"desc":"每个切换按钮对应的选择状态。"},{"name":"onPressed","type":"void Function(int index)?","desc":"点击按钮时调用的回调。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"tapTargetSize","type":"MaterialTapTargetSize?","desc":"配置可以按下按钮的区域的最小大小。"},{"name":"textStyle","type":"TextStyle?","desc":"应用于这些切换按钮中任何文本的 [TextStyle]。"},{"name":"constraints","type":"BoxConstraints?","desc":"定义按钮的大小。"},{"name":"color","type":"Color?","desc":"如果按钮已启用且未选中,后代 [Text] 和 [Icon] 小部件的颜色。"},{"name":"selectedColor","type":"Color?","desc":"如果按钮被选中,后代 [Text] 和 [Icon] 小部件的颜色。"},{"name":"disabledColor","type":"Color?","desc":"如果按钮被禁用,后代 [Text] 和 [Icon] 小部件的颜色。"},{"name":"fillColor","type":"Color?","desc":"选中的切换按钮的填充颜色。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时用于填充按钮的颜色。"},{"name":"highlightColor","type":"Color?","desc":"按钮的 [InkWell] 的高亮颜色。"},{"name":"splashColor","type":"Color?","desc":"按钮的 [InkWell] 的飞溅颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在按钮上时用于填充按钮的颜色。"},{"name":"focusNodes","type":"List?","desc":"对应于每个切换按钮的 [FocusNode] 列表。"},{"name":"renderBorder","type":"bool","required":true,"desc":"是否在每个切换按钮周围渲染边框。"},{"name":"borderColor","type":"Color?","desc":"切换按钮启用且未选中时显示的边框颜色。"},{"name":"selectedBorderColor","type":"Color?","desc":"切换按钮被选中时显示的边框颜色。"},{"name":"disabledBorderColor","type":"Color?","desc":"切换按钮被禁用时显示的边框颜色。"},{"name":"borderWidth","type":"double?","desc":"围绕每个切换按钮的边框宽度。"},{"name":"borderRadius","type":"BorderRadius?","desc":"边框角的半径。"},{"name":"direction","type":"Axis","required":true,"desc":"按钮渲染的方向。"},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"如果 [direction] 是 [Axis.vertical],此参数确定是否从上到下从第一个或最后一个子项开始布局按钮。"}],"id":33,"localName":"切换按钮组","lever":4,"family":0,"linkIds":[332,262],"nodes":[{"file":"node1_single.dart","name":"ToggleButtons单选切换","desc":["【children】: 子组件集 【List】","【borderWidth】: 边线宽 【double】","【borderRadius】: 圆角 【BorderRadius】","【isSelected】: 是否选中集 【List】","【onPressed】: 点击事件 【Function(int)】"]},{"file":"node2_color.dart","name":"ToggleButtons颜色属性","desc":["【borderColor】: 边线色 【Color】","【selectedBorderColor】: 选中边线色 【Color】","【selectedColor】: 选中时组件色 【Color】","【fillColor】: 选中时填充色 【Color】","【splashColor】: 水波纹色 【Color】"]},{"file":"node3_multi.dart","name":"ToggleButtons多选切换","desc":["可以控制状态转化的逻辑来形成不同的效果。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_en-US.json new file mode 100644 index 000000000..eb3e02ef7 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_en-US.json @@ -0,0 +1 @@ +{"name":"ToggleButtonsTheme","path":"/src/material/toggle_buttons_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines color and border parameters for [ToggleButtons] in this widget's subtree.","fields":[{"name":"data","type":"ToggleButtonsThemeData","required":true,"desc":"Specifies the color and border values for descendant [ToggleButtons] widgets."}],"id":332,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ToggleButtonsTheme","desc":["You can specify the ToggleButtonsThemeData properties to set default styles for descendant ToggleButtons components, such as border style, color, decoration, etc. You can also use ToggleButtonsTheme.of to get the theme data of ToggleButtons."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_zh-CN.json new file mode 100644 index 000000000..d5976dadf --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"ToggleButtonsTheme","path":"/src/material/toggle_buttons_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [ToggleButtons] 定义颜色和边框参数的继承小部件。","fields":[{"name":"data","type":"ToggleButtonsThemeData","required":true,"desc":"指定后代 [ToggleButtons] 小部件的颜色和边框值。"}],"id":332,"localName":"滑块样式","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ToggleButtonsTheme基本使用","desc":["可指定ToggleButtonsThemeData数据属性为【后代】的ToggleButtons组件设置默认样式,如边框样式、颜色、装饰等。也可以用ToggleButtonsTheme.of获取ToggleButtons的主题数据。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_en-US.json b/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_en-US.json new file mode 100644 index 000000000..2bd75a943 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_en-US.json @@ -0,0 +1 @@ +{"name":"Tooltip","path":"/src/material/tooltip.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design tooltip.","fields":[{"name":"message","type":"String?","desc":"The text to display in the tooltip."},{"name":"richMessage","type":"InlineSpan?","desc":"The rich text to display in the tooltip."},{"name":"height","type":"double?","desc":"The minimum height of the [Tooltip]'s message."},{"name":"constraints","type":"BoxConstraints?","desc":"Constrains the size of the [Tooltip]'s message."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the [Tooltip]'s message."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"The empty space that surrounds the tooltip."},{"name":"verticalOffset","type":"double?","desc":"The vertical gap between the widget and the displayed tooltip."},{"name":"preferBelow","type":"bool?","desc":"Whether the tooltip defaults to being displayed below the widget."},{"name":"excludeFromSemantics","type":"bool?","desc":"Whether the tooltip's [message] or [richMessage] should be excluded from the semantics tree."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"decoration","type":"Decoration?","desc":"Specifies the tooltip's shape and background color."},{"name":"textStyle","type":"TextStyle?","desc":"The style to use for the message of the tooltip."},{"name":"textAlign","type":"TextAlign?","desc":"How the message of the tooltip is aligned horizontally."},{"name":"waitDuration","type":"Duration?","desc":"The length of time that a pointer must hover over a tooltip's widget before the tooltip will be shown."},{"name":"showDuration","type":"Duration?","desc":"The length of time that the tooltip will be shown after a long press is released (if triggerMode is [TooltipTriggerMode.longPress]) or a tap is released (if triggerMode is [TooltipTriggerMode.tap]). This property does not affect mouse pointer devices."},{"name":"exitDuration","type":"Duration?","desc":"The length of time that a pointer must have stopped hovering over a tooltip's widget before the tooltip will be hidden."},{"name":"enableTapToDismiss","type":"bool","required":true,"desc":"Whether the tooltip can be dismissed by tap."},{"name":"triggerMode","type":"TooltipTriggerMode?","desc":"The [TooltipTriggerMode] that will show the tooltip."},{"name":"enableFeedback","type":"bool?","desc":"Whether the tooltip should provide acoustic and/or haptic feedback."},{"name":"onTriggered","type":"TooltipTriggeredCallback?","desc":"Called when the Tooltip is triggered."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"ignorePointer","type":"bool?","desc":"Whether this tooltip should be invisible to hit testing."}],"id":50,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Tooltip","desc":["【preferBelow】: Whether to prefer below 【bool】","【padding】: Padding 【EdgeInsetsGeometry】","【margin】: Margin 【EdgeInsetsGeometry】","【message】: Message content 【String】","【showDuration】: Display duration 【Duration】","【waitDuration】: Hover appearance time 【Duration】","【child】: Child 【Widget】"]},{"file":"node2_decoration.dart","name":"Decoration of Tooltip","desc":["【decoration】: Decoration object 【Decoration】","【textStyle】: Text style 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_zh-CN.json new file mode 100644 index 000000000..2eaf45bb6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_zh-CN.json @@ -0,0 +1 @@ +{"name":"Tooltip","path":"/src/material/tooltip.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 工具提示。","fields":[{"name":"message","type":"String?","desc":"在工具提示中显示的文本。"},{"name":"richMessage","type":"InlineSpan?","desc":"在工具提示中显示的富文本。"},{"name":"height","type":"double?","desc":"[Tooltip] 消息的最小高度。"},{"name":"constraints","type":"BoxConstraints?","desc":"约束 [Tooltip] 消息的大小。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"插入 [Tooltip] 消息的空间量。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕工具提示的空白空间。"},{"name":"verticalOffset","type":"double?","desc":"小部件与显示的工具提示之间的垂直间隙。"},{"name":"preferBelow","type":"bool?","desc":"工具提示是否默认显示在小部件下方。"},{"name":"excludeFromSemantics","type":"bool?","desc":"工具提示的 [message] 或 [richMessage] 是否应从语义树中排除。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"decoration","type":"Decoration?","desc":"指定工具提示的形状和背景颜色。"},{"name":"textStyle","type":"TextStyle?","desc":"用于工具提示消息的样式。"},{"name":"textAlign","type":"TextAlign?","desc":"工具提示消息如何水平对齐。"},{"name":"waitDuration","type":"Duration?","desc":"指针必须悬停在工具提示小部件上多长时间才会显示工具提示。"},{"name":"showDuration","type":"Duration?","desc":"长按释放后(如果 triggerMode 是 [TooltipTriggerMode.longPress])或点击释放后(如果 triggerMode 是 [TooltipTriggerMode.tap])工具提示将显示的时间长度。此属性不影响鼠标指针设备。"},{"name":"exitDuration","type":"Duration?","desc":"指针必须停止悬停在工具提示小部件上多长时间才会隐藏工具提示。"},{"name":"enableTapToDismiss","type":"bool","required":true,"desc":"工具提示是否可以通过点击关闭。"},{"name":"triggerMode","type":"TooltipTriggerMode?","desc":"将显示工具提示的 [TooltipTriggerMode]。"},{"name":"enableFeedback","type":"bool?","desc":"工具提示是否应提供声音和/或触觉反馈。"},{"name":"onTriggered","type":"TooltipTriggeredCallback?","desc":"触发工具提示时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"ignorePointer","type":"bool?","desc":"此工具提示是否应对命中测试不可见。"}],"id":50,"localName":"提示工具","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Tooltip基本使用","desc":["【preferBelow】 : 是否首选下方 【bool】","【padding】 : 内边距 【EdgeInsetsGeometry】","【margin】 : 外边距 【EdgeInsetsGeometry】","【message】 : 消息内容 【String】","【showDuration】 : 展示时间 【Duration】","【waitDuration】 : 悬浮出现时间 【Duration】","【child】 : 孩子 【Widget】"]},{"file":"node2_decoration.dart","name":"Tooltip的装饰","desc":["【decoration】 : 装饰对象 【Decoration】","【textStyle】 : 文字样式 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_en-US.json new file mode 100644 index 000000000..1b569170e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_en-US.json @@ -0,0 +1 @@ +{"name":"TooltipTheme","path":"/src/material/tooltip_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a tooltip theme to descendant [Tooltip] widgets.","fields":[{"name":"data","type":"TooltipThemeData","required":true,"desc":"The properties for descendant [Tooltip] widgets."}],"id":333,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TooltipTheme","desc":["You can specify the TooltipThemeData properties to set default styles for descendant Tooltip components, such as decoration, text style, display duration, margins, etc. You can also use TooltipTheme.of to get the theme properties of Tooltip."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_zh-CN.json new file mode 100644 index 000000000..db7a17a64 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_zh-CN.json @@ -0,0 +1 @@ +{"name":"TooltipTheme","path":"/src/material/tooltip_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"将工具提示主题应用于后代 [Tooltip] 小部件。","fields":[{"name":"data","type":"TooltipThemeData","required":true,"desc":"后代 [Tooltip] 小部件的属性。"}],"id":333,"localName":"提示主题","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TooltipTheme基本使用","desc":["可指定TooltipThemeData数据属性为【后代】的Tooltip组件设置默认样式,如装饰、文字样式、显示时长、边距等。也可以用TooltipTheme.of获取Tooltip的主题属性。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_en-US.json b/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_en-US.json new file mode 100644 index 000000000..8a94ff5b4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_en-US.json @@ -0,0 +1 @@ +{"name":"TooltipVisibility","path":"/src/material/tooltip_visibility.dart","parents":["StatelessWidget","Widget"],"desc":" Overrides the visibility of descendant [Tooltip] widgets.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"visible","type":"bool","required":true,"desc":"Determines the visibility of [Tooltip] widgets that inherit from this widget."}],"id":548,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_zh-CN.json new file mode 100644 index 000000000..c3bcb6db5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_zh-CN.json @@ -0,0 +1 @@ +{"name":"TooltipVisibility","path":"/src/material/tooltip_visibility.dart","parents":["StatelessWidget","Widget"],"desc":"覆盖后代 [Tooltip] 小部件的可见性。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"visible","type":"bool","required":true,"desc":"确定从此小部件继承的 [Tooltip] 小部件的可见性。"}],"id":548,"localName":"TooltipVisibility","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Transform/Transform_en-US.json b/modules/widget_system/widgets/doc/widgets/Transform/Transform_en-US.json new file mode 100644 index 000000000..a5d1fd8f4 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Transform/Transform_en-US.json @@ -0,0 +1 @@ +{"name":"Transform","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that applies a transformation before painting its child.","fields":[{"name":"transform","type":"Matrix4","required":true,"desc":"The matrix to transform the child by during painting."},{"name":"origin","type":"Offset?","desc":"The origin of the coordinate system (relative to the upper left corner of this render object) in which to apply the matrix."},{"name":"alignment","type":"AlignmentGeometry?","desc":"The alignment of the origin, relative to the size of the box."},{"name":"transformHitTests","type":"bool","required":true,"desc":"Whether to apply the transformation when performing hit tests."},{"name":"filterQuality","type":"FilterQuality?","desc":"The filter quality with which to apply the transform as a bitmap operation."}],"id":78,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_skew.dart","name":"Skew Transform skew","desc":["Skew x is controlled by the R0C1 number, the input is in radians, representing the skew angle","Skew y is controlled by the R1C0 number, the input is in radians, representing the skew angle"]},{"file":"node2_translation.dart","name":"Translation Transform translationValues","desc":["Translation x is controlled by the R0C3 number, the input is a value, representing the translation length","Translation y is controlled by the R1C3 number, the input is a value, representing the translation length","Translation z is controlled by the R2C3 number, the input is a value, representing the translation length"]},{"file":"node3_scale.dart","name":"Scale Transform diagonal3Values","desc":["Scale x is controlled by the R0C0 number, the input is a value, representing the scaling factor","Scale y is controlled by the R1C2 number, the input is a value, representing the scaling factor","Scale z is controlled by the R2C2 number, the input is a value, representing the scaling factor"]},{"file":"node4_rotate.dart","name":"Rotation Transform rotation","desc":["x rotation is controlled by R1C1, R1C2, R2C1, R2C2, the input represents radians","y rotation is controlled by R0C0, R0C2, R2C0, R2C2, the input represents radians","z rotation is controlled by R0C0, R0C1, R1C0, R1C1"]},{"file":"node5_perspective.dart","name":"Perspective Transform rotation","desc":["Perspective is controlled by R3C1, R3C2, R3C3"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Transform/Transform_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Transform/Transform_zh-CN.json new file mode 100644 index 000000000..eeab1fac2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Transform/Transform_zh-CN.json @@ -0,0 +1 @@ +{"name":"Transform","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在绘制其子项之前应用变换的小部件。","fields":[{"name":"transform","type":"Matrix4","required":true,"desc":"绘制期间变换子项的矩阵。"},{"name":"origin","type":"Offset?","desc":"应用矩阵的坐标系原点(相对于此渲染对象的左上角)。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"原点的对齐,相对于框的大小。"},{"name":"transformHitTests","type":"bool","required":true,"desc":"执行命中测试时是否应用变换。"},{"name":"filterQuality","type":"FilterQuality?","desc":"将变换作为位图操作应用时的过滤质量。"}],"id":78,"localName":"变换","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_skew.dart","name":"斜切变换skew","desc":["斜切x由R0C1数控制,入参为弧度值,表示斜切角度","斜切y由R1C0数控制,入参为弧度值,表示斜切角度"]},{"file":"node2_translation.dart","name":"平移变换translationValues","desc":["平移x由R0C3数控制,入参为数值,表示平移长度","平移y由R1C3数控制,入参为数值,表示平移长度","平移z由R2C3数控制,入参为数值,表示平移长度"]},{"file":"node3_scale.dart","name":"缩放变换diagonal3Values","desc":["缩放x由R0C0数控制,入参为数值,表示缩放分率","缩放y由R1C2数控制,入参为数值,表示缩放分率","缩放z由R2C2数控制,入参为数值,表示缩放分率"]},{"file":"node4_rotate.dart","name":"旋转变换rotation","desc":["x旋转由R1C1、R1C2、R2C1、R2C2控制,入参表示弧度","y旋转由R0C0、R0C2、R2C0、R2C2控制,入参表示弧度","z旋转由R0C0、R0C1、R1C0、R1C1控制,"]},{"file":"node5_perspective.dart","name":"透视变换rotation","desc":["由R3C1、R3C2、R3C3控制透视"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_en-US.json b/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_en-US.json new file mode 100644 index 000000000..c147fb993 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_en-US.json @@ -0,0 +1 @@ +{"name":"TreeSliver","path":"/src/widgets/sliver_tree.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that displays [TreeSliverNode]s that expand and collapse in a vertically and horizontally scrolling [Viewport].","fields":[{"name":"tree","type":"List>","required":true,"desc":"The list of [TreeSliverNode]s that may be displayed in the [TreeSliver]."},{"name":"treeNodeBuilder","type":"TreeSliverNodeBuilder","required":true,"desc":"Called to build and entry of the [TreeSliver] for the given node."},{"name":"treeRowExtentBuilder","type":"TreeSliverRowExtentBuilder","required":true,"desc":"Called to calculate the extent of the widget built for the given [TreeSliverNode]."},{"name":"controller","type":"TreeSliverController?","desc":"If provided, the controller can be used to expand and collapse [TreeSliverNode]s, or lookup information about the current state of the [TreeSliver]."},{"name":"onNodeToggle","type":"TreeSliverNodeCallback?","desc":"Called when a [TreeSliverNode] expands or collapses."},{"name":"toggleAnimationStyle","type":"AnimationStyle?","desc":"The default [AnimationStyle] for expanding and collapsing nodes in the [TreeSliver]."},{"name":"indentation","type":"TreeSliverIndentationType","required":true,"desc":"The number of pixels children will be offset by in the cross axis based on their [TreeSliverNode.depth]."},{"name":"addAutomaticKeepAlives","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addAutomaticKeepAlives}"},{"name":"addRepaintBoundaries","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addRepaintBoundaries}"},{"name":"addSemanticIndexes","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addSemanticIndexes}"},{"name":"semanticIndexCallback","type":"SemanticIndexCallback","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.semanticIndexCallback}"},{"name":"semanticIndexOffset","type":"int","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.semanticIndexOffset}"},{"name":"findChildIndexCallback","type":"int? Function(Key)?","desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.findChildIndexCallback}"}],"id":549,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_zh-CN.json new file mode 100644 index 000000000..7abdfa23c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_zh-CN.json @@ -0,0 +1 @@ +{"name":"TreeSliver","path":"/src/widgets/sliver_tree.dart","parents":["StatefulWidget","Widget"],"desc":"在垂直和水平滚动的 [Viewport] 中显示展开和折叠的 [TreeSliverNode] 的小部件。","fields":[{"name":"tree","type":"List>","required":true,"desc":"可能在 [TreeSliver] 中显示的 [TreeSliverNode] 列表。"},{"name":"treeNodeBuilder","type":"TreeSliverNodeBuilder","required":true,"desc":"调用以为给定节点构建和输入 [TreeSliver]。"},{"name":"treeRowExtentBuilder","type":"TreeSliverRowExtentBuilder","required":true,"desc":"调用以计算为给定 [TreeSliverNode] 构建的小部件的范围。"},{"name":"controller","type":"TreeSliverController?","desc":"如果提供,控制器可用于展开和折叠 [TreeSliverNode],或查找有关 [TreeSliver] 当前状态的信息。"},{"name":"onNodeToggle","type":"TreeSliverNodeCallback?","desc":"[TreeSliverNode] 展开或折叠时调用。"},{"name":"toggleAnimationStyle","type":"AnimationStyle?","desc":"[TreeSliver] 中展开和折叠节点的默认 [AnimationStyle]。"},{"name":"indentation","type":"TreeSliverIndentationType","required":true,"desc":"子项将根据其 [TreeSliverNode.depth] 在交叉轴上偏移的像素数。"},{"name":"addAutomaticKeepAlives","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addAutomaticKeepAlives}"},{"name":"addRepaintBoundaries","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addRepaintBoundaries}"},{"name":"addSemanticIndexes","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addSemanticIndexes}"},{"name":"semanticIndexCallback","type":"SemanticIndexCallback","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.semanticIndexCallback}"},{"name":"semanticIndexOffset","type":"int","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.semanticIndexOffset}"},{"name":"findChildIndexCallback","type":"int? Function(Key)?","desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.findChildIndexCallback}"}],"id":549,"localName":"TreeSliver","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_en-US.json new file mode 100644 index 000000000..08716d298 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_en-US.json @@ -0,0 +1 @@ +{"name":"TweenAnimationBuilder","path":"/src/widgets/tween_animation_builder.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" [Widget] builder that animates a property of a [Widget] to a target value whenever the target value changes.","fields":[{"name":"tween","type":"Tween","required":true,"desc":"Defines the target value for the animation."},{"name":"builder","type":"ValueWidgetBuilder","required":true,"desc":"Called every time the animation value changes."},{"name":"child","type":"Widget?","desc":"The child widget to pass to the builder."}],"id":226,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TweenAnimationBuilder Usage Example","desc":["【tween】 : *Tween 【Tween】","【duration】 : *Duration 【Duration】","【builder】 : *Builder 【ValueWidgetBuilder】","【curve】 : Animation Curve 【Curve】","【onEnd】 : End Callback 【VoidCallback】","【child】 : Child Widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_zh-CN.json new file mode 100644 index 000000000..bd3ab8888 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_zh-CN.json @@ -0,0 +1 @@ +{"name":"TweenAnimationBuilder","path":"/src/widgets/tween_animation_builder.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"每当目标值更改时,将 [Widget] 的属性动画化到目标值的 [Widget] 构建器。","fields":[{"name":"tween","type":"Tween","required":true,"desc":"定义动画的目标值。"},{"name":"builder","type":"ValueWidgetBuilder","required":true,"desc":"每次动画值更改时调用。"},{"name":"child","type":"Widget?","desc":"传递给构建器的子小部件。"}],"id":226,"localName":"渐变动画构造器","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TweenAnimationBuilder 使用案例","desc":["【tween】 : *渐变器 【Tween】","【duration】 : *时长 【Duration】","【builder】 : *构造器 【ValueWidgetBuilder】","【curve】 : 动画曲线 【Curve】","【onEnd】 : 结束回调 【VoidCallback】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_en-US.json new file mode 100644 index 000000000..34a3aaf55 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_en-US.json @@ -0,0 +1 @@ +{"name":"TwoDimensionalScrollView","path":"/src/widgets/two_dimensional_scroll_view.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":" A widget that combines a [TwoDimensionalScrollable] and a [TwoDimensionalViewport] to create an interactive scrolling pane of content in both vertical and horizontal dimensions.","fields":[{"name":"delegate","type":"TwoDimensionalChildDelegate","required":true,"desc":"A delegate that provides the children for the [TwoDimensionalScrollView]."},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"diagonalDragBehavior","type":"DiagonalDragBehavior","required":true,"desc":"Whether scrolling gestures should lock to one axes, allow free movement in both axes, or be evaluated on a weighted scale."},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"mainAxis","type":"Axis","required":true,"desc":"The main axis of the two."},{"name":"verticalDetails","type":"ScrollableDetails","required":true,"desc":"The configuration of the vertical Scrollable."},{"name":"horizontalDetails","type":"ScrollableDetails","required":true,"desc":"The configuration of the horizontal Scrollable."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":550,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_zh-CN.json new file mode 100644 index 000000000..947bc1693 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_zh-CN.json @@ -0,0 +1 @@ +{"name":"TwoDimensionalScrollView","path":"/src/widgets/two_dimensional_scroll_view.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":"结合 [TwoDimensionalScrollable] 和 [TwoDimensionalViewport] 创建垂直和水平两个维度的交互式滚动内容窗格的小部件。","fields":[{"name":"delegate","type":"TwoDimensionalChildDelegate","required":true,"desc":"为 [TwoDimensionalScrollView] 提供子项的委托。"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"diagonalDragBehavior","type":"DiagonalDragBehavior","required":true,"desc":"滚动手势是否应锁定到一个轴、允许在两个轴上自由移动,或在加权尺度上评估。"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"mainAxis","type":"Axis","required":true,"desc":"两者中的主轴。"},{"name":"verticalDetails","type":"ScrollableDetails","required":true,"desc":"垂直 Scrollable 的配置。"},{"name":"horizontalDetails","type":"ScrollableDetails","required":true,"desc":"水平 Scrollable 的配置。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":550,"localName":"TwoDimensionalScrollView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_en-US.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_en-US.json new file mode 100644 index 000000000..8dc7efc89 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_en-US.json @@ -0,0 +1 @@ +{"name":"TwoDimensionalScrollable","path":"/src/widgets/scrollable.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that manages scrolling in both the vertical and horizontal dimensions and informs the [TwoDimensionalViewport] through which the content is viewed.","fields":[{"name":"diagonalDragBehavior","type":"DiagonalDragBehavior","required":true,"desc":"How scrolling gestures should lock to one axis, or allow free movement in both axes."},{"name":"horizontalDetails","type":"ScrollableDetails","required":true,"desc":"The configuration of the horizontal [Scrollable]."},{"name":"verticalDetails","type":"ScrollableDetails","required":true,"desc":"The configuration of the vertical [Scrollable]."},{"name":"viewportBuilder","type":"TwoDimensionalViewportBuilder","required":true,"desc":"Builds the viewport through which the scrollable content is displayed."},{"name":"incrementCalculator","type":"ScrollIncrementCalculator?","desc":"{@macro flutter.widgets.Scrollable.incrementCalculator}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.scrollable.excludeFromSemantics}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"}],"id":551,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_zh-CN.json new file mode 100644 index 000000000..47af9e136 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_zh-CN.json @@ -0,0 +1 @@ +{"name":"TwoDimensionalScrollable","path":"/src/widgets/scrollable.dart","parents":["StatefulWidget","Widget"],"desc":"管理垂直和水平两个维度滚动并通知查看内容的 [TwoDimensionalViewport] 的小部件。","fields":[{"name":"diagonalDragBehavior","type":"DiagonalDragBehavior","required":true,"desc":"滚动手势应如何锁定到一个轴,或允许在两个轴上自由移动。"},{"name":"horizontalDetails","type":"ScrollableDetails","required":true,"desc":"水平 [Scrollable] 的配置。"},{"name":"verticalDetails","type":"ScrollableDetails","required":true,"desc":"垂直 [Scrollable] 的配置。"},{"name":"viewportBuilder","type":"TwoDimensionalViewportBuilder","required":true,"desc":"构建显示可滚动内容的视口。"},{"name":"incrementCalculator","type":"ScrollIncrementCalculator?","desc":"{@macro flutter.widgets.Scrollable.incrementCalculator}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.scrollable.excludeFromSemantics}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"}],"id":551,"localName":"TwoDimensionalScrollable","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_en-US.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_en-US.json new file mode 100644 index 000000000..0fcbfab99 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_en-US.json @@ -0,0 +1 @@ +{"name":"TwoDimensionalViewport","path":"/src/widgets/two_dimensional_viewport.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A widget through which a portion of larger content can be viewed, typically in combination with a [TwoDimensionalScrollable].","fields":[{"name":"verticalOffset","type":"ViewportOffset","required":true,"desc":"Which part of the content inside the viewport should be visible in the vertical axis."},{"name":"verticalAxisDirection","type":"AxisDirection","required":true,"desc":"The direction in which the [verticalOffset]'s [ViewportOffset.pixels] increases."},{"name":"horizontalOffset","type":"ViewportOffset","required":true,"desc":"Which part of the content inside the viewport should be visible in the horizontal axis."},{"name":"horizontalAxisDirection","type":"AxisDirection","required":true,"desc":"The direction in which the [horizontalOffset]'s [ViewportOffset.pixels] increases."},{"name":"mainAxis","type":"Axis","required":true,"desc":"The main axis of the two."},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"delegate","type":"TwoDimensionalChildDelegate","required":true,"desc":"A delegate that provides the children for the [TwoDimensionalViewport]."}],"id":552,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_zh-CN.json new file mode 100644 index 000000000..3ef00f4af --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_zh-CN.json @@ -0,0 +1 @@ +{"name":"TwoDimensionalViewport","path":"/src/widgets/two_dimensional_viewport.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"可以查看较大内容的一部分的小部件,通常与 [TwoDimensionalScrollable] 结合使用。","fields":[{"name":"verticalOffset","type":"ViewportOffset","required":true,"desc":"视口内容的哪一部分应在垂直轴上可见。"},{"name":"verticalAxisDirection","type":"AxisDirection","required":true,"desc":"[verticalOffset] 的 [ViewportOffset.pixels] 增加的方向。"},{"name":"horizontalOffset","type":"ViewportOffset","required":true,"desc":"视口内容的哪一部分应在水平轴上可见。"},{"name":"horizontalAxisDirection","type":"AxisDirection","required":true,"desc":"[horizontalOffset] 的 [ViewportOffset.pixels] 增加的方向。"},{"name":"mainAxis","type":"Axis","required":true,"desc":"两者中的主轴。"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"delegate","type":"TwoDimensionalChildDelegate","required":true,"desc":"为 [TwoDimensionalViewport] 提供子项的委托。"}],"id":552,"localName":"TwoDimensionalViewport","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_en-US.json b/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_en-US.json new file mode 100644 index 000000000..a786ad86c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_en-US.json @@ -0,0 +1 @@ +{"name":"UiKitView","path":"/src/widgets/platform_view.dart","parents":["_DarwinView","StatefulWidget","Widget"],"desc":" Embeds an iOS view in the Widget hierarchy.","fields":[],"id":553,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_zh-CN.json new file mode 100644 index 000000000..e5e98ced1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_zh-CN.json @@ -0,0 +1 @@ +{"name":"UiKitView","path":"/src/widgets/platform_view.dart","parents":["_DarwinView","StatefulWidget","Widget"],"desc":"在小部件层次结构中嵌入 iOS 视图。","fields":[],"id":553,"localName":"UiKitView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_en-US.json new file mode 100644 index 000000000..3bcb57025 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_en-US.json @@ -0,0 +1 @@ +{"name":"UnconstrainedBox","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that imposes no constraints on its child, allowing it to render at its \"natural\" size.","fields":[{"name":"textDirection","type":"TextDirection?","desc":"The text direction to use when interpreting the [alignment] if it is an [AlignmentDirectional]."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"The alignment to use when laying out the child."},{"name":"constrainedAxis","type":"Axis?","desc":"The axis to retain constraints on, if any."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":81,"lever":3,"family":1,"linkIds":[80],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of UnconstrainedBox","desc":["【child】: Child component 【Widget】","【constrainedAxis】: Axes still constrained*2 【Axis】","【alignment】: Alignment method 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_zh-CN.json new file mode 100644 index 000000000..f10c46e4b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_zh-CN.json @@ -0,0 +1 @@ +{"name":"UnconstrainedBox","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":"对其子项不施加约束的小部件,允许它以其自然大小渲染。","fields":[{"name":"textDirection","type":"TextDirection?","desc":"如果 [alignment] 是 [AlignmentDirectional],解释 [alignment] 时使用的文本方向。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"布局子项时使用的对齐。"},{"name":"constrainedAxis","type":"Axis?","desc":"要保留约束的轴(如果有)。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":81,"localName":"无约束盒","lever":3,"family":1,"linkIds":[80],"nodes":[{"file":"node1_base.dart","name":"UnconstrainedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【constrainedAxis】 : 仍受约束的轴*2 【Axis】","【alignment】 : 对齐方式 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_en-US.json b/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_en-US.json new file mode 100644 index 000000000..cba40fb36 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_en-US.json @@ -0,0 +1 @@ +{"name":"UndoHistory","path":"/src/widgets/undo_history.dart","parents":["StatefulWidget","Widget"],"desc":" Provides undo/redo capabilities for a [ValueNotifier].","fields":[{"name":"value","type":"ValueNotifier","required":true,"desc":"The value to track over time."},{"name":"shouldChangeUndoStack","type":"bool Function(T? oldValue, T newValue)?","desc":"Called when checking whether a value change should be pushed onto the undo stack."},{"name":"undoStackModifier","type":"T Function(T value)?","desc":"Called right before a new entry is pushed to the undo stack."},{"name":"onTriggered","type":"void Function(T value)","required":true,"desc":"Called when an undo or redo causes a state change."},{"name":"focusNode","type":"FocusNode","required":true,"desc":"The [FocusNode] that will be used to listen for focus to set the initial undo state for the element."},{"name":"controller","type":"UndoHistoryController?","desc":"{@template flutter.widgets.undoHistory.controller} Controls the undo state."},{"name":"child","type":"Widget","required":true,"desc":"The child widget of [UndoHistory]."}],"id":241,"lever":2,"family":1,"linkIds":[54],"nodes":[{"file":"node1.dart","name":"Using UndoHistory in TextField","desc":["In this example, the undo/redo functionality of the TextField is controlled via an external button. The undoController parameter can be passed an UndoHistoryController object to control and influence the input text content."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_zh-CN.json new file mode 100644 index 000000000..72691ecb2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_zh-CN.json @@ -0,0 +1 @@ +{"name":"UndoHistory","path":"/src/widgets/undo_history.dart","parents":["StatefulWidget","Widget"],"desc":"为 [ValueNotifier] 提供撤销/重做功能。","fields":[{"name":"value","type":"ValueNotifier","required":true,"desc":"要随时间跟踪的值。"},{"name":"shouldChangeUndoStack","type":"bool Function(T? oldValue, T newValue)?","desc":"检查值更改是否应推送到撤销堆栈时调用。"},{"name":"undoStackModifier","type":"T Function(T value)?","desc":"在新条目推送到撤销堆栈之前调用。"},{"name":"onTriggered","type":"void Function(T value)","required":true,"desc":"撤销或重做导致状态更改时调用。"},{"name":"focusNode","type":"FocusNode","required":true,"desc":"将用于监听焦点以设置元素初始撤销状态的 [FocusNode]。"},{"name":"controller","type":"UndoHistoryController?","desc":"{@template flutter.widgets.undoHistory.controller} 控制撤销状态。"},{"name":"child","type":"Widget","required":true,"desc":"[UndoHistory] 的子小部件。"}],"id":241,"localName":"撤销历史","lever":2,"family":1,"linkIds":[54],"nodes":[{"file":"node1.dart","name":"TextField 中使用 UndoHistory","desc":["该案例中通过外界按钮,进行控制 TextField 的撤销/重做功能。其中 undoController 参数可以传入 UndoHistoryController 对象,用于控制并影响输入文本内容。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_en-US.json new file mode 100644 index 000000000..b6470b246 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_en-US.json @@ -0,0 +1 @@ +{"name":"UniqueWidget","path":"/src/widgets/unique_widget.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" Base class for stateful widgets that have exactly one inflated instance in the tree.","fields":[],"id":243,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to UniqueWidget","desc":["【child】 : Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_zh-CN.json new file mode 100644 index 000000000..12f2cbdef --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_zh-CN.json @@ -0,0 +1 @@ +{"name":"UniqueWidget","path":"/src/widgets/unique_widget.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"在树中恰好有一个膨胀实例的有状态小部件的基类。","fields":[],"id":243,"localName":"唯一组件","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"UniqueWidget 介绍","desc":["【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_en-US.json b/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_en-US.json new file mode 100644 index 000000000..4e75c259e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_en-US.json @@ -0,0 +1 @@ +{"name":"UnmanagedRestorationScope","path":"/src/widgets/restoration.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Inserts a provided [RestorationBucket] into the widget tree and makes it available to descendants via [RestorationScope.of].","fields":[{"name":"bucket","type":"RestorationBucket?","desc":"The [RestorationBucket] that this widget will insert into the widget tree."}],"id":554,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_zh-CN.json new file mode 100644 index 000000000..7e0ddfae5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_zh-CN.json @@ -0,0 +1 @@ +{"name":"UnmanagedRestorationScope","path":"/src/widgets/restoration.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将提供的 [RestorationBucket] 插入小部件树并通过 [RestorationScope.of] 使其对后代可用。","fields":[{"name":"bucket","type":"RestorationBucket?","desc":"此小部件将插入小部件树的 [RestorationBucket]。"}],"id":554,"localName":"UnmanagedRestorationScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_en-US.json b/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_en-US.json new file mode 100644 index 000000000..2c7a08811 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_en-US.json @@ -0,0 +1 @@ +{"name":"UserAccountsDrawerHeader","path":"/src/material/user_accounts_drawer_header.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design [Drawer] header that identifies the app's user.","fields":[{"name":"decoration","type":"Decoration?","desc":"The header's background. If decoration is null then a [BoxDecoration] with its background color set to the current theme's primaryColor is used."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"The margin around the drawer header."},{"name":"currentAccountPicture","type":"Widget?","desc":"A widget placed in the upper-left corner that represents the current user's account. Normally a [CircleAvatar]."},{"name":"otherAccountsPictures","type":"List?","desc":"A list of widgets that represent the current user's other accounts. Up to three of these widgets will be arranged in a row in the header's upper-right corner. Normally a list of [CircleAvatar] widgets."},{"name":"currentAccountPictureSize","type":"Size","required":true,"desc":"The size of the [currentAccountPicture]."},{"name":"otherAccountsPicturesSize","type":"Size","required":true,"desc":"The size of each widget in [otherAccountsPicturesSize]."},{"name":"accountName","type":"Widget?","desc":"A widget that represents the user's current account name. It is displayed on the left, below the [currentAccountPicture]."},{"name":"accountEmail","type":"Widget?","desc":"A widget that represents the email address of the user's current account. It is displayed on the left, below the [accountName]."},{"name":"onDetailsPressed","type":"VoidCallback?","desc":"A callback that is called when the horizontal area which contains the [accountName] and [accountEmail] is tapped."},{"name":"arrowColor","type":"Color","required":true,"desc":"The [Color] of the arrow icon."}],"id":22,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"The basic performance of this component is as follows","desc":["【currentAccountPicture】: Top component 【Widget】","【accountName】: Middle component 【Widget】","【accountEmail】: Bottom component 【Widget】","【decoration】: Decoration 【Decoration】"]},{"file":"node2_pro.dart","name":"Top right corner and bottom","desc":["【otherAccountsPictures】: Top right component 【List】","【onDetailsPressed】: Bottom right click event 【Function()】","【arrowColor】: Bottom right button color 【Color】","【margin】: Margin 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_zh-CN.json new file mode 100644 index 000000000..5884084b1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_zh-CN.json @@ -0,0 +1 @@ +{"name":"UserAccountsDrawerHeader","path":"/src/material/user_accounts_drawer_header.dart","parents":["StatefulWidget","Widget"],"desc":"标识应用程序用户的 Material Design [Drawer] 标题。","fields":[{"name":"decoration","type":"Decoration?","desc":"标题的背景。如果 decoration 为 null,则使用背景颜色设置为当前主题的 primaryColor 的 [BoxDecoration]。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"抽屉标题周围的边距。"},{"name":"currentAccountPicture","type":"Widget?","desc":"放置在左上角代表当前用户帐户的小部件。通常是 [CircleAvatar]。"},{"name":"otherAccountsPictures","type":"List?","desc":"代表当前用户其他帐户的小部件列表。这些小部件中最多三个将在标题右上角排成一行。通常是 [CircleAvatar] 小部件列表。"},{"name":"currentAccountPictureSize","type":"Size","required":true,"desc":"[currentAccountPicture] 的大小。"},{"name":"otherAccountsPicturesSize","type":"Size","required":true,"desc":"[otherAccountsPicturesSize] 中每个小部件的大小。"},{"name":"accountName","type":"Widget?","desc":"代表用户当前帐户名称的小部件。它显示在左侧,[currentAccountPicture] 下方。"},{"name":"accountEmail","type":"Widget?","desc":"代表用户当前帐户电子邮件地址的小部件。它显示在左侧,[accountName] 下方。"},{"name":"onDetailsPressed","type":"VoidCallback?","desc":"点击包含 [accountName] 和 [accountEmail] 的水平区域时调用的回调。"},{"name":"arrowColor","type":"Color","required":true,"desc":"箭头图标的 [Color]。"}],"id":22,"localName":"展示头","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"该组件的基本表现如下","desc":["【currentAccountPicture】: 上组件 【Widget】","【accountName】: 中组件 【Widget】","【accountEmail】: 下组件 【Widget】","【decoration】: 装饰 【Decoration】"]},{"file":"node2_pro.dart","name":"右上角和底部","desc":["【otherAccountsPictures】: 右上组件 【List】","【onDetailsPressed】: 右下角点击事件 【Function()】","【arrowColor】: 右下角按钮颜色 【Color】","【margin】: 外边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_en-US.json new file mode 100644 index 000000000..6628263ac --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_en-US.json @@ -0,0 +1 @@ +{"name":"ValueListenableBuilder","path":"/src/widgets/value_listenable_builder.dart","parents":["StatefulWidget","Widget"],"desc":" A widget whose content stays synced with a [ValueListenable].","fields":[{"name":"valueListenable","type":"ValueListenable","required":true,"desc":"The [ValueListenable] whose value you depend on in order to build."},{"name":"builder","type":"ValueWidgetBuilder","required":true,"desc":"A [ValueWidgetBuilder] which builds a widget depending on the [valueListenable]'s value."},{"name":"child","type":"Widget?","desc":"A [valueListenable]-independent widget which is passed back to the [builder]."}],"id":255,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ValueListenableBuilder","desc":["【builder】: Component builder 【ValueWidgetBuilder】","【valueListenable】: Listened value 【ValueListenable】","【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_zh-CN.json new file mode 100644 index 000000000..26c46de90 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_zh-CN.json @@ -0,0 +1 @@ +{"name":"ValueListenableBuilder","path":"/src/widgets/value_listenable_builder.dart","parents":["StatefulWidget","Widget"],"desc":"内容与 [ValueListenable] 保持同步的小部件。","fields":[{"name":"valueListenable","type":"ValueListenable","required":true,"desc":"您依赖其值来构建的 [ValueListenable]。"},{"name":"builder","type":"ValueWidgetBuilder","required":true,"desc":"根据 [valueListenable] 的值构建小部件的 [ValueWidgetBuilder]。"},{"name":"child","type":"Widget?","desc":"与 [valueListenable] 无关的小部件,传递回 [builder]。"}],"id":255,"localName":"监听值构造器","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ValueListenableBuilder基本使用","desc":["【builder】: 组件构造器 【ValueWidgetBuilder】","【valueListenable】: 监听值 【ValueListenable】","【child】: 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_en-US.json b/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_en-US.json new file mode 100644 index 000000000..86c826bc0 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_en-US.json @@ -0,0 +1 @@ +{"name":"VerticalDivider","path":"/src/material/divider.dart","parents":["StatelessWidget","Widget"],"desc":" A thin vertical line, with padding on either side.","fields":[{"name":"width","type":"double?","desc":"The divider's width."},{"name":"thickness","type":"double?","desc":"The thickness of the line drawn within the divider."},{"name":"indent","type":"double?","desc":"The amount of empty space on top of the divider."},{"name":"endIndent","type":"double?","desc":"The amount of empty space under the divider."},{"name":"color","type":"Color?","desc":"The color to use when painting the line."},{"name":"radius","type":"BorderRadiusGeometry?","desc":"The amount of radius for the border of the divider."}],"id":35,"lever":2,"family":0,"linkIds":[34,329],"nodes":[{"file":"node1_base.dart","name":"VerticalDivider Color and Thickness","desc":["【color】: Color 【Color】","【thickness】: Line thickness 【double】"]},{"file":"node2_height.dart","name":"VerticalDivider Width and Indent","desc":["【indent】: Front indent length 【double】","【endIndent】: Back indent length 【double】","【width】: Placeholder width 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_zh-CN.json new file mode 100644 index 000000000..5e312a012 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_zh-CN.json @@ -0,0 +1 @@ +{"name":"VerticalDivider","path":"/src/material/divider.dart","parents":["StatelessWidget","Widget"],"desc":"细垂直线,两侧有内边距。","fields":[{"name":"width","type":"double?","desc":"分隔符的宽度。"},{"name":"thickness","type":"double?","desc":"分隔符内绘制的线的厚度。"},{"name":"indent","type":"double?","desc":"分隔符顶部的空白空间量。"},{"name":"endIndent","type":"double?","desc":"分隔符底部的空白空间量。"},{"name":"color","type":"Color?","desc":"绘制线条时使用的颜色。"},{"name":"radius","type":"BorderRadiusGeometry?","desc":"分隔符边框的半径量。"}],"id":35,"localName":"竖直分割线","lever":2,"family":0,"linkIds":[34,329],"nodes":[{"file":"node1_base.dart","name":"VerticalDivider颜色和粗细","desc":["【color】: 颜色 【Color】","【thickness】: 线粗细 【double】"]},{"file":"node2_height.dart","name":"VerticalDivider宽度和空缺","desc":["【indent】: 前面空缺长度 【double】","【endIndent】: 后面空缺长度 【double】","【width】: 占位宽 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/View/View_en-US.json b/modules/widget_system/widgets/doc/widgets/View/View_en-US.json new file mode 100644 index 000000000..8aa800daf --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/View/View_en-US.json @@ -0,0 +1 @@ +{"name":"View","path":"/src/widgets/view.dart","parents":["StatefulWidget","Widget"],"desc":" Bootstraps a render tree that is rendered into the provided [FlutterView].","fields":[{"name":"view","type":"FlutterView","required":true,"desc":"The [FlutterView] into which [child] is drawn."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree, which will be drawn into the [view]."}],"id":555,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/View/View_zh-CN.json b/modules/widget_system/widgets/doc/widgets/View/View_zh-CN.json new file mode 100644 index 000000000..b86d34a44 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/View/View_zh-CN.json @@ -0,0 +1 @@ +{"name":"View","path":"/src/widgets/view.dart","parents":["StatefulWidget","Widget"],"desc":"引导渲染到提供的 [FlutterView] 中的渲染树。","fields":[{"name":"view","type":"FlutterView","required":true,"desc":"绘制 [child] 的 [FlutterView]。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件,将绘制到 [view] 中。"}],"id":555,"localName":"View","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_en-US.json b/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_en-US.json new file mode 100644 index 000000000..60cbf4b1e --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_en-US.json @@ -0,0 +1 @@ +{"name":"ViewAnchor","path":"/src/widgets/view.dart","parents":["StatelessWidget","Widget"],"desc":" Decorates a [child] widget with a side [View].","fields":[{"name":"view","type":"Widget?","desc":"The widget that defines the view anchored to this widget."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":556,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_zh-CN.json new file mode 100644 index 000000000..655500ae3 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_zh-CN.json @@ -0,0 +1 @@ +{"name":"ViewAnchor","path":"/src/widgets/view.dart","parents":["StatelessWidget","Widget"],"desc":"用侧边 [View] 装饰 [child] 小部件。","fields":[{"name":"view","type":"Widget?","desc":"定义锚定到此小部件的视图的小部件。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":556,"localName":"ViewAnchor","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_en-US.json b/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_en-US.json new file mode 100644 index 000000000..eb954d7be --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_en-US.json @@ -0,0 +1 @@ +{"name":"ViewCollection","path":"/src/widgets/view.dart","parents":["_MultiChildComponentWidget","Widget"],"desc":" A collection of sibling [View]s.","fields":[],"id":557,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_zh-CN.json new file mode 100644 index 000000000..d7ebaf1a8 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_zh-CN.json @@ -0,0 +1 @@ +{"name":"ViewCollection","path":"/src/widgets/view.dart","parents":["_MultiChildComponentWidget","Widget"],"desc":"兄弟 [View] 的集合。","fields":[],"id":557,"localName":"ViewCollection","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_en-US.json b/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_en-US.json new file mode 100644 index 000000000..99f4e7ae9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_en-US.json @@ -0,0 +1 @@ +{"name":"Viewport","path":"/src/widgets/viewport.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget through which a portion of larger content can be viewed, typically in combination with a [Scrollable].","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"The direction in which the [offset]'s [ViewportOffset.pixels] increases."},{"name":"crossAxisDirection","type":"AxisDirection?","desc":"The direction in which child should be laid out in the cross axis."},{"name":"anchor","type":"double","required":true,"desc":"The relative position of the zero scroll offset."},{"name":"offset","type":"ViewportOffset","required":true,"desc":"Which part of the content inside the viewport should be visible."},{"name":"center","type":"Key?","desc":"The first child in the [GrowthDirection.forward] growth direction."},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"cacheExtentStyle","type":"CacheExtentStyle","required":true,"desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtentStyle}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":340,"lever":1,"family":3,"linkIds":[253,349],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Viewport","desc":["【offset】: *Viewport offset 【ViewportOffset】","【cacheExtentStyle】: Preload type 【CacheExtentStyle】","【cacheExtent】: Preload amount 【double】","【axisDirection】: Scrolling direction 【AxisDirection】","【slivers】: Child Sliver component set 【List】","【anchor】: Anchor point 【double】","You can run this code to see how the ColorItem is constructed, the 128 color bars are not all constructed at once."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_zh-CN.json new file mode 100644 index 000000000..8dd6ec232 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_zh-CN.json @@ -0,0 +1 @@ +{"name":"Viewport","path":"/src/widgets/viewport.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"可以查看较大内容的一部分的小部件,通常与 [Scrollable] 结合使用。","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"[offset] 的 [ViewportOffset.pixels] 增加的方向。"},{"name":"crossAxisDirection","type":"AxisDirection?","desc":"子项在交叉轴上应布局的方向。"},{"name":"anchor","type":"double","required":true,"desc":"零滚动偏移的相对位置。"},{"name":"offset","type":"ViewportOffset","required":true,"desc":"视口内容的哪一部分应该可见。"},{"name":"center","type":"Key?","desc":"[GrowthDirection.forward] 增长方向中的第一个子项。"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"cacheExtentStyle","type":"CacheExtentStyle","required":true,"desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtentStyle}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":340,"localName":"视口组件","lever":1,"family":3,"linkIds":[253,349],"nodes":[{"file":"node1_base.dart","name":"Viewport的基本使用","desc":["【offset】 : *视口偏移量 【ViewportOffset】","【cacheExtentStyle】: 预加载类型 【CacheExtentStyle】","【cacheExtent】: 预加载量 【double】","【axisDirection】: 滑动方向 【AxisDirection】","【slivers】: 子Sliver组件集 【List】","【anchor】: 锚点 【double】","可以运行这些代码,查看ColorItem的构建情况,128个色条并非一次性全部构建。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_en-US.json b/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_en-US.json new file mode 100644 index 000000000..077cf82b1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_en-US.json @@ -0,0 +1 @@ +{"name":"Visibility","path":"/src/widgets/visibility.dart","parents":["StatelessWidget","Widget"],"desc":" Whether to show or hide a child.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget to show or hide, as controlled by [visible]."},{"name":"replacement","type":"Widget","required":true,"desc":"The widget to use when the child is not [visible], assuming that none of the `maintain` flags (in particular, [maintainState]) are set."},{"name":"visible","type":"bool","required":true,"desc":"Switches between showing the [child] or hiding it."},{"name":"maintainState","type":"bool","required":true,"desc":"Whether to maintain the [State] objects of the [child] subtree when it is not [visible]."},{"name":"maintainAnimation","type":"bool","required":true,"desc":"Whether to maintain animations within the [child] subtree when it is not [visible]."},{"name":"maintainSize","type":"bool","required":true,"desc":"Whether to maintain space for where the widget would have been."},{"name":"maintainSemantics","type":"bool","required":true,"desc":"Whether to maintain the semantics for the widget when it is hidden (e.g. for accessibility)."},{"name":"maintainInteractivity","type":"bool","required":true,"desc":"Whether to allow the widget to be interactive when hidden."}],"id":10,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Control the visibility of internal child components based on visible","desc":["【visible】: Whether to display 【bool】","【child】: Child 【Widget】","By default, the child will lose its original area when hidden."]},{"file":"node2_replacement.dart","name":"replacement can be used as a placeholder when hidden","desc":["【replacement】: Placeholder component when hidden 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_zh-CN.json new file mode 100644 index 000000000..ed7a9d050 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_zh-CN.json @@ -0,0 +1 @@ +{"name":"Visibility","path":"/src/widgets/visibility.dart","parents":["StatelessWidget","Widget"],"desc":"是否显示或隐藏子项。","fields":[{"name":"child","type":"Widget","required":true,"desc":"要显示或隐藏的小部件,由 [visible] 控制。"},{"name":"replacement","type":"Widget","required":true,"desc":"当子项不 [visible] 时使用的小部件,假设没有设置任何 `maintain` 标志(特别是 [maintainState])。"},{"name":"visible","type":"bool","required":true,"desc":"在显示 [child] 或隐藏它之间切换。"},{"name":"maintainState","type":"bool","required":true,"desc":"当 [child] 子树不 [visible] 时是否维护其 [State] 对象。"},{"name":"maintainAnimation","type":"bool","required":true,"desc":"当 [child] 子树不 [visible] 时是否维护其中的动画。"},{"name":"maintainSize","type":"bool","required":true,"desc":"是否为小部件本来所在的位置维护空间。"},{"name":"maintainSemantics","type":"bool","required":true,"desc":"当小部件隐藏时是否维护其语义(例如用于辅助功能)。"},{"name":"maintainInteractivity","type":"bool","required":true,"desc":"隐藏时是否允许小部件可交互。"}],"id":10,"localName":"显隐组件","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"根据visible控制内部子组件的显隐情况","desc":["【visible】 : 是否显示 【bool】","【child】: 孩子 【Widget】","默认孩子隐藏时会失去原来所在区域。"]},{"file":"node2_replacement.dart","name":"replacement可在隐藏时进行占位","desc":["【replacement】 : 隐藏时的占位组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_en-US.json b/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_en-US.json new file mode 100644 index 000000000..ef7c490b1 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_en-US.json @@ -0,0 +1 @@ +{"name":"WidgetInspector","path":"/src/widgets/widget_inspector.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that enables inspecting the child widget's structure.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget that is being inspected."},{"name":"exitWidgetSelectionButtonBuilder","type":"ExitWidgetSelectionButtonBuilder?","desc":"A builder that is called to create the exit select-mode button."},{"name":"moveExitWidgetSelectionButtonBuilder","type":"MoveExitWidgetSelectionButtonBuilder?","desc":"A builder that is called to create the button that moves the exit select- mode button to the right or left."},{"name":"tapBehaviorButtonBuilder","type":"TapBehaviorButtonBuilder?","desc":"A builder that is called to create the button that changes the default tap behavior when Select Widget mode is enabled."}],"id":234,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of WidgetInspector","desc":["【child】 : Child component 【Widget】","【selectButtonBuilder】: *Select button builder 【InspectorSelectButtonBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_zh-CN.json new file mode 100644 index 000000000..eb8a620d6 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_zh-CN.json @@ -0,0 +1 @@ +{"name":"WidgetInspector","path":"/src/widgets/widget_inspector.dart","parents":["StatefulWidget","Widget"],"desc":"启用检查子小部件结构的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"正在被检查的小部件。"},{"name":"exitWidgetSelectionButtonBuilder","type":"ExitWidgetSelectionButtonBuilder?","desc":"调用以创建退出选择模式按钮的构建器。"},{"name":"moveExitWidgetSelectionButtonBuilder","type":"MoveExitWidgetSelectionButtonBuilder?","desc":"调用以创建将退出选择模式按钮向右或向左移动的按钮的构建器。"},{"name":"tapBehaviorButtonBuilder","type":"TapBehaviorButtonBuilder?","desc":"调用以创建在启用选择小部件模式时更改默认点击行为的按钮的构建器。"}],"id":234,"localName":"组件检查器","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"WidgetInspector基本使用","desc":["【child】 : 子组件 【Widget】","【selectButtonBuilder】: *选择按钮构造器 【InspectorSelectButtonBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_en-US.json b/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_en-US.json new file mode 100644 index 000000000..2e3987fa2 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_en-US.json @@ -0,0 +1 @@ +{"name":"WidgetToRenderBoxAdapter","path":"/src/widgets/basic.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" An adapter for placing a specific [RenderBox] in the widget tree.","fields":[{"name":"renderBox","type":"RenderBox","required":true,"desc":"The render box to place in the widget tree."},{"name":"onBuild","type":"VoidCallback?","desc":"Called when it is safe to update the render box and its descendants. If you update the RenderObject subtree under this widget outside of invocations of this callback, features like hit-testing will fail as the tree will be dirty."},{"name":"onUnmount","type":"VoidCallback?","desc":"Called when it is safe to dispose of children that were manually added to the [renderBox]."}],"id":558,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_zh-CN.json b/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_zh-CN.json new file mode 100644 index 000000000..512b98c2b --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_zh-CN.json @@ -0,0 +1 @@ +{"name":"WidgetToRenderBoxAdapter","path":"/src/widgets/basic.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在小部件树中放置特定 [RenderBox] 的适配器。","fields":[{"name":"renderBox","type":"RenderBox","required":true,"desc":"要放置在小部件树中的渲染框。"},{"name":"onBuild","type":"VoidCallback?","desc":"当可以安全地更新渲染框及其后代时调用。如果您在此回调的调用之外更新此小部件下的 RenderObject 子树,诸如命中测试之类的功能将失败,因为树将是脏的。"},{"name":"onUnmount","type":"VoidCallback?","desc":"当可以安全地处置手动添加到 [renderBox] 的子项时调用。"}],"id":558,"localName":"WidgetToRenderBoxAdapter","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_en-US.json b/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_en-US.json new file mode 100644 index 000000000..33aea350d --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_en-US.json @@ -0,0 +1 @@ +{"name":"WidgetsApp","path":"/src/widgets/app.dart","parents":["StatefulWidget","Widget"],"desc":" A convenience widget that wraps a number of widgets that are commonly required for an application.","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@template flutter.widgets.widgetsApp.navigatorKey} A key to use when building the [Navigator]."},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@template flutter.widgets.widgetsApp.onGenerateRoute} The route generator callback used when the app is navigated to a named route."},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@template flutter.widgets.widgetsApp.onGenerateInitialRoutes} The routes generator callback used for generating initial routes if [initialRoute] is provided."},{"name":"pageRouteBuilder","type":"PageRouteFactory?","desc":"The [PageRoute] generator callback used when the app is navigated to a named route."},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@template flutter.widgets.widgetsApp.routeInformationParser} A delegate to parse the route information from the [routeInformationProvider] into a generic data type to be processed by the [routerDelegate] at a later stage."},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@template flutter.widgets.widgetsApp.routerDelegate} A delegate that configures a widget, typically a [Navigator], with parsed result from the [routeInformationParser]."},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@template flutter.widgets.widgetsApp.backButtonDispatcher} A delegate that decide whether to handle the Android back button intent."},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@template flutter.widgets.widgetsApp.routeInformationProvider} A object that provides route information through the [RouteInformationProvider.value] and notifies its listener when its value changes."},{"name":"routerConfig","type":"RouterConfig?","desc":"{@template flutter.widgets.widgetsApp.routerConfig} An object to configure the underlying [Router]."},{"name":"home","type":"Widget?","desc":"{@template flutter.widgets.widgetsApp.home} The widget for the default route of the app ([Navigator.defaultRouteName], which is `/`)."},{"name":"routes","type":"Map?","desc":"The application's top-level routing table."},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@template flutter.widgets.widgetsApp.onUnknownRoute} Called when [onGenerateRoute] fails to generate a route, except for the [initialRoute]."},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@template flutter.widgets.widgetsApp.onNavigationNotification} The callback to use when receiving a [NavigationNotification]."},{"name":"initialRoute","type":"String?","desc":"{@template flutter.widgets.widgetsApp.initialRoute} The name of the first route to show, if a [Navigator] is built."},{"name":"navigatorObservers","type":"List?","desc":"{@template flutter.widgets.widgetsApp.navigatorObservers} The list of observers for the [Navigator] created for this app."},{"name":"builder","type":"TransitionBuilder?","desc":"{@template flutter.widgets.widgetsApp.builder} A builder for inserting widgets above the [Navigator] or - when the [WidgetsApp.router] constructor is used - above the [Router] but below the other widgets created by the [WidgetsApp] widget, or for replacing the [Navigator]/[Router] entirely."},{"name":"title","type":"String?","desc":"{@template flutter.widgets.widgetsApp.title} A one-line description used by the device to identify the app for the user."},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@template flutter.widgets.widgetsApp.onGenerateTitle} If non-null this callback function is called to produce the app's title string, otherwise [title] is used."},{"name":"textStyle","type":"TextStyle?","desc":"The default text style for [Text] in the application."},{"name":"color","type":"Color","required":true,"desc":"{@template flutter.widgets.widgetsApp.color} The primary color to use for the application in the operating system interface."},{"name":"locale","type":"Locale?","desc":"{@template flutter.widgets.widgetsApp.locale} The initial locale for this app's [Localizations] widget is based on this value."},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@template flutter.widgets.widgetsApp.localizationsDelegates} The delegates for this app's [Localizations] widget."},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@template flutter.widgets.widgetsApp.localeListResolutionCallback} This callback is responsible for choosing the app's locale when the app is started, and when the user changes the device's locale."},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@template flutter.widgets.widgetsApp.supportedLocales} The list of locales that this app has been localized for."},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"Turns on a performance overlay."},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"Turns on an overlay that shows the accessibility information reported by the framework."},{"name":"debugShowWidgetInspector","type":"bool","required":true,"desc":"Turns on an overlay that enables inspecting the widget tree."},{"name":"exitWidgetSelectionButtonBuilder","type":"ExitWidgetSelectionButtonBuilder?","desc":"Builds the widget the [WidgetInspector] uses to exit selection mode."},{"name":"moveExitWidgetSelectionButtonBuilder","type":"MoveExitWidgetSelectionButtonBuilder?","desc":"Builds the widget the [WidgetInspector] uses to move the exit selection mode button."},{"name":"tapBehaviorButtonBuilder","type":"TapBehaviorButtonBuilder?","desc":"Builds the widget the [WidgetInspector] uses to change the default behavior when tapping on widgets in the app."},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@template flutter.widgets.widgetsApp.debugShowCheckedModeBanner} Turns on a little \"DEBUG\" banner in debug mode to indicate that the app is in debug mode. This is on by default (in debug mode), to turn it off, set the constructor argument to false. In release mode this has no effect."},{"name":"shortcuts","type":"Map?","desc":"{@template flutter.widgets.widgetsApp.shortcuts} The default map of keyboard shortcuts to intents for the application."},{"name":"actions","type":"Map>?","desc":"{@template flutter.widgets.widgetsApp.actions} The default map of intent keys to actions for the application."},{"name":"restorationScopeId","type":"String?","desc":"{@template flutter.widgets.widgetsApp.restorationScopeId} The identifier to use for state restoration of this app."},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@template flutter.widgets.widgetsApp.useInheritedMediaQuery} Deprecated. This setting is now ignored."}],"id":236,"lever":2,"family":1,"linkIds":[65,156],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of WidgetsApp","desc":["【pageRouteBuilder】 : *Route Builder 【PageRouteFactory】","【color】: *Color 【Color】","【debugShowWidgetInspector】: Whether to display the widget inspector 【bool】","Other properties are basically the same as MaterialApp, see details there."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_zh-CN.json b/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_zh-CN.json new file mode 100644 index 000000000..6ed80808a --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_zh-CN.json @@ -0,0 +1 @@ +{"name":"WidgetsApp","path":"/src/widgets/app.dart","parents":["StatefulWidget","Widget"],"desc":"包装应用程序通常需要的多个小部件的便利小部件。","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@template flutter.widgets.widgetsApp.navigatorKey} 构建 [Navigator] 时使用的键。"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@template flutter.widgets.widgetsApp.onGenerateRoute} 应用程序导航到命名路由时使用的路由生成器回调。"},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@template flutter.widgets.widgetsApp.onGenerateInitialRoutes} 如果提供了 [initialRoute],用于生成初始路由的路由生成器回调。"},{"name":"pageRouteBuilder","type":"PageRouteFactory?","desc":"应用程序导航到命名路由时使用的 [PageRoute] 生成器回调。"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@template flutter.widgets.widgetsApp.routeInformationParser} 将来自 [routeInformationProvider] 的路由信息解析为通用数据类型的委托,以便稍后由 [routerDelegate] 处理。"},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@template flutter.widgets.widgetsApp.routerDelegate} 使用来自 [routeInformationParser] 的解析结果配置小部件(通常是 [Navigator])的委托。"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@template flutter.widgets.widgetsApp.backButtonDispatcher} 决定是否处理 Android 返回按钮意图的委托。"},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@template flutter.widgets.widgetsApp.routeInformationProvider} 通过 [RouteInformationProvider.value] 提供路由信息并在其值更改时通知其监听器的对象。"},{"name":"routerConfig","type":"RouterConfig?","desc":"{@template flutter.widgets.widgetsApp.routerConfig} 配置底层 [Router] 的对象。"},{"name":"home","type":"Widget?","desc":"{@template flutter.widgets.widgetsApp.home} 应用程序默认路由的小部件([Navigator.defaultRouteName],即 `/`)。"},{"name":"routes","type":"Map?","desc":"应用程序的顶级路由表。"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@template flutter.widgets.widgetsApp.onUnknownRoute} 当 [onGenerateRoute] 无法生成路由时调用,除了 [initialRoute]。"},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@template flutter.widgets.widgetsApp.onNavigationNotification} 接收 [NavigationNotification] 时使用的回调。"},{"name":"initialRoute","type":"String?","desc":"{@template flutter.widgets.widgetsApp.initialRoute} 如果构建了 [Navigator],要显示的第一个路由的名称。"},{"name":"navigatorObservers","type":"List?","desc":"{@template flutter.widgets.widgetsApp.navigatorObservers} 为此应用程序创建的 [Navigator] 的观察者列表。"},{"name":"builder","type":"TransitionBuilder?","desc":"{@template flutter.widgets.widgetsApp.builder} 用于在 [Navigator] 上方插入小部件的构建器,或者当使用 [WidgetsApp.router] 构造函数时在 [Router] 上方但在 [WidgetsApp] 小部件创建的其他小部件下方,或者完全替换 [Navigator]/[Router]。"},{"name":"title","type":"String?","desc":"{@template flutter.widgets.widgetsApp.title} 设备用于向用户标识应用程序的单行描述。"},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@template flutter.widgets.widgetsApp.onGenerateTitle} 如果非空,调用此回调函数来生成应用程序的标题字符串,否则使用 [title]。"},{"name":"textStyle","type":"TextStyle?","desc":"应用程序中 [Text] 的默认文本样式。"},{"name":"color","type":"Color","required":true,"desc":"{@template flutter.widgets.widgetsApp.color} 在操作系统界面中用于应用程序的主要颜色。"},{"name":"locale","type":"Locale?","desc":"{@template flutter.widgets.widgetsApp.locale} 此应用程序的 [Localizations] 小部件的初始区域设置基于此值。"},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@template flutter.widgets.widgetsApp.localizationsDelegates} 此应用程序的 [Localizations] 小部件的委托。"},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@template flutter.widgets.widgetsApp.localeListResolutionCallback} 此回调负责在应用程序启动时以及用户更改设备区域设置时选择应用程序的区域设置。"},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@template flutter.widgets.widgetsApp.supportedLocales} 此应用程序已本地化的区域设置列表。"},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"打开性能覆盖。"},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"打开显示框架报告的辅助功能信息的覆盖。"},{"name":"debugShowWidgetInspector","type":"bool","required":true,"desc":"打开启用检查小部件树的覆盖。"},{"name":"exitWidgetSelectionButtonBuilder","type":"ExitWidgetSelectionButtonBuilder?","desc":"构建 [WidgetInspector] 用于退出选择模式的小部件。"},{"name":"moveExitWidgetSelectionButtonBuilder","type":"MoveExitWidgetSelectionButtonBuilder?","desc":"构建 [WidgetInspector] 用于移动退出选择模式按钮的小部件。"},{"name":"tapBehaviorButtonBuilder","type":"TapBehaviorButtonBuilder?","desc":"构建 [WidgetInspector] 用于更改在应用程序中点击小部件时的默认行为的小部件。"},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@template flutter.widgets.widgetsApp.debugShowCheckedModeBanner} 在调试模式下打开一个小的"},{"name":"shortcuts","type":"Map?","desc":"{@template flutter.widgets.widgetsApp.shortcuts} 应用程序的键盘快捷键到意图的默认映射。"},{"name":"actions","type":"Map>?","desc":"{@template flutter.widgets.widgetsApp.actions} 应用程序的意图键到操作的默认映射。"},{"name":"restorationScopeId","type":"String?","desc":"{@template flutter.widgets.widgetsApp.restorationScopeId} 用于此应用程序状态恢复的标识符。"},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@template flutter.widgets.widgetsApp.useInheritedMediaQuery} 已弃用。此设置现在被忽略。"}],"id":236,"localName":"组件应用","lever":2,"family":1,"linkIds":[65,156],"nodes":[{"file":"node1_base.dart","name":"WidgetsApp基本使用","desc":["【pageRouteBuilder】 : *路由构造器 【PageRouteFactory】","【color】: *颜色 【Color】","【debugShowWidgetInspector】: 是否显示z组件查看器 【bool】","其他属性基本上同MaterialApp,详见之。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_en-US.json b/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_en-US.json new file mode 100644 index 000000000..bd3bad234 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_en-US.json @@ -0,0 +1 @@ +{"name":"WillPopScope","path":"/src/widgets/will_pop_scope.dart","parents":["StatefulWidget","Widget"],"desc":" Registers a callback to veto attempts by the user to dismiss the enclosing [ModalRoute].","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"onWillPop","type":"WillPopCallback?","desc":"Called to veto attempts by the user to dismiss the enclosing [ModalRoute]."}],"id":170,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"WillPopScope Usage","desc":["【child】: Child component 【Widget】","【onWillPop】: Return callback 【WillPopCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_zh-CN.json new file mode 100644 index 000000000..b6c508d2c --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_zh-CN.json @@ -0,0 +1 @@ +{"name":"WillPopScope","path":"/src/widgets/will_pop_scope.dart","parents":["StatefulWidget","Widget"],"desc":"注册回调以否决用户关闭封闭 [ModalRoute] 的尝试。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"onWillPop","type":"WillPopCallback?","desc":"调用以否决用户关闭封闭 [ModalRoute] 的尝试。"}],"id":170,"localName":"返回拦截","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"WillPopScope使用","desc":["【child】 : 子组件 【Widget】","【onWillPop】 : 返回回调 【WillPopCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_en-US.json b/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_en-US.json new file mode 100644 index 000000000..a46bb3269 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_en-US.json @@ -0,0 +1 @@ +{"name":"Wrap","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that displays its children in multiple horizontal or vertical runs.","fields":[{"name":"direction","type":"Axis","required":true,"desc":"The direction to use as the main axis."},{"name":"alignment","type":"WrapAlignment","required":true,"desc":"How the children within a run should be placed in the main axis."},{"name":"spacing","type":"double","required":true,"desc":"How much space to place between children in a run in the main axis."},{"name":"runAlignment","type":"WrapAlignment","required":true,"desc":"How the runs themselves should be placed in the cross axis."},{"name":"runSpacing","type":"double","required":true,"desc":"How much space to place between the runs themselves in the cross axis."},{"name":"crossAxisAlignment","type":"WrapCrossAlignment","required":true,"desc":"How the children within a run should be aligned relative to each other in the cross axis."},{"name":"textDirection","type":"TextDirection?","desc":"Determines the order to lay children out horizontally and how to interpret `start` and `end` in the horizontal direction."},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"Determines the order to lay children out vertically and how to interpret `start` and `end` in the vertical direction."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":98,"lever":5,"family":3,"linkIds":[94,95],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Wrap","desc":["【children】: Component list 【List】","【spacing】: Main axis spacing between items 【double】","【runSpacing】: Cross axis spacing between items 【double】","【direction】: Main axis alignment 【Axis】"]},{"file":"node2_alignment.dart","name":"Wrap's alignment Property","desc":["【alignment】: Main axis alignment 【WrapAlignment】"]},{"file":"node3_crossAxisAlignment.dart","name":"Wrap's crossAxisAlignment Property","desc":["【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】"]},{"file":"node4_textDirection.dart","name":"Wrap's textDirection Property","desc":["【textDirection】: Text direction 【TextDirection】"]},{"file":"node5_verticalDirection.dart","name":"Wrap's verticalDirection Property","desc":["【verticalDirection】: Vertical direction 【VerticalDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_zh-CN.json new file mode 100644 index 000000000..25aa8ddc9 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_zh-CN.json @@ -0,0 +1 @@ +{"name":"Wrap","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在多个水平或垂直运行中显示其子项的小部件。","fields":[{"name":"direction","type":"Axis","required":true,"desc":"用作主轴的方向。"},{"name":"alignment","type":"WrapAlignment","required":true,"desc":"运行中的子项应如何在主轴上放置。"},{"name":"spacing","type":"double","required":true,"desc":"在主轴上的运行中子项之间放置多少空间。"},{"name":"runAlignment","type":"WrapAlignment","required":true,"desc":"运行本身应如何在交叉轴上放置。"},{"name":"runSpacing","type":"double","required":true,"desc":"在交叉轴上运行本身之间放置多少空间。"},{"name":"crossAxisAlignment","type":"WrapCrossAlignment","required":true,"desc":"运行中的子项应如何在交叉轴上相对于彼此对齐。"},{"name":"textDirection","type":"TextDirection?","desc":"确定水平布局子项的顺序以及如何解释水平方向上的 `start` 和 `end`。"},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"确定垂直布局子项的顺序以及如何解释垂直方向上的 `start` 和 `end`。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":98,"localName":"包裹布局","lever":5,"family":3,"linkIds":[94,95],"nodes":[{"file":"node1_base.dart","name":"Wrap的基础用法","desc":["【children】 : 组件列表 【List】","【spacing】 : 主轴条目间距 【double】","【runSpacing】 : 交叉轴条目间距 【double】","【direction】 : 主轴对齐 【Axis】"]},{"file":"node2_alignment.dart","name":"Wrap的alignment属性","desc":["【alignment】 : 主轴对齐 【WrapAlignment】"]},{"file":"node3_crossAxisAlignment.dart","name":"Wrap的crossAxisAlignment属性","desc":["【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】"]},{"file":"node4_textDirection.dart","name":"Wrap的textDirection属性","desc":["【textDirection】 : 文字方向 【TextDirection】"]},{"file":"node5_verticalDirection.dart","name":"Wrap的verticalDirection属性","desc":["【verticalDirection】 : 竖直方向 【VerticalDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_en-US.json b/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_en-US.json new file mode 100644 index 000000000..3f8e7bfa5 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_en-US.json @@ -0,0 +1 @@ +{"name":"YearPicker","path":"/src/material/calendar_date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A scrollable grid of years to allow picking a year.","fields":[{"name":"currentDate","type":"DateTime","required":true,"desc":"The current date."},{"name":"firstDate","type":"DateTime","required":true,"desc":"The earliest date the user is permitted to pick."},{"name":"lastDate","type":"DateTime","required":true,"desc":"The latest date the user is permitted to pick."},{"name":"selectedDate","type":"DateTime?","desc":"The currently selected date."},{"name":"onChanged","type":"ValueChanged","required":true,"desc":"Called when the user picks a year."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":136,"lever":3,"family":1,"linkIds":[134,135],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of YearPicker","desc":["【selectedDate】: Selected date 【DateTime】","【firstDate】: First date limit 【DateTime】","【lastDate】: Last date limit 【DateTime】","【onChanged】: Click callback 【Function(DateTime)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_zh-CN.json b/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_zh-CN.json new file mode 100644 index 000000000..552f8c5ee --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_zh-CN.json @@ -0,0 +1 @@ +{"name":"YearPicker","path":"/src/material/calendar_date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"允许选择年份的可滚动年份网格。","fields":[{"name":"currentDate","type":"DateTime","required":true,"desc":"当前日期。"},{"name":"firstDate","type":"DateTime","required":true,"desc":"用户被允许选择的最早日期。"},{"name":"lastDate","type":"DateTime","required":true,"desc":"用户被允许选择的最晚日期。"},{"name":"selectedDate","type":"DateTime?","desc":"当前选定的日期。"},{"name":"onChanged","type":"ValueChanged","required":true,"desc":"用户选择年份时调用。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":136,"localName":"年份选择器","lever":3,"family":1,"linkIds":[134,135],"nodes":[{"file":"node1_base.dart","name":"YearPicker基本使用","desc":["【selectedDate】 : 选中日期 【DateTime】","【firstDate】 : 最前日期限制 【DateTime】","【lastDate】 : 最后日期限制 【DateTime】","【onChanged】 : 点击回调 【Function(DateTime)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/translation_plan.md b/modules/widget_system/widgets/doc/widgets/translation_plan.md new file mode 100644 index 000000000..46caab293 --- /dev/null +++ b/modules/widget_system/widgets/doc/widgets/translation_plan.md @@ -0,0 +1,8 @@ +# 翻译计划 + +**待翻译组件数量**: 0 + +**生成时间**: 2025-07-28 06:31:35.321579 + +## 待翻译组件列表 + diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/toly_date_picker.dart b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/toly_date_picker.dart index 0ca4acc69..e2c3a9f88 100644 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/toly_date_picker.dart +++ b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/toly_date_picker.dart @@ -144,20 +144,20 @@ Future showDatePicker({ firstDate = DateUtils.dateOnly(firstDate); lastDate = DateUtils.dateOnly(lastDate); assert( - !lastDate.isBefore(firstDate), - 'lastDate $lastDate must be on or after firstDate $firstDate.', + !lastDate.isBefore(firstDate), + 'lastDate $lastDate must be on or after firstDate $firstDate.', ); assert( - !initialDate.isBefore(firstDate), - 'initialDate $initialDate must be on or after firstDate $firstDate.', + !initialDate.isBefore(firstDate), + 'initialDate $initialDate must be on or after firstDate $firstDate.', ); assert( - !initialDate.isAfter(lastDate), - 'initialDate $initialDate must be on or before lastDate $lastDate.', + !initialDate.isAfter(lastDate), + 'initialDate $initialDate must be on or before lastDate $lastDate.', ); assert( - selectableDayPredicate == null || selectableDayPredicate(initialDate), - 'Provided initialDate $initialDate must satisfy provided selectableDayPredicate.', + selectableDayPredicate == null || selectableDayPredicate(initialDate), + 'Provided initialDate $initialDate must satisfy provided selectableDayPredicate.', ); assert(initialEntryMode != null); assert(useRootNavigator != null); @@ -237,7 +237,7 @@ class DatePickerDialog extends StatefulWidget { this.fieldLabelText, this.keyboardType, this.restorationId, - }) : assert(initialDate != null), + }) : assert(initialDate != null), assert(firstDate != null), assert(lastDate != null), initialDate = DateUtils.dateOnly(initialDate), @@ -247,20 +247,21 @@ class DatePickerDialog extends StatefulWidget { assert(initialEntryMode != null), assert(initialCalendarMode != null) { assert( - !this.lastDate.isBefore(this.firstDate), - 'lastDate ${this.lastDate} must be on or after firstDate ${this.firstDate}.', + !this.lastDate.isBefore(this.firstDate), + 'lastDate ${this.lastDate} must be on or after firstDate ${this.firstDate}.', ); assert( - !this.initialDate.isBefore(this.firstDate), - 'initialDate ${this.initialDate} must be on or after firstDate ${this.firstDate}.', + !this.initialDate.isBefore(this.firstDate), + 'initialDate ${this.initialDate} must be on or after firstDate ${this.firstDate}.', ); assert( - !this.initialDate.isAfter(this.lastDate), - 'initialDate ${this.initialDate} must be on or before lastDate ${this.lastDate}.', + !this.initialDate.isAfter(this.lastDate), + 'initialDate ${this.initialDate} must be on or before lastDate ${this.lastDate}.', ); assert( - selectableDayPredicate == null || selectableDayPredicate!(this.initialDate), - 'Provided initialDate ${this.initialDate} must satisfy provided selectableDayPredicate', + selectableDayPredicate == null || + selectableDayPredicate!(this.initialDate), + 'Provided initialDate ${this.initialDate} must satisfy provided selectableDayPredicate', ); } @@ -343,10 +344,14 @@ class DatePickerDialog extends StatefulWidget { State createState() => _DatePickerDialogState(); } -class _DatePickerDialogState extends State with RestorationMixin { - late final RestorableDateTime _selectedDate = RestorableDateTime(widget.initialDate); - late final _RestorableDatePickerEntryMode _entryMode = _RestorableDatePickerEntryMode(widget.initialEntryMode); - final _RestorableAutovalidateMode _autovalidateMode = _RestorableAutovalidateMode(AutovalidateMode.disabled); +class _DatePickerDialogState extends State + with RestorationMixin { + late final RestorableDateTime _selectedDate = + RestorableDateTime(widget.initialDate); + late final _RestorableDatePickerEntryMode _entryMode = + _RestorableDatePickerEntryMode(widget.initialEntryMode); + final _RestorableAutovalidateMode _autovalidateMode = + _RestorableAutovalidateMode(AutovalidateMode.disabled); @override String? get restorationId => widget.restorationId; @@ -362,7 +367,8 @@ class _DatePickerDialogState extends State with RestorationMix final GlobalKey _formKey = GlobalKey(); void _handleOk() { - if (_entryMode.value == DatePickerEntryMode.input || _entryMode.value == DatePickerEntryMode.inputOnly) { + if (_entryMode.value == DatePickerEntryMode.input || + _entryMode.value == DatePickerEntryMode.inputOnly) { final FormState form = _formKey.currentState!; if (!form.validate()) { setState(() => _autovalidateMode.value = AutovalidateMode.always); @@ -424,7 +430,8 @@ class _DatePickerDialogState extends State with RestorationMix } } - static const Map _formShortcutMap = { + static const Map _formShortcutMap = + { // Pressing enter on the field will move focus to the next field or control. SingleActivator(LogicalKeyboardKey.enter): NextFocusIntent(), }; @@ -433,12 +440,14 @@ class _DatePickerDialogState extends State with RestorationMix Widget build(BuildContext context) { final ThemeData theme = Theme.of(context); final ColorScheme colorScheme = theme.colorScheme; - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); final Orientation orientation = MediaQuery.of(context).orientation; final TextTheme textTheme = theme.textTheme; // Constrain the textScaleFactor to the largest supported value to prevent // layout issues. - final double textScaleFactor = math.min(MediaQuery.of(context).textScaleFactor, 1.3); + final double textScaleFactor = + math.min(MediaQuery.of(context).textScaleFactor, 1.3); final String dateText = localizations.formatMediumDate(_selectedDate.value); final Color onPrimarySurface = colorScheme.brightness == Brightness.light @@ -486,7 +495,9 @@ class _DatePickerDialogState extends State with RestorationMix autovalidateMode: _autovalidateMode.value, child: Container( padding: const EdgeInsets.symmetric(horizontal: 24), - height: orientation == Orientation.portrait ? _inputFormPortraitHeight : _inputFormLandscapeHeight, + height: orientation == Orientation.portrait + ? _inputFormPortraitHeight + : _inputFormLandscapeHeight, child: Shortcuts( shortcuts: _formShortcutMap, child: Column( @@ -559,7 +570,8 @@ class _DatePickerDialogState extends State with RestorationMix final Size dialogSize = _dialogSize(context) * textScaleFactor; return Dialog( - insetPadding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0), + insetPadding: + const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0), clipBehavior: Clip.antiAlias, child: AnimatedContainer( width: dialogSize.width, @@ -611,10 +623,11 @@ class _DatePickerDialogState extends State with RestorationMix // A restorable [DatePickerEntryMode] value. // // This serializes each entry as a unique `int` value. -class _RestorableDatePickerEntryMode extends RestorableValue { +class _RestorableDatePickerEntryMode + extends RestorableValue { _RestorableDatePickerEntryMode( - DatePickerEntryMode defaultValue, - ) : _defaultValue = defaultValue; + DatePickerEntryMode defaultValue, + ) : _defaultValue = defaultValue; final DatePickerEntryMode _defaultValue; @@ -628,7 +641,8 @@ class _RestorableDatePickerEntryMode extends RestorableValue DatePickerEntryMode.values[data! as int]; + DatePickerEntryMode fromPrimitives(Object? data) => + DatePickerEntryMode.values[data! as int]; @override Object? toPrimitives() => value.index; @@ -639,8 +653,8 @@ class _RestorableDatePickerEntryMode extends RestorableValue { _RestorableAutovalidateMode( - AutovalidateMode defaultValue, - ) : _defaultValue = defaultValue; + AutovalidateMode defaultValue, + ) : _defaultValue = defaultValue; final AutovalidateMode _defaultValue; @@ -654,7 +668,8 @@ class _RestorableAutovalidateMode extends RestorableValue { } @override - AutovalidateMode fromPrimitives(Object? data) => AutovalidateMode.values[data! as int]; + AutovalidateMode fromPrimitives(Object? data) => + AutovalidateMode.values[data! as int]; @override Object? toPrimitives() => value.index; @@ -672,7 +687,6 @@ class _RestorableAutovalidateMode extends RestorableValue { /// [helpText], [orientation], [icon], [onIconPressed] are required and must be /// non-null. class _DatePickerHeader extends StatelessWidget { - /// Creates a header for use in a date picker dialog. const _DatePickerHeader({ required this.helpText, @@ -682,7 +696,7 @@ class _DatePickerHeader extends StatelessWidget { required this.orientation, this.isShort = false, this.entryModeButton, - }) : assert(helpText != null), + }) : assert(helpText != null), assert(orientation != null), assert(isShort != null); @@ -727,8 +741,10 @@ class _DatePickerHeader extends StatelessWidget { // The header should use the primary color in light themes and surface color in dark final bool isDark = colorScheme.brightness == Brightness.dark; - final Color primarySurfaceColor = isDark ? colorScheme.surface : colorScheme.primary; - final Color onPrimarySurfaceColor = isDark ? colorScheme.onSurface : colorScheme.onPrimary; + final Color primarySurfaceColor = + isDark ? colorScheme.surface : colorScheme.primary; + final Color onPrimarySurfaceColor = + isDark ? colorScheme.onSurface : colorScheme.onPrimary; final TextStyle? helpStyle = textTheme.bodyMedium?.copyWith( color: onPrimarySurfaceColor, @@ -768,8 +784,7 @@ class _DatePickerHeader extends StatelessWidget { Row( children: [ Expanded(child: title), - if (entryModeButton != null) - entryModeButton!, + if (entryModeButton != null) entryModeButton!, ], ), ], @@ -935,37 +950,40 @@ Future showDateRangePicker({ }) async { assert(context != null); assert( - initialDateRange == null || (initialDateRange.start != null && initialDateRange.end != null), - 'initialDateRange must be null or have non-null start and end dates.', + initialDateRange == null || + (initialDateRange.start != null && initialDateRange.end != null), + 'initialDateRange must be null or have non-null start and end dates.', ); assert( - initialDateRange == null || !initialDateRange.start.isAfter(initialDateRange.end), - "initialDateRange's start date must not be after it's end date.", + initialDateRange == null || + !initialDateRange.start.isAfter(initialDateRange.end), + "initialDateRange's start date must not be after it's end date.", ); - initialDateRange = initialDateRange == null ? null : DateUtils.datesOnly(initialDateRange); + initialDateRange = + initialDateRange == null ? null : DateUtils.datesOnly(initialDateRange); assert(firstDate != null); firstDate = DateUtils.dateOnly(firstDate); assert(lastDate != null); lastDate = DateUtils.dateOnly(lastDate); assert( - !lastDate.isBefore(firstDate), - 'lastDate $lastDate must be on or after firstDate $firstDate.', + !lastDate.isBefore(firstDate), + 'lastDate $lastDate must be on or after firstDate $firstDate.', ); assert( - initialDateRange == null || !initialDateRange.start.isBefore(firstDate), - "initialDateRange's start date must be on or after firstDate $firstDate.", + initialDateRange == null || !initialDateRange.start.isBefore(firstDate), + "initialDateRange's start date must be on or after firstDate $firstDate.", ); assert( - initialDateRange == null || !initialDateRange.end.isBefore(firstDate), - "initialDateRange's end date must be on or after firstDate $firstDate.", + initialDateRange == null || !initialDateRange.end.isBefore(firstDate), + "initialDateRange's end date must be on or after firstDate $firstDate.", ); assert( - initialDateRange == null || !initialDateRange.start.isAfter(lastDate), - "initialDateRange's start date must be on or before lastDate $lastDate.", + initialDateRange == null || !initialDateRange.start.isAfter(lastDate), + "initialDateRange's start date must be on or before lastDate $lastDate.", ); assert( - initialDateRange == null || !initialDateRange.end.isAfter(lastDate), - "initialDateRange's end date must be on or before lastDate $lastDate.", + initialDateRange == null || !initialDateRange.end.isAfter(lastDate), + "initialDateRange's end date must be on or before lastDate $lastDate.", ); currentDate = DateUtils.dateOnly(currentDate ?? DateTime.now()); assert(initialEntryMode != null); @@ -1024,12 +1042,13 @@ Future showDateRangePicker({ /// is in the same year as the `endDate` then it will use the short month /// day format (i.e. 'Jan 21'). Otherwise it will return the short date format /// (i.e. 'Jan 21, 2020'). -String _formatRangeStartDate(MaterialLocalizations localizations, DateTime? startDate, DateTime? endDate) { +String _formatRangeStartDate(MaterialLocalizations localizations, + DateTime? startDate, DateTime? endDate) { return startDate == null ? localizations.dateRangeStartLabel : (endDate == null || startDate.year == endDate.year) - ? localizations.formatShortMonthDay(startDate) - : localizations.formatShortDate(startDate); + ? localizations.formatShortMonthDay(startDate) + : localizations.formatShortDate(startDate); } /// Returns an locale-appropriate string to describe the end of a date range. @@ -1038,12 +1057,15 @@ String _formatRangeStartDate(MaterialLocalizations localizations, DateTime? star /// is in the same year as the `startDate` and the `currentDate` then it will /// just use the short month day format (i.e. 'Jan 21'), otherwise it will /// include the year (i.e. 'Jan 21, 2020'). -String _formatRangeEndDate(MaterialLocalizations localizations, DateTime? startDate, DateTime? endDate, DateTime currentDate) { +String _formatRangeEndDate(MaterialLocalizations localizations, + DateTime? startDate, DateTime? endDate, DateTime currentDate) { return endDate == null ? localizations.dateRangeEndLabel - : (startDate != null && startDate.year == endDate.year && startDate.year == currentDate.year) - ? localizations.formatShortMonthDay(endDate) - : localizations.formatShortDate(endDate); + : (startDate != null && + startDate.year == endDate.year && + startDate.year == currentDate.year) + ? localizations.formatShortMonthDay(endDate) + : localizations.formatShortDate(endDate); } /// A Material-style date range picker dialog. @@ -1199,13 +1221,18 @@ class DateRangePickerDialog extends StatefulWidget { State createState() => _DateRangePickerDialogState(); } -class _DateRangePickerDialogState extends State with RestorationMixin { - late final _RestorableDatePickerEntryMode _entryMode = _RestorableDatePickerEntryMode(widget.initialEntryMode); - late final RestorableDateTimeN _selectedStart = RestorableDateTimeN(widget.initialDateRange?.start); - late final RestorableDateTimeN _selectedEnd = RestorableDateTimeN(widget.initialDateRange?.end); +class _DateRangePickerDialogState extends State + with RestorationMixin { + late final _RestorableDatePickerEntryMode _entryMode = + _RestorableDatePickerEntryMode(widget.initialEntryMode); + late final RestorableDateTimeN _selectedStart = + RestorableDateTimeN(widget.initialDateRange?.start); + late final RestorableDateTimeN _selectedEnd = + RestorableDateTimeN(widget.initialDateRange?.end); final RestorableBool _autoValidate = RestorableBool(false); final GlobalKey _calendarPickerKey = GlobalKey(); - final GlobalKey<_InputDateRangePickerState> _inputPickerKey = GlobalKey<_InputDateRangePickerState>(); + final GlobalKey<_InputDateRangePickerState> _inputPickerKey = + GlobalKey<_InputDateRangePickerState>(); @override String? get restorationId => widget.restorationId; @@ -1219,7 +1246,8 @@ class _DateRangePickerDialogState extends State with Rest } void _handleOk() { - if (_entryMode.value == DatePickerEntryMode.input || _entryMode.value == DatePickerEntryMode.inputOnly) { + if (_entryMode.value == DatePickerEntryMode.input || + _entryMode.value == DatePickerEntryMode.inputOnly) { final _InputDateRangePickerState picker = _inputPickerKey.currentState!; if (!picker.validate()) { setState(() { @@ -1248,19 +1276,23 @@ class _DateRangePickerDialogState extends State with Rest break; case DatePickerEntryMode.input: - // Validate the range dates + // Validate the range dates if (_selectedStart.value != null && - (_selectedStart.value!.isBefore(widget.firstDate) || _selectedStart.value!.isAfter(widget.lastDate))) { + (_selectedStart.value!.isBefore(widget.firstDate) || + _selectedStart.value!.isAfter(widget.lastDate))) { _selectedStart.value = null; // With no valid start date, having an end date makes no sense for the UI. _selectedEnd.value = null; } if (_selectedEnd.value != null && - (_selectedEnd.value!.isBefore(widget.firstDate) || _selectedEnd.value!.isAfter(widget.lastDate))) { + (_selectedEnd.value!.isBefore(widget.firstDate) || + _selectedEnd.value!.isAfter(widget.lastDate))) { _selectedEnd.value = null; } // If invalid range (start after end), then just use the start date - if (_selectedStart.value != null && _selectedEnd.value != null && _selectedStart.value!.isAfter(_selectedEnd.value!)) { + if (_selectedStart.value != null && + _selectedEnd.value != null && + _selectedStart.value!.isAfter(_selectedEnd.value!)) { _selectedEnd.value = null; } _entryMode.value = DatePickerEntryMode.calendar; @@ -1282,14 +1314,16 @@ class _DateRangePickerDialogState extends State with Rest setState(() => _selectedEnd.value = date); } - bool get _hasSelectedDateRange => _selectedStart.value != null && _selectedEnd.value != null; + bool get _hasSelectedDateRange => + _selectedStart.value != null && _selectedEnd.value != null; @override Widget build(BuildContext context) { final MediaQueryData mediaQuery = MediaQuery.of(context); final Orientation orientation = mediaQuery.orientation; final double textScaleFactor = math.min(mediaQuery.textScaleFactor, 1.3); - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); final ColorScheme colors = Theme.of(context).colorScheme; final Color onPrimarySurface = colors.brightness == Brightness.light ? colors.onPrimary @@ -1319,12 +1353,12 @@ class _DateRangePickerDialogState extends State with Rest onCancel: _handleCancel, entryModeButton: showEntryModeButton ? IconButton( - icon: const Icon(Icons.edit), - padding: EdgeInsets.zero, - color: onPrimarySurface, - tooltip: localizations.inputDateModeButtonLabel, - onPressed: _handleEntryModeToggle, - ) + icon: const Icon(Icons.edit), + padding: EdgeInsets.zero, + color: onPrimarySurface, + tooltip: localizations.inputDateModeButtonLabel, + onPressed: _handleEntryModeToggle, + ) : null, confirmText: widget.saveText ?? localizations.saveButtonLabel, helpText: widget.helpText ?? localizations.dateRangePickerHelpText, @@ -1376,20 +1410,23 @@ class _DateRangePickerDialogState extends State with Rest onCancel: _handleCancel, entryModeButton: showEntryModeButton ? IconButton( - icon: const Icon(Icons.calendar_today), - padding: EdgeInsets.zero, - color: onPrimarySurface, - tooltip: localizations.calendarModeButtonLabel, - onPressed: _handleEntryModeToggle, - ) + icon: const Icon(Icons.calendar_today), + padding: EdgeInsets.zero, + color: onPrimarySurface, + tooltip: localizations.calendarModeButtonLabel, + onPressed: _handleEntryModeToggle, + ) : null, confirmText: widget.confirmText ?? localizations.okButtonLabel, cancelText: widget.cancelText ?? localizations.cancelButtonLabel, helpText: widget.helpText ?? localizations.dateRangePickerHelpText, ); final DialogThemeData dialogTheme = Theme.of(context).dialogTheme; - size = orientation == Orientation.portrait ? _inputPortraitDialogSize : _inputRangeLandscapeDialogSize; - insetPadding = const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0); + size = orientation == Orientation.portrait + ? _inputPortraitDialogSize + : _inputRangeLandscapeDialogSize; + insetPadding = + const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0); shape = dialogTheme.shape; elevation = dialogTheme.elevation ?? 24; break; @@ -1452,21 +1489,27 @@ class _CalendarRangePickerDialog extends StatelessWidget { Widget build(BuildContext context) { final ThemeData theme = Theme.of(context); final ColorScheme colorScheme = theme.colorScheme; - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); final Orientation orientation = MediaQuery.of(context).orientation; final TextTheme textTheme = theme.textTheme; final Color headerForeground = colorScheme.brightness == Brightness.light ? colorScheme.onPrimary : colorScheme.onSurface; final Color headerDisabledForeground = headerForeground.withOpacity(0.38); - final String startDateText = _formatRangeStartDate(localizations, selectedStartDate, selectedEndDate); - final String endDateText = _formatRangeEndDate(localizations, selectedStartDate, selectedEndDate, DateTime.now()); + final String startDateText = _formatRangeStartDate( + localizations, selectedStartDate, selectedEndDate); + final String endDateText = _formatRangeEndDate( + localizations, selectedStartDate, selectedEndDate, DateTime.now()); final TextStyle? headlineStyle = textTheme.headlineSmall; final TextStyle? startDateStyle = headlineStyle?.apply( - color: selectedStartDate != null ? headerForeground : headerDisabledForeground, + color: selectedStartDate != null + ? headerForeground + : headerDisabledForeground, ); final TextStyle? endDateStyle = headlineStyle?.apply( - color: selectedEndDate != null ? headerForeground : headerDisabledForeground, + color: + selectedEndDate != null ? headerForeground : headerDisabledForeground, ); final TextStyle saveButtonStyle = textTheme.titleMedium!.apply( color: onConfirm != null ? headerForeground : headerDisabledForeground, @@ -1493,7 +1536,8 @@ class _CalendarRangePickerDialog extends StatelessWidget { bottom: PreferredSize( preferredSize: const Size(double.infinity, 64), child: Row(children: [ - SizedBox(width: MediaQuery.of(context).size.width < 360 ? 42 : 72), + SizedBox( + width: MediaQuery.of(context).size.width < 360 ? 42 : 72), Expanded( child: Semantics( label: '$helpText $startDateText to $endDateText', @@ -1516,7 +1560,9 @@ class _CalendarRangePickerDialog extends StatelessWidget { maxLines: 1, overflow: TextOverflow.ellipsis, ), - Text(' – ', style: startDateStyle, + Text( + ' – ', + style: startDateStyle, ), Flexible( child: Text( @@ -1533,7 +1579,8 @@ class _CalendarRangePickerDialog extends StatelessWidget { ), ), ), - if (orientation == Orientation.portrait && entryModeButton != null) + if (orientation == Orientation.portrait && + entryModeButton != null) Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0), child: entryModeButton, @@ -1577,20 +1624,25 @@ class _CalendarDateRangePicker extends StatefulWidget { DateTime? currentDate, required this.onStartDateChanged, required this.onEndDateChanged, - }) : initialStartDate = initialStartDate != null ? DateUtils.dateOnly(initialStartDate) : null, - initialEndDate = initialEndDate != null ? DateUtils.dateOnly(initialEndDate) : null, + }) : initialStartDate = initialStartDate != null + ? DateUtils.dateOnly(initialStartDate) + : null, + initialEndDate = + initialEndDate != null ? DateUtils.dateOnly(initialEndDate) : null, assert(firstDate != null), assert(lastDate != null), firstDate = DateUtils.dateOnly(firstDate), lastDate = DateUtils.dateOnly(lastDate), currentDate = DateUtils.dateOnly(currentDate ?? DateTime.now()) { assert( - this.initialStartDate == null || this.initialEndDate == null || !this.initialStartDate!.isAfter(initialEndDate!), - 'initialStartDate must be on or before initialEndDate.', + this.initialStartDate == null || + this.initialEndDate == null || + !this.initialStartDate!.isAfter(initialEndDate!), + 'initialStartDate must be on or before initialEndDate.', ); assert( - !this.lastDate.isBefore(this.firstDate), - 'firstDate must be on or before lastDate.', + !this.lastDate.isBefore(this.firstDate), + 'firstDate must be on or before lastDate.', ); } @@ -1616,7 +1668,8 @@ class _CalendarDateRangePicker extends StatefulWidget { final ValueChanged? onEndDateChanged; @override - _CalendarDateRangePickerState createState() => _CalendarDateRangePickerState(); + _CalendarDateRangePickerState createState() => + _CalendarDateRangePickerState(); } class _CalendarDateRangePickerState extends State<_CalendarDateRangePicker> { @@ -1665,7 +1718,8 @@ class _CalendarDateRangePickerState extends State<_CalendarDateRangePicker> { } } - int get _numberOfMonths => DateUtils.monthDelta(widget.firstDate, widget.lastDate) + 1; + int get _numberOfMonths => + DateUtils.monthDelta(widget.firstDate, widget.lastDate) + 1; void _vibrate() { switch (Theme.of(context).platform) { @@ -1693,7 +1747,9 @@ class _CalendarDateRangePickerState extends State<_CalendarDateRangePicker> { void _updateSelection(DateTime date) { _vibrate(); setState(() { - if (_startDate != null && _endDate == null && !date.isBefore(_startDate!)) { + if (_startDate != null && + _endDate == null && + !date.isBefore(_startDate!)) { _endDate = date; widget.onEndDateChanged?.call(_endDate); } else { @@ -1707,15 +1763,20 @@ class _CalendarDateRangePickerState extends State<_CalendarDateRangePicker> { }); } - Widget _buildMonthItem(BuildContext context, int index, bool beforeInitialMonth) { + Widget _buildMonthItem( + BuildContext context, int index, bool beforeInitialMonth) { final int monthIndex = beforeInitialMonth ? _initialMonthIndex - index - 1 : _initialMonthIndex + index; - final DateTime month = DateUtils.addMonthsToMonthDate(widget.firstDate, monthIndex); + final DateTime month = + DateUtils.addMonthsToMonthDate(widget.firstDate, monthIndex); return Stack( alignment: Alignment.center, children: [ - Text("${month.month}",style: TextStyle(fontSize: 200,color: Colors.grey.withOpacity(0.1)),), + Text( + "${month.month}", + style: TextStyle(fontSize: 200, color: Colors.grey.withOpacity(0.1)), + ), _MonthItem( selectedDateStart: _startDate, selectedDateEnd: _endDate, @@ -1741,7 +1802,8 @@ class _CalendarDateRangePickerState extends State<_CalendarDateRangePicker> { child: _CalendarKeyboardNavigator( firstDate: widget.firstDate, lastDate: widget.lastDate, - initialFocusedDay: _startDate ?? widget.initialStartDate ?? widget.currentDate, + initialFocusedDay: + _startDate ?? widget.initialStartDate ?? widget.currentDate, // In order to prevent performance issues when displaying the // correct initial month, 2 `SliverList`s are used to split the // months. The first item in the second SliverList is the initial @@ -1753,14 +1815,16 @@ class _CalendarDateRangePickerState extends State<_CalendarDateRangePicker> { slivers: [ SliverList( delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) => _buildMonthItem(context, index, true), + (BuildContext context, int index) => + _buildMonthItem(context, index, true), childCount: _initialMonthIndex, ), ), SliverList( key: sliverAfterKey, delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) => _buildMonthItem(context, index, false), + (BuildContext context, int index) => + _buildMonthItem(context, index, false), childCount: _numberOfMonths - _initialMonthIndex, ), ), @@ -1787,16 +1851,22 @@ class _CalendarKeyboardNavigator extends StatefulWidget { final DateTime initialFocusedDay; @override - _CalendarKeyboardNavigatorState createState() => _CalendarKeyboardNavigatorState(); + _CalendarKeyboardNavigatorState createState() => + _CalendarKeyboardNavigatorState(); } -class _CalendarKeyboardNavigatorState extends State<_CalendarKeyboardNavigator> { - - final Map _shortcutMap = const { - SingleActivator(LogicalKeyboardKey.arrowLeft): DirectionalFocusIntent(TraversalDirection.left), - SingleActivator(LogicalKeyboardKey.arrowRight): DirectionalFocusIntent(TraversalDirection.right), - SingleActivator(LogicalKeyboardKey.arrowDown): DirectionalFocusIntent(TraversalDirection.down), - SingleActivator(LogicalKeyboardKey.arrowUp): DirectionalFocusIntent(TraversalDirection.up), +class _CalendarKeyboardNavigatorState + extends State<_CalendarKeyboardNavigator> { + final Map _shortcutMap = + const { + SingleActivator(LogicalKeyboardKey.arrowLeft): + DirectionalFocusIntent(TraversalDirection.left), + SingleActivator(LogicalKeyboardKey.arrowRight): + DirectionalFocusIntent(TraversalDirection.right), + SingleActivator(LogicalKeyboardKey.arrowDown): + DirectionalFocusIntent(TraversalDirection.down), + SingleActivator(LogicalKeyboardKey.arrowUp): + DirectionalFocusIntent(TraversalDirection.up), }; late Map> _actionMap; late FocusNode _dayGridFocus; @@ -1808,9 +1878,12 @@ class _CalendarKeyboardNavigatorState extends State<_CalendarKeyboardNavigator> super.initState(); _actionMap = >{ - NextFocusIntent: CallbackAction(onInvoke: _handleGridNextFocus), - PreviousFocusIntent: CallbackAction(onInvoke: _handleGridPreviousFocus), - DirectionalFocusIntent: CallbackAction(onInvoke: _handleDirectionFocus), + NextFocusIntent: + CallbackAction(onInvoke: _handleGridNextFocus), + PreviousFocusIntent: CallbackAction( + onInvoke: _handleGridPreviousFocus), + DirectionalFocusIntent: CallbackAction( + onInvoke: _handleDirectionFocus), }; _dayGridFocus = FocusNode(debugLabel: 'Day Grid'); } @@ -1853,7 +1926,8 @@ class _CalendarKeyboardNavigatorState extends State<_CalendarKeyboardNavigator> void _handleDirectionFocus(DirectionalFocusIntent intent) { assert(_focusedDay != null); setState(() { - final DateTime? nextDate = _nextDateInDirection(_focusedDay!, intent.direction); + final DateTime? nextDate = + _nextDateInDirection(_focusedDay!, intent.direction); if (nextDate != null) { _focusedDay = nextDate; _dayTraversalDirection = intent.direction; @@ -1861,14 +1935,16 @@ class _CalendarKeyboardNavigatorState extends State<_CalendarKeyboardNavigator> }); } - static const Map _directionOffset = { + static const Map _directionOffset = + { TraversalDirection.up: -DateTime.daysPerWeek, TraversalDirection.right: 1, TraversalDirection.down: DateTime.daysPerWeek, TraversalDirection.left: -1, }; - int _dayDirectionOffset(TraversalDirection traversalDirection, TextDirection textDirection) { + int _dayDirectionOffset( + TraversalDirection traversalDirection, TextDirection textDirection) { // Swap left and right if the text direction if RTL if (textDirection == TextDirection.rtl) { if (traversalDirection == TraversalDirection.left) { @@ -1882,8 +1958,10 @@ class _CalendarKeyboardNavigatorState extends State<_CalendarKeyboardNavigator> DateTime? _nextDateInDirection(DateTime date, TraversalDirection direction) { final TextDirection textDirection = Directionality.of(context); - final DateTime nextDate = DateUtils.addDaysToDate(date, _dayDirectionOffset(direction, textDirection)); - if (!nextDate.isBefore(widget.firstDate) && !nextDate.isAfter(widget.lastDate)) { + final DateTime nextDate = DateUtils.addDaysToDate( + date, _dayDirectionOffset(direction, textDirection)); + if (!nextDate.isBefore(widget.firstDate) && + !nextDate.isAfter(widget.lastDate)) { return nextDate; } return null; @@ -1921,7 +1999,8 @@ class _FocusedDate extends InheritedWidget { @override bool updateShouldNotify(_FocusedDate oldWidget) { - return !DateUtils.isSameDay(date, oldWidget.date) || scrollDirection != oldWidget.scrollDirection; + return !DateUtils.isSameDay(date, oldWidget.date) || + scrollDirection != oldWidget.scrollDirection; } static _FocusedDate? of(BuildContext context) { @@ -1929,7 +2008,6 @@ class _FocusedDate extends InheritedWidget { } } - class _DayHeaders extends StatelessWidget { const _DayHeaders(); @@ -1951,7 +2029,8 @@ class _DayHeaders extends StatelessWidget { /// _ _ _ _ 1 2 3 /// 4 5 6 7 8 9 10 /// ``` - List _getDayHeaders(TextStyle headerStyle, MaterialLocalizations localizations) { + List _getDayHeaders( + TextStyle headerStyle, MaterialLocalizations localizations) { final List result = []; for (int i = localizations.firstDayOfWeekIndex; true; i = (i + 1) % 7) { final String weekday = localizations.narrowWeekdays[i]; @@ -1969,8 +2048,10 @@ class _DayHeaders extends StatelessWidget { Widget build(BuildContext context) { final ThemeData themeData = Theme.of(context); final ColorScheme colorScheme = themeData.colorScheme; - final TextStyle textStyle = themeData.textTheme.bodyMedium!.apply(color: colorScheme.onSurface); - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final TextStyle textStyle = + themeData.textTheme.bodyMedium!.apply(color: colorScheme.onSurface); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); final List labels = _getDayHeaders(textStyle, localizations); // Add leading and trailing containers for edges of the custom grid layout. @@ -2001,7 +2082,9 @@ class _MonthItemGridDelegate extends SliverGridDelegate { @override SliverGridLayout getLayout(SliverConstraints constraints) { - final double tileWidth = (constraints.crossAxisExtent - 2 * _horizontalPadding) / DateTime.daysPerWeek; + final double tileWidth = + (constraints.crossAxisExtent - 2 * _horizontalPadding) / + DateTime.daysPerWeek; return _MonthSliverGridLayout( crossAxisCount: DateTime.daysPerWeek + 2, dayChildWidth: tileWidth, @@ -2028,7 +2111,7 @@ class _MonthSliverGridLayout extends SliverGridLayout { required this.dayChildWidth, required this.edgeChildWidth, required this.reverseCrossAxis, - }) : assert(crossAxisCount != null && crossAxisCount > 0), + }) : assert(crossAxisCount != null && crossAxisCount > 0), assert(dayChildWidth != null && dayChildWidth >= 0), assert(edgeChildWidth != null && edgeChildWidth >= 0), assert(reverseCrossAxis != null); @@ -2077,10 +2160,9 @@ class _MonthSliverGridLayout extends SliverGridLayout { double _getCrossAxisOffset(double crossAxisStart, bool isPadding) { if (reverseCrossAxis) { - return - ((crossAxisCount - 2) * dayChildWidth + 2 * edgeChildWidth) - - crossAxisStart - - (isPadding ? edgeChildWidth : dayChildWidth); + return ((crossAxisCount - 2) * dayChildWidth + 2 * edgeChildWidth) - + crossAxisStart - + (isPadding ? edgeChildWidth : dayChildWidth); } return crossAxisStart; } @@ -2088,8 +2170,10 @@ class _MonthSliverGridLayout extends SliverGridLayout { @override SliverGridGeometry getGeometryForChildIndex(int index) { final int adjustedIndex = index % crossAxisCount; - final bool isEdge = adjustedIndex == 0 || adjustedIndex == crossAxisCount - 1; - final double crossAxisStart = math.max(0, (adjustedIndex - 1) * dayChildWidth + edgeChildWidth); + final bool isEdge = + adjustedIndex == 0 || adjustedIndex == crossAxisCount - 1; + final double crossAxisStart = + math.max(0, (adjustedIndex - 1) * dayChildWidth + edgeChildWidth); return SliverGridGeometry( scrollOffset: (index ~/ crossAxisCount) * _rowHeight, @@ -2123,14 +2207,18 @@ class _MonthItem extends StatefulWidget { required this.lastDate, required this.displayedMonth, this.dragStartBehavior = DragStartBehavior.start, - }) : assert(firstDate != null), + }) : assert(firstDate != null), assert(lastDate != null), assert(!firstDate.isAfter(lastDate)), - assert(selectedDateStart == null || !selectedDateStart.isBefore(firstDate)), + assert(selectedDateStart == null || + !selectedDateStart.isBefore(firstDate)), assert(selectedDateEnd == null || !selectedDateEnd.isBefore(firstDate)), - assert(selectedDateStart == null || !selectedDateStart.isAfter(lastDate)), + assert( + selectedDateStart == null || !selectedDateStart.isAfter(lastDate)), assert(selectedDateEnd == null || !selectedDateEnd.isAfter(lastDate)), - assert(selectedDateStart == null || selectedDateEnd == null || !selectedDateStart.isAfter(selectedDateEnd)), + assert(selectedDateStart == null || + selectedDateEnd == null || + !selectedDateStart.isAfter(selectedDateEnd)), assert(currentDate != null), assert(onChanged != null), assert(displayedMonth != null), @@ -2191,10 +2279,12 @@ class _MonthItemState extends State<_MonthItem> { @override void initState() { super.initState(); - final int daysInMonth = DateUtils.getDaysInMonth(widget.displayedMonth.year, widget.displayedMonth.month); + final int daysInMonth = DateUtils.getDaysInMonth( + widget.displayedMonth.year, widget.displayedMonth.month); _dayFocusNodes = List.generate( daysInMonth, - (int index) => FocusNode(skipTraversal: true, debugLabel: 'Day ${index + 1}'), + (int index) => + FocusNode(skipTraversal: true, debugLabel: 'Day ${index + 1}'), ); } @@ -2203,7 +2293,8 @@ class _MonthItemState extends State<_MonthItem> { super.didChangeDependencies(); // Check to see if the focused date is in this month, if so focus it. final DateTime? focusedDate = _FocusedDate.of(context)?.date; - if (focusedDate != null && DateUtils.isSameMonth(widget.displayedMonth, focusedDate)) { + if (focusedDate != null && + DateUtils.isSameMonth(widget.displayedMonth, focusedDate)) { _dayFocusNodes[focusedDate.day - 1].requestFocus(); } } @@ -2222,9 +2313,11 @@ class _MonthItemState extends State<_MonthItem> { void _dayFocusChanged(bool focused) { if (focused) { - final TraversalDirection? focusDirection = _FocusedDate.of(context)?.scrollDirection; + final TraversalDirection? focusDirection = + _FocusedDate.of(context)?.scrollDirection; if (focusDirection != null) { - ScrollPositionAlignmentPolicy policy = ScrollPositionAlignmentPolicy.explicit; + ScrollPositionAlignmentPolicy policy = + ScrollPositionAlignmentPolicy.explicit; switch (focusDirection) { case TraversalDirection.up: case TraversalDirection.left: @@ -2235,7 +2328,8 @@ class _MonthItemState extends State<_MonthItem> { policy = ScrollPositionAlignmentPolicy.keepVisibleAtEnd; break; } - Scrollable.ensureVisible(primaryFocus!.context!, + Scrollable.ensureVisible( + primaryFocus!.context!, duration: _monthScrollDuration, alignmentPolicy: policy, ); @@ -2243,23 +2337,29 @@ class _MonthItemState extends State<_MonthItem> { } } - Widget _buildDayItem(BuildContext context, DateTime dayToBuild, int firstDayOffset, int daysInMonth) { + Widget _buildDayItem(BuildContext context, DateTime dayToBuild, + int firstDayOffset, int daysInMonth) { final ThemeData theme = Theme.of(context); final ColorScheme colorScheme = theme.colorScheme; final TextTheme textTheme = theme.textTheme; - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); final TextDirection textDirection = Directionality.of(context); final Color highlightColor = _highlightColor(context); final int day = dayToBuild.day; - final bool isDisabled = dayToBuild.isAfter(widget.lastDate) || dayToBuild.isBefore(widget.firstDate); + final bool isDisabled = dayToBuild.isAfter(widget.lastDate) || + dayToBuild.isBefore(widget.firstDate); BoxDecoration? decoration; TextStyle? itemStyle = textTheme.bodyMedium; - final bool isRangeSelected = widget.selectedDateStart != null && widget.selectedDateEnd != null; - final bool isSelectedDayStart = widget.selectedDateStart != null && dayToBuild.isAtSameMomentAs(widget.selectedDateStart!); - final bool isSelectedDayEnd = widget.selectedDateEnd != null && dayToBuild.isAtSameMomentAs(widget.selectedDateEnd!); + final bool isRangeSelected = + widget.selectedDateStart != null && widget.selectedDateEnd != null; + final bool isSelectedDayStart = widget.selectedDateStart != null && + dayToBuild.isAtSameMomentAs(widget.selectedDateStart!); + final bool isSelectedDayEnd = widget.selectedDateEnd != null && + dayToBuild.isAtSameMomentAs(widget.selectedDateEnd!); final bool isInRange = isRangeSelected && dayToBuild.isAfter(widget.selectedDateStart!) && dayToBuild.isBefore(widget.selectedDateEnd!); @@ -2275,7 +2375,8 @@ class _MonthItemState extends State<_MonthItem> { shape: BoxShape.circle, ); - if (isRangeSelected && widget.selectedDateStart != widget.selectedDateEnd) { + if (isRangeSelected && + widget.selectedDateStart != widget.selectedDateEnd) { final _HighlightPainterStyle style = isSelectedDayStart ? _HighlightPainterStyle.highlightTrailing : _HighlightPainterStyle.highlightLeading; @@ -2293,7 +2394,8 @@ class _MonthItemState extends State<_MonthItem> { textDirection: textDirection, ); } else if (isDisabled) { - itemStyle = textTheme.bodyMedium?.apply(color: colorScheme.onSurface.withOpacity(0.38)); + itemStyle = textTheme.bodyMedium + ?.apply(color: colorScheme.onSurface.withOpacity(0.38)); } else if (DateUtils.isSameDay(widget.currentDate, dayToBuild)) { // The current day gets a different text color and a circle stroke // border. @@ -2310,11 +2412,14 @@ class _MonthItemState extends State<_MonthItem> { // day of month before the rest of the date, as they are looking // for the day of month. To do that we prepend day of month to the // formatted full date. - String semanticLabel = '${localizations.formatDecimal(day)}, ${localizations.formatFullDate(dayToBuild)}'; + String semanticLabel = + '${localizations.formatDecimal(day)}, ${localizations.formatFullDate(dayToBuild)}'; if (isSelectedDayStart) { - semanticLabel = localizations.dateRangeStartDateSemanticLabel(semanticLabel); + semanticLabel = + localizations.dateRangeStartDateSemanticLabel(semanticLabel); } else if (isSelectedDayEnd) { - semanticLabel = localizations.dateRangeEndDateSemanticLabel(semanticLabel); + semanticLabel = + localizations.dateRangeEndDateSemanticLabel(semanticLabel); } Widget dayWidget = Container( @@ -2359,7 +2464,8 @@ class _MonthItemState extends State<_MonthItem> { Widget build(BuildContext context) { final ThemeData themeData = Theme.of(context); final TextTheme textTheme = themeData.textTheme; - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); final int year = widget.displayedMonth.year; final int month = widget.displayedMonth.month; final int daysInMonth = DateUtils.getDaysInMonth(year, month); @@ -2401,38 +2507,40 @@ class _MonthItemState extends State<_MonthItem> { ); final List weekList = dayItems.sublist(start, end); - final DateTime dateAfterLeadingPadding = DateTime(year, month, start - dayOffset + 1); + final DateTime dateAfterLeadingPadding = + DateTime(year, month, start - dayOffset + 1); // Only color the edge container if it is after the start date and // on/before the end date. - final bool isLeadingInRange = - !(dayOffset > 0 && i == 0) && - widget.selectedDateStart != null && - widget.selectedDateEnd != null && - dateAfterLeadingPadding.isAfter(widget.selectedDateStart!) && - !dateAfterLeadingPadding.isAfter(widget.selectedDateEnd!); + final bool isLeadingInRange = !(dayOffset > 0 && i == 0) && + widget.selectedDateStart != null && + widget.selectedDateEnd != null && + dateAfterLeadingPadding.isAfter(widget.selectedDateStart!) && + !dateAfterLeadingPadding.isAfter(widget.selectedDateEnd!); weekList.insert(0, _buildEdgeContainer(context, isLeadingInRange)); // Only add a trailing edge container if it is for a full week and not a // partial week. - if (end < dayItems.length || (end == dayItems.length && dayItems.length % DateTime.daysPerWeek == 0)) { + if (end < dayItems.length || + (end == dayItems.length && + dayItems.length % DateTime.daysPerWeek == 0)) { final DateTime dateBeforeTrailingPadding = - DateTime(year, month, end - dayOffset); + DateTime(year, month, end - dayOffset); // Only color the edge container if it is on/after the start date and // before the end date. - final bool isTrailingInRange = - widget.selectedDateStart != null && - widget.selectedDateEnd != null && - !dateBeforeTrailingPadding.isBefore(widget.selectedDateStart!) && - dateBeforeTrailingPadding.isBefore(widget.selectedDateEnd!); + final bool isTrailingInRange = widget.selectedDateStart != null && + widget.selectedDateEnd != null && + !dateBeforeTrailingPadding.isBefore(widget.selectedDateStart!) && + dateBeforeTrailingPadding.isBefore(widget.selectedDateEnd!); weekList.add(_buildEdgeContainer(context, isTrailingInRange)); } paddedDayItems.addAll(weekList); } - final double maxWidth = MediaQuery.of(context).orientation == Orientation.landscape - ? _maxCalendarWidthLandscape - : _maxCalendarWidthPortrait; + final double maxWidth = + MediaQuery.of(context).orientation == Orientation.landscape + ? _maxCalendarWidthLandscape + : _maxCalendarWidthPortrait; return Column( children: [ Container( @@ -2443,7 +2551,8 @@ class _MonthItemState extends State<_MonthItem> { child: ExcludeSemantics( child: Text( localizations.formatMonthYear(widget.displayedMonth), - style: textTheme.bodyMedium!.apply(color: themeData.colorScheme.onSurface), + style: textTheme.bodyMedium! + .apply(color: themeData.colorScheme.onSurface), ), ), ), @@ -2510,7 +2619,8 @@ class _HighlightPainter extends CustomPainter { ..style = PaintingStyle.fill; final Rect rectLeft = Rect.fromLTWH(0, 0, size.width / 2, size.height); - final Rect rectRight = Rect.fromLTWH(size.width / 2, 0, size.width / 2, size.height); + final Rect rectRight = + Rect.fromLTWH(size.width / 2, 0, size.width / 2, size.height); switch (style) { case _HighlightPainterStyle.highlightTrailing: @@ -2565,8 +2675,10 @@ class _InputDateRangePickerDialog extends StatelessWidget { final String? helpText; final Widget? entryModeButton; - String _formatDateRange(BuildContext context, DateTime? start, DateTime? end, DateTime now) { - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + String _formatDateRange( + BuildContext context, DateTime? start, DateTime? end, DateTime now) { + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); final String startText = _formatRangeStartDate(localizations, start, end); final String endText = _formatRangeEndDate(localizations, start, end, now); if (start == null || end == null) { @@ -2583,18 +2695,22 @@ class _InputDateRangePickerDialog extends StatelessWidget { Widget build(BuildContext context) { final ThemeData theme = Theme.of(context); final ColorScheme colorScheme = theme.colorScheme; - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); final Orientation orientation = MediaQuery.of(context).orientation; final TextTheme textTheme = theme.textTheme; - final Color onPrimarySurfaceColor = colorScheme.brightness == Brightness.light - ? colorScheme.onPrimary - : colorScheme.onSurface; + final Color onPrimarySurfaceColor = + colorScheme.brightness == Brightness.light + ? colorScheme.onPrimary + : colorScheme.onSurface; final TextStyle? dateStyle = orientation == Orientation.landscape ? textTheme.bodySmall?.apply(color: onPrimarySurfaceColor) : textTheme.bodyMedium?.apply(color: onPrimarySurfaceColor); - final String dateText = _formatDateRange(context, selectedStartDate, selectedEndDate, currentDate!); - final String semanticDateText = selectedStartDate != null && selectedEndDate != null + final String dateText = _formatDateRange( + context, selectedStartDate, selectedEndDate, currentDate!); + final String semanticDateText = selectedStartDate != null && + selectedEndDate != null ? '${localizations.formatMediumDate(selectedStartDate!)} – ${localizations.formatMediumDate(selectedEndDate!)}' : ''; @@ -2684,8 +2800,11 @@ class _InputDateRangePicker extends StatefulWidget { this.fieldEndLabelText, this.autofocus = false, this.autovalidate = false, - }) : initialStartDate = initialStartDate == null ? null : DateUtils.dateOnly(initialStartDate), - initialEndDate = initialEndDate == null ? null : DateUtils.dateOnly(initialEndDate), + }) : initialStartDate = initialStartDate == null + ? null + : DateUtils.dateOnly(initialStartDate), + initialEndDate = + initialEndDate == null ? null : DateUtils.dateOnly(initialEndDate), assert(firstDate != null), firstDate = DateUtils.dateOnly(firstDate), assert(lastDate != null), @@ -2785,7 +2904,8 @@ class _InputDateRangePickerState extends State<_InputDateRangePicker> { @override void didChangeDependencies() { super.didChangeDependencies(); - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); if (_startDate != null) { _startInputText = localizations.formatCompactDate(_startDate!); final bool selectText = widget.autofocus && !_autoSelected; @@ -2810,7 +2930,8 @@ class _InputDateRangePickerState extends State<_InputDateRangePicker> { final String? endError = _validateDate(_endDate); if (startError == null && endError == null) { if (_startDate!.isAfter(_endDate!)) { - startError = widget.errorInvalidRangeText ?? MaterialLocalizations.of(context).invalidDateRangeLabel; + startError = widget.errorInvalidRangeText ?? + MaterialLocalizations.of(context).invalidDateRangeLabel; } } setState(() { @@ -2821,23 +2942,29 @@ class _InputDateRangePickerState extends State<_InputDateRangePicker> { } DateTime? _parseDate(String? text) { - final MaterialLocalizations localizations = MaterialLocalizations.of(context); + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); return localizations.parseCompactDate(text); } String? _validateDate(DateTime? date) { if (date == null) { - return widget.errorFormatText ?? MaterialLocalizations.of(context).invalidDateFormatLabel; - } else if (date.isBefore(widget.firstDate) || date.isAfter(widget.lastDate)) { - return widget.errorInvalidText ?? MaterialLocalizations.of(context).dateOutOfRangeLabel; + return widget.errorFormatText ?? + MaterialLocalizations.of(context).invalidDateFormatLabel; + } else if (date.isBefore(widget.firstDate) || + date.isAfter(widget.lastDate)) { + return widget.errorInvalidText ?? + MaterialLocalizations.of(context).dateOutOfRangeLabel; } return null; } - void _updateController(TextEditingController controller, String text, bool selectText) { + void _updateController( + TextEditingController controller, String text, bool selectText) { TextEditingValue textEditingValue = controller.value.copyWith(text: text); if (selectText) { - textEditingValue = textEditingValue.copyWith(selection: TextSelection( + textEditingValue = textEditingValue.copyWith( + selection: TextSelection( baseOffset: 0, extentOffset: text.length, )); @@ -2869,8 +2996,10 @@ class _InputDateRangePickerState extends State<_InputDateRangePicker> { @override Widget build(BuildContext context) { - final MaterialLocalizations localizations = MaterialLocalizations.of(context); - final InputDecorationTheme inputTheme = Theme.of(context).inputDecorationTheme; + final MaterialLocalizations localizations = + MaterialLocalizations.of(context); + final InputDecorationThemeData inputTheme = + Theme.of(context).inputDecorationTheme; return Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -2881,7 +3010,8 @@ class _InputDateRangePickerState extends State<_InputDateRangePicker> { border: inputTheme.border ?? const UnderlineInputBorder(), filled: inputTheme.filled, hintText: widget.fieldStartHintText ?? localizations.dateHelpText, - labelText: widget.fieldStartLabelText ?? localizations.dateRangeStartLabel, + labelText: widget.fieldStartLabelText ?? + localizations.dateRangeStartLabel, errorText: _startErrorText, ), keyboardType: TextInputType.datetime, @@ -2897,7 +3027,8 @@ class _InputDateRangePickerState extends State<_InputDateRangePicker> { border: inputTheme.border ?? const UnderlineInputBorder(), filled: inputTheme.filled, hintText: widget.fieldEndHintText ?? localizations.dateHelpText, - labelText: widget.fieldEndLabelText ?? localizations.dateRangeEndLabel, + labelText: + widget.fieldEndLabelText ?? localizations.dateRangeEndLabel, errorText: _endErrorText, ), keyboardType: TextInputType.datetime, diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/node1_base.dart index ed7ae3c9f..afb2ff41e 100644 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/node1_base.dart +++ b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/node1_base.dart @@ -19,23 +19,19 @@ class WidgetInspectorDemo extends StatelessWidget { ); } - // Widget _selectButtonBuilder(BuildContext context, - // {required VoidCallback onPressed, bool? isLeftAligned}) { - // onPressed(); - // return Container(); - // } - - Widget _tapBehaviorButtonBuilder(BuildContext context, - {required VoidCallback onPressed, - required bool selectionOnTapEnabled, - required String semanticLabel}) { + Widget _tapBehaviorButtonBuilder( + BuildContext context, { + required VoidCallback onPressed, + required bool selectionOnTapEnabled, + required String semanticsLabel, + }) { return Container(); } Widget _selectButtonBuilder(BuildContext context, - {bool? isLeftAligned, - required VoidCallback onPressed, - required String semanticLabel}) { + {required VoidCallback onPressed, + required String semanticsLabel, + bool? usesDefaultAlignment}) { return Container(); } } diff --git a/pubspec.lock b/pubspec.lock index 5ab7108c5..fdaa62000 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -505,26 +505,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" + sha256: "8dcda04c3fc16c14f48a7bb586d4be1f0d1572731b6d81d51772ef47c02081e0" url: "https://pub.flutter-io.cn" source: hosted - version: "10.0.9" + version: "11.0.1" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" url: "https://pub.flutter-io.cn" source: hosted - version: "3.0.9" + version: "3.0.10" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" url: "https://pub.flutter-io.cn" source: hosted - version: "3.0.1" + version: "3.0.2" lints: dependency: transitive description: @@ -1125,10 +1125,10 @@ packages: dependency: transitive description: name: test_api - sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00" url: "https://pub.flutter-io.cn" source: hosted - version: "0.7.4" + version: "0.7.6" toggle_rotate: dependency: "direct main" description: @@ -1316,10 +1316,10 @@ packages: dependency: transitive description: name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b url: "https://pub.flutter-io.cn" source: hosted - version: "2.1.4" + version: "2.2.0" vm_service: dependency: transitive description: @@ -1424,5 +1424,5 @@ packages: source: hosted version: "3.1.3" sdks: - dart: ">=3.7.0 <4.0.0" + dart: ">=3.8.0-0 <4.0.0" flutter: ">=3.27.0" diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index a6068005f..d9665f3a7 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,15 +6,12 @@ #include "generated_plugin_registrant.h" -#include #include #include #include #include void RegisterPlugins(flutter::PluginRegistry* registry) { - FileSelectorWindowsRegisterWithRegistrar( - registry->GetRegistrarForPlugin("FileSelectorWindows")); ScreenRetrieverWindowsPluginCApiRegisterWithRegistrar( registry->GetRegistrarForPlugin("ScreenRetrieverWindowsPluginCApi")); SharePlusWindowsPluginCApiRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 7bf92b331..0cefa2b7c 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,7 +3,6 @@ # list(APPEND FLUTTER_PLUGIN_LIST - file_selector_windows screen_retriever_windows share_plus url_launcher_windows From d3f91d7f788726b0424e6c60f6461a0373ea5096 Mon Sep 17 00:00:00 2001 From: toly <1981462002@qq.com> Date: Fri, 22 Aug 2025 07:24:57 +0800 Subject: [PATCH 3/7] feature:use unit_widgets_display --- .../widget_detail/widget_detail_page.dart | 2 +- .../widget_system/widget_module/pubspec.yaml | 1 + modules/widget_system/widgets/.gitignore | 31 - modules/widget_system/widgets/.metadata | 10 - modules/widget_system/widgets/CHANGELOG.md | 3 - modules/widget_system/widgets/LICENSE | 1 - modules/widget_system/widgets/README.md | 39 - .../widgets/analysis_options.yaml | 4 - .../AboutDialog/AboutDialog_en-US.json | 1 - .../AboutDialog/AboutDialog_zh-CN.json | 1 - .../AboutListTile/AboutListTile_en-US.json | 1 - .../AboutListTile/AboutListTile_zh-CN.json | 1 - .../AbsorbPointer/AbsorbPointer_en-US.json | 1 - .../AbsorbPointer/AbsorbPointer_zh-CN.json | 1 - .../AbstractLayoutBuilder_en-US.json | 1 - .../AbstractLayoutBuilder_zh-CN.json | 1 - .../widgets/ActionChip/ActionChip_en-US.json | 1 - .../widgets/ActionChip/ActionChip_zh-CN.json | 1 - .../ActionIconTheme_en-US.json | 1 - .../ActionIconTheme_zh-CN.json | 1 - .../ActionListener/ActionListener_en-US.json | 1 - .../ActionListener/ActionListener_zh-CN.json | 1 - .../doc/widgets/Actions/Actions_en-US.json | 1 - .../doc/widgets/Actions/Actions_zh-CN.json | 1 - .../AdaptiveTextSelectionToolbar_en-US.json | 1 - .../AdaptiveTextSelectionToolbar_zh-CN.json | 1 - .../AlertDialog/AlertDialog_en-US.json | 1 - .../AlertDialog/AlertDialog_zh-CN.json | 1 - .../doc/widgets/Align/Align_en-US.json | 1 - .../doc/widgets/Align/Align_zh-CN.json | 1 - .../AlignTransition_en-US.json | 1 - .../AlignTransition_zh-CN.json | 1 - .../AndroidView/AndroidView_en-US.json | 1 - .../AndroidView/AndroidView_zh-CN.json | 1 - .../AndroidViewSurface_en-US.json | 1 - .../AndroidViewSurface_zh-CN.json | 1 - .../AnimatedAlign/AnimatedAlign_en-US.json | 1 - .../AnimatedAlign/AnimatedAlign_zh-CN.json | 1 - .../AnimatedBuilder_en-US.json | 1 - .../AnimatedBuilder_zh-CN.json | 1 - .../AnimatedContainer_en-US.json | 1 - .../AnimatedContainer_zh-CN.json | 1 - .../AnimatedCrossFade_en-US.json | 1 - .../AnimatedCrossFade_zh-CN.json | 1 - .../AnimatedDefaultTextStyle_en-US.json | 1 - .../AnimatedDefaultTextStyle_zh-CN.json | 1 - .../AnimatedFractionallySizedBox_en-US.json | 1 - .../AnimatedFractionallySizedBox_zh-CN.json | 1 - .../AnimatedGrid/AnimatedGrid_en-US.json | 1 - .../AnimatedGrid/AnimatedGrid_zh-CN.json | 1 - .../AnimatedIcon/AnimatedIcon_en-US.json | 1 - .../AnimatedIcon/AnimatedIcon_zh-CN.json | 1 - .../AnimatedList/AnimatedList_en-US.json | 1 - .../AnimatedList/AnimatedList_zh-CN.json | 1 - .../AnimatedModalBarrier_en-US.json | 1 - .../AnimatedModalBarrier_zh-CN.json | 58 - .../AnimatedOpacity_en-US.json | 49 - .../AnimatedOpacity_zh-CN.json | 1 - .../AnimatedPadding_en-US.json | 1 - .../AnimatedPadding_zh-CN.json | 1 - .../AnimatedPhysicalModel_en-US.json | 1 - .../AnimatedPhysicalModel_zh-CN.json | 1 - .../AnimatedPositioned_en-US.json | 1 - .../AnimatedPositioned_zh-CN.json | 1 - .../AnimatedPositionedDirectional_en-US.json | 1 - .../AnimatedPositionedDirectional_zh-CN.json | 1 - .../AnimatedRotation_en-US.json | 1 - .../AnimatedRotation_zh-CN.json | 1 - .../AnimatedScale/AnimatedScale_en-US.json | 1 - .../AnimatedScale/AnimatedScale_zh-CN.json | 1 - .../AnimatedSize/AnimatedSize_en-US.json | 1 - .../AnimatedSize/AnimatedSize_zh-CN.json | 1 - .../AnimatedSlide/AnimatedSlide_en-US.json | 44 - .../AnimatedSlide/AnimatedSlide_zh-CN.json | 45 - .../AnimatedSwitcher_en-US.json | 1 - .../AnimatedSwitcher_zh-CN.json | 1 - .../AnimatedTheme/AnimatedTheme_en-US.json | 1 - .../AnimatedTheme/AnimatedTheme_zh-CN.json | 1 - .../AnimatedWidget/AnimatedWidget_en-US.json | 1 - .../AnimatedWidget/AnimatedWidget_zh-CN.json | 1 - .../AnnotatedRegion_en-US.json | 1 - .../AnnotatedRegion_zh-CN.json | 1 - .../doc/widgets/AppBar/AppBar_en-US.json | 1 - .../doc/widgets/AppBar/AppBar_zh-CN.json | 1 - .../widgets/AppKitView/AppKitView_en-US.json | 1 - .../widgets/AppKitView/AppKitView_zh-CN.json | 1 - .../AspectRatio/AspectRatio_en-US.json | 1 - .../AspectRatio/AspectRatio_zh-CN.json | 1 - .../Autocomplete/Autocomplete_en-US.json | 1 - .../Autocomplete/Autocomplete_zh-CN.json | 1 - .../AutocompleteHighlightedOption_en-US.json | 1 - .../AutocompleteHighlightedOption_zh-CN.json | 1 - .../AutofillGroup/AutofillGroup_en-US.json | 1 - .../AutofillGroup/AutofillGroup_zh-CN.json | 1 - .../AutomaticKeepAlive_en-US.json | 1 - .../AutomaticKeepAlive_zh-CN.json | 1 - .../widgets/BackButton/BackButton_en-US.json | 1 - .../widgets/BackButton/BackButton_zh-CN.json | 1 - .../BackButtonIcon/BackButtonIcon_en-US.json | 1 - .../BackButtonIcon/BackButtonIcon_zh-CN.json | 1 - .../BackButtonListener_en-US.json | 1 - .../BackButtonListener_zh-CN.json | 1 - .../BackdropFilter/BackdropFilter_en-US.json | 1 - .../BackdropFilter/BackdropFilter_zh-CN.json | 1 - .../BackdropGroup/BackdropGroup_en-US.json | 1 - .../BackdropGroup/BackdropGroup_zh-CN.json | 1 - .../doc/widgets/Badge/Badge_en-US.json | 1 - .../doc/widgets/Badge/Badge_zh-CN.json | 1 - .../widgets/BadgeTheme/BadgeTheme_en-US.json | 1 - .../widgets/BadgeTheme/BadgeTheme_zh-CN.json | 1 - .../doc/widgets/Banner/Banner_en-US.json | 1 - .../doc/widgets/Banner/Banner_zh-CN.json | 1 - .../doc/widgets/Baseline/Baseline_en-US.json | 1 - .../doc/widgets/Baseline/Baseline_zh-CN.json | 1 - .../BlockSemantics/BlockSemantics_en-US.json | 1 - .../BlockSemantics/BlockSemantics_zh-CN.json | 1 - .../BottomAppBar/BottomAppBar_en-US.json | 1 - .../BottomAppBar/BottomAppBar_zh-CN.json | 1 - .../BottomNavigationBar_en-US.json | 1 - .../BottomNavigationBar_zh-CN.json | 1 - .../BottomNavigationBarTheme_en-US.json | 1 - .../BottomNavigationBarTheme_zh-CN.json | 1 - .../BottomSheet/BottomSheet_en-US.json | 1 - .../BottomSheet/BottomSheet_zh-CN.json | 1 - .../BoxScrollView/BoxScrollView_en-US.json | 1 - .../BoxScrollView/BoxScrollView_zh-CN.json | 1 - .../doc/widgets/Builder/Builder_en-US.json | 1 - .../doc/widgets/Builder/Builder_zh-CN.json | 1 - .../widgets/ButtonBar/ButtonBar_en-US.json | 1 - .../widgets/ButtonBar/ButtonBar_zh-CN.json | 1 - .../ButtonBarTheme/ButtonBarTheme_en-US.json | 1 - .../ButtonBarTheme/ButtonBarTheme_zh-CN.json | 1 - .../ButtonStyleButton_en-US.json | 1 - .../ButtonStyleButton_zh-CN.json | 84 - .../ButtonTheme/ButtonTheme_en-US.json | 1 - .../ButtonTheme/ButtonTheme_zh-CN.json | 1 - .../CalendarDatePicker_en-US.json | 1 - .../CalendarDatePicker_zh-CN.json | 1 - .../CallbackShortcuts_en-US.json | 1 - .../CallbackShortcuts_zh-CN.json | 1 - .../widgets/doc/widgets/Card/Card_en-US.json | 1 - .../widgets/doc/widgets/Card/Card_zh-CN.json | 1 - .../widgets/CardTheme/CardTheme_en-US.json | 1 - .../widgets/CardTheme/CardTheme_zh-CN.json | 1 - .../CarouselView/CarouselView_en-US.json | 1 - .../CarouselView/CarouselView_zh-CN.json | 1 - .../doc/widgets/Center/Center_en-US.json | 1 - .../doc/widgets/Center/Center_zh-CN.json | 1 - .../doc/widgets/Checkbox/Checkbox_en-US.json | 1 - .../doc/widgets/Checkbox/Checkbox_zh-CN.json | 1 - .../CheckboxListTile_en-US.json | 1 - .../CheckboxListTile_zh-CN.json | 1 - .../CheckboxMenuButton_en-US.json | 1 - .../CheckboxMenuButton_zh-CN.json | 1 - .../CheckboxTheme/CheckboxTheme_en-US.json | 1 - .../CheckboxTheme/CheckboxTheme_zh-CN.json | 1 - .../CheckedModeBanner_en-US.json | 1 - .../CheckedModeBanner_zh-CN.json | 1 - .../CheckedPopupMenuItem_en-US.json | 1 - .../CheckedPopupMenuItem_zh-CN.json | 1 - .../widgets/doc/widgets/Chip/Chip_en-US.json | 1 - .../widgets/doc/widgets/Chip/Chip_zh-CN.json | 1 - .../widgets/ChipTheme/ChipTheme_en-US.json | 1 - .../widgets/ChipTheme/ChipTheme_zh-CN.json | 1 - .../widgets/ChoiceChip/ChoiceChip_en-US.json | 1 - .../widgets/ChoiceChip/ChoiceChip_zh-CN.json | 1 - .../CircleAvatar/CircleAvatar_en-US.json | 1 - .../CircleAvatar/CircleAvatar_zh-CN.json | 1 - .../CircularProgressIndicator_en-US.json | 1 - .../CircularProgressIndicator_zh-CN.json | 67 - .../doc/widgets/ClipOval/ClipOval_en-US.json | 1 - .../doc/widgets/ClipOval/ClipOval_zh-CN.json | 1 - .../doc/widgets/ClipPath/ClipPath_en-US.json | 1 - .../doc/widgets/ClipPath/ClipPath_zh-CN.json | 1 - .../widgets/ClipRRect/ClipRRect_en-US.json | 1 - .../widgets/ClipRRect/ClipRRect_zh-CN.json | 1 - .../ClipRSuperellipse_en-US.json | 1 - .../ClipRSuperellipse_zh-CN.json | 1 - .../doc/widgets/ClipRect/ClipRect_en-US.json | 1 - .../doc/widgets/ClipRect/ClipRect_zh-CN.json | 1 - .../CloseButton/CloseButton_en-US.json | 1 - .../CloseButton/CloseButton_zh-CN.json | 1 - .../CloseButtonIcon_en-US.json | 1 - .../CloseButtonIcon_zh-CN.json | 1 - .../ColorFiltered/ColorFiltered_en-US.json | 1 - .../ColorFiltered/ColorFiltered_zh-CN.json | 1 - .../widgets/ColoredBox/ColoredBox_en-US.json | 1 - .../widgets/ColoredBox/ColoredBox_zh-CN.json | 1 - .../doc/widgets/Column/Column_en-US.json | 1 - .../doc/widgets/Column/Column_zh-CN.json | 1 - .../CompositedTransformFollower_en-US.json | 1 - .../CompositedTransformFollower_zh-CN.json | 1 - .../CompositedTransformTarget_en-US.json | 1 - .../CompositedTransformTarget_zh-CN.json | 1 - .../ConstrainedBox/ConstrainedBox_en-US.json | 1 - .../ConstrainedBox/ConstrainedBox_zh-CN.json | 1 - .../ConstrainedLayoutBuilder_en-US.json | 1 - .../ConstrainedLayoutBuilder_zh-CN.json | 1 - .../ConstraintsTransformBox_en-US.json | 1 - .../ConstraintsTransformBox_zh-CN.json | 1 - .../widgets/Container/Container_en-US.json | 1 - .../widgets/Container/Container_zh-CN.json | 1 - .../CupertinoActionSheet_en-US.json | 1 - .../CupertinoActionSheet_zh-CN.json | 1 - .../CupertinoActionSheetAction_en-US.json | 1 - .../CupertinoActionSheetAction_zh-CN.json | 1 - .../CupertinoActivityIndicator_en-US.json | 1 - .../CupertinoActivityIndicator_zh-CN.json | 1 - ...inoAdaptiveTextSelectionToolbar_en-US.json | 1 - ...inoAdaptiveTextSelectionToolbar_zh-CN.json | 1 - .../CupertinoAlertDialog_en-US.json | 1 - .../CupertinoAlertDialog_zh-CN.json | 1 - .../CupertinoApp/CupertinoApp_en-US.json | 1 - .../CupertinoApp/CupertinoApp_zh-CN.json | 1 - .../CupertinoButton_en-US.json | 1 - .../CupertinoButton_zh-CN.json | 1 - .../CupertinoCheckbox_en-US.json | 1 - .../CupertinoCheckbox_zh-CN.json | 1 - .../CupertinoContextMenu_en-US.json | 1 - .../CupertinoContextMenu_zh-CN.json | 1 - .../CupertinoContextMenuAction_en-US.json | 1 - .../CupertinoContextMenuAction_zh-CN.json | 1 - .../CupertinoDatePicker_en-US.json | 1 - .../CupertinoDatePicker_zh-CN.json | 1 - ...tinoDesktopTextSelectionToolbar_en-US.json | 1 - ...tinoDesktopTextSelectionToolbar_zh-CN.json | 1 - ...sktopTextSelectionToolbarButton_en-US.json | 1 - ...sktopTextSelectionToolbarButton_zh-CN.json | 1 - .../CupertinoDialogAction_en-US.json | 1 - .../CupertinoDialogAction_zh-CN.json | 1 - .../CupertinoFormRow_en-US.json | 1 - .../CupertinoFormRow_zh-CN.json | 1 - .../CupertinoFormSection_en-US.json | 1 - .../CupertinoFormSection_zh-CN.json | 1 - ...rtinoFullscreenDialogTransition_en-US.json | 1 - ...rtinoFullscreenDialogTransition_zh-CN.json | 1 - .../CupertinoListSection_en-US.json | 1 - .../CupertinoListSection_zh-CN.json | 1 - .../CupertinoListTile_en-US.json | 1 - .../CupertinoListTile_zh-CN.json | 1 - .../CupertinoListTileChevron_en-US.json | 1 - .../CupertinoListTileChevron_zh-CN.json | 1 - .../CupertinoMagnifier_en-US.json | 1 - .../CupertinoMagnifier_zh-CN.json | 1 - .../CupertinoNavigationBar_en-US.json | 1 - .../CupertinoNavigationBar_zh-CN.json | 1 - ...upertinoNavigationBarBackButton_en-US.json | 1 - ...upertinoNavigationBarBackButton_zh-CN.json | 1 - .../CupertinoPageScaffold_en-US.json | 1 - .../CupertinoPageScaffold_zh-CN.json | 1 - ...tinoPageScaffoldBackgroundColor_en-US.json | 1 - ...tinoPageScaffoldBackgroundColor_zh-CN.json | 1 - .../CupertinoPageTransition_en-US.json | 1 - .../CupertinoPageTransition_zh-CN.json | 1 - .../CupertinoPicker_en-US.json | 1 - .../CupertinoPicker_zh-CN.json | 1 - ...noPickerDefaultSelectionOverlay_en-US.json | 1 - ...noPickerDefaultSelectionOverlay_zh-CN.json | 1 - .../CupertinoPopupSurface_en-US.json | 1 - .../CupertinoPopupSurface_zh-CN.json | 1 - .../CupertinoRadio/CupertinoRadio_en-US.json | 1 - .../CupertinoRadio/CupertinoRadio_zh-CN.json | 1 - .../CupertinoScrollbar_en-US.json | 1 - .../CupertinoScrollbar_zh-CN.json | 1 - .../CupertinoSearchTextField_en-US.json | 1 - .../CupertinoSearchTextField_zh-CN.json | 1 - .../CupertinoSegmentedControl_en-US.json | 1 - .../CupertinoSegmentedControl_zh-CN.json | 1 - .../CupertinoSheetTransition_en-US.json | 1 - .../CupertinoSheetTransition_zh-CN.json | 1 - .../CupertinoSlider_en-US.json | 1 - .../CupertinoSlider_zh-CN.json | 1 - ...upertinoSlidingSegmentedControl_en-US.json | 1 - ...upertinoSlidingSegmentedControl_zh-CN.json | 1 - .../CupertinoSliverNavigationBar_en-US.json | 1 - .../CupertinoSliverNavigationBar_zh-CN.json | 1 - .../CupertinoSliverRefreshControl_en-US.json | 1 - .../CupertinoSliverRefreshControl_zh-CN.json | 1 - ...inoSpellCheckSuggestionsToolbar_en-US.json | 1 - ...inoSpellCheckSuggestionsToolbar_zh-CN.json | 1 - .../CupertinoSwitch_en-US.json | 1 - .../CupertinoSwitch_zh-CN.json | 1 - .../CupertinoTabBar_en-US.json | 1 - .../CupertinoTabBar_zh-CN.json | 1 - .../CupertinoTabScaffold_en-US.json | 1 - .../CupertinoTabScaffold_zh-CN.json | 1 - .../CupertinoTabView_en-US.json | 1 - .../CupertinoTabView_zh-CN.json | 1 - .../CupertinoTextField_en-US.json | 1 - .../CupertinoTextField_zh-CN.json | 1 - .../CupertinoTextFormFieldRow_en-US.json | 1 - .../CupertinoTextFormFieldRow_zh-CN.json | 1 - .../CupertinoTextMagnifier_en-US.json | 1 - .../CupertinoTextMagnifier_zh-CN.json | 1 - .../CupertinoTextSelectionToolbar_en-US.json | 1 - .../CupertinoTextSelectionToolbar_zh-CN.json | 1 - ...rtinoTextSelectionToolbarButton_en-US.json | 1 - ...rtinoTextSelectionToolbarButton_zh-CN.json | 1 - .../CupertinoTheme/CupertinoTheme_en-US.json | 1 - .../CupertinoTheme/CupertinoTheme_zh-CN.json | 1 - .../CupertinoTimerPicker_en-US.json | 1 - .../CupertinoTimerPicker_zh-CN.json | 1 - .../CupertinoUserInterfaceLevel_en-US.json | 1 - .../CupertinoUserInterfaceLevel_zh-CN.json | 1 - .../CustomMultiChildLayout_en-US.json | 1 - .../CustomMultiChildLayout_zh-CN.json | 1 - .../CustomPaint/CustomPaint_en-US.json | 1 - .../CustomPaint/CustomPaint_zh-CN.json | 1 - .../CustomScrollView_en-US.json | 1 - .../CustomScrollView_zh-CN.json | 1 - .../CustomSingleChildLayout_en-US.json | 1 - .../CustomSingleChildLayout_zh-CN.json | 1 - .../widgets/DataTable/DataTable_en-US.json | 1 - .../widgets/DataTable/DataTable_zh-CN.json | 1 - .../DataTableTheme/DataTableTheme_en-US.json | 1 - .../DataTableTheme/DataTableTheme_zh-CN.json | 1 - .../DatePickerDialog_en-US.json | 1 - .../DatePickerDialog_zh-CN.json | 1 - .../DatePickerTheme_en-US.json | 1 - .../DatePickerTheme_zh-CN.json | 1 - .../DateRangePickerDialog_en-US.json | 1 - .../DateRangePickerDialog_zh-CN.json | 1 - .../DecoratedBox/DecoratedBox_en-US.json | 1 - .../DecoratedBox/DecoratedBox_zh-CN.json | 1 - .../DecoratedBoxTransition_en-US.json | 1 - .../DecoratedBoxTransition_zh-CN.json | 1 - .../DecoratedSliver_en-US.json | 1 - .../DecoratedSliver_zh-CN.json | 1 - .../DefaultAssetBundle_en-US.json | 1 - .../DefaultAssetBundle_zh-CN.json | 1 - .../DefaultSelectionStyle_en-US.json | 1 - .../DefaultSelectionStyle_zh-CN.json | 1 - .../DefaultTabController_en-US.json | 1 - .../DefaultTabController_zh-CN.json | 1 - .../DefaultTextEditingShortcuts_en-US.json | 1 - .../DefaultTextEditingShortcuts_zh-CN.json | 1 - .../DefaultTextHeightBehavior_en-US.json | 1 - .../DefaultTextHeightBehavior_zh-CN.json | 1 - .../DefaultTextStyle_en-US.json | 1 - .../DefaultTextStyle_zh-CN.json | 1 - .../DefaultTextStyleTransition_en-US.json | 1 - .../DefaultTextStyleTransition_zh-CN.json | 1 - .../DesktopTextSelectionToolbar_en-US.json | 1 - .../DesktopTextSelectionToolbar_zh-CN.json | 1 - ...sktopTextSelectionToolbarButton_en-US.json | 1 - ...sktopTextSelectionToolbarButton_zh-CN.json | 1 - .../doc/widgets/Dialog/Dialog_en-US.json | 1 - .../doc/widgets/Dialog/Dialog_zh-CN.json | 1 - .../DialogTheme/DialogTheme_en-US.json | 1 - .../DialogTheme/DialogTheme_zh-CN.json | 1 - .../Directionality/Directionality_en-US.json | 1 - .../Directionality/Directionality_zh-CN.json | 1 - .../Dismissible/Dismissible_en-US.json | 1 - .../Dismissible/Dismissible_zh-CN.json | 1 - .../DisplayFeatureSubScreen_en-US.json | 1 - .../DisplayFeatureSubScreen_zh-CN.json | 1 - .../doc/widgets/Divider/Divider_en-US.json | 1 - .../doc/widgets/Divider/Divider_zh-CN.json | 1 - .../DividerTheme/DividerTheme_en-US.json | 1 - .../DividerTheme/DividerTheme_zh-CN.json | 1 - .../DragBoundary/DragBoundary_en-US.json | 1 - .../DragBoundary/DragBoundary_zh-CN.json | 1 - .../widgets/DragTarget/DragTarget_en-US.json | 1 - .../widgets/DragTarget/DragTarget_zh-CN.json | 1 - .../widgets/Draggable/Draggable_en-US.json | 1 - .../widgets/Draggable/Draggable_zh-CN.json | 1 - .../DraggableScrollableActuator_en-US.json | 1 - .../DraggableScrollableActuator_zh-CN.json | 1 - .../DraggableScrollableSheet_en-US.json | 1 - .../DraggableScrollableSheet_zh-CN.json | 1 - .../doc/widgets/Drawer/Drawer_en-US.json | 1 - .../doc/widgets/Drawer/Drawer_zh-CN.json | 1 - .../DrawerButton/DrawerButton_en-US.json | 1 - .../DrawerButton/DrawerButton_zh-CN.json | 1 - .../DrawerButtonIcon_en-US.json | 1 - .../DrawerButtonIcon_zh-CN.json | 1 - .../DrawerController_en-US.json | 1 - .../DrawerController_zh-CN.json | 1 - .../DrawerHeader/DrawerHeader_en-US.json | 1 - .../DrawerHeader/DrawerHeader_zh-CN.json | 1 - .../DrawerTheme/DrawerTheme_en-US.json | 1 - .../DrawerTheme/DrawerTheme_zh-CN.json | 1 - .../DropdownButton/DropdownButton_en-US.json | 1 - .../DropdownButton/DropdownButton_zh-CN.json | 1 - .../DropdownButtonFormField_en-US.json | 1 - .../DropdownButtonFormField_zh-CN.json | 1 - .../DropdownButtonHideUnderline_en-US.json | 1 - .../DropdownButtonHideUnderline_zh-CN.json | 1 - .../DropdownMenu/DropdownMenu_en-US.json | 1 - .../DropdownMenu/DropdownMenu_zh-CN.json | 1 - .../DropdownMenuItem_en-US.json | 1 - .../DropdownMenuItem_zh-CN.json | 1 - .../DropdownMenuTheme_en-US.json | 1 - .../DropdownMenuTheme_zh-CN.json | 1 - .../DualTransitionBuilder_en-US.json | 1 - .../DualTransitionBuilder_zh-CN.json | 1 - .../EditableText/EditableText_en-US.json | 1 - .../EditableText/EditableText_zh-CN.json | 1 - .../ElevatedButton/ElevatedButton_en-US.json | 1 - .../ElevatedButton/ElevatedButton_zh-CN.json | 1 - .../ElevatedButtonTheme_en-US.json | 1 - .../ElevatedButtonTheme_zh-CN.json | 1 - .../EndDrawerButton_en-US.json | 1 - .../EndDrawerButton_zh-CN.json | 1 - .../EndDrawerButtonIcon_en-US.json | 1 - .../EndDrawerButtonIcon_zh-CN.json | 1 - .../ErrorWidget/ErrorWidget_en-US.json | 1 - .../ErrorWidget/ErrorWidget_zh-CN.json | 1 - .../ExcludeFocus/ExcludeFocus_en-US.json | 1 - .../ExcludeFocus/ExcludeFocus_zh-CN.json | 1 - .../ExcludeFocusTraversal_en-US.json | 1 - .../ExcludeFocusTraversal_zh-CN.json | 1 - .../ExcludeSemantics_en-US.json | 1 - .../ExcludeSemantics_zh-CN.json | 1 - .../widgets/ExpandIcon/ExpandIcon_en-US.json | 1 - .../widgets/ExpandIcon/ExpandIcon_zh-CN.json | 1 - .../doc/widgets/Expanded/Expanded_en-US.json | 1 - .../doc/widgets/Expanded/Expanded_zh-CN.json | 1 - .../widgets/Expansible/Expansible_en-US.json | 1 - .../widgets/Expansible/Expansible_zh-CN.json | 1 - .../ExpansionPanelList_en-US.json | 1 - .../ExpansionPanelList_zh-CN.json | 1 - .../ExpansionTile/ExpansionTile_en-US.json | 1 - .../ExpansionTile/ExpansionTile_zh-CN.json | 1 - .../ExpansionTileTheme_en-US.json | 1 - .../ExpansionTileTheme_zh-CN.json | 1 - .../FadeInImage/FadeInImage_en-US.json | 1 - .../FadeInImage/FadeInImage_zh-CN.json | 1 - .../FadeTransition/FadeTransition_en-US.json | 1 - .../FadeTransition/FadeTransition_zh-CN.json | 1 - .../FilledButton/FilledButton_en-US.json | 1 - .../FilledButton/FilledButton_zh-CN.json | 1 - .../FilledButtonTheme_en-US.json | 1 - .../FilledButtonTheme_zh-CN.json | 1 - .../widgets/FilterChip/FilterChip_en-US.json | 1 - .../widgets/FilterChip/FilterChip_zh-CN.json | 1 - .../widgets/FittedBox/FittedBox_en-US.json | 1 - .../widgets/FittedBox/FittedBox_zh-CN.json | 1 - .../widgets/doc/widgets/Flex/Flex_en-US.json | 1 - .../widgets/doc/widgets/Flex/Flex_zh-CN.json | 1 - .../doc/widgets/Flexible/Flexible_en-US.json | 1 - .../doc/widgets/Flexible/Flexible_zh-CN.json | 1 - .../FlexibleSpaceBar_en-US.json | 1 - .../FlexibleSpaceBar_zh-CN.json | 1 - .../FlexibleSpaceBarSettings_en-US.json | 1 - .../FlexibleSpaceBarSettings_zh-CN.json | 1 - .../FloatingActionButton_en-US.json | 1 - .../FloatingActionButton_zh-CN.json | 1 - .../widgets/doc/widgets/Flow/Flow_en-US.json | 1 - .../widgets/doc/widgets/Flow/Flow_zh-CN.json | 1 - .../FlutterLogo/FlutterLogo_en-US.json | 1 - .../FlutterLogo/FlutterLogo_zh-CN.json | 1 - .../doc/widgets/Focus/Focus_en-US.json | 1 - .../doc/widgets/Focus/Focus_zh-CN.json | 1 - .../widgets/FocusScope/FocusScope_en-US.json | 1 - .../widgets/FocusScope/FocusScope_zh-CN.json | 1 - .../FocusTraversalGroup_en-US.json | 1 - .../FocusTraversalGroup_zh-CN.json | 1 - .../FocusTraversalOrder_en-US.json | 1 - .../FocusTraversalOrder_zh-CN.json | 1 - .../FocusableActionDetector_en-US.json | 1 - .../FocusableActionDetector_zh-CN.json | 1 - .../widgets/doc/widgets/Form/Form_en-US.json | 1 - .../widgets/doc/widgets/Form/Form_zh-CN.json | 1 - .../widgets/FormField/FormField_en-US.json | 1 - .../widgets/FormField/FormField_zh-CN.json | 1 - .../FractionalTranslation_en-US.json | 1 - .../FractionalTranslation_zh-CN.json | 1 - .../FractionallySizedBox_en-US.json | 1 - .../FractionallySizedBox_zh-CN.json | 1 - .../FutureBuilder/FutureBuilder_en-US.json | 1 - .../FutureBuilder/FutureBuilder_zh-CN.json | 1 - .../GestureDetector_en-US.json | 1 - .../GestureDetector_zh-CN.json | 1 - .../GlowingOverscrollIndicator_en-US.json | 1 - .../GlowingOverscrollIndicator_zh-CN.json | 1 - .../widgets/GridPaper/GridPaper_en-US.json | 1 - .../widgets/GridPaper/GridPaper_zh-CN.json | 1 - .../doc/widgets/GridTile/GridTile_en-US.json | 1 - .../doc/widgets/GridTile/GridTile_zh-CN.json | 1 - .../GridTileBar/GridTileBar_en-US.json | 1 - .../GridTileBar/GridTileBar_zh-CN.json | 1 - .../doc/widgets/GridView/GridView_en-US.json | 1 - .../doc/widgets/GridView/GridView_zh-CN.json | 1 - .../widgets/doc/widgets/Hero/Hero_en-US.json | 1 - .../widgets/doc/widgets/Hero/Hero_zh-CN.json | 1 - .../HeroControllerScope_en-US.json | 1 - .../HeroControllerScope_zh-CN.json | 1 - .../doc/widgets/HeroMode/HeroMode_en-US.json | 1 - .../doc/widgets/HeroMode/HeroMode_zh-CN.json | 1 - .../HtmlElementView_en-US.json | 1 - .../HtmlElementView_zh-CN.json | 1 - .../widgets/doc/widgets/Icon/Icon_en-US.json | 1 - .../widgets/doc/widgets/Icon/Icon_zh-CN.json | 1 - .../widgets/IconButton/IconButton_en-US.json | 1 - .../widgets/IconButton/IconButton_zh-CN.json | 1 - .../IconButtonTheme_en-US.json | 1 - .../IconButtonTheme_zh-CN.json | 1 - .../widgets/IconTheme/IconTheme_en-US.json | 1 - .../widgets/IconTheme/IconTheme_zh-CN.json | 1 - .../IgnoreBaseline/IgnoreBaseline_en-US.json | 1 - .../IgnoreBaseline/IgnoreBaseline_zh-CN.json | 1 - .../IgnorePointer/IgnorePointer_en-US.json | 1 - .../IgnorePointer/IgnorePointer_zh-CN.json | 1 - .../doc/widgets/Image/Image_en-US.json | 1 - .../doc/widgets/Image/Image_zh-CN.json | 1 - .../ImageFiltered/ImageFiltered_en-US.json | 1 - .../ImageFiltered/ImageFiltered_zh-CN.json | 1 - .../widgets/ImageIcon/ImageIcon_en-US.json | 1 - .../widgets/ImageIcon/ImageIcon_zh-CN.json | 1 - .../ImgElementPlatformView_en-US.json | 1 - .../ImgElementPlatformView_zh-CN.json | 1 - .../ImplicitlyAnimatedWidget_en-US.json | 1 - .../ImplicitlyAnimatedWidget_zh-CN.json | 1 - .../IndexedSemantics_en-US.json | 1 - .../IndexedSemantics_zh-CN.json | 1 - .../IndexedStack/IndexedStack_en-US.json | 1 - .../IndexedStack/IndexedStack_zh-CN.json | 1 - .../InheritedCupertinoTheme_en-US.json | 1 - .../InheritedCupertinoTheme_zh-CN.json | 1 - .../InheritedModel/InheritedModel_en-US.json | 1 - .../InheritedModel/InheritedModel_zh-CN.json | 1 - .../InheritedNotifier_en-US.json | 1 - .../InheritedNotifier_zh-CN.json | 1 - .../InheritedTheme/InheritedTheme_en-US.json | 1 - .../InheritedTheme/InheritedTheme_zh-CN.json | 1 - .../InheritedWidget_en-US.json | 1 - .../InheritedWidget_zh-CN.json | 1 - .../widgets/doc/widgets/Ink/Ink_en-US.json | 1 - .../widgets/doc/widgets/Ink/Ink_zh-CN.json | 1 - .../InkResponse/InkResponse_en-US.json | 1 - .../InkResponse/InkResponse_zh-CN.json | 1 - .../doc/widgets/InkWell/InkWell_en-US.json | 1 - .../doc/widgets/InkWell/InkWell_zh-CN.json | 1 - .../widgets/InputChip/InputChip_en-US.json | 1 - .../widgets/InputChip/InputChip_zh-CN.json | 1 - .../InputDatePickerFormField_en-US.json | 1 - .../InputDatePickerFormField_zh-CN.json | 1 - .../InputDecorator/InputDecorator_en-US.json | 1 - .../InputDecorator/InputDecorator_zh-CN.json | 1 - .../InspectorButton_en-US.json | 1 - .../InspectorButton_zh-CN.json | 1 - .../InteractiveViewer_en-US.json | 1 - .../InteractiveViewer_zh-CN.json | 1 - .../IntrinsicHeight_en-US.json | 1 - .../IntrinsicHeight_zh-CN.json | 1 - .../IntrinsicWidth/IntrinsicWidth_en-US.json | 1 - .../IntrinsicWidth/IntrinsicWidth_zh-CN.json | 1 - .../widgets/KeepAlive/KeepAlive_en-US.json | 1 - .../widgets/KeepAlive/KeepAlive_zh-CN.json | 1 - .../KeyboardListener_en-US.json | 1 - .../KeyboardListener_zh-CN.json | 1 - .../KeyedSubtree/KeyedSubtree_en-US.json | 1 - .../KeyedSubtree/KeyedSubtree_zh-CN.json | 1 - .../LayoutBuilder/LayoutBuilder_en-US.json | 1 - .../LayoutBuilder/LayoutBuilder_zh-CN.json | 1 - .../doc/widgets/LayoutId/LayoutId_en-US.json | 1 - .../doc/widgets/LayoutId/LayoutId_zh-CN.json | 1 - .../LeafRenderObjectWidget_en-US.json | 1 - .../LeafRenderObjectWidget_zh-CN.json | 1 - .../LicensePage/LicensePage_en-US.json | 1 - .../LicensePage/LicensePage_zh-CN.json | 1 - .../widgets/LimitedBox/LimitedBox_en-US.json | 1 - .../widgets/LimitedBox/LimitedBox_zh-CN.json | 1 - .../LinearProgressIndicator_en-US.json | 1 - .../LinearProgressIndicator_zh-CN.json | 1 - .../doc/widgets/ListBody/ListBody_en-US.json | 1 - .../doc/widgets/ListBody/ListBody_zh-CN.json | 1 - .../doc/widgets/ListTile/ListTile_en-US.json | 1 - .../doc/widgets/ListTile/ListTile_zh-CN.json | 1 - .../ListTileTheme/ListTileTheme_en-US.json | 1 - .../ListTileTheme/ListTileTheme_zh-CN.json | 1 - .../doc/widgets/ListView/ListView_en-US.json | 1 - .../doc/widgets/ListView/ListView_zh-CN.json | 1 - .../ListWheelScrollView_en-US.json | 1 - .../ListWheelScrollView_zh-CN.json | 1 - .../ListWheelViewport_en-US.json | 1 - .../ListWheelViewport_zh-CN.json | 1 - .../ListenableBuilder_en-US.json | 1 - .../ListenableBuilder_zh-CN.json | 1 - .../doc/widgets/Listener/Listener_en-US.json | 1 - .../doc/widgets/Listener/Listener_zh-CN.json | 1 - .../Localizations/Localizations_en-US.json | 1 - .../Localizations/Localizations_zh-CN.json | 1 - .../LongPressDraggable_en-US.json | 1 - .../LongPressDraggable_zh-CN.json | 1 - .../LookupBoundary/LookupBoundary_en-US.json | 1 - .../LookupBoundary/LookupBoundary_zh-CN.json | 1 - .../widgets/Magnifier/Magnifier_en-US.json | 1 - .../widgets/Magnifier/Magnifier_zh-CN.json | 1 - .../doc/widgets/Material/Material_en-US.json | 1 - .../doc/widgets/Material/Material_zh-CN.json | 1 - .../MaterialApp/MaterialApp_en-US.json | 1 - .../MaterialApp/MaterialApp_zh-CN.json | 1 - .../MaterialBanner/MaterialBanner_en-US.json | 1 - .../MaterialBanner/MaterialBanner_zh-CN.json | 1 - .../MaterialBannerTheme_en-US.json | 1 - .../MaterialBannerTheme_zh-CN.json | 1 - .../MaterialButton/MaterialButton_en-US.json | 1 - .../MaterialButton/MaterialButton_zh-CN.json | 1 - .../MatrixTransition_en-US.json | 1 - .../MatrixTransition_zh-CN.json | 1 - .../widgets/MediaQuery/MediaQuery_en-US.json | 1 - .../widgets/MediaQuery/MediaQuery_zh-CN.json | 1 - .../MenuAcceleratorCallbackBinding_en-US.json | 1 - .../MenuAcceleratorCallbackBinding_zh-CN.json | 1 - .../MenuAcceleratorLabel_en-US.json | 1 - .../MenuAcceleratorLabel_zh-CN.json | 1 - .../widgets/MenuAnchor/MenuAnchor_en-US.json | 1 - .../widgets/MenuAnchor/MenuAnchor_zh-CN.json | 1 - .../doc/widgets/MenuBar/MenuBar_en-US.json | 1 - .../doc/widgets/MenuBar/MenuBar_zh-CN.json | 1 - .../MenuBarTheme/MenuBarTheme_en-US.json | 1 - .../MenuBarTheme/MenuBarTheme_zh-CN.json | 1 - .../MenuButtonTheme_en-US.json | 1 - .../MenuButtonTheme_zh-CN.json | 1 - .../MenuItemButton/MenuItemButton_en-US.json | 1 - .../MenuItemButton/MenuItemButton_zh-CN.json | 1 - .../widgets/MenuTheme/MenuTheme_en-US.json | 1 - .../widgets/MenuTheme/MenuTheme_zh-CN.json | 1 - .../MergeSemantics/MergeSemantics_en-US.json | 1 - .../MergeSemantics/MergeSemantics_zh-CN.json | 1 - .../MergeableMaterial_en-US.json | 1 - .../MergeableMaterial_zh-CN.json | 1 - .../doc/widgets/MetaData/MetaData_en-US.json | 1 - .../doc/widgets/MetaData/MetaData_zh-CN.json | 1 - .../ModalBarrier/ModalBarrier_en-US.json | 1 - .../ModalBarrier/ModalBarrier_zh-CN.json | 1 - .../MouseRegion/MouseRegion_en-US.json | 1 - .../MouseRegion/MouseRegion_zh-CN.json | 1 - .../MultiChildRenderObjectWidget_en-US.json | 1 - .../MultiChildRenderObjectWidget_zh-CN.json | 1 - .../NavigationBar/NavigationBar_en-US.json | 1 - .../NavigationBar/NavigationBar_zh-CN.json | 1 - .../NavigationBarTheme_en-US.json | 1 - .../NavigationBarTheme_zh-CN.json | 1 - .../NavigationDestination_en-US.json | 1 - .../NavigationDestination_zh-CN.json | 1 - .../NavigationDrawer_en-US.json | 1 - .../NavigationDrawer_zh-CN.json | 1 - .../NavigationDrawerDestination_en-US.json | 1 - .../NavigationDrawerDestination_zh-CN.json | 1 - .../NavigationDrawerTheme_en-US.json | 1 - .../NavigationDrawerTheme_zh-CN.json | 1 - .../NavigationIndicator_en-US.json | 1 - .../NavigationIndicator_zh-CN.json | 1 - .../NavigationRail/NavigationRail_en-US.json | 1 - .../NavigationRail/NavigationRail_zh-CN.json | 1 - .../NavigationRailTheme_en-US.json | 1 - .../NavigationRailTheme_zh-CN.json | 1 - .../NavigationToolbar_en-US.json | 1 - .../NavigationToolbar_zh-CN.json | 1 - .../widgets/Navigator/Navigator_en-US.json | 1 - .../widgets/Navigator/Navigator_zh-CN.json | 1 - .../NavigatorPopHandler_en-US.json | 1 - .../NavigatorPopHandler_zh-CN.json | 1 - .../NestedScrollView_en-US.json | 1 - .../NestedScrollView_zh-CN.json | 1 - .../NestedScrollViewViewport_en-US.json | 1 - .../NestedScrollViewViewport_zh-CN.json | 1 - .../NotificationListener_en-US.json | 1 - .../NotificationListener_zh-CN.json | 1 - .../ObstructingPreferredSizeWidget_en-US.json | 1 - .../ObstructingPreferredSizeWidget_zh-CN.json | 1 - .../doc/widgets/Offstage/Offstage_en-US.json | 1 - .../doc/widgets/Offstage/Offstage_zh-CN.json | 1 - .../doc/widgets/Opacity/Opacity_en-US.json | 1 - .../doc/widgets/Opacity/Opacity_zh-CN.json | 1 - .../OrientationBuilder_en-US.json | 1 - .../OrientationBuilder_zh-CN.json | 1 - .../OutlinedButton/OutlinedButton_en-US.json | 1 - .../OutlinedButton/OutlinedButton_zh-CN.json | 1 - .../OutlinedButtonTheme_en-US.json | 1 - .../OutlinedButtonTheme_zh-CN.json | 1 - .../OverflowBar/OverflowBar_en-US.json | 1 - .../OverflowBar/OverflowBar_zh-CN.json | 1 - .../OverflowBox/OverflowBox_en-US.json | 1 - .../OverflowBox/OverflowBox_zh-CN.json | 1 - .../doc/widgets/Overlay/Overlay_en-US.json | 1 - .../doc/widgets/Overlay/Overlay_zh-CN.json | 1 - .../OverlayPortal/OverlayPortal_en-US.json | 1 - .../OverlayPortal/OverlayPortal_zh-CN.json | 1 - .../doc/widgets/Padding/Padding_en-US.json | 1 - .../doc/widgets/Padding/Padding_zh-CN.json | 1 - .../PageStorage/PageStorage_en-US.json | 1 - .../PageStorage/PageStorage_zh-CN.json | 1 - .../doc/widgets/PageView/PageView_en-US.json | 1 - .../doc/widgets/PageView/PageView_zh-CN.json | 1 - .../PaginatedDataTable_en-US.json | 1 - .../PaginatedDataTable_zh-CN.json | 1 - .../ParentDataWidget_en-US.json | 1 - .../ParentDataWidget_zh-CN.json | 1 - .../PerformanceOverlay_en-US.json | 1 - .../PerformanceOverlay_zh-CN.json | 1 - .../PhysicalModel/PhysicalModel_en-US.json | 1 - .../PhysicalModel/PhysicalModel_zh-CN.json | 1 - .../PhysicalShape/PhysicalShape_en-US.json | 1 - .../PhysicalShape/PhysicalShape_zh-CN.json | 1 - .../PinnedHeaderSliver_en-US.json | 1 - .../PinnedHeaderSliver_zh-CN.json | 1 - .../Placeholder/Placeholder_en-US.json | 1 - .../Placeholder/Placeholder_zh-CN.json | 1 - .../PlatformMenuBar_en-US.json | 1 - .../PlatformMenuBar_zh-CN.json | 1 - ...formSelectableRegionContextMenu_en-US.json | 1 - ...formSelectableRegionContextMenu_zh-CN.json | 1 - .../PlatformViewLink_en-US.json | 1 - .../PlatformViewLink_zh-CN.json | 1 - .../PlatformViewSurface_en-US.json | 1 - .../PlatformViewSurface_zh-CN.json | 1 - .../doc/widgets/PopScope/PopScope_en-US.json | 1 - .../doc/widgets/PopScope/PopScope_zh-CN.json | 1 - .../PopupMenuButton_en-US.json | 1 - .../PopupMenuButton_zh-CN.json | 1 - .../PopupMenuDivider_en-US.json | 1 - .../PopupMenuDivider_zh-CN.json | 1 - .../PopupMenuEntry/PopupMenuEntry_en-US.json | 1 - .../PopupMenuEntry/PopupMenuEntry_zh-CN.json | 1 - .../PopupMenuItem/PopupMenuItem_en-US.json | 1 - .../PopupMenuItem/PopupMenuItem_zh-CN.json | 1 - .../PopupMenuTheme/PopupMenuTheme_en-US.json | 1 - .../PopupMenuTheme/PopupMenuTheme_zh-CN.json | 1 - .../widgets/Positioned/Positioned_en-US.json | 1 - .../widgets/Positioned/Positioned_zh-CN.json | 1 - .../PositionedDirectional_en-US.json | 1 - .../PositionedDirectional_zh-CN.json | 1 - .../PositionedTransition_en-US.json | 1 - .../PositionedTransition_zh-CN.json | 1 - .../PreferredSize/PreferredSize_en-US.json | 1 - .../PreferredSize/PreferredSize_zh-CN.json | 1 - .../PreferredSizeWidget_en-US.json | 1 - .../PreferredSizeWidget_zh-CN.json | 1 - .../PrimaryScrollController_en-US.json | 1 - .../PrimaryScrollController_zh-CN.json | 1 - .../ProgressIndicator_en-US.json | 1 - .../ProgressIndicator_zh-CN.json | 1 - .../ProgressIndicatorTheme_en-US.json | 1 - .../ProgressIndicatorTheme_zh-CN.json | 1 - .../ProxyWidget/ProxyWidget_en-US.json | 1 - .../ProxyWidget/ProxyWidget_zh-CN.json | 1 - .../doc/widgets/Radio/Radio_en-US.json | 1 - .../doc/widgets/Radio/Radio_zh-CN.json | 1 - .../RadioListTile/RadioListTile_en-US.json | 1 - .../RadioListTile/RadioListTile_zh-CN.json | 1 - .../RadioMenuButton_en-US.json | 1 - .../RadioMenuButton_zh-CN.json | 1 - .../widgets/RadioTheme/RadioTheme_en-US.json | 1 - .../widgets/RadioTheme/RadioTheme_zh-CN.json | 1 - .../RangeSlider/RangeSlider_en-US.json | 1 - .../RangeSlider/RangeSlider_zh-CN.json | 1 - .../RawAutocomplete_en-US.json | 1 - .../RawAutocomplete_zh-CN.json | 1 - .../doc/widgets/RawChip/RawChip_en-US.json | 1 - .../doc/widgets/RawChip/RawChip_zh-CN.json | 1 - .../RawGestureDetector_en-US.json | 1 - .../RawGestureDetector_zh-CN.json | 1 - .../doc/widgets/RawImage/RawImage_en-US.json | 1 - .../doc/widgets/RawImage/RawImage_zh-CN.json | 1 - .../RawKeyboardListener_en-US.json | 1 - .../RawKeyboardListener_zh-CN.json | 1 - .../RawMagnifier/RawMagnifier_en-US.json | 1 - .../RawMagnifier/RawMagnifier_zh-CN.json | 1 - .../RawMaterialButton_en-US.json | 1 - .../RawMaterialButton_zh-CN.json | 1 - .../RawMenuAnchor/RawMenuAnchor_en-US.json | 1 - .../RawMenuAnchor/RawMenuAnchor_zh-CN.json | 1 - .../RawMenuAnchorGroup_en-US.json | 1 - .../RawMenuAnchorGroup_zh-CN.json | 1 - .../RawScrollbar/RawScrollbar_en-US.json | 1 - .../RawScrollbar/RawScrollbar_zh-CN.json | 1 - .../doc/widgets/RawView/RawView_en-US.json | 1 - .../doc/widgets/RawView/RawView_zh-CN.json | 1 - .../RawWebImage/RawWebImage_en-US.json | 1 - .../RawWebImage/RawWebImage_zh-CN.json | 1 - .../RefreshIndicator_en-US.json | 1 - .../RefreshIndicator_zh-CN.json | 1 - .../RefreshProgressIndicator_en-US.json | 1 - .../RefreshProgressIndicator_zh-CN.json | 1 - .../RelativePositionedTransition_en-US.json | 1 - .../RelativePositionedTransition_zh-CN.json | 1 - .../RenderObjectToWidgetAdapter_en-US.json | 1 - .../RenderObjectToWidgetAdapter_zh-CN.json | 1 - .../RenderObjectWidget_en-US.json | 1 - .../RenderObjectWidget_zh-CN.json | 1 - ...derableDelayedDragStartListener_en-US.json | 1 - ...derableDelayedDragStartListener_zh-CN.json | 1 - .../ReorderableDragStartListener_en-US.json | 1 - .../ReorderableDragStartListener_zh-CN.json | 1 - .../ReorderableList_en-US.json | 1 - .../ReorderableList_zh-CN.json | 1 - .../ReorderableListView_en-US.json | 1 - .../ReorderableListView_zh-CN.json | 1 - .../RepaintBoundary_en-US.json | 1 - .../RepaintBoundary_zh-CN.json | 1 - .../RestorationScope_en-US.json | 1 - .../RestorationScope_zh-CN.json | 1 - .../doc/widgets/RichText/RichText_en-US.json | 1 - .../doc/widgets/RichText/RichText_zh-CN.json | 1 - .../RootRestorationScope_en-US.json | 1 - .../RootRestorationScope_zh-CN.json | 1 - .../widgets/RootWidget/RootWidget_en-US.json | 1 - .../widgets/RootWidget/RootWidget_zh-CN.json | 1 - .../widgets/RotatedBox/RotatedBox_en-US.json | 1 - .../widgets/RotatedBox/RotatedBox_zh-CN.json | 1 - .../RotationTransition_en-US.json | 1 - .../RotationTransition_zh-CN.json | 1 - .../doc/widgets/Router/Router_en-US.json | 1 - .../doc/widgets/Router/Router_zh-CN.json | 1 - .../widgets/doc/widgets/Row/Row_en-US.json | 1 - .../widgets/doc/widgets/Row/Row_zh-CN.json | 1 - .../doc/widgets/SafeArea/SafeArea_en-US.json | 1 - .../doc/widgets/SafeArea/SafeArea_zh-CN.json | 1 - .../doc/widgets/Scaffold/Scaffold_en-US.json | 1 - .../doc/widgets/Scaffold/Scaffold_zh-CN.json | 1 - .../ScaffoldMessenger_en-US.json | 1 - .../ScaffoldMessenger_zh-CN.json | 1 - .../ScaleTransition_en-US.json | 1 - .../ScaleTransition_zh-CN.json | 1 - .../ScrollConfiguration_en-US.json | 1 - .../ScrollConfiguration_zh-CN.json | 1 - .../ScrollNotificationObserver_en-US.json | 1 - .../ScrollNotificationObserver_zh-CN.json | 1 - .../widgets/ScrollView/ScrollView_en-US.json | 1 - .../widgets/ScrollView/ScrollView_zh-CN.json | 1 - .../widgets/Scrollable/Scrollable_en-US.json | 1 - .../widgets/Scrollable/Scrollable_zh-CN.json | 1 - .../widgets/Scrollbar/Scrollbar_en-US.json | 1 - .../widgets/Scrollbar/Scrollbar_zh-CN.json | 1 - .../ScrollbarTheme/ScrollbarTheme_en-US.json | 1 - .../ScrollbarTheme/ScrollbarTheme_zh-CN.json | 1 - .../SearchAnchor/SearchAnchor_en-US.json | 1 - .../SearchAnchor/SearchAnchor_zh-CN.json | 1 - .../widgets/SearchBar/SearchBar_en-US.json | 1 - .../widgets/SearchBar/SearchBar_zh-CN.json | 1 - .../SearchBarTheme/SearchBarTheme_en-US.json | 1 - .../SearchBarTheme/SearchBarTheme_zh-CN.json | 1 - .../SearchViewTheme_en-US.json | 1 - .../SearchViewTheme_zh-CN.json | 1 - .../SegmentedButton_en-US.json | 1 - .../SegmentedButton_zh-CN.json | 1 - .../SegmentedButtonTheme_en-US.json | 1 - .../SegmentedButtonTheme_zh-CN.json | 1 - .../SelectableRegion_en-US.json | 1 - .../SelectableRegion_zh-CN.json | 1 - ...tableRegionSelectionStatusScope_en-US.json | 1 - ...tableRegionSelectionStatusScope_zh-CN.json | 1 - .../SelectableText/SelectableText_en-US.json | 1 - .../SelectableText/SelectableText_zh-CN.json | 1 - .../SelectionArea/SelectionArea_en-US.json | 1 - .../SelectionArea/SelectionArea_zh-CN.json | 1 - .../SelectionContainer_en-US.json | 1 - .../SelectionContainer_zh-CN.json | 1 - .../SelectionListener_en-US.json | 1 - .../SelectionListener_zh-CN.json | 1 - .../SelectionRegistrarScope_en-US.json | 1 - .../SelectionRegistrarScope_zh-CN.json | 1 - .../widgets/Semantics/Semantics_en-US.json | 1 - .../widgets/Semantics/Semantics_zh-CN.json | 1 - .../SemanticsDebugger_en-US.json | 1 - .../SemanticsDebugger_zh-CN.json | 1 - .../widgets/ShaderMask/ShaderMask_en-US.json | 1 - .../widgets/ShaderMask/ShaderMask_zh-CN.json | 1 - .../SharedAppData/SharedAppData_en-US.json | 1 - .../SharedAppData/SharedAppData_zh-CN.json | 1 - .../ShortcutRegistrar_en-US.json | 1 - .../ShortcutRegistrar_zh-CN.json | 1 - .../widgets/Shortcuts/Shortcuts_en-US.json | 1 - .../widgets/Shortcuts/Shortcuts_zh-CN.json | 1 - .../ShrinkWrappingViewport_en-US.json | 1 - .../ShrinkWrappingViewport_zh-CN.json | 1 - .../SimpleDialog/SimpleDialog_en-US.json | 1 - .../SimpleDialog/SimpleDialog_zh-CN.json | 1 - .../SimpleDialogOption_en-US.json | 1 - .../SimpleDialogOption_zh-CN.json | 1 - .../SingleChildRenderObjectWidget_en-US.json | 1 - .../SingleChildRenderObjectWidget_zh-CN.json | 1 - .../SingleChildScrollView_en-US.json | 1 - .../SingleChildScrollView_zh-CN.json | 1 - .../SizeChangedLayoutNotifier_en-US.json | 1 - .../SizeChangedLayoutNotifier_zh-CN.json | 1 - .../SizeTransition/SizeTransition_en-US.json | 1 - .../SizeTransition/SizeTransition_zh-CN.json | 1 - .../doc/widgets/SizedBox/SizedBox_en-US.json | 1 - .../doc/widgets/SizedBox/SizedBox_zh-CN.json | 1 - .../SizedOverflowBox_en-US.json | 1 - .../SizedOverflowBox_zh-CN.json | 1 - .../SlideTransition_en-US.json | 1 - .../SlideTransition_zh-CN.json | 1 - .../doc/widgets/Slider/Slider_en-US.json | 1 - .../doc/widgets/Slider/Slider_zh-CN.json | 1 - .../SliderTheme/SliderTheme_en-US.json | 1 - .../SliderTheme/SliderTheme_zh-CN.json | 1 - .../SliverAnimatedGrid_en-US.json | 1 - .../SliverAnimatedGrid_zh-CN.json | 1 - .../SliverAnimatedList_en-US.json | 1 - .../SliverAnimatedList_zh-CN.json | 1 - .../SliverAnimatedOpacity_en-US.json | 1 - .../SliverAnimatedOpacity_zh-CN.json | 1 - .../SliverAppBar/SliverAppBar_en-US.json | 1 - .../SliverAppBar/SliverAppBar_zh-CN.json | 1 - .../SliverConstrainedCrossAxis_en-US.json | 1 - .../SliverConstrainedCrossAxis_zh-CN.json | 1 - .../SliverCrossAxisExpanded_en-US.json | 1 - .../SliverCrossAxisExpanded_zh-CN.json | 1 - .../SliverCrossAxisGroup_en-US.json | 1 - .../SliverCrossAxisGroup_zh-CN.json | 1 - .../SliverEnsureSemantics_en-US.json | 1 - .../SliverEnsureSemantics_zh-CN.json | 1 - .../SliverFadeTransition_en-US.json | 1 - .../SliverFadeTransition_zh-CN.json | 1 - .../SliverFillRemaining_en-US.json | 1 - .../SliverFillRemaining_zh-CN.json | 1 - .../SliverFillViewport_en-US.json | 1 - .../SliverFillViewport_zh-CN.json | 1 - .../SliverFixedExtentList_en-US.json | 1 - .../SliverFixedExtentList_zh-CN.json | 1 - .../SliverFloatingHeader_en-US.json | 1 - .../SliverFloatingHeader_zh-CN.json | 1 - .../widgets/SliverGrid/SliverGrid_en-US.json | 1 - .../widgets/SliverGrid/SliverGrid_zh-CN.json | 1 - .../SliverIgnorePointer_en-US.json | 1 - .../SliverIgnorePointer_zh-CN.json | 1 - .../SliverLayoutBuilder_en-US.json | 1 - .../SliverLayoutBuilder_zh-CN.json | 1 - .../widgets/SliverList/SliverList_en-US.json | 1 - .../widgets/SliverList/SliverList_zh-CN.json | 1 - .../SliverMainAxisGroup_en-US.json | 1 - .../SliverMainAxisGroup_zh-CN.json | 1 - .../SliverMultiBoxAdaptorWidget_en-US.json | 1 - .../SliverMultiBoxAdaptorWidget_zh-CN.json | 1 - .../SliverOffstage/SliverOffstage_en-US.json | 1 - .../SliverOffstage/SliverOffstage_zh-CN.json | 1 - .../SliverOpacity/SliverOpacity_en-US.json | 1 - .../SliverOpacity/SliverOpacity_zh-CN.json | 1 - .../SliverOverlapAbsorber_en-US.json | 1 - .../SliverOverlapAbsorber_zh-CN.json | 1 - .../SliverOverlapInjector_en-US.json | 1 - .../SliverOverlapInjector_zh-CN.json | 1 - .../SliverPadding/SliverPadding_en-US.json | 1 - .../SliverPadding/SliverPadding_zh-CN.json | 1 - .../SliverPersistentHeader_en-US.json | 1 - .../SliverPersistentHeader_zh-CN.json | 1 - .../SliverPrototypeExtentList_en-US.json | 1 - .../SliverPrototypeExtentList_zh-CN.json | 1 - .../SliverReorderableList_en-US.json | 1 - .../SliverReorderableList_zh-CN.json | 1 - .../SliverResizingHeader_en-US.json | 1 - .../SliverResizingHeader_zh-CN.json | 1 - .../SliverSafeArea/SliverSafeArea_en-US.json | 1 - .../SliverSafeArea/SliverSafeArea_zh-CN.json | 1 - .../SliverToBoxAdapter_en-US.json | 1 - .../SliverToBoxAdapter_zh-CN.json | 1 - .../SliverVariedExtentList_en-US.json | 1 - .../SliverVariedExtentList_zh-CN.json | 1 - .../SliverVisibility_en-US.json | 1 - .../SliverVisibility_zh-CN.json | 1 - .../SliverWithKeepAliveWidget_en-US.json | 1 - .../SliverWithKeepAliveWidget_zh-CN.json | 1 - ...tedMultiChildRenderObjectWidget_en-US.json | 1 - ...tedMultiChildRenderObjectWidget_zh-CN.json | 1 - .../doc/widgets/SnackBar/SnackBar_en-US.json | 1 - .../doc/widgets/SnackBar/SnackBar_zh-CN.json | 1 - .../SnackBarAction/SnackBarAction_en-US.json | 1 - .../SnackBarAction/SnackBarAction_zh-CN.json | 1 - .../SnapshotWidget/SnapshotWidget_en-US.json | 1 - .../SnapshotWidget/SnapshotWidget_zh-CN.json | 1 - .../doc/widgets/Spacer/Spacer_en-US.json | 1 - .../doc/widgets/Spacer/Spacer_zh-CN.json | 1 - .../SpellCheckSuggestionsToolbar_en-US.json | 1 - .../SpellCheckSuggestionsToolbar_zh-CN.json | 1 - .../doc/widgets/Stack/Stack_en-US.json | 1 - .../doc/widgets/Stack/Stack_zh-CN.json | 1 - .../StatefulBuilder_en-US.json | 1 - .../StatefulBuilder_zh-CN.json | 1 - .../StatefulWidget/StatefulWidget_en-US.json | 1 - .../StatefulWidget/StatefulWidget_zh-CN.json | 1 - .../StatelessWidget_en-US.json | 1 - .../StatelessWidget_zh-CN.json | 1 - .../StatusTransitionWidget_en-US.json | 1 - .../StatusTransitionWidget_zh-CN.json | 1 - .../doc/widgets/Stepper/Stepper_en-US.json | 1 - .../doc/widgets/Stepper/Stepper_zh-CN.json | 1 - .../StreamBuilder/StreamBuilder_en-US.json | 1 - .../StreamBuilder/StreamBuilder_zh-CN.json | 1 - .../StreamBuilderBase_en-US.json | 1 - .../StreamBuilderBase_zh-CN.json | 1 - .../StretchingOverscrollIndicator_en-US.json | 1 - .../StretchingOverscrollIndicator_zh-CN.json | 1 - .../SubmenuButton/SubmenuButton_en-US.json | 1 - .../SubmenuButton/SubmenuButton_zh-CN.json | 1 - .../doc/widgets/Switch/Switch_en-US.json | 1 - .../doc/widgets/Switch/Switch_zh-CN.json | 1 - .../SwitchListTile/SwitchListTile_en-US.json | 1 - .../SwitchListTile/SwitchListTile_zh-CN.json | 1 - .../SwitchTheme/SwitchTheme_en-US.json | 1 - .../SwitchTheme/SwitchTheme_zh-CN.json | 1 - .../SystemContextMenu_en-US.json | 1 - .../SystemContextMenu_zh-CN.json | 1 - .../widgets/doc/widgets/Tab/Tab_en-US.json | 1 - .../widgets/doc/widgets/Tab/Tab_zh-CN.json | 1 - .../doc/widgets/TabBar/TabBar_en-US.json | 1 - .../doc/widgets/TabBar/TabBar_zh-CN.json | 1 - .../TabBarTheme/TabBarTheme_en-US.json | 1 - .../TabBarTheme/TabBarTheme_zh-CN.json | 1 - .../widgets/TabBarView/TabBarView_en-US.json | 1 - .../widgets/TabBarView/TabBarView_zh-CN.json | 1 - .../TabPageSelector_en-US.json | 1 - .../TabPageSelector_zh-CN.json | 1 - .../TabPageSelectorIndicator_en-US.json | 1 - .../TabPageSelectorIndicator_zh-CN.json | 1 - .../doc/widgets/Table/Table_en-US.json | 1 - .../doc/widgets/Table/Table_zh-CN.json | 1 - .../widgets/TableCell/TableCell_en-US.json | 1 - .../widgets/TableCell/TableCell_zh-CN.json | 1 - .../TableRowInkWell_en-US.json | 1 - .../TableRowInkWell_zh-CN.json | 1 - .../widgets/TapRegion/TapRegion_en-US.json | 1 - .../widgets/TapRegion/TapRegion_zh-CN.json | 1 - .../TapRegionSurface_en-US.json | 1 - .../TapRegionSurface_zh-CN.json | 1 - .../widgets/doc/widgets/Text/Text_en-US.json | 1 - .../widgets/doc/widgets/Text/Text_zh-CN.json | 1 - .../widgets/TextButton/TextButton_en-US.json | 1 - .../widgets/TextButton/TextButton_zh-CN.json | 1 - .../TextButtonTheme_en-US.json | 1 - .../TextButtonTheme_zh-CN.json | 1 - .../widgets/TextField/TextField_en-US.json | 1 - .../widgets/TextField/TextField_zh-CN.json | 1 - .../TextFieldTapRegion_en-US.json | 1 - .../TextFieldTapRegion_zh-CN.json | 1 - .../TextFormField/TextFormField_en-US.json | 1 - .../TextFormField/TextFormField_zh-CN.json | 1 - .../TextMagnifier/TextMagnifier_en-US.json | 1 - .../TextMagnifier/TextMagnifier_zh-CN.json | 1 - .../TextSelectionGestureDetector_en-US.json | 1 - .../TextSelectionGestureDetector_zh-CN.json | 1 - .../TextSelectionTheme_en-US.json | 1 - .../TextSelectionTheme_zh-CN.json | 1 - .../TextSelectionToolbar_en-US.json | 1 - .../TextSelectionToolbar_zh-CN.json | 1 - .../TextSelectionToolbarTextButton_en-US.json | 1 - .../TextSelectionToolbarTextButton_zh-CN.json | 1 - .../doc/widgets/Texture/Texture_en-US.json | 1 - .../doc/widgets/Texture/Texture_zh-CN.json | 1 - .../doc/widgets/Theme/Theme_en-US.json | 1 - .../doc/widgets/Theme/Theme_zh-CN.json | 1 - .../widgets/TickerMode/TickerMode_en-US.json | 1 - .../widgets/TickerMode/TickerMode_zh-CN.json | 1 - .../TimePickerDialog_en-US.json | 1 - .../TimePickerDialog_zh-CN.json | 1 - .../TimePickerTheme_en-US.json | 1 - .../TimePickerTheme_zh-CN.json | 1 - .../doc/widgets/Title/Title_en-US.json | 1 - .../doc/widgets/Title/Title_zh-CN.json | 1 - .../ToggleButtons/ToggleButtons_en-US.json | 1 - .../ToggleButtons/ToggleButtons_zh-CN.json | 1 - .../ToggleButtonsTheme_en-US.json | 1 - .../ToggleButtonsTheme_zh-CN.json | 1 - .../doc/widgets/Tooltip/Tooltip_en-US.json | 1 - .../doc/widgets/Tooltip/Tooltip_zh-CN.json | 1 - .../TooltipTheme/TooltipTheme_en-US.json | 1 - .../TooltipTheme/TooltipTheme_zh-CN.json | 1 - .../TooltipVisibility_en-US.json | 1 - .../TooltipVisibility_zh-CN.json | 1 - .../widgets/Transform/Transform_en-US.json | 1 - .../widgets/Transform/Transform_zh-CN.json | 1 - .../widgets/TreeSliver/TreeSliver_en-US.json | 1 - .../widgets/TreeSliver/TreeSliver_zh-CN.json | 1 - .../TweenAnimationBuilder_en-US.json | 1 - .../TweenAnimationBuilder_zh-CN.json | 1 - .../TwoDimensionalScrollView_en-US.json | 1 - .../TwoDimensionalScrollView_zh-CN.json | 1 - .../TwoDimensionalScrollable_en-US.json | 1 - .../TwoDimensionalScrollable_zh-CN.json | 1 - .../TwoDimensionalViewport_en-US.json | 1 - .../TwoDimensionalViewport_zh-CN.json | 1 - .../widgets/UiKitView/UiKitView_en-US.json | 1 - .../widgets/UiKitView/UiKitView_zh-CN.json | 1 - .../UnconstrainedBox_en-US.json | 1 - .../UnconstrainedBox_zh-CN.json | 1 - .../UndoHistory/UndoHistory_en-US.json | 1 - .../UndoHistory/UndoHistory_zh-CN.json | 1 - .../UniqueWidget/UniqueWidget_en-US.json | 1 - .../UniqueWidget/UniqueWidget_zh-CN.json | 1 - .../UnmanagedRestorationScope_en-US.json | 1 - .../UnmanagedRestorationScope_zh-CN.json | 1 - .../UserAccountsDrawerHeader_en-US.json | 1 - .../UserAccountsDrawerHeader_zh-CN.json | 1 - .../ValueListenableBuilder_en-US.json | 1 - .../ValueListenableBuilder_zh-CN.json | 1 - .../VerticalDivider_en-US.json | 1 - .../VerticalDivider_zh-CN.json | 1 - .../widgets/doc/widgets/View/View_en-US.json | 1 - .../widgets/doc/widgets/View/View_zh-CN.json | 1 - .../widgets/ViewAnchor/ViewAnchor_en-US.json | 1 - .../widgets/ViewAnchor/ViewAnchor_zh-CN.json | 1 - .../ViewCollection/ViewCollection_en-US.json | 1 - .../ViewCollection/ViewCollection_zh-CN.json | 1 - .../doc/widgets/Viewport/Viewport_en-US.json | 1 - .../doc/widgets/Viewport/Viewport_zh-CN.json | 1 - .../widgets/Visibility/Visibility_en-US.json | 1 - .../widgets/Visibility/Visibility_zh-CN.json | 1 - .../WidgetInspector_en-US.json | 1 - .../WidgetInspector_zh-CN.json | 1 - .../WidgetToRenderBoxAdapter_en-US.json | 1 - .../WidgetToRenderBoxAdapter_zh-CN.json | 1 - .../widgets/WidgetsApp/WidgetsApp_en-US.json | 1 - .../widgets/WidgetsApp/WidgetsApp_zh-CN.json | 1 - .../WillPopScope/WillPopScope_en-US.json | 1 - .../WillPopScope/WillPopScope_zh-CN.json | 1 - .../widgets/doc/widgets/Wrap/Wrap_en-US.json | 1 - .../widgets/doc/widgets/Wrap/Wrap_zh-CN.json | 1 - .../widgets/YearPicker/YearPicker_en-US.json | 1 - .../widgets/YearPicker/YearPicker_zh-CN.json | 1 - .../widgets/doc/widgets/translation_plan.md | 8 - .../Column/desc_de_DE.json | 26 - .../Column/desc_en_US.json | 26 - .../Column/desc_es_ES.json | 26 - .../Column/desc_fr_FR.json | 26 - .../Column/desc_it_IT.json | 26 - .../Column/desc_ja_JP.json | 26 - .../Column/desc_ko_KR.json | 26 - .../Column/desc_pt_PT.json | 26 - .../Column/desc_ru_RU.json | 26 - .../Column/desc_zh-CN.json | 26 - .../Column/node_01.dart | 56 - .../CustomMultiChildLayout/desc_de_DE.json | 22 - .../CustomMultiChildLayout/desc_en_US.json | 22 - .../CustomMultiChildLayout/desc_es_ES.json | 22 - .../CustomMultiChildLayout/desc_fr_FR.json | 22 - .../CustomMultiChildLayout/desc_it_IT.json | 22 - .../CustomMultiChildLayout/desc_ja_JP.json | 22 - .../CustomMultiChildLayout/desc_ko_KR.json | 22 - .../CustomMultiChildLayout/desc_pt_PT.json | 22 - .../CustomMultiChildLayout/desc_ru_RU.json | 22 - .../CustomMultiChildLayout/desc_zh-CN.json | 22 - .../CustomMultiChildLayout/node_01.dart | 85 - .../Flex/desc_de_DE.json | 53 - .../Flex/desc_en_US.json | 53 - .../Flex/desc_es_ES.json | 53 - .../Flex/desc_fr_FR.json | 53 - .../Flex/desc_it_IT.json | 53 - .../Flex/desc_ja_JP.json | 53 - .../Flex/desc_ko_KR.json | 53 - .../Flex/desc_pt_PT.json | 53 - .../Flex/desc_ru_RU.json | 53 - .../Flex/desc_zh-CN.json | 53 - .../Flex/node_01.dart | 58 - .../Flex/node_02.dart | 60 - .../Flex/node_03.dart | 62 - .../Flex/node_04.dart | 58 - .../Flex/node_05.dart | 58 - .../Flow/desc_de_DE.json | 29 - .../Flow/desc_en_US.json | 29 - .../Flow/desc_es_ES.json | 29 - .../Flow/desc_fr_FR.json | 29 - .../Flow/desc_it_IT.json | 29 - .../Flow/desc_ja_JP.json | 29 - .../Flow/desc_ko_KR.json | 29 - .../Flow/desc_pt_PT.json | 29 - .../Flow/desc_ru_RU.json | 29 - .../Flow/desc_zh-CN.json | 29 - .../Flow/node_01.dart | 54 - .../Flow/node_02.dart | 100 - .../IndexedStack/desc_de_DE.json | 20 - .../IndexedStack/desc_en_US.json | 20 - .../IndexedStack/desc_es_ES.json | 20 - .../IndexedStack/desc_fr_FR.json | 20 - .../IndexedStack/desc_it_IT.json | 20 - .../IndexedStack/desc_ja_JP.json | 20 - .../IndexedStack/desc_ko_KR.json | 20 - .../IndexedStack/desc_pt_PT.json | 20 - .../IndexedStack/desc_ru_RU.json | 20 - .../IndexedStack/desc_zh-CN.json | 20 - .../IndexedStack/node1_base.dart | 53 - .../ListBody/desc_de_DE.json | 20 - .../ListBody/desc_en_US.json | 20 - .../ListBody/desc_es_ES.json | 20 - .../ListBody/desc_fr_FR.json | 20 - .../ListBody/desc_it_IT.json | 20 - .../ListBody/desc_ja_JP.json | 20 - .../ListBody/desc_ko_KR.json | 20 - .../ListBody/desc_pt_PT.json | 20 - .../ListBody/desc_ru_RU.json | 20 - .../ListBody/desc_zh-CN.json | 20 - .../ListBody/node1_base.dart | 40 - .../NestedScrollViewViewport/desc_de_DE.json | 24 - .../NestedScrollViewViewport/desc_en_US.json | 24 - .../NestedScrollViewViewport/desc_es_ES.json | 24 - .../NestedScrollViewViewport/desc_fr_FR.json | 24 - .../NestedScrollViewViewport/desc_it_IT.json | 24 - .../NestedScrollViewViewport/desc_ja_JP.json | 24 - .../NestedScrollViewViewport/desc_ko_KR.json | 24 - .../NestedScrollViewViewport/desc_pt_PT.json | 24 - .../NestedScrollViewViewport/desc_ru_RU.json | 24 - .../NestedScrollViewViewport/desc_zh-CN.json | 24 - .../NestedScrollViewViewport/node1_base.dart | 27 - .../RichText/desc_de_DE.json | 26 - .../RichText/desc_en_US.json | 26 - .../RichText/desc_es_ES.json | 26 - .../RichText/desc_fr_FR.json | 26 - .../RichText/desc_it_IT.json | 26 - .../RichText/desc_ja_JP.json | 26 - .../RichText/desc_ko_KR.json | 26 - .../RichText/desc_pt_PT.json | 26 - .../RichText/desc_ru_RU.json | 26 - .../RichText/desc_zh-CN.json | 26 - .../RichText/node1_base.dart | 38 - .../RichText/node2_widget.dart | 51 - .../Row/desc_de_DE.json | 26 - .../Row/desc_en_US.json | 26 - .../Row/desc_es_ES.json | 26 - .../Row/desc_fr_FR.json | 26 - .../Row/desc_it_IT.json | 26 - .../Row/desc_ja_JP.json | 26 - .../Row/desc_ko_KR.json | 26 - .../Row/desc_pt_PT.json | 26 - .../Row/desc_ru_RU.json | 26 - .../Row/desc_zh-CN.json | 26 - .../Row/node1_base.dart | 37 - .../ShrinkWrappingViewport/desc_de_DE.json | 26 - .../ShrinkWrappingViewport/desc_en_US.json | 26 - .../ShrinkWrappingViewport/desc_es_ES.json | 26 - .../ShrinkWrappingViewport/desc_fr_FR.json | 26 - .../ShrinkWrappingViewport/desc_it_IT.json | 26 - .../ShrinkWrappingViewport/desc_ja_JP.json | 26 - .../ShrinkWrappingViewport/desc_ko_KR.json | 26 - .../ShrinkWrappingViewport/desc_pt_PT.json | 26 - .../ShrinkWrappingViewport/desc_ru_RU.json | 26 - .../ShrinkWrappingViewport/desc_zh-CN.json | 26 - .../ShrinkWrappingViewport/node1_base.dart | 26 - .../Stack/desc_de_DE.json | 33 - .../Stack/desc_en_US.json | 33 - .../Stack/desc_es_ES.json | 33 - .../Stack/desc_fr_FR.json | 33 - .../Stack/desc_it_IT.json | 33 - .../Stack/desc_ja_JP.json | 33 - .../Stack/desc_ko_KR.json | 33 - .../Stack/desc_pt_PT.json | 33 - .../Stack/desc_ru_RU.json | 33 - .../Stack/desc_zh-CN.json | 33 - .../Stack/node1_base.dart | 47 - .../Stack/node2_positioned.dart | 48 - .../Viewport/desc_de_DE.json | 27 - .../Viewport/desc_en_US.json | 27 - .../Viewport/desc_es_ES.json | 27 - .../Viewport/desc_fr_FR.json | 27 - .../Viewport/desc_it_IT.json | 27 - .../Viewport/desc_ja_JP.json | 27 - .../Viewport/desc_ko_KR.json | 27 - .../Viewport/desc_pt_PT.json | 27 - .../Viewport/desc_ru_RU.json | 27 - .../Viewport/desc_zh-CN.json | 27 - .../Viewport/node1_base.dart | 79 - .../Wrap/desc_de_DE.json | 52 - .../Wrap/desc_en_US.json | 52 - .../Wrap/desc_es_ES.json | 52 - .../Wrap/desc_fr_FR.json | 52 - .../Wrap/desc_it_IT.json | 52 - .../Wrap/desc_ja_JP.json | 52 - .../Wrap/desc_ko_KR.json | 52 - .../Wrap/desc_pt_PT.json | 52 - .../Wrap/desc_ru_RU.json | 52 - .../Wrap/desc_zh-CN.json | 52 - .../Wrap/node1_base.dart | 69 - .../Wrap/node2_alignment.dart | 72 - .../Wrap/node3_crossAxisAlignment.dart | 73 - .../Wrap/node4_textDirection.dart | 71 - .../Wrap/node5_verticalDirection.dart | 72 - .../lib/Other/ErrorWidget/desc_de_DE.json | 18 - .../lib/Other/ErrorWidget/desc_en_US.json | 18 - .../lib/Other/ErrorWidget/desc_es_ES.json | 18 - .../lib/Other/ErrorWidget/desc_fr_FR.json | 18 - .../lib/Other/ErrorWidget/desc_it_IT.json | 18 - .../lib/Other/ErrorWidget/desc_ja_JP.json | 18 - .../lib/Other/ErrorWidget/desc_ko_KR.json | 18 - .../lib/Other/ErrorWidget/desc_pt_PT.json | 18 - .../lib/Other/ErrorWidget/desc_ru_RU.json | 18 - .../lib/Other/ErrorWidget/desc_zh-CN.json | 18 - .../lib/Other/ErrorWidget/node1_base.dart | 19 - .../Other/ListWheelViewport/desc_de_DE.json | 52 - .../Other/ListWheelViewport/desc_en_US.json | 52 - .../Other/ListWheelViewport/desc_es_ES.json | 52 - .../Other/ListWheelViewport/desc_fr_FR.json | 52 - .../Other/ListWheelViewport/desc_it_IT.json | 52 - .../Other/ListWheelViewport/desc_ja_JP.json | 52 - .../Other/ListWheelViewport/desc_ko_KR.json | 52 - .../Other/ListWheelViewport/desc_pt_PT.json | 52 - .../Other/ListWheelViewport/desc_ru_RU.json | 52 - .../Other/ListWheelViewport/desc_zh-CN.json | 52 - .../Other/ListWheelViewport/node1_base.dart | 65 - .../ListWheelViewport/node2_perspective.dart | 68 - .../ListWheelViewport/node3_magnifier.dart | 70 - .../ListWheelViewport/node4_opacity.dart | 71 - .../Other/PerformanceOverlay/desc_de_DE.json | 18 - .../Other/PerformanceOverlay/desc_en_US.json | 18 - .../Other/PerformanceOverlay/desc_es_ES.json | 18 - .../Other/PerformanceOverlay/desc_fr_FR.json | 18 - .../Other/PerformanceOverlay/desc_it_IT.json | 18 - .../Other/PerformanceOverlay/desc_ja_JP.json | 18 - .../Other/PerformanceOverlay/desc_ko_KR.json | 18 - .../Other/PerformanceOverlay/desc_pt_PT.json | 18 - .../Other/PerformanceOverlay/desc_ru_RU.json | 18 - .../Other/PerformanceOverlay/desc_zh-CN.json | 18 - .../Other/PerformanceOverlay/node1_base.dart | 18 - .../lib/Other/RawImage/desc_de_DE.json | 23 - .../lib/Other/RawImage/desc_en_US.json | 23 - .../lib/Other/RawImage/desc_es_ES.json | 23 - .../lib/Other/RawImage/desc_fr_FR.json | 23 - .../lib/Other/RawImage/desc_it_IT.json | 23 - .../lib/Other/RawImage/desc_ja_JP.json | 23 - .../lib/Other/RawImage/desc_ko_KR.json | 23 - .../lib/Other/RawImage/desc_pt_PT.json | 23 - .../lib/Other/RawImage/desc_ru_RU.json | 23 - .../lib/Other/RawImage/desc_zh-CN.json | 23 - .../lib/Other/RawImage/node1_base.dart | 82 - .../desc_de_DE.json | 20 - .../desc_en_US.json | 20 - .../desc_es_ES.json | 20 - .../desc_fr_FR.json | 20 - .../desc_it_IT.json | 20 - .../desc_ja_JP.json | 20 - .../desc_ko_KR.json | 20 - .../desc_pt_PT.json | 20 - .../desc_ru_RU.json | 20 - .../desc_zh-CN.json | 20 - .../node1_base.dart | 25 - .../widgets/lib/Other/Table/desc_de_DE.json | 23 - .../widgets/lib/Other/Table/desc_en_US.json | 23 - .../widgets/lib/Other/Table/desc_es_ES.json | 23 - .../widgets/lib/Other/Table/desc_fr_FR.json | 23 - .../widgets/lib/Other/Table/desc_it_IT.json | 23 - .../widgets/lib/Other/Table/desc_ja_JP.json | 23 - .../widgets/lib/Other/Table/desc_ko_KR.json | 23 - .../widgets/lib/Other/Table/desc_pt_PT.json | 23 - .../widgets/lib/Other/Table/desc_ru_RU.json | 23 - .../widgets/lib/Other/Table/desc_zh-CN.json | 23 - .../widgets/lib/Other/Table/node1_base.dart | 72 - .../ButtonBarTheme/desc_de_DE.json | 18 - .../ButtonBarTheme/desc_en_US.json | 18 - .../ButtonBarTheme/desc_es_ES.json | 18 - .../ButtonBarTheme/desc_fr_FR.json | 18 - .../ButtonBarTheme/desc_it_IT.json | 18 - .../ButtonBarTheme/desc_ja_JP.json | 18 - .../ButtonBarTheme/desc_ko_KR.json | 18 - .../ButtonBarTheme/desc_pt_PT.json | 18 - .../ButtonBarTheme/desc_ru_RU.json | 18 - .../ButtonBarTheme/desc_zh-CN.json | 18 - .../ButtonBarTheme/node1_base.dart | 44 - .../ProxyWidget/ButtonTheme/desc_de_DE.json | 24 - .../ProxyWidget/ButtonTheme/desc_en_US.json | 24 - .../ProxyWidget/ButtonTheme/desc_es_ES.json | 24 - .../ProxyWidget/ButtonTheme/desc_fr_FR.json | 24 - .../ProxyWidget/ButtonTheme/desc_it_IT.json | 24 - .../ProxyWidget/ButtonTheme/desc_ja_JP.json | 24 - .../ProxyWidget/ButtonTheme/desc_ko_KR.json | 24 - .../ProxyWidget/ButtonTheme/desc_pt_PT.json | 24 - .../ProxyWidget/ButtonTheme/desc_ru_RU.json | 24 - .../ProxyWidget/ButtonTheme/desc_zh-CN.json | 24 - .../ProxyWidget/ButtonTheme/node1_base.dart | 31 - .../lib/ProxyWidget/ChipTheme/desc_de_DE.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_en_US.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_es_ES.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_fr_FR.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_it_IT.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_ja_JP.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_ko_KR.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_pt_PT.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_ru_RU.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_zh-CN.json | 25 - .../lib/ProxyWidget/ChipTheme/node1_base.dart | 74 - .../desc_de_DE.json | 18 - .../desc_en_US.json | 18 - .../desc_es_ES.json | 18 - .../desc_fr_FR.json | 18 - .../desc_it_IT.json | 18 - .../desc_ja_JP.json | 18 - .../desc_ko_KR.json | 18 - .../desc_pt_PT.json | 18 - .../desc_ru_RU.json | 18 - .../desc_zh-CN.json | 18 - .../node1_base.dart | 36 - .../DefaultAssetBundle/desc_de_DE.json | 20 - .../DefaultAssetBundle/desc_en_US.json | 20 - .../DefaultAssetBundle/desc_es_ES.json | 20 - .../DefaultAssetBundle/desc_fr_FR.json | 20 - .../DefaultAssetBundle/desc_it_IT.json | 20 - .../DefaultAssetBundle/desc_ja_JP.json | 20 - .../DefaultAssetBundle/desc_ko_KR.json | 20 - .../DefaultAssetBundle/desc_pt_PT.json | 20 - .../DefaultAssetBundle/desc_ru_RU.json | 20 - .../DefaultAssetBundle/desc_zh-CN.json | 20 - .../DefaultAssetBundle/node1_base.dart | 43 - .../DefaultTextStyle/desc_de_DE.json | 23 - .../DefaultTextStyle/desc_en_US.json | 23 - .../DefaultTextStyle/desc_es_ES.json | 23 - .../DefaultTextStyle/desc_fr_FR.json | 23 - .../DefaultTextStyle/desc_it_IT.json | 23 - .../DefaultTextStyle/desc_ja_JP.json | 23 - .../DefaultTextStyle/desc_ko_KR.json | 23 - .../DefaultTextStyle/desc_pt_PT.json | 23 - .../DefaultTextStyle/desc_ru_RU.json | 23 - .../DefaultTextStyle/desc_zh-CN.json | 23 - .../DefaultTextStyle/node1_base.dart | 28 - .../Directionality/desc_de_DE.json | 22 - .../Directionality/desc_en_US.json | 22 - .../Directionality/desc_es_ES.json | 22 - .../Directionality/desc_fr_FR.json | 22 - .../Directionality/desc_it_IT.json | 22 - .../Directionality/desc_ja_JP.json | 22 - .../Directionality/desc_ko_KR.json | 22 - .../Directionality/desc_pt_PT.json | 22 - .../Directionality/desc_ru_RU.json | 22 - .../Directionality/desc_zh-CN.json | 22 - .../Directionality/node1_base.dart | 55 - .../ProxyWidget/DividerTheme/desc_de_DE.json | 22 - .../ProxyWidget/DividerTheme/desc_en_US.json | 22 - .../ProxyWidget/DividerTheme/desc_es_ES.json | 22 - .../ProxyWidget/DividerTheme/desc_fr_FR.json | 22 - .../ProxyWidget/DividerTheme/desc_it_IT.json | 22 - .../ProxyWidget/DividerTheme/desc_ja_JP.json | 22 - .../ProxyWidget/DividerTheme/desc_ko_KR.json | 22 - .../ProxyWidget/DividerTheme/desc_pt_PT.json | 22 - .../ProxyWidget/DividerTheme/desc_ru_RU.json | 22 - .../ProxyWidget/DividerTheme/desc_zh-CN.json | 22 - .../ProxyWidget/DividerTheme/node1_base.dart | 46 - .../desc_de_DE.json | 18 - .../desc_en_US.json | 18 - .../desc_es_ES.json | 18 - .../desc_fr_FR.json | 18 - .../desc_it_IT.json | 18 - .../desc_ja_JP.json | 18 - .../desc_ko_KR.json | 18 - .../desc_pt_PT.json | 18 - .../desc_ru_RU.json | 18 - .../desc_zh-CN.json | 18 - .../node1_base.dart | 60 - .../lib/ProxyWidget/Expanded/desc_de_DE.json | 22 - .../lib/ProxyWidget/Expanded/desc_en_US.json | 22 - .../lib/ProxyWidget/Expanded/desc_es_ES.json | 22 - .../lib/ProxyWidget/Expanded/desc_fr_FR.json | 22 - .../lib/ProxyWidget/Expanded/desc_it_IT.json | 22 - .../lib/ProxyWidget/Expanded/desc_ja_JP.json | 22 - .../lib/ProxyWidget/Expanded/desc_ko_KR.json | 22 - .../lib/ProxyWidget/Expanded/desc_pt_PT.json | 22 - .../lib/ProxyWidget/Expanded/desc_ru_RU.json | 22 - .../lib/ProxyWidget/Expanded/desc_zh-CN.json | 22 - .../lib/ProxyWidget/Expanded/node1_base.dart | 46 - .../lib/ProxyWidget/Flexible/desc_de_DE.json | 23 - .../lib/ProxyWidget/Flexible/desc_en_US.json | 23 - .../lib/ProxyWidget/Flexible/desc_es_ES.json | 23 - .../lib/ProxyWidget/Flexible/desc_fr_FR.json | 23 - .../lib/ProxyWidget/Flexible/desc_it_IT.json | 23 - .../lib/ProxyWidget/Flexible/desc_ja_JP.json | 23 - .../lib/ProxyWidget/Flexible/desc_ko_KR.json | 23 - .../lib/ProxyWidget/Flexible/desc_pt_PT.json | 23 - .../lib/ProxyWidget/Flexible/desc_ru_RU.json | 23 - .../lib/ProxyWidget/Flexible/desc_zh-CN.json | 23 - .../lib/ProxyWidget/Flexible/node1_base.dart | 85 - .../lib/ProxyWidget/IconTheme/desc_de_DE.json | 18 - .../lib/ProxyWidget/IconTheme/desc_en_US.json | 18 - .../lib/ProxyWidget/IconTheme/desc_es_ES.json | 18 - .../lib/ProxyWidget/IconTheme/desc_fr_FR.json | 18 - .../lib/ProxyWidget/IconTheme/desc_it_IT.json | 18 - .../lib/ProxyWidget/IconTheme/desc_ja_JP.json | 18 - .../lib/ProxyWidget/IconTheme/desc_ko_KR.json | 18 - .../lib/ProxyWidget/IconTheme/desc_pt_PT.json | 18 - .../lib/ProxyWidget/IconTheme/desc_ru_RU.json | 18 - .../lib/ProxyWidget/IconTheme/desc_zh-CN.json | 18 - .../lib/ProxyWidget/IconTheme/node1_base.dart | 28 - .../InheritedModel/desc_de_DE.json | 19 - .../InheritedModel/desc_en_US.json | 19 - .../InheritedModel/desc_es_ES.json | 19 - .../InheritedModel/desc_fr_FR.json | 19 - .../InheritedModel/desc_it_IT.json | 19 - .../InheritedModel/desc_ja_JP.json | 19 - .../InheritedModel/desc_ko_KR.json | 19 - .../InheritedModel/desc_pt_PT.json | 19 - .../InheritedModel/desc_ru_RU.json | 19 - .../InheritedModel/desc_zh-CN.json | 19 - .../lib/ProxyWidget/InheritedModel/node1.dart | 251 -- .../InheritedTheme/desc_de_DE.json | 66 - .../InheritedTheme/desc_en_US.json | 66 - .../InheritedTheme/desc_es_ES.json | 66 - .../InheritedTheme/desc_fr_FR.json | 66 - .../InheritedTheme/desc_it_IT.json | 66 - .../InheritedTheme/desc_ja_JP.json | 66 - .../InheritedTheme/desc_ko_KR.json | 66 - .../InheritedTheme/desc_pt_PT.json | 66 - .../InheritedTheme/desc_ru_RU.json | 66 - .../InheritedTheme/desc_zh-CN.json | 66 - .../InheritedTheme/node1_base.dart | 52 - .../InheritedWidget/desc_de_DE.json | 36 - .../InheritedWidget/desc_en_US.json | 36 - .../InheritedWidget/desc_es_ES.json | 36 - .../InheritedWidget/desc_fr_FR.json | 36 - .../InheritedWidget/desc_it_IT.json | 36 - .../InheritedWidget/desc_ja_JP.json | 36 - .../InheritedWidget/desc_ko_KR.json | 36 - .../InheritedWidget/desc_pt_PT.json | 36 - .../InheritedWidget/desc_ru_RU.json | 36 - .../InheritedWidget/desc_zh-CN.json | 36 - .../InheritedWidget/node1_base.dart | 49 - .../InheritedWidget/node2_use.dart | 218 -- .../lib/ProxyWidget/KeepAlive/desc_de_DE.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_en_US.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_es_ES.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_fr_FR.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_it_IT.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_ja_JP.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_ko_KR.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_pt_PT.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_ru_RU.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_zh-CN.json | 20 - .../lib/ProxyWidget/KeepAlive/node1_base.dart | 113 - .../lib/ProxyWidget/LayoutId/desc_de_DE.json | 19 - .../lib/ProxyWidget/LayoutId/desc_en_US.json | 19 - .../lib/ProxyWidget/LayoutId/desc_es_ES.json | 19 - .../lib/ProxyWidget/LayoutId/desc_fr_FR.json | 19 - .../lib/ProxyWidget/LayoutId/desc_it_IT.json | 19 - .../lib/ProxyWidget/LayoutId/desc_ja_JP.json | 19 - .../lib/ProxyWidget/LayoutId/desc_ko_KR.json | 19 - .../lib/ProxyWidget/LayoutId/desc_pt_PT.json | 19 - .../lib/ProxyWidget/LayoutId/desc_ru_RU.json | 19 - .../lib/ProxyWidget/LayoutId/desc_zh-CN.json | 19 - .../lib/ProxyWidget/LayoutId/node1_base.dart | 84 - .../ProxyWidget/ListTileTheme/desc_de_DE.json | 18 - .../ProxyWidget/ListTileTheme/desc_en_US.json | 18 - .../ProxyWidget/ListTileTheme/desc_es_ES.json | 18 - .../ProxyWidget/ListTileTheme/desc_fr_FR.json | 18 - .../ProxyWidget/ListTileTheme/desc_it_IT.json | 18 - .../ProxyWidget/ListTileTheme/desc_ja_JP.json | 18 - .../ProxyWidget/ListTileTheme/desc_ko_KR.json | 18 - .../ProxyWidget/ListTileTheme/desc_pt_PT.json | 18 - .../ProxyWidget/ListTileTheme/desc_ru_RU.json | 18 - .../ProxyWidget/ListTileTheme/desc_zh-CN.json | 18 - .../ProxyWidget/ListTileTheme/node1_base.dart | 47 - .../MaterialBannerTheme/desc_de_DE.json | 18 - .../MaterialBannerTheme/desc_en_US.json | 18 - .../MaterialBannerTheme/desc_es_ES.json | 18 - .../MaterialBannerTheme/desc_fr_FR.json | 18 - .../MaterialBannerTheme/desc_it_IT.json | 18 - .../MaterialBannerTheme/desc_ja_JP.json | 18 - .../MaterialBannerTheme/desc_ko_KR.json | 18 - .../MaterialBannerTheme/desc_pt_PT.json | 18 - .../MaterialBannerTheme/desc_ru_RU.json | 18 - .../MaterialBannerTheme/desc_zh-CN.json | 18 - .../MaterialBannerTheme/node1_base.dart | 62 - .../ProxyWidget/MediaQuery/desc_de_DE.json | 18 - .../ProxyWidget/MediaQuery/desc_en_US.json | 18 - .../ProxyWidget/MediaQuery/desc_es_ES.json | 18 - .../ProxyWidget/MediaQuery/desc_fr_FR.json | 18 - .../ProxyWidget/MediaQuery/desc_it_IT.json | 18 - .../ProxyWidget/MediaQuery/desc_ja_JP.json | 18 - .../ProxyWidget/MediaQuery/desc_ko_KR.json | 18 - .../ProxyWidget/MediaQuery/desc_pt_PT.json | 18 - .../ProxyWidget/MediaQuery/desc_ru_RU.json | 18 - .../ProxyWidget/MediaQuery/desc_zh-CN.json | 18 - .../ProxyWidget/MediaQuery/node1_base.dart | 65 - .../ParentDataWidget/desc_de_DE.json | 23 - .../ParentDataWidget/desc_en_US.json | 23 - .../ParentDataWidget/desc_es_ES.json | 23 - .../ParentDataWidget/desc_fr_FR.json | 23 - .../ParentDataWidget/desc_it_IT.json | 23 - .../ParentDataWidget/desc_ja_JP.json | 23 - .../ParentDataWidget/desc_ko_KR.json | 23 - .../ParentDataWidget/desc_pt_PT.json | 23 - .../ParentDataWidget/desc_ru_RU.json | 23 - .../ParentDataWidget/desc_zh-CN.json | 23 - .../ParentDataWidget/node1_base.dart | 24 - .../PopupMenuTheme/desc_de_DE.json | 18 - .../PopupMenuTheme/desc_en_US.json | 18 - .../PopupMenuTheme/desc_es_ES.json | 18 - .../PopupMenuTheme/desc_fr_FR.json | 18 - .../PopupMenuTheme/desc_it_IT.json | 18 - .../PopupMenuTheme/desc_ja_JP.json | 18 - .../PopupMenuTheme/desc_ko_KR.json | 18 - .../PopupMenuTheme/desc_pt_PT.json | 18 - .../PopupMenuTheme/desc_ru_RU.json | 18 - .../PopupMenuTheme/desc_zh-CN.json | 18 - .../PopupMenuTheme/node1_base.dart | 67 - .../ProxyWidget/Positioned/desc_de_DE.json | 26 - .../ProxyWidget/Positioned/desc_en_US.json | 26 - .../ProxyWidget/Positioned/desc_es_ES.json | 26 - .../ProxyWidget/Positioned/desc_fr_FR.json | 26 - .../ProxyWidget/Positioned/desc_it_IT.json | 26 - .../ProxyWidget/Positioned/desc_ja_JP.json | 26 - .../ProxyWidget/Positioned/desc_ko_KR.json | 26 - .../ProxyWidget/Positioned/desc_pt_PT.json | 26 - .../ProxyWidget/Positioned/desc_ru_RU.json | 26 - .../ProxyWidget/Positioned/desc_zh-CN.json | 26 - .../ProxyWidget/Positioned/node1_base.dart | 52 - .../PrimaryScrollController/desc_de_DE.json | 23 - .../PrimaryScrollController/desc_en_US.json | 23 - .../PrimaryScrollController/desc_es_ES.json | 23 - .../PrimaryScrollController/desc_fr_FR.json | 23 - .../PrimaryScrollController/desc_it_IT.json | 23 - .../PrimaryScrollController/desc_ja_JP.json | 23 - .../PrimaryScrollController/desc_ko_KR.json | 23 - .../PrimaryScrollController/desc_pt_PT.json | 23 - .../PrimaryScrollController/desc_ru_RU.json | 23 - .../PrimaryScrollController/desc_zh-CN.json | 23 - .../PrimaryScrollController/node1_base.dart | 29 - .../ScrollConfiguration/desc_de_DE.json | 24 - .../ScrollConfiguration/desc_en_US.json | 24 - .../ScrollConfiguration/desc_es_ES.json | 24 - .../ScrollConfiguration/desc_fr_FR.json | 24 - .../ScrollConfiguration/desc_it_IT.json | 24 - .../ScrollConfiguration/desc_ja_JP.json | 24 - .../ScrollConfiguration/desc_ko_KR.json | 24 - .../ScrollConfiguration/desc_pt_PT.json | 24 - .../ScrollConfiguration/desc_ru_RU.json | 24 - .../ScrollConfiguration/desc_zh-CN.json | 24 - .../ScrollConfiguration/node1_base.dart | 62 - .../ProxyWidget/SliderTheme/desc_de_DE.json | 27 - .../ProxyWidget/SliderTheme/desc_en_US.json | 27 - .../ProxyWidget/SliderTheme/desc_es_ES.json | 27 - .../ProxyWidget/SliderTheme/desc_fr_FR.json | 27 - .../ProxyWidget/SliderTheme/desc_it_IT.json | 27 - .../ProxyWidget/SliderTheme/desc_ja_JP.json | 27 - .../ProxyWidget/SliderTheme/desc_ko_KR.json | 27 - .../ProxyWidget/SliderTheme/desc_pt_PT.json | 27 - .../ProxyWidget/SliderTheme/desc_ru_RU.json | 27 - .../ProxyWidget/SliderTheme/desc_zh-CN.json | 27 - .../ProxyWidget/SliderTheme/node1_base.dart | 35 - .../ProxyWidget/SliderTheme/node2_diy.dart | 173 - .../lib/ProxyWidget/TableCell/desc_de_DE.json | 19 - .../lib/ProxyWidget/TableCell/desc_en_US.json | 19 - .../lib/ProxyWidget/TableCell/desc_es_ES.json | 19 - .../lib/ProxyWidget/TableCell/desc_fr_FR.json | 19 - .../lib/ProxyWidget/TableCell/desc_it_IT.json | 19 - .../lib/ProxyWidget/TableCell/desc_ja_JP.json | 19 - .../lib/ProxyWidget/TableCell/desc_ko_KR.json | 19 - .../lib/ProxyWidget/TableCell/desc_pt_PT.json | 19 - .../lib/ProxyWidget/TableCell/desc_ru_RU.json | 19 - .../lib/ProxyWidget/TableCell/desc_zh-CN.json | 19 - .../lib/ProxyWidget/TableCell/node1_base.dart | 72 - .../ToggleButtonsTheme/desc_de_DE.json | 18 - .../ToggleButtonsTheme/desc_en_US.json | 18 - .../ToggleButtonsTheme/desc_es_ES.json | 18 - .../ToggleButtonsTheme/desc_fr_FR.json | 18 - .../ToggleButtonsTheme/desc_it_IT.json | 18 - .../ToggleButtonsTheme/desc_ja_JP.json | 18 - .../ToggleButtonsTheme/desc_ko_KR.json | 18 - .../ToggleButtonsTheme/desc_pt_PT.json | 18 - .../ToggleButtonsTheme/desc_ru_RU.json | 18 - .../ToggleButtonsTheme/desc_zh-CN.json | 18 - .../ToggleButtonsTheme/node1_base.dart | 51 - .../ProxyWidget/TooltipTheme/desc_de_DE.json | 18 - .../ProxyWidget/TooltipTheme/desc_en_US.json | 18 - .../ProxyWidget/TooltipTheme/desc_es_ES.json | 18 - .../ProxyWidget/TooltipTheme/desc_fr_FR.json | 18 - .../ProxyWidget/TooltipTheme/desc_it_IT.json | 18 - .../ProxyWidget/TooltipTheme/desc_ja_JP.json | 18 - .../ProxyWidget/TooltipTheme/desc_ko_KR.json | 18 - .../ProxyWidget/TooltipTheme/desc_pt_PT.json | 18 - .../ProxyWidget/TooltipTheme/desc_ru_RU.json | 18 - .../ProxyWidget/TooltipTheme/desc_zh-CN.json | 18 - .../ProxyWidget/TooltipTheme/node1_base.dart | 44 - .../AbsorbPointer/desc_de_DE.json | 25 - .../AbsorbPointer/desc_en_US.json | 25 - .../AbsorbPointer/desc_es_ES.json | 25 - .../AbsorbPointer/desc_fr_FR.json | 25 - .../AbsorbPointer/desc_it_IT.json | 25 - .../AbsorbPointer/desc_ja_JP.json | 25 - .../AbsorbPointer/desc_ko_KR.json | 25 - .../AbsorbPointer/desc_pt_PT.json | 25 - .../AbsorbPointer/desc_ru_RU.json | 25 - .../AbsorbPointer/desc_zh-CN.json | 25 - .../AbsorbPointer/node1_base.dart | 51 - .../Align/desc_de_DE.json | 32 - .../Align/desc_en_US.json | 32 - .../Align/desc_es_ES.json | 32 - .../Align/desc_fr_FR.json | 32 - .../Align/desc_it_IT.json | 32 - .../Align/desc_ja_JP.json | 32 - .../Align/desc_ko_KR.json | 32 - .../Align/desc_pt_PT.json | 32 - .../Align/desc_ru_RU.json | 32 - .../Align/desc_zh-CN.json | 32 - .../Align/node1_base.dart | 55 - .../Align/node2_other.dart | 73 - .../AnimatedSize/desc_de_DE.json | 22 - .../AnimatedSize/desc_en_US.json | 22 - .../AnimatedSize/desc_es_ES.json | 22 - .../AnimatedSize/desc_fr_FR.json | 22 - .../AnimatedSize/desc_it_IT.json | 22 - .../AnimatedSize/desc_ja_JP.json | 22 - .../AnimatedSize/desc_ko_KR.json | 22 - .../AnimatedSize/desc_pt_PT.json | 22 - .../AnimatedSize/desc_ru_RU.json | 22 - .../AnimatedSize/desc_zh-CN.json | 22 - .../AnimatedSize/node1_base.dart | 64 - .../AnnotatedRegion/desc_de_DE.json | 20 - .../AnnotatedRegion/desc_en_US.json | 20 - .../AnnotatedRegion/desc_es_ES.json | 20 - .../AnnotatedRegion/desc_fr_FR.json | 20 - .../AnnotatedRegion/desc_it_IT.json | 20 - .../AnnotatedRegion/desc_ja_JP.json | 20 - .../AnnotatedRegion/desc_ko_KR.json | 20 - .../AnnotatedRegion/desc_pt_PT.json | 20 - .../AnnotatedRegion/desc_ru_RU.json | 20 - .../AnnotatedRegion/desc_zh-CN.json | 20 - .../AnnotatedRegion/node1_base.dart | 76 - .../AspectRatio/desc_de_DE.json | 19 - .../AspectRatio/desc_en_US.json | 19 - .../AspectRatio/desc_es_ES.json | 19 - .../AspectRatio/desc_fr_FR.json | 19 - .../AspectRatio/desc_it_IT.json | 19 - .../AspectRatio/desc_ja_JP.json | 19 - .../AspectRatio/desc_ko_KR.json | 19 - .../AspectRatio/desc_pt_PT.json | 19 - .../AspectRatio/desc_ru_RU.json | 19 - .../AspectRatio/desc_zh-CN.json | 19 - .../AspectRatio/node1_base.dart | 58 - .../BackdropFilter/desc_de_DE.json | 24 - .../BackdropFilter/desc_en_US.json | 24 - .../BackdropFilter/desc_es_ES.json | 24 - .../BackdropFilter/desc_fr_FR.json | 24 - .../BackdropFilter/desc_it_IT.json | 24 - .../BackdropFilter/desc_ja_JP.json | 24 - .../BackdropFilter/desc_ko_KR.json | 24 - .../BackdropFilter/desc_pt_PT.json | 24 - .../BackdropFilter/desc_ru_RU.json | 24 - .../BackdropFilter/desc_zh-CN.json | 24 - .../BackdropFilter/node1_base.dart | 94 - .../Baseline/desc_de_DE.json | 20 - .../Baseline/desc_en_US.json | 20 - .../Baseline/desc_es_ES.json | 20 - .../Baseline/desc_fr_FR.json | 20 - .../Baseline/desc_it_IT.json | 20 - .../Baseline/desc_ja_JP.json | 20 - .../Baseline/desc_ko_KR.json | 20 - .../Baseline/desc_pt_PT.json | 20 - .../Baseline/desc_ru_RU.json | 20 - .../Baseline/desc_zh-CN.json | 20 - .../Baseline/node1_base.dart | 49 - .../CallbackShortcuts/desc_de_DE.json | 25 - .../CallbackShortcuts/desc_en_US.json | 25 - .../CallbackShortcuts/desc_es_ES.json | 25 - .../CallbackShortcuts/desc_fr_FR.json | 25 - .../CallbackShortcuts/desc_it_IT.json | 25 - .../CallbackShortcuts/desc_ja_JP.json | 25 - .../CallbackShortcuts/desc_ko_KR.json | 25 - .../CallbackShortcuts/desc_pt_PT.json | 25 - .../CallbackShortcuts/desc_ru_RU.json | 25 - .../CallbackShortcuts/desc_zh-CN.json | 25 - .../CallbackShortcuts/node1.dart | 127 - .../Center/desc_de_DE.json | 18 - .../Center/desc_en_US.json | 18 - .../Center/desc_es_ES.json | 18 - .../Center/desc_fr_FR.json | 18 - .../Center/desc_it_IT.json | 18 - .../Center/desc_ja_JP.json | 18 - .../Center/desc_ko_KR.json | 18 - .../Center/desc_pt_PT.json | 18 - .../Center/desc_ru_RU.json | 18 - .../Center/desc_zh-CN.json | 18 - .../Center/node1_base.dart | 23 - .../ClipOval/desc_de_DE.json | 24 - .../ClipOval/desc_en_US.json | 24 - .../ClipOval/desc_es_ES.json | 24 - .../ClipOval/desc_fr_FR.json | 24 - .../ClipOval/desc_it_IT.json | 24 - .../ClipOval/desc_ja_JP.json | 24 - .../ClipOval/desc_ko_KR.json | 24 - .../ClipOval/desc_pt_PT.json | 24 - .../ClipOval/desc_ru_RU.json | 24 - .../ClipOval/desc_zh-CN.json | 24 - .../ClipOval/node1_base.dart | 32 - .../ClipPath/desc_de_DE.json | 24 - .../ClipPath/desc_en_US.json | 24 - .../ClipPath/desc_es_ES.json | 24 - .../ClipPath/desc_fr_FR.json | 24 - .../ClipPath/desc_it_IT.json | 24 - .../ClipPath/desc_ja_JP.json | 24 - .../ClipPath/desc_ko_KR.json | 24 - .../ClipPath/desc_pt_PT.json | 24 - .../ClipPath/desc_ru_RU.json | 24 - .../ClipPath/desc_zh-CN.json | 24 - .../ClipPath/node1_base.dart | 62 - .../ClipRRect/desc_de_DE.json | 25 - .../ClipRRect/desc_en_US.json | 25 - .../ClipRRect/desc_es_ES.json | 25 - .../ClipRRect/desc_fr_FR.json | 25 - .../ClipRRect/desc_it_IT.json | 25 - .../ClipRRect/desc_ja_JP.json | 25 - .../ClipRRect/desc_ko_KR.json | 25 - .../ClipRRect/desc_pt_PT.json | 25 - .../ClipRRect/desc_ru_RU.json | 25 - .../ClipRRect/desc_zh-CN.json | 25 - .../ClipRRect/node1_base.dart | 19 - .../ClipRect/desc_de_DE.json | 24 - .../ClipRect/desc_en_US.json | 24 - .../ClipRect/desc_es_ES.json | 24 - .../ClipRect/desc_fr_FR.json | 24 - .../ClipRect/desc_it_IT.json | 24 - .../ClipRect/desc_ja_JP.json | 24 - .../ClipRect/desc_ko_KR.json | 24 - .../ClipRect/desc_pt_PT.json | 24 - .../ClipRect/desc_ru_RU.json | 24 - .../ClipRect/desc_zh-CN.json | 24 - .../ClipRect/node1_base.dart | 21 - .../ColorFiltered/desc_de_DE.json | 22 - .../ColorFiltered/desc_en_US.json | 22 - .../ColorFiltered/desc_es_ES.json | 22 - .../ColorFiltered/desc_fr_FR.json | 22 - .../ColorFiltered/desc_it_IT.json | 22 - .../ColorFiltered/desc_ja_JP.json | 22 - .../ColorFiltered/desc_ko_KR.json | 22 - .../ColorFiltered/desc_pt_PT.json | 22 - .../ColorFiltered/desc_ru_RU.json | 22 - .../ColorFiltered/desc_zh-CN.json | 22 - .../ColorFiltered/node1_base.dart | 60 - .../ColoredBox/desc_de_DE.json | 19 - .../ColoredBox/desc_en_US.json | 19 - .../ColoredBox/desc_es_ES.json | 19 - .../ColoredBox/desc_fr_FR.json | 19 - .../ColoredBox/desc_it_IT.json | 19 - .../ColoredBox/desc_ja_JP.json | 19 - .../ColoredBox/desc_ko_KR.json | 19 - .../ColoredBox/desc_pt_PT.json | 19 - .../ColoredBox/desc_ru_RU.json | 19 - .../ColoredBox/desc_zh-CN.json | 19 - .../ColoredBox/node1_base.dart | 31 - .../desc_de_DE.json | 26 - .../desc_en_US.json | 26 - .../desc_es_ES.json | 26 - .../desc_fr_FR.json | 26 - .../desc_it_IT.json | 26 - .../desc_ja_JP.json | 26 - .../desc_ko_KR.json | 26 - .../desc_pt_PT.json | 26 - .../desc_ru_RU.json | 26 - .../desc_zh-CN.json | 26 - .../node1_base.dart | 106 - .../CompositedTransformTarget/desc_de_DE.json | 22 - .../CompositedTransformTarget/desc_en_US.json | 22 - .../CompositedTransformTarget/desc_es_ES.json | 22 - .../CompositedTransformTarget/desc_fr_FR.json | 22 - .../CompositedTransformTarget/desc_it_IT.json | 22 - .../CompositedTransformTarget/desc_ja_JP.json | 22 - .../CompositedTransformTarget/desc_ko_KR.json | 22 - .../CompositedTransformTarget/desc_pt_PT.json | 22 - .../CompositedTransformTarget/desc_ru_RU.json | 22 - .../CompositedTransformTarget/desc_zh-CN.json | 22 - .../CompositedTransformTarget/node1_base.dart | 103 - .../ConstrainedBox/desc_de_DE.json | 26 - .../ConstrainedBox/desc_en_US.json | 26 - .../ConstrainedBox/desc_es_ES.json | 26 - .../ConstrainedBox/desc_fr_FR.json | 26 - .../ConstrainedBox/desc_it_IT.json | 26 - .../ConstrainedBox/desc_ja_JP.json | 26 - .../ConstrainedBox/desc_ko_KR.json | 26 - .../ConstrainedBox/desc_pt_PT.json | 26 - .../ConstrainedBox/desc_ru_RU.json | 26 - .../ConstrainedBox/desc_zh-CN.json | 26 - .../ConstrainedBox/node1_base.dart | 65 - .../desc_de_DE.json | 18 - .../desc_en_US.json | 18 - .../desc_es_ES.json | 18 - .../desc_fr_FR.json | 18 - .../desc_it_IT.json | 18 - .../desc_ja_JP.json | 18 - .../desc_ko_KR.json | 18 - .../desc_pt_PT.json | 18 - .../desc_ru_RU.json | 18 - .../desc_zh-CN.json | 18 - .../node1_base.dart | 22 - .../CustomPaint/desc_de_DE.json | 25 - .../CustomPaint/desc_en_US.json | 25 - .../CustomPaint/desc_es_ES.json | 25 - .../CustomPaint/desc_fr_FR.json | 25 - .../CustomPaint/desc_it_IT.json | 25 - .../CustomPaint/desc_ja_JP.json | 25 - .../CustomPaint/desc_ko_KR.json | 25 - .../CustomPaint/desc_pt_PT.json | 25 - .../CustomPaint/desc_ru_RU.json | 25 - .../CustomPaint/desc_zh-CN.json | 25 - .../CustomPaint/node1_clock.dart | 198 -- .../CustomPaint/node2_bezier.dart | 168 - .../CustomSingleChildLayout/desc_de_DE.json | 25 - .../CustomSingleChildLayout/desc_en_US.json | 25 - .../CustomSingleChildLayout/desc_es_ES.json | 25 - .../CustomSingleChildLayout/desc_fr_FR.json | 25 - .../CustomSingleChildLayout/desc_it_IT.json | 25 - .../CustomSingleChildLayout/desc_ja_JP.json | 25 - .../CustomSingleChildLayout/desc_ko_KR.json | 25 - .../CustomSingleChildLayout/desc_pt_PT.json | 25 - .../CustomSingleChildLayout/desc_ru_RU.json | 25 - .../CustomSingleChildLayout/desc_zh-CN.json | 25 - .../CustomSingleChildLayout/node1_base.dart | 55 - .../CustomSingleChildLayout/node2_offset.dart | 113 - .../DecoratedBox/desc_de_DE.json | 55 - .../DecoratedBox/desc_en_US.json | 55 - .../DecoratedBox/desc_es_ES.json | 55 - .../DecoratedBox/desc_fr_FR.json | 55 - .../DecoratedBox/desc_it_IT.json | 55 - .../DecoratedBox/desc_ja_JP.json | 55 - .../DecoratedBox/desc_ko_KR.json | 55 - .../DecoratedBox/desc_pt_PT.json | 55 - .../DecoratedBox/desc_ru_RU.json | 55 - .../DecoratedBox/desc_zh-CN.json | 55 - .../DecoratedBox/node1_base.dart | 44 - .../DecoratedBox/node2_image.dart | 29 - .../DecoratedBox/node3_border.dart | 28 - .../DecoratedBox/node4_shape.dart | 39 - .../DecoratedBox/node5_line.dart | 22 - .../DecoratedBox/node6_flutterLogo.dart | 24 - .../FadeTransition/desc_de_DE.json | 22 - .../FadeTransition/desc_en_US.json | 22 - .../FadeTransition/desc_es_ES.json | 22 - .../FadeTransition/desc_fr_FR.json | 22 - .../FadeTransition/desc_it_IT.json | 22 - .../FadeTransition/desc_ja_JP.json | 22 - .../FadeTransition/desc_ko_KR.json | 22 - .../FadeTransition/desc_pt_PT.json | 22 - .../FadeTransition/desc_ru_RU.json | 22 - .../FadeTransition/desc_zh-CN.json | 22 - .../FadeTransition/node1_base.dart | 47 - .../FittedBox/desc_de_DE.json | 20 - .../FittedBox/desc_en_US.json | 20 - .../FittedBox/desc_es_ES.json | 20 - .../FittedBox/desc_fr_FR.json | 20 - .../FittedBox/desc_it_IT.json | 20 - .../FittedBox/desc_ja_JP.json | 20 - .../FittedBox/desc_ko_KR.json | 20 - .../FittedBox/desc_pt_PT.json | 20 - .../FittedBox/desc_ru_RU.json | 20 - .../FittedBox/desc_zh-CN.json | 20 - .../FittedBox/node1_base.dart | 87 - .../FractionalTranslation/desc_de_DE.json | 19 - .../FractionalTranslation/desc_en_US.json | 19 - .../FractionalTranslation/desc_es_ES.json | 19 - .../FractionalTranslation/desc_fr_FR.json | 19 - .../FractionalTranslation/desc_it_IT.json | 19 - .../FractionalTranslation/desc_ja_JP.json | 19 - .../FractionalTranslation/desc_ko_KR.json | 19 - .../FractionalTranslation/desc_pt_PT.json | 19 - .../FractionalTranslation/desc_ru_RU.json | 19 - .../FractionalTranslation/desc_zh-CN.json | 19 - .../FractionalTranslation/node1_base.dart | 62 - .../FractionallySizedBox/desc_de_DE.json | 21 - .../FractionallySizedBox/desc_en_US.json | 21 - .../FractionallySizedBox/desc_es_ES.json | 21 - .../FractionallySizedBox/desc_fr_FR.json | 21 - .../FractionallySizedBox/desc_it_IT.json | 21 - .../FractionallySizedBox/desc_ja_JP.json | 21 - .../FractionallySizedBox/desc_ko_KR.json | 21 - .../FractionallySizedBox/desc_pt_PT.json | 21 - .../FractionallySizedBox/desc_ru_RU.json | 21 - .../FractionallySizedBox/desc_zh-CN.json | 21 - .../FractionallySizedBox/node1_base.dart | 56 - .../IgnorePointer/desc_de_DE.json | 25 - .../IgnorePointer/desc_en_US.json | 25 - .../IgnorePointer/desc_es_ES.json | 25 - .../IgnorePointer/desc_fr_FR.json | 25 - .../IgnorePointer/desc_it_IT.json | 25 - .../IgnorePointer/desc_ja_JP.json | 25 - .../IgnorePointer/desc_ko_KR.json | 25 - .../IgnorePointer/desc_pt_PT.json | 25 - .../IgnorePointer/desc_ru_RU.json | 25 - .../IgnorePointer/desc_zh-CN.json | 25 - .../IgnorePointer/node1_base.dart | 51 - .../ImageFiltered/desc_de_DE.json | 36 - .../ImageFiltered/desc_en_US.json | 36 - .../ImageFiltered/desc_es_ES.json | 36 - .../ImageFiltered/desc_fr_FR.json | 36 - .../ImageFiltered/desc_it_IT.json | 36 - .../ImageFiltered/desc_ja_JP.json | 36 - .../ImageFiltered/desc_ko_KR.json | 36 - .../ImageFiltered/desc_pt_PT.json | 36 - .../ImageFiltered/desc_ru_RU.json | 36 - .../ImageFiltered/desc_zh-CN.json | 36 - .../ImageFiltered/node1_blur.dart | 117 - .../ImageFiltered/node2_color.dart | 138 - .../ImageFiltered/node3_matrix.dart | 69 - .../IntrinsicHeight/desc_de_DE.json | 19 - .../IntrinsicHeight/desc_en_US.json | 19 - .../IntrinsicHeight/desc_es_ES.json | 19 - .../IntrinsicHeight/desc_fr_FR.json | 19 - .../IntrinsicHeight/desc_it_IT.json | 19 - .../IntrinsicHeight/desc_ja_JP.json | 19 - .../IntrinsicHeight/desc_ko_KR.json | 19 - .../IntrinsicHeight/desc_pt_PT.json | 19 - .../IntrinsicHeight/desc_ru_RU.json | 19 - .../IntrinsicHeight/desc_zh-CN.json | 19 - .../IntrinsicHeight/node1_base.dart | 66 - .../IntrinsicWidth/desc_de_DE.json | 19 - .../IntrinsicWidth/desc_en_US.json | 19 - .../IntrinsicWidth/desc_es_ES.json | 19 - .../IntrinsicWidth/desc_fr_FR.json | 19 - .../IntrinsicWidth/desc_it_IT.json | 19 - .../IntrinsicWidth/desc_ja_JP.json | 19 - .../IntrinsicWidth/desc_ko_KR.json | 19 - .../IntrinsicWidth/desc_pt_PT.json | 19 - .../IntrinsicWidth/desc_ru_RU.json | 19 - .../IntrinsicWidth/desc_zh-CN.json | 19 - .../IntrinsicWidth/node1_base.dart | 66 - .../LayoutBuilder/desc_de_DE.json | 34 - .../LayoutBuilder/desc_en_US.json | 34 - .../LayoutBuilder/desc_es_ES.json | 34 - .../LayoutBuilder/desc_fr_FR.json | 34 - .../LayoutBuilder/desc_it_IT.json | 34 - .../LayoutBuilder/desc_ja_JP.json | 34 - .../LayoutBuilder/desc_ko_KR.json | 34 - .../LayoutBuilder/desc_pt_PT.json | 34 - .../LayoutBuilder/desc_ru_RU.json | 34 - .../LayoutBuilder/desc_zh-CN.json | 34 - .../LayoutBuilder/node1_base.dart | 28 - .../LayoutBuilder/node2_fit.dart | 100 - .../LayoutBuilder/node3_expend.dart | 84 - .../LimitedBox/desc_de_DE.json | 22 - .../LimitedBox/desc_en_US.json | 22 - .../LimitedBox/desc_es_ES.json | 22 - .../LimitedBox/desc_fr_FR.json | 22 - .../LimitedBox/desc_it_IT.json | 22 - .../LimitedBox/desc_ja_JP.json | 22 - .../LimitedBox/desc_ko_KR.json | 22 - .../LimitedBox/desc_pt_PT.json | 22 - .../LimitedBox/desc_ru_RU.json | 22 - .../LimitedBox/desc_zh-CN.json | 22 - .../LimitedBox/node1_base.dart | 62 - .../OffStage/desc_de_DE.json | 21 - .../OffStage/desc_en_US.json | 21 - .../OffStage/desc_es_ES.json | 21 - .../OffStage/desc_fr_FR.json | 21 - .../OffStage/desc_it_IT.json | 21 - .../OffStage/desc_ja_JP.json | 21 - .../OffStage/desc_ko_KR.json | 21 - .../OffStage/desc_pt_PT.json | 21 - .../OffStage/desc_ru_RU.json | 21 - .../OffStage/desc_zh-CN.json | 21 - .../OffStage/node1_base.dart | 47 - .../Opacity/desc_de_DE.json | 22 - .../Opacity/desc_en_US.json | 22 - .../Opacity/desc_es_ES.json | 22 - .../Opacity/desc_fr_FR.json | 22 - .../Opacity/desc_it_IT.json | 22 - .../Opacity/desc_ja_JP.json | 22 - .../Opacity/desc_ko_KR.json | 22 - .../Opacity/desc_pt_PT.json | 22 - .../Opacity/desc_ru_RU.json | 22 - .../Opacity/desc_zh-CN.json | 22 - .../Opacity/node1_base.dart | 35 - .../OverflowBox/desc_de_DE.json | 23 - .../OverflowBox/desc_en_US.json | 23 - .../OverflowBox/desc_es_ES.json | 23 - .../OverflowBox/desc_fr_FR.json | 23 - .../OverflowBox/desc_it_IT.json | 23 - .../OverflowBox/desc_ja_JP.json | 23 - .../OverflowBox/desc_ko_KR.json | 23 - .../OverflowBox/desc_pt_PT.json | 23 - .../OverflowBox/desc_ru_RU.json | 23 - .../OverflowBox/desc_zh-CN.json | 23 - .../OverflowBox/node1_base.dart | 56 - .../Padding/desc_de_DE.json | 37 - .../Padding/desc_en_US.json | 37 - .../Padding/desc_es_ES.json | 37 - .../Padding/desc_fr_FR.json | 37 - .../Padding/desc_it_IT.json | 37 - .../Padding/desc_ja_JP.json | 37 - .../Padding/desc_ko_KR.json | 37 - .../Padding/desc_pt_PT.json | 37 - .../Padding/desc_ru_RU.json | 37 - .../Padding/desc_zh-CN.json | 37 - .../Padding/node1_all.dart | 29 - .../Padding/node2_only.dart | 29 - .../Padding/node3_symmetric.dart | 29 - .../PhysicalModel/desc_de_DE.json | 27 - .../PhysicalModel/desc_en_US.json | 27 - .../PhysicalModel/desc_es_ES.json | 27 - .../PhysicalModel/desc_fr_FR.json | 27 - .../PhysicalModel/desc_it_IT.json | 27 - .../PhysicalModel/desc_ja_JP.json | 27 - .../PhysicalModel/desc_ko_KR.json | 27 - .../PhysicalModel/desc_pt_PT.json | 27 - .../PhysicalModel/desc_ru_RU.json | 27 - .../PhysicalModel/desc_zh-CN.json | 27 - .../PhysicalModel/node1_base.dart | 48 - .../PhysicalShape/desc_de_DE.json | 23 - .../PhysicalShape/desc_en_US.json | 23 - .../PhysicalShape/desc_es_ES.json | 23 - .../PhysicalShape/desc_fr_FR.json | 23 - .../PhysicalShape/desc_it_IT.json | 23 - .../PhysicalShape/desc_ja_JP.json | 23 - .../PhysicalShape/desc_ko_KR.json | 23 - .../PhysicalShape/desc_pt_PT.json | 23 - .../PhysicalShape/desc_ru_RU.json | 23 - .../PhysicalShape/desc_zh-CN.json | 23 - .../PhysicalShape/node1_base.dart | 30 - .../RepaintBoundary/desc_de_DE.json | 26 - .../RepaintBoundary/desc_en_US.json | 26 - .../RepaintBoundary/desc_es_ES.json | 26 - .../RepaintBoundary/desc_fr_FR.json | 26 - .../RepaintBoundary/desc_it_IT.json | 26 - .../RepaintBoundary/desc_ja_JP.json | 26 - .../RepaintBoundary/desc_ko_KR.json | 26 - .../RepaintBoundary/desc_pt_PT.json | 26 - .../RepaintBoundary/desc_ru_RU.json | 26 - .../RepaintBoundary/desc_zh-CN.json | 26 - .../RepaintBoundary/main.dart | 26 - .../RepaintBoundary/node1_base.dart | 178 - .../RepaintBoundary/node2_save.dart | 70 - .../RotatedBox/desc_de_DE.json | 19 - .../RotatedBox/desc_en_US.json | 19 - .../RotatedBox/desc_es_ES.json | 19 - .../RotatedBox/desc_fr_FR.json | 19 - .../RotatedBox/desc_it_IT.json | 19 - .../RotatedBox/desc_ja_JP.json | 19 - .../RotatedBox/desc_ko_KR.json | 19 - .../RotatedBox/desc_pt_PT.json | 19 - .../RotatedBox/desc_ru_RU.json | 19 - .../RotatedBox/desc_zh-CN.json | 19 - .../RotatedBox/node1_base.dart | 28 - .../ShaderMask/desc_de_DE.json | 32 - .../ShaderMask/desc_en_US.json | 32 - .../ShaderMask/desc_es_ES.json | 32 - .../ShaderMask/desc_fr_FR.json | 32 - .../ShaderMask/desc_it_IT.json | 32 - .../ShaderMask/desc_ja_JP.json | 32 - .../ShaderMask/desc_ko_KR.json | 32 - .../ShaderMask/desc_pt_PT.json | 32 - .../ShaderMask/desc_ru_RU.json | 32 - .../ShaderMask/desc_zh-CN.json | 32 - .../ShaderMask/node1_radial.dart | 51 - .../ShaderMask/node2_linear.dart | 50 - .../SizeChangedLayoutNotifier/desc_de_DE.json | 18 - .../SizeChangedLayoutNotifier/desc_en_US.json | 18 - .../SizeChangedLayoutNotifier/desc_es_ES.json | 18 - .../SizeChangedLayoutNotifier/desc_fr_FR.json | 18 - .../SizeChangedLayoutNotifier/desc_it_IT.json | 18 - .../SizeChangedLayoutNotifier/desc_ja_JP.json | 18 - .../SizeChangedLayoutNotifier/desc_ko_KR.json | 18 - .../SizeChangedLayoutNotifier/desc_pt_PT.json | 18 - .../SizeChangedLayoutNotifier/desc_ru_RU.json | 18 - .../SizeChangedLayoutNotifier/desc_zh-CN.json | 18 - .../SizeChangedLayoutNotifier/node1_base.dart | 67 - .../SizedBox/desc_de_DE.json | 20 - .../SizedBox/desc_en_US.json | 20 - .../SizedBox/desc_es_ES.json | 20 - .../SizedBox/desc_fr_FR.json | 20 - .../SizedBox/desc_it_IT.json | 20 - .../SizedBox/desc_ja_JP.json | 20 - .../SizedBox/desc_ko_KR.json | 20 - .../SizedBox/desc_pt_PT.json | 20 - .../SizedBox/desc_ru_RU.json | 20 - .../SizedBox/desc_zh-CN.json | 20 - .../SizedBox/node1_base.dart | 38 - .../SizedOverflowBox/desc_de_DE.json | 20 - .../SizedOverflowBox/desc_en_US.json | 20 - .../SizedOverflowBox/desc_es_ES.json | 20 - .../SizedOverflowBox/desc_fr_FR.json | 20 - .../SizedOverflowBox/desc_it_IT.json | 20 - .../SizedOverflowBox/desc_ja_JP.json | 20 - .../SizedOverflowBox/desc_ko_KR.json | 20 - .../SizedOverflowBox/desc_pt_PT.json | 20 - .../SizedOverflowBox/desc_ru_RU.json | 20 - .../SizedOverflowBox/desc_zh-CN.json | 20 - .../SizedOverflowBox/node1_base.dart | 56 - .../TapRegion/desc_de_DE.json | 24 - .../TapRegion/desc_en_US.json | 24 - .../TapRegion/desc_es_ES.json | 24 - .../TapRegion/desc_fr_FR.json | 24 - .../TapRegion/desc_it_IT.json | 24 - .../TapRegion/desc_ja_JP.json | 24 - .../TapRegion/desc_ko_KR.json | 24 - .../TapRegion/desc_pt_PT.json | 24 - .../TapRegion/desc_ru_RU.json | 24 - .../TapRegion/desc_zh-CN.json | 24 - .../TapRegion/node1.dart | 45 - .../TextFieldTapRegion/desc_de_DE.json | 26 - .../TextFieldTapRegion/desc_en_US.json | 26 - .../TextFieldTapRegion/desc_es_ES.json | 26 - .../TextFieldTapRegion/desc_fr_FR.json | 26 - .../TextFieldTapRegion/desc_it_IT.json | 26 - .../TextFieldTapRegion/desc_ja_JP.json | 26 - .../TextFieldTapRegion/desc_ko_KR.json | 26 - .../TextFieldTapRegion/desc_pt_PT.json | 26 - .../TextFieldTapRegion/desc_ru_RU.json | 26 - .../TextFieldTapRegion/desc_zh-CN.json | 26 - .../TextFieldTapRegion/node1.dart | 85 - .../Transform/desc_de_DE.json | 53 - .../Transform/desc_en_US.json | 53 - .../Transform/desc_es_ES.json | 53 - .../Transform/desc_fr_FR.json | 53 - .../Transform/desc_it_IT.json | 53 - .../Transform/desc_ja_JP.json | 53 - .../Transform/desc_ko_KR.json | 53 - .../Transform/desc_pt_PT.json | 53 - .../Transform/desc_ru_RU.json | 53 - .../Transform/desc_zh-CN.json | 53 - .../Transform/matrix4_shower.dart | 22 - .../Transform/node1_skew.dart | 81 - .../Transform/node2_translation.dart | 92 - .../Transform/node3_scale.dart | 91 - .../Transform/node4_rotate.dart | 112 - .../Transform/node5_perspective.dart | 73 - .../Transform/zz_node_op.dart | 98 - .../UnConstrainedBox/desc_de_DE.json | 22 - .../UnConstrainedBox/desc_en_US.json | 22 - .../UnConstrainedBox/desc_es_ES.json | 22 - .../UnConstrainedBox/desc_fr_FR.json | 22 - .../UnConstrainedBox/desc_it_IT.json | 22 - .../UnConstrainedBox/desc_ja_JP.json | 22 - .../UnConstrainedBox/desc_ko_KR.json | 22 - .../UnConstrainedBox/desc_pt_PT.json | 22 - .../UnConstrainedBox/desc_ru_RU.json | 22 - .../UnConstrainedBox/desc_zh-CN.json | 22 - .../UnConstrainedBox/node1_base.dart | 73 - .../desc_de_DE.json | 27 - .../desc_en_US.json | 27 - .../desc_es_ES.json | 27 - .../desc_fr_FR.json | 27 - .../desc_it_IT.json | 27 - .../desc_ja_JP.json | 27 - .../desc_ko_KR.json | 27 - .../desc_pt_PT.json | 27 - .../desc_ru_RU.json | 27 - .../desc_zh-CN.json | 27 - .../node1_base.dart | 88 - .../desc_de_DE.json | 24 - .../desc_en_US.json | 24 - .../desc_es_ES.json | 24 - .../desc_fr_FR.json | 24 - .../desc_it_IT.json | 24 - .../desc_ja_JP.json | 24 - .../desc_ko_KR.json | 24 - .../desc_pt_PT.json | 24 - .../desc_ru_RU.json | 24 - .../desc_zh-CN.json | 24 - .../node1_base.dart | 120 - .../Sliver/CustomScrollView/desc_de_DE.json | 25 - .../Sliver/CustomScrollView/desc_en_US.json | 25 - .../Sliver/CustomScrollView/desc_es_ES.json | 25 - .../Sliver/CustomScrollView/desc_fr_FR.json | 25 - .../Sliver/CustomScrollView/desc_it_IT.json | 25 - .../Sliver/CustomScrollView/desc_ja_JP.json | 25 - .../Sliver/CustomScrollView/desc_ko_KR.json | 25 - .../Sliver/CustomScrollView/desc_pt_PT.json | 25 - .../Sliver/CustomScrollView/desc_ru_RU.json | 25 - .../Sliver/CustomScrollView/desc_zh-CN.json | 25 - .../Sliver/CustomScrollView/node1_base.dart | 90 - .../Sliver/DecoratedSliver/desc_de_DE.json | 20 - .../Sliver/DecoratedSliver/desc_en_US.json | 20 - .../Sliver/DecoratedSliver/desc_es_ES.json | 20 - .../Sliver/DecoratedSliver/desc_fr_FR.json | 20 - .../Sliver/DecoratedSliver/desc_it_IT.json | 20 - .../Sliver/DecoratedSliver/desc_ja_JP.json | 20 - .../Sliver/DecoratedSliver/desc_ko_KR.json | 20 - .../Sliver/DecoratedSliver/desc_pt_PT.json | 20 - .../Sliver/DecoratedSliver/desc_ru_RU.json | 20 - .../Sliver/DecoratedSliver/desc_zh-CN.json | 20 - .../lib/Sliver/DecoratedSliver/node1.dart | 52 - .../Sliver/FlexibleSpaceBar/desc_de_DE.json | 23 - .../Sliver/FlexibleSpaceBar/desc_en_US.json | 23 - .../Sliver/FlexibleSpaceBar/desc_es_ES.json | 23 - .../Sliver/FlexibleSpaceBar/desc_fr_FR.json | 23 - .../Sliver/FlexibleSpaceBar/desc_it_IT.json | 23 - .../Sliver/FlexibleSpaceBar/desc_ja_JP.json | 23 - .../Sliver/FlexibleSpaceBar/desc_ko_KR.json | 23 - .../Sliver/FlexibleSpaceBar/desc_pt_PT.json | 23 - .../Sliver/FlexibleSpaceBar/desc_ru_RU.json | 23 - .../Sliver/FlexibleSpaceBar/desc_zh-CN.json | 23 - .../Sliver/FlexibleSpaceBar/node1_base.dart | 98 - .../Sliver/PinnedHeaderSliver/desc_de_DE.json | 38 - .../Sliver/PinnedHeaderSliver/desc_en_US.json | 38 - .../Sliver/PinnedHeaderSliver/desc_es_ES.json | 38 - .../Sliver/PinnedHeaderSliver/desc_fr_FR.json | 38 - .../Sliver/PinnedHeaderSliver/desc_it_IT.json | 38 - .../Sliver/PinnedHeaderSliver/desc_ja_JP.json | 38 - .../Sliver/PinnedHeaderSliver/desc_ko_KR.json | 38 - .../Sliver/PinnedHeaderSliver/desc_pt_PT.json | 38 - .../Sliver/PinnedHeaderSliver/desc_ru_RU.json | 38 - .../Sliver/PinnedHeaderSliver/desc_zh-CN.json | 38 - .../Sliver/PinnedHeaderSliver/node_01.dart | 115 - .../Sliver/PinnedHeaderSliver/node_02.dart | 109 - .../Sliver/PinnedHeaderSliver/node_03.dart | 161 - .../Sliver/SliverAnimatedList/desc_de_DE.json | 22 - .../Sliver/SliverAnimatedList/desc_en_US.json | 22 - .../Sliver/SliverAnimatedList/desc_es_ES.json | 22 - .../Sliver/SliverAnimatedList/desc_fr_FR.json | 22 - .../Sliver/SliverAnimatedList/desc_it_IT.json | 22 - .../Sliver/SliverAnimatedList/desc_ja_JP.json | 22 - .../Sliver/SliverAnimatedList/desc_ko_KR.json | 22 - .../Sliver/SliverAnimatedList/desc_pt_PT.json | 22 - .../Sliver/SliverAnimatedList/desc_ru_RU.json | 22 - .../Sliver/SliverAnimatedList/desc_zh-CN.json | 22 - .../Sliver/SliverAnimatedList/node1_base.dart | 192 -- .../lib/Sliver/SliverAppBar/desc_de_DE.json | 33 - .../lib/Sliver/SliverAppBar/desc_en_US.json | 33 - .../lib/Sliver/SliverAppBar/desc_es_ES.json | 33 - .../lib/Sliver/SliverAppBar/desc_fr_FR.json | 33 - .../lib/Sliver/SliverAppBar/desc_it_IT.json | 33 - .../lib/Sliver/SliverAppBar/desc_ja_JP.json | 33 - .../lib/Sliver/SliverAppBar/desc_ko_KR.json | 33 - .../lib/Sliver/SliverAppBar/desc_pt_PT.json | 33 - .../lib/Sliver/SliverAppBar/desc_ru_RU.json | 33 - .../lib/Sliver/SliverAppBar/desc_zh-CN.json | 33 - .../lib/Sliver/SliverAppBar/node1_base.dart | 155 - .../desc_de_DE.json | 22 - .../desc_en_US.json | 22 - .../desc_es_ES.json | 22 - .../desc_fr_FR.json | 22 - .../desc_it_IT.json | 22 - .../desc_ja_JP.json | 22 - .../desc_ko_KR.json | 22 - .../desc_pt_PT.json | 22 - .../desc_ru_RU.json | 22 - .../desc_zh-CN.json | 22 - .../SliverConstrainedCrossAxis/node1.dart | 86 - .../SliverCrossAxisExpanded/desc_de_DE.json | 22 - .../SliverCrossAxisExpanded/desc_en_US.json | 22 - .../SliverCrossAxisExpanded/desc_es_ES.json | 22 - .../SliverCrossAxisExpanded/desc_fr_FR.json | 22 - .../SliverCrossAxisExpanded/desc_it_IT.json | 22 - .../SliverCrossAxisExpanded/desc_ja_JP.json | 22 - .../SliverCrossAxisExpanded/desc_ko_KR.json | 22 - .../SliverCrossAxisExpanded/desc_pt_PT.json | 22 - .../SliverCrossAxisExpanded/desc_ru_RU.json | 22 - .../SliverCrossAxisExpanded/desc_zh-CN.json | 22 - .../Sliver/SliverCrossAxisExpanded/node1.dart | 76 - .../SliverCrossAxisGroup/desc_de_DE.json | 22 - .../SliverCrossAxisGroup/desc_en_US.json | 22 - .../SliverCrossAxisGroup/desc_es_ES.json | 22 - .../SliverCrossAxisGroup/desc_fr_FR.json | 22 - .../SliverCrossAxisGroup/desc_it_IT.json | 22 - .../SliverCrossAxisGroup/desc_ja_JP.json | 22 - .../SliverCrossAxisGroup/desc_ko_KR.json | 22 - .../SliverCrossAxisGroup/desc_pt_PT.json | 22 - .../SliverCrossAxisGroup/desc_ru_RU.json | 22 - .../SliverCrossAxisGroup/desc_zh-CN.json | 22 - .../Sliver/SliverCrossAxisGroup/node1.dart | 79 - .../SliverFillRemaining/desc_de_DE.json | 23 - .../SliverFillRemaining/desc_en_US.json | 23 - .../SliverFillRemaining/desc_es_ES.json | 23 - .../SliverFillRemaining/desc_fr_FR.json | 23 - .../SliverFillRemaining/desc_it_IT.json | 23 - .../SliverFillRemaining/desc_ja_JP.json | 23 - .../SliverFillRemaining/desc_ko_KR.json | 23 - .../SliverFillRemaining/desc_pt_PT.json | 23 - .../SliverFillRemaining/desc_ru_RU.json | 23 - .../SliverFillRemaining/desc_zh-CN.json | 23 - .../SliverFillRemaining/node1_base.dart | 150 - .../Sliver/SliverFillViewport/desc_de_DE.json | 23 - .../Sliver/SliverFillViewport/desc_en_US.json | 23 - .../Sliver/SliverFillViewport/desc_es_ES.json | 23 - .../Sliver/SliverFillViewport/desc_fr_FR.json | 23 - .../Sliver/SliverFillViewport/desc_it_IT.json | 23 - .../Sliver/SliverFillViewport/desc_ja_JP.json | 23 - .../Sliver/SliverFillViewport/desc_ko_KR.json | 23 - .../Sliver/SliverFillViewport/desc_pt_PT.json | 23 - .../Sliver/SliverFillViewport/desc_ru_RU.json | 23 - .../Sliver/SliverFillViewport/desc_zh-CN.json | 23 - .../Sliver/SliverFillViewport/node1_base.dart | 112 - .../SliverFixedExtentList/desc_de_DE.json | 23 - .../SliverFixedExtentList/desc_en_US.json | 23 - .../SliverFixedExtentList/desc_es_ES.json | 23 - .../SliverFixedExtentList/desc_fr_FR.json | 23 - .../SliverFixedExtentList/desc_it_IT.json | 23 - .../SliverFixedExtentList/desc_ja_JP.json | 23 - .../SliverFixedExtentList/desc_ko_KR.json | 23 - .../SliverFixedExtentList/desc_pt_PT.json | 23 - .../SliverFixedExtentList/desc_ru_RU.json | 23 - .../SliverFixedExtentList/desc_zh-CN.json | 23 - .../SliverFixedExtentList/node1_base.dart | 96 - .../lib/Sliver/SliverGrid/desc_de_DE.json | 20 - .../lib/Sliver/SliverGrid/desc_en_US.json | 20 - .../lib/Sliver/SliverGrid/desc_es_ES.json | 20 - .../lib/Sliver/SliverGrid/desc_fr_FR.json | 20 - .../lib/Sliver/SliverGrid/desc_it_IT.json | 20 - .../lib/Sliver/SliverGrid/desc_ja_JP.json | 20 - .../lib/Sliver/SliverGrid/desc_ko_KR.json | 20 - .../lib/Sliver/SliverGrid/desc_pt_PT.json | 20 - .../lib/Sliver/SliverGrid/desc_ru_RU.json | 20 - .../lib/Sliver/SliverGrid/desc_zh-CN.json | 20 - .../lib/Sliver/SliverGrid/node1_base.dart | 82 - .../SliverIgnorePointer/desc_de_DE.json | 22 - .../SliverIgnorePointer/desc_en_US.json | 22 - .../SliverIgnorePointer/desc_es_ES.json | 22 - .../SliverIgnorePointer/desc_fr_FR.json | 22 - .../SliverIgnorePointer/desc_it_IT.json | 22 - .../SliverIgnorePointer/desc_ja_JP.json | 22 - .../SliverIgnorePointer/desc_ko_KR.json | 22 - .../SliverIgnorePointer/desc_pt_PT.json | 22 - .../SliverIgnorePointer/desc_ru_RU.json | 22 - .../SliverIgnorePointer/desc_zh-CN.json | 22 - .../SliverIgnorePointer/node1_base.dart | 151 - .../SliverLayoutBuilder/desc_de_DE.json | 21 - .../SliverLayoutBuilder/desc_en_US.json | 21 - .../SliverLayoutBuilder/desc_es_ES.json | 21 - .../SliverLayoutBuilder/desc_fr_FR.json | 21 - .../SliverLayoutBuilder/desc_it_IT.json | 21 - .../SliverLayoutBuilder/desc_ja_JP.json | 21 - .../SliverLayoutBuilder/desc_ko_KR.json | 21 - .../SliverLayoutBuilder/desc_pt_PT.json | 21 - .../SliverLayoutBuilder/desc_ru_RU.json | 21 - .../SliverLayoutBuilder/desc_zh-CN.json | 21 - .../SliverLayoutBuilder/node1_base.dart | 117 - .../lib/Sliver/SliverList/desc_de_DE.json | 22 - .../lib/Sliver/SliverList/desc_en_US.json | 22 - .../lib/Sliver/SliverList/desc_es_ES.json | 22 - .../lib/Sliver/SliverList/desc_fr_FR.json | 22 - .../lib/Sliver/SliverList/desc_it_IT.json | 22 - .../lib/Sliver/SliverList/desc_ja_JP.json | 22 - .../lib/Sliver/SliverList/desc_ko_KR.json | 22 - .../lib/Sliver/SliverList/desc_pt_PT.json | 22 - .../lib/Sliver/SliverList/desc_ru_RU.json | 22 - .../lib/Sliver/SliverList/desc_zh-CN.json | 22 - .../lib/Sliver/SliverList/node1_base.dart | 89 - .../SliverMainAxisGroup/desc_de_DE.json | 19 - .../SliverMainAxisGroup/desc_en_US.json | 19 - .../SliverMainAxisGroup/desc_es_ES.json | 19 - .../SliverMainAxisGroup/desc_fr_FR.json | 19 - .../SliverMainAxisGroup/desc_it_IT.json | 19 - .../SliverMainAxisGroup/desc_ja_JP.json | 19 - .../SliverMainAxisGroup/desc_ko_KR.json | 19 - .../SliverMainAxisGroup/desc_pt_PT.json | 19 - .../SliverMainAxisGroup/desc_ru_RU.json | 19 - .../SliverMainAxisGroup/desc_zh-CN.json | 19 - .../lib/Sliver/SliverMainAxisGroup/node1.dart | 95 - .../lib/Sliver/SliverOpacity/desc_de_DE.json | 19 - .../lib/Sliver/SliverOpacity/desc_en_US.json | 19 - .../lib/Sliver/SliverOpacity/desc_es_ES.json | 19 - .../lib/Sliver/SliverOpacity/desc_fr_FR.json | 19 - .../lib/Sliver/SliverOpacity/desc_it_IT.json | 19 - .../lib/Sliver/SliverOpacity/desc_ja_JP.json | 19 - .../lib/Sliver/SliverOpacity/desc_ko_KR.json | 19 - .../lib/Sliver/SliverOpacity/desc_pt_PT.json | 19 - .../lib/Sliver/SliverOpacity/desc_ru_RU.json | 19 - .../lib/Sliver/SliverOpacity/desc_zh-CN.json | 19 - .../lib/Sliver/SliverOpacity/node1_base.dart | 87 - .../SliverOverlapAbsorber/desc_de_DE.json | 23 - .../SliverOverlapAbsorber/desc_en_US.json | 23 - .../SliverOverlapAbsorber/desc_es_ES.json | 23 - .../SliverOverlapAbsorber/desc_fr_FR.json | 23 - .../SliverOverlapAbsorber/desc_it_IT.json | 23 - .../SliverOverlapAbsorber/desc_ja_JP.json | 23 - .../SliverOverlapAbsorber/desc_ko_KR.json | 23 - .../SliverOverlapAbsorber/desc_pt_PT.json | 23 - .../SliverOverlapAbsorber/desc_ru_RU.json | 23 - .../SliverOverlapAbsorber/desc_zh-CN.json | 23 - .../SliverOverlapAbsorber/node1_base.dart | 92 - .../SliverOverlapInjector/desc_de_DE.json | 23 - .../SliverOverlapInjector/desc_en_US.json | 23 - .../SliverOverlapInjector/desc_es_ES.json | 23 - .../SliverOverlapInjector/desc_fr_FR.json | 23 - .../SliverOverlapInjector/desc_it_IT.json | 23 - .../SliverOverlapInjector/desc_ja_JP.json | 23 - .../SliverOverlapInjector/desc_ko_KR.json | 23 - .../SliverOverlapInjector/desc_pt_PT.json | 23 - .../SliverOverlapInjector/desc_ru_RU.json | 23 - .../SliverOverlapInjector/desc_zh-CN.json | 23 - .../SliverOverlapInjector/node1_base.dart | 92 - .../lib/Sliver/SliverPadding/desc_de_DE.json | 19 - .../lib/Sliver/SliverPadding/desc_en_US.json | 19 - .../lib/Sliver/SliverPadding/desc_es_ES.json | 19 - .../lib/Sliver/SliverPadding/desc_fr_FR.json | 19 - .../lib/Sliver/SliverPadding/desc_it_IT.json | 19 - .../lib/Sliver/SliverPadding/desc_ja_JP.json | 19 - .../lib/Sliver/SliverPadding/desc_ko_KR.json | 19 - .../lib/Sliver/SliverPadding/desc_pt_PT.json | 19 - .../lib/Sliver/SliverPadding/desc_ru_RU.json | 19 - .../lib/Sliver/SliverPadding/desc_zh-CN.json | 19 - .../lib/Sliver/SliverPadding/node1_base.dart | 87 - .../SliverPersistentHeader/desc_de_DE.json | 20 - .../SliverPersistentHeader/desc_en_US.json | 20 - .../SliverPersistentHeader/desc_es_ES.json | 20 - .../SliverPersistentHeader/desc_fr_FR.json | 20 - .../SliverPersistentHeader/desc_it_IT.json | 20 - .../SliverPersistentHeader/desc_ja_JP.json | 20 - .../SliverPersistentHeader/desc_ko_KR.json | 20 - .../SliverPersistentHeader/desc_pt_PT.json | 20 - .../SliverPersistentHeader/desc_ru_RU.json | 20 - .../SliverPersistentHeader/desc_zh-CN.json | 20 - .../SliverPersistentHeader/node1_base.dart | 158 - .../SliverPrototypeExtentList/desc_de_DE.json | 22 - .../SliverPrototypeExtentList/desc_en_US.json | 22 - .../SliverPrototypeExtentList/desc_es_ES.json | 22 - .../SliverPrototypeExtentList/desc_fr_FR.json | 22 - .../SliverPrototypeExtentList/desc_it_IT.json | 22 - .../SliverPrototypeExtentList/desc_ja_JP.json | 22 - .../SliverPrototypeExtentList/desc_ko_KR.json | 22 - .../SliverPrototypeExtentList/desc_pt_PT.json | 22 - .../SliverPrototypeExtentList/desc_ru_RU.json | 22 - .../SliverPrototypeExtentList/desc_zh-CN.json | 22 - .../SliverPrototypeExtentList/node1_base.dart | 99 - .../Sliver/SliverToBoxAdapter/desc_de_DE.json | 18 - .../Sliver/SliverToBoxAdapter/desc_en_US.json | 18 - .../Sliver/SliverToBoxAdapter/desc_es_ES.json | 18 - .../Sliver/SliverToBoxAdapter/desc_fr_FR.json | 18 - .../Sliver/SliverToBoxAdapter/desc_it_IT.json | 18 - .../Sliver/SliverToBoxAdapter/desc_ja_JP.json | 18 - .../Sliver/SliverToBoxAdapter/desc_ko_KR.json | 18 - .../Sliver/SliverToBoxAdapter/desc_pt_PT.json | 18 - .../Sliver/SliverToBoxAdapter/desc_ru_RU.json | 18 - .../Sliver/SliverToBoxAdapter/desc_zh-CN.json | 18 - .../Sliver/SliverToBoxAdapter/node1_base.dart | 108 - .../SliverWithKeepAliveWidget/desc_de_DE.json | 25 - .../SliverWithKeepAliveWidget/desc_en_US.json | 25 - .../SliverWithKeepAliveWidget/desc_es_ES.json | 25 - .../SliverWithKeepAliveWidget/desc_fr_FR.json | 25 - .../SliverWithKeepAliveWidget/desc_it_IT.json | 25 - .../SliverWithKeepAliveWidget/desc_ja_JP.json | 25 - .../SliverWithKeepAliveWidget/desc_ko_KR.json | 25 - .../SliverWithKeepAliveWidget/desc_pt_PT.json | 25 - .../SliverWithKeepAliveWidget/desc_ru_RU.json | 25 - .../SliverWithKeepAliveWidget/desc_zh-CN.json | 25 - .../SliverWithKeepAliveWidget/node1_base.dart | 27 - .../AlignTransition/desc_de_DE.json | 22 - .../AlignTransition/desc_en_US.json | 22 - .../AlignTransition/desc_es_ES.json | 22 - .../AlignTransition/desc_fr_FR.json | 22 - .../AlignTransition/desc_it_IT.json | 22 - .../AlignTransition/desc_ja_JP.json | 22 - .../AlignTransition/desc_ko_KR.json | 22 - .../AlignTransition/desc_pt_PT.json | 22 - .../AlignTransition/desc_ru_RU.json | 22 - .../AlignTransition/desc_zh-CN.json | 22 - .../AlignTransition/node1_base.dart | 54 - .../AnimatedAlign/desc_de_DE.json | 26 - .../AnimatedAlign/desc_en_US.json | 26 - .../AnimatedAlign/desc_es_ES.json | 26 - .../AnimatedAlign/desc_fr_FR.json | 26 - .../AnimatedAlign/desc_it_IT.json | 26 - .../AnimatedAlign/desc_ja_JP.json | 26 - .../AnimatedAlign/desc_ko_KR.json | 26 - .../AnimatedAlign/desc_pt_PT.json | 26 - .../AnimatedAlign/desc_ru_RU.json | 26 - .../AnimatedAlign/desc_zh-CN.json | 26 - .../AnimatedAlign/node1_base.dart | 62 - .../AnimatedBuilder/desc_de_DE.json | 20 - .../AnimatedBuilder/desc_en_US.json | 20 - .../AnimatedBuilder/desc_es_ES.json | 20 - .../AnimatedBuilder/desc_fr_FR.json | 20 - .../AnimatedBuilder/desc_it_IT.json | 20 - .../AnimatedBuilder/desc_ja_JP.json | 20 - .../AnimatedBuilder/desc_ko_KR.json | 20 - .../AnimatedBuilder/desc_pt_PT.json | 20 - .../AnimatedBuilder/desc_ru_RU.json | 20 - .../AnimatedBuilder/desc_zh-CN.json | 20 - .../AnimatedBuilder/node1_base.dart | 62 - .../AnimatedContainer/desc_de_DE.json | 30 - .../AnimatedContainer/desc_en_US.json | 30 - .../AnimatedContainer/desc_es_ES.json | 30 - .../AnimatedContainer/desc_fr_FR.json | 30 - .../AnimatedContainer/desc_it_IT.json | 30 - .../AnimatedContainer/desc_ja_JP.json | 30 - .../AnimatedContainer/desc_ko_KR.json | 30 - .../AnimatedContainer/desc_pt_PT.json | 30 - .../AnimatedContainer/desc_ru_RU.json | 30 - .../AnimatedContainer/desc_zh-CN.json | 30 - .../AnimatedContainer/node1_base.dart | 94 - .../AnimatedCrossFade/desc_de_DE.json | 30 - .../AnimatedCrossFade/desc_en_US.json | 30 - .../AnimatedCrossFade/desc_es_ES.json | 30 - .../AnimatedCrossFade/desc_fr_FR.json | 30 - .../AnimatedCrossFade/desc_it_IT.json | 30 - .../AnimatedCrossFade/desc_ja_JP.json | 30 - .../AnimatedCrossFade/desc_ko_KR.json | 30 - .../AnimatedCrossFade/desc_pt_PT.json | 30 - .../AnimatedCrossFade/desc_ru_RU.json | 30 - .../AnimatedCrossFade/desc_zh-CN.json | 30 - .../AnimatedCrossFade/node1_base.dart | 58 - .../AnimatedCrossFade/node2_curve.dart | 56 - .../AnimatedDefaultTextStyle/desc_de_DE.json | 29 - .../AnimatedDefaultTextStyle/desc_en_US.json | 29 - .../AnimatedDefaultTextStyle/desc_es_ES.json | 29 - .../AnimatedDefaultTextStyle/desc_fr_FR.json | 29 - .../AnimatedDefaultTextStyle/desc_it_IT.json | 29 - .../AnimatedDefaultTextStyle/desc_ja_JP.json | 29 - .../AnimatedDefaultTextStyle/desc_ko_KR.json | 29 - .../AnimatedDefaultTextStyle/desc_pt_PT.json | 29 - .../AnimatedDefaultTextStyle/desc_ru_RU.json | 29 - .../AnimatedDefaultTextStyle/desc_zh-CN.json | 29 - .../AnimatedDefaultTextStyle/node1_base.dart | 73 - .../desc_de_DE.json | 31 - .../desc_en_US.json | 31 - .../desc_es_ES.json | 31 - .../desc_fr_FR.json | 31 - .../desc_it_IT.json | 31 - .../desc_ja_JP.json | 31 - .../desc_ko_KR.json | 31 - .../desc_pt_PT.json | 31 - .../desc_ru_RU.json | 31 - .../desc_zh-CN.json | 31 - .../AnimatedFractionallySizedBox/node1.dart | 58 - .../AnimatedList/desc_de_DE.json | 23 - .../AnimatedList/desc_en_US.json | 23 - .../AnimatedList/desc_es_ES.json | 23 - .../AnimatedList/desc_fr_FR.json | 23 - .../AnimatedList/desc_it_IT.json | 23 - .../AnimatedList/desc_ja_JP.json | 23 - .../AnimatedList/desc_ko_KR.json | 23 - .../AnimatedList/desc_pt_PT.json | 23 - .../AnimatedList/desc_ru_RU.json | 23 - .../AnimatedList/desc_zh-CN.json | 23 - .../AnimatedList/node1_base.dart | 179 - .../AnimatedModalBarrier/desc_de_DE.json | 19 - .../AnimatedModalBarrier/desc_en_US.json | 19 - .../AnimatedModalBarrier/desc_es_ES.json | 19 - .../AnimatedModalBarrier/desc_fr_FR.json | 19 - .../AnimatedModalBarrier/desc_it_IT.json | 19 - .../AnimatedModalBarrier/desc_ja_JP.json | 19 - .../AnimatedModalBarrier/desc_ko_KR.json | 19 - .../AnimatedModalBarrier/desc_pt_PT.json | 19 - .../AnimatedModalBarrier/desc_ru_RU.json | 19 - .../AnimatedModalBarrier/desc_zh-CN.json | 19 - .../AnimatedModalBarrier/node1_base.dart | 55 - .../AnimatedOpacity/desc_de_DE.json | 25 - .../AnimatedOpacity/desc_en_US.json | 25 - .../AnimatedOpacity/desc_es_ES.json | 25 - .../AnimatedOpacity/desc_fr_FR.json | 25 - .../AnimatedOpacity/desc_it_IT.json | 25 - .../AnimatedOpacity/desc_ja_JP.json | 25 - .../AnimatedOpacity/desc_ko_KR.json | 25 - .../AnimatedOpacity/desc_pt_PT.json | 25 - .../AnimatedOpacity/desc_ru_RU.json | 25 - .../AnimatedOpacity/desc_zh-CN.json | 25 - .../AnimatedOpacity/node1_base.dart | 42 - .../AnimatedPadding/desc_de_DE.json | 22 - .../AnimatedPadding/desc_en_US.json | 22 - .../AnimatedPadding/desc_es_ES.json | 22 - .../AnimatedPadding/desc_fr_FR.json | 22 - .../AnimatedPadding/desc_it_IT.json | 22 - .../AnimatedPadding/desc_ja_JP.json | 22 - .../AnimatedPadding/desc_ko_KR.json | 22 - .../AnimatedPadding/desc_pt_PT.json | 22 - .../AnimatedPadding/desc_ru_RU.json | 22 - .../AnimatedPadding/desc_zh-CN.json | 22 - .../AnimatedPadding/node1_base.dart | 58 - .../AnimatedPhysicalModel/desc_de_DE.json | 26 - .../AnimatedPhysicalModel/desc_en_US.json | 26 - .../AnimatedPhysicalModel/desc_es_ES.json | 26 - .../AnimatedPhysicalModel/desc_fr_FR.json | 26 - .../AnimatedPhysicalModel/desc_it_IT.json | 26 - .../AnimatedPhysicalModel/desc_ja_JP.json | 26 - .../AnimatedPhysicalModel/desc_ko_KR.json | 26 - .../AnimatedPhysicalModel/desc_pt_PT.json | 26 - .../AnimatedPhysicalModel/desc_ru_RU.json | 26 - .../AnimatedPhysicalModel/desc_zh-CN.json | 26 - .../AnimatedPhysicalModel/node1_base.dart | 52 - .../AnimatedPositioned/desc_de_DE.json | 29 - .../AnimatedPositioned/desc_en_US.json | 29 - .../AnimatedPositioned/desc_es_ES.json | 29 - .../AnimatedPositioned/desc_fr_FR.json | 29 - .../AnimatedPositioned/desc_it_IT.json | 29 - .../AnimatedPositioned/desc_ja_JP.json | 29 - .../AnimatedPositioned/desc_ko_KR.json | 29 - .../AnimatedPositioned/desc_pt_PT.json | 29 - .../AnimatedPositioned/desc_ru_RU.json | 29 - .../AnimatedPositioned/desc_zh-CN.json | 29 - .../AnimatedPositioned/node1_base.dart | 73 - .../desc_de_DE.json | 28 - .../desc_en_US.json | 28 - .../desc_es_ES.json | 28 - .../desc_fr_FR.json | 28 - .../desc_it_IT.json | 28 - .../desc_ja_JP.json | 28 - .../desc_ko_KR.json | 28 - .../desc_pt_PT.json | 28 - .../desc_ru_RU.json | 28 - .../desc_zh-CN.json | 28 - .../node1_base.dart | 74 - .../AnimatedRotation/desc_de_DE.json | 28 - .../AnimatedRotation/desc_en_US.json | 28 - .../AnimatedRotation/desc_es_ES.json | 28 - .../AnimatedRotation/desc_fr_FR.json | 28 - .../AnimatedRotation/desc_it_IT.json | 28 - .../AnimatedRotation/desc_ja_JP.json | 28 - .../AnimatedRotation/desc_ko_KR.json | 28 - .../AnimatedRotation/desc_pt_PT.json | 28 - .../AnimatedRotation/desc_ru_RU.json | 28 - .../AnimatedRotation/desc_zh-CN.json | 28 - .../AnimatedRotation/node1.dart | 76 - .../AnimatedScale/desc_de_DE.json | 29 - .../AnimatedScale/desc_en_US.json | 29 - .../AnimatedScale/desc_es_ES.json | 29 - .../AnimatedScale/desc_fr_FR.json | 29 - .../AnimatedScale/desc_it_IT.json | 29 - .../AnimatedScale/desc_ja_JP.json | 29 - .../AnimatedScale/desc_ko_KR.json | 29 - .../AnimatedScale/desc_pt_PT.json | 29 - .../AnimatedScale/desc_ru_RU.json | 29 - .../AnimatedScale/desc_zh-CN.json | 29 - .../StatefulWidget/AnimatedScale/node1.dart | 70 - .../AnimatedSlide/desc_de_DE.json | 26 - .../AnimatedSlide/desc_en_US.json | 26 - .../AnimatedSlide/desc_es_ES.json | 26 - .../AnimatedSlide/desc_fr_FR.json | 26 - .../AnimatedSlide/desc_it_IT.json | 26 - .../AnimatedSlide/desc_ja_JP.json | 26 - .../AnimatedSlide/desc_ko_KR.json | 26 - .../AnimatedSlide/desc_pt_PT.json | 26 - .../AnimatedSlide/desc_ru_RU.json | 26 - .../AnimatedSlide/desc_zh-CN.json | 26 - .../StatefulWidget/AnimatedSlide/node1.dart | 94 - .../AnimatedSwitcher/desc_de_DE.json | 23 - .../AnimatedSwitcher/desc_en_US.json | 23 - .../AnimatedSwitcher/desc_es_ES.json | 23 - .../AnimatedSwitcher/desc_fr_FR.json | 23 - .../AnimatedSwitcher/desc_it_IT.json | 23 - .../AnimatedSwitcher/desc_ja_JP.json | 23 - .../AnimatedSwitcher/desc_ko_KR.json | 23 - .../AnimatedSwitcher/desc_pt_PT.json | 23 - .../AnimatedSwitcher/desc_ru_RU.json | 23 - .../AnimatedSwitcher/desc_zh-CN.json | 23 - .../AnimatedSwitcher/node1_base.dart | 76 - .../AnimatedTheme/desc_de_DE.json | 22 - .../AnimatedTheme/desc_en_US.json | 22 - .../AnimatedTheme/desc_es_ES.json | 22 - .../AnimatedTheme/desc_fr_FR.json | 22 - .../AnimatedTheme/desc_it_IT.json | 22 - .../AnimatedTheme/desc_ja_JP.json | 22 - .../AnimatedTheme/desc_ko_KR.json | 22 - .../AnimatedTheme/desc_pt_PT.json | 22 - .../AnimatedTheme/desc_ru_RU.json | 22 - .../AnimatedTheme/desc_zh-CN.json | 22 - .../AnimatedTheme/node1_base.dart | 91 - .../lib/StatefulWidget/AppBar/desc_de_DE.json | 31 - .../lib/StatefulWidget/AppBar/desc_en_US.json | 31 - .../lib/StatefulWidget/AppBar/desc_es_ES.json | 31 - .../lib/StatefulWidget/AppBar/desc_fr_FR.json | 31 - .../lib/StatefulWidget/AppBar/desc_it_IT.json | 31 - .../lib/StatefulWidget/AppBar/desc_ja_JP.json | 31 - .../lib/StatefulWidget/AppBar/desc_ko_KR.json | 31 - .../lib/StatefulWidget/AppBar/desc_pt_PT.json | 31 - .../lib/StatefulWidget/AppBar/desc_ru_RU.json | 31 - .../lib/StatefulWidget/AppBar/desc_zh-CN.json | 31 - .../lib/StatefulWidget/AppBar/node1_base.dart | 38 - .../lib/StatefulWidget/AppBar/node2_tab.dart | 81 - .../AutomaticKeepAlive/desc_de_DE.json | 26 - .../AutomaticKeepAlive/desc_en_US.json | 26 - .../AutomaticKeepAlive/desc_es_ES.json | 26 - .../AutomaticKeepAlive/desc_fr_FR.json | 26 - .../AutomaticKeepAlive/desc_it_IT.json | 26 - .../AutomaticKeepAlive/desc_ja_JP.json | 26 - .../AutomaticKeepAlive/desc_ko_KR.json | 26 - .../AutomaticKeepAlive/desc_pt_PT.json | 26 - .../AutomaticKeepAlive/desc_ru_RU.json | 26 - .../AutomaticKeepAlive/desc_zh-CN.json | 26 - .../AutomaticKeepAlive/node1_base.dart | 114 - .../BottomAppBar/desc_de_DE.json | 22 - .../BottomAppBar/desc_en_US.json | 22 - .../BottomAppBar/desc_es_ES.json | 22 - .../BottomAppBar/desc_fr_FR.json | 22 - .../BottomAppBar/desc_it_IT.json | 22 - .../BottomAppBar/desc_ja_JP.json | 22 - .../BottomAppBar/desc_ko_KR.json | 22 - .../BottomAppBar/desc_pt_PT.json | 22 - .../BottomAppBar/desc_ru_RU.json | 22 - .../BottomAppBar/desc_zh-CN.json | 22 - .../BottomAppBar/node1_base.dart | 108 - .../BottomNavigationBar/desc_de_DE.json | 36 - .../BottomNavigationBar/desc_en_US.json | 36 - .../BottomNavigationBar/desc_es_ES.json | 36 - .../BottomNavigationBar/desc_fr_FR.json | 36 - .../BottomNavigationBar/desc_it_IT.json | 36 - .../BottomNavigationBar/desc_ja_JP.json | 36 - .../BottomNavigationBar/desc_ko_KR.json | 36 - .../BottomNavigationBar/desc_pt_PT.json | 36 - .../BottomNavigationBar/desc_ru_RU.json | 36 - .../BottomNavigationBar/desc_zh-CN.json | 36 - .../BottomNavigationBar/node1_base.dart | 81 - .../BottomNavigationBar/node2_page.dart | 95 - .../CarouselView/desc_de_DE.json | 38 - .../CarouselView/desc_en_US.json | 38 - .../CarouselView/desc_es_ES.json | 38 - .../CarouselView/desc_fr_FR.json | 38 - .../CarouselView/desc_it_IT.json | 38 - .../CarouselView/desc_ja_JP.json | 38 - .../CarouselView/desc_ko_KR.json | 38 - .../CarouselView/desc_pt_PT.json | 38 - .../CarouselView/desc_ru_RU.json | 38 - .../CarouselView/desc_zh-CN.json | 38 - .../CarouselView/node1_base.dart | 54 - .../StatefulWidget/CarouselView/node2.dart | 101 - .../StatefulWidget/Checkbox/desc_de_DE.json | 29 - .../StatefulWidget/Checkbox/desc_en_US.json | 29 - .../StatefulWidget/Checkbox/desc_es_ES.json | 29 - .../StatefulWidget/Checkbox/desc_fr_FR.json | 29 - .../StatefulWidget/Checkbox/desc_it_IT.json | 29 - .../StatefulWidget/Checkbox/desc_ja_JP.json | 29 - .../StatefulWidget/Checkbox/desc_ko_KR.json | 29 - .../StatefulWidget/Checkbox/desc_pt_PT.json | 29 - .../StatefulWidget/Checkbox/desc_ru_RU.json | 29 - .../StatefulWidget/Checkbox/desc_zh-CN.json | 29 - .../StatefulWidget/Checkbox/node1_base.dart | 39 - .../Checkbox/node2_tristate.dart | 35 - .../CircularProgressIndicator/desc_de_DE.json | 24 - .../CircularProgressIndicator/desc_en_US.json | 24 - .../CircularProgressIndicator/desc_es_ES.json | 24 - .../CircularProgressIndicator/desc_fr_FR.json | 24 - .../CircularProgressIndicator/desc_it_IT.json | 24 - .../CircularProgressIndicator/desc_ja_JP.json | 24 - .../CircularProgressIndicator/desc_ko_KR.json | 24 - .../CircularProgressIndicator/desc_pt_PT.json | 24 - .../CircularProgressIndicator/desc_ru_RU.json | 24 - .../CircularProgressIndicator/desc_zh-CN.json | 24 - .../CircularProgressIndicator/node1_base.dart | 35 - .../desc_de_DE.json | 22 - .../desc_en_US.json | 22 - .../desc_es_ES.json | 22 - .../desc_fr_FR.json | 22 - .../desc_it_IT.json | 22 - .../desc_ja_JP.json | 22 - .../desc_ko_KR.json | 22 - .../desc_pt_PT.json | 22 - .../desc_ru_RU.json | 22 - .../desc_zh-CN.json | 22 - .../node1_base.dart | 26 - .../CupertinoApp/desc_de_DE.json | 24 - .../CupertinoApp/desc_en_US.json | 24 - .../CupertinoApp/desc_es_ES.json | 24 - .../CupertinoApp/desc_fr_FR.json | 24 - .../CupertinoApp/desc_it_IT.json | 24 - .../CupertinoApp/desc_ja_JP.json | 24 - .../CupertinoApp/desc_ko_KR.json | 24 - .../CupertinoApp/desc_pt_PT.json | 24 - .../CupertinoApp/desc_ru_RU.json | 24 - .../CupertinoApp/desc_zh-CN.json | 24 - .../CupertinoApp/node1_base.dart | 39 - .../CupertinoButton/desc_de_DE.json | 23 - .../CupertinoButton/desc_en_US.json | 23 - .../CupertinoButton/desc_es_ES.json | 23 - .../CupertinoButton/desc_fr_FR.json | 23 - .../CupertinoButton/desc_it_IT.json | 23 - .../CupertinoButton/desc_ja_JP.json | 23 - .../CupertinoButton/desc_ko_KR.json | 23 - .../CupertinoButton/desc_pt_PT.json | 23 - .../CupertinoButton/desc_ru_RU.json | 23 - .../CupertinoButton/desc_zh-CN.json | 23 - .../CupertinoButton/node1_base.dart | 32 - .../CupertinoCheckbox/desc_de_DE.json | 43 - .../CupertinoCheckbox/desc_en_US.json | 43 - .../CupertinoCheckbox/desc_es_ES.json | 43 - .../CupertinoCheckbox/desc_fr_FR.json | 43 - .../CupertinoCheckbox/desc_it_IT.json | 43 - .../CupertinoCheckbox/desc_ja_JP.json | 43 - .../CupertinoCheckbox/desc_ko_KR.json | 43 - .../CupertinoCheckbox/desc_pt_PT.json | 43 - .../CupertinoCheckbox/desc_ru_RU.json | 43 - .../CupertinoCheckbox/desc_zh-CN.json | 43 - .../CupertinoCheckbox/node1.dart | 45 - .../CupertinoCheckbox/node2.dart | 27 - .../CupertinoCheckbox/node3.dart | 48 - .../CupertinoContextMenu/desc_de_DE.json | 20 - .../CupertinoContextMenu/desc_en_US.json | 20 - .../CupertinoContextMenu/desc_es_ES.json | 20 - .../CupertinoContextMenu/desc_fr_FR.json | 20 - .../CupertinoContextMenu/desc_it_IT.json | 20 - .../CupertinoContextMenu/desc_ja_JP.json | 20 - .../CupertinoContextMenu/desc_ko_KR.json | 20 - .../CupertinoContextMenu/desc_pt_PT.json | 20 - .../CupertinoContextMenu/desc_ru_RU.json | 20 - .../CupertinoContextMenu/desc_zh-CN.json | 20 - .../CupertinoContextMenu/node1_base.dart | 40 - .../desc_de_DE.json | 21 - .../desc_en_US.json | 21 - .../desc_es_ES.json | 21 - .../desc_fr_FR.json | 21 - .../desc_it_IT.json | 21 - .../desc_ja_JP.json | 21 - .../desc_ko_KR.json | 21 - .../desc_pt_PT.json | 21 - .../desc_ru_RU.json | 21 - .../desc_zh-CN.json | 21 - .../node1_base.dart | 34 - .../CupertinoDatePicker/desc_de_DE.json | 25 - .../CupertinoDatePicker/desc_en_US.json | 25 - .../CupertinoDatePicker/desc_es_ES.json | 25 - .../CupertinoDatePicker/desc_fr_FR.json | 25 - .../CupertinoDatePicker/desc_it_IT.json | 25 - .../CupertinoDatePicker/desc_ja_JP.json | 25 - .../CupertinoDatePicker/desc_ko_KR.json | 25 - .../CupertinoDatePicker/desc_pt_PT.json | 25 - .../CupertinoDatePicker/desc_ru_RU.json | 25 - .../CupertinoDatePicker/desc_zh-CN.json | 25 - .../CupertinoDatePicker/node1_base.dart | 67 - .../CupertinoNavigationBar/desc_de_DE.json | 23 - .../CupertinoNavigationBar/desc_en_US.json | 23 - .../CupertinoNavigationBar/desc_es_ES.json | 23 - .../CupertinoNavigationBar/desc_fr_FR.json | 23 - .../CupertinoNavigationBar/desc_it_IT.json | 23 - .../CupertinoNavigationBar/desc_ja_JP.json | 23 - .../CupertinoNavigationBar/desc_ko_KR.json | 23 - .../CupertinoNavigationBar/desc_pt_PT.json | 23 - .../CupertinoNavigationBar/desc_ru_RU.json | 23 - .../CupertinoNavigationBar/desc_zh-CN.json | 23 - .../CupertinoNavigationBar/node1_base.dart | 28 - .../CupertinoPageScaffold/desc_de_DE.json | 20 - .../CupertinoPageScaffold/desc_en_US.json | 20 - .../CupertinoPageScaffold/desc_es_ES.json | 20 - .../CupertinoPageScaffold/desc_fr_FR.json | 20 - .../CupertinoPageScaffold/desc_it_IT.json | 20 - .../CupertinoPageScaffold/desc_ja_JP.json | 20 - .../CupertinoPageScaffold/desc_ko_KR.json | 20 - .../CupertinoPageScaffold/desc_pt_PT.json | 20 - .../CupertinoPageScaffold/desc_ru_RU.json | 20 - .../CupertinoPageScaffold/desc_zh-CN.json | 20 - .../CupertinoPageScaffold/node1_base.dart | 27 - .../CupertinoPicker/desc_de_DE.json | 24 - .../CupertinoPicker/desc_en_US.json | 24 - .../CupertinoPicker/desc_es_ES.json | 24 - .../CupertinoPicker/desc_fr_FR.json | 24 - .../CupertinoPicker/desc_it_IT.json | 24 - .../CupertinoPicker/desc_ja_JP.json | 24 - .../CupertinoPicker/desc_ko_KR.json | 24 - .../CupertinoPicker/desc_pt_PT.json | 24 - .../CupertinoPicker/desc_ru_RU.json | 24 - .../CupertinoPicker/desc_zh-CN.json | 24 - .../CupertinoPicker/node1_base.dart | 39 - .../CupertinoRadio/desc_de_DE.json | 42 - .../CupertinoRadio/desc_en_US.json | 42 - .../CupertinoRadio/desc_es_ES.json | 42 - .../CupertinoRadio/desc_fr_FR.json | 42 - .../CupertinoRadio/desc_it_IT.json | 42 - .../CupertinoRadio/desc_ja_JP.json | 42 - .../CupertinoRadio/desc_ko_KR.json | 42 - .../CupertinoRadio/desc_pt_PT.json | 42 - .../CupertinoRadio/desc_ru_RU.json | 42 - .../CupertinoRadio/desc_zh-CN.json | 42 - .../StatefulWidget/CupertinoRadio/node1.dart | 32 - .../StatefulWidget/CupertinoRadio/node2.dart | 36 - .../StatefulWidget/CupertinoRadio/node3.dart | 32 - .../CupertinoScrollbar/desc_de_DE.json | 23 - .../CupertinoScrollbar/desc_en_US.json | 23 - .../CupertinoScrollbar/desc_es_ES.json | 23 - .../CupertinoScrollbar/desc_fr_FR.json | 23 - .../CupertinoScrollbar/desc_it_IT.json | 23 - .../CupertinoScrollbar/desc_ja_JP.json | 23 - .../CupertinoScrollbar/desc_ko_KR.json | 23 - .../CupertinoScrollbar/desc_pt_PT.json | 23 - .../CupertinoScrollbar/desc_ru_RU.json | 23 - .../CupertinoScrollbar/desc_zh-CN.json | 23 - .../CupertinoScrollbar/node1_base.dart | 57 - .../CupertinoSegmentedControl/desc_de_DE.json | 34 - .../CupertinoSegmentedControl/desc_en_US.json | 34 - .../CupertinoSegmentedControl/desc_es_ES.json | 34 - .../CupertinoSegmentedControl/desc_fr_FR.json | 34 - .../CupertinoSegmentedControl/desc_it_IT.json | 34 - .../CupertinoSegmentedControl/desc_ja_JP.json | 34 - .../CupertinoSegmentedControl/desc_ko_KR.json | 34 - .../CupertinoSegmentedControl/desc_pt_PT.json | 34 - .../CupertinoSegmentedControl/desc_ru_RU.json | 34 - .../CupertinoSegmentedControl/desc_zh-CN.json | 34 - .../CupertinoSegmentedControl/node1_base.dart | 40 - .../node2_color.dart | 45 - .../CupertinoSlider/desc_de_DE.json | 26 - .../CupertinoSlider/desc_en_US.json | 26 - .../CupertinoSlider/desc_es_ES.json | 26 - .../CupertinoSlider/desc_fr_FR.json | 26 - .../CupertinoSlider/desc_it_IT.json | 26 - .../CupertinoSlider/desc_ja_JP.json | 26 - .../CupertinoSlider/desc_ko_KR.json | 26 - .../CupertinoSlider/desc_pt_PT.json | 26 - .../CupertinoSlider/desc_ru_RU.json | 26 - .../CupertinoSlider/desc_zh-CN.json | 26 - .../CupertinoSlider/node1_base.dart | 39 - .../desc_de_DE.json | 26 - .../desc_en_US.json | 26 - .../desc_es_ES.json | 26 - .../desc_fr_FR.json | 26 - .../desc_it_IT.json | 26 - .../desc_ja_JP.json | 26 - .../desc_ko_KR.json | 26 - .../desc_pt_PT.json | 26 - .../desc_ru_RU.json | 26 - .../desc_zh-CN.json | 26 - .../node1_base.dart | 44 - .../CupertinoSwitch/desc_de_DE.json | 20 - .../CupertinoSwitch/desc_en_US.json | 20 - .../CupertinoSwitch/desc_es_ES.json | 20 - .../CupertinoSwitch/desc_fr_FR.json | 20 - .../CupertinoSwitch/desc_it_IT.json | 20 - .../CupertinoSwitch/desc_ja_JP.json | 20 - .../CupertinoSwitch/desc_ko_KR.json | 20 - .../CupertinoSwitch/desc_pt_PT.json | 20 - .../CupertinoSwitch/desc_ru_RU.json | 20 - .../CupertinoSwitch/desc_zh-CN.json | 20 - .../CupertinoSwitch/node1_base.dart | 36 - .../CupertinoTabBar/desc_de_DE.json | 25 - .../CupertinoTabBar/desc_en_US.json | 25 - .../CupertinoTabBar/desc_es_ES.json | 25 - .../CupertinoTabBar/desc_fr_FR.json | 25 - .../CupertinoTabBar/desc_it_IT.json | 25 - .../CupertinoTabBar/desc_ja_JP.json | 25 - .../CupertinoTabBar/desc_ko_KR.json | 25 - .../CupertinoTabBar/desc_pt_PT.json | 25 - .../CupertinoTabBar/desc_ru_RU.json | 25 - .../CupertinoTabBar/desc_zh-CN.json | 25 - .../CupertinoTabBar/node1_base.dart | 63 - .../CupertinoTabScaffold/desc_de_DE.json | 21 - .../CupertinoTabScaffold/desc_en_US.json | 21 - .../CupertinoTabScaffold/desc_es_ES.json | 21 - .../CupertinoTabScaffold/desc_fr_FR.json | 21 - .../CupertinoTabScaffold/desc_it_IT.json | 21 - .../CupertinoTabScaffold/desc_ja_JP.json | 21 - .../CupertinoTabScaffold/desc_ko_KR.json | 21 - .../CupertinoTabScaffold/desc_pt_PT.json | 21 - .../CupertinoTabScaffold/desc_ru_RU.json | 21 - .../CupertinoTabScaffold/desc_zh-CN.json | 21 - .../CupertinoTabScaffold/node1_base.dart | 58 - .../CupertinoTabView/desc_de_DE.json | 24 - .../CupertinoTabView/desc_en_US.json | 24 - .../CupertinoTabView/desc_es_ES.json | 24 - .../CupertinoTabView/desc_fr_FR.json | 24 - .../CupertinoTabView/desc_it_IT.json | 24 - .../CupertinoTabView/desc_ja_JP.json | 24 - .../CupertinoTabView/desc_ko_KR.json | 24 - .../CupertinoTabView/desc_pt_PT.json | 24 - .../CupertinoTabView/desc_ru_RU.json | 24 - .../CupertinoTabView/desc_zh-CN.json | 24 - .../CupertinoTabView/node1_base.dart | 103 - .../CupertinoTextField/desc_de_DE.json | 40 - .../CupertinoTextField/desc_en_US.json | 40 - .../CupertinoTextField/desc_es_ES.json | 40 - .../CupertinoTextField/desc_fr_FR.json | 40 - .../CupertinoTextField/desc_it_IT.json | 40 - .../CupertinoTextField/desc_ja_JP.json | 40 - .../CupertinoTextField/desc_ko_KR.json | 40 - .../CupertinoTextField/desc_pt_PT.json | 40 - .../CupertinoTextField/desc_ru_RU.json | 40 - .../CupertinoTextField/desc_zh-CN.json | 40 - .../CupertinoTextField/node1_base.dart | 57 - .../CupertinoTextField/node2_style.dart | 26 - .../CupertinoTimerPicker/desc_de_DE.json | 23 - .../CupertinoTimerPicker/desc_en_US.json | 23 - .../CupertinoTimerPicker/desc_es_ES.json | 23 - .../CupertinoTimerPicker/desc_fr_FR.json | 23 - .../CupertinoTimerPicker/desc_it_IT.json | 23 - .../CupertinoTimerPicker/desc_ja_JP.json | 23 - .../CupertinoTimerPicker/desc_ko_KR.json | 23 - .../CupertinoTimerPicker/desc_pt_PT.json | 23 - .../CupertinoTimerPicker/desc_ru_RU.json | 23 - .../CupertinoTimerPicker/desc_zh-CN.json | 23 - .../CupertinoTimerPicker/node1_base.dart | 62 - .../DateRangePickerDialog/desc_de_DE.json | 32 - .../DateRangePickerDialog/desc_en_US.json | 32 - .../DateRangePickerDialog/desc_es_ES.json | 32 - .../DateRangePickerDialog/desc_fr_FR.json | 32 - .../DateRangePickerDialog/desc_it_IT.json | 32 - .../DateRangePickerDialog/desc_ja_JP.json | 32 - .../DateRangePickerDialog/desc_ko_KR.json | 32 - .../DateRangePickerDialog/desc_pt_PT.json | 32 - .../DateRangePickerDialog/desc_ru_RU.json | 32 - .../DateRangePickerDialog/desc_zh-CN.json | 32 - .../DateRangePickerDialog/node1_base.dart | 68 - .../DateRangePickerDialog/node2_diy.dart | 69 - .../toly_date_picker.dart | 3041 ----------------- .../DecoratedBoxTransition/desc_de_DE.json | 20 - .../DecoratedBoxTransition/desc_en_US.json | 20 - .../DecoratedBoxTransition/desc_es_ES.json | 20 - .../DecoratedBoxTransition/desc_fr_FR.json | 20 - .../DecoratedBoxTransition/desc_it_IT.json | 20 - .../DecoratedBoxTransition/desc_ja_JP.json | 20 - .../DecoratedBoxTransition/desc_ko_KR.json | 20 - .../DecoratedBoxTransition/desc_pt_PT.json | 20 - .../DecoratedBoxTransition/desc_ru_RU.json | 20 - .../DecoratedBoxTransition/desc_zh-CN.json | 20 - .../DecoratedBoxTransition/node1_base.dart | 68 - .../DefaultTabController/desc_de_DE.json | 23 - .../DefaultTabController/desc_en_US.json | 23 - .../DefaultTabController/desc_es_ES.json | 23 - .../DefaultTabController/desc_fr_FR.json | 23 - .../DefaultTabController/desc_it_IT.json | 23 - .../DefaultTabController/desc_ja_JP.json | 23 - .../DefaultTabController/desc_ko_KR.json | 23 - .../DefaultTabController/desc_pt_PT.json | 23 - .../DefaultTabController/desc_ru_RU.json | 23 - .../DefaultTabController/desc_zh-CN.json | 23 - .../DefaultTabController/node1_base.dart | 43 - .../desc_de_DE.json | 26 - .../desc_en_US.json | 26 - .../desc_es_ES.json | 26 - .../desc_fr_FR.json | 26 - .../desc_it_IT.json | 26 - .../desc_ja_JP.json | 26 - .../desc_ko_KR.json | 26 - .../desc_pt_PT.json | 26 - .../desc_ru_RU.json | 26 - .../desc_zh-CN.json | 26 - .../node1_base.dart | 75 - .../Dismissible/desc_de_DE.json | 31 - .../Dismissible/desc_en_US.json | 31 - .../Dismissible/desc_es_ES.json | 31 - .../Dismissible/desc_fr_FR.json | 31 - .../Dismissible/desc_it_IT.json | 31 - .../Dismissible/desc_ja_JP.json | 31 - .../Dismissible/desc_ko_KR.json | 31 - .../Dismissible/desc_pt_PT.json | 31 - .../Dismissible/desc_ru_RU.json | 31 - .../Dismissible/desc_zh-CN.json | 31 - .../Dismissible/node1_base.dart | 87 - .../Dismissible/node2_direction.dart | 99 - .../StatefulWidget/DragTarget/desc_de_DE.json | 24 - .../StatefulWidget/DragTarget/desc_en_US.json | 24 - .../StatefulWidget/DragTarget/desc_es_ES.json | 24 - .../StatefulWidget/DragTarget/desc_fr_FR.json | 24 - .../StatefulWidget/DragTarget/desc_it_IT.json | 24 - .../StatefulWidget/DragTarget/desc_ja_JP.json | 24 - .../StatefulWidget/DragTarget/desc_ko_KR.json | 24 - .../StatefulWidget/DragTarget/desc_pt_PT.json | 24 - .../StatefulWidget/DragTarget/desc_ru_RU.json | 24 - .../StatefulWidget/DragTarget/desc_zh-CN.json | 24 - .../StatefulWidget/DragTarget/node1_base.dart | 86 - .../StatefulWidget/Draggable/desc_de_DE.json | 42 - .../StatefulWidget/Draggable/desc_en_US.json | 42 - .../StatefulWidget/Draggable/desc_es_ES.json | 42 - .../StatefulWidget/Draggable/desc_fr_FR.json | 42 - .../StatefulWidget/Draggable/desc_it_IT.json | 42 - .../StatefulWidget/Draggable/desc_ja_JP.json | 42 - .../StatefulWidget/Draggable/desc_ko_KR.json | 42 - .../StatefulWidget/Draggable/desc_pt_PT.json | 42 - .../StatefulWidget/Draggable/desc_ru_RU.json | 42 - .../StatefulWidget/Draggable/desc_zh-CN.json | 42 - .../StatefulWidget/Draggable/node1_base.dart | 37 - .../StatefulWidget/Draggable/node2_data.dart | 95 - .../StatefulWidget/Draggable/node3_use.dart | 77 - .../DraggableScrollableSheet/desc_de_DE.json | 25 - .../DraggableScrollableSheet/desc_en_US.json | 25 - .../DraggableScrollableSheet/desc_es_ES.json | 25 - .../DraggableScrollableSheet/desc_fr_FR.json | 25 - .../DraggableScrollableSheet/desc_it_IT.json | 25 - .../DraggableScrollableSheet/desc_ja_JP.json | 25 - .../DraggableScrollableSheet/desc_ko_KR.json | 25 - .../DraggableScrollableSheet/desc_pt_PT.json | 25 - .../DraggableScrollableSheet/desc_ru_RU.json | 25 - .../DraggableScrollableSheet/desc_zh-CN.json | 25 - .../DraggableScrollableSheet/node1_base.dart | 96 - .../DrawerController/desc_de_DE.json | 25 - .../DrawerController/desc_en_US.json | 25 - .../DrawerController/desc_es_ES.json | 25 - .../DrawerController/desc_fr_FR.json | 25 - .../DrawerController/desc_it_IT.json | 25 - .../DrawerController/desc_ja_JP.json | 25 - .../DrawerController/desc_ko_KR.json | 25 - .../DrawerController/desc_pt_PT.json | 25 - .../DrawerController/desc_ru_RU.json | 25 - .../DrawerController/desc_zh-CN.json | 25 - .../DrawerController/node1_base.dart | 63 - .../DropdownButton/desc_de_DE.json | 33 - .../DropdownButton/desc_en_US.json | 33 - .../DropdownButton/desc_es_ES.json | 33 - .../DropdownButton/desc_fr_FR.json | 33 - .../DropdownButton/desc_it_IT.json | 33 - .../DropdownButton/desc_ja_JP.json | 33 - .../DropdownButton/desc_ko_KR.json | 33 - .../DropdownButton/desc_pt_PT.json | 33 - .../DropdownButton/desc_ru_RU.json | 33 - .../DropdownButton/desc_zh-CN.json | 33 - .../DropdownButton/node1_base.dart | 55 - .../DropdownButton/node2_style.dart | 56 - .../DropdownButtonFormField/desc_de_DE.json | 24 - .../DropdownButtonFormField/desc_en_US.json | 24 - .../DropdownButtonFormField/desc_es_ES.json | 24 - .../DropdownButtonFormField/desc_fr_FR.json | 24 - .../DropdownButtonFormField/desc_it_IT.json | 24 - .../DropdownButtonFormField/desc_ja_JP.json | 24 - .../DropdownButtonFormField/desc_ko_KR.json | 24 - .../DropdownButtonFormField/desc_pt_PT.json | 24 - .../DropdownButtonFormField/desc_ru_RU.json | 24 - .../DropdownButtonFormField/desc_zh-CN.json | 24 - .../DropdownButtonFormField/node1_base.dart | 63 - .../DropdownMenu/desc_de_DE.json | 46 - .../DropdownMenu/desc_en_US.json | 46 - .../DropdownMenu/desc_es_ES.json | 46 - .../DropdownMenu/desc_fr_FR.json | 46 - .../DropdownMenu/desc_it_IT.json | 46 - .../DropdownMenu/desc_ja_JP.json | 46 - .../DropdownMenu/desc_ko_KR.json | 46 - .../DropdownMenu/desc_pt_PT.json | 46 - .../DropdownMenu/desc_ru_RU.json | 46 - .../DropdownMenu/desc_zh-CN.json | 46 - .../StatefulWidget/DropdownMenu/node1.dart | 45 - .../StatefulWidget/DropdownMenu/node2.dart | 148 - .../StatefulWidget/DropdownMenu/node3.dart | 128 - .../EditableText/desc_de_DE.json | 26 - .../EditableText/desc_en_US.json | 26 - .../EditableText/desc_es_ES.json | 26 - .../EditableText/desc_fr_FR.json | 26 - .../EditableText/desc_it_IT.json | 26 - .../EditableText/desc_ja_JP.json | 26 - .../EditableText/desc_ko_KR.json | 26 - .../EditableText/desc_pt_PT.json | 26 - .../EditableText/desc_ru_RU.json | 26 - .../EditableText/desc_zh-CN.json | 26 - .../EditableText/node1_base.dart | 32 - .../ElevatedButton/desc_de_DE.json | 34 - .../ElevatedButton/desc_en_US.json | 34 - .../ElevatedButton/desc_es_ES.json | 34 - .../ElevatedButton/desc_fr_FR.json | 34 - .../ElevatedButton/desc_it_IT.json | 34 - .../ElevatedButton/desc_ja_JP.json | 34 - .../ElevatedButton/desc_ko_KR.json | 34 - .../ElevatedButton/desc_pt_PT.json | 34 - .../ElevatedButton/desc_ru_RU.json | 34 - .../ElevatedButton/desc_zh-CN.json | 34 - .../ElevatedButton/node1_base.dart | 35 - .../ElevatedButton/node2_style.dart | 50 - .../StatefulWidget/ExpandIcon/desc_de_DE.json | 26 - .../StatefulWidget/ExpandIcon/desc_en_US.json | 26 - .../StatefulWidget/ExpandIcon/desc_es_ES.json | 26 - .../StatefulWidget/ExpandIcon/desc_fr_FR.json | 26 - .../StatefulWidget/ExpandIcon/desc_it_IT.json | 26 - .../StatefulWidget/ExpandIcon/desc_ja_JP.json | 26 - .../StatefulWidget/ExpandIcon/desc_ko_KR.json | 26 - .../StatefulWidget/ExpandIcon/desc_pt_PT.json | 26 - .../StatefulWidget/ExpandIcon/desc_ru_RU.json | 26 - .../StatefulWidget/ExpandIcon/desc_zh-CN.json | 26 - .../StatefulWidget/ExpandIcon/node1_base.dart | 26 - .../ExpansionPanelList/desc_de_DE.json | 21 - .../ExpansionPanelList/desc_en_US.json | 21 - .../ExpansionPanelList/desc_es_ES.json | 21 - .../ExpansionPanelList/desc_fr_FR.json | 21 - .../ExpansionPanelList/desc_it_IT.json | 21 - .../ExpansionPanelList/desc_ja_JP.json | 21 - .../ExpansionPanelList/desc_ko_KR.json | 21 - .../ExpansionPanelList/desc_pt_PT.json | 21 - .../ExpansionPanelList/desc_ru_RU.json | 21 - .../ExpansionPanelList/desc_zh-CN.json | 21 - .../ExpansionPanelList/node1_base.dart | 88 - .../ExpansionTile/desc_de_DE.json | 24 - .../ExpansionTile/desc_en_US.json | 24 - .../ExpansionTile/desc_es_ES.json | 24 - .../ExpansionTile/desc_fr_FR.json | 24 - .../ExpansionTile/desc_it_IT.json | 24 - .../ExpansionTile/desc_ja_JP.json | 24 - .../ExpansionTile/desc_ko_KR.json | 24 - .../ExpansionTile/desc_pt_PT.json | 24 - .../ExpansionTile/desc_ru_RU.json | 24 - .../ExpansionTile/desc_zh-CN.json | 24 - .../ExpansionTile/node1_base.dart | 27 - .../FilledButton/desc_de_DE.json | 33 - .../FilledButton/desc_en_US.json | 33 - .../FilledButton/desc_es_ES.json | 33 - .../FilledButton/desc_fr_FR.json | 33 - .../FilledButton/desc_it_IT.json | 33 - .../FilledButton/desc_ja_JP.json | 33 - .../FilledButton/desc_ko_KR.json | 33 - .../FilledButton/desc_pt_PT.json | 33 - .../FilledButton/desc_ru_RU.json | 33 - .../FilledButton/desc_zh-CN.json | 33 - .../StatefulWidget/FilledButton/node1.dart | 19 - .../StatefulWidget/FilledButton/node2.dart | 21 - .../lib/StatefulWidget/Focus/desc_de_DE.json | 38 - .../lib/StatefulWidget/Focus/desc_en_US.json | 38 - .../lib/StatefulWidget/Focus/desc_es_ES.json | 38 - .../lib/StatefulWidget/Focus/desc_fr_FR.json | 38 - .../lib/StatefulWidget/Focus/desc_it_IT.json | 38 - .../lib/StatefulWidget/Focus/desc_ja_JP.json | 38 - .../lib/StatefulWidget/Focus/desc_ko_KR.json | 38 - .../lib/StatefulWidget/Focus/desc_pt_PT.json | 38 - .../lib/StatefulWidget/Focus/desc_ru_RU.json | 38 - .../lib/StatefulWidget/Focus/desc_zh-CN.json | 38 - .../lib/StatefulWidget/Focus/node1.dart | 72 - .../lib/StatefulWidget/Focus/node2.dart | 75 - .../lib/StatefulWidget/Focus/node3.dart | 129 - .../lib/StatefulWidget/Form/desc_de_DE.json | 20 - .../lib/StatefulWidget/Form/desc_en_US.json | 20 - .../lib/StatefulWidget/Form/desc_es_ES.json | 20 - .../lib/StatefulWidget/Form/desc_fr_FR.json | 20 - .../lib/StatefulWidget/Form/desc_it_IT.json | 20 - .../lib/StatefulWidget/Form/desc_ja_JP.json | 20 - .../lib/StatefulWidget/Form/desc_ko_KR.json | 20 - .../lib/StatefulWidget/Form/desc_pt_PT.json | 20 - .../lib/StatefulWidget/Form/desc_ru_RU.json | 20 - .../lib/StatefulWidget/Form/desc_zh-CN.json | 20 - .../lib/StatefulWidget/Form/node1_base.dart | 105 - .../StatefulWidget/FormField/desc_de_DE.json | 26 - .../StatefulWidget/FormField/desc_en_US.json | 26 - .../StatefulWidget/FormField/desc_es_ES.json | 26 - .../StatefulWidget/FormField/desc_fr_FR.json | 26 - .../StatefulWidget/FormField/desc_it_IT.json | 26 - .../StatefulWidget/FormField/desc_ja_JP.json | 26 - .../StatefulWidget/FormField/desc_ko_KR.json | 26 - .../StatefulWidget/FormField/desc_pt_PT.json | 26 - .../StatefulWidget/FormField/desc_ru_RU.json | 26 - .../StatefulWidget/FormField/desc_zh-CN.json | 26 - .../StatefulWidget/FormField/node1_base.dart | 26 - .../FutureBuilder/desc_de_DE.json | 20 - .../FutureBuilder/desc_en_US.json | 20 - .../FutureBuilder/desc_es_ES.json | 20 - .../FutureBuilder/desc_fr_FR.json | 20 - .../FutureBuilder/desc_it_IT.json | 20 - .../FutureBuilder/desc_ja_JP.json | 20 - .../FutureBuilder/desc_ko_KR.json | 20 - .../FutureBuilder/desc_pt_PT.json | 20 - .../FutureBuilder/desc_ru_RU.json | 20 - .../FutureBuilder/desc_zh-CN.json | 20 - .../FutureBuilder/node1_base.dart | 45 - .../desc_de_DE.json | 22 - .../desc_en_US.json | 22 - .../desc_es_ES.json | 22 - .../desc_fr_FR.json | 22 - .../desc_it_IT.json | 22 - .../desc_ja_JP.json | 22 - .../desc_ko_KR.json | 22 - .../desc_pt_PT.json | 22 - .../desc_ru_RU.json | 22 - .../desc_zh-CN.json | 22 - .../node1_base.dart | 53 - .../lib/StatefulWidget/Hero/desc_de_DE.json | 18 - .../lib/StatefulWidget/Hero/desc_en_US.json | 18 - .../lib/StatefulWidget/Hero/desc_es_ES.json | 18 - .../lib/StatefulWidget/Hero/desc_fr_FR.json | 18 - .../lib/StatefulWidget/Hero/desc_it_IT.json | 18 - .../lib/StatefulWidget/Hero/desc_ja_JP.json | 18 - .../lib/StatefulWidget/Hero/desc_ko_KR.json | 18 - .../lib/StatefulWidget/Hero/desc_pt_PT.json | 18 - .../lib/StatefulWidget/Hero/desc_ru_RU.json | 18 - .../lib/StatefulWidget/Hero/desc_zh-CN.json | 18 - .../lib/StatefulWidget/Hero/node1_base.dart | 120 - .../lib/StatefulWidget/Image/desc_de_DE.json | 58 - .../lib/StatefulWidget/Image/desc_en_US.json | 58 - .../lib/StatefulWidget/Image/desc_es_ES.json | 58 - .../lib/StatefulWidget/Image/desc_fr_FR.json | 58 - .../lib/StatefulWidget/Image/desc_it_IT.json | 58 - .../lib/StatefulWidget/Image/desc_ja_JP.json | 58 - .../lib/StatefulWidget/Image/desc_ko_KR.json | 58 - .../lib/StatefulWidget/Image/desc_pt_PT.json | 58 - .../lib/StatefulWidget/Image/desc_ru_RU.json | 58 - .../lib/StatefulWidget/Image/desc_zh-CN.json | 58 - .../lib/StatefulWidget/Image/node1_base.dart | 27 - .../lib/StatefulWidget/Image/node2_fit.dart | 55 - .../StatefulWidget/Image/node3_alignment.dart | 49 - .../Image/node4_colorBlendMode.dart | 30 - .../StatefulWidget/Image/node5_repeat.dart | 28 - .../Image/node6_centerSlice.dart | 21 - .../lib/StatefulWidget/Ink/desc_de_DE.json | 33 - .../lib/StatefulWidget/Ink/desc_en_US.json | 33 - .../lib/StatefulWidget/Ink/desc_es_ES.json | 33 - .../lib/StatefulWidget/Ink/desc_fr_FR.json | 33 - .../lib/StatefulWidget/Ink/desc_it_IT.json | 33 - .../lib/StatefulWidget/Ink/desc_ja_JP.json | 33 - .../lib/StatefulWidget/Ink/desc_ko_KR.json | 33 - .../lib/StatefulWidget/Ink/desc_pt_PT.json | 33 - .../lib/StatefulWidget/Ink/desc_ru_RU.json | 33 - .../lib/StatefulWidget/Ink/desc_zh-CN.json | 33 - .../lib/StatefulWidget/Ink/node1_base.dart | 33 - .../lib/StatefulWidget/Ink/node2_image.dart | 35 - .../InkResponse/desc_de_DE.json | 36 - .../InkResponse/desc_en_US.json | 36 - .../InkResponse/desc_es_ES.json | 36 - .../InkResponse/desc_fr_FR.json | 36 - .../InkResponse/desc_it_IT.json | 36 - .../InkResponse/desc_ja_JP.json | 36 - .../InkResponse/desc_ko_KR.json | 36 - .../InkResponse/desc_pt_PT.json | 36 - .../InkResponse/desc_ru_RU.json | 36 - .../InkResponse/desc_zh-CN.json | 36 - .../InkResponse/node1_base.dart | 32 - .../InkResponse/node2_color.dart | 34 - .../StatefulWidget/InkWell/desc_de_DE.json | 36 - .../StatefulWidget/InkWell/desc_en_US.json | 36 - .../StatefulWidget/InkWell/desc_es_ES.json | 36 - .../StatefulWidget/InkWell/desc_fr_FR.json | 36 - .../StatefulWidget/InkWell/desc_it_IT.json | 36 - .../StatefulWidget/InkWell/desc_ja_JP.json | 36 - .../StatefulWidget/InkWell/desc_ko_KR.json | 36 - .../StatefulWidget/InkWell/desc_pt_PT.json | 36 - .../StatefulWidget/InkWell/desc_ru_RU.json | 36 - .../StatefulWidget/InkWell/desc_zh-CN.json | 36 - .../StatefulWidget/InkWell/node1_base.dart | 32 - .../StatefulWidget/InkWell/node2_color.dart | 34 - .../InputDecorator/desc_de_DE.json | 20 - .../InputDecorator/desc_en_US.json | 20 - .../InputDecorator/desc_es_ES.json | 20 - .../InputDecorator/desc_fr_FR.json | 20 - .../InputDecorator/desc_it_IT.json | 20 - .../InputDecorator/desc_ja_JP.json | 20 - .../InputDecorator/desc_ko_KR.json | 20 - .../InputDecorator/desc_pt_PT.json | 20 - .../InputDecorator/desc_ru_RU.json | 20 - .../InputDecorator/desc_zh-CN.json | 20 - .../InputDecorator/node1_base.dart | 26 - .../InteractiveViewer/desc_de_DE.json | 45 - .../InteractiveViewer/desc_en_US.json | 45 - .../InteractiveViewer/desc_es_ES.json | 45 - .../InteractiveViewer/desc_fr_FR.json | 45 - .../InteractiveViewer/desc_it_IT.json | 45 - .../InteractiveViewer/desc_ja_JP.json | 45 - .../InteractiveViewer/desc_ko_KR.json | 45 - .../InteractiveViewer/desc_pt_PT.json | 45 - .../InteractiveViewer/desc_ru_RU.json | 45 - .../InteractiveViewer/desc_zh-CN.json | 45 - .../InteractiveViewer/node1_base.dart | 41 - .../InteractiveViewer/node2_constrained.dart | 69 - .../InteractiveViewer/node3_controller.dart | 146 - .../KeyboardListener/desc_de_DE.json | 26 - .../KeyboardListener/desc_en_US.json | 26 - .../KeyboardListener/desc_es_ES.json | 26 - .../KeyboardListener/desc_fr_FR.json | 26 - .../KeyboardListener/desc_it_IT.json | 26 - .../KeyboardListener/desc_ja_JP.json | 26 - .../KeyboardListener/desc_ko_KR.json | 26 - .../KeyboardListener/desc_pt_PT.json | 26 - .../KeyboardListener/desc_ru_RU.json | 26 - .../KeyboardListener/desc_zh-CN.json | 26 - .../KeyboardListener/node1.dart | 133 - .../LicensePage/desc_de_DE.json | 24 - .../LicensePage/desc_en_US.json | 24 - .../LicensePage/desc_es_ES.json | 24 - .../LicensePage/desc_fr_FR.json | 24 - .../LicensePage/desc_it_IT.json | 24 - .../LicensePage/desc_ja_JP.json | 24 - .../LicensePage/desc_ko_KR.json | 24 - .../LicensePage/desc_pt_PT.json | 24 - .../LicensePage/desc_ru_RU.json | 24 - .../LicensePage/desc_zh-CN.json | 24 - .../LicensePage/node1_base.dart | 22 - .../LinearProgressIndicator/desc_de_DE.json | 24 - .../LinearProgressIndicator/desc_en_US.json | 24 - .../LinearProgressIndicator/desc_es_ES.json | 24 - .../LinearProgressIndicator/desc_fr_FR.json | 24 - .../LinearProgressIndicator/desc_it_IT.json | 24 - .../LinearProgressIndicator/desc_ja_JP.json | 24 - .../LinearProgressIndicator/desc_ko_KR.json | 24 - .../LinearProgressIndicator/desc_pt_PT.json | 24 - .../LinearProgressIndicator/desc_ru_RU.json | 24 - .../LinearProgressIndicator/desc_zh-CN.json | 24 - .../LinearProgressIndicator/node1_base.dart | 34 - .../ListWheelScrollView/desc_de_DE.json | 24 - .../ListWheelScrollView/desc_en_US.json | 24 - .../ListWheelScrollView/desc_es_ES.json | 24 - .../ListWheelScrollView/desc_fr_FR.json | 24 - .../ListWheelScrollView/desc_it_IT.json | 24 - .../ListWheelScrollView/desc_ja_JP.json | 24 - .../ListWheelScrollView/desc_ko_KR.json | 24 - .../ListWheelScrollView/desc_pt_PT.json | 24 - .../ListWheelScrollView/desc_ru_RU.json | 24 - .../ListWheelScrollView/desc_zh-CN.json | 24 - .../ListWheelScrollView/node1_base.dart | 80 - .../Localizations/desc_de_DE.json | 21 - .../Localizations/desc_en_US.json | 21 - .../Localizations/desc_es_ES.json | 21 - .../Localizations/desc_fr_FR.json | 21 - .../Localizations/desc_it_IT.json | 21 - .../Localizations/desc_ja_JP.json | 21 - .../Localizations/desc_ko_KR.json | 21 - .../Localizations/desc_pt_PT.json | 21 - .../Localizations/desc_ru_RU.json | 21 - .../Localizations/desc_zh-CN.json | 21 - .../StatefulWidget/Localizations/node1.dart | 11 - .../LongPressDraggable/desc_de_DE.json | 28 - .../LongPressDraggable/desc_en_US.json | 28 - .../LongPressDraggable/desc_es_ES.json | 28 - .../LongPressDraggable/desc_fr_FR.json | 28 - .../LongPressDraggable/desc_it_IT.json | 28 - .../LongPressDraggable/desc_ja_JP.json | 28 - .../LongPressDraggable/desc_ko_KR.json | 28 - .../LongPressDraggable/desc_pt_PT.json | 28 - .../LongPressDraggable/desc_ru_RU.json | 28 - .../LongPressDraggable/desc_zh-CN.json | 28 - .../LongPressDraggable/node1_base.dart | 86 - .../StatefulWidget/Material/desc_de_DE.json | 29 - .../StatefulWidget/Material/desc_en_US.json | 29 - .../StatefulWidget/Material/desc_es_ES.json | 29 - .../StatefulWidget/Material/desc_fr_FR.json | 29 - .../StatefulWidget/Material/desc_it_IT.json | 29 - .../StatefulWidget/Material/desc_ja_JP.json | 29 - .../StatefulWidget/Material/desc_ko_KR.json | 29 - .../StatefulWidget/Material/desc_pt_PT.json | 29 - .../StatefulWidget/Material/desc_ru_RU.json | 29 - .../StatefulWidget/Material/desc_zh-CN.json | 29 - .../StatefulWidget/Material/node1_base.dart | 32 - .../StatefulWidget/Material/node2_shape.dart | 60 - .../MaterialApp/desc_de_DE.json | 24 - .../MaterialApp/desc_en_US.json | 24 - .../MaterialApp/desc_es_ES.json | 24 - .../MaterialApp/desc_fr_FR.json | 24 - .../MaterialApp/desc_it_IT.json | 24 - .../MaterialApp/desc_ja_JP.json | 24 - .../MaterialApp/desc_ko_KR.json | 24 - .../MaterialApp/desc_pt_PT.json | 24 - .../MaterialApp/desc_ru_RU.json | 24 - .../MaterialApp/desc_zh-CN.json | 24 - .../MaterialApp/node1_base.dart | 118 - .../MergeableMaterial/desc_de_DE.json | 22 - .../MergeableMaterial/desc_en_US.json | 22 - .../MergeableMaterial/desc_es_ES.json | 22 - .../MergeableMaterial/desc_fr_FR.json | 22 - .../MergeableMaterial/desc_it_IT.json | 22 - .../MergeableMaterial/desc_ja_JP.json | 22 - .../MergeableMaterial/desc_ko_KR.json | 22 - .../MergeableMaterial/desc_pt_PT.json | 22 - .../MergeableMaterial/desc_ru_RU.json | 22 - .../MergeableMaterial/desc_zh-CN.json | 22 - .../MergeableMaterial/node1_base.dart | 72 - .../MonthPicker/desc_de_DE.json | 54 - .../MonthPicker/desc_en_US.json | 54 - .../MonthPicker/desc_es_ES.json | 54 - .../MonthPicker/desc_fr_FR.json | 54 - .../MonthPicker/desc_it_IT.json | 54 - .../MonthPicker/desc_ja_JP.json | 54 - .../MonthPicker/desc_ko_KR.json | 54 - .../MonthPicker/desc_pt_PT.json | 54 - .../MonthPicker/desc_ru_RU.json | 54 - .../MonthPicker/desc_zh-CN.json | 54 - .../MonthPicker/node1_base.dart | 21 - .../MouseRegion/desc_de_DE.json | 20 - .../MouseRegion/desc_en_US.json | 20 - .../MouseRegion/desc_es_ES.json | 20 - .../MouseRegion/desc_fr_FR.json | 20 - .../MouseRegion/desc_it_IT.json | 20 - .../MouseRegion/desc_ja_JP.json | 20 - .../MouseRegion/desc_ko_KR.json | 20 - .../MouseRegion/desc_pt_PT.json | 20 - .../MouseRegion/desc_ru_RU.json | 20 - .../MouseRegion/desc_zh-CN.json | 20 - .../MouseRegion/node1_base.dart | 63 - .../NavigationRail/desc_de_DE.json | 50 - .../NavigationRail/desc_en_US.json | 50 - .../NavigationRail/desc_es_ES.json | 50 - .../NavigationRail/desc_fr_FR.json | 50 - .../NavigationRail/desc_it_IT.json | 50 - .../NavigationRail/desc_ja_JP.json | 50 - .../NavigationRail/desc_ko_KR.json | 50 - .../NavigationRail/desc_pt_PT.json | 50 - .../NavigationRail/desc_ru_RU.json | 50 - .../NavigationRail/desc_zh-CN.json | 50 - .../NavigationRail/node1_base.dart | 111 - .../NavigationRail/node2_extend.dart | 139 - .../NavigationRail/node3_dark.dart | 160 - .../StatefulWidget/Navigator/desc_de_DE.json | 21 - .../StatefulWidget/Navigator/desc_en_US.json | 21 - .../StatefulWidget/Navigator/desc_es_ES.json | 21 - .../StatefulWidget/Navigator/desc_fr_FR.json | 21 - .../StatefulWidget/Navigator/desc_it_IT.json | 21 - .../StatefulWidget/Navigator/desc_ja_JP.json | 21 - .../StatefulWidget/Navigator/desc_ko_KR.json | 21 - .../StatefulWidget/Navigator/desc_pt_PT.json | 21 - .../StatefulWidget/Navigator/desc_ru_RU.json | 21 - .../StatefulWidget/Navigator/desc_zh-CN.json | 21 - .../StatefulWidget/Navigator/node1_base.dart | 185 - .../NestedScrollView/desc_de_DE.json | 27 - .../NestedScrollView/desc_en_US.json | 27 - .../NestedScrollView/desc_es_ES.json | 27 - .../NestedScrollView/desc_fr_FR.json | 27 - .../NestedScrollView/desc_it_IT.json | 27 - .../NestedScrollView/desc_ja_JP.json | 27 - .../NestedScrollView/desc_ko_KR.json | 27 - .../NestedScrollView/desc_pt_PT.json | 27 - .../NestedScrollView/desc_ru_RU.json | 27 - .../NestedScrollView/desc_zh-CN.json | 27 - .../NestedScrollView/node1_base.dart | 89 - .../OutlinedButton/desc_de_DE.json | 34 - .../OutlinedButton/desc_en_US.json | 34 - .../OutlinedButton/desc_es_ES.json | 34 - .../OutlinedButton/desc_fr_FR.json | 34 - .../OutlinedButton/desc_it_IT.json | 34 - .../OutlinedButton/desc_ja_JP.json | 34 - .../OutlinedButton/desc_ko_KR.json | 34 - .../OutlinedButton/desc_pt_PT.json | 34 - .../OutlinedButton/desc_ru_RU.json | 34 - .../OutlinedButton/desc_zh-CN.json | 34 - .../OutlinedButton/node1_base.dart | 35 - .../OutlinedButton/node2_style.dart | 50 - .../StatefulWidget/Overlay/desc_de_DE.json | 21 - .../StatefulWidget/Overlay/desc_en_US.json | 21 - .../StatefulWidget/Overlay/desc_es_ES.json | 21 - .../StatefulWidget/Overlay/desc_fr_FR.json | 21 - .../StatefulWidget/Overlay/desc_it_IT.json | 21 - .../StatefulWidget/Overlay/desc_ja_JP.json | 21 - .../StatefulWidget/Overlay/desc_ko_KR.json | 21 - .../StatefulWidget/Overlay/desc_pt_PT.json | 21 - .../StatefulWidget/Overlay/desc_ru_RU.json | 21 - .../StatefulWidget/Overlay/desc_zh-CN.json | 21 - .../StatefulWidget/Overlay/node1_base.dart | 100 - .../StatefulWidget/PageView/desc_de_DE.json | 34 - .../StatefulWidget/PageView/desc_en_US.json | 34 - .../StatefulWidget/PageView/desc_es_ES.json | 34 - .../StatefulWidget/PageView/desc_fr_FR.json | 34 - .../StatefulWidget/PageView/desc_it_IT.json | 34 - .../StatefulWidget/PageView/desc_ja_JP.json | 34 - .../StatefulWidget/PageView/desc_ko_KR.json | 34 - .../StatefulWidget/PageView/desc_pt_PT.json | 34 - .../StatefulWidget/PageView/desc_ru_RU.json | 34 - .../StatefulWidget/PageView/desc_zh-CN.json | 34 - .../StatefulWidget/PageView/node1_base.dart | 54 - .../PageView/node2_direction.dart | 58 - .../PageView/node3_controller.dart | 78 - .../PaginatedDataTable/desc_de_DE.json | 30 - .../PaginatedDataTable/desc_en_US.json | 30 - .../PaginatedDataTable/desc_es_ES.json | 30 - .../PaginatedDataTable/desc_fr_FR.json | 30 - .../PaginatedDataTable/desc_it_IT.json | 30 - .../PaginatedDataTable/desc_ja_JP.json | 30 - .../PaginatedDataTable/desc_ko_KR.json | 30 - .../PaginatedDataTable/desc_pt_PT.json | 30 - .../PaginatedDataTable/desc_ru_RU.json | 30 - .../PaginatedDataTable/desc_zh-CN.json | 30 - .../PaginatedDataTable/node1_base.dart | 207 -- .../PopupMenuButton/desc_de_DE.json | 24 - .../PopupMenuButton/desc_en_US.json | 24 - .../PopupMenuButton/desc_es_ES.json | 24 - .../PopupMenuButton/desc_fr_FR.json | 24 - .../PopupMenuButton/desc_it_IT.json | 24 - .../PopupMenuButton/desc_ja_JP.json | 24 - .../PopupMenuButton/desc_ko_KR.json | 24 - .../PopupMenuButton/desc_pt_PT.json | 24 - .../PopupMenuButton/desc_ru_RU.json | 24 - .../PopupMenuButton/desc_zh-CN.json | 24 - .../PopupMenuButton/node1_base.dart | 60 - .../PopupMenuDivider/desc_de_DE.json | 21 - .../PopupMenuDivider/desc_en_US.json | 21 - .../PopupMenuDivider/desc_es_ES.json | 21 - .../PopupMenuDivider/desc_fr_FR.json | 21 - .../PopupMenuDivider/desc_it_IT.json | 21 - .../PopupMenuDivider/desc_ja_JP.json | 21 - .../PopupMenuDivider/desc_ko_KR.json | 21 - .../PopupMenuDivider/desc_pt_PT.json | 21 - .../PopupMenuDivider/desc_ru_RU.json | 21 - .../PopupMenuDivider/desc_zh-CN.json | 21 - .../PopupMenuDivider/node1_base.dart | 68 - .../PositionedTransition/desc_de_DE.json | 20 - .../PositionedTransition/desc_en_US.json | 20 - .../PositionedTransition/desc_es_ES.json | 20 - .../PositionedTransition/desc_fr_FR.json | 20 - .../PositionedTransition/desc_it_IT.json | 20 - .../PositionedTransition/desc_ja_JP.json | 20 - .../PositionedTransition/desc_ko_KR.json | 20 - .../PositionedTransition/desc_pt_PT.json | 20 - .../PositionedTransition/desc_ru_RU.json | 20 - .../PositionedTransition/desc_zh-CN.json | 20 - .../PositionedTransition/node1_base.dart | 58 - .../lib/StatefulWidget/Radio/desc_de_DE.json | 21 - .../lib/StatefulWidget/Radio/desc_en_US.json | 21 - .../lib/StatefulWidget/Radio/desc_es_ES.json | 21 - .../lib/StatefulWidget/Radio/desc_fr_FR.json | 21 - .../lib/StatefulWidget/Radio/desc_it_IT.json | 21 - .../lib/StatefulWidget/Radio/desc_ja_JP.json | 21 - .../lib/StatefulWidget/Radio/desc_ko_KR.json | 21 - .../lib/StatefulWidget/Radio/desc_pt_PT.json | 21 - .../lib/StatefulWidget/Radio/desc_ru_RU.json | 21 - .../lib/StatefulWidget/Radio/desc_zh-CN.json | 21 - .../lib/StatefulWidget/Radio/node1_base.dart | 30 - .../RangeSlider/desc_de_DE.json | 27 - .../RangeSlider/desc_en_US.json | 27 - .../RangeSlider/desc_es_ES.json | 27 - .../RangeSlider/desc_fr_FR.json | 27 - .../RangeSlider/desc_it_IT.json | 27 - .../RangeSlider/desc_ja_JP.json | 27 - .../RangeSlider/desc_ko_KR.json | 27 - .../RangeSlider/desc_pt_PT.json | 27 - .../RangeSlider/desc_ru_RU.json | 27 - .../RangeSlider/desc_zh-CN.json | 27 - .../RangeSlider/node1_base.dart | 38 - .../StatefulWidget/RawChip/desc_de_DE.json | 43 - .../StatefulWidget/RawChip/desc_en_US.json | 43 - .../StatefulWidget/RawChip/desc_es_ES.json | 43 - .../StatefulWidget/RawChip/desc_fr_FR.json | 43 - .../StatefulWidget/RawChip/desc_it_IT.json | 43 - .../StatefulWidget/RawChip/desc_ja_JP.json | 43 - .../StatefulWidget/RawChip/desc_ko_KR.json | 43 - .../StatefulWidget/RawChip/desc_pt_PT.json | 43 - .../StatefulWidget/RawChip/desc_ru_RU.json | 43 - .../StatefulWidget/RawChip/desc_zh-CN.json | 43 - .../StatefulWidget/RawChip/node1_press.dart | 22 - .../StatefulWidget/RawChip/node2_select.dart | 32 - .../RawGestureDetector/desc_de_DE.json | 20 - .../RawGestureDetector/desc_en_US.json | 20 - .../RawGestureDetector/desc_es_ES.json | 20 - .../RawGestureDetector/desc_fr_FR.json | 20 - .../RawGestureDetector/desc_it_IT.json | 20 - .../RawGestureDetector/desc_ja_JP.json | 20 - .../RawGestureDetector/desc_ko_KR.json | 20 - .../RawGestureDetector/desc_pt_PT.json | 20 - .../RawGestureDetector/desc_ru_RU.json | 20 - .../RawGestureDetector/desc_zh-CN.json | 20 - .../RawGestureDetector/node1_base.dart | 61 - .../RawKeyboardListener/desc_de_DE.json | 21 - .../RawKeyboardListener/desc_en_US.json | 21 - .../RawKeyboardListener/desc_es_ES.json | 21 - .../RawKeyboardListener/desc_fr_FR.json | 21 - .../RawKeyboardListener/desc_it_IT.json | 21 - .../RawKeyboardListener/desc_ja_JP.json | 21 - .../RawKeyboardListener/desc_ko_KR.json | 21 - .../RawKeyboardListener/desc_pt_PT.json | 21 - .../RawKeyboardListener/desc_ru_RU.json | 21 - .../RawKeyboardListener/desc_zh-CN.json | 21 - .../RawKeyboardListener/node1_base.dart | 56 - .../RawMaterialButton/desc_de_DE.json | 37 - .../RawMaterialButton/desc_en_US.json | 37 - .../RawMaterialButton/desc_es_ES.json | 37 - .../RawMaterialButton/desc_fr_FR.json | 37 - .../RawMaterialButton/desc_it_IT.json | 37 - .../RawMaterialButton/desc_ja_JP.json | 37 - .../RawMaterialButton/desc_ko_KR.json | 37 - .../RawMaterialButton/desc_pt_PT.json | 37 - .../RawMaterialButton/desc_ru_RU.json | 37 - .../RawMaterialButton/desc_zh-CN.json | 37 - .../RawMaterialButton/node1_base.dart | 46 - .../RawMaterialButton/node2_shape.dart | 53 - .../RefreshIndicator/desc_de_DE.json | 20 - .../RefreshIndicator/desc_en_US.json | 20 - .../RefreshIndicator/desc_es_ES.json | 20 - .../RefreshIndicator/desc_fr_FR.json | 20 - .../RefreshIndicator/desc_it_IT.json | 20 - .../RefreshIndicator/desc_ja_JP.json | 20 - .../RefreshIndicator/desc_ko_KR.json | 20 - .../RefreshIndicator/desc_pt_PT.json | 20 - .../RefreshIndicator/desc_ru_RU.json | 20 - .../RefreshIndicator/desc_zh-CN.json | 20 - .../RefreshIndicator/node1_base.dart | 44 - .../desc_de_DE.json | 21 - .../desc_en_US.json | 21 - .../desc_es_ES.json | 21 - .../desc_fr_FR.json | 21 - .../desc_it_IT.json | 21 - .../desc_ja_JP.json | 21 - .../desc_ko_KR.json | 21 - .../desc_pt_PT.json | 21 - .../desc_ru_RU.json | 21 - .../desc_zh-CN.json | 21 - .../node1_base.dart | 62 - .../ReorderableListView/desc_de_DE.json | 29 - .../ReorderableListView/desc_en_US.json | 29 - .../ReorderableListView/desc_es_ES.json | 29 - .../ReorderableListView/desc_fr_FR.json | 29 - .../ReorderableListView/desc_it_IT.json | 29 - .../ReorderableListView/desc_ja_JP.json | 29 - .../ReorderableListView/desc_ko_KR.json | 29 - .../ReorderableListView/desc_pt_PT.json | 29 - .../ReorderableListView/desc_ru_RU.json | 29 - .../ReorderableListView/desc_zh-CN.json | 29 - .../ReorderableListView/node1_base.dart | 74 - .../ReorderableListView/node2_direction.dart | 74 - .../RotationTransition/desc_de_DE.json | 19 - .../RotationTransition/desc_en_US.json | 19 - .../RotationTransition/desc_es_ES.json | 19 - .../RotationTransition/desc_fr_FR.json | 19 - .../RotationTransition/desc_it_IT.json | 19 - .../RotationTransition/desc_ja_JP.json | 19 - .../RotationTransition/desc_ko_KR.json | 19 - .../RotationTransition/desc_pt_PT.json | 19 - .../RotationTransition/desc_ru_RU.json | 19 - .../RotationTransition/desc_zh-CN.json | 19 - .../RotationTransition/node1_base.dart | 55 - .../StatefulWidget/Scaffold/desc_de_DE.json | 29 - .../StatefulWidget/Scaffold/desc_en_US.json | 29 - .../StatefulWidget/Scaffold/desc_es_ES.json | 29 - .../StatefulWidget/Scaffold/desc_fr_FR.json | 29 - .../StatefulWidget/Scaffold/desc_it_IT.json | 29 - .../StatefulWidget/Scaffold/desc_ja_JP.json | 29 - .../StatefulWidget/Scaffold/desc_ko_KR.json | 29 - .../StatefulWidget/Scaffold/desc_pt_PT.json | 29 - .../StatefulWidget/Scaffold/desc_ru_RU.json | 29 - .../StatefulWidget/Scaffold/desc_zh-CN.json | 29 - .../StatefulWidget/Scaffold/node1_base.dart | 113 - .../ScaleTransition/desc_de_DE.json | 19 - .../ScaleTransition/desc_en_US.json | 19 - .../ScaleTransition/desc_es_ES.json | 19 - .../ScaleTransition/desc_fr_FR.json | 19 - .../ScaleTransition/desc_it_IT.json | 19 - .../ScaleTransition/desc_ja_JP.json | 19 - .../ScaleTransition/desc_ko_KR.json | 19 - .../ScaleTransition/desc_pt_PT.json | 19 - .../ScaleTransition/desc_ru_RU.json | 19 - .../ScaleTransition/desc_zh-CN.json | 19 - .../ScaleTransition/node1_base.dart | 43 - .../StatefulWidget/Scrollable/desc_de_DE.json | 25 - .../StatefulWidget/Scrollable/desc_en_US.json | 25 - .../StatefulWidget/Scrollable/desc_es_ES.json | 25 - .../StatefulWidget/Scrollable/desc_fr_FR.json | 25 - .../StatefulWidget/Scrollable/desc_it_IT.json | 25 - .../StatefulWidget/Scrollable/desc_ja_JP.json | 25 - .../StatefulWidget/Scrollable/desc_ko_KR.json | 25 - .../StatefulWidget/Scrollable/desc_pt_PT.json | 25 - .../StatefulWidget/Scrollable/desc_ru_RU.json | 25 - .../StatefulWidget/Scrollable/desc_zh-CN.json | 25 - .../StatefulWidget/Scrollable/node1_base.dart | 58 - .../StatefulWidget/Scrollbar/desc_de_DE.json | 23 - .../StatefulWidget/Scrollbar/desc_en_US.json | 23 - .../StatefulWidget/Scrollbar/desc_es_ES.json | 23 - .../StatefulWidget/Scrollbar/desc_fr_FR.json | 23 - .../StatefulWidget/Scrollbar/desc_it_IT.json | 23 - .../StatefulWidget/Scrollbar/desc_ja_JP.json | 23 - .../StatefulWidget/Scrollbar/desc_ko_KR.json | 23 - .../StatefulWidget/Scrollbar/desc_pt_PT.json | 23 - .../StatefulWidget/Scrollbar/desc_ru_RU.json | 23 - .../StatefulWidget/Scrollbar/desc_zh-CN.json | 23 - .../StatefulWidget/Scrollbar/node1_base.dart | 56 - .../SelectableText/desc_de_DE.json | 32 - .../SelectableText/desc_en_US.json | 32 - .../SelectableText/desc_es_ES.json | 32 - .../SelectableText/desc_fr_FR.json | 32 - .../SelectableText/desc_it_IT.json | 32 - .../SelectableText/desc_ja_JP.json | 32 - .../SelectableText/desc_ko_KR.json | 32 - .../SelectableText/desc_pt_PT.json | 32 - .../SelectableText/desc_ru_RU.json | 32 - .../SelectableText/desc_zh-CN.json | 32 - .../SelectableText/node1_base.dart | 28 - .../SelectableText/node2_align.dart | 69 - .../SizeTransition/desc_de_DE.json | 20 - .../SizeTransition/desc_en_US.json | 20 - .../SizeTransition/desc_es_ES.json | 20 - .../SizeTransition/desc_fr_FR.json | 20 - .../SizeTransition/desc_it_IT.json | 20 - .../SizeTransition/desc_ja_JP.json | 20 - .../SizeTransition/desc_ko_KR.json | 20 - .../SizeTransition/desc_pt_PT.json | 20 - .../SizeTransition/desc_ru_RU.json | 20 - .../SizeTransition/desc_zh-CN.json | 20 - .../SizeTransition/node1_base.dart | 59 - .../SlideTransition/desc_de_DE.json | 20 - .../SlideTransition/desc_en_US.json | 20 - .../SlideTransition/desc_es_ES.json | 20 - .../SlideTransition/desc_fr_FR.json | 20 - .../SlideTransition/desc_it_IT.json | 20 - .../SlideTransition/desc_ja_JP.json | 20 - .../SlideTransition/desc_ko_KR.json | 20 - .../SlideTransition/desc_pt_PT.json | 20 - .../SlideTransition/desc_ru_RU.json | 20 - .../SlideTransition/desc_zh-CN.json | 20 - .../SlideTransition/node1_base.dart | 67 - .../lib/StatefulWidget/Slider/desc_de_DE.json | 37 - .../lib/StatefulWidget/Slider/desc_en_US.json | 37 - .../lib/StatefulWidget/Slider/desc_es_ES.json | 37 - .../lib/StatefulWidget/Slider/desc_fr_FR.json | 37 - .../lib/StatefulWidget/Slider/desc_it_IT.json | 37 - .../lib/StatefulWidget/Slider/desc_ja_JP.json | 37 - .../lib/StatefulWidget/Slider/desc_ko_KR.json | 37 - .../lib/StatefulWidget/Slider/desc_pt_PT.json | 37 - .../lib/StatefulWidget/Slider/desc_ru_RU.json | 37 - .../lib/StatefulWidget/Slider/desc_zh-CN.json | 37 - .../lib/StatefulWidget/Slider/node1_base.dart | 36 - .../StatefulWidget/Slider/node2_lable.dart | 38 - .../StatefulBuilder/desc_de_DE.json | 23 - .../StatefulBuilder/desc_en_US.json | 23 - .../StatefulBuilder/desc_es_ES.json | 23 - .../StatefulBuilder/desc_fr_FR.json | 23 - .../StatefulBuilder/desc_it_IT.json | 23 - .../StatefulBuilder/desc_ja_JP.json | 23 - .../StatefulBuilder/desc_ko_KR.json | 23 - .../StatefulBuilder/desc_pt_PT.json | 23 - .../StatefulBuilder/desc_ru_RU.json | 23 - .../StatefulBuilder/desc_zh-CN.json | 23 - .../StatefulBuilder/node1_base.dart | 26 - .../StatusTransitionWidget/desc_de_DE.json | 19 - .../StatusTransitionWidget/desc_en_US.json | 19 - .../StatusTransitionWidget/desc_es_ES.json | 19 - .../StatusTransitionWidget/desc_fr_FR.json | 19 - .../StatusTransitionWidget/desc_it_IT.json | 19 - .../StatusTransitionWidget/desc_ja_JP.json | 19 - .../StatusTransitionWidget/desc_ko_KR.json | 19 - .../StatusTransitionWidget/desc_pt_PT.json | 19 - .../StatusTransitionWidget/desc_ru_RU.json | 19 - .../StatusTransitionWidget/desc_zh-CN.json | 19 - .../StatusTransitionWidget/node1_base.dart | 74 - .../StatefulWidget/Stepper/desc_de_DE.json | 29 - .../StatefulWidget/Stepper/desc_en_US.json | 29 - .../StatefulWidget/Stepper/desc_es_ES.json | 29 - .../StatefulWidget/Stepper/desc_fr_FR.json | 29 - .../StatefulWidget/Stepper/desc_it_IT.json | 29 - .../StatefulWidget/Stepper/desc_ja_JP.json | 29 - .../StatefulWidget/Stepper/desc_ko_KR.json | 29 - .../StatefulWidget/Stepper/desc_pt_PT.json | 29 - .../StatefulWidget/Stepper/desc_ru_RU.json | 29 - .../StatefulWidget/Stepper/desc_zh-CN.json | 29 - .../StatefulWidget/Stepper/node1_base.dart | 104 - .../StatefulWidget/Stepper/node2_type.dart | 104 - .../StreamBuilder/desc_de_DE.json | 20 - .../StreamBuilder/desc_en_US.json | 20 - .../StreamBuilder/desc_es_ES.json | 20 - .../StreamBuilder/desc_fr_FR.json | 20 - .../StreamBuilder/desc_it_IT.json | 20 - .../StreamBuilder/desc_ja_JP.json | 20 - .../StreamBuilder/desc_ko_KR.json | 20 - .../StreamBuilder/desc_pt_PT.json | 20 - .../StreamBuilder/desc_ru_RU.json | 20 - .../StreamBuilder/desc_zh-CN.json | 20 - .../StreamBuilder/node1_base.dart | 101 - .../lib/StatefulWidget/Switch/desc_de_DE.json | 34 - .../lib/StatefulWidget/Switch/desc_en_US.json | 34 - .../lib/StatefulWidget/Switch/desc_es_ES.json | 34 - .../lib/StatefulWidget/Switch/desc_fr_FR.json | 34 - .../lib/StatefulWidget/Switch/desc_it_IT.json | 34 - .../lib/StatefulWidget/Switch/desc_ja_JP.json | 34 - .../lib/StatefulWidget/Switch/desc_ko_KR.json | 34 - .../lib/StatefulWidget/Switch/desc_pt_PT.json | 34 - .../lib/StatefulWidget/Switch/desc_ru_RU.json | 34 - .../lib/StatefulWidget/Switch/desc_zh-CN.json | 34 - .../lib/StatefulWidget/Switch/node1_base.dart | 40 - .../StatefulWidget/Switch/node2_image.dart | 39 - .../StatefulWidget/TabBarView/desc_de_DE.json | 20 - .../StatefulWidget/TabBarView/desc_en_US.json | 20 - .../StatefulWidget/TabBarView/desc_es_ES.json | 20 - .../StatefulWidget/TabBarView/desc_fr_FR.json | 20 - .../StatefulWidget/TabBarView/desc_it_IT.json | 20 - .../StatefulWidget/TabBarView/desc_ja_JP.json | 20 - .../StatefulWidget/TabBarView/desc_ko_KR.json | 20 - .../StatefulWidget/TabBarView/desc_pt_PT.json | 20 - .../StatefulWidget/TabBarView/desc_ru_RU.json | 20 - .../StatefulWidget/TabBarView/desc_zh-CN.json | 20 - .../StatefulWidget/TabBarView/node1_base.dart | 73 - .../TableRowInkWell/desc_de_DE.json | 22 - .../TableRowInkWell/desc_en_US.json | 22 - .../TableRowInkWell/desc_es_ES.json | 22 - .../TableRowInkWell/desc_fr_FR.json | 22 - .../TableRowInkWell/desc_it_IT.json | 22 - .../TableRowInkWell/desc_ja_JP.json | 22 - .../TableRowInkWell/desc_ko_KR.json | 22 - .../TableRowInkWell/desc_pt_PT.json | 22 - .../TableRowInkWell/desc_ru_RU.json | 22 - .../TableRowInkWell/desc_zh-CN.json | 22 - .../TableRowInkWell/node1_base.dart | 80 - .../StatefulWidget/TextButton/desc_de_DE.json | 33 - .../StatefulWidget/TextButton/desc_en_US.json | 33 - .../StatefulWidget/TextButton/desc_es_ES.json | 33 - .../StatefulWidget/TextButton/desc_fr_FR.json | 33 - .../StatefulWidget/TextButton/desc_it_IT.json | 33 - .../StatefulWidget/TextButton/desc_ja_JP.json | 33 - .../StatefulWidget/TextButton/desc_ko_KR.json | 33 - .../StatefulWidget/TextButton/desc_pt_PT.json | 33 - .../StatefulWidget/TextButton/desc_ru_RU.json | 33 - .../StatefulWidget/TextButton/desc_zh-CN.json | 33 - .../StatefulWidget/TextButton/node1_base.dart | 36 - .../TextButton/node2_style.dart | 50 - .../StatefulWidget/TextField/desc_de_DE.json | 52 - .../StatefulWidget/TextField/desc_en_US.json | 52 - .../StatefulWidget/TextField/desc_es_ES.json | 52 - .../StatefulWidget/TextField/desc_fr_FR.json | 52 - .../StatefulWidget/TextField/desc_it_IT.json | 52 - .../StatefulWidget/TextField/desc_ja_JP.json | 52 - .../StatefulWidget/TextField/desc_ko_KR.json | 52 - .../StatefulWidget/TextField/desc_pt_PT.json | 52 - .../StatefulWidget/TextField/desc_ru_RU.json | 52 - .../StatefulWidget/TextField/desc_zh-CN.json | 52 - .../StatefulWidget/TextField/node1_base.dart | 54 - .../TextField/node2_cursor.dart | 60 - .../TextField/node3_decoration.dart | 52 - .../TextFormField/desc_de_DE.json | 24 - .../TextFormField/desc_en_US.json | 24 - .../TextFormField/desc_es_ES.json | 24 - .../TextFormField/desc_fr_FR.json | 24 - .../TextFormField/desc_it_IT.json | 24 - .../TextFormField/desc_ja_JP.json | 24 - .../TextFormField/desc_ko_KR.json | 24 - .../TextFormField/desc_pt_PT.json | 24 - .../TextFormField/desc_ru_RU.json | 24 - .../TextFormField/desc_zh-CN.json | 24 - .../TextFormField/node1_base.dart | 73 - .../StatefulWidget/TickerMode/desc_de_DE.json | 20 - .../StatefulWidget/TickerMode/desc_en_US.json | 20 - .../StatefulWidget/TickerMode/desc_es_ES.json | 20 - .../StatefulWidget/TickerMode/desc_fr_FR.json | 20 - .../StatefulWidget/TickerMode/desc_it_IT.json | 20 - .../StatefulWidget/TickerMode/desc_ja_JP.json | 20 - .../StatefulWidget/TickerMode/desc_ko_KR.json | 20 - .../StatefulWidget/TickerMode/desc_pt_PT.json | 20 - .../StatefulWidget/TickerMode/desc_ru_RU.json | 20 - .../StatefulWidget/TickerMode/desc_zh-CN.json | 20 - .../lib/StatefulWidget/TickerMode/node1.dart | 51 - .../StatefulWidget/Tooltip/desc_de_DE.json | 32 - .../StatefulWidget/Tooltip/desc_en_US.json | 32 - .../StatefulWidget/Tooltip/desc_es_ES.json | 32 - .../StatefulWidget/Tooltip/desc_fr_FR.json | 32 - .../StatefulWidget/Tooltip/desc_it_IT.json | 32 - .../StatefulWidget/Tooltip/desc_ja_JP.json | 32 - .../StatefulWidget/Tooltip/desc_ko_KR.json | 32 - .../StatefulWidget/Tooltip/desc_pt_PT.json | 32 - .../StatefulWidget/Tooltip/desc_ru_RU.json | 32 - .../StatefulWidget/Tooltip/desc_zh-CN.json | 32 - .../StatefulWidget/Tooltip/node1_base.dart | 20 - .../Tooltip/node2_decoration.dart | 26 - .../TweenAnimationBuilder/desc_de_DE.json | 23 - .../TweenAnimationBuilder/desc_en_US.json | 23 - .../TweenAnimationBuilder/desc_es_ES.json | 23 - .../TweenAnimationBuilder/desc_fr_FR.json | 23 - .../TweenAnimationBuilder/desc_it_IT.json | 23 - .../TweenAnimationBuilder/desc_ja_JP.json | 23 - .../TweenAnimationBuilder/desc_ko_KR.json | 23 - .../TweenAnimationBuilder/desc_pt_PT.json | 23 - .../TweenAnimationBuilder/desc_ru_RU.json | 23 - .../TweenAnimationBuilder/desc_zh-CN.json | 23 - .../TweenAnimationBuilder/node1_base.dart | 58 - .../UndoHistory/desc_de_DE.json | 20 - .../UndoHistory/desc_en_US.json | 20 - .../UndoHistory/desc_es_ES.json | 20 - .../UndoHistory/desc_fr_FR.json | 20 - .../UndoHistory/desc_it_IT.json | 20 - .../UndoHistory/desc_ja_JP.json | 20 - .../UndoHistory/desc_ko_KR.json | 20 - .../UndoHistory/desc_pt_PT.json | 20 - .../UndoHistory/desc_ru_RU.json | 20 - .../UndoHistory/desc_zh-CN.json | 20 - .../lib/StatefulWidget/UndoHistory/node1.dart | 108 - .../UniqueWidget/desc_de_DE.json | 18 - .../UniqueWidget/desc_en_US.json | 18 - .../UniqueWidget/desc_es_ES.json | 18 - .../UniqueWidget/desc_fr_FR.json | 18 - .../UniqueWidget/desc_it_IT.json | 18 - .../UniqueWidget/desc_ja_JP.json | 18 - .../UniqueWidget/desc_ko_KR.json | 18 - .../UniqueWidget/desc_pt_PT.json | 18 - .../UniqueWidget/desc_ru_RU.json | 18 - .../UniqueWidget/desc_zh-CN.json | 18 - .../UniqueWidget/node1_base.dart | 25 - .../ValueListenableBuilder/desc_de_DE.json | 20 - .../ValueListenableBuilder/desc_en_US.json | 20 - .../ValueListenableBuilder/desc_es_ES.json | 20 - .../ValueListenableBuilder/desc_fr_FR.json | 20 - .../ValueListenableBuilder/desc_it_IT.json | 20 - .../ValueListenableBuilder/desc_ja_JP.json | 20 - .../ValueListenableBuilder/desc_ko_KR.json | 20 - .../ValueListenableBuilder/desc_pt_PT.json | 20 - .../ValueListenableBuilder/desc_ru_RU.json | 20 - .../ValueListenableBuilder/desc_zh-CN.json | 20 - .../ValueListenableBuilder/node1_base.dart | 47 - .../WidgetInspector/desc_de_DE.json | 19 - .../WidgetInspector/desc_en_US.json | 19 - .../WidgetInspector/desc_es_ES.json | 19 - .../WidgetInspector/desc_fr_FR.json | 19 - .../WidgetInspector/desc_it_IT.json | 19 - .../WidgetInspector/desc_ja_JP.json | 19 - .../WidgetInspector/desc_ko_KR.json | 19 - .../WidgetInspector/desc_pt_PT.json | 19 - .../WidgetInspector/desc_ru_RU.json | 19 - .../WidgetInspector/desc_zh-CN.json | 19 - .../WidgetInspector/node1_base.dart | 69 - .../StatefulWidget/WidgetsApp/desc_de_DE.json | 24 - .../StatefulWidget/WidgetsApp/desc_en_US.json | 24 - .../StatefulWidget/WidgetsApp/desc_es_ES.json | 24 - .../StatefulWidget/WidgetsApp/desc_fr_FR.json | 24 - .../StatefulWidget/WidgetsApp/desc_it_IT.json | 24 - .../StatefulWidget/WidgetsApp/desc_ja_JP.json | 24 - .../StatefulWidget/WidgetsApp/desc_ko_KR.json | 24 - .../StatefulWidget/WidgetsApp/desc_pt_PT.json | 24 - .../StatefulWidget/WidgetsApp/desc_ru_RU.json | 24 - .../StatefulWidget/WidgetsApp/desc_zh-CN.json | 24 - .../StatefulWidget/WidgetsApp/node1_base.dart | 123 - .../WillPopScope/desc_de_DE.json | 19 - .../WillPopScope/desc_en_US.json | 19 - .../WillPopScope/desc_es_ES.json | 19 - .../WillPopScope/desc_fr_FR.json | 19 - .../WillPopScope/desc_it_IT.json | 19 - .../WillPopScope/desc_ja_JP.json | 19 - .../WillPopScope/desc_ko_KR.json | 19 - .../WillPopScope/desc_pt_PT.json | 19 - .../WillPopScope/desc_ru_RU.json | 19 - .../WillPopScope/desc_zh-CN.json | 19 - .../WillPopScope/node1_base.dart | 41 - .../StatefulWidget/YearPicker/desc_de_DE.json | 24 - .../StatefulWidget/YearPicker/desc_en_US.json | 24 - .../StatefulWidget/YearPicker/desc_es_ES.json | 24 - .../StatefulWidget/YearPicker/desc_fr_FR.json | 24 - .../StatefulWidget/YearPicker/desc_it_IT.json | 24 - .../StatefulWidget/YearPicker/desc_ja_JP.json | 24 - .../StatefulWidget/YearPicker/desc_ko_KR.json | 24 - .../StatefulWidget/YearPicker/desc_pt_PT.json | 24 - .../StatefulWidget/YearPicker/desc_ru_RU.json | 24 - .../StatefulWidget/YearPicker/desc_zh-CN.json | 24 - .../StatefulWidget/YearPicker/node1_base.dart | 28 - .../AboutDialog/desc_de_DE.json | 22 - .../AboutDialog/desc_en_US.json | 22 - .../AboutDialog/desc_es_ES.json | 22 - .../AboutDialog/desc_fr_FR.json | 22 - .../AboutDialog/desc_it_IT.json | 22 - .../AboutDialog/desc_ja_JP.json | 22 - .../AboutDialog/desc_ko_KR.json | 22 - .../AboutDialog/desc_pt_PT.json | 22 - .../AboutDialog/desc_ru_RU.json | 22 - .../AboutDialog/desc_zh-CN.json | 22 - .../AboutDialog/node1_base.dart | 65 - .../AboutListTile/desc_de_DE.json | 26 - .../AboutListTile/desc_en_US.json | 26 - .../AboutListTile/desc_es_ES.json | 26 - .../AboutListTile/desc_fr_FR.json | 26 - .../AboutListTile/desc_it_IT.json | 26 - .../AboutListTile/desc_ja_JP.json | 26 - .../AboutListTile/desc_ko_KR.json | 26 - .../AboutListTile/desc_pt_PT.json | 26 - .../AboutListTile/desc_ru_RU.json | 26 - .../AboutListTile/desc_zh-CN.json | 26 - .../AboutListTile/node1_base.dart | 34 - .../ActionChip/desc_de_DE.json | 26 - .../ActionChip/desc_en_US.json | 26 - .../ActionChip/desc_es_ES.json | 26 - .../ActionChip/desc_fr_FR.json | 26 - .../ActionChip/desc_it_IT.json | 26 - .../ActionChip/desc_ja_JP.json | 26 - .../ActionChip/desc_ko_KR.json | 26 - .../ActionChip/desc_pt_PT.json | 26 - .../ActionChip/desc_ru_RU.json | 26 - .../ActionChip/desc_zh-CN.json | 26 - .../ActionChip/node1_base.dart | 29 - .../AlertDialog/desc_de_DE.json | 27 - .../AlertDialog/desc_en_US.json | 27 - .../AlertDialog/desc_es_ES.json | 27 - .../AlertDialog/desc_fr_FR.json | 27 - .../AlertDialog/desc_it_IT.json | 27 - .../AlertDialog/desc_ja_JP.json | 27 - .../AlertDialog/desc_ko_KR.json | 27 - .../AlertDialog/desc_pt_PT.json | 27 - .../AlertDialog/desc_ru_RU.json | 27 - .../AlertDialog/desc_zh-CN.json | 27 - .../AlertDialog/node1_base.dart | 99 - .../AnimatedIcon/desc_de_DE.json | 21 - .../AnimatedIcon/desc_en_US.json | 21 - .../AnimatedIcon/desc_es_ES.json | 21 - .../AnimatedIcon/desc_fr_FR.json | 21 - .../AnimatedIcon/desc_it_IT.json | 21 - .../AnimatedIcon/desc_ja_JP.json | 21 - .../AnimatedIcon/desc_ko_KR.json | 21 - .../AnimatedIcon/desc_pt_PT.json | 21 - .../AnimatedIcon/desc_ru_RU.json | 21 - .../AnimatedIcon/desc_zh-CN.json | 21 - .../AnimatedIcon/node1_base.dart | 59 - .../Autocomplete/desc_de_DE.json | 31 - .../Autocomplete/desc_en_US.json | 31 - .../Autocomplete/desc_es_ES.json | 31 - .../Autocomplete/desc_fr_FR.json | 31 - .../Autocomplete/desc_it_IT.json | 31 - .../Autocomplete/desc_ja_JP.json | 31 - .../Autocomplete/desc_ko_KR.json | 31 - .../Autocomplete/desc_pt_PT.json | 31 - .../Autocomplete/desc_ru_RU.json | 31 - .../Autocomplete/desc_zh-CN.json | 31 - .../Autocomplete/node1_base.dart | 40 - .../Autocomplete/node2_type.dart | 219 -- .../BackButton/desc_de_DE.json | 21 - .../BackButton/desc_en_US.json | 21 - .../BackButton/desc_es_ES.json | 21 - .../BackButton/desc_fr_FR.json | 21 - .../BackButton/desc_it_IT.json | 21 - .../BackButton/desc_ja_JP.json | 21 - .../BackButton/desc_ko_KR.json | 21 - .../BackButton/desc_pt_PT.json | 21 - .../BackButton/desc_ru_RU.json | 21 - .../BackButton/desc_zh-CN.json | 21 - .../BackButton/node1_base.dart | 26 - .../BackButtonIcon/desc_de_DE.json | 18 - .../BackButtonIcon/desc_en_US.json | 18 - .../BackButtonIcon/desc_es_ES.json | 18 - .../BackButtonIcon/desc_fr_FR.json | 18 - .../BackButtonIcon/desc_it_IT.json | 18 - .../BackButtonIcon/desc_ja_JP.json | 18 - .../BackButtonIcon/desc_ko_KR.json | 18 - .../BackButtonIcon/desc_pt_PT.json | 18 - .../BackButtonIcon/desc_ru_RU.json | 18 - .../BackButtonIcon/desc_zh-CN.json | 18 - .../BackButtonIcon/node1_base.dart | 13 - .../lib/StatelessWidget/Badge/desc_de_DE.json | 40 - .../lib/StatelessWidget/Badge/desc_en_US.json | 40 - .../lib/StatelessWidget/Badge/desc_es_ES.json | 40 - .../lib/StatelessWidget/Badge/desc_fr_FR.json | 40 - .../lib/StatelessWidget/Badge/desc_it_IT.json | 40 - .../lib/StatelessWidget/Badge/desc_ja_JP.json | 40 - .../lib/StatelessWidget/Badge/desc_ko_KR.json | 40 - .../lib/StatelessWidget/Badge/desc_pt_PT.json | 40 - .../lib/StatelessWidget/Badge/desc_ru_RU.json | 40 - .../lib/StatelessWidget/Badge/desc_zh-CN.json | 40 - .../lib/StatelessWidget/Badge/node_1.dart | 30 - .../lib/StatelessWidget/Badge/node_2.dart | 22 - .../lib/StatelessWidget/Badge/node_3.dart | 53 - .../StatelessWidget/Banner/desc_de_DE.json | 22 - .../StatelessWidget/Banner/desc_en_US.json | 22 - .../StatelessWidget/Banner/desc_es_ES.json | 22 - .../StatelessWidget/Banner/desc_fr_FR.json | 22 - .../StatelessWidget/Banner/desc_it_IT.json | 22 - .../StatelessWidget/Banner/desc_ja_JP.json | 22 - .../StatelessWidget/Banner/desc_ko_KR.json | 22 - .../StatelessWidget/Banner/desc_pt_PT.json | 22 - .../StatelessWidget/Banner/desc_ru_RU.json | 22 - .../StatelessWidget/Banner/desc_zh-CN.json | 22 - .../StatelessWidget/Banner/node1_base.dart | 42 - .../BottomSheet/desc_de_DE.json | 22 - .../BottomSheet/desc_en_US.json | 22 - .../BottomSheet/desc_es_ES.json | 22 - .../BottomSheet/desc_fr_FR.json | 22 - .../BottomSheet/desc_it_IT.json | 22 - .../BottomSheet/desc_ja_JP.json | 22 - .../BottomSheet/desc_ko_KR.json | 22 - .../BottomSheet/desc_pt_PT.json | 22 - .../BottomSheet/desc_ru_RU.json | 22 - .../BottomSheet/desc_zh-CN.json | 22 - .../BottomSheet/node1_base.dart | 53 - .../BoxScrollView/desc_de_DE.json | 27 - .../BoxScrollView/desc_en_US.json | 27 - .../BoxScrollView/desc_es_ES.json | 27 - .../BoxScrollView/desc_fr_FR.json | 27 - .../BoxScrollView/desc_it_IT.json | 27 - .../BoxScrollView/desc_ja_JP.json | 27 - .../BoxScrollView/desc_ko_KR.json | 27 - .../BoxScrollView/desc_pt_PT.json | 27 - .../BoxScrollView/desc_ru_RU.json | 27 - .../BoxScrollView/desc_zh-CN.json | 27 - .../BoxScrollView/node1_base.dart | 73 - .../StatelessWidget/Builder/desc_de_DE.json | 19 - .../StatelessWidget/Builder/desc_en_US.json | 19 - .../StatelessWidget/Builder/desc_es_ES.json | 19 - .../StatelessWidget/Builder/desc_fr_FR.json | 19 - .../StatelessWidget/Builder/desc_it_IT.json | 19 - .../StatelessWidget/Builder/desc_ja_JP.json | 19 - .../StatelessWidget/Builder/desc_ko_KR.json | 19 - .../StatelessWidget/Builder/desc_pt_PT.json | 19 - .../StatelessWidget/Builder/desc_ru_RU.json | 19 - .../StatelessWidget/Builder/desc_zh-CN.json | 19 - .../StatelessWidget/Builder/node1_base.dart | 29 - .../StatelessWidget/ButtonBar/desc_de_DE.json | 27 - .../StatelessWidget/ButtonBar/desc_en_US.json | 27 - .../StatelessWidget/ButtonBar/desc_es_ES.json | 27 - .../StatelessWidget/ButtonBar/desc_fr_FR.json | 27 - .../StatelessWidget/ButtonBar/desc_it_IT.json | 27 - .../StatelessWidget/ButtonBar/desc_ja_JP.json | 27 - .../StatelessWidget/ButtonBar/desc_ko_KR.json | 27 - .../StatelessWidget/ButtonBar/desc_pt_PT.json | 27 - .../StatelessWidget/ButtonBar/desc_ru_RU.json | 27 - .../StatelessWidget/ButtonBar/desc_zh-CN.json | 27 - .../StatelessWidget/ButtonBar/node1_base.dart | 31 - .../ButtonBar/node2_padding.dart | 32 - .../lib/StatelessWidget/Card/desc_de_DE.json | 31 - .../lib/StatelessWidget/Card/desc_en_US.json | 31 - .../lib/StatelessWidget/Card/desc_es_ES.json | 31 - .../lib/StatelessWidget/Card/desc_fr_FR.json | 31 - .../lib/StatelessWidget/Card/desc_it_IT.json | 31 - .../lib/StatelessWidget/Card/desc_ja_JP.json | 31 - .../lib/StatelessWidget/Card/desc_ko_KR.json | 31 - .../lib/StatelessWidget/Card/desc_pt_PT.json | 31 - .../lib/StatelessWidget/Card/desc_ru_RU.json | 31 - .../lib/StatelessWidget/Card/desc_zh-CN.json | 31 - .../lib/StatelessWidget/Card/node1_base.dart | 24 - .../lib/StatelessWidget/Card/node2_shape.dart | 50 - .../CheckboxListTile/desc_de_DE.json | 37 - .../CheckboxListTile/desc_en_US.json | 37 - .../CheckboxListTile/desc_es_ES.json | 37 - .../CheckboxListTile/desc_fr_FR.json | 37 - .../CheckboxListTile/desc_it_IT.json | 37 - .../CheckboxListTile/desc_ja_JP.json | 37 - .../CheckboxListTile/desc_ko_KR.json | 37 - .../CheckboxListTile/desc_pt_PT.json | 37 - .../CheckboxListTile/desc_ru_RU.json | 37 - .../CheckboxListTile/desc_zh-CN.json | 37 - .../CheckboxListTile/node1_base.dart | 33 - .../CheckboxListTile/node2_select.dart | 34 - .../CheckboxListTile/node3_dense.dart | 34 - .../CheckedModeBanner/desc_de_DE.json | 18 - .../CheckedModeBanner/desc_en_US.json | 18 - .../CheckedModeBanner/desc_es_ES.json | 18 - .../CheckedModeBanner/desc_fr_FR.json | 18 - .../CheckedModeBanner/desc_it_IT.json | 18 - .../CheckedModeBanner/desc_ja_JP.json | 18 - .../CheckedModeBanner/desc_ko_KR.json | 18 - .../CheckedModeBanner/desc_pt_PT.json | 18 - .../CheckedModeBanner/desc_ru_RU.json | 18 - .../CheckedModeBanner/desc_zh-CN.json | 18 - .../CheckedModeBanner/node1_base.dart | 25 - .../lib/StatelessWidget/Chip/desc_de_DE.json | 45 - .../lib/StatelessWidget/Chip/desc_en_US.json | 45 - .../lib/StatelessWidget/Chip/desc_es_ES.json | 45 - .../lib/StatelessWidget/Chip/desc_fr_FR.json | 45 - .../lib/StatelessWidget/Chip/desc_it_IT.json | 45 - .../lib/StatelessWidget/Chip/desc_ja_JP.json | 45 - .../lib/StatelessWidget/Chip/desc_ko_KR.json | 45 - .../lib/StatelessWidget/Chip/desc_pt_PT.json | 45 - .../lib/StatelessWidget/Chip/desc_ru_RU.json | 45 - .../lib/StatelessWidget/Chip/desc_zh-CN.json | 45 - .../lib/StatelessWidget/Chip/node1_base.dart | 33 - .../lib/StatelessWidget/Chip/node2_color.dart | 36 - .../StatelessWidget/Chip/node3_delete.dart | 27 - .../ChoiceChip/desc_de_DE.json | 27 - .../ChoiceChip/desc_en_US.json | 27 - .../ChoiceChip/desc_es_ES.json | 27 - .../ChoiceChip/desc_fr_FR.json | 27 - .../ChoiceChip/desc_it_IT.json | 27 - .../ChoiceChip/desc_ja_JP.json | 27 - .../ChoiceChip/desc_ko_KR.json | 27 - .../ChoiceChip/desc_pt_PT.json | 27 - .../ChoiceChip/desc_ru_RU.json | 27 - .../ChoiceChip/desc_zh-CN.json | 27 - .../ChoiceChip/node1_base.dart | 39 - .../CircleAvatar/desc_de_DE.json | 24 - .../CircleAvatar/desc_en_US.json | 24 - .../CircleAvatar/desc_es_ES.json | 24 - .../CircleAvatar/desc_fr_FR.json | 24 - .../CircleAvatar/desc_it_IT.json | 24 - .../CircleAvatar/desc_ja_JP.json | 24 - .../CircleAvatar/desc_ko_KR.json | 24 - .../CircleAvatar/desc_pt_PT.json | 24 - .../CircleAvatar/desc_ru_RU.json | 24 - .../CircleAvatar/desc_zh-CN.json | 24 - .../CircleAvatar/node1_base.dart | 22 - .../CloseButton/desc_de_DE.json | 21 - .../CloseButton/desc_en_US.json | 21 - .../CloseButton/desc_es_ES.json | 21 - .../CloseButton/desc_fr_FR.json | 21 - .../CloseButton/desc_it_IT.json | 21 - .../CloseButton/desc_ja_JP.json | 21 - .../CloseButton/desc_ko_KR.json | 21 - .../CloseButton/desc_pt_PT.json | 21 - .../CloseButton/desc_ru_RU.json | 21 - .../CloseButton/desc_zh-CN.json | 21 - .../CloseButton/node1_base.dart | 14 - .../CloseButtonIcon/desc_de_DE.json | 18 - .../CloseButtonIcon/desc_en_US.json | 18 - .../CloseButtonIcon/desc_es_ES.json | 18 - .../CloseButtonIcon/desc_fr_FR.json | 18 - .../CloseButtonIcon/desc_it_IT.json | 18 - .../CloseButtonIcon/desc_ja_JP.json | 18 - .../CloseButtonIcon/desc_ko_KR.json | 18 - .../CloseButtonIcon/desc_pt_PT.json | 18 - .../CloseButtonIcon/desc_ru_RU.json | 18 - .../CloseButtonIcon/desc_zh-CN.json | 18 - .../CloseButtonIcon/node1_base.dart | 13 - .../StatelessWidget/Container/desc_de_DE.json | 67 - .../StatelessWidget/Container/desc_en_US.json | 67 - .../StatelessWidget/Container/desc_es_ES.json | 67 - .../StatelessWidget/Container/desc_fr_FR.json | 67 - .../StatelessWidget/Container/desc_it_IT.json | 67 - .../StatelessWidget/Container/desc_ja_JP.json | 67 - .../StatelessWidget/Container/desc_ko_KR.json | 67 - .../StatelessWidget/Container/desc_pt_PT.json | 67 - .../StatelessWidget/Container/desc_ru_RU.json | 67 - .../StatelessWidget/Container/desc_zh-CN.json | 67 - .../StatelessWidget/Container/node1_base.dart | 18 - .../Container/node2_child.dart | 21 - .../Container/node3_alignment.dart | 22 - .../Container/node4_decoration.dart | 50 - .../Container/node5_transform.dart | 25 - .../Container/node6_constraints.dart | 23 - .../CupertinoActionSheet/desc_de_DE.json | 21 - .../CupertinoActionSheet/desc_en_US.json | 21 - .../CupertinoActionSheet/desc_es_ES.json | 21 - .../CupertinoActionSheet/desc_fr_FR.json | 21 - .../CupertinoActionSheet/desc_it_IT.json | 21 - .../CupertinoActionSheet/desc_ja_JP.json | 21 - .../CupertinoActionSheet/desc_ko_KR.json | 21 - .../CupertinoActionSheet/desc_pt_PT.json | 21 - .../CupertinoActionSheet/desc_ru_RU.json | 21 - .../CupertinoActionSheet/desc_zh-CN.json | 21 - .../CupertinoActionSheet/node1_base.dart | 58 - .../desc_de_DE.json | 20 - .../desc_en_US.json | 20 - .../desc_es_ES.json | 20 - .../desc_fr_FR.json | 20 - .../desc_it_IT.json | 20 - .../desc_ja_JP.json | 20 - .../desc_ko_KR.json | 20 - .../desc_pt_PT.json | 20 - .../desc_ru_RU.json | 20 - .../desc_zh-CN.json | 20 - .../node1_base.dart | 35 - .../CupertinoAlertDialog/desc_de_DE.json | 20 - .../CupertinoAlertDialog/desc_en_US.json | 20 - .../CupertinoAlertDialog/desc_es_ES.json | 20 - .../CupertinoAlertDialog/desc_fr_FR.json | 20 - .../CupertinoAlertDialog/desc_it_IT.json | 20 - .../CupertinoAlertDialog/desc_ja_JP.json | 20 - .../CupertinoAlertDialog/desc_ko_KR.json | 20 - .../CupertinoAlertDialog/desc_pt_PT.json | 20 - .../CupertinoAlertDialog/desc_ru_RU.json | 20 - .../CupertinoAlertDialog/desc_zh-CN.json | 20 - .../CupertinoAlertDialog/node1_base.dart | 94 - .../CupertinoDialogAction/desc_de_DE.json | 22 - .../CupertinoDialogAction/desc_en_US.json | 22 - .../CupertinoDialogAction/desc_es_ES.json | 22 - .../CupertinoDialogAction/desc_fr_FR.json | 22 - .../CupertinoDialogAction/desc_it_IT.json | 22 - .../CupertinoDialogAction/desc_ja_JP.json | 22 - .../CupertinoDialogAction/desc_ko_KR.json | 22 - .../CupertinoDialogAction/desc_pt_PT.json | 22 - .../CupertinoDialogAction/desc_ru_RU.json | 22 - .../CupertinoDialogAction/desc_zh-CN.json | 22 - .../CupertinoDialogAction/no_node1_base.dart | 130 - .../CupertinoDialogAction/node1_base.dart | 37 - .../desc_de_DE.json | 21 - .../desc_en_US.json | 21 - .../desc_es_ES.json | 21 - .../desc_fr_FR.json | 21 - .../desc_it_IT.json | 21 - .../desc_ja_JP.json | 21 - .../desc_ko_KR.json | 21 - .../desc_pt_PT.json | 21 - .../desc_ru_RU.json | 21 - .../desc_zh-CN.json | 21 - .../node1_base.dart | 26 - .../desc_de_DE.json | 19 - .../desc_en_US.json | 19 - .../desc_es_ES.json | 19 - .../desc_fr_FR.json | 19 - .../desc_it_IT.json | 19 - .../desc_ja_JP.json | 19 - .../desc_ko_KR.json | 19 - .../desc_pt_PT.json | 19 - .../desc_ru_RU.json | 19 - .../desc_zh-CN.json | 19 - .../node1_base.dart | 18 - .../CupertinoPageTransition/desc_de_DE.json | 21 - .../CupertinoPageTransition/desc_en_US.json | 21 - .../CupertinoPageTransition/desc_es_ES.json | 21 - .../CupertinoPageTransition/desc_fr_FR.json | 21 - .../CupertinoPageTransition/desc_it_IT.json | 21 - .../CupertinoPageTransition/desc_ja_JP.json | 21 - .../CupertinoPageTransition/desc_ko_KR.json | 21 - .../CupertinoPageTransition/desc_pt_PT.json | 21 - .../CupertinoPageTransition/desc_ru_RU.json | 21 - .../CupertinoPageTransition/desc_zh-CN.json | 21 - .../CupertinoPageTransition/node1_base.dart | 25 - .../CupertinoPopupSurface/desc_de_DE.json | 20 - .../CupertinoPopupSurface/desc_en_US.json | 20 - .../CupertinoPopupSurface/desc_es_ES.json | 20 - .../CupertinoPopupSurface/desc_fr_FR.json | 20 - .../CupertinoPopupSurface/desc_it_IT.json | 20 - .../CupertinoPopupSurface/desc_ja_JP.json | 20 - .../CupertinoPopupSurface/desc_ko_KR.json | 20 - .../CupertinoPopupSurface/desc_pt_PT.json | 20 - .../CupertinoPopupSurface/desc_ru_RU.json | 20 - .../CupertinoPopupSurface/desc_zh-CN.json | 20 - .../CupertinoPopupSurface/node1_base.dart | 54 - .../CupertinoTheme/desc_de_DE.json | 28 - .../CupertinoTheme/desc_en_US.json | 28 - .../CupertinoTheme/desc_es_ES.json | 28 - .../CupertinoTheme/desc_fr_FR.json | 28 - .../CupertinoTheme/desc_it_IT.json | 28 - .../CupertinoTheme/desc_ja_JP.json | 28 - .../CupertinoTheme/desc_ko_KR.json | 28 - .../CupertinoTheme/desc_pt_PT.json | 28 - .../CupertinoTheme/desc_ru_RU.json | 28 - .../CupertinoTheme/desc_zh-CN.json | 28 - .../CupertinoTheme/node1_base.dart | 47 - .../CupertinoTheme/node2_use.dart | 42 - .../StatelessWidget/DataTable/desc_de_DE.json | 28 - .../StatelessWidget/DataTable/desc_en_US.json | 28 - .../StatelessWidget/DataTable/desc_es_ES.json | 28 - .../StatelessWidget/DataTable/desc_fr_FR.json | 28 - .../StatelessWidget/DataTable/desc_it_IT.json | 28 - .../StatelessWidget/DataTable/desc_ja_JP.json | 28 - .../StatelessWidget/DataTable/desc_ko_KR.json | 28 - .../StatelessWidget/DataTable/desc_pt_PT.json | 28 - .../StatelessWidget/DataTable/desc_ru_RU.json | 28 - .../StatelessWidget/DataTable/desc_zh-CN.json | 28 - .../StatelessWidget/DataTable/node1_base.dart | 40 - .../DataTable/node2_operation.dart | 108 - .../StatelessWidget/DayPicker/desc_de_DE.json | 61 - .../StatelessWidget/DayPicker/desc_en_US.json | 61 - .../StatelessWidget/DayPicker/desc_es_ES.json | 61 - .../StatelessWidget/DayPicker/desc_fr_FR.json | 61 - .../StatelessWidget/DayPicker/desc_it_IT.json | 61 - .../StatelessWidget/DayPicker/desc_ja_JP.json | 61 - .../StatelessWidget/DayPicker/desc_ko_KR.json | 61 - .../StatelessWidget/DayPicker/desc_pt_PT.json | 61 - .../StatelessWidget/DayPicker/desc_ru_RU.json | 61 - .../StatelessWidget/DayPicker/desc_zh-CN.json | 61 - .../StatelessWidget/DayPicker/node1_base.dart | 24 - .../StatelessWidget/Dialog/desc_de_DE.json | 21 - .../StatelessWidget/Dialog/desc_en_US.json | 21 - .../StatelessWidget/Dialog/desc_es_ES.json | 21 - .../StatelessWidget/Dialog/desc_fr_FR.json | 21 - .../StatelessWidget/Dialog/desc_it_IT.json | 21 - .../StatelessWidget/Dialog/desc_ja_JP.json | 21 - .../StatelessWidget/Dialog/desc_ko_KR.json | 21 - .../StatelessWidget/Dialog/desc_pt_PT.json | 21 - .../StatelessWidget/Dialog/desc_ru_RU.json | 21 - .../StatelessWidget/Dialog/desc_zh-CN.json | 21 - .../StatelessWidget/Dialog/node1_base.dart | 128 - .../StatelessWidget/Divider/desc_de_DE.json | 31 - .../StatelessWidget/Divider/desc_en_US.json | 31 - .../StatelessWidget/Divider/desc_es_ES.json | 31 - .../StatelessWidget/Divider/desc_fr_FR.json | 31 - .../StatelessWidget/Divider/desc_it_IT.json | 31 - .../StatelessWidget/Divider/desc_ja_JP.json | 31 - .../StatelessWidget/Divider/desc_ko_KR.json | 31 - .../StatelessWidget/Divider/desc_pt_PT.json | 31 - .../StatelessWidget/Divider/desc_ru_RU.json | 31 - .../StatelessWidget/Divider/desc_zh-CN.json | 31 - .../StatelessWidget/Divider/node1_base.dart | 25 - .../StatelessWidget/Divider/node2_height.dart | 31 - .../desc_de_DE.json | 19 - .../desc_en_US.json | 19 - .../desc_es_ES.json | 19 - .../desc_fr_FR.json | 19 - .../desc_it_IT.json | 19 - .../desc_ja_JP.json | 19 - .../desc_ko_KR.json | 19 - .../desc_pt_PT.json | 19 - .../desc_ru_RU.json | 19 - .../desc_zh-CN.json | 19 - .../node1_base.dart | 110 - .../StatelessWidget/Drawer/desc_de_DE.json | 22 - .../StatelessWidget/Drawer/desc_en_US.json | 22 - .../StatelessWidget/Drawer/desc_es_ES.json | 22 - .../StatelessWidget/Drawer/desc_fr_FR.json | 22 - .../StatelessWidget/Drawer/desc_it_IT.json | 22 - .../StatelessWidget/Drawer/desc_ja_JP.json | 22 - .../StatelessWidget/Drawer/desc_ko_KR.json | 22 - .../StatelessWidget/Drawer/desc_pt_PT.json | 22 - .../StatelessWidget/Drawer/desc_ru_RU.json | 22 - .../StatelessWidget/Drawer/desc_zh-CN.json | 22 - .../StatelessWidget/Drawer/node1_base.dart | 65 - .../DrawerButton/desc_de_DE.json | 23 - .../DrawerButton/desc_en_US.json | 23 - .../DrawerButton/desc_es_ES.json | 23 - .../DrawerButton/desc_fr_FR.json | 23 - .../DrawerButton/desc_it_IT.json | 23 - .../DrawerButton/desc_ja_JP.json | 23 - .../DrawerButton/desc_ko_KR.json | 23 - .../DrawerButton/desc_pt_PT.json | 23 - .../DrawerButton/desc_ru_RU.json | 23 - .../DrawerButton/desc_zh-CN.json | 23 - .../DrawerButton/node1_base.dart | 19 - .../DrawerButtonIcon/desc_de_DE.json | 18 - .../DrawerButtonIcon/desc_en_US.json | 18 - .../DrawerButtonIcon/desc_es_ES.json | 18 - .../DrawerButtonIcon/desc_fr_FR.json | 18 - .../DrawerButtonIcon/desc_it_IT.json | 18 - .../DrawerButtonIcon/desc_ja_JP.json | 18 - .../DrawerButtonIcon/desc_ko_KR.json | 18 - .../DrawerButtonIcon/desc_pt_PT.json | 18 - .../DrawerButtonIcon/desc_ru_RU.json | 18 - .../DrawerButtonIcon/desc_zh-CN.json | 18 - .../DrawerButtonIcon/node1_base.dart | 13 - .../DrawerHeader/desc_de_DE.json | 21 - .../DrawerHeader/desc_en_US.json | 21 - .../DrawerHeader/desc_es_ES.json | 21 - .../DrawerHeader/desc_fr_FR.json | 21 - .../DrawerHeader/desc_it_IT.json | 21 - .../DrawerHeader/desc_ja_JP.json | 21 - .../DrawerHeader/desc_ko_KR.json | 21 - .../DrawerHeader/desc_pt_PT.json | 21 - .../DrawerHeader/desc_ru_RU.json | 21 - .../DrawerHeader/desc_zh-CN.json | 21 - .../DrawerHeader/node1_base.dart | 73 - .../EndDrawerButton/desc_de_DE.json | 23 - .../EndDrawerButton/desc_en_US.json | 23 - .../EndDrawerButton/desc_es_ES.json | 23 - .../EndDrawerButton/desc_fr_FR.json | 23 - .../EndDrawerButton/desc_it_IT.json | 23 - .../EndDrawerButton/desc_ja_JP.json | 23 - .../EndDrawerButton/desc_ko_KR.json | 23 - .../EndDrawerButton/desc_pt_PT.json | 23 - .../EndDrawerButton/desc_ru_RU.json | 23 - .../EndDrawerButton/desc_zh-CN.json | 23 - .../EndDrawerButton/node1_base.dart | 19 - .../EndDrawerButtonIcon/desc_de_DE.json | 18 - .../EndDrawerButtonIcon/desc_en_US.json | 18 - .../EndDrawerButtonIcon/desc_es_ES.json | 18 - .../EndDrawerButtonIcon/desc_fr_FR.json | 18 - .../EndDrawerButtonIcon/desc_it_IT.json | 18 - .../EndDrawerButtonIcon/desc_ja_JP.json | 18 - .../EndDrawerButtonIcon/desc_ko_KR.json | 18 - .../EndDrawerButtonIcon/desc_pt_PT.json | 18 - .../EndDrawerButtonIcon/desc_ru_RU.json | 18 - .../EndDrawerButtonIcon/desc_zh-CN.json | 18 - .../EndDrawerButtonIcon/node1_base.dart | 13 - .../FadeInImage/desc_de_DE.json | 28 - .../FadeInImage/desc_en_US.json | 28 - .../FadeInImage/desc_es_ES.json | 28 - .../FadeInImage/desc_fr_FR.json | 28 - .../FadeInImage/desc_it_IT.json | 28 - .../FadeInImage/desc_ja_JP.json | 28 - .../FadeInImage/desc_ko_KR.json | 28 - .../FadeInImage/desc_pt_PT.json | 28 - .../FadeInImage/desc_ru_RU.json | 28 - .../FadeInImage/desc_zh-CN.json | 28 - .../FadeInImage/node1_base.dart | 29 - .../FilterChip/desc_de_DE.json | 27 - .../FilterChip/desc_en_US.json | 27 - .../FilterChip/desc_es_ES.json | 27 - .../FilterChip/desc_fr_FR.json | 27 - .../FilterChip/desc_it_IT.json | 27 - .../FilterChip/desc_ja_JP.json | 27 - .../FilterChip/desc_ko_KR.json | 27 - .../FilterChip/desc_pt_PT.json | 27 - .../FilterChip/desc_ru_RU.json | 27 - .../FilterChip/desc_zh-CN.json | 27 - .../FilterChip/node1_base.dart | 72 - .../FlatButton/desc_de_DE.json | 58 - .../FlatButton/desc_en_US.json | 58 - .../FlatButton/desc_es_ES.json | 58 - .../FlatButton/desc_fr_FR.json | 58 - .../FlatButton/desc_it_IT.json | 58 - .../FlatButton/desc_ja_JP.json | 58 - .../FlatButton/desc_ko_KR.json | 58 - .../FlatButton/desc_pt_PT.json | 58 - .../FlatButton/desc_ru_RU.json | 58 - .../FlatButton/desc_zh-CN.json | 58 - .../FlatButton/node1_base.dart | 20 - .../FloatingActionButton/desc_de_DE.json | 37 - .../FloatingActionButton/desc_en_US.json | 37 - .../FloatingActionButton/desc_es_ES.json | 37 - .../FloatingActionButton/desc_fr_FR.json | 37 - .../FloatingActionButton/desc_it_IT.json | 37 - .../FloatingActionButton/desc_ja_JP.json | 37 - .../FloatingActionButton/desc_ko_KR.json | 37 - .../FloatingActionButton/desc_pt_PT.json | 37 - .../FloatingActionButton/desc_ru_RU.json | 37 - .../FloatingActionButton/desc_zh-CN.json | 37 - .../FloatingActionButton/node1_base.dart | 29 - .../FloatingActionButton/node2_mini.dart | 31 - .../FloatingActionButton/node3_shape.dart | 57 - .../FlutterLogo/desc_de_DE.json | 27 - .../FlutterLogo/desc_en_US.json | 27 - .../FlutterLogo/desc_es_ES.json | 27 - .../FlutterLogo/desc_fr_FR.json | 27 - .../FlutterLogo/desc_it_IT.json | 27 - .../FlutterLogo/desc_ja_JP.json | 27 - .../FlutterLogo/desc_ko_KR.json | 27 - .../FlutterLogo/desc_pt_PT.json | 27 - .../FlutterLogo/desc_ru_RU.json | 27 - .../FlutterLogo/desc_zh-CN.json | 27 - .../FlutterLogo/node1_base.dart | 28 - .../FlutterLogo/node2_style.dart | 28 - .../GestureDetector/desc_de_DE.json | 44 - .../GestureDetector/desc_en_US.json | 44 - .../GestureDetector/desc_es_ES.json | 44 - .../GestureDetector/desc_fr_FR.json | 44 - .../GestureDetector/desc_it_IT.json | 44 - .../GestureDetector/desc_ja_JP.json | 44 - .../GestureDetector/desc_ko_KR.json | 44 - .../GestureDetector/desc_pt_PT.json | 44 - .../GestureDetector/desc_ru_RU.json | 44 - .../GestureDetector/desc_zh-CN.json | 44 - .../GestureDetector/node1_base.dart | 35 - .../GestureDetector/node2_tap.dart | 36 - .../GestureDetector/node3_pan.dart | 42 - .../StatelessWidget/GridPaper/desc_de_DE.json | 30 - .../StatelessWidget/GridPaper/desc_en_US.json | 30 - .../StatelessWidget/GridPaper/desc_es_ES.json | 30 - .../StatelessWidget/GridPaper/desc_fr_FR.json | 30 - .../StatelessWidget/GridPaper/desc_it_IT.json | 30 - .../StatelessWidget/GridPaper/desc_ja_JP.json | 30 - .../StatelessWidget/GridPaper/desc_ko_KR.json | 30 - .../StatelessWidget/GridPaper/desc_pt_PT.json | 30 - .../StatelessWidget/GridPaper/desc_ru_RU.json | 30 - .../StatelessWidget/GridPaper/desc_zh-CN.json | 30 - .../StatelessWidget/GridPaper/node1_base.dart | 22 - .../GridPaper/node2_divisions.dart | 24 - .../StatelessWidget/GridTile/desc_de_DE.json | 20 - .../StatelessWidget/GridTile/desc_en_US.json | 20 - .../StatelessWidget/GridTile/desc_es_ES.json | 20 - .../StatelessWidget/GridTile/desc_fr_FR.json | 20 - .../StatelessWidget/GridTile/desc_it_IT.json | 20 - .../StatelessWidget/GridTile/desc_ja_JP.json | 20 - .../StatelessWidget/GridTile/desc_ko_KR.json | 20 - .../StatelessWidget/GridTile/desc_pt_PT.json | 20 - .../StatelessWidget/GridTile/desc_ru_RU.json | 20 - .../StatelessWidget/GridTile/desc_zh-CN.json | 20 - .../StatelessWidget/GridTile/node1_base.dart | 43 - .../GridTileBar/desc_de_DE.json | 22 - .../GridTileBar/desc_en_US.json | 22 - .../GridTileBar/desc_es_ES.json | 22 - .../GridTileBar/desc_fr_FR.json | 22 - .../GridTileBar/desc_it_IT.json | 22 - .../GridTileBar/desc_ja_JP.json | 22 - .../GridTileBar/desc_ko_KR.json | 22 - .../GridTileBar/desc_pt_PT.json | 22 - .../GridTileBar/desc_ru_RU.json | 22 - .../GridTileBar/desc_zh-CN.json | 22 - .../GridTileBar/node1_base.dart | 23 - .../StatelessWidget/GridView/desc_de_DE.json | 53 - .../StatelessWidget/GridView/desc_en_US.json | 53 - .../StatelessWidget/GridView/desc_es_ES.json | 53 - .../StatelessWidget/GridView/desc_fr_FR.json | 53 - .../StatelessWidget/GridView/desc_it_IT.json | 53 - .../StatelessWidget/GridView/desc_ja_JP.json | 53 - .../StatelessWidget/GridView/desc_ko_KR.json | 53 - .../StatelessWidget/GridView/desc_pt_PT.json | 53 - .../StatelessWidget/GridView/desc_ru_RU.json | 53 - .../StatelessWidget/GridView/desc_zh-CN.json | 53 - .../StatelessWidget/GridView/node1_base.dart | 56 - .../GridView/node2_direction.dart | 55 - .../GridView/node3_extend.dart | 54 - .../GridView/node4_builder.dart | 56 - .../HtmlElementView/desc_de_DE.json | 19 - .../HtmlElementView/desc_en_US.json | 19 - .../HtmlElementView/desc_es_ES.json | 19 - .../HtmlElementView/desc_fr_FR.json | 19 - .../HtmlElementView/desc_it_IT.json | 19 - .../HtmlElementView/desc_ja_JP.json | 19 - .../HtmlElementView/desc_ko_KR.json | 19 - .../HtmlElementView/desc_pt_PT.json | 19 - .../HtmlElementView/desc_ru_RU.json | 19 - .../HtmlElementView/desc_zh-CN.json | 19 - .../HtmlElementView/node1_base.dart | 24 - .../lib/StatelessWidget/Icon/desc_de_DE.json | 31 - .../lib/StatelessWidget/Icon/desc_en_US.json | 31 - .../lib/StatelessWidget/Icon/desc_es_ES.json | 31 - .../lib/StatelessWidget/Icon/desc_fr_FR.json | 31 - .../lib/StatelessWidget/Icon/desc_it_IT.json | 31 - .../lib/StatelessWidget/Icon/desc_ja_JP.json | 31 - .../lib/StatelessWidget/Icon/desc_ko_KR.json | 31 - .../lib/StatelessWidget/Icon/desc_pt_PT.json | 31 - .../lib/StatelessWidget/Icon/desc_ru_RU.json | 31 - .../lib/StatelessWidget/Icon/desc_zh-CN.json | 31 - .../lib/StatelessWidget/Icon/node1_base.dart | 23 - .../lib/StatelessWidget/Icon/node2_diy.dart | 30 - .../IconButton/desc_de_DE.json | 22 - .../IconButton/desc_en_US.json | 22 - .../IconButton/desc_es_ES.json | 22 - .../IconButton/desc_fr_FR.json | 22 - .../IconButton/desc_it_IT.json | 22 - .../IconButton/desc_ja_JP.json | 22 - .../IconButton/desc_ko_KR.json | 22 - .../IconButton/desc_pt_PT.json | 22 - .../IconButton/desc_ru_RU.json | 22 - .../IconButton/desc_zh-CN.json | 22 - .../IconButton/node1_base.dart | 23 - .../StatelessWidget/ImageIcon/desc_de_DE.json | 24 - .../StatelessWidget/ImageIcon/desc_en_US.json | 24 - .../StatelessWidget/ImageIcon/desc_es_ES.json | 24 - .../StatelessWidget/ImageIcon/desc_fr_FR.json | 24 - .../StatelessWidget/ImageIcon/desc_it_IT.json | 24 - .../StatelessWidget/ImageIcon/desc_ja_JP.json | 24 - .../StatelessWidget/ImageIcon/desc_ko_KR.json | 24 - .../StatelessWidget/ImageIcon/desc_pt_PT.json | 24 - .../StatelessWidget/ImageIcon/desc_ru_RU.json | 24 - .../StatelessWidget/ImageIcon/desc_zh-CN.json | 24 - .../StatelessWidget/ImageIcon/node1_base.dart | 29 - .../StatelessWidget/InputChip/desc_de_DE.json | 33 - .../StatelessWidget/InputChip/desc_en_US.json | 33 - .../StatelessWidget/InputChip/desc_es_ES.json | 33 - .../StatelessWidget/InputChip/desc_fr_FR.json | 33 - .../StatelessWidget/InputChip/desc_it_IT.json | 33 - .../StatelessWidget/InputChip/desc_ja_JP.json | 33 - .../StatelessWidget/InputChip/desc_ko_KR.json | 33 - .../StatelessWidget/InputChip/desc_pt_PT.json | 33 - .../StatelessWidget/InputChip/desc_ru_RU.json | 33 - .../StatelessWidget/InputChip/desc_zh-CN.json | 33 - .../StatelessWidget/InputChip/node1_base.dart | 35 - .../InputChip/node2_select.dart | 41 - .../StatelessWidget/ListTile/desc_de_DE.json | 41 - .../StatelessWidget/ListTile/desc_en_US.json | 41 - .../StatelessWidget/ListTile/desc_es_ES.json | 41 - .../StatelessWidget/ListTile/desc_fr_FR.json | 41 - .../StatelessWidget/ListTile/desc_it_IT.json | 41 - .../StatelessWidget/ListTile/desc_ja_JP.json | 41 - .../StatelessWidget/ListTile/desc_ko_KR.json | 41 - .../StatelessWidget/ListTile/desc_pt_PT.json | 41 - .../StatelessWidget/ListTile/desc_ru_RU.json | 41 - .../StatelessWidget/ListTile/desc_zh-CN.json | 41 - .../StatelessWidget/ListTile/node1_base.dart | 24 - .../ListTile/node2_select.dart | 32 - .../StatelessWidget/ListTile/node3_dense.dart | 33 - .../StatelessWidget/ListView/desc_de_DE.json | 46 - .../StatelessWidget/ListView/desc_en_US.json | 46 - .../StatelessWidget/ListView/desc_es_ES.json | 46 - .../StatelessWidget/ListView/desc_fr_FR.json | 46 - .../StatelessWidget/ListView/desc_it_IT.json | 46 - .../StatelessWidget/ListView/desc_ja_JP.json | 46 - .../StatelessWidget/ListView/desc_ko_KR.json | 46 - .../StatelessWidget/ListView/desc_pt_PT.json | 46 - .../StatelessWidget/ListView/desc_ru_RU.json | 46 - .../StatelessWidget/ListView/desc_zh-CN.json | 46 - .../StatelessWidget/ListView/node1_base.dart | 53 - .../ListView/node2_direction.dart | 55 - .../ListView/node3_builder.dart | 53 - .../ListView/node4_separated.dart | 58 - .../StatelessWidget/Listener/desc_de_DE.json | 22 - .../StatelessWidget/Listener/desc_en_US.json | 22 - .../StatelessWidget/Listener/desc_es_ES.json | 22 - .../StatelessWidget/Listener/desc_fr_FR.json | 22 - .../StatelessWidget/Listener/desc_it_IT.json | 22 - .../StatelessWidget/Listener/desc_ja_JP.json | 22 - .../StatelessWidget/Listener/desc_ko_KR.json | 22 - .../StatelessWidget/Listener/desc_pt_PT.json | 22 - .../StatelessWidget/Listener/desc_ru_RU.json | 22 - .../StatelessWidget/Listener/desc_zh-CN.json | 22 - .../StatelessWidget/Listener/node1_base.dart | 37 - .../MaterialBanner/desc_de_DE.json | 32 - .../MaterialBanner/desc_en_US.json | 32 - .../MaterialBanner/desc_es_ES.json | 32 - .../MaterialBanner/desc_fr_FR.json | 32 - .../MaterialBanner/desc_it_IT.json | 32 - .../MaterialBanner/desc_ja_JP.json | 32 - .../MaterialBanner/desc_ko_KR.json | 32 - .../MaterialBanner/desc_pt_PT.json | 32 - .../MaterialBanner/desc_ru_RU.json | 32 - .../MaterialBanner/desc_zh-CN.json | 32 - .../MaterialBanner/node1_one_btn.dart | 38 - .../MaterialBanner/node2_two_btn.dart | 59 - .../MaterialButton/desc_de_DE.json | 47 - .../MaterialButton/desc_en_US.json | 47 - .../MaterialButton/desc_es_ES.json | 47 - .../MaterialButton/desc_fr_FR.json | 47 - .../MaterialButton/desc_it_IT.json | 47 - .../MaterialButton/desc_ja_JP.json | 47 - .../MaterialButton/desc_ko_KR.json | 47 - .../MaterialButton/desc_pt_PT.json | 47 - .../MaterialButton/desc_ru_RU.json | 47 - .../MaterialButton/desc_zh-CN.json | 47 - .../MaterialButton/node1_base.dart | 25 - .../MaterialButton/node2_onLongPress.dart | 27 - .../MaterialButton/node3_shape.dart | 57 - .../ModalBarrier/desc_de_DE.json | 19 - .../ModalBarrier/desc_en_US.json | 19 - .../ModalBarrier/desc_es_ES.json | 19 - .../ModalBarrier/desc_fr_FR.json | 19 - .../ModalBarrier/desc_it_IT.json | 19 - .../ModalBarrier/desc_ja_JP.json | 19 - .../ModalBarrier/desc_ko_KR.json | 19 - .../ModalBarrier/desc_pt_PT.json | 19 - .../ModalBarrier/desc_ru_RU.json | 19 - .../ModalBarrier/desc_zh-CN.json | 19 - .../ModalBarrier/node1_base.dart | 24 - .../NavigationToolbar/desc_de_DE.json | 22 - .../NavigationToolbar/desc_en_US.json | 22 - .../NavigationToolbar/desc_es_ES.json | 22 - .../NavigationToolbar/desc_fr_FR.json | 22 - .../NavigationToolbar/desc_it_IT.json | 22 - .../NavigationToolbar/desc_ja_JP.json | 22 - .../NavigationToolbar/desc_ko_KR.json | 22 - .../NavigationToolbar/desc_pt_PT.json | 22 - .../NavigationToolbar/desc_ru_RU.json | 22 - .../NavigationToolbar/desc_zh-CN.json | 22 - .../NavigationToolbar/node1_base.dart | 37 - .../NotificationListener/desc_de_DE.json | 25 - .../NotificationListener/desc_en_US.json | 25 - .../NotificationListener/desc_es_ES.json | 25 - .../NotificationListener/desc_fr_FR.json | 25 - .../NotificationListener/desc_it_IT.json | 25 - .../NotificationListener/desc_ja_JP.json | 25 - .../NotificationListener/desc_ko_KR.json | 25 - .../NotificationListener/desc_pt_PT.json | 25 - .../NotificationListener/desc_ru_RU.json | 25 - .../NotificationListener/desc_zh-CN.json | 25 - .../NotificationListener/node1_base.dart | 61 - .../NotificationListener/node2_update.dart | 79 - .../OrientationBuilder/desc_de_DE.json | 18 - .../OrientationBuilder/desc_en_US.json | 18 - .../OrientationBuilder/desc_es_ES.json | 18 - .../OrientationBuilder/desc_fr_FR.json | 18 - .../OrientationBuilder/desc_it_IT.json | 18 - .../OrientationBuilder/desc_ja_JP.json | 18 - .../OrientationBuilder/desc_ko_KR.json | 18 - .../OrientationBuilder/desc_pt_PT.json | 18 - .../OrientationBuilder/desc_ru_RU.json | 18 - .../OrientationBuilder/desc_zh-CN.json | 18 - .../OrientationBuilder/node1_base.dart | 51 - .../OutlineButton/desc_de_DE.json | 60 - .../OutlineButton/desc_en_US.json | 60 - .../OutlineButton/desc_es_ES.json | 60 - .../OutlineButton/desc_fr_FR.json | 60 - .../OutlineButton/desc_it_IT.json | 60 - .../OutlineButton/desc_ja_JP.json | 60 - .../OutlineButton/desc_ko_KR.json | 60 - .../OutlineButton/desc_pt_PT.json | 60 - .../OutlineButton/desc_ru_RU.json | 60 - .../OutlineButton/desc_zh-CN.json | 60 - .../OutlineButton/node1_base.dart | 21 - .../PageStorage/desc_de_DE.json | 23 - .../PageStorage/desc_en_US.json | 23 - .../PageStorage/desc_es_ES.json | 23 - .../PageStorage/desc_fr_FR.json | 23 - .../PageStorage/desc_it_IT.json | 23 - .../PageStorage/desc_ja_JP.json | 23 - .../PageStorage/desc_ko_KR.json | 23 - .../PageStorage/desc_pt_PT.json | 23 - .../PageStorage/desc_ru_RU.json | 23 - .../PageStorage/desc_zh-CN.json | 23 - .../PageStorage/node1_base.dart | 109 - .../Placeholder/desc_de_DE.json | 28 - .../Placeholder/desc_en_US.json | 28 - .../Placeholder/desc_es_ES.json | 28 - .../Placeholder/desc_fr_FR.json | 28 - .../Placeholder/desc_it_IT.json | 28 - .../Placeholder/desc_ja_JP.json | 28 - .../Placeholder/desc_ko_KR.json | 28 - .../Placeholder/desc_pt_PT.json | 28 - .../Placeholder/desc_ru_RU.json | 28 - .../Placeholder/desc_zh-CN.json | 28 - .../Placeholder/node1_base.dart | 20 - .../Placeholder/node2_fallback.dart | 20 - .../PositionedDirectional/desc_de_DE.json | 25 - .../PositionedDirectional/desc_en_US.json | 25 - .../PositionedDirectional/desc_es_ES.json | 25 - .../PositionedDirectional/desc_fr_FR.json | 25 - .../PositionedDirectional/desc_it_IT.json | 25 - .../PositionedDirectional/desc_ja_JP.json | 25 - .../PositionedDirectional/desc_ko_KR.json | 25 - .../PositionedDirectional/desc_pt_PT.json | 25 - .../PositionedDirectional/desc_ru_RU.json | 25 - .../PositionedDirectional/desc_zh-CN.json | 25 - .../PositionedDirectional/node1_base.dart | 52 - .../PreferredSize/desc_de_DE.json | 28 - .../PreferredSize/desc_en_US.json | 28 - .../PreferredSize/desc_es_ES.json | 28 - .../PreferredSize/desc_fr_FR.json | 28 - .../PreferredSize/desc_it_IT.json | 28 - .../PreferredSize/desc_ja_JP.json | 28 - .../PreferredSize/desc_ko_KR.json | 28 - .../PreferredSize/desc_pt_PT.json | 28 - .../PreferredSize/desc_ru_RU.json | 28 - .../PreferredSize/desc_zh-CN.json | 28 - .../PreferredSize/node1_base.dart | 23 - .../PreferredSize/node2_adapter.dart | 30 - .../RadioListTile/desc_de_DE.json | 32 - .../RadioListTile/desc_en_US.json | 32 - .../RadioListTile/desc_es_ES.json | 32 - .../RadioListTile/desc_fr_FR.json | 32 - .../RadioListTile/desc_it_IT.json | 32 - .../RadioListTile/desc_ja_JP.json | 32 - .../RadioListTile/desc_ko_KR.json | 32 - .../RadioListTile/desc_pt_PT.json | 32 - .../RadioListTile/desc_ru_RU.json | 32 - .../RadioListTile/desc_zh-CN.json | 32 - .../RadioListTile/node1_base.dart | 60 - .../RadioListTile/node2_dense.dart | 61 - .../RaisedButton/desc_de_DE.json | 60 - .../RaisedButton/desc_en_US.json | 60 - .../RaisedButton/desc_es_ES.json | 60 - .../RaisedButton/desc_fr_FR.json | 60 - .../RaisedButton/desc_it_IT.json | 60 - .../RaisedButton/desc_ja_JP.json | 60 - .../RaisedButton/desc_ko_KR.json | 60 - .../RaisedButton/desc_pt_PT.json | 60 - .../RaisedButton/desc_ru_RU.json | 60 - .../RaisedButton/desc_zh-CN.json | 60 - .../RaisedButton/node1_base.dart | 20 - .../RawMagnifier/desc_de_DE.json | 29 - .../RawMagnifier/desc_en_US.json | 29 - .../RawMagnifier/desc_es_ES.json | 29 - .../RawMagnifier/desc_fr_FR.json | 29 - .../RawMagnifier/desc_it_IT.json | 29 - .../RawMagnifier/desc_ja_JP.json | 29 - .../RawMagnifier/desc_ko_KR.json | 29 - .../RawMagnifier/desc_pt_PT.json | 29 - .../RawMagnifier/desc_ru_RU.json | 29 - .../RawMagnifier/desc_zh-CN.json | 29 - .../RawMagnifier/node1_base.dart | 76 - .../RawMagnifier/node2_shape.dart | 117 - .../StatelessWidget/SafeArea/desc_de_DE.json | 22 - .../StatelessWidget/SafeArea/desc_en_US.json | 22 - .../StatelessWidget/SafeArea/desc_es_ES.json | 22 - .../StatelessWidget/SafeArea/desc_fr_FR.json | 22 - .../StatelessWidget/SafeArea/desc_it_IT.json | 22 - .../StatelessWidget/SafeArea/desc_ja_JP.json | 22 - .../StatelessWidget/SafeArea/desc_ko_KR.json | 22 - .../StatelessWidget/SafeArea/desc_pt_PT.json | 22 - .../StatelessWidget/SafeArea/desc_ru_RU.json | 22 - .../StatelessWidget/SafeArea/desc_zh-CN.json | 22 - .../StatelessWidget/SafeArea/node1_base.dart | 116 - .../ScrollView/desc_de_DE.json | 29 - .../ScrollView/desc_en_US.json | 29 - .../ScrollView/desc_es_ES.json | 29 - .../ScrollView/desc_fr_FR.json | 29 - .../ScrollView/desc_it_IT.json | 29 - .../ScrollView/desc_ja_JP.json | 29 - .../ScrollView/desc_ko_KR.json | 29 - .../ScrollView/desc_pt_PT.json | 29 - .../ScrollView/desc_ru_RU.json | 29 - .../ScrollView/desc_zh-CN.json | 29 - .../ScrollView/node1_base.dart | 103 - .../SimpleDialog/desc_de_DE.json | 24 - .../SimpleDialog/desc_en_US.json | 24 - .../SimpleDialog/desc_es_ES.json | 24 - .../SimpleDialog/desc_fr_FR.json | 24 - .../SimpleDialog/desc_it_IT.json | 24 - .../SimpleDialog/desc_ja_JP.json | 24 - .../SimpleDialog/desc_ko_KR.json | 24 - .../SimpleDialog/desc_pt_PT.json | 24 - .../SimpleDialog/desc_ru_RU.json | 24 - .../SimpleDialog/desc_zh-CN.json | 24 - .../SimpleDialog/node1_base.dart | 110 - .../SimpleDialogOption/desc_de_DE.json | 19 - .../SimpleDialogOption/desc_en_US.json | 19 - .../SimpleDialogOption/desc_es_ES.json | 19 - .../SimpleDialogOption/desc_fr_FR.json | 19 - .../SimpleDialogOption/desc_it_IT.json | 19 - .../SimpleDialogOption/desc_ja_JP.json | 19 - .../SimpleDialogOption/desc_ko_KR.json | 19 - .../SimpleDialogOption/desc_pt_PT.json | 19 - .../SimpleDialogOption/desc_ru_RU.json | 19 - .../SimpleDialogOption/desc_zh-CN.json | 19 - .../SimpleDialogOption/node1_base.dart | 36 - .../SingleChildScrollView/desc_de_DE.json | 27 - .../SingleChildScrollView/desc_en_US.json | 27 - .../SingleChildScrollView/desc_es_ES.json | 27 - .../SingleChildScrollView/desc_fr_FR.json | 27 - .../SingleChildScrollView/desc_it_IT.json | 27 - .../SingleChildScrollView/desc_ja_JP.json | 27 - .../SingleChildScrollView/desc_ko_KR.json | 27 - .../SingleChildScrollView/desc_pt_PT.json | 27 - .../SingleChildScrollView/desc_ru_RU.json | 27 - .../SingleChildScrollView/desc_zh-CN.json | 27 - .../SingleChildScrollView/node1_base.dart | 59 - .../node2_direction.dart | 60 - .../StatelessWidget/SnackBar/desc_de_DE.json | 27 - .../StatelessWidget/SnackBar/desc_en_US.json | 27 - .../StatelessWidget/SnackBar/desc_es_ES.json | 27 - .../StatelessWidget/SnackBar/desc_fr_FR.json | 27 - .../StatelessWidget/SnackBar/desc_it_IT.json | 27 - .../StatelessWidget/SnackBar/desc_ja_JP.json | 27 - .../StatelessWidget/SnackBar/desc_ko_KR.json | 27 - .../StatelessWidget/SnackBar/desc_pt_PT.json | 27 - .../StatelessWidget/SnackBar/desc_ru_RU.json | 27 - .../StatelessWidget/SnackBar/desc_zh-CN.json | 27 - .../StatelessWidget/SnackBar/node1_base.dart | 40 - .../SnackBarAction/desc_de_DE.json | 21 - .../SnackBarAction/desc_en_US.json | 21 - .../SnackBarAction/desc_es_ES.json | 21 - .../SnackBarAction/desc_fr_FR.json | 21 - .../SnackBarAction/desc_it_IT.json | 21 - .../SnackBarAction/desc_ja_JP.json | 21 - .../SnackBarAction/desc_ko_KR.json | 21 - .../SnackBarAction/desc_pt_PT.json | 21 - .../SnackBarAction/desc_ru_RU.json | 21 - .../SnackBarAction/desc_zh-CN.json | 21 - .../SnackBarAction/node1_base.dart | 18 - .../StatelessWidget/Spacer/desc_de_DE.json | 25 - .../StatelessWidget/Spacer/desc_en_US.json | 25 - .../StatelessWidget/Spacer/desc_es_ES.json | 25 - .../StatelessWidget/Spacer/desc_fr_FR.json | 25 - .../StatelessWidget/Spacer/desc_it_IT.json | 25 - .../StatelessWidget/Spacer/desc_ja_JP.json | 25 - .../StatelessWidget/Spacer/desc_ko_KR.json | 25 - .../StatelessWidget/Spacer/desc_pt_PT.json | 25 - .../StatelessWidget/Spacer/desc_ru_RU.json | 25 - .../StatelessWidget/Spacer/desc_zh-CN.json | 25 - .../StatelessWidget/Spacer/node1_base.dart | 31 - .../StatelessWidget/Spacer/node2_flex.dart | 67 - .../SwitchListTile/desc_de_DE.json | 41 - .../SwitchListTile/desc_en_US.json | 41 - .../SwitchListTile/desc_es_ES.json | 41 - .../SwitchListTile/desc_fr_FR.json | 41 - .../SwitchListTile/desc_it_IT.json | 41 - .../SwitchListTile/desc_ja_JP.json | 41 - .../SwitchListTile/desc_ko_KR.json | 41 - .../SwitchListTile/desc_pt_PT.json | 41 - .../SwitchListTile/desc_ru_RU.json | 41 - .../SwitchListTile/desc_zh-CN.json | 41 - .../SwitchListTile/node1_base.dart | 34 - .../SwitchListTile/node2_select.dart | 35 - .../SwitchListTile/node3_dense.dart | 34 - .../lib/StatelessWidget/Tab/desc_de_DE.json | 21 - .../lib/StatelessWidget/Tab/desc_en_US.json | 21 - .../lib/StatelessWidget/Tab/desc_es_ES.json | 21 - .../lib/StatelessWidget/Tab/desc_fr_FR.json | 21 - .../lib/StatelessWidget/Tab/desc_it_IT.json | 21 - .../lib/StatelessWidget/Tab/desc_ja_JP.json | 21 - .../lib/StatelessWidget/Tab/desc_ko_KR.json | 21 - .../lib/StatelessWidget/Tab/desc_pt_PT.json | 21 - .../lib/StatelessWidget/Tab/desc_ru_RU.json | 21 - .../lib/StatelessWidget/Tab/desc_zh-CN.json | 21 - .../lib/StatelessWidget/Tab/node1_base.dart | 30 - .../StatelessWidget/TabBar/desc_de_DE.json | 37 - .../StatelessWidget/TabBar/desc_en_US.json | 37 - .../StatelessWidget/TabBar/desc_es_ES.json | 37 - .../StatelessWidget/TabBar/desc_fr_FR.json | 37 - .../StatelessWidget/TabBar/desc_it_IT.json | 37 - .../StatelessWidget/TabBar/desc_ja_JP.json | 37 - .../StatelessWidget/TabBar/desc_ko_KR.json | 37 - .../StatelessWidget/TabBar/desc_pt_PT.json | 37 - .../StatelessWidget/TabBar/desc_ru_RU.json | 37 - .../StatelessWidget/TabBar/desc_zh-CN.json | 37 - .../StatelessWidget/TabBar/node1_base.dart | 46 - .../TabBar/node2_noShadow.dart | 52 - .../TabPageSelector/desc_de_DE.json | 24 - .../TabPageSelector/desc_en_US.json | 24 - .../TabPageSelector/desc_es_ES.json | 24 - .../TabPageSelector/desc_fr_FR.json | 24 - .../TabPageSelector/desc_it_IT.json | 24 - .../TabPageSelector/desc_ja_JP.json | 24 - .../TabPageSelector/desc_ko_KR.json | 24 - .../TabPageSelector/desc_pt_PT.json | 24 - .../TabPageSelector/desc_ru_RU.json | 24 - .../TabPageSelector/desc_zh-CN.json | 24 - .../TabPageSelector/node1_base.dart | 64 - .../TabPageSelectorIndicator/desc_de_DE.json | 20 - .../TabPageSelectorIndicator/desc_en_US.json | 20 - .../TabPageSelectorIndicator/desc_es_ES.json | 20 - .../TabPageSelectorIndicator/desc_fr_FR.json | 20 - .../TabPageSelectorIndicator/desc_it_IT.json | 20 - .../TabPageSelectorIndicator/desc_ja_JP.json | 20 - .../TabPageSelectorIndicator/desc_ko_KR.json | 20 - .../TabPageSelectorIndicator/desc_pt_PT.json | 20 - .../TabPageSelectorIndicator/desc_ru_RU.json | 20 - .../TabPageSelectorIndicator/desc_zh-CN.json | 20 - .../TabPageSelectorIndicator/node1_base.dart | 47 - .../lib/StatelessWidget/Text/desc_de_DE.json | 72 - .../lib/StatelessWidget/Text/desc_en_US.json | 72 - .../lib/StatelessWidget/Text/desc_es_ES.json | 72 - .../lib/StatelessWidget/Text/desc_fr_FR.json | 72 - .../lib/StatelessWidget/Text/desc_it_IT.json | 72 - .../lib/StatelessWidget/Text/desc_ja_JP.json | 72 - .../lib/StatelessWidget/Text/desc_ko_KR.json | 72 - .../lib/StatelessWidget/Text/desc_pt_PT.json | 72 - .../lib/StatelessWidget/Text/desc_ru_RU.json | 72 - .../lib/StatelessWidget/Text/desc_zh-CN.json | 72 - .../lib/StatelessWidget/Text/node1.dart | 25 - .../lib/StatelessWidget/Text/node2.dart | 21 - .../Text/node3_decoration.dart | 25 - .../StatelessWidget/Text/node4_textAlign.dart | 27 - .../Text/node5_textDirection.dart | 29 - .../StatelessWidget/Text/node6_softWrap.dart | 28 - .../lib/StatelessWidget/Theme/desc_de_DE.json | 29 - .../lib/StatelessWidget/Theme/desc_en_US.json | 29 - .../lib/StatelessWidget/Theme/desc_es_ES.json | 29 - .../lib/StatelessWidget/Theme/desc_fr_FR.json | 29 - .../lib/StatelessWidget/Theme/desc_it_IT.json | 29 - .../lib/StatelessWidget/Theme/desc_ja_JP.json | 29 - .../lib/StatelessWidget/Theme/desc_ko_KR.json | 29 - .../lib/StatelessWidget/Theme/desc_pt_PT.json | 29 - .../lib/StatelessWidget/Theme/desc_ru_RU.json | 29 - .../lib/StatelessWidget/Theme/desc_zh-CN.json | 29 - .../lib/StatelessWidget/Theme/node1_base.dart | 54 - .../lib/StatelessWidget/Theme/node2_use.dart | 43 - .../lib/StatelessWidget/Title/desc_de_DE.json | 20 - .../lib/StatelessWidget/Title/desc_en_US.json | 20 - .../lib/StatelessWidget/Title/desc_es_ES.json | 20 - .../lib/StatelessWidget/Title/desc_fr_FR.json | 20 - .../lib/StatelessWidget/Title/desc_it_IT.json | 20 - .../lib/StatelessWidget/Title/desc_ja_JP.json | 20 - .../lib/StatelessWidget/Title/desc_ko_KR.json | 20 - .../lib/StatelessWidget/Title/desc_pt_PT.json | 20 - .../lib/StatelessWidget/Title/desc_ru_RU.json | 20 - .../lib/StatelessWidget/Title/desc_zh-CN.json | 20 - .../lib/StatelessWidget/Title/node1_base.dart | 19 - .../ToggleButtons/desc_de_DE.json | 43 - .../ToggleButtons/desc_en_US.json | 43 - .../ToggleButtons/desc_es_ES.json | 43 - .../ToggleButtons/desc_fr_FR.json | 43 - .../ToggleButtons/desc_it_IT.json | 43 - .../ToggleButtons/desc_ja_JP.json | 43 - .../ToggleButtons/desc_ko_KR.json | 43 - .../ToggleButtons/desc_pt_PT.json | 43 - .../ToggleButtons/desc_ru_RU.json | 43 - .../ToggleButtons/desc_zh-CN.json | 43 - .../ToggleButtons/node1_single.dart | 33 - .../ToggleButtons/node2_color.dart | 40 - .../ToggleButtons/node3_multi.dart | 38 - .../UserAccountsDrawerHeader/desc_de_DE.json | 31 - .../UserAccountsDrawerHeader/desc_en_US.json | 31 - .../UserAccountsDrawerHeader/desc_es_ES.json | 31 - .../UserAccountsDrawerHeader/desc_fr_FR.json | 31 - .../UserAccountsDrawerHeader/desc_it_IT.json | 31 - .../UserAccountsDrawerHeader/desc_ja_JP.json | 31 - .../UserAccountsDrawerHeader/desc_ko_KR.json | 31 - .../UserAccountsDrawerHeader/desc_pt_PT.json | 31 - .../UserAccountsDrawerHeader/desc_ru_RU.json | 31 - .../UserAccountsDrawerHeader/desc_zh-CN.json | 31 - .../UserAccountsDrawerHeader/node1_base.dart | 51 - .../UserAccountsDrawerHeader/node2_pro.dart | 59 - .../VerticalDivider/desc_de_DE.json | 31 - .../VerticalDivider/desc_en_US.json | 31 - .../VerticalDivider/desc_es_ES.json | 31 - .../VerticalDivider/desc_fr_FR.json | 31 - .../VerticalDivider/desc_it_IT.json | 31 - .../VerticalDivider/desc_ja_JP.json | 31 - .../VerticalDivider/desc_ko_KR.json | 31 - .../VerticalDivider/desc_pt_PT.json | 31 - .../VerticalDivider/desc_ru_RU.json | 31 - .../VerticalDivider/desc_zh-CN.json | 31 - .../VerticalDivider/node1_base.dart | 27 - .../VerticalDivider/node2_height.dart | 34 - .../Visibility/desc_de_DE.json | 27 - .../Visibility/desc_en_US.json | 27 - .../Visibility/desc_es_ES.json | 27 - .../Visibility/desc_fr_FR.json | 27 - .../Visibility/desc_it_IT.json | 27 - .../Visibility/desc_ja_JP.json | 27 - .../Visibility/desc_ko_KR.json | 27 - .../Visibility/desc_pt_PT.json | 27 - .../Visibility/desc_ru_RU.json | 27 - .../Visibility/desc_zh-CN.json | 27 - .../Visibility/node1_base.dart | 50 - .../Visibility/node2_replacement.dart | 56 - .../lib/exp/MultiChildRenderObjectWidget.dart | 28 - .../widget_system/widgets/lib/exp/Other.dart | 16 - .../widgets/lib/exp/ProxyWidget.dart | 38 - .../exp/SingleChildRenderObjectWidget.dart | 76 - .../widget_system/widgets/lib/exp/Sliver.dart | 37 - .../widgets/lib/exp/StatefulWidget.dart | 204 -- .../widgets/lib/exp/StatelessWidget.dart | 213 -- .../widgets/lib/node_display_map.dart | 516 --- .../widgets/lib/utils/color_utils.dart | 75 - .../widgets/lib/utils/dialog_about.dart | 57 - .../widgets/lib/utils/pather.dart | 25 - .../widget_system/widgets/lib/widgets.dart | 3 - modules/widget_system/widgets/pubspec.yaml | 50 - .../widgets/test/widgets_test.dart | 12 - pubspec.lock | 8 + pubspec.yaml | 1 - 5174 files changed, 10 insertions(+), 129899 deletions(-) delete mode 100644 modules/widget_system/widgets/.gitignore delete mode 100644 modules/widget_system/widgets/.metadata delete mode 100644 modules/widget_system/widgets/CHANGELOG.md delete mode 100644 modules/widget_system/widgets/LICENSE delete mode 100644 modules/widget_system/widgets/README.md delete mode 100644 modules/widget_system/widgets/analysis_options.yaml delete mode 100644 modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Actions/Actions_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Actions/Actions_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Align/Align_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Align/Align_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AppBar/AppBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AppBar/AppBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackButton/BackButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackButton/BackButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Badge/Badge_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Badge/Badge_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Banner/Banner_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Banner/Banner_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Baseline/Baseline_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Baseline/Baseline_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Builder/Builder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Builder/Builder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Card/Card_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Card/Card_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Center/Center_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Center/Center_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Chip/Chip_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Chip/Chip_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Column/Column_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Column/Column_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Container/Container_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Container/Container_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DataTable/DataTable_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DataTable/DataTable_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Dialog/Dialog_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Dialog/Dialog_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Directionality/Directionality_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Directionality/Directionality_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Divider/Divider_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Divider/Divider_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Draggable/Draggable_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Draggable/Draggable_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Drawer/Drawer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Drawer/Drawer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/EditableText/EditableText_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/EditableText/EditableText_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Expanded/Expanded_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Expanded/Expanded_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Expansible/Expansible_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Expansible/Expansible_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Flex/Flex_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Flex/Flex_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Flexible/Flexible_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Flexible/Flexible_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Flow/Flow_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Flow/Flow_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Focus/Focus_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Focus/Focus_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Form/Form_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Form/Form_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FormField/FormField_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FormField/FormField_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GridTile/GridTile_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GridTile/GridTile_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GridView/GridView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GridView/GridView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Hero/Hero_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Hero/Hero_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Icon/Icon_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Icon/Icon_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IconButton/IconButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IconButton/IconButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Image/Image_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Image/Image_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Ink/Ink_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Ink/Ink_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InkWell/InkWell_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InkWell/InkWell_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InputChip/InputChip_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InputChip/InputChip_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListBody/ListBody_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListBody/ListBody_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListTile/ListTile_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListTile/ListTile_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListView/ListView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListView/ListView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Listener/Listener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Listener/Listener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Localizations/Localizations_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Localizations/Localizations_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Material/Material_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Material/Material_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MetaData/MetaData_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MetaData/MetaData_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Navigator/Navigator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Navigator/Navigator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Offstage/Offstage_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Offstage/Offstage_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Opacity/Opacity_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Opacity/Opacity_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Overlay/Overlay_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Overlay/Overlay_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Padding/Padding_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Padding/Padding_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PageView/PageView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PageView/PageView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopScope/PopScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopScope/PopScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Positioned/Positioned_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Positioned/Positioned_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Radio/Radio_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Radio/Radio_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawChip/RawChip_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawChip/RawChip_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawImage/RawImage_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawImage/RawImage_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawView/RawView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawView/RawView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RichText/RichText_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RichText/RichText_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Router/Router_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Router/Router_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Row/Row_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Row/Row_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Semantics/Semantics_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Semantics/Semantics_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Slider/Slider_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Slider/Slider_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverList/SliverList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverList/SliverList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Spacer/Spacer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Spacer/Spacer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Stack/Stack_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Stack/Stack_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Stepper/Stepper_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Stepper/Stepper_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Switch/Switch_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Switch/Switch_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Tab/Tab_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Tab/Tab_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabBar/TabBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabBar/TabBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Table/Table_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Table/Table_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TableCell/TableCell_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TableCell/TableCell_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Text/Text_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Text/Text_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextButton/TextButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextButton/TextButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextField/TextField_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextField/TextField_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Texture/Texture_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Texture/Texture_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Theme/Theme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Theme/Theme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Title/Title_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Title/Title_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Transform/Transform_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Transform/Transform_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/View/View_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/View/View_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Viewport/Viewport_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Viewport/Viewport_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Visibility/Visibility_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Visibility/Visibility_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Wrap/Wrap_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Wrap/Wrap_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/translation_plan.md delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/node_01.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/node_01.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_01.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_02.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_03.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_04.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_05.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/node_01.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/node_02.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/node2_widget.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/node2_positioned.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node2_alignment.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node3_crossAxisAlignment.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node4_textDirection.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node5_verticalDirection.dart delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/node2_perspective.dart delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/node3_magnifier.dart delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/node4_opacity.dart delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/node1.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/node2_use.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/node2_diy.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/node2_other.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/node1.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/node1_clock.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/node2_bezier.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node2_image.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node3_border.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node4_shape.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node5_line.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node6_flutterLogo.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node1_blur.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node2_color.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node3_matrix.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node2_fit.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node3_expend.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node1_all.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node2_only.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node3_symmetric.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/main.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/node2_save.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/node1_radial.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/node2_linear.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/node1.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/node1.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/matrix4_shower.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node1_skew.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node2_translation.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node3_scale.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node4_rotate.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node5_perspective.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/zz_node_op.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/node1.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_01.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_02.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_03.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/node1.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/node1.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/node1.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/node1.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/node2_curve.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/node2_tab.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/node2_page.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/node2.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/node2_tristate.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node2.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node3.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node2.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node3.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/node2_color.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/node2_style.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/node2_diy.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/toly_date_picker.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/node2_direction.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/node2_data.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/node3_use.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/node2_style.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node2.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node3.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/node2_style.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/node2.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/node2.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/node3.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/node2_fit.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/node3_alignment.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/node4_colorBlendMode.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/node5_repeat.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/node6_centerSlice.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/node2_image.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/node2_color.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/node2_color.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node2_constrained.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node3_controller.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/node2_shape.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node2_extend.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node3_dark.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/node2_style.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/node2_direction.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/node3_controller.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/node1_press.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/node2_select.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/node2_shape.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/node2_direction.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/node2_align.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/node2_lable.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/node2_type.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/node2_image.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/node2_style.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/node2_cursor.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/node3_decoration.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/node2_decoration.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/node2_type.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/node_1.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/node_2.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/node_3.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/node2_padding.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/node2_shape.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node2_select.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node3_dense.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/node2_color.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/node3_delete.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/node2_child.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/node3_alignment.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/node4_decoration.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/node5_transform.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/node6_constraints.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/no_node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/node2_use.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/node2_operation.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/node2_height.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node2_mini.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node3_shape.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/node2_style.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node2_tap.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node3_pan.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/node2_divisions.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/node2_direction.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/node3_extend.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/node4_builder.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/node2_diy.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/node2_select.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/node2_select.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/node3_dense.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/node2_direction.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/node3_builder.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/node4_separated.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/node1_one_btn.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/node2_two_btn.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node2_onLongPress.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node3_shape.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/node2_update.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/node2_fallback.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/node2_adapter.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/node2_dense.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/node2_shape.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/node2_direction.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/node2_flex.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node2_select.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node3_dense.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/node2_noShadow.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/node2.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/node3_decoration.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/node4_textAlign.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/node5_textDirection.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/node6_softWrap.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/node2_use.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node1_single.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node2_color.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node3_multi.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/node2_pro.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/node2_height.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/node2_replacement.dart delete mode 100644 modules/widget_system/widgets/lib/exp/MultiChildRenderObjectWidget.dart delete mode 100644 modules/widget_system/widgets/lib/exp/Other.dart delete mode 100644 modules/widget_system/widgets/lib/exp/ProxyWidget.dart delete mode 100644 modules/widget_system/widgets/lib/exp/SingleChildRenderObjectWidget.dart delete mode 100644 modules/widget_system/widgets/lib/exp/Sliver.dart delete mode 100644 modules/widget_system/widgets/lib/exp/StatefulWidget.dart delete mode 100644 modules/widget_system/widgets/lib/exp/StatelessWidget.dart delete mode 100644 modules/widget_system/widgets/lib/node_display_map.dart delete mode 100644 modules/widget_system/widgets/lib/utils/color_utils.dart delete mode 100644 modules/widget_system/widgets/lib/utils/dialog_about.dart delete mode 100644 modules/widget_system/widgets/lib/utils/pather.dart delete mode 100644 modules/widget_system/widgets/lib/widgets.dart delete mode 100644 modules/widget_system/widgets/pubspec.yaml delete mode 100644 modules/widget_system/widgets/test/widgets_test.dart diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_page.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_page.dart index c9c97f3f9..de2cd9b29 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_page.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_page.dart @@ -5,6 +5,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:l10n/l10n.dart'; +import 'package:unit_widgets_display/unit_widgets_display.dart'; import 'package:widget_repository/widget_repository.dart'; import '../../desk_ui/widget_detail/link_widget_buttons.dart'; @@ -14,7 +15,6 @@ import 'package:widget_module/blocs/blocs.dart'; import 'category_end_drawer.dart'; import 'widget_detail_bar.dart'; import 'widget_detail_panel.dart'; -import 'package:widgets/widgets.dart'; import 'package:tolyui/tolyui.dart'; // 用于组件详情不需要在一开始就加载 diff --git a/modules/widget_system/widget_module/pubspec.yaml b/modules/widget_system/widget_module/pubspec.yaml index 63ee4db3a..572b433cd 100644 --- a/modules/widget_system/widget_module/pubspec.yaml +++ b/modules/widget_system/widget_module/pubspec.yaml @@ -11,6 +11,7 @@ resolution: workspace dependencies: flutter: sdk: flutter + unit_widgets_display: ^0.0.1 widget_repository: path: ../widget_repository diff --git a/modules/widget_system/widgets/.gitignore b/modules/widget_system/widgets/.gitignore deleted file mode 100644 index a17a495d3..000000000 --- a/modules/widget_system/widgets/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. -/pubspec.lock -**/doc/api/ -.dart_tool/ -.packages -build/ -example/ \ No newline at end of file diff --git a/modules/widget_system/widgets/.metadata b/modules/widget_system/widgets/.metadata deleted file mode 100644 index 541c2f65c..000000000 --- a/modules/widget_system/widgets/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: 135454af32477f815a7525073027a3ff9eff1bfd - channel: stable - -project_type: package diff --git a/modules/widget_system/widgets/CHANGELOG.md b/modules/widget_system/widgets/CHANGELOG.md deleted file mode 100644 index 41cc7d819..000000000 --- a/modules/widget_system/widgets/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.1 - -* TODO: Describe initial release. diff --git a/modules/widget_system/widgets/LICENSE b/modules/widget_system/widgets/LICENSE deleted file mode 100644 index ba75c69f7..000000000 --- a/modules/widget_system/widgets/LICENSE +++ /dev/null @@ -1 +0,0 @@ -TODO: Add your license here. diff --git a/modules/widget_system/widgets/README.md b/modules/widget_system/widgets/README.md deleted file mode 100644 index 02fe8ecab..000000000 --- a/modules/widget_system/widgets/README.md +++ /dev/null @@ -1,39 +0,0 @@ - - -TODO: Put a short description of the package here that helps potential users -know whether this package might be useful for them. - -## Features - -TODO: List what your package can do. Maybe include images, gifs, or videos. - -## Getting started - -TODO: List prerequisites and provide or point to information on how to -start using the package. - -## Usage - -TODO: Include short and useful examples for package users. Add longer examples -to `/example` folder. - -```dart -const like = 'sample'; -``` - -## Additional information - -TODO: Tell users more about the package: where to find more information, how to -contribute to the package, how to file issues, what response they can expect -from the package authors, and more. diff --git a/modules/widget_system/widgets/analysis_options.yaml b/modules/widget_system/widgets/analysis_options.yaml deleted file mode 100644 index a5744c1cf..000000000 --- a/modules/widget_system/widgets/analysis_options.yaml +++ /dev/null @@ -1,4 +0,0 @@ -include: package:flutter_lints/flutter.yaml - -# Additional information about this file can be found at -# https://dart.dev/guides/language/analysis-options diff --git a/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_en-US.json deleted file mode 100644 index f882976b4..000000000 --- a/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AboutDialog","path":"/src/material/about.dart","parents":["StatelessWidget","Widget"],"desc":" An about box. This is a dialog box with the application's icon, name, version number, and copyright, plus a button to show licenses for software used by the application.","fields":[{"name":"applicationName","type":"String?","desc":"The name of the application."},{"name":"applicationVersion","type":"String?","desc":"The version of this build of the application."},{"name":"applicationIcon","type":"Widget?","desc":"The icon to show next to the application name."},{"name":"applicationLegalese","type":"String?","desc":"A string to show in small print."},{"name":"children","type":"List?","desc":"Widgets to add to the dialog box after the name, version, and legalese."}],"id":130,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AboutDialog","desc":["【applicationIcon】: Top-left icon 【Widget】","【applicationVersion】: Version number 【String】","【applicationName】: Application name 【String】","【applicationLegalese】: Application legal terms 【String】","【children】: Sub-component list 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_zh-CN.json deleted file mode 100644 index 60dcf9681..000000000 --- a/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AboutDialog","path":"/src/material/about.dart","parents":["StatelessWidget","Widget"],"desc":"关于对话框。这是一个包含应用程序图标、名称、版本号和版权信息的对话框,还有一个按钮用于显示应用程序使用的软件许可证。","fields":[{"name":"applicationName","type":"String?","desc":"应用程序的名称。"},{"name":"applicationVersion","type":"String?","desc":"此应用程序构建的版本。"},{"name":"applicationIcon","type":"Widget?","desc":"显示在应用程序名称旁边的图标。"},{"name":"applicationLegalese","type":"String?","desc":"以小字体显示的字符串。"},{"name":"children","type":"List?","desc":"在名称、版本和法律声明之后添加到对话框的小部件。"}],"id":130,"localName":"关于对话框","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AboutDialog基本使用","desc":["【applicationIcon】 : 左上图标 【Widget】","【applicationVersion】 : 版本号 【String】","【applicationName】 : 应用名 【String】","【applicationLegalese】 : 应用律术 【String】","【children】 : 子组件列表 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_en-US.json deleted file mode 100644 index d96a816d0..000000000 --- a/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AboutListTile","path":"/src/material/about.dart","parents":["StatelessWidget","Widget"],"desc":" A [ListTile] that shows an about box.","fields":[{"name":"icon","type":"Widget?","desc":"The icon to show for this drawer item."},{"name":"child","type":"Widget?","desc":"The label to show on this drawer item."},{"name":"applicationName","type":"String?","desc":"The name of the application."},{"name":"applicationVersion","type":"String?","desc":"The version of this build of the application."},{"name":"applicationIcon","type":"Widget?","desc":"The icon to show next to the application name in the [AboutDialog]."},{"name":"applicationLegalese","type":"String?","desc":"A string to show in small print in the [AboutDialog]."},{"name":"aboutBoxChildren","type":"List?","desc":"Widgets to add to the [AboutDialog] after the name, version, and legalese."},{"name":"dense","type":"bool?","desc":"Whether this list tile is part of a vertically dense list."}],"id":193,"lever":3,"family":0,"linkIds":[130,145],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AboutListTile","desc":["【icon】 : Left icon 【Widget】","【applicationIcon】 : Top-left icon 【Widget】","【applicationVersion】 : Version number 【String】","【applicationName】 : Application name 【String】","【applicationLegalese】 : Application legalese 【String】","【aboutBoxChildren】 : Dialog content components 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_zh-CN.json deleted file mode 100644 index 452c96015..000000000 --- a/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AboutListTile","path":"/src/material/about.dart","parents":["StatelessWidget","Widget"],"desc":"显示关于框的 [ListTile]。","fields":[{"name":"icon","type":"Widget?","desc":"为此抽屉项显示的图标。"},{"name":"child","type":"Widget?","desc":"在此抽屉项上显示的标签。"},{"name":"applicationName","type":"String?","desc":"应用程序的名称。"},{"name":"applicationVersion","type":"String?","desc":"应用程序此构建的版本。"},{"name":"applicationIcon","type":"Widget?","desc":"在 [AboutDialog] 中应用程序名称旁边显示的图标。"},{"name":"applicationLegalese","type":"String?","desc":"在 [AboutDialog] 中以小字体显示的字符串。"},{"name":"aboutBoxChildren","type":"List?","desc":"在名称、版本和法律声明之后添加到 [AboutDialog] 的小部件。"},{"name":"dense","type":"bool?","desc":"此列表瓦片是否是垂直密集列表的一部分。"}],"id":193,"localName":"关于应用条目","lever":3,"family":0,"linkIds":[130,145],"nodes":[{"file":"node1_base.dart","name":"AboutListTile基本使用","desc":["【icon】 : 左图标 【Widget】","【applicationIcon】 : 左上图标 【Widget】","【applicationVersion】 : 版本号 【String】","【applicationName】 : 应用名 【String】","【applicationLegalese】 : 应用律术 【String】","【aboutBoxChildren】 : 弹框内容组件 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_en-US.json b/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_en-US.json deleted file mode 100644 index d35364063..000000000 --- a/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AbsorbPointer","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that absorbs pointers during hit testing.","fields":[{"name":"absorbing","type":"bool","required":true,"desc":"Whether this widget absorbs pointers during hit testing."},{"name":"ignoringSemantics","type":"bool?","desc":"Whether the semantics of this render object is ignored when compiling the semantics tree."}],"id":295,"lever":4,"family":2,"linkIds":[146,149,150,292],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AbsorbPointer","desc":["【child】: Child component 【Widget】","【absorbing】: Whether to absorb events 【bool】","As shown below, when the Switch is selected, absorbing is true, and the button event will be absorbed and cannot be clicked."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_zh-CN.json deleted file mode 100644 index 79bc70fc3..000000000 --- a/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AbsorbPointer","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在命中测试期间吸收指针的小部件。","fields":[{"name":"absorbing","type":"bool","required":true,"desc":"此小部件是否在命中测试期间吸收指针。"},{"name":"ignoringSemantics","type":"bool?","desc":"编译语义树时是否忽略此渲染对象的语义。"}],"id":295,"localName":"吸收点击","lever":4,"family":2,"linkIds":[146,149,150,292],"nodes":[{"file":"node1_base.dart","name":"AbsorbPointer基本使用","desc":["【child】 : 孩子组件 【Widget】","【absorbing】 : 是否吸收事件 【bool】","如下,Switch选中时absorbing为true,按钮事件将被吸收,无法点击。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_en-US.json deleted file mode 100644 index b9564411e..000000000 --- a/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AbstractLayoutBuilder","path":"/src/widgets/layout_builder.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" An abstract superclass for widgets that defer their building until layout.","fields":[],"id":286,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_zh-CN.json deleted file mode 100644 index bbaa23dbe..000000000 --- a/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AbstractLayoutBuilder","path":"/src/widgets/layout_builder.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"将其构建推迟到布局的小部件的抽象超类。","fields":[],"id":286,"localName":"AbstractLayoutBuilder","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_en-US.json b/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_en-US.json deleted file mode 100644 index 538b3ef68..000000000 --- a/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ActionChip","path":"/src/material/action_chip.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design action chip.","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"disabledColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":13,"lever":3,"family":0,"linkIds":[11,12,14,15,153],"nodes":[{"file":"node1_base.dart","name":"The normal performance of ActionChip is as follows","desc":["【onPressed】: Click event 【Function】","【pressElevation】: Shadow depth when pressed 【double】","Other properties are the same as the Chip component, no right component."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_zh-CN.json deleted file mode 100644 index 64f3b1f1c..000000000 --- a/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ActionChip","path":"/src/material/action_chip.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 操作芯片。","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"disabledColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":13,"localName":"事件小条","lever":3,"family":0,"linkIds":[11,12,14,15,153],"nodes":[{"file":"node1_base.dart","name":"ActionChip的普通表现如下","desc":["【onPressed】: 点击事件 【Function】","【pressElevation】: 按下时影深 【double】","其他属性同Chip组件,无右侧组件。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_en-US.json deleted file mode 100644 index 4f5482883..000000000 --- a/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ActionIconTheme","path":"/src/material/action_icons_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that overrides the default icon of [BackButtonIcon], [CloseButtonIcon], [DrawerButtonIcon], and [EndDrawerButtonIcon] in this widget's subtree.","fields":[{"name":"data","type":"ActionIconThemeData","required":true,"desc":"Specifies the default icon overrides for descendant [BackButtonIcon], [CloseButtonIcon], [DrawerButtonIcon], and [EndDrawerButtonIcon] widgets."}],"id":300,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_zh-CN.json deleted file mode 100644 index 4c5b81eae..000000000 --- a/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ActionIconTheme","path":"/src/material/action_icons_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖此小部件子树中 [BackButtonIcon]、[CloseButtonIcon]、[DrawerButtonIcon] 和 [EndDrawerButtonIcon] 的默认图标的继承小部件。","fields":[{"name":"data","type":"ActionIconThemeData","required":true,"desc":"指定后代 [BackButtonIcon]、[CloseButtonIcon]、[DrawerButtonIcon] 和 [EndDrawerButtonIcon] 小部件的默认图标覆盖。"}],"id":300,"localName":"ActionIconTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_en-US.json b/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_en-US.json deleted file mode 100644 index 41d6a5f82..000000000 --- a/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ActionListener","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":" A helper widget for making sure that listeners on an action are removed properly.","fields":[{"name":"listener","type":"ActionListenerCallback","required":true,"desc":"The [ActionListenerCallback] callback to register with the [action]."},{"name":"action","type":"Action","required":true,"desc":"The [Action] that the callback will be registered with."},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":310,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_zh-CN.json deleted file mode 100644 index 0d540e6de..000000000 --- a/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ActionListener","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":"确保正确移除操作上的监听器的辅助小部件。","fields":[{"name":"listener","type":"ActionListenerCallback","required":true,"desc":"要向 [action] 注册的 [ActionListenerCallback] 回调。"},{"name":"action","type":"Action","required":true,"desc":"回调将注册到的 [Action]。"},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":310,"localName":"ActionListener","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Actions/Actions_en-US.json b/modules/widget_system/widgets/doc/widgets/Actions/Actions_en-US.json deleted file mode 100644 index 0cba06ce2..000000000 --- a/modules/widget_system/widgets/doc/widgets/Actions/Actions_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Actions","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that maps [Intent]s to [Action]s to be used by its descendants when invoking an [Action].","fields":[{"name":"dispatcher","type":"ActionDispatcher?","desc":"The [ActionDispatcher] object that invokes actions."},{"name":"actions","type":"Map>","required":true,"desc":"{@template flutter.widgets.actions.actions} A map of [Intent] keys to [Action] objects that defines which actions this widget knows about."},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":311,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Actions/Actions_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Actions/Actions_zh-CN.json deleted file mode 100644 index d7a99a048..000000000 --- a/modules/widget_system/widgets/doc/widgets/Actions/Actions_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Actions","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":"将 [Intent] 映射到 [Action] 的小部件,供其后代在调用 [Action] 时使用。","fields":[{"name":"dispatcher","type":"ActionDispatcher?","desc":"调用操作的 [ActionDispatcher] 对象。"},{"name":"actions","type":"Map>","required":true,"desc":"{@template flutter.widgets.actions.actions} [Intent] 键到 [Action] 对象的映射,定义此小部件了解的操作。"},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":311,"localName":"Actions","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_en-US.json deleted file mode 100644 index 64ba467e5..000000000 --- a/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AdaptiveTextSelectionToolbar","path":"/src/material/adaptive_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" The default context menu for text selection for the current platform.","fields":[{"name":"buttonItems","type":"List?","desc":"{@template flutter.material.AdaptiveTextSelectionToolbar.buttonItems} The [ContextMenuButtonItem]s that will be turned into the correct button widgets for the current platform. {@endtemplate}"},{"name":"children","type":"List?","desc":"The children of the toolbar, typically buttons."},{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"{@template flutter.material.AdaptiveTextSelectionToolbar.anchors} The location on which to anchor the menu. {@endtemplate}"}],"id":318,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_zh-CN.json deleted file mode 100644 index b1ba8d84c..000000000 --- a/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AdaptiveTextSelectionToolbar","path":"/src/material/adaptive_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"当前平台文本选择的默认上下文菜单。","fields":[{"name":"buttonItems","type":"List?","desc":"{@template flutter.material.AdaptiveTextSelectionToolbar.buttonItems} 将转换为当前平台正确按钮小部件的 [ContextMenuButtonItem]。{@endtemplate}"},{"name":"children","type":"List?","desc":"工具栏的子项,通常是按钮。"},{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"{@template flutter.material.AdaptiveTextSelectionToolbar.anchors} 锚定菜单的位置。{@endtemplate}"}],"id":318,"localName":"AdaptiveTextSelectionToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_en-US.json deleted file mode 100644 index 71c27d760..000000000 --- a/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AlertDialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design alert dialog.","fields":[{"name":"icon","type":"Widget?","desc":"An optional icon to display at the top of the dialog."},{"name":"iconColor","type":"Color?","desc":"Color for the [Icon] in the [icon] of this [AlertDialog]."},{"name":"iconPadding","type":"EdgeInsetsGeometry?","desc":"Padding around the [icon]."},{"name":"title","type":"Widget?","desc":"The (optional) title of the dialog is displayed in a large font at the top of the dialog, below the (optional) [icon]."},{"name":"titlePadding","type":"EdgeInsetsGeometry?","desc":"Padding around the title."},{"name":"titleTextStyle","type":"TextStyle?","desc":"Style for the text in the [title] of this [AlertDialog]."},{"name":"content","type":"Widget?","desc":"The (optional) content of the dialog is displayed in the center of the dialog in a lighter font."},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"Padding around the content."},{"name":"contentTextStyle","type":"TextStyle?","desc":"Style for the text in the [content] of this [AlertDialog]."},{"name":"actions","type":"List?","desc":"The (optional) set of actions that are displayed at the bottom of the dialog with an [OverflowBar]."},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"Padding around the set of [actions] at the bottom of the dialog."},{"name":"actionsAlignment","type":"MainAxisAlignment?","desc":"Defines the horizontal layout of the [actions] according to the same rules as for [Row.mainAxisAlignment]."},{"name":"actionsOverflowAlignment","type":"OverflowBarAlignment?","desc":"The horizontal alignment of [actions] within the vertical \"overflow\" layout."},{"name":"actionsOverflowDirection","type":"VerticalDirection?","desc":"The vertical direction of [actions] if the children overflow horizontally."},{"name":"actionsOverflowButtonSpacing","type":"double?","desc":"The spacing between [actions] when the [OverflowBar] switches to a column layout because the actions don't fit horizontally."},{"name":"buttonPadding","type":"EdgeInsetsGeometry?","desc":"The padding that surrounds each button in [actions]."},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.dialog.backgroundColor}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.dialog.elevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.dialog.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.dialog.surfaceTintColor}"},{"name":"semanticLabel","type":"String?","desc":"The semantic label of the dialog used by accessibility frameworks to announce screen transitions when the dialog is opened and closed."},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@macro flutter.material.dialog.insetPadding}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.dialog.clipBehavior}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.dialog.shape}"},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@macro flutter.material.dialog.alignment}"},{"name":"scrollable","type":"bool","required":true,"desc":"Determines whether the [title] and [content] widgets are wrapped in a scrollable."}],"id":127,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AlertDialog","desc":["【title】 : Top component 【Widget】","【content】 : Content component 【Widget】","【titleTextStyle】 : Top text style 【TextStyle】","【contentTextStyle】 : Content text style 【TextStyle】","【titlePadding】 : Top padding 【EdgeInsetsGeometry】","【contentPadding】 : Content padding 【EdgeInsetsGeometry】","【actions】 : Bottom right component list 【List】","【backgroundColor】 : Background color 【Color】","【elevation】 : Elevation 【double】","【shape】 : Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_zh-CN.json deleted file mode 100644 index 681dfccc3..000000000 --- a/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AlertDialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 警告对话框。","fields":[{"name":"icon","type":"Widget?","desc":"在对话框顶部显示的可选图标。"},{"name":"iconColor","type":"Color?","desc":"此 [AlertDialog] 的 [icon] 中 [Icon] 的颜色。"},{"name":"iconPadding","type":"EdgeInsetsGeometry?","desc":"[icon] 周围的内边距。"},{"name":"title","type":"Widget?","desc":"对话框的(可选)标题以大字体显示在对话框顶部,位于(可选)[icon] 下方。"},{"name":"titlePadding","type":"EdgeInsetsGeometry?","desc":"标题周围的内边距。"},{"name":"titleTextStyle","type":"TextStyle?","desc":"此 [AlertDialog] 的 [title] 中文本的样式。"},{"name":"content","type":"Widget?","desc":"对话框的(可选)内容以较浅的字体显示在对话框中心。"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"内容周围的内边距。"},{"name":"contentTextStyle","type":"TextStyle?","desc":"此 [AlertDialog] 的 [content] 中文本的样式。"},{"name":"actions","type":"List?","desc":"显示在对话框底部的(可选)操作集合,使用 [OverflowBar]。"},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"对话框底部 [actions] 集合周围的内边距。"},{"name":"actionsAlignment","type":"MainAxisAlignment?","desc":"根据与 [Row.mainAxisAlignment] 相同的规则定义 [actions] 的水平布局。"},{"name":"actionsOverflowAlignment","type":"OverflowBarAlignment?","desc":"垂直\\"},{"name":"actionsOverflowDirection","type":"VerticalDirection?","desc":"如果子项水平溢出,[actions] 的垂直方向。"},{"name":"actionsOverflowButtonSpacing","type":"double?","desc":"当 [OverflowBar] 因操作无法水平放置而切换到列布局时,[actions] 之间的间距。"},{"name":"buttonPadding","type":"EdgeInsetsGeometry?","desc":"[actions] 中每个按钮周围的内边距。"},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.dialog.backgroundColor}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.dialog.elevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.dialog.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.dialog.surfaceTintColor}"},{"name":"semanticLabel","type":"String?","desc":"辅助功能框架用于在对话框打开和关闭时宣布屏幕转换的对话框语义标签。"},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@macro flutter.material.dialog.insetPadding}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.dialog.clipBehavior}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.dialog.shape}"},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@macro flutter.material.dialog.alignment}"},{"name":"scrollable","type":"bool","required":true,"desc":"确定 [title] 和 [content] 小部件是否包装在可滚动容器中。"}],"id":127,"localName":"弹出对话框","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AlertDialog基本使用","desc":["【title】 : 顶部组件 【Widget】","【content】 : 内容组件 【Widget】","【titleTextStyle】 : 顶部文字样式 【TextStyle】","【contentTextStyle】 : 内容文字样式 【TextStyle】","【titlePadding】 : 顶部内边距 【EdgeInsetsGeometry】","【contentPadding】 : 内容内边距 【EdgeInsetsGeometry】","【actions】 : 右下角组件列表 【List】","【backgroundColor】 : 背景色 【Color】","【elevation】 : 影深 【double】","【shape】 : 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Align/Align_en-US.json b/modules/widget_system/widgets/doc/widgets/Align/Align_en-US.json deleted file mode 100644 index 8862a8a61..000000000 --- a/modules/widget_system/widgets/doc/widgets/Align/Align_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Align","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that aligns its child within itself and optionally sizes itself based on the child's size.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the child."},{"name":"widthFactor","type":"double?","desc":"If non-null, sets its width to the child's width multiplied by this factor."},{"name":"heightFactor","type":"double?","desc":"If non-null, sets its height to the child's height multiplied by this factor."}],"id":85,"lever":5,"family":2,"linkIds":[1,86,111,120],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Align","desc":["【child】 : Child component 【Widget】","【alignment】 : Alignment method 【AlignmentGeometry】"]},{"file":"node2_other.dart","name":"Other Usages of Align","desc":["Since the Alignment object can specify the fractional position of the width and height in the parent container","Align can be used to achieve some complex layout requirements, such as changing positions according to specified mathematical equations"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Align/Align_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Align/Align_zh-CN.json deleted file mode 100644 index 042e8284b..000000000 --- a/modules/widget_system/widgets/doc/widgets/Align/Align_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Align","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"一个在自身内对齐其子项的小部件,可选择根据子项的大小调整自身大小。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何对齐子项。"},{"name":"widthFactor","type":"double?","desc":"如果非空,将其宽度设置为子项宽度乘以此因子。"},{"name":"heightFactor","type":"double?","desc":"如果非空,将其高度设置为子项高度乘以此因子。"}],"id":85,"localName":"对齐组件","lever":5,"family":2,"linkIds":[1,86,111,120],"nodes":[{"file":"node1_base.dart","name":"Align基本使用","desc":["【child】 : 孩子组件 【Widget】","【alignment】 : 对齐方式 【AlignmentGeometry】"]},{"file":"node2_other.dart","name":"Align其他用法","desc":["由于Alignment对象可指定在父容器中宽高的分率位置","可以使用Align实现一些复杂的排布需求,比如按指定的数学方程变化位置"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_en-US.json deleted file mode 100644 index 6b5904426..000000000 --- a/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AlignTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of an [Align] that animates its [Align.alignment] property.","fields":[{"name":"widthFactor","type":"double?","desc":"If non-null, the child's width factor, see [Align.widthFactor]."},{"name":"heightFactor","type":"double?","desc":"If non-null, the child's height factor, see [Align.heightFactor]."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":111,"lever":3,"family":1,"linkIds":[85,120],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AlignTransition","desc":["【child】: Child component 【Widget】","【alignment】: Alignment animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_zh-CN.json deleted file mode 100644 index 6582a505e..000000000 --- a/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AlignTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"[Align] 的动画版本,用于动画其 [Align.alignment] 属性。","fields":[{"name":"widthFactor","type":"double?","desc":"如果非空,子项的宽度因子,参见 [Align.widthFactor]。"},{"name":"heightFactor","type":"double?","desc":"如果非空,子项的高度因子,参见 [Align.heightFactor]。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":111,"localName":"对齐变换","lever":3,"family":1,"linkIds":[85,120],"nodes":[{"file":"node1_base.dart","name":"AlignTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【alignment】 : 对齐动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_en-US.json b/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_en-US.json deleted file mode 100644 index 31eeee380..000000000 --- a/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AndroidView","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":" Embeds an Android view in the Widget hierarchy.","fields":[{"name":"viewType","type":"String","required":true,"desc":"The unique identifier for Android view type to be embedded by this widget."},{"name":"onPlatformViewCreated","type":"PlatformViewCreatedCallback?","desc":"{@template flutter.widgets.AndroidView.onPlatformViewCreated} Callback to invoke after the platform view has been created."},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@template flutter.widgets.AndroidView.hitTestBehavior} How this widget should behave during hit testing."},{"name":"layoutDirection","type":"TextDirection?","desc":"{@template flutter.widgets.AndroidView.layoutDirection} The text direction to use for the embedded view."},{"name":"gestureRecognizers","type":"Set>?","desc":"Which gestures should be forwarded to the Android view."},{"name":"creationParams","type":"dynamic","required":true,"desc":"Passed as the args argument of [PlatformViewFactory#create](/javadoc/io/flutter/plugin/platform/PlatformViewFactory.html#create-android.content.Context-int-java.lang.Object-)"},{"name":"creationParamsCodec","type":"MessageCodec?","desc":"The codec used to encode `creationParams` before sending it to the platform side. It should match the codec passed to the constructor of [PlatformViewFactory](/javadoc/io/flutter/plugin/platform/PlatformViewFactory.html#PlatformViewFactory-io.flutter.plugin.common.MessageCodec-)."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":321,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_zh-CN.json deleted file mode 100644 index fe9bd286a..000000000 --- a/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AndroidView","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":"在小部件层次结构中嵌入 Android 视图。","fields":[{"name":"viewType","type":"String","required":true,"desc":"此小部件要嵌入的 Android 视图类型的唯一标识符。"},{"name":"onPlatformViewCreated","type":"PlatformViewCreatedCallback?","desc":"{@template flutter.widgets.AndroidView.onPlatformViewCreated} 平台视图创建后调用的回调。"},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@template flutter.widgets.AndroidView.hitTestBehavior} 此小部件在命中测试期间的行为方式。"},{"name":"layoutDirection","type":"TextDirection?","desc":"{@template flutter.widgets.AndroidView.layoutDirection} 嵌入视图使用的文本方向。"},{"name":"gestureRecognizers","type":"Set>?","desc":"哪些手势应转发到 Android 视图。"},{"name":"creationParams","type":"dynamic","required":true,"desc":"作为 [PlatformViewFactory#create](/javadoc/io/flutter/plugin/platform/PlatformViewFactory.html#create-android.content.Context-int-java.lang.Object-) 的 args 参数传递"},{"name":"creationParamsCodec","type":"MessageCodec?","desc":"在将 `creationParams` 发送到平台端之前用于编码的编解码器。它应与传递给 [PlatformViewFactory](/javadoc/io/flutter/plugin/platform/PlatformViewFactory.html#PlatformViewFactory-io.flutter.plugin.common.MessageCodec-) 构造函数的编解码器匹配。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":321,"localName":"AndroidView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_en-US.json b/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_en-US.json deleted file mode 100644 index 6d4b6fe73..000000000 --- a/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AndroidViewSurface","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":" Integrates an Android view with Flutter's compositor, touch, and semantics subsystems.","fields":[{"name":"controller","type":"AndroidViewController","required":true,"desc":"The controller for the platform view integrated by this [AndroidViewSurface]."},{"name":"gestureRecognizers","type":"Set>","required":true,"desc":"Which gestures should be forwarded to the PlatformView."},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":322,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_zh-CN.json deleted file mode 100644 index ca9282a74..000000000 --- a/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AndroidViewSurface","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":"将 Android 视图与 Flutter 的合成器、触摸和语义子系统集成。","fields":[{"name":"controller","type":"AndroidViewController","required":true,"desc":"此 [AndroidViewSurface] 集成的平台视图的控制器。"},{"name":"gestureRecognizers","type":"Set>","required":true,"desc":"哪些手势应转发到 PlatformView。"},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":322,"localName":"AndroidViewSurface","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_en-US.json deleted file mode 100644 index b2f9b32ae..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedAlign","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Align] which automatically transitions the child's position over a given duration whenever the given [alignment] changes.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the child."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"heightFactor","type":"double?","desc":"If non-null, sets its height to the child's height multiplied by this factor."},{"name":"widthFactor","type":"double?","desc":"If non-null, sets its width to the child's width multiplied by this factor."}],"id":120,"lever":3,"family":1,"linkIds":[85,111],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedAlign","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【alignment】: Alignment method 【AlignmentGeometry】","【curve】: Animation curve 【Duration】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_zh-CN.json deleted file mode 100644 index 1fb05311f..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedAlign","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Align] 的动画版本,当给定的 [alignment] 发生变化时,会在给定的持续时间内自动过渡子项的位置。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何对齐子项。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"heightFactor","type":"double?","desc":"如果非空,将其高度设置为子项高度乘以此因子。"},{"name":"widthFactor","type":"double?","desc":"如果非空,将其宽度设置为子项宽度乘以此因子。"}],"id":120,"localName":"对齐动画","lever":3,"family":1,"linkIds":[85,111],"nodes":[{"file":"node1_base.dart","name":"AnimatedAlign基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【alignment】 : 对齐方式 【AlignmentGeometry】","【curve】 : 动画曲线 【Duration】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_en-US.json deleted file mode 100644 index 5af52a2d5..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedBuilder","path":"/src/widgets/transitions.dart","parents":["ListenableBuilder","AnimatedWidget","StatefulWidget","Widget"],"desc":" A general-purpose widget for building animations.","fields":[],"id":228,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedBuilder Usage Example","desc":["【animation】: *Listenable object 【Listenable】","【builder】: *Component builder 【TransitionBuilder】","【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_zh-CN.json deleted file mode 100644 index 2f40262ff..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedBuilder","path":"/src/widgets/transitions.dart","parents":["ListenableBuilder","AnimatedWidget","StatefulWidget","Widget"],"desc":"用于构建动画的通用小部件。","fields":[],"id":228,"localName":"动画构造器","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedBuilder 使用案例","desc":["【animation】 : *可监听对象 【Listenable】","【builder】 : *组件构造器 【TransitionBuilder】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_en-US.json deleted file mode 100644 index 92ebd9249..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedContainer","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Container] that gradually changes its values over a period of time.","fields":[{"name":"child","type":"Widget?","desc":"The [child] contained by the container."},{"name":"alignment","type":"AlignmentGeometry?","desc":"Align the [child] within the container."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Empty space to inscribe inside the [decoration]. The [child], if any, is placed inside this padding."},{"name":"decoration","type":"Decoration?","desc":"The decoration to paint behind the [child]."},{"name":"foregroundDecoration","type":"Decoration?","desc":"The decoration to paint in front of the child."},{"name":"constraints","type":"BoxConstraints?","desc":"Additional constraints to apply to the child."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"Empty space to surround the [decoration] and [child]."},{"name":"transform","type":"Matrix4?","desc":"The transformation matrix to apply before painting the container."},{"name":"transformAlignment","type":"AlignmentGeometry?","desc":"The alignment of the origin, relative to the size of the container, if [transform] is specified."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"The clip behavior when [AnimatedContainer.decoration] is not null."}],"id":123,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedContainer","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【color】: Color 【Color】","【width】: Width 【double】","【height】: Height 【double】","【alignment】: Alignment 【AlignmentGeometry】","【decoration】: Decoration 【Decoration】","【constraints】: Constraints 【BoxConstraints】","【transform】: Transformation 【Matrix4】","【margin】: Margin 【EdgeInsetsGeometry】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_zh-CN.json deleted file mode 100644 index ecc92a1af..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedContainer","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Container] 的动画版本,在一段时间内逐渐改变其值。","fields":[{"name":"child","type":"Widget?","desc":"容器包含的 [child]。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"在容器内对齐 [child]。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在 [decoration] 内部刻画的空白空间。[child](如果有)放置在此内边距内。"},{"name":"decoration","type":"Decoration?","desc":"在 [child] 后面绘制的装饰。"},{"name":"foregroundDecoration","type":"Decoration?","desc":"在子项前面绘制的装饰。"},{"name":"constraints","type":"BoxConstraints?","desc":"应用于子项的附加约束。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕 [decoration] 和 [child] 的空白空间。"},{"name":"transform","type":"Matrix4?","desc":"在绘制容器之前应用的变换矩阵。"},{"name":"transformAlignment","type":"AlignmentGeometry?","desc":"如果指定了 [transform],相对于容器大小的原点对齐方式。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"当 [AnimatedContainer.decoration] 不为空时的裁剪行为。"}],"id":123,"localName":"容器动画","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedContainer基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【color】 : 颜色 【Color】","【width】 : 宽 【double】","【height】 : 高 【double】","【alignment】 : 对齐 【AlignmentGeometry】","【decoration】 : 装饰 【Decoration】","【constraints】 : 约束 【BoxConstraints】","【transform】 : 变化 【Matrix4】","【margin】 : 外边距 【EdgeInsetsGeometry】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_en-US.json deleted file mode 100644 index 7640d86bc..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedCrossFade","path":"/src/widgets/animated_cross_fade.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that cross-fades between two given children and animates itself between their sizes.","fields":[{"name":"firstChild","type":"Widget","required":true,"desc":"The child that is visible when [crossFadeState] is [CrossFadeState.showFirst]. It fades out when transitioning [crossFadeState] from [CrossFadeState.showFirst] to [CrossFadeState.showSecond] and vice versa."},{"name":"secondChild","type":"Widget","required":true,"desc":"The child that is visible when [crossFadeState] is [CrossFadeState.showSecond]. It fades in when transitioning [crossFadeState] from [CrossFadeState.showFirst] to [CrossFadeState.showSecond] and vice versa."},{"name":"crossFadeState","type":"CrossFadeState","required":true,"desc":"The child that will be shown when the animation has completed."},{"name":"duration","type":"Duration","required":true,"desc":"The duration of the whole orchestrated animation."},{"name":"reverseDuration","type":"Duration?","desc":"The duration of the whole orchestrated animation when running in reverse."},{"name":"firstCurve","type":"Curve","required":true,"desc":"The fade curve of the first child."},{"name":"secondCurve","type":"Curve","required":true,"desc":"The fade curve of the second child."},{"name":"sizeCurve","type":"Curve","required":true,"desc":"The curve of the animation between the two children's sizes."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How the children should be aligned while the size is animating."},{"name":"layoutBuilder","type":"AnimatedCrossFadeBuilder","required":true,"desc":"A builder that positions the [firstChild] and [secondChild] widgets."},{"name":"excludeBottomFocus","type":"bool","required":true,"desc":"When true, this is equivalent to wrapping the bottom widget with an [ExcludeFocus] widget while it is at the bottom of the cross-fade stack."}],"id":100,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedCrossFade","desc":["【firstChild】 : First Child 【Widget】","【secondChild】 : Second Child 【Widget】","【crossFadeState】 : Which to Display 【CrossFadeState】","【duration】 : Duration 【Duration】"]},{"file":"node2_curve.dart","name":"Animation Curves of AnimatedCrossFade","desc":["【firstCurve】 : First Curve 【Curve】","【secondCurve】 : Second Curve 【Curve】","【sizeCurve】 : Size Change Curve 【CrossFadeState】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_zh-CN.json deleted file mode 100644 index 0ea991a04..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedCrossFade","path":"/src/widgets/animated_cross_fade.dart","parents":["StatefulWidget","Widget"],"desc":"在两个给定子项之间交叉淡入淡出并在它们的大小之间进行动画的小部件。","fields":[{"name":"firstChild","type":"Widget","required":true,"desc":"当 [crossFadeState] 为 [CrossFadeState.showFirst] 时可见的子项。当 [crossFadeState] 从 [CrossFadeState.showFirst] 转换到 [CrossFadeState.showSecond] 时淡出,反之亦然。"},{"name":"secondChild","type":"Widget","required":true,"desc":"当 [crossFadeState] 为 [CrossFadeState.showSecond] 时可见的子项。当 [crossFadeState] 从 [CrossFadeState.showFirst] 转换到 [CrossFadeState.showSecond] 时淡入,反之亦然。"},{"name":"crossFadeState","type":"CrossFadeState","required":true,"desc":"动画完成时将显示的子项。"},{"name":"duration","type":"Duration","required":true,"desc":"整个编排动画的持续时间。"},{"name":"reverseDuration","type":"Duration?","desc":"反向运行时整个编排动画的持续时间。"},{"name":"firstCurve","type":"Curve","required":true,"desc":"第一个子项的淡入淡出曲线。"},{"name":"secondCurve","type":"Curve","required":true,"desc":"第二个子项的淡入淡出曲线。"},{"name":"sizeCurve","type":"Curve","required":true,"desc":"两个子项大小之间动画的曲线。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"在大小进行动画时子项应如何对齐。"},{"name":"layoutBuilder","type":"AnimatedCrossFadeBuilder","required":true,"desc":"定位 [firstChild] 和 [secondChild] 小部件的构建器。"},{"name":"excludeBottomFocus","type":"bool","required":true,"desc":"当为 true 时,这等同于在底部小部件位于交叉淡入淡出堆栈底部时用 [ExcludeFocus] 小部件包装它。"}],"id":100,"localName":"组件切换","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedCrossFade基本使用","desc":["【firstChild】 : 第一孩子 【Widget】","【secondChild】 : 第二孩子 【Widget】","【crossFadeState】 : 显示第几个 【CrossFadeState】","【duration】 : 时长 【Duration】"]},{"file":"node2_curve.dart","name":"AnimatedCrossFade动画曲线","desc":["【firstCurve】 : 第一曲线 【Curve】","【secondCurve】 : 第二曲线 【Curve】","【sizeCurve】 : 尺寸变化曲线 【CrossFadeState】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_en-US.json deleted file mode 100644 index 9b8af9e58..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedDefaultTextStyle","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [DefaultTextStyle] which automatically transitions the default text style (the text style to apply to descendant [Text] widgets without explicit style) over a given duration whenever the given style changes.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"style","type":"TextStyle","required":true,"desc":"The target text style."},{"name":"textAlign","type":"TextAlign?","desc":"How the text should be aligned horizontally."},{"name":"softWrap","type":"bool","required":true,"desc":"Whether the text should break at soft line breaks."},{"name":"overflow","type":"TextOverflow","required":true,"desc":"How visual overflow should be handled."},{"name":"maxLines","type":"int?","desc":"An optional maximum number of lines for the text to span, wrapping if necessary."},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"The strategy to use when calculating the width of the Text."},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"}],"id":124,"lever":3,"family":1,"linkIds":[114,324],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedDefaultTextStyle","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【textAlign】: Text alignment 【TextAlign】","【softWrap】: Whether to wrap 【bool】","【maxLines】: Maximum number of lines 【int】","【overflow】: Overflow mode 【TextOverflow】","【style】: Text style 【TextStyle】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_zh-CN.json deleted file mode 100644 index 9174d25dd..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedDefaultTextStyle","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[DefaultTextStyle] 的动画版本,当给定样式发生变化时,会在给定持续时间内自动过渡默认文本样式(应用于没有显式样式的后代 [Text] 小部件的文本样式)。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"style","type":"TextStyle","required":true,"desc":"目标文本样式。"},{"name":"textAlign","type":"TextAlign?","desc":"文本应如何水平对齐。"},{"name":"softWrap","type":"bool","required":true,"desc":"文本是否应在软换行符处换行。"},{"name":"overflow","type":"TextOverflow","required":true,"desc":"应如何处理视觉溢出。"},{"name":"maxLines","type":"int?","desc":"文本跨越的可选最大行数,必要时换行。"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"计算文本宽度时使用的策略。"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"}],"id":124,"localName":"容器动画","lever":3,"family":1,"linkIds":[114,324],"nodes":[{"file":"node1_base.dart","name":"AnimatedDefaultTextStyle基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【textAlign】 : 文字对齐方式 【TextAlign】","【softWrap】 : 是否包裹 【bool】","【maxLines】 : 最大行数 【int】","【overflow】 : 溢出模式 【TextOverflow】","【style】 : 文字样式 【TextStyle】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_en-US.json deleted file mode 100644 index c80008ea8..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedFractionallySizedBox","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [FractionallySizedBox] which automatically transitions the child's size over a given duration whenever the given [widthFactor] or [heightFactor] changes, as well as the position whenever the given [alignment] changes.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"heightFactor","type":"double?","desc":"{@macro flutter.widgets.basic.fractionallySizedBox.heightFactor}"},{"name":"widthFactor","type":"double?","desc":"{@macro flutter.widgets.basic.fractionallySizedBox.widthFactor}"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"{@macro flutter.widgets.basic.fractionallySizedBox.alignment}"}],"id":260,"lever":3,"family":1,"linkIds":[82,120,123,121],"nodes":[{"file":"node1.dart","name":"Animation Transition Effect","desc":["In this case, the heightFactor, widthFactor, and alignment parameters are modified when clicked to view the animation effect.","【child】 : Child component 【Widget】","【duration】 : Animation duration 【Duration】","【onEnd】 : Animation end callback 【Function()】","【alignment】 : Animation transformation center 【Alignment】","【curve】 : Animation curve 【Duration】","【heightFactor】 : Height factor 【double?】","【widthFactor】 : Width factor 【double?】","【turns】 : Rotation amount 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_zh-CN.json deleted file mode 100644 index 3dffd8d5c..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedFractionallySizedBox","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[FractionallySizedBox] 的动画版本,当给定的 [widthFactor] 或 [heightFactor] 发生变化时,会在给定持续时间内自动过渡子项的大小,以及当给定的 [alignment] 发生变化时过渡位置。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"heightFactor","type":"double?","desc":"{@macro flutter.widgets.basic.fractionallySizedBox.heightFactor}"},{"name":"widthFactor","type":"double?","desc":"{@macro flutter.widgets.basic.fractionallySizedBox.widthFactor}"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"{@macro flutter.widgets.basic.fractionallySizedBox.alignment}"}],"id":260,"localName":"动画分率盒","lever":3,"family":1,"linkIds":[82,120,123,121],"nodes":[{"file":"node1.dart","name":"动画过渡效果","desc":["该案例中,点击时会修改 heightFactor、widthFactor、alignment 参数,查看动画运动效果。","【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【alignment】 : 动画变换中心 【Alignment】","【curve】 : 动画曲线 【Duration】","【heightFactor】 : 高度分率 【double?】","【widthFactor】 : 宽度分率 【double?】","【turns】 : 旋转量 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_en-US.json deleted file mode 100644 index 87a68edc8..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedGrid","path":"/src/widgets/animated_scroll_view.dart","parents":["_AnimatedScrollView","StatefulWidget","Widget"],"desc":" A scrolling container that animates items when they are inserted into or removed from a grid. in a grid.","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"{@template flutter.widgets.AnimatedGrid.gridDelegate} A delegate that controls the layout of the children within the [AnimatedGrid]."}],"id":323,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_zh-CN.json deleted file mode 100644 index c77eb16ab..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedGrid","path":"/src/widgets/animated_scroll_view.dart","parents":["_AnimatedScrollView","StatefulWidget","Widget"],"desc":"一个滚动容器,当项目插入或从网格中移除时对其进行动画处理。","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"{@template flutter.widgets.AnimatedGrid.gridDelegate} 控制 [AnimatedGrid] 内子项布局的委托。"}],"id":323,"localName":"AnimatedGrid","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_en-US.json deleted file mode 100644 index c2336bb58..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedIcon","path":"/src/material/animated_icons/animated_icons.dart","parents":["StatelessWidget","Widget"],"desc":" Shows an animated icon at a given animation [progress].","fields":[{"name":"progress","type":"Animation","required":true,"desc":"The animation progress for the animated icon."},{"name":"color","type":"Color?","desc":"The color to use when drawing the icon."},{"name":"size","type":"double?","desc":"The size of the icon in logical pixels."},{"name":"icon","type":"AnimatedIconData","required":true,"desc":"The icon to display. Available icons are listed in [AnimatedIcons]."},{"name":"semanticLabel","type":"String?","desc":"Semantic label for the icon."},{"name":"textDirection","type":"TextDirection?","desc":"The text direction to use for rendering the icon."}],"id":125,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedIcon","desc":["【icon】: Animation icon data 【AnimatedIcons】","【size】: Size 【double】","【color】: Color 【Color】","【progress】: Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_zh-CN.json deleted file mode 100644 index d2c467769..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedIcon","path":"/src/material/animated_icons/animated_icons.dart","parents":["StatelessWidget","Widget"],"desc":"在给定动画 [progress] 处显示动画图标。","fields":[{"name":"progress","type":"Animation","required":true,"desc":"动画图标的动画进度。"},{"name":"color","type":"Color?","desc":"绘制图标时使用的颜色。"},{"name":"size","type":"double?","desc":"图标的逻辑像素大小。"},{"name":"icon","type":"AnimatedIconData","required":true,"desc":"要显示的图标。可用图标列在 [AnimatedIcons] 中。"},{"name":"semanticLabel","type":"String?","desc":"图标的语义标签。"},{"name":"textDirection","type":"TextDirection?","desc":"用于渲染图标的文本方向。"}],"id":125,"localName":"图标动画","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedIcon基本使用","desc":["【icon】 : 动画图标数据 【AnimatedIcons】","【size】 : 大小 【double】","【color】 : 颜色 【Color】","【progress】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_en-US.json deleted file mode 100644 index f3488814b..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedList","path":"/src/widgets/animated_scroll_view.dart","parents":["_AnimatedScrollView","StatefulWidget","Widget"],"desc":" A scrolling container that animates items when they are inserted or removed.","fields":[],"id":117,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedList","desc":["【itemBuilder】: Component builder 【AnimatedListItemBuilder】","【initialItemCount】: Number of child components 【int】","【scrollDirection】: Scroll direction 【Axis】","【controller】: Scroll controller 【ScrollController】","【reverse】: Whether the data is reversed 【bool】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_zh-CN.json deleted file mode 100644 index 299865f1e..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedList","path":"/src/widgets/animated_scroll_view.dart","parents":["_AnimatedScrollView","StatefulWidget","Widget"],"desc":"一个滚动容器,当项目插入或移除时对其进行动画处理。","fields":[],"id":117,"localName":"动画列表","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedList基本使用","desc":["【itemBuilder】 : 组件构造器 【AnimatedListItemBuilder】","【initialItemCount】 : 子组件数量 【int】","【scrollDirection】 : 滑动方向 【Axis】","【controller】 : 滑动控制器 【ScrollController】","【reverse】 : 数据是否反向 【bool】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_en-US.json deleted file mode 100644 index 2d8056198..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedModalBarrier","path":"/src/widgets/modal_barrier.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" A widget that prevents the user from interacting with widgets behind itself, and can be configured with an animated color value.","fields":[{"name":"dismissible","type":"bool","required":true,"desc":"Whether touching the barrier will pop the current route off the [Navigator]."},{"name":"semanticsLabel","type":"String?","desc":"Semantics label used for the barrier if it is [dismissible]."},{"name":"barrierSemanticsDismissible","type":"bool?","desc":"Whether the modal barrier semantics are included in the semantics tree."},{"name":"onDismiss","type":"VoidCallback?","desc":"{@macro flutter.widgets.ModalBarrier.onDismiss}"},{"name":"clipDetailsNotifier","type":"ValueNotifier?","desc":"{@macro flutter.widgets.ModalBarrier.clipDetailsNotifier}"},{"name":"semanticsOnTapHint","type":"String?","desc":"This hint text instructs users what they are able to do when they tap on the [ModalBarrier]"}],"id":227,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to AnimatedModalBarrier","desc":["【dismissible】: Whether to return on click 【bool】","【color】: Color 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_zh-CN.json deleted file mode 100644 index 243903aa6..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_zh-CN.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "AnimatedModalBarrier", - "path": "/src/widgets/modal_barrier.dart", - "parents": [ - "AnimatedWidget", - "StatefulWidget", - "Widget" - ], - "desc": "一个阻止用户与其后面的小部件交互的小部件,可以配置动画颜色值。", - "fields": [ - { - "name": "dismissible", - "type": "bool", - "required": true, - "desc": "触摸屏障是否会从 [Navigator] 中弹出当前路由。" - }, - { - "name": "semanticsLabel", - "type": "String?", - "desc": "如果屏障是 [dismissible] 的,用于屏障的语义标签。" - }, - { - "name": "barrierSemanticsDismissible", - "type": "bool?", - "desc": "模态屏障语义是否包含在语义树中。" - }, - { - "name": "onDismiss", - "type": "VoidCallback?", - "desc": "{@macro flutter.widgets.ModalBarrier.onDismiss}" - }, - { - "name": "clipDetailsNotifier", - "type": "ValueNotifier?", - "desc": "{@macro flutter.widgets.ModalBarrier.clipDetailsNotifier}" - }, - { - "name": "semanticsOnTapHint", - "type": "String?", - "desc": "此提示文本指示用户在点击 [ModalBarrier] 时能够执行的操作" - } - ], - "id": 227, - "localName": "动画屏障模", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedModalBarrier 介绍", - "desc": [ - "【dismissible】 : 点击是否返回 【bool】", - "【color】 : 颜色 【Animation】" - ] - } - ] -} diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_en-US.json deleted file mode 100644 index 3ded2b301..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_en-US.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "AnimatedOpacity", - "path": "/src/widgets/implicit_animations.dart", - "parents": [ - "ImplicitlyAnimatedWidget", - "StatefulWidget", - "Widget" - ], - "desc": " Animated version of [Opacity] which automatically transitions the child's opacity over a given duration whenever the given opacity changes.", - "fields": [ - { - "name": "child", - "type": "Widget?", - "desc": "The widget below this widget in the tree." - }, - { - "name": "opacity", - "type": "double", - "required": true, - "desc": "The target opacity." - }, - { - "name": "alwaysIncludeSemantics", - "type": "bool", - "required": true, - "desc": "Whether the semantic information of the children is always included." - } - ], - "id": 118, - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedOpacity", - "desc": [ - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【opacity】: Opacity 【double】" - ] - } - ] -} diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_zh-CN.json deleted file mode 100644 index 17a99e6fa..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedOpacity","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Opacity] 的动画版本,当给定的不透明度发生变化时,会在给定持续时间内自动过渡子项的不透明度。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"opacity","type":"double","required":true,"desc":"目标不透明度。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含子项的语义信息。"}],"id":118,"localName":"透明动画","lever":3,"family":1,"linkIds":[89,73],"nodes":[{"file":"node1_base.dart","name":"AnimatedOpacity基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【opacity】 : 透明度 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_en-US.json deleted file mode 100644 index 84849e02a..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedPadding","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Padding] which automatically transitions the indentation over a given duration whenever the given inset changes.","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the child."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":119,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedPadding","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_zh-CN.json deleted file mode 100644 index 28d5c3d7e..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedPadding","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Padding] 的动画版本,当给定的插入值发生变化时,会在给定持续时间内自动过渡缩进。","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"子项的插入空间量。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":119,"localName":"边距动画","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedPadding基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_en-US.json deleted file mode 100644 index abf4767a7..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedPhysicalModel","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [PhysicalModel].","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"shape","type":"BoxShape","required":true,"desc":"The type of shape."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"borderRadius","type":"BorderRadius?","desc":"The target border radius of the rounded corners for a rectangle shape."},{"name":"elevation","type":"double","required":true,"desc":"The target z-coordinate relative to the parent at which to place this physical object."},{"name":"color","type":"Color","required":true,"desc":"The target background color."},{"name":"animateColor","type":"bool","required":true,"desc":"Whether the color should be animated."},{"name":"shadowColor","type":"Color","required":true,"desc":"The target shadow color."},{"name":"animateShadowColor","type":"bool","required":true,"desc":"Whether the shadow color should be animated."}],"id":225,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedPhysicalModel","desc":["【color】: Background color 【Color】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【shape】: Shape 【BoxShape】","【elevation】: Elevation 【double】","【borderRadius】: Border radius 【BorderRadius】","【shadowColor】: Shadow color 【Color】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_zh-CN.json deleted file mode 100644 index c5e54acd7..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedPhysicalModel","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[PhysicalModel] 的动画版本。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"shape","type":"BoxShape","required":true,"desc":"形状的类型。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"borderRadius","type":"BorderRadius?","desc":"矩形形状圆角的目标边框半径。"},{"name":"elevation","type":"double","required":true,"desc":"相对于父级放置此物理对象的目标 z 坐标。"},{"name":"color","type":"Color","required":true,"desc":"目标背景颜色。"},{"name":"animateColor","type":"bool","required":true,"desc":"颜色是否应该动画。"},{"name":"shadowColor","type":"Color","required":true,"desc":"目标阴影颜色。"},{"name":"animateShadowColor","type":"bool","required":true,"desc":"阴影颜色是否应该动画。"}],"id":225,"localName":"物理模块动画","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedPhysicalModel基本使用","desc":["【color】 : 背景色 【Color】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【shape】 : 形状 【BoxShape】","【elevation】 : 影深 【double】","【borderRadius】 : 圆角 【BorderRadius】","【shadowColor】 : 阴影色 【Color】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_en-US.json deleted file mode 100644 index efa0430a8..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedPositioned","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Positioned] which automatically transitions the child's position over a given duration whenever the given position changes.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"left","type":"double?","desc":"The offset of the child's left edge from the left of the stack."},{"name":"top","type":"double?","desc":"The offset of the child's top edge from the top of the stack."},{"name":"right","type":"double?","desc":"The offset of the child's right edge from the right of the stack."},{"name":"bottom","type":"double?","desc":"The offset of the child's bottom edge from the bottom of the stack."},{"name":"width","type":"double?","desc":"The child's width."},{"name":"height","type":"double?","desc":"The child's height."}],"id":121,"lever":3,"family":1,"linkIds":[108,93,122],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedPositioned","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【top】: Distance to parent top 【double】","【right】: Distance to parent right 【double】","【left】: Distance to parent left 【double】","【bottom】: Distance to parent bottom 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_zh-CN.json deleted file mode 100644 index bbc09b37a..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedPositioned","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Positioned] 的动画版本,当给定位置发生变化时,会在给定持续时间内自动过渡子项的位置。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"left","type":"double?","desc":"子项左边缘距离堆栈左侧的偏移量。"},{"name":"top","type":"double?","desc":"子项顶部边缘距离堆栈顶部的偏移量。"},{"name":"right","type":"double?","desc":"子项右边缘距离堆栈右侧的偏移量。"},{"name":"bottom","type":"double?","desc":"子项底部边缘距离堆栈底部的偏移量。"},{"name":"width","type":"double?","desc":"子项的宽度。"},{"name":"height","type":"double?","desc":"子项的高度。"}],"id":121,"localName":"定位动画","lever":3,"family":1,"linkIds":[108,93,122],"nodes":[{"file":"node1_base.dart","name":"AnimatedPositioned基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【top】 : 到父顶距离 【double】","【right】 : 到父右距离 【double】","【left】 : 到父左距离 【double】","【bottom】 : 到父底距离 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_en-US.json deleted file mode 100644 index fb5a5f6ef..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedPositionedDirectional","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [PositionedDirectional] which automatically transitions the child's position over a given duration whenever the given position changes.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"start","type":"double?","desc":"The offset of the child's start edge from the start of the stack."},{"name":"top","type":"double?","desc":"The offset of the child's top edge from the top of the stack."},{"name":"end","type":"double?","desc":"The offset of the child's end edge from the end of the stack."},{"name":"bottom","type":"double?","desc":"The offset of the child's bottom edge from the bottom of the stack."},{"name":"width","type":"double?","desc":"The child's width."},{"name":"height","type":"double?","desc":"The child's height."}],"id":122,"lever":3,"family":1,"linkIds":[121,159],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedPositionedDirectional","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【top】: Distance to parent top 【double】","【end】: Distance to parent right 【double】","【start】: Distance to parent left 【double】","【bottom】: Distance to parent bottom 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_zh-CN.json deleted file mode 100644 index 3fc0ae575..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedPositionedDirectional","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[PositionedDirectional] 的动画版本,当给定位置发生变化时,会在给定持续时间内自动过渡子项的位置。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"start","type":"double?","desc":"子项起始边缘距离堆栈起始位置的偏移量。"},{"name":"top","type":"double?","desc":"子项顶部边缘距离堆栈顶部的偏移量。"},{"name":"end","type":"double?","desc":"子项结束边缘距离堆栈结束位置的偏移量。"},{"name":"bottom","type":"double?","desc":"子项底部边缘距离堆栈底部的偏移量。"},{"name":"width","type":"double?","desc":"子项的宽度。"},{"name":"height","type":"double?","desc":"子项的高度。"}],"id":122,"localName":"方向定位动画","lever":3,"family":1,"linkIds":[121,159],"nodes":[{"file":"node1_base.dart","name":"AnimatedPositionedDirectional基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【top】 : 到父顶距离 【double】","【end】 : 到父右距离 【double】","【start】 : 到父左距离 【double】","【bottom】 : 到父底距离 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_en-US.json deleted file mode 100644 index 42c89f958..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedRotation","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Transform.rotate] which automatically transitions the child's rotation over a given duration whenever the given rotation changes.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"turns","type":"double","required":true,"desc":"The animation that controls the rotation of the child."},{"name":"alignment","type":"Alignment","required":true,"desc":"The alignment of the origin of the coordinate system in which the rotation takes place, relative to the size of the box."},{"name":"filterQuality","type":"FilterQuality?","desc":"The filter quality with which to apply the transform as a bitmap operation."}],"id":259,"lever":3,"family":1,"linkIds":[247,249],"nodes":[{"file":"node1.dart","name":"Rotation Animation Effect","desc":["In this case, drag to adjust the turns parameter to see the animation effect. The rotation angle is: turns*2*pi","【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【alignment】: Animation transformation center 【Alignment】","【curve】: Animation curve 【Duration】","【filterQuality】: Filter quality 【FilterQuality】","【turns】: Rotation amount 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_zh-CN.json deleted file mode 100644 index b1b43acd6..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedRotation","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Transform.rotate] 的动画版本,当给定旋转发生变化时,会在给定持续时间内自动过渡子项的旋转。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"turns","type":"double","required":true,"desc":"控制子项旋转的动画。"},{"name":"alignment","type":"Alignment","required":true,"desc":"旋转发生的坐标系原点相对于盒子大小的对齐方式。"},{"name":"filterQuality","type":"FilterQuality?","desc":"作为位图操作应用变换的滤镜质量。"}],"id":259,"localName":"旋转动画","lever":3,"family":1,"linkIds":[247,249],"nodes":[{"file":"node1.dart","name":"旋转动画效果","desc":["该案例中,拖拽调节 turns 参数,查看动画运动效果。旋转角度为: turns*2*pi","【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【alignment】 : 动画变换中心 【Alignment】","【curve】 : 动画曲线 【Duration】","【filterQuality】 : 滤镜质量 【FilterQuality】","【turns】 : 旋转量 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_en-US.json deleted file mode 100644 index d5b2379e3..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedScale","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Transform.scale] which automatically transitions the child's scale over a given duration whenever the given scale changes.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"scale","type":"double","required":true,"desc":"The target scale."},{"name":"alignment","type":"Alignment","required":true,"desc":"The alignment of the origin of the coordinate system in which the scale takes place, relative to the size of the box."},{"name":"filterQuality","type":"FilterQuality?","desc":"The filter quality with which to apply the transform as a bitmap operation."}],"id":249,"lever":3,"family":1,"linkIds":[120,247,201],"nodes":[{"file":"node1.dart","name":"Scaling Animation Effect","desc":["In this case, drag to adjust the scale parameter to view the animation effect.","【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【alignment】: Animation transformation center 【Alignment】","【filterQuality】: Filter quality 【FilterQuality】","【scale】: Scaling amount 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_zh-CN.json deleted file mode 100644 index 8f18c532e..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedScale","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Transform.scale] 的动画版本,当给定缩放发生变化时,会在给定持续时间内自动过渡子项的缩放。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"scale","type":"double","required":true,"desc":"目标缩放。"},{"name":"alignment","type":"Alignment","required":true,"desc":"缩放发生的坐标系原点相对于盒子大小的对齐方式。"},{"name":"filterQuality","type":"FilterQuality?","desc":"作为位图操作应用变换的滤镜质量。"}],"id":249,"localName":"缩放动画","lever":3,"family":1,"linkIds":[120,247,201],"nodes":[{"file":"node1.dart","name":"缩放动画效果","desc":["该案例中,拖拽调节 scale 参数,查看动画运动效果。","【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【alignment】 : 动画变换中心 【Alignment】","【filterQuality】 : 滤镜质量 【FilterQuality】","【scale】 : 缩放量 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_en-US.json deleted file mode 100644 index ba3fa709b..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedSize","path":"/src/widgets/animated_size.dart","parents":["StatefulWidget","Widget"],"desc":" Animated widget that automatically transitions its size over a given duration whenever the given child's size changes.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"The alignment of the child within the parent when the parent is not yet the same size as the child."},{"name":"curve","type":"Curve","required":true,"desc":"The animation curve when transitioning this widget's size to match the child's size."},{"name":"duration","type":"Duration","required":true,"desc":"The duration when transitioning this widget's size to match the child's size."},{"name":"reverseDuration","type":"Duration?","desc":"The duration when transitioning this widget's size to match the child's size when going in reverse."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"onEnd","type":"VoidCallback?","desc":"Called every time an animation completes."}],"id":201,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedSize","desc":["【child】 : Child component 【Widget】","【duration】 : Animation duration 【Duration】","【alignment】 : Alignment 【AlignmentGeometry】","【curve】 : Animation curve 【Duration】","【vsync】 : vsync 【TickerProvider】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_zh-CN.json deleted file mode 100644 index 78a578f41..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedSize","path":"/src/widgets/animated_size.dart","parents":["StatefulWidget","Widget"],"desc":"动画小部件,当给定子项的大小发生变化时,会在给定持续时间内自动过渡其大小。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"当父级尚未与子级大小相同时,子级在父级内的对齐方式。"},{"name":"curve","type":"Curve","required":true,"desc":"过渡此小部件大小以匹配子项大小时的动画曲线。"},{"name":"duration","type":"Duration","required":true,"desc":"过渡此小部件大小以匹配子项大小时的持续时间。"},{"name":"reverseDuration","type":"Duration?","desc":"反向过渡此小部件大小以匹配子项大小时的持续时间。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"onEnd","type":"VoidCallback?","desc":"每次动画完成时调用。"}],"id":201,"localName":"尺寸动画","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedSize基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【alignment】 : 对齐方式 【AlignmentGeometry】","【curve】 : 动画曲线 【Duration】","【vsync】 : vsync 【TickerProvider】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_en-US.json deleted file mode 100644 index 6d3a49ab1..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_en-US.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "AnimatedSlide", - "path": "/src/widgets/implicit_animations.dart", - "parents": [ - "ImplicitlyAnimatedWidget", - "StatefulWidget", - "Widget" - ], - "desc": " Widget which automatically transitions the child's offset relative to its normal position whenever the given offset changes.", - "fields": [ - { - "name": "child", - "type": "Widget?", - "desc": "The widget below this widget in the tree." - }, - { - "name": "offset", - "type": "Offset", - "required": true, - "desc": "The target offset. The child will be translated horizontally by `width * dx` and vertically by `height * dy`" - } - ], - "id": 247, - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Slide Animation Effect", - "desc": [ - "In this case, drag to adjust the x, y parameters to view the animation effect. The offset = x, y * the width and height of the box.", - "【child】: child component 【Widget】", - "【duration】: animation duration 【Duration】", - "【onEnd】: animation end callback 【Function()】", - "【curve】: animation curve 【Duration】", - "【offset】: offset 【Offset】" - ] - } - ] -} diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_zh-CN.json deleted file mode 100644 index 0fc2f0116..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_zh-CN.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "AnimatedSlide", - "path": "/src/widgets/implicit_animations.dart", - "parents": [ - "ImplicitlyAnimatedWidget", - "StatefulWidget", - "Widget" - ], - "desc": "当给定偏移量发生变化时,自动过渡子项相对于其正常位置的偏移量的小部件。", - "fields": [ - { - "name": "child", - "type": "Widget?", - "desc": "树中此小部件下方的小部件。" - }, - { - "name": "offset", - "type": "Offset", - "required": true, - "desc": "目标偏移量。子项将水平平移 `width * dx`,垂直平移 `height * dy`" - } - ], - "id": 247, - "localName": "滑动动画", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "滑动动画效果", - "desc": [ - "该案例中,拖拽调节 x,y 参数,查看动画运动效果。其中偏移量 = x,y * 方框宽高", - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【offset】 : 偏移量 【Offset】" - ] - } - ] -} diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_en-US.json deleted file mode 100644 index 67ea4b1ce..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedSwitcher","path":"/src/widgets/animated_switcher.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that by default does a cross-fade between a new widget and the widget previously set on the [AnimatedSwitcher] as a child.","fields":[{"name":"child","type":"Widget?","desc":"The current child widget to display. If there was a previous child, then that child will be faded out using the [switchOutCurve], while the new child is faded in with the [switchInCurve], over the [duration]."},{"name":"duration","type":"Duration","required":true,"desc":"The duration of the transition from the old [child] value to the new one."},{"name":"reverseDuration","type":"Duration?","desc":"The duration of the transition from the new [child] value to the old one."},{"name":"switchInCurve","type":"Curve","required":true,"desc":"The animation curve to use when transitioning in a new [child]."},{"name":"switchOutCurve","type":"Curve","required":true,"desc":"The animation curve to use when transitioning a previous [child] out."},{"name":"transitionBuilder","type":"AnimatedSwitcherTransitionBuilder","required":true,"desc":"A function that wraps a new [child] with an animation that transitions the [child] in when the animation runs in the forward direction and out when the animation runs in the reverse direction. This is only called when a new [child] is set (not for each build), or when a new [transitionBuilder] is set. If a new [transitionBuilder] is set, then the transition is rebuilt for the current child and all previous children using the new [transitionBuilder]. The function must not return null."},{"name":"layoutBuilder","type":"AnimatedSwitcherLayoutBuilder","required":true,"desc":"A function that wraps all of the children that are transitioning out, and the [child] that's transitioning in, with a widget that lays all of them out. This is called every time this widget is built. The function must not return null."}],"id":116,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedSwitcher","desc":["【child】 : Child component 【Widget】","【duration】 : Animation duration 【Duration】","【switchOutCurve】 : Switch out curve 【Curves】","【switchInCurve】 : Switch in curve 【Curves】","【switchInCurve】 : Switch in curve 【Curves】","【transitionBuilder】 : Animation builder 【Widget Function(Widget, Animation)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_zh-CN.json deleted file mode 100644 index 0b00daa8f..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedSwitcher","path":"/src/widgets/animated_switcher.dart","parents":["StatefulWidget","Widget"],"desc":"默认情况下在新小部件和之前设置为 [AnimatedSwitcher] 子项的小部件之间进行交叉淡入淡出的小部件。","fields":[{"name":"child","type":"Widget?","desc":"要显示的当前子小部件。如果之前有子项,则该子项将使用 [switchOutCurve] 淡出,而新子项将使用 [switchInCurve] 在 [duration] 内淡入。"},{"name":"duration","type":"Duration","required":true,"desc":"从旧 [child] 值到新值的过渡持续时间。"},{"name":"reverseDuration","type":"Duration?","desc":"从新 [child] 值到旧值的过渡持续时间。"},{"name":"switchInCurve","type":"Curve","required":true,"desc":"过渡新 [child] 时使用的动画曲线。"},{"name":"switchOutCurve","type":"Curve","required":true,"desc":"过渡之前的 [child] 时使用的动画曲线。"},{"name":"transitionBuilder","type":"AnimatedSwitcherTransitionBuilder","required":true,"desc":"一个函数,用动画包装新的 [child],当动画正向运行时过渡 [child] 进入,当动画反向运行时过渡出去。仅在设置新 [child] 时(不是每次构建时)或设置新 [transitionBuilder] 时调用。如果设置了新的 [transitionBuilder],则使用新的 [transitionBuilder] 为当前子项和所有之前的子项重建过渡。该函数不得返回 null。"},{"name":"layoutBuilder","type":"AnimatedSwitcherLayoutBuilder","required":true,"desc":"一个函数,用小部件包装所有正在过渡出去的子项和正在过渡进入的 [child],该小部件布局所有这些子项。每次构建此小部件时都会调用此函数。该函数不得返回 null。"}],"id":116,"localName":"动画切换","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedSwitcher基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【switchOutCurve】 : 切出曲线 【Curves】","【switchInCurve】 : 切入曲线 【Curves】","【switchInCurve】 : 切入曲线 【Curves】","【transitionBuilder】 : 动画构造器 【Widget Function(Widget, Animation)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_en-US.json deleted file mode 100644 index 4b4506883..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedTheme","path":"/src/material/theme.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Theme] which automatically transitions the colors, etc, over a given duration whenever the given theme changes.","fields":[{"name":"data","type":"ThemeData","required":true,"desc":"Specifies the color and typography values for descendant widgets."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":224,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedTheme","desc":["【data】 : Theme data 【ThemeData】","【duration】 : Animation duration 【Duration】","【onEnd】 : Animation end callback 【Function()】","【curve】 : Animation curve 【Duration】","【child】 : Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_zh-CN.json deleted file mode 100644 index 2ef3a2461..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedTheme","path":"/src/material/theme.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Theme] 的动画版本,当给定主题发生变化时,会在给定持续时间内自动过渡颜色等。","fields":[{"name":"data","type":"ThemeData","required":true,"desc":"为后代小部件指定颜色和排版值。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":224,"localName":"动画主题","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedTheme基本使用","desc":["【data】 : 主题数据 【ThemeData】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_en-US.json deleted file mode 100644 index 8d12f50b3..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedWidget","path":"/src/widgets/transitions.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" A widget that rebuilds when the given [Listenable] changes value.","fields":[{"name":"listenable","type":"Listenable","required":true,"desc":"The [Listenable] to which this widget is listening."}],"id":362,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_zh-CN.json deleted file mode 100644 index 119153985..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedWidget","path":"/src/widgets/transitions.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"当给定的 [Listenable] 值发生变化时重建的小部件。","fields":[{"name":"listenable","type":"Listenable","required":true,"desc":"此小部件正在监听的 [Listenable]。"}],"id":362,"localName":"AnimatedWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_en-US.json b/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_en-US.json deleted file mode 100644 index 40a8efc2e..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnnotatedRegion","path":"/src/widgets/annotated_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Annotates a region of the layer tree with a value.","fields":[{"name":"value","type":"T","required":true,"desc":"A value which can be retrieved using [Layer.find]."},{"name":"sized","type":"bool","required":true,"desc":"If false, the layer pushed into the tree will not be provided with a size."}],"id":288,"lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnnotatedRegion Changes State Variables and Styles","desc":["【value】 : value 【T】","【sized】 : whether to provide size 【bool】","【child】 : child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_zh-CN.json deleted file mode 100644 index 92e237535..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnnotatedRegion","path":"/src/widgets/annotated_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"用值注释图层树的区域。","fields":[{"name":"value","type":"T","required":true,"desc":"可以使用 [Layer.find] 检索的值。"},{"name":"sized","type":"bool","required":true,"desc":"如果为 false,推入树中的图层将不会提供大小。"}],"id":288,"localName":"标注区域","lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnnotatedRegion改变状态量样式","desc":["【value】 : 值 【T】","【sized】 : 是否提供大小 【bool】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_en-US.json b/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_en-US.json deleted file mode 100644 index 22065f42a..000000000 --- a/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AppBar","path":"/src/material/app_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design app bar.","fields":[{"name":"leading","type":"Widget?","desc":"{@template flutter.material.appbar.leading} A widget to display before the toolbar's [title]."},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@template flutter.material.appbar.automaticallyImplyLeading} Controls whether we should try to imply the leading widget if null."},{"name":"title","type":"Widget?","desc":"{@template flutter.material.appbar.title} The primary widget displayed in the app bar."},{"name":"actions","type":"List?","desc":"{@template flutter.material.appbar.actions} A list of Widgets to display in a row after the [title] widget."},{"name":"flexibleSpace","type":"Widget?","desc":"{@template flutter.material.appbar.flexibleSpace} This widget is stacked behind the toolbar and the tab bar. Its height will be the same as the app bar's overall height."},{"name":"bottom","type":"PreferredSizeWidget?","desc":"{@template flutter.material.appbar.bottom} This widget appears across the bottom of the app bar."},{"name":"elevation","type":"double?","desc":"{@template flutter.material.appbar.elevation} The z-coordinate at which to place this app bar relative to its parent."},{"name":"scrolledUnderElevation","type":"double?","desc":"{@template flutter.material.appbar.scrolledUnderElevation} The elevation that will be used if this app bar has something scrolled underneath it."},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"A check that specifies which child's [ScrollNotification]s should be listened to."},{"name":"shadowColor","type":"Color?","desc":"{@template flutter.material.appbar.shadowColor} The color of the shadow below the app bar."},{"name":"surfaceTintColor","type":"Color?","desc":"{@template flutter.material.appbar.surfaceTintColor} The color of the surface tint overlay applied to the app bar's background color to indicate elevation."},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.appbar.shape} The shape of the app bar's [Material] as well as its shadow."},{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.material.appbar.backgroundColor} The fill color to use for an app bar's [Material]."},{"name":"foregroundColor","type":"Color?","desc":"{@template flutter.material.appbar.foregroundColor} The default color for [Text] and [Icon]s within the app bar."},{"name":"iconTheme","type":"IconThemeData?","desc":"{@template flutter.material.appbar.iconTheme} The color, opacity, and size to use for toolbar icons."},{"name":"actionsIconTheme","type":"IconThemeData?","desc":"{@template flutter.material.appbar.actionsIconTheme} The color, opacity, and size to use for the icons that appear in the app bar's [actions]."},{"name":"primary","type":"bool","required":true,"desc":"{@template flutter.material.appbar.primary} Whether this app bar is being displayed at the top of the screen."},{"name":"centerTitle","type":"bool?","desc":"{@template flutter.material.appbar.centerTitle} Whether the title should be centered."},{"name":"excludeHeaderSemantics","type":"bool","required":true,"desc":"{@template flutter.material.appbar.excludeHeaderSemantics} Whether the title should be wrapped with header [Semantics]."},{"name":"titleSpacing","type":"double?","desc":"{@template flutter.material.appbar.titleSpacing} The spacing around [title] content on the horizontal axis. This spacing is applied even if there is no [leading] content or [actions]. If you want [title] to take all the space available, set this value to 0.0."},{"name":"toolbarOpacity","type":"double","required":true,"desc":"{@template flutter.material.appbar.toolbarOpacity} How opaque the toolbar part of the app bar is."},{"name":"bottomOpacity","type":"double","required":true,"desc":"{@template flutter.material.appbar.bottomOpacity} How opaque the bottom part of the app bar is."},{"name":"preferredSize","type":"Size","required":true,"desc":"{@template flutter.material.appbar.preferredSize} A size whose height is the sum of [toolbarHeight] and the [bottom] widget's preferred height."},{"name":"toolbarHeight","type":"double?","desc":"{@template flutter.material.appbar.toolbarHeight} Defines the height of the toolbar component of an [AppBar]."},{"name":"leadingWidth","type":"double?","desc":"{@template flutter.material.appbar.leadingWidth} Defines the width of [AppBar.leading] widget."},{"name":"toolbarTextStyle","type":"TextStyle?","desc":"{@template flutter.material.appbar.toolbarTextStyle} The default text style for the AppBar's [leading], and [actions] widgets, but not its [title]."},{"name":"titleTextStyle","type":"TextStyle?","desc":"{@template flutter.material.appbar.titleTextStyle} The default text style for the AppBar's [title] widget."},{"name":"systemOverlayStyle","type":"SystemUiOverlayStyle?","desc":"{@template flutter.material.appbar.systemOverlayStyle} Specifies the style to use for the system overlays (e.g. the status bar on Android or iOS, the system navigation bar on Android)."},{"name":"forceMaterialTransparency","type":"bool","required":true,"desc":"{@template flutter.material.appbar.forceMaterialTransparency} Forces the AppBar's Material widget type to be [MaterialType.transparency] (instead of Material's default type)."},{"name":"useDefaultSemanticsOrder","type":"bool","required":true,"desc":"{@template flutter.material.appbar.useDefaultSemanticsOrder} Whether to use the default semantic ordering for the app bar's children for accessibility traversal order."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"{@template flutter.material.appbar.actionsPadding} The padding between the [actions] and the end of the AppBar."}],"id":57,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AppBar","desc":["【leading】 : Left component 【Widget】","【title】 : Middle component 【Widget】","【actions】 : Right component 【List】","【elevation】 : Shadow depth 【double】","【shape】 : Shape 【ShapeBorder】","【backgroundColor】 : Background color 【Color】","【centerTitle】 : Whether the title is centered 【bool】"]},{"file":"node2_tab.dart","name":"Using AppBar with TabBar and TabBarView","desc":["【bottom】 : Bottom component 【PreferredSizeWidget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_zh-CN.json deleted file mode 100644 index 7b439af90..000000000 --- a/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AppBar","path":"/src/material/app_bar.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 应用栏。","fields":[{"name":"leading","type":"Widget?","desc":"{@template flutter.material.appbar.leading} 在工具栏 [title] 之前显示的小部件。"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@template flutter.material.appbar.automaticallyImplyLeading} 控制当 leading 为 null 时是否应尝试推断 leading 小部件。"},{"name":"title","type":"Widget?","desc":"{@template flutter.material.appbar.title} 在应用栏中显示的主要小部件。"},{"name":"actions","type":"List?","desc":"{@template flutter.material.appbar.actions} 在 [title] 小部件之后以行形式显示的小部件列表。"},{"name":"flexibleSpace","type":"Widget?","desc":"{@template flutter.material.appbar.flexibleSpace} 此小部件堆叠在工具栏和选项卡栏后面。其高度将与应用栏的整体高度相同。"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"{@template flutter.material.appbar.bottom} 此小部件出现在应用栏底部。"},{"name":"elevation","type":"double?","desc":"{@template flutter.material.appbar.elevation} 相对于其父级放置此应用栏的 z 坐标。"},{"name":"scrolledUnderElevation","type":"double?","desc":"{@template flutter.material.appbar.scrolledUnderElevation} 如果此应用栏下方有滚动内容,将使用的高度。"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"指定应监听哪个子项的 [ScrollNotification] 的检查。"},{"name":"shadowColor","type":"Color?","desc":"{@template flutter.material.appbar.shadowColor} 应用栏下方阴影的颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"{@template flutter.material.appbar.surfaceTintColor} 应用于应用栏背景颜色以指示高度的表面色调叠加的颜色。"},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.appbar.shape} 应用栏 [Material] 及其阴影的形状。"},{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.material.appbar.backgroundColor} 用于应用栏 [Material] 的填充颜色。"},{"name":"foregroundColor","type":"Color?","desc":"{@template flutter.material.appbar.foregroundColor} 应用栏内 [Text] 和 [Icon] 的默认颜色。"},{"name":"iconTheme","type":"IconThemeData?","desc":"{@template flutter.material.appbar.iconTheme} 用于工具栏图标的颜色、不透明度和大小。"},{"name":"actionsIconTheme","type":"IconThemeData?","desc":"{@template flutter.material.appbar.actionsIconTheme} 用于应用栏 [actions] 中出现的图标的颜色、不透明度和大小。"},{"name":"primary","type":"bool","required":true,"desc":"{@template flutter.material.appbar.primary} 此应用栏是否显示在屏幕顶部。"},{"name":"centerTitle","type":"bool?","desc":"{@template flutter.material.appbar.centerTitle} 标题是否应居中。"},{"name":"excludeHeaderSemantics","type":"bool","required":true,"desc":"{@template flutter.material.appbar.excludeHeaderSemantics} 标题是否应用标题 [Semantics] 包装。"},{"name":"titleSpacing","type":"double?","desc":"{@template flutter.material.appbar.titleSpacing} 水平轴上 [title] 内容周围的间距。即使没有 [leading] 内容或 [actions],也会应用此间距。如果希望 [title] 占用所有可用空间,请将此值设置为 0.0。"},{"name":"toolbarOpacity","type":"double","required":true,"desc":"{@template flutter.material.appbar.toolbarOpacity} 应用栏工具栏部分的不透明度。"},{"name":"bottomOpacity","type":"double","required":true,"desc":"{@template flutter.material.appbar.bottomOpacity} 应用栏底部部分的不透明度。"},{"name":"preferredSize","type":"Size","required":true,"desc":"{@template flutter.material.appbar.preferredSize} 高度为 [toolbarHeight] 和 [bottom] 小部件首选高度之和的大小。"},{"name":"toolbarHeight","type":"double?","desc":"{@template flutter.material.appbar.toolbarHeight} 定义 [AppBar] 工具栏组件的高度。"},{"name":"leadingWidth","type":"double?","desc":"{@template flutter.material.appbar.leadingWidth} 定义 [AppBar.leading] 小部件的宽度。"},{"name":"toolbarTextStyle","type":"TextStyle?","desc":"{@template flutter.material.appbar.toolbarTextStyle} AppBar 的 [leading] 和 [actions] 小部件的默认文本样式,但不包括其 [title]。"},{"name":"titleTextStyle","type":"TextStyle?","desc":"{@template flutter.material.appbar.titleTextStyle} AppBar 的 [title] 小部件的默认文本样式。"},{"name":"systemOverlayStyle","type":"SystemUiOverlayStyle?","desc":"{@template flutter.material.appbar.systemOverlayStyle} 指定用于系统叠加层的样式(例如 Android 或 iOS 上的状态栏,Android 上的系统导航栏)。"},{"name":"forceMaterialTransparency","type":"bool","required":true,"desc":"{@template flutter.material.appbar.forceMaterialTransparency} 强制 AppBar 的 Material 小部件类型为 [MaterialType.transparency](而不是 Material 的默认类型)。"},{"name":"useDefaultSemanticsOrder","type":"bool","required":true,"desc":"{@template flutter.material.appbar.useDefaultSemanticsOrder} 是否对应用栏的子项使用默认语义顺序进行辅助功能遍历顺序。"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"{@template flutter.material.appbar.actionsPadding} [actions] 和 AppBar 末端之间的内边距。"}],"id":57,"localName":"应用头栏","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AppBar基本使用","desc":["【leading】 : 左侧组件 【Widget】","【title】 : 中间组件 【Widget】","【actions】 : 右侧组件 【List】","【elevation】 : 影深 【double】","【shape】 : 形状 【ShapeBorder】","【backgroundColor】 : 影深 【背景色】","【centerTitle】 : 中间是否居中 【bool】"]},{"file":"node2_tab.dart","name":"AppBar与TabBar、TabBarView联用","desc":["【bottom】 : 底部组件 【PreferredSizeWidget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_en-US.json b/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_en-US.json deleted file mode 100644 index f3801b33a..000000000 --- a/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AppKitView","path":"/src/widgets/platform_view.dart","parents":["_DarwinView","StatefulWidget","Widget"],"desc":" Widget that contains a macOS AppKit view.","fields":[],"id":363,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_zh-CN.json deleted file mode 100644 index 0e4e9ad84..000000000 --- a/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AppKitView","path":"/src/widgets/platform_view.dart","parents":["_DarwinView","StatefulWidget","Widget"],"desc":"包含 macOS AppKit 视图的小部件。","fields":[],"id":363,"localName":"AppKitView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_en-US.json b/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_en-US.json deleted file mode 100644 index 5f650c97b..000000000 --- a/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AspectRatio","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that attempts to size the child to a specific aspect ratio.","fields":[{"name":"aspectRatio","type":"double","required":true,"desc":"The aspect ratio to attempt to use."}],"id":77,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AspectRatio","desc":["【child】: Child component 【Widget】","【aspectRatio】: Aspect ratio 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_zh-CN.json deleted file mode 100644 index fb6f6a8e5..000000000 --- a/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AspectRatio","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"尝试将子项调整为特定宽高比的小部件。","fields":[{"name":"aspectRatio","type":"double","required":true,"desc":"尝试使用的宽高比。"}],"id":77,"localName":"比例盒","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AspectRatio基本使用","desc":["【child】 : 孩子组件 【Widget】","【aspectRatio】 : 宽高比例 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_en-US.json b/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_en-US.json deleted file mode 100644 index 7e0582130..000000000 --- a/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Autocomplete","path":"/src/material/autocomplete.dart","parents":["StatelessWidget","Widget"],"desc":" {@macro flutter.widgets.RawAutocomplete.RawAutocomplete}","fields":[{"name":"displayStringForOption","type":"AutocompleteOptionToString","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.displayStringForOption}"},{"name":"fieldViewBuilder","type":"AutocompleteFieldViewBuilder","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.fieldViewBuilder}"},{"name":"onSelected","type":"AutocompleteOnSelected?","desc":"{@macro flutter.widgets.RawAutocomplete.onSelected}"},{"name":"optionsBuilder","type":"AutocompleteOptionsBuilder","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.optionsBuilder}"},{"name":"optionsViewBuilder","type":"AutocompleteOptionsViewBuilder?","desc":"{@macro flutter.widgets.RawAutocomplete.optionsViewBuilder}"},{"name":"optionsViewOpenDirection","type":"OptionsViewOpenDirection","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.optionsViewOpenDirection}"},{"name":"optionsMaxHeight","type":"double","required":true,"desc":"The maximum height used for the default Material options list widget."},{"name":"initialValue","type":"TextEditingValue?","desc":"{@macro flutter.widgets.RawAutocomplete.initialValue}"}],"id":356,"lever":4,"family":0,"linkIds":[54,199],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Autocomplete","desc":["【optionsBuilder】: Option builder 【AutocompleteOptionsBuilder】","【onSelected】: Callback when selected 【AutocompleteOnSelected】"]},{"file":"node2_type.dart","name":"Generics of Autocomplete","desc":["【optionsViewBuilder】: Panel builder 【AutocompleteOptionsViewBuilder】","【fieldViewBuilder】: Input builder 【AutocompleteFieldViewBuilder】","【displayStringForOption】: Text display 【AutocompleteOptionToString】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_zh-CN.json deleted file mode 100644 index 54a48da22..000000000 --- a/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Autocomplete","path":"/src/material/autocomplete.dart","parents":["StatelessWidget","Widget"],"desc":"{@macro flutter.widgets.RawAutocomplete.RawAutocomplete}","fields":[{"name":"displayStringForOption","type":"AutocompleteOptionToString","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.displayStringForOption}"},{"name":"fieldViewBuilder","type":"AutocompleteFieldViewBuilder","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.fieldViewBuilder}"},{"name":"onSelected","type":"AutocompleteOnSelected?","desc":"{@macro flutter.widgets.RawAutocomplete.onSelected}"},{"name":"optionsBuilder","type":"AutocompleteOptionsBuilder","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.optionsBuilder}"},{"name":"optionsViewBuilder","type":"AutocompleteOptionsViewBuilder?","desc":"{@macro flutter.widgets.RawAutocomplete.optionsViewBuilder}"},{"name":"optionsViewOpenDirection","type":"OptionsViewOpenDirection","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.optionsViewOpenDirection}"},{"name":"optionsMaxHeight","type":"double","required":true,"desc":"用于默认 Material 选项列表小部件的最大高度。"},{"name":"initialValue","type":"TextEditingValue?","desc":"{@macro flutter.widgets.RawAutocomplete.initialValue}"}],"id":356,"localName":"自动填充","lever":4,"family":0,"linkIds":[54,199],"nodes":[{"file":"node1_base.dart","name":"Autocomplete基本使用","desc":["【optionsBuilder】 : 选项构造器 【AutocompleteOptionsBuilder】","【onSelected】 : 选择时回调 【AutocompleteOnSelected】"]},{"file":"node2_type.dart","name":"Autocomplete的泛型","desc":["【optionsViewBuilder】 : 面板构造器 【AutocompleteOptionsViewBuilder】","【fieldViewBuilder】 : 输入构造器 【AutocompleteFieldViewBuilder】","【displayStringForOption】 : 文字展示 【AutocompleteOptionToString】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_en-US.json b/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_en-US.json deleted file mode 100644 index 1de4e8c7d..000000000 --- a/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AutocompleteHighlightedOption","path":"/src/widgets/autocomplete.dart","parents":["InheritedNotifier","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget used to indicate which autocomplete option should be highlighted for keyboard navigation.","fields":[],"id":364,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_zh-CN.json deleted file mode 100644 index a4e8a4db6..000000000 --- a/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AutocompleteHighlightedOption","path":"/src/widgets/autocomplete.dart","parents":["InheritedNotifier","InheritedWidget","ProxyWidget","Widget"],"desc":"用于指示应为键盘导航突出显示哪个自动完成选项的继承小部件。","fields":[],"id":364,"localName":"AutocompleteHighlightedOption","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_en-US.json deleted file mode 100644 index 946138ff1..000000000 --- a/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AutofillGroup","path":"/src/widgets/autofill.dart","parents":["StatefulWidget","Widget"],"desc":" An [AutofillScope] widget that groups [AutofillClient]s together.","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"},{"name":"onDisposeAction","type":"AutofillContextAction","required":true,"desc":"The [AutofillContextAction] to be run when this [AutofillGroup] is the topmost [AutofillGroup] and it's being disposed, in order to clean up the current autofill context."}],"id":365,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_zh-CN.json deleted file mode 100644 index 86ac6f402..000000000 --- a/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AutofillGroup","path":"/src/widgets/autofill.dart","parents":["StatefulWidget","Widget"],"desc":"将 [AutofillClient] 组合在一起的 [AutofillScope] 小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"},{"name":"onDisposeAction","type":"AutofillContextAction","required":true,"desc":"当此 [AutofillGroup] 是最顶层的 [AutofillGroup] 且正在被释放时要运行的 [AutofillContextAction],以清理当前自动填充上下文。"}],"id":365,"localName":"AutofillGroup","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_en-US.json b/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_en-US.json deleted file mode 100644 index 861cb968a..000000000 --- a/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AutomaticKeepAlive","path":"/src/widgets/automatic_keep_alive.dart","parents":["StatefulWidget","Widget"],"desc":" Allows subtrees to request to be kept alive in lazy lists.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":239,"lever":1,"family":1,"linkIds":[59,162,163,165,185,188],"nodes":[{"file":"node1_base.dart","name":"Introduction to AutomaticKeepAlive","desc":["【child】: Child component 【Widget】","The AutomaticKeepAlive component is used in the source code of list and page-switching components such as ListView, SliverList, GridView, SliverGrid, PageView, and TabBarView. When keeping a State alive, you can use AutomaticKeepAliveClientMixin, which is a simple encapsulation of the use of KeepAliveNotification. This example demonstrates the state preservation of ListView items."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_zh-CN.json deleted file mode 100644 index bba5a60e8..000000000 --- a/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AutomaticKeepAlive","path":"/src/widgets/automatic_keep_alive.dart","parents":["StatefulWidget","Widget"],"desc":"允许子树请求在惰性列表中保持活动状态。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":239,"localName":"自动保活","lever":1,"family":1,"linkIds":[59,162,163,165,185,188],"nodes":[{"file":"node1_base.dart","name":"AutomaticKeepAlive 介绍","desc":["【child】 : 子组件 【Widget】","在 ListView、SliverList、GridView、SliverGrid、PageView、TabBarView 等列表、切页组件源码中都有使用到 AutomaticKeepAlive 组件。在保活某个 State 时,可以使用 AutomaticKeepAliveClientMixin 进行操作,它是对 KeepAliveNotification 使用的一个简易封装。该示例展示出 ListView 条目的状态保活。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_en-US.json b/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_en-US.json deleted file mode 100644 index 454dad3f2..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":" A Material Design back icon button.","fields":[],"id":31,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BackButton Properties","desc":["【color】: Color 【Color】","【style】: Button Style 【ButtonStyle?】","【onPressed】: Click Event 【Function】"," If onPressed is empty, it will exit the current stack."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_zh-CN.json deleted file mode 100644 index 273d51db6..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":"Material Design 返回图标按钮。","fields":[],"id":31,"localName":"返回按钮","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BackButton属性","desc":["【color】: 颜色 【Color】","【style】: 按钮样式 【ButtonStyle?】","【onPressed】: 点击事件 【Function】"," onPressed为空会退出当前栈"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_en-US.json deleted file mode 100644 index d0a12532a..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":" A \"back\" icon that's appropriate for the current [TargetPlatform].","fields":[],"id":272,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BackButtonIcon Effect","desc":["The _ActionIcon component adapts the back button icon for different platforms according to the ActionIconTheme."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_zh-CN.json deleted file mode 100644 index 8d4f0d49f..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":"适合当前 [TargetPlatform] 的\"返回\"图标。","fields":[],"id":272,"localName":"返回按钮图标","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BackButtonIcon 效果","desc":["通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的返回按钮图标。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_en-US.json b/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_en-US.json deleted file mode 100644 index 27e115a58..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackButtonListener","path":"/src/widgets/router.dart","parents":["StatefulWidget","Widget"],"desc":" A convenience widget that registers a callback for when the back button is pressed.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"onBackButtonPressed","type":"ValueGetter>","required":true,"desc":"The callback function that will be called when the back button is pressed."}],"id":366,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_zh-CN.json deleted file mode 100644 index 1b44432da..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackButtonListener","path":"/src/widgets/router.dart","parents":["StatefulWidget","Widget"],"desc":"一个便利小部件,用于注册按下返回按钮时的回调。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"onBackButtonPressed","type":"ValueGetter>","required":true,"desc":"按下返回按钮时将调用的回调函数。"}],"id":366,"localName":"BackButtonListener","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_en-US.json b/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_en-US.json deleted file mode 100644 index 2f7288ba8..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackdropFilter","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that applies a filter to the existing painted content and then paints [child].","fields":[{"name":"filter","type":"ui.ImageFilter","required":true,"desc":"The image filter to apply to the existing painted content before painting the child."},{"name":"blendMode","type":"BlendMode","required":true,"desc":"The blend mode to use to apply the filtered background content onto the background surface."},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not to apply the backdrop filter operation to the child of this widget."},{"name":"backdropGroupKey","type":"BackdropKey?","desc":"The [BackdropKey] that identifies the backdrop this filter will apply to."}],"id":278,"lever":4,"family":2,"linkIds":[88,97,67],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of BackdropFilter","desc":["【child】: Child component 【Widget】","【filter】: Filter 【ImageFilter】","ImageFilter.blur can achieve Gaussian blur by specifying the x and y blur factors."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_zh-CN.json deleted file mode 100644 index f228b5815..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackdropFilter","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对现有绘制内容应用滤镜然后绘制 [child] 的小部件。","fields":[{"name":"filter","type":"ui.ImageFilter","required":true,"desc":"在绘制子项之前应用于现有绘制内容的图像滤镜。"},{"name":"blendMode","type":"BlendMode","required":true,"desc":"用于将过滤的背景内容应用到背景表面的混合模式。"},{"name":"enabled","type":"bool","required":true,"desc":"是否对此小部件的子项应用背景滤镜操作。"},{"name":"backdropGroupKey","type":"BackdropKey?","desc":"标识此滤镜将应用到的背景的 [BackdropKey]。"}],"id":278,"localName":"背景滤镜","lever":4,"family":2,"linkIds":[88,97,67],"nodes":[{"file":"node1_base.dart","name":"BackdropFilter基本使用","desc":["【child】 : 孩子组件 【Widget】","【filter】 : 过滤器 【ImageFilter】","ImageFilter.blur可以实现高斯模糊,指定x,y模糊因子。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_en-US.json deleted file mode 100644 index 05e616f64..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackdropGroup","path":"/src/widgets/basic.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" A widget that establishes a shared backdrop layer for all child [BackdropFilter] widgets that opt into using it.","fields":[{"name":"backdropKey","type":"BackdropKey","required":true,"desc":"The backdrop key this backdrop group will use with shared child layers."}],"id":367,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_zh-CN.json deleted file mode 100644 index 21006a441..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackdropGroup","path":"/src/widgets/basic.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为所有选择使用它的子 [BackdropFilter] 小部件建立共享背景层的小部件。","fields":[{"name":"backdropKey","type":"BackdropKey","required":true,"desc":"此背景组将与共享子层一起使用的背景键。"}],"id":367,"localName":"BackdropGroup","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Badge/Badge_en-US.json b/modules/widget_system/widgets/doc/widgets/Badge/Badge_en-US.json deleted file mode 100644 index e5b0052d4..000000000 --- a/modules/widget_system/widgets/doc/widgets/Badge/Badge_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Badge","path":"/src/material/badge.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design \"badge\".","fields":[{"name":"backgroundColor","type":"Color?","desc":"The badge's fill color."},{"name":"textColor","type":"Color?","desc":"The color of the badge's [label] text."},{"name":"smallSize","type":"double?","desc":"The diameter of the badge if [label] is null."},{"name":"largeSize","type":"double?","desc":"The badge's height if [label] is non-null."},{"name":"textStyle","type":"TextStyle?","desc":"The [DefaultTextStyle] for the badge's label."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The padding added to the badge's label."},{"name":"alignment","type":"AlignmentGeometry?","desc":"Combined with [offset] to determine the location of the [label] relative to the [child]."},{"name":"offset","type":"Offset?","desc":"Combined with [alignment] to determine the location of the [label] relative to the [child]."},{"name":"label","type":"Widget?","desc":"The badge's content, typically a [Text] widget that contains 1 to 4 characters."},{"name":"isLabelVisible","type":"bool","required":true,"desc":"If false, the badge's [label] is not included."},{"name":"child","type":"Widget?","desc":"The widget that the badge is stacked on top of."}],"id":258,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node_1.dart","name":"Usage of Badge Dot Marker","desc":["【backgroundColor】: Background color 【Color?】","【isLabelVisible】: Whether to display the marker 【bool】","【smallSize】: Diameter when there is no label 【double?】","【child】: Child component 【Widget?】"]},{"file":"node_2.dart","name":"Badge Label Marker","desc":["【label】: Title component 【Widget?】","【textStyle】: Title color 【TextStyle?】","【textColor】: Title style 【Color?】","【padding】: Title margin 【EdgeInsetsGeometry?】","【largeSize】: Height when there is a label 【double?】"]},{"file":"node_3.dart","name":"Badge Offset","desc":["【offset】: Marker offset 【Offset?】","【alignment】: Title offset 【AlignmentDirectional?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Badge/Badge_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Badge/Badge_zh-CN.json deleted file mode 100644 index c79a3528f..000000000 --- a/modules/widget_system/widgets/doc/widgets/Badge/Badge_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Badge","path":"/src/material/badge.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design \",徽章\"。","fields":[{"name":"backgroundColor","type":"Color?","desc":"徽章的填充颜色。"},{"name":"textColor","type":"Color?","desc":"徽章 [label] 文本的颜色。"},{"name":"smallSize","type":"double?","desc":"如果 [label] 为 null,徽章的直径。"},{"name":"largeSize","type":"double?","desc":"如果 [label] 非空,徽章的高度。"},{"name":"textStyle","type":"TextStyle?","desc":"徽章标签的 [DefaultTextStyle]。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"添加到徽章标签的内边距。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"与 [offset] 结合确定 [label] 相对于 [child] 的位置。"},{"name":"offset","type":"Offset?","desc":"与 [alignment] 结合确定 [label] 相对于 [child] 的位置。"},{"name":"label","type":"Widget?","desc":"徽章的内容,通常是包含 1 到 4 个字符的 [Text] 小部件。"},{"name":"isLabelVisible","type":"bool","required":true,"desc":"如果为 false,则不包含徽章的 [label]。"},{"name":"child","type":"Widget?","desc":"徽章堆叠在其上方的小部件。"}],"id":258,"localName":"标记组件","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node_1.dart","name":"Badge 圆点标记的使用","desc":["【backgroundColor】 : 背景色 【Color?】","【isLabelVisible】 : 是否显示标记 【bool】","【smallSize】 : 无标签时直径 【double?】","【child】 : 子组件 【Widget?】"]},{"file":"node_2.dart","name":"Badge 标签标记","desc":["【label】 : 标题组件 【Widget?】","【textStyle】 : 标题颜色 【TextStyle?】","【textColor】 : 标题样式 【Color?】","【padding】 : 标题边距 【EdgeInsetsGeometry?】","【largeSize】 : 有标签时高度 【double?】,"]},{"file":"node_3.dart","name":"Badge 的偏移量","desc":["【offset】 : 标记偏移量 【Offset?】","【alignment】 : 标题偏移 【AlignmentDirectional?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_en-US.json deleted file mode 100644 index aced9a51c..000000000 --- a/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BadgeTheme","path":"/src/material/badge_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that overrides the default color style, and size parameters for [Badge]s in this widget's subtree.","fields":[{"name":"data","type":"BadgeThemeData","required":true,"desc":"Specifies the default color and size overrides for descendant [Badge] widgets."}],"id":368,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_zh-CN.json deleted file mode 100644 index 4ebb77071..000000000 --- a/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BadgeTheme","path":"/src/material/badge_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"一个继承小部件,用于覆盖此小部件子树中 [Badge] 的默认颜色样式和大小参数。","fields":[{"name":"data","type":"BadgeThemeData","required":true,"desc":"为后代 [Badge] 小部件指定默认颜色和大小覆盖。"}],"id":368,"localName":"BadgeTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Banner/Banner_en-US.json b/modules/widget_system/widgets/doc/widgets/Banner/Banner_en-US.json deleted file mode 100644 index ca771789a..000000000 --- a/modules/widget_system/widgets/doc/widgets/Banner/Banner_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Banner","path":"/src/widgets/banner.dart","parents":["StatefulWidget","Widget"],"desc":" Displays a diagonal message above the corner of another widget.","fields":[{"name":"child","type":"Widget?","desc":"The widget to show behind the banner."},{"name":"message","type":"String","required":true,"desc":"The message to show in the banner."},{"name":"textDirection","type":"TextDirection?","desc":"The directionality of the text."},{"name":"location","type":"BannerLocation","required":true,"desc":"Where to show the banner (e.g., the upper right corner)."},{"name":"layoutDirection","type":"TextDirection?","desc":"The directionality of the layout."},{"name":"color","type":"Color","required":true,"desc":"The color of the banner."},{"name":"textStyle","type":"TextStyle","required":true,"desc":"The style of the text shown on the banner."},{"name":"shadow","type":"BoxShadow","required":true,"desc":"The shadow properties for the banner."}],"id":5,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Used to display a badge","desc":["【message】: The text message to display 【String】","【location】: Position*4 【BannerLocation】","【color】: Badge color 【Color】","【child】: Child 【Widget】","【textStyle】: Text style 【TextStyle】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Banner/Banner_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Banner/Banner_zh-CN.json deleted file mode 100644 index 60885513e..000000000 --- a/modules/widget_system/widgets/doc/widgets/Banner/Banner_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Banner","path":"/src/widgets/banner.dart","parents":["StatefulWidget","Widget"],"desc":"在另一个小部件的角落上方显示对角线消息。","fields":[{"name":"child","type":"Widget?","desc":"在横幅后面显示的小部件。"},{"name":"message","type":"String","required":true,"desc":"在横幅中显示的消息。"},{"name":"textDirection","type":"TextDirection?","desc":"文本的方向性。"},{"name":"location","type":"BannerLocation","required":true,"desc":"显示横幅的位置(例如,右上角)。"},{"name":"layoutDirection","type":"TextDirection?","desc":"布局的方向性。"},{"name":"color","type":"Color","required":true,"desc":"横幅的颜色。"},{"name":"textStyle","type":"TextStyle","required":true,"desc":"横幅上显示的文本样式。"},{"name":"shadow","type":"BoxShadow","required":true,"desc":"横幅的阴影属性。"}],"id":5,"localName":"角标组件","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"用于显示一个角标","desc":["【message】 : 显示的文字信息 【String】","【location】 : 位置*4 【BannerLocation】","【color】: 角标颜色 【Color】","【child】: 孩子 【Widget】","【textStyle】: 文字样式 【TextStyle】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_en-US.json b/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_en-US.json deleted file mode 100644 index 343a98d04..000000000 --- a/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Baseline","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that positions its child according to the child's baseline.","fields":[{"name":"baseline","type":"double","required":true,"desc":"The number of logical pixels from the top of this box at which to position the child's baseline."},{"name":"baselineType","type":"TextBaseline","required":true,"desc":"The type of baseline to use for positioning the child."}],"id":75,"lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Baseline","desc":["【child】 : Child component 【Widget】","【baseline】 : Baseline position 【double】","【baselineType】 : Baseline type 【TextBaseline】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_zh-CN.json deleted file mode 100644 index 701d44e6d..000000000 --- a/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Baseline","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"根据子项的基线定位其子项的小部件。","fields":[{"name":"baseline","type":"double","required":true,"desc":"从此盒子顶部开始的逻辑像素数,用于定位子项的基线。"},{"name":"baselineType","type":"TextBaseline","required":true,"desc":"用于定位子项的基线类型。"}],"id":75,"localName":"基线组件","lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Baseline基本使用","desc":["【child】 : 孩子组件 【Widget】","【baseline】 : 基线位置 【double】","【baselineType】 : 基线类型 【TextBaseline】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_en-US.json b/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_en-US.json deleted file mode 100644 index 938fbb779..000000000 --- a/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BlockSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that drops the semantics of all widget that were painted before it in the same semantic container.","fields":[{"name":"blocking","type":"bool","required":true,"desc":"Whether this widget is blocking semantics of all widget that were painted before it in the same semantic container."}],"id":369,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_zh-CN.json deleted file mode 100644 index 98b6986b8..000000000 --- a/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BlockSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"一个小部件,用于丢弃在同一语义容器中在其之前绘制的所有小部件的语义。","fields":[{"name":"blocking","type":"bool","required":true,"desc":"此小部件是否阻止在同一语义容器中在其之前绘制的所有小部件的语义。"}],"id":369,"localName":"BlockSemantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_en-US.json b/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_en-US.json deleted file mode 100644 index f0cdbc9e4..000000000 --- a/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BottomAppBar","path":"/src/material/bottom_app_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A container that is typically used with [Scaffold.bottomNavigationBar].","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space to surround the child inside the bounds of the [BottomAppBar]."},{"name":"color","type":"Color?","desc":"The bottom app bar's background color."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this bottom app bar relative to its parent."},{"name":"shape","type":"NotchedShape?","desc":"The notch that is made for the floating action button."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"notchMargin","type":"double","required":true,"desc":"The margin between the [FloatingActionButton] and the [BottomAppBar]'s notch."},{"name":"surfaceTintColor","type":"Color?","desc":"A custom color for the Material 3 surface-tint elevation effect."},{"name":"shadowColor","type":"Color?","desc":"The color of the shadow below the app bar."},{"name":"height","type":"double?","desc":"The double value used to indicate the height of the [BottomAppBar]."}],"id":61,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of BottomAppBar","desc":["【elevation】: Elevation 【double】","【shape】: Shape 【NotchedShape】","【notchMargin】: Notch Margin 【double】","【color】: Color 【Color】","【child】: Child 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_zh-CN.json deleted file mode 100644 index 3fe91f384..000000000 --- a/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BottomAppBar","path":"/src/material/bottom_app_bar.dart","parents":["StatefulWidget","Widget"],"desc":"通常与 [Scaffold.bottomNavigationBar] 一起使用的容器。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在 [BottomAppBar] 边界内围绕子项的空间量。"},{"name":"color","type":"Color?","desc":"底部应用栏的背景颜色。"},{"name":"elevation","type":"double?","desc":"相对于其父级放置此底部应用栏的 z 坐标。"},{"name":"shape","type":"NotchedShape?","desc":"为浮动操作按钮制作的缺口。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"notchMargin","type":"double","required":true,"desc":"[FloatingActionButton] 和 [BottomAppBar] 缺口之间的边距。"},{"name":"surfaceTintColor","type":"Color?","desc":"Material 3 表面色调高度效果的自定义颜色。"},{"name":"shadowColor","type":"Color?","desc":"应用栏下方阴影的颜色。"},{"name":"height","type":"double?","desc":"用于指示 [BottomAppBar] 高度的双精度值。"}],"id":61,"localName":"底部导航","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BottomAppBar基本用法","desc":["【elevation】 : 影深 【double】","【shape】 : 形状 【NotchedShape】","【notchMargin】 : 间隔距离 【double】","【color】 : 颜色 【Color】","【child】 : 孩子 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_en-US.json b/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_en-US.json deleted file mode 100644 index beaec3f6c..000000000 --- a/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BottomNavigationBar","path":"/src/material/bottom_navigation_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A material widget that's displayed at the bottom of an app for selecting among a small number of views, typically between three and five.","fields":[{"name":"items","type":"List","required":true,"desc":"Defines the appearance of the button items that are arrayed within the bottom navigation bar."},{"name":"onTap","type":"ValueChanged?","desc":"Called when one of the [items] is tapped."},{"name":"currentIndex","type":"int","required":true,"desc":"The index into [items] for the current active [BottomNavigationBarItem]."},{"name":"elevation","type":"double?","desc":"The z-coordinate of this [BottomNavigationBar]."},{"name":"type","type":"BottomNavigationBarType?","desc":"Defines the layout and behavior of a [BottomNavigationBar]."},{"name":"backgroundColor","type":"Color?","desc":"The color of the [BottomNavigationBar] itself."},{"name":"iconSize","type":"double","required":true,"desc":"The size of all of the [BottomNavigationBarItem] icons."},{"name":"selectedItemColor","type":"Color?","desc":"The color of the selected [BottomNavigationBarItem.icon] and [BottomNavigationBarItem.label]."},{"name":"unselectedItemColor","type":"Color?","desc":"The color of the unselected [BottomNavigationBarItem.icon] and [BottomNavigationBarItem.label]s."},{"name":"selectedIconTheme","type":"IconThemeData?","desc":"The size, opacity, and color of the icon in the currently selected [BottomNavigationBarItem.icon]."},{"name":"unselectedIconTheme","type":"IconThemeData?","desc":"The size, opacity, and color of the icon in the currently unselected [BottomNavigationBarItem.icon]s."},{"name":"selectedLabelStyle","type":"TextStyle?","desc":"The [TextStyle] of the [BottomNavigationBarItem] labels when they are selected."},{"name":"unselectedLabelStyle","type":"TextStyle?","desc":"The [TextStyle] of the [BottomNavigationBarItem] labels when they are not selected."},{"name":"selectedFontSize","type":"double","required":true,"desc":"The font size of the [BottomNavigationBarItem] labels when they are selected."},{"name":"unselectedFontSize","type":"double","required":true,"desc":"The font size of the [BottomNavigationBarItem] labels when they are not selected."},{"name":"showUnselectedLabels","type":"bool?","desc":"Whether the labels are shown for the unselected [BottomNavigationBarItem]s."},{"name":"showSelectedLabels","type":"bool?","desc":"Whether the labels are shown for the selected [BottomNavigationBarItem]."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the items."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"landscapeLayout","type":"BottomNavigationBarLandscapeLayout?","desc":"The arrangement of the bar's [items] when the enclosing [MediaQueryData.orientation] is [Orientation.landscape]."},{"name":"useLegacyColorScheme","type":"bool","required":true,"desc":"This flag is controlling how [BottomNavigationBar] is going to use the colors provided by the [selectedIconTheme], [unselectedIconTheme], [selectedItemColor], [unselectedItemColor]. The default value is `true` as the new theming logic is a breaking change. To opt-in the new theming logic set the flag to `false`"}],"id":60,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of BottomNavigationBar","desc":["【currentIndex】 : Current index 【int】","【elevation】 : Shadow depth 【double】","【type】 : Type*2 【BottomNavigationBarType】","【fixedColor】 : Color when type is fix 【Color】","【backgroundColor】 : Background color 【Color】","【iconSize】 : Icon size 【double】","【selectedLabelStyle】 : Selected text style 【TextStyle】","【unselectedLabelStyle】 : Unselected text style 【TextStyle】","【showUnselectedLabels】 : Show unselected labels 【bool】","【showSelectedLabels】 : Show selected labels 【bool】","【items】 : Items 【List】","【onTap】 : Click event 【Function(int)】"]},{"file":"node2_page.dart","name":"Page Switching with PageView","desc":["Use the controller for page switching during onTap"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_zh-CN.json deleted file mode 100644 index 2a4ce1b3f..000000000 --- a/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BottomNavigationBar","path":"/src/material/bottom_navigation_bar.dart","parents":["StatefulWidget","Widget"],"desc":"显示在应用底部的 Material 小部件,用于在少量视图中进行选择,通常在三到五个之间。","fields":[{"name":"items","type":"List","required":true,"desc":"定义排列在底部导航栏内的按钮项的外观。"},{"name":"onTap","type":"ValueChanged?","desc":"点击 [items] 中的一个时调用。"},{"name":"currentIndex","type":"int","required":true,"desc":"当前活动 [BottomNavigationBarItem] 在 [items] 中的索引。"},{"name":"elevation","type":"double?","desc":"此 [BottomNavigationBar] 的 z 坐标。"},{"name":"type","type":"BottomNavigationBarType?","desc":"定义 [BottomNavigationBar] 的布局和行为。"},{"name":"backgroundColor","type":"Color?","desc":"[BottomNavigationBar] 本身的颜色。"},{"name":"iconSize","type":"double","required":true,"desc":"所有 [BottomNavigationBarItem] 图标的大小。"},{"name":"selectedItemColor","type":"Color?","desc":"选中的 [BottomNavigationBarItem.icon] 和 [BottomNavigationBarItem.label] 的颜色。"},{"name":"unselectedItemColor","type":"Color?","desc":"未选中的 [BottomNavigationBarItem.icon] 和 [BottomNavigationBarItem.label] 的颜色。"},{"name":"selectedIconTheme","type":"IconThemeData?","desc":"当前选中的 [BottomNavigationBarItem.icon] 中图标的大小、不透明度和颜色。"},{"name":"unselectedIconTheme","type":"IconThemeData?","desc":"当前未选中的 [BottomNavigationBarItem.icon] 中图标的大小、不透明度和颜色。"},{"name":"selectedLabelStyle","type":"TextStyle?","desc":"选中时 [BottomNavigationBarItem] 标签的 [TextStyle]。"},{"name":"unselectedLabelStyle","type":"TextStyle?","desc":"未选中时 [BottomNavigationBarItem] 标签的 [TextStyle]。"},{"name":"selectedFontSize","type":"double","required":true,"desc":"选中时 [BottomNavigationBarItem] 标签的字体大小。"},{"name":"unselectedFontSize","type":"double","required":true,"desc":"未选中时 [BottomNavigationBarItem] 标签的字体大小。"},{"name":"showUnselectedLabels","type":"bool?","desc":"是否为未选中的 [BottomNavigationBarItem] 显示标签。"},{"name":"showSelectedLabels","type":"bool?","desc":"是否为选中的 [BottomNavigationBarItem] 显示标签。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在项目上时的光标。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"landscapeLayout","type":"BottomNavigationBarLandscapeLayout?","desc":"当包围的 [MediaQueryData.orientation] 为 [Orientation.landscape] 时,栏的 [items] 的排列。"},{"name":"useLegacyColorScheme","type":"bool","required":true,"desc":"此标志控制 [BottomNavigationBar] 如何使用 [selectedIconTheme]、[unselectedIconTheme]、[selectedItemColor]、[unselectedItemColor] 提供的颜色。默认值为 `true`,因为新的主题逻辑是一个破坏性更改。要选择新的主题逻辑,请将标志设置为 `false`"}],"id":60,"localName":"底部导航","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BottomNavigationBar基本使用","desc":["【currentIndex】 : 当前索引 【int】","【elevation】 : 影深 【double】","【type】 : 类型*2 【BottomNavigationBarType】","【fixedColor】 : type为fix的颜色 【Color】","【backgroundColor】 : 背景色 【Color】","【iconSize】 : 图标大小 【double】","【selectedLabelStyle】 : 选中文字样式 【TextStyle】","【unselectedLabelStyle】 : 未选中文字样式 【TextStyle】","【showUnselectedLabels】 : 显示未选中标签 【bool】","【showSelectedLabels】 : 显示选中标签 【bool】","【items】 : 条目 【List】","【onTap】 : 点击事件 【Function(int)】"]},{"file":"node2_page.dart","name":"可结合PageView进行切页","desc":["在onTap时进行使用控制器进行切页"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_en-US.json deleted file mode 100644 index d2402bb48..000000000 --- a/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BottomNavigationBarTheme","path":"/src/material/bottom_navigation_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a bottom navigation bar theme to descendant [BottomNavigationBar] widgets.","fields":[{"name":"data","type":"BottomNavigationBarThemeData","required":true,"desc":"The properties used for all descendant [BottomNavigationBar] widgets."}],"id":371,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_zh-CN.json deleted file mode 100644 index 8c53e6265..000000000 --- a/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BottomNavigationBarTheme","path":"/src/material/bottom_navigation_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将底部导航栏主题应用于后代 [BottomNavigationBar] 小部件。","fields":[{"name":"data","type":"BottomNavigationBarThemeData","required":true,"desc":"用于所有后代 [BottomNavigationBar] 小部件的属性。"}],"id":371,"localName":"BottomNavigationBarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_en-US.json b/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_en-US.json deleted file mode 100644 index fed4f770e..000000000 --- a/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BottomSheet","path":"/src/material/bottom_sheet.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design bottom sheet.","fields":[{"name":"animationController","type":"AnimationController?","desc":"The animation controller that controls the bottom sheet's entrance and exit animations."},{"name":"onClosing","type":"VoidCallback","required":true,"desc":"Called when the bottom sheet begins to close."},{"name":"builder","type":"WidgetBuilder","required":true,"desc":"A builder for the contents of the sheet."},{"name":"enableDrag","type":"bool","required":true,"desc":"If true, the bottom sheet can be dragged up and down and dismissed by swiping downwards."},{"name":"showDragHandle","type":"bool?","desc":"Specifies whether a drag handle is shown."},{"name":"dragHandleColor","type":"Color?","desc":"The bottom sheet drag handle's color."},{"name":"dragHandleSize","type":"Size?","desc":"Defaults to [BottomSheetThemeData.dragHandleSize]. If that is also null, defaults to Size(32, 4)."},{"name":"onDragStart","type":"BottomSheetDragStartHandler?","desc":"Called when the user begins dragging the bottom sheet vertically, if [enableDrag] is true."},{"name":"onDragEnd","type":"BottomSheetDragEndHandler?","desc":"Called when the user stops dragging the bottom sheet, if [enableDrag] is true."},{"name":"backgroundColor","type":"Color?","desc":"The bottom sheet's background color."},{"name":"shadowColor","type":"Color?","desc":"The color of the shadow below the sheet."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this material relative to its parent."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the bottom sheet."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"constraints","type":"BoxConstraints?","desc":"Defines minimum and maximum sizes for a [BottomSheet]."}],"id":142,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of BottomSheet","desc":["【builder】: Component constructor 【WidgetBuilder】","【backgroundColor】: Background color 【Color】","【elevation】: Shadow depth 【double】","【shape】: Shape 【ShapeBorder】","【onClosing】: Closing callback 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_zh-CN.json deleted file mode 100644 index e99fe53a6..000000000 --- a/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BottomSheet","path":"/src/material/bottom_sheet.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 底部表单。","fields":[{"name":"animationController","type":"AnimationController?","desc":"控制底部表单进入和退出动画的动画控制器。"},{"name":"onClosing","type":"VoidCallback","required":true,"desc":"底部表单开始关闭时调用。"},{"name":"builder","type":"WidgetBuilder","required":true,"desc":"表单内容的构建器。"},{"name":"enableDrag","type":"bool","required":true,"desc":"如果为 true,底部表单可以上下拖动并通过向下滑动来关闭。"},{"name":"showDragHandle","type":"bool?","desc":"指定是否显示拖动手柄。"},{"name":"dragHandleColor","type":"Color?","desc":"底部表单拖动手柄的颜色。"},{"name":"dragHandleSize","type":"Size?","desc":"默认为 [BottomSheetThemeData.dragHandleSize]。如果也为 null,则默认为 Size(32, 4)。"},{"name":"onDragStart","type":"BottomSheetDragStartHandler?","desc":"如果 [enableDrag] 为 true,当用户开始垂直拖动底部表单时调用。"},{"name":"onDragEnd","type":"BottomSheetDragEndHandler?","desc":"如果 [enableDrag] 为 true,当用户停止拖动底部表单时调用。"},{"name":"backgroundColor","type":"Color?","desc":"底部表单的背景颜色。"},{"name":"shadowColor","type":"Color?","desc":"表单下方阴影的颜色。"},{"name":"elevation","type":"double?","desc":"相对于其父级放置此材料的 z 坐标。"},{"name":"shape","type":"ShapeBorder?","desc":"底部表单的形状。"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"constraints","type":"BoxConstraints?","desc":"定义 [BottomSheet] 的最小和最大大小。"}],"id":142,"localName":"底部抽屉","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BottomSheet基本使用","desc":["【builder】 : 组件构造器 【WidgetBuilder】","【backgroundColor】 : 背景色 【Color】","【elevation】 : 影深 【double】","【shape】 : 形状 【ShapeBorder】","【onClosing】 : 关闭回调 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_en-US.json deleted file mode 100644 index 4d8cb28a3..000000000 --- a/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BoxScrollView","path":"/src/widgets/scroll_view.dart","abstract":true,"parents":["ScrollView","StatelessWidget","Widget"],"desc":" A [ScrollView] that uses a single child layout model.","fields":[{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the children."}],"id":350,"lever":1,"family":0,"linkIds":[183,162,163],"nodes":[{"file":"node1_base.dart","name":"Introduction to BoxScrollView","desc":["【reverse】 : Whether to reverse 【bool】","【scrollDirection】 : Scroll direction 【Axis】","【cacheExtent】 : Cache length 【double】","【dragStartBehavior】 : Drag start behavior 【DragStartBehavior】","【clipBehavior】 : Clip behavior 【ClipBehavior】","【controller】 : Controller 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_zh-CN.json deleted file mode 100644 index caea2438b..000000000 --- a/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BoxScrollView","path":"/src/widgets/scroll_view.dart","abstract":true,"parents":["ScrollView","StatelessWidget","Widget"],"desc":"使用单子布局模型的 [ScrollView]。","fields":[{"name":"padding","type":"EdgeInsetsGeometry?","desc":"子项的插入空间量。"}],"id":350,"localName":"盒滑动视图","lever":1,"family":0,"linkIds":[183,162,163],"nodes":[{"file":"node1_base.dart","name":"BoxScrollView 介绍","desc":["【reverse】 : 是否反向 【bool】","【scrollDirection】 : 滑动方向 【Axis】","【cacheExtent】 : 缓存长 【double】","【dragStartBehavior】 : 拖动行为 【DragStartBehavior】","【clipBehavior】 : 裁剪行为 【ClipBehavior】","【controller】 : 控制器 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Builder/Builder_en-US.json b/modules/widget_system/widgets/doc/widgets/Builder/Builder_en-US.json deleted file mode 100644 index b4417931b..000000000 --- a/modules/widget_system/widgets/doc/widgets/Builder/Builder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Builder","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":" A stateless utility widget whose [build] method uses its [builder] callback to create the widget's child.","fields":[{"name":"builder","type":"WidgetBuilder","required":true,"desc":"Called to obtain the child widget."}],"id":202,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Usage of Builder","desc":["【builder】: Component Constructor 【WidgetBuilder】","Using `XXX.of(context)` to obtain a state object of a certain class within the same class may result in a 'context lag' error, which can be resolved using Builder."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Builder/Builder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Builder/Builder_zh-CN.json deleted file mode 100644 index 2fe0ac7fa..000000000 --- a/modules/widget_system/widgets/doc/widgets/Builder/Builder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Builder","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":"一个无状态实用小部件,其 [build] 方法使用其 [builder] 回调来创建小部件的子项。","fields":[{"name":"builder","type":"WidgetBuilder","required":true,"desc":"调用以获取子小部件。"}],"id":202,"localName":"构造器","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Builder的使用","desc":["【builder】 : 组件构造器 【WidgetBuilder】","同一个类中使用`XXX.of(context)`获取某类状态对象方法会存在`上下文滞后`的错误,使用Builder解决。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_en-US.json b/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_en-US.json deleted file mode 100644 index 496fd226e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ButtonBar","path":"/src/material/button_bar.dart","parents":["StatelessWidget","Widget"],"desc":" An end-aligned row of buttons, laying out into a column if there is not enough horizontal space.","fields":[{"name":"alignment","type":"MainAxisAlignment?","desc":"How the children should be placed along the horizontal axis."},{"name":"mainAxisSize","type":"MainAxisSize?","desc":"How much horizontal space is available. See [Row.mainAxisSize]."},{"name":"buttonTextTheme","type":"ButtonTextTheme?","desc":"Overrides the surrounding [ButtonBarThemeData.buttonTextTheme] to define a button's base colors, size, internal padding and shape."},{"name":"buttonMinWidth","type":"double?","desc":"Overrides the surrounding [ButtonThemeData.minWidth] to define a button's minimum width."},{"name":"buttonHeight","type":"double?","desc":"Overrides the surrounding [ButtonThemeData.height] to define a button's minimum height."},{"name":"buttonPadding","type":"EdgeInsetsGeometry?","desc":"Overrides the surrounding [ButtonThemeData.padding] to define the padding for a button's child (typically the button's label)."},{"name":"buttonAlignedDropdown","type":"bool?","desc":"Overrides the surrounding [ButtonThemeData.alignedDropdown] to define whether a [DropdownButton] menu's width will match the button's width."},{"name":"layoutBehavior","type":"ButtonBarLayoutBehavior?","desc":"Defines whether a [ButtonBar] should size itself with a minimum size constraint or with padding."},{"name":"overflowDirection","type":"VerticalDirection?","desc":"Defines the vertical direction of a [ButtonBar]'s children if it overflows."},{"name":"overflowButtonSpacing","type":"double?","desc":"The spacing between buttons when the button bar overflows."},{"name":"children","type":"List","required":true,"desc":"The buttons to arrange horizontally."}],"id":29,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ButtonBar Alignment","desc":["【alignment】: Alignment 【MainAxisAlignment】","【children】: Child components 【List】"]},{"file":"node2_padding.dart","name":"ButtonBar Margin and Height","desc":["【buttonPadding】: Padding 【EdgeInsetsGeometry】","【buttonHeight】: Height 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_zh-CN.json deleted file mode 100644 index fa67aef23..000000000 --- a/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ButtonBar","path":"/src/material/button_bar.dart","parents":["StatelessWidget","Widget"],"desc":"末端对齐的按钮行,如果没有足够的水平空间则布局为列。","fields":[{"name":"alignment","type":"MainAxisAlignment?","desc":"子项应如何沿水平轴放置。"},{"name":"mainAxisSize","type":"MainAxisSize?","desc":"有多少水平空间可用。参见 [Row.mainAxisSize]。"},{"name":"buttonTextTheme","type":"ButtonTextTheme?","desc":"覆盖周围的 [ButtonBarThemeData.buttonTextTheme] 以定义按钮的基本颜色、大小、内部内边距和形状。"},{"name":"buttonMinWidth","type":"double?","desc":"覆盖周围的 [ButtonThemeData.minWidth] 以定义按钮的最小宽度。"},{"name":"buttonHeight","type":"double?","desc":"覆盖周围的 [ButtonThemeData.height] 以定义按钮的最小高度。"},{"name":"buttonPadding","type":"EdgeInsetsGeometry?","desc":"覆盖周围的 [ButtonThemeData.padding] 以定义按钮子项(通常是按钮标签)的内边距。"},{"name":"buttonAlignedDropdown","type":"bool?","desc":"覆盖周围的 [ButtonThemeData.alignedDropdown] 以定义 [DropdownButton] 菜单的宽度是否与按钮宽度匹配。"},{"name":"layoutBehavior","type":"ButtonBarLayoutBehavior?","desc":"定义 [ButtonBar] 是否应使用最小大小约束或内边距来调整自身大小。"},{"name":"overflowDirection","type":"VerticalDirection?","desc":"定义 [ButtonBar] 子项溢出时的垂直方向。"},{"name":"overflowButtonSpacing","type":"double?","desc":"按钮栏溢出时按钮之间的间距。"},{"name":"children","type":"List","required":true,"desc":"要水平排列的按钮。"}],"id":29,"localName":"按钮栏","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ButtonBar对齐方式","desc":["【alignment】: 对齐方式 【MainAxisAlignment】","【children】: 子组件集 【List】"]},{"file":"node2_padding.dart","name":"ButtonBar边距和高","desc":["【buttonPadding】: 内边距 【EdgeInsetsGeometry】","【buttonHeight】: 高 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_en-US.json deleted file mode 100644 index f253d6f3e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ButtonBarTheme","path":"/src/material/button_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a button bar theme to descendant [ButtonBar] widgets.","fields":[{"name":"data","type":"ButtonBarThemeData","required":true,"desc":"The properties used for all descendant [ButtonBar] widgets."}],"id":338,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ButtonBarTheme","desc":["You can specify the ButtonBarThemeData properties to set default styles for descendant ButtonBar components, such as alignment, style, margins, etc. You can also use ButtonBarTheme.of to get the theme properties of ButtonBar."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_zh-CN.json deleted file mode 100644 index 6a2d4d378..000000000 --- a/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ButtonBarTheme","path":"/src/material/button_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将按钮栏主题应用于后代 [ButtonBar] 小部件。","fields":[{"name":"data","type":"ButtonBarThemeData","required":true,"desc":"用于所有后代 [ButtonBar] 小部件的属性。"}],"id":338,"localName":"按钮条主题","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ButtonBarTheme基本使用","desc":["可指定ButtonBarThemeData数据属性为【后代】的ButtonBar组件设置默认样式,如对齐方式、样式、边距等。也可以用ButtonBarTheme.of获取ButtonBar的主题属性。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_en-US.json b/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_en-US.json deleted file mode 100644 index 987eb205f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ButtonStyleButton","path":"/src/material/button_style_button.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" The base [StatefulWidget] class for buttons whose style is defined by a [ButtonStyle] object.","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"Called when the button is tapped or otherwise activated."},{"name":"onLongPress","type":"VoidCallback?","desc":"Called when the button is long-pressed."},{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the button response area."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"isSemanticButton","type":"bool?","desc":"Determine whether this subtree represents a button."},{"name":"iconAlignment","type":"IconAlignment?","desc":"{@macro flutter.material.ButtonStyleButton.iconAlignment}"},{"name":"tooltip","type":"String?","desc":"Text that describes the action that will occur when the button is pressed or hovered over."},{"name":"child","type":"Widget?","desc":"Typically the button's label."}],"id":372,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_zh-CN.json deleted file mode 100644 index 45b9f114f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_zh-CN.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "name": "ButtonStyleButton", - "path": "/src/material/button_style_button.dart", - "abstract": true, - "parents": [ - "StatefulWidget", - "Widget" - ], - "desc": "样式由 [ButtonStyle] 对象定义的按钮的基础 [StatefulWidget] 类。", - "fields": [ - { - "name": "onPressed", - "type": "VoidCallback?", - "desc": "点击或以其他方式激活按钮时调用。" - }, - { - "name": "onLongPress", - "type": "VoidCallback?", - "desc": "长按按钮时调用。" - }, - { - "name": "onHover", - "type": "ValueChanged?", - "desc": "指针进入或退出按钮响应区域时调用。" - }, - { - "name": "onFocusChange", - "type": "ValueChanged?", - "desc": "焦点改变时调用的处理程序。" - }, - { - "name": "style", - "type": "ButtonStyle?", - "desc": "自定义此按钮的外观。" - }, - { - "name": "clipBehavior", - "type": "Clip?", - "desc": "{@macro flutter.material.Material.clipBehavior}" - }, - { - "name": "focusNode", - "type": "FocusNode?", - "desc": "{@macro flutter.widgets.Focus.focusNode}" - }, - { - "name": "autofocus", - "type": "bool", - "required": true, - "desc": "{@macro flutter.widgets.Focus.autofocus}" - }, - { - "name": "statesController", - "type": "MaterialStatesController?", - "desc": "{@macro flutter.material.inkwell.statesController}" - }, - { - "name": "isSemanticButton", - "type": "bool?", - "desc": "确定此子树是否表示按钮。" - }, - { - "name": "iconAlignment", - "type": "IconAlignment?", - "desc": "{@macro flutter.material.ButtonStyleButton.iconAlignment}" - }, - { - "name": "tooltip", - "type": "String?", - "desc": "描述按下或悬停按钮时将发生的操作的文本。" - }, - { - "name": "child", - "type": "Widget?", - "desc": "通常是按钮的标签。" - } - ], - "id": 372, - "localName": "ButtonStyleButton", - "lever": 3, - "family": 3, - "linkIds": [], - "nodes": [] -} diff --git a/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_en-US.json deleted file mode 100644 index 4cd3d9a45..000000000 --- a/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ButtonTheme","path":"/src/material/button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Used with [ButtonThemeData] to configure the color and geometry of buttons.","fields":[{"name":"data","type":"ButtonThemeData","required":true,"desc":"Specifies the color and geometry of buttons."}],"id":326,"lever":3,"family":5,"linkIds":[23,25,26,27],"nodes":[{"file":"node1_base.dart","name":"ButtonTheme Usage","desc":["The property parameters are the same as MaterialButton. You can obtain button theme data through ButtonTheme.of, \"","and also set default styles for button components that are descendants of ButtonTheme, including color, shape, size, etc."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_zh-CN.json deleted file mode 100644 index 9fad72e75..000000000 --- a/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ButtonTheme","path":"/src/material/button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"与 [ButtonThemeData] 一起使用来配置按钮的颜色和几何形状。","fields":[{"name":"data","type":"ButtonThemeData","required":true,"desc":"指定按钮的颜色和几何形状。"}],"id":326,"localName":"按钮样式","lever":3,"family":5,"linkIds":[23,25,26,27],"nodes":[{"file":"node1_base.dart","name":"ButtonTheme使用","desc":["属性参数同MaterialButton,可以通过ButtonTheme.of获取按钮主题数据,\"","也可以为ButtonTheme【后代】的按钮组件设置默认样式,包括颜色、形状、尺寸等。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_en-US.json b/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_en-US.json deleted file mode 100644 index e35e281bb..000000000 --- a/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CalendarDatePicker","path":"/src/material/calendar_date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" Displays a grid of days for a given month and allows the user to select a date.","fields":[{"name":"initialDate","type":"DateTime?","desc":"The initially selected [DateTime] that the picker should display."},{"name":"firstDate","type":"DateTime","required":true,"desc":"The earliest allowable [DateTime] that the user can select."},{"name":"lastDate","type":"DateTime","required":true,"desc":"The latest allowable [DateTime] that the user can select."},{"name":"currentDate","type":"DateTime","required":true,"desc":"The [DateTime] representing today. It will be highlighted in the day grid."},{"name":"onDateChanged","type":"ValueChanged","required":true,"desc":"Called when the user selects a date in the picker."},{"name":"onDisplayedMonthChanged","type":"ValueChanged?","desc":"Called when the user navigates to a new month/year in the picker."},{"name":"initialCalendarMode","type":"DatePickerMode","required":true,"desc":"The initial display of the calendar picker."},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"Function to provide full control over which dates in the calendar can be selected."},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":373,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_zh-CN.json deleted file mode 100644 index 5e6f9c116..000000000 --- a/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CalendarDatePicker","path":"/src/material/calendar_date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"显示给定月份的日期网格并允许用户选择日期。","fields":[{"name":"initialDate","type":"DateTime?","desc":"选择器应显示的初始选中 [DateTime]。"},{"name":"firstDate","type":"DateTime","required":true,"desc":"用户可以选择的最早允许的 [DateTime]。"},{"name":"lastDate","type":"DateTime","required":true,"desc":"用户可以选择的最晚允许的 [DateTime]。"},{"name":"currentDate","type":"DateTime","required":true,"desc":"表示今天的 [DateTime]。它将在日期网格中突出显示。"},{"name":"onDateChanged","type":"ValueChanged","required":true,"desc":"用户在选择器中选择日期时调用。"},{"name":"onDisplayedMonthChanged","type":"ValueChanged?","desc":"用户在选择器中导航到新月份/年份时调用。"},{"name":"initialCalendarMode","type":"DatePickerMode","required":true,"desc":"日历选择器的初始显示。"},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"提供对日历中哪些日期可以选择的完全控制的函数。"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":373,"localName":"CalendarDatePicker","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_en-US.json b/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_en-US.json deleted file mode 100644 index 36fa96eaf..000000000 --- a/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CallbackShortcuts","path":"/src/widgets/shortcuts.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that binds key combinations to specific callbacks.","fields":[{"name":"bindings","type":"Map","required":true,"desc":"A map of key combinations to callbacks used to define the shortcut bindings."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":283,"lever":3,"family":2,"linkIds":[282,284],"nodes":[{"file":"node1.dart","name":"Shortcut Usage","desc":["After activating focus in the example, the Ctrl+↑ and Ctrl+↓ key combinations can increase or decrease the number","【enabled】: Whether it is available 【bool】","【onTapOutside】: Click outside listener 【TapRegionCallback?】","【onTapInside】: Click inside listener 【TapRegionCallback?】","【groupId】: Click area group identifier 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_zh-CN.json deleted file mode 100644 index 482f61efd..000000000 --- a/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CallbackShortcuts","path":"/src/widgets/shortcuts.dart","parents":["StatelessWidget","Widget"],"desc":"将键组合绑定到特定回调的小部件。","fields":[{"name":"bindings","type":"Map","required":true,"desc":"用于定义快捷键绑定的键组合到回调的映射。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":283,"localName":"快捷键回调","lever":3,"family":2,"linkIds":[282,284],"nodes":[{"file":"node1.dart","name":"快捷键使用","desc":["案例中激活焦点后,Ctrl+↑ 和 Ctrl+↓ 组合键可以增加或减少数字","【enabled】 : 是否可用 【bool】","【onTapOutside】 : 点击外界监听 【TapRegionCallback?】","【onTapInside】 : 点击内部监听 【TapRegionCallback?】","【groupId】 : 点击区域组标识 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Card/Card_en-US.json b/modules/widget_system/widgets/doc/widgets/Card/Card_en-US.json deleted file mode 100644 index d84d294b0..000000000 --- a/modules/widget_system/widgets/doc/widgets/Card/Card_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Card","path":"/src/material/card.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design card: a panel with slightly rounded corners and an elevation shadow.","fields":[{"name":"color","type":"Color?","desc":"The card's background color."},{"name":"shadowColor","type":"Color?","desc":"The color to paint the shadow below the card."},{"name":"surfaceTintColor","type":"Color?","desc":"The color used as an overlay on [color] to indicate elevation."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this card. This controls the size of the shadow below the card."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the card's [Material]."},{"name":"borderOnForeground","type":"bool","required":true,"desc":"Whether to paint the [shape] border in front of the [child]."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"The empty space that surrounds the card."},{"name":"semanticContainer","type":"bool","required":true,"desc":"Whether this widget represents a single semantic container, or if false a collection of individual semantic nodes."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":3,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Card can cardify a component","desc":["【elevation】: Shadow depth 【double】","【margin】: Margin 【double】","【color】: Color 【Color】","【child】: Child 【Widget】"]},{"file":"node2_shape.dart","name":"Can achieve clipping effect through the shape property","desc":["【shape】: Shape 【ShapeBorder】","【margin】: Margin 【double】","【color】: Color 【Color】","【child】: Child 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Card/Card_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Card/Card_zh-CN.json deleted file mode 100644 index 60c783690..000000000 --- a/modules/widget_system/widgets/doc/widgets/Card/Card_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Card","path":"/src/material/card.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 卡片:具有略微圆角和高度阴影的面板。","fields":[{"name":"color","type":"Color?","desc":"卡片的背景颜色。"},{"name":"shadowColor","type":"Color?","desc":"绘制卡片下方阴影的颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"用作 [color] 上的叠加层以指示高度的颜色。"},{"name":"elevation","type":"double?","desc":"放置此卡片的 z 坐标。这控制卡片下方阴影的大小。"},{"name":"shape","type":"ShapeBorder?","desc":"卡片 [Material] 的形状。"},{"name":"borderOnForeground","type":"bool","required":true,"desc":"是否在 [child] 前面绘制 [shape] 边框。"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕卡片的空白空间。"},{"name":"semanticContainer","type":"bool","required":true,"desc":"此小部件是否表示单个语义容器,或者如果为 false,则表示单个语义节点的集合。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":3,"localName":"卡片组件","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Card可以让一个组件卡片化","desc":["【elevation】 : 影深 【double】","【margin】: 外边距 【double】","【color】: 颜色 【Color】","【child】: 孩子 【Widget】"]},{"file":"node2_shape.dart","name":"可以通过shape属性实现裁切效果","desc":["【shape】 : 形状 【ShapeBorder】","【margin】: 外边距 【double】","【color】: 颜色 【Color】","【child】: 孩子 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_en-US.json deleted file mode 100644 index 7a0d539dc..000000000 --- a/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CardTheme","path":"/src/material/card_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Defines default property values for descendant [Card] widgets.","fields":[],"id":374,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_zh-CN.json deleted file mode 100644 index 585066f81..000000000 --- a/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CardTheme","path":"/src/material/card_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为后代 [Card] 小部件定义默认属性值。","fields":[],"id":374,"localName":"CardTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_en-US.json b/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_en-US.json deleted file mode 100644 index f1177ac05..000000000 --- a/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CarouselView","path":"/src/material/carousel.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design carousel widget.","fields":[{"name":"padding","type":"EdgeInsets?","desc":"The amount of space to surround each carousel item with."},{"name":"backgroundColor","type":"Color?","desc":"The background color for each carousel item."},{"name":"elevation","type":"double?","desc":"The z-coordinate of each carousel item."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of each carousel item's [Material]."},{"name":"overlayColor","type":"WidgetStateProperty?","desc":"The highlight color to indicate the carousel items are in pressed, hovered or focused states."},{"name":"shrinkExtent","type":"double","required":true,"desc":"The minimum allowable extent (size) in the main axis for carousel items during scrolling transitions."},{"name":"itemSnapping","type":"bool","required":true,"desc":"Whether the carousel should keep scrolling to the next/previous items to maintain the original layout."},{"name":"controller","type":"CarouselController?","desc":"An object that can be used to control the position to which this scroll view is scrolled."},{"name":"scrollDirection","type":"Axis","required":true,"desc":"The [Axis] along which the scroll view's offset increases with each item."},{"name":"reverse","type":"bool","required":true,"desc":"Whether the carousel list scrolls in the reading direction."},{"name":"consumeMaxWeight","type":"bool","required":true,"desc":"Whether the collapsed items are allowed to expand to the max size."},{"name":"onTap","type":"ValueChanged?","desc":"Called when one of the [children] is tapped."},{"name":"enableSplash","type":"bool","required":true,"desc":"Determines whether an [InkWell] will cover each Carousel item."},{"name":"itemExtent","type":"double?","desc":"The extent the children are forced to have in the main axis."},{"name":"flexWeights","type":"List?","desc":"The weights that each visible child should occupy in the viewport."},{"name":"children","type":"List","required":true,"desc":"The child widgets for the carousel."}],"id":237,"lever":4,"family":1,"linkIds":[253,340,160],"nodes":[{"file":"node1_base.dart","name":"CarouselView Basic Usage","desc":["【itemExtent】 : Forced size in the main axis direction 【double】","【shrinkExtent】: Minimum size of the item in the main axis direction during scrolling 【double】","【scrollDirection】 : Scroll axis direction 【Axis?】","【children】: List of child components 【List】"]},{"file":"node2.dart","name":"CarouselView Style Configuration","desc":["【padding】 : Padding 【EdgeInsets? 】","【backgroundColor】 : Background color 【Color? 】","【elevation】 : Shadow depth 【double?】","【shape】 : Shape 【ShapeBorder?】","【controller】 : Controller 【CarouselController?】","【reverse】 : Whether to scroll in reverse 【bool】","【onTap】 : Click event 【ValueChanged? 】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_zh-CN.json deleted file mode 100644 index ebcd75fde..000000000 --- a/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CarouselView","path":"/src/material/carousel.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 轮播小部件。","fields":[{"name":"padding","type":"EdgeInsets?","desc":"围绕每个轮播项的空间量。"},{"name":"backgroundColor","type":"Color?","desc":"每个轮播项的背景颜色。"},{"name":"elevation","type":"double?","desc":"每个轮播项的 z 坐标。"},{"name":"shape","type":"ShapeBorder?","desc":"每个轮播项 [Material] 的形状。"},{"name":"overlayColor","type":"WidgetStateProperty?","desc":"指示轮播项处于按下、悬停或聚焦状态的高亮颜色。"},{"name":"shrinkExtent","type":"double","required":true,"desc":"滚动过渡期间轮播项在主轴上的最小允许范围(大小)。"},{"name":"itemSnapping","type":"bool","required":true,"desc":"轮播是否应继续滚动到下一个/上一个项目以保持原始布局。"},{"name":"controller","type":"CarouselController?","desc":"可用于控制此滚动视图滚动到的位置的对象。"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"滚动视图的偏移量随每个项目增加的 [Axis]。"},{"name":"reverse","type":"bool","required":true,"desc":"轮播列表是否按阅读方向滚动。"},{"name":"consumeMaxWeight","type":"bool","required":true,"desc":"是否允许折叠的项目扩展到最大大小。"},{"name":"onTap","type":"ValueChanged?","desc":"点击 [children] 中的一个时调用。"},{"name":"enableSplash","type":"bool","required":true,"desc":"确定 [InkWell] 是否会覆盖每个轮播项。"},{"name":"itemExtent","type":"double?","desc":"子项在主轴上被强制具有的范围。"},{"name":"flexWeights","type":"List?","desc":"每个可见子项应在视口中占据的权重。"},{"name":"children","type":"List","required":true,"desc":"轮播的子小部件。"}],"id":237,"localName":"轮播视图","lever":4,"family":1,"linkIds":[253,340,160],"nodes":[{"file":"node1_base.dart","name":"CarouselView 基础用法","desc":["【itemExtent】 : 主轴方向强制尺寸 【double】","【shrinkExtent】: 滑动中,主轴方向条目最小尺寸 【double】","【scrollDirection】 : 滑动轴向 【Axis?】","【children】: 子组件列表 【List】"]},{"file":"node2.dart","name":"CarouselView 样式配置","desc":["【padding】 : 内边距 【EdgeInsets? 】","【backgroundColor】 : 背景色 【Color? 】","【elevation】 : 阴影深 【double?】","【shape】 : 形状 【ShapeBorder?】","【controller】 : 控制器 【CarouselController?】","【reverse】 : 是否反向滑动 【bool】","【onTap】 : 点击事件 【ValueChanged? 】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Center/Center_en-US.json b/modules/widget_system/widgets/doc/widgets/Center/Center_en-US.json deleted file mode 100644 index 86b996e1b..000000000 --- a/modules/widget_system/widgets/doc/widgets/Center/Center_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Center","path":"/src/widgets/basic.dart","parents":["Align","SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that centers its child within itself.","fields":[],"id":86,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Center","desc":["【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Center/Center_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Center/Center_zh-CN.json deleted file mode 100644 index a1a5742e7..000000000 --- a/modules/widget_system/widgets/doc/widgets/Center/Center_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Center","path":"/src/widgets/basic.dart","parents":["Align","SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项在自身内居中的小部件。","fields":[],"id":86,"localName":"居中组件","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Center基本使用","desc":["【child】 : 孩子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_en-US.json b/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_en-US.json deleted file mode 100644 index d97289d82..000000000 --- a/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Checkbox","path":"/src/material/checkbox.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design checkbox.","fields":[{"name":"value","type":"bool?","desc":"Whether this checkbox is checked."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the value of the checkbox should change."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.checkbox.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"activeColor","type":"Color?","desc":"The color to use when this checkbox is checked."},{"name":"fillColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.checkbox.fillColor} The color that fills the checkbox, in all [WidgetState]s."},{"name":"checkColor","type":"Color?","desc":"{@template flutter.material.checkbox.checkColor} The color to use for the check icon when this checkbox is checked. {@endtemplate}"},{"name":"tristate","type":"bool","required":true,"desc":"If true the checkbox's [value] can be true, false, or null."},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.checkbox.materialTapTargetSize} Configures the minimum size of the tap target. {@endtemplate}"},{"name":"visualDensity","type":"VisualDensity?","desc":"{@template flutter.material.checkbox.visualDensity} Defines how compact the checkbox's layout will be. {@endtemplate}"},{"name":"focusColor","type":"Color?","desc":"The color for the checkbox's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"{@template flutter.material.checkbox.hoverColor} The color for the checkbox's [Material] when a pointer is hovering over it."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.checkbox.overlayColor} The color for the checkbox's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.checkbox.splashRadius} The splash radius of the circular [Material] ink response. {@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shape","type":"OutlinedBorder?","desc":"{@template flutter.material.checkbox.shape} The shape of the checkbox's [Material]. {@endtemplate}"},{"name":"side","type":"BorderSide?","desc":"{@template flutter.material.checkbox.side} The color and width of the checkbox's border."},{"name":"isError","type":"bool","required":true,"desc":"{@template flutter.material.checkbox.isError} True if this checkbox wants to show an error state."},{"name":"semanticLabel","type":"String?","desc":"{@template flutter.material.checkbox.semanticLabel} The semantic label for the checkbox that will be announced by screen readers."}],"id":39,"lever":4,"family":1,"linkIds":[326,17],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Checkbox","desc":["【value】 : Whether it is selected 【double】","【checkColor】: Color of ✔️ when selected 【Color】","【activeColor】: Color inside the box when selected 【Color】","【onChanged】: State change event 【Function(bool)】,"]},{"file":"node2_tristate.dart","name":"Tristate of Checkbox","desc":["【tristate】 : Whether it is tristate 【double】"," when onChanged,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_zh-CN.json deleted file mode 100644 index b4b0ef171..000000000 --- a/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Checkbox","path":"/src/material/checkbox.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 复选框。","fields":[{"name":"value","type":"bool?","desc":"此复选框是否被选中。"},{"name":"onChanged","type":"ValueChanged?","desc":"复选框的值应该改变时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.checkbox.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"activeColor","type":"Color?","desc":"此复选框被选中时使用的颜色。"},{"name":"fillColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.checkbox.fillColor} 在所有 [WidgetState] 中填充复选框的颜色。"},{"name":"checkColor","type":"Color?","desc":"{@template flutter.material.checkbox.checkColor} 此复选框被选中时用于勾选图标的颜色。{@endtemplate}"},{"name":"tristate","type":"bool","required":true,"desc":"如果为 true,复选框的 [value] 可以是 true、false 或 null。"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.checkbox.materialTapTargetSize} 配置点击目标的最小大小。{@endtemplate}"},{"name":"visualDensity","type":"VisualDensity?","desc":"{@template flutter.material.checkbox.visualDensity} 定义复选框布局的紧凑程度。{@endtemplate}"},{"name":"focusColor","type":"Color?","desc":"复选框具有输入焦点时其 [Material] 的颜色。"},{"name":"hoverColor","type":"Color?","desc":"{@template flutter.material.checkbox.hoverColor} 指针悬停在复选框上时其 [Material] 的颜色。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.checkbox.overlayColor} 复选框 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.checkbox.splashRadius} 圆形 [Material] 墨水响应的飞溅半径。{@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shape","type":"OutlinedBorder?","desc":"{@template flutter.material.checkbox.shape} 复选框 [Material] 的形状。{@endtemplate}"},{"name":"side","type":"BorderSide?","desc":"{@template flutter.material.checkbox.side} 复选框边框的颜色和宽度。"},{"name":"isError","type":"bool","required":true,"desc":"{@template flutter.material.checkbox.isError} 如果此复选框想要显示错误状态,则为 true。"},{"name":"semanticLabel","type":"String?","desc":"{@template flutter.material.checkbox.semanticLabel} 屏幕阅读器将宣布的复选框语义标签。"}],"id":39,"localName":"复选框","lever":4,"family":1,"linkIds":[326,17],"nodes":[{"file":"node1_base.dart","name":"Checkbox基础用法","desc":["【value】 : 是否选中 【double】","【checkColor】: 选中时✔️gou颜色 【Color】","【activeColor】: 选中时框内颜色 【Color】","【onChanged】: 状态改变事件 【Function(bool)】,"]},{"file":"node2_tristate.dart","name":"Checkbox的三态","desc":["【tristate】 : 是否是三态 【double】"," onChanged时,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_en-US.json deleted file mode 100644 index 9fb6bf037..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckboxListTile","path":"/src/material/checkbox_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A [ListTile] with a [Checkbox]. In other words, a checkbox with a label.","fields":[{"name":"value","type":"bool?","desc":"Whether this checkbox is checked."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the value of the checkbox should change."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"activeColor","type":"Color?","desc":"The color to use when this checkbox is checked."},{"name":"fillColor","type":"MaterialStateProperty?","desc":"The color that fills the checkbox."},{"name":"checkColor","type":"Color?","desc":"The color to use for the check icon when this checkbox is checked."},{"name":"hoverColor","type":"Color?","desc":"{@macro flutter.material.checkbox.hoverColor}"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The color for the checkbox's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.checkbox.splashRadius}"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.checkbox.materialTapTargetSize}"},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the list tile's layout will be."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.ListTile.shape}"},{"name":"side","type":"BorderSide?","desc":"{@macro flutter.material.checkbox.side}"},{"name":"isError","type":"bool","required":true,"desc":"{@macro flutter.material.checkbox.isError}"},{"name":"tileColor","type":"Color?","desc":"{@macro flutter.material.ListTile.tileColor}"},{"name":"title","type":"Widget?","desc":"The primary content of the list tile."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"secondary","type":"Widget?","desc":"A widget to display on the opposite side of the tile from the checkbox."},{"name":"isThreeLine","type":"bool","required":true,"desc":"Whether this list tile is intended to display three lines of text."},{"name":"dense","type":"bool?","desc":"Whether this list tile is part of a vertically dense list."},{"name":"selected","type":"bool","required":true,"desc":"Whether to render icons and text in the [activeColor]."},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"Where to place the control relative to the text."},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"Defines insets surrounding the tile's contents."},{"name":"tristate","type":"bool","required":true,"desc":"If true the checkbox's [value] can be true, false, or null."},{"name":"checkboxShape","type":"OutlinedBorder?","desc":"{@macro flutter.material.checkbox.shape}"},{"name":"selectedTileColor","type":"Color?","desc":"If non-null, defines the background color when [CheckboxListTile.selected] is true."},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"enabled","type":"bool?","desc":"Whether the CheckboxListTile is interactive."},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"Whether to add button:true to the semantics if onTap is provided. This is a temporary flag to help changing the behavior of ListTile onTap semantics."},{"name":"checkboxScaleFactor","type":"double","required":true,"desc":"Controls the scaling factor applied to the [Checkbox] within the [CheckboxListTile]."},{"name":"checkboxSemanticLabel","type":"String?","desc":"{@macro flutter.material.checkbox.semanticLabel}"}],"id":17,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic representation of CheckBoxListTile","desc":["【secondary】: Left component 【Widget】","【checkColor】: ✔️ color 【Color】","【activeColor】: Frame color when selected 【Color】","【title】: Top middle component 【Widget】","【subtitle】: Bottom middle component 【Widget】","【onChanged】: Selection event 【Function(bool)】"]},{"file":"node2_select.dart","name":"Selection effect of CheckBoxListTile","desc":["【selected】: Whether selected 【bool】"]},{"file":"node3_dense.dart","name":"Dense property of CheckBoxListTile","desc":["【dense】: Whether dense 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_zh-CN.json deleted file mode 100644 index 7453ba0ef..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckboxListTile","path":"/src/material/checkbox_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":"带有 [Checkbox] 的 [ListTile]。换句话说,带有标签的复选框。","fields":[{"name":"value","type":"bool?","desc":"此复选框是否被选中。"},{"name":"onChanged","type":"ValueChanged?","desc":"复选框的值应该改变时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"activeColor","type":"Color?","desc":"此复选框被选中时使用的颜色。"},{"name":"fillColor","type":"MaterialStateProperty?","desc":"填充复选框的颜色。"},{"name":"checkColor","type":"Color?","desc":"此复选框被选中时用于勾选图标的颜色。"},{"name":"hoverColor","type":"Color?","desc":"{@macro flutter.material.checkbox.hoverColor}"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"复选框 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.checkbox.splashRadius}"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.checkbox.materialTapTargetSize}"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义列表项布局的紧凑程度。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.ListTile.shape}"},{"name":"side","type":"BorderSide?","desc":"{@macro flutter.material.checkbox.side}"},{"name":"isError","type":"bool","required":true,"desc":"{@macro flutter.material.checkbox.isError}"},{"name":"tileColor","type":"Color?","desc":"{@macro flutter.material.ListTile.tileColor}"},{"name":"title","type":"Widget?","desc":"列表项的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"secondary","type":"Widget?","desc":"显示在与复选框相对侧的小部件。"},{"name":"isThreeLine","type":"bool","required":true,"desc":"此列表项是否旨在显示三行文本。"},{"name":"dense","type":"bool?","desc":"此列表项是否为垂直密集列表的一部分。"},{"name":"selected","type":"bool","required":true,"desc":"是否以 [activeColor] 渲染图标和文本。"},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"控件相对于文本的放置位置。"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"定义围绕项目内容的插入。"},{"name":"tristate","type":"bool","required":true,"desc":"如果为 true,复选框的 [value] 可以是 true、false 或 null。"},{"name":"checkboxShape","type":"OutlinedBorder?","desc":"{@macro flutter.material.checkbox.shape}"},{"name":"selectedTileColor","type":"Color?","desc":"如果非空,定义 [CheckboxListTile.selected] 为 true 时的背景颜色。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"enabled","type":"bool?","desc":"CheckboxListTile 是否可交互。"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"如果提供了 onTap,是否向语义添加 button:true。这是一个临时标志,用于帮助更改 ListTile onTap 语义的行为。"},{"name":"checkboxScaleFactor","type":"double","required":true,"desc":"控制应用于 [CheckboxListTile] 内 [Checkbox] 的缩放因子。"},{"name":"checkboxSemanticLabel","type":"String?","desc":"{@macro flutter.material.checkbox.semanticLabel}"}],"id":17,"localName":"复选瓦片","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CheckBoxListTile的基本表现如下","desc":["【secondary】: 左侧组件 【Widget】","【checkColor】: ✔️颜色 【Color】","【activeColor】: 选中时外框颜色 【Color】","【title】: 中间上组件 【Widget】","【subtitle】: 中间下组件 【Widget】","【onChanged】: 选中事件 【Function(bool)】"]},{"file":"node2_select.dart","name":"CheckBoxListTile的选中效果","desc":["【selected】: 是否选中 【bool】"]},{"file":"node3_dense.dart","name":"CheckBoxListTile的密排属性","desc":["【dense】: 是否密排 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_en-US.json deleted file mode 100644 index 41f69d3c8..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckboxMenuButton","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":" A menu item that combines a [Checkbox] widget with a [MenuItemButton].","fields":[{"name":"value","type":"bool?","desc":"Whether this checkbox is checked."},{"name":"tristate","type":"bool","required":true,"desc":"If true, then the checkbox's [value] can be true, false, or null."},{"name":"isError","type":"bool","required":true,"desc":"True if this checkbox wants to show an error state."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the value of the checkbox should change."},{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the button response area."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"The optional shortcut that selects this [MenuItemButton]."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"trailingIcon","type":"Widget?","desc":"An optional icon to display after the [child] label."},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@macro flutter.material.menu_anchor.closeOnActivate}"},{"name":"child","type":"Widget?","desc":"The widget displayed in the center of this button."}],"id":375,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_zh-CN.json deleted file mode 100644 index 6772d1683..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckboxMenuButton","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":"将 [Checkbox] 小部件与 [MenuItemButton] 结合的菜单项。","fields":[{"name":"value","type":"bool?","desc":"此复选框是否被选中。"},{"name":"tristate","type":"bool","required":true,"desc":"如果为 true,则复选框的 [value] 可以是 true、false 或 null。"},{"name":"isError","type":"bool","required":true,"desc":"如果此复选框想要显示错误状态,则为 true。"},{"name":"onChanged","type":"ValueChanged?","desc":"复选框的值应该改变时调用。"},{"name":"onHover","type":"ValueChanged?","desc":"指针进入或退出按钮响应区域时调用。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点改变时调用的处理程序。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"选择此 [MenuItemButton] 的可选快捷键。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"trailingIcon","type":"Widget?","desc":"在 [child] 标签后显示的可选图标。"},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@macro flutter.material.menu_anchor.closeOnActivate}"},{"name":"child","type":"Widget?","desc":"显示在此按钮中心的小部件。"}],"id":375,"localName":"CheckboxMenuButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_en-US.json deleted file mode 100644 index 8bf70e0b6..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckboxTheme","path":"/src/material/checkbox_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a checkbox theme to descendant [Checkbox] widgets.","fields":[{"name":"data","type":"CheckboxThemeData","required":true,"desc":"The properties used for all descendant [Checkbox] widgets."}],"id":376,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_zh-CN.json deleted file mode 100644 index e34293583..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckboxTheme","path":"/src/material/checkbox_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将复选框主题应用于后代 [Checkbox] 小部件。","fields":[{"name":"data","type":"CheckboxThemeData","required":true,"desc":"用于所有后代 [Checkbox] 小部件的属性。"}],"id":376,"localName":"CheckboxTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_en-US.json b/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_en-US.json deleted file mode 100644 index f404abc36..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckedModeBanner","path":"/src/widgets/banner.dart","parents":["StatelessWidget","Widget"],"desc":" Displays a [Banner] saying \"DEBUG\" when running in debug mode. [MaterialApp] builds one of these by default.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget to show behind the banner."}],"id":215,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic usage of CheckedModeBanner","desc":["【child】 : Component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_zh-CN.json deleted file mode 100644 index a6e229d36..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckedModeBanner","path":"/src/widgets/banner.dart","parents":["StatelessWidget","Widget"],"desc":"在调试模式下运行时显示写着\",DEBUG\"的 [Banner]。[MaterialApp] 默认构建其中一个。","fields":[{"name":"child","type":"Widget","required":true,"desc":"在横幅后面显示的小部件。"}],"id":215,"localName":"debug标签","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CheckedModeBanner基本使用","desc":["【child】 : 组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_en-US.json b/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_en-US.json deleted file mode 100644 index 08c1b95c5..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckedPopupMenuItem","path":"/src/material/popup_menu.dart","parents":["PopupMenuItem","PopupMenuEntry","StatefulWidget","Widget"],"desc":" An item with a checkmark in a Material Design popup menu.","fields":[{"name":"checked","type":"bool","required":true,"desc":"Whether to display a checkmark next to the menu item."}],"id":377,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_zh-CN.json deleted file mode 100644 index 87c148b80..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckedPopupMenuItem","path":"/src/material/popup_menu.dart","parents":["PopupMenuItem","PopupMenuEntry","StatefulWidget","Widget"],"desc":"Material Design 弹出菜单中带有勾选标记的项目。","fields":[{"name":"checked","type":"bool","required":true,"desc":"是否在菜单项旁边显示勾选标记。"}],"id":377,"localName":"CheckedPopupMenuItem","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Chip/Chip_en-US.json b/modules/widget_system/widgets/doc/widgets/Chip/Chip_en-US.json deleted file mode 100644 index f85482293..000000000 --- a/modules/widget_system/widgets/doc/widgets/Chip/Chip_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Chip","path":"/src/material/chip.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design chip.","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"WidgetStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":11,"lever":4,"family":0,"linkIds":[12,13,14,15,153],"nodes":[{"file":"node1_base.dart","name":"The normal appearance of Chip is as follows","desc":["【avatar】: Left component 【Widget】","【label】: Middle component 【Widget】","【padding】: Padding 【EdgeInsetsGeometry】","【labelPadding】: Label padding 【EdgeInsetsGeometry】"]},{"file":"node2_color.dart","name":"You can set colors and shadows","desc":["【backgroundColor】: Background color 【Color】","【shadowColor】: Shadow color 【Color】","【elevation】: Shadow depth 【double】"]},{"file":"node3_delete.dart","name":"You can set the right click button","desc":["【deleteIcon】: Right component (usually an Icon) 【Widget】","【deleteIconColor】: Right component color 【Color】","【onDeleted】: Right component click event 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Chip/Chip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Chip/Chip_zh-CN.json deleted file mode 100644 index 3a6f4dbb1..000000000 --- a/modules/widget_system/widgets/doc/widgets/Chip/Chip_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Chip","path":"/src/material/chip.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 芯片。","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"WidgetStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":11,"localName":"小条组件","lever":4,"family":0,"linkIds":[12,13,14,15,153],"nodes":[{"file":"node1_base.dart","name":"Chip的普通表现如下","desc":["【avatar】: 左侧组件 【Widget】","【label】: 中间组件 【Widget】","【padding】 : 内边距 【EdgeInsetsGeometry】","【labelPadding】: label边距 【EdgeInsetsGeometry】"]},{"file":"node2_color.dart","name":"可以设置颜色和阴影","desc":["【backgroundColor】: 背景色 【Color】","【shadowColor】: 阴影色 【Color】","【elevation】: 影深 【double】"]},{"file":"node3_delete.dart","name":"可以设置右侧点击按钮","desc":["【deleteIcon】: 右侧组件(通常为Icon) 【Widget】","【deleteIconColor】: 右侧组件颜色 【Color】","【onDeleted】: 右侧组件点击事件 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_en-US.json deleted file mode 100644 index 3fb9a6702..000000000 --- a/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ChipTheme","path":"/src/material/chip_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a chip theme to descendant [RawChip]-based widgets, like [Chip], [InputChip], [ChoiceChip], [FilterChip], and [ActionChip].","fields":[{"name":"data","type":"ChipThemeData","required":true,"desc":"Specifies the color, shape, and text style values for descendant chip widgets."}],"id":328,"lever":3,"family":5,"linkIds":[11,153,12,13,14,15],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ChipTheme","desc":["You can specify the ChipThemeData properties to set default styles for Chip type components of descendants. The properties are similar to those of Chip, such as shadow, color, margin, shape, text style, etc. You can also use ChipTheme.of to get the theme data of Chip."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_zh-CN.json deleted file mode 100644 index 4511e6b3f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ChipTheme","path":"/src/material/chip_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"将芯片主题应用于基于 [RawChip] 的后代小部件,如 [Chip]、[InputChip]、[ChoiceChip]、[FilterChip] 和 [ActionChip]。","fields":[{"name":"data","type":"ChipThemeData","required":true,"desc":"为后代芯片小部件指定颜色、形状和文本样式值。"}],"id":328,"localName":"小条样式","lever":3,"family":5,"linkIds":[11,153,12,13,14,15],"nodes":[{"file":"node1_base.dart","name":"ChipTheme基本使用","desc":["可指定ChipThemeData数据属性为【后代】的Chip类型组件设置默认样式,属性和Chip属性类似,如阴影、颜色、边距、形状、文字样式等。也可以用ChipTheme.of获取Chip的主题数据。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_en-US.json b/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_en-US.json deleted file mode 100644 index 72ca46a69..000000000 --- a/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ChoiceChip","path":"/src/material/choice_chip.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design choice chip.","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"onSelected","type":"ValueChanged?"},{"name":"pressElevation","type":"double?"},{"name":"selected","type":"bool","required":true},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":12,"lever":3,"family":0,"linkIds":[11,13,14,15,153],"nodes":[{"file":"node1_base.dart","name":"The normal performance of ChoiceChip is as follows","desc":["【selectedColor】: Color when selected 【Color】","【selectedShadowColor】: Shadow color when selected 【Color】","【onSelected】: Selection event 【Fuction(bool)】"," Other properties are the same as the Chip component, with no right component."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_zh-CN.json deleted file mode 100644 index d36b0e591..000000000 --- a/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ChoiceChip","path":"/src/material/choice_chip.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 选择芯片。","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"onSelected","type":"ValueChanged?"},{"name":"pressElevation","type":"double?"},{"name":"selected","type":"bool","required":true},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":12,"localName":"选择小条","lever":3,"family":0,"linkIds":[11,13,14,15,153],"nodes":[{"file":"node1_base.dart","name":"ChoiceChip的普通表现如下","desc":["【selectedColor】: 选中时颜色 【Color】","【selectedShadowColor】: 选中时阴影颜色 【Color】","【onSelected】: 选中事件 【Fuction(bool)】"," 其他属性同Chip组件,无右侧组件。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_en-US.json b/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_en-US.json deleted file mode 100644 index 090b820c1..000000000 --- a/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CircleAvatar","path":"/src/material/circle_avatar.dart","parents":["StatelessWidget","Widget"],"desc":" A circle that represents a user.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"backgroundColor","type":"Color?","desc":"The color with which to fill the circle. Changing the background color will cause the avatar to animate to the new color."},{"name":"foregroundColor","type":"Color?","desc":"The default text color for text in the circle."},{"name":"backgroundImage","type":"ImageProvider?","desc":"The background image of the circle. Changing the background image will cause the avatar to animate to the new image."},{"name":"foregroundImage","type":"ImageProvider?","desc":"The foreground image of the circle."},{"name":"onBackgroundImageError","type":"ImageErrorListener?","desc":"An optional error callback for errors emitted when loading [backgroundImage]."},{"name":"onForegroundImageError","type":"ImageErrorListener?","desc":"An optional error callback for errors emitted when loading [foregroundImage]."},{"name":"radius","type":"double?","desc":"The size of the avatar, expressed as the radius (half the diameter)."},{"name":"minRadius","type":"double?","desc":"The minimum size of the avatar, expressed as the radius (half the diameter)."},{"name":"maxRadius","type":"double?","desc":"The maximum size of the avatar, expressed as the radius (half the diameter)."}],"id":9,"lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CircleAvatar Performance","desc":["【radius】: radius 【double】","【backgroundImage】: image resource 【ImageProvider】","【foregroundColor】: foreground color 【Color】","【backgroundColor】: background color 【Color】","【minRadius】: minimum radius 【double】","【maxRadius】: maximum radius 【double】","【child】: child component 【Child】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_zh-CN.json deleted file mode 100644 index 6647d02ee..000000000 --- a/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CircleAvatar","path":"/src/material/circle_avatar.dart","parents":["StatelessWidget","Widget"],"desc":"代表用户的圆形。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"backgroundColor","type":"Color?","desc":"填充圆形的颜色。更改背景颜色将导致头像动画到新颜色。"},{"name":"foregroundColor","type":"Color?","desc":"圆形中文本的默认文本颜色。"},{"name":"backgroundImage","type":"ImageProvider?","desc":"圆形的背景图像。更改背景图像将导致头像动画到新图像。"},{"name":"foregroundImage","type":"ImageProvider?","desc":"圆形的前景图像。"},{"name":"onBackgroundImageError","type":"ImageErrorListener?","desc":"加载 [backgroundImage] 时发出错误的可选错误回调。"},{"name":"onForegroundImageError","type":"ImageErrorListener?","desc":"加载 [foregroundImage] 时发出错误的可选错误回调。"},{"name":"radius","type":"double?","desc":"头像的大小,表示为半径(直径的一半)。"},{"name":"minRadius","type":"double?","desc":"头像的最小大小,表示为半径(直径的一半)。"},{"name":"maxRadius","type":"double?","desc":"头像的最大大小,表示为半径(直径的一半)。"}],"id":9,"localName":"圆形组件","lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CircleAvatar的表现","desc":["【radius】 : 半径 【double】","【backgroundImage】 : 图片资源 【ImageProvider】","【foregroundColor】: 前景色 【Color】","【backgroundColor】: 背景色 【Color】","【minRadius】: 最小半径 【double】","【maxRadius】: 最大半径 【double】","【child】: 孩子组件 【Child】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_en-US.json deleted file mode 100644 index 99e06e875..000000000 --- a/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CircularProgressIndicator","path":"/src/material/progress_indicator.dart","parents":["ProgressIndicator","StatefulWidget","Widget"],"desc":" A Material Design circular progress indicator, which spins to indicate that the application is busy.","fields":[{"name":"strokeWidth","type":"double?","desc":"The width of the line used to draw the circle."},{"name":"strokeAlign","type":"double?","desc":"The relative position of the stroke on a [CircularProgressIndicator]."},{"name":"strokeCap","type":"StrokeCap?","desc":"The progress indicator's line ending."},{"name":"constraints","type":"BoxConstraints?","desc":"Defines minimum and maximum sizes for a [CircularProgressIndicator]."},{"name":"trackGap","type":"double?","desc":"The gap between the active indicator and the background track."},{"name":"year2023","type":"bool?","desc":"When true, the [CircularProgressIndicator] will use the 2023 Material Design 3 appearance."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The padding around the indicator track."}],"id":46,"lever":3,"family":1,"linkIds":[47,48],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CircularProgressIndicator","desc":["【value】 : Progress 【double】","【backgroundColor】 : Background Color 【Color】","【valueColor】 : Progress Color 【Animation】","【strokeWidth】 : Line Width 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_zh-CN.json deleted file mode 100644 index bbce9db45..000000000 --- a/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_zh-CN.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "CircularProgressIndicator", - "path": "/src/material/progress_indicator.dart", - "parents": [ - "ProgressIndicator", - "StatefulWidget", - "Widget" - ], - "desc": "Material Design 圆形进度指示器,旋转以指示应用程序正忙。", - "fields": [ - { - "name": "strokeWidth", - "type": "double?", - "desc": "用于绘制圆形的线条宽度。" - }, - { - "name": "strokeAlign", - "type": "double?", - "desc": "[CircularProgressIndicator] 上笔画的相对位置。" - }, - { - "name": "strokeCap", - "type": "StrokeCap?", - "desc": "进度指示器的线条结尾。" - }, - { - "name": "constraints", - "type": "BoxConstraints?", - "desc": "定义 [CircularProgressIndicator] 的最小和最大大小。" - }, - { - "name": "trackGap", - "type": "double?", - "desc": "活动指示器和背景轨道之间的间隙。" - }, - { - "name": "year2023", - "type": "bool?", - "desc": "当为 true 时,[CircularProgressIndicator] 将使用 2023 Material Design 3 外观。" - }, - { - "name": "padding", - "type": "EdgeInsetsGeometry?", - "desc": "指示器轨道周围的内边距。" - } - ], - "id": 46, - "localName": "圆形进度", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CircularProgressIndicator基本使用", - "desc": [ - "【value】 : 进度 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【valueColor】 : 进度颜色 【Animation】", - "【strokeWidth】 : 线宽 【double】" - ] - } - ] -} diff --git a/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_en-US.json b/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_en-US.json deleted file mode 100644 index f973f9e6a..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipOval","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that clips its child using an oval.","fields":[{"name":"clipper","type":"CustomClipper?","desc":"If non-null, determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":66,"lever":3,"family":2,"linkIds":[67,68,69],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ClipOval","desc":["【child】: Child component 【Widget】","【clipBehavior】: Clipping behavior 【Clip】","【clipper】: Clipper 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_zh-CN.json deleted file mode 100644 index 27b811ee8..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipOval","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用椭圆形裁剪其子项的小部件。","fields":[{"name":"clipper","type":"CustomClipper?","desc":"如果非空,确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":66,"localName":"椭圆裁剪","lever":3,"family":2,"linkIds":[67,68,69],"nodes":[{"file":"node1_base.dart","name":"ClipOval基本使用","desc":["【child】 : 子组件 【Widget】","【clipBehavior】 : 裁剪行为 【Clip】","【clipper】 : 裁剪器 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_en-US.json b/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_en-US.json deleted file mode 100644 index d5f9f4ea0..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipPath","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that clips its child using a path.","fields":[{"name":"clipper","type":"CustomClipper?","desc":"If non-null, determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":69,"lever":5,"family":2,"linkIds":[66,67,68],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ClipPath","desc":["【child】 : Child component 【Widget】","【clipBehavior】 : Clipping behavior 【Clip】","【clipper】 : Clipper 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_zh-CN.json deleted file mode 100644 index 514aa5359..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipPath","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用路径裁剪其子项的小部件。","fields":[{"name":"clipper","type":"CustomClipper?","desc":"如果非空,确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":69,"localName":"路径裁剪","lever":5,"family":2,"linkIds":[66,67,68],"nodes":[{"file":"node1_base.dart","name":"ClipPath基本使用","desc":["【child】 : 子组件 【Widget】","【clipBehavior】 : 裁剪行为 【Clip】","【clipper】 : 裁剪器 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_en-US.json b/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_en-US.json deleted file mode 100644 index 2a48f3d0e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipRRect","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that clips its child using a rounded rectangle.","fields":[{"name":"borderRadius","type":"BorderRadiusGeometry","required":true,"desc":"The border radius of the rounded corners."},{"name":"clipper","type":"CustomClipper?","desc":"If non-null, determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":68,"lever":3,"family":2,"linkIds":[66,67,69],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ClipRRect","desc":["【child】: Child component 【Widget】","【borderRadius】: Border radius 【BorderRadius】","【clipBehavior】: Clipping behavior 【Clip】","【clipper】: Clipper 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_zh-CN.json deleted file mode 100644 index 586234f5f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipRRect","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用圆角矩形裁剪其子项的小部件。","fields":[{"name":"borderRadius","type":"BorderRadiusGeometry","required":true,"desc":"圆角的边框半径。"},{"name":"clipper","type":"CustomClipper?","desc":"如果非空,确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":68,"localName":"圆角矩形裁剪","lever":3,"family":2,"linkIds":[66,67,69],"nodes":[{"file":"node1_base.dart","name":"ClipRRect基本使用","desc":["【child】 : 子组件 【Widget】","【borderRadius】 : 边线半径 【BorderRadius】","【clipBehavior】 : 裁剪行为 【Clip】","【clipper】 : 裁剪器 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_en-US.json b/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_en-US.json deleted file mode 100644 index f4656838d..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipRSuperellipse","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that clips its child using a rounded superellipse.","fields":[{"name":"borderRadius","type":"BorderRadiusGeometry","required":true,"desc":"The border radius of the rounded corners."},{"name":"clipper","type":"CustomClipper?","desc":"If non-null, determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":378,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_zh-CN.json deleted file mode 100644 index 716e2a55d..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipRSuperellipse","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用圆角超椭圆裁剪其子项的小部件。","fields":[{"name":"borderRadius","type":"BorderRadiusGeometry","required":true,"desc":"圆角的边框半径。"},{"name":"clipper","type":"CustomClipper?","desc":"如果非空,确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":378,"localName":"ClipRSuperellipse","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_en-US.json b/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_en-US.json deleted file mode 100644 index 5b75661cc..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipRect","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that clips its child using a rectangle.","fields":[{"name":"clipper","type":"CustomClipper?","desc":"If non-null, determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":67,"lever":3,"family":2,"linkIds":[66,68,69],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ClipRect","desc":["【child】: Child component 【Widget】","【clipBehavior】: Clipping behavior 【Clip】","【clipper】: Clipper 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_zh-CN.json deleted file mode 100644 index 4caea1381..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipRect","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用矩形裁剪其子项的小部件。","fields":[{"name":"clipper","type":"CustomClipper?","desc":"如果非空,确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":67,"localName":"矩形裁剪","lever":3,"family":2,"linkIds":[66,68,69],"nodes":[{"file":"node1_base.dart","name":"ClipRect基本使用","desc":["【child】 : 子组件 【Widget】","【clipBehavior】 : 裁剪行为 【Clip】","【clipper】 : 裁剪器 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_en-US.json deleted file mode 100644 index 98828d271..000000000 --- a/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CloseButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":" A Material Design close icon button.","fields":[],"id":32,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CloseButton Click Event","desc":["【onPressed】: Click event 【VoidCallback?】","【style】: Button style 【ButtonStyle?】","【color】: Color 【Color】","When onPressed is null, clicking will exit the current interface."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_zh-CN.json deleted file mode 100644 index 8bc73cbf7..000000000 --- a/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CloseButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":"Material Design 关闭图标按钮。","fields":[],"id":32,"localName":"关闭按钮","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CloseButton点击事件","desc":["【onPressed】 : 点击事件 【VoidCallback?】","【style】: 按钮样式 【ButtonStyle?】","【color】: 颜色 【Color】","onPressed 为空时,点击时会退出当前界面。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_en-US.json deleted file mode 100644 index a2b31f44f..000000000 --- a/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CloseButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":" A \"close\" icon that's appropriate for the current [TargetPlatform].","fields":[],"id":274,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CloseButtonIcon Effect","desc":["The _ActionIcon component adapts the close button icon for different platforms based on the ActionIconTheme."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_zh-CN.json deleted file mode 100644 index 316ed41c3..000000000 --- a/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CloseButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":"适合当前 [TargetPlatform] 的\"关闭\"图标。","fields":[],"id":274,"localName":"关闭按钮图标","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CloseButtonIcon 效果","desc":["通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的关闭按钮图标。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_en-US.json b/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_en-US.json deleted file mode 100644 index 06bf6aed8..000000000 --- a/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ColorFiltered","path":"/src/widgets/color_filter.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Applies a [ColorFilter] to its child.","fields":[{"name":"colorFilter","type":"ColorFilter","required":true,"desc":"The color filter to apply to the child of this widget."}],"id":88,"lever":5,"family":2,"linkIds":[277,38],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ColorFiltered","desc":["【child】: Child component 【Widget】","【colorFilter】: Color filter 【ColorFilter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_zh-CN.json deleted file mode 100644 index 89ae48d50..000000000 --- a/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ColorFiltered","path":"/src/widgets/color_filter.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将 [ColorFilter] 应用于其子项。","fields":[{"name":"colorFilter","type":"ColorFilter","required":true,"desc":"应用于此小部件子项的颜色滤镜。"}],"id":88,"localName":"滤色器","lever":5,"family":2,"linkIds":[277,38],"nodes":[{"file":"node1_base.dart","name":"ColorFiltered基本使用","desc":["【child】 : 孩子组件 【Widget】","【colorFilter】 : 滤色器 【ColorFilter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_en-US.json b/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_en-US.json deleted file mode 100644 index e3d8be703..000000000 --- a/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ColoredBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that paints its area with a specified [Color] and then draws its child on top of that color.","fields":[{"name":"color","type":"Color","required":true,"desc":"The color to paint the background area with."}],"id":267,"lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ColoredBox","desc":["【color】: Component 【Color】","【child】: Component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_zh-CN.json deleted file mode 100644 index b3ea48884..000000000 --- a/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ColoredBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"用指定的 [Color] 绘制其区域,然后在该颜色之上绘制其子项的小部件。","fields":[{"name":"color","type":"Color","required":true,"desc":"用于绘制背景区域的颜色。"}],"id":267,"localName":"颜色盒","lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ColoredBox基本使用","desc":["【color】 : 组件 【Color】","【child】 : 组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Column/Column_en-US.json b/modules/widget_system/widgets/doc/widgets/Column/Column_en-US.json deleted file mode 100644 index d8d11c4b2..000000000 --- a/modules/widget_system/widgets/doc/widgets/Column/Column_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Column","path":"/src/widgets/basic.dart","parents":["Flex","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that displays its children in a vertical array.","fields":[],"id":96,"lever":4,"family":3,"linkIds":[94,95],"nodes":[{"file":"node_01.dart","name":"Basic Usage of Column","desc":["【children】: Component list 【List】","【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】","【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】","【textBaseline】: Text baseline 【TextBaseline】","【verticalDirection】: Vertical direction 【VerticalDirection】","【mainAxisSize】: Main axis size 【MainAxisSize】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Column/Column_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Column/Column_zh-CN.json deleted file mode 100644 index 973fb6e9d..000000000 --- a/modules/widget_system/widgets/doc/widgets/Column/Column_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Column","path":"/src/widgets/basic.dart","parents":["Flex","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"以垂直数组显示其子项的小部件。","fields":[],"id":96,"localName":"列布局","lever":4,"family":3,"linkIds":[94,95],"nodes":[{"file":"node_01.dart","name":"Column基本使用","desc":["【children】 : 组件列表 【List】","【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】","【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】","【textBaseline】 : 文字基线 【TextBaseline】","【verticalDirection】 : 竖直方向 【VerticalDirection】","【mainAxisSize】 : 主轴尺寸 【MainAxisSize】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_en-US.json b/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_en-US.json deleted file mode 100644 index 40ca4adaa..000000000 --- a/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CompositedTransformFollower","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that follows a [CompositedTransformTarget].","fields":[{"name":"link","type":"LayerLink","required":true,"desc":"The link object that connects this [CompositedTransformFollower] with a [CompositedTransformTarget]."},{"name":"showWhenUnlinked","type":"bool","required":true,"desc":"Whether to show the widget's contents when there is no corresponding [CompositedTransformTarget] with the same [link]."},{"name":"targetAnchor","type":"Alignment","required":true,"desc":"The anchor point on the linked [CompositedTransformTarget] that [followerAnchor] will line up with."},{"name":"followerAnchor","type":"Alignment","required":true,"desc":"The anchor point on this widget that will line up with [targetAnchor] on the linked [CompositedTransformTarget]."},{"name":"offset","type":"Offset","required":true,"desc":"The additional offset to apply to the [targetAnchor] of the linked [CompositedTransformTarget] to obtain this widget's [followerAnchor] position."}],"id":265,"lever":3,"family":2,"linkIds":[266,182],"nodes":[{"file":"node1_base.dart","name":"Usage of CompositedTransformFollower","desc":["【child】 : Child widget 【Widget】","【link】 : Link 【LayerLink】","【offset】 : Offset 【Offset】","【targetAnchor】 : Target anchor 【Alignment】","【followerAnchor】 : Follower anchor 【Alignment】","【showWhenUnlinked】 : Whether to show when unlinked 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_zh-CN.json deleted file mode 100644 index 8a95ea6f9..000000000 --- a/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CompositedTransformFollower","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"跟随 [CompositedTransformTarget] 的小部件。","fields":[{"name":"link","type":"LayerLink","required":true,"desc":"连接此 [CompositedTransformFollower] 与 [CompositedTransformTarget] 的链接对象。"},{"name":"showWhenUnlinked","type":"bool","required":true,"desc":"当没有具有相同 [link] 的对应 [CompositedTransformTarget] 时,是否显示小部件的内容。"},{"name":"targetAnchor","type":"Alignment","required":true,"desc":"链接的 [CompositedTransformTarget] 上的锚点,[followerAnchor] 将与之对齐。"},{"name":"followerAnchor","type":"Alignment","required":true,"desc":"此小部件上的锚点,将与链接的 [CompositedTransformTarget] 上的 [targetAnchor] 对齐。"},{"name":"offset","type":"Offset","required":true,"desc":"应用于链接的 [CompositedTransformTarget] 的 [targetAnchor] 以获得此小部件的 [followerAnchor] 位置的附加偏移量。"}],"id":265,"localName":"合成变换跟随者","lever":3,"family":2,"linkIds":[266,182],"nodes":[{"file":"node1_base.dart","name":"CompositedTransformFollower 使用","desc":["【child】 : 子组件 【Widget】","【link】 : 链接 【LayerLink】","【offset】 : 偏移 【Offset】","【targetAnchor】 : 目标锚点 【Alignment】","【followerAnchor】 : 伴随者锚点 【Alignment】","【showWhenUnlinked】 : 为链接是否显示 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_en-US.json b/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_en-US.json deleted file mode 100644 index 77fc0322c..000000000 --- a/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CompositedTransformTarget","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that can be targeted by a [CompositedTransformFollower].","fields":[{"name":"link","type":"LayerLink","required":true,"desc":"The link object that connects this [CompositedTransformTarget] with one or more [CompositedTransformFollower]s."}],"id":266,"lever":3,"family":2,"linkIds":[265,182],"nodes":[{"file":"node1_base.dart","name":"CompositedTransformTarget Usage","desc":["【child】 : Child component 【Widget】","【link】 : Link 【LayerLink】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_zh-CN.json deleted file mode 100644 index ab744dc85..000000000 --- a/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CompositedTransformTarget","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"可以被 [CompositedTransformFollower] 定位的小部件。","fields":[{"name":"link","type":"LayerLink","required":true,"desc":"连接此 [CompositedTransformTarget] 与一个或多个 [CompositedTransformFollower] 的链接对象。"}],"id":266,"localName":"合成变换目标","lever":3,"family":2,"linkIds":[265,182],"nodes":[{"file":"node1_base.dart","name":"CompositedTransformTarget 使用","desc":["【child】 : 子组件 【Widget】","【link】 : 链接 【LayerLink】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_en-US.json deleted file mode 100644 index 3e05daa94..000000000 --- a/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ConstrainedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that imposes additional constraints on its child.","fields":[{"name":"constraints","type":"BoxConstraints","required":true,"desc":"The additional constraints to impose on the child."}],"id":80,"lever":3,"family":2,"linkIds":[1,79,81],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of BoxConstraints","desc":["【child】 : Child component 【Widget】","【minWidth】 : Minimum width 【double】","【minHeight】 : Minimum height 【double】","【maxHeight】 : Maximum height 【double】","【maxWidth】 : Maximum width 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_zh-CN.json deleted file mode 100644 index 9f2c91e02..000000000 --- a/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ConstrainedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对其子项施加额外约束的小部件。","fields":[{"name":"constraints","type":"BoxConstraints","required":true,"desc":"对子项施加的额外约束。"}],"id":80,"localName":"约束盒","lever":3,"family":2,"linkIds":[1,79,81],"nodes":[{"file":"node1_base.dart","name":"BoxConstraints基本使用","desc":["【child】 : 孩子组件 【Widget】","【minWidth】 : 最小宽 【double】","【minHeight】 : 最小高 【double】","【maxHeight】 : 最大高 【double】","【maxWidth】 : 最大宽 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_en-US.json deleted file mode 100644 index cdf6c01a2..000000000 --- a/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ConstrainedLayoutBuilder","path":"/src/widgets/layout_builder.dart","abstract":true,"parents":["AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":" A specialized [AbstractLayoutBuilder] whose widget subtree depends on the incoming [ConstraintType] that will be imposed on the widget.","fields":[{"name":"builder","type":"Widget Function(BuildContext context, ConstraintType constraints)","required":true}],"id":379,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_zh-CN.json deleted file mode 100644 index 2028a9081..000000000 --- a/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ConstrainedLayoutBuilder","path":"/src/widgets/layout_builder.dart","abstract":true,"parents":["AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":"专门的 [AbstractLayoutBuilder],其小部件子树依赖于将施加在小部件上的传入 [ConstraintType]。","fields":[{"name":"builder","type":"Widget Function(BuildContext context, ConstraintType constraints)","required":true}],"id":379,"localName":"ConstrainedLayoutBuilder","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_en-US.json b/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_en-US.json deleted file mode 100644 index 0c75a93b9..000000000 --- a/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ConstraintsTransformBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A container widget that applies an arbitrary transform to its constraints, and sizes its child using the resulting [BoxConstraints], optionally clipping, or treating the overflow as an error.","fields":[{"name":"textDirection","type":"TextDirection?","desc":"The text direction to use when interpreting the [alignment] if it is an [AlignmentDirectional]."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"The alignment to use when laying out the child, if it has a different size than this widget."},{"name":"constraintsTransform","type":"BoxConstraintsTransform","required":true,"desc":"{@template flutter.widgets.constraintsTransform} The function used to transform the incoming [BoxConstraints], to size [child]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":380,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_zh-CN.json deleted file mode 100644 index 22992d565..000000000 --- a/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ConstraintsTransformBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对其约束应用任意变换的容器小部件,使用生成的 [BoxConstraints] 调整其子项大小,可选择裁剪或将溢出视为错误。","fields":[{"name":"textDirection","type":"TextDirection?","desc":"如果 [alignment] 是 [AlignmentDirectional],则在解释 [alignment] 时使用的文本方向。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如果子项的大小与此小部件不同,则在布局子项时使用的对齐方式。"},{"name":"constraintsTransform","type":"BoxConstraintsTransform","required":true,"desc":"{@template flutter.widgets.constraintsTransform} 用于变换传入 [BoxConstraints] 以调整 [child] 大小的函数。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":380,"localName":"ConstraintsTransformBox","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Container/Container_en-US.json b/modules/widget_system/widgets/doc/widgets/Container/Container_en-US.json deleted file mode 100644 index 983f6ce80..000000000 --- a/modules/widget_system/widgets/doc/widgets/Container/Container_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Container","path":"/src/widgets/container.dart","parents":["StatelessWidget","Widget"],"desc":" A convenience widget that combines common painting, positioning, and sizing widgets.","fields":[{"name":"child","type":"Widget?","desc":"The [child] contained by the container."},{"name":"alignment","type":"AlignmentGeometry?","desc":"Align the [child] within the container."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Empty space to inscribe inside the [decoration]. The [child], if any, is placed inside this padding."},{"name":"color","type":"Color?","desc":"The color to paint behind the [child]."},{"name":"decoration","type":"Decoration?","desc":"The decoration to paint behind the [child]."},{"name":"foregroundDecoration","type":"Decoration?","desc":"The decoration to paint in front of the [child]."},{"name":"constraints","type":"BoxConstraints?","desc":"Additional constraints to apply to the child."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"Empty space to surround the [decoration] and [child]."},{"name":"transform","type":"Matrix4?","desc":"The transformation matrix to apply before painting the container."},{"name":"transformAlignment","type":"AlignmentGeometry?","desc":"The alignment of the origin, relative to the size of the container, if [transform] is specified."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"The clip behavior when [Container.decoration] is not null."}],"id":1,"lever":5,"family":0,"linkIds":[74,85,80,78,70,123],"nodes":[{"file":"node1_base.dart","name":"Can be used to display an area with specified width and height","desc":["【width】 : width 【int】","【height】: height 【int】","【color】: color 【Color】"]},{"file":"node2_child.dart","name":"Can place a child component within the area","desc":["【padding】 : padding 【EdgeInsetsGeometry】","【margin】: margin 【EdgeInsetsGeometry】","【child】: child component 【Widget】"]},{"file":"node3_alignment.dart","name":"Can align and position the child component","desc":["【alignment】 : alignment 【AlignmentGeometry】"]},{"file":"node4_decoration.dart","name":"Can decorate the child component","desc":["【decoration】 : decoration 【Decoration】","Can decorate: borders, rounded corners, colors, gradients, shadows, images, etc."]},{"file":"node5_transform.dart","name":"Container also has transformation capabilities","desc":["【transform】 : transformation matrix 【Matrix4】","Matrix transformation based on Matrix4, see linear algebra for details"]},{"file":"node6_constraints.dart","name":"Constraints of the Container","desc":["【constraints】 : constraints 【BoxConstraints】","Will constrain the size of the area, it will not be smaller than the specified minimum width and height, nor larger than the specified maximum width and height."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Container/Container_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Container/Container_zh-CN.json deleted file mode 100644 index e3bcb66ae..000000000 --- a/modules/widget_system/widgets/doc/widgets/Container/Container_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Container","path":"/src/widgets/container.dart","parents":["StatelessWidget","Widget"],"desc":"结合常见绘制、定位和大小调整小部件的便利小部件。","fields":[{"name":"child","type":"Widget?","desc":"容器包含的 [child]。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"在容器内对齐 [child]。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在 [decoration] 内部刻写的空白空间。[child](如果有)放置在此内边距内。"},{"name":"color","type":"Color?","desc":"在 [child] 后面绘制的颜色。"},{"name":"decoration","type":"Decoration?","desc":"在 [child] 后面绘制的装饰。"},{"name":"foregroundDecoration","type":"Decoration?","desc":"在 [child] 前面绘制的装饰。"},{"name":"constraints","type":"BoxConstraints?","desc":"应用于子项的额外约束。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕 [decoration] 和 [child] 的空白空间。"},{"name":"transform","type":"Matrix4?","desc":"在绘制容器之前应用的变换矩阵。"},{"name":"transformAlignment","type":"AlignmentGeometry?","desc":"如果指定了 [transform],相对于容器大小的原点对齐。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"当 [Container.decoration] 不为 null 时的裁剪行为。"}],"id":1,"localName":"容器组件","lever":5,"family":0,"linkIds":[74,85,80,78,70,123],"nodes":[{"file":"node1_base.dart","name":"可用于显示一个指定宽高的区域","desc":["【width】 : 宽 【int】","【height】: 高 【int】","【color】: 颜色 【Color】"]},{"file":"node2_child.dart","name":"可以在区域中放入一个子组件","desc":["【padding】 : 内边距 【EdgeInsetsGeometry】","【margin】: 外边距 【EdgeInsetsGeometry】","【child】: 子组件 【Widget】"]},{"file":"node3_alignment.dart","name":"可对子组件进行对齐定位","desc":["【alignment】 : 对齐定位 【AlignmentGeometry】"]},{"file":"node4_decoration.dart","name":"可对子组件进行装饰","desc":["【decoration】 : 装饰 【Decoration】","可装饰: 边线、圆弧、颜色、渐变色、阴影、图片等内容"]},{"file":"node5_transform.dart","name":"Container还具有变换性","desc":["【transform】 : 变换矩阵 【Matrix4】","基于Matrix4的矩阵变换,变换详情见线性代数"]},{"file":"node6_constraints.dart","name":"Container的约束性","desc":["【constraints】 : 约束 【BoxConstraints】","会约束该区域的尺寸,不会小于指定的最小宽高,也不会大于指定的最大宽高。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_en-US.json deleted file mode 100644 index 2b6d7cd28..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoActionSheet","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style action sheet.","fields":[{"name":"title","type":"Widget?","desc":"An optional title of the action sheet. When the [message] is non-null, the font of the [title] is bold."},{"name":"message","type":"Widget?","desc":"An optional descriptive message that provides more details about the reason for the alert."},{"name":"actions","type":"List?","desc":"The set of actions that are displayed for the user to select."},{"name":"messageScrollController","type":"ScrollController?","desc":"A scroll controller that can be used to control the scrolling of the [message] in the action sheet."},{"name":"actionScrollController","type":"ScrollController?","desc":"A scroll controller that can be used to control the scrolling of the [actions] in the action sheet."},{"name":"cancelButton","type":"Widget?","desc":"The optional cancel button that is grouped separately from the other actions."}],"id":131,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoActionSheet","desc":["【title】: First row component 【Widget】","【message】: Second row component 【Widget】","【cancelButton】: Component at the cancel button 【Widget】","【actions】: List of middle components 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_zh-CN.json deleted file mode 100644 index c7c339259..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoActionSheet","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的操作表单。","fields":[{"name":"title","type":"Widget?","desc":"操作表单的可选标题。当 [message] 非空时,[title] 的字体为粗体。"},{"name":"message","type":"Widget?","desc":"提供有关警报原因的更多详细信息的可选描述性消息。"},{"name":"actions","type":"List?","desc":"为用户选择显示的操作集合。"},{"name":"messageScrollController","type":"ScrollController?","desc":"可用于控制操作表单中 [message] 滚动的滚动控制器。"},{"name":"actionScrollController","type":"ScrollController?","desc":"可用于控制操作表单中 [actions] 滚动的滚动控制器。"},{"name":"cancelButton","type":"Widget?","desc":"与其他操作分开分组的可选取消按钮。"}],"id":131,"localName":"iOS行为单","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoActionSheet基本使用","desc":["【title】 : 第一行组件 【Widget】","【message】 : 第二行组件 【Widget】","【cancelButton】 : 取消按钮处组件 【Widget】","【actions】 : 中间组件列表 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_en-US.json deleted file mode 100644 index de9a0ccb0..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoActionSheetAction","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":" The content of a typical action button in a [CupertinoActionSheet].","fields":[{"name":"onPressed","type":"VoidCallback","required":true,"desc":"The callback that is called when the button is selected."},{"name":"isDefaultAction","type":"bool","required":true,"desc":"Whether this action is the default choice in the action sheet."},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"Whether this action might change or delete data."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor that will be shown when hovering over the button."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":132,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoActionSheetAction","desc":["【child】: Child widget 【Widget】","【isDefaultAction】: Whether it is the default action 【bool】","【onPressed】: Click event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_zh-CN.json deleted file mode 100644 index 1f26e71cb..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoActionSheetAction","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":"[CupertinoActionSheet] 中典型操作按钮的内容。","fields":[{"name":"onPressed","type":"VoidCallback","required":true,"desc":"选择按钮时调用的回调。"},{"name":"isDefaultAction","type":"bool","required":true,"desc":"此操作是否是操作表单中的默认选择。"},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"此操作是否可能更改或删除数据。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"悬停在按钮上时将显示的光标。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":132,"localName":"iOS行为单按键","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoActionSheetAction基本使用","desc":["【child】 : 子组件 【Widget】","【isDefaultAction】 : 是否默认选中 【bool】","【onPressed】 : 点击事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_en-US.json deleted file mode 100644 index 393d290c3..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoActivityIndicator","path":"/src/cupertino/activity_indicator.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style activity indicator that spins clockwise.","fields":[{"name":"color","type":"Color?","desc":"Color of the activity indicator."},{"name":"animating","type":"bool","required":true,"desc":"Whether the activity indicator is running its animation."},{"name":"radius","type":"double","required":true,"desc":"Radius of the spinner widget."},{"name":"progress","type":"double","required":true,"desc":"Determines the percentage of spinner ticks that will be shown. Typical usage would display all ticks, however, this allows for more fine-grained control such as during pull-to-refresh when the drag-down action shows one tick at a time as the user continues to drag down."}],"id":48,"lever":2,"family":1,"linkIds":[46,47],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoActivityIndicator","desc":["【animating】 : Whether the loading animation is active 【bool】","【radius】 : Radius 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_zh-CN.json deleted file mode 100644 index d6df91cc9..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoActivityIndicator","path":"/src/cupertino/activity_indicator.dart","parents":["StatefulWidget","Widget"],"desc":"顺时针旋转的 iOS 风格活动指示器。","fields":[{"name":"color","type":"Color?","desc":"活动指示器的颜色。"},{"name":"animating","type":"bool","required":true,"desc":"活动指示器是否正在运行其动画。"},{"name":"radius","type":"double","required":true,"desc":"旋转器小部件的半径。"},{"name":"progress","type":"double","required":true,"desc":"确定将显示的旋转器刻度的百分比。典型用法会显示所有刻度,但是,这允许更细粒度的控制,例如在下拉刷新期间,当用户继续向下拖动时,拖拽动作一次显示一个刻度。"}],"id":48,"localName":"iOS指示器","lever":2,"family":1,"linkIds":[46,47],"nodes":[{"file":"node1_base.dart","name":"CupertinoActivityIndicator基本使用","desc":["【animating】 : 是否loading动画 【bool】","【radius】 : 半径 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_en-US.json deleted file mode 100644 index 25daf7ad1..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoAdaptiveTextSelectionToolbar","path":"/src/cupertino/adaptive_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" The default Cupertino context menu for text selection for the current platform with the given children.","fields":[{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"{@macro flutter.material.AdaptiveTextSelectionToolbar.anchors}"},{"name":"children","type":"List?","desc":"The children of the toolbar, typically buttons."},{"name":"buttonItems","type":"List?","desc":"The [ContextMenuButtonItem]s that will be turned into the correct button widgets for the current platform."}],"id":381,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_zh-CN.json deleted file mode 100644 index 21502c6a7..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoAdaptiveTextSelectionToolbar","path":"/src/cupertino/adaptive_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"当前平台的默认 Cupertino 文本选择上下文菜单,包含给定的子项。","fields":[{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"{@macro flutter.material.AdaptiveTextSelectionToolbar.anchors}"},{"name":"children","type":"List?","desc":"工具栏的子项,通常是按钮。"},{"name":"buttonItems","type":"List?","desc":"将转换为当前平台正确按钮小部件的 [ContextMenuButtonItem]。"}],"id":381,"localName":"CupertinoAdaptiveTextSelectionToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_en-US.json deleted file mode 100644 index 00ef27b39..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoAlertDialog","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style alert dialog.","fields":[{"name":"title","type":"Widget?","desc":"The (optional) title of the dialog is displayed in a large font at the top of the dialog."},{"name":"content","type":"Widget?","desc":"The (optional) content of the dialog is displayed in the center of the dialog in a lighter font."},{"name":"actions","type":"List","required":true,"desc":"The (optional) set of actions that are displayed at the bottom of the dialog."},{"name":"scrollController","type":"ScrollController?","desc":"A scroll controller that can be used to control the scrolling of the [content] in the dialog."},{"name":"actionScrollController","type":"ScrollController?","desc":"A scroll controller that can be used to control the scrolling of the actions in the dialog."},{"name":"insetAnimationDuration","type":"Duration","required":true,"desc":"{@macro flutter.material.dialog.insetAnimationDuration}"},{"name":"insetAnimationCurve","type":"Curve","required":true,"desc":"{@macro flutter.material.dialog.insetAnimationCurve}"}],"id":129,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoActionSheetAction","desc":["【child】 : Child component 【Widget】","【isDefaultAction】 : Whether it is selected by default 【bool】","【onPressed】 : Click event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_zh-CN.json deleted file mode 100644 index d1cdd5575..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoAlertDialog","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的警告对话框。","fields":[{"name":"title","type":"Widget?","desc":"对话框的(可选)标题以大字体显示在对话框顶部。"},{"name":"content","type":"Widget?","desc":"对话框的(可选)内容以较浅的字体显示在对话框中心。"},{"name":"actions","type":"List","required":true,"desc":"显示在对话框底部的(可选)操作集合。"},{"name":"scrollController","type":"ScrollController?","desc":"可用于控制对话框中 [content] 滚动的滚动控制器。"},{"name":"actionScrollController","type":"ScrollController?","desc":"可用于控制对话框中操作滚动的滚动控制器。"},{"name":"insetAnimationDuration","type":"Duration","required":true,"desc":"{@macro flutter.material.dialog.insetAnimationDuration}"},{"name":"insetAnimationCurve","type":"Curve","required":true,"desc":"{@macro flutter.material.dialog.insetAnimationCurve}"}],"id":129,"localName":"iOS对话框","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoActionSheetAction基本使用","desc":["【child】 : 子组件 【Widget】","【isDefaultAction】 : 是否默认选中 【bool】","【onPressed】 : 点击事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_en-US.json deleted file mode 100644 index 93d930ae7..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoApp","path":"/src/cupertino/app.dart","parents":["StatefulWidget","Widget"],"desc":" An application that uses Cupertino design.","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@macro flutter.widgets.widgetsApp.navigatorKey}"},{"name":"home","type":"Widget?","desc":"{@macro flutter.widgets.widgetsApp.home}"},{"name":"theme","type":"CupertinoThemeData?","desc":"The top-level [CupertinoTheme] styling."},{"name":"routes","type":"Map?","desc":"The application's top-level routing table."},{"name":"initialRoute","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.initialRoute}"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateRoute}"},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateInitialRoutes}"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onUnknownRoute}"},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@macro flutter.widgets.widgetsApp.onNavigationNotification}"},{"name":"navigatorObservers","type":"List?","desc":"{@macro flutter.widgets.widgetsApp.navigatorObservers}"},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationProvider}"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationParser}"},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@macro flutter.widgets.widgetsApp.routerDelegate}"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@macro flutter.widgets.widgetsApp.backButtonDispatcher}"},{"name":"routerConfig","type":"RouterConfig?","desc":"{@macro flutter.widgets.widgetsApp.routerConfig}"},{"name":"builder","type":"TransitionBuilder?","desc":"{@macro flutter.widgets.widgetsApp.builder}"},{"name":"title","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.title}"},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateTitle}"},{"name":"color","type":"Color?","desc":"{@macro flutter.widgets.widgetsApp.color}"},{"name":"locale","type":"Locale?","desc":"{@macro flutter.widgets.widgetsApp.locale}"},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@macro flutter.widgets.widgetsApp.localizationsDelegates}"},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.LocaleResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@macro flutter.widgets.widgetsApp.supportedLocales}"},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"Turns on a performance overlay."},{"name":"checkerboardRasterCacheImages","type":"bool","required":true,"desc":"Turns on checkerboarding of raster cache images."},{"name":"checkerboardOffscreenLayers","type":"bool","required":true,"desc":"Turns on checkerboarding of layers rendered to offscreen bitmaps."},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"Turns on an overlay that shows the accessibility information reported by the framework."},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.debugShowCheckedModeBanner}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.widgetsApp.shortcuts} {@tool snippet} This example shows how to add a single shortcut for [LogicalKeyboardKey.select] to the default shortcuts without needing to add your own [Shortcuts] widget."},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.widgetsApp.actions} {@tool snippet} This example shows how to add a single action handling an [ActivateAction] to the default actions without needing to add your own [Actions] widget."},{"name":"restorationScopeId","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.restorationScopeId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.material.materialApp.scrollBehavior}"},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.useInheritedMediaQuery}"}],"id":156,"lever":4,"family":1,"linkIds":[157,158],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoApp","desc":["【theme】 : Theme 【ThemeData】","【title】 : Taskbar Title 【String】","【onGenerateRoute】 : Route Generator 【RouteFactory】","【home】 : Home Page 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_zh-CN.json deleted file mode 100644 index 0f5ddaa64..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoApp","path":"/src/cupertino/app.dart","parents":["StatefulWidget","Widget"],"desc":"使用 Cupertino 设计的应用程序。","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@macro flutter.widgets.widgetsApp.navigatorKey}"},{"name":"home","type":"Widget?","desc":"{@macro flutter.widgets.widgetsApp.home}"},{"name":"theme","type":"CupertinoThemeData?","desc":"顶级 [CupertinoTheme] 样式。"},{"name":"routes","type":"Map?","desc":"应用程序的顶级路由表。"},{"name":"initialRoute","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.initialRoute}"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateRoute}"},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateInitialRoutes}"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onUnknownRoute}"},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@macro flutter.widgets.widgetsApp.onNavigationNotification}"},{"name":"navigatorObservers","type":"List?","desc":"{@macro flutter.widgets.widgetsApp.navigatorObservers}"},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationProvider}"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationParser}"},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@macro flutter.widgets.widgetsApp.routerDelegate}"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@macro flutter.widgets.widgetsApp.backButtonDispatcher}"},{"name":"routerConfig","type":"RouterConfig?","desc":"{@macro flutter.widgets.widgetsApp.routerConfig}"},{"name":"builder","type":"TransitionBuilder?","desc":"{@macro flutter.widgets.widgetsApp.builder}"},{"name":"title","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.title}"},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateTitle}"},{"name":"color","type":"Color?","desc":"{@macro flutter.widgets.widgetsApp.color}"},{"name":"locale","type":"Locale?","desc":"{@macro flutter.widgets.widgetsApp.locale}"},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@macro flutter.widgets.widgetsApp.localizationsDelegates}"},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.LocaleResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@macro flutter.widgets.widgetsApp.supportedLocales}"},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"开启性能叠加层。"},{"name":"checkerboardRasterCacheImages","type":"bool","required":true,"desc":"开启光栅缓存图像的棋盘格显示。"},{"name":"checkerboardOffscreenLayers","type":"bool","required":true,"desc":"开启渲染到离屏位图的图层的棋盘格显示。"},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"开启显示框架报告的辅助功能信息的叠加层。"},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.debugShowCheckedModeBanner}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.widgetsApp.shortcuts} {@tool snippet} 此示例显示如何在不需要添加自己的 [Shortcuts] 小部件的情况下,将 [LogicalKeyboardKey.select] 的单个快捷键添加到默认快捷键中。"},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.widgetsApp.actions} {@tool snippet} 此示例显示如何在不需要添加自己的 [Actions] 小部件的情况下,将处理 [ActivateAction] 的单个操作添加到默认操作中。"},{"name":"restorationScopeId","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.restorationScopeId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.material.materialApp.scrollBehavior}"},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.useInheritedMediaQuery}"}],"id":156,"localName":"iOS应用","lever":4,"family":1,"linkIds":[157,158],"nodes":[{"file":"node1_base.dart","name":"CupertinoApp基本用法","desc":["【theme】 : 主题 【ThemeData】","【title】 : 任务栏标题 【String】","【onGenerateRoute】 : 路由生成器 【RouteFactory】","【home】 : 主页 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_en-US.json deleted file mode 100644 index 3fbaea233..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoButton","path":"/src/cupertino/button.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style button.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space to surround the child inside the bounds of the button."},{"name":"color","type":"Color?","desc":"The color of the button's background."},{"name":"disabledColor","type":"Color","required":true,"desc":"The color of the button's background when the button is disabled."},{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when the button is tapped or otherwise activated."},{"name":"onLongPress","type":"VoidCallback?","desc":"If [onPressed] and [onLongPress] callbacks are null, then the button will be disabled."},{"name":"minSize","type":"double?","desc":"Minimum size of the button."},{"name":"minimumSize","type":"Size?","desc":"The minimum size of the button."},{"name":"pressedOpacity","type":"double?","desc":"The opacity that the button will fade to when it is pressed. The button will have an opacity of 1.0 when it is not pressed."},{"name":"borderRadius","type":"BorderRadius?","desc":"The radius of the button's corners when it has a background color."},{"name":"sizeStyle","type":"CupertinoButtonSize","required":true,"desc":"The size of the button."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"The alignment of the button's [child]."},{"name":"focusColor","type":"Color?","desc":"The color to use for the focus highlight for keyboard interactions."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."}],"id":24,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoButton Click Event","desc":["【color】: Color 【Color】","【pressedOpacity】: Opacity when pressed 【double】","【child】: Child widget 【Widget】","【padding】: Padding 【EdgeInsetsGeometry】","【borderRadius】: Border radius 【BorderRadius】","【onPressed】: Click event 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_zh-CN.json deleted file mode 100644 index 14d249344..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoButton","path":"/src/cupertino/button.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的按钮。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在按钮边界内围绕子项的空间量。"},{"name":"color","type":"Color?","desc":"按钮背景的颜色。"},{"name":"disabledColor","type":"Color","required":true,"desc":"按钮禁用时按钮背景的颜色。"},{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用的回调。"},{"name":"onLongPress","type":"VoidCallback?","desc":"如果 [onPressed] 和 [onLongPress] 回调为 null,则按钮将被禁用。"},{"name":"minSize","type":"double?","desc":"按钮的最小大小。"},{"name":"minimumSize","type":"Size?","desc":"按钮的最小大小。"},{"name":"pressedOpacity","type":"double?","desc":"按钮被按下时将淡化到的不透明度。按钮未被按下时不透明度为 1.0。"},{"name":"borderRadius","type":"BorderRadius?","desc":"按钮有背景颜色时按钮角的半径。"},{"name":"sizeStyle","type":"CupertinoButtonSize","required":true,"desc":"按钮的大小。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"按钮 [child] 的对齐方式。"},{"name":"focusColor","type":"Color?","desc":"用于键盘交互的焦点高亮的颜色。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点改变时调用的处理程序。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"}],"id":24,"localName":"iOS按钮","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoButton点击事件","desc":["【color】: 颜色 【Color】","【pressedOpacity】: 按下时透明度 【double】","【child】: 子组件 【Widget】","【padding】: 内边距 【EdgeInsetsGeometry】","【borderRadius】: 圆角半径 【BorderRadius】","【onPressed】: 点击事件 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_en-US.json deleted file mode 100644 index e986b04cd..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoCheckbox","path":"/src/cupertino/checkbox.dart","parents":["StatefulWidget","Widget"],"desc":" A macOS style checkbox.","fields":[{"name":"value","type":"bool?","desc":"Whether this checkbox is checked."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the value of the checkbox should change."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"activeColor","type":"Color?","desc":"The color to use when this checkbox is checked."},{"name":"fillColor","type":"WidgetStateProperty?","desc":"{@template flutter.cupertino.CupertinoCheckbox.fillColor} The color used to fill this checkbox."},{"name":"inactiveColor","type":"Color?","desc":"The color used if the checkbox is inactive."},{"name":"checkColor","type":"Color?","desc":"The color to use for the check icon when this checkbox is checked."},{"name":"tristate","type":"bool","required":true,"desc":"If true, the checkbox's [value] can be true, false, or null."},{"name":"focusColor","type":"Color?","desc":"The color for the checkbox's border shadow when it has the input focus."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"side","type":"BorderSide?","desc":"The color and width of the checkbox's border."},{"name":"shape","type":"OutlinedBorder?","desc":"The shape of the checkbox."},{"name":"semanticLabel","type":"String?","desc":"The semantic label for the checkbox that will be announced by screen readers."}],"id":238,"lever":4,"family":1,"linkIds":[39,17],"nodes":[{"file":"node1.dart","name":"CupertinoCheckbox Usage","desc":["【value】: Whether it is selected 【bool?】","【onChanged】: Change callback 【ValueChanged?】","【checkColor】: Checkmark color when selected 【Color?】","【activeColor】: Background color when selected 【Color?】","【activeColor】: Background color when selected 【Color?】","【inactiveColor】: Border color when inactive/background color when disabled 【Color?】","When onChanged is null, it means it is disabled."]},{"file":"node2.dart","name":"CupertinoCheckbox Three States","desc":["【tristate】: Whether to enable three states 【bool】","In three states, the value is null for -"]},{"file":"node3.dart","name":"CupertinoCheckbox Border and Shape","desc":["【shape】: Shape 【OutlinedBorder?】","【side】: Border 【BorderSide?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_zh-CN.json deleted file mode 100644 index 6a3938b56..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoCheckbox","path":"/src/cupertino/checkbox.dart","parents":["StatefulWidget","Widget"],"desc":"macOS 风格的复选框。","fields":[{"name":"value","type":"bool?","desc":"此复选框是否被选中。"},{"name":"onChanged","type":"ValueChanged?","desc":"复选框的值应该改变时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"activeColor","type":"Color?","desc":"此复选框被选中时使用的颜色。"},{"name":"fillColor","type":"WidgetStateProperty?","desc":"{@template flutter.cupertino.CupertinoCheckbox.fillColor} 用于填充此复选框的颜色。"},{"name":"inactiveColor","type":"Color?","desc":"复选框处于非活动状态时使用的颜色。"},{"name":"checkColor","type":"Color?","desc":"此复选框被选中时用于勾选图标的颜色。"},{"name":"tristate","type":"bool","required":true,"desc":"如果为 true,复选框的 [value] 可以是 true、false 或 null。"},{"name":"focusColor","type":"Color?","desc":"复选框具有输入焦点时其边框阴影的颜色。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"side","type":"BorderSide?","desc":"复选框边框的颜色和宽度。"},{"name":"shape","type":"OutlinedBorder?","desc":"复选框的形状。"},{"name":"semanticLabel","type":"String?","desc":"屏幕阅读器将宣布的复选框语义标签。"}],"id":238,"localName":"复选框·macOS风格","lever":4,"family":1,"linkIds":[39,17],"nodes":[{"file":"node1.dart","name":"CupertinoCheckbox 使用","desc":["【value】 : 是否选中 【bool?】","【onChanged】 : 变化回调 【ValueChanged?】","【checkColor】 : 选中时√颜色 【Color?】","【activeColor】 : 选中背景颜色 【Color?】","【activeColor】 : 选中背景颜色 【Color?】","【inactiveColor】 : 非激活是边线色/不可用背景色 【Color?】","onChanged 为 null 时,表示不可用。"]},{"file":"node2.dart","name":"CupertinoCheckbox 三态","desc":["【tristate】 : 是否启用三态 【bool】","三态时,值为 null 为 - "]},{"file":"node3.dart","name":"CupertinoCheckbox 边线与形状","desc":["【shape】 : 形状 【OutlinedBorder?】","【side】 : 边线 【BorderSide?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_en-US.json deleted file mode 100644 index b839181d5..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoContextMenu","path":"/src/cupertino/context_menu.dart","parents":["StatefulWidget","Widget"],"desc":" A full-screen modal route that opens when the [child] is long-pressed.","fields":[{"name":"builder","type":"CupertinoContextMenuBuilder","required":true,"desc":"A function that returns a widget to be used alternatively from [child]."},{"name":"child","type":"Widget?","desc":"The widget that can be \"opened\" with the [CupertinoContextMenu]."},{"name":"actions","type":"List","required":true,"desc":"The actions that are shown in the menu."},{"name":"enableHapticFeedback","type":"bool","required":true,"desc":"If true, clicking on the [CupertinoContextMenuAction]s will produce haptic feedback."}],"id":143,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoContextMenu","desc":["【child】 : Child Component 【Widget】","【actions】 : Action Components Set 【List】","【previewBuilder】 : Animation Builder 【ContextMenuPreviewBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_zh-CN.json deleted file mode 100644 index 78d3d34a6..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoContextMenu","path":"/src/cupertino/context_menu.dart","parents":["StatefulWidget","Widget"],"desc":"长按 [child] 时打开的全屏模态路由。","fields":[{"name":"builder","type":"CupertinoContextMenuBuilder","required":true,"desc":"返回用作 [child] 替代的小部件的函数。"},{"name":"child","type":"Widget?","desc":"可以用 [CupertinoContextMenu] \\"},{"name":"actions","type":"List","required":true,"desc":"在菜单中显示的操作。"},{"name":"enableHapticFeedback","type":"bool","required":true,"desc":"如果为 true,点击 [CupertinoContextMenuAction] 将产生触觉反馈。"}],"id":143,"localName":"ios弹出菜单","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoContextMenu基本使用","desc":["【child】 : 子组件 【Widget】","【actions】 : 行为组件集 【List】","【previewBuilder】 : 动画构造器 【ContextMenuPreviewBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_en-US.json deleted file mode 100644 index 6f781e3a1..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoContextMenuAction","path":"/src/cupertino/context_menu_action.dart","parents":["StatefulWidget","Widget"],"desc":" A button in a _ContextMenuSheet.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget that will be placed inside the action."},{"name":"isDefaultAction","type":"bool","required":true,"desc":"Indicates whether this action should receive the style of an emphasized, default action."},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"Indicates whether this action should receive the style of a destructive action."},{"name":"onPressed","type":"VoidCallback?","desc":"Called when the action is pressed."},{"name":"trailingIcon","type":"IconData?","desc":"An optional icon to display to the right of the child."}],"id":144,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoContextMenuAction","desc":["【child】 : Child Component 【Widget】","【isDefaultAction】 : Whether it is the default action 【bool】","【trailingIcon】 : Trailing Icon 【bool】","【onPressed】 : Click Event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_zh-CN.json deleted file mode 100644 index b3dde5457..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoContextMenuAction","path":"/src/cupertino/context_menu_action.dart","parents":["StatefulWidget","Widget"],"desc":"_ContextMenuSheet 中的按钮。","fields":[{"name":"child","type":"Widget","required":true,"desc":"将放置在操作内部的小部件。"},{"name":"isDefaultAction","type":"bool","required":true,"desc":"指示此操作是否应接收强调的默认操作样式。"},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"指示此操作是否应接收破坏性操作的样式。"},{"name":"onPressed","type":"VoidCallback?","desc":"按下操作时调用。"},{"name":"trailingIcon","type":"IconData?","desc":"在子项右侧显示的可选图标。"}],"id":144,"localName":"ios弹出菜单按钮","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoContextMenuAction基本使用","desc":["【child】 : 子组件 【Widget】","【isDefaultAction】 : 是否默认选中 【bool】","【trailingIcon】 : 尾部 【bool】","【onPressed】 : 点击事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_en-US.json deleted file mode 100644 index 4133ae5c8..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoDatePicker","path":"/src/cupertino/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A date picker widget in iOS style.","fields":[{"name":"mode","type":"CupertinoDatePickerMode","required":true,"desc":"The mode of the date picker as one of [CupertinoDatePickerMode]. Defaults to [CupertinoDatePickerMode.dateAndTime]. Value cannot change after initial build."},{"name":"initialDateTime","type":"DateTime","required":true,"desc":"The initial date and/or time of the picker. Defaults to the present date and time. The present must conform to the intervals set in [minimumDate], [maximumDate], [minimumYear], and [maximumYear]."},{"name":"minimumDate","type":"DateTime?","desc":"The minimum selectable date that the picker can settle on."},{"name":"maximumDate","type":"DateTime?","desc":"The maximum selectable date that the picker can settle on."},{"name":"minimumYear","type":"int","required":true,"desc":"Minimum year that the picker can be scrolled to in [CupertinoDatePickerMode.date] mode. Defaults to 1."},{"name":"maximumYear","type":"int?","desc":"Maximum year that the picker can be scrolled to in [CupertinoDatePickerMode.date] mode. Null if there's no limit."},{"name":"minuteInterval","type":"int","required":true,"desc":"The granularity of the minutes spinner, if it is shown in the current mode. Must be an integer factor of 60."},{"name":"use24hFormat","type":"bool","required":true,"desc":"Whether to use 24 hour format. Defaults to false."},{"name":"dateOrder","type":"DatePickerDateOrder?","desc":"Determines the order of the columns inside [CupertinoDatePicker] in [CupertinoDatePickerMode.date] and [CupertinoDatePickerMode.monthYear] mode. When using monthYear mode, both [DatePickerDateOrder.dmy] and [DatePickerDateOrder.mdy] will result in the month|year order. Defaults to the locale's default date format/order."},{"name":"onDateTimeChanged","type":"ValueChanged","required":true,"desc":"Callback called when the selected date and/or time changes. If the new selected [DateTime] is not valid, or is not in the [minimumDate] through [maximumDate] range, this callback will not be called."},{"name":"backgroundColor","type":"Color?","desc":"Background color of date picker."},{"name":"showDayOfWeek","type":"bool","required":true,"desc":"Whether to show the day of week alongside the day in [CupertinoDatePickerMode.date] mode."},{"name":"showTimeSeparator","type":"bool","required":true,"desc":"Whether to show the time separator between hour and minute in the time [CupertinoDatePickerMode.time] and datetime [CupertinoDatePickerMode.dateAndTime] picker modes."},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.cupertino.picker.itemExtent}"},{"name":"selectionOverlayBuilder","type":"SelectionOverlayBuilder?","desc":"A function that returns a widget that is overlaid on the picker to highlight the currently selected entry."}],"id":137,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoDatePicker","desc":["【initialDateTime】 : Initial date 【DateTime】","【minimumYear】 : Minimum year 【int】","【maximumYear】 : Maximum year 【int】","【onDateTimeChanged】 : Click callback 【Function(DateTime)】","【minuteInterval】 : Minute interval 【int】","【use24hFormat】 : Whether it is 24-hour format 【bool】","【backgroundColor】 : Background color 【Color】","【mode】 : Mode*3 【CupertinoDatePickerMode】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_zh-CN.json deleted file mode 100644 index c38f8819e..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoDatePicker","path":"/src/cupertino/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的日期选择器小部件。","fields":[{"name":"mode","type":"CupertinoDatePickerMode","required":true,"desc":"日期选择器的模式,为 [CupertinoDatePickerMode] 之一。默认为 [CupertinoDatePickerMode.dateAndTime]。值在初始构建后无法更改。"},{"name":"initialDateTime","type":"DateTime","required":true,"desc":"选择器的初始日期和/或时间。默认为当前日期和时间。当前值必须符合 [minimumDate]、[maximumDate]、[minimumYear] 和 [maximumYear] 中设置的间隔。"},{"name":"minimumDate","type":"DateTime?","desc":"选择器可以确定的最小可选日期。"},{"name":"maximumDate","type":"DateTime?","desc":"选择器可以确定的最大可选日期。"},{"name":"minimumYear","type":"int","required":true,"desc":"在 [CupertinoDatePickerMode.date] 模式下选择器可以滚动到的最小年份。默认为 1。"},{"name":"maximumYear","type":"int?","desc":"在 [CupertinoDatePickerMode.date] 模式下选择器可以滚动到的最大年份。如果没有限制则为 null。"},{"name":"minuteInterval","type":"int","required":true,"desc":"如果在当前模式下显示分钟旋转器的粒度。必须是 60 的整数因子。"},{"name":"use24hFormat","type":"bool","required":true,"desc":"是否使用 24 小时格式。默认为 false。"},{"name":"dateOrder","type":"DatePickerDateOrder?","desc":"确定 [CupertinoDatePicker] 在 [CupertinoDatePickerMode.date] 和 [CupertinoDatePickerMode.monthYear] 模式下内部列的顺序。使用 monthYear 模式时,[DatePickerDateOrder.dmy] 和 [DatePickerDateOrder.mdy] 都将导致月|年顺序。默认为区域设置的默认日期格式/顺序。"},{"name":"onDateTimeChanged","type":"ValueChanged","required":true,"desc":"选定日期和/或时间更改时调用的回调。如果新选择的 [DateTime] 无效,或不在 [minimumDate] 到 [maximumDate] 范围内,则不会调用此回调。"},{"name":"backgroundColor","type":"Color?","desc":"日期选择器的背景颜色。"},{"name":"showDayOfWeek","type":"bool","required":true,"desc":"在 [CupertinoDatePickerMode.date] 模式下是否在日期旁边显示星期几。"},{"name":"showTimeSeparator","type":"bool","required":true,"desc":"在时间 [CupertinoDatePickerMode.time] 和日期时间 [CupertinoDatePickerMode.dateAndTime] 选择器模式下是否显示小时和分钟之间的时间分隔符。"},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.cupertino.picker.itemExtent}"},{"name":"selectionOverlayBuilder","type":"SelectionOverlayBuilder?","desc":"返回覆盖在选择器上以突出显示当前选定条目的小部件的函数。"}],"id":137,"localName":"iOS日期选择器","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoDatePicker基本使用","desc":["【initialDateTime】 : 初始日期 【DateTime】","【minimumYear】 : 最小年份 【int】","【maximumYear】 : 最大年份 【int】","【onDateTimeChanged】 : 点击回调 【Function(DateTime)】","【minuteInterval】 : 分钟间隔 【int】","【use24hFormat】 : 是否是24小时制 【bool】","【backgroundColor】 : 背景色 【Color】","【mode】 : 模式*3 【CupertinoDatePickerMode】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_en-US.json deleted file mode 100644 index 883521bb2..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoDesktopTextSelectionToolbar","path":"/src/cupertino/desktop_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" A macOS-style text selection toolbar.","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@macro flutter.material.DesktopTextSelectionToolbar.anchor}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"}],"id":382,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_zh-CN.json deleted file mode 100644 index e062c56a3..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoDesktopTextSelectionToolbar","path":"/src/cupertino/desktop_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"macOS 风格的文本选择工具栏。","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@macro flutter.material.DesktopTextSelectionToolbar.anchor}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"}],"id":382,"localName":"CupertinoDesktopTextSelectionToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_en-US.json deleted file mode 100644 index 76a4ef9b0..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoDesktopTextSelectionToolbarButton","path":"/src/cupertino/desktop_text_selection_toolbar_button.dart","parents":["StatefulWidget","Widget"],"desc":" A button in the style of the Mac context menu buttons.","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed}"},{"name":"child","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.child}"},{"name":"buttonItem","type":"ContextMenuButtonItem?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed}"},{"name":"text","type":"String?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.text}"}],"id":383,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_zh-CN.json deleted file mode 100644 index cddf6e76a..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoDesktopTextSelectionToolbarButton","path":"/src/cupertino/desktop_text_selection_toolbar_button.dart","parents":["StatefulWidget","Widget"],"desc":"Mac 上下文菜单按钮样式的按钮。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed}"},{"name":"child","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.child}"},{"name":"buttonItem","type":"ContextMenuButtonItem?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed}"},{"name":"text","type":"String?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.text}"}],"id":383,"localName":"CupertinoDesktopTextSelectionToolbarButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_en-US.json deleted file mode 100644 index 58718fb9b..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoDialogAction","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":" A button typically used in a [CupertinoAlertDialog].","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when the button is tapped or otherwise activated."},{"name":"isDefaultAction","type":"bool","required":true,"desc":"Set to true if button is the default choice in the dialog."},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"Whether this action destroys an object."},{"name":"textStyle","type":"TextStyle?","desc":"[TextStyle] to apply to any text that appears in this button."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":352,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoDialogAction","desc":["【isDefaultAction】: Whether it is a default action 【bool】","【isDestructiveAction】: Whether it is a destructive action 【bool】","【textStyle】: Text style 【TextStyle】","【onPressed】: Click event 【VoidCallback】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_zh-CN.json deleted file mode 100644 index 9df748f86..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoDialogAction","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":"通常在 [CupertinoAlertDialog] 中使用的按钮。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用的回调。"},{"name":"isDefaultAction","type":"bool","required":true,"desc":"如果按钮是对话框中的默认选择,则设置为 true。"},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"此操作是否销毁对象。"},{"name":"textStyle","type":"TextStyle?","desc":"应用于此按钮中出现的任何文本的 [TextStyle]。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":352,"localName":"交互视图","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoDialogAction基本使用","desc":["【isDefaultAction】 : 是否是默认性操作 【bool】","【isDestructiveAction】 : 是否是毁灭性操作 【bool】","【textStyle】: 文字样式 【TextStyle】","【onPressed】: 点击事件 【VoidCallback】","【child】: 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_en-US.json deleted file mode 100644 index 6b1359751..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoFormRow","path":"/src/cupertino/form_row.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-style form row.","fields":[{"name":"prefix","type":"Widget?","desc":"A widget that is displayed at the start of the row."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Content padding for the row."},{"name":"helper","type":"Widget?","desc":"A widget that is displayed underneath the [prefix] and [child] widgets."},{"name":"error","type":"Widget?","desc":"A widget that is displayed underneath the [prefix] and [child] widgets."},{"name":"child","type":"Widget","required":true,"desc":"Child widget."}],"id":384,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_zh-CN.json deleted file mode 100644 index 98df5615b..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoFormRow","path":"/src/cupertino/form_row.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 风格的表单行。","fields":[{"name":"prefix","type":"Widget?","desc":"显示在行开始处的小部件。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"行的内容内边距。"},{"name":"helper","type":"Widget?","desc":"显示在 [prefix] 和 [child] 小部件下方的小部件。"},{"name":"error","type":"Widget?","desc":"显示在 [prefix] 和 [child] 小部件下方的小部件。"},{"name":"child","type":"Widget","required":true,"desc":"子小部件。"}],"id":384,"localName":"CupertinoFormRow","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_en-US.json deleted file mode 100644 index efdcb6685..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoFormSection","path":"/src/cupertino/form_section.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-style form section.","fields":[{"name":"header","type":"Widget?","desc":"Sets the form section header. The section header lies above the [children] rows."},{"name":"footer","type":"Widget?","desc":"Sets the form section footer. The section footer lies below the [children] rows."},{"name":"margin","type":"EdgeInsetsGeometry","required":true,"desc":"Margin around the content area of the section encapsulating [children]."},{"name":"children","type":"List","required":true,"desc":"The list of rows in the section."},{"name":"decoration","type":"BoxDecoration?","desc":"Sets the decoration around [children]."},{"name":"backgroundColor","type":"Color","required":true,"desc":"Sets the background color behind the section."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":385,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_zh-CN.json deleted file mode 100644 index ee095c6ae..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoFormSection","path":"/src/cupertino/form_section.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 风格的表单部分。","fields":[{"name":"header","type":"Widget?","desc":"设置表单部分标题。部分标题位于 [children] 行上方。"},{"name":"footer","type":"Widget?","desc":"设置表单部分页脚。部分页脚位于 [children] 行下方。"},{"name":"margin","type":"EdgeInsetsGeometry","required":true,"desc":"围绕包含 [children] 的部分内容区域的边距。"},{"name":"children","type":"List","required":true,"desc":"部分中的行列表。"},{"name":"decoration","type":"BoxDecoration?","desc":"设置 [children] 周围的装饰。"},{"name":"backgroundColor","type":"Color","required":true,"desc":"设置部分后面的背景颜色。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":385,"localName":"CupertinoFormSection","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_en-US.json deleted file mode 100644 index 20ee64fd9..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoFullscreenDialogTransition","path":"/src/cupertino/route.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style transition used for summoning fullscreen dialogs.","fields":[{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"* `primaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when this screen is being pushed."},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"* `secondaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when another screen is being pushed on top of this one."},{"name":"linearTransition","type":"bool","required":true,"desc":"* `linearTransition` is whether to perform the transitions linearly. Used to precisely track back gesture drags."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":219,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Component Introduction","desc":["【child】 : Child component 【Widget】","【linearTransition】 : Whether to use linear transition 【bool】","【primaryRouteAnimation】 : Initial route animation 【Animation】","【secondaryRouteAnimation】 : Secondary route animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_zh-CN.json deleted file mode 100644 index 409a5465c..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoFullscreenDialogTransition","path":"/src/cupertino/route.dart","parents":["StatefulWidget","Widget"],"desc":"用于召唤全屏对话框的 iOS 风格过渡。","fields":[{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"* `primaryRouteAnimation` 是推送此屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"* `secondaryRouteAnimation` 是在此屏幕之上推送另一个屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"linearTransition","type":"bool","required":true,"desc":"* `linearTransition` 是否线性执行过渡。用于精确跟踪返回手势拖动。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":219,"localName":"全页面过渡变换","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"组件介绍","desc":["【child】 : 子组件 【Widget】","【linearTransition】 : 是否线性转换 【bool】","【primaryRouteAnimation】 : 初始路由动画 【Animation】","【secondaryRouteAnimation】 : 第二路由动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_en-US.json deleted file mode 100644 index d88523302..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoListSection","path":"/src/cupertino/list_section.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-style list section.","fields":[{"name":"type","type":"CupertinoListSectionType","required":true,"desc":"The type of list section, either base or inset grouped."},{"name":"header","type":"Widget?","desc":"Sets the form section header. The section header lies above the [children] rows. Usually a [Text] widget."},{"name":"footer","type":"Widget?","desc":"Sets the form section footer. The section footer lies below the [children] rows. Usually a [Text] widget."},{"name":"margin","type":"EdgeInsetsGeometry","required":true,"desc":"Margin around the content area of the section encapsulating [children]."},{"name":"children","type":"List?","desc":"The list of rows in the section. Usually a list of [CupertinoListTile]s."},{"name":"decoration","type":"BoxDecoration?","desc":"Sets the decoration around [children]."},{"name":"backgroundColor","type":"Color","required":true,"desc":"Sets the background color behind the section."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"dividerMargin","type":"double","required":true,"desc":"The starting offset of a margin between two list tiles."},{"name":"additionalDividerMargin","type":"double","required":true,"desc":"Additional starting inset of the divider used between rows. This is used when adding a leading icon to children and a divider should start at the text inset instead of the icon."},{"name":"topMargin","type":"double?","desc":"Margin above the list section. Only used in edge-to-edge variant and it matches iOS style by default."},{"name":"separatorColor","type":"Color?","desc":"Sets the color for the dividers between rows, and borders on top and bottom of the rows."}],"id":386,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_zh-CN.json deleted file mode 100644 index c524e0f57..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoListSection","path":"/src/cupertino/list_section.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 风格的列表部分。","fields":[{"name":"type","type":"CupertinoListSectionType","required":true,"desc":"列表部分的类型,基础或插入分组。"},{"name":"header","type":"Widget?","desc":"设置表单部分标题。部分标题位于 [children] 行上方。通常是 [Text] 小部件。"},{"name":"footer","type":"Widget?","desc":"设置表单部分页脚。部分页脚位于 [children] 行下方。通常是 [Text] 小部件。"},{"name":"margin","type":"EdgeInsetsGeometry","required":true,"desc":"围绕包含 [children] 的部分内容区域的边距。"},{"name":"children","type":"List?","desc":"部分中的行列表。通常是 [CupertinoListTile] 的列表。"},{"name":"decoration","type":"BoxDecoration?","desc":"设置 [children] 周围的装饰。"},{"name":"backgroundColor","type":"Color","required":true,"desc":"设置部分后面的背景颜色。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"dividerMargin","type":"double","required":true,"desc":"两个列表项之间边距的起始偏移量。"},{"name":"additionalDividerMargin","type":"double","required":true,"desc":"行之间使用的分隔符的附加起始插入。当向子项添加前导图标且分隔符应从文本插入而不是图标开始时使用。"},{"name":"topMargin","type":"double?","desc":"列表部分上方的边距。仅在边到边变体中使用,默认情况下匹配 iOS 样式。"},{"name":"separatorColor","type":"Color?","desc":"设置行之间分隔符以及行顶部和底部边框的颜色。"}],"id":386,"localName":"CupertinoListSection","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_en-US.json deleted file mode 100644 index 1ef2eeb3e..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoListTile","path":"/src/cupertino/list_tile.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style list tile.","fields":[{"name":"title","type":"Widget","required":true,"desc":"A [title] is used to convey the central information. Usually a [Text]."},{"name":"subtitle","type":"Widget?","desc":"A [subtitle] is used to display additional information. It is located below [title]. Usually a [Text] widget."},{"name":"additionalInfo","type":"Widget?","desc":"Similar to [subtitle], an [additionalInfo] is used to display additional information. However, instead of being displayed below [title], it is displayed on the right, before [trailing]. Usually a [Text] widget."},{"name":"leading","type":"Widget?","desc":"A widget displayed at the start of the [CupertinoListTile]. This is typically an `Icon` or an `Image`."},{"name":"trailing","type":"Widget?","desc":"A widget displayed at the end of the [CupertinoListTile]. This is usually a right chevron icon (e.g. `CupertinoListTileChevron`), or an `Icon`."},{"name":"onTap","type":"FutureOr Function()?","desc":"The [onTap] function is called when a user taps on [CupertinoListTile]. If left `null`, the [CupertinoListTile] will not react on taps. If this is a `Future Function()`, then the [CupertinoListTile] remains activated until the returned future is awaited. This is according to iOS behavior. However, if this function is a `void Function()`, then the tile is active only for the duration of invocation."},{"name":"backgroundColor","type":"Color?","desc":"The [backgroundColor] of the tile in normal state. Once the tile is tapped, the background color switches to [backgroundColorActivated]. It is set to match the iOS look by default."},{"name":"backgroundColorActivated","type":"Color?","desc":"The [backgroundColorActivated] is the background color of the tile after the tile was tapped. It is set to match the iOS look by default."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Padding of the content inside [CupertinoListTile]."},{"name":"leadingSize","type":"double","required":true,"desc":"The [leadingSize] is used to constrain the width and height of [leading] widget."},{"name":"leadingToTitle","type":"double","required":true,"desc":"The horizontal space between [leading] widget and [title]."}],"id":387,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_zh-CN.json deleted file mode 100644 index 27ee69aae..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoListTile","path":"/src/cupertino/list_tile.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的列表项。","fields":[{"name":"title","type":"Widget","required":true,"desc":"[title] 用于传达中心信息。通常是 [Text]。"},{"name":"subtitle","type":"Widget?","desc":"[subtitle] 用于显示附加信息。它位于 [title] 下方。通常是 [Text] 小部件。"},{"name":"additionalInfo","type":"Widget?","desc":"与 [subtitle] 类似,[additionalInfo] 用于显示附加信息。但是,它不是显示在 [title] 下方,而是显示在右侧,在 [trailing] 之前。通常是 [Text] 小部件。"},{"name":"leading","type":"Widget?","desc":"显示在 [CupertinoListTile] 开始处的小部件。这通常是 `Icon` 或 `Image`。"},{"name":"trailing","type":"Widget?","desc":"显示在 [CupertinoListTile] 末尾的小部件。这通常是右箭头图标(例如 `CupertinoListTileChevron`)或 `Icon`。"},{"name":"onTap","type":"FutureOr Function()?","desc":"当用户点击 [CupertinoListTile] 时调用 [onTap] 函数。如果保留为 `null`,[CupertinoListTile] 将不会对点击做出反应。如果这是 `Future Function()`,则 [CupertinoListTile] 保持激活状态,直到返回的 future 被等待。这符合 iOS 行为。但是,如果此函数是 `void Function()`,则项目仅在调用期间处于活动状态。"},{"name":"backgroundColor","type":"Color?","desc":"项目在正常状态下的 [backgroundColor]。一旦点击项目,背景颜色切换到 [backgroundColorActivated]。默认设置为匹配 iOS 外观。"},{"name":"backgroundColorActivated","type":"Color?","desc":"[backgroundColorActivated] 是点击项目后项目的背景颜色。默认设置为匹配 iOS 外观。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"[CupertinoListTile] 内部内容的内边距。"},{"name":"leadingSize","type":"double","required":true,"desc":"[leadingSize] 用于约束 [leading] 小部件的宽度和高度。"},{"name":"leadingToTitle","type":"double","required":true,"desc":"[leading] 小部件和 [title] 之间的水平空间。"}],"id":387,"localName":"CupertinoListTile","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_en-US.json deleted file mode 100644 index 493707680..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoListTileChevron","path":"/src/cupertino/list_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A typical iOS trailing widget used to denote that a `CupertinoListTile` is a button with an action.","fields":[],"id":388,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_zh-CN.json deleted file mode 100644 index 223f7ac82..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoListTileChevron","path":"/src/cupertino/list_tile.dart","parents":["StatelessWidget","Widget"],"desc":"用于表示 `CupertinoListTile` 是带有操作的按钮的典型 iOS 尾随小部件。","fields":[],"id":388,"localName":"CupertinoListTileChevron","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_en-US.json deleted file mode 100644 index 4c22d5347..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoMagnifier","path":"/src/cupertino/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":" A [RawMagnifier] used for magnifying text in cases where a user's finger may be blocking the point of interest, like a selection handle.","fields":[{"name":"shadows","type":"List","required":true,"desc":"A list of shadows cast by the [Magnifier]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"Whether and how to clip the [shadows] that render inside the loupe."},{"name":"borderSide","type":"BorderSide","required":true,"desc":"The border, or \"rim\", of this magnifier."},{"name":"size","type":"Size","required":true,"desc":"The size of this magnifier."},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"The border radius of this magnifier."},{"name":"inOutAnimation","type":"Animation?","desc":"This [RawMagnifier]'s controller."},{"name":"additionalFocalPointOffset","type":"Offset","required":true,"desc":"Any additional focal point offset, applied over the regular focal point offset defined in [kMagnifierAboveFocalPoint]."},{"name":"magnificationScale","type":"double","required":true,"desc":"The magnification scale for the magnifier."}],"id":389,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_zh-CN.json deleted file mode 100644 index 41fdf800c..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoMagnifier","path":"/src/cupertino/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":"用于在用户手指可能阻挡兴趣点(如选择手柄)的情况下放大文本的 [RawMagnifier]。","fields":[{"name":"shadows","type":"List","required":true,"desc":"[Magnifier] 投射的阴影列表。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"是否以及如何裁剪在放大镜内渲染的 [shadows]。"},{"name":"borderSide","type":"BorderSide","required":true,"desc":"此放大镜的边框或\\"},{"name":"size","type":"Size","required":true,"desc":"此放大镜的大小。"},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"此放大镜的边框半径。"},{"name":"inOutAnimation","type":"Animation?","desc":"此 [RawMagnifier] 的控制器。"},{"name":"additionalFocalPointOffset","type":"Offset","required":true,"desc":"任何附加的焦点偏移量,应用于 [kMagnifierAboveFocalPoint] 中定义的常规焦点偏移量之上。"},{"name":"magnificationScale","type":"double","required":true,"desc":"放大镜的放大比例。"}],"id":389,"localName":"CupertinoMagnifier","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_en-US.json deleted file mode 100644 index 56cd626a1..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoNavigationBar","path":"/src/cupertino/nav_bar.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-styled navigation bar.","fields":[{"name":"largeTitle","type":"Widget?","desc":"The navigation bar's title, when using [CupertinoNavigationBar.large]."},{"name":"leading","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.leading} Widget to place at the start of the navigation bar. Normally a back button for a normal page or a cancel button for full page dialogs."},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.automaticallyImplyLeading} Controls whether we should try to imply the leading widget if null."},{"name":"automaticallyImplyMiddle","type":"bool","required":true,"desc":"Controls whether we should try to imply the middle widget if null."},{"name":"previousPageTitle","type":"String?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.previousPageTitle} Manually specify the previous route's title when automatically implying the leading back button."},{"name":"middle","type":"Widget?","desc":"The navigation bar's default title."},{"name":"trailing","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.trailing} Widget to place at the end of the navigation bar. Normally additional actions taken on the page such as a search or edit function. {@endtemplate}"},{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.backgroundColor} The background color of the navigation bar. If it contains transparency, the tab bar will automatically produce a blurring effect to the content behind it. This behavior can be disabled by setting [enableBackgroundFilterBlur] to false."},{"name":"automaticBackgroundVisibility","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.automaticBackgroundVisibility} Whether the navigation bar appears transparent when no content is scrolled under."},{"name":"brightness","type":"Brightness?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.brightness} The brightness of the specified [backgroundColor]."},{"name":"padding","type":"EdgeInsetsDirectional?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.padding} Padding for the contents of the navigation bar."},{"name":"border","type":"Border?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.border} The border of the navigation bar. By default renders a single pixel bottom border side."},{"name":"transitionBetweenRoutes","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.transitionBetweenRoutes} Whether to transition between navigation bars."},{"name":"enableBackgroundFilterBlur","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.enableBackgroundFilterBlur} Whether to have a blur effect when a non-opaque background color is used."},{"name":"heroTag","type":"Object","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.heroTag} Tag for the navigation bar's Hero widget if [transitionBetweenRoutes] is true."},{"name":"bottom","type":"PreferredSizeWidget?","desc":"A widget to place at the bottom of the navigation bar."}],"id":62,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoNavigationBar","desc":["【leading】: Left component 【Widget】","【middle】: Middle component 【Widget】","【trailing】: Trailing component 【Widget】","【backgroundColor】: Background color 【Color】","【padding】: Padding 【EdgeInsetsDirectional】","【border】: Border 【Border】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_zh-CN.json deleted file mode 100644 index 58f40bf70..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoNavigationBar","path":"/src/cupertino/nav_bar.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的导航栏。","fields":[{"name":"largeTitle","type":"Widget?","desc":"使用 [CupertinoNavigationBar.large] 时导航栏的标题。"},{"name":"leading","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.leading} 放置在导航栏开始处的小部件。通常是普通页面的返回按钮或全页对话框的取消按钮。"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.automaticallyImplyLeading} 控制如果为 null,我们是否应该尝试暗示前导小部件。"},{"name":"automaticallyImplyMiddle","type":"bool","required":true,"desc":"控制如果为 null,我们是否应该尝试暗示中间小部件。"},{"name":"previousPageTitle","type":"String?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.previousPageTitle} 在自动暗示前导返回按钮时手动指定上一个路由的标题。"},{"name":"middle","type":"Widget?","desc":"导航栏的默认标题。"},{"name":"trailing","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.trailing} 放置在导航栏末尾的小部件。通常是在页面上执行的附加操作,如搜索或编辑功能。{@endtemplate}"},{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.backgroundColor} 导航栏的背景颜色。如果包含透明度,标签栏将自动对其后面的内容产生模糊效果。可以通过将 [enableBackgroundFilterBlur] 设置为 false 来禁用此行为。"},{"name":"automaticBackgroundVisibility","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.automaticBackgroundVisibility} 当没有内容滚动到下方时,导航栏是否显示为透明。"},{"name":"brightness","type":"Brightness?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.brightness} 指定 [backgroundColor] 的亮度。"},{"name":"padding","type":"EdgeInsetsDirectional?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.padding} 导航栏内容的内边距。"},{"name":"border","type":"Border?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.border} 导航栏的边框。默认渲染单像素底部边框。"},{"name":"transitionBetweenRoutes","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.transitionBetweenRoutes} 是否在导航栏之间过渡。"},{"name":"enableBackgroundFilterBlur","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.enableBackgroundFilterBlur} 当使用非不透明背景颜色时是否具有模糊效果。"},{"name":"heroTag","type":"Object","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.heroTag} 如果 [transitionBetweenRoutes] 为 true,导航栏 Hero 小部件的标签。"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"放置在导航栏底部的小部件。"}],"id":62,"localName":"iOS导航","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoNavigationBar基本用法","desc":["【leading】 : 左侧组件 【Widget】","【middle】 : 中间组件 【Widget】","【trailing】 : 尾部组件 【Widget】","【backgroundColor】 : 背景色 【Color】","【padding】 : 内边距 【EdgeInsetsDirectional】","【border】 : 边线 【Border】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_en-US.json deleted file mode 100644 index cdc390a26..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoNavigationBarBackButton","path":"/src/cupertino/nav_bar.dart","parents":["StatelessWidget","Widget"],"desc":" A nav bar back button typically used in [CupertinoNavigationBar].","fields":[{"name":"color","type":"Color?","desc":"The [Color] of the back button."},{"name":"previousPageTitle","type":"String?","desc":"An override for showing the previous route's title. If null, it will be automatically derived from [CupertinoPageRoute.title] if the current and previous routes are both [CupertinoPageRoute]s."},{"name":"onPressed","type":"VoidCallback?","desc":"An override callback to perform instead of the default behavior which is to pop the [Navigator]."}],"id":218,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Back Button","desc":["【onPressed】: Click event 【VoidCallback】","【color】: Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_zh-CN.json deleted file mode 100644 index 6d81c4e48..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoNavigationBarBackButton","path":"/src/cupertino/nav_bar.dart","parents":["StatelessWidget","Widget"],"desc":"通常在 [CupertinoNavigationBar] 中使用的导航栏返回按钮。","fields":[{"name":"color","type":"Color?","desc":"返回按钮的 [Color]。"},{"name":"previousPageTitle","type":"String?","desc":"显示上一个路由标题的覆盖。如果为 null,如果当前和上一个路由都是 [CupertinoPageRoute],它将自动从 [CupertinoPageRoute.title] 派生。"},{"name":"onPressed","type":"VoidCallback?","desc":"执行的覆盖回调,而不是默认行为,即弹出 [Navigator]。"}],"id":218,"localName":"iOS风格返回按钮","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"返回按钮基本使用","desc":["【onPressed】 : 点击事件 【VoidCallback】","【color】: 颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_en-US.json deleted file mode 100644 index 0646ff05f..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPageScaffold","path":"/src/cupertino/page_scaffold.dart","parents":["StatefulWidget","Widget"],"desc":" Implements a single iOS application page's layout.","fields":[{"name":"navigationBar","type":"ObstructingPreferredSizeWidget?","desc":"The [navigationBar], typically a [CupertinoNavigationBar], is drawn at the top of the screen."},{"name":"child","type":"Widget","required":true,"desc":"Widget to show in the main content area."},{"name":"backgroundColor","type":"Color?","desc":"The color of the widget that underlies the entire scaffold."},{"name":"resizeToAvoidBottomInset","type":"bool","required":true,"desc":"Whether the [child] should size itself to avoid the window's bottom inset."}],"id":157,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoPageScaffold","desc":["【child】 : Content 【Widget】","【backgroundColor】 : Background Color 【Color】","【navigationBar】 : Header 【ObstructingPreferredSizeWidget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_zh-CN.json deleted file mode 100644 index 206938a4a..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPageScaffold","path":"/src/cupertino/page_scaffold.dart","parents":["StatefulWidget","Widget"],"desc":"实现单个 iOS 应用程序页面的布局。","fields":[{"name":"navigationBar","type":"ObstructingPreferredSizeWidget?","desc":"[navigationBar],通常是 [CupertinoNavigationBar],绘制在屏幕顶部。"},{"name":"child","type":"Widget","required":true,"desc":"在主内容区域显示的小部件。"},{"name":"backgroundColor","type":"Color?","desc":"整个脚手架下方小部件的颜色。"},{"name":"resizeToAvoidBottomInset","type":"bool","required":true,"desc":"[child] 是否应调整自身大小以避免窗口的底部插入。"}],"id":157,"localName":"iOS页面脚手架","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoPageScaffold基本用法","desc":["【child】 : 内容 【Widget】","【backgroundColor】 : 背景色 【Color】","【navigationBar】 : 头部 【ObstructingPreferredSizeWidget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_en-US.json deleted file mode 100644 index ca3567342..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPageScaffoldBackgroundColor","path":"/src/cupertino/page_scaffold.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" [InheritedWidget] indicating what the current scaffold background color is for its children.","fields":[{"name":"color","type":"Color","required":true,"desc":"The background color defined in [CupertinoPageScaffold]."}],"id":390,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_zh-CN.json deleted file mode 100644 index adf20954e..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPageScaffoldBackgroundColor","path":"/src/cupertino/page_scaffold.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"[InheritedWidget] 指示其子项的当前脚手架背景颜色。","fields":[{"name":"color","type":"Color","required":true,"desc":"在 [CupertinoPageScaffold] 中定义的背景颜色。"}],"id":390,"localName":"CupertinoPageScaffoldBackgroundColor","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_en-US.json deleted file mode 100644 index a5574693f..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPageTransition","path":"/src/cupertino/route.dart","parents":["StatefulWidget","Widget"],"desc":" Provides an iOS-style page transition animation.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"* `primaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when this screen is being pushed."},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"* `secondaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when another screen is being pushed on top of this one."},{"name":"linearTransition","type":"bool","required":true,"desc":"* `linearTransition` is whether to perform the transitions linearly. Used to precisely track back gesture drags."}],"id":216,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to CupertinoPageTransition","desc":["【child】 : Child widget 【Widget】","【linearTransition】 : Whether to use linear transition 【bool】","【primaryRouteAnimation】 : Primary route animation 【Animation】","【secondaryRouteAnimation】 : Secondary route animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_zh-CN.json deleted file mode 100644 index 972782f65..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPageTransition","path":"/src/cupertino/route.dart","parents":["StatefulWidget","Widget"],"desc":"提供 iOS 风格的页面过渡动画。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"* `primaryRouteAnimation` 是推送此屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"* `secondaryRouteAnimation` 是在此屏幕之上推送另一个屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"linearTransition","type":"bool","required":true,"desc":"* `linearTransition` 是否线性执行过渡。用于精确跟踪返回手势拖动。"}],"id":216,"localName":"页面过渡变换","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoPageTransition 介绍","desc":["【child】 : 子组件 【Widget】","【linearTransition】 : 是否线性转换 【bool】","【primaryRouteAnimation】 : 初始路由动画 【Animation】","【secondaryRouteAnimation】 : 第二路由动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_en-US.json deleted file mode 100644 index c5b30bc68..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPicker","path":"/src/cupertino/picker.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-styled picker.","fields":[{"name":"diameterRatio","type":"double","required":true,"desc":"Relative ratio between this picker's height and the simulated cylinder's diameter."},{"name":"backgroundColor","type":"Color?","desc":"Background color behind the children."},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"scrollController","type":"FixedExtentScrollController?","desc":"A [FixedExtentScrollController] to read and control the current item, and to set the initial item."},{"name":"itemExtent","type":"double","required":true,"desc":"{@template flutter.cupertino.picker.itemExtent} The uniform height of all children."},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"onSelectedItemChanged","type":"ValueChanged?","desc":"An option callback when the currently centered item changes."},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"A delegate that lazily instantiates children."},{"name":"selectionOverlay","type":"Widget?","desc":"A widget overlaid on the picker to highlight the currently selected entry."}],"id":139,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoPicker","desc":["【children】 : List of child components 【List】","【offAxisFraction】 : Axis offset rate 【double】","【squeeze】 : Squeeze rate 【double】","【diameterRatio】 : Ratio of height to cylinder diameter 【double】","【itemExtent】 : Spacing 【double】","【backgroundColor】 : Background color 【Color】","【onSelectedItemChanged】 : Selected event 【Function(int)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_zh-CN.json deleted file mode 100644 index 8f1691ebb..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPicker","path":"/src/cupertino/picker.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的选择器。","fields":[{"name":"diameterRatio","type":"double","required":true,"desc":"此选择器高度与模拟圆柱体直径之间的相对比率。"},{"name":"backgroundColor","type":"Color?","desc":"子项后面的背景颜色。"},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"scrollController","type":"FixedExtentScrollController?","desc":"用于读取和控制当前项目以及设置初始项目的 [FixedExtentScrollController]。"},{"name":"itemExtent","type":"double","required":true,"desc":"{@template flutter.cupertino.picker.itemExtent} 所有子项的统一高度。"},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"onSelectedItemChanged","type":"ValueChanged?","desc":"当前居中项目更改时的可选回调。"},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"延迟实例化子项的委托。"},{"name":"selectionOverlay","type":"Widget?","desc":"覆盖在选择器上以突出显示当前选定条目的小部件。"}],"id":139,"localName":"iOS选择器","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoPicker基本使用","desc":["【children】 : 子组件列表 【List】","【offAxisFraction】 : 轴偏移率 【double】","【squeeze】 : 挤压率 【double】","【diameterRatio】 : 高与圆柱直径比率 【double】","【itemExtent】 : 间距 【double】","【backgroundColor】 : 背景色 【Color】","【onSelectedItemChanged】 : 选中事件 【Function(int)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_en-US.json deleted file mode 100644 index 8bcb992d7..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPickerDefaultSelectionOverlay","path":"/src/cupertino/picker.dart","parents":["StatelessWidget","Widget"],"desc":" A default selection overlay for [CupertinoPicker]s.","fields":[{"name":"capStartEdge","type":"bool","required":true,"desc":"Whether to use the default use rounded corners and margin on the start side."},{"name":"capEndEdge","type":"bool","required":true,"desc":"Whether to use the default use rounded corners and margin on the end side."},{"name":"background","type":"Color","required":true,"desc":"The color to fill in the background of the [CupertinoPickerDefaultSelectionOverlay]. It Support for use [CupertinoDynamicColor]."}],"id":391,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_zh-CN.json deleted file mode 100644 index f8975b4da..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPickerDefaultSelectionOverlay","path":"/src/cupertino/picker.dart","parents":["StatelessWidget","Widget"],"desc":"[CupertinoPicker] 的默认选择覆盖层。","fields":[{"name":"capStartEdge","type":"bool","required":true,"desc":"是否在开始侧使用默认的圆角和边距。"},{"name":"capEndEdge","type":"bool","required":true,"desc":"是否在结束侧使用默认的圆角和边距。"},{"name":"background","type":"Color","required":true,"desc":"填充 [CupertinoPickerDefaultSelectionOverlay] 背景的颜色。支持使用 [CupertinoDynamicColor]。"}],"id":391,"localName":"CupertinoPickerDefaultSelectionOverlay","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_en-US.json deleted file mode 100644 index 31ad87e91..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPopupSurface","path":"/src/cupertino/dialog.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-style component for creating modal overlays like dialogs and action sheets.","fields":[{"name":"blurSigma","type":"double","required":true,"desc":"The strength of the gaussian blur applied to the area beneath this surface."},{"name":"isSurfacePainted","type":"bool","required":true,"desc":"Whether or not to paint a translucent white on top of this surface's blurred background. [isSurfacePainted] should be true for a typical popup that contains content without any dividers. A popup that requires dividers should set [isSurfacePainted] to false and then paint its own surface area."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":217,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoPopupSurface Usage","desc":["【isSurfacePainted】: Whether to paint white 【bool】","【child】: Child component 【Widget】","Test effect: left isSurfacePainted = false, right isSurfacePainted = true"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_zh-CN.json deleted file mode 100644 index 8b9b38173..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPopupSurface","path":"/src/cupertino/dialog.dart","parents":["StatelessWidget","Widget"],"desc":"用于创建对话框和操作表单等模态覆盖层的 iOS 风格组件。","fields":[{"name":"blurSigma","type":"double","required":true,"desc":"应用于此表面下方区域的高斯模糊强度。"},{"name":"isSurfacePainted","type":"bool","required":true,"desc":"是否在此表面的模糊背景之上绘制半透明白色。对于包含没有任何分隔符内容的典型弹出窗口,[isSurfacePainted] 应为 true。需要分隔符的弹出窗口应将 [isSurfacePainted] 设置为 false,然后绘制自己的表面区域。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":217,"localName":"模糊弹出层","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoPopupSurface 使用","desc":["【isSurfacePainted】 : 是否绘白 【bool】","【child】 : 子组件 【Widget】","测试效果左侧 isSurfacePainted = false,右侧 isSurfacePainted = true"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_en-US.json deleted file mode 100644 index 7f5d2e6ab..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoRadio","path":"/src/cupertino/radio.dart","parents":["StatefulWidget","Widget"],"desc":" A macOS-style radio button.","fields":[{"name":"value","type":"T","required":true,"desc":"The value represented by this radio button."},{"name":"groupValue","type":"T?","desc":"The currently selected value for a group of radio buttons."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user selects this [CupertinoRadio] button."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"toggleable","type":"bool","required":true,"desc":"Set to true if this radio button is allowed to be returned to an indeterminate state by selecting it again when selected."},{"name":"useCheckmarkStyle","type":"bool","required":true,"desc":"Controls whether the radio displays in a checkbox style or the default iOS radio style."},{"name":"activeColor","type":"Color?","desc":"The color to use when this radio button is selected."},{"name":"inactiveColor","type":"Color?","desc":"The color to use when this radio button is not selected."},{"name":"fillColor","type":"Color?","desc":"The color that fills the inner circle of the radio button when selected."},{"name":"focusColor","type":"Color?","desc":"The color for the radio's border when it has the input focus."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"}],"id":240,"lever":4,"family":1,"linkIds":[19,45],"nodes":[{"file":"node1.dart","name":"CupertinoRadio Usage","desc":["【value】: Radio button value 【T】","【groupValue】: Current matching value 【T】","【onChanged】: Callback when changed 【Function(T)】"]},{"file":"node2.dart","name":"CupertinoRadio Colors","desc":["【activeColor】: Active background color 【Color?】","【fillColor】: Fill color 【Color?】","【inactiveColor】: Inactive background color 【Color?】","【focusColor】: Focus color 【Color?】","【mouseCursor】: Mouse cursor style 【MouseCursor?】"]},{"file":"node3.dart","name":"Toggle Support","desc":["【toggleable】: Whether toggle is supported 【bool】","toggleable defaults to false. When set to true, clicking an active radio button will call back null data, supporting the need for toggling between selected and unselected states."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_zh-CN.json deleted file mode 100644 index d285c83cc..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoRadio","path":"/src/cupertino/radio.dart","parents":["StatefulWidget","Widget"],"desc":"macOS 风格的单选按钮。","fields":[{"name":"value","type":"T","required":true,"desc":"此单选按钮表示的值。"},{"name":"groupValue","type":"T?","desc":"一组单选按钮的当前选定值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户选择此 [CupertinoRadio] 按钮时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"toggleable","type":"bool","required":true,"desc":"如果允许此单选按钮在选中时再次选择以返回到不确定状态,则设置为 true。"},{"name":"useCheckmarkStyle","type":"bool","required":true,"desc":"控制单选按钮是以复选框样式显示还是以默认 iOS 单选样式显示。"},{"name":"activeColor","type":"Color?","desc":"选择此单选按钮时使用的颜色。"},{"name":"inactiveColor","type":"Color?","desc":"未选择此单选按钮时使用的颜色。"},{"name":"fillColor","type":"Color?","desc":"选择时填充单选按钮内圆的颜色。"},{"name":"focusColor","type":"Color?","desc":"单选按钮具有输入焦点时其边框的颜色。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"}],"id":240,"localName":"单选钮·macOS风格","lever":4,"family":1,"linkIds":[19,45],"nodes":[{"file":"node1.dart","name":"CupertinoRadio 使用","desc":["【value】 : 选钮值 【T】","【groupValue】 : 当前匹配值 【T】","【onChanged】 : 改变时回调 【Function(T)】"]},{"file":"node2.dart","name":"CupertinoRadio 颜色","desc":["【activeColor】 : 激活背景颜色 【Color?】","【fillColor】 : 填充 【Color?】","【inactiveColor】 : 未激活背景颜色 【Color?】","【focusColor】 : 聚焦色 【Color?】","【mouseCursor】 : 鼠标指针样式 【MouseCursor?】"]},{"file":"node3.dart","name":"是否支持切换","desc":["【toggleable】 : 是否支持切换 【bool】","toggleable 默认为 false, 为 true 时,点击激活的选钮,会回调 null 数据,以此支持选中和非选择切换需求。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_en-US.json deleted file mode 100644 index 44565efd6..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoScrollbar","path":"/src/cupertino/scrollbar.dart","parents":["RawScrollbar","StatefulWidget","Widget"],"desc":" An iOS style scrollbar.","fields":[{"name":"thicknessWhileDragging","type":"double","required":true,"desc":"The thickness of the scrollbar when it's being dragged by the user."},{"name":"radiusWhileDragging","type":"Radius","required":true,"desc":"The radius of the scrollbar edges when the scrollbar is being dragged by the user."}],"id":195,"lever":3,"family":1,"linkIds":[194,164,162],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoScrollbar","desc":["【child】 : Child widget 【Widget】","【controller】 : Controller 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_zh-CN.json deleted file mode 100644 index 3e5e577a2..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoScrollbar","path":"/src/cupertino/scrollbar.dart","parents":["RawScrollbar","StatefulWidget","Widget"],"desc":"iOS 风格的滚动条。","fields":[{"name":"thicknessWhileDragging","type":"double","required":true,"desc":"用户拖动滚动条时滚动条的厚度。"},{"name":"radiusWhileDragging","type":"Radius","required":true,"desc":"用户拖动滚动条时滚动条边缘的半径。"}],"id":195,"localName":"iOS滑动指示栏","lever":3,"family":1,"linkIds":[194,164,162],"nodes":[{"file":"node1_base.dart","name":"CupertinoScrollbar基本使用","desc":["【child】 : 子组件 【Widget】","【controller】 : 控制器 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_en-US.json deleted file mode 100644 index 2f50698c7..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSearchTextField","path":"/src/cupertino/search_field.dart","parents":["StatefulWidget","Widget"],"desc":" A [CupertinoTextField] that mimics the look and behavior of UIKit's `UISearchTextField`.","fields":[{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited."},{"name":"onChanged","type":"ValueChanged?","desc":"Invoked upon user input."},{"name":"onSubmitted","type":"ValueChanged?","desc":"Invoked upon keyboard submission."},{"name":"style","type":"TextStyle?","desc":"Allows changing the style of the text."},{"name":"placeholder","type":"String?","desc":"A hint placeholder text that appears when the text entry is empty."},{"name":"placeholderStyle","type":"TextStyle?","desc":"Sets the style of the placeholder of the text field."},{"name":"decoration","type":"BoxDecoration?","desc":"Sets the decoration for the text field."},{"name":"backgroundColor","type":"Color?","desc":"Set the [decoration] property's background color."},{"name":"borderRadius","type":"BorderRadius?","desc":"Sets the [decoration] property's border radius."},{"name":"keyboardType","type":"TextInputType?","desc":"The keyboard type for this search field."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"Sets the padding insets for the text and placeholder."},{"name":"itemColor","type":"Color","required":true,"desc":"Sets the color for the suffix and prefix icons."},{"name":"itemSize","type":"double","required":true,"desc":"Sets the base icon size for the suffix and prefix icons."},{"name":"prefixInsets","type":"EdgeInsetsGeometry","required":true,"desc":"Sets the padding insets for the suffix."},{"name":"prefixIcon","type":"Widget","required":true,"desc":"Sets a prefix widget."},{"name":"suffixInsets","type":"EdgeInsetsGeometry","required":true,"desc":"Sets the padding insets for the prefix."},{"name":"suffixIcon","type":"Icon","required":true,"desc":"Sets the suffix widget's icon."},{"name":"suffixMode","type":"OverlayVisibilityMode","required":true,"desc":"Dictates when the X-Mark (suffix) should be visible."},{"name":"onSuffixTap","type":"VoidCallback?","desc":"Sets the X-Mark (suffix) action."},{"name":"restorationId","type":"String?","desc":"{@macro flutter.material.textfield.restorationId}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"onTap","type":"VoidCallback?","desc":"{@macro flutter.material.textfield.onTap}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartQuotesType","type":"SmartQuotesType?","desc":"Whether to allow the platform to automatically format quotes."},{"name":"smartDashesType","type":"SmartDashesType?","desc":"Whether to allow the platform to automatically format dashes."},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"enabled","type":"bool?","desc":"Disables the text field when false."},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius","required":true,"desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"The color to use when painting the cursor."}],"id":392,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_zh-CN.json deleted file mode 100644 index 1b8af9f86..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSearchTextField","path":"/src/cupertino/search_field.dart","parents":["StatefulWidget","Widget"],"desc":"模仿 UIKit 的 `UISearchTextField` 外观和行为的 [CupertinoTextField]。","fields":[{"name":"controller","type":"TextEditingController?","desc":"控制正在编辑的文本。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户输入时调用。"},{"name":"onSubmitted","type":"ValueChanged?","desc":"键盘提交时调用。"},{"name":"style","type":"TextStyle?","desc":"允许更改文本的样式。"},{"name":"placeholder","type":"String?","desc":"文本输入为空时出现的提示占位符文本。"},{"name":"placeholderStyle","type":"TextStyle?","desc":"设置文本字段占位符的样式。"},{"name":"decoration","type":"BoxDecoration?","desc":"设置文本字段的装饰。"},{"name":"backgroundColor","type":"Color?","desc":"设置 [decoration] 属性的背景颜色。"},{"name":"borderRadius","type":"BorderRadius?","desc":"设置 [decoration] 属性的边框半径。"},{"name":"keyboardType","type":"TextInputType?","desc":"此搜索字段的键盘类型。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"设置文本和占位符的内边距插入。"},{"name":"itemColor","type":"Color","required":true,"desc":"设置后缀和前缀图标的颜色。"},{"name":"itemSize","type":"double","required":true,"desc":"设置后缀和前缀图标的基本图标大小。"},{"name":"prefixInsets","type":"EdgeInsetsGeometry","required":true,"desc":"设置后缀的内边距插入。"},{"name":"prefixIcon","type":"Widget","required":true,"desc":"设置前缀小部件。"},{"name":"suffixInsets","type":"EdgeInsetsGeometry","required":true,"desc":"设置前缀的内边距插入。"},{"name":"suffixIcon","type":"Icon","required":true,"desc":"设置后缀小部件的图标。"},{"name":"suffixMode","type":"OverlayVisibilityMode","required":true,"desc":"决定 X 标记(后缀)何时应该可见。"},{"name":"onSuffixTap","type":"VoidCallback?","desc":"设置 X 标记(后缀)操作。"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.material.textfield.restorationId}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"onTap","type":"VoidCallback?","desc":"{@macro flutter.material.textfield.onTap}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartQuotesType","type":"SmartQuotesType?","desc":"是否允许平台自动格式化引号。"},{"name":"smartDashesType","type":"SmartDashesType?","desc":"是否允许平台自动格式化破折号。"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"enabled","type":"bool?","desc":"为 false 时禁用文本字段。"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius","required":true,"desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"绘制光标时使用的颜色。"}],"id":392,"localName":"CupertinoSearchTextField","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_en-US.json deleted file mode 100644 index 0e464a279..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSegmentedControl","path":"/src/cupertino/segmented_control.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style segmented control.","fields":[{"name":"children","type":"Map","required":true,"desc":"The identifying keys and corresponding widget values in the segmented control."},{"name":"groupValue","type":"T?","desc":"The identifier of the widget that is currently selected."},{"name":"onValueChanged","type":"ValueChanged","required":true,"desc":"The callback that is called when a new option is tapped."},{"name":"unselectedColor","type":"Color?","desc":"The color used to fill the backgrounds of unselected widgets and as the text color of the selected widget."},{"name":"selectedColor","type":"Color?","desc":"The color used to fill the background of the selected widget and as the text color of unselected widgets."},{"name":"borderColor","type":"Color?","desc":"The color used as the border around each widget."},{"name":"pressedColor","type":"Color?","desc":"The color used to fill the background of the widget the user is temporarily interacting with through a long press or drag."},{"name":"disabledColor","type":"Color?","desc":"The color used to fill the background of the segment when it is disabled."},{"name":"disabledTextColor","type":"Color?","desc":"The color used for the text of the segment when it is disabled."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The CupertinoSegmentedControl will be placed inside this padding."},{"name":"disabledChildren","type":"Set","required":true,"desc":"The set of identifying keys that correspond to the segments that should be disabled."}],"id":262,"lever":4,"family":1,"linkIds":[33,256],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of iOS Tabs","desc":["【children】: Component Map 【Map】","【onValueChanged】: Value Change Callback 【ValueChanged】","【groupValue】: Selected Value 【T】","【padding】: Padding 【EdgeInsetsGeometry】"]},{"file":"node2_color.dart","name":"Colors of CupertinoSegmentedControl","desc":["【unselectedColor】: Unselected Color 【Color】","【selectedColor】: Selected Color 【Color】","【pressedColor】: Pressed Color 【Color】","【borderColor】: Border Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_zh-CN.json deleted file mode 100644 index 4a544411f..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSegmentedControl","path":"/src/cupertino/segmented_control.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的分段控件。","fields":[{"name":"children","type":"Map","required":true,"desc":"分段控件中的标识键和相应的小部件值。"},{"name":"groupValue","type":"T?","desc":"当前选定的小部件的标识符。"},{"name":"onValueChanged","type":"ValueChanged","required":true,"desc":"点击新选项时调用的回调。"},{"name":"unselectedColor","type":"Color?","desc":"用于填充未选中小部件背景和作为选中小部件文本颜色的颜色。"},{"name":"selectedColor","type":"Color?","desc":"用于填充选中小部件背景和作为未选中小部件文本颜色的颜色。"},{"name":"borderColor","type":"Color?","desc":"用作每个小部件周围边框的颜色。"},{"name":"pressedColor","type":"Color?","desc":"用于填充用户通过长按或拖动临时交互的小部件背景的颜色。"},{"name":"disabledColor","type":"Color?","desc":"段被禁用时用于填充段背景的颜色。"},{"name":"disabledTextColor","type":"Color?","desc":"段被禁用时用于段文本的颜色。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"CupertinoSegmentedControl 将放置在此内边距内。"},{"name":"disabledChildren","type":"Set","required":true,"desc":"对应于应被禁用的段的标识键集合。"}],"id":262,"localName":"iOS多栏切换","lever":4,"family":1,"linkIds":[33,256],"nodes":[{"file":"node1_base.dart","name":"iOS页签基本使用","desc":["【children】 : 组件Map 【Map】","【onValueChanged】 : 值改变回调 【ValueChanged】","【groupValue】 : 选中值 【T】","【padding】 : 内边距 【EdgeInsetsGeometry】"]},{"file":"node2_color.dart","name":"CupertinoSegmentedControl的颜色","desc":["【unselectedColor】 : 未选中色 【Color】","【selectedColor】 : 选中色 【Color】","【pressedColor】 : 按下色 【Color】","【borderColor】 : 边线色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_en-US.json deleted file mode 100644 index 9c138db88..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSheetTransition","path":"/src/cupertino/sheet.dart","parents":["StatefulWidget","Widget"],"desc":" Provides an iOS-style sheet transition.","fields":[{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"`primaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when this screen is being pushed."},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"`secondaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when another screen is being pushed on top of this one."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"linearTransition","type":"bool","required":true,"desc":"Whether to perform the transition linearly."}],"id":393,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_zh-CN.json deleted file mode 100644 index 253998c5d..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSheetTransition","path":"/src/cupertino/sheet.dart","parents":["StatefulWidget","Widget"],"desc":"提供 iOS 风格的表单过渡。","fields":[{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"`primaryRouteAnimation` 是推送此屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"`secondaryRouteAnimation` 是在此屏幕之上推送另一个屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"linearTransition","type":"bool","required":true,"desc":"是否线性执行过渡。"}],"id":393,"localName":"CupertinoSheetTransition","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_en-US.json deleted file mode 100644 index bd999c11e..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSlider","path":"/src/cupertino/slider.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style slider.","fields":[{"name":"value","type":"double","required":true,"desc":"The currently selected value for this slider."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user selects a new value for the slider."},{"name":"onChangeStart","type":"ValueChanged?","desc":"Called when the user starts selecting a new value for the slider."},{"name":"onChangeEnd","type":"ValueChanged?","desc":"Called when the user is done selecting a new value for the slider."},{"name":"min","type":"double","required":true,"desc":"The minimum value the user can select."},{"name":"max","type":"double","required":true,"desc":"The maximum value the user can select."},{"name":"divisions","type":"int?","desc":"The number of discrete divisions."},{"name":"activeColor","type":"Color?","desc":"The color to use for the portion of the slider that has been selected."},{"name":"thumbColor","type":"Color","required":true,"desc":"The color to use for the thumb of the slider."}],"id":43,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoSlider","desc":["【value】: value 【double】","【min】: minimum value 【double】","【max】: maximum value 【double】","【activeColor】: active color 【Color】","【thumbColor】: thumb color 【Color】","【divisions】: number of divisions 【int】","【onChangeStart】: callback when sliding starts 【Function(double)】","【onChangeEnd】: callback when sliding ends 【Function(double)】","【onChanged】: callback when value changes 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_zh-CN.json deleted file mode 100644 index a60be95d9..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSlider","path":"/src/cupertino/slider.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的滑块。","fields":[{"name":"value","type":"double","required":true,"desc":"此滑块当前选定的值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户为滑块选择新值时调用。"},{"name":"onChangeStart","type":"ValueChanged?","desc":"用户开始为滑块选择新值时调用。"},{"name":"onChangeEnd","type":"ValueChanged?","desc":"用户完成为滑块选择新值时调用。"},{"name":"min","type":"double","required":true,"desc":"用户可以选择的最小值。"},{"name":"max","type":"double","required":true,"desc":"用户可以选择的最大值。"},{"name":"divisions","type":"int?","desc":"离散分割的数量。"},{"name":"activeColor","type":"Color?","desc":"用于滑块已选择部分的颜色。"},{"name":"thumbColor","type":"Color","required":true,"desc":"用于滑块拇指的颜色。"}],"id":43,"localName":"iOS滑块","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoSlider基本使用","desc":["【value】 : 数值 【double】","【min】 : 最小值 【double】","【max】 : 最大值 【double】","【activeColor】 : 激活颜色 【Color】","【thumbColor】 : 圆形颜色 【Color】","【divisions】 : 分段数 【int】","【onChangeStart】 : 开始滑动回调 【Function(double)】","【onChangeEnd】 : 滑动结束回调 【Function(double)】","【onChanged】 : 改变时回调 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_en-US.json deleted file mode 100644 index 65ee5d06c..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSlidingSegmentedControl","path":"/src/cupertino/sliding_segmented_control.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS 13 style segmented control.","fields":[{"name":"children","type":"Map","required":true,"desc":"The identifying keys and corresponding widget values in the segmented control."},{"name":"disabledChildren","type":"Set","required":true,"desc":"The set of identifying keys that correspond to the segments that should be disabled."},{"name":"groupValue","type":"T?","desc":"The identifier of the widget that is currently selected."},{"name":"onValueChanged","type":"ValueChanged","required":true,"desc":"The callback that is called when a new option is tapped."},{"name":"backgroundColor","type":"Color","required":true,"desc":"The color used to paint the rounded rect behind the [children] and the separators."},{"name":"proportionalWidth","type":"bool","required":true,"desc":"Determine whether segments have proportional widths based on their content."},{"name":"thumbColor","type":"Color","required":true,"desc":"The color used to paint the interior of the thumb that appears behind the currently selected item."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the [children]."}],"id":256,"lever":3,"family":1,"linkIds":[33,262],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of iOS Sliding Tabs","desc":["【children】: Component Map 【Map】","【onValueChanged】: Value Change Callback 【ValueChanged】","【groupValue】: Selected Value 【T】","【thumbColor】: Selected Color 【Color】","【backgroundColor】: Background Color 【Color】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_zh-CN.json deleted file mode 100644 index 2a3336655..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSlidingSegmentedControl","path":"/src/cupertino/sliding_segmented_control.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 13 风格的分段控件。","fields":[{"name":"children","type":"Map","required":true,"desc":"分段控件中的标识键和相应的小部件值。"},{"name":"disabledChildren","type":"Set","required":true,"desc":"对应于应被禁用的段的标识键集合。"},{"name":"groupValue","type":"T?","desc":"当前选定的小部件的标识符。"},{"name":"onValueChanged","type":"ValueChanged","required":true,"desc":"点击新选项时调用的回调。"},{"name":"backgroundColor","type":"Color","required":true,"desc":"用于绘制 [children] 和分隔符后面的圆角矩形的颜色。"},{"name":"proportionalWidth","type":"bool","required":true,"desc":"确定段是否根据其内容具有比例宽度。"},{"name":"thumbColor","type":"Color","required":true,"desc":"用于绘制出现在当前选定项目后面的拇指内部的颜色。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"插入 [children] 的空间量。"}],"id":256,"localName":"iOS滑动页签","lever":3,"family":1,"linkIds":[33,262],"nodes":[{"file":"node1_base.dart","name":"iOS滑动页签基本使用","desc":["【children】 : 组件Map 【Map】","【onValueChanged】 : 值改变回调 【ValueChanged】","【groupValue】 : 选中值 【T】","【thumbColor】 : 选中色 【Color】","【backgroundColor】 : 背景色 【Color】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_en-US.json deleted file mode 100644 index 9aa22a36b..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSliverNavigationBar","path":"/src/cupertino/nav_bar.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-styled navigation bar with iOS-11-style large titles using slivers.","fields":[{"name":"largeTitle","type":"Widget?","desc":"The navigation bar's title."},{"name":"leading","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.leading}"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.automaticallyImplyLeading}"},{"name":"automaticallyImplyTitle","type":"bool","required":true,"desc":"Controls whether we should try to imply the [largeTitle] widget if null."},{"name":"alwaysShowMiddle","type":"bool","required":true,"desc":"Controls whether [middle] widget should always be visible (even in expanded state)."},{"name":"previousPageTitle","type":"String?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.previousPageTitle}"},{"name":"middle","type":"Widget?","desc":"A widget to place in the middle of the static navigation bar instead of the [largeTitle]."},{"name":"trailing","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.trailing}"},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.backgroundColor}"},{"name":"automaticBackgroundVisibility","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.automaticBackgroundVisibility}"},{"name":"enableBackgroundFilterBlur","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.enableBackgroundFilterBlur}"},{"name":"brightness","type":"Brightness?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.brightness}"},{"name":"padding","type":"EdgeInsetsDirectional?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.padding}"},{"name":"border","type":"Border?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.border}"},{"name":"transitionBetweenRoutes","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.transitionBetweenRoutes}"},{"name":"heroTag","type":"Object","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.heroTag}"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"A widget to place at the bottom of the large title or static navigation bar if there is no large title."},{"name":"bottomMode","type":"NavigationBarBottomMode?","desc":"Modes that determine how to display the navigation bar's [bottom], or the search field in a [CupertinoSliverNavigationBar.search]."},{"name":"onSearchableBottomTap","type":"ValueChanged?","desc":"Called when the search field in [CupertinoSliverNavigationBar.search] is tapped, toggling between an active and an inactive search state."},{"name":"stretch","type":"bool","required":true,"desc":"Whether the nav bar should stretch to fill the over-scroll area."},{"name":"searchField","type":"Widget?","desc":"The search field used in [CupertinoSliverNavigationBar.search]."}],"id":302,"lever":2,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Navigation Bar","desc":["【leading】: Left component 【Widget】","【middle】: Middle component 【Widget】","【trailing】: Trailing component 【Widget】","【largeTitle】: Bottom expandable component 【Widget】","【border】: Border 【Border】","【backgroundColor】: Background color 【Color】","【padding】: Padding 【EdgeInsetsDirectional】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_zh-CN.json deleted file mode 100644 index a6b277787..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSliverNavigationBar","path":"/src/cupertino/nav_bar.dart","parents":["StatefulWidget","Widget"],"desc":"使用 sliver 的 iOS 风格导航栏,具有 iOS-11 风格的大标题。","fields":[{"name":"largeTitle","type":"Widget?","desc":"导航栏的标题。"},{"name":"leading","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.leading}"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.automaticallyImplyLeading}"},{"name":"automaticallyImplyTitle","type":"bool","required":true,"desc":"控制如果为 null,我们是否应该尝试暗示 [largeTitle] 小部件。"},{"name":"alwaysShowMiddle","type":"bool","required":true,"desc":"控制 [middle] 小部件是否应始终可见(即使在展开状态下)。"},{"name":"previousPageTitle","type":"String?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.previousPageTitle}"},{"name":"middle","type":"Widget?","desc":"放置在静态导航栏中间而不是 [largeTitle] 的小部件。"},{"name":"trailing","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.trailing}"},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.backgroundColor}"},{"name":"automaticBackgroundVisibility","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.automaticBackgroundVisibility}"},{"name":"enableBackgroundFilterBlur","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.enableBackgroundFilterBlur}"},{"name":"brightness","type":"Brightness?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.brightness}"},{"name":"padding","type":"EdgeInsetsDirectional?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.padding}"},{"name":"border","type":"Border?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.border}"},{"name":"transitionBetweenRoutes","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.transitionBetweenRoutes}"},{"name":"heroTag","type":"Object","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.heroTag}"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"如果没有大标题,则放置在大标题或静态导航栏底部的小部件。"},{"name":"bottomMode","type":"NavigationBarBottomMode?","desc":"确定如何显示导航栏的 [bottom] 或 [CupertinoSliverNavigationBar.search] 中的搜索字段的模式。"},{"name":"onSearchableBottomTap","type":"ValueChanged?","desc":"点击 [CupertinoSliverNavigationBar.search] 中的搜索字段时调用,在活动和非活动搜索状态之间切换。"},{"name":"stretch","type":"bool","required":true,"desc":"导航栏是否应拉伸以填充过度滚动区域。"},{"name":"searchField","type":"Widget?","desc":"[CupertinoSliverNavigationBar.search] 中使用的搜索字段。"}],"id":302,"localName":"Sliver导航条","lever":2,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"导航条基本使用","desc":["【leading】 : 左侧组件 【Widget】","【middle】 : 中间组件 【Widget】","【trailing】 : 尾部组件 【Widget】","【largeTitle】 : 底部折展组件 【Widget】","【border】 : 边线 【Border】","【backgroundColor】 : 背景色 【Color】","【padding】 : 内边距 【EdgeInsetsDirectional】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_en-US.json deleted file mode 100644 index 22c50bf5d..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSliverRefreshControl","path":"/src/cupertino/refresh.dart","parents":["StatefulWidget","Widget"],"desc":" A sliver widget implementing the iOS-style pull to refresh content control.","fields":[{"name":"refreshTriggerPullDistance","type":"double","required":true,"desc":"The amount of overscroll the scrollable must be dragged to trigger a reload."},{"name":"refreshIndicatorExtent","type":"double","required":true,"desc":"The amount of space the refresh indicator sliver will keep holding while [onRefresh]'s [Future] is still running."},{"name":"builder","type":"RefreshControlIndicatorBuilder?","desc":"A builder that's called as this sliver's size changes, and as the state changes."},{"name":"onRefresh","type":"RefreshCallback?","desc":"Callback invoked when pulled by [refreshTriggerPullDistance]."}],"id":303,"lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Refresh Controller","desc":["【refreshIndicatorExtent】: Height of the loading indicator 【double】","【refreshTriggerPullDistance】: Scroll height that triggers loading 【double】","【onRefresh】: Pull-down event 【RefreshCallback】","【builder】: Indicator builder 【RefreshControlIndicatorBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_zh-CN.json deleted file mode 100644 index c1cfc35e6..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSliverRefreshControl","path":"/src/cupertino/refresh.dart","parents":["StatefulWidget","Widget"],"desc":"实现 iOS 风格下拉刷新内容控件的 sliver 小部件。","fields":[{"name":"refreshTriggerPullDistance","type":"double","required":true,"desc":"可滚动内容必须被拖动以触发重新加载的过度滚动量。"},{"name":"refreshIndicatorExtent","type":"double","required":true,"desc":"在 [onRefresh] 的 [Future] 仍在运行时,刷新指示器 sliver 将保持占用的空间量。"},{"name":"builder","type":"RefreshControlIndicatorBuilder?","desc":"随着此 sliver 大小变化和状态变化而调用的构建器。"},{"name":"onRefresh","type":"RefreshCallback?","desc":"被 [refreshTriggerPullDistance] 拉动时调用的回调。"}],"id":303,"localName":"Sliver刷新控制器","lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"刷新控制器基本使用","desc":["【refreshIndicatorExtent】 : 加载中指示器高度 【double】","【refreshTriggerPullDistance】 : 触发加载的滑动高度 【double】","【onRefresh】 : 下拉事件 【RefreshCallback】","【builder】 : 指示器构造器 【RefreshControlIndicatorBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_en-US.json deleted file mode 100644 index 2dd7c816b..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSpellCheckSuggestionsToolbar","path":"/src/cupertino/spell_check_suggestions_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" The default spell check suggestions toolbar for iOS.","fields":[{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"The location on which to anchor the menu."},{"name":"buttonItems","type":"List","required":true,"desc":"The [ContextMenuButtonItem]s that will be turned into the correct button widgets and displayed in the spell check suggestions toolbar."}],"id":394,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_zh-CN.json deleted file mode 100644 index 4f46cda1d..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSpellCheckSuggestionsToolbar","path":"/src/cupertino/spell_check_suggestions_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 的默认拼写检查建议工具栏。","fields":[{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"锚定菜单的位置。"},{"name":"buttonItems","type":"List","required":true,"desc":"将转换为正确按钮小部件并显示在拼写检查建议工具栏中的 [ContextMenuButtonItem]。"}],"id":394,"localName":"CupertinoSpellCheckSuggestionsToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_en-US.json deleted file mode 100644 index dda31e2b0..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSwitch","path":"/src/cupertino/switch.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style switch.","fields":[{"name":"value","type":"bool","required":true,"desc":"Whether this switch is on or off."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user toggles the switch on or off."},{"name":"activeTrackColor","type":"Color?","desc":"The color to use for the track when the switch is on."},{"name":"inactiveTrackColor","type":"Color?","desc":"The color to use for the track when the switch is off."},{"name":"thumbColor","type":"Color?","desc":"The color to use for the thumb when the switch is on."},{"name":"inactiveThumbColor","type":"Color?","desc":"The color to use on the thumb when the switch is off."},{"name":"focusColor","type":"Color?","desc":"The color to use for the focus highlight for keyboard interactions."},{"name":"onLabelColor","type":"Color?","desc":"The color to use for the accessibility label when the switch is on."},{"name":"offLabelColor","type":"Color?","desc":"The color to use for the accessibility label when the switch is off."},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.activeThumbImage}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onActiveThumbImageError}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.inactiveThumbImage}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onInactiveThumbImageError}"},{"name":"trackOutlineColor","type":"WidgetStateProperty?","desc":"The outline color of this [CupertinoSwitch]'s track."},{"name":"trackOutlineWidth","type":"WidgetStateProperty?","desc":"The outline width of this [CupertinoSwitch]'s track."},{"name":"thumbIcon","type":"WidgetStateProperty?","desc":"The icon to use on the thumb of this switch."},{"name":"mouseCursor","type":"WidgetStateProperty?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"applyTheme","type":"bool?","desc":"{@template flutter.cupertino.CupertinoSwitch.applyTheme} Whether to apply the ambient [CupertinoThemeData]."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.cupertino.CupertinoSwitch.dragStartBehavior} Determines the way that drag start behavior is handled."}],"id":41,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoSwitch","desc":["【value】: Whether it is selected 【double】","【activeColor】: Active state color 【Color】","【onChanged】: Toggle callback 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_zh-CN.json deleted file mode 100644 index ae7f74745..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSwitch","path":"/src/cupertino/switch.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的开关。","fields":[{"name":"value","type":"bool","required":true,"desc":"此开关是开启还是关闭。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户切换开关开启或关闭时调用。"},{"name":"activeTrackColor","type":"Color?","desc":"开关开启时用于轨道的颜色。"},{"name":"inactiveTrackColor","type":"Color?","desc":"开关关闭时用于轨道的颜色。"},{"name":"thumbColor","type":"Color?","desc":"开关开启时用于拇指的颜色。"},{"name":"inactiveThumbColor","type":"Color?","desc":"开关关闭时用于拇指的颜色。"},{"name":"focusColor","type":"Color?","desc":"用于键盘交互的焦点高亮的颜色。"},{"name":"onLabelColor","type":"Color?","desc":"开关开启时用于辅助功能标签的颜色。"},{"name":"offLabelColor","type":"Color?","desc":"开关关闭时用于辅助功能标签的颜色。"},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.activeThumbImage}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onActiveThumbImageError}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.inactiveThumbImage}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onInactiveThumbImageError}"},{"name":"trackOutlineColor","type":"WidgetStateProperty?","desc":"此 [CupertinoSwitch] 轨道的轮廓颜色。"},{"name":"trackOutlineWidth","type":"WidgetStateProperty?","desc":"此 [CupertinoSwitch] 轨道的轮廓宽度。"},{"name":"thumbIcon","type":"WidgetStateProperty?","desc":"在此开关拇指上使用的图标。"},{"name":"mouseCursor","type":"WidgetStateProperty?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点改变时调用的处理程序。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"applyTheme","type":"bool?","desc":"{@template flutter.cupertino.CupertinoSwitch.applyTheme} 是否应用环境 [CupertinoThemeData]。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.cupertino.CupertinoSwitch.dragStartBehavior} 确定拖动开始行为的处理方式。"}],"id":41,"localName":"iOS切钮","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoSwitch基本使用","desc":["【value】 : 是否选中 【double】","【activeColor】 : 激活态颜色 【Color】","【onChanged】 : 切换回调 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_en-US.json deleted file mode 100644 index 56cd80008..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTabBar","path":"/src/cupertino/bottom_tab_bar.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-styled bottom navigation tab bar.","fields":[{"name":"items","type":"List","required":true,"desc":"The interactive items laid out within the bottom navigation bar."},{"name":"onTap","type":"ValueChanged?","desc":"The callback that is called when a item is tapped."},{"name":"currentIndex","type":"int","required":true,"desc":"The index into [items] of the current active item."},{"name":"backgroundColor","type":"Color?","desc":"The background color of the tab bar. If it contains transparency, the tab bar will automatically produce a blurring effect to the content behind it."},{"name":"activeColor","type":"Color?","desc":"The foreground color of the icon and title for the [BottomNavigationBarItem] of the selected tab."},{"name":"inactiveColor","type":"Color","required":true,"desc":"The foreground color of the icon and title for the [BottomNavigationBarItem]s in the unselected state."},{"name":"iconSize","type":"double","required":true,"desc":"The size of all of the [BottomNavigationBarItem] icons."},{"name":"height","type":"double","required":true,"desc":"The height of the [CupertinoTabBar]."},{"name":"border","type":"Border?","desc":"The border of the [CupertinoTabBar]."}],"id":63,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoTabBar","desc":["【currentIndex】 : Current active index 【Widget】","【items】 : Item components 【Widget】","【backgroundColor】 : Background color 【Color】","【inactiveColor】 : Inactive color 【Color】","【activeColor】 : Active color 【Color】","【iconSize】 : Icon size 【double】","【border】 : Border 【Border】","【onTap】 : Click event 【Function(int)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_zh-CN.json deleted file mode 100644 index e9d6e0233..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTabBar","path":"/src/cupertino/bottom_tab_bar.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 风格的底部导航标签栏。","fields":[{"name":"items","type":"List","required":true,"desc":"在底部导航栏内布局的交互项目。"},{"name":"onTap","type":"ValueChanged?","desc":"点击项目时调用的回调。"},{"name":"currentIndex","type":"int","required":true,"desc":"当前活动项目在 [items] 中的索引。"},{"name":"backgroundColor","type":"Color?","desc":"标签栏的背景颜色。如果包含透明度,标签栏将自动对其后面的内容产生模糊效果。"},{"name":"activeColor","type":"Color?","desc":"选定标签的 [BottomNavigationBarItem] 图标和标题的前景颜色。"},{"name":"inactiveColor","type":"Color","required":true,"desc":"未选中状态下 [BottomNavigationBarItem] 图标和标题的前景颜色。"},{"name":"iconSize","type":"double","required":true,"desc":"所有 [BottomNavigationBarItem] 图标的大小。"},{"name":"height","type":"double","required":true,"desc":"[CupertinoTabBar] 的高度。"},{"name":"border","type":"Border?","desc":"[CupertinoTabBar] 的边框。"}],"id":63,"localName":"iOS页签","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoTabBar基本用法","desc":["【currentIndex】 : 当前激活索引 【Widget】","【items】 : 条目组件 【Widget】","【backgroundColor】 : 背景色 【Color】","【inactiveColor】 : 非激活色 【Color】","【activeColor】 : 激活色 【Color】","【iconSize】 : 图标大小 【double】","【border】 : 边线 【Border】","【onTap】 : 点击事件 【Function(int)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_en-US.json deleted file mode 100644 index f54f0ad48..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTabScaffold","path":"/src/cupertino/tab_scaffold.dart","parents":["StatefulWidget","Widget"],"desc":" Implements a tabbed iOS application's root layout and behavior structure.","fields":[{"name":"tabBar","type":"CupertinoTabBar","required":true,"desc":"The [tabBar] is a [CupertinoTabBar] drawn at the bottom of the screen that lets the user switch between different tabs in the main content area when present."},{"name":"controller","type":"CupertinoTabController?","desc":"Controls the currently selected tab index of the [tabBar], as well as the active tab index of the [tabBuilder]. Providing a different [controller] will also update the scaffold's current active index to the new controller's index value."},{"name":"tabBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"An [IndexedWidgetBuilder] that's called when tabs become active."},{"name":"backgroundColor","type":"Color?","desc":"The color of the widget that underlies the entire scaffold."},{"name":"resizeToAvoidBottomInset","type":"bool","required":true,"desc":"Whether the body should size itself to avoid the window's bottom inset."},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the [CupertinoTabScaffold]."}],"id":158,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoTabScaffold","desc":["【tabBar】: Tab bar 【CupertinoTabBar】","【backgroundColor】: Background color 【Color】","【controller】: Controller 【CupertinoTabController】","【tabBuilder】: Page builder 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_zh-CN.json deleted file mode 100644 index 3c74e82d4..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTabScaffold","path":"/src/cupertino/tab_scaffold.dart","parents":["StatefulWidget","Widget"],"desc":"实现标签式 iOS 应用程序的根布局和行为结构。","fields":[{"name":"tabBar","type":"CupertinoTabBar","required":true,"desc":"[tabBar] 是绘制在屏幕底部的 [CupertinoTabBar],让用户在存在时在主内容区域的不同标签之间切换。"},{"name":"controller","type":"CupertinoTabController?","desc":"控制 [tabBar] 的当前选定标签索引,以及 [tabBuilder] 的活动标签索引。提供不同的 [controller] 也会将脚手架的当前活动索引更新为新控制器的索引值。"},{"name":"tabBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"标签变为活动时调用的 [IndexedWidgetBuilder]。"},{"name":"backgroundColor","type":"Color?","desc":"整个脚手架下方小部件的颜色。"},{"name":"resizeToAvoidBottomInset","type":"bool","required":true,"desc":"主体是否应调整自身大小以避免窗口的底部插入。"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [CupertinoTabScaffold] 状态的恢复 ID。"}],"id":158,"localName":"iOS页签脚手架","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoTabScaffold基本用法","desc":["【tabBar】 : 页签条 【CupertinoTabBar】","【backgroundColor】 : 背景色 【Color】","【controller】 : 控制器 【CupertinoTabController】","【tabBuilder】 : 页面构造器 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_en-US.json deleted file mode 100644 index 884bdb282..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTabView","path":"/src/cupertino/tab_view.dart","parents":["StatefulWidget","Widget"],"desc":" A single tab view with its own [Navigator] state and history.","fields":[{"name":"builder","type":"WidgetBuilder?","desc":"The widget builder for the default route of the tab view ([Navigator.defaultRouteName], which is `/`)."},{"name":"navigatorKey","type":"GlobalKey?","desc":"A key to use when building this widget's [Navigator]."},{"name":"defaultTitle","type":"String?","desc":"The title of the default route."},{"name":"routes","type":"Map?","desc":"This tab view's routing table."},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"The route generator callback used when the tab view is navigated to a named route."},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"Called when [onGenerateRoute] also fails to generate a route."},{"name":"navigatorObservers","type":"List","required":true,"desc":"The list of observers for the [Navigator] created in this tab view."},{"name":"restorationScopeId","type":"String?","desc":"Restoration ID to save and restore the state of the [Navigator] built by this [CupertinoTabView]."}],"id":229,"lever":3,"family":1,"linkIds":[65,158],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoTabView","desc":["【builder】 : Homepage builder 【WidgetBuilder】","【navigatorObservers】 : Route observers 【List】","【routes】 : Route mapping 【Map】","【onGenerateRoute】 : Route factory 【RouteFactory】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_zh-CN.json deleted file mode 100644 index 69f3489d5..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTabView","path":"/src/cupertino/tab_view.dart","parents":["StatefulWidget","Widget"],"desc":"具有自己的 [Navigator] 状态和历史记录的单个标签视图。","fields":[{"name":"builder","type":"WidgetBuilder?","desc":"标签视图默认路由的小部件构建器([Navigator.defaultRouteName],即 `/`)。"},{"name":"navigatorKey","type":"GlobalKey?","desc":"构建此小部件的 [Navigator] 时使用的键。"},{"name":"defaultTitle","type":"String?","desc":"默认路由的标题。"},{"name":"routes","type":"Map?","desc":"此标签视图的路由表。"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"标签视图导航到命名路由时使用的路由生成器回调。"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"当 [onGenerateRoute] 也无法生成路由时调用。"},{"name":"navigatorObservers","type":"List","required":true,"desc":"在此标签视图中创建的 [Navigator] 的观察者列表。"},{"name":"restorationScopeId","type":"String?","desc":"保存和恢复此 [CupertinoTabView] 构建的 [Navigator] 状态的恢复 ID。"}],"id":229,"localName":"Cupertino页面","lever":3,"family":1,"linkIds":[65,158],"nodes":[{"file":"node1_base.dart","name":"CupertinoTabView基本使用","desc":["【builder】 : 主页构造器 【WidgetBuilder】","【navigatorObservers】 : 路由监听器 【List】","【routes】 : 路由映射 【Map】","【onGenerateRoute】 : 路由工厂 【RouteFactory】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_en-US.json deleted file mode 100644 index 011f06fd0..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextField","path":"/src/cupertino/text_field.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style text field.","fields":[{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"decoration","type":"BoxDecoration?","desc":"Controls the [BoxDecoration] of the box behind the text input."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"Padding around the text entry area between the [prefix] and [suffix] or the clear button when [clearButtonMode] is not never."},{"name":"placeholder","type":"String?","desc":"A lighter colored placeholder hint that appears on the first line of the text field when the text entry is empty."},{"name":"placeholderStyle","type":"TextStyle?","desc":"The style to use for the placeholder text."},{"name":"prefix","type":"Widget?","desc":"An optional [Widget] to display before the text."},{"name":"prefixMode","type":"OverlayVisibilityMode","required":true,"desc":"Controls the visibility of the [prefix] widget based on the state of text entry when the [prefix] argument is not null."},{"name":"suffix","type":"Widget?","desc":"An optional [Widget] to display after the text."},{"name":"suffixMode","type":"OverlayVisibilityMode","required":true,"desc":"Controls the visibility of the [suffix] widget based on the state of text entry when the [suffix] argument is not null."},{"name":"crossAxisAlignment","type":"CrossAxisAlignment","required":true,"desc":"Controls the vertical alignment of the [prefix] and the [suffix] widget in relation to content."},{"name":"clearButtonMode","type":"OverlayVisibilityMode","required":true,"desc":"Show an iOS-style clear button to clear the current text entry."},{"name":"clearButtonSemanticLabel","type":"String?","desc":"The semantic label for the clear button used by screen readers."},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.widgets.editableText.keyboardType}"},{"name":"textInputAction","type":"TextInputAction?","desc":"The type of action button to use for the keyboard."},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"style","type":"TextStyle?","desc":"The style to use for the text being edited."},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"Configuration of toolbar options."},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@macro flutter.material.InputDecorator.textAlignVertical}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.readOnly}"},{"name":"showCursor","type":"bool?","desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@macro flutter.widgets.editableText.obscuringCharacter}"},{"name":"obscureText","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.obscureText}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines} * [expands], which determines whether the field should fill the height of its parent."},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines} * [expands], which determines whether the field should fill the height of its parent."},{"name":"expands","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.expands}"},{"name":"maxLength","type":"int?","desc":"The maximum number of characters (Unicode grapheme clusters) to allow in the text field."},{"name":"maxLengthEnforcement","type":"MaxLengthEnforcement?","desc":"Determines how the [maxLength] limit should be enforced."},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onChanged}"},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@macro flutter.widgets.editableText.onEditingComplete}"},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onSubmitted}"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapOutside}"},{"name":"onTapUpOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapUpOutside}"},{"name":"inputFormatters","type":"List?","desc":"{@macro flutter.widgets.editableText.inputFormatters}"},{"name":"enabled","type":"bool","required":true,"desc":"Disables the text field when false."},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius","required":true,"desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"The color to use when painting the cursor."},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"Controls how tall the selection highlight boxes are computed to be."},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"Controls how wide the selection highlight boxes are computed to be."},{"name":"keyboardAppearance","type":"Brightness?","desc":"The appearance of the keyboard."},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.editableText.scrollController}"},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"onTap","type":"GestureTapCallback?","desc":"{@macro flutter.material.textfield.onTap}"},{"name":"autofillHints","type":"Iterable?","desc":"{@macro flutter.widgets.editableText.autofillHints} {@macro flutter.services.AutofillConfiguration.autofillHints}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.material.textfield.restorationId}"},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.scribbleEnabled}"},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.stylusHandwritingEnabled}"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@macro flutter.widgets.editableText.contentInsertionConfiguration}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"Configuration for the text field magnifier."},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@macro flutter.widgets.EditableText.spellCheckConfiguration}"},{"name":"undoController","type":"UndoHistoryController?","desc":"{@macro flutter.widgets.undoHistory.controller}"}],"id":245,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoTextField","desc":["【placeholder】 : Hint text 【String】","【showCursor】 : Whether to show cursor 【bool】","【minLines】 : Minimum number of lines 【int】","【maxLines】 : Maximum number of lines 【int】","【padding】 : Padding 【EdgeInsetsGeometry】","【onChanged】 : Change listener 【ValueChanged】","【onTap】: Tap listener 【GestureTapCallback】","【onSubmitted】: Submit listener 【ValueChanged】"]},{"file":"node2_style.dart","name":"Common Style Properties of CupertinoTextField","desc":["【style】 : Input text style 【TextStyle】","【prefix】: Prefix component 【Widget】","【prefixMode】: Prefix mode 【OverlayVisibilityMode】","【suffix】: Suffix component 【Widget】","【suffixMode】: Suffix mode 【OverlayVisibilityMode】","【cursorColor】: Cursor color 【Color】","【cursorWidth】: Cursor width 【double】","【cursorRadius】: Cursor radius 【Radius】","【readOnly】: Whether read-only 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_zh-CN.json deleted file mode 100644 index a0f10f02a..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextField","path":"/src/cupertino/text_field.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的文本字段。","fields":[{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"controller","type":"TextEditingController?","desc":"控制正在编辑的文本。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"decoration","type":"BoxDecoration?","desc":"控制文本输入后面框的 [BoxDecoration]。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"当 [clearButtonMode] 不为 never 时,[prefix] 和 [suffix] 或清除按钮之间文本输入区域周围的内边距。"},{"name":"placeholder","type":"String?","desc":"当文本输入为空时出现在文本字段第一行的较浅颜色占位符提示。"},{"name":"placeholderStyle","type":"TextStyle?","desc":"用于占位符文本的样式。"},{"name":"prefix","type":"Widget?","desc":"在文本前显示的可选 [Widget]。"},{"name":"prefixMode","type":"OverlayVisibilityMode","required":true,"desc":"当 [prefix] 参数不为 null 时,根据文本输入状态控制 [prefix] 小部件的可见性。"},{"name":"suffix","type":"Widget?","desc":"在文本后显示的可选 [Widget]。"},{"name":"suffixMode","type":"OverlayVisibilityMode","required":true,"desc":"当 [suffix] 参数不为 null 时,根据文本输入状态控制 [suffix] 小部件的可见性。"},{"name":"crossAxisAlignment","type":"CrossAxisAlignment","required":true,"desc":"控制 [prefix] 和 [suffix] 小部件相对于内容的垂直对齐。"},{"name":"clearButtonMode","type":"OverlayVisibilityMode","required":true,"desc":"显示 iOS 风格的清除按钮以清除当前文本输入。"},{"name":"clearButtonSemanticLabel","type":"String?","desc":"屏幕阅读器使用的清除按钮的语义标签。"},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.widgets.editableText.keyboardType}"},{"name":"textInputAction","type":"TextInputAction?","desc":"用于键盘的操作按钮类型。"},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"style","type":"TextStyle?","desc":"用于正在编辑的文本的样式。"},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"工具栏选项的配置。"},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@macro flutter.material.InputDecorator.textAlignVertical}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.readOnly}"},{"name":"showCursor","type":"bool?","desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@macro flutter.widgets.editableText.obscuringCharacter}"},{"name":"obscureText","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.obscureText}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines} * [expands],确定字段是否应填充其父级的高度。"},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines} * [expands],确定字段是否应填充其父级的高度。"},{"name":"expands","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.expands}"},{"name":"maxLength","type":"int?","desc":"文本字段中允许的最大字符数(Unicode 字素簇)。"},{"name":"maxLengthEnforcement","type":"MaxLengthEnforcement?","desc":"确定如何强制执行 [maxLength] 限制。"},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onChanged}"},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@macro flutter.widgets.editableText.onEditingComplete}"},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onSubmitted}"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapOutside}"},{"name":"onTapUpOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapUpOutside}"},{"name":"inputFormatters","type":"List?","desc":"{@macro flutter.widgets.editableText.inputFormatters}"},{"name":"enabled","type":"bool","required":true,"desc":"为 false 时禁用文本字段。"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius","required":true,"desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"绘制光标时使用的颜色。"},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"控制选择高亮框的计算高度。"},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"控制选择高亮框的计算宽度。"},{"name":"keyboardAppearance","type":"Brightness?","desc":"键盘的外观。"},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.editableText.scrollController}"},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"onTap","type":"GestureTapCallback?","desc":"{@macro flutter.material.textfield.onTap}"},{"name":"autofillHints","type":"Iterable?","desc":"{@macro flutter.widgets.editableText.autofillHints} {@macro flutter.services.AutofillConfiguration.autofillHints}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.material.textfield.restorationId}"},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.scribbleEnabled}"},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.stylusHandwritingEnabled}"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@macro flutter.widgets.editableText.contentInsertionConfiguration}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"文本字段放大镜的配置。"},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@macro flutter.widgets.EditableText.spellCheckConfiguration}"},{"name":"undoController","type":"UndoHistoryController?","desc":"{@macro flutter.widgets.undoHistory.controller}"}],"id":245,"localName":"iOS风格输入框","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoTextField基础使用","desc":["【placeholder】 : 提示文字 【String】","【showCursor】 : 是否显示游标 【bool】","【minLines】 : 最小行数 【int】","【maxLines】 : 最大行数 【int】","【padding】 : 内边距 【EdgeInsetsGeometry】","【onChanged】 : 变化监听 【ValueChanged】","【onTap】: 点击监听 【GestureTapCallback】","【onSubmitted】: 提交监听 【ValueChanged】"]},{"file":"node2_style.dart","name":"CupertinoTextField常用样式属性","desc":["【style】 : 输入文字样式 【TextStyle】","【prefix】: 前缀组件 【Widget】","【prefixMode】: 前缀模式 【OverlayVisibilityMode】","【suffix】: 后缀组件 【Widget】","【suffixMode】: 后缀模式 【OverlayVisibilityMode】","【cursorColor】: 游标颜色 【Color】","【cursorWidth】: 游标宽度 【double】","【cursorRadius】: 游标圆角 【Radius】","【readOnly】: 是否只读 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_en-US.json deleted file mode 100644 index 67b033562..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextFormFieldRow","path":"/src/cupertino/text_form_field_row.dart","parents":["FormField","StatefulWidget","Widget"],"desc":" Creates a [CupertinoFormRow] containing a [FormField] that wraps a [CupertinoTextField].","fields":[{"name":"prefix","type":"Widget?","desc":"A widget that is displayed at the start of the row."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Content padding for the row."},{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited."},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.material.TextFormField.onChanged}"}],"id":395,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_zh-CN.json deleted file mode 100644 index a82a0ff3d..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextFormFieldRow","path":"/src/cupertino/text_form_field_row.dart","parents":["FormField","StatefulWidget","Widget"],"desc":"创建包含包装 [CupertinoTextField] 的 [FormField] 的 [CupertinoFormRow]。","fields":[{"name":"prefix","type":"Widget?","desc":"显示在行开始处的小部件。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"行的内容内边距。"},{"name":"controller","type":"TextEditingController?","desc":"控制正在编辑的文本。"},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.material.TextFormField.onChanged}"}],"id":395,"localName":"CupertinoTextFormFieldRow","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_en-US.json deleted file mode 100644 index a8b91f938..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextMagnifier","path":"/src/cupertino/magnifier.dart","parents":["StatefulWidget","Widget"],"desc":" A [CupertinoMagnifier] used for magnifying text in cases where a user's finger may be blocking the point of interest, like a selection handle.","fields":[{"name":"animationCurve","type":"Curve","required":true,"desc":"The curve used for the in / out animations."},{"name":"controller","type":"MagnifierController","required":true,"desc":"This magnifier's controller."},{"name":"dragResistance","type":"double","required":true,"desc":"A drag resistance on the downward Y position of the lens."},{"name":"hideBelowThreshold","type":"double","required":true,"desc":"The difference in Y between the gesture position and the caret center so that the magnifier hides itself."},{"name":"horizontalScreenEdgePadding","type":"double","required":true,"desc":"The padding on either edge of the screen that any part of the magnifier cannot exist past."},{"name":"magnifierInfo","type":"ValueNotifier","required":true,"desc":"[CupertinoTextMagnifier] will determine its own positioning based on the [MagnifierInfo] of this notifier."}],"id":396,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_zh-CN.json deleted file mode 100644 index 24eb7fc26..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextMagnifier","path":"/src/cupertino/magnifier.dart","parents":["StatefulWidget","Widget"],"desc":"用于在用户手指可能阻挡兴趣点(如选择手柄)的情况下放大文本的 [CupertinoMagnifier]。","fields":[{"name":"animationCurve","type":"Curve","required":true,"desc":"用于进入/退出动画的曲线。"},{"name":"controller","type":"MagnifierController","required":true,"desc":"此放大镜的控制器。"},{"name":"dragResistance","type":"double","required":true,"desc":"镜头向下 Y 位置的拖动阻力。"},{"name":"hideBelowThreshold","type":"double","required":true,"desc":"手势位置和插入符中心之间的 Y 差异,以便放大镜隐藏自己。"},{"name":"horizontalScreenEdgePadding","type":"double","required":true,"desc":"屏幕任一边缘的内边距,放大镜的任何部分都不能超出此范围。"},{"name":"magnifierInfo","type":"ValueNotifier","required":true,"desc":"[CupertinoTextMagnifier] 将根据此通知器的 [MagnifierInfo] 确定自己的定位。"}],"id":396,"localName":"CupertinoTextMagnifier","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_en-US.json deleted file mode 100644 index 4141bdbce..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextSelectionToolbar","path":"/src/cupertino/text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-style text selection toolbar.","fields":[{"name":"anchorAbove","type":"Offset","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.anchorAbove}"},{"name":"anchorBelow","type":"Offset","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.anchorBelow}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"},{"name":"toolbarBuilder","type":"CupertinoToolbarBuilder","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.toolbarBuilder}"}],"id":299,"lever":1,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"This component is not available","desc":["【-】 : - 【-】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_zh-CN.json deleted file mode 100644 index a5526e370..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextSelectionToolbar","path":"/src/cupertino/text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 风格的文本选择工具栏。","fields":[{"name":"anchorAbove","type":"Offset","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.anchorAbove}"},{"name":"anchorBelow","type":"Offset","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.anchorBelow}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"},{"name":"toolbarBuilder","type":"CupertinoToolbarBuilder","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.toolbarBuilder}"}],"id":299,"localName":"ios文字选择工具条","lever":1,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"该组件无法使用","desc":["【-】 : - 【-】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_en-US.json deleted file mode 100644 index 6af01d655..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextSelectionToolbarButton","path":"/src/cupertino/text_selection_toolbar_button.dart","parents":["StatefulWidget","Widget"],"desc":" A button in the style of the iOS text selection toolbar buttons.","fields":[{"name":"child","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.child} The child of this button."},{"name":"onPressed","type":"VoidCallback?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed} Called when this button is pressed. {@endtemplate}"},{"name":"buttonItem","type":"ContextMenuButtonItem?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed} The buttonItem used to generate the button when using [CupertinoTextSelectionToolbarButton.buttonItem]. {@endtemplate}"},{"name":"text","type":"String?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.text} The text used in the button's label when using [CupertinoTextSelectionToolbarButton.text]. {@endtemplate}"}],"id":397,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_zh-CN.json deleted file mode 100644 index 916d685c8..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextSelectionToolbarButton","path":"/src/cupertino/text_selection_toolbar_button.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 文本选择工具栏按钮样式的按钮。","fields":[{"name":"child","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.child} 此按钮的子项。"},{"name":"onPressed","type":"VoidCallback?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed} 按下此按钮时调用。{@endtemplate}"},{"name":"buttonItem","type":"ContextMenuButtonItem?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed} 使用 [CupertinoTextSelectionToolbarButton.buttonItem] 时用于生成按钮的 buttonItem。{@endtemplate}"},{"name":"text","type":"String?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.text} 使用 [CupertinoTextSelectionToolbarButton.text] 时按钮标签中使用的文本。{@endtemplate}"}],"id":397,"localName":"CupertinoTextSelectionToolbarButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_en-US.json deleted file mode 100644 index 0d84d7a67..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTheme","path":"/src/cupertino/theme.dart","parents":["StatelessWidget","Widget"],"desc":" Applies a visual styling theme to descendant Cupertino widgets.","fields":[{"name":"data","type":"CupertinoThemeData","required":true,"desc":"The [CupertinoThemeData] styling for this theme."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":169,"lever":3,"family":0,"linkIds":[156,168],"nodes":[{"file":"node1_base.dart","name":"Text Style-TextTheme","desc":["Descendant components can obtain and use the theme data through CupertinoTheme.of."]},{"file":"node2_use.dart","name":"Usage of CupertinoThemeData","desc":["Like Theme, you can share specified properties among descendants, but there are fewer properties. Note that if you need to use the theme, you cannot obtain it in the current context."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_zh-CN.json deleted file mode 100644 index fd3ece290..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTheme","path":"/src/cupertino/theme.dart","parents":["StatelessWidget","Widget"],"desc":"将视觉样式主题应用于后代 Cupertino 小部件。","fields":[{"name":"data","type":"CupertinoThemeData","required":true,"desc":"此主题的 [CupertinoThemeData] 样式。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":169,"localName":"iOS主题","lever":3,"family":0,"linkIds":[156,168],"nodes":[{"file":"node1_base.dart","name":"文字样式-TextTheme","desc":["后代组件可以通过CupertinoTheme.of获取主题的数据进行使用。"]},{"file":"node2_use.dart","name":"CupertinoThemeData的使用","desc":["和Theme一样可以通过指定的属性,让它们在后代中共享,不过属性较少。注意如果需要使用主题,不能在当前的context中获取。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_en-US.json deleted file mode 100644 index f795a2677..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTimerPicker","path":"/src/cupertino/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A countdown timer picker in iOS style.","fields":[{"name":"mode","type":"CupertinoTimerPickerMode","required":true,"desc":"The mode of the timer picker."},{"name":"initialTimerDuration","type":"Duration","required":true,"desc":"The initial duration of the countdown timer."},{"name":"minuteInterval","type":"int","required":true,"desc":"The granularity of the minute spinner. Must be a positive integer factor of 60."},{"name":"secondInterval","type":"int","required":true,"desc":"The granularity of the second spinner. Must be a positive integer factor of 60."},{"name":"onTimerDurationChanged","type":"ValueChanged","required":true,"desc":"Callback called when the timer duration changes."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"Defines how the timer picker should be positioned within its parent."},{"name":"backgroundColor","type":"Color?","desc":"Background color of timer picker."},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.cupertino.picker.itemExtent}"},{"name":"selectionOverlayBuilder","type":"SelectionOverlayBuilder?","desc":"A function that returns a widget that is overlaid on the picker to highlight the currently selected entry."}],"id":138,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoTimerPicker","desc":["【initialTimerDuration】: Initial time 【Duration】","【minuteInterval】: Minute interval 【double】","【secondInterval】: Second interval 【double】","【alignment】: Alignment 【AlignmentGeometry】","【backgroundColor】: Background color 【Color】","【mode】: Mode*3 【CupertinoTimerPickerMode】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_zh-CN.json deleted file mode 100644 index 1d73b55a1..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTimerPicker","path":"/src/cupertino/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的倒计时器选择器。","fields":[{"name":"mode","type":"CupertinoTimerPickerMode","required":true,"desc":"计时器选择器的模式。"},{"name":"initialTimerDuration","type":"Duration","required":true,"desc":"倒计时器的初始持续时间。"},{"name":"minuteInterval","type":"int","required":true,"desc":"分钟旋转器的粒度。必须是 60 的正整数因子。"},{"name":"secondInterval","type":"int","required":true,"desc":"秒旋转器的粒度。必须是 60 的正整数因子。"},{"name":"onTimerDurationChanged","type":"ValueChanged","required":true,"desc":"计时器持续时间更改时调用的回调。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"定义计时器选择器在其父级内的定位方式。"},{"name":"backgroundColor","type":"Color?","desc":"计时器选择器的背景颜色。"},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.cupertino.picker.itemExtent}"},{"name":"selectionOverlayBuilder","type":"SelectionOverlayBuilder?","desc":"返回覆盖在选择器上以突出显示当前选定条目的小部件的函数。"}],"id":138,"localName":"iOS时间选择器","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoTimerPicker基本使用","desc":["【initialTimerDuration】 : 初始时间 【Duration】","【minuteInterval】 : 分钟间隔数 【double】","【secondInterval】 : 秒间隔数 【double】","【alignment】 : 对齐方式 【AlignmentGeometry】","【backgroundColor】 : 背景色 【Color】","【mode】 : 模式*3 【CupertinoTimerPickerMode】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_en-US.json deleted file mode 100644 index c00871740..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoUserInterfaceLevel","path":"/src/cupertino/interface_level.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Establishes a subtree in which [CupertinoUserInterfaceLevel.of] resolves to the given visual elevation from the [CupertinoUserInterfaceLevelData]. This can be used to apply style differences based on a widget's elevation.","fields":[],"id":337,"lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to CupertinoUserInterfaceLevel","desc":["CupertinoUserInterfaceLevel.of(context) can retrieve CupertinoUserInterfaceLevelData. This component can also be used to set and share this data with the subtree. For more information about the data source, see: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_zh-CN.json deleted file mode 100644 index 8c1c62180..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoUserInterfaceLevel","path":"/src/cupertino/interface_level.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"建立一个子树,其中 [CupertinoUserInterfaceLevel.of] 解析为来自 [CupertinoUserInterfaceLevelData] 的给定视觉高度。这可用于根据小部件的高度应用样式差异。","fields":[],"id":337,"localName":"用户接口等级","lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoUserInterfaceLevel 介绍","desc":["CupertinoUserInterfaceLevel.of(context) 可以获取 CupertinoUserInterfaceLevelData 数据。也可以使用该组件设置该数据与子树共享。关于数据原图详见: https:developer.apple.com/documentation/uikit/uiuserinterfacelevel"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_en-US.json b/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_en-US.json deleted file mode 100644 index ebe6223ab..000000000 --- a/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CustomMultiChildLayout","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that uses a delegate to size and position multiple children.","fields":[{"name":"delegate","type":"MultiChildLayoutDelegate","required":true,"desc":"The delegate that controls the layout of the children."}],"id":341,"lever":4,"family":3,"linkIds":[315,285],"nodes":[{"file":"node_01.dart","name":"Basic Usage of CustomMultiChildLayout","desc":["【children】: Set of child components 【List】","【delegate】: Layout delegate 【MultiChildLayoutDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_zh-CN.json deleted file mode 100644 index 007f72cd2..000000000 --- a/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CustomMultiChildLayout","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用委托来调整大小和定位多个子项的小部件。","fields":[{"name":"delegate","type":"MultiChildLayoutDelegate","required":true,"desc":"控制子项布局的委托。"}],"id":341,"localName":"通用多子布局","lever":4,"family":3,"linkIds":[315,285],"nodes":[{"file":"node_01.dart","name":"CustomMultiChildLayout基本使用","desc":["【children】 : 子组件集 【List】","【delegate】 : 布局代理 【MultiChildLayoutDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_en-US.json b/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_en-US.json deleted file mode 100644 index a8923ba2a..000000000 --- a/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CustomPaint","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that provides a canvas on which to draw during the paint phase.","fields":[{"name":"painter","type":"CustomPainter?","desc":"The painter that paints before the children."},{"name":"foregroundPainter","type":"CustomPainter?","desc":"The painter that paints after the children."},{"name":"size","type":"Size","required":true,"desc":"The size that this [CustomPaint] should aim for, given the layout constraints, if there is no child."},{"name":"isComplex","type":"bool","required":true,"desc":"Whether the painting is complex enough to benefit from caching."},{"name":"willChange","type":"bool","required":true,"desc":"Whether the raster cache should be told that this painting is likely to change in the next frame."}],"id":166,"lever":5,"family":2,"linkIds":[],"nodes":[{"file":"node1_clock.dart","name":"CustomPaint Line Drawing","desc":["【painter】: Painter 【CustomPainter】"]},{"file":"node2_bezier.dart","name":"CustomPaint Bezier Curve","desc":["Flutter also supports complex drawings such as Bezier curves."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_zh-CN.json deleted file mode 100644 index 47fe09652..000000000 --- a/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CustomPaint","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在绘制阶段提供画布进行绘制的小部件。","fields":[{"name":"painter","type":"CustomPainter?","desc":"在子项之前绘制的画家。"},{"name":"foregroundPainter","type":"CustomPainter?","desc":"在子项之后绘制的画家。"},{"name":"size","type":"Size","required":true,"desc":"如果没有子项,此 [CustomPaint] 在给定布局约束的情况下应该瞄准的大小。"},{"name":"isComplex","type":"bool","required":true,"desc":"绘制是否足够复杂以从缓存中受益。"},{"name":"willChange","type":"bool","required":true,"desc":"是否应该告诉光栅缓存此绘制可能在下一帧中更改。"}],"id":166,"localName":"绘制组件","lever":5,"family":2,"linkIds":[],"nodes":[{"file":"node1_clock.dart","name":"CustomPaint绘线图形","desc":["【painter】 : 绘画器 【CustomPainter】"]},{"file":"node2_bezier.dart","name":"CustomPaint绘线贝塞尔曲线","desc":["Flutter也支持贝塞尔曲线等复杂绘制。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_en-US.json deleted file mode 100644 index 24f0d7cf7..000000000 --- a/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CustomScrollView","path":"/src/widgets/scroll_view.dart","parents":["ScrollView","StatelessWidget","Widget"],"desc":" A [ScrollView] that creates custom scroll effects using [slivers].","fields":[{"name":"slivers","type":"List","required":true,"desc":"The slivers to place inside the viewport."}],"id":183,"lever":5,"family":4,"linkIds":[184,185,188],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CustomScrollView","desc":["【slivers】 : Child component list 【List】","【reverse】 : Whether to reverse 【bool】","【scrollDirection】 : Scroll direction 【Axis】","【controller】 : Controller 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_zh-CN.json deleted file mode 100644 index b014b692b..000000000 --- a/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CustomScrollView","path":"/src/widgets/scroll_view.dart","parents":["ScrollView","StatelessWidget","Widget"],"desc":"使用 [slivers] 创建自定义滚动效果的 [ScrollView]。","fields":[{"name":"slivers","type":"List","required":true,"desc":"放置在视口内的 sliver。"}],"id":183,"localName":"通用滑动视图","lever":5,"family":4,"linkIds":[184,185,188],"nodes":[{"file":"node1_base.dart","name":"CustomScrollView基本使用","desc":["【slivers】 : 子组件列表 【List】","【reverse】 : 是否反向 【bool】","【scrollDirection】 : 滑动方向 【Axis】","【controller】 : 控制器 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_en-US.json b/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_en-US.json deleted file mode 100644 index bd667e22e..000000000 --- a/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CustomSingleChildLayout","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that defers the layout of its single child to a delegate.","fields":[{"name":"delegate","type":"SingleChildLayoutDelegate","required":true,"desc":"The delegate that controls the layout of the child."}],"id":285,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CustomSingleChildLayout","desc":["【delegate】 : delegate 【SingleChildLayoutDelegate】"]},{"file":"node2_offset.dart","name":"Offset Usage of CustomSingleChildLayout","desc":["The offset capability of the delegate can be used to position the child component with an offset."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_zh-CN.json deleted file mode 100644 index 334c69666..000000000 --- a/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CustomSingleChildLayout","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其单个子项的布局委托给委托的小部件。","fields":[{"name":"delegate","type":"SingleChildLayoutDelegate","required":true,"desc":"控制子项布局的委托。"}],"id":285,"localName":"通用单子布局","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CustomSingleChildLayout基本使用","desc":["【delegate】 : 代理 【SingleChildLayoutDelegate】"]},{"file":"node2_offset.dart","name":"CustomSingleChildLayout的偏移使用","desc":["可以利用代理的偏移能力,对子组件进行偏移定位。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_en-US.json b/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_en-US.json deleted file mode 100644 index 2e2081554..000000000 --- a/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DataTable","path":"/src/material/data_table.dart","parents":["StatelessWidget","Widget"],"desc":" A data table that follows the [Material 2](https://material.io/go/design-data-tables) design specification.","fields":[{"name":"columns","type":"List","required":true,"desc":"The configuration and labels for the columns in the table."},{"name":"sortColumnIndex","type":"int?","desc":"The current primary sort key's column."},{"name":"sortAscending","type":"bool","required":true,"desc":"Whether the column mentioned in [sortColumnIndex], if any, is sorted in ascending order."},{"name":"onSelectAll","type":"ValueSetter?","desc":"Invoked when the user selects or unselects every row, using the checkbox in the heading row."},{"name":"decoration","type":"Decoration?","desc":"{@template flutter.material.dataTable.decoration} The background and border decoration for the table. {@endtemplate}"},{"name":"dataRowColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.dataTable.dataRowColor} The background color for the data rows."},{"name":"dataRowMinHeight","type":"double?","desc":"{@template flutter.material.dataTable.dataRowMinHeight} The minimum height of each row (excluding the row that contains column headings). {@endtemplate}"},{"name":"dataRowMaxHeight","type":"double?","desc":"{@template flutter.material.dataTable.dataRowMaxHeight} The maximum height of each row (excluding the row that contains column headings). {@endtemplate}"},{"name":"dataTextStyle","type":"TextStyle?","desc":"{@template flutter.material.dataTable.dataTextStyle} The text style for data rows. {@endtemplate}"},{"name":"headingRowColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.dataTable.headingRowColor} The background color for the heading row."},{"name":"headingRowHeight","type":"double?","desc":"{@template flutter.material.dataTable.headingRowHeight} The height of the heading row. {@endtemplate}"},{"name":"headingTextStyle","type":"TextStyle?","desc":"{@template flutter.material.dataTable.headingTextStyle} The text style for the heading row. {@endtemplate}"},{"name":"horizontalMargin","type":"double?","desc":"{@template flutter.material.dataTable.horizontalMargin} The horizontal margin between the edges of the table and the content in the first and last cells of each row."},{"name":"columnSpacing","type":"double?","desc":"{@template flutter.material.dataTable.columnSpacing} The horizontal margin between the contents of each data column. {@endtemplate}"},{"name":"showCheckboxColumn","type":"bool","required":true,"desc":"{@template flutter.material.dataTable.showCheckboxColumn} Whether the widget should display checkboxes for selectable rows."},{"name":"rows","type":"List","required":true,"desc":"The data to show in each row (excluding the row that contains the column headings)."},{"name":"dividerThickness","type":"double?","desc":"{@template flutter.material.dataTable.dividerThickness} The width of the divider that appears between [TableRow]s."},{"name":"showBottomBorder","type":"bool","required":true,"desc":"Whether a border at the bottom of the table is displayed."},{"name":"checkboxHorizontalMargin","type":"double?","desc":"{@template flutter.material.dataTable.checkboxHorizontalMargin} Horizontal margin around the checkbox, if it is displayed. {@endtemplate}"},{"name":"border","type":"TableBorder?","desc":"The style to use when painting the boundary and interior divisions of the table."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":102,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DataTable","desc":["【columns】 : columns 【List】","【rows】 : rows 【List】"]},{"file":"node2_operation.dart","name":"Sorting in DataTable","desc":["【sortColumnIndex】 : column index 【int】","【columnSpacing】 : column spacing 【double】","【sortAscending】 : ascending order 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_zh-CN.json deleted file mode 100644 index 8886617e8..000000000 --- a/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DataTable","path":"/src/material/data_table.dart","parents":["StatelessWidget","Widget"],"desc":"遵循 [Material 2](https://material.io/go/design-data-tables) 设计规范的数据表。","fields":[{"name":"columns","type":"List","required":true,"desc":"表中列的配置和标签。"},{"name":"sortColumnIndex","type":"int?","desc":"当前主要排序键的列。"},{"name":"sortAscending","type":"bool","required":true,"desc":"[sortColumnIndex] 中提到的列(如果有)是否按升序排序。"},{"name":"onSelectAll","type":"ValueSetter?","desc":"当用户使用标题行中的复选框选择或取消选择每一行时调用。"},{"name":"decoration","type":"Decoration?","desc":"{@template flutter.material.dataTable.decoration} 表的背景和边框装饰。{@endtemplate}"},{"name":"dataRowColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.dataTable.dataRowColor} 数据行的背景颜色。"},{"name":"dataRowMinHeight","type":"double?","desc":"{@template flutter.material.dataTable.dataRowMinHeight} 每行的最小高度(不包括包含列标题的行)。{@endtemplate}"},{"name":"dataRowMaxHeight","type":"double?","desc":"{@template flutter.material.dataTable.dataRowMaxHeight} 每行的最大高度(不包括包含列标题的行)。{@endtemplate}"},{"name":"dataTextStyle","type":"TextStyle?","desc":"{@template flutter.material.dataTable.dataTextStyle} 数据行的文本样式。{@endtemplate}"},{"name":"headingRowColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.dataTable.headingRowColor} 标题行的背景颜色。"},{"name":"headingRowHeight","type":"double?","desc":"{@template flutter.material.dataTable.headingRowHeight} 标题行的高度。{@endtemplate}"},{"name":"headingTextStyle","type":"TextStyle?","desc":"{@template flutter.material.dataTable.headingTextStyle} 标题行的文本样式。{@endtemplate}"},{"name":"horizontalMargin","type":"double?","desc":"{@template flutter.material.dataTable.horizontalMargin} 表边缘与每行第一个和最后一个单元格内容之间的水平边距。"},{"name":"columnSpacing","type":"double?","desc":"{@template flutter.material.dataTable.columnSpacing} 每个数据列内容之间的水平边距。{@endtemplate}"},{"name":"showCheckboxColumn","type":"bool","required":true,"desc":"{@template flutter.material.dataTable.showCheckboxColumn} 小部件是否应为可选择的行显示复选框。"},{"name":"rows","type":"List","required":true,"desc":"在每行中显示的数据(不包括包含列标题的行)。"},{"name":"dividerThickness","type":"double?","desc":"{@template flutter.material.dataTable.dividerThickness} 出现在 [TableRow] 之间的分隔符宽度。"},{"name":"showBottomBorder","type":"bool","required":true,"desc":"是否显示表底部的边框。"},{"name":"checkboxHorizontalMargin","type":"double?","desc":"{@template flutter.material.dataTable.checkboxHorizontalMargin} 复选框周围的水平边距(如果显示)。{@endtemplate}"},{"name":"border","type":"TableBorder?","desc":"绘制表的边界和内部分割时使用的样式。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":102,"localName":"数据表格","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DataTable基本使用","desc":["【columns】 : 列 【List】","【rows】 : 行 【List】"]},{"file":"node2_operation.dart","name":"DataTable的sort","desc":["【sortColumnIndex】 : 列号 【int】","【columnSpacing】 : 列间距 【double】","【sortAscending】 : 是否顺序 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_en-US.json deleted file mode 100644 index 75708ef89..000000000 --- a/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DataTableTheme","path":"/src/material/data_table_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a data table theme to descendant [DataTable] widgets.","fields":[{"name":"data","type":"DataTableThemeData","required":true,"desc":"The properties used for all descendant [DataTable] widgets."}],"id":398,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_zh-CN.json deleted file mode 100644 index 39bf3e1dc..000000000 --- a/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DataTableTheme","path":"/src/material/data_table_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将数据表主题应用于后代 [DataTable] 小部件。","fields":[{"name":"data","type":"DataTableThemeData","required":true,"desc":"用于所有后代 [DataTable] 小部件的属性。"}],"id":398,"localName":"DataTableTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_en-US.json deleted file mode 100644 index 5a9f0fd99..000000000 --- a/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DatePickerDialog","path":"/src/material/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A Material-style date picker dialog.","fields":[{"name":"initialDate","type":"DateTime?","desc":"The initially selected [DateTime] that the picker should display."},{"name":"firstDate","type":"DateTime","required":true,"desc":"The earliest allowable [DateTime] that the user can select."},{"name":"lastDate","type":"DateTime","required":true,"desc":"The latest allowable [DateTime] that the user can select."},{"name":"currentDate","type":"DateTime","required":true,"desc":"The [DateTime] representing today. It will be highlighted in the day grid."},{"name":"initialEntryMode","type":"DatePickerEntryMode","required":true,"desc":"The initial mode of date entry method for the date picker dialog."},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"Function to provide full control over which [DateTime] can be selected."},{"name":"cancelText","type":"String?","desc":"The text that is displayed on the cancel button."},{"name":"confirmText","type":"String?","desc":"The text that is displayed on the confirm button."},{"name":"helpText","type":"String?","desc":"The text that is displayed at the top of the header."},{"name":"initialCalendarMode","type":"DatePickerMode","required":true,"desc":"The initial display of the calendar picker."},{"name":"errorFormatText","type":"String?","desc":"The error text displayed if the entered date is not in the correct format."},{"name":"errorInvalidText","type":"String?","desc":"The error text displayed if the date is not valid."},{"name":"fieldHintText","type":"String?","desc":"The hint text displayed in the [TextField]."},{"name":"fieldLabelText","type":"String?","desc":"The label text displayed in the [TextField]."},{"name":"keyboardType","type":"TextInputType?","desc":"{@template flutter.material.datePickerDialog} The keyboard type of the [TextField]."},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the [DatePickerDialog]."},{"name":"onDatePickerModeChange","type":"ValueChanged?","desc":"Called when the [DatePickerDialog] is toggled between [DatePickerEntryMode.calendar],[DatePickerEntryMode.input]."},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToInputEntryModeIcon}"},{"name":"switchToCalendarEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToCalendarEntryModeIcon}"},{"name":"insetPadding","type":"EdgeInsets","required":true,"desc":"The amount of padding added to [MediaQueryData.viewInsets] on the outside of the dialog. This defines the minimum space between the screen's edges and the dialog."},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":399,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_zh-CN.json deleted file mode 100644 index e2dc067f2..000000000 --- a/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DatePickerDialog","path":"/src/material/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"Material 风格的日期选择器对话框。","fields":[{"name":"initialDate","type":"DateTime?","desc":"选择器应显示的初始选定 [DateTime]。"},{"name":"firstDate","type":"DateTime","required":true,"desc":"用户可以选择的最早允许的 [DateTime]。"},{"name":"lastDate","type":"DateTime","required":true,"desc":"用户可以选择的最晚允许的 [DateTime]。"},{"name":"currentDate","type":"DateTime","required":true,"desc":"表示今天的 [DateTime]。它将在日期网格中突出显示。"},{"name":"initialEntryMode","type":"DatePickerEntryMode","required":true,"desc":"日期选择器对话框的日期输入方法的初始模式。"},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"提供对哪个 [DateTime] 可以选择的完全控制的函数。"},{"name":"cancelText","type":"String?","desc":"取消按钮上显示的文本。"},{"name":"confirmText","type":"String?","desc":"确认按钮上显示的文本。"},{"name":"helpText","type":"String?","desc":"在标题顶部显示的文本。"},{"name":"initialCalendarMode","type":"DatePickerMode","required":true,"desc":"日历选择器的初始显示。"},{"name":"errorFormatText","type":"String?","desc":"如果输入的日期格式不正确,显示的错误文本。"},{"name":"errorInvalidText","type":"String?","desc":"如果日期无效,显示的错误文本。"},{"name":"fieldHintText","type":"String?","desc":"在 [TextField] 中显示的提示文本。"},{"name":"fieldLabelText","type":"String?","desc":"在 [TextField] 中显示的标签文本。"},{"name":"keyboardType","type":"TextInputType?","desc":"{@template flutter.material.datePickerDialog} [TextField] 的键盘类型。"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [DatePickerDialog] 状态的恢复 ID。"},{"name":"onDatePickerModeChange","type":"ValueChanged?","desc":"当 [DatePickerDialog] 在 [DatePickerEntryMode.calendar]、[DatePickerEntryMode.input] 之间切换时调用。"},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToInputEntryModeIcon}"},{"name":"switchToCalendarEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToCalendarEntryModeIcon}"},{"name":"insetPadding","type":"EdgeInsets","required":true,"desc":"添加到对话框外部 [MediaQueryData.viewInsets] 的内边距量。这定义了屏幕边缘和对话框之间的最小空间。"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":399,"localName":"DatePickerDialog","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_en-US.json deleted file mode 100644 index 41f9d5720..000000000 --- a/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DatePickerTheme","path":"/src/material/date_picker_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the visual properties for [DatePickerDialog]s in this widget's subtree.","fields":[{"name":"data","type":"DatePickerThemeData","required":true,"desc":"Specifies the visual properties used by descendant [DatePickerDialog] widgets."}],"id":400,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_zh-CN.json deleted file mode 100644 index 9fd66c707..000000000 --- a/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DatePickerTheme","path":"/src/material/date_picker_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [DatePickerDialog] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"DatePickerThemeData","required":true,"desc":"指定后代 [DatePickerDialog] 小部件使用的视觉属性。"}],"id":400,"localName":"DatePickerTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_en-US.json deleted file mode 100644 index e84702510..000000000 --- a/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DateRangePickerDialog","path":"/src/material/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A Material-style date range picker dialog.","fields":[{"name":"initialDateRange","type":"DateTimeRange?","desc":"The date range that the date range picker starts with when it opens."},{"name":"firstDate","type":"DateTime","required":true,"desc":"The earliest allowable date on the date range."},{"name":"lastDate","type":"DateTime","required":true,"desc":"The latest allowable date on the date range."},{"name":"currentDate","type":"DateTime?","desc":"The [currentDate] represents the current day (i.e. today)."},{"name":"initialEntryMode","type":"DatePickerEntryMode","required":true,"desc":"The initial date range picker entry mode."},{"name":"cancelText","type":"String?","desc":"The label on the cancel button for the text input mode."},{"name":"confirmText","type":"String?","desc":"The label on the \"OK\" button for the text input mode."},{"name":"saveText","type":"String?","desc":"The label on the save button for the fullscreen calendar mode."},{"name":"helpText","type":"String?","desc":"The label displayed at the top of the dialog."},{"name":"errorInvalidRangeText","type":"String?","desc":"The message used when the date range is invalid (e.g. start date is after end date)."},{"name":"errorFormatText","type":"String?","desc":"The message used when an input text isn't in a proper date format."},{"name":"errorInvalidText","type":"String?","desc":"The message used when an input text isn't a selectable date."},{"name":"fieldStartHintText","type":"String?","desc":"The text used to prompt the user when no text has been entered in the start field."},{"name":"fieldEndHintText","type":"String?","desc":"The text used to prompt the user when no text has been entered in the end field."},{"name":"fieldStartLabelText","type":"String?","desc":"The label for the start date text input field."},{"name":"fieldEndLabelText","type":"String?","desc":"The label for the end date text input field."},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.material.datePickerDialog}"},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the [DateRangePickerDialog]."},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToInputEntryModeIcon}"},{"name":"switchToCalendarEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToCalendarEntryModeIcon}"},{"name":"selectableDayPredicate","type":"SelectableDayForRangePredicate?","desc":"Function to provide full control over which [DateTime] can be selected."},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":339,"lever":4,"family":1,"linkIds":[135,136,137],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DateRangePickerDialog","desc":["【firstDate】 : Earliest date 【DateTime】","【lastDate】 : Latest date 【DateTime】","【initialDateRange】 : Initial range 【DateTimeRange?】","【saveText】 : Save text 【String?】"]},{"file":"node2_diy.dart","name":"Customize DateRangePickerDialog","desc":["Modify the source code of DateRangePickerDialog to display a numerical background for month entries."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_zh-CN.json deleted file mode 100644 index 3d889e0fb..000000000 --- a/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DateRangePickerDialog","path":"/src/material/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"Material 风格的日期范围选择器对话框。","fields":[{"name":"initialDateRange","type":"DateTimeRange?","desc":"日期范围选择器打开时开始的日期范围。"},{"name":"firstDate","type":"DateTime","required":true,"desc":"日期范围上最早允许的日期。"},{"name":"lastDate","type":"DateTime","required":true,"desc":"日期范围上最晚允许的日期。"},{"name":"currentDate","type":"DateTime?","desc":"[currentDate] 表示当前日期(即今天)。"},{"name":"initialEntryMode","type":"DatePickerEntryMode","required":true,"desc":"初始日期范围选择器输入模式。"},{"name":"cancelText","type":"String?","desc":"文本输入模式下取消按钮的标签。"},{"name":"confirmText","type":"String?","desc":"文本输入模式下\\"},{"name":"saveText","type":"String?","desc":"全屏日历模式下保存按钮的标签。"},{"name":"helpText","type":"String?","desc":"显示在对话框顶部的标签。"},{"name":"errorInvalidRangeText","type":"String?","desc":"日期范围无效时使用的消息(例如开始日期在结束日期之后)。"},{"name":"errorFormatText","type":"String?","desc":"输入文本不是正确日期格式时使用的消息。"},{"name":"errorInvalidText","type":"String?","desc":"输入文本不是可选择日期时使用的消息。"},{"name":"fieldStartHintText","type":"String?","desc":"在开始字段中未输入文本时用于提示用户的文本。"},{"name":"fieldEndHintText","type":"String?","desc":"在结束字段中未输入文本时用于提示用户的文本。"},{"name":"fieldStartLabelText","type":"String?","desc":"开始日期文本输入字段的标签。"},{"name":"fieldEndLabelText","type":"String?","desc":"结束日期文本输入字段的标签。"},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.material.datePickerDialog}"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [DateRangePickerDialog] 状态的恢复 ID。"},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToInputEntryModeIcon}"},{"name":"switchToCalendarEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToCalendarEntryModeIcon}"},{"name":"selectableDayPredicate","type":"SelectableDayForRangePredicate?","desc":"提供对哪个 [DateTime] 可以选择的完全控制的函数。"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":339,"localName":"日期范围","lever":4,"family":1,"linkIds":[135,136,137],"nodes":[{"file":"node1_base.dart","name":"DateRangePickerDialog 基本使用","desc":["【firstDate】 : 最早日期 【DateTime】","【lastDate】 : 最晚日期 【DateTime】","【initialDateRange】 : 初始范围 【DateTimeRange?】","【saveText】 : 保存文字 【String?】"]},{"file":"node2_diy.dart","name":"魔改 DateRangePickerDialog","desc":["修改 DateRangePickerDialog 源码,使得月份条目显示数值背景。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_en-US.json deleted file mode 100644 index f9d03b1ef..000000000 --- a/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DecoratedBox","path":"/src/widgets/container.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that paints a [Decoration] either before or after its child paints.","fields":[{"name":"decoration","type":"Decoration","required":true,"desc":"What decoration to paint."},{"name":"position","type":"DecorationPosition","required":true,"desc":"Whether to paint the box decoration behind or in front of the child."}],"id":70,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DecoratedBox","desc":["【decoration】: Decoration object 【Decoration】","【position】: Foreground color (left)/Background color (right) 【DecorationPosition】"]},{"file":"node2_image.dart","name":"Shape and Image Decoration of DecoratedBox","desc":["【shape】: Shape 【BoxShape】","【image】: Background image 【DecorationImage】,"]},{"file":"node3_border.dart","name":"Border Decoration of DecoratedBox","desc":["【border】: Border 【BoxBorder】,"]},{"file":"node4_shape.dart","name":"Shape Decoration of DecoratedBox","desc":["You can specify the border shape through the ShapeDecoration object,"]},{"file":"node5_line.dart","name":"Bottom Line Decoration of DecoratedBox","desc":["You can specify the bottom line through the UnderlineTabIndicator object,"]},{"file":"node6_flutterLogo.dart","name":"FlutterLogoDecoration Decoration","desc":["You can specify Flutter icon decoration through the FlutterLogoDecoration object (not very useful),"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_zh-CN.json deleted file mode 100644 index eaf0dc432..000000000 --- a/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DecoratedBox","path":"/src/widgets/container.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在其子项绘制之前或之后绘制 [Decoration] 的小部件。","fields":[{"name":"decoration","type":"Decoration","required":true,"desc":"要绘制的装饰。"},{"name":"position","type":"DecorationPosition","required":true,"desc":"是否在子项后面或前面绘制框装饰。"}],"id":70,"localName":"装饰盒","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DecoratedBox基本使用","desc":["【decoration】 : 装饰对象 【Decoration】","【position】 : 前景色(左)/后景色(右) 【DecorationPosition】"]},{"file":"node2_image.dart","name":"DecoratedBox形状和图片装饰","desc":["【shape】 : 形状 【BoxShape】","【image】 : 背景图片 【DecorationImage】,"]},{"file":"node3_border.dart","name":"DecoratedBox边线装饰","desc":["【border】 : 边线 【BoxBorder】,"]},{"file":"node4_shape.dart","name":"DecoratedBox形状装饰","desc":["通过ShapeDecoration对象可指定边线形状,"]},{"file":"node5_line.dart","name":"DecoratedBox底线装饰","desc":["通过UnderlineTabIndicator对象可指定底线,"]},{"file":"node6_flutterLogo.dart","name":"FlutterLogoDecoration装饰","desc":["通过FlutterLogoDecoration对象可指定Flutter图标装饰(并没有什么太大的作用),"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_en-US.json deleted file mode 100644 index 0224cd6fc..000000000 --- a/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DecoratedBoxTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of a [DecoratedBox] that animates the different properties of its [Decoration].","fields":[{"name":"decoration","type":"Animation","required":true,"desc":"Animation of the decoration to paint."},{"name":"position","type":"DecorationPosition","required":true,"desc":"Whether to paint the box decoration behind or in front of the child."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":113,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DecoratedBoxTransition","desc":["【child】: Child component 【Widget】","【position】: Foreground/Background color 【DecorationPosition】","【decoration】: Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_zh-CN.json deleted file mode 100644 index 435b0ba41..000000000 --- a/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DecoratedBoxTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"[DecoratedBox] 的动画版本,对其 [Decoration] 的不同属性进行动画处理。","fields":[{"name":"decoration","type":"Animation","required":true,"desc":"要绘制的装饰动画。"},{"name":"position","type":"DecorationPosition","required":true,"desc":"是否在子项后面或前面绘制框装饰。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":113,"localName":"装饰变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DecoratedBoxTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【position】 : 前/背景色 【DecorationPosition】","【decoration】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_en-US.json b/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_en-US.json deleted file mode 100644 index 1b42f1a0e..000000000 --- a/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DecoratedSliver","path":"/src/widgets/decorated_sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver widget that paints a [Decoration] either before or after its child paints.","fields":[{"name":"decoration","type":"Decoration","required":true,"desc":"What decoration to paint."},{"name":"position","type":"DecorationPosition","required":true,"desc":"Whether to paint the box decoration behind or in front of the child."}],"id":209,"lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1.dart","name":"Basic Usage of DecoratedSliver","desc":["【sliver】: Child component 【Widget?】","【decoration】: Decoration object 【Decoration】","【position】: Decoration position 【DecorationPosition】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_zh-CN.json deleted file mode 100644 index f53c9108d..000000000 --- a/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DecoratedSliver","path":"/src/widgets/decorated_sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在其子项绘制之前或之后绘制 [Decoration] 的 sliver 小部件。","fields":[{"name":"decoration","type":"Decoration","required":true,"desc":"要绘制的装饰。"},{"name":"position","type":"DecorationPosition","required":true,"desc":"是否在子项后面或前面绘制框装饰。"}],"id":209,"localName":"装饰滑片","lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1.dart","name":"DecoratedSliver 基本使用","desc":["【sliver】 : 孩子组件 【Widget?】","【decoration】 : 装饰对象 【Decoration】","【position】 : 装饰位置 【DecorationPosition】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_en-US.json deleted file mode 100644 index 72867325f..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultAssetBundle","path":"/src/widgets/basic.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" A widget that determines the default asset bundle for its descendants.","fields":[{"name":"bundle","type":"AssetBundle","required":true,"desc":"The bundle to use as a default."}],"id":320,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to DefaultAssetBundle","desc":["【bundle】: *Resource Bundle 【AssetBundle】","【child】: *Child Widget 【Widget】","We can define our own DefaultAssetBundle for use by subsequent nodes, or we can directly use the default one. This case demonstrates loading and displaying a resource image using the DefaultAssetBundle provided by the framework."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_zh-CN.json deleted file mode 100644 index caac12e30..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultAssetBundle","path":"/src/widgets/basic.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为其后代确定默认资产包的小部件。","fields":[{"name":"bundle","type":"AssetBundle","required":true,"desc":"用作默认值的包。"}],"id":320,"localName":"默认资源包","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DefaultAssetBundle 介绍","desc":["【bundle】 : *资源包 【AssetBundle】","【child】 : *子组件 【Widget】","我们可以定义自己的 DefaultAssetBundle 来供后续节点使用,也可以直接使用默认的。该案例演示通过框架提供的 DefaultAssetBundle 加载一张资源图片进行显示。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_en-US.json deleted file mode 100644 index 2acfb4165..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultSelectionStyle","path":"/src/widgets/default_selection_style.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" The selection style to apply to descendant [EditableText] widgets which don't have an explicit style.","fields":[{"name":"cursorColor","type":"Color?","desc":"The color of the text field's cursor."},{"name":"selectionColor","type":"Color?","desc":"The background color of selected text."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The [MouseCursor] for mouse pointers hovering over selectable Text widgets."}],"id":401,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_zh-CN.json deleted file mode 100644 index c863a2b07..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultSelectionStyle","path":"/src/widgets/default_selection_style.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"应用于没有显式样式的后代 [EditableText] 小部件的选择样式。","fields":[{"name":"cursorColor","type":"Color?","desc":"文本字段光标的颜色。"},{"name":"selectionColor","type":"Color?","desc":"选定文本的背景颜色。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"悬停在可选择文本小部件上的鼠标指针的 [MouseCursor]。"}],"id":401,"localName":"DefaultSelectionStyle","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_en-US.json deleted file mode 100644 index 4855c980a..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTabController","path":"/src/material/tab_controller.dart","parents":["StatefulWidget","Widget"],"desc":" The [TabController] for descendant widgets that don't specify one explicitly.","fields":[{"name":"length","type":"int","required":true,"desc":"The total number of tabs."},{"name":"initialIndex","type":"int","required":true,"desc":"The initial index of the selected tab."},{"name":"animationDuration","type":"Duration?","desc":"Controls the duration of DefaultTabController and TabBarView animations."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":230,"lever":3,"family":1,"linkIds":[148,59],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DefaultTabController","desc":["【length】: Number of tabs 【int】","【initialIndex】: Initial tab index 【int】","【child】: Component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_zh-CN.json deleted file mode 100644 index dbd0417e8..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTabController","path":"/src/material/tab_controller.dart","parents":["StatefulWidget","Widget"],"desc":"未明确指定的后代小部件的 [TabController]。","fields":[{"name":"length","type":"int","required":true,"desc":"标签的总数。"},{"name":"initialIndex","type":"int","required":true,"desc":"选定标签的初始索引。"},{"name":"animationDuration","type":"Duration?","desc":"控制 DefaultTabController 和 TabBarView 动画的持续时间。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":230,"localName":"默认页签控制器","lever":3,"family":1,"linkIds":[148,59],"nodes":[{"file":"node1_base.dart","name":"DefaultTabController基本使用","desc":["【length】 : 页签数量 【int】","【initialIndex】 : 初始页签索引 【int】","【child】 : 组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_en-US.json deleted file mode 100644 index d726ccf5e..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTextEditingShortcuts","path":"/src/widgets/default_text_editing_shortcuts.dart","parents":["StatelessWidget","Widget"],"desc":" A widget with the shortcuts used for the default text editing behavior.","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":402,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_zh-CN.json deleted file mode 100644 index 2e4990741..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTextEditingShortcuts","path":"/src/widgets/default_text_editing_shortcuts.dart","parents":["StatelessWidget","Widget"],"desc":"具有用于默认文本编辑行为的快捷键的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":402,"localName":"DefaultTextEditingShortcuts","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_en-US.json deleted file mode 100644 index f2dc1d524..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTextHeightBehavior","path":"/src/widgets/text.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" The [TextHeightBehavior] that will apply to descendant [Text] and [EditableText] widgets which have not explicitly set [Text.textHeightBehavior].","fields":[{"name":"textHeightBehavior","type":"TextHeightBehavior","required":true,"desc":"{@macro dart.ui.textHeightBehavior}"}],"id":403,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_zh-CN.json deleted file mode 100644 index aeced7fe6..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTextHeightBehavior","path":"/src/widgets/text.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"将应用于未明确设置 [Text.textHeightBehavior] 的后代 [Text] 和 [EditableText] 小部件的 [TextHeightBehavior]。","fields":[{"name":"textHeightBehavior","type":"TextHeightBehavior","required":true,"desc":"{@macro dart.ui.textHeightBehavior}"}],"id":403,"localName":"DefaultTextHeightBehavior","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_en-US.json deleted file mode 100644 index 868b996b9..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTextStyle","path":"/src/widgets/text.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" The text style to apply to descendant [Text] widgets which don't have an explicit style.","fields":[{"name":"style","type":"TextStyle","required":true,"desc":"The text style to apply."},{"name":"textAlign","type":"TextAlign?","desc":"How each line of text in the Text widget should be aligned horizontally."},{"name":"softWrap","type":"bool","required":true,"desc":"Whether the text should break at soft line breaks."},{"name":"overflow","type":"TextOverflow","required":true,"desc":"How visual overflow should be handled."},{"name":"maxLines","type":"int?","desc":"An optional maximum number of lines for the text to span, wrapping if necessary. If the text exceeds the given number of lines, it will be truncated according to [overflow]."},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"The strategy to use when calculating the width of the Text."},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"}],"id":324,"lever":3,"family":5,"linkIds":[2,114,124],"nodes":[{"file":"node1_base.dart","name":"DefaultTextStyle Usage","desc":["The properties are the same as Text, see details there.","Its function is: Set the default text style to be applied to [descendant widgets], note that descendant widgets can also specify their own styles."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_zh-CN.json deleted file mode 100644 index 0b49c96cd..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTextStyle","path":"/src/widgets/text.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"应用于没有显式样式的后代 [Text] 小部件的文本样式。","fields":[{"name":"style","type":"TextStyle","required":true,"desc":"要应用的文本样式。"},{"name":"textAlign","type":"TextAlign?","desc":"Text 小部件中每行文本应如何水平对齐。"},{"name":"softWrap","type":"bool","required":true,"desc":"文本是否应在软换行符处换行。"},{"name":"overflow","type":"TextOverflow","required":true,"desc":"应如何处理视觉溢出。"},{"name":"maxLines","type":"int?","desc":"文本跨越的可选最大行数,必要时换行。如果文本超过给定的行数,将根据 [overflow] 截断。"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"计算文本宽度时使用的策略。"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"}],"id":324,"localName":"默认字体样式","lever":3,"family":5,"linkIds":[2,114,124],"nodes":[{"file":"node1_base.dart","name":"DefaultTextStyle使用","desc":["各属性同Text,详见之。","其功能是: 设置默认的文字样式应用于【后代组件】,注意后代组件也可以指定自身的样式"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_en-US.json deleted file mode 100644 index f5c876589..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTextStyleTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of a [DefaultTextStyle] that animates the different properties of its [TextStyle].","fields":[{"name":"textAlign","type":"TextAlign?","desc":"How the text should be aligned horizontally."},{"name":"softWrap","type":"bool","required":true,"desc":"Whether the text should break at soft line breaks."},{"name":"overflow","type":"TextOverflow","required":true,"desc":"How visual overflow should be handled."},{"name":"maxLines","type":"int?","desc":"An optional maximum number of lines for the text to span, wrapping if necessary."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":114,"lever":3,"family":1,"linkIds":[124,324],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DefaultTextStyleTransition","desc":["【child】 : Child component 【Widget】","【textAlign】 : Text alignment 【TextAlign】","【softWrap】 : Whether to wrap 【bool】","【maxLines】 : Maximum number of lines 【int】","【overflow】 : Overflow mode 【TextOverflow】","【style】 : Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_zh-CN.json deleted file mode 100644 index 848cae741..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTextStyleTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"[DefaultTextStyle] 的动画版本,对其 [TextStyle] 的不同属性进行动画处理。","fields":[{"name":"textAlign","type":"TextAlign?","desc":"文本应如何水平对齐。"},{"name":"softWrap","type":"bool","required":true,"desc":"文本是否应在软换行符处换行。"},{"name":"overflow","type":"TextOverflow","required":true,"desc":"应如何处理视觉溢出。"},{"name":"maxLines","type":"int?","desc":"文本跨越的可选最大行数,必要时换行。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":114,"localName":"文字样式变换","lever":3,"family":1,"linkIds":[124,324],"nodes":[{"file":"node1_base.dart","name":"DefaultTextStyleTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【textAlign】 : 文字对齐方式 【TextAlign】","【softWrap】 : 是否包裹 【bool】","【maxLines】 : 最大行数 【int】","【overflow】 : 溢出模式 【TextOverflow】","【style】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_en-US.json deleted file mode 100644 index 1160c5640..000000000 --- a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DesktopTextSelectionToolbar","path":"/src/material/desktop_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" A Material-style desktop text selection toolbar.","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@template flutter.material.DesktopTextSelectionToolbar.anchor} The point where the toolbar will attempt to position itself as closely as possible. {@endtemplate}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"}],"id":404,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_zh-CN.json deleted file mode 100644 index 2ba4efea0..000000000 --- a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DesktopTextSelectionToolbar","path":"/src/material/desktop_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"Material 风格的桌面文本选择工具栏。","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@template flutter.material.DesktopTextSelectionToolbar.anchor} 工具栏将尝试尽可能接近定位自己的点。{@endtemplate}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"}],"id":404,"localName":"DesktopTextSelectionToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_en-US.json b/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_en-US.json deleted file mode 100644 index 3fc6f17d1..000000000 --- a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DesktopTextSelectionToolbarButton","path":"/src/material/desktop_text_selection_toolbar_button.dart","parents":["StatelessWidget","Widget"],"desc":" A [TextButton] for the Material desktop text selection toolbar.","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"{@macro flutter.material.TextSelectionToolbarTextButton.onPressed}"},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.material.TextSelectionToolbarTextButton.child}"}],"id":405,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_zh-CN.json deleted file mode 100644 index 941810ca0..000000000 --- a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DesktopTextSelectionToolbarButton","path":"/src/material/desktop_text_selection_toolbar_button.dart","parents":["StatelessWidget","Widget"],"desc":"Material 桌面文本选择工具栏的 [TextButton]。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"{@macro flutter.material.TextSelectionToolbarTextButton.onPressed}"},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.material.TextSelectionToolbarTextButton.child}"}],"id":405,"localName":"DesktopTextSelectionToolbarButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_en-US.json b/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_en-US.json deleted file mode 100644 index 9458a63dd..000000000 --- a/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Dialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design dialog.","fields":[{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.material.dialog.backgroundColor} The background color of the surface of this [Dialog]."},{"name":"elevation","type":"double?","desc":"{@template flutter.material.dialog.elevation} The z-coordinate of this [Dialog]."},{"name":"shadowColor","type":"Color?","desc":"{@template flutter.material.dialog.shadowColor} The color used to paint a drop shadow under the dialog's [Material], which reflects the dialog's [elevation]."},{"name":"surfaceTintColor","type":"Color?","desc":"{@template flutter.material.dialog.surfaceTintColor} The color used as a surface tint overlay on the dialog's background color, which reflects the dialog's [elevation]."},{"name":"insetAnimationDuration","type":"Duration","required":true,"desc":"{@template flutter.material.dialog.insetAnimationDuration} The duration of the animation to show when the system keyboard intrudes into the space that the dialog is placed in."},{"name":"insetAnimationCurve","type":"Curve","required":true,"desc":"{@template flutter.material.dialog.insetAnimationCurve} The curve to use for the animation shown when the system keyboard intrudes into the space that the dialog is placed in."},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@template flutter.material.dialog.insetPadding} The amount of padding added to [MediaQueryData.viewInsets] on the outside of the dialog. This defines the minimum space between the screen's edges and the dialog."},{"name":"clipBehavior","type":"Clip?","desc":"{@template flutter.material.dialog.clipBehavior} Controls how the contents of the dialog are clipped (or not) to the given [shape]."},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.dialog.shape} The shape of this dialog's border."},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@template flutter.material.dialog.alignment} How to align the [Dialog]."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"semanticsRole","type":"SemanticsRole","required":true,"desc":"The role this dialog represent in assist technologies."}],"id":126,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Dialog","desc":["【child】: Animation icon data 【Widget】","【elevation】: Shadow depth 【double】","【backgroundColor】: Background color 【Color】","【shape】: Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_zh-CN.json deleted file mode 100644 index e8e8deb4d..000000000 --- a/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Dialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 对话框。","fields":[{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.material.dialog.backgroundColor} 此 [Dialog] 表面的背景颜色。"},{"name":"elevation","type":"double?","desc":"{@template flutter.material.dialog.elevation} 此 [Dialog] 的 z 坐标。"},{"name":"shadowColor","type":"Color?","desc":"{@template flutter.material.dialog.shadowColor} 用于在对话框的 [Material] 下绘制投影的颜色,反映对话框的 [elevation]。"},{"name":"surfaceTintColor","type":"Color?","desc":"{@template flutter.material.dialog.surfaceTintColor} 用作对话框背景颜色上的表面色调叠加的颜色,反映对话框的 [elevation]。"},{"name":"insetAnimationDuration","type":"Duration","required":true,"desc":"{@template flutter.material.dialog.insetAnimationDuration} 当系统键盘侵入对话框放置空间时显示的动画持续时间。"},{"name":"insetAnimationCurve","type":"Curve","required":true,"desc":"{@template flutter.material.dialog.insetAnimationCurve} 当系统键盘侵入对话框放置空间时显示的动画使用的曲线。"},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@template flutter.material.dialog.insetPadding} 添加到对话框外部 [MediaQueryData.viewInsets] 的内边距量。这定义了屏幕边缘和对话框之间的最小空间。"},{"name":"clipBehavior","type":"Clip?","desc":"{@template flutter.material.dialog.clipBehavior} 控制对话框内容如何裁剪(或不裁剪)到给定的 [shape]。"},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.dialog.shape} 此对话框边框的形状。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@template flutter.material.dialog.alignment} 如何对齐 [Dialog]。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"semanticsRole","type":"SemanticsRole","required":true,"desc":"此对话框在辅助技术中代表的角色。"}],"id":126,"localName":"对话框","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Dialog基本使用","desc":["【child】 : 动画图标数据 【Widget】","【elevation】 : 影深 【double】","【backgroundColor】 : 背景色 【Color】","【shape】 : 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_en-US.json deleted file mode 100644 index cd4129add..000000000 --- a/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DialogTheme","path":"/src/material/dialog_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Defines a theme for [Dialog] widgets.","fields":[],"id":406,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_zh-CN.json deleted file mode 100644 index 2d756f412..000000000 --- a/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DialogTheme","path":"/src/material/dialog_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为 [Dialog] 小部件定义主题。","fields":[],"id":406,"localName":"DialogTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_en-US.json b/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_en-US.json deleted file mode 100644 index fc2b114a6..000000000 --- a/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Directionality","path":"/src/widgets/basic.dart","parents":["_UbiquitousInheritedWidget","InheritedWidget","ProxyWidget","Widget"],"desc":" A widget that determines the ambient directionality of text and text-direction-sensitive render objects.","fields":[{"name":"textDirection","type":"TextDirection","required":true,"desc":"The text direction for this subtree."}],"id":319,"lever":2,"family":5,"linkIds":[2,94],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Directionality","desc":["【textDirection】: Text arrangement direction 【TextDirection】","【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_zh-CN.json deleted file mode 100644 index 040557780..000000000 --- a/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Directionality","path":"/src/widgets/basic.dart","parents":["_UbiquitousInheritedWidget","InheritedWidget","ProxyWidget","Widget"],"desc":"确定文本和文本方向敏感渲染对象的环境方向性的小部件。","fields":[{"name":"textDirection","type":"TextDirection","required":true,"desc":"此子树的文本方向。"}],"id":319,"localName":"定向性","lever":2,"family":5,"linkIds":[2,94],"nodes":[{"file":"node1_base.dart","name":"Directionality基本使用","desc":["【textDirection】 : 文字排列方向 【TextDirection】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_en-US.json b/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_en-US.json deleted file mode 100644 index df3a87371..000000000 --- a/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Dismissible","path":"/src/widgets/dismissible.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that can be dismissed by dragging in the indicated [direction].","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"background","type":"Widget?","desc":"A widget that is stacked behind the child. If secondaryBackground is also specified then this widget only appears when the child has been dragged down or to the right."},{"name":"secondaryBackground","type":"Widget?","desc":"A widget that is stacked behind the child and is exposed when the child has been dragged up or to the left. It may only be specified when background has also been specified."},{"name":"confirmDismiss","type":"ConfirmDismissCallback?","desc":"Gives the app an opportunity to confirm or veto a pending dismissal."},{"name":"onResize","type":"VoidCallback?","desc":"Called when the widget changes size (i.e., when contracting before being dismissed)."},{"name":"onDismissed","type":"DismissDirectionCallback?","desc":"Called when the widget has been dismissed, after finishing resizing."},{"name":"direction","type":"DismissDirection","required":true,"desc":"The direction in which the widget can be dismissed."},{"name":"resizeDuration","type":"Duration?","desc":"The amount of time the widget will spend contracting before [onDismissed] is called."},{"name":"dismissThresholds","type":"Map","required":true,"desc":"The offset threshold the item has to be dragged in order to be considered dismissed."},{"name":"movementDuration","type":"Duration","required":true,"desc":"Defines the duration for card to dismiss or to come back to original position if not dismissed."},{"name":"crossAxisEndOffset","type":"double","required":true,"desc":"Defines the end offset across the main axis after the card is dismissed."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"Determines the way that drag start behavior is handled."},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit tests."},{"name":"onUpdate","type":"DismissUpdateCallback?","desc":"Called when the dismissible widget has been dragged."}],"id":176,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Dismissible","desc":["【child】: Child component 【Widget】","【background】: Left bottom 【Widget】","【secondaryBackground】: Right bottom 【Widget】","【key】: Key 【Key】","【confirmDismiss】: Confirmation callback 【DismissDirectionCallback】","【onDismissed】: Dismissal callback 【DismissDirectionCallback】"]},{"file":"node2_direction.dart","name":"Basic Usage of Dismissible","desc":["【direction】: Direction 【DismissDirection】","【crossAxisEndOffset】: Offset 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_zh-CN.json deleted file mode 100644 index a17d0bd16..000000000 --- a/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Dismissible","path":"/src/widgets/dismissible.dart","parents":["StatefulWidget","Widget"],"desc":"可以通过在指定 [direction] 中拖动来关闭的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"background","type":"Widget?","desc":"堆叠在子项后面的小部件。如果还指定了 secondaryBackground,则此小部件仅在子项被向下或向右拖动时出现。"},{"name":"secondaryBackground","type":"Widget?","desc":"堆叠在子项后面的小部件,当子项被向上或向左拖动时暴露。只有在也指定了 background 时才能指定。"},{"name":"confirmDismiss","type":"ConfirmDismissCallback?","desc":"给应用程序一个确认或否决待定关闭的机会。"},{"name":"onResize","type":"VoidCallback?","desc":"当小部件改变大小时调用(即在被关闭之前收缩时)。"},{"name":"onDismissed","type":"DismissDirectionCallback?","desc":"当小部件被关闭时调用,在完成调整大小后。"},{"name":"direction","type":"DismissDirection","required":true,"desc":"小部件可以被关闭的方向。"},{"name":"resizeDuration","type":"Duration?","desc":"小部件在调用 [onDismissed] 之前收缩所花费的时间。"},{"name":"dismissThresholds","type":"Map","required":true,"desc":"项目必须被拖动的偏移阈值,以便被认为已关闭。"},{"name":"movementDuration","type":"Duration","required":true,"desc":"定义卡片关闭或如果未关闭则返回原始位置的持续时间。"},{"name":"crossAxisEndOffset","type":"double","required":true,"desc":"定义卡片被关闭后跨主轴的结束偏移量。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"确定拖动开始行为的处理方式。"},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"在命中测试期间如何表现。"},{"name":"onUpdate","type":"DismissUpdateCallback?","desc":"当可关闭小部件被拖动时调用。"}],"id":176,"localName":"滑动消失","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Dismissible基本使用","desc":["【child】 : 子组件 【Widget】","【background】 : 左底 【Widget】","【secondaryBackground】 : 右底 【Widget】","【key】 : 键 【Key】","【confirmDismiss】 : 确认回调 【DismissDirectionCallback】","【onDismissed】 : 消失回调 【DismissDirectionCallback】,"]},{"file":"node2_direction.dart","name":"Dismissible基本使用","desc":["【direction】 : 方向 【DismissDirection】","【crossAxisEndOffset】 : 偏移 【double】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_en-US.json b/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_en-US.json deleted file mode 100644 index ca0d12b56..000000000 --- a/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DisplayFeatureSubScreen","path":"/src/widgets/display_feature_sub_screen.dart","parents":["StatelessWidget","Widget"],"desc":" Positions [child] such that it avoids overlapping any [DisplayFeature] that splits the screen into sub-screens.","fields":[{"name":"anchorPoint","type":"Offset?","desc":"{@template flutter.widgets.DisplayFeatureSubScreen.anchorPoint} The anchor point used to pick the closest sub-screen."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":407,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_zh-CN.json deleted file mode 100644 index 6eb040da9..000000000 --- a/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DisplayFeatureSubScreen","path":"/src/widgets/display_feature_sub_screen.dart","parents":["StatelessWidget","Widget"],"desc":"定位 [child] 以避免与将屏幕分割为子屏幕的任何 [DisplayFeature] 重叠。","fields":[{"name":"anchorPoint","type":"Offset?","desc":"{@template flutter.widgets.DisplayFeatureSubScreen.anchorPoint} 用于选择最近子屏幕的锚点。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":407,"localName":"DisplayFeatureSubScreen","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Divider/Divider_en-US.json b/modules/widget_system/widgets/doc/widgets/Divider/Divider_en-US.json deleted file mode 100644 index 71d0d26d9..000000000 --- a/modules/widget_system/widgets/doc/widgets/Divider/Divider_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Divider","path":"/src/material/divider.dart","parents":["StatelessWidget","Widget"],"desc":" A thin horizontal line, with padding on either side.","fields":[{"name":"height","type":"double?","desc":"The divider's height extent."},{"name":"thickness","type":"double?","desc":"The thickness of the line drawn within the divider."},{"name":"indent","type":"double?","desc":"The amount of empty space to the leading edge of the divider."},{"name":"endIndent","type":"double?","desc":"The amount of empty space to the trailing edge of the divider."},{"name":"radius","type":"BorderRadiusGeometry?","desc":"The amount of radius for the border of the divider."},{"name":"color","type":"Color?","desc":"{@template flutter.material.Divider.color} The color to use when painting the line."}],"id":34,"lever":2,"family":0,"linkIds":[35,329],"nodes":[{"file":"node1_base.dart","name":"Divider Color and Thickness","desc":["【color】: Color 【Color】","【thickness】: Line thickness 【double】"]},{"file":"node2_height.dart","name":"Divider Height and Indent","desc":["【indent】: Front indent length 【double】","【endIndent】: Rear indent length 【double】","【height】: Placeholder height 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Divider/Divider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Divider/Divider_zh-CN.json deleted file mode 100644 index f2a152b66..000000000 --- a/modules/widget_system/widgets/doc/widgets/Divider/Divider_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Divider","path":"/src/material/divider.dart","parents":["StatelessWidget","Widget"],"desc":"两侧带内边距的细水平线。","fields":[{"name":"height","type":"double?","desc":"分隔符的高度范围。"},{"name":"thickness","type":"double?","desc":"分隔符内绘制线条的厚度。"},{"name":"indent","type":"double?","desc":"分隔符前缘的空白空间量。"},{"name":"endIndent","type":"double?","desc":"分隔符后缘的空白空间量。"},{"name":"radius","type":"BorderRadiusGeometry?","desc":"分隔符边框的半径量。"},{"name":"color","type":"Color?","desc":"{@template flutter.material.Divider.color} 绘制线条时使用的颜色。"}],"id":34,"localName":"水平分割线","lever":2,"family":0,"linkIds":[35,329],"nodes":[{"file":"node1_base.dart","name":"Divider颜色和粗细","desc":["【color】: 颜色 【Color】","【thickness】: 线粗细 【double】"]},{"file":"node2_height.dart","name":"Divider高度和空缺","desc":["【indent】: 前面空缺长度 【double】","【endIndent】: 后面空缺长度 【double】","【height】: 占位高 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_en-US.json deleted file mode 100644 index ae9e0425c..000000000 --- a/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DividerTheme","path":"/src/material/divider_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for [Divider]s, [VerticalDivider]s, dividers between [ListTile]s, and dividers between rows in [DataTable]s in this widget's subtree.","fields":[{"name":"data","type":"DividerThemeData","required":true,"desc":"The properties for descendant [Divider]s, [VerticalDivider]s, dividers between [ListTile]s, and dividers between rows in [DataTable]s."}],"id":329,"lever":3,"family":5,"linkIds":[34,35],"nodes":[{"file":"node1_base.dart","name":"Using DividerTheme","desc":["The property parameters are similar to Divider. You can obtain the divider theme data through DividerTheme.of,","and you can also set default styles for the dividers of DividerTheme【descendants】, including color, thickness, height, etc."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_zh-CN.json deleted file mode 100644 index 436ba778c..000000000 --- a/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DividerTheme","path":"/src/material/divider_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [Divider]、[VerticalDivider]、[ListTile] 之间的分隔符和 [DataTable] 中行之间的分隔符定义配置的继承小部件。","fields":[{"name":"data","type":"DividerThemeData","required":true,"desc":"后代 [Divider]、[VerticalDivider]、[ListTile] 之间的分隔符和 [DataTable] 中行之间的分隔符的属性。"}],"id":329,"localName":"分割线样式","lever":3,"family":5,"linkIds":[34,35],"nodes":[{"file":"node1_base.dart","name":"DividerTheme使用","desc":["属性参数与Divider类似,可以通过DividerTheme.of获取分割线主题数据,\"","也可以为DividerTheme【后代】的分割线设置默认样式,包括颜色、粗细、高度等。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_en-US.json b/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_en-US.json deleted file mode 100644 index 446642fde..000000000 --- a/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DragBoundary","path":"/src/widgets/drag_boundary.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Provides a [DragBoundaryDelegate] for its descendants whose bounds are those defined by this widget.","fields":[],"id":408,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_zh-CN.json deleted file mode 100644 index 004435ac2..000000000 --- a/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DragBoundary","path":"/src/widgets/drag_boundary.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为其后代提供 [DragBoundaryDelegate],其边界由此小部件定义。","fields":[],"id":408,"localName":"DragBoundary","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_en-US.json b/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_en-US.json deleted file mode 100644 index 485052c1c..000000000 --- a/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DragTarget","path":"/src/widgets/drag_target.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that receives data when a [Draggable] widget is dropped.","fields":[{"name":"builder","type":"DragTargetBuilder","required":true,"desc":"Called to build the contents of this widget."},{"name":"onWillAccept","type":"DragTargetWillAccept?","desc":"Called to determine whether this widget is interested in receiving a given piece of data being dragged over this drag target."},{"name":"onWillAcceptWithDetails","type":"DragTargetWillAcceptWithDetails?","desc":"Called to determine whether this widget is interested in receiving a given piece of data being dragged over this drag target."},{"name":"onAccept","type":"DragTargetAccept?","desc":"Called when an acceptable piece of data was dropped over this drag target. It will not be called if `data` is `null`."},{"name":"onAcceptWithDetails","type":"DragTargetAcceptWithDetails?","desc":"Called when an acceptable piece of data was dropped over this drag target. It will not be called if `data` is `null`."},{"name":"onLeave","type":"DragTargetLeave?","desc":"Called when a given piece of data being dragged over this target leaves the target."},{"name":"onMove","type":"DragTargetMove?","desc":"Called when a [Draggable] moves within this [DragTarget]. It will not be called if `data` is `null`."},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit testing."}],"id":104,"lever":4,"family":1,"linkIds":[103,105],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DragTarget","desc":["【builder】: Component builder 【DragTargetBuilder】","【onWillAccept】: When dragging in 【Function(T)】","【onAccept】: Drag success 【Function(T)】","【onLeave】: Drag in and then out 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_zh-CN.json deleted file mode 100644 index 968f0e528..000000000 --- a/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DragTarget","path":"/src/widgets/drag_target.dart","parents":["StatefulWidget","Widget"],"desc":"当 [Draggable] 小部件被放下时接收数据的小部件。","fields":[{"name":"builder","type":"DragTargetBuilder","required":true,"desc":"调用以构建此小部件的内容。"},{"name":"onWillAccept","type":"DragTargetWillAccept?","desc":"调用以确定此小部件是否有兴趣接收在此拖动目标上拖动的给定数据片段。"},{"name":"onWillAcceptWithDetails","type":"DragTargetWillAcceptWithDetails?","desc":"调用以确定此小部件是否有兴趣接收在此拖动目标上拖动的给定数据片段。"},{"name":"onAccept","type":"DragTargetAccept?","desc":"当可接受的数据片段被放在此拖动目标上时调用。如果 `data` 为 `null`,则不会调用。"},{"name":"onAcceptWithDetails","type":"DragTargetAcceptWithDetails?","desc":"当可接受的数据片段被放在此拖动目标上时调用。如果 `data` 为 `null`,则不会调用。"},{"name":"onLeave","type":"DragTargetLeave?","desc":"当在此目标上拖动的给定数据片段离开目标时调用。"},{"name":"onMove","type":"DragTargetMove?","desc":"当 [Draggable] 在此 [DragTarget] 内移动时调用。如果 `data` 为 `null`,则不会调用。"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"在命中测试期间如何表现。"}],"id":104,"localName":"拖拽目标","lever":4,"family":1,"linkIds":[103,105],"nodes":[{"file":"node1_base.dart","name":"DragTarget基本使用","desc":["【builder】 : 组件构造器 【DragTargetBuilder】","【onWillAccept】 : 拖入时 【Function(T)】","【onAccept】 : 拖拽成功 【Function(T)】","【onLeave】 : 拖入再脱出 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_en-US.json b/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_en-US.json deleted file mode 100644 index bb97b593c..000000000 --- a/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Draggable","path":"/src/widgets/drag_target.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that can be dragged from to a [DragTarget].","fields":[{"name":"data","type":"T?","desc":"The data that will be dropped by this draggable."},{"name":"axis","type":"Axis?","desc":"The [Axis] to restrict this draggable's movement, if specified."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"childWhenDragging","type":"Widget?","desc":"The widget to display instead of [child] when one or more drags are under way."},{"name":"feedback","type":"Widget","required":true,"desc":"The widget to show under the pointer when a drag is under way."},{"name":"feedbackOffset","type":"Offset","required":true,"desc":"The feedbackOffset can be used to set the hit test target point for the purposes of finding a drag target. It is especially useful if the feedback is transformed compared to the child."},{"name":"dragAnchorStrategy","type":"DragAnchorStrategy","required":true,"desc":"A strategy that is used by this draggable to get the anchor offset when it is dragged."},{"name":"ignoringFeedbackSemantics","type":"bool","required":true,"desc":"Whether the semantics of the [feedback] widget is ignored when building the semantics tree."},{"name":"ignoringFeedbackPointer","type":"bool","required":true,"desc":"Whether the [feedback] widget is ignored during hit testing."},{"name":"affinity","type":"Axis?","desc":"Controls how this widget competes with other gestures to initiate a drag."},{"name":"maxSimultaneousDrags","type":"int?","desc":"How many simultaneous drags to support."},{"name":"onDragStarted","type":"VoidCallback?","desc":"Called when the draggable starts being dragged."},{"name":"onDragUpdate","type":"DragUpdateCallback?","desc":"Called when the draggable is dragged."},{"name":"onDraggableCanceled","type":"DraggableCanceledCallback?","desc":"Called when the draggable is dropped without being accepted by a [DragTarget]."},{"name":"onDragCompleted","type":"VoidCallback?","desc":"Called when the draggable is dropped and accepted by a [DragTarget]."},{"name":"onDragEnd","type":"DragEndCallback?","desc":"Called when the draggable is dropped."},{"name":"rootOverlay","type":"bool","required":true,"desc":"Whether the feedback widget will be put on the root [Overlay]."},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit test."},{"name":"allowedButtonsFilter","type":"AllowedButtonsFilter?","desc":"{@macro flutter.gestures.multidrag._allowedButtonsFilter}"}],"id":103,"lever":4,"family":1,"linkIds":[104,105],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Draggable","desc":["【child】 : child 【Widget】","【feedback】 : child during dragging 【Widget】","【axis】 : axis of dragging 【Axis】"]},{"file":"node2_data.dart","name":"Combined Usage of Draggable and DragTarget","desc":["【data】 : data 【T】","【onDragStarted】 : start dragging 【Function()】","【onDragEnd】 : end dragging 【Function(DraggableDetails)】","【onDragCompleted】 : drag completed 【Function()】","【onDraggableCanceled】 : drag canceled 【Function(Velocity,Offset)】","【onChanged】 : callback when changed 【Function(T)】"]},{"file":"node3_use.dart","name":"Other Usages of Draggable","desc":["Some events can be handled based on dragging, such as deletion, querying, pop-ups, etc."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_zh-CN.json deleted file mode 100644 index 6e4ad63b2..000000000 --- a/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Draggable","path":"/src/widgets/drag_target.dart","parents":["StatefulWidget","Widget"],"desc":"可以从中拖动到 [DragTarget] 的小部件。","fields":[{"name":"data","type":"T?","desc":"此可拖动项将放下的数据。"},{"name":"axis","type":"Axis?","desc":"限制此可拖动项移动的 [Axis](如果指定)。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"childWhenDragging","type":"Widget?","desc":"当一个或多个拖动正在进行时显示的小部件,而不是 [child]。"},{"name":"feedback","type":"Widget","required":true,"desc":"拖动进行时在指针下显示的小部件。"},{"name":"feedbackOffset","type":"Offset","required":true,"desc":"feedbackOffset 可用于设置命中测试目标点以查找拖动目标。如果反馈相对于子项进行了变换,这特别有用。"},{"name":"dragAnchorStrategy","type":"DragAnchorStrategy","required":true,"desc":"此可拖动项用于在拖动时获取锚点偏移量的策略。"},{"name":"ignoringFeedbackSemantics","type":"bool","required":true,"desc":"构建语义树时是否忽略 [feedback] 小部件的语义。"},{"name":"ignoringFeedbackPointer","type":"bool","required":true,"desc":"命中测试期间是否忽略 [feedback] 小部件。"},{"name":"affinity","type":"Axis?","desc":"控制此小部件如何与其他手势竞争以启动拖动。"},{"name":"maxSimultaneousDrags","type":"int?","desc":"支持多少个同时拖动。"},{"name":"onDragStarted","type":"VoidCallback?","desc":"可拖动项开始被拖动时调用。"},{"name":"onDragUpdate","type":"DragUpdateCallback?","desc":"可拖动项被拖动时调用。"},{"name":"onDraggableCanceled","type":"DraggableCanceledCallback?","desc":"可拖动项被放下但未被 [DragTarget] 接受时调用。"},{"name":"onDragCompleted","type":"VoidCallback?","desc":"可拖动项被放下并被 [DragTarget] 接受时调用。"},{"name":"onDragEnd","type":"DragEndCallback?","desc":"可拖动项被放下时调用。"},{"name":"rootOverlay","type":"bool","required":true,"desc":"反馈小部件是否将放在根 [Overlay] 上。"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"命中测试期间如何表现。"},{"name":"allowedButtonsFilter","type":"AllowedButtonsFilter?","desc":"{@macro flutter.gestures.multidrag._allowedButtonsFilter}"}],"id":103,"localName":"可拖拽组件","lever":4,"family":1,"linkIds":[104,105],"nodes":[{"file":"node1_base.dart","name":"Draggable基本使用","desc":["【child】 : 孩子 【Widget】","【feedback】 : 拖拽时的孩子 【Widget】","【axis】 : 拖动的轴 【Axis】"]},{"file":"node2_data.dart","name":"Draggable与DragTarget联用","desc":["【data】 : 数据 【T】","【onDragStarted】 : 开始拖拽 【Function()】","【onDragEnd】 : 结束拖拽 【Function(DraggableDetails)】","【onDragCompleted】 : 拖拽完成 【Function()】","【onDraggableCanceled】 : 拖拽取消 【Function(Velocity,Offset)】","【onChanged】 : 改变时回调 【Function(T)】"]},{"file":"node3_use.dart","name":"Draggable其他使用","desc":["可以根据拖拽来处理一些事件。如删除、查询、弹框等"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_en-US.json b/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_en-US.json deleted file mode 100644 index 32c7e840a..000000000 --- a/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DraggableScrollableActuator","path":"/src/widgets/draggable_scrollable_sheet.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that can notify a descendent [DraggableScrollableSheet] that it should reset its position to the initial state.","fields":[{"name":"child","type":"Widget","required":true,"desc":"This child's [DraggableScrollableSheet] descendant will be reset when the [reset] method is applied to a context that includes it."}],"id":221,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage","desc":["【child】: Child component 【Widget】","Use DraggableScrollableActuator.reset(context) to reset the position of the descendant DraggableScrollableSheet to the initial position."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_zh-CN.json deleted file mode 100644 index aa3d6682d..000000000 --- a/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DraggableScrollableActuator","path":"/src/widgets/draggable_scrollable_sheet.dart","parents":["StatefulWidget","Widget"],"desc":"可以通知后代 [DraggableScrollableSheet] 应将其位置重置为初始状态的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"当 [reset] 方法应用于包含它的上下文时,此子项的 [DraggableScrollableSheet] 后代将被重置。"}],"id":221,"localName":"拖滑重置器","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"基本使用方法","desc":["【child】 : 子组件 【Widget】","使用 DraggableScrollableActuator.reset(context) 重置后代 DraggableScrollableSheet 位初始位置。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_en-US.json b/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_en-US.json deleted file mode 100644 index 7ba5cc695..000000000 --- a/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DraggableScrollableSheet","path":"/src/widgets/draggable_scrollable_sheet.dart","parents":["StatefulWidget","Widget"],"desc":" A container for a [Scrollable] that responds to drag gestures by resizing the scrollable until a limit is reached, and then scrolling.","fields":[{"name":"initialChildSize","type":"double","required":true,"desc":"The initial fractional value of the parent container's height to use when displaying the widget."},{"name":"minChildSize","type":"double","required":true,"desc":"The minimum fractional value of the parent container's height to use when displaying the widget."},{"name":"maxChildSize","type":"double","required":true,"desc":"The maximum fractional value of the parent container's height to use when displaying the widget."},{"name":"expand","type":"bool","required":true,"desc":"Whether the widget should expand to fill the available space in its parent or not."},{"name":"snap","type":"bool","required":true,"desc":"Whether the widget should snap between [snapSizes] when the user lifts their finger during a drag."},{"name":"snapSizes","type":"List?","desc":"A list of target sizes that the widget should snap to."},{"name":"snapAnimationDuration","type":"Duration?","desc":"Defines a duration for the snap animations."},{"name":"controller","type":"DraggableScrollableController?","desc":"A controller that can be used to programmatically control this sheet."},{"name":"shouldCloseOnMinExtent","type":"bool","required":true,"desc":"Whether the sheet, when dragged (or flung) to its minimum size, should cause its parent sheet to close."},{"name":"builder","type":"ScrollableWidgetBuilder","required":true,"desc":"The builder that creates a child to display in this widget, which will use the provided [ScrollController] to enable dragging and scrolling of the contents."}],"id":252,"lever":2,"family":1,"linkIds":[221,142],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DraggableScrollableSheet","desc":["【initialChildSize】: Initial fraction 【double】","【minChildSize】: Minimum fraction 【double】","【maxChildSize】: Maximum fraction 【double】","【builder】: Scrollable component builder 【ScrollableWidgetBuilder】","【expand】: Whether to expand 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_zh-CN.json deleted file mode 100644 index 08ede04fe..000000000 --- a/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DraggableScrollableSheet","path":"/src/widgets/draggable_scrollable_sheet.dart","parents":["StatefulWidget","Widget"],"desc":"通过拖动手势调整可滚动大小直到达到限制,然后滚动的 [Scrollable] 容器。","fields":[{"name":"initialChildSize","type":"double","required":true,"desc":"显示小部件时使用的父容器高度的初始分数值。"},{"name":"minChildSize","type":"double","required":true,"desc":"显示小部件时使用的父容器高度的最小分数值。"},{"name":"maxChildSize","type":"double","required":true,"desc":"显示小部件时使用的父容器高度的最大分数值。"},{"name":"expand","type":"bool","required":true,"desc":"小部件是否应扩展以填充其父级中的可用空间。"},{"name":"snap","type":"bool","required":true,"desc":"当用户在拖动期间抬起手指时,小部件是否应在 [snapSizes] 之间捕捉。"},{"name":"snapSizes","type":"List?","desc":"小部件应捕捉到的目标大小列表。"},{"name":"snapAnimationDuration","type":"Duration?","desc":"定义捕捉动画的持续时间。"},{"name":"controller","type":"DraggableScrollableController?","desc":"可用于以编程方式控制此表单的控制器。"},{"name":"shouldCloseOnMinExtent","type":"bool","required":true,"desc":"当表单被拖动(或抛出)到其最小大小时,是否应导致其父表单关闭。"},{"name":"builder","type":"ScrollableWidgetBuilder","required":true,"desc":"创建要在此小部件中显示的子项的构建器,它将使用提供的 [ScrollController] 来启用内容的拖动和滚动。"}],"id":252,"localName":"拖滑页","lever":2,"family":1,"linkIds":[221,142],"nodes":[{"file":"node1_base.dart","name":"DraggableScrollableSheet基本使用","desc":["【initialChildSize】 : 初始分度 【double】","【minChildSize】 : 最小分度 【double】","【maxChildSize】 : 最大分度 【double】","【builder】 : 滑动组件构造器 【ScrollableWidgetBuilder】","【expand】 : 是否延展 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_en-US.json b/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_en-US.json deleted file mode 100644 index 6c8763020..000000000 --- a/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Drawer","path":"/src/material/drawer.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design panel that slides in horizontally from the edge of a [Scaffold] to show navigation links in an application.","fields":[{"name":"backgroundColor","type":"Color?","desc":"Sets the color of the [Material] that holds all of the [Drawer]'s contents."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this drawer relative to its parent."},{"name":"shadowColor","type":"Color?","desc":"The color used to paint a drop shadow under the drawer's [Material], which reflects the drawer's [elevation]."},{"name":"surfaceTintColor","type":"Color?","desc":"The color used as a surface tint overlay on the drawer's background color, which reflects the drawer's [elevation]."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the drawer."},{"name":"width","type":"double?","desc":"The width of the drawer."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"semanticLabel","type":"String?","desc":"The semantic label of the drawer used by accessibility frameworks to announce screen transitions when the drawer is opened and closed."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":154,"lever":2,"family":0,"linkIds":[64,155],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Drawer","desc":["【child】 : Child component 【Widget】","【elevation】 : Elevation 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_zh-CN.json deleted file mode 100644 index 54dd507f9..000000000 --- a/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Drawer","path":"/src/material/drawer.dart","parents":["StatelessWidget","Widget"],"desc":"从 [Scaffold] 边缘水平滑入以显示应用程序中导航链接的 Material Design 面板。","fields":[{"name":"backgroundColor","type":"Color?","desc":"设置包含所有 [Drawer] 内容的 [Material] 的颜色。"},{"name":"elevation","type":"double?","desc":"相对于其父级放置此抽屉的 z 坐标。"},{"name":"shadowColor","type":"Color?","desc":"用于在抽屉的 [Material] 下绘制投影的颜色,反映抽屉的 [elevation]。"},{"name":"surfaceTintColor","type":"Color?","desc":"用作抽屉背景颜色上的表面色调叠加的颜色,反映抽屉的 [elevation]。"},{"name":"shape","type":"ShapeBorder?","desc":"抽屉的形状。"},{"name":"width","type":"double?","desc":"抽屉的宽度。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"semanticLabel","type":"String?","desc":"辅助功能框架使用的抽屉语义标签,用于在打开和关闭抽屉时宣布屏幕转换。"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":154,"localName":"滑页栏","lever":2,"family":0,"linkIds":[64,155],"nodes":[{"file":"node1_base.dart","name":"Drawer基本使用","desc":["【child】 : 子组件 【Widget】","【elevation】 : 影深 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_en-US.json b/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_en-US.json deleted file mode 100644 index 17d57c016..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":" A Material Design drawer icon button.","fields":[],"id":276,"lever":1,"family":0,"linkIds":[273,361],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DrawerButton","desc":["【onPressed】: Click event 【VoidCallback?】","【style】: Button style 【ButtonStyle?】","When onPressed is empty, clicking will open the left drawer."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_zh-CN.json deleted file mode 100644 index ee3076ef6..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":"Material Design 抽屉图标按钮。","fields":[],"id":276,"localName":"抽屉按钮","lever":1,"family":0,"linkIds":[273,361],"nodes":[{"file":"node1_base.dart","name":"DrawerButton 基本使用","desc":["【onPressed】 : 点击事件 【VoidCallback?】","【style】: 按钮样式 【ButtonStyle?】","onPressed 为空时,点击时会打开左抽屉。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_en-US.json deleted file mode 100644 index 6f951ce1f..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":" A \"drawer\" icon that's appropriate for the current [TargetPlatform].","fields":[],"id":273,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DrawerButtonIcon Effect","desc":["The _ActionIcon component adapts the drawer button icon for different platforms based on the ActionIconTheme."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_zh-CN.json deleted file mode 100644 index e7e06fe92..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":"适合当前 [TargetPlatform] 的\"抽屉\"图标。","fields":[],"id":273,"localName":"抽屉按钮图标","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DrawerButtonIcon 效果","desc":["通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的抽屉按钮图标。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_en-US.json b/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_en-US.json deleted file mode 100644 index cd28b9c98..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerController","path":"/src/material/drawer.dart","parents":["StatefulWidget","Widget"],"desc":" Provides interactive behavior for [Drawer] widgets.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"alignment","type":"DrawerAlignment","required":true,"desc":"The alignment of the [Drawer]."},{"name":"drawerCallback","type":"DrawerCallback?","desc":"Optional callback that is called when a [Drawer] is opened or closed."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.material.DrawerController.dragStartBehavior} Determines the way that drag start behavior is handled."},{"name":"scrimColor","type":"Color?","desc":"The color to use for the scrim that obscures the underlying content while a drawer is open."},{"name":"enableOpenDragGesture","type":"bool","required":true,"desc":"Determines if the [Drawer] can be opened with a drag gesture."},{"name":"edgeDragWidth","type":"double?","desc":"The width of the area within which a horizontal swipe will open the drawer."},{"name":"isDrawerOpen","type":"bool","required":true,"desc":"Whether or not the drawer is opened or closed."}],"id":257,"lever":3,"family":1,"linkIds":[154,64],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DrawerController","desc":["【drawerCallback】: Event callback 【DrawerCallback】","【enableOpenDragGesture】: Whether to slide open from the side 【bool】","【alignment】: Alignment 【DrawerAlignment】","【scrimColor】: Background color 【Color】","【child】: Drawer component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_zh-CN.json deleted file mode 100644 index a71745d6b..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerController","path":"/src/material/drawer.dart","parents":["StatefulWidget","Widget"],"desc":"为 [Drawer] 小部件提供交互行为。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"alignment","type":"DrawerAlignment","required":true,"desc":"[Drawer] 的对齐方式。"},{"name":"drawerCallback","type":"DrawerCallback?","desc":"打开或关闭 [Drawer] 时调用的可选回调。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.material.DrawerController.dragStartBehavior} 确定拖动开始行为的处理方式。"},{"name":"scrimColor","type":"Color?","desc":"抽屉打开时用于遮挡底层内容的纱幕颜色。"},{"name":"enableOpenDragGesture","type":"bool","required":true,"desc":"确定是否可以通过拖动手势打开 [Drawer]。"},{"name":"edgeDragWidth","type":"double?","desc":"水平滑动将打开抽屉的区域宽度。"},{"name":"isDrawerOpen","type":"bool","required":true,"desc":"抽屉是打开还是关闭。"}],"id":257,"localName":"iOS滑动页签","lever":3,"family":1,"linkIds":[154,64],"nodes":[{"file":"node1_base.dart","name":"DrawerController基本使用","desc":["【drawerCallback】 : 事件回调 【DrawerCallback】","【enableOpenDragGesture】 : 是否侧边滑开 【bool】","【alignment】 : 对齐方式 【DrawerAlignment】","【scrimColor】 : 背景颜色 【Color】","【child】 : Drawer组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_en-US.json b/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_en-US.json deleted file mode 100644 index e6ca7462b..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerHeader","path":"/src/material/drawer_header.dart","parents":["StatelessWidget","Widget"],"desc":" The top-most region of a Material Design drawer. The header's [child] widget, if any, is placed inside a [Container] whose [decoration] can be passed as an argument, inset by the given [padding].","fields":[{"name":"decoration","type":"Decoration?","desc":"Decoration for the main drawer header [Container]; useful for applying backgrounds."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The padding by which to inset [child]."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"The margin around the drawer header."},{"name":"duration","type":"Duration","required":true,"desc":"The duration for animations of the [decoration]."},{"name":"curve","type":"Curve","required":true,"desc":"The curve for animations of the [decoration]."},{"name":"child","type":"Widget?","desc":"A widget to be placed inside the drawer header, inset by the [padding]."}],"id":155,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DrawerHeader","desc":["【child】 : Child Component 【Widget】","【decoration】 : Decoration 【Decoration】","【margin】 : Margin 【EdgeInsetsGeometry】","【padding】 : Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_zh-CN.json deleted file mode 100644 index 36204c95f..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerHeader","path":"/src/material/drawer_header.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 抽屉的最顶部区域。标题的 [child] 小部件(如果有)放置在 [Container] 内,其 [decoration] 可以作为参数传递,由给定的 [padding] 插入。","fields":[{"name":"decoration","type":"Decoration?","desc":"主抽屉标题 [Container] 的装饰;用于应用背景。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"插入 [child] 的内边距。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"抽屉标题周围的边距。"},{"name":"duration","type":"Duration","required":true,"desc":"[decoration] 动画的持续时间。"},{"name":"curve","type":"Curve","required":true,"desc":"[decoration] 动画的曲线。"},{"name":"child","type":"Widget?","desc":"放置在抽屉标题内的小部件,由 [padding] 插入。"}],"id":155,"localName":"滑页栏标题","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DrawerHeader基本使用","desc":["【child】 : 子组件 【Widget】","【decoration】 : 装饰 【Decoration】","【margin】 : 外边距 【EdgeInsetsGeometry】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_en-US.json deleted file mode 100644 index db98dabff..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerTheme","path":"/src/material/drawer_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines visual properties for [Drawer]s in this widget's subtree.","fields":[{"name":"data","type":"DrawerThemeData","required":true,"desc":"Specifies the background color, scrim color, elevation, and shape for descendant [Drawer] widgets."}],"id":409,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_zh-CN.json deleted file mode 100644 index a20589a9e..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerTheme","path":"/src/material/drawer_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [Drawer] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"DrawerThemeData","required":true,"desc":"指定后代 [Drawer] 小部件的背景颜色、纱幕颜色、高度和形状。"}],"id":409,"localName":"DrawerTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_en-US.json deleted file mode 100644 index 12755894f..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownButton","path":"/src/material/dropdown.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design button for selecting from a list of items.","fields":[{"name":"items","type":"List>?","desc":"The list of items the user can select."},{"name":"value","type":"T?","desc":"The value of the currently selected [DropdownMenuItem]."},{"name":"hint","type":"Widget?","desc":"A placeholder widget that is displayed by the dropdown button."},{"name":"disabledHint","type":"Widget?","desc":"A preferred placeholder widget that is displayed when the dropdown is disabled."},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.material.dropdownButton.onChanged} Called when the user selects an item."},{"name":"onTap","type":"VoidCallback?","desc":"Called when the dropdown button is tapped."},{"name":"selectedItemBuilder","type":"DropdownButtonBuilder?","desc":"A builder to customize the dropdown buttons corresponding to the [DropdownMenuItem]s in [items]."},{"name":"elevation","type":"int","required":true,"desc":"The z-coordinate at which to place the menu when open."},{"name":"style","type":"TextStyle?","desc":"The text style to use for text in the dropdown button and the dropdown menu that appears when you tap the button."},{"name":"underline","type":"Widget?","desc":"The widget to use for drawing the drop-down button's underline."},{"name":"icon","type":"Widget?","desc":"The widget to use for the drop-down button's icon."},{"name":"iconDisabledColor","type":"Color?","desc":"The color of any [Icon] descendant of [icon] if this button is disabled, i.e. if [onChanged] is null."},{"name":"iconEnabledColor","type":"Color?","desc":"The color of any [Icon] descendant of [icon] if this button is enabled, i.e. if [onChanged] is defined."},{"name":"iconSize","type":"double","required":true,"desc":"The size to use for the drop-down button's down arrow icon button."},{"name":"isDense","type":"bool","required":true,"desc":"Reduce the button's height."},{"name":"isExpanded","type":"bool","required":true,"desc":"Set the dropdown's inner contents to horizontally fill its parent."},{"name":"itemHeight","type":"double?","desc":"If null, then the menu item heights will vary according to each menu item's intrinsic height."},{"name":"menuWidth","type":"double?","desc":"The width of the menu."},{"name":"focusColor","type":"Color?","desc":"The color for the button's [Material] when it has the input focus."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"dropdownColor","type":"Color?","desc":"The background color of the dropdown."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Padding around the visible portion of the dropdown widget."},{"name":"menuMaxHeight","type":"double?","desc":"The maximum height of the menu."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"Defines how the hint or the selected item is positioned within the button."},{"name":"borderRadius","type":"BorderRadius?","desc":"Defines the corner radii of the menu's rounded rectangle shape."}],"id":55,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DropdownButton","desc":["【value】 : Current value 【T】","【items】 : Dropdown items 【List>】","【icon】 : Icon 【Widget】","【elevation】 : Elevation 【double】","【onChanged】 : Selection change event 【Function(T)】","【backgroundColor】 : Background color 【Color】"]},{"file":"node2_style.dart","name":"Styling of DropdownButton","desc":["【isDense】 : Whether to be dense 【bool】","【iconSize】 : Icon size 【double】","【hint】 : Hint widget 【Widget】","【iconEnabledColor】 : Icon color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_zh-CN.json deleted file mode 100644 index 5ccba7524..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownButton","path":"/src/material/dropdown.dart","parents":["StatefulWidget","Widget"],"desc":"用于从项目列表中选择的 Material Design 按钮。","fields":[{"name":"items","type":"List>?","desc":"用户可以选择的项目列表。"},{"name":"value","type":"T?","desc":"当前选定的 [DropdownMenuItem] 的值。"},{"name":"hint","type":"Widget?","desc":"下拉按钮显示的占位符小部件。"},{"name":"disabledHint","type":"Widget?","desc":"下拉菜单禁用时显示的首选占位符小部件。"},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.material.dropdownButton.onChanged} 用户选择项目时调用。"},{"name":"onTap","type":"VoidCallback?","desc":"点击下拉按钮时调用。"},{"name":"selectedItemBuilder","type":"DropdownButtonBuilder?","desc":"用于自定义对应于 [items] 中 [DropdownMenuItem] 的下拉按钮的构建器。"},{"name":"elevation","type":"int","required":true,"desc":"打开时放置菜单的 z 坐标。"},{"name":"style","type":"TextStyle?","desc":"用于下拉按钮和点击按钮时出现的下拉菜单中文本的文本样式。"},{"name":"underline","type":"Widget?","desc":"用于绘制下拉按钮下划线的小部件。"},{"name":"icon","type":"Widget?","desc":"用于下拉按钮图标的小部件。"},{"name":"iconDisabledColor","type":"Color?","desc":"如果此按钮被禁用(即 [onChanged] 为 null),[icon] 的任何 [Icon] 后代的颜色。"},{"name":"iconEnabledColor","type":"Color?","desc":"如果此按钮启用(即定义了 [onChanged]),[icon] 的任何 [Icon] 后代的颜色。"},{"name":"iconSize","type":"double","required":true,"desc":"用于下拉按钮向下箭头图标按钮的大小。"},{"name":"isDense","type":"bool","required":true,"desc":"减少按钮的高度。"},{"name":"isExpanded","type":"bool","required":true,"desc":"设置下拉菜单的内部内容水平填充其父级。"},{"name":"itemHeight","type":"double?","desc":"如果为 null,则菜单项高度将根据每个菜单项的固有高度而变化。"},{"name":"menuWidth","type":"double?","desc":"菜单的宽度。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时其 [Material] 的颜色。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"dropdownColor","type":"Color?","desc":"下拉菜单的背景颜色。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"下拉小部件可见部分周围的内边距。"},{"name":"menuMaxHeight","type":"double?","desc":"菜单的最大高度。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"定义提示或选定项目在按钮内的定位方式。"},{"name":"borderRadius","type":"BorderRadius?","desc":"定义菜单圆角矩形形状的角半径。"}],"id":55,"localName":"下拉按钮","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DropdownButton基本用法","desc":["【value】 : 当前值 【T】","【items】 : 下拉选框 【List>】","【icon】 : 图标 【Widget】","【elevation】 : 影深 【double】","【onChanged】 : 选择条目事件 【Function(T)】","【backgroundColor】 : 背景色 【Color】"]},{"file":"node2_style.dart","name":"DropdownButton的样式指定","desc":["【isDense】 : 是否紧排 【bool】","【iconSize】 : 图标大小 【double】","【hint】 : 提示组件 【Widget】","【iconEnabledColor】 : 图标颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_en-US.json deleted file mode 100644 index dfc5438bc..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownButtonFormField","path":"/src/material/dropdown.dart","parents":["FormField","StatefulWidget","Widget"],"desc":" A [FormField] that contains a [DropdownButton].","fields":[{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.material.dropdownButton.onChanged}"},{"name":"decoration","type":"InputDecoration","required":true,"desc":"The decoration to show around the dropdown button form field."}],"id":223,"lever":2,"family":1,"linkIds":[55,222],"nodes":[{"file":"node1_base.dart","name":"Simple Usage of Form Dropdown","desc":["【items】: List of child components 【List>】","【validator】: Form validation callback 【FormFieldValidator】","【onSaved】: Form save callback 【FormFieldSetter】","For other properties, refer to DropdownButton. For form validation features, refer to FormField."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_zh-CN.json deleted file mode 100644 index 2d8a0efe3..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownButtonFormField","path":"/src/material/dropdown.dart","parents":["FormField","StatefulWidget","Widget"],"desc":"包含 [DropdownButton] 的 [FormField]。","fields":[{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.material.dropdownButton.onChanged}"},{"name":"decoration","type":"InputDecoration","required":true,"desc":"在下拉按钮表单字段周围显示的装饰。"}],"id":223,"localName":"表单下拉框","lever":2,"family":1,"linkIds":[55,222],"nodes":[{"file":"node1_base.dart","name":"表单下拉框简单使用","desc":["【items】 : 子组件列表 【List>】","【validator】 : 表单验证回调 【FormFieldValidator】","【onSaved】 : 表单保存回调 【FormFieldSetter】","其他属性详见 DropdownButton,表单校验特性详见 FormField。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_en-US.json deleted file mode 100644 index 1edffc17e..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownButtonHideUnderline","path":"/src/material/dropdown.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that causes any descendant [DropdownButton] widgets to not include their regular underline.","fields":[],"id":181,"lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DropDownButtonHideUnderline Usage","desc":["【child】 : Child component 【Widget】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_zh-CN.json deleted file mode 100644 index 764468a48..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownButtonHideUnderline","path":"/src/material/dropdown.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"导致任何后代 [DropdownButton] 小部件不包含其常规下划线的继承小部件。","fields":[],"id":181,"localName":"下拉按钮隐藏线","lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DropDownButtonHideUnderline使用","desc":["【child】 : 子组件 【Widget】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_en-US.json deleted file mode 100644 index e127fa335..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownMenu","path":"/src/material/dropdown_menu.dart","parents":["StatefulWidget","Widget"],"desc":" A dropdown menu that can be opened from a [TextField]. The selected menu item is displayed in that field.","fields":[{"name":"enabled","type":"bool","required":true,"desc":"Determine if the [DropdownMenu] is enabled."},{"name":"width","type":"double?","desc":"Determine the width of the [DropdownMenu]."},{"name":"menuHeight","type":"double?","desc":"Determine the height of the menu."},{"name":"leadingIcon","type":"Widget?","desc":"An optional Icon at the front of the text input field."},{"name":"trailingIcon","type":"Widget?","desc":"An optional icon at the end of the text field."},{"name":"label","type":"Widget?","desc":"Optional widget that describes the input field."},{"name":"hintText","type":"String?","desc":"Text that suggests what sort of input the field accepts."},{"name":"helperText","type":"String?","desc":"Text that provides context about the [DropdownMenu]'s value, such as how the value will be used."},{"name":"errorText","type":"String?","desc":"Text that appears below the input field and the border to show the error message."},{"name":"selectedTrailingIcon","type":"Widget?","desc":"An optional icon at the end of the text field to indicate that the text field is pressed."},{"name":"enableFilter","type":"bool","required":true,"desc":"Determine if the menu list can be filtered by the text input."},{"name":"enableSearch","type":"bool","required":true,"desc":"Determine if the first item that matches the text input can be highlighted."},{"name":"keyboardType","type":"TextInputType?","desc":"The type of keyboard to use for editing the text."},{"name":"textStyle","type":"TextStyle?","desc":"The text style for the [TextField] of the [DropdownMenu];"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"The text align for the [TextField] of the [DropdownMenu]."},{"name":"inputDecorationTheme","type":"InputDecorationTheme?","desc":"Defines the default appearance of [InputDecoration] to show around the text field."},{"name":"menuStyle","type":"MenuStyle?","desc":"The [MenuStyle] that defines the visual attributes of the menu."},{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited or selected in the menu."},{"name":"initialSelection","type":"T?","desc":"The value used to for an initial selection."},{"name":"onSelected","type":"ValueChanged?","desc":"The callback is called when a selection is made."},{"name":"focusNode","type":"FocusNode?","desc":"Defines the keyboard focus for this widget."},{"name":"requestFocusOnTap","type":"bool?","desc":"Determine if the dropdown button requests focus and the on-screen virtual keyboard is shown in response to a touch event."},{"name":"dropdownMenuEntries","type":"List>","required":true,"desc":"Descriptions of the menu items in the [DropdownMenu]."},{"name":"expandedInsets","type":"EdgeInsetsGeometry?","desc":"Defines the menu text field's width to be equal to its parent's width plus the horizontal width of the specified insets."},{"name":"filterCallback","type":"FilterCallback?","desc":"When [DropdownMenu.enableFilter] is true, this callback is used to compute the list of filtered items."},{"name":"searchCallback","type":"SearchCallback?","desc":"When [DropdownMenu.enableSearch] is true, this callback is used to compute the index of the search result to be highlighted."},{"name":"inputFormatters","type":"List?","desc":"Optional input validation and formatting overrides."},{"name":"alignmentOffset","type":"Offset?","desc":"{@macro flutter.material.MenuAnchor.alignmentOffset}"},{"name":"closeBehavior","type":"DropdownMenuCloseBehavior","required":true,"desc":"Defines the behavior for closing the dropdown menu when an item is selected."},{"name":"maxLines","type":"int?","desc":"Specifies the maximum number of lines the selected value can display in the [DropdownMenu]."},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"}],"id":370,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1.dart","name":"Simple Usage of Dropdown Menu","desc":["【dropdownMenuEntries】 : Menu item list 【List>】","【initialSelection】 : Form validation callback 【T?】","【onSelected】 : Form save callback 【ValueChanged?】","【menuHeight】 : Menu height 【double】","【width】 : Input box width 【double】"]},{"file":"node2.dart","name":"Dropdown Menu Style Settings","desc":["【controller】 : Text input controller 【TextEditingController?】","【label】 : Input box label 【Widget?】","【textStyle】 : Input box text style 【TextStyle?】","【inputDecorationTheme】 : Input box decoration theme 【InputDecorationTheme?】","【leadingIcon】 : Left icon 【Widget?】","【trailingIcon】 : Right icon when menu is expanded 【Widget?】","【selectedTrailingIcon】 : Right icon when menu is expanded 【Widget?】","【hintText】 : Input box hint text 【String?】","【helperText】 : Input box helper text 【String?】","【errorText】 : Input box error text 【String?】","【menuStyle】 : Popup menu style 【MenuStyle?】"]},{"file":"node3.dart","name":"Custom Menu Items for Dropdown Menu","desc":["You can customize the menu items by using the labelWidget of DropdownMenuEntry."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_zh-CN.json deleted file mode 100644 index 97a23825e..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownMenu","path":"/src/material/dropdown_menu.dart","parents":["StatefulWidget","Widget"],"desc":"可以从 [TextField] 打开的下拉菜单。选定的菜单项显示在该字段中。","fields":[{"name":"enabled","type":"bool","required":true,"desc":"确定 [DropdownMenu] 是否启用。"},{"name":"width","type":"double?","desc":"确定 [DropdownMenu] 的宽度。"},{"name":"menuHeight","type":"double?","desc":"确定菜单的高度。"},{"name":"leadingIcon","type":"Widget?","desc":"文本输入字段前面的可选图标。"},{"name":"trailingIcon","type":"Widget?","desc":"文本字段末尾的可选图标。"},{"name":"label","type":"Widget?","desc":"描述输入字段的可选小部件。"},{"name":"hintText","type":"String?","desc":"建议字段接受何种输入的文本。"},{"name":"helperText","type":"String?","desc":"提供有关 [DropdownMenu] 值上下文的文本,例如如何使用该值。"},{"name":"errorText","type":"String?","desc":"出现在输入字段和边框下方以显示错误消息的文本。"},{"name":"selectedTrailingIcon","type":"Widget?","desc":"文本字段末尾的可选图标,指示文本字段被按下。"},{"name":"enableFilter","type":"bool","required":true,"desc":"确定菜单列表是否可以通过文本输入进行过滤。"},{"name":"enableSearch","type":"bool","required":true,"desc":"确定是否可以突出显示与文本输入匹配的第一个项目。"},{"name":"keyboardType","type":"TextInputType?","desc":"用于编辑文本的键盘类型。"},{"name":"textStyle","type":"TextStyle?","desc":"[DropdownMenu] 的 [TextField] 的文本样式。"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"[DropdownMenu] 的 [TextField] 的文本对齐。"},{"name":"inputDecorationTheme","type":"InputDecorationTheme?","desc":"定义在文本字段周围显示的 [InputDecoration] 的默认外观。"},{"name":"menuStyle","type":"MenuStyle?","desc":"定义菜单视觉属性的 [MenuStyle]。"},{"name":"controller","type":"TextEditingController?","desc":"控制菜单中正在编辑或选择的文本。"},{"name":"initialSelection","type":"T?","desc":"用于初始选择的值。"},{"name":"onSelected","type":"ValueChanged?","desc":"进行选择时调用的回调。"},{"name":"focusNode","type":"FocusNode?","desc":"定义此小部件的键盘焦点。"},{"name":"requestFocusOnTap","type":"bool?","desc":"确定下拉按钮是否请求焦点并且屏幕虚拟键盘是否响应触摸事件显示。"},{"name":"dropdownMenuEntries","type":"List>","required":true,"desc":"[DropdownMenu] 中菜单项的描述。"},{"name":"expandedInsets","type":"EdgeInsetsGeometry?","desc":"定义菜单文本字段的宽度等于其父级的宽度加上指定插入的水平宽度。"},{"name":"filterCallback","type":"FilterCallback?","desc":"当 [DropdownMenu.enableFilter] 为 true 时,此回调用于计算过滤项目列表。"},{"name":"searchCallback","type":"SearchCallback?","desc":"当 [DropdownMenu.enableSearch] 为 true 时,此回调用于计算要突出显示的搜索结果的索引。"},{"name":"inputFormatters","type":"List?","desc":"可选的输入验证和格式化覆盖。"},{"name":"alignmentOffset","type":"Offset?","desc":"{@macro flutter.material.MenuAnchor.alignmentOffset}"},{"name":"closeBehavior","type":"DropdownMenuCloseBehavior","required":true,"desc":"定义选择项目时关闭下拉菜单的行为。"},{"name":"maxLines","type":"int?","desc":"指定选定值可以在 [DropdownMenu] 中显示的最大行数。"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"}],"id":370,"localName":"下拉菜单","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1.dart","name":"下拉菜单的简单使用","desc":["【dropdownMenuEntries】 : 菜单条目列表 【List>】","【initialSelection】 : 表单验证回调 【T?】","【onSelected】 : 表单保存回调 【ValueChanged?】","【menuHeight】 : 菜单高度 【double】","【width】 : 输入框宽度 【double】"]},{"file":"node2.dart","name":"下拉菜单样式设置","desc":["【controller】 : 文字输入控制器 【TextEditingController?】","【label】 : 输入框标签 【Widget?】","【textStyle】 : 输入框文字样式 【TextStyle?】","【inputDecorationTheme】 : 输入框装饰主题 【InputDecorationTheme?】","【leadingIcon】 : 左侧图标 【Widget?】","【trailingIcon】 : 右侧为展开菜单时图标 【Widget?】","【selectedTrailingIcon】 : 右侧展开菜单时图标 【Widget?】","【hintText】 : 输入框提示文字 【String?】","【helperText】 : 输入框辅助文字 【String?】","【errorText】 : 输入框错误文字 【String?】","【menuStyle】 : 弹出菜单样式 【MenuStyle?】"]},{"file":"node3.dart","name":"下拉菜单自定义菜单项","desc":["可以通过 DropdownMenuEntry 的 labelWidget 定制构建菜单项。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_en-US.json deleted file mode 100644 index e2d9fe27c..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownMenuItem","path":"/src/material/dropdown.dart","parents":["_DropdownMenuItemContainer","StatelessWidget","Widget"],"desc":" An item in a menu created by a [DropdownButton].","fields":[{"name":"onTap","type":"VoidCallback?","desc":"Called when the dropdown menu item is tapped."},{"name":"value","type":"T?","desc":"The value to return if the user selects this menu item."},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not a user can select this menu item."}],"id":410,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_zh-CN.json deleted file mode 100644 index bb8ed83ed..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownMenuItem","path":"/src/material/dropdown.dart","parents":["_DropdownMenuItemContainer","StatelessWidget","Widget"],"desc":"由 [DropdownButton] 创建的菜单中的项目。","fields":[{"name":"onTap","type":"VoidCallback?","desc":"点击下拉菜单项时调用。"},{"name":"value","type":"T?","desc":"如果用户选择此菜单项,要返回的值。"},{"name":"enabled","type":"bool","required":true,"desc":"用户是否可以选择此菜单项。"}],"id":410,"localName":"DropdownMenuItem","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_en-US.json deleted file mode 100644 index 0d3cb5944..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownMenuTheme","path":"/src/material/dropdown_menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the visual properties for [DropdownMenu]s in this widget's subtree.","fields":[{"name":"data","type":"DropdownMenuThemeData","required":true,"desc":"Specifies the visual properties used by descendant [DropdownMenu] widgets."}],"id":411,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_zh-CN.json deleted file mode 100644 index 7bcc31cec..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownMenuTheme","path":"/src/material/dropdown_menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [DropdownMenu] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"DropdownMenuThemeData","required":true,"desc":"指定后代 [DropdownMenu] 小部件使用的视觉属性。"}],"id":411,"localName":"DropdownMenuTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_en-US.json deleted file mode 100644 index 340036dac..000000000 --- a/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DualTransitionBuilder","path":"/src/widgets/dual_transition_builder.dart","parents":["StatefulWidget","Widget"],"desc":" A transition builder that animates its [child] based on the [AnimationStatus] of the provided [animation].","fields":[{"name":"animation","type":"Animation","required":true,"desc":"The animation that drives the [child]'s transition."},{"name":"forwardBuilder","type":"AnimatedTransitionBuilder","required":true,"desc":"A builder for the transition that makes [child] appear on screen."},{"name":"reverseBuilder","type":"AnimatedTransitionBuilder","required":true,"desc":"A builder for a transition that makes [child] disappear from the screen."},{"name":"child","type":"Widget?","desc":"The widget below this [DualTransitionBuilder] in the tree."}],"id":412,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_zh-CN.json deleted file mode 100644 index 517c16af0..000000000 --- a/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DualTransitionBuilder","path":"/src/widgets/dual_transition_builder.dart","parents":["StatefulWidget","Widget"],"desc":"根据提供的 [animation] 的 [AnimationStatus] 对其 [child] 进行动画处理的过渡构建器。","fields":[{"name":"animation","type":"Animation","required":true,"desc":"驱动 [child] 过渡的动画。"},{"name":"forwardBuilder","type":"AnimatedTransitionBuilder","required":true,"desc":"使 [child] 出现在屏幕上的过渡构建器。"},{"name":"reverseBuilder","type":"AnimatedTransitionBuilder","required":true,"desc":"使 [child] 从屏幕上消失的过渡构建器。"},{"name":"child","type":"Widget?","desc":"树中此 [DualTransitionBuilder] 下方的小部件。"}],"id":412,"localName":"DualTransitionBuilder","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_en-US.json b/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_en-US.json deleted file mode 100644 index ecc1d45fe..000000000 --- a/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"EditableText","path":"/src/widgets/editable_text.dart","parents":["StatefulWidget","Widget"],"desc":" A basic text input field.","fields":[{"name":"controller","type":"TextEditingController","required":true,"desc":"Controls the text being edited."},{"name":"focusNode","type":"FocusNode","required":true,"desc":"Controls whether this widget has keyboard focus."},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@template flutter.widgets.editableText.obscuringCharacter} Character used for obscuring text if [obscureText] is true."},{"name":"obscureText","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.obscureText} Whether to hide the text being edited (e.g., for passwords)."},{"name":"textHeightBehavior","type":"TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.readOnly} Whether the text can be changed."},{"name":"forceLine","type":"bool","required":true,"desc":"Whether the text will take the full width regardless of the text width."},{"name":"toolbarOptions","type":"ToolbarOptions","required":true,"desc":"Configuration of toolbar options."},{"name":"showSelectionHandles","type":"bool","required":true,"desc":"Whether to show selection handles."},{"name":"showCursor","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.showCursor} Whether to show cursor."},{"name":"autocorrect","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.autocorrect} Whether to enable autocorrection."},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"style","type":"TextStyle","required":true,"desc":"The text style to use for the editable text."},{"name":"undoController","type":"UndoHistoryController?","desc":"Controls the undo state of the current editable text."},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@template flutter.widgets.editableText.textAlign} How the text should be aligned horizontally."},{"name":"textDirection","type":"TextDirection?","desc":"{@template flutter.widgets.editableText.textDirection} The directionality of the text."},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@template flutter.widgets.editableText.textCapitalization} Configures how the platform keyboard will select an uppercase or lowercase keyboard."},{"name":"locale","type":"Locale?","desc":"Used to select a font when the same Unicode character can be rendered differently, depending on the locale."},{"name":"textScaleFactor","type":"double?","desc":"{@template flutter.widgets.editableText.textScaleFactor} Deprecated. Will be removed in a future version of Flutter. Use [textScaler] instead."},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"cursorColor","type":"Color","required":true,"desc":"The color to use when painting the cursor."},{"name":"autocorrectionTextRectColor","type":"Color?","desc":"The color to use when painting the autocorrection Rect."},{"name":"backgroundCursorColor","type":"Color","required":true,"desc":"The color to use when painting the background cursor aligned with the text while rendering the floating cursor."},{"name":"maxLines","type":"int?","desc":"{@template flutter.widgets.editableText.maxLines} The maximum number of lines to show at one time, wrapping if necessary."},{"name":"minLines","type":"int?","desc":"{@template flutter.widgets.editableText.minLines} The minimum number of lines to occupy when the content spans fewer lines."},{"name":"expands","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.expands} Whether this widget's height will be sized to fill its parent."},{"name":"autofocus","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.autofocus} Whether this text field should focus itself if nothing else is already focused."},{"name":"selectionColor","type":"Color?","desc":"The color to use when painting the selection."},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@template flutter.widgets.editableText.selectionControls} Optional delegate for building the text selection handles."},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@template flutter.widgets.editableText.keyboardType} The type of keyboard to use for editing the text."},{"name":"textInputAction","type":"TextInputAction?","desc":"The type of action button to use with the soft keyboard."},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.widgets.editableText.onChanged} Called when the user initiates a change to the TextField's value: when they have inserted or deleted text."},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@template flutter.widgets.editableText.onEditingComplete} Called when the user submits editable content (e.g., user presses the \"done\" button on the keyboard)."},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@template flutter.widgets.editableText.onSubmitted} Called when the user indicates that they are done editing the text in the field."},{"name":"onAppPrivateCommand","type":"AppPrivateCommandCallback?","desc":"{@template flutter.widgets.editableText.onAppPrivateCommand} This is used to receive a private command from the input method."},{"name":"onSelectionChanged","type":"SelectionChangedCallback?","desc":"{@template flutter.widgets.editableText.onSelectionChanged} Called when the user changes the selection of text (including the cursor location). {@endtemplate}"},{"name":"onSelectionHandleTapped","type":"VoidCallback?","desc":"{@macro flutter.widgets.SelectionOverlay.onSelectionHandleTapped}"},{"name":"groupId","type":"Object","required":true,"desc":"{@template flutter.widgets.editableText.groupId} The group identifier for the [TextFieldTapRegion] of this text field."},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@template flutter.widgets.editableText.onTapOutside} Called for each tap down that occurs outside of the [TextFieldTapRegion] group when the text field is focused."},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"{@template flutter.widgets.editableText.onTapUpOutside} Called for each tap up that occurs outside of the [TextFieldTapRegion] group when the text field is focused."},{"name":"inputFormatters","type":"List?","desc":"{@template flutter.widgets.editableText.inputFormatters} Optional input validation and formatting overrides."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"rendererIgnoresPointer","type":"bool","required":true,"desc":"Whether the caller will provide gesture handling (true), or if the [EditableText] is expected to handle basic gestures (false)."},{"name":"cursorWidth","type":"double","required":true,"desc":"{@template flutter.widgets.editableText.cursorWidth} How thick the cursor will be."},{"name":"cursorHeight","type":"double?","desc":"{@template flutter.widgets.editableText.cursorHeight} How tall the cursor will be."},{"name":"cursorRadius","type":"Radius?","desc":"{@template flutter.widgets.editableText.cursorRadius} How rounded the corners of the cursor should be."},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.cursorOpacityAnimates} Whether the cursor will animate from fully transparent to fully opaque during each cursor blink."},{"name":"cursorOffset","type":"Offset?","desc":"{@macro flutter.rendering.RenderEditable.cursorOffset}"},{"name":"paintCursorAboveText","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderEditable.paintCursorAboveText}"},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"Controls how tall the selection highlight boxes are computed to be."},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"Controls how wide the selection highlight boxes are computed to be."},{"name":"keyboardAppearance","type":"Brightness","required":true,"desc":"The appearance of the keyboard."},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@template flutter.widgets.editableText.scrollPadding} Configures the padding for the edges surrounding a [Scrollable] when the text field scrolls into view."},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.enableInteractiveSelection} Whether to enable user interface affordances for changing the text selection."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"scrollController","type":"ScrollController?","desc":"{@template flutter.widgets.editableText.scrollController} The [ScrollController] to use when vertically scrolling the input."},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.editableText.scrollPhysics} The [ScrollPhysics] to use when vertically scrolling the input."},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.scribbleEnabled} Whether iOS 14 Scribble features are enabled for this widget."},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.stylusHandwritingEnabled} Whether this input supports stylus handwriting, where the user can write directly on top of a field."},{"name":"autofillHints","type":"Iterable?","desc":"{@template flutter.widgets.editableText.autofillHints} A list of strings that helps the autofill service identify the type of this text input."},{"name":"autofillClient","type":"AutofillClient?","desc":"The [AutofillClient] that controls this input field's autofill behavior."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the scroll offset of the [EditableText]."},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.widgets.editableText.scrollBehavior} A [ScrollBehavior] that will be applied to this widget individually."},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@template flutter.widgets.editableText.contentInsertionConfiguration} Configuration of handler for media content inserted via the system input method."},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@template flutter.widgets.EditableText.contextMenuBuilder} Builds the text selection toolbar when requested by the user."},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@template flutter.widgets.EditableText.spellCheckConfiguration} Configuration that details how spell check should be performed."},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration","required":true,"desc":"The configuration for the magnifier to use with selections in this text field."}],"id":244,"lever":2,"family":1,"linkIds":[2,54],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of EditableText","desc":["【controller】: Controller 【TextEditingController】","【focusNode】: Focus Node 【FocusNode】","【style】: Text Style 【TextStyle】","【backgroundCursorColor】: Background Cursor Color 【Color】","【cursorColor】: Cursor Color 【Color】","The above five are the essential properties of EditableText. Others are the same as TextField and will not be listed here."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_zh-CN.json b/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_zh-CN.json deleted file mode 100644 index 5a9de9e6b..000000000 --- a/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"EditableText","path":"/src/widgets/editable_text.dart","parents":["StatefulWidget","Widget"],"desc":"基本文本输入字段。","fields":[{"name":"controller","type":"TextEditingController","required":true,"desc":"控制正在编辑的文本。"},{"name":"focusNode","type":"FocusNode","required":true,"desc":"控制此小部件是否具有键盘焦点。"},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@template flutter.widgets.editableText.obscuringCharacter} 如果 [obscureText] 为 true,用于遮挡文本的字符。"},{"name":"obscureText","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.obscureText} 是否隐藏正在编辑的文本(例如,用于密码)。"},{"name":"textHeightBehavior","type":"TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.readOnly} 文本是否可以更改。"},{"name":"forceLine","type":"bool","required":true,"desc":"无论文本宽度如何,文本是否占用全宽。"},{"name":"toolbarOptions","type":"ToolbarOptions","required":true,"desc":"工具栏选项的配置。"},{"name":"showSelectionHandles","type":"bool","required":true,"desc":"是否显示选择手柄。"},{"name":"showCursor","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.showCursor} 是否显示光标。"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.autocorrect} 是否启用自动更正。"},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"style","type":"TextStyle","required":true,"desc":"用于可编辑文本的文本样式。"},{"name":"undoController","type":"UndoHistoryController?","desc":"控制当前可编辑文本的撤销状态。"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@template flutter.widgets.editableText.textAlign} 文本应如何水平对齐。"},{"name":"textDirection","type":"TextDirection?","desc":"{@template flutter.widgets.editableText.textDirection} 文本的方向性。"},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@template flutter.widgets.editableText.textCapitalization} 配置平台键盘如何选择大写或小写键盘。"},{"name":"locale","type":"Locale?","desc":"用于在同一 Unicode 字符可以根据区域设置以不同方式呈现时选择字体。"},{"name":"textScaleFactor","type":"double?","desc":"{@template flutter.widgets.editableText.textScaleFactor} 已弃用。将在 Flutter 的未来版本中删除。请改用 [textScaler]。"},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"cursorColor","type":"Color","required":true,"desc":"绘制光标时使用的颜色。"},{"name":"autocorrectionTextRectColor","type":"Color?","desc":"绘制自动更正矩形时使用的颜色。"},{"name":"backgroundCursorColor","type":"Color","required":true,"desc":"在渲染浮动光标时绘制与文本对齐的背景光标时使用的颜色。"},{"name":"maxLines","type":"int?","desc":"{@template flutter.widgets.editableText.maxLines} 一次显示的最大行数,必要时换行。"},{"name":"minLines","type":"int?","desc":"{@template flutter.widgets.editableText.minLines} 当内容跨越较少行时占用的最小行数。"},{"name":"expands","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.expands} 此小部件的高度是否将调整大小以填充其父级。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.autofocus} 如果没有其他内容已经聚焦,此文本字段是否应该聚焦自己。"},{"name":"selectionColor","type":"Color?","desc":"绘制选择时使用的颜色。"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@template flutter.widgets.editableText.selectionControls} 用于构建文本选择手柄的可选委托。"},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@template flutter.widgets.editableText.keyboardType} 用于编辑文本的键盘类型。"},{"name":"textInputAction","type":"TextInputAction?","desc":"与软键盘一起使用的操作按钮类型。"},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.widgets.editableText.onChanged} 当用户启动对 TextField 值的更改时调用:当他们插入或删除文本时。"},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@template flutter.widgets.editableText.onEditingComplete} 当用户提交可编辑内容时调用(例如,用户按下键盘上的\\"},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@template flutter.widgets.editableText.onSubmitted} 当用户指示他们已完成编辑字段中的文本时调用。"},{"name":"onAppPrivateCommand","type":"AppPrivateCommandCallback?","desc":"{@template flutter.widgets.editableText.onAppPrivateCommand} 这用于从输入法接收私有命令。"},{"name":"onSelectionChanged","type":"SelectionChangedCallback?","desc":"{@template flutter.widgets.editableText.onSelectionChanged} 当用户更改文本选择时调用(包括光标位置)。{@endtemplate}"},{"name":"onSelectionHandleTapped","type":"VoidCallback?","desc":"{@macro flutter.widgets.SelectionOverlay.onSelectionHandleTapped}"},{"name":"groupId","type":"Object","required":true,"desc":"{@template flutter.widgets.editableText.groupId} 此文本字段的 [TextFieldTapRegion] 的组标识符。"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@template flutter.widgets.editableText.onTapOutside} 当文本字段聚焦时,对于发生在 [TextFieldTapRegion] 组外的每次点击调用。"},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"{@template flutter.widgets.editableText.onTapUpOutside} 当文本字段聚焦时,对于发生在 [TextFieldTapRegion] 组外的每次点击抬起调用。"},{"name":"inputFormatters","type":"List?","desc":"{@template flutter.widgets.editableText.inputFormatters} 可选的输入验证和格式化覆盖。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"rendererIgnoresPointer","type":"bool","required":true,"desc":"调用者是否将提供手势处理(true),或者 [EditableText] 是否应该处理基本手势(false)。"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@template flutter.widgets.editableText.cursorWidth} 光标的厚度。"},{"name":"cursorHeight","type":"double?","desc":"{@template flutter.widgets.editableText.cursorHeight} 光标的高度。"},{"name":"cursorRadius","type":"Radius?","desc":"{@template flutter.widgets.editableText.cursorRadius} 光标角的圆度。"},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.cursorOpacityAnimates} 光标是否在每次光标闪烁期间从完全透明动画到完全不透明。"},{"name":"cursorOffset","type":"Offset?","desc":"{@macro flutter.rendering.RenderEditable.cursorOffset}"},{"name":"paintCursorAboveText","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderEditable.paintCursorAboveText}"},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"控制选择高亮框的计算高度。"},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"控制选择高亮框的计算宽度。"},{"name":"keyboardAppearance","type":"Brightness","required":true,"desc":"键盘的外观。"},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@template flutter.widgets.editableText.scrollPadding} 当文本字段滚动到视图中时,为围绕 [Scrollable] 的边缘配置内边距。"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.enableInteractiveSelection} 是否启用用于更改文本选择的用户界面功能。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"scrollController","type":"ScrollController?","desc":"{@template flutter.widgets.editableText.scrollController} 垂直滚动输入时使用的 [ScrollController]。"},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.editableText.scrollPhysics} 垂直滚动输入时使用的 [ScrollPhysics]。"},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.scribbleEnabled} 是否为此小部件启用 iOS 14 Scribble 功能。"},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.stylusHandwritingEnabled} 此输入是否支持手写笔手写,用户可以直接在字段顶部书写。"},{"name":"autofillHints","type":"Iterable?","desc":"{@template flutter.widgets.editableText.autofillHints} 帮助自动填充服务识别此文本输入类型的字符串列表。"},{"name":"autofillClient","type":"AutofillClient?","desc":"控制此输入字段自动填充行为的 [AutofillClient]。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [EditableText] 滚动偏移量的恢复 ID。"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.widgets.editableText.scrollBehavior} 将单独应用于此小部件的 [ScrollBehavior]。"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@template flutter.widgets.editableText.contentInsertionConfiguration} 通过系统输入法插入的媒体内容处理程序的配置。"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@template flutter.widgets.EditableText.contextMenuBuilder} 用户请求时构建文本选择工具栏。"},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@template flutter.widgets.EditableText.spellCheckConfiguration} 详细说明如何执行拼写检查的配置。"},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration","required":true,"desc":"用于此文本字段中选择的放大镜配置。"}],"id":244,"localName":"可编辑文字","lever":2,"family":1,"linkIds":[2,54],"nodes":[{"file":"node1_base.dart","name":"EditableText基本使用","desc":["【controller】 : 控制器 【TextEditingController】","【focusNode】 : 焦点 【FocusNode】","【style】 : 文字样式 【TextStyle】","【backgroundCursorColor】 : 背景游标颜色 【Color】","【cursorColor】 : 游标颜色 【Color】","上面五个是EditableText必须的属性,其他同TextField,此处不再列举。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_en-US.json b/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_en-US.json deleted file mode 100644 index f114cdb90..000000000 --- a/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ElevatedButton","path":"/src/material/elevated_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":" A Material Design \"elevated button\".","fields":[],"id":354,"lever":3,"family":1,"linkIds":[353,26,355],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ElevatedButton","desc":["【child】: Whether it has a scrollable body 【Widget】","【onPressed】: Click event 【VoidCallback】","【onLongPress】: Long press event 【VoidCallback】"]},{"file":"node2_style.dart","name":"ElevatedButton Style","desc":["【style】: Button style 【ButtonStyle】","【focusNode】: Focus 【FocusNode】","【clipBehavior】: Clip behavior 【Clip】","【autofocus】: Auto focus 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_zh-CN.json deleted file mode 100644 index b7d126a64..000000000 --- a/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ElevatedButton","path":"/src/material/elevated_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":"Material Design \"凸起按钮\"。","fields":[],"id":354,"localName":"升起按钮","lever":3,"family":1,"linkIds":[353,26,355],"nodes":[{"file":"node1_base.dart","name":"ElevatedButton基本使用","desc":["【child】 : 是否具有滚动主体 【Widget】","【onPressed】 : 点击事件 【VoidCallback】","【onLongPress】 : 长按事件 【VoidCallback】"]},{"file":"node2_style.dart","name":"ElevatedButton样式","desc":["【style】 : 按钮样式 【ButtonStyle】","【focusNode】 : 焦点 【FocusNode】","【clipBehavior】 : 裁剪行为 【Clip】","【autofocus】 : 自动聚焦 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_en-US.json deleted file mode 100644 index 68859bba1..000000000 --- a/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ElevatedButtonTheme","path":"/src/material/elevated_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [ElevatedButton] descendants.","fields":[{"name":"data","type":"ElevatedButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":413,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_zh-CN.json deleted file mode 100644 index 9cf35e5fa..000000000 --- a/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ElevatedButtonTheme","path":"/src/material/elevated_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [ElevatedButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"ElevatedButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":413,"localName":"ElevatedButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_en-US.json b/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_en-US.json deleted file mode 100644 index 8e538eae0..000000000 --- a/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"EndDrawerButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":" A Material Design end drawer icon button.","fields":[],"id":361,"lever":1,"family":0,"linkIds":[275,276],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of EndDrawerButton","desc":["【onPressed】: Click event 【VoidCallback?】","【style】: Button style 【ButtonStyle?】","When onPressed is empty, clicking will open the right drawer."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_zh-CN.json deleted file mode 100644 index c9e8112e9..000000000 --- a/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"EndDrawerButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":"Material Design 末端抽屉图标按钮。","fields":[],"id":361,"localName":"右抽屉按钮","lever":1,"family":0,"linkIds":[275,276],"nodes":[{"file":"node1_base.dart","name":"EndDrawerButton 基本使用","desc":["【onPressed】 : 点击事件 【VoidCallback?】","【style】: 按钮样式 【ButtonStyle?】","onPressed 为空时,点击时会打开右抽屉。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_en-US.json deleted file mode 100644 index e04ef0752..000000000 --- a/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"EndDrawerButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":" A \"end drawer\" icon that's appropriate for the current [TargetPlatform].","fields":[],"id":275,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"EndDrawerButtonIcon Effect","desc":["The _ActionIcon component adapts the right drawer button icon for different platforms based on the ActionIconTheme."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_zh-CN.json deleted file mode 100644 index e1c023ebf..000000000 --- a/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"EndDrawerButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":"适合当前 [TargetPlatform] 的\"末端抽屉\"图标。","fields":[],"id":275,"localName":"右抽屉按钮图标","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"EndDrawerButtonIcon 效果","desc":["通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的右抽屉按钮图标。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_en-US.json deleted file mode 100644 index 21af38d9b..000000000 --- a/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ErrorWidget","path":"/src/widgets/framework.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that renders an exception's message.","fields":[{"name":"message","type":"String","required":true,"desc":"The message to display."}],"id":197,"lever":1,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ErrorWidget","desc":["Parameters: Display Message 【Object】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_zh-CN.json deleted file mode 100644 index d9117796c..000000000 --- a/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ErrorWidget","path":"/src/widgets/framework.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"渲染异常消息的小部件。","fields":[{"name":"message","type":"String","required":true,"desc":"要显示的消息。"}],"id":197,"localName":"错误组件","lever":1,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ErrorWidget基本使用","desc":["入参 : 显示信息 【Object】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_en-US.json b/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_en-US.json deleted file mode 100644 index 1b98bf364..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExcludeFocus","path":"/src/widgets/focus_scope.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that controls whether or not the descendants of this widget are focusable.","fields":[{"name":"excluding","type":"bool","required":true,"desc":"If true, will make this widget's descendants unfocusable."},{"name":"child","type":"Widget","required":true,"desc":"The child widget of this [ExcludeFocus]."}],"id":414,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_zh-CN.json deleted file mode 100644 index cab9a0e84..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExcludeFocus","path":"/src/widgets/focus_scope.dart","parents":["StatelessWidget","Widget"],"desc":"控制此小部件的后代是否可聚焦的小部件。","fields":[{"name":"excluding","type":"bool","required":true,"desc":"如果为 true,将使此小部件的后代无法聚焦。"},{"name":"child","type":"Widget","required":true,"desc":"此 [ExcludeFocus] 的子小部件。"}],"id":414,"localName":"ExcludeFocus","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_en-US.json b/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_en-US.json deleted file mode 100644 index f7522fea9..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExcludeFocusTraversal","path":"/src/widgets/focus_traversal.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that controls whether or not the descendants of this widget are traversable.","fields":[{"name":"excluding","type":"bool","required":true,"desc":"If true, will make this widget's descendants untraversable."},{"name":"child","type":"Widget","required":true,"desc":"The child widget of this [ExcludeFocusTraversal]."}],"id":415,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_zh-CN.json deleted file mode 100644 index 82712d623..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExcludeFocusTraversal","path":"/src/widgets/focus_traversal.dart","parents":["StatelessWidget","Widget"],"desc":"控制此小部件的后代是否可遍历的小部件。","fields":[{"name":"excluding","type":"bool","required":true,"desc":"如果为 true,将使此小部件的后代不可遍历。"},{"name":"child","type":"Widget","required":true,"desc":"此 [ExcludeFocusTraversal] 的子小部件。"}],"id":415,"localName":"ExcludeFocusTraversal","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_en-US.json b/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_en-US.json deleted file mode 100644 index 8ab178fb0..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExcludeSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that drops all the semantics of its descendants.","fields":[{"name":"excluding","type":"bool","required":true,"desc":"Whether this widget is excluded in the semantics tree."}],"id":416,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_zh-CN.json deleted file mode 100644 index 4ee73f1de..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExcludeSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"丢弃其所有后代语义的小部件。","fields":[{"name":"excluding","type":"bool","required":true,"desc":"此小部件是否在语义树中被排除。"}],"id":416,"localName":"ExcludeSemantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_en-US.json deleted file mode 100644 index ac2b3f416..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExpandIcon","path":"/src/material/expand_icon.dart","parents":["StatefulWidget","Widget"],"desc":" A widget representing a rotating expand/collapse button. The icon rotates 180 degrees when pressed, then reverts the animation on a second press. The underlying icon is [Icons.expand_more].","fields":[{"name":"isExpanded","type":"bool","required":true,"desc":"Whether the icon is in an expanded state."},{"name":"size","type":"double","required":true,"desc":"The size of the icon."},{"name":"onPressed","type":"ValueChanged?","desc":"The callback triggered when the icon is pressed and the state changes between expanded and collapsed. The value passed to the current state."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The padding around the icon. The entire padded icon will react to input gestures."},{"name":"color","type":"Color?","desc":"{@template flutter.material.ExpandIcon.color} The color of the icon."},{"name":"disabledColor","type":"Color?","desc":"The color of the icon when it is disabled, i.e. if [onPressed] is null."},{"name":"expandedColor","type":"Color?","desc":"The color of the icon when the icon is expanded."},{"name":"splashColor","type":"Color?","desc":"Defines the splash color of the IconButton."},{"name":"highlightColor","type":"Color?","desc":"Defines the highlight color of the IconButton."}],"id":51,"lever":1,"family":1,"linkIds":[66,125],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ExpandIcon","desc":["【isExpanded】 : Whether expanded 【bool】","【padding】 : Padding 【EdgeInsetsGeometry】,","【size】 : Icon size 【double】","【color】 : Color when not expanded 【Color】","【expandedColor】 : Color when expanded 【Color】","【onPressed】 : Click event 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_zh-CN.json deleted file mode 100644 index 8506faf29..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExpandIcon","path":"/src/material/expand_icon.dart","parents":["StatefulWidget","Widget"],"desc":"表示旋转展开/折叠按钮的小部件。按下时图标旋转 180 度,第二次按下时恢复动画。底层图标是 [Icons.expand_more]。","fields":[{"name":"isExpanded","type":"bool","required":true,"desc":"图标是否处于展开状态。"},{"name":"size","type":"double","required":true,"desc":"图标的大小。"},{"name":"onPressed","type":"ValueChanged?","desc":"按下图标且状态在展开和折叠之间变化时触发的回调。传递给当前状态的值。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"图标周围的内边距。整个带内边距的图标将对输入手势做出反应。"},{"name":"color","type":"Color?","desc":"{@template flutter.material.ExpandIcon.color} 图标的颜色。"},{"name":"disabledColor","type":"Color?","desc":"图标禁用时的颜色,即 [onPressed] 为 null 时。"},{"name":"expandedColor","type":"Color?","desc":"图标展开时的颜色。"},{"name":"splashColor","type":"Color?","desc":"定义 IconButton 的飞溅颜色。"},{"name":"highlightColor","type":"Color?","desc":"定义 IconButton 的高亮颜色。"}],"id":51,"localName":"展开图标","lever":1,"family":1,"linkIds":[66,125],"nodes":[{"file":"node1_base.dart","name":"ExpandIcon基本使用","desc":["【isExpanded】 : 是否展开 【bool】","【padding】 : 内边距 【EdgeInsetsGeometry】,","【size】 : 图标大小 【double】","【color】 : 不展开时颜色 【Color】","【expandedColor】 : 展开时颜色 【Color】","【onPressed】 : 点击事件 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_en-US.json b/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_en-US.json deleted file mode 100644 index 3564f26b0..000000000 --- a/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Expanded","path":"/src/widgets/basic.dart","parents":["Flexible","ParentDataWidget","ProxyWidget","Widget"],"desc":" A widget that expands a child of a [Row], [Column], or [Flex] so that the child fills the available space.","fields":[],"id":106,"lever":4,"family":5,"linkIds":[94,109],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Expanded","desc":["【child】: child 【Widget】","【flex】: Proportion of remaining space allocation 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_zh-CN.json deleted file mode 100644 index b64f100cd..000000000 --- a/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Expanded","path":"/src/widgets/basic.dart","parents":["Flexible","ParentDataWidget","ProxyWidget","Widget"],"desc":"扩展 [Row]、[Column] 或 [Flex] 的子项,使子项填充可用空间的小部件。","fields":[],"id":106,"localName":"延展组件","lever":4,"family":5,"linkIds":[94,109],"nodes":[{"file":"node1_base.dart","name":"Expanded基本使用","desc":["【child】 : 孩子 【Widget】","【flex】 : 剩余空间分配占比 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_en-US.json b/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_en-US.json deleted file mode 100644 index 21e156d47..000000000 --- a/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Expansible","path":"/src/widgets/expansible.dart","parents":["StatefulWidget","Widget"],"desc":" A [StatefulWidget] that expands and collapses.","fields":[{"name":"controller","type":"ExpansibleController","required":true,"desc":"Expands and collapses the widget."},{"name":"headerBuilder","type":"ExpansibleComponentBuilder","required":true,"desc":"Builds the always-displayed header."},{"name":"bodyBuilder","type":"ExpansibleComponentBuilder","required":true,"desc":"Builds the collapsible body."},{"name":"duration","type":"Duration","required":true,"desc":"The duration of the expansion animation."},{"name":"curve","type":"Curve","required":true,"desc":"The curve of the expansion animation."},{"name":"reverseCurve","type":"Curve?","desc":"The reverse curve of the expansion animation."},{"name":"maintainState","type":"bool","required":true,"desc":"Whether the state of the body is maintained when the widget expands or collapses."},{"name":"expansibleBuilder","type":"ExpansibleBuilder","required":true,"desc":"Builds the widget with the results of [headerBuilder] and [bodyBuilder]."}],"id":417,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_zh-CN.json deleted file mode 100644 index befc9509c..000000000 --- a/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Expansible","path":"/src/widgets/expansible.dart","parents":["StatefulWidget","Widget"],"desc":"展开和折叠的 [StatefulWidget]。","fields":[{"name":"controller","type":"ExpansibleController","required":true,"desc":"展开和折叠小部件。"},{"name":"headerBuilder","type":"ExpansibleComponentBuilder","required":true,"desc":"构建始终显示的标题。"},{"name":"bodyBuilder","type":"ExpansibleComponentBuilder","required":true,"desc":"构建可折叠的主体。"},{"name":"duration","type":"Duration","required":true,"desc":"展开动画的持续时间。"},{"name":"curve","type":"Curve","required":true,"desc":"展开动画的曲线。"},{"name":"reverseCurve","type":"Curve?","desc":"展开动画的反向曲线。"},{"name":"maintainState","type":"bool","required":true,"desc":"当小部件展开或折叠时是否保持主体的状态。"},{"name":"expansibleBuilder","type":"ExpansibleBuilder","required":true,"desc":"使用 [headerBuilder] 和 [bodyBuilder] 的结果构建小部件。"}],"id":417,"localName":"Expansible","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_en-US.json b/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_en-US.json deleted file mode 100644 index db0f4249d..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExpansionPanelList","path":"/src/material/expansion_panel.dart","parents":["StatefulWidget","Widget"],"desc":" A material expansion panel list that lays out its children and animates expansions.","fields":[{"name":"children","type":"List","required":true,"desc":"The children of the expansion panel list. They are laid out in a similar fashion to [ListBody]."},{"name":"expansionCallback","type":"ExpansionPanelCallback?","desc":"The callback that gets called whenever one of the expand/collapse buttons is pressed. The arguments passed to the callback are the index of the pressed panel and whether the panel is currently expanded or not."},{"name":"animationDuration","type":"Duration","required":true,"desc":"The duration of the expansion animation."},{"name":"initialOpenPanelValue","type":"Object?","desc":"The value of the panel that initially begins open. (This value is only used when initializing with the [ExpansionPanelList.radio] constructor.)"},{"name":"expandedHeaderPadding","type":"EdgeInsets","required":true,"desc":"The padding that surrounds the panel header when expanded."},{"name":"dividerColor","type":"Color?","desc":"Defines color for the divider when [ExpansionPanel.isExpanded] is false."},{"name":"elevation","type":"double","required":true,"desc":"Defines elevation for the [ExpansionPanel] while it's expanded."},{"name":"expandIconColor","type":"Color?","desc":"{@macro flutter.material.ExpandIcon.color}"},{"name":"materialGapSize","type":"double","required":true,"desc":"Defines the [MaterialGap.size] of the [MaterialGap] which is placed between the [ExpansionPanelList.children] when they're expanded."}],"id":178,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ExpansionPanelList","desc":["【children】: List of child components 【List】","【animationDuration】: Animation duration 【Duration】","【expansionCallback】: Expansion callback 【List】","【onPressed】: Click event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_zh-CN.json deleted file mode 100644 index 947300299..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExpansionPanelList","path":"/src/material/expansion_panel.dart","parents":["StatefulWidget","Widget"],"desc":"布局其子项并为展开设置动画的 material 展开面板列表。","fields":[{"name":"children","type":"List","required":true,"desc":"展开面板列表的子项。它们以类似于 [ListBody] 的方式布局。"},{"name":"expansionCallback","type":"ExpansionPanelCallback?","desc":"每当按下展开/折叠按钮之一时调用的回调。传递给回调的参数是按下的面板的索引以及面板当前是否展开。"},{"name":"animationDuration","type":"Duration","required":true,"desc":"展开动画的持续时间。"},{"name":"initialOpenPanelValue","type":"Object?","desc":"最初开始打开的面板的值。(此值仅在使用 [ExpansionPanelList.radio] 构造函数初始化时使用。)"},{"name":"expandedHeaderPadding","type":"EdgeInsets","required":true,"desc":"展开时围绕面板标题的内边距。"},{"name":"dividerColor","type":"Color?","desc":"当 [ExpansionPanel.isExpanded] 为 false 时定义分隔符的颜色。"},{"name":"elevation","type":"double","required":true,"desc":"定义 [ExpansionPanel] 展开时的高度。"},{"name":"expandIconColor","type":"Color?","desc":"{@macro flutter.material.ExpandIcon.color}"},{"name":"materialGapSize","type":"double","required":true,"desc":"定义当 [ExpansionPanelList.children] 展开时放置在它们之间的 [MaterialGap] 的 [MaterialGap.size]。"}],"id":178,"localName":"展开列表","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ExpansionPanelList基本使用","desc":["【children】 : 子组件列表 【List】","【animationDuration】 : 动画时长 【Duration】","【expansionCallback】 : 展开回调 【List】","【onPressed】 : 点击事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_en-US.json b/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_en-US.json deleted file mode 100644 index 2795d5c63..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExpansionTile","path":"/src/material/expansion_tile.dart","parents":["StatefulWidget","Widget"],"desc":" A single-line [ListTile] with an expansion arrow icon that expands or collapses the tile to reveal or hide the [children].","fields":[{"name":"leading","type":"Widget?","desc":"A widget to display before the title."},{"name":"title","type":"Widget","required":true,"desc":"The primary content of the list item."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"onExpansionChanged","type":"ValueChanged?","desc":"Called when the tile expands or collapses."},{"name":"children","type":"List","required":true,"desc":"The widgets that are displayed when the tile expands."},{"name":"backgroundColor","type":"Color?","desc":"The color to display behind the sublist when expanded."},{"name":"collapsedBackgroundColor","type":"Color?","desc":"When not null, defines the background color of tile when the sublist is collapsed."},{"name":"trailing","type":"Widget?","desc":"A widget to display after the title."},{"name":"showTrailingIcon","type":"bool","required":true,"desc":"Specifies if the [ExpansionTile] should build a default trailing icon if [trailing] is null."},{"name":"initiallyExpanded","type":"bool","required":true,"desc":"Specifies if the list tile is initially expanded (true) or collapsed (false)."},{"name":"maintainState","type":"bool","required":true,"desc":"Specifies whether the state of the children is maintained when the tile expands and collapses."},{"name":"tilePadding","type":"EdgeInsetsGeometry?","desc":"Specifies padding for the [ListTile]."},{"name":"expandedAlignment","type":"Alignment?","desc":"Specifies the alignment of [children], which are arranged in a column when the tile is expanded."},{"name":"expandedCrossAxisAlignment","type":"CrossAxisAlignment?","desc":"Specifies the alignment of each child within [children] when the tile is expanded."},{"name":"childrenPadding","type":"EdgeInsetsGeometry?","desc":"Specifies padding for [children]."},{"name":"iconColor","type":"Color?","desc":"The icon color of tile's expansion arrow icon when the sublist is expanded."},{"name":"collapsedIconColor","type":"Color?","desc":"The icon color of tile's expansion arrow icon when the sublist is collapsed."},{"name":"textColor","type":"Color?","desc":"The color of the tile's titles when the sublist is expanded."},{"name":"collapsedTextColor","type":"Color?","desc":"The color of the tile's titles when the sublist is collapsed."},{"name":"shape","type":"ShapeBorder?","desc":"The tile's border shape when the sublist is expanded."},{"name":"collapsedShape","type":"ShapeBorder?","desc":"The tile's border shape when the sublist is collapsed."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"Typically used to force the expansion arrow icon to the tile's leading or trailing edge."},{"name":"controller","type":"ExpansionTileController?","desc":"If provided, the controller can be used to expand and collapse tiles."},{"name":"dense","type":"bool?","desc":"{@macro flutter.material.ListTile.dense}"},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the expansion tile's layout will be."},{"name":"minTileHeight","type":"double?","desc":"{@macro flutter.material.ListTile.minTileHeight}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"enabled","type":"bool","required":true,"desc":"Whether this expansion tile is interactive."},{"name":"expansionAnimationStyle","type":"AnimationStyle?","desc":"Used to override the expansion animation curve and duration."},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"Whether to add button:true to the semantics if onTap is provided. This is a temporary flag to help changing the behavior of ListTile onTap semantics."}],"id":52,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ExpansionTile","desc":["【children】: Expanded content 【List】","【leading】: Leading component 【Widget】","【title】: Title component 【Widget】","【trailing】: Trailing component 【Widget】","【backgroundColor】: Background color 【Color】","【onExpansionChanged】: Collapse event 【Function(bool)】","【initiallyExpanded】: Whether initially expanded 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_zh-CN.json deleted file mode 100644 index 08cdca65f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExpansionTile","path":"/src/material/expansion_tile.dart","parents":["StatefulWidget","Widget"],"desc":"带有展开箭头图标的单行 [ListTile],展开或折叠磁贴以显示或隐藏 [children]。","fields":[{"name":"leading","type":"Widget?","desc":"在标题前显示的小部件。"},{"name":"title","type":"Widget","required":true,"desc":"列表项的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"onExpansionChanged","type":"ValueChanged?","desc":"磁贴展开或折叠时调用。"},{"name":"children","type":"List","required":true,"desc":"磁贴展开时显示的小部件。"},{"name":"backgroundColor","type":"Color?","desc":"展开时子列表后面显示的颜色。"},{"name":"collapsedBackgroundColor","type":"Color?","desc":"当不为 null 时,定义子列表折叠时磁贴的背景颜色。"},{"name":"trailing","type":"Widget?","desc":"在标题后显示的小部件。"},{"name":"showTrailingIcon","type":"bool","required":true,"desc":"指定如果 [trailing] 为 null,[ExpansionTile] 是否应构建默认尾随图标。"},{"name":"initiallyExpanded","type":"bool","required":true,"desc":"指定列表磁贴最初是展开(true)还是折叠(false)。"},{"name":"maintainState","type":"bool","required":true,"desc":"指定磁贴展开和折叠时是否保持子项的状态。"},{"name":"tilePadding","type":"EdgeInsetsGeometry?","desc":"指定 [ListTile] 的内边距。"},{"name":"expandedAlignment","type":"Alignment?","desc":"指定磁贴展开时排列在列中的 [children] 的对齐方式。"},{"name":"expandedCrossAxisAlignment","type":"CrossAxisAlignment?","desc":"指定磁贴展开时 [children] 内每个子项的对齐方式。"},{"name":"childrenPadding","type":"EdgeInsetsGeometry?","desc":"指定 [children] 的内边距。"},{"name":"iconColor","type":"Color?","desc":"子列表展开时磁贴展开箭头图标的图标颜色。"},{"name":"collapsedIconColor","type":"Color?","desc":"子列表折叠时磁贴展开箭头图标的图标颜色。"},{"name":"textColor","type":"Color?","desc":"子列表展开时磁贴标题的颜色。"},{"name":"collapsedTextColor","type":"Color?","desc":"子列表折叠时磁贴标题的颜色。"},{"name":"shape","type":"ShapeBorder?","desc":"子列表展开时磁贴的边框形状。"},{"name":"collapsedShape","type":"ShapeBorder?","desc":"子列表折叠时磁贴的边框形状。"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"通常用于强制展开箭头图标到磁贴的前缘或后缘。"},{"name":"controller","type":"ExpansionTileController?","desc":"如果提供,控制器可用于展开和折叠磁贴。"},{"name":"dense","type":"bool?","desc":"{@macro flutter.material.ListTile.dense}"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义展开磁贴布局的紧凑程度。"},{"name":"minTileHeight","type":"double?","desc":"{@macro flutter.material.ListTile.minTileHeight}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"enabled","type":"bool","required":true,"desc":"此展开磁贴是否可交互。"},{"name":"expansionAnimationStyle","type":"AnimationStyle?","desc":"用于覆盖展开动画曲线和持续时间。"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"如果提供了 onTap,是否向语义添加 button:true。这是一个临时标志,用于帮助更改 ListTile onTap 语义的行为。"}],"id":52,"localName":"展开瓦片","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ExpansionTile基本使用","desc":["【children】 : 展开内容 【List】","【leading】 : 头左组件 【Widget】","【title】 : 头中组件 【Widget】","【trailing】 : 头尾组件 【Widget】","【backgroundColor】 : 背景色 【Color】","【onExpansionChanged】 : 折叠事件 【Function(bool)】","【initiallyExpanded】 : 是否初始时展开 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_en-US.json deleted file mode 100644 index 06b75b646..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExpansionTileTheme","path":"/src/material/expansion_tile_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ExpansionTileTheme] of its [ExpansionTile] descendants.","fields":[{"name":"data","type":"ExpansionTileThemeData","required":true,"desc":"Specifies color, alignment, and text style values for descendant [ExpansionTile] widgets."}],"id":418,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_zh-CN.json deleted file mode 100644 index d88de856c..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExpansionTileTheme","path":"/src/material/expansion_tile_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [ExpansionTile] 后代的默认 [ExpansionTileTheme]。","fields":[{"name":"data","type":"ExpansionTileThemeData","required":true,"desc":"指定后代 [ExpansionTile] 小部件的颜色、对齐和文本样式值。"}],"id":418,"localName":"ExpansionTileTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_en-US.json b/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_en-US.json deleted file mode 100644 index 07c8d6b1d..000000000 --- a/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FadeInImage","path":"/src/widgets/fade_in_image.dart","parents":["StatefulWidget","Widget"],"desc":" An image that shows a [placeholder] image while the target [image] is loading, then fades in the new image when it loads.","fields":[{"name":"placeholder","type":"ImageProvider","required":true,"desc":"Image displayed while the target [image] is loading."},{"name":"placeholderErrorBuilder","type":"ImageErrorWidgetBuilder?","desc":"A builder function that is called if an error occurs during placeholder image loading."},{"name":"image","type":"ImageProvider","required":true,"desc":"The target image that is displayed once it has loaded."},{"name":"imageErrorBuilder","type":"ImageErrorWidgetBuilder?","desc":"A builder function that is called if an error occurs during image loading."},{"name":"fadeOutDuration","type":"Duration","required":true,"desc":"The duration of the fade-out animation for the [placeholder]."},{"name":"fadeOutCurve","type":"Curve","required":true,"desc":"The curve of the fade-out animation for the [placeholder]."},{"name":"fadeInDuration","type":"Duration","required":true,"desc":"The duration of the fade-in animation for the [image]."},{"name":"fadeInCurve","type":"Curve","required":true,"desc":"The curve of the fade-in animation for the [image]."},{"name":"width","type":"double?","desc":"If non-null, require the image to have this width."},{"name":"color","type":"Color?","desc":"If non-null, this color is blended with each image pixel using [colorBlendMode]."},{"name":"colorBlendMode","type":"BlendMode?","desc":"Used to combine [color] with this [image]."},{"name":"placeholderColor","type":"Color?","desc":"If non-null, this color is blended with each placeholder image pixel using [placeholderColorBlendMode]."},{"name":"placeholderColorBlendMode","type":"BlendMode?","desc":"Used to combine [placeholderColor] with the [placeholder] image."},{"name":"height","type":"double?","desc":"If non-null, require the image to have this height."},{"name":"fit","type":"BoxFit?","desc":"How to inscribe the image into the space allocated during layout."},{"name":"placeholderFit","type":"BoxFit?","desc":"How to inscribe the placeholder image into the space allocated during layout."},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"The rendering quality of the image."},{"name":"placeholderFilterQuality","type":"FilterQuality?","desc":"The rendering quality of the placeholder image."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the image within its bounds."},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"How to paint any portions of the layout bounds not covered by the image."},{"name":"matchTextDirection","type":"bool","required":true,"desc":"Whether to paint the image in the direction of the [TextDirection]."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"Whether to exclude this image from semantics."},{"name":"imageSemanticLabel","type":"String?","desc":"A semantic description of the [image]."}],"id":8,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FadeInImage.assetNetwork Load Network Image","desc":["【placeholder】 : Placeholder image address 【String】","【image】 : Display image address 【String】","【width】: Width 【double】","【height】: Height 【double】","【fadeInDuration】: Fade-in duration 【Duration】","【fadeOutDuration】: Fade-out duration 【Duration】","【fadeInCurve】: Fade-in curve 【Cubic】","【fadeOutCurve】: Fade-out curve 【Cubic】","【fit】: Fit mode 【BoxFit】","【alignment】: Alignment mode 【Alignment】","【repeat】: Repeat mode 【ImageRepeat】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_zh-CN.json deleted file mode 100644 index d000632e5..000000000 --- a/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FadeInImage","path":"/src/widgets/fade_in_image.dart","parents":["StatefulWidget","Widget"],"desc":"在目标 [image] 加载时显示 [placeholder] 图像,然后在加载时淡入新图像的图像。","fields":[{"name":"placeholder","type":"ImageProvider","required":true,"desc":"目标 [image] 加载时显示的图像。"},{"name":"placeholderErrorBuilder","type":"ImageErrorWidgetBuilder?","desc":"如果在占位符图像加载期间发生错误,则调用的构建器函数。"},{"name":"image","type":"ImageProvider","required":true,"desc":"加载后显示的目标图像。"},{"name":"imageErrorBuilder","type":"ImageErrorWidgetBuilder?","desc":"如果在图像加载期间发生错误,则调用的构建器函数。"},{"name":"fadeOutDuration","type":"Duration","required":true,"desc":"[placeholder] 的淡出动画持续时间。"},{"name":"fadeOutCurve","type":"Curve","required":true,"desc":"[placeholder] 的淡出动画曲线。"},{"name":"fadeInDuration","type":"Duration","required":true,"desc":"[image] 的淡入动画持续时间。"},{"name":"fadeInCurve","type":"Curve","required":true,"desc":"[image] 的淡入动画曲线。"},{"name":"width","type":"double?","desc":"如果非空,要求图像具有此宽度。"},{"name":"color","type":"Color?","desc":"如果非空,此颜色使用 [colorBlendMode] 与每个图像像素混合。"},{"name":"colorBlendMode","type":"BlendMode?","desc":"用于将 [color] 与此 [image] 组合。"},{"name":"placeholderColor","type":"Color?","desc":"如果非空,此颜色使用 [placeholderColorBlendMode] 与每个占位符图像像素混合。"},{"name":"placeholderColorBlendMode","type":"BlendMode?","desc":"用于将 [placeholderColor] 与 [placeholder] 图像组合。"},{"name":"height","type":"double?","desc":"如果非空,要求图像具有此高度。"},{"name":"fit","type":"BoxFit?","desc":"如何在布局期间分配的空间中刻画图像。"},{"name":"placeholderFit","type":"BoxFit?","desc":"如何在布局期间分配的空间中刻画占位符图像。"},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"图像的渲染质量。"},{"name":"placeholderFilterQuality","type":"FilterQuality?","desc":"占位符图像的渲染质量。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在其边界内对齐图像。"},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"如何绘制图像未覆盖的布局边界的任何部分。"},{"name":"matchTextDirection","type":"bool","required":true,"desc":"是否在 [TextDirection] 的方向上绘制图像。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"是否从语义中排除此图像。"},{"name":"imageSemanticLabel","type":"String?","desc":"[image] 的语义描述。"}],"id":8,"localName":"淡入图片","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FadeInImage.assetNetwork加载网络图片","desc":["【placeholder】 : 展位图地址 【String】","【image】 : 显示图地址 【String】","【width】: 宽 【double】","【height】: 高 【double】","【fadeInDuration】: 淡入时长 【Duration】","【fadeOutDuration】: 淡出时长 【Duration】","【fadeInCurve】: 淡入曲线 【Cubic】","【fadeOutCurve】: 淡出曲线 【Cubic】","【fit】: 适应模式 【BoxFit】","【alignment】: 对齐模式 【Alignment】","【repeat】: 重复模式 【ImageRepeat】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_en-US.json deleted file mode 100644 index cb13f8cb6..000000000 --- a/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FadeTransition","path":"/src/widgets/transitions.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Animates the opacity of a widget.","fields":[{"name":"opacity","type":"Animation","required":true,"desc":"The animation that controls the opacity of the child."},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"Whether the semantic information of the children is always included."}],"id":89,"lever":3,"family":2,"linkIds":[73,118],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FadeTransition","desc":["【child】 : Child Component 【Widget】","【opacity】 : Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_zh-CN.json deleted file mode 100644 index f11a92370..000000000 --- a/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FadeTransition","path":"/src/widgets/transitions.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对小部件的不透明度进行动画处理。","fields":[{"name":"opacity","type":"Animation","required":true,"desc":"控制子项不透明度的动画。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含子项的语义信息。"}],"id":89,"localName":"透明变换","lever":3,"family":2,"linkIds":[73,118],"nodes":[{"file":"node1_base.dart","name":"FadeTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【opacity】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_en-US.json b/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_en-US.json deleted file mode 100644 index c2a7ab200..000000000 --- a/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FilledButton","path":"/src/material/filled_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":" A Material Design filled button.","fields":[],"id":359,"lever":4,"family":1,"linkIds":[354,355,353],"nodes":[{"file":"node1.dart","name":"Basic Usage","desc":["【child】: Button content 【Widget】","【onPressed】: Click event 【VoidCallback】","【onHover】: Long press event 【ValueChanged? 】","【onLongPress】: Long press event 【VoidCallback?】","The filled button is visually second only to [FloatingActionButton] and is used for important, finalizing actions such as save, join now, or confirm."]},{"file":"node2.dart","name":"Tonal Variant","desc":["FilledButton.tonal is a tonal filled button, visually between [FilledButton] and [OutlinedButton], suitable for scenarios requiring slightly stronger emphasis than an outlined button but with lower priority. For example, a [Next] button."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_zh-CN.json deleted file mode 100644 index 76654b760..000000000 --- a/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FilledButton","path":"/src/material/filled_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":"Material Design 填充按钮。","fields":[],"id":359,"localName":"填充按钮","lever":4,"family":1,"linkIds":[354,355,353],"nodes":[{"file":"node1.dart","name":"基本使用","desc":["【child】 : 按钮内容 【Widget】","【onPressed】 : 点击事件 【VoidCallback】","【onHover】 : 长按事件 【ValueChanged? 】","【onLongPress】 : 长按事件 【VoidCallback?】","填充按钮在视觉上仅次于 [FloatingActionButton],应用于重要的、最终完成流程的操作,例如: 保存、立即加入 或 确认。"]},{"file":"node2.dart","name":"色调变体","desc":["FilledButton.tonal 是色调填充按钮,视觉上介于 [FilledButton] 和 [OutlinedButton] 之间,适用于需要比轮廓按钮稍强一些的强调但优先级较低的场景。例如 [下一步] 按钮 "]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_en-US.json deleted file mode 100644 index 4ea4fc714..000000000 --- a/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FilledButtonTheme","path":"/src/material/filled_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [FilledButton] descendants.","fields":[{"name":"data","type":"FilledButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":419,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_zh-CN.json deleted file mode 100644 index d28ecd30c..000000000 --- a/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FilledButtonTheme","path":"/src/material/filled_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [FilledButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"FilledButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":419,"localName":"FilledButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_en-US.json b/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_en-US.json deleted file mode 100644 index 36425a3d4..000000000 --- a/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FilterChip","path":"/src/material/filter_chip.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design filter chip.","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"selected","type":"bool","required":true},{"name":"onSelected","type":"ValueChanged?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"pressElevation","type":"double?"},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":15,"lever":4,"family":0,"linkIds":[11,12,13,14,153],"nodes":[{"file":"node1_base.dart","name":"FilterChip can accept selection events","desc":["【selected】: Whether selected 【bool】","【onSelected】: Selection event 【Function(bool)】","【selectedColor】: Color after selection 【Color】","【selectedShadowColor】: Shadow color after selection 【Color】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_zh-CN.json deleted file mode 100644 index 03f9843e8..000000000 --- a/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FilterChip","path":"/src/material/filter_chip.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 过滤芯片。","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"selected","type":"bool","required":true},{"name":"onSelected","type":"ValueChanged?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"pressElevation","type":"double?"},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":15,"localName":"过滤小条","lever":4,"family":0,"linkIds":[11,12,13,14,153],"nodes":[{"file":"node1_base.dart","name":"FilterChip可接受选择事件","desc":["【selected】: 是否选择 【bool】","【onSelected】: 选择事件 【Function(bool)】","【selectedColor】: 选择后的颜色 【Color】","【selectedShadowColor】: 选择后的阴影颜色 【Color】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_en-US.json deleted file mode 100644 index 747d85f9e..000000000 --- a/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FittedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Scales and positions its child within itself according to [fit].","fields":[{"name":"fit","type":"BoxFit","required":true,"desc":"How to inscribe the child into the space allocated during layout."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the child within its parent's bounds."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":87,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FittedBox","desc":["【child】: Child component 【Widget】","【fit】: Adaptation mode 【BoxFit】","【alignment】: Alignment method 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_zh-CN.json deleted file mode 100644 index 800238914..000000000 --- a/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FittedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"根据 [fit] 在自身内缩放和定位其子项。","fields":[{"name":"fit","type":"BoxFit","required":true,"desc":"如何在布局期间分配的空间中刻画子项。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在其父级边界内对齐子项。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":87,"localName":"适应盒","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FittedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【fit】 : 适应模式 【BoxFit】","【alignment】 : 对齐方式 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flex/Flex_en-US.json b/modules/widget_system/widgets/doc/widgets/Flex/Flex_en-US.json deleted file mode 100644 index 360fa4244..000000000 --- a/modules/widget_system/widgets/doc/widgets/Flex/Flex_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Flex","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that displays its children in a one-dimensional array.","fields":[{"name":"direction","type":"Axis","required":true,"desc":"The direction to use as the main axis."},{"name":"mainAxisAlignment","type":"MainAxisAlignment","required":true,"desc":"How the children should be placed along the main axis."},{"name":"mainAxisSize","type":"MainAxisSize","required":true,"desc":"How much space should be occupied in the main axis."},{"name":"crossAxisAlignment","type":"CrossAxisAlignment","required":true,"desc":"How the children should be placed along the cross axis."},{"name":"textDirection","type":"TextDirection?","desc":"Determines the order to lay children out horizontally and how to interpret `start` and `end` in the horizontal direction."},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"Determines the order to lay children out vertically and how to interpret `start` and `end` in the vertical direction."},{"name":"textBaseline","type":"TextBaseline?","desc":"If aligning items according to their baseline, which baseline to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"spacing","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderFlex.spacing}"}],"id":94,"lever":5,"family":3,"linkIds":[95,96,106,107,109],"nodes":[{"file":"node_01.dart","name":"Flex Direction","desc":["【children】: Component list 【List】","【direction】: Direction 【Axis】"]},{"file":"node_02.dart","name":"Flex Main Axis Alignment","desc":["【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】"]},{"file":"node_03.dart","name":"Flex Cross Axis Alignment","desc":["【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】"]},{"file":"node_04.dart","name":"Flex Vertical Direction","desc":["【verticalDirection】: Vertical direction 【VerticalDirection】"]},{"file":"node_05.dart","name":"Flex Horizontal Direction","desc":["【textDirection】: Horizontal direction 【TextDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flex/Flex_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Flex/Flex_zh-CN.json deleted file mode 100644 index d1305f97d..000000000 --- a/modules/widget_system/widgets/doc/widgets/Flex/Flex_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Flex","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在一维数组中显示其子项的小部件。","fields":[{"name":"direction","type":"Axis","required":true,"desc":"用作主轴的方向。"},{"name":"mainAxisAlignment","type":"MainAxisAlignment","required":true,"desc":"子项应如何沿主轴放置。"},{"name":"mainAxisSize","type":"MainAxisSize","required":true,"desc":"主轴应占用多少空间。"},{"name":"crossAxisAlignment","type":"CrossAxisAlignment","required":true,"desc":"子项应如何沿交叉轴放置。"},{"name":"textDirection","type":"TextDirection?","desc":"确定水平布局子项的顺序以及如何解释水平方向上的 `start` 和 `end`。"},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"确定垂直布局子项的顺序以及如何解释垂直方向上的 `start` 和 `end`。"},{"name":"textBaseline","type":"TextBaseline?","desc":"如果根据基线对齐项目,使用哪个基线。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"spacing","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderFlex.spacing}"}],"id":94,"localName":"弹性布局","lever":5,"family":3,"linkIds":[95,96,106,107,109],"nodes":[{"file":"node_01.dart","name":"Flex的排布方向","desc":["【children】 : 组件列表 【List】","【direction】 : 方向 【Axis】"]},{"file":"node_02.dart","name":"Flex主轴对齐方式","desc":["【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】"]},{"file":"node_03.dart","name":"Flex交叉轴对齐方式","desc":["【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】"]},{"file":"node_04.dart","name":"Flex垂直方向顺序","desc":["【verticalDirection】 : 垂直方向顺序 【VerticalDirection】"]},{"file":"node_05.dart","name":"Flex水平方向顺序","desc":["【textDirection】 : 水平方向顺序 【TextDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_en-US.json b/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_en-US.json deleted file mode 100644 index dbdf3a95a..000000000 --- a/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Flexible","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":" A widget that controls how a child of a [Row], [Column], or [Flex] flexes.","fields":[{"name":"flex","type":"int","required":true,"desc":"The flex factor to use for this child."},{"name":"fit","type":"FlexFit","required":true,"desc":"How a flexible child is inscribed into the available space."}],"id":109,"lever":3,"family":5,"linkIds":[94,106],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Flexible","desc":["【child】: child 【Widget】","【fit】: adaptation mode*2 【FlexFit】","【flex】: remaining space allocation ratio 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_zh-CN.json deleted file mode 100644 index 1e73702f1..000000000 --- a/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Flexible","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":"控制 [Row]、[Column] 或 [Flex] 的子项如何弯曲的小部件。","fields":[{"name":"flex","type":"int","required":true,"desc":"用于此子项的弹性因子。"},{"name":"fit","type":"FlexFit","required":true,"desc":"弹性子项如何刻画到可用空间中。"}],"id":109,"localName":"灵活组件","lever":3,"family":5,"linkIds":[94,106],"nodes":[{"file":"node1_base.dart","name":"Flexible基本使用","desc":["【child】 : 孩子 【Widget】","【fit】 : 适应模式*2 【FlexFit】","【flex】 : 剩余空间分配占比 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_en-US.json b/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_en-US.json deleted file mode 100644 index 3201deb21..000000000 --- a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FlexibleSpaceBar","path":"/src/material/flexible_space_bar.dart","parents":["StatefulWidget","Widget"],"desc":" The part of a Material Design [AppBar] that expands, collapses, and stretches.","fields":[{"name":"title","type":"Widget?","desc":"The primary contents of the flexible space bar when expanded."},{"name":"background","type":"Widget?","desc":"Shown behind the [title] when expanded."},{"name":"centerTitle","type":"bool?","desc":"Whether the title should be centered."},{"name":"collapseMode","type":"CollapseMode","required":true,"desc":"Collapse effect while scrolling."},{"name":"stretchModes","type":"List","required":true,"desc":"Stretch effect while over-scrolling."},{"name":"titlePadding","type":"EdgeInsetsGeometry?","desc":"Defines how far the [title] is inset from either the widget's bottom-left or its center."},{"name":"expandedTitleScale","type":"double","required":true,"desc":"Defines how much the title is scaled when the FlexibleSpaceBar is expanded due to the user scrolling downwards. The title is scaled uniformly on the x and y axes while maintaining its bottom-left position (bottom-center if [centerTitle] is true)."}],"id":196,"lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FlexibleSpaceBar","desc":["【title】 : Title component 【Widget】","【titlePadding】 : Title spacing 【EdgeInsetsGeometry】","【collapseMode】 : Collapse mode 【CollapseMode】","【stretchModes】 : Stretch modes 【List】","【background】 : Background component 【Widget】","【centerTitle】 : Whether to center 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_zh-CN.json deleted file mode 100644 index 9fdba93cf..000000000 --- a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FlexibleSpaceBar","path":"/src/material/flexible_space_bar.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design [AppBar] 中展开、折叠和拉伸的部分。","fields":[{"name":"title","type":"Widget?","desc":"展开时弹性空间栏的主要内容。"},{"name":"background","type":"Widget?","desc":"展开时显示在 [title] 后面。"},{"name":"centerTitle","type":"bool?","desc":"标题是否应居中。"},{"name":"collapseMode","type":"CollapseMode","required":true,"desc":"滚动时的折叠效果。"},{"name":"stretchModes","type":"List","required":true,"desc":"过度滚动时的拉伸效果。"},{"name":"titlePadding","type":"EdgeInsetsGeometry?","desc":"定义 [title] 从小部件左下角或中心插入多远。"},{"name":"expandedTitleScale","type":"double","required":true,"desc":"定义当用户向下滚动导致 FlexibleSpaceBar 展开时标题缩放多少。标题在 x 和 y 轴上均匀缩放,同时保持其左下位置(如果 [centerTitle] 为 true,则为底部中心)。"}],"id":196,"localName":"伸展空间栏","lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FlexibleSpaceBar基本使用","desc":["【title】 : 标题组件 【Widget】","【titlePadding】 : 标题间距 【EdgeInsetsGeometry】","【collapseMode】 : 折叠模式 【CollapseMode】","【stretchModes】 : 延伸模式 【List】","【background】 : 背景组件 【Widget】","【centerTitle】 : 是否居中 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_en-US.json b/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_en-US.json deleted file mode 100644 index 6cdb69aa4..000000000 --- a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FlexibleSpaceBarSettings","path":"/src/material/flexible_space_bar.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Provides sizing and opacity information to a [FlexibleSpaceBar].","fields":[{"name":"toolbarOpacity","type":"double","required":true,"desc":"Affects how transparent the text within the toolbar appears."},{"name":"minExtent","type":"double","required":true,"desc":"Minimum height of the resulting [FlexibleSpaceBar] when fully collapsed."},{"name":"maxExtent","type":"double","required":true,"desc":"Maximum height of the resulting [FlexibleSpaceBar] when fully expanded."},{"name":"currentExtent","type":"double","required":true,"desc":"If the [FlexibleSpaceBar.title] or the [FlexibleSpaceBar.background] is not null, then this value is used to calculate the relative scale of these elements upon initialization."},{"name":"isScrolledUnder","type":"bool?","desc":"True if the FlexibleSpaceBar overlaps the primary scrollable's contents."},{"name":"hasLeading","type":"bool?","desc":"True if the FlexibleSpaceBar has a leading widget."}],"id":420,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_zh-CN.json deleted file mode 100644 index 269cef06a..000000000 --- a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FlexibleSpaceBarSettings","path":"/src/material/flexible_space_bar.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为 [FlexibleSpaceBar] 提供大小和不透明度信息。","fields":[{"name":"toolbarOpacity","type":"double","required":true,"desc":"影响工具栏内文本的透明度。"},{"name":"minExtent","type":"double","required":true,"desc":"完全折叠时生成的 [FlexibleSpaceBar] 的最小高度。"},{"name":"maxExtent","type":"double","required":true,"desc":"完全展开时生成的 [FlexibleSpaceBar] 的最大高度。"},{"name":"currentExtent","type":"double","required":true,"desc":"如果 [FlexibleSpaceBar.title] 或 [FlexibleSpaceBar.background] 不为 null,则此值用于在初始化时计算这些元素的相对比例。"},{"name":"isScrolledUnder","type":"bool?","desc":"如果 FlexibleSpaceBar 与主要可滚动内容重叠,则为 true。"},{"name":"hasLeading","type":"bool?","desc":"如果 FlexibleSpaceBar 有前导小部件,则为 true。"}],"id":420,"localName":"FlexibleSpaceBarSettings","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_en-US.json b/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_en-US.json deleted file mode 100644 index 946a8458a..000000000 --- a/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FloatingActionButton","path":"/src/material/floating_action_button.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design floating action button.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"tooltip","type":"String?","desc":"Text that describes the action that will occur when the button is pressed."},{"name":"foregroundColor","type":"Color?","desc":"The default foreground color for icons and text within the button."},{"name":"backgroundColor","type":"Color?","desc":"The button's background color."},{"name":"focusColor","type":"Color?","desc":"The color to use for filling the button when the button has input focus."},{"name":"hoverColor","type":"Color?","desc":"The color to use for filling the button when the button has a pointer hovering over it."},{"name":"splashColor","type":"Color?","desc":"The splash color for this [FloatingActionButton]'s [InkWell]."},{"name":"heroTag","type":"Object?","desc":"The tag to apply to the button's [Hero] widget."},{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when the button is tapped or otherwise activated."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this button relative to its parent."},{"name":"focusElevation","type":"double?","desc":"The z-coordinate at which to place this button relative to its parent when the button has the input focus."},{"name":"hoverElevation","type":"double?","desc":"The z-coordinate at which to place this button relative to its parent when the button is enabled and has a pointer hovering over it."},{"name":"highlightElevation","type":"double?","desc":"The z-coordinate at which to place this button relative to its parent when the user is touching the button."},{"name":"disabledElevation","type":"double?","desc":"The z-coordinate at which to place this button when the button is disabled ([onPressed] is null)."},{"name":"mini","type":"bool","required":true,"desc":"Controls the size of this button."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the button's [Material]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"isExtended","type":"bool","required":true,"desc":"True if this is an \"extended\" floating action button."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"Configures the minimum size of the tap target."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"extendedIconLabelSpacing","type":"double?","desc":"The spacing between the icon and the label for an extended [FloatingActionButton]."},{"name":"extendedPadding","type":"EdgeInsetsGeometry?","desc":"The padding for an extended [FloatingActionButton]'s content."},{"name":"extendedTextStyle","type":"TextStyle?","desc":"The text style for an extended [FloatingActionButton]'s label."}],"id":28,"lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FloatingActionButton Click Event","desc":["【child】: Child widget 【Widget】","【tooltip】: Tooltip text when long pressed 【String】","【backgroundColor】: Background color 【Color】","【foregroundColor】: Foreground color 【Color】","【elevation】: Elevation 【double】","【onPressed】: Click event 【Function】"]},{"file":"node2_mini.dart","name":"mini Property","desc":["【mini】: Whether it is mini 【bool】"]},{"file":"node3_shape.dart","name":"shape Property","desc":["【shape】: Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_zh-CN.json deleted file mode 100644 index 9b9a5e6f6..000000000 --- a/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FloatingActionButton","path":"/src/material/floating_action_button.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 浮动操作按钮。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"tooltip","type":"String?","desc":"描述按下按钮时将发生的操作的文本。"},{"name":"foregroundColor","type":"Color?","desc":"按钮内图标和文本的默认前景色。"},{"name":"backgroundColor","type":"Color?","desc":"按钮的背景颜色。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时用于填充按钮的颜色。"},{"name":"hoverColor","type":"Color?","desc":"按钮有指针悬停在其上时用于填充按钮的颜色。"},{"name":"splashColor","type":"Color?","desc":"此 [FloatingActionButton] 的 [InkWell] 的飞溅颜色。"},{"name":"heroTag","type":"Object?","desc":"应用于按钮的 [Hero] 小部件的标签。"},{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用的回调。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"elevation","type":"double?","desc":"相对于其父级放置此按钮的 z 坐标。"},{"name":"focusElevation","type":"double?","desc":"按钮具有输入焦点时相对于其父级放置此按钮的 z 坐标。"},{"name":"hoverElevation","type":"double?","desc":"按钮启用且有指针悬停在其上时相对于其父级放置此按钮的 z 坐标。"},{"name":"highlightElevation","type":"double?","desc":"用户触摸按钮时相对于其父级放置此按钮的 z 坐标。"},{"name":"disabledElevation","type":"double?","desc":"按钮禁用时([onPressed] 为 null)放置此按钮的 z 坐标。"},{"name":"mini","type":"bool","required":true,"desc":"控制此按钮的大小。"},{"name":"shape","type":"ShapeBorder?","desc":"按钮的 [Material] 的形状。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"isExtended","type":"bool","required":true,"desc":"如果这是"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"配置点击目标的最小大小。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"extendedIconLabelSpacing","type":"double?","desc":"扩展 [FloatingActionButton] 的图标和标签之间的间距。"},{"name":"extendedPadding","type":"EdgeInsetsGeometry?","desc":"扩展 [FloatingActionButton] 内容的内边距。"},{"name":"extendedTextStyle","type":"TextStyle?","desc":"扩展 [FloatingActionButton] 标签的文本样式。"}],"id":28,"localName":"浮动按钮","lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FloatingActionButton点击事件","desc":["【child】: 子组件 【Widget】","【tooltip】: 长按时提示文字 【String】","【backgroundColor】: 背景色 【Color】","【foregroundColor】: 前景色 【Color】","【elevation】: 影深 【double】","【onPressed】: 点击事件 【Function】"]},{"file":"node2_mini.dart","name":"mini属性","desc":["【mini】: 是否是迷你 【bool】"]},{"file":"node3_shape.dart","name":"shape属性","desc":["【shape】: 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flow/Flow_en-US.json b/modules/widget_system/widgets/doc/widgets/Flow/Flow_en-US.json deleted file mode 100644 index ba199c7a1..000000000 --- a/modules/widget_system/widgets/doc/widgets/Flow/Flow_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Flow","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that sizes and positions children efficiently, according to the logic in a [FlowDelegate].","fields":[{"name":"delegate","type":"FlowDelegate","required":true,"desc":"The delegate that controls the transformation matrices of the children."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":99,"lever":5,"family":3,"linkIds":[98,94],"nodes":[{"file":"node_01.dart","name":"Flow Circular Arrangement","desc":["【children】: Component list 【List】","【delegate】: Agent 【FlowDelegate】"]},{"file":"node_02.dart","name":"Flow Circular with Animation","desc":["Achieve effects by changing the position of surrounding components through animation"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flow/Flow_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Flow/Flow_zh-CN.json deleted file mode 100644 index fa6bc2c94..000000000 --- a/modules/widget_system/widgets/doc/widgets/Flow/Flow_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Flow","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"根据 [FlowDelegate] 中的逻辑高效调整大小和定位子项的小部件。","fields":[{"name":"delegate","type":"FlowDelegate","required":true,"desc":"控制子项变换矩阵的委托。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":99,"localName":"流动布局","lever":5,"family":3,"linkIds":[98,94],"nodes":[{"file":"node_01.dart","name":"Flow圆形排布","desc":["【children】 : 组件列表 【List】","【delegate】 : 代理 【FlowDelegate】"]},{"file":"node_02.dart","name":"Flow圆形与动画结合","desc":["通过动画来更改周围组件的位置实现效果"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_en-US.json b/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_en-US.json deleted file mode 100644 index e3749e5b0..000000000 --- a/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FlutterLogo","path":"/src/widgets/flutter_logo.dart","parents":["StatelessWidget","Widget"],"desc":" The Flutter logo, in widget form. This widget respects the [IconTheme]. For guidelines on using the Flutter logo, visit https://flutter.dev/brand.","fields":[{"name":"size","type":"double?","desc":"The size of the logo in logical pixels."},{"name":"textColor","type":"Color","required":true,"desc":"The color used to paint the \"Flutter\" text on the logo, if [style] is [FlutterLogoStyle.horizontal] or [FlutterLogoStyle.stacked]."},{"name":"style","type":"FlutterLogoStyle","required":true,"desc":"Whether and where to draw the \"Flutter\" text. By default, only the logo itself is drawn."},{"name":"duration","type":"Duration","required":true,"desc":"The length of time for the animation if the [style] or [textColor] properties are changed."},{"name":"curve","type":"Curve","required":true,"desc":"The curve for the logo animation if the [style] or [textColor] change."}],"id":4,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Used to display a FlutterLogo","desc":["【size】 : Size 【double】","【colors】: Color 【MaterialColor】"]},{"file":"node2_style.dart","name":"Style used to display text","desc":["【style】 : Style - 3 types of enumeration 【FlutterLogoStyle】","【textColor】: Text color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_zh-CN.json deleted file mode 100644 index b5c0bf702..000000000 --- a/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FlutterLogo","path":"/src/widgets/flutter_logo.dart","parents":["StatelessWidget","Widget"],"desc":"小部件形式的 Flutter 标志。此小部件遵循 [IconTheme]。有关使用 Flutter 标志的指南,请访问 https://flutter.dev/brand。","fields":[{"name":"size","type":"double?","desc":"标志的逻辑像素大小。"},{"name":"textColor","type":"Color","required":true,"desc":"如果 [style] 是 [FlutterLogoStyle.horizontal] 或 [FlutterLogoStyle.stacked],用于绘制标志上"},{"name":"style","type":"FlutterLogoStyle","required":true,"desc":"是否以及在何处绘制"},{"name":"duration","type":"Duration","required":true,"desc":"如果 [style] 或 [textColor] 属性更改,动画的时长。"},{"name":"curve","type":"Curve","required":true,"desc":"如果 [style] 或 [textColor] 更改,标志动画的曲线。"}],"id":4,"localName":"Flutter图标","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"用于显示一个FlutterLogo","desc":["【size】 : 大小 【double】","【colors】: 颜色 【MaterialColor】"]},{"file":"node2_style.dart","name":"样式用于显示文字","desc":["【style】 : 样式-3种枚举 【FlutterLogoStyle】","【textColor】: 文字颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Focus/Focus_en-US.json b/modules/widget_system/widgets/doc/widgets/Focus/Focus_en-US.json deleted file mode 100644 index f0fc248c3..000000000 --- a/modules/widget_system/widgets/doc/widgets/Focus/Focus_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Focus","path":"/src/widgets/focus_scope.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that manages a [FocusNode] to allow keyboard focus to be given to this widget and its descendants.","fields":[{"name":"parentNode","type":"FocusNode?","desc":"The optional parent node to use when reparenting the [focusNode] for this [Focus] widget."},{"name":"child","type":"Widget","required":true,"desc":"The child widget of this [Focus]."},{"name":"focusNode","type":"FocusNode?","desc":"{@template flutter.widgets.Focus.focusNode} An optional focus node to use as the focus node for this widget."},{"name":"autofocus","type":"bool","required":true,"desc":"{@template flutter.widgets.Focus.autofocus} True if this widget will be selected as the initial focus when no other node in its scope is currently focused."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@template flutter.widgets.Focus.includeSemantics} Include semantics information in this widget."}],"id":282,"lever":5,"family":1,"linkIds":[283,284],"nodes":[{"file":"node1.dart","name":"FocusNode Focus and Blur","desc":["【focusNode】 : Focus 【FocusNode?】","【onFocusChange】 : Focus change listener 【ValueChanged?】","【child】 : Child widget 【Widget】"]},{"file":"node2.dart","name":"Auto Focus","desc":["【autofocus】 : Whether to auto focus 【bool】","The Flutter framework has built-in shortcuts for focus switching, such as ← and → for horizontal sliding lists to focus on the previous and next items respectively. The Tab key can focus on the next Focus node."]},{"file":"node3.dart","name":"Keyboard Event Callback","desc":["【onKeyEvent】 : Keyboard event callback 【FocusOnKeyEventCallback?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Focus/Focus_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Focus/Focus_zh-CN.json deleted file mode 100644 index 02f2ace25..000000000 --- a/modules/widget_system/widgets/doc/widgets/Focus/Focus_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Focus","path":"/src/widgets/focus_scope.dart","parents":["StatefulWidget","Widget"],"desc":"管理 [FocusNode] 以允许将键盘焦点给予此小部件及其后代的小部件。","fields":[{"name":"parentNode","type":"FocusNode?","desc":"为此 [Focus] 小部件重新设置 [focusNode] 父级时使用的可选父节点。"},{"name":"child","type":"Widget","required":true,"desc":"此 [Focus] 的子小部件。"},{"name":"focusNode","type":"FocusNode?","desc":"{@template flutter.widgets.Focus.focusNode} 用作此小部件焦点节点的可选焦点节点。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@template flutter.widgets.Focus.autofocus} 如果此小部件将在其范围内当前没有其他节点聚焦时被选为初始焦点,则为 true。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点更改时调用的处理程序。"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@template flutter.widgets.Focus.includeSemantics} 在此小部件中包含语义信息。"}],"id":282,"localName":"焦点组件","lever":5,"family":1,"linkIds":[283,284],"nodes":[{"file":"node1.dart","name":"FocusNode 聚焦与失焦","desc":["【focusNode】 : 焦点 【FocusNode?】","【onFocusChange】 : 焦点变化监听 【ValueChanged?】","【child】 : 子组件 【Widget】"]},{"file":"node2.dart","name":"自动聚焦","desc":["【autofocus】 : 是否自动聚焦 【bool】","Flutter 框架内置了焦点切换的快捷键,比如横向滑动的列表 ←、→ 分别让前项和后项聚焦。Tab 键可以让下一个 Focus 节点聚焦"]},{"file":"node3.dart","name":"键盘事件回调","desc":["【onKeyEvent】 : 键盘事件回调 【FocusOnKeyEventCallback?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_en-US.json b/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_en-US.json deleted file mode 100644 index dc18d05cc..000000000 --- a/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FocusScope","path":"/src/widgets/focus_scope.dart","parents":["Focus","StatefulWidget","Widget"],"desc":" A [FocusScope] is similar to a [Focus], but also serves as a scope for its descendants, restricting focus traversal to the scoped controls.","fields":[],"id":421,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_zh-CN.json deleted file mode 100644 index 9e7285b45..000000000 --- a/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FocusScope","path":"/src/widgets/focus_scope.dart","parents":["Focus","StatefulWidget","Widget"],"desc":"[FocusScope] 类似于 [Focus],但也作为其后代的范围,将焦点遍历限制为范围内的控件。","fields":[],"id":421,"localName":"FocusScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_en-US.json deleted file mode 100644 index 2786d575c..000000000 --- a/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FocusTraversalGroup","path":"/src/widgets/focus_traversal.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that describes the inherited focus policy for focus traversal for its descendants, grouping them into a separate traversal group.","fields":[{"name":"policy","type":"FocusTraversalPolicy","required":true,"desc":"The policy used to move the focus from one focus node to another when traversing them using a keyboard."},{"name":"descendantsAreFocusable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreFocusable}"},{"name":"descendantsAreTraversable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreTraversable}"},{"name":"child","type":"Widget","required":true,"desc":"The child widget of this [FocusTraversalGroup]."}],"id":422,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_zh-CN.json deleted file mode 100644 index 665445a13..000000000 --- a/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FocusTraversalGroup","path":"/src/widgets/focus_traversal.dart","parents":["StatefulWidget","Widget"],"desc":"描述其后代的继承焦点策略以进行焦点遍历的小部件,将它们分组到单独的遍历组中。","fields":[{"name":"policy","type":"FocusTraversalPolicy","required":true,"desc":"使用键盘遍历时用于将焦点从一个焦点节点移动到另一个焦点节点的策略。"},{"name":"descendantsAreFocusable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreFocusable}"},{"name":"descendantsAreTraversable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreTraversable}"},{"name":"child","type":"Widget","required":true,"desc":"此 [FocusTraversalGroup] 的子小部件。"}],"id":422,"localName":"FocusTraversalGroup","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_en-US.json b/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_en-US.json deleted file mode 100644 index 372519c83..000000000 --- a/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FocusTraversalOrder","path":"/src/widgets/focus_traversal.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that describes the order in which its child subtree should be traversed.","fields":[{"name":"order","type":"FocusOrder","required":true,"desc":"The order for the widget descendants of this [FocusTraversalOrder]."}],"id":423,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_zh-CN.json deleted file mode 100644 index e9e6d35b4..000000000 --- a/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FocusTraversalOrder","path":"/src/widgets/focus_traversal.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"描述其子子树应遍历顺序的继承小部件。","fields":[{"name":"order","type":"FocusOrder","required":true,"desc":"此 [FocusTraversalOrder] 的小部件后代的顺序。"}],"id":423,"localName":"FocusTraversalOrder","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_en-US.json b/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_en-US.json deleted file mode 100644 index f18c35738..000000000 --- a/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FocusableActionDetector","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that combines the functionality of [Actions], [Shortcuts], [MouseRegion] and a [Focus] widget to create a detector that defines actions and key bindings, and provides callbacks for handling focus and hover highlights.","fields":[{"name":"enabled","type":"bool","required":true,"desc":"Is this widget enabled or not."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"descendantsAreFocusable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreFocusable}"},{"name":"descendantsAreTraversable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreTraversable}"},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.actions.actions}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.shortcuts.shortcuts}"},{"name":"onShowFocusHighlight","type":"ValueChanged?","desc":"A function that will be called when the focus highlight should be shown or hidden."},{"name":"onShowHoverHighlight","type":"ValueChanged?","desc":"A function that will be called when the hover highlight should be shown or hidden."},{"name":"onFocusChange","type":"ValueChanged?","desc":"A function that will be called when the focus changes."},{"name":"mouseCursor","type":"MouseCursor","required":true,"desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"includeFocusSemantics","type":"bool","required":true,"desc":"Whether to include semantics from [Focus]."},{"name":"child","type":"Widget","required":true,"desc":"The child widget for this [FocusableActionDetector] widget."}],"id":424,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_zh-CN.json deleted file mode 100644 index 938fcbd67..000000000 --- a/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FocusableActionDetector","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":"结合 [Actions]、[Shortcuts]、[MouseRegion] 和 [Focus] 小部件功能的小部件,创建定义操作和键绑定的检测器,并提供处理焦点和悬停高亮的回调。","fields":[{"name":"enabled","type":"bool","required":true,"desc":"此小部件是否启用。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"descendantsAreFocusable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreFocusable}"},{"name":"descendantsAreTraversable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreTraversable}"},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.actions.actions}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.shortcuts.shortcuts}"},{"name":"onShowFocusHighlight","type":"ValueChanged?","desc":"当应显示或隐藏焦点高亮时将调用的函数。"},{"name":"onShowHoverHighlight","type":"ValueChanged?","desc":"当应显示或隐藏悬停高亮时将调用的函数。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点更改时将调用的函数。"},{"name":"mouseCursor","type":"MouseCursor","required":true,"desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"includeFocusSemantics","type":"bool","required":true,"desc":"是否包含来自 [Focus] 的语义。"},{"name":"child","type":"Widget","required":true,"desc":"此 [FocusableActionDetector] 小部件的子小部件。"}],"id":424,"localName":"FocusableActionDetector","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Form/Form_en-US.json b/modules/widget_system/widgets/doc/widgets/Form/Form_en-US.json deleted file mode 100644 index d6a18e717..000000000 --- a/modules/widget_system/widgets/doc/widgets/Form/Form_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Form","path":"/src/widgets/form.dart","parents":["StatefulWidget","Widget"],"desc":" An optional container for grouping together multiple form field widgets (e.g. [TextField] widgets).","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"onWillPop","type":"WillPopCallback?","desc":"Enables the form to veto attempts by the user to dismiss the [ModalRoute] that contains the form."},{"name":"canPop","type":"bool?","desc":"{@macro flutter.widgets.PopScope.canPop}"},{"name":"onPopInvoked","type":"PopInvokedCallback?","desc":"{@macro flutter.widgets.navigator.onPopInvokedWithResult}"},{"name":"onPopInvokedWithResult","type":"PopInvokedWithResultCallback?","desc":"{@macro flutter.widgets.navigator.onPopInvokedWithResult}"},{"name":"onChanged","type":"VoidCallback?","desc":"Called when one of the form fields changes."},{"name":"autovalidateMode","type":"AutovalidateMode","required":true,"desc":"Used to enable/disable form fields auto validation and update their error text."}],"id":198,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Form","desc":["【child】 : Child component 【Widget】","【onChanged】 : Form change callback 【VoidCallback】","【onWillPop】 : Return callback 【WillPopCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Form/Form_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Form/Form_zh-CN.json deleted file mode 100644 index d011d12eb..000000000 --- a/modules/widget_system/widgets/doc/widgets/Form/Form_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Form","path":"/src/widgets/form.dart","parents":["StatefulWidget","Widget"],"desc":"用于将多个表单字段小部件(例如 [TextField] 小部件)分组在一起的可选容器。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"onWillPop","type":"WillPopCallback?","desc":"使表单能够否决用户关闭包含表单的 [ModalRoute] 的尝试。"},{"name":"canPop","type":"bool?","desc":"{@macro flutter.widgets.PopScope.canPop}"},{"name":"onPopInvoked","type":"PopInvokedCallback?","desc":"{@macro flutter.widgets.navigator.onPopInvokedWithResult}"},{"name":"onPopInvokedWithResult","type":"PopInvokedWithResultCallback?","desc":"{@macro flutter.widgets.navigator.onPopInvokedWithResult}"},{"name":"onChanged","type":"VoidCallback?","desc":"表单字段之一更改时调用。"},{"name":"autovalidateMode","type":"AutovalidateMode","required":true,"desc":"用于启用/禁用表单字段自动验证并更新其错误文本。"}],"id":198,"localName":"表单组件","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Form基本使用","desc":["【child】 : 子组件 【Widget】","【onChanged】 : 表单变化回调 【VoidCallback】","【onWillPop】 : 返回回调 【WillPopCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FormField/FormField_en-US.json b/modules/widget_system/widgets/doc/widgets/FormField/FormField_en-US.json deleted file mode 100644 index d5db3021c..000000000 --- a/modules/widget_system/widgets/doc/widgets/FormField/FormField_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FormField","path":"/src/widgets/form.dart","parents":["StatefulWidget","Widget"],"desc":" A single form field.","fields":[{"name":"builder","type":"FormFieldBuilder","required":true,"desc":"Function that returns the widget representing this form field."},{"name":"onSaved","type":"FormFieldSetter?","desc":"An optional method to call with the final value when the form is saved via [FormState.save]."},{"name":"forceErrorText","type":"String?","desc":"An optional property that forces the [FormFieldState] into an error state by directly setting the [FormFieldState.errorText] property without running the validator function."},{"name":"validator","type":"FormFieldValidator?","desc":"An optional method that validates an input. Returns an error string to display if the input is invalid, or null otherwise."},{"name":"errorBuilder","type":"FormFieldErrorBuilder?","desc":"Function that returns the widget representing the error to display."},{"name":"initialValue","type":"T?","desc":"An optional value to initialize the form field to, or null otherwise."},{"name":"enabled","type":"bool","required":true,"desc":"Whether the form is able to receive user input."},{"name":"autovalidateMode","type":"AutovalidateMode","required":true,"desc":"Used to enable/disable this form field auto validation and update its error text."},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the form field."}],"id":222,"lever":2,"family":1,"linkIds":[198,199,223],"nodes":[{"file":"node1_base.dart","name":"FormField Introduction","desc":["【builder】 : Content builder 【FormFieldBuilder】","【initialValue】 : Initial value 【T】","【validator】 : Validation function 【FormFieldValidator】","【enabled】 : Whether it is enabled 【bool】","【onSaved】 : Callback when the form is saved 【FormFieldSetter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FormField/FormField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FormField/FormField_zh-CN.json deleted file mode 100644 index beb6e303d..000000000 --- a/modules/widget_system/widgets/doc/widgets/FormField/FormField_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FormField","path":"/src/widgets/form.dart","parents":["StatefulWidget","Widget"],"desc":"单个表单字段。","fields":[{"name":"builder","type":"FormFieldBuilder","required":true,"desc":"返回表示此表单字段的小部件的函数。"},{"name":"onSaved","type":"FormFieldSetter?","desc":"通过 [FormState.save] 保存表单时使用最终值调用的可选方法。"},{"name":"forceErrorText","type":"String?","desc":"通过直接设置 [FormFieldState.errorText] 属性而不运行验证器函数,强制 [FormFieldState] 进入错误状态的可选属性。"},{"name":"validator","type":"FormFieldValidator?","desc":"验证输入的可选方法。如果输入无效,则返回要显示的错误字符串,否则返回 null。"},{"name":"errorBuilder","type":"FormFieldErrorBuilder?","desc":"返回表示要显示的错误的小部件的函数。"},{"name":"initialValue","type":"T?","desc":"初始化表单字段的可选值,否则为 null。"},{"name":"enabled","type":"bool","required":true,"desc":"表单是否能够接收用户输入。"},{"name":"autovalidateMode","type":"AutovalidateMode","required":true,"desc":"用于启用/禁用此表单字段自动验证并更新其错误文本。"},{"name":"restorationId","type":"String?","desc":"保存和恢复表单字段状态的恢复 ID。"}],"id":222,"localName":"表单字段","lever":2,"family":1,"linkIds":[198,199,223],"nodes":[{"file":"node1_base.dart","name":"FormField 介绍","desc":["【builder】 : 内容构造器 【FormFieldBuilder】","【initialValue】 : 初始值 【T】","【validator】 : 验证函数 【FormFieldValidator 】","【enabled】 : 是否有效 【bool】","【onSaved】 : 表单save时回调 【FormFieldSetter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_en-US.json b/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_en-US.json deleted file mode 100644 index 92c8bd8d3..000000000 --- a/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FractionalTranslation","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Applies a translation transformation before painting its child.","fields":[{"name":"translation","type":"Offset","required":true,"desc":"The translation to apply to the child, scaled to the child's size."},{"name":"transformHitTests","type":"bool","required":true,"desc":"Whether to apply the translation when performing hit tests."}],"id":263,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FractionalTranslation","desc":["【translation】: Offset fraction value 【Offset】","【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_zh-CN.json deleted file mode 100644 index aeaa7eee2..000000000 --- a/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FractionalTranslation","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在绘制其子项之前应用平移变换。","fields":[{"name":"translation","type":"Offset","required":true,"desc":"应用于子项的平移,按子项的大小缩放。"},{"name":"transformHitTests","type":"bool","required":true,"desc":"执行命中测试时是否应用平移。"}],"id":263,"localName":"分度偏移","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FractionalTranslation基本使用","desc":["【translation】 : 偏移分度值 【Offset】","【child】: 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_en-US.json deleted file mode 100644 index 4008ae74f..000000000 --- a/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FractionallySizedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that sizes its child to a fraction of the total available space. For more details about the layout algorithm, see [RenderFractionallySizedOverflowBox].","fields":[{"name":"widthFactor","type":"double?","desc":"{@template flutter.widgets.basic.fractionallySizedBox.widthFactor} If non-null, the fraction of the incoming width given to the child."},{"name":"heightFactor","type":"double?","desc":"{@template flutter.widgets.basic.fractionallySizedBox.heightFactor} If non-null, the fraction of the incoming height given to the child."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"{@template flutter.widgets.basic.fractionallySizedBox.alignment} How to align the child."}],"id":82,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FractionallySizedBox","desc":["【child】 : Child component 【Widget】","【widthFactor】 : Width fraction 【double】","【heightFactor】 : Height fraction 【double】","【alignment】 : Alignment 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_zh-CN.json deleted file mode 100644 index 1d52eb73a..000000000 --- a/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FractionallySizedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项大小调整为总可用空间的一部分的小部件。有关布局算法的更多详细信息,请参阅 [RenderFractionallySizedOverflowBox]。","fields":[{"name":"widthFactor","type":"double?","desc":"{@template flutter.widgets.basic.fractionallySizedBox.widthFactor} 如果非空,给予子项的传入宽度的分数。"},{"name":"heightFactor","type":"double?","desc":"{@template flutter.widgets.basic.fractionallySizedBox.heightFactor} 如果非空,给予子项的传入高度的分数。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"{@template flutter.widgets.basic.fractionallySizedBox.alignment} 如何对齐子项。"}],"id":82,"localName":"分率盒","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FractionallySizedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【widthFactor】 : 宽分率 【double】","【heightFactor】 : 高分率 【double】","【alignment】 : 对齐方式 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_en-US.json deleted file mode 100644 index 4067e47a4..000000000 --- a/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FutureBuilder","path":"/src/widgets/async.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that builds itself based on the latest snapshot of interaction with a [Future].","fields":[{"name":"future","type":"Future?","desc":"The asynchronous computation to which this builder is currently connected, possibly null."},{"name":"builder","type":"AsyncWidgetBuilder","required":true,"desc":"The build strategy currently used by this builder."},{"name":"initialData","type":"T?","desc":"The data that will be used to create the snapshots provided until a non-null [future] has completed."}],"id":172,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FutureBuilder","desc":["【builder】 : Subcomponent 【AsyncWidgetBuilder】","【initialData】 : Initial Data 【T】","【future】 : Asynchronous Task 【Future】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_zh-CN.json deleted file mode 100644 index 4eb6d1dae..000000000 --- a/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FutureBuilder","path":"/src/widgets/async.dart","parents":["StatefulWidget","Widget"],"desc":"基于与 [Future] 交互的最新快照构建自身的小部件。","fields":[{"name":"future","type":"Future?","desc":"此构建器当前连接的异步计算,可能为 null。"},{"name":"builder","type":"AsyncWidgetBuilder","required":true,"desc":"此构建器当前使用的构建策略。"},{"name":"initialData","type":"T?","desc":"将用于创建快照的数据,直到非空 [future] 完成。"}],"id":172,"localName":"异步构造器","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FutureBuilder基本使用","desc":["【builder】 : 子组件 【AsyncWidgetBuilder】","【initialData】 : 初始数据 【T】","【future】 : 异步任务 【Future】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_en-US.json b/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_en-US.json deleted file mode 100644 index ec3f923eb..000000000 --- a/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GestureDetector","path":"/src/widgets/gesture_detector.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that detects gestures.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"onTapDown","type":"GestureTapDownCallback?","desc":"A pointer that might cause a tap with a primary button has contacted the screen at a particular location."},{"name":"onTapUp","type":"GestureTapUpCallback?","desc":"A pointer that will trigger a tap with a primary button has stopped contacting the screen at a particular location."},{"name":"onTap","type":"GestureTapCallback?","desc":"A tap with a primary button has occurred."},{"name":"onTapMove","type":"GestureTapMoveCallback?","desc":"A pointer that triggered a tap has moved."},{"name":"onTapCancel","type":"GestureTapCancelCallback?","desc":"The pointer that previously triggered [onTapDown] will not end up causing a tap."},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"A tap with a secondary button has occurred."},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"A pointer that might cause a tap with a secondary button has contacted the screen at a particular location."},{"name":"onSecondaryTapUp","type":"GestureTapUpCallback?","desc":"A pointer that will trigger a tap with a secondary button has stopped contacting the screen at a particular location."},{"name":"onSecondaryTapCancel","type":"GestureTapCancelCallback?","desc":"The pointer that previously triggered [onSecondaryTapDown] will not end up causing a tap."},{"name":"onTertiaryTapDown","type":"GestureTapDownCallback?","desc":"A pointer that might cause a tap with a tertiary button has contacted the screen at a particular location."},{"name":"onTertiaryTapUp","type":"GestureTapUpCallback?","desc":"A pointer that will trigger a tap with a tertiary button has stopped contacting the screen at a particular location."},{"name":"onTertiaryTapCancel","type":"GestureTapCancelCallback?","desc":"The pointer that previously triggered [onTertiaryTapDown] will not end up causing a tap."},{"name":"onDoubleTapDown","type":"GestureTapDownCallback?","desc":"A pointer that might cause a double tap has contacted the screen at a particular location."},{"name":"onDoubleTap","type":"GestureTapCallback?","desc":"The user has tapped the screen with a primary button at the same location twice in quick succession."},{"name":"onDoubleTapCancel","type":"GestureTapCancelCallback?","desc":"The pointer that previously triggered [onDoubleTapDown] will not end up causing a double tap."},{"name":"onLongPressDown","type":"GestureLongPressDownCallback?","desc":"The pointer has contacted the screen with a primary button, which might be the start of a long-press."},{"name":"onLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"A pointer that previously triggered [onLongPressDown] will not end up causing a long-press."},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"Called when a long press gesture with a primary button has been recognized."},{"name":"onLongPressStart","type":"GestureLongPressStartCallback?","desc":"Called when a long press gesture with a primary button has been recognized."},{"name":"onLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"A pointer has been drag-moved after a long-press with a primary button."},{"name":"onLongPressUp","type":"GestureLongPressUpCallback?","desc":"A pointer that has triggered a long-press with a primary button has stopped contacting the screen."},{"name":"onLongPressEnd","type":"GestureLongPressEndCallback?","desc":"A pointer that has triggered a long-press with a primary button has stopped contacting the screen."},{"name":"onSecondaryLongPressDown","type":"GestureLongPressDownCallback?","desc":"The pointer has contacted the screen with a secondary button, which might be the start of a long-press."},{"name":"onSecondaryLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"A pointer that previously triggered [onSecondaryLongPressDown] will not end up causing a long-press."},{"name":"onSecondaryLongPress","type":"GestureLongPressCallback?","desc":"Called when a long press gesture with a secondary button has been recognized."},{"name":"onSecondaryLongPressStart","type":"GestureLongPressStartCallback?","desc":"Called when a long press gesture with a secondary button has been recognized."},{"name":"onSecondaryLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"A pointer has been drag-moved after a long press with a secondary button."},{"name":"onSecondaryLongPressUp","type":"GestureLongPressUpCallback?","desc":"A pointer that has triggered a long-press with a secondary button has stopped contacting the screen."},{"name":"onSecondaryLongPressEnd","type":"GestureLongPressEndCallback?","desc":"A pointer that has triggered a long-press with a secondary button has stopped contacting the screen."},{"name":"onTertiaryLongPressDown","type":"GestureLongPressDownCallback?","desc":"The pointer has contacted the screen with a tertiary button, which might be the start of a long-press."},{"name":"onTertiaryLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"A pointer that previously triggered [onTertiaryLongPressDown] will not end up causing a long-press."},{"name":"onTertiaryLongPress","type":"GestureLongPressCallback?","desc":"Called when a long press gesture with a tertiary button has been recognized."},{"name":"onTertiaryLongPressStart","type":"GestureLongPressStartCallback?","desc":"Called when a long press gesture with a tertiary button has been recognized."},{"name":"onTertiaryLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"A pointer has been drag-moved after a long press with a tertiary button."},{"name":"onTertiaryLongPressUp","type":"GestureLongPressUpCallback?","desc":"A pointer that has triggered a long-press with a tertiary button has stopped contacting the screen."},{"name":"onTertiaryLongPressEnd","type":"GestureLongPressEndCallback?","desc":"A pointer that has triggered a long-press with a tertiary button has stopped contacting the screen."},{"name":"onVerticalDragDown","type":"GestureDragDownCallback?","desc":"A pointer has contacted the screen with a primary button and might begin to move vertically."},{"name":"onVerticalDragStart","type":"GestureDragStartCallback?","desc":"A pointer has contacted the screen with a primary button and has begun to move vertically."},{"name":"onVerticalDragUpdate","type":"GestureDragUpdateCallback?","desc":"A pointer that is in contact with the screen with a primary button and moving vertically has moved in the vertical direction."},{"name":"onVerticalDragEnd","type":"GestureDragEndCallback?","desc":"A pointer that was previously in contact with the screen with a primary button and moving vertically is no longer in contact with the screen and was moving at a specific velocity when it stopped contacting the screen."},{"name":"onVerticalDragCancel","type":"GestureDragCancelCallback?","desc":"The pointer that previously triggered [onVerticalDragDown] did not complete."},{"name":"onHorizontalDragDown","type":"GestureDragDownCallback?","desc":"A pointer has contacted the screen with a primary button and might begin to move horizontally."},{"name":"onHorizontalDragStart","type":"GestureDragStartCallback?","desc":"A pointer has contacted the screen with a primary button and has begun to move horizontally."},{"name":"onHorizontalDragUpdate","type":"GestureDragUpdateCallback?","desc":"A pointer that is in contact with the screen with a primary button and moving horizontally has moved in the horizontal direction."},{"name":"onHorizontalDragEnd","type":"GestureDragEndCallback?","desc":"A pointer that was previously in contact with the screen with a primary button and moving horizontally is no longer in contact with the screen and was moving at a specific velocity when it stopped contacting the screen."},{"name":"onHorizontalDragCancel","type":"GestureDragCancelCallback?","desc":"The pointer that previously triggered [onHorizontalDragDown] did not complete."},{"name":"onPanDown","type":"GestureDragDownCallback?","desc":"A pointer has contacted the screen with a primary button and might begin to move."},{"name":"onPanStart","type":"GestureDragStartCallback?","desc":"A pointer has contacted the screen with a primary button and has begun to move."},{"name":"onPanUpdate","type":"GestureDragUpdateCallback?","desc":"A pointer that is in contact with the screen with a primary button and moving has moved again."},{"name":"onPanEnd","type":"GestureDragEndCallback?","desc":"A pointer that was previously in contact with the screen with a primary button and moving is no longer in contact with the screen and was moving at a specific velocity when it stopped contacting the screen."},{"name":"onPanCancel","type":"GestureDragCancelCallback?","desc":"The pointer that previously triggered [onPanDown] did not complete."},{"name":"onScaleStart","type":"GestureScaleStartCallback?","desc":"The pointers in contact with the screen have established a focal point and initial scale of 1.0."},{"name":"onScaleUpdate","type":"GestureScaleUpdateCallback?","desc":"The pointers in contact with the screen have indicated a new focal point and/or scale."},{"name":"onScaleEnd","type":"GestureScaleEndCallback?","desc":"The pointers are no longer in contact with the screen."},{"name":"onForcePressStart","type":"GestureForcePressStartCallback?","desc":"The pointer is in contact with the screen and has pressed with sufficient force to initiate a force press. The amount of force is at least [ForcePressGestureRecognizer.startPressure]."},{"name":"onForcePressPeak","type":"GestureForcePressPeakCallback?","desc":"The pointer is in contact with the screen and has pressed with the maximum force. The amount of force is at least [ForcePressGestureRecognizer.peakPressure]."},{"name":"onForcePressUpdate","type":"GestureForcePressUpdateCallback?","desc":"A pointer is in contact with the screen, has previously passed the [ForcePressGestureRecognizer.startPressure] and is either moving on the plane of the screen, pressing the screen with varying forces or both simultaneously."},{"name":"onForcePressEnd","type":"GestureForcePressEndCallback?","desc":"The pointer tracked by [onForcePressStart] is no longer in contact with the screen."},{"name":"behavior","type":"HitTestBehavior?","desc":"How this gesture detector should behave during hit testing when deciding how the hit test propagates to children and whether to consider targets behind this one."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"Whether to exclude these gestures from the semantics tree. For example, the long-press gesture for showing a tooltip is excluded because the tooltip itself is included in the semantics tree directly and so having a gesture to show it would result in duplication of information."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"Determines the way that drag start behavior is handled."},{"name":"supportedDevices","type":"Set?","desc":"The kind of devices that are allowed to be recognized."},{"name":"trackpadScrollCausesScale","type":"bool","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollCausesScale}"},{"name":"trackpadScrollToScaleFactor","type":"Offset","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollToScaleFactor}"}],"id":146,"lever":5,"family":0,"linkIds":[147,150],"nodes":[{"file":"node1_base.dart","name":"Basic Events of GestureDetector","desc":["【child】 : Child component 【Widget】","【onTap】 : Tap event 【Function()】","【onDoubleTap】 : Double tap event 【GestureTapCallback】","【onLongPress】 : Long press event 【GestureLongPressCallback】"]},{"file":"node2_tap.dart","name":"Details of GestureDetector","desc":["【onTapDown】 : Press down callback 【GestureTapDownCallback】","【onTapUp】 : Tap release callback 【GestureTapUpCallback】","【onTapCancel】 : Tap cancel 【GestureTapCancelCallback】"]},{"file":"node3_pan.dart","name":"Pan Events of GestureDetector","desc":["【onPanDown】 : Press down callback 【GestureDragDownCallback】","【onPanEnd】 : Drag end 【GestureDragEndCallback】","【onPanStart】 : Drag start 【GestureDragStartCallback】","【onPanUpdate】 : Drag update 【GestureDragUpdateCallback】","【onPanCancel】 : Drag cancel 【GestureDragCancelCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_zh-CN.json deleted file mode 100644 index 6361c84f2..000000000 --- a/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GestureDetector","path":"/src/widgets/gesture_detector.dart","parents":["StatelessWidget","Widget"],"desc":"检测手势的小部件。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"onTapDown","type":"GestureTapDownCallback?","desc":"可能导致主按钮点击的指针已在特定位置接触屏幕。"},{"name":"onTapUp","type":"GestureTapUpCallback?","desc":"将触发主按钮点击的指针已在特定位置停止接触屏幕。"},{"name":"onTap","type":"GestureTapCallback?","desc":"发生了主按钮点击。"},{"name":"onTapMove","type":"GestureTapMoveCallback?","desc":"触发点击的指针已移动。"},{"name":"onTapCancel","type":"GestureTapCancelCallback?","desc":"先前触发 [onTapDown] 的指针不会最终导致点击。"},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"发生了辅助按钮点击。"},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"可能导致辅助按钮点击的指针已在特定位置接触屏幕。"},{"name":"onSecondaryTapUp","type":"GestureTapUpCallback?","desc":"将触发辅助按钮点击的指针已在特定位置停止接触屏幕。"},{"name":"onSecondaryTapCancel","type":"GestureTapCancelCallback?","desc":"先前触发 [onSecondaryTapDown] 的指针不会最终导致点击。"},{"name":"onTertiaryTapDown","type":"GestureTapDownCallback?","desc":"可能导致第三按钮点击的指针已在特定位置接触屏幕。"},{"name":"onTertiaryTapUp","type":"GestureTapUpCallback?","desc":"将触发第三按钮点击的指针已在特定位置停止接触屏幕。"},{"name":"onTertiaryTapCancel","type":"GestureTapCancelCallback?","desc":"先前触发 [onTertiaryTapDown] 的指针不会最终导致点击。"},{"name":"onDoubleTapDown","type":"GestureTapDownCallback?","desc":"可能导致双击的指针已在特定位置接触屏幕。"},{"name":"onDoubleTap","type":"GestureTapCallback?","desc":"用户在同一位置快速连续用主按钮点击屏幕两次。"},{"name":"onDoubleTapCancel","type":"GestureTapCancelCallback?","desc":"先前触发 [onDoubleTapDown] 的指针不会最终导致双击。"},{"name":"onLongPressDown","type":"GestureLongPressDownCallback?","desc":"指针已用主按钮接触屏幕,这可能是长按的开始。"},{"name":"onLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"先前触发 [onLongPressDown] 的指针不会最终导致长按。"},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"识别到主按钮长按手势时调用。"},{"name":"onLongPressStart","type":"GestureLongPressStartCallback?","desc":"识别到主按钮长按手势时调用。"},{"name":"onLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"指针在主按钮长按后被拖动移动。"},{"name":"onLongPressUp","type":"GestureLongPressUpCallback?","desc":"触发主按钮长按的指针已停止接触屏幕。"},{"name":"onLongPressEnd","type":"GestureLongPressEndCallback?","desc":"触发主按钮长按的指针已停止接触屏幕。"},{"name":"onSecondaryLongPressDown","type":"GestureLongPressDownCallback?","desc":"指针已用辅助按钮接触屏幕,这可能是长按的开始。"},{"name":"onSecondaryLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"先前触发 [onSecondaryLongPressDown] 的指针不会最终导致长按。"},{"name":"onSecondaryLongPress","type":"GestureLongPressCallback?","desc":"识别到辅助按钮长按手势时调用。"},{"name":"onSecondaryLongPressStart","type":"GestureLongPressStartCallback?","desc":"识别到辅助按钮长按手势时调用。"},{"name":"onSecondaryLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"指针在辅助按钮长按后被拖动移动。"},{"name":"onSecondaryLongPressUp","type":"GestureLongPressUpCallback?","desc":"触发辅助按钮长按的指针已停止接触屏幕。"},{"name":"onSecondaryLongPressEnd","type":"GestureLongPressEndCallback?","desc":"触发辅助按钮长按的指针已停止接触屏幕。"},{"name":"onTertiaryLongPressDown","type":"GestureLongPressDownCallback?","desc":"指针已用第三按钮接触屏幕,这可能是长按的开始。"},{"name":"onTertiaryLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"先前触发 [onTertiaryLongPressDown] 的指针不会最终导致长按。"},{"name":"onTertiaryLongPress","type":"GestureLongPressCallback?","desc":"识别到第三按钮长按手势时调用。"},{"name":"onTertiaryLongPressStart","type":"GestureLongPressStartCallback?","desc":"识别到第三按钮长按手势时调用。"},{"name":"onTertiaryLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"指针在第三按钮长按后被拖动移动。"},{"name":"onTertiaryLongPressUp","type":"GestureLongPressUpCallback?","desc":"触发第三按钮长按的指针已停止接触屏幕。"},{"name":"onTertiaryLongPressEnd","type":"GestureLongPressEndCallback?","desc":"触发第三按钮长按的指针已停止接触屏幕。"},{"name":"onVerticalDragDown","type":"GestureDragDownCallback?","desc":"指针已用主按钮接触屏幕,可能开始垂直移动。"},{"name":"onVerticalDragStart","type":"GestureDragStartCallback?","desc":"指针已用主按钮接触屏幕并开始垂直移动。"},{"name":"onVerticalDragUpdate","type":"GestureDragUpdateCallback?","desc":"与屏幕接触的主按钮指针垂直移动,已在垂直方向上移动。"},{"name":"onVerticalDragEnd","type":"GestureDragEndCallback?","desc":"先前与屏幕接触的主按钮指针垂直移动,不再与屏幕接触,并在停止接触屏幕时以特定速度移动。"},{"name":"onVerticalDragCancel","type":"GestureDragCancelCallback?","desc":"先前触发 [onVerticalDragDown] 的指针未完成。"},{"name":"onHorizontalDragDown","type":"GestureDragDownCallback?","desc":"指针已用主按钮接触屏幕,可能开始水平移动。"},{"name":"onHorizontalDragStart","type":"GestureDragStartCallback?","desc":"指针已用主按钮接触屏幕并开始水平移动。"},{"name":"onHorizontalDragUpdate","type":"GestureDragUpdateCallback?","desc":"与屏幕接触的主按钮指针水平移动,已在水平方向上移动。"},{"name":"onHorizontalDragEnd","type":"GestureDragEndCallback?","desc":"先前与屏幕接触的主按钮指针水平移动,不再与屏幕接触,并在停止接触屏幕时以特定速度移动。"},{"name":"onHorizontalDragCancel","type":"GestureDragCancelCallback?","desc":"先前触发 [onHorizontalDragDown] 的指针未完成。"},{"name":"onPanDown","type":"GestureDragDownCallback?","desc":"指针已用主按钮接触屏幕,可能开始移动。"},{"name":"onPanStart","type":"GestureDragStartCallback?","desc":"指针已用主按钮接触屏幕并开始移动。"},{"name":"onPanUpdate","type":"GestureDragUpdateCallback?","desc":"与屏幕接触的主按钮指针移动,已再次移动。"},{"name":"onPanEnd","type":"GestureDragEndCallback?","desc":"先前与屏幕接触的主按钮指针移动,不再与屏幕接触,并在停止接触屏幕时以特定速度移动。"},{"name":"onPanCancel","type":"GestureDragCancelCallback?","desc":"先前触发 [onPanDown] 的指针未完成。"},{"name":"onScaleStart","type":"GestureScaleStartCallback?","desc":"与屏幕接触的指针已建立焦点并初始比例为 1.0。"},{"name":"onScaleUpdate","type":"GestureScaleUpdateCallback?","desc":"与屏幕接触的指针已指示新的焦点和/或比例。"},{"name":"onScaleEnd","type":"GestureScaleEndCallback?","desc":"指针不再与屏幕接触。"},{"name":"onForcePressStart","type":"GestureForcePressStartCallback?","desc":"指针与屏幕接触并以足够的力按下以启动力按。力量至少为 [ForcePressGestureRecognizer.startPressure]。"},{"name":"onForcePressPeak","type":"GestureForcePressPeakCallback?","desc":"指针与屏幕接触并以最大力按下。力量至少为 [ForcePressGestureRecognizer.peakPressure]。"},{"name":"onForcePressUpdate","type":"GestureForcePressUpdateCallback?","desc":"指针与屏幕接触,先前已通过 [ForcePressGestureRecognizer.startPressure],并且正在屏幕平面上移动、以不同力量按压屏幕或两者同时进行。"},{"name":"onForcePressEnd","type":"GestureForcePressEndCallback?","desc":"[onForcePressStart] 跟踪的指针不再与屏幕接触。"},{"name":"behavior","type":"HitTestBehavior?","desc":"此手势检测器在命中测试期间应如何表现,决定命中测试如何传播到子项以及是否考虑此项后面的目标。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"是否从语义树中排除这些手势。例如,显示工具提示的长按手势被排除,因为工具提示本身直接包含在语义树中,因此有显示它的手势会导致信息重复。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"确定拖动开始行为的处理方式。"},{"name":"supportedDevices","type":"Set?","desc":"允许识别的设备类型。"},{"name":"trackpadScrollCausesScale","type":"bool","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollCausesScale}"},{"name":"trackpadScrollToScaleFactor","type":"Offset","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollToScaleFactor}"}],"id":146,"localName":"手势监听器","lever":5,"family":0,"linkIds":[147,150],"nodes":[{"file":"node1_base.dart","name":"GestureDetector基本事件","desc":["【child】 : 子组件 【Widget】","【onTap】 : 点击事件 【Function()】","【onDoubleTap】 : 双击事件 【GestureTapCallback】","【onLongPress】 : 长按事件 【GestureLongPressCallback】"]},{"file":"node2_tap.dart","name":"GestureDetector详情信息","desc":["【onTapDown】 : 按下回调 【GestureTapDownCallback】","【onTapUp】 : 点击抬起回调 【GestureTapUpCallback】","【onTapCancel】 : 点击取消 【GestureTapCancelCallback】"]},{"file":"node3_pan.dart","name":"GestureDetector的Pan事件","desc":["【onPanDown】 : 按下回调 【GestureDragDownCallback】","【onPanEnd】 : 拖动结束 【GestureDragEndCallback】","【onPanStart】 : 开始拖动 【GestureDragStartCallback】","【onPanUpdate】 : 拖动更新 【GestureDragUpdateCallback】","【onPanCancel】 : 拖动取消 【GestureDragCancelCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_en-US.json deleted file mode 100644 index 4c2cf34ff..000000000 --- a/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GlowingOverscrollIndicator","path":"/src/widgets/overscroll_indicator.dart","parents":["StatefulWidget","Widget"],"desc":" A visual indication that a scroll view has overscrolled.","fields":[{"name":"showLeading","type":"bool","required":true,"desc":"Whether to show the overscroll glow on the side with negative scroll offsets."},{"name":"showTrailing","type":"bool","required":true,"desc":"Whether to show the overscroll glow on the side with positive scroll offsets."},{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@template flutter.overscroll.axisDirection} The direction of positive scroll offsets in the [Scrollable] whose overscrolls are to be visualized. {@endtemplate}"},{"name":"color","type":"Color","required":true,"desc":"The color of the glow. The alpha channel is ignored."},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@template flutter.overscroll.notificationPredicate} A check that specifies whether a [ScrollNotification] should be handled by this widget."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":250,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage","desc":["【showLeading】: Whether the header is active 【bool】","【showTrailing】: Whether the footer is active 【bool】","【axisDirection】: Axis direction 【AxisDirection】","【color】: Color 【Color】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_zh-CN.json deleted file mode 100644 index 6bcd134ea..000000000 --- a/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GlowingOverscrollIndicator","path":"/src/widgets/overscroll_indicator.dart","parents":["StatefulWidget","Widget"],"desc":"滚动视图已过度滚动的视觉指示。","fields":[{"name":"showLeading","type":"bool","required":true,"desc":"是否在负滚动偏移的一侧显示过度滚动发光。"},{"name":"showTrailing","type":"bool","required":true,"desc":"是否在正滚动偏移的一侧显示过度滚动发光。"},{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@template flutter.overscroll.axisDirection} 要可视化其过度滚动的 [Scrollable] 中正滚动偏移的方向。{@endtemplate}"},{"name":"color","type":"Color","required":true,"desc":"发光的颜色。忽略 alpha 通道。"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@template flutter.overscroll.notificationPredicate} 指定此小部件是否应处理 [ScrollNotification] 的检查。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":250,"localName":"滑动越域指示器","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"基本使用","desc":["【showLeading】 : 头部是否生效 【bool】","【showTrailing】 : 底部是否生效 【bool】","【axisDirection】 : 轴向 【AxisDirection】","【color】 : 颜色 【Color】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_en-US.json b/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_en-US.json deleted file mode 100644 index d13daa118..000000000 --- a/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GridPaper","path":"/src/widgets/grid_paper.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that draws a rectilinear grid of lines one pixel wide.","fields":[{"name":"color","type":"Color","required":true,"desc":"The color to draw the lines in the grid."},{"name":"interval","type":"double","required":true,"desc":"The distance between the primary lines in the grid, in logical pixels."},{"name":"divisions","type":"int","required":true,"desc":"The number of major divisions within each primary grid cell."},{"name":"subdivisions","type":"int","required":true,"desc":"The number of minor divisions within each major division, including the major division itself."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":37,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"GridPager Basic Properties","desc":["【child】: Child component 【Widget】","【color】: Color 【Color】","【interval】: Small block side length 【double】"]},{"file":"node2_divisions.dart","name":"GridPager Subdivision","desc":["【child】: Child component 【Widget】","【color】: Color 【Color】","【subdivisions】: Number of sub-blocks in a small block 【int】","【divisions】: Number of subdivisions of sub-blocks in a small block 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_zh-CN.json deleted file mode 100644 index 20a57b9cc..000000000 --- a/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GridPaper","path":"/src/widgets/grid_paper.dart","parents":["StatelessWidget","Widget"],"desc":"绘制一像素宽的直线网格的小部件。","fields":[{"name":"color","type":"Color","required":true,"desc":"绘制网格中线条的颜色。"},{"name":"interval","type":"double","required":true,"desc":"网格中主要线条之间的距离,以逻辑像素为单位。"},{"name":"divisions","type":"int","required":true,"desc":"每个主要网格单元内的主要分割数。"},{"name":"subdivisions","type":"int","required":true,"desc":"每个主要分割内的次要分割数,包括主要分割本身。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":37,"localName":"网格线组件","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"GridPager 基础属性","desc":["【child】: 子组件 【Widget】","【color】: 颜色 【Color】","【interval】: 小块边长 【double】"]},{"file":"node2_divisions.dart","name":"GridPager 再分割","desc":["【child】: 子组件 【Widget】","【color】: 颜色 【Color】","【subdivisions】: 小块中子块个数 【int】","【divisions】: 小块中子块的分割数 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_en-US.json b/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_en-US.json deleted file mode 100644 index 45dd360c3..000000000 --- a/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GridTile","path":"/src/material/grid_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A tile in a Material Design grid list.","fields":[{"name":"header","type":"Widget?","desc":"The widget to show over the top of this grid tile."},{"name":"footer","type":"Widget?","desc":"The widget to show over the bottom of this grid tile."},{"name":"child","type":"Widget","required":true,"desc":"The widget that fills the tile."}],"id":21,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"The basic representation of GridTile is as follows","desc":["【header】: Header component 【Widget】","【child】: Child component 【Widget】","【footer】: Footer component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_zh-CN.json deleted file mode 100644 index 652e69eb5..000000000 --- a/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GridTile","path":"/src/material/grid_tile.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 网格列表中的磁贴。","fields":[{"name":"header","type":"Widget?","desc":"显示在此网格磁贴顶部的小部件。"},{"name":"footer","type":"Widget?","desc":"显示在此网格磁贴底部的小部件。"},{"name":"child","type":"Widget","required":true,"desc":"填充磁贴的小部件。"}],"id":21,"localName":"网格瓦片","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"GridTile的基本表现如下","desc":["【header】: 头组件 【Widget】","【child】: 子组件 【Widget】","【footer】: 脚组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_en-US.json b/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_en-US.json deleted file mode 100644 index 0d9f02560..000000000 --- a/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GridTileBar","path":"/src/material/grid_tile_bar.dart","parents":["StatelessWidget","Widget"],"desc":" A header used in a Material Design [GridTile].","fields":[{"name":"backgroundColor","type":"Color?","desc":"The color to paint behind the child widgets."},{"name":"leading","type":"Widget?","desc":"A widget to display before the title."},{"name":"title","type":"Widget?","desc":"The primary content of the list item."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"trailing","type":"Widget?","desc":"A widget to display after the title."}],"id":20,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"The basic representation of GridTileBar is as follows","desc":["【leading】: Left component 【Widget】","【trailing】: Trailing component 【Widget】","【title】: Top middle component 【Widget】","【subtitle】: Bottom middle component 【Widget】","【backgroundColor】: Background color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_zh-CN.json deleted file mode 100644 index 3a7ba73f4..000000000 --- a/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GridTileBar","path":"/src/material/grid_tile_bar.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design [GridTile] 中使用的标题。","fields":[{"name":"backgroundColor","type":"Color?","desc":"在子小部件后面绘制的颜色。"},{"name":"leading","type":"Widget?","desc":"在标题前显示的小部件。"},{"name":"title","type":"Widget?","desc":"列表项的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"trailing","type":"Widget?","desc":"在标题后显示的小部件。"}],"id":20,"localName":"网格瓦片头","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"GridTileBar的基本表现如下","desc":["【leading】: 左侧组件 【Widget】","【trailing】: 尾组件 【Widget】","【title】: 中间上组件 【Widget】","【subtitle】: 中间下组件 【Widget】","【backgroundColor】: 背景色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridView/GridView_en-US.json b/modules/widget_system/widgets/doc/widgets/GridView/GridView_en-US.json deleted file mode 100644 index a4fe22453..000000000 --- a/modules/widget_system/widgets/doc/widgets/GridView/GridView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GridView","path":"/src/widgets/scroll_view.dart","parents":["BoxScrollView","ScrollView","StatelessWidget","Widget"],"desc":" A scrollable, 2D array of widgets.","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"A delegate that controls the layout of the children within the [GridView]."},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"A delegate that provides the children for the [GridView]."}],"id":163,"lever":5,"family":0,"linkIds":[21,162],"nodes":[{"file":"node1_base.dart","name":"GridView.count Construction","desc":["【children】 : List of child components 【List】","【crossAxisCount】 : Number of boxes per row on the main axis 【int】","【mainAxisSpacing】 : Spacing between rows on the main axis 【double】","【crossAxisSpacing】 : Spacing between rows on the cross axis 【double】","【childAspectRatio】 : Main length/cross length of the box 【double】","【crossAxisCount】 : Number of boxes per row on the main axis 【int】"]},{"file":"node2_direction.dart","name":"GridView Scroll Direction","desc":["【scrollDirection】 : Scroll direction 【Axis】","【reverse】 : Whether to scroll in reverse 【bool】","【shrinkWrap】 : Whether to wrap when there is no boundary 【bool】"]},{"file":"node3_extend.dart","name":"GridView Scroll Direction","desc":["【scrollDirection】 : Scroll direction 【Axis】","【reverse】 : Whether to scroll in reverse 【bool】","【shrinkWrap】 : Whether to wrap when there is no boundary 【bool】"]},{"file":"node4_builder.dart","name":"GridView.builder Construction","desc":["【itemCount】 : Number of items 【int】","【gridDelegate】 : Grid delegate 【SliverGridDelegate】","【itemBuilder】 : Item builder 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridView/GridView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GridView/GridView_zh-CN.json deleted file mode 100644 index 8d9d4b837..000000000 --- a/modules/widget_system/widgets/doc/widgets/GridView/GridView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GridView","path":"/src/widgets/scroll_view.dart","parents":["BoxScrollView","ScrollView","StatelessWidget","Widget"],"desc":"可滚动的二维小部件数组。","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"控制 [GridView] 内子项布局的委托。"},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"为 [GridView] 提供子项的委托。"}],"id":163,"localName":"网格组件","lever":5,"family":0,"linkIds":[21,162],"nodes":[{"file":"node1_base.dart","name":"GridView.count构造","desc":["【children】 : 子组件列表 【List】","【crossAxisCount】 : 主轴一行box数量 【int】","【mainAxisSpacing】 : 主轴每行间距 【double】","【crossAxisSpacing】 : 交叉轴每行间距 【double】","【childAspectRatio】 : box主长/交叉轴长 【double】","【crossAxisCount】 : 主轴一行数量 【int】"]},{"file":"node2_direction.dart","name":"GridView滑动方向","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向滑动 【bool】","【shrinkWrap】 : 无边界时是否包裹 【bool】"]},{"file":"node3_extend.dart","name":"GridView滑动方向","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向滑动 【bool】","【shrinkWrap】 : 无边界时是否包裹 【bool】"]},{"file":"node4_builder.dart","name":"GridView.builder构造","desc":["【itemCount】 : 条目数量 【int】","【gridDelegate】 : 网格代理 【SliverGridDelegate】","【itemBuilder】 : 条目构造器 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Hero/Hero_en-US.json b/modules/widget_system/widgets/doc/widgets/Hero/Hero_en-US.json deleted file mode 100644 index 68adb1db1..000000000 --- a/modules/widget_system/widgets/doc/widgets/Hero/Hero_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Hero","path":"/src/widgets/heroes.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that marks its child as being a candidate for [hero animations](https://docs.flutter.dev/ui/animations/hero-animations).","fields":[{"name":"tag","type":"Object","required":true,"desc":"The identifier for this particular hero. If the tag of this hero matches the tag of a hero on a [PageRoute] that we're navigating to or from, then a hero animation will be triggered."},{"name":"createRectTween","type":"CreateRectTween?","desc":"Defines how the destination hero's bounds change as it flies from the starting route to the destination route."},{"name":"child","type":"Widget","required":true,"desc":"The widget subtree that will \"fly\" from one route to another during a [Navigator] push or pop transition."},{"name":"flightShuttleBuilder","type":"HeroFlightShuttleBuilder?","desc":"Optional override to supply a widget that's shown during the hero's flight."},{"name":"placeholderBuilder","type":"HeroPlaceholderBuilder?","desc":"Placeholder widget left in place as the Hero's [child] once the flight takes off."},{"name":"transitionOnUserGestures","type":"bool","required":true,"desc":"Whether to perform the hero transition if the [PageRoute] transition was triggered by a user gesture, such as a back swipe on iOS."}],"id":171,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Hero","desc":["【tag】 : tag 【String】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Hero/Hero_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Hero/Hero_zh-CN.json deleted file mode 100644 index 5cd534a04..000000000 --- a/modules/widget_system/widgets/doc/widgets/Hero/Hero_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Hero","path":"/src/widgets/heroes.dart","parents":["StatefulWidget","Widget"],"desc":"将其子项标记为[英雄动画](https://docs.flutter.dev/ui/animations/hero-animations)候选者的小部件。","fields":[{"name":"tag","type":"Object","required":true,"desc":"此特定英雄的标识符。如果此英雄的标签与我们导航到或来自的 [PageRoute] 上的英雄标签匹配,则将触发英雄动画。"},{"name":"createRectTween","type":"CreateRectTween?","desc":"定义目标英雄的边界在从起始路由飞到目标路由时如何变化。"},{"name":"child","type":"Widget","required":true,"desc":"在 [Navigator] 推送或弹出转换期间将从一个路由"},{"name":"flightShuttleBuilder","type":"HeroFlightShuttleBuilder?","desc":"可选覆盖,提供在英雄飞行期间显示的小部件。"},{"name":"placeholderBuilder","type":"HeroPlaceholderBuilder?","desc":"一旦飞行起飞,留在原地作为英雄 [child] 的占位符小部件。"},{"name":"transitionOnUserGestures","type":"bool","required":true,"desc":"如果 [PageRoute] 转换是由用户手势(如 iOS 上的后退滑动)触发的,是否执行英雄转换。"}],"id":171,"localName":"共享动画","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Hero基本使用","desc":["【tag】 : 标签 【String】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_en-US.json b/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_en-US.json deleted file mode 100644 index 37a8d0e2c..000000000 --- a/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"HeroControllerScope","path":"/src/widgets/navigator.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget to host a hero controller.","fields":[{"name":"controller","type":"HeroController?","desc":"The hero controller that is hosted inside this widget."}],"id":425,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_zh-CN.json deleted file mode 100644 index f30899095..000000000 --- a/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"HeroControllerScope","path":"/src/widgets/navigator.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"托管英雄控制器的继承小部件。","fields":[{"name":"controller","type":"HeroController?","desc":"托管在此小部件内的英雄控制器。"}],"id":425,"localName":"HeroControllerScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_en-US.json b/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_en-US.json deleted file mode 100644 index 87dce6c60..000000000 --- a/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"HeroMode","path":"/src/widgets/heroes.dart","parents":["StatelessWidget","Widget"],"desc":" Enables or disables [Hero]es in the widget subtree.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The subtree to place inside the [HeroMode]."},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not [Hero]es are enabled in this subtree."}],"id":426,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_zh-CN.json b/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_zh-CN.json deleted file mode 100644 index 8d79a5ae3..000000000 --- a/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"HeroMode","path":"/src/widgets/heroes.dart","parents":["StatelessWidget","Widget"],"desc":"启用或禁用小部件子树中的 [Hero]。","fields":[{"name":"child","type":"Widget","required":true,"desc":"放置在 [HeroMode] 内的子树。"},{"name":"enabled","type":"bool","required":true,"desc":"此子树中是否启用 [Hero]。"}],"id":426,"localName":"HeroMode","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_en-US.json b/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_en-US.json deleted file mode 100644 index 879736d2c..000000000 --- a/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"HtmlElementView","path":"/src/widgets/platform_view.dart","parents":["StatelessWidget","Widget"],"desc":" Embeds an HTML element in the Widget hierarchy in Flutter web.","fields":[{"name":"viewType","type":"String","required":true,"desc":"The unique identifier for the HTML view type to be embedded by this widget."},{"name":"onPlatformViewCreated","type":"PlatformViewCreatedCallback?","desc":"Callback to invoke after the platform view has been created."},{"name":"creationParams","type":"Object?","desc":"Passed as the 2nd argument (i.e. `params`) of the registered view factory."},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":213,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to HtmlElementView","desc":["【child】 : Child widget 【child】","【viewType】 : Unique identifier for the HTML element 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_zh-CN.json deleted file mode 100644 index 295b808d8..000000000 --- a/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"HtmlElementView","path":"/src/widgets/platform_view.dart","parents":["StatelessWidget","Widget"],"desc":"在 Flutter web 的小部件层次结构中嵌入 HTML 元素。","fields":[{"name":"viewType","type":"String","required":true,"desc":"此小部件要嵌入的 HTML 视图类型的唯一标识符。"},{"name":"onPlatformViewCreated","type":"PlatformViewCreatedCallback?","desc":"创建平台视图后调用的回调。"},{"name":"creationParams","type":"Object?","desc":"作为注册视图工厂的第二个参数(即 `params`)传递。"},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":213,"localName":"html 元素视图","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"HtmlElementView 介绍","desc":["【child】 : 子组件 【child】","【viewType】 : html元素唯一表识 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Icon/Icon_en-US.json b/modules/widget_system/widgets/doc/widgets/Icon/Icon_en-US.json deleted file mode 100644 index 948314ac5..000000000 --- a/modules/widget_system/widgets/doc/widgets/Icon/Icon_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Icon","path":"/src/widgets/icon.dart","parents":["StatelessWidget","Widget"],"desc":" A graphical icon widget drawn with a glyph from a font described in an [IconData] such as material's predefined [IconData]s in [Icons].","fields":[{"name":"icon","type":"IconData?","desc":"The icon to display. The available icons are described in [Icons]."},{"name":"size","type":"double?","desc":"The size of the icon in logical pixels."},{"name":"fill","type":"double?","desc":"The fill for drawing the icon."},{"name":"weight","type":"double?","desc":"The stroke weight for drawing the icon."},{"name":"grade","type":"double?","desc":"The grade (granular stroke weight) for drawing the icon."},{"name":"opticalSize","type":"double?","desc":"The optical size for drawing the icon."},{"name":"color","type":"Color?","desc":"The color to use when drawing the icon."},{"name":"shadows","type":"List?","desc":"A list of [Shadow]s that will be painted underneath the icon."},{"name":"semanticLabel","type":"String?","desc":"Semantic label for the icon."},{"name":"textDirection","type":"TextDirection?","desc":"The text direction to use for rendering the icon."},{"name":"applyTextScaling","type":"bool?","desc":"Whether to scale the size of this widget using the ambient [MediaQuery]'s [TextScaler]."},{"name":"blendMode","type":"BlendMode?","desc":"The [BlendMode] to apply to the foreground of the icon."}],"id":6,"lever":2,"family":0,"linkIds":[7,30,125],"nodes":[{"file":"node1_base.dart","name":"Used to display an icon","desc":["【Input】 : Icon data 【IconData】","【size】 : Size 【double】","【color】: Color 【Color】"]},{"file":"node2_diy.dart","name":"Use custom icons","desc":["You can download icon fonts from the iconfont website for use"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Icon/Icon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Icon/Icon_zh-CN.json deleted file mode 100644 index 6c434b787..000000000 --- a/modules/widget_system/widgets/doc/widgets/Icon/Icon_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Icon","path":"/src/widgets/icon.dart","parents":["StatelessWidget","Widget"],"desc":"使用 [IconData] 中描述的字体字形绘制的图形图标小部件,例如 material 的 [Icons] 中预定义的 [IconData]。","fields":[{"name":"icon","type":"IconData?","desc":"要显示的图标。可用图标在 [Icons] 中描述。"},{"name":"size","type":"double?","desc":"图标的逻辑像素大小。"},{"name":"fill","type":"double?","desc":"绘制图标的填充。"},{"name":"weight","type":"double?","desc":"绘制图标的笔画粗细。"},{"name":"grade","type":"double?","desc":"绘制图标的等级(细粒度笔画粗细)。"},{"name":"opticalSize","type":"double?","desc":"绘制图标的光学大小。"},{"name":"color","type":"Color?","desc":"绘制图标时使用的颜色。"},{"name":"shadows","type":"List?","desc":"将在图标下方绘制的 [Shadow] 列表。"},{"name":"semanticLabel","type":"String?","desc":"图标的语义标签。"},{"name":"textDirection","type":"TextDirection?","desc":"用于渲染图标的文本方向。"},{"name":"applyTextScaling","type":"bool?","desc":"是否使用环境 [MediaQuery] 的 [TextScaler] 缩放此小部件的大小。"},{"name":"blendMode","type":"BlendMode?","desc":"应用于图标前景的 [BlendMode]。"}],"id":6,"localName":"图标组件","lever":2,"family":0,"linkIds":[7,30,125],"nodes":[{"file":"node1_base.dart","name":"用于显示一个图标","desc":["【入参】 :图标数据 【IconData】","【size】 : 大小 【double】","【color】: 颜色 【Color】"]},{"file":"node2_diy.dart","name":"使用自定义图标","desc":["可在iconfont网站中下载图标字体进行使用"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_en-US.json b/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_en-US.json deleted file mode 100644 index 41b89881c..000000000 --- a/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IconButton","path":"/src/material/icon_button.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design icon button.","fields":[{"name":"iconSize","type":"double?","desc":"The size of the icon inside the button."},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the icon button's layout will be."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The padding around the button's icon. The entire padded icon will react to input gestures."},{"name":"alignment","type":"AlignmentGeometry?","desc":"Defines how the icon is positioned within the IconButton."},{"name":"splashRadius","type":"double?","desc":"The splash radius."},{"name":"icon","type":"Widget","required":true,"desc":"The icon to display inside the button."},{"name":"focusColor","type":"Color?","desc":"The color for the button when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"The color for the button when a pointer is hovering over it."},{"name":"color","type":"Color?","desc":"The color to use for the icon inside the button, if the icon is enabled. Defaults to leaving this up to the [icon] widget."},{"name":"splashColor","type":"Color?","desc":"The primary color of the button when the button is in the down (pressed) state. The splash is represented as a circular overlay that appears above the [highlightColor] overlay. The splash overlay has a center point that matches the hit point of the user touch event. The splash overlay will expand to fill the button area if the touch is held for long enough time. If the splash color has transparency then the highlight and button color will show through."},{"name":"highlightColor","type":"Color?","desc":"The secondary color of the button when the button is in the down (pressed) state. The highlight color is represented as a solid color that is overlaid over the button color (if any). If the highlight color has transparency, the button color will show through. The highlight fades in quickly as the button is held down."},{"name":"disabledColor","type":"Color?","desc":"The color to use for the icon inside the button, if the icon is disabled. Defaults to the [ThemeData.disabledColor] of the current [Theme]."},{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when the button is tapped or otherwise activated."},{"name":"onHover","type":"ValueChanged?","desc":"The callback that is called when the button is hovered."},{"name":"onLongPress","type":"VoidCallback?","desc":"The callback that is called when the button is long-pressed."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tooltip","type":"String?","desc":"Text that describes the action that will occur when the button is pressed."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"constraints","type":"BoxConstraints?","desc":"Optional size constraints for the button."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"isSelected","type":"bool?","desc":"The optional selection state of the icon button."},{"name":"selectedIcon","type":"Widget?","desc":"The icon to display inside the button when [isSelected] is true. This property can be null. The original [icon] will be used for both selected and unselected status if it is null."}],"id":30,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IconButton Properties","desc":["【icon】: Icon component 【Widget】","【tooltip】: Long press tooltip text 【String】","【highlightColor】: Long press highlight color 【Color】","【splashColor】: Ripple color 【Color】","【onPressed】: Click event 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_zh-CN.json deleted file mode 100644 index 5965c23d5..000000000 --- a/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IconButton","path":"/src/material/icon_button.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 图标按钮。","fields":[{"name":"iconSize","type":"double?","desc":"按钮内图标的大小。"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义图标按钮布局的紧凑程度。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"按钮图标周围的内边距。整个带内边距的图标将对输入手势做出反应。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"定义图标在 IconButton 内的定位方式。"},{"name":"splashRadius","type":"double?","desc":"飞溅半径。"},{"name":"icon","type":"Widget","required":true,"desc":"在按钮内显示的图标。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时的颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在按钮上时的颜色。"},{"name":"color","type":"Color?","desc":"如果图标启用,用于按钮内图标的颜色。默认情况下将此留给 [icon] 小部件。"},{"name":"splashColor","type":"Color?","desc":"按钮处于按下状态时的主要颜色。飞溅表示为出现在 [highlightColor] 覆盖层上方的圆形覆盖层。飞溅覆盖层的中心点与用户触摸事件的命中点匹配。如果触摸保持足够长的时间,飞溅覆盖层将扩展以填充按钮区域。如果飞溅颜色具有透明度,则高亮和按钮颜色将透过。"},{"name":"highlightColor","type":"Color?","desc":"按钮处于按下状态时的次要颜色。高亮颜色表示为覆盖在按钮颜色(如果有)上的纯色。如果高亮颜色具有透明度,按钮颜色将透过。高亮在按钮被按住时快速淡入。"},{"name":"disabledColor","type":"Color?","desc":"如果图标禁用,用于按钮内图标的颜色。默认为当前 [Theme] 的 [ThemeData.disabledColor]。"},{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用的回调。"},{"name":"onHover","type":"ValueChanged?","desc":"悬停按钮时调用的回调。"},{"name":"onLongPress","type":"VoidCallback?","desc":"长按按钮时调用的回调。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tooltip","type":"String?","desc":"描述按下按钮时将发生的操作的文本。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"constraints","type":"BoxConstraints?","desc":"按钮的可选大小约束。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"isSelected","type":"bool?","desc":"图标按钮的可选选择状态。"},{"name":"selectedIcon","type":"Widget?","desc":"当 [isSelected] 为 true 时在按钮内显示的图标。此属性可以为 null。如果为 null,原始 [icon] 将用于选定和未选定状态。"}],"id":30,"localName":"图标按钮","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IconButton属性","desc":["【icon】: 图标组件 【Widget】","【tooltip】: 长按提示文字 【String】","【highlightColor】: 长按高亮色 【Color】","【splashColor】: 水波纹色 【Color】","【onPressed】: 点击事件 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_en-US.json deleted file mode 100644 index 8d8f266b5..000000000 --- a/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IconButtonTheme","path":"/src/material/icon_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [IconButton] descendants.","fields":[{"name":"data","type":"IconButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":427,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_zh-CN.json deleted file mode 100644 index 7908c0769..000000000 --- a/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IconButtonTheme","path":"/src/material/icon_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [IconButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"IconButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":427,"localName":"IconButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_en-US.json deleted file mode 100644 index 38fb9fadc..000000000 --- a/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IconTheme","path":"/src/widgets/icon_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Controls the default properties of icons in a widget subtree.","fields":[{"name":"data","type":"IconThemeData","required":true,"desc":"The set of properties to use for icons in this subtree."}],"id":325,"lever":3,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IconTheme Usage","desc":["You can obtain the icon theme data through IconTheme.of, or set the default style for the icon components of IconTheme【descendants】, including color, opacity, and size."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_zh-CN.json deleted file mode 100644 index 00a6357d5..000000000 --- a/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IconTheme","path":"/src/widgets/icon_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"控制小部件子树中图标的默认属性。","fields":[{"name":"data","type":"IconThemeData","required":true,"desc":"用于此子树中图标的属性集。"}],"id":325,"localName":"图标样式","lever":3,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IconTheme使用","desc":["可以通过IconTheme.of获取图标主题数据,也可以为IconTheme【后代】的图标组件设置默认样式,包括颜色、透明度、尺寸。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_en-US.json b/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_en-US.json deleted file mode 100644 index da136a135..000000000 --- a/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IgnoreBaseline","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that causes the parent to ignore the [child] for the purposes of baseline alignment.","fields":[],"id":428,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_zh-CN.json deleted file mode 100644 index 89a27069b..000000000 --- a/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IgnoreBaseline","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"导致父级为了基线对齐目的而忽略 [child] 的小部件。","fields":[],"id":428,"localName":"IgnoreBaseline","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_en-US.json b/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_en-US.json deleted file mode 100644 index 0a3409d3b..000000000 --- a/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IgnorePointer","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that is invisible during hit testing.","fields":[{"name":"ignoring","type":"bool","required":true,"desc":"Whether this widget is ignored during hit testing."},{"name":"ignoringSemantics","type":"bool?","desc":"Whether the semantics of this widget is ignored when compiling the semantics subtree."}],"id":292,"lever":4,"family":2,"linkIds":[295,146,149,150],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of IgnorePointer","desc":["【child】 : Child component 【Widget】","【ignoring】 : Whether to ignore events 【bool】","As shown below, when the Switch is selected, ignoring is true, and the button event will be locked and cannot be clicked."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_zh-CN.json deleted file mode 100644 index 80a881384..000000000 --- a/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IgnorePointer","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在命中测试期间不可见的小部件。","fields":[{"name":"ignoring","type":"bool","required":true,"desc":"此小部件在命中测试期间是否被忽略。"},{"name":"ignoringSemantics","type":"bool?","desc":"编译语义子树时是否忽略此小部件的语义。"}],"id":292,"localName":"忽视点击","lever":4,"family":2,"linkIds":[295,146,149,150],"nodes":[{"file":"node1_base.dart","name":"IgnorePointer基本使用","desc":["【child】 : 孩子组件 【Widget】","【ignoring】 : 是否忽视事件 【bool】","如下,Switch选中时ignoring为true,按钮事件将被锁定,无法点击。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Image/Image_en-US.json b/modules/widget_system/widgets/doc/widgets/Image/Image_en-US.json deleted file mode 100644 index 6c5a409ad..000000000 --- a/modules/widget_system/widgets/doc/widgets/Image/Image_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Image","path":"/src/widgets/image.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that displays an image.","fields":[{"name":"image","type":"ImageProvider","required":true,"desc":"The image to display."},{"name":"frameBuilder","type":"ImageFrameBuilder?","desc":"A builder function responsible for creating the widget that represents this image."},{"name":"loadingBuilder","type":"ImageLoadingBuilder?","desc":"A builder that specifies the widget to display to the user while an image is still loading."},{"name":"errorBuilder","type":"ImageErrorWidgetBuilder?","desc":"A builder function that is called if an error occurs during image loading."},{"name":"width","type":"double?","desc":"If non-null, require the image to have this width (in logical pixels)."},{"name":"height","type":"double?","desc":"If non-null, require the image to have this height (in logical pixels)."},{"name":"color","type":"Color?","desc":"If non-null, this color is blended with each image pixel using [colorBlendMode]."},{"name":"opacity","type":"Animation?","desc":"If non-null, the value from the [Animation] is multiplied with the opacity of each image pixel before painting onto the canvas."},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"The rendering quality of the image."},{"name":"colorBlendMode","type":"BlendMode?","desc":"Used to combine [color] with this image."},{"name":"fit","type":"BoxFit?","desc":"How to inscribe the image into the space allocated during layout."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the image within its bounds."},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"How to paint any portions of the layout bounds not covered by the image."},{"name":"centerSlice","type":"Rect?","desc":"The center slice for a nine-patch image."},{"name":"matchTextDirection","type":"bool","required":true,"desc":"Whether to paint the image in the direction of the [TextDirection]."},{"name":"gaplessPlayback","type":"bool","required":true,"desc":"Whether to continue showing the old image (true), or briefly show nothing (false), when the image provider changes. The default value is false."},{"name":"semanticLabel","type":"String?","desc":"A Semantic description of the image."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"Whether to exclude this image from semantics."},{"name":"isAntiAlias","type":"bool","required":true,"desc":"Whether to paint the image with anti-aliasing."}],"id":38,"lever":5,"family":1,"linkIds":[8,87],"nodes":[{"file":"node1_base.dart","name":"Load images from resource files and the network","desc":["Image.asset loads resource images,"]},{"file":"node2_fit.dart","name":"Image adaptation mode","desc":["【fit】 : Adaptation mode*7 【BoxFit】,"]},{"file":"node3_alignment.dart","name":"Image alignment mode","desc":["【alignment】 : Color 【AlignmentGeometry】"," Common nine static constants of the Alignment class, but custom positions are also possible"]},{"file":"node4_colorBlendMode.dart","name":"Image color and blending mode","desc":["【color】 : Color 【Color】","【colorBlendMode】: Blending mode*29 【BlendMode】"]},{"file":"node5_repeat.dart","name":"Image repeat mode","desc":["【repeat】 : Repeat mode*4 【ImageRepeat】"]},{"file":"node6_centerSlice.dart","name":"Image partial zoom implementation","desc":["【centerSlice】 : Reserved area 【Rect】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Image/Image_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Image/Image_zh-CN.json deleted file mode 100644 index a0bcfb89e..000000000 --- a/modules/widget_system/widgets/doc/widgets/Image/Image_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Image","path":"/src/widgets/image.dart","parents":["StatefulWidget","Widget"],"desc":"显示图像的小部件。","fields":[{"name":"image","type":"ImageProvider","required":true,"desc":"要显示的图像。"},{"name":"frameBuilder","type":"ImageFrameBuilder?","desc":"负责创建表示此图像的小部件的构建器函数。"},{"name":"loadingBuilder","type":"ImageLoadingBuilder?","desc":"指定在图像仍在加载时向用户显示的小部件的构建器。"},{"name":"errorBuilder","type":"ImageErrorWidgetBuilder?","desc":"如果在图像加载期间发生错误,则调用的构建器函数。"},{"name":"width","type":"double?","desc":"如果非空,要求图像具有此宽度(以逻辑像素为单位)。"},{"name":"height","type":"double?","desc":"如果非空,要求图像具有此高度(以逻辑像素为单位)。"},{"name":"color","type":"Color?","desc":"如果非空,此颜色使用 [colorBlendMode] 与每个图像像素混合。"},{"name":"opacity","type":"Animation?","desc":"如果非空,[Animation] 的值在绘制到画布之前与每个图像像素的不透明度相乘。"},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"图像的渲染质量。"},{"name":"colorBlendMode","type":"BlendMode?","desc":"用于将 [color] 与此图像组合。"},{"name":"fit","type":"BoxFit?","desc":"如何在布局期间分配的空间中刻画图像。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在其边界内对齐图像。"},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"如何绘制图像未覆盖的布局边界的任何部分。"},{"name":"centerSlice","type":"Rect?","desc":"九宫格图像的中心切片。"},{"name":"matchTextDirection","type":"bool","required":true,"desc":"是否在 [TextDirection] 的方向上绘制图像。"},{"name":"gaplessPlayback","type":"bool","required":true,"desc":"当图像提供程序更改时,是否继续显示旧图像(true)还是短暂显示无内容(false)。默认值为 false。"},{"name":"semanticLabel","type":"String?","desc":"图像的语义描述。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"是否从语义中排除此图像。"},{"name":"isAntiAlias","type":"bool","required":true,"desc":"是否使用抗锯齿绘制图像。"}],"id":38,"localName":"图片组件","lever":5,"family":1,"linkIds":[8,87],"nodes":[{"file":"node1_base.dart","name":"可从资源文件和网络加载图片","desc":["Image.asset加载资源图片,"]},{"file":"node2_fit.dart","name":"图片的适应模式","desc":["【fit】 : 适应模式*7 【BoxFit】,"]},{"file":"node3_alignment.dart","name":"图片对齐模式","desc":["【alignment】 : 颜色 【AlignmentGeometry】"," 常用Alignment类的九个静态常量,但也可定制位置"]},{"file":"node4_colorBlendMode.dart","name":"图片颜色及混合模式","desc":["【color】 : 颜色 【Color】","【colorBlendMode】: 混合模式*29 【BlendMode】"]},{"file":"node5_repeat.dart","name":"图片重复模式","desc":["【repeat】 : 重复模式*4 【ImageRepeat】"]},{"file":"node6_centerSlice.dart","name":"图片实现局部放大","desc":["【centerSlice】 : 保留的区域 【Rect】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_en-US.json b/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_en-US.json deleted file mode 100644 index 5523003e6..000000000 --- a/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ImageFiltered","path":"/src/widgets/image_filter.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Applies an [ImageFilter] to its child.","fields":[{"name":"imageFilter","type":"ImageFilter","required":true,"desc":"The image filter to apply to the child of this widget."},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not to apply the image filter operation to the child of this widget."}],"id":357,"lever":4,"family":2,"linkIds":[278,88],"nodes":[{"file":"node1_blur.dart","name":"ImageFilter Gaussian Blur","desc":["【imageFilter】 : Image filter 【ImageFilter】","【child】 : Child component 【Widget】"]},{"file":"node2_color.dart","name":"ImageFilter Color Effect","desc":["Achieve color filter through the ColorFilter object."]},{"file":"node3_matrix.dart","name":"ImageFilter Transformation Effect","desc":["Perform matrix transformation through the ImageFilter.matrix constructor, but it is relatively weak."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_zh-CN.json deleted file mode 100644 index c89fcf0b5..000000000 --- a/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ImageFiltered","path":"/src/widgets/image_filter.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对其子项应用 [ImageFilter]。","fields":[{"name":"imageFilter","type":"ImageFilter","required":true,"desc":"应用于此小部件子项的图像过滤器。"},{"name":"enabled","type":"bool","required":true,"desc":"是否对此小部件的子项应用图像过滤器操作。"}],"id":357,"localName":"图像滤镜","lever":4,"family":2,"linkIds":[278,88],"nodes":[{"file":"node1_blur.dart","name":"ImageFilter 高斯模糊","desc":["【imageFilter】 : 图像滤镜 【ImageFilter】","【child】 : 子组件 【Widget】"]},{"file":"node2_color.dart","name":"ImageFilter 滤色效果","desc":["通过 ColorFilter 对象实现颜色滤镜。"]},{"file":"node3_matrix.dart","name":"ImageFilter 变换效果","desc":["通过 ImageFilter.matrix 构造,进行矩阵变换,但比较鸡肋。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_en-US.json deleted file mode 100644 index b4cc0da2b..000000000 --- a/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ImageIcon","path":"/src/widgets/image_icon.dart","parents":["StatelessWidget","Widget"],"desc":" An icon that comes from an [ImageProvider], e.g. an [AssetImage].","fields":[{"name":"image","type":"ImageProvider?","desc":"The image to display as the icon."},{"name":"size","type":"double?","desc":"The size of the icon in logical pixels."},{"name":"color","type":"Color?","desc":"The color to use when drawing the icon."},{"name":"semanticLabel","type":"String?","desc":"Semantic label for the icon."}],"id":7,"lever":1,"family":0,"linkIds":[6,30,125],"nodes":[{"file":"node1_base.dart","name":"Used to display a solid color image","desc":["【Parameter】: Image resource 【ImageProvider】","【size】: Size 【double】","【color】: Badge color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_zh-CN.json deleted file mode 100644 index 3ef862676..000000000 --- a/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ImageIcon","path":"/src/widgets/image_icon.dart","parents":["StatelessWidget","Widget"],"desc":"来自 [ImageProvider] 的图标,例如 [AssetImage]。","fields":[{"name":"image","type":"ImageProvider?","desc":"要显示为图标的图像。"},{"name":"size","type":"double?","desc":"图标的逻辑像素大小。"},{"name":"color","type":"Color?","desc":"绘制图标时使用的颜色。"},{"name":"semanticLabel","type":"String?","desc":"图标的语义标签。"}],"id":7,"localName":"容器","lever":1,"family":0,"linkIds":[6,30,125],"nodes":[{"file":"node1_base.dart","name":"用于显示一个纯色图片","desc":["【入参】 : 图片资源 【ImageProvider】","【size】 : 大小 【double】","【color】: 角标颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_en-US.json b/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_en-US.json deleted file mode 100644 index 49e3e588e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ImgElementPlatformView","path":"/src/widgets/_web_image_web.dart","parents":["StatelessWidget","Widget"],"desc":" Displays an `` element with `src` set to [src].","fields":[{"name":"src","type":"String?","desc":"The `src` URL for the `` tag."}],"id":429,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_zh-CN.json deleted file mode 100644 index ee9ed504a..000000000 --- a/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ImgElementPlatformView","path":"/src/widgets/_web_image_web.dart","parents":["StatelessWidget","Widget"],"desc":"显示 `src` 设置为 [src] 的 `` 元素。","fields":[{"name":"src","type":"String?","desc":"`` 标签的 `src` URL。"}],"id":429,"localName":"ImgElementPlatformView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_en-US.json deleted file mode 100644 index 8a3c8b6e0..000000000 --- a/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ImplicitlyAnimatedWidget","path":"/src/widgets/implicit_animations.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" An abstract class for building widgets that animate changes to their properties.","fields":[{"name":"curve","type":"Curve","required":true,"desc":"The curve to apply when animating the parameters of this container."},{"name":"duration","type":"Duration","required":true,"desc":"The duration over which to animate the parameters of this container."},{"name":"onEnd","type":"VoidCallback?","desc":"Called every time an animation completes."}],"id":430,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_zh-CN.json deleted file mode 100644 index dc627ee16..000000000 --- a/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ImplicitlyAnimatedWidget","path":"/src/widgets/implicit_animations.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"用于构建对其属性更改进行动画处理的小部件的抽象类。","fields":[{"name":"curve","type":"Curve","required":true,"desc":"对此容器的参数进行动画处理时应用的曲线。"},{"name":"duration","type":"Duration","required":true,"desc":"对此容器的参数进行动画处理的持续时间。"},{"name":"onEnd","type":"VoidCallback?","desc":"每次动画完成时调用。"}],"id":430,"localName":"ImplicitlyAnimatedWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_en-US.json b/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_en-US.json deleted file mode 100644 index 6ec67f65c..000000000 --- a/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IndexedSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that annotates the child semantics with an index.","fields":[{"name":"index","type":"int","required":true,"desc":"The index used to annotate the first child semantics node."}],"id":431,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_zh-CN.json deleted file mode 100644 index 56021e98b..000000000 --- a/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IndexedSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用索引注释子语义的小部件。","fields":[{"name":"index","type":"int","required":true,"desc":"用于注释第一个子语义节点的索引。"}],"id":431,"localName":"IndexedSemantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_en-US.json b/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_en-US.json deleted file mode 100644 index 4def35435..000000000 --- a/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IndexedStack","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":" A [Stack] that shows a single child from a list of children.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the non-positioned and partially-positioned children in the stack."},{"name":"textDirection","type":"TextDirection?","desc":"The text direction with which to resolve [alignment]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"sizing","type":"StackFit","required":true,"desc":"How to size the non-positioned children in the stack."},{"name":"index","type":"int?","desc":"The index of the child to show."},{"name":"children","type":"List","required":true,"desc":"The child widgets of the stack."}],"id":161,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of IndexedStack","desc":["【children】: List of child components 【List】","【alignment】: Alignment 【AlignmentGeometry】","【index】: Currently displayed component 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_zh-CN.json deleted file mode 100644 index e2e89905f..000000000 --- a/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IndexedStack","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":"从子项列表中显示单个子项的 [Stack]。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在堆栈中对齐非定位和部分定位的子项。"},{"name":"textDirection","type":"TextDirection?","desc":"用于解析 [alignment] 的文本方向。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"sizing","type":"StackFit","required":true,"desc":"如何调整堆栈中非定位子项的大小。"},{"name":"index","type":"int?","desc":"要显示的子项的索引。"},{"name":"children","type":"List","required":true,"desc":"堆栈的子小部件。"}],"id":161,"localName":"索引堆叠","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IndexedStack基本使用","desc":["【children】 : 子组件列表 【Lis】","【alignment】 : 对齐方式 【AlignmentGeometry】","【index】 : 当前显示组件 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_en-US.json deleted file mode 100644 index 665d0fdb1..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedCupertinoTheme","path":"/src/cupertino/theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Provides a [CupertinoTheme] to all descendents.","fields":[{"name":"theme","type":"CupertinoTheme","required":true,"desc":"The [CupertinoTheme] that is provided to widgets lower in the tree."}],"id":432,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_zh-CN.json deleted file mode 100644 index 078ab0432..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedCupertinoTheme","path":"/src/cupertino/theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为所有后代提供 [CupertinoTheme]。","fields":[{"name":"theme","type":"CupertinoTheme","required":true,"desc":"提供给树中较低小部件的 [CupertinoTheme]。"}],"id":432,"localName":"InheritedCupertinoTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_en-US.json b/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_en-US.json deleted file mode 100644 index 54b995787..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedModel","path":"/src/widgets/inherited_model.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An [InheritedWidget] that's intended to be used as the base class for models whose dependents may only depend on one part or \"aspect\" of the overall model.","fields":[],"id":336,"lever":4,"family":5,"linkIds":[346],"nodes":[{"file":"node1.dart","name":"InheritedModel Usage","desc":["【child】: child component 【Widget】","Below is a custom InheritedModel that implements subtree sharing of data; and defines two aspects, color and value, to control the granularity of dependency notifications."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_zh-CN.json deleted file mode 100644 index 5aa33fdd5..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedModel","path":"/src/widgets/inherited_model.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"旨在用作模型基类的 [InheritedWidget],其依赖项可能仅依赖于整个模型的一部分或\"方面\"。","fields":[],"id":336,"localName":"共享模型","lever":4,"family":5,"linkIds":[346],"nodes":[{"file":"node1.dart","name":"InheritedModel 使用","desc":["【child】 : 子组件 【Widget】","下面是一个自定义 InheritedModel,实现数据的子树共享;并且定义颜色和数值两个方面,控制依赖通知的粒度。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_en-US.json b/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_en-US.json deleted file mode 100644 index 0bac7054d..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedNotifier","path":"/src/widgets/inherited_notifier.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget for a [Listenable] [notifier], which updates its dependencies when the [notifier] is triggered.","fields":[{"name":"notifier","type":"T?","desc":"The [Listenable] object to which to listen."}],"id":433,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_zh-CN.json deleted file mode 100644 index f5a2737c8..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedNotifier","path":"/src/widgets/inherited_notifier.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"[Listenable] [notifier] 的继承小部件,当 [notifier] 被触发时更新其依赖项。","fields":[{"name":"notifier","type":"T?","desc":"要监听的 [Listenable] 对象。"}],"id":433,"localName":"InheritedNotifier","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_en-US.json deleted file mode 100644 index 72f3b22f8..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedTheme","path":"/src/widgets/inherited_theme.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An [InheritedWidget] that defines visual properties like colors and text styles, which the [child]'s subtree depends on.","fields":[],"id":345,"lever":1,"family":5,"linkIds":[324,326,328,329],"nodes":[{"file":"node1_base.dart","name":"Introduction to InheritedTheme","desc":["InheritedTheme.capture can capture the upper theme, obtain the CapturedThemes object, and use the captured theme across routes through the wrap method of this object."," ","","class InheritedThemeDemo extends StatelessWidget {"," const InheritedThemeDemo({Key? key) : super(key: key);","",""," @override"," Widget build(BuildContext context) {"," return const DefaultTextStyle("," style: TextStyle(fontSize: 24, color: Colors.blue),"," child: TestBody(),"," );"," ","","","class TestBody extends StatelessWidget {"," const TestBody({Key? key) : super(key: key);",""," @override"," Widget build(BuildContext context) {",""," return GestureDetector("," onTap: () => _toNextPage(context),"," child: Container("," height: 60,"," margin: const EdgeInsets.only(left: 40,right: 40),"," alignment: Alignment.center,"," color: Theme.of(context).primaryColor.withOpacity(0.1),"," child: const Text('InheritedTheme')));"," ",""," void _toNextPage(BuildContext context) {"," final NavigatorState navigator = Navigator.of(context);"," final CapturedThemes themes ="," InheritedTheme.capture(from: context, to: navigator.context);"," "," Navigator.of(context).push("," MaterialPageRoute("," builder: (BuildContext _) {"," return themes.wrap(Container("," alignment: Alignment.center,"," color: Colors.white,"," child: Text('Flutter Unit'),"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_zh-CN.json deleted file mode 100644 index 757bccb9a..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedTheme","path":"/src/widgets/inherited_theme.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"定义视觉属性(如颜色和文本样式)的 [InheritedWidget],[child] 的子树依赖于这些属性。","fields":[],"id":345,"localName":"传承主题","lever":1,"family":5,"linkIds":[324,326,328,329],"nodes":[{"file":"node1_base.dart","name":"InheritedTheme 介绍","desc":["InheritedTheme.capture 可以抓取上层主题,获取 CapturedThemes 对象,通过该对象 wrap 方法可以跨路由使用抓到的主题。"," ","","class InheritedThemeDemo extends StatelessWidget {"," const InheritedThemeDemo({Key? key) : super(key: key);","",""," @override"," Widget build(BuildContext context) {"," return const DefaultTextStyle("," style: TextStyle(fontSize: 24, color: Colors.blue),"," child: TestBody(),"," );"," ","","","class TestBody extends StatelessWidget {"," const TestBody({Key? key) : super(key: key);",""," @override"," Widget build(BuildContext context) {",""," return GestureDetector("," onTap: () => _toNextPage(context),"," child: Container("," height: 60,"," margin: const EdgeInsets.only(left: 40,right: 40),"," alignment: Alignment.center,"," color: Theme.of(context).primaryColor.withOpacity(0.1),"," child: const Text('InheritedTheme')));"," ",""," void _toNextPage(BuildContext context) {"," final NavigatorState navigator = Navigator.of(context);"," final CapturedThemes themes ="," InheritedTheme.capture(from: context, to: navigator.context);"," "," Navigator.of(context).push("," MaterialPageRoute("," builder: (BuildContext _) {"," return themes.wrap(Container("," alignment: Alignment.center,"," color: Colors.white,"," child: Text('Flutter Unit'),"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_en-US.json deleted file mode 100644 index 6265073cf..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["ProxyWidget","Widget"],"desc":" Base class for widgets that efficiently propagate information down the tree.","fields":[],"id":346,"lever":4,"family":5,"linkIds":[167,319,328,324,331],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Column","desc":["【children】: Component list 【List】","【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】","【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】","【textBaseline】: Text baseline 【TextBaseline】","【verticalDirection】: Vertical direction 【VerticalDirection】","【mainAxisSize】: Main axis size 【MainAxisSize】"]},{"file":"node2_use.dart","name":"InheritedWidget Example","desc":["Below is an example of using the InheritedWidget component through a color counter project."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_zh-CN.json deleted file mode 100644 index 184e25f85..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["ProxyWidget","Widget"],"desc":"高效地向下传播信息的小部件的基类。","fields":[],"id":346,"localName":"传承组件","lever":4,"family":5,"linkIds":[167,319,328,324,331],"nodes":[{"file":"node1_base.dart","name":"Column基本使用","desc":["【children】 : 组件列表 【List】","【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】","【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】","【textBaseline】 : 文字基线 【TextBaseline】","【verticalDirection】 : 竖直方向 【VerticalDirection】","【mainAxisSize】 : 主轴尺寸 【MainAxisSize】"]},{"file":"node2_use.dart","name":"InheritedWidget 案例","desc":["下面是通过一个颜色计数器项目展示 InheritedWidget 组件的使用。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Ink/Ink_en-US.json b/modules/widget_system/widgets/doc/widgets/Ink/Ink_en-US.json deleted file mode 100644 index 5480dfe94..000000000 --- a/modules/widget_system/widgets/doc/widgets/Ink/Ink_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Ink","path":"/src/material/ink_decoration.dart","parents":["StatefulWidget","Widget"],"desc":" A convenience widget for drawing images and other decorations on [Material] widgets, so that [InkWell] and [InkResponse] splashes will render over them.","fields":[{"name":"child","type":"Widget?","desc":"The [child] contained by the container."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Empty space to inscribe inside the [decoration]. The [child], if any, is placed inside this padding."},{"name":"decoration","type":"Decoration?","desc":"The decoration to paint on the nearest ancestor [Material] widget."},{"name":"width","type":"double?","desc":"A width to apply to the [decoration] and the [child]. The width includes any [padding]."},{"name":"height","type":"double?","desc":"A height to apply to the [decoration] and the [child]. The height includes any [padding]."}],"id":152,"lever":3,"family":1,"linkIds":[149,150],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Ink","desc":["【child】: Child component 【Widget】","【padding】: Padding 【EdgeInsetsGeometry】","【decoration】: Decoration 【Decoration】","【width】: Width 【double】","【height】: Height 【double】","【color】: Color 【Color】"]},{"file":"node2_image.dart","name":"Ink.image Ripple with Image","desc":["The properties are consistent with the Image component, see the Image component for details"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Ink/Ink_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Ink/Ink_zh-CN.json deleted file mode 100644 index d40f285d9..000000000 --- a/modules/widget_system/widgets/doc/widgets/Ink/Ink_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Ink","path":"/src/material/ink_decoration.dart","parents":["StatefulWidget","Widget"],"desc":"在 [Material] 小部件上绘制图像和其他装饰的便利小部件,以便 [InkWell] 和 [InkResponse] 飞溅将在它们上方渲染。","fields":[{"name":"child","type":"Widget?","desc":"容器包含的 [child]。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在 [decoration] 内刻画的空白空间。[child](如果有)放置在此内边距内。"},{"name":"decoration","type":"Decoration?","desc":"在最近的祖先 [Material] 小部件上绘制的装饰。"},{"name":"width","type":"double?","desc":"应用于 [decoration] 和 [child] 的宽度。宽度包括任何 [padding]。"},{"name":"height","type":"double?","desc":"应用于 [decoration] 和 [child] 的高度。高度包括任何 [padding]。"}],"id":152,"localName":"水波","lever":3,"family":1,"linkIds":[149,150],"nodes":[{"file":"node1_base.dart","name":"Ink基本使用","desc":["【child】 : 子组件 【Widget】","【padding】 : 内边距 【EdgeInsetsGeometry】","【decoration】 : 装饰 【Decoration】","【width】 : 宽 【double】","【height】 : 高 【double】","【color】 : 颜色 【Color】"]},{"file":"node2_image.dart","name":"Ink.image图片水波纹","desc":["其中属性与Image组件一致,详见Image组件"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_en-US.json b/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_en-US.json deleted file mode 100644 index 48120abad..000000000 --- a/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InkResponse","path":"/src/material/ink_well.dart","parents":["StatelessWidget","Widget"],"desc":" An area of a [Material] that responds to touch. Has a configurable shape and can be configured to clip splashes that extend outside its bounds or not.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"onTap","type":"GestureTapCallback?","desc":"Called when the user taps this part of the material."},{"name":"onTapDown","type":"GestureTapDownCallback?","desc":"Called when the user taps down this part of the material."},{"name":"onTapUp","type":"GestureTapUpCallback?","desc":"Called when the user releases a tap that was started on this part of the material. [onTap] is called immediately after."},{"name":"onTapCancel","type":"GestureTapCallback?","desc":"Called when the user cancels a tap that was started on this part of the material."},{"name":"onDoubleTap","type":"GestureTapCallback?","desc":"Called when the user double taps this part of the material."},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"Called when the user long-presses on this part of the material."},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"Called when the user taps this part of the material with a secondary button."},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"Called when the user taps down on this part of the material with a secondary button."},{"name":"onSecondaryTapUp","type":"GestureTapUpCallback?","desc":"Called when the user releases a secondary button tap that was started on this part of the material. [onSecondaryTap] is called immediately after."},{"name":"onSecondaryTapCancel","type":"GestureTapCallback?","desc":"Called when the user cancels a secondary button tap that was started on this part of the material."},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"Called when this part of the material either becomes highlighted or stops being highlighted."},{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the ink response area."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"containedInkWell","type":"bool","required":true,"desc":"Whether this ink response should be clipped its bounds."},{"name":"highlightShape","type":"BoxShape","required":true,"desc":"The shape (e.g., circle, rectangle) to use for the highlight drawn around this part of the material when pressed, hovered over, or focused."},{"name":"radius","type":"double?","desc":"The radius of the ink splash."},{"name":"borderRadius","type":"BorderRadius?","desc":"The border radius of the containing rectangle. This is effective only if [highlightShape] is [BoxShape.rectangle]."},{"name":"customBorder","type":"ShapeBorder?","desc":"The custom clip border."},{"name":"focusColor","type":"Color?","desc":"The color of the ink response when the parent widget is focused. If this property is null then the focus color of the theme, [ThemeData.focusColor], will be used."},{"name":"hoverColor","type":"Color?","desc":"The color of the ink response when a pointer is hovering over it. If this property is null then the hover color of the theme, [ThemeData.hoverColor], will be used."},{"name":"highlightColor","type":"Color?","desc":"The highlight color of the ink response when pressed. If this property is null then the highlight color of the theme, [ThemeData.highlightColor], will be used."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"Defines the ink response focus, hover, and splash colors."},{"name":"splashColor","type":"Color?","desc":"The splash color of the ink response. If this property is null then the splash color of the theme, [ThemeData.splashColor], will be used."},{"name":"splashFactory","type":"InteractiveInkFeatureFactory?","desc":"Defines the appearance of the splash."},{"name":"enableFeedback","type":"bool","required":true,"desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"Whether to exclude the gestures introduced by this widget from the semantics tree."},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@template flutter.material.inkwell.onFocusChange} Handler called when the focus changes."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"canRequestFocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.canRequestFocus}"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@template flutter.material.inkwell.statesController} Represents the interactive \"state\" of this widget in terms of a set of [WidgetState]s, like [WidgetState.pressed] and [WidgetState.focused]."},{"name":"hoverDuration","type":"Duration?","desc":"The duration of the animation that animates the hover effect."}],"id":149,"lever":1,"family":1,"linkIds":[150,152],"nodes":[{"file":"node1_base.dart","name":"Basic Events of InkResponse","desc":["【child】 : Child component 【Widget】","【onTap】 : Click event 【Function()】","【onDoubleTap】 : Double-click event 【Function()】","【onTapCancel】 : Click cancel 【Function()】","【onLongPress】 : Long press event 【Function()】"]},{"file":"node2_color.dart","name":"Other Properties of InkResponse","desc":["【child】 : Child component 【Widget】","【onHighlightChanged】 : Highlight change callback 【Function(bool)】","【highlightColor】 : Highlight color 【Color】","【splashColor】 : Ripple color 【Color】","【radius】 : Ripple radius 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_zh-CN.json deleted file mode 100644 index f71d48980..000000000 --- a/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InkResponse","path":"/src/material/ink_well.dart","parents":["StatelessWidget","Widget"],"desc":"响应触摸的 [Material] 区域。具有可配置的形状,可以配置为裁剪延伸到其边界之外的飞溅或不裁剪。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"onTap","type":"GestureTapCallback?","desc":"用户点击 material 的此部分时调用。"},{"name":"onTapDown","type":"GestureTapDownCallback?","desc":"用户点击 material 的此部分时调用。"},{"name":"onTapUp","type":"GestureTapUpCallback?","desc":"用户释放在 material 的此部分开始的点击时调用。[onTap] 立即在之后调用。"},{"name":"onTapCancel","type":"GestureTapCallback?","desc":"用户取消在 material 的此部分开始的点击时调用。"},{"name":"onDoubleTap","type":"GestureTapCallback?","desc":"用户双击 material 的此部分时调用。"},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"用户长按 material 的此部分时调用。"},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"用户用辅助按钮点击 material 的此部分时调用。"},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"用户用辅助按钮点击 material 的此部分时调用。"},{"name":"onSecondaryTapUp","type":"GestureTapUpCallback?","desc":"用户释放在 material 的此部分开始的辅助按钮点击时调用。[onSecondaryTap] 立即在之后调用。"},{"name":"onSecondaryTapCancel","type":"GestureTapCallback?","desc":"用户取消在 material 的此部分开始的辅助按钮点击时调用。"},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"当 material 的此部分变为高亮或停止高亮时调用。"},{"name":"onHover","type":"ValueChanged?","desc":"指针进入或退出墨水响应区域时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"containedInkWell","type":"bool","required":true,"desc":"此墨水响应是否应裁剪其边界。"},{"name":"highlightShape","type":"BoxShape","required":true,"desc":"按下、悬停或聚焦时在 material 的此部分周围绘制的高亮的形状(例如,圆形、矩形)。"},{"name":"radius","type":"double?","desc":"墨水飞溅的半径。"},{"name":"borderRadius","type":"BorderRadius?","desc":"包含矩形的边框半径。仅当 [highlightShape] 为 [BoxShape.rectangle] 时有效。"},{"name":"customBorder","type":"ShapeBorder?","desc":"自定义裁剪边框。"},{"name":"focusColor","type":"Color?","desc":"父小部件聚焦时墨水响应的颜色。如果此属性为 null,则将使用主题的焦点颜色 [ThemeData.focusColor]。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在其上时墨水响应的颜色。如果此属性为 null,则将使用主题的悬停颜色 [ThemeData.hoverColor]。"},{"name":"highlightColor","type":"Color?","desc":"按下时墨水响应的高亮颜色。如果此属性为 null,则将使用主题的高亮颜色 [ThemeData.highlightColor]。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"定义墨水响应焦点、悬停和飞溅颜色。"},{"name":"splashColor","type":"Color?","desc":"墨水响应的飞溅颜色。如果此属性为 null,则将使用主题的飞溅颜色 [ThemeData.splashColor]。"},{"name":"splashFactory","type":"InteractiveInkFeatureFactory?","desc":"定义飞溅的外观。"},{"name":"enableFeedback","type":"bool","required":true,"desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"是否从语义树中排除此小部件引入的手势。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@template flutter.material.inkwell.onFocusChange} 焦点更改时调用的处理程序。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"canRequestFocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.canRequestFocus}"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@template flutter.material.inkwell.statesController} 表示此小部件在一组 [WidgetState] 方面的交互"},{"name":"hoverDuration","type":"Duration?","desc":"悬停效果动画的持续时间。"}],"id":149,"localName":"水波纹响应","lever":1,"family":1,"linkIds":[150,152],"nodes":[{"file":"node1_base.dart","name":"InkResponse基本事件","desc":["【child】 : 子组件 【Widget】","【onTap】 : 点击事件 【Function()】","【onDoubleTap】 : 双击事件 【Function()】","【onTapCancel】 : 点击取消 【Function()】","【onLongPress】 : 长按事件 【Function()】"]},{"file":"node2_color.dart","name":"InkResponse其他属性","desc":["【child】 : 子组件 【Widget】","【onHighlightChanged】 : 高亮变化回调 【Function(bool)】","【highlightColor】 : 高亮色 【Color】","【splashColor】 : 水波纹色 【Color】","【radius】 : 水波半径 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_en-US.json b/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_en-US.json deleted file mode 100644 index d21dd3b42..000000000 --- a/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InkWell","path":"/src/material/ink_well.dart","parents":["InkResponse","StatelessWidget","Widget"],"desc":" A rectangular area of a [Material] that responds to touch.","fields":[],"id":150,"lever":4,"family":1,"linkIds":[149,152],"nodes":[{"file":"node1_base.dart","name":"InkWell Basic Events","desc":["【child】: Child component 【Widget】","【onTap】: Tap event 【Function()】","【onDoubleTap】: Double tap event 【Function()】","【onTapCancel】: Tap cancel 【Function()】","【onLongPress】: Long press event 【Function()】"]},{"file":"node2_color.dart","name":"InkWell Other Properties","desc":["【child】: Child component 【Widget】","【onHighlightChanged】: Highlight change callback 【Function(bool)】","【highlightColor】: Highlight color 【Color】","【splashColor】: Ripple color 【Color】","【radius】: Ripple radius 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_zh-CN.json deleted file mode 100644 index 3fdfbdd42..000000000 --- a/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InkWell","path":"/src/material/ink_well.dart","parents":["InkResponse","StatelessWidget","Widget"],"desc":"响应触摸的 [Material] 矩形区域。","fields":[],"id":150,"localName":"水波纹","lever":4,"family":1,"linkIds":[149,152],"nodes":[{"file":"node1_base.dart","name":"InkWell基本事件","desc":["【child】 : 子组件 【Widget】","【onTap】 : 点击事件 【Function()】","【onDoubleTap】 : 双击事件 【Function()】","【onTapCancel】 : 点击取消 【Function()】","【onLongPress】 : 长按事件 【Function()】"]},{"file":"node2_color.dart","name":"InkWell其他属性","desc":["【child】 : 子组件 【Widget】","【onHighlightChanged】 : 高亮变化回调 【Function(bool)】","【highlightColor】 : 高亮色 【Color】","【splashColor】 : 水波纹色 【Color】","【radius】 : 水波半径 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_en-US.json b/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_en-US.json deleted file mode 100644 index 81c98c69c..000000000 --- a/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InputChip","path":"/src/material/input_chip.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design input chip.","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"selected","type":"bool","required":true},{"name":"isEnabled","type":"bool","required":true},{"name":"onSelected","type":"ValueChanged?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":14,"lever":4,"family":0,"linkIds":[11,12,13,15,153],"nodes":[{"file":"node1_base.dart","name":"Can accept click and delete events","desc":["【onPressed】: Click event 【Function()】","【onDeleted】: Delete event 【Function()】"]},{"file":"node2_select.dart","name":"Can accept select event","desc":["【selected】: Whether selected 【bool】","【onSelected】: Select event 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_zh-CN.json deleted file mode 100644 index d7ccd906d..000000000 --- a/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InputChip","path":"/src/material/input_chip.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 输入芯片。","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"selected","type":"bool","required":true},{"name":"isEnabled","type":"bool","required":true},{"name":"onSelected","type":"ValueChanged?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":14,"localName":"综合小条","lever":4,"family":0,"linkIds":[11,12,13,15,153],"nodes":[{"file":"node1_base.dart","name":"可以接受点击、删除事件","desc":["【onPressed】: 点击事件 【Function()】","【onDeleted】: 删除事件 【Function()】"]},{"file":"node2_select.dart","name":"可以接受选中事件","desc":["【selected】: 是否选中 【bool】","【onSelected】: 选中事件 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_en-US.json b/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_en-US.json deleted file mode 100644 index 24707acf2..000000000 --- a/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InputDatePickerFormField","path":"/src/material/input_date_picker_form_field.dart","parents":["StatefulWidget","Widget"],"desc":" A [TextFormField] configured to accept and validate a date entered by a user.","fields":[{"name":"initialDate","type":"DateTime?","desc":"If provided, it will be used as the default value of the field."},{"name":"firstDate","type":"DateTime","required":true,"desc":"The earliest allowable [DateTime] that the user can input."},{"name":"lastDate","type":"DateTime","required":true,"desc":"The latest allowable [DateTime] that the user can input."},{"name":"onDateSubmitted","type":"ValueChanged?","desc":"An optional method to call when the user indicates they are done editing the text in the field. Will only be called if the input represents a valid [DateTime]."},{"name":"onDateSaved","type":"ValueChanged?","desc":"An optional method to call with the final date when the form is saved via [FormState.save]. Will only be called if the input represents a valid [DateTime]."},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"Function to provide full control over which [DateTime] can be selected."},{"name":"errorFormatText","type":"String?","desc":"The error text displayed if the entered date is not in the correct format."},{"name":"errorInvalidText","type":"String?","desc":"The error text displayed if the date is not valid."},{"name":"fieldHintText","type":"String?","desc":"The hint text displayed in the [TextField]."},{"name":"fieldLabelText","type":"String?","desc":"The label text displayed in the [TextField]."},{"name":"keyboardType","type":"TextInputType?","desc":"The keyboard type of the [TextField]."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"acceptEmptyDate","type":"bool","required":true,"desc":"Determines if an empty date would show [errorFormatText] or not."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":434,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_zh-CN.json deleted file mode 100644 index 6d3757e0d..000000000 --- a/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InputDatePickerFormField","path":"/src/material/input_date_picker_form_field.dart","parents":["StatefulWidget","Widget"],"desc":"配置为接受和验证用户输入日期的 [TextFormField]。","fields":[{"name":"initialDate","type":"DateTime?","desc":"如果提供,将用作字段的默认值。"},{"name":"firstDate","type":"DateTime","required":true,"desc":"用户可以输入的最早允许的 [DateTime]。"},{"name":"lastDate","type":"DateTime","required":true,"desc":"用户可以输入的最晚允许的 [DateTime]。"},{"name":"onDateSubmitted","type":"ValueChanged?","desc":"当用户指示他们已完成编辑字段中的文本时调用的可选方法。仅当输入表示有效的 [DateTime] 时才会调用。"},{"name":"onDateSaved","type":"ValueChanged?","desc":"通过 [FormState.save] 保存表单时使用最终日期调用的可选方法。仅当输入表示有效的 [DateTime] 时才会调用。"},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"提供对可选择哪个 [DateTime] 的完全控制的函数。"},{"name":"errorFormatText","type":"String?","desc":"如果输入的日期格式不正确,显示的错误文本。"},{"name":"errorInvalidText","type":"String?","desc":"如果日期无效,显示的错误文本。"},{"name":"fieldHintText","type":"String?","desc":"在 [TextField] 中显示的提示文本。"},{"name":"fieldLabelText","type":"String?","desc":"在 [TextField] 中显示的标签文本。"},{"name":"keyboardType","type":"TextInputType?","desc":"[TextField] 的键盘类型。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"acceptEmptyDate","type":"bool","required":true,"desc":"确定空日期是否会显示 [errorFormatText]。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":434,"localName":"InputDatePickerFormField","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_en-US.json b/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_en-US.json deleted file mode 100644 index 9668cc598..000000000 --- a/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InputDecorator","path":"/src/material/input_decorator.dart","parents":["StatefulWidget","Widget"],"desc":" Defines the appearance of a Material Design text field.","fields":[{"name":"decoration","type":"InputDecoration","required":true,"desc":"The text and styles to use when decorating the child."},{"name":"baseStyle","type":"TextStyle?","desc":"The style on which to base the label, hint, counter, and error styles if the [decoration] does not provide explicit styles."},{"name":"textAlign","type":"TextAlign?","desc":"How the text in the decoration should be aligned horizontally."},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@template flutter.material.InputDecorator.textAlignVertical} How the text should be aligned vertically."},{"name":"isFocused","type":"bool","required":true,"desc":"Whether the input field has focus."},{"name":"isHovering","type":"bool","required":true,"desc":"Whether the input field is being hovered over by a mouse pointer."},{"name":"expands","type":"bool","required":true,"desc":"If true, the height of the input field will be as large as possible."},{"name":"isEmpty","type":"bool","required":true,"desc":"Whether the input field is empty."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":231,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of InputDecorator","desc":["【decoration】: Decoration object 【InputDecoration】","【textAlign】: Text alignment 【TextAlign】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_zh-CN.json deleted file mode 100644 index fee4e3c8d..000000000 --- a/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InputDecorator","path":"/src/material/input_decorator.dart","parents":["StatefulWidget","Widget"],"desc":"定义 Material Design 文本字段的外观。","fields":[{"name":"decoration","type":"InputDecoration","required":true,"desc":"装饰子项时使用的文本和样式。"},{"name":"baseStyle","type":"TextStyle?","desc":"如果 [decoration] 不提供显式样式,则作为标签、提示、计数器和错误样式基础的样式。"},{"name":"textAlign","type":"TextAlign?","desc":"装饰中的文本应如何水平对齐。"},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@template flutter.material.InputDecorator.textAlignVertical} 文本应如何垂直对齐。"},{"name":"isFocused","type":"bool","required":true,"desc":"输入字段是否具有焦点。"},{"name":"isHovering","type":"bool","required":true,"desc":"输入字段是否被鼠标指针悬停。"},{"name":"expands","type":"bool","required":true,"desc":"如果为 true,输入字段的高度将尽可能大。"},{"name":"isEmpty","type":"bool","required":true,"desc":"输入字段是否为空。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":231,"localName":"输入装饰","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"InputDecorator基本使用","desc":["【decoration】 : 装饰对象 【InputDecoration】","【textAlign】 : 文字对齐方式 【TextAlign】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_en-US.json b/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_en-US.json deleted file mode 100644 index 8d98bd925..000000000 --- a/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InspectorButton","path":"/src/widgets/widget_inspector.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":" An abstract base class for creating Material or Cupertino-styled inspector buttons.","fields":[{"name":"onPressed","type":"VoidCallback","required":true,"desc":"The callback that is called when the button is tapped."},{"name":"semanticLabel","type":"String","required":true,"desc":"The semantic label for the button, used for accessibility."},{"name":"icon","type":"IconData","required":true,"desc":"The icon to display within the button."},{"name":"buttonKey","type":"GlobalKey?","desc":"An optional key to identify the button widget."},{"name":"variant","type":"InspectorButtonVariant","required":true,"desc":"The visual and behavioral variant of the button."},{"name":"toggledOn","type":"bool?","desc":"For [InspectorButtonVariant.toggle] buttons, this determines if the button is currently in the \"on\" (true) or \"off\" (false) state."}],"id":435,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_zh-CN.json deleted file mode 100644 index 2a9a49fc6..000000000 --- a/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InspectorButton","path":"/src/widgets/widget_inspector.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":"用于创建 Material 或 Cupertino 样式检查器按钮的抽象基类。","fields":[{"name":"onPressed","type":"VoidCallback","required":true,"desc":"点击按钮时调用的回调。"},{"name":"semanticLabel","type":"String","required":true,"desc":"按钮的语义标签,用于辅助功能。"},{"name":"icon","type":"IconData","required":true,"desc":"在按钮内显示的图标。"},{"name":"buttonKey","type":"GlobalKey?","desc":"用于标识按钮小部件的可选键。"},{"name":"variant","type":"InspectorButtonVariant","required":true,"desc":"按钮的视觉和行为变体。"},{"name":"toggledOn","type":"bool?","desc":"对于 [InspectorButtonVariant.toggle] 按钮,这确定按钮当前是处于"}],"id":435,"localName":"InspectorButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_en-US.json b/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_en-US.json deleted file mode 100644 index 029b4829d..000000000 --- a/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InteractiveViewer","path":"/src/widgets/interactive_viewer.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that enables pan and zoom interactions with its child.","fields":[{"name":"alignment","type":"Alignment?","desc":"The alignment of the child's origin, relative to the size of the box."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"If set to [Clip.none], the child may extend beyond the size of the InteractiveViewer, but it will not receive gestures in these areas. Be sure that the InteractiveViewer is the desired size when using [Clip.none]."},{"name":"panAxis","type":"PanAxis","required":true,"desc":"When set to [PanAxis.aligned], panning is only allowed in the horizontal axis or the vertical axis, diagonal panning is not allowed."},{"name":"boundaryMargin","type":"EdgeInsets","required":true,"desc":"A margin for the visible boundaries of the child."},{"name":"builder","type":"InteractiveViewerWidgetBuilder?","desc":"Builds the child of this widget."},{"name":"child","type":"Widget?","desc":"The child [Widget] that is transformed by InteractiveViewer."},{"name":"constrained","type":"bool","required":true,"desc":"Whether the normal size constraints at this point in the widget tree are applied to the child."},{"name":"panEnabled","type":"bool","required":true,"desc":"If false, the user will be prevented from panning."},{"name":"scaleEnabled","type":"bool","required":true,"desc":"If false, the user will be prevented from scaling."},{"name":"trackpadScrollCausesScale","type":"bool","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollCausesScale}"},{"name":"scaleFactor","type":"double","required":true,"desc":"Determines the amount of scale to be performed per pointer scroll."},{"name":"maxScale","type":"double","required":true,"desc":"The maximum allowed scale."},{"name":"minScale","type":"double","required":true,"desc":"The minimum allowed scale."},{"name":"interactionEndFrictionCoefficient","type":"double","required":true,"desc":"Changes the deceleration behavior after a gesture."},{"name":"onInteractionEnd","type":"GestureScaleEndCallback?","desc":"Called when the user ends a pan or scale gesture on the widget."},{"name":"onInteractionStart","type":"GestureScaleStartCallback?","desc":"Called when the user begins a pan or scale gesture on the widget."},{"name":"onInteractionUpdate","type":"GestureScaleUpdateCallback?","desc":"Called when the user updates a pan or scale gesture on the widget."},{"name":"transformationController","type":"TransformationController?","desc":"A [TransformationController] for the transformation performed on the child."}],"id":351,"lever":4,"family":1,"linkIds":[147,146,78],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of InteractiveViewer","desc":["【alignPanAxis】: Drag along the axis 【bool】","【boundaryMargin】: Boundary margin 【EdgeInsets】","【panEnabled】: Whether panning is enabled 【bool】","【scaleEnabled】: Whether scaling is enabled 【bool】","【maxScale】: Maximum zoom scale 【double】","【minScale】: Minimum zoom scale 【double】","【onInteractionEnd】: Interaction end callback 【GestureScaleEndCallback】","【onInteractionStart】: Interaction start callback 【GestureScaleStartCallback】","【onInteractionUpdate】: Interaction update callback 【GestureScaleUpdateCallback】","【child】: Cursor color 【Widget】"]},{"file":"node2_constrained.dart","name":"Constrained Property Test","desc":["【constrained】: Constrained 【bool】"]},{"file":"node3_controller.dart","name":"Usage of Transformation Controller","desc":["【transformationController】: Transformation controller 【TransformationController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_zh-CN.json deleted file mode 100644 index 1b867f28b..000000000 --- a/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InteractiveViewer","path":"/src/widgets/interactive_viewer.dart","parents":["StatefulWidget","Widget"],"desc":"启用与其子项的平移和缩放交互的小部件。","fields":[{"name":"alignment","type":"Alignment?","desc":"子项原点相对于框大小的对齐方式。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"如果设置为 [Clip.none],子项可能会超出 InteractiveViewer 的大小,但在这些区域中不会接收手势。使用 [Clip.none] 时确保 InteractiveViewer 是所需的大小。"},{"name":"panAxis","type":"PanAxis","required":true,"desc":"当设置为 [PanAxis.aligned] 时,平移仅允许在水平轴或垂直轴上,不允许对角线平移。"},{"name":"boundaryMargin","type":"EdgeInsets","required":true,"desc":"子项可见边界的边距。"},{"name":"builder","type":"InteractiveViewerWidgetBuilder?","desc":"构建此小部件的子项。"},{"name":"child","type":"Widget?","desc":"由 InteractiveViewer 变换的子 [Widget]。"},{"name":"constrained","type":"bool","required":true,"desc":"小部件树中此点的正常大小约束是否应用于子项。"},{"name":"panEnabled","type":"bool","required":true,"desc":"如果为 false,将阻止用户平移。"},{"name":"scaleEnabled","type":"bool","required":true,"desc":"如果为 false,将阻止用户缩放。"},{"name":"trackpadScrollCausesScale","type":"bool","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollCausesScale}"},{"name":"scaleFactor","type":"double","required":true,"desc":"确定每次指针滚动要执行的缩放量。"},{"name":"maxScale","type":"double","required":true,"desc":"允许的最大缩放。"},{"name":"minScale","type":"double","required":true,"desc":"允许的最小缩放。"},{"name":"interactionEndFrictionCoefficient","type":"double","required":true,"desc":"更改手势后的减速行为。"},{"name":"onInteractionEnd","type":"GestureScaleEndCallback?","desc":"用户在小部件上结束平移或缩放手势时调用。"},{"name":"onInteractionStart","type":"GestureScaleStartCallback?","desc":"用户在小部件上开始平移或缩放手势时调用。"},{"name":"onInteractionUpdate","type":"GestureScaleUpdateCallback?","desc":"用户在小部件上更新平移或缩放手势时调用。"},{"name":"transformationController","type":"TransformationController?","desc":"对子项执行变换的 [TransformationController]。"}],"id":351,"localName":"交互视图","lever":4,"family":1,"linkIds":[147,146,78],"nodes":[{"file":"node1_base.dart","name":"InteractiveViewer基本使用","desc":["【alignPanAxis】 : 沿轴拖动 【bool】","【boundaryMargin】 : 边界边距 【EdgeInsets】","【panEnabled】 : 是否可平移 【bool】","【scaleEnabled】 : 是否可缩放 【bool】","【maxScale】 : 最大放大倍数 【double】","【minScale】 : 最小缩小倍数 【double】","【onInteractionEnd】 : 交互结束回调 【GestureScaleEndCallback】","【onInteractionStart】 : 交互开始回调 【GestureScaleStartCallback】","【onInteractionUpdate】 : 交互更新回调 【GestureScaleUpdateCallback】","【child】 : 游标颜色 【Widget】"]},{"file":"node2_constrained.dart","name":"constrained属性测试","desc":["【constrained】 : 受约束的 【bool】"]},{"file":"node3_controller.dart","name":"变换控制器的使用","desc":["【transformationController】 : 变换控制器 【TransformationController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_en-US.json b/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_en-US.json deleted file mode 100644 index 3d706cf08..000000000 --- a/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IntrinsicHeight","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that sizes its child to the child's intrinsic height.","fields":[],"id":298,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of IntrinsicHeight","desc":["【child】: Child component 【Widget】","As shown in the example: the height on the left can vary, the height in the middle is fixed, and the height on the right takes the highest value of the previous two."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_zh-CN.json deleted file mode 100644 index 36422bd4f..000000000 --- a/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IntrinsicHeight","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项大小调整为子项固有高度的小部件。","fields":[],"id":298,"localName":"固有高","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IntrinsicHeight基本使用","desc":["【child】 : 子组件 【Widget】","如示例:左侧高可变动,中间高固定,右侧高取前两者的最高值。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_en-US.json b/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_en-US.json deleted file mode 100644 index a942b2377..000000000 --- a/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IntrinsicWidth","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that sizes its child to the child's maximum intrinsic width.","fields":[{"name":"stepWidth","type":"double?","desc":"If non-null, force the child's width to be a multiple of this value."},{"name":"stepHeight","type":"double?","desc":"If non-null, force the child's height to be a multiple of this value."}],"id":297,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of IntrinsicWidth","desc":["【child】: Child component 【Widget】","As shown in the example: the width above can be changed, the width in the middle is fixed, and the width below takes the highest value of the former two."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_zh-CN.json deleted file mode 100644 index aa0f3c4b0..000000000 --- a/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IntrinsicWidth","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项大小调整为子项最大固有宽度的小部件。","fields":[{"name":"stepWidth","type":"double?","desc":"如果非空,强制子项的宽度为此值的倍数。"},{"name":"stepHeight","type":"double?","desc":"如果非空,强制子项的高度为此值的倍数。"}],"id":297,"localName":"固有宽","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IntrinsicWidth基本使用","desc":["【child】 : 子组件 【Widget】","如示例:上面宽可变动,中间宽固定,下面宽取前两者的最高值。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_en-US.json b/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_en-US.json deleted file mode 100644 index 414ab5c1f..000000000 --- a/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"KeepAlive","path":"/src/widgets/sliver.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":" Mark a child as needing to stay alive even when it's in a lazy list that would otherwise remove it.","fields":[{"name":"keepAlive","type":"bool","required":true,"desc":"Whether to keep the child alive."}],"id":316,"lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to KeepAlive","desc":["【child】: *Child component 【Widget】","【keepAlive】: *Whether to keep alive 【bool】","In the Flutter framework layer, it is only used in AutomaticKeepAlive. The source code also mentions that it is rarely used alone. This example demonstrates the state keep-alive of ListView items."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_zh-CN.json b/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_zh-CN.json deleted file mode 100644 index 294c2f261..000000000 --- a/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"KeepAlive","path":"/src/widgets/sliver.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":"将子项标记为需要保持活动状态,即使它在否则会删除它的惰性列表中。","fields":[{"name":"keepAlive","type":"bool","required":true,"desc":"是否保持子项活动。"}],"id":316,"localName":"保活","lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"KeepAlive 介绍","desc":["【child】 : *子组件 【Widget】","【keepAlive】 : *是否保活 【bool】","在 flutter 框架层中,只用于 AutomaticKeepAlive 中,源码中也说很少单独使用它。该示例展示出 ListView 条目的状态保活。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_en-US.json b/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_en-US.json deleted file mode 100644 index c82ba710f..000000000 --- a/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"KeyboardListener","path":"/src/widgets/keyboard_listener.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that calls a callback whenever the user presses or releases a key on a keyboard.","fields":[{"name":"focusNode","type":"FocusNode","required":true,"desc":"Controls whether this widget has keyboard focus."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"},{"name":"onKeyEvent","type":"ValueChanged?","desc":"Called whenever this widget receives a keyboard event."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":284,"lever":5,"family":1,"linkIds":[282,283],"nodes":[{"file":"node1.dart","name":"Listen to Keyboard Events","desc":["In the example, click the area to gain focus, and then press the keyboard to see the event trigger information.","【focusNode】 : Focus 【FocusNode】","【autofocus】 : Whether to auto-focus 【bool】","【includeSemantics】 : Include semantics 【bool】","【onKeyEvent】 : Key callback event 【ValueChanged?】","【child】 : Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_zh-CN.json deleted file mode 100644 index b54a38cc0..000000000 --- a/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"KeyboardListener","path":"/src/widgets/keyboard_listener.dart","parents":["StatelessWidget","Widget"],"desc":"每当用户在键盘上按下或释放键时调用回调的小部件。","fields":[{"name":"focusNode","type":"FocusNode","required":true,"desc":"控制此小部件是否具有键盘焦点。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"},{"name":"onKeyEvent","type":"ValueChanged?","desc":"每当此小部件接收到键盘事件时调用。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":284,"localName":"键盘监听器","lever":5,"family":1,"linkIds":[282,283],"nodes":[{"file":"node1.dart","name":"监听键盘事件","desc":["案例中区域点击获取焦点,然后敲击键盘可以看到事件触发信息。","【focusNode】 : 焦点 【FocusNode】","【autofocus】 : 是否自动聚焦 【bool】","【includeSemantics】 : 包含语义 【bool】","【onKeyEvent】 : 按键回调事件 【ValueChanged?】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_en-US.json b/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_en-US.json deleted file mode 100644 index d38e1b248..000000000 --- a/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"KeyedSubtree","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that builds its child.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":436,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_zh-CN.json b/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_zh-CN.json deleted file mode 100644 index e2b145a4d..000000000 --- a/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"KeyedSubtree","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":"构建其子项的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":436,"localName":"KeyedSubtree","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_en-US.json deleted file mode 100644 index f56038d38..000000000 --- a/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LayoutBuilder","path":"/src/widgets/layout_builder.dart","parents":["ConstrainedLayoutBuilder","AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":" Builds a widget tree that can depend on the parent widget's size.","fields":[],"id":287,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Understanding of LayoutBuilder","desc":["【builder】: Layout Constructor 【LayoutWidgetBuilder】"]},{"file":"node2_fit.dart","name":"Adaptive Layout of LayoutBuilder","desc":["Can design component display based on the size of the area.","For example, displaying different layout structures in different width areas.","After all, it is not easy to obtain the parent component area in many places, and using LayoutBuilder will be very refreshing."]},{"file":"node3_expend.dart","name":"Expanded Use of LayoutBuilder","desc":["Use TextPainter to detect the number of lines of text to implement expand or collapse functionality."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_zh-CN.json deleted file mode 100644 index 96774189a..000000000 --- a/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LayoutBuilder","path":"/src/widgets/layout_builder.dart","parents":["ConstrainedLayoutBuilder","AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":"构建可以依赖于父小部件大小的小部件树。","fields":[],"id":287,"localName":"布局构造器","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"LayoutBuilder基本认识","desc":["【builder】 : 布局构造器 【LayoutWidgetBuilder】"]},{"file":"node2_fit.dart","name":"LayoutBuilder的适应布局","desc":["可以根据区域的大小进行组件展示设计。\"","比如在不同的宽度区域显示不同的布局结构。\"","毕竟很多地方不容易获取父组件区域,使用LayoutBuilder就会非常爽口。"]},{"file":"node3_expend.dart","name":"LayoutBuilder的展开使用","desc":["使用TextPainter来检测文字的行数,实现展开或收起功能。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_en-US.json b/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_en-US.json deleted file mode 100644 index d407ba313..000000000 --- a/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LayoutId","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":" Metadata for identifying children in a [CustomMultiChildLayout].","fields":[{"name":"id","type":"Object","required":true,"desc":"An object representing the identity of this child."}],"id":315,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"LayoutId Usage Scenarios","desc":["【id】 : Identifier id 【Object】","【child】 : Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_zh-CN.json deleted file mode 100644 index 3e93ccd5a..000000000 --- a/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LayoutId","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":"用于在 [CustomMultiChildLayout] 中标识子项的元数据。","fields":[{"name":"id","type":"Object","required":true,"desc":"表示此子项身份的对象。"}],"id":315,"localName":"布局Id","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"LayoutId使用场景","desc":["【id】 : 标识id 【Object】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_en-US.json deleted file mode 100644 index 95edcedf8..000000000 --- a/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LeafRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A superclass for [RenderObjectWidget]s that configure [RenderObject] subclasses that have no children.","fields":[],"id":437,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_zh-CN.json deleted file mode 100644 index ce03dba47..000000000 --- a/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LeafRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"配置没有子项的 [RenderObject] 子类的 [RenderObjectWidget] 的超类。","fields":[],"id":437,"localName":"LeafRenderObjectWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_en-US.json b/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_en-US.json deleted file mode 100644 index 3290afeb2..000000000 --- a/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LicensePage","path":"/src/material/about.dart","parents":["StatefulWidget","Widget"],"desc":" A page that shows licenses for software used by the application.","fields":[{"name":"applicationName","type":"String?","desc":"The name of the application."},{"name":"applicationVersion","type":"String?","desc":"The version of this build of the application."},{"name":"applicationIcon","type":"Widget?","desc":"The icon to show below the application name."},{"name":"applicationLegalese","type":"String?","desc":"A string to show in small print."}],"id":145,"lever":1,"family":1,"linkIds":[130,193],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of LicensePage","desc":["【applicationIcon】: Top-left icon 【Widget】","【applicationVersion】: Version number 【String】","【applicationName】: Application name 【String】","【applicationLegalese】: Application legalese 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_zh-CN.json deleted file mode 100644 index d26b89330..000000000 --- a/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LicensePage","path":"/src/material/about.dart","parents":["StatefulWidget","Widget"],"desc":"显示应用程序使用的软件许可证的页面。","fields":[{"name":"applicationName","type":"String?","desc":"应用程序的名称。"},{"name":"applicationVersion","type":"String?","desc":"此应用程序构建的版本。"},{"name":"applicationIcon","type":"Widget?","desc":"在应用程序名称下方显示的图标。"},{"name":"applicationLegalese","type":"String?","desc":"以小字体显示的字符串。"}],"id":145,"localName":"证书页","lever":1,"family":1,"linkIds":[130,193],"nodes":[{"file":"node1_base.dart","name":"LicensePage基本使用","desc":["【applicationIcon】 : 左上图标 【Widget】","【applicationVersion】 : 版本号 【String】","【applicationName】 : 应用名 【String】","【applicationLegalese】 : 应用律术 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_en-US.json deleted file mode 100644 index 723574f5f..000000000 --- a/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LimitedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A box that limits its size only when it's unconstrained.","fields":[{"name":"maxWidth","type":"double","required":true,"desc":"The maximum width limit to apply in the absence of a [BoxConstraints.maxWidth] constraint."},{"name":"maxHeight","type":"double","required":true,"desc":"The maximum height limit to apply in the absence of a [BoxConstraints.maxHeight] constraint."}],"id":79,"lever":3,"family":2,"linkIds":[80],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of LimitedBox","desc":["【child】: Child component 【Widget】","【maxHeight】: Maximum height 【double】","【maxWidth】: Maximum width 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_zh-CN.json deleted file mode 100644 index 9aaedc3e6..000000000 --- a/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LimitedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"仅在无约束时限制其大小的框。","fields":[{"name":"maxWidth","type":"double","required":true,"desc":"在没有 [BoxConstraints.maxWidth] 约束时应用的最大宽度限制。"},{"name":"maxHeight","type":"double","required":true,"desc":"在没有 [BoxConstraints.maxHeight] 约束时应用的最大高度限制。"}],"id":79,"localName":"限制盒","lever":3,"family":2,"linkIds":[80],"nodes":[{"file":"node1_base.dart","name":"LimitedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【maxHeight】 : 最大高 【double】","【maxWidth】 : 最大宽 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_en-US.json deleted file mode 100644 index e600f5c2f..000000000 --- a/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LinearProgressIndicator","path":"/src/material/progress_indicator.dart","parents":["ProgressIndicator","StatefulWidget","Widget"],"desc":" A Material Design linear progress indicator, also known as a progress bar.","fields":[{"name":"minHeight","type":"double?","desc":"{@template flutter.material.LinearProgressIndicator.minHeight} The minimum height of the line used to draw the linear indicator."},{"name":"borderRadius","type":"BorderRadiusGeometry?","desc":"The border radius of both the indicator and the track."},{"name":"stopIndicatorColor","type":"Color?","desc":"The color of the stop indicator."},{"name":"stopIndicatorRadius","type":"double?","desc":"The radius of the stop indicator."},{"name":"trackGap","type":"double?","desc":"The gap between the indicator and the track."},{"name":"year2023","type":"bool?","desc":"When true, the [LinearProgressIndicator] will use the 2023 Material Design 3 appearance."}],"id":47,"lever":3,"family":1,"linkIds":[46,48],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of LinearProgressIndicator","desc":["【value】: Progress 【double】","【backgroundColor】: Background Color 【Color】","【valueColor】: Progress Color 【Animation】"," It will keep looping when the value is null"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_zh-CN.json deleted file mode 100644 index 2ebfa9ea7..000000000 --- a/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LinearProgressIndicator","path":"/src/material/progress_indicator.dart","parents":["ProgressIndicator","StatefulWidget","Widget"],"desc":"Material Design 线性进度指示器,也称为进度条。","fields":[{"name":"minHeight","type":"double?","desc":"{@template flutter.material.LinearProgressIndicator.minHeight} 用于绘制线性指示器的线的最小高度。"},{"name":"borderRadius","type":"BorderRadiusGeometry?","desc":"指示器和轨道的边框半径。"},{"name":"stopIndicatorColor","type":"Color?","desc":"停止指示器的颜色。"},{"name":"stopIndicatorRadius","type":"double?","desc":"停止指示器的半径。"},{"name":"trackGap","type":"double?","desc":"指示器和轨道之间的间隙。"},{"name":"year2023","type":"bool?","desc":"当为 true 时,[LinearProgressIndicator] 将使用 2023 Material Design 3 外观。"}],"id":47,"localName":"水平进度","lever":3,"family":1,"linkIds":[46,48],"nodes":[{"file":"node1_base.dart","name":"LinearProgressIndicator基本使用","desc":["【value】 : 进度 【double】","【backgroundColor】 : 背景色 【Color】","【valueColor】 : 进度颜色 【Animation】"," value为null时会不停循环"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_en-US.json b/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_en-US.json deleted file mode 100644 index f6746c4a2..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListBody","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that arranges its children sequentially along a given axis, forcing them to the dimension of the parent in the other axis.","fields":[{"name":"mainAxis","type":"Axis","required":true,"desc":"The direction to use as the main axis."},{"name":"reverse","type":"bool","required":true,"desc":"Whether the list body positions children in the reading direction."}],"id":342,"lever":4,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ListView","desc":["【mainAxis】: Main axis direction 【Axis】","【reverse】: Whether to reverse 【bool】","【children】: Child component collection 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_zh-CN.json deleted file mode 100644 index 4c6d7ec4d..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListBody","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"沿给定轴顺序排列其子项的小部件,强制它们在另一个轴上符合父级的尺寸。","fields":[{"name":"mainAxis","type":"Axis","required":true,"desc":"用作主轴的方向。"},{"name":"reverse","type":"bool","required":true,"desc":"列表主体是否在阅读方向上定位子项。"}],"id":342,"localName":"列表体","lever":4,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ListView的基本使用","desc":["【mainAxis】 : 主轴方向 【Axis】","【reverse】: 是否反向 【bool】","【children】: 子组件集 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_en-US.json deleted file mode 100644 index bdb71dbc9..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListTile","path":"/src/material/list_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A single fixed-height row that typically contains some text as well as a leading or trailing icon.","fields":[{"name":"leading","type":"Widget?","desc":"A widget to display before the title."},{"name":"title","type":"Widget?","desc":"The primary content of the list tile."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"trailing","type":"Widget?","desc":"A widget to display after the title."},{"name":"isThreeLine","type":"bool?","desc":"Whether this list tile is intended to display three lines of text."},{"name":"dense","type":"bool?","desc":"{@template flutter.material.ListTile.dense} Whether this list tile is part of a vertically dense list."},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the list tile's layout will be."},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.ListTile.shape} Defines the tile's [InkWell.customBorder] and [Ink.decoration] shape. {@endtemplate}"},{"name":"selectedColor","type":"Color?","desc":"Defines the color used for icons and text when the list tile is selected."},{"name":"iconColor","type":"Color?","desc":"Defines the default color for [leading] and [trailing] icons."},{"name":"textColor","type":"Color?","desc":"Defines the text color for the [title], [subtitle], [leading], and [trailing]."},{"name":"titleTextStyle","type":"TextStyle?","desc":"The text style for ListTile's [title]."},{"name":"subtitleTextStyle","type":"TextStyle?","desc":"The text style for ListTile's [subtitle]."},{"name":"leadingAndTrailingTextStyle","type":"TextStyle?","desc":"The text style for ListTile's [leading] and [trailing]."},{"name":"style","type":"ListTileStyle?","desc":"Defines the font used for the [title]."},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"The tile's internal padding."},{"name":"enabled","type":"bool","required":true,"desc":"Whether this list tile is interactive."},{"name":"onTap","type":"GestureTapCallback?","desc":"Called when the user taps this list tile."},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"Called when the user long-presses on this list tile."},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.ListTile.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"selected","type":"bool","required":true,"desc":"If this tile is also [enabled] then icons and text are rendered with the same color."},{"name":"focusColor","type":"Color?","desc":"The color for the tile's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"The color for the tile's [Material] when a pointer is hovering over it."},{"name":"splashColor","type":"Color?","desc":"The color of splash for the tile's [Material]."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tileColor","type":"Color?","desc":"{@template flutter.material.ListTile.tileColor} Defines the background color of `ListTile` when [selected] is false."},{"name":"selectedTileColor","type":"Color?","desc":"Defines the background color of `ListTile` when [selected] is true."},{"name":"enableFeedback","type":"bool?","desc":"{@template flutter.material.ListTile.enableFeedback} Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"horizontalTitleGap","type":"double?","desc":"The horizontal gap between the titles and the leading/trailing widgets."},{"name":"minVerticalPadding","type":"double?","desc":"The minimum padding on the top and bottom of the title and subtitle widgets."},{"name":"minLeadingWidth","type":"double?","desc":"The minimum width allocated for the [ListTile.leading] widget."},{"name":"minTileHeight","type":"double?","desc":"{@template flutter.material.ListTile.minTileHeight} The minimum height allocated for the [ListTile] widget."},{"name":"titleAlignment","type":"ListTileTitleAlignment?","desc":"Defines how [ListTile.leading] and [ListTile.trailing] are vertically aligned relative to the [ListTile]'s titles ([ListTile.title] and [ListTile.subtitle])."},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"Whether to add button:true to the semantics if onTap is provided. This is a temporary flag to help changing the behavior of ListTile onTap semantics."}],"id":16,"lever":3,"family":0,"linkIds":[162,334],"nodes":[{"file":"node1_base.dart","name":"The basic representation of ListTile is as follows","desc":["【leading】: Left component 【Widget】","【title】: Top middle component 【Widget】","【subtitle】: Bottom middle component 【Widget】","【trailing】: Trailing component 【Widget】","【contentPadding】: Inner padding 【EdgeInsetsGeometry】","【onLongPress】: Click event 【Function()】"]},{"file":"node2_select.dart","name":"ListTile selection effect and long press event","desc":["【selected】: Whether selected 【bool】","【onTap】: Click event 【Function()】"]},{"file":"node3_dense.dart","name":"Dense property of ListTile","desc":["【dense】: Whether dense 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_zh-CN.json deleted file mode 100644 index d9776111b..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListTile","path":"/src/material/list_tile.dart","parents":["StatelessWidget","Widget"],"desc":"单个固定高度行,通常包含一些文本以及前导或尾随图标。","fields":[{"name":"leading","type":"Widget?","desc":"在标题前显示的小部件。"},{"name":"title","type":"Widget?","desc":"列表磁贴的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"trailing","type":"Widget?","desc":"在标题后显示的小部件。"},{"name":"isThreeLine","type":"bool?","desc":"此列表磁贴是否旨在显示三行文本。"},{"name":"dense","type":"bool?","desc":"{@template flutter.material.ListTile.dense} 此列表磁贴是否是垂直密集列表的一部分。"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义列表磁贴布局的紧凑程度。"},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.ListTile.shape} 定义磁贴的 [InkWell.customBorder] 和 [Ink.decoration] 形状。{@endtemplate}"},{"name":"selectedColor","type":"Color?","desc":"定义选择列表磁贴时用于图标和文本的颜色。"},{"name":"iconColor","type":"Color?","desc":"定义 [leading] 和 [trailing] 图标的默认颜色。"},{"name":"textColor","type":"Color?","desc":"定义 [title]、[subtitle]、[leading] 和 [trailing] 的文本颜色。"},{"name":"titleTextStyle","type":"TextStyle?","desc":"ListTile 的 [title] 的文本样式。"},{"name":"subtitleTextStyle","type":"TextStyle?","desc":"ListTile 的 [subtitle] 的文本样式。"},{"name":"leadingAndTrailingTextStyle","type":"TextStyle?","desc":"ListTile 的 [leading] 和 [trailing] 的文本样式。"},{"name":"style","type":"ListTileStyle?","desc":"定义 [title] 使用的字体。"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"磁贴的内部内边距。"},{"name":"enabled","type":"bool","required":true,"desc":"此列表磁贴是否可交互。"},{"name":"onTap","type":"GestureTapCallback?","desc":"用户点击此列表磁贴时调用。"},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"用户长按此列表磁贴时调用。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.ListTile.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"selected","type":"bool","required":true,"desc":"如果此磁贴也是 [enabled],则图标和文本以相同颜色渲染。"},{"name":"focusColor","type":"Color?","desc":"磁贴具有输入焦点时其 [Material] 的颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在磁贴上时其 [Material] 的颜色。"},{"name":"splashColor","type":"Color?","desc":"磁贴的 [Material] 的飞溅颜色。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tileColor","type":"Color?","desc":"{@template flutter.material.ListTile.tileColor} 当 [selected] 为 false 时定义 `ListTile` 的背景颜色。"},{"name":"selectedTileColor","type":"Color?","desc":"当 [selected] 为 true 时定义 `ListTile` 的背景颜色。"},{"name":"enableFeedback","type":"bool?","desc":"{@template flutter.material.ListTile.enableFeedback} 检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"horizontalTitleGap","type":"double?","desc":"标题和前导/尾随小部件之间的水平间隙。"},{"name":"minVerticalPadding","type":"double?","desc":"标题和副标题小部件顶部和底部的最小内边距。"},{"name":"minLeadingWidth","type":"double?","desc":"为 [ListTile.leading] 小部件分配的最小宽度。"},{"name":"minTileHeight","type":"double?","desc":"{@template flutter.material.ListTile.minTileHeight} 为 [ListTile] 小部件分配的最小高度。"},{"name":"titleAlignment","type":"ListTileTitleAlignment?","desc":"定义 [ListTile.leading] 和 [ListTile.trailing] 相对于 [ListTile] 的标题([ListTile.title] 和 [ListTile.subtitle])如何垂直对齐。"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"如果提供了 onTap,是否向语义添加 button:true。这是一个临时标志,用于帮助更改 ListTile onTap 语义的行为。"}],"id":16,"localName":"列表瓦片","lever":3,"family":0,"linkIds":[162,334],"nodes":[{"file":"node1_base.dart","name":"ListTile的基本表现如下","desc":["【leading】: 左侧组件 【Widget】","【title】: 中间上组件 【Widget】","【subtitle】: 中间下组件 【Widget】","【trailing】: 尾组件 【Widget】","【contentPadding】: 内边距 【EdgeInsetsGeometry】","【onLongPress】: 点击事件 【Function()】"]},{"file":"node2_select.dart","name":"ListTile选中效果和长按事件","desc":["【selected】: 是否选中 【bool】","【onTap】: 点击事件 【Function()】"]},{"file":"node3_dense.dart","name":"ListTile的密排属性","desc":["【dense】: 是否密排 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_en-US.json deleted file mode 100644 index ee636e467..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListTileTheme","path":"/src/material/list_tile_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines color and style parameters for [ListTile]s in this widget's subtree.","fields":[],"id":334,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ListTileTheme","desc":["You can specify the ListTileThemeData properties to set default styles for descendant ListTile components, such as styles, colors, decorations, margins, etc. You can also use ListTileTheme.of to get the theme properties of ListTile."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_zh-CN.json deleted file mode 100644 index b0814aa12..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListTileTheme","path":"/src/material/list_tile_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [ListTile] 定义颜色和样式参数的继承小部件。","fields":[],"id":334,"localName":"ListTile主题","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ListTileTheme基本使用","desc":["可指定ListTileThemeData数据属性为【后代】的ListTile组件设置默认样式,如样式、颜色、装饰、边距等。也可以用ListTileTheme.of获取ListTile的主题属性。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListView/ListView_en-US.json b/modules/widget_system/widgets/doc/widgets/ListView/ListView_en-US.json deleted file mode 100644 index 4e84ed65d..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListView/ListView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListView","path":"/src/widgets/scroll_view.dart","parents":["BoxScrollView","ScrollView","StatelessWidget","Widget"],"desc":" A scrollable list of widgets arranged linearly.","fields":[{"name":"itemExtent","type":"double?","desc":"{@template flutter.widgets.list_view.itemExtent} If non-null, forces the children to have the given extent in the scroll direction."},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@template flutter.widgets.list_view.itemExtentBuilder} If non-null, forces the children to have the corresponding extent returned by the builder."},{"name":"prototypeItem","type":"Widget?","desc":"{@template flutter.widgets.list_view.prototypeItem} If non-null, forces the children to have the same extent as the given widget in the scroll direction."},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"A delegate that provides the children for the [ListView]."}],"id":162,"lever":5,"family":0,"linkIds":[16,163],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ListView","desc":["【children】 : List of child components 【List】","【padding】 : Padding 【EdgeInsetsGeometry】"]},{"file":"node2_direction.dart","name":"Horizontal Scrolling of ListView","desc":["【scrollDirection】 : Scroll direction 【Axis】","【reverse】 : Whether to scroll in reverse 【bool】","【shrinkWrap】 : Whether to wrap when unbounded 【bool】"]},{"file":"node3_builder.dart","name":"ListView.builder Construction","desc":["【itemCount】 : Number of items 【int】","【itemBuilder】 : Item builder 【IndexedWidgetBuilder】"]},{"file":"node4_separated.dart","name":"ListView.separated Construction","desc":["【separatorBuilder】 : Item builder 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListView/ListView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListView/ListView_zh-CN.json deleted file mode 100644 index ea88e0865..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListView/ListView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListView","path":"/src/widgets/scroll_view.dart","parents":["BoxScrollView","ScrollView","StatelessWidget","Widget"],"desc":"线性排列的可滚动小部件列表。","fields":[{"name":"itemExtent","type":"double?","desc":"{@template flutter.widgets.list_view.itemExtent} 如果非空,强制子项在滚动方向上具有给定的范围。"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@template flutter.widgets.list_view.itemExtentBuilder} 如果非空,强制子项具有构建器返回的相应范围。"},{"name":"prototypeItem","type":"Widget?","desc":"{@template flutter.widgets.list_view.prototypeItem} 如果非空,强制子项在滚动方向上与给定小部件具有相同的范围。"},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"为 [ListView] 提供子项的委托。"}],"id":162,"localName":"列表组件","lever":5,"family":0,"linkIds":[16,163],"nodes":[{"file":"node1_base.dart","name":"ListView基本使用","desc":["【children】 : 子组件列表 【List】","【padding】 : 内边距 【EdgeInsetsGeometry】"]},{"file":"node2_direction.dart","name":"ListView横向滑动","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向滑动 【bool】","【shrinkWrap】 : 无边界时是否包裹 【bool】"]},{"file":"node3_builder.dart","name":"ListView.builder构造","desc":["【itemCount】 : 条目个数 【int】","【itemBuilder】 : 条目构造器 【IndexedWidgetBuilder】"]},{"file":"node4_separated.dart","name":"ListView.separated构造","desc":["【separatorBuilder】 : 条目构造器 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_en-US.json deleted file mode 100644 index b4da019f6..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListWheelScrollView","path":"/src/widgets/list_wheel_scroll_view.dart","parents":["StatefulWidget","Widget"],"desc":" A box in which children on a wheel can be scrolled.","fields":[{"name":"controller","type":"ScrollController?","desc":"Typically a [FixedExtentScrollController] used to control the current item."},{"name":"physics","type":"ScrollPhysics?","desc":"How the scroll view should respond to user input."},{"name":"diameterRatio","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.diameterRatio}"},{"name":"perspective","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.perspective}"},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"overAndUnderCenterOpacity","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.overAndUnderCenterOpacity}"},{"name":"itemExtent","type":"double","required":true,"desc":"Size of each child in the main axis."},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"onSelectedItemChanged","type":"ValueChanged?","desc":"On optional listener that's called when the centered item changes."},{"name":"renderChildrenOutsideViewport","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.renderChildrenOutsideViewport}"},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"A delegate that helps lazily instantiating child."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"}],"id":179,"lever":4,"family":1,"linkIds":[139,291],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ListWheelScrollView","desc":["【children】: List of child components 【List】","【perspective】: Perspective 【double】","【itemExtent】: Item height 【EdgeInsets】","【onSelectedItemChanged】: Selection callback 【ValueChanged】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_zh-CN.json deleted file mode 100644 index 454e131b5..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListWheelScrollView","path":"/src/widgets/list_wheel_scroll_view.dart","parents":["StatefulWidget","Widget"],"desc":"可以滚动轮子上子项的框。","fields":[{"name":"controller","type":"ScrollController?","desc":"通常是用于控制当前项目的 [FixedExtentScrollController]。"},{"name":"physics","type":"ScrollPhysics?","desc":"滚动视图应如何响应用户输入。"},{"name":"diameterRatio","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.diameterRatio}"},{"name":"perspective","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.perspective}"},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"overAndUnderCenterOpacity","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.overAndUnderCenterOpacity}"},{"name":"itemExtent","type":"double","required":true,"desc":"主轴中每个子项的大小。"},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"onSelectedItemChanged","type":"ValueChanged?","desc":"当居中项目更改时调用的可选监听器。"},{"name":"renderChildrenOutsideViewport","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.renderChildrenOutsideViewport}"},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"帮助惰性实例化子项的委托。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"}],"id":179,"localName":"滚轮列表","lever":4,"family":1,"linkIds":[139,291],"nodes":[{"file":"node1_base.dart","name":"ListWheelScrollView基本使用","desc":["【children】 : 子组件列表 【List】","【perspective】 : 透视度 【double】","【itemExtent】 : item高 【EdgeInsets】","【onSelectedItemChanged】 : 选中回调 【ValueChanged 】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_en-US.json b/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_en-US.json deleted file mode 100644 index 814549756..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListWheelViewport","path":"/src/widgets/list_wheel_scroll_view.dart","parents":["RenderObjectWidget","Widget"],"desc":" A viewport showing a subset of children on a wheel.","fields":[{"name":"diameterRatio","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.diameterRatio}"},{"name":"perspective","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.perspective}"},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"overAndUnderCenterOpacity","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.overAndUnderCenterOpacity}"},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.itemExtent}"},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"renderChildrenOutsideViewport","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.renderChildrenOutsideViewport}"},{"name":"offset","type":"ViewportOffset","required":true,"desc":"[ViewportOffset] object describing the content that should be visible in the viewport."},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"A delegate that lazily instantiates children."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":291,"lever":4,"family":6,"linkIds":[179,139,137,253],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ListWheelViewport","desc":["【itemExtent】 : Axial item size 【double】","【offset】 : Viewport offset 【ViewportOffset】","【childDelegate】 : Child delegate constructor 【ListWheelChildDelegate】"]},{"file":"node2_perspective.dart","name":"Perspective Effect of ListWheelViewport","desc":["【perspective】 : Perspective parameter 【double】","【squeeze】 : Squeeze value 【double】","【diameterRatio】 : Diameter ratio 【double】"]},{"file":"node3_magnifier.dart","name":"Magnification of ListWheelViewport","desc":["【useMagnifier】 : Whether to magnify 【bool】","【magnification】 : Magnification ratio 【double】","【clipBehavior】 : Clip behavior 【Clip】","【renderChildrenOutsideViewport】 : Whether to render children outside the viewport 【bool】"]},{"file":"node4_opacity.dart","name":"Offset and Opacity","desc":["【offAxisFraction】 : Axis center offset ratio 【double】","【overAndUnderCenterOpacity】 : Opacity outside the magnifier 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_zh-CN.json deleted file mode 100644 index dddda210e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListWheelViewport","path":"/src/widgets/list_wheel_scroll_view.dart","parents":["RenderObjectWidget","Widget"],"desc":"显示轮子上子项子集的视口。","fields":[{"name":"diameterRatio","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.diameterRatio}"},{"name":"perspective","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.perspective}"},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"overAndUnderCenterOpacity","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.overAndUnderCenterOpacity}"},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.itemExtent}"},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"renderChildrenOutsideViewport","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.renderChildrenOutsideViewport}"},{"name":"offset","type":"ViewportOffset","required":true,"desc":"描述应在视口中可见的内容的 [ViewportOffset] 对象。"},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"惰性实例化子项的委托。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":291,"localName":"列表滚轮视口","lever":4,"family":6,"linkIds":[179,139,137,253],"nodes":[{"file":"node1_base.dart","name":"ListWheelViewport 简单使用","desc":["【itemExtent】 : 轴向item尺寸 【double】","【offset】 : 视口偏移 【ViewportOffset】","【childDelegate】 : 孩子代理构造器 【ListWheelChildDelegate】"]},{"file":"node2_perspective.dart","name":"ListWheelViewport 透视效果","desc":["【perspective】 : 透视参数 【double】","【squeeze】 : 挤压值 【double】","【diameterRatio】 : 直径分率 【double】"]},{"file":"node3_magnifier.dart","name":"ListWheelViewport 放大","desc":["【useMagnifier】 : 是否放大 【bool】","【magnification】 : 放大比例 【double】","【clipBehavior】 : 剪裁行为 【Clip】","【renderChildrenOutsideViewport】 : 出视野是否渲染 【bool】"]},{"file":"node4_opacity.dart","name":"偏移和透明度","desc":["【offAxisFraction】 : 轴中心偏移比 【double】","【overAndUnderCenterOpacity】 : 放大器之外的透明度 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_en-US.json deleted file mode 100644 index a11ac82ef..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListenableBuilder","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" A general-purpose widget for building a widget subtree when a [Listenable] changes.","fields":[{"name":"builder","type":"TransitionBuilder","required":true,"desc":"Called every time the [listenable] notifies about a change."},{"name":"child","type":"Widget?","desc":"The child widget to pass to the [builder]."}],"id":438,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_zh-CN.json deleted file mode 100644 index fde9f320f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListenableBuilder","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"当 [Listenable] 更改时用于构建小部件子树的通用小部件。","fields":[{"name":"builder","type":"TransitionBuilder","required":true,"desc":"每次 [listenable] 通知更改时调用。"},{"name":"child","type":"Widget?","desc":"传递给 [builder] 的子小部件。"}],"id":438,"localName":"ListenableBuilder","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Listener/Listener_en-US.json b/modules/widget_system/widgets/doc/widgets/Listener/Listener_en-US.json deleted file mode 100644 index 1738bc5e0..000000000 --- a/modules/widget_system/widgets/doc/widgets/Listener/Listener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Listener","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that calls callbacks in response to common pointer events.","fields":[{"name":"onPointerDown","type":"PointerDownEventListener?","desc":"Called when a pointer comes into contact with the screen (for touch pointers), or has its button pressed (for mouse pointers) at this widget's location."},{"name":"onPointerMove","type":"PointerMoveEventListener?","desc":"Called when a pointer that triggered an [onPointerDown] changes position."},{"name":"onPointerUp","type":"PointerUpEventListener?","desc":"Called when a pointer that triggered an [onPointerDown] is no longer in contact with the screen."},{"name":"onPointerHover","type":"PointerHoverEventListener?","desc":"Called when a pointer that has not triggered an [onPointerDown] changes position."},{"name":"onPointerCancel","type":"PointerCancelEventListener?","desc":"Called when the input from a pointer that triggered an [onPointerDown] is no longer directed towards this receiver."},{"name":"onPointerPanZoomStart","type":"PointerPanZoomStartEventListener?","desc":"Called when a pan/zoom begins such as from a trackpad gesture."},{"name":"onPointerPanZoomUpdate","type":"PointerPanZoomUpdateEventListener?","desc":"Called when a pan/zoom is updated."},{"name":"onPointerPanZoomEnd","type":"PointerPanZoomEndEventListener?","desc":"Called when a pan/zoom finishes."},{"name":"onPointerSignal","type":"PointerSignalEventListener?","desc":"Called when a pointer signal occurs over this object."},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit testing."}],"id":147,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Events of Listener","desc":["【child】 : Child component 【Widget】","【onPointerDown】 : Press event 【Function(PointerDownEvent)】","【onPointerMove】 : Move event 【Function(PointerMoveEvent)】","【onPointerMove】 : Release event 【Function(PointerUpEvent)】","【onPointerCancel】 : Cancel event 【Function(PointerUpEvent)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Listener/Listener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Listener/Listener_zh-CN.json deleted file mode 100644 index fa8733546..000000000 --- a/modules/widget_system/widgets/doc/widgets/Listener/Listener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Listener","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"响应常见指针事件调用回调的小部件。","fields":[{"name":"onPointerDown","type":"PointerDownEventListener?","desc":"当指针与屏幕接触(对于触摸指针)或在此小部件位置按下按钮(对于鼠标指针)时调用。"},{"name":"onPointerMove","type":"PointerMoveEventListener?","desc":"当触发 [onPointerDown] 的指针改变位置时调用。"},{"name":"onPointerUp","type":"PointerUpEventListener?","desc":"当触发 [onPointerDown] 的指针不再与屏幕接触时调用。"},{"name":"onPointerHover","type":"PointerHoverEventListener?","desc":"当未触发 [onPointerDown] 的指针改变位置时调用。"},{"name":"onPointerCancel","type":"PointerCancelEventListener?","desc":"当触发 [onPointerDown] 的指针的输入不再指向此接收器时调用。"},{"name":"onPointerPanZoomStart","type":"PointerPanZoomStartEventListener?","desc":"当平移/缩放开始时调用,例如来自触控板手势。"},{"name":"onPointerPanZoomUpdate","type":"PointerPanZoomUpdateEventListener?","desc":"当平移/缩放更新时调用。"},{"name":"onPointerPanZoomEnd","type":"PointerPanZoomEndEventListener?","desc":"当平移/缩放完成时调用。"},{"name":"onPointerSignal","type":"PointerSignalEventListener?","desc":"当指针信号在此对象上发生时调用。"},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"命中测试期间的行为方式。"}],"id":147,"localName":"事件监听器","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Listener基本事件","desc":["【child】 : 子组件 【Widget】","【onPointerDown】 : 按下事件 【Function(PointerDownEvent)】","【onPointerMove】 : 移动事件 【Function(PointerMoveEvent)】","【onPointerMove】 : 抬起事件 【Function(PointerUpEvent)】","【onPointerCancel】 : 取消事件 【Function(PointerUpEvent)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_en-US.json b/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_en-US.json deleted file mode 100644 index ec44d5668..000000000 --- a/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Localizations","path":"/src/widgets/localizations.dart","parents":["StatefulWidget","Widget"],"desc":" Defines the [Locale] for its `child` and the localized resources that the child depends on.","fields":[{"name":"locale","type":"Locale","required":true,"desc":"The resources returned by [Localizations.of] will be specific to this locale."},{"name":"delegates","type":"List>","required":true,"desc":"This list collectively defines the localized resources objects that can be retrieved with [Localizations.of]."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":290,"lever":4,"family":1,"linkIds":[65,346],"nodes":[{"file":"node1.dart","name":"Get Current Language","desc":["Through Localizations.localeOf(context), you can retrieve the Locale data information stored in the nearest upper-level Localizations component based on the context."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_zh-CN.json deleted file mode 100644 index 0acb6f0f3..000000000 --- a/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Localizations","path":"/src/widgets/localizations.dart","parents":["StatefulWidget","Widget"],"desc":"为其 `child` 定义 [Locale] 以及子项依赖的本地化资源。","fields":[{"name":"locale","type":"Locale","required":true,"desc":"[Localizations.of] 返回的资源将特定于此区域设置。"},{"name":"delegates","type":"List>","required":true,"desc":"此列表共同定义了可以使用 [Localizations.of] 检索的本地化资源对象。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":290,"localName":"国际化","lever":4,"family":1,"linkIds":[65,346],"nodes":[{"file":"node1.dart","name":"获取当前语言","desc":["通过 Localizations.localeOf(context) 可以根据上下文获取最近上层的 Localizations 组件存储的 Locale 数据信息。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_en-US.json b/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_en-US.json deleted file mode 100644 index c1160c098..000000000 --- a/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LongPressDraggable","path":"/src/widgets/drag_target.dart","parents":["Draggable","StatefulWidget","Widget"],"desc":" Makes its child draggable starting from long press.","fields":[{"name":"hapticFeedbackOnStart","type":"bool","required":true,"desc":"Whether haptic feedback should be triggered on drag start."},{"name":"delay","type":"Duration","required":true,"desc":"The duration that a user has to press down before a long press is registered."}],"id":105,"lever":4,"family":1,"linkIds":[103,104],"nodes":[{"file":"node1_base.dart","name":"LongPressDraggable used with DragTarget","desc":["【child】 : child 【Widget】","【feedback】 : child during drag 【Widget】","【axis】 : axis of drag 【Axis】","【data】 : data 【T】","【onDragStarted】 : start drag 【Function()】","【onDragEnd】 : end drag 【Function(DraggableDetails)】","【onDragCompleted】 : drag completed 【Function()】","【onDraggableCanceled】 : drag canceled 【Function(Velocity,Offset)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_zh-CN.json deleted file mode 100644 index 99846022f..000000000 --- a/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LongPressDraggable","path":"/src/widgets/drag_target.dart","parents":["Draggable","StatefulWidget","Widget"],"desc":"使其子项从长按开始可拖动。","fields":[{"name":"hapticFeedbackOnStart","type":"bool","required":true,"desc":"拖动开始时是否应触发触觉反馈。"},{"name":"delay","type":"Duration","required":true,"desc":"用户必须按下才能注册长按的持续时间。"}],"id":105,"localName":"拖拽目标","lever":4,"family":1,"linkIds":[103,104],"nodes":[{"file":"node1_base.dart","name":"LongPressDraggable与DragTarget联用","desc":["【child】 : 孩子 【Widget】","【feedback】 : 拖拽时的孩子 【Widget】","【axis】 : 拖动的轴 【Axis】","【data】 : 数据 【T】","【onDragStarted】 : 开始拖拽 【Function()】","【onDragEnd】 : 结束拖拽 【Function(DraggableDetails)】","【onDragCompleted】 : 拖拽完成 【Function()】","【onDraggableCanceled】 : 拖拽取消 【Function(Velocity,Offset)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_en-US.json b/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_en-US.json deleted file mode 100644 index 882cd5130..000000000 --- a/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LookupBoundary","path":"/src/widgets/lookup_boundary.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" A lookup boundary controls what entities are visible to descendants of the boundary via the static lookup methods provided by the boundary.","fields":[],"id":439,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_zh-CN.json deleted file mode 100644 index 453580e97..000000000 --- a/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LookupBoundary","path":"/src/widgets/lookup_boundary.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"查找边界控制通过边界提供的静态查找方法对边界后代可见的实体。","fields":[],"id":439,"localName":"LookupBoundary","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_en-US.json b/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_en-US.json deleted file mode 100644 index 407724ee6..000000000 --- a/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Magnifier","path":"/src/material/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":" A Material-styled magnifying glass.","fields":[{"name":"additionalFocalPointOffset","type":"Offset","required":true,"desc":"Any additional offset the focal point requires to \"point\" to the correct place."},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"The border radius for this magnifier."},{"name":"filmColor","type":"Color","required":true,"desc":"The color to tint the image in this [Magnifier]."},{"name":"shadows","type":"List","required":true,"desc":"A list of shadows cast by the [Magnifier]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"Whether and how to clip the [shadows] that render inside the loupe."},{"name":"size","type":"Size","required":true,"desc":"The [Size] of this [Magnifier]."}],"id":440,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_zh-CN.json deleted file mode 100644 index 96c8eea4c..000000000 --- a/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Magnifier","path":"/src/material/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":"Material 样式的放大镜。","fields":[{"name":"additionalFocalPointOffset","type":"Offset","required":true,"desc":"焦点需要"},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"此放大镜的边框半径。"},{"name":"filmColor","type":"Color","required":true,"desc":"在此 [Magnifier] 中为图像着色的颜色。"},{"name":"shadows","type":"List","required":true,"desc":"[Magnifier] 投射的阴影列表。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"是否以及如何裁剪在放大镜内渲染的 [shadows]。"},{"name":"size","type":"Size","required":true,"desc":"此 [Magnifier] 的 [Size]。"}],"id":440,"localName":"Magnifier","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Material/Material_en-US.json b/modules/widget_system/widgets/doc/widgets/Material/Material_en-US.json deleted file mode 100644 index 8d144dd7a..000000000 --- a/modules/widget_system/widgets/doc/widgets/Material/Material_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Material","path":"/src/material/material.dart","parents":["StatefulWidget","Widget"],"desc":" A piece of material.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"type","type":"MaterialType","required":true,"desc":"The kind of material to show (e.g., card or canvas). This affects the shape of the widget, the roundness of its corners if the shape is rectangular, and the default color."},{"name":"elevation","type":"double","required":true,"desc":"{@template flutter.material.material.elevation} The z-coordinate at which to place this material relative to its parent."},{"name":"color","type":"Color?","desc":"The color to paint the material."},{"name":"shadowColor","type":"Color?","desc":"The color to paint the shadow below the material."},{"name":"surfaceTintColor","type":"Color?","desc":"The color of the surface tint overlay applied to the material color to indicate elevation."},{"name":"textStyle","type":"TextStyle?","desc":"The typographical style to use for text within this material."},{"name":"shape","type":"ShapeBorder?","desc":"Defines the material's shape as well its shadow."},{"name":"borderOnForeground","type":"bool","required":true,"desc":"Whether to paint the [shape] border in front of the [child]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@template flutter.material.Material.clipBehavior} The content will be clipped (or not) according to this option."},{"name":"animationDuration","type":"Duration","required":true,"desc":"Defines the duration of animated changes for [shape], [elevation], [shadowColor], [surfaceTintColor] and the elevation overlay if it is applied."},{"name":"borderRadius","type":"BorderRadiusGeometry?","desc":"If non-null, the corners of this box are rounded by this [BorderRadiusGeometry] value."}],"id":160,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Material","desc":["【child】 : Child Component 【Widget】","【type】 : Type 【MaterialType】","【elevation】 : Elevation 【double】","【shadowColor】 : Shadow Color 【Color】","【color】 : Color 【Color】"]},{"file":"node2_shape.dart","name":"Shape Property of Material","desc":["【shape】 : Shape 【ShapeBorder】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Material/Material_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Material/Material_zh-CN.json deleted file mode 100644 index c658ddce3..000000000 --- a/modules/widget_system/widgets/doc/widgets/Material/Material_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Material","path":"/src/material/material.dart","parents":["StatefulWidget","Widget"],"desc":"一块材料。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"type","type":"MaterialType","required":true,"desc":"要显示的材料类型(例如,卡片或画布)。这影响小部件的形状、如果形状是矩形则影响其角的圆度以及默认颜色。"},{"name":"elevation","type":"double","required":true,"desc":"{@template flutter.material.material.elevation} 相对于其父级放置此材料的 z 坐标。"},{"name":"color","type":"Color?","desc":"绘制材料的颜色。"},{"name":"shadowColor","type":"Color?","desc":"绘制材料下方阴影的颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"应用于材料颜色以指示高度的表面色调覆盖的颜色。"},{"name":"textStyle","type":"TextStyle?","desc":"用于此材料内文本的排版样式。"},{"name":"shape","type":"ShapeBorder?","desc":"定义材料的形状及其阴影。"},{"name":"borderOnForeground","type":"bool","required":true,"desc":"是否在 [child] 前面绘制 [shape] 边框。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@template flutter.material.Material.clipBehavior} 内容将根据此选项进行裁剪(或不裁剪)。"},{"name":"animationDuration","type":"Duration","required":true,"desc":"定义 [shape]、[elevation]、[shadowColor]、[surfaceTintColor] 和高度覆盖(如果应用)的动画更改持续时间。"},{"name":"borderRadius","type":"BorderRadiusGeometry?","desc":"如果非空,此框的角由此 [BorderRadiusGeometry] 值圆化。"}],"id":160,"localName":"材料组件","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Material基本使用","desc":["【child】 : 子组件 【Widget】","【type】 : 类型 【MaterialType】","【elevation】 : 影深 【double】","【shadowColor】 : 阴影颜色 【Color】","【color】 : 颜色 【Color】"]},{"file":"node2_shape.dart","name":"Material的shape属性","desc":["【shape】 : 形状 【ShapeBorder】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_en-US.json b/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_en-US.json deleted file mode 100644 index 5d0404693..000000000 --- a/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MaterialApp","path":"/src/material/app.dart","parents":["StatefulWidget","Widget"],"desc":" An application that uses Material Design.","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@macro flutter.widgets.widgetsApp.navigatorKey}"},{"name":"scaffoldMessengerKey","type":"GlobalKey?","desc":"A key to use when building the [ScaffoldMessenger]."},{"name":"home","type":"Widget?","desc":"{@macro flutter.widgets.widgetsApp.home}"},{"name":"routes","type":"Map?","desc":"The application's top-level routing table."},{"name":"initialRoute","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.initialRoute}"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateRoute}"},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateInitialRoutes}"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onUnknownRoute}"},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@macro flutter.widgets.widgetsApp.onNavigationNotification}"},{"name":"navigatorObservers","type":"List?","desc":"{@macro flutter.widgets.widgetsApp.navigatorObservers}"},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationProvider}"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationParser}"},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@macro flutter.widgets.widgetsApp.routerDelegate}"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@macro flutter.widgets.widgetsApp.backButtonDispatcher}"},{"name":"routerConfig","type":"RouterConfig?","desc":"{@macro flutter.widgets.widgetsApp.routerConfig}"},{"name":"builder","type":"TransitionBuilder?","desc":"{@macro flutter.widgets.widgetsApp.builder}"},{"name":"title","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.title}"},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateTitle}"},{"name":"theme","type":"ThemeData?","desc":"Default visual properties, like colors fonts and shapes, for this app's material widgets."},{"name":"darkTheme","type":"ThemeData?","desc":"The [ThemeData] to use when a 'dark mode' is requested by the system."},{"name":"highContrastTheme","type":"ThemeData?","desc":"The [ThemeData] to use when 'high contrast' is requested by the system."},{"name":"highContrastDarkTheme","type":"ThemeData?","desc":"The [ThemeData] to use when a 'dark mode' and 'high contrast' is requested by the system."},{"name":"themeMode","type":"ThemeMode?","desc":"Determines which theme will be used by the application if both [theme] and [darkTheme] are provided."},{"name":"themeAnimationDuration","type":"Duration","required":true,"desc":"The duration of animated theme changes."},{"name":"themeAnimationCurve","type":"Curve","required":true,"desc":"The curve to apply when animating theme changes."},{"name":"color","type":"Color?","desc":"{@macro flutter.widgets.widgetsApp.color}"},{"name":"locale","type":"Locale?","desc":"{@macro flutter.widgets.widgetsApp.locale}"},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@macro flutter.widgets.widgetsApp.localizationsDelegates}"},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.LocaleResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@macro flutter.widgets.widgetsApp.supportedLocales}"},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"Turns on a performance overlay."},{"name":"checkerboardRasterCacheImages","type":"bool","required":true,"desc":"Turns on checkerboarding of raster cache images."},{"name":"checkerboardOffscreenLayers","type":"bool","required":true,"desc":"Turns on checkerboarding of layers rendered to offscreen bitmaps."},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"Turns on an overlay that shows the accessibility information reported by the framework."},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.debugShowCheckedModeBanner}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.widgetsApp.shortcuts} {@tool snippet} This example shows how to add a single shortcut for [LogicalKeyboardKey.select] to the default shortcuts without needing to add your own [Shortcuts] widget."},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.widgetsApp.actions} {@tool snippet} This example shows how to add a single action handling an [ActivateAction] to the default actions without needing to add your own [Actions] widget."},{"name":"restorationScopeId","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.restorationScopeId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.material.materialApp.scrollBehavior} The default [ScrollBehavior] for the application."},{"name":"debugShowMaterialGrid","type":"bool","required":true,"desc":"Turns on a [GridPaper] overlay that paints a baseline grid Material apps."},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.useInheritedMediaQuery}"},{"name":"themeAnimationStyle","type":"AnimationStyle?","desc":"Used to override the theme animation curve and duration."}],"id":65,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of MaterialApp","desc":["【theme】 : Theme 【ThemeData】","【title】 : Taskbar Title 【String】","【debugShowCheckedModeBanner】 : Enable Badge 【bool】","【showPerformanceOverlay】 : Enable Performance Overlay 【bool】","【debugShowMaterialGrid】 : Enable Grid 【bool】","【onGenerateRoute】 : Route Generator 【RouteFactory】","【home】 : Home Page 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_zh-CN.json deleted file mode 100644 index 68cce7301..000000000 --- a/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MaterialApp","path":"/src/material/app.dart","parents":["StatefulWidget","Widget"],"desc":"使用 Material Design 的应用程序。","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@macro flutter.widgets.widgetsApp.navigatorKey}"},{"name":"scaffoldMessengerKey","type":"GlobalKey?","desc":"构建 [ScaffoldMessenger] 时使用的键。"},{"name":"home","type":"Widget?","desc":"{@macro flutter.widgets.widgetsApp.home}"},{"name":"routes","type":"Map?","desc":"应用程序的顶级路由表。"},{"name":"initialRoute","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.initialRoute}"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateRoute}"},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateInitialRoutes}"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onUnknownRoute}"},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@macro flutter.widgets.widgetsApp.onNavigationNotification}"},{"name":"navigatorObservers","type":"List?","desc":"{@macro flutter.widgets.widgetsApp.navigatorObservers}"},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationProvider}"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationParser}"},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@macro flutter.widgets.widgetsApp.routerDelegate}"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@macro flutter.widgets.widgetsApp.backButtonDispatcher}"},{"name":"routerConfig","type":"RouterConfig?","desc":"{@macro flutter.widgets.widgetsApp.routerConfig}"},{"name":"builder","type":"TransitionBuilder?","desc":"{@macro flutter.widgets.widgetsApp.builder}"},{"name":"title","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.title}"},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateTitle}"},{"name":"theme","type":"ThemeData?","desc":"此应用程序的 material 小部件的默认视觉属性,如颜色字体和形状。"},{"name":"darkTheme","type":"ThemeData?","desc":"系统请求"},{"name":"highContrastTheme","type":"ThemeData?","desc":"系统请求"},{"name":"highContrastDarkTheme","type":"ThemeData?","desc":"系统请求"},{"name":"themeMode","type":"ThemeMode?","desc":"如果同时提供 [theme] 和 [darkTheme],确定应用程序将使用哪个主题。"},{"name":"themeAnimationDuration","type":"Duration","required":true,"desc":"动画主题更改的持续时间。"},{"name":"themeAnimationCurve","type":"Curve","required":true,"desc":"动画主题更改时应用的曲线。"},{"name":"color","type":"Color?","desc":"{@macro flutter.widgets.widgetsApp.color}"},{"name":"locale","type":"Locale?","desc":"{@macro flutter.widgets.widgetsApp.locale}"},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@macro flutter.widgets.widgetsApp.localizationsDelegates}"},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.LocaleResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@macro flutter.widgets.widgetsApp.supportedLocales}"},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"打开性能覆盖。"},{"name":"checkerboardRasterCacheImages","type":"bool","required":true,"desc":"打开光栅缓存图像的棋盘格。"},{"name":"checkerboardOffscreenLayers","type":"bool","required":true,"desc":"打开渲染到离屏位图的图层的棋盘格。"},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"打开显示框架报告的辅助功能信息的覆盖。"},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.debugShowCheckedModeBanner}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.widgetsApp.shortcuts} {@tool snippet} 此示例显示如何在不需要添加自己的 [Shortcuts] 小部件的情况下为 [LogicalKeyboardKey.select] 添加单个快捷方式到默认快捷方式。"},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.widgetsApp.actions} {@tool snippet} 此示例显示如何在不需要添加自己的 [Actions] 小部件的情况下添加处理 [ActivateAction] 的单个操作到默认操作。"},{"name":"restorationScopeId","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.restorationScopeId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.material.materialApp.scrollBehavior} 应用程序的默认 [ScrollBehavior]。"},{"name":"debugShowMaterialGrid","type":"bool","required":true,"desc":"打开绘制基线网格 Material 应用程序的 [GridPaper] 覆盖。"},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.useInheritedMediaQuery}"},{"name":"themeAnimationStyle","type":"AnimationStyle?","desc":"用于覆盖主题动画曲线和持续时间。"}],"id":65,"localName":"Material应用","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MaterialApp基本用法","desc":["【theme】 : 主题 【ThemeData】","【title】 : 任务栏标题 【String】","【debugShowCheckedModeBanner】 : 开启角标 【bool】","【showPerformanceOverlay】 : 开启性能浮层 【bool】","【debugShowMaterialGrid】 : 开启网格 【bool】","【onGenerateRoute】 : 路由生成器 【RouteFactory】","【home】 : 主页 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_en-US.json b/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_en-US.json deleted file mode 100644 index eb64c5460..000000000 --- a/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MaterialBanner","path":"/src/material/banner.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design banner.","fields":[{"name":"content","type":"Widget","required":true,"desc":"The content of the [MaterialBanner]."},{"name":"contentTextStyle","type":"TextStyle?","desc":"Style for the text in the [content] of the [MaterialBanner]."},{"name":"actions","type":"List","required":true,"desc":"The set of actions that are displayed at the bottom or trailing side of the [MaterialBanner]."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place the material banner."},{"name":"leading","type":"Widget?","desc":"The (optional) leading widget of the [MaterialBanner]."},{"name":"minActionBarHeight","type":"double","required":true,"desc":"The optional minimum action bar height."},{"name":"backgroundColor","type":"Color?","desc":"The color of the surface of this [MaterialBanner]."},{"name":"surfaceTintColor","type":"Color?","desc":"The color used as an overlay on [backgroundColor] to indicate elevation."},{"name":"shadowColor","type":"Color?","desc":"The color of the shadow below the [MaterialBanner]."},{"name":"dividerColor","type":"Color?","desc":"The color of the divider."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the [content]."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"Empty space to surround the [MaterialBanner]."},{"name":"leadingPadding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the [leading] widget."},{"name":"forceActionsBelow","type":"bool","required":true,"desc":"An override to force the [actions] to be below the [content] regardless of how many there are."},{"name":"overflowAlignment","type":"OverflowBarAlignment","required":true,"desc":"The horizontal alignment of the [actions] when the [actions] laid out in a column."},{"name":"animation","type":"Animation?","desc":"The animation driving the entrance and exit of the material banner when presented by the [ScaffoldMessenger]."},{"name":"onVisible","type":"VoidCallback?","desc":"Called the first time that the material banner is visible within a [Scaffold] when presented by the [ScaffoldMessenger]."}],"id":211,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_one_btn.dart","name":"Usage of MaterialBanner in a Single Line","desc":["【content】: Middle component 【Widget】","【leading】: Left component 【Widget】","【actions】: List of right components 【List】","【padding】: Padding 【EdgeInsetsGeometry】","【forceActionsBelow】: Whether buttons are below 【bool】","【backgroundColor】: Background color 【Color】"]},{"file":"node2_two_btn.dart","name":"Usage of MaterialBanner in Two Lines","desc":["【contentTextStyle】: Style for the middle position 【TextStyle】","【leadingPadding】: Padding for the left component 【EdgeInsetsGeometry】","When the number of trailing components is greater than 1, the component structure is left-center-bottom."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_zh-CN.json deleted file mode 100644 index 33a537f5d..000000000 --- a/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MaterialBanner","path":"/src/material/banner.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 横幅。","fields":[{"name":"content","type":"Widget","required":true,"desc":"[MaterialBanner] 的内容。"},{"name":"contentTextStyle","type":"TextStyle?","desc":"[MaterialBanner] 的 [content] 中文本的样式。"},{"name":"actions","type":"List","required":true,"desc":"显示在 [MaterialBanner] 底部或尾随侧的操作集。"},{"name":"elevation","type":"double?","desc":"放置 material 横幅的 z 坐标。"},{"name":"leading","type":"Widget?","desc":"[MaterialBanner] 的(可选)前导小部件。"},{"name":"minActionBarHeight","type":"double","required":true,"desc":"可选的最小操作栏高度。"},{"name":"backgroundColor","type":"Color?","desc":"此 [MaterialBanner] 表面的颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"用作 [backgroundColor] 上的覆盖以指示高度的颜色。"},{"name":"shadowColor","type":"Color?","desc":"[MaterialBanner] 下方阴影的颜色。"},{"name":"dividerColor","type":"Color?","desc":"分隔符的颜色。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"插入 [content] 的空间量。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕 [MaterialBanner] 的空白空间。"},{"name":"leadingPadding","type":"EdgeInsetsGeometry?","desc":"插入 [leading] 小部件的空间量。"},{"name":"forceActionsBelow","type":"bool","required":true,"desc":"强制 [actions] 位于 [content] 下方的覆盖,无论有多少个。"},{"name":"overflowAlignment","type":"OverflowBarAlignment","required":true,"desc":"当 [actions] 在列中布局时的水平对齐。"},{"name":"animation","type":"Animation?","desc":"由 [ScaffoldMessenger] 呈现时驱动 material 横幅进入和退出的动画。"},{"name":"onVisible","type":"VoidCallback?","desc":"由 [ScaffoldMessenger] 呈现时,material 横幅在 [Scaffold] 内首次可见时调用。"}],"id":211,"localName":"横幅组件","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_one_btn.dart","name":"MaterialBanner一行的使用","desc":["【content】 : 中间组件 【Widget】","【leading】: 左侧组件 【Widget】","【actions】: 右侧组件列表 【List】","【padding】: 内边距 【EdgeInsetsGeometry】","【forceActionsBelow】: 是否按钮在下方 【bool】","【backgroundColor】: 背景色 【Color】"]},{"file":"node2_two_btn.dart","name":"MaterialBanner两行的使用","desc":["【contentTextStyle】: 中间位置样式 【TextStyle】","【leadingPadding】: 左侧组件边距 【EdgeInsetsGeometry】","当尾部组件数量大于1,该组件结构为左中下。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_en-US.json deleted file mode 100644 index bcf5e5af8..000000000 --- a/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MaterialBannerTheme","path":"/src/material/banner_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for [MaterialBanner]s in this widget's subtree.","fields":[{"name":"data","type":"MaterialBannerThemeData?","desc":"The properties for descendant [MaterialBanner] widgets."}],"id":327,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of MaterialBannerTheme","desc":["You can specify the MaterialBannerThemeData properties to set default styles for descendant MaterialBanner components, such as background color, margins, text styles, etc. You can also use MaterialBannerTheme.of to get the theme data of MaterialBanner."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_zh-CN.json deleted file mode 100644 index 3bba15d14..000000000 --- a/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MaterialBannerTheme","path":"/src/material/banner_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [MaterialBanner] 定义配置的继承小部件。","fields":[{"name":"data","type":"MaterialBannerThemeData?","desc":"后代 [MaterialBanner] 小部件的属性。"}],"id":327,"localName":"横幅样式","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MaterialBannerTheme基本使用","desc":["可指定MaterialBannerThemeData数据属性为【后代】的MaterialBanner组件设置默认样式,如背景色、边距、文字样式等。也可以用MaterialBannerTheme.of获取MaterialBanner的主题数据。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_en-US.json b/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_en-US.json deleted file mode 100644 index 97c7fa085..000000000 --- a/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MaterialButton","path":"/src/material/material_button.dart","parents":["StatelessWidget","Widget"],"desc":" A utility class for building Material buttons that depend on the ambient [ButtonTheme] and [Theme].","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when the button is tapped or otherwise activated."},{"name":"onLongPress","type":"VoidCallback?","desc":"The callback that is called when the button is long-pressed."},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"Called by the underlying [InkWell] widget's [InkWell.onHighlightChanged] callback."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"textTheme","type":"ButtonTextTheme?","desc":"Defines the button's base colors, and the defaults for the button's minimum size, internal padding, and shape."},{"name":"textColor","type":"Color?","desc":"The color to use for this button's text."},{"name":"disabledTextColor","type":"Color?","desc":"The color to use for this button's text when the button is disabled."},{"name":"color","type":"Color?","desc":"The button's fill color, displayed by its [Material], while it is in its default (unpressed, [enabled]) state."},{"name":"disabledColor","type":"Color?","desc":"The fill color of the button when the button is disabled."},{"name":"splashColor","type":"Color?","desc":"The splash color of the button's [InkWell]."},{"name":"focusColor","type":"Color?","desc":"The fill color of the button's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"The fill color of the button's [Material] when a pointer is hovering over it."},{"name":"highlightColor","type":"Color?","desc":"The highlight color of the button's [InkWell]."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this button relative to its parent."},{"name":"hoverElevation","type":"double?","desc":"The elevation for the button's [Material] when the button is [enabled] and a pointer is hovering over it."},{"name":"focusElevation","type":"double?","desc":"The elevation for the button's [Material] when the button is [enabled] and has the input focus."},{"name":"highlightElevation","type":"double?","desc":"The elevation for the button's [Material] relative to its parent when the button is [enabled] and pressed."},{"name":"disabledElevation","type":"double?","desc":"The elevation for the button's [Material] relative to its parent when the button is not [enabled]."},{"name":"colorBrightness","type":"Brightness?","desc":"The theme brightness to use for this button."},{"name":"child","type":"Widget?","desc":"The button's label."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The internal padding for the button's [child]."},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the button's layout will be."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the button's [Material]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"animationDuration","type":"Duration?","desc":"Defines the duration of animated changes for [shape] and [elevation]."},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"Configures the minimum size of the tap target."},{"name":"minWidth","type":"double?","desc":"The smallest horizontal extent that the button will occupy."},{"name":"height","type":"double?","desc":"The vertical extent of the button."},{"name":"enableFeedback","type":"bool","required":true,"desc":"Whether detected gestures should provide acoustic and/or haptic feedback."}],"id":23,"lever":4,"family":0,"linkIds":[25,26,27,326,175],"nodes":[{"file":"node1_base.dart","name":"MaterialButton Click Event","desc":["【color】: Color 【Color】","【splashColor】: Ripple Color 【Color】","【height】: Height 【double】","【elevation】: Elevation 【double】","【child】: Child Component 【Widget】","【textColor】: Child Component Text Color 【Color】","【highlightColor】: Long Press Highlight Color 【Color】","【padding】: Padding 【EdgeInsetsGeometry】","【onPressed】: Click Event 【Function】"]},{"file":"node2_onLongPress.dart","name":"MaterialButton Long Press Event","desc":["【highlightColor】: Long Press Highlight Color 【Color】","【onLongPress】: Long Press Event 【Function】"]},{"file":"node3_shape.dart","name":"MaterialButton Custom Shape","desc":["【shape】: Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_zh-CN.json deleted file mode 100644 index 6c3d3ccd1..000000000 --- a/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MaterialButton","path":"/src/material/material_button.dart","parents":["StatelessWidget","Widget"],"desc":"用于构建依赖于环境 [ButtonTheme] 和 [Theme] 的 Material 按钮的实用类。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用的回调。"},{"name":"onLongPress","type":"VoidCallback?","desc":"长按按钮时调用的回调。"},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"由底层 [InkWell] 小部件的 [InkWell.onHighlightChanged] 回调调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"textTheme","type":"ButtonTextTheme?","desc":"定义按钮的基本颜色,以及按钮的最小大小、内部内边距和形状的默认值。"},{"name":"textColor","type":"Color?","desc":"用于此按钮文本的颜色。"},{"name":"disabledTextColor","type":"Color?","desc":"按钮禁用时用于此按钮文本的颜色。"},{"name":"color","type":"Color?","desc":"按钮处于默认(未按下、[enabled])状态时,由其 [Material] 显示的按钮填充颜色。"},{"name":"disabledColor","type":"Color?","desc":"按钮禁用时的填充颜色。"},{"name":"splashColor","type":"Color?","desc":"按钮的 [InkWell] 的飞溅颜色。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时其 [Material] 的填充颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在按钮上时其 [Material] 的填充颜色。"},{"name":"highlightColor","type":"Color?","desc":"按钮的 [InkWell] 的高亮颜色。"},{"name":"elevation","type":"double?","desc":"相对于其父级放置此按钮的 z 坐标。"},{"name":"hoverElevation","type":"double?","desc":"按钮 [enabled] 且指针悬停在其上时按钮的 [Material] 的高度。"},{"name":"focusElevation","type":"double?","desc":"按钮 [enabled] 且具有输入焦点时按钮的 [Material] 的高度。"},{"name":"highlightElevation","type":"double?","desc":"按钮 [enabled] 且被按下时按钮的 [Material] 相对于其父级的高度。"},{"name":"disabledElevation","type":"double?","desc":"按钮未 [enabled] 时按钮的 [Material] 相对于其父级的高度。"},{"name":"colorBrightness","type":"Brightness?","desc":"用于此按钮的主题亮度。"},{"name":"child","type":"Widget?","desc":"按钮的标签。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"按钮的 [child] 的内部内边距。"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义按钮布局的紧凑程度。"},{"name":"shape","type":"ShapeBorder?","desc":"按钮的 [Material] 的形状。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"animationDuration","type":"Duration?","desc":"定义 [shape] 和 [elevation] 动画更改的持续时间。"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"配置点击目标的最小大小。"},{"name":"minWidth","type":"double?","desc":"按钮将占用的最小水平范围。"},{"name":"height","type":"double?","desc":"按钮的垂直范围。"},{"name":"enableFeedback","type":"bool","required":true,"desc":"检测到的手势是否应提供声音和/或触觉反馈。"}],"id":23,"localName":"材料按钮","lever":4,"family":0,"linkIds":[25,26,27,326,175],"nodes":[{"file":"node1_base.dart","name":"MaterialButton点击事件","desc":["【color】: 颜色 【Color】","【splashColor】: 水波纹颜色 【Color】","【height】: 高 【double】","【elevation】: 影深 【double】","【child】: 子组件 【Widget】","【textColor】: 子组件文字颜色 【Color】","【highlightColor】: 长按高亮色 【Color】","【padding】: 内边距 【EdgeInsetsGeometry】","【onPressed】: 点击事件 【Function】"]},{"file":"node2_onLongPress.dart","name":"MaterialButton长按事件","desc":["【highlightColor】: 长按高亮色 【Color】","【onLongPress】: 长按事件 【Function】"]},{"file":"node3_shape.dart","name":"MaterialButton的自定义形状","desc":["【shape】: 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_en-US.json deleted file mode 100644 index 1d7623b75..000000000 --- a/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MatrixTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animates the [Matrix4] of a transformed widget.","fields":[{"name":"onTransform","type":"TransformCallback","required":true,"desc":"The callback to compute a [Matrix4] from the [animation]. It's called every time [animation] changes its value."},{"name":"alignment","type":"Alignment","required":true,"desc":"The alignment of the origin of the coordinate system in which the transform takes place, relative to the size of the box."},{"name":"filterQuality","type":"FilterQuality?","desc":"The filter quality with which to apply the transform as a bitmap operation."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":441,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_zh-CN.json deleted file mode 100644 index 09a1ec645..000000000 --- a/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MatrixTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"对变换小部件的 [Matrix4] 进行动画处理。","fields":[{"name":"onTransform","type":"TransformCallback","required":true,"desc":"从 [animation] 计算 [Matrix4] 的回调。每次 [animation] 更改其值时都会调用它。"},{"name":"alignment","type":"Alignment","required":true,"desc":"变换发生的坐标系原点相对于框大小的对齐方式。"},{"name":"filterQuality","type":"FilterQuality?","desc":"将变换作为位图操作应用的过滤质量。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":441,"localName":"MatrixTransition","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_en-US.json b/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_en-US.json deleted file mode 100644 index 76b09f5cf..000000000 --- a/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MediaQuery","path":"/src/widgets/media_query.dart","parents":["InheritedModel","InheritedWidget","ProxyWidget","Widget"],"desc":" Establishes a subtree in which media queries resolve to the given data.","fields":[{"name":"data","type":"MediaQueryData","required":true,"desc":"Contains information about the current media."}],"id":167,"lever":4,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MediaQuery Get Data Information","desc":["MediaQuery.of(context) can obtain MediaQueryData"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_zh-CN.json deleted file mode 100644 index 08a530876..000000000 --- a/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MediaQuery","path":"/src/widgets/media_query.dart","parents":["InheritedModel","InheritedWidget","ProxyWidget","Widget"],"desc":"建立一个子树,其中媒体查询解析为给定数据。","fields":[{"name":"data","type":"MediaQueryData","required":true,"desc":"包含有关当前媒体的信息。"}],"id":167,"localName":"媒体查询","lever":4,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MediaQuery获取数据信息","desc":["MediaQuery.of(context)可以获取MediaQueryData"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_en-US.json deleted file mode 100644 index 0d23640af..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuAcceleratorCallbackBinding","path":"/src/material/menu_anchor.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An [InheritedWidget] that provides a descendant [MenuAcceleratorLabel] with the function to invoke when the accelerator is pressed.","fields":[{"name":"onInvoke","type":"VoidCallback?","desc":"The function that pressing the accelerator defined in a descendant [MenuAcceleratorLabel] will invoke."},{"name":"hasSubmenu","type":"bool","required":true,"desc":"Whether or not the associated label will host its own submenu or not."}],"id":442,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_zh-CN.json deleted file mode 100644 index 8ee542850..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuAcceleratorCallbackBinding","path":"/src/material/menu_anchor.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为后代 [MenuAcceleratorLabel] 提供按下加速器时调用的函数的 [InheritedWidget]。","fields":[{"name":"onInvoke","type":"VoidCallback?","desc":"按下后代 [MenuAcceleratorLabel] 中定义的加速器将调用的函数。"},{"name":"hasSubmenu","type":"bool","required":true,"desc":"关联的标签是否将托管自己的子菜单。"}],"id":442,"localName":"MenuAcceleratorCallbackBinding","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_en-US.json deleted file mode 100644 index 2c39aa07a..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuAcceleratorLabel","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that draws the label text for a menu item (typically a [MenuItemButton] or [SubmenuButton]) and renders its child with information about the currently active keyboard accelerator.","fields":[{"name":"label","type":"String","required":true,"desc":"The label string that should be displayed."},{"name":"builder","type":"MenuAcceleratorChildBuilder","required":true,"desc":"The optional [MenuAcceleratorChildBuilder] which is used to build the widget that displays the label itself."}],"id":443,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_zh-CN.json deleted file mode 100644 index 15eea1c1f..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuAcceleratorLabel","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"为菜单项(通常是 [MenuItemButton] 或 [SubmenuButton])绘制标签文本并使用有关当前活动键盘加速器的信息渲染其子项的小部件。","fields":[{"name":"label","type":"String","required":true,"desc":"应显示的标签字符串。"},{"name":"builder","type":"MenuAcceleratorChildBuilder","required":true,"desc":"用于构建显示标签本身的小部件的可选 [MenuAcceleratorChildBuilder]。"}],"id":443,"localName":"MenuAcceleratorLabel","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_en-US.json deleted file mode 100644 index 14f59d96a..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuAnchor","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A widget used to mark the \"anchor\" for a set of submenus, defining the rectangle used to position the menu, which can be done either with an explicit location, or with an alignment.","fields":[{"name":"controller","type":"MenuController?","desc":"An optional controller that allows opening and closing of the menu from other widgets."},{"name":"childFocusNode","type":"FocusNode?","desc":"The [childFocusNode] attribute is the optional [FocusNode] also associated to the [child] or [builder] widget that opens the menu."},{"name":"style","type":"MenuStyle?","desc":"The [MenuStyle] that defines the visual attributes of the menu bar."},{"name":"alignmentOffset","type":"Offset?","desc":"{@template flutter.material.MenuAnchor.alignmentOffset} The offset of the menu relative to the alignment origin determined by [MenuStyle.alignment] on the [style] attribute and the ambient [Directionality]."},{"name":"layerLink","type":"LayerLink?","desc":"An optional [LayerLink] to attach the menu to the widget that this [MenuAnchor] surrounds."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"anchorTapClosesMenu","type":"bool","required":true,"desc":"Whether the menus will be closed if the anchor area is tapped."},{"name":"consumeOutsideTap","type":"bool","required":true,"desc":"Whether or not a tap event that closes the menu will be permitted to continue on to the gesture arena."},{"name":"onOpen","type":"VoidCallback?","desc":"A callback that is invoked when the menu is opened."},{"name":"onClose","type":"VoidCallback?","desc":"A callback that is invoked when the menu is closed."},{"name":"crossAxisUnconstrained","type":"bool","required":true,"desc":"Determine if the menu panel can be wrapped by a [UnconstrainedBox] which allows the panel to render at its \"natural\" size."},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@macro flutter.widgets.RawMenuAnchor.useRootOverlay}"},{"name":"menuChildren","type":"List","required":true,"desc":"A list of children containing the menu items that are the contents of the menu surrounded by this [MenuAnchor]."},{"name":"builder","type":"MenuAnchorChildBuilder?","desc":"The widget that this [MenuAnchor] surrounds."},{"name":"child","type":"Widget?","desc":"The optional child to be passed to the [builder]."}],"id":444,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_zh-CN.json deleted file mode 100644 index a1b377078..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuAnchor","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"用于标记一组子菜单的\"锚点\"的小部件,定义用于定位菜单的矩形,可以使用显式位置或对齐方式完成。","fields":[{"name":"controller","type":"MenuController?","desc":"允许从其他小部件打开和关闭菜单的可选控制器。"},{"name":"childFocusNode","type":"FocusNode?","desc":"[childFocusNode] 属性是与打开菜单的 [child] 或 [builder] 小部件关联的可选 [FocusNode]。"},{"name":"style","type":"MenuStyle?","desc":"定义菜单栏视觉属性的 [MenuStyle]。"},{"name":"alignmentOffset","type":"Offset?","desc":"{@template flutter.material.MenuAnchor.alignmentOffset} 菜单相对于由 [style] 属性上的 [MenuStyle.alignment] 和环境 [Directionality] 确定的对齐原点的偏移。"},{"name":"layerLink","type":"LayerLink?","desc":"将菜单附加到此 [MenuAnchor] 围绕的小部件的可选 [LayerLink]。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"anchorTapClosesMenu","type":"bool","required":true,"desc":"如果点击锚点区域,菜单是否会关闭。"},{"name":"consumeOutsideTap","type":"bool","required":true,"desc":"关闭菜单的点击事件是否被允许继续到手势竞技场。"},{"name":"onOpen","type":"VoidCallback?","desc":"菜单打开时调用的回调。"},{"name":"onClose","type":"VoidCallback?","desc":"菜单关闭时调用的回调。"},{"name":"crossAxisUnconstrained","type":"bool","required":true,"desc":"确定菜单面板是否可以被 [UnconstrainedBox] 包装,这允许面板以其"},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@macro flutter.widgets.RawMenuAnchor.useRootOverlay}"},{"name":"menuChildren","type":"List","required":true,"desc":"包含菜单项的子项列表,这些菜单项是此 [MenuAnchor] 围绕的菜单的内容。"},{"name":"builder","type":"MenuAnchorChildBuilder?","desc":"此 [MenuAnchor] 围绕的小部件。"},{"name":"child","type":"Widget?","desc":"传递给 [builder] 的可选子项。"}],"id":444,"localName":"MenuAnchor","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_en-US.json deleted file mode 100644 index 34e624a72..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuBar","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":" A menu bar that manages cascading child menus.","fields":[{"name":"style","type":"MenuStyle?","desc":"The [MenuStyle] that defines the visual attributes of the menu bar."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"controller","type":"MenuController?","desc":"The [MenuController] to use for this menu bar."},{"name":"children","type":"List","required":true,"desc":"The list of menu items that are the top level children of the [MenuBar]."}],"id":445,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_zh-CN.json deleted file mode 100644 index da40df364..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuBar","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":"管理级联子菜单的菜单栏。","fields":[{"name":"style","type":"MenuStyle?","desc":"定义菜单栏视觉属性的 [MenuStyle]。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"controller","type":"MenuController?","desc":"用于此菜单栏的 [MenuController]。"},{"name":"children","type":"List","required":true,"desc":"作为 [MenuBar] 顶级子项的菜单项列表。"}],"id":445,"localName":"MenuBar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_en-US.json deleted file mode 100644 index a1552483f..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuBarTheme","path":"/src/material/menu_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for the [MenuBar] widgets in this widget's descendants.","fields":[{"name":"data","type":"MenuBarThemeData","required":true,"desc":"The properties to set for [MenuBar] in this widget's descendants."}],"id":446,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_zh-CN.json deleted file mode 100644 index ee9011166..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuBarTheme","path":"/src/material/menu_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件后代中的 [MenuBar] 小部件定义配置的继承小部件。","fields":[{"name":"data","type":"MenuBarThemeData","required":true,"desc":"为此小部件后代中的 [MenuBar] 设置的属性。"}],"id":446,"localName":"MenuBarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_en-US.json deleted file mode 100644 index ac2ae8de2..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuButtonTheme","path":"/src/material/menu_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [MenuItemButton] and [SubmenuButton] descendants.","fields":[{"name":"data","type":"MenuButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":447,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_zh-CN.json deleted file mode 100644 index cb9a256e1..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuButtonTheme","path":"/src/material/menu_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [MenuItemButton] 和 [SubmenuButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"MenuButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":447,"localName":"MenuButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_en-US.json deleted file mode 100644 index eff2b4244..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuItemButton","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A button for use in a [MenuBar], in a menu created with [MenuAnchor], or on its own, that can be activated by click or keyboard navigation.","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"Called when the button is tapped or otherwise activated."},{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the button response area."},{"name":"requestFocusOnHover","type":"bool","required":true,"desc":"Determine if hovering can request focus."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"The optional shortcut that selects this [MenuItemButton]."},{"name":"semanticsLabel","type":"String?","desc":"An optional Semantics label, applied to the entire [MenuItemButton]."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"leadingIcon","type":"Widget?","desc":"An optional icon to display before the [child] label."},{"name":"trailingIcon","type":"Widget?","desc":"An optional icon to display after the [child] label."},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@template flutter.material.menu_anchor.closeOnActivate} Determines if the menu will be closed when a [MenuItemButton] is pressed."},{"name":"overflowAxis","type":"Axis","required":true,"desc":"The direction in which the menu item expands."},{"name":"child","type":"Widget?","desc":"The widget displayed in the center of this button."}],"id":448,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_zh-CN.json deleted file mode 100644 index b2ba313ad..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuItemButton","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"用于 [MenuBar]、使用 [MenuAnchor] 创建的菜单或单独使用的按钮,可以通过点击或键盘导航激活。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用。"},{"name":"onHover","type":"ValueChanged?","desc":"指针进入或退出按钮响应区域时调用。"},{"name":"requestFocusOnHover","type":"bool","required":true,"desc":"确定悬停是否可以请求焦点。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点更改时调用的处理程序。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"选择此 [MenuItemButton] 的可选快捷方式。"},{"name":"semanticsLabel","type":"String?","desc":"应用于整个 [MenuItemButton] 的可选语义标签。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"leadingIcon","type":"Widget?","desc":"在 [child] 标签前显示的可选图标。"},{"name":"trailingIcon","type":"Widget?","desc":"在 [child] 标签后显示的可选图标。"},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@template flutter.material.menu_anchor.closeOnActivate} 确定按下 [MenuItemButton] 时菜单是否会关闭。"},{"name":"overflowAxis","type":"Axis","required":true,"desc":"菜单项展开的方向。"},{"name":"child","type":"Widget?","desc":"显示在此按钮中心的小部件。"}],"id":448,"localName":"MenuItemButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_en-US.json deleted file mode 100644 index dd80645f1..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuTheme","path":"/src/material/menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration in this widget's descendants for menus created by the [SubmenuButton], [MenuBar], or [MenuAnchor] widgets.","fields":[{"name":"data","type":"MenuThemeData","required":true,"desc":"The properties for [MenuBar] and [MenuItemButton] in this widget's descendants."}],"id":449,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_zh-CN.json deleted file mode 100644 index bf8d1190c..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuTheme","path":"/src/material/menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件后代中由 [SubmenuButton]、[MenuBar] 或 [MenuAnchor] 小部件创建的菜单定义配置的继承小部件。","fields":[{"name":"data","type":"MenuThemeData","required":true,"desc":"此小部件后代中 [MenuBar] 和 [MenuItemButton] 的属性。"}],"id":449,"localName":"MenuTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_en-US.json b/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_en-US.json deleted file mode 100644 index 8aa4a7767..000000000 --- a/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MergeSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that merges the semantics of its descendants.","fields":[],"id":450,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_zh-CN.json deleted file mode 100644 index e0c3568bf..000000000 --- a/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MergeSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"合并其后代语义的小部件。","fields":[],"id":450,"localName":"MergeSemantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_en-US.json b/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_en-US.json deleted file mode 100644 index 1083f89c3..000000000 --- a/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MergeableMaterial","path":"/src/material/mergeable_material.dart","parents":["StatefulWidget","Widget"],"desc":" Displays a list of [MergeableMaterialItem] children. The list contains [MaterialSlice] items whose boundaries are either \"merged\" with adjacent items or separated by a [MaterialGap]. The [children] are distributed along the given [mainAxis] in the same way as the children of a [ListBody]. When the list of children changes, gaps are automatically animated open or closed as needed.","fields":[{"name":"children","type":"List","required":true,"desc":"The children of the [MergeableMaterial]."},{"name":"mainAxis","type":"Axis","required":true,"desc":"The main layout axis."},{"name":"elevation","type":"double","required":true,"desc":"The z-coordinate at which to place all the [Material] slices."},{"name":"hasDividers","type":"bool","required":true,"desc":"Whether connected pieces of [MaterialSlice] have dividers between them."},{"name":"dividerColor","type":"Color?","desc":"Defines color used for dividers if [hasDividers] is true."}],"id":261,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of MergeableMaterial","desc":["【elevation】 : Shadow depth 【double】","【hasDividers】 : Whether there are dividers 【bool】","【dividerColor】 : Divider color 【Color】","【mainAxis】 : Axis direction 【Axis】","【children】 : Child components collection 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_zh-CN.json deleted file mode 100644 index 55b3822ca..000000000 --- a/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MergeableMaterial","path":"/src/material/mergeable_material.dart","parents":["StatefulWidget","Widget"],"desc":"显示 [MergeableMaterialItem] 子项列表。该列表包含 [MaterialSlice] 项,其边界要么与相邻项\"合并\",要么由 [MaterialGap] 分隔。[children] 沿给定的 [mainAxis] 分布,方式与 [ListBody] 的子项相同。当子项列表更改时,间隙会根据需要自动动画打开或关闭。","fields":[{"name":"children","type":"List","required":true,"desc":"[MergeableMaterial] 的子项。"},{"name":"mainAxis","type":"Axis","required":true,"desc":"主要布局轴。"},{"name":"elevation","type":"double","required":true,"desc":"放置所有 [Material] 切片的 z 坐标。"},{"name":"hasDividers","type":"bool","required":true,"desc":"[MaterialSlice] 的连接片段之间是否有分隔符。"},{"name":"dividerColor","type":"Color?","desc":"如果 [hasDividers] 为 true,定义用于分隔符的颜色。"}],"id":261,"localName":"可合并材料","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MergeableMaterial基本使用","desc":["【elevation】 : 影深 【double】","【hasDividers】 : 是否有分隔线 【bool】","【dividerColor】 : 分隔线颜色 【Color】","【mainAxis】 : 轴向 【Axis】","【children】 : 子组件集 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_en-US.json b/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_en-US.json deleted file mode 100644 index 9526cccf6..000000000 --- a/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MetaData","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Holds opaque meta data in the render tree.","fields":[{"name":"metaData","type":"dynamic","required":true,"desc":"Opaque meta data ignored by the render tree."},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit testing."}],"id":451,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_zh-CN.json deleted file mode 100644 index c8d99ae03..000000000 --- a/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MetaData","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在渲染树中保存不透明元数据。","fields":[{"name":"metaData","type":"dynamic","required":true,"desc":"被渲染树忽略的不透明元数据。"},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"命中测试期间的行为方式。"}],"id":451,"localName":"MetaData","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_en-US.json b/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_en-US.json deleted file mode 100644 index e5922184e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ModalBarrier","path":"/src/widgets/modal_barrier.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that prevents the user from interacting with widgets behind itself.","fields":[{"name":"color","type":"Color?","desc":"If non-null, fill the barrier with this color."},{"name":"dismissible","type":"bool","required":true,"desc":"Specifies if the barrier will be dismissed when the user taps on it."},{"name":"onDismiss","type":"VoidCallback?","desc":"{@template flutter.widgets.ModalBarrier.onDismiss} Called when the barrier is being dismissed."},{"name":"barrierSemanticsDismissible","type":"bool?","desc":"Whether the modal barrier semantics are included in the semantics tree."},{"name":"semanticsLabel","type":"String?","desc":"Semantics label used for the barrier if it is [dismissible]."},{"name":"clipDetailsNotifier","type":"ValueNotifier?","desc":"{@template flutter.widgets.ModalBarrier.clipDetailsNotifier} Contains a value of type [EdgeInsets] that specifies how the [SemanticsNode.rect] of the widget should be clipped."},{"name":"semanticsOnTapHint","type":"String?","desc":"{@macro flutter.material.ModalBottomSheetRoute.barrierOnTapHint}"}],"id":212,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to ModalBarrier","desc":["【dismissible】: Whether to return when clicked 【bool】","【color】: Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_zh-CN.json deleted file mode 100644 index c41bfb2af..000000000 --- a/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ModalBarrier","path":"/src/widgets/modal_barrier.dart","parents":["StatelessWidget","Widget"],"desc":"阻止用户与其后面的小部件交互的小部件。","fields":[{"name":"color","type":"Color?","desc":"如果非空,用此颜色填充屏障。"},{"name":"dismissible","type":"bool","required":true,"desc":"指定用户点击屏障时是否会被关闭。"},{"name":"onDismiss","type":"VoidCallback?","desc":"{@template flutter.widgets.ModalBarrier.onDismiss} 屏障被关闭时调用。"},{"name":"barrierSemanticsDismissible","type":"bool?","desc":"模态屏障语义是否包含在语义树中。"},{"name":"semanticsLabel","type":"String?","desc":"如果屏障是 [dismissible],用于屏障的语义标签。"},{"name":"clipDetailsNotifier","type":"ValueNotifier?","desc":"{@template flutter.widgets.ModalBarrier.clipDetailsNotifier} 包含 [EdgeInsets] 类型的值,指定小部件的 [SemanticsNode.rect] 应如何裁剪。"},{"name":"semanticsOnTapHint","type":"String?","desc":"{@macro flutter.material.ModalBottomSheetRoute.barrierOnTapHint}"}],"id":212,"localName":"屏障模","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ModalBarrier 介绍","desc":["【dismissible】 : 点击是否返回 【bool】","【color】 : 颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_en-US.json b/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_en-US.json deleted file mode 100644 index b4d53c1a3..000000000 --- a/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MouseRegion","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that tracks the movement of mice.","fields":[{"name":"onEnter","type":"PointerEnterEventListener?","desc":"Triggered when a mouse pointer has entered this widget."},{"name":"onHover","type":"PointerHoverEventListener?","desc":"Triggered when a pointer moves into a position within this widget without buttons pressed."},{"name":"onExit","type":"PointerExitEventListener?","desc":"Triggered when a mouse pointer has exited this widget when the widget is still mounted."},{"name":"cursor","type":"MouseCursor","required":true,"desc":"The mouse cursor for mouse pointers that are hovering over the region."},{"name":"opaque","type":"bool","required":true,"desc":"Whether this widget should prevent other [MouseRegion]s visually behind it from detecting the pointer."},{"name":"hitTestBehavior","type":"HitTestBehavior?","desc":"How to behave during hit testing."}],"id":293,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of MouseRegion","desc":["【onEnter】: Enter event 【PointerEnterEventListener】","【onHover】: Move event 【PointerHoverEventListener】","【onExit】: Exit event 【PointerExitEventListener】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_zh-CN.json deleted file mode 100644 index 93297b82a..000000000 --- a/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MouseRegion","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"跟踪鼠标移动的小部件。","fields":[{"name":"onEnter","type":"PointerEnterEventListener?","desc":"鼠标指针进入此小部件时触发。"},{"name":"onHover","type":"PointerHoverEventListener?","desc":"指针在未按下按钮的情况下移动到此小部件内的位置时触发。"},{"name":"onExit","type":"PointerExitEventListener?","desc":"当小部件仍然挂载时,鼠标指针退出此小部件时触发。"},{"name":"cursor","type":"MouseCursor","required":true,"desc":"悬停在区域上的鼠标指针的鼠标光标。"},{"name":"opaque","type":"bool","required":true,"desc":"此小部件是否应阻止视觉上位于其后面的其他 [MouseRegion] 检测指针。"},{"name":"hitTestBehavior","type":"HitTestBehavior?","desc":"命中测试期间的行为方式。"}],"id":293,"localName":"鼠标区域","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MouseRegion基本使用","desc":["【onEnter】 : 移入事件 【PointerEnterEventListener】","【onHover】: 移动事件 【PointerHoverEventListener】","【onExit】: 移出事件 【PointerExitEventListener】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_en-US.json deleted file mode 100644 index f4f15aa8e..000000000 --- a/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MultiChildRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A superclass for [RenderObjectWidget]s that configure [RenderObject] subclasses that have a single list of children. (This superclass only provides the storage for that child list, it doesn't actually provide the updating logic.)","fields":[{"name":"children","type":"List","required":true,"desc":"The widgets below this widget in the tree."}],"id":452,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_zh-CN.json deleted file mode 100644 index 50356a76d..000000000 --- a/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MultiChildRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"配置具有单个子项列表的 [RenderObject] 子类的 [RenderObjectWidget] 的超类。(此超类仅提供该子项列表的存储,实际上不提供更新逻辑。)","fields":[{"name":"children","type":"List","required":true,"desc":"树中此小部件下方的小部件。"}],"id":452,"localName":"MultiChildRenderObjectWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_en-US.json deleted file mode 100644 index 8a7af743b..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationBar","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":" Material 3 Navigation Bar component.","fields":[{"name":"animationDuration","type":"Duration?","desc":"Determines the transition time for each destination as it goes between selected and unselected."},{"name":"selectedIndex","type":"int","required":true,"desc":"Determines which one of the [destinations] is currently selected."},{"name":"destinations","type":"List","required":true,"desc":"The list of destinations (usually [NavigationDestination]s) in this [NavigationBar]."},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"Called when one of the [destinations] is selected."},{"name":"backgroundColor","type":"Color?","desc":"The color of the [NavigationBar] itself."},{"name":"elevation","type":"double?","desc":"The elevation of the [NavigationBar] itself."},{"name":"shadowColor","type":"Color?","desc":"The color used for the drop shadow to indicate elevation."},{"name":"surfaceTintColor","type":"Color?","desc":"The color used as an overlay on [backgroundColor] to indicate elevation."},{"name":"indicatorColor","type":"Color?","desc":"The color of the [indicatorShape] when this destination is selected."},{"name":"indicatorShape","type":"ShapeBorder?","desc":"The shape of the selected indicator."},{"name":"height","type":"double?","desc":"The height of the [NavigationBar] itself."},{"name":"labelBehavior","type":"NavigationDestinationLabelBehavior?","desc":"Defines how the [destinations]' labels will be laid out and when they'll be displayed."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The highlight color that's typically used to indicate that the [NavigationDestination] is focused, hovered, or pressed."},{"name":"labelTextStyle","type":"MaterialStateProperty?","desc":"/ The text style of the label."},{"name":"labelPadding","type":"EdgeInsetsGeometry?","desc":"The padding around the [NavigationDestination.label] widget."},{"name":"maintainBottomViewPadding","type":"bool","required":true,"desc":"Specifies whether the underlying [SafeArea] should maintain the bottom [MediaQueryData.viewPadding] instead of the bottom [MediaQueryData.padding]."}],"id":453,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_zh-CN.json deleted file mode 100644 index 22c80b38f..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationBar","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":"Material 3 导航栏组件。","fields":[{"name":"animationDuration","type":"Duration?","desc":"确定每个目标在选中和未选中之间转换的过渡时间。"},{"name":"selectedIndex","type":"int","required":true,"desc":"确定当前选择了 [destinations] 中的哪一个。"},{"name":"destinations","type":"List","required":true,"desc":"此 [NavigationBar] 中的目标列表(通常是 [NavigationDestination])。"},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"选择 [destinations] 之一时调用。"},{"name":"backgroundColor","type":"Color?","desc":"[NavigationBar] 本身的颜色。"},{"name":"elevation","type":"double?","desc":"[NavigationBar] 本身的高度。"},{"name":"shadowColor","type":"Color?","desc":"用于指示高度的投影颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"用作 [backgroundColor] 上的覆盖以指示高度的颜色。"},{"name":"indicatorColor","type":"Color?","desc":"选择此目标时 [indicatorShape] 的颜色。"},{"name":"indicatorShape","type":"ShapeBorder?","desc":"选中指示器的形状。"},{"name":"height","type":"double?","desc":"[NavigationBar] 本身的高度。"},{"name":"labelBehavior","type":"NavigationDestinationLabelBehavior?","desc":"定义 [destinations] 的标签如何布局以及何时显示。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"通常用于指示 [NavigationDestination] 被聚焦、悬停或按下的高亮颜色。"},{"name":"labelTextStyle","type":"MaterialStateProperty?","desc":"标签的文本样式。"},{"name":"labelPadding","type":"EdgeInsetsGeometry?","desc":"[NavigationDestination.label] 小部件周围的内边距。"},{"name":"maintainBottomViewPadding","type":"bool","required":true,"desc":"指定底层 [SafeArea] 是否应维护底部 [MediaQueryData.viewPadding] 而不是底部 [MediaQueryData.padding]。"}],"id":453,"localName":"NavigationBar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_en-US.json deleted file mode 100644 index 1c58c9af7..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationBarTheme","path":"/src/material/navigation_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines visual properties for [NavigationBar]s and [NavigationDestination]s in this widget's subtree.","fields":[{"name":"data","type":"NavigationBarThemeData","required":true,"desc":"Specifies the background color, label text style, icon theme, and label type values for descendant [NavigationBar] widgets."}],"id":454,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_zh-CN.json deleted file mode 100644 index c1ea99857..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationBarTheme","path":"/src/material/navigation_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [NavigationBar] 和 [NavigationDestination] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"NavigationBarThemeData","required":true,"desc":"为后代 [NavigationBar] 小部件指定背景颜色、标签文本样式、图标主题和标签类型值。"}],"id":454,"localName":"NavigationBarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_en-US.json deleted file mode 100644 index 864bc46b0..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationDestination","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":" A Material 3 [NavigationBar] destination.","fields":[{"name":"icon","type":"Widget","required":true,"desc":"The [Widget] (usually an [Icon]) that's displayed for this [NavigationDestination]."},{"name":"selectedIcon","type":"Widget?","desc":"The optional [Widget] (usually an [Icon]) that's displayed when this [NavigationDestination] is selected."},{"name":"label","type":"String","required":true,"desc":"The text label that appears below the icon of this [NavigationDestination]."},{"name":"tooltip","type":"String?","desc":"The text to display in the tooltip for this [NavigationDestination], when the user long presses the destination."},{"name":"enabled","type":"bool","required":true,"desc":"Indicates that this destination is selectable."}],"id":455,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_zh-CN.json deleted file mode 100644 index 394deffc7..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationDestination","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":"Material 3 [NavigationBar] 目标。","fields":[{"name":"icon","type":"Widget","required":true,"desc":"为此 [NavigationDestination] 显示的 [Widget](通常是 [Icon])。"},{"name":"selectedIcon","type":"Widget?","desc":"选择此 [NavigationDestination] 时显示的可选 [Widget](通常是 [Icon])。"},{"name":"label","type":"String","required":true,"desc":"出现在此 [NavigationDestination] 图标下方的文本标签。"},{"name":"tooltip","type":"String?","desc":"当用户长按目标时,在此 [NavigationDestination] 的工具提示中显示的文本。"},{"name":"enabled","type":"bool","required":true,"desc":"指示此目标是否可选择。"}],"id":455,"localName":"NavigationDestination","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_en-US.json deleted file mode 100644 index 5676ab70d..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationDrawer","path":"/src/material/navigation_drawer.dart","parents":["StatelessWidget","Widget"],"desc":" Material Design Navigation Drawer component.","fields":[{"name":"backgroundColor","type":"Color?","desc":"The background color of the [Material] that holds the [NavigationDrawer]'s contents."},{"name":"shadowColor","type":"Color?","desc":"The color used for the drop shadow to indicate elevation."},{"name":"surfaceTintColor","type":"Color?","desc":"The surface tint of the [Material] that holds the [NavigationDrawer]'s contents."},{"name":"elevation","type":"double?","desc":"The elevation of the [NavigationDrawer] itself."},{"name":"indicatorColor","type":"Color?","desc":"The color of the [indicatorShape] when this destination is selected."},{"name":"indicatorShape","type":"ShapeBorder?","desc":"The shape of the selected indicator."},{"name":"children","type":"List","required":true,"desc":"Defines the appearance of the items within the navigation drawer."},{"name":"selectedIndex","type":"int?","desc":"The index into destinations for the current selected [NavigationDrawerDestination] or null if no destination is selected."},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"Called when one of the [NavigationDrawerDestination] children is selected."},{"name":"tilePadding","type":"EdgeInsetsGeometry","required":true,"desc":"Defines the padding for [NavigationDrawerDestination] widgets (Drawer items)."}],"id":456,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_zh-CN.json deleted file mode 100644 index d6337801c..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationDrawer","path":"/src/material/navigation_drawer.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 导航抽屉组件。","fields":[{"name":"backgroundColor","type":"Color?","desc":"保存 [NavigationDrawer] 内容的 [Material] 的背景颜色。"},{"name":"shadowColor","type":"Color?","desc":"用于指示高度的投影颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"保存 [NavigationDrawer] 内容的 [Material] 的表面色调。"},{"name":"elevation","type":"double?","desc":"[NavigationDrawer] 本身的高度。"},{"name":"indicatorColor","type":"Color?","desc":"选择此目标时 [indicatorShape] 的颜色。"},{"name":"indicatorShape","type":"ShapeBorder?","desc":"选中指示器的形状。"},{"name":"children","type":"List","required":true,"desc":"定义导航抽屉内项目的外观。"},{"name":"selectedIndex","type":"int?","desc":"当前选择的 [NavigationDrawerDestination] 在目标中的索引,如果没有选择目标则为 null。"},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"选择 [NavigationDrawerDestination] 子项之一时调用。"},{"name":"tilePadding","type":"EdgeInsetsGeometry","required":true,"desc":"定义 [NavigationDrawerDestination] 小部件(抽屉项)的内边距。"}],"id":456,"localName":"NavigationDrawer","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_en-US.json deleted file mode 100644 index 82a68a261..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationDrawerDestination","path":"/src/material/navigation_drawer.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design [NavigationDrawer] destination.","fields":[{"name":"backgroundColor","type":"Color?","desc":"The background color of the destination."},{"name":"icon","type":"Widget","required":true,"desc":"The [Widget] (usually an [Icon]) that's displayed for this [NavigationDestination]."},{"name":"selectedIcon","type":"Widget?","desc":"The optional [Widget] (usually an [Icon]) that's displayed when this [NavigationDestination] is selected."},{"name":"label","type":"Widget","required":true,"desc":"The text label that appears on the right of the icon"},{"name":"enabled","type":"bool","required":true,"desc":"Indicates that this destination is selectable."}],"id":457,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_zh-CN.json deleted file mode 100644 index b51118076..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationDrawerDestination","path":"/src/material/navigation_drawer.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design [NavigationDrawer] 目标。","fields":[{"name":"backgroundColor","type":"Color?","desc":"目标的背景颜色。"},{"name":"icon","type":"Widget","required":true,"desc":"为此 [NavigationDestination] 显示的 [Widget](通常是 [Icon])。"},{"name":"selectedIcon","type":"Widget?","desc":"选择此 [NavigationDestination] 时显示的可选 [Widget](通常是 [Icon])。"},{"name":"label","type":"Widget","required":true,"desc":"出现在图标右侧的文本标签"},{"name":"enabled","type":"bool","required":true,"desc":"指示此目标是否可选择。"}],"id":457,"localName":"NavigationDrawerDestination","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_en-US.json deleted file mode 100644 index 3782b98d1..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationDrawerTheme","path":"/src/material/navigation_drawer_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines visual properties for [NavigationDrawer]s and [NavigationDestination]s in this widget's subtree.","fields":[{"name":"data","type":"NavigationDrawerThemeData","required":true,"desc":"Specifies the background color, label text style, icon theme, and label type values for descendant [NavigationDrawer] widgets."}],"id":458,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_zh-CN.json deleted file mode 100644 index c098b8675..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationDrawerTheme","path":"/src/material/navigation_drawer_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [NavigationDrawer] 和 [NavigationDestination] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"NavigationDrawerThemeData","required":true,"desc":"为后代 [NavigationDrawer] 小部件指定背景颜色、标签文本样式、图标主题和标签类型值。"}],"id":458,"localName":"NavigationDrawerTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_en-US.json deleted file mode 100644 index 9d688f305..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationIndicator","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":" Selection Indicator for the Material 3 [NavigationBar] and [NavigationRail] components.","fields":[{"name":"animation","type":"Animation","required":true,"desc":"Determines the scale of the indicator."},{"name":"color","type":"Color?","desc":"The fill color of this indicator."},{"name":"width","type":"double","required":true,"desc":"The width of this indicator."},{"name":"height","type":"double","required":true,"desc":"The height of this indicator."},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"The border radius of the shape of the indicator."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the indicator."}],"id":459,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_zh-CN.json deleted file mode 100644 index 1c2143191..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationIndicator","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":"Material 3 [NavigationBar] 和 [NavigationRail] 组件的选择指示器。","fields":[{"name":"animation","type":"Animation","required":true,"desc":"确定指示器的比例。"},{"name":"color","type":"Color?","desc":"此指示器的填充颜色。"},{"name":"width","type":"double","required":true,"desc":"此指示器的宽度。"},{"name":"height","type":"double","required":true,"desc":"此指示器的高度。"},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"指示器形状的边框半径。"},{"name":"shape","type":"ShapeBorder?","desc":"指示器的形状。"}],"id":459,"localName":"NavigationIndicator","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_en-US.json deleted file mode 100644 index f99294773..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationRail","path":"/src/material/navigation_rail.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design widget that is meant to be displayed at the left or right of an app to navigate between a small number of views, typically between three and five.","fields":[{"name":"backgroundColor","type":"Color?","desc":"Sets the color of the Container that holds all of the [NavigationRail]'s contents."},{"name":"extended","type":"bool","required":true,"desc":"Indicates that the [NavigationRail] should be in the extended state."},{"name":"leading","type":"Widget?","desc":"The leading widget in the rail that is placed above the destinations."},{"name":"trailing","type":"Widget?","desc":"The trailing widget in the rail that is placed below the destinations."},{"name":"destinations","type":"List","required":true,"desc":"Defines the appearance of the button items that are arrayed within the navigation rail."},{"name":"selectedIndex","type":"int?","desc":"The index into [destinations] for the current selected [NavigationRailDestination] or null if no destination is selected."},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"Called when one of the [destinations] is selected."},{"name":"elevation","type":"double?","desc":"The rail's elevation or z-coordinate."},{"name":"groupAlignment","type":"double?","desc":"The vertical alignment for the group of [destinations] within the rail."},{"name":"labelType","type":"NavigationRailLabelType?","desc":"Defines the layout and behavior of the labels for the default, unextended [NavigationRail]."},{"name":"unselectedLabelTextStyle","type":"TextStyle?","desc":"The [TextStyle] of a destination's label when it is unselected."},{"name":"selectedLabelTextStyle","type":"TextStyle?","desc":"The [TextStyle] of a destination's label when it is selected."},{"name":"unselectedIconTheme","type":"IconThemeData?","desc":"The visual properties of the icon in the unselected destination."},{"name":"selectedIconTheme","type":"IconThemeData?","desc":"The visual properties of the icon in the selected destination."},{"name":"minWidth","type":"double?","desc":"The smallest possible width for the rail regardless of the destination's icon or label size."},{"name":"minExtendedWidth","type":"double?","desc":"The final width when the animation is complete for setting [extended] to true."},{"name":"useIndicator","type":"bool?","desc":"If `true`, adds a rounded [NavigationIndicator] behind the selected destination's icon."},{"name":"indicatorColor","type":"Color?","desc":"Overrides the default value of [NavigationRail]'s selection indicator color, when [useIndicator] is true."},{"name":"indicatorShape","type":"ShapeBorder?","desc":"Overrides the default value of [NavigationRail]'s selection indicator shape, when [useIndicator] is true."}],"id":358,"lever":4,"family":1,"linkIds":[60,61],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of NavigationRail","desc":["【destinations】 : Menu data list 【List】","【selectedIndex】: Active index 【int】","【labelType】: Label style 【NavigationRailLabelType?】","【onDestinationSelected】: Menu click event 【ValueChanged?】"]},{"file":"node2_extend.dart","name":"Collapse Effect of NavigationRail","desc":["【elevation】 : Shadow depth 【double】","【leading】: Leading component 【Widget?】","【trailing】: Trailing component 【Widget?】","【extended】: Whether to expand 【bool】"]},{"file":"node3_dark.dart","name":"NavigationRail Style","desc":["【useIndicator】 : Whether to show the indicator 【bool】","【indicatorColor】: Indicator color 【Color?】","【backgroundColor】: Background color 【Color?】","【labelType】: Label style 【NavigationRailLabelType?】","【selectedIconTheme】: Selected icon style 【IconThemeData?】","【unselectedIconTheme】: Unselected icon style 【IconThemeData?】","【selectedLabelTextStyle】: Selected text style 【TextStyle?】","【unselectedLabelTextStyle】: Unselected text style 【TextStyle?】","【minExtendedWidth】: Expanded width 【double?】","【minWidth】: Unexpanded width 【double?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_zh-CN.json deleted file mode 100644 index cb8a95a5b..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationRail","path":"/src/material/navigation_rail.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 小部件,旨在显示在应用程序的左侧或右侧,用于在少数视图之间导航,通常在三到五个之间。","fields":[{"name":"backgroundColor","type":"Color?","desc":"设置包含所有 [NavigationRail] 内容的容器的颜色。"},{"name":"extended","type":"bool","required":true,"desc":"指示 [NavigationRail] 应处于扩展状态。"},{"name":"leading","type":"Widget?","desc":"导航栏中位于目标上方的前导小部件。"},{"name":"trailing","type":"Widget?","desc":"导航栏中位于目标下方的尾随小部件。"},{"name":"destinations","type":"List","required":true,"desc":"定义导航栏内排列的按钮项的外观。"},{"name":"selectedIndex","type":"int?","desc":"当前选择的 [NavigationRailDestination] 在 [destinations] 中的索引,如果没有选择目标则为 null。"},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"选择 [destinations] 之一时调用。"},{"name":"elevation","type":"double?","desc":"导航栏的高度或 z 坐标。"},{"name":"groupAlignment","type":"double?","desc":"导航栏内 [destinations] 组的垂直对齐。"},{"name":"labelType","type":"NavigationRailLabelType?","desc":"定义默认、未扩展 [NavigationRail] 的标签布局和行为。"},{"name":"unselectedLabelTextStyle","type":"TextStyle?","desc":"目标未选择时其标签的 [TextStyle]。"},{"name":"selectedLabelTextStyle","type":"TextStyle?","desc":"目标选择时其标签的 [TextStyle]。"},{"name":"unselectedIconTheme","type":"IconThemeData?","desc":"未选择目标中图标的视觉属性。"},{"name":"selectedIconTheme","type":"IconThemeData?","desc":"选择目标中图标的视觉属性。"},{"name":"minWidth","type":"double?","desc":"无论目标的图标或标签大小如何,导航栏的最小可能宽度。"},{"name":"minExtendedWidth","type":"double?","desc":"将 [extended] 设置为 true 的动画完成时的最终宽度。"},{"name":"useIndicator","type":"bool?","desc":"如果为 `true`,在选定目标的图标后面添加圆形 [NavigationIndicator]。"},{"name":"indicatorColor","type":"Color?","desc":"当 [useIndicator] 为 true 时,覆盖 [NavigationRail] 选择指示器颜色的默认值。"},{"name":"indicatorShape","type":"ShapeBorder?","desc":"当 [useIndicator] 为 true 时,覆盖 [NavigationRail] 选择指示器形状的默认值。"}],"id":358,"localName":"侧栏导航","lever":4,"family":1,"linkIds":[60,61],"nodes":[{"file":"node1_base.dart","name":"NavigationRail 基本使用","desc":["【destinations】 : 菜单数据列表 【List】","【selectedIndex】: 激活索引 【int】","【labelType】: 标签样式 【NavigationRailLabelType?】","【onDestinationSelected】: 菜单点击事件 【ValueChanged?】"]},{"file":"node2_extend.dart","name":"NavigationRail 折叠效果","desc":["【elevation】 : 影深 【double】","【leading】: 首组件 【Widget?】","【trailing】: 尾组件 【Widget?】","【extended】: 是否展开 【bool】"]},{"file":"node3_dark.dart","name":"NavigationRail 样式","desc":["【useIndicator】 : 是否显示指示器 【bool】","【indicatorColor】: 指示器颜色 【Color?】","【backgroundColor】: 背景色 【Color?】","【labelType】: 标签样式 【NavigationRailLabelType?】","【selectedIconTheme】: 选中图标样式 【IconThemeData?】","【unselectedIconTheme】: 未选中图标样式 【IconThemeData?】","【selectedLabelTextStyle】: 选中文字样式 【TextStyle?】","【unselectedLabelTextStyle】: 未选中文字样式 【TextStyle?】","【minExtendedWidth】: 展开宽度 【double?】","【minWidth】: 未展开宽度 【double?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_en-US.json deleted file mode 100644 index 62f06a59e..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationRailTheme","path":"/src/material/navigation_rail_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines visual properties for [NavigationRail]s and [NavigationRailDestination]s in this widget's subtree.","fields":[{"name":"data","type":"NavigationRailThemeData","required":true,"desc":"Specifies the background color, elevation, label text style, icon theme, group alignment, and label type and border values for descendant [NavigationRail] widgets."}],"id":460,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_zh-CN.json deleted file mode 100644 index 81519f8f1..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationRailTheme","path":"/src/material/navigation_rail_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [NavigationRail] 和 [NavigationRailDestination] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"NavigationRailThemeData","required":true,"desc":"为后代 [NavigationRail] 小部件指定背景颜色、高度、标签文本样式、图标主题、组对齐以及标签类型和边框值。"}],"id":460,"localName":"NavigationRailTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_en-US.json deleted file mode 100644 index 0b61d4088..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationToolbar","path":"/src/widgets/navigation_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" [NavigationToolbar] is a layout helper to position 3 widgets or groups of widgets along a horizontal axis that's sensible for an application's navigation bar such as in Material Design and in iOS.","fields":[{"name":"leading","type":"Widget?","desc":"Widget to place at the start of the horizontal toolbar."},{"name":"middle","type":"Widget?","desc":"Widget to place in the middle of the horizontal toolbar, occupying as much remaining space as possible."},{"name":"trailing","type":"Widget?","desc":"Widget to place at the end of the horizontal toolbar."},{"name":"centerMiddle","type":"bool","required":true,"desc":"Whether to align the [middle] widget to the center of this widget or next to the [leading] widget when false."},{"name":"middleSpacing","type":"double","required":true,"desc":"The spacing around the [middle] widget on horizontal axis."}],"id":214,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of NavigationToolbar","desc":["【leading】: Left component 【Widget】","【middle】: Middle component 【Widget】","【trailing】: Right component 【Widget】","【centerMiddle】: Whether the middle component is centered 【bool】","【middleSpacing】: Distance of the middle component from the left 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_zh-CN.json deleted file mode 100644 index 67356dbb2..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationToolbar","path":"/src/widgets/navigation_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"[NavigationToolbar] 是一个布局助手,用于沿水平轴定位 3 个小部件或小部件组,这对于应用程序的导航栏(如 Material Design 和 iOS 中)是合理的。","fields":[{"name":"leading","type":"Widget?","desc":"放置在水平工具栏开始处的小部件。"},{"name":"middle","type":"Widget?","desc":"放置在水平工具栏中间的小部件,占用尽可能多的剩余空间。"},{"name":"trailing","type":"Widget?","desc":"放置在水平工具栏末端的小部件。"},{"name":"centerMiddle","type":"bool","required":true,"desc":"是否将 [middle] 小部件对齐到此小部件的中心,或者当为 false 时对齐到 [leading] 小部件旁边。"},{"name":"middleSpacing","type":"double","required":true,"desc":"水平轴上 [middle] 小部件周围的间距。"}],"id":214,"localName":"导航工具条","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"NavigationToolbar基本使用","desc":["【leading】 : 左侧组件 【Widget】","【middle】: 中间组件 【Widget】","【trailing】: 右侧组件组件 【Widget】","【centerMiddle】: 中间组件是否居中 【bool】","【middleSpacing】: 中间组件距左距离 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_en-US.json b/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_en-US.json deleted file mode 100644 index 25eac2c66..000000000 --- a/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Navigator","path":"/src/widgets/navigator.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that manages a set of child widgets with a stack discipline.","fields":[{"name":"pages","type":"List>","required":true,"desc":"The list of pages with which to populate the history."},{"name":"onPopPage","type":"PopPageCallback?","desc":"This is deprecated and replaced by [onDidRemovePage]."},{"name":"onDidRemovePage","type":"DidRemovePageCallback?","desc":"Called when the [Route] associated with the given [Page] has been removed from the Navigator."},{"name":"transitionDelegate","type":"TransitionDelegate","required":true,"desc":"The delegate used for deciding how routes transition in or off the screen during the [pages] updates."},{"name":"initialRoute","type":"String?","desc":"The name of the first route to show."},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"Called to generate a route for a given [RouteSettings]."},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"Called when [onGenerateRoute] fails to generate a route."},{"name":"observers","type":"List","required":true,"desc":"A list of observers for this navigator."},{"name":"restorationScopeId","type":"String?","desc":"Restoration ID to save and restore the state of the navigator, including its history."},{"name":"routeTraversalEdgeBehavior","type":"TraversalEdgeBehavior","required":true,"desc":"Controls the transfer of focus beyond the first and the last items of a focus scope that defines focus traversal of widgets within a route."},{"name":"routeDirectionalTraversalEdgeBehavior","type":"TraversalEdgeBehavior","required":true,"desc":"Controls the directional transfer of focus beyond the first and the last items of a focus scope that defines focus traversal of widgets within a route."},{"name":"onGenerateInitialRoutes","type":"RouteListFactory","required":true,"desc":"Called when the widget is created to generate the initial list of [Route] objects if [initialRoute] is not null."},{"name":"reportsRouteUpdateToEngine","type":"bool","required":true,"desc":"Whether this navigator should report route update message back to the engine when the top-most route changes."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"requestFocus","type":"bool","required":true,"desc":"Whether or not the navigator and it's new topmost route should request focus when the new route is pushed onto the navigator."}],"id":232,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Navigator","desc":["【initialRoute】: Initial display route 【String】","【onGenerateRoute】: Route generator 【RouteFactory】","【observers】: Route observers 【List】","【onPopPage】: Pop page callback 【PopPageCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_zh-CN.json deleted file mode 100644 index 188ee00dc..000000000 --- a/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Navigator","path":"/src/widgets/navigator.dart","parents":["StatefulWidget","Widget"],"desc":"使用堆栈规则管理一组子小部件的小部件。","fields":[{"name":"pages","type":"List>","required":true,"desc":"用于填充历史记录的页面列表。"},{"name":"onPopPage","type":"PopPageCallback?","desc":"这已弃用并被 [onDidRemovePage] 替换。"},{"name":"onDidRemovePage","type":"DidRemovePageCallback?","desc":"当与给定 [Page] 关联的 [Route] 从 Navigator 中移除时调用。"},{"name":"transitionDelegate","type":"TransitionDelegate","required":true,"desc":"用于决定在 [pages] 更新期间路由如何进入或离开屏幕的委托。"},{"name":"initialRoute","type":"String?","desc":"要显示的第一个路由的名称。"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"调用以为给定的 [RouteSettings] 生成路由。"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"当 [onGenerateRoute] 无法生成路由时调用。"},{"name":"observers","type":"List","required":true,"desc":"此导航器的观察者列表。"},{"name":"restorationScopeId","type":"String?","desc":"保存和恢复导航器状态(包括其历史记录)的恢复 ID。"},{"name":"routeTraversalEdgeBehavior","type":"TraversalEdgeBehavior","required":true,"desc":"控制焦点在定义路由内小部件焦点遍历的焦点范围的第一个和最后一个项目之外的传递。"},{"name":"routeDirectionalTraversalEdgeBehavior","type":"TraversalEdgeBehavior","required":true,"desc":"控制焦点在定义路由内小部件焦点遍历的焦点范围的第一个和最后一个项目之外的方向传递。"},{"name":"onGenerateInitialRoutes","type":"RouteListFactory","required":true,"desc":"如果 [initialRoute] 不为 null,在创建小部件时调用以生成初始 [Route] 对象列表。"},{"name":"reportsRouteUpdateToEngine","type":"bool","required":true,"desc":"当最顶层路由更改时,此导航器是否应向引擎报告路由更新消息。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"requestFocus","type":"bool","required":true,"desc":"当新路由被推送到导航器上时,导航器及其新的最顶层路由是否应请求焦点。"}],"id":232,"localName":"导航器","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Navigator基本用法","desc":["【initialRoute】 : 最初显示路由 【String】","【onGenerateRoute】 : 路由生成器 【RouteFactory】","【observers】 : 路由监听器 【List】","【onPopPage】 : 出栈回调 【PopPageCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_en-US.json deleted file mode 100644 index f6ca0c2a4..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigatorPopHandler","path":"/src/widgets/navigator_pop_handler.dart","parents":["StatefulWidget","Widget"],"desc":" Enables the handling of system back gestures.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget to place below this in the widget tree."},{"name":"enabled","type":"bool","required":true,"desc":"Whether this widget's ability to handle system back gestures is enabled or disabled."},{"name":"onPop","type":"VoidCallback?","desc":"Called when a handleable pop event happens."},{"name":"onPopWithResult","type":"PopResultCallback?","desc":"Called when a handleable pop event happens."}],"id":461,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_zh-CN.json deleted file mode 100644 index 7f7656d87..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigatorPopHandler","path":"/src/widgets/navigator_pop_handler.dart","parents":["StatefulWidget","Widget"],"desc":"启用系统返回手势的处理。","fields":[{"name":"child","type":"Widget","required":true,"desc":"在小部件树中放置在此下方的小部件。"},{"name":"enabled","type":"bool","required":true,"desc":"此小部件处理系统返回手势的能力是启用还是禁用。"},{"name":"onPop","type":"VoidCallback?","desc":"发生可处理的弹出事件时调用。"},{"name":"onPopWithResult","type":"PopResultCallback?","desc":"发生可处理的弹出事件时调用。"}],"id":461,"localName":"NavigatorPopHandler","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_en-US.json deleted file mode 100644 index e3262f552..000000000 --- a/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NestedScrollView","path":"/src/widgets/nested_scroll_view.dart","parents":["StatefulWidget","Widget"],"desc":" A scrolling view inside of which can be nested other scrolling views, with their scroll positions being intrinsically linked.","fields":[{"name":"controller","type":"ScrollController?","desc":"An object that can be used to control the position to which the outer scroll view is scrolled."},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"Whether the scroll view scrolls in the reading direction."},{"name":"physics","type":"ScrollPhysics?","desc":"How the scroll view should respond to user input."},{"name":"headerSliverBuilder","type":"NestedScrollViewHeaderSliversBuilder","required":true,"desc":"A builder for any widgets that are to precede the inner scroll views (as given by [body])."},{"name":"body","type":"Widget","required":true,"desc":"The widget to show inside the [NestedScrollView]."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"floatHeaderSlivers","type":"bool","required":true,"desc":"Whether or not the [NestedScrollView]'s coordinator should prioritize the outer scrollable over the inner when scrolling back."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"}],"id":251,"lever":4,"family":4,"linkIds":[183,344],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of NestedScrollView","desc":["【controller】 : Scroll Controller 【ScrollController】","【scrollDirection】 : Scroll Direction 【Axis】","【reverse】 : Whether to Reverse 【bool】","【physics】 : Scroll Physics 【ScrollPhysics】","【dragStartBehavior】 : Drag Start Behavior 【DragStartBehavior】","【headerSliverBuilder】 : *Header Builder 【NestedScrollViewHeaderSliversBuilder】","【body】 : *Content 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_zh-CN.json deleted file mode 100644 index 986339e49..000000000 --- a/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NestedScrollView","path":"/src/widgets/nested_scroll_view.dart","parents":["StatefulWidget","Widget"],"desc":"一个滚动视图,其中可以嵌套其他滚动视图,它们的滚动位置本质上是链接的。","fields":[{"name":"controller","type":"ScrollController?","desc":"可用于控制外部滚动视图滚动到的位置的对象。"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"滚动视图是否在阅读方向上滚动。"},{"name":"physics","type":"ScrollPhysics?","desc":"滚动视图应如何响应用户输入。"},{"name":"headerSliverBuilder","type":"NestedScrollViewHeaderSliversBuilder","required":true,"desc":"用于构建在内部滚动视图(由 [body] 给出)之前的任何小部件的构建器。"},{"name":"body","type":"Widget","required":true,"desc":"在 [NestedScrollView] 内显示的小部件。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"floatHeaderSlivers","type":"bool","required":true,"desc":"[NestedScrollView] 的协调器在向后滚动时是否应优先考虑外部可滚动而不是内部。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"}],"id":251,"localName":"嵌套滑动视图","lever":4,"family":4,"linkIds":[183,344],"nodes":[{"file":"node1_base.dart","name":"NestedScrollView基本用法","desc":["【controller】 : 滑动控制器 【ScrollController】","【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向 【bool】","【physics】 : 滑顶样式 【ScrollPhysics】","【dragStartBehavior】 : 开始拖动行为 【DragStartBehavior】","【headerSliverBuilder】 : *头部构造器 【NestedScrollViewHeaderSliversBuilder】","【body】 : *内容 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_en-US.json b/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_en-US.json deleted file mode 100644 index 2829f5729..000000000 --- a/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NestedScrollViewViewport","path":"/src/widgets/nested_scroll_view.dart","parents":["Viewport","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" The [Viewport] variant used by [NestedScrollView].","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"The handle to the [SliverOverlapAbsorber] that is feeding this injector."}],"id":344,"lever":1,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to NestedScrollViewViewport","desc":["【offset】 : *Offset 【ViewportOffset】","【handle】 : *Handle 【SliverOverlapAbsorberHandle】","【axisDirection】 : Axis Direction 【AxisDirection】","【crossAxisDirection】 : Cross Axis Direction 【AxisDirection】","【slivers】 : Child Components 【List】","【clipBehavior】 : Clip Behavior 【Clip】","【anchor】 : Anchor 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_zh-CN.json deleted file mode 100644 index b6e6e2208..000000000 --- a/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NestedScrollViewViewport","path":"/src/widgets/nested_scroll_view.dart","parents":["Viewport","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"[NestedScrollView] 使用的 [Viewport] 变体。","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"正在为此注入器提供数据的 [SliverOverlapAbsorber] 的句柄。"}],"id":344,"localName":"嵌套滑动视口","lever":1,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"NestedScrollViewViewport 介绍","desc":["【offset】 : *偏移 【ViewportOffset】","【handle】 : *处理器 【SliverOverlapAbsorberHandle】","【axisDirection】 : 轴向 【AxisDirection】","【crossAxisDirection】 : 交叉轴向 【AxisDirection】","【slivers】 : 子组件 【List】","【clipBehavior】 : 裁剪行为 【Clip】","【anchor】 : 锚点 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_en-US.json b/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_en-US.json deleted file mode 100644 index 983ef077c..000000000 --- a/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NotificationListener","path":"/src/widgets/notification_listener.dart","parents":["ProxyWidget","Widget"],"desc":" A widget that listens for [Notification]s bubbling up the tree.","fields":[{"name":"onNotification","type":"NotificationListenerCallback?","desc":"Called when a notification of the appropriate type arrives at this location in the tree."}],"id":220,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Listen to OverscrollIndicatorNotification","desc":["This notification is called back when sliding to the top and bottom, and it is judged whether it is the top or bottom by the leading property. In addition, you can remove the blue shadow at the top and bottom sliding through notification#disallowGlow()."]},{"file":"node2_update.dart","name":"Listen to ScrollUpdateNotification","desc":["During the sliding process, the sliding data is called back, and you can obtain a large amount of data to operate."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_zh-CN.json deleted file mode 100644 index aa445b5ea..000000000 --- a/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NotificationListener","path":"/src/widgets/notification_listener.dart","parents":["ProxyWidget","Widget"],"desc":"监听树中冒泡的 [Notification] 的小部件。","fields":[{"name":"onNotification","type":"NotificationListenerCallback?","desc":"当适当类型的通知到达树中的此位置时调用。"}],"id":220,"localName":"通知监听器","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"监听OverscrollIndicatorNotification","desc":["该通知之后在滑动到最顶和最底是回调,通过leading属性判断是顶部还是底部。另外通过notification#disallowGlow(),可以去除顶底滑动蓝色阴影"]},{"file":"node2_update.dart","name":"监听ScrollUpdateNotification","desc":["在滑动过程中对滑动数据进行回调,你可以获取大量数据来进行操作。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_en-US.json deleted file mode 100644 index c4da0fe7f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ObstructingPreferredSizeWidget","path":"/src/cupertino/page_scaffold.dart","abstract":true,"parents":["Object","PreferredSizeWidget","Widget"],"desc":" Widget that has a preferred size and reports whether it fully obstructs widgets behind it.","fields":[],"id":462,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_zh-CN.json deleted file mode 100644 index b8894a60e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ObstructingPreferredSizeWidget","path":"/src/cupertino/page_scaffold.dart","abstract":true,"parents":["Object","PreferredSizeWidget","Widget"],"desc":"具有首选大小并报告是否完全阻挡其后面小部件的小部件。","fields":[],"id":462,"localName":"ObstructingPreferredSizeWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_en-US.json b/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_en-US.json deleted file mode 100644 index b7354b4e6..000000000 --- a/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Offstage","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that lays the child out as if it was in the tree, but without painting anything, without making the child available for hit testing, and without taking any room in the parent.","fields":[{"name":"offstage","type":"bool","required":true,"desc":"Whether the child is hidden from the rest of the tree."}],"id":71,"lever":3,"family":2,"linkIds":[10],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of LimitedBox","desc":["【child】: Child component 【Widget】","【offstage】: Whether to disappear 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_zh-CN.json deleted file mode 100644 index 9848c03fc..000000000 --- a/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Offstage","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将子项布局为好像它在树中一样,但不绘制任何内容,不使子项可用于命中测试,也不在父项中占用任何空间的小部件。","fields":[{"name":"offstage","type":"bool","required":true,"desc":"子项是否从树的其余部分隐藏。"}],"id":71,"localName":"消失组件","lever":3,"family":2,"linkIds":[10],"nodes":[{"file":"node1_base.dart","name":"LimitedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【offstage】 : 是否消失 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_en-US.json b/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_en-US.json deleted file mode 100644 index b7ee467dc..000000000 --- a/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Opacity","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that makes its child partially transparent.","fields":[{"name":"opacity","type":"double","required":true,"desc":"The fraction to scale the child's alpha value."},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"Whether the semantic information of the children is always included."}],"id":73,"lever":3,"family":2,"linkIds":[89,118],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Opacity","desc":["【child】 : Child component 【Widget】","【opacity】 : Transparency 0~1 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_zh-CN.json deleted file mode 100644 index 00a4d91d3..000000000 --- a/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Opacity","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使其子项部分透明的小部件。","fields":[{"name":"opacity","type":"double","required":true,"desc":"缩放子项 alpha 值的分数。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含子项的语义信息。"}],"id":73,"localName":"透明化","lever":3,"family":2,"linkIds":[89,118],"nodes":[{"file":"node1_base.dart","name":"Opacity基本使用","desc":["【child】 : 孩子组件 【Widget】","【opacity】 : 透明度0~1 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_en-US.json deleted file mode 100644 index fbfb57493..000000000 --- a/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OrientationBuilder","path":"/src/widgets/orientation_builder.dart","parents":["StatelessWidget","Widget"],"desc":" Builds a widget tree that can depend on the parent widget's orientation (distinct from the device orientation).","fields":[{"name":"builder","type":"OrientationWidgetBuilder","required":true,"desc":"Builds the widgets below this widget given this widget's orientation."}],"id":203,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of OrientationBuilder","desc":["【builder】: Orientation component builder 【OrientationWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_zh-CN.json deleted file mode 100644 index 81018041c..000000000 --- a/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OrientationBuilder","path":"/src/widgets/orientation_builder.dart","parents":["StatelessWidget","Widget"],"desc":"构建可以依赖于父小部件方向(与设备方向不同)的小部件树。","fields":[{"name":"builder","type":"OrientationWidgetBuilder","required":true,"desc":"根据此小部件的方向构建此小部件下方的小部件。"}],"id":203,"localName":"方向构造器","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"OrientationBuilder基本使用","desc":["【builder】 : 方向组件构造器 【OrientationWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_en-US.json b/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_en-US.json deleted file mode 100644 index 83894a74e..000000000 --- a/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OutlinedButton","path":"/src/material/outlined_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":" A Material Design \"Outlined Button\"; essentially a [TextButton] with an outlined border.","fields":[],"id":355,"lever":3,"family":1,"linkIds":[353,27,354],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of OutlinedButton","desc":["【child】: Button content 【Widget】","【onPressed】: Click event 【VoidCallback】","【onLongPress】: Long press event 【VoidCallback】"]},{"file":"node2_style.dart","name":"OutlinedButton Style","desc":["【style】: Button style 【ButtonStyle】","【focusNode】: Focus 【FocusNode】","【clipBehavior】: Clip behavior 【Clip】","【autofocus】: Autofocus 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_zh-CN.json deleted file mode 100644 index e34f90293..000000000 --- a/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OutlinedButton","path":"/src/material/outlined_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":"Material Design \"轮廓按钮\";本质上是带有轮廓边框的 [TextButton]。","fields":[],"id":355,"localName":"边框按钮","lever":3,"family":1,"linkIds":[353,27,354],"nodes":[{"file":"node1_base.dart","name":"OutlinedButton基本使用","desc":["【child】 : 按钮内容 【Widget】","【onPressed】 : 点击事件 【VoidCallback】","【onLongPress】 : 长按事件 【VoidCallback】"]},{"file":"node2_style.dart","name":"OutlinedButton样式","desc":["【style】 : 按钮样式 【ButtonStyle】","【focusNode】 : 焦点 【FocusNode】","【clipBehavior】 : 裁剪行为 【Clip】","【autofocus】 : 自动聚焦 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_en-US.json deleted file mode 100644 index 087a19b86..000000000 --- a/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OutlinedButtonTheme","path":"/src/material/outlined_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [OutlinedButton] descendants.","fields":[{"name":"data","type":"OutlinedButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":463,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_zh-CN.json deleted file mode 100644 index c3632eae8..000000000 --- a/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OutlinedButtonTheme","path":"/src/material/outlined_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [OutlinedButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"OutlinedButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":463,"localName":"OutlinedButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_en-US.json b/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_en-US.json deleted file mode 100644 index d211c8881..000000000 --- a/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OverflowBar","path":"/src/widgets/overflow_bar.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that lays out its [children] in a row unless they \"overflow\" the available horizontal space, in which case it lays them out in a column instead.","fields":[{"name":"spacing","type":"double","required":true,"desc":"The width of the gap between [children] for the default horizontal layout."},{"name":"alignment","type":"MainAxisAlignment?","desc":"Defines the [children]'s horizontal layout according to the same rules as for [Row.mainAxisAlignment]."},{"name":"overflowSpacing","type":"double","required":true,"desc":"The height of the gap between [children] in the vertical \"overflow\" layout."},{"name":"overflowAlignment","type":"OverflowBarAlignment","required":true,"desc":"The horizontal alignment of the [children] within the vertical \"overflow\" layout."},{"name":"overflowDirection","type":"VerticalDirection","required":true,"desc":"Defines the order that the [children] appear in, if the horizontal layout overflows."},{"name":"textDirection","type":"TextDirection?","desc":"Determines the order that the [children] appear in for the default horizontal layout, and the interpretation of [OverflowBarAlignment.start] and [OverflowBarAlignment.end] for the vertical overflow layout."}],"id":464,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_zh-CN.json deleted file mode 100644 index 3f469dc70..000000000 --- a/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OverflowBar","path":"/src/widgets/overflow_bar.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其 [children] 布局在一行中的小部件,除非它们溢出可用的水平空间,在这种情况下,它会将它们布局在一列中。","fields":[{"name":"spacing","type":"double","required":true,"desc":"默认水平布局中 [children] 之间间隙的宽度。"},{"name":"alignment","type":"MainAxisAlignment?","desc":"根据与 [Row.mainAxisAlignment] 相同的规则定义 [children] 的水平布局。"},{"name":"overflowSpacing","type":"double","required":true,"desc":"垂直"},{"name":"overflowAlignment","type":"OverflowBarAlignment","required":true,"desc":"垂直"},{"name":"overflowDirection","type":"VerticalDirection","required":true,"desc":"如果水平布局溢出,定义 [children] 出现的顺序。"},{"name":"textDirection","type":"TextDirection?","desc":"确定默认水平布局中 [children] 出现的顺序,以及垂直溢出布局中 [OverflowBarAlignment.start] 和 [OverflowBarAlignment.end] 的解释。"}],"id":464,"localName":"OverflowBar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_en-US.json b/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_en-US.json deleted file mode 100644 index 6848a88f1..000000000 --- a/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OverflowBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that imposes different constraints on its child than it gets from its parent, possibly allowing the child to overflow the parent.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the child."},{"name":"minWidth","type":"double?","desc":"The minimum width constraint to give the child. Set this to null (the default) to use the constraint from the parent instead."},{"name":"maxWidth","type":"double?","desc":"The maximum width constraint to give the child. Set this to null (the default) to use the constraint from the parent instead."},{"name":"minHeight","type":"double?","desc":"The minimum height constraint to give the child. Set this to null (the default) to use the constraint from the parent instead."},{"name":"maxHeight","type":"double?","desc":"The maximum height constraint to give the child. Set this to null (the default) to use the constraint from the parent instead."},{"name":"fit","type":"OverflowBoxFit","required":true,"desc":"The way to size the render object."}],"id":83,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of OverflowBox","desc":["【child】: Child component 【Widget】","【minWidth】: Minimum width 【double】","【minHeight】: Minimum height 【double】","【maxHeight】: Maximum height 【double】","【maxWidth】: Maximum width 【double】","【alignment】: Alignment 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_zh-CN.json deleted file mode 100644 index 0410be0f3..000000000 --- a/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OverflowBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对其子项施加与从其父项获得的约束不同的约束的小部件,可能允许子项溢出父项。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何对齐子项。"},{"name":"minWidth","type":"double?","desc":"给子项的最小宽度约束。将此设置为 null(默认值)以使用来自父项的约束。"},{"name":"maxWidth","type":"double?","desc":"给子项的最大宽度约束。将此设置为 null(默认值)以使用来自父项的约束。"},{"name":"minHeight","type":"double?","desc":"给子项的最小高度约束。将此设置为 null(默认值)以使用来自父项的约束。"},{"name":"maxHeight","type":"double?","desc":"给子项的最大高度约束。将此设置为 null(默认值)以使用来自父项的约束。"},{"name":"fit","type":"OverflowBoxFit","required":true,"desc":"调整渲染对象大小的方式。"}],"id":83,"localName":"溢出盒","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"OverflowBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【minWidth】 : 最小宽 【double】","【minHeight】 : 最小高 【double】","【maxHeight】 : 最大高 【double】","【maxWidth】 : 最大宽 【double】","【alignment】 : 对齐方式 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_en-US.json b/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_en-US.json deleted file mode 100644 index d37a8f9d7..000000000 --- a/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Overlay","path":"/src/widgets/overlay.dart","parents":["StatefulWidget","Widget"],"desc":" A stack of entries that can be managed independently.","fields":[{"name":"initialEntries","type":"List","required":true,"desc":"The entries to include in the overlay initially."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":182,"lever":5,"family":1,"linkIds":[265,266],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Overlay","desc":["Overlay.of(context).insert inserts a global component"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_zh-CN.json deleted file mode 100644 index 28d85c94f..000000000 --- a/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Overlay","path":"/src/widgets/overlay.dart","parents":["StatefulWidget","Widget"],"desc":"可以独立管理的条目堆栈。","fields":[{"name":"initialEntries","type":"List","required":true,"desc":"最初包含在覆盖层中的条目。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":182,"localName":"悬浮组件","lever":5,"family":1,"linkIds":[265,266],"nodes":[{"file":"node1_base.dart","name":"Overlay基本使用","desc":["Overlay.of(context).insert插入全局组件"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_en-US.json b/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_en-US.json deleted file mode 100644 index f456006c4..000000000 --- a/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OverlayPortal","path":"/src/widgets/overlay.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that renders its overlay child on an [Overlay].","fields":[{"name":"controller","type":"OverlayPortalController","required":true,"desc":"The controller to show, hide and bring to top the overlay child."},{"name":"overlayChildBuilder","type":"WidgetBuilder","required":true,"desc":"A [WidgetBuilder] used to build a widget below this widget in the tree, that renders on the closest [Overlay]."},{"name":"child","type":"Widget?","desc":"A widget below this widget in the tree."}],"id":465,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_zh-CN.json deleted file mode 100644 index b52bdf2cc..000000000 --- a/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OverlayPortal","path":"/src/widgets/overlay.dart","parents":["StatefulWidget","Widget"],"desc":"在 [Overlay] 上渲染其覆盖子项的小部件。","fields":[{"name":"controller","type":"OverlayPortalController","required":true,"desc":"显示、隐藏和置顶覆盖子项的控制器。"},{"name":"overlayChildBuilder","type":"WidgetBuilder","required":true,"desc":"用于在树中此小部件下方构建小部件的 [WidgetBuilder],该小部件在最近的 [Overlay] 上渲染。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":465,"localName":"OverlayPortal","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Padding/Padding_en-US.json b/modules/widget_system/widgets/doc/widgets/Padding/Padding_en-US.json deleted file mode 100644 index 76ff9bef5..000000000 --- a/modules/widget_system/widgets/doc/widgets/Padding/Padding_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Padding","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that insets its child by the given padding.","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the child."}],"id":74,"lever":4,"family":2,"linkIds":[1,191],"nodes":[{"file":"node1_all.dart","name":"Padding Equal Margin on All Sides","desc":["【child】: Child component 【Widget】","【padding】: Inner four-sided margin 【EdgeInsetsGeometry】","EdgeInsets.all is used to define the same margin on all four sides"]},{"file":"node2_only.dart","name":"Padding Individual Margin","desc":["EdgeInsets.only is used to define the same margin on all four sides"]},{"file":"node3_symmetric.dart","name":"Padding Directional Margin","desc":["EdgeInsets.symmetric is used to define horizontal and vertical margins"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Padding/Padding_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Padding/Padding_zh-CN.json deleted file mode 100644 index 1a6c23e98..000000000 --- a/modules/widget_system/widgets/doc/widgets/Padding/Padding_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Padding","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"通过给定的内边距插入其子项的小部件。","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"插入子项的空间量。"}],"id":74,"localName":"边距组件","lever":4,"family":2,"linkIds":[1,191],"nodes":[{"file":"node1_all.dart","name":"Padding四面等边距","desc":["【child】 : 孩子组件 【Widget】","【padding】 : 内四边距 【EdgeInsetsGeometry】\"","EdgeInsets.all用来限定相同的四边边距"]},{"file":"node2_only.dart","name":"Padding单独边距边距","desc":["EdgeInsets.only用来限定相同的四边边距"]},{"file":"node3_symmetric.dart","name":"Padding方向边距","desc":["EdgeInsets.symmetric用来限定水平和竖直方向的边距"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_en-US.json b/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_en-US.json deleted file mode 100644 index 03a4dc1e1..000000000 --- a/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PageStorage","path":"/src/widgets/page_storage.dart","parents":["StatelessWidget","Widget"],"desc":" Establish a subtree in which widgets can opt into persisting states after being destroyed.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"bucket","type":"PageStorageBucket","required":true,"desc":"The page storage bucket to use for this subtree."}],"id":210,"lever":3,"family":0,"linkIds":[52,165],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PageStorage","desc":["【bucket】: Storage Area 【PageStorageBucket】","【child】: Child Widget 【Widget】","When switching interfaces and initializing components, the state will not be reset. As in the CountWidget example, the child component needs to read the state from the storage during initialization and write the state to the storage when changing the state. Additionally, MaterialApp already has PageStorage built-in, but you can also create your own PageStorage."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_zh-CN.json deleted file mode 100644 index da56e4f7f..000000000 --- a/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PageStorage","path":"/src/widgets/page_storage.dart","parents":["StatelessWidget","Widget"],"desc":"建立一个子树,其中小部件可以选择在被销毁后持久化状态。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"bucket","type":"PageStorageBucket","required":true,"desc":"用于此子树的页面存储桶。"}],"id":210,"localName":"页面存储器","lever":3,"family":0,"linkIds":[52,165],"nodes":[{"file":"node1_base.dart","name":"PageStorage基本使用","desc":["【bucket】 : 存储区 【PageStorageBucket】","【child】: 子组件 【Widget】","上面切换界面初始化组件时并不会将状态重置。如上CountWidget,子组件需要在初始化时从存储器中读取状态,在改变状态时将状态量写入存储器。另外,如果使用MaterialApp已经内置了PageStorage,不过你也可以创建PageStorage。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PageView/PageView_en-US.json b/modules/widget_system/widgets/doc/widgets/PageView/PageView_en-US.json deleted file mode 100644 index 2b5968560..000000000 --- a/modules/widget_system/widgets/doc/widgets/PageView/PageView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PageView","path":"/src/widgets/page_view.dart","parents":["StatefulWidget","Widget"],"desc":" A scrollable list that works page by page.","fields":[{"name":"allowImplicitScrolling","type":"bool","required":true,"desc":"Controls whether the widget's pages will respond to [RenderObject.showOnScreen], which will allow for implicit accessibility scrolling."},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"The [Axis] along which the scroll view's offset increases with each page."},{"name":"reverse","type":"bool","required":true,"desc":"Whether the page view scrolls in the reading direction."},{"name":"controller","type":"PageController?","desc":"An object that can be used to control the position to which this page view is scrolled."},{"name":"physics","type":"ScrollPhysics?","desc":"How the page view should respond to user input."},{"name":"pageSnapping","type":"bool","required":true,"desc":"Set to false to disable page snapping, useful for custom scroll behavior."},{"name":"onPageChanged","type":"ValueChanged?","desc":"Called whenever the page in the center of the viewport changes."},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"A delegate that provides the children for the [PageView]."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"padEnds","type":"bool","required":true,"desc":"Whether to add padding to both ends of the list."}],"id":165,"lever":5,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PageView","desc":["【children】 : List of child components 【List】","【onPageChanged】 : Click event 【ValueChanged】"]},{"file":"node2_direction.dart","name":"Swipe Direction of PageView","desc":["【scrollDirection】 : Swipe direction 【Axis】","【reverse】 : Whether to reverse 【bool】"]},{"file":"node3_controller.dart","name":"Simple Use of PageView Controller","desc":["【controller】 : Page controller 【PageController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PageView/PageView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PageView/PageView_zh-CN.json deleted file mode 100644 index d0b462757..000000000 --- a/modules/widget_system/widgets/doc/widgets/PageView/PageView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PageView","path":"/src/widgets/page_view.dart","parents":["StatefulWidget","Widget"],"desc":"逐页工作的可滚动列表。","fields":[{"name":"allowImplicitScrolling","type":"bool","required":true,"desc":"控制小部件的页面是否会响应 [RenderObject.showOnScreen],这将允许隐式辅助功能滚动。"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"滚动视图的偏移随每页增加的 [Axis]。"},{"name":"reverse","type":"bool","required":true,"desc":"页面视图是否在阅读方向上滚动。"},{"name":"controller","type":"PageController?","desc":"可用于控制此页面视图滚动到的位置的对象。"},{"name":"physics","type":"ScrollPhysics?","desc":"页面视图应如何响应用户输入。"},{"name":"pageSnapping","type":"bool","required":true,"desc":"设置为 false 以禁用页面捕捉,对自定义滚动行为很有用。"},{"name":"onPageChanged","type":"ValueChanged?","desc":"每当视口中心的页面更改时调用。"},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"为 [PageView] 提供子项的委托。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"padEnds","type":"bool","required":true,"desc":"是否在列表的两端添加内边距。"}],"id":165,"localName":"滑页","lever":5,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PageView基本使用","desc":["【children】 : 子组件列表 【List】","【onPageChanged】 : 点击事件 【ValueChanged】"]},{"file":"node2_direction.dart","name":"PageView滑动方向","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向 【bool】"]},{"file":"node3_controller.dart","name":"PageView控制器简单实用","desc":["【controller】 : 页面控制器 【PageController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_en-US.json b/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_en-US.json deleted file mode 100644 index f260f82e7..000000000 --- a/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PaginatedDataTable","path":"/src/material/paginated_data_table.dart","parents":["StatefulWidget","Widget"],"desc":" A table that follows the [Material 2](https://material.io/go/design-data-tables) design specification, using multiple pages to display data.","fields":[{"name":"header","type":"Widget?","desc":"The table card's optional header."},{"name":"actions","type":"List?","desc":"Icon buttons to show at the top end side of the table. The [header] must not be null to show the actions."},{"name":"columns","type":"List","required":true,"desc":"The configuration and labels for the columns in the table."},{"name":"sortColumnIndex","type":"int?","desc":"The current primary sort key's column."},{"name":"sortAscending","type":"bool","required":true,"desc":"Whether the column mentioned in [sortColumnIndex], if any, is sorted in ascending order."},{"name":"onSelectAll","type":"ValueSetter?","desc":"Invoked when the user selects or unselects every row, using the checkbox in the heading row."},{"name":"dataRowMinHeight","type":"double?","desc":"The minimum height of each row (excluding the row that contains column headings)."},{"name":"dataRowMaxHeight","type":"double?","desc":"The maximum height of each row (excluding the row that contains column headings)."},{"name":"headingRowHeight","type":"double","required":true,"desc":"The height of the heading row."},{"name":"horizontalMargin","type":"double","required":true,"desc":"The horizontal margin between the edges of the table and the content in the first and last cells of each row."},{"name":"columnSpacing","type":"double","required":true,"desc":"The horizontal margin between the contents of each data column."},{"name":"showCheckboxColumn","type":"bool","required":true,"desc":"{@macro flutter.material.dataTable.showCheckboxColumn}"},{"name":"showFirstLastButtons","type":"bool","required":true,"desc":"Flag to display the pagination buttons to go to the first and last pages."},{"name":"initialFirstRowIndex","type":"int?","desc":"The index of the first row to display when the widget is first created."},{"name":"dividerThickness","type":"double?","desc":"{@macro flutter.material.dataTable.dividerThickness}"},{"name":"onPageChanged","type":"ValueChanged?","desc":"Invoked when the user switches to another page."},{"name":"rowsPerPage","type":"int","required":true,"desc":"The number of rows to show on each page."},{"name":"availableRowsPerPage","type":"List","required":true,"desc":"The options to offer for the rowsPerPage."},{"name":"onRowsPerPageChanged","type":"ValueChanged?","desc":"Invoked when the user selects a different number of rows per page."},{"name":"source","type":"DataTableSource","required":true,"desc":"The data source which provides data to show in each row."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"checkboxHorizontalMargin","type":"double?","desc":"Horizontal margin around the checkbox, if it is displayed."},{"name":"arrowHeadColor","type":"Color?","desc":"Defines the color of the arrow heads in the footer."},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"headingRowColor","type":"MaterialStateProperty?","desc":"{@macro flutter.material.dataTable.headingRowColor}"},{"name":"showEmptyRows","type":"bool","required":true,"desc":"Controls the visibility of empty rows on the last page of a [PaginatedDataTable]."}],"id":235,"lever":4,"family":1,"linkIds":[110,102],"nodes":[{"file":"node1_base.dart","name":"PaginatedDataTable Usage","desc":["【header】 : Table Name 【Widget】","【rowsPerPage】 : Number of records per page 【int】","【actions】 : Action components 【List】","【columns】 : Data columns 【List】","【sortColumnIndex】 : Sort column index 【int】","【sortAscending】 : Whether ascending 【bool】","【onSelectAll】 : Select all callback 【ValueSetter】","【onRowsPerPageChanged】 : Page change listener 【ValueChanged】","【availableRowsPerPage】 : Available page list 【List】","【source】 : Data source 【DataTableSource】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_zh-CN.json deleted file mode 100644 index a2ed88e6f..000000000 --- a/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PaginatedDataTable","path":"/src/material/paginated_data_table.dart","parents":["StatefulWidget","Widget"],"desc":"遵循 [Material 2](https://material.io/go/design-data-tables) 设计规范的表格,使用多个页面显示数据。","fields":[{"name":"header","type":"Widget?","desc":"表格卡片的可选标题。"},{"name":"actions","type":"List?","desc":"在表格顶部末端显示的图标按钮。[header] 不能为 null 才能显示操作。"},{"name":"columns","type":"List","required":true,"desc":"表格中列的配置和标签。"},{"name":"sortColumnIndex","type":"int?","desc":"当前主要排序键的列。"},{"name":"sortAscending","type":"bool","required":true,"desc":"[sortColumnIndex] 中提到的列(如果有)是否按升序排序。"},{"name":"onSelectAll","type":"ValueSetter?","desc":"当用户使用标题行中的复选框选择或取消选择每一行时调用。"},{"name":"dataRowMinHeight","type":"double?","desc":"每行的最小高度(不包括包含列标题的行)。"},{"name":"dataRowMaxHeight","type":"double?","desc":"每行的最大高度(不包括包含列标题的行)。"},{"name":"headingRowHeight","type":"double","required":true,"desc":"标题行的高度。"},{"name":"horizontalMargin","type":"double","required":true,"desc":"表格边缘与每行第一个和最后一个单元格中内容之间的水平边距。"},{"name":"columnSpacing","type":"double","required":true,"desc":"每个数据列内容之间的水平边距。"},{"name":"showCheckboxColumn","type":"bool","required":true,"desc":"{@macro flutter.material.dataTable.showCheckboxColumn}"},{"name":"showFirstLastButtons","type":"bool","required":true,"desc":"显示转到第一页和最后一页的分页按钮的标志。"},{"name":"initialFirstRowIndex","type":"int?","desc":"首次创建小部件时要显示的第一行的索引。"},{"name":"dividerThickness","type":"double?","desc":"{@macro flutter.material.dataTable.dividerThickness}"},{"name":"onPageChanged","type":"ValueChanged?","desc":"用户切换到另一页时调用。"},{"name":"rowsPerPage","type":"int","required":true,"desc":"每页显示的行数。"},{"name":"availableRowsPerPage","type":"List","required":true,"desc":"为 rowsPerPage 提供的选项。"},{"name":"onRowsPerPageChanged","type":"ValueChanged?","desc":"用户选择不同的每页行数时调用。"},{"name":"source","type":"DataTableSource","required":true,"desc":"提供在每行中显示的数据的数据源。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"checkboxHorizontalMargin","type":"double?","desc":"复选框周围的水平边距(如果显示)。"},{"name":"arrowHeadColor","type":"Color?","desc":"定义页脚中箭头头的颜色。"},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"headingRowColor","type":"MaterialStateProperty?","desc":"{@macro flutter.material.dataTable.headingRowColor}"},{"name":"showEmptyRows","type":"bool","required":true,"desc":"控制 [PaginatedDataTable] 最后一页上空行的可见性。"}],"id":235,"localName":"可分页表格","lever":4,"family":1,"linkIds":[110,102],"nodes":[{"file":"node1_base.dart","name":"PaginatedDataTable 使用","desc":["【header】 : 表名 【Widget】","【rowsPerPage】 : 每页记录数 【int】","【actions】 : 操作组件 【List】","【columns】 : 数据列 【List】","【sortColumnIndex】 : 排序列索引 【int】","【sortAscending】 : 是否升序 【bool】","【onSelectAll】 : 全选回调 【ValueSetter】","【onRowsPerPageChanged】 : 分页改变监听 【ValueChanged】","【availableRowsPerPage】 : 可用分页列表 【List】","【source】 : 数据源 【DataTableSource】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_en-US.json deleted file mode 100644 index 13f9890ca..000000000 --- a/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ParentDataWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["ProxyWidget","Widget"],"desc":" Base class for widgets that hook [ParentData] information to children of [RenderObjectWidget]s.","fields":[],"id":347,"lever":1,"family":5,"linkIds":[106,109,108,315],"nodes":[{"file":"node1_base.dart","name":"Introduction to ParentDataWidget","desc":["【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_zh-CN.json deleted file mode 100644 index d899faa4e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ParentDataWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["ProxyWidget","Widget"],"desc":"将 [ParentData] 信息挂钩到 [RenderObjectWidget] 子项的小部件的基类。","fields":[],"id":347,"localName":"父数据组件","lever":1,"family":5,"linkIds":[106,109,108,315],"nodes":[{"file":"node1_base.dart","name":"ParentDataWidget 介绍","desc":["【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_en-US.json b/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_en-US.json deleted file mode 100644 index 0acc29275..000000000 --- a/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PerformanceOverlay","path":"/src/widgets/performance_overlay.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Displays performance statistics.","fields":[{"name":"optionsMask","type":"int","required":true,"desc":"The mask is created by shifting 1 by the index of the specific [PerformanceOverlayOption] to enable."}],"id":312,"lever":2,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PerformanceOverlay","desc":["Using PerformanceOverlay.allEnabled can start all monitoring items."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_zh-CN.json deleted file mode 100644 index 84cd78dd8..000000000 --- a/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PerformanceOverlay","path":"/src/widgets/performance_overlay.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"显示性能统计信息。","fields":[{"name":"optionsMask","type":"int","required":true,"desc":"掩码是通过将 1 按要启用的特定 [PerformanceOverlayOption] 的索引移位创建的。"}],"id":312,"localName":"性能浮层","lever":2,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PerformanceOverlay基本使用","desc":["使用PerformanceOverlay.allEnabled可以开始所有的监测项。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_en-US.json b/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_en-US.json deleted file mode 100644 index d222fbf4f..000000000 --- a/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PhysicalModel","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget representing a physical layer that clips its children to a shape.","fields":[{"name":"shape","type":"BoxShape","required":true,"desc":"The type of shape."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"borderRadius","type":"BorderRadius?","desc":"The border radius of the rounded corners."},{"name":"elevation","type":"double","required":true,"desc":"The z-coordinate relative to the parent at which to place this physical object."},{"name":"color","type":"Color","required":true,"desc":"The background color."},{"name":"shadowColor","type":"Color","required":true,"desc":"The shadow color."}],"id":296,"lever":3,"family":2,"linkIds":[279,69],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PhysicalModel","desc":["【clipBehavior】: Clipping Behavior 【Clip】","【borderRadius】: Rounded Corners 【BorderRadius】","【child】: Child Component 【Widget】","【elevation】: Shadow Depth 【double】","【shadowColor】: Shadow Color 【Color】","【shape】: Shape 【BoxShape】","【color】: Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_zh-CN.json deleted file mode 100644 index 699d60ef8..000000000 --- a/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PhysicalModel","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"表示将其子项裁剪为形状的物理层的小部件。","fields":[{"name":"shape","type":"BoxShape","required":true,"desc":"形状的类型。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"borderRadius","type":"BorderRadius?","desc":"圆角的边框半径。"},{"name":"elevation","type":"double","required":true,"desc":"相对于父级放置此物理对象的 z 坐标。"},{"name":"color","type":"Color","required":true,"desc":"背景颜色。"},{"name":"shadowColor","type":"Color","required":true,"desc":"阴影颜色。"}],"id":296,"localName":"物理模块","lever":3,"family":2,"linkIds":[279,69],"nodes":[{"file":"node1_base.dart","name":"PhysicalModel基本使用","desc":["【clipBehavior】 : 裁剪行为 【Clip】","【borderRadius】 : 圆角 【BorderRadius】","【child】 : 子组件 【Widget】","【elevation】 : 阴影深 【double】","【shadowColor】 : 阴影颜色 【Color】","【shape】 : 形状 【BoxShape】","【color】: 颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_en-US.json b/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_en-US.json deleted file mode 100644 index 3423ddb53..000000000 --- a/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PhysicalShape","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget representing a physical layer that clips its children to a path.","fields":[{"name":"clipper","type":"CustomClipper","required":true,"desc":"Determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"elevation","type":"double","required":true,"desc":"The z-coordinate relative to the parent at which to place this physical object."},{"name":"color","type":"Color","required":true,"desc":"The background color."},{"name":"shadowColor","type":"Color","required":true,"desc":"When elevation is non zero the color to use for the shadow color."}],"id":279,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PhysicalShape","desc":["【clipper】: Clipper 【CustomClipper】","【clipBehavior】: Clipping Behavior 【Clip】","【child】: Child Component 【Widget】","【elevation】: Shadow Depth 【double】","【shadowColor】: Shadow Color 【Color】","【color】: Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_zh-CN.json deleted file mode 100644 index 3104ddb08..000000000 --- a/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PhysicalShape","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"表示将其子项裁剪为路径的物理层的小部件。","fields":[{"name":"clipper","type":"CustomClipper","required":true,"desc":"确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"elevation","type":"double","required":true,"desc":"相对于父级放置此物理对象的 z 坐标。"},{"name":"color","type":"Color","required":true,"desc":"背景颜色。"},{"name":"shadowColor","type":"Color","required":true,"desc":"当高度非零时用于阴影颜色的颜色。"}],"id":279,"localName":"物理形状","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PhysicalShape基本使用","desc":["【clipper】 : 裁剪器 【CustomClipper】","【clipBehavior】 : 裁剪行为 【Clip】","【child】 : 子组件 【Widget】","【elevation】 : 阴影深 【double】","【shadowColor】 : 阴影颜色 【Color】","【color】: 颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_en-US.json b/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_en-US.json deleted file mode 100644 index 3a48f49dc..000000000 --- a/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PinnedHeaderSliver","path":"/src/widgets/pinned_header_sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that keeps its Widget child at the top of the a [CustomScrollView].","fields":[],"id":309,"lever":4,"family":4,"linkIds":[190],"nodes":[{"file":"node_01.dart","name":"PinnedHeaderSliver Official Example","display":"new_page","desc":["【child】 : Child widget 【Widget?】","PinnedHeaderSliver can only be used in a scroll viewport, where the child widget will not move out of the viewport when scrolling to the top, thus staying above the viewport."]},{"file":"node_02.dart","name":"Sticky Header","display":"new_page","desc":["The sticky header effect implemented based on PinnedHeaderSliver, note that the divider below also has a sticky effect."]},{"file":"node_03.dart","name":"Sticky Header + Search","display":"new_page","desc":["The sticky header + search box effect implemented based on PinnedHeaderSliver."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_zh-CN.json deleted file mode 100644 index 20d3b62e8..000000000 --- a/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PinnedHeaderSliver","path":"/src/widgets/pinned_header_sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其 Widget 子项保持在 [CustomScrollView] 顶部的 sliver。","fields":[],"id":309,"localName":"固定头部滑片","lever":4,"family":4,"linkIds":[190],"nodes":[{"file":"node_01.dart","name":"PinnedHeaderSliver 官方案例","display":"new_page","desc":["【child】 : 子组件 【Widget?】","PinnedHeaderSliver 只能用在滚动视口中,其中子组件在滑动到顶部时,不会移出视口,从而会停留在视口上方。"]},{"file":"node_02.dart","name":"标题吸顶","display":"new_page","desc":["基于 PinnedHeaderSliver 实现的标题吸顶效果,注意看下方的分隔线也有吸顶效果哦。"]},{"file":"node_03.dart","name":"标题+搜索吸顶","display":"new_page","desc":["基于 PinnedHeaderSliver 实现的标题+搜索框的吸顶效果。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_en-US.json b/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_en-US.json deleted file mode 100644 index 864ef6c16..000000000 --- a/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Placeholder","path":"/src/widgets/placeholder.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that draws a box that represents where other widgets will one day be added.","fields":[{"name":"color","type":"Color","required":true,"desc":"The color to draw the placeholder box."},{"name":"strokeWidth","type":"double","required":true,"desc":"The width of the lines in the placeholder box."},{"name":"fallbackWidth","type":"double","required":true,"desc":"The width to use when the placeholder is in a situation with an unbounded width."},{"name":"fallbackHeight","type":"double","required":true,"desc":"The height to use when the placeholder is in a situation with an unbounded height."},{"name":"child","type":"Widget?","desc":"The [child] contained by the placeholder box."}],"id":36,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Placeholder Basic Properties","desc":["【color】: Color 【Color】","【strokeWidth】: Stroke Width 【double】"]},{"file":"node2_fallback.dart","name":"Placeholder Fallback Properties","desc":["When there are no width and height constraints in the area, the width and height of the placeholder component.","【fallbackHeight】: Height 【double】","【fallbackWidth】: Width 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_zh-CN.json deleted file mode 100644 index 44a8c2818..000000000 --- a/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Placeholder","path":"/src/widgets/placeholder.dart","parents":["StatelessWidget","Widget"],"desc":"绘制一个框的小部件,该框表示将来某天会添加其他小部件的位置。","fields":[{"name":"color","type":"Color","required":true,"desc":"绘制占位符框的颜色。"},{"name":"strokeWidth","type":"double","required":true,"desc":"占位符框中线条的宽度。"},{"name":"fallbackWidth","type":"double","required":true,"desc":"当占位符处于无界宽度情况时使用的宽度。"},{"name":"fallbackHeight","type":"double","required":true,"desc":"当占位符处于无界高度情况时使用的高度。"},{"name":"child","type":"Widget?","desc":"占位符框包含的 [child]。"}],"id":36,"localName":"占位组件","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Placeholder基础属性","desc":["【color】: 颜色 【Color】","【strokeWidth】: 线粗 【double】"]},{"file":"node2_fallback.dart","name":"Placeholder的fallback属性","desc":["当所在区域无宽高约束时,占位组件的宽高。\"","【fallbackHeight】: 高 【double】","【fallbackWidth】: 宽 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_en-US.json b/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_en-US.json deleted file mode 100644 index 00aa117f7..000000000 --- a/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PlatformMenuBar","path":"/src/widgets/platform_menu_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A menu bar that uses the platform's native APIs to construct and render a menu described by a [PlatformMenu]/[PlatformMenuItem] hierarchy.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"menus","type":"List","required":true,"desc":"The list of menu items that are the top level children of the [PlatformMenuBar]."}],"id":466,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_zh-CN.json deleted file mode 100644 index 7aecd9bd4..000000000 --- a/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PlatformMenuBar","path":"/src/widgets/platform_menu_bar.dart","parents":["StatefulWidget","Widget"],"desc":"使用平台的原生 API 构建和渲染由 [PlatformMenu]/[PlatformMenuItem] 层次结构描述的菜单的菜单栏。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"menus","type":"List","required":true,"desc":"作为 [PlatformMenuBar] 顶级子项的菜单项列表。"}],"id":466,"localName":"PlatformMenuBar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_en-US.json b/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_en-US.json deleted file mode 100644 index 62f4aa49c..000000000 --- a/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PlatformSelectableRegionContextMenu","path":"/src/widgets/_platform_selectable_region_context_menu_web.dart","parents":["StatelessWidget","Widget"],"desc":" See `_platform_selectable_region_context_menu_io.dart` for full documentation.","fields":[{"name":"child","type":"Widget","required":true,"desc":"See `_platform_selectable_region_context_menu_io.dart`."}],"id":467,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_zh-CN.json deleted file mode 100644 index 1fc3f8e04..000000000 --- a/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PlatformSelectableRegionContextMenu","path":"/src/widgets/_platform_selectable_region_context_menu_web.dart","parents":["StatelessWidget","Widget"],"desc":"请参阅 `_platform_selectable_region_context_menu_io.dart` 获取完整文档。","fields":[{"name":"child","type":"Widget","required":true,"desc":"请参阅 `_platform_selectable_region_context_menu_io.dart`。"}],"id":467,"localName":"PlatformSelectableRegionContextMenu","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_en-US.json b/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_en-US.json deleted file mode 100644 index 71c7c7ac2..000000000 --- a/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PlatformViewLink","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":" Links a platform view with the Flutter framework.","fields":[{"name":"viewType","type":"String","required":true,"desc":"The unique identifier for the view type to be embedded."}],"id":468,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_zh-CN.json deleted file mode 100644 index 4ca7a99a6..000000000 --- a/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PlatformViewLink","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":"将平台视图与 Flutter 框架链接。","fields":[{"name":"viewType","type":"String","required":true,"desc":"要嵌入的视图类型的唯一标识符。"}],"id":468,"localName":"PlatformViewLink","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_en-US.json b/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_en-US.json deleted file mode 100644 index 3fdf281ab..000000000 --- a/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PlatformViewSurface","path":"/src/widgets/platform_view.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Integrates a platform view with Flutter's compositor, touch, and semantics subsystems.","fields":[{"name":"controller","type":"PlatformViewController","required":true,"desc":"The controller for the platform view integrated by this [PlatformViewSurface]."},{"name":"gestureRecognizers","type":"Set>","required":true,"desc":"Which gestures should be forwarded to the PlatformView."},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":469,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_zh-CN.json deleted file mode 100644 index babfb148a..000000000 --- a/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PlatformViewSurface","path":"/src/widgets/platform_view.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将平台视图与 Flutter 的合成器、触摸和语义子系统集成。","fields":[{"name":"controller","type":"PlatformViewController","required":true,"desc":"此 [PlatformViewSurface] 集成的平台视图的控制器。"},{"name":"gestureRecognizers","type":"Set>","required":true,"desc":"哪些手势应转发到 PlatformView。"},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":469,"localName":"PlatformViewSurface","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_en-US.json b/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_en-US.json deleted file mode 100644 index 08da65c35..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopScope","path":"/src/widgets/pop_scope.dart","parents":["StatefulWidget","Widget"],"desc":" Manages back navigation gestures.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"onPopInvokedWithResult","type":"PopInvokedWithResultCallback?","desc":"{@template flutter.widgets.PopScope.onPopInvokedWithResult} Called after a route pop was handled. {@endtemplate}"},{"name":"onPopInvoked","type":"PopInvokedCallback?","desc":"Called after a route pop was handled."},{"name":"canPop","type":"bool","required":true,"desc":"{@template flutter.widgets.PopScope.canPop} When false, blocks the current route from being popped."}],"id":470,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_zh-CN.json deleted file mode 100644 index 06a5bd078..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopScope","path":"/src/widgets/pop_scope.dart","parents":["StatefulWidget","Widget"],"desc":"管理返回导航手势。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"onPopInvokedWithResult","type":"PopInvokedWithResultCallback?","desc":"{@template flutter.widgets.PopScope.onPopInvokedWithResult} 在处理路由弹出后调用。{@endtemplate}"},{"name":"onPopInvoked","type":"PopInvokedCallback?","desc":"在处理路由弹出后调用。"},{"name":"canPop","type":"bool","required":true,"desc":"{@template flutter.widgets.PopScope.canPop} 当为 false 时,阻止当前路由被弹出。"}],"id":470,"localName":"PopScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_en-US.json b/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_en-US.json deleted file mode 100644 index c3172fc3a..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuButton","path":"/src/material/popup_menu.dart","parents":["StatefulWidget","Widget"],"desc":" Displays a menu when pressed and calls [onSelected] when the menu is dismissed because an item was selected. The value passed to [onSelected] is the value of the selected menu item.","fields":[{"name":"itemBuilder","type":"PopupMenuItemBuilder","required":true,"desc":"Called when the button is pressed to create the items to show in the menu."},{"name":"initialValue","type":"T?","desc":"The value of the menu item, if any, that should be highlighted when the menu opens."},{"name":"onOpened","type":"VoidCallback?","desc":"Called when the popup menu is shown."},{"name":"onSelected","type":"PopupMenuItemSelected?","desc":"Called when the user selects a value from the popup menu created by this button."},{"name":"onCanceled","type":"PopupMenuCanceled?","desc":"Called when the user dismisses the popup menu without selecting an item."},{"name":"tooltip","type":"String?","desc":"Text that describes the action that will occur when the button is pressed."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place the menu when open. This controls the size of the shadow below the menu."},{"name":"shadowColor","type":"Color?","desc":"The color used to paint the shadow below the menu."},{"name":"surfaceTintColor","type":"Color?","desc":"The color used as an overlay on [color] to indicate elevation."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"Matches IconButton's 8 dps padding by default. In some cases, notably where this button appears as the trailing element of a list item, it's useful to be able to set the padding to zero."},{"name":"menuPadding","type":"EdgeInsetsGeometry?","desc":"If provided, menu padding is used for empty space around the outside of the popup menu."},{"name":"splashRadius","type":"double?","desc":"The splash radius."},{"name":"child","type":"Widget?","desc":"If provided, [child] is the widget used for this button and the button will utilize an [InkWell] for taps."},{"name":"borderRadius","type":"BorderRadius?","desc":"The border radius for the [InkWell] that wraps the [child]."},{"name":"icon","type":"Widget?","desc":"If provided, the [icon] is used for this button and the button will behave like an [IconButton]."},{"name":"offset","type":"Offset","required":true,"desc":"The offset is applied relative to the initial position set by the [position]."},{"name":"enabled","type":"bool","required":true,"desc":"Whether this popup menu button is interactive."},{"name":"shape","type":"ShapeBorder?","desc":"If provided, the shape used for the menu."},{"name":"color","type":"Color?","desc":"If provided, the background color used for the menu."},{"name":"iconColor","type":"Color?","desc":"If provided, this color is used for the button icon."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"iconSize","type":"double?","desc":"If provided, the size of the [Icon]."},{"name":"constraints","type":"BoxConstraints?","desc":"Optional size constraints for the menu."},{"name":"position","type":"PopupMenuPosition?","desc":"Whether the popup menu is positioned over or under the popup menu button."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"useRootNavigator","type":"bool","required":true,"desc":"Used to determine whether to push the menu to the [Navigator] furthest from or nearest to the given `context`."},{"name":"popUpAnimationStyle","type":"AnimationStyle?","desc":"Used to override the default animation curves and durations of the popup menu's open and close transitions."},{"name":"routeSettings","type":"RouteSettings?","desc":"Optional route settings for the menu."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this icon button's appearance."},{"name":"requestFocus","type":"bool?","desc":"Whether to request focus when the menu appears."}],"id":56,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PopupMenuButton","desc":["【itemBuilder】: Constructor 【PopupMenuItemBuilder】","【offset】: Offset 【Offset】","【color】: Background Color 【Color】","【shape】: Shape 【ShapeBorder】","【elevation】: Elevation 【double】","【onCanceled】: Cancel Event 【Function()】","【onSelected】: Selection Event 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_zh-CN.json deleted file mode 100644 index 7fe3362ec..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuButton","path":"/src/material/popup_menu.dart","parents":["StatefulWidget","Widget"],"desc":"按下时显示菜单,并在因选择项目而关闭菜单时调用 [onSelected]。传递给 [onSelected] 的值是所选菜单项的值。","fields":[{"name":"itemBuilder","type":"PopupMenuItemBuilder","required":true,"desc":"按下按钮时调用以创建要在菜单中显示的项目。"},{"name":"initialValue","type":"T?","desc":"菜单打开时应突出显示的菜单项的值(如果有)。"},{"name":"onOpened","type":"VoidCallback?","desc":"显示弹出菜单时调用。"},{"name":"onSelected","type":"PopupMenuItemSelected?","desc":"用户从此按钮创建的弹出菜单中选择值时调用。"},{"name":"onCanceled","type":"PopupMenuCanceled?","desc":"用户在不选择项目的情况下关闭弹出菜单时调用。"},{"name":"tooltip","type":"String?","desc":"描述按下按钮时将发生的操作的文本。"},{"name":"elevation","type":"double?","desc":"菜单打开时放置菜单的 z 坐标。这控制菜单下方阴影的大小。"},{"name":"shadowColor","type":"Color?","desc":"用于绘制菜单下方阴影的颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"用作 [color] 上的覆盖以指示高度的颜色。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"默认匹配 IconButton 的 8 dps 内边距。在某些情况下,特别是当此按钮作为列表项的尾随元素出现时,能够将内边距设置为零很有用。"},{"name":"menuPadding","type":"EdgeInsetsGeometry?","desc":"如果提供,菜单内边距用于弹出菜单外部的空白空间。"},{"name":"splashRadius","type":"double?","desc":"飞溅半径。"},{"name":"child","type":"Widget?","desc":"如果提供,[child] 是用于此按钮的小部件,按钮将利用 [InkWell] 进行点击。"},{"name":"borderRadius","type":"BorderRadius?","desc":"包装 [child] 的 [InkWell] 的边框半径。"},{"name":"icon","type":"Widget?","desc":"如果提供,[icon] 用于此按钮,按钮将表现得像 [IconButton]。"},{"name":"offset","type":"Offset","required":true,"desc":"偏移相对于由 [position] 设置的初始位置应用。"},{"name":"enabled","type":"bool","required":true,"desc":"此弹出菜单按钮是否可交互。"},{"name":"shape","type":"ShapeBorder?","desc":"如果提供,用于菜单的形状。"},{"name":"color","type":"Color?","desc":"如果提供,用于菜单的背景颜色。"},{"name":"iconColor","type":"Color?","desc":"如果提供,此颜色用于按钮图标。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"iconSize","type":"double?","desc":"如果提供,[Icon] 的大小。"},{"name":"constraints","type":"BoxConstraints?","desc":"菜单的可选大小约束。"},{"name":"position","type":"PopupMenuPosition?","desc":"弹出菜单是位于弹出菜单按钮上方还是下方。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"useRootNavigator","type":"bool","required":true,"desc":"用于确定是否将菜单推送到距离给定 `context` 最远或最近的 [Navigator]。"},{"name":"popUpAnimationStyle","type":"AnimationStyle?","desc":"用于覆盖弹出菜单打开和关闭过渡的默认动画曲线和持续时间。"},{"name":"routeSettings","type":"RouteSettings?","desc":"菜单的可选路由设置。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此图标按钮的外观。"},{"name":"requestFocus","type":"bool?","desc":"菜单出现时是否请求焦点。"}],"id":56,"localName":"菜单按钮","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PopupMenuButton基本使用","desc":["【itemBuilder】 : 构造器 【PopupMenuItemBuilder】","【offset】 : 偏移 【Offset】","【color】 : 背景颜色 【Color】","【shape】 : 形状 【ShapeBorder】","【elevation】 : 影深 【double】","【onCanceled】 : 取消事件 【Function()】","【onSelected】 : 选择事件 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_en-US.json b/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_en-US.json deleted file mode 100644 index 1a43d7dd1..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuDivider","path":"/src/material/popup_menu.dart","parents":["PopupMenuEntry","StatefulWidget","Widget"],"desc":" A horizontal divider in a Material Design popup menu.","fields":[{"name":"height","type":"double","required":true,"desc":"The height of the divider entry."},{"name":"thickness","type":"double?","desc":"The thickness of the line drawn within the [PopupMenuDivider]."},{"name":"indent","type":"double?","desc":"The amount of empty space to the leading edge of the [PopupMenuDivider]."},{"name":"endIndent","type":"double?","desc":"The amount of empty space to the trailing edge of the [PopupMenuDivider]."},{"name":"radius","type":"BorderRadiusGeometry?","desc":"The amount of radius for the border of the [PopupMenuDivider]."},{"name":"color","type":"Color?","desc":"{@macro flutter.material.Divider.color}"}],"id":174,"lever":1,"family":1,"linkIds":[56,34],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PopupMenuDivider","desc":["【height】 : height 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_zh-CN.json deleted file mode 100644 index aabcb55cb..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuDivider","path":"/src/material/popup_menu.dart","parents":["PopupMenuEntry","StatefulWidget","Widget"],"desc":"Material Design 弹出菜单中的水平分隔符。","fields":[{"name":"height","type":"double","required":true,"desc":"分隔符条目的高度。"},{"name":"thickness","type":"double?","desc":"在 [PopupMenuDivider] 内绘制的线的厚度。"},{"name":"indent","type":"double?","desc":"[PopupMenuDivider] 前导边缘的空白空间量。"},{"name":"endIndent","type":"double?","desc":"[PopupMenuDivider] 尾随边缘的空白空间量。"},{"name":"radius","type":"BorderRadiusGeometry?","desc":"[PopupMenuDivider] 边框的半径量。"},{"name":"color","type":"Color?","desc":"{@macro flutter.material.Divider.color}"}],"id":174,"localName":"弹出菜单分割线","lever":1,"family":1,"linkIds":[56,34],"nodes":[{"file":"node1_base.dart","name":"PopupMenuDivider基本使用","desc":["【height】 : 高度 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_en-US.json b/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_en-US.json deleted file mode 100644 index 0914ad0fa..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuEntry","path":"/src/material/popup_menu.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" A base class for entries in a Material Design popup menu.","fields":[],"id":471,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_zh-CN.json deleted file mode 100644 index 4e5a571f0..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuEntry","path":"/src/material/popup_menu.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"Material Design 弹出菜单中条目的基类。","fields":[],"id":471,"localName":"PopupMenuEntry","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_en-US.json b/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_en-US.json deleted file mode 100644 index 74061b9f8..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuItem","path":"/src/material/popup_menu.dart","parents":["PopupMenuEntry","StatefulWidget","Widget"],"desc":" An item in a Material Design popup menu.","fields":[{"name":"value","type":"T?","desc":"The value that will be returned by [showMenu] if this entry is selected."},{"name":"onTap","type":"VoidCallback?","desc":"Called when the menu item is tapped."},{"name":"enabled","type":"bool","required":true,"desc":"Whether the user is permitted to select this item."},{"name":"height","type":"double","required":true,"desc":"The minimum height of the menu item."},{"name":"padding","type":"EdgeInsets?","desc":"The padding of the menu item."},{"name":"textStyle","type":"TextStyle?","desc":"The text style of the popup menu item."},{"name":"labelTextStyle","type":"MaterialStateProperty?","desc":"The label style of the popup menu item."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.popupmenu.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":472,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_zh-CN.json deleted file mode 100644 index e326eac39..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuItem","path":"/src/material/popup_menu.dart","parents":["PopupMenuEntry","StatefulWidget","Widget"],"desc":"Material Design 弹出菜单中的项目。","fields":[{"name":"value","type":"T?","desc":"如果选择此条目,[showMenu] 将返回的值。"},{"name":"onTap","type":"VoidCallback?","desc":"点击菜单项时调用。"},{"name":"enabled","type":"bool","required":true,"desc":"是否允许用户选择此项目。"},{"name":"height","type":"double","required":true,"desc":"菜单项的最小高度。"},{"name":"padding","type":"EdgeInsets?","desc":"菜单项的内边距。"},{"name":"textStyle","type":"TextStyle?","desc":"弹出菜单项的文本样式。"},{"name":"labelTextStyle","type":"MaterialStateProperty?","desc":"弹出菜单项的标签样式。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.popupmenu.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":472,"localName":"PopupMenuItem","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_en-US.json deleted file mode 100644 index 25e4a8ad2..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuTheme","path":"/src/material/popup_menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for popup menus in this widget's subtree.","fields":[{"name":"data","type":"PopupMenuThemeData","required":true,"desc":"The properties for descendant popup menu widgets."}],"id":330,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PopupMenuTheme","desc":["You can specify the PopupMenuThemeData properties to set default styles for descendant PopupMenuButton components, such as shape, elevation, color, text style, etc. You can also use PopupMenuTheme.of to obtain the theme data of PopupMenu."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_zh-CN.json deleted file mode 100644 index 546444d1b..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuTheme","path":"/src/material/popup_menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的弹出菜单定义配置的继承小部件。","fields":[{"name":"data","type":"PopupMenuThemeData","required":true,"desc":"后代弹出菜单小部件的属性。"}],"id":330,"localName":"弹出菜单样式","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PopupMenuTheme基本使用","desc":["可指定PopupMenuThemeData数据属性为【后代】的PopupMenuButton组件设置默认样式,如形状、影深、颜色、文字样式等。也可以用PopupMenuTheme.of获取PopupMenu的主题数据。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_en-US.json b/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_en-US.json deleted file mode 100644 index af6a0ea11..000000000 --- a/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Positioned","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":" A widget that controls where a child of a [Stack] is positioned.","fields":[{"name":"left","type":"double?","desc":"The distance that the child's left edge is inset from the left of the stack."},{"name":"top","type":"double?","desc":"The distance that the child's top edge is inset from the top of the stack."},{"name":"right","type":"double?","desc":"The distance that the child's right edge is inset from the right of the stack."},{"name":"bottom","type":"double?","desc":"The distance that the child's bottom edge is inset from the bottom of the stack."},{"name":"width","type":"double?","desc":"The child's width."},{"name":"height","type":"double?","desc":"The child's height."}],"id":108,"lever":3,"family":5,"linkIds":[97,159,121],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Positioned","desc":["【child】: Component 【Widget】","【top】: Distance to the top of the parent 【double】","【right】: Distance to the right of the parent 【double】","【left】: Distance to the left of the parent 【double】","【bottom】: Distance to the bottom of the parent 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_zh-CN.json deleted file mode 100644 index 557ee8183..000000000 --- a/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Positioned","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":"控制 [Stack] 子项位置的小部件。","fields":[{"name":"left","type":"double?","desc":"子项左边缘从堆栈左侧插入的距离。"},{"name":"top","type":"double?","desc":"子项顶边缘从堆栈顶部插入的距离。"},{"name":"right","type":"double?","desc":"子项右边缘从堆栈右侧插入的距离。"},{"name":"bottom","type":"double?","desc":"子项底边缘从堆栈底部插入的距离。"},{"name":"width","type":"double?","desc":"子项的宽度。"},{"name":"height","type":"double?","desc":"子项的高度。"}],"id":108,"localName":"定位组件","lever":3,"family":5,"linkIds":[97,159,121],"nodes":[{"file":"node1_base.dart","name":"Positioned基本使用","desc":["【child】 : 组件 【Widget】","【top】 : 到父顶距离 【double】","【right】 : 到父右距离 【double】","【left】 : 到父左距离 【double】","【bottom】 : 到父底距离 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_en-US.json b/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_en-US.json deleted file mode 100644 index c958b89de..000000000 --- a/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PositionedDirectional","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that controls where a child of a [Stack] is positioned without committing to a specific [TextDirection].","fields":[{"name":"start","type":"double?","desc":"The distance that the child's leading edge is inset from the leading edge of the stack."},{"name":"top","type":"double?","desc":"The distance that the child's top edge is inset from the top of the stack."},{"name":"end","type":"double?","desc":"The distance that the child's trailing edge is inset from the trailing edge of the stack."},{"name":"bottom","type":"double?","desc":"The distance that the child's bottom edge is inset from the bottom of the stack."},{"name":"width","type":"double?","desc":"The child's width."},{"name":"height","type":"double?","desc":"The child's height."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":159,"lever":3,"family":0,"linkIds":[108,122],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PositionedDirectional","desc":["【child】 : Component 【Widget】","【top】 : Distance to the top of the parent 【double】","【end】 : Distance to the right of the parent 【double】","【start】 : Distance to the left of the parent 【double】","【bottom】 : Distance to the bottom of the parent 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_zh-CN.json deleted file mode 100644 index 85f59a581..000000000 --- a/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PositionedDirectional","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":"控制 [Stack] 子项位置的小部件,不提交特定的 [TextDirection]。","fields":[{"name":"start","type":"double?","desc":"子项前导边缘从堆栈前导边缘插入的距离。"},{"name":"top","type":"double?","desc":"子项顶边缘从堆栈顶部插入的距离。"},{"name":"end","type":"double?","desc":"子项尾随边缘从堆栈尾随边缘插入的距离。"},{"name":"bottom","type":"double?","desc":"子项底边缘从堆栈底部插入的距离。"},{"name":"width","type":"double?","desc":"子项的宽度。"},{"name":"height","type":"double?","desc":"子项的高度。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":159,"localName":"方向定位","lever":3,"family":0,"linkIds":[108,122],"nodes":[{"file":"node1_base.dart","name":"PositionedDirectional基本使用","desc":["【child】 : 组件 【Widget】","【top】 : 到父顶距离 【double】","【end】 : 到父右距离 【double】","【start】 : 到父左距离 【double】","【bottom】 : 到父底距离 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_en-US.json deleted file mode 100644 index 243717cb6..000000000 --- a/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PositionedTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Positioned] which takes a specific [Animation] to transition the child's position from a start position to an end position over the lifetime of the animation.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":93,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PositionedTransition","desc":["【child】 : Child component 【Widget】","【rect】 : Animation 【Animation】"," The PositionedTransition component only works within a Stack"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_zh-CN.json deleted file mode 100644 index 493618dd2..000000000 --- a/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PositionedTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"[Positioned] 的动画版本,它接受特定的 [Animation] 在动画的生命周期内将子项的位置从开始位置过渡到结束位置。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":93,"localName":"位置变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PositionedTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【rect】 : 动画 【Animation】"," PositionedTransition组件只能在Stack内起作用"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_en-US.json b/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_en-US.json deleted file mode 100644 index 3effceeaf..000000000 --- a/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PreferredSize","path":"/src/widgets/preferred_size.dart","parents":["StatelessWidget","Widget"],"desc":" A widget with a preferred size.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"preferredSize","type":"Size","required":true}],"id":204,"lever":2,"family":0,"linkIds":[57,64],"nodes":[{"file":"node1_base.dart","name":"Adjusting AppBar Height with PreferredSize","desc":["【preferredSize】 : size 【Size】"]},{"file":"node2_adapter.dart","name":"Conversion and Usage of PreferredSize","desc":["【PreferredSize converts a regular component into a PreferredSizeWidget"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_zh-CN.json deleted file mode 100644 index 25c7aa027..000000000 --- a/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PreferredSize","path":"/src/widgets/preferred_size.dart","parents":["StatelessWidget","Widget"],"desc":"具有首选大小的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"preferredSize","type":"Size","required":true}],"id":204,"localName":"优先尺寸","lever":2,"family":0,"linkIds":[57,64],"nodes":[{"file":"node1_base.dart","name":"PreferredSize调整AppBar高度","desc":["【preferredSize】 : 尺寸 【Size】"]},{"file":"node2_adapter.dart","name":"PreferredSize的转化使用","desc":["【PreferredSize将普通组件转化为PreferredSizeWidget"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_en-US.json deleted file mode 100644 index 8871352e5..000000000 --- a/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PreferredSizeWidget","path":"/src/widgets/preferred_size.dart","abstract":true,"parents":["Object","Widget"],"desc":" An interface for widgets that can return the size this widget would prefer if it were otherwise unconstrained.","fields":[],"id":473,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_zh-CN.json deleted file mode 100644 index e91e001dd..000000000 --- a/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PreferredSizeWidget","path":"/src/widgets/preferred_size.dart","abstract":true,"parents":["Object","Widget"],"desc":"可以返回此小部件在其他情况下不受约束时首选大小的小部件接口。","fields":[],"id":473,"localName":"PreferredSizeWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_en-US.json b/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_en-US.json deleted file mode 100644 index fb6a3539a..000000000 --- a/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PrimaryScrollController","path":"/src/widgets/primary_scroll_controller.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Associates a [ScrollController] with a subtree.","fields":[{"name":"controller","type":"ScrollController?","desc":"The [ScrollController] associated with the subtree."},{"name":"scrollDirection","type":"Axis?","desc":"The [Axis] this controller is configured for [ScrollView]s to automatically inherit."},{"name":"automaticallyInheritForPlatforms","type":"Set","required":true,"desc":"The [TargetPlatform]s this controller is configured for [ScrollView]s to automatically inherit."}],"id":335,"lever":1,"family":5,"linkIds":[349,344,164],"nodes":[{"file":"node1_base.dart","name":"Introduction to PrimaryScrollController","desc":["【controller】: Scroll Controller 【ScrollController】","【child】: Child Widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_zh-CN.json deleted file mode 100644 index 9158dc376..000000000 --- a/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PrimaryScrollController","path":"/src/widgets/primary_scroll_controller.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将 [ScrollController] 与子树关联。","fields":[{"name":"controller","type":"ScrollController?","desc":"与子树关联的 [ScrollController]。"},{"name":"scrollDirection","type":"Axis?","desc":"此控制器配置为 [ScrollView] 自动继承的 [Axis]。"},{"name":"automaticallyInheritForPlatforms","type":"Set","required":true,"desc":"此控制器配置为 [ScrollView] 自动继承的 [TargetPlatform]。"}],"id":335,"localName":"初始滑动控制器","lever":1,"family":5,"linkIds":[349,344,164],"nodes":[{"file":"node1_base.dart","name":"PrimaryScrollController 介绍","desc":["【controller】 : 滑动控制器 【ScrollController】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_en-US.json deleted file mode 100644 index cdd3e97ab..000000000 --- a/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ProgressIndicator","path":"/src/material/progress_indicator.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" A base class for Material Design progress indicators.","fields":[{"name":"value","type":"double?","desc":"If non-null, the value of this progress indicator."},{"name":"backgroundColor","type":"Color?","desc":"The progress indicator's background color."},{"name":"color","type":"Color?","desc":"{@template flutter.progress_indicator.ProgressIndicator.color} The progress indicator's color."},{"name":"valueColor","type":"Animation?","desc":"The progress indicator's color as an animated value."},{"name":"semanticsLabel","type":"String?","desc":"{@template flutter.progress_indicator.ProgressIndicator.semanticsLabel} The [SemanticsProperties.label] for this progress indicator."},{"name":"semanticsValue","type":"String?","desc":"{@template flutter.progress_indicator.ProgressIndicator.semanticsValue} The [SemanticsProperties.value] for this progress indicator."}],"id":474,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_zh-CN.json deleted file mode 100644 index b03634757..000000000 --- a/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ProgressIndicator","path":"/src/material/progress_indicator.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"Material Design 进度指示器的基类。","fields":[{"name":"value","type":"double?","desc":"如果非空,此进度指示器的值。"},{"name":"backgroundColor","type":"Color?","desc":"进度指示器的背景颜色。"},{"name":"color","type":"Color?","desc":"{@template flutter.progress_indicator.ProgressIndicator.color} 进度指示器的颜色。"},{"name":"valueColor","type":"Animation?","desc":"进度指示器的颜色作为动画值。"},{"name":"semanticsLabel","type":"String?","desc":"{@template flutter.progress_indicator.ProgressIndicator.semanticsLabel} 此进度指示器的 [SemanticsProperties.label]。"},{"name":"semanticsValue","type":"String?","desc":"{@template flutter.progress_indicator.ProgressIndicator.semanticsValue} 此进度指示器的 [SemanticsProperties.value]。"}],"id":474,"localName":"ProgressIndicator","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_en-US.json deleted file mode 100644 index da8a5fdde..000000000 --- a/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ProgressIndicatorTheme","path":"/src/material/progress_indicator_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for [ProgressIndicator]s in this widget's subtree.","fields":[{"name":"data","type":"ProgressIndicatorThemeData","required":true,"desc":"The properties for descendant [ProgressIndicator] widgets."}],"id":475,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_zh-CN.json deleted file mode 100644 index d87bb022c..000000000 --- a/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ProgressIndicatorTheme","path":"/src/material/progress_indicator_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [ProgressIndicator] 定义配置的继承小部件。","fields":[{"name":"data","type":"ProgressIndicatorThemeData","required":true,"desc":"后代 [ProgressIndicator] 小部件的属性。"}],"id":475,"localName":"ProgressIndicatorTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_en-US.json deleted file mode 100644 index 12ffc5f31..000000000 --- a/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ProxyWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":" A widget that has a child widget provided to it, instead of building a new widget.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":476,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_zh-CN.json deleted file mode 100644 index 86e7daf42..000000000 --- a/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ProxyWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":"具有提供给它的子小部件的小部件,而不是构建新小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":476,"localName":"ProxyWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Radio/Radio_en-US.json b/modules/widget_system/widgets/doc/widgets/Radio/Radio_en-US.json deleted file mode 100644 index 099ac0471..000000000 --- a/modules/widget_system/widgets/doc/widgets/Radio/Radio_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Radio","path":"/src/material/radio.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design radio button.","fields":[{"name":"value","type":"T","required":true,"desc":"The value represented by this radio button."},{"name":"groupValue","type":"T?","desc":"The currently selected value for a group of radio buttons."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user selects this radio button."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.radio.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"toggleable","type":"bool","required":true,"desc":"Set to true if this radio button is allowed to be returned to an indeterminate state by selecting it again when selected."},{"name":"activeColor","type":"Color?","desc":"The color to use when this radio button is selected."},{"name":"fillColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.radio.fillColor} The color that fills the radio button, in all [WidgetState]s."},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.radio.materialTapTargetSize} Configures the minimum size of the tap target. {@endtemplate}"},{"name":"visualDensity","type":"VisualDensity?","desc":"{@template flutter.material.radio.visualDensity} Defines how compact the radio's layout will be. {@endtemplate}"},{"name":"focusColor","type":"Color?","desc":"The color for the radio's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"{@template flutter.material.radio.hoverColor} The color for the radio's [Material] when a pointer is hovering over it."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.radio.overlayColor} The color for the radio's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.radio.splashRadius} The splash radius of the circular [Material] ink response. {@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"useCupertinoCheckmarkStyle","type":"bool","required":true,"desc":"Controls whether the checkmark style is used in an iOS-style radio."}],"id":45,"lever":4,"family":1,"linkIds":[19,240],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Radio","desc":["【value】: Radio button value 【T】","【groupValue】: Current matching value 【T】","【activeColor】: Active color 【Color】","【onChanged】: Callback on change 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Radio/Radio_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Radio/Radio_zh-CN.json deleted file mode 100644 index f4d55ddc6..000000000 --- a/modules/widget_system/widgets/doc/widgets/Radio/Radio_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Radio","path":"/src/material/radio.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 单选按钮。","fields":[{"name":"value","type":"T","required":true,"desc":"此单选按钮表示的值。"},{"name":"groupValue","type":"T?","desc":"一组单选按钮的当前选定值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户选择此单选按钮时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.radio.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"toggleable","type":"bool","required":true,"desc":"如果此单选按钮在选中时再次选择可以返回到不确定状态,则设置为 true。"},{"name":"activeColor","type":"Color?","desc":"选择此单选按钮时使用的颜色。"},{"name":"fillColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.radio.fillColor} 在所有 [WidgetState] 中填充单选按钮的颜色。"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.radio.materialTapTargetSize} 配置点击目标的最小大小。{@endtemplate}"},{"name":"visualDensity","type":"VisualDensity?","desc":"{@template flutter.material.radio.visualDensity} 定义单选按钮布局的紧凑程度。{@endtemplate}"},{"name":"focusColor","type":"Color?","desc":"单选按钮具有输入焦点时其 [Material] 的颜色。"},{"name":"hoverColor","type":"Color?","desc":"{@template flutter.material.radio.hoverColor} 指针悬停在单选按钮上时其 [Material] 的颜色。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.radio.overlayColor} 单选按钮的 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.radio.splashRadius} 圆形 [Material] 墨水响应的飞溅半径。{@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"useCupertinoCheckmarkStyle","type":"bool","required":true,"desc":"控制是否在 iOS 风格的单选按钮中使用复选标记样式。"}],"id":45,"localName":"选钮","lever":4,"family":1,"linkIds":[19,240],"nodes":[{"file":"node1_base.dart","name":"Radio基本使用","desc":["【value】 : 选钮值 【T】","【groupValue】 : 当前匹配值 【T】","【activeColor】 : 激活颜色 【Color】","【onChanged】 : 改变时回调 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_en-US.json deleted file mode 100644 index 179e4e90a..000000000 --- a/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RadioListTile","path":"/src/material/radio_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A [ListTile] with a [Radio]. In other words, a radio button with a label.","fields":[{"name":"value","type":"T","required":true,"desc":"The value represented by this radio button."},{"name":"groupValue","type":"T?","desc":"The currently selected value for this group of radio buttons."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user selects this radio button."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"toggleable","type":"bool","required":true,"desc":"Set to true if this radio list tile is allowed to be returned to an indeterminate state by selecting it again when selected."},{"name":"activeColor","type":"Color?","desc":"The color to use when this radio button is selected."},{"name":"fillColor","type":"MaterialStateProperty?","desc":"The color that fills the radio button."},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.radio.materialTapTargetSize}"},{"name":"hoverColor","type":"Color?","desc":"{@macro flutter.material.radio.hoverColor}"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The color for the radio's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.radio.splashRadius}"},{"name":"title","type":"Widget?","desc":"The primary content of the list tile."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"secondary","type":"Widget?","desc":"A widget to display on the opposite side of the tile from the radio button."},{"name":"isThreeLine","type":"bool","required":true,"desc":"Whether this list tile is intended to display three lines of text."},{"name":"dense","type":"bool?","desc":"Whether this list tile is part of a vertically dense list."},{"name":"selected","type":"bool","required":true,"desc":"Whether to render icons and text in the [activeColor]."},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"Where to place the control relative to the text."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"Defines the insets surrounding the contents of the tile."},{"name":"shape","type":"ShapeBorder?","desc":"If specified, [shape] defines the shape of the [RadioListTile]'s [InkWell] border."},{"name":"tileColor","type":"Color?","desc":"If specified, defines the background color for `RadioListTile` when [RadioListTile.selected] is false."},{"name":"selectedTileColor","type":"Color?","desc":"If non-null, defines the background color when [RadioListTile.selected] is true."},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the list tile's layout will be."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"Whether to add button:true to the semantics if onTap is provided. This is a temporary flag to help changing the behavior of ListTile onTap semantics."},{"name":"useCupertinoCheckmarkStyle","type":"bool","required":true,"desc":"Whether to use the checkbox style for the [CupertinoRadio] control."},{"name":"radioScaleFactor","type":"double","required":true,"desc":"Controls the scaling factor applied to the [Radio] within the [RadioListTile]."}],"id":19,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RadioListTile requires a generic type T","desc":["【value】 : Item object 【T】","【groupValue】 : Selected object 【T】","【selected】: Whether selected 【bool】","【secondary】: Right component 【Widget】","【title】: Middle top component 【Widget】","【subtitle】: Middle bottom component 【Widget】","【onChanged】: Switch event 【Function(T)】"]},{"file":"node2_dense.dart","name":"RadioListTile selection color and dense layout","desc":["【activeColor】 : Color when selected 【Color】","【dense】: Whether dense layout 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_zh-CN.json deleted file mode 100644 index 246794c06..000000000 --- a/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RadioListTile","path":"/src/material/radio_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":"带有 [Radio] 的 [ListTile]。换句话说,带有标签的单选按钮。","fields":[{"name":"value","type":"T","required":true,"desc":"此单选按钮表示的值。"},{"name":"groupValue","type":"T?","desc":"此单选按钮组当前选择的值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户选择此单选按钮时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"toggleable","type":"bool","required":true,"desc":"设置为 true 如果此单选列表磁贴允许通过在选中时再次选择它来返回到不确定状态。"},{"name":"activeColor","type":"Color?","desc":"选择此单选按钮时使用的颜色。"},{"name":"fillColor","type":"MaterialStateProperty?","desc":"填充单选按钮的颜色。"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.radio.materialTapTargetSize}"},{"name":"hoverColor","type":"Color?","desc":"{@macro flutter.material.radio.hoverColor}"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"单选按钮的 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.radio.splashRadius}"},{"name":"title","type":"Widget?","desc":"列表磁贴的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"secondary","type":"Widget?","desc":"在磁贴上与单选按钮相对侧显示的小部件。"},{"name":"isThreeLine","type":"bool","required":true,"desc":"此列表磁贴是否旨在显示三行文本。"},{"name":"dense","type":"bool?","desc":"此列表磁贴是否是垂直密集列表的一部分。"},{"name":"selected","type":"bool","required":true,"desc":"是否在 [activeColor] 中渲染图标和文本。"},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"控件相对于文本的放置位置。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"定义磁贴内容周围的插入。"},{"name":"shape","type":"ShapeBorder?","desc":"如果指定,[shape] 定义 [RadioListTile] 的 [InkWell] 边框的形状。"},{"name":"tileColor","type":"Color?","desc":"如果指定,当 [RadioListTile.selected] 为 false 时定义 `RadioListTile` 的背景颜色。"},{"name":"selectedTileColor","type":"Color?","desc":"如果非空,当 [RadioListTile.selected] 为 true 时定义背景颜色。"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义列表磁贴布局的紧凑程度。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"如果提供了 onTap,是否向语义添加 button:true。这是一个临时标志,用于帮助更改 ListTile onTap 语义的行为。"},{"name":"useCupertinoCheckmarkStyle","type":"bool","required":true,"desc":"是否为 [CupertinoRadio] 控件使用复选框样式。"},{"name":"radioScaleFactor","type":"double","required":true,"desc":"控制应用于 [RadioListTile] 内 [Radio] 的缩放因子。"}],"id":19,"localName":"选钮瓦片","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RadioListTile需要一个泛型T","desc":["【value】 : 条目对象 【T】","【groupValue】 : 选中对象 【T】","【selected】: 是否选中 【bool】","【secondary】: 右侧组件 【Widget】","【title】: 中间上组件 【Widget】","【subtitle】: 中间下组件 【Widget】","【onChanged】: 切换事件 【Function(T)】"]},{"file":"node2_dense.dart","name":"RadioListTile选中色和密排","desc":["【activeColor】 : 选中时颜色 【Color】","【dense】: 是否密排 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_en-US.json b/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_en-US.json deleted file mode 100644 index fb6fe0151..000000000 --- a/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RadioMenuButton","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":" A menu item that combines a [Radio] widget with a [MenuItemButton].","fields":[{"name":"value","type":"T","required":true,"desc":"The value represented by this radio button."},{"name":"groupValue","type":"T?","desc":"The currently selected value for a group of radio buttons."},{"name":"toggleable","type":"bool","required":true,"desc":"Set to true if this radio button is allowed to be returned to an indeterminate state by selecting it again when selected."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user selects this radio button."},{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the button response area."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"The optional shortcut that selects this [MenuItemButton]."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"trailingIcon","type":"Widget?","desc":"An optional icon to display after the [child] label."},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@macro flutter.material.menu_anchor.closeOnActivate}"},{"name":"child","type":"Widget?","desc":"The widget displayed in the center of this button."}],"id":477,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_zh-CN.json deleted file mode 100644 index 2456abb59..000000000 --- a/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RadioMenuButton","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":"将 [Radio] 小部件与 [MenuItemButton] 结合的菜单项。","fields":[{"name":"value","type":"T","required":true,"desc":"此单选按钮表示的值。"},{"name":"groupValue","type":"T?","desc":"一组单选按钮当前选择的值。"},{"name":"toggleable","type":"bool","required":true,"desc":"设置为 true 如果此单选按钮允许通过在选中时再次选择它来返回到不确定状态。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户选择此单选按钮时调用。"},{"name":"onHover","type":"ValueChanged?","desc":"指针进入或退出按钮响应区域时调用。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点更改时调用的处理程序。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"选择此 [MenuItemButton] 的可选快捷方式。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"trailingIcon","type":"Widget?","desc":"在 [child] 标签后显示的可选图标。"},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@macro flutter.material.menu_anchor.closeOnActivate}"},{"name":"child","type":"Widget?","desc":"显示在此按钮中心的小部件。"}],"id":477,"localName":"RadioMenuButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_en-US.json deleted file mode 100644 index 3e6a5eb40..000000000 --- a/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RadioTheme","path":"/src/material/radio_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a radio theme to descendant [Radio] widgets.","fields":[{"name":"data","type":"RadioThemeData","required":true,"desc":"The properties used for all descendant [Radio] widgets."}],"id":478,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_zh-CN.json deleted file mode 100644 index 1df2cd892..000000000 --- a/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RadioTheme","path":"/src/material/radio_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将单选按钮主题应用于后代 [Radio] 小部件。","fields":[{"name":"data","type":"RadioThemeData","required":true,"desc":"用于所有后代 [Radio] 小部件的属性。"}],"id":478,"localName":"RadioTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_en-US.json b/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_en-US.json deleted file mode 100644 index 7b07873fb..000000000 --- a/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RangeSlider","path":"/src/material/range_slider.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design range slider.","fields":[{"name":"values","type":"RangeValues","required":true,"desc":"The currently selected values for this range slider."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user is selecting a new value for the slider by dragging."},{"name":"onChangeStart","type":"ValueChanged?","desc":"Called when the user starts selecting new values for the slider."},{"name":"onChangeEnd","type":"ValueChanged?","desc":"Called when the user is done selecting new values for the slider."},{"name":"min","type":"double","required":true,"desc":"The minimum value the user can select."},{"name":"max","type":"double","required":true,"desc":"The maximum value the user can select."},{"name":"divisions","type":"int?","desc":"The number of discrete divisions."},{"name":"labels","type":"RangeLabels?","desc":"Labels to show as text in the [SliderThemeData.rangeValueIndicatorShape] when the slider is active and [SliderThemeData.showValueIndicator] is satisfied."},{"name":"activeColor","type":"Color?","desc":"The color of the track's active segment, i.e. the span of track between the thumbs."},{"name":"inactiveColor","type":"Color?","desc":"The color of the track's inactive segments, i.e. the span of tracks between the min and the start thumb, and the end thumb and the max."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The highlight color that's typically used to indicate that the range slider thumb is hovered or dragged."},{"name":"mouseCursor","type":"MaterialStateProperty?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"semanticFormatterCallback","type":"SemanticFormatterCallback?","desc":"The callback used to create a semantic value from the slider's values."}],"id":44,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RangeSlider","desc":["【values】 : Values 【RangeValues】","【min】 : Minimum value 【double】","【max】 : Maximum value 【double】","【divisions】 : Number of divisions 【int】","【label】 : Tooltip text 【String】","【activeColor】 : Active color 【Color】","【inactiveColor】 : Inactive color 【Color】","【onChangeStart】 : Listener when sliding starts 【Function(RangeValues)】","【onChangeEnd】 : Listener when sliding ends 【Function(RangeValues)】","【onChanged】 : Callback when changed 【Function(RangeValues)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_zh-CN.json deleted file mode 100644 index acce0180b..000000000 --- a/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RangeSlider","path":"/src/material/range_slider.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 范围滑块。","fields":[{"name":"values","type":"RangeValues","required":true,"desc":"此范围滑块当前选择的值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户通过拖动为滑块选择新值时调用。"},{"name":"onChangeStart","type":"ValueChanged?","desc":"用户开始为滑块选择新值时调用。"},{"name":"onChangeEnd","type":"ValueChanged?","desc":"用户完成为滑块选择新值时调用。"},{"name":"min","type":"double","required":true,"desc":"用户可以选择的最小值。"},{"name":"max","type":"double","required":true,"desc":"用户可以选择的最大值。"},{"name":"divisions","type":"int?","desc":"离散分割的数量。"},{"name":"labels","type":"RangeLabels?","desc":"当滑块处于活动状态且满足 [SliderThemeData.showValueIndicator] 时,在 [SliderThemeData.rangeValueIndicatorShape] 中显示为文本的标签。"},{"name":"activeColor","type":"Color?","desc":"轨道活动段的颜色,即拇指之间的轨道跨度。"},{"name":"inactiveColor","type":"Color?","desc":"轨道非活动段的颜色,即最小值和开始拇指之间以及结束拇指和最大值之间的轨道跨度。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"通常用于指示范围滑块拇指被悬停或拖动的高亮颜色。"},{"name":"mouseCursor","type":"MaterialStateProperty?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"semanticFormatterCallback","type":"SemanticFormatterCallback?","desc":"用于从滑块值创建语义值的回调。"}],"id":44,"localName":"范围滑块","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RangeSlider基本使用","desc":["【values】 : 数值 【RangeValues】","【min】 : 最小值 【double】","【max】 : 最大值 【double】","【divisions】 : 分段数 【int】","【label】 : 提示气泡文字 【String】","【activeColor】 : 激活颜色 【Color】","【inactiveColor】 : 非激活颜色 【Color】","【onChangeStart】 : 开始滑动时监听 【Function(RangeValues)】","【onChangeEnd】 : 滑动结束时监听 【Function(RangeValues)】","【onChanged】 : 改变时回调 【Function(RangeValues)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_en-US.json b/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_en-US.json deleted file mode 100644 index 68661bb15..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawAutocomplete","path":"/src/widgets/autocomplete.dart","parents":["StatefulWidget","Widget"],"desc":" {@template flutter.widgets.RawAutocomplete.RawAutocomplete} A widget for helping the user make a selection by entering some text and choosing from among a list of options.","fields":[{"name":"fieldViewBuilder","type":"AutocompleteFieldViewBuilder?","desc":"{@template flutter.widgets.RawAutocomplete.fieldViewBuilder} Builds the field whose input is used to get the options."},{"name":"focusNode","type":"FocusNode?","desc":"The [FocusNode] that is used for the text field."},{"name":"optionsViewBuilder","type":"AutocompleteOptionsViewBuilder","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsViewBuilder} Builds the selectable options widgets from a list of options objects."},{"name":"optionsViewOpenDirection","type":"OptionsViewOpenDirection","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsViewOpenDirection} The direction in which to open the options-view overlay."},{"name":"displayStringForOption","type":"AutocompleteOptionToString","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.displayStringForOption} Returns the string to display in the field when the option is selected."},{"name":"onSelected","type":"AutocompleteOnSelected?","desc":"{@template flutter.widgets.RawAutocomplete.onSelected} Called when an option is selected by the user. {@endtemplate}"},{"name":"optionsBuilder","type":"AutocompleteOptionsBuilder","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsBuilder} A function that returns the current selectable options objects given the current TextEditingValue. {@endtemplate}"},{"name":"textEditingController","type":"TextEditingController?","desc":"The [TextEditingController] that is used for the text field."},{"name":"initialValue","type":"TextEditingValue?","desc":"{@template flutter.widgets.RawAutocomplete.initialValue} The initial value to use for the text field. {@endtemplate}"}],"id":479,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_zh-CN.json deleted file mode 100644 index db96fcefd..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawAutocomplete","path":"/src/widgets/autocomplete.dart","parents":["StatefulWidget","Widget"],"desc":"{@template flutter.widgets.RawAutocomplete.RawAutocomplete} 通过输入一些文本并从选项列表中选择来帮助用户进行选择的小部件。","fields":[{"name":"fieldViewBuilder","type":"AutocompleteFieldViewBuilder?","desc":"{@template flutter.widgets.RawAutocomplete.fieldViewBuilder} 构建其输入用于获取选项的字段。"},{"name":"focusNode","type":"FocusNode?","desc":"用于文本字段的 [FocusNode]。"},{"name":"optionsViewBuilder","type":"AutocompleteOptionsViewBuilder","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsViewBuilder} 从选项对象列表构建可选择的选项小部件。"},{"name":"optionsViewOpenDirection","type":"OptionsViewOpenDirection","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsViewOpenDirection} 打开选项视图覆盖的方向。"},{"name":"displayStringForOption","type":"AutocompleteOptionToString","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.displayStringForOption} 返回选择选项时在字段中显示的字符串。"},{"name":"onSelected","type":"AutocompleteOnSelected?","desc":"{@template flutter.widgets.RawAutocomplete.onSelected} 用户选择选项时调用。{@endtemplate}"},{"name":"optionsBuilder","type":"AutocompleteOptionsBuilder","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsBuilder} 给定当前 TextEditingValue 返回当前可选择选项对象的函数。{@endtemplate}"},{"name":"textEditingController","type":"TextEditingController?","desc":"用于文本字段的 [TextEditingController]。"},{"name":"initialValue","type":"TextEditingValue?","desc":"{@template flutter.widgets.RawAutocomplete.initialValue} 用于文本字段的初始值。{@endtemplate}"}],"id":479,"localName":"RawAutocomplete","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_en-US.json b/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_en-US.json deleted file mode 100644 index f775f7f26..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawChip","path":"/src/material/chip.dart","parents":["StatefulWidget","Widget"],"desc":" A raw Material Design chip.","fields":[{"name":"defaultProperties","type":"ChipThemeData?","desc":"Defines the defaults for the chip properties if they are not specified elsewhere."},{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"deleteIcon","type":"Widget","required":true},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"onSelected","type":"ValueChanged?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"selected","type":"bool","required":true},{"name":"isEnabled","type":"bool","required":true},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"WidgetStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"},{"name":"tapEnabled","type":"bool","required":true,"desc":"If set, this indicates that the chip should be disabled if all of the tap callbacks ([onSelected], [onPressed]) are null."}],"id":153,"lever":5,"family":1,"linkIds":[11,12,13,14,15],"nodes":[{"file":"node1_press.dart","name":"RawChip Click Effect","desc":["【label】: Middle component 【Widget】","【padding】 : Padding 【EdgeInsetsGeometry】","【labelPadding】 : Label padding 【EdgeInsetsGeometry】","【shadowColor】: Shadow color 【Color】","【avatar】: Left component 【Widget】","【elevation】: Elevation 【double】","【pressElevation】: Elevation when pressed 【double】","【onPressed】 : Click event 【Function()】"]},{"file":"node2_select.dart","name":"RawChip Selection and Deletion Effect","desc":["【selected】: Whether selected 【bool】","【deleteIconColor】: Trailing icon color 【Color】","【selectedColor】: Selected color 【Color】","【deleteIcon】: Trailing component 【Widget】","【onSelected】: Selection event 【Function(bool)】","【onDeleted】 : Trailing event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_zh-CN.json deleted file mode 100644 index b30f7a6a1..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawChip","path":"/src/material/chip.dart","parents":["StatefulWidget","Widget"],"desc":"原始 Material Design 芯片。","fields":[{"name":"defaultProperties","type":"ChipThemeData?","desc":"如果芯片属性未在其他地方指定,则定义芯片属性的默认值。"},{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"deleteIcon","type":"Widget","required":true},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"onSelected","type":"ValueChanged?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"selected","type":"bool","required":true},{"name":"isEnabled","type":"bool","required":true},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"WidgetStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"},{"name":"tapEnabled","type":"bool","required":true,"desc":"如果设置,这表示如果所有点击回调([onSelected]、[onPressed])都为 null,则应禁用芯片。"}],"id":153,"localName":"原生小条","lever":5,"family":1,"linkIds":[11,12,13,14,15],"nodes":[{"file":"node1_press.dart","name":"RawChip点击效果","desc":["【label】: 中间组件 【Widget】","【padding】 : 内边距 【EdgeInsetsGeometry】","【labelPadding】 : label边距 【EdgeInsetsGeometry】","【shadowColor】: 阴影色 【Color】","【avatar】: 左侧组件 【Widget】","【elevation】: 影深 【double】","【pressElevation】: 点击时影深 【double】","【onPressed】 : 点击事件 【Function()】"]},{"file":"node2_select.dart","name":"RawChip选中和删除效果","desc":["【selected】: 是否选中 【bool】","【deleteIconColor】: 尾部图标色 【Color】","【selectedColor】: 选中色 【Color】","【deleteIcon】: 尾部组件 【Widget】","【onSelected】: 选中事件 【Function(bool)】","【onDeleted】 : 尾部事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_en-US.json b/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_en-US.json deleted file mode 100644 index 536e711d8..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawGestureDetector","path":"/src/widgets/gesture_detector.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that detects gestures described by the given gesture factories.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"gestures","type":"Map","required":true,"desc":"The gestures that this widget will attempt to recognize."},{"name":"behavior","type":"HitTestBehavior?","desc":"How this gesture detector should behave during hit testing."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"Whether to exclude these gestures from the semantics tree. For example, the long-press gesture for showing a tooltip is excluded because the tooltip itself is included in the semantics tree directly and so having a gesture to show it would result in duplication of information."},{"name":"semantics","type":"SemanticsGestureDelegate?","desc":"Describes the semantics notations that should be added to the underlying render object [RenderSemanticsGestureHandler]."}],"id":248,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RawGestureDetector","desc":["【behavior】: Detection behavior 【HitTestBehavior】","【gestures】: Gesture mapping 【Map】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_zh-CN.json deleted file mode 100644 index f3c80b7fb..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawGestureDetector","path":"/src/widgets/gesture_detector.dart","parents":["StatefulWidget","Widget"],"desc":"检测由给定手势工厂描述的手势的小部件。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"gestures","type":"Map","required":true,"desc":"此小部件将尝试识别的手势。"},{"name":"behavior","type":"HitTestBehavior?","desc":"此手势检测器在命中测试期间应如何表现。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"是否从语义树中排除这些手势。例如,显示工具提示的长按手势被排除,因为工具提示本身直接包含在语义树中,因此具有显示它的手势会导致信息重复。"},{"name":"semantics","type":"SemanticsGestureDelegate?","desc":"描述应添加到底层渲染对象 [RenderSemanticsGestureHandler] 的语义符号。"}],"id":248,"localName":"原手势检测器","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RawGestureDetector基本使用","desc":["【behavior】 : 侦测行为 【HitTestBehavior】","【gestures】 : 手势映射 【Map】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_en-US.json b/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_en-US.json deleted file mode 100644 index 5a747b072..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawImage","path":"/src/widgets/basic.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that displays a [dart:ui.Image] directly.","fields":[{"name":"image","type":"ui.Image?","desc":"The image to display."},{"name":"debugImageLabel","type":"String?","desc":"A string identifying the source of the image."},{"name":"width","type":"double?","desc":"If non-null, require the image to have this width."},{"name":"height","type":"double?","desc":"If non-null, require the image to have this height."},{"name":"scale","type":"double","required":true,"desc":"The linear scale factor for drawing this image at its intended size."},{"name":"color","type":"Color?","desc":"If non-null, this color is blended with each image pixel using [colorBlendMode]."},{"name":"opacity","type":"Animation?","desc":"If non-null, the value from the [Animation] is multiplied with the opacity of each image pixel before painting onto the canvas."},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"Used to set the filterQuality of the image."},{"name":"colorBlendMode","type":"BlendMode?","desc":"Used to combine [color] with this image."},{"name":"fit","type":"BoxFit?","desc":"How to inscribe the image into the space allocated during layout."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the image within its bounds."},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"How to paint any portions of the layout bounds not covered by the image."},{"name":"centerSlice","type":"Rect?","desc":"The center slice for a nine-patch image."},{"name":"matchTextDirection","type":"bool","required":true,"desc":"Whether to paint the image in the direction of the [TextDirection]."},{"name":"invertColors","type":"bool","required":true,"desc":"Whether the colors of the image are inverted when drawn."},{"name":"isAntiAlias","type":"bool","required":true,"desc":"Whether to paint the image with anti-aliasing."}],"id":313,"lever":2,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RawImage","desc":["【image】: Image 【ui.Image】","【width】: Width 【int】","【height】: Height 【int】","【isAntiAlias】: Whether to anti-alias 【bool】","【filterQuality】: Filter quality 【FilterQuality】","Many properties are the same as Image, see details there."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_zh-CN.json deleted file mode 100644 index c491e9232..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawImage","path":"/src/widgets/basic.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"直接显示 [dart:ui.Image] 的小部件。","fields":[{"name":"image","type":"ui.Image?","desc":"要显示的图像。"},{"name":"debugImageLabel","type":"String?","desc":"标识图像来源的字符串。"},{"name":"width","type":"double?","desc":"如果非空,要求图像具有此宽度。"},{"name":"height","type":"double?","desc":"如果非空,要求图像具有此高度。"},{"name":"scale","type":"double","required":true,"desc":"以其预期大小绘制此图像的线性比例因子。"},{"name":"color","type":"Color?","desc":"如果非空,此颜色使用 [colorBlendMode] 与每个图像像素混合。"},{"name":"opacity","type":"Animation?","desc":"如果非空,在绘制到画布之前,[Animation] 的值与每个图像像素的不透明度相乘。"},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"用于设置图像的 filterQuality。"},{"name":"colorBlendMode","type":"BlendMode?","desc":"用于将 [color] 与此图像组合。"},{"name":"fit","type":"BoxFit?","desc":"如何将图像刻入布局期间分配的空间。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在其边界内对齐图像。"},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"如何绘制图像未覆盖的布局边界的任何部分。"},{"name":"centerSlice","type":"Rect?","desc":"九宫格图像的中心切片。"},{"name":"matchTextDirection","type":"bool","required":true,"desc":"是否在 [TextDirection] 的方向上绘制图像。"},{"name":"invertColors","type":"bool","required":true,"desc":"绘制时是否反转图像的颜色。"},{"name":"isAntiAlias","type":"bool","required":true,"desc":"是否使用抗锯齿绘制图像。"}],"id":313,"localName":"原图片","lever":2,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RawImage基本使用","desc":["【image】 : 图片 【ui.Image】","【width】 : 宽 【int】","【height】: 高 【int】","【isAntiAlias】: 是否抗锯齿 【bool】","【filterQuality】: 过滤质量 【FilterQuality】","很多属性同Image,详见之."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_en-US.json b/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_en-US.json deleted file mode 100644 index 7fce1d266..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawKeyboardListener","path":"/src/widgets/raw_keyboard_listener.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that calls a callback whenever the user presses or releases a key on a keyboard.","fields":[{"name":"focusNode","type":"FocusNode","required":true,"desc":"Controls whether this widget has keyboard focus."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"},{"name":"onKey","type":"ValueChanged?","desc":"Called whenever this widget receives a raw keyboard event."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":254,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RawGestureDetector","desc":["【onKey】 : Keyboard event 【ValueChanged】","【focusNode】 : Focus 【FocusNode】","【autofocus】 : Whether to auto focus 【bool】","【child】 : Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_zh-CN.json deleted file mode 100644 index 1844c76d9..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawKeyboardListener","path":"/src/widgets/raw_keyboard_listener.dart","parents":["StatefulWidget","Widget"],"desc":"每当用户在键盘上按下或释放键时调用回调的小部件。","fields":[{"name":"focusNode","type":"FocusNode","required":true,"desc":"控制此小部件是否具有键盘焦点。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"},{"name":"onKey","type":"ValueChanged?","desc":"每当此小部件接收到原始键盘事件时调用。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":254,"localName":"原键盘监听器","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RawGestureDetector基本使用","desc":["【onKey】 : 键盘事件 【ValueChanged】","【focusNode】 : 焦点 【FocusNode】","【autofocus】 : 是否自动聚焦 【bool】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_en-US.json b/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_en-US.json deleted file mode 100644 index f2b20c172..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawMagnifier","path":"/src/widgets/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":" A common base class for magnifiers.","fields":[{"name":"child","type":"Widget?","desc":"An optional widget to position inside the len of the [RawMagnifier]."},{"name":"decoration","type":"MagnifierDecoration","required":true,"desc":"This magnifier's decoration."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"Whether and how to clip the parts of [decoration] that render inside the loupe."},{"name":"focalPointOffset","type":"Offset","required":true,"desc":"The offset of the magnifier from [RawMagnifier]'s center."},{"name":"magnificationScale","type":"double","required":true,"desc":"How \"zoomed in\" the magnification subject is in the lens."},{"name":"size","type":"Size","required":true,"desc":"The size of the magnifier."}],"id":360,"lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Simple use of RawMagnifier","desc":["【size】: Size 【Size】","【magnificationScale】: Magnification 【double】","【focalPointOffset】: Magnification content offset 【Offset】","【decoration】: Decoration 【MagnifierDecoration】","【child】: Child component 【Widget?】"]},{"file":"node2_shape.dart","name":"Custom decoration shape for RawMagnifier","desc":["Customize the five-pointed star decoration shape here"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_zh-CN.json deleted file mode 100644 index 888c33b56..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawMagnifier","path":"/src/widgets/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":"放大镜的通用基类。","fields":[{"name":"child","type":"Widget?","desc":"在 [RawMagnifier] 镜头内定位的可选小部件。"},{"name":"decoration","type":"MagnifierDecoration","required":true,"desc":"此放大镜的装饰。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"是否以及如何裁剪在放大镜内渲染的 [decoration] 部分。"},{"name":"focalPointOffset","type":"Offset","required":true,"desc":"放大镜从 [RawMagnifier] 中心的偏移。"},{"name":"magnificationScale","type":"double","required":true,"desc":"放大主体在镜头中的"},{"name":"size","type":"Size","required":true,"desc":"放大镜的大小。"}],"id":360,"localName":"原放大镜","lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RawMagnifier 的简单使用","desc":["【size】 : 尺寸 【Size】","【magnificationScale】 : 放大倍率 【double】","【focalPointOffset】: 放大内容偏移量 【Offset】","【decoration】: 发现装饰 【MagnifierDecoration】","【child】: 子组件 【Widget?】,"]},{"file":"node2_shape.dart","name":"RawMagnifier 自定义装饰形状","desc":["这里自定义五角星装饰形状"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_en-US.json b/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_en-US.json deleted file mode 100644 index 9363dfcd9..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawMaterialButton","path":"/src/material/button.dart","parents":["StatefulWidget","Widget"],"desc":" Creates a button based on [Semantics], [Material], and [InkWell] widgets.","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"Called when the button is tapped or otherwise activated."},{"name":"onLongPress","type":"VoidCallback?","desc":"Called when the button is long-pressed."},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"Called by the underlying [InkWell] widget's [InkWell.onHighlightChanged] callback."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.RawMaterialButton.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the button."},{"name":"textStyle","type":"TextStyle?","desc":"Defines the default text style, with [Material.textStyle], for the button's [child]."},{"name":"fillColor","type":"Color?","desc":"The color of the button's [Material]."},{"name":"focusColor","type":"Color?","desc":"The color for the button's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"The color for the button's [Material] when a pointer is hovering over it."},{"name":"highlightColor","type":"Color?","desc":"The highlight color for the button's [InkWell]."},{"name":"splashColor","type":"Color?","desc":"The splash color for the button's [InkWell]."},{"name":"elevation","type":"double","required":true,"desc":"The elevation for the button's [Material] when the button is [enabled] but not pressed."},{"name":"hoverElevation","type":"double","required":true,"desc":"The elevation for the button's [Material] when the button is [enabled] and a pointer is hovering over it."},{"name":"focusElevation","type":"double","required":true,"desc":"The elevation for the button's [Material] when the button is [enabled] and has the input focus."},{"name":"highlightElevation","type":"double","required":true,"desc":"The elevation for the button's [Material] when the button is [enabled] and pressed."},{"name":"disabledElevation","type":"double","required":true,"desc":"The elevation for the button's [Material] when the button is not [enabled]."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The internal padding for the button's [child]."},{"name":"visualDensity","type":"VisualDensity","required":true,"desc":"Defines how compact the button's layout will be."},{"name":"constraints","type":"BoxConstraints","required":true,"desc":"Defines the button's size."},{"name":"shape","type":"ShapeBorder","required":true,"desc":"The shape of the button's [Material]."},{"name":"animationDuration","type":"Duration","required":true,"desc":"Defines the duration of animated changes for [shape] and [elevation]."},{"name":"child","type":"Widget?","desc":"Typically the button's label."},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize","required":true,"desc":"Configures the minimum size of the tap target."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"enableFeedback","type":"bool","required":true,"desc":"Whether detected gestures should provide acoustic and/or haptic feedback."}],"id":175,"lever":5,"family":1,"linkIds":[23,25,26,27],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RawMaterialButton","desc":["【child】: Child component 【Widget】","【elevation】: Shadow depth 【double】","【fillColor】: Fill color 【Color】","【splashColor】: Ripple color 【Color】","【textStyle】: Text style 【TextStyle】","【onLongPress】: Long press event 【Function()】","【onPressed】: Click event 【Function()】"]},{"file":"node2_shape.dart","name":"Highlight and Shape of RawMaterialButton","desc":["【highlightElevation】: Highlight shadow depth 【double】","【shape】: Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_zh-CN.json deleted file mode 100644 index d267ca02d..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawMaterialButton","path":"/src/material/button.dart","parents":["StatefulWidget","Widget"],"desc":"基于 [Semantics]、[Material] 和 [InkWell] 小部件创建按钮。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用。"},{"name":"onLongPress","type":"VoidCallback?","desc":"长按按钮时调用。"},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"由底层 [InkWell] 小部件的 [InkWell.onHighlightChanged] 回调调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.RawMaterialButton.mouseCursor} 鼠标指针进入或悬停在按钮上时的光标。"},{"name":"textStyle","type":"TextStyle?","desc":"使用 [Material.textStyle] 为按钮的 [child] 定义默认文本样式。"},{"name":"fillColor","type":"Color?","desc":"按钮的 [Material] 的颜色。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时其 [Material] 的颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在按钮上时其 [Material] 的颜色。"},{"name":"highlightColor","type":"Color?","desc":"按钮的 [InkWell] 的高亮颜色。"},{"name":"splashColor","type":"Color?","desc":"按钮的 [InkWell] 的飞溅颜色。"},{"name":"elevation","type":"double","required":true,"desc":"按钮 [enabled] 但未按下时按钮的 [Material] 的高度。"},{"name":"hoverElevation","type":"double","required":true,"desc":"按钮 [enabled] 且指针悬停在其上时按钮的 [Material] 的高度。"},{"name":"focusElevation","type":"double","required":true,"desc":"按钮 [enabled] 且具有输入焦点时按钮的 [Material] 的高度。"},{"name":"highlightElevation","type":"double","required":true,"desc":"按钮 [enabled] 且被按下时按钮的 [Material] 的高度。"},{"name":"disabledElevation","type":"double","required":true,"desc":"按钮未 [enabled] 时按钮的 [Material] 的高度。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"按钮的 [child] 的内部内边距。"},{"name":"visualDensity","type":"VisualDensity","required":true,"desc":"定义按钮布局的紧凑程度。"},{"name":"constraints","type":"BoxConstraints","required":true,"desc":"定义按钮的大小。"},{"name":"shape","type":"ShapeBorder","required":true,"desc":"按钮的 [Material] 的形状。"},{"name":"animationDuration","type":"Duration","required":true,"desc":"定义 [shape] 和 [elevation] 动画更改的持续时间。"},{"name":"child","type":"Widget?","desc":"通常是按钮的标签。"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize","required":true,"desc":"配置点击目标的最小大小。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"enableFeedback","type":"bool","required":true,"desc":"检测到的手势是否应提供声音和/或触觉反馈。"}],"id":175,"localName":"原始按钮","lever":5,"family":1,"linkIds":[23,25,26,27],"nodes":[{"file":"node1_base.dart","name":"RawMaterialButton基本使用","desc":["【child】 : 子组件 【Widget】","【elevation】 : 影深 【double】","【fillColor】 : 填充色 【Color】","【splashColor】 : 水波纹色 【Color】","【textStyle】 : 文字样式 【TextStyle】","【onLongPress】 : 长按事件 【Function()】","【onPressed】 : 点击事件 【Function()】"]},{"file":"node2_shape.dart","name":"RawMaterialButton高亮和形状","desc":["【highlightElevation】 : 高亮影深 【double】","【shape】 : 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_en-US.json b/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_en-US.json deleted file mode 100644 index 55b66cfbe..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawMenuAnchor","path":"/src/widgets/raw_menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that wraps a child and anchors a floating menu.","fields":[{"name":"onOpen","type":"VoidCallback?","desc":"A callback that is invoked when the menu is opened."},{"name":"onClose","type":"VoidCallback?","desc":"A callback that is invoked when the menu is closed."},{"name":"builder","type":"RawMenuAnchorChildBuilder?","desc":"A builder that builds the widget that this [RawMenuAnchor] surrounds."},{"name":"child","type":"Widget?","desc":"The optional child to be passed to the [builder]."},{"name":"overlayBuilder","type":"RawMenuAnchorOverlayBuilder","required":true,"desc":"The [overlayBuilder] function is passed a [RawMenuOverlayInfo] object that defines the anchor's [Rect], the [Size] of the overlay, the [TapRegion.groupId] for the menu system, and the position [Offset] passed to [MenuController.open]."},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@template flutter.widgets.RawMenuAnchor.useRootOverlay} Whether the menu panel should be rendered in the root [Overlay]."},{"name":"childFocusNode","type":"FocusNode?","desc":"The [FocusNode] attached to the widget that takes focus when the menu is opened or closed."},{"name":"consumeOutsideTaps","type":"bool","required":true,"desc":"Whether or not a tap event that closes the menu will be permitted to continue on to the gesture arena."},{"name":"controller","type":"MenuController","required":true,"desc":"A [MenuController] that allows opening and closing of the menu from other widgets."}],"id":480,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_zh-CN.json deleted file mode 100644 index 4e005c46e..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawMenuAnchor","path":"/src/widgets/raw_menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"包装子项并锚定浮动菜单的小部件。","fields":[{"name":"onOpen","type":"VoidCallback?","desc":"菜单打开时调用的回调。"},{"name":"onClose","type":"VoidCallback?","desc":"菜单关闭时调用的回调。"},{"name":"builder","type":"RawMenuAnchorChildBuilder?","desc":"构建此 [RawMenuAnchor] 围绕的小部件的构建器。"},{"name":"child","type":"Widget?","desc":"要传递给 [builder] 的可选子项。"},{"name":"overlayBuilder","type":"RawMenuAnchorOverlayBuilder","required":true,"desc":"[overlayBuilder] 函数传递一个 [RawMenuOverlayInfo] 对象,该对象定义锚点的 [Rect]、覆盖的 [Size]、菜单系统的 [TapRegion.groupId] 以及传递给 [MenuController.open] 的位置 [Offset]。"},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@template flutter.widgets.RawMenuAnchor.useRootOverlay} 菜单面板是否应在根 [Overlay] 中渲染。"},{"name":"childFocusNode","type":"FocusNode?","desc":"附加到在菜单打开或关闭时获得焦点的小部件的 [FocusNode]。"},{"name":"consumeOutsideTaps","type":"bool","required":true,"desc":"关闭菜单的点击事件是否被允许继续到手势竞技场。"},{"name":"controller","type":"MenuController","required":true,"desc":"允许从其他小部件打开和关闭菜单的 [MenuController]。"}],"id":480,"localName":"RawMenuAnchor","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_en-US.json deleted file mode 100644 index 77d60fe30..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawMenuAnchorGroup","path":"/src/widgets/raw_menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" Creates a menu anchor that is always visible and is not displayed in an [OverlayPortal].","fields":[{"name":"child","type":"Widget","required":true,"desc":"The child displayed by the [RawMenuAnchorGroup]."},{"name":"controller","type":"MenuController","required":true,"desc":"An [MenuController] that allows the closing of the menu from other widgets."}],"id":481,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_zh-CN.json deleted file mode 100644 index 9db05e2d7..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawMenuAnchorGroup","path":"/src/widgets/raw_menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"创建始终可见且不在 [OverlayPortal] 中显示的菜单锚点。","fields":[{"name":"child","type":"Widget","required":true,"desc":"[RawMenuAnchorGroup] 显示的子项。"},{"name":"controller","type":"MenuController","required":true,"desc":"允许从其他小部件关闭菜单的 [MenuController]。"}],"id":481,"localName":"RawMenuAnchorGroup","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_en-US.json b/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_en-US.json deleted file mode 100644 index 2086a24c3..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawScrollbar","path":"/src/widgets/scrollbar.dart","parents":["StatefulWidget","Widget"],"desc":" An extendable base class for building scrollbars that fade in and out.","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@template flutter.widgets.Scrollbar.child} The widget below this widget in the tree."},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.Scrollbar.controller} The [ScrollController] used to implement Scrollbar dragging."},{"name":"thumbVisibility","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.thumbVisibility} Indicates that the scrollbar thumb should be visible, even when a scroll is not underway."},{"name":"shape","type":"OutlinedBorder?","desc":"The [OutlinedBorder] of the scrollbar's thumb."},{"name":"radius","type":"Radius?","desc":"The [Radius] of the scrollbar thumb's rounded rectangle corners."},{"name":"thickness","type":"double?","desc":"The thickness of the scrollbar in the cross axis of the scrollable."},{"name":"thumbColor","type":"Color?","desc":"The color of the scrollbar thumb."},{"name":"minThumbLength","type":"double","required":true,"desc":"The preferred smallest size the scrollbar thumb can shrink to when the total scrollable extent is large, the current visible viewport is small, and the viewport is not overscrolled."},{"name":"minOverscrollLength","type":"double?","desc":"The preferred smallest size the scrollbar thumb can shrink to when viewport is overscrolled."},{"name":"trackVisibility","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.trackVisibility} Indicates that the scrollbar track should be visible."},{"name":"trackRadius","type":"Radius?","desc":"The [Radius] of the scrollbar track's rounded rectangle corners."},{"name":"trackColor","type":"Color?","desc":"The color of the scrollbar track."},{"name":"trackBorderColor","type":"Color?","desc":"The color of the scrollbar track's border."},{"name":"fadeDuration","type":"Duration","required":true,"desc":"The [Duration] of the fade animation."},{"name":"timeToFade","type":"Duration","required":true,"desc":"The [Duration] of time until the fade animation begins."},{"name":"pressDuration","type":"Duration","required":true,"desc":"The [Duration] of time that a LongPress will trigger the drag gesture of the scrollbar thumb."},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@template flutter.widgets.Scrollbar.notificationPredicate} A check that specifies whether a [ScrollNotification] should be handled by this widget."},{"name":"interactive","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.interactive} Whether the Scrollbar should be interactive and respond to dragging on the thumb, or tapping in the track area."},{"name":"scrollbarOrientation","type":"ScrollbarOrientation?","desc":"{@macro flutter.widgets.Scrollbar.scrollbarOrientation}"},{"name":"mainAxisMargin","type":"double","required":true,"desc":"Distance from the scrollbar thumb's start or end to the nearest edge of the viewport in logical pixels. It affects the amount of available paint area."},{"name":"crossAxisMargin","type":"double","required":true,"desc":"Distance from the scrollbar thumb's side to the nearest cross axis edge in logical pixels."},{"name":"padding","type":"EdgeInsets?","desc":"The insets by which the scrollbar thumb and track should be padded."}],"id":482,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_zh-CN.json deleted file mode 100644 index dc590b07f..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawScrollbar","path":"/src/widgets/scrollbar.dart","parents":["StatefulWidget","Widget"],"desc":"用于构建淡入淡出滚动条的可扩展基类。","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@template flutter.widgets.Scrollbar.child} 树中此小部件下方的小部件。"},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.Scrollbar.controller} 用于实现滚动条拖动的 [ScrollController]。"},{"name":"thumbVisibility","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.thumbVisibility} 指示滚动条拇指应该可见,即使没有进行滚动。"},{"name":"shape","type":"OutlinedBorder?","desc":"滚动条拇指的 [OutlinedBorder]。"},{"name":"radius","type":"Radius?","desc":"滚动条拇指圆角矩形角的 [Radius]。"},{"name":"thickness","type":"double?","desc":"滚动条在可滚动交叉轴上的厚度。"},{"name":"thumbColor","type":"Color?","desc":"滚动条拇指的颜色。"},{"name":"minThumbLength","type":"double","required":true,"desc":"当总可滚动范围很大、当前可见视口很小且视口未过度滚动时,滚动条拇指可以缩小到的首选最小大小。"},{"name":"minOverscrollLength","type":"double?","desc":"当视口过度滚动时,滚动条拇指可以缩小到的首选最小大小。"},{"name":"trackVisibility","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.trackVisibility} 指示滚动条轨道应该可见。"},{"name":"trackRadius","type":"Radius?","desc":"滚动条轨道圆角矩形角的 [Radius]。"},{"name":"trackColor","type":"Color?","desc":"滚动条轨道的颜色。"},{"name":"trackBorderColor","type":"Color?","desc":"滚动条轨道边框的颜色。"},{"name":"fadeDuration","type":"Duration","required":true,"desc":"淡入淡出动画的 [Duration]。"},{"name":"timeToFade","type":"Duration","required":true,"desc":"淡入淡出动画开始前的时间 [Duration]。"},{"name":"pressDuration","type":"Duration","required":true,"desc":"长按将触发滚动条拇指拖动手势的时间 [Duration]。"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@template flutter.widgets.Scrollbar.notificationPredicate} 指定 [ScrollNotification] 是否应由此小部件处理的检查。"},{"name":"interactive","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.interactive} 滚动条是否应该是交互式的并响应拇指拖动或轨道区域点击。"},{"name":"scrollbarOrientation","type":"ScrollbarOrientation?","desc":"{@macro flutter.widgets.Scrollbar.scrollbarOrientation}"},{"name":"mainAxisMargin","type":"double","required":true,"desc":"滚动条拇指的开始或结束到视口最近边缘的距离(以逻辑像素为单位)。它影响可用绘制区域的数量。"},{"name":"crossAxisMargin","type":"double","required":true,"desc":"滚动条拇指侧面到最近交叉轴边缘的距离(以逻辑像素为单位)。"},{"name":"padding","type":"EdgeInsets?","desc":"滚动条拇指和轨道应填充的插入。"}],"id":482,"localName":"RawScrollbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawView/RawView_en-US.json b/modules/widget_system/widgets/doc/widgets/RawView/RawView_en-US.json deleted file mode 100644 index 8cfda5433..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawView/RawView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawView","path":"/src/widgets/view.dart","parents":["StatelessWidget","Widget"],"desc":" The lower level workhorse widget for [View] that bootstraps a render tree for a view.","fields":[{"name":"view","type":"FlutterView","required":true,"desc":"The [FlutterView] into which [child] is drawn."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree, which will be drawn into the [view]."}],"id":483,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawView/RawView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawView/RawView_zh-CN.json deleted file mode 100644 index b2630ef6b..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawView/RawView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawView","path":"/src/widgets/view.dart","parents":["StatelessWidget","Widget"],"desc":"为视图引导渲染树的 [View] 的较低级别工作小部件。","fields":[{"name":"view","type":"FlutterView","required":true,"desc":"绘制 [child] 的 [FlutterView]。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件,将绘制到 [view] 中。"}],"id":483,"localName":"RawView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_en-US.json b/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_en-US.json deleted file mode 100644 index 1d7c1ba2b..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawWebImage","path":"/src/widgets/_web_image_web.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget which displays and lays out an underlying HTML element in a platform view.","fields":[{"name":"image","type":"WebImageInfo","required":true,"desc":"The underlying HTML element to be displayed."},{"name":"debugImageLabel","type":"String?","desc":"A debug label explaining the image."},{"name":"width","type":"double?","desc":"The requested width for this widget."},{"name":"height","type":"double?","desc":"The requested height for this widget."},{"name":"fit","type":"BoxFit?","desc":"How the HTML element should be inscribed in the box constraining it."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How the image should be aligned in the box constraining it."},{"name":"matchTextDirection","type":"bool","required":true,"desc":"Whether or not the alignment of the image should match the text direction."}],"id":484,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_zh-CN.json deleted file mode 100644 index 9b256dd07..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawWebImage","path":"/src/widgets/_web_image_web.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在平台视图中显示和布局底层 HTML 元素的小部件。","fields":[{"name":"image","type":"WebImageInfo","required":true,"desc":"要显示的底层 HTML 元素。"},{"name":"debugImageLabel","type":"String?","desc":"解释图像的调试标签。"},{"name":"width","type":"double?","desc":"此小部件的请求宽度。"},{"name":"height","type":"double?","desc":"此小部件的请求高度。"},{"name":"fit","type":"BoxFit?","desc":"HTML 元素应如何刻入约束它的框中。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"图像应如何在约束它的框中对齐。"},{"name":"matchTextDirection","type":"bool","required":true,"desc":"图像的对齐是否应与文本方向匹配。"}],"id":484,"localName":"RawWebImage","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_en-US.json deleted file mode 100644 index 2f13cb152..000000000 --- a/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RefreshIndicator","path":"/src/material/refresh_indicator.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that supports the Material \"swipe to refresh\" idiom.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"displacement","type":"double","required":true,"desc":"The distance from the child's top or bottom [edgeOffset] where the refresh indicator will settle. During the drag that exposes the refresh indicator, its actual displacement may significantly exceed this value."},{"name":"edgeOffset","type":"double","required":true,"desc":"The offset where [RefreshProgressIndicator] starts to appear on drag start."},{"name":"onRefresh","type":"RefreshCallback","required":true,"desc":"A function that's called when the user has dragged the refresh indicator far enough to demonstrate that they want the app to refresh. The returned [Future] must complete when the refresh operation is finished."},{"name":"onStatusChange","type":"ValueChanged?","desc":"Called to get the current status of the [RefreshIndicator] to update the UI as needed. This is an optional parameter, used to fine tune app cases."},{"name":"color","type":"Color?","desc":"The progress indicator's foreground color. The current theme's [ColorScheme.primary] by default."},{"name":"backgroundColor","type":"Color?","desc":"The progress indicator's background color. The current theme's [ThemeData.canvasColor] by default."},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"A check that specifies whether a [ScrollNotification] should be handled by this widget."},{"name":"semanticsLabel","type":"String?","desc":"{@macro flutter.progress_indicator.ProgressIndicator.semanticsLabel}"},{"name":"semanticsValue","type":"String?","desc":"{@macro flutter.progress_indicator.ProgressIndicator.semanticsValue}"},{"name":"strokeWidth","type":"double","required":true,"desc":"Defines [strokeWidth] for `RefreshIndicator`."},{"name":"triggerMode","type":"RefreshIndicatorTriggerMode","required":true,"desc":"Defines how this [RefreshIndicator] can be triggered when users overscroll."},{"name":"elevation","type":"double","required":true,"desc":"Defines the elevation of the underlying [RefreshIndicator]."}],"id":49,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RefreshIndicator","desc":["【child】 : Child (scrollable) 【Widget】","【displacement】 : Indicator floating height 【double】","【color】 : Indicator color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_zh-CN.json deleted file mode 100644 index 4bc3bbf60..000000000 --- a/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RefreshIndicator","path":"/src/material/refresh_indicator.dart","parents":["StatefulWidget","Widget"],"desc":"支持 Material 滑动刷新习语的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"displacement","type":"double","required":true,"desc":"从子项的顶部或底部 [edgeOffset] 到刷新指示器将停留的距离。在暴露刷新指示器的拖动过程中,其实际位移可能会显著超过此值。"},{"name":"edgeOffset","type":"double","required":true,"desc":"[RefreshProgressIndicator] 在拖动开始时开始出现的偏移。"},{"name":"onRefresh","type":"RefreshCallback","required":true,"desc":"当用户拖动刷新指示器足够远以表明他们希望应用程序刷新时调用的函数。返回的 [Future] 必须在刷新操作完成时完成。"},{"name":"onStatusChange","type":"ValueChanged?","desc":"调用以获取 [RefreshIndicator] 的当前状态以根据需要更新 UI。这是一个可选参数,用于微调应用程序案例。"},{"name":"color","type":"Color?","desc":"进度指示器的前景色。默认为当前主题的 [ColorScheme.primary]。"},{"name":"backgroundColor","type":"Color?","desc":"进度指示器的背景色。默认为当前主题的 [ThemeData.canvasColor]。"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"指定 [ScrollNotification] 是否应由此小部件处理的检查。"},{"name":"semanticsLabel","type":"String?","desc":"{@macro flutter.progress_indicator.ProgressIndicator.semanticsLabel}"},{"name":"semanticsValue","type":"String?","desc":"{@macro flutter.progress_indicator.ProgressIndicator.semanticsValue}"},{"name":"strokeWidth","type":"double","required":true,"desc":"为 `RefreshIndicator` 定义 [strokeWidth]。"},{"name":"triggerMode","type":"RefreshIndicatorTriggerMode","required":true,"desc":"定义当用户过度滚动时如何触发此 [RefreshIndicator]。"},{"name":"elevation","type":"double","required":true,"desc":"定义底层 [RefreshIndicator] 的高度。"}],"id":49,"localName":"刷新指示器","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RefreshIndicator基本使用","desc":["【child】 : 孩子(可滑动) 【Widget】","【displacement】 : 指示器悬浮高度 【double】","【color】 : 指示器颜色 【Color】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_en-US.json deleted file mode 100644 index 85aae322e..000000000 --- a/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RefreshProgressIndicator","path":"/src/material/progress_indicator.dart","parents":["CircularProgressIndicator","ProgressIndicator","StatefulWidget","Widget"],"desc":" An indicator for the progress of refreshing the contents of a widget.","fields":[{"name":"elevation","type":"double","required":true,"desc":"{@macro flutter.material.material.elevation}"},{"name":"indicatorMargin","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the whole indicator. It accommodates the [elevation] of the indicator."},{"name":"indicatorPadding","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the inner refresh indicator."}],"id":485,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_zh-CN.json deleted file mode 100644 index 8dd285c9f..000000000 --- a/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RefreshProgressIndicator","path":"/src/material/progress_indicator.dart","parents":["CircularProgressIndicator","ProgressIndicator","StatefulWidget","Widget"],"desc":"刷新小部件内容进度的指示器。","fields":[{"name":"elevation","type":"double","required":true,"desc":"{@macro flutter.material.material.elevation}"},{"name":"indicatorMargin","type":"EdgeInsetsGeometry","required":true,"desc":"插入整个指示器的空间量。它适应指示器的 [elevation]。"},{"name":"indicatorPadding","type":"EdgeInsetsGeometry","required":true,"desc":"插入内部刷新指示器的空间量。"}],"id":485,"localName":"RefreshProgressIndicator","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_en-US.json deleted file mode 100644 index 7312f981d..000000000 --- a/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RelativePositionedTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Positioned] which transitions the child's position based on the value of [rect] relative to a bounding box with the specified [size].","fields":[{"name":"size","type":"Size","required":true,"desc":"The [Positioned] widget's offsets are relative to a box of this size whose origin is 0,0."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":115,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RelativePositionedTransition","desc":["【child】: Child component 【Widget】","【size】: Left and top offset 【Size】","【rect】: Animation 【Animation】"," PositionedTransition component only works within a Stack"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_zh-CN.json deleted file mode 100644 index 363550b5a..000000000 --- a/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RelativePositionedTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"[Positioned] 的动画版本,根据相对于具有指定 [size] 的边界框的 [rect] 值转换子项的位置。","fields":[{"name":"size","type":"Size","required":true,"desc":"[Positioned] 小部件的偏移相对于原点为 0,0 的此大小的框。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":115,"localName":"矩形位置变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RelativePositionedTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【size】 : 左和上的偏移量 【Size】","【rect】 : 动画 【Animation】"," PositionedTransition组件只能在Stack内起作用"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_en-US.json b/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_en-US.json deleted file mode 100644 index 961a73030..000000000 --- a/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RenderObjectToWidgetAdapter","path":"/src/widgets/adapter.dart","parents":["RenderObjectWidget","Widget"],"desc":" A bridge from a [RenderObject] to an [Element] tree.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"container","type":"RenderObjectWithChildMixin","required":true,"desc":"The [RenderObject] that is the parent of the [Element] created by this widget."},{"name":"debugShortDescription","type":"String?","desc":"A short description of this widget used by debugging aids."}],"id":289,"lever":1,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to RenderObjectToWidgetAdapter","desc":["【container】 : Render object 【RenderObjectWithChildMixin】","【child】 : Child component 【Widget】","【debugShortDescription】 : Debugging introduction 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_zh-CN.json deleted file mode 100644 index 09c00729e..000000000 --- a/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RenderObjectToWidgetAdapter","path":"/src/widgets/adapter.dart","parents":["RenderObjectWidget","Widget"],"desc":"从 [RenderObject] 到 [Element] 树的桥梁。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"container","type":"RenderObjectWithChildMixin","required":true,"desc":"作为此小部件创建的 [Element] 的父级的 [RenderObject]。"},{"name":"debugShortDescription","type":"String?","desc":"调试辅助工具使用的此小部件的简短描述。"}],"id":289,"localName":"根组件","lever":1,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RenderObjectToWidgetAdapter 介绍","desc":["【container】 : 渲染对象 【RenderObjectWithChildMixin】","【child】 : 子组件 【Widget】","【debugShortDescription】 : 调试简介 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_en-US.json deleted file mode 100644 index 376cd5013..000000000 --- a/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":" [RenderObjectWidget]s provide the configuration for [RenderObjectElement]s, which wrap [RenderObject]s, which provide the actual rendering of the application.","fields":[],"id":486,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_zh-CN.json deleted file mode 100644 index b5eeaf5ce..000000000 --- a/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":"[RenderObjectWidget] 为 [RenderObjectElement] 提供配置,后者包装 [RenderObject],提供应用程序的实际渲染。","fields":[],"id":486,"localName":"RenderObjectWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_en-US.json b/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_en-US.json deleted file mode 100644 index c1fc3b3b6..000000000 --- a/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ReorderableDelayedDragStartListener","path":"/src/widgets/reorderable_list.dart","parents":["ReorderableDragStartListener","StatelessWidget","Widget"],"desc":" A wrapper widget that will recognize the start of a drag operation by looking for a long press event. Once it is recognized, it will start a drag operation on the wrapped item in the reorderable list.","fields":[],"id":487,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_zh-CN.json deleted file mode 100644 index 6f1b74208..000000000 --- a/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ReorderableDelayedDragStartListener","path":"/src/widgets/reorderable_list.dart","parents":["ReorderableDragStartListener","StatelessWidget","Widget"],"desc":"通过寻找长按事件来识别拖动操作开始的包装器小部件。一旦识别,它将在可重新排序列表中的包装项目上开始拖动操作。","fields":[],"id":487,"localName":"ReorderableDelayedDragStartListener","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_en-US.json b/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_en-US.json deleted file mode 100644 index 704516393..000000000 --- a/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ReorderableDragStartListener","path":"/src/widgets/reorderable_list.dart","parents":["StatelessWidget","Widget"],"desc":" A wrapper widget that will recognize the start of a drag on the wrapped widget by a [PointerDownEvent], and immediately initiate dragging the wrapped item to a new location in a reorderable list.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget for which the application would like to respond to a tap and drag gesture by starting a reordering drag on a reorderable list."},{"name":"index","type":"int","required":true,"desc":"The index of the associated item that will be dragged in the list."},{"name":"enabled","type":"bool","required":true,"desc":"Whether the [child] item can be dragged and moved in the list."}],"id":488,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_zh-CN.json deleted file mode 100644 index 48ed7dc42..000000000 --- a/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ReorderableDragStartListener","path":"/src/widgets/reorderable_list.dart","parents":["StatelessWidget","Widget"],"desc":"通过 [PointerDownEvent] 识别包装小部件上拖动开始的包装器小部件,并立即启动将包装项目拖动到可重新排序列表中新位置的操作。","fields":[{"name":"child","type":"Widget","required":true,"desc":"应用程序希望通过在可重新排序列表上开始重新排序拖动来响应点击和拖动手势的小部件。"},{"name":"index","type":"int","required":true,"desc":"将在列表中拖动的关联项目的索引。"},{"name":"enabled","type":"bool","required":true,"desc":"[child] 项目是否可以在列表中拖动和移动。"}],"id":488,"localName":"ReorderableDragStartListener","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_en-US.json b/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_en-US.json deleted file mode 100644 index 9fcaaafe7..000000000 --- a/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ReorderableList","path":"/src/widgets/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":" A scrolling container that allows the user to interactively reorder the list items.","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@template flutter.widgets.reorderable_list.itemBuilder} Called, as needed, to build list item widgets."},{"name":"itemCount","type":"int","required":true,"desc":"{@template flutter.widgets.reorderable_list.itemCount} The number of items in the list."},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@template flutter.widgets.reorderable_list.onReorder} A callback used by the list to report that a list item has been dragged to a new location in the list and the application should update the order of the items. {@endtemplate}"},{"name":"onReorderStart","type":"void Function(int index)?","desc":"{@template flutter.widgets.reorderable_list.onReorderStart} A callback that is called when an item drag has started."},{"name":"onReorderEnd","type":"void Function(int index)?","desc":"{@template flutter.widgets.reorderable_list.onReorderEnd} A callback that is called when the dragged item is dropped."},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@template flutter.widgets.reorderable_list.proxyDecorator} A callback that allows the app to add an animated decoration around an item when it is being dragged. {@endtemplate}"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"{@template flutter.widgets.reorderable_list.padding} The amount of space by which to inset the list contents."},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.reverse}"},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"physics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.scroll_view.physics}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.shrinkWrap}"},{"name":"anchor","type":"double","required":true,"desc":"{@macro flutter.widgets.scroll_view.anchor}"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double?","desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@template flutter.widgets.reorderable_list.dragBoundaryProvider} A callback used to provide drag boundaries during drag-and-drop reordering."}],"id":489,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_zh-CN.json deleted file mode 100644 index 54cdad7cb..000000000 --- a/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ReorderableList","path":"/src/widgets/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":"允许用户交互式重新排序列表项的滚动容器。","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@template flutter.widgets.reorderable_list.itemBuilder} 根据需要调用以构建列表项小部件。"},{"name":"itemCount","type":"int","required":true,"desc":"{@template flutter.widgets.reorderable_list.itemCount} 列表中的项目数。"},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@template flutter.widgets.reorderable_list.onReorder} 列表用于报告列表项已拖动到列表中新位置且应用程序应更新项目顺序的回调。{@endtemplate}"},{"name":"onReorderStart","type":"void Function(int index)?","desc":"{@template flutter.widgets.reorderable_list.onReorderStart} 项目拖动开始时调用的回调。"},{"name":"onReorderEnd","type":"void Function(int index)?","desc":"{@template flutter.widgets.reorderable_list.onReorderEnd} 拖动的项目被放下时调用的回调。"},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@template flutter.widgets.reorderable_list.proxyDecorator} 允许应用程序在拖动项目时在其周围添加动画装饰的回调。{@endtemplate}"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"{@template flutter.widgets.reorderable_list.padding} 插入列表内容的空间量。"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.reverse}"},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"physics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.scroll_view.physics}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.shrinkWrap}"},{"name":"anchor","type":"double","required":true,"desc":"{@macro flutter.widgets.scroll_view.anchor}"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double?","desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@template flutter.widgets.reorderable_list.dragBoundaryProvider} 在拖放重新排序期间用于提供拖动边界的回调。"}],"id":489,"localName":"ReorderableList","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_en-US.json b/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_en-US.json deleted file mode 100644 index 444aa6f8b..000000000 --- a/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ReorderableListView","path":"/src/material/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":" A list whose items the user can interactively reorder by dragging.","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemBuilder}"},{"name":"itemCount","type":"int","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemCount}"},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@macro flutter.widgets.reorderable_list.onReorder}"},{"name":"onReorderStart","type":"void Function(int index)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderStart}"},{"name":"onReorderEnd","type":"void Function(int index)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderEnd}"},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@macro flutter.widgets.reorderable_list.proxyDecorator}"},{"name":"buildDefaultDragHandles","type":"bool","required":true,"desc":"If true: on desktop platforms, a drag handle is stacked over the center of each item's trailing edge; on mobile platforms, a long press anywhere on the item starts a drag."},{"name":"padding","type":"EdgeInsets?","desc":"{@macro flutter.widgets.reorderable_list.padding}"},{"name":"header","type":"Widget?","desc":"A non-reorderable header item to show before the items of the list."},{"name":"footer","type":"Widget?","desc":"A non-reorderable footer item to show after the items of the list."},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.reverse}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary} Defaults to true when [scrollDirection] is [Axis.vertical] and [scrollController] is null."},{"name":"physics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.scroll_view.physics}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.shrinkWrap}"},{"name":"anchor","type":"double","required":true,"desc":"{@macro flutter.widgets.scroll_view.anchor}"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double?","desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@macro flutter.widgets.reorderable_list.dragBoundaryProvider}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the drag handle."}],"id":177,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ReorderableListView","desc":["【children】 : List of child components 【List】","【header】 : Header component 【Widget】","【padding】 : Padding 【EdgeInsets】","【onReorder】 : Callback when reordering 【ReorderCallback】"]},{"file":"node2_direction.dart","name":"Scroll Direction of ReorderableListView","desc":["【scrollDirection】 : Scroll direction 【Axis】","【reverse】 : Whether to reverse 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_zh-CN.json deleted file mode 100644 index 32572fe84..000000000 --- a/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ReorderableListView","path":"/src/material/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":"用户可以通过拖动交互式重新排序其项目的列表。","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemBuilder}"},{"name":"itemCount","type":"int","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemCount}"},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@macro flutter.widgets.reorderable_list.onReorder}"},{"name":"onReorderStart","type":"void Function(int index)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderStart}"},{"name":"onReorderEnd","type":"void Function(int index)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderEnd}"},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@macro flutter.widgets.reorderable_list.proxyDecorator}"},{"name":"buildDefaultDragHandles","type":"bool","required":true,"desc":"如果为 true:在桌面平台上,拖动手柄堆叠在每个项目尾随边缘的中心;在移动平台上,在项目上的任何地方长按都会开始拖动。"},{"name":"padding","type":"EdgeInsets?","desc":"{@macro flutter.widgets.reorderable_list.padding}"},{"name":"header","type":"Widget?","desc":"在列表项目之前显示的不可重新排序的标题项目。"},{"name":"footer","type":"Widget?","desc":"在列表项目之后显示的不可重新排序的页脚项目。"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.reverse}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary} 当 [scrollDirection] 为 [Axis.vertical] 且 [scrollController] 为 null 时默认为 true。"},{"name":"physics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.scroll_view.physics}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.shrinkWrap}"},{"name":"anchor","type":"double","required":true,"desc":"{@macro flutter.widgets.scroll_view.anchor}"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double?","desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@macro flutter.widgets.reorderable_list.dragBoundaryProvider}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在拖动手柄上时的光标。"}],"id":177,"localName":"可重排序列表","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ReorderableListView基本使用","desc":["【children】 : 子组件列表 【List】","【header】 : 头部组件 【Widget】","【padding】 : 内边距 【EdgeInsets】","【onReorder】 : 调换时回调 【ReorderCallback】"]},{"file":"node2_direction.dart","name":"ReorderableListView滑动方向","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_en-US.json b/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_en-US.json deleted file mode 100644 index faab03734..000000000 --- a/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RepaintBoundary","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that creates a separate display list for its child.","fields":[],"id":264,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RepaintBoundary","desc":["【child】 : Child component 【Widget】","For example, in the above drawing view, even if shouldRepaint is false, the paint method will be continuously executed during scrolling. Using RepaintBoundary can avoid unnecessary drawing."]},{"file":"node2_save.dart","name":"Save Widget as Image","desc":["Through RenderRepaintBoundary, you can obtain the Image information of the child component, and then save the bytes as an image file."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_zh-CN.json deleted file mode 100644 index 99d80ef5e..000000000 --- a/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RepaintBoundary","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"为其子项创建单独显示列表的小部件。","fields":[],"id":264,"localName":"重绘边界","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RepaintBoundary基本使用","desc":["【child】 : 子组件 【Widget】","比如上面的绘制视图,即使shouldRepaint为false,在滑动中会也会不断执行paint方法,使用RepaintBoundary可以避免不必要的绘制。"]},{"file":"node2_save.dart","name":"保存Widget成为图片","desc":["通过RenderRepaintBoundary可以获取子组件的Image信息,从而获取字节保存为图片文件。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_en-US.json b/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_en-US.json deleted file mode 100644 index ade1e78e2..000000000 --- a/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RestorationScope","path":"/src/widgets/restoration.dart","parents":["StatefulWidget","Widget"],"desc":" Creates a new scope for restoration IDs used by descendant widgets to claim [RestorationBucket]s.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"restorationId","type":"String?","desc":"The restoration ID used by this widget to obtain a child bucket from the surrounding [RestorationScope]."}],"id":490,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_zh-CN.json deleted file mode 100644 index 96f7271f6..000000000 --- a/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RestorationScope","path":"/src/widgets/restoration.dart","parents":["StatefulWidget","Widget"],"desc":"为后代小部件用于声明 [RestorationBucket] 的恢复 ID 创建新范围。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"restorationId","type":"String?","desc":"此小部件用于从周围的 [RestorationScope] 获取子存储桶的恢复 ID。"}],"id":490,"localName":"RestorationScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RichText/RichText_en-US.json b/modules/widget_system/widgets/doc/widgets/RichText/RichText_en-US.json deleted file mode 100644 index 214927c08..000000000 --- a/modules/widget_system/widgets/doc/widgets/RichText/RichText_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RichText","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A paragraph of rich text.","fields":[{"name":"text","type":"InlineSpan","required":true,"desc":"The text to display in this widget."},{"name":"textAlign","type":"TextAlign","required":true,"desc":"How the text should be aligned horizontally."},{"name":"textDirection","type":"TextDirection?","desc":"The directionality of the text."},{"name":"softWrap","type":"bool","required":true,"desc":"Whether the text should break at soft line breaks."},{"name":"overflow","type":"TextOverflow","required":true,"desc":"How visual overflow should be handled."},{"name":"textScaler","type":"TextScaler","required":true,"desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"maxLines","type":"int?","desc":"An optional maximum number of lines for the text to span, wrapping if necessary. If the text exceeds the given number of lines, it will be truncated according to [overflow]."},{"name":"locale","type":"Locale?","desc":"Used to select a font when the same Unicode character can be rendered differently, depending on the locale."},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.painting.textPainter.strutStyle}"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"selectionRegistrar","type":"SelectionRegistrar?","desc":"The [SelectionRegistrar] this rich text is subscribed to."},{"name":"selectionColor","type":"Color?","desc":"The color to use when painting the selection."}],"id":101,"lever":5,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RichText","desc":["【text】: text 【TextSpan】"," Other properties are the same as Text, see it for details."]},{"file":"node2_widget.dart","name":"RichText Contains Other Components","desc":["Use WidgetSpan to carry ordinary components as the content of RichText"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RichText/RichText_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RichText/RichText_zh-CN.json deleted file mode 100644 index b0cead989..000000000 --- a/modules/widget_system/widgets/doc/widgets/RichText/RichText_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RichText","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"富文本段落。","fields":[{"name":"text","type":"InlineSpan","required":true,"desc":"在此小部件中显示的文本。"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"文本应如何水平对齐。"},{"name":"textDirection","type":"TextDirection?","desc":"文本的方向性。"},{"name":"softWrap","type":"bool","required":true,"desc":"文本是否应在软换行符处换行。"},{"name":"overflow","type":"TextOverflow","required":true,"desc":"应如何处理视觉溢出。"},{"name":"textScaler","type":"TextScaler","required":true,"desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"maxLines","type":"int?","desc":"文本跨越的可选最大行数,必要时换行。如果文本超过给定的行数,它将根据 [overflow] 被截断。"},{"name":"locale","type":"Locale?","desc":"当同一个 Unicode 字符可以根据区域设置以不同方式渲染时,用于选择字体。"},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.painting.textPainter.strutStyle}"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"selectionRegistrar","type":"SelectionRegistrar?","desc":"此富文本订阅的 [SelectionRegistrar]。"},{"name":"selectionColor","type":"Color?","desc":"绘制选择时使用的颜色。"}],"id":101,"localName":"富文本","lever":5,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RichText基本使用","desc":["【text】 : 文字 【TextSpan】"," 其他属性与Text相同,详见之。"]},{"file":"node2_widget.dart","name":"RichText包含其他组件","desc":["使用WidgetSpan来承载普通组件,作为RichText的内容"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_en-US.json b/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_en-US.json deleted file mode 100644 index 4191d9e0d..000000000 --- a/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RootRestorationScope","path":"/src/widgets/restoration.dart","parents":["StatefulWidget","Widget"],"desc":" Inserts a child bucket of [RestorationManager.rootBucket] into the widget tree and makes it available to descendants via [RestorationScope.of].","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"restorationId","type":"String?","desc":"The restoration ID used to identify the child bucket that this widget will insert into the tree."}],"id":491,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_zh-CN.json deleted file mode 100644 index 93df7a4da..000000000 --- a/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RootRestorationScope","path":"/src/widgets/restoration.dart","parents":["StatefulWidget","Widget"],"desc":"将 [RestorationManager.rootBucket] 的子存储桶插入小部件树并通过 [RestorationScope.of] 使其对后代可用。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"restorationId","type":"String?","desc":"用于标识此小部件将插入树中的子存储桶的恢复 ID。"}],"id":491,"localName":"RootRestorationScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_en-US.json deleted file mode 100644 index e14faac2b..000000000 --- a/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RootWidget","path":"/src/widgets/binding.dart","parents":["Widget"],"desc":" A widget for the root of the widget tree.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"debugShortDescription","type":"String?","desc":"A short description of this widget used by debugging aids."}],"id":492,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_zh-CN.json deleted file mode 100644 index 790462cdf..000000000 --- a/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RootWidget","path":"/src/widgets/binding.dart","parents":["Widget"],"desc":"小部件树根部的小部件。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"debugShortDescription","type":"String?","desc":"调试辅助工具使用的此小部件的简短描述。"}],"id":492,"localName":"RootWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_en-US.json deleted file mode 100644 index 5cca121c2..000000000 --- a/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RotatedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that rotates its child by a integral number of quarter turns.","fields":[{"name":"quarterTurns","type":"int","required":true,"desc":"The number of clockwise quarter turns the child should be rotated."}],"id":72,"lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RotatedBox","desc":["【child】 : Child widget 【Widget】","【quarterTurns】 : How many 90° to rotate 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_zh-CN.json deleted file mode 100644 index 23b977c91..000000000 --- a/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RotatedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项旋转整数个四分之一圈的小部件。","fields":[{"name":"quarterTurns","type":"int","required":true,"desc":"子项应顺时针旋转的四分之一圈数。"}],"id":72,"localName":"旋转盒","lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RotatedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【quarterTurns】 : 旋转多少个90° 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_en-US.json deleted file mode 100644 index 713ebe4f2..000000000 --- a/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RotationTransition","path":"/src/widgets/transitions.dart","parents":["MatrixTransition","AnimatedWidget","StatefulWidget","Widget"],"desc":" Animates the rotation of a widget.","fields":[],"id":90,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RotationTransition","desc":["【child】 : Child component 【Widget】","【turns】 : Whether to disappear 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_zh-CN.json deleted file mode 100644 index 9bfe246f5..000000000 --- a/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RotationTransition","path":"/src/widgets/transitions.dart","parents":["MatrixTransition","AnimatedWidget","StatefulWidget","Widget"],"desc":"对小部件的旋转进行动画处理。","fields":[],"id":90,"localName":"旋转变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RotationTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【turns】 : 是否消失 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Router/Router_en-US.json b/modules/widget_system/widgets/doc/widgets/Router/Router_en-US.json deleted file mode 100644 index 9207e5896..000000000 --- a/modules/widget_system/widgets/doc/widgets/Router/Router_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Router","path":"/src/widgets/router.dart","parents":["StatefulWidget","Widget"],"desc":" The dispatcher for opening and closing pages of an application.","fields":[{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"The route information provider for the router."},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"The route information parser for the router."},{"name":"routerDelegate","type":"RouterDelegate","required":true,"desc":"The router delegate for the router."},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"The back button dispatcher for the router."},{"name":"restorationScopeId","type":"String?","desc":"Restoration ID to save and restore the state of the [Router]."}],"id":493,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Router/Router_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Router/Router_zh-CN.json deleted file mode 100644 index 40e0aeb9c..000000000 --- a/modules/widget_system/widgets/doc/widgets/Router/Router_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Router","path":"/src/widgets/router.dart","parents":["StatefulWidget","Widget"],"desc":"应用程序页面打开和关闭的调度器。","fields":[{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"路由器的路由信息提供者。"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"路由器的路由信息解析器。"},{"name":"routerDelegate","type":"RouterDelegate","required":true,"desc":"路由器的路由器委托。"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"路由器的返回按钮调度器。"},{"name":"restorationScopeId","type":"String?","desc":"保存和恢复 [Router] 状态的恢复 ID。"}],"id":493,"localName":"Router","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Row/Row_en-US.json b/modules/widget_system/widgets/doc/widgets/Row/Row_en-US.json deleted file mode 100644 index 86512c334..000000000 --- a/modules/widget_system/widgets/doc/widgets/Row/Row_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Row","path":"/src/widgets/basic.dart","parents":["Flex","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that displays its children in a horizontal array.","fields":[],"id":95,"lever":4,"family":3,"linkIds":[94,96],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Row","desc":["【children】: Component list 【List】","【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】","【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】","【textBaseline】: Text baseline 【TextBaseline】","【verticalDirection】: Vertical direction 【VerticalDirection】","【mainAxisSize】: Main axis size 【MainAxisSize】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Row/Row_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Row/Row_zh-CN.json deleted file mode 100644 index e88f056d4..000000000 --- a/modules/widget_system/widgets/doc/widgets/Row/Row_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Row","path":"/src/widgets/basic.dart","parents":["Flex","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在水平数组中显示其子项的小部件。","fields":[],"id":95,"localName":"行布局","lever":4,"family":3,"linkIds":[94,96],"nodes":[{"file":"node1_base.dart","name":"Row基本使用","desc":["【children】 : 组件列表 【List】","【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】","【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】","【textBaseline】 : 文字基线 【TextBaseline】","【verticalDirection】 : 竖直方向 【VerticalDirection】","【mainAxisSize】 : 主轴尺寸 【MainAxisSize】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_en-US.json b/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_en-US.json deleted file mode 100644 index e0448e10b..000000000 --- a/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SafeArea","path":"/src/widgets/safe_area.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that insets its child with sufficient padding to avoid intrusions by the operating system.","fields":[{"name":"left","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the left."},{"name":"top","type":"bool","required":true,"desc":"Whether to avoid system intrusions at the top of the screen, typically the system status bar."},{"name":"right","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the right."},{"name":"bottom","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the bottom side of the screen."},{"name":"minimum","type":"EdgeInsets","required":true,"desc":"This minimum padding to apply."},{"name":"maintainBottomViewPadding","type":"bool","required":true,"desc":"Specifies whether the [SafeArea] should maintain the bottom [MediaQueryData.viewPadding] instead of the bottom [MediaQueryData.padding], defaults to false."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":207,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SafeArea Usage Test","desc":["【left】: Whether to enable the left side 【bool】","【top】: Whether to enable the top 【bool】","【bottom】: Whether to enable the bottom 【bool】","【right】: Whether to enable the right side 【bool】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_zh-CN.json deleted file mode 100644 index 0367dfe95..000000000 --- a/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SafeArea","path":"/src/widgets/safe_area.dart","parents":["StatelessWidget","Widget"],"desc":"用足够的内边距插入其子项以避免操作系统入侵的小部件。","fields":[{"name":"left","type":"bool","required":true,"desc":"是否避免左侧的系统入侵。"},{"name":"top","type":"bool","required":true,"desc":"是否避免屏幕顶部的系统入侵,通常是系统状态栏。"},{"name":"right","type":"bool","required":true,"desc":"是否避免右侧的系统入侵。"},{"name":"bottom","type":"bool","required":true,"desc":"是否避免屏幕底部的系统入侵。"},{"name":"minimum","type":"EdgeInsets","required":true,"desc":"要应用的最小内边距。"},{"name":"maintainBottomViewPadding","type":"bool","required":true,"desc":"指定 [SafeArea] 是否应维护底部 [MediaQueryData.viewPadding] 而不是底部 [MediaQueryData.padding],默认为 false。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":207,"localName":"安全区","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SafeArea 使用测试","desc":["【left】 : 左侧是否启用 【bool】","【top】 : 上方是否启用 【bool】","【bottom】 : 下方是否启用 【bool】","【right】 : 右侧是否启用 【bool】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_en-US.json b/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_en-US.json deleted file mode 100644 index 2fc3afbf7..000000000 --- a/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Scaffold","path":"/src/material/scaffold.dart","parents":["StatefulWidget","Widget"],"desc":" Implements the basic Material Design visual layout structure.","fields":[{"name":"extendBody","type":"bool","required":true,"desc":"If true, and [bottomNavigationBar] or [persistentFooterButtons] is specified, then the [body] extends to the bottom of the Scaffold, instead of only extending to the top of the [bottomNavigationBar] or the [persistentFooterButtons]."},{"name":"extendBodyBehindAppBar","type":"bool","required":true,"desc":"If true, and an [appBar] is specified, then the height of the [body] is extended to include the height of the app bar and the top of the body is aligned with the top of the app bar."},{"name":"appBar","type":"PreferredSizeWidget?","desc":"An app bar to display at the top of the scaffold."},{"name":"body","type":"Widget?","desc":"The primary content of the scaffold."},{"name":"floatingActionButton","type":"Widget?","desc":"A button displayed floating above [body], in the bottom right corner."},{"name":"floatingActionButtonLocation","type":"FloatingActionButtonLocation?","desc":"Responsible for determining where the [floatingActionButton] should go."},{"name":"floatingActionButtonAnimator","type":"FloatingActionButtonAnimator?","desc":"Animator to move the [floatingActionButton] to a new [floatingActionButtonLocation]."},{"name":"persistentFooterButtons","type":"List?","desc":"A set of buttons that are displayed at the bottom of the scaffold."},{"name":"persistentFooterAlignment","type":"AlignmentDirectional","required":true,"desc":"The alignment of the [persistentFooterButtons] inside the [OverflowBar]."},{"name":"drawer","type":"Widget?","desc":"A panel displayed to the side of the [body], often hidden on mobile devices. Swipes in from either left-to-right ([TextDirection.ltr]) or right-to-left ([TextDirection.rtl])"},{"name":"onDrawerChanged","type":"DrawerCallback?","desc":"Optional callback that is called when the [Scaffold.drawer] is opened or closed."},{"name":"endDrawer","type":"Widget?","desc":"A panel displayed to the side of the [body], often hidden on mobile devices. Swipes in from right-to-left ([TextDirection.ltr]) or left-to-right ([TextDirection.rtl])"},{"name":"onEndDrawerChanged","type":"DrawerCallback?","desc":"Optional callback that is called when the [Scaffold.endDrawer] is opened or closed."},{"name":"drawerScrimColor","type":"Color?","desc":"The color to use for the scrim that obscures primary content while a drawer is open."},{"name":"backgroundColor","type":"Color?","desc":"The color of the [Material] widget that underlies the entire Scaffold."},{"name":"bottomNavigationBar","type":"Widget?","desc":"A bottom navigation bar to display at the bottom of the scaffold."},{"name":"bottomSheet","type":"Widget?","desc":"The persistent bottom sheet to display."},{"name":"resizeToAvoidBottomInset","type":"bool?","desc":"If true the [body] and the scaffold's floating widgets should size themselves to avoid the onscreen keyboard whose height is defined by the ambient [MediaQuery]'s [MediaQueryData.viewInsets] `bottom` property."},{"name":"primary","type":"bool","required":true,"desc":"Whether this scaffold is being displayed at the top of the screen."},{"name":"drawerDragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.material.DrawerController.dragStartBehavior}"},{"name":"drawerEdgeDragWidth","type":"double?","desc":"The width of the area within which a horizontal swipe will open the drawer."},{"name":"drawerEnableOpenDragGesture","type":"bool","required":true,"desc":"Determines if the [Scaffold.drawer] can be opened with a drag gesture on mobile."},{"name":"endDrawerEnableOpenDragGesture","type":"bool","required":true,"desc":"Determines if the [Scaffold.endDrawer] can be opened with a gesture on mobile."},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the [Scaffold]."}],"id":64,"lever":4,"family":1,"linkIds":[57,60,61],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Scaffold","desc":["【appBar】: Header component 【PreferredSizeWidget】","【bottomNavigationBar】: Bottom component 【Widget】","【drawer】: Left sliding component 【Widget】","【endDrawer】: Right sliding component 【Widget】","【body】: Content component 【Widget】","【backgroundColor】: Background color 【Color】","【floatingActionButton】: Floating button 【Widget】","【floatingActionButtonLocation】: Floating button position 【FloatingActionButtonLocation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_zh-CN.json deleted file mode 100644 index 5f1cf2e19..000000000 --- a/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Scaffold","path":"/src/material/scaffold.dart","parents":["StatefulWidget","Widget"],"desc":"实现基本的 Material Design 视觉布局结构。","fields":[{"name":"extendBody","type":"bool","required":true,"desc":"如果为 true,并且指定了 [bottomNavigationBar] 或 [persistentFooterButtons],则 [body] 扩展到 Scaffold 的底部,而不是仅扩展到 [bottomNavigationBar] 或 [persistentFooterButtons] 的顶部。"},{"name":"extendBodyBehindAppBar","type":"bool","required":true,"desc":"如果为 true,并且指定了 [appBar],则 [body] 的高度扩展为包括应用栏的高度,并且主体的顶部与应用栏的顶部对齐。"},{"name":"appBar","type":"PreferredSizeWidget?","desc":"在脚手架顶部显示的应用栏。"},{"name":"body","type":"Widget?","desc":"脚手架的主要内容。"},{"name":"floatingActionButton","type":"Widget?","desc":"显示在 [body] 上方、右下角的浮动按钮。"},{"name":"floatingActionButtonLocation","type":"FloatingActionButtonLocation?","desc":"负责确定 [floatingActionButton] 应该放在哪里。"},{"name":"floatingActionButtonAnimator","type":"FloatingActionButtonAnimator?","desc":"将 [floatingActionButton] 移动到新 [floatingActionButtonLocation] 的动画器。"},{"name":"persistentFooterButtons","type":"List?","desc":"显示在脚手架底部的一组按钮。"},{"name":"persistentFooterAlignment","type":"AlignmentDirectional","required":true,"desc":"[OverflowBar] 内 [persistentFooterButtons] 的对齐。"},{"name":"drawer","type":"Widget?","desc":"显示在 [body] 侧面的面板,通常在移动设备上隐藏。从左到右 ([TextDirection.ltr]) 或从右到左 ([TextDirection.rtl]) 滑入"},{"name":"onDrawerChanged","type":"DrawerCallback?","desc":"打开或关闭 [Scaffold.drawer] 时调用的可选回调。"},{"name":"endDrawer","type":"Widget?","desc":"显示在 [body] 侧面的面板,通常在移动设备上隐藏。从右到左 ([TextDirection.ltr]) 或从左到右 ([TextDirection.rtl]) 滑入"},{"name":"onEndDrawerChanged","type":"DrawerCallback?","desc":"打开或关闭 [Scaffold.endDrawer] 时调用的可选回调。"},{"name":"drawerScrimColor","type":"Color?","desc":"抽屉打开时用于遮挡主要内容的纱幕颜色。"},{"name":"backgroundColor","type":"Color?","desc":"整个 Scaffold 下方的 [Material] 小部件的颜色。"},{"name":"bottomNavigationBar","type":"Widget?","desc":"在脚手架底部显示的底部导航栏。"},{"name":"bottomSheet","type":"Widget?","desc":"要显示的持久底部表单。"},{"name":"resizeToAvoidBottomInset","type":"bool?","desc":"如果为 true,[body] 和脚手架的浮动小部件应调整自身大小以避免屏幕键盘,其高度由环境 [MediaQuery] 的 [MediaQueryData.viewInsets] `bottom` 属性定义。"},{"name":"primary","type":"bool","required":true,"desc":"此脚手架是否显示在屏幕顶部。"},{"name":"drawerDragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.material.DrawerController.dragStartBehavior}"},{"name":"drawerEdgeDragWidth","type":"double?","desc":"水平滑动将打开抽屉的区域宽度。"},{"name":"drawerEnableOpenDragGesture","type":"bool","required":true,"desc":"确定 [Scaffold.drawer] 是否可以在移动设备上通过拖动手势打开。"},{"name":"endDrawerEnableOpenDragGesture","type":"bool","required":true,"desc":"确定 [Scaffold.endDrawer] 是否可以在移动设备上通过手势打开。"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [Scaffold] 状态的恢复 ID。"}],"id":64,"localName":"脚手架","lever":4,"family":1,"linkIds":[57,60,61],"nodes":[{"file":"node1_base.dart","name":"Scaffold基本用法","desc":["【appBar】 : 头部组件 【PreferredSizeWidget】","【bottomNavigationBar】 : 底部组件 【Widget】","【drawer】 : 左侧滑组件 【Widget】","【endDrawer】 : 右侧滑组件 【Widget】","【body】 : 内容组件 【Widget】","【backgroundColor】 : 背景色 【Color】","【floatingActionButton】 : 浮动按钮 【Widget】","【floatingActionButtonLocation】 : 浮动按钮位置 【FloatingActionButtonLocation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_en-US.json b/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_en-US.json deleted file mode 100644 index 62521aa9f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScaffoldMessenger","path":"/src/material/scaffold.dart","parents":["StatefulWidget","Widget"],"desc":" Manages [SnackBar]s and [MaterialBanner]s for descendant [Scaffold]s.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":494,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_zh-CN.json deleted file mode 100644 index 039392450..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScaffoldMessenger","path":"/src/material/scaffold.dart","parents":["StatefulWidget","Widget"],"desc":"为后代 [Scaffold] 管理 [SnackBar] 和 [MaterialBanner]。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":494,"localName":"ScaffoldMessenger","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_en-US.json deleted file mode 100644 index 44d57296e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScaleTransition","path":"/src/widgets/transitions.dart","parents":["MatrixTransition","AnimatedWidget","StatefulWidget","Widget"],"desc":" Animates the scale of a transformed widget.","fields":[],"id":91,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ScaleTransition","desc":["【child】: Child component 【Widget】","【scale】: Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_zh-CN.json deleted file mode 100644 index 26a455ce3..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScaleTransition","path":"/src/widgets/transitions.dart","parents":["MatrixTransition","AnimatedWidget","StatefulWidget","Widget"],"desc":"对变换小部件的缩放进行动画处理。","fields":[],"id":91,"localName":"缩放变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ScaleTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【scale】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_en-US.json b/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_en-US.json deleted file mode 100644 index dcab68f0a..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScrollConfiguration","path":"/src/widgets/scroll_configuration.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Controls how [Scrollable] widgets behave in a subtree.","fields":[{"name":"behavior","type":"ScrollBehavior","required":true,"desc":"How [Scrollable] widgets that are descendants of [child] should behave."}],"id":180,"lever":3,"family":5,"linkIds":[162,163,164],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ScrollConfiguration","desc":["【child】: Child component 【Widget】","【behavior】: Scroll behavior 【ScrollBehavior】"," ScrollConfiguration can be used to remove the blue shadow of ListView"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_zh-CN.json deleted file mode 100644 index e6e004a46..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScrollConfiguration","path":"/src/widgets/scroll_configuration.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"控制子树中 [Scrollable] 小部件的行为方式。","fields":[{"name":"behavior","type":"ScrollBehavior","required":true,"desc":"作为 [child] 后代的 [Scrollable] 小部件应如何表现。"}],"id":180,"localName":"ios菜单按钮","lever":3,"family":5,"linkIds":[162,163,164],"nodes":[{"file":"node1_base.dart","name":"ScrollConfiguration基本使用","desc":["【child】 : 子组件 【Widget】","【behavior】 : 滑动行为 【ScrollBehavior】"," 可以使用ScrollConfiguration让ListView无蓝色阴影"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_en-US.json b/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_en-US.json deleted file mode 100644 index 98519c3ff..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScrollNotificationObserver","path":"/src/widgets/scroll_notification_observer.dart","parents":["StatefulWidget","Widget"],"desc":" Notifies its listeners when a descendant scrolls.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The subtree below this widget."}],"id":495,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_zh-CN.json deleted file mode 100644 index e951ec80f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScrollNotificationObserver","path":"/src/widgets/scroll_notification_observer.dart","parents":["StatefulWidget","Widget"],"desc":"当后代滚动时通知其监听器。","fields":[{"name":"child","type":"Widget","required":true,"desc":"此小部件下方的子树。"}],"id":495,"localName":"ScrollNotificationObserver","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_en-US.json deleted file mode 100644 index 57296d8e2..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScrollView","path":"/src/widgets/scroll_view.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":" A widget that combines a [Scrollable] and a [Viewport] to create an interactive scrolling pane of content in one dimension.","fields":[{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@template flutter.widgets.scroll_view.scrollDirection} The [Axis] along which the scroll view's offset increases."},{"name":"reverse","type":"bool","required":true,"desc":"{@template flutter.widgets.scroll_view.reverse} Whether the scroll view scrolls in the reading direction."},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.scroll_view.controller} An object that can be used to control the position to which this scroll view is scrolled."},{"name":"primary","type":"bool?","desc":"{@template flutter.widgets.scroll_view.primary} Whether this is the primary scroll view associated with the parent [PrimaryScrollController]."},{"name":"physics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.scroll_view.physics} How the scroll view should respond to user input."},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@template flutter.widgets.scroll_view.shrinkWrap} Whether the extent of the scroll view in the [scrollDirection] should be determined by the contents being viewed."},{"name":"center","type":"Key?","desc":"The first child in the [GrowthDirection.forward] growth direction."},{"name":"anchor","type":"double","required":true,"desc":"{@template flutter.widgets.scroll_view.anchor} The relative position of the zero scroll offset."},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"semanticChildCount","type":"int?","desc":"The number of children that will contribute semantic information."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@template flutter.widgets.scroll_view.keyboardDismissBehavior} The [ScrollViewKeyboardDismissBehavior] defines how this [ScrollView] will dismiss the keyboard automatically. {@endtemplate}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"}],"id":349,"lever":2,"family":0,"linkIds":[183,162,163,253,340],"nodes":[{"file":"node1_base.dart","name":"Introduction to ScrollView","desc":["【reverse】: Whether to reverse 【bool】","【scrollDirection】: Scroll direction 【Axis】","【cacheExtent】: Cache length 【double】","【dragStartBehavior】: Drag behavior 【DragStartBehavior】","【clipBehavior】: Clip behavior 【ClipBehavior】","【controller】: Controller 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_zh-CN.json deleted file mode 100644 index 2c76b54ce..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScrollView","path":"/src/widgets/scroll_view.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":"结合 [Scrollable] 和 [Viewport] 在一个维度上创建交互式滚动内容窗格的小部件。","fields":[{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@template flutter.widgets.scroll_view.scrollDirection} 滚动视图偏移增加的 [Axis]。"},{"name":"reverse","type":"bool","required":true,"desc":"{@template flutter.widgets.scroll_view.reverse} 滚动视图是否在阅读方向上滚动。"},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.scroll_view.controller} 可用于控制此滚动视图滚动到的位置的对象。"},{"name":"primary","type":"bool?","desc":"{@template flutter.widgets.scroll_view.primary} 这是否是与父 [PrimaryScrollController] 关联的主要滚动视图。"},{"name":"physics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.scroll_view.physics} 滚动视图应如何响应用户输入。"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@template flutter.widgets.scroll_view.shrinkWrap} 滚动视图在 [scrollDirection] 中的范围是否应由正在查看的内容确定。"},{"name":"center","type":"Key?","desc":"[GrowthDirection.forward] 增长方向中的第一个子项。"},{"name":"anchor","type":"double","required":true,"desc":"{@template flutter.widgets.scroll_view.anchor} 零滚动偏移的相对位置。"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"semanticChildCount","type":"int?","desc":"将贡献语义信息的子项数。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@template flutter.widgets.scroll_view.keyboardDismissBehavior} [ScrollViewKeyboardDismissBehavior] 定义此 [ScrollView] 如何自动关闭键盘。{@endtemplate}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"}],"id":349,"localName":"视滑动图","lever":2,"family":0,"linkIds":[183,162,163,253,340],"nodes":[{"file":"node1_base.dart","name":"ScrollView 介绍","desc":["【reverse】 : 是否反向 【bool】","【scrollDirection】 : 滑动方向 【Axis】","【cacheExtent】 : 缓存长 【double】","【dragStartBehavior】 : 拖动行为 【DragStartBehavior】","【clipBehavior】 : 裁剪行为 【ClipBehavior】","【controller】 : 控制器 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_en-US.json b/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_en-US.json deleted file mode 100644 index f40ba40f2..000000000 --- a/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Scrollable","path":"/src/widgets/scrollable.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that manages scrolling in one dimension and informs the [Viewport] through which the content is viewed.","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@template flutter.widgets.Scrollable.axisDirection} The direction in which this widget scrolls."},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.Scrollable.controller} An object that can be used to control the position to which this widget is scrolled."},{"name":"physics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.Scrollable.physics} How the widgets should respond to user input."},{"name":"viewportBuilder","type":"ViewportBuilder","required":true,"desc":"Builds the viewport through which the scrollable content is displayed."},{"name":"incrementCalculator","type":"ScrollIncrementCalculator?","desc":"{@template flutter.widgets.Scrollable.incrementCalculator} An optional function that will be called to calculate the distance to scroll when the scrollable is asked to scroll via the keyboard using a [ScrollAction]."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"{@template flutter.widgets.scrollable.excludeFromSemantics} Whether the scroll actions introduced by this [Scrollable] are exposed in the semantics tree."},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@template flutter.widgets.scrollable.hitTestBehavior} Defines the behavior of gesture detector used in this [Scrollable]."},{"name":"semanticChildCount","type":"int?","desc":"The number of children that will contribute semantic information."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.widgets.scrollable.dragStartBehavior} Determines the way that drag start behavior is handled."},{"name":"restorationId","type":"String?","desc":"{@template flutter.widgets.scrollable.restorationId} Restoration ID to save and restore the scroll offset of the scrollable."},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.widgets.scrollable.scrollBehavior} A [ScrollBehavior] that will be applied to this widget individually."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":253,"lever":4,"family":1,"linkIds":[340,349],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Scrollable","desc":["【viewportBuilder】: Viewport Constructor 【ViewportBuilder】","【axisDirection】: Scroll Direction 【AxisDirection】","【controller】: Scroll Controller 【ScrollController】","【dragStartBehavior】: Drag Behavior 【DragStartBehavior】","【physics】: Scroll Physics 【ScrollPhysics】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_zh-CN.json deleted file mode 100644 index 86205f8f1..000000000 --- a/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Scrollable","path":"/src/widgets/scrollable.dart","parents":["StatefulWidget","Widget"],"desc":"在一个维度上管理滚动并通过 [Viewport] 通知查看内容的小部件。","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@template flutter.widgets.Scrollable.axisDirection} 此小部件滚动的方向。"},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.Scrollable.controller} 可用于控制此小部件滚动到的位置的对象。"},{"name":"physics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.Scrollable.physics} 小部件应如何响应用户输入。"},{"name":"viewportBuilder","type":"ViewportBuilder","required":true,"desc":"构建显示可滚动内容的视口。"},{"name":"incrementCalculator","type":"ScrollIncrementCalculator?","desc":"{@template flutter.widgets.Scrollable.incrementCalculator} 当要求可滚动通过使用 [ScrollAction] 的键盘滚动时,将调用以计算滚动距离的可选函数。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"{@template flutter.widgets.scrollable.excludeFromSemantics} 此 [Scrollable] 引入的滚动操作是否在语义树中公开。"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@template flutter.widgets.scrollable.hitTestBehavior} 定义此 [Scrollable] 中使用的手势检测器的行为。"},{"name":"semanticChildCount","type":"int?","desc":"将贡献语义信息的子项数。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.widgets.scrollable.dragStartBehavior} 确定处理拖动开始行为的方式。"},{"name":"restorationId","type":"String?","desc":"{@template flutter.widgets.scrollable.restorationId} 保存和恢复可滚动滚动偏移的恢复 ID。"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.widgets.scrollable.scrollBehavior} 将单独应用于此小部件的 [ScrollBehavior]。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":253,"localName":"可滑动组件","lever":4,"family":1,"linkIds":[340,349],"nodes":[{"file":"node1_base.dart","name":"Scrollable的基本使用","desc":["【viewportBuilder】 : 视口构造器 【ViewportBuilder】","【axisDirection】: 滑动方向 【AxisDirection】","【controller】: 滑动控制器 【ScrollController】","【dragStartBehavior】: t拖动行为 【DragStartBehavior】","【physics】: 滚动现象 【ScrollPhysics】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_en-US.json b/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_en-US.json deleted file mode 100644 index 85e66d283..000000000 --- a/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Scrollbar","path":"/src/material/scrollbar.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design scrollbar.","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.Scrollbar.child}"},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.Scrollbar.controller}"},{"name":"thumbVisibility","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.thumbVisibility}"},{"name":"trackVisibility","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.trackVisibility}"},{"name":"thickness","type":"double?","desc":"The thickness of the scrollbar in the cross axis of the scrollable."},{"name":"radius","type":"Radius?","desc":"The [Radius] of the scrollbar thumb's rounded rectangle corners."},{"name":"interactive","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.interactive}"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate?","desc":"{@macro flutter.widgets.Scrollbar.notificationPredicate}"},{"name":"scrollbarOrientation","type":"ScrollbarOrientation?","desc":"{@macro flutter.widgets.Scrollbar.scrollbarOrientation}"}],"id":194,"lever":3,"family":1,"linkIds":[195,164,162],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Scrollbar","desc":["【child】: Child widget 【Widget】","【controller】: Controller 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_zh-CN.json deleted file mode 100644 index d322a2299..000000000 --- a/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Scrollbar","path":"/src/material/scrollbar.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 滚动条。","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.Scrollbar.child}"},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.Scrollbar.controller}"},{"name":"thumbVisibility","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.thumbVisibility}"},{"name":"trackVisibility","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.trackVisibility}"},{"name":"thickness","type":"double?","desc":"滚动条在可滚动交叉轴上的厚度。"},{"name":"radius","type":"Radius?","desc":"滚动条拇指圆角矩形角的 [Radius]。"},{"name":"interactive","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.interactive}"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate?","desc":"{@macro flutter.widgets.Scrollbar.notificationPredicate}"},{"name":"scrollbarOrientation","type":"ScrollbarOrientation?","desc":"{@macro flutter.widgets.Scrollbar.scrollbarOrientation}"}],"id":194,"localName":"滑动指示栏","lever":3,"family":1,"linkIds":[195,164,162],"nodes":[{"file":"node1_base.dart","name":"Scrollbar基本使用","desc":["【child】 : 子组件 【Widget】","【controller】 : 控制器 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_en-US.json deleted file mode 100644 index ec987a075..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScrollbarTheme","path":"/src/material/scrollbar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a scrollbar theme to descendant [Scrollbar] widgets.","fields":[{"name":"data","type":"ScrollbarThemeData","required":true,"desc":"The properties used for all descendant [Scrollbar] widgets."}],"id":496,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_zh-CN.json deleted file mode 100644 index 9bf92e667..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScrollbarTheme","path":"/src/material/scrollbar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"将滚动条主题应用于后代 [Scrollbar] 小部件。","fields":[{"name":"data","type":"ScrollbarThemeData","required":true,"desc":"用于所有后代 [Scrollbar] 小部件的属性。"}],"id":496,"localName":"ScrollbarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_en-US.json b/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_en-US.json deleted file mode 100644 index 0d17c246e..000000000 --- a/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SearchAnchor","path":"/src/material/search_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" Manages a \"search view\" route that allows the user to select one of the suggested completions for a search query.","fields":[{"name":"isFullScreen","type":"bool?","desc":"Whether the search view grows to fill the entire screen when the [SearchAnchor] is tapped."},{"name":"searchController","type":"SearchController?","desc":"An optional controller that allows opening and closing of the search view from other widgets."},{"name":"viewBuilder","type":"ViewBuilder?","desc":"Optional callback to obtain a widget to lay out the suggestion list of the search view."},{"name":"viewLeading","type":"Widget?","desc":"An optional widget to display before the text input field when the search view is open."},{"name":"viewTrailing","type":"Iterable?","desc":"An optional widget list to display after the text input field when the search view is open."},{"name":"viewHintText","type":"String?","desc":"Text that is displayed when the search bar's input field is empty."},{"name":"viewBackgroundColor","type":"Color?","desc":"The search view's background fill color."},{"name":"viewElevation","type":"double?","desc":"The elevation of the search view's [Material]."},{"name":"viewSurfaceTintColor","type":"Color?","desc":"The surface tint color of the search view's [Material]."},{"name":"viewSide","type":"BorderSide?","desc":"The color and weight of the search view's outline."},{"name":"viewShape","type":"OutlinedBorder?","desc":"The shape of the search view's underlying [Material]."},{"name":"viewBarPadding","type":"EdgeInsetsGeometry?","desc":"The padding to use for the search view's search bar."},{"name":"headerHeight","type":"double?","desc":"The height of the search field on the search view."},{"name":"headerTextStyle","type":"TextStyle?","desc":"The style to use for the text being edited on the search view."},{"name":"headerHintStyle","type":"TextStyle?","desc":"The style to use for the [viewHintText] on the search view."},{"name":"dividerColor","type":"Color?","desc":"The color of the divider on the search view."},{"name":"viewConstraints","type":"BoxConstraints?","desc":"Optional size constraints for the search view."},{"name":"viewPadding","type":"EdgeInsetsGeometry?","desc":"The padding to use for the search view."},{"name":"shrinkWrap","type":"bool?","desc":"Whether the search view should shrink-wrap its contents."},{"name":"textCapitalization","type":"TextCapitalization?","desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"viewOnChanged","type":"ValueChanged?","desc":"Called each time the user modifies the search view's text field."},{"name":"viewOnSubmitted","type":"ValueChanged?","desc":"Called when the user indicates that they are done editing the text in the text field of a search view. Typically this is called when the user presses the enter key."},{"name":"viewOnClose","type":"VoidCallback?","desc":"Called when the search view is closed."},{"name":"viewOnOpen","type":"VoidCallback?","desc":"Called when the search view is opened."},{"name":"builder","type":"SearchAnchorChildBuilder","required":true,"desc":"Called to create a widget which can open a search view route when it is tapped."},{"name":"suggestionsBuilder","type":"SuggestionsBuilder","required":true,"desc":"Called to get the suggestion list for the search view."},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"},{"name":"keyboardType","type":"TextInputType?","desc":"The type of action button to use for the keyboard."},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not this widget is currently interactive."}],"id":497,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_zh-CN.json deleted file mode 100644 index de191b4a5..000000000 --- a/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SearchAnchor","path":"/src/material/search_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"管理搜索视图路由,允许用户为搜索查询选择建议的完成项之一。","fields":[{"name":"isFullScreen","type":"bool?","desc":"点击 [SearchAnchor] 时搜索视图是否增长以填充整个屏幕。"},{"name":"searchController","type":"SearchController?","desc":"允许从其他小部件打开和关闭搜索视图的可选控制器。"},{"name":"viewBuilder","type":"ViewBuilder?","desc":"获取小部件以布局搜索视图建议列表的可选回调。"},{"name":"viewLeading","type":"Widget?","desc":"搜索视图打开时在文本输入字段之前显示的可选小部件。"},{"name":"viewTrailing","type":"Iterable?","desc":"搜索视图打开时在文本输入字段之后显示的可选小部件列表。"},{"name":"viewHintText","type":"String?","desc":"搜索栏输入字段为空时显示的文本。"},{"name":"viewBackgroundColor","type":"Color?","desc":"搜索视图的背景填充颜色。"},{"name":"viewElevation","type":"double?","desc":"搜索视图的 [Material] 的高度。"},{"name":"viewSurfaceTintColor","type":"Color?","desc":"搜索视图的 [Material] 的表面色调颜色。"},{"name":"viewSide","type":"BorderSide?","desc":"搜索视图轮廓的颜色和权重。"},{"name":"viewShape","type":"OutlinedBorder?","desc":"搜索视图底层 [Material] 的形状。"},{"name":"viewBarPadding","type":"EdgeInsetsGeometry?","desc":"用于搜索视图搜索栏的内边距。"},{"name":"headerHeight","type":"double?","desc":"搜索视图上搜索字段的高度。"},{"name":"headerTextStyle","type":"TextStyle?","desc":"用于搜索视图上正在编辑的文本的样式。"},{"name":"headerHintStyle","type":"TextStyle?","desc":"用于搜索视图上 [viewHintText] 的样式。"},{"name":"dividerColor","type":"Color?","desc":"搜索视图上分隔符的颜色。"},{"name":"viewConstraints","type":"BoxConstraints?","desc":"搜索视图的可选大小约束。"},{"name":"viewPadding","type":"EdgeInsetsGeometry?","desc":"用于搜索视图的内边距。"},{"name":"shrinkWrap","type":"bool?","desc":"搜索视图是否应收缩包装其内容。"},{"name":"textCapitalization","type":"TextCapitalization?","desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"viewOnChanged","type":"ValueChanged?","desc":"每次用户修改搜索视图的文本字段时调用。"},{"name":"viewOnSubmitted","type":"ValueChanged?","desc":"当用户指示他们已完成编辑搜索视图文本字段中的文本时调用。通常在用户按下回车键时调用。"},{"name":"viewOnClose","type":"VoidCallback?","desc":"搜索视图关闭时调用。"},{"name":"viewOnOpen","type":"VoidCallback?","desc":"搜索视图打开时调用。"},{"name":"builder","type":"SearchAnchorChildBuilder","required":true,"desc":"调用以创建点击时可以打开搜索视图路由的小部件。"},{"name":"suggestionsBuilder","type":"SuggestionsBuilder","required":true,"desc":"调用以获取搜索视图的建议列表。"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"},{"name":"keyboardType","type":"TextInputType?","desc":"用于键盘的操作按钮类型。"},{"name":"enabled","type":"bool","required":true,"desc":"此小部件当前是否可交互。"}],"id":497,"localName":"SearchAnchor","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_en-US.json b/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_en-US.json deleted file mode 100644 index 2b66bd066..000000000 --- a/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SearchBar","path":"/src/material/search_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design search bar.","fields":[{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited in the search bar's text field."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"hintText","type":"String?","desc":"Text that suggests what sort of input the field accepts."},{"name":"leading","type":"Widget?","desc":"A widget to display before the text input field."},{"name":"trailing","type":"Iterable?","desc":"A list of Widgets to display in a row after the text field."},{"name":"onTap","type":"GestureTapCallback?","desc":"Called when the user taps this search bar."},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"Called when the user taps outside the search bar."},{"name":"onChanged","type":"ValueChanged?","desc":"Invoked upon user input."},{"name":"onSubmitted","type":"ValueChanged?","desc":"Called when the user indicates that they are done editing the text in the field."},{"name":"constraints","type":"BoxConstraints?","desc":"Optional size constraints for the search bar."},{"name":"elevation","type":"MaterialStateProperty?","desc":"The elevation of the search bar's [Material]."},{"name":"backgroundColor","type":"MaterialStateProperty?","desc":"The search bar's background fill color."},{"name":"shadowColor","type":"MaterialStateProperty?","desc":"The shadow color of the search bar's [Material]."},{"name":"surfaceTintColor","type":"MaterialStateProperty?","desc":"The surface tint color of the search bar's [Material]."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The highlight color that's typically used to indicate that the search bar is focused, hovered, or pressed."},{"name":"side","type":"MaterialStateProperty?","desc":"The color and weight of the search bar's outline."},{"name":"shape","type":"MaterialStateProperty?","desc":"The shape of the search bar's underlying [Material]."},{"name":"padding","type":"MaterialStateProperty?","desc":"The padding between the search bar's boundary and its contents."},{"name":"textStyle","type":"MaterialStateProperty?","desc":"The style to use for the text being edited."},{"name":"hintStyle","type":"MaterialStateProperty?","desc":"The style to use for the [hintText]."},{"name":"textCapitalization","type":"TextCapitalization?","desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not this widget is currently interactive."},{"name":"autoFocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"},{"name":"keyboardType","type":"TextInputType?","desc":"The type of action button to use for the keyboard."},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"}],"id":498,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_zh-CN.json deleted file mode 100644 index 34163d555..000000000 --- a/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SearchBar","path":"/src/material/search_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 搜索栏。","fields":[{"name":"controller","type":"TextEditingController?","desc":"控制搜索栏文本字段中正在编辑的文本。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"hintText","type":"String?","desc":"建议字段接受何种输入的文本。"},{"name":"leading","type":"Widget?","desc":"在文本输入字段之前显示的小部件。"},{"name":"trailing","type":"Iterable?","desc":"在文本字段之后一行显示的小部件列表。"},{"name":"onTap","type":"GestureTapCallback?","desc":"用户点击此搜索栏时调用。"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"用户点击搜索栏外部时调用。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户输入时调用。"},{"name":"onSubmitted","type":"ValueChanged?","desc":"当用户指示他们已完成编辑字段中的文本时调用。"},{"name":"constraints","type":"BoxConstraints?","desc":"搜索栏的可选大小约束。"},{"name":"elevation","type":"MaterialStateProperty?","desc":"搜索栏的 [Material] 的高度。"},{"name":"backgroundColor","type":"MaterialStateProperty?","desc":"搜索栏的背景填充颜色。"},{"name":"shadowColor","type":"MaterialStateProperty?","desc":"搜索栏的 [Material] 的阴影颜色。"},{"name":"surfaceTintColor","type":"MaterialStateProperty?","desc":"搜索栏的 [Material] 的表面色调颜色。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"通常用于指示搜索栏被聚焦、悬停或按下的高亮颜色。"},{"name":"side","type":"MaterialStateProperty?","desc":"搜索栏轮廓的颜色和权重。"},{"name":"shape","type":"MaterialStateProperty?","desc":"搜索栏底层 [Material] 的形状。"},{"name":"padding","type":"MaterialStateProperty?","desc":"搜索栏边界与其内容之间的内边距。"},{"name":"textStyle","type":"MaterialStateProperty?","desc":"用于正在编辑的文本的样式。"},{"name":"hintStyle","type":"MaterialStateProperty?","desc":"用于 [hintText] 的样式。"},{"name":"textCapitalization","type":"TextCapitalization?","desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"enabled","type":"bool","required":true,"desc":"此小部件当前是否可交互。"},{"name":"autoFocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"},{"name":"keyboardType","type":"TextInputType?","desc":"用于键盘的操作按钮类型。"},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"}],"id":498,"localName":"SearchBar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_en-US.json deleted file mode 100644 index f592ac1e4..000000000 --- a/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SearchBarTheme","path":"/src/material/search_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a search bar theme to descendant [SearchBar] widgets.","fields":[{"name":"data","type":"SearchBarThemeData","required":true,"desc":"The properties used for all descendant [SearchBar] widgets."}],"id":499,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_zh-CN.json deleted file mode 100644 index 2d252d98f..000000000 --- a/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SearchBarTheme","path":"/src/material/search_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将搜索栏主题应用于后代 [SearchBar] 小部件。","fields":[{"name":"data","type":"SearchBarThemeData","required":true,"desc":"用于所有后代 [SearchBar] 小部件的属性。"}],"id":499,"localName":"SearchBarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_en-US.json deleted file mode 100644 index c38ffbc8e..000000000 --- a/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SearchViewTheme","path":"/src/material/search_view_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration in this widget's descendants for search view created by the [SearchAnchor] widget.","fields":[{"name":"data","type":"SearchViewThemeData","required":true,"desc":"The properties used for all descendant [SearchAnchor] widgets."}],"id":500,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_zh-CN.json deleted file mode 100644 index 8ef038a3a..000000000 --- a/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SearchViewTheme","path":"/src/material/search_view_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件后代中由 [SearchAnchor] 小部件创建的搜索视图定义配置的继承小部件。","fields":[{"name":"data","type":"SearchViewThemeData","required":true,"desc":"用于所有后代 [SearchAnchor] 小部件的属性。"}],"id":500,"localName":"SearchViewTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_en-US.json b/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_en-US.json deleted file mode 100644 index 35ccc7b74..000000000 --- a/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SegmentedButton","path":"/src/material/segmented_button.dart","parents":["StatefulWidget","Widget"],"desc":" A Material button that allows the user to select from limited set of options.","fields":[{"name":"segments","type":"List>","required":true,"desc":"Descriptions of the segments in the button."},{"name":"direction","type":"Axis","required":true,"desc":"The orientation of the button's [segments]."},{"name":"selected","type":"Set","required":true,"desc":"The set of [ButtonSegment.value]s that indicate which [segments] are selected."},{"name":"onSelectionChanged","type":"void Function(Set)?","desc":"The function that is called when the selection changes."},{"name":"multiSelectionEnabled","type":"bool","required":true,"desc":"Determines if multiple segments can be selected at one time."},{"name":"emptySelectionAllowed","type":"bool","required":true,"desc":"Determines if having no selected segments is allowed."},{"name":"expandedInsets","type":"EdgeInsets?","desc":"Determines the segmented button's size and padding based on [expandedInsets]."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"showSelectedIcon","type":"bool","required":true,"desc":"Determines if the [selectedIcon] (usually an icon using [Icons.check]) is displayed on the selected segments."},{"name":"selectedIcon","type":"Widget?","desc":"An icon that is used to indicate a segment is selected."}],"id":501,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_zh-CN.json deleted file mode 100644 index d36006ea3..000000000 --- a/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SegmentedButton","path":"/src/material/segmented_button.dart","parents":["StatefulWidget","Widget"],"desc":"允许用户从有限选项集中选择的 Material 按钮。","fields":[{"name":"segments","type":"List>","required":true,"desc":"按钮中段的描述。"},{"name":"direction","type":"Axis","required":true,"desc":"按钮的 [segments] 的方向。"},{"name":"selected","type":"Set","required":true,"desc":"指示哪些 [segments] 被选中的 [ButtonSegment.value] 集合。"},{"name":"onSelectionChanged","type":"void Function(Set)?","desc":"选择更改时调用的函数。"},{"name":"multiSelectionEnabled","type":"bool","required":true,"desc":"确定是否可以同时选择多个段。"},{"name":"emptySelectionAllowed","type":"bool","required":true,"desc":"确定是否允许没有选中的段。"},{"name":"expandedInsets","type":"EdgeInsets?","desc":"根据 [expandedInsets] 确定分段按钮的大小和内边距。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"showSelectedIcon","type":"bool","required":true,"desc":"确定是否在选中的段上显示 [selectedIcon](通常是使用 [Icons.check] 的图标)。"},{"name":"selectedIcon","type":"Widget?","desc":"用于指示段被选中的图标。"}],"id":501,"localName":"SegmentedButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_en-US.json deleted file mode 100644 index 37d2c0fd1..000000000 --- a/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SegmentedButtonTheme","path":"/src/material/segmented_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the visual properties for [SegmentedButton]s in this widget's subtree.","fields":[{"name":"data","type":"SegmentedButtonThemeData","required":true,"desc":"Specifies the visual properties used by descendant [SegmentedButton] widgets."}],"id":502,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_zh-CN.json deleted file mode 100644 index e66744982..000000000 --- a/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SegmentedButtonTheme","path":"/src/material/segmented_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [SegmentedButton] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"SegmentedButtonThemeData","required":true,"desc":"指定后代 [SegmentedButton] 小部件使用的视觉属性。"}],"id":502,"localName":"SegmentedButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_en-US.json deleted file mode 100644 index 1a14266b9..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectableRegion","path":"/src/widgets/selectable_region.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that introduces an area for user selections.","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration","required":true,"desc":"The configuration for the magnifier used with selections in this region."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"child","type":"Widget","required":true,"desc":"The child widget this selection area applies to."},{"name":"contextMenuBuilder","type":"SelectableRegionContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"selectionControls","type":"TextSelectionControls","required":true,"desc":"The delegate to build the selection handles and toolbar for mobile devices."},{"name":"onSelectionChanged","type":"ValueChanged?","desc":"Called when the selected content changes."}],"id":503,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_zh-CN.json deleted file mode 100644 index cb07c21af..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectableRegion","path":"/src/widgets/selectable_region.dart","parents":["StatefulWidget","Widget"],"desc":"引入用户选择区域的小部件。","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration","required":true,"desc":"此区域中选择使用的放大镜配置。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"child","type":"Widget","required":true,"desc":"此选择区域应用的子小部件。"},{"name":"contextMenuBuilder","type":"SelectableRegionContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"selectionControls","type":"TextSelectionControls","required":true,"desc":"为移动设备构建选择手柄和工具栏的委托。"},{"name":"onSelectionChanged","type":"ValueChanged?","desc":"选中内容更改时调用。"}],"id":503,"localName":"SelectableRegion","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_en-US.json deleted file mode 100644 index 936b3c270..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectableRegionSelectionStatusScope","path":"/src/widgets/selectable_region.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Notifies its listeners when the selection under a [SelectableRegion] or [SelectionArea] is being changed or finalized.","fields":[{"name":"selectionStatusNotifier","type":"ValueListenable","required":true,"desc":"Tracks updates to the [SelectableRegionSelectionStatus] of the owning [SelectableRegion]."}],"id":504,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_zh-CN.json deleted file mode 100644 index d7cabaafd..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectableRegionSelectionStatusScope","path":"/src/widgets/selectable_region.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"当 [SelectableRegion] 或 [SelectionArea] 下的选择正在更改或完成时通知其监听器。","fields":[{"name":"selectionStatusNotifier","type":"ValueListenable","required":true,"desc":"跟踪拥有 [SelectableRegion] 的 [SelectableRegionSelectionStatus] 的更新。"}],"id":504,"localName":"SelectableRegionSelectionStatusScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_en-US.json deleted file mode 100644 index 0614bdbc7..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectableText","path":"/src/material/selectable_text.dart","parents":["StatefulWidget","Widget"],"desc":" A run of selectable text with a single style.","fields":[{"name":"data","type":"String?","desc":"The text to display."},{"name":"textSpan","type":"TextSpan?","desc":"The text to display as a [TextSpan]."},{"name":"focusNode","type":"FocusNode?","desc":"Defines the focus for this widget."},{"name":"style","type":"TextStyle?","desc":"The style to use for the text."},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign?","desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"textScaleFactor","type":"double?","desc":"{@macro flutter.widgets.editableText.textScaleFactor}"},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines}"},{"name":"showCursor","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius?","desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorColor","type":"Color?","desc":"The color of the cursor."},{"name":"selectionColor","type":"Color?","desc":"The color to use when painting the selection."},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"Controls how tall the selection highlight boxes are computed to be."},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"Controls how wide the selection highlight boxes are computed to be."},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"Configuration of toolbar options."},{"name":"onTap","type":"GestureTapCallback?","desc":"Called when the user taps on this selectable text."},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.editableText.scrollBehavior}"},{"name":"semanticsLabel","type":"String?","desc":"{@macro flutter.widgets.Text.semanticsLabel}"},{"name":"textHeightBehavior","type":"TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"textWidthBasis","type":"TextWidthBasis?","desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"onSelectionChanged","type":"SelectionChangedCallback?","desc":"{@macro flutter.widgets.editableText.onSelectionChanged}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"The configuration for the magnifier used when the text is selected."}],"id":53,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SelectableText","desc":["【Parameter】 : Display text 【String】","【style】 : Text style 【TextStyle】","【cursorRadius】 : Cursor radius 【Radius】","【cursorColor】 : Cursor color 【Color】","【cursorWidth】 : Cursor width 【double】","【showCursor】 : Whether to show the cursor 【bool】","【autofocus】 : Auto focus 【bool】"]},{"file":"node2_align.dart","name":"Alignment Properties of SelectableText","desc":["【textAlign】 : Alignment method*6 【textAlign】","【textDirection】 : Text direction*2 【TextDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_zh-CN.json deleted file mode 100644 index 26d8b0186..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectableText","path":"/src/material/selectable_text.dart","parents":["StatefulWidget","Widget"],"desc":"具有单一样式的可选择文本运行。","fields":[{"name":"data","type":"String?","desc":"要显示的文本。"},{"name":"textSpan","type":"TextSpan?","desc":"要显示为 [TextSpan] 的文本。"},{"name":"focusNode","type":"FocusNode?","desc":"定义此小部件的焦点。"},{"name":"style","type":"TextStyle?","desc":"用于文本的样式。"},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign?","desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"textScaleFactor","type":"double?","desc":"{@macro flutter.widgets.editableText.textScaleFactor}"},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines}"},{"name":"showCursor","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius?","desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorColor","type":"Color?","desc":"光标的颜色。"},{"name":"selectionColor","type":"Color?","desc":"绘制选择时使用的颜色。"},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"控制选择高亮框的计算高度。"},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"控制选择高亮框的计算宽度。"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"工具栏选项的配置。"},{"name":"onTap","type":"GestureTapCallback?","desc":"用户点击此可选择文本时调用。"},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.editableText.scrollBehavior}"},{"name":"semanticsLabel","type":"String?","desc":"{@macro flutter.widgets.Text.semanticsLabel}"},{"name":"textHeightBehavior","type":"TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"textWidthBasis","type":"TextWidthBasis?","desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"onSelectionChanged","type":"SelectionChangedCallback?","desc":"{@macro flutter.widgets.editableText.onSelectionChanged}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"选择文本时使用的放大镜配置。"}],"id":53,"localName":"可选择文字","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SelectableText基本使用","desc":["【入参】 : 显示文字 【String】","【style】 : 文字样式 【TextStyle】","【cursorRadius】 : 光标半径 【Radius】","【cursorColor】 : 光标颜色 【Color】","【cursorWidth】 : 光标宽度 【double】","【showCursor】 : 是否显示光标 【bool】","【autofocus】 : 自动聚焦 【bool】"]},{"file":"node2_align.dart","name":"SelectableText对齐属性","desc":["【textAlign】 : 对齐方式*6 【textAlign】","【textDirection】 : 文字方向*2 【TextDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_en-US.json deleted file mode 100644 index 75b2a60d5..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectionArea","path":"/src/material/selection_area.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that introduces an area for user selections with adaptive selection controls.","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"The configuration for the magnifier in the selection region."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"The delegate to build the selection handles and toolbar."},{"name":"contextMenuBuilder","type":"SelectableRegionContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"onSelectionChanged","type":"ValueChanged?","desc":"Called when the selected content changes."},{"name":"child","type":"Widget","required":true,"desc":"The child widget this selection area applies to."}],"id":505,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_zh-CN.json deleted file mode 100644 index de3d5080c..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectionArea","path":"/src/material/selection_area.dart","parents":["StatefulWidget","Widget"],"desc":"引入具有自适应选择控件的用户选择区域的小部件。","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"选择区域中放大镜的配置。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"构建选择手柄和工具栏的委托。"},{"name":"contextMenuBuilder","type":"SelectableRegionContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"onSelectionChanged","type":"ValueChanged?","desc":"选中内容更改时调用。"},{"name":"child","type":"Widget","required":true,"desc":"此选择区域应用的子小部件。"}],"id":505,"localName":"SelectionArea","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_en-US.json deleted file mode 100644 index 09d801e6d..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectionContainer","path":"/src/widgets/selection_container.dart","parents":["StatefulWidget","Widget"],"desc":" A container that handles [SelectionEvent]s for the [Selectable]s in the subtree.","fields":[{"name":"registrar","type":"SelectionRegistrar?","desc":"The [SelectionRegistrar] this container is registered to."},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"},{"name":"delegate","type":"SelectionContainerDelegate?","desc":"The delegate for [SelectionEvent]s sent to this selection container."}],"id":506,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_zh-CN.json deleted file mode 100644 index 246994a6a..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectionContainer","path":"/src/widgets/selection_container.dart","parents":["StatefulWidget","Widget"],"desc":"为子树中的 [Selectable] 处理 [SelectionEvent] 的容器。","fields":[{"name":"registrar","type":"SelectionRegistrar?","desc":"此容器注册到的 [SelectionRegistrar]。"},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"},{"name":"delegate","type":"SelectionContainerDelegate?","desc":"发送到此选择容器的 [SelectionEvent] 的委托。"}],"id":506,"localName":"SelectionContainer","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_en-US.json deleted file mode 100644 index 3d602c828..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectionListener","path":"/src/widgets/selectable_region.dart","parents":["StatefulWidget","Widget"],"desc":" A [SelectionContainer] that allows the user to access the [SelectionDetails] and listen to selection changes for the child subtree it wraps under a [SelectionArea] or [SelectableRegion].","fields":[{"name":"selectionNotifier","type":"SelectionListenerNotifier","required":true,"desc":"Notifies listeners when the selection has changed."},{"name":"child","type":"Widget","required":true,"desc":"The child widget this selection listener applies to."}],"id":507,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_zh-CN.json deleted file mode 100644 index 9f322209c..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectionListener","path":"/src/widgets/selectable_region.dart","parents":["StatefulWidget","Widget"],"desc":"允许用户访问 [SelectionDetails] 并监听在 [SelectionArea] 或 [SelectableRegion] 下包装的子子树的选择更改的 [SelectionContainer]。","fields":[{"name":"selectionNotifier","type":"SelectionListenerNotifier","required":true,"desc":"选择更改时通知监听器。"},{"name":"child","type":"Widget","required":true,"desc":"此选择监听器应用的子小部件。"}],"id":507,"localName":"SelectionListener","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_en-US.json deleted file mode 100644 index 44a4a9c3e..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectionRegistrarScope","path":"/src/widgets/selection_container.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget to host a [SelectionRegistrar] for the subtree.","fields":[{"name":"registrar","type":"SelectionRegistrar?","desc":"The [SelectionRegistrar] hosted by this widget."}],"id":508,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_zh-CN.json deleted file mode 100644 index bf79d6a95..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectionRegistrarScope","path":"/src/widgets/selection_container.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为子树托管 [SelectionRegistrar] 的继承小部件。","fields":[{"name":"registrar","type":"SelectionRegistrar?","desc":"此小部件托管的 [SelectionRegistrar]。"}],"id":508,"localName":"SelectionRegistrarScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_en-US.json b/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_en-US.json deleted file mode 100644 index 7e3d38d62..000000000 --- a/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Semantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that annotates the widget tree with a description of the meaning of the widgets.","fields":[{"name":"properties","type":"SemanticsProperties","required":true,"desc":"Contains properties used by assistive technologies to make the application more accessible."},{"name":"container","type":"bool","required":true,"desc":"If [container] is true, this widget will introduce a new node in the semantics tree. Otherwise, the semantics will be merged with the semantics of any ancestors (if the ancestor allows that)."},{"name":"explicitChildNodes","type":"bool","required":true,"desc":"Whether descendants of this widget are allowed to add semantic information to the [SemanticsNode] annotated by this widget."},{"name":"excludeSemantics","type":"bool","required":true,"desc":"Whether to replace all child semantics with this node."},{"name":"blockUserActions","type":"bool","required":true,"desc":"Whether to block user interactions for the rendering subtree."}],"id":509,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_zh-CN.json deleted file mode 100644 index 48f87a588..000000000 --- a/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Semantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"用小部件含义描述注释小部件树的小部件。","fields":[{"name":"properties","type":"SemanticsProperties","required":true,"desc":"包含辅助技术用于使应用程序更易于访问的属性。"},{"name":"container","type":"bool","required":true,"desc":"如果 [container] 为 true,此小部件将在语义树中引入新节点。否则,语义将与任何祖先的语义合并(如果祖先允许)。"},{"name":"explicitChildNodes","type":"bool","required":true,"desc":"此小部件的后代是否允许向此小部件注释的 [SemanticsNode] 添加语义信息。"},{"name":"excludeSemantics","type":"bool","required":true,"desc":"是否用此节点替换所有子语义。"},{"name":"blockUserActions","type":"bool","required":true,"desc":"是否阻止渲染子树的用户交互。"}],"id":509,"localName":"Semantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_en-US.json b/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_en-US.json deleted file mode 100644 index 180d13849..000000000 --- a/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SemanticsDebugger","path":"/src/widgets/semantics_debugger.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that visualizes the semantics for the child.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"labelStyle","type":"TextStyle","required":true,"desc":"The [TextStyle] to use when rendering semantics labels."}],"id":510,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_zh-CN.json deleted file mode 100644 index 562fb8b81..000000000 --- a/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SemanticsDebugger","path":"/src/widgets/semantics_debugger.dart","parents":["StatefulWidget","Widget"],"desc":"可视化子项语义的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"labelStyle","type":"TextStyle","required":true,"desc":"渲染语义标签时使用的 [TextStyle]。"}],"id":510,"localName":"SemanticsDebugger","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_en-US.json b/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_en-US.json deleted file mode 100644 index ac8b1a602..000000000 --- a/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ShaderMask","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that applies a mask generated by a [Shader] to its child.","fields":[{"name":"shaderCallback","type":"ShaderCallback","required":true,"desc":"Called to create the [dart:ui.Shader] that generates the mask."},{"name":"blendMode","type":"BlendMode","required":true,"desc":"The [BlendMode] to use when applying the shader to the child."}],"id":277,"lever":4,"family":2,"linkIds":[88,38],"nodes":[{"file":"node1_radial.dart","name":"Radial Gradient Shading","desc":["【child】: Child component 【Widget】","【shaderCallback】: Shader callback 【ShaderCallback】","【blendMode】: Blending mode 【BlendMode】"," Create a radial gradient shader through RadialGradient#createShader."]},{"file":"node2_linear.dart","name":"Linear Gradient Shading","desc":["Create a linear gradient shader through LinearGradient#createShader","For more information on shaders, see 【Drawing Album】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_zh-CN.json deleted file mode 100644 index 8e52b4f5f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ShaderMask","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将由 [Shader] 生成的蒙版应用于其子项的小部件。","fields":[{"name":"shaderCallback","type":"ShaderCallback","required":true,"desc":"调用以创建生成蒙版的 [dart:ui.Shader]。"},{"name":"blendMode","type":"BlendMode","required":true,"desc":"将着色器应用于子项时使用的 [BlendMode]。"}],"id":277,"localName":"着色器遮罩","lever":4,"family":2,"linkIds":[88,38],"nodes":[{"file":"node1_radial.dart","name":"径向渐变着色","desc":["【child】 : 孩子组件 【Widget】","【shaderCallback】 : 着色器回调 【ShaderCallback】","【blendMode】 : 混色模式 【BlendMode】"," 通过RadialGradient#createShader创建径向渐变着色器。"]},{"file":"node2_linear.dart","name":"线性渐变着色","desc":["通过LinearGradient#createShader创建线性渐变着色器","着色器相关知识详见【绘制专辑】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_en-US.json b/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_en-US.json deleted file mode 100644 index b3bf7fe4b..000000000 --- a/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SharedAppData","path":"/src/widgets/shared_app_data.dart","parents":["StatefulWidget","Widget"],"desc":" Enables sharing key/value data with its `child` and all of the child's descendants.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":511,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_zh-CN.json deleted file mode 100644 index ba17e0dfe..000000000 --- a/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SharedAppData","path":"/src/widgets/shared_app_data.dart","parents":["StatefulWidget","Widget"],"desc":"允许与其 `child` 及所有子项的后代共享键/值数据。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":511,"localName":"SharedAppData","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_en-US.json b/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_en-US.json deleted file mode 100644 index 811d84c38..000000000 --- a/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ShortcutRegistrar","path":"/src/widgets/shortcuts.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that holds a [ShortcutRegistry] which allows descendants to add, remove, or replace shortcuts.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":512,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_zh-CN.json deleted file mode 100644 index 75f380f3d..000000000 --- a/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ShortcutRegistrar","path":"/src/widgets/shortcuts.dart","parents":["StatefulWidget","Widget"],"desc":"持有 [ShortcutRegistry] 的小部件,允许后代添加、删除或替换快捷方式。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":512,"localName":"ShortcutRegistrar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_en-US.json b/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_en-US.json deleted file mode 100644 index 803984103..000000000 --- a/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Shortcuts","path":"/src/widgets/shortcuts.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that creates key bindings to specific actions for its descendants.","fields":[{"name":"manager","type":"ShortcutManager?","desc":"The [ShortcutManager] that will manage the mapping between key combinations and [Action]s."},{"name":"child","type":"Widget","required":true,"desc":"The child widget for this [Shortcuts] widget."},{"name":"debugLabel","type":"String?","desc":"The debug label that is printed for this node when logged."},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"}],"id":513,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_zh-CN.json deleted file mode 100644 index fffb24ff1..000000000 --- a/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Shortcuts","path":"/src/widgets/shortcuts.dart","parents":["StatefulWidget","Widget"],"desc":"为其后代创建特定操作的键绑定的小部件。","fields":[{"name":"manager","type":"ShortcutManager?","desc":"将管理键组合和 [Action] 之间映射的 [ShortcutManager]。"},{"name":"child","type":"Widget","required":true,"desc":"此 [Shortcuts] 小部件的子小部件。"},{"name":"debugLabel","type":"String?","desc":"记录时为此节点打印的调试标签。"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"}],"id":513,"localName":"Shortcuts","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_en-US.json b/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_en-US.json deleted file mode 100644 index dce50e11c..000000000 --- a/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ShrinkWrappingViewport","path":"/src/widgets/viewport.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that is bigger on the inside and shrink wraps its children in the main axis.","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"The direction in which the [offset]'s [ViewportOffset.pixels] increases."},{"name":"crossAxisDirection","type":"AxisDirection?","desc":"The direction in which child should be laid out in the cross axis."},{"name":"offset","type":"ViewportOffset","required":true,"desc":"Which part of the content inside the viewport should be visible."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":343,"lever":1,"family":3,"linkIds":[349,162,163],"nodes":[{"file":"node1_base.dart","name":"Introduction to NestedScrollViewViewport","desc":["【offset】: *offset 【ViewportOffset】","【axisDirection】: Axis direction 【AxisDirection】","【crossAxisDirection】: Cross axis direction 【AxisDirection】","【slivers】: Child components 【List】","【clipBehavior】: Clip behavior 【Clip】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_zh-CN.json deleted file mode 100644 index c4cff1b89..000000000 --- a/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ShrinkWrappingViewport","path":"/src/widgets/viewport.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"内部更大且在主轴上收缩包装其子项的小部件。","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"[offset] 的 [ViewportOffset.pixels] 增加的方向。"},{"name":"crossAxisDirection","type":"AxisDirection?","desc":"子项应在交叉轴上布局的方向。"},{"name":"offset","type":"ViewportOffset","required":true,"desc":"视口内容的哪一部分应该可见。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":343,"localName":"收缩包围视图","lever":1,"family":3,"linkIds":[349,162,163],"nodes":[{"file":"node1_base.dart","name":"NestedScrollViewViewport 介绍","desc":["【offset】 : *偏移 【ViewportOffset】","【axisDirection】 : 轴向 【AxisDirection】","【crossAxisDirection】 : 交叉轴向 【AxisDirection】","【slivers】 : 子组件 【List】","【clipBehavior】 : 裁剪行为 【Clip】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_en-US.json deleted file mode 100644 index 6ae6d1991..000000000 --- a/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SimpleDialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":" A simple Material Design dialog.","fields":[{"name":"title","type":"Widget?","desc":"The (optional) title of the dialog is displayed in a large font at the top of the dialog."},{"name":"titlePadding","type":"EdgeInsetsGeometry","required":true,"desc":"Padding around the title."},{"name":"titleTextStyle","type":"TextStyle?","desc":"Style for the text in the [title] of this [SimpleDialog]."},{"name":"children","type":"List?","desc":"The (optional) content of the dialog is displayed in a [SingleChildScrollView] underneath the title."},{"name":"contentPadding","type":"EdgeInsetsGeometry","required":true,"desc":"Padding around the content."},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.dialog.backgroundColor}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.dialog.elevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.dialog.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.dialog.surfaceTintColor}"},{"name":"semanticLabel","type":"String?","desc":"The semantic label of the dialog used by accessibility frameworks to announce screen transitions when the dialog is opened and closed."},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@macro flutter.material.dialog.insetPadding}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.dialog.clipBehavior}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.dialog.shape}"},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@macro flutter.material.dialog.shape}"}],"id":128,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SimpleDialog","desc":["【title】 : Top component 【Widget】","【children】 : List of child components 【List】","【titlePadding】 : Top padding 【EdgeInsetsGeometry】","【contentPadding】 : Content padding 【EdgeInsetsGeometry】","【backgroundColor】 : Background color 【Color】","【elevation】 : Shadow depth 【double】","【shape】 : Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_zh-CN.json deleted file mode 100644 index 1ac4442fc..000000000 --- a/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SimpleDialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":"简单的 Material Design 对话框。","fields":[{"name":"title","type":"Widget?","desc":"对话框的(可选)标题以大字体显示在对话框顶部。"},{"name":"titlePadding","type":"EdgeInsetsGeometry","required":true,"desc":"标题周围的内边距。"},{"name":"titleTextStyle","type":"TextStyle?","desc":"此 [SimpleDialog] 的 [title] 中文本的样式。"},{"name":"children","type":"List?","desc":"对话框的(可选)内容显示在标题下方的 [SingleChildScrollView] 中。"},{"name":"contentPadding","type":"EdgeInsetsGeometry","required":true,"desc":"内容周围的内边距。"},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.dialog.backgroundColor}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.dialog.elevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.dialog.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.dialog.surfaceTintColor}"},{"name":"semanticLabel","type":"String?","desc":"辅助功能框架用于在打开和关闭对话框时宣布屏幕转换的对话框语义标签。"},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@macro flutter.material.dialog.insetPadding}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.dialog.clipBehavior}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.dialog.shape}"},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@macro flutter.material.dialog.shape}"}],"id":128,"localName":"简单对话框","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SimpleDialog基本使用","desc":["【title】 : 顶部组件 【Widget】","【children】 : 子组件列表 【List】","【titlePadding】 : 顶部内边距 【EdgeInsetsGeometry】","【contentPadding】 : 内容内边距 【EdgeInsetsGeometry】","【backgroundColor】 : 背景色 【Color】","【elevation】 : 影深 【double】","【shape】 : 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_en-US.json b/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_en-US.json deleted file mode 100644 index 144559a93..000000000 --- a/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SimpleDialogOption","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":" An option used in a [SimpleDialog].","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when this option is selected."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"padding","type":"EdgeInsets?","desc":"The amount of space to surround the [child] with."}],"id":133,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SimpleDialogOption","desc":["【child】 : Child widget 【Widget】","【onPressed】 : Click event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_zh-CN.json deleted file mode 100644 index 40072e243..000000000 --- a/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SimpleDialogOption","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":"[SimpleDialog] 中使用的选项。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"选择此选项时调用的回调。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"padding","type":"EdgeInsets?","desc":"围绕 [child] 的空间量。"}],"id":133,"localName":"简单对话框选项","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SimpleDialogOption基本使用","desc":["【child】 : 子组件 【Widget】","【onPressed】 : 点击事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_en-US.json deleted file mode 100644 index 23ca594d2..000000000 --- a/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SingleChildRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A superclass for [RenderObjectWidget]s that configure [RenderObject] subclasses that have a single child slot.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":514,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_zh-CN.json deleted file mode 100644 index 4df33a258..000000000 --- a/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SingleChildRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"配置具有单个子插槽的 [RenderObject] 子类的 [RenderObjectWidget] 的超类。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":514,"localName":"SingleChildRenderObjectWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_en-US.json deleted file mode 100644 index 764101189..000000000 --- a/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SingleChildScrollView","path":"/src/widgets/single_child_scroll_view.dart","parents":["StatelessWidget","Widget"],"desc":" A box in which a single widget can be scrolled.","fields":[{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"Whether the scroll view scrolls in the reading direction."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the child."},{"name":"controller","type":"ScrollController?","desc":"An object that can be used to control the position to which this scroll view is scrolled."},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"physics","type":"ScrollPhysics?","desc":"How the scroll view should respond to user input."},{"name":"child","type":"Widget?","desc":"The widget that scrolls."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"}],"id":164,"lever":5,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SingleChildScrollView","desc":["【child】: Child widget 【Widget】","【padding】: Padding 【EdgeInsetsGeometry】"]},{"file":"node2_direction.dart","name":"Scroll Direction of SingleChildScrollView","desc":["【scrollDirection】: Scroll direction 【Axis】","【reverse】: Whether to reverse 【Axis】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_zh-CN.json deleted file mode 100644 index ad4496fef..000000000 --- a/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SingleChildScrollView","path":"/src/widgets/single_child_scroll_view.dart","parents":["StatelessWidget","Widget"],"desc":"可以滚动单个小部件的框。","fields":[{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"滚动视图是否在阅读方向上滚动。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"插入子项的空间量。"},{"name":"controller","type":"ScrollController?","desc":"可用于控制此滚动视图滚动到的位置的对象。"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"physics","type":"ScrollPhysics?","desc":"滚动视图应如何响应用户输入。"},{"name":"child","type":"Widget?","desc":"滚动的小部件。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"}],"id":164,"localName":"单子滑动","lever":5,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SingleChildScrollView基本使用","desc":["【child】 : 子组件 【Widget】","【padding】 : 内边距 【EdgeInsetsGeometry】"]},{"file":"node2_direction.dart","name":"SingleChildScrollView滑动方向","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向 【Axis】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_en-US.json b/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_en-US.json deleted file mode 100644 index 9977fb473..000000000 --- a/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SizeChangedLayoutNotifier","path":"/src/widgets/size_changed_layout_notifier.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that automatically dispatches a [SizeChangedLayoutNotification] when the layout dimensions of its child change.","fields":[],"id":294,"lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage","desc":["【child】 : Component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_zh-CN.json deleted file mode 100644 index 140a24049..000000000 --- a/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SizeChangedLayoutNotifier","path":"/src/widgets/size_changed_layout_notifier.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"当其子项的布局尺寸发生变化时自动分发 [SizeChangedLayoutNotification] 的小部件。","fields":[],"id":294,"localName":"尺寸变化通告","lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"基本使用","desc":["【child】 : 组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_en-US.json deleted file mode 100644 index 5997abe05..000000000 --- a/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SizeTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animates its own size and clips and aligns its child.","fields":[{"name":"axis","type":"Axis","required":true,"desc":"[Axis.horizontal] if [sizeFactor] modifies the width, otherwise [Axis.vertical]."},{"name":"axisAlignment","type":"double","required":true,"desc":"Describes how to align the child along the axis that [sizeFactor] is modifying."},{"name":"fixedCrossAxisSizeFactor","type":"double?","desc":"The factor by which to multiply the cross axis size of the child."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":92,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SizeTransition","desc":["【child】: Child component 【Widget】","【axis】: Axis*2 【Axis】","【sizeFactor】: Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_zh-CN.json deleted file mode 100644 index 562784e39..000000000 --- a/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SizeTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"对其自身大小进行动画处理并裁剪和对齐其子项。","fields":[{"name":"axis","type":"Axis","required":true,"desc":"如果 [sizeFactor] 修改宽度则为 [Axis.horizontal],否则为 [Axis.vertical]。"},{"name":"axisAlignment","type":"double","required":true,"desc":"描述如何沿着 [sizeFactor] 正在修改的轴对齐子项。"},{"name":"fixedCrossAxisSizeFactor","type":"double?","desc":"乘以子项交叉轴大小的因子。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":92,"localName":"尺寸变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SizeTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【axis】 : 轴向*2 【Axis】","【sizeFactor】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_en-US.json deleted file mode 100644 index c9a79ef03..000000000 --- a/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SizedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A box with a specified size.","fields":[{"name":"width","type":"double?","desc":"If non-null, requires the child to have exactly this width."},{"name":"height","type":"double?","desc":"If non-null, requires the child to have exactly this height."}],"id":76,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SizedBox","desc":["【child】 : Child component 【Widget】","【width】 : Width 【double】","【height】 : Height 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_zh-CN.json deleted file mode 100644 index e7941d7ff..000000000 --- a/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SizedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"具有指定大小的框。","fields":[{"name":"width","type":"double?","desc":"如果非空,要求子项具有确切的此宽度。"},{"name":"height","type":"double?","desc":"如果非空,要求子项具有确切的此高度。"}],"id":76,"localName":"定尺寸盒","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SizedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【width】 : 宽 【double】","【height】 : 高 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_en-US.json b/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_en-US.json deleted file mode 100644 index e0468096c..000000000 --- a/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SizedOverflowBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that is a specific size but passes its original constraints through to its child, which may then overflow.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the child."},{"name":"size","type":"Size","required":true,"desc":"The size this widget should attempt to be."}],"id":84,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SizedOverflowBox","desc":["【child】: Child component 【Widget】","【size】: Size offset 【Size】","【alignment】: Alignment method 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_zh-CN.json deleted file mode 100644 index ae9a63018..000000000 --- a/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SizedOverflowBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"具有特定大小但将其原始约束传递给其子项的小部件,然后子项可能会溢出。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何对齐子项。"},{"name":"size","type":"Size","required":true,"desc":"此小部件应尝试达到的大小。"}],"id":84,"localName":"尺寸溢出盒","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SizedOverflowBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【size】 : 尺寸偏移 【Size】","【alignment】 : 对齐方式 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_en-US.json deleted file mode 100644 index 2d89b8a45..000000000 --- a/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SlideTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animates the position of a widget relative to its normal position.","fields":[{"name":"textDirection","type":"TextDirection?","desc":"The direction to use for the x offset described by the [position]."},{"name":"transformHitTests","type":"bool","required":true,"desc":"Whether hit testing should be affected by the slide animation."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":112,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SlideTransition","desc":["【child】: Child component 【Widget】","【textDirection】: X-axis direction 【TextDirection】","【position】: Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_zh-CN.json deleted file mode 100644 index 8cafd2977..000000000 --- a/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SlideTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"相对于其正常位置对小部件位置进行动画处理。","fields":[{"name":"textDirection","type":"TextDirection?","desc":"用于 [position] 描述的 x 偏移的方向。"},{"name":"transformHitTests","type":"bool","required":true,"desc":"命中测试是否应受滑动动画影响。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":112,"localName":"滑动变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SlideTransition 基本使用","desc":["【child】 : 孩子组件 【Widget】","【textDirection】 : x轴方向 【TextDirection】","【position】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Slider/Slider_en-US.json b/modules/widget_system/widgets/doc/widgets/Slider/Slider_en-US.json deleted file mode 100644 index c7986489d..000000000 --- a/modules/widget_system/widgets/doc/widgets/Slider/Slider_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Slider","path":"/src/material/slider.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design slider.","fields":[{"name":"value","type":"double","required":true,"desc":"The currently selected value for this slider."},{"name":"secondaryTrackValue","type":"double?","desc":"The secondary track value for this slider."},{"name":"onChanged","type":"ValueChanged?","desc":"Called during a drag when the user is selecting a new value for the slider by dragging."},{"name":"onChangeStart","type":"ValueChanged?","desc":"Called when the user starts selecting a new value for the slider."},{"name":"onChangeEnd","type":"ValueChanged?","desc":"Called when the user is done selecting a new value for the slider."},{"name":"min","type":"double","required":true,"desc":"The minimum value the user can select."},{"name":"max","type":"double","required":true,"desc":"The maximum value the user can select."},{"name":"divisions","type":"int?","desc":"The number of discrete divisions."},{"name":"label","type":"String?","desc":"A label to show above the slider when the slider is active and [SliderThemeData.showValueIndicator] is satisfied."},{"name":"activeColor","type":"Color?","desc":"The color to use for the portion of the slider track that is active."},{"name":"inactiveColor","type":"Color?","desc":"The color for the inactive portion of the slider track."},{"name":"secondaryActiveColor","type":"Color?","desc":"The color to use for the portion of the slider track between the thumb and the [Slider.secondaryTrackValue]."},{"name":"thumbColor","type":"Color?","desc":"The color of the thumb."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The highlight color that's typically used to indicate that the slider thumb is focused, hovered, or dragged."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.slider.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"semanticFormatterCallback","type":"SemanticFormatterCallback?","desc":"The callback used to create a semantic value from a slider value."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"allowedInteraction","type":"SliderInteraction?","desc":"Allowed way for the user to interact with the [Slider]."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Determines the padding around the [Slider]."},{"name":"year2023","type":"bool?","desc":"When true, the [Slider] will use the 2023 Material Design 3 appearance. Defaults to true."}],"id":42,"lever":4,"family":1,"linkIds":[43,44,331],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Slider","desc":["【value】 : value 【double】","【min】 : minimum value 【double】","【max】 : maximum value 【double】","【activeColor】 : active color 【Color】","【inactiveColor】 : inactive color 【Color】","【onChanged】 : callback when changed 【Function(double)】"]},{"file":"node2_lable.dart","name":"Slider Segments and Labels","desc":["【divisions】 : number of segments 【int】","【label】 : tooltip text 【String】","【onChangeStart】 : listener when sliding starts 【Function(double)】","【onChangeEnd】 : listener when sliding ends 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Slider/Slider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Slider/Slider_zh-CN.json deleted file mode 100644 index a5593aea4..000000000 --- a/modules/widget_system/widgets/doc/widgets/Slider/Slider_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Slider","path":"/src/material/slider.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 滑块。","fields":[{"name":"value","type":"double","required":true,"desc":"此滑块当前选择的值。"},{"name":"secondaryTrackValue","type":"double?","desc":"此滑块的次要轨道值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户通过拖动为滑块选择新值时在拖动期间调用。"},{"name":"onChangeStart","type":"ValueChanged?","desc":"用户开始为滑块选择新值时调用。"},{"name":"onChangeEnd","type":"ValueChanged?","desc":"用户完成为滑块选择新值时调用。"},{"name":"min","type":"double","required":true,"desc":"用户可以选择的最小值。"},{"name":"max","type":"double","required":true,"desc":"用户可以选择的最大值。"},{"name":"divisions","type":"int?","desc":"离散分割的数量。"},{"name":"label","type":"String?","desc":"当滑块处于活动状态且满足 [SliderThemeData.showValueIndicator] 时在滑块上方显示的标签。"},{"name":"activeColor","type":"Color?","desc":"用于滑块轨道活动部分的颜色。"},{"name":"inactiveColor","type":"Color?","desc":"滑块轨道非活动部分的颜色。"},{"name":"secondaryActiveColor","type":"Color?","desc":"用于拇指和 [Slider.secondaryTrackValue] 之间滑块轨道部分的颜色。"},{"name":"thumbColor","type":"Color?","desc":"拇指的颜色。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"通常用于指示滑块拇指被聚焦、悬停或拖动的高亮颜色。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.slider.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"semanticFormatterCallback","type":"SemanticFormatterCallback?","desc":"用于从滑块值创建语义值的回调。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"allowedInteraction","type":"SliderInteraction?","desc":"用户与 [Slider] 交互的允许方式。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"确定 [Slider] 周围的内边距。"},{"name":"year2023","type":"bool?","desc":"当为 true 时,[Slider] 将使用 2023 Material Design 3 外观。默认为 true。"}],"id":42,"localName":"滑块","lever":4,"family":1,"linkIds":[43,44,331],"nodes":[{"file":"node1_base.dart","name":"Slider基本使用","desc":["【value】 : 数值 【double】","【min】 : 最小值 【double】","【max】 : 最大值 【double】","【activeColor】 : 激活颜色 【Color】","【inactiveColor】 : 非激活颜色 【Color】","【onChanged】 : 改变时回调 【Function(double)】"]},{"file":"node2_lable.dart","name":"Slider的分段与标签","desc":["【divisions】 : 分段数 【int】","【label】 : 提示气泡文字 【String】","【onChangeStart】 : 开始滑动时监听 【Function(double)】","【onChangeEnd】 : 滑动结束时监听 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_en-US.json deleted file mode 100644 index bfdfa8e08..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliderTheme","path":"/src/material/slider_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a slider theme to descendant [Slider] widgets.","fields":[{"name":"data","type":"SliderThemeData","required":true,"desc":"Specifies the color and shape values for descendant slider widgets."}],"id":331,"lever":3,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliderTheme Usage","desc":["You can obtain the Slider theme data object through SliderTheme.of, which contains a large number of properties for setting the Slider.","You can set the default style for the button components of ButtonTheme【descendants】, including color, shape, size, etc."]},{"file":"node2_diy.dart","name":"SliderTheme Customization for Slider","desc":["You can customize the style of the Slider through thumbShape and valueIndicatorShape.","Note: This example refers to the SlideDemo in flutter-gallery"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_zh-CN.json deleted file mode 100644 index 6f9cf02fb..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliderTheme","path":"/src/material/slider_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"将滑块主题应用于后代 [Slider] 小部件。","fields":[{"name":"data","type":"SliderThemeData","required":true,"desc":"指定后代滑块小部件的颜色和形状值。"}],"id":331,"localName":"滑块样式","lever":3,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliderTheme使用","desc":["可通过SliderTheme.of获取Slider主题数据对象,其中包含大量属性用于对Slider的设定。\"","可以为ButtonTheme【后代】的按钮组件设置默认样式,包括颜色、形状、尺寸等。"]},{"file":"node2_diy.dart","name":"SliderTheme对Slider的样式定制","desc":["通过thumbShape和valueIndicatorShape可以对Slider进行样式定制。\"","注: 本例参考flutter-gallery中的SlideDemo"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_en-US.json deleted file mode 100644 index 81752abd1..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverAnimatedGrid","path":"/src/widgets/animated_scroll_view.dart","parents":["_SliverAnimatedMultiBoxAdaptor","StatefulWidget","Widget"],"desc":" A [SliverGrid] that animates items when they are inserted or removed.","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"{@macro flutter.widgets.AnimatedGrid.gridDelegate}"}],"id":515,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_zh-CN.json deleted file mode 100644 index 9568fe492..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverAnimatedGrid","path":"/src/widgets/animated_scroll_view.dart","parents":["_SliverAnimatedMultiBoxAdaptor","StatefulWidget","Widget"],"desc":"在插入或删除项目时对其进行动画处理的 [SliverGrid]。","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"{@macro flutter.widgets.AnimatedGrid.gridDelegate}"}],"id":515,"localName":"SliverAnimatedGrid","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_en-US.json deleted file mode 100644 index 28ef9193c..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverAnimatedList","path":"/src/widgets/animated_scroll_view.dart","parents":["_SliverAnimatedMultiBoxAdaptor","StatefulWidget","Widget"],"desc":" A [SliverList] that animates items when they are inserted or removed.","fields":[],"id":301,"lever":3,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverAnimatedList","desc":["【itemBuilder】: Item builder 【AnimatedListItemBuilder】","【initialItemCount】: Initial item count 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_zh-CN.json deleted file mode 100644 index c9bc46a49..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverAnimatedList","path":"/src/widgets/animated_scroll_view.dart","parents":["_SliverAnimatedMultiBoxAdaptor","StatefulWidget","Widget"],"desc":"在插入或删除项目时对其进行动画处理的 [SliverList]。","fields":[],"id":301,"localName":"Sliver动画列表","lever":3,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"SliverAnimatedList基本使用","desc":["【itemBuilder】 : item构造器 【AnimatedListItemBuilder】","【initialItemCount】 : 初始item个数 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_en-US.json deleted file mode 100644 index 1b8eab9ec..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverAnimatedOpacity","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [SliverOpacity] which automatically transitions the sliver child's opacity over a given duration whenever the given opacity changes.","fields":[{"name":"sliver","type":"Widget?","desc":"The sliver below this widget in the tree."},{"name":"opacity","type":"double","required":true,"desc":"The target opacity."},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"Whether the semantic information of the children is always included."}],"id":516,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_zh-CN.json deleted file mode 100644 index 0780a70b7..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverAnimatedOpacity","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[SliverOpacity] 的动画版本,每当给定的不透明度发生变化时,会在给定的持续时间内自动过渡 sliver 子项的不透明度。","fields":[{"name":"sliver","type":"Widget?","desc":"树中此小部件下方的 sliver。"},{"name":"opacity","type":"double","required":true,"desc":"目标不透明度。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含子项的语义信息。"}],"id":516,"localName":"SliverAnimatedOpacity","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_en-US.json deleted file mode 100644 index 00d1147d9..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverAppBar","path":"/src/material/app_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design app bar that integrates with a [CustomScrollView].","fields":[{"name":"leading","type":"Widget?","desc":"{@macro flutter.material.appbar.leading}"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.automaticallyImplyLeading}"},{"name":"title","type":"Widget?","desc":"{@macro flutter.material.appbar.title}"},{"name":"actions","type":"List?","desc":"{@macro flutter.material.appbar.actions}"},{"name":"flexibleSpace","type":"Widget?","desc":"{@macro flutter.material.appbar.flexibleSpace}"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"{@macro flutter.material.appbar.bottom}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.appbar.elevation}"},{"name":"scrolledUnderElevation","type":"double?","desc":"{@macro flutter.material.appbar.scrolledUnderElevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.appbar.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.appbar.surfaceTintColor}"},{"name":"forceElevated","type":"bool","required":true,"desc":"Whether to show the shadow appropriate for the [elevation] even if the content is not scrolled under the [AppBar]."},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.appbar.backgroundColor}"},{"name":"foregroundColor","type":"Color?","desc":"{@macro flutter.material.appbar.foregroundColor}"},{"name":"iconTheme","type":"IconThemeData?","desc":"{@macro flutter.material.appbar.iconTheme}"},{"name":"actionsIconTheme","type":"IconThemeData?","desc":"{@macro flutter.material.appbar.actionsIconTheme}"},{"name":"primary","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.primary}"},{"name":"centerTitle","type":"bool?","desc":"{@macro flutter.material.appbar.centerTitle}"},{"name":"excludeHeaderSemantics","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.excludeHeaderSemantics}"},{"name":"titleSpacing","type":"double?","desc":"{@macro flutter.material.appbar.titleSpacing}"},{"name":"collapsedHeight","type":"double?","desc":"Defines the height of the app bar when it is collapsed."},{"name":"expandedHeight","type":"double?","desc":"The size of the app bar when it is fully expanded."},{"name":"floating","type":"bool","required":true,"desc":"Whether the app bar should become visible as soon as the user scrolls towards the app bar."},{"name":"pinned","type":"bool","required":true,"desc":"Whether the app bar should remain visible at the start of the scroll view."},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.appbar.shape}"},{"name":"snap","type":"bool","required":true,"desc":"If [snap] and [floating] are true then the floating app bar will \"snap\" into view."},{"name":"stretch","type":"bool","required":true,"desc":"Whether the app bar should stretch to fill the over-scroll area."},{"name":"stretchTriggerOffset","type":"double","required":true,"desc":"The offset of overscroll required to activate [onStretchTrigger]."},{"name":"onStretchTrigger","type":"AsyncCallback?","desc":"The callback function to be executed when a user over-scrolls to the offset specified by [stretchTriggerOffset]."},{"name":"toolbarHeight","type":"double","required":true,"desc":"{@macro flutter.material.appbar.toolbarHeight}"},{"name":"leadingWidth","type":"double?","desc":"{@macro flutter.material.appbar.leadingWidth}"},{"name":"toolbarTextStyle","type":"TextStyle?","desc":"{@macro flutter.material.appbar.toolbarTextStyle}"},{"name":"titleTextStyle","type":"TextStyle?","desc":"{@macro flutter.material.appbar.titleTextStyle}"},{"name":"systemOverlayStyle","type":"SystemUiOverlayStyle?","desc":"{@macro flutter.material.appbar.systemOverlayStyle}"},{"name":"forceMaterialTransparency","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.forceMaterialTransparency}"},{"name":"useDefaultSemanticsOrder","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.useDefaultSemanticsOrder}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"{@macro flutter.material.appbar.actionsPadding}"}],"id":184,"lever":4,"family":4,"linkIds":[183,196],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverAppBar","desc":["【leading】: Left component 【Widget】","【title】: Center component 【Widget】","【actions】: List of trailing components 【List】","【floating】: Whether to float 【bool】","【pinned】: Whether to stay at the top 【bool】","【snap】: Whether to semi-collapse 【bool】","【bottom】: Bottom component 【PreferredSizeWidget】","【expandedHeight】: Expanded height 【double】","【elevation】: Shadow depth 【double】","【flexibleSpace】: Expanded space 【FlexibleSpaceBar】","【backgroundColor】: Background color 【Color】","【controller】: Controller 【ScrollController】"," When snap is true, floating must be true"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_zh-CN.json deleted file mode 100644 index 54f9b2075..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverAppBar","path":"/src/material/app_bar.dart","parents":["StatefulWidget","Widget"],"desc":"与 [CustomScrollView] 集成的 Material Design 应用栏。","fields":[{"name":"leading","type":"Widget?","desc":"{@macro flutter.material.appbar.leading}"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.automaticallyImplyLeading}"},{"name":"title","type":"Widget?","desc":"{@macro flutter.material.appbar.title}"},{"name":"actions","type":"List?","desc":"{@macro flutter.material.appbar.actions}"},{"name":"flexibleSpace","type":"Widget?","desc":"{@macro flutter.material.appbar.flexibleSpace}"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"{@macro flutter.material.appbar.bottom}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.appbar.elevation}"},{"name":"scrolledUnderElevation","type":"double?","desc":"{@macro flutter.material.appbar.scrolledUnderElevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.appbar.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.appbar.surfaceTintColor}"},{"name":"forceElevated","type":"bool","required":true,"desc":"即使内容未滚动到 [AppBar] 下方,是否显示适合 [elevation] 的阴影。"},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.appbar.backgroundColor}"},{"name":"foregroundColor","type":"Color?","desc":"{@macro flutter.material.appbar.foregroundColor}"},{"name":"iconTheme","type":"IconThemeData?","desc":"{@macro flutter.material.appbar.iconTheme}"},{"name":"actionsIconTheme","type":"IconThemeData?","desc":"{@macro flutter.material.appbar.actionsIconTheme}"},{"name":"primary","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.primary}"},{"name":"centerTitle","type":"bool?","desc":"{@macro flutter.material.appbar.centerTitle}"},{"name":"excludeHeaderSemantics","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.excludeHeaderSemantics}"},{"name":"titleSpacing","type":"double?","desc":"{@macro flutter.material.appbar.titleSpacing}"},{"name":"collapsedHeight","type":"double?","desc":"定义应用栏折叠时的高度。"},{"name":"expandedHeight","type":"double?","desc":"应用栏完全展开时的大小。"},{"name":"floating","type":"bool","required":true,"desc":"用户向应用栏滚动时应用栏是否应立即变为可见。"},{"name":"pinned","type":"bool","required":true,"desc":"应用栏是否应在滚动视图的开始处保持可见。"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.appbar.shape}"},{"name":"snap","type":"bool","required":true,"desc":"如果 [snap] 和 [floating] 都为 true,则浮动应用栏将"},{"name":"stretch","type":"bool","required":true,"desc":"应用栏是否应拉伸以填充过度滚动区域。"},{"name":"stretchTriggerOffset","type":"double","required":true,"desc":"激活 [onStretchTrigger] 所需的过度滚动偏移。"},{"name":"onStretchTrigger","type":"AsyncCallback?","desc":"当用户过度滚动到 [stretchTriggerOffset] 指定的偏移时要执行的回调函数。"},{"name":"toolbarHeight","type":"double","required":true,"desc":"{@macro flutter.material.appbar.toolbarHeight}"},{"name":"leadingWidth","type":"double?","desc":"{@macro flutter.material.appbar.leadingWidth}"},{"name":"toolbarTextStyle","type":"TextStyle?","desc":"{@macro flutter.material.appbar.toolbarTextStyle}"},{"name":"titleTextStyle","type":"TextStyle?","desc":"{@macro flutter.material.appbar.titleTextStyle}"},{"name":"systemOverlayStyle","type":"SystemUiOverlayStyle?","desc":"{@macro flutter.material.appbar.systemOverlayStyle}"},{"name":"forceMaterialTransparency","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.forceMaterialTransparency}"},{"name":"useDefaultSemanticsOrder","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.useDefaultSemanticsOrder}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"{@macro flutter.material.appbar.actionsPadding}"}],"id":184,"localName":"Sliver头部栏","lever":4,"family":4,"linkIds":[183,196],"nodes":[{"file":"node1_base.dart","name":"SliverAppBar基本使用","desc":["【leading】 : 左侧组件 【Widget】","【title】 : 中间组件 【Widget】","【actions】 : 尾部组件列表 【List】","【floating】 : 是否浮动 【bool】","【pinned】 : 是否顶部停留 【bool】","【snap】 : 是否半收展 【bool】","【bottom】 : 底部组件 【PreferredSizeWidget】","【expandedHeight】 : 延展高度 【double】","【elevation】 : 影深 【double】","【flexibleSpace】 : 延展空间 【FlexibleSpaceBar】","【backgroundColor】 : 背景色 【Color】","【controller】 : 控制器 【ScrollController】"," snap为true时必需floating为true"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_en-US.json deleted file mode 100644 index 3955f9dbb..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverConstrainedCrossAxis","path":"/src/widgets/sliver.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver that constrains the cross axis extent of its sliver child.","fields":[{"name":"maxExtent","type":"double","required":true,"desc":"The cross axis extent to apply to the sliver child."},{"name":"sliver","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":270,"lever":3,"family":4,"linkIds":[269,271],"nodes":[{"file":"node1.dart","name":"Basic Usage of SliverConstrainedCrossAxis","desc":["【maxExtent】 : size 【double】","【sliver】 : child component 【Widget?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_zh-CN.json deleted file mode 100644 index 8312d9afd..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverConstrainedCrossAxis","path":"/src/widgets/sliver.dart","parents":["StatelessWidget","Widget"],"desc":"约束其 sliver 子项交叉轴范围的 sliver。","fields":[{"name":"maxExtent","type":"double","required":true,"desc":"应用于 sliver 子项的交叉轴范围。"},{"name":"sliver","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":270,"localName":"交叉轴尺寸约束滑片","lever":3,"family":4,"linkIds":[269,271],"nodes":[{"file":"node1.dart","name":"SliverConstrainedCrossAxis 基本使用","desc":["【maxExtent】 : 大小 【double】","【sliver】 : 子组件 【Widget?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_en-US.json deleted file mode 100644 index 3503c7040..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverCrossAxisExpanded","path":"/src/widgets/sliver.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":" Set a flex factor for allocating space in the cross axis direction.","fields":[{"name":"flex","type":"int","required":true,"desc":"Flex value for allocating cross axis extent left after laying out the children with constrained cross axis. The children with flex values will have the remaining extent allocated proportionally to their flex value. This must an integer between 0 and infinity, exclusive."}],"id":271,"lever":3,"family":4,"linkIds":[269,270],"nodes":[{"file":"node1.dart","name":"Basic Usage of SliverCrossAxisExpanded","desc":["【flex】: Ratio 【int】","【sliver】: Child Component 【Widget?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_zh-CN.json deleted file mode 100644 index 906f36ccc..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverCrossAxisExpanded","path":"/src/widgets/sliver.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":"为在交叉轴方向分配空间设置弹性因子。","fields":[{"name":"flex","type":"int","required":true,"desc":"在布局具有约束交叉轴的子项后,用于分配剩余交叉轴范围的弹性值。具有弹性值的子项将按其弹性值的比例分配剩余范围。这必须是 0 和无穷大之间的整数,不包括边界。"}],"id":271,"localName":"交叉轴延展滑片","lever":3,"family":4,"linkIds":[269,270],"nodes":[{"file":"node1.dart","name":"SliverCrossAxisExpanded 基本使用","desc":["【flex】 : 占比 【int】","【sliver】 : 子组件 【Widget?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_en-US.json deleted file mode 100644 index ebc1142be..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverCrossAxisGroup","path":"/src/widgets/sliver.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places multiple sliver children in a linear array along the cross axis.","fields":[],"id":269,"lever":4,"family":4,"linkIds":[268,270,271],"nodes":[{"file":"node1.dart","name":"Basic Usage of SliverCrossAxisGroup","desc":["【slivers】 : List of child components 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_zh-CN.json deleted file mode 100644 index 65ef43c2d..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverCrossAxisGroup","path":"/src/widgets/sliver.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"沿交叉轴将多个 sliver 子项放置在线性数组中的 sliver。","fields":[],"id":269,"localName":"交叉轴滑片组","lever":4,"family":4,"linkIds":[268,270,271],"nodes":[{"file":"node1.dart","name":"SliverCrossAxisGroup 基本使用","desc":["【slivers】 : 子组件列表 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_en-US.json deleted file mode 100644 index b160b0c05..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverEnsureSemantics","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that ensures its sliver child is included in the semantics tree.","fields":[],"id":517,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_zh-CN.json deleted file mode 100644 index a37fd2e91..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverEnsureSemantics","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"确保其 sliver 子项包含在语义树中的 sliver。","fields":[],"id":517,"localName":"SliverEnsureSemantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_en-US.json deleted file mode 100644 index 094d6a625..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFadeTransition","path":"/src/widgets/transitions.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Animates the opacity of a sliver widget.","fields":[{"name":"opacity","type":"Animation","required":true,"desc":"The animation that controls the opacity of the sliver child."},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"Whether the semantic information of the sliver child is always included."}],"id":518,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_zh-CN.json deleted file mode 100644 index e9cb22cc6..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFadeTransition","path":"/src/widgets/transitions.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对 sliver 小部件的不透明度进行动画处理。","fields":[{"name":"opacity","type":"Animation","required":true,"desc":"控制 sliver 子项不透明度的动画。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含 sliver 子项的语义信息。"}],"id":518,"localName":"SliverFadeTransition","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_en-US.json deleted file mode 100644 index c5d99260e..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFillRemaining","path":"/src/widgets/sliver_fill.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver that contains a single box child that fills the remaining space in the viewport.","fields":[{"name":"child","type":"Widget?","desc":"Box child widget that fills the remaining space in the viewport."},{"name":"hasScrollBody","type":"bool","required":true,"desc":"Indicates whether the child has a scrollable body, this value cannot be null."},{"name":"fillOverscroll","type":"bool","required":true,"desc":"Indicates whether the child should stretch to fill the overscroll area created by certain scroll physics, such as iOS' default scroll physics. This flag is only relevant when [hasScrollBody] is false."}],"id":306,"lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverFillRemaining","desc":["【hasScrollBody】: Whether it has a scroll body 【bool】","【fillOverscroll】: Whether it can fill the scroll area 【bool】","【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_zh-CN.json deleted file mode 100644 index b7279821a..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFillRemaining","path":"/src/widgets/sliver_fill.dart","parents":["StatelessWidget","Widget"],"desc":"包含单个框子项的 sliver,该子项填充视口中的剩余空间。","fields":[{"name":"child","type":"Widget?","desc":"填充视口中剩余空间的框子小部件。"},{"name":"hasScrollBody","type":"bool","required":true,"desc":"指示子项是否具有可滚动主体,此值不能为 null。"},{"name":"fillOverscroll","type":"bool","required":true,"desc":"指示子项是否应拉伸以填充由某些滚动物理(如 iOS 的默认滚动物理)创建的过度滚动区域。此标志仅在 [hasScrollBody] 为 false 时相关。"}],"id":306,"localName":"Sliver填补剩余","lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"SliverFillRemaining基本使用","desc":["【hasScrollBody】 : 是否具有滚动主体 【bool】","【fillOverscroll】 : 是否可填充滚动区域 【bool】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_en-US.json deleted file mode 100644 index efcc4c668..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFillViewport","path":"/src/widgets/sliver_fill.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver that contains multiple box children that each fills the viewport.","fields":[{"name":"viewportFraction","type":"double","required":true,"desc":"The fraction of the viewport that each child should fill in the main axis."},{"name":"padEnds","type":"bool","required":true,"desc":"Whether to add padding to both ends of the list."},{"name":"delegate","type":"SliverChildDelegate","required":true,"desc":"{@macro flutter.widgets.SliverMultiBoxAdaptorWidget.delegate}"}],"id":187,"lever":3,"family":4,"linkIds":[183,185,186],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverFillViewport","desc":["【viewportFraction】 : Viewport Fraction 【double】","【delegate】 : Child Delegate 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_zh-CN.json deleted file mode 100644 index 99c1c7c7a..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFillViewport","path":"/src/widgets/sliver_fill.dart","parents":["StatelessWidget","Widget"],"desc":"包含多个框子项的 sliver,每个子项都填充视口。","fields":[{"name":"viewportFraction","type":"double","required":true,"desc":"每个子项在主轴上应填充的视口分数。"},{"name":"padEnds","type":"bool","required":true,"desc":"是否在列表的两端添加内边距。"},{"name":"delegate","type":"SliverChildDelegate","required":true,"desc":"{@macro flutter.widgets.SliverMultiBoxAdaptorWidget.delegate}"}],"id":187,"localName":"Sliver填充视图列表","lever":3,"family":4,"linkIds":[183,185,186],"nodes":[{"file":"node1_base.dart","name":"SliverFillViewport基本使用","desc":["【viewportFraction】 : 视口分率 【double】","【delegate】 : 孩子代理 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_en-US.json deleted file mode 100644 index cdd0fd4a5..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFixedExtentList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places multiple box children with the same main axis extent in a linear array.","fields":[{"name":"itemExtent","type":"double","required":true,"desc":"The extent the children are forced to have in the main axis."}],"id":186,"lever":3,"family":4,"linkIds":[183,185,187],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverFixedExtentList","desc":["【itemExtent】: Forced length in the main axis 【double】","【delegate】: Child delegate 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_zh-CN.json deleted file mode 100644 index 8ed879c4c..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFixedExtentList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"在线性数组中放置具有相同主轴范围的多个框子项的 sliver。","fields":[{"name":"itemExtent","type":"double","required":true,"desc":"子项在主轴上被强制具有的范围。"}],"id":186,"localName":"Sliver固定延展列表","lever":3,"family":4,"linkIds":[183,185,187],"nodes":[{"file":"node1_base.dart","name":"SliverFixedExtentList基本使用","desc":["【itemExtent】 : 主轴方向强迫长度 【double】","【delegate】 : 孩子代理 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_en-US.json deleted file mode 100644 index a2c4dc1e6..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFloatingHeader","path":"/src/widgets/sliver_floating_header.dart","parents":["StatefulWidget","Widget"],"desc":" A sliver that shows its [child] when the user scrolls forward and hides it when the user scrolls backwards.","fields":[{"name":"animationStyle","type":"AnimationStyle?","desc":"Non null properties override the default durations (300ms) and curves (Curves.easeInOut) for subsequent header animations."},{"name":"snapMode","type":"FloatingHeaderSnapMode?","desc":"Specifies how a partially visible [SliverFloatingHeader] animates into a view when a user scroll gesture ends."},{"name":"child","type":"Widget","required":true,"desc":"The widget contained by this sliver."}],"id":519,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_zh-CN.json deleted file mode 100644 index aaa6197f3..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFloatingHeader","path":"/src/widgets/sliver_floating_header.dart","parents":["StatefulWidget","Widget"],"desc":"当用户向前滚动时显示其 [child],当用户向后滚动时隐藏它的 sliver。","fields":[{"name":"animationStyle","type":"AnimationStyle?","desc":"非空属性覆盖后续标题动画的默认持续时间(300ms)和曲线(Curves.easeInOut)。"},{"name":"snapMode","type":"FloatingHeaderSnapMode?","desc":"指定当用户滚动手势结束时,部分可见的 [SliverFloatingHeader] 如何动画进入视图。"},{"name":"child","type":"Widget","required":true,"desc":"此 sliver 包含的小部件。"}],"id":519,"localName":"SliverFloatingHeader","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_en-US.json deleted file mode 100644 index 5b76afbba..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverGrid","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places multiple box children in a two dimensional arrangement.","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"The delegate that controls the size and position of the children."}],"id":188,"lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverList","desc":["SliverGrid.count constructs with specified axial count","SliverGrid.extent constructs with specified axial length","The attribute characteristics are the same as GridView, see it for details"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_zh-CN.json deleted file mode 100644 index a6e47ce8d..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverGrid","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"在二维排列中放置多个框子项的 sliver。","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"控制子项大小和位置的委托。"}],"id":188,"localName":"Sliver网格","lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliverList基本使用","desc":["SliverGrid.count 指定轴向数量构造","SliverGrid.extent 指定轴向长度构造","属性特征同GridView,可详见之"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_en-US.json deleted file mode 100644 index 8ac528d78..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverIgnorePointer","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver widget that is invisible during hit testing.","fields":[{"name":"ignoring","type":"bool","required":true,"desc":"Whether this sliver is ignored during hit testing."},{"name":"ignoringSemantics","type":"bool?","desc":"Whether the semantics of this sliver is ignored when compiling the semantics tree."}],"id":305,"lever":3,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverIgnorePointer","desc":["【sliver】: sliver component 【Widget】","【ignoring】: whether to ignore events 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_zh-CN.json deleted file mode 100644 index 573292b3d..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverIgnorePointer","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在命中测试期间不可见的 sliver 小部件。","fields":[{"name":"ignoring","type":"bool","required":true,"desc":"此 sliver 在命中测试期间是否被忽略。"},{"name":"ignoringSemantics","type":"bool?","desc":"编译语义树时是否忽略此 sliver 的语义。"}],"id":305,"localName":"Sliver忽略事件","lever":3,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"SliverIgnorePointer基本使用","desc":["【sliver】 : sliver组件 【Widget】","【ignoring】 : 是否忽略事件 【bool】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_en-US.json deleted file mode 100644 index c8db5c945..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverLayoutBuilder","path":"/src/widgets/sliver_layout_builder.dart","parents":["ConstrainedLayoutBuilder","AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":" Builds a sliver widget tree that can depend on its own [SliverConstraints].","fields":[],"id":304,"lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverLayoutBuilder","desc":["【builder】: Component Builder 【SliverLayoutWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_zh-CN.json deleted file mode 100644 index 12c9fdb40..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverLayoutBuilder","path":"/src/widgets/sliver_layout_builder.dart","parents":["ConstrainedLayoutBuilder","AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":"构建可以依赖于其自身 [SliverConstraints] 的 sliver 小部件树。","fields":[],"id":304,"localName":"Sliver布局构造器","lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"SliverLayoutBuilder基本使用","desc":["【builder】 : 组件构造器 【SliverLayoutWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_en-US.json deleted file mode 100644 index 2fe27d68a..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places multiple box children in a linear array along the main axis.","fields":[],"id":185,"lever":5,"family":4,"linkIds":[183,186,187],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverList","desc":["【delegate】: Child delegate 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_zh-CN.json deleted file mode 100644 index c0328a173..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"沿主轴在线性数组中放置多个框子项的 sliver。","fields":[],"id":185,"localName":"Sliver列表","lever":5,"family":4,"linkIds":[183,186,187],"nodes":[{"file":"node1_base.dart","name":"SliverList基本使用","desc":["【delegate】 : 孩子代理 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_en-US.json deleted file mode 100644 index eac1101f4..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverMainAxisGroup","path":"/src/widgets/sliver.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places multiple sliver children in a linear array along the main axis, one after another.","fields":[],"id":268,"lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1.dart","name":"Basic Usage of SliverMainAxisGroup","desc":["【slivers】: List of child components 【List】","Can be combined with SliverPersistentHeader to achieve grouping and sticky header effects."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_zh-CN.json deleted file mode 100644 index 21f28dd53..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverMainAxisGroup","path":"/src/widgets/sliver.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"沿主轴在线性数组中一个接一个地放置多个 sliver 子项的 sliver。","fields":[],"id":268,"localName":"主轴滑片组","lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1.dart","name":"SliverMainAxisGroup 基本使用","desc":["【slivers】 : 子组件列表 【List】","可结合 SliverPersistentHeader 实现分组,标题吸顶效果。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_en-US.json deleted file mode 100644 index e0b658725..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverMultiBoxAdaptorWidget","path":"/src/widgets/sliver.dart","abstract":true,"parents":["SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A base class for slivers that have multiple box children.","fields":[{"name":"delegate","type":"SliverChildDelegate","required":true,"desc":"{@template flutter.widgets.SliverMultiBoxAdaptorWidget.delegate} The delegate that provides the children for this widget."}],"id":520,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_zh-CN.json deleted file mode 100644 index 8dfe5b07e..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverMultiBoxAdaptorWidget","path":"/src/widgets/sliver.dart","abstract":true,"parents":["SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"具有多个框子项的 sliver 的基类。","fields":[{"name":"delegate","type":"SliverChildDelegate","required":true,"desc":"{@template flutter.widgets.SliverMultiBoxAdaptorWidget.delegate} 为此小部件提供子项的委托。"}],"id":520,"localName":"SliverMultiBoxAdaptorWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_en-US.json deleted file mode 100644 index 6ad6554cb..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverOffstage","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that lays its sliver child out as if it was in the tree, but without painting anything, without making the sliver child available for hit testing, and without taking any room in the parent.","fields":[{"name":"offstage","type":"bool","required":true,"desc":"Whether the sliver child is hidden from the rest of the tree."}],"id":521,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_zh-CN.json deleted file mode 100644 index 0355edc39..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverOffstage","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其 sliver 子项布局为好像它在树中,但不绘制任何内容,不使 sliver 子项可用于命中测试,并且不在父项中占用任何空间的 sliver。","fields":[{"name":"offstage","type":"bool","required":true,"desc":"sliver 子项是否从树的其余部分隐藏。"}],"id":521,"localName":"SliverOffstage","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_en-US.json deleted file mode 100644 index 10b997d9d..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverOpacity","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver widget that makes its sliver child partially transparent.","fields":[{"name":"opacity","type":"double","required":true,"desc":"The fraction to scale the sliver child's alpha value."},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"Whether the semantic information of the sliver child is always included."}],"id":192,"lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverOpacity","desc":["【opacity】: Opacity 【double】","【sliver】: Child Component 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_zh-CN.json deleted file mode 100644 index 718fb92d3..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverOpacity","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使其 sliver 子项部分透明的 sliver 小部件。","fields":[{"name":"opacity","type":"double","required":true,"desc":"缩放 sliver 子项 alpha 值的分数。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含 sliver 子项的语义信息。"}],"id":192,"localName":"Sliver透明度","lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliverOpacity基本使用","desc":["【opacity】 : 透明度 【double】","【sliver】 : 子组件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_en-US.json deleted file mode 100644 index 04c0faf4f..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverOverlapAbsorber","path":"/src/widgets/nested_scroll_view.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that wraps another, forcing its layout extent to be treated as overlap.","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"The object in which the absorbed overlap is recorded."}],"id":307,"lever":3,"family":4,"linkIds":[251,308],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverOverlapAbsorber","desc":["【sliver】 : Child component 【Widget】","【handle】 : *Handler 【SliverOverlapAbsorberHandle】","If the SliverOverlapAbsorber and SliverOverlapInjector components are not used, the content of the NestedScrollView will overlap with the header bar."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_zh-CN.json deleted file mode 100644 index fedbebee3..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverOverlapAbsorber","path":"/src/widgets/nested_scroll_view.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"包装另一个 sliver 的 sliver,强制其布局范围被视为重叠。","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"记录吸收重叠的对象。"}],"id":307,"localName":"重叠吸收器","lever":3,"family":4,"linkIds":[251,308],"nodes":[{"file":"node1_base.dart","name":"SliverOverlapAbsorber基本使用","desc":["【sliver】 : 子组件 【Widget】","【handle】 : *处理器 【SliverOverlapAbsorberHandle】","如果不使用SliverOverlapAbsorber和SliverOverlapInjector组件,NestedScrollView的内容会和头部栏重叠。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_en-US.json deleted file mode 100644 index eac702756..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverOverlapInjector","path":"/src/widgets/nested_scroll_view.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that has a sliver geometry based on the values stored in a [SliverOverlapAbsorberHandle].","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"The handle to the [SliverOverlapAbsorber] that is feeding this injector."}],"id":308,"lever":3,"family":4,"linkIds":[251,307],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverOverlapInjector","desc":["【sliver】 : Child component 【Widget】","【handle】 : *Handler 【SliverOverlapAbsorberHandle】","If the SliverOverlapAbsorber and SliverOverlapInjector components are not used, the content of the NestedScrollView will overlap with the header bar."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_zh-CN.json deleted file mode 100644 index 4b31d62ca..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverOverlapInjector","path":"/src/widgets/nested_scroll_view.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"具有基于存储在 [SliverOverlapAbsorberHandle] 中的值的 sliver 几何形状的 sliver。","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"正在为此注入器提供数据的 [SliverOverlapAbsorber] 的句柄。"}],"id":308,"localName":"重叠注射器","lever":3,"family":4,"linkIds":[251,307],"nodes":[{"file":"node1_base.dart","name":"SliverOverlapInjector基本使用","desc":["【sliver】 : 子组件 【Widget】","【handle】 : *处理器 【SliverOverlapAbsorberHandle】","如果不使用SliverOverlapAbsorber和SliverOverlapInjector组件,NestedScrollView的内容会和头部栏重叠。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_en-US.json deleted file mode 100644 index d3c7c11ec..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverPadding","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that applies padding on each side of another sliver.","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the child sliver."}],"id":191,"lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverPadding","desc":["【sliver】: Child component 【Widget】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_zh-CN.json deleted file mode 100644 index 08606b41c..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverPadding","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在另一个 sliver 的每一侧应用内边距的 sliver。","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"插入子 sliver 的空间量。"}],"id":191,"localName":"Sliver内间距","lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliverPadding基本使用","desc":["【sliver】 : 子组件 【Widget】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_en-US.json deleted file mode 100644 index 1100aeff9..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverPersistentHeader","path":"/src/widgets/sliver_persistent_header.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver whose size varies when the sliver is scrolled to the edge of the viewport opposite the sliver's [GrowthDirection].","fields":[{"name":"delegate","type":"SliverPersistentHeaderDelegate","required":true,"desc":"Configuration for the sliver's layout."},{"name":"pinned","type":"bool","required":true,"desc":"Whether to stick the header to the start of the viewport once it has reached its minimum size."},{"name":"floating","type":"bool","required":true,"desc":"Whether the header should immediately grow again if the user reverses scroll direction."}],"id":190,"lever":5,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverPersistentHeader","desc":["【delegate】: Delegate 【SliverPersistentHeaderDelegate】","【floating】: Whether to float 【bool】","【pinned】: Whether to stay at the top 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_zh-CN.json deleted file mode 100644 index ee3ef1df8..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverPersistentHeader","path":"/src/widgets/sliver_persistent_header.dart","parents":["StatelessWidget","Widget"],"desc":"当 sliver 滚动到与 sliver 的 [GrowthDirection] 相对的视口边缘时,其大小会发生变化的 sliver。","fields":[{"name":"delegate","type":"SliverPersistentHeaderDelegate","required":true,"desc":"sliver 布局的配置。"},{"name":"pinned","type":"bool","required":true,"desc":"标题达到最小大小后是否粘贴到视口的开始处。"},{"name":"floating","type":"bool","required":true,"desc":"如果用户反转滚动方向,标题是否应立即再次增长。"}],"id":190,"localName":"吸顶滑片","lever":5,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliverPersistentHeader基本使用","desc":["【delegate】 : 代理 【SliverPersistentHeaderDelegate】","【floating】 : 是否浮动 【bool】","【pinned】 : 是否顶部停留 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_en-US.json deleted file mode 100644 index 82caa0f14..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverPrototypeExtentList","path":"/src/widgets/sliver_prototype_extent_list.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places its box children in a linear array and constrains them to have the same extent as a prototype item along the main axis.","fields":[{"name":"prototypeItem","type":"Widget","required":true,"desc":"Defines the main axis extent of all of this sliver's children."}],"id":314,"lever":2,"family":4,"linkIds":[185,186],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverPrototypeExtentList","desc":["【prototypeItem】 : Main axis size component 【Widget】","【delegate】 : Child delegate 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_zh-CN.json deleted file mode 100644 index 242b525e9..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverPrototypeExtentList","path":"/src/widgets/sliver_prototype_extent_list.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"将其框子项放置在线性数组中并约束它们沿主轴具有与原型项目相同范围的 sliver。","fields":[{"name":"prototypeItem","type":"Widget","required":true,"desc":"定义此 sliver 所有子项的主轴范围。"}],"id":314,"localName":"Sliver原型延伸列表","lever":2,"family":4,"linkIds":[185,186],"nodes":[{"file":"node1_base.dart","name":"SliverPrototypeExtentList基本使用","desc":["【prototypeItem】 : 主轴方向尺寸组件 【Widget】","【delegate】 : 孩子代理 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_en-US.json deleted file mode 100644 index bda82bcd6..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverReorderableList","path":"/src/widgets/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":" A sliver list that allows the user to interactively reorder the list items.","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemBuilder}"},{"name":"findChildIndexCallback","type":"ChildIndexGetter?","desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.findChildIndexCallback}"},{"name":"itemCount","type":"int","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemCount}"},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@macro flutter.widgets.reorderable_list.onReorder}"},{"name":"onReorderStart","type":"void Function(int)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderStart}"},{"name":"onReorderEnd","type":"void Function(int)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderEnd}"},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@macro flutter.widgets.reorderable_list.proxyDecorator}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double","required":true,"desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@macro flutter.widgets.reorderable_list.dragBoundaryProvider}"}],"id":522,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_zh-CN.json deleted file mode 100644 index 0c7b192d8..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverReorderableList","path":"/src/widgets/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":"允许用户交互式重新排序列表项的 sliver 列表。","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemBuilder}"},{"name":"findChildIndexCallback","type":"ChildIndexGetter?","desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.findChildIndexCallback}"},{"name":"itemCount","type":"int","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemCount}"},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@macro flutter.widgets.reorderable_list.onReorder}"},{"name":"onReorderStart","type":"void Function(int)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderStart}"},{"name":"onReorderEnd","type":"void Function(int)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderEnd}"},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@macro flutter.widgets.reorderable_list.proxyDecorator}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double","required":true,"desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@macro flutter.widgets.reorderable_list.dragBoundaryProvider}"}],"id":522,"localName":"SliverReorderableList","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_en-US.json deleted file mode 100644 index c0583a6ce..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverResizingHeader","path":"/src/widgets/sliver_resizing_header.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver that is pinned to the start of its [CustomScrollView] and reacts to scrolling by resizing between the intrinsic sizes of its min and max extent prototypes.","fields":[{"name":"minExtentPrototype","type":"Widget?","desc":"Laid out once to define the minimum size of this sliver along the [CustomScrollView.scrollDirection] axis."},{"name":"maxExtentPrototype","type":"Widget?","desc":"Laid out once to define the maximum size of this sliver along the [CustomScrollView.scrollDirection] axis."},{"name":"child","type":"Widget?","desc":"The widget contained by this sliver."}],"id":523,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_zh-CN.json deleted file mode 100644 index 4c033cae4..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverResizingHeader","path":"/src/widgets/sliver_resizing_header.dart","parents":["StatelessWidget","Widget"],"desc":"固定到其 [CustomScrollView] 开始处并通过在其最小和最大范围原型的内在大小之间调整大小来响应滚动的 sliver。","fields":[{"name":"minExtentPrototype","type":"Widget?","desc":"布局一次以定义此 sliver 沿 [CustomScrollView.scrollDirection] 轴的最小大小。"},{"name":"maxExtentPrototype","type":"Widget?","desc":"布局一次以定义此 sliver 沿 [CustomScrollView.scrollDirection] 轴的最大大小。"},{"name":"child","type":"Widget?","desc":"此 sliver 包含的小部件。"}],"id":523,"localName":"SliverResizingHeader","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_en-US.json deleted file mode 100644 index 08d32794c..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverSafeArea","path":"/src/widgets/safe_area.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver that insets another sliver by sufficient padding to avoid intrusions by the operating system.","fields":[{"name":"left","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the left."},{"name":"top","type":"bool","required":true,"desc":"Whether to avoid system intrusions at the top of the screen, typically the system status bar."},{"name":"right","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the right."},{"name":"bottom","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the bottom side of the screen."},{"name":"minimum","type":"EdgeInsets","required":true,"desc":"This minimum padding to apply."},{"name":"sliver","type":"Widget","required":true,"desc":"The sliver below this sliver in the tree."}],"id":524,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_zh-CN.json deleted file mode 100644 index 7b371a125..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverSafeArea","path":"/src/widgets/safe_area.dart","parents":["StatelessWidget","Widget"],"desc":"通过足够的内边距插入另一个 sliver 以避免操作系统入侵的 sliver。","fields":[{"name":"left","type":"bool","required":true,"desc":"是否避免左侧的系统入侵。"},{"name":"top","type":"bool","required":true,"desc":"是否避免屏幕顶部的系统入侵,通常是系统状态栏。"},{"name":"right","type":"bool","required":true,"desc":"是否避免右侧的系统入侵。"},{"name":"bottom","type":"bool","required":true,"desc":"是否避免屏幕底部的系统入侵。"},{"name":"minimum","type":"EdgeInsets","required":true,"desc":"要应用的最小内边距。"},{"name":"sliver","type":"Widget","required":true,"desc":"树中此 sliver 下方的 sliver。"}],"id":524,"localName":"SliverSafeArea","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_en-US.json deleted file mode 100644 index 4dc3b4e5a..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverToBoxAdapter","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that contains a single box widget.","fields":[],"id":189,"lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverToBoxAdapter","desc":["【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_zh-CN.json deleted file mode 100644 index e36440329..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverToBoxAdapter","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"包含单个框小部件的 sliver。","fields":[],"id":189,"localName":"Sliver适配器","lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliverToBoxAdapter基本使用","desc":["【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_en-US.json deleted file mode 100644 index 25c38fe31..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverVariedExtentList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places its box children in a linear array and constrains them to have the corresponding extent returned by [itemExtentBuilder].","fields":[{"name":"itemExtentBuilder","type":"ItemExtentBuilder","required":true,"desc":"The children extent builder."}],"id":525,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_zh-CN.json deleted file mode 100644 index cf2c42b44..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverVariedExtentList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"将其框子项放置在线性数组中并约束它们具有 [itemExtentBuilder] 返回的相应范围的 sliver。","fields":[{"name":"itemExtentBuilder","type":"ItemExtentBuilder","required":true,"desc":"子项范围构建器。"}],"id":525,"localName":"SliverVariedExtentList","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_en-US.json deleted file mode 100644 index 17816be98..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverVisibility","path":"/src/widgets/visibility.dart","parents":["StatelessWidget","Widget"],"desc":" Whether to show or hide a sliver child.","fields":[{"name":"sliver","type":"Widget","required":true,"desc":"The sliver to show or hide, as controlled by [visible]."},{"name":"replacementSliver","type":"Widget","required":true,"desc":"The widget to use when the sliver child is not [visible], assuming that none of the `maintain` flags (in particular, [maintainState]) are set."},{"name":"visible","type":"bool","required":true,"desc":"Switches between showing the [sliver] or hiding it."},{"name":"maintainState","type":"bool","required":true,"desc":"Whether to maintain the [State] objects of the [sliver] subtree when it is not [visible]."},{"name":"maintainAnimation","type":"bool","required":true,"desc":"Whether to maintain animations within the [sliver] subtree when it is not [visible]."},{"name":"maintainSize","type":"bool","required":true,"desc":"Whether to maintain space for where the sliver would have been."},{"name":"maintainSemantics","type":"bool","required":true,"desc":"Whether to maintain the semantics for the sliver when it is hidden (e.g. for accessibility)."},{"name":"maintainInteractivity","type":"bool","required":true,"desc":"Whether to allow the sliver to be interactive when hidden."}],"id":526,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_zh-CN.json deleted file mode 100644 index 24388be3f..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverVisibility","path":"/src/widgets/visibility.dart","parents":["StatelessWidget","Widget"],"desc":"是否显示或隐藏 sliver 子项。","fields":[{"name":"sliver","type":"Widget","required":true,"desc":"要显示或隐藏的 sliver,由 [visible] 控制。"},{"name":"replacementSliver","type":"Widget","required":true,"desc":"当 sliver 子项不 [visible] 时使用的小部件,假设没有设置任何 `maintain` 标志(特别是 [maintainState])。"},{"name":"visible","type":"bool","required":true,"desc":"在显示 [sliver] 或隐藏它之间切换。"},{"name":"maintainState","type":"bool","required":true,"desc":"当 [sliver] 子树不 [visible] 时是否维护其 [State] 对象。"},{"name":"maintainAnimation","type":"bool","required":true,"desc":"当 [sliver] 子树不 [visible] 时是否维护其中的动画。"},{"name":"maintainSize","type":"bool","required":true,"desc":"是否为 sliver 本来所在的位置维护空间。"},{"name":"maintainSemantics","type":"bool","required":true,"desc":"当 sliver 隐藏时是否维护其语义(例如用于辅助功能)。"},{"name":"maintainInteractivity","type":"bool","required":true,"desc":"隐藏时是否允许 sliver 可交互。"}],"id":526,"localName":"SliverVisibility","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_en-US.json deleted file mode 100644 index 663296888..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverWithKeepAliveWidget","path":"/src/widgets/sliver.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A base class for slivers that have [KeepAlive] children.","fields":[],"id":348,"lever":1,"family":4,"linkIds":[316,239,188,185,314,186],"nodes":[{"file":"node1_base.dart","name":"Introduction to SliverWithKeepAliveWidget","desc":["【key】 : key 【Key】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_zh-CN.json deleted file mode 100644 index b05be0ed5..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverWithKeepAliveWidget","path":"/src/widgets/sliver.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"具有 [KeepAlive] 子项的 sliver 的基类。","fields":[],"id":348,"localName":"Sliver保活容器","lever":1,"family":4,"linkIds":[316,239,188,185,314,186],"nodes":[{"file":"node1_base.dart","name":"SliverWithKeepAliveWidget 介绍","desc":["【key】 : 键 【Key】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_en-US.json deleted file mode 100644 index ab6a865ff..000000000 --- a/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SlottedMultiChildRenderObjectWidget","path":"/src/widgets/slotted_render_object_widget.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A superclass for [RenderObjectWidget]s that configure [RenderObject] subclasses that organize their children in different slots.","fields":[],"id":527,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_zh-CN.json deleted file mode 100644 index 80f0f1fdd..000000000 --- a/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SlottedMultiChildRenderObjectWidget","path":"/src/widgets/slotted_render_object_widget.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"配置在不同插槽中组织其子项的 [RenderObject] 子类的 [RenderObjectWidget] 的超类。","fields":[],"id":527,"localName":"SlottedMultiChildRenderObjectWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_en-US.json b/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_en-US.json deleted file mode 100644 index 40e3ad7b4..000000000 --- a/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SnackBar","path":"/src/material/snack_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A lightweight message with an optional action which briefly displays at the bottom of the screen.","fields":[{"name":"content","type":"Widget","required":true,"desc":"The primary content of the snack bar."},{"name":"backgroundColor","type":"Color?","desc":"The snack bar's background color."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place the snack bar. This controls the size of the shadow below the snack bar."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"Empty space to surround the snack bar."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of padding to apply to the snack bar's content and optional action."},{"name":"width","type":"double?","desc":"The width of the snack bar."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the snack bar's [Material]."},{"name":"hitTestBehavior","type":"HitTestBehavior?","desc":"Defines how the snack bar area, including margin, will behave during hit testing."},{"name":"behavior","type":"SnackBarBehavior?","desc":"This defines the behavior and location of the snack bar."},{"name":"action","type":"SnackBarAction?","desc":"(optional) An action that the user can take based on the snack bar."},{"name":"actionOverflowThreshold","type":"double?","desc":"(optional) The percentage threshold for action widget's width before it overflows to a new line."},{"name":"showCloseIcon","type":"bool?","desc":"(optional) Whether to include a \"close\" icon widget."},{"name":"closeIconColor","type":"Color?","desc":"An optional color for the close icon, if [showCloseIcon] is true."},{"name":"duration","type":"Duration","required":true,"desc":"The amount of time the snack bar should be displayed."},{"name":"animation","type":"Animation?","desc":"The animation driving the entrance and exit of the snack bar."},{"name":"onVisible","type":"VoidCallback?","desc":"Called the first time that the snackbar is visible within a [Scaffold]."},{"name":"dismissDirection","type":"DismissDirection?","desc":"The direction in which the SnackBar can be dismissed."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":140,"lever":4,"family":1,"linkIds":[141,142],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SnackBar","desc":["【content】: Middle content component 【Widget】","【action】: Right side button 【SnackBarAction】","【duration】: Duration 【Widget】","【backgroundColor】: Background color 【Color】","【elevation】: Shadow depth 【double】","【shape】: Shape 【ShapeBorder】","【onVisible】: Callback when shown 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_zh-CN.json deleted file mode 100644 index f114d899c..000000000 --- a/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SnackBar","path":"/src/material/snack_bar.dart","parents":["StatefulWidget","Widget"],"desc":"带有可选操作的轻量级消息,在屏幕底部短暂显示。","fields":[{"name":"content","type":"Widget","required":true,"desc":"快餐栏的主要内容。"},{"name":"backgroundColor","type":"Color?","desc":"快餐栏的背景颜色。"},{"name":"elevation","type":"double?","desc":"放置快餐栏的 z 坐标。这控制快餐栏下方阴影的大小。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕快餐栏的空白空间。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"应用于快餐栏内容和可选操作的内边距量。"},{"name":"width","type":"double?","desc":"快餐栏的宽度。"},{"name":"shape","type":"ShapeBorder?","desc":"快餐栏的 [Material] 的形状。"},{"name":"hitTestBehavior","type":"HitTestBehavior?","desc":"定义快餐栏区域(包括边距)在命中测试期间的行为方式。"},{"name":"behavior","type":"SnackBarBehavior?","desc":"这定义了快餐栏的行为和位置。"},{"name":"action","type":"SnackBarAction?","desc":"(可选)用户可以基于快餐栏采取的操作。"},{"name":"actionOverflowThreshold","type":"double?","desc":"(可选)操作小部件宽度在溢出到新行之前的百分比阈值。"},{"name":"showCloseIcon","type":"bool?","desc":"(可选)是否包含"},{"name":"closeIconColor","type":"Color?","desc":"如果 [showCloseIcon] 为 true,关闭图标的可选颜色。"},{"name":"duration","type":"Duration","required":true,"desc":"快餐栏应显示的时间量。"},{"name":"animation","type":"Animation?","desc":"驱动快餐栏进入和退出的动画。"},{"name":"onVisible","type":"VoidCallback?","desc":"快餐栏在 [Scaffold] 中首次可见时调用。"},{"name":"dismissDirection","type":"DismissDirection?","desc":"SnackBar 可以被关闭的方向。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":140,"localName":"信息提示条","lever":4,"family":1,"linkIds":[141,142],"nodes":[{"file":"node1_base.dart","name":"SnackBar基本使用","desc":["【content】 : 中间内容组件 【Widget】","【action】 : 右侧按钮 【SnackBarAction】","【duration】 : 持续时长 【Widget】","【backgroundColor】 : 背景色 【Color】","【elevation】 : 影深 【double】","【shape】 : 形状 【ShapeBorder】","【onVisible】 : 显示时回调 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_en-US.json b/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_en-US.json deleted file mode 100644 index 837828e42..000000000 --- a/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SnackBarAction","path":"/src/material/snack_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A button for a [SnackBar], known as an \"action\".","fields":[{"name":"textColor","type":"Color?","desc":"The button label color. If not provided, defaults to [SnackBarThemeData.actionTextColor]."},{"name":"backgroundColor","type":"Color?","desc":"The button background fill color. If not provided, defaults to [SnackBarThemeData.actionBackgroundColor]."},{"name":"disabledTextColor","type":"Color?","desc":"The button disabled label color. This color is shown after the [SnackBarAction] is dismissed."},{"name":"disabledBackgroundColor","type":"Color?","desc":"The button disabled background color. This color is shown after the [SnackBarAction] is dismissed."},{"name":"label","type":"String","required":true,"desc":"The button label."},{"name":"onPressed","type":"VoidCallback","required":true,"desc":"The callback to be called when the button is pressed."}],"id":141,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SnackBarAction","desc":["【label】 : Label 【String】","【textColor】 : Text Color 【Color】","【disabledTextColor】 : Disabled Text Color 【Color】","【onPressed】 : Click Callback 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_zh-CN.json deleted file mode 100644 index 4a171fa04..000000000 --- a/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SnackBarAction","path":"/src/material/snack_bar.dart","parents":["StatefulWidget","Widget"],"desc":"[SnackBar] 的按钮,称为操作。","fields":[{"name":"textColor","type":"Color?","desc":"按钮标签颜色。如果未提供,默认为 [SnackBarThemeData.actionTextColor]。"},{"name":"backgroundColor","type":"Color?","desc":"按钮背景填充颜色。如果未提供,默认为 [SnackBarThemeData.actionBackgroundColor]。"},{"name":"disabledTextColor","type":"Color?","desc":"按钮禁用标签颜色。此颜色在 [SnackBarAction] 被关闭后显示。"},{"name":"disabledBackgroundColor","type":"Color?","desc":"按钮禁用背景颜色。此颜色在 [SnackBarAction] 被关闭后显示。"},{"name":"label","type":"String","required":true,"desc":"按钮标签。"},{"name":"onPressed","type":"VoidCallback","required":true,"desc":"按下按钮时要调用的回调。"}],"id":141,"localName":"信息提示条按钮","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SnackBarAction基本使用","desc":["【label】 : 标签 【String】","【textColor】 : 文字颜色 【Color】","【disabledTextColor】 : 文字失效色 【Color】","【onPressed】 : 点击回调 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_en-US.json deleted file mode 100644 index 1dd481ddb..000000000 --- a/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SnapshotWidget","path":"/src/widgets/snapshot_widget.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that can replace its child with a snapshotted version of the child.","fields":[{"name":"controller","type":"SnapshotController","required":true,"desc":"The controller that determines when to display the children as a snapshot."},{"name":"mode","type":"SnapshotMode","required":true,"desc":"Configuration that controls how the snapshot widget decides to paint its children."},{"name":"autoresize","type":"bool","required":true,"desc":"Whether or not changes in render object size should automatically re-create the snapshot."},{"name":"painter","type":"SnapshotPainter","required":true,"desc":"The painter used to paint the child snapshot or child widgets."}],"id":528,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_zh-CN.json deleted file mode 100644 index d79fc3193..000000000 --- a/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SnapshotWidget","path":"/src/widgets/snapshot_widget.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"可以用子项的快照版本替换其子项的小部件。","fields":[{"name":"controller","type":"SnapshotController","required":true,"desc":"确定何时将子项显示为快照的控制器。"},{"name":"mode","type":"SnapshotMode","required":true,"desc":"控制快照小部件如何决定绘制其子项的配置。"},{"name":"autoresize","type":"bool","required":true,"desc":"渲染对象大小的更改是否应自动重新创建快照。"},{"name":"painter","type":"SnapshotPainter","required":true,"desc":"用于绘制子快照或子小部件的绘制器。"}],"id":528,"localName":"SnapshotWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_en-US.json b/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_en-US.json deleted file mode 100644 index 6710229d2..000000000 --- a/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Spacer","path":"/src/widgets/spacer.dart","parents":["StatelessWidget","Widget"],"desc":" Spacer creates an adjustable, empty spacer that can be used to tune the spacing between widgets in a [Flex] container, like [Row] or [Column].","fields":[{"name":"flex","type":"int","required":true,"desc":"The flex factor to use in determining how much space to take up."}],"id":107,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Spacer","desc":["A Spacer will occupy the extendable area"]},{"file":"node2_flex.dart","name":"Space Allocation with Multiple Spacers","desc":["【flex】 : Proportion of remaining space allocation 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_zh-CN.json deleted file mode 100644 index 346b4dbd6..000000000 --- a/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Spacer","path":"/src/widgets/spacer.dart","parents":["StatelessWidget","Widget"],"desc":"Spacer 创建一个可调整的空白间隔器,可用于调整 [Flex] 容器(如 [Row] 或 [Column])中小部件之间的间距。","fields":[{"name":"flex","type":"int","required":true,"desc":"用于确定占用多少空间的弹性因子。"}],"id":107,"localName":"空间组件","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Spacer基本使用","desc":["一个Spacer会占据可延伸区域"]},{"file":"node2_flex.dart","name":"多个Spacer空间分配","desc":["【flex】 : 剩余空间分配占比 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_en-US.json deleted file mode 100644 index 5058bcfc1..000000000 --- a/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SpellCheckSuggestionsToolbar","path":"/src/material/spell_check_suggestions_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" The default spell check suggestions toolbar for Android.","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@template flutter.material.SpellCheckSuggestionsToolbar.anchor} The focal point below which the toolbar attempts to position itself. {@endtemplate}"},{"name":"buttonItems","type":"List","required":true,"desc":"The [ContextMenuButtonItem]s that will be turned into the correct button widgets and displayed in the spell check suggestions toolbar."}],"id":529,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_zh-CN.json deleted file mode 100644 index a6f794946..000000000 --- a/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SpellCheckSuggestionsToolbar","path":"/src/material/spell_check_suggestions_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"Android 的默认拼写检查建议工具栏。","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@template flutter.material.SpellCheckSuggestionsToolbar.anchor} 工具栏尝试定位自己的焦点下方。{@endtemplate}"},{"name":"buttonItems","type":"List","required":true,"desc":"将转换为正确按钮小部件并显示在拼写检查建议工具栏中的 [ContextMenuButtonItem]。"}],"id":529,"localName":"SpellCheckSuggestionsToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Stack/Stack_en-US.json b/modules/widget_system/widgets/doc/widgets/Stack/Stack_en-US.json deleted file mode 100644 index 6be6e7296..000000000 --- a/modules/widget_system/widgets/doc/widgets/Stack/Stack_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Stack","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that positions its children relative to the edges of its box.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the non-positioned and partially-positioned children in the stack."},{"name":"textDirection","type":"TextDirection?","desc":"The text direction with which to resolve [alignment]."},{"name":"fit","type":"StackFit","required":true,"desc":"How to size the non-positioned children in the stack."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":97,"lever":5,"family":3,"linkIds":[94,95,161],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Stack","desc":["【children】: Component list 【List】","【textDirection】: Child arrangement direction 【MainAxisAlignment】","【alignment】: Alignment method 【AlignmentGeometry】","【overflow】: Overflow mode 【Overflow】","【fit】: Fit mode 【StackFit】"]},{"file":"node2_positioned.dart","name":"Combined Usage of Stack and Positioned","desc":["The Positioned component can only be used within a Stack, allowing precise placement of a component by specifying distances from the top, left, right, and bottom."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Stack/Stack_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Stack/Stack_zh-CN.json deleted file mode 100644 index f6c7f9c40..000000000 --- a/modules/widget_system/widgets/doc/widgets/Stack/Stack_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Stack","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"相对于其框边缘定位其子项的小部件。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在堆栈中对齐非定位和部分定位的子项。"},{"name":"textDirection","type":"TextDirection?","desc":"用于解析 [alignment] 的文本方向。"},{"name":"fit","type":"StackFit","required":true,"desc":"如何调整堆栈中非定位子项的大小。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":97,"localName":"堆叠布局","lever":5,"family":3,"linkIds":[94,95,161],"nodes":[{"file":"node1_base.dart","name":"Stack基本使用","desc":["【children】 : 组件列表 【List】","【textDirection】 : 孩子排布方向 【MainAxisAlignment】","【alignment】 : 对齐方式 【AlignmentGeometry】","【overflow】 : 溢出模式 【Overflow】","【fit】 : 适应模式 【StackFit】"]},{"file":"node2_positioned.dart","name":"Stack和Positioned结合使用","desc":["Positioned组件只能用与Stack中,可以指定左上右下的距离对某个组件进行位置精确安放。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_en-US.json deleted file mode 100644 index 8b3559477..000000000 --- a/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StatefulBuilder","path":"/src/widgets/basic.dart","parents":["StatefulWidget","Widget"],"desc":" A platonic widget that both has state and calls a closure to obtain its child widget.","fields":[{"name":"builder","type":"StatefulWidgetBuilder","required":true,"desc":"Called to obtain the child widget."}],"id":242,"lever":3,"family":1,"linkIds":[202,203,280,255],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of StatefulBuilder","desc":["【builder】 : Component Constructor 【StatefulWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_zh-CN.json deleted file mode 100644 index a124fba26..000000000 --- a/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StatefulBuilder","path":"/src/widgets/basic.dart","parents":["StatefulWidget","Widget"],"desc":"既有状态又调用闭包来获取其子小部件的柏拉图式小部件。","fields":[{"name":"builder","type":"StatefulWidgetBuilder","required":true,"desc":"调用以获取子小部件。"}],"id":242,"localName":"状态构造器","lever":3,"family":1,"linkIds":[202,203,280,255],"nodes":[{"file":"node1_base.dart","name":"StatefulBuilder基本使用","desc":["【builder】 : 组件构造器 【StatefulWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_en-US.json deleted file mode 100644 index 9a950914d..000000000 --- a/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StatefulWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":" A widget that has mutable state.","fields":[],"id":530,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_zh-CN.json deleted file mode 100644 index d0a923ffe..000000000 --- a/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StatefulWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":"具有可变状态的小部件。","fields":[],"id":530,"localName":"StatefulWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_en-US.json deleted file mode 100644 index e05c44681..000000000 --- a/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StatelessWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":" A widget that does not require mutable state.","fields":[],"id":531,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_zh-CN.json deleted file mode 100644 index 56d648d93..000000000 --- a/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StatelessWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":"不需要可变状态的小部件。","fields":[],"id":531,"localName":"StatelessWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_en-US.json deleted file mode 100644 index c5c677df4..000000000 --- a/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StatusTransitionWidget","path":"/src/widgets/status_transitions.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" A widget that rebuilds when the given animation changes status.","fields":[{"name":"animation","type":"Animation","required":true,"desc":"The animation to which this widget is listening."}],"id":233,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to StatusTransitionWidget","desc":["【animation】 : Child component 【Animation】","Here, a custom ColorStatusTransitionWidget is used to build different colors when the state of the animator changes."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_zh-CN.json deleted file mode 100644 index 3a8a3af1a..000000000 --- a/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StatusTransitionWidget","path":"/src/widgets/status_transitions.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"当给定动画更改状态时重建的小部件。","fields":[{"name":"animation","type":"Animation","required":true,"desc":"此小部件正在监听的动画。"}],"id":233,"localName":"状态转变组件","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"StatusTransitionWidget 介绍","desc":["【animation】 : 子组件 【Animation】","这里自定义 ColorStatusTransitionWidget 进行使用,在动画器的状态改变时构建不同的颜色。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_en-US.json b/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_en-US.json deleted file mode 100644 index 8111d1f6e..000000000 --- a/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Stepper","path":"/src/material/stepper.dart","parents":["StatefulWidget","Widget"],"desc":" A material stepper widget that displays progress through a sequence of steps. Steppers are particularly useful in the case of forms where one step requires the completion of another one, or where multiple steps need to be completed in order to submit the whole form.","fields":[{"name":"steps","type":"List","required":true,"desc":"The steps of the stepper whose titles, subtitles, icons always get shown."},{"name":"physics","type":"ScrollPhysics?","desc":"How the stepper's scroll view should respond to user input."},{"name":"controller","type":"ScrollController?","desc":"An object that can be used to control the position to which this scroll view is scrolled."},{"name":"type","type":"StepperType","required":true,"desc":"The type of stepper that determines the layout. In the case of [StepperType.horizontal], the content of the current step is displayed underneath as opposed to the [StepperType.vertical] case where it is displayed in-between."},{"name":"currentStep","type":"int","required":true,"desc":"The index into [steps] of the current step whose content is displayed."},{"name":"onStepTapped","type":"ValueChanged?","desc":"The callback called when a step is tapped, with its index passed as an argument."},{"name":"onStepContinue","type":"VoidCallback?","desc":"The callback called when the 'continue' button is tapped."},{"name":"onStepCancel","type":"VoidCallback?","desc":"The callback called when the 'cancel' button is tapped."},{"name":"controlsBuilder","type":"ControlsWidgetBuilder?","desc":"The callback for creating custom controls."},{"name":"elevation","type":"double?","desc":"The elevation of this stepper's [Material] when [type] is [StepperType.horizontal]."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"Custom margin on vertical stepper."},{"name":"connectorColor","type":"MaterialStateProperty?","desc":"Customize connected lines colors."},{"name":"connectorThickness","type":"double?","desc":"The thickness of the connecting lines."},{"name":"stepIconBuilder","type":"StepIconBuilder?","desc":"Callback for creating custom icons for the [steps]."},{"name":"stepIconHeight","type":"double?","desc":"Overrides the default step icon size height."},{"name":"stepIconWidth","type":"double?","desc":"Overrides the default step icon size width."},{"name":"stepIconMargin","type":"EdgeInsets?","desc":"Overrides the default step icon margin."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"The [Step.content] will be clipped to this Clip type."}],"id":200,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Stepper","desc":["【steps】: Step list 【List】","【currentStep】: Current step 【double】","【onStepTapped】: Click callback 【ValueChanged】","【onStepCancel】: Previous step callback 【VoidCallback】","【controlsBuilder】: Controller construction 【ControlsWidgetBuilder】"]},{"file":"node2_type.dart","name":"Direction of Stepper","desc":["【type】: Direction 【StepperType】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_zh-CN.json deleted file mode 100644 index bf5fab3a9..000000000 --- a/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Stepper","path":"/src/material/stepper.dart","parents":["StatefulWidget","Widget"],"desc":"显示通过一系列步骤进度的 material 步进器小部件。步进器在表单中特别有用,其中一个步骤需要完成另一个步骤,或者需要按顺序完成多个步骤才能提交整个表单。","fields":[{"name":"steps","type":"List","required":true,"desc":"步进器的步骤,其标题、副标题、图标始终显示。"},{"name":"physics","type":"ScrollPhysics?","desc":"步进器的滚动视图应如何响应用户输入。"},{"name":"controller","type":"ScrollController?","desc":"可用于控制此滚动视图滚动到的位置的对象。"},{"name":"type","type":"StepperType","required":true,"desc":"确定布局的步进器类型。在 [StepperType.horizontal] 的情况下,当前步骤的内容显示在下方,而不是 [StepperType.vertical] 情况下显示在中间。"},{"name":"currentStep","type":"int","required":true,"desc":"显示其内容的当前步骤在 [steps] 中的索引。"},{"name":"onStepTapped","type":"ValueChanged?","desc":"点击步骤时调用的回调,将其索引作为参数传递。"},{"name":"onStepContinue","type":"VoidCallback?","desc":"点击"},{"name":"onStepCancel","type":"VoidCallback?","desc":"点击"},{"name":"controlsBuilder","type":"ControlsWidgetBuilder?","desc":"创建自定义控件的回调。"},{"name":"elevation","type":"double?","desc":"当 [type] 为 [StepperType.horizontal] 时此步进器的 [Material] 的高度。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"垂直步进器上的自定义边距。"},{"name":"connectorColor","type":"MaterialStateProperty?","desc":"自定义连接线颜色。"},{"name":"connectorThickness","type":"double?","desc":"连接线的厚度。"},{"name":"stepIconBuilder","type":"StepIconBuilder?","desc":"为 [steps] 创建自定义图标的回调。"},{"name":"stepIconHeight","type":"double?","desc":"覆盖默认步骤图标大小高度。"},{"name":"stepIconWidth","type":"double?","desc":"覆盖默认步骤图标大小宽度。"},{"name":"stepIconMargin","type":"EdgeInsets?","desc":"覆盖默认步骤图标边距。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"[Step.content] 将被裁剪到此 Clip 类型。"}],"id":200,"localName":"步骤组件","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Stepper基本使用","desc":["【steps】 : 步骤列表 【List】","【currentStep】 : 当前步骤 【double】","【onStepTapped】 : 点击回调 【ValueChanged】","【onStepCancel】 : 上一步回调 【VoidCallback】","【controlsBuilder】 : 控制器构造 【ControlsWidgetBuilder】"]},{"file":"node2_type.dart","name":"Stepper的方向","desc":["【type】 : 方向 【StepperType】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_en-US.json deleted file mode 100644 index 0150161d1..000000000 --- a/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StreamBuilder","path":"/src/widgets/async.dart","parents":["StreamBuilderBase","StatefulWidget","Widget"],"desc":" Widget that builds itself based on the latest snapshot of interaction with a [Stream].","fields":[{"name":"builder","type":"AsyncWidgetBuilder","required":true,"desc":"The build strategy currently used by this builder."},{"name":"initialData","type":"T?","desc":"The data that will be used to create the initial snapshot."}],"id":173,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of StreamBuilder","desc":["【stream】 : Child component 【Stream】","【initialData】 : Initial data 【T】","【builder】 : Click event 【AsyncWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_zh-CN.json deleted file mode 100644 index 31bbc1189..000000000 --- a/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StreamBuilder","path":"/src/widgets/async.dart","parents":["StreamBuilderBase","StatefulWidget","Widget"],"desc":"基于与 [Stream] 交互的最新快照构建自身的小部件。","fields":[{"name":"builder","type":"AsyncWidgetBuilder","required":true,"desc":"此构建器当前使用的构建策略。"},{"name":"initialData","type":"T?","desc":"将用于创建初始快照的数据。"}],"id":173,"localName":"流构造器","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"StreamBuilder基本使用","desc":["【stream】 : 子组件 【Stream】","【initialData】 : 初始数据 【T】","【builder】 : 点击事件 【AsyncWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_en-US.json b/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_en-US.json deleted file mode 100644 index 98ee8900a..000000000 --- a/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StreamBuilderBase","path":"/src/widgets/async.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" Base class for widgets that build themselves based on interaction with a specified [Stream].","fields":[{"name":"stream","type":"Stream?","desc":"The asynchronous computation to which this builder is currently connected, possibly null. When changed, the current summary is updated using [afterDisconnected], if the previous stream was not null, followed by [afterConnected], if the new stream is not null."}],"id":532,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_zh-CN.json deleted file mode 100644 index 8ce8ee271..000000000 --- a/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StreamBuilderBase","path":"/src/widgets/async.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"基于与指定 [Stream] 交互构建自身的小部件的基类。","fields":[{"name":"stream","type":"Stream?","desc":"此构建器当前连接的异步计算,可能为 null。更改时,如果先前的流不为 null,则使用 [afterDisconnected] 更新当前摘要,如果新流不为 null,则使用 [afterConnected]。"}],"id":532,"localName":"StreamBuilderBase","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_en-US.json deleted file mode 100644 index 88a0f7da3..000000000 --- a/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StretchingOverscrollIndicator","path":"/src/widgets/overscroll_indicator.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design visual indication that a scroll view has overscrolled.","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@macro flutter.overscroll.axisDirection}"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@macro flutter.overscroll.notificationPredicate}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":533,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_zh-CN.json deleted file mode 100644 index 538c02fd4..000000000 --- a/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StretchingOverscrollIndicator","path":"/src/widgets/overscroll_indicator.dart","parents":["StatefulWidget","Widget"],"desc":"滚动视图已过度滚动的 Material Design 视觉指示。","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@macro flutter.overscroll.axisDirection}"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@macro flutter.overscroll.notificationPredicate}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":533,"localName":"StretchingOverscrollIndicator","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_en-US.json b/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_en-US.json deleted file mode 100644 index a2ddecdfd..000000000 --- a/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SubmenuButton","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A menu button that displays a cascading menu.","fields":[{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the button response area."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"onOpen","type":"VoidCallback?","desc":"A callback that is invoked when the menu is opened."},{"name":"onClose","type":"VoidCallback?","desc":"A callback that is invoked when the menu is closed."},{"name":"controller","type":"MenuController?","desc":"An optional [MenuController] for this submenu."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"menuStyle","type":"MenuStyle?","desc":"The [MenuStyle] of the menu specified by [menuChildren]."},{"name":"alignmentOffset","type":"Offset?","desc":"The offset of the menu relative to the alignment origin determined by [MenuStyle.alignment] on the [style] attribute."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"leadingIcon","type":"Widget?","desc":"An optional icon to display before the [child]."},{"name":"submenuIcon","type":"MaterialStateProperty?","desc":"If provided, the widget replaces the default [SubmenuButton] arrow icon."},{"name":"trailingIcon","type":"Widget?","desc":"An optional icon to display after the [child]."},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@macro flutter.widgets.RawMenuAnchor.useRootOverlay}"},{"name":"menuChildren","type":"List","required":true,"desc":"The list of widgets that appear in the menu when it is opened."},{"name":"child","type":"Widget?","desc":"The widget displayed in the middle portion of this button."}],"id":534,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_zh-CN.json deleted file mode 100644 index 36765be6d..000000000 --- a/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SubmenuButton","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"显示级联菜单的菜单按钮。","fields":[{"name":"onHover","type":"ValueChanged?","desc":"指针进入或退出按钮响应区域时调用。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点更改时调用的处理程序。"},{"name":"onOpen","type":"VoidCallback?","desc":"菜单打开时调用的回调。"},{"name":"onClose","type":"VoidCallback?","desc":"菜单关闭时调用的回调。"},{"name":"controller","type":"MenuController?","desc":"此子菜单的可选 [MenuController]。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"menuStyle","type":"MenuStyle?","desc":"由 [menuChildren] 指定的菜单的 [MenuStyle]。"},{"name":"alignmentOffset","type":"Offset?","desc":"菜单相对于由 [style] 属性上的 [MenuStyle.alignment] 确定的对齐原点的偏移。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"leadingIcon","type":"Widget?","desc":"在 [child] 之前显示的可选图标。"},{"name":"submenuIcon","type":"MaterialStateProperty?","desc":"如果提供,小部件将替换默认的 [SubmenuButton] 箭头图标。"},{"name":"trailingIcon","type":"Widget?","desc":"在 [child] 之后显示的可选图标。"},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@macro flutter.widgets.RawMenuAnchor.useRootOverlay}"},{"name":"menuChildren","type":"List","required":true,"desc":"菜单打开时出现在菜单中的小部件列表。"},{"name":"child","type":"Widget?","desc":"显示在此按钮中间部分的小部件。"}],"id":534,"localName":"SubmenuButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Switch/Switch_en-US.json b/modules/widget_system/widgets/doc/widgets/Switch/Switch_en-US.json deleted file mode 100644 index 59e02ae4b..000000000 --- a/modules/widget_system/widgets/doc/widgets/Switch/Switch_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Switch","path":"/src/material/switch.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design switch.","fields":[{"name":"value","type":"bool","required":true,"desc":"Whether this switch is on or off."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user toggles the switch on or off."},{"name":"activeColor","type":"Color?","desc":"{@template flutter.material.switch.activeColor} The color to use when this switch is on. {@endtemplate}"},{"name":"activeTrackColor","type":"Color?","desc":"{@template flutter.material.switch.activeTrackColor} The color to use on the track when this switch is on. {@endtemplate}"},{"name":"inactiveThumbColor","type":"Color?","desc":"{@template flutter.material.switch.inactiveThumbColor} The color to use on the thumb when this switch is off. {@endtemplate}"},{"name":"inactiveTrackColor","type":"Color?","desc":"{@template flutter.material.switch.inactiveTrackColor} The color to use on the track when this switch is off. {@endtemplate}"},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@template flutter.material.switch.activeThumbImage} An image to use on the thumb of this switch when the switch is on. {@endtemplate}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@template flutter.material.switch.onActiveThumbImageError} An optional error callback for errors emitted when loading [activeThumbImage]. {@endtemplate}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@template flutter.material.switch.inactiveThumbImage} An image to use on the thumb of this switch when the switch is off. {@endtemplate}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@template flutter.material.switch.onInactiveThumbImageError} An optional error callback for errors emitted when loading [inactiveThumbImage]. {@endtemplate}"},{"name":"thumbColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.thumbColor} The color of this [Switch]'s thumb."},{"name":"trackColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackColor} The color of this [Switch]'s track."},{"name":"trackOutlineColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackOutlineColor} The outline color of this [Switch]'s track."},{"name":"trackOutlineWidth","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackOutlineWidth} The outline width of this [Switch]'s track."},{"name":"thumbIcon","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.thumbIcon} The icon to use on the thumb of this switch"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.switch.materialTapTargetSize} Configures the minimum size of the tap target. {@endtemplate}"},{"name":"applyCupertinoTheme","type":"bool?","desc":"{@macro flutter.cupertino.CupertinoSwitch.applyTheme}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.cupertino.CupertinoSwitch.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.switch.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"focusColor","type":"Color?","desc":"The color for the button's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"The color for the button's [Material] when a pointer is hovering over it."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.overlayColor} The color for the switch's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.switch.splashRadius} The splash radius of the circular [Material] ink response. {@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space to surround the child inside the bounds of the [Switch]."}],"id":40,"lever":4,"family":1,"linkIds":[41,18],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Switch","desc":["【inactiveThumbColor】 : Unselected small circle color 【Color】","【inactiveTrackColor】 : Unselected track color 【Color】","【activeColor】 : Selected small circle color 【Color】","【activeTrackColor】 : Selected track color 【Color】","【onChanged】 : Toggle callback 【Function(double)】","When onChanged, callbacks for true, null, and false states"]},{"file":"node2_image.dart","name":"Switch Image","desc":["【inactiveThumbImage】 : Unselected small circle image 【ImageProvider】","【activeThumbImage】 : Selected small circle image 【ImageProvider】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Switch/Switch_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Switch/Switch_zh-CN.json deleted file mode 100644 index 24f63615c..000000000 --- a/modules/widget_system/widgets/doc/widgets/Switch/Switch_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Switch","path":"/src/material/switch.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 开关。","fields":[{"name":"value","type":"bool","required":true,"desc":"此开关是打开还是关闭。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户打开或关闭开关时调用。"},{"name":"activeColor","type":"Color?","desc":"{@template flutter.material.switch.activeColor} 此开关打开时使用的颜色。{@endtemplate}"},{"name":"activeTrackColor","type":"Color?","desc":"{@template flutter.material.switch.activeTrackColor} 此开关打开时轨道上使用的颜色。{@endtemplate}"},{"name":"inactiveThumbColor","type":"Color?","desc":"{@template flutter.material.switch.inactiveThumbColor} 此开关关闭时拇指上使用的颜色。{@endtemplate}"},{"name":"inactiveTrackColor","type":"Color?","desc":"{@template flutter.material.switch.inactiveTrackColor} 此开关关闭时轨道上使用的颜色。{@endtemplate}"},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@template flutter.material.switch.activeThumbImage} 开关打开时在此开关拇指上使用的图像。{@endtemplate}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@template flutter.material.switch.onActiveThumbImageError} 加载 [activeThumbImage] 时发出错误的可选错误回调。{@endtemplate}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@template flutter.material.switch.inactiveThumbImage} 开关关闭时在此开关拇指上使用的图像。{@endtemplate}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@template flutter.material.switch.onInactiveThumbImageError} 加载 [inactiveThumbImage] 时发出错误的可选错误回调。{@endtemplate}"},{"name":"thumbColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.thumbColor} 此 [Switch] 拇指的颜色。"},{"name":"trackColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackColor} 此 [Switch] 轨道的颜色。"},{"name":"trackOutlineColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackOutlineColor} 此 [Switch] 轨道的轮廓颜色。"},{"name":"trackOutlineWidth","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackOutlineWidth} 此 [Switch] 轨道的轮廓宽度。"},{"name":"thumbIcon","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.thumbIcon} 在此开关拇指上使用的图标"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.switch.materialTapTargetSize} 配置点击目标的最小大小。{@endtemplate}"},{"name":"applyCupertinoTheme","type":"bool?","desc":"{@macro flutter.cupertino.CupertinoSwitch.applyTheme}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.cupertino.CupertinoSwitch.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.switch.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时按钮的 [Material] 的颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在按钮上时按钮的 [Material] 的颜色。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.overlayColor} 开关的 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.switch.splashRadius} 圆形 [Material] 墨水响应的飞溅半径。{@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在 [Switch] 边界内围绕子项的空间量。"}],"id":40,"localName":"切钮","lever":4,"family":1,"linkIds":[41,18],"nodes":[{"file":"node1_base.dart","name":"Switch基础用法","desc":["【inactiveThumbColor】 : 未选中小圈颜色 【Color】","【inactiveTrackColor】 : 未选中滑槽颜色 【Color】","【activeColor】 : 选中时小圈颜色 【Color】","【activeTrackColor】 : 选中时滑槽颜色 【Color】","【onChanged】 : 切换回调 【Function(double)】\""," onChanged时,回调true、null、false三种状态"]},{"file":"node2_image.dart","name":"Switch图片","desc":["【inactiveThumbImage】 : 未选中小圈图片 【ImageProvider】","【activeThumbImage】 : 选中小圈图片 【ImageProvider】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_en-US.json deleted file mode 100644 index 9bf64ba45..000000000 --- a/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SwitchListTile","path":"/src/material/switch_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A [ListTile] with a [Switch]. In other words, a switch with a label.","fields":[{"name":"value","type":"bool","required":true,"desc":"Whether this switch is checked."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user toggles the switch on or off."},{"name":"activeColor","type":"Color?","desc":"{@macro flutter.material.switch.activeColor}"},{"name":"activeTrackColor","type":"Color?","desc":"{@macro flutter.material.switch.activeTrackColor}"},{"name":"inactiveThumbColor","type":"Color?","desc":"{@macro flutter.material.switch.inactiveThumbColor}"},{"name":"inactiveTrackColor","type":"Color?","desc":"{@macro flutter.material.switch.inactiveTrackColor}"},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.activeThumbImage}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onActiveThumbImageError}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.inactiveThumbImage}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onInactiveThumbImageError}"},{"name":"thumbColor","type":"MaterialStateProperty?","desc":"The color of this switch's thumb."},{"name":"trackColor","type":"MaterialStateProperty?","desc":"The color of this switch's track."},{"name":"trackOutlineColor","type":"MaterialStateProperty?","desc":"{@macro flutter.material.switch.trackOutlineColor}"},{"name":"thumbIcon","type":"MaterialStateProperty?","desc":"The icon to use on the thumb of this switch"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.switch.materialTapTargetSize}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.cupertino.CupertinoSwitch.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The color for the switch's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.switch.splashRadius}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tileColor","type":"Color?","desc":"{@macro flutter.material.ListTile.tileColor}"},{"name":"title","type":"Widget?","desc":"The primary content of the list tile."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"secondary","type":"Widget?","desc":"A widget to display on the opposite side of the tile from the switch."},{"name":"isThreeLine","type":"bool","required":true,"desc":"Whether this list tile is intended to display three lines of text."},{"name":"dense","type":"bool?","desc":"Whether this list tile is part of a vertically dense list."},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"The tile's internal padding."},{"name":"selected","type":"bool","required":true,"desc":"Whether to render icons and text in the [activeColor]."},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"Defines the position of control and [secondary], relative to text."},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.ListTile.shape}"},{"name":"selectedTileColor","type":"Color?","desc":"If non-null, defines the background color when [SwitchListTile.selected] is true."},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the list tile's layout will be."},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"hoverColor","type":"Color?","desc":"The color for the tile's [Material] when a pointer is hovering over it."},{"name":"applyCupertinoTheme","type":"bool?","desc":"{@macro flutter.cupertino.CupertinoSwitch.applyTheme}"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"Whether to add button:true to the semantics if onTap is provided. This is a temporary flag to help changing the behavior of ListTile onTap semantics."}],"id":18,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic representation of SwitchListTile","desc":["【secondary】: Left component 【Widget】","【title】: Top middle component 【Widget】","【subtitle】: Bottom middle component 【Widget】","【inactiveThumbColor】: Circle color when not selected 【Color】","【inactiveTrackColor】: Track color when not selected 【Color】","【activeColor】: Circle color when selected 【Color】","【activeTrackColor】: Track color when selected 【Color】","【onChanged】: Selection event 【Function(bool)】"]},{"file":"node2_select.dart","name":"Selection effect of SwitchListTile","desc":["【selected】: Whether selected 【bool】","【inactiveThumbImage】: Circle image when not selected 【ImageProvider】","【activeThumbImage】: Circle image when selected 【ImageProvider】"]},{"file":"node3_dense.dart","name":"Dense property of SwitchListTile","desc":["【dense】: Whether dense 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_zh-CN.json deleted file mode 100644 index 7b9c69549..000000000 --- a/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SwitchListTile","path":"/src/material/switch_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":"带有 [Switch] 的 [ListTile]。换句话说,带有标签的开关。","fields":[{"name":"value","type":"bool","required":true,"desc":"此开关是否被选中。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户打开或关闭开关时调用。"},{"name":"activeColor","type":"Color?","desc":"{@macro flutter.material.switch.activeColor}"},{"name":"activeTrackColor","type":"Color?","desc":"{@macro flutter.material.switch.activeTrackColor}"},{"name":"inactiveThumbColor","type":"Color?","desc":"{@macro flutter.material.switch.inactiveThumbColor}"},{"name":"inactiveTrackColor","type":"Color?","desc":"{@macro flutter.material.switch.inactiveTrackColor}"},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.activeThumbImage}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onActiveThumbImageError}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.inactiveThumbImage}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onInactiveThumbImageError}"},{"name":"thumbColor","type":"MaterialStateProperty?","desc":"此开关拇指的颜色。"},{"name":"trackColor","type":"MaterialStateProperty?","desc":"此开关轨道的颜色。"},{"name":"trackOutlineColor","type":"MaterialStateProperty?","desc":"{@macro flutter.material.switch.trackOutlineColor}"},{"name":"thumbIcon","type":"MaterialStateProperty?","desc":"在此开关拇指上使用的图标"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.switch.materialTapTargetSize}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.cupertino.CupertinoSwitch.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"开关的 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.switch.splashRadius}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tileColor","type":"Color?","desc":"{@macro flutter.material.ListTile.tileColor}"},{"name":"title","type":"Widget?","desc":"列表瓦片的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"secondary","type":"Widget?","desc":"在瓦片与开关相对侧显示的小部件。"},{"name":"isThreeLine","type":"bool","required":true,"desc":"此列表瓦片是否旨在显示三行文本。"},{"name":"dense","type":"bool?","desc":"此列表瓦片是否是垂直密集列表的一部分。"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"瓦片的内部内边距。"},{"name":"selected","type":"bool","required":true,"desc":"是否以 [activeColor] 渲染图标和文本。"},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"定义控件和 [secondary] 相对于文本的位置。"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.ListTile.shape}"},{"name":"selectedTileColor","type":"Color?","desc":"如果非空,定义 [SwitchListTile.selected] 为 true 时的背景颜色。"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义列表瓦片布局的紧凑程度。"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在瓦片上时瓦片的 [Material] 的颜色。"},{"name":"applyCupertinoTheme","type":"bool?","desc":"{@macro flutter.cupertino.CupertinoSwitch.applyTheme}"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"如果提供了 onTap,是否向语义添加 button:true。这是一个临时标志,用于帮助更改 ListTile onTap 语义的行为。"}],"id":18,"localName":"切钮瓦片","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SwitchListTile的基本表现如下","desc":["【secondary】: 左侧组件 【Widget】","【title】: 中间上组件 【Widget】","【subtitle】: 中间下组件 【Widget】","【inactiveThumbColor】: 未选中时圆圈颜色 【Color】","【inactiveTrackColor】: 未选中滑槽颜色 【Color】","【activeColor】: 选中时圆圈颜色 【Color】","【activeTrackColor】: 选中滑槽颜色 【Color】","【onChanged】: 选中事件 【Function(bool)】"]},{"file":"node2_select.dart","name":"SwitchListTile的选中效果","desc":["【selected】: 是否选中 【bool】","【inactiveThumbImage】: 未选中时圆圈图片 【ImageProvider】","【activeThumbImage】: 选中时圆圈图片 【ImageProvider】"]},{"file":"node3_dense.dart","name":"SwitchListTile的密排属性","desc":["【dense】: 是否密排 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_en-US.json deleted file mode 100644 index 5c164cec5..000000000 --- a/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SwitchTheme","path":"/src/material/switch_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a switch theme to descendant [Switch] widgets.","fields":[{"name":"data","type":"SwitchThemeData","required":true,"desc":"The properties used for all descendant [Switch] widgets."}],"id":535,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_zh-CN.json deleted file mode 100644 index 0395a89b8..000000000 --- a/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SwitchTheme","path":"/src/material/switch_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将开关主题应用于后代 [Switch] 小部件。","fields":[{"name":"data","type":"SwitchThemeData","required":true,"desc":"用于所有后代 [Switch] 小部件的属性。"}],"id":535,"localName":"SwitchTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_en-US.json b/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_en-US.json deleted file mode 100644 index 8edee1a51..000000000 --- a/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SystemContextMenu","path":"/src/widgets/system_context_menu.dart","parents":["StatefulWidget","Widget"],"desc":" Displays the system context menu on top of the Flutter view.","fields":[{"name":"anchor","type":"Rect","required":true,"desc":"The [Rect] that the context menu should point to."},{"name":"items","type":"List","required":true,"desc":"A list of the items to be displayed in the system context menu."},{"name":"onSystemHide","type":"VoidCallback?","desc":"Called when the system hides this context menu."}],"id":536,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_zh-CN.json deleted file mode 100644 index 59ec9cced..000000000 --- a/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SystemContextMenu","path":"/src/widgets/system_context_menu.dart","parents":["StatefulWidget","Widget"],"desc":"在 Flutter 视图顶部显示系统上下文菜单。","fields":[{"name":"anchor","type":"Rect","required":true,"desc":"上下文菜单应指向的 [Rect]。"},{"name":"items","type":"List","required":true,"desc":"要在系统上下文菜单中显示的项目列表。"},{"name":"onSystemHide","type":"VoidCallback?","desc":"系统隐藏此上下文菜单时调用。"}],"id":536,"localName":"SystemContextMenu","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Tab/Tab_en-US.json b/modules/widget_system/widgets/doc/widgets/Tab/Tab_en-US.json deleted file mode 100644 index 0813c5fd4..000000000 --- a/modules/widget_system/widgets/doc/widgets/Tab/Tab_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Tab","path":"/src/material/tabs.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design [TabBar] tab.","fields":[{"name":"text","type":"String?","desc":"The text to display as the tab's label."},{"name":"child","type":"Widget?","desc":"The widget to be used as the tab's label."},{"name":"icon","type":"Widget?","desc":"An icon to display as the tab's label."},{"name":"iconMargin","type":"EdgeInsetsGeometry?","desc":"The margin added around the tab's icon."},{"name":"height","type":"double?","desc":"The height of the [Tab]."}],"id":148,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Tab","desc":["【child】: Child component 【Widget】","【text】: Text 【String】","【icon】: Bottom component 【Widget】"," text and child cannot exist simultaneously"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Tab/Tab_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Tab/Tab_zh-CN.json deleted file mode 100644 index b932529ca..000000000 --- a/modules/widget_system/widgets/doc/widgets/Tab/Tab_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Tab","path":"/src/material/tabs.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design [TabBar] 选项卡。","fields":[{"name":"text","type":"String?","desc":"作为选项卡标签显示的文本。"},{"name":"child","type":"Widget?","desc":"用作选项卡标签的小部件。"},{"name":"icon","type":"Widget?","desc":"作为选项卡标签显示的图标。"},{"name":"iconMargin","type":"EdgeInsetsGeometry?","desc":"选项卡图标周围添加的边距。"},{"name":"height","type":"double?","desc":"[Tab] 的高度。"}],"id":148,"localName":"标签","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Tab基本使用","desc":["【child】 : 子组件 【Widget】","【text】 : 文字 【String】","【icon】 : 下方组件 【Widgit】"," text和child不能同时存在"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_en-US.json b/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_en-US.json deleted file mode 100644 index 1fbad7ec1..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabBar","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design primary tab bar.","fields":[{"name":"tabs","type":"List","required":true,"desc":"Typically a list of two or more [Tab] widgets."},{"name":"controller","type":"TabController?","desc":"This widget's selection and animation state."},{"name":"isScrollable","type":"bool","required":true,"desc":"Whether this tab bar can be scrolled horizontally."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the tab bar."},{"name":"indicatorColor","type":"Color?","desc":"The color of the line that appears below the selected tab."},{"name":"indicatorWeight","type":"double","required":true,"desc":"The thickness of the line that appears below the selected tab."},{"name":"indicatorPadding","type":"EdgeInsetsGeometry","required":true,"desc":"The padding for the indicator."},{"name":"indicator","type":"Decoration?","desc":"Defines the appearance of the selected tab indicator."},{"name":"automaticIndicatorColorAdjustment","type":"bool","required":true,"desc":"Whether this tab bar should automatically adjust the [indicatorColor]."},{"name":"indicatorSize","type":"TabBarIndicatorSize?","desc":"Defines how the selected tab indicator's size is computed."},{"name":"dividerColor","type":"Color?","desc":"The color of the divider."},{"name":"dividerHeight","type":"double?","desc":"The height of the divider."},{"name":"labelColor","type":"Color?","desc":"The color of selected tab labels."},{"name":"unselectedLabelColor","type":"Color?","desc":"The color of unselected tab labels."},{"name":"labelStyle","type":"TextStyle?","desc":"The text style of the selected tab labels."},{"name":"unselectedLabelStyle","type":"TextStyle?","desc":"The text style of the unselected tab labels."},{"name":"labelPadding","type":"EdgeInsetsGeometry?","desc":"The padding added to each of the tab labels."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"Defines the ink response focus, hover, and splash colors."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.tabs.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the individual tab widgets."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"onTap","type":"ValueChanged?","desc":"An optional callback that's called when the [TabBar] is tapped."},{"name":"onHover","type":"TabValueChanged?","desc":"An optional callback that's called when a [Tab]'s hover state in the [TabBar] changes."},{"name":"onFocusChange","type":"TabValueChanged?","desc":"An optional callback that's called when a [Tab]'s focus state in the [TabBar] changes."},{"name":"physics","type":"ScrollPhysics?","desc":"How the [TabBar]'s scroll view should respond to user input."},{"name":"splashFactory","type":"InteractiveInkFeatureFactory?","desc":"Creates the tab bar's [InkWell] splash factory, which defines the appearance of \"ink\" splashes that occur in response to taps."},{"name":"splashBorderRadius","type":"BorderRadius?","desc":"Defines the clipping radius of splashes that extend outside the bounds of the tab."},{"name":"tabAlignment","type":"TabAlignment?","desc":"Specifies the horizontal alignment of the tabs within a [TabBar]."},{"name":"textScaler","type":"TextScaler?","desc":"Specifies the text scaling behavior for the [Tab] label."},{"name":"indicatorAnimation","type":"TabIndicatorAnimation?","desc":"Specifies the animation behavior of the tab indicator."}],"id":58,"lever":3,"family":1,"linkIds":[57,59,148],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TabBar","desc":["【controller】 : Controller 【TabController】","【indicatorColor】 : Indicator Color 【Indicator Color】","【indicatorWeight】 : Indicator Height 【double】","【indicatorPadding】 : Indicator Margin 【EdgeInsetsGeometry】","【labelStyle】 : Tab Text Style 【TextStyle】","【unselectedLabelStyle】 : Unselected Text Style 【TextStyle】","【isScrollable】 : Whether Scrollable 【bool】","【onTap】 : Tab Click Callback 【Function(int)】","【tabs】 : Tab Components 【List】"]},{"file":"node2_noShadow.dart","name":"Achieve No Ripple Effect by Setting Theme","desc":["Set the ripple color in the Theme to transparent."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_zh-CN.json deleted file mode 100644 index ec378338f..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabBar","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 主选项卡栏。","fields":[{"name":"tabs","type":"List","required":true,"desc":"通常是两个或更多 [Tab] 小部件的列表。"},{"name":"controller","type":"TabController?","desc":"此小部件的选择和动画状态。"},{"name":"isScrollable","type":"bool","required":true,"desc":"此选项卡栏是否可以水平滚动。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"插入选项卡栏的空间量。"},{"name":"indicatorColor","type":"Color?","desc":"出现在选定选项卡下方的线的颜色。"},{"name":"indicatorWeight","type":"double","required":true,"desc":"出现在选定选项卡下方的线的厚度。"},{"name":"indicatorPadding","type":"EdgeInsetsGeometry","required":true,"desc":"指示器的内边距。"},{"name":"indicator","type":"Decoration?","desc":"定义选定选项卡指示器的外观。"},{"name":"automaticIndicatorColorAdjustment","type":"bool","required":true,"desc":"此选项卡栏是否应自动调整 [indicatorColor]。"},{"name":"indicatorSize","type":"TabBarIndicatorSize?","desc":"定义如何计算选定选项卡指示器的大小。"},{"name":"dividerColor","type":"Color?","desc":"分隔符的颜色。"},{"name":"dividerHeight","type":"double?","desc":"分隔符的高度。"},{"name":"labelColor","type":"Color?","desc":"选定选项卡标签的颜色。"},{"name":"unselectedLabelColor","type":"Color?","desc":"未选定选项卡标签的颜色。"},{"name":"labelStyle","type":"TextStyle?","desc":"选定选项卡标签的文本样式。"},{"name":"unselectedLabelStyle","type":"TextStyle?","desc":"未选定选项卡标签的文本样式。"},{"name":"labelPadding","type":"EdgeInsetsGeometry?","desc":"添加到每个选项卡标签的内边距。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"定义墨水响应焦点、悬停和飞溅颜色。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.tabs.mouseCursor} 鼠标指针进入或悬停在各个选项卡小部件上时的光标。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"onTap","type":"ValueChanged?","desc":"点击 [TabBar] 时调用的可选回调。"},{"name":"onHover","type":"TabValueChanged?","desc":"[TabBar] 中 [Tab] 的悬停状态发生变化时调用的可选回调。"},{"name":"onFocusChange","type":"TabValueChanged?","desc":"[TabBar] 中 [Tab] 的焦点状态发生变化时调用的可选回调。"},{"name":"physics","type":"ScrollPhysics?","desc":"[TabBar] 的滚动视图应如何响应用户输入。"},{"name":"splashFactory","type":"InteractiveInkFeatureFactory?","desc":"创建选项卡栏的 [InkWell] 飞溅工厂,定义响应点击而出现的"},{"name":"splashBorderRadius","type":"BorderRadius?","desc":"定义延伸到选项卡边界之外的飞溅的裁剪半径。"},{"name":"tabAlignment","type":"TabAlignment?","desc":"指定 [TabBar] 内选项卡的水平对齐。"},{"name":"textScaler","type":"TextScaler?","desc":"指定 [Tab] 标签的文本缩放行为。"},{"name":"indicatorAnimation","type":"TabIndicatorAnimation?","desc":"指定选项卡指示器的动画行为。"}],"id":58,"localName":"标签栏","lever":3,"family":1,"linkIds":[57,59,148],"nodes":[{"file":"node1_base.dart","name":"TabBar基本使用","desc":["【controller】 : 控制器 【TabController】","【indicatorColor】 : 指示器颜色 【指示器颜色】","【indicatorWeight】 : 指示器高 【double】","【indicatorPadding】 : 指示器边距 【EdgeInsetsGeometry】","【labelStyle】 : 页签文字样式 【TextStyle】","【unselectedLabelStyle】 : 未选中文字样式 【TextStyle】","【isScrollable】 : 是否可滑动 【bool】","【onTap】 : 页签点击回调 【Function(int)】","【tabs】 : 标签组件 【List】"]},{"file":"node2_noShadow.dart","name":"通过设置Theme可实现无水波纹","desc":["将Theme关于水波纹的颜色设置为透明即可。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_en-US.json deleted file mode 100644 index d3d0343e1..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabBarTheme","path":"/src/material/tab_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Defines a theme for [TabBar] widgets.","fields":[],"id":537,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_zh-CN.json deleted file mode 100644 index 3b92fec07..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabBarTheme","path":"/src/material/tab_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为 [TabBar] 小部件定义主题。","fields":[],"id":537,"localName":"TabBarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_en-US.json b/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_en-US.json deleted file mode 100644 index e93a1e222..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabBarView","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":" A page view that displays the widget which corresponds to the currently selected tab.","fields":[{"name":"controller","type":"TabController?","desc":"This widget's selection and animation state."},{"name":"children","type":"List","required":true,"desc":"One widget per tab."},{"name":"physics","type":"ScrollPhysics?","desc":"How the page view should respond to user input."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"viewportFraction","type":"double","required":true,"desc":"{@macro flutter.widgets.pageview.viewportFraction}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":59,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TabBarView needs to be used in conjunction with TabBar","desc":["【controller】 : Controller 【TabController】","【children】 : Children 【Indicator Color】","【physics】 : Behavior 【ScrollPhysics】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_zh-CN.json deleted file mode 100644 index 143f3f73d..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabBarView","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":"显示与当前选定选项卡对应的小部件的页面视图。","fields":[{"name":"controller","type":"TabController?","desc":"此小部件的选择和动画状态。"},{"name":"children","type":"List","required":true,"desc":"每个选项卡一个小部件。"},{"name":"physics","type":"ScrollPhysics?","desc":"页面视图应如何响应用户输入。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"viewportFraction","type":"double","required":true,"desc":"{@macro flutter.widgets.pageview.viewportFraction}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":59,"localName":"标签页","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TabBarView需要与TabBar联用","desc":["【controller】 : 控制器 【TabController】","【children】 : 孩子们 【指示器颜色】","【physics】 : 表现 【ScrollPhysics】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_en-US.json b/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_en-US.json deleted file mode 100644 index a4ab4ac40..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabPageSelector","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":" Uses [TabPageSelectorIndicator] to display a row of small circular indicators, one per tab.","fields":[{"name":"controller","type":"TabController?","desc":"This widget's selection and animation state."},{"name":"indicatorSize","type":"double","required":true,"desc":"The indicator circle's diameter (the default value is 12.0)."},{"name":"color","type":"Color?","desc":"The indicator circle's fill color for unselected pages."},{"name":"selectedColor","type":"Color?","desc":"The indicator circle's fill color for selected pages and border color for all indicator circles."},{"name":"borderStyle","type":"BorderStyle?","desc":"The indicator circle's border style."}],"id":205,"lever":2,"family":0,"linkIds":[206,59],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TabPageSelector","desc":["【controller】 : Controller 【TabController】","【indicatorSize】: Indicator Size 【double】","【selectedColor】: Selected Color 【Color】","【color】: Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_zh-CN.json deleted file mode 100644 index af98d402d..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabPageSelector","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":"使用 [TabPageSelectorIndicator] 显示一行小圆形指示器,每个选项卡一个。","fields":[{"name":"controller","type":"TabController?","desc":"此小部件的选择和动画状态。"},{"name":"indicatorSize","type":"double","required":true,"desc":"指示器圆圈的直径(默认值为 12.0)。"},{"name":"color","type":"Color?","desc":"未选定页面的指示器圆圈的填充颜色。"},{"name":"selectedColor","type":"Color?","desc":"选定页面的指示器圆圈的填充颜色和所有指示器圆圈的边框颜色。"},{"name":"borderStyle","type":"BorderStyle?","desc":"指示器圆圈的边框样式。"}],"id":205,"localName":"页签滑动选择器","lever":2,"family":0,"linkIds":[206,59],"nodes":[{"file":"node1_base.dart","name":"TabPageSelector基本使用","desc":["【controller】 : 控制器 【TabController】","【indicatorSize】: 指示器大小 【double】","【selectedColor】: 选中色 【Color】","【color】: 颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_en-US.json deleted file mode 100644 index 300d872f6..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabPageSelectorIndicator","path":"/src/material/tabs.dart","parents":["StatelessWidget","Widget"],"desc":" Displays a single circle with the specified size, border style, border color and background colors.","fields":[{"name":"backgroundColor","type":"Color","required":true,"desc":"The indicator circle's background color."},{"name":"borderColor","type":"Color","required":true,"desc":"The indicator circle's border color."},{"name":"size","type":"double","required":true,"desc":"The indicator circle's diameter."},{"name":"borderStyle","type":"BorderStyle","required":true,"desc":"The indicator circle's border style."}],"id":206,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TabPageSelectorIndicator","desc":["【size】: size 【double】","【backgroundColor】: background color 【Color】","【borderColor】: border color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_zh-CN.json deleted file mode 100644 index 90761263a..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabPageSelectorIndicator","path":"/src/material/tabs.dart","parents":["StatelessWidget","Widget"],"desc":"显示具有指定大小、边框样式、边框颜色和背景颜色的单个圆圈。","fields":[{"name":"backgroundColor","type":"Color","required":true,"desc":"指示器圆圈的背景颜色。"},{"name":"borderColor","type":"Color","required":true,"desc":"指示器圆圈的边框颜色。"},{"name":"size","type":"double","required":true,"desc":"指示器圆圈的直径。"},{"name":"borderStyle","type":"BorderStyle","required":true,"desc":"指示器圆圈的边框样式。"}],"id":206,"localName":"页签指示器","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TabPageSelectorIndicator基本使用","desc":["【size】: 大小 【double】","【backgroundColor】: 背景色 【Color】","【borderColor】: 边线色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Table/Table_en-US.json b/modules/widget_system/widgets/doc/widgets/Table/Table_en-US.json deleted file mode 100644 index 48e1b49aa..000000000 --- a/modules/widget_system/widgets/doc/widgets/Table/Table_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Table","path":"/src/widgets/table.dart","parents":["RenderObjectWidget","Widget"],"desc":" A widget that uses the table layout algorithm for its children.","fields":[{"name":"children","type":"List","required":true,"desc":"The rows of the table."},{"name":"columnWidths","type":"Map?","desc":"How the horizontal extents of the columns of this table should be determined."},{"name":"defaultColumnWidth","type":"TableColumnWidth","required":true,"desc":"How to determine with widths of columns that don't have an explicit sizing algorithm."},{"name":"textDirection","type":"TextDirection?","desc":"The direction in which the columns are ordered."},{"name":"border","type":"TableBorder?","desc":"The style to use when painting the boundary and interior divisions of the table."},{"name":"defaultVerticalAlignment","type":"TableCellVerticalAlignment","required":true,"desc":"How cells that do not explicitly specify a vertical alignment are aligned vertically."},{"name":"textBaseline","type":"TextBaseline?","desc":"The text baseline to use when aligning rows using [TableCellVerticalAlignment.baseline]."}],"id":110,"lever":4,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Table","desc":["【children】: Component list 【List】","【columnWidths】: Column widths 【Map】","【defaultColumnWidth】: Default column width 【TableColumnWidth】","【border】: Border 【TableBorder】","【textDirection】: Text direction 【TextDirection】","【defaultVerticalAlignment】: Vertical alignment mode of cells 【TableCellVerticalAlignment】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Table/Table_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Table/Table_zh-CN.json deleted file mode 100644 index 30eecaeba..000000000 --- a/modules/widget_system/widgets/doc/widgets/Table/Table_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Table","path":"/src/widgets/table.dart","parents":["RenderObjectWidget","Widget"],"desc":"为其子项使用表格布局算法的小部件。","fields":[{"name":"children","type":"List","required":true,"desc":"表格的行。"},{"name":"columnWidths","type":"Map?","desc":"如何确定此表格列的水平范围。"},{"name":"defaultColumnWidth","type":"TableColumnWidth","required":true,"desc":"如何确定没有显式大小算法的列的宽度。"},{"name":"textDirection","type":"TextDirection?","desc":"列的排序方向。"},{"name":"border","type":"TableBorder?","desc":"绘制表格边界和内部分割时使用的样式。"},{"name":"defaultVerticalAlignment","type":"TableCellVerticalAlignment","required":true,"desc":"未明确指定垂直对齐的单元格如何垂直对齐。"},{"name":"textBaseline","type":"TextBaseline?","desc":"使用 [TableCellVerticalAlignment.baseline] 对齐行时使用的文本基线。"}],"id":110,"localName":"表格组件","lever":4,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Table基本使用","desc":["【children】 : 组件列表 【List】","【columnWidths】 : 列宽 【Map】","【defaultColumnWidth】 : 默认列宽 【TableColumnWidth】","【border】 : 边线 【TableBorder】","【textDirection】 : 文字方向 【TextDirection】","【defaultVerticalAlignment】 : 单元格竖直方向对齐模式 【TableCellVerticalAlignment】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_en-US.json b/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_en-US.json deleted file mode 100644 index afdadd1c9..000000000 --- a/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TableCell","path":"/src/widgets/table.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that controls how a child of a [Table] is aligned.","fields":[{"name":"verticalAlignment","type":"TableCellVerticalAlignment?","desc":"How this cell is aligned vertically."},{"name":"child","type":"Widget","required":true,"desc":"The child of this cell."}],"id":317,"lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TableCell","desc":["【child】: Component 【Widget】","【verticalAlignment】: Vertical Alignment 【TableCellVerticalAlignment】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_zh-CN.json deleted file mode 100644 index 26f3a9156..000000000 --- a/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TableCell","path":"/src/widgets/table.dart","parents":["StatelessWidget","Widget"],"desc":"控制 [Table] 的子项如何对齐的小部件。","fields":[{"name":"verticalAlignment","type":"TableCellVerticalAlignment?","desc":"此单元格如何垂直对齐。"},{"name":"child","type":"Widget","required":true,"desc":"此单元格的子项。"}],"id":317,"localName":"表室","lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TableCell基本使用","desc":["【child】 : 组件 【Widget】","【verticalAlignment】 : 竖直对齐方式 【TableCellVerticalAlignment】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_en-US.json b/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_en-US.json deleted file mode 100644 index 09e3f2a97..000000000 --- a/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TableRowInkWell","path":"/src/material/data_table.dart","parents":["InkResponse","StatelessWidget","Widget"],"desc":" A rectangular area of a Material that responds to touch but clips its ink splashes to the current table row of the nearest table.","fields":[],"id":151,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TableRowInkWell Basic Events","desc":["【child】 : Child component 【Widget】","【onTap】 : Click event 【Function()】","【onDoubleTap】 : Double-click event 【Function()】","【onLongPress】 : Long-press event 【Function()】","【onHighlightChanged】 : Highlight change callback 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_zh-CN.json deleted file mode 100644 index 9afb9bb7f..000000000 --- a/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TableRowInkWell","path":"/src/material/data_table.dart","parents":["InkResponse","StatelessWidget","Widget"],"desc":"Material 的矩形区域,响应触摸但将其墨水飞溅裁剪到最近表格的当前表格行。","fields":[],"id":151,"localName":"表格水波纹","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TableRowInkWell基本事件","desc":["【child】 : 子组件 【Widget】","【onTap】 : 点击事件 【Function()】","【onDoubleTap】 : 双击事件 【Function()】","【onLongPress】 : 长按事件 【Function()】","【onHighlightChanged】 : 高亮变化回调 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_en-US.json b/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_en-US.json deleted file mode 100644 index dfd931210..000000000 --- a/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TapRegion","path":"/src/widgets/tap_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that defines a region that can detect taps inside or outside of itself and any group of regions it belongs to, without participating in the [gesture disambiguation](https://flutter.dev/to/gesture-disambiguation) system (other than to consume tap down events if [consumeOutsideTaps] is true).","fields":[{"name":"enabled","type":"bool","required":true,"desc":"Whether or not this [TapRegion] is enabled as part of the composite region."},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit testing when deciding how the hit test propagates to children and whether to consider targets behind this [TapRegion]."},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"A callback to be invoked when a tap down is detected outside of this [TapRegion] and any other region with the same [groupId], if any."},{"name":"onTapInside","type":"TapRegionCallback?","desc":"A callback to be invoked when a tap down is detected inside of this [TapRegion], or any other tap region with the same [groupId], if any."},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"A callback to be invoked when a tap up is detected outside of this [TapRegion] and any other region with the same [groupId], if any."},{"name":"onTapUpInside","type":"TapRegionUpCallback?","desc":"A callback to be invoked when a tap up is detected inside of this [TapRegion], or any other tap region with the same [groupId], if any."},{"name":"groupId","type":"Object?","desc":"An optional group ID that groups [TapRegion]s together so that they operate as one region. If any member of a group is hit by a particular tap, then the [onTapOutside] / [onTapUpOutside] will not be called for any members of the group. If any member of the group is hit, then all members will have their [onTapInside] / [onTapUpInside] called."},{"name":"consumeOutsideTaps","type":"bool","required":true,"desc":"If true, then the group that this region belongs to will stop the propagation of all events in the gesture arena."},{"name":"debugLabel","type":"String?","desc":"An optional debug label to help with debugging in debug mode."}],"id":280,"lever":4,"family":2,"linkIds":[146,54],"nodes":[{"file":"node1.dart","name":"Listen to clicks inside and outside the component","desc":["【enabled】 : Whether it is available 【bool】","【onTapOutside】 : Listen to clicks outside 【TapRegionCallback?】","【onTapInside】 : Listen to clicks inside 【TapRegionCallback?】","【groupId】 : Click region group identifier 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_zh-CN.json deleted file mode 100644 index 7f9e74b7c..000000000 --- a/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TapRegion","path":"/src/widgets/tap_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"定义一个区域的小部件,该区域可以检测其内部或外部以及它所属的任何区域组的点击,而不参与[手势消歧](https://flutter.dev/to/gesture-disambiguation)系统(除了在 [consumeOutsideTaps] 为 true 时消费点击向下事件)。","fields":[{"name":"enabled","type":"bool","required":true,"desc":"此 [TapRegion] 是否作为复合区域的一部分启用。"},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"在命中测试期间如何表现,决定命中测试如何传播到子项以及是否考虑此 [TapRegion] 后面的目标。"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"在此 [TapRegion] 和具有相同 [groupId] 的任何其他区域之外检测到点击向下时要调用的回调(如果有)。"},{"name":"onTapInside","type":"TapRegionCallback?","desc":"在此 [TapRegion] 内部或具有相同 [groupId] 的任何其他点击区域内检测到点击向下时要调用的回调(如果有)。"},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"在此 [TapRegion] 和具有相同 [groupId] 的任何其他区域之外检测到点击向上时要调用的回调(如果有)。"},{"name":"onTapUpInside","type":"TapRegionUpCallback?","desc":"在此 [TapRegion] 内部或具有相同 [groupId] 的任何其他点击区域内检测到点击向上时要调用的回调(如果有)。"},{"name":"groupId","type":"Object?","desc":"将 [TapRegion] 组合在一起以便它们作为一个区域操作的可选组 ID。如果组的任何成员被特定点击命中,则不会为组的任何成员调用 [onTapOutside] / [onTapUpOutside]。如果组的任何成员被命中,则所有成员都将调用其 [onTapInside] / [onTapUpInside]。"},{"name":"consumeOutsideTaps","type":"bool","required":true,"desc":"如果为 true,则此区域所属的组将停止手势竞技场中所有事件的传播。"},{"name":"debugLabel","type":"String?","desc":"在调试模式下帮助调试的可选调试标签。"}],"id":280,"localName":"点击范围","lever":4,"family":2,"linkIds":[146,54],"nodes":[{"file":"node1.dart","name":"监听点击组件内部和外部","desc":["【enabled】 : 是否可用 【bool】","【onTapOutside】 : 点击外界监听 【TapRegionCallback?】","【onTapInside】 : 点击内部监听 【TapRegionCallback?】","【groupId】 : 点击区域组标识 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_en-US.json b/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_en-US.json deleted file mode 100644 index a8d4b9b37..000000000 --- a/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TapRegionSurface","path":"/src/widgets/tap_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that provides notification of a tap inside or outside of a set of registered regions, without participating in the [gesture disambiguation](https://flutter.dev/to/gesture-disambiguation) system.","fields":[],"id":538,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_zh-CN.json deleted file mode 100644 index fba258821..000000000 --- a/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TapRegionSurface","path":"/src/widgets/tap_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"提供一组注册区域内部或外部点击通知的小部件,而不参与[手势消歧](https://flutter.dev/to/gesture-disambiguation)系统。","fields":[],"id":538,"localName":"TapRegionSurface","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Text/Text_en-US.json b/modules/widget_system/widgets/doc/widgets/Text/Text_en-US.json deleted file mode 100644 index 5f9cfd591..000000000 --- a/modules/widget_system/widgets/doc/widgets/Text/Text_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Text","path":"/src/widgets/text.dart","parents":["StatelessWidget","Widget"],"desc":" A run of text with a single style.","fields":[{"name":"data","type":"String?","desc":"The text to display."},{"name":"textSpan","type":"InlineSpan?","desc":"The text to display as a [InlineSpan]."},{"name":"style","type":"TextStyle?","desc":"If non-null, the style to use for this text."},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.painting.textPainter.strutStyle}"},{"name":"textAlign","type":"TextAlign?","desc":"How the text should be aligned horizontally."},{"name":"textDirection","type":"TextDirection?","desc":"The directionality of the text."},{"name":"locale","type":"Locale?","desc":"Used to select a font when the same Unicode character can be rendered differently, depending on the locale."},{"name":"softWrap","type":"bool?","desc":"Whether the text should break at soft line breaks."},{"name":"overflow","type":"TextOverflow?","desc":"How visual overflow should be handled."},{"name":"textScaleFactor","type":"double?","desc":"Deprecated. Will be removed in a future version of Flutter. Use [textScaler] instead."},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"maxLines","type":"int?","desc":"An optional maximum number of lines for the text to span, wrapping if necessary. If the text exceeds the given number of lines, it will be truncated according to [overflow]."},{"name":"semanticsLabel","type":"String?","desc":"{@template flutter.widgets.Text.semanticsLabel} An alternative semantics label for this text."},{"name":"semanticsIdentifier","type":"String?","desc":"A unique identifier for the semantics node for this widget."},{"name":"textWidthBasis","type":"TextWidthBasis?","desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"selectionColor","type":"Color?","desc":"The color to use when painting the selection."}],"id":2,"lever":5,"family":0,"linkIds":[101,324],"nodes":[{"file":"node1.dart","name":"Basic Text Styles","desc":["【Parameter】 : Text 【String】","【style】: Text Style 【TextStyle】","【color】: Text Color 【Color】","【fontSize】: Font Size 【double】","【fontWeight】: Font Weight 【FontWeight】","【fontStyle】: Font Style 【fontStyle】","【letterSpacing】: Letter Spacing 【double】"]},{"file":"node2.dart","name":"Text Shadow","desc":["【shadows】 : Text Shadows 【List】","【backgroundColor】: Background Color 【Color】"]},{"file":"node3_decoration.dart","name":"Text Decoration","desc":["【fontFamily】 : Font Family 【String】","【decoration】: Decoration Line 【TextDecoration】","【decorationColor】: Decoration Line Color 【Color】","【decorationThickness】: Decoration Line Thickness 【double】","【decorationStyle】: Decoration Line Style 【TextDecorationStyle】"]},{"file":"node4_textAlign.dart","name":"Text Alignment","desc":["【textAlign】: Alignment 【TextAlign】","The following are: left, right, center, justify, start, end."]},{"file":"node5_textDirection.dart","name":"Text Direction and Maximum Lines","desc":["【maxLines】 : Maximum Lines 【int】","【textDirection】 : Text Direction 【TextDirection】","The following are: rtl, ltr."]},{"file":"node6_softWrap.dart","name":"Wrapping and Overflow Effects","desc":["【softWrap】 : Whether to Wrap 【bool】","【overflow】 : Overflow Effect 【TextOverflow】","When softWrap=false; overflow options are: clip, fade, ellipsis, visible."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Text/Text_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Text/Text_zh-CN.json deleted file mode 100644 index 70f64ff59..000000000 --- a/modules/widget_system/widgets/doc/widgets/Text/Text_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Text","path":"/src/widgets/text.dart","parents":["StatelessWidget","Widget"],"desc":"具有单一样式的文本运行。","fields":[{"name":"data","type":"String?","desc":"要显示的文本。"},{"name":"textSpan","type":"InlineSpan?","desc":"要显示为 [InlineSpan] 的文本。"},{"name":"style","type":"TextStyle?","desc":"如果非空,用于此文本的样式。"},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.painting.textPainter.strutStyle}"},{"name":"textAlign","type":"TextAlign?","desc":"文本应如何水平对齐。"},{"name":"textDirection","type":"TextDirection?","desc":"文本的方向性。"},{"name":"locale","type":"Locale?","desc":"当同一个 Unicode 字符可以根据区域设置以不同方式呈现时,用于选择字体。"},{"name":"softWrap","type":"bool?","desc":"文本是否应在软换行符处换行。"},{"name":"overflow","type":"TextOverflow?","desc":"应如何处理视觉溢出。"},{"name":"textScaleFactor","type":"double?","desc":"已弃用。将在 Flutter 的未来版本中删除。请改用 [textScaler]。"},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"maxLines","type":"int?","desc":"文本跨越的可选最大行数,必要时换行。如果文本超过给定的行数,将根据 [overflow] 截断。"},{"name":"semanticsLabel","type":"String?","desc":"{@template flutter.widgets.Text.semanticsLabel} 此文本的替代语义标签。"},{"name":"semanticsIdentifier","type":"String?","desc":"此小部件语义节点的唯一标识符。"},{"name":"textWidthBasis","type":"TextWidthBasis?","desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"selectionColor","type":"Color?","desc":"绘制选择时使用的颜色。"}],"id":2,"localName":"文字组件","lever":5,"family":0,"linkIds":[101,324],"nodes":[{"file":"node1.dart","name":"文字的基本样式","desc":["【入参】 : 文字 【String】","【style】: 文字样式 【TextStyle】","【color】: 文字样式 【Color】","【fontSize】: 文字大小 【double】","【fontWeight】: 字重 【FontWeight】","【fontStyle】: 字体样式 【fontStyle】","【letterSpacing】: 字距 【double】"]},{"file":"node2.dart","name":"文字阴影","desc":["【shadows】 : 文字 【List】","【backgroundColor】: 背景颜色 【Color】"]},{"file":"node3_decoration.dart","name":"文字装饰线","desc":["【fontFamily】 : 文字字体 【String】","【decoration】: 装饰线 【TextDecoration】","【decorationColor】: 装饰线颜色 【Color】","【decorationThickness】: 装饰线粗 【double】","【decorationStyle】: 装饰线样式 【TextDecorationStyle】"]},{"file":"node4_textAlign.dart","name":"文字对齐方式","desc":["【textAlign】: 对齐方式 【TextAlign】","下面依次是:left、right、center、justify、start、end,"]},{"file":"node5_textDirection.dart","name":"文字方向与最大行数","desc":["【maxLines】 : 最大行数 【int】","【textDirection】 : 文字方向 【TextDirection】","下面依次是:rtl、ltr,"]},{"file":"node6_softWrap.dart","name":"是否包裹与越界效果","desc":["【softWrap】 : 是否换行 【bool】","【overflow】 : 越界效果 【TextOverflow】","下面softWrap=false; overflow依次是:clip、fade、ellipsis、visible,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_en-US.json b/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_en-US.json deleted file mode 100644 index 18a4ee1c5..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextButton","path":"/src/material/text_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":" A Material Design \"Text Button\".","fields":[],"id":353,"lever":3,"family":1,"linkIds":[354,355],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TextButton","desc":["【child】 : Whether it has a scrollable body 【Widget】","【onPressed】 : Click event 【VoidCallback】","【onLongPress】 : Long press event 【VoidCallback】"]},{"file":"node2_style.dart","name":"TextButton Style","desc":["【style】 : Button style 【ButtonStyle】","【focusNode】 : Focus 【FocusNode】","【clipBehavior】 : Clip behavior 【Clip】","【autofocus】 : Auto focus 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_zh-CN.json deleted file mode 100644 index 35652ce8b..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextButton","path":"/src/material/text_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":"Material Design 文本按钮。","fields":[],"id":353,"localName":"文字按钮","lever":3,"family":1,"linkIds":[354,355],"nodes":[{"file":"node1_base.dart","name":"TextButton基本使用","desc":["【child】 : 是否具有滚动主体 【Widget】","【onPressed】 : 点击事件 【VoidCallback】","【onLongPress】 : 长按事件 【VoidCallback】"]},{"file":"node2_style.dart","name":"TextButton样式","desc":["【style】 : 按钮样式 【ButtonStyle】","【focusNode】 : 焦点 【FocusNode】","【clipBehavior】 : 裁剪行为 【Clip】","【autofocus】 : 自动聚焦 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_en-US.json deleted file mode 100644 index f9cacb2d3..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextButtonTheme","path":"/src/material/text_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [TextButton] descendants.","fields":[{"name":"data","type":"TextButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":539,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_zh-CN.json deleted file mode 100644 index 1b8fe6708..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextButtonTheme","path":"/src/material/text_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [TextButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"TextButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":539,"localName":"TextButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextField/TextField_en-US.json b/modules/widget_system/widgets/doc/widgets/TextField/TextField_en-US.json deleted file mode 100644 index 40c92423f..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextField/TextField_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextField","path":"/src/material/text_field.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design text field.","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"The configuration for the magnifier of this text field."},{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited."},{"name":"focusNode","type":"FocusNode?","desc":"Defines the keyboard focus for this widget."},{"name":"decoration","type":"InputDecoration?","desc":"The decoration to show around the text field."},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.widgets.editableText.keyboardType}"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@template flutter.widgets.TextField.textInputAction} The type of action button to use for the keyboard."},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"style","type":"TextStyle?","desc":"The style to use for the text being edited."},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@macro flutter.material.InputDecorator.textAlignVertical}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"statesController","type":"MaterialStatesController?","desc":"Represents the interactive \"state\" of this widget in terms of a set of [WidgetState]s, including [WidgetState.disabled], [WidgetState.hovered], [WidgetState.error], and [WidgetState.focused]."},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@macro flutter.widgets.editableText.obscuringCharacter}"},{"name":"obscureText","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.obscureText}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines} * [expands], which determines whether the field should fill the height of its parent."},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines} * [expands], which determines whether the field should fill the height of its parent."},{"name":"expands","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.expands}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.readOnly}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"Configuration of toolbar options."},{"name":"showCursor","type":"bool?","desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"maxLength","type":"int?","desc":"The maximum number of characters (Unicode grapheme clusters) to allow in the text field."},{"name":"maxLengthEnforcement","type":"MaxLengthEnforcement?","desc":"Determines how the [maxLength] limit should be enforced."},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onChanged}"},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@macro flutter.widgets.editableText.onEditingComplete}"},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onSubmitted}"},{"name":"onAppPrivateCommand","type":"AppPrivateCommandCallback?","desc":"{@macro flutter.widgets.editableText.onAppPrivateCommand}"},{"name":"inputFormatters","type":"List?","desc":"{@macro flutter.widgets.editableText.inputFormatters}"},{"name":"enabled","type":"bool?","desc":"If false the text field is \"disabled\": it ignores taps and its [decoration] is rendered in grey."},{"name":"ignorePointers","type":"bool?","desc":"Determines whether this widget ignores pointer events."},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius?","desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool?","desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"The color of the cursor."},{"name":"cursorErrorColor","type":"Color?","desc":"The color of the cursor when the [InputDecorator] is showing an error."},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"Controls how tall the selection highlight boxes are computed to be."},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"Controls how wide the selection highlight boxes are computed to be."},{"name":"keyboardAppearance","type":"Brightness?","desc":"The appearance of the keyboard."},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"onTap","type":"GestureTapCallback?","desc":"{@template flutter.material.textfield.onTap} Called for the first tap in a series of taps."},{"name":"onTapAlwaysCalled","type":"bool","required":true,"desc":"Whether [onTap] should be called for every tap."},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapOutside}"},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"{@macro flutter.widgets.editableText.onTapUpOutside}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"buildCounter","type":"InputCounterWidgetBuilder?","desc":"Callback that generates a custom [InputDecoration.counter] widget."},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.editableText.scrollController}"},{"name":"autofillHints","type":"Iterable?","desc":"{@macro flutter.widgets.editableText.autofillHints} {@macro flutter.services.AutofillConfiguration.autofillHints}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"{@template flutter.material.textfield.restorationId} Restoration ID to save and restore the state of the text field."},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.scribbleEnabled}"},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.stylusHandwritingEnabled}"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@macro flutter.widgets.editableText.contentInsertionConfiguration}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"canRequestFocus","type":"bool","required":true,"desc":"Determine whether this text field can request the primary focus."},{"name":"undoController","type":"UndoHistoryController?","desc":"{@macro flutter.widgets.undoHistory.controller}"},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@macro flutter.widgets.EditableText.spellCheckConfiguration}"}],"id":54,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TextField","desc":["【controller】 : Controller 【TextEditingController】","【style】 : Text Style 【TextStyle】","【decoration】 : Decoration 【InputDecoration】","【onEditingComplete】 : Input Completion Event 【Function()】","【onSubmitted】 : Submission Event 【Function(String)】","【onChanged】 : Input Event 【Function(String)】"]},{"file":"node2_cursor.dart","name":"Line Number and Cursor of TextField","desc":["【minLines】 : Minimum Lines 【int】","【maxLines】 : Maximum Lines 【int】","【cursorRadius】 : Cursor Radius 【Radius】","【cursorColor】 : Cursor Color 【Color】","【cursorWidth】 : Cursor Width 【double】","【showCursor】 : Whether to Show Cursor 【bool】","【autofocus】 : Auto Focus 【bool】"]},{"file":"node3_decoration.dart","name":"Complex Decoration of Decoration","desc":["InputDecoration has many decoration points, corresponding to the code:","border: Border related","helper: Bottom left corner related hints","counter: Bottom right corner related hints","prefix: Innermost left side of the input box","suffix: Innermost right side of the input box","label: Text when no focus","label: Text when no focus","hint: Hint text related","border: Border related"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextField/TextField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextField/TextField_zh-CN.json deleted file mode 100644 index adeb57e32..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextField/TextField_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextField","path":"/src/material/text_field.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 文本字段。","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"此文本字段放大镜的配置。"},{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"controller","type":"TextEditingController?","desc":"控制正在编辑的文本。"},{"name":"focusNode","type":"FocusNode?","desc":"定义此小部件的键盘焦点。"},{"name":"decoration","type":"InputDecoration?","desc":"在文本字段周围显示的装饰。"},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.widgets.editableText.keyboardType}"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@template flutter.widgets.TextField.textInputAction} 用于键盘的操作按钮类型。"},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"style","type":"TextStyle?","desc":"用于正在编辑的文本的样式。"},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@macro flutter.material.InputDecorator.textAlignVertical}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"statesController","type":"MaterialStatesController?","desc":"表示此小部件在一组 [WidgetState] 方面的交互"},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@macro flutter.widgets.editableText.obscuringCharacter}"},{"name":"obscureText","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.obscureText}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines} * [expands],确定字段是否应填充其父项的高度。"},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines} * [expands],确定字段是否应填充其父项的高度。"},{"name":"expands","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.expands}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.readOnly}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"工具栏选项的配置。"},{"name":"showCursor","type":"bool?","desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"maxLength","type":"int?","desc":"文本字段中允许的最大字符数(Unicode 字素簇)。"},{"name":"maxLengthEnforcement","type":"MaxLengthEnforcement?","desc":"确定如何强制执行 [maxLength] 限制。"},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onChanged}"},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@macro flutter.widgets.editableText.onEditingComplete}"},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onSubmitted}"},{"name":"onAppPrivateCommand","type":"AppPrivateCommandCallback?","desc":"{@macro flutter.widgets.editableText.onAppPrivateCommand}"},{"name":"inputFormatters","type":"List?","desc":"{@macro flutter.widgets.editableText.inputFormatters}"},{"name":"enabled","type":"bool?","desc":"如果为 false,文本字段被"},{"name":"ignorePointers","type":"bool?","desc":"确定此小部件是否忽略指针事件。"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius?","desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool?","desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"光标的颜色。"},{"name":"cursorErrorColor","type":"Color?","desc":"[InputDecorator] 显示错误时光标的颜色。"},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"控制选择高亮框的计算高度。"},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"控制选择高亮框的计算宽度。"},{"name":"keyboardAppearance","type":"Brightness?","desc":"键盘的外观。"},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"onTap","type":"GestureTapCallback?","desc":"{@template flutter.material.textfield.onTap} 为一系列点击中的第一次点击调用。"},{"name":"onTapAlwaysCalled","type":"bool","required":true,"desc":"是否应为每次点击调用 [onTap]。"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapOutside}"},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"{@macro flutter.widgets.editableText.onTapUpOutside}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"buildCounter","type":"InputCounterWidgetBuilder?","desc":"生成自定义 [InputDecoration.counter] 小部件的回调。"},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.editableText.scrollController}"},{"name":"autofillHints","type":"Iterable?","desc":"{@macro flutter.widgets.editableText.autofillHints} {@macro flutter.services.AutofillConfiguration.autofillHints}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"{@template flutter.material.textfield.restorationId} 用于保存和恢复文本字段状态的恢复 ID。"},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.scribbleEnabled}"},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.stylusHandwritingEnabled}"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@macro flutter.widgets.editableText.contentInsertionConfiguration}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"canRequestFocus","type":"bool","required":true,"desc":"确定此文本字段是否可以请求主要焦点。"},{"name":"undoController","type":"UndoHistoryController?","desc":"{@macro flutter.widgets.undoHistory.controller}"},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@macro flutter.widgets.EditableText.spellCheckConfiguration}"}],"id":54,"localName":"输入框","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TextField基本用法","desc":["【controller】 : 控制器 【TextEditingController】","【style】 : 文字样式 【TextStyle】","【decoration】 : 装饰线 【InputDecoration】","【onEditingComplete】 : 输入完成事件 【Function()】","【onSubmitted】 : 提交事件 【Function(String)】","【onChanged】 : 输入事件 【Function(String)】"]},{"file":"node2_cursor.dart","name":"TextField行数和cursor","desc":["【minLines】 : 最小行数 【int】","【maxLines】 : 最大行数 【int】","【cursorRadius】 : 光标半径 【Radius】","【cursorColor】 : 光标颜色 【Color】","【cursorWidth】 : 光标宽度 【double】","【showCursor】 : 是否显示光标 【bool】","【autofocus】 : 自动聚焦 【bool】"]},{"file":"node3_decoration.dart","name":"decoration的复杂装饰","desc":["InputDecoration有非常多的装饰点,对应点缀见代码:","border: 边线相关","helper: 左下角相关提示","counter: 右下角相关提示","prefix: 输入框内部最左侧","suffix: 输入框内部最右侧","label: 无焦点时文字","label: 无焦点时文字","hint: 提示文字相关","border: 边线相关"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_en-US.json b/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_en-US.json deleted file mode 100644 index 4d4a3cc8c..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextFieldTapRegion","path":"/src/widgets/tap_region.dart","parents":["TapRegion","SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A [TapRegion] that adds its children to the tap region group for widgets based on the [EditableText] text editing widget, such as [TextField] and [CupertinoTextField].","fields":[],"id":281,"lever":3,"family":2,"linkIds":[280,54,245],"nodes":[{"file":"node1.dart","name":"Monitor Clicks Inside and Outside the Component","desc":["In the example, clicking the plus and minus signs does not cancel the focus of the input field, and the keyboard can still be used for input.","【enabled】 : Whether it is available 【bool】","【onTapOutside】 : External click listener 【TapRegionCallback?】","【onTapInside】 : Internal click listener 【TapRegionCallback?】","【groupId】 : Clickable area group identifier 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_zh-CN.json deleted file mode 100644 index 050575390..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextFieldTapRegion","path":"/src/widgets/tap_region.dart","parents":["TapRegion","SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项添加到基于 [EditableText] 文本编辑小部件(如 [TextField] 和 [CupertinoTextField])的小部件的点击区域组的 [TapRegion]。","fields":[],"id":281,"localName":"输入框点击范围","lever":3,"family":2,"linkIds":[280,54,245],"nodes":[{"file":"node1.dart","name":"监听点击组件内部和外部","desc":["案例中点击加号和减号,不会取消输入框的焦点,键盘仍然可以输入。","【enabled】 : 是否可用 【bool】","【onTapOutside】 : 点击外界监听 【TapRegionCallback?】","【onTapInside】 : 点击内部监听 【TapRegionCallback?】","【groupId】 : 点击区域组标识 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_en-US.json b/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_en-US.json deleted file mode 100644 index 78f57b606..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextFormField","path":"/src/material/text_form_field.dart","parents":["FormField","StatefulWidget","Widget"],"desc":" A [FormField] that contains a [TextField].","fields":[{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited."},{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.material.TextFormField.onChanged} Called when the user initiates a change to the TextField's value: when they have inserted or deleted text or reset the form. {@endtemplate}"}],"id":199,"lever":4,"family":1,"linkIds":[54,198],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TextFormField","desc":["The basic properties are the same as TextField, see details there","【validator】: Validation function 【FormFieldValidator】","【onFieldSubmitted】: Submission callback 【ValueChanged】","【onSaved】: Callback when the form is saved 【FormFieldSetter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_zh-CN.json deleted file mode 100644 index efea97220..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextFormField","path":"/src/material/text_form_field.dart","parents":["FormField","StatefulWidget","Widget"],"desc":"包含 [TextField] 的 [FormField]。","fields":[{"name":"controller","type":"TextEditingController?","desc":"控制正在编辑的文本。"},{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.material.TextFormField.onChanged} 当用户启动对 TextField 值的更改时调用:当他们插入或删除文本或重置表单时。{@endtemplate}"}],"id":199,"localName":"文字表单输入","lever":4,"family":1,"linkIds":[54,198],"nodes":[{"file":"node1_base.dart","name":"TextFormField基本使用","desc":["基本属性和TextField一致,详见之","【validator】 : 验证函数 【FormFieldValidator 】","【onFieldSubmitted】 : 提交回调 【ValueChanged】","【onSaved】 : 表单save时回调 【FormFieldSetter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_en-US.json b/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_en-US.json deleted file mode 100644 index d4dd5e6a9..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextMagnifier","path":"/src/material/magnifier.dart","parents":["StatefulWidget","Widget"],"desc":" A [Magnifier] positioned by rules dictated by the native Android magnifier.","fields":[{"name":"magnifierInfo","type":"ValueNotifier","required":true,"desc":"The current status of the user's touch."}],"id":540,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_zh-CN.json deleted file mode 100644 index 64d79faee..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextMagnifier","path":"/src/material/magnifier.dart","parents":["StatefulWidget","Widget"],"desc":"由原生 Android 放大镜规则决定位置的 [Magnifier]。","fields":[{"name":"magnifierInfo","type":"ValueNotifier","required":true,"desc":"用户触摸的当前状态。"}],"id":540,"localName":"TextMagnifier","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_en-US.json b/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_en-US.json deleted file mode 100644 index 88b923e72..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextSelectionGestureDetector","path":"/src/widgets/text_selection.dart","parents":["StatefulWidget","Widget"],"desc":" A gesture detector to respond to non-exclusive event chains for a text field.","fields":[{"name":"onTapTrackStart","type":"VoidCallback?","desc":"{@template flutter.gestures.selectionrecognizers.TextSelectionGestureDetector.onTapTrackStart} Callback used to indicate that a tap tracking has started upon a [PointerDownEvent]. {@endtemplate}"},{"name":"onTapTrackReset","type":"VoidCallback?","desc":"{@template flutter.gestures.selectionrecognizers.TextSelectionGestureDetector.onTapTrackReset} Callback used to indicate that a tap tracking has been reset which happens on the next [PointerDownEvent] after the timer between two taps elapses, the recognizer loses the arena, the gesture is cancelled or the recognizer is disposed of. {@endtemplate}"},{"name":"onTapDown","type":"GestureTapDragDownCallback?","desc":"Called for every tap down including every tap down that's part of a double click or a long press, except touches that include enough movement to not qualify as taps (e.g. pans and flings)."},{"name":"onForcePressStart","type":"GestureForcePressStartCallback?","desc":"Called when a pointer has tapped down and the force of the pointer has just become greater than [ForcePressGestureRecognizer.startPressure]."},{"name":"onForcePressEnd","type":"GestureForcePressEndCallback?","desc":"Called when a pointer that had previously triggered [onForcePressStart] is lifted off the screen."},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"Called for a tap event with the secondary mouse button."},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"Called for a tap down event with the secondary mouse button."},{"name":"onSingleTapUp","type":"GestureTapDragUpCallback?","desc":"Called for the first tap in a series of taps, consecutive taps do not call this method."},{"name":"onSingleTapCancel","type":"GestureCancelCallback?","desc":"Called for each touch that becomes recognized as a gesture that is not a short tap, such as a long tap or drag. It is called at the moment when another gesture from the touch is recognized."},{"name":"onUserTap","type":"GestureTapCallback?","desc":"Called for the first tap in a series of taps when [onUserTapAlwaysCalled] is disabled, which is the default behavior."},{"name":"onSingleLongTapStart","type":"GestureLongPressStartCallback?","desc":"Called for a single long tap that's sustained for longer than [kLongPressTimeout] but not necessarily lifted. Not called for a double-tap-hold, which calls [onDoubleTapDown] instead."},{"name":"onSingleLongTapMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"Called after [onSingleLongTapStart] when the pointer is dragged."},{"name":"onSingleLongTapEnd","type":"GestureLongPressEndCallback?","desc":"Called after [onSingleLongTapStart] when the pointer is lifted."},{"name":"onDoubleTapDown","type":"GestureTapDragDownCallback?","desc":"Called after a momentary hold or a short tap that is close in space and time (within [kDoubleTapTimeout]) to a previous short tap."},{"name":"onTripleTapDown","type":"GestureTapDragDownCallback?","desc":"Called after a momentary hold or a short tap that is close in space and time (within [kDoubleTapTimeout]) to a previous double-tap."},{"name":"onDragSelectionStart","type":"GestureTapDragStartCallback?","desc":"Called when a mouse starts dragging to select text."},{"name":"onDragSelectionUpdate","type":"GestureTapDragUpdateCallback?","desc":"Called repeatedly as a mouse moves while dragging."},{"name":"onDragSelectionEnd","type":"GestureTapDragEndCallback?","desc":"Called when a mouse that was previously dragging is released."},{"name":"onUserTapAlwaysCalled","type":"bool","required":true,"desc":"Whether [onUserTap] will be called for all taps including consecutive taps."},{"name":"behavior","type":"HitTestBehavior?","desc":"How this gesture detector should behave during hit testing."},{"name":"child","type":"Widget","required":true,"desc":"Child below this widget."}],"id":541,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_zh-CN.json deleted file mode 100644 index cb13dfbbf..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextSelectionGestureDetector","path":"/src/widgets/text_selection.dart","parents":["StatefulWidget","Widget"],"desc":"响应文本字段的非独占事件链的手势检测器。","fields":[{"name":"onTapTrackStart","type":"VoidCallback?","desc":"{@template flutter.gestures.selectionrecognizers.TextSelectionGestureDetector.onTapTrackStart} 用于指示在 [PointerDownEvent] 上已开始点击跟踪的回调。{@endtemplate}"},{"name":"onTapTrackReset","type":"VoidCallback?","desc":"{@template flutter.gestures.selectionrecognizers.TextSelectionGestureDetector.onTapTrackReset} 用于指示点击跟踪已重置的回调,这发生在两次点击之间的计时器过期后的下一个 [PointerDownEvent] 上,识别器失去竞技场,手势被取消或识别器被处置。{@endtemplate}"},{"name":"onTapDown","type":"GestureTapDragDownCallback?","desc":"为每次点击向下调用,包括作为双击或长按一部分的每次点击向下,除了包含足够移动而不符合点击条件的触摸(例如平移和滑动)。"},{"name":"onForcePressStart","type":"GestureForcePressStartCallback?","desc":"当指针已点击向下且指针的力刚刚变得大于 [ForcePressGestureRecognizer.startPressure] 时调用。"},{"name":"onForcePressEnd","type":"GestureForcePressEndCallback?","desc":"当先前触发 [onForcePressStart] 的指针从屏幕上抬起时调用。"},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"使用辅助鼠标按钮的点击事件调用。"},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"使用辅助鼠标按钮的点击向下事件调用。"},{"name":"onSingleTapUp","type":"GestureTapDragUpCallback?","desc":"为一系列点击中的第一次点击调用,连续点击不调用此方法。"},{"name":"onSingleTapCancel","type":"GestureCancelCallback?","desc":"为每个被识别为非短点击手势(如长点击或拖动)的触摸调用。在触摸的另一个手势被识别的那一刻调用。"},{"name":"onUserTap","type":"GestureTapCallback?","desc":"当 [onUserTapAlwaysCalled] 被禁用时(这是默认行为),为一系列点击中的第一次点击调用。"},{"name":"onSingleLongTapStart","type":"GestureLongPressStartCallback?","desc":"为持续时间超过 [kLongPressTimeout] 但不一定抬起的单次长点击调用。不为双击保持调用,而是调用 [onDoubleTapDown]。"},{"name":"onSingleLongTapMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"在 [onSingleLongTapStart] 之后当指针被拖动时调用。"},{"name":"onSingleLongTapEnd","type":"GestureLongPressEndCallback?","desc":"在 [onSingleLongTapStart] 之后当指针抬起时调用。"},{"name":"onDoubleTapDown","type":"GestureTapDragDownCallback?","desc":"在短暂保持或在空间和时间上接近(在 [kDoubleTapTimeout] 内)先前短点击的短点击之后调用。"},{"name":"onTripleTapDown","type":"GestureTapDragDownCallback?","desc":"在短暂保持或在空间和时间上接近(在 [kDoubleTapTimeout] 内)先前双击的短点击之后调用。"},{"name":"onDragSelectionStart","type":"GestureTapDragStartCallback?","desc":"当鼠标开始拖动以选择文本时调用。"},{"name":"onDragSelectionUpdate","type":"GestureTapDragUpdateCallback?","desc":"当鼠标在拖动时移动时重复调用。"},{"name":"onDragSelectionEnd","type":"GestureTapDragEndCallback?","desc":"当先前拖动的鼠标被释放时调用。"},{"name":"onUserTapAlwaysCalled","type":"bool","required":true,"desc":"是否为所有点击(包括连续点击)调用 [onUserTap]。"},{"name":"behavior","type":"HitTestBehavior?","desc":"此手势检测器在命中测试期间应如何表现。"},{"name":"child","type":"Widget","required":true,"desc":"此小部件下方的子项。"}],"id":541,"localName":"TextSelectionGestureDetector","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_en-US.json deleted file mode 100644 index fc0507e6f..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextSelectionTheme","path":"/src/material/text_selection_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the appearance of text selection in this widget's subtree.","fields":[{"name":"data","type":"TextSelectionThemeData","required":true,"desc":"The properties for descendant [TextField] and [SelectableText] widgets."}],"id":542,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_zh-CN.json deleted file mode 100644 index 0362e8687..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextSelectionTheme","path":"/src/material/text_selection_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"定义此小部件子树中文本选择外观的继承小部件。","fields":[{"name":"data","type":"TextSelectionThemeData","required":true,"desc":"后代 [TextField] 和 [SelectableText] 小部件的属性。"}],"id":542,"localName":"TextSelectionTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_en-US.json deleted file mode 100644 index 70d38ca24..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextSelectionToolbar","path":"/src/material/text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" A fully-functional Material-style text selection toolbar.","fields":[{"name":"anchorAbove","type":"Offset","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.anchorAbove} The focal point above which the toolbar attempts to position itself."},{"name":"anchorBelow","type":"Offset","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.anchorBelow} The focal point below which the toolbar attempts to position itself, if it doesn't fit above [anchorAbove]. {@endtemplate}"},{"name":"children","type":"List","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.children} The children that will be displayed in the text selection toolbar."},{"name":"toolbarBuilder","type":"ToolbarBuilder","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.toolbarBuilder} Builds the toolbar container."}],"id":543,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_zh-CN.json deleted file mode 100644 index 2403b2071..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextSelectionToolbar","path":"/src/material/text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"功能齐全的 Material 风格文本选择工具栏。","fields":[{"name":"anchorAbove","type":"Offset","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.anchorAbove} 工具栏尝试定位自己的上方焦点。"},{"name":"anchorBelow","type":"Offset","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.anchorBelow} 如果工具栏不适合在 [anchorAbove] 上方,则工具栏尝试定位自己的下方焦点。{@endtemplate}"},{"name":"children","type":"List","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.children} 将在文本选择工具栏中显示的子项。"},{"name":"toolbarBuilder","type":"ToolbarBuilder","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.toolbarBuilder} 构建工具栏容器。"}],"id":543,"localName":"TextSelectionToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_en-US.json b/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_en-US.json deleted file mode 100644 index 9f907d4f1..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextSelectionToolbarTextButton","path":"/src/material/text_selection_toolbar_text_button.dart","parents":["StatelessWidget","Widget"],"desc":" A button styled like a Material native Android text selection menu button.","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@template flutter.material.TextSelectionToolbarTextButton.child} The child of this button."},{"name":"onPressed","type":"VoidCallback?","desc":"{@template flutter.material.TextSelectionToolbarTextButton.onPressed} Called when this button is pressed. {@endtemplate}"},{"name":"padding","type":"EdgeInsets","required":true,"desc":"The padding between the button's edge and its child."},{"name":"alignment","type":"AlignmentGeometry?","desc":"The alignment of the button's child."}],"id":544,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_zh-CN.json deleted file mode 100644 index ab63d380d..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextSelectionToolbarTextButton","path":"/src/material/text_selection_toolbar_text_button.dart","parents":["StatelessWidget","Widget"],"desc":"样式类似 Material 原生 Android 文本选择菜单按钮的按钮。","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@template flutter.material.TextSelectionToolbarTextButton.child} 此按钮的子项。"},{"name":"onPressed","type":"VoidCallback?","desc":"{@template flutter.material.TextSelectionToolbarTextButton.onPressed} 按下此按钮时调用。{@endtemplate}"},{"name":"padding","type":"EdgeInsets","required":true,"desc":"按钮边缘与其子项之间的内边距。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"按钮子项的对齐。"}],"id":544,"localName":"TextSelectionToolbarTextButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Texture/Texture_en-US.json b/modules/widget_system/widgets/doc/widgets/Texture/Texture_en-US.json deleted file mode 100644 index 7724b90de..000000000 --- a/modules/widget_system/widgets/doc/widgets/Texture/Texture_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Texture","path":"/src/widgets/texture.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A rectangle upon which a backend texture is mapped.","fields":[{"name":"textureId","type":"int","required":true,"desc":"The identity of the backend texture."},{"name":"freeze","type":"bool","required":true,"desc":"When true the texture will not be updated with new frames."},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"{@template flutter.widgets.Texture.filterQuality} The quality of sampling the texture and rendering it on screen."}],"id":545,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Texture/Texture_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Texture/Texture_zh-CN.json deleted file mode 100644 index 9e722ae89..000000000 --- a/modules/widget_system/widgets/doc/widgets/Texture/Texture_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Texture","path":"/src/widgets/texture.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"映射后端纹理的矩形。","fields":[{"name":"textureId","type":"int","required":true,"desc":"后端纹理的标识。"},{"name":"freeze","type":"bool","required":true,"desc":"为 true 时,纹理不会用新帧更新。"},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"{@template flutter.widgets.Texture.filterQuality} 采样纹理并在屏幕上渲染的质量。"}],"id":545,"localName":"Texture","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Theme/Theme_en-US.json b/modules/widget_system/widgets/doc/widgets/Theme/Theme_en-US.json deleted file mode 100644 index 0e52979bf..000000000 --- a/modules/widget_system/widgets/doc/widgets/Theme/Theme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Theme","path":"/src/material/theme.dart","parents":["StatelessWidget","Widget"],"desc":" Applies a theme to descendant widgets.","fields":[{"name":"data","type":"ThemeData","required":true,"desc":"Specifies the color and typography values for descendant widgets."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":168,"lever":4,"family":0,"linkIds":[65,169,224],"nodes":[{"file":"node1_base.dart","name":"Text Style-ThemeData#TextTheme","desc":["Child components can use the theme data obtained through ThemeData.of."]},{"file":"node2_use.dart","name":"Usage of Theme","desc":["Using Theme, you can specify a wide range of properties as themes, which will be applied to all descendant components, such as specifying properties for fonts, sliders, cards, text, dividers, buttons, etc."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Theme/Theme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Theme/Theme_zh-CN.json deleted file mode 100644 index 929ef09e4..000000000 --- a/modules/widget_system/widgets/doc/widgets/Theme/Theme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Theme","path":"/src/material/theme.dart","parents":["StatelessWidget","Widget"],"desc":"将主题应用于后代小部件。","fields":[{"name":"data","type":"ThemeData","required":true,"desc":"指定后代小部件的颜色和排版值。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":168,"localName":"主题","lever":4,"family":0,"linkIds":[65,169,224],"nodes":[{"file":"node1_base.dart","name":"文字样式-ThemeData#TextTheme","desc":["子组件可以通过ThemeData.of获取主题的数据进行使用。"]},{"file":"node2_use.dart","name":"Theme的用法","desc":["使用Theme,可以指定非常多的属性作为主题,这些属性将应用于所有的后代组件,如指定字体、滑块、卡片、文字、分割线、按钮等属性。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_en-US.json b/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_en-US.json deleted file mode 100644 index 41888ddb0..000000000 --- a/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TickerMode","path":"/src/widgets/ticker_provider.dart","parents":["StatefulWidget","Widget"],"desc":" Enables or disables tickers (and thus animation controllers) in the widget subtree.","fields":[{"name":"enabled","type":"bool","required":true,"desc":"The requested ticker mode for this subtree."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":246,"lever":2,"family":1,"linkIds":[346],"nodes":[{"file":"node1.dart","name":"Unified Enable/Disable Animation","desc":["The enabled property of TickerMode can uniformly enable/disable the animation effects of the subtree."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_zh-CN.json deleted file mode 100644 index f9053a4f7..000000000 --- a/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TickerMode","path":"/src/widgets/ticker_provider.dart","parents":["StatefulWidget","Widget"],"desc":"在小部件子树中启用或禁用计时器(以及动画控制器)。","fields":[{"name":"enabled","type":"bool","required":true,"desc":"此子树请求的计时器模式。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":246,"localName":"计时器模式","lever":2,"family":1,"linkIds":[346],"nodes":[{"file":"node1.dart","name":"统一禁用/启用动画","desc":["TickerMode 的 enabled 可以统一启用/禁用子树的动画效果。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_en-US.json deleted file mode 100644 index bbdc4fc38..000000000 --- a/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TimePickerDialog","path":"/src/material/time_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design time picker designed to appear inside a popup dialog.","fields":[{"name":"initialTime","type":"TimeOfDay","required":true,"desc":"The time initially selected when the dialog is shown."},{"name":"cancelText","type":"String?","desc":"Optionally provide your own text for the cancel button."},{"name":"confirmText","type":"String?","desc":"Optionally provide your own text for the confirm button."},{"name":"helpText","type":"String?","desc":"Optionally provide your own help text to the header of the time picker."},{"name":"errorInvalidText","type":"String?","desc":"Optionally provide your own validation error text."},{"name":"hourLabelText","type":"String?","desc":"Optionally provide your own hour label text."},{"name":"minuteLabelText","type":"String?","desc":"Optionally provide your own minute label text."},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the [TimePickerDialog]."},{"name":"initialEntryMode","type":"TimePickerEntryMode","required":true,"desc":"The entry mode for the picker. Whether it's text input or a dial."},{"name":"orientation","type":"Orientation?","desc":"The optional [orientation] parameter sets the [Orientation] to use when displaying the dialog."},{"name":"onEntryModeChanged","type":"EntryModeChangeCallback?","desc":"Callback called when the selected entry mode is changed."},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.time_picker.switchToInputEntryModeIcon}"},{"name":"switchToTimerEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.time_picker.switchToTimerEntryModeIcon}"}],"id":546,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_zh-CN.json deleted file mode 100644 index a5cabdf2b..000000000 --- a/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TimePickerDialog","path":"/src/material/time_picker.dart","parents":["StatefulWidget","Widget"],"desc":"设计为出现在弹出对话框内的 Material Design 时间选择器。","fields":[{"name":"initialTime","type":"TimeOfDay","required":true,"desc":"显示对话框时最初选择的时间。"},{"name":"cancelText","type":"String?","desc":"可选择为取消按钮提供您自己的文本。"},{"name":"confirmText","type":"String?","desc":"可选择为确认按钮提供您自己的文本。"},{"name":"helpText","type":"String?","desc":"可选择为时间选择器标题提供您自己的帮助文本。"},{"name":"errorInvalidText","type":"String?","desc":"可选择提供您自己的验证错误文本。"},{"name":"hourLabelText","type":"String?","desc":"可选择提供您自己的小时标签文本。"},{"name":"minuteLabelText","type":"String?","desc":"可选择提供您自己的分钟标签文本。"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [TimePickerDialog] 状态的恢复 ID。"},{"name":"initialEntryMode","type":"TimePickerEntryMode","required":true,"desc":"选择器的输入模式。是文本输入还是表盘。"},{"name":"orientation","type":"Orientation?","desc":"可选的 [orientation] 参数设置显示对话框时使用的 [Orientation]。"},{"name":"onEntryModeChanged","type":"EntryModeChangeCallback?","desc":"选定的输入模式更改时调用的回调。"},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.time_picker.switchToInputEntryModeIcon}"},{"name":"switchToTimerEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.time_picker.switchToTimerEntryModeIcon}"}],"id":546,"localName":"TimePickerDialog","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_en-US.json deleted file mode 100644 index 974123189..000000000 --- a/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TimePickerTheme","path":"/src/material/time_picker_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for time pickers displayed using [showTimePicker] in this widget's subtree.","fields":[{"name":"data","type":"TimePickerThemeData","required":true,"desc":"The properties for descendant time picker widgets."}],"id":547,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_zh-CN.json deleted file mode 100644 index 1a4d7996f..000000000 --- a/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TimePickerTheme","path":"/src/material/time_picker_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中使用 [showTimePicker] 显示的时间选择器定义配置的继承小部件。","fields":[{"name":"data","type":"TimePickerThemeData","required":true,"desc":"后代时间选择器小部件的属性。"}],"id":547,"localName":"TimePickerTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Title/Title_en-US.json b/modules/widget_system/widgets/doc/widgets/Title/Title_en-US.json deleted file mode 100644 index 66b0b0894..000000000 --- a/modules/widget_system/widgets/doc/widgets/Title/Title_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Title","path":"/src/widgets/title.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that describes this app in the operating system.","fields":[{"name":"title","type":"String","required":true,"desc":"A one-line description of this app for use in the window manager."},{"name":"color","type":"Color","required":true,"desc":"A color that the window manager should use to identify this app. Must be an opaque color (i.e. color.alpha must be 255 (0xFF)), and must not be null."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":208,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Title","desc":["【title】: Name 【int】","【color】: Color 【Color】","【child】: Child Component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Title/Title_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Title/Title_zh-CN.json deleted file mode 100644 index 17302f6c5..000000000 --- a/modules/widget_system/widgets/doc/widgets/Title/Title_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Title","path":"/src/widgets/title.dart","parents":["StatelessWidget","Widget"],"desc":"在操作系统中描述此应用程序的小部件。","fields":[{"name":"title","type":"String","required":true,"desc":"在窗口管理器中使用的此应用程序的单行描述。"},{"name":"color","type":"Color","required":true,"desc":"窗口管理器应用于识别此应用程序的颜色。必须是不透明颜色(即 color.alpha 必须为 255 (0xFF)),且不能为 null。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":208,"localName":"应用标题","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Title基本使用","desc":["【title】 : 名称 【int】","【color】: 颜色 【Color】","【child】: 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_en-US.json b/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_en-US.json deleted file mode 100644 index 8de947d6f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ToggleButtons","path":"/src/material/toggle_buttons.dart","parents":["StatelessWidget","Widget"],"desc":" A set of toggle buttons.","fields":[{"name":"children","type":"List","required":true,"desc":"The toggle button widgets."},{"name":"isSelected","type":"List","required":true,"desc":"The corresponding selection state of each toggle button."},{"name":"onPressed","type":"void Function(int index)?","desc":"The callback that is called when a button is tapped."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"tapTargetSize","type":"MaterialTapTargetSize?","desc":"Configures the minimum size of the area within which the buttons may be pressed."},{"name":"textStyle","type":"TextStyle?","desc":"The [TextStyle] to apply to any text in these toggle buttons."},{"name":"constraints","type":"BoxConstraints?","desc":"Defines the button's size."},{"name":"color","type":"Color?","desc":"The color for descendant [Text] and [Icon] widgets if the button is enabled and not selected."},{"name":"selectedColor","type":"Color?","desc":"The color for descendant [Text] and [Icon] widgets if the button is selected."},{"name":"disabledColor","type":"Color?","desc":"The color for descendant [Text] and [Icon] widgets if the button is disabled."},{"name":"fillColor","type":"Color?","desc":"The fill color for selected toggle buttons."},{"name":"focusColor","type":"Color?","desc":"The color to use for filling the button when the button has input focus."},{"name":"highlightColor","type":"Color?","desc":"The highlight color for the button's [InkWell]."},{"name":"splashColor","type":"Color?","desc":"The splash color for the button's [InkWell]."},{"name":"hoverColor","type":"Color?","desc":"The color to use for filling the button when the button has a pointer hovering over it."},{"name":"focusNodes","type":"List?","desc":"The list of [FocusNode]s, corresponding to each toggle button."},{"name":"renderBorder","type":"bool","required":true,"desc":"Whether or not to render a border around each toggle button."},{"name":"borderColor","type":"Color?","desc":"The border color to display when the toggle button is enabled and not selected."},{"name":"selectedBorderColor","type":"Color?","desc":"The border color to display when the toggle button is selected."},{"name":"disabledBorderColor","type":"Color?","desc":"The border color to display when the toggle button is disabled."},{"name":"borderWidth","type":"double?","desc":"The width of the border surrounding each toggle button."},{"name":"borderRadius","type":"BorderRadius?","desc":"The radii of the border's corners."},{"name":"direction","type":"Axis","required":true,"desc":"The direction along which the buttons are rendered."},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"If [direction] is [Axis.vertical], this parameter determines whether to lay out the buttons starting from the first or last child from top to bottom."}],"id":33,"lever":4,"family":0,"linkIds":[332,262],"nodes":[{"file":"node1_single.dart","name":"ToggleButtons Single Selection","desc":["【children】: Children components 【List】","【borderWidth】: Border width 【double】","【borderRadius】: Rounded corners 【BorderRadius】","【isSelected】: Selection status set 【List】","【onPressed】: Click event 【Function(int)】"]},{"file":"node2_color.dart","name":"ToggleButtons Color Properties","desc":["【borderColor】: Border color 【Color】","【selectedBorderColor】: Selected border color 【Color】","【selectedColor】: Component color when selected 【Color】","【fillColor】: Fill color when selected 【Color】","【splashColor】: Ripple color 【Color】"]},{"file":"node3_multi.dart","name":"ToggleButtons Multiple Selection","desc":["The logic of state transformation can be controlled to create different effects."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_zh-CN.json deleted file mode 100644 index 764b7038b..000000000 --- a/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ToggleButtons","path":"/src/material/toggle_buttons.dart","parents":["StatelessWidget","Widget"],"desc":"一组切换按钮。","fields":[{"name":"children","type":"List","required":true,"desc":"切换按钮小部件。"},{"name":"isSelected","type":"List","required":true,"desc":"每个切换按钮对应的选择状态。"},{"name":"onPressed","type":"void Function(int index)?","desc":"点击按钮时调用的回调。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"tapTargetSize","type":"MaterialTapTargetSize?","desc":"配置可以按下按钮的区域的最小大小。"},{"name":"textStyle","type":"TextStyle?","desc":"应用于这些切换按钮中任何文本的 [TextStyle]。"},{"name":"constraints","type":"BoxConstraints?","desc":"定义按钮的大小。"},{"name":"color","type":"Color?","desc":"如果按钮已启用且未选中,后代 [Text] 和 [Icon] 小部件的颜色。"},{"name":"selectedColor","type":"Color?","desc":"如果按钮被选中,后代 [Text] 和 [Icon] 小部件的颜色。"},{"name":"disabledColor","type":"Color?","desc":"如果按钮被禁用,后代 [Text] 和 [Icon] 小部件的颜色。"},{"name":"fillColor","type":"Color?","desc":"选中的切换按钮的填充颜色。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时用于填充按钮的颜色。"},{"name":"highlightColor","type":"Color?","desc":"按钮的 [InkWell] 的高亮颜色。"},{"name":"splashColor","type":"Color?","desc":"按钮的 [InkWell] 的飞溅颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在按钮上时用于填充按钮的颜色。"},{"name":"focusNodes","type":"List?","desc":"对应于每个切换按钮的 [FocusNode] 列表。"},{"name":"renderBorder","type":"bool","required":true,"desc":"是否在每个切换按钮周围渲染边框。"},{"name":"borderColor","type":"Color?","desc":"切换按钮启用且未选中时显示的边框颜色。"},{"name":"selectedBorderColor","type":"Color?","desc":"切换按钮被选中时显示的边框颜色。"},{"name":"disabledBorderColor","type":"Color?","desc":"切换按钮被禁用时显示的边框颜色。"},{"name":"borderWidth","type":"double?","desc":"围绕每个切换按钮的边框宽度。"},{"name":"borderRadius","type":"BorderRadius?","desc":"边框角的半径。"},{"name":"direction","type":"Axis","required":true,"desc":"按钮渲染的方向。"},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"如果 [direction] 是 [Axis.vertical],此参数确定是否从上到下从第一个或最后一个子项开始布局按钮。"}],"id":33,"localName":"切换按钮组","lever":4,"family":0,"linkIds":[332,262],"nodes":[{"file":"node1_single.dart","name":"ToggleButtons单选切换","desc":["【children】: 子组件集 【List】","【borderWidth】: 边线宽 【double】","【borderRadius】: 圆角 【BorderRadius】","【isSelected】: 是否选中集 【List】","【onPressed】: 点击事件 【Function(int)】"]},{"file":"node2_color.dart","name":"ToggleButtons颜色属性","desc":["【borderColor】: 边线色 【Color】","【selectedBorderColor】: 选中边线色 【Color】","【selectedColor】: 选中时组件色 【Color】","【fillColor】: 选中时填充色 【Color】","【splashColor】: 水波纹色 【Color】"]},{"file":"node3_multi.dart","name":"ToggleButtons多选切换","desc":["可以控制状态转化的逻辑来形成不同的效果。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_en-US.json deleted file mode 100644 index eb3e02ef7..000000000 --- a/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ToggleButtonsTheme","path":"/src/material/toggle_buttons_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines color and border parameters for [ToggleButtons] in this widget's subtree.","fields":[{"name":"data","type":"ToggleButtonsThemeData","required":true,"desc":"Specifies the color and border values for descendant [ToggleButtons] widgets."}],"id":332,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ToggleButtonsTheme","desc":["You can specify the ToggleButtonsThemeData properties to set default styles for descendant ToggleButtons components, such as border style, color, decoration, etc. You can also use ToggleButtonsTheme.of to get the theme data of ToggleButtons."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_zh-CN.json deleted file mode 100644 index d5976dadf..000000000 --- a/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ToggleButtonsTheme","path":"/src/material/toggle_buttons_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [ToggleButtons] 定义颜色和边框参数的继承小部件。","fields":[{"name":"data","type":"ToggleButtonsThemeData","required":true,"desc":"指定后代 [ToggleButtons] 小部件的颜色和边框值。"}],"id":332,"localName":"滑块样式","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ToggleButtonsTheme基本使用","desc":["可指定ToggleButtonsThemeData数据属性为【后代】的ToggleButtons组件设置默认样式,如边框样式、颜色、装饰等。也可以用ToggleButtonsTheme.of获取ToggleButtons的主题数据。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_en-US.json b/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_en-US.json deleted file mode 100644 index 2bd75a943..000000000 --- a/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Tooltip","path":"/src/material/tooltip.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design tooltip.","fields":[{"name":"message","type":"String?","desc":"The text to display in the tooltip."},{"name":"richMessage","type":"InlineSpan?","desc":"The rich text to display in the tooltip."},{"name":"height","type":"double?","desc":"The minimum height of the [Tooltip]'s message."},{"name":"constraints","type":"BoxConstraints?","desc":"Constrains the size of the [Tooltip]'s message."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the [Tooltip]'s message."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"The empty space that surrounds the tooltip."},{"name":"verticalOffset","type":"double?","desc":"The vertical gap between the widget and the displayed tooltip."},{"name":"preferBelow","type":"bool?","desc":"Whether the tooltip defaults to being displayed below the widget."},{"name":"excludeFromSemantics","type":"bool?","desc":"Whether the tooltip's [message] or [richMessage] should be excluded from the semantics tree."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"decoration","type":"Decoration?","desc":"Specifies the tooltip's shape and background color."},{"name":"textStyle","type":"TextStyle?","desc":"The style to use for the message of the tooltip."},{"name":"textAlign","type":"TextAlign?","desc":"How the message of the tooltip is aligned horizontally."},{"name":"waitDuration","type":"Duration?","desc":"The length of time that a pointer must hover over a tooltip's widget before the tooltip will be shown."},{"name":"showDuration","type":"Duration?","desc":"The length of time that the tooltip will be shown after a long press is released (if triggerMode is [TooltipTriggerMode.longPress]) or a tap is released (if triggerMode is [TooltipTriggerMode.tap]). This property does not affect mouse pointer devices."},{"name":"exitDuration","type":"Duration?","desc":"The length of time that a pointer must have stopped hovering over a tooltip's widget before the tooltip will be hidden."},{"name":"enableTapToDismiss","type":"bool","required":true,"desc":"Whether the tooltip can be dismissed by tap."},{"name":"triggerMode","type":"TooltipTriggerMode?","desc":"The [TooltipTriggerMode] that will show the tooltip."},{"name":"enableFeedback","type":"bool?","desc":"Whether the tooltip should provide acoustic and/or haptic feedback."},{"name":"onTriggered","type":"TooltipTriggeredCallback?","desc":"Called when the Tooltip is triggered."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"ignorePointer","type":"bool?","desc":"Whether this tooltip should be invisible to hit testing."}],"id":50,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Tooltip","desc":["【preferBelow】: Whether to prefer below 【bool】","【padding】: Padding 【EdgeInsetsGeometry】","【margin】: Margin 【EdgeInsetsGeometry】","【message】: Message content 【String】","【showDuration】: Display duration 【Duration】","【waitDuration】: Hover appearance time 【Duration】","【child】: Child 【Widget】"]},{"file":"node2_decoration.dart","name":"Decoration of Tooltip","desc":["【decoration】: Decoration object 【Decoration】","【textStyle】: Text style 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_zh-CN.json deleted file mode 100644 index 2eaf45bb6..000000000 --- a/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Tooltip","path":"/src/material/tooltip.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 工具提示。","fields":[{"name":"message","type":"String?","desc":"在工具提示中显示的文本。"},{"name":"richMessage","type":"InlineSpan?","desc":"在工具提示中显示的富文本。"},{"name":"height","type":"double?","desc":"[Tooltip] 消息的最小高度。"},{"name":"constraints","type":"BoxConstraints?","desc":"约束 [Tooltip] 消息的大小。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"插入 [Tooltip] 消息的空间量。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕工具提示的空白空间。"},{"name":"verticalOffset","type":"double?","desc":"小部件与显示的工具提示之间的垂直间隙。"},{"name":"preferBelow","type":"bool?","desc":"工具提示是否默认显示在小部件下方。"},{"name":"excludeFromSemantics","type":"bool?","desc":"工具提示的 [message] 或 [richMessage] 是否应从语义树中排除。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"decoration","type":"Decoration?","desc":"指定工具提示的形状和背景颜色。"},{"name":"textStyle","type":"TextStyle?","desc":"用于工具提示消息的样式。"},{"name":"textAlign","type":"TextAlign?","desc":"工具提示消息如何水平对齐。"},{"name":"waitDuration","type":"Duration?","desc":"指针必须悬停在工具提示小部件上多长时间才会显示工具提示。"},{"name":"showDuration","type":"Duration?","desc":"长按释放后(如果 triggerMode 是 [TooltipTriggerMode.longPress])或点击释放后(如果 triggerMode 是 [TooltipTriggerMode.tap])工具提示将显示的时间长度。此属性不影响鼠标指针设备。"},{"name":"exitDuration","type":"Duration?","desc":"指针必须停止悬停在工具提示小部件上多长时间才会隐藏工具提示。"},{"name":"enableTapToDismiss","type":"bool","required":true,"desc":"工具提示是否可以通过点击关闭。"},{"name":"triggerMode","type":"TooltipTriggerMode?","desc":"将显示工具提示的 [TooltipTriggerMode]。"},{"name":"enableFeedback","type":"bool?","desc":"工具提示是否应提供声音和/或触觉反馈。"},{"name":"onTriggered","type":"TooltipTriggeredCallback?","desc":"触发工具提示时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"ignorePointer","type":"bool?","desc":"此工具提示是否应对命中测试不可见。"}],"id":50,"localName":"提示工具","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Tooltip基本使用","desc":["【preferBelow】 : 是否首选下方 【bool】","【padding】 : 内边距 【EdgeInsetsGeometry】","【margin】 : 外边距 【EdgeInsetsGeometry】","【message】 : 消息内容 【String】","【showDuration】 : 展示时间 【Duration】","【waitDuration】 : 悬浮出现时间 【Duration】","【child】 : 孩子 【Widget】"]},{"file":"node2_decoration.dart","name":"Tooltip的装饰","desc":["【decoration】 : 装饰对象 【Decoration】","【textStyle】 : 文字样式 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_en-US.json deleted file mode 100644 index 1b569170e..000000000 --- a/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TooltipTheme","path":"/src/material/tooltip_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a tooltip theme to descendant [Tooltip] widgets.","fields":[{"name":"data","type":"TooltipThemeData","required":true,"desc":"The properties for descendant [Tooltip] widgets."}],"id":333,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TooltipTheme","desc":["You can specify the TooltipThemeData properties to set default styles for descendant Tooltip components, such as decoration, text style, display duration, margins, etc. You can also use TooltipTheme.of to get the theme properties of Tooltip."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_zh-CN.json deleted file mode 100644 index db7a17a64..000000000 --- a/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TooltipTheme","path":"/src/material/tooltip_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"将工具提示主题应用于后代 [Tooltip] 小部件。","fields":[{"name":"data","type":"TooltipThemeData","required":true,"desc":"后代 [Tooltip] 小部件的属性。"}],"id":333,"localName":"提示主题","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TooltipTheme基本使用","desc":["可指定TooltipThemeData数据属性为【后代】的Tooltip组件设置默认样式,如装饰、文字样式、显示时长、边距等。也可以用TooltipTheme.of获取Tooltip的主题属性。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_en-US.json b/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_en-US.json deleted file mode 100644 index 8a94ff5b4..000000000 --- a/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TooltipVisibility","path":"/src/material/tooltip_visibility.dart","parents":["StatelessWidget","Widget"],"desc":" Overrides the visibility of descendant [Tooltip] widgets.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"visible","type":"bool","required":true,"desc":"Determines the visibility of [Tooltip] widgets that inherit from this widget."}],"id":548,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_zh-CN.json deleted file mode 100644 index c3bcb6db5..000000000 --- a/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TooltipVisibility","path":"/src/material/tooltip_visibility.dart","parents":["StatelessWidget","Widget"],"desc":"覆盖后代 [Tooltip] 小部件的可见性。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"visible","type":"bool","required":true,"desc":"确定从此小部件继承的 [Tooltip] 小部件的可见性。"}],"id":548,"localName":"TooltipVisibility","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Transform/Transform_en-US.json b/modules/widget_system/widgets/doc/widgets/Transform/Transform_en-US.json deleted file mode 100644 index a5d1fd8f4..000000000 --- a/modules/widget_system/widgets/doc/widgets/Transform/Transform_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Transform","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that applies a transformation before painting its child.","fields":[{"name":"transform","type":"Matrix4","required":true,"desc":"The matrix to transform the child by during painting."},{"name":"origin","type":"Offset?","desc":"The origin of the coordinate system (relative to the upper left corner of this render object) in which to apply the matrix."},{"name":"alignment","type":"AlignmentGeometry?","desc":"The alignment of the origin, relative to the size of the box."},{"name":"transformHitTests","type":"bool","required":true,"desc":"Whether to apply the transformation when performing hit tests."},{"name":"filterQuality","type":"FilterQuality?","desc":"The filter quality with which to apply the transform as a bitmap operation."}],"id":78,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_skew.dart","name":"Skew Transform skew","desc":["Skew x is controlled by the R0C1 number, the input is in radians, representing the skew angle","Skew y is controlled by the R1C0 number, the input is in radians, representing the skew angle"]},{"file":"node2_translation.dart","name":"Translation Transform translationValues","desc":["Translation x is controlled by the R0C3 number, the input is a value, representing the translation length","Translation y is controlled by the R1C3 number, the input is a value, representing the translation length","Translation z is controlled by the R2C3 number, the input is a value, representing the translation length"]},{"file":"node3_scale.dart","name":"Scale Transform diagonal3Values","desc":["Scale x is controlled by the R0C0 number, the input is a value, representing the scaling factor","Scale y is controlled by the R1C2 number, the input is a value, representing the scaling factor","Scale z is controlled by the R2C2 number, the input is a value, representing the scaling factor"]},{"file":"node4_rotate.dart","name":"Rotation Transform rotation","desc":["x rotation is controlled by R1C1, R1C2, R2C1, R2C2, the input represents radians","y rotation is controlled by R0C0, R0C2, R2C0, R2C2, the input represents radians","z rotation is controlled by R0C0, R0C1, R1C0, R1C1"]},{"file":"node5_perspective.dart","name":"Perspective Transform rotation","desc":["Perspective is controlled by R3C1, R3C2, R3C3"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Transform/Transform_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Transform/Transform_zh-CN.json deleted file mode 100644 index eeab1fac2..000000000 --- a/modules/widget_system/widgets/doc/widgets/Transform/Transform_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Transform","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在绘制其子项之前应用变换的小部件。","fields":[{"name":"transform","type":"Matrix4","required":true,"desc":"绘制期间变换子项的矩阵。"},{"name":"origin","type":"Offset?","desc":"应用矩阵的坐标系原点(相对于此渲染对象的左上角)。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"原点的对齐,相对于框的大小。"},{"name":"transformHitTests","type":"bool","required":true,"desc":"执行命中测试时是否应用变换。"},{"name":"filterQuality","type":"FilterQuality?","desc":"将变换作为位图操作应用时的过滤质量。"}],"id":78,"localName":"变换","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_skew.dart","name":"斜切变换skew","desc":["斜切x由R0C1数控制,入参为弧度值,表示斜切角度","斜切y由R1C0数控制,入参为弧度值,表示斜切角度"]},{"file":"node2_translation.dart","name":"平移变换translationValues","desc":["平移x由R0C3数控制,入参为数值,表示平移长度","平移y由R1C3数控制,入参为数值,表示平移长度","平移z由R2C3数控制,入参为数值,表示平移长度"]},{"file":"node3_scale.dart","name":"缩放变换diagonal3Values","desc":["缩放x由R0C0数控制,入参为数值,表示缩放分率","缩放y由R1C2数控制,入参为数值,表示缩放分率","缩放z由R2C2数控制,入参为数值,表示缩放分率"]},{"file":"node4_rotate.dart","name":"旋转变换rotation","desc":["x旋转由R1C1、R1C2、R2C1、R2C2控制,入参表示弧度","y旋转由R0C0、R0C2、R2C0、R2C2控制,入参表示弧度","z旋转由R0C0、R0C1、R1C0、R1C1控制,"]},{"file":"node5_perspective.dart","name":"透视变换rotation","desc":["由R3C1、R3C2、R3C3控制透视"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_en-US.json b/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_en-US.json deleted file mode 100644 index c147fb993..000000000 --- a/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TreeSliver","path":"/src/widgets/sliver_tree.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that displays [TreeSliverNode]s that expand and collapse in a vertically and horizontally scrolling [Viewport].","fields":[{"name":"tree","type":"List>","required":true,"desc":"The list of [TreeSliverNode]s that may be displayed in the [TreeSliver]."},{"name":"treeNodeBuilder","type":"TreeSliverNodeBuilder","required":true,"desc":"Called to build and entry of the [TreeSliver] for the given node."},{"name":"treeRowExtentBuilder","type":"TreeSliverRowExtentBuilder","required":true,"desc":"Called to calculate the extent of the widget built for the given [TreeSliverNode]."},{"name":"controller","type":"TreeSliverController?","desc":"If provided, the controller can be used to expand and collapse [TreeSliverNode]s, or lookup information about the current state of the [TreeSliver]."},{"name":"onNodeToggle","type":"TreeSliverNodeCallback?","desc":"Called when a [TreeSliverNode] expands or collapses."},{"name":"toggleAnimationStyle","type":"AnimationStyle?","desc":"The default [AnimationStyle] for expanding and collapsing nodes in the [TreeSliver]."},{"name":"indentation","type":"TreeSliverIndentationType","required":true,"desc":"The number of pixels children will be offset by in the cross axis based on their [TreeSliverNode.depth]."},{"name":"addAutomaticKeepAlives","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addAutomaticKeepAlives}"},{"name":"addRepaintBoundaries","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addRepaintBoundaries}"},{"name":"addSemanticIndexes","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addSemanticIndexes}"},{"name":"semanticIndexCallback","type":"SemanticIndexCallback","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.semanticIndexCallback}"},{"name":"semanticIndexOffset","type":"int","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.semanticIndexOffset}"},{"name":"findChildIndexCallback","type":"int? Function(Key)?","desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.findChildIndexCallback}"}],"id":549,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_zh-CN.json deleted file mode 100644 index 7abdfa23c..000000000 --- a/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TreeSliver","path":"/src/widgets/sliver_tree.dart","parents":["StatefulWidget","Widget"],"desc":"在垂直和水平滚动的 [Viewport] 中显示展开和折叠的 [TreeSliverNode] 的小部件。","fields":[{"name":"tree","type":"List>","required":true,"desc":"可能在 [TreeSliver] 中显示的 [TreeSliverNode] 列表。"},{"name":"treeNodeBuilder","type":"TreeSliverNodeBuilder","required":true,"desc":"调用以为给定节点构建和输入 [TreeSliver]。"},{"name":"treeRowExtentBuilder","type":"TreeSliverRowExtentBuilder","required":true,"desc":"调用以计算为给定 [TreeSliverNode] 构建的小部件的范围。"},{"name":"controller","type":"TreeSliverController?","desc":"如果提供,控制器可用于展开和折叠 [TreeSliverNode],或查找有关 [TreeSliver] 当前状态的信息。"},{"name":"onNodeToggle","type":"TreeSliverNodeCallback?","desc":"[TreeSliverNode] 展开或折叠时调用。"},{"name":"toggleAnimationStyle","type":"AnimationStyle?","desc":"[TreeSliver] 中展开和折叠节点的默认 [AnimationStyle]。"},{"name":"indentation","type":"TreeSliverIndentationType","required":true,"desc":"子项将根据其 [TreeSliverNode.depth] 在交叉轴上偏移的像素数。"},{"name":"addAutomaticKeepAlives","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addAutomaticKeepAlives}"},{"name":"addRepaintBoundaries","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addRepaintBoundaries}"},{"name":"addSemanticIndexes","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addSemanticIndexes}"},{"name":"semanticIndexCallback","type":"SemanticIndexCallback","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.semanticIndexCallback}"},{"name":"semanticIndexOffset","type":"int","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.semanticIndexOffset}"},{"name":"findChildIndexCallback","type":"int? Function(Key)?","desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.findChildIndexCallback}"}],"id":549,"localName":"TreeSliver","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_en-US.json deleted file mode 100644 index 08716d298..000000000 --- a/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TweenAnimationBuilder","path":"/src/widgets/tween_animation_builder.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" [Widget] builder that animates a property of a [Widget] to a target value whenever the target value changes.","fields":[{"name":"tween","type":"Tween","required":true,"desc":"Defines the target value for the animation."},{"name":"builder","type":"ValueWidgetBuilder","required":true,"desc":"Called every time the animation value changes."},{"name":"child","type":"Widget?","desc":"The child widget to pass to the builder."}],"id":226,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TweenAnimationBuilder Usage Example","desc":["【tween】 : *Tween 【Tween】","【duration】 : *Duration 【Duration】","【builder】 : *Builder 【ValueWidgetBuilder】","【curve】 : Animation Curve 【Curve】","【onEnd】 : End Callback 【VoidCallback】","【child】 : Child Widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_zh-CN.json deleted file mode 100644 index bd3ab8888..000000000 --- a/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TweenAnimationBuilder","path":"/src/widgets/tween_animation_builder.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"每当目标值更改时,将 [Widget] 的属性动画化到目标值的 [Widget] 构建器。","fields":[{"name":"tween","type":"Tween","required":true,"desc":"定义动画的目标值。"},{"name":"builder","type":"ValueWidgetBuilder","required":true,"desc":"每次动画值更改时调用。"},{"name":"child","type":"Widget?","desc":"传递给构建器的子小部件。"}],"id":226,"localName":"渐变动画构造器","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TweenAnimationBuilder 使用案例","desc":["【tween】 : *渐变器 【Tween】","【duration】 : *时长 【Duration】","【builder】 : *构造器 【ValueWidgetBuilder】","【curve】 : 动画曲线 【Curve】","【onEnd】 : 结束回调 【VoidCallback】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_en-US.json deleted file mode 100644 index 34a3aaf55..000000000 --- a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TwoDimensionalScrollView","path":"/src/widgets/two_dimensional_scroll_view.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":" A widget that combines a [TwoDimensionalScrollable] and a [TwoDimensionalViewport] to create an interactive scrolling pane of content in both vertical and horizontal dimensions.","fields":[{"name":"delegate","type":"TwoDimensionalChildDelegate","required":true,"desc":"A delegate that provides the children for the [TwoDimensionalScrollView]."},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"diagonalDragBehavior","type":"DiagonalDragBehavior","required":true,"desc":"Whether scrolling gestures should lock to one axes, allow free movement in both axes, or be evaluated on a weighted scale."},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"mainAxis","type":"Axis","required":true,"desc":"The main axis of the two."},{"name":"verticalDetails","type":"ScrollableDetails","required":true,"desc":"The configuration of the vertical Scrollable."},{"name":"horizontalDetails","type":"ScrollableDetails","required":true,"desc":"The configuration of the horizontal Scrollable."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":550,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_zh-CN.json deleted file mode 100644 index 947bc1693..000000000 --- a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TwoDimensionalScrollView","path":"/src/widgets/two_dimensional_scroll_view.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":"结合 [TwoDimensionalScrollable] 和 [TwoDimensionalViewport] 创建垂直和水平两个维度的交互式滚动内容窗格的小部件。","fields":[{"name":"delegate","type":"TwoDimensionalChildDelegate","required":true,"desc":"为 [TwoDimensionalScrollView] 提供子项的委托。"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"diagonalDragBehavior","type":"DiagonalDragBehavior","required":true,"desc":"滚动手势是否应锁定到一个轴、允许在两个轴上自由移动,或在加权尺度上评估。"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"mainAxis","type":"Axis","required":true,"desc":"两者中的主轴。"},{"name":"verticalDetails","type":"ScrollableDetails","required":true,"desc":"垂直 Scrollable 的配置。"},{"name":"horizontalDetails","type":"ScrollableDetails","required":true,"desc":"水平 Scrollable 的配置。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":550,"localName":"TwoDimensionalScrollView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_en-US.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_en-US.json deleted file mode 100644 index 8dc7efc89..000000000 --- a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TwoDimensionalScrollable","path":"/src/widgets/scrollable.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that manages scrolling in both the vertical and horizontal dimensions and informs the [TwoDimensionalViewport] through which the content is viewed.","fields":[{"name":"diagonalDragBehavior","type":"DiagonalDragBehavior","required":true,"desc":"How scrolling gestures should lock to one axis, or allow free movement in both axes."},{"name":"horizontalDetails","type":"ScrollableDetails","required":true,"desc":"The configuration of the horizontal [Scrollable]."},{"name":"verticalDetails","type":"ScrollableDetails","required":true,"desc":"The configuration of the vertical [Scrollable]."},{"name":"viewportBuilder","type":"TwoDimensionalViewportBuilder","required":true,"desc":"Builds the viewport through which the scrollable content is displayed."},{"name":"incrementCalculator","type":"ScrollIncrementCalculator?","desc":"{@macro flutter.widgets.Scrollable.incrementCalculator}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.scrollable.excludeFromSemantics}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"}],"id":551,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_zh-CN.json deleted file mode 100644 index 47af9e136..000000000 --- a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TwoDimensionalScrollable","path":"/src/widgets/scrollable.dart","parents":["StatefulWidget","Widget"],"desc":"管理垂直和水平两个维度滚动并通知查看内容的 [TwoDimensionalViewport] 的小部件。","fields":[{"name":"diagonalDragBehavior","type":"DiagonalDragBehavior","required":true,"desc":"滚动手势应如何锁定到一个轴,或允许在两个轴上自由移动。"},{"name":"horizontalDetails","type":"ScrollableDetails","required":true,"desc":"水平 [Scrollable] 的配置。"},{"name":"verticalDetails","type":"ScrollableDetails","required":true,"desc":"垂直 [Scrollable] 的配置。"},{"name":"viewportBuilder","type":"TwoDimensionalViewportBuilder","required":true,"desc":"构建显示可滚动内容的视口。"},{"name":"incrementCalculator","type":"ScrollIncrementCalculator?","desc":"{@macro flutter.widgets.Scrollable.incrementCalculator}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.scrollable.excludeFromSemantics}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"}],"id":551,"localName":"TwoDimensionalScrollable","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_en-US.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_en-US.json deleted file mode 100644 index 0fcbfab99..000000000 --- a/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TwoDimensionalViewport","path":"/src/widgets/two_dimensional_viewport.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A widget through which a portion of larger content can be viewed, typically in combination with a [TwoDimensionalScrollable].","fields":[{"name":"verticalOffset","type":"ViewportOffset","required":true,"desc":"Which part of the content inside the viewport should be visible in the vertical axis."},{"name":"verticalAxisDirection","type":"AxisDirection","required":true,"desc":"The direction in which the [verticalOffset]'s [ViewportOffset.pixels] increases."},{"name":"horizontalOffset","type":"ViewportOffset","required":true,"desc":"Which part of the content inside the viewport should be visible in the horizontal axis."},{"name":"horizontalAxisDirection","type":"AxisDirection","required":true,"desc":"The direction in which the [horizontalOffset]'s [ViewportOffset.pixels] increases."},{"name":"mainAxis","type":"Axis","required":true,"desc":"The main axis of the two."},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"delegate","type":"TwoDimensionalChildDelegate","required":true,"desc":"A delegate that provides the children for the [TwoDimensionalViewport]."}],"id":552,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_zh-CN.json deleted file mode 100644 index 3ef00f4af..000000000 --- a/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TwoDimensionalViewport","path":"/src/widgets/two_dimensional_viewport.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"可以查看较大内容的一部分的小部件,通常与 [TwoDimensionalScrollable] 结合使用。","fields":[{"name":"verticalOffset","type":"ViewportOffset","required":true,"desc":"视口内容的哪一部分应在垂直轴上可见。"},{"name":"verticalAxisDirection","type":"AxisDirection","required":true,"desc":"[verticalOffset] 的 [ViewportOffset.pixels] 增加的方向。"},{"name":"horizontalOffset","type":"ViewportOffset","required":true,"desc":"视口内容的哪一部分应在水平轴上可见。"},{"name":"horizontalAxisDirection","type":"AxisDirection","required":true,"desc":"[horizontalOffset] 的 [ViewportOffset.pixels] 增加的方向。"},{"name":"mainAxis","type":"Axis","required":true,"desc":"两者中的主轴。"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"delegate","type":"TwoDimensionalChildDelegate","required":true,"desc":"为 [TwoDimensionalViewport] 提供子项的委托。"}],"id":552,"localName":"TwoDimensionalViewport","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_en-US.json b/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_en-US.json deleted file mode 100644 index a786ad86c..000000000 --- a/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UiKitView","path":"/src/widgets/platform_view.dart","parents":["_DarwinView","StatefulWidget","Widget"],"desc":" Embeds an iOS view in the Widget hierarchy.","fields":[],"id":553,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_zh-CN.json deleted file mode 100644 index e5e98ced1..000000000 --- a/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UiKitView","path":"/src/widgets/platform_view.dart","parents":["_DarwinView","StatefulWidget","Widget"],"desc":"在小部件层次结构中嵌入 iOS 视图。","fields":[],"id":553,"localName":"UiKitView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_en-US.json deleted file mode 100644 index 3bcb57025..000000000 --- a/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UnconstrainedBox","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that imposes no constraints on its child, allowing it to render at its \"natural\" size.","fields":[{"name":"textDirection","type":"TextDirection?","desc":"The text direction to use when interpreting the [alignment] if it is an [AlignmentDirectional]."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"The alignment to use when laying out the child."},{"name":"constrainedAxis","type":"Axis?","desc":"The axis to retain constraints on, if any."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":81,"lever":3,"family":1,"linkIds":[80],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of UnconstrainedBox","desc":["【child】: Child component 【Widget】","【constrainedAxis】: Axes still constrained*2 【Axis】","【alignment】: Alignment method 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_zh-CN.json deleted file mode 100644 index f10c46e4b..000000000 --- a/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UnconstrainedBox","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":"对其子项不施加约束的小部件,允许它以其自然大小渲染。","fields":[{"name":"textDirection","type":"TextDirection?","desc":"如果 [alignment] 是 [AlignmentDirectional],解释 [alignment] 时使用的文本方向。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"布局子项时使用的对齐。"},{"name":"constrainedAxis","type":"Axis?","desc":"要保留约束的轴(如果有)。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":81,"localName":"无约束盒","lever":3,"family":1,"linkIds":[80],"nodes":[{"file":"node1_base.dart","name":"UnconstrainedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【constrainedAxis】 : 仍受约束的轴*2 【Axis】","【alignment】 : 对齐方式 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_en-US.json b/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_en-US.json deleted file mode 100644 index cba40fb36..000000000 --- a/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UndoHistory","path":"/src/widgets/undo_history.dart","parents":["StatefulWidget","Widget"],"desc":" Provides undo/redo capabilities for a [ValueNotifier].","fields":[{"name":"value","type":"ValueNotifier","required":true,"desc":"The value to track over time."},{"name":"shouldChangeUndoStack","type":"bool Function(T? oldValue, T newValue)?","desc":"Called when checking whether a value change should be pushed onto the undo stack."},{"name":"undoStackModifier","type":"T Function(T value)?","desc":"Called right before a new entry is pushed to the undo stack."},{"name":"onTriggered","type":"void Function(T value)","required":true,"desc":"Called when an undo or redo causes a state change."},{"name":"focusNode","type":"FocusNode","required":true,"desc":"The [FocusNode] that will be used to listen for focus to set the initial undo state for the element."},{"name":"controller","type":"UndoHistoryController?","desc":"{@template flutter.widgets.undoHistory.controller} Controls the undo state."},{"name":"child","type":"Widget","required":true,"desc":"The child widget of [UndoHistory]."}],"id":241,"lever":2,"family":1,"linkIds":[54],"nodes":[{"file":"node1.dart","name":"Using UndoHistory in TextField","desc":["In this example, the undo/redo functionality of the TextField is controlled via an external button. The undoController parameter can be passed an UndoHistoryController object to control and influence the input text content."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_zh-CN.json deleted file mode 100644 index 72691ecb2..000000000 --- a/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UndoHistory","path":"/src/widgets/undo_history.dart","parents":["StatefulWidget","Widget"],"desc":"为 [ValueNotifier] 提供撤销/重做功能。","fields":[{"name":"value","type":"ValueNotifier","required":true,"desc":"要随时间跟踪的值。"},{"name":"shouldChangeUndoStack","type":"bool Function(T? oldValue, T newValue)?","desc":"检查值更改是否应推送到撤销堆栈时调用。"},{"name":"undoStackModifier","type":"T Function(T value)?","desc":"在新条目推送到撤销堆栈之前调用。"},{"name":"onTriggered","type":"void Function(T value)","required":true,"desc":"撤销或重做导致状态更改时调用。"},{"name":"focusNode","type":"FocusNode","required":true,"desc":"将用于监听焦点以设置元素初始撤销状态的 [FocusNode]。"},{"name":"controller","type":"UndoHistoryController?","desc":"{@template flutter.widgets.undoHistory.controller} 控制撤销状态。"},{"name":"child","type":"Widget","required":true,"desc":"[UndoHistory] 的子小部件。"}],"id":241,"localName":"撤销历史","lever":2,"family":1,"linkIds":[54],"nodes":[{"file":"node1.dart","name":"TextField 中使用 UndoHistory","desc":["该案例中通过外界按钮,进行控制 TextField 的撤销/重做功能。其中 undoController 参数可以传入 UndoHistoryController 对象,用于控制并影响输入文本内容。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_en-US.json deleted file mode 100644 index b6470b246..000000000 --- a/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UniqueWidget","path":"/src/widgets/unique_widget.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" Base class for stateful widgets that have exactly one inflated instance in the tree.","fields":[],"id":243,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to UniqueWidget","desc":["【child】 : Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_zh-CN.json deleted file mode 100644 index 12f2cbdef..000000000 --- a/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UniqueWidget","path":"/src/widgets/unique_widget.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"在树中恰好有一个膨胀实例的有状态小部件的基类。","fields":[],"id":243,"localName":"唯一组件","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"UniqueWidget 介绍","desc":["【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_en-US.json b/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_en-US.json deleted file mode 100644 index 4e75c259e..000000000 --- a/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UnmanagedRestorationScope","path":"/src/widgets/restoration.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Inserts a provided [RestorationBucket] into the widget tree and makes it available to descendants via [RestorationScope.of].","fields":[{"name":"bucket","type":"RestorationBucket?","desc":"The [RestorationBucket] that this widget will insert into the widget tree."}],"id":554,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_zh-CN.json deleted file mode 100644 index 7e0ddfae5..000000000 --- a/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UnmanagedRestorationScope","path":"/src/widgets/restoration.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将提供的 [RestorationBucket] 插入小部件树并通过 [RestorationScope.of] 使其对后代可用。","fields":[{"name":"bucket","type":"RestorationBucket?","desc":"此小部件将插入小部件树的 [RestorationBucket]。"}],"id":554,"localName":"UnmanagedRestorationScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_en-US.json b/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_en-US.json deleted file mode 100644 index 2c7a08811..000000000 --- a/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UserAccountsDrawerHeader","path":"/src/material/user_accounts_drawer_header.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design [Drawer] header that identifies the app's user.","fields":[{"name":"decoration","type":"Decoration?","desc":"The header's background. If decoration is null then a [BoxDecoration] with its background color set to the current theme's primaryColor is used."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"The margin around the drawer header."},{"name":"currentAccountPicture","type":"Widget?","desc":"A widget placed in the upper-left corner that represents the current user's account. Normally a [CircleAvatar]."},{"name":"otherAccountsPictures","type":"List?","desc":"A list of widgets that represent the current user's other accounts. Up to three of these widgets will be arranged in a row in the header's upper-right corner. Normally a list of [CircleAvatar] widgets."},{"name":"currentAccountPictureSize","type":"Size","required":true,"desc":"The size of the [currentAccountPicture]."},{"name":"otherAccountsPicturesSize","type":"Size","required":true,"desc":"The size of each widget in [otherAccountsPicturesSize]."},{"name":"accountName","type":"Widget?","desc":"A widget that represents the user's current account name. It is displayed on the left, below the [currentAccountPicture]."},{"name":"accountEmail","type":"Widget?","desc":"A widget that represents the email address of the user's current account. It is displayed on the left, below the [accountName]."},{"name":"onDetailsPressed","type":"VoidCallback?","desc":"A callback that is called when the horizontal area which contains the [accountName] and [accountEmail] is tapped."},{"name":"arrowColor","type":"Color","required":true,"desc":"The [Color] of the arrow icon."}],"id":22,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"The basic performance of this component is as follows","desc":["【currentAccountPicture】: Top component 【Widget】","【accountName】: Middle component 【Widget】","【accountEmail】: Bottom component 【Widget】","【decoration】: Decoration 【Decoration】"]},{"file":"node2_pro.dart","name":"Top right corner and bottom","desc":["【otherAccountsPictures】: Top right component 【List】","【onDetailsPressed】: Bottom right click event 【Function()】","【arrowColor】: Bottom right button color 【Color】","【margin】: Margin 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_zh-CN.json deleted file mode 100644 index 5884084b1..000000000 --- a/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UserAccountsDrawerHeader","path":"/src/material/user_accounts_drawer_header.dart","parents":["StatefulWidget","Widget"],"desc":"标识应用程序用户的 Material Design [Drawer] 标题。","fields":[{"name":"decoration","type":"Decoration?","desc":"标题的背景。如果 decoration 为 null,则使用背景颜色设置为当前主题的 primaryColor 的 [BoxDecoration]。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"抽屉标题周围的边距。"},{"name":"currentAccountPicture","type":"Widget?","desc":"放置在左上角代表当前用户帐户的小部件。通常是 [CircleAvatar]。"},{"name":"otherAccountsPictures","type":"List?","desc":"代表当前用户其他帐户的小部件列表。这些小部件中最多三个将在标题右上角排成一行。通常是 [CircleAvatar] 小部件列表。"},{"name":"currentAccountPictureSize","type":"Size","required":true,"desc":"[currentAccountPicture] 的大小。"},{"name":"otherAccountsPicturesSize","type":"Size","required":true,"desc":"[otherAccountsPicturesSize] 中每个小部件的大小。"},{"name":"accountName","type":"Widget?","desc":"代表用户当前帐户名称的小部件。它显示在左侧,[currentAccountPicture] 下方。"},{"name":"accountEmail","type":"Widget?","desc":"代表用户当前帐户电子邮件地址的小部件。它显示在左侧,[accountName] 下方。"},{"name":"onDetailsPressed","type":"VoidCallback?","desc":"点击包含 [accountName] 和 [accountEmail] 的水平区域时调用的回调。"},{"name":"arrowColor","type":"Color","required":true,"desc":"箭头图标的 [Color]。"}],"id":22,"localName":"展示头","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"该组件的基本表现如下","desc":["【currentAccountPicture】: 上组件 【Widget】","【accountName】: 中组件 【Widget】","【accountEmail】: 下组件 【Widget】","【decoration】: 装饰 【Decoration】"]},{"file":"node2_pro.dart","name":"右上角和底部","desc":["【otherAccountsPictures】: 右上组件 【List】","【onDetailsPressed】: 右下角点击事件 【Function()】","【arrowColor】: 右下角按钮颜色 【Color】","【margin】: 外边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_en-US.json deleted file mode 100644 index 6628263ac..000000000 --- a/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ValueListenableBuilder","path":"/src/widgets/value_listenable_builder.dart","parents":["StatefulWidget","Widget"],"desc":" A widget whose content stays synced with a [ValueListenable].","fields":[{"name":"valueListenable","type":"ValueListenable","required":true,"desc":"The [ValueListenable] whose value you depend on in order to build."},{"name":"builder","type":"ValueWidgetBuilder","required":true,"desc":"A [ValueWidgetBuilder] which builds a widget depending on the [valueListenable]'s value."},{"name":"child","type":"Widget?","desc":"A [valueListenable]-independent widget which is passed back to the [builder]."}],"id":255,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ValueListenableBuilder","desc":["【builder】: Component builder 【ValueWidgetBuilder】","【valueListenable】: Listened value 【ValueListenable】","【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_zh-CN.json deleted file mode 100644 index 26c46de90..000000000 --- a/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ValueListenableBuilder","path":"/src/widgets/value_listenable_builder.dart","parents":["StatefulWidget","Widget"],"desc":"内容与 [ValueListenable] 保持同步的小部件。","fields":[{"name":"valueListenable","type":"ValueListenable","required":true,"desc":"您依赖其值来构建的 [ValueListenable]。"},{"name":"builder","type":"ValueWidgetBuilder","required":true,"desc":"根据 [valueListenable] 的值构建小部件的 [ValueWidgetBuilder]。"},{"name":"child","type":"Widget?","desc":"与 [valueListenable] 无关的小部件,传递回 [builder]。"}],"id":255,"localName":"监听值构造器","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ValueListenableBuilder基本使用","desc":["【builder】: 组件构造器 【ValueWidgetBuilder】","【valueListenable】: 监听值 【ValueListenable】","【child】: 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_en-US.json b/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_en-US.json deleted file mode 100644 index 86c826bc0..000000000 --- a/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"VerticalDivider","path":"/src/material/divider.dart","parents":["StatelessWidget","Widget"],"desc":" A thin vertical line, with padding on either side.","fields":[{"name":"width","type":"double?","desc":"The divider's width."},{"name":"thickness","type":"double?","desc":"The thickness of the line drawn within the divider."},{"name":"indent","type":"double?","desc":"The amount of empty space on top of the divider."},{"name":"endIndent","type":"double?","desc":"The amount of empty space under the divider."},{"name":"color","type":"Color?","desc":"The color to use when painting the line."},{"name":"radius","type":"BorderRadiusGeometry?","desc":"The amount of radius for the border of the divider."}],"id":35,"lever":2,"family":0,"linkIds":[34,329],"nodes":[{"file":"node1_base.dart","name":"VerticalDivider Color and Thickness","desc":["【color】: Color 【Color】","【thickness】: Line thickness 【double】"]},{"file":"node2_height.dart","name":"VerticalDivider Width and Indent","desc":["【indent】: Front indent length 【double】","【endIndent】: Back indent length 【double】","【width】: Placeholder width 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_zh-CN.json deleted file mode 100644 index 5e312a012..000000000 --- a/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"VerticalDivider","path":"/src/material/divider.dart","parents":["StatelessWidget","Widget"],"desc":"细垂直线,两侧有内边距。","fields":[{"name":"width","type":"double?","desc":"分隔符的宽度。"},{"name":"thickness","type":"double?","desc":"分隔符内绘制的线的厚度。"},{"name":"indent","type":"double?","desc":"分隔符顶部的空白空间量。"},{"name":"endIndent","type":"double?","desc":"分隔符底部的空白空间量。"},{"name":"color","type":"Color?","desc":"绘制线条时使用的颜色。"},{"name":"radius","type":"BorderRadiusGeometry?","desc":"分隔符边框的半径量。"}],"id":35,"localName":"竖直分割线","lever":2,"family":0,"linkIds":[34,329],"nodes":[{"file":"node1_base.dart","name":"VerticalDivider颜色和粗细","desc":["【color】: 颜色 【Color】","【thickness】: 线粗细 【double】"]},{"file":"node2_height.dart","name":"VerticalDivider宽度和空缺","desc":["【indent】: 前面空缺长度 【double】","【endIndent】: 后面空缺长度 【double】","【width】: 占位宽 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/View/View_en-US.json b/modules/widget_system/widgets/doc/widgets/View/View_en-US.json deleted file mode 100644 index 8aa800daf..000000000 --- a/modules/widget_system/widgets/doc/widgets/View/View_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"View","path":"/src/widgets/view.dart","parents":["StatefulWidget","Widget"],"desc":" Bootstraps a render tree that is rendered into the provided [FlutterView].","fields":[{"name":"view","type":"FlutterView","required":true,"desc":"The [FlutterView] into which [child] is drawn."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree, which will be drawn into the [view]."}],"id":555,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/View/View_zh-CN.json b/modules/widget_system/widgets/doc/widgets/View/View_zh-CN.json deleted file mode 100644 index b86d34a44..000000000 --- a/modules/widget_system/widgets/doc/widgets/View/View_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"View","path":"/src/widgets/view.dart","parents":["StatefulWidget","Widget"],"desc":"引导渲染到提供的 [FlutterView] 中的渲染树。","fields":[{"name":"view","type":"FlutterView","required":true,"desc":"绘制 [child] 的 [FlutterView]。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件,将绘制到 [view] 中。"}],"id":555,"localName":"View","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_en-US.json b/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_en-US.json deleted file mode 100644 index 60cbf4b1e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ViewAnchor","path":"/src/widgets/view.dart","parents":["StatelessWidget","Widget"],"desc":" Decorates a [child] widget with a side [View].","fields":[{"name":"view","type":"Widget?","desc":"The widget that defines the view anchored to this widget."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":556,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_zh-CN.json deleted file mode 100644 index 655500ae3..000000000 --- a/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ViewAnchor","path":"/src/widgets/view.dart","parents":["StatelessWidget","Widget"],"desc":"用侧边 [View] 装饰 [child] 小部件。","fields":[{"name":"view","type":"Widget?","desc":"定义锚定到此小部件的视图的小部件。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":556,"localName":"ViewAnchor","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_en-US.json b/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_en-US.json deleted file mode 100644 index eb954d7be..000000000 --- a/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ViewCollection","path":"/src/widgets/view.dart","parents":["_MultiChildComponentWidget","Widget"],"desc":" A collection of sibling [View]s.","fields":[],"id":557,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_zh-CN.json deleted file mode 100644 index d7ebaf1a8..000000000 --- a/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ViewCollection","path":"/src/widgets/view.dart","parents":["_MultiChildComponentWidget","Widget"],"desc":"兄弟 [View] 的集合。","fields":[],"id":557,"localName":"ViewCollection","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_en-US.json b/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_en-US.json deleted file mode 100644 index 99f4e7ae9..000000000 --- a/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Viewport","path":"/src/widgets/viewport.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget through which a portion of larger content can be viewed, typically in combination with a [Scrollable].","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"The direction in which the [offset]'s [ViewportOffset.pixels] increases."},{"name":"crossAxisDirection","type":"AxisDirection?","desc":"The direction in which child should be laid out in the cross axis."},{"name":"anchor","type":"double","required":true,"desc":"The relative position of the zero scroll offset."},{"name":"offset","type":"ViewportOffset","required":true,"desc":"Which part of the content inside the viewport should be visible."},{"name":"center","type":"Key?","desc":"The first child in the [GrowthDirection.forward] growth direction."},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"cacheExtentStyle","type":"CacheExtentStyle","required":true,"desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtentStyle}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":340,"lever":1,"family":3,"linkIds":[253,349],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Viewport","desc":["【offset】: *Viewport offset 【ViewportOffset】","【cacheExtentStyle】: Preload type 【CacheExtentStyle】","【cacheExtent】: Preload amount 【double】","【axisDirection】: Scrolling direction 【AxisDirection】","【slivers】: Child Sliver component set 【List】","【anchor】: Anchor point 【double】","You can run this code to see how the ColorItem is constructed, the 128 color bars are not all constructed at once."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_zh-CN.json deleted file mode 100644 index 8dd6ec232..000000000 --- a/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Viewport","path":"/src/widgets/viewport.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"可以查看较大内容的一部分的小部件,通常与 [Scrollable] 结合使用。","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"[offset] 的 [ViewportOffset.pixels] 增加的方向。"},{"name":"crossAxisDirection","type":"AxisDirection?","desc":"子项在交叉轴上应布局的方向。"},{"name":"anchor","type":"double","required":true,"desc":"零滚动偏移的相对位置。"},{"name":"offset","type":"ViewportOffset","required":true,"desc":"视口内容的哪一部分应该可见。"},{"name":"center","type":"Key?","desc":"[GrowthDirection.forward] 增长方向中的第一个子项。"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"cacheExtentStyle","type":"CacheExtentStyle","required":true,"desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtentStyle}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":340,"localName":"视口组件","lever":1,"family":3,"linkIds":[253,349],"nodes":[{"file":"node1_base.dart","name":"Viewport的基本使用","desc":["【offset】 : *视口偏移量 【ViewportOffset】","【cacheExtentStyle】: 预加载类型 【CacheExtentStyle】","【cacheExtent】: 预加载量 【double】","【axisDirection】: 滑动方向 【AxisDirection】","【slivers】: 子Sliver组件集 【List】","【anchor】: 锚点 【double】","可以运行这些代码,查看ColorItem的构建情况,128个色条并非一次性全部构建。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_en-US.json b/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_en-US.json deleted file mode 100644 index 077cf82b1..000000000 --- a/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Visibility","path":"/src/widgets/visibility.dart","parents":["StatelessWidget","Widget"],"desc":" Whether to show or hide a child.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget to show or hide, as controlled by [visible]."},{"name":"replacement","type":"Widget","required":true,"desc":"The widget to use when the child is not [visible], assuming that none of the `maintain` flags (in particular, [maintainState]) are set."},{"name":"visible","type":"bool","required":true,"desc":"Switches between showing the [child] or hiding it."},{"name":"maintainState","type":"bool","required":true,"desc":"Whether to maintain the [State] objects of the [child] subtree when it is not [visible]."},{"name":"maintainAnimation","type":"bool","required":true,"desc":"Whether to maintain animations within the [child] subtree when it is not [visible]."},{"name":"maintainSize","type":"bool","required":true,"desc":"Whether to maintain space for where the widget would have been."},{"name":"maintainSemantics","type":"bool","required":true,"desc":"Whether to maintain the semantics for the widget when it is hidden (e.g. for accessibility)."},{"name":"maintainInteractivity","type":"bool","required":true,"desc":"Whether to allow the widget to be interactive when hidden."}],"id":10,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Control the visibility of internal child components based on visible","desc":["【visible】: Whether to display 【bool】","【child】: Child 【Widget】","By default, the child will lose its original area when hidden."]},{"file":"node2_replacement.dart","name":"replacement can be used as a placeholder when hidden","desc":["【replacement】: Placeholder component when hidden 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_zh-CN.json deleted file mode 100644 index ed7a9d050..000000000 --- a/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Visibility","path":"/src/widgets/visibility.dart","parents":["StatelessWidget","Widget"],"desc":"是否显示或隐藏子项。","fields":[{"name":"child","type":"Widget","required":true,"desc":"要显示或隐藏的小部件,由 [visible] 控制。"},{"name":"replacement","type":"Widget","required":true,"desc":"当子项不 [visible] 时使用的小部件,假设没有设置任何 `maintain` 标志(特别是 [maintainState])。"},{"name":"visible","type":"bool","required":true,"desc":"在显示 [child] 或隐藏它之间切换。"},{"name":"maintainState","type":"bool","required":true,"desc":"当 [child] 子树不 [visible] 时是否维护其 [State] 对象。"},{"name":"maintainAnimation","type":"bool","required":true,"desc":"当 [child] 子树不 [visible] 时是否维护其中的动画。"},{"name":"maintainSize","type":"bool","required":true,"desc":"是否为小部件本来所在的位置维护空间。"},{"name":"maintainSemantics","type":"bool","required":true,"desc":"当小部件隐藏时是否维护其语义(例如用于辅助功能)。"},{"name":"maintainInteractivity","type":"bool","required":true,"desc":"隐藏时是否允许小部件可交互。"}],"id":10,"localName":"显隐组件","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"根据visible控制内部子组件的显隐情况","desc":["【visible】 : 是否显示 【bool】","【child】: 孩子 【Widget】","默认孩子隐藏时会失去原来所在区域。"]},{"file":"node2_replacement.dart","name":"replacement可在隐藏时进行占位","desc":["【replacement】 : 隐藏时的占位组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_en-US.json b/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_en-US.json deleted file mode 100644 index ef7c490b1..000000000 --- a/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"WidgetInspector","path":"/src/widgets/widget_inspector.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that enables inspecting the child widget's structure.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget that is being inspected."},{"name":"exitWidgetSelectionButtonBuilder","type":"ExitWidgetSelectionButtonBuilder?","desc":"A builder that is called to create the exit select-mode button."},{"name":"moveExitWidgetSelectionButtonBuilder","type":"MoveExitWidgetSelectionButtonBuilder?","desc":"A builder that is called to create the button that moves the exit select- mode button to the right or left."},{"name":"tapBehaviorButtonBuilder","type":"TapBehaviorButtonBuilder?","desc":"A builder that is called to create the button that changes the default tap behavior when Select Widget mode is enabled."}],"id":234,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of WidgetInspector","desc":["【child】 : Child component 【Widget】","【selectButtonBuilder】: *Select button builder 【InspectorSelectButtonBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_zh-CN.json deleted file mode 100644 index eb8a620d6..000000000 --- a/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"WidgetInspector","path":"/src/widgets/widget_inspector.dart","parents":["StatefulWidget","Widget"],"desc":"启用检查子小部件结构的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"正在被检查的小部件。"},{"name":"exitWidgetSelectionButtonBuilder","type":"ExitWidgetSelectionButtonBuilder?","desc":"调用以创建退出选择模式按钮的构建器。"},{"name":"moveExitWidgetSelectionButtonBuilder","type":"MoveExitWidgetSelectionButtonBuilder?","desc":"调用以创建将退出选择模式按钮向右或向左移动的按钮的构建器。"},{"name":"tapBehaviorButtonBuilder","type":"TapBehaviorButtonBuilder?","desc":"调用以创建在启用选择小部件模式时更改默认点击行为的按钮的构建器。"}],"id":234,"localName":"组件检查器","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"WidgetInspector基本使用","desc":["【child】 : 子组件 【Widget】","【selectButtonBuilder】: *选择按钮构造器 【InspectorSelectButtonBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_en-US.json b/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_en-US.json deleted file mode 100644 index 2e3987fa2..000000000 --- a/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"WidgetToRenderBoxAdapter","path":"/src/widgets/basic.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" An adapter for placing a specific [RenderBox] in the widget tree.","fields":[{"name":"renderBox","type":"RenderBox","required":true,"desc":"The render box to place in the widget tree."},{"name":"onBuild","type":"VoidCallback?","desc":"Called when it is safe to update the render box and its descendants. If you update the RenderObject subtree under this widget outside of invocations of this callback, features like hit-testing will fail as the tree will be dirty."},{"name":"onUnmount","type":"VoidCallback?","desc":"Called when it is safe to dispose of children that were manually added to the [renderBox]."}],"id":558,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_zh-CN.json b/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_zh-CN.json deleted file mode 100644 index 512b98c2b..000000000 --- a/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"WidgetToRenderBoxAdapter","path":"/src/widgets/basic.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在小部件树中放置特定 [RenderBox] 的适配器。","fields":[{"name":"renderBox","type":"RenderBox","required":true,"desc":"要放置在小部件树中的渲染框。"},{"name":"onBuild","type":"VoidCallback?","desc":"当可以安全地更新渲染框及其后代时调用。如果您在此回调的调用之外更新此小部件下的 RenderObject 子树,诸如命中测试之类的功能将失败,因为树将是脏的。"},{"name":"onUnmount","type":"VoidCallback?","desc":"当可以安全地处置手动添加到 [renderBox] 的子项时调用。"}],"id":558,"localName":"WidgetToRenderBoxAdapter","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_en-US.json b/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_en-US.json deleted file mode 100644 index 33aea350d..000000000 --- a/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"WidgetsApp","path":"/src/widgets/app.dart","parents":["StatefulWidget","Widget"],"desc":" A convenience widget that wraps a number of widgets that are commonly required for an application.","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@template flutter.widgets.widgetsApp.navigatorKey} A key to use when building the [Navigator]."},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@template flutter.widgets.widgetsApp.onGenerateRoute} The route generator callback used when the app is navigated to a named route."},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@template flutter.widgets.widgetsApp.onGenerateInitialRoutes} The routes generator callback used for generating initial routes if [initialRoute] is provided."},{"name":"pageRouteBuilder","type":"PageRouteFactory?","desc":"The [PageRoute] generator callback used when the app is navigated to a named route."},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@template flutter.widgets.widgetsApp.routeInformationParser} A delegate to parse the route information from the [routeInformationProvider] into a generic data type to be processed by the [routerDelegate] at a later stage."},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@template flutter.widgets.widgetsApp.routerDelegate} A delegate that configures a widget, typically a [Navigator], with parsed result from the [routeInformationParser]."},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@template flutter.widgets.widgetsApp.backButtonDispatcher} A delegate that decide whether to handle the Android back button intent."},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@template flutter.widgets.widgetsApp.routeInformationProvider} A object that provides route information through the [RouteInformationProvider.value] and notifies its listener when its value changes."},{"name":"routerConfig","type":"RouterConfig?","desc":"{@template flutter.widgets.widgetsApp.routerConfig} An object to configure the underlying [Router]."},{"name":"home","type":"Widget?","desc":"{@template flutter.widgets.widgetsApp.home} The widget for the default route of the app ([Navigator.defaultRouteName], which is `/`)."},{"name":"routes","type":"Map?","desc":"The application's top-level routing table."},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@template flutter.widgets.widgetsApp.onUnknownRoute} Called when [onGenerateRoute] fails to generate a route, except for the [initialRoute]."},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@template flutter.widgets.widgetsApp.onNavigationNotification} The callback to use when receiving a [NavigationNotification]."},{"name":"initialRoute","type":"String?","desc":"{@template flutter.widgets.widgetsApp.initialRoute} The name of the first route to show, if a [Navigator] is built."},{"name":"navigatorObservers","type":"List?","desc":"{@template flutter.widgets.widgetsApp.navigatorObservers} The list of observers for the [Navigator] created for this app."},{"name":"builder","type":"TransitionBuilder?","desc":"{@template flutter.widgets.widgetsApp.builder} A builder for inserting widgets above the [Navigator] or - when the [WidgetsApp.router] constructor is used - above the [Router] but below the other widgets created by the [WidgetsApp] widget, or for replacing the [Navigator]/[Router] entirely."},{"name":"title","type":"String?","desc":"{@template flutter.widgets.widgetsApp.title} A one-line description used by the device to identify the app for the user."},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@template flutter.widgets.widgetsApp.onGenerateTitle} If non-null this callback function is called to produce the app's title string, otherwise [title] is used."},{"name":"textStyle","type":"TextStyle?","desc":"The default text style for [Text] in the application."},{"name":"color","type":"Color","required":true,"desc":"{@template flutter.widgets.widgetsApp.color} The primary color to use for the application in the operating system interface."},{"name":"locale","type":"Locale?","desc":"{@template flutter.widgets.widgetsApp.locale} The initial locale for this app's [Localizations] widget is based on this value."},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@template flutter.widgets.widgetsApp.localizationsDelegates} The delegates for this app's [Localizations] widget."},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@template flutter.widgets.widgetsApp.localeListResolutionCallback} This callback is responsible for choosing the app's locale when the app is started, and when the user changes the device's locale."},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@template flutter.widgets.widgetsApp.supportedLocales} The list of locales that this app has been localized for."},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"Turns on a performance overlay."},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"Turns on an overlay that shows the accessibility information reported by the framework."},{"name":"debugShowWidgetInspector","type":"bool","required":true,"desc":"Turns on an overlay that enables inspecting the widget tree."},{"name":"exitWidgetSelectionButtonBuilder","type":"ExitWidgetSelectionButtonBuilder?","desc":"Builds the widget the [WidgetInspector] uses to exit selection mode."},{"name":"moveExitWidgetSelectionButtonBuilder","type":"MoveExitWidgetSelectionButtonBuilder?","desc":"Builds the widget the [WidgetInspector] uses to move the exit selection mode button."},{"name":"tapBehaviorButtonBuilder","type":"TapBehaviorButtonBuilder?","desc":"Builds the widget the [WidgetInspector] uses to change the default behavior when tapping on widgets in the app."},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@template flutter.widgets.widgetsApp.debugShowCheckedModeBanner} Turns on a little \"DEBUG\" banner in debug mode to indicate that the app is in debug mode. This is on by default (in debug mode), to turn it off, set the constructor argument to false. In release mode this has no effect."},{"name":"shortcuts","type":"Map?","desc":"{@template flutter.widgets.widgetsApp.shortcuts} The default map of keyboard shortcuts to intents for the application."},{"name":"actions","type":"Map>?","desc":"{@template flutter.widgets.widgetsApp.actions} The default map of intent keys to actions for the application."},{"name":"restorationScopeId","type":"String?","desc":"{@template flutter.widgets.widgetsApp.restorationScopeId} The identifier to use for state restoration of this app."},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@template flutter.widgets.widgetsApp.useInheritedMediaQuery} Deprecated. This setting is now ignored."}],"id":236,"lever":2,"family":1,"linkIds":[65,156],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of WidgetsApp","desc":["【pageRouteBuilder】 : *Route Builder 【PageRouteFactory】","【color】: *Color 【Color】","【debugShowWidgetInspector】: Whether to display the widget inspector 【bool】","Other properties are basically the same as MaterialApp, see details there."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_zh-CN.json b/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_zh-CN.json deleted file mode 100644 index 6ed80808a..000000000 --- a/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"WidgetsApp","path":"/src/widgets/app.dart","parents":["StatefulWidget","Widget"],"desc":"包装应用程序通常需要的多个小部件的便利小部件。","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@template flutter.widgets.widgetsApp.navigatorKey} 构建 [Navigator] 时使用的键。"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@template flutter.widgets.widgetsApp.onGenerateRoute} 应用程序导航到命名路由时使用的路由生成器回调。"},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@template flutter.widgets.widgetsApp.onGenerateInitialRoutes} 如果提供了 [initialRoute],用于生成初始路由的路由生成器回调。"},{"name":"pageRouteBuilder","type":"PageRouteFactory?","desc":"应用程序导航到命名路由时使用的 [PageRoute] 生成器回调。"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@template flutter.widgets.widgetsApp.routeInformationParser} 将来自 [routeInformationProvider] 的路由信息解析为通用数据类型的委托,以便稍后由 [routerDelegate] 处理。"},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@template flutter.widgets.widgetsApp.routerDelegate} 使用来自 [routeInformationParser] 的解析结果配置小部件(通常是 [Navigator])的委托。"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@template flutter.widgets.widgetsApp.backButtonDispatcher} 决定是否处理 Android 返回按钮意图的委托。"},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@template flutter.widgets.widgetsApp.routeInformationProvider} 通过 [RouteInformationProvider.value] 提供路由信息并在其值更改时通知其监听器的对象。"},{"name":"routerConfig","type":"RouterConfig?","desc":"{@template flutter.widgets.widgetsApp.routerConfig} 配置底层 [Router] 的对象。"},{"name":"home","type":"Widget?","desc":"{@template flutter.widgets.widgetsApp.home} 应用程序默认路由的小部件([Navigator.defaultRouteName],即 `/`)。"},{"name":"routes","type":"Map?","desc":"应用程序的顶级路由表。"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@template flutter.widgets.widgetsApp.onUnknownRoute} 当 [onGenerateRoute] 无法生成路由时调用,除了 [initialRoute]。"},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@template flutter.widgets.widgetsApp.onNavigationNotification} 接收 [NavigationNotification] 时使用的回调。"},{"name":"initialRoute","type":"String?","desc":"{@template flutter.widgets.widgetsApp.initialRoute} 如果构建了 [Navigator],要显示的第一个路由的名称。"},{"name":"navigatorObservers","type":"List?","desc":"{@template flutter.widgets.widgetsApp.navigatorObservers} 为此应用程序创建的 [Navigator] 的观察者列表。"},{"name":"builder","type":"TransitionBuilder?","desc":"{@template flutter.widgets.widgetsApp.builder} 用于在 [Navigator] 上方插入小部件的构建器,或者当使用 [WidgetsApp.router] 构造函数时在 [Router] 上方但在 [WidgetsApp] 小部件创建的其他小部件下方,或者完全替换 [Navigator]/[Router]。"},{"name":"title","type":"String?","desc":"{@template flutter.widgets.widgetsApp.title} 设备用于向用户标识应用程序的单行描述。"},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@template flutter.widgets.widgetsApp.onGenerateTitle} 如果非空,调用此回调函数来生成应用程序的标题字符串,否则使用 [title]。"},{"name":"textStyle","type":"TextStyle?","desc":"应用程序中 [Text] 的默认文本样式。"},{"name":"color","type":"Color","required":true,"desc":"{@template flutter.widgets.widgetsApp.color} 在操作系统界面中用于应用程序的主要颜色。"},{"name":"locale","type":"Locale?","desc":"{@template flutter.widgets.widgetsApp.locale} 此应用程序的 [Localizations] 小部件的初始区域设置基于此值。"},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@template flutter.widgets.widgetsApp.localizationsDelegates} 此应用程序的 [Localizations] 小部件的委托。"},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@template flutter.widgets.widgetsApp.localeListResolutionCallback} 此回调负责在应用程序启动时以及用户更改设备区域设置时选择应用程序的区域设置。"},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@template flutter.widgets.widgetsApp.supportedLocales} 此应用程序已本地化的区域设置列表。"},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"打开性能覆盖。"},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"打开显示框架报告的辅助功能信息的覆盖。"},{"name":"debugShowWidgetInspector","type":"bool","required":true,"desc":"打开启用检查小部件树的覆盖。"},{"name":"exitWidgetSelectionButtonBuilder","type":"ExitWidgetSelectionButtonBuilder?","desc":"构建 [WidgetInspector] 用于退出选择模式的小部件。"},{"name":"moveExitWidgetSelectionButtonBuilder","type":"MoveExitWidgetSelectionButtonBuilder?","desc":"构建 [WidgetInspector] 用于移动退出选择模式按钮的小部件。"},{"name":"tapBehaviorButtonBuilder","type":"TapBehaviorButtonBuilder?","desc":"构建 [WidgetInspector] 用于更改在应用程序中点击小部件时的默认行为的小部件。"},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@template flutter.widgets.widgetsApp.debugShowCheckedModeBanner} 在调试模式下打开一个小的"},{"name":"shortcuts","type":"Map?","desc":"{@template flutter.widgets.widgetsApp.shortcuts} 应用程序的键盘快捷键到意图的默认映射。"},{"name":"actions","type":"Map>?","desc":"{@template flutter.widgets.widgetsApp.actions} 应用程序的意图键到操作的默认映射。"},{"name":"restorationScopeId","type":"String?","desc":"{@template flutter.widgets.widgetsApp.restorationScopeId} 用于此应用程序状态恢复的标识符。"},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@template flutter.widgets.widgetsApp.useInheritedMediaQuery} 已弃用。此设置现在被忽略。"}],"id":236,"localName":"组件应用","lever":2,"family":1,"linkIds":[65,156],"nodes":[{"file":"node1_base.dart","name":"WidgetsApp基本使用","desc":["【pageRouteBuilder】 : *路由构造器 【PageRouteFactory】","【color】: *颜色 【Color】","【debugShowWidgetInspector】: 是否显示z组件查看器 【bool】","其他属性基本上同MaterialApp,详见之。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_en-US.json b/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_en-US.json deleted file mode 100644 index bd3bad234..000000000 --- a/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"WillPopScope","path":"/src/widgets/will_pop_scope.dart","parents":["StatefulWidget","Widget"],"desc":" Registers a callback to veto attempts by the user to dismiss the enclosing [ModalRoute].","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"onWillPop","type":"WillPopCallback?","desc":"Called to veto attempts by the user to dismiss the enclosing [ModalRoute]."}],"id":170,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"WillPopScope Usage","desc":["【child】: Child component 【Widget】","【onWillPop】: Return callback 【WillPopCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_zh-CN.json deleted file mode 100644 index b6c508d2c..000000000 --- a/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"WillPopScope","path":"/src/widgets/will_pop_scope.dart","parents":["StatefulWidget","Widget"],"desc":"注册回调以否决用户关闭封闭 [ModalRoute] 的尝试。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"onWillPop","type":"WillPopCallback?","desc":"调用以否决用户关闭封闭 [ModalRoute] 的尝试。"}],"id":170,"localName":"返回拦截","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"WillPopScope使用","desc":["【child】 : 子组件 【Widget】","【onWillPop】 : 返回回调 【WillPopCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_en-US.json b/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_en-US.json deleted file mode 100644 index a46bb3269..000000000 --- a/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Wrap","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that displays its children in multiple horizontal or vertical runs.","fields":[{"name":"direction","type":"Axis","required":true,"desc":"The direction to use as the main axis."},{"name":"alignment","type":"WrapAlignment","required":true,"desc":"How the children within a run should be placed in the main axis."},{"name":"spacing","type":"double","required":true,"desc":"How much space to place between children in a run in the main axis."},{"name":"runAlignment","type":"WrapAlignment","required":true,"desc":"How the runs themselves should be placed in the cross axis."},{"name":"runSpacing","type":"double","required":true,"desc":"How much space to place between the runs themselves in the cross axis."},{"name":"crossAxisAlignment","type":"WrapCrossAlignment","required":true,"desc":"How the children within a run should be aligned relative to each other in the cross axis."},{"name":"textDirection","type":"TextDirection?","desc":"Determines the order to lay children out horizontally and how to interpret `start` and `end` in the horizontal direction."},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"Determines the order to lay children out vertically and how to interpret `start` and `end` in the vertical direction."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":98,"lever":5,"family":3,"linkIds":[94,95],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Wrap","desc":["【children】: Component list 【List】","【spacing】: Main axis spacing between items 【double】","【runSpacing】: Cross axis spacing between items 【double】","【direction】: Main axis alignment 【Axis】"]},{"file":"node2_alignment.dart","name":"Wrap's alignment Property","desc":["【alignment】: Main axis alignment 【WrapAlignment】"]},{"file":"node3_crossAxisAlignment.dart","name":"Wrap's crossAxisAlignment Property","desc":["【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】"]},{"file":"node4_textDirection.dart","name":"Wrap's textDirection Property","desc":["【textDirection】: Text direction 【TextDirection】"]},{"file":"node5_verticalDirection.dart","name":"Wrap's verticalDirection Property","desc":["【verticalDirection】: Vertical direction 【VerticalDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_zh-CN.json deleted file mode 100644 index 25aa8ddc9..000000000 --- a/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Wrap","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在多个水平或垂直运行中显示其子项的小部件。","fields":[{"name":"direction","type":"Axis","required":true,"desc":"用作主轴的方向。"},{"name":"alignment","type":"WrapAlignment","required":true,"desc":"运行中的子项应如何在主轴上放置。"},{"name":"spacing","type":"double","required":true,"desc":"在主轴上的运行中子项之间放置多少空间。"},{"name":"runAlignment","type":"WrapAlignment","required":true,"desc":"运行本身应如何在交叉轴上放置。"},{"name":"runSpacing","type":"double","required":true,"desc":"在交叉轴上运行本身之间放置多少空间。"},{"name":"crossAxisAlignment","type":"WrapCrossAlignment","required":true,"desc":"运行中的子项应如何在交叉轴上相对于彼此对齐。"},{"name":"textDirection","type":"TextDirection?","desc":"确定水平布局子项的顺序以及如何解释水平方向上的 `start` 和 `end`。"},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"确定垂直布局子项的顺序以及如何解释垂直方向上的 `start` 和 `end`。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":98,"localName":"包裹布局","lever":5,"family":3,"linkIds":[94,95],"nodes":[{"file":"node1_base.dart","name":"Wrap的基础用法","desc":["【children】 : 组件列表 【List】","【spacing】 : 主轴条目间距 【double】","【runSpacing】 : 交叉轴条目间距 【double】","【direction】 : 主轴对齐 【Axis】"]},{"file":"node2_alignment.dart","name":"Wrap的alignment属性","desc":["【alignment】 : 主轴对齐 【WrapAlignment】"]},{"file":"node3_crossAxisAlignment.dart","name":"Wrap的crossAxisAlignment属性","desc":["【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】"]},{"file":"node4_textDirection.dart","name":"Wrap的textDirection属性","desc":["【textDirection】 : 文字方向 【TextDirection】"]},{"file":"node5_verticalDirection.dart","name":"Wrap的verticalDirection属性","desc":["【verticalDirection】 : 竖直方向 【VerticalDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_en-US.json b/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_en-US.json deleted file mode 100644 index 3f8e7bfa5..000000000 --- a/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"YearPicker","path":"/src/material/calendar_date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A scrollable grid of years to allow picking a year.","fields":[{"name":"currentDate","type":"DateTime","required":true,"desc":"The current date."},{"name":"firstDate","type":"DateTime","required":true,"desc":"The earliest date the user is permitted to pick."},{"name":"lastDate","type":"DateTime","required":true,"desc":"The latest date the user is permitted to pick."},{"name":"selectedDate","type":"DateTime?","desc":"The currently selected date."},{"name":"onChanged","type":"ValueChanged","required":true,"desc":"Called when the user picks a year."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":136,"lever":3,"family":1,"linkIds":[134,135],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of YearPicker","desc":["【selectedDate】: Selected date 【DateTime】","【firstDate】: First date limit 【DateTime】","【lastDate】: Last date limit 【DateTime】","【onChanged】: Click callback 【Function(DateTime)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_zh-CN.json b/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_zh-CN.json deleted file mode 100644 index 552f8c5ee..000000000 --- a/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"YearPicker","path":"/src/material/calendar_date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"允许选择年份的可滚动年份网格。","fields":[{"name":"currentDate","type":"DateTime","required":true,"desc":"当前日期。"},{"name":"firstDate","type":"DateTime","required":true,"desc":"用户被允许选择的最早日期。"},{"name":"lastDate","type":"DateTime","required":true,"desc":"用户被允许选择的最晚日期。"},{"name":"selectedDate","type":"DateTime?","desc":"当前选定的日期。"},{"name":"onChanged","type":"ValueChanged","required":true,"desc":"用户选择年份时调用。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":136,"localName":"年份选择器","lever":3,"family":1,"linkIds":[134,135],"nodes":[{"file":"node1_base.dart","name":"YearPicker基本使用","desc":["【selectedDate】 : 选中日期 【DateTime】","【firstDate】 : 最前日期限制 【DateTime】","【lastDate】 : 最后日期限制 【DateTime】","【onChanged】 : 点击回调 【Function(DateTime)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/translation_plan.md b/modules/widget_system/widgets/doc/widgets/translation_plan.md deleted file mode 100644 index 46caab293..000000000 --- a/modules/widget_system/widgets/doc/widgets/translation_plan.md +++ /dev/null @@ -1,8 +0,0 @@ -# 翻译计划 - -**待翻译组件数量**: 0 - -**生成时间**: 2025-07-28 06:31:35.321579 - -## 待翻译组件列表 - diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_de_DE.json deleted file mode 100644 index b00b56ff8..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "Spaltenlayout", - "info": "Flex-Layout mit vertikaler Ausrichtung, das mehrere Komponenten aufnehmen kann. Alle anderen Eigenschaften sind identisch, siehe Flex.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Grundlegende Verwendung von Column", - "desc": [ - "【children】 : Liste der Komponenten 【List】", - "【mainAxisAlignment】 : Hauptachsenausrichtung 【MainAxisAlignment】", - "【crossAxisAlignment】 : Kreuzachsenausrichtung 【CrossAxisAlignment】", - "【textBaseline】 : Textbaseline 【TextBaseline】", - "【verticalDirection】 : Vertikale Richtung 【VerticalDirection】", - "【mainAxisSize】 : Hauptachsengröße 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_en_US.json deleted file mode 100644 index f7250c415..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "Column Layout", - "info": "A Flex layout with a vertical arrangement direction, capable of accommodating multiple components. All other properties are the same, see Flex for details.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Basic Usage of Column", - "desc": [ - "【children】: Component list 【List】", - "【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】", - "【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】", - "【textBaseline】: Text baseline 【TextBaseline】", - "【verticalDirection】: Vertical direction 【VerticalDirection】", - "【mainAxisSize】: Main axis size 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_es_ES.json deleted file mode 100644 index 933b7ab56..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "Disposición de columna", - "info": "Disposición Flex con dirección vertical, puede contener múltiples componentes. Todas las demás propiedades son iguales, consulte Flex para más detalles.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Uso básico de Column", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【mainAxisAlignment】 : Alineación del eje principal 【MainAxisAlignment】", - "【crossAxisAlignment】 : Alineación del eje transversal 【CrossAxisAlignment】", - "【textBaseline】 : Línea base del texto 【TextBaseline】", - "【verticalDirection】 : Dirección vertical 【VerticalDirection】", - "【mainAxisSize】 : Tamaño del eje principal 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_fr_FR.json deleted file mode 100644 index 105e2a1d4..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "Disposition en colonne", - "info": "Une disposition Flex avec une orientation verticale, capable de contenir plusieurs composants. Toutes les autres propriétés sont identiques, voir Flex pour plus de détails.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Utilisation de base de Column", - "desc": [ - "【children】 : Liste des composants 【List】", - "【mainAxisAlignment】 : Alignement de l'axe principal 【MainAxisAlignment】", - "【crossAxisAlignment】 : Alignement de l'axe secondaire 【CrossAxisAlignment】", - "【textBaseline】 : Ligne de base du texte 【TextBaseline】", - "【verticalDirection】 : Direction verticale 【VerticalDirection】", - "【mainAxisSize】 : Taille de l'axe principal 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_it_IT.json deleted file mode 100644 index b8ca8dff4..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "Layout Colonna", - "info": "Un layout Flex con direzione di disposizione verticale, in grado di contenere più componenti. Tutte le altre proprietà sono le stesse, vedi Flex per maggiori dettagli.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Uso di base di Column", - "desc": [ - "【children】 : Lista di componenti 【List】", - "【mainAxisAlignment】 : Allineamento dell'asse principale 【MainAxisAlignment】", - "【crossAxisAlignment】 : Allineamento dell'asse trasversale 【CrossAxisAlignment】", - "【textBaseline】 : Linea di base del testo 【TextBaseline】", - "【verticalDirection】 : Direzione verticale 【VerticalDirection】", - "【mainAxisSize】 : Dimensione dell'asse principale 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ja_JP.json deleted file mode 100644 index a432e0544..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "列レイアウト", - "info": "縦方向に配置するFlexレイアウトで、複数のコンポーネントを収容できます。他の属性はすべて同じです。詳細はFlexを参照してください。", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Columnの基本的な使用法", - "desc": [ - "【children】 : コンポーネントリスト 【List】", - "【mainAxisAlignment】 : 主軸の整列 【MainAxisAlignment】", - "【crossAxisAlignment】 : 交差軸の整列 【CrossAxisAlignment】", - "【textBaseline】 : テキストベースライン 【TextBaseline】", - "【verticalDirection】 : 垂直方向 【VerticalDirection】", - "【mainAxisSize】 : 主軸サイズ 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ko_KR.json deleted file mode 100644 index 93f2ed269..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "열 레이아웃", - "info": "세로 방향으로 배열되는 Flex 레이아웃으로, 여러 컴포넌트를 수용할 수 있습니다. 다른 속성은 모두 동일하며, 자세한 내용은 Flex를 참조하십시오.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Column 기본 사용", - "desc": [ - "【children】 : 컴포넌트 목록 【List】", - "【mainAxisAlignment】 : 메인 축 정렬 【MainAxisAlignment】", - "【crossAxisAlignment】 : 교차 축 정렬 【CrossAxisAlignment】", - "【textBaseline】 : 텍스트 기준선 【TextBaseline】", - "【verticalDirection】 : 세로 방향 【VerticalDirection】", - "【mainAxisSize】 : 메인 축 크기 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_pt_PT.json deleted file mode 100644 index 937db6d0f..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "Layout de Coluna", - "info": "Layout Flex com direção de disposição vertical, pode acomodar vários componentes. Todas as outras propriedades são iguais, consulte Flex para mais detalhes.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Uso Básico do Column", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【mainAxisAlignment】 : Alinhamento do eixo principal 【MainAxisAlignment】", - "【crossAxisAlignment】 : Alinhamento do eixo transversal 【CrossAxisAlignment】", - "【textBaseline】 : Linha de base do texto 【TextBaseline】", - "【verticalDirection】 : Direção vertical 【VerticalDirection】", - "【mainAxisSize】 : Tamanho do eixo principal 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ru_RU.json deleted file mode 100644 index 82d8686c5..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "Колонка", - "info": "Гибкий макет с вертикальным направлением размещения, который может содержать несколько компонентов. Все остальные свойства идентичны, подробнее см. Flex.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Основное использование Column", - "desc": [ - "【children】 : Список компонентов 【List】", - "【mainAxisAlignment】 : Выравнивание по главной оси 【MainAxisAlignment】", - "【crossAxisAlignment】 : Выравнивание по поперечной оси 【CrossAxisAlignment】", - "【textBaseline】 : Базовая линия текста 【TextBaseline】", - "【verticalDirection】 : Вертикальное направление 【VerticalDirection】", - "【mainAxisSize】 : Размер главной оси 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_zh-CN.json deleted file mode 100644 index 5dc8af0c0..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "列布局", - "info": "排布方向为竖向的Flex布局,可容纳多个组件。其他属性全部一致,详见Flex。", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Column基本使用", - "desc": [ - "【children】 : 组件列表 【List】", - "【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】", - "【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】", - "【textBaseline】 : 文字基线 【TextBaseline】", - "【verticalDirection】 : 竖直方向 【VerticalDirection】", - "【mainAxisSize】 : 主轴尺寸 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/node_01.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/node_01.dart deleted file mode 100644 index b90694f27..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/node_01.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class ColumnNode1 extends StatelessWidget { - const ColumnNode1({super.key}); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildTitle(), - _buildContent(context), - ], - ); - } - - Widget _buildTitle() { - return Container( - height: 70, - color: const Color(0x4484FFFF), - child: Row( - children: const [ - Padding( - child: Icon( - Icons.add_location, - size: 30, - color: Colors.pink, - ), - padding: EdgeInsets.only(left: 25, right: 20), - ), - Expanded( - child: Text( - "附近", - style: TextStyle(fontSize: 18), - ), - ), - Padding( - child: Icon(Icons.keyboard_arrow_right, color: Colors.black38), - padding: EdgeInsets.only(right: 25), - ), - ], - )); - } - - Widget _buildContent(ctx) => Container( - width: MediaQuery.of(ctx).size.width, - color: Colors.orangeAccent, - height: 100, - child: const Icon( - Icons.android, - size: 50, - color: Colors.white, - ), - ); -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_de_DE.json deleted file mode 100644 index 0259fe268..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "Allgemeines Multi-Kind-Layout", - "info": "Verwenden Sie eine Proxy-Klasse, um das Layout einer Gruppe von Kinderkomponenten zu steuern. Die Kinderkomponenten müssen mit der LayoutId-Komponente gekennzeichnet werden.", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Grundlegende Verwendung von CustomMultiChildLayout", - "desc": [ - "【children】 : Kinderkomponentensammlung 【List】", - "【delegate】 : Layout-Proxy 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_en_US.json deleted file mode 100644 index b93a246d5..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "General Multi-Child Layout", - "info": "Use a delegate class to control the layout of a set of child components. Child components must be identified using the LayoutId component.", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Basic Usage of CustomMultiChildLayout", - "desc": [ - "【children】: Set of child components 【List】", - "【delegate】: Layout delegate 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_es_ES.json deleted file mode 100644 index ab14f34d6..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "Diseño de múltiples hijos genérico", - "info": "Utiliza una clase delegada para controlar el diseño de un conjunto de componentes hijos. Los componentes hijos deben identificarse utilizando el componente LayoutId.", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Uso básico de CustomMultiChildLayout", - "desc": [ - "【children】: Conjunto de componentes hijos 【List】", - "【delegate】: Delegado de diseño 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_fr_FR.json deleted file mode 100644 index 111364635..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "Disposition multi-enfants universelle", - "info": "Utilise une classe déléguée pour contrôler la disposition d'un ensemble de composants enfants. Les composants enfants doivent être identifiés à l'aide du composant LayoutId.", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Utilisation de base de CustomMultiChildLayout", - "desc": [ - "【children】 : Ensemble de composants enfants 【List】", - "【delegate】 : Délégué de disposition 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_it_IT.json deleted file mode 100644 index 8280c9815..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "Layout Multi-Figlio Generico", - "info": "Utilizza una classe delegata per controllare il layout di un insieme di componenti figli. I componenti figli devono essere identificati utilizzando il componente LayoutId.", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Uso di base di CustomMultiChildLayout", - "desc": [ - "【children】 : Insieme di componenti figli 【List】", - "【delegate】 : Delegato di layout 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ja_JP.json deleted file mode 100644 index fe9199dec..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "汎用マルチチャイルドレイアウト", - "info": "プロキシクラスを使用して子コンポーネントセットのレイアウトを制御します。子コンポーネントはLayoutIdコンポーネントで識別する必要があります。", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "CustomMultiChildLayoutの基本使用", - "desc": [ - "【children】 : 子コンポーネントセット 【List】", - "【delegate】 : レイアウトプロキシ 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ko_KR.json deleted file mode 100644 index c21b94969..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "일반 다중 자식 레이아웃", - "info": "프록시 클래스를 사용하여 자식 위젯 집합의 레이아웃을 제어하며, 자식 위젯은 LayoutId 위젯으로 식별되어야 합니다.", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "CustomMultiChildLayout 기본 사용", - "desc": [ - "【children】 : 자식 위젯 집합 【List】", - "【delegate】 : 레이아웃 프록시 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_pt_PT.json deleted file mode 100644 index 09a840f65..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "Layout Multi-Filho Personalizado", - "info": "Usa uma classe delegada para controlar o layout de um conjunto de componentes filhos, os componentes filhos devem ser identificados usando o componente LayoutId.", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Uso Básico do CustomMultiChildLayout", - "desc": [ - "【children】 : Conjunto de componentes filhos 【List】", - "【delegate】 : Delegado de layout 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ru_RU.json deleted file mode 100644 index ad443c2a6..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "Универсальная компоновка с несколькими дочерними элементами", - "info": "Использует класс-делегат для управления компоновкой набора дочерних элементов, дочерние элементы должны быть идентифицированы с помощью компонента LayoutId.", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Основное использование CustomMultiChildLayout", - "desc": [ - "【children】 : Набор дочерних элементов 【List】", - "【delegate】 : Делегат компоновки 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_zh-CN.json deleted file mode 100644 index 20f890552..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "通用多子布局", - "info": "使用一个代理类对子组件集进行布局控制,子组件必须使用LayoutId组件进行标识。", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "CustomMultiChildLayout基本使用", - "desc": [ - "【children】 : 子组件集 【List】", - "【delegate】 : 布局代理 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/node_01.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/node_01.dart deleted file mode 100644 index 136fdf647..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/node_01.dart +++ /dev/null @@ -1,85 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/6/6 -/// contact me by email 1981462002@qq.com - - - -class CustomMultiChildLayoutNode1 extends StatelessWidget { - const CustomMultiChildLayoutNode1({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - width: 300, - height: 150, - color: Colors.grey.withAlpha(33), - child: CustomMultiChildLayout( - delegate: CornerCustomMultiChildLayout( - padding:const EdgeInsets.only(left: 10,top: 5,right: 10,bottom: 5), - ), - children: [ - LayoutId(id: CornerType.topLeft, child: const Box50(Colors.red)), - LayoutId(id: CornerType.topRight, child: const Box50(Colors.yellow)), - LayoutId(id: CornerType.bottomLeft, child: const Box50(Colors.blue)), - LayoutId(id: CornerType.bottomRight, child: const Box50(Colors.green)), - ], - ), - ); - } -} - -// 50 颜色盒 -class Box50 extends StatelessWidget { - final Color color; - const Box50(this.color, {Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - width: 50, - height: 50, - color: color, - ); - } -} - - -enum CornerType{ - topLeft, - topRight, - bottomLeft, - bottomRight -} - - -class CornerCustomMultiChildLayout extends MultiChildLayoutDelegate{ - final EdgeInsets padding; - - CornerCustomMultiChildLayout({this.padding = EdgeInsets.zero}); - - @override - void performLayout(Size size) { - if (hasChild(CornerType.topLeft)) { - layoutChild(CornerType.topLeft, BoxConstraints.loose(size)); - positionChild(CornerType.topLeft, Offset.zero.translate(padding.left, padding.top)); - } - if (hasChild(CornerType.topRight)) { - var childSize = layoutChild(CornerType.topRight, BoxConstraints.loose(size)); - positionChild(CornerType.topRight, Offset(size.width-childSize.width,0).translate(-padding.right, padding.top)); - } - if (hasChild(CornerType.bottomLeft)) { - var childSize = layoutChild(CornerType.bottomLeft, BoxConstraints.loose(size)); - positionChild(CornerType.bottomLeft, Offset(0,size.height-childSize.height).translate(padding.left, -padding.bottom)); - } - if (hasChild(CornerType.bottomRight)) { - var childSize = layoutChild(CornerType.bottomRight, BoxConstraints.loose(size)); - positionChild(CornerType.bottomRight, Offset(size.width-childSize.width,size.height-childSize.height).translate(-padding.right, -padding.bottom)); - } - } - - @override - bool shouldRelayout(CornerCustomMultiChildLayout oldDelegate) => oldDelegate.padding!=padding; - -} - diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_de_DE.json deleted file mode 100644 index fa3418e5c..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_de_DE.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "Flexibles Layout", - "info": "Übergeordnete Klasse von Row und Column, die leistungsstärkste Layout-Methode in Flutter. Kann mehrere Komponenten aufnehmen und kann mit Spacer, Expended, Flexible Komponenten für flexibles Layout verwendet werden", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Ausrichtung von Flex", - "desc": [ - "【children】 : Komponentenliste 【List】", - "【direction】 : Richtung 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Hauptachsenausrichtung von Flex", - "desc": [ - "【mainAxisAlignment】 : Hauptachsenausrichtung 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Kreuzachsenausrichtung von Flex", - "desc": [ - "【crossAxisAlignment】 : Kreuzachsenausrichtung 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Vertikale Richtungsreihenfolge von Flex", - "desc": [ - "【verticalDirection】 : Vertikale Richtungsreihenfolge 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Horizontale Richtungsreihenfolge von Flex", - "desc": [ - "【textDirection】 : Horizontale Richtungsreihenfolge 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_en_US.json deleted file mode 100644 index 75a4dfa9a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_en_US.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "Flex Layout", - "info": "The parent class of Row and Column, the most powerful layout method in Flutter. It can accommodate multiple components and can be used in conjunction with Spacer, Expended, and Flexible components for flexible layout.", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Flex Direction", - "desc": [ - "【children】: Component list 【List】", - "【direction】: Direction 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Flex Main Axis Alignment", - "desc": [ - "【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Flex Cross Axis Alignment", - "desc": [ - "【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Flex Vertical Direction", - "desc": [ - "【verticalDirection】: Vertical direction 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Flex Horizontal Direction", - "desc": [ - "【textDirection】: Horizontal direction 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_es_ES.json deleted file mode 100644 index 1936f39c5..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_es_ES.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "Diseño Flexible", - "info": "Clase padre de Row y Column, el método de diseño más potente en Flutter. Puede contener múltiples componentes y se puede usar con los componentes Spacer, Expended y Flexible para un diseño flexible.", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Dirección de disposición de Flex", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【direction】 : Dirección 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Alineación del eje principal de Flex", - "desc": [ - "【mainAxisAlignment】 : Alineación del eje principal 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Alineación del eje transversal de Flex", - "desc": [ - "【crossAxisAlignment】 : Alineación del eje transversal 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Orden de dirección vertical de Flex", - "desc": [ - "【verticalDirection】 : Orden de dirección vertical 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Orden de dirección horizontal de Flex", - "desc": [ - "【textDirection】 : Orden de dirección horizontal 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_fr_FR.json deleted file mode 100644 index 0a6f6f78f..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_fr_FR.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "Disposition flexible", - "info": "Classe parente de Row et Column, la méthode de disposition la plus puissante dans Flutter. Peut contenir plusieurs composants, peut être utilisé avec les composants Spacer, Expended, Flexible pour une disposition flexible", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Direction de disposition de Flex", - "desc": [ - "【children】 : Liste des composants 【List】", - "【direction】 : Direction 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Alignement de l'axe principal de Flex", - "desc": [ - "【mainAxisAlignment】 : Alignement de l'axe principal 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Alignement de l'axe transversal de Flex", - "desc": [ - "【crossAxisAlignment】 : Alignement de l'axe transversal 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Ordre de direction vertical de Flex", - "desc": [ - "【verticalDirection】 : Ordre de direction vertical 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Ordre de direction horizontale de Flex", - "desc": [ - "【textDirection】 : Ordre de direction horizontale 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_it_IT.json deleted file mode 100644 index a38b40337..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_it_IT.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "Layout Flessibile", - "info": "Classe genitore di Row e Column, il metodo di layout più potente in Flutter. Può contenere più componenti e può essere utilizzato con i componenti Spacer, Expended e Flexible per un layout flessibile", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Direzione di disposizione di Flex", - "desc": [ - "【children】 : Lista dei componenti 【List】", - "【direction】 : Direzione 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Allineamento dell'asse principale di Flex", - "desc": [ - "【mainAxisAlignment】 : Allineamento dell'asse principale 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Allineamento dell'asse trasversale di Flex", - "desc": [ - "【crossAxisAlignment】 : Allineamento dell'asse trasversale 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Ordine della direzione verticale di Flex", - "desc": [ - "【verticalDirection】 : Ordine della direzione verticale 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Ordine della direzione orizzontale di Flex", - "desc": [ - "【textDirection】 : Ordine della direzione orizzontale 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ja_JP.json deleted file mode 100644 index 37e83a2ac..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ja_JP.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "フレックスレイアウト", - "info": "RowとColumnの親クラス、Flutterで最も強力なレイアウト方法。複数のコンポーネントを収容でき、Spacer、Expended、Flexibleコンポーネントと連携して柔軟なレイアウトを実現できます", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Flexの配置方向", - "desc": [ - "【children】 : コンポーネントリスト 【List】", - "【direction】 : 方向 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Flex主軸の整列方法", - "desc": [ - "【mainAxisAlignment】 : 主軸整列 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Flex交差軸の整列方法", - "desc": [ - "【crossAxisAlignment】 : 交差軸整列 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Flex垂直方向の順序", - "desc": [ - "【verticalDirection】 : 垂直方向の順序 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Flex水平方向の順序", - "desc": [ - "【textDirection】 : 水平方向の順序 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ko_KR.json deleted file mode 100644 index a0c898881..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ko_KR.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "유연한 레이아웃", - "info": "Row와 Column의 상위 클래스, Flutter에서 가장 강력한 레이아웃 방식. 여러 컴포넌트를 수용할 수 있으며, Spacer, Expended, Flexible 컴포넌트와 함께 사용하여 유연한 레이아웃을 구성할 수 있습니다.", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Flex의 배치 방향", - "desc": [ - "【children】 : 컴포넌트 리스트 【List】", - "【direction】 : 방향 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Flex 주축 정렬 방식", - "desc": [ - "【mainAxisAlignment】 : 주축 정렬 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Flex 교차축 정렬 방식", - "desc": [ - "【crossAxisAlignment】 : 교차축 정렬 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Flex 수직 방향 순서", - "desc": [ - "【verticalDirection】 : 수직 방향 순서 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Flex 수평 방향 순서", - "desc": [ - "【textDirection】 : 수평 방향 순서 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_pt_PT.json deleted file mode 100644 index 022b95f4b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_pt_PT.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "Layout Flexível", - "info": "Classe pai de Row e Column, o método de layout mais poderoso no Flutter. Pode conter vários componentes e pode ser usado em conjunto com os componentes Spacer, Expended e Flexible para um layout flexível", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Direção de disposição do Flex", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【direction】 : Direção 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Alinhamento do eixo principal do Flex", - "desc": [ - "【mainAxisAlignment】 : Alinhamento do eixo principal 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Alinhamento do eixo cruzado do Flex", - "desc": [ - "【crossAxisAlignment】 : Alinhamento do eixo cruzado 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Ordem vertical do Flex", - "desc": [ - "【verticalDirection】 : Ordem vertical 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Ordem horizontal do Flex", - "desc": [ - "【textDirection】 : Ordem horizontal 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ru_RU.json deleted file mode 100644 index 4eeff29db..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ru_RU.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "Гибкий макет", - "info": "Родительский класс для Row и Column, самый мощный способ компоновки во Flutter. Может содержать несколько компонентов, может использоваться вместе с компонентами Spacer, Expended, Flexible для гибкой компоновки", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Направление расположения Flex", - "desc": [ - "【children】 : Список компонентов 【List】", - "【direction】 : Направление 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Выравнивание по главной оси Flex", - "desc": [ - "【mainAxisAlignment】 : Выравнивание по главной оси 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Выравнивание по поперечной оси Flex", - "desc": [ - "【crossAxisAlignment】 : Выравнивание по поперечной оси 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Порядок по вертикали Flex", - "desc": [ - "【verticalDirection】 : Порядок по вертикали 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Порядок по горизонтали Flex", - "desc": [ - "【textDirection】 : Порядок по горизонтали 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_zh-CN.json deleted file mode 100644 index f4dc48172..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_zh-CN.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "弹性布局", - "info": "Row和Column的父类,Flutter中最强大的布局方式。可容纳多个组件,可与Spacer、Expended、Flexible组件联用进行灵活布局", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Flex的排布方向", - "desc": [ - "【children】 : 组件列表 【List】", - "【direction】 : 方向 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Flex主轴对齐方式", - "desc": [ - "【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Flex交叉轴对齐方式", - "desc": [ - "【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Flex垂直方向顺序", - "desc": [ - "【verticalDirection】 : 垂直方向顺序 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Flex水平方向顺序", - "desc": [ - "【textDirection】 : 水平方向顺序 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_01.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_01.dart deleted file mode 100644 index 06c2d13f9..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_01.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class FlexNode1 extends StatelessWidget { - const FlexNode1({super.key}); - - static TextStyle textStyle = - const TextStyle(color: Colors.white, fontWeight: FontWeight.bold); - - Widget get blueBox => Container( - alignment: Alignment.center, - color: Colors.blue, - height: 20, - width: 30, - child: Text('1', style: textStyle), - ); - - Widget get redBox => Container( - alignment: Alignment.center, - color: Colors.red, - height: 30, - width: 40, - child: Text('2', style: textStyle), - ); - - Widget get greenBox => Container( - alignment: Alignment.center, - color: Colors.green, - height: 20, - width: 20, - child: Text('3', style: textStyle), - ); - - @override - Widget build(BuildContext context) { - return Wrap( - children: Axis.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 80, - color: Colors.grey.withAlpha(33), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget _buildItem(mode) => Flex( - direction: mode, - children: [ - blueBox, redBox, greenBox - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_02.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_02.dart deleted file mode 100644 index e5f0b0f0a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_02.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class FlexNode2 extends StatelessWidget { - const FlexNode2({super.key}); - - static TextStyle textStyle = - const TextStyle(color: Colors.white, fontWeight: FontWeight.bold); - - Widget get blueBox => Container( - alignment: Alignment.center, - color: Colors.blue, - height: 20, - width: 30, - child: Text('1', style: textStyle), - ); - - Widget get redBox => Container( - alignment: Alignment.center, - color: Colors.red, - height: 30, - width: 40, - child: Text('2', style: textStyle), - ); - - Widget get greenBox => Container( - alignment: Alignment.center, - color: Colors.green, - height: 20, - width: 20, - child: Text('3', style: textStyle), - ); - - @override - Widget build(BuildContext context) { - return Wrap( - runSpacing: 5, - children: MainAxisAlignment.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 80, - color: Colors.grey.withAlpha(33), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget _buildItem(mode) => Flex( - direction: Axis.horizontal, - mainAxisAlignment: mode, - children: [ - blueBox, redBox, greenBox - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_03.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_03.dart deleted file mode 100644 index 417772e26..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_03.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class FlexNode3 extends StatelessWidget { - const FlexNode3({super.key}); - - static TextStyle textStyle = - const TextStyle(color: Colors.white, fontWeight: FontWeight.bold); - - Widget get blueBox => Container( - alignment: Alignment.center, - color: Colors.blue, - height: 20, - width: 30, - child: Text('1', style: textStyle), - ); - - Widget get redBox => Container( - alignment: Alignment.center, - color: Colors.red, - height: 30, - width: 40, - child: Text('2', style: textStyle), - ); - - Widget get greenBox => Container( - alignment: Alignment.center, - color: Colors.green, - height: 20, - width: 20, - child: Text('3', style: textStyle), - ); - - - @override - Widget build(BuildContext context) { - return Wrap( - runSpacing: 5, - children: CrossAxisAlignment.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 80, - color: Colors.grey.withAlpha(33), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget _buildItem(mode) => Flex( - direction: Axis.horizontal, - crossAxisAlignment: mode, - textBaseline: TextBaseline.alphabetic, - children: [ - blueBox, redBox, greenBox - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_04.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_04.dart deleted file mode 100644 index 154f280f2..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_04.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class FlexNode4 extends StatelessWidget { - const FlexNode4({super.key}); - - static TextStyle textStyle = - const TextStyle(color: Colors.white, fontWeight: FontWeight.bold); - - Widget get blueBox => Container( - alignment: Alignment.center, - color: Colors.blue, - height: 20, - width: 30, - child: Text('1', style: textStyle), - ); - - Widget get redBox => Container( - alignment: Alignment.center, - color: Colors.red, - height: 30, - width: 40, - child: Text('2', style: textStyle), - ); - - Widget get greenBox => Container( - alignment: Alignment.center, - color: Colors.green, - height: 20, - width: 20, - child: Text('3', style: textStyle), - ); - - @override - Widget build(BuildContext context) { - return Wrap( - runSpacing: 5, - children: VerticalDirection.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 80, - color: Colors.grey.withAlpha(33), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget _buildItem(mode) => Flex( - direction: Axis.vertical, - verticalDirection: mode, - children: [blueBox, redBox, greenBox], - ); -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_05.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_05.dart deleted file mode 100644 index 39e35fc92..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_05.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class FlexNode5 extends StatelessWidget { - const FlexNode5({super.key}); - - static TextStyle textStyle = - const TextStyle(color: Colors.white, fontWeight: FontWeight.bold); - - Widget get blueBox => Container( - alignment: Alignment.center, - color: Colors.blue, - height: 20, - width: 30, - child: Text('1', style: textStyle), - ); - - Widget get redBox => Container( - alignment: Alignment.center, - color: Colors.red, - height: 30, - width: 40, - child: Text('2', style: textStyle), - ); - - Widget get greenBox => Container( - alignment: Alignment.center, - color: Colors.green, - height: 20, - width: 20, - child: Text('3', style: textStyle), - ); - - @override - Widget build(BuildContext context) { - return Wrap( - runSpacing: 5, - children: TextDirection.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 80, - color: Colors.grey.withAlpha(33), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget _buildItem(mode) => Flex( - direction: Axis.horizontal, - textDirection: mode, - children: [blueBox, redBox, greenBox], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_de_DE.json deleted file mode 100644 index 9b39ec33d..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "Fließendes Layout", - "info": "Kann mehrere Komponenten aufnehmen, erfordert die Festlegung eines Delegaten für die Anordnung, ermöglicht eine hochgradige Anpassung der Komponentenanordnung und erreicht Effekte, die mit normalen Layouts nicht möglich sind. Der König der Layouts, zu Recht.", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Runde Anordnung mit Flow", - "desc": [ - "【children】 : Komponentenliste 【List】", - "【delegate】 : Delegat 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Runde Anordnung mit Flow und Animation", - "desc": [ - "Erzielt Effekte durch die Änderung der Position umliegender Komponenten mittels Animation" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_en_US.json deleted file mode 100644 index 890475c63..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "Flow Layout", - "info": "Can accommodate multiple components, requires custom arrangement agents, allows high customization of component arrangement, achieving effects that ordinary layouts cannot. The king of layouts, well-deserved.", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Flow Circular Arrangement", - "desc": [ - "【children】: Component list 【List】", - "【delegate】: Agent 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Flow Circular with Animation", - "desc": [ - "Achieve effects by changing the position of surrounding components through animation" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_es_ES.json deleted file mode 100644 index aa0a65f42..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "Diseño de flujo", - "info": "Puede contener múltiples componentes, requiere que especifiques un delegado para la disposición, permite una alta personalización en la distribución de los componentes, logrando efectos que los diseños comunes no pueden alcanzar. El rey de los diseños, sin duda.", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Disposición circular de Flow", - "desc": [ - "【children】: Lista de componentes 【List】", - "【delegate】: Delegado 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Combinación de Flow circular con animación", - "desc": [ - "Logra el efecto cambiando la posición de los componentes circundantes a través de la animación" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_fr_FR.json deleted file mode 100644 index c7bbb2085..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "Disposition fluide", - "info": "Peut contenir plusieurs composants, nécessite de définir un délégué pour l'agencement, permet une personnalisation élevée de l'agencement des composants, atteignant des effets impossibles avec des dispositions ordinaires. Le roi des dispositions, sans aucun doute.", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Disposition circulaire Flow", - "desc": [ - "【children】 : Liste des composants 【List】", - "【delegate】 : Délégué 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Combinaison de Flow circulaire et animation", - "desc": [ - "Modifier la position des composants environnants via une animation pour obtenir l'effet" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_it_IT.json deleted file mode 100644 index 1bb53fc3a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "Layout di Flusso", - "info": "Può contenere più componenti, richiede la definizione di un delegato per la disposizione, permette un alto livello di personalizzazione della disposizione dei componenti, raggiungendo effetti che i layout comuni non possono ottenere. Il re dei layout, a pieno titolo.", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Disposizione Circolare di Flow", - "desc": [ - "【children】 : Lista dei componenti 【List】", - "【delegate】 : Delegato 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Combinazione di Flow Circolare e Animazione", - "desc": [ - "Modifica la posizione dei componenti circostanti attraverso l'animazione per ottenere l'effetto desiderato" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ja_JP.json deleted file mode 100644 index 37f10f4cb..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "フローレイアウト", - "info": "複数のコンポーネントを収容でき、自身で配置のプロキシを指定する必要があります。コンポーネントの配置を高度にカスタマイズでき、通常のレイアウトでは実現できない効果を実現します。レイアウトの王者、その名にふさわしい。", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Flow円形配置", - "desc": [ - "【children】 : コンポーネントリスト 【List】", - "【delegate】 : プロキシ 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Flow円形とアニメーションの組み合わせ", - "desc": [ - "アニメーションを使用して周囲のコンポーネントの位置を変更することで効果を実現" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ko_KR.json deleted file mode 100644 index ae91c33a8..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "플로우 레이아웃", - "info": "여러 컴포넌트를 수용할 수 있으며, 배치를 위한 대리자를 직접 지정해야 합니다. 컴포넌트 배치를 고도로 커스터마이징할 수 있어 일반 레이아웃으로는 달성할 수 없는 효과를 구현할 수 있습니다. 레이아웃의 왕, 그 이름에 걸맞습니다.", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Flow 원형 배치", - "desc": [ - "【children】 : 컴포넌트 리스트 【List】", - "【delegate】 : 대리자 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Flow 원형과 애니메이션 결합", - "desc": [ - "애니메이션을 통해 주변 컴포넌트의 위치를 변경하여 효과를 구현" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_pt_PT.json deleted file mode 100644 index c7149affd..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "Layout de Fluxo", - "info": "Pode acomodar vários componentes, é necessário definir um agente de disposição, permitindo uma alta personalização da disposição dos componentes, alcançando efeitos que layouts comuns não conseguem. O rei dos layouts, sem dúvida.", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Disposição Circular do Flow", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【delegate】 : Agente 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Combinação de Flow Circular com Animação", - "desc": [ - "Alterar a posição dos componentes ao redor através de animação para alcançar o efeito" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ru_RU.json deleted file mode 100644 index b280e78f1..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "Макет потока", - "info": "Может вмещать несколько компонентов, требует самостоятельного определения прокси для размещения, позволяет высоко настраивать расположение компонентов, достигая эффектов, недоступных для обычных макетов. Безусловный король макетов.", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Круговое расположение Flow", - "desc": [ - "【children】 : Список компонентов 【List】", - "【delegate】 : Прокси 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Круговое расположение Flow с анимацией", - "desc": [ - "Достижение эффекта путем изменения положения окружающих компонентов с помощью анимации" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_zh-CN.json deleted file mode 100644 index d448bc13d..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "流动布局", - "info": "可容纳多个组件, 需要自己制定排布的代理,可以高强度自定义组件的排布,实现普通布局无法达到的效果。布局王者,当之无愧。", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Flow圆形排布", - "desc": [ - "【children】 : 组件列表 【List】", - "【delegate】 : 代理 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Flow圆形与动画结合", - "desc": [ - "通过动画来更改周围组件的位置实现效果" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/node_01.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/node_01.dart deleted file mode 100644 index dca7b68eb..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/node_01.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class FlowNode1 extends StatelessWidget { - const FlowNode1({super.key}); - - List get data => List.generate( - 16, - (index) => index.isEven - ? "assets/images/icon_head.webp" - : "assets/images/wy_300x200.webp"); - - @override - Widget build(BuildContext context) { - return Container( - width: 300, - height: 300, - alignment: Alignment.center, - child: Flow( - delegate: _CircleFlowDelegate(), - children: data - .map((e) => CircleAvatar(backgroundImage: AssetImage(e))) - .toList(), - ), - ); - } -} - -class _CircleFlowDelegate extends FlowDelegate { - - @override //绘制孩子的方法 - void paintChildren(FlowPaintingContext context) { - final double radius = context.size.shortestSide / 2; - final int count = context.childCount; - final double perRad = 2 * pi / count; - for (int i = 0; i < count; i++) { - final Size size = context.getChildSize(i) ?? Size.zero; - final double offsetX = - (radius - size.width / 2) * cos(i * perRad) + radius; - final double offsetY = - (radius - size.height / 2) * sin(i * perRad) + radius; - context.paintChild(i, - transform: Matrix4.translationValues( - offsetX - size.width / 2, offsetY - size.height / 2, 0.0)); - } - } - - @override - bool shouldRepaint(FlowDelegate oldDelegate) => false; -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/node_02.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/node_02.dart deleted file mode 100644 index 4dc644f9b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/node_02.dart +++ /dev/null @@ -1,100 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class FlowNode02 extends StatefulWidget { - const FlowNode02({ - super.key, - }); - - @override - State createState() => _FlowNode02State(); -} - -class _FlowNode02State extends State - with SingleTickerProviderStateMixin { - late AnimationController _controller; - double _rad = 0.0; - bool _closed = true; - - List get data => List.generate( - 16, - (index) => index.isEven - ? "assets/images/icon_head.webp" - : "assets/images/wy_300x200.webp"); - - @override - void initState() { - _controller = AnimationController( - duration: const Duration(milliseconds: 1000), - vsync: this, - ) - ..addListener(() => setState( - () => _rad = (_closed ? (_controller.value) : 1 - _controller.value))) - ..addStatusListener((status) { - if (status == AnimationStatus.completed) { - _closed = !_closed; - } - }); - super.initState(); - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Flow( - delegate: _BurstFlowDelegate(_rad), - children: [ - ...data.map((e) => CircleAvatar(backgroundImage: AssetImage(e))), - InkWell( - onTap: () { - _controller.reset(); - _controller.forward(); - }, - child: const CircleAvatar( - backgroundImage: AssetImage('assets/images/icon_head.webp'), - )) - ], - ); - } -} - -class _BurstFlowDelegate extends FlowDelegate { - final double rad; - - _BurstFlowDelegate(this.rad); - - @override //绘制孩子的方法 - void paintChildren(FlowPaintingContext context) { - double radius = context.size.shortestSide / 2; - final int count = context.childCount - 1; - final double perRad = 2 * pi / count; - for (int i = 0; i < count; i++) { - Size size = context.getChildSize(i) ?? Size.zero; - final double offsetX = - rad * (radius - size.width / 2) * cos(i * perRad) + radius; - final double offsetY = - rad * (radius - size.height / 2) * sin(i * perRad) + radius; - context.paintChild(i, - transform: Matrix4.translationValues( - offsetX - size.width / 2, offsetY - size.height / 2, 0.0)); - } - - Size size = context.getChildSize(context.childCount - 1) ?? Size.zero; - - context.paintChild(context.childCount - 1, - transform: Matrix4.translationValues( - radius - size.width / 2, radius - size.height / 2, 0.0)); - } - - @override - bool shouldRepaint(_BurstFlowDelegate oldDelegate) => oldDelegate.rad != rad; -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_de_DE.json deleted file mode 100644 index f4efeef84..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "Indexierter Stapel", - "info": "Unterklasse der Stack-Komponente, kann mehrere Komponenten stapeln und durch den Index die anzuzeigende Komponente angeben, die anderen werden ausgeblendet.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von IndexedStack", - "desc": [ - "【children】 : Liste der Unterkomponenten 【Lis】", - "【alignment】 : Ausrichtung 【AlignmentGeometry】", - "【index】 : Aktuell angezeigte Komponente 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_en_US.json deleted file mode 100644 index e25fb5f7c..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "Indexed Stack", - "info": "A subclass of the Stack component that can stack multiple components and specify the index of the component to be displayed, while the rest are hidden.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of IndexedStack", - "desc": [ - "【children】: List of child components 【List】", - "【alignment】: Alignment 【AlignmentGeometry】", - "【index】: Currently displayed component 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_es_ES.json deleted file mode 100644 index 48b4714a5..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "Pila indexada", - "info": "Subclase del componente Stack, puede apilar múltiples componentes y especificar el índice del componente que se mostrará a través del índice, el resto se ocultará.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de IndexedStack", - "desc": [ - "【children】 : Lista de componentes hijos 【Lis】", - "【alignment】 : Alineación 【AlignmentGeometry】", - "【index】 : Componente actualmente visible 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_fr_FR.json deleted file mode 100644 index 8eb40e30a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "Empilement indexé", - "info": "Sous-classe du composant Stack, permet d'empiler plusieurs composants et de spécifier l'index du composant à afficher via l'index, les autres seront masqués.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'IndexedStack", - "desc": [ - "【children】 : Liste des composants enfants 【Lis】", - "【alignment】 : Alignement 【AlignmentGeometry】", - "【index】 : Composant actuellement affiché 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_it_IT.json deleted file mode 100644 index b153327d5..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "Pila indicizzata", - "info": "Sottoclasse del componente Stack, può impilare più componenti e specificare l'indice del componente da visualizzare tramite index, gli altri verranno nascosti.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di IndexedStack", - "desc": [ - "【children】 : Lista dei componenti figli 【Lis】", - "【alignment】 : Allineamento 【AlignmentGeometry】", - "【index】 : Componente attualmente visualizzato 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ja_JP.json deleted file mode 100644 index 74da171b2..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "インデックススタック", - "info": "Stackコンポーネントのサブクラスで、複数のコンポーネントをスタックし、indexを指定して表示するコンポーネントを指定できます。それ以外のコンポーネントは非表示になります。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IndexedStackの基本使用", - "desc": [ - "【children】 : 子コンポーネントリスト 【Lis】", - "【alignment】 : 配置方法 【AlignmentGeometry】", - "【index】 : 現在表示されているコンポーネント 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ko_KR.json deleted file mode 100644 index 6352262c7..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "인덱스 스택", - "info": "Stack 컴포넌트의 하위 클래스로, 여러 컴포넌트를 쌓아 놓고 index를 통해 표시할 컴포넌트의 인덱스를 지정할 수 있으며, 나머지는 숨겨집니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IndexedStack 기본 사용", - "desc": [ - "【children】 : 자식 컴포넌트 리스트 【Lis】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】", - "【index】 : 현재 표시되는 컴포넌트 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_pt_PT.json deleted file mode 100644 index f785b891d..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "Pilha Indexada", - "info": "Subclasse do componente Stack, pode empilhar vários componentes e especificar o índice do componente a ser exibido através do index, os restantes serão ocultados.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do IndexedStack", - "desc": [ - "【children】 : Lista de componentes filhos 【Lis】", - "【alignment】 : Alinhamento 【AlignmentGeometry】", - "【index】 : Componente atualmente exibido 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ru_RU.json deleted file mode 100644 index bb8625ec2..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "Индексированный стек", - "info": "Подкласс компонента Stack, который позволяет складывать несколько компонентов и указывать индекс отображаемого компонента через index, остальные будут скрыты.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование IndexedStack", - "desc": [ - "【children】 : Список дочерних компонентов 【Lis】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】", - "【index】 : Текущий отображаемый компонент 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_zh-CN.json deleted file mode 100644 index c3d9fe37e..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "索引堆叠", - "info": "Stack组件的子类,可以堆叠多个组件,并通过index来指定展示的组件索引,其余的会被隐藏。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IndexedStack基本使用", - "desc": [ - "【children】 : 子组件列表 【Lis】", - "【alignment】 : 对齐方式 【AlignmentGeometry】", - "【index】 : 当前显示组件 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/node1_base.dart deleted file mode 100644 index aa33f43ca..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/node1_base.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class IndexedStackNode01 extends StatefulWidget { - const IndexedStackNode01({Key? key}) : super(key: key); - - @override - State createState() => _IndexedStackNode01State(); -} - -class _IndexedStackNode01State extends State { - int _index = 1; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSwitch(), - Container( - width: 200, - height: 100, - color: Colors.grey.withAlpha(33), - child: IndexedStack( - index: _index, - children: [ - Container( - color: Colors.red, - width: 80, - height: 80 - ), - Positioned( - bottom: 10, - right: 10, - child: Container( - color: Colors.blue, - width: 80, - height: 80, - ), - ) - ], - ), - ), - ], - ); - } - - Widget _buildSwitch() => Switch( - value: _index == 0, - onChanged: (v) => setState(() => _index = v ? 0 : 1), - ); -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_de_DE.json deleted file mode 100644 index 17a86062e..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "Listenkörper", - "info": "Ordnet mehrere Unterkomponenten entlang einer Achse an, hat wenige einstellbare Attribute und wird selten verwendet, stattdessen wird meist ListView bevorzugt.", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ListView", - "desc": [ - "【mainAxis】: Hauptachsenrichtung 【Axis】", - "【reverse】: Umgekehrt oder nicht 【bool】", - "【children】: Sammlung von Unterkomponenten 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_en_US.json deleted file mode 100644 index 33f49ae5a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "List Body", - "info": "Arranges several child components along the axis, with few properties that can be set. It is rarely used, and ListView is generally chosen instead.", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ListView", - "desc": [ - "【mainAxis】: Main axis direction 【Axis】", - "【reverse】: Whether to reverse 【bool】", - "【children】: Child component collection 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_es_ES.json deleted file mode 100644 index 11dc24b02..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "Cuerpo de la lista", - "info": "Organiza varios subcomponentes a lo largo de un eje, con pocas propiedades configurables, generalmente se usa poco y se prefiere usar ListView.", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ListView", - "desc": [ - "【mainAxis】 : Dirección del eje principal 【Axis】", - "【reverse】: Si es inverso 【bool】", - "【children】: Conjunto de subcomponentes 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_fr_FR.json deleted file mode 100644 index 8627f7319..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "Corps de liste", - "info": "Dispose plusieurs sous-composants selon un axe, avec peu de propriétés configurables, rarement utilisé, on préfère généralement utiliser ListView.", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ListView", - "desc": [ - "【mainAxis】 : Direction de l'axe principal 【Axis】", - "【reverse】: Inverser ou non 【bool】", - "【children】: Ensemble de sous-composants 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_it_IT.json deleted file mode 100644 index 0034881b6..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "Corpo della lista", - "info": "Dispone diversi componenti figli lungo un asse, con poche proprietà configurabili. Viene utilizzato raramente, preferendo invece l'uso di ListView.", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ListView", - "desc": [ - "【mainAxis】 : Direzione dell'asse principale 【Axis】", - "【reverse】: Inversione 【bool】", - "【children】: Insieme di componenti figli 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ja_JP.json deleted file mode 100644 index 988ec58bc..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "リストボディ", - "info": "複数の子コンポーネントを軸方向に並べ替えます。設定可能な属性は少なく、通常はあまり使用されず、代わりにListViewが選択されます。", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListViewの基本的な使用", - "desc": [ - "【mainAxis】 : 主軸方向 【Axis】", - "【reverse】: 逆方向かどうか 【bool】", - "【children】: 子コンポーネント集 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ko_KR.json deleted file mode 100644 index 53f44f103..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "리스트 바디", - "info": "여러 하위 컴포넌트를 축 방향으로 배열하며, 설정 가능한 속성이 적어 일반적으로 잘 사용되지 않고, 대신 ListView를 선택하여 사용합니다.", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListView의 기본 사용법", - "desc": [ - "【mainAxis】 : 주축 방향 【Axis】", - "【reverse】: 역방향 여부 【bool】", - "【children】: 하위 컴포넌트 집합 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_pt_PT.json deleted file mode 100644 index 0d9afb7f9..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "Corpo da Lista", - "info": "Organiza vários subcomponentes ao longo de um eixo, com poucas propriedades configuráveis, geralmente pouco utilizado, optando-se por usar ListView.", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ListView", - "desc": [ - "【mainAxis】 : Direção do eixo principal 【Axis】", - "【reverse】: Se é invertido 【bool】", - "【children】: Conjunto de subcomponentes 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ru_RU.json deleted file mode 100644 index 527c1623a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "Тело списка", - "info": "Располагает несколько дочерних компонентов по оси, имеет мало настраиваемых свойств, обычно редко используется, вместо этого выбирают ListView.", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ListView", - "desc": [ - "【mainAxis】 : Направление основной оси 【Axis】", - "【reverse】: Обратное направление 【bool】", - "【children】: Набор дочерних компонентов 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_zh-CN.json deleted file mode 100644 index f870d8fea..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "列表体", - "info": "将若干子组件按照轴向进行排列,可设置的属性很少,一般很少使用,而选择使用ListView。", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListView的基本使用", - "desc": [ - "【mainAxis】 : 主轴方向 【Axis】", - "【reverse】: 是否反向 【bool】", - "【children】: 子组件集 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/node1_base.dart deleted file mode 100644 index 1529b12a7..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/node1_base.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/8/2 -/// contact me by email 1981462002@qq.com - - -class ListBodyDemo extends StatelessWidget { - const ListBodyDemo({Key? key}) : super(key: key); - - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: ListView( - children: [ - ListBody( - mainAxis: Axis.vertical, - reverse: false, - children: [ - Container(color: Colors.red, height: 50.0,), - Container(color: Colors.orange, height: 50.0,), - Container(color: Colors.yellow, height: 50.0,), - ], - ), - Container(color: Colors.green, height: 80.0,), - ListBody( - mainAxis: Axis.vertical, - reverse: false, - children: [ - Container(color: Colors.blue, height: 50.0,), - Container(color: Colors.indigo, height: 50.0,), - Container(color: Colors.purple, height: 50.0,), - ], - ) - ] - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_de_DE.json deleted file mode 100644 index 1ac519046..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "Verschachtelter Scroll-Viewport", - "info": "Ein in NestedScrollView verwendeter Viewport, der ein SliverOverlapAbsorberHandle enthält und es benachrichtigt, wenn der Viewport sein Layout neu berechnen muss. Zum Beispiel, wenn es gescrollt wird.", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in NestedScrollViewViewport", - "desc": [ - "【offset】 : *Versatz 【ViewportOffset】", - "【handle】 : *Handler 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : Achsenrichtung 【AxisDirection】", - "【crossAxisDirection】 : Querachsenrichtung 【AxisDirection】", - "【slivers】 : Unterkomponenten 【List】", - "【clipBehavior】 : Abschneideverhalten 【Clip】", - "【anchor】 : Ankerpunkt 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_en_US.json deleted file mode 100644 index 6ee55a667..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "Nested Scroll Viewport", - "info": "A viewport used in NestedScrollView, which holds a SliverOverlapAbsorberHandle and notifies it when the viewport needs to recalculate its layout. For example, when scrolling it.", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to NestedScrollViewViewport", - "desc": [ - "【offset】 : *Offset 【ViewportOffset】", - "【handle】 : *Handle 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : Axis Direction 【AxisDirection】", - "【crossAxisDirection】 : Cross Axis Direction 【AxisDirection】", - "【slivers】 : Child Components 【List】", - "【clipBehavior】 : Clip Behavior 【Clip】", - "【anchor】 : Anchor 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_es_ES.json deleted file mode 100644 index 139e1c8ca..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "Ventana de desplazamiento anidado", - "info": "Ventana utilizada en NestedScrollView que contiene un SliverOverlapAbsorberHandle y lo notifica cuando la ventana necesita recalcular su diseño. Por ejemplo, cuando se desplaza.", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a NestedScrollViewViewport", - "desc": [ - "【offset】 : *desplazamiento 【ViewportOffset】", - "【handle】 : *manejador 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : dirección del eje 【AxisDirection】", - "【crossAxisDirection】 : dirección del eje cruzado 【AxisDirection】", - "【slivers】 : componentes hijos 【List】", - "【clipBehavior】 : comportamiento de recorte 【Clip】", - "【anchor】 : punto de anclaje 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_fr_FR.json deleted file mode 100644 index 89464bb17..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "Vue de défilement imbriquée", - "info": "Une vue utilisée dans NestedScrollView, qui détient un SliverOverlapAbsorberHandle et le notifie lorsque la vue a besoin de recalculer sa disposition. Par exemple, lors du défilement.", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à NestedScrollViewViewport", - "desc": [ - "【offset】 : *décalage 【ViewportOffset】", - "【handle】 : *gestionnaire 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : direction de l'axe 【AxisDirection】", - "【crossAxisDirection】 : direction de l'axe croisé 【AxisDirection】", - "【slivers】 : composants enfants 【List】", - "【clipBehavior】 : comportement de découpage 【Clip】", - "【anchor】 : point d'ancrage 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_it_IT.json deleted file mode 100644 index 8aebc1641..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "Vista scorrevole annidata", - "info": "Vista utilizzata in NestedScrollView, che detiene SliverOverlapAbsorberHandle e lo notifica quando la vista necessita di ricalcolare il layout. Ad esempio, quando viene scorsa.", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a NestedScrollViewViewport", - "desc": [ - "【offset】 : *offset 【ViewportOffset】", - "【handle】 : *gestore 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : direzione dell'asse 【AxisDirection】", - "【crossAxisDirection】 : direzione dell'asse incrociato 【AxisDirection】", - "【slivers】 : componenti figli 【List】", - "【clipBehavior】 : comportamento di ritaglio 【Clip】", - "【anchor】 : punto di ancoraggio 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ja_JP.json deleted file mode 100644 index 3d54dbd1c..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "ネストされたスクロールビューポート", - "info": "NestedScrollView で使用されるビューポートで、このビューポートは SliverOverlapAbsorberHandle を保持し、ビューポートがレイアウトを再計算する必要があるときに通知します。例えば、スクロールするときなどです。", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollViewViewport の紹介", - "desc": [ - "【offset】 : *オフセット 【ViewportOffset】", - "【handle】 : *ハンドル 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : 軸方向 【AxisDirection】", - "【crossAxisDirection】 : 交差軸方向 【AxisDirection】", - "【slivers】 : 子コンポーネント 【List】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【anchor】 : アンカー 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ko_KR.json deleted file mode 100644 index 832a8215b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "중첩 스크롤 뷰포트", - "info": "NestedScrollView에서 사용되는 뷰포트로, 이 뷰포트는 SliverOverlapAbsorberHandle을 보유하고 있으며, 뷰포트가 레이아웃을 다시 계산해야 할 때 이를 알립니다. 예를 들어, 스크롤할 때.", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollViewViewport 소개", - "desc": [ - "【offset】 : *오프셋 【ViewportOffset】", - "【handle】 : *핸들러 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : 축 방향 【AxisDirection】", - "【crossAxisDirection】 : 교차 축 방향 【AxisDirection】", - "【slivers】 : 자식 위젯 【List】", - "【clipBehavior】 : 클립 동작 【Clip】", - "【anchor】 : 앵커 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_pt_PT.json deleted file mode 100644 index 972d73045..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "Porto de Rolagem Aninhado", - "info": "Porto utilizado no NestedScrollView, que detém o SliverOverlapAbsorberHandle e notifica-o quando o porto precisa recalcular o layout. Por exemplo, quando é rolado.", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao NestedScrollViewViewport", - "desc": [ - "【offset】 : *deslocamento 【ViewportOffset】", - "【handle】 : *manipulador 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : direção do eixo 【AxisDirection】", - "【crossAxisDirection】 : direção do eixo cruzado 【AxisDirection】", - "【slivers】 : componentes filhos 【List】", - "【clipBehavior】 : comportamento de corte 【Clip】", - "【anchor】 : âncora 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ru_RU.json deleted file mode 100644 index c3d2ff600..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "Вложенный скроллируемый вид", - "info": "Вид, используемый в NestedScrollView, который содержит SliverOverlapAbsorberHandle и уведомляет его, когда вид требует пересчета макета. Например, при его прокрутке.", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Описание NestedScrollViewViewport", - "desc": [ - "【offset】 : *смещение 【ViewportOffset】", - "【handle】 : *обработчик 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : направление оси 【AxisDirection】", - "【crossAxisDirection】 : направление поперечной оси 【AxisDirection】", - "【slivers】 : дочерние компоненты 【List】", - "【clipBehavior】 : поведение обрезки 【Clip】", - "【anchor】 : якорь 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_zh-CN.json deleted file mode 100644 index ef14cc74a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "嵌套滑动视口", - "info": "在 NestedScrollView 中使用的视口,该视口持有 SliverOverlapAbsorberHandle,会在视口需要重新计算布局时通知它。例如,当滚动它时。", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollViewViewport 介绍", - "desc": [ - "【offset】 : *偏移 【ViewportOffset】", - "【handle】 : *处理器 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : 轴向 【AxisDirection】", - "【crossAxisDirection】 : 交叉轴向 【AxisDirection】", - "【slivers】 : 子组件 【List】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【anchor】 : 锚点 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/node1_base.dart deleted file mode 100644 index 5da8f860d..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/node1_base.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class NestedScrollViewViewportDemo extends StatelessWidget { - const NestedScrollViewViewportDemo({Key? key}) : super(key: key); - - final String info = - 'NestedScrollViewViewport 在源码中只有一处使用:' - '_NestedScrollViewCustomScrollView 继承自 CustomScrollView,复写了 buildViewport 方法,返回 NestedScrollViewViewport 。' - '而 NestedScrollView 构建时使用了 _NestedScrollViewCustomScrollView,也就是 NestedScrollView 的视口依赖于 NestedScrollViewViewport。' - 'NestedScrollViewViewport 的特点是持有 SliverOverlapAbsorberHandle 类对象 handle,源码中该 handle 在 NestedScrollViewState 中初始化。' - '可通过上下文获取,用于 SliverOverlapAbsorber/SliverOverlapInjector 组件,使用详见相关组件。'; - - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_de_DE.json deleted file mode 100644 index 2152ab6f9..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "RichText", - "info": "Eine RichText-Komponente, die verschiedene Textstile oder verschiedene Komponenten aufnehmen kann und weit verbreitet ist.", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RichText", - "desc": [ - "【text】: Text 【TextSpan】", - " Andere Eigenschaften sind identisch mit Text, siehe dazu." - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText enthält andere Komponenten", - "desc": [ - "Verwenden Sie WidgetSpan, um normale Komponenten zu tragen, als Inhalt von RichText" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_en_US.json deleted file mode 100644 index d8ed9ff92..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "Rich Text", - "info": "A rich text component that can accommodate various text styles or various components, widely used.", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RichText", - "desc": [ - "【text】: text 【TextSpan】", - " Other properties are the same as Text, see it for details." - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText Contains Other Components", - "desc": [ - "Use WidgetSpan to carry ordinary components as the content of RichText" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_es_ES.json deleted file mode 100644 index c0d3ccfd0..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "Texto enriquecido", - "info": "Componente de texto enriquecido que puede contener varios estilos de texto o varios componentes, ampliamente utilizado.", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RichText", - "desc": [ - "【text】 : texto 【TextSpan】", - " Otras propiedades son las mismas que Text, consulte para más detalles." - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText contiene otros componentes", - "desc": [ - "Usa WidgetSpan para contener componentes comunes como contenido de RichText" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_fr_FR.json deleted file mode 100644 index 7af0eae17..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "Texte enrichi", - "info": "Un composant de texte enrichi qui peut contenir divers styles de texte ou divers composants, largement utilisé.", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RichText", - "desc": [ - "【text】 : texte 【TextSpan】", - " Les autres propriétés sont les mêmes que Text, voir pour plus de détails." - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText contenant d'autres composants", - "desc": [ - "Utilisez WidgetSpan pour contenir des composants ordinaires, en tant que contenu de RichText" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_it_IT.json deleted file mode 100644 index ffcd03457..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "Testo Arricchito", - "info": "Un componente di testo arricchito che può contenere vari stili di testo o vari componenti, ampiamente utilizzato.", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di RichText", - "desc": [ - "【text】: testo 【TextSpan】", - " Altre proprietà sono le stesse di Text, vedi dettagli." - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText Contiene Altri Componenti", - "desc": [ - "Utilizza WidgetSpan per contenere componenti comuni, come contenuto di RichText" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ja_JP.json deleted file mode 100644 index 813973ee1..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "リッチテキスト", - "info": "さまざまなテキストスタイルやコンポーネントを包含できるリッチテキストコンポーネントで、広く使用されています。", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RichTextの基本的な使用", - "desc": [ - "【text】 : テキスト 【TextSpan】", - " 他のプロパティはTextと同じです。詳細はそちらを参照してください。" - ] - }, - { - "file": "node2_widget.dart", - "name": "RichTextに他のコンポーネントを含める", - "desc": [ - "WidgetSpanを使用して通常のコンポーネントをリッチテキストの内容として含める" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ko_KR.json deleted file mode 100644 index 834b5ad3e..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "리치 텍스트", - "info": "다양한 텍스트 스타일이나 다양한 컴포넌트를 포함할 수 있는 리치 텍스트 컴포넌트로, 널리 사용됩니다.", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RichText 기본 사용", - "desc": [ - "【text】 : 텍스트 【TextSpan】", - " 다른 속성은 Text와 동일하며, 자세한 내용은 해당 항목을 참조하세요." - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText에 다른 컴포넌트 포함", - "desc": [ - "WidgetSpan을 사용하여 일반 컴포넌트를 포함하고, 이를 RichText의 내용으로 사용합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_pt_PT.json deleted file mode 100644 index 018135f9d..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "Texto Rico", - "info": "Um componente de texto rico que pode acomodar vários estilos de texto ou vários componentes, amplamente utilizado.", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RichText", - "desc": [ - "【text】 : texto 【TextSpan】", - " Outras propriedades são as mesmas que Text, consulte para mais detalhes." - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText Contendo Outros Componentes", - "desc": [ - "Use WidgetSpan para suportar componentes comuns como conteúdo do RichText" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ru_RU.json deleted file mode 100644 index f9f078362..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "Форматированный текст", - "info": "Компонент форматированного текста, который может содержать различные стили текста или компоненты, широко применяется.", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RichText", - "desc": [ - "【text】 : текст 【TextSpan】", - " Другие свойства такие же, как у Text, подробнее см. там." - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText содержит другие компоненты", - "desc": [ - "Используйте WidgetSpan для размещения обычных компонентов в качестве содержимого RichText" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_zh-CN.json deleted file mode 100644 index 6f1447ba2..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "富文本", - "info": "可以容纳多种文字样式或各种组件的富文本组件,应用较为广泛。", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RichText基本使用", - "desc": [ - "【text】 : 文字 【TextSpan】", - " 其他属性与Text相同,详见之。" - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText包含其他组件", - "desc": [ - "使用WidgetSpan来承载普通组件,作为RichText的内容" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/node1_base.dart deleted file mode 100644 index 7e24b821d..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/node1_base.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; - -import '../../utils/color_utils.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class CustomRichText extends StatelessWidget { - const CustomRichText({Key? key}) : super(key: key); - - final str = " 发光强度简称光强,国际单位是(坎德拉)简写cd。" - "1cd是指光源在指定方向的单位立体角内发出的光通量。" - "光源辐射是均匀时,则光强为I=F/Ω,Ω为立体角,单位为球面度(sr),F为光通量," - "单位是流明,对于点光源由I=F/4π 。光亮度是表示发光面明亮程度的," - "指发光表面在指定方向的发光强度与垂直且指定方向的发光面的面积之比," - "单位是坎德拉/平方米。对于一个漫散射面,尽管各个方向的光强和光通量不同," - "但各个方向的亮度都是相等的。电视机的荧光屏就是近似于这样的漫散射面," - "所以从各个方向上观看图像,都有相同的亮度感。"; - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.only( - left: 10.0, - right: 10, - ), - child: RichText( - text: TextSpan( - children: str - .split("") - .map((str) => TextSpan( - text: str, - style: TextStyle( - fontSize: 14, color: ColorUtils.randomColor()))) - .toList())), - ); - } -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/node2_widget.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/node2_widget.dart deleted file mode 100644 index dc9c93200..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/node2_widget.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class RichTextWithWidget extends StatelessWidget { - const RichTextWithWidget({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return RichText( - text: TextSpan( - text: 'hello ', - style: const TextStyle(color: Colors.black, fontSize: 18), - children: [ - WidgetSpan( - child: Image.asset( - 'assets/images/icon_head.webp', - width: 30, - ), - alignment: PlaceholderAlignment.baseline, - baseline: TextBaseline.ideographic), - const TextSpan( - text: ' , welcome to ', - style: TextStyle(color: Colors.blue, fontSize: 18), - ), - const WidgetSpan( - child: FlutterLogo(), - alignment: PlaceholderAlignment.baseline, - baseline: TextBaseline.ideographic), - const TextSpan( - text: ' .\n', - ), - const TextSpan( - text: 'focus me on ', - style: TextStyle(color: Colors.orange, fontSize: 16), - ), - const TextSpan( - text: 'https://github.com/toly1994328', - style: TextStyle( - color: Colors.blue, - fontSize: 18, - decoration: TextDecoration.underline), - ), - const TextSpan( - text: ' .\n', - ), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_de_DE.json deleted file mode 100644 index fbca374e1..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "Zeilenlayout", - "info": "Ein Flex-Layout mit horizontaler Ausrichtung, das mehrere Komponenten aufnehmen kann. Alle anderen Eigenschaften sind identisch, siehe Flex.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Row", - "desc": [ - "【children】: Komponentenliste 【List】", - "【mainAxisAlignment】: Hauptachsenausrichtung 【MainAxisAlignment】", - "【crossAxisAlignment】: Kreuzachsenausrichtung 【CrossAxisAlignment】", - "【textBaseline】: Textbaseline 【TextBaseline】", - "【verticalDirection】: Vertikale Richtung 【VerticalDirection】", - "【mainAxisSize】: Hauptachsengröße 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_en_US.json deleted file mode 100644 index 21e94e2ed..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "Row Layout", - "info": "A Flex layout with a horizontal arrangement direction that can accommodate multiple components. All other properties are the same, see Flex for details.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Row", - "desc": [ - "【children】: Component list 【List】", - "【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】", - "【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】", - "【textBaseline】: Text baseline 【TextBaseline】", - "【verticalDirection】: Vertical direction 【VerticalDirection】", - "【mainAxisSize】: Main axis size 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_es_ES.json deleted file mode 100644 index d52d04801..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "Disposición de fila", - "info": "Disposición Flex con dirección horizontal, puede contener múltiples componentes. Todas las demás propiedades son iguales, consulte Flex para más detalles.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Row", - "desc": [ - "【children】: Lista de componentes 【List】", - "【mainAxisAlignment】: Alineación del eje principal 【MainAxisAlignment】", - "【crossAxisAlignment】: Alineación del eje transversal 【CrossAxisAlignment】", - "【textBaseline】: Línea base del texto 【TextBaseline】", - "【verticalDirection】: Dirección vertical 【VerticalDirection】", - "【mainAxisSize】: Tamaño del eje principal 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_fr_FR.json deleted file mode 100644 index d663af768..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "Disposition en ligne", - "info": "Une disposition Flex avec une orientation horizontale, capable de contenir plusieurs composants. Toutes les autres propriétés sont identiques, voir Flex pour plus de détails.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Row", - "desc": [ - "【children】 : Liste des composants 【List】", - "【mainAxisAlignment】 : Alignement de l'axe principal 【MainAxisAlignment】", - "【crossAxisAlignment】 : Alignement de l'axe secondaire 【CrossAxisAlignment】", - "【textBaseline】 : Ligne de base du texte 【TextBaseline】", - "【verticalDirection】 : Direction verticale 【VerticalDirection】", - "【mainAxisSize】 : Taille de l'axe principal 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_it_IT.json deleted file mode 100644 index 1bcf1ed46..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "Layout a righe", - "info": "Layout Flex con direzione orizzontale, può contenere più componenti. Tutte le altre proprietà sono le stesse, vedi Flex per i dettagli.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Row", - "desc": [ - "【children】 : Lista di componenti 【List】", - "【mainAxisAlignment】 : Allineamento dell'asse principale 【MainAxisAlignment】", - "【crossAxisAlignment】 : Allineamento dell'asse trasversale 【CrossAxisAlignment】", - "【textBaseline】 : Linea di base del testo 【TextBaseline】", - "【verticalDirection】 : Direzione verticale 【VerticalDirection】", - "【mainAxisSize】 : Dimensione dell'asse principale 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ja_JP.json deleted file mode 100644 index 4330b8874..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "行レイアウト", - "info": "レイアウト方向が横向きのFlexレイアウトで、複数のコンポーネントを収容できます。他の属性はすべて同じです。詳細はFlexを参照してください。", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Rowの基本使用", - "desc": [ - "【children】 : コンポーネントリスト 【List】", - "【mainAxisAlignment】 : 主軸の整列 【MainAxisAlignment】", - "【crossAxisAlignment】 : 交差軸の整列 【CrossAxisAlignment】", - "【textBaseline】 : テキストベースライン 【TextBaseline】", - "【verticalDirection】 : 垂直方向 【VerticalDirection】", - "【mainAxisSize】 : 主軸のサイズ 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ko_KR.json deleted file mode 100644 index 6ee04586d..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "행 레이아웃", - "info": "배치 방향이 가로인 Flex 레이아웃으로, 여러 컴포넌트를 수용할 수 있습니다. 다른 속성은 모두 동일하며, 자세한 내용은 Flex를 참조하세요.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Row 기본 사용법", - "desc": [ - "【children】 : 컴포넌트 리스트 【List】", - "【mainAxisAlignment】 : 주축 정렬 【MainAxisAlignment】", - "【crossAxisAlignment】 : 교차축 정렬 【CrossAxisAlignment】", - "【textBaseline】 : 텍스트 기준선 【TextBaseline】", - "【verticalDirection】 : 수직 방향 【VerticalDirection】", - "【mainAxisSize】 : 주축 크기 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_pt_PT.json deleted file mode 100644 index 0dfd304b2..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "Layout de Linha", - "info": "Um layout Flex com direção de disposição horizontal, que pode acomodar vários componentes. Todas as outras propriedades são as mesmas, consulte Flex para mais detalhes.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Row", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【mainAxisAlignment】 : Alinhamento do eixo principal 【MainAxisAlignment】", - "【crossAxisAlignment】 : Alinhamento do eixo transversal 【CrossAxisAlignment】", - "【textBaseline】 : Linha de base do texto 【TextBaseline】", - "【verticalDirection】 : Direção vertical 【VerticalDirection】", - "【mainAxisSize】 : Tamanho do eixo principal 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ru_RU.json deleted file mode 100644 index 5f557d635..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "Строка", - "info": "Горизонтальная компоновка Flex, которая может содержать несколько компонентов. Все остальные свойства такие же, как у Flex. Подробнее см. Flex.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Row", - "desc": [ - "【children】: Список компонентов 【List】", - "【mainAxisAlignment】: Выравнивание по главной оси 【MainAxisAlignment】", - "【crossAxisAlignment】: Выравнивание по поперечной оси 【CrossAxisAlignment】", - "【textBaseline】: Базовая линия текста 【TextBaseline】", - "【verticalDirection】: Вертикальное направление 【VerticalDirection】", - "【mainAxisSize】: Размер главной оси 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_zh-CN.json deleted file mode 100644 index 0221c6a7b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "行布局", - "info": "排布方向为横向的Flex布局,可容纳多个组件。其他属性全部一致,详见Flex。", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Row基本使用", - "desc": [ - "【children】 : 组件列表 【List】", - "【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】", - "【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】", - "【textBaseline】 : 文字基线 【TextBaseline】", - "【verticalDirection】 : 竖直方向 【VerticalDirection】", - "【mainAxisSize】 : 主轴尺寸 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/node1_base.dart deleted file mode 100644 index dc090a771..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/node1_base.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - - -class CustomRow extends StatelessWidget { - const CustomRow({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - height: 70, - color: const Color(0x4484FFFF), - child: Row( - children: const [ - Padding( - child: Icon( - Icons.add_location, - size: 30, - color: Colors.pink, - ), - padding: EdgeInsets.only(left: 25, right: 20), - ), - Expanded( - child: Text( - "附近", - style: TextStyle(fontSize: 18), - ), - ), - Padding( - child: Icon(Icons.keyboard_arrow_right, color: Colors.black38), - padding: EdgeInsets.only(right: 25), - ), - ], - )); - } -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_de_DE.json deleted file mode 100644 index 2e5a4eec9..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "Schrumpfende Umhüllungsansicht", - "info": "Beziehung zur shrinkWrap-Eigenschaft von ScrollView. Die ShrinkWrappingViewport passt ihre Größe auf der Hauptachse an ihre untergeordneten Knoten an und wird verwendet, wenn keine Randbeschränkungen vorhanden sind.", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in NestedScrollViewViewport", - "desc": [ - "【offset】 : *Versatz 【ViewportOffset】", - "【axisDirection】 : Achsenrichtung 【AxisDirection】", - "【crossAxisDirection】 : Kreuzachsenrichtung 【AxisDirection】", - "【slivers】 : Untergeordnete Komponenten 【List】", - "【clipBehavior】 : Beschneidungsverhalten 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_en_US.json deleted file mode 100644 index ca49de6b8..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "Shrink Wrap Viewport", - "info": "Related to the shrinkWrap property of ScrollView. ShrinkWrappingViewport adjusts its size on the main axis to fit its children, used when there are no boundary constraints.", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to NestedScrollViewViewport", - "desc": [ - "【offset】: *offset 【ViewportOffset】", - "【axisDirection】: Axis direction 【AxisDirection】", - "【crossAxisDirection】: Cross axis direction 【AxisDirection】", - "【slivers】: Child components 【List】", - "【clipBehavior】: Clip behavior 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_es_ES.json deleted file mode 100644 index fae42a2a8..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "Vista de Envoltura Reducida", - "info": "Relación con la propiedad shrinkWrap de ScrollView. ShrinkWrappingViewport ajusta su tamaño en el eje principal para adaptarse a sus nodos hijos, utilizado en ausencia de restricciones de límites.", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a NestedScrollViewViewport", - "desc": [ - "【offset】 : *desplazamiento 【ViewportOffset】", - "【axisDirection】 : dirección del eje 【AxisDirection】", - "【crossAxisDirection】 : dirección del eje cruzado 【AxisDirection】", - "【slivers】 : componentes hijos 【List】", - "【clipBehavior】 : comportamiento de recorte 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_fr_FR.json deleted file mode 100644 index 3e91e0aad..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "Vue enveloppante rétrécissante", - "info": "Lié à la propriété shrinkWrap de ScrollView. ShrinkWrappingViewport ajuste sa taille sur l'axe principal pour s'adapter à ses enfants, utilisé en l'absence de contraintes de limites.", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à NestedScrollViewViewport", - "desc": [ - "【offset】 : *décalage 【ViewportOffset】", - "【axisDirection】 : direction de l'axe 【AxisDirection】", - "【crossAxisDirection】 : direction de l'axe croisé 【AxisDirection】", - "【slivers】 : composants enfants 【List】", - "【clipBehavior】 : comportement de découpage 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_it_IT.json deleted file mode 100644 index 51a691a68..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "Vista di avvolgimento a contrazione", - "info": "Relazione con la proprietà shrinkWrap di ScrollView. ShrinkWrappingViewport ridimensiona se stesso sull'asse principale per adattarsi ai suoi figli, utilizzato in assenza di vincoli di confine.", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a NestedScrollViewViewport", - "desc": [ - "【offset】 : *offset 【ViewportOffset】", - "【axisDirection】 : direzione dell'asse 【AxisDirection】", - "【crossAxisDirection】 : direzione dell'asse incrociato 【AxisDirection】", - "【slivers】 : componenti figli 【List】", - "【clipBehavior】 : comportamento di ritaglio 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ja_JP.json deleted file mode 100644 index a2ed4d80c..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "収縮ラッピングビューポート", - "info": "ScrollViewのshrinkWrap属性との関連性。ShrinkWrappingViewportは、主軸上で自身のサイズを子ノードに合わせて調整し、境界制約がない場合に使用されます。", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollViewViewport 紹介", - "desc": [ - "【offset】 : *オフセット 【ViewportOffset】", - "【axisDirection】 : 軸方向 【AxisDirection】", - "【crossAxisDirection】 : 交差軸方向 【AxisDirection】", - "【slivers】 : 子コンポーネント 【List】", - "【clipBehavior】 : クリップ動作 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ko_KR.json deleted file mode 100644 index f5992c13b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "축소 래핑 뷰포트", - "info": "ScrollView의 shrinkWrap 속성과의 관계. ShrinkWrappingViewport는 주축에서 자식 노드에 맞게 크기를 조정하며, 경계 제약이 없는 경우에 사용됩니다.", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollViewViewport 소개", - "desc": [ - "【offset】 : *오프셋 【ViewportOffset】", - "【axisDirection】 : 축 방향 【AxisDirection】", - "【crossAxisDirection】 : 교차 축 방향 【AxisDirection】", - "【slivers】 : 자식 위젯 【List】", - "【clipBehavior】 : 클립 동작 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_pt_PT.json deleted file mode 100644 index 6873fd27b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "Vista de Envolvimento de Redução", - "info": "Associado à propriedade shrinkWrap do ScrollView. O ShrinkWrappingViewport ajusta o seu tamanho no eixo principal para se adaptar aos seus filhos, usado em casos sem restrições de limite.", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao NestedScrollViewViewport", - "desc": [ - "【offset】 : *deslocamento 【ViewportOffset】", - "【axisDirection】 : direção do eixo 【AxisDirection】", - "【crossAxisDirection】 : direção do eixo cruzado 【AxisDirection】", - "【slivers】 : componentes filhos 【List】", - "【clipBehavior】 : comportamento de corte 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ru_RU.json deleted file mode 100644 index 71edc861f..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "Сжимающаяся оболочка Viewport", - "info": "Связь с атрибутом shrinkWrap ScrollView. ShrinkWrappingViewport регулирует свой размер по основной оси, чтобы соответствовать своим дочерним элементам, используется при отсутствии ограничений.", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в NestedScrollViewViewport", - "desc": [ - "【offset】 : *смещение 【ViewportOffset】", - "【axisDirection】 : направление оси 【AxisDirection】", - "【crossAxisDirection】 : направление поперечной оси 【AxisDirection】", - "【slivers】 : дочерние компоненты 【List】", - "【clipBehavior】 : поведение обрезки 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_zh-CN.json deleted file mode 100644 index 0939d13fc..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "收缩包围视图", - "info": "和 ScrollView 的 shrinkWrap 属性之间关联。ShrinkWrappingViewport 在主轴上调整自身的大小以适应它的子节点,在无边界约束的情况下使用。", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollViewViewport 介绍", - "desc": [ - "【offset】 : *偏移 【ViewportOffset】", - "【axisDirection】 : 轴向 【AxisDirection】", - "【crossAxisDirection】 : 交叉轴向 【AxisDirection】", - "【slivers】 : 子组件 【List】", - "【clipBehavior】 : 裁剪行为 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/node1_base.dart deleted file mode 100644 index 152e603f4..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/node1_base.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ShrinkWrappingViewportDemo extends StatelessWidget { - - const ShrinkWrappingViewportDemo({Key? key}) : super(key: key); - - final String info = - 'ShrinkWrappingViewport 在源码中只有一处使用:' - '在 ScrollView 中如果 shrinkWrap 为 true,会使用 ShrinkWrappingViewport,该属性在其子类 ListView、GridView、CustomScrollView 中可指定。' - '如果 shrinkWrap 为 false,视口会使用 Viewport,此时,视图区域将会沿滑动方向尽可能延伸。在无边界约束的情况下,shrinkWrap 需要是 true。' - '另外 ShrinkWrappingViewport 使用比较昂贵,因为滑动时需要重新计算滑动视图的尺寸。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_de_DE.json deleted file mode 100644 index 916acaba9..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_de_DE.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "Stapellayout", - "info": "Kann mehrere Komponenten aufnehmen, Unterkomponenten werden gestapelt platziert, wobei die letzte oben liegt. Verfügt über eine alignment-Eigenschaft, die in Kombination mit der Positioned-Komponente verwendet werden kann, um eine präzise Positionierung zu erreichen.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Stack", - "desc": [ - "【children】: Komponentenliste 【List】", - "【textDirection】: Ausrichtung der Kinder 【MainAxisAlignment】", - "【alignment】: Ausrichtungsmethode 【AlignmentGeometry】", - "【overflow】: Überlaufmodus 【Overflow】", - "【fit】: Anpassungsmodus 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Kombinierte Verwendung von Stack und Positioned", - "desc": [ - "Die Positioned-Komponente kann nur innerhalb eines Stacks verwendet werden und ermöglicht die präzise Platzierung einer Komponente durch Angabe der Abstände von oben, links, rechts und unten." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_en_US.json deleted file mode 100644 index 27bd446e2..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_en_US.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "Stack Layout", - "info": "Can accommodate multiple components, arranging child components in a stacked manner, with the latter on top. Has the alignment property, which can be used in conjunction with the Positioned component for precise positioning.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Stack", - "desc": [ - "【children】: Component list 【List】", - "【textDirection】: Child arrangement direction 【MainAxisAlignment】", - "【alignment】: Alignment method 【AlignmentGeometry】", - "【overflow】: Overflow mode 【Overflow】", - "【fit】: Fit mode 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Combined Usage of Stack and Positioned", - "desc": [ - "The Positioned component can only be used within a Stack, allowing precise placement of a component by specifying distances from the top, left, right, and bottom." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_es_ES.json deleted file mode 100644 index d3df90938..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_es_ES.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "Diseño apilado", - "info": "Puede contener múltiples componentes, colocando los componentes hijos de manera apilada, el último encima. Tiene la propiedad de alineación, que se puede usar junto con el componente Positioned para un posicionamiento preciso.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Stack", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【textDirection】 : Dirección de disposición de los hijos 【MainAxisAlignment】", - "【alignment】 : Modo de alineación 【AlignmentGeometry】", - "【overflow】 : Modo de desbordamiento 【Overflow】", - "【fit】 : Modo de ajuste 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Uso combinado de Stack y Positioned", - "desc": [ - "El componente Positioned solo se puede usar en Stack, y se puede especificar la distancia desde la parte superior, izquierda, derecha e inferior para colocar un componente con precisión." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_fr_FR.json deleted file mode 100644 index 90c39694b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_fr_FR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "Disposition en pile", - "info": "Peut contenir plusieurs composants, disposant les composants enfants de manière empilée, le dernier étant au-dessus. Possède une propriété d'alignement, pouvant être utilisée conjointement avec le composant Positioned pour un positionnement précis.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Stack", - "desc": [ - "【children】 : Liste des composants 【List】", - "【textDirection】 : Direction de disposition des enfants 【MainAxisAlignment】", - "【alignment】 : Mode d'alignement 【AlignmentGeometry】", - "【overflow】 : Mode de débordement 【Overflow】", - "【fit】 : Mode d'adaptation 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Utilisation combinée de Stack et Positioned", - "desc": [ - "Le composant Positioned ne peut être utilisé qu'avec Stack, permettant de positionner précisément un composant en spécifiant les distances en haut, bas, gauche et droite." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_it_IT.json deleted file mode 100644 index 06457d8f9..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_it_IT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "Layout a Pila", - "info": "Può contenere più componenti, disposti in modo sovrapposto, con il successivo sopra il precedente. Possiede la proprietà alignment, che può essere utilizzata in combinazione con il componente Positioned per un posizionamento preciso.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di Stack", - "desc": [ - "【children】: Lista di componenti 【List】", - "【textDirection】: Direzione di disposizione dei figli 【MainAxisAlignment】", - "【alignment】: Modalità di allineamento 【AlignmentGeometry】", - "【overflow】: Modalità di overflow 【Overflow】", - "【fit】: Modalità di adattamento 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Uso Combinato di Stack e Positioned", - "desc": [ - "Il componente Positioned può essere utilizzato solo con Stack, consentendo di specificare le distanze da sinistra, alto, destra e basso per posizionare con precisione un componente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ja_JP.json deleted file mode 100644 index f9d786559..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ja_JP.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "スタックレイアウト", - "info": "複数のコンポーネントを収容でき、子コンポーネントをスタック方式で配置し、後者が上に来ます。alignment属性を持ち、Positionedコンポーネントと組み合わせて使用することで、正確な位置指定が可能です。", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Stackの基本的な使用", - "desc": [ - "【children】 : コンポーネントリスト 【List】", - "【textDirection】 : 子要素の配置方向 【MainAxisAlignment】", - "【alignment】 : 配置方法 【AlignmentGeometry】", - "【overflow】 : オーバーフローモード 【Overflow】", - "【fit】 : フィットモード 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "StackとPositionedの組み合わせ使用", - "desc": [ - "PositionedコンポーネントはStack内でのみ使用でき、左上右下の距離を指定して特定のコンポーネントを正確に配置できます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ko_KR.json deleted file mode 100644 index a8299959c..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ko_KR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "스택 레이아웃", - "info": "여러 컴포넌트를 수용할 수 있으며, 자식 컴포넌트를 겹쳐서 배치합니다. 후자가 위에 위치합니다. alignment 속성을 가지고 있으며, Positioned 컴포넌트와 함께 사용하여 정확한 위치를 지정할 수 있습니다.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Stack 기본 사용법", - "desc": [ - "【children】 : 컴포넌트 리스트 【List】", - "【textDirection】 : 자식 배치 방향 【MainAxisAlignment】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】", - "【overflow】 : 오버플로우 모드 【Overflow】", - "【fit】 : 적응 모드 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Stack과 Positioned 함께 사용", - "desc": [ - "Positioned 컴포넌트는 Stack에서만 사용할 수 있으며, 특정 컴포넌트의 위치를 정확히 배치하기 위해 상하좌우 거리를 지정할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_pt_PT.json deleted file mode 100644 index c06bc8b58..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_pt_PT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "Layout Empilhado", - "info": "Pode acomodar vários componentes, dispondo os subcomponentes de forma empilhada, com o último ficando por cima. Possui a propriedade alignment, que pode ser usada em conjunto com o componente Positioned para um posicionamento preciso.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Stack", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【textDirection】 : Direção de disposição dos filhos 【MainAxisAlignment】", - "【alignment】 : Modo de alinhamento 【AlignmentGeometry】", - "【overflow】 : Modo de overflow 【Overflow】", - "【fit】 : Modo de ajuste 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Uso Combinado do Stack e Positioned", - "desc": [ - "O componente Positioned só pode ser usado dentro de um Stack, permitindo especificar as distâncias de topo, esquerda, direita e inferior para posicionar um componente com precisão." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ru_RU.json deleted file mode 100644 index 9edd87b3c..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ru_RU.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "Стек", - "info": "Может содержать несколько компонентов, располагая дочерние компоненты в стеке, последний сверху. Имеет свойство alignment, которое можно использовать вместе с компонентом Positioned для точного позиционирования.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Stack", - "desc": [ - "【children】: Список компонентов 【List】", - "【textDirection】: Направление расположения детей 【MainAxisAlignment】", - "【alignment】: Способ выравнивания 【AlignmentGeometry】", - "【overflow】: Режим переполнения 【Overflow】", - "【fit】: Режим адаптации 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Использование Stack и Positioned вместе", - "desc": [ - "Компонент Positioned может использоваться только в Stack, позволяя точно размещать компонент, задавая расстояния сверху, слева, справа и снизу." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_zh-CN.json deleted file mode 100644 index db057f07b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_zh-CN.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "堆叠布局", - "info": "可容纳多个组件,以堆叠的方式摆放子组件,后者居上。拥有alignment属性,可与Positioned组件联合使用,精确定位。", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Stack基本使用", - "desc": [ - "【children】 : 组件列表 【List】", - "【textDirection】 : 孩子排布方向 【MainAxisAlignment】", - "【alignment】 : 对齐方式 【AlignmentGeometry】", - "【overflow】 : 溢出模式 【Overflow】", - "【fit】 : 适应模式 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Stack和Positioned结合使用", - "desc": [ - "Positioned组件只能用与Stack中,可以指定左上右下的距离对某个组件进行位置精确安放。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/node1_base.dart deleted file mode 100644 index 8304e3090..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/node1_base.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class CustomStack extends StatelessWidget { - const CustomStack({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Widget yellowBox = Container( - color: Colors.yellow, - height: 100, - width: 100, - ); - - Widget redBox = Container( - color: Colors.red, - height: 90, - width: 90, - ); - - Widget greenBox = Container( - color: Colors.green, - height: 80, - width: 80, - ); - - Widget cyanBox = Container( - color: Colors.cyanAccent, - height: 70, - width: 70, - ); - - return Container( - width: 200, - height: 120, - color: Colors.grey.withAlpha(33), - child: Stack( - textDirection: TextDirection.rtl, - fit: StackFit.loose, - alignment: Alignment.topRight, - // overflow: Overflow.clip, // 1.22.0 被去除 - children: [yellowBox, redBox, greenBox, cyanBox], - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/node2_positioned.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/node2_positioned.dart deleted file mode 100644 index 6ed8b5f0a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/node2_positioned.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class PositionedStack extends StatelessWidget { - const PositionedStack({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Widget yellowBox = Container( - color: Colors.yellow, - height: 100, - width: 100, - ); - - Widget redBox = Container( - color: Colors.red, - height: 90, - width: 90, - ); - - Widget greenBox = Container( - color: Colors.green, - height: 80, - width: 80, - ); - - Widget cyanBox = Container( - color: Colors.cyanAccent, - height: 70, - width: 70, - ); - - return Container( - width: 200, - height: 120, - color: Colors.grey.withAlpha(33), - child: Stack( - children: [yellowBox, redBox, greenBox, - Positioned( - child: cyanBox, - bottom: 10, - right: 10, - ) - ], - )); - } -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_de_DE.json deleted file mode 100644 index eda5bea82..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "Ansichtsfenster-Komponente", - "info": "Wird normalerweise verwendet, um ein Ansichtsfenster für eine Scroll-Ansicht bereitzustellen, wobei nur die angezeigten und vorab geladenen Teile erstellt werden. Es kann die Länge des Vorladens, die Scroll-Achse usw. angegeben werden. Es ist eine der Kernimplementationskomponenten von ScrollView und wird im Allgemeinen nicht direkt verwendet.", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Viewport", - "desc": [ - "【offset】: *Ansichtsfenster-Verschiebung 【ViewportOffset】", - "【cacheExtentStyle】: Vorladetyp 【CacheExtentStyle】", - "【cacheExtent】: Vorlademenge 【double】", - "【axisDirection】: Scrollrichtung 【AxisDirection】", - "【slivers】: Untergeordnete Sliver-Komponentensammlung 【List】", - "【anchor】: Ankerpunkt 【double】", - "Sie können diesen Code ausführen, um den Aufbau von ColorItem zu überprüfen, 128 Farbbalken werden nicht alle auf einmal erstellt." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_en_US.json deleted file mode 100644 index 4fa1c0a58..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "Viewport Component", - "info": "Typically used to provide a viewport for a scrolling view, only building the displayed and preloaded parts. The preload length, scrolling axis, etc., can be specified. It is one of the core implementation components of ScrollView and is generally not used directly.", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Viewport", - "desc": [ - "【offset】: *Viewport offset 【ViewportOffset】", - "【cacheExtentStyle】: Preload type 【CacheExtentStyle】", - "【cacheExtent】: Preload amount 【double】", - "【axisDirection】: Scrolling direction 【AxisDirection】", - "【slivers】: Child Sliver component set 【List】", - "【anchor】: Anchor point 【double】", - "You can run this code to see how the ColorItem is constructed, the 128 color bars are not all constructed at once." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_es_ES.json deleted file mode 100644 index d10d5ef93..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "Componente de ventana gráfica", - "info": "Normalmente se utiliza para proporcionar una ventana gráfica a las vistas deslizantes, construyendo solo las partes visibles y precargadas. Se puede especificar la longitud de precarga, la dirección de deslizamiento, etc. Es uno de los componentes centrales de la implementación de ScrollView y generalmente no se utiliza directamente.", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Viewport", - "desc": [ - "【offset】: *Desplazamiento de la ventana gráfica 【ViewportOffset】", - "【cacheExtentStyle】: Tipo de precarga 【CacheExtentStyle】", - "【cacheExtent】: Cantidad de precarga 【double】", - "【axisDirection】: Dirección de deslizamiento 【AxisDirection】", - "【slivers】: Conjunto de componentes Sliver hijos 【List】", - "【anchor】: Punto de anclaje 【double】", - "Puedes ejecutar este código para ver cómo se construye ColorItem, las 128 barras de color no se construyen todas a la vez." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_fr_FR.json deleted file mode 100644 index b78da72e4..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "Composant de fenêtre", - "info": "Généralement utilisé pour fournir une fenêtre à une vue défilante, ne construit que les parties affichées et préchargées. Peut spécifier la longueur de préchargement, l'axe de défilement, etc. Est l'un des composants de base de l'implémentation de ScrollView, généralement non utilisé directement.", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Viewport", - "desc": [ - "【offset】 : *Décalage de la fenêtre 【ViewportOffset】", - "【cacheExtentStyle】: Type de préchargement 【CacheExtentStyle】", - "【cacheExtent】: Quantité de préchargement 【double】", - "【axisDirection】: Direction de défilement 【AxisDirection】", - "【slivers】: Ensemble de composants Sliver enfants 【List】", - "【anchor】: Point d'ancrage 【double】", - "Vous pouvez exécuter ce code pour voir la construction de ColorItem, les 128 barres de couleur ne sont pas toutes construites en une seule fois." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_it_IT.json deleted file mode 100644 index 71dd37f34..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "Componente Viewport", - "info": "Utilizzato solitamente per fornire una finestra di visualizzazione per le viste scorrevoli, costruendo solo le parti visibili e precaricate. È possibile specificare la lunghezza del precaricamento, l'asse di scorrimento, ecc. È uno dei componenti di implementazione centrale di ScrollView e generalmente non viene utilizzato direttamente.", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Viewport", - "desc": [ - "【offset】 : *Offset della finestra di visualizzazione 【ViewportOffset】", - "【cacheExtentStyle】: Tipo di precaricamento 【CacheExtentStyle】", - "【cacheExtent】: Quantità di precaricamento 【double】", - "【axisDirection】: Direzione di scorrimento 【AxisDirection】", - "【slivers】: Insieme di componenti Sliver figli 【List】", - "【anchor】: Punto di ancoraggio 【double】", - "Puoi eseguire questi codici per vedere come viene costruito ColorItem, i 128 barre di colore non vengono costruiti tutti in una volta." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ja_JP.json deleted file mode 100644 index 99b72394a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "ビューポートコンポーネント", - "info": "通常、スライドビューのビューポートを提供するために使用され、表示およびプリロードされる部分のみを構築します。プリロードの長さ、スライド軸などを指定できます。ScrollViewのコア実装コンポーネントの1つであり、通常は直接使用しません。", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Viewportの基本的な使用法", - "desc": [ - "【offset】 : *ビューポートオフセット 【ViewportOffset】", - "【cacheExtentStyle】: プリロードタイプ 【CacheExtentStyle】", - "【cacheExtent】: プリロード量 【double】", - "【axisDirection】: スライド方向 【AxisDirection】", - "【slivers】: 子Sliverコンポーネントセット 【List】", - "【anchor】: アンカー 【double】", - "これらのコードを実行して、ColorItemの構築状況を確認できます。128のカラーバーは一度にすべて構築されません。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ko_KR.json deleted file mode 100644 index d480441a7..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "뷰포트 컴포넌트", - "info": "일반적으로 스크롤 뷰에 뷰포트를 제공하기 위해 사용되며, 표시 및 미리 로드할 부분만 구성합니다. 미리 로드할 길이, 스크롤 방향 등을 지정할 수 있습니다. ScrollView의 핵심 구현 컴포넌트 중 하나로, 일반적으로 직접 사용하지 않습니다.", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Viewport의 기본 사용", - "desc": [ - "【offset】 : *뷰포트 오프셋 【ViewportOffset】", - "【cacheExtentStyle】: 미리 로드 유형 【CacheExtentStyle】", - "【cacheExtent】: 미리 로드량 【double】", - "【axisDirection】: 스크롤 방향 【AxisDirection】", - "【slivers】: 하위 Sliver 컴포넌트 집합 【List】", - "【anchor】: 앵커 【double】", - "이 코드를 실행하여 ColorItem의 구성을 확인할 수 있으며, 128개의 색상 바가 한 번에 모두 구성되지는 않습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_pt_PT.json deleted file mode 100644 index 6ba04fed5..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "Componente de Viewport", - "info": "Normalmente usado para fornecer uma viewport para uma vista deslizante, construindo apenas as partes exibidas e pré-carregadas. Pode especificar o comprimento do pré-carregamento, o eixo de deslizamento, etc. É um dos componentes principais de implementação do ScrollView, geralmente não é usado diretamente.", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Viewport", - "desc": [ - "【offset】 : *Deslocamento da viewport 【ViewportOffset】", - "【cacheExtentStyle】: Tipo de pré-carregamento 【CacheExtentStyle】", - "【cacheExtent】: Quantidade de pré-carregamento 【double】", - "【axisDirection】: Direção de deslizamento 【AxisDirection】", - "【slivers】: Conjunto de componentes Sliver filhos 【List】", - "【anchor】: Ponto de ancoragem 【double】", - "Pode executar este código para verificar a construção do ColorItem, as 128 barras de cores não são construídas todas de uma vez." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ru_RU.json deleted file mode 100644 index 189f1014a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "Компонент Viewport", - "info": "Обычно используется для предоставления области просмотра для прокручиваемого вида, строя только отображаемые и предварительно загружаемые части. Можно указать длину предварительной загрузки, направление прокрутки и т.д. Это один из основных компонентов реализации ScrollView, обычно не используется напрямую.", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Viewport", - "desc": [ - "【offset】: *Смещение области просмотра 【ViewportOffset】", - "【cacheExtentStyle】: Тип предварительной загрузки 【CacheExtentStyle】", - "【cacheExtent】: Объем предварительной загрузки 【double】", - "【axisDirection】: Направление прокрутки 【AxisDirection】", - "【slivers】: Набор дочерних компонентов Sliver 【List】", - "【anchor】: Точка привязки 【double】", - "Можно запустить этот код, чтобы увидеть, как строится ColorItem, 128 цветных полос не строятся все сразу." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_zh-CN.json deleted file mode 100644 index 1837dac22..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "视口组件", - "info": "通常用于为滑动视图提供视口,仅构建显示和预加载的部位。可指定预加载的长度、滑动轴向等。是ScrollView的核心实现组件之一,一般不直接使用。", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Viewport的基本使用", - "desc": [ - "【offset】 : *视口偏移量 【ViewportOffset】", - "【cacheExtentStyle】: 预加载类型 【CacheExtentStyle】", - "【cacheExtent】: 预加载量 【double】", - "【axisDirection】: 滑动方向 【AxisDirection】", - "【slivers】: 子Sliver组件集 【List】", - "【anchor】: 锚点 【double】", - "可以运行这些代码,查看ColorItem的构建情况,128个色条并非一次性全部构建。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/node1_base.dart deleted file mode 100644 index 6895cf2f4..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/node1_base.dart +++ /dev/null @@ -1,79 +0,0 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; - -/// create by 张风捷特烈 on 2020/8/2 -/// contact me by email 1981462002@qq.com - - -class ViewportDemo extends StatelessWidget { - const ViewportDemo({super.key}); - - List get data => List.generate(128, (i) => Color(0xFF6600FF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 250, - child: Scrollable( - axisDirection: AxisDirection.down, - physics: const BouncingScrollPhysics(), - dragStartBehavior: DragStartBehavior.start, - viewportBuilder: (ctx, position) => Viewport( - axisDirection: AxisDirection.down, - cacheExtent: 200, - anchor: 0, - cacheExtentStyle: CacheExtentStyle.pixel, - offset: position, - slivers: [_buildSliverList()], - ), - ), - ); - } - - Widget _buildSliverList() => SliverList( - delegate: SliverChildBuilderDelegate( - (_, int index) =>ColorItem(color: data[index],), - childCount: data.length), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} - -class ColorItem extends StatefulWidget { - final Color color; - - const ColorItem({Key? key, required this.color}) : super(key: key); - - @override - _ColorItemState createState() => _ColorItemState(); -} - -class _ColorItemState extends State { - - @override - void initState() { - super.initState(); - print('-----initState----${colorString(widget.color)}-----------'); - } - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.only(top: 1), - alignment: Alignment.center, - width: 100, - height: 60, - color: widget.color, - child: Text( - colorString(widget.color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ]), - ), - ); - } - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_de_DE.json deleted file mode 100644 index 1fa4ebc30..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_de_DE.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "Wrap-Layout", - "info": "Kann mehrere Komponenten aufnehmen und sie in einer bestimmten Richtung anordnen. Es kann den Abstand zwischen den Kindern leicht verarbeiten und automatisch umbrechen, wenn die Grenze überschritten wird. Es hat Ausrichtungsmethoden für die Haupt- und Querachse und ist relativ flexibel.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Wrap", - "desc": [ - "【children】 : Komponentenliste 【List】", - "【spacing】 : Abstand zwischen den Einträgen auf der Hauptachse 【double】", - "【runSpacing】 : Abstand zwischen den Einträgen auf der Querachse 【double】", - "【direction】 : Ausrichtung der Hauptachse 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Alignment-Eigenschaft von Wrap", - "desc": [ - "【alignment】 : Ausrichtung der Hauptachse 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "CrossAxisAlignment-Eigenschaft von Wrap", - "desc": [ - "【crossAxisAlignment】 : Ausrichtung der Querachse 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "TextDirection-Eigenschaft von Wrap", - "desc": [ - "【textDirection】 : Textrichtung 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "VerticalDirection-Eigenschaft von Wrap", - "desc": [ - "【verticalDirection】 : Vertikale Richtung 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_en_US.json deleted file mode 100644 index 65132c6bf..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_en_US.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "Wrap Layout", - "info": "Can accommodate multiple components, arranged in a specified direction, and can easily handle the spacing between children. It can automatically wrap when out of bounds. It has flexible alignment methods for the main axis and cross axis.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Wrap", - "desc": [ - "【children】: Component list 【List】", - "【spacing】: Main axis spacing between items 【double】", - "【runSpacing】: Cross axis spacing between items 【double】", - "【direction】: Main axis alignment 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Wrap's alignment Property", - "desc": [ - "【alignment】: Main axis alignment 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "Wrap's crossAxisAlignment Property", - "desc": [ - "【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "Wrap's textDirection Property", - "desc": [ - "【textDirection】: Text direction 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "Wrap's verticalDirection Property", - "desc": [ - "【verticalDirection】: Vertical direction 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_es_ES.json deleted file mode 100644 index ab8d1052a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_es_ES.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "Disposición de envoltura", - "info": "Puede contener múltiples componentes, que se organizan en la dirección especificada, y puede manejar fácilmente el espaciado entre los hijos. Cuando se excede el límite, puede envolver automáticamente. Tiene métodos de alineación en el eje principal y el eje cruzado, lo que lo hace bastante flexible.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Wrap", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【spacing】 : Espaciado entre elementos en el eje principal 【double】", - "【runSpacing】 : Espaciado entre elementos en el eje cruzado 【double】", - "【direction】 : Alineación del eje principal 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Propiedad alignment de Wrap", - "desc": [ - "【alignment】 : Alineación del eje principal 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "Propiedad crossAxisAlignment de Wrap", - "desc": [ - "【crossAxisAlignment】 : Alineación del eje cruzado 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "Propiedad textDirection de Wrap", - "desc": [ - "【textDirection】 : Dirección del texto 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "Propiedad verticalDirection de Wrap", - "desc": [ - "【verticalDirection】 : Dirección vertical 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_fr_FR.json deleted file mode 100644 index 7b96706f5..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_fr_FR.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "Disposition enveloppante", - "info": "Peut contenir plusieurs composants, disposés séquentiellement dans une direction spécifiée, peut facilement gérer l'espacement des enfants, et peut automatiquement passer à la ligne suivante en cas de débordement. Possède des méthodes d'alignement pour l'axe principal et l'axe transversal, offrant une grande flexibilité.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Wrap", - "desc": [ - "【children】 : Liste des composants 【List】", - "【spacing】 : Espacement des éléments sur l'axe principal 【double】", - "【runSpacing】 : Espacement des éléments sur l'axe transversal 【double】", - "【direction】 : Alignement de l'axe principal 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Propriété alignment de Wrap", - "desc": [ - "【alignment】 : Alignement de l'axe principal 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "Propriété crossAxisAlignment de Wrap", - "desc": [ - "【crossAxisAlignment】 : Alignement de l'axe transversal 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "Propriété textDirection de Wrap", - "desc": [ - "【textDirection】 : Direction du texte 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "Propriété verticalDirection de Wrap", - "desc": [ - "【verticalDirection】 : Direction verticale 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_it_IT.json deleted file mode 100644 index d33ff5f45..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_it_IT.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "Layout a pacchetto", - "info": "Può contenere più componenti, disposti in sequenza secondo la direzione specificata, può gestire facilmente la spaziatura tra i figli e può andare a capo automaticamente quando si superano i limiti. Ha modalità di allineamento per l'asse principale e l'asse trasversale, è abbastanza flessibile.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Wrap", - "desc": [ - "【children】 : Lista dei componenti 【List】", - "【spacing】 : Spaziatura degli elementi sull'asse principale 【double】", - "【runSpacing】 : Spaziatura degli elementi sull'asse trasversale 【double】", - "【direction】 : Allineamento dell'asse principale 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Proprietà alignment di Wrap", - "desc": [ - "【alignment】 : Allineamento dell'asse principale 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "Proprietà crossAxisAlignment di Wrap", - "desc": [ - "【crossAxisAlignment】 : Allineamento dell'asse trasversale 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "Proprietà textDirection di Wrap", - "desc": [ - "【textDirection】 : Direzione del testo 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "Proprietà verticalDirection di Wrap", - "desc": [ - "【verticalDirection】 : Direzione verticale 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ja_JP.json deleted file mode 100644 index 50d7a7443..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ja_JP.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "ラップレイアウト", - "info": "複数のコンポーネントを収容でき、指定された方向に順番に配置し、子要素の間隔を簡単に処理できます。オーバーフロー時に自動的に折り返すことができます。主軸と交差軸の配置方法を持ち、比較的柔軟です。", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Wrapの基本的な使い方", - "desc": [ - "【children】 : コンポーネントリスト 【List】", - "【spacing】 : 主軸アイテム間隔 【double】", - "【runSpacing】 : 交差軸アイテム間隔 【double】", - "【direction】 : 主軸整列 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Wrapのalignment属性", - "desc": [ - "【alignment】 : 主軸整列 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "WrapのcrossAxisAlignment属性", - "desc": [ - "【crossAxisAlignment】 : 交差軸整列 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "WrapのtextDirection属性", - "desc": [ - "【textDirection】 : テキスト方向 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "WrapのverticalDirection属性", - "desc": [ - "【verticalDirection】 : 垂直方向 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ko_KR.json deleted file mode 100644 index 4765ca5d5..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ko_KR.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "래핑 레이아웃", - "info": "여러 컴포넌트를 수용할 수 있으며, 지정된 방향으로 순차적으로 배치할 수 있습니다. 자식 간의 간격을 쉽게 처리할 수 있으며, 경계를 벗어날 경우 자동으로 줄 바꿈이 가능합니다. 주축과 교차축 정렬 방식을 가지고 있어 유연성이 높습니다.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Wrap의 기본 사용법", - "desc": [ - "【children】 : 컴포넌트 리스트 【List】", - "【spacing】 : 주축 항목 간격 【double】", - "【runSpacing】 : 교차축 항목 간격 【double】", - "【direction】 : 주축 정렬 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Wrap의 alignment 속성", - "desc": [ - "【alignment】 : 주축 정렬 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "Wrap의 crossAxisAlignment 속성", - "desc": [ - "【crossAxisAlignment】 : 교차축 정렬 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "Wrap의 textDirection 속성", - "desc": [ - "【textDirection】 : 텍스트 방향 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "Wrap의 verticalDirection 속성", - "desc": [ - "【verticalDirection】 : 수직 방향 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_pt_PT.json deleted file mode 100644 index f02fcbf75..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_pt_PT.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "Layout de Embalagem", - "info": "Pode acomodar vários componentes, dispostos sequencialmente na direção especificada, e pode facilmente lidar com o espaçamento entre os filhos. Quando ultrapassa o limite, pode quebrar automaticamente a linha. Possui métodos de alinhamento para o eixo principal e o eixo cruzado, sendo bastante flexível.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Wrap", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【spacing】 : Espaçamento entre itens no eixo principal 【double】", - "【runSpacing】 : Espaçamento entre itens no eixo cruzado 【double】", - "【direction】 : Alinhamento do eixo principal 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Propriedade alignment do Wrap", - "desc": [ - "【alignment】 : Alinhamento do eixo principal 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "Propriedade crossAxisAlignment do Wrap", - "desc": [ - "【crossAxisAlignment】 : Alinhamento do eixo cruzado 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "Propriedade textDirection do Wrap", - "desc": [ - "【textDirection】 : Direção do texto 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "Propriedade verticalDirection do Wrap", - "desc": [ - "【verticalDirection】 : Direção vertical 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ru_RU.json deleted file mode 100644 index 8422284aa..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ru_RU.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "Обёртка", - "info": "Может содержать несколько компонентов, которые располагаются в указанном направлении, легко управляет расстоянием между дочерними элементами, автоматически переносит строку при выходе за пределы. Имеет гибкие настройки выравнивания по основной и поперечной оси.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Wrap", - "desc": [ - "【children】 : Список компонентов 【List】", - "【spacing】 : Расстояние между элементами по основной оси 【double】", - "【runSpacing】 : Расстояние между элементами по поперечной оси 【double】", - "【direction】 : Выравнивание по основной оси 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Свойство alignment Wrap", - "desc": [ - "【alignment】 : Выравнивание по основной оси 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "Свойство crossAxisAlignment Wrap", - "desc": [ - "【crossAxisAlignment】 : Выравнивание по поперечной оси 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "Свойство textDirection Wrap", - "desc": [ - "【textDirection】 : Направление текста 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "Свойство verticalDirection Wrap", - "desc": [ - "【verticalDirection】 : Вертикальное направление 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_zh-CN.json deleted file mode 100644 index 98459ac5b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_zh-CN.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "包裹布局", - "info": "可容纳多个组件,按照指定方向依次排布,可以很方便处理孩子的间距,当越界时可以自动换行。拥有主轴和交叉轴的对齐方式,比较灵活。", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Wrap的基础用法", - "desc": [ - "【children】 : 组件列表 【List】", - "【spacing】 : 主轴条目间距 【double】", - "【runSpacing】 : 交叉轴条目间距 【double】", - "【direction】 : 主轴对齐 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Wrap的alignment属性", - "desc": [ - "【alignment】 : 主轴对齐 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "Wrap的crossAxisAlignment属性", - "desc": [ - "【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "Wrap的textDirection属性", - "desc": [ - "【textDirection】 : 文字方向 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "Wrap的verticalDirection属性", - "desc": [ - "【verticalDirection】 : 竖直方向 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node1_base.dart deleted file mode 100644 index 9c725298c..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node1_base.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class DirectionWrap extends StatelessWidget { - const DirectionWrap({super.key}); - - @override - Widget build(BuildContext context) { - return Wrap( - children: Axis.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 100, - color: Colors.grey.withAlpha(33), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - Widget get yellowBox => Container( - color: Colors.yellow, - height: 30, - width: 50, - ); - - Widget get redBox => Container( - color: Colors.red, - height: 40, - width: 40, - ); - Widget get greenBox => Container( - color: Colors.green, - height: 40, - width: 20, - ); - Widget get blackBox => Container( - color: Colors.black, - height: 10, - width: 10, - ); - Widget get purpleBox => Container( - color: Colors.purple, - height: 20, - width: 20, - ); - Widget get orangeBox => Container( - color: Colors.orange, - height: 80, - width: 20, - ); - Widget get cyanBox => Container( - color: Colors.cyanAccent, - height: 10, - width: 20, - ); - - Widget _buildItem(mode) => Wrap( - direction: mode, - runSpacing: 10, - spacing: 10, - children: [ - yellowBox, redBox, greenBox, cyanBox, - blackBox, purpleBox, orangeBox, - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node2_alignment.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node2_alignment.dart deleted file mode 100644 index 0ed715cc3..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node2_alignment.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class WrapAlignmentWrap extends StatelessWidget { - const WrapAlignmentWrap({super.key}); - - @override - Widget build(BuildContext context) { - return Wrap( - children: WrapAlignment.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 100, - color: Colors.grey.withAlpha(88), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget get yellowBox => Container( - color: Colors.yellow, - height: 30, - width: 50, - ); - - Widget get redBox => Container( - color: Colors.red, - height: 40, - width: 40, - ); - Widget get greenBox => Container( - color: Colors.green, - height: 40, - width: 20, - ); - Widget get blackBox => Container( - color: Colors.black, - height: 10, - width: 10, - ); - Widget get purpleBox => Container( - color: Colors.purple, - height: 20, - width: 20, - ); - Widget get orangeBox => Container( - color: Colors.orange, - height: 80, - width: 20, - ); - Widget get cyanBox => Container( - color: Colors.cyanAccent, - height: 10, - width: 20, - ); - - Widget _buildItem(mode) => Wrap( - alignment: mode, - runSpacing: 10, - spacing: 10, - children: [ - yellowBox, redBox, - greenBox, cyanBox, - blackBox, purpleBox, - orangeBox, - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node3_crossAxisAlignment.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node3_crossAxisAlignment.dart deleted file mode 100644 index 58774bf02..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node3_crossAxisAlignment.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CrossAxisAlignmentWrap extends StatelessWidget { - const CrossAxisAlignmentWrap({super.key}); - - @override - Widget build(BuildContext context) { - return Wrap( - children: WrapCrossAlignment.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 100, - color: Colors.grey.withAlpha(88), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget get yellowBox => Container( - color: Colors.yellow, - height: 30, - width: 50, - ); - - Widget get redBox => Container( - color: Colors.red, - height: 40, - width: 40, - ); - Widget get greenBox => Container( - color: Colors.green, - height: 40, - width: 20, - ); - Widget get blackBox => Container( - color: Colors.black, - height: 10, - width: 10, - ); - Widget get purpleBox => Container( - color: Colors.purple, - height: 20, - width: 20, - ); - Widget get orangeBox => Container( - color: Colors.orange, - height: 80, - width: 20, - ); - Widget get cyanBox => Container( - color: Colors.cyanAccent, - height: 10, - width: 20, - ); - - Widget _buildItem(mode) => Wrap( - crossAxisAlignment: mode, - runSpacing: 10, - spacing: 10, - children: [ - yellowBox, redBox, - greenBox, cyanBox, - blackBox, purpleBox, - orangeBox, - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node4_textDirection.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node4_textDirection.dart deleted file mode 100644 index 2aba4b945..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node4_textDirection.dart +++ /dev/null @@ -1,71 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class TextDirectionWrap extends StatelessWidget { - const TextDirectionWrap({super.key}); - - @override - Widget build(BuildContext context) { - return Wrap( - children: TextDirection.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 100, - color: Colors.grey.withAlpha(88), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget get yellowBox => Container( - color: Colors.yellow, - height: 30, - width: 50, - ); - - Widget get redBox => Container( - color: Colors.red, - height: 40, - width: 40, - ); - Widget get greenBox => Container( - color: Colors.green, - height: 40, - width: 20, - ); - Widget get blackBox => Container( - color: Colors.black, - height: 10, - width: 10, - ); - Widget get purpleBox => Container( - color: Colors.purple, - height: 20, - width: 20, - ); - Widget get orangeBox => Container( - color: Colors.orange, - height: 80, - width: 20, - ); - Widget get cyanBox => Container( - color: Colors.cyanAccent, - height: 10, - width: 20, - ); - - Widget _buildItem(mode) => Wrap( - textDirection: mode, - runSpacing: 10, - spacing: 10, - children: [ - yellowBox, redBox, greenBox, cyanBox, - blackBox, purpleBox, orangeBox, - ], - ); -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node5_verticalDirection.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node5_verticalDirection.dart deleted file mode 100644 index 9c981319e..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node5_verticalDirection.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class VerticalDirectionWrap extends StatelessWidget { - const VerticalDirectionWrap({super.key}); - - @override - Widget build(BuildContext context) { - return Wrap( - children: VerticalDirection.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 100, - color: Colors.grey.withAlpha(88), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget get yellowBox => Container( - color: Colors.yellow, - height: 30, - width: 50, - ); - - Widget get redBox => Container( - color: Colors.red, - height: 40, - width: 40, - ); - Widget get greenBox => Container( - color: Colors.green, - height: 40, - width: 20, - ); - Widget get blackBox => Container( - color: Colors.black, - height: 10, - width: 10, - ); - Widget get purpleBox => Container( - color: Colors.purple, - height: 20, - width: 20, - ); - Widget get orangeBox => Container( - color: Colors.orange, - height: 80, - width: 20, - ); - Widget get cyanBox => Container( - color: Colors.cyanAccent, - height: 10, - width: 20, - ); - - Widget _buildItem(mode) => Wrap( - verticalDirection: mode, - direction: Axis.vertical, - runSpacing: 10, - spacing: 10, - children: [ - yellowBox, redBox, greenBox, cyanBox, - blackBox, purpleBox, orangeBox, - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_de_DE.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_de_DE.json deleted file mode 100644 index 8571c8e0f..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "Fehler-Widget", - "info": "Ein Widget zur Anzeige einer Fehlermeldung, roter Hintergrund mit gelber Schrift, wird häufig während der Entwicklung gesehen, wird jedoch normalerweise nicht verwendet.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ErrorWidget", - "desc": [ - "Parameter: Angezeigte Nachricht 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_en_US.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_en_US.json deleted file mode 100644 index 6f7a4a4d5..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "Error Component", - "info": "A component used to display an error message, with a red background and yellow text, often seen during development, generally not used.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ErrorWidget", - "desc": [ - "Parameters: Display Message 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_es_ES.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_es_ES.json deleted file mode 100644 index d94a2a8d6..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "Widget de Error", - "info": "Un componente utilizado para mostrar un mensaje de error, con fondo rojo y letras amarillas, se ve con frecuencia durante el desarrollo y generalmente no se utiliza.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ErrorWidget", - "desc": [ - "Parámetro de entrada: mensaje a mostrar 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_fr_FR.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_fr_FR.json deleted file mode 100644 index 7ad1db599..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "Widget d'erreur", - "info": "Un widget utilisé pour afficher un message d'erreur, fond rouge avec texte jaune, souvent vu pendant le développement, généralement non utilisé.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'ErrorWidget", - "desc": [ - "Paramètre : message à afficher 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_it_IT.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_it_IT.json deleted file mode 100644 index cd33392c7..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "Widget di Errore", - "info": "Componente utilizzato per visualizzare un messaggio di errore, sfondo rosso con testo giallo, spesso visto durante lo sviluppo, generalmente non utilizzato.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di ErrorWidget", - "desc": [ - "Parametri : Messaggio da visualizzare 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ja_JP.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ja_JP.json deleted file mode 100644 index 08edc5075..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "エラーウィジェット", - "info": "エラーメッセージを表示するためのコンポーネントです。赤い背景に黄色い文字で表示され、開発中によく見かけますが、通常は使用しません。", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ErrorWidgetの基本使用", - "desc": [ - "引数 : 表示メッセージ 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ko_KR.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ko_KR.json deleted file mode 100644 index 0e7f2aad5..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "에러 위젯", - "info": "에러 메시지를 표시하는 위젯으로, 빨간 배경에 노란 글씨로 표시되며, 개발 과정에서 자주 보이지만 일반적으로 사용되지 않습니다.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ErrorWidget 기본 사용법", - "desc": [ - "입력 매개변수 : 표시할 정보 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_pt_PT.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_pt_PT.json deleted file mode 100644 index eabf63283..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "Componente de Erro", - "info": "Componente usado para exibir uma mensagem de erro, com fundo vermelho e texto amarelo, frequentemente visto durante o desenvolvimento, geralmente não é utilizado.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ErrorWidget", - "desc": [ - "Parâmetro: Mensagem a ser exibida 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ru_RU.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ru_RU.json deleted file mode 100644 index a17ca651d..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "Виджет ошибки", - "info": "Компонент для отображения сообщения об ошибке, красный фон с желтым текстом, часто встречается в процессе разработки, обычно не используется.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ErrorWidget", - "desc": [ - "Параметры: Отображаемое сообщение 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_zh-CN.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_zh-CN.json deleted file mode 100644 index f96ff1acf..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "错误组件", - "info": "用于显示一个错误信息的组件,红底黄字,在开发过程中经常看到,一般不使用。", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ErrorWidget基本使用", - "desc": [ - "入参 : 显示信息 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/node1_base.dart b/modules/widget_system/widgets/lib/Other/ErrorWidget/node1_base.dart deleted file mode 100644 index 55c38f3f9..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/node1_base.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class ErrorWidgetDemo extends StatelessWidget { - const ErrorWidgetDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ErrorWidget( - 'I am Error ErrorWidget\n' - 'But now, there has no error.' - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_de_DE.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_de_DE.json deleted file mode 100644 index 106ca6ea6..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_de_DE.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "Listenradansicht", - "info": "Ein Ansichtsfenster, das eine Liste von Kindern in einem zylindrischen Rad anzeigt. Es ist die zugrunde liegende Abhängigkeit von ListWheelScrollView und CupertinoPicker", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einfache Verwendung von ListWheelViewport", - "desc": [ - "【itemExtent】 : Axiale Item-Größe 【double】", - "【offset】 : Ansichtsfenster-Versatz 【ViewportOffset】", - "【childDelegate】 : Kinderdelegat-Konstruktor 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "Perspektivische Effekte von ListWheelViewport", - "desc": [ - "【perspective】 : Perspektivparameter 【double】", - "【squeeze】 : Quetschwert 【double】", - "【diameterRatio】 : Durchmesserverhältnis 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "Vergrößerung von ListWheelViewport", - "desc": [ - "【useMagnifier】 : Ob vergrößert wird 【bool】", - "【magnification】 : Vergrößerungsverhältnis 【double】", - "【clipBehavior】 : Schneidverhalten 【Clip】", - "【renderChildrenOutsideViewport】 : Ob außerhalb des Sichtfelds gerendert wird 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "Versatz und Transparenz", - "desc": [ - "【offAxisFraction】 : Achsenzentrum-Versatzverhältnis 【double】", - "【overAndUnderCenterOpacity】 : Transparenz außerhalb des Vergrößerers 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_en_US.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_en_US.json deleted file mode 100644 index ce02c9fd0..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_en_US.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "List Wheel Viewport", - "info": "A viewport that displays a list of children on a cylindrical wheel, which is the underlying dependency of ListWheelScrollView and CupertinoPicker", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ListWheelViewport", - "desc": [ - "【itemExtent】 : Axial item size 【double】", - "【offset】 : Viewport offset 【ViewportOffset】", - "【childDelegate】 : Child delegate constructor 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "Perspective Effect of ListWheelViewport", - "desc": [ - "【perspective】 : Perspective parameter 【double】", - "【squeeze】 : Squeeze value 【double】", - "【diameterRatio】 : Diameter ratio 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "Magnification of ListWheelViewport", - "desc": [ - "【useMagnifier】 : Whether to magnify 【bool】", - "【magnification】 : Magnification ratio 【double】", - "【clipBehavior】 : Clip behavior 【Clip】", - "【renderChildrenOutsideViewport】 : Whether to render children outside the viewport 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "Offset and Opacity", - "desc": [ - "【offAxisFraction】 : Axis center offset ratio 【double】", - "【overAndUnderCenterOpacity】 : Opacity outside the magnifier 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_es_ES.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_es_ES.json deleted file mode 100644 index d90a4dcb6..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_es_ES.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "Vista de rueda de lista", - "info": "Una vista que muestra una lista de hijos en una rueda cilíndrica, es la dependencia subyacente de ListWheelScrollView y CupertinoPicker", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso simple de ListWheelViewport", - "desc": [ - "【itemExtent】 : Tamaño del ítem en el eje 【double】", - "【offset】 : Desplazamiento de la vista 【ViewportOffset】", - "【childDelegate】 : Delegado de construcción de hijos 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "Efecto de perspectiva en ListWheelViewport", - "desc": [ - "【perspective】 : Parámetro de perspectiva 【double】", - "【squeeze】 : Valor de compresión 【double】", - "【diameterRatio】 : Relación de diámetro 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "Ampliación en ListWheelViewport", - "desc": [ - "【useMagnifier】 : Si se amplía 【bool】", - "【magnification】 : Proporción de ampliación 【double】", - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【renderChildrenOutsideViewport】 : Si se renderiza fuera de la vista 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "Desplazamiento y opacidad", - "desc": [ - "【offAxisFraction】 : Relación de desplazamiento del centro del eje 【double】", - "【overAndUnderCenterOpacity】 : Opacidad fuera del amplificador 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_fr_FR.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_fr_FR.json deleted file mode 100644 index 21e6c37f6..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_fr_FR.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "Vue de roue de liste", - "info": "Une vue qui affiche une liste d'enfants sur une roue cylindrique, dépendance sous-jacente de ListWheelScrollView et CupertinoPicker", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation simple de ListWheelViewport", - "desc": [ - "【itemExtent】 : Taille de l'item axial 【double】", - "【offset】 : Décalage de la vue 【ViewportOffset】", - "【childDelegate】 : Constructeur de délégué enfant 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "Effet de perspective de ListWheelViewport", - "desc": [ - "【perspective】 : Paramètre de perspective 【double】", - "【squeeze】 : Valeur de compression 【double】", - "【diameterRatio】 : Ratio de diamètre 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "Agrandissement de ListWheelViewport", - "desc": [ - "【useMagnifier】 : Agrandir ou non 【bool】", - "【magnification】 : Taux d'agrandissement 【double】", - "【clipBehavior】 : Comportement de découpage 【Clip】", - "【renderChildrenOutsideViewport】 : Rendu hors de la vue 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "Décalage et opacité", - "desc": [ - "【offAxisFraction】 : Ratio de décalage du centre de l'axe 【double】", - "【overAndUnderCenterOpacity】 : Opacité en dehors de l'amplificateur 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_it_IT.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_it_IT.json deleted file mode 100644 index aebbbc3fb..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_it_IT.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "Vista della ruota di scorrimento", - "info": "Una vista che visualizza un elenco di elementi in una ruota cilindrica, è la dipendenza sottostante di ListWheelScrollView e CupertinoPicker", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso semplice di ListWheelViewport", - "desc": [ - "【itemExtent】 : Dimensione dell'elemento lungo l'asse 【double】", - "【offset】 : Offset della vista 【ViewportOffset】", - "【childDelegate】 : Delegato di costruzione dei figli 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "Effetto prospettico di ListWheelViewport", - "desc": [ - "【perspective】 : Parametro di prospettiva 【double】", - "【squeeze】 : Valore di compressione 【double】", - "【diameterRatio】 : Rapporto del diametro 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "Ingrandimento di ListWheelViewport", - "desc": [ - "【useMagnifier】 : Se ingrandire 【bool】", - "【magnification】 : Rapporto di ingrandimento 【double】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【renderChildrenOutsideViewport】 : Se renderizzare i figli fuori dalla vista 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "Offset e trasparenza", - "desc": [ - "【offAxisFraction】 : Rapporto di offset del centro dell'asse 【double】", - "【overAndUnderCenterOpacity】 : Trasparenza fuori dall'ingranditore 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ja_JP.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ja_JP.json deleted file mode 100644 index ac889c042..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ja_JP.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "リストホイールビューポート", - "info": "子リストを円柱状のホイール上に表示するビューポートで、ListWheelScrollView、CupertinoPickerの基盤となる依存関係です", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListWheelViewport の簡単な使用", - "desc": [ - "【itemExtent】 : 軸方向のアイテムサイズ 【double】", - "【offset】 : ビューポートのオフセット 【ViewportOffset】", - "【childDelegate】 : 子デリゲートコンストラクタ 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "ListWheelViewport の遠近効果", - "desc": [ - "【perspective】 : 遠近パラメータ 【double】", - "【squeeze】 : 圧縮値 【double】", - "【diameterRatio】 : 直径比率 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "ListWheelViewport の拡大", - "desc": [ - "【useMagnifier】 : 拡大するかどうか 【bool】", - "【magnification】 : 拡大比率 【double】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【renderChildrenOutsideViewport】 : 視野外の子をレンダリングするか 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "オフセットと透明度", - "desc": [ - "【offAxisFraction】 : 軸中心のオフセット比率 【double】", - "【overAndUnderCenterOpacity】 : 拡大器外の透明度 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ko_KR.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ko_KR.json deleted file mode 100644 index 8e74bc4c2..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ko_KR.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "리스트 휠 뷰포트", - "info": "자식 리스트를 원통형 휠에 표시하는 뷰포트로, ListWheelScrollView, CupertinoPicker의 기반이 됨", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListWheelViewport 기본 사용법", - "desc": [ - "【itemExtent】 : 축 방향 아이템 크기 【double】", - "【offset】 : 뷰포트 오프셋 【ViewportOffset】", - "【childDelegate】 : 자식 위임 생성자 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "ListWheelViewport 원근 효과", - "desc": [ - "【perspective】 : 원근 매개변수 【double】", - "【squeeze】 : 압축 값 【double】", - "【diameterRatio】 : 직경 비율 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "ListWheelViewport 확대", - "desc": [ - "【useMagnifier】 : 확대 여부 【bool】", - "【magnification】 : 확대 비율 【double】", - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【renderChildrenOutsideViewport】 : 시야 밖 렌더링 여부 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "오프셋과 투명도", - "desc": [ - "【offAxisFraction】 : 축 중심 오프셋 비율 【double】", - "【overAndUnderCenterOpacity】 : 확대기 외부 투명도 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_pt_PT.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_pt_PT.json deleted file mode 100644 index 5063eb01a..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_pt_PT.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "Porta de Roda de Lista", - "info": "Uma porta que exibe uma lista de filhos em uma roda cilíndrica, é a dependência subjacente de ListWheelScrollView e CupertinoPicker", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Simples de ListWheelViewport", - "desc": [ - "【itemExtent】 : Tamanho axial do item 【double】", - "【offset】 : Deslocamento da porta 【ViewportOffset】", - "【childDelegate】 : Construtor do delegado de filhos 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "Efeito de Perspectiva de ListWheelViewport", - "desc": [ - "【perspective】 : Parâmetro de perspectiva 【double】", - "【squeeze】 : Valor de compressão 【double】", - "【diameterRatio】 : Razão de diâmetro 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "Ampliação de ListWheelViewport", - "desc": [ - "【useMagnifier】 : Se amplia 【bool】", - "【magnification】 : Proporção de ampliação 【double】", - "【clipBehavior】 : Comportamento de corte 【Clip】", - "【renderChildrenOutsideViewport】 : Se renderiza fora do campo de visão 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "Deslocamento e Transparência", - "desc": [ - "【offAxisFraction】 : Razão de deslocamento do centro do eixo 【double】", - "【overAndUnderCenterOpacity】 : Transparência fora do ampliador 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ru_RU.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ru_RU.json deleted file mode 100644 index 8b6bb345b..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ru_RU.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "Вид списка колеса прокрутки", - "info": "Вид, который отображает список детей в виде цилиндрического колеса прокрутки, является базовой зависимостью для ListWheelScrollView и CupertinoPicker", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Простое использование ListWheelViewport", - "desc": [ - "【itemExtent】 : Размер элемента по оси 【double】", - "【offset】 : Смещение вида 【ViewportOffset】", - "【childDelegate】 : Делегат для создания детей 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "Эффект перспективы ListWheelViewport", - "desc": [ - "【perspective】 : Параметр перспективы 【double】", - "【squeeze】 : Значение сжатия 【double】", - "【diameterRatio】 : Коэффициент диаметра 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "Увеличение ListWheelViewport", - "desc": [ - "【useMagnifier】 : Использовать ли увеличение 【bool】", - "【magnification】 : Коэффициент увеличения 【double】", - "【clipBehavior】 : Поведение обрезки 【Clip】", - "【renderChildrenOutsideViewport】 : Рендерить ли детей за пределами вида 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "Смещение и прозрачность", - "desc": [ - "【offAxisFraction】 : Отношение смещения от центра оси 【double】", - "【overAndUnderCenterOpacity】 : Прозрачность за пределами увеличителя 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_zh-CN.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_zh-CN.json deleted file mode 100644 index fb86f4ea3..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_zh-CN.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "列表滚轮视口", - "info": "一个将孩子列表显示在柱状滚轮上的视口,是 ListWheelScrollView、CupertinoPicker 的底层依赖", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListWheelViewport 简单使用", - "desc": [ - "【itemExtent】 : 轴向item尺寸 【double】", - "【offset】 : 视口偏移 【ViewportOffset】", - "【childDelegate】 : 孩子代理构造器 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "ListWheelViewport 透视效果", - "desc": [ - "【perspective】 : 透视参数 【double】", - "【squeeze】 : 挤压值 【double】", - "【diameterRatio】 : 直径分率 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "ListWheelViewport 放大", - "desc": [ - "【useMagnifier】 : 是否放大 【bool】", - "【magnification】 : 放大比例 【double】", - "【clipBehavior】 : 剪裁行为 【Clip】", - "【renderChildrenOutsideViewport】 : 出视野是否渲染 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "偏移和透明度", - "desc": [ - "【offAxisFraction】 : 轴中心偏移比 【double】", - "【overAndUnderCenterOpacity】 : 放大器之外的透明度 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/node1_base.dart b/modules/widget_system/widgets/lib/Other/ListWheelViewport/node1_base.dart deleted file mode 100644 index 1aeb4391f..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/node1_base.dart +++ /dev/null @@ -1,65 +0,0 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ListWheelViewportDemo extends StatelessWidget { - const ListWheelViewportDemo({super.key}); - - List get data => [ - Colors.blue[50]!, - Colors.blue[100]!, - Colors.blue[200]!, - Colors.blue[300]!, - Colors.blue[400]!, - Colors.blue[500]!, - Colors.blue[600]!, - Colors.blue[700]!, - Colors.blue[800]!, - Colors.blue[900]!, - Colors.blue[800]!, - Colors.blue[700]!, - Colors.blue[600]!, - Colors.blue[500]!, - Colors.blue[400]!, - Colors.blue[300]!, - Colors.blue[200]!, - Colors.blue[100]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 250, - width: 320, - child: Scrollable( - axisDirection: AxisDirection.down, - physics: const BouncingScrollPhysics(), - dragStartBehavior: DragStartBehavior.start, - viewportBuilder: (ctx, position) => ListWheelViewport( - itemExtent: 100, - offset: position, - childDelegate: ListWheelChildLoopingListDelegate( - children: data.map((e) => _buildItem(e)).toList()), - )), - ); - } - - Widget _buildItem(Color color) => Container( - alignment: Alignment.center, - color: color, - child: Text(colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ), - ])), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/node2_perspective.dart b/modules/widget_system/widgets/lib/Other/ListWheelViewport/node2_perspective.dart deleted file mode 100644 index ea8730168..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/node2_perspective.dart +++ /dev/null @@ -1,68 +0,0 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ListWheelViewportDemo2 extends StatelessWidget { - const ListWheelViewportDemo2({super.key}); - - List get data => [ - Colors.blue[50]!, - Colors.blue[100]!, - Colors.blue[200]!, - Colors.blue[300]!, - Colors.blue[400]!, - Colors.blue[500]!, - Colors.blue[600]!, - Colors.blue[700]!, - Colors.blue[800]!, - Colors.blue[900]!, - Colors.blue[800]!, - Colors.blue[700]!, - Colors.blue[600]!, - Colors.blue[500]!, - Colors.blue[400]!, - Colors.blue[300]!, - Colors.blue[200]!, - Colors.blue[100]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 250, - width: 320, - child: Scrollable( - axisDirection: AxisDirection.down, - physics: const BouncingScrollPhysics(), - dragStartBehavior: DragStartBehavior.start, - viewportBuilder: (ctx, position) => ListWheelViewport( - perspective: 0.008, - squeeze: 1, - diameterRatio: 2, - itemExtent: 50, - offset: position, - childDelegate: ListWheelChildLoopingListDelegate( - children: data.map((e) => _buildItem(e)).toList()), - )), - ); - } - - Widget _buildItem(Color color) => Container( - alignment: Alignment.center, - color: color, - child: Text(colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ])), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/node3_magnifier.dart b/modules/widget_system/widgets/lib/Other/ListWheelViewport/node3_magnifier.dart deleted file mode 100644 index 7b98d643b..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/node3_magnifier.dart +++ /dev/null @@ -1,70 +0,0 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ListWheelViewportDemo3 extends StatelessWidget { - const ListWheelViewportDemo3({super.key}); - - List get data => [ - Colors.blue[50]!, - Colors.blue[100]!, - Colors.blue[200]!, - Colors.blue[300]!, - Colors.blue[400]!, - Colors.blue[500]!, - Colors.blue[600]!, - Colors.blue[700]!, - Colors.blue[800]!, - Colors.blue[900]!, - Colors.blue[800]!, - Colors.blue[700]!, - Colors.blue[600]!, - Colors.blue[500]!, - Colors.blue[400]!, - Colors.blue[300]!, - Colors.blue[200]!, - Colors.blue[100]!, - ]; - - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 250, - width: 320, - // color: Colors.red, - child: Scrollable( - axisDirection: AxisDirection.down, - physics: const BouncingScrollPhysics(), - dragStartBehavior: DragStartBehavior.start, - viewportBuilder: (ctx, position) => ListWheelViewport( - perspective: 0.008, - squeeze: 1, - diameterRatio: 2, - itemExtent: 50, - useMagnifier: true, - magnification: 2, - renderChildrenOutsideViewport: true, - clipBehavior: Clip.none, - offset: position, - childDelegate: ListWheelChildLoopingListDelegate( - children: data.map((e) => _buildItem(e)).toList()), - )), - ); - } - - Widget _buildItem(Color color) => Container( - alignment: Alignment.center, - color: color, - child: Text(colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ])), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/node4_opacity.dart b/modules/widget_system/widgets/lib/Other/ListWheelViewport/node4_opacity.dart deleted file mode 100644 index 098261a8a..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/node4_opacity.dart +++ /dev/null @@ -1,71 +0,0 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ListWheelViewportDemo4 extends StatelessWidget { - const ListWheelViewportDemo4({super.key}); - - List get data => [ - Colors.blue[50]!, - Colors.blue[100]!, - Colors.blue[200]!, - Colors.blue[300]!, - Colors.blue[400]!, - Colors.blue[500]!, - Colors.blue[600]!, - Colors.blue[700]!, - Colors.blue[800]!, - Colors.blue[900]!, - Colors.blue[800]!, - Colors.blue[700]!, - Colors.blue[600]!, - Colors.blue[500]!, - Colors.blue[400]!, - Colors.blue[300]!, - Colors.blue[200]!, - Colors.blue[100]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 250, - width: 320, - // color: Colors.red, - child: Scrollable( - axisDirection: AxisDirection.down, - physics: const BouncingScrollPhysics(), - dragStartBehavior: DragStartBehavior.start, - viewportBuilder: (ctx, position) => ListWheelViewport( - perspective: 0.008, - squeeze: 1, - diameterRatio: 2, - offAxisFraction: 0.2, - overAndUnderCenterOpacity: 0.4, - itemExtent: 50, - offset: position, - childDelegate: ListWheelChildLoopingListDelegate( - children: data.map((e) => _buildItem(e)).toList()), - )), - ); - } - - Widget _buildItem(Color color) => Container( - alignment: Alignment.center, - color: color, - child: Text(colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ])), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_de_DE.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_de_DE.json deleted file mode 100644 index b54faf2e7..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "Leistungsüberlagerung", - "info": "Ermöglicht das einfache Aktivieren von zwei Leistungsüberwachungsdiagrammen, um die Änderungen der Bildrate beim Aktualisieren der Oberfläche zu verfolgen.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PerformanceOverlay", - "desc": [ - "Mit PerformanceOverlay.allEnabled können alle Überwachungsoptionen gestartet werden." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_en_US.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_en_US.json deleted file mode 100644 index 5c7aa36a1..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "Performance Overlay", - "info": "It is very convenient to enable two bar charts for performance monitoring, making it easy to see the changes in frame rate when refreshing the interface.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PerformanceOverlay", - "desc": [ - "Using PerformanceOverlay.allEnabled can start all monitoring items." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_es_ES.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_es_ES.json deleted file mode 100644 index 5af74d604..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "Superposición de Rendimiento", - "info": "Permite habilitar muy convenientemente dos gráficos de barras para monitorear el rendimiento, facilitando la visualización de los cambios en la tasa de cuadros al actualizar la interfaz.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de PerformanceOverlay", - "desc": [ - "Usar PerformanceOverlay.allEnabled permite iniciar todos los elementos de monitoreo." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_fr_FR.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_fr_FR.json deleted file mode 100644 index c60ad9270..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "Superposition de Performance", - "info": "Permet d'activer très facilement deux graphiques de surveillance des performances, facilitant la visualisation des variations de fréquence d'images lors du rafraîchissement de l'interface.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PerformanceOverlay", - "desc": [ - "Utiliser PerformanceOverlay.allEnabled pour démarrer tous les éléments de surveillance." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_it_IT.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_it_IT.json deleted file mode 100644 index f95c46843..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "Sovrapposizione delle Prestazioni", - "info": "Può attivare molto comodamente due grafici a barre per il monitoraggio delle prestazioni, facilitando la visualizzazione delle variazioni della frequenza dei fotogrammi durante l'aggiornamento dell'interfaccia.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di PerformanceOverlay", - "desc": [ - "Utilizzando PerformanceOverlay.allEnabled è possibile avviare tutti gli elementi di monitoraggio." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ja_JP.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ja_JP.json deleted file mode 100644 index 9523d59b6..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "パフォーマンスオーバーレイ", - "info": "パフォーマンスモニタリングの2つの柱グラフを非常に簡単に有効にでき、インターフェースのリフレッシュ時のフレームレートの変化を簡単に確認できます。", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PerformanceOverlayの基本使用", - "desc": [ - "PerformanceOverlay.allEnabledを使用してすべての監視項目を開始できます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ko_KR.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ko_KR.json deleted file mode 100644 index 6d4084ca3..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "성능 오버레이", - "info": "성능 모니터링을 매우 편리하게 시작할 수 있는 두 개의 막대 그래프로, 화면을 새로 고칠 때 프레임 속도 변화를 쉽게 확인할 수 있습니다.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PerformanceOverlay 기본 사용", - "desc": [ - "PerformanceOverlay.allEnabled를 사용하여 모든 모니터링 항목을 시작할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_pt_PT.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_pt_PT.json deleted file mode 100644 index e17a52366..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "Camada de Desempenho", - "info": "Permite ativar de forma muito conveniente dois gráficos de barras para monitorizar o desempenho, facilitando a visualização das mudanças na taxa de frames ao atualizar a interface.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do PerformanceOverlay", - "desc": [ - "Usar PerformanceOverlay.allEnabled permite iniciar todos os itens de monitorização." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ru_RU.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ru_RU.json deleted file mode 100644 index 85386e6a8..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "Наложение производительности", - "info": "Очень удобно включить два столбчатых графика для мониторинга производительности, чтобы легко отслеживать изменения частоты кадров при обновлении интерфейса.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PerformanceOverlay", - "desc": [ - "Использование PerformanceOverlay.allEnabled позволяет начать все элементы мониторинга." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_zh-CN.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_zh-CN.json deleted file mode 100644 index 8618b7b89..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "性能浮层", - "info": "可以非常方便地开启性能监测的两个柱图,方便查看刷新界面时帧率的变化情况。", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PerformanceOverlay基本使用", - "desc": [ - "使用PerformanceOverlay.allEnabled可以开始所有的监测项。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/node1_base.dart b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/node1_base.dart deleted file mode 100644 index 831fb7fad..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/node1_base.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class PerformanceOverlayDemo extends StatelessWidget { - const PerformanceOverlayDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return PerformanceOverlay.allEnabled( - - ); - } -} - diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_de_DE.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_de_DE.json deleted file mode 100644 index 2e357466f..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "Originalbild", - "info": "Ist die Kernkomponente zur Implementierung der Image-Komponente, kann das Image der UI anzeigen, die grundlegenden Eigenschaften sind identisch mit Image, wird selten allein verwendet.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RawImage", - "desc": [ - "【image】 : Bild 【ui.Image】", - "【width】 : Breite 【int】", - "【height】: Höhe 【int】", - "【isAntiAlias】: Anti-Aliasing 【bool】", - "【filterQuality】: Filterqualität 【FilterQuality】", - "Viele Eigenschaften sind identisch mit Image, siehe dort." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_en_US.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_en_US.json deleted file mode 100644 index 46bb1bf66..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "Original Image", - "info": "It is the core component that implements the Image component, can display the ui.Image, and has the same basic properties as Image. It is rarely used alone.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RawImage", - "desc": [ - "【image】: Image 【ui.Image】", - "【width】: Width 【int】", - "【height】: Height 【int】", - "【isAntiAlias】: Whether to anti-alias 【bool】", - "【filterQuality】: Filter quality 【FilterQuality】", - "Many properties are the same as Image, see details there." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_es_ES.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_es_ES.json deleted file mode 100644 index 8ea04832d..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "Imagen Original", - "info": "Es el componente central que implementa el componente Image, puede mostrar la Image de la interfaz de usuario, las propiedades básicas son las mismas que Image, rara vez se usa por separado.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RawImage", - "desc": [ - "【image】: Imagen 【ui.Image】", - "【width】: Ancho 【int】", - "【height】: Alto 【int】", - "【isAntiAlias】: Si es antialiasing 【bool】", - "【filterQuality】: Calidad de filtro 【FilterQuality】", - "Muchas propiedades son las mismas que Image, consulte para más detalles." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_fr_FR.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_fr_FR.json deleted file mode 100644 index 7db141988..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "Image originale", - "info": "C'est le composant central pour implémenter le composant Image, capable d'afficher une image UI. Ses propriétés de base sont similaires à celles de Image, et il est rarement utilisé seul.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RawImage", - "desc": [ - "【image】 : Image 【ui.Image】", - "【width】 : Largeur 【int】", - "【height】: Hauteur 【int】", - "【isAntiAlias】: Anti-crénelage 【bool】", - "【filterQuality】: Qualité de filtrage 【FilterQuality】", - "De nombreuses propriétés sont similaires à Image, voir les détails." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_it_IT.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_it_IT.json deleted file mode 100644 index 91c6ac671..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "Immagine originale", - "info": "È il componente principale per implementare il componente Image, può visualizzare l'Image dell'interfaccia utente, le proprietà di base sono le stesse di Image, generalmente raramente usato da solo.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di RawImage", - "desc": [ - "【image】 : Immagine 【ui.Image】", - "【width】 : Larghezza 【int】", - "【height】: Altezza 【int】", - "【isAntiAlias】: Anti-alias 【bool】", - "【filterQuality】: Qualità del filtro 【FilterQuality】", - "Molte proprietà sono le stesse di Image, vedi dettagli." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_ja_JP.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_ja_JP.json deleted file mode 100644 index aae1a631b..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "元画像", - "info": "Imageコンポーネントのコアコンポーネントであり、uiのImageを表示できます。基本的な属性はImageと同じで、単独で使用されることはほとんどありません。", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawImageの基本使用", - "desc": [ - "【image】 : 画像 【ui.Image】", - "【width】 : 幅 【int】", - "【height】: 高さ 【int】", - "【isAntiAlias】: アンチエイリアスかどうか 【bool】", - "【filterQuality】: フィルタ品質 【FilterQuality】", - "多くの属性はImageと同じです。詳細はそちらを参照してください。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_ko_KR.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_ko_KR.json deleted file mode 100644 index b4b0dd6c4..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "원본 이미지", - "info": "Image 컴포넌트를 구현하는 핵심 컴포넌트로, ui의 Image를 표시할 수 있으며, 기본 속성은 Image와 동일하며, 일반적으로 단독으로 사용되지 않습니다.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawImage 기본 사용", - "desc": [ - "【image】 : 이미지 【ui.Image】", - "【width】 : 너비 【int】", - "【height】: 높이 【int】", - "【isAntiAlias】: 안티앨리어싱 여부 【bool】", - "【filterQuality】: 필터 품질 【FilterQuality】", - "많은 속성이 Image와 동일하니, 자세한 내용은 해당 항목을 참조하세요." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_pt_PT.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_pt_PT.json deleted file mode 100644 index bb06bf432..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "Imagem Original", - "info": "É o componente central que implementa o componente Image, pode exibir a Image da ui, as propriedades básicas são as mesmas que a Image, raramente é usado sozinho.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RawImage", - "desc": [ - "【image】 : Imagem 【ui.Image】", - "【width】 : Largura 【int】", - "【height】: Altura 【int】", - "【isAntiAlias】: Anti-aliasing 【bool】", - "【filterQuality】: Qualidade do Filtro 【FilterQuality】", - "Muitas propriedades são as mesmas que a Image, consulte para mais detalhes." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_ru_RU.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_ru_RU.json deleted file mode 100644 index 062b9d798..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "Исходное изображение", - "info": "Это основной компонент, реализующий компонент Image, который может отображать изображение UI. Основные свойства такие же, как у Image, и он редко используется отдельно.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RawImage", - "desc": [ - "【image】 : изображение 【ui.Image】", - "【width】 : ширина 【int】", - "【height】: высота 【int】", - "【isAntiAlias】: сглаживание 【bool】", - "【filterQuality】: качество фильтрации 【FilterQuality】", - "Многие свойства такие же, как у Image, подробнее см. в нем." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_zh-CN.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_zh-CN.json deleted file mode 100644 index b4b220896..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "原图片", - "info": "是实现Image组件的核心组件,可以显示ui的Image,基本属性同Image,一般很少单独使用。", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawImage基本使用", - "desc": [ - "【image】 : 图片 【ui.Image】", - "【width】 : 宽 【int】", - "【height】: 高 【int】", - "【isAntiAlias】: 是否抗锯齿 【bool】", - "【filterQuality】: 过滤质量 【FilterQuality】", - "很多属性同Image,详见之." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/node1_base.dart b/modules/widget_system/widgets/lib/Other/RawImage/node1_base.dart deleted file mode 100644 index 6c6512e6e..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/node1_base.dart +++ /dev/null @@ -1,82 +0,0 @@ -import 'dart:async'; -import 'dart:typed_data'; -import 'dart:ui' as ui; - -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - -class RawImageDemo extends StatefulWidget { - const RawImageDemo({Key? key}) : super(key: key); - - @override - _RawImageDemoState createState() => _RawImageDemoState(); -} - -class _RawImageDemoState extends State { - ui.Image? _image; - - @override - void initState() { - super.initState(); - _loadImageFromAssets('assets/images/icon_head.webp'); - } - - @override - Widget build(BuildContext context) { - if (_image == null) { - return const SizedBox( - width: 80, - height: 80, - ); - } - - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Column( - mainAxisSize: MainAxisSize.min, - children: [ - RawImage( - image: _image, - width: 150, - height: 150, - isAntiAlias: true, - filterQuality: FilterQuality.high, - ), - const Text('isAntiAlias: true'), - const Text('FilterQuality.high') - ], - ), - Column( - mainAxisSize: MainAxisSize.min, - children: [ - RawImage( - image: _image, - width: 150, - height: 150, - isAntiAlias: false, - ), - const Text('isAntiAlias: false'), - const Text('FilterQuality.low') - ], - ), - ], - ); - } - - void _loadImageFromAssets(String name) async { - _image = await loadImageFromAssets(name); - setState(() {}); - } - - //读取 assets 中的图片 - Future loadImageFromAssets(String path) async { - ByteData data = await rootBundle.load(path); - List bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); - return decodeImageFromList(Uint8List.fromList(bytes)); - } -} diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_de_DE.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_de_DE.json deleted file mode 100644 index 93d8f92c7..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "Stammkomponente", - "info": "Brücke zwischen RenderObject und Element-Baum.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in RenderObjectToWidgetAdapter", - "desc": [ - "【container】 : Rendering-Objekt 【RenderObjectWithChildMixin】", - "【child】 : Unterkomponente 【Widget】", - "【debugShortDescription】 : Debug-Kurzbeschreibung 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_en_US.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_en_US.json deleted file mode 100644 index ef938e9ea..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "Root Component", - "info": "The bridge between RenderObject and Element tree.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to RenderObjectToWidgetAdapter", - "desc": [ - "【container】 : Render object 【RenderObjectWithChildMixin】", - "【child】 : Child component 【Widget】", - "【debugShortDescription】 : Debugging introduction 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_es_ES.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_es_ES.json deleted file mode 100644 index 9120b7422..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "Componente raíz", - "info": "Puente entre RenderObject y el árbol de Element.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a RenderObjectToWidgetAdapter", - "desc": [ - "【container】 : Objeto de renderizado 【RenderObjectWithChildMixin】", - "【child】 : Componente hijo 【Widget】", - "【debugShortDescription】 : Descripción corta de depuración 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_fr_FR.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_fr_FR.json deleted file mode 100644 index ea95a3db6..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "Composant racine", - "info": "Pont entre RenderObject et l'arbre Element.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à RenderObjectToWidgetAdapter", - "desc": [ - "【container】 : objet de rendu 【RenderObjectWithChildMixin】", - "【child】 : composant enfant 【Widget】", - "【debugShortDescription】 : description de débogage 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_it_IT.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_it_IT.json deleted file mode 100644 index a0e27e510..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "Componente radice", - "info": "Ponte tra RenderObject e l'albero degli Element.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a RenderObjectToWidgetAdapter", - "desc": [ - "【container】 : Oggetto di rendering 【RenderObjectWithChildMixin】", - "【child】 : Componente figlio 【Widget】", - "【debugShortDescription】 : Breve descrizione di debug 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ja_JP.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ja_JP.json deleted file mode 100644 index 206fc9fc7..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "ルートコンポーネント", - "info": "RenderObject と Element ツリーの橋渡し。", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RenderObjectToWidgetAdapter 紹介", - "desc": [ - "【container】 : レンダリングオブジェクト 【RenderObjectWithChildMixin】", - "【child】 : 子コンポーネント 【Widget】", - "【debugShortDescription】 : デバッグ概要 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ko_KR.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ko_KR.json deleted file mode 100644 index 35c8289a4..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "루트 컴포넌트", - "info": "RenderObject와 Element 트리의 다리.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RenderObjectToWidgetAdapter 소개", - "desc": [ - "【container】 : 렌더링 객체 【RenderObjectWithChildMixin】", - "【child】 : 자식 컴포넌트 【Widget】", - "【debugShortDescription】 : 디버그 간략 설명 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_pt_PT.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_pt_PT.json deleted file mode 100644 index dbbcb4585..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "Componente Raiz", - "info": "Ponte entre RenderObject e a árvore de Element.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao RenderObjectToWidgetAdapter", - "desc": [ - "【container】 : Objeto de renderização 【RenderObjectWithChildMixin】", - "【child】 : Componente filho 【Widget】", - "【debugShortDescription】 : Breve descrição de depuração 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ru_RU.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ru_RU.json deleted file mode 100644 index 39198c7b0..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "Корневой компонент", - "info": "Мост между RenderObject и деревом Element.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в RenderObjectToWidgetAdapter", - "desc": [ - "【container】 : Объект рендеринга 【RenderObjectWithChildMixin】", - "【child】 : Дочерний компонент 【Widget】", - "【debugShortDescription】 : Краткое описание для отладки 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_zh-CN.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_zh-CN.json deleted file mode 100644 index 4a6c2a0be..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "根组件", - "info": "RenderObject 和 Element 树的桥梁。", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RenderObjectToWidgetAdapter 介绍", - "desc": [ - "【container】 : 渲染对象 【RenderObjectWithChildMixin】", - "【child】 : 子组件 【Widget】", - "【debugShortDescription】 : 调试简介 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/node1_base.dart b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/node1_base.dart deleted file mode 100644 index fa1461921..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/node1_base.dart +++ /dev/null @@ -1,25 +0,0 @@ - -import 'package:flutter/material.dart'; - - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class RenderObjectToWidgetAdapterDemo extends StatelessWidget { - const RenderObjectToWidgetAdapterDemo({Key? key}) : super(key: key); - - final String info = - '该组件并没有什么太大的使用价值,但却非常有纪念意义。它是 Flutter 框架中最顶层的 Widget,它的 child 是 runApp 传入的组件,在 attachRootWidget 方法中被实例化。' - '它持有根渲染对象 RenderView ,负责创建根元素 RenderObjectToWidgetElement,是一个无名英雄,一个深藏功与名的组件。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_de_DE.json b/modules/widget_system/widgets/lib/Other/Table/desc_de_DE.json deleted file mode 100644 index f85552317..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "Tabellenkomponente", - "info": "Eine Komponente zur Anzeige von Tabellen, bei der Eigenschaften wie Rahmen, Spaltenbreite, Textrichtung usw. angegeben werden können. Der Kernobjekttyp ist TableRow.", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Table", - "desc": [ - "【children】: Widget-Liste 【List】", - "【columnWidths】: Spaltenbreite 【Map】", - "【defaultColumnWidth】: Standardspaltenbreite 【TableColumnWidth】", - "【border】: Rahmen 【TableBorder】", - "【textDirection】: Textrichtung 【TextDirection】", - "【defaultVerticalAlignment】: Vertikale Ausrichtung der Zellen 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_en_US.json b/modules/widget_system/widgets/lib/Other/Table/desc_en_US.json deleted file mode 100644 index 0e58923b8..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "Table Component", - "info": "A component for displaying tables, which can specify properties such as borders, column widths, text direction, etc. The core object type is TableRow.", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Table", - "desc": [ - "【children】: Component list 【List】", - "【columnWidths】: Column widths 【Map】", - "【defaultColumnWidth】: Default column width 【TableColumnWidth】", - "【border】: Border 【TableBorder】", - "【textDirection】: Text direction 【TextDirection】", - "【defaultVerticalAlignment】: Vertical alignment mode of cells 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_es_ES.json b/modules/widget_system/widgets/lib/Other/Table/desc_es_ES.json deleted file mode 100644 index 34ded9043..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "Componente de tabla", - "info": "Componente utilizado para mostrar tablas, se pueden especificar atributos como bordes, ancho de columna, dirección del texto, etc. El tipo de objeto principal es TableRow.", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Table", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【columnWidths】 : Ancho de columna 【Map】", - "【defaultColumnWidth】 : Ancho de columna predeterminado 【TableColumnWidth】", - "【border】 : Borde 【TableBorder】", - "【textDirection】 : Dirección del texto 【TextDirection】", - "【defaultVerticalAlignment】 : Modo de alineación vertical de la celda 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_fr_FR.json b/modules/widget_system/widgets/lib/Other/Table/desc_fr_FR.json deleted file mode 100644 index 790cee5c9..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "Composant de tableau", - "info": "Composant utilisé pour afficher des tableaux, permettant de spécifier des propriétés telles que les bordures, la largeur des colonnes, la direction du texte, etc. Le type d'objet principal est TableRow.", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Table", - "desc": [ - "【children】 : Liste des composants 【List】", - "【columnWidths】 : Largeur des colonnes 【Map】", - "【defaultColumnWidth】 : Largeur de colonne par défaut 【TableColumnWidth】", - "【border】 : Bordure 【TableBorder】", - "【textDirection】 : Direction du texte 【TextDirection】", - "【defaultVerticalAlignment】 : Mode d'alignement vertical des cellules 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_it_IT.json b/modules/widget_system/widgets/lib/Other/Table/desc_it_IT.json deleted file mode 100644 index f77e38ba2..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "Componente tabella", - "info": "Componente utilizzato per visualizzare tabelle, è possibile specificare attributi come bordi, larghezza delle colonne, direzione del testo, ecc. Il tipo di oggetto principale è TableRow.", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Table", - "desc": [ - "【children】 : Lista dei componenti 【List】", - "【columnWidths】 : Larghezza delle colonne 【Map】", - "【defaultColumnWidth】 : Larghezza predefinita delle colonne 【TableColumnWidth】", - "【border】 : Bordo 【TableBorder】", - "【textDirection】 : Direzione del testo 【TextDirection】", - "【defaultVerticalAlignment】 : Modalità di allineamento verticale delle celle 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_ja_JP.json b/modules/widget_system/widgets/lib/Other/Table/desc_ja_JP.json deleted file mode 100644 index 63bdadaed..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "テーブルコンポーネント", - "info": "テーブルを表示するためのコンポーネントで、境界線、列幅、テキストの方向などの属性を指定できます。コアオブジェクトタイプはTableRowです。", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "テーブルの基本使用", - "desc": [ - "【children】 : コンポーネントリスト 【List】", - "【columnWidths】 : 列幅 【Map】", - "【defaultColumnWidth】 : デフォルトの列幅 【TableColumnWidth】", - "【border】 : 境界線 【TableBorder】", - "【textDirection】 : テキストの方向 【TextDirection】", - "【defaultVerticalAlignment】 : セルの垂直方向の整列モード 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_ko_KR.json b/modules/widget_system/widgets/lib/Other/Table/desc_ko_KR.json deleted file mode 100644 index 1be344186..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "테이블 컴포넌트", - "info": "테이블을 표시하는 컴포넌트로, 테두리, 열 너비, 텍스트 방향 등의 속성을 지정할 수 있으며, 핵심 객체 유형은 TableRow입니다.", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Table 기본 사용법", - "desc": [ - "【children】 : 컴포넌트 리스트 【List】", - "【columnWidths】 : 열 너비 【Map】", - "【defaultColumnWidth】 : 기본 열 너비 【TableColumnWidth】", - "【border】 : 테두리 【TableBorder】", - "【textDirection】 : 텍스트 방향 【TextDirection】", - "【defaultVerticalAlignment】 : 셀 세로 정렬 모드 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_pt_PT.json b/modules/widget_system/widgets/lib/Other/Table/desc_pt_PT.json deleted file mode 100644 index c1a9f991e..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "Componente de Tabela", - "info": "Componente utilizado para exibir tabelas, pode especificar propriedades como bordas, largura das colunas, direção do texto, etc., o tipo de objeto principal é TableRow.", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico da Tabela", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【columnWidths】 : Largura das colunas 【Map】", - "【defaultColumnWidth】 : Largura padrão da coluna 【TableColumnWidth】", - "【border】 : Borda 【TableBorder】", - "【textDirection】 : Direção do texto 【TextDirection】", - "【defaultVerticalAlignment】 : Modo de alinhamento vertical das células 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_ru_RU.json b/modules/widget_system/widgets/lib/Other/Table/desc_ru_RU.json deleted file mode 100644 index c3045e214..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "Компонент таблицы", - "info": "Компонент для отображения таблиц, может задавать свойства границ, ширины столбцов, направления текста и т.д. Основной тип объекта - TableRow.", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Table", - "desc": [ - "【children】 : Список компонентов 【List】", - "【columnWidths】 : Ширина столбцов 【Map】", - "【defaultColumnWidth】 : Ширина столбца по умолчанию 【TableColumnWidth】", - "【border】 : Границы 【TableBorder】", - "【textDirection】 : Направление текста 【TextDirection】", - "【defaultVerticalAlignment】 : Режим выравнивания по вертикали в ячейке 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_zh-CN.json b/modules/widget_system/widgets/lib/Other/Table/desc_zh-CN.json deleted file mode 100644 index 25a10b9d0..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "表格组件", - "info": "用于展示表格的组件,可指定边线、列宽、文字方向等属性,核心对象类型是TableRow。", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Table基本使用", - "desc": [ - "【children】 : 组件列表 【List】", - "【columnWidths】 : 列宽 【Map】", - "【defaultColumnWidth】 : 默认列宽 【TableColumnWidth】", - "【border】 : 边线 【TableBorder】", - "【textDirection】 : 文字方向 【TextDirection】", - "【defaultVerticalAlignment】 : 单元格竖直方向对齐模式 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/node1_base.dart b/modules/widget_system/widgets/lib/Other/Table/node1_base.dart deleted file mode 100644 index 6e12bbfb9..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/node1_base.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomTable extends StatelessWidget { - const CustomTable({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - _ItemBean title = _ItemBean("单位称", "量纲", "单位", "单位名称", "单位符号"); - _ItemBean m = _ItemBean("长度", "L", "1m", "米", "m"); - _ItemBean kg = _ItemBean("质量", "M", "1Kg", "千克", "Kg"); - _ItemBean s = _ItemBean("时间", "T", "1s", "秒", "s"); - _ItemBean a = _ItemBean("安培", "Ι", "1A", "安培", "A"); - _ItemBean k = _ItemBean("热力学温度", "θ", "1K", "开尔文", "K"); - _ItemBean mol = _ItemBean("物质的量", "N", "1mol", "摩尔", "mol"); - _ItemBean cd = _ItemBean("发光强度", "J", "1cd", "坎德拉", "cd"); - - List<_ItemBean> data = [title, m, kg, s, a, k, mol, cd]; - - return SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: Table( - columnWidths: const { - 0: FixedColumnWidth(80.0), - 1: FixedColumnWidth(80.0), - 2: FixedColumnWidth(80.0), - 3: FixedColumnWidth(80.0), - 4: FixedColumnWidth(80.0), - }, - defaultVerticalAlignment: TableCellVerticalAlignment.middle, - border: TableBorder.all( - color: Colors.orangeAccent, width: 1.0, style: BorderStyle.solid), - children: data - .map((item) => TableRow(children: [ - Center( - child: Text( - item.name, - style: const TextStyle(color: Colors.blue), - )), - Padding( - padding: const EdgeInsets.all(8.0), - child: Center(child: Text(item.symbol)), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Center(child: Text(item.unitSymbol)), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Center(child: Text(item.unitName)), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Center(child: Text(item.unit)), - ), - ])) - .toList(), - ), - ); - } -} - -class _ItemBean { - String name; - String symbol; - String unit; - String unitName; - String unitSymbol; - - _ItemBean(this.name, this.symbol, this.unit, this.unitName, this.unitSymbol); -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_de_DE.json deleted file mode 100644 index 4d5f47cc7..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "Button-Leiste Thema", - "info": "Wird hauptsächlich verwendet, um Standardattribute für nachfolgende ButtonBar-Komponenten festzulegen. Es kann auch verwendet werden, um die Attribute des Standard-ButtonBarThemas zu erhalten.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ButtonBarTheme", - "desc": [ - "Kann die ButtonBarThemeData-Attribute festlegen, um Standardstile für nachfolgende ButtonBar-Komponenten zu setzen, wie Ausrichtung, Stil, Ränder usw. Es kann auch ButtonBarTheme.of verwendet werden, um die Theme-Attribute der ButtonBar zu erhalten." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_en_US.json deleted file mode 100644 index cb837bfe3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "Button Bar Theme", - "info": "Mainly used to set default properties for descendant ButtonBar components uniformly. It can also be used to obtain the properties of the default ButtonBarTheme.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ButtonBarTheme", - "desc": [ - "You can specify the ButtonBarThemeData properties to set default styles for descendant ButtonBar components, such as alignment, style, margins, etc. You can also use ButtonBarTheme.of to get the theme properties of ButtonBar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_es_ES.json deleted file mode 100644 index e249df4f1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "Tema de la barra de botones", - "info": "Principalmente se utiliza para establecer propiedades predeterminadas unificadas para los componentes ButtonBar descendientes, también se pueden obtener las propiedades del tema ButtonBarTheme predeterminado a través de este componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ButtonBarTheme", - "desc": [ - "Se puede especificar el atributo de datos ButtonBarThemeData para establecer el estilo predeterminado para los componentes ButtonBar descendientes, como la alineación, el estilo, los márgenes, etc. También se puede usar ButtonBarTheme.of para obtener las propiedades del tema ButtonBar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_fr_FR.json deleted file mode 100644 index f73070f19..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "Thème de la barre de boutons", - "info": "Principalement utilisé pour définir les propriétés par défaut des composants ButtonBar descendants. Il est également possible d'obtenir les propriétés du ButtonBarTheme par défaut via ce composant.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ButtonBarTheme", - "desc": [ - "Vous pouvez spécifier les propriétés de données de ButtonBarThemeData pour définir le style par défaut des composants ButtonBar descendants, tels que l'alignement, le style, les marges, etc. Vous pouvez également utiliser ButtonBarTheme.of pour obtenir les propriétés du thème ButtonBar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_it_IT.json deleted file mode 100644 index 9f3b9fa7a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "Tema della barra dei pulsanti", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti ButtonBar discendenti, oppure per ottenere le proprietà del tema ButtonBarTheme predefinito tramite questo componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ButtonBarTheme", - "desc": [ - "È possibile specificare le proprietà dei dati ButtonBarThemeData per impostare lo stile predefinito per i componenti ButtonBar discendenti, come allineamento, stile, margini, ecc. È anche possibile utilizzare ButtonBarTheme.of per ottenere le proprietà del tema ButtonBar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ja_JP.json deleted file mode 100644 index c74d681e7..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "ボタンバーテーマ", - "info": "主に子孫のButtonBarコンポーネントにデフォルトのプロパティを統一して設定するために使用されます。また、このコンポーネントを通じてデフォルトのButtonBarThemeのプロパティを取得することもできます。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonBarThemeの基本的な使用", - "desc": [ - "ButtonBarThemeDataデータ属性を指定して、子孫のButtonBarコンポーネントにデフォルトのスタイルを設定できます。例えば、配置、スタイル、余白などです。また、ButtonBarTheme.ofを使用してButtonBarのテーマプロパティを取得することもできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ko_KR.json deleted file mode 100644 index 50339341d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "버튼 바 테마", - "info": "주로 후손 ButtonBar 컴포넌트에 기본 속성을 통일적으로 설정하기 위해 사용되며, 이 컴포넌트를 통해 기본 ButtonBarTheme의 속성을 가져올 수도 있습니다.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonBarTheme 기본 사용법", - "desc": [ - "ButtonBarThemeData 데이터 속성을 지정하여 후손 ButtonBar 컴포넌트의 기본 스타일(예: 정렬 방식, 스타일, 여백 등)을 설정할 수 있습니다. 또한 ButtonBarTheme.of를 사용하여 ButtonBar의 테마 속성을 가져올 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_pt_PT.json deleted file mode 100644 index 058b46e08..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "Tema da Barra de Botões", - "info": "Principalmente usado para definir propriedades padrão para componentes ButtonBar descendentes, também pode ser usado para obter as propriedades do ButtonBarTheme padrão.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ButtonBarTheme", - "desc": [ - "Pode especificar as propriedades de dados do ButtonBarThemeData para definir o estilo padrão para componentes ButtonBar descendentes, como alinhamento, estilo, margens, etc. Também pode usar ButtonBarTheme.of para obter as propriedades do tema do ButtonBar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ru_RU.json deleted file mode 100644 index 5bdfa179a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "Тема панели кнопок", - "info": "В основном используется для установки стандартных свойств для компонентов ButtonBar у потомков, также можно получить свойства стандартной ButtonBarTheme через этот компонент.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ButtonBarTheme", - "desc": [ - "Можно указать свойства данных ButtonBarThemeData для установки стандартного стиля для компонентов ButtonBar у потомков, таких как выравнивание, стиль, отступы и т.д. Также можно использовать ButtonBarTheme.of для получения темы ButtonBar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_zh-CN.json deleted file mode 100644 index bcb82e0d5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "按钮条主题", - "info": "主要用于为后代的ButtonBar组件统一设置默认属性,也可以通过该组件获取默认ButtonBarTheme的属性。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonBarTheme基本使用", - "desc": [ - "可指定ButtonBarThemeData数据属性为【后代】的ButtonBar组件设置默认样式,如对齐方式、样式、边距等。也可以用ButtonBarTheme.of获取ButtonBar的主题属性。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/node1_base.dart deleted file mode 100644 index a05838c26..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/node1_base.dart +++ /dev/null @@ -1,44 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class ButtonBarThemeDemo extends StatelessWidget { - const ButtonBarThemeDemo({super.key}); - - @override - Widget build(BuildContext context) { - return ButtonBarTheme( - data: ButtonBarTheme.of(context).copyWith( - alignment: MainAxisAlignment.center, - buttonPadding: const EdgeInsets.symmetric(horizontal: 6), - overflowDirection: VerticalDirection.up, - buttonMinWidth: 150, - buttonHeight: 30, - buttonTextTheme: ButtonTextTheme.primary), - child: const TempButtonBar()); - } -} - -class TempButtonBar extends StatelessWidget { - const TempButtonBar({super.key}); - - @override - Widget build(BuildContext context) { - return ButtonBar( - alignment: MainAxisAlignment.center, - children: [ - ElevatedButton( - style: ElevatedButton.styleFrom(backgroundColor: Colors.blue), - child: const Text("1.Elevated"), onPressed: () {}), - OutlinedButton(child: const Text("2.Outlined"), onPressed: () {}), - TextButton( - style: ElevatedButton.styleFrom(backgroundColor: Colors.blue), - onPressed: () {}, - child: const Text("3.Text"), - ) - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_de_DE.json deleted file mode 100644 index 6deddb8ec..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "Schaltflächendesign", - "info": "Wird hauptsächlich verwendet, um Standardattribute für nachfolgende Schaltflächenkomponenten festzulegen. Es kann auch verwendet werden, um die Standardattribute der Schaltfläche zu erhalten.", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Verwendung von ButtonTheme", - "desc": [ - "Die Attribute sind die gleichen wie bei MaterialButton. Die Schaltflächendesign-Daten können über ButtonTheme.of abgerufen werden.", - "Es kann auch das Standarddesign für Schaltflächenkomponenten, die Nachkommen von ButtonTheme sind, festgelegt werden, einschließlich Farbe, Form, Größe usw." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_en_US.json deleted file mode 100644 index 86283d7df..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "Button Style", - "info": "Mainly used to set default properties for descendant Button-type components uniformly, and also to obtain the default properties of a Button through this component.", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonTheme Usage", - "desc": [ - "The property parameters are the same as MaterialButton. You can obtain button theme data through ButtonTheme.of, \"", - "and also set default styles for button components that are descendants of ButtonTheme, including color, shape, size, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_es_ES.json deleted file mode 100644 index d3a22e41b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "Tema del botón", - "info": "Se utiliza principalmente para establecer propiedades predeterminadas unificadas para los componentes de tipo Button en los descendientes, también se pueden obtener las propiedades predeterminadas del Button a través de este componente.", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de ButtonTheme", - "desc": [ - "Los parámetros de las propiedades son los mismos que MaterialButton, se pueden obtener los datos del tema del botón a través de ButtonTheme.of, \"", - "también se pueden establecer estilos predeterminados para los componentes de botón descendientes de ButtonTheme, incluyendo color, forma, tamaño, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_fr_FR.json deleted file mode 100644 index 729454fa9..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "Thème de bouton", - "info": "Principalement utilisé pour définir les propriétés par défaut des composants de type Button pour les descendants, ou pour obtenir les propriétés par défaut d'un Button via ce composant.", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de ButtonTheme", - "desc": [ - "Les paramètres des propriétés sont les mêmes que MaterialButton, vous pouvez obtenir les données du thème du bouton via ButtonTheme.of, \"", - "ou définir le style par défaut pour les composants bouton descendants de ButtonTheme, y compris la couleur, la forme, la taille, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_it_IT.json deleted file mode 100644 index 6fc4a22df..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "Tema del pulsante", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti di tipo Button discendenti, o per ottenere le proprietà predefinite del Button attraverso questo componente.", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di ButtonTheme", - "desc": [ - "I parametri delle proprietà sono gli stessi di MaterialButton, è possibile ottenere i dati del tema del pulsante tramite ButtonTheme.of, \"", - "è anche possibile impostare lo stile predefinito per i componenti pulsante discendenti di ButtonTheme, inclusi colore, forma, dimensione, ecc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ja_JP.json deleted file mode 100644 index 3b65829dc..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "ボタンスタイル", - "info": "主に子孫のButtonタイプコンポーネントにデフォルトのプロパティを統一して設定するために使用されます。また、このコンポーネントを通じてデフォルトのButtonのプロパティを取得することもできます。", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonThemeの使用", - "desc": [ - "MaterialButtonと同じ属性パラメータで、ButtonTheme.ofを使用してボタンのテーマデータを取得できます。", - "また、ButtonThemeの【子孫】のボタンコンポーネントにデフォルトのスタイルを設定することもできます。これには色、形状、サイズなどが含まれます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ko_KR.json deleted file mode 100644 index ef5b7c412..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "버튼 스타일", - "info": "주로 후손 Button 유형의 컴포넌트에 기본 속성을 통일적으로 설정하기 위해 사용되며, 이 컴포넌트를 통해 기본 Button의 속성을 얻을 수도 있습니다.", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonTheme 사용", - "desc": [ - "속성 매개변수는 MaterialButton과 동일하며, ButtonTheme.of를 통해 버튼 테마 데이터를 얻을 수 있습니다.", - "또한 ButtonTheme의 【후손】 버튼 컴포넌트에 기본 스타일(색상, 모양, 크기 등)을 설정할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_pt_PT.json deleted file mode 100644 index c33815d6d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "Tema do Botão", - "info": "Principalmente usado para definir propriedades padrão uniformes para componentes do tipo Button descendentes, também pode ser usado para obter as propriedades padrão do Button através deste componente.", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do ButtonTheme", - "desc": [ - "Os parâmetros de propriedade são os mesmos que o MaterialButton, os dados do tema do botão podem ser obtidos através de ButtonTheme.of,", - "também pode definir estilos padrão para componentes de botão descendentes do ButtonTheme, incluindo cor, forma, tamanho, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ru_RU.json deleted file mode 100644 index 03a5a59bf..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "Тема кнопки", - "info": "В основном используется для установки стандартных свойств для компонентов типа Button у потомков, также можно получить свойства стандартной кнопки через этот компонент.", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование ButtonTheme", - "desc": [ - "Параметры свойств аналогичны MaterialButton, можно получить данные темы кнопки через ButtonTheme.of,", - "также можно установить стандартные стили для компонентов кнопок-потомков ButtonTheme, включая цвет, форму, размер и т.д." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_zh-CN.json deleted file mode 100644 index 57fc08cec..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "按钮样式", - "info": "主要用于为后代的Button类型组件统一设置默认属性,也可以通过该组件获取默认Button的属性。", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonTheme使用", - "desc": [ - "属性参数同MaterialButton,可以通过ButtonTheme.of获取按钮主题数据,\"", - "也可以为ButtonTheme【后代】的按钮组件设置默认样式,包括颜色、形状、尺寸等。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/node1_base.dart deleted file mode 100644 index 4adfd83c9..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/node1_base.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-12 -/// contact me by email 1981462002@qq.com - - - -class ButtonThemeDemo extends StatelessWidget { - const ButtonThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ButtonTheme( - buttonColor: Colors.orange, - splashColor: Colors.blue, - minWidth: 40, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - child: Wrap( - spacing: 10, - children: [ - ElevatedButton(onPressed: (){},child: const Icon(Icons.add)), - TextButton(onPressed: (){},child: const Icon(Icons.add)), - OutlinedButton(onPressed: (){},child: const Icon(Icons.add)), - MaterialButton(onPressed: (){},child: const Icon(Icons.add)), - ], - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_de_DE.json deleted file mode 100644 index b875ae523..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "Chip-Stil", - "info": "Wird hauptsächlich verwendet, um Standardattribute für Chip-Typ-Komponenten für Nachkommen festzulegen. Es kann auch verwendet werden, um die Standardattribute des Chips abzurufen.", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ChipTheme", - "desc": [ - "Kann ChipThemeData-Datenattribute angeben, um Standardstile für Chip-Typ-Komponenten für Nachkommen festzulegen. Die Attribute ähneln denen des Chips, wie Schatten, Farbe, Abstand, Form, Textstil usw. ChipTheme.of kann auch verwendet werden, um die Themendaten des Chips abzurufen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_en_US.json deleted file mode 100644 index 8007a4be3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "Chip Style", - "info": "Mainly used to set default properties for Chip type components of descendants, and can also be used to obtain the default properties of Chip.", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ChipTheme", - "desc": [ - "You can specify the ChipThemeData properties to set default styles for Chip type components of descendants. The properties are similar to those of Chip, such as shadow, color, margin, shape, text style, etc. You can also use ChipTheme.of to get the theme data of Chip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_es_ES.json deleted file mode 100644 index 7621db9ad..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "Estilo de Chip", - "info": "Principalmente se utiliza para establecer propiedades predeterminadas unificadas para componentes de tipo Chip descendientes, también se puede utilizar este componente para obtener las propiedades predeterminadas de Chip.", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ChipTheme", - "desc": [ - "Se pueden especificar las propiedades de datos de ChipThemeData para establecer estilos predeterminados para componentes de tipo Chip descendientes, las propiedades son similares a las de Chip, como sombras, colores, márgenes, formas, estilos de texto, etc. También se puede usar ChipTheme.of para obtener los datos del tema de Chip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_fr_FR.json deleted file mode 100644 index aad67185c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "Style de la petite barre", - "info": "Principalement utilisé pour définir les propriétés par défaut des composants de type Chip pour les descendants, il est également possible d'obtenir les propriétés par défaut de Chip via ce composant.", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ChipTheme", - "desc": [ - "Il est possible de spécifier les propriétés de données ChipThemeData pour définir le style par défaut des composants de type Chip pour les descendants, les propriétés sont similaires à celles de Chip, telles que l'ombre, la couleur, la marge, la forme, le style de texte, etc. Il est également possible d'obtenir les données de thème de Chip en utilisant ChipTheme.of." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_it_IT.json deleted file mode 100644 index ec2f5d99a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "Stile della linguetta", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti di tipo Chip discendenti, è anche possibile ottenere le proprietà predefinite di Chip tramite questo componente.", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ChipTheme", - "desc": [ - "È possibile specificare le proprietà dei dati ChipThemeData per impostare lo stile predefinito per i componenti di tipo Chip discendenti, le proprietà sono simili a quelle di Chip, come ombre, colori, margini, forme, stili di testo, ecc. È anche possibile utilizzare ChipTheme.of per ottenere i dati del tema di Chip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ja_JP.json deleted file mode 100644 index 047f618ac..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "チップスタイル", - "info": "主に子孫のChipタイプコンポーネントにデフォルトのプロパティを統一して設定するために使用されます。また、このコンポーネントを通じてデフォルトのChipのプロパティを取得することもできます。", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ChipThemeの基本使用", - "desc": [ - "ChipThemeDataデータプロパティを指定して、【子孫】のChipタイプコンポーネントにデフォルトのスタイルを設定できます。プロパティはChipのプロパティと似ており、影、色、余白、形状、テキストスタイルなどがあります。また、ChipTheme.ofを使用してChipのテーマデータを取得することもできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ko_KR.json deleted file mode 100644 index 596a5bec2..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "칩 스타일", - "info": "주로 후손의 Chip 타입 컴포넌트에 기본 속성을 통일적으로 설정하기 위해 사용되며, 이 컴포넌트를 통해 기본 Chip의 속성을 가져올 수도 있습니다.", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ChipTheme 기본 사용", - "desc": [ - "ChipThemeData 데이터 속성을 지정하여 【후손】의 Chip 타입 컴포넌트에 기본 스타일을 설정할 수 있습니다. 속성은 Chip 속성과 유사하며, 그림자, 색상, 여백, 모양, 텍스트 스타일 등이 포함됩니다. 또한 ChipTheme.of를 사용하여 Chip의 테마 데이터를 가져올 수도 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_pt_PT.json deleted file mode 100644 index e2c9f4bd6..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "Estilo de Chip", - "info": "Principalmente usado para definir propriedades padrão para componentes do tipo Chip descendentes, também pode ser usado para obter as propriedades padrão do Chip.", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ChipTheme", - "desc": [ - "Pode especificar as propriedades de dados do ChipThemeData para definir o estilo padrão para componentes do tipo Chip descendentes, as propriedades são semelhantes às do Chip, como sombra, cor, margem, forma, estilo de texto, etc. Também pode usar ChipTheme.of para obter os dados do tema do Chip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ru_RU.json deleted file mode 100644 index 11fa7bbb6..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "Стиль чипа", - "info": "В основном используется для установки стандартных атрибутов для компонентов типа Chip у потомков, также можно получить атрибуты стандартного Chip через этот компонент.", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ChipTheme", - "desc": [ - "Можно указать атрибуты данных ChipThemeData для установки стандартного стиля для компонентов типа Chip у потомков, атрибуты аналогичны атрибутам Chip, такие как тень, цвет, отступы, форма, стиль текста и т.д. Также можно получить данные темы Chip с помощью ChipTheme.of." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_zh-CN.json deleted file mode 100644 index 6091b0132..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "小条样式", - "info": "主要用于为后代的Chip类型组件统一设置默认属性,也可以通过该组件获取默认Chip的属性。", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ChipTheme基本使用", - "desc": [ - "可指定ChipThemeData数据属性为【后代】的Chip类型组件设置默认样式,属性和Chip属性类似,如阴影、颜色、边距、形状、文字样式等。也可以用ChipTheme.of获取Chip的主题数据。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/node1_base.dart deleted file mode 100644 index 29e8f3851..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/node1_base.dart +++ /dev/null @@ -1,74 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/20 -/// contact me by email 1981462002@qq.com - -class ChipThemeDemo extends StatelessWidget { - const ChipThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ChipTheme( - data: ChipTheme.of(context).copyWith( - selectedColor: Colors.orange.withAlpha(55), - selectedShadowColor: Colors.blue, - shadowColor: Colors.orangeAccent, - pressElevation: 5, - elevation: 3, - ), - child: const CustomFilterChip(), - ); - } -} - -class CustomFilterChip extends StatefulWidget { - const CustomFilterChip({Key? key}) : super(key: key); - - @override - _CustomFilterChipState createState() => _CustomFilterChipState(); -} - -class _CustomFilterChipState extends State { - final Map map = { - 'A': 'Ant', - 'B': 'Bug', - 'C': 'Cat', - 'D': 'Dog', - }; - final List _selected = []; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Wrap( - children: map.keys.map((key) => _buildChild(key)).toList(), - ), - Container( - padding: const EdgeInsets.all(10), - child: Text('您已选择: ${_selected.join(', ')}')), - ], - ); - } - - Padding _buildChild(String key) { - return Padding( - padding: const EdgeInsets.all(4.0), - child: FilterChip( - avatar: CircleAvatar(child: Text(key)), - label: Text(map[key]!), - selected: _selected.contains(map[key]), - onSelected: (bool value) { - setState(() { - if (value) { - _selected.add(map[key]!); - } else { - _selected.removeWhere((name) => name == map[key]); - } - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_de_DE.json deleted file mode 100644 index 984b189a1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "Benutzeroberflächenebene", - "info": "Ein Konzept in iOS, die visuelle Ebene der Benutzeroberfläche UIUserInterfaceLevel, unterteilt in base und elevated. Als InheritedWidget dient es hauptsächlich dazu, diese Daten zu teilen.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in CupertinoUserInterfaceLevel", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) kann CupertinoUserInterfaceLevelData-Daten abrufen. Mit dieser Komponente können auch diese Daten eingerichtet und mit Unterbäumen geteilt werden. Weitere Informationen zur Datenquelle finden Sie unter: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_en_US.json deleted file mode 100644 index 608bb59bf..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "User Interface Level", - "info": "A concept in iOS, the content visibility level UIUserInterfaceLevel, divided into base and elevated. As an InheritedWidget, it mainly shares this data.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to CupertinoUserInterfaceLevel", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) can retrieve CupertinoUserInterfaceLevelData. This component can also be used to set and share this data with the subtree. For more information about the data source, see: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_es_ES.json deleted file mode 100644 index 7c2124b35..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "Nivel de Interfaz de Usuario", - "info": "Concepto en iOS, nivel de visibilidad del contenido UIUserInterfaceLevel, dividido en base y elevated. Como un InheritedWidget, su función principal es compartir estos datos.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a CupertinoUserInterfaceLevel", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) puede obtener los datos de CupertinoUserInterfaceLevelData. También se puede usar este componente para configurar y compartir estos datos con el subárbol. Para más detalles sobre el origen de los datos, consulte: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_fr_FR.json deleted file mode 100644 index 2c153d743..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "Niveau de l'interface utilisateur", - "info": "Concept dans iOS, niveau de visibilité du contenu UIUserInterfaceLevel, divisé en base et elevated. En tant que InheritedWidget, il partage principalement ces données.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à CupertinoUserInterfaceLevel", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) peut récupérer les données CupertinoUserInterfaceLevelData. Ce composant peut également être utilisé pour partager ces données avec le sous-arbre. Pour plus d'informations sur le diagramme des données, voir : https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_it_IT.json deleted file mode 100644 index 17e17a497..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "Livello dell'interfaccia utente", - "info": "Concetto in iOS, livello visivo del contenuto UIUserInterfaceLevel, diviso in base e elevated. Come InheritedWidget, principalmente condivide questi dati.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a CupertinoUserInterfaceLevel", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) può ottenere i dati di CupertinoUserInterfaceLevelData. Puoi anche utilizzare questo componente per impostare e condividere questi dati con il sottoalbero. Per ulteriori informazioni sui dati originali, consulta: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ja_JP.json deleted file mode 100644 index abbec8fb5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "ユーザーインターフェースレベル", - "info": "iOS の概念で、コンテンツの可視レベル UIUserInterfaceLevel で、base と elevated に分かれています。InheritedWidget として、主にこのデータを共有します。", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoUserInterfaceLevel 紹介", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) を使用して CupertinoUserInterfaceLevelData データを取得できます。また、このコンポーネントを使用してデータを設定し、サブツリーと共有することもできます。データの詳細については、以下を参照してください: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ko_KR.json deleted file mode 100644 index b4ab14be3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "사용자 인터페이스 레벨", - "info": "iOS의 개념으로, 콘텐츠 가시성 레벨인 UIUserInterfaceLevel을 의미하며, base와 elevated로 나뉩니다. InheritedWidget으로서, 주로 이 데이터를 공유하는 역할을 합니다.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoUserInterfaceLevel 소개", - "desc": [ - "CupertinoUserInterfaceLevel.of(context)를 통해 CupertinoUserInterfaceLevelData 데이터를 얻을 수 있습니다. 또한 이 컴포넌트를 사용하여 해당 데이터를 설정하고 서브트리와 공유할 수 있습니다. 데이터 원본에 대한 자세한 내용은 다음을 참조하세요: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_pt_PT.json deleted file mode 100644 index 7f712dbf4..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "Nível de Interface do Utilizador", - "info": "Conceito no iOS, nível de visibilidade do conteúdo UIUserInterfaceLevel, dividido em base e elevado. Como um InheritedWidget, o principal objetivo é compartilhar esses dados.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao CupertinoUserInterfaceLevel", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) pode obter os dados CupertinoUserInterfaceLevelData. Também pode usar este componente para definir e compartilhar esses dados com a subárvore. Para mais detalhes sobre o diagrama de dados, consulte: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ru_RU.json deleted file mode 100644 index de7b0577c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "Уровень пользовательского интерфейса", - "info": "Концепция в ios, уровень видимости контента UIUserInterfaceLevel, разделяется на base и elevated. Как InheritedWidget, в основном используется для обмена этими данными.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в CupertinoUserInterfaceLevel", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) может получить данные CupertinoUserInterfaceLevelData. Также можно использовать этот компонент для настройки и обмена этих данных с поддеревом. Подробнее о данных см.: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_zh-CN.json deleted file mode 100644 index 361c27200..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "用户接口等级", - "info": "ios 中的概念,内容可视级别 UIUserInterfaceLevel ,分为 base 和 elevated。作为一个 InheritedWidget ,主要就是共享该数据。", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoUserInterfaceLevel 介绍", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) 可以获取 CupertinoUserInterfaceLevelData 数据。也可以使用该组件设置该数据与子树共享。关于数据原图详见: https:developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/node1_base.dart deleted file mode 100644 index f424aa654..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/node1_base.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - - -class CupertinoUserInterfaceLevelDemo extends StatelessWidget { - const CupertinoUserInterfaceLevelDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const CupertinoUserInterfaceLevel( - data: CupertinoUserInterfaceLevelData.elevated, - child: LevelShower() - ); - } - -} - -class LevelShower extends StatelessWidget { - const LevelShower({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - CupertinoUserInterfaceLevelData data = CupertinoUserInterfaceLevel.of(context); - return Container( - height: 150, - alignment: Alignment.center, - color: Theme.of(context).primaryColor.withOpacity(0.1), - child: Text(data.toString()), - ); - } -} - - diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_de_DE.json deleted file mode 100644 index d7b33549d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "Standard-Ressourcenpaket", - "info": "Ein InheritedWidget, das nach der Einstellung des AssetBundle-Objekts es den Knoten nach diesem Knoten ermöglicht, das AssetBundle-Objekt über DefaultAssetBundle.of(context) zu erhalten, um auf Ressourcendateien zuzugreifen.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in DefaultAssetBundle", - "desc": [ - "【bundle】 : *Ressourcenpaket 【AssetBundle】", - "【child】 : *Untergeordnete Komponente 【Widget】", - "Wir können unser eigenes DefaultAssetBundle definieren, das von nachfolgenden Knoten verwendet wird, oder direkt das Standardpaket verwenden. Dieses Beispiel zeigt, wie ein Ressourcenbild mithilfe des von Framework bereitgestellten DefaultAssetBundle geladen und angezeigt wird." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_en_US.json deleted file mode 100644 index 36677835a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "Default Asset Bundle", - "info": "An InheritedWidget that sets the AssetBundle object. After setting, the context of the nodes following this node can obtain the AssetBundle object through DefaultAssetBundle.of(context) for accessing resource files.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to DefaultAssetBundle", - "desc": [ - "【bundle】: *Resource Bundle 【AssetBundle】", - "【child】: *Child Widget 【Widget】", - "We can define our own DefaultAssetBundle for use by subsequent nodes, or we can directly use the default one. This case demonstrates loading and displaying a resource image using the DefaultAssetBundle provided by the framework." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_es_ES.json deleted file mode 100644 index 26058f6d0..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "Paquete de recursos predeterminado", - "info": "Un InheritedWidget que, después de configurar el objeto AssetBundle, permite que los nodos posteriores en el contexto obtengan el objeto AssetBundle a través de DefaultAssetBundle.of(context) para acceder a los archivos de recursos.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a DefaultAssetBundle", - "desc": [ - "【bundle】 : *Paquete de recursos 【AssetBundle】", - "【child】 : *Componente hijo 【Widget】", - "Podemos definir nuestro propio DefaultAssetBundle para que lo usen los nodos posteriores, o podemos usar el predeterminado directamente. Este caso demuestra cómo cargar y mostrar una imagen de recursos utilizando el DefaultAssetBundle proporcionado por el marco." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_fr_FR.json deleted file mode 100644 index 2e7110234..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "Paquet de ressources par défaut", - "info": "Un InheritedWidget, après avoir défini l'objet AssetBundle, les nœuds suivants dans le contexte peuvent obtenir l'objet AssetBundle via DefaultAssetBundle.of(context) pour accéder aux fichiers de ressources.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Présentation de DefaultAssetBundle", - "desc": [ - "【bundle】 : *Paquet de ressources 【AssetBundle】", - "【child】 : *Composant enfant 【Widget】", - "Nous pouvons définir notre propre DefaultAssetBundle pour une utilisation ultérieure par les nœuds suivants, ou utiliser directement celui par défaut. Ce cas montre comment charger et afficher une image de ressource en utilisant le DefaultAssetBundle fourni par le framework." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_it_IT.json deleted file mode 100644 index 150558b8d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "Pacchetto di risorse predefinito", - "info": "Un InheritedWidget che, una volta impostato l'oggetto AssetBundle, consente ai nodi successivi nel contesto di ottenere l'oggetto AssetBundle tramite DefaultAssetBundle.of(context) per accedere ai file delle risorse.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a DefaultAssetBundle", - "desc": [ - "【bundle】 : *Pacchetto di risorse 【AssetBundle】", - "【child】 : *Componente figlio 【Widget】", - "Possiamo definire il nostro DefaultAssetBundle per l'uso da parte dei nodi successivi, oppure possiamo utilizzare quello predefinito. Questo esempio dimostra come caricare e visualizzare un'immagine di risorsa utilizzando il DefaultAssetBundle fornito dal framework." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ja_JP.json deleted file mode 100644 index 000ac9ccf..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "デフォルトアセットバンドル", - "info": "InheritedWidget で、AssetBundle オブジェクトを設定した後、このノード以降のノードコンテキストは DefaultAssetBundle.of(context) を使用して AssetBundle オブジェクトを取得し、リソースファイルにアクセスできます。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultAssetBundle の紹介", - "desc": [ - "【bundle】 : *リソースバンドル 【AssetBundle】", - "【child】 : *子コンポーネント 【Widget】", - "独自の DefaultAssetBundle を定義して後続のノードで使用することも、デフォルトのものを直接使用することもできます。この例では、フレームワークが提供する DefaultAssetBundle を使用してリソース画像を読み込み、表示します。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ko_KR.json deleted file mode 100644 index 1b3dc4773..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "기본 리소스 번들", - "info": "InheritedWidget으로, AssetBundle 객체를 설정한 후, 해당 노드 이후의 노드 컨텍스트에서 DefaultAssetBundle.of(context)를 통해 AssetBundle 객체를 얻어 리소스 파일에 접근할 수 있습니다.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultAssetBundle 소개", - "desc": [ - "【bundle】 : *리소스 번들 【AssetBundle】", - "【child】 : *자식 위젯 【Widget】", - "우리는 후속 노드에서 사용할 수 있도록 자신만의 DefaultAssetBundle을 정의할 수도 있고, 기본값을 바로 사용할 수도 있습니다. 이 예제는 프레임워크에서 제공하는 DefaultAssetBundle을 통해 리소스 이미지를 로드하여 표시하는 방법을 보여줍니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_pt_PT.json deleted file mode 100644 index f124827cc..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "Pacote de Recursos Padrão", - "info": "Um InheritedWidget que, após configurar o objeto AssetBundle, permite que os nós subsequentes no contexto obtenham o objeto AssetBundle através de DefaultAssetBundle.of(context) para acessar arquivos de recursos.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao DefaultAssetBundle", - "desc": [ - "【bundle】 : *Pacote de recursos 【AssetBundle】", - "【child】 : *Componente filho 【Widget】", - "Podemos definir nosso próprio DefaultAssetBundle para uso por nós subsequentes ou usar o padrão diretamente. Este exemplo demonstra o carregamento e exibição de uma imagem de recurso usando o DefaultAssetBundle fornecido pela estrutura." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ru_RU.json deleted file mode 100644 index d4c86d0f2..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "Пакет ресурсов по умолчанию", - "info": "InheritedWidget, который устанавливает объект AssetBundle, после чего контекст узлов после этого узла может получить объект AssetBundle с помощью DefaultAssetBundle.of(context) для доступа к файлам ресурсов.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в DefaultAssetBundle", - "desc": [ - "【bundle】 : *Пакет ресурсов 【AssetBundle】", - "【child】 : *Дочерний компонент 【Widget】", - "Мы можем определить собственный DefaultAssetBundle для использования последующими узлами или использовать предоставленный по умолчанию. Этот пример демонстрирует загрузку и отображение изображения ресурса с помощью DefaultAssetBundle, предоставленного фреймворком." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_zh-CN.json deleted file mode 100644 index de0c341c7..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "默认资源包", - "info": "一个 InheritedWidget,设置 AssetBundle 对象后,该节点后的节点上下文可以通过 DefaultAssetBundle.of(context) 获取 AssetBundle 对象用于访问资源文件。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultAssetBundle 介绍", - "desc": [ - "【bundle】 : *资源包 【AssetBundle】", - "【child】 : *子组件 【Widget】", - "我们可以定义自己的 DefaultAssetBundle 来供后续节点使用,也可以直接使用默认的。该案例演示通过框架提供的 DefaultAssetBundle 加载一张资源图片进行显示。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/node1_base.dart deleted file mode 100644 index b9590d869..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/node1_base.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'dart:ui' as ui; -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class DefaultAssetBundleDemo extends StatefulWidget { - const DefaultAssetBundleDemo({Key? key}) : super(key: key); - - @override - _DefaultAssetBundleDemoState createState() => _DefaultAssetBundleDemoState(); -} - -class _DefaultAssetBundleDemoState extends State { - ui.Image? _image; - @override - void initState() { - super.initState(); - _load(); - } - - @override - Widget build(BuildContext context) { - - return Container( - width: 150, - height: 150, - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: _image==null?Container():RawImage(image: _image,fit: BoxFit.cover,), - ); - } - - void _load() async{ - AssetBundle info = DefaultAssetBundle.of(context); - ByteData data = await info.load('assets/images/sabar.webp'); - _image = await decodeImageFromList(data.buffer.asUint8List()); - setState(() { - - }); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_de_DE.json deleted file mode 100644 index 6c804ee42..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "Standardtextstil", - "info": "Kann ein Kind enthalten und den Standardstil für den Text der Nachkommen festlegen. Wird häufig verwendet, um den Stil mehrerer identischer Texte zu vereinheitlichen und so die individuelle Einstellung zu vermeiden.", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Verwendung von DefaultTextStyle", - "desc": [ - "Die Eigenschaften sind die gleichen wie bei Text, siehe dort für Details.", - "Seine Funktion ist: Den Standardtextstil für [Nachkomponenten] festlegen, beachten Sie, dass Nachkomponenten auch ihren eigenen Stil festlegen können" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_en_US.json deleted file mode 100644 index c7a0ca763..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "Default Font Style", - "info": "Can contain a child, specifying the default style for descendant text. Commonly used to unify the style of multiple identical texts, avoiding setting them one by one.", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTextStyle Usage", - "desc": [ - "The properties are the same as Text, see details there.", - "Its function is: Set the default text style to be applied to [descendant widgets], note that descendant widgets can also specify their own styles." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_es_ES.json deleted file mode 100644 index e4df5bdb5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "Estilo de texto predeterminado", - "info": "Puede contener un hijo, especifica el estilo de texto predeterminado para los descendientes. Se usa comúnmente para unificar el estilo de múltiples textos iguales, evitando configurarlos uno por uno.", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de DefaultTextStyle", - "desc": [ - "Los atributos son los mismos que Text, consulte los detalles.", - "Su función es: establecer el estilo de texto predeterminado para los【componentes descendientes】, tenga en cuenta que los componentes descendientes también pueden especificar su propio estilo." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_fr_FR.json deleted file mode 100644 index 249b4231b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "Style de texte par défaut", - "info": "Peut contenir un enfant, spécifie le style de texte par défaut pour les descendants. Souvent utilisé pour unifier le style de plusieurs textes identiques, évitant de les définir un par un.", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de DefaultTextStyle", - "desc": [ - "Les propriétés sont les mêmes que Text, voir ci-dessus pour plus de détails.", - "Sa fonction est : définir le style de texte par défaut appliqué aux [composants descendants], notez que les composants descendants peuvent également spécifier leur propre style" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_it_IT.json deleted file mode 100644 index 6366506ba..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "Stile di testo predefinito", - "info": "Può contenere un figlio e specifica lo stile predefinito per il testo dei discendenti. Comunemente utilizzato per uniformare lo stile di più testi identici, evitando di impostarli uno per uno.", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di DefaultTextStyle", - "desc": [ - "Le proprietà sono le stesse di Text, per i dettagli vedere quello.", - "La sua funzione è: impostare lo stile di testo predefinito da applicare ai [componenti discendenti], notare che i componenti discendenti possono anche specificare il proprio stile." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ja_JP.json deleted file mode 100644 index 1f0901422..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "デフォルトフォントスタイル", - "info": "子要素を一つ持つことができ、子孫のテキストにデフォルトのスタイルを指定します。複数の同じテキストのスタイルを統一するためによく使用され、一つ一つ設定する手間を省きます。", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTextStyleの使用", - "desc": [ - "各属性はTextと同じです。詳細はそちらを参照してください。", - "その機能は: デフォルトのテキストスタイルを【子孫コンポーネント】に適用することです。子孫コンポーネントも自身のスタイルを指定できることに注意してください" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ko_KR.json deleted file mode 100644 index ff0265e4d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "기본 글꼴 스타일", - "info": "하나의 자식을 수용할 수 있으며, 후손 텍스트에 기본 스타일을 지정합니다. 여러 동일한 텍스트의 스타일을 통일하여 일일이 설정하는 것을 방지하기 위해 자주 사용됩니다.", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTextStyle 사용", - "desc": [ - "각 속성은 Text와 동일하며, 자세한 내용은 해당 문서를 참조하십시오.", - "기능은: 기본 텍스트 스타일을 설정하여 【후손 컴포넌트】에 적용하며, 후손 컴포넌트는 자신의 스타일을 지정할 수도 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_pt_PT.json deleted file mode 100644 index bd2458dc4..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "Estilo de Texto Padrão", - "info": "Pode conter um filho, especificando o estilo padrão para o texto dos descendentes. Frequentemente usado para unificar o estilo de múltiplos textos iguais, evitando a configuração individual.", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do DefaultTextStyle", - "desc": [ - "As propriedades são as mesmas que o Text, consulte-o para mais detalhes.", - "Sua função é: definir o estilo de texto padrão para [componentes descendentes], note que os componentes descendentes também podem especificar seus próprios estilos" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ru_RU.json deleted file mode 100644 index 4fe407c05..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "Стиль текста по умолчанию", - "info": "Может содержать одного ребенка, задает стиль текста по умолчанию для потомков. Часто используется для унификации стиля нескольких одинаковых текстов, чтобы избежать индивидуальной настройки.", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование DefaultTextStyle", - "desc": [ - "Атрибуты такие же, как у Text, подробнее см. там.", - "Его функция: установка стиля текста по умолчанию для [потомков], обратите внимание, что потомки также могут задавать свой собственный стиль" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_zh-CN.json deleted file mode 100644 index 4f51e037d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "默认字体样式", - "info": "可容纳一个孩子,为后代的文字指定默认样式。常用于多个相同文字的样式统一,避免一一设置。", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTextStyle使用", - "desc": [ - "各属性同Text,详见之。", - "其功能是: 设置默认的文字样式应用于【后代组件】,注意后代组件也可以指定自身的样式" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/node1_base.dart deleted file mode 100644 index 47fc30a28..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/node1_base.dart +++ /dev/null @@ -1,28 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-12 -/// contact me by email 1981462002@qq.com - -class DefaultTextStyleDemo extends StatelessWidget { - const DefaultTextStyleDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return DefaultTextStyle( - style: const TextStyle( - fontSize: 18, - color: Colors.blue, - decoration: TextDecoration.underline), - child: Wrap( - spacing: 5, - children: const[ - Text("Hello,",), - FlutterLogo(), - Text("Flutter",style: TextStyle(color: Colors.red),), - Text("Unit."), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_de_DE.json deleted file mode 100644 index 622b10f72..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "Richtungsabhängigkeit", - "info": "Ändert den Eigenschaftswert für Komponenten mit textDirection-Attribut einheitlich für Nachkommen. Der aktuelle Standardwert von textDirection kann auch über Directionality.of(context) abgerufen werden.", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Directionality", - "desc": [ - "【textDirection】: Textausrichtung 【TextDirection】", - "【child】: Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_en_US.json deleted file mode 100644 index 9c86d9598..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "Directionality", - "info": "Set the property value uniformly for components with the textDirection attribute for descendants, or get the default textDirection attribute through Directionality.of(context).", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Directionality", - "desc": [ - "【textDirection】: Text arrangement direction 【TextDirection】", - "【child】: Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_es_ES.json deleted file mode 100644 index 8e90e8b91..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "Direccionalidad", - "info": "Establece un valor de propiedad unificado para los componentes con el atributo textDirection para los descendientes, también se puede obtener el valor predeterminado del atributo textDirection actual a través de Directionality.of(context).", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Directionality", - "desc": [ - "【textDirection】: Dirección de alineación del texto 【TextDirection】", - "【child】: Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_fr_FR.json deleted file mode 100644 index ef429cb36..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "Directionnalité", - "info": "Modifie la valeur de l'attribut pour les composants ayant l'attribut textDirection pour les descendants, ou obtenez la valeur par défaut de textDirection via Directionality.of(context).", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Directionality", - "desc": [ - "【textDirection】 : Direction de l'arrangement du texte 【TextDirection】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_it_IT.json deleted file mode 100644 index 7e02c95a6..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "Direzionalità", - "info": "Imposta un valore di attributo uniforme per i componenti con l'attributo textDirection per i discendenti, oppure puoi ottenere l'attributo predefinito textDirection corrente tramite Directionality.of(context).", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Directionality", - "desc": [ - "【textDirection】: direzione di disposizione del testo 【TextDirection】", - "【child】: componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ja_JP.json deleted file mode 100644 index 85dae336a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "方向性", - "info": "textDirectionプロパティを持つコンポーネントのプロパティ値を一括設定して子孫に変更します。また、Directionality.of(context)を使用して現在のtextDirectionのデフォルトプロパティを取得することもできます。", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Directionalityの基本的な使用法", - "desc": [ - "【textDirection】: テキストの配置方向 【TextDirection】", - "【child】: 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ko_KR.json deleted file mode 100644 index a86f7d2cc..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "방향성", - "info": "후손을 위해 textDirection 속성이 있는 컴포넌트의 속성 값을 통일적으로 설정할 수 있으며, Directionality.of(context)를 통해 현재 textDirection의 기본 속성을 얻을 수 있습니다.", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Directionality 기본 사용", - "desc": [ - "【textDirection】 : 텍스트 배열 방향 【TextDirection】", - "【child】 : 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_pt_PT.json deleted file mode 100644 index 7bce778dc..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "Direcionalidade", - "info": "Define o valor do atributo uniformemente para componentes com o atributo textDirection para os descendentes, ou pode obter o valor padrão do textDirection atual através de Directionality.of(context).", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Directionality", - "desc": [ - "【textDirection】 : Direção de disposição do texto 【TextDirection】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ru_RU.json deleted file mode 100644 index a4da56a05..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "Направленность", - "info": "Устанавливает значение атрибута для компонентов с атрибутом textDirection для потомков, также можно получить текущее значение по умолчанию textDirection через Directionality.of(context).", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Directionality", - "desc": [ - "【textDirection】 : Направление текста 【TextDirection】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_zh-CN.json deleted file mode 100644 index a05c445f5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "定向性", - "info": "为后代改变有textDirection属性的组件统一设置属性值,也可以通过Directionality.of(context)获取当前textDirection默认属性。", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Directionality基本使用", - "desc": [ - "【textDirection】 : 文字排列方向 【TextDirection】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/node1_base.dart deleted file mode 100644 index ad9e15ebf..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/node1_base.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class DirectionalityDemo extends StatefulWidget { - const DirectionalityDemo({Key? key}) : super(key: key); - - @override - _DirectionalityDemoState createState() => _DirectionalityDemoState(); -} - -class _DirectionalityDemoState extends State { - TextDirection _textDirection = TextDirection.rtl; - - @override - Widget build(BuildContext context) { - return Directionality( - textDirection: _textDirection, - child: Container( - padding: const EdgeInsets.all(8), - width: 250, - color: Colors.grey.withAlpha(33), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - const Text( - 'A widget that determines the ambient directionality of text and text direction sensitive render objects.'), - _buildSwitch(), - const Text( - 'The text direction from the closest instance of this class that encloses the given context.'), - ], - ), - ), - ); - } - - Widget _buildSwitch() => Row( - children: [ - Switch( - value: _textDirection == TextDirection.rtl, - onChanged: (v) { - setState(() { - _textDirection = - v ? TextDirection.rtl : TextDirection.ltr; - }); - }, - ), - Text( - _textDirection.toString(), - style: const TextStyle(color: Colors.blue, fontSize: 18), - ) - ], - ); -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_de_DE.json deleted file mode 100644 index 60cf42c2e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "Trennlinienstil", - "info": "Wird hauptsächlich verwendet, um standardmäßige Attribute für Divider-Typ-Komponenten für Nachkommen festzulegen. Es kann auch verwendet werden, um die Standardattribute des Divider zu erhalten.", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DividerTheme Verwendung", - "desc": [ - "Die Attributeparameter ähneln denen von Divider. Die Trennlinienthemendaten können über DividerTheme.of abgerufen werden.", - "Es kann auch der Standardstil für Trennlinien von DividerTheme [Nachkommen] festgelegt werden, einschließlich Farbe, Dicke, Höhe usw." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_en_US.json deleted file mode 100644 index 06f197ecf..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "Divider Style", - "info": "Mainly used to set default properties for descendant Divider type components uniformly, and it can also be used to obtain the default properties of Divider.", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Using DividerTheme", - "desc": [ - "The property parameters are similar to Divider. You can obtain the divider theme data through DividerTheme.of,", - "and you can also set default styles for the dividers of DividerTheme【descendants】, including color, thickness, height, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_es_ES.json deleted file mode 100644 index c70cc491e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "Estilo de la línea divisoria", - "info": "Se utiliza principalmente para establecer propiedades predeterminadas unificadas para los componentes de tipo Divider descendientes, también se pueden obtener las propiedades predeterminadas de Divider a través de este componente.", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de DividerTheme", - "desc": [ - "Los parámetros de atributos son similares a Divider, se pueden obtener los datos del tema de la línea divisoria a través de DividerTheme.of, \"", - "también se pueden establecer estilos predeterminados para las líneas divisorias de los 【descendientes】 de DividerTheme, incluyendo color, grosor, altura, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_fr_FR.json deleted file mode 100644 index 4b025c39f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "Thème de séparateur", - "info": "Principalement utilisé pour définir les propriétés par défaut des composants de type Divider pour les descendants, ou pour obtenir les propriétés par défaut du Divider via ce composant.", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de DividerTheme", - "desc": [ - "Les paramètres d'attributs sont similaires à ceux de Divider, vous pouvez obtenir les données du thème de séparateur via DividerTheme.of, \"", - "vous pouvez également définir le style par défaut pour les séparateurs des descendants de DividerTheme, y compris la couleur, l'épaisseur, la hauteur, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_it_IT.json deleted file mode 100644 index 3479698b0..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "Stile della linea divisoria", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti di tipo Divider discendenti, è anche possibile ottenere le proprietà predefinite di Divider attraverso questo componente.", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di DividerTheme", - "desc": [ - "I parametri delle proprietà sono simili a Divider, è possibile ottenere i dati del tema della linea divisoria tramite DividerTheme.of,\"", - "è anche possibile impostare uno stile predefinito per le linee divisorie dei [discendenti] di DividerTheme, inclusi colore, spessore, altezza, ecc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ja_JP.json deleted file mode 100644 index 314f585d9..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "分割線スタイル", - "info": "主に子孫のDividerタイプコンポーネントにデフォルトのプロパティを統一して設定するために使用されます。また、このコンポーネントを通じてデフォルトのDividerのプロパティを取得することもできます。", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DividerThemeの使用", - "desc": [ - "プロパティパラメータはDividerと類似しており、DividerTheme.ofを使用して分割線のテーマデータを取得できます。\"", - "また、DividerTheme【子孫】の分割線にデフォルトのスタイルを設定することもできます。これには色、太さ、高さなどが含まれます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ko_KR.json deleted file mode 100644 index 52bb21f3f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "구분선 스타일", - "info": "주로 후손 Divider 타입 컴포넌트에 기본 속성을 통일적으로 설정하기 위해 사용되며, 이 컴포넌트를 통해 기본 Divider의 속성을 가져올 수도 있습니다.", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DividerTheme 사용", - "desc": [ - "속성 매개변수는 Divider와 유사하며, DividerTheme.of를 통해 구분선 테마 데이터를 가져올 수 있습니다.", - "또한 DividerTheme【후손】의 구분선에 기본 스타일을 설정할 수 있으며, 색상, 두께, 높이 등을 포함합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_pt_PT.json deleted file mode 100644 index 7165907d1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "Estilo da Linha Divisória", - "info": "Principalmente utilizado para definir propriedades padrão para componentes do tipo Divider descendentes, também pode ser usado para obter as propriedades padrão do Divider.", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do DividerTheme", - "desc": [ - "Os parâmetros de propriedade são semelhantes ao Divider, os dados do tema da linha divisória podem ser obtidos através de DividerTheme.of, \"", - "também pode definir o estilo padrão para as linhas divisórias dos descendentes do DividerTheme, incluindo cor, espessura, altura, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ru_RU.json deleted file mode 100644 index efb2c0a42..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "Стиль разделителя", - "info": "В основном используется для установки стандартных свойств для компонентов типа Divider для потомков, также можно получить свойства стандартного Divider через этот компонент.", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование DividerTheme", - "desc": [ - "Параметры свойств аналогичны Divider, можно получить данные темы разделителя через DividerTheme.of, \"", - "также можно установить стандартный стиль для разделителей потомков DividerTheme, включая цвет, толщину, высоту и т.д." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_zh-CN.json deleted file mode 100644 index 14fdb4f64..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "分割线样式", - "info": "主要用于为后代的Divider类型组件统一设置默认属性,也可以通过该组件获取默认Divider的属性。", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DividerTheme使用", - "desc": [ - "属性参数与Divider类似,可以通过DividerTheme.of获取分割线主题数据,\"", - "也可以为DividerTheme【后代】的分割线设置默认样式,包括颜色、粗细、高度等。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/node1_base.dart deleted file mode 100644 index e7ebf6bc7..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/node1_base.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-12 -/// contact me by email 1981462002@qq.com - - - -class DividerThemeDemo extends StatelessWidget { - const DividerThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return DividerTheme( - data: const DividerThemeData( - color: Colors.orange, - thickness: 2, - space: 10, - indent: 10, - endIndent: 10, - ), - child: Wrap( - spacing: 10, - children: [ - const Divider(), - const Divider(), - const Divider(), - const Divider(), - const Divider(), - SizedBox( - height: 100, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: const [ - VerticalDivider(), - VerticalDivider(), - VerticalDivider(), - VerticalDivider(), - VerticalDivider(), - ], - ), - ) - ], - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_de_DE.json deleted file mode 100644 index 244d73751..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "Dropdown-Schaltfläche Unterstreichung ausblenden", - "info": "Wird verwendet, um die Unterstreichung der Dropdown-Schaltfläche zu entfernen, hat an sich keinen praktischen Nutzen.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DropDownButtonHideUnderline Verwendung", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_en_US.json deleted file mode 100644 index 282aa47e5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "Dropdown Button Hide Underline", - "info": "Used to remove the underline of the DropdownButton, it has little practical value.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DropDownButtonHideUnderline Usage", - "desc": [ - "【child】 : Child component 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_es_ES.json deleted file mode 100644 index df48e9dd5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "Botón desplegable ocultar subrayado", - "info": "Se utiliza para eliminar el subrayado de DropdownButton, en sí no tiene mucho valor práctico.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de DropDownButtonHideUnderline", - "desc": [ - "【child】 : Componente hijo 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_fr_FR.json deleted file mode 100644 index d285d5844..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "Bouton déroulant masquer le soulignement", - "info": "Utilisé pour supprimer le soulignement du DropdownButton, il n'a pas beaucoup de valeur pratique en soi.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de DropDownButtonHideUnderline", - "desc": [ - "【child】 : Composant enfant 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_it_IT.json deleted file mode 100644 index 1f43b0036..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "Pulsante a discesa nascondi sottolineatura", - "info": "Utilizzato per rimuovere la sottolineatura del DropdownButton, di per sé non ha un grande valore applicativo.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di DropDownButtonHideUnderline", - "desc": [ - "【child】 : componente figlio 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ja_JP.json deleted file mode 100644 index ede68d691..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "ドロップダウンボタンの下線を非表示", - "info": "DropdownButtonの下線を除去するために使用されますが、それ自体にはあまり実用的な価値はありません。", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DropDownButtonHideUnderlineの使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ko_KR.json deleted file mode 100644 index 9314420e2..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "드롭다운 버튼 숨김 선", - "info": "DropdownButton의 밑줄을 제거하는 데 사용되며, 그 자체로는 큰 활용 가치가 없습니다.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DropDownButtonHideUnderline 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_pt_PT.json deleted file mode 100644 index c46534b9b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "Botão de Dropdown Ocultar Sublinhado", - "info": "Usado para remover o sublinhado do DropdownButton, por si só não tem grande valor prático.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do DropDownButtonHideUnderline", - "desc": [ - "【child】 : Componente filho 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ru_RU.json deleted file mode 100644 index c38d09245..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "Кнопка выпадающего списка скрыть подчеркивание", - "info": "Используется для удаления подчеркивания у DropdownButton, само по себе не имеет практической ценности.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование DropDownButtonHideUnderline", - "desc": [ - "【child】 : Дочерний компонент 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_zh-CN.json deleted file mode 100644 index d1efe39bb..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "下拉按钮隐藏线", - "info": "用于去除DropdownButton的下划线,本身没有什么应用价值。", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DropDownButtonHideUnderline使用", - "desc": [ - "【child】 : 子组件 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/node1_base.dart deleted file mode 100644 index b650621f0..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/node1_base.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class CustomDropDownButtonHideUnderline extends StatefulWidget { - const CustomDropDownButtonHideUnderline({Key? key}) : super(key: key); - - @override - _CustomDropDownButtonHideUnderlineState createState() => - _CustomDropDownButtonHideUnderlineState(); -} - -class _CustomDropDownButtonHideUnderlineState - extends State { - Color _color = Colors.red; - final List _colors = const[ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - final List _info = const["红色", "黄色", "蓝色", "绿色"]; - - @override - Widget build(BuildContext context) { - return Wrap( - children: [ - Container( - margin: const EdgeInsets.symmetric(horizontal: 20), - width: 50, - height: 50, - color: _color, - ), - DropdownButtonHideUnderline( - child: DropdownButton( - value: _color, - elevation: 1, - icon: Icon( - Icons.expand_more, - size: 20, - color: _color, - ), - items: _buildItems(), - onChanged: (Color? color) => - setState(() => _color = color ?? _color)), - ), - ], - ); - } - - List> _buildItems() => _colors - .map((e) => DropdownMenuItem( - value: e, - child: Text( - _info[_colors.indexOf(e)], - style: TextStyle(color: e), - ))) - .toList(); -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_de_DE.json deleted file mode 100644 index 4376d143a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "Erweitertes Widget", - "info": "Die übergeordnete Klasse ist Flexible, entspricht einem Flexible-Widget mit dem Fit-Typ tight. Kann verschachtelte Kinder verwenden, um den verbleibenden Platz zu erweitern.", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Expanded", - "desc": [ - "【child】 : Kind 【Widget】", - "【flex】 : Verhältnis der verbleibenden Platzverteilung 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_en_US.json deleted file mode 100644 index 916e40444..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "Extended Component", - "info": "The parent class is Flexible, equivalent to a Flexible component with a fit type of tight. It can nest children to utilize the remaining space to extend the placeholder space.", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Expanded", - "desc": [ - "【child】: child 【Widget】", - "【flex】: Proportion of remaining space allocation 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_es_ES.json deleted file mode 100644 index d363072b8..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "Componente Expandido", - "info": "La clase padre es Flexible, equivalente a un componente Flexible con un tipo fit tight. Puede anidar hijos para expandir el espacio de marcador utilizando el espacio restante.", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Expanded", - "desc": [ - "【child】 : hijo 【Widget】", - "【flex】 : proporción de asignación de espacio restante 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_fr_FR.json deleted file mode 100644 index 03bfcd0a7..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "Composant Étendu", - "info": "La classe parente est Flexible, équivalente à un composant Flexible avec un fit de type tight. Peut imbriquer des enfants pour utiliser l'espace restant pour étendre l'espace de placement.", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'Expanded", - "desc": [ - "【child】 : Enfant 【Widget】", - "【flex】 : Proportion de distribution de l'espace restant 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_it_IT.json deleted file mode 100644 index b0272f3c9..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "Componente Esteso", - "info": "La classe genitore è Flexible, equivalente a un componente Flexible con tipo fit tight. Può annidare figli per espandere lo spazio occupato utilizzando lo spazio rimanente.", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di Expanded", - "desc": [ - "【child】 : figlio 【Widget】", - "【flex】 : percentuale di allocazione dello spazio rimanente 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ja_JP.json deleted file mode 100644 index 39719a02a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "拡張コンポーネント", - "info": "親クラスはFlexibleで、fitタイプがtightのFlexibleコンポーネントに相当します。ネストされた子要素が残りのスペースを使用して占有スペースを拡張します。", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Expandedの基本的な使用法", - "desc": [ - "【child】 : 子要素 【Widget】", - "【flex】 : 残りスペースの配分比率 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ko_KR.json deleted file mode 100644 index 5ae804d4f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "확장 컴포넌트", - "info": "부모 클래스는 Flexible이며, fit 타입이 tight인 Flexible 컴포넌트와 동일합니다. 자식을 중첩하여 남은 공간을 사용하여 공간을 확장할 수 있습니다.", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Expanded 기본 사용법", - "desc": [ - "【child】 : 자식 【Widget】", - "【flex】 : 남은 공간 배분 비율 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_pt_PT.json deleted file mode 100644 index 3831e4733..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "Componente Expandido", - "info": "A classe pai é Flexible, equivalente a um componente Flexible com o tipo fit como tight. Pode aninhar filhos para utilizar o espaço restante e expandir o espaço ocupado.", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Expanded", - "desc": [ - "【child】 : filho 【Widget】", - "【flex】 : proporção de distribuição do espaço restante 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ru_RU.json deleted file mode 100644 index 3873c103a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "Расширяемый компонент", - "info": "Родительский класс - Flexible, эквивалент компоненту Flexible с типом fit tight. Может вкладывать дочерние элементы для расширения занимаемого пространства.", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Expanded", - "desc": [ - "【child】 : Дочерний элемент 【Widget】", - "【flex】 : Доля распределения оставшегося пространства 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_zh-CN.json deleted file mode 100644 index c6ddf83a3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "延展组件", - "info": "父类是Flexible,相当于一个fit类型为tight的Flexible组件。可嵌套孩子利用剩余空间对占位空间进行延展。", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Expanded基本使用", - "desc": [ - "【child】 : 孩子 【Widget】", - "【flex】 : 剩余空间分配占比 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/node1_base.dart deleted file mode 100644 index b642cf5b3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/node1_base.dart +++ /dev/null @@ -1,46 +0,0 @@ - import 'package:flutter/material.dart'; -import 'package:widgets/utils/color_utils.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class CustomExpended extends StatefulWidget { - const CustomExpended({Key? key}) : super(key: key); - - @override - _CustomExpendedState createState() => _CustomExpendedState(); -} - -class _CustomExpendedState extends State { - @override - Widget build(BuildContext context) { - return Column( - children: [ - buildRow([0, 0, 0]), - const SizedBox(height: 10,), - buildRow([0, 0, 1]), - const SizedBox(height: 10,), - buildRow([1, 1, 1]), - const SizedBox(height: 10,), - buildRow([2, 3, 3]), - ], - ); - } - - Widget buildRow(List num) { - return Row( - children: num.map((e) => Expanded( - flex: e, - child: Container( - alignment: Alignment.center, - width: 50, - height: 50, - color: ColorUtils.randomColor(), - child: Text( - 'flex=$e', - style: const TextStyle(color: Colors.white), - ), - ), - )).toList()); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_de_DE.json deleted file mode 100644 index faa0e1fff..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "Flexible Komponente", - "info": "Kann nur in Row-, Column- und Flex-Layouts verwendet werden, kann Kinder verschachteln, um den verbleibenden Platz zu nutzen und den Platzhalterbereich zu erweitern, kann auch den Anpassungstyp angeben.", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Flexible", - "desc": [ - "【child】 : Kind 【Widget】", - "【fit】 : Anpassungsmodus*2 【FlexFit】", - "【flex】 : Anteil der verbleibenden Platzverteilung 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_en_US.json deleted file mode 100644 index db2399ef3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "Flexible Component", - "info": "Can only be used in Row, Column, and Flex layouts. It can nest children to utilize the remaining space to extend the placeholder space, and the adaptation type can also be specified.", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Flexible", - "desc": [ - "【child】: child 【Widget】", - "【fit】: adaptation mode*2 【FlexFit】", - "【flex】: remaining space allocation ratio 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_es_ES.json deleted file mode 100644 index 39e613ca9..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "Componente Flexible", - "info": "Solo se puede usar en diseños Row, Column y Flex, puede anidar hijos para extender el espacio de marcador de posición utilizando el espacio restante, también se puede especificar el tipo de adaptación.", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Flexible", - "desc": [ - "【child】 : hijo 【Widget】", - "【fit】 : modo de adaptación*2 【FlexFit】", - "【flex】 : proporción de asignación de espacio restante 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_fr_FR.json deleted file mode 100644 index 0c271f947..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "Composant Flexible", - "info": "Peut uniquement être utilisé dans les dispositions Row, Column et Flex, peut imbriquer des enfants pour étendre l'espace résiduel, et peut également spécifier le type d'adaptation.", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Flexible", - "desc": [ - "【child】 : Enfant 【Widget】", - "【fit】 : Mode d'adaptation*2 【FlexFit】", - "【flex】 : Proportion de l'allocation de l'espace résiduel 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_it_IT.json deleted file mode 100644 index 25a628dbd..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "Componente Flessibile", - "info": "Può essere utilizzato solo nei layout Row, Column e Flex, può annidare figli per espandere lo spazio rimanente, e può anche specificare il tipo di adattamento.", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di Flexible", - "desc": [ - "【child】 : Figlio 【Widget】", - "【fit】 : Modalità di adattamento*2 【FlexFit】", - "【flex】 : Percentuale di allocazione dello spazio rimanente 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ja_JP.json deleted file mode 100644 index 3ed301db6..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "フレキシブルコンポーネント", - "info": "Row、Column、Flexレイアウトでのみ使用可能で、ネストされた子要素を使用して残りのスペースを拡張したり、適応タイプを指定したりできます。", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Flexibleの基本使用", - "desc": [ - "【child】 : 子要素 【Widget】", - "【fit】 : 適応モード*2 【FlexFit】", - "【flex】 : 残りスペースの分配比率 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ko_KR.json deleted file mode 100644 index d683f4c53..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "유연한 컴포넌트", - "info": "Row, Column 및 Flex 레이아웃에서만 사용할 수 있으며, 자식을 중첩하여 남은 공간을 확장하거나 적응 유형을 지정할 수 있습니다.", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Flexible 기본 사용법", - "desc": [ - "【child】 : 자식 【Widget】", - "【fit】 : 적응 모드*2 【FlexFit】", - "【flex】 : 남은 공간 할당 비율 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_pt_PT.json deleted file mode 100644 index acd61655d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexível", - "localName": "Componente Flexível", - "info": "Só pode ser usado em layouts Row, Column e Flex, pode aninhar filhos para estender o espaço de preenchimento utilizando o espaço restante, e também pode especificar o tipo de ajuste.", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Flexible", - "desc": [ - "【child】 : filho 【Widget】", - "【fit】 : modo de ajuste*2 【FlexFit】", - "【flex】 : proporção de distribuição do espaço restante 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ru_RU.json deleted file mode 100644 index 4a71dd915..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "Гибкий компонент", - "info": "Может использоваться только в макетах Row, Column и Flex, может вкладывать дочерние элементы для расширения занимаемого пространства с использованием оставшегося пространства, также можно указать тип адаптации.", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Flexible", - "desc": [ - "【child】 : Дочерний элемент 【Widget】", - "【fit】 : Режим адаптации*2 【FlexFit】", - "【flex】 : Доля распределения оставшегося пространства 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_zh-CN.json deleted file mode 100644 index 4c7ff0ada..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "灵活组件", - "info": "只能用于只能用于Row、Column和Flex布局中,可嵌套孩子利用剩余空间对占位空间进行延展,也可指定适应类型。", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Flexible基本使用", - "desc": [ - "【child】 : 孩子 【Widget】", - "【fit】 : 适应模式*2 【FlexFit】", - "【flex】 : 剩余空间分配占比 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/node1_base.dart deleted file mode 100644 index 39fd82d79..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/node1_base.dart +++ /dev/null @@ -1,85 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class CustomFlexible extends StatefulWidget { - const CustomFlexible({Key? key}) : super(key: key); - - @override - _CustomFlexibleState createState() => _CustomFlexibleState(); -} - -class _CustomFlexibleState extends State { - double _width = 300.0; - bool _loose = false; - - @override - Widget build(BuildContext context) { - return Column(children: [ - Container( - color: Colors.grey.withAlpha(33), - width: _width, - padding: const EdgeInsets.all(8.0), - child: Row( - children: [ - Flexible( - flex: 2, - child: Container( - alignment: Alignment.center, - height: 50, - color: Colors.red, - child: const Text( - 'flex=2', - style: TextStyle(color: Colors.white), - ), - ), - ), - Flexible( - flex: 3, - child: Container( - alignment: Alignment.center, - height: 50, - color: Colors.blue, - child: const Text( - 'flex=3', - style: TextStyle(color: Colors.white), - ), - ), - ), - Flexible( - flex: 4, - fit: _loose?FlexFit.loose:FlexFit.tight, - child: Container( - constraints: const BoxConstraints(maxWidth: 60), - alignment: Alignment.center, - height: 50, - color: Colors.green, - child: Text( - 'flex=4 \nfit:${_loose?'loose':'tight'}', - style: const TextStyle(color: Colors.white), - ), - ), - ) - ], - )), - _buildOp() - ]); - } - - Widget _buildOp() => Row( - children: [ - Switch( - value: _loose, - onChanged: (v) => setState(() => _loose = v)), - Expanded( - child: Slider( - divisions: 10, - min: 100, - max: 350, - value: _width, - onChanged: (v) => setState(() => _width = v)), - ), - ], - ); -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_de_DE.json deleted file mode 100644 index 0e9d23ecd..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "Icon-Stil", - "info": "Kann ein Kind aufnehmen und den Standardstil für die Icons der Nachkommen festlegen. Wird häufig verwendet, um den Stil mehrerer gleicher Icons zu vereinheitlichen und die individuelle Einstellung zu vermeiden.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Verwendung von IconTheme", - "desc": [ - "Kann die Icon-Themen-Daten über IconTheme.of abrufen und den Standardstil für die Icon-Komponenten der Nachkommen von IconTheme festlegen, einschließlich Farbe, Transparenz und Größe." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_en_US.json deleted file mode 100644 index 5fbd6356e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "Icon Style", - "info": "Can accommodate one child, specifying the default style for the descendant icons. Commonly used to unify the styles of multiple identical icons, avoiding setting them one by one.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconTheme Usage", - "desc": [ - "You can obtain the icon theme data through IconTheme.of, or set the default style for the icon components of IconTheme【descendants】, including color, opacity, and size." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_es_ES.json deleted file mode 100644 index 74294a705..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "Tema de iconos", - "info": "Puede contener un hijo y especifica un estilo predeterminado para los iconos de los descendientes. Se usa comúnmente para unificar el estilo de múltiples iconos idénticos, evitando configurarlos uno por uno.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de IconTheme", - "desc": [ - "Puede obtener los datos del tema de iconos a través de IconTheme.of, y también puede establecer un estilo predeterminado para los componentes de iconos de los descendientes de IconTheme, incluyendo color, transparencia y tamaño." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_fr_FR.json deleted file mode 100644 index 1f050871f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "Thème d'icône", - "info": "Peut contenir un enfant, spécifie le style par défaut pour les icônes des descendants. Souvent utilisé pour unifier le style de plusieurs icônes identiques, évitant ainsi de les configurer une par une.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de IconTheme", - "desc": [ - "Vous pouvez obtenir les données du thème d'icône via IconTheme.of, ou définir un style par défaut pour les composants d'icône des descendants de IconTheme, y compris la couleur, la transparence et la taille." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_it_IT.json deleted file mode 100644 index 9a7ab28fd..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "Tema Icona", - "info": "Può contenere un figlio, specifica lo stile predefinito per le icone dei discendenti. Comunemente utilizzato per uniformare lo stile di più icone identiche, evitando di impostarle una per una.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di IconTheme", - "desc": [ - "È possibile ottenere i dati del tema dell'icona tramite IconTheme.of, oppure impostare lo stile predefinito per i componenti icona dei discendenti di IconTheme, inclusi colore, trasparenza e dimensione." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ja_JP.json deleted file mode 100644 index 9445365c5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "アイコンテーマ", - "info": "子要素を1つ持つことができ、子孫のアイコンのデフォルトスタイルを指定します。複数の同じアイコンのスタイルを統一し、個別に設定する手間を省くために使用されます。", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconThemeの使用", - "desc": [ - "IconTheme.ofを使用してアイコンテーマデータを取得できます。また、IconThemeの【子孫】のアイコンコンポーネントにデフォルトのスタイル(色、透明度、サイズ)を設定できます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ko_KR.json deleted file mode 100644 index 329848a2f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "아이콘 스타일", - "info": "하나의 자식을 포함할 수 있으며, 후손 아이콘의 기본 스타일을 지정합니다. 여러 동일한 아이콘의 스타일을 통일하고, 일일이 설정하는 것을 방지하는 데 자주 사용됩니다.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconTheme 사용", - "desc": [ - "IconTheme.of를 통해 아이콘 테마 데이터를 얻을 수 있으며, IconTheme의 후손 아이콘 컴포넌트에 기본 스타일(색상, 투명도, 크기 등)을 설정할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_pt_PT.json deleted file mode 100644 index 002df5edc..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "Tema de Ícones", - "info": "Pode conter um filho, especificando o estilo padrão para ícones descendentes. Frequentemente usado para unificar o estilo de vários ícones idênticos, evitando a configuração individual.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do IconTheme", - "desc": [ - "Pode obter os dados do tema do ícone através de IconTheme.of, e também pode definir o estilo padrão para componentes de ícone descendentes de IconTheme, incluindo cor, transparência e tamanho." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ru_RU.json deleted file mode 100644 index 971249255..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "Тема иконок", - "info": "Может содержать один дочерний элемент, задающий стиль по умолчанию для иконок потомков. Часто используется для унификации стиля нескольких одинаковых иконок, чтобы избежать индивидуальной настройки.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование IconTheme", - "desc": [ - "Можно получить данные темы иконок через IconTheme.of, а также установить стиль по умолчанию для иконок-потомков IconTheme, включая цвет, прозрачность и размер." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_zh-CN.json deleted file mode 100644 index 945968e02..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "图标样式", - "info": "可容纳一个孩子,为后代的图标指定默认样式。常用于多个相同图标的样式统一,避免一一设置。", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconTheme使用", - "desc": [ - "可以通过IconTheme.of获取图标主题数据,也可以为IconTheme【后代】的图标组件设置默认样式,包括颜色、透明度、尺寸。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/node1_base.dart deleted file mode 100644 index 19a609761..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/node1_base.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-12 -/// contact me by email 1981462002@qq.com - -class IconThemeDemo extends StatelessWidget { - const IconThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return IconTheme( - data: const IconThemeData( - color: Colors.purple, - opacity: 1.0, - size: 30 - ), - child: Wrap( - spacing: 10, - children: const[ - Icon(Icons.add), - Icon(Icons.ac_unit), - Icon(Icons.g_translate), - Icon(Icons.remove) - ], - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_de_DE.json deleted file mode 100644 index 7001d6835..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "Gemeinsames Modell", - "info": "Es ist eine abstrakte Unterklasse von InheritedWidget, die Daten über den Kontext an den Unterbaum weiterleitet und die Granularität der Abhängigkeitsbenachrichtigung über den Aspekt Aspect steuert.", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "Verwendung von InheritedModel", - "desc": [ - "【child】: Unterkomponente 【Widget】", - "Unten ist ein benutzerdefiniertes InheritedModel, das die gemeinsame Nutzung von Daten im Unterbaum implementiert; und definiert zwei Aspekte, Farbe und Wert, um die Granularität der Abhängigkeitsbenachrichtigung zu steuern." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_en_US.json deleted file mode 100644 index 3f2d61643..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "Shared Model", - "info": "It is an abstract subclass of InheritedWidget, which passes data to the subtree through context and controls the granularity of dependency notifications through Aspect.", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "InheritedModel Usage", - "desc": [ - "【child】: child component 【Widget】", - "Below is a custom InheritedModel that implements subtree sharing of data; and defines two aspects, color and value, to control the granularity of dependency notifications." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_es_ES.json deleted file mode 100644 index b257f274e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "Modelo Compartido", - "info": "Es una subclase abstracta de InheritedWidget, que pasa datos al subárbol a través del contexto y controla la granularidad de las notificaciones de dependencia a través del aspecto Aspect.", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso de InheritedModel", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "A continuación se muestra un InheritedModel personalizado que implementa el intercambio de datos en el subárbol; y define dos aspectos, color y valor, para controlar la granularidad de las notificaciones de dependencia." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_fr_FR.json deleted file mode 100644 index 9d7d8fe97..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "Modèle partagé", - "info": "Il s'agit d'une sous-classe abstraite de InheritedWidget, qui transmet des données au sous-arbre via le contexte, et contrôle la granularité des notifications de dépendance via l'aspect Aspect.", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de InheritedModel", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "Voici un InheritedModel personnalisé, qui permet le partage de données dans le sous-arbre ; et définit deux aspects, la couleur et la valeur, pour contrôler la granularité des notifications de dépendance." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_it_IT.json deleted file mode 100644 index cf2406c80..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "Modello Condiviso", - "info": "È una sottoclasse astratta di InheritedWidget, che passa i dati al sottoalbero tramite il contesto e controlla la granularità delle notifiche di dipendenza attraverso l'aspetto Aspect.", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso di InheritedModel", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "Di seguito è riportato un InheritedModel personalizzato che implementa la condivisione dei dati nel sottoalbero; e definisce due aspetti, colore e valore, per controllare la granularità delle notifiche di dipendenza." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ja_JP.json deleted file mode 100644 index f90449e8c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "共有モデル", - "info": "これは InheritedWidget の抽象サブクラスで、context を介してサブツリーにデータを渡し、Aspect の側面を介して依存通知の粒度を制御します。", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "InheritedModel の使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "以下はカスタム InheritedModel で、データのサブツリー共有を実装し、色と数値の二つの側面を定義して、依存通知の粒度を制御します。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ko_KR.json deleted file mode 100644 index f2cf7ee43..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "공유 모델", - "info": "이것은 InheritedWidget 추상 서브클래스로, context를 통해 서브트리에 데이터를 전달하고 Aspect 측면을 통해 의존성 알림의 세분화를 제어합니다.", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "InheritedModel 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "다음은 사용자 정의 InheritedModel로, 데이터의 서브트리 공유를 구현하고 색상과 값 두 가지 측면을 정의하여 의존성 알림의 세분화를 제어합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_pt_PT.json deleted file mode 100644 index b5735a27b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "Modelo Compartilhado", - "info": "É uma subclasse abstrata de InheritedWidget, que transmite dados para a subárvore através do context e controla a granularidade das notificações de dependência através do Aspect.", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso do InheritedModel", - "desc": [ - "【child】 : Componente filho 【Widget】", - "Abaixo está um InheritedModel personalizado, que implementa o compartilhamento de dados na subárvore; e define dois aspectos, cor e valor, para controlar a granularidade das notificações de dependência." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ru_RU.json deleted file mode 100644 index cc19d1a5d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "Общая модель", - "info": "Это абстрактный подкласс InheritedWidget, который передает данные в поддерево через context и управляет гранулярностью уведомлений о зависимостях через аспект Aspect.", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "Использование InheritedModel", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "Ниже приведен пример пользовательского InheritedModel, который реализует обмен данными в поддереве; а также определяет два аспекта: цвет и значение, чтобы управлять гранулярностью уведомлений о зависимостях." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_zh-CN.json deleted file mode 100644 index cd3566fab..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "共享模型", - "info": "它是 InheritedWidget 抽象子类,通过 context 向子树传递数据,并通过 Aspect 方面控制依赖通知的粒度。", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "InheritedModel 使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "下面是一个自定义 InheritedModel,实现数据的子树共享;并且定义颜色和数值两个方面,控制依赖通知的粒度。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/node1.dart b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/node1.dart deleted file mode 100644 index 6516f3b61..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/node1.dart +++ /dev/null @@ -1,251 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class InheritedModelDemo extends StatefulWidget { - const InheritedModelDemo({super.key}); - - @override - State createState() => _InheritedModelDemoState(); -} - -class _InheritedModelDemoState extends State { - int _counter = 0; - late Color _color = colors.first; - - final List colors = const [ - Colors.black, - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green, - Colors.orange, - Colors.indigo, - Colors.purple, - ]; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - _CircleIconButton( - color: Colors.green, - icon: Icons.remove, - onPressed: _decrease, - ), - CounterModel( - color: _color, - counter: _counter, - child: const _BoxDecorationWrap(), - ), - _CircleIconButton( - color: Colors.blue, - icon: Icons.add, - onPressed: _increase, - ), - ], - ), - const SizedBox(height: 20), - _ColorSelector( - colors: colors, - activeColor: _color, - onSelect: _onSelectColor, - ) - ], - ); - } - - void _increase() { - setState(() => _counter += 1); - } - - void _decrease() { - setState(() => _counter -= 1); - } - - void _onSelectColor(Color value) { - setState(() { - _color = value; - }); - } -} -enum CounterAspect { color, value } - -class CounterModel extends InheritedModel { - const CounterModel({ - super.key, - this.color, - this.counter, - required super.child, - }); - - final Color? color; - final int? counter; - - static CounterModel? of(BuildContext context,CounterAspect aspect){ - return InheritedModel.inheritFrom(context, aspect: aspect); - } - - @override - bool updateShouldNotify(CounterModel oldWidget) { - return color != oldWidget.color || counter != oldWidget.counter; - } - - @override - bool updateShouldNotifyDependent(CounterModel oldWidget, Set dependencies) { - if (color != oldWidget.color && dependencies.contains(CounterAspect.color)) { - return true; - } - if (counter != oldWidget.counter && dependencies.contains(CounterAspect.value)) { - return true; - } - return false; - } -} - -class _CircleIconButton extends StatelessWidget { - final Color color; - final IconData icon; - final VoidCallback onPressed; - - const _CircleIconButton( - {super.key, - required this.color, - required this.icon, - required this.onPressed}); - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: onPressed, - child: Container( - margin: const EdgeInsets.symmetric(horizontal: 20), - decoration: const BoxDecoration( - color: Color(0xFFDFDFDF), - shape: BoxShape.circle, - ), - child: Padding( - padding: const EdgeInsets.all(2.0), - child: Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: color, - shape: BoxShape.circle, - // border: Border.all(width: 14.0, color: Color(0xFFDFDFDF)) - ), - child: Icon( - icon, - color: Colors.white, - size: 16, - ), - ), - ), - ), - ); - } -} - -class _ColorSelector extends StatelessWidget { - final List colors; - final ValueChanged onSelect; - final Color activeColor; - - const _ColorSelector({ - super.key, - required this.colors, - required this.activeColor, - required this.onSelect, - }); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 6, - children: colors - .map((e) => GestureDetector( - onTap: () => onSelect(e), - child: _buildCircle(e), - )) - .toList(), - ); - } - - Widget _buildCircle(Color color) { - return CircleAvatar( - radius: 12, - child: color == activeColor - ? const Icon( - Icons.check, - color: Colors.white, - size: 16, - ) - : null, - backgroundColor: color, - ); - } -} - -class _BoxDecorationWrap extends StatefulWidget { - const _BoxDecorationWrap({super.key}); - - @override - State<_BoxDecorationWrap> createState() => _BoxDecorationWrapState(); -} - -class _BoxDecorationWrapState extends State<_BoxDecorationWrap> { - - @override - void didChangeDependencies() { - print("======BoxDecorationWrap#didChangeDependencies========="); - super.didChangeDependencies(); - } - - @override - Widget build(BuildContext context) { - final Color color = CounterModel.of(context,CounterAspect.color)?.color ?? Colors.black; - return Container( - padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), - child: const _CounterText(), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color: color), - borderRadius: BorderRadius.circular(8), - boxShadow: [ - BoxShadow( - color: color, - spreadRadius: 2, - blurRadius: 8, - offset: const Offset(0, 0)) - ]), - ); - } -} - -class _CounterText extends StatefulWidget { - const _CounterText({super.key}); - - @override - State<_CounterText> createState() => _CounterTextState(); -} - -class _CounterTextState extends State<_CounterText> { - @override - void didChangeDependencies() { - print("======CounterText#didChangeDependencies========="); - super.didChangeDependencies(); - } - @override - Widget build(BuildContext context) { - final Color color = CounterModel.of(context,CounterAspect.color)?.color ?? Colors.black; - final int counter = CounterModel.of(context,CounterAspect.value)?.counter ?? 0; - return Text( - "Counter = $counter", - style: TextStyle(color: color,fontWeight: FontWeight.bold), - ); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_de_DE.json deleted file mode 100644 index 201bc84a2..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_de_DE.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "Vererbungsthema", - "info": "Es ist eine abstrakte Klasse mit vielen XXXTheme-bezogenen Unterklassen, die verwendet werden, um Eigenschaften wie Farben und Textstile zu definieren und diese Eigenschaften in Unterbäumen gemeinsam zu nutzen.", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in InheritedTheme", - "desc": [ - "InheritedTheme.capture kann das übergeordnete Thema erfassen und ein CapturedThemes-Objekt erhalten, durch dessen wrap-Methode das erfasste Thema routenübergreifend verwendet werden kann.", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_en_US.json deleted file mode 100644 index 1dce38c51..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_en_US.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "Inherited Theme", - "info": "It is an abstract class with many XXXTheme related subclasses, used to define properties such as colors and text styles, and share these properties in the subtree.", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to InheritedTheme", - "desc": [ - "InheritedTheme.capture can capture the upper theme, obtain the CapturedThemes object, and use the captured theme across routes through the wrap method of this object.", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_es_ES.json deleted file mode 100644 index bd1c9c21a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_es_ES.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "Tema Heredado", - "info": "Es una clase abstracta con muchas subclases relacionadas con XXXTheme, utilizadas para definir propiedades como colores, estilos de texto, etc., y compartir estas propiedades en el subárbol.", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a InheritedTheme", - "desc": [ - "InheritedTheme.capture puede capturar el tema superior y obtener un objeto CapturedThemes, a través del cual el método wrap puede usar el tema capturado entre rutas.", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_fr_FR.json deleted file mode 100644 index d2511a090..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_fr_FR.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "Thème Hérité", - "info": "C'est une classe abstraite, avec de nombreuses sous-classes XXXTheme associées, utilisées pour définir des propriétés telles que les couleurs, les styles de texte, etc., et partager ces propriétés dans l'arbre de sous-éléments.", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à InheritedTheme", - "desc": [ - "InheritedTheme.capture peut capturer le thème supérieur, obtenir un objet CapturedThemes, et utiliser la méthode wrap de cet objet pour utiliser le thème capturé à travers les routes.", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_it_IT.json deleted file mode 100644 index b7d18dd1b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_it_IT.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "Tema Ereditato", - "info": "È una classe astratta, con molte sottoclassi correlate a XXXTheme, utilizzate per definire proprietà come colori, stili di testo, ecc., e condividere queste proprietà all'interno del sottoalbero.", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a InheritedTheme", - "desc": [ - "InheritedTheme.capture può catturare il tema superiore, ottenendo un oggetto CapturedThemes, attraverso il metodo wrap di questo oggetto è possibile utilizzare il tema catturato attraverso le rotte.", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ja_JP.json deleted file mode 100644 index 37d3da27f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ja_JP.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "継承テーマ", - "info": "これは抽象クラスで、非常に多くの XXXTheme 関連のサブクラスがあり、色やテキストスタイルなどの属性を定義し、サブツリー内でこれらの属性を共有するために使用されます。", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InheritedTheme 紹介", - "desc": [ - "InheritedTheme.capture を使用して上位のテーマをキャプチャし、CapturedThemes オブジェクトを取得できます。このオブジェクトの wrap メソッドを使用して、キャプチャしたテーマをルート間で使用できます。", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ko_KR.json deleted file mode 100644 index 8d0752a10..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ko_KR.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "전통 테마", - "info": "추상 클래스이며, 많은 XXXTheme 관련 하위 클래스가 있어 색상, 텍스트 스타일 등의 속성을 정의하고 하위 트리에서 이러한 속성을 공유합니다.", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InheritedTheme 소개", - "desc": [ - "InheritedTheme.capture는 상위 테마를 캡처하여 CapturedThemes 객체를 가져올 수 있으며, 이 객체의 wrap 메서드를 통해 캡처한 테마를 라우터 간에 사용할 수 있습니다.", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_pt_PT.json deleted file mode 100644 index 7976fa9fe..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_pt_PT.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "Tema de Herança", - "info": "É uma classe abstrata, com muitas subclasses relacionadas a XXXTheme, usadas para definir propriedades como cores, estilos de texto, etc., e compartilhar essas propriedades na subárvore.", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao InheritedTheme", - "desc": [ - "InheritedTheme.capture pode capturar o tema superior, obter o objeto CapturedThemes, e através do método wrap desse objeto, o tema capturado pode ser usado entre rotas.", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ru_RU.json deleted file mode 100644 index c8f3df049..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ru_RU.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "Тема наследования", - "info": "Это абстрактный класс, имеющий множество связанных подклассов XXXTheme, используемых для определения таких свойств, как цвета, стили текста и т.д., которые затем используются в поддереве.", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в InheritedTheme", - "desc": [ - "InheritedTheme.capture может захватывать тему верхнего уровня, получая объект CapturedThemes, через метод wrap которого можно использовать захваченную тему между маршрутами.", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_zh-CN.json deleted file mode 100644 index c300aa9e4..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_zh-CN.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "传承主题", - "info": "它是抽象类,有非常多的 XXXTheme 相关子类,用于定义颜色、文字样式等属性,在子树中共享这些属性。", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InheritedTheme 介绍", - "desc": [ - "InheritedTheme.capture 可以抓取上层主题,获取 CapturedThemes 对象,通过该对象 wrap 方法可以跨路由使用抓到的主题。", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/node1_base.dart deleted file mode 100644 index 3fd4a5eee..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/node1_base.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class InheritedThemeDemo extends StatelessWidget { - const InheritedThemeDemo({super.key}); - - - @override - Widget build(BuildContext context) { - return const DefaultTextStyle( - style: TextStyle(fontSize: 24, color: Colors.blue), - child: TestBody(), - ); - } -} - -class TestBody extends StatelessWidget { - const TestBody({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - - return GestureDetector( - onTap: () => _toNextPage(context), - child: Container( - height: 60, - margin: const EdgeInsets.only(left: 40,right: 40), - alignment: Alignment.center, - color: Theme.of(context).primaryColor.withOpacity(0.1), - child: const Text('InheritedTheme'))); - } - - void _toNextPage(BuildContext context) { - // final NavigatorState navigator = Navigator.of(context); - // final CapturedThemes themes = - // InheritedTheme.capture(from: context, to: navigator.context); - // - // Navigator.of(context).push( - // MaterialPageRoute( - // builder: (BuildContext _) { - // return themes.wrap(Container( - // alignment: Alignment.center, - // color: Colors.white, - // child: Text('Flutter Unit'), - // )); - // }, - // ), - // ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_de_DE.json deleted file mode 100644 index e23bcbe8b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_de_DE.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "Vererbte Komponente", - "info": "Diese Klasse ist eine abstrakte Klasse, deren Funktion darin besteht, Daten im aktuellen Kontext zu speichern und diese Daten in den Kontexten der nachfolgenden Knoten gemeinsam zu nutzen. Es gibt viele Implementierungsklassen, einschließlich verschiedener Themenkomponenten, MediaQuery usw.", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Column", - "desc": [ - "【children】 : Komponentenliste 【List】", - "【mainAxisAlignment】 : Hauptachsenausrichtung 【MainAxisAlignment】", - "【crossAxisAlignment】 : Kreuzachsenausrichtung 【CrossAxisAlignment】", - "【textBaseline】 : Textbaseline 【TextBaseline】", - "【verticalDirection】 : Vertikale Richtung 【VerticalDirection】", - "【mainAxisSize】 : Hauptachsengröße 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "InheritedWidget Beispiel", - "desc": [ - "Unten wird die Verwendung der InheritedWidget-Komponente anhand eines Farbzählerprojekts gezeigt." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_en_US.json deleted file mode 100644 index e3e3c0e94..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_en_US.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "Inherited Widget", - "info": "This class is an abstract class, which can store data in this context and share that data in the context of its subsequent nodes. There are many implementation classes, including various theme components, MediaQuery, etc.", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Column", - "desc": [ - "【children】: Component list 【List】", - "【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】", - "【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】", - "【textBaseline】: Text baseline 【TextBaseline】", - "【verticalDirection】: Vertical direction 【VerticalDirection】", - "【mainAxisSize】: Main axis size 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "InheritedWidget Example", - "desc": [ - "Below is an example of using the InheritedWidget component through a color counter project." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_es_ES.json deleted file mode 100644 index 2a335a4b7..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_es_ES.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "Componente Heredado", - "info": "Esta clase es una clase abstracta que permite almacenar datos en este contexto y compartirlos en los contextos de sus nodos subsiguientes. Tiene muchas clases de implementación, incluyendo varios componentes temáticos, MediaQuery, etc.", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Column", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【mainAxisAlignment】 : Alineación del eje principal 【MainAxisAlignment】", - "【crossAxisAlignment】 : Alineación del eje transversal 【CrossAxisAlignment】", - "【textBaseline】 : Línea base del texto 【TextBaseline】", - "【verticalDirection】 : Dirección vertical 【VerticalDirection】", - "【mainAxisSize】 : Tamaño del eje principal 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "Ejemplo de InheritedWidget", - "desc": [ - "A continuación se muestra un proyecto de contador de colores que demuestra el uso del componente InheritedWidget." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_fr_FR.json deleted file mode 100644 index 0cba5d15d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_fr_FR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "Widget Hérité", - "info": "Cette classe est une classe abstraite, dont le rôle est de stocker des données dans ce contexte et de partager ces données dans les contextes des nœuds suivants. Il existe de nombreuses classes d'implémentation, y compris divers composants de thème, MediaQuery, etc.", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Column", - "desc": [ - "【children】 : Liste de composants 【List】", - "【mainAxisAlignment】 : Alignement de l'axe principal 【MainAxisAlignment】", - "【crossAxisAlignment】 : Alignement de l'axe transversal 【CrossAxisAlignment】", - "【textBaseline】 : Ligne de base du texte 【TextBaseline】", - "【verticalDirection】 : Direction verticale 【VerticalDirection】", - "【mainAxisSize】 : Taille de l'axe principal 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "Exemple de InheritedWidget", - "desc": [ - "Ci-dessous, un projet de compteur de couleur illustre l'utilisation du composant InheritedWidget." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_it_IT.json deleted file mode 100644 index b8fa4f6c4..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_it_IT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "Componente Ereditato", - "info": "Questa classe è astratta e ha la funzione di memorizzare dati nel contesto corrente e condividerli nei contesti dei nodi successivi. Ci sono molte classi di implementazione, inclusi vari componenti tematici, MediaQuery, ecc.", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di Column", - "desc": [ - "【children】 : Lista di componenti 【List】", - "【mainAxisAlignment】 : Allineamento dell'asse principale 【MainAxisAlignment】", - "【crossAxisAlignment】 : Allineamento dell'asse trasversale 【CrossAxisAlignment】", - "【textBaseline】 : Linea di base del testo 【TextBaseline】", - "【verticalDirection】 : Direzione verticale 【VerticalDirection】", - "【mainAxisSize】 : Dimensione dell'asse principale 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "Esempio di InheritedWidget", - "desc": [ - "Di seguito è mostrato l'uso del componente InheritedWidget attraverso un progetto di contatore di colori." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ja_JP.json deleted file mode 100644 index bff24ebee..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ja_JP.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "継承ウィジェット", - "info": "このクラスは抽象クラスで、このコンテキストにデータを保存し、その後のノードのコンテキストでそのデータを共有する役割を果たします。多くの実装クラスがあり、さまざまなテーマウィジェットやMediaQueryなどが含まれます。", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Columnの基本使用", - "desc": [ - "【children】 : ウィジェットリスト 【List】", - "【mainAxisAlignment】 : 主軸の整列 【MainAxisAlignment】", - "【crossAxisAlignment】 : 交差軸の整列 【CrossAxisAlignment】", - "【textBaseline】 : テキストベースライン 【TextBaseline】", - "【verticalDirection】 : 垂直方向 【VerticalDirection】", - "【mainAxisSize】 : 主軸のサイズ 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "InheritedWidget の使用例", - "desc": [ - "以下は、色カウンタープロジェクトを通じてInheritedWidgetウィジェットの使用を展示しています。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ko_KR.json deleted file mode 100644 index 99daa4cc5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ko_KR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "상속 위젯", - "info": "이 클래스는 추상 클래스로, 본 컨텍스트에서 데이터를 저장하고, 그 후속 노드의 컨텍스트에서 해당 데이터를 공유할 수 있습니다. 다양한 구현 클래스가 있으며, 다양한 테마 위젯, MediaQuery 등이 포함됩니다.", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Column 기본 사용", - "desc": [ - "【children】 : 위젯 리스트 【List】", - "【mainAxisAlignment】 : 메인 축 정렬 【MainAxisAlignment】", - "【crossAxisAlignment】 : 교차 축 정렬 【CrossAxisAlignment】", - "【textBaseline】 : 텍스트 기준선 【TextBaseline】", - "【verticalDirection】 : 수직 방향 【VerticalDirection】", - "【mainAxisSize】 : 메인 축 크기 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "InheritedWidget 예제", - "desc": [ - "아래는 색상 카운터 프로젝트를 통해 InheritedWidget 위젯의 사용을 보여줍니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_pt_PT.json deleted file mode 100644 index e56e8e501..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_pt_PT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "Componente Herdado", - "info": "Esta classe é abstrata e tem a função de armazenar dados no contexto atual e compartilhar esses dados nos contextos dos nós subsequentes. Existem muitas classes de implementação, incluindo vários componentes temáticos, MediaQuery, etc.", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Column", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【mainAxisAlignment】 : Alinhamento do eixo principal 【MainAxisAlignment】", - "【crossAxisAlignment】 : Alinhamento do eixo cruzado 【CrossAxisAlignment】", - "【textBaseline】 : Linha de base do texto 【TextBaseline】", - "【verticalDirection】 : Direção vertical 【VerticalDirection】", - "【mainAxisSize】 : Tamanho do eixo principal 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "Exemplo de InheritedWidget", - "desc": [ - "Abaixo está um projeto de contador de cores que demonstra o uso do componente InheritedWidget." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ru_RU.json deleted file mode 100644 index 6c76cdeb8..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ru_RU.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "Наследуемый компонент", - "info": "Этот класс является абстрактным и используется для хранения данных в текущем контексте и совместного использования этих данных в контекстах последующих узлов. Существует множество реализаций этого класса, включая различные тематические компоненты, MediaQuery и другие.", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Column", - "desc": [ - "【children】 : Список компонентов 【List】", - "【mainAxisAlignment】 : Выравнивание по главной оси 【MainAxisAlignment】", - "【crossAxisAlignment】 : Выравнивание по поперечной оси 【CrossAxisAlignment】", - "【textBaseline】 : Базовая линия текста 【TextBaseline】", - "【verticalDirection】 : Вертикальное направление 【VerticalDirection】", - "【mainAxisSize】 : Размер главной оси 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "Пример использования InheritedWidget", - "desc": [ - "Ниже приведен пример использования компонента InheritedWidget в проекте счетчика цветов." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_zh-CN.json deleted file mode 100644 index 8b8f53f8c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_zh-CN.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "传承组件", - "info": "该类是抽象类,作用是可以在本上下文存储数据,在其后续节点的上下文中共享该数据。有很多实现类,包括各种主题组件、MediaQuery等。", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Column基本使用", - "desc": [ - "【children】 : 组件列表 【List】", - "【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】", - "【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】", - "【textBaseline】 : 文字基线 【TextBaseline】", - "【verticalDirection】 : 竖直方向 【VerticalDirection】", - "【mainAxisSize】 : 主轴尺寸 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "InheritedWidget 案例", - "desc": [ - "下面是通过一个颜色计数器项目展示 InheritedWidget 组件的使用。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/node1_base.dart deleted file mode 100644 index 823cbb2cf..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/node1_base.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - - -class InheritedWidgetDemo extends StatelessWidget { - final String info = - 'InheritedWidget 是一个抽象类,不可以直接使用。可以自定义对应共享数据的子类,如这里的通过 InfoInheritedWidget 实现:当前这段话可以在任意子树节点上下文获取。' - '一般都会定义一个 XXX.of(context) 的方法来获取数据,如 MediaQuery.of,Theme.of 等。'; - - const InheritedWidgetDemo({super.key}); - - @override - Widget build(BuildContext context) { - return InfoInheritedWidget( - info: info, - child: const InfoWidget(), - ); - } -} - -class InfoWidget extends StatelessWidget { - const InfoWidget({super.key}); - - @override - Widget build(BuildContext context) { - String info = InfoInheritedWidget.of(context)?.info??''; - - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} - -class InfoInheritedWidget extends InheritedWidget { - final String info; - - const InfoInheritedWidget({super.key,required this.info, required super.child}); - - @override - bool updateShouldNotify(covariant InfoInheritedWidget oldWidget) => - info != oldWidget.info; - - static InfoInheritedWidget? of(BuildContext context) => - context.dependOnInheritedWidgetOfExactType(); -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/node2_use.dart b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/node2_use.dart deleted file mode 100644 index 4e2ec7d52..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/node2_use.dart +++ /dev/null @@ -1,218 +0,0 @@ - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com -/// -class InheritedWidgetDemo2 extends StatefulWidget { - const InheritedWidgetDemo2({super.key}); - - @override - State createState() => _InheritedWidgetDemo2State(); -} - -class InheritedCounter extends InheritedWidget { - const InheritedCounter({ - super.key, - this.color, - this.counter, - required super.child, - }); - - final Color? color; - final int? counter; - - static InheritedCounter? of(BuildContext context) { - return context.dependOnInheritedWidgetOfExactType(); - } - - @override - bool updateShouldNotify(InheritedCounter oldWidget) { - return color != oldWidget.color || counter != oldWidget.counter; - } -} - -class _InheritedWidgetDemo2State extends State { - int _counter = 0; - late Color _color = colors.first; - - final List colors = const [ - Colors.black, - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green, - Colors.orange, - Colors.indigo, - Colors.purple, - ]; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - CircleIconButton( - color: Colors.green, - icon: Icons.remove, - onPressed: _decrease, - ), - InheritedCounter( - color: _color, - counter: _counter, - child: const BoxDecorationWrap(), - ), - CircleIconButton( - color: Colors.blue, - icon: Icons.add, - onPressed: _increase, - ), - ], - ), - const SizedBox(height: 20), - ColorSelector( - colors: colors, - activeColor: _color, - onSelect: _onSelectColor, - ) - ], - ); - } - - void _increase() { - setState(() => _counter += 1); - } - - void _decrease() { - setState(() => _counter -= 1); - } - - void _onSelectColor(Color value) { - setState(() { - _color = value; - }); - } -} - -class CircleIconButton extends StatelessWidget { - final Color color; - final IconData icon; - final VoidCallback onPressed; - - const CircleIconButton( - {super.key, - required this.color, - required this.icon, - required this.onPressed}); - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: onPressed, - child: Container( - margin: const EdgeInsets.symmetric(horizontal: 20), - decoration: const BoxDecoration( - color: Color(0xFFDFDFDF), - shape: BoxShape.circle, - // border: Border.all(width: 14.0, color: Color(0xFFDFDFDF)) - ), - child: Padding( - padding: const EdgeInsets.all(2.0), - child: Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: color, - shape: BoxShape.circle, - // border: Border.all(width: 14.0, color: Color(0xFFDFDFDF)) - ), - child: Icon( - icon, - color: Colors.white, - size: 16, - ), - ), - ), - ), - ); - } -} - -class ColorSelector extends StatelessWidget { - final List colors; - final ValueChanged onSelect; - final Color activeColor; - - const ColorSelector({ - super.key, - required this.colors, - required this.activeColor, - required this.onSelect, - }); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 6, - children: colors - .map((e) => GestureDetector( - onTap: () => onSelect(e), - child: _buildCircle(e), - )) - .toList(), - ); - } - - Widget _buildCircle(Color color) { - return CircleAvatar( - radius: 12, - child: color == activeColor - ? const Icon( - Icons.check, - color: Colors.white, - size: 16, - ) - : null, - backgroundColor: color, - ); - } -} - -class BoxDecorationWrap extends StatelessWidget { - const BoxDecorationWrap({super.key}); - - @override - Widget build(BuildContext context) { - final Color color = InheritedCounter.of(context)?.color ?? Colors.black; - return Container( - padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), - child: const CounterText(), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color: color), - borderRadius: BorderRadius.circular(8), - boxShadow: [ - BoxShadow( - color: color, - spreadRadius: 2, - blurRadius: 8, - offset: const Offset(0, 0)) - ]), - ); - } -} - -class CounterText extends StatelessWidget { - const CounterText({super.key}); - - @override - Widget build(BuildContext context) { - final Color? color = InheritedCounter.of(context)?.color; - final int counter = InheritedCounter.of(context)?.counter??0; - return Text( - "Counter = $counter", - style: TextStyle(color: color,fontWeight: FontWeight.bold), - ); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_de_DE.json deleted file mode 100644 index e152f61ff..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "Lebendig halten", - "info": "Ob der Zustand der Kinder in einer faul geladenen Liste lebendig gehalten werden soll. Ist die zugrunde liegende Implementierung von AutomaticKeepAlive und wird normalerweise nicht alleine verwendet.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in KeepAlive", - "desc": [ - "【child】 : *Kindkomponente 【Widget】", - "【keepAlive】 : *Ob lebendig gehalten wird 【bool】", - "In der Flutter-Framework-Ebene wird es nur in AutomaticKeepAlive verwendet, und im Quellcode wird auch gesagt, dass es selten alleine verwendet wird. Dieses Beispiel zeigt die Zustandserhaltung der ListView-Einträge." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_en_US.json deleted file mode 100644 index 231bcbdb3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "Keep Alive", - "info": "Whether the state of the child needs to be kept alive in a lazy-loaded list. It is the underlying implementation of AutomaticKeepAlive and is generally not used alone.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to KeepAlive", - "desc": [ - "【child】: *Child component 【Widget】", - "【keepAlive】: *Whether to keep alive 【bool】", - "In the Flutter framework layer, it is only used in AutomaticKeepAlive. The source code also mentions that it is rarely used alone. This example demonstrates the state keep-alive of ListView items." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_es_ES.json deleted file mode 100644 index 077935c48..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "Mantener activo", - "info": "En listas de carga perezosa, si el estado de los hijos necesita mantenerse activo. Es la implementación subyacente de AutomaticKeepAlive, generalmente no se usa por separado.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a KeepAlive", - "desc": [ - "【child】 : *Componente hijo 【Widget】", - "【keepAlive】 : *Si se mantiene activo 【bool】", - "En la capa del framework de Flutter, solo se usa en AutomaticKeepAlive, y en el código fuente también se menciona que rara vez se usa por separado. Este ejemplo muestra cómo mantener activo el estado de los elementos de ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_fr_FR.json deleted file mode 100644 index 6ff230cc6..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "Maintenir en vie", - "info": "Dans une liste chargée de manière paresseuse, faut-il maintenir l'état de l'enfant en vie. C'est l'implémentation sous-jacente de AutomaticKeepAlive, généralement pas utilisé seul.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à KeepAlive", - "desc": [ - "【child】 : *composant enfant 【Widget】", - "【keepAlive】 : *maintenir en vie 【bool】", - "Dans la couche framework de Flutter, il est uniquement utilisé dans AutomaticKeepAlive, et le code source indique qu'il est rarement utilisé seul. Cet exemple montre la maintenance de l'état des éléments de ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_it_IT.json deleted file mode 100644 index b3ec17cba..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "Mantenimento Attivo", - "info": "In una lista caricata in modo lazy, lo stato del bambino deve essere mantenuto attivo. È l'implementazione sottostante di AutomaticKeepAlive e generalmente non viene utilizzato da solo.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a KeepAlive", - "desc": [ - "【child】 : *componente figlio 【Widget】", - "【keepAlive】 : *se mantenere attivo 【bool】", - "Nel livello del framework Flutter, viene utilizzato solo in AutomaticKeepAlive, e il codice sorgente dice che è raramente usato da solo. Questo esempio mostra il mantenimento dello stato degli elementi di ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ja_JP.json deleted file mode 100644 index 77fce8d50..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "キープアライブ", - "info": "レイジーロードのリストで、子の状態をキープアライブする必要があるかどうか。AutomaticKeepAliveの基盤実装であり、通常は単独で使用しません。", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "KeepAlive 紹介", - "desc": [ - "【child】 : *子コンポーネント 【Widget】", - "【keepAlive】 : *キープアライブするかどうか 【bool】", - "Flutterフレームワーク層では、AutomaticKeepAliveでのみ使用され、ソースコードでも単独で使用することはほとんどないとされています。この例は、ListViewアイテムの状態をキープアライブすることを示しています。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ko_KR.json deleted file mode 100644 index 86a59289e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "유지", - "info": "지연 로딩된 목록에서 자식의 상태를 유지할 필요가 있는지 여부. AutomaticKeepAlive의 기본 구현이며, 일반적으로 단독으로 사용되지 않습니다.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "KeepAlive 소개", - "desc": [ - "【child】 : *자식 위젯 【Widget】", - "【keepAlive】 : *유지 여부 【bool】", - "flutter 프레임워크 레이어에서는 AutomaticKeepAlive에서만 사용되며, 소스 코드에서도 단독으로 사용하는 경우가 드물다고 언급합니다. 이 예제는 ListView 항목의 상태 유지를 보여줍니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_pt_PT.json deleted file mode 100644 index 91c0dfb6a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "Manter Ativo", - "info": "Em listas de carregamento preguiçoso, se o estado da criança precisa ser mantido ativo. É a implementação subjacente do AutomaticKeepAlive, geralmente não usado separadamente.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao KeepAlive", - "desc": [ - "【child】 : *componente filho 【Widget】", - "【keepAlive】 : *se deve manter ativo 【bool】", - "Na camada de framework do flutter, é usado apenas no AutomaticKeepAlive, e o código-fonte também diz que raramente é usado separadamente. Este exemplo mostra a manutenção do estado dos itens da ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ru_RU.json deleted file mode 100644 index 79c4db41d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "Поддержание активности", - "info": "Нужно ли сохранять состояние дочерних элементов в лениво загружаемом списке. Это базовая реализация AutomaticKeepAlive, обычно не используется отдельно.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в KeepAlive", - "desc": [ - "【child】 : *Дочерний компонент 【Widget】", - "【keepAlive】 : *Сохранять ли активность 【bool】", - "На уровне фреймворка Flutter используется только в AutomaticKeepAlive, в исходном коде также сказано, что он редко используется отдельно. Этот пример демонстрирует поддержание состояния элементов ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_zh-CN.json deleted file mode 100644 index 09a06bbb1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "保活", - "info": "在懒加载的列表中,孩子的状态是否需要保活。是 AutomaticKeepAlive 的底层实现,一般不单独使用。", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "KeepAlive 介绍", - "desc": [ - "【child】 : *子组件 【Widget】", - "【keepAlive】 : *是否保活 【bool】", - "在 flutter 框架层中,只用于 AutomaticKeepAlive 中,源码中也说很少单独使用它。该示例展示出 ListView 条目的状态保活。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/node1_base.dart deleted file mode 100644 index d9b6a7a16..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/node1_base.dart +++ /dev/null @@ -1,113 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class KeepAliveDemo extends StatelessWidget { - const KeepAliveDemo({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - Colors.red[50]!, - Colors.red[100]!, - Colors.red[200]!, - Colors.red[300]!, - Colors.red[400]!, - Colors.red[500]!, - Colors.red[600]!, - Colors.red[700]!, - Colors.red[800]!, - Colors.red[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: ListView.builder( - itemCount: data.length, - itemBuilder: (_, index) => ColorBox( - color: data[index], - index: index, - ), - ), - ); - } -} - -class ColorBox extends StatefulWidget { - final Color color; - final int index; - - const ColorBox({ - Key? key, - required this.color, - required this.index, - }) : super(key: key); - - @override - _ColorBoxState createState() => _ColorBoxState(); -} - -class _ColorBoxState extends State with AutomaticKeepAliveClientMixin { - bool _checked = false; - - @override - void initState() { - super.initState(); - _checked = false; - print('-----_ColorBoxState#initState---${widget.index}-------'); - } - - @override - void dispose() { - print('-----_ColorBoxState#dispose---${widget.index}-------'); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - super.build(context); - - return Container( - alignment: Alignment.center, - height: 50, - color: widget.color, - child: Row( - children: [ - const SizedBox(width: 60), - Checkbox( - value: _checked, - onChanged: (bool? v) { - setState(() { - _checked = v??false; - }); - }, - ), - Text( - "index ${widget.index}: ${colorString(widget.color)}", - style: const TextStyle(color: Colors.white, shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ]), - ), - ], - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - @override - bool get wantKeepAlive => true; -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_de_DE.json deleted file mode 100644 index a03631fa3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "LayoutId", - "info": "Kann nur in der CustomMultiChildLayout-Komponente verwendet werden, um die Identität ihrer Kindkomponenten zu kennzeichnen.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Anwendungsfall von LayoutId", - "desc": [ - "【id】 : Identifikations-ID 【Object】", - "【child】 : Kindkomponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_en_US.json deleted file mode 100644 index 8ea435703..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "Layout Id", - "info": "Can only be used in the CustomMultiChildLayout component to identify its child components.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LayoutId Usage Scenarios", - "desc": [ - "【id】 : Identifier id 【Object】", - "【child】 : Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_es_ES.json deleted file mode 100644 index 41bbd70e8..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "Id de diseño", - "info": "Solo se puede usar en el componente CustomMultiChildLayout para identificar a sus componentes hijos.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Escenarios de uso de LayoutId", - "desc": [ - "【id】 : Identificador de id 【Object】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_fr_FR.json deleted file mode 100644 index 15dc1be99..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "Id de mise en page", - "info": "Ne peut être utilisé que dans le composant CustomMultiChildLayout pour identifier ses enfants.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scénario d'utilisation de LayoutId", - "desc": [ - "【id】 : Identifiant 【Object】", - "【child】 : Enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_it_IT.json deleted file mode 100644 index ca5ca4441..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "Id Layout", - "info": "Può essere utilizzato solo nel componente CustomMultiChildLayout per identificare i suoi componenti figli.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scenario di utilizzo di LayoutId", - "desc": [ - "【id】 : ID identificativo 【Object】", - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ja_JP.json deleted file mode 100644 index 798aaf9cd..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "レイアウトId", - "info": "CustomMultiChildLayoutコンポーネント内でのみ使用でき、その子コンポーネントの識別に使用されます。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LayoutIdの使用シナリオ", - "desc": [ - "【id】 : 識別id 【Object】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ko_KR.json deleted file mode 100644 index b7de4fba0..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "레이아웃 Id", - "info": "CustomMultiChildLayout 컴포넌트에서만 사용할 수 있으며, 자식 컴포넌트의 신원을 식별하는 데 사용됩니다.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LayoutId 사용 사례", - "desc": [ - "【id】 : 식별 id 【Object】", - "【child】 : 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_pt_PT.json deleted file mode 100644 index 223157706..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "Id de Layout", - "info": "Só pode ser usado no componente CustomMultiChildLayout para identificar os seus componentes filhos.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Cenários de uso do LayoutId", - "desc": [ - "【id】 : Identificador de id 【Object】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ru_RU.json deleted file mode 100644 index 263741ae5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "Идентификатор макета", - "info": "Может использоваться только в компоненте CustomMultiChildLayout для идентификации его дочерних компонентов.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Сценарии использования LayoutId", - "desc": [ - "【id】 : Идентификатор 【Object】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_zh-CN.json deleted file mode 100644 index b9799fb8e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "布局Id", - "info": "只能用于CustomMultiChildLayout组件中,为其子组件标识身份。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LayoutId使用场景", - "desc": [ - "【id】 : 标识id 【Object】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/node1_base.dart deleted file mode 100644 index ce6b3179b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/node1_base.dart +++ /dev/null @@ -1,84 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/6/6 -/// contact me by email 1981462002@qq.com - - - -class LayoutIdDemo extends StatelessWidget { - const LayoutIdDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - width: 300, - height: 150, - color: Colors.grey.withAlpha(33), - child: CustomMultiChildLayout( - delegate: CornerCustomMultiChildLayout( - padding:const EdgeInsets.only(left: 10,top: 5,right: 10,bottom: 5), - ), - children: [ - LayoutId(id: CornerType.topLeft, child: const Box50(Colors.red)), - LayoutId(id: CornerType.topRight, child: const Box50(Colors.yellow)), - LayoutId(id: CornerType.bottomLeft, child: const Box50(Colors.blue)), - LayoutId(id: CornerType.bottomRight, child: const Box50(Colors.green)), - ], - ), - ); - } -} - -// 50 颜色盒 -class Box50 extends StatelessWidget { - final Color color; - const Box50(this.color, {Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - width: 50, - height: 50, - color: color, - ); - } -} - - -enum CornerType{ - topLeft, - topRight, - bottomLeft, - bottomRight -} - - -class CornerCustomMultiChildLayout extends MultiChildLayoutDelegate{ - final EdgeInsets padding; - - CornerCustomMultiChildLayout({this.padding = EdgeInsets.zero}); - - @override - void performLayout(Size size) { - if (hasChild(CornerType.topLeft)) { - layoutChild(CornerType.topLeft, BoxConstraints.loose(size)); - positionChild(CornerType.topLeft, Offset.zero.translate(padding.left, padding.top)); - } - if (hasChild(CornerType.topRight)) { - var childSize = layoutChild(CornerType.topRight, BoxConstraints.loose(size)); - positionChild(CornerType.topRight, Offset(size.width-childSize.width,0).translate(-padding.right, padding.top)); - } - if (hasChild(CornerType.bottomLeft)) { - var childSize = layoutChild(CornerType.bottomLeft, BoxConstraints.loose(size)); - positionChild(CornerType.bottomLeft, Offset(0,size.height-childSize.height).translate(padding.left, -padding.bottom)); - } - if (hasChild(CornerType.bottomRight)) { - var childSize = layoutChild(CornerType.bottomRight, BoxConstraints.loose(size)); - positionChild(CornerType.bottomRight, Offset(size.width-childSize.width,size.height-childSize.height).translate(-padding.right, -padding.bottom)); - } - } - - @override - bool shouldRelayout(CornerCustomMultiChildLayout oldDelegate) => oldDelegate.padding!=padding; -} - diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_de_DE.json deleted file mode 100644 index 7b9bbe125..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "ListTile-Thema", - "info": "Wird hauptsächlich verwendet, um Standardeigenschaften für nachfolgende ListTile-Komponenten festzulegen. Es kann auch verwendet werden, um die Standardeigenschaften von ListTile abzurufen.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ListTileTheme", - "desc": [ - "Kann die ListTileThemeData-Dateneigenschaften angeben, um Standardstile für nachfolgende ListTile-Komponenten festzulegen, wie Stile, Farben, Dekorationen, Ränder usw. Es kann auch ListTileTheme.of verwendet werden, um die Theme-Eigenschaften von ListTile abzurufen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_en_US.json deleted file mode 100644 index 33c921b6f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "ListTile Theme", - "info": "Mainly used to set default properties for descendant ListTile components uniformly, and also to obtain the default properties of ListTile through this component.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ListTileTheme", - "desc": [ - "You can specify the ListTileThemeData properties to set default styles for descendant ListTile components, such as styles, colors, decorations, margins, etc. You can also use ListTileTheme.of to get the theme properties of ListTile." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_es_ES.json deleted file mode 100644 index 46b6a0d13..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "Tema de ListTile", - "info": "Principalmente se utiliza para establecer propiedades predeterminadas unificadas para los componentes ListTile descendientes, y también se puede utilizar este componente para obtener las propiedades predeterminadas de ListTile.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ListTileTheme", - "desc": [ - "Se puede especificar la propiedad de datos ListTileThemeData para establecer estilos predeterminados para los componentes ListTile descendientes, como estilos, colores, decoraciones, márgenes, etc. También se puede usar ListTileTheme.of para obtener las propiedades temáticas de ListTile." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_fr_FR.json deleted file mode 100644 index ecef75787..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "Thème de ListTile", - "info": "Principalement utilisé pour définir les propriétés par défaut des composants ListTile descendants de manière unifiée. Il est également possible d'obtenir les propriétés par défaut de ListTile via ce composant.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ListTileTheme", - "desc": [ - "Vous pouvez spécifier les propriétés de données de ListTileThemeData pour définir le style par défaut des composants ListTile descendants, tels que le style, la couleur, la décoration, la marge, etc. Vous pouvez également utiliser ListTileTheme.of pour obtenir les propriétés du thème de ListTile." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_it_IT.json deleted file mode 100644 index e55865545..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "Tema ListTile", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti ListTile discendenti in modo uniforme, oppure per ottenere le proprietà predefinite di ListTile tramite questo componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ListTileTheme", - "desc": [ - "È possibile specificare le proprietà dei dati di ListTileThemeData per impostare lo stile predefinito per i componenti ListTile discendenti, come stile, colore, decorazione, margine, ecc. Inoltre, è possibile utilizzare ListTileTheme.of per ottenere le proprietà del tema di ListTile." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ja_JP.json deleted file mode 100644 index f6fe0cfdd..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "ListTileテーマ", - "info": "主に子孫のListTileコンポーネントにデフォルトのプロパティを一括設定するために使用されます。また、このコンポーネントを通じてデフォルトのListTileのプロパティを取得することもできます。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListTileThemeの基本使用", - "desc": [ - "ListTileThemeDataデータプロパティを指定して、子孫のListTileコンポーネントにデフォルトのスタイル(スタイル、色、装飾、余白など)を設定できます。また、ListTileTheme.ofを使用してListTileのテーマプロパティを取得することもできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ko_KR.json deleted file mode 100644 index 00696efc6..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "ListTile 테마", - "info": "주로 후손 ListTile 컴포넌트에 대한 기본 속성을 통일적으로 설정하는 데 사용되며, 이 컴포넌트를 통해 기본 ListTile의 속성을 얻을 수도 있습니다.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListTileTheme 기본 사용", - "desc": [ - "ListTileThemeData 데이터 속성을 지정하여 【후손】 ListTile 컴포넌트에 대한 기본 스타일(스타일, 색상, 장식, 여백 등)을 설정할 수 있습니다. ListTileTheme.of를 사용하여 ListTile의 테마 속성을 얻을 수도 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_pt_PT.json deleted file mode 100644 index b638b2bd3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "Tema do ListTile", - "info": "Principalmente usado para definir propriedades padrão unificadas para componentes ListTile descendentes, também pode ser usado para obter as propriedades padrão do ListTile.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do ListTileTheme", - "desc": [ - "Pode especificar os atributos de dados do ListTileThemeData para definir o estilo padrão para componentes ListTile descendentes, como estilo, cor, decoração, margens, etc. Também pode usar ListTileTheme.of para obter as propriedades do tema do ListTile." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ru_RU.json deleted file mode 100644 index 38e1d8aed..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "Тема ListTile", - "info": "В основном используется для установки свойств по умолчанию для компонентов ListTile-потомков, также можно получить свойства по умолчанию ListTile через этот компонент.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ListTileTheme", - "desc": [ - "Можно указать свойства данных ListTileThemeData для установки стилей по умолчанию для компонентов ListTile-потомков, таких как стили, цвета, декорации, отступы и т.д. Также можно использовать ListTileTheme.of для получения тематических свойств ListTile." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_zh-CN.json deleted file mode 100644 index 644f3b48e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "ListTile主题", - "info": "主要用于为后代的ListTile组件统一设置默认属性,也可以通过该组件获取默认ListTile的属性。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListTileTheme基本使用", - "desc": [ - "可指定ListTileThemeData数据属性为【后代】的ListTile组件设置默认样式,如样式、颜色、装饰、边距等。也可以用ListTileTheme.of获取ListTile的主题属性。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/node1_base.dart deleted file mode 100644 index a0537638c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/node1_base.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class ListTileThemeDemo extends StatelessWidget { - const ListTileThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ListTileTheme( - dense: false, - style: ListTileStyle.list, - selectedColor: Colors.blue, - contentPadding: const EdgeInsets.only(left: 15,right: 15,top: 5,bottom: 5), - iconColor: Colors.purple, - textColor: Colors.orange, - child: _ListTileSimple(), - ); - } -} - -class _ListTileSimple extends StatefulWidget { - @override - _ListTileSimpleState createState() => _ListTileSimpleState(); -} - -class _ListTileSimpleState extends State<_ListTileSimple> { - bool _selected = false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: ListTile( - leading: Image.asset("assets/images/icon_head.webp"), - selected: _selected, - title: const Text("以梦为马"), - subtitle: const Text("海子"), - trailing: const Icon(Icons.more_vert), - onTap: () => setState(() => _selected = !_selected), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_de_DE.json deleted file mode 100644 index bca3d929b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "Banner-Stil", - "info": "Wird hauptsächlich verwendet, um Standardeigenschaften für nachfolgende MaterialBanner-Komponenten festzulegen. Es kann auch verwendet werden, um die Standardeigenschaften von MaterialBanner abzurufen.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von MaterialBannerTheme", - "desc": [ - "Kann die MaterialBannerThemeData-Dateneigenschaften verwenden, um Standardstile für nachfolgende MaterialBanner-Komponenten festzulegen, wie Hintergrundfarbe, Abstände, Textstile usw. Es kann auch MaterialBannerTheme.of verwenden, um die Themedaten von MaterialBanner abzurufen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_en_US.json deleted file mode 100644 index 2eb954a3a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "Banner Style", - "info": "Mainly used to set default properties for descendant MaterialBanner components uniformly, and it can also be used to obtain the default properties of MaterialBanner.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of MaterialBannerTheme", - "desc": [ - "You can specify the MaterialBannerThemeData properties to set default styles for descendant MaterialBanner components, such as background color, margins, text styles, etc. You can also use MaterialBannerTheme.of to get the theme data of MaterialBanner." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_es_ES.json deleted file mode 100644 index 2e9d4278c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "Tema de Banner", - "info": "Principalmente utilizado para establecer propiedades predeterminadas unificadas para los componentes MaterialBanner descendientes. También se puede utilizar este componente para obtener las propiedades predeterminadas de MaterialBanner.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de MaterialBannerTheme", - "desc": [ - "Se puede especificar la propiedad de datos MaterialBannerThemeData para establecer el estilo predeterminado de los componentes MaterialBanner descendientes, como el color de fondo, el margen, el estilo de texto, etc. También se puede usar MaterialBannerTheme.of para obtener los datos del tema de MaterialBanner." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_fr_FR.json deleted file mode 100644 index 03c958f4e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "Thème de bannière", - "info": "Principalement utilisé pour définir les propriétés par défaut des composants MaterialBanner descendants, ou pour obtenir les propriétés par défaut de MaterialBanner via ce composant.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de MaterialBannerTheme", - "desc": [ - "Vous pouvez spécifier les propriétés de MaterialBannerThemeData pour définir le style par défaut des composants MaterialBanner descendants, tels que la couleur de fond, les marges, le style du texte, etc. Vous pouvez également utiliser MaterialBannerTheme.of pour obtenir les données de thème de MaterialBanner." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_it_IT.json deleted file mode 100644 index c9fc9050e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "Tema del Banner", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti MaterialBanner discendenti, è anche possibile ottenere le proprietà predefinite di MaterialBanner attraverso questo componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di MaterialBannerTheme", - "desc": [ - "È possibile specificare le proprietà di MaterialBannerThemeData per impostare lo stile predefinito per i componenti MaterialBanner discendenti, come il colore di sfondo, i margini, lo stile del testo, ecc. È anche possibile utilizzare MaterialBannerTheme.of per ottenere i dati del tema di MaterialBanner." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ja_JP.json deleted file mode 100644 index e2b376eb1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "バナースタイル", - "info": "主に子孫のMaterialBannerコンポーネントにデフォルトのプロパティを統一して設定するために使用されます。また、このコンポーネントを通じてデフォルトのMaterialBannerのプロパティを取得することもできます。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialBannerThemeの基本使用", - "desc": [ - "MaterialBannerThemeDataデータプロパティを指定して、【子孫】のMaterialBannerコンポーネントにデフォルトのスタイル(背景色、余白、テキストスタイルなど)を設定できます。また、MaterialBannerTheme.ofを使用してMaterialBannerのテーマデータを取得することもできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ko_KR.json deleted file mode 100644 index efcbab088..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "배너 스타일", - "info": "주로 후손 MaterialBanner 컴포넌트에 기본 속성을 통일적으로 설정하기 위해 사용되며, 이 컴포넌트를 통해 기본 MaterialBanner의 속성을 가져올 수도 있습니다.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialBannerTheme 기본 사용법", - "desc": [ - "MaterialBannerThemeData 데이터 속성을 지정하여 후손 MaterialBanner 컴포넌트의 기본 스타일을 설정할 수 있습니다. 예를 들어 배경색, 여백, 텍스트 스타일 등. 또한 MaterialBannerTheme.of를 사용하여 MaterialBanner의 테마 데이터를 가져올 수도 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_pt_PT.json deleted file mode 100644 index 9824f516b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "Tema de Banner", - "info": "Principalmente utilizado para definir propriedades padrão unificadas para componentes MaterialBanner descendentes, também pode ser usado para obter as propriedades padrão do MaterialBanner através deste componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do MaterialBannerTheme", - "desc": [ - "Pode especificar as propriedades de dados do MaterialBannerThemeData para definir o estilo padrão para componentes MaterialBanner descendentes, como cor de fundo, margens, estilo de texto, etc. Também pode usar MaterialBannerTheme.of para obter os dados do tema do MaterialBanner." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ru_RU.json deleted file mode 100644 index 342ca9a03..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "Тема баннера", - "info": "Основное использование — установка стандартных свойств для компонентов MaterialBanner у потомков. Также можно получить стандартные свойства MaterialBanner через этот компонент.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование MaterialBannerTheme", - "desc": [ - "Можно указать свойства данных MaterialBannerThemeData для установки стандартных стилей для компонентов MaterialBanner у потомков, таких как цвет фона, отступы, стиль текста и т.д. Также можно использовать MaterialBannerTheme.of для получения данных темы MaterialBanner." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_zh-CN.json deleted file mode 100644 index 63929b449..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "横幅样式", - "info": "主要用于为后代的MaterialBanner组件统一设置默认属性,也可以通过该组件获取默认MaterialBanner的属性。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialBannerTheme基本使用", - "desc": [ - "可指定MaterialBannerThemeData数据属性为【后代】的MaterialBanner组件设置默认样式,如背景色、边距、文字样式等。也可以用MaterialBannerTheme.of获取MaterialBanner的主题数据。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/node1_base.dart deleted file mode 100644 index 1a4d83d9d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - -class MaterialBannerThemeDemo extends StatelessWidget { - const MaterialBannerThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return MaterialBannerTheme( - data: MaterialBannerTheme.of(context).copyWith( - backgroundColor: Colors.purple, - padding: const EdgeInsetsDirectional.only(start: 16.0, top: 2.0,end: 2), - leadingPadding:const EdgeInsetsDirectional.only(end: 16.0) , - contentTextStyle: const TextStyle(color: Colors.white), - ), - child: _MaterialBannerDemo(), - ); - } -} - - -class _MaterialBannerDemo extends StatelessWidget { - final info = - 'A banner displays an important, succinct message, and provides actions for users to address. ' - 'A user action is required for itto be dismissed.'; - - @override - Widget build(BuildContext context) { - return Column( - children: [MaterialBanner( - content: Text(info), - leading: const Icon(Icons.warning, color: Colors.yellow), - actions: [ - ElevatedButton( - style: ElevatedButton.styleFrom(backgroundColor: Colors.white), - onPressed: () {}, - child: const Text( - 'I KNOW', - style: TextStyle( - color: Colors.purple, - fontWeight: FontWeight.bold, - fontSize: 14), - ), - ), - ElevatedButton( - style: ElevatedButton.styleFrom(backgroundColor: Colors.white), - onPressed: () {}, - child: const Text( - 'I IGNORE', - style: TextStyle( - color: Colors.purple, - fontWeight: FontWeight.bold, - fontSize: 14), - ), - ), - ], - )], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_de_DE.json deleted file mode 100644 index 641c9d93f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "Medienabfrage", - "info": "Über MediaQuery.of können Informationen wie Bildschirmgröße, Gerätedichte, Textskalierungsfaktor, Ränder usw. abgerufen werden.", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MediaQuery Dateninformationen abrufen", - "desc": [ - "MediaQuery.of(context) kann MediaQueryData abrufen" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_en_US.json deleted file mode 100644 index 187f601e6..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "Media Query", - "info": "You can use MediaQuery.of to obtain information such as screen size, device density, text scaling ratio, margins, etc.", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MediaQuery Get Data Information", - "desc": [ - "MediaQuery.of(context) can obtain MediaQueryData" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_es_ES.json deleted file mode 100644 index b1ba389b1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "Consulta de Medios", - "info": "Se puede obtener información como el tamaño de la pantalla, la densidad del dispositivo, la escala de texto, los márgenes, etc., a través de MediaQuery.of.", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Obtener información de datos con MediaQuery", - "desc": [ - "MediaQuery.of(context) puede obtener MediaQueryData" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_fr_FR.json deleted file mode 100644 index 51afde9bf..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "Requête média", - "info": "Vous pouvez obtenir des informations telles que la taille de l'écran, la densité de l'appareil, le facteur de zoom du texte, les marges, etc. via MediaQuery.of.", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Obtenir des informations de données avec MediaQuery", - "desc": [ - "MediaQuery.of(context) peut obtenir MediaQueryData" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_it_IT.json deleted file mode 100644 index f9fa1d2ef..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "Query sui media", - "info": "È possibile ottenere informazioni come dimensioni dello schermo, densità del dispositivo, scala del testo, margini, ecc. tramite MediaQuery.of.", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Ottenere informazioni sui dati con MediaQuery", - "desc": [ - "MediaQuery.of(context) può ottenere MediaQueryData" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ja_JP.json deleted file mode 100644 index 1994ff13d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "メディアクエリ", - "info": "MediaQuery.ofを使用して、画面サイズ、デバイスの密度、テキストのスケーリング比率、マージンなどの情報を取得できます。", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MediaQueryでデータ情報を取得", - "desc": [ - "MediaQuery.of(context)を使用してMediaQueryDataを取得できます" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ko_KR.json deleted file mode 100644 index 0edde099e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "미디어 쿼리", - "info": "MediaQuery.of를 통해 화면 크기, 기기 밀도, 텍스트 확대 비율, 여백 등의 정보를 얻을 수 있습니다.", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MediaQuery 데이터 정보 가져오기", - "desc": [ - "MediaQuery.of(context)를 통해 MediaQueryData를 얻을 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_pt_PT.json deleted file mode 100644 index d67c756fb..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "Consulta de Mídia", - "info": "Pode usar MediaQuery.of para obter informações como o tamanho da tela, densidade do dispositivo, escala de texto, margens, etc.", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Obter informações de dados com MediaQuery", - "desc": [ - "MediaQuery.of(context) pode obter MediaQueryData" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ru_RU.json deleted file mode 100644 index ba9d4b477..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "Медиа-запросы", - "info": "С помощью MediaQuery.of можно получить информацию о размере экрана, плотности устройства, масштабе текста, отступах и т.д.", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Получение данных через MediaQuery", - "desc": [ - "MediaQuery.of(context) позволяет получить MediaQueryData" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_zh-CN.json deleted file mode 100644 index ffb9a6efe..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "媒体查询", - "info": "可通过MediaQuery.of来获取屏幕尺寸、设备密度、文字缩放比例、边距等信息。", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MediaQuery获取数据信息", - "desc": [ - "MediaQuery.of(context)可以获取MediaQueryData" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/node1_base.dart deleted file mode 100644 index 9bf69e27d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/node1_base.dart +++ /dev/null @@ -1,65 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - - -class CustomMediaQuery extends StatelessWidget { - const CustomMediaQuery({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - MediaQueryData queryData = MediaQuery.of(context); - Map data = { - "size": queryData.size, - "devicePixelRatio": queryData.devicePixelRatio.toStringAsFixed(1), - "textScaleFactor": queryData.textScaleFactor.toStringAsFixed(1), - "platformBrightness": queryData.platformBrightness, - "padding": queryData.padding, - "viewInsets": queryData.viewInsets, - "systemGestureInsets": queryData.padding, - "viewPadding": queryData.padding, - "physicalDepth": queryData.padding, - "alwaysUse24HourFormat": queryData.padding, - "accessibleNavigation": queryData.alwaysUse24HourFormat, - "invertColors": queryData.invertColors, - "highContrast": queryData.highContrast, - "disableAnimations": queryData.disableAnimations, - "boldText": queryData.boldText, - }; - - return Container( - height: 200, - color: Colors.grey.withAlpha(11), - child:ListView( - children: data.keys.map((e) => buildItem(e, data)).toList(), - ), - ); - } - - Widget buildItem(String e, Map data) => Column( - children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - e, - style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold), - ), - Text( - data[e].toString(), - style: const TextStyle(fontSize: 16, color: Colors.orange), - ) - ], - ), - ), - const Divider( - height: 1, - ) - ], - ); -} - - diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_de_DE.json deleted file mode 100644 index 57f4d6383..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "Elterndaten-Widget", - "info": "Abstrakte Klasse, die verwendet wird, um ParentData-Informationen mit RenderObjectWidget-Kindkomponenten zu verbinden. Seine Unterklassen sind Positioned, Flexible, Expanded usw. Diese Komponenten können nur unter bestimmten Komponenten verwendet werden.", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in ParentDataWidget", - "desc": [ - "【child】 : Kindkomponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_en_US.json deleted file mode 100644 index fff9f56f3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "Parent Data Widget", - "info": "An abstract class used to hook ParentData information to RenderObjectWidget child components. Its subclasses include Positioned, Flexible, Expanded, etc. These components can only be used under specific components.", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to ParentDataWidget", - "desc": [ - "【child】: Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_es_ES.json deleted file mode 100644 index ae003e089..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "Widget de Datos Parentales", - "info": "Clase abstracta utilizada para conectar información de ParentData a los subcomponentes de RenderObjectWidget. Sus subclases incluyen Positioned, Flexible, Expanded, etc., y estos componentes solo se pueden utilizar bajo componentes específicos.", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a ParentDataWidget", - "desc": [ - "【child】 : Subcomponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_fr_FR.json deleted file mode 100644 index 1727f5c3d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "Widget de données parentales", - "info": "Classe abstraite utilisée pour associer des informations ParentData à des widgets enfants RenderObjectWidget. Ses sous-classes incluent Positioned, Flexible, Expanded, etc., ces widgets ne peuvent être utilisés que sous des composants spécifiques.", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à ParentDataWidget", - "desc": [ - "【child】 : widget enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_it_IT.json deleted file mode 100644 index 0fcb14e8e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "Widget dei dati genitore", - "info": "Classe astratta utilizzata per collegare le informazioni ParentData ai widget figli di RenderObjectWidget. Le sue sottoclassi includono Positioned, Flexible, Expanded, ecc., e questi widget possono essere utilizzati solo sotto componenti specifici.", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a ParentDataWidget", - "desc": [ - "【child】 : Widget figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ja_JP.json deleted file mode 100644 index dd0bd64c6..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "親データウィジェット", - "info": "抽象クラスで、ParentData情報をRenderObjectWidgetの子ウィジェットにフックするために使用されます。そのサブクラスにはPositioned、Flexible、Expandedなどがあり、これらのウィジェットは特定のコンポーネントの下でのみ使用できます。", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ParentDataWidget 紹介", - "desc": [ - "【child】 : 子ウィジェット 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ko_KR.json deleted file mode 100644 index da5b2a450..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "부모 데이터 위젯", - "info": "추상 클래스, ParentData 정보를 RenderObjectWidget 자식 위젯에 연결하는 데 사용됩니다. 하위 클래스로는 Positioned, Flexible, Expanded 등이 있으며, 이러한 위젯은 특정 위젯 아래에서만 사용할 수 있습니다.", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ParentDataWidget 소개", - "desc": [ - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_pt_PT.json deleted file mode 100644 index c44ff6d48..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "Componente de Dados Parentais", - "info": "Classe abstrata usada para conectar informações de ParentData a componentes filhos de RenderObjectWidget. Suas subclasses incluem Positioned, Flexible, Expanded, etc. Esses componentes só podem ser usados sob componentes específicos.", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao ParentDataWidget", - "desc": [ - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ru_RU.json deleted file mode 100644 index 41988d6b2..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "Родительский виджет данных", - "info": "Абстрактный класс, используемый для привязки информации ParentData к дочерним виджетам RenderObjectWidget. Его подклассы включают Positioned, Flexible, Expanded и другие, которые могут использоваться только под определенными компонентами.", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в ParentDataWidget", - "desc": [ - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_zh-CN.json deleted file mode 100644 index 486af92d5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "父数据组件", - "info": "抽象类,用于将 ParentData 信息挂钩到 RenderObjectWidget 子组件上。其子类有 Positioned、Flexible、Expanded等,这些组件只能用于特定的组件之下。", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ParentDataWidget 介绍", - "desc": [ - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/node1_base.dart deleted file mode 100644 index 04ff5a959..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/node1_base.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ParentDataWidgetDemo extends StatelessWidget { - const ParentDataWidgetDemo({Key? key}) : super(key: key); - - final String info = - 'ParentDataWidget 是一个抽象类,不能直接使用,它拥有 ParentData 子类型的泛型,该泛型会限定该组件的适应场景。' - '如 Positioned 组件继承自 ParentDataWidget,就说明 Positioned 的上层组件必须使用 Stack 族组件。' - '如 Flexible 组件继承自 ParentDataWidget,就说明 Flexible 的上层组件必须使用 Flex 族组件。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_de_DE.json deleted file mode 100644 index 4aded2149..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "Popup-Menü-Stil", - "info": "Wird hauptsächlich verwendet, um Standardeigenschaften für die nachfolgenden PopupMenuButton-Komponenten festzulegen. Es kann auch verwendet werden, um die Standardeigenschaften des PopupMenu zu erhalten.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PopupMenuTheme", - "desc": [ - "Kann die PopupMenuThemeData-Dateneigenschaften verwenden, um Standardstile für die nachfolgenden PopupMenuButton-Komponenten festzulegen, wie Form, Schattentiefe, Farbe, Textstil usw. Kann auch PopupMenuTheme.of verwenden, um die Themedaten des PopupMenu zu erhalten." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_en_US.json deleted file mode 100644 index 39033a47d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "Popup Menu Theme", - "info": "Mainly used to set default properties uniformly for descendant PopupMenuButton components, and also to obtain the default properties of PopupMenu through this component.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PopupMenuTheme", - "desc": [ - "You can specify the PopupMenuThemeData properties to set default styles for descendant PopupMenuButton components, such as shape, elevation, color, text style, etc. You can also use PopupMenuTheme.of to obtain the theme data of PopupMenu." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_es_ES.json deleted file mode 100644 index ec0d9a692..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "Tema del menú emergente", - "info": "Se utiliza principalmente para establecer propiedades predeterminadas unificadas para los componentes PopupMenuButton descendientes, también se puede obtener las propiedades predeterminadas de PopupMenu a través de este componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PopupMenuTheme", - "desc": [ - "Se pueden especificar las propiedades de datos de PopupMenuThemeData para establecer estilos predeterminados para los componentes PopupMenuButton descendientes, como forma, profundidad de sombra, color, estilo de texto, etc. También se puede usar PopupMenuTheme.of para obtener los datos del tema de PopupMenu." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_fr_FR.json deleted file mode 100644 index 383382574..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "Thème du menu contextuel", - "info": "Principalement utilisé pour définir des propriétés par défaut unifiées pour les composants PopupMenuButton descendants. Il est également possible d'obtenir les propriétés par défaut de PopupMenu via ce composant.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PopupMenuTheme", - "desc": [ - "Vous pouvez spécifier les propriétés de données de PopupMenuThemeData pour définir des styles par défaut pour les composants PopupMenuButton descendants, tels que la forme, la profondeur de l'ombre, la couleur, le style de texte, etc. Vous pouvez également utiliser PopupMenuTheme.of pour obtenir les données de thème de PopupMenu." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_it_IT.json deleted file mode 100644 index 07caa85b8..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "Tema del menu a comparsa", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti PopupMenuButton discendenti, oppure per ottenere le proprietà predefinite del PopupMenu attraverso questo componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di PopupMenuTheme", - "desc": [ - "È possibile specificare le proprietà dei dati di PopupMenuThemeData per impostare lo stile predefinito per i componenti PopupMenuButton discendenti, come forma, profondità dell'ombra, colore, stile del testo, ecc. È anche possibile utilizzare PopupMenuTheme.of per ottenere i dati del tema del PopupMenu." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ja_JP.json deleted file mode 100644 index 4bd5bfd2f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "ポップアップメニュースタイル", - "info": "主に子孫のPopupMenuButtonコンポーネントにデフォルトのプロパティを統一して設定するために使用されます。また、このコンポーネントを通じてデフォルトのPopupMenuのプロパティを取得することもできます。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuThemeの基本使用", - "desc": [ - "PopupMenuThemeDataデータ属性を指定して、【子孫】のPopupMenuButtonコンポーネントにデフォルトのスタイルを設定できます。形状、影の深さ、色、テキストスタイルなどです。また、PopupMenuTheme.ofを使用してPopupMenuのテーマデータを取得することもできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ko_KR.json deleted file mode 100644 index e6683a3ec..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "팝업 메뉴 스타일", - "info": "주로 후손의 PopupMenuButton 컴포넌트에 기본 속성을 통일적으로 설정하기 위해 사용되며, 이 컴포넌트를 통해 기본 PopupMenu의 속성을 얻을 수도 있습니다.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuTheme 기본 사용", - "desc": [ - "PopupMenuThemeData 데이터 속성을 지정하여 후손의 PopupMenuButton 컴포넌트에 기본 스타일(예: 모양, 그림자, 색상, 텍스트 스타일 등)을 설정할 수 있습니다. 또한 PopupMenuTheme.of를 사용하여 PopupMenu의 테마 데이터를 얻을 수도 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_pt_PT.json deleted file mode 100644 index 30af0da89..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "Tema do Menu Pop-up", - "info": "Principalmente utilizado para definir propriedades padrão uniformes para os componentes PopupMenuButton descendentes, também é possível obter as propriedades padrão do PopupMenu através deste componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do PopupMenuTheme", - "desc": [ - "Pode especificar as propriedades de dados do PopupMenuThemeData para definir o estilo padrão para os componentes PopupMenuButton descendentes, como forma, profundidade de sombra, cor, estilo de texto, etc. Também é possível usar PopupMenuTheme.of para obter os dados do tema do PopupMenu." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ru_RU.json deleted file mode 100644 index bd6d8ef6e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "Тема всплывающего меню", - "info": "Основное использование для установки стандартных свойств для компонентов PopupMenuButton потомков, также можно получить свойства стандартного PopupMenu через этот компонент.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PopupMenuTheme", - "desc": [ - "Можно указать атрибуты данных PopupMenuThemeData для установки стандартных стилей для компонентов PopupMenuButton потомков, таких как форма, глубина тени, цвет, стиль текста и т.д. Также можно использовать PopupMenuTheme.of для получения данных темы PopupMenu." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_zh-CN.json deleted file mode 100644 index 9158c8eee..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "弹出菜单样式", - "info": "主要用于为后代的PopupMenuButton组件统一设置默认属性,也可以通过该组件获取默认PopupMenu的属性。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuTheme基本使用", - "desc": [ - "可指定PopupMenuThemeData数据属性为【后代】的PopupMenuButton组件设置默认样式,如形状、影深、颜色、文字样式等。也可以用PopupMenuTheme.of获取PopupMenu的主题数据。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/node1_base.dart deleted file mode 100644 index 3006a6ec1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/node1_base.dart +++ /dev/null @@ -1,67 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - -class PopupMenuThemeDemo extends StatelessWidget { - const PopupMenuThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return PopupMenuTheme( - data: PopupMenuTheme.of(context).copyWith( - color: Colors.orangeAccent, - elevation: 1, - textStyle: const TextStyle(color: Colors.white), - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(20), - bottomRight: Radius.circular(20), - topRight: Radius.circular(5), - bottomLeft: Radius.circular(5), - )), - ), - child: _PopupMenuButtonSimple(), - ); - } -} - -class _PopupMenuButtonSimple extends StatefulWidget { - @override - _PopupMenuButtonSimpleState createState() => _PopupMenuButtonSimpleState(); -} - -class _PopupMenuButtonSimpleState extends State<_PopupMenuButtonSimple> { - final Map map = { - "关于": Icons.info_outline, - "帮助": Icons.help_outline, - "反馈": Icons.add_comment, - }; - - @override - Widget build(BuildContext context) { - return PopupMenuButton( - itemBuilder: (context) => buildItems(), - offset: const Offset(0, 50), - onSelected: print, - onCanceled: () => print('onCanceled'), - ); - } - - List> buildItems() { - return map.keys - .toList() - .map((e) => PopupMenuItem( - value: e, - child: Wrap( - spacing: 6, - children: [ - Icon( - map[e], - ), - Text(e), - ], - ))) - .toList(); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_de_DE.json deleted file mode 100644 index c0fd65b73..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "Positionierungskomponente", - "info": "Kann nur in einem Stack verwendet werden, ermöglicht die präzise Platzierung einer Komponente durch Angabe der Abstände von oben, links, rechts und unten.", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Positioned", - "desc": [ - "【child】 : Komponente 【Widget】", - "【top】 : Abstand zum oberen Elternteil 【double】", - "【right】 : Abstand zum rechten Elternteil 【double】", - "【left】 : Abstand zum linken Elternteil 【double】", - "【bottom】 : Abstand zum unteren Elternteil 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_en_US.json deleted file mode 100644 index 6c4ade675..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "Positioning Component", - "info": "Can only be used in Stack, allowing precise placement of a component by specifying distances from the top, left, right, and bottom.", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Positioned", - "desc": [ - "【child】: Component 【Widget】", - "【top】: Distance to the top of the parent 【double】", - "【right】: Distance to the right of the parent 【double】", - "【left】: Distance to the left of the parent 【double】", - "【bottom】: Distance to the bottom of the parent 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_es_ES.json deleted file mode 100644 index 9e450347b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "Componente de posicionamiento", - "info": "Solo se puede usar en Stack, permite especificar las distancias superior, izquierda, derecha e inferior para colocar un componente con precisión.", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Positioned", - "desc": [ - "【child】 : Componente 【Widget】", - "【top】 : Distancia al borde superior del padre 【double】", - "【right】 : Distancia al borde derecho del padre 【double】", - "【left】 : Distancia al borde izquierdo del padre 【double】", - "【bottom】 : Distancia al borde inferior del padre 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_fr_FR.json deleted file mode 100644 index a263004da..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "Composant de positionnement", - "info": "Ne peut être utilisé que dans une Stack, permet de positionner précisément un composant en spécifiant les distances par rapport au haut, bas, gauche et droite.", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Positioned", - "desc": [ - "【child】 : Composant 【Widget】", - "【top】 : Distance par rapport au haut du parent 【double】", - "【right】 : Distance par rapport à la droite du parent 【double】", - "【left】 : Distance par rapport à la gauche du parent 【double】", - "【bottom】 : Distance par rapport au bas du parent 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_it_IT.json deleted file mode 100644 index 1093c29e0..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "Componente di posizionamento", - "info": "Può essere utilizzato solo in Stack, consente di posizionare con precisione un componente specificando le distanze da sinistra, destra, alto e basso.", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Positioned", - "desc": [ - "【child】 : Componente 【Widget】", - "【top】 : Distanza dal bordo superiore del genitore 【double】", - "【right】 : Distanza dal bordo destro del genitore 【double】", - "【left】 : Distanza dal bordo sinistro del genitore 【double】", - "【bottom】 : Distanza dal bordo inferiore del genitore 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ja_JP.json deleted file mode 100644 index 0aedbae01..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "位置指定コンポーネント", - "info": "Stack内でのみ使用可能で、上下左右の距離を指定してコンポーネントを正確に配置できます。", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Positionedの基本使用", - "desc": [ - "【child】 : コンポーネント 【Widget】", - "【top】 : 親の上端までの距離 【double】", - "【right】 : 親の右端までの距離 【double】", - "【left】 : 親の左端までの距離 【double】", - "【bottom】 : 親の下端までの距離 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ko_KR.json deleted file mode 100644 index c29eeb19a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "위치 지정 컴포넌트", - "info": "Stack에서만 사용할 수 있으며, 상하좌우 거리를 지정하여 특정 컴포넌트를 정확하게 배치할 수 있습니다.", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Positioned 기본 사용법", - "desc": [ - "【child】 : 컴포넌트 【Widget】", - "【top】 : 상단에서 부모까지의 거리 【double】", - "【right】 : 우측에서 부모까지의 거리 【double】", - "【left】 : 좌측에서 부모까지의 거리 【double】", - "【bottom】 : 하단에서 부모까지의 거리 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_pt_PT.json deleted file mode 100644 index 58cee8aec..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "Componente de Posicionamento", - "info": "Só pode ser usado em Stack, pode especificar as distâncias superior, inferior, esquerda e direita para posicionar um componente com precisão.", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Positioned", - "desc": [ - "【child】 : Componente 【Widget】", - "【top】 : Distância do topo do pai 【double】", - "【right】 : Distância da direita do pai 【double】", - "【left】 : Distância da esquerda do pai 【double】", - "【bottom】 : Distância da base do pai 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ru_RU.json deleted file mode 100644 index afa91ee11..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "Компонент позиционирования", - "info": "Может использоваться только в Stack, позволяет точно разместить компонент, указав расстояния сверху, слева, справа и снизу.", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Positioned", - "desc": [ - "【child】 : Компонент 【Widget】", - "【top】 : Расстояние до верха родителя 【double】", - "【right】 : Расстояние до правого края родителя 【double】", - "【left】 : Расстояние до левого края родителя 【double】", - "【bottom】 : Расстояние до низа родителя 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_zh-CN.json deleted file mode 100644 index 75ba8c782..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "定位组件", - "info": "只能用于Stack中,可以指定左上右下的距离对某个组件进行位置精确安放。", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Positioned基本使用", - "desc": [ - "【child】 : 组件 【Widget】", - "【top】 : 到父顶距离 【double】", - "【right】 : 到父右距离 【double】", - "【left】 : 到父左距离 【double】", - "【bottom】 : 到父底距离 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/node1_base.dart deleted file mode 100644 index c59c04c4a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/node1_base.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class CustomPositioned extends StatelessWidget { - const CustomPositioned({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Widget yellowBox = Container( - color: Colors.yellow, - height: 100, - width: 100, - ); - - Widget redBox = Container( - color: Colors.red, - height: 90, - width: 90, - ); - - Widget greenBox = Container( - color: Colors.green, - height: 80, - width: 80, - ); - - Widget cyanBox = Container( - color: Colors.cyanAccent, - height: 70, - width: 70, - ); - - return Container( - width: 200, - height: 120, - color: Colors.grey.withAlpha(33), - child: Stack( - children: [ - yellowBox, - redBox, - Positioned(top: 20, left: 20, child: greenBox), - Positioned( - child: cyanBox, - bottom: 10, - right: 10, - ) - ], - )); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_de_DE.json deleted file mode 100644 index e027a2c9f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "Primärer Scroll-Controller", - "info": "Es ist eine Unterklasse von InheritedWidget und stellt den standardmäßigen ScrollController-Objekt für scrollbare Ansichten im Unterbaum über den Kontext bereit.", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in den PrimaryScrollController", - "desc": [ - "【controller】 : Scroll-Controller 【ScrollController】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_en_US.json deleted file mode 100644 index 7595d787d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "Primary Scroll Controller", - "info": "It is a subclass of InheritedWidget, providing a default ScrollController object to scrollable views in the subtree through context.", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to PrimaryScrollController", - "desc": [ - "【controller】: Scroll Controller 【ScrollController】", - "【child】: Child Widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_es_ES.json deleted file mode 100644 index 1441d306b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "Controlador de Desplazamiento Primario", - "info": "Es una subclase de InheritedWidget que proporciona un objeto ScrollController predeterminado a las vistas desplazables en el subárbol a través del contexto.", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a PrimaryScrollController", - "desc": [ - "【controller】 : Controlador de desplazamiento 【ScrollController】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_fr_FR.json deleted file mode 100644 index c097b0c61..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "Contrôleur de défilement initial", - "info": "C'est une sous-classe d'InheritedWidget qui fournit un objet ScrollController par défaut aux vues défilables dans le sous-arbre via le contexte.", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction de PrimaryScrollController", - "desc": [ - "【controller】 : Contrôleur de défilement 【ScrollController】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_it_IT.json deleted file mode 100644 index 729e3e7fb..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "Controllore di scorrimento iniziale", - "info": "È una sottoclasse di InheritedWidget, che fornisce un oggetto ScrollController predefinito alle viste scorrevoli nel sottoalbero tramite il contesto.", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a PrimaryScrollController", - "desc": [ - "【controller】 : Controllore di scorrimento 【ScrollController】", - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ja_JP.json deleted file mode 100644 index 467879239..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "初期スクロールコントローラー", - "info": "これは InheritedWidget のサブクラスで、context を通じてサブツリー内のスクロール可能なビューにデフォルトの ScrollController オブジェクトを提供します。", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PrimaryScrollController 紹介", - "desc": [ - "【controller】 : スクロールコントローラー 【ScrollController】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ko_KR.json deleted file mode 100644 index 5897c1b03..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "기본 스크롤 컨트롤러", - "info": "이것은 InheritedWidget의 하위 클래스로, context를 통해 하위 트리의 스크롤 가능한 뷰에 기본 ScrollController 객체를 제공합니다.", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PrimaryScrollController 소개", - "desc": [ - "【controller】 : 스크롤 컨트롤러 【ScrollController】", - "【child】 : 하위 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_pt_PT.json deleted file mode 100644 index d071d0476..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "Controlador de Deslocamento Inicial", - "info": "É uma subclasse de InheritedWidget que fornece um objeto ScrollController padrão para vistas roláveis na subárvore através do contexto.", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao PrimaryScrollController", - "desc": [ - "【controller】 : Controlador de Deslocamento 【ScrollController】", - "【child】 : Componente Filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ru_RU.json deleted file mode 100644 index 4c828ad70..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "Основной контроллер прокрутки", - "info": "Это подкласс InheritedWidget, который предоставляет объект ScrollController по умолчанию для прокручиваемых представлений в поддереве через контекст.", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в PrimaryScrollController", - "desc": [ - "【controller】 : Контроллер прокрутки 【ScrollController】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_zh-CN.json deleted file mode 100644 index 1e77d574f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "初始滑动控制器", - "info": "它是 InheritedWidget 子类,通过 context 向子树中的可滑动视图提供默认的 ScrollController 对象。", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PrimaryScrollController 介绍", - "desc": [ - "【controller】 : 滑动控制器 【ScrollController】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/node1_base.dart deleted file mode 100644 index 076ac8dbe..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/node1_base.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/3/31 -/// contact me by email 1981462002@qq.com -/// - -class PrimaryScrollControllerDemo extends StatelessWidget { - const PrimaryScrollControllerDemo({Key? key}) : super(key: key); - - final String info = - 'PrimaryScrollController 是 InheritedWidget 子类,也就说明它可以为子树组件提供某些默认数据,' - '子树可以通过 context 来获取上层该组件的提供 ScrollController 对象。\n' - '对于一些可滑动组件 ScrollView、SingleChildScrollView、NestedScrollView 等,' - '在使用者未提供 ScrollController 时,且 primary 属性为 true 时(默认true) ,' - '会使用上层 PrimaryScrollController 组件提供的滑动控制器。\n' - '使用 MaterialApp 组件,其已经内置 PrimaryScrollController,'; - - @override - Widget build(BuildContext context) { - ScrollController? label = PrimaryScrollController.of(context); - - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info+"当前其持有的滑动控制器对象: $label"), - ); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_de_DE.json deleted file mode 100644 index aba9b5c57..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "iOS-Menüschaltfläche", - "info": "Muss eine scrollbare Komponente umschließen und durch das Verhalten-Attribut den Scroll-Effekt steuern, kann den blauen Schatten beim Scrollen entfernen usw.", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ScrollConfiguration", - "desc": [ - "【child】: Untergeordnete Komponente 【Widget】", - "【behavior】: Scrollverhalten 【ScrollBehavior】", - " Kann ScrollConfiguration verwenden, um den blauen Schatten in ListView zu entfernen" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_en_US.json deleted file mode 100644 index 502a531fd..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "iOS Menu Button", - "info": "Needs to wrap a scrollable component and control the scrolling effect through the behavior property, which can remove the blue shadow of the scrolling, etc.", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ScrollConfiguration", - "desc": [ - "【child】: Child component 【Widget】", - "【behavior】: Scroll behavior 【ScrollBehavior】", - " ScrollConfiguration can be used to remove the blue shadow of ListView" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_es_ES.json deleted file mode 100644 index 446a72a97..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "Botón de menú de iOS", - "info": "Necesita envolver un componente deslizable y controlar el efecto de deslizamiento a través de la propiedad behavior, lo que puede eliminar la sombra azul del deslizamiento, etc.", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ScrollConfiguration", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【behavior】 : Comportamiento de deslizamiento 【ScrollBehavior】", - " Puedes usar ScrollConfiguration para eliminar la sombra azul de ListView" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_fr_FR.json deleted file mode 100644 index 9e750c532..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "Bouton de menu iOS", - "info": "Doit envelopper un composant défilable et contrôler l'effet de défilement via la propriété behavior, peut supprimer l'ombre bleue du défilement, etc.", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ScrollConfiguration", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【behavior】 : Comportement de défilement 【ScrollBehavior】", - " Peut utiliser ScrollConfiguration pour supprimer l'ombre bleue de ListView" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_it_IT.json deleted file mode 100644 index 627b4a436..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "Pulsante menu ios", - "info": "Deve avvolgere un componente scorrevole e controllare l'effetto dello scorrimento attraverso la proprietà behavior, rimuovendo ad esempio l'ombra blu dello scorrimento.", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ScrollConfiguration", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【behavior】 : Comportamento di scorrimento 【ScrollBehavior】", - " Puoi usare ScrollConfiguration per rimuovere l'ombra blu da ListView" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ja_JP.json deleted file mode 100644 index 36c5d1ecc..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "iosメニューボタン", - "info": "スクロール可能なコンポーネントをラップし、behaviorプロパティを通じてスクロール効果を制御します。これにより、スクロール時の青色の影などを取り除くことができます。", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScrollConfigurationの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【behavior】 : スクロール動作 【ScrollBehavior】", - " ScrollConfigurationを使用してListViewの青色の影をなくすことができます" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ko_KR.json deleted file mode 100644 index ae09e759d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "ios 메뉴 버튼", - "info": "스크롤 가능한 컴포넌트를 감싸고 behavior 속성을 통해 스크롤 효과를 제어할 수 있으며, 스크롤 시 파란색 그림자 등을 제거할 수 있습니다.", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScrollConfiguration 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【behavior】 : 스크롤 동작 【ScrollBehavior】", - " ScrollConfiguration을 사용하여 ListView의 파란색 그림자를 제거할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_pt_PT.json deleted file mode 100644 index a5dad2f8c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "Botão de menu ios", - "info": "Precisa envolver um componente deslizável e controlar o efeito de deslize através da propriedade behavior, podendo remover a sombra azul do deslize, entre outros.", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do ScrollConfiguration", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【behavior】 : Comportamento de deslize 【ScrollBehavior】", - " Pode usar o ScrollConfiguration para remover a sombra azul do ListView" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ru_RU.json deleted file mode 100644 index 189999662..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "кнопка меню ios", - "info": "Необходимо обернуть прокручиваемый компонент и управлять эффектом прокрутки через свойство behavior, можно убрать синюю тень при прокрутке и т.д.", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ScrollConfiguration", - "desc": [ - "【child】 : дочерний компонент 【Widget】", - "【behavior】 : поведение прокрутки 【ScrollBehavior】", - " Можно использовать ScrollConfiguration, чтобы убрать синюю тень у ListView" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_zh-CN.json deleted file mode 100644 index 17e990a43..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "ios菜单按钮", - "info": "需要包裹一个可滑动的组件,并通过behavior属性控制滑动的效果,可以去除滑动的蓝色阴影等。", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScrollConfiguration基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【behavior】 : 滑动行为 【ScrollBehavior】", - " 可以使用ScrollConfiguration让ListView无蓝色阴影" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/node1_base.dart deleted file mode 100644 index 5c18f5ab3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class CustomScrollConfiguration extends StatelessWidget { - const CustomScrollConfiguration({super.key}); - - List get data => [ - Colors.cyan[50]!, - Colors.cyan[100]!, - Colors.cyan[200]!, - Colors.cyan[300]!, - Colors.cyan[400]!, - Colors.cyan[500]!, - Colors.cyan[600]!, - Colors.cyan[700]!, - Colors.cyan[800]!, - Colors.cyan[900]!, - ]; - - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ScrollConfiguration( - behavior: NoScrollBehavior(), child: _buildListView()), - ); - } - - Widget _buildListView() => ListView( - padding: const EdgeInsets.symmetric(horizontal: 5), - children: data - .map((color) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: color, - child: Text( - colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - )) - .toList(), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} - -class NoScrollBehavior extends ScrollBehavior { - @override - Widget buildViewportChrome( - BuildContext context, Widget child, AxisDirection axisDirection) => - child; -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_de_DE.json deleted file mode 100644 index 919e8b311..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "Schieberegler-Stil", - "info": "Kann ein Kind enthalten und gibt den Standardstil für nachfolgende Schieberegler an. Wird häufig verwendet, um den Stil von Schiebereglern zu vereinheitlichen und die individuelle Einstellung zu vermeiden. Kann auch verwendet werden, um den Stil von Schiebereglern anzupassen.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliderTheme Verwendung", - "desc": [ - "Kann SliderTheme.of verwenden, um das Slider-Themen-Datenobjekt zu erhalten, das eine Vielzahl von Attributen für die Einstellung des Schiebereglers enthält.", - "Kann Standardstile für Schaltflächenkomponenten von ButtonTheme [Nachkommen] festlegen, einschließlich Farbe, Form, Größe usw." - ] - }, - { - "file": "node2_diy.dart", - "name": "SliderTheme Stilanpassung für Schieberegler", - "desc": [ - "Durch thumbShape und valueIndicatorShape kann der Stil des Schiebereglers angepasst werden.", - "Hinweis: Dieses Beispiel bezieht sich auf SlideDemo in flutter-gallery" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_en_US.json deleted file mode 100644 index 95df2de42..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "Slider Style", - "info": "Can contain a child, specifies the default style for descendant Sliders. Commonly used for unifying the style of Sliders to avoid setting them one by one, and can also customize the style of Sliders.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliderTheme Usage", - "desc": [ - "You can obtain the Slider theme data object through SliderTheme.of, which contains a large number of properties for setting the Slider.", - "You can set the default style for the button components of ButtonTheme【descendants】, including color, shape, size, etc." - ] - }, - { - "file": "node2_diy.dart", - "name": "SliderTheme Customization for Slider", - "desc": [ - "You can customize the style of the Slider through thumbShape and valueIndicatorShape.", - "Note: This example refers to the SlideDemo in flutter-gallery" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_es_ES.json deleted file mode 100644 index 0c19c2c3c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "Estilo del deslizador", - "info": "Puede contener un hijo y especifica el estilo predeterminado para los Slider descendientes. Se usa comúnmente para unificar el estilo de los Slider, evitando configuraciones individuales, y también permite personalizar el estilo del Slider.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de SliderTheme", - "desc": [ - "Se puede obtener el objeto de datos del tema Slider a través de SliderTheme.of, que contiene una gran cantidad de propiedades para configurar el Slider.", - "Puede establecer el estilo predeterminado para los componentes de botón [descendientes] de ButtonTheme, incluyendo color, forma, tamaño, etc." - ] - }, - { - "file": "node2_diy.dart", - "name": "Personalización del estilo del Slider con SliderTheme", - "desc": [ - "Se puede personalizar el estilo del Slider a través de thumbShape y valueIndicatorShape.", - "Nota: Este ejemplo se basa en SlideDemo de flutter-gallery" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_fr_FR.json deleted file mode 100644 index c9db739c5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "Style du curseur", - "info": "Peut contenir un enfant, spécifie le style par défaut pour les descendants Slider. Souvent utilisé pour unifier le style des Slider, évitant de les configurer un par un, et permet également de personnaliser le style du Slider.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de SliderTheme", - "desc": [ - "Peut obtenir l'objet de données de thème Slider via SliderTheme.of, qui contient de nombreuses propriétés pour la configuration du Slider.\"", - "Peut définir un style par défaut pour les composants boutons des descendants de ButtonTheme, y compris la couleur, la forme, la taille, etc." - ] - }, - { - "file": "node2_diy.dart", - "name": "Personnalisation du style du Slider avec SliderTheme", - "desc": [ - "Permet de personnaliser le style du Slider via thumbShape et valueIndicatorShape.\"", - "Note: Cet exemple est inspiré de SlideDemo dans flutter-gallery" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_it_IT.json deleted file mode 100644 index 0da8d57b3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "Stile del cursore", - "info": "Può contenere un figlio e specifica lo stile predefinito per i cursori discendenti. Comunemente utilizzato per unificare lo stile dei cursori, evitando di impostarli uno per uno, e consente anche la personalizzazione dello stile del cursore.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di SliderTheme", - "desc": [ - "È possibile ottenere l'oggetto dati del tema del cursore tramite SliderTheme.of, che contiene numerose proprietà per la configurazione del cursore.", - "È possibile impostare uno stile predefinito per i componenti del pulsante [discendenti] di ButtonTheme, inclusi colore, forma, dimensioni, ecc." - ] - }, - { - "file": "node2_diy.dart", - "name": "Personalizzazione dello stile del cursore con SliderTheme", - "desc": [ - "È possibile personalizzare lo stile del cursore tramite thumbShape e valueIndicatorShape.", - "Nota: Questo esempio si riferisce a SlideDemo in flutter-gallery" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ja_JP.json deleted file mode 100644 index 46441db3f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "スライダースタイル", - "info": "1つの子要素を収容し、子孫のSliderにデフォルトのスタイルを指定します。Sliderのスタイル統一に使用され、個別に設定する必要がなく、Sliderのスタイルをカスタマイズすることもできます。", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliderThemeの使用", - "desc": [ - "SliderTheme.ofを使用してSliderのテーマデータオブジェクトを取得できます。これには、Sliderの設定に使用される多くの属性が含まれています。\"", - "ButtonTheme【子孫】のボタンコンポーネントにデフォルトのスタイルを設定できます。これには、色、形状、サイズなどが含まれます。" - ] - }, - { - "file": "node2_diy.dart", - "name": "SliderThemeによるSliderのスタイルカスタマイズ", - "desc": [ - "thumbShapeとvalueIndicatorShapeを使用してSliderのスタイルをカスタマイズできます。\"", - "注: この例はflutter-galleryのSlideDemoを参考にしています" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ko_KR.json deleted file mode 100644 index 09d0c5273..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "슬라이더 스타일", - "info": "하나의 자식을 포함할 수 있으며, 후손 Slider에 기본 스타일을 지정합니다. 주로 Slider의 스타일 통일을 위해 사용되며, 일일이 설정하는 것을 방지하고, Slider의 스타일을 커스터마이징할 수도 있습니다.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliderTheme 사용", - "desc": [ - "SliderTheme.of를 통해 Slider 테마 데이터 객체를 얻을 수 있으며, 여기에는 Slider 설정을 위한 다양한 속성이 포함되어 있습니다.", - "ButtonTheme【후손】의 버튼 컴포넌트에 기본 스타일을 설정할 수 있으며, 색상, 모양, 크기 등을 포함합니다." - ] - }, - { - "file": "node2_diy.dart", - "name": "SliderTheme를 통한 Slider 스타일 커스터마이징", - "desc": [ - "thumbShape와 valueIndicatorShape를 통해 Slider의 스타일을 커스터마이징할 수 있습니다.", - "참고: 이 예제는 flutter-gallery의 SlideDemo를 참고했습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_pt_PT.json deleted file mode 100644 index 7e669c11b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "Estilo do Controlo Deslizante", - "info": "Pode conter um filho, especificando o estilo padrão para o Controlo Deslizante descendente. Comumente usado para unificar o estilo do Controlo Deslizante, evitando a configuração individual, também pode personalizar o estilo do Controlo Deslizante.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do SliderTheme", - "desc": [ - "Pode obter o objeto de dados do tema do Controlo Deslizante através de SliderTheme.of, que contém uma grande quantidade de propriedades para configurar o Controlo Deslizante.", - "Pode definir o estilo padrão para os componentes de botão [descendentes] do ButtonTheme, incluindo cor, forma, tamanho, etc." - ] - }, - { - "file": "node2_diy.dart", - "name": "Personalização do estilo do Controlo Deslizante com SliderTheme", - "desc": [ - "Através de thumbShape e valueIndicatorShape, pode personalizar o estilo do Controlo Deslizante.", - "Nota: Este exemplo é baseado no SlideDemo do flutter-gallery" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ru_RU.json deleted file mode 100644 index 0f4ed94a7..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "Стиль слайдера", - "info": "Может содержать один дочерний элемент, задает стиль по умолчанию для потомков Slider. Часто используется для унификации стилей Slider, чтобы избежать индивидуальной настройки, также позволяет настраивать стиль Slider.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование SliderTheme", - "desc": [ - "Можно получить объект данных темы Slider через SliderTheme.of, который содержит множество свойств для настройки Slider.", - "Можно задать стиль по умолчанию для компонентов кнопок, являющихся потомками ButtonTheme, включая цвет, форму, размер и т.д." - ] - }, - { - "file": "node2_diy.dart", - "name": "Настройка стиля Slider с помощью SliderTheme", - "desc": [ - "С помощью thumbShape и valueIndicatorShape можно настроить стиль Slider.", - "Примечание: этот пример взят из SlideDemo в flutter-gallery" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_zh-CN.json deleted file mode 100644 index b027fa96a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "滑块样式", - "info": "可容纳一个孩子,为后代的Slider指定默认样式。常用于Slider的样式统一,避免一一设置,也可以对Slider进行样式定制。", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliderTheme使用", - "desc": [ - "可通过SliderTheme.of获取Slider主题数据对象,其中包含大量属性用于对Slider的设定。\"", - "可以为ButtonTheme【后代】的按钮组件设置默认样式,包括颜色、形状、尺寸等。" - ] - }, - { - "file": "node2_diy.dart", - "name": "SliderTheme对Slider的样式定制", - "desc": [ - "通过thumbShape和valueIndicatorShape可以对Slider进行样式定制。\"", - "注: 本例参考flutter-gallery中的SlideDemo" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/node1_base.dart deleted file mode 100644 index ecf420931..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/node1_base.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-12 -/// contact me by email 1981462002@qq.com - - -class SliderThemeDemo extends StatefulWidget { - const SliderThemeDemo({Key? key}) : super(key: key); - - @override - _SliderThemeDemoState createState() => _SliderThemeDemoState(); -} - -class _SliderThemeDemoState extends State { - double _bliss = 0.5; - - @override - Widget build(BuildContext context) { - return SliderTheme( - data: SliderTheme.of(context).copyWith(activeTrackColor: Colors.orange), - child: Slider( - min: 0.0, - max: 200.0, - divisions: 10, - label: _bliss.toStringAsFixed(1), - onChanged: (double value) { - setState(() { - _bliss = value; - }); - }, - value: _bliss, - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/node2_diy.dart b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/node2_diy.dart deleted file mode 100644 index 9681384c2..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/node2_diy.dart +++ /dev/null @@ -1,173 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-12 -/// contact me by email 1981462002@qq.com - - -class DIYSliderTheme extends StatefulWidget { - const DIYSliderTheme({Key? key}) : super(key: key); - - @override - _DIYSliderThemeState createState() => _DIYSliderThemeState(); -} - -class _DIYSliderThemeState extends State { - double _bliss = 0.5; - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - return SliderTheme( - data: theme.sliderTheme.copyWith( - activeTrackColor: Colors.deepPurple, - inactiveTrackColor: Colors.blue.withAlpha(55), - activeTickMarkColor: theme.colorScheme.onSurface.withOpacity(0.7), - inactiveTickMarkColor: theme.colorScheme.surface.withOpacity(0.7), - overlayColor: theme.colorScheme.onSurface.withOpacity(0.12), - thumbColor: Colors.deepPurple, - valueIndicatorColor: Colors.deepPurpleAccent, - thumbShape: _CustomThumbShape(), - valueIndicatorShape: _CustomValueIndicatorShape(), - valueIndicatorTextStyle: theme.primaryTextTheme.bodyMedium?.copyWith(color: theme.colorScheme.onSurface), - ), - child: Slider( - min: 0.0, - max: 200.0, - divisions: 10, - label: _bliss.toStringAsFixed(1), - onChanged: (double value) { - setState(() { - _bliss = value; - }); - }, - value: _bliss, - ), - ); - } -} - -class _CustomThumbShape extends SliderComponentShape { - static const double _thumbSize = 4.0; - static const double _disabledThumbSize = 3.0; - - @override - Size getPreferredSize(bool isEnabled, bool isDiscrete) { - return isEnabled - ? const Size.fromRadius(_thumbSize) - : const Size.fromRadius(_disabledThumbSize); - } - - static final Animatable sizeTween = Tween( - begin: _disabledThumbSize, - end: _thumbSize, - ); - - @override - void paint( - PaintingContext context, - Offset center, { - required Animation activationAnimation, - required Animation enableAnimation, - required bool isDiscrete, - required TextPainter labelPainter, - required RenderBox parentBox, - required SliderThemeData sliderTheme, - required TextDirection textDirection, - required double value, - required double textScaleFactor, - required Size sizeWithOverflow, - }) { - final Canvas canvas = context.canvas; - final ColorTween colorTween = ColorTween( - begin: sliderTheme.disabledThumbColor, - end: sliderTheme.thumbColor, - ); - final double size = _thumbSize * sizeTween.evaluate(enableAnimation); - final Path thumbPath = _downTriangle(size, center); - canvas.drawPath(thumbPath, - Paint()..color = colorTween.evaluate(enableAnimation) ?? Colors.blue); - } -} - -Path _upTriangle(double size, Offset thumbCenter) => - _downTriangle(size, thumbCenter, invert: true); - -Path _downTriangle(double size, Offset thumbCenter, {bool invert = false}) { - final Path thumbPath = Path(); - final double height = sqrt(3.0) / 2.0; - final double centerHeight = size * height / 3.0; - final double halfSize = size / 2.0; - final double sign = invert ? -1.0 : 1.0; - thumbPath.moveTo( - thumbCenter.dx - halfSize, thumbCenter.dy + sign * centerHeight); - thumbPath.lineTo(thumbCenter.dx, thumbCenter.dy - 2.0 * sign * centerHeight); - thumbPath.lineTo( - thumbCenter.dx + halfSize, thumbCenter.dy + sign * centerHeight); - thumbPath.close(); - return thumbPath; -} - -class _CustomValueIndicatorShape extends SliderComponentShape { - static const double _indicatorSize = 4.0; - static const double _disabledIndicatorSize = 3.0; - static const double _slideUpHeight = 30.0; - - @override - Size getPreferredSize(bool isEnabled, bool isDiscrete) { - return Size.fromRadius(isEnabled ? _indicatorSize : _disabledIndicatorSize); - } - - static final Animatable sizeTween = Tween( - begin: _disabledIndicatorSize, - end: _indicatorSize, - ); - - @override - void paint(PaintingContext context, Offset center, - {required Animation activationAnimation, - required Animation enableAnimation, - required bool isDiscrete, - required TextPainter labelPainter, - required RenderBox parentBox, - required SliderThemeData sliderTheme, - required TextDirection textDirection, - required double value, - required double textScaleFactor, - required Size sizeWithOverflow}) { - final Canvas canvas = context.canvas; - final ColorTween enableColor = ColorTween( - begin: sliderTheme.disabledThumbColor, - end: sliderTheme.valueIndicatorColor, - ); - final Tween slideUpTween = Tween( - begin: 0.0, - end: _slideUpHeight, - ); - final double size = _indicatorSize * sizeTween.evaluate(enableAnimation); - final Offset slideUpOffset = - Offset(0.0, -slideUpTween.evaluate(activationAnimation)); - final Path thumbPath = _upTriangle(size, center + slideUpOffset); - final Color paintColor = enableColor - .evaluate(enableAnimation) - ?.withAlpha((255.0 * activationAnimation.value).round()) ?? - Colors.black; - canvas.drawPath( - thumbPath, - Paint()..color = paintColor, - ); - canvas.drawLine( - center, - center + slideUpOffset, - Paint() - ..color = paintColor - ..style = PaintingStyle.stroke - ..strokeWidth = 2.0); - labelPainter.paint( - canvas, - center + - slideUpOffset + - Offset(-labelPainter.width / 2.0, -labelPainter.height - 4.0)); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_de_DE.json deleted file mode 100644 index 1a1cc3b50..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "Tabellenzelle", - "info": "Muss in den Nachkommen der Table-Komponente verwendet werden, um die vertikale Ausrichtung der Tabellenkinder zu steuern, und hat keine große Bedeutung.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von TableCell", - "desc": [ - "【child】 : Komponente 【Widget】", - "【verticalAlignment】 : Vertikale Ausrichtung 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_en_US.json deleted file mode 100644 index d1228b6fc..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "Table Cell", - "info": "Must be used within the descendants of a Table component to control the vertical alignment of table children, and it doesn't have much significant function.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of TableCell", - "desc": [ - "【child】: Component 【Widget】", - "【verticalAlignment】: Vertical Alignment 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_es_ES.json deleted file mode 100644 index 9166ac778..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "Celda de tabla", - "info": "Debe usarse en los descendientes del componente Table, para controlar la alineación vertical de los hijos de la tabla, y no tiene un gran efecto.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de TableCell", - "desc": [ - "【child】 : Componente 【Widget】", - "【verticalAlignment】 : Alineación vertical 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_fr_FR.json deleted file mode 100644 index db2ee9d81..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "Cellule de tableau", - "info": "Doit être utilisé dans la descendance du composant Table, pour contrôler l'alignement vertical des enfants du tableau, et n'a pas beaucoup d'effet.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de TableCell", - "desc": [ - "【child】 : Composant 【Widget】", - "【verticalAlignment】 : Alignement vertical 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_it_IT.json deleted file mode 100644 index 90ae875a1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "Cella della tabella", - "info": "Deve essere utilizzato all'interno dei discendenti del componente Table, per controllare l'allineamento verticale dei figli della tabella, e non ha un ruolo particolarmente significativo.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di TableCell", - "desc": [ - "【child】 : Componente 【Widget】", - "【verticalAlignment】 : Allineamento verticale 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ja_JP.json deleted file mode 100644 index cd93b7eaa..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "表室", - "info": "Tableコンポーネントの子孫で使用する必要があり、表の子の垂直方向の整列を制御するために使用されますが、大きな役割はありません。", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TableCellの基本的な使用法", - "desc": [ - "【child】 : コンポーネント 【Widget】", - "【verticalAlignment】 : 垂直方向の整列 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ko_KR.json deleted file mode 100644 index 2540d6fdd..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "테이블 셀", - "info": "Table 컴포넌트의 후손에서 사용해야 하며, 테이블 자식의 수직 정렬 방식을 제어하는 데 사용되며 큰 역할은 없습니다.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TableCell 기본 사용", - "desc": [ - "【child】 : 컴포넌트 【Widget】", - "【verticalAlignment】 : 수직 정렬 방식 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_pt_PT.json deleted file mode 100644 index df8c90a05..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "Célula da Tabela", - "info": "Deve ser usado nos descendentes do componente Table, para controlar o alinhamento vertical dos filhos da tabela, e não tem um grande impacto.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do TableCell", - "desc": [ - "【child】 : Componente 【Widget】", - "【verticalAlignment】 : Alinhamento Vertical 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ru_RU.json deleted file mode 100644 index 143246f06..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "Ячейка таблицы", - "info": "Должен использоваться в потомках компонента Table для управления вертикальным выравниванием дочерних элементов таблицы, но не имеет большого значения.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование TableCell", - "desc": [ - "【child】 : Компонент 【Widget】", - "【verticalAlignment】 : Вертикальное выравнивание 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_zh-CN.json deleted file mode 100644 index ec9d663de..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "表室", - "info": "必须在 Table 组件的后代中使用,用于控制表孩子的竖直方向对齐方式,并没是什么太大的作用。", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TableCell基本使用", - "desc": [ - "【child】 : 组件 【Widget】", - "【verticalAlignment】 : 竖直对齐方式 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/node1_base.dart deleted file mode 100644 index cd9dce2cc..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/node1_base.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class TableCellDemo extends StatelessWidget { - const TableCellDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - _ItemBean title = _ItemBean("单位称", "量纲", "单位", "单位名称", "单位符号"); - _ItemBean m = _ItemBean("长度", "L", "1m", "米", "m"); - _ItemBean kg = _ItemBean("质量", "M", "1Kg", "千克", "Kg"); - _ItemBean s = _ItemBean("时间", "T", "1s", "秒", "s"); - _ItemBean a = _ItemBean("安培", "Ι", "1A", "安培", "A"); - _ItemBean k = _ItemBean("热力学温度", "θ", "1K", "开尔文", "K"); - _ItemBean mol = _ItemBean("物质的量", "N", "1mol", "摩尔", "mol"); - _ItemBean cd = _ItemBean("发光强度", "J", "1cd", "坎德拉", "cd"); - - List<_ItemBean> data = [title, m, kg, s, a, k, mol, cd]; - - return SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: Table( - columnWidths: const { - 0: FixedColumnWidth(80.0), - 1: FixedColumnWidth(80.0), - 2: FixedColumnWidth(80.0), - 3: FixedColumnWidth(80.0), - 4: FixedColumnWidth(80.0), - }, - defaultVerticalAlignment: TableCellVerticalAlignment.middle, - border: TableBorder.all( - color: Colors.orangeAccent, width: 1.0, style: BorderStyle.solid), - children: data - .map((item) => TableRow(children: [ - TableCell( - verticalAlignment: TableCellVerticalAlignment.bottom, - child: Text( - item.name, - style: const TextStyle(color: Colors.blue), - )), - TableCell( - verticalAlignment: TableCellVerticalAlignment.baseline, - child: Text(item.symbol)), - TableCell( - verticalAlignment: TableCellVerticalAlignment.top, - child: Text(item.unitSymbol)), - TableCell( - verticalAlignment: TableCellVerticalAlignment.fill, - child: Text(item.unitName)), - TableCell( - verticalAlignment: TableCellVerticalAlignment.middle, - child: SizedBox(height: 30, child: Text(item.unit)), - ), - ])) - .toList(), - ), - ); - } -} - -class _ItemBean { - String name; - String symbol; - String unit; - String unitName; - String unitSymbol; - - _ItemBean(this.name, this.symbol, this.unit, this.unitName, this.unitSymbol); -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_de_DE.json deleted file mode 100644 index b03e2be3c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "Schaltflächenstil", - "info": "Wird hauptsächlich verwendet, um Standardattribute für nachfolgende ToggleButtons-Komponenten festzulegen. Es kann auch verwendet werden, um die Standardattribute von ToggleButtons abzurufen.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ToggleButtonsTheme", - "desc": [ - "Mit ToggleButtonsThemeData können Standardstile wie Rahmenstil, Farbe, Dekoration usw. für nachfolgende ToggleButtons-Komponenten festgelegt werden. Mit ToggleButtonsTheme.of können auch die Themendaten von ToggleButtons abgerufen werden." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_en_US.json deleted file mode 100644 index 8b9d2017a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "Slider Style", - "info": "Mainly used to set default properties for descendant ToggleButtons components uniformly. You can also get the default properties of ToggleButtons through this component.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ToggleButtonsTheme", - "desc": [ - "You can specify the ToggleButtonsThemeData properties to set default styles for descendant ToggleButtons components, such as border style, color, decoration, etc. You can also use ToggleButtonsTheme.of to get the theme data of ToggleButtons." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_es_ES.json deleted file mode 100644 index 0cfe28b17..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "Tema de botones de alternancia", - "info": "Se utiliza principalmente para establecer propiedades predeterminadas unificadas para los componentes ToggleButtons descendientes, también se puede obtener las propiedades predeterminadas de ToggleButtons a través de este componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ToggleButtonsTheme", - "desc": [ - "Se puede especificar la propiedad de datos ToggleButtonsThemeData para establecer estilos predeterminados para los componentes ToggleButtons descendientes, como estilos de borde, colores, decoraciones, etc. También se puede usar ToggleButtonsTheme.of para obtener los datos del tema de ToggleButtons." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_fr_FR.json deleted file mode 100644 index 34f273eeb..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "Thème des boutons bascule", - "info": "Principalement utilisé pour définir des propriétés par défaut unifiées pour les composants ToggleButtons descendants, ou pour obtenir les propriétés par défaut des ToggleButtons via ce composant.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ToggleButtonsTheme", - "desc": [ - "Vous pouvez spécifier les propriétés de données de ToggleButtonsThemeData pour définir le style par défaut des composants ToggleButtons descendants, tels que le style de bordure, la couleur, la décoration, etc. Vous pouvez également utiliser ToggleButtonsTheme.of pour obtenir les données de thème des ToggleButtons." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_it_IT.json deleted file mode 100644 index 2e7b70693..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "Tema dei pulsanti di commutazione", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti ToggleButtons dei discendenti. È anche possibile ottenere le proprietà predefinite dei ToggleButtons tramite questo componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ToggleButtonsTheme", - "desc": [ - "È possibile specificare le proprietà dei dati ToggleButtonsThemeData per impostare lo stile predefinito per i componenti ToggleButtons dei discendenti, come lo stile del bordo, il colore, la decorazione, ecc. È anche possibile utilizzare ToggleButtonsTheme.of per ottenere i dati del tema dei ToggleButtons." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ja_JP.json deleted file mode 100644 index dd837f1cb..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "スライダースタイル", - "info": "主に子孫のToggleButtonsコンポーネントにデフォルトのプロパティを統一して設定するために使用されます。また、このコンポーネントを通じてデフォルトのToggleButtonsのプロパティを取得することもできます。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ToggleButtonsThemeの基本使用", - "desc": [ - "ToggleButtonsThemeDataデータプロパティを指定して、子孫のToggleButtonsコンポーネントにデフォルトのスタイル(ボーダースタイル、色、装飾など)を設定できます。また、ToggleButtonsTheme.ofを使用してToggleButtonsのテーマデータを取得することもできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ko_KR.json deleted file mode 100644 index 6083acee5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "토글 버튼 스타일", - "info": "주로 후손 ToggleButtons 컴포넌트에 기본 속성을 통일적으로 설정하기 위해 사용되며, 이 컴포넌트를 통해 기본 ToggleButtons의 속성을 얻을 수도 있습니다.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ToggleButtonsTheme 기본 사용법", - "desc": [ - "ToggleButtonsThemeData 데이터 속성을 지정하여 후손 ToggleButtons 컴포넌트에 기본 스타일(예: 테두리 스타일, 색상, 장식 등)을 설정할 수 있습니다. 또한 ToggleButtonsTheme.of를 사용하여 ToggleButtons의 테마 데이터를 얻을 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_pt_PT.json deleted file mode 100644 index b5f226318..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "Tema dos Botões de Alternância", - "info": "Principalmente utilizado para definir propriedades padrão unificadas para componentes ToggleButtons descendentes, também é possível obter as propriedades padrão do ToggleButtons através deste componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ToggleButtonsTheme", - "desc": [ - "Pode especificar as propriedades de dados do ToggleButtonsThemeData para definir o estilo padrão para componentes ToggleButtons descendentes, como estilo de borda, cor, decoração, etc. Também é possível usar ToggleButtonsTheme.of para obter os dados do tema do ToggleButtons." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ru_RU.json deleted file mode 100644 index c5789f622..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "Тема переключателей", - "info": "В основном используется для установки стандартных свойств для компонентов ToggleButtons у потомков, также можно получить свойства по умолчанию для ToggleButtons через этот компонент.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ToggleButtonsTheme", - "desc": [ - "Можно указать свойства данных ToggleButtonsThemeData для установки стандартных стилей для компонентов ToggleButtons у потомков, таких как стиль границы, цвет, оформление и т.д. Также можно использовать ToggleButtonsTheme.of для получения тематических данных ToggleButtons." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_zh-CN.json deleted file mode 100644 index 001beb487..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "滑块样式", - "info": "主要用于为后代的ToggleButtons组件统一设置默认属性,也可以通过该组件获取默认ToggleButtons的属性。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ToggleButtonsTheme基本使用", - "desc": [ - "可指定ToggleButtonsThemeData数据属性为【后代】的ToggleButtons组件设置默认样式,如边框样式、颜色、装饰等。也可以用ToggleButtonsTheme.of获取ToggleButtons的主题数据。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/node1_base.dart deleted file mode 100644 index 715cea365..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/node1_base.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class ToggleButtonsThemeDemo extends StatelessWidget { - const ToggleButtonsThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ToggleButtonsTheme( - data: ToggleButtonsTheme.of(context).copyWith( - borderWidth: 1, - borderColor: Colors.orangeAccent, - selectedBorderColor: Colors.blue, - splashColor: Colors.purple.withAlpha(66), - borderRadius: BorderRadius.circular(10), - selectedColor: Colors.red, - fillColor: Colors.green.withAlpha(11), - ), - child: _ToggleButtonsSimple(), - ); - } -} - - -class _ToggleButtonsSimple extends StatefulWidget { - @override - _ToggleButtonsSimpleState createState() => _ToggleButtonsSimpleState(); -} - -class _ToggleButtonsSimpleState extends State<_ToggleButtonsSimple> { - var _isSelected = [true, false, false]; - - @override - Widget build(BuildContext context) { - return ToggleButtons( - children: const[ - Icon(Icons.skip_previous), - Icon(Icons.pause), - Icon(Icons.skip_next), - ], - isSelected: _isSelected, - onPressed: (value) => setState(() { - _isSelected = _isSelected.map((e) => false).toList(); - _isSelected[value] = true; - }), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_de_DE.json deleted file mode 100644 index 7c6030a5d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "Tooltip-Thema", - "info": "Wird hauptsächlich verwendet, um Standardattribute für nachfolgende Tooltip-Komponenten festzulegen. Es kann auch verwendet werden, um die Attribute des standardmäßigen Tooltip-Themas abzurufen.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von TooltipTheme", - "desc": [ - "Kann die TooltipThemeData-Datenattribute festlegen, um Standardstile für nachfolgende Tooltip-Komponenten zu definieren, wie Dekoration, Textstil, Anzeigedauer, Randabstand usw. Es kann auch TooltipTheme.of verwenden, um die Themenattribute des Tooltips abzurufen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_en_US.json deleted file mode 100644 index a51860c97..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "Tooltip Theme", - "info": "Mainly used to set default properties for descendant Tooltip components uniformly. You can also retrieve the properties of the default TooltipTheme through this component.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of TooltipTheme", - "desc": [ - "You can specify the TooltipThemeData properties to set default styles for descendant Tooltip components, such as decoration, text style, display duration, margins, etc. You can also use TooltipTheme.of to get the theme properties of Tooltip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_es_ES.json deleted file mode 100644 index f9f3e91d9..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "Tema de Tooltip", - "info": "Principalmente se utiliza para establecer propiedades predeterminadas unificadas para los componentes Tooltip descendientes. También se pueden obtener las propiedades predeterminadas de TooltipTheme a través de este componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de TooltipTheme", - "desc": [ - "Se pueden especificar las propiedades de TooltipThemeData para establecer estilos predeterminados para los componentes Tooltip descendientes, como decoración, estilo de texto, duración de visualización, márgenes, etc. También se puede usar TooltipTheme.of para obtener las propiedades del tema de Tooltip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_fr_FR.json deleted file mode 100644 index c8fc68cf9..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "Thème d'infobulle", - "info": "Principalement utilisé pour définir les propriétés par défaut des composants Tooltip pour les descendants. Il est également possible d'obtenir les propriétés du TooltipTheme par défaut via ce composant.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de TooltipTheme", - "desc": [ - "Vous pouvez spécifier les propriétés de TooltipThemeData pour définir le style par défaut des composants Tooltip pour les descendants, comme la décoration, le style du texte, la durée d'affichage, les marges, etc. Vous pouvez également utiliser TooltipTheme.of pour obtenir les propriétés du thème Tooltip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_it_IT.json deleted file mode 100644 index 6689bbad7..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "Tema del Tooltip", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti Tooltip discendenti. È anche possibile ottenere le proprietà del TooltipTheme predefinito tramite questo componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di TooltipTheme", - "desc": [ - "È possibile specificare le proprietà dei dati di TooltipThemeData per impostare lo stile predefinito per i componenti Tooltip discendenti, come decorazioni, stili di testo, durata di visualizzazione, margini, ecc. È anche possibile utilizzare TooltipTheme.of per ottenere le proprietà del tema del Tooltip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ja_JP.json deleted file mode 100644 index a4b3839fb..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "ツールチップテーマ", - "info": "主に、子孫のTooltipコンポーネントにデフォルトのプロパティを統一して設定するために使用されます。また、このコンポーネントを通じてデフォルトのTooltipThemeのプロパティを取得することもできます。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TooltipThemeの基本使用", - "desc": [ - "TooltipThemeDataデータプロパティを指定して、【子孫】のTooltipコンポーネントにデフォルトのスタイルを設定できます。例えば、装飾、テキストスタイル、表示時間、余白など。また、TooltipTheme.ofを使用してTooltipのテーマプロパティを取得することもできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ko_KR.json deleted file mode 100644 index bb80ad7cd..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "툴팁 테마", - "info": "주로 후손의 Tooltip 컴포넌트에 기본 속성을 통일적으로 설정하기 위해 사용되며, 이 컴포넌트를 통해 기본 TooltipTheme의 속성을 가져올 수도 있습니다.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TooltipTheme 기본 사용", - "desc": [ - "TooltipThemeData 데이터 속성을 지정하여 【후손】의 Tooltip 컴포넌트에 기본 스타일을 설정할 수 있습니다. 예를 들어, 장식, 텍스트 스타일, 표시 시간, 여백 등이 있습니다. 또한 TooltipTheme.of를 사용하여 Tooltip의 테마 속성을 가져올 수도 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_pt_PT.json deleted file mode 100644 index e5fceabed..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "Tema de Dica", - "info": "Principalmente utilizado para definir propriedades padrão unificadas para componentes Tooltip descendentes, também é possível obter as propriedades do TooltipTheme padrão através deste componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do TooltipTheme", - "desc": [ - "Pode especificar as propriedades de dados do TooltipThemeData para definir o estilo padrão para componentes Tooltip descendentes, como decoração, estilo de texto, duração de exibição, margens, etc. Também é possível usar TooltipTheme.of para obter as propriedades temáticas do Tooltip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ru_RU.json deleted file mode 100644 index af7aa3ff1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "Тема подсказки", - "info": "В основном используется для установки стандартных свойств для компонентов Tooltip потомков, также можно получить свойства стандартного TooltipTheme через этот компонент.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование TooltipTheme", - "desc": [ - "Можно указать свойства данных TooltipThemeData для установки стандартного стиля для компонентов Tooltip потомков, таких как декор, стиль текста, продолжительность отображения, отступы и т.д. Также можно использовать TooltipTheme.of для получения тематических свойств Tooltip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_zh-CN.json deleted file mode 100644 index ad727adeb..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "提示主题", - "info": "主要用于为后代的Tooltip组件统一设置默认属性,也可以通过该组件获取默认TooltipTheme的属性。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TooltipTheme基本使用", - "desc": [ - "可指定TooltipThemeData数据属性为【后代】的Tooltip组件设置默认样式,如装饰、文字样式、显示时长、边距等。也可以用TooltipTheme.of获取Tooltip的主题属性。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/node1_base.dart deleted file mode 100644 index 0ef30903d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/node1_base.dart +++ /dev/null @@ -1,44 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class TooltipThemeDemo extends StatelessWidget { - const TooltipThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return TooltipTheme( - child: const TempTooltip(), - data: TooltipTheme.of(context).copyWith( - preferBelow: false, - padding: const EdgeInsets.all(5), - verticalOffset: 20, - margin: const EdgeInsets.all(2), - textStyle: const TextStyle(color: Colors.red, shadows: [ - Shadow(color: Colors.white, offset: Offset(1, 1)), - ]), - decoration: const BoxDecoration(boxShadow: [ - BoxShadow( - color: Colors.orangeAccent, - offset: Offset(1, 1), - blurRadius: 8) - ]))); - } -} - -class TempTooltip extends StatelessWidget { - const TempTooltip({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: const [ - Tooltip(message: "天王盖地虎", child: Icon(Icons.info_outline)), - Tooltip(message: "宝塔镇河妖", child: Icon(Icons.info_outline)), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_de_DE.json deleted file mode 100644 index 6f468c5ba..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "Klicks absorbieren", - "info": "Enthält ein Kind-Widget und kann durch das Festlegen des Attributs ignoring entscheiden, ob das Kind Gestenereignisse ignoriert, während es selbst Ereignisse akzeptiert.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AbsorbPointer", - "desc": [ - "【child】 : Kind-Widget 【Widget】", - "【absorbing】 : Ob Ereignisse absorbiert werden 【bool】", - "Wie unten gezeigt, wenn der Switch ausgewählt ist, ist absorbing true, und die Schaltflächenereignisse werden absorbiert und können nicht geklickt werden." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_en_US.json deleted file mode 100644 index d8d6217b6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "Absorb Click", - "info": "Contains a child component, and it can decide whether the child ignores gesture events by specifying the ignoring attribute, while it itself accepts events.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AbsorbPointer", - "desc": [ - "【child】: Child component 【Widget】", - "【absorbing】: Whether to absorb events 【bool】", - "As shown below, when the Switch is selected, absorbing is true, and the button event will be absorbed and cannot be clicked." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_es_ES.json deleted file mode 100644 index 69fbccceb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "Absorber Clics", - "info": "Contiene un componente hijo y puede decidir si el hijo ignora los eventos de gestos especificando la propiedad ignoring, mientras que él mismo acepta los eventos.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AbsorbPointer", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【absorbing】 : Si absorbe eventos 【bool】", - "Como se muestra a continuación, cuando el Switch está seleccionado, absorbing es true y los eventos del botón serán absorbidos, no se podrá hacer clic." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_fr_FR.json deleted file mode 100644 index f4e3f32ee..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "Absorber les clics", - "info": "Contient un composant enfant et peut décider si l'enfant ignore les événements gestuels en spécifiant la propriété ignoring, tout en acceptant les événements lui-même.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AbsorbPointer", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【absorbing】 : Si les événements sont absorbés 【bool】", - "Comme ci-dessous, lorsque le Switch est sélectionné, absorbing est true, les événements du bouton seront absorbés et ne pourront pas être cliqués." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_it_IT.json deleted file mode 100644 index 3bd4e2e7b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "Assorbi Clic", - "info": "Contiene un componente figlio, è possibile decidere se il figlio ignora gli eventi del gesto specificando l'attributo ignoring, mentre esso stesso accetta gli eventi.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AbsorbPointer", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【absorbing】 : Se assorbire gli eventi 【bool】", - "Come mostrato di seguito, quando Switch è selezionato, absorbing è true, gli eventi del pulsante verranno assorbiti e non sarà possibile fare clic." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ja_JP.json deleted file mode 100644 index 87d7845dc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "クリックを吸収", - "info": "子コンポーネントを含み、ignoring属性を指定することで、子がジェスチャーイベントを無視するかどうかを決定し、それ自体がイベントを受け取ります。", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AbsorbPointerの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【absorbing】 : イベントを吸収するかどうか 【bool】", - "以下の例では、Switchが選択されている場合、absorbingがtrueになり、ボタンのイベントが吸収され、クリックできなくなります。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ko_KR.json deleted file mode 100644 index 5c8c55777..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "클릭 흡수", - "info": "자식 위젯을 포함하며, ignoring 속성을 지정하여 자식이 제스처 이벤트를 무시할지 여부를 결정할 수 있습니다. 그 자체는 이벤트를 받습니다.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AbsorbPointer 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【absorbing】 : 이벤트를 흡수할지 여부 【bool】", - "아래와 같이, Switch가 선택되면 absorbing이 true가 되어 버튼 이벤트가 흡수되어 클릭할 수 없게 됩니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_pt_PT.json deleted file mode 100644 index 8a4c7c7df..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "Absorver Clique", - "info": "Contém um componente filho e pode decidir se o filho ignora eventos de gestos especificando o atributo ignoring, enquanto ele próprio aceita eventos.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AbsorbPointer", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【absorbing】 : Se absorve eventos 【bool】", - "Como mostrado abaixo, quando o Switch está selecionado, absorbing é true e o evento do botão será absorvido, não podendo ser clicado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ru_RU.json deleted file mode 100644 index c5552f402..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "Поглощение кликов", - "info": "Содержит дочерний компонент, который может игнорировать жестовые события в зависимости от указанного свойства ignoring, при этом сам компонент принимает события.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AbsorbPointer", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【absorbing】 : Поглощать ли события 【bool】", - "Как показано ниже, когда Switch выбран, absorbing равно true, и событие кнопки будет поглощено, и нажатие будет невозможно." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_zh-CN.json deleted file mode 100644 index e17289d81..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "吸收点击", - "info": "容纳一个子组件,可以通过指定ignoring属性,来决定孩子是否忽略手势事件,其本身接受事件。", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AbsorbPointer基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【absorbing】 : 是否吸收事件 【bool】", - "如下,Switch选中时absorbing为true,按钮事件将被吸收,无法点击。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/node1_base.dart deleted file mode 100644 index efca1c01a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/node1_base.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - - -class CustomAbsorbPointer extends StatefulWidget { - const CustomAbsorbPointer({Key? key}) : super(key: key); - - @override - _CustomAbsorbPointerState createState() => _CustomAbsorbPointerState(); -} - -class _CustomAbsorbPointerState extends State { - bool _absorbing = false; - - @override - Widget build(BuildContext context) { - return Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - GestureDetector( - onTap: (){ - print('AbsorbPointer'); - }, - child: AbsorbPointer( - absorbing: _absorbing, - child: _buildButton(), - ), - ), - _buildSwitch(), - Text(!_absorbing ? '允许点击' : '事件已被吸收') - ], - ); - } - - Widget _buildButton() => ElevatedButton( - child: const Text( - 'To About', - style: TextStyle(color: Colors.white), - ), - onPressed: () => Navigator.of(context).pushNamed('AboutMePage')); - - Widget _buildSwitch() => Switch( - value: _absorbing, - onChanged: (v) { - setState(() { - _absorbing = v; - }); - }); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_de_DE.json deleted file mode 100644 index 2fe4515fb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_de_DE.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "Ausrichtungskomponente", - "info": "Kann ein Unterelement aufnehmen und kann das Unterelement durch Ausrichtung an jeder angegebenen Position der Breite und Höhe des übergeordneten Elements positionieren.", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Align", - "desc": [ - "【child】: Unterelement 【Widget】", - "【alignment】: Ausrichtung 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Andere Verwendungen von Align", - "desc": [ - "Da das Alignment-Objekt eine Position im Verhältnis zur Breite und Höhe des übergeordneten Containers angeben kann", - "kann Align verwendet werden, um komplexe Layoutanforderungen zu erfüllen, z.B. die Position nach einer bestimmten mathematischen Gleichung zu ändern" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_en_US.json deleted file mode 100644 index 713413e1f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_en_US.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "Align Component", - "info": "Can accommodate a child component, and the child component can be positioned at any specified fraction of the parent component's width and height through alignment.", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Align", - "desc": [ - "【child】 : Child component 【Widget】", - "【alignment】 : Alignment method 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Other Usages of Align", - "desc": [ - "Since the Alignment object can specify the fractional position of the width and height in the parent container", - "Align can be used to achieve some complex layout requirements, such as changing positions according to specified mathematical equations" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_es_ES.json deleted file mode 100644 index ca2eee774..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_es_ES.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "Componente de Alineación", - "info": "Puede contener un componente hijo, y se puede posicionar en cualquier fracción específica del ancho y alto del componente padre a través de alignment.", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Align", - "desc": [ - "【child】: Componente hijo 【Widget】", - "【alignment】: Método de alineación 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Otros usos de Align", - "desc": [ - "Dado que el objeto Alignment puede especificar la posición de la fracción del ancho y alto en el contenedor padre", - "Se puede usar Align para implementar algunas necesidades de disposición complejas, como cambiar la posición según ecuaciones matemáticas específicas" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_fr_FR.json deleted file mode 100644 index 0afdeb174..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_fr_FR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "Composant d'alignement", - "info": "Peut contenir un composant enfant, et permet de positionner le composant enfant à n'importe quelle fraction spécifiée de la largeur et de la hauteur du composant parent via l'alignement.", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'Align", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【alignment】 : Méthode d'alignement 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Autres utilisations d'Align", - "desc": [ - "Puisque l'objet Alignment peut spécifier une position fractionnaire dans la largeur et la hauteur du conteneur parent", - "Align peut être utilisé pour répondre à des besoins de mise en page complexes, tels que des changements de position selon des équations mathématiques spécifiées" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_it_IT.json deleted file mode 100644 index c9dec642a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_it_IT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "Componente Allineamento", - "info": "Può contenere un componente figlio, e può posizionare il componente figlio in qualsiasi frazione specificata della larghezza e altezza del componente genitore tramite l'allineamento.", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Align", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【alignment】 : Modalità di allineamento 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Altri usi di Align", - "desc": [ - "Poiché l'oggetto Alignment può specificare la posizione della frazione di larghezza e altezza nel contenitore genitore", - "è possibile utilizzare Align per soddisfare alcune esigenze di layout complesse, come cambiare posizione secondo equazioni matematiche specificate" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ja_JP.json deleted file mode 100644 index 1a06a3369..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ja_JP.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "整列コンポーネント", - "info": "1つの子コンポーネントを収容でき、alignmentを使用して子コンポーネントを親コンポーネントの幅と高さの任意の指定された比率に配置できます。", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Alignの基本的な使用法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【alignment】 : 整列方法 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Alignのその他の使用法", - "desc": [ - "Alignmentオブジェクトは、親コンテナ内の幅と高さの比率位置を指定できるため", - "Alignを使用して、指定された数学的方程式に従って位置を変化させるなど、複雑なレイアウト要件を実現できます" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ko_KR.json deleted file mode 100644 index d7c244cba..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ko_KR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "정렬 컴포넌트", - "info": "하나의 자식 컴포넌트를 수용할 수 있으며, alignment를 통해 자식 컴포넌트를 부모 컴포넌트의 너비와 높이의 지정된 비율 위치에 배치할 수 있습니다.", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Align 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Align 기타 사용법", - "desc": [ - "Alignment 객체는 부모 컨테이너에서 너비와 높이의 비율 위치를 지정할 수 있으므로", - "Align을 사용하여 복잡한 배치 요구 사항을 구현할 수 있습니다. 예를 들어 지정된 수학 방정식에 따라 위치를 변경하는 것과 같은 요구 사항을 구현할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_pt_PT.json deleted file mode 100644 index c3da9f49e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_pt_PT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "Componente de Alinhamento", - "info": "Pode conter um componente filho, e pode posicionar o componente filho em qualquer fração especificada da largura e altura do componente pai através do alinhamento.", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Align", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【alignment】 : Modo de alinhamento 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Outros Usos do Align", - "desc": [ - "Como o objeto Alignment pode especificar a posição da fração de largura e altura no contêiner pai", - "Pode-se usar o Align para implementar algumas necessidades complexas de layout, como mudar a posição de acordo com uma equação matemática especificada" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ru_RU.json deleted file mode 100644 index af7806c48..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ru_RU.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "Компонент выравнивания", - "info": "Может содержать один дочерний компонент, который можно расположить в любом указанном месте ширины и высоты родительского компонента с помощью alignment.", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Align", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Другие способы использования Align", - "desc": [ - "Поскольку объект Alignment может указывать положение в долях ширины и высоты родительского контейнера", - "Можно использовать Align для реализации сложных требований к расположению, например, для изменения положения по указанному математическому уравнению" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_zh-CN.json deleted file mode 100644 index ba46195d3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_zh-CN.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "对齐组件", - "info": "可容纳一个子组件,可以通过alignment让子组件,定位在父组件宽高的任何指定分率出。", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Align基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【alignment】 : 对齐方式 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Align其他用法", - "desc": [ - "由于Alignment对象可指定在父容器中宽高的分率位置", - "可以使用Align实现一些复杂的排布需求,比如按指定的数学方程变化位置" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/node1_base.dart deleted file mode 100644 index 5e6ae234b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/node1_base.dart +++ /dev/null @@ -1,55 +0,0 @@ - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomAlign extends StatelessWidget { - const CustomAlign({Key? key}) : super(key: key); - - final List alignments = const [ - Alignment.topLeft, - Alignment.topCenter, - Alignment.topRight, - Alignment.centerLeft, - Alignment.center, - Alignment.centerRight, - Alignment.bottomLeft, - Alignment.bottomCenter, - Alignment.bottomRight, - ]; - - final List alignmentsInfo = const [ - "topLeft", - "topCenter", - "topRight", - "centerLeft", - "center", - "centerRight", - "bottomLeft", - "bottomCenter", - "bottomRight", - ]; - - @override - Widget build(BuildContext context) { - return Wrap( - children: alignments - .toList() - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 100, - height: 60, - color: Colors.grey.withAlpha(88), - child: Align( - child: Container( - width: 30, - height: 30, - color: Colors.cyanAccent, - ), - alignment: mode)), - Text(alignmentsInfo[alignments.indexOf(mode)]) - ])) - .toList()); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/node2_other.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/node2_other.dart deleted file mode 100644 index 3983e6fee..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/node2_other.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class Ball extends StatelessWidget { - const Ball({ - Key? key, - this.radius = 15, - this.color = Colors.blue, - }) : super(key: key); - final double radius; //半径 - final Color color; //颜色 - - @override - Widget build(BuildContext context) { - return Container( - width: radius * 2, - height: radius * 2, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: color, - ), - ); - } -} - -class SinLayout extends StatefulWidget { - const SinLayout({ - Key? key, - }) : super(key: key); - - @override - _SinLayoutState createState() => _SinLayoutState(); -} - -class _SinLayoutState extends State { - double _x = 0.0; //Alignment坐标系上的x坐标 - - @override - Widget build(BuildContext context) { - var item = Container( - width: 300, - height: 120, - color: Colors.black.withAlpha(10), - child: Align( - child: const Ball( - color: Colors.orangeAccent, - ), - alignment: Alignment(_x, f(_x * pi)), - ), - ); - - var slider = Slider( - max: 180, - min: -180, - divisions: 360, - label: "${_x.toStringAsFixed(2)}π", - value: _x * 180, - onChanged: (v) => setState(() => _x = v / 180)); - return Column( - mainAxisSize: MainAxisSize.min, - children: [slider, item], - ); - } - - double f(x) { - //映射函数 -- 可随意指定 - double y = sin(x); - return y; - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_de_DE.json deleted file mode 100644 index cef55e3bb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "Größenanimation", - "info": "Wenn sich die Größe der Unterkomponente ändert, erfolgt eine animierte Überblendung. Attribute wie Dauer, Ausrichtung, Kurve, vsync usw. können angegeben werden.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedSize", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【alignment】 : Ausrichtung 【AlignmentGeometry】", - "【curve】 : Animationskurve 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_en_US.json deleted file mode 100644 index 8c6d66b75..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "Size Animation", - "info": "When the size of the child component changes, it animates gradually. You can specify properties such as duration, alignment, curve, vsync, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedSize", - "desc": [ - "【child】 : Child component 【Widget】", - "【duration】 : Animation duration 【Duration】", - "【alignment】 : Alignment 【AlignmentGeometry】", - "【curve】 : Animation curve 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_es_ES.json deleted file mode 100644 index 0bd59a182..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "Animación de Tamaño", - "info": "Cuando el tamaño del componente hijo cambia, se realiza una transición animada. Se pueden especificar propiedades como la duración, la alineación, la curva, vsync, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de AnimatedSize", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【alignment】 : Alineación 【AlignmentGeometry】", - "【curve】 : Curva de la animación 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_fr_FR.json deleted file mode 100644 index 5acea2c76..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "Animation de taille", - "info": "Lorsque la taille du composant enfant change, une transition animée est effectuée. Vous pouvez spécifier des propriétés telles que la durée, l'alignement, la courbe, vsync, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedSize", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【alignment】 : Alignement 【AlignmentGeometry】", - "【curve】 : Courbe de l'animation 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_it_IT.json deleted file mode 100644 index 59207c7e7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "Animazione delle dimensioni", - "info": "Quando le dimensioni del componente figlio cambiano, viene eseguita una transizione animata. È possibile specificare proprietà come durata, allineamento, curva, vsync, ecc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedSize", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【alignment】 : Allineamento 【AlignmentGeometry】", - "【curve】 : Curva dell'animazione 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ja_JP.json deleted file mode 100644 index f427d6d09..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "サイズアニメーション", - "info": "子コンポーネントのサイズが変化する際に、アニメーションで滑らかに変化させます。持続時間、整列方法、曲線、vsyncなどの属性を指定できます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedSizeの基本的な使用法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーションの持続時間 【Duration】", - "【alignment】 : 整列方法 【AlignmentGeometry】", - "【curve】 : アニメーション曲線 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ko_KR.json deleted file mode 100644 index 2060ce8c4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "크기 애니메이션", - "info": "자식 컴포넌트의 크기가 변경될 때 애니메이션을 통해 점진적으로 변화시킵니다. 지속 시간, 정렬 방식, 곡선, vsync 등의 속성을 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedSize 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_pt_PT.json deleted file mode 100644 index b6bb9f9f4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "Animação de Tamanho", - "info": "Quando o tamanho do componente filho muda, ocorre uma transição animada, podendo especificar duração, alinhamento, curva, vsync, entre outros atributos.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedSize", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【alignment】 : Modo de alinhamento 【AlignmentGeometry】", - "【curve】 : Curva da animação 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ru_RU.json deleted file mode 100644 index 465dd96f3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "Анимация размера", - "info": "Когда размер дочернего компонента изменяется, происходит плавная анимация. Можно указать такие свойства, как продолжительность, способ выравнивания, кривая, vsync и другие.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedSize", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Продолжительность анимации 【Duration】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】", - "【curve】 : Кривая анимации 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_zh-CN.json deleted file mode 100644 index b5559c1f6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "尺寸动画", - "info": "子组件大小发生变化时,进行动画渐变,可指定时长、对齐方式、曲线、vsync等属性。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedSize基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【alignment】 : 对齐方式 【AlignmentGeometry】", - "【curve】 : 动画曲线 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/node1_base.dart deleted file mode 100644 index deb0e60d3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/node1_base.dart +++ /dev/null @@ -1,64 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - - -class CustomAnimatedSize extends StatefulWidget { - const CustomAnimatedSize({Key? key}) : super(key: key); - - @override - _CustomAnimatedSizeState createState() => _CustomAnimatedSizeState(); -} - -class _CustomAnimatedSizeState extends State - with SingleTickerProviderStateMixin { - final double start = 100; - final double end = 200; - - late double _width; - - @override - void initState() { - _width = start; - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSwitch(), - Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 100, - alignment: Alignment.center, - child: AnimatedSize( - duration: const Duration(seconds: 1), - curve: Curves.fastOutSlowIn, - alignment: const Alignment(0, 0), - child: Container( - height: 40, - width: _width, - alignment: Alignment.center, - color: Colors.blue, - child: const Text( - '张风捷特烈', - style: TextStyle(color: Colors.white), - ), - ), - ), - ), - ], - ); - } - - Widget _buildSwitch() => Switch( - value: _width == end, - onChanged: (v) { - setState(() { - _width = v ? end : start; - }); - }); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_de_DE.json deleted file mode 100644 index 8b062ccc7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "Annotierter Bereich", - "info": "Es gibt einen generischen Typ, der im Quellcode nur in app_bar und nav_bar verwendet wird, um den Zustand und das Styling der Navigationsleiste zu ändern. Der generische Typ ist normalerweise SystemUiOverlayStyle.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion ändert Zustand und Stil", - "desc": [ - "【value】 : Wert 【T】", - "【sized】 : Gibt die Größe an 【bool】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_en_US.json deleted file mode 100644 index f99c679af..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "Annotation Area", - "info": "There is a generic type, which is only used in app_bar and nav_bar in the source code to change the state variables and navigation bar styles. The generic type is usually SystemUiOverlayStyle.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion Changes State Variables and Styles", - "desc": [ - "【value】 : value 【T】", - "【sized】 : whether to provide size 【bool】", - "【child】 : child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_es_ES.json deleted file mode 100644 index 459a57c91..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "Región Anotada", - "info": "Tiene un genérico, en el código fuente solo se usa este componente en app_bar, nav_bar para cambiar el estado y el estilo de la barra de navegación, el genérico suele ser SystemUiOverlayStyle.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion cambia el estilo del estado", - "desc": [ - "【value】 : valor 【T】", - "【sized】 : si proporciona tamaño 【bool】", - "【child】 : componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_fr_FR.json deleted file mode 100644 index 0f73321e9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "Région annotée", - "info": "Il y a un générique, dans le code source, il est uniquement utilisé dans app_bar, nav_bar pour modifier les variables d'état et le style de la barre de navigation, le générique est généralement SystemUiOverlayStyle.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion modifie le style des variables d'état", - "desc": [ - "【value】 : valeur 【T】", - "【sized】 : fournit-il une taille 【bool】", - "【child】 : composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_it_IT.json deleted file mode 100644 index 05a27dc24..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "Area Annotata", - "info": "Ha un generico, nel codice sorgente viene utilizzato solo in app_bar, nav_bar per modificare lo stato e lo stile della barra di navigazione, il generico è solitamente SystemUiOverlayStyle.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion cambia lo stile dello stato", - "desc": [ - "【value】 : valore 【T】", - "【sized】 : se fornisce dimensione 【bool】", - "【child】 : componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ja_JP.json deleted file mode 100644 index 4c1e0e954..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "注釈領域", - "info": "ジェネリックがあり、ソースコードでは app_bar と nav_bar でのみ使用され、状態量やナビゲーションバーのスタイルを変更するために使用されます。ジェネリックは通常 SystemUiOverlayStyle です。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegionが状態量のスタイルを変更", - "desc": [ - "【value】 : 値 【T】", - "【sized】 : サイズを提供するかどうか 【bool】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ko_KR.json deleted file mode 100644 index fc2a0df67..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "주석 영역", - "info": "제네릭이 있으며, 소스 코드에서는 app_bar, nav_bar에서만 이 컴포넌트를 사용하여 상태 변수와 네비게이션 바 스타일을 변경합니다. 제네릭은 일반적으로 SystemUiOverlayStyle입니다.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion 상태 변수 스타일 변경", - "desc": [ - "【value】 : 값 【T】", - "【sized】 : 크기 제공 여부 【bool】", - "【child】 : 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_pt_PT.json deleted file mode 100644 index 91c03b458..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "Região Anotada", - "info": "Tem um genérico, no código-fonte, este componente é usado apenas em app_bar e nav_bar para alterar variáveis de estado e o estilo da barra de navegação, o genérico geralmente é SystemUiOverlayStyle.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion altera o estilo da variável de estado", - "desc": [ - "【value】 : valor 【T】", - "【sized】 : se fornece tamanho 【bool】", - "【child】 : componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ru_RU.json deleted file mode 100644 index 8a65397db..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "Область аннотации", - "info": "Имеет обобщение, в исходном коде используется только в app_bar, nav_bar для изменения состояния и стиля навигационной панели, обобщение обычно SystemUiOverlayStyle.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion изменяет состояние и стиль", - "desc": [ - "【value】 : значение 【T】", - "【sized】 : предоставляет ли размер 【bool】", - "【child】 : дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_zh-CN.json deleted file mode 100644 index f8aee6e73..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "标注区域", - "info": "有一个泛型,源码中仅在 app_bar, nav_bar 中使用该组件改变状态量、导航栏样式,泛型通常为 SystemUiOverlayStyle。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion改变状态量样式", - "desc": [ - "【value】 : 值 【T】", - "【sized】 : 是否提供大小 【bool】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/node1_base.dart deleted file mode 100644 index 1b518dbfd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/node1_base.dart +++ /dev/null @@ -1,76 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - - -class AnnotatedRegionDemo extends StatelessWidget { - const AnnotatedRegionDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.all(10), - child: ElevatedButton( - onPressed: (){ - Navigator.push(context, - MaterialPageRoute(builder: (context) => const AnnotatedRegionTestPage()), - ); - }, - child: const Text("进入 AnnotatedRegion 测试页"), - ), - ); - } -} - - -class AnnotatedRegionTestPage extends StatelessWidget{ - const AnnotatedRegionTestPage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - const SystemUiOverlayStyle overlayStyle = SystemUiOverlayStyle( - systemNavigationBarColor: Colors.green, - // 导航栏颜色 - systemNavigationBarDividerColor: Colors.red, - statusBarColor: Colors.blue, - systemNavigationBarIconBrightness: Brightness.light, - statusBarIconBrightness: Brightness.light, - statusBarBrightness: Brightness.light, - ); - - return AnnotatedRegion( - value: overlayStyle, - child: Scaffold( - body: Column( - children: [ - Container(height: 56+30.0,color: Colors.blue, - alignment: const Alignment(0,0.55), - child: Row( - children: const [ - BackButton(color: Colors.white,), - Text("AnnotatedRegion测试",style: TextStyle(color: Colors.white,fontSize: 18),) - ], - ), - ), - const SizedBox(height: 30,), - const Text( - "上面标题栏背景颜色为蓝色\n" - "上面标题栏图标为亮调", - - style: TextStyle(color: Colors.black,fontSize: 18),), - const Spacer(), - const Text( - "下面导航栏背景颜色为绿色\n" - "下面导航栏图标为亮调", - - style: TextStyle(color: Colors.black,fontSize: 18),), - const SizedBox(height: 30,), - ], - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_de_DE.json deleted file mode 100644 index 5c92c3eb2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "Proportion Box", - "info": "Kann ein Kindelement aufnehmen und durch die Angabe des Seitenverhältnisses aspectRatio den Bereich für das Kindelement begrenzen.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AspectRatio", - "desc": [ - "【child】: Kindelement 【Widget】", - "【aspectRatio】: Seitenverhältnis 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_en_US.json deleted file mode 100644 index b70c7005b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "Aspect Ratio Box", - "info": "Can contain a child component, and limit the area of the child component by specifying the aspectRatio.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AspectRatio", - "desc": [ - "【child】: Child component 【Widget】", - "【aspectRatio】: Aspect ratio 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_es_ES.json deleted file mode 100644 index 9965faeb2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "Caja de proporción", - "info": "Puede contener un componente hijo, limitando el área del componente hijo especificando la relación de aspecto aspectRatio.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AspectRatio", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【aspectRatio】 : Relación de aspecto 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_fr_FR.json deleted file mode 100644 index 77b231b4f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "Boîte de proportion", - "info": "Peut contenir un composant enfant, en spécifiant le rapport largeur/hauteur aspectRatio pour limiter la zone d'accueil du composant enfant.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AspectRatio", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【aspectRatio】 : Rapport largeur/hauteur 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_it_IT.json deleted file mode 100644 index 720e84a80..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "Scatola delle proporzioni", - "info": "Può contenere un componente figlio, limitando l'area del componente figlio specificando il rapporto larghezza-altezza aspectRatio.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AspectRatio", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【aspectRatio】 : Rapporto larghezza-altezza 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ja_JP.json deleted file mode 100644 index 489aa460b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "アスペクト比ボックス", - "info": "一つの子コンポーネントを収容し、aspectRatioを指定して子コンポーネントの収容領域を制限します。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AspectRatioの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【aspectRatio】 : アスペクト比 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ko_KR.json deleted file mode 100644 index edbafc88c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "비율 상자", - "info": "하위 컴포넌트를 포함할 수 있으며, aspectRatio를 지정하여 하위 컴포넌트의 영역을 제한합니다.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AspectRatio 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【aspectRatio】 : 너비 높이 비율 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_pt_PT.json deleted file mode 100644 index 510b16765..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "Caixa de Proporção", - "info": "Pode conter um componente filho, limitando a área do componente filho ao especificar a proporção de aspecto aspectRatio.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AspectRatio", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【aspectRatio】 : Proporção de largura e altura 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ru_RU.json deleted file mode 100644 index 17a1611ff..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "Пропорциональная коробка", - "info": "Может содержать один дочерний компонент, ограничивая область размещения дочернего компонента, задавая соотношение сторон aspectRatio.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AspectRatio", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【aspectRatio】 : Соотношение сторон 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_zh-CN.json deleted file mode 100644 index 89fffc05f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "比例盒", - "info": "可容纳一个子组件,通过指定宽高比aspectRatio,来限定子组件容身区域。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AspectRatio基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【aspectRatio】 : 宽高比例 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/node1_base.dart deleted file mode 100644 index eb74f52e6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/node1_base.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomAspectRatio extends StatefulWidget { - const CustomAspectRatio({Key? key}) : super(key: key); - - @override - _CustomAspectRatioState createState() => _CustomAspectRatioState(); -} - -class _CustomAspectRatioState extends State { - double _ratio = 0.75; - - @override - Widget build(BuildContext context) { - Widget child = Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 50, - height: 50, - child: const Text("Static"), - ); - - Widget box = AspectRatio( - aspectRatio: _ratio, - child: Container( - color: Colors.orange, - child: const Icon( - Icons.android, - color: Colors.white, - )), - ); - - return Column( - children: [ - _buildSlider(), - Container( - color: Colors.grey.withAlpha(22), - width: 300, - height: 100, - child: Row( - children: [child, box, child], - ), - ), - ], - ); - } - - Widget _buildSlider() => Slider( - divisions: 20, - min: 0.1, - max: 2.0, - label: _ratio.toStringAsFixed(2), - value: _ratio, - onChanged: (v) => setState(() => _ratio = v), - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_de_DE.json deleted file mode 100644 index c9c76df77..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "Hintergrundfilter", - "info": "Kann ein Kind aufnehmen und den Hintergrund mit einem Unschärfefilter versehen. Durch Stack kann der Hintergrund unscharf gemacht werden, um den Unschärfeeffekt der Komponente zu erreichen.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von BackdropFilter", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【filter】 : Filter 【ImageFilter】", - "ImageFilter.blur kann eine Gaußsche Unschärfe erzeugen, indem die x- und y-Unschärfefaktoren angegeben werden." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_en_US.json deleted file mode 100644 index 1f60983e3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "Background Filter", - "info": "Can hold a child and apply a blur filter to the background. The background blur effect of the component can be achieved through Stack.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of BackdropFilter", - "desc": [ - "【child】: Child component 【Widget】", - "【filter】: Filter 【ImageFilter】", - "ImageFilter.blur can achieve Gaussian blur by specifying the x and y blur factors." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_es_ES.json deleted file mode 100644 index 742f80d5d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "Filtro de fondo", - "info": "Puede contener un hijo y aplicar un filtro de desenfoque al fondo. El efecto de desenfoque en los componentes se puede lograr utilizando Stack para desenfocar el fondo.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de BackdropFilter", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【filter】 : Filtro 【ImageFilter】", - "ImageFilter.blur puede implementar un desenfoque gaussiano, especificando los factores de desenfoque x e y." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_fr_FR.json deleted file mode 100644 index bf45ee80a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "Filtre d'arrière-plan", - "info": "Peut contenir un enfant et appliquer un filtre de flou à l'arrière-plan. Le flou de l'arrière-plan peut être réalisé via Stack pour obtenir l'effet de flou du composant.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de BackdropFilter", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【filter】 : Filtre 【ImageFilter】", - "ImageFilter.blur peut réaliser un flou gaussien en spécifiant les facteurs de flou x et y." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_it_IT.json deleted file mode 100644 index 6ec0f087e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "Filtro Sfondo", - "info": "Può contenere un figlio e applica un filtro di sfocatura allo sfondo. È possibile ottenere l'effetto di sfocatura del componente utilizzando Stack per sfocare lo sfondo.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di BackdropFilter", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【filter】 : Filtro 【ImageFilter】", - "ImageFilter.blur può realizzare una sfocatura gaussiana, specificando i fattori di sfocatura x e y." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ja_JP.json deleted file mode 100644 index 6e54a9aeb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "背景フィルター", - "info": "子を1つ収容し、背景にぼかしフィルターを適用します。Stackを使用して背景をぼかすことで、コンポーネントのぼかし効果を実現できます。", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackdropFilterの基本的な使用法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【filter】 : フィルター 【ImageFilter】", - "ImageFilter.blurはガウスぼかしを実現し、x、yのぼかし係数を指定できます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ko_KR.json deleted file mode 100644 index 30eb76554..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "배경 필터", - "info": "하나의 자식을 포함할 수 있고, 배경에 흐림 필터를 적용합니다. Stack을 통해 배경 흐림 효과를 구현할 수 있습니다.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackdropFilter 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【filter】 : 필터 【ImageFilter】", - "ImageFilter.blur를 통해 가우시안 흐림 효과를 구현할 수 있으며, x, y 흐림 인자를 지정할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_pt_PT.json deleted file mode 100644 index 6599ff51e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "Filtro de Fundo", - "info": "Pode conter uma criança e aplicar um filtro de desfoque ao fundo. O efeito de desfoque do componente pode ser alcançado através do Stack.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do BackdropFilter", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【filter】 : Filtro 【ImageFilter】", - "ImageFilter.blur pode realizar um desfoque gaussiano, especificando os fatores de desfoque x e y." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ru_RU.json deleted file mode 100644 index e08403236..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "Фоновый фильтр", - "info": "Может содержать один дочерний элемент и применять размытие к фону. Эффект размытия компонента можно реализовать с помощью Stack.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование BackdropFilter", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【filter】 : Фильтр 【ImageFilter】", - "ImageFilter.blur может реализовать гауссово размытие, задавая коэффициенты размытия по x и y." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_zh-CN.json deleted file mode 100644 index c3403a1d0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "背景滤镜", - "info": "可容纳一个孩子,并将背景进行模糊滤镜。可以通过Stack将背景模糊实现组件的模糊效果。", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackdropFilter基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【filter】 : 过滤器 【ImageFilter】", - "ImageFilter.blur可以实现高斯模糊,指定x,y模糊因子。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/node1_base.dart deleted file mode 100644 index 3cddf48a2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/node1_base.dart +++ /dev/null @@ -1,94 +0,0 @@ -import 'dart:ui'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - - -class CustomBackdropFilter extends StatefulWidget { - const CustomBackdropFilter({Key? key}) : super(key: key); - - @override - _CustomBackdropFilterState createState() => _CustomBackdropFilterState(); -} - -class _CustomBackdropFilterState extends State { - double _sigmaX = 1.2; - double _sigmaY = 1.2; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Stack( - children: [ - _buildImage(), - Positioned.fill( - child: ClipRect( - child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: _sigmaX, sigmaY: _sigmaY), - child: Container( - color: Colors.black.withAlpha(0), - ), - ), - ), - ) - ], - ), - _buildSliders() - ], - ); - } - - Widget _buildImage() { - return Wrap( - spacing: 20, - children: [ - SizedBox( - height: 150, - width: 150, - child: Image.asset( - 'assets/images/sabar.webp', - fit: BoxFit.cover, - ), - ), - SizedBox( - height: 150, - width: 150, - child: Image.asset( - 'assets/images/wy_200x300.webp', - fit: BoxFit.cover, - ), - ), - ], - ); - } - - Widget _buildSliders() => Column( - children: [ - Slider( - min: 0, - max: 4, - value: _sigmaX, - divisions: 360, - label: 'x:' + _sigmaX.toStringAsFixed(1), - onChanged: (v) { - setState(() { - _sigmaX = v; - }); - }), - Slider( - min: 0, - max: 4, - value: _sigmaY, - divisions: 360, - label: 'beta:' + _sigmaY.toStringAsFixed(1), - onChanged: (v) { - setState(() { - _sigmaY = v; - }); - }) - ], - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_de_DE.json deleted file mode 100644 index 974fe1939..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "Baseline-Komponente", - "info": "Kann ein Unterelement aufnehmen und die Position des Unterelements durch die Kontrolle der Baseline-Höhe steuern. Wird normalerweise für Textkomponenten verwendet.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Baseline", - "desc": [ - "【child】 : Unterelement 【Widget】", - "【baseline】 : Baseline-Position 【double】", - "【baselineType】 : Baseline-Typ 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_en_US.json deleted file mode 100644 index f347bd8fe..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "Baseline Component", - "info": "Can contain a child component, and control the position of the child component by adjusting the baseline height. Generally used for text components.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Baseline", - "desc": [ - "【child】 : Child component 【Widget】", - "【baseline】 : Baseline position 【double】", - "【baselineType】 : Baseline type 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_es_ES.json deleted file mode 100644 index 9bf361d6c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "Componente de línea base", - "info": "Puede contener un componente hijo, controlando la posición del componente hijo mediante la altura de la línea base. Generalmente se utiliza para componentes de texto.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Baseline", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【baseline】 : Posición de la línea base 【double】", - "【baselineType】 : Tipo de línea base 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_fr_FR.json deleted file mode 100644 index d6b66c032..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "Composant de base", - "info": "Peut contenir un composant enfant, en contrôlant la hauteur de la ligne de base pour positionner le composant enfant. Généralement utilisé pour les composants de texte.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Baseline", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【baseline】 : Position de la ligne de base 【double】", - "【baselineType】 : Type de ligne de base 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_it_IT.json deleted file mode 100644 index 10f820e40..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "Componente di base", - "info": "Può contenere un componente figlio, controllando la posizione del componente figlio attraverso il controllo dell'altezza della linea di base. Generalmente utilizzato per i componenti di testo.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Baseline", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【baseline】 : Posizione della linea di base 【double】", - "【baselineType】 : Tipo di linea di base 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ja_JP.json deleted file mode 100644 index 9f1296d86..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "ベースラインコンポーネント", - "info": "1つの子コンポーネントを収容し、ベースラインの高さを制御して子コンポーネントの位置を制御します。一般的にテキストコンポーネントに使用されます。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Baselineの基本的な使用法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【baseline】 : ベースライン位置 【double】", - "【baselineType】 : ベースラインタイプ 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ko_KR.json deleted file mode 100644 index e55ad0e50..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "기준선 컴포넌트", - "info": "하나의 자식 컴포넌트를 수용할 수 있으며, 기준선 높이를 조절하여 자식 컴포넌트의 위치를 제어합니다. 일반적으로 텍스트 컴포넌트에 사용됩니다.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Baseline 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【baseline】 : 기준선 위치 【double】", - "【baselineType】 : 기준선 유형 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_pt_PT.json deleted file mode 100644 index b89e2c886..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "Componente de Linha de Base", - "info": "Pode acomodar um componente filho, controlando a posição do componente filho através da altura da linha de base. Geralmente usado para componentes de texto.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Baseline", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【baseline】 : Posição da linha de base 【double】", - "【baselineType】 : Tipo de linha de base 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ru_RU.json deleted file mode 100644 index a1b8ed3fd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "Базовый компонент", - "info": "Может содержать один дочерний компонент, контролируя положение дочернего компонента через управление высотой базовой линии. Обычно используется для текстовых компонентов.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Baseline", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【baseline】 : Позиция базовой линии 【double】", - "【baselineType】 : Тип базовой линии 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_zh-CN.json deleted file mode 100644 index 387bf89f7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "基线组件", - "info": "可容纳一个子组件,通过控制基线高度来控制子组件的位置。一般用于文字组件。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Baseline基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【baseline】 : 基线位置 【double】", - "【baselineType】 : 基线类型 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/node1_base.dart deleted file mode 100644 index f418a548a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/node1_base.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomBaseline extends StatefulWidget { - const CustomBaseline({Key? key}) : super(key: key); - - @override - _CustomBaselineState createState() => _CustomBaselineState(); -} - -class _CustomBaselineState extends State { - double _baseline=20; - - @override - Widget build(BuildContext context) { - Widget childBox = const Text( - '你好,Flutter', - style: TextStyle(fontSize: 20, fontFamily: "Menlo"), - ); - - - Widget baseline = Baseline( - child: childBox, - baseline: _baseline, - baselineType: TextBaseline.alphabetic); - - return Column( - children: [ - _buildSlider(), - Container( - width: 100/0.618, - height: 100, - color: Colors.grey.withAlpha(22), - child: baseline, - ), - ], - ); - } - - Widget _buildSlider() => Slider( - divisions: 20, - min: 0, - max: 60, - label: _baseline.toString(), - value: _baseline, - onChanged: (v) => setState(() => _baseline = v), - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_de_DE.json deleted file mode 100644 index b87f85898..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "Tastenkombinationen-Rückruf", - "info": "Kombinationen können als Tastenkombinationen festgelegt werden, die nach dem Erhalt des Fokus auf Tastenkombinationsereignisse reagieren.", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Verwendung von Tastenkombinationen", - "desc": [ - "Nach der Aktivierung des Fokus im Beispiel können die Kombinationen Strg+↑ und Strg+↓ die Zahl erhöhen oder verringern", - "【enabled】 : Ob verfügbar 【bool】", - "【onTapOutside】 : Außenklick-Listener 【TapRegionCallback?】", - "【onTapInside】 : Innenklick-Listener 【TapRegionCallback?】", - "【groupId】 : Kennung der Klickbereichsgruppe 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_en_US.json deleted file mode 100644 index 4b0b9a70a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "Shortcut Callback", - "info": "You can set combinations as shortcuts, and after gaining focus, respond to shortcut events.", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Shortcut Usage", - "desc": [ - "After activating focus in the example, the Ctrl+↑ and Ctrl+↓ key combinations can increase or decrease the number", - "【enabled】: Whether it is available 【bool】", - "【onTapOutside】: Click outside listener 【TapRegionCallback?】", - "【onTapInside】: Click inside listener 【TapRegionCallback?】", - "【groupId】: Click area group identifier 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_es_ES.json deleted file mode 100644 index 1d33d3037..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "Accesos directos de devolución de llamada", - "info": "Se pueden configurar combinaciones como accesos directos, que responderán a eventos de teclas rápidas después de obtener el foco.", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso de accesos directos", - "desc": [ - "En el caso, después de activar el foco, las combinaciones de teclas Ctrl+↑ y Ctrl+↓ pueden aumentar o disminuir el número", - "【enabled】: Si está disponible 【bool】", - "【onTapOutside】: Escucha de clic fuera 【TapRegionCallback?】", - "【onTapInside】: Escucha de clic dentro 【TapRegionCallback?】", - "【groupId】: Identificador del grupo de área de clic 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_fr_FR.json deleted file mode 100644 index b248d152d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "Raccourcis de rappel", - "info": "Vous pouvez définir des combinaisons comme raccourcis clavier, qui répondront aux événements de raccourci après avoir obtenu le focus.", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation des raccourcis", - "desc": [ - "Dans l'exemple, après activation du focus, les combinaisons Ctrl+↑ et Ctrl+↓ peuvent augmenter ou diminuer le nombre", - "【enabled】 : Disponible 【bool】", - "【onTapOutside】 : Écouteur de clic extérieur 【TapRegionCallback?】", - "【onTapInside】 : Écouteur de clic intérieur 【TapRegionCallback?】", - "【groupId】 : Identifiant du groupe de zone de clic 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_it_IT.json deleted file mode 100644 index 18986c20e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "Scorciatoie di callback", - "info": "È possibile impostare combinazioni come scorciatoie da tastiera, che rispondono agli eventi delle scorciatoie dopo aver ottenuto il focus.", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso delle scorciatoie", - "desc": [ - "Nel caso attivato, le combinazioni Ctrl+↑ e Ctrl+↓ possono aumentare o diminuire il numero", - "【enabled】 : Disponibile 【bool】", - "【onTapOutside】 : Ascolto del clic esterno 【TapRegionCallback?】", - "【onTapInside】 : Ascolto del clic interno 【TapRegionCallback?】", - "【groupId】 : Identificatore del gruppo di area di clic 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ja_JP.json deleted file mode 100644 index 7af909d02..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "ショートカットコールバック", - "info": "組み合わせをショートカットとして設定し、フォーカスを取得した後にショートカットイベントに応答できます。", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "ショートカットの使用", - "desc": [ - "ケースでフォーカスをアクティブにした後、Ctrl+↑ と Ctrl+↓ の組み合わせキーで数字を増減できます", - "【enabled】 : 使用可能かどうか 【bool】", - "【onTapOutside】 : 外部クリックリスナー 【TapRegionCallback?】", - "【onTapInside】 : 内部クリックリスナー 【TapRegionCallback?】", - "【groupId】 : クリック領域グループ識別子 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ko_KR.json deleted file mode 100644 index 1eb94cfcc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "단축키 콜백", - "info": "조합을 단축키로 설정할 수 있으며, 포커스를 얻은 후 단축키 이벤트에 응답합니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "단축키 사용", - "desc": [ - "예제에서 포커스를 활성화한 후, Ctrl+↑ 및 Ctrl+↓ 조합키로 숫자를 증가 또는 감소시킬 수 있습니다.", - "【enabled】 : 사용 가능 여부 【bool】", - "【onTapOutside】 : 외부 클릭 리스너 【TapRegionCallback?】", - "【onTapInside】 : 내부 클릭 리스너 【TapRegionCallback?】", - "【groupId】 : 클릭 영역 그룹 식별자 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_pt_PT.json deleted file mode 100644 index b9117fb84..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "Atalhos de Teclado", - "info": "Pode definir combinações como atalhos de teclado, que respondem a eventos de atalhos após obter o foco.", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso de Atalhos", - "desc": [ - "No exemplo, após ativar o foco, as combinações de teclas Ctrl+↑ e Ctrl+↓ podem aumentar ou diminuir o número", - "【enabled】 : Disponível 【bool】", - "【onTapOutside】 : Ouvinte de clique externo 【TapRegionCallback?】", - "【onTapInside】 : Ouvinte de clique interno 【TapRegionCallback?】", - "【groupId】 : Identificador do grupo de área de clique 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ru_RU.json deleted file mode 100644 index 124c280f8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "Горячие клавиши обратного вызова", - "info": "Можно настроить комбинации как горячие клавиши, которые будут реагировать на события горячих клавиш после получения фокуса.", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Использование горячих клавиш", - "desc": [ - "В примере после активации фокуса комбинации клавиш Ctrl+↑ и Ctrl+↓ могут увеличивать или уменьшать число", - "【enabled】 : Доступно ли 【bool】", - "【onTapOutside】 : Прослушивание клика снаружи 【TapRegionCallback?】", - "【onTapInside】 : Прослушивание клика внутри 【TapRegionCallback?】", - "【groupId】 : Идентификатор группы области клика 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_zh-CN.json deleted file mode 100644 index 260ccc34f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "快捷键回调", - "info": "可以设置组合作为快捷键,在获取焦点后, 响应快捷键事件。", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "快捷键使用", - "desc": [ - "案例中激活焦点后,Ctrl+↑ 和 Ctrl+↓ 组合键可以增加或减少数字", - "【enabled】 : 是否可用 【bool】", - "【onTapOutside】 : 点击外界监听 【TapRegionCallback?】", - "【onTapInside】 : 点击内部监听 【TapRegionCallback?】", - "【groupId】 : 点击区域组标识 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/node1.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/node1.dart deleted file mode 100644 index 046532edd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/node1.dart +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -class CallbackShortcutsDemo1 extends StatefulWidget { - const CallbackShortcutsDemo1({super.key}); - - @override - State createState() => _CallbackShortcutsDemo1State(); -} - -class _CallbackShortcutsDemo1State extends State { - FocusNode focusNode = FocusNode(); - - @override - void initState() { - focusNode.addListener(_onFocusChange); - _initActionBindings(); - super.initState(); - } - - @override - void dispose() { - focusNode.removeListener(_onFocusChange); - focusNode.dispose(); - - super.dispose(); - } - - void _onFocusChange() { - setState(() {}); - } - - int count = 0; - - @override - Widget build(BuildContext context) { - return Center( - child: TapRegion( - onTapInside: (_) => focusNode.requestFocus(), - onTapOutside: (_) => focusNode.unfocus(), - child: CallbackShortcuts( - bindings: _actionBindings, - child: Focus(autofocus: true, focusNode: focusNode, child: _display()), - ), - ), - ); - } - - Map _actionBindings = {}; - - void _initActionBindings() { - _actionBindings = { - LogicalKeySet(LogicalKeyboardKey.control, LogicalKeyboardKey.arrowUp): increase, - LogicalKeySet(LogicalKeyboardKey.control, LogicalKeyboardKey.arrowDown): decrease, - const SingleActivator(LogicalKeyboardKey.keyR, control: true): reset, - }; - } - - void increase() { - setState(() => count = count + 1); - } - - void decrease() { - setState(() => count = count - 1); - } - - void reset() { - setState(() => count = 0); - } - - Widget _display() { - Color color = focusNode.hasFocus ? Colors.blue : Colors.grey; - return Container( - decoration: BoxDecoration(border: Border.all(color: color)), - width: 460, - padding: const EdgeInsets.symmetric(horizontal: 12), - alignment: Alignment.center, - height: 60, - child: focusNode.hasFocus - ? _CounterDisplay(counter: count) - : Text( - focusNode.hasFocus ? '键盘输入点东西吧' : '点击我获取焦点', - style: TextStyle(color: color), - ), - ); - } -} - -class _CounterDisplay extends StatelessWidget { - final int counter; - - const _CounterDisplay({ - super.key, - required this.counter, - }); - - @override - Widget build(BuildContext context) { - TextStyle style = TextStyle(fontSize: 12, color: Colors.grey); - - return Wrap( - direction: Axis.vertical, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Text( - 'count: $counter', - style: TextStyle( - fontSize: 24, - fontWeight: FontWeight.bold, - color: Theme.of(context).primaryColor), - ), - Wrap( - spacing: 6, - children: [ - Text('【Ctrl+↑】:数字+1', style: style), - Text('【Ctrl+↓】:数字-1', style: style), - Text('【Ctrl+R】:归 0', style: style), - ], - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_de_DE.json deleted file mode 100644 index 9380e9a2f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "Zentrierungskomponente", - "info": "Kann ein Unterelement aufnehmen und es im übergeordneten Element zentrieren. Es ist eine vereinfachte Version der Align-Komponente.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Center", - "desc": [ - "【child】 : Unterelement 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_en_US.json deleted file mode 100644 index c69385b1d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "Center Component", - "info": "Can contain a child component and center it within the parent component, serving as a simplified mode of the Align component.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Center", - "desc": [ - "【child】: Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_es_ES.json deleted file mode 100644 index 88bed5545..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "Componente Centrado", - "info": "Puede contener un componente hijo y centrarlo en el componente padre, es un modo simplificado del componente Align.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Center", - "desc": [ - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_fr_FR.json deleted file mode 100644 index 89548fc7a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "Composant centré", - "info": "Peut contenir un composant enfant et le centrer dans le composant parent, c'est une version simplifiée du composant Align.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Center", - "desc": [ - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_it_IT.json deleted file mode 100644 index c09ac1916..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "Componente Centrato", - "info": "Può contenere un componente figlio e centrarlo rispetto al componente genitore, è una versione semplificata del componente Align.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di Center", - "desc": [ - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ja_JP.json deleted file mode 100644 index aa9c2c654..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "中央コンポーネント", - "info": "一つの子コンポーネントを収容し、それを親コンポーネントの中央に配置します。Alignコンポーネントの簡易版です。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Centerの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ko_KR.json deleted file mode 100644 index 0f48acb34..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "중앙 컴포넌트", - "info": "하나의 자식 컴포넌트를 수용하고 부모 컴포넌트의 중앙에 위치시킬 수 있습니다. Align 컴포넌트의 간소화된 모드입니다.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Center 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_pt_PT.json deleted file mode 100644 index 7c4a44ba9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "Componente Centralizado", - "info": "Pode conter um componente filho e centralizá-lo no componente pai, sendo uma versão simplificada do componente Align.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Center", - "desc": [ - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ru_RU.json deleted file mode 100644 index c9df7850c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "Центрирующий компонент", - "info": "Может содержать один дочерний компонент и центрировать его внутри родительского компонента. Это упрощенная версия компонента Align.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Center", - "desc": [ - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_zh-CN.json deleted file mode 100644 index b3e2a5488..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "居中组件", - "info": "可容纳一个子组件,并使其居中于父组件,是Align组件的一种精简模式。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Center基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/node1_base.dart deleted file mode 100644 index 7a753a4bb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/node1_base.dart +++ /dev/null @@ -1,23 +0,0 @@ - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomCenter extends StatelessWidget { - const CustomCenter({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(5), - width: 200, - height: 100, - color: Colors.grey.withAlpha(88), - child: Center( - child: Container( - width: 80, - height: 60, - color: Colors.cyanAccent, - ))); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_de_DE.json deleted file mode 100644 index 904c5f807..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "Ovale Zuschneidung", - "info": "Kann ein Unterelement aufnehmen und es entlang der Haupt- und Nebenachse der Breite und Höhe elliptisch zuschneiden.", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ClipOval", - "desc": [ - "【child】 : Unterelement 【Widget】", - "【clipBehavior】 : Zuschneideverhalten 【Clip】", - "【clipper】 : Zuschneider 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_en_US.json deleted file mode 100644 index dc93ef5e9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "Oval Clipping", - "info": "Can contain a child component and clip it into an ellipse with the width and height as the major and minor axes.", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ClipOval", - "desc": [ - "【child】: Child component 【Widget】", - "【clipBehavior】: Clipping behavior 【Clip】", - "【clipper】: Clipper 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_es_ES.json deleted file mode 100644 index 4904d9453..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "Recorte Ovalado", - "info": "Puede contener un componente hijo y lo recorta en forma de elipse utilizando el ancho y la altura como ejes mayor y menor.", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ClipOval", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【clipper】 : Recortador 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_fr_FR.json deleted file mode 100644 index 6d4bf5a91..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "Découpe ovale", - "info": "Peut contenir un composant enfant et le découper en forme ovale avec la largeur et la hauteur comme axes majeur et mineur.", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ClipOval", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【clipBehavior】 : Comportement de découpe 【Clip】", - "【clipper】 : Découpeur 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_it_IT.json deleted file mode 100644 index 22398369f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "Ritaglio ovale", - "info": "Può contenere un componente figlio e lo ritaglia in un'ellisse con larghezza e altezza come assi maggiore e minore.", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ClipOval", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【clipper】 : Ritagliatore 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ja_JP.json deleted file mode 100644 index bf02d466a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "楕円クリップ", - "info": "1つの子コンポーネントを収容し、幅と高さを長軸と短軸として楕円形にクリップします。", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipOvalの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【clipper】 : クリッパー 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ko_KR.json deleted file mode 100644 index 5d5c72fea..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "타원 자르기", - "info": "하위 컴포넌트를 포함할 수 있으며, 너비와 높이를 장축과 단축으로 하여 타원형으로 자릅니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipOval 기본 사용법", - "desc": [ - "【child】 : 하위 컴포넌트 【Widget】", - "【clipBehavior】 : 자르기 동작 【Clip】", - "【clipper】 : 자르기 도구 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_pt_PT.json deleted file mode 100644 index b0cee8870..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "Recorte Oval", - "info": "Pode conter um componente filho e cortá-lo em forma de elipse com os eixos maior e menor como largura e altura.", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ClipOval", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【clipBehavior】 : Comportamento de corte 【Clip】", - "【clipper】 : Cortador 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ru_RU.json deleted file mode 100644 index 237cf0e85..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "Эллиптическое обрезание", - "info": "Может содержать один дочерний компонент и обрезать его по эллипсу с большой и малой осями, равными ширине и высоте.", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ClipOval", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【clipBehavior】 : Поведение обрезания 【Clip】", - "【clipper】 : Обрезатель 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_zh-CN.json deleted file mode 100644 index ff1be8e3d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "椭圆裁剪", - "info": "可容纳一个子组件,并将其以宽高为长轴和短轴进行椭圆裁切。", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipOval基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【clipper】 : 裁剪器 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/node1_base.dart deleted file mode 100644 index 710281252..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/node1_base.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomClipOval extends StatelessWidget { - const CustomClipOval({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [ - ClipOval( - child: Image.asset( - "assets/images/wy_300x200.webp", - width: 150, - height: 100, - ), - ), - ClipOval( - child: Image.asset( - "assets/images/wy_300x200.webp", - width: 100, - height: 100, - fit: BoxFit.cover, - ), - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_de_DE.json deleted file mode 100644 index 7f30af8bd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "Pfadausschnitt", - "info": "Kann ein Kindelement aufnehmen und es entlang eines angegebenen Pfads zuschneiden. Ermöglicht die Anpassung der Pfadform und ist ein sehr flexibles Zuschneidelement.", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ClipPath", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【clipBehavior】 : Zuschneideverhalten 【Clip】", - "【clipper】 : Zuschneider 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_en_US.json deleted file mode 100644 index 658b062d7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "Path Clipping", - "info": "Can contain a child component and clip it according to the specified path. The path shape can be customized, making it a very flexible clipping component.", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ClipPath", - "desc": [ - "【child】 : Child component 【Widget】", - "【clipBehavior】 : Clipping behavior 【Clip】", - "【clipper】 : Clipper 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_es_ES.json deleted file mode 100644 index 81ad23f04..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "Recorte de ruta", - "info": "Puede contener un componente hijo y recortarlo según la ruta especificada. Se puede personalizar la forma de la ruta, es un componente de recorte muy flexible.", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ClipPath", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【clipper】 : Recortador 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_fr_FR.json deleted file mode 100644 index 2e55bb95f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "Découpage de chemin", - "info": "Peut contenir un composant enfant et le découper selon un chemin spécifié. Permet de personnaliser la forme du chemin, c'est un composant de découpage très flexible.", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ClipPath", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【clipBehavior】 : Comportement de découpage 【Clip】", - "【clipper】 : Découpeur 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_it_IT.json deleted file mode 100644 index bd535f5b1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "Ritaglio percorso", - "info": "Può contenere un componente figlio e ritagliarlo secondo un percorso specificato. È possibile personalizzare la forma del percorso, rendendolo un componente di ritaglio molto flessibile.", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di ClipPath", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【clipper】 : Ritagliatore 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ja_JP.json deleted file mode 100644 index ed0eeff19..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "パスクリップ", - "info": "子コンポーネントを1つ収容し、指定されたパスに従ってクリップします。パスの形状をカスタマイズでき、非常に柔軟なクリップコンポーネントです。", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipPathの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【clipper】 : クリッパー 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ko_KR.json deleted file mode 100644 index a5a7fadad..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "경로 클리핑", - "info": "하위 컴포넌트를 수용하고 지정된 경로에 따라 클리핑할 수 있습니다. 경로 모양을 사용자 정의할 수 있어 매우 유연한 클리핑 컴포넌트입니다.", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipPath 기본 사용", - "desc": [ - "【child】 : 하위 컴포넌트 【Widget】", - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【clipper】 : 클리퍼 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_pt_PT.json deleted file mode 100644 index 68b9446ab..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "Recorte de Caminho", - "info": "Pode conter um componente filho e recortá-lo de acordo com o caminho especificado. Permite personalizar a forma do caminho, sendo um componente de recorte muito flexível.", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ClipPath", - "desc": [ - "【child】 : Componente Filho 【Widget】", - "【clipBehavior】 : Comportamento de Recorte 【Clip】", - "【clipper】 : Recortador 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ru_RU.json deleted file mode 100644 index 709142123..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "Обрезка по пути", - "info": "Может содержать один дочерний компонент и обрезать его по указанному пути. Можно настроить форму пути, это очень гибкий компонент для обрезки.", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ClipPath", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【clipBehavior】 : Поведение обрезки 【Clip】", - "【clipper】 : Обрезчик 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_zh-CN.json deleted file mode 100644 index c913d4384..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "路径裁剪", - "info": "可容纳一个子组件,并将其按指定路径进行裁剪。可以自定义路径形状,是一个很灵活的裁剪组件。", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipPath基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【clipper】 : 裁剪器 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/node1_base.dart deleted file mode 100644 index f2c5e67f5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomClipPath extends StatelessWidget { - const CustomClipPath({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ClipPath( - clipper: ShapeBorderClipper(shape: _StarShapeBorder()), - child: Image.asset( - "assets/images/wy_300x200.webp", - width: 150, - height: 100, - fit: BoxFit.cover, - ), - ); - } -} - -class _StarShapeBorder extends ShapeBorder { - final Path _path = Path(); - - @override - EdgeInsetsGeometry get dimensions => EdgeInsets.zero; - - @override - Path getInnerPath(Rect rect, {TextDirection? textDirection}) { - return Path(); - } - - @override - Path getOuterPath(Rect rect, {TextDirection? textDirection}) => - nStarPath(20, rect.height / 2, rect.height / 2 * 0.85, - dx: rect.width / 2, dy: rect.height / 2); - - @override - void paint(Canvas canvas, Rect rect, {TextDirection? textDirection}) {} - - Path nStarPath(int num, double R, double r, {dx = 0, dy = 0}) { - double perRad = 2 * pi / num; - double radA = perRad / 2 / 2; - double radB = 2 * pi / (num - 1) / 2 - radA / 2 + radA; - _path.moveTo(cos(radA) * R + dx, -sin(radA) * R + dy); - for (int i = 0; i < num; i++) { - _path.lineTo( - cos(radA + perRad * i) * R + dx, -sin(radA + perRad * i) * R + dy); - _path.lineTo( - cos(radB + perRad * i) * r + dx, -sin(radB + perRad * i) * r + dy); - } - _path.close(); - return _path; - } - - @override - ShapeBorder scale(double t) { - return this; - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_de_DE.json deleted file mode 100644 index abddb8ae7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "Abgerundetes Rechteck zuschneiden", - "info": "Kann ein Kindelement aufnehmen und es mit abgerundeten Ecken zuschneiden. Geben Sie borderRadius als Eckradius an.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ClipRRect", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【borderRadius】 : Randradius 【BorderRadius】", - "【clipBehavior】 : Zuschneideverhalten 【Clip】", - "【clipper】 : Zuschneider 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_en_US.json deleted file mode 100644 index 46e2e47af..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "Rounded Rectangle Clipping", - "info": "Can contain a child component and perform rounded rectangle clipping on it. Specify borderRadius as the corner radius.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ClipRRect", - "desc": [ - "【child】: Child component 【Widget】", - "【borderRadius】: Border radius 【BorderRadius】", - "【clipBehavior】: Clipping behavior 【Clip】", - "【clipper】: Clipper 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_es_ES.json deleted file mode 100644 index 81bb5ffbb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "Recorte rectangular con esquinas redondeadas", - "info": "Puede contener un componente hijo y realizar un recorte rectangular con esquinas redondeadas. Especifica borderRadius como el radio de las esquinas.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ClipRRect", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【borderRadius】 : Radio del borde 【BorderRadius】", - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【clipper】 : Recortador 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_fr_FR.json deleted file mode 100644 index e7fcbc89b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "Rognage rectangulaire arrondi", - "info": "Peut contenir un composant enfant et le rogner en forme de rectangle arrondi. Spécifiez borderRadius comme rayon des coins.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ClipRRect", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【borderRadius】 : Rayon des bords 【BorderRadius】", - "【clipBehavior】 : Comportement de rognage 【Clip】", - "【clipper】 : Rogneur 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_it_IT.json deleted file mode 100644 index 032a195bb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "Ritaglio rettangolo arrotondato", - "info": "Può contenere un componente figlio e ritagliarlo in un rettangolo con angoli arrotondati. Specifica borderRadius come raggio degli angoli.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ClipRRect", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【borderRadius】 : Raggio del bordo 【BorderRadius】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【clipper】 : Ritagliatore 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ja_JP.json deleted file mode 100644 index 6b4c29dc1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "角丸矩形クリップ", - "info": "子コンポーネントを収容し、角丸矩形でクリップできます。borderRadiusを角の半径として指定します。", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipRRectの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【borderRadius】 : 角の半径 【BorderRadius】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【clipper】 : クリッパー 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ko_KR.json deleted file mode 100644 index a1786f7ad..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "둥근 사각형 클리핑", - "info": "하위 위젯을 포함하고 둥근 사각형으로 클리핑할 수 있습니다. borderRadius를 모서리 반지름으로 지정합니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipRRect 기본 사용법", - "desc": [ - "【child】 : 하위 위젯 【Widget】", - "【borderRadius】 : 모서리 반지름 【BorderRadius】", - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【clipper】 : 클리퍼 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_pt_PT.json deleted file mode 100644 index 2cd1570a1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "Recorte de Retângulo com Cantos Arredondados", - "info": "Pode conter um componente filho e aplica um recorte de retângulo com cantos arredondados. Especifique o borderRadius como o raio dos cantos.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ClipRRect", - "desc": [ - "【child】 : Componente Filho 【Widget】", - "【borderRadius】 : Raio da Borda 【BorderRadius】", - "【clipBehavior】 : Comportamento de Recorte 【Clip】", - "【clipper】 : Recortador 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ru_RU.json deleted file mode 100644 index 43ae1b60b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "Обрезка прямоугольника с закругленными углами", - "info": "Может содержать один дочерний компонент и обрезать его в форме прямоугольника с закругленными углами. Укажите borderRadius как радиус углов.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ClipRRect", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【borderRadius】 : Радиус границы 【BorderRadius】", - "【clipBehavior】 : Поведение обрезки 【Clip】", - "【clipper】 : Обрезчик 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_zh-CN.json deleted file mode 100644 index 79edf1a12..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "圆角矩形裁剪", - "info": "可容纳一个子组件,并将其进行圆角矩形裁剪。指定borderRadius作为边角半径。", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipRRect基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【borderRadius】 : 边线半径 【BorderRadius】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【clipper】 : 裁剪器 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/node1_base.dart deleted file mode 100644 index afd150968..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/node1_base.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomClipRRect extends StatelessWidget { - const CustomClipRRect({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ClipRRect( - borderRadius: const BorderRadius.all(Radius.elliptical(35, 30)), - child: Image.asset( - "assets/images/wy_300x200.webp", - width: 150, - height: 100, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_de_DE.json deleted file mode 100644 index bfb91cc43..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "Rechteckiger Zuschnitt", - "info": "Kann ein Unterelement aufnehmen und es rechteckig zuschneiden. Kann mit SizedBox, Align, AspectRadio usw. eingeschränkt werden, um den Bereich zu begrenzen.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ClipRect", - "desc": [ - "【child】 : Unterelement 【Widget】", - "【clipBehavior】 : Zuschneideverhalten 【Clip】", - "【clipper】 : Zuschneider 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_en_US.json deleted file mode 100644 index 52b73167c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "Rectangular Clipping", - "info": "Can contain a child component and perform rectangular clipping. Can be localized using components such as SizedBox, Align, AspectRatio, etc.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ClipRect", - "desc": [ - "【child】: Child component 【Widget】", - "【clipBehavior】: Clipping behavior 【Clip】", - "【clipper】: Clipper 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_es_ES.json deleted file mode 100644 index 56331eb88..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "Recorte rectangular", - "info": "Puede contener un componente hijo y recortarlo en forma rectangular. Se puede delimitar utilizando componentes como SizedBox, Align, AspectRadio, etc.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ClipRect", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【clipper】 : Recortador 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_fr_FR.json deleted file mode 100644 index c01fb51da..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "Découpage rectangulaire", - "info": "Peut contenir un composant enfant et le découper en forme rectangulaire. Peut être limité à une zone spécifique en utilisant des composants tels que SizedBox, Align, AspectRatio, etc.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ClipRect", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【clipBehavior】 : Comportement de découpage 【Clip】", - "【clipper】 : Découpeur 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_it_IT.json deleted file mode 100644 index 8478d887a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "Ritaglio rettangolare", - "info": "Può contenere un componente figlio e ritagliarlo in forma rettangolare. Può essere delimitato utilizzando componenti come SizedBox, Align, AspectRadio, ecc.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di ClipRect", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【clipper】 : Ritagliatore 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ja_JP.json deleted file mode 100644 index cca703081..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "矩形クリップ", - "info": "子コンポーネントを収容し、それを矩形にクリップします。SizedBox、Align、AspectRadioなどの限定コンポーネントを使用して領域を指定できます。", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipRectの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【clipper】 : クリッパー 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ko_KR.json deleted file mode 100644 index 36c4a05cf..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "사각형 클리핑", - "info": "하위 위젯을 포함하고 사각형으로 클리핑할 수 있습니다. SizedBox, Align, AspectRadio 등을 사용하여 영역을 제한할 수 있습니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipRect 기본 사용", - "desc": [ - "【child】 : 하위 위젯 【Widget】", - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【clipper】 : 클리퍼 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_pt_PT.json deleted file mode 100644 index a2eaffb75..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "Recorte Retangular", - "info": "Pode conter um componente filho e cortá-lo em forma retangular. Pode ser delimitado com componentes como SizedBox, Align, AspectRadio, etc.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ClipRect", - "desc": [ - "【child】 : Componente Filho 【Widget】", - "【clipBehavior】 : Comportamento de Corte 【Clip】", - "【clipper】 : Cortador 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ru_RU.json deleted file mode 100644 index 535825d5d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "Прямоугольное обрезание", - "info": "Может содержать один дочерний компонент и обрезать его в прямоугольной форме. Может быть ограничен с помощью таких компонентов, как SizedBox, Align, AspectRatio и других.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ClipRect", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【clipBehavior】 : Поведение обрезания 【Clip】", - "【clipper】 : Обрезатель 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_zh-CN.json deleted file mode 100644 index 6ed05fa3d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "矩形裁剪", - "info": "可容纳一个子组件,并将其进行矩形裁切。可借助SizedBox、Align、AspectRadio等限定组件进行定域。", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipRect基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【clipper】 : 裁剪器 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/node1_base.dart deleted file mode 100644 index c0b4698d0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/node1_base.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomClipRect extends StatelessWidget { - const CustomClipRect({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ClipRect( - child: SizedBox( - height: 100, - width: 100, - child: Image.asset( - "assets/images/wy_300x200.webp", - fit: BoxFit.cover, - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_de_DE.json deleted file mode 100644 index f68765313..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "Farbfilter", - "info": "Kann ein Kindelement aufnehmen und das Element mit 29 Überblendungsmodi und beliebigen Komponenten mischen, so leistungsstark, dass ich nicht weiß, was ich sagen soll. Erfahren Sie mehr über die App, die mit einem Klick alles grau macht.", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ColorFiltered", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【colorFilter】 : Farbfilter 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_en_US.json deleted file mode 100644 index 526d50cb5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "Color Filter", - "info": "Can accommodate a child component, and can mix the component with any other component using 29 blending modes, so powerful that I don't know what to say. Learn about the one-click grayscale app feature.", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ColorFiltered", - "desc": [ - "【child】: Child component 【Widget】", - "【colorFilter】: Color filter 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_es_ES.json deleted file mode 100644 index 0edca167b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "Filtro de color", - "info": "Puede contener un componente hijo y mezclar el componente con cualquier otro componente en 29 modos de superposición de colores, tan poderoso que no sé qué decir. Conoce la función de convertir toda la aplicación a gris con un solo clic.", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ColorFiltered", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【colorFilter】 : Filtro de color 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_fr_FR.json deleted file mode 100644 index 43ac7ce0c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "Filtre de couleur", - "info": "Peut contenir un composant enfant et peut mélanger le composant avec n'importe quel composant selon 29 modes de superposition de couleurs, si puissant que je ne sais pas quoi dire. Découvrez comment rendre toute l'application en niveaux de gris en un clic.", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ColorFiltered", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【colorFilter】 : Filtre de couleur 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_it_IT.json deleted file mode 100644 index 773bace4c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "Filtro colore", - "info": "Può contenere un componente figlio e può mescolare il componente con qualsiasi altro componente in 29 modalità di sovrapposizione del colore, così potente che non so cosa dire. Scopri come rendere tutto grigio con un solo clic nell'app.", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di ColorFiltered", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【colorFilter】 : Filtro colore 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ja_JP.json deleted file mode 100644 index 4de518189..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "カラーフィルター", - "info": "1つの子コンポーネントを収容でき、29種類のオーバーレイモードと任意のコンポーネントを混合できます。その強力さに言葉を失います。アプリのワンクリックで全体をグレーにする機能もご覧ください。", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ColorFilteredの基本的な使用法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【colorFilter】 : カラーフィルター 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ko_KR.json deleted file mode 100644 index dc8dd1999..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "색상 필터", - "info": "하위 컴포넌트를 포함할 수 있으며, 29가지 색상 혼합 모드와 임의의 컴포넌트를 혼합할 수 있습니다. 너무 강력해서 뭐라고 말해야 할지 모르겠습니다. 앱에서 한 번에 전체를 회색으로 만드는 기능을 확인해 보세요.", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ColorFiltered 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【colorFilter】 : 색상 필터 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_pt_PT.json deleted file mode 100644 index 49091b016..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "Filtro de Cor", - "info": "Pode conter um componente filho e pode misturar o componente com qualquer outro componente em 29 modos de sobreposição de cores, tão poderoso que não sei o que dizer. Saiba mais sobre o aplicativo que transforma tudo em cinza com um toque.", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ColorFiltered", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【colorFilter】 : Filtro de cor 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ru_RU.json deleted file mode 100644 index 382d73c1a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "Фильтр цвета", - "info": "Может содержать дочерний компонент, который можно смешивать с любым компонентом по 29 режимам наложения цветов. Настолько мощный, что я не знаю, что сказать. Узнайте, как сделать приложение полностью серым одним кликом.", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ColorFiltered", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【colorFilter】 : Фильтр цвета 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_zh-CN.json deleted file mode 100644 index 05a6ea0c7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "滤色器", - "info": "可容纳一个子组件,可以并将组件按照29中叠色模式和任意组件混合,强大到我不知道该说什么好。app一键全灰了解一下。", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ColorFiltered基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【colorFilter】 : 滤色器 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/node1_base.dart deleted file mode 100644 index 934aa5973..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/node1_base.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:widgets/utils/color_utils.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomColorFiltered extends StatefulWidget { - const CustomColorFiltered({Key? key}) : super(key: key); - - @override - _CustomColorFilteredState createState() => _CustomColorFilteredState(); -} - -class _CustomColorFilteredState extends State { - Color _color = Colors.blue.withAlpha(88); - - @override - Widget build(BuildContext context) { - _color = ColorUtils.randomColor(); - return Column( - children: [ - Wrap(spacing: 10, runSpacing: 10, children: [ - _buildRandomColor(), - ...BlendMode.values - .map((mode) => Column( - children: [ - _buildChild(mode), - const SizedBox(height: 10), - Text( - mode.toString().split('.')[1], - style: const TextStyle(fontSize: 10), - ) - ], - )) - .toList() - ]), - ], - ); - } - - Widget _buildChild(m) => SizedBox( - width: 58, - height: 58, - child: ColorFiltered( - child: - const Image(image: AssetImage("assets/images/icon_head.webp")), - colorFilter: ColorFilter.mode(_color, m)), - ); - - Widget _buildRandomColor() => GestureDetector( - onTap: () => setState(() {}), - child: Container( - alignment: Alignment.center, - width: 60, - height: 60, - decoration: BoxDecoration(color: _color, shape: BoxShape.circle), - child: const Text('点我'), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_de_DE.json deleted file mode 100644 index cca1d143f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "Farbbox", - "info": "Zeichnet die angegebene Farbe auf dem Layoutbereich des Unterelements und zeichnet dann das Unterelement auf dem Hintergrund.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ColoredBox", - "desc": [ - "【color】 : Komponente 【Color】", - "【child】 : Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_en_US.json deleted file mode 100644 index bc61c3b6a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "Color Box", - "info": "Draws a specified color on the layout area of the child component, then draws the child component on the background color.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ColoredBox", - "desc": [ - "【color】: Component 【Color】", - "【child】: Component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_es_ES.json deleted file mode 100644 index 664143d5b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "Caja de colores", - "info": "Dibuja un color especificado en el área de diseño del componente hijo, y luego dibuja el componente hijo sobre el color de fondo.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ColoredBox", - "desc": [ - "【color】 : componente 【Color】", - "【child】 : componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_fr_FR.json deleted file mode 100644 index 569999dc4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "Boîte de couleur", - "info": "Dessine une couleur spécifiée sur la zone de mise en page du composant enfant, puis dessine le composant enfant sur la couleur de fond.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ColoredBox", - "desc": [ - "【color】 : composant 【Color】", - "【child】 : composant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_it_IT.json deleted file mode 100644 index d610aeaf5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "Scatola dei colori", - "info": "Disegna un colore specifico nell'area di layout del componente figlio, quindi disegna il componente figlio sullo sfondo colorato.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di ColoredBox", - "desc": [ - "【color】 : componente 【Color】", - "【child】 : componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ja_JP.json deleted file mode 100644 index fbf34b6c9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "カラーボックス", - "info": "子コンポーネントのレイアウト領域に指定された色を描画し、その後、子コンポーネントを背景色の上に描画します。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ColoredBoxの基本使用", - "desc": [ - "【color】 : コンポーネント 【Color】", - "【child】 : コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ko_KR.json deleted file mode 100644 index 53d441632..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "색상 상자", - "info": "하위 구성 요소의 레이아웃 영역에 지정된 색상을 그린 다음 배경색 위에 하위 구성 요소를 그립니다.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ColoredBox 기본 사용", - "desc": [ - "【color】 : 구성 요소 【Color】", - "【child】 : 구성 요소 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_pt_PT.json deleted file mode 100644 index 51b8903d1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "Caixa de Cores", - "info": "Desenha uma cor especificada na área de layout do componente filho e, em seguida, desenha o componente filho sobre a cor de fundo.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do ColoredBox", - "desc": [ - "【color】 : componente 【Color】", - "【child】 : componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ru_RU.json deleted file mode 100644 index 308f27195..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "Цветная коробка", - "info": "Рисует указанный цвет на области макета дочернего компонента, а затем рисует дочерний компонент на фоновом цвете.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ColoredBox", - "desc": [ - "【color】 : компонент 【Color】", - "【child】 : компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_zh-CN.json deleted file mode 100644 index 590fc2ffe..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "颜色盒", - "info": "在子组件的布局区域上绘制指定颜色,然后将子组件绘制在背景色上。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ColoredBox基本使用", - "desc": [ - "【color】 : 组件 【Color】", - "【child】 : 组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/node1_base.dart deleted file mode 100644 index 714effeb0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/node1_base.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ColoredBoxDemo extends StatelessWidget { - const ColoredBoxDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ColoredBox( - color: Colors.red, - child: Container( - margin: const EdgeInsets.all(20), - padding: const EdgeInsets.all(20), - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(10)), - color: Colors.blue - ), - alignment: Alignment.center, - width: 250, - height: 100, - child: const Text( - "蓝色是加了 margin 和圆角的 Container,外层包裹红色的 ColoredBox,注意作用范围。", - style: TextStyle(color: Colors.white), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_de_DE.json deleted file mode 100644 index 8e4dcbfb6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "Synthetischer Transformationsfolger", - "info": "Wird in der Regel in Verbindung mit der Komponente CompositedTransformTarget verwendet, um das Overlay an die Zieltransformation anzupassen.", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Verwendung von CompositedTransformFollower", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【link】 : Verknüpfung 【LayerLink】", - "【offset】 : Versatz 【Offset】", - "【targetAnchor】 : Zielankerpunkt 【Alignment】", - "【followerAnchor】 : Ankerpunkt des Folgers 【Alignment】", - "【showWhenUnlinked】 : Anzeige bei Nichtverknüpfung 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_en_US.json deleted file mode 100644 index d4f070447..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "Composited Transform Follower", - "info": "Generally used in conjunction with the CompositedTransformTarget component to enable the Overlay to follow the target transformation.", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Usage of CompositedTransformFollower", - "desc": [ - "【child】 : Child widget 【Widget】", - "【link】 : Link 【LayerLink】", - "【offset】 : Offset 【Offset】", - "【targetAnchor】 : Target anchor 【Alignment】", - "【followerAnchor】 : Follower anchor 【Alignment】", - "【showWhenUnlinked】 : Whether to show when unlinked 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_es_ES.json deleted file mode 100644 index 7b7667b35..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "Seguidor de Transformación Compuesta", - "info": "Generalmente se usa junto con el componente CompositedTransformTarget, lo que permite que el Overlay siga la transformación del objetivo.", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de CompositedTransformFollower", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【link】 : Enlace 【LayerLink】", - "【offset】 : Desplazamiento 【Offset】", - "【targetAnchor】 : Punto de anclaje del objetivo 【Alignment】", - "【followerAnchor】 : Punto de anclaje del seguidor 【Alignment】", - "【showWhenUnlinked】 : Mostrar cuando no está enlazado 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_fr_FR.json deleted file mode 100644 index 4292fa567..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "Suiveur de transformation composite", - "info": "Généralement utilisé conjointement avec le composant CompositedTransformTarget, permet à l'Overlay de suivre la transformation de la cible.", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de CompositedTransformFollower", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【link】 : Lien 【LayerLink】", - "【offset】 : Décalage 【Offset】", - "【targetAnchor】 : Point d'ancrage de la cible 【Alignment】", - "【followerAnchor】 : Point d'ancrage du suiveur 【Alignment】", - "【showWhenUnlinked】 : Afficher si non lié 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_it_IT.json deleted file mode 100644 index cf13a2de8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "Seguace di Trasformazione Composta", - "info": "Generalmente utilizzato in combinazione con il componente CompositedTransformTarget, consente a Overlay di seguire le trasformazioni dell'obiettivo.", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di CompositedTransformFollower", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【link】 : Collegamento 【LayerLink】", - "【offset】 : Offset 【Offset】", - "【targetAnchor】 : Ancoraggio obiettivo 【Alignment】", - "【followerAnchor】 : Ancoraggio seguace 【Alignment】", - "【showWhenUnlinked】 : Mostra quando non collegato 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ja_JP.json deleted file mode 100644 index db21d1674..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "合成変換フォロワー", - "info": "通常、CompositedTransformTarget コンポーネントと組み合わせて使用され、Overlay をターゲットの変換に伴わせることができます。", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CompositedTransformFollower 使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【link】 : リンク 【LayerLink】", - "【offset】 : オフセット 【Offset】", - "【targetAnchor】 : ターゲットアンカー 【Alignment】", - "【followerAnchor】 : フォロワーアンカー 【Alignment】", - "【showWhenUnlinked】 : リンクされていない場合に表示するか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ko_KR.json deleted file mode 100644 index 6d54eabce..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "합성 변형 팔로워", - "info": "일반적으로 CompositedTransformTarget 컴포넌트와 함께 사용되어 Overlay가 대상 변형을 따라가도록 합니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CompositedTransformFollower 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【link】 : 링크 【LayerLink】", - "【offset】 : 오프셋 【Offset】", - "【targetAnchor】 : 타겟 앵커 【Alignment】", - "【followerAnchor】 : 팔로워 앵커 【Alignment】", - "【showWhenUnlinked】 : 링크되지 않을 때 표시 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_pt_PT.json deleted file mode 100644 index df81a3cec..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "Seguidor de Transformação Composta", - "info": "Geralmente usado em conjunto com o componente CompositedTransformTarget, permite que o Overlay acompanhe a transformação do alvo.", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do CompositedTransformFollower", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【link】 : Link 【LayerLink】", - "【offset】 : Deslocamento 【Offset】", - "【targetAnchor】 : Âncora do alvo 【Alignment】", - "【followerAnchor】 : Âncora do seguidor 【Alignment】", - "【showWhenUnlinked】 : Mostrar quando não estiver vinculado 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ru_RU.json deleted file mode 100644 index 2d7e6572e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "Следователь композитного преобразования", - "info": "Обычно используется совместно с компонентом CompositedTransformTarget, позволяя Overlay следовать за преобразованием цели.", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование CompositedTransformFollower", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【link】 : Ссылка 【LayerLink】", - "【offset】 : Смещение 【Offset】", - "【targetAnchor】 : Якорь цели 【Alignment】", - "【followerAnchor】 : Якорь следящего 【Alignment】", - "【showWhenUnlinked】 : Показывать при отсутствии связи 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_zh-CN.json deleted file mode 100644 index 174d72c50..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "合成变换跟随者", - "info": "一般与 CompositedTransformTarget 组件联合使用,可以使 Overlay 伴随目标变换。", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CompositedTransformFollower 使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【link】 : 链接 【LayerLink】", - "【offset】 : 偏移 【Offset】", - "【targetAnchor】 : 目标锚点 【Alignment】", - "【followerAnchor】 : 伴随者锚点 【Alignment】", - "【showWhenUnlinked】 : 为链接是否显示 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/node1_base.dart deleted file mode 100644 index e18ed3c27..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/node1_base.dart +++ /dev/null @@ -1,106 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/3/31 -/// contact me by email 1981462002@qq.com -/// - - -class CompositedTransformFollowerDemo extends StatelessWidget { - - const CompositedTransformFollowerDemo({Key? key}) : super(key: key); - - static const List colors =[Colors.red,Colors.yellow,Colors.blue,Colors.green]; - - - @override - Widget build(BuildContext context) { - return Container( - transform: Matrix4.rotationZ(-15/180*pi), - height: 250, - padding: const EdgeInsets.all(50.0), - child: ListView( - scrollDirection: Axis.horizontal, - children: [ - Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [_LogoTips(), const Text('点击图标\n显隐弹框')], - ), - ...colors.map((color) => Container(width: 80, color: color)) - ], - ), - ); - } - - -} - -class _LogoTips extends StatefulWidget { - @override - _LogoTipsState createState() => _LogoTipsState(); -} - -class _LogoTipsState extends State<_LogoTips> { - OverlayEntry? _overlayEntry; - - final LayerLink _layerLink = LayerLink(); - - bool show = false; - - OverlayEntry _createOverlayEntry() { - return OverlayEntry( - builder: (context) => Positioned( - width: 150, - child: CompositedTransformFollower( - link: _layerLink, - showWhenUnlinked: false, - offset: const Offset(0,-10), - targetAnchor: Alignment.topRight, - child: const Card( - child: Padding( - padding: EdgeInsets.all(8.0), - child: Text('我是一个 Overlay,目标组件为图标,当它变换时,我会伴随变换。'), - ), - ), - ), - )); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: _toggleOverlay, - child: CompositedTransformTarget( - link: _layerLink, - child: - const FlutterLogo( - size: 80, - ), - )); - } - - void _toggleOverlay() { - if (!show) { - _showOverlay(); - } else { - _hideOverlay(); - } - show = !show; - } - - void _showOverlay() { - _overlayEntry = _createOverlayEntry(); - Overlay.of(context)?.insert(_overlayEntry!); - } - - void _hideOverlay() { - _overlayEntry?.remove(); - } - - @override - void dispose() { - _hideOverlay(); - super.dispose(); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_de_DE.json deleted file mode 100644 index 9f212b549..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "Zusammengesetztes Transformationsziel", - "info": "Wird in der Regel in Verbindung mit der CompositedTransformFollower-Komponente verwendet, um das Overlay an die Zieltransformation anzupassen.", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Verwendung von CompositedTransformTarget", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【link】 : Verknüpfung 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_en_US.json deleted file mode 100644 index 25b5ad35f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "Composite Transform Target", - "info": "Generally used in conjunction with the CompositedTransformFollower component, it allows the Overlay to follow the target transformation.", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CompositedTransformTarget Usage", - "desc": [ - "【child】 : Child component 【Widget】", - "【link】 : Link 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_es_ES.json deleted file mode 100644 index 0fe0dd5dc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "Objetivo de transformación compuesta", - "info": "Generalmente se usa junto con el componente CompositedTransformFollower, lo que permite que el Overlay siga la transformación del objetivo.", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de CompositedTransformTarget", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【link】 : Enlace 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_fr_FR.json deleted file mode 100644 index 714f08cfa..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "Cible de transformation composite", - "info": "Généralement utilisé conjointement avec le composant CompositedTransformFollower, il permet à l'Overlay de suivre les transformations de la cible.", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de CompositedTransformTarget", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【link】 : Lien 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_it_IT.json deleted file mode 100644 index 0440bbafa..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "Obiettivo di trasformazione composita", - "info": "Generalmente utilizzato insieme al componente CompositedTransformFollower, consente all'Overlay di seguire le trasformazioni dell'obiettivo.", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di CompositedTransformTarget", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【link】 : Collegamento 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ja_JP.json deleted file mode 100644 index c6b8469c6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "合成変換ターゲット", - "info": "一般的に CompositedTransformFollower コンポーネントと組み合わせて使用され、Overlay をターゲットの変換に伴わせることができます。", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CompositedTransformTarget の使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【link】 : リンク 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ko_KR.json deleted file mode 100644 index a82981b35..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "합성 변환 대상", - "info": "일반적으로 CompositedTransformFollower 컴포넌트와 함께 사용되며, Overlay가 대상 변환을 따라가도록 할 수 있습니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CompositedTransformTarget 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【link】 : 링크 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_pt_PT.json deleted file mode 100644 index 56e64b598..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "Alvo de Transformação Composta", - "info": "Geralmente usado em conjunto com o componente CompositedTransformFollower, pode fazer com que o Overlay acompanhe a transformação do alvo.", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do CompositedTransformTarget", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【link】 : Link 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ru_RU.json deleted file mode 100644 index 291a2959f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "Цель составного преобразования", - "info": "Обычно используется совместно с компонентом CompositedTransformFollower, что позволяет Overlay следовать за преобразованием цели.", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование CompositedTransformTarget", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【link】 : Ссылка 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_zh-CN.json deleted file mode 100644 index 8bc37647f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "合成变换目标", - "info": "一般与 CompositedTransformFollower 组件联合使用,可以使 Overlay 伴随目标变换。", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CompositedTransformTarget 使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【link】 : 链接 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/node1_base.dart deleted file mode 100644 index 57ef07e67..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/node1_base.dart +++ /dev/null @@ -1,103 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/3/31 -/// contact me by email 1981462002@qq.com -/// - - -class CompositedTransformTargetDemo extends StatelessWidget { - - const CompositedTransformTargetDemo({Key? key}) : super(key: key); - - static const List colors =[Colors.red,Colors.yellow,Colors.blue,Colors.green]; - - @override - Widget build(BuildContext context) { - return Container( - transform: Matrix4.rotationZ(-15/180*pi), - height: 250, - padding: const EdgeInsets.all(50.0), - child: ListView( - scrollDirection: Axis.horizontal, - children: [ - Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [_LogoTips(), const Text('点击图标\n显隐弹框')], - ), - ...colors.map((color) => Container(width: 80, color: color)) - ], - ), - ); - } - -} - -class _LogoTips extends StatefulWidget { - @override - _LogoTipsState createState() => _LogoTipsState(); -} - -class _LogoTipsState extends State<_LogoTips> { - OverlayEntry? _overlayEntry; - - final LayerLink _layerLink = LayerLink(); - - bool show = false; - - OverlayEntry _createOverlayEntry() { - return OverlayEntry( - builder: (context) => Positioned( - width: 150, - child: CompositedTransformFollower( - link: _layerLink, - showWhenUnlinked: false, - targetAnchor: Alignment.topRight, - child: const Card( - child: Padding( - padding: EdgeInsets.all(8.0), - child: Text('我是一个 Overlay,目标组件为图标,当它变换时,我会伴随变换。'), - ), - ), - ), - )); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: _toggleOverlay, - child: CompositedTransformTarget( - link: _layerLink, - child: - const FlutterLogo( - size: 80, - ), - )); - } - - void _toggleOverlay() { - if (!show) { - _showOverlay(); - } else { - _hideOverlay(); - } - show = !show; - } - - void _showOverlay() { - _overlayEntry = _createOverlayEntry(); - Overlay.of(context)?.insert(_overlayEntry!); - } - - void _hideOverlay() { - _overlayEntry?.remove(); - } - - @override - void dispose() { - _hideOverlay(); - super.dispose(); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_de_DE.json deleted file mode 100644 index 5f54b4743..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "Eingeschränkte Box", - "info": "Kann ein Unterelement aufnehmen und durch die Angabe von maximaler und minimaler Breite und Höhe den Bereich des Unterelements begrenzen.", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von BoxConstraints", - "desc": [ - "【child】 : Kind-Komponente 【Widget】", - "【minWidth】 : Minimale Breite 【double】", - "【minHeight】 : Minimale Höhe 【double】", - "【maxHeight】 : Maximale Höhe 【double】", - "【maxWidth】 : Maximale Breite 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_en_US.json deleted file mode 100644 index c1d16da09..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "Constrained Box", - "info": "Can contain a child component, and limit the area of the child component by specifying the maximum and minimum width and height.", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of BoxConstraints", - "desc": [ - "【child】 : Child component 【Widget】", - "【minWidth】 : Minimum width 【double】", - "【minHeight】 : Minimum height 【double】", - "【maxHeight】 : Maximum height 【double】", - "【maxWidth】 : Maximum width 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_es_ES.json deleted file mode 100644 index 5b3675abd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "Caja con restricciones", - "info": "Puede contener un componente hijo, limitando el área del componente hijo especificando el ancho y alto máximo y mínimo.", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de BoxConstraints", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【minWidth】 : Ancho mínimo 【double】", - "【minHeight】 : Altura mínima 【double】", - "【maxHeight】 : Altura máxima 【double】", - "【maxWidth】 : Ancho máximo 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_fr_FR.json deleted file mode 100644 index 857eb2d64..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "Boîte de contraintes", - "info": "Peut contenir un composant enfant, en spécifiant la largeur et la hauteur maximales et minimales pour limiter la zone du composant enfant.", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de BoxConstraints", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【minWidth】 : Largeur minimale 【double】", - "【minHeight】 : Hauteur minimale 【double】", - "【maxHeight】 : Hauteur maximale 【double】", - "【maxWidth】 : Largeur maximale 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_it_IT.json deleted file mode 100644 index 5147457f8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "Scatola Vincolata", - "info": "Può contenere un componente figlio, limitando l'area del componente figlio specificando larghezza e altezza massime e minime.", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di BoxConstraints", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【minWidth】 : Larghezza minima 【double】", - "【minHeight】 : Altezza minima 【double】", - "【maxHeight】 : Altezza massima 【double】", - "【maxWidth】 : Larghezza massima 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ja_JP.json deleted file mode 100644 index 57709223e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "制約ボックス", - "info": "子コンポーネントを収容でき、最大・最小の幅と高さを指定して、子コンポーネントの領域を制限します。", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BoxConstraintsの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【minWidth】 : 最小幅 【double】", - "【minHeight】 : 最小高さ 【double】", - "【maxHeight】 : 最大高さ 【double】", - "【maxWidth】 : 最大幅 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ko_KR.json deleted file mode 100644 index 02b077fb1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "제한 상자", - "info": "하위 위젯을 수용할 수 있으며, 최대 및 최소 너비와 높이를 지정하여 하위 위젯의 영역을 제한합니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BoxConstraints 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【minWidth】 : 최소 너비 【double】", - "【minHeight】 : 최소 높이 【double】", - "【maxHeight】 : 최대 높이 【double】", - "【maxWidth】 : 최대 너비 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_pt_PT.json deleted file mode 100644 index 585ab4eff..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "Caixa Restrita", - "info": "Pode conter um componente filho, limitando a área onde o componente filho pode estar, especificando a largura e altura mínima e máxima.", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de BoxConstraints", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【minWidth】 : Largura mínima 【double】", - "【minHeight】 : Altura mínima 【double】", - "【maxHeight】 : Altura máxima 【double】", - "【maxWidth】 : Largura máxima 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ru_RU.json deleted file mode 100644 index 65a5a04f3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "Ограниченный контейнер", - "info": "Может содержать один дочерний компонент, ограничивая область размещения дочернего компонента путем указания минимальной и максимальной ширины и высоты.", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование BoxConstraints", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【minWidth】 : Минимальная ширина 【double】", - "【minHeight】 : Минимальная высота 【double】", - "【maxHeight】 : Максимальная высота 【double】", - "【maxWidth】 : Максимальная ширина 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_zh-CN.json deleted file mode 100644 index 05755076e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "约束盒", - "info": "可容纳一个子组件,通过指定最大、最小宽高,来限定子组件容身区域。", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BoxConstraints基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【minWidth】 : 最小宽 【double】", - "【minHeight】 : 最小高 【double】", - "【maxHeight】 : 最大高 【double】", - "【maxWidth】 : 最大宽 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/node1_base.dart deleted file mode 100644 index 59a656e68..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/node1_base.dart +++ /dev/null @@ -1,65 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomConstrainedBox extends StatefulWidget { - const CustomConstrainedBox({Key? key}) : super(key: key); - - @override - _CustomConstrainedBoxState createState() => _CustomConstrainedBoxState(); -} - -class _CustomConstrainedBoxState extends State { - String _text = ''; - - @override - Widget build(BuildContext context) { - Widget child = Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 40, - height: 40, - child: const Text("Static"), - ); - - Widget box = ConstrainedBox( - constraints: const BoxConstraints( - minHeight: 50, - minWidth: 20, - maxHeight: 80, - maxWidth: 150, - ), - child: Container(color: Colors.orange, child: Text(_text)), - ); - return Column( - children: [ - Container( - color: Colors.grey.withAlpha(22), - width: 300, - height: 100, - child: Row( - children: [child, UnconstrainedBox(child: box), child], - ), - ), - _buildInput(), - ], - ); - } - - Widget _buildInput() { - return Padding( - padding: const EdgeInsets.all(18.0), - child: TextField( - decoration: const InputDecoration( - border: OutlineInputBorder(), - hintText: '请输入', - ), - onChanged: (v) { - setState(() { - _text = v; - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_de_DE.json deleted file mode 100644 index 924c857c8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "iOS-Textauswahl-Werkzeugleiste", - "info": "Eine iOS-stil Werkzeugleiste, die auf Textauswahl reagiert", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Diese Komponente kann nicht verwendet werden", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_en_US.json deleted file mode 100644 index 9b985784f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "iOS Text Selection Toolbar", - "info": "An iOS-style toolbar that responds to text selection", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "This component is not available", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_es_ES.json deleted file mode 100644 index 1fefc04f5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "Barra de herramientas de selección de texto iOS", - "info": "Barra de herramientas de estilo iOS que responde a la selección de texto", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Este componente no se puede usar", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_fr_FR.json deleted file mode 100644 index 39d455a98..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "Barre d'outils de sélection de texte iOS", - "info": "Barre d'outils de style iOS qui répond à la sélection de texte", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Ce composant ne peut pas être utilisé", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_it_IT.json deleted file mode 100644 index 0837589ca..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "Barra degli strumenti di selezione del testo per iOS", - "info": "Barra degli strumenti in stile iOS che risponde alla selezione del testo", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Questo componente non può essere utilizzato", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ja_JP.json deleted file mode 100644 index ffbb40289..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "iOSテキスト選択ツールバー", - "info": "テキスト選択に応答するiOSスタイルのツールバー", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "このコンポーネントは使用できません", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ko_KR.json deleted file mode 100644 index 2040ec188..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "ios 텍스트 선택 도구 모음", - "info": "텍스트 선택에 반응하는 ios 스타일의 도구 모음", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "이 컴포넌트는 사용할 수 없습니다", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_pt_PT.json deleted file mode 100644 index 531eaca34..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "Barra de ferramentas de seleção de texto iOS", - "info": "Barra de ferramentas no estilo iOS que responde à seleção de texto", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Este componente não pode ser usado", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ru_RU.json deleted file mode 100644 index 5c65d5a02..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "Панель инструментов для выбора текста iOS", - "info": "Панель инструментов в стиле iOS, реагирующая на выбор текста", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Этот компонент недоступен", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_zh-CN.json deleted file mode 100644 index c1cf49995..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "ios文字选择工具条", - "info": "对文本选择做出响应的 ios 风格的工具栏", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "该组件无法使用", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/node1_base.dart deleted file mode 100644 index aebf20b39..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/node1_base.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class CupertinoTextSelectionToolbarDemo extends StatelessWidget { - const CupertinoTextSelectionToolbarDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - padding: const EdgeInsets.all(10), - width: 300, - child: const Text( - "注:此组件私有构造器,外部无法使用,并没有使用价值。", - style: TextStyle(color: Colors.red, fontSize: 18), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_de_DE.json deleted file mode 100644 index c4e97d673..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "Zeichnungskomponente", - "info": "Durch CustomPainter können komplexe benutzerdefinierte Zeichnungskomponenten erstellt werden, was die Seele der benutzerdefinierten Komponenten in Flutter darstellt.", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "CustomPaint Linienzeichnung", - "desc": [ - "【painter】 : Zeichnungsgerät 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "CustomPaint Bézier-Kurven", - "desc": [ - "Flutter unterstützt auch komplexe Zeichnungen wie Bézier-Kurven." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_en_US.json deleted file mode 100644 index 6f1319301..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "Drawing Component", - "info": "Drawing through CustomPainter can achieve some complex custom drawing components, and it is the soul of custom components in Flutter.", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "CustomPaint Line Drawing", - "desc": [ - "【painter】: Painter 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "CustomPaint Bezier Curve", - "desc": [ - "Flutter also supports complex drawings such as Bezier curves." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_es_ES.json deleted file mode 100644 index ca8bd5f04..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "Componente de dibujo", - "info": "A través de CustomPainter, se pueden implementar algunos componentes de dibujo personalizados complejos, siendo el alma de los componentes personalizados en Flutter.", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "CustomPaint dibuja formas de línea", - "desc": [ - "【painter】: pintor 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "CustomPaint dibuja curvas de Bézier", - "desc": [ - "Flutter también admite dibujos complejos como curvas de Bézier." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_fr_FR.json deleted file mode 100644 index 7eaf8e7f0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "Composant de dessin", - "info": "En utilisant CustomPainter, il est possible de réaliser des composants de dessin personnalisés complexes, ce qui en fait une figure essentielle des composants personnalisés dans Flutter.", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "Dessin de lignes avec CustomPaint", - "desc": [ - "【painter】 : Peintre 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "Dessin de courbes de Bézier avec CustomPaint", - "desc": [ - "Flutter prend également en charge des dessins complexes comme les courbes de Bézier." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_it_IT.json deleted file mode 100644 index 698e0db3f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "Componente di disegno", - "info": "Attraverso CustomPainter, è possibile realizzare alcuni componenti di disegno personalizzati complessi, che rappresentano l'anima dei componenti personalizzati in Flutter.", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "Disegno di linee con CustomPaint", - "desc": [ - "【painter】 : strumento di disegno 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "Curva di Bézier con CustomPaint", - "desc": [ - "Flutter supporta anche disegni complessi come le curve di Bézier." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ja_JP.json deleted file mode 100644 index 98a0fa613..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "描画コンポーネント", - "info": "CustomPainterを使用して描画することで、複雑なカスタム描画コンポーネントを実現できます。これはFlutterのカスタムコンポーネントの中心的な存在です。", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "CustomPaintで線と図形を描画", - "desc": [ - "【painter】 : ペインター 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "CustomPaintでベジェ曲線を描画", - "desc": [ - "Flutterはベジェ曲線などの複雑な描画もサポートしています。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ko_KR.json deleted file mode 100644 index 7fd754bb0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "그리기 컴포넌트", - "info": "CustomPainter를 통해 그리기를 수행하며, 복잡한 사용자 정의 그리기 컴포넌트를 구현할 수 있습니다. Flutter에서 사용자 정의 컴포넌트의 핵심 요소입니다.", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "CustomPaint로 선 그리기", - "desc": [ - "【painter】 : 페인터 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "CustomPaint로 베지어 곡선 그리기", - "desc": [ - "Flutter는 베지어 곡선과 같은 복잡한 그리기도 지원합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_pt_PT.json deleted file mode 100644 index 4cdbd577c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "Componente de Desenho", - "info": "Através do CustomPainter, é possível realizar alguns componentes de desenho personalizados complexos, sendo uma figura central na criação de componentes personalizados no Flutter.", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "Desenho de Linhas com CustomPaint", - "desc": [ - "【painter】 : Pintor 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "Desenho de Curvas de Bézier com CustomPaint", - "desc": [ - "O Flutter também suporta desenhos complexos como curvas de Bézier." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ru_RU.json deleted file mode 100644 index 27456915b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "Компонент рисования", - "info": "Рисование с помощью CustomPainter позволяет реализовать сложные пользовательские компоненты рисования, являясь ключевым элементом пользовательских компонентов во Flutter.", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "Рисование линий с помощью CustomPaint", - "desc": [ - "【painter】 : рисовальщик 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "Рисование кривых Безье с помощью CustomPaint", - "desc": [ - "Flutter также поддерживает сложное рисование, такое как кривые Безье." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_zh-CN.json deleted file mode 100644 index c950ad8ee..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "绘制组件", - "info": "通过CustomPainter进行绘制,可实现一些复杂的自定义绘制组件,是Flutter中自定义组件的灵魂人物。", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "CustomPaint绘线图形", - "desc": [ - "【painter】 : 绘画器 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "CustomPaint绘线贝塞尔曲线", - "desc": [ - "Flutter也支持贝塞尔曲线等复杂绘制。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/node1_clock.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/node1_clock.dart deleted file mode 100644 index df2cdebf1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/node1_clock.dart +++ /dev/null @@ -1,198 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class ClockPage extends StatelessWidget { - const ClockPage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: 100, - child:RepaintBoundary( - child: CustomPaint(//使用CustomPaint盛放画布 - painter: ClockPainter(), - ), - ), - ) - ; - } -} - -class ClockPainter extends CustomPainter { - late Paint _paint; - final double _radius = 3.0; //小球半径 - final Path _path = Path(); //画笔对象 - ClockPainter () { - _paint = Paint()..color= const Color(0xff45d0fd)..isAntiAlias=true; - _path.addOval(Rect.fromCircle(radius: _radius, center: const Offset(0, 0))); //小球路径 - } - - @override - void paint(Canvas canvas, Size size) { - print(size); - canvas.clipRect(Offset.zero & size); - canvas.translate(size.width/2-65*2, 0); - renderDigit(1, canvas);//渲染数字 - canvas.translate(65, 0);//平移画布 - renderDigit(9, canvas); - canvas.translate(65, 0); renderDigit(9, canvas); - canvas.translate(65, 0); renderDigit(4, canvas); - } - //渲染数字 num :要显示的数字 canvas :画布 - void renderDigit(int num, Canvas canvas) { - if (num > 10) { return; } - for (int i = 0; i < digit[num].length; i++) { - for (int j = 0; j < digit[num][j].length; j++) { - if (digit[num][i][j] == 1) { - canvas.save(); - double rX = j * 2 * (_radius + 1) + (_radius + 1); //第(i,j)个点圆心横坐标 - double rY = i * 2 * (_radius + 1) + (_radius + 1); //第(i,j)个点圆心纵坐标 - canvas.translate(rX, rY); - canvas.drawPath(_path, _paint); - canvas.restore(); - } - } - } - } - @override - bool shouldRepaint(CustomPainter oldDelegate)=> false; -} - -const digit = [ - [ - [0, 0, 1, 1, 1, 0, 0], - [0, 1, 1, 0, 1, 1, 0], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [0, 1, 1, 0, 1, 1, 0], - [0, 0, 1, 1, 1, 0, 0] - ], //0 - - [ - [0, 0, 0, 1, 1, 0, 0], - [0, 1, 1, 1, 1, 0, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 0, 1, 1, 0, 0], - [1, 1, 1, 1, 1, 1, 1] - ], //1 - [ - [0, 1, 1, 1, 1, 1, 0], - [1, 1, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 1, 1, 0, 0, 0], - [0, 1, 1, 0, 0, 0, 0], - [1, 1, 0, 0, 0, 0, 0], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 1, 1, 1, 1, 1] - ], //2 - [ - [1, 1, 1, 1, 1, 1, 1], - [0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 1, 1, 1, 0, 0], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [0, 1, 1, 1, 1, 1, 0] - ], //3 - - [ - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 1, 1, 1, 0], - [0, 0, 1, 1, 1, 1, 0], - [0, 1, 1, 0, 1, 1, 0], - [1, 1, 0, 0, 1, 1, 0], - [1, 1, 1, 1, 1, 1, 1], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 1, 1, 1, 1] - ], //4 - [ - [1, 1, 1, 1, 1, 1, 1], - [1, 1, 0, 0, 0, 0, 0], - [1, 1, 0, 0, 0, 0, 0], - [1, 1, 1, 1, 1, 1, 0], - [0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [0, 1, 1, 1, 1, 1, 0] - ], //5 - [ - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 1, 1, 0, 0, 0], - [0, 1, 1, 0, 0, 0, 0], - [1, 1, 0, 0, 0, 0, 0], - [1, 1, 0, 1, 1, 1, 0], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [0, 1, 1, 1, 1, 1, 0] - ], //6 - [ - [1, 1, 1, 1, 1, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 1, 1, 0, 0, 0], - [0, 0, 1, 1, 0, 0, 0], - [0, 0, 1, 1, 0, 0, 0], - [0, 0, 1, 1, 0, 0, 0] - ], //7 - [ - [0, 1, 1, 1, 1, 1, 0], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [0, 1, 1, 1, 1, 1, 0], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [0, 1, 1, 1, 1, 1, 0] - ], //8 - [ - [0, 1, 1, 1, 1, 1, 0], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [0, 1, 1, 1, 0, 1, 1], - [0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 1, 1, 0, 0, 0, 0] - ], //9 - [ - [0, 0, 0, 0], - [0, 0, 0, 0], - [0, 1, 1, 0], - [0, 1, 1, 0], - [0, 0, 0, 0], - [0, 0, 0, 0], - [0, 1, 1, 0], - [0, 1, 1, 0], - [0, 0, 0, 0], - [0, 0, 0, 0] - ] //: -]; diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/node2_bezier.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/node2_bezier.dart deleted file mode 100644 index d59250e69..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/node2_bezier.dart +++ /dev/null @@ -1,168 +0,0 @@ -import 'dart:ui'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-28 -/// contact me by email 1981462002@qq.com - -class PlayBezier3Page extends StatefulWidget { - const PlayBezier3Page({Key? key}) : super(key: key); - - @override - _PlayBezier3PageState createState() => _PlayBezier3PageState(); -} - -class _PlayBezier3PageState extends State { - List _pos = []; - int selectPos=0; - - @override - void initState() { - _initPoints(); - super.initState(); - } - - void _initPoints() { - _pos = []; - _pos.add(const Offset(0, 0)); - _pos.add(const Offset(60, -60)); - _pos.add(const Offset(-90, -90)); - _pos.add(const Offset(-120, -40)); - } - - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - width: MediaQuery.of(context).size.width, - child: RepaintBoundary( - child: CustomPaint( - painter: BezierPainter(pos: _pos, selectPos: selectPos), - ), - ), - ); - } -} - -class BezierPainter extends CustomPainter { - late Paint _gridPaint; - late Path _gridPath; - - late Paint _mainPaint; - late Path _mainPath; - int? selectPos; - late Paint _helpPaint; - - List pos; - - BezierPainter({this.pos=const [], this.selectPos}) { - _gridPaint = Paint()..style = PaintingStyle.stroke; - _gridPath = Path(); - - _mainPaint = Paint() - ..color = Colors.orange - ..style = PaintingStyle.stroke - ..strokeWidth = 2; - _mainPath = Path(); - - _helpPaint = Paint() - ..color = Colors.purple - ..style = PaintingStyle.stroke - ..strokeWidth = 2 - ..strokeCap = StrokeCap.round; - } - - @override - void paint(Canvas canvas, Size size) { - canvas.clipRect(Offset.zero & size); - canvas.translate(size.width / 2, size.height / 2); - _drawGrid(canvas, size); //绘制格线 - _drawAxis(canvas, size); //绘制轴线 - - _mainPath.moveTo(pos[0].dx, pos[0].dy); - _mainPath.cubicTo( - pos[1].dx, pos[1].dy, pos[2].dx, pos[2].dy, pos[3].dx, pos[3].dy); - canvas.drawPath(_mainPath, _mainPaint); - _drawHelp(canvas); - _drawSelectPos(canvas); - } - - @override - bool shouldRepaint(CustomPainter oldDelegate) => false; - - void _drawGrid(Canvas canvas, Size size) { - _gridPaint - ..color = Colors.grey - ..strokeWidth = 0.5; - _gridPath = _buildGridPath(_gridPath, size); - canvas.drawPath(_buildGridPath(_gridPath, size), _gridPaint); - - canvas.save(); - canvas.scale(1, -1); //沿x轴镜像 - canvas.drawPath(_gridPath, _gridPaint); - canvas.restore(); - - canvas.save(); - canvas.scale(-1, 1); //沿y轴镜像 - canvas.drawPath(_gridPath, _gridPaint); - canvas.restore(); - - canvas.save(); - canvas.scale(-1, -1); //沿原点镜像 - canvas.drawPath(_gridPath, _gridPaint); - canvas.restore(); - } - - void _drawAxis(Canvas canvas, Size size) { - canvas.drawPoints( - PointMode.lines, - [ - Offset(-size.width / 2, 0), - Offset(size.width / 2, 0), - Offset(0, -size.height / 2), - Offset(0, size.height / 2), - Offset(0, size.height / 2), - Offset(0 - 7.0, size.height / 2 - 10), - Offset(0, size.height / 2), - Offset(0 + 7.0, size.height / 2 - 10), - Offset(size.width / 2, 0), - Offset(size.width / 2 - 10, 7), - Offset(size.width / 2, 0), - Offset(size.width / 2 - 10, -7), - ], - _gridPaint - ..color = Colors.blue - ..strokeWidth = 1.5); - } - - Path _buildGridPath(Path path, Size size, {step = 20.0}) { - for (int i = 0; i < size.height / 2 / step; i++) { - path.moveTo(0, step * i); - path.relativeLineTo(size.width / 2, 0); - } - for (int i = 0; i < size.width / 2 / step; i++) { - path.moveTo(step * i, 0); - path.relativeLineTo( - 0, - size.height / 2, - ); - } - return path; - } - - void _drawHelp(Canvas canvas) { - canvas.drawPoints(PointMode.lines, pos, _helpPaint..strokeWidth = 1); - canvas.drawPoints(PointMode.points, pos, _helpPaint..strokeWidth = 8); - } - - void _drawSelectPos(Canvas canvas) { - if (selectPos == null) return; - canvas.drawCircle( - pos[selectPos!], - 10, - _helpPaint - ..color = Colors.green - ..strokeWidth = 2); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_de_DE.json deleted file mode 100644 index e87b36dc9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "Allgemeines Einzelkind-Layout", - "info": "Kann ein Unterelement aufnehmen und eine Delegiertenklasse angeben, um das Unterelement anzuordnen. Die Delegiertenklasse kann den Bereich des übergeordneten Containers und die Bereichsgröße des Unterelements sowie die Bereichsbeschränkungen abrufen.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CustomSingleChildLayout", - "desc": [ - "【delegate】 : Delegat 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "Verschiebungsverwendung von CustomSingleChildLayout", - "desc": [ - "Kann die Verschiebungsfähigkeit des Delegaten nutzen, um das Unterelement zu positionieren." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_en_US.json deleted file mode 100644 index 377116b64..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "Universal Single Child Layout", - "info": "Can accommodate one child component and specify a delegate class to arrange the child component. The delegate class can obtain the parent container area, the child component's area size, and the area constraints.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CustomSingleChildLayout", - "desc": [ - "【delegate】 : delegate 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "Offset Usage of CustomSingleChildLayout", - "desc": [ - "The offset capability of the delegate can be used to position the child component with an offset." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_es_ES.json deleted file mode 100644 index f829cee32..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "Diseño de un solo hijo personalizado", - "info": "Puede contener un componente hijo y especificar una clase delegada para organizar el componente hijo. La clase delegada puede obtener el área del contenedor padre y el tamaño del área del componente hijo, así como las restricciones del área.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CustomSingleChildLayout", - "desc": [ - "【delegate】 : delegado 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "Uso de desplazamiento en CustomSingleChildLayout", - "desc": [ - "Se puede utilizar la capacidad de desplazamiento del delegado para posicionar el componente hijo." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_fr_FR.json deleted file mode 100644 index 819d6eaf4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "Disposition personnalisée à un seul enfant", - "info": "Peut contenir un seul composant enfant et spécifie une classe déléguée pour organiser le composant enfant. La classe déléguée peut obtenir la zone du conteneur parent et la taille de la zone du composant enfant, ainsi que les contraintes de zone.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CustomSingleChildLayout", - "desc": [ - "【delegate】 : délégué 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "Utilisation du décalage de CustomSingleChildLayout", - "desc": [ - "Peut utiliser la capacité de décalage du délégué pour positionner le composant enfant avec un décalage." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_it_IT.json deleted file mode 100644 index 43ddc5746..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "Layout Singolo Figlio Personalizzato", - "info": "Può contenere un componente figlio e specificare una classe delegata per disporre il componente figlio. La classe delegata può ottenere l'area del contenitore padre e le dimensioni dell'area del componente figlio, nonché i vincoli dell'area.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CustomSingleChildLayout", - "desc": [ - "【delegate】 : delegato 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "Uso dello spostamento in CustomSingleChildLayout", - "desc": [ - "È possibile utilizzare la capacità di spostamento del delegato per posizionare il componente figlio." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ja_JP.json deleted file mode 100644 index 5c5db389e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "汎用シングルチャイルドレイアウト", - "info": "1つの子コンポーネントを収容し、代理クラスを指定して子コンポーネントをレイアウトします。代理クラスは、親コンテナ領域と子コンポーネントの領域サイズ、および領域の制約状況を取得できます。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CustomSingleChildLayoutの基本使用", - "desc": [ - "【delegate】 : 代理 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "CustomSingleChildLayoutのオフセット使用", - "desc": [ - "代理のオフセット能力を利用して、子コンポーネントをオフセット位置に配置できます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ko_KR.json deleted file mode 100644 index 20753e7d9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "일반 단일 자식 레이아웃", - "info": "하나의 자식 위젯을 수용하고, 대리 클래스를 지정하여 자식 위젯을 배치합니다. 대리 클래스는 부모 컨테이너 영역과 자식 위젯의 영역 크기 및 영역 제약 조건을 얻을 수 있습니다.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CustomSingleChildLayout 기본 사용", - "desc": [ - "【delegate】 : 대리 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "CustomSingleChildLayout의 오프셋 사용", - "desc": [ - "대리의 오프셋 기능을 활용하여 자식 위젯을 오프셋 위치시킬 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_pt_PT.json deleted file mode 100644 index 6a3704d5b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "Layout de Filho Único Personalizado", - "info": "Pode acomodar um componente filho e especificar uma classe de proxy para organizar o componente filho. A classe de proxy pode obter a área do contêiner pai e o tamanho da área do componente filho, bem como as restrições da área.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CustomSingleChildLayout", - "desc": [ - "【delegate】 : proxy 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "Uso de Deslocamento do CustomSingleChildLayout", - "desc": [ - "Pode utilizar a capacidade de deslocamento do proxy para posicionar o componente filho com deslocamento." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ru_RU.json deleted file mode 100644 index d25be61c9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "Универсальный макет с одним дочерним элементом", - "info": "Может содержать один дочерний компонент и задавать класс-делегат для размещения дочернего компонента. Класс-делегат может получить область родительского контейнера и размер области дочернего компонента, а также ограничения области.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CustomSingleChildLayout", - "desc": [ - "【delegate】 : делегат 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "Использование смещения в CustomSingleChildLayout", - "desc": [ - "Можно использовать возможности смещения делегата для позиционирования дочернего компонента." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_zh-CN.json deleted file mode 100644 index d45b22026..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "通用单子布局", - "info": "可容纳一个子组件,并指定代理类对子组件进行排布。代理类可获取父容器区域和子组件的区域大小,及区域约束情况。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CustomSingleChildLayout基本使用", - "desc": [ - "【delegate】 : 代理 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "CustomSingleChildLayout的偏移使用", - "desc": [ - "可以利用代理的偏移能力,对子组件进行偏移定位。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart deleted file mode 100644 index 6295eac5d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/6/3 -/// contact me by email 1981462002@qq.com - - -class CustomSingleChildLayoutDemo extends StatelessWidget { - const CustomSingleChildLayoutDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - print('-------CustomSingleChildLayoutDemo------'); - return Container( - width: 300, - height: 200, - color: Colors.grey.withAlpha(11), - child: CustomSingleChildLayout( - delegate: _TolySingleChildLayoutDelegate(), - child: Container( - color: Colors.orange, - ), - ), - ); - } -} - -class _TolySingleChildLayoutDelegate extends SingleChildLayoutDelegate { - @override - bool shouldRelayout(SingleChildLayoutDelegate oldDelegate) { - return true; - } - - @override - Size getSize(BoxConstraints constraints) { - print('----getSize:----constraints:$constraints----'); - return super.getSize(constraints); - } - - @override - Offset getPositionForChild(Size size, Size childSize) { - print('----getPositionForChild: size:$size----childSize:$childSize----'); - return Offset(size.width / 2, 0); - } - - @override - BoxConstraints getConstraintsForChild(BoxConstraints constraints) { - print('----getConstraintsForChild:----constraints:$constraints----'); - return BoxConstraints( - maxWidth: constraints.maxWidth / 2, - maxHeight: constraints.maxHeight / 2, - minHeight: constraints.maxHeight / 4, - minWidth: constraints.maxWidth / 4, - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart deleted file mode 100644 index cfa45dbce..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart +++ /dev/null @@ -1,113 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/6/3 -/// contact me by email 1981462002@qq.com - - -class OffSetWidgetDemo extends StatelessWidget { - const OffSetWidgetDemo({Key? key}) : super(key: key); - - final List> data = const [ - { - 'offset': Offset(20, 20), - 'direction': Direction.topLeft, - }, - { - 'offset': Offset(20, -15), - 'direction': Direction.topRight, - }, - { - 'offset': Offset(-15, 20), - 'direction': Direction.bottomLeft, - }, - { - 'offset': Offset(-15, 20), - 'direction': Direction.bottomLeft, - }, - { - 'offset': Offset(15, 20), - 'direction': Direction.bottomLeft, - }, - { - 'offset': Offset(-15, -15), - 'direction': Direction.topRight, - }, - ]; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - runSpacing: 20, - children: data - .map((e) => Container( - width: 150, - height: 100, - alignment: Alignment.topRight, - color: Colors.grey.withAlpha(11), - child: OffSetWidget( - offset: e['offset'], - direction: e['direction'], - child: const Icon( - Icons.android, - size: 30, - color: Colors.green, - ), - ))) - .toList()); - } -} - -class OffSetWidget extends StatelessWidget { - final Offset offset; - final Widget child; - final Direction direction; - - const OffSetWidget( - {Key? key, this.offset = Offset.zero, - required this.child, - this.direction = Direction.topLeft}) : super(key: key); - - @override - Widget build(BuildContext context) { - return CustomSingleChildLayout( - delegate: _OffSetDelegate(offset: offset, direction: direction), - child: child, - ); - } -} - -enum Direction { topLeft, topRight, bottomLeft, bottomRight } - -class _OffSetDelegate extends SingleChildLayoutDelegate { - final Offset offset; - final Direction direction; - - _OffSetDelegate({ - this.offset = Offset.zero, - this.direction = Direction.topLeft, - }); - - @override - bool shouldRelayout(_OffSetDelegate oldDelegate) => - offset != oldDelegate.offset; - - @override - Offset getPositionForChild(Size size, Size childSize) { - double w = size.width; - double h = size.height; - double wc = childSize.width; - double hc = childSize.height; - - switch (direction) { - case Direction.topLeft: - return offset; - case Direction.topRight: - return offset.translate(w - wc - offset.dx * 2, 0); - case Direction.bottomLeft: - return offset.translate(0, h - hc - offset.dy * 2); - case Direction.bottomRight: - return offset.translate(w - wc - offset.dx * 2, h - hc - offset.dy * 2); - } - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_de_DE.json deleted file mode 100644 index 00a0aab86..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_de_DE.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "Dekorationsbox", - "info": "Kann ein Kindelement aufnehmen und es dekorieren. Die Kerneigenschaft ist decoration, mit der Rahmen, Verläufe, Schatten, Hintergrundbilder usw. festgelegt werden können.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DecoratedBox", - "desc": [ - "【decoration】 : Dekorationsobjekt 【Decoration】", - "【position】 : Vordergrundfarbe (links)/Hintergrundfarbe (rechts) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "Form und Bilddekoration von DecoratedBox", - "desc": [ - "【shape】 : Form 【BoxShape】", - "【image】 : Hintergrundbild 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "Rahmendekoration von DecoratedBox", - "desc": [ - "【border】 : Rahmen 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "Formdekoration von DecoratedBox", - "desc": [ - "Mit dem ShapeDecoration-Objekt kann die Rahmenform angegeben werden," - ] - }, - { - "file": "node5_line.dart", - "name": "Unterstreichungsdekoration von DecoratedBox", - "desc": [ - "Mit dem UnderlineTabIndicator-Objekt kann die Unterstreichung angegeben werden," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "FlutterLogoDecoration-Dekoration", - "desc": [ - "Mit dem FlutterLogoDecoration-Objekt kann die Flutter-Icon-Dekoration angegeben werden (hat keine große Bedeutung)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_en_US.json deleted file mode 100644 index 6fa9323ea..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_en_US.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "Decorated Box", - "info": "Can contain a child component and decorate it. The core property is decoration, which can set borders, gradients, shadows, background images, etc.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DecoratedBox", - "desc": [ - "【decoration】: Decoration object 【Decoration】", - "【position】: Foreground color (left)/Background color (right) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "Shape and Image Decoration of DecoratedBox", - "desc": [ - "【shape】: Shape 【BoxShape】", - "【image】: Background image 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "Border Decoration of DecoratedBox", - "desc": [ - "【border】: Border 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "Shape Decoration of DecoratedBox", - "desc": [ - "You can specify the border shape through the ShapeDecoration object," - ] - }, - { - "file": "node5_line.dart", - "name": "Bottom Line Decoration of DecoratedBox", - "desc": [ - "You can specify the bottom line through the UnderlineTabIndicator object," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "FlutterLogoDecoration Decoration", - "desc": [ - "You can specify Flutter icon decoration through the FlutterLogoDecoration object (not very useful)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_es_ES.json deleted file mode 100644 index c21db3db6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_es_ES.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "Caja Decorada", - "info": "Puede contener un componente hijo y decorarlo. La propiedad principal es decoration, que permite configurar bordes, degradados, sombras, imágenes de fondo, etc.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DecoratedBox", - "desc": [ - "【decoration】 : Objeto de decoración 【Decoration】", - "【position】 : Color de primer plano (izquierda)/Color de fondo (derecha) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "Decoración de forma e imagen en DecoratedBox", - "desc": [ - "【shape】 : Forma 【BoxShape】", - "【image】 : Imagen de fondo 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "Decoración de borde en DecoratedBox", - "desc": [ - "【border】 : Borde 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "Decoración de forma en DecoratedBox", - "desc": [ - "Se puede especificar la forma del borde mediante el objeto ShapeDecoration," - ] - }, - { - "file": "node5_line.dart", - "name": "Decoración de línea inferior en DecoratedBox", - "desc": [ - "Se puede especificar la línea inferior mediante el objeto UnderlineTabIndicator," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "Decoración con FlutterLogoDecoration", - "desc": [ - "Se puede especificar la decoración del ícono de Flutter mediante el objeto FlutterLogoDecoration (no tiene mucho uso)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_fr_FR.json deleted file mode 100644 index dc641c563..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_fr_FR.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "Boîte décorée", - "info": "Peut contenir un composant enfant et le décorer. La propriété principale est decoration, qui permet de définir des bordures, des dégradés, des ombres, des images de fond, etc.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DecoratedBox", - "desc": [ - "【decoration】 : Objet de décoration 【Decoration】", - "【position】 : Couleur de premier plan (gauche)/couleur d'arrière-plan (droite) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "Forme et image de décoration de DecoratedBox", - "desc": [ - "【shape】 : Forme 【BoxShape】", - "【image】 : Image de fond 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "Bordure de décoration de DecoratedBox", - "desc": [ - "【border】 : Bordure 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "Forme de décoration de DecoratedBox", - "desc": [ - "L'objet ShapeDecoration permet de spécifier la forme de la bordure," - ] - }, - { - "file": "node5_line.dart", - "name": "Ligne de décoration de DecoratedBox", - "desc": [ - "L'objet UnderlineTabIndicator permet de spécifier la ligne de fond," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "Décoration FlutterLogoDecoration", - "desc": [ - "L'objet FlutterLogoDecoration permet de spécifier la décoration de l'icône Flutter (sans grande utilité)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_it_IT.json deleted file mode 100644 index 9fbe10468..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_it_IT.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "Scatola decorata", - "info": "Può contenere un componente figlio e decorarlo. La proprietà principale è decoration, che può impostare bordi, gradienti, ombre, immagini di sfondo, ecc.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di DecoratedBox", - "desc": [ - "【decoration】 : oggetto decorativo 【Decoration】", - "【position】 : colore in primo piano (sinistra)/colore di sfondo (destra) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "Decorazione di forma e immagine di DecoratedBox", - "desc": [ - "【shape】 : forma 【BoxShape】", - "【image】 : immagine di sfondo 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "Decorazione del bordo di DecoratedBox", - "desc": [ - "【border】 : bordo 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "Decorazione della forma di DecoratedBox", - "desc": [ - "È possibile specificare la forma del bordo tramite l'oggetto ShapeDecoration," - ] - }, - { - "file": "node5_line.dart", - "name": "Decorazione della linea di base di DecoratedBox", - "desc": [ - "È possibile specificare la linea di base tramite l'oggetto UnderlineTabIndicator," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "Decorazione FlutterLogoDecoration", - "desc": [ - "È possibile specificare la decorazione dell'icona Flutter tramite l'oggetto FlutterLogoDecoration (non ha un grande utilità)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ja_JP.json deleted file mode 100644 index 21dabc4fc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ja_JP.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "装飾ボックス", - "info": "子コンポーネントを収容し、装飾することができます。コアプロパティはdecorationで、枠線、グラデーション、影、背景画像などを設定できます。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DecoratedBoxの基本使用", - "desc": [ - "【decoration】 : 装飾オブジェクト 【Decoration】", - "【position】 : 前景色(左)/背景色(右) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "DecoratedBoxの形状と画像装飾", - "desc": [ - "【shape】 : 形状 【BoxShape】", - "【image】 : 背景画像 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "DecoratedBoxの枠線装飾", - "desc": [ - "【border】 : 枠線 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "DecoratedBoxの形状装飾", - "desc": [ - "ShapeDecorationオブジェクトを使用して枠線の形状を指定できます," - ] - }, - { - "file": "node5_line.dart", - "name": "DecoratedBoxの下線装飾", - "desc": [ - "UnderlineTabIndicatorオブジェクトを使用して下線を指定できます," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "FlutterLogoDecoration装飾", - "desc": [ - "FlutterLogoDecorationオブジェクトを使用してFlutterアイコン装飾を指定できます(特に大きな効果はありません)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ko_KR.json deleted file mode 100644 index feff512fa..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ko_KR.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "장식 상자", - "info": "하위 컴포넌트를 포함할 수 있으며, 이를 장식할 수 있습니다. 핵심 속성은 decoration으로, 테두리, 그라데이션, 그림자, 배경 이미지 등을 설정할 수 있습니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DecoratedBox 기본 사용", - "desc": [ - "【decoration】 : 장식 객체 【Decoration】", - "【position】 : 전경색(왼쪽)/배경색(오른쪽) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "DecoratedBox 형태와 이미지 장식", - "desc": [ - "【shape】 : 형태 【BoxShape】", - "【image】 : 배경 이미지 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "DecoratedBox 테두리 장식", - "desc": [ - "【border】 : 테두리 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "DecoratedBox 형태 장식", - "desc": [ - "ShapeDecoration 객체를 통해 테두리 형태를 지정할 수 있습니다," - ] - }, - { - "file": "node5_line.dart", - "name": "DecoratedBox 밑줄 장식", - "desc": [ - "UnderlineTabIndicator 객체를 통해 밑줄을 지정할 수 있습니다," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "FlutterLogoDecoration 장식", - "desc": [ - "FlutterLogoDecoration 객체를 통해 Flutter 아이콘 장식을 지정할 수 있습니다(별다른 기능은 없습니다)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_pt_PT.json deleted file mode 100644 index c8a9195b2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_pt_PT.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "Caixa Decorada", - "info": "Pode conter um componente filho e decorá-lo. A propriedade principal é decoration, que pode definir bordas, gradientes, sombras, imagens de fundo, etc.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DecoratedBox", - "desc": [ - "【decoration】 : Objeto de decoração 【Decoration】", - "【position】 : Cor de primeiro plano (esquerda)/Cor de fundo (direita) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "Forma e Decoração de Imagem do DecoratedBox", - "desc": [ - "【shape】 : Forma 【BoxShape】", - "【image】 : Imagem de fundo 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "Decoração de Borda do DecoratedBox", - "desc": [ - "【border】 : Borda 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "Decoração de Forma do DecoratedBox", - "desc": [ - "O objeto ShapeDecoration pode especificar a forma da borda," - ] - }, - { - "file": "node5_line.dart", - "name": "Decoração de Linha de Base do DecoratedBox", - "desc": [ - "O objeto UnderlineTabIndicator pode especificar a linha de base," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "Decoração com FlutterLogoDecoration", - "desc": [ - "O objeto FlutterLogoDecoration pode especificar a decoração do ícone Flutter (não tem grande utilidade)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ru_RU.json deleted file mode 100644 index afd56ba99..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ru_RU.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "Декорированный блок", - "info": "Может содержать один дочерний компонент и декорировать его. Основное свойство - decoration, которое позволяет настроить границы, градиенты, тени, фоновые изображения и т.д.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DecoratedBox", - "desc": [ - "【decoration】 : Объект декора 【Decoration】", - "【position】 : Передний план (слева)/Задний план (справа) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "Форма и изображение декора в DecoratedBox", - "desc": [ - "【shape】 : Форма 【BoxShape】", - "【image】 : Фоновое изображение 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "Декорирование границ в DecoratedBox", - "desc": [ - "【border】 : Граница 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "Декорирование формы в DecoratedBox", - "desc": [ - "С помощью объекта ShapeDecoration можно указать форму границы," - ] - }, - { - "file": "node5_line.dart", - "name": "Декорирование нижней линии в DecoratedBox", - "desc": [ - "С помощью объекта UnderlineTabIndicator можно указать нижнюю линию," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "Декорирование FlutterLogoDecoration", - "desc": [ - "С помощью объекта FlutterLogoDecoration можно указать декорирование иконкой Flutter (не имеет особого значения)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_zh-CN.json deleted file mode 100644 index 1a57df640..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_zh-CN.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "装饰盒", - "info": "可容纳一个子组件,可将其进行装饰。核心属性为decoration,可设置边线、渐变、阴影、背景图等。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DecoratedBox基本使用", - "desc": [ - "【decoration】 : 装饰对象 【Decoration】", - "【position】 : 前景色(左)/后景色(右) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "DecoratedBox形状和图片装饰", - "desc": [ - "【shape】 : 形状 【BoxShape】", - "【image】 : 背景图片 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "DecoratedBox边线装饰", - "desc": [ - "【border】 : 边线 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "DecoratedBox形状装饰", - "desc": [ - "通过ShapeDecoration对象可指定边线形状," - ] - }, - { - "file": "node5_line.dart", - "name": "DecoratedBox底线装饰", - "desc": [ - "通过UnderlineTabIndicator对象可指定底线," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "FlutterLogoDecoration装饰", - "desc": [ - "通过FlutterLogoDecoration对象可指定Flutter图标装饰(并没有什么太大的作用)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node1_base.dart deleted file mode 100644 index bfd90d69c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node1_base.dart +++ /dev/null @@ -1,44 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class BoxDecorationDemo extends StatelessWidget { - const BoxDecorationDemo({Key? key}) : super(key: key); - - final List rainbow = const [ - 0xffff0000, - 0xffFF7F00, - 0xffFFFF00, - 0xff00FF00, - 0xff00FFFF, - 0xff0000FF, - 0xff8B00FF - ]; - - @override - Widget build(BuildContext context) { - return DecoratedBox( - position: DecorationPosition.background, - decoration: BoxDecoration( - gradient: LinearGradient( - stops: const [0.0, 1 / 6, 2 / 6, 3 / 6, 4 / 6, 5 / 6, 1.0], - colors: rainbow.map((e) => Color(e)).toList()), - borderRadius: const BorderRadius.only( - topLeft: Radius.circular(20), - bottomRight: Radius.circular(20), - ), - boxShadow: const [ - BoxShadow( - color: Colors.orangeAccent, - offset: Offset(1, 1), - blurRadius: 10, - spreadRadius: 1), - ]), - child: Icon( - Icons.android, - size: 80, - color: Colors.black.withAlpha(123), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node2_image.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node2_image.dart deleted file mode 100644 index 850cfb049..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node2_image.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class ShapeImageDemo extends StatelessWidget { - const ShapeImageDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const DecoratedBox( - decoration: BoxDecoration( - shape: BoxShape.circle, - image: DecorationImage( - fit: BoxFit.cover, - image: AssetImage( - 'assets/images/wy_200x300.webp', - ))), - child: SizedBox( - height: 80, - width: 80, - child: Icon( - Icons.ac_unit, - color: Colors.white, - size: 40, - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node3_border.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node3_border.dart deleted file mode 100644 index a1aec5cd6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node3_border.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class BorderDemo extends StatelessWidget { - const BorderDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return DecoratedBox( - position: DecorationPosition.foreground, - decoration: const BoxDecoration( - border: Border( - bottom: BorderSide(color: Colors.orange, width: 2), - top: BorderSide(color: Colors.orange, width: 2)), - ), - child: SizedBox( - height: 80, - width: 100, - child: Image.asset( - 'assets/images/wy_200x300.webp', - fit: BoxFit.cover, - ), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node4_shape.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node4_shape.dart deleted file mode 100644 index 140000141..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node4_shape.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class ShapeDecorationDemo extends StatelessWidget { - const ShapeDecorationDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const DecoratedBox( - decoration: ShapeDecoration( - shadows: [ - BoxShadow( - color: Colors.orangeAccent, - offset: Offset(0, 0), - blurRadius: 2, - spreadRadius: 1), - ], - image: DecorationImage( - fit: BoxFit.cover, - image: AssetImage( - 'assets/images/wy_200x300.webp', - )), - shape: CircleBorder( - side: BorderSide(width: 1.0, color: Colors.orangeAccent), - )), - child: SizedBox( - height: 100, - width: 100, - child: Icon( - Icons.ac_unit, - color: Colors.white, - size: 40, - ), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node5_line.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node5_line.dart deleted file mode 100644 index 95ed6d9fa..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node5_line.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class UnderlineTabIndicatorDemo extends StatelessWidget { - const UnderlineTabIndicatorDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const DecoratedBox( - decoration: UnderlineTabIndicator( - insets: EdgeInsets.symmetric(horizontal: 5, vertical: -5), - borderSide: BorderSide(color: Colors.orange, width: 2)), - child: Icon( - Icons.ac_unit, - color: Colors.blue, - size: 40, - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node6_flutterLogo.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node6_flutterLogo.dart deleted file mode 100644 index 644f732a6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node6_flutterLogo.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - - -class FlutterLogoDecorationDemo extends StatelessWidget { - const FlutterLogoDecorationDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const DecoratedBox( - decoration: FlutterLogoDecoration( -// darkColor: Colors.orange, -// lightColor: Colors.deepPurpleAccent, - margin: EdgeInsets.all(8), - style: FlutterLogoStyle.stacked), - child: SizedBox( - width: 100, - height: 100, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_de_DE.json deleted file mode 100644 index 72b9e13a9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "Transparenzübergang", - "info": "Kann ein Kindelement aufnehmen und eine Transparenzverlaufsanimation durchführen, wobei ein Animator opacity erforderlich ist.", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von FadeTransition", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【opacity】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_en_US.json deleted file mode 100644 index 782154386..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "Fade Transition", - "info": "Can contain a child component and make it perform a fade animation, requires an animator opacity.", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of FadeTransition", - "desc": [ - "【child】 : Child Component 【Widget】", - "【opacity】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_es_ES.json deleted file mode 100644 index b40ee1630..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "Transición de desvanecimiento", - "info": "Puede contener un componente hijo y hacer que realice una animación de cambio de opacidad, requiere un animador de opacidad.", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de FadeTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【opacity】 : Animación 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_fr_FR.json deleted file mode 100644 index a0336deec..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "Transition de transparence", - "info": "Peut contenir un composant enfant et lui appliquer une animation de transition d'opacité, nécessite un animateur opacity.", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de FadeTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【opacity】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_it_IT.json deleted file mode 100644 index 9ba5f4109..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "Transizione di trasparenza", - "info": "Può contenere un componente figlio e fargli eseguire un'animazione di dissolvenza della trasparenza, richiede un animatore opacity.", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di FadeTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【opacity】 : Animazione 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ja_JP.json deleted file mode 100644 index 5dbe65a08..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "フェードトランジション", - "info": "1つの子コンポーネントを収容し、透明度の変化アニメーションを行わせることができます。アニメーターopacityを提供する必要があります。", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeTransitionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【opacity】 : アニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ko_KR.json deleted file mode 100644 index 1bae8dc2c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "투명도 전환", - "info": "하나의 자식 위젯을 포함할 수 있으며, 투명도가 점진적으로 변하는 애니메이션을 수행합니다. 애니메이터 opacity를 제공해야 합니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeTransition 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【opacity】 : 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_pt_PT.json deleted file mode 100644 index 20a6bf530..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "Transição de Transparência", - "info": "Pode conter um componente filho e fazer com que ele realize uma animação de transição de transparência, é necessário fornecer o animador opacity.", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do FadeTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【opacity】 : Animação 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ru_RU.json deleted file mode 100644 index 3814c3646..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "Прозрачное преобразование", - "info": "Может содержать один дочерний компонент и выполнять анимацию изменения прозрачности, требует предоставления аниматора opacity.", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование FadeTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【opacity】 : Анимация 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_zh-CN.json deleted file mode 100644 index 540920f70..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "透明变换", - "info": "可容纳一个子组件,并使其进行透明度渐变动画,需要提供动画器opacity。", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【opacity】 : 动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/node1_base.dart deleted file mode 100644 index 83332841d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/node1_base.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomFadeTransition extends StatefulWidget { - const CustomFadeTransition({Key? key}) : super(key: key); - - @override - _CustomFadeTransitionState createState() => _CustomFadeTransitionState(); -} - -class _CustomFadeTransitionState extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 2), - ); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Container( - color: Colors.grey.withAlpha(22), - width: 100, - height: 100, - child: FadeTransition( - opacity: CurvedAnimation(parent: _ctrl, curve: Curves.linear), - child: const Icon(Icons.android, color: Colors.green, size: 60), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_de_DE.json deleted file mode 100644 index 3a4aa12fd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "Anpassungsbox", - "info": "Kann ein Kindelement aufnehmen, verwendet die fit-Eigenschaft, um den Anpassungsmodus des Kindelements im Verhältnis zum Elternelement zu bestimmen, und verfügt über die Ausrichtungseigenschaft alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von FittedBox", - "desc": [ - "【child】: Kindelement 【Widget】", - "【fit】: Anpassungsmodus 【BoxFit】", - "【alignment】: Ausrichtung 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_en_US.json deleted file mode 100644 index 8c894a017..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "Fitted Box", - "info": "Can accommodate a child component, using the fit property to determine the adaptation mode of the child component area relative to the parent component, and has the alignment property.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of FittedBox", - "desc": [ - "【child】: Child component 【Widget】", - "【fit】: Adaptation mode 【BoxFit】", - "【alignment】: Alignment method 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_es_ES.json deleted file mode 100644 index 144cf6a15..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "Caja ajustada", - "info": "Puede contener un componente hijo, utiliza la propiedad fit para determinar el modo de adaptación del área del componente hijo en relación con el componente padre, y tiene la propiedad de alineación alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de FittedBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【fit】 : Modo de adaptación 【BoxFit】", - "【alignment】 : Modo de alineación 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_fr_FR.json deleted file mode 100644 index 2e8ade464..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "Boîte ajustée", - "info": "Peut contenir un composant enfant, utilise la propriété fit pour déterminer le mode d'adaptation de la zone du composant enfant par rapport au composant parent, possède la propriété d'alignement alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de FittedBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【fit】 : Mode d'adaptation 【BoxFit】", - "【alignment】 : Mode d'alignement 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_it_IT.json deleted file mode 100644 index 2a64e52a2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "Scatola adattata", - "info": "Può contenere un componente figlio, utilizza la proprietà fit per determinare la modalità di adattamento dell'area del componente figlio rispetto al componente padre, ha la proprietà di allineamento alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di FittedBox", - "desc": [ - "【child】 : componente figlio 【Widget】", - "【fit】 : modalità di adattamento 【BoxFit】", - "【alignment】 : modalità di allineamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ja_JP.json deleted file mode 100644 index 0e7173ddc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "フィットボックス", - "info": "1つの子コンポーネントを収容でき、fitプロパティを使用して子コンポーネントの領域を親コンポーネントに対する適応モードを決定し、alignmentプロパティを持っています。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FittedBoxの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【fit】 : 適応モード 【BoxFit】", - "【alignment】 : 整列方法 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ko_KR.json deleted file mode 100644 index bfee7328f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "적응 박스", - "info": "하위 컴포넌트를 수용할 수 있으며, fit 속성을 사용하여 하위 컴포넌트 영역이 상위 컴포넌트에 대한 적응 모드를 결정합니다. alignment 속성을 가지고 있습니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FittedBox 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【fit】 : 적응 모드 【BoxFit】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_pt_PT.json deleted file mode 100644 index 4f31e07c5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "Caixa Ajustada", - "info": "Pode conter um componente filho, usando a propriedade fit para determinar o modo de ajuste da área do componente filho em relação ao componente pai, possui a propriedade de alinhamento alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do FittedBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【fit】 : Modo de ajuste 【BoxFit】", - "【alignment】 : Modo de alinhamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ru_RU.json deleted file mode 100644 index e8f902e0f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "Адаптивный бокс", - "info": "Может содержать один дочерний компонент, использует свойство fit для определения режима адаптации области дочернего компонента относительно родительского компонента, имеет свойство выравнивания alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование FittedBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【fit】 : Режим адаптации 【BoxFit】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_zh-CN.json deleted file mode 100644 index 3304f7748..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "适应盒", - "info": "可容纳一个子组件,使用fit属性决定子组件区域相当于父组件的适应模式,拥有对齐属性alignment。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FittedBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【fit】 : 适应模式 【BoxFit】", - "【alignment】 : 对齐方式 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/node1_base.dart deleted file mode 100644 index 8eeabb96e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/node1_base.dart +++ /dev/null @@ -1,87 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomFittedBox extends StatefulWidget { - const CustomFittedBox({Key? key}) : super(key: key); - - @override - _CustomFittedBoxState createState() => _CustomFittedBoxState(); -} - -class _CustomFittedBoxState extends State { - double _childW = 20; - double _childH = 30; - - final List rainbow = const [ - 0xffff0000, - 0xffFF7F00, - 0xffFFFF00, - 0xff00FF00, - 0xff00FFFF, - 0xff0000FF, - 0xff8B00FF - ]; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Wrap( - spacing: 10, - runSpacing: 10, - children: BoxFit.values - .map((mode) => Column( - children: [ - _buildChild(mode), - const SizedBox(height: 10), - Text(mode.toString().split('.')[1]) - ], - )) - .toList()), - _buildSlider() - ], - ); - } - - Widget _buildChild(BoxFit m) { - return Container( - color: Colors.grey.withAlpha(44), - width: 80, - height: 60, - child: FittedBox( - fit: m, - child: Container( - width: _childW, - height: _childH, - decoration: BoxDecoration( - //添加渐变色 - gradient: LinearGradient( - stops: const[0.0, 1 / 6, 2 / 6, 3 / 6, 4 / 6, 5 / 6, 1.0], - colors: rainbow.map((e) => Color(e)).toList()), - ), - ), - ), - ); - } - - Widget _buildSlider() => Column( - children: [ - Slider( - min: 10, - max: 150, - divisions: 100, - label: '子宽度:' + _childW.toStringAsFixed(1), - value: _childW, - onChanged: (v) => setState(() => _childW = v)), - Slider( - min: 10, - max: 150, - divisions: 100, - label: '子高度:' + _childH.toStringAsFixed(1), - value: _childH, - onChanged: (v) => setState(() => _childH = v)), - ], - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_de_DE.json deleted file mode 100644 index c0c0f1a53..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "Teilverschiebung", - "info": "Verschiebt das Kindelement durch die offset-Eigenschaft, die Verschiebung ist OffSet horizontal/vertikal * Größe des Kindelements.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von FractionalTranslation", - "desc": [ - "【translation】 : Verschiebungsteilungswert 【Offset】", - "【child】: Kindelement 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_en_US.json deleted file mode 100644 index aaad7c9a3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "Fractional Translation", - "info": "Offset the child component through the offset property, the offset is the horizontal and vertical OffSet * the size of the child component.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of FractionalTranslation", - "desc": [ - "【translation】: Offset fraction value 【Offset】", - "【child】: Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_es_ES.json deleted file mode 100644 index aab50acbb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "Desplazamiento fraccional", - "info": "Desplaza el componente hijo mediante la propiedad offset, la cantidad de desplazamiento es el tamaño del componente hijo multiplicado por el OffSet horizontal y vertical.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de FractionalTranslation", - "desc": [ - "【translation】: Valor de desplazamiento fraccional 【Offset】", - "【child】: Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_fr_FR.json deleted file mode 100644 index 34d54e5cd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "Translation fractionnaire", - "info": "Déplace le composant enfant via la propriété offset, le déplacement est égal à la taille du composant enfant multipliée par les valeurs horizontale et verticale de l'Offset.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de FractionalTranslation", - "desc": [ - "【translation】 : Valeur de déplacement fractionnaire 【Offset】", - "【child】: Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_it_IT.json deleted file mode 100644 index 38fac9c2c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "Traduzione Frazionaria", - "info": "Sposta il componente figlio tramite la proprietà offset, dove lo spostamento è determinato da OffSet orizzontale e verticale moltiplicato per la dimensione del componente figlio.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di FractionalTranslation", - "desc": [ - "【translation】 : Valore di spostamento frazionario 【Offset】", - "【child】: Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ja_JP.json deleted file mode 100644 index b74f4b4a3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "分度オフセット", - "info": "offsetプロパティを使用して子コンポーネントをオフセットします。オフセット量はOffSetの横縦×子コンポーネントのサイズです。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FractionalTranslationの基本使用", - "desc": [ - "【translation】 : オフセット分度値 【Offset】", - "【child】: 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ko_KR.json deleted file mode 100644 index 670b7fc3d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "분할 오프셋", - "info": "offset 속성을 통해 자식 컴포넌트를 오프셋하며, 오프셋량은 OffSet의 가로 및 세로 * 자식 컴포넌트 크기입니다.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FractionalTranslation 기본 사용", - "desc": [ - "【translation】 : 오프셋 분할 값 【Offset】", - "【child】: 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_pt_PT.json deleted file mode 100644 index b988006fc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "Deslocamento Fracionado", - "info": "Desloca o componente filho através da propriedade offset, onde o deslocamento é o tamanho do componente filho multiplicado pelo valor horizontal e vertical do Offset.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do FractionalTranslation", - "desc": [ - "【translation】 : Valor de deslocamento fracionado 【Offset】", - "【child】: Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ru_RU.json deleted file mode 100644 index a8e840894..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "Дробное смещение", - "info": "Смещение дочернего компонента с помощью свойства offset, величина смещения равна OffSet по горизонтали и вертикали * размер дочернего компонента.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование FractionalTranslation", - "desc": [ - "【translation】 : Значение дробного смещения 【Offset】", - "【child】: Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_zh-CN.json deleted file mode 100644 index e04c12b92..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "分度偏移", - "info": "通过offset属性将子组件进行偏移,偏移量为OffSet横纵*子组件大小。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FractionalTranslation基本使用", - "desc": [ - "【translation】 : 偏移分度值 【Offset】", - "【child】: 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/node1_base.dart deleted file mode 100644 index 767896812..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class FractionalTranslationDemo extends StatefulWidget { - const FractionalTranslationDemo({Key? key}) : super(key: key); - - @override - _FractionalTranslationDemoState createState() => - _FractionalTranslationDemoState(); -} - -class _FractionalTranslationDemoState extends State { - double dx = 0.0; - double dy = 0.0; - - @override - Widget build(BuildContext context) { - print(dx); - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - width: 200, - height: 100, - alignment: Alignment.topLeft, - color: Colors.grey.withAlpha(33), - child: FractionalTranslation( - translation: Offset(dx, dy), - child: const Icon( - Icons.android, - color: Colors.green, - ), - ), - ), - _buildSliderX(), - _buildSliderY() - ], - ); - } - - Widget _buildSliderX() => Slider( - min: -2.0, - max: 10.0, - value: dx, - divisions: 100, - label: 'dx:${dx.toStringAsFixed(1)}', - onChanged: (v) => setState(() => dx = v), - ); - - - Widget _buildSliderY() => Slider( - min: -2.0, - max: 6.0, - value: dy, - divisions: 100, - label: 'dy:${dy.toStringAsFixed(1)}', - onChanged: (v) => setState(() => dy = v), - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_de_DE.json deleted file mode 100644 index 6b1d6f63c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "Teilweise Größenbox", - "info": "Kann ein Kindelement aufnehmen, gibt die Breiten- und Höhenanteile an, begrenzt den Bereich des Kindelements auf die Breite und Höhe des Elterncontainers * die jeweiligen Anteile sowie die Ausrichtung alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von FractionallySizedBox", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【widthFactor】 : Breitenanteil 【double】", - "【heightFactor】 : Höhenanteil 【double】", - "【alignment】 : Ausrichtung 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_en_US.json deleted file mode 100644 index f2f27034b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "FractionallySizedBox", - "info": "Can contain a child component, specify width and height fractions, limit the child component area to the parent container's width and height * each fraction, and alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of FractionallySizedBox", - "desc": [ - "【child】 : Child component 【Widget】", - "【widthFactor】 : Width fraction 【double】", - "【heightFactor】 : Height fraction 【double】", - "【alignment】 : Alignment 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_es_ES.json deleted file mode 100644 index b78005e44..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "Caja de tamaño fraccional", - "info": "Puede contener un componente hijo, especifica la proporción de ancho y alto, limita el área del componente hijo al ancho y alto del contenedor padre multiplicado por cada proporción, y la alineación.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de FractionallySizedBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【widthFactor】 : Proporción de ancho 【double】", - "【heightFactor】 : Proporción de alto 【double】", - "【alignment】 : Alineación 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_fr_FR.json deleted file mode 100644 index 0dc0f2a24..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "Boîte à taille fractionnée", - "info": "Peut contenir un composant enfant, spécifie le taux de largeur et de hauteur, limite la zone du composant enfant à la largeur et à la hauteur du conteneur parent * chaque taux, ainsi que l'alignement.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de FractionallySizedBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【widthFactor】 : Taux de largeur 【double】", - "【heightFactor】 : Taux de hauteur 【double】", - "【alignment】 : Mode d'alignement 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_it_IT.json deleted file mode 100644 index dd2e681f2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "Scatola a Frazione", - "info": "Può contenere un componente figlio, specifica la frazione di larghezza e altezza, limita l'area del componente figlio alla larghezza e altezza del contenitore padre * ciascuna frazione, e il modo di allineamento alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di FractionallySizedBox", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【widthFactor】 : Frazione di larghezza 【double】", - "【heightFactor】 : Frazione di altezza 【double】", - "【alignment】 : Modo di allineamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ja_JP.json deleted file mode 100644 index ca0219d04..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "分率ボックス", - "info": "子コンポーネントを収容し、幅と高さの分率を指定し、子コンポーネントの領域を親コンテナの幅と高さ×各分率に制限し、および配置方法alignmentを指定します。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FractionallySizedBoxの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【widthFactor】 : 幅分率 【double】", - "【heightFactor】 : 高さ分率 【double】", - "【alignment】 : 配置方法 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ko_KR.json deleted file mode 100644 index a9b983294..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "분율 박스", - "info": "하위 컴포넌트를 수용할 수 있으며, 너비와 높이의 분율을 지정하여 하위 컴포넌트의 영역을 부모 컨테이너의 너비와 높이에 각 분율을 곱한 값으로 제한하고, 정렬 방식을 지정합니다.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FractionallySizedBox 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【widthFactor】 : 너비 분율 【double】", - "【heightFactor】 : 높이 분율 【double】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_pt_PT.json deleted file mode 100644 index 291294b90..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "Caixa de Tamanho Fracionado", - "info": "Pode conter um componente filho, especifica a taxa de largura e altura, limitando a área do componente filho à largura e altura do contêiner pai * cada taxa, e o alinhamento.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do FractionallySizedBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【widthFactor】 : Taxa de largura 【double】", - "【heightFactor】 : Taxa de altura 【double】", - "【alignment】 : Alinhamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ru_RU.json deleted file mode 100644 index 65d44be0f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "Дробный контейнер", - "info": "Может содержать один дочерний компонент, задает дробные значения ширины и высоты, ограничивая область дочернего компонента шириной и высотой родительского контейнера, умноженными на соответствующие дроби, а также способ выравнивания alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование FractionallySizedBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【widthFactor】 : Дробное значение ширины 【double】", - "【heightFactor】 : Дробное значение высоты 【double】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_zh-CN.json deleted file mode 100644 index fd62f8077..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "分率盒", - "info": "可容纳一个子组件,指定宽高分率,限定子组件区域为父容器宽高*各分率,及对齐方式alignment。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FractionallySizedBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【widthFactor】 : 宽分率 【double】", - "【heightFactor】 : 高分率 【double】", - "【alignment】 : 对齐方式 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/node1_base.dart deleted file mode 100644 index 66b97ef32..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/node1_base.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomFractionallySizedBox extends StatefulWidget { - const CustomFractionallySizedBox({Key? key}) : super(key: key); - - @override - _CustomFractionallySizedBoxState createState() => - _CustomFractionallySizedBoxState(); -} - -class _CustomFractionallySizedBoxState - extends State { - double _hf = 0.5; - double _wf = 0.4; - - @override - Widget build(BuildContext context) { - Widget box = FractionallySizedBox( - widthFactor: _wf, - heightFactor: _hf, - alignment: Alignment.center, - child: Container(color: Colors.orange), - ); - return Column( - children: [ - Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 100, - child: box), - _buildSlider() - ], - ); - } - - Widget _buildSlider() => Column( - children: [ - Slider( - divisions: 20, - min: 0.0, - max: 2, - label: '宽分率:' + _wf.toStringAsFixed(1), - value: _wf, - onChanged: (v) => setState(() => _wf = v)), - Slider( - divisions: 20, - min: 0.0, - max: 2, - label: '高分率:' + _hf.toStringAsFixed(1), - value: _hf, - onChanged: (v) => setState(() => _hf = v)), - ], - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_de_DE.json deleted file mode 100644 index 05561221c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "Ignoriere Klicks", - "info": "Enthält ein Kind-Widget und kann durch Festlegen der Eigenschaft ignoring entscheiden, ob das Kind Gestenereignisse ignoriert. Es selbst empfängt keine Ereignisse.", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von IgnorePointer", - "desc": [ - "【child】 : Kind-Widget 【Widget】", - "【ignoring】 : Ob Ereignisse ignoriert werden sollen 【bool】", - "Wie unten gezeigt, wenn der Switch ausgewählt ist, ist ignoring true, und die Schaltflächenereignisse werden gesperrt und können nicht geklickt werden." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_en_US.json deleted file mode 100644 index 9c643e1ec..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "Ignore Click", - "info": "Contains a child component, and it can decide whether the child ignores gesture events by specifying the ignoring property. It does not accept events itself.", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of IgnorePointer", - "desc": [ - "【child】 : Child component 【Widget】", - "【ignoring】 : Whether to ignore events 【bool】", - "As shown below, when the Switch is selected, ignoring is true, and the button event will be locked and cannot be clicked." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_es_ES.json deleted file mode 100644 index 1c1c9c8f2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "Ignorar clic", - "info": "Contiene un componente hijo, y puede decidir si el hijo ignora los eventos de gestos especificando la propiedad ignoring, mientras que él mismo no acepta eventos.", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de IgnorePointer", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【ignoring】 : Si se ignoran los eventos 【bool】", - "A continuación, cuando el Switch está seleccionado, ignoring es true, y los eventos del botón se bloquearán, no se podrá hacer clic." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_fr_FR.json deleted file mode 100644 index 9cf81b6e0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "Ignorer les clics", - "info": "Contient un composant enfant, et peut décider si l'enfant ignore les événements de geste en spécifiant la propriété ignoring, lui-même n'accepte pas les événements.", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'IgnorePointer", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【ignoring】 : Ignorer les événements 【bool】", - "Comme ci-dessous, lorsque le Switch est sélectionné, ignoring est true, l'événement du bouton sera verrouillé et ne pourra pas être cliqué." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_it_IT.json deleted file mode 100644 index cae053ba8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "Ignora Clic", - "info": "Contiene un componente figlio e può decidere se il figlio ignora gli eventi del gesto specificando l'attributo ignoring, mentre esso stesso non accetta eventi.", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di IgnorePointer", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【ignoring】 : Se ignorare gli eventi 【bool】", - "Come mostrato di seguito, quando Switch è selezionato, ignoring è true e l'evento del pulsante sarà bloccato, non cliccabile." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ja_JP.json deleted file mode 100644 index 433c594c2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "クリックを無視", - "info": "子コンポーネントを含み、ignoring属性を指定することで、子がジェスチャーイベントを無視するかどうかを決定できます。それ自体はイベントを受け取りません。", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IgnorePointerの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【ignoring】 : イベントを無視するかどうか 【bool】", - "以下のように、Switchが選択されている場合、ignoringがtrueになり、ボタンイベントがロックされ、クリックできなくなります。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ko_KR.json deleted file mode 100644 index 15024f6dc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "클릭 무시", - "info": "하위 위젯을 포함하며, ignoring 속성을 지정하여 하위 위젯이 제스처 이벤트를 무시할지 여부를 결정할 수 있습니다. 그 자체는 이벤트를 받지 않습니다.", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IgnorePointer 기본 사용법", - "desc": [ - "【child】 : 하위 위젯 【Widget】", - "【ignoring】 : 이벤트 무시 여부 【bool】", - "아래 예시에서 Switch가 선택되면 ignoring이 true가 되어 버튼 이벤트가 잠기고 클릭할 수 없게 됩니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_pt_PT.json deleted file mode 100644 index 27dfa8467..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "Ignorar Cliques", - "info": "Contém um componente filho e pode decidir se o filho ignora eventos de gestos especificando o atributo ignoring, ele próprio não aceita eventos.", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do IgnorePointer", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【ignoring】 : Se deve ignorar eventos 【bool】", - "Abaixo, quando o Switch está selecionado, ignoring é true, e o evento do botão será bloqueado, não podendo ser clicado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ru_RU.json deleted file mode 100644 index 5acc73202..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "Игнорировать клик", - "info": "Содержит дочерний компонент, который может игнорировать жестовые события в зависимости от указанного свойства ignoring, сам по себе не принимает события.", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование IgnorePointer", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【ignoring】 : Игнорировать ли события 【bool】", - "Как показано ниже, когда Switch выбран, ignoring становится true, и события кнопки блокируются, делая её неактивной для кликов." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_zh-CN.json deleted file mode 100644 index 19964c2b7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "忽视点击", - "info": "容纳一个子组件,可以通过指定ignoring属性,来决定孩子是否忽略手势事件,其本身不接受事件。", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IgnorePointer基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【ignoring】 : 是否忽视事件 【bool】", - "如下,Switch选中时ignoring为true,按钮事件将被锁定,无法点击。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/node1_base.dart deleted file mode 100644 index 699d88a70..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/node1_base.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - - -class CustomIgnorePointer extends StatefulWidget { - const CustomIgnorePointer({Key? key}) : super(key: key); - - @override - _CustomIgnorePointerState createState() => _CustomIgnorePointerState(); -} - -class _CustomIgnorePointerState extends State { - bool _ignore = false; - - @override - Widget build(BuildContext context) { - return Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - GestureDetector( - onTap: (){ - print('IgnorePointer'); - }, - child: IgnorePointer( - ignoring: _ignore, - child: _buildButton(), - ), - ), - _buildSwitch(), - Text(!_ignore ? '允许点击' : '点击已锁定') - ], - ); - } - - Widget _buildButton() => ElevatedButton( - child: const Text( - 'To About', - style: TextStyle(color: Colors.white), - ), - onPressed: () => Navigator.of(context).pushNamed('AboutMePage')); - - Widget _buildSwitch() => Switch( - value: _ignore, - onChanged: (v) { - setState(() { - _ignore = v; - }); - }); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_de_DE.json deleted file mode 100644 index 03f46e2ea..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_de_DE.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "Bildfilter", - "info": "Mit dem ImageFilter-Bildfilter können beliebige Komponenten mit Effekten wie Gaußscher Unschärfe, Farbfiltern, Transformationen usw. verarbeitet werden.", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "ImageFilter Gaußsche Unschärfe", - "desc": [ - "【imageFilter】 : Bildfilter 【ImageFilter】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "ImageFilter Farbeffekt", - "desc": [ - "Farbfilter wird durch das ColorFilter-Objekt implementiert." - ] - }, - { - "file": "node3_matrix.dart", - "name": "ImageFilter Transformationseffekt", - "desc": [ - "Matrix-Transformation durch ImageFilter.matrix-Konstruktion, aber eher unbrauchbar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_en_US.json deleted file mode 100644 index 3501a59e0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_en_US.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "Image Filter", - "info": "Through the ImageFilter image filter, any component can be processed with special effects, including but not limited to Gaussian blur, color filter, transformation, etc.", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "ImageFilter Gaussian Blur", - "desc": [ - "【imageFilter】 : Image filter 【ImageFilter】", - "【child】 : Child component 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "ImageFilter Color Effect", - "desc": [ - "Achieve color filter through the ColorFilter object." - ] - }, - { - "file": "node3_matrix.dart", - "name": "ImageFilter Transformation Effect", - "desc": [ - "Perform matrix transformation through the ImageFilter.matrix constructor, but it is relatively weak." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_es_ES.json deleted file mode 100644 index 66a8d1dda..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_es_ES.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "Filtro de imagen", - "info": "Con el filtro de imagen ImageFilter, se pueden aplicar efectos especiales a cualquier componente, incluyendo pero no limitado a desenfoque gaussiano, filtros de color, transformaciones, etc.", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "Desenfoque gaussiano ImageFilter", - "desc": [ - "【imageFilter】 : Filtro de imagen 【ImageFilter】", - "【child】 : Componente hijo 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "Efecto de filtro de color ImageFilter", - "desc": [ - "Se implementa un filtro de color a través del objeto ColorFilter." - ] - }, - { - "file": "node3_matrix.dart", - "name": "Efecto de transformación ImageFilter", - "desc": [ - "Se realiza una transformación de matriz a través de la construcción ImageFilter.matrix, pero es bastante limitado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_fr_FR.json deleted file mode 100644 index a9b78902b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_fr_FR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "Filtre d'image", - "info": "Avec le filtre d'image ImageFilter, vous pouvez appliquer des effets spéciaux à n'importe quel composant, y compris mais sans s'y limiter, le flou gaussien, les filtres de couleur, les transformations, etc.", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "ImageFilter Flou Gaussien", - "desc": [ - "【imageFilter】 : Filtre d'image 【ImageFilter】", - "【child】 : Composant enfant 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "ImageFilter Effet de Filtre de Couleur", - "desc": [ - "Réalisez un filtre de couleur via l'objet ColorFilter." - ] - }, - { - "file": "node3_matrix.dart", - "name": "ImageFilter Effet de Transformation", - "desc": [ - "Effectuez une transformation matricielle via la construction ImageFilter.matrix, mais c'est assez limité." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_it_IT.json deleted file mode 100644 index 496905097..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_it_IT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "Filtro Immagine", - "info": "Con il filtro immagine ImageFilter, è possibile applicare effetti speciali a qualsiasi componente, inclusi ma non limitati a sfocatura gaussiana, filtri colore, trasformazioni, ecc.", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "Sfocatura Gaussiana ImageFilter", - "desc": [ - "【imageFilter】 : Filtro immagine 【ImageFilter】", - "【child】 : Componente figlio 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "Effetto Filtro Colore ImageFilter", - "desc": [ - "Implementazione del filtro colore tramite l'oggetto ColorFilter." - ] - }, - { - "file": "node3_matrix.dart", - "name": "Effetto Trasformazione ImageFilter", - "desc": [ - "Trasformazione della matrice tramite la costruzione ImageFilter.matrix, ma è piuttosto limitata." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ja_JP.json deleted file mode 100644 index 53bdef98a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ja_JP.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "画像フィルター", - "info": "ImageFilter 画像フィルターを使用すると、任意のコンポーネントに特殊効果を適用できます。これには、ガウスぼかし、カラーフィルター、変形などが含まれます。", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "ImageFilter ガウスぼかし", - "desc": [ - "【imageFilter】 : 画像フィルター 【ImageFilter】", - "【child】 : 子コンポーネント 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "ImageFilter カラーフィルター効果", - "desc": [ - "ColorFilter オブジェクトを使用してカラーフィルターを実現します。" - ] - }, - { - "file": "node3_matrix.dart", - "name": "ImageFilter 変形効果", - "desc": [ - "ImageFilter.matrix コンストラクタを使用して行列変換を行いますが、あまり役に立ちません。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ko_KR.json deleted file mode 100644 index 7b4088e9a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ko_KR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "이미지 필터", - "info": "ImageFilter 이미지 필터를 통해 모든 컴포넌트에 효과를 적용할 수 있습니다. 이는 가우시안 블러, 색상 필터, 변환 등을 포함하지만 이에 국한되지 않습니다.", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "ImageFilter 가우시안 블러", - "desc": [ - "【imageFilter】 : 이미지 필터 【ImageFilter】", - "【child】 : 자식 컴포넌트 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "ImageFilter 색상 필터 효과", - "desc": [ - "ColorFilter 객체를 통해 색상 필터를 구현합니다." - ] - }, - { - "file": "node3_matrix.dart", - "name": "ImageFilter 변환 효과", - "desc": [ - "ImageFilter.matrix 생성자를 통해 매트릭스 변환을 수행하지만, 다소 실용성이 떨어집니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_pt_PT.json deleted file mode 100644 index da190d408..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_pt_PT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "Filtro de Imagem", - "info": "Com o filtro de imagem ImageFilter, você pode aplicar efeitos especiais a qualquer componente, incluindo, mas não se limitando a, desfoque gaussiano, filtros de cores, transformações, etc.", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "Desfoque Gaussiano ImageFilter", - "desc": [ - "【imageFilter】 : filtro de imagem 【ImageFilter】", - "【child】 : componente filho 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "Efeito de Filtro de Cor ImageFilter", - "desc": [ - "Implementa o filtro de cor através do objeto ColorFilter." - ] - }, - { - "file": "node3_matrix.dart", - "name": "Efeito de Transformação ImageFilter", - "desc": [ - "Realiza transformações de matriz através da construção ImageFilter.matrix, mas é um pouco limitado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ru_RU.json deleted file mode 100644 index 6a00e1475..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ru_RU.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "Фильтр изображений", - "info": "С помощью фильтра изображений ImageFilter можно применять эффекты к любому компоненту, включая, но не ограничиваясь, размытием по Гауссу, цветовыми фильтрами, преобразованиями и т.д.", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "ImageFilter размытие по Гауссу", - "desc": [ - "【imageFilter】 : фильтр изображений 【ImageFilter】", - "【child】 : дочерний компонент 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "ImageFilter цветовой фильтр", - "desc": [ - "Реализация цветового фильтра через объект ColorFilter." - ] - }, - { - "file": "node3_matrix.dart", - "name": "ImageFilter эффект преобразования", - "desc": [ - "Преобразование матрицы через конструкцию ImageFilter.matrix, но это довольно неудобно." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_zh-CN.json deleted file mode 100644 index 8e82b4760..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_zh-CN.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "图像滤镜", - "info": "通过 ImageFilter 图像滤镜,可以对任意组件进行特效处理,包括但不限于高斯模糊、颜色滤镜、变换等。", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "ImageFilter 高斯模糊", - "desc": [ - "【imageFilter】 : 图像滤镜 【ImageFilter】", - "【child】 : 子组件 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "ImageFilter 滤色效果", - "desc": [ - "通过 ColorFilter 对象实现颜色滤镜。" - ] - }, - { - "file": "node3_matrix.dart", - "name": "ImageFilter 变换效果", - "desc": [ - "通过 ImageFilter.matrix 构造,进行矩阵变换,但比较鸡肋。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node1_blur.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node1_blur.dart deleted file mode 100644 index d6132adca..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node1_blur.dart +++ /dev/null @@ -1,117 +0,0 @@ -import 'dart:ui'; - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2022/04/23 -/// contact me by email 1981462002@qq.com - -class ImageFilteredBlur extends StatefulWidget { - const ImageFilteredBlur({Key? key}) : super(key: key); - - @override - State createState() => _ImageFilteredBlurState(); -} - -class _ImageFilteredBlurState extends State { - double _sigmaX = 1.2; - double _sigmaY = 1.2; - TileMode _tileMode = TileMode.decal; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - ImageFiltered( - imageFilter: ImageFilter.blur( - sigmaX: _sigmaX, - sigmaY: _sigmaY, - tileMode: _tileMode, - ), - child: const _TargetContent(), - ), - _buildTools(), - ], - ); - } - - Widget _buildTools() => Column( - children: [ - Row( - children: [ - Expanded( - child: Slider( - min: 0, - max: 4, - value: _sigmaX, - divisions: 360, - label: 'x:' + _sigmaX.toStringAsFixed(1), - onChanged: (v) => setState(() => _sigmaX = v)), - ), - Expanded( - child: Slider( - min: 0, - max: 4, - value: _sigmaY, - divisions: 360, - label: 'y:' + _sigmaY.toStringAsFixed(1), - onChanged: (v) => setState(() => _sigmaY = v)), - ), - ], - ), - buildTileModeCheck() - ], - ); - - Widget buildTileModeCheck() => Wrap( - spacing: 10, - children: TileMode.values.map((e) { - TextStyle style; - if (e == _tileMode) { - Color color = Theme.of(context).primaryColor; - style = TextStyle(fontWeight: FontWeight.bold, color: color); - } else { - style = const TextStyle( - fontWeight: FontWeight.bold, color: Colors.grey); - } - return GestureDetector( - onTap: () => setState(() => _tileMode = e), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 8), - child: Text( - e.toString().split('.')[1], - style: style, - ), - ), - ); - }).toList(), - ); -} - -class _TargetContent extends StatelessWidget { - const _TargetContent({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [ - SizedBox( - height: 150, - width: 150, - child: Image.asset( - 'assets/images/sabar.webp', - fit: BoxFit.cover, - ), - ), - SizedBox( - height: 150, - width: 150, - child: Image.asset( - 'assets/images/wy_200x300.webp', - fit: BoxFit.cover, - ), - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node2_color.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node2_color.dart deleted file mode 100644 index 0ac1d6534..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node2_color.dart +++ /dev/null @@ -1,138 +0,0 @@ -import 'dart:ui'; - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2022/04/23 -/// contact me by email 1981462002@qq.com - -class ImageFilteredColor extends StatefulWidget { - const ImageFilteredColor({Key? key}) : super(key: key); - - @override - State createState() => _ImageFilteredColorState(); -} - -class _ImageFilteredColorState extends State { - - String _currentFilter = 'srgbToLinear'; - - ColorFilter greyscale = const ColorFilter.matrix([ - 0.2126, 0.7152, 0.0722, 0, 0, - 0.2126, 0.7152, 0.0722, 0, 0, - 0.2126, 0.7152, 0.0722, 0, 0, - 0, 0, 0, 1, 0, - ]); - ColorFilter sepia = const ColorFilter.matrix([ - 0.393, 0.769, 0.189, 0, 0, - 0.349, 0.686, 0.168, 0, 0, - 0.272, 0.534, 0.131, 0, 0, - 0, 0, 0, 1, 0, - ]); - ColorFilter invert = const ColorFilter.matrix([ - -1, 0, 0, 0, 255, - 0, -1, 0, 0, 255, - 0, 0, -1, 0, 255, - 0, 0, 0, 1, 0, - ]); - ColorFilter identity = const ColorFilter.matrix([ - 1, 0, 0, 0, 0, - 0, 1, 0, 0, 0, - 0, 0, 1, 0, 0, - 0, 0, 0, 1, 0, - ]); - - - ColorFilter darken = const ColorFilter.matrix([ - 1,0,0,0,-126.0, - 0,1,0,0,-126.0, - 0,0,1,0,-126.0, - 0,0,0,1,0 - ]); - - ColorFilter light = const ColorFilter.matrix([ - 1,0,0,0,90, - 0,1,0,0,90, - 0,0,1,0,90, - 0,0,0,1,0 - ]); - - late Map filterMap={ - '原图': identity, - 'light': light, - 'darken': darken, - 'greyscale': greyscale, - 'sepia': sepia, - 'invert': invert, - 'srgbToLinear':const ColorFilter.srgbToLinearGamma(), - 'linearToSrgb':const ColorFilter.linearToSrgbGamma(), - }; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - ImageFiltered( - imageFilter: filterMap[_currentFilter]??identity, - child: const _TargetContent(), - ), - buildTileModeCheck() - ], - ); - } - - - Widget buildTileModeCheck() => Padding( - padding: const EdgeInsets.only(top: 8.0), - child: Wrap( - children: filterMap.keys.map((e) { - TextStyle style; - if (e == _currentFilter) { - Color color = Theme.of(context).primaryColor; - style = TextStyle(fontWeight: FontWeight.bold, color: color); - } else { - style = const TextStyle( - fontWeight: FontWeight.bold, color: Colors.grey); - } - return GestureDetector( - onTap: () => setState(() => _currentFilter = e), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 8,vertical: 2), - child: Text( - e, - style: style, - ), - ), - ); - }).toList(), - ), - ); -} - -class _TargetContent extends StatelessWidget { - const _TargetContent({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [ - SizedBox( - height: 150, - width: 150, - child: Image.asset( - 'assets/images/sabar.webp', - fit: BoxFit.cover, - ), - ), - SizedBox( - height: 150, - width: 150, - child: Image.asset( - 'assets/images/wy_200x300.webp', - fit: BoxFit.cover, - ), - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node3_matrix.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node3_matrix.dart deleted file mode 100644 index 56d9ea891..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node3_matrix.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'dart:math'; -import 'dart:ui'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2022/04/23 -/// contact me by email 1981462002@qq.com - -class ImageFilteredMatrix extends StatefulWidget { - const ImageFilteredMatrix({Key? key}) : super(key: key); - - @override - State createState() => _ImageFilteredMatrixState(); -} - -class _ImageFilteredMatrixState extends State { - double _sigmaX = 0; - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - ImageFiltered( - imageFilter: ImageFilter.matrix( - Matrix4.rotationZ(_sigmaX/180*pi).storage - ), - child: const _TargetContent(), - ), - _buildTools(), - ], - ); - } - - Widget _buildTools() => Column( - children: [ - Row( - children: [ - const Text(' 旋转角度:'), - Expanded( - child: Slider( - min: 0, - max: 90, - value: _sigmaX, - divisions: 360, - label: 'x:' + _sigmaX.toStringAsFixed(1), - onChanged: (v) => setState(() => _sigmaX = v)), - ), - ], - ), - // buildTileModeCheck() - ], - ); -} - -class _TargetContent extends StatelessWidget { - const _TargetContent({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 150, - width: 150, - child: Image.asset( - 'assets/images/sabar.webp', - fit: BoxFit.cover, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_de_DE.json deleted file mode 100644 index 9a0619c98..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "Intrinsische Höhe", - "info": "Eine Komponente, die die Größe ihrer Kindelemente basierend auf deren intrinsischer Höhe anpasst. Sie kann viele Layoutprobleme lösen, ist aber relativ teuer.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von IntrinsicHeight", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "Wie im Beispiel: Die Höhe auf der linken Seite ist variabel, die Höhe in der Mitte ist fest, und die Höhe auf der rechten Seite nimmt den höchsten Wert der beiden vorherigen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_en_US.json deleted file mode 100644 index 427b01c66..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "Intrinsic Height", - "info": "A component that adjusts the size of its children based on their intrinsic height, which can solve many layout issues, but is relatively expensive.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of IntrinsicHeight", - "desc": [ - "【child】: Child component 【Widget】", - "As shown in the example: the height on the left can vary, the height in the middle is fixed, and the height on the right takes the highest value of the previous two." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_es_ES.json deleted file mode 100644 index 7bc26a1a0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "Altura intrínseca", - "info": "Un componente que ajusta el tamaño de sus hijos según la altura intrínseca de los elementos hijos, puede resolver muchos problemas de diseño, pero es relativamente costoso.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de IntrinsicHeight", - "desc": [ - "【child】 : Widget hijo 【Widget】", - "Como en el ejemplo: la altura del lado izquierdo puede variar, la altura del centro es fija, y la altura del lado derecho toma el valor más alto de los dos anteriores." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_fr_FR.json deleted file mode 100644 index e20b1c234..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "Hauteur intrinsèque", - "info": "Un composant qui ajuste la taille de ses enfants en fonction de leur hauteur intrinsèque, résout de nombreux problèmes de mise en page, mais est relativement coûteux.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'IntrinsicHeight", - "desc": [ - "【child】 : Enfant 【Widget】", - "Comme dans l'exemple : la hauteur de gauche est variable, la hauteur du milieu est fixe, la hauteur de droite prend la valeur maximale des deux premières." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_it_IT.json deleted file mode 100644 index 14ca5a635..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "Altezza intrinseca", - "info": "Un componente che regola le dimensioni dei suoi elementi figli in base all'altezza intrinseca degli elementi figli, risolve molti problemi di layout, ma è relativamente costoso.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di IntrinsicHeight", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "Come nell'esempio: l'altezza a sinistra è variabile, l'altezza al centro è fissa, l'altezza a destra prende il valore più alto dei due precedenti." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ja_JP.json deleted file mode 100644 index cbaaf8df7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "固有高", - "info": "子要素の固有の高さに基づいてその子要素のサイズを調整するコンポーネントで、多くのレイアウトの問題を解決できますが、比較的高価です。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IntrinsicHeightの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "例: 左側の高さは可変、中央の高さは固定、右側の高さは前2つの最大値を取ります。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ko_KR.json deleted file mode 100644 index de0dd7d9a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "고유 높이", - "info": "자식 요소의 고유 높이에 따라 자식 요소의 크기를 조정하는 컴포넌트로, 많은 레이아웃 문제를 해결할 수 있지만 상대적으로 비용이 많이 듭니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IntrinsicHeight 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "예시: 왼쪽 높이는 변동 가능, 중간 높이는 고정, 오른쪽 높이는 앞 두 개의 최대값을 취합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_pt_PT.json deleted file mode 100644 index b0ba32431..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "Altura Intrínseca", - "info": "Um componente que ajusta o tamanho dos seus filhos com base na altura intrínseca dos elementos filhos, pode resolver muitos problemas de layout, mas é relativamente caro.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do IntrinsicHeight", - "desc": [ - "【child】 : Componente filho 【Widget】", - "Como no exemplo: a altura à esquerda pode variar, a altura do meio é fixa, e a altura à direita assume o valor mais alto dos dois anteriores." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ru_RU.json deleted file mode 100644 index 560076bf8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "Встроенная высота", - "info": "Компонент, который регулирует размер своих дочерних элементов в зависимости от их собственной высоты, может решить множество проблем с макетом, но относительно дорог.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование IntrinsicHeight", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "Как в примере: высота слева может изменяться, высота в середине фиксирована, высота справа берет максимальное значение из первых двух." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_zh-CN.json deleted file mode 100644 index 71305b0a9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "固有高", - "info": "根据子元素的固有高度调整其子元素大小的组件,可解决很多布局的疑难杂症,但相对昂贵。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IntrinsicHeight基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "如示例:左侧高可变动,中间高固定,右侧高取前两者的最高值。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/node1_base.dart deleted file mode 100644 index 68e9dbde0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/node1_base.dart +++ /dev/null @@ -1,66 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/21 -/// contact me by email 1981462002@qq.com - - -class IntrinsicHeightDemo extends StatefulWidget { - const IntrinsicHeightDemo({Key? key}) : super(key: key); - - @override - _IntrinsicHeightDemoState createState() => _IntrinsicHeightDemoState(); -} - -class _IntrinsicHeightDemoState extends State { - double _height =120.0; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - buildChild(_height), - const SizedBox(height: 10), - _buildSlider() - ], - ); - } - - Widget buildChild(double leftHeight) { - return IntrinsicHeight( - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - height: leftHeight, - width: 120, - color: Colors.yellow, - alignment: Alignment.center, - child: Text("height:${leftHeight.toStringAsFixed(1)}"), - ), - Container( - color: Colors.blue, - width: 150, - height: 80, - alignment: Alignment.center, - child: const Text("固定高"), - ), - Container( - color: Colors.red, - width: 60, - alignment: Alignment.center, - child: const Text("最高"), - ) - ], - ), - ); - } - - Widget _buildSlider() =>Slider( - value: _height, - max: 200.0, - min: 30.0, - divisions: 17, - onChanged: (v)=> setState(() => _height= v), - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_de_DE.json deleted file mode 100644 index 441cf9af8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "Intrinsische Breite", - "info": "Eine Komponente, die die Größe ihrer Kinder basierend auf deren intrinsischer Breite anpasst, kann viele Layoutprobleme lösen, ist jedoch relativ teuer.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von IntrinsicWidth", - "desc": [ - "【child】: Kindkomponente 【Widget】", - "Wie im Beispiel: Die Breite oben kann variieren, die Breite in der Mitte ist fest, und die Breite unten nimmt den höchsten Wert der beiden vorherigen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_en_US.json deleted file mode 100644 index 9b103bc32..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "Intrinsic Width", - "info": "A component that adjusts the size of its child elements based on their intrinsic width, which can solve many layout issues but is relatively expensive.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of IntrinsicWidth", - "desc": [ - "【child】: Child component 【Widget】", - "As shown in the example: the width above can be changed, the width in the middle is fixed, and the width below takes the highest value of the former two." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_es_ES.json deleted file mode 100644 index 4db7a69fc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "Ancho intrínseco", - "info": "Componente que ajusta el tamaño de sus elementos secundarios según el ancho intrínseco de los mismos, puede resolver muchos problemas de diseño, pero es relativamente costoso.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de IntrinsicWidth", - "desc": [ - "【child】 : Componente secundario 【Widget】", - "Como en el ejemplo: el ancho de arriba puede variar, el ancho del medio es fijo, el ancho de abajo toma el valor más alto de los dos anteriores." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_fr_FR.json deleted file mode 100644 index 1b96204ed..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "Largeur intrinsèque", - "info": "Un composant qui ajuste la taille de ses enfants en fonction de leur largeur intrinsèque, résout de nombreux problèmes de mise en page, mais est relativement coûteux.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'IntrinsicWidth", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "Comme dans l'exemple : la largeur du haut peut varier, celle du milieu est fixe, et celle du bas prend la valeur maximale des deux précédentes." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_it_IT.json deleted file mode 100644 index 91edb57c3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "Larghezza intrinseca", - "info": "Un componente che regola le dimensioni dei suoi elementi figli in base alla larghezza intrinseca degli elementi figli, risolve molti problemi di layout, ma è relativamente costoso.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di IntrinsicWidth", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "Come nell'esempio: la larghezza superiore è variabile, quella centrale è fissa, quella inferiore prende il valore più alto tra le prime due." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ja_JP.json deleted file mode 100644 index eecce94f7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "固有幅", - "info": "子要素の固有の幅に基づいて子要素のサイズを調整するコンポーネントで、多くのレイアウトの問題を解決できますが、比較的高コストです。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IntrinsicWidthの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "例: 上の幅は可変、中間の幅は固定、下の幅は前2つの最大値を取ります。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ko_KR.json deleted file mode 100644 index a0fd16f3f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "고유 너비", - "info": "자식 요소의 고유 너비에 따라 크기를 조정하는 컴포넌트로, 많은 레이아웃 문제를 해결할 수 있지만 상대적으로 비용이 많이 듭니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IntrinsicWidth 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "예시: 위쪽 너비는 변동 가능, 중간 너비는 고정, 아래쪽 너비는 앞 두 값 중 최대값을 취합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_pt_PT.json deleted file mode 100644 index 908e1280f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "Largura Intrínseca", - "info": "Componente que ajusta o tamanho dos seus elementos filhos com base na largura intrínseca dos mesmos, resolvendo muitos problemas de layout, mas relativamente caro.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do IntrinsicWidth", - "desc": [ - "【child】 : Componente filho 【Widget】", - "Como no exemplo: a largura acima pode variar, a largura do meio é fixa, e a largura abaixo assume o valor mais alto dos dois anteriores." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ru_RU.json deleted file mode 100644 index af6625d20..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "Встроенная ширина", - "info": "Компонент, который регулирует размер своих дочерних элементов в зависимости от их внутренней ширины, решает множество проблем с макетом, но относительно дорогостоящий.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование IntrinsicWidth", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "Как в примере: ширина сверху может изменяться, ширина в середине фиксирована, ширина снизу принимает максимальное значение из первых двух." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_zh-CN.json deleted file mode 100644 index 7bce55355..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "固有宽", - "info": "根据子元素的固有宽度度调整其子元素大小的组件,可解决很多布局的疑难杂症,但相对昂贵。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IntrinsicWidth基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "如示例:上面宽可变动,中间宽固定,下面宽取前两者的最高值。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/node1_base.dart deleted file mode 100644 index 823cdb9d4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/node1_base.dart +++ /dev/null @@ -1,66 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/21 -/// contact me by email 1981462002@qq.com - - -class IntrinsicWidthDemo extends StatefulWidget { - const IntrinsicWidthDemo({Key? key}) : super(key: key); - - @override - _IntrinsicWidthDemoState createState() => _IntrinsicWidthDemoState(); -} - -class _IntrinsicWidthDemoState extends State { - double _height =120.0; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - buildChild(_height), - const SizedBox(height: 10), - _buildSlider() - ], - ); - } - - Widget buildChild(double leftWidth) { - return IntrinsicWidth( - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - height: 50, - width: leftWidth, - color: Colors.yellow, - alignment: Alignment.center, - child: Text("width:${leftWidth.toStringAsFixed(1)}"), - ), - Container( - color: Colors.blue, - width: 150, - height: 60, - alignment: Alignment.center, - child: const Text("固定宽"), - ), - Container( - color: Colors.red, - height: 40, - alignment: Alignment.center, - child: const Text("最宽"), - ) - ], - ), - ); - } - - Widget _buildSlider() =>Slider( - value: _height, - max: 200.0, - min: 80.0, - divisions: 17, - onChanged: (v)=> setState(() => _height= v), - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_de_DE.json deleted file mode 100644 index a084cd4ff..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_de_DE.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "Layout-Builder", - "info": "Kann die Größe des übergeordneten Containers erkennen und eine benutzerdefinierte Layout basierend auf den Abmessungen des übergeordneten Containers erstellen. Es ist ein sehr nützliches Layout-Komponente.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegendes Verständnis von LayoutBuilder", - "desc": [ - "【builder】: Layout-Builder 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "Anpassungsfähiges Layout von LayoutBuilder", - "desc": [ - "Kann das Design der Komponentenanzeige basierend auf der Größe des Bereichs durchführen.", - "Zum Beispiel können unterschiedliche Layout-Strukturen in verschiedenen Breitenbereichen angezeigt werden.", - "Schließlich ist es an vielen Stellen nicht einfach, den Bereich der übergeordneten Komponente zu erhalten, und die Verwendung von LayoutBuilder wird sehr angenehm sein." - ] - }, - { - "file": "node3_expend.dart", - "name": "Erweiterte Verwendung von LayoutBuilder", - "desc": [ - "Verwenden Sie TextPainter, um die Anzahl der Textzeilen zu überprüfen und die Funktion zum Erweitern oder Reduzieren zu implementieren." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_en_US.json deleted file mode 100644 index 266ade591..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_en_US.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "Layout Constructor", - "info": "Can detect the size of the parent container and complete custom layouts based on the size information of the parent container. It is a very practical layout component.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Understanding of LayoutBuilder", - "desc": [ - "【builder】: Layout Constructor 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "Adaptive Layout of LayoutBuilder", - "desc": [ - "Can design component display based on the size of the area.", - "For example, displaying different layout structures in different width areas.", - "After all, it is not easy to obtain the parent component area in many places, and using LayoutBuilder will be very refreshing." - ] - }, - { - "file": "node3_expend.dart", - "name": "Expanded Use of LayoutBuilder", - "desc": [ - "Use TextPainter to detect the number of lines of text to implement expand or collapse functionality." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_es_ES.json deleted file mode 100644 index e88b9cec5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_es_ES.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "Constructor de diseño", - "info": "Puede detectar el tamaño del área del contenedor padre y completar el diseño personalizado según la información de tamaño del contenedor padre. Es un componente de diseño muy práctico.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Conocimiento básico de LayoutBuilder", - "desc": [ - "【builder】: Constructor de diseño 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "Adaptación de diseño de LayoutBuilder", - "desc": [ - "Puede diseñar la presentación de componentes según el tamaño del área.", - "Por ejemplo, mostrar diferentes estructuras de diseño en áreas de diferentes anchos.", - "Después de todo, en muchos lugares no es fácil obtener el área del componente padre, y usar LayoutBuilder será muy útil." - ] - }, - { - "file": "node3_expend.dart", - "name": "Uso extendido de LayoutBuilder", - "desc": [ - "Usar TextPainter para detectar el número de líneas de texto y lograr la función de expandir o contraer." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_fr_FR.json deleted file mode 100644 index 24c1445f1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_fr_FR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "Constructeur de mise en page", - "info": "Peut détecter la taille de la zone du conteneur parent et compléter la mise en page personnalisée en fonction des informations de taille du conteneur parent. C'est un composant de mise en page très pratique.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Connaissance de base de LayoutBuilder", - "desc": [ - "【builder】 : Constructeur de mise en page 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "Adaptation de la mise en page de LayoutBuilder", - "desc": [ - "Peut concevoir l'affichage des composants en fonction de la taille de la zone.", - "Par exemple, afficher différentes structures de mise en page dans des zones de largeur différente.", - "Après tout, il n'est pas facile d'obtenir la zone du composant parent dans de nombreux endroits, l'utilisation de LayoutBuilder sera très agréable." - ] - }, - { - "file": "node3_expend.dart", - "name": "Utilisation étendue de LayoutBuilder", - "desc": [ - "Utilisez TextPainter pour détecter le nombre de lignes de texte et implémenter la fonction d'expansion ou de réduction." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_it_IT.json deleted file mode 100644 index c1ac0694d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_it_IT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "Costruttore di layout", - "info": "Può rilevare le dimensioni dell'area del contenitore padre e completare il layout personalizzato in base alle informazioni sulle dimensioni del contenitore padre. È un componente di layout molto pratico.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Conoscenza di base di LayoutBuilder", - "desc": [ - "【builder】: Costruttore di layout 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "Adattamento del layout di LayoutBuilder", - "desc": [ - "È possibile progettare la visualizzazione dei componenti in base alle dimensioni dell'area.", - "Ad esempio, mostrare diverse strutture di layout in aree di larghezza diversa.", - "Dopotutto, in molti posti non è facile ottenere l'area del componente padre, usare LayoutBuilder sarà molto utile." - ] - }, - { - "file": "node3_expend.dart", - "name": "Uso esteso di LayoutBuilder", - "desc": [ - "Usa TextPainter per rilevare il numero di righe del testo e implementare la funzione di espansione o di chiusura." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ja_JP.json deleted file mode 100644 index 2e7598ac9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ja_JP.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "レイアウトビルダー", - "info": "親コンテナの領域サイズを検出し、親コンテナのサイズ情報に基づいてカスタムレイアウトを完成させることができます。非常に実用的なレイアウトコンポーネントです。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LayoutBuilderの基本認識", - "desc": [ - "【builder】 : レイアウトビルダー 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "LayoutBuilderの適応レイアウト", - "desc": [ - "領域のサイズに基づいてコンポーネントの表示デザインを行うことができます。\"", - "たとえば、異なる幅の領域で異なるレイアウト構造を表示します。\"", - "結局のところ、多くの場所で親コンポーネントの領域を取得するのは容易ではなく、LayoutBuilderを使用すると非常に便利です。" - ] - }, - { - "file": "node3_expend.dart", - "name": "LayoutBuilderの展開使用", - "desc": [ - "TextPainterを使用してテキストの行数を検出し、展開または折りたたみ機能を実装します。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ko_KR.json deleted file mode 100644 index ace16c973..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ko_KR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "레이아웃 빌더", - "info": "부모 컨테이너의 영역 크기를 감지하고, 부모 컨테이너의 크기 정보를 기반으로 사용자 정의 레이아웃을 완성할 수 있습니다. 매우 실용적인 레이아웃 구성 요소입니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LayoutBuilder 기본 이해", - "desc": [ - "【builder】 : 레이아웃 빌더 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "LayoutBuilder의 적응형 레이아웃", - "desc": [ - "영역의 크기에 따라 컴포넌트 디스플레이를 설계할 수 있습니다.", - "예를 들어, 다른 너비 영역에서 다른 레이아웃 구조를 표시할 수 있습니다.", - "결국 많은 곳에서 부모 컴포넌트 영역을 쉽게 얻을 수 없기 때문에 LayoutBuilder를 사용하면 매우 편리합니다." - ] - }, - { - "file": "node3_expend.dart", - "name": "LayoutBuilder의 확장 사용", - "desc": [ - "TextPainter를 사용하여 텍스트의 줄 수를 감지하고, 확장 또는 축소 기능을 구현합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_pt_PT.json deleted file mode 100644 index 5c983efd0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_pt_PT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "Construtor de Layout", - "info": "Pode detectar o tamanho da área do contêiner pai e completar o layout personalizado de acordo com as informações de dimensão do contêiner pai. É um componente de layout muito útil.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Conhecimento Básico do LayoutBuilder", - "desc": [ - "【builder】 : Construtor de Layout 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "Adaptação de Layout do LayoutBuilder", - "desc": [ - "Pode projetar a exibição dos componentes de acordo com o tamanho da área.", - "Por exemplo, exibir diferentes estruturas de layout em áreas de diferentes larguras.", - "Afinal, em muitos lugares não é fácil obter a área do componente pai, usar o LayoutBuilder será muito conveniente." - ] - }, - { - "file": "node3_expend.dart", - "name": "Uso Expandido do LayoutBuilder", - "desc": [ - "Usar TextPainter para detectar o número de linhas de texto e implementar a função de expandir ou recolher." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ru_RU.json deleted file mode 100644 index a0fa492e9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ru_RU.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "Конструктор макета", - "info": "Может обнаружить размер области родительского контейнера и выполнить пользовательский макет на основе информации о размере родительского контейнера. Это очень полезный компонент макета.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное понимание LayoutBuilder", - "desc": [ - "【builder】 : Конструктор макета 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "Адаптация макета LayoutBuilder", - "desc": [ - "Можно проектировать отображение компонентов в зависимости от размера области.", - "Например, отображать различные структуры макета в областях с разной шириной.", - "Ведь во многих местах нелегко получить область родительского компонента, и использование LayoutBuilder будет очень удобным." - ] - }, - { - "file": "node3_expend.dart", - "name": "Расширенное использование LayoutBuilder", - "desc": [ - "Использование TextPainter для обнаружения количества строк текста и реализации функции развертывания или сворачивания." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_zh-CN.json deleted file mode 100644 index 2763c28d7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_zh-CN.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "布局构造器", - "info": "可以检测到父容器的区域大小,并根据父容器的尺寸信息可以完成自定义布局。是一个非常实用的布局组件。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LayoutBuilder基本认识", - "desc": [ - "【builder】 : 布局构造器 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "LayoutBuilder的适应布局", - "desc": [ - "可以根据区域的大小进行组件展示设计。\"", - "比如在不同的宽度区域显示不同的布局结构。\"", - "毕竟很多地方不容易获取父组件区域,使用LayoutBuilder就会非常爽口。" - ] - }, - { - "file": "node3_expend.dart", - "name": "LayoutBuilder的展开使用", - "desc": [ - "使用TextPainter来检测文字的行数,实现展开或收起功能。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node1_base.dart deleted file mode 100644 index 367af2cfc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node1_base.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomLayoutBuilder extends StatelessWidget { - const CustomLayoutBuilder({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - print('CustomLayoutBuild'); - return Container( - alignment: Alignment.center, - height: 80, - width: 150, - color: Colors.green, - child: LayoutBuilder( - builder: (_, zone) { - return Text( - '父容器宽:${zone.maxWidth}\n' - '父容器高:${zone.maxHeight}', - style: const TextStyle(color: Colors.white, fontSize: 16), - ); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node2_fit.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node2_fit.dart deleted file mode 100644 index 118b09eb2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node2_fit.dart +++ /dev/null @@ -1,100 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - - -class FitByLayoutBuilder extends StatefulWidget { - const FitByLayoutBuilder({Key? key}) : super(key: key); - - @override - _FitByLayoutBuilderState createState() => _FitByLayoutBuilderState(); -} - -class _FitByLayoutBuilderState extends State { - double _width = 100; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - SizedBox( - width: _width, - child: LayoutBuilder( - builder: (_, zone) { - if (zone.maxWidth <= 150) { - return _buildType1(); - } else { - return _buildType2(zone); - } - }, - ), - ), - _buildSlider(), - ], - ); - } - - Widget _buildSlider() => Slider( - min: 50, - max: 300, - label: "父宽:${_width.toStringAsFixed(1)}", - value: _width, - onChanged: (v) => setState(() { - _width = v; - })); - - Widget _buildType1() => Container( - color: Colors.blue, - child: Column( - children: [ - _buildTitle(), - Padding( - padding: const EdgeInsets.all(8.0), - child: _buildContent(), - ), - ], - ), - ); - - Widget _buildType2(BoxConstraints zone) => Container( - height: 100, - width: zone.maxWidth, - color: Colors.orange, - child: Row( - children: [ - Container( - margin: const EdgeInsets.all(10), - height: 80, - width: 30, - color: Colors.grey, - ), - Expanded(child: _buildContent()) - ], - ), - ); - - Widget _buildTitle() => Container( - margin: const EdgeInsets.only(left: 10, right: 10, top: 10), - color: Colors.grey, - height: 30, - ); - - Widget _buildContent() => Wrap( - runSpacing: 3, - children: [ - Container( - color: Colors.red, - height: 30, - ), - Container( - color: Colors.yellow, - height: 30, - ), - Container( - color: Colors.green, - height: 30, - ), - ], - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node3_expend.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node3_expend.dart deleted file mode 100644 index 33c13c01f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node3_expend.dart +++ /dev/null @@ -1,84 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - - -class SimpleExpandableText extends StatefulWidget { - const SimpleExpandableText({Key? key}) : super(key: key); - - @override - createState() => _SimpleExpandableTextState(); -} - -class _SimpleExpandableTextState extends State { - - final String text = '桃树、杏树、梨树,你不让我,我不让你,都开满了花赶趟儿。' - '红的像火,粉的像霞,白的像雪。' - '花里带着甜味儿;闭了眼,树上仿佛已经满是桃儿、杏儿、梨儿。' - '花下成千成百的蜜蜂嗡嗡地闹着,大小的蝴蝶飞来飞去。' - '野花遍地是:杂样儿,有名字的,没名字的,散在草丛里,像眼睛,像星星,还眨呀眨的。'; - - bool expand = false; - int maxLines = 3; - - final TextStyle style = - const TextStyle(fontSize: 15, color: Colors.grey, shadows: [ - Shadow( - color: Colors.white, - offset: Offset(1, 1), - ), - ]); - - BoxDecoration get boxDecoration => BoxDecoration( - color: Colors.cyanAccent.withAlpha(8), - borderRadius: const BorderRadiusDirectional.all( - Radius.circular(20), - ), - ); - - late TextPainter painter; - - @override - void initState() { - super.initState(); - painter = TextPainter( - text: TextSpan(text: text, style: style), - maxLines: maxLines, - textDirection: TextDirection.ltr, - ); - } - - @override - build(context) => Container( - decoration: boxDecoration, - padding: const EdgeInsets.all(15), - child: LayoutBuilder(builder: (context, size) { - painter.layout(maxWidth: size.maxWidth); - if (!painter.didExceedMaxLines) { - return Text(text, style: style); - } - return Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(text, maxLines: expand ? null : 3, style: style), - GestureDetector( - onTap: toggle, - child: Text( - expand ? '<< 收起' : '展开 >>', - style: const TextStyle(color: Colors.blue), - ), - ), - ], - ); - }), - ); - - void toggle() { - setState(() { - expand = !expand; - }); - } -} - diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_de_DE.json deleted file mode 100644 index 658010b65..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "Begrenzungsbox", - "info": "Kann ein Unterelement aufnehmen und den Bereich des Unterelements durch Angabe der maximalen Breite und Höhe begrenzen.", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von LimitedBox", - "desc": [ - "【child】 : Unterelement 【Widget】", - "【maxHeight】 : Maximale Höhe 【double】", - "【maxWidth】 : Maximale Breite 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_en_US.json deleted file mode 100644 index 0fa695767..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "Limited Box", - "info": "Can contain one child component, limiting the area where the child component can reside by specifying the maximum width and height.", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of LimitedBox", - "desc": [ - "【child】: Child component 【Widget】", - "【maxHeight】: Maximum height 【double】", - "【maxWidth】: Maximum width 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_es_ES.json deleted file mode 100644 index 3558aa47d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "Caja Limitada", - "info": "Puede contener un componente hijo, limitando el área del componente hijo especificando el ancho y alto máximos.", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de LimitedBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【maxHeight】 : Altura máxima 【double】", - "【maxWidth】 : Ancho máximo 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_fr_FR.json deleted file mode 100644 index 99cb8f712..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "Boîte limitée", - "info": "Peut contenir un composant enfant, en limitant la zone de ce composant par une largeur et une hauteur maximales spécifiées.", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de LimitedBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【maxHeight】 : Hauteur maximale 【double】", - "【maxWidth】 : Largeur maximale 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_it_IT.json deleted file mode 100644 index 61900467c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "Scatola Limitata", - "info": "Può contenere un componente figlio, limitando l'area del componente figlio specificando l'altezza e la larghezza massime.", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di LimitedBox", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【maxHeight】 : Altezza massima 【double】", - "【maxWidth】 : Larghezza massima 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ja_JP.json deleted file mode 100644 index 2bb36c0bf..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "制限ボックス", - "info": "子コンポーネントを1つ収容でき、最大幅と高さを指定して子コンポーネントの収容領域を制限します。", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LimitedBoxの基本的な使用法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【maxHeight】 : 最大高さ 【double】", - "【maxWidth】 : 最大幅 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ko_KR.json deleted file mode 100644 index 6123b09ca..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "제한 상자", - "info": "하나의 하위 구성 요소를 수용할 수 있으며, 최대 너비와 높이를 지정하여 하위 구성 요소의 영역을 제한합니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LimitedBox 기본 사용", - "desc": [ - "【child】 : 자식 구성 요소 【Widget】", - "【maxHeight】 : 최대 높이 【double】", - "【maxWidth】 : 최대 너비 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_pt_PT.json deleted file mode 100644 index a84a02996..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "Caixa Limitada", - "info": "Pode conter um componente filho, limitando a área onde o componente filho pode residir, especificando a largura e altura máximas.", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do LimitedBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【maxHeight】 : Altura máxima 【double】", - "【maxWidth】 : Largura máxima 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ru_RU.json deleted file mode 100644 index 5ac51440a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "Ограничивающая коробка", - "info": "Может содержать один дочерний компонент, ограничивая область размещения дочернего компонента путем указания максимальной ширины и высоты.", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование LimitedBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【maxHeight】 : Максимальная высота 【double】", - "【maxWidth】 : Максимальная ширина 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_zh-CN.json deleted file mode 100644 index 0aa3bf62c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "限制盒", - "info": "可容纳一个子组件,通过指定最大宽高来限定子组件容身区域。", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LimitedBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【maxHeight】 : 最大高 【double】", - "【maxWidth】 : 最大宽 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/node1_base.dart deleted file mode 100644 index 47173673c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomLimitedBox extends StatefulWidget { - const CustomLimitedBox({Key? key}) : super(key: key); - - @override - _CustomLimitedBoxState createState() => _CustomLimitedBoxState(); -} - -class _CustomLimitedBoxState extends State { - String _text = ''; - - @override - Widget build(BuildContext context) { - Widget child = Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 50, - height: 50, - child: const Text("Static"), - ); - - Widget box = LimitedBox( - maxHeight: 60, - maxWidth: 100, - child: Container(color: Colors.orange, child: Text(_text)), - ); - - return Column( - children: [ - Container( - color: Colors.grey.withAlpha(22), - width: 300, - height: 100, - child: Row( - children: [child, UnconstrainedBox(child: box), child], - ), - ), - _buildInput() - ], - ); - } - - Widget _buildInput() { - return Padding( - padding: const EdgeInsets.all(18.0), - child: TextField( - decoration: const InputDecoration( - border: OutlineInputBorder(), - hintText: '请输入', - ), - onChanged: (v) { - setState(() { - _text = v; - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_de_DE.json deleted file mode 100644 index a4346c4e5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "Verschwindende Komponente", - "info": "Kann eine Unterkomponente aufnehmen und deren Verschwinden ändern. Das Attribut offstage auf true bedeutet versteckt.", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von LimitedBox", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【offstage】 : Ob verschwunden 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_en_US.json deleted file mode 100644 index 23e3c8ea4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "Disappearing Component", - "info": "Can contain a child component, and can change its visibility. The offstage property set to true means hidden.", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of LimitedBox", - "desc": [ - "【child】: Child component 【Widget】", - "【offstage】: Whether to disappear 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_es_ES.json deleted file mode 100644 index 7639fe92d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "Componente Desaparecido", - "info": "Puede contener un componente hijo y cambiar su visibilidad. Si la propiedad offstage es true, indica que está oculto.", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de LimitedBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【offstage】 : Si está desaparecido 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_fr_FR.json deleted file mode 100644 index 491cda0f4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "Composant disparu", - "info": "Peut contenir un composant enfant et peut modifier sa disparition ou non. L'attribut offstage à true signifie qu'il est caché.", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de LimitedBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【offstage】 : Disparaît ou non 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_it_IT.json deleted file mode 100644 index ab1d8569f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "Componente Scomparso", - "info": "Può contenere un componente figlio e può cambiarne la visibilità. L'attributo offstage è true per indicare che è nascosto.", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di LimitedBox", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【offstage】 : Se è nascosto 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ja_JP.json deleted file mode 100644 index 4dd62d857..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "非表示コンポーネント", - "info": "1つの子コンポーネントを収容でき、その表示・非表示を変更できます。offstage属性がtrueの場合、非表示になります。", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LimitedBoxの基本的な使用法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【offstage】 : 非表示かどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ko_KR.json deleted file mode 100644 index fb751e283..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "사라진 컴포넌트", - "info": "하나의 자식 컴포넌트를 수용할 수 있으며, 그 컴포넌트의 사라짐 여부를 변경할 수 있습니다. offstage 속성이 true이면 숨겨집니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LimitedBox 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【offstage】 : 사라짐 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_pt_PT.json deleted file mode 100644 index 475ec95a6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "Componente Desaparecido", - "info": "Pode conter um componente filho e alterar a sua visibilidade. A propriedade offstage é true para ocultar.", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do LimitedBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【offstage】 : Se desaparece 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ru_RU.json deleted file mode 100644 index 9f3af1b3e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "Исчезающий компонент", - "info": "Может содержать один дочерний компонент, можно изменить его видимость. Свойство offstage, равное true, означает скрытие.", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование LimitedBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【offstage】 : Видимость 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_zh-CN.json deleted file mode 100644 index 17c804f5f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "消失组件", - "info": "可容纳一个子组件,可更改其的消失与否。offstage属性为true表示隐藏。", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LimitedBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【offstage】 : 是否消失 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/node1_base.dart deleted file mode 100644 index ca83cc163..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/node1_base.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomOffstage extends StatefulWidget { - const CustomOffstage({Key? key}) : super(key: key); - - @override - _CustomOffstageState createState() => _CustomOffstageState(); -} - -class _CustomOffstageState extends State { - bool _off = false; - - @override - Widget build(BuildContext context) { - Widget radBox = Container( - height: 50, - width: 60, - color: Colors.red, - child: Switch( - value: _off, - onChanged: (v) => setState(() => _off = v)), - ); - - return SizedBox( - width: 250, - height: 200, - child: Row( - children: [radBox, _buildOffStage(), radBox], - ), - ); - } - - Widget _buildOffStage() => Offstage( - offstage: _off, - child: Container( - alignment: Alignment.center, - height: 100, - width: 100, - color: Colors.blue, - child: const Text( - "Offstage", - style: TextStyle(fontSize: 20), - ), - )); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_de_DE.json deleted file mode 100644 index ca1011dc5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "Transparenz", - "info": "Kann ein Kindelement aufnehmen und dessen Transparenz in den Opazitätswert ändern, Opazität liegt zwischen 0 und 1.", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Opacity", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【opacity】 : Transparenz 0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_en_US.json deleted file mode 100644 index 352c2e08d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "Transparency", - "info": "Can contain a child component, changing its transparency to the opacity value, where opacity is between 0 and 1.", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Opacity", - "desc": [ - "【child】 : Child component 【Widget】", - "【opacity】 : Transparency 0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_es_ES.json deleted file mode 100644 index f8028ecad..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "Transparencia", - "info": "Puede contener un componente hijo y cambiar su transparencia al valor de opacity, donde opacity está entre 0 y 1.", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Opacity", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【opacity】 : Transparencia 0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_fr_FR.json deleted file mode 100644 index 0a1e98d36..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "Opacité", - "info": "Peut contenir un composant enfant, transformant sa transparence en valeur d'opacité, l'opacité est comprise entre 0 et 1.", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'Opacity", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【opacity】 : Opacité 0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_it_IT.json deleted file mode 100644 index d51918992..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "Trasparenza", - "info": "Può contenere un componente figlio, trasformandone la trasparenza in un valore di opacità, dove l'opacità è compresa tra 0 e 1.", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di Opacity", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【opacity】 : Trasparenza 0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ja_JP.json deleted file mode 100644 index cf759bb5d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "不透明度", - "info": "子コンポーネントを1つ収容し、その不透明度をopacity値に変更できます。opacityは0〜1の間です。", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Opacityの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【opacity】 : 不透明度0〜1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ko_KR.json deleted file mode 100644 index 41a13f67b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "투명도", - "info": "하위 컴포넌트를 포함할 수 있으며, 그 투명도를 opacity 값으로 변경합니다. opacity는 0~1 사이입니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Opacity 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【opacity】 : 투명도 0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_pt_PT.json deleted file mode 100644 index faafe0279..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "Opacidade", - "info": "Pode conter um componente filho, alterando a sua opacidade para o valor de opacity, onde opacity está entre 0 e 1.", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Opacity", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【opacity】 : Opacidade 0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ru_RU.json deleted file mode 100644 index 19a9bc749..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "Прозрачность", - "info": "Может содержать один дочерний компонент, изменяя его прозрачность на значение opacity, где opacity находится в диапазоне от 0 до 1.", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Opacity", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【opacity】 : Прозрачность 0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_zh-CN.json deleted file mode 100644 index 9f558e9c4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "透明化", - "info": "可容纳一个子组件,将其透明度变为opacity值, opacity在0~1之间。", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Opacity基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【opacity】 : 透明度0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/node1_base.dart deleted file mode 100644 index 798c891c5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/node1_base.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomOpacity extends StatefulWidget { - const CustomOpacity({Key? key}) : super(key: key); - - @override - _CustomOpacityState createState() => _CustomOpacityState(); -} - -class _CustomOpacityState extends State { - double _opacity = 0.2; - - @override - Widget build(BuildContext context) { - return Column( - children: [_buildSlider(), _buildOpacity()], - ); - } - - // 创建Opacity - Widget _buildOpacity() => Opacity( - opacity: _opacity, - child: Image.asset(// 图片 - 'assets/images/icon_head.webp', - width: 100, - ), - ); - Widget _buildSlider() => Slider( - divisions: 20, - label: _opacity.toString(), - value: _opacity, - onChanged: (v) => setState(() => _opacity = v)); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_de_DE.json deleted file mode 100644 index f8e35218a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "Überlaufbox", - "info": "Kann ein Kindelement aufnehmen, und das Kindelement darf den Bereich des Elternelements überlaufen. Es kann der maximale und minimale Bereich für Breite und Höhe festgelegt werden und verfügt über eine Ausrichtungseigenschaft alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von OverflowBox", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【minWidth】 : Minimale Breite 【double】", - "【minHeight】 : Minimale Höhe 【double】", - "【maxHeight】 : Maximale Höhe 【double】", - "【maxWidth】 : Maximale Breite 【double】", - "【alignment】 : Ausrichtung 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_en_US.json deleted file mode 100644 index decab995e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "Overflow Box", - "info": "Can contain a child component, and the child component is allowed to overflow the parent component area. The maximum and minimum width and height can be specified for constraints, and it has the alignment property.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of OverflowBox", - "desc": [ - "【child】: Child component 【Widget】", - "【minWidth】: Minimum width 【double】", - "【minHeight】: Minimum height 【double】", - "【maxHeight】: Maximum height 【double】", - "【maxWidth】: Maximum width 【double】", - "【alignment】: Alignment 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_es_ES.json deleted file mode 100644 index 109703b44..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "Caja de desbordamiento", - "info": "Puede contener un componente hijo, y el componente hijo puede desbordar el área del componente padre. Se pueden especificar áreas máximas y mínimas de ancho y alto para limitar, y tiene la propiedad de alineación alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de OverflowBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【minWidth】 : Ancho mínimo 【double】", - "【minHeight】 : Altura mínima 【double】", - "【maxHeight】 : Altura máxima 【double】", - "【maxWidth】 : Ancho máximo 【double】", - "【alignment】 : Modo de alineación 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_fr_FR.json deleted file mode 100644 index 25b955645..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "Boîte de débordement", - "info": "Peut contenir un composant enfant, et le composant enfant est autorisé à déborder de la zone du composant parent. Il est possible de spécifier les zones maximales et minimales de largeur et de hauteur pour les limiter, et il possède une propriété d'alignement.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de OverflowBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【minWidth】 : Largeur minimale 【double】", - "【minHeight】 : Hauteur minimale 【double】", - "【maxHeight】 : Hauteur maximale 【double】", - "【maxWidth】 : Largeur maximale 【double】", - "【alignment】 : Alignement 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_it_IT.json deleted file mode 100644 index ca94efd50..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "Scatola di overflow", - "info": "Può contenere un componente figlio e consente al componente figlio di fuoriuscire dall'area del componente padre. È possibile specificare le aree massime e minime di larghezza e altezza per i limiti e ha la proprietà di allineamento alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di OverflowBox", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【minWidth】 : Larghezza minima 【double】", - "【minHeight】 : Altezza minima 【double】", - "【maxHeight】 : Altezza massima 【double】", - "【maxWidth】 : Larghezza massima 【double】", - "【alignment】 : Modalità di allineamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ja_JP.json deleted file mode 100644 index 28db137c8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "オーバーフローボックス", - "info": "子コンポーネントを収容でき、子コンポーネントは親コンポーネントの領域をオーバーフローすることができます。幅と高さの最大最小領域を指定して制限することができ、アライメント属性alignmentを持っています。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OverflowBoxの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【minWidth】 : 最小幅 【double】", - "【minHeight】 : 最小高さ 【double】", - "【maxHeight】 : 最大高さ 【double】", - "【maxWidth】 : 最大幅 【double】", - "【alignment】 : アライメント方法 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ko_KR.json deleted file mode 100644 index 1d253a68e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "오버플로우 박스", - "info": "하위 컴포넌트를 수용할 수 있으며, 하위 컴포넌트가 상위 컴포넌트 영역을 벗어날 수 있습니다. 최소 및 최대 너비와 높이를 지정하여 제한할 수 있으며, 정렬 속성 alignment를 가지고 있습니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OverflowBox 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【minWidth】 : 최소 너비 【double】", - "【minHeight】 : 최소 높이 【double】", - "【maxHeight】 : 최대 높이 【double】", - "【maxWidth】 : 최대 너비 【double】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_pt_PT.json deleted file mode 100644 index 12e6d9b17..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "Caixa de Transbordamento", - "info": "Pode conter um componente filho, e o componente filho pode transbordar a área do componente pai. Pode especificar as áreas mínimas e máximas de largura e altura para restringir, e possui o atributo de alinhamento alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do OverflowBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【minWidth】 : Largura mínima 【double】", - "【minHeight】 : Altura mínima 【double】", - "【maxHeight】 : Altura máxima 【double】", - "【maxWidth】 : Largura máxima 【double】", - "【alignment】 : Modo de alinhamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ru_RU.json deleted file mode 100644 index 919e4dfeb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "Переполненная коробка", - "info": "Может содержать один дочерний компонент, и дочерний компонент может выходить за пределы области родительского компонента. Можно указать минимальные и максимальные области ширины и высоты для ограничения, имеет свойство выравнивания alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование OverflowBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【minWidth】 : Минимальная ширина 【double】", - "【minHeight】 : Минимальная высота 【double】", - "【maxHeight】 : Максимальная высота 【double】", - "【maxWidth】 : Максимальная ширина 【double】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_zh-CN.json deleted file mode 100644 index c3c55dc80..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "溢出盒", - "info": "可容纳一个子组件,且子组件允许溢出父组件区域,可以指定宽高的最大最小区域进行限定,拥有对齐属性alignment。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OverflowBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【minWidth】 : 最小宽 【double】", - "【minHeight】 : 最小高 【double】", - "【maxHeight】 : 最大高 【double】", - "【maxWidth】 : 最大宽 【double】", - "【alignment】 : 对齐方式 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/node1_base.dart deleted file mode 100644 index cbca2deab..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/node1_base.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomOverflowBox extends StatefulWidget { - const CustomOverflowBox({Key? key}) : super(key: key); - - @override - _CustomOverflowBoxState createState() => _CustomOverflowBoxState(); -} - -class _CustomOverflowBoxState extends State { - String _text = ''; - - @override - Widget build(BuildContext context) { - Widget box = OverflowBox( - alignment: Alignment.center, - minHeight: 50, - minWidth: 50, - maxWidth: 200, - maxHeight: 120, - child: Container( - color: Colors.orange, - child: Text(_text), - ), - ); - return Column( - children: [ - Container( - color: Colors.grey.withAlpha(33), - width: 100, - height: 100, - child: box), - _buildInput() - ], - ); - } - - Widget _buildInput() { - return Padding( - padding: const EdgeInsets.all(18.0), - child: TextField( - decoration: const InputDecoration( - border: OutlineInputBorder(), - hintText: '请输入', - ), - onChanged: (v) { - setState(() { - _text = v; - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_de_DE.json deleted file mode 100644 index 510451de1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_de_DE.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "Abstandskomponente", - "info": "Kann ein Kindelement aufnehmen und fügt seinen eigenen Innenabstand hinzu, um den Platz des Kindelements zu begrenzen. Die Kerneigenschaft ist padding.", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding gleicher Abstand auf allen Seiten", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【padding】 : Innenabstand auf allen vier Seiten 【EdgeInsetsGeometry】", - "EdgeInsets.all wird verwendet, um den gleichen Abstand auf allen vier Seiten festzulegen" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding einzelner Abstand", - "desc": [ - "EdgeInsets.only wird verwendet, um den gleichen Abstand auf allen vier Seiten festzulegen" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding Richtungsabstand", - "desc": [ - "EdgeInsets.symmetric wird verwendet, um den horizontalen und vertikalen Abstand festzulegen" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_en_US.json deleted file mode 100644 index e5dd8395b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_en_US.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "Margin Component", - "info": "Can accommodate a child component, adding its own padding to limit the child component's placement. The core property is padding.", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding Equal Margin on All Sides", - "desc": [ - "【child】: Child component 【Widget】", - "【padding】: Inner four-sided margin 【EdgeInsetsGeometry】", - "EdgeInsets.all is used to define the same margin on all four sides" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding Individual Margin", - "desc": [ - "EdgeInsets.only is used to define the same margin on all four sides" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding Directional Margin", - "desc": [ - "EdgeInsets.symmetric is used to define horizontal and vertical margins" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_es_ES.json deleted file mode 100644 index 754298f77..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_es_ES.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "Componente de margen", - "info": "Puede contener un componente hijo, agregando su propio relleno interno para limitar el espacio ocupado por el componente hijo, la propiedad principal es el padding.", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding con márgenes iguales en los cuatro lados", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【padding】 : Relleno interno en los cuatro lados 【EdgeInsetsGeometry】", - "EdgeInsets.all se utiliza para definir el mismo margen en los cuatro lados" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding con márgenes individuales", - "desc": [ - "EdgeInsets.only se utiliza para definir márgenes específicos en los cuatro lados" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding con márgenes direccionales", - "desc": [ - "EdgeInsets.symmetric se utiliza para definir márgenes en las direcciones horizontal y vertical" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_fr_FR.json deleted file mode 100644 index f840c12e4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_fr_FR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "Composant de marge", - "info": "Peut contenir un composant enfant, ajoute une marge intérieure pour limiter l'espace occupé par le composant enfant, la propriété principale est padding.", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding avec marge égale sur les quatre côtés", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【padding】 : Marge intérieure sur les quatre côtés 【EdgeInsetsGeometry】", - "EdgeInsets.all est utilisé pour définir une marge égale sur les quatre côtés" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding avec marge individuelle", - "desc": [ - "EdgeInsets.only est utilisé pour définir une marge individuelle sur les quatre côtés" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding avec marge directionnelle", - "desc": [ - "EdgeInsets.symmetric est utilisé pour définir une marge horizontale et verticale" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_it_IT.json deleted file mode 100644 index 4dc40d3a0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_it_IT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "Componente margine", - "info": "Può contenere un componente figlio, aggiungendo il proprio padding interno per limitare il posizionamento del componente figlio, la proprietà principale è padding.", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding margine uguale su tutti i lati", - "desc": [ - "【child】 : componente figlio 【Widget】", - "【padding】 : margine interno su tutti i lati 【EdgeInsetsGeometry】\"", - "EdgeInsets.all viene utilizzato per definire lo stesso margine su tutti i lati" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding margine singolo", - "desc": [ - "EdgeInsets.only viene utilizzato per definire lo stesso margine su tutti i lati" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding margine direzionale", - "desc": [ - "EdgeInsets.symmetric viene utilizzato per definire i margini orizzontali e verticali" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ja_JP.json deleted file mode 100644 index d4009c668..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ja_JP.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "余白コンポーネント", - "info": "一つの子コンポーネントを収容し、自身の内側の余白を追加して子コンポーネントの占めるスペースを制限します。コア属性はpaddingです。", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding四面等余白", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【padding】 : 内側の四辺の余白 【EdgeInsetsGeometry】", - "EdgeInsets.allは同じ四辺の余白を制限するために使用されます" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding単独余白", - "desc": [ - "EdgeInsets.onlyは同じ四辺の余白を制限するために使用されます" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding方向余白", - "desc": [ - "EdgeInsets.symmetricは水平方向と垂直方向の余白を制限するために使用されます" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ko_KR.json deleted file mode 100644 index bfa917b7f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ko_KR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "여백 컴포넌트", - "info": "하나의 자식 컴포넌트를 수용할 수 있으며, 자체 내부 여백을 추가하여 자식 컴포넌트의 공간을 제한합니다. 핵심 속성은 padding입니다.", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding 사면 동일 여백", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【padding】 : 내부 사면 여백 【EdgeInsetsGeometry】\"", - "EdgeInsets.all은 동일한 사면 여백을 지정하는 데 사용됩니다." - ] - }, - { - "file": "node2_only.dart", - "name": "Padding 개별 여백", - "desc": [ - "EdgeInsets.only는 동일한 사면 여백을 지정하는 데 사용됩니다." - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding 방향 여백", - "desc": [ - "EdgeInsets.symmetric는 수평 및 수직 방향의 여백을 지정하는 데 사용됩니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_pt_PT.json deleted file mode 100644 index 185dc4cf6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_pt_PT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "Componente de Margem", - "info": "Pode acomodar um componente filho, adicionando o seu próprio preenchimento interno para limitar o espaço ocupado pelo componente filho, a propriedade central é o padding.", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding com Margens Iguais em Todos os Lados", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【padding】 : Margens internas 【EdgeInsetsGeometry】\"", - "EdgeInsets.all é usado para definir margens iguais em todos os lados" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding com Margens Individuais", - "desc": [ - "EdgeInsets.only é usado para definir margens específicas" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding com Margens Direcionais", - "desc": [ - "EdgeInsets.symmetric é usado para definir margens horizontais e verticais" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ru_RU.json deleted file mode 100644 index 8cc5d92b3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ru_RU.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "Компонент отступов", - "info": "Может содержать один дочерний компонент, добавляя собственные внутренние отступы для ограничения места, занимаемого дочерним компонентом. Основное свойство - padding.", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding равные отступы со всех сторон", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】", - "EdgeInsets.all используется для задания одинаковых отступов со всех сторон" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding отдельные отступы", - "desc": [ - "EdgeInsets.only используется для задания одинаковых отступов со всех сторон" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding направленные отступы", - "desc": [ - "EdgeInsets.symmetric используется для задания отступов по горизонтали и вертикали" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_zh-CN.json deleted file mode 100644 index 6c2cb52a2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_zh-CN.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "边距组件", - "info": "可容纳一个子组件,添加自身内边距来限制孩子组件的占位,核心属性为padding。", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding四面等边距", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【padding】 : 内四边距 【EdgeInsetsGeometry】\"", - "EdgeInsets.all用来限定相同的四边边距" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding单独边距边距", - "desc": [ - "EdgeInsets.only用来限定相同的四边边距" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding方向边距", - "desc": [ - "EdgeInsets.symmetric用来限定水平和竖直方向的边距" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node1_all.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node1_all.dart deleted file mode 100644 index ee5f54a7a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node1_all.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/5/3 -/// contact me by email 1981462002@qq.com - -class PaddingAll extends StatelessWidget { - const PaddingAll({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 150, - child: Padding( - padding: const EdgeInsets.all(20), - child: _buildChild(), - ), - ); - } - - Widget _buildChild() => Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 100, - height: 100, - child: const Text("孩子"), - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node2_only.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node2_only.dart deleted file mode 100644 index 2ee74a2c1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node2_only.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/5/3 -/// contact me by email 1981462002@qq.com - -class PaddingOnly extends StatelessWidget { - const PaddingOnly({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 150, - child: Padding( - padding: const EdgeInsets.only(top:10,left: 10), - child: _buildChild(), - ), - ); - } - - Widget _buildChild() => Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 100, - height: 100, - child: const Text("孩子"), - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node3_symmetric.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node3_symmetric.dart deleted file mode 100644 index db66db531..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node3_symmetric.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/5/3 -/// contact me by email 1981462002@qq.com - -class PaddingSymmetric extends StatelessWidget { - const PaddingSymmetric({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 150, - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 30,horizontal: 10), - child: _buildChild(), - ), - ); - } - - Widget _buildChild() => Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 100, - height: 100, - child: const Text("孩子"), - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_de_DE.json deleted file mode 100644 index 68dd4911e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "Physikalisches Modul", - "info": "Ermöglicht das Zuschneiden von Unterkomponenten in runder oder quadratischer Form und ermöglicht die Angabe von Hintergrundfarbe, Rundung, Schattentiefe, Schattenfarbe und Zuschneideverhalten.", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PhysicalModel", - "desc": [ - "【clipBehavior】: Zuschneideverhalten 【Clip】", - "【borderRadius】: Rundung 【BorderRadius】", - "【child】: Unterkomponente 【Widget】", - "【elevation】: Schattentiefe 【double】", - "【shadowColor】: Schattenfarbe 【Color】", - "【shape】: Form 【BoxShape】", - "【color】: Farbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_en_US.json deleted file mode 100644 index b9351db83..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "Physical Module", - "info": "Allows child components to be clipped according to circles and squares, and can specify background color, rounded corners, shadow depth, shadow color, and clipping behavior.", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PhysicalModel", - "desc": [ - "【clipBehavior】: Clipping Behavior 【Clip】", - "【borderRadius】: Rounded Corners 【BorderRadius】", - "【child】: Child Component 【Widget】", - "【elevation】: Shadow Depth 【double】", - "【shadowColor】: Shadow Color 【Color】", - "【shape】: Shape 【BoxShape】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_es_ES.json deleted file mode 100644 index e00162d5e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "Módulo Físico", - "info": "Permite recortar los componentes secundarios en forma circular o cuadrada, y se puede especificar el color de fondo, el radio de las esquinas, la profundidad de la sombra, el color de la sombra y el comportamiento de recorte.", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PhysicalModel", - "desc": [ - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【borderRadius】 : Radio de las esquinas 【BorderRadius】", - "【child】 : Componente secundario 【Widget】", - "【elevation】 : Profundidad de la sombra 【double】", - "【shadowColor】 : Color de la sombra 【Color】", - "【shape】 : Forma 【BoxShape】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_fr_FR.json deleted file mode 100644 index 43674cf5d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "Module Physique", - "info": "Permet de découper les composants enfants selon une forme circulaire ou carrée, et de spécifier la couleur de fond, les coins arrondis, la profondeur de l'ombre, la couleur de l'ombre et le comportement de découpe.", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PhysicalModel", - "desc": [ - "【clipBehavior】 : Comportement de découpe 【Clip】", - "【borderRadius】 : Coins arrondis 【BorderRadius】", - "【child】 : Composant enfant 【Widget】", - "【elevation】 : Profondeur de l'ombre 【double】", - "【shadowColor】 : Couleur de l'ombre 【Color】", - "【shape】 : Forme 【BoxShape】", - "【color】: Couleur 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_it_IT.json deleted file mode 100644 index 971304862..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "Modulo Fisico", - "info": "Permette di ritagliare i componenti figli in base a forme circolari o quadrate, e di specificare il colore di sfondo, gli angoli arrotondati, la profondità dell'ombra, il colore dell'ombra e il comportamento di ritaglio.", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di PhysicalModel", - "desc": [ - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【borderRadius】 : Angoli arrotondati 【BorderRadius】", - "【child】 : Componente figlio 【Widget】", - "【elevation】 : Profondità dell'ombra 【double】", - "【shadowColor】 : Colore dell'ombra 【Color】", - "【shape】 : Forma 【BoxShape】", - "【color】: Colore 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ja_JP.json deleted file mode 100644 index 82ad3a43e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "物理モジュール", - "info": "子コンポーネントを円形や四角形でクリップし、背景色、角丸、影の深さ、影の色、クリップ動作を指定することができます。", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PhysicalModelの基本的な使用", - "desc": [ - "【clipBehavior】 : クリップ動作 【Clip】", - "【borderRadius】 : 角丸 【BorderRadius】", - "【child】 : 子コンポーネント 【Widget】", - "【elevation】 : 影の深さ 【double】", - "【shadowColor】 : 影の色 【Color】", - "【shape】 : 形状 【BoxShape】", - "【color】: 色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ko_KR.json deleted file mode 100644 index 8d153b759..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "물리 모듈", - "info": "자식 위젯을 원형 또는 사각형으로 자를 수 있으며, 배경색, 모서리 반경, 그림자 깊이, 그림자 색상, 클리핑 동작을 지정할 수 있습니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PhysicalModel 기본 사용", - "desc": [ - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【borderRadius】 : 모서리 반경 【BorderRadius】", - "【child】 : 자식 위젯 【Widget】", - "【elevation】 : 그림자 깊이 【double】", - "【shadowColor】 : 그림자 색상 【Color】", - "【shape】 : 모양 【BoxShape】", - "【color】: 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_pt_PT.json deleted file mode 100644 index 2ee84c80f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "Módulo Físico", - "info": "Permite que os subcomponentes sejam cortados de acordo com formas circulares ou quadradas, e pode especificar a cor de fundo, cantos arredondados, profundidade da sombra, cor da sombra e comportamento de corte.", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do PhysicalModel", - "desc": [ - "【clipBehavior】 : Comportamento de corte 【Clip】", - "【borderRadius】 : Cantos arredondados 【BorderRadius】", - "【child】 : Subcomponente 【Widget】", - "【elevation】 : Profundidade da sombra 【double】", - "【shadowColor】 : Cor da sombra 【Color】", - "【shape】 : Forma 【BoxShape】", - "【color】: Cor 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ru_RU.json deleted file mode 100644 index 2c6f69f07..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "Физический модуль", - "info": "Позволяет обрезать дочерние компоненты по кругу или квадрату, а также можно указать цвет фона, радиус скругления, глубину тени, цвет тени и поведение обрезки.", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PhysicalModel", - "desc": [ - "【clipBehavior】 : Поведение обрезки 【Clip】", - "【borderRadius】 : Радиус скругления 【BorderRadius】", - "【child】 : Дочерний компонент 【Widget】", - "【elevation】 : Глубина тени 【double】", - "【shadowColor】 : Цвет тени 【Color】", - "【shape】 : Форма 【BoxShape】", - "【color】: Цвет 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_zh-CN.json deleted file mode 100644 index 1b02584c8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "物理模块", - "info": "可以让子组件按照圆形、方行进行剪裁,并且可以指定背景色、圆角、影深、阴影颜色、剪切行为。", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PhysicalModel基本使用", - "desc": [ - "【clipBehavior】 : 裁剪行为 【Clip】", - "【borderRadius】 : 圆角 【BorderRadius】", - "【child】 : 子组件 【Widget】", - "【elevation】 : 阴影深 【double】", - "【shadowColor】 : 阴影颜色 【Color】", - "【shape】 : 形状 【BoxShape】", - "【color】: 颜色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/node1_base.dart deleted file mode 100644 index 716ec9ff4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/node1_base.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class PhysicalModelDemo extends StatelessWidget{ - const PhysicalModelDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - SizedBox( - width: 150, - height: 150, - child: PhysicalModel( - shadowColor: Colors.orange, - elevation: 3, - child: Image.asset( - 'assets/images/caver.webp', - fit: BoxFit.cover, - ), - clipBehavior: Clip.hardEdge, - shape: BoxShape.circle, - color: Colors.deepPurpleAccent), - ), - - SizedBox( - width: 150, - height: 150, - child: PhysicalModel( - shadowColor: Colors.orange, - elevation: 3, - child: Image.asset( - 'assets/images/caver.webp', - fit: BoxFit.cover, - ), - borderRadius: const BorderRadius.all(Radius.circular(20)), - clipBehavior: Clip.hardEdge, - shape: BoxShape.rectangle, - color: Colors.deepPurpleAccent), - ), - ], - ); - } - -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_de_DE.json deleted file mode 100644 index 73eed0969..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "Physikalische Form", - "info": "Ermöglicht es den Unterkomponenten, entlang eines Pfads beschnitten zu werden, und ermöglicht die Angabe von Hintergrundfarbe, Schattentiefe, Schattenfarbe und Schneidverhalten.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PhysicalShape", - "desc": [ - "【clipper】 : Clipper 【CustomClipper】", - "【clipBehavior】 : Schneidverhalten 【Clip】", - "【child】 : Unterkomponente 【Widget】", - "【elevation】 : Schattentiefe 【double】", - "【shadowColor】 : Schattenfarbe 【Color】", - "【color】: Farbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_en_US.json deleted file mode 100644 index 4ea4b73e4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "Physical Shape", - "info": "Allows child components to be clipped according to the path, and can specify background color, shadow depth, shadow color, and clipping behavior.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PhysicalShape", - "desc": [ - "【clipper】: Clipper 【CustomClipper】", - "【clipBehavior】: Clipping Behavior 【Clip】", - "【child】: Child Component 【Widget】", - "【elevation】: Shadow Depth 【double】", - "【shadowColor】: Shadow Color 【Color】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_es_ES.json deleted file mode 100644 index dcf2db89d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "Forma Física", - "info": "Permite que los componentes hijos se recorten según una ruta, y se puede especificar el color de fondo, la profundidad de la sombra, el color de la sombra y el comportamiento de recorte.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PhysicalShape", - "desc": [ - "【clipper】: Recortador 【CustomClipper】", - "【clipBehavior】: Comportamiento de recorte 【Clip】", - "【child】: Componente hijo 【Widget】", - "【elevation】: Profundidad de la sombra 【double】", - "【shadowColor】: Color de la sombra 【Color】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_fr_FR.json deleted file mode 100644 index 5eb0c9f1e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "Forme physique", - "info": "Permet de découper les composants enfants selon un chemin, et permet de spécifier la couleur de fond, la profondeur de l'ombre, la couleur de l'ombre et le comportement de découpage.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PhysicalShape", - "desc": [ - "【clipper】 : coupeur 【CustomClipper】", - "【clipBehavior】 : comportement de découpage 【Clip】", - "【child】 : composant enfant 【Widget】", - "【elevation】 : profondeur de l'ombre 【double】", - "【shadowColor】 : couleur de l'ombre 【Color】", - "【color】: couleur 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_it_IT.json deleted file mode 100644 index 6946db317..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "Forma Fisica", - "info": "Consente ai componenti figli di essere ritagliati secondo un percorso e può specificare il colore di sfondo, la profondità dell'ombra, il colore dell'ombra e il comportamento di ritaglio.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di PhysicalShape", - "desc": [ - "【clipper】 : Ritagliatore 【CustomClipper】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【child】 : Componente figlio 【Widget】", - "【elevation】 : Profondità dell'ombra 【double】", - "【shadowColor】 : Colore dell'ombra 【Color】", - "【color】: Colore 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ja_JP.json deleted file mode 100644 index 73e8f5f19..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "物理形状", - "info": "子コンポーネントをパスに沿ってクリップし、背景色、影の深さ、影の色、クリップ動作を指定できます。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PhysicalShapeの基本使用", - "desc": [ - "【clipper】 : クリッパー 【CustomClipper】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【child】 : 子コンポーネント 【Widget】", - "【elevation】 : 影の深さ 【double】", - "【shadowColor】 : 影の色 【Color】", - "【color】: 色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ko_KR.json deleted file mode 100644 index edbc87f7a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "물리적 모양", - "info": "자식 위젯이 경로에 따라 잘릴 수 있도록 하고, 배경색, 그림자 깊이, 그림자 색상, 클리핑 동작을 지정할 수 있습니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PhysicalShape 기본 사용", - "desc": [ - "【clipper】 : 클리퍼 【CustomClipper】", - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【child】 : 자식 위젯 【Widget】", - "【elevation】 : 그림자 깊이 【double】", - "【shadowColor】 : 그림자 색상 【Color】", - "【color】: 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_pt_PT.json deleted file mode 100644 index 293b4bd00..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "Forma Física", - "info": "Permite que os componentes filhos sejam cortados de acordo com o caminho, e pode especificar a cor de fundo, profundidade da sombra, cor da sombra, comportamento de corte.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do PhysicalShape", - "desc": [ - "【clipper】: Cortador 【CustomClipper】", - "【clipBehavior】: Comportamento de Corte 【Clip】", - "【child】: Componente Filho 【Widget】", - "【elevation】: Profundidade da Sombra 【double】", - "【shadowColor】: Cor da Sombra 【Color】", - "【color】: Cor 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ru_RU.json deleted file mode 100644 index e9ee52388..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "Физическая форма", - "info": "Позволяет обрезать дочерние компоненты по пути, а также можно указать цвет фона, глубину тени, цвет тени и поведение обрезки.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PhysicalShape", - "desc": [ - "【clipper】 : Обрезчик 【CustomClipper】", - "【clipBehavior】 : Поведение обрезки 【Clip】", - "【child】 : Дочерний компонент 【Widget】", - "【elevation】 : Глубина тени 【double】", - "【shadowColor】 : Цвет тени 【Color】", - "【color】: Цвет 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_zh-CN.json deleted file mode 100644 index d09a16837..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "物理形状", - "info": "可以让子组件按照路径进行剪裁,并且可以指定背景色、影深、阴影颜色、剪切行为。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PhysicalShape基本使用", - "desc": [ - "【clipper】 : 裁剪器 【CustomClipper】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【child】 : 子组件 【Widget】", - "【elevation】 : 阴影深 【double】", - "【shadowColor】 : 阴影颜色 【Color】", - "【color】: 颜色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/node1_base.dart deleted file mode 100644 index e2f4e8727..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/node1_base.dart +++ /dev/null @@ -1,30 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class PhysicalShapeDemo extends StatelessWidget { - const PhysicalShapeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 200, - height: 200, - child: PhysicalShape( - shadowColor: Colors.orange, - elevation: 3, - child: Image.asset( - 'assets/images/caver.webp', - fit: BoxFit.cover, - ), - clipBehavior: Clip.hardEdge, - clipper: const ShapeBorderClipper( - shape: CircleBorder(side: BorderSide.none), - ), - color: Colors.deepPurpleAccent), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_de_DE.json deleted file mode 100644 index 3f21c3409..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "Neulackgrenze", - "info": "Erstellt eine separate Anzeigeliste für Unterkomponenten, um die Leistung zu verbessern. Im Quellcode wird es in Komponenten wie TextField, DrawerController, Scrollbar, Sliver usw. verwendet.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RepaintBoundary", - "desc": [ - "【child】 : Unterkomponente 【Widget】", - "Zum Beispiel wird in der obigen Zeichenansicht die paint-Methode auch dann kontinuierlich ausgeführt, wenn shouldRepaint false ist. Die Verwendung von RepaintBoundary kann unnötiges Zeichnen vermeiden." - ] - }, - { - "file": "node2_save.dart", - "name": "Speichern eines Widgets als Bild", - "desc": [ - "Mit RenderRepaintBoundary können Bildinformationen der Unterkomponente abgerufen werden, um sie als Bilddatei zu speichern." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_en_US.json deleted file mode 100644 index 420495baa..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "Repaint Boundary", - "info": "Creates a separate display list for child components to improve performance. It is used in components such as TextField, DrawerController, Scrollbar, and Sliver in the source code.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RepaintBoundary", - "desc": [ - "【child】 : Child component 【Widget】", - "For example, in the above drawing view, even if shouldRepaint is false, the paint method will be continuously executed during scrolling. Using RepaintBoundary can avoid unnecessary drawing." - ] - }, - { - "file": "node2_save.dart", - "name": "Save Widget as Image", - "desc": [ - "Through RenderRepaintBoundary, you can obtain the Image information of the child component, and then save the bytes as an image file." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_es_ES.json deleted file mode 100644 index 82831684e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "Límite de repintado", - "info": "Crea una lista de visualización separada para los componentes hijos, mejorando el rendimiento. Se utiliza en componentes como TextField, DrawerController, Scrollbar, Sliver, etc.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RepaintBoundary", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "Por ejemplo, en la vista de dibujo anterior, incluso si shouldRepaint es false, el método paint se ejecutará continuamente durante el desplazamiento. Usar RepaintBoundary puede evitar pinturas innecesarias." - ] - }, - { - "file": "node2_save.dart", - "name": "Guardar Widget como imagen", - "desc": [ - "A través de RenderRepaintBoundary se puede obtener la información de la imagen del componente hijo, y así guardar los bytes como un archivo de imagen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_fr_FR.json deleted file mode 100644 index 838e65f06..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "Limite de Repaint", - "info": "Crée une liste d'affichage séparée pour les composants enfants, améliorant ainsi les performances. Utilisé dans les composants tels que TextField, DrawerController, Scrollbar, Sliver, etc. dans le code source.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RepaintBoundary", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "Par exemple, dans la vue de dessin ci-dessus, même si shouldRepaint est false, la méthode paint sera constamment exécutée lors du défilement. L'utilisation de RepaintBoundary peut éviter les peintures inutiles." - ] - }, - { - "file": "node2_save.dart", - "name": "Sauvegarder un Widget en tant qu'image", - "desc": [ - "Grâce à RenderRepaintBoundary, il est possible d'obtenir les informations d'image du composant enfant, puis de les sauvegarder sous forme de fichier image." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_it_IT.json deleted file mode 100644 index 5ca398003..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "Confine di ridisegno", - "info": "Crea una lista di visualizzazione separata per i componenti figli, migliorando le prestazioni. Nel codice sorgente, viene utilizzato in componenti come TextField, DrawerController, Scrollbar, Sliver, ecc.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di RepaintBoundary", - "desc": [ - "【child】 : componente figlio 【Widget】", - "Ad esempio, nella vista di disegno sopra, anche se shouldRepaint è false, il metodo paint verrà eseguito continuamente durante lo scorrimento. L'uso di RepaintBoundary può evitare ridisegni non necessari." - ] - }, - { - "file": "node2_save.dart", - "name": "Salvare un Widget come immagine", - "desc": [ - "Attraverso RenderRepaintBoundary è possibile ottenere le informazioni sull'immagine del componente figlio, ottenendo così i byte per salvarli come file immagine." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ja_JP.json deleted file mode 100644 index ac0a67214..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "再描画境界", - "info": "子コンポーネントのための別個の表示リストを作成し、パフォーマンスを向上させます。ソースコードではTextField、DrawerController、Scrollbar、Sliverなどのコンポーネントに適用されています", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RepaintBoundaryの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "例えば、上記の描画ビューでは、shouldRepaintがfalseであっても、スクロール中にpaintメソッドが繰り返し実行されます。RepaintBoundaryを使用することで、不要な描画を避けることができます。" - ] - }, - { - "file": "node2_save.dart", - "name": "Widgetを画像として保存", - "desc": [ - "RenderRepaintBoundaryを使用して、子コンポーネントのImage情報を取得し、バイトとして画像ファイルに保存することができます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ko_KR.json deleted file mode 100644 index 79bd059f8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "리페인트 경계", - "info": "자식 위젯을 위한 별도의 디스플레이 리스트를 생성하여 성능을 향상시킵니다. 소스 코드에서 TextField, DrawerController, Scrollbar, Sliver 등 다양한 위젯에 적용되어 있습니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RepaintBoundary 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "예를 들어 위의 그리기 뷰는 shouldRepaint가 false인 경우에도 스크롤 중에 paint 메소드가 계속 실행됩니다. RepaintBoundary를 사용하면 불필요한 그리기를 방지할 수 있습니다." - ] - }, - { - "file": "node2_save.dart", - "name": "위젯을 이미지로 저장", - "desc": [ - "RenderRepaintBoundary를 통해 자식 위젯의 이미지 정보를 얻어 바이트로 저장하여 이미지 파일로 저장할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_pt_PT.json deleted file mode 100644 index 78089c63b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "Limite de Repintura", - "info": "Cria uma lista de exibição separada para componentes filhos, melhorando o desempenho. É utilizado em componentes como TextField, DrawerController, Scrollbar, Sliver, entre outros, no código-fonte.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RepaintBoundary", - "desc": [ - "【child】 : Componente filho 【Widget】", - "Por exemplo, na vista de desenho acima, mesmo que shouldRepaint seja falso, o método paint será executado continuamente durante o deslizamento. Usar RepaintBoundary pode evitar pinturas desnecessárias." - ] - }, - { - "file": "node2_save.dart", - "name": "Salvar Widget como Imagem", - "desc": [ - "Através do RenderRepaintBoundary, é possível obter informações de imagem do componente filho e, assim, salvar os bytes como um arquivo de imagem." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ru_RU.json deleted file mode 100644 index ef65d3e35..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "Граница перерисовки", - "info": "Создает отдельный список отображения для дочерних компонентов, повышая производительность. Используется в компонентах, таких как TextField, DrawerController, Scrollbar, Sliver и других в исходном коде.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RepaintBoundary", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "Например, в приведенном выше примере отображения, даже если shouldRepaint равен false, метод paint будет постоянно выполняться во время прокрутки. Использование RepaintBoundary позволяет избежать ненужной перерисовки." - ] - }, - { - "file": "node2_save.dart", - "name": "Сохранение Widget в виде изображения", - "desc": [ - "С помощью RenderRepaintBoundary можно получить информацию об изображении дочернего компонента и сохранить его в виде файла изображения." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_zh-CN.json deleted file mode 100644 index b2ee37a97..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "重绘边界", - "info": "为子组件创建一个单独的显示列表,提升性能。源码中在TextField、DrawerController、Scrollbar、Sliver等组件中均有应用", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RepaintBoundary基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "比如上面的绘制视图,即使shouldRepaint为false,在滑动中会也会不断执行paint方法,使用RepaintBoundary可以避免不必要的绘制。" - ] - }, - { - "file": "node2_save.dart", - "name": "保存Widget成为图片", - "desc": [ - "通过RenderRepaintBoundary可以获取子组件的Image信息,从而获取字节保存为图片文件。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/main.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/main.dart deleted file mode 100644 index 13fecd3ad..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/main.dart +++ /dev/null @@ -1,26 +0,0 @@ -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com -/// 说明: - -import 'package:flutter/material.dart'; -import 'node2_save.dart'; - - -void main() => runApp(const MyApp()); - -class MyApp extends StatelessWidget { - const MyApp({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return MaterialApp( - title: 'Flutter Demo', - theme: ThemeData( - primarySwatch: Colors.blue, - ), - home: Scaffold( - appBar: AppBar(), - body: Center(child: RepaintBoundarySave()), - )); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart deleted file mode 100644 index f26bf1f04..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart +++ /dev/null @@ -1,178 +0,0 @@ -import 'dart:ui'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class RepaintBoundaryDemo extends StatelessWidget{ - const RepaintBoundaryDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const RepaintBoundary( - child: TempPlayBezier3Page(), - ); - } -} - -class TempPlayBezier3Page extends StatefulWidget { - const TempPlayBezier3Page({Key? key}) : super(key: key); - - @override - _TempPlayBezier3PageState createState() => _TempPlayBezier3PageState(); -} - -class _TempPlayBezier3PageState extends State { - List _pos = []; - int? selectPos; - - @override - void initState() { - _initPoints(); - super.initState(); - } - - void _initPoints() { - _pos = []; - _pos.add(const Offset(0, 0)); - _pos.add(const Offset(60, -60)); - _pos.add(const Offset(-90, -90)); - _pos.add(const Offset(-120, -40)); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - width: MediaQuery.of(context).size.width, - child: CustomPaint( - painter: TempBezierPainter(pos: _pos, selectPos: selectPos), - ), - ); - } -} - -class TempBezierPainter extends CustomPainter { - late Paint _gridPaint; - late Path _gridPath; - - late Paint _mainPaint; - late Path _mainPath; - int? selectPos; - late Paint _helpPaint; - - List pos; - - TempBezierPainter({this.pos=const [], this.selectPos}) { - _gridPaint = Paint()..style = PaintingStyle.stroke; - _gridPath = Path(); - - _mainPaint = Paint() - ..color = Colors.orange - ..style = PaintingStyle.stroke - ..strokeWidth = 2; - _mainPath = Path(); - - _helpPaint = Paint() - ..color = Colors.purple - ..style = PaintingStyle.stroke - ..strokeWidth = 2 - ..strokeCap = StrokeCap.round; - } - - @override - void paint(Canvas canvas, Size size) { - print('----------Paint-------'); - canvas.clipRect(Offset.zero & size); - canvas.translate(size.width / 2, size.height / 2); - _drawGrid(canvas, size); //绘制格线 - _drawAxis(canvas, size); //绘制轴线 - - _mainPath.moveTo(pos[0].dx, pos[0].dy); - _mainPath.cubicTo( - pos[1].dx, pos[1].dy, pos[2].dx, pos[2].dy, pos[3].dx, pos[3].dy); - canvas.drawPath(_mainPath, _mainPaint); - _drawHelp(canvas); - _drawSelectPos(canvas); - } - - @override - bool shouldRepaint(CustomPainter oldDelegate) => false; - - void _drawGrid(Canvas canvas, Size size) { - _gridPaint - ..color = Colors.grey - ..strokeWidth = 0.5; - _gridPath = _buildGridPath(_gridPath, size); - canvas.drawPath(_buildGridPath(_gridPath, size), _gridPaint); - - canvas.save(); - canvas.scale(1, -1); //沿x轴镜像 - canvas.drawPath(_gridPath, _gridPaint); - canvas.restore(); - - canvas.save(); - canvas.scale(-1, 1); //沿y轴镜像 - canvas.drawPath(_gridPath, _gridPaint); - canvas.restore(); - - canvas.save(); - canvas.scale(-1, -1); //沿原点镜像 - canvas.drawPath(_gridPath, _gridPaint); - canvas.restore(); - } - - void _drawAxis(Canvas canvas, Size size) { - canvas.drawPoints( - PointMode.lines, - [ - Offset(-size.width / 2, 0), - Offset(size.width / 2, 0), - Offset(0, -size.height / 2), - Offset(0, size.height / 2), - Offset(0, size.height / 2), - Offset(0 - 7.0, size.height / 2 - 10), - Offset(0, size.height / 2), - Offset(0 + 7.0, size.height / 2 - 10), - Offset(size.width / 2, 0), - Offset(size.width / 2 - 10, 7), - Offset(size.width / 2, 0), - Offset(size.width / 2 - 10, -7), - ], - _gridPaint - ..color = Colors.blue - ..strokeWidth = 1.5); - } - - Path _buildGridPath(Path path, Size size, {step = 20.0}) { - for (int i = 0; i < size.height / 2 / step; i++) { - path.moveTo(0, step * i); - path.relativeLineTo(size.width / 2, 0); - } - for (int i = 0; i < size.width / 2 / step; i++) { - path.moveTo(step * i, 0); - path.relativeLineTo( - 0, - size.height / 2, - ); - } - return path; - } - - void _drawHelp(Canvas canvas) { - canvas.drawPoints(PointMode.lines, pos, _helpPaint..strokeWidth = 1); - canvas.drawPoints(PointMode.points, pos, _helpPaint..strokeWidth = 8); - } - - void _drawSelectPos(Canvas canvas) { - if (selectPos == null) return; - canvas.drawCircle( - pos[selectPos!], - 10, - _helpPaint - ..color = Colors.green - ..strokeWidth = 2); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/node2_save.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/node2_save.dart deleted file mode 100644 index a235ebd35..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/node2_save.dart +++ /dev/null @@ -1,70 +0,0 @@ -import 'dart:io'; -import 'dart:typed_data'; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:path_provider/path_provider.dart'; -import 'dart:ui' as ui; -import 'node1_base.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class RepaintBoundarySave extends StatefulWidget { - - const RepaintBoundarySave({super.key}); - - @override - State createState() => _RepaintBoundarySaveState(); -} - -class _RepaintBoundarySaveState extends State { - final GlobalKey _globalKey = GlobalKey(); - - @override - Widget build(BuildContext context) { - return Stack( - children: [ - RepaintBoundary( - key: _globalKey, - child: const TempPlayBezier3Page(), - ), - Positioned(right: -10, child: _buildButton3(context)) - ], - ); - } - - Widget _buildButton3(context) => MaterialButton( - child: const Icon( - Icons.save_alt, - size: 15, - color: Colors.white, - ), - color: Colors.green, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - onPressed: () async { - Uint8List? bits = await _widget2Image(_globalKey); - Directory dir = await getApplicationSupportDirectory(); - File file = File(dir.path + "/save_img.png"); - if(bits==null) return; - var f = await file.writeAsBytes(bits); - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - backgroundColor: Theme.of(context).primaryColor, - content: Text('保存成功后! 路径为:${f.path}'), - )); - }); - - Future _widget2Image(GlobalKey key) async { - RenderObject? boundary = key.currentContext?.findRenderObject(); - if(boundary==null || boundary is! RenderRepaintBoundary) return null; - - //获得 ui.image - ui.Image img = await boundary.toImage(); - //获取图片字节 - var byteData = await img.toByteData(format: ui.ImageByteFormat.png); - Uint8List? bits = byteData?.buffer.asUint8List(); - return bits; - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_de_DE.json deleted file mode 100644 index 731df6159..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "Drehbox", - "info": "Kann ein Unterelement aufnehmen und es im Uhrzeigersinn um quarterTurns*90° drehen.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RotatedBox", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【quarterTurns】 : Um wie viele 90° gedreht werden soll 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_en_US.json deleted file mode 100644 index 7dcd5cb0c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "Rotated Box", - "info": "Can contain a child widget, rotating it clockwise by quarterTurns*90°.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RotatedBox", - "desc": [ - "【child】 : Child widget 【Widget】", - "【quarterTurns】 : How many 90° to rotate 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_es_ES.json deleted file mode 100644 index 1cb8f9ced..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "Caja Rotada", - "info": "Puede contener un componente hijo, girándolo en sentido horario en quarterTurns*90°.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RotatedBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【quarterTurns】 : Cuántos 90° girar 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_fr_FR.json deleted file mode 100644 index 6088e564e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "Boîte Rotée", - "info": "Peut contenir un composant enfant, le faisant pivoter dans le sens horaire de quarterTurns*90°.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RotatedBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【quarterTurns】 : Nombre de rotations de 90° 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_it_IT.json deleted file mode 100644 index e7323602a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "Scatola Ruotata", - "info": "Può contenere un componente figlio, ruotandolo in senso orario di quarterTurns*90°.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di RotatedBox", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【quarterTurns】 : Quanti 90° ruotare 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ja_JP.json deleted file mode 100644 index 9ab2b2334..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "回転ボックス", - "info": "1つの子コンポーネントを収容し、それを時計回りにquarterTurns*90°回転させます。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RotatedBoxの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【quarterTurns】 : 90°回転する回数 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ko_KR.json deleted file mode 100644 index 7b476c41f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "회전 상자", - "info": "하나의 자식 위젯을 포함할 수 있으며, 시계 방향으로 quarterTurns*90°만큼 회전시킵니다.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RotatedBox 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【quarterTurns】 : 90° 회전 횟수 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_pt_PT.json deleted file mode 100644 index cb67f1bfb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "Caixa Giratória", - "info": "Pode conter um componente filho, girando-o no sentido horário em quarterTurns*90°.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RotatedBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【quarterTurns】 : Quantos 90° para girar 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ru_RU.json deleted file mode 100644 index 7f6465f71..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "Повернутый ящик", - "info": "Может содержать один дочерний компонент, поворачивая его по часовой стрелке на quarterTurns*90°.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RotatedBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【quarterTurns】 : Сколько раз повернуть на 90° 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_zh-CN.json deleted file mode 100644 index 87b81cb2f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "旋转盒", - "info": "可容纳一个子组件,将其沿顺时针旋转quarterTurns*90°。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RotatedBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【quarterTurns】 : 旋转多少个90° 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/node1_base.dart deleted file mode 100644 index 622d17f58..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/node1_base.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomRotatedBox extends StatefulWidget { - const CustomRotatedBox({Key? key}) : super(key: key); - - @override - _CustomRotatedBoxState createState() => _CustomRotatedBoxState(); -} - -class _CustomRotatedBoxState extends State { - int _quarterTurns = 0; - - @override - Widget build(BuildContext context) { - return RotatedBox( - quarterTurns: _quarterTurns, - child: GestureDetector( - onTap: () => setState(() => _quarterTurns++), - child: const Icon( - Icons.android, - size: 60, - color: Colors.blue, - )), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_de_DE.json deleted file mode 100644 index b630b69dd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_de_DE.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "Shader-Maske", - "info": "Kann ein Kind aufnehmen und das Kind durch einen Shader einfärben, wobei der Mischmodus angegeben werden kann. Wird häufig für die Farbverlaufsverarbeitung von Komponenten verwendet.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "Radialer Farbverlauf", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【shaderCallback】 : Shader-Rückruf 【ShaderCallback】", - "【blendMode】 : Mischmodus 【BlendMode】", - " Erstellt einen radialen Farbverlaufsshader durch RadialGradient#createShader." - ] - }, - { - "file": "node2_linear.dart", - "name": "Linearer Farbverlauf", - "desc": [ - "Erstellt einen linearen Farbverlaufsshader durch LinearGradient#createShader", - "Weitere Informationen zu Shadern finden Sie im 【Zeichnungsalbum】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_en_US.json deleted file mode 100644 index bf1fb1abb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_en_US.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "Shader Mask", - "info": "Can accommodate a child and apply shading to the child through a shader, with the ability to specify blending modes. Commonly used for gradient processing of components.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "Radial Gradient Shading", - "desc": [ - "【child】: Child component 【Widget】", - "【shaderCallback】: Shader callback 【ShaderCallback】", - "【blendMode】: Blending mode 【BlendMode】", - " Create a radial gradient shader through RadialGradient#createShader." - ] - }, - { - "file": "node2_linear.dart", - "name": "Linear Gradient Shading", - "desc": [ - "Create a linear gradient shader through LinearGradient#createShader", - "For more information on shaders, see 【Drawing Album】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_es_ES.json deleted file mode 100644 index 7d568a3ca..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_es_ES.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "Máscara de sombreado", - "info": "Puede contener un hijo y aplicar sombreado al hijo a través de un sombreador, se puede especificar el modo de mezcla. Normalmente se utiliza para el procesamiento de gradientes de color en componentes.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "Sombreado de gradiente radial", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【shaderCallback】 : Callback del sombreador 【ShaderCallback】", - "【blendMode】 : Modo de mezcla 【BlendMode】", - " Crea un sombreador de gradiente radial a través de RadialGradient#createShader." - ] - }, - { - "file": "node2_linear.dart", - "name": "Sombreado de gradiente lineal", - "desc": [ - "Crea un sombreador de gradiente lineal a través de LinearGradient#createShader", - "Para más información sobre sombreadores, consulte el 【Álbum de dibujo】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_fr_FR.json deleted file mode 100644 index 4a4f8f299..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_fr_FR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "Masque de nuance", - "info": "Peut contenir un enfant et appliquer une teinte à l'enfant via un nuanceur, avec la possibilité de spécifier un mode de mélange. Couramment utilisé pour le traitement des dégradés de composants.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "Teinte de dégradé radial", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【shaderCallback】 : Rappel du nuanceur 【ShaderCallback】", - "【blendMode】 : Mode de mélange 【BlendMode】", - " Crée un nuanceur de dégradé radial via RadialGradient#createShader." - ] - }, - { - "file": "node2_linear.dart", - "name": "Teinte de dégradé linéaire", - "desc": [ - "Crée un nuanceur de dégradé linéaire via LinearGradient#createShader", - "Pour plus d'informations sur les nuanceurs, voir 【Album de dessin】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_it_IT.json deleted file mode 100644 index 14396a8ed..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_it_IT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "Maschera Shader", - "info": "Può contenere un figlio e colorare il figlio attraverso uno shader, specificando la modalità di fusione. Solitamente utilizzato per il trattamento della gradazione dei componenti.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "Sfumatura Radiale", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【shaderCallback】 : Callback dello shader 【ShaderCallback】", - "【blendMode】 : Modalità di fusione 【BlendMode】", - " Crea uno shader di sfumatura radiale attraverso RadialGradient#createShader." - ] - }, - { - "file": "node2_linear.dart", - "name": "Sfumatura Lineare", - "desc": [ - "Crea uno shader di sfumatura lineare attraverso LinearGradient#createShader", - "Per ulteriori informazioni sugli shader, consulta 【Album di disegno】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ja_JP.json deleted file mode 100644 index 5e543115f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ja_JP.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "シェーダーマスク", - "info": "1つの子要素を保持し、シェーダーを使用して子要素に色を付けることができます。ブレンドモードを指定できます。通常、コンポーネントのグラデーション処理に使用されます。", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "ラジアルグラデーションシェーダー", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【shaderCallback】 : シェーダーコールバック 【ShaderCallback】", - "【blendMode】 : ブレンドモード 【BlendMode】", - " RadialGradient#createShaderを使用してラジアルグラデーションシェーダーを作成します。" - ] - }, - { - "file": "node2_linear.dart", - "name": "リニアグラデーションシェーダー", - "desc": [ - "LinearGradient#createShaderを使用してリニアグラデーションシェーダーを作成します", - "シェーダーに関する詳細は【描画アルバム】を参照してください" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ko_KR.json deleted file mode 100644 index 093434188..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ko_KR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "셰이더 마스크", - "info": "하나의 자식을 포함할 수 있으며, 셰이더를 통해 자식에 색상을 입힐 수 있습니다. 혼합 모드를 지정할 수 있습니다. 일반적으로 컴포넌트 그라데이션 처리에 사용됩니다.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "방사형 그라데이션 색상", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【shaderCallback】 : 셰이더 콜백 【ShaderCallback】", - "【blendMode】 : 혼합 모드 【BlendMode】", - " RadialGradient#createShader를 통해 방사형 그라데이션 셰이더를 생성합니다." - ] - }, - { - "file": "node2_linear.dart", - "name": "선형 그라데이션 색상", - "desc": [ - "LinearGradient#createShader를 통해 선형 그라데이션 셰이더를 생성합니다", - "셰이더 관련 지식은 【그리기 앨범】을 참조하세요" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_pt_PT.json deleted file mode 100644 index a0bf5dd27..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_pt_PT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "Máscara de Shader", - "info": "Pode conter um filho e colorir o filho através de um shader, podendo especificar o modo de mistura. Geralmente usado para processamento de gradiente de componentes.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "Coloração de Gradiente Radial", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【shaderCallback】 : Callback do shader 【ShaderCallback】", - "【blendMode】 : Modo de mistura 【BlendMode】", - " Cria um shader de gradiente radial através de RadialGradient#createShader." - ] - }, - { - "file": "node2_linear.dart", - "name": "Coloração de Gradiente Linear", - "desc": [ - "Cria um shader de gradiente linear através de LinearGradient#createShader", - "Para mais informações sobre shaders, consulte o 【Álbum de Desenho】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ru_RU.json deleted file mode 100644 index 99c04db0b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ru_RU.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "Маска шейдера", - "info": "Может содержать один дочерний элемент и применять к нему шейдер, можно указать режим смешивания. Обычно используется для градиентной обработки компонентов.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "Радиальный градиент", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【shaderCallback】 : Коллбэк шейдера 【ShaderCallback】", - "【blendMode】 : Режим смешивания 【BlendMode】", - " Создание радиального градиентного шейдера через RadialGradient#createShader." - ] - }, - { - "file": "node2_linear.dart", - "name": "Линейный градиент", - "desc": [ - "Создание линейного градиентного шейдера через LinearGradient#createShader", - "Подробнее о шейдерах см. в 【Альбоме рисования】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_zh-CN.json deleted file mode 100644 index 357226820..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_zh-CN.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "着色器遮罩", - "info": "可容纳一个孩子,并通过着色器来对孩子进行着色,可指定混色模式。通常用于组件渐变色处理。", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "径向渐变着色", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【shaderCallback】 : 着色器回调 【ShaderCallback】", - "【blendMode】 : 混色模式 【BlendMode】", - " 通过RadialGradient#createShader创建径向渐变着色器。" - ] - }, - { - "file": "node2_linear.dart", - "name": "线性渐变着色", - "desc": [ - "通过LinearGradient#createShader创建线性渐变着色器", - "着色器相关知识详见【绘制专辑】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/node1_radial.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/node1_radial.dart deleted file mode 100644 index 7f9bda4c0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/node1_radial.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-12 -/// contact me by email 1981462002@qq.com - -class RadialShaderMask extends StatelessWidget { - const RadialShaderMask({Key? key}) : super(key: key); - - final List colors = const [Colors.red, Colors.yellow, Colors.blue]; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - ShaderMask( - shaderCallback: _buildShader, - child: Image.asset( - 'assets/images/icon_head.webp', - height: 70, - width: 70, - ), - ), - ShaderMask( - shaderCallback: _buildShader, - child: const Text( - '张风捷特烈', - style: TextStyle(fontSize: 40, color: Colors.white), - ), - ), - ShaderMask( - shaderCallback: _buildShader, - child: Container( - height: 100, - color: Colors.white, - width: 50, - ), - ), - ], - ); - } - - - Shader _buildShader(Rect bounds) => RadialGradient( - center: Alignment.topLeft, - radius: 1.0, - tileMode: TileMode.mirror, - colors: colors) - .createShader(bounds); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/node2_linear.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/node2_linear.dart deleted file mode 100644 index 2a96d7b37..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/node2_linear.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-12 -/// contact me by email 1981462002@qq.com - -class LinearShaderMask extends StatelessWidget { - const LinearShaderMask({Key? key}) : super(key: key); - - final List colors = const [Colors.red, Colors.yellow, Colors.blue]; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - ShaderMask( - shaderCallback: _buildShader, - child: Image.asset( - 'assets/images/icon_head.webp', - height: 70, - width: 70, - ), - ), - ShaderMask( - shaderCallback: _buildShader, - child: const Text( - '张风捷特烈', - style: TextStyle(fontSize: 40, color: Colors.white), - ), - ), - ShaderMask( - shaderCallback: _buildShader, - child: Container( - height: 100, - color: Colors.white, - width: 50, - ), - ), - ], - ); - } - - Shader _buildShader(Rect bounds) => LinearGradient( - begin: Alignment.centerLeft, - end: Alignment.centerRight, - tileMode: TileMode.mirror, - colors: colors) - .createShader(bounds); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_de_DE.json deleted file mode 100644 index 0dcba6cc5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "Größenänderungsbenachrichtigung", - "info": "Mit SizeChangedLayoutNotifier kann eine Benachrichtigung gesendet werden, nachdem sich der Layoutbereich eines Kindelements ändert. Die Benachrichtigung kann mit NotificationListener überwacht werden.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung", - "desc": [ - "【child】 : Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_en_US.json deleted file mode 100644 index b67b9139e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "Size Change Notification", - "info": "Using SizeChangedLayoutNotifier can send a notification after the layout area of the child component changes. NotificationListener can be used to monitor it.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage", - "desc": [ - "【child】 : Component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_es_ES.json deleted file mode 100644 index 9f4a9aef1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "Notificador de cambio de tamaño", - "info": "Usando SizeChangedLayoutNotifier, se puede emitir una notificación cuando cambia el área de diseño de un componente hijo. Se puede escuchar usando NotificationListener.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico", - "desc": [ - "【child】 : Componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_fr_FR.json deleted file mode 100644 index 4ba60dba9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "Notification de changement de taille", - "info": "Utiliser SizeChangedLayoutNotifier permet d'émettre une notification lorsque la zone de mise en page d'un composant enfant change. Utilisez NotificationListener pour écouter ces notifications.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base", - "desc": [ - "【child】 : Composant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_it_IT.json deleted file mode 100644 index ef73a668c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "Notifica di Cambio Dimensione", - "info": "Utilizzando SizeChangedLayoutNotifier, è possibile inviare una notifica quando l'area di layout di un componente figlio cambia. È possibile ascoltare questa notifica utilizzando NotificationListener.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di Base", - "desc": [ - "【child】 : Componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ja_JP.json deleted file mode 100644 index 75ee50c0a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "サイズ変更通知", - "info": "SizeChangedLayoutNotifierを使用すると、子コンポーネントのレイアウト領域が変更された後に通知を発行できます。NotificationListenerを使用して監視することができます。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "基本使用", - "desc": [ - "【child】 : コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ko_KR.json deleted file mode 100644 index 77ef19fc2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "크기 변경 알림", - "info": "SizeChangedLayoutNotifier를 사용하면 하위 구성 요소 레이아웃 영역이 변경된 후 알림을 보낼 수 있습니다. NotificationListener를 사용하여 이를 감지할 수 있습니다.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "기본 사용", - "desc": [ - "【child】 : 구성 요소 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_pt_PT.json deleted file mode 100644 index 928126c53..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "Notificador de Mudança de Tamanho", - "info": "Usando o SizeChangedLayoutNotifier, é possível emitir uma notificação após uma mudança na área de layout do componente filho. O NotificationListener pode ser usado para monitorar.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico", - "desc": [ - "【child】 : Componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ru_RU.json deleted file mode 100644 index 5380f36b2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "Уведомление об изменении размера", - "info": "Использование SizeChangedLayoutNotifier позволяет отправлять уведомления после изменения области макета дочернего компонента. Для прослушивания можно использовать NotificationListener.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование", - "desc": [ - "【child】 : Компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_zh-CN.json deleted file mode 100644 index 8cc2e40ae..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "尺寸变化通告", - "info": "使用 SizeChangedLayoutNotifier 可以在子组件布局区域发生变化后,发出通知。使用NotificationListener可以进行监听。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "基本使用", - "desc": [ - "【child】 : 组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/node1_base.dart deleted file mode 100644 index 4dd5fe89d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/node1_base.dart +++ /dev/null @@ -1,67 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class SizeChangedLayoutNotifierDemo extends StatefulWidget { - const SizeChangedLayoutNotifierDemo({Key? key}) : super(key: key); - - @override - _SizeChangedLayoutNotifierDemoState createState() => _SizeChangedLayoutNotifierDemoState(); -} - -class _SizeChangedLayoutNotifierDemoState extends State { - @override - Widget build(BuildContext context) { - return NotificationListener( - onNotification: _onNotification, - child: const ChangeableBox(), - ); - } - - bool _onNotification(SizeChangedLayoutNotification notification) { - print('---------SizeChangedLayoutNotification------'); - return false; - } -} - -class ChangeableBox extends StatefulWidget { - const ChangeableBox({Key? key}) : super(key: key); - - @override - _ChangeableBoxState createState() => _ChangeableBoxState(); -} - -class _ChangeableBoxState extends State { - double width = 40; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - SizeChangedLayoutNotifier( - child: Container( - width: width, - height: 100, - color: Colors.blue, - ), - ), - Slider( - max: 200, - min: 20, - divisions: 10, - value: width, - onChanged: _changeWidth, - ) - ], - ); - } - - void _changeWidth(double value) { - setState(() { - width = value; - }); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_de_DE.json deleted file mode 100644 index 5b1876fa2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "Größenfestgelegte Box", - "info": "Kann ein Kindelement aufnehmen und den Bereich für das Kindelement durch Angabe von Breite und Höhe begrenzen.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SizedBox", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【width】 : Breite 【double】", - "【height】 : Höhe 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_en_US.json deleted file mode 100644 index ff26d6bd7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "SizedBox", - "info": "Can contain a child component, limiting the area of the child component by specifying width and height.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SizedBox", - "desc": [ - "【child】 : Child component 【Widget】", - "【width】 : Width 【double】", - "【height】 : Height 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_es_ES.json deleted file mode 100644 index ced0e87b8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "Caja de tamaño fijo", - "info": "Puede contener un componente hijo, limitando el área del componente hijo especificando el ancho y el alto.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SizedBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【width】 : Ancho 【double】", - "【height】 : Alto 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_fr_FR.json deleted file mode 100644 index 22607dbb7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "Boîte de taille fixe", - "info": "Peut contenir un composant enfant, en spécifiant la largeur et la hauteur pour limiter la zone du composant enfant.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SizedBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【width】 : Largeur 【double】", - "【height】 : Hauteur 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_it_IT.json deleted file mode 100644 index 0fd5d488a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "Scatola di dimensioni fisse", - "info": "Può contenere un componente figlio, limitando l'area del componente figlio specificando larghezza e altezza.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di SizedBox", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【width】 : Larghezza 【double】", - "【height】 : Altezza 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ja_JP.json deleted file mode 100644 index 396c2501a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "サイズ指定ボックス", - "info": "子コンポーネントを収容し、幅と高さを指定して子コンポーネントの領域を制限します。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizedBoxの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【width】 : 幅 【double】", - "【height】 : 高さ 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ko_KR.json deleted file mode 100644 index da76fdd21..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "고정 크기 상자", - "info": "하위 컴포넌트를 수용할 수 있으며, 너비와 높이를 지정하여 하위 컴포넌트의 영역을 제한합니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizedBox 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【width】 : 너비 【double】", - "【height】 : 높이 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_pt_PT.json deleted file mode 100644 index 20ca3e91b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "Caixa de Tamanho Fixo", - "info": "Pode conter um componente filho, limitando a área do componente filho especificando a largura e altura.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SizedBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【width】 : Largura 【double】", - "【height】 : Altura 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ru_RU.json deleted file mode 100644 index e201ebc60..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "Коробка с фиксированным размером", - "info": "Может содержать один дочерний компонент, ограничивая область размещения дочернего компонента указанием ширины и высоты.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SizedBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【width】 : Ширина 【double】", - "【height】 : Высота 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_zh-CN.json deleted file mode 100644 index 825a2c2a4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "定尺寸盒", - "info": "可容纳一个子组件,通过指定宽高限定子组件容身区域。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizedBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【width】 : 宽 【double】", - "【height】 : 高 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/node1_base.dart deleted file mode 100644 index 3147a97fd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/node1_base.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomSizedBox extends StatelessWidget { - const CustomSizedBox({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Widget child = Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 50, - height: 50, - child: const Text("Static"), - ); - - Widget box = SizedBox( - width: 80, - height: 40, - child: Container( - color: Colors.orange, - child: const Icon( - Icons.android, - color: Colors.white, - )), - ); - - return Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 100, - child: Row( - children: [child, box, child], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_de_DE.json deleted file mode 100644 index 27ce75d03..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "Größenüberlaufbox", - "info": "Kann ein Kindelement aufnehmen, und das Kindelement darf den Bereich des Elternelements überlaufen. Das Kindelement kann durch die size-Eigenschaft verschoben werden und verfügt über die Ausrichtungseigenschaft alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SizedOverflowBox", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【size】 : Größenverschiebung 【Size】", - "【alignment】 : Ausrichtung 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_en_US.json deleted file mode 100644 index 6f3ed70a4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "Sized Overflow Box", - "info": "Can contain a child component, and the child component is allowed to overflow the parent component area. The child component can be offset through the size property, and has the alignment property.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SizedOverflowBox", - "desc": [ - "【child】: Child component 【Widget】", - "【size】: Size offset 【Size】", - "【alignment】: Alignment method 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_es_ES.json deleted file mode 100644 index 774d3627a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "Caja de desbordamiento de tamaño", - "info": "Puede contener un componente hijo, y el componente hijo puede desbordar el área del componente padre. Se puede desplazar el componente hijo mediante la propiedad size y tiene la propiedad de alineación alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SizedOverflowBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【size】 : Desplazamiento de tamaño 【Size】", - "【alignment】 : Método de alineación 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_fr_FR.json deleted file mode 100644 index 38f12409a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "Boîte de débordement dimensionnée", - "info": "Peut contenir un composant enfant, et le composant enfant est autorisé à déborder de la zone du composant parent. Il est possible de décaler le composant enfant à l'aide de la propriété size, et il possède la propriété d'alignement alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SizedOverflowBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【size】 : Décalage de taille 【Size】", - "【alignment】 : Méthode d'alignement 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_it_IT.json deleted file mode 100644 index 2a4ebf9fe..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "Scatola di dimensioni eccessive", - "info": "Può contenere un componente figlio e il componente figlio può fuoriuscire dall'area del componente genitore. È possibile spostare il componente figlio tramite la proprietà size e ha la proprietà di allineamento alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SizedOverflowBox", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【size】 : Spostamento delle dimensioni 【Size】", - "【alignment】 : Modalità di allineamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ja_JP.json deleted file mode 100644 index 872a5e1b9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "サイズオーバーフローボックス", - "info": "子コンポーネントを収容でき、子コンポーネントは親コンポーネントの領域をオーバーフローすることが許可されています。size属性を使用して子コンポーネントをオフセットでき、alignment属性を持っています。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizedOverflowBoxの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【size】 : サイズオフセット 【Size】", - "【alignment】 : アラインメント 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ko_KR.json deleted file mode 100644 index db62b43bc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "크기 오버플로우 박스", - "info": "하위 컴포넌트를 포함할 수 있으며, 하위 컴포넌트가 상위 컴포넌트 영역을 벗어날 수 있습니다. size 속성을 통해 하위 컴포넌트를 오프셋할 수 있으며, alignment 속성을 가지고 있습니다.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizedOverflowBox 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【size】 : 크기 오프셋 【Size】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_pt_PT.json deleted file mode 100644 index 0edaf0bc8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "Caixa de Transbordamento Dimensionada", - "info": "Pode conter um componente filho, e o componente filho pode transbordar a área do componente pai. O componente filho pode ser deslocado através da propriedade size, e possui a propriedade de alinhamento alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SizedOverflowBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【size】 : Deslocamento de tamanho 【Size】", - "【alignment】 : Modo de alinhamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ru_RU.json deleted file mode 100644 index ded711d2c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "Размерный переполняющий ящик", - "info": "Может содержать один дочерний компонент, и дочерний компонент может выходить за пределы области родительского компонента. Можно смещать дочерний компонент с помощью свойства size, имеет свойство выравнивания alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SizedOverflowBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【size】 : Смещение размера 【Size】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_zh-CN.json deleted file mode 100644 index e0bb02790..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "尺寸溢出盒", - "info": "可容纳一个子组件,且子组件允许溢出父组件区域,可以通过size属性对子组件进行偏移,拥有对齐属性alignment。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizedOverflowBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【size】 : 尺寸偏移 【Size】", - "【alignment】 : 对齐方式 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/node1_base.dart deleted file mode 100644 index 8270a626e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/node1_base.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomSizedOverflowBox extends StatefulWidget { - const CustomSizedOverflowBox({Key? key}) : super(key: key); - - @override - _CustomSizedOverflowBoxState createState() => _CustomSizedOverflowBoxState(); -} - -class _CustomSizedOverflowBoxState extends State { - double _x = 50; - double _y = 44; - - @override - Widget build(BuildContext context) { - Widget box = SizedOverflowBox( - alignment: Alignment.bottomRight, - size: Size(_x, _y), - child: Container(width: 30, height: 50, color: Colors.orange), - ); - return Column( - children: [ - Container( - alignment: Alignment.topLeft, - color: Colors.grey.withAlpha(88), - width: 250, - height: 60, - child: box), - _buildSlider() - ], - ); - } - - Widget _buildSlider() => - Column( - children: [ - Slider( - divisions: 100, - min: 0, - max: 250, - label: 'x:' + _x.toStringAsFixed(1), - value: _x, - onChanged: (v) => setState(() => _x = v)), - Slider( - divisions: 100, - min: 0, - max: 100, - label: 'y:' + _y.toStringAsFixed(1), - value: _y, - onChanged: (v) => setState(() => _y = v)), - - ], - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_de_DE.json deleted file mode 100644 index fa94071a7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "Klickbereich", - "info": "Komponente, die interne oder externe Klickrückrufe erkennen kann. Durch die groupId können mehrere Bereiche als eine Einheit betrachtet werden.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Interne und externe Klicks überwachen", - "desc": [ - "【enabled】 : Verfügbar 【bool】", - "【onTapOutside】 : Externer Klick-Listener 【TapRegionCallback?】", - "【onTapInside】 : Interner Klick-Listener 【TapRegionCallback?】", - "【groupId】 : Klickbereichsgruppenkennung 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_en_US.json deleted file mode 100644 index bbe560abe..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "Tap Region", - "info": "A component that can detect internal or external click callbacks, and multiple regions can be treated as one through the groupId.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Listen to clicks inside and outside the component", - "desc": [ - "【enabled】 : Whether it is available 【bool】", - "【onTapOutside】 : Listen to clicks outside 【TapRegionCallback?】", - "【onTapInside】 : Listen to clicks inside 【TapRegionCallback?】", - "【groupId】 : Click region group identifier 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_es_ES.json deleted file mode 100644 index 5cf6a1b70..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "Área de toque", - "info": "Componente capaz de detectar devoluciones de llamada de toques internos o externos, mediante groupId varias áreas pueden considerarse como una sola.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Escuchar toques dentro y fuera del componente", - "desc": [ - "【enabled】 : ¿Está disponible? 【bool】", - "【onTapOutside】 : Escucha de toques externos 【TapRegionCallback?】", - "【onTapInside】 : Escucha de toques internos 【TapRegionCallback?】", - "【groupId】 : Identificador del grupo de área de toque 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_fr_FR.json deleted file mode 100644 index ca3ba3fe4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "Zone de clic", - "info": "Un composant capable de détecter les rappels de clic internes ou externes, plusieurs zones peuvent être considérées comme une seule via groupId.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Écouter les clics à l'intérieur et à l'extérieur du composant", - "desc": [ - "【enabled】 : Activé ou non 【bool】", - "【onTapOutside】 : Écouteur de clic externe 【TapRegionCallback?】", - "【onTapInside】 : Écouteur de clic interne 【TapRegionCallback?】", - "【groupId】 : Identifiant du groupe de zone de clic 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_it_IT.json deleted file mode 100644 index 6faac12ca..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "Area di tocco", - "info": "Componente in grado di rilevare i callback di clic interni o esterni, tramite groupId più aree possono essere considerate come una sola.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Ascolta i clic interni ed esterni del componente", - "desc": [ - "【enabled】 : Se è disponibile 【bool】", - "【onTapOutside】 : Ascolta i clic esterni 【TapRegionCallback?】", - "【onTapInside】 : Ascolta i clic interni 【TapRegionCallback?】", - "【groupId】 : Identificatore del gruppo dell'area di tocco 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ja_JP.json deleted file mode 100644 index e071c615b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "タップ範囲", - "info": "内部または外部のタップコールバックを検出できるコンポーネントで、groupId を使用して複数の領域を一体として扱うことができます。", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "コンポーネントの内部と外部のタップを監視", - "desc": [ - "【enabled】 : 有効かどうか 【bool】", - "【onTapOutside】 : 外部タップ監視 【TapRegionCallback?】", - "【onTapInside】 : 内部タップ監視 【TapRegionCallback?】", - "【groupId】 : タップ領域グループ識別子 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ko_KR.json deleted file mode 100644 index 403aeae29..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "탭 영역", - "info": "내부 또는 외부 탭 콜백을 감지할 수 있는 구성 요소로, groupId를 통해 여러 영역을 하나로 간주할 수 있습니다.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "내부 및 외부 탭 구성 요소 감시", - "desc": [ - "【enabled】 : 사용 가능 여부 【bool】", - "【onTapOutside】 : 외부 탭 감시 【TapRegionCallback?】", - "【onTapInside】 : 내부 탭 감시 【TapRegionCallback?】", - "【groupId】 : 탭 영역 그룹 식별자 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_pt_PT.json deleted file mode 100644 index 3402fa25a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "Área de Toque", - "info": "Componente capaz de detectar retornos de chamada de toque interno ou externo, através do groupId várias áreas podem ser consideradas como uma só.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Monitorizar toques internos e externos do componente", - "desc": [ - "【enabled】 : Se está disponível 【bool】", - "【onTapOutside】 : Monitorização de toque externo 【TapRegionCallback?】", - "【onTapInside】 : Monitorização de toque interno 【TapRegionCallback?】", - "【groupId】 : Identificador do grupo de área de toque 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ru_RU.json deleted file mode 100644 index f52b260a0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "Область нажатия", - "info": "Компонент, который может обнаруживать обратные вызовы при нажатии внутри или снаружи, с помощью groupId несколько областей могут рассматриваться как одно целое.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Прослушивание нажатий внутри и снаружи компонента", - "desc": [ - "【enabled】 : Доступен ли 【bool】", - "【onTapOutside】 : Прослушивание нажатия снаружи 【TapRegionCallback?】", - "【onTapInside】 : Прослушивание нажатия внутри 【TapRegionCallback?】", - "【groupId】 : Идентификатор группы области нажатия 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_zh-CN.json deleted file mode 100644 index 240f2deef..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "点击范围", - "info": "能够检测内部或外部点击回调的组件,通过 groupId 可以多个区域视为一体。", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "监听点击组件内部和外部", - "desc": [ - "【enabled】 : 是否可用 【bool】", - "【onTapOutside】 : 点击外界监听 【TapRegionCallback?】", - "【onTapInside】 : 点击内部监听 【TapRegionCallback?】", - "【groupId】 : 点击区域组标识 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/node1.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/node1.dart deleted file mode 100644 index 57642455b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/node1.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/material.dart'; - -class TapRegionDemo1 extends StatefulWidget { - const TapRegionDemo1({super.key}); - - @override - State createState() => _TapRegionDemo1State(); -} - -class _TapRegionDemo1State extends State { - String info = 'Tap any where'; - - @override - Widget build(BuildContext context) { - return TapRegion( - onTapOutside: _onTapOutside, - onTapInside: _onTapInside, - child: Container( - alignment: Alignment.center, - height: 64, - width: 160, - color: isOut ? Colors.grey : Colors.blue, - child: Text( - info, - textAlign: TextAlign.center, - style: const TextStyle(color: Colors.white), - ), - ), - ); - } - - bool get isOut => info.contains('TapOutside'); - - void _onTapOutside(PointerDownEvent event) { - setState(() { - info = "TapOutside:\n${event.position}"; - }); - } - - void _onTapInside(PointerDownEvent event) { - setState(() { - info = "TapInside:\n${event.position}"; - }); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_de_DE.json deleted file mode 100644 index 2a33f0260..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "Eingabefeld-Klickbereich", - "info": "TapRegion mit der groupId EditableText, der den Klickbereich anderer Komponenten als Teil des Eingabefelds behandelt.", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Klicks innerhalb und außerhalb der Komponente überwachen", - "desc": [ - "Im Beispiel wird der Fokus des Eingabefelds nicht aufgehoben, wenn auf das Plus- oder Minuszeichen geklickt wird, und die Tastatur kann weiterhin verwendet werden.", - "【enabled】 : Verfügbar 【bool】", - "【onTapOutside】 : Überwachung von Klicks außerhalb 【TapRegionCallback?】", - "【onTapInside】 : Überwachung von Klicks innerhalb 【TapRegionCallback?】", - "【groupId】 : Gruppenkennung des Klickbereichs 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_en_US.json deleted file mode 100644 index b42d276c6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "TextField Tap Region", - "info": "The TapRegion with groupId as EditableText allows the clickable area of other components to be considered as one with the input field.", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Monitor Clicks Inside and Outside the Component", - "desc": [ - "In the example, clicking the plus and minus signs does not cancel the focus of the input field, and the keyboard can still be used for input.", - "【enabled】 : Whether it is available 【bool】", - "【onTapOutside】 : External click listener 【TapRegionCallback?】", - "【onTapInside】 : Internal click listener 【TapRegionCallback?】", - "【groupId】 : Clickable area group identifier 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_es_ES.json deleted file mode 100644 index 88bb35b5c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "Área de clic del campo de texto", - "info": "El TapRegion con groupId como EditableText permite que el área de clic de otros componentes se considere como parte del campo de texto.", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Escuchar clics dentro y fuera del componente", - "desc": [ - "En el ejemplo, al hacer clic en los botones de más y menos, no se cancela el enfoque del campo de texto, y el teclado aún puede escribir.", - "【enabled】 : ¿Está disponible? 【bool】", - "【onTapOutside】 : Escucha de clic fuera 【TapRegionCallback?】", - "【onTapInside】 : Escucha de clic dentro 【TapRegionCallback?】", - "【groupId】 : Identificador del grupo de área de clic 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_fr_FR.json deleted file mode 100644 index db182a21a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "Zone de clic du champ de saisie", - "info": "Le TapRegion avec groupId pour EditableText permet de considérer la zone de clic d'autres composants comme faisant partie du champ de saisie.", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Écouter les clics à l'intérieur et à l'extérieur du composant", - "desc": [ - "Dans l'exemple, cliquer sur les boutons plus et moins ne supprime pas le focus du champ de saisie, le clavier reste actif pour la saisie.", - "【enabled】 : Actif ou non 【bool】", - "【onTapOutside】 : Écouteur de clic à l'extérieur 【TapRegionCallback?】", - "【onTapInside】 : Écouteur de clic à l'intérieur 【TapRegionCallback?】", - "【groupId】 : Identifiant du groupe de la zone de clic 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_it_IT.json deleted file mode 100644 index e1e9d93e9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "Area di clic del campo di testo", - "info": "Il TapRegion con groupId EditableText consente di considerare l'area di clic di altri componenti come parte integrante del campo di testo.", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Ascolta i clic all'interno e all'esterno del componente", - "desc": [ - "Nell'esempio, cliccando sui pulsanti più e meno, il focus del campo di testo non viene perso e la tastiera rimane attiva per l'input.", - "【enabled】 : Se è abilitato 【bool】", - "【onTapOutside】 : Ascolta i clic all'esterno 【TapRegionCallback?】", - "【onTapInside】 : Ascolta i clic all'interno 【TapRegionCallback?】", - "【groupId】 : Identificatore del gruppo dell'area di clic 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ja_JP.json deleted file mode 100644 index a4ea11251..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "テキストフィールドタップ範囲", - "info": "groupId が EditableText の TapRegion で、他のコンポーネントのタップ範囲をテキストフィールドと一体化させることができます。", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "クリックコンポーネントの内部と外部を監視", - "desc": [ - "ケースでプラスとマイナスをクリックしても、テキストフィールドのフォーカスは解除されず、キーボードで入力が可能です。", - "【enabled】 : 有効かどうか 【bool】", - "【onTapOutside】 : 外部クリック監視 【TapRegionCallback?】", - "【onTapInside】 : 内部クリック監視 【TapRegionCallback?】", - "【groupId】 : タップ領域グループ識別子 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ko_KR.json deleted file mode 100644 index a42cb79e0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "입력란 클릭 범위", - "info": "groupId가 EditableText인 TapRegion으로, 다른 컴포넌트의 클릭 범위를 입력란과 일체로 간주할 수 있습니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "컴포넌트 내부 및 외부 클릭 감지", - "desc": [ - "예시에서 더하기 및 빼기 버튼을 클릭해도 입력란의 포커스가 해제되지 않으며, 키보드로 입력이 가능합니다.", - "【enabled】 : 사용 가능 여부 【bool】", - "【onTapOutside】 : 외부 클릭 감지 【TapRegionCallback?】", - "【onTapInside】 : 내부 클릭 감지 【TapRegionCallback?】", - "【groupId】 : 클릭 영역 그룹 식별자 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_pt_PT.json deleted file mode 100644 index 9561c633d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "Área de Clique da Caixa de Texto", - "info": "O TapRegion com groupId como EditableText permite que a área de clique de outros componentes seja considerada como parte da caixa de texto.", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Monitorar Cliques Dentro e Fora do Componente", - "desc": [ - "No exemplo, clicar nos botões de adicionar e subtrair não cancela o foco da caixa de texto, e o teclado ainda pode ser usado para digitar.", - "【enabled】 : Disponível ou não 【bool】", - "【onTapOutside】 : Monitoramento de clique fora 【TapRegionCallback?】", - "【onTapInside】 : Monitoramento de clique dentro 【TapRegionCallback?】", - "【groupId】 : Identificador do grupo da área de clique 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ru_RU.json deleted file mode 100644 index aace9a55b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "Область нажатия текстового поля", - "info": "TapRegion с groupId EditableText позволяет рассматривать область нажатия других компонентов как единое целое с текстовым полем.", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Слушатель нажатий внутри и снаружи компонента", - "desc": [ - "В примере нажатие на плюс и минус не снимает фокус с текстового поля, и клавиатура все еще может вводить текст.", - "【enabled】 : Доступно ли 【bool】", - "【onTapOutside】 : Слушатель нажатий снаружи 【TapRegionCallback?】", - "【onTapInside】 : Слушатель нажатий внутри 【TapRegionCallback?】", - "【groupId】 : Идентификатор группы области нажатия 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_zh-CN.json deleted file mode 100644 index 2b4b488fd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "输入框点击范围", - "info": "groupId 为 EditableText 的 TapRegion,可以让其他组件的点击范围与输入框视为一体。", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "监听点击组件内部和外部", - "desc": [ - "案例中点击加号和减号,不会取消输入框的焦点,键盘仍然可以输入。", - "【enabled】 : 是否可用 【bool】", - "【onTapOutside】 : 点击外界监听 【TapRegionCallback?】", - "【onTapInside】 : 点击内部监听 【TapRegionCallback?】", - "【groupId】 : 点击区域组标识 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/node1.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/node1.dart deleted file mode 100644 index 7ca7d1c02..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/node1.dart +++ /dev/null @@ -1,85 +0,0 @@ -import 'package:flutter/material.dart'; - -class TextFieldTapRegionDemo1 extends StatefulWidget { - const TextFieldTapRegionDemo1({super.key}); - - @override - State createState() => _TextFieldTapRegionDemo1State(); -} - -class _TextFieldTapRegionDemo1State extends State { - TextEditingController controller = TextEditingController(text: '0'); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 160, - child: Row( - children: [ - Expanded(child: _buildInput()), - const SizedBox(width: 8), - TextFieldTapRegion(child: buildButtons()) - ], - ), - ); - } - - Widget _buildInput() { - return TextField( - autofocus: true, - decoration: const InputDecoration( - border: OutlineInputBorder(), - ), - onChanged: _onChange, - controller: controller, - textAlign: TextAlign.center, - ); - } - - void _onChange(String value) {} - - Widget buildButtons() { - ButtonStyle style = circleStyle; - return Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - OutlinedButton( - style: style, - onPressed: _increment, - child: const Icon(Icons.add, size: 16), - ), - const SizedBox(height: 2), - OutlinedButton( - onPressed: _decrement, - style: style, - child: const Icon(Icons.remove, size: 16), - ), - ], - ); - } - - ButtonStyle get circleStyle => OutlinedButton.styleFrom( - shape: const StadiumBorder(), - padding: EdgeInsets.zero, - minimumSize: const Size(32, 32), - maximumSize: const Size(32, 32), - ); - - void _increment() { - int value = int.tryParse(controller.text) ?? 0; - _updateText('${value + 1}', collapsed: true); - } - - void _decrement() { - int value = int.tryParse(controller.text) ?? 0; - _updateText('${value - 1}', collapsed: true); - } - - void _updateText(String text, {bool collapsed = true}) { - if (text != controller.text) { - controller.value = TextEditingValue( - text: text, - ); - } - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_de_DE.json deleted file mode 100644 index 4f6ecf63c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_de_DE.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "Transformation", - "info": "Kann ein Unterelement aufnehmen und kann das Unterelement über eine 4*4-Transformationsmatrix transformieren.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "Schieftransformation skew", - "desc": [ - "Die Schiefe x wird durch die Zahl R0C1 gesteuert, der Eingabeparameter ist ein Bogenmaßwert, der den Schiefewinkel darstellt", - "Die Schiefe y wird durch die Zahl R1C0 gesteuert, der Eingabeparameter ist ein Bogenmaßwert, der den Schiefewinkel darstellt" - ] - }, - { - "file": "node2_translation.dart", - "name": "Verschiebungstransformation translationValues", - "desc": [ - "Die Verschiebung x wird durch die Zahl R0C3 gesteuert, der Eingabeparameter ist ein numerischer Wert, der die Verschiebungslänge darstellt", - "Die Verschiebung y wird durch die Zahl R1C3 gesteuert, der Eingabeparameter ist ein numerischer Wert, der die Verschiebungslänge darstellt", - "Die Verschiebung z wird durch die Zahl R2C3 gesteuert, der Eingabeparameter ist ein numerischer Wert, der die Verschiebungslänge darstellt" - ] - }, - { - "file": "node3_scale.dart", - "name": "Skalierungstransformation diagonal3Values", - "desc": [ - "Die Skalierung x wird durch die Zahl R0C0 gesteuert, der Eingabeparameter ist ein numerischer Wert, der den Skalierungsfaktor darstellt", - "Die Skalierung y wird durch die Zahl R1C2 gesteuert, der Eingabeparameter ist ein numerischer Wert, der den Skalierungsfaktor darstellt", - "Die Skalierung z wird durch die Zahl R2C2 gesteuert, der Eingabeparameter ist ein numerischer Wert, der den Skalierungsfaktor darstellt" - ] - }, - { - "file": "node4_rotate.dart", - "name": "Rotationstransformation rotation", - "desc": [ - "Die x-Rotation wird durch R1C1, R1C2, R2C1, R2C2 gesteuert, der Eingabeparameter stellt ein Bogenmaß dar", - "Die y-Rotation wird durch R0C0, R0C2, R2C0, R2C2 gesteuert, der Eingabeparameter stellt ein Bogenmaß dar", - "Die z-Rotation wird durch R0C0, R0C1, R1C0, R1C1 gesteuert" - ] - }, - { - "file": "node5_perspective.dart", - "name": "Perspektivtransformation rotation", - "desc": [ - "Die Perspektive wird durch R3C1, R3C2, R3C3 gesteuert" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_en_US.json deleted file mode 100644 index 789280b53..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_en_US.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "Transform", - "info": "Can accommodate a child component, and can transform the child component through a 4*4 transformation matrix.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "Skew Transform skew", - "desc": [ - "Skew x is controlled by the R0C1 number, the input is in radians, representing the skew angle", - "Skew y is controlled by the R1C0 number, the input is in radians, representing the skew angle" - ] - }, - { - "file": "node2_translation.dart", - "name": "Translation Transform translationValues", - "desc": [ - "Translation x is controlled by the R0C3 number, the input is a value, representing the translation length", - "Translation y is controlled by the R1C3 number, the input is a value, representing the translation length", - "Translation z is controlled by the R2C3 number, the input is a value, representing the translation length" - ] - }, - { - "file": "node3_scale.dart", - "name": "Scale Transform diagonal3Values", - "desc": [ - "Scale x is controlled by the R0C0 number, the input is a value, representing the scaling factor", - "Scale y is controlled by the R1C2 number, the input is a value, representing the scaling factor", - "Scale z is controlled by the R2C2 number, the input is a value, representing the scaling factor" - ] - }, - { - "file": "node4_rotate.dart", - "name": "Rotation Transform rotation", - "desc": [ - "x rotation is controlled by R1C1, R1C2, R2C1, R2C2, the input represents radians", - "y rotation is controlled by R0C0, R0C2, R2C0, R2C2, the input represents radians", - "z rotation is controlled by R0C0, R0C1, R1C0, R1C1" - ] - }, - { - "file": "node5_perspective.dart", - "name": "Perspective Transform rotation", - "desc": [ - "Perspective is controlled by R3C1, R3C2, R3C3" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_es_ES.json deleted file mode 100644 index 079d402e9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_es_ES.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "Transformación", - "info": "Puede contener un subcomponente, y se puede transformar el subcomponente mediante una matriz de transformación 4*4.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "Transformación de sesgo skew", - "desc": [ - "El sesgo x está controlado por el número R0C1, el parámetro de entrada es un valor en radianes, que representa el ángulo de sesgo.", - "El sesgo y está controlado por el número R1C0, el parámetro de entrada es un valor en radianes, que representa el ángulo de sesgo." - ] - }, - { - "file": "node2_translation.dart", - "name": "Transformación de traslación translationValues", - "desc": [ - "La traslación x está controlada por el número R0C3, el parámetro de entrada es un valor numérico, que representa la longitud de la traslación.", - "La traslación y está controlada por el número R1C3, el parámetro de entrada es un valor numérico, que representa la longitud de la traslación.", - "La traslación z está controlada por el número R2C3, el parámetro de entrada es un valor numérico, que representa la longitud de la traslación." - ] - }, - { - "file": "node3_scale.dart", - "name": "Transformación de escala diagonal3Values", - "desc": [ - "La escala x está controlada por el número R0C0, el parámetro de entrada es un valor numérico, que representa la tasa de escala.", - "La escala y está controlada por el número R1C2, el parámetro de entrada es un valor numérico, que representa la tasa de escala.", - "La escala z está controlada por el número R2C2, el parámetro de entrada es un valor numérico, que representa la tasa de escala." - ] - }, - { - "file": "node4_rotate.dart", - "name": "Transformación de rotación rotation", - "desc": [ - "La rotación x está controlada por R1C1, R1C2, R2C1, R2C2, el parámetro de entrada representa radianes.", - "La rotación y está controlada por R0C0, R0C2, R2C0, R2C2, el parámetro de entrada representa radianes.", - "La rotación z está controlada por R0C0, R0C1, R1C0, R1C1." - ] - }, - { - "file": "node5_perspective.dart", - "name": "Transformación de perspectiva rotation", - "desc": [ - "La perspectiva está controlada por R3C1, R3C2, R3C3." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_fr_FR.json deleted file mode 100644 index 3057ac291..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_fr_FR.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "Transformation", - "info": "Peut contenir un composant enfant, et peut transformer le composant enfant via une matrice de transformation 4*4.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "Transformation en biais skew", - "desc": [ - "Le biais x est contrôlé par le nombre R0C1, l'entrée est une valeur en radians, représentant l'angle de biais", - "Le biais y est contrôlé par le nombre R1C0, l'entrée est une valeur en radians, représentant l'angle de biais" - ] - }, - { - "file": "node2_translation.dart", - "name": "Transformation de translation translationValues", - "desc": [ - "La translation x est contrôlée par le nombre R0C3, l'entrée est une valeur numérique, représentant la longueur de la translation", - "La translation y est contrôlée par le nombre R1C3, l'entrée est une valeur numérique, représentant la longueur de la translation", - "La translation z est contrôlée par le nombre R2C3, l'entrée est une valeur numérique, représentant la longueur de la translation" - ] - }, - { - "file": "node3_scale.dart", - "name": "Transformation de mise à l'échelle diagonal3Values", - "desc": [ - "La mise à l'échelle x est contrôlée par le nombre R0C0, l'entrée est une valeur numérique, représentant le facteur de mise à l'échelle", - "La mise à l'échelle y est contrôlée par le nombre R1C2, l'entrée est une valeur numérique, représentant le facteur de mise à l'échelle", - "La mise à l'échelle z est contrôlée par le nombre R2C2, l'entrée est une valeur numérique, représentant le facteur de mise à l'échelle" - ] - }, - { - "file": "node4_rotate.dart", - "name": "Transformation de rotation rotation", - "desc": [ - "La rotation x est contrôlée par R1C1, R1C2, R2C1, R2C2, l'entrée représente des radians", - "La rotation y est contrôlée par R0C0, R0C2, R2C0, R2C2, l'entrée représente des radians", - "La rotation z est contrôlée par R0C0, R0C1, R1C0, R1C1" - ] - }, - { - "file": "node5_perspective.dart", - "name": "Transformation de perspective rotation", - "desc": [ - "La perspective est contrôlée par R3C1, R3C2, R3C3" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_it_IT.json deleted file mode 100644 index 7c069639c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_it_IT.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "Trasformazione", - "info": "Può contenere un componente figlio e può trasformare il componente figlio tramite una matrice di trasformazione 4*4.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "Trasformazione inclinata skew", - "desc": [ - "L'inclinazione x è controllata dal numero R0C1, il parametro è un valore in radianti, che rappresenta l'angolo di inclinazione", - "L'inclinazione y è controllata dal numero R1C0, il parametro è un valore in radianti, che rappresenta l'angolo di inclinazione" - ] - }, - { - "file": "node2_translation.dart", - "name": "Trasformazione di traslazione translationValues", - "desc": [ - "La traslazione x è controllata dal numero R0C3, il parametro è un valore numerico, che rappresenta la lunghezza della traslazione", - "La traslazione y è controllata dal numero R1C3, il parametro è un valore numerico, che rappresenta la lunghezza della traslazione", - "La traslazione z è controllata dal numero R2C3, il parametro è un valore numerico, che rappresenta la lunghezza della traslazione" - ] - }, - { - "file": "node3_scale.dart", - "name": "Trasformazione di scala diagonal3Values", - "desc": [ - "La scala x è controllata dal numero R0C0, il parametro è un valore numerico, che rappresenta il fattore di scala", - "La scala y è controllata dal numero R1C2, il parametro è un valore numerico, che rappresenta il fattore di scala", - "La scala z è controllata dal numero R2C2, il parametro è un valore numerico, che rappresenta il fattore di scala" - ] - }, - { - "file": "node4_rotate.dart", - "name": "Trasformazione di rotazione rotation", - "desc": [ - "La rotazione x è controllata da R1C1, R1C2, R2C1, R2C2, il parametro rappresenta i radianti", - "La rotazione y è controllata da R0C0, R0C2, R2C0, R2C2, il parametro rappresenta i radianti", - "La rotazione z è controllata da R0C0, R0C1, R1C0, R1C1" - ] - }, - { - "file": "node5_perspective.dart", - "name": "Trasformazione prospettica rotation", - "desc": [ - "La prospettiva è controllata da R3C1, R3C2, R3C3" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ja_JP.json deleted file mode 100644 index 9b4225857..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ja_JP.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "変換", - "info": "子コンポーネントを収容でき、4*4の変換マトリックスを使用して子コンポーネントを変換できます。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "スキュー変換skew", - "desc": [ - "スキューxはR0C1の数値で制御され、入力はラジアン値で、スキュー角度を表します", - "スキューyはR1C0の数値で制御され、入力はラジアン値で、スキュー角度を表します" - ] - }, - { - "file": "node2_translation.dart", - "name": "平行移動変換translationValues", - "desc": [ - "平行移動xはR0C3の数値で制御され、入力は数値で、平行移動の長さを表します", - "平行移動yはR1C3の数値で制御され、入力は数値で、平行移動の長さを表します", - "平行移動zはR2C3の数値で制御され、入力は数値で、平行移動の長さを表します" - ] - }, - { - "file": "node3_scale.dart", - "name": "スケール変換diagonal3Values", - "desc": [ - "スケールxはR0C0の数値で制御され、入力は数値で、スケールの比率を表します", - "スケールyはR1C2の数値で制御され、入力は数値で、スケールの比率を表します", - "スケールzはR2C2の数値で制御され、入力は数値で、スケールの比率を表します" - ] - }, - { - "file": "node4_rotate.dart", - "name": "回転変換rotation", - "desc": [ - "x回転はR1C1、R1C2、R2C1、R2C2で制御され、入力はラジアンを表します", - "y回転はR0C0、R0C2、R2C0、R2C2で制御され、入力はラジアンを表します", - "z回転はR0C0、R0C1、R1C0、R1C1で制御されます" - ] - }, - { - "file": "node5_perspective.dart", - "name": "遠近法変換rotation", - "desc": [ - "遠近法はR3C1、R3C2、R3C3で制御されます" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ko_KR.json deleted file mode 100644 index efe554675..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ko_KR.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "변환", - "info": "하위 컴포넌트를 수용할 수 있으며, 4*4 변환 행렬을 통해 하위 컴포넌트를 변환할 수 있습니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "기울임 변환 skew", - "desc": [ - "x 기울임은 R0C1 숫자로 제어되며, 입력은 라디안 값으로 기울임 각도를 나타냅니다.", - "y 기울임은 R1C0 숫자로 제어되며, 입력은 라디안 값으로 기울임 각도를 나타냅니다." - ] - }, - { - "file": "node2_translation.dart", - "name": "이동 변환 translationValues", - "desc": [ - "x 이동은 R0C3 숫자로 제어되며, 입력은 숫자 값으로 이동 길이를 나타냅니다.", - "y 이동은 R1C3 숫자로 제어되며, 입력은 숫자 값으로 이동 길이를 나타냅니다.", - "z 이동은 R2C3 숫자로 제어되며, 입력은 숫자 값으로 이동 길이를 나타냅니다." - ] - }, - { - "file": "node3_scale.dart", - "name": "크기 조절 변환 diagonal3Values", - "desc": [ - "x 크기 조절은 R0C0 숫자로 제어되며, 입력은 숫자 값으로 크기 비율을 나타냅니다.", - "y 크기 조절은 R1C2 숫자로 제어되며, 입력은 숫자 값으로 크기 비율을 나타냅니다.", - "z 크기 조절은 R2C2 숫자로 제어되며, 입력은 숫자 값으로 크기 비율을 나타냅니다." - ] - }, - { - "file": "node4_rotate.dart", - "name": "회전 변환 rotation", - "desc": [ - "x 회전은 R1C1, R1C2, R2C1, R2C2로 제어되며, 입력은 라디안 값을 나타냅니다.", - "y 회전은 R0C0, R0C2, R2C0, R2C2로 제어되며, 입력은 라디안 값을 나타냅니다.", - "z 회전은 R0C0, R0C1, R1C0, R1C1로 제어됩니다." - ] - }, - { - "file": "node5_perspective.dart", - "name": "원근 변환 rotation", - "desc": [ - "R3C1, R3C2, R3C3로 원근을 제어합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_pt_PT.json deleted file mode 100644 index 368179eb7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_pt_PT.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "Transformação", - "info": "Pode acomodar um subcomponente, pode transformar o subcomponente através de uma matriz de transformação 4*4.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "Transformação de inclinação skew", - "desc": [ - "A inclinação x é controlada pelo número R0C1, o parâmetro de entrada é o valor em radianos, indicando o ângulo de inclinação", - "A inclinação y é controlada pelo número R1C0, o parâmetro de entrada é o valor em radianos, indicando o ângulo de inclinação" - ] - }, - { - "file": "node2_translation.dart", - "name": "Transformação de translação translationValues", - "desc": [ - "A translação x é controlada pelo número R0C3, o parâmetro de entrada é um valor numérico, indicando o comprimento da translação", - "A translação y é controlada pelo número R1C3, o parâmetro de entrada é um valor numérico, indicando o comprimento da translação", - "A translação z é controlada pelo número R2C3, o parâmetro de entrada é um valor numérico, indicando o comprimento da translação" - ] - }, - { - "file": "node3_scale.dart", - "name": "Transformação de escala diagonal3Values", - "desc": [ - "A escala x é controlada pelo número R0C0, o parâmetro de entrada é um valor numérico, indicando a taxa de escala", - "A escala y é controlada pelo número R1C2, o parâmetro de entrada é um valor numérico, indicando a taxa de escala", - "A escala z é controlada pelo número R2C2, o parâmetro de entrada é um valor numérico, indicando a taxa de escala" - ] - }, - { - "file": "node4_rotate.dart", - "name": "Transformação de rotação rotation", - "desc": [ - "A rotação x é controlada por R1C1, R1C2, R2C1, R2C2, o parâmetro de entrada representa radianos", - "A rotação y é controlada por R0C0, R0C2, R2C0, R2C2, o parâmetro de entrada representa radianos", - "A rotação z é controlada por R0C0, R0C1, R1C0, R1C1" - ] - }, - { - "file": "node5_perspective.dart", - "name": "Transformação de perspetiva rotation", - "desc": [ - "A perspetiva é controlada por R3C1, R3C2, R3C3" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ru_RU.json deleted file mode 100644 index a77e34e21..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ru_RU.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "Преобразование", - "info": "Может содержать один дочерний компонент, который может быть преобразован с использованием матрицы преобразования 4*4.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "Наклонное преобразование skew", - "desc": [ - "Наклон по x управляется числом R0C1, входной параметр - значение в радианах, обозначающее угол наклона", - "Наклон по y управляется числом R1C0, входной параметр - значение в радианах, обозначающее угол наклона" - ] - }, - { - "file": "node2_translation.dart", - "name": "Преобразование перемещения translationValues", - "desc": [ - "Перемещение по x управляется числом R0C3, входной параметр - числовое значение, обозначающее длину перемещения", - "Перемещение по y управляется числом R1C3, входной параметр - числовое значение, обозначающее длину перемещения", - "Перемещение по z управляется числом R2C3, входной параметр - числовое значение, обозначающее длину перемещения" - ] - }, - { - "file": "node3_scale.dart", - "name": "Преобразование масштабирования diagonal3Values", - "desc": [ - "Масштабирование по x управляется числом R0C0, входной параметр - числовое значение, обозначающее коэффициент масштабирования", - "Масштабирование по y управляется числом R1C2, входной параметр - числовое значение, обозначающее коэффициент масштабирования", - "Масштабирование по z управляется числом R2C2, входной параметр - числовое значение, обозначающее коэффициент масштабирования" - ] - }, - { - "file": "node4_rotate.dart", - "name": "Преобразование вращения rotation", - "desc": [ - "Вращение по x управляется числами R1C1, R1C2, R2C1, R2C2, входной параметр - значение в радианах", - "Вращение по y управляется числами R0C0, R0C2, R2C0, R2C2, входной параметр - значение в радианах", - "Вращение по z управляется числами R0C0, R0C1, R1C0, R1C1" - ] - }, - { - "file": "node5_perspective.dart", - "name": "Преобразование перспективы rotation", - "desc": [ - "Перспектива управляется числами R3C1, R3C2, R3C3" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_zh-CN.json deleted file mode 100644 index 74a4da8c7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_zh-CN.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "变换", - "info": "可容纳一个子组件,可以通过一个4*4的变换矩阵对子组件进行变换。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "斜切变换skew", - "desc": [ - "斜切x由R0C1数控制,入参为弧度值,表示斜切角度", - "斜切y由R1C0数控制,入参为弧度值,表示斜切角度" - ] - }, - { - "file": "node2_translation.dart", - "name": "平移变换translationValues", - "desc": [ - "平移x由R0C3数控制,入参为数值,表示平移长度", - "平移y由R1C3数控制,入参为数值,表示平移长度", - "平移z由R2C3数控制,入参为数值,表示平移长度" - ] - }, - { - "file": "node3_scale.dart", - "name": "缩放变换diagonal3Values", - "desc": [ - "缩放x由R0C0数控制,入参为数值,表示缩放分率", - "缩放y由R1C2数控制,入参为数值,表示缩放分率", - "缩放z由R2C2数控制,入参为数值,表示缩放分率" - ] - }, - { - "file": "node4_rotate.dart", - "name": "旋转变换rotation", - "desc": [ - "x旋转由R1C1、R1C2、R2C1、R2C2控制,入参表示弧度", - "y旋转由R0C0、R0C2、R2C0、R2C2控制,入参表示弧度", - "z旋转由R0C0、R0C1、R1C0、R1C1控制," - ] - }, - { - "file": "node5_perspective.dart", - "name": "透视变换rotation", - "desc": [ - "由R3C1、R3C2、R3C3控制透视" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/matrix4_shower.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/matrix4_shower.dart deleted file mode 100644 index f5dbadef0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/matrix4_shower.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com -/// 说明: - -class Matrix4Shower extends StatelessWidget { - final Matrix4 matrix4; - - const Matrix4Shower(this.matrix4, {Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Text( - '${matrix4.entry(0, 0).toStringAsFixed(1)},${matrix4.entry(0, 1).toStringAsFixed(1)},${matrix4.entry(0, 2).toStringAsFixed(1)},${matrix4.entry(0, 3).toStringAsFixed(1)},\n' - '${matrix4.entry(1, 0).toStringAsFixed(1)},${matrix4.entry(1, 1).toStringAsFixed(1)},${matrix4.entry(1, 2).toStringAsFixed(1)},${matrix4.entry(1, 3).toStringAsFixed(1)},\n' - '${matrix4.entry(2, 0).toStringAsFixed(1)},${matrix4.entry(2, 1).toStringAsFixed(1)},${matrix4.entry(2, 2).toStringAsFixed(1)},${matrix4.entry(2, 3).toStringAsFixed(1)},\n' - '${matrix4.entry(3, 0).toStringAsFixed(1)},${matrix4.entry(3, 1).toStringAsFixed(1)},${matrix4.entry(3, 2).toStringAsFixed(1)},${matrix4.entry(3, 3).toStringAsFixed(1)}', - style: const TextStyle(fontSize: 20, color: Colors.blue), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node1_skew.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node1_skew.dart deleted file mode 100644 index 6fd4a91f4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node1_skew.dart +++ /dev/null @@ -1,81 +0,0 @@ -import 'dart:math'; -import 'package:flutter/material.dart'; - -import 'matrix4_shower.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class SkewTransform extends StatefulWidget { - const SkewTransform({Key? key}) : super(key: key); - - @override - _SkewTransformState createState() => _SkewTransformState(); -} - -class _SkewTransformState extends State { - late Matrix4 _m4; - double _alpha = 0; - double _beta = 0; - - @override - void initState() { - _m4 = Matrix4.identity(); - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [_buildTransform(), Matrix4Shower(_m4)], - ), - _buildSliders() - ], - ); - } - - Widget _buildTransform() { - _m4 = Matrix4.skew(_alpha, _beta); - return Transform( - transform: _m4, - child: Container( - color: Colors.cyanAccent, - width: 100, - height: 100, - child: Image.asset( - 'assets/images/wy_300x200.webp', - fit: BoxFit.cover, - )), - ); - } - - Widget _buildSliders() => Column( - children: [ - Slider( - min: -pi, - max: pi, - value: _alpha, - divisions: 360, - label: 'alpha:' + (_alpha * 180 / pi).toStringAsFixed(1) + "°", - onChanged: (v) { - setState(() { - _alpha = v; - }); - }), - Slider( - min: -pi, - max: pi, - value: _beta, - divisions: 360, - label: 'beta:' + (_beta * 180 / pi).toStringAsFixed(1) + "°", - onChanged: (v) { - setState(() { - _beta = v; - }); - }) - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node2_translation.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node2_translation.dart deleted file mode 100644 index 0c67ffa13..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node2_translation.dart +++ /dev/null @@ -1,92 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'matrix4_shower.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class TranslationTransform extends StatefulWidget { - const TranslationTransform({Key? key}) : super(key: key); - - @override - _TranslationTransformState createState() => _TranslationTransformState(); -} - -class _TranslationTransformState extends State { - late Matrix4 _m4; - double _x = 0; - double _y = 0; - double _z = 0; - - @override - void initState() { - _m4 = Matrix4.identity(); - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [_buildTransform(), Matrix4Shower(_m4)], - ), - _buildSliders() - ], - ); - } - - Widget _buildTransform() { - _m4 = Matrix4.translationValues(_x, _y, _z); - return Transform( - transform: _m4, - child: Container( - color: Colors.cyanAccent, - width: 100, - height: 100, - child: Image.asset( - 'assets/images/wy_300x200.webp', - fit: BoxFit.cover, - )), - ); - } - - Widget _buildSliders() => Column( - children: [ - Slider( - min: -100, - max: 100, - value: _x, - divisions: 360, - label: 'x:${_x.toStringAsFixed(1)}', - onChanged: (v) { - setState(() { - _x = v; - }); - }), - Slider( - min: -100, - max: 100, - value: _y, - divisions: 360, - label: 'y:${_y.toStringAsFixed(1)}', - onChanged: (v) { - setState(() { - _y = v; - }); - }), - Slider( - min: -100, - max: 100, - value: _z, - divisions: 360, - label: 'z:${_z.toStringAsFixed(1)}', - onChanged: (v) { - setState(() { - _z = v; - }); - }) - ], - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node3_scale.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node3_scale.dart deleted file mode 100644 index 9d0e9a0c3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node3_scale.dart +++ /dev/null @@ -1,91 +0,0 @@ -import 'package:flutter/material.dart'; -import 'matrix4_shower.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class ScaleTransform extends StatefulWidget { - const ScaleTransform({Key? key}) : super(key: key); - - @override - _ScaleTransformState createState() => _ScaleTransformState(); -} - -class _ScaleTransformState extends State { - late Matrix4 _m4; - double _x = 1.0; - double _y = 1.0; - double _z = 1.0; - - @override - void initState() { - _m4 = Matrix4.identity(); - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [_buildTransform(), Matrix4Shower(_m4)], - ), - _buildSliders() - ], - ); - } - - Widget _buildTransform() { - _m4 = Matrix4.diagonal3Values(_x, _y, _z); - return Transform( - transform: _m4, - child: Container( - color: Colors.cyanAccent, - width: 100, - height: 100, - child: Image.asset( - 'assets/images/wy_300x200.webp', - fit: BoxFit.cover, - )), - ); - } - - Widget _buildSliders() => Column( - children: [ - Slider( - min: -2, - max: 2, - value: _x, - divisions: 360, - label: 'x:${_x.toStringAsFixed(1)}', - onChanged: (v) { - setState(() { - _x = v; - }); - }), - Slider( - min: -2, - max: 2, - value: _y, - divisions: 360, - label: 'y:${_y.toStringAsFixed(1)}', - onChanged: (v) { - setState(() { - _y = v; - }); - }), - Slider( - min: -2, - max: 2, - value: _z, - divisions: 360, - label: 'z:${_z.toStringAsFixed(1)}', - onChanged: (v) { - setState(() { - _z = v; - }); - }) - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node4_rotate.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node4_rotate.dart deleted file mode 100644 index 569d2d28b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node4_rotate.dart +++ /dev/null @@ -1,112 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -import 'matrix4_shower.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class RotateTransform extends StatefulWidget { - const RotateTransform({Key? key}) : super(key: key); - - @override - _RotateTransformState createState() => _RotateTransformState(); -} - -class _RotateTransformState extends State { - late Matrix4 _m4; - double _x = 0; - int _rotateFlag = 1; - - @override - void initState() { - _m4 = Matrix4.identity(); - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [_buildTransform(), Matrix4Shower(_m4)], - ), - _buildSliders() - ], - ); - } - - Widget _buildTransform() { - if (_rotateFlag == 1) { - _m4 = Matrix4.rotationX(_x); - } else if (_rotateFlag == 2) { - _m4 = Matrix4.rotationY(_x); - } else { - _m4 = Matrix4.rotationZ(_x); - } - - return Transform( - transform: _m4, - child: Container( - color: Colors.cyanAccent, - width: 100, - height: 100, - child: Image.asset( - 'assets/images/wy_300x200.webp', - fit: BoxFit.cover, - )), - ); - } - - final Map map = { - 1: 'rotationX', - 2: 'rotationY', - 3: 'rotationZ', - }; - - Widget _buildSliders() => Column( - children: [ - Wrap( - children: map.keys.map((key) => _buildChild(key)).toList(), - ), - Slider( - min: -pi, - max: pi, - value: _x, - divisions: 360, - label: 'x:${_x.toStringAsFixed(1)}', - onChanged: (v) { - setState(() { - _x = v; - }); - }), - ], - ); - - Padding _buildChild(int key) { - return Padding( - padding: const EdgeInsets.all(4.0), - child: FilterChip( - selectedColor: Colors.orange.withAlpha(55), - selectedShadowColor: Colors.blue, - shadowColor: Colors.orangeAccent, - pressElevation: 5, - elevation: 3, - avatar: CircleAvatar(child: Text(key.toString())), - label: Text(map[key]!), - selected: _rotateFlag == key, - onSelected: (bool value) { - print(map[key]); - setState(() { - _x = 0; - if (value) { - _rotateFlag = key; - } - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node5_perspective.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node5_perspective.dart deleted file mode 100644 index 09890b826..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node5_perspective.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class R3C2 extends StatefulWidget { - const R3C2({Key? key}) : super(key: key); - - @override - _R3C2State createState() => _R3C2State(); -} - -class _R3C2State extends State { - late Matrix4 _m4; - double _value = 0; - double _rad = 0; - - @override - Widget build(BuildContext context) { - _m4 = Matrix4.identity() -// ..setEntry(3, 0, _value) // x -// ..setEntry(3, 1, _value)// y - ..setEntry(3, 2, _value) // z - ..rotateY(_rad) -// ..rotateX(_rad) - ; - return Column( - children: [ - Transform( - transform: _m4, - child: Container( - color: Colors.cyanAccent, - width: 100, - height: 100, - child: Image.asset( - 'assets/images/wy_300x200.webp', - fit: BoxFit.cover, - )), - ), - _buildSliders() - ], - ); - } - - Widget _buildSliders() => Column( - children: [ - Slider( - min: -0.01, - max: 0.01, - value: _value, - divisions: 360, - label: 'x:${_value.toStringAsFixed(5)}', - onChanged: (v) { - setState(() { - _value = v; - }); - }), - Slider( - min: -pi, - max: pi, - value: _rad, - divisions: 360, - label: '角度:' + (_rad * 180 / pi).toStringAsFixed(1) + "°", - onChanged: (v) { - setState(() { - _rad = v; - }); - }), - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/zz_node_op.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/zz_node_op.dart deleted file mode 100644 index 67770279e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/zz_node_op.dart +++ /dev/null @@ -1,98 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com -/// 说明: - -class CustomTransform extends StatefulWidget { - const CustomTransform({Key? key}) : super(key: key); - - @override - _CustomTransformState createState() => _CustomTransformState(); -} - -class _CustomTransformState extends State { - double angle = 0.0; - List m = [ - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 0.1, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 1.0, - ]; - - @override - Widget build(BuildContext context) { - var transform = Transform( - transform: Matrix4(m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7], m[8], - m[9], m[10], m[11], m[12], m[13], m[14], m[15]), - child: Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 100, - height: 100, - child: Image.asset( - 'assets/images/wy_300x200.webp', - fit: BoxFit.cover, - )), - ); - - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Container( - alignment: Alignment.topLeft, - color: Colors.grey.withAlpha(22), - width: 200, - height: 150, - child: transform, - ), - Text( - '${m[0]},${m[1]},${m[2]},${m[3]},\n' - '${m[4]},${m[5]},${m[6]},${m[7]},\n' - '${m[8]},${m[9]},${m[10]},${m[11]},\n' - '${m[12]},${m[13]},${m[14]},${m[15]}\n', - style: const TextStyle(fontSize: 20), - ) - ], - ), - SizedBox( - width: MediaQuery.of(context).size.width, - height: 200, - child: _buildSliders()) - ], - ); - } - - Widget _buildSliders() => GridView.count( - crossAxisCount: 2, - childAspectRatio: 8, - children: m - .asMap() - .keys - .map((i) => Slider( - value: m[i], - max: 0.01, - min: 0.0, - divisions: 10, - onChanged: (v) { - setState(() { - m[i] = v; - }); - })) - .toList()); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_de_DE.json deleted file mode 100644 index c53fc137f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "Unbegrenzte Box", - "info": "Kann ein Unterelement aufnehmen und hebt alle Bereichsbeschränkungen dieses Elements auf, um seine eigene Größe zu zeigen.", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von UnconstrainedBox", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【constrainedAxis】 : Noch eingeschränkte Achse*2 【Axis】", - "【alignment】 : Ausrichtung 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_en_US.json deleted file mode 100644 index 0173f7695..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "Unconstrained Box", - "info": "Can contain a child component and remove all area constraints of the component, displaying its own size.", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of UnconstrainedBox", - "desc": [ - "【child】: Child component 【Widget】", - "【constrainedAxis】: Axes still constrained*2 【Axis】", - "【alignment】: Alignment method 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_es_ES.json deleted file mode 100644 index d66a2aa26..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "Caja sin restricciones", - "info": "Puede contener un componente hijo y elimina todas las restricciones de área de ese componente, mostrando su tamaño propio.", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de UnconstrainedBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【constrainedAxis】 : Eje aún restringido*2 【Axis】", - "【alignment】 : Modo de alineación 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_fr_FR.json deleted file mode 100644 index 2062709c9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "Boîte sans contrainte", - "info": "Peut contenir un composant enfant et libère toutes les contraintes de zone de ce composant, montrant sa taille réelle.", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'UnconstrainedBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【constrainedAxis】 : Axe toujours contraint*2 【Axis】", - "【alignment】 : Mode d'alignement 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_it_IT.json deleted file mode 100644 index 399a45484..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "Scatola senza vincoli", - "info": "Può contenere un componente figlio e rimuove tutti i vincoli di area di quel componente, mostrando le proprie dimensioni.", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di UnconstrainedBox", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【constrainedAxis】 : Asse ancora vincolato*2 【Axis】", - "【alignment】 : Allineamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ja_JP.json deleted file mode 100644 index 5d6038833..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "無制約ボックス", - "info": "子コンポーネントを収容し、そのコンポーネントのすべての領域制約を解除し、自己サイズを表示します。", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "UnconstrainedBoxの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【constrainedAxis】 : 制約を受ける軸*2 【Axis】", - "【alignment】 : 整列方式 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ko_KR.json deleted file mode 100644 index 334a6f720..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "제약 없는 상자", - "info": "하위 컴포넌트를 수용하고 해당 컴포넌트의 모든 영역 제약을 해제하여 자체 크기를 표시합니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "UnconstrainedBox 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【constrainedAxis】 : 여전히 제약을 받는 축*2 【Axis】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_pt_PT.json deleted file mode 100644 index 37b03da3e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "Caixa sem Restrições", - "info": "Pode conter um componente filho e remove todas as restrições de área desse componente, exibindo o seu próprio tamanho.", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do UnconstrainedBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【constrainedAxis】 : Eixo ainda restrito*2 【Axis】", - "【alignment】 : Modo de alinhamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ru_RU.json deleted file mode 100644 index b9a740d18..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "Неограниченный контейнер", - "info": "Может содержать один дочерний компонент и снимает все ограничения области для этого компонента, позволяя ему отображать свои собственные размеры.", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование UnconstrainedBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【constrainedAxis】 : Ось, которая остается ограниченной*2 【Axis】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_zh-CN.json deleted file mode 100644 index 77714ac35..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "无约束盒", - "info": "可容纳一个子组件,并解除该组件的所有区域约束,展现自我尺寸。", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "UnconstrainedBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【constrainedAxis】 : 仍受约束的轴*2 【Axis】", - "【alignment】 : 对齐方式 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/node1_base.dart deleted file mode 100644 index e2d622f1e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/node1_base.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomUnConstrainedBox extends StatefulWidget { - const CustomUnConstrainedBox({Key? key}) : super(key: key); - - @override - _CustomUnConstrainedBoxState createState() => _CustomUnConstrainedBoxState(); -} - -class _CustomUnConstrainedBoxState extends State { - bool _value = false; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [_buildUnconstrainedBox(), _buildConstrainedAxis()], - ); - } - - Widget _buildUnconstrainedBox() { - Widget child = Container( - color: Colors.cyanAccent, - width: 60, - height: 60, - child: Switch( - value: _value, - onChanged: (v) { - setState(() { - _value = v; - }); - }, - ), - ); - - return Column( - children: [ - Container( - color: Colors.grey.withAlpha(22), - width: 150, - height: 100, - child: _value - ? UnconstrainedBox(alignment: Alignment.center, child: child) - : child, - ), - Text(_value ? "已解除约束" : "子组件受约束") - ], - ); - } - - Widget _buildConstrainedAxis() { - return Column( - children: [ - Container( - color: Colors.grey.withAlpha(22), - width: 150, - height: 100, - child: UnconstrainedBox( - alignment: Alignment.center, - constrainedAxis: Axis.vertical, - child: Container( - color: Colors.cyanAccent, - width: 60, - height: 60, - )), - ), - const Text("竖直方向仍约束") - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_de_DE.json deleted file mode 100644 index f93798a08..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Sliver-Navigationsleiste", - "info": "Navigationsleisten-Effekt in iOS11, der largeTitle beim Ausklappen anzeigt, beim Hochscrollen der Liste jedoch nicht. Wenn middle leer ist, wird der largeTitle in kleiner Schriftgröße als middle angezeigt.", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung der Navigationsleiste", - "desc": [ - "【leading】 : Linke Komponente 【Widget】", - "【middle】 : Mittlere Komponente 【Widget】", - "【trailing】 : Rechte Komponente 【Widget】", - "【largeTitle】 : Untere ausklappbare Komponente 【Widget】", - "【border】 : Randlinie 【Border】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【padding】 : Innenabstand 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_en_US.json deleted file mode 100644 index d639ce44a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Sliver Navigation Bar", - "info": "The navigation bar effect in iOS11, the largeTitle is displayed when expanded, and it is not displayed when the list is scrolled up. If the middle is empty, the largeTitle will be displayed as the middle in a smaller font size.", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Navigation Bar", - "desc": [ - "【leading】: Left component 【Widget】", - "【middle】: Middle component 【Widget】", - "【trailing】: Trailing component 【Widget】", - "【largeTitle】: Bottom expandable component 【Widget】", - "【border】: Border 【Border】", - "【backgroundColor】: Background color 【Color】", - "【padding】: Padding 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_es_ES.json deleted file mode 100644 index 2442c5d6a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Barra de navegación Sliver", - "info": "Efecto de la barra de navegación en iOS11, el largeTitle se muestra cuando se expande, no se muestra cuando la lista se desliza hacia arriba. Si el middle está vacío, el largeTitle se mostrará como middle con un tamaño de fuente pequeño.", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de la barra de navegación", - "desc": [ - "【leading】 : Componente izquierdo 【Widget】", - "【middle】 : Componente central 【Widget】", - "【trailing】 : Componente derecho 【Widget】", - "【largeTitle】 : Componente de expansión inferior 【Widget】", - "【border】 : Borde 【Border】", - "【backgroundColor】 : Color de fondo 【Color】", - "【padding】 : Relleno interno 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_fr_FR.json deleted file mode 100644 index 125aec02d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Barre de navigation Sliver", - "info": "Effet de la barre de navigation dans iOS11, le largeTitle s'affiche lors du déploiement, disparaît lors du défilement vers le haut de la liste. Si le middle est vide, le largeTitle sera affiché en petite taille comme middle.", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de la barre de navigation", - "desc": [ - "【leading】 : Composant de gauche 【Widget】", - "【middle】 : Composant du milieu 【Widget】", - "【trailing】 : Composant de droite 【Widget】", - "【largeTitle】 : Composant de déploiement en bas 【Widget】", - "【border】 : Bordure 【Border】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【padding】 : Marge intérieure 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_it_IT.json deleted file mode 100644 index 07b5f9450..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Barra di navigazione Sliver", - "info": "Effetto della barra di navigazione in iOS11, il largeTitle viene visualizzato quando espanso, non viene visualizzato quando la lista scorre verso l'alto, se il middle è vuoto, il largeTitle verrà visualizzato come middle con un carattere più piccolo.", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base della barra di navigazione", - "desc": [ - "【leading】 : Componente sinistro 【Widget】", - "【middle】 : Componente centrale 【Widget】", - "【trailing】 : Componente finale 【Widget】", - "【largeTitle】 : Componente di espansione inferiore 【Widget】", - "【border】 : Bordo 【Border】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【padding】 : Spaziatura interna 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ja_JP.json deleted file mode 100644 index 1f1abc56b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Sliverナビゲーションバー", - "info": "iOS11のナビゲーションバー効果で、展開時にlargeTitleが表示され、リストを上にスクロールすると表示されなくなります。もしmiddleが空の場合、largeTitleは小さいフォントサイズでmiddleとして表示されます。", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ナビゲーションバーの基本使用", - "desc": [ - "【leading】 : 左側のコンポーネント 【Widget】", - "【middle】 : 中間のコンポーネント 【Widget】", - "【trailing】 : 末尾のコンポーネント 【Widget】", - "【largeTitle】 : 下部折りたたみコンポーネント 【Widget】", - "【border】 : ボーダー 【Border】", - "【backgroundColor】 : 背景色 【Color】", - "【padding】 : 内側の余白 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ko_KR.json deleted file mode 100644 index d0388828f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Sliver 네비게이션 바", - "info": "iOS11에서의 네비게이션 바 효과, 펼칠 때 largeTitle이 표시되며, 리스트를 위로 스크롤하면 표시되지 않습니다. middle이 비어 있으면 largeTitle이 작은 글자 크기로 middle로 표시됩니다.", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "네비게이션 바 기본 사용법", - "desc": [ - "【leading】 : 왼쪽 컴포넌트 【Widget】", - "【middle】 : 중간 컴포넌트 【Widget】", - "【trailing】 : 오른쪽 컴포넌트 【Widget】", - "【largeTitle】 : 하단 확장 컴포넌트 【Widget】", - "【border】 : 테두리 【Border】", - "【backgroundColor】 : 배경색 【Color】", - "【padding】 : 안쪽 여백 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_pt_PT.json deleted file mode 100644 index e363bc47f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Barra de navegação Sliver", - "info": "Efeito da barra de navegação no iOS11, o largeTitle é exibido quando expandido, não é exibido quando a lista é deslizada para cima, se o middle estiver vazio, o largeTitle será exibido como middle com um tamanho de fonte menor.", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico da barra de navegação", - "desc": [ - "【leading】 : Componente esquerdo 【Widget】", - "【middle】 : Componente do meio 【Widget】", - "【trailing】 : Componente da cauda 【Widget】", - "【largeTitle】 : Componente de expansão inferior 【Widget】", - "【border】 : Borda 【Border】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【padding】 : Preenchimento interno 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ru_RU.json deleted file mode 100644 index a51f90df4..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Sliver навигационная панель", - "info": "Эффект навигационной панели в iOS11, largeTitle отображается при раскрытии, не отображается при прокрутке списка вверх. Если middle пуст, largeTitle будет отображаться как middle с меньшим размером шрифта.", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование навигационной панели", - "desc": [ - "【leading】 : Левый компонент 【Widget】", - "【middle】 : Средний компонент 【Widget】", - "【trailing】 : Хвостовой компонент 【Widget】", - "【largeTitle】 : Нижний раскрывающийся компонент 【Widget】", - "【border】 : Граница 【Border】", - "【backgroundColor】 : Цвет фона 【Color】", - "【padding】 : Внутренний отступ 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_zh-CN.json deleted file mode 100644 index 4182f3024..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Sliver导航条", - "info": "iOS11中导航条效果,展开时largeTitle显示,列表上滑后不显示,如果middle为空,largeTitle会以小字号作为middle。", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "导航条基本使用", - "desc": [ - "【leading】 : 左侧组件 【Widget】", - "【middle】 : 中间组件 【Widget】", - "【trailing】 : 尾部组件 【Widget】", - "【largeTitle】 : 底部折展组件 【Widget】", - "【border】 : 边线 【Border】", - "【backgroundColor】 : 背景色 【Color】", - "【padding】 : 内边距 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/node1_base.dart deleted file mode 100644 index 00c448f7f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/node1_base.dart +++ /dev/null @@ -1,88 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class CupertinoSliverNavigationBarDemo extends StatelessWidget { - const CupertinoSliverNavigationBarDemo({super.key}); - - List get data => [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - CupertinoSliverNavigationBar( - trailing: const Icon( - CupertinoIcons.share, - size: 25, - ), - leading: _buildLeading(), - backgroundColor: Colors.white, - // middle: Text('张风捷特烈'), - largeTitle: Row( - mainAxisSize: MainAxisSize.min, - children: const [ - Icon( - Icons.ac_unit, - size: 20, - ), - Padding( - padding: EdgeInsets.symmetric(horizontal: 8), - child: Text('张风捷特烈'), - ), - Icon(Icons.ac_unit, size: 20), - ], - ), - ), - _buildSliverList() - ], - ), - ); - } - - Widget _buildSliverList() => SliverPrototypeExtentList( - prototypeItem: Container( - height: 40, - ), - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_de_DE.json deleted file mode 100644 index 3e180a103..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Sliver Aktualisierungssteuerung", - "info": "iOS-Stil Pull-to-Refresh-Steuerung, die asynchrone Aktualisierungsmethoden, benutzerdefinierte Steuerungskomponenten, die Höhe des Indikators und die Höhe des Auslösens des Ladens durchziehen kann.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung der Aktualisierungssteuerung", - "desc": [ - "【refreshIndicatorExtent】 : Höhe des Ladeindikators 【double】", - "【refreshTriggerPullDistance】 : Höhe des Auslösens des Ladens durchziehen 【double】", - "【onRefresh】 : Pull-to-Refresh-Ereignis 【RefreshCallback】", - "【builder】 : Indikator-Builder 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_en_US.json deleted file mode 100644 index 759043abf..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Sliver Refresh Controller", - "info": "iOS-style pull-to-refresh controller that can execute asynchronous refresh methods, customize controller components, set the height at which the indicator stays, and the scroll height that triggers loading.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Refresh Controller", - "desc": [ - "【refreshIndicatorExtent】: Height of the loading indicator 【double】", - "【refreshTriggerPullDistance】: Scroll height that triggers loading 【double】", - "【onRefresh】: Pull-down event 【RefreshCallback】", - "【builder】: Indicator builder 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_es_ES.json deleted file mode 100644 index b3bbc36db..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Controlador de actualización Sliver", - "info": "Controlador de actualización de estilo iOS que puede ejecutar métodos de actualización asíncronos, personalizar componentes del controlador, altura de permanencia del indicador y altura de deslizamiento para activar la carga.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico del controlador de actualización", - "desc": [ - "【refreshIndicatorExtent】 : Altura del indicador de carga 【double】", - "【refreshTriggerPullDistance】 : Altura de deslizamiento para activar la carga 【double】", - "【onRefresh】 : Evento de deslizamiento hacia abajo 【RefreshCallback】", - "【builder】 : Constructor del indicador 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_fr_FR.json deleted file mode 100644 index 97e8293dd..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Contrôleur de rafraîchissement Sliver", - "info": "Contrôleur de rafraîchissement de style iOS, capable d'exécuter des méthodes de rafraîchissement asynchrones, de personnaliser les composants du contrôleur, la hauteur de séjour de l'indicateur et la hauteur de glissement pour déclencher le chargement.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base du contrôleur de rafraîchissement", - "desc": [ - "【refreshIndicatorExtent】 : Hauteur de l'indicateur de chargement 【double】", - "【refreshTriggerPullDistance】 : Hauteur de glissement pour déclencher le chargement 【double】", - "【onRefresh】 : Événement de glissement vers le bas 【RefreshCallback】", - "【builder】 : Constructeur de l'indicateur 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_it_IT.json deleted file mode 100644 index 657a18472..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Controller di aggiornamento Sliver", - "info": "Controller di aggiornamento a stile iOS, esegue metodi di aggiornamento asincroni, personalizza i componenti del controller, l'altezza di sosta dell'indicatore e l'altezza di scorrimento per attivare il caricamento.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base del controller di aggiornamento", - "desc": [ - "【refreshIndicatorExtent】 : Altezza dell'indicatore di caricamento 【double】", - "【refreshTriggerPullDistance】 : Altezza di scorrimento per attivare il caricamento 【double】", - "【onRefresh】 : Evento di trascinamento verso il basso 【RefreshCallback】", - "【builder】 : Costruttore dell'indicatore 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ja_JP.json deleted file mode 100644 index 2ef32644f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Sliverリフレッシュコントローラー", - "info": "iOSスタイルのプルダウンリフレッシュコントローラーで、非同期リフレッシュメソッドの実行、カスタムコントローラーコンポーネント、インジケーターの停留高さ、およびロードをトリガーするスワイプ高さを設定できます。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "リフレッシュコントローラーの基本使用", - "desc": [ - "【refreshIndicatorExtent】 : ロード中インジケーターの高さ 【double】", - "【refreshTriggerPullDistance】 : ロードをトリガーするスワイプ高さ 【double】", - "【onRefresh】 : プルダウンイベント 【RefreshCallback】", - "【builder】 : インジケーターコンストラクター 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ko_KR.json deleted file mode 100644 index dc59fef10..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Sliver 새로고침 컨트롤러", - "info": "iOS 스타일의 풀다운 새로고침 컨트롤러로, 비동기 새로고침 메소드 실행, 사용자 정의 컨트롤러 컴포넌트, 인디케이터 고정 높이 및 로딩을 트리거하는 스와이프 높이를 설정할 수 있습니다.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "새로고침 컨트롤러 기본 사용", - "desc": [ - "【refreshIndicatorExtent】 : 로딩 중 인디케이터 높이 【double】", - "【refreshTriggerPullDistance】 : 로딩을 트리거하는 스와이프 높이 【double】", - "【onRefresh】 : 풀다운 이벤트 【RefreshCallback】", - "【builder】 : 인디케이터 빌더 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_pt_PT.json deleted file mode 100644 index dfcb13913..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Controlador de Atualização Sliver", - "info": "Controlador de atualização de deslizar para baixo no estilo iOS, capaz de executar métodos de atualização assíncronos, personalizar componentes do controlador, altura de permanência do indicador e altura de deslize para acionar o carregamento.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Controlador de Atualização", - "desc": [ - "【refreshIndicatorExtent】 : Altura do indicador de carregamento 【double】", - "【refreshTriggerPullDistance】 : Altura de deslize para acionar o carregamento 【double】", - "【onRefresh】 : Evento de deslizar para baixo 【RefreshCallback】", - "【builder】 : Construtor do indicador 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ru_RU.json deleted file mode 100644 index ba7d2b0ee..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Sliver контроллер обновления", - "info": "Контроллер обновления в стиле iOS, который может выполнять асинхронные методы обновления, настраивать компоненты контроллера, высоту остановки индикатора и высоту скольжения для запуска загрузки.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование контроллера обновления", - "desc": [ - "【refreshIndicatorExtent】 : Высота индикатора загрузки 【double】", - "【refreshTriggerPullDistance】 : Высота скольжения для запуска загрузки 【double】", - "【onRefresh】 : Событие прокрутки вниз 【RefreshCallback】", - "【builder】 : Конструктор индикатора 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_zh-CN.json deleted file mode 100644 index c8ba82c01..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Sliver刷新控制器", - "info": "iOS风格的下拉刷新控制器,可执行异步刷新方法、自定义控制器组件、指示器停留高度和触发加载的滑动高度。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "刷新控制器基本使用", - "desc": [ - "【refreshIndicatorExtent】 : 加载中指示器高度 【double】", - "【refreshTriggerPullDistance】 : 触发加载的滑动高度 【double】", - "【onRefresh】 : 下拉事件 【RefreshCallback】", - "【builder】 : 指示器构造器 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/node1_base.dart deleted file mode 100644 index 47975d7c5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/node1_base.dart +++ /dev/null @@ -1,120 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class CupertinoSliverRefreshControlDemo extends StatefulWidget { - const CupertinoSliverRefreshControlDemo({Key? key}) : super(key: key); - - @override - _CupertinoSliverRefreshControlDemoState createState() => - _CupertinoSliverRefreshControlDemoState(); -} - -class _CupertinoSliverRefreshControlDemoState - extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - final Random r = Random(); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - physics: const BouncingScrollPhysics( - parent: AlwaysScrollableScrollPhysics()), - slivers: [ - _buildSliverAppBar(), - CupertinoSliverRefreshControl( - refreshIndicatorExtent: 60, - refreshTriggerPullDistance: 80, - onRefresh: _doRefresh, - ), - _buildSliverList() - ], - ), - ); - } - - Widget _buildSliverList() => SliverFixedExtentList( - itemExtent: 50, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 120.0, - leading: Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - Color randomColor() => Color.fromARGB( - r.nextInt(255), r.nextInt(255), r.nextInt(255), r.nextInt(255)); - - Future _doRefresh() async { - await Future.delayed(const Duration(seconds: 2)); - setState(() { - data.insertAll(0, [randomColor()]); - }); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_de_DE.json deleted file mode 100644 index 65808d073..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "Allgemeine Scroll-Ansicht", - "info": "Eine allgemeine Scroll-Struktur, die Eigenschaften wie Scroll-Richtung, ob umgekehrt, Scroll-Controller usw. festlegen kann. Die darin enthaltenen Unterkomponenten müssen zur Sliver-Familie gehören.", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CustomScrollView", - "desc": [ - "【slivers】 : Liste der Unterkomponenten 【List】", - "【reverse】 : Ob umgekehrt 【bool】", - "【scrollDirection】 : Scroll-Richtung 【Axis】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_en_US.json deleted file mode 100644 index 5eb90c191..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "General Scroll View", - "info": "A general scroll structure that can specify properties such as scroll direction, whether to reverse, scroll controller, etc. The child components it contains must be from the Sliver family.", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CustomScrollView", - "desc": [ - "【slivers】 : Child component list 【List】", - "【reverse】 : Whether to reverse 【bool】", - "【scrollDirection】 : Scroll direction 【Axis】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_es_ES.json deleted file mode 100644 index 8544d1758..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "Vista de desplazamiento universal", - "info": "Una estructura de desplazamiento universal que puede especificar la dirección de desplazamiento, si es inverso, el controlador de desplazamiento y otras propiedades. Los componentes secundarios que contiene deben ser de la familia Sliver.", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CustomScrollView", - "desc": [ - "【slivers】 : Lista de componentes secundarios 【List】", - "【reverse】 : Si es inverso 【bool】", - "【scrollDirection】 : Dirección de desplazamiento 【Axis】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_fr_FR.json deleted file mode 100644 index 3491884b8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "Vue de défilement universelle", - "info": "Une structure de défilement universelle qui permet de spécifier la direction du défilement, l'inversion, le contrôleur de défilement, etc. Les composants enfants inclus doivent être de la famille Sliver.", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CustomScrollView", - "desc": [ - "【slivers】 : Liste des composants enfants 【List】", - "【reverse】 : Inversion 【bool】", - "【scrollDirection】 : Direction du défilement 【Axis】", - "【controller】 : Contrôleur 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_it_IT.json deleted file mode 100644 index ef4f3b179..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "Visualizzazione a scorrimento universale", - "info": "Una struttura di scorrimento universale che consente di specificare la direzione di scorrimento, se invertire, il controller di scorrimento e altre proprietà. I componenti figli inclusi devono appartenere alla famiglia Sliver.", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CustomScrollView", - "desc": [ - "【slivers】 : Lista dei componenti figli 【List】", - "【reverse】 : Se invertire 【bool】", - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ja_JP.json deleted file mode 100644 index 610f11f58..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "汎用スクロールビュー", - "info": "汎用的なスクロール構造で、スクロール方向、逆方向かどうか、スクロールコントローラーなどの属性を指定できます。含まれる子コンポーネントはSliverファミリーでなければなりません。", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CustomScrollViewの基本使用", - "desc": [ - "【slivers】 : 子コンポーネントリスト 【List】", - "【reverse】 : 逆方向かどうか 【bool】", - "【scrollDirection】 : スクロール方向 【Axis】", - "【controller】 : コントローラー 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ko_KR.json deleted file mode 100644 index 5ce0e4b48..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "일반 스크롤 뷰", - "info": "일반적인 스크롤 구조로, 스크롤 방향, 역방향 여부, 스크롤 컨트롤러 등의 속성을 지정할 수 있습니다. 포함된 하위 컴포넌트들은 반드시 Sliver 패밀리여야 합니다.", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CustomScrollView 기본 사용법", - "desc": [ - "【slivers】 : 하위 컴포넌트 목록 【List】", - "【reverse】 : 역방향 여부 【bool】", - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【controller】 : 컨트롤러 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_pt_PT.json deleted file mode 100644 index 3195984f3..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "Visão de Rolagem Universal", - "info": "Uma estrutura de rolagem universal que pode especificar a direção de rolagem, se é reversa, o controlador de rolagem e outras propriedades. Os componentes filhos incluídos devem ser da família Sliver.", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CustomScrollView", - "desc": [ - "【slivers】 : Lista de componentes filhos 【List】", - "【reverse】 : Se é reverso 【bool】", - "【scrollDirection】 : Direção de rolagem 【Axis】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ru_RU.json deleted file mode 100644 index 1d1e586bf..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "Универсальная прокрутка", - "info": "Универсальная структура прокрутки, которая позволяет задать направление прокрутки, обратное ли оно, контроллер прокрутки и другие свойства. Вложенные компоненты должны принадлежать семейству Sliver.", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CustomScrollView", - "desc": [ - "【slivers】 : Список дочерних компонентов 【List】", - "【reverse】 : Обратная ли прокрутка 【bool】", - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【controller】 : Контроллер 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_zh-CN.json deleted file mode 100644 index 5bbfabdb4..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "通用滑动视图", - "info": "一个通用的滑动结构,可以指定滑动方向、是否反向、滑动控制器等属性。其中包含的子组件们必须是Sliver家族。", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CustomScrollView基本使用", - "desc": [ - "【slivers】 : 子组件列表 【List】", - "【reverse】 : 是否反向 【bool】", - "【scrollDirection】 : 滑动方向 【Axis】", - "【controller】 : 控制器 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/node1_base.dart deleted file mode 100644 index 9e482f0f2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/node1_base.dart +++ /dev/null @@ -1,90 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class CustomScrollViewDemo extends StatelessWidget { - const CustomScrollViewDemo({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - anchor: 0, - scrollDirection: Axis.vertical, - reverse: false, - slivers: [_buildSliverAppBar(), _buildSliverFixedExtentList()], - ), - ); - } - - TextStyle get textStyle => const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]); - - Widget _buildSliverFixedExtentList() => SliverFixedExtentList( - itemExtent: 60, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: data[index], - child: Text( - colorString(data[index]), - style: textStyle, - ), - ), - childCount: data.length), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')), - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - title: const Text( - '张风捷特烈', - style: TextStyle(color: Colors.black, //标题 - shadows: [ - Shadow( - color: Colors.blue, - offset: Offset(1, 1), - blurRadius: 2, - ) - ]), - ), - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_de_DE.json deleted file mode 100644 index c5891b0d6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "Dekorierte Gleitfläche", - "info": "Diese Komponente wird in einem Scroll-Viewport verwendet und kann ein untergeordnetes Sliver-Element umhüllen, um ihm einen Dekorationseffekt hinzuzufügen.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Grundlegende Verwendung von DecoratedSliver", - "desc": [ - "【sliver】 : Kindkomponente 【Widget?】", - "【decoration】 : Dekorationsobjekt 【Decoration】", - "【position】 : Dekorationsposition 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_en_US.json deleted file mode 100644 index 8a4de0b9f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "Decorated Sliver", - "info": "This component is used in sliding viewports and can wrap a child Sliver component to add Decoration effects.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Basic Usage of DecoratedSliver", - "desc": [ - "【sliver】: Child component 【Widget?】", - "【decoration】: Decoration object 【Decoration】", - "【position】: Decoration position 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_es_ES.json deleted file mode 100644 index 78ade3b80..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "Panel deslizante decorado", - "info": "Este componente se aplica en ventanas deslizantes y puede envolver un componente Sliver hijo para agregar efectos de decoración Decoration.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso básico de DecoratedSliver", - "desc": [ - "【sliver】 : Componente hijo 【Widget?】", - "【decoration】 : Objeto de decoración 【Decoration】", - "【position】 : Posición de la decoración 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_fr_FR.json deleted file mode 100644 index 2a9b5860a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "Glissière décorée", - "info": "Ce composant est utilisé dans une vue défilante et peut envelopper un composant Sliver enfant pour ajouter un effet de décoration.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de base de DecoratedSliver", - "desc": [ - "【sliver】 : Composant enfant 【Widget?】", - "【decoration】 : Objet de décoration 【Decoration】", - "【position】 : Position de la décoration 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_it_IT.json deleted file mode 100644 index b9b45c95d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "Decorazione Sliver", - "info": "Questo componente viene utilizzato in una vista scorrevole e può avvolgere un componente Sliver figlio, aggiungendo un effetto decorativo Decoration.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso di base di DecoratedSliver", - "desc": [ - "【sliver】 : Componente figlio 【Widget?】", - "【decoration】 : Oggetto decorativo 【Decoration】", - "【position】 : Posizione della decorazione 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ja_JP.json deleted file mode 100644 index 4bff3278a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "装飾スライバー", - "info": "このコンポーネントはスクロールビューで使用され、子スライバーコンポーネントをラップして、装飾効果を追加します。", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "DecoratedSliver の基本使用", - "desc": [ - "【sliver】 : 子コンポーネント 【Widget?】", - "【decoration】 : 装飾オブジェクト 【Decoration】", - "【position】 : 装飾位置 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ko_KR.json deleted file mode 100644 index 8ea23507a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "장식 슬라이더", - "info": "이 컴포넌트는 슬라이딩 뷰포트에 적용되며, 자식 Sliver 컴포넌트를 감싸서 Decoration 장식 효과를 추가할 수 있습니다.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "DecoratedSliver 기본 사용법", - "desc": [ - "【sliver】 : 자식 컴포넌트 【Widget?】", - "【decoration】 : 장식 객체 【Decoration】", - "【position】 : 장식 위치 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_pt_PT.json deleted file mode 100644 index d55a26683..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "Slider Decorado", - "info": "Este componente é aplicado em portas de visualização deslizantes, pode envolver um componente Sliver filho, adicionando um efeito de decoração Decoration.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso Básico do DecoratedSliver", - "desc": [ - "【sliver】 : Componente filho 【Widget?】", - "【decoration】 : Objeto de decoração 【Decoration】", - "【position】 : Posição da decoração 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ru_RU.json deleted file mode 100644 index 633b7d756..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "Декорированный слайдер", - "info": "Этот компонент используется в прокручиваемых окнах и может обернуть дочерний компонент Sliver, добавляя эффекты декорации Decoration.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Основное использование DecoratedSliver", - "desc": [ - "【sliver】 : Дочерний компонент 【Widget?】", - "【decoration】 : Объект декорации 【Decoration】", - "【position】 : Позиция декорации 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_zh-CN.json deleted file mode 100644 index ea9dfa29c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "装饰滑片", - "info": "该组件应用于滑动视口中,可以包裹一个子 Sliver 组件,为其添加 Decoration 装饰效果。", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "DecoratedSliver 基本使用", - "desc": [ - "【sliver】 : 孩子组件 【Widget?】", - "【decoration】 : 装饰对象 【Decoration】", - "【position】 : 装饰位置 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/node1.dart b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/node1.dart deleted file mode 100644 index 85379eae6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/node1.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/8/18 -/// contact me by email 1981462002@qq.com - -class DecorationSliverDemo extends StatelessWidget { - const DecorationSliverDemo({super.key}); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - SliverPadding( - padding: const EdgeInsets.all(8), - sliver: DecoratedSliver( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(20), - boxShadow: const [ - BoxShadow( - color: Color(0xFF111133), - blurRadius: 2, - offset: Offset(-2, -1)) - ], - gradient: LinearGradient( - colors: const [ - Color(0xFFEEEEEE), - Color(0xFF111133), - ], - stops: const [0.1, 1.0], - ), - ), - sliver: SliverList( - delegate: SliverChildBuilderDelegate( - (_, index) => Padding( - padding: const EdgeInsets.all(8.0), - child: Center( - child: Text( - '张风捷特烈-$index', - style: TextStyle(fontSize: 24, color: Colors.white), - )), - ), - childCount: 128), - ), - ), - ), - ], - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_de_DE.json deleted file mode 100644 index 36a9e492c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "Dehnbarer Raumleiste", - "info": "Wird normalerweise im dehnbaren Bereich von SliverAppBar verwendet und kann Titel, Titelabstand, Hintergrund, Faltmodus usw. angeben.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von FlexibleSpaceBar", - "desc": [ - "【title】 : Titelkomponente 【Widget】", - "【titlePadding】 : Titelabstand 【EdgeInsetsGeometry】", - "【collapseMode】 : Faltmodus 【CollapseMode】", - "【stretchModes】 : Dehnmodi 【List】", - "【background】 : Hintergrundkomponente 【Widget】", - "【centerTitle】 : Zentralisiert 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_en_US.json deleted file mode 100644 index fee8b71a2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "Stretch Space Bar", - "info": "Typically used in the stretchable area of SliverAppBar, it can specify the title, title spacing, background, collapse mode, etc.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of FlexibleSpaceBar", - "desc": [ - "【title】 : Title component 【Widget】", - "【titlePadding】 : Title spacing 【EdgeInsetsGeometry】", - "【collapseMode】 : Collapse mode 【CollapseMode】", - "【stretchModes】 : Stretch modes 【List】", - "【background】 : Background component 【Widget】", - "【centerTitle】 : Whether to center 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_es_ES.json deleted file mode 100644 index 04bd8a77a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "Barra de espacio flexible", - "info": "Normalmente se utiliza en la región extensible de SliverAppBar, donde se pueden especificar el título, el espaciado del título, el fondo, el modo de plegado, etc.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de FlexibleSpaceBar", - "desc": [ - "【title】 : Componente de título 【Widget】", - "【titlePadding】 : Espaciado del título 【EdgeInsetsGeometry】", - "【collapseMode】 : Modo de plegado 【CollapseMode】", - "【stretchModes】 : Modos de extensión 【List】", - "【background】 : Componente de fondo 【Widget】", - "【centerTitle】 : Centrado o no 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_fr_FR.json deleted file mode 100644 index 7af61bbff..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "Barre d'espace flexible", - "info": "Utilisé généralement dans la zone extensible de SliverAppBar, permet de spécifier le titre, l'espacement du titre, l'arrière-plan, le mode de repli, etc.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de FlexibleSpaceBar", - "desc": [ - "【title】 : Composant de titre 【Widget】", - "【titlePadding】 : Espacement du titre 【EdgeInsetsGeometry】", - "【collapseMode】 : Mode de repli 【CollapseMode】", - "【stretchModes】 : Modes d'extension 【List】", - "【background】 : Composant d'arrière-plan 【Widget】", - "【centerTitle】 : Centré ou non 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_it_IT.json deleted file mode 100644 index 0fbf71be0..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "Barra spaziale flessibile", - "info": "Utilizzata solitamente nell'area estensibile di SliverAppBar, può specificare titolo, spaziatura del titolo, sfondo, modalità di collasso, ecc.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di FlexibleSpaceBar", - "desc": [ - "【title】 : Componente del titolo 【Widget】", - "【titlePadding】 : Spaziatura del titolo 【EdgeInsetsGeometry】", - "【collapseMode】 : Modalità di collasso 【CollapseMode】", - "【stretchModes】 : Modalità di estensione 【List】", - "【background】 : Componente di sfondo 【Widget】", - "【centerTitle】 : Centrato o meno 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ja_JP.json deleted file mode 100644 index b0b59ec16..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "伸縮スペースバー", - "info": "通常、SliverAppBar内の伸縮可能な領域に使用され、タイトル、タイトルの間隔、背景、折りたたみモードなどを指定できます。", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlexibleSpaceBarの基本使用", - "desc": [ - "【title】 : タイトルコンポーネント 【Widget】", - "【titlePadding】 : タイトルの間隔 【EdgeInsetsGeometry】", - "【collapseMode】 : 折りたたみモード 【CollapseMode】", - "【stretchModes】 : 伸縮モード 【List】", - "【background】 : 背景コンポーネント 【Widget】", - "【centerTitle】 : 中央揃えかどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ko_KR.json deleted file mode 100644 index 503086182..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "확장 가능한 공간 바", - "info": "일반적으로 SliverAppBar에서 확장 가능한 영역으로 사용되며, 제목, 제목 간격, 배경, 접기 모드 등을 지정할 수 있습니다.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlexibleSpaceBar 기본 사용법", - "desc": [ - "【title】 : 제목 컴포넌트 【Widget】", - "【titlePadding】 : 제목 간격 【EdgeInsetsGeometry】", - "【collapseMode】 : 접기 모드 【CollapseMode】", - "【stretchModes】 : 확장 모드 【List】", - "【background】 : 배경 컴포넌트 【Widget】", - "【centerTitle】 : 중앙 정렬 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_pt_PT.json deleted file mode 100644 index 16985132b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "Barra de Espaço Flexível", - "info": "Normalmente usado na área expansível de um SliverAppBar, pode especificar o título, espaçamento do título, fundo, modo de recolhimento, etc.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do FlexibleSpaceBar", - "desc": [ - "【title】 : Componente do título 【Widget】", - "【titlePadding】 : Espaçamento do título 【EdgeInsetsGeometry】", - "【collapseMode】 : Modo de recolhimento 【CollapseMode】", - "【stretchModes】 : Modos de extensão 【List】", - "【background】 : Componente de fundo 【Widget】", - "【centerTitle】 : Centralizar 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ru_RU.json deleted file mode 100644 index a0a1a9fef..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "Растягивающееся пространство", - "info": "Обычно используется в растягиваемой области SliverAppBar, можно указать заголовок, отступы заголовка, фон, режим сворачивания и т.д.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование FlexibleSpaceBar", - "desc": [ - "【title】 : Заголовок 【Widget】", - "【titlePadding】 : Отступ заголовка 【EdgeInsetsGeometry】", - "【collapseMode】 : Режим сворачивания 【CollapseMode】", - "【stretchModes】 : Режимы растяжения 【List】", - "【background】 : Фон 【Widget】", - "【centerTitle】 : Центрировать заголовок 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_zh-CN.json deleted file mode 100644 index af842005c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "伸展空间栏", - "info": "通常用于SliverAppBar中的可伸展区域,可指定标题、标题间距、背景、折叠模式等。", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlexibleSpaceBar基本使用", - "desc": [ - "【title】 : 标题组件 【Widget】", - "【titlePadding】 : 标题间距 【EdgeInsetsGeometry】", - "【collapseMode】 : 折叠模式 【CollapseMode】", - "【stretchModes】 : 延伸模式 【List】", - "【background】 : 背景组件 【Widget】", - "【centerTitle】 : 是否居中 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/node1_base.dart deleted file mode 100644 index ba132525e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/node1_base.dart +++ /dev/null @@ -1,98 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - - -class FlexibleSpaceBarDemo extends StatelessWidget { - const FlexibleSpaceBarDemo({super.key}); - - List get data => [ - Colors.blue[50]!, - Colors.blue[100]!, - Colors.blue[200]!, - Colors.blue[300]!, - Colors.blue[400]!, - Colors.blue[500]!, - Colors.blue[600]!, - Colors.blue[700]!, - Colors.blue[800]!, - Colors.blue[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [_buildSliverAppBar(), _buildSliverFixedExtentList()], - ), - ); - } - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - actions: _buildActions(), - pinned: true, - backgroundColor: Colors.blue, - flexibleSpace: FlexibleSpaceBar(//伸展处布局 - centerTitle: false, - title: const Text( - '张风捷特烈', - style: TextStyle(shadows: [ - Shadow(color: Colors.blue, offset: Offset(1, 1), blurRadius: 2) - ]), - ), - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), - //标题边距 - collapseMode: CollapseMode.parallax, - //视差效果 - stretchModes: const [StretchMode.blurBackground, StretchMode.zoomBackground], - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - Widget _buildSliverFixedExtentList() => SliverFixedExtentList( - itemExtent: 60, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_de_DE.json deleted file mode 100644 index a7a8130b2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_de_DE.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "Fixierter Header-Sliver", - "info": "Ein Sliver, der am oberen Rand des Viewports verbleiben kann und den Effekt des Festklebens einfach erreicht.", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "PinnedHeaderSliver offizielles Beispiel", - "display": "new_page", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget?】", - "PinnedHeaderSliver kann nur in Scroll-Viewports verwendet werden, wobei die untergeordnete Komponente beim Scrollen nach oben nicht aus dem Viewport verschwindet, sondern am oberen Rand des Viewports verbleibt." - ] - }, - { - "file": "node_02.dart", - "name": "Titel festkleben", - "display": "new_page", - "desc": [ - "Ein auf PinnedHeaderSliver basierender Effekt, bei dem der Titel festklebt. Beachten Sie, dass auch die Trennlinie unten den Effekt des Festklebens hat." - ] - }, - { - "file": "node_03.dart", - "name": "Titel+Suche festkleben", - "display": "new_page", - "desc": [ - "Ein auf PinnedHeaderSliver basierender Effekt, bei dem der Titel und das Suchfeld festkleben." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_en_US.json deleted file mode 100644 index cd8ac1f4a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_en_US.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "Pinned Header Sliver", - "info": "A sliver that can stay at the top of the viewport, easily achieving a sticky header effect.", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "PinnedHeaderSliver Official Example", - "display": "new_page", - "desc": [ - "【child】 : Child widget 【Widget?】", - "PinnedHeaderSliver can only be used in a scroll viewport, where the child widget will not move out of the viewport when scrolling to the top, thus staying above the viewport." - ] - }, - { - "file": "node_02.dart", - "name": "Sticky Header", - "display": "new_page", - "desc": [ - "The sticky header effect implemented based on PinnedHeaderSliver, note that the divider below also has a sticky effect." - ] - }, - { - "file": "node_03.dart", - "name": "Sticky Header + Search", - "display": "new_page", - "desc": [ - "The sticky header + search box effect implemented based on PinnedHeaderSliver." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_es_ES.json deleted file mode 100644 index 520a0506a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_es_ES.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "Cabecera Fija Deslizante", - "info": "Un panel deslizante que puede permanecer en la parte superior de la ventana gráfica, logrando fácilmente el efecto de fijación en la parte superior.", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Ejemplo oficial de PinnedHeaderSliver", - "display": "new_page", - "desc": [ - "【child】 : Componente hijo 【Widget?】", - "PinnedHeaderSliver solo se puede usar en ventanas gráficas desplazables, donde el componente hijo no sale de la ventana gráfica cuando se desliza hacia la parte superior, permaneciendo así en la parte superior de la ventana gráfica." - ] - }, - { - "file": "node_02.dart", - "name": "Título fijado en la parte superior", - "display": "new_page", - "desc": [ - "Efecto de título fijado en la parte superior basado en PinnedHeaderSliver, observe que la línea divisoria inferior también tiene el efecto de fijación en la parte superior." - ] - }, - { - "file": "node_03.dart", - "name": "Título + Búsqueda fijada en la parte superior", - "display": "new_page", - "desc": [ - "Efecto de título + cuadro de búsqueda fijado en la parte superior basado en PinnedHeaderSliver." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_fr_FR.json deleted file mode 100644 index 0e1a5c816..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_fr_FR.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "Glissière d'en-tête fixe", - "info": "Une glissière qui peut rester en haut de la vue, permettant de réaliser facilement un effet de fixation en haut.", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Exemple officiel de PinnedHeaderSliver", - "display": "new_page", - "desc": [ - "【child】 : Composant enfant 【Widget?】", - "PinnedHeaderSliver ne peut être utilisé que dans une vue défilante, où le composant enfant ne sort pas de la vue lorsqu'il est glissé vers le haut, restant ainsi en haut de la vue." - ] - }, - { - "file": "node_02.dart", - "name": "Titre fixé en haut", - "display": "new_page", - "desc": [ - "Effet de titre fixé en haut basé sur PinnedHeaderSliver, notez que la ligne de séparation en dessous a également un effet de fixation en haut." - ] - }, - { - "file": "node_03.dart", - "name": "Titre + recherche fixés en haut", - "display": "new_page", - "desc": [ - "Effet de titre + boîte de recherche fixés en haut basé sur PinnedHeaderSliver." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_it_IT.json deleted file mode 100644 index 29a97b670..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_it_IT.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "Sliver con intestazione fissa", - "info": "Uno sliver che può rimanere nella parte superiore della viewport, per ottenere facilmente l'effetto di adesione in cima.", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Esempio ufficiale di PinnedHeaderSliver", - "display": "new_page", - "desc": [ - "【child】 : Componente figlio 【Widget?】", - "PinnedHeaderSliver può essere utilizzato solo in una viewport scorrevole, dove il componente figlio, quando scorre verso l'alto, non esce dalla viewport, rimanendo così nella parte superiore della viewport." - ] - }, - { - "file": "node_02.dart", - "name": "Intestazione adesiva", - "display": "new_page", - "desc": [ - "Effetto di intestazione adesiva realizzato con PinnedHeaderSliver, nota che anche la linea di separazione sotto ha un effetto adesivo." - ] - }, - { - "file": "node_03.dart", - "name": "Intestazione + ricerca adesiva", - "display": "new_page", - "desc": [ - "Effetto di intestazione e casella di ricerca adesiva realizzato con PinnedHeaderSliver." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ja_JP.json deleted file mode 100644 index dd19b43d7..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ja_JP.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "固定ヘッダースライバー", - "info": "ビューポート上部に留まるスライバーで、簡単に吸着効果を実現できます。", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "PinnedHeaderSliver 公式サンプル", - "display": "new_page", - "desc": [ - "【child】 : 子コンポーネント 【Widget?】", - "PinnedHeaderSliver はスクロールビューポートでのみ使用でき、子コンポーネントはトップにスクロールしてもビューポートから出ず、ビューポート上部に留まります。" - ] - }, - { - "file": "node_02.dart", - "name": "タイトル吸着", - "display": "new_page", - "desc": [ - "PinnedHeaderSliver に基づいて実装されたタイトル吸着効果です。下の分割線にも吸着効果があることに注意してください。" - ] - }, - { - "file": "node_03.dart", - "name": "タイトル+検索吸着", - "display": "new_page", - "desc": [ - "PinnedHeaderSliver に基づいて実装されたタイトル+検索ボックスの吸着効果です。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ko_KR.json deleted file mode 100644 index 2b05b0221..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ko_KR.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "고정 헤더 슬라이버", - "info": "뷰포트 상단에 고정될 수 있는 슬라이버로, 쉽게 상단 고정 효과를 구현할 수 있습니다.", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "PinnedHeaderSliver 공식 예제", - "display": "new_page", - "desc": [ - "【child】 : 자식 위젯 【Widget?】", - "PinnedHeaderSliver는 스크롤 뷰포트에서만 사용할 수 있으며, 자식 위젯이 상단으로 스크롤될 때 뷰포트에서 벗어나지 않고 상단에 고정됩니다." - ] - }, - { - "file": "node_02.dart", - "name": "제목 상단 고정", - "display": "new_page", - "desc": [ - "PinnedHeaderSliver를 기반으로 구현한 제목 상단 고정 효과, 아래 구분선도 상단 고정 효과가 적용된 것을 확인할 수 있습니다." - ] - }, - { - "file": "node_03.dart", - "name": "제목+검색 상단 고정", - "display": "new_page", - "desc": [ - "PinnedHeaderSliver를 기반으로 구현한 제목과 검색창의 상단 고정 효과." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_pt_PT.json deleted file mode 100644 index 126b966fc..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_pt_PT.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "Cabeçalho Fixo Deslizante", - "info": "Um painel deslizante que pode permanecer na parte superior da viewport, facilitando o efeito de fixação no topo.", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Exemplo Oficial do PinnedHeaderSliver", - "display": "new_page", - "desc": [ - "【child】 : Componente filho 【Widget?】", - "O PinnedHeaderSliver só pode ser usado em viewports de rolagem, onde o componente filho não sai da viewport ao rolar para o topo, permanecendo assim na parte superior da viewport." - ] - }, - { - "file": "node_02.dart", - "name": "Título Fixo no Topo", - "display": "new_page", - "desc": [ - "Efeito de título fixo no topo baseado no PinnedHeaderSliver, observe que a linha divisória abaixo também tem o efeito de fixação no topo." - ] - }, - { - "file": "node_03.dart", - "name": "Título + Barra de Pesquisa Fixa no Topo", - "display": "new_page", - "desc": [ - "Efeito de título + barra de pesquisa fixa no topo baseado no PinnedHeaderSliver." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ru_RU.json deleted file mode 100644 index 00291bfaa..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ru_RU.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "Фиксированный верхний слайдер", - "info": "Слайдер, который может оставаться в верхней части окна просмотра, легко достигая эффекта прилипания к верху.", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Официальный пример PinnedHeaderSliver", - "display": "new_page", - "desc": [ - "【child】 : Дочерний компонент 【Widget?】", - "PinnedHeaderSliver может использоваться только в прокручиваемом окне просмотра, где дочерний компонент при прокрутке до верха не выходит из окна просмотра, а остается в его верхней части." - ] - }, - { - "file": "node_02.dart", - "name": "Прилипание заголовка к верху", - "display": "new_page", - "desc": [ - "Эффект прилипания заголовка к верху, реализованный на основе PinnedHeaderSliver. Обратите внимание, что разделительная линия внизу также имеет эффект прилипания к верху." - ] - }, - { - "file": "node_03.dart", - "name": "Прилипание заголовка и поиска к верху", - "display": "new_page", - "desc": [ - "Эффект прилипания заголовка и поля поиска к верху, реализованный на основе PinnedHeaderSliver." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_zh-CN.json deleted file mode 100644 index 86f2cae4e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_zh-CN.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "固定头部滑片", - "info": "一个可以停留在视口上部的滑片, 可轻松完成吸顶效果。", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "PinnedHeaderSliver 官方案例", - "display": "new_page", - "desc": [ - "【child】 : 子组件 【Widget?】", - "PinnedHeaderSliver 只能用在滚动视口中,其中子组件在滑动到顶部时,不会移出视口,从而会停留在视口上方。" - ] - }, - { - "file": "node_02.dart", - "name": "标题吸顶", - "display": "new_page", - "desc": [ - "基于 PinnedHeaderSliver 实现的标题吸顶效果,注意看下方的分隔线也有吸顶效果哦。" - ] - }, - { - "file": "node_03.dart", - "name": "标题+搜索吸顶", - "display": "new_page", - "desc": [ - "基于 PinnedHeaderSliver 实现的标题+搜索框的吸顶效果。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_01.dart b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_01.dart deleted file mode 100644 index ec0180625..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_01.dart +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - - - -class PinnedHeaderSliverNode1 extends StatefulWidget { - const PinnedHeaderSliverNode1({ super.key }); - - @override - State createState() => _PinnedHeaderSliverNode1State(); -} - -class _PinnedHeaderSliverNode1State extends State { - int count = 0; - late final ScrollController scrollController; - - @override - void initState() { - super.initState(); - scrollController = ScrollController(); - } - - @override - void dispose() { - scrollController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; - - final Widget header = Container( - color: colorScheme.surface, - padding: const EdgeInsets.all(4), - child: Material( - color: colorScheme.primaryContainer, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - side: BorderSide( - width: 7, - color: colorScheme.outline, - ), - ), - child: Container( - alignment: Alignment.center, - padding: const EdgeInsets.symmetric(vertical: 48), - child: Text( - count.isOdd ? 'Alternative Title\nWith Two Lines' : 'PinnedHeaderSliver', - style: theme.textTheme.headlineMedium!.copyWith( - color: colorScheme.onPrimaryContainer, - ), - ), - ), - ), - ); - - return Scaffold( - body: SafeArea( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 4), - child: - CustomScrollView( - controller: scrollController, - slivers: [ - PinnedHeaderSliver(child: header), - const _ItemList(), - ], - ), - ), - ), - floatingActionButton: FloatingActionButton( - onPressed: () { - setState(() { - count += 1; - }); - }, - child: const Icon(Icons.add), - ), - ); - } -} - -// A placeholder SliverList of 25 items. -class _ItemList extends StatelessWidget { - const _ItemList({ - super.key, - this.itemCount = 50, - }); - - final int itemCount; - - @override - Widget build(BuildContext context) { - final ColorScheme colorScheme = Theme.of(context).colorScheme; - return SliverList( - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) { - return Card( - color: colorScheme.onSecondary, - child: ListTile( - textColor: colorScheme.secondary, - title: Text('Item $index'), - ), - ); - }, - childCount: itemCount, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_02.dart b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_02.dart deleted file mode 100644 index a3c26c8a3..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_02.dart +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:ui'; - -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -class PinnedHeaderSliverNode2 extends StatefulWidget { - const PinnedHeaderSliverNode2({super.key}); - - @override - State createState() => _PinnedHeaderSliverNode2State(); -} - -class _PinnedHeaderSliverNode2State extends State { - int count = 0; - late final ScrollController scrollController; - - @override - void initState() { - super.initState(); - scrollController = ScrollController(); - } - - @override - void dispose() { - scrollController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; - return Scaffold( - backgroundColor: Colors.white, - body: - CustomScrollView( - controller: scrollController, - slivers: [ - _buildSliverBar(), - _buildTitleText(), - const PinnedHeaderSliver(child: Divider()), - const _ItemList(), - ], - ), - ); - } - - Widget _buildSliverBar() { - const Icon icon = Icon(CupertinoIcons.settings, color: Colors.blue); - const TextStyle style = TextStyle(fontSize: 16, fontWeight: FontWeight.bold); - const Text text = Text('Settings', style: style); - Widget action = IconButton(onPressed: () {}, icon: icon ); - return SliverLayoutBuilder(builder: (_, scs) { - double factor = (scs.scrollOffset / kToolbarHeight).clamp(0, 1); - factor = factor < 0.2 ? 0 : factor; - AppBar header = AppBar( - backgroundColor: Colors.white, - surfaceTintColor: Colors.transparent, - actions: [action], - centerTitle: true, - title: Opacity(opacity: factor, child: text), - ); - return PinnedHeaderSliver(child: header); - }); - } - - Widget _buildTitleText() { - const TextStyle style = TextStyle(fontSize: 20, fontWeight: FontWeight.bold); - const Text text = Text('Settings', style: style); - return const SliverToBoxAdapter( - child: Padding( - padding: EdgeInsets.only(left: 12.0, bottom: 8), - child: text, - ), - ); - } -} - -class _ItemList extends StatelessWidget { - const _ItemList({ - super.key, - this.itemCount = 50, - }); - - final int itemCount; - - @override - Widget build(BuildContext context) { - final ColorScheme colorScheme = Theme.of(context).colorScheme; - return SliverList( - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) { - return ListTile( - dense: true, - textColor: colorScheme.secondary, - title: Text('#$index title'), - subtitle: Text('Subtitle in line $index'), - ); - }, - childCount: itemCount, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_03.dart b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_03.dart deleted file mode 100644 index 6028b1f22..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_03.dart +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:ui'; - -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -class PinnedHeaderSliverNode3 extends StatefulWidget { - const PinnedHeaderSliverNode3({super.key}); - - @override - State createState() => _PinnedHeaderSliverNode3State(); -} - -class _PinnedHeaderSliverNode3State extends State { - int count = 0; - late final ScrollController scrollController; - - @override - void initState() { - super.initState(); - scrollController = ScrollController(); - } - - @override - void dispose() { - scrollController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; - - return Scaffold( - backgroundColor: Colors.white, - body: CustomScrollView( - controller: scrollController, - slivers: [ - _buildSliverBar(), - _buildTitleText(), - _buildSliverSearch(), - -// PinnedHeaderSliver(child: Padding( -// padding: const EdgeInsets.symmetric(horizontal: 12.0), -// child: TextField( -// decoration: InputDecoration( -// filled: true, -// fillColor: Colors.white, -// border: InputBorder.none -// ), -// ), -// )), - - const _ItemList(), - ], - ), - ); - } - - Widget _buildSliverBar() { - const Icon icon = Icon(CupertinoIcons.settings, color: Colors.blue); - const TextStyle style = TextStyle(fontSize: 16, fontWeight: FontWeight.bold); - const Text text = Text('Settings', style: style); - Widget action = IconButton(onPressed: () {}, icon: icon); - return SliverLayoutBuilder(builder: (_, scs) { - double factor = (scs.scrollOffset / kToolbarHeight).clamp(0, 1); - factor = factor < 0.2 ? 0 : factor; - AppBar header = AppBar( - backgroundColor: Colors.white, - surfaceTintColor: Colors.transparent, - actions: [action], - centerTitle: true, - title: Opacity(opacity: factor, child: text), - ); - return PinnedHeaderSliver(child: header); - }); - } - - Widget _buildTitleText() { - const TextStyle style = TextStyle(fontSize: 20, fontWeight: FontWeight.bold); - const Text text = Text('Settings', style: style); - return const SliverToBoxAdapter( - child: Padding( - padding: EdgeInsets.only(left: 12.0, bottom: 8), - child: text, - ), - ); - } - - Widget _buildSliverSearch() { - BoxDecoration decoration = BoxDecoration( - color: const Color(0xffefeff1), borderRadius: BorderRadius.circular(6)); - Widget prefix = const Padding( - padding: EdgeInsets.only(left: 8.0), - child: Icon(CupertinoIcons.search, size: 20, color: Color(0xff808082)) - ); - return PinnedHeaderSliver( - child: ColoredBox( - color: Colors.white, - child: Column( - children: [ - Padding( - padding: const EdgeInsets.only(bottom: 8.0, right: 12, left: 12), - child: CupertinoTextField( - readOnly: true, - placeholder: '搜索', - onTap: _toSearchPage, - decoration: decoration, - prefix:prefix, - style: const TextStyle(fontSize: 14), - placeholderStyle: const TextStyle(color: Color(0xff808082)), - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 8), - ), - ), - const Divider(), - ], - ), - )); - } - - void _toSearchPage() { - Navigator.of(context).push( - MaterialPageRoute(builder: (_) => Scaffold(appBar: AppBar(title: const Text('SearchPage')))), - ); - } -} - -// A placeholder SliverList of 25 items. -class _ItemList extends StatelessWidget { - const _ItemList({ - super.key, - this.itemCount = 50, - }); - - final int itemCount; - - @override - Widget build(BuildContext context) { - final ColorScheme colorScheme = Theme - .of(context) - .colorScheme; - return SliverList( - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) { - return ListTile( - dense: true, - textColor: colorScheme.secondary, - title: Text('#$index title'), - subtitle: Text('Subtitle in line $index'), - ); - }, - childCount: itemCount, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_de_DE.json deleted file mode 100644 index 3b1fdbf43..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Sliver animierte Liste", - "info": "Eine Sliver-Komponente, die beim Einfügen oder Entfernen von Elementen Animationseffekte erzeugt.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverAnimatedList", - "desc": [ - "【itemBuilder】 : Item-Konstruktor 【AnimatedListItemBuilder】", - "【initialItemCount】 : Anfangszahl der Items 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_en_US.json deleted file mode 100644 index aebb2f927..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Sliver Animated List", - "info": "A sliver component that animates items when they are inserted or removed.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverAnimatedList", - "desc": [ - "【itemBuilder】: Item builder 【AnimatedListItemBuilder】", - "【initialItemCount】: Initial item count 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_es_ES.json deleted file mode 100644 index d25e85a8a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Lista animada Sliver", - "info": "Componente sliver que anima los elementos al insertar o eliminar.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverAnimatedList", - "desc": [ - "【itemBuilder】: Constructor de elementos 【AnimatedListItemBuilder】", - "【initialItemCount】: Número inicial de elementos 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_fr_FR.json deleted file mode 100644 index 5286a69e5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Liste animée Sliver", - "info": "Un composant sliver qui anime les éléments lors de leur insertion ou suppression.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverAnimatedList", - "desc": [ - "【itemBuilder】 : constructeur d'item 【AnimatedListItemBuilder】", - "【initialItemCount】 : nombre initial d'items 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_it_IT.json deleted file mode 100644 index 10b79a1dc..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Lista animata Sliver", - "info": "Componente sliver che aggiunge effetti animati quando si inseriscono o rimuovono elementi.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverAnimatedList", - "desc": [ - "【itemBuilder】: costruttore di item 【AnimatedListItemBuilder】", - "【initialItemCount】: numero iniziale di item 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ja_JP.json deleted file mode 100644 index c161c7a02..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Sliverアニメーションリスト", - "info": "アイテムを挿入または削除する際にアニメーション効果を持つsliverコンポーネント。", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverAnimatedList基本使用", - "desc": [ - "【itemBuilder】 : アイテムビルダー 【AnimatedListItemBuilder】", - "【initialItemCount】 : 初期アイテム数 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ko_KR.json deleted file mode 100644 index 623980fdf..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Sliver 애니메이션 리스트", - "info": "항목을 삽입하거나 삭제할 때 애니메이션 효과를 주는 sliver 컴포넌트입니다.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverAnimatedList 기본 사용", - "desc": [ - "【itemBuilder】 : 아이템 생성기 【AnimatedListItemBuilder】", - "【initialItemCount】 : 초기 아이템 개수 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_pt_PT.json deleted file mode 100644 index f05bec086..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Lista Animada Sliver", - "info": "Componente sliver que anima itens ao inserir ou remover.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SliverAnimatedList", - "desc": [ - "【itemBuilder】: construtor de itens 【AnimatedListItemBuilder】", - "【initialItemCount】: número inicial de itens 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ru_RU.json deleted file mode 100644 index f18977292..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Анимированный список Sliver", - "info": "Компонент Sliver, который анимирует элементы при их вставке или удалении.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverAnimatedList", - "desc": [ - "【itemBuilder】: конструктор элемента 【AnimatedListItemBuilder】", - "【initialItemCount】: начальное количество элементов 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_zh-CN.json deleted file mode 100644 index 3e96db1ff..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Sliver动画列表", - "info": "在插入或删除项目时使其有动画效果的sliver组件。", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverAnimatedList基本使用", - "desc": [ - "【itemBuilder】 : item构造器 【AnimatedListItemBuilder】", - "【initialItemCount】 : 初始item个数 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/node1_base.dart deleted file mode 100644 index 033918cb3..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/node1_base.dart +++ /dev/null @@ -1,192 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class SliverAnimatedListDemo extends StatefulWidget { - const SliverAnimatedListDemo({Key? key}) : super(key: key); - - @override - _SliverAnimatedListDemoState createState() => - _SliverAnimatedListDemoState(); -} - -class _SliverAnimatedListDemoState extends State { - - final GlobalKey _listKey = GlobalKey(); - late ListModel _list; - int? _selectedItem; - int _nextItem=0; - - @override - void initState() { - super.initState(); - _list = ListModel( - listKey: _listKey, - initialItems: [0, 1, 2], - removedItemBuilder: _buildRemovedItem, - ); - _nextItem = 3; - } - - Widget _buildItem(BuildContext context, int index, Animation animation) { - return CardItem( - animation: animation, - item: _list[index], - selected: _selectedItem == _list[index], - onTap: () { - setState(() { - _selectedItem = _selectedItem == _list[index] ? null : _list[index]; - }); - }, - ); - } - - Widget _buildRemovedItem(int item, BuildContext context, Animation animation) { - return CardItem( - animation: animation, - item: item, - selected: false, - ); - } - - void _insert() { - final int index = _selectedItem == null ? _list.length : _list.indexOf(_selectedItem!); - _list.insert(index, _nextItem++); - } - - void _remove() { - if (_selectedItem != null) { - _list.removeAt(_list.indexOf(_selectedItem!)); - setState(() { - _selectedItem = null; - }); - } else { - if(_list.length>0){ - _list.removeAt(0); - setState(() { - _selectedItem = null; - }); - } - } - } - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - SliverAppBar( - title: const Text( - 'SliverAnimatedList', - style: TextStyle(fontSize: 20), - ), - expandedHeight: 60, - centerTitle: true, - leading: IconButton( - icon: const Icon(Icons.add_circle), - onPressed: _insert, - tooltip: '插入一个item', - iconSize: 32, - ), - actions: [ - IconButton( - icon: const Icon(Icons.remove_circle), - onPressed: _remove, - tooltip: '删除选中的item', - iconSize: 32, - ), - ], - ), - SliverAnimatedList( - key: _listKey, - initialItemCount: _list.length, - itemBuilder: _buildItem, - ), - ], - ), - ); - } - - -} - -class ListModel { - ListModel({ - required this.listKey, - required this.removedItemBuilder, - required Iterable? initialItems, - }) : assert(removedItemBuilder != null), - _items = List.from(initialItems ?? []); - final GlobalKey listKey; - final dynamic removedItemBuilder; - final List _items; - SliverAnimatedListState? get _animatedList => listKey.currentState; - void insert(int index, E item) { - _items.insert(index, item); - _animatedList?.insertItem(index); - } - E removeAt(int index) { - final E removedItem = _items.removeAt(index); - if (removedItem != null) { - _animatedList?.removeItem( - index, - (BuildContext context, Animation animation) => removedItemBuilder(removedItem, context, animation), - ); - } - return removedItem; - } - int get length => _items.length; - E operator [](int index) => _items[index]; - int indexOf(E item) => _items.indexOf(item); -} - - -class CardItem extends StatelessWidget { - const CardItem({ - Key? key, - required this.animation, - required this.item, - this.onTap, - this.selected = false, - }) :super(key: key); - final Animation animation; - final VoidCallback? onTap; - final int item; - final bool selected; - @override - Widget build(BuildContext context) { - return Padding( - padding: - const EdgeInsets.only( - left: 2.0, - right: 2.0, - top: 2.0, - bottom: 0.0, - ), - child: SizeTransition( - axis: Axis.vertical, - sizeFactor: animation, - child: GestureDetector( - onTap: onTap, - child: SizedBox( - height: 60.0, - child: Card( - color: selected - ? Colors.black12 - : Colors.primaries[item % Colors.primaries.length], - child: Center( - child: Text( - 'Item $item', - style: const TextStyle(color: Colors.white,fontSize: 16), - ), - ), - ), - ), - ), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_de_DE.json deleted file mode 100644 index ed587190f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_de_DE.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Sliver-Kopfleiste", - "info": "Die allgemeine Struktur der oberen Leiste der Sliver-Familie, die linke, mittlere und rechte Komponenten, Schrumpfraum, Schattentiefe, Festmodus, Hintergrundfarbe usw. angeben kann.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverAppBar", - "desc": [ - "【leading】 : Linke Komponente 【Widget】", - "【title】 : Mittlere Komponente 【Widget】", - "【actions】 : Liste der rechten Komponenten 【List】", - "【floating】 : Ob schwebend 【bool】", - "【pinned】 : Ob oben verbleibend 【bool】", - "【snap】 : Ob halb zusammengeklappt 【bool】", - "【bottom】 : Untere Komponente 【PreferredSizeWidget】", - "【expandedHeight】 : Erweiterungshöhe 【double】", - "【elevation】 : Schattentiefe 【double】", - "【flexibleSpace】 : Erweiterungsraum 【FlexibleSpaceBar】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【controller】 : Controller 【ScrollController】", - " Wenn snap true ist, muss floating true sein" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_en_US.json deleted file mode 100644 index d149c4ecd..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_en_US.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Sliver Header Bar", - "info": "A common structure for the top bar of the Sliver family, which can specify left, center, and right components, collapse space, shadow depth, fixed mode, background color, and other properties.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverAppBar", - "desc": [ - "【leading】: Left component 【Widget】", - "【title】: Center component 【Widget】", - "【actions】: List of trailing components 【List】", - "【floating】: Whether to float 【bool】", - "【pinned】: Whether to stay at the top 【bool】", - "【snap】: Whether to semi-collapse 【bool】", - "【bottom】: Bottom component 【PreferredSizeWidget】", - "【expandedHeight】: Expanded height 【double】", - "【elevation】: Shadow depth 【double】", - "【flexibleSpace】: Expanded space 【FlexibleSpaceBar】", - "【backgroundColor】: Background color 【Color】", - "【controller】: Controller 【ScrollController】", - " When snap is true, floating must be true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_es_ES.json deleted file mode 100644 index 561d9e08b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_es_ES.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Barra superior Sliver", - "info": "Estructura común de la barra superior de la familia Sliver, que puede especificar componentes izquierdos, centrales y derechos, espacio de contracción, profundidad de sombra, modo fijo, color de fondo, etc.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverAppBar", - "desc": [ - "【leading】 : Componente izquierdo 【Widget】", - "【title】 : Componente central 【Widget】", - "【actions】 : Lista de componentes finales 【List】", - "【floating】 : Si flota 【bool】", - "【pinned】 : Si se queda en la parte superior 【bool】", - "【snap】 : Si se contrae parcialmente 【bool】", - "【bottom】 : Componente inferior 【PreferredSizeWidget】", - "【expandedHeight】 : Altura extendida 【double】", - "【elevation】 : Profundidad de sombra 【double】", - "【flexibleSpace】 : Espacio extendido 【FlexibleSpaceBar】", - "【backgroundColor】 : Color de fondo 【Color】", - "【controller】 : Controlador 【ScrollController】", - " snap debe ser true cuando floating es true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_fr_FR.json deleted file mode 100644 index 875a641f1..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_fr_FR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Barre d'en-tête Sliver", - "info": "Structure générique de la barre supérieure de la famille Sliver, qui peut spécifier des composants gauche, centre et droit, un espace de rétrécissement, une profondeur d'ombre, un mode fixe, une couleur d'arrière-plan, etc.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverAppBar", - "desc": [ - "【leading】 : Composant gauche 【Widget】", - "【title】 : Composant central 【Widget】", - "【actions】 : Liste des composants de fin 【List】", - "【floating】 : Flottant ou non 【bool】", - "【pinned】 : Reste en haut ou non 【bool】", - "【snap】 : Semi-déployé ou non 【bool】", - "【bottom】 : Composant inférieur 【PreferredSizeWidget】", - "【expandedHeight】 : Hauteur étendue 【double】", - "【elevation】 : Profondeur d'ombre 【double】", - "【flexibleSpace】 : Espace étendu 【FlexibleSpaceBar】", - "【backgroundColor】 : Couleur d'arrière-plan 【Color】", - "【controller】 : Contrôleur 【ScrollController】", - " snap doit être true lorsque floating est true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_it_IT.json deleted file mode 100644 index 3e967d78a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_it_IT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Barra superiore Sliver", - "info": "Struttura generica della barra superiore della famiglia Sliver, che consente di specificare componenti sinistra, centro e destra, spazio di contrazione, profondità dell'ombra, modalità fissa, colore di sfondo e altre proprietà.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverAppBar", - "desc": [ - "【leading】 : Componente sinistro 【Widget】", - "【title】 : Componente centrale 【Widget】", - "【actions】 : Lista dei componenti finali 【List】", - "【floating】 : Se fluttuante 【bool】", - "【pinned】 : Se rimane in cima 【bool】", - "【snap】 : Se semi-collassato 【bool】", - "【bottom】 : Componente inferiore 【PreferredSizeWidget】", - "【expandedHeight】 : Altezza estesa 【double】", - "【elevation】 : Profondità dell'ombra 【double】", - "【flexibleSpace】 : Spazio esteso 【FlexibleSpaceBar】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【controller】 : Controller 【ScrollController】", - " Quando snap è true, floating deve essere true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ja_JP.json deleted file mode 100644 index 1ccc855ef..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ja_JP.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Sliverヘッダーバー", - "info": "Sliverファミリーのトップバー共通構造。左中右のコンポーネント、収縮スペース、影の深さ、固定モード、背景色などの属性を指定できます。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverAppBar基本使用", - "desc": [ - "【leading】 : 左側コンポーネント 【Widget】", - "【title】 : 中央コンポーネント 【Widget】", - "【actions】 : 末尾コンポーネントリスト 【List】", - "【floating】 : フローティングするか 【bool】", - "【pinned】 : トップに留まるか 【bool】", - "【snap】 : 半収展するか 【bool】", - "【bottom】 : 底部コンポーネント 【PreferredSizeWidget】", - "【expandedHeight】 : 拡張高さ 【double】", - "【elevation】 : 影の深さ 【double】", - "【flexibleSpace】 : 拡張スペース 【FlexibleSpaceBar】", - "【backgroundColor】 : 背景色 【Color】", - "【controller】 : コントローラー 【ScrollController】", - " snapがtrueの場合、floatingはtrueである必要があります" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ko_KR.json deleted file mode 100644 index 89628f4e8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ko_KR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Sliver 헤더 바", - "info": "Sliver 패밀리의 상단 바 공통 구조로, 좌중우 컴포넌트, 축소 공간, 그림자 깊이, 고정 모드, 배경색 등 속성을 지정할 수 있습니다.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverAppBar 기본 사용", - "desc": [ - "【leading】 : 왼쪽 컴포넌트 【Widget】", - "【title】 : 중앙 컴포넌트 【Widget】", - "【actions】 : 오른쪽 컴포넌트 리스트 【List】", - "【floating】 : 플로팅 여부 【bool】", - "【pinned】 : 상단 고정 여부 【bool】", - "【snap】 : 반 접힘 여부 【bool】", - "【bottom】 : 하단 컴포넌트 【PreferredSizeWidget】", - "【expandedHeight】 : 확장 높이 【double】", - "【elevation】 : 그림자 깊이 【double】", - "【flexibleSpace】 : 확장 공간 【FlexibleSpaceBar】", - "【backgroundColor】 : 배경색 【Color】", - "【controller】 : 컨트롤러 【ScrollController】", - " snap이 true일 경우 floating은 반드시 true여야 함" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_pt_PT.json deleted file mode 100644 index 7c2ce2225..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_pt_PT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Barra de Cabeçalho Sliver", - "info": "Estrutura comum da barra superior da família Sliver, pode especificar componentes esquerdo, central e direito, espaço de recolhimento, profundidade de sombra, modo fixo, cor de fundo, etc.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SliverAppBar", - "desc": [ - "【leading】 : Componente esquerdo 【Widget】", - "【title】 : Componente central 【Widget】", - "【actions】 : Lista de componentes da cauda 【List】", - "【floating】 : Se flutua 【bool】", - "【pinned】 : Se fica no topo 【bool】", - "【snap】 : Se recolhe parcialmente 【bool】", - "【bottom】 : Componente inferior 【PreferredSizeWidget】", - "【expandedHeight】 : Altura estendida 【double】", - "【elevation】 : Profundidade da sombra 【double】", - "【flexibleSpace】 : Espaço flexível 【FlexibleSpaceBar】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【controller】 : Controlador 【ScrollController】", - " Quando snap é true, floating deve ser true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ru_RU.json deleted file mode 100644 index 9cf0712a9..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ru_RU.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Sliver заголовок", - "info": "Общая структура верхней панели семейства Sliver, которая может указывать левый, центральный и правый компоненты, пространство сжатия, глубину тени, фиксированный режим, цвет фона и другие атрибуты.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverAppBar", - "desc": [ - "【leading】 : Левый компонент 【Widget】", - "【title】 : Центральный компонент 【Widget】", - "【actions】 : Список конечных компонентов 【List】", - "【floating】 : Плавающий ли 【bool】", - "【pinned】 : Остается ли наверху 【bool】", - "【snap】 : Полузакрытый ли 【bool】", - "【bottom】 : Нижний компонент 【PreferredSizeWidget】", - "【expandedHeight】 : Высота расширения 【double】", - "【elevation】 : Глубина тени 【double】", - "【flexibleSpace】 : Пространство расширения 【FlexibleSpaceBar】", - "【backgroundColor】 : Цвет фона 【Color】", - "【controller】 : Контроллер 【ScrollController】", - " snap true, необходимо floating true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_zh-CN.json deleted file mode 100644 index 04ea3ea57..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_zh-CN.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Sliver头部栏", - "info": "Sliver家族的顶部栏通用结构,可以指定左中右组件、收缩空间、影深、固定模式、背景色等属性。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverAppBar基本使用", - "desc": [ - "【leading】 : 左侧组件 【Widget】", - "【title】 : 中间组件 【Widget】", - "【actions】 : 尾部组件列表 【List】", - "【floating】 : 是否浮动 【bool】", - "【pinned】 : 是否顶部停留 【bool】", - "【snap】 : 是否半收展 【bool】", - "【bottom】 : 底部组件 【PreferredSizeWidget】", - "【expandedHeight】 : 延展高度 【double】", - "【elevation】 : 影深 【double】", - "【flexibleSpace】 : 延展空间 【FlexibleSpaceBar】", - "【backgroundColor】 : 背景色 【Color】", - "【controller】 : 控制器 【ScrollController】", - " snap为true时必需floating为true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/node1_base.dart deleted file mode 100644 index 12cff8d39..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/node1_base.dart +++ /dev/null @@ -1,155 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class SliverAppBarDemo extends StatefulWidget { - const SliverAppBarDemo({Key? key}) : super(key: key); - - @override - _SliverAppBarDemoState createState() => _SliverAppBarDemoState(); -} - -class _SliverAppBarDemoState extends State { - bool _floating = false; - bool _pinned = false; - bool _snap = false; - - final List data = [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildTool(), - SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - _buildSliverAppBar(), - _buildSliverFixedExtentList() - ], - ), - ), - ], - ); - } - - Widget _buildSliverAppBar() { - print(_floating); - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - floating: _floating, - pinned: _pinned, - snap: _snap, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar(//伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - Widget _buildSliverFixedExtentList() => SliverFixedExtentList( - itemExtent: 60, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - Widget _buildTool() { - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Wrap( - direction: Axis.vertical, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - const Text('floating'), - Switch( - value: _floating, - onChanged: (v) { - if(_snap&&!v){ - _snap =false; - } - setState(() => _floating = v); - }), - ], - ), - Wrap( - direction: Axis.vertical, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - const Text('pinned'), - Switch( - value: _pinned, - onChanged: (v) => setState(() => _pinned = v)), - ], - ) ,Wrap( - direction: Axis.vertical, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - const Text('snap'), - Switch( - value: _snap, - onChanged: (v) { - if(_floating){ - setState(() => _snap = v); - } - }), - ], - ) - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_de_DE.json deleted file mode 100644 index 713fe6189..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "Kreuzachsen-Größenbeschränkung für Sliver", - "info": "Legt die Größe für eine Sliver-Komponente in der Kreuzachsenrichtung fest, um die Größe des Slivers zu begrenzen.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Grundlegende Verwendung von SliverConstrainedCrossAxis", - "desc": [ - "【maxExtent】 : Größe 【double】", - "【sliver】 : Untergeordnete Komponente 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_en_US.json deleted file mode 100644 index bf34df040..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "Cross Axis Size Constrained Sliver", - "info": "Specifies the size in the cross-axis direction for a Sliver component to constrain the sliver size.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Basic Usage of SliverConstrainedCrossAxis", - "desc": [ - "【maxExtent】 : size 【double】", - "【sliver】 : child component 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_es_ES.json deleted file mode 100644 index d22b986c1..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "Restricción de tamaño en el eje cruzado para Sliver", - "info": "Especifica un tamaño en la dirección del eje cruzado para limitar el tamaño de un componente Sliver.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso básico de SliverConstrainedCrossAxis", - "desc": [ - "【maxExtent】 : tamaño 【double】", - "【sliver】 : componente hijo 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_fr_FR.json deleted file mode 100644 index 7888ed003..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "Contrainte de taille de l'axe transversal pour Sliver", - "info": "Spécifie une taille pour contraindre la dimension d'un composant Sliver dans la direction de l'axe transversal.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de base de SliverConstrainedCrossAxis", - "desc": [ - "【maxExtent】 : taille 【double】", - "【sliver】 : composant enfant 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_it_IT.json deleted file mode 100644 index 1d305ce8e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "Vincolo dimensionale dell'asse trasversale per Sliver", - "info": "Specifica una dimensione per limitare la dimensione di un componente Sliver nella direzione dell'asse trasversale.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso di base di SliverConstrainedCrossAxis", - "desc": [ - "【maxExtent】 : dimensione 【double】", - "【sliver】 : componente figlio 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ja_JP.json deleted file mode 100644 index 5557edd0c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "クロス軸サイズ制約スライバー", - "info": "Sliverコンポーネントに対して、クロス軸方向にサイズを指定してスライバーのサイズを制限します。", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverConstrainedCrossAxis 基本使用", - "desc": [ - "【maxExtent】 : サイズ 【double】", - "【sliver】 : 子コンポーネント 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ko_KR.json deleted file mode 100644 index 858179326..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "교차축 크기 제약 슬라이버", - "info": "Sliver 컴포넌트의 교차축 방향에서 크기를 지정하여 슬라이버 크기를 제한합니다.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverConstrainedCrossAxis 기본 사용", - "desc": [ - "【maxExtent】 : 크기 【double】", - "【sliver】 : 자식 컴포넌트 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_pt_PT.json deleted file mode 100644 index e6080d010..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "Folha de deslizamento com restrição de tamanho do eixo cruzado", - "info": "Especifica o tamanho na direção do eixo cruzado para limitar o tamanho da folha de deslizamento para um componente Sliver.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso básico de SliverConstrainedCrossAxis", - "desc": [ - "【maxExtent】 : Tamanho 【double】", - "【sliver】 : Componente filho 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ru_RU.json deleted file mode 100644 index 7029456c2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "Ограничение размера слайдера по поперечной оси", - "info": "Задает размер для компонента Sliver в направлении поперечной оси, чтобы ограничить размер слайдера.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Основное использование SliverConstrainedCrossAxis", - "desc": [ - "【maxExtent】 : размер 【double】", - "【sliver】 : дочерний компонент 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_zh-CN.json deleted file mode 100644 index 1e66edb0b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "交叉轴尺寸约束滑片", - "info": "为一个 Sliver 组件在交叉轴方向上,指定尺寸大小来限制滑片尺寸。", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverConstrainedCrossAxis 基本使用", - "desc": [ - "【maxExtent】 : 大小 【double】", - "【sliver】 : 子组件 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/node1.dart b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/node1.dart deleted file mode 100644 index b591d991b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/node1.dart +++ /dev/null @@ -1,86 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/8/18 -/// contact me by email 1981462002@qq.com - -class SliverConstrainedCrossAxisDemo extends StatelessWidget { - const SliverConstrainedCrossAxisDemo({super.key}); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - SliverCrossAxisGroup( - slivers: [ - SliverConstrainedCrossAxis( - maxExtent: 100, - sliver: _SliverColorList( - height: 100.0, - fontSize: 24, - count: 8, - color1: Colors.amber[300], - color2: Colors.blue[300], - ), - ), - SliverCrossAxisExpanded( - flex: 1, - sliver: _SliverColorList( - height: 80.0, - fontSize: 18, - count: 15, - color1: Colors.green[300], - color2: Colors.red[300], - ), - ), - SliverCrossAxisExpanded( - flex: 1, - sliver: _SliverColorList( - height: 50.0, - fontSize: 20, - count: 6, - color1: Colors.purple[300], - color2: Colors.orange[300], - )), - ], - ), - ], - ), - ); - } -} - -class _SliverColorList extends StatelessWidget { - final double height; - final double fontSize; - final Color? color1; - final Color? color2; - final int count; - const _SliverColorList( - {super.key, - required this.height, - required this.fontSize, - required this.count, - this.color1, - this.color2}); - - @override - Widget build(BuildContext context) { - return SliverList.builder( - itemBuilder: (BuildContext context, int index) { - return Container( - color: index.isEven ? color1 : color2, - height: height, - child: Center( - child: Text( - 'Item ${index}', - style: TextStyle(fontSize: fontSize), - ), - ), - ); - }, - itemCount: count, - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_de_DE.json deleted file mode 100644 index 7a6e31d6f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "Cross-Axis-Erweiterungsschieber", - "info": "Gibt für eine Sliver-Komponente in der Richtung der Querachse einen Flex-Anteil an, um die Größe des Schiebers zu begrenzen.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Grundlegende Verwendung von SliverCrossAxisExpanded", - "desc": [ - "【flex】 : Anteil 【int】", - "【sliver】 : Untergeordnete Komponente 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_en_US.json deleted file mode 100644 index 9bf13408d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "Cross Axis Expanded Sliver", - "info": "Specifies the flex ratio in the cross-axis direction for a Sliver component to constrain the size of the sliver.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Basic Usage of SliverCrossAxisExpanded", - "desc": [ - "【flex】: Ratio 【int】", - "【sliver】: Child Component 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_es_ES.json deleted file mode 100644 index 15f422ad8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "Deslizador Expandido en Eje Cruzado", - "info": "Para un componente Sliver, especifica la proporción flex en la dirección del eje cruzado para limitar el tamaño del deslizador.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso básico de SliverCrossAxisExpanded", - "desc": [ - "【flex】 : proporción 【int】", - "【sliver】 : componente hijo 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_fr_FR.json deleted file mode 100644 index d0a99dffb..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "Glissière d'expansion de l'axe croisé", - "info": "Pour un composant Sliver, spécifie la proportion de flex dans la direction de l'axe croisé pour limiter la taille de la glissière.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de base de SliverCrossAxisExpanded", - "desc": [ - "【flex】 : proportion 【int】", - "【sliver】 : composant enfant 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_it_IT.json deleted file mode 100644 index 0538e9fb8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "Cursore Espanso sull'Asse Incrociato", - "info": "Specifica la proporzione flex per limitare le dimensioni del cursore in direzione dell'asse incrociato per un componente Sliver.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso di base di SliverCrossAxisExpanded", - "desc": [ - "【flex】 : proporzione 【int】", - "【sliver】 : componente figlio 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ja_JP.json deleted file mode 100644 index b8ce18cd6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "クロス軸拡張スライバー", - "info": "スライバーコンポーネントのクロス軸方向に、flex比率を指定してスライバーのサイズを制限します。", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverCrossAxisExpanded 基本使用", - "desc": [ - "【flex】 : 比率 【int】", - "【sliver】 : 子コンポーネント 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ko_KR.json deleted file mode 100644 index 33dd18a18..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "교차축 확장 슬라이스", - "info": "Sliver 컴포넌트의 교차축 방향에서 flex 비율을 지정하여 슬라이스 크기를 제한합니다.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverCrossAxisExpanded 기본 사용", - "desc": [ - "【flex】 : 비율 【int】", - "【sliver】 : 하위 컴포넌트 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_pt_PT.json deleted file mode 100644 index 52a4b46cf..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "Slider de Expansão do Eixo Cruzado", - "info": "Para um componente Sliver, especifica a proporção flex na direção do eixo cruzado para limitar o tamanho do slider.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso Básico do SliverCrossAxisExpanded", - "desc": [ - "【flex】 : Proporção 【int】", - "【sliver】 : Componente Filho 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ru_RU.json deleted file mode 100644 index 5982223ea..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "Расширенный слайвер по поперечной оси", - "info": "Для компонента Sliver указывает долю flex в направлении поперечной оси, чтобы ограничить размер слайвера.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Основное использование SliverCrossAxisExpanded", - "desc": [ - "【flex】 : доля 【int】", - "【sliver】 : дочерний компонент 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_zh-CN.json deleted file mode 100644 index be048a2e6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "交叉轴延展滑片", - "info": "为一个 Sliver 组件在交叉轴方向上,指定 flex 占比来限制滑片尺寸。", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverCrossAxisExpanded 基本使用", - "desc": [ - "【flex】 : 占比 【int】", - "【sliver】 : 子组件 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/node1.dart b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/node1.dart deleted file mode 100644 index 419af803e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/node1.dart +++ /dev/null @@ -1,76 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/8/18 -/// contact me by email 1981462002@qq.com - -class SliverCrossAxisExpandedDemo extends StatelessWidget { - const SliverCrossAxisExpandedDemo({super.key}); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - SliverCrossAxisGroup( - slivers: [ - SliverCrossAxisExpanded( - flex: 1, - sliver: _SliverColorList( - height: 80.0, - fontSize: 18, - count: 15, - color1: Colors.green[300], - color2: Colors.red[300], - ), - ), - SliverCrossAxisExpanded( - flex: 1, - sliver: _SliverColorList( - height: 50.0, - fontSize: 20, - count: 6, - color1: Colors.purple[300], - color2: Colors.orange[300], - )), - ], - ), - ], - ), - ); - } -} - -class _SliverColorList extends StatelessWidget { - final double height; - final double fontSize; - final Color? color1; - final Color? color2; - final int count; - const _SliverColorList( - {super.key, - required this.height, - required this.fontSize, - required this.count, - this.color1, - this.color2}); - - @override - Widget build(BuildContext context) { - return SliverList.builder( - itemBuilder: (BuildContext context, int index) { - return Container( - color: index.isEven ? color1 : color2, - height: height, - child: Center( - child: Text( - 'Item ${index}', - style: TextStyle(fontSize: fontSize), - ), - ), - ); - }, - itemCount: count, - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_de_DE.json deleted file mode 100644 index c9882cb00..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "Kreuzachsen-Gruppe", - "info": "Kann mehrere Sliver-Komponenten aufnehmen und sie in der gleitenden Querhauptachse als Gruppe behandeln.", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Grundlegende Verwendung von SliverCrossAxisGroup", - "desc": [ - "【slivers】 : Liste der Unterkomponenten 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_en_US.json deleted file mode 100644 index 0a942bf2b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "Cross Axis Sliver Group", - "info": "Can contain multiple Sliver components, treating them as a group in the cross main axis direction of scrolling.", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Basic Usage of SliverCrossAxisGroup", - "desc": [ - "【slivers】 : List of child components 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_es_ES.json deleted file mode 100644 index 19cfce97c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "Grupo de deslizadores en eje cruzado", - "info": "Puede contener múltiples componentes Sliver, tratándolos como un grupo en la dirección del eje principal cruzado durante el desplazamiento.", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso básico de SliverCrossAxisGroup", - "desc": [ - "【slivers】 : Lista de componentes hijos 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_fr_FR.json deleted file mode 100644 index 7bb641370..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "Groupe de glissières d'axe croisé", - "info": "Peut contenir plusieurs composants Sliver, les traitant comme un groupe dans la direction de l'axe principal de défilement.", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de base de SliverCrossAxisGroup", - "desc": [ - "【slivers】 : Liste des composants enfants 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_it_IT.json deleted file mode 100644 index ae753b3e6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "Gruppo di scorrimento dell'asse trasversale", - "info": "Può contenere più componenti Sliver, considerandoli come un gruppo nella direzione dell'asse trasversale durante lo scorrimento.", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso di base di SliverCrossAxisGroup", - "desc": [ - "【slivers】 : Lista dei componenti figli 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ja_JP.json deleted file mode 100644 index 1d063bba8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "クロス軸スライドグループ", - "info": "複数のSliverコンポーネントを収容し、それらをスクロールのクロスメイン軸方向でグループとして扱うことができます。", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverCrossAxisGroup 基本使用", - "desc": [ - "【slivers】 : 子コンポーネントリスト 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ko_KR.json deleted file mode 100644 index 1c50ba546..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "교차축 슬라이더 그룹", - "info": "여러 개의 Sliver 컴포넌트를 수용할 수 있으며, 스크롤 교차 주축 방향에서 하나의 그룹으로 간주되도록 합니다.", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverCrossAxisGroup 기본 사용법", - "desc": [ - "【slivers】 : 자식 컴포넌트 목록 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_pt_PT.json deleted file mode 100644 index 576fa851e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "Grupo de Slides do Eixo Cruzado", - "info": "Pode acomodar vários componentes Sliver, tratando-os como um grupo na direção do eixo principal cruzado durante o deslizamento.", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso Básico do SliverCrossAxisGroup", - "desc": [ - "【slivers】 : Lista de componentes filhos 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ru_RU.json deleted file mode 100644 index 752077fb2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "Группа слайдов по поперечной оси", - "info": "Может содержать несколько компонентов Sliver, позволяя рассматривать их как группу в направлении главной оси скольжения.", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Основное использование SliverCrossAxisGroup", - "desc": [ - "【slivers】 : Список дочерних компонентов 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_zh-CN.json deleted file mode 100644 index a6d2cc9f7..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "交叉轴滑片组", - "info": "可以容纳多个 Sliver 组件,让它们在滑动的交叉主轴方向上视为一组。", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverCrossAxisGroup 基本使用", - "desc": [ - "【slivers】 : 子组件列表 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/node1.dart b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/node1.dart deleted file mode 100644 index 3533f0f66..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/node1.dart +++ /dev/null @@ -1,79 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/8/18 -/// contact me by email 1981462002@qq.com - -class SliverCrossAxisGroupDemo extends StatelessWidget { - const SliverCrossAxisGroupDemo({super.key}); - - @override - Widget build(BuildContext context) { - double width = MediaQuery.of(context).size.width; - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - SliverCrossAxisGroup( - slivers: [ - SliverConstrainedCrossAxis( - maxExtent: 100, - sliver: _SliverColorList( - height: 100.0, - fontSize: 24, - count: 8, - color1: Colors.amber[300], - color2: Colors.blue[300], - ), - ), - SliverConstrainedCrossAxis( - maxExtent: width - 100, - sliver: _SliverColorList( - height: 80.0, - fontSize: 18, - count: 15, - color1: Colors.green[300], - color2: Colors.red[300], - ), - ), - ], - ), - ], - ), - ); - - } -} - -class _SliverColorList extends StatelessWidget { - final double height; - final double fontSize; - final Color? color1; - final Color? color2; - final int count; - const _SliverColorList( - {super.key, - required this.height, - required this.fontSize, - required this.count, - this.color1, - this.color2}); - - @override - Widget build(BuildContext context) { - return SliverList.builder( - itemBuilder: (BuildContext context, int index) { - return Container( - color: index.isEven ? color1 : color2, - height: height, - child: Center( - child: Text( - 'Item ${index}', - style: TextStyle(fontSize: fontSize), - ), - ), - ); - }, - itemCount: count, - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_de_DE.json deleted file mode 100644 index 5c9d5f77c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver füllt den Rest", - "info": "Ein Sliver, das ein einzelnes Box-Kind enthält und den verbleibenden Platz im Viewport ausfüllt. Es können zwei boolesche Werte angegeben werden, um den Scroll-Effekt zu steuern, wie im folgenden Beispiel gezeigt, um es selbst zu erleben.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverFillRemaining", - "desc": [ - "【hasScrollBody】 : Ob es einen Scroll-Body hat 【bool】", - "【fillOverscroll】 : Ob der Scroll-Bereich gefüllt werden kann 【bool】", - "【child】 : Kindkomponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_en_US.json deleted file mode 100644 index 0b8149b34..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver Fill Remaining", - "info": "A sliver that contains a single box child element, which fills the remaining space in the viewport. Two boolean values can be specified to control the scrolling effect, as shown in the example below, experience it yourself.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverFillRemaining", - "desc": [ - "【hasScrollBody】: Whether it has a scroll body 【bool】", - "【fillOverscroll】: Whether it can fill the scroll area 【bool】", - "【child】: Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_es_ES.json deleted file mode 100644 index 871bd2035..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver llenar el espacio restante", - "info": "Un sliver que contiene un solo elemento hijo de tipo box, que llena el espacio restante en la ventana gráfica. Se pueden especificar dos valores booleanos para controlar el efecto de desplazamiento, como en el siguiente ejemplo, para que lo experimentes por ti mismo.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverFillRemaining", - "desc": [ - "【hasScrollBody】 : Si tiene un cuerpo de desplazamiento 【bool】", - "【fillOverscroll】 : Si se puede llenar el área de desplazamiento 【bool】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_fr_FR.json deleted file mode 100644 index 0601452fa..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver remplir le reste", - "info": "Un sliver qui contient un seul élément box, il remplit l'espace restant dans la fenêtre. Deux valeurs booléennes peuvent être spécifiées pour contrôler l'effet de défilement, comme dans l'exemple suivant, à expérimenter par vous-même.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverFillRemaining", - "desc": [ - "【hasScrollBody】 : Si le corps a un défilement 【bool】", - "【fillOverscroll】 : Si la zone de défilement peut être remplie 【bool】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_it_IT.json deleted file mode 100644 index 4d90f7450..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver riempie il rimanente", - "info": "Un sliver che contiene un singolo elemento figlio box, che riempie lo spazio rimanente nella finestra. È possibile specificare due valori bool per controllare l'effetto di scorrimento, come nell'esempio seguente, da provare personalmente.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverFillRemaining", - "desc": [ - "【hasScrollBody】 : Se ha un corpo di scorrimento 【bool】", - "【fillOverscroll】 : Se può riempire l'area di scorrimento 【bool】", - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ja_JP.json deleted file mode 100644 index 76b57533a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver残りを埋める", - "info": "ビューポート内の残りのスペースを埋める単一のbox子要素を含むsliverです。以下の例のように、スライド効果を制御するために2つのbool値を指定できます。自分で体験してください。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFillRemaining基本使用", - "desc": [ - "【hasScrollBody】 : スクロール本体を持つかどうか 【bool】", - "【fillOverscroll】 : スクロール領域を埋めることができるかどうか 【bool】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ko_KR.json deleted file mode 100644 index 22432e3e5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver 남은 공간 채우기", - "info": "단일 box 자식을 포함하는 sliver로, 뷰포트의 남은 공간을 채웁니다. 아래 예시와 같이 두 개의 bool 값을 지정하여 스크롤 효과를 제어할 수 있습니다. 직접 경험해 보세요.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFillRemaining 기본 사용법", - "desc": [ - "【hasScrollBody】 : 스크롤 본체 여부 【bool】", - "【fillOverscroll】 : 스크롤 영역 채우기 여부 【bool】", - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_pt_PT.json deleted file mode 100644 index e9c9a50e3..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver preencher restante", - "info": "Um sliver que contém um único elemento box, que preenche o espaço restante na janela de visualização. Dois valores bool podem ser especificados para controlar o efeito de deslizamento, como no exemplo a seguir, experimente você mesmo.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do SliverFillRemaining", - "desc": [ - "【hasScrollBody】 : Se tem um corpo de rolagem 【bool】", - "【fillOverscroll】 : Se pode preencher a área de rolagem 【bool】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ru_RU.json deleted file mode 100644 index 913a2816f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver заполняет оставшееся", - "info": "Sliver, содержащий один дочерний элемент box, который заполняет оставшееся пространство в окне просмотра. Можно указать два логических значения для управления эффектом прокрутки, как показано в следующем примере, попробуйте сами.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverFillRemaining", - "desc": [ - "【hasScrollBody】 : Имеет ли прокручиваемую основу 【bool】", - "【fillOverscroll】 : Можно ли заполнить область прокрутки 【bool】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_zh-CN.json deleted file mode 100644 index 19bbb6681..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver填补剩余", - "info": "一个包含单个box子元素的sliver,它填充了视窗中的剩余空间。可指定两个bool值控制滑动效果,如下示例,自己体会。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFillRemaining基本使用", - "desc": [ - "【hasScrollBody】 : 是否具有滚动主体 【bool】", - "【fillOverscroll】 : 是否可填充滚动区域 【bool】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/node1_base.dart deleted file mode 100644 index e3a0edf58..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/node1_base.dart +++ /dev/null @@ -1,150 +0,0 @@ -import 'dart:math'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class SliverFillRemainingDemo extends StatefulWidget { - const SliverFillRemainingDemo({Key? key}) : super(key: key); - - @override - _SliverFillRemainingDemoState createState() => - _SliverFillRemainingDemoState(); -} - -class _SliverFillRemainingDemoState extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - final Random r = Random(); - - bool hasScrollBody = false; - bool fillOverscroll = true; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - physics: const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()), - slivers: [ - _buildSliverAppBar(), - _buildSliverList(), - SliverFillRemaining( - hasScrollBody: hasScrollBody, - fillOverscroll: fillOverscroll, - child: Container( - decoration: const BoxDecoration( - image: DecorationImage( - fit: BoxFit.cover, - image: AssetImage("assets/images/sabar_bar.webp"))), - // // color: Colors.teal[100], - child: _buildBottomChild(), - ), - ), - ], - ), - ); - } - - Widget _buildBottomChild() => Align( - alignment: Alignment.bottomCenter, - child: Padding( - padding: const EdgeInsets.all(16.0), - child: Wrap( - spacing: 10, - children: [ - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - ), - onPressed: () { - setState(() { - hasScrollBody = !hasScrollBody; - }); - }, - child: Text('hasScrollBody:$hasScrollBody',style: const TextStyle(color: Colors.white),), - ), - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - ), - onPressed: () { - setState(() { - fillOverscroll = !fillOverscroll; - }); - }, - child: Text('fillOverscroll:$fillOverscroll',style: const TextStyle(color: Colors.white)), - ), - ], - ), - ), - ); - - Widget _buildSliverList() => SliverFixedExtentList( - itemExtent: 50, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 120.0, - leading: Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_de_DE.json deleted file mode 100644 index cd900f243..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Sliver-Füllansichtsliste", - "info": "Eine Listenkomponente der Sliver-Familie, die über einen Delegate Unterkomponenten erstellt. Die Höhe der Elemente füllt den Ansichtsbereich, und es kann angegeben werden, ob ein Bruchteil verwendet wird.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverFillViewport", - "desc": [ - "【viewportFraction】 : Ansichtsbruchteil 【double】", - "【delegate】 : Kind-Delegate 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_en_US.json deleted file mode 100644 index 70abeab97..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Sliver Fill Viewport", - "info": "A list component of the Sliver family, which constructs child components through a delegate. The height of the item will fill the viewport, and you can specify the fraction.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverFillViewport", - "desc": [ - "【viewportFraction】 : Viewport Fraction 【double】", - "【delegate】 : Child Delegate 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_es_ES.json deleted file mode 100644 index 99a48b3fe..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Lista de vista de relleno Sliver", - "info": "Componente de lista de la familia Sliver, construye subcomponentes a través de delegate, la altura del elemento llenará la ventana gráfica, se puede especificar si es una fracción.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverFillViewport", - "desc": [ - "【viewportFraction】 : Fracción de la ventana gráfica 【double】", - "【delegate】 : Delegado de hijos 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_fr_FR.json deleted file mode 100644 index 2b7683231..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Liste de vue de remplissage Sliver", - "info": "Composant de liste de la famille Sliver, qui construit des sous-composants via un délégué, la hauteur de l'élément remplira la vue, et il est possible de spécifier si la fraction est divisée.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverFillViewport", - "desc": [ - "【viewportFraction】 : Fraction de la vue 【double】", - "【delegate】 : Délégué des enfants 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_it_IT.json deleted file mode 100644 index b6e42baee..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Sliver riempie la vista", - "info": "Componente della lista della famiglia Sliver, costruisce i componenti figli tramite il delegate, l'altezza dell'elemento riempirà la vista, è possibile specificare la frazione.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverFillViewport", - "desc": [ - "【viewportFraction】 : Frazione della vista 【double】", - "【delegate】 : Delegato dei figli 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ja_JP.json deleted file mode 100644 index 8d2507f92..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Sliverビューポートを埋めるリスト", - "info": "Sliverファミリーのリストコンポーネントで、delegateを通じて子コンポーネントを構築し、アイテムの高さがビューポートを埋めます。分率を指定することもできます。", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFillViewportの基本使用", - "desc": [ - "【viewportFraction】 : ビューポート分率 【double】", - "【delegate】 : 子デリゲート 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ko_KR.json deleted file mode 100644 index fbeb3ab5e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Sliver 뷰포트 채우기", - "info": "Sliver 패밀리의 리스트 컴포넌트로, delegate를 통해 자식 컴포넌트를 구성하며, 아이템의 높이가 뷰포트를 채웁니다. 분율을 지정할 수 있습니다.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFillViewport 기본 사용법", - "desc": [ - "【viewportFraction】 : 뷰포트 분율 【double】", - "【delegate】 : 자식 대리자 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_pt_PT.json deleted file mode 100644 index a40a323aa..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Lista de visualização de preenchimento Sliver", - "info": "Componente de lista da família Sliver, que constrói subcomponentes através de um delegate. A altura do item preencherá a viewport, e pode-se especificar a fração de preenchimento.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do SliverFillViewport", - "desc": [ - "【viewportFraction】 : Fração da viewport 【double】", - "【delegate】 : Delegado dos filhos 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ru_RU.json deleted file mode 100644 index 934b45691..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Sliver заполнение списка представлений", - "info": "Компонент списка семейства Sliver, который создает дочерние компоненты через делегат, высота элемента заполняет видимую область, можно указать долю.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverFillViewport", - "desc": [ - "【viewportFraction】 : Доля видимой области 【double】", - "【delegate】 : Делегат дочерних элементов 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_zh-CN.json deleted file mode 100644 index f10797754..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Sliver填充视图列表", - "info": "Sliver家族的列表组件,通过delegate构造子组件,item的高度会填空视口,可以指定是否的分率。", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFillViewport基本使用", - "desc": [ - "【viewportFraction】 : 视口分率 【double】", - "【delegate】 : 孩子代理 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/node1_base.dart deleted file mode 100644 index f8ce2d42d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/node1_base.dart +++ /dev/null @@ -1,112 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class SliverFillViewportDemo extends StatefulWidget { - const SliverFillViewportDemo({Key? key}) : super(key: key); - - @override - _SliverFillViewportDemoState createState() => _SliverFillViewportDemoState(); -} - -class _SliverFillViewportDemoState extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - double _viewportFraction = 0.5; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildTool(), - SizedBox( - height: 300, - child: CustomScrollView( - slivers: [_buildSliverAppBar(), _buildSliverList()], - ), - ), - ], - ); - } - - Widget _buildSliverList() => SliverFillViewport( - viewportFraction: _viewportFraction, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - _buildTool() { - return Slider( - value: _viewportFraction, - min: 0.01, - divisions: 20, - label: _viewportFraction.toStringAsFixed(1), - max: 2.0, - onChanged: (v) => setState(() => _viewportFraction = v)); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_de_DE.json deleted file mode 100644 index 229d8972b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Sliver feste erweiterte Liste", - "info": "Eine Listenkomponente der Sliver-Familie, die über einen Delegate Unterkomponenten konstruiert und die Höhe der Elemente festlegen kann. Wird häufig in CustomScrollView verwendet.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverFixedExtentList", - "desc": [ - "【itemExtent】 : Erzwungene Länge in Hauptachsenrichtung 【double】", - "【delegate】 : Kinderdelegat 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_en_US.json deleted file mode 100644 index 157222576..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Sliver Fixed Extent List", - "info": "A list component of the Sliver family, which constructs child components through a delegate and can specify the height of the item. It is commonly used in CustomScrollView.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverFixedExtentList", - "desc": [ - "【itemExtent】: Forced length in the main axis 【double】", - "【delegate】: Child delegate 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_es_ES.json deleted file mode 100644 index cefbb2aff..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Lista de extensión fija de Sliver", - "info": "Componente de lista de la familia Sliver, que construye subcomponentes a través de un delegado y puede especificar la altura de los elementos. Normalmente se utiliza en CustomScrollView.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverFixedExtentList", - "desc": [ - "【itemExtent】 : Longitud forzada en la dirección del eje principal 【double】", - "【delegate】 : Delegado de hijos 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_fr_FR.json deleted file mode 100644 index 35b9e914f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Liste d'extension fixe Sliver", - "info": "Composant de liste de la famille Sliver, qui construit les sous-composants via un délégué et permet de spécifier la hauteur des éléments. Généralement utilisé dans CustomScrollView.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverFixedExtentList", - "desc": [ - "【itemExtent】 : Longueur forcée dans la direction principale 【double】", - "【delegate】 : Délégué des enfants 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_it_IT.json deleted file mode 100644 index 655ceb5af..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Lista estensibile fissa Sliver", - "info": "Componente della lista della famiglia Sliver, che costruisce i componenti figli tramite il delegate, consente di specificare l'altezza dell'elemento. Solitamente utilizzato in CustomScrollView.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverFixedExtentList", - "desc": [ - "【itemExtent】 : Lunghezza forzata nella direzione dell'asse principale 【double】", - "【delegate】 : Delegato dei figli 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ja_JP.json deleted file mode 100644 index 430e43830..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Sliver固定延展リスト", - "info": "Sliverファミリーのリストコンポーネントで、delegateを使用して子コンポーネントを構築し、アイテムの高さを指定できます。通常、CustomScrollViewで使用されます。", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFixedExtentList基本使用", - "desc": [ - "【itemExtent】 : 主軸方向の強制長さ 【double】", - "【delegate】 : 子要素の代理 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ko_KR.json deleted file mode 100644 index a2579c185..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Sliver 고정 확장 리스트", - "info": "Sliver 패밀리의 리스트 컴포넌트로, delegate를 통해 자식 컴포넌트를 구성하고, 아이템의 높이를 지정할 수 있습니다. 일반적으로 CustomScrollView에서 사용됩니다.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFixedExtentList 기본 사용", - "desc": [ - "【itemExtent】 : 주축 방향 강제 길이 【double】", - "【delegate】 : 자식 대리자 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_pt_PT.json deleted file mode 100644 index 21fa98fd1..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Lista de Extensão Fixa Sliver", - "info": "Componente de lista da família Sliver, que constrói subcomponentes através de um delegate, permitindo especificar a altura do item. Geralmente usado em CustomScrollView.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SliverFixedExtentList", - "desc": [ - "【itemExtent】 : Comprimento forçado na direção do eixo principal 【double】", - "【delegate】 : Delegate dos filhos 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ru_RU.json deleted file mode 100644 index b2e677eb5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Sliver фиксированный расширяемый список", - "info": "Компонент списка семейства Sliver, который создает дочерние компоненты через делегат и позволяет указать высоту элемента. Обычно используется в CustomScrollView.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverFixedExtentList", - "desc": [ - "【itemExtent】 : Принудительная длина по главной оси 【double】", - "【delegate】 : Делегат дочерних элементов 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_zh-CN.json deleted file mode 100644 index cc974701a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Sliver固定延展列表", - "info": "Sliver家族的列表组件,通过delegate构造子组件,可以指定item的高度。通常用于CustomScrollView中。", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFixedExtentList基本使用", - "desc": [ - "【itemExtent】 : 主轴方向强迫长度 【double】", - "【delegate】 : 孩子代理 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/node1_base.dart deleted file mode 100644 index 11efccb23..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/node1_base.dart +++ /dev/null @@ -1,96 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class SliverFixedExtentListDemo extends StatefulWidget { - const SliverFixedExtentListDemo({Key? key}) : super(key: key); - - @override - _SliverFixedExtentListDemoState createState() => _SliverFixedExtentListDemoState(); -} - -class _SliverFixedExtentListDemoState extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [_buildSliverAppBar(), _buildSliverList()], - ), - ); - } - - Widget _buildSliverList() => SliverFixedExtentList( - itemExtent: 50, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_de_DE.json deleted file mode 100644 index af3048152..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Sliver-Gitter", - "info": "Ein Gitterlisten-Widget der Sliver-Familie, ähnlich wie GirdView, das durch count und extent konstruiert wird. Wird normalerweise in CustomScrollView verwendet.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverList", - "desc": [ - "SliverGrid.count Konstruktion mit spezifizierter axialer Anzahl", - "SliverGrid.extent Konstruktion mit spezifizierter axialer Länge", - "Attributeigenschaften sind ähnlich wie bei GridView, siehe dazu" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_en_US.json deleted file mode 100644 index 89980569a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Sliver Grid", - "info": "A grid list component of the Sliver family, similar to GridView, constructed with count and extent. Usually used in CustomScrollView.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverList", - "desc": [ - "SliverGrid.count constructs with specified axial count", - "SliverGrid.extent constructs with specified axial length", - "The attribute characteristics are the same as GridView, see it for details" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_es_ES.json deleted file mode 100644 index f0ccd1a73..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Cuadrícula Sliver", - "info": "Componente de lista de cuadrícula de la familia Sliver, similar a GirdView, construido a través de count y extent. Normalmente se utiliza en CustomScrollView.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverList", - "desc": [ - "SliverGrid.count construye especificando la cantidad axial", - "SliverGrid.extent construye especificando la longitud axial", - "Las características de los atributos son las mismas que GridView, se pueden ver en detalle" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_fr_FR.json deleted file mode 100644 index feac18d1b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Grille Sliver", - "info": "Composant de liste de grille de la famille Sliver, similaire à GirdView, construit via count et extent. Généralement utilisé dans CustomScrollView.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverList", - "desc": [ - "SliverGrid.count construction avec un nombre spécifié dans l'axe", - "SliverGrid.extent construction avec une longueur spécifiée dans l'axe", - "Les caractéristiques des propriétés sont similaires à GridView, voir les détails" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_it_IT.json deleted file mode 100644 index 1fa0db2f8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Griglia Sliver", - "info": "Componente della lista a griglia della famiglia Sliver, simile a GirdView, costruito tramite count e extent. Solitamente utilizzato in CustomScrollView.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverList", - "desc": [ - "SliverGrid.count costruisce specificando il numero di assi", - "SliverGrid.extent costruisce specificando la lunghezza dell'asse", - "Le caratteristiche degli attributi sono le stesse di GridView, si può fare riferimento a quello per i dettagli" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ja_JP.json deleted file mode 100644 index f453572b3..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Sliverグリッド", - "info": "Sliverファミリーのグリッドリストコンポーネントで、GirdViewと類似しており、countとextentで構築されます。通常はCustomScrollViewで使用されます。", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverListの基本的な使用", - "desc": [ - "SliverGrid.count 軸方向の数を指定して構築", - "SliverGrid.extent 軸方向の長さを指定して構築", - "属性特性はGridViewと同じで、詳細はそちらを参照してください" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ko_KR.json deleted file mode 100644 index 9495f1c04..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Sliver 그리드", - "info": "Sliver 패밀리의 그리드 리스트 컴포넌트로, GirdView와 유사하며 count와 extent로 구성됩니다. 주로 CustomScrollView에서 사용됩니다.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverList 기본 사용", - "desc": [ - "SliverGrid.count는 축 방향 수량으로 구성", - "SliverGrid.extent는 축 방향 길이로 구성", - "속성 특성은 GridView와 동일하며, 자세한 내용은 해당 문서 참조" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_pt_PT.json deleted file mode 100644 index 68b0edae6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Grelha Sliver", - "info": "Componente de lista de grelha da família Sliver, semelhante ao GirdView, construído através de count e extent. Geralmente usado em CustomScrollView.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverList", - "desc": [ - "SliverGrid.count especifica a construção do número axial", - "SliverGrid.extent especifica a construção do comprimento axial", - "As características dos atributos são semelhantes ao GridView, consulte para mais detalhes" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ru_RU.json deleted file mode 100644 index 9bb25afd9..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Sliver сетка", - "info": "Компонент списка сетки семейства Sliver, аналогичный GirdView, создается с помощью count и extent. Обычно используется в CustomScrollView.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverList", - "desc": [ - "SliverGrid.count создается с указанием количества по оси", - "SliverGrid.extent создается с указанием длины по оси", - "Характеристики атрибутов такие же, как у GridView, подробности см. в нем" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_zh-CN.json deleted file mode 100644 index 0a409789d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Sliver网格", - "info": "Sliver家族的网格列表组件,和GirdView类似,通过count和extent构造。通常用于CustomScrollView中。", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverList基本使用", - "desc": [ - "SliverGrid.count 指定轴向数量构造", - "SliverGrid.extent 指定轴向长度构造", - "属性特征同GridView,可详见之" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverGrid/node1_base.dart deleted file mode 100644 index eef958f66..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/node1_base.dart +++ /dev/null @@ -1,82 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class SliverGirdDemo extends StatelessWidget { - const SliverGirdDemo({super.key}); - - List get data => List.generate(128, (i) => Color(0xFF6600FF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [_buildSliverAppBar(), _buildSliverList()], - ), - ); - } - - Widget _buildSliverList() => SliverGrid.extent( - childAspectRatio: 1 / 0.618, - maxCrossAxisExtent: 180, - crossAxisSpacing: 5, - mainAxisSpacing: 5, - children: data - .map((e) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: e, - child: Text( - colorString(e), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - )) - .toList(), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_de_DE.json deleted file mode 100644 index 27f63ad39..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver ignorieren Ereignisse", - "info": "Kann ein Sliver-Widget umhüllen und durch ignoring steuern, ob dieses Sliver-Widget auf Ereignisse reagieren kann.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverIgnorePointer", - "desc": [ - "【sliver】: Sliver-Widget 【Widget】", - "【ignoring】: Ereignisse ignorieren 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_en_US.json deleted file mode 100644 index ca7fcfdba..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver Ignore Events", - "info": "Can wrap a sliver component, and control whether the sliver component can respond to events through ignoring.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverIgnorePointer", - "desc": [ - "【sliver】: sliver component 【Widget】", - "【ignoring】: whether to ignore events 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_es_ES.json deleted file mode 100644 index f838f0f7b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver ignorar eventos", - "info": "Puede envolver un componente sliver, y controlar si este componente sliver puede responder a eventos a través de ignoring.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverIgnorePointer", - "desc": [ - "【sliver】: componente sliver 【Widget】", - "【ignoring】: si se ignoran los eventos 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_fr_FR.json deleted file mode 100644 index 5e97cdb64..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver Ignorer les Événements", - "info": "Peut envelopper un composant sliver, en contrôlant via 'ignoring' si ce composant sliver peut répondre aux événements.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverIgnorePointer", - "desc": [ - "【sliver】 : composant sliver 【Widget】", - "【ignoring】 : ignorer les événements 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_it_IT.json deleted file mode 100644 index a66bb9ddb..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver ignora eventi", - "info": "Può avvolgere un componente sliver, controllando se il componente sliver può rispondere agli eventi tramite ignoring.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverIgnorePointer", - "desc": [ - "【sliver】: componente sliver 【Widget】", - "【ignoring】: ignora eventi 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ja_JP.json deleted file mode 100644 index be0974556..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliverイベント無視", - "info": "sliverコンポーネントをラップし、ignoringを使用してそのsliverコンポーネントがイベントに応答するかどうかを制御できます。", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverIgnorePointerの基本使用", - "desc": [ - "【sliver】 : sliverコンポーネント 【Widget】", - "【ignoring】 : イベントを無視するかどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ko_KR.json deleted file mode 100644 index 44933a44e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver 이벤트 무시", - "info": "sliver 컴포넌트를 감싸고, ignoring을 통해 해당 sliver 컴포넌트가 이벤트에 반응할지 여부를 제어할 수 있습니다.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverIgnorePointer 기본 사용", - "desc": [ - "【sliver】 : sliver 컴포넌트 【Widget】", - "【ignoring】 : 이벤트 무시 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_pt_PT.json deleted file mode 100644 index 8aba19ebe..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver Ignorar Eventos", - "info": "Pode envolver um componente sliver, controlando através de ignoring se este componente sliver pode responder a eventos.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SliverIgnorePointer", - "desc": [ - "【sliver】: componente sliver 【Widget】", - "【ignoring】: ignorar eventos 【bool】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ru_RU.json deleted file mode 100644 index cbe4f7b47..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver игнорировать события", - "info": "Может обернуть sliver-компонент, и с помощью ignoring контролировать, может ли этот sliver-компонент реагировать на события.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverIgnorePointer", - "desc": [ - "【sliver】 : sliver-компонент 【Widget】", - "【ignoring】 : игнорировать ли события 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_zh-CN.json deleted file mode 100644 index b3273228a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver忽略事件", - "info": "可以包裹一个sliver组件,通过ignoring来控制该sliver组件是否可以响应事件。", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverIgnorePointer基本使用", - "desc": [ - "【sliver】 : sliver组件 【Widget】", - "【ignoring】 : 是否忽略事件 【bool】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/node1_base.dart deleted file mode 100644 index 28123a777..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/node1_base.dart +++ /dev/null @@ -1,151 +0,0 @@ -import 'dart:math'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class SliverIgnorePointerDemo extends StatefulWidget { - const SliverIgnorePointerDemo({Key? key}) : super(key: key); - - @override - _SliverIgnorePointerDemoState createState() => - _SliverIgnorePointerDemoState(); -} - -class _SliverIgnorePointerDemoState extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - final Random r = Random(); - bool hasScrollBody = false; - bool fillOverscroll = true; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - physics: const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()), - slivers: [ - _buildSliverAppBar(), - _buildSliverList(), - SliverIgnorePointer( - ignoring: true, - sliver: SliverFillRemaining( - hasScrollBody: hasScrollBody, - fillOverscroll: fillOverscroll, - child: Container( - decoration: const BoxDecoration( - image: DecorationImage( - fit: BoxFit.cover, - image: AssetImage("assets/images/sabar_bar.webp"))), - // // color: Colors.teal[100], - child: _buildBottomChild(), - ), - ), - ), - ], - ), - ); - } - - Widget _buildBottomChild() => Align( - alignment: Alignment.bottomCenter, - child: Padding( - padding: const EdgeInsets.all(16.0), - child: Wrap( - spacing: 10, - children: [ - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - ), - onPressed: () { - setState(() { - hasScrollBody = !hasScrollBody; - }); - }, - child: Text('hasScrollBody:$hasScrollBody',style: const TextStyle(color: Colors.white),), - ), - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - ), - onPressed: () { - setState(() { - fillOverscroll = !fillOverscroll; - }); - }, - child: Text('fillOverscroll:$fillOverscroll',style: const TextStyle(color: Colors.white)), - ), - ], - ), - ), - ); - - Widget _buildSliverList() => SliverFixedExtentList( - itemExtent: 50, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 120.0, - leading: Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_de_DE.json deleted file mode 100644 index 77965bcf6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Sliver-Layout-Builder", - "info": "Ein Mitglied der Sliver-Familie, das während des Scrollvorgangs durch das zurückgegebene SliverConstraints-Objekt die Konstruktion von Unterkomponenten ermöglicht.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverLayoutBuilder", - "desc": [ - "【builder】 : Komponentenkonstruktor 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_en_US.json deleted file mode 100644 index 92c87ab49..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Sliver Layout Builder", - "info": "A member of the Sliver family, which allows the construction of child components through the SliverConstraints object during the scrolling process.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverLayoutBuilder", - "desc": [ - "【builder】: Component Builder 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_es_ES.json deleted file mode 100644 index 9983b1ea1..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Constructor de diseño Sliver", - "info": "Miembro de la familia Sliver, que permite la construcción de componentes secundarios a través del objeto SliverConstraints devuelto durante el desplazamiento.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverLayoutBuilder", - "desc": [ - "【builder】: Constructor de componentes 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_fr_FR.json deleted file mode 100644 index eca65d512..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Constructeur de mise en page Sliver", - "info": "Membre de la famille Sliver, il permet de construire des composants enfants via l'objet SliverConstraints rappelé pendant le défilement.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverLayoutBuilder", - "desc": [ - "【builder】 : Constructeur de composant 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_it_IT.json deleted file mode 100644 index a2d547f6d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Costruttore di layout Sliver", - "info": "Membro della famiglia Sliver, durante lo scorrimento è possibile costruire i componenti figli utilizzando l'oggetto SliverConstraints restituito dalla callback.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverLayoutBuilder", - "desc": [ - "【builder】 : Costruttore di componenti 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ja_JP.json deleted file mode 100644 index 26a99a1fa..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Sliverレイアウトビルダー", - "info": "Sliverファミリーの一員で、スライド中にコールバックされるSliverConstraintsオブジェクトを使用して子コンポーネントを構築できます。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverLayoutBuilderの基本使用", - "desc": [ - "【builder】 : コンポーネントビルダー 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ko_KR.json deleted file mode 100644 index 84a48d73c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Sliver 레이아웃 빌더", - "info": "Sliver 패밀리의 일원으로, 스크롤 중에 콜백된 SliverConstraints 객체를 통해 하위 컴포넌트를 구성할 수 있습니다.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverLayoutBuilder 기본 사용", - "desc": [ - "【builder】 : 컴포넌트 빌더 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_pt_PT.json deleted file mode 100644 index 46c083b23..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Construtor de Layout Sliver", - "info": "Membro da família Sliver, que permite a construção de componentes filhos através do objeto SliverConstraints retornado durante o deslizamento.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do SliverLayoutBuilder", - "desc": [ - "【builder】 : Construtor de componentes 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ru_RU.json deleted file mode 100644 index 0daadcdd5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Конструктор макета Sliver", - "info": "Член семейства Sliver, который позволяет создавать дочерние компоненты через объект SliverConstraints, возвращаемый в процессе прокрутки.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverLayoutBuilder", - "desc": [ - "【builder】 : Конструктор компонентов 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_zh-CN.json deleted file mode 100644 index 4e8ad40a2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Sliver布局构造器", - "info": "Sliver家族一员,在滑动过程中可以通过回调出的 SliverConstraints 对象进行子组件的构造。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverLayoutBuilder基本使用", - "desc": [ - "【builder】 : 组件构造器 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/node1_base.dart deleted file mode 100644 index 88ec65aa6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/node1_base.dart +++ /dev/null @@ -1,117 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; - - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class SliverLayoutBuilderDemo extends StatefulWidget { - const SliverLayoutBuilderDemo({Key? key}) : super(key: key); - - @override - _SliverLayoutBuilderDemoState createState() => - _SliverLayoutBuilderDemoState(); -} - -class _SliverLayoutBuilderDemoState extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - physics: const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()), - slivers: [ - _buildSliverAppBar(), - SliverLayoutBuilder( - builder: _buildSliver, - ), - _buildSliverList(), - ], - ), - ); - } - - Widget _buildSliverList() => SliverFixedExtentList( - itemExtent: 50, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 120.0, - leading: Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - Widget _buildSliver(BuildContext context, SliverConstraints constraints) { - return SliverToBoxAdapter( - child: Container( - alignment: Alignment.center, - height: constraints.remainingPaintExtent / 3, - color: Colors.red, - child: const Text( - "SliverLayoutBuilder", - style: TextStyle(color: Colors.white, fontSize: 20), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_de_DE.json deleted file mode 100644 index e55576cb8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Sliver-Liste", - "info": "Eine Listenkomponente der Sliver-Familie, die durch die Angabe eines Delegaten Unterkomponenten erstellt. Wird normalerweise in CustomScrollView verwendet.", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverList", - "desc": [ - "【delegate】 : Kinderdelegierter 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_en_US.json deleted file mode 100644 index 74c968487..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Sliver List", - "info": "A list component of the Sliver family, which constructs child components by specifying a delegate. It is commonly used in CustomScrollView.", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverList", - "desc": [ - "【delegate】: Child delegate 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_es_ES.json deleted file mode 100644 index 4be4dda9c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Lista Sliver", - "info": "Componente de lista de la familia Sliver, que construye subcomponentes especificando un delegate. Normalmente se utiliza en CustomScrollView.", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverList", - "desc": [ - "【delegate】 : Delegado de hijos 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_fr_FR.json deleted file mode 100644 index 81be999c3..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Liste Sliver", - "info": "Composant de liste de la famille Sliver, qui construit des sous-composants en spécifiant un délégué. Généralement utilisé dans CustomScrollView.", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverList", - "desc": [ - "【delegate】 : délégué des enfants 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_it_IT.json deleted file mode 100644 index d5cda55ea..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Lista Sliver", - "info": "Componente lista della famiglia Sliver, che costruisce i componenti figli specificando un delegate. Comunemente utilizzato in CustomScrollView.", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverList", - "desc": [ - "【delegate】 : delegato dei figli 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ja_JP.json deleted file mode 100644 index 952207b9a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Sliverリスト", - "info": "Sliverファミリーのリストコンポーネントで、delegateを指定して子コンポーネントを構築します。通常、CustomScrollViewで使用されます。", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverListの基本使用", - "desc": [ - "【delegate】 : 子デリゲート 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ko_KR.json deleted file mode 100644 index ab539a54b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Sliver 리스트", - "info": "Sliver 패밀리의 리스트 컴포넌트로, delegate를 지정하여 자식 컴포넌트를 구성합니다. 주로 CustomScrollView에서 사용됩니다.", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverList 기본 사용", - "desc": [ - "【delegate】 : 자식 대리 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_pt_PT.json deleted file mode 100644 index e5dbe650e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Lista Sliver", - "info": "Componente de lista da família Sliver, que constrói subcomponentes especificando um delegate. Normalmente usado em CustomScrollView.", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do SliverList", - "desc": [ - "【delegate】 : Delegado de filhos 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ru_RU.json deleted file mode 100644 index 0aed51200..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Список Sliver", - "info": "Компонент списка семейства Sliver, который создает дочерние элементы через указанный делегат. Обычно используется в CustomScrollView.", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverList", - "desc": [ - "【delegate】 : Дочерний делегат 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_zh-CN.json deleted file mode 100644 index 6b776f337..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Sliver列表", - "info": "Sliver家族的列表组件,通过指定delegate构造子组件。通常用于CustomScrollView中。", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverList基本使用", - "desc": [ - "【delegate】 : 孩子代理 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverList/node1_base.dart deleted file mode 100644 index ea903dca2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/node1_base.dart +++ /dev/null @@ -1,89 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class SliverListDemo extends StatelessWidget { - const SliverListDemo({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [_buildSliverAppBar(), _buildSliverList()], - ), - ); - } - - Widget _buildSliverList() => SliverList( - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_de_DE.json deleted file mode 100644 index b7417fa72..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "Hauptachsen-Sliver-Gruppe", - "info": "Kann mehrere Sliver-Komponenten aufnehmen, die in der gleitenden Hauptachsenrichtung als Gruppe behandelt werden.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Grundlegende Verwendung von SliverMainAxisGroup", - "desc": [ - "【slivers】 : Liste der Unterkomponenten 【List】", - "Kann mit SliverPersistentHeader kombiniert werden, um Gruppierungen und den Effekt von fixierten Überschriften zu erzielen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_en_US.json deleted file mode 100644 index 8478aa50b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "Main Axis Sliver Group", - "info": "Can accommodate multiple Sliver components, treating them as a group in the sliding main axis direction.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Basic Usage of SliverMainAxisGroup", - "desc": [ - "【slivers】: List of child components 【List】", - "Can be combined with SliverPersistentHeader to achieve grouping and sticky header effects." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_es_ES.json deleted file mode 100644 index 8665856fa..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "Grupo de deslizamiento del eje principal", - "info": "Puede contener múltiples componentes Sliver, permitiendo que se consideren como un grupo en la dirección del eje principal de desplazamiento.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso básico de SliverMainAxisGroup", - "desc": [ - "【slivers】 : Lista de componentes hijos 【List】", - "Se puede combinar con SliverPersistentHeader para lograr un efecto de agrupación y fijación de títulos en la parte superior." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_fr_FR.json deleted file mode 100644 index 7a5206ece..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "Groupe d'axe principal glissant", - "info": "Peut contenir plusieurs composants Sliver, les considérant comme un groupe dans la direction de l'axe principal de défilement.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de base de SliverMainAxisGroup", - "desc": [ - "【slivers】 : Liste des composants enfants 【List】", - "Peut être combiné avec SliverPersistentHeader pour réaliser un effet de regroupement et de fixation du titre en haut." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_it_IT.json deleted file mode 100644 index 776ae341b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "Gruppo di Sliver sull'Asse Principale", - "info": "Può contenere più componenti Sliver, trattandoli come un gruppo nella direzione di scorrimento dell'asse principale.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso di base di SliverMainAxisGroup", - "desc": [ - "【slivers】 : Lista dei componenti figli 【List】", - "Può essere combinato con SliverPersistentHeader per realizzare raggruppamenti e l'effetto di titolo fisso in cima." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ja_JP.json deleted file mode 100644 index 046878ed1..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "主軸スライダーグループ", - "info": "複数のSliverコンポーネントを収容し、それらをスクロールする主軸方向で一つのグループとして扱うことができます。", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverMainAxisGroup 基本使用", - "desc": [ - "【slivers】 : 子コンポーネントリスト 【List】", - "SliverPersistentHeaderと組み合わせて、グループ化やタイトルの吸着効果を実現できます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ko_KR.json deleted file mode 100644 index 590367abe..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "주축 슬라이더 그룹", - "info": "여러 개의 Sliver 컴포넌트를 수용할 수 있으며, 스크롤하는 주축 방향에서 하나의 그룹으로 간주됩니다.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverMainAxisGroup 기본 사용법", - "desc": [ - "【slivers】 : 자식 컴포넌트 리스트 【List】", - "SliverPersistentHeader와 결합하여 그룹화 및 제목 고정 효과를 구현할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_pt_PT.json deleted file mode 100644 index ba26253b6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "Grupo de Slides do Eixo Principal", - "info": "Pode conter vários componentes Sliver, permitindo que sejam tratados como um grupo na direção do eixo de deslizamento.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso Básico do SliverMainAxisGroup", - "desc": [ - "【slivers】 : Lista de componentes filhos 【List】", - "Pode ser combinado com SliverPersistentHeader para alcançar efeitos de agrupamento e fixação de títulos no topo." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ru_RU.json deleted file mode 100644 index 5b8092840..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "Группа слайдеров главной оси", - "info": "Может содержать несколько компонентов Sliver, позволяя рассматривать их как группу в направлении скольжения главной оси.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Основное использование SliverMainAxisGroup", - "desc": [ - "【slivers】 : Список дочерних компонентов 【List】", - "Может использоваться в сочетании с SliverPersistentHeader для реализации группировки и эффекта прилипания заголовка." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_zh-CN.json deleted file mode 100644 index 7abcc8f92..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "主轴滑片组", - "info": "可以容纳多个 Sliver 组件,让它们在滑动的主轴方向上视为一组。", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverMainAxisGroup 基本使用", - "desc": [ - "【slivers】 : 子组件列表 【List】", - "可结合 SliverPersistentHeader 实现分组,标题吸顶效果。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/node1.dart b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/node1.dart deleted file mode 100644 index 5675f9e07..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/node1.dart +++ /dev/null @@ -1,95 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/8/18 -/// contact me by email 1981462002@qq.com - -class ItemData { - final String groupName; - final List users; - - ItemData({required this.groupName, this.users = const []}); - - static List get testData => [ - ItemData(groupName: '幻将术士', users: ['梦小梦', '梦千']), - ItemData( - groupName: '幻将剑客', users: ['捷特', '龙少', '莫向阳', '何解连', '浪封', '梦飞烟']), - ItemData(groupName: '幻将弓者', users: ['巫缨', '巫妻孋', '摄王', '裔王', '梦童']), - ItemData( - groupName: '其他', users: List.generate(20, (index) => '小兵$index')), - ]; -} - -class SliverMainAxisGroupDemo extends StatelessWidget{ - const SliverMainAxisGroupDemo({super.key}); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: ItemData.testData.map(_buildGroup).toList(), - ), - ); - } - - Widget _buildGroup(ItemData itemData) { - return SliverMainAxisGroup(slivers: [ - SliverPersistentHeader( - pinned: true, - delegate: _HeaderDelegate(itemData.groupName), - ), - SliverList( - // tag2 - delegate: SliverChildBuilderDelegate( - (_, index) => _buildItemByUser(itemData.users[index]), - childCount: itemData.users.length, - ), - ), - ]); - } - - Widget _buildItemByUser(String user) { - return Container( - alignment: Alignment.center, - height: 56, - child: Row( - children: [ - const Padding( - padding: EdgeInsets.only(left: 20, right: 10.0), - child: FlutterLogo(size: 30), - ), - Text( - user, - style: const TextStyle(fontSize: 16), - ), - ], - ), - ); - } -} - -class _HeaderDelegate extends SliverPersistentHeaderDelegate { - const _HeaderDelegate(this.title); - - final String title; - - @override - Widget build( - BuildContext context, double shrinkOffset, bool overlapsContent) { - return Container( - alignment: Alignment.centerLeft, - color: const Color(0xffF6F6F6), - padding: const EdgeInsets.only(left: 20), - height: 40, - child: Text(title)); - } - - @override - double get maxExtent => minExtent; - - @override - double get minExtent => 40; - - @override - bool shouldRebuild(covariant _HeaderDelegate oldDelegate) => title!=oldDelegate.title; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_de_DE.json deleted file mode 100644 index 50b283d3b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Sliver Transparenz", - "info": "Kann ein Kindelement der Sliver-Familie aufnehmen und die Transparenz des Kindelements durch opacity angeben.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverOpacity", - "desc": [ - "【opacity】 : Transparenz 【double】", - "【sliver】 : Kindelement 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_en_US.json deleted file mode 100644 index a3d1e34e7..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Sliver Opacity", - "info": "Can accommodate a child component of the Sliver family and specify the opacity of the child component through opacity.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverOpacity", - "desc": [ - "【opacity】: Opacity 【double】", - "【sliver】: Child Component 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_es_ES.json deleted file mode 100644 index 1a4aac8d1..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Opacidad de Sliver", - "info": "Puede contener un componente hijo de la familia Sliver y especificar la opacidad del componente hijo a través de opacity.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverOpacity", - "desc": [ - "【opacity】 : Opacidad 【double】", - "【sliver】 : Componente hijo 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_fr_FR.json deleted file mode 100644 index 626274032..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Opacité de Sliver", - "info": "Peut contenir un composant enfant de la famille Sliver et spécifier l'opacité du composant enfant via opacity.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverOpacity", - "desc": [ - "【opacity】 : opacité 【double】", - "【sliver】 : composant enfant 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_it_IT.json deleted file mode 100644 index 25668b4c4..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Opacità Sliver", - "info": "Può contenere un componente figlio della famiglia Sliver e specificare l'opacità del componente figlio tramite opacity.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverOpacity", - "desc": [ - "【opacity】 : opacità 【double】", - "【sliver】 : componente figlio 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ja_JP.json deleted file mode 100644 index ff4b4bcb1..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Sliver透明度", - "info": "Sliverファミリーの子コンポーネントを収容でき、opacityを通じて子コンポーネントの透明度を指定できます。", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOpacityの基本使用", - "desc": [ - "【opacity】 : 透明度 【double】", - "【sliver】 : 子コンポーネント 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ko_KR.json deleted file mode 100644 index 09c331943..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Sliver 투명도", - "info": "Sliver 계열의 자식 위젯을 포함할 수 있으며, opacity를 통해 자식 위젯의 투명도를 지정할 수 있습니다.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOpacity 기본 사용", - "desc": [ - "【opacity】 : 투명도 【double】", - "【sliver】 : 자식 위젯 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_pt_PT.json deleted file mode 100644 index 4f9e76ef5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Opacidade Sliver", - "info": "Pode acomodar um componente filho da família Sliver e especificar a opacidade do componente filho através de opacity.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do SliverOpacity", - "desc": [ - "【opacity】 : opacidade 【double】", - "【sliver】 : componente filho 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ru_RU.json deleted file mode 100644 index ca602737c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Прозрачность Sliver", - "info": "Может содержать дочерний компонент из семейства Sliver и указывать прозрачность дочернего компонента через opacity.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverOpacity", - "desc": [ - "【opacity】 : прозрачность 【double】", - "【sliver】 : дочерний компонент 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_zh-CN.json deleted file mode 100644 index 7aa31a0b9..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Sliver透明度", - "info": "可容纳一个Sliver家族的子组件,并通过opacity来指定子组件的透明度。", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOpacity基本使用", - "desc": [ - "【opacity】 : 透明度 【double】", - "【sliver】 : 子组件 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/node1_base.dart deleted file mode 100644 index 209d76299..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/node1_base.dart +++ /dev/null @@ -1,87 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class SliverOpacityDemo extends StatelessWidget { - const SliverOpacityDemo({super.key}); - - List get data => List.generate(128, (i) => Color(0xFF6600FF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - _buildSliverAppBar(), - SliverPadding( - padding: const EdgeInsets.only(top: 10), - sliver: SliverOpacity(opacity: 0.2, sliver: _buildSliverGrid())) - ], - ), - ); - } - - Widget _buildSliverGrid() => SliverGrid.extent( - childAspectRatio: 1 / 0.618, - maxCrossAxisExtent: 180, - crossAxisSpacing: 5, - mainAxisSpacing: 5, - children: data - .map((e) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: e, - child: Text( - colorString(e), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - )) - .toList(), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_de_DE.json deleted file mode 100644 index 8067bd074..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "Überlappungsabsorber", - "info": "Wickelt einen anderen Sliver ein und zwingt ihn, seinen Layoutbereich als überlappend zu betrachten. Muss in Verbindung mit SliverOverlapInjector verwendet werden.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverOverlapAbsorber", - "desc": [ - "【sliver】 : Untergeordnete Komponente 【Widget】", - "【handle】 : *Handler 【SliverOverlapAbsorberHandle】", - "Wenn die Komponenten SliverOverlapAbsorber und SliverOverlapInjector nicht verwendet werden, überlappt der Inhalt von NestedScrollView die Kopfleiste." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_en_US.json deleted file mode 100644 index b582af345..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "Overlap Absorber", - "info": "Wraps another sliver and forces its layout extent to be treated as overlapping. Needs to be used in conjunction with SliverOverlapInjector.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverOverlapAbsorber", - "desc": [ - "【sliver】 : Child component 【Widget】", - "【handle】 : *Handler 【SliverOverlapAbsorberHandle】", - "If the SliverOverlapAbsorber and SliverOverlapInjector components are not used, the content of the NestedScrollView will overlap with the header bar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_es_ES.json deleted file mode 100644 index b04a0462e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "Absorbedor de superposición", - "info": "Envuelve otro sliver y fuerza a que su rango de diseño sea considerado como superposición. Debe usarse junto con SliverOverlapInjector.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverOverlapAbsorber", - "desc": [ - "【sliver】 : Componente hijo 【Widget】", - "【handle】 : *Manejador 【SliverOverlapAbsorberHandle】", - "Si no se utilizan los componentes SliverOverlapAbsorber y SliverOverlapInjector, el contenido de NestedScrollView se superpondrá con la barra de encabezado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_fr_FR.json deleted file mode 100644 index 11f241768..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "Absorbeur de chevauchement", - "info": "Enveloppe un autre sliver et force sa plage de disposition à être considérée comme un chevauchement. Doit être utilisé avec SliverOverlapInjector.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverOverlapAbsorber", - "desc": [ - "【sliver】 : Composant enfant 【Widget】", - "【handle】 : *Gestionnaire 【SliverOverlapAbsorberHandle】", - "Si vous n'utilisez pas les composants SliverOverlapAbsorber et SliverOverlapInjector, le contenu de NestedScrollView se chevauchera avec la barre d'en-tête." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_it_IT.json deleted file mode 100644 index 621213c43..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "Assorbitore di Sovrapposizione", - "info": "Avvolge un altro sliver e costringe la sua area di layout a essere considerata sovrapposta. Deve essere utilizzato insieme a SliverOverlapInjector.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di SliverOverlapAbsorber", - "desc": [ - "【sliver】 : Componente figlio 【Widget】", - "【handle】 : *Gestore 【SliverOverlapAbsorberHandle】", - "Se non si utilizzano i componenti SliverOverlapAbsorber e SliverOverlapInjector, il contenuto di NestedScrollView si sovrapporrà alla barra dell'intestazione." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ja_JP.json deleted file mode 100644 index 698bb492a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "オーバーラップアブソーバー", - "info": "別のsliverをラップし、そのレイアウト範囲をオーバーラップとして扱うように強制します。SliverOverlapInjectorと一緒に使用する必要があります。", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOverlapAbsorberの基本的な使用法", - "desc": [ - "【sliver】 : 子コンポーネント 【Widget】", - "【handle】 : *ハンドラ 【SliverOverlapAbsorberHandle】", - "SliverOverlapAbsorberとSliverOverlapInjectorコンポーネントを使用しない場合、NestedScrollViewの内容がヘッダーバーと重なります。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ko_KR.json deleted file mode 100644 index 7181ed393..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "겹침 흡수기", - "info": "다른 sliver를 감싸고, 그 레이아웃 범위가 겹치는 것으로 간주되도록 강제합니다. SliverOverlapInjector와 함께 사용해야 합니다.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOverlapAbsorber 기본 사용", - "desc": [ - "【sliver】 : 자식 위젯 【Widget】", - "【handle】 *핸들러 【SliverOverlapAbsorberHandle】", - "SliverOverlapAbsorber와 SliverOverlapInjector 컴포넌트를 사용하지 않으면, NestedScrollView의 내용이 헤더 바와 겹치게 됩니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_pt_PT.json deleted file mode 100644 index 2fd274d6b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "Absorvedor de Sobreposição", - "info": "Envolve outro sliver e força que o seu alcance de layout seja considerado sobreposto. Precisa ser usado em conjunto com o SliverOverlapInjector.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SliverOverlapAbsorber", - "desc": [ - "【sliver】 : Componente filho 【Widget】", - "【handle】 : *Manipulador 【SliverOverlapAbsorberHandle】", - "Se os componentes SliverOverlapAbsorber e SliverOverlapInjector não forem usados, o conteúdo do NestedScrollView sobreporá a barra de cabeçalho." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ru_RU.json deleted file mode 100644 index c7b565f77..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "Поглотитель перекрытия", - "info": "Обертывает другой sliver и заставляет его область макета считаться перекрывающейся. Необходимо использовать вместе с SliverOverlapInjector.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverOverlapAbsorber", - "desc": [ - "【sliver】 : Дочерний компонент 【Widget】", - "【handle】 : *Обработчик 【SliverOverlapAbsorberHandle】", - "Если не использовать компоненты SliverOverlapAbsorber и SliverOverlapInjector, содержимое NestedScrollView будет перекрываться с заголовком." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_zh-CN.json deleted file mode 100644 index 7ced33556..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "重叠吸收器", - "info": "包裹另一个的sliver,并迫使其布局范围被视为重叠。需要和SliverOverlapInjector联用。", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOverlapAbsorber基本使用", - "desc": [ - "【sliver】 : 子组件 【Widget】", - "【handle】 : *处理器 【SliverOverlapAbsorberHandle】", - "如果不使用SliverOverlapAbsorber和SliverOverlapInjector组件,NestedScrollView的内容会和头部栏重叠。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/node1_base.dart deleted file mode 100644 index 5373277fd..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/node1_base.dart +++ /dev/null @@ -1,92 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/6/16 -/// contact me by email 1981462002@qq.com - - -class SliverOverlapAbsorberDemo extends StatelessWidget { - const SliverOverlapAbsorberDemo({Key? key}) : super(key: key); - - final List _tabs = const ['风神传', '封妖志', "幻将录", "永恒传说"]; - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height - 200, - child: Scaffold( - body: DefaultTabController( - length: _tabs.length, - child: NestedScrollView( - headerSliverBuilder: - (BuildContext context, bool innerBoxIsScrolled) { - return [ - SliverOverlapAbsorber( - handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), - sliver: SliverAppBar( - title: const Text('旷古奇书'), - pinned: true, - elevation: 6, //影深 - expandedHeight: 220.0, - forceElevated: innerBoxIsScrolled, //为true时展开有阴影 - flexibleSpace: FlexibleSpaceBar( - background: Image.asset( - "assets/images/wy_300x200_filter.webp", - fit: BoxFit.cover, - ), - ), - bottom: TabBar( - tabs: _tabs - .map((String name) => Tab(text: name,)) - .toList(), - ), - ), - ), - ]; - }, - body: _buildTabBarView(), - ), - ), - )); - } - - Widget _buildTabBarView() { - return TabBarView( - children: _tabs.map((String name) { - return SafeArea( - top: false, - bottom: false, - child: Builder( - builder: (BuildContext context) { - return CustomScrollView( - key: PageStorageKey(name), - slivers: [ - SliverOverlapInjector( - handle: NestedScrollView.sliverOverlapAbsorberHandleFor( - context), - ), - buildContent(name), - ], - ); - }, - ), - ); - }).toList(), - ); - } - - Widget buildContent(String name) => SliverPadding( - padding: const EdgeInsets.all(8.0), - sliver: SliverFixedExtentList( - itemExtent: 48.0, - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) { - return ListTile( - title: Text('《$name》 第 $index章'), - ); - }, - childCount: 50, - ), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_de_DE.json deleted file mode 100644 index 50ef4e3fb..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "Überlappungsinjektor", - "info": "Ein Sliver, der in Verbindung mit SliverOverlapAbsorber verwendet werden muss, um Überlappungsprobleme in der Ansicht zu behandeln.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverOverlapInjector", - "desc": [ - "【sliver】 : Untergeordnete Komponente 【Widget】", - "【handle】 : *Handler 【SliverOverlapAbsorberHandle】", - "Wenn die Komponenten SliverOverlapAbsorber und SliverOverlapInjector nicht verwendet werden, überlappt der Inhalt von NestedScrollView die Kopfleiste." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_en_US.json deleted file mode 100644 index f942f82a6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "Overlap Injector", - "info": "A sliver that needs to be used with SliverOverlapAbsorber to handle view overlap issues.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverOverlapInjector", - "desc": [ - "【sliver】 : Child component 【Widget】", - "【handle】 : *Handler 【SliverOverlapAbsorberHandle】", - "If the SliverOverlapAbsorber and SliverOverlapInjector components are not used, the content of the NestedScrollView will overlap with the header bar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_es_ES.json deleted file mode 100644 index e8189dc5c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "Inyector de superposición", - "info": "Un sliver que debe usarse junto con SliverOverlapAbsorber para manejar problemas de superposición de vistas.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverOverlapInjector", - "desc": [ - "【sliver】 : componente hijo 【Widget】", - "【handle】 : *manejador 【SliverOverlapAbsorberHandle】", - "Si no se utilizan los componentes SliverOverlapAbsorber y SliverOverlapInjector, el contenido de NestedScrollView se superpondrá con la barra de encabezado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_fr_FR.json deleted file mode 100644 index 49fdcb177..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "Injecteur de chevauchement", - "info": "Un sliver, doit être utilisé conjointement avec SliverOverlapAbsorber pour gérer les problèmes de chevauchement de vues.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverOverlapInjector", - "desc": [ - "【sliver】 : Composant enfant 【Widget】", - "【handle】 : *Gestionnaire 【SliverOverlapAbsorberHandle】", - "Si les composants SliverOverlapAbsorber et SliverOverlapInjector ne sont pas utilisés, le contenu de NestedScrollView chevauchera la barre d'en-tête." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_it_IT.json deleted file mode 100644 index 88185fd05..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "Iniettore di sovrapposizione", - "info": "Uno sliver, deve essere utilizzato insieme a SliverOverlapAbsorber per gestire il problema della sovrapposizione delle viste.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverOverlapInjector", - "desc": [ - "【sliver】 : Componente figlio 【Widget】", - "【handle】 : *Processore 【SliverOverlapAbsorberHandle】", - "Se non si utilizzano i componenti SliverOverlapAbsorber e SliverOverlapInjector, il contenuto di NestedScrollView si sovrapporrà alla barra dell'intestazione." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ja_JP.json deleted file mode 100644 index 5a2a19af5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "オーバーラップインジェクター", - "info": "Sliverで、SliverOverlapAbsorberと一緒に使用する必要があり、ビューのオーバーラップ問題を処理します。", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOverlapInjectorの基本使用", - "desc": [ - "【sliver】 : 子コンポーネント 【Widget】", - "【handle】 : *プロセッサ 【SliverOverlapAbsorberHandle】", - "SliverOverlapAbsorberとSliverOverlapInjectorコンポーネントを使用しない場合、NestedScrollViewの内容はヘッダーバーと重なります。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ko_KR.json deleted file mode 100644 index 8154e4107..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "겹침 인젝터", - "info": "SliverOverlapAbsorber와 함께 사용해야 하는 sliver로, 뷰 겹침 문제를 처리합니다.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOverlapInjector 기본 사용법", - "desc": [ - "【sliver】 : 자식 컴포넌트 【Widget】", - "【handle】 : *처리기 【SliverOverlapAbsorberHandle】", - "SliverOverlapAbsorber와 SliverOverlapInjector 컴포넌트를 사용하지 않으면, NestedScrollView의 내용이 헤더 바와 겹칩니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_pt_PT.json deleted file mode 100644 index 2aad85e08..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "Injector de Sobreposição", - "info": "Um sliver que precisa ser usado em conjunto com o SliverOverlapAbsorber para lidar com problemas de sobreposição de visualizações.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SliverOverlapInjector", - "desc": [ - "【sliver】 : Componente Filho 【Widget】", - "【handle】 : *Manipulador 【SliverOverlapAbsorberHandle】", - "Se os componentes SliverOverlapAbsorber e SliverOverlapInjector não forem usados, o conteúdo do NestedScrollView irá sobrepor-se à barra do cabeçalho." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ru_RU.json deleted file mode 100644 index 7becb227d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "Инжектор перекрытия", - "info": "Sliver, который необходимо использовать вместе с SliverOverlapAbsorber для решения проблемы перекрытия представлений.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverOverlapInjector", - "desc": [ - "【sliver】 : Дочерний компонент 【Widget】", - "【handle】 : *Обработчик 【SliverOverlapAbsorberHandle】", - "Если не использовать компоненты SliverOverlapAbsorber и SliverOverlapInjector, содержимое NestedScrollView будет перекрываться с заголовком." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_zh-CN.json deleted file mode 100644 index 519e019d5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "重叠注射器", - "info": "一个sliver,需要和SliverOverlapAbsorber联用,处理视图重叠问题。", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOverlapInjector基本使用", - "desc": [ - "【sliver】 : 子组件 【Widget】", - "【handle】 : *处理器 【SliverOverlapAbsorberHandle】", - "如果不使用SliverOverlapAbsorber和SliverOverlapInjector组件,NestedScrollView的内容会和头部栏重叠。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/node1_base.dart deleted file mode 100644 index 51daa157a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/node1_base.dart +++ /dev/null @@ -1,92 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/6/16 -/// contact me by email 1981462002@qq.com - - -class SliverOverlapInjectorDemo extends StatelessWidget { - const SliverOverlapInjectorDemo({Key? key}) : super(key: key); - - final List _tabs = const ['风神传', '封妖志', "幻将录", "永恒传说"]; - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height - 200, - child: Scaffold( - body: DefaultTabController( - length: _tabs.length, - child: NestedScrollView( - headerSliverBuilder: - (BuildContext context, bool innerBoxIsScrolled) { - return [ - SliverOverlapAbsorber( - handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), - sliver: SliverAppBar( - title: const Text('旷古奇书'), - pinned: true, - elevation: 6, //影深 - expandedHeight: 220.0, - forceElevated: innerBoxIsScrolled, //为true时展开有阴影 - flexibleSpace: FlexibleSpaceBar( - background: Image.asset( - "assets/images/wy_300x200_filter.webp", - fit: BoxFit.cover, - ), - ), - bottom: TabBar( - tabs: _tabs - .map((String name) => Tab(text: name,)) - .toList(), - ), - ), - ), - ]; - }, - body: _buildTabBarView(), - ), - ), - )); - } - - Widget _buildTabBarView() { - return TabBarView( - children: _tabs.map((String name) { - return SafeArea( - top: false, - bottom: false, - child: Builder( - builder: (BuildContext context) { - return CustomScrollView( - key: PageStorageKey(name), - slivers: [ - SliverOverlapInjector( - handle: NestedScrollView.sliverOverlapAbsorberHandleFor( - context), - ), - buildContent(name), - ], - ); - }, - ), - ); - }).toList(), - ); - } - - Widget buildContent(String name) => SliverPadding( - padding: const EdgeInsets.all(8.0), - sliver: SliverFixedExtentList( - itemExtent: 48.0, - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) { - return ListTile( - title: Text('《$name》 第 $index章'), - ); - }, - childCount: 50, - ), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_de_DE.json deleted file mode 100644 index 0baed1144..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Sliver Innenabstand", - "info": "Kann ein untergeordnetes Element der Sliver-Familie aufnehmen, fügt einen eigenen Innenabstand hinzu, um die Platzierung des untergeordneten Elements zu begrenzen, wobei padding die Kern-Eigenschaft ist.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverPadding", - "desc": [ - "【sliver】 : Untergeordnetes Element 【Widget】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_en_US.json deleted file mode 100644 index 0907c91a8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Sliver Padding", - "info": "Can accommodate a child component of the Sliver family, adding its own padding to limit the placement of the child component, with the core property being padding.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverPadding", - "desc": [ - "【sliver】: Child component 【Widget】", - "【padding】: Padding 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_es_ES.json deleted file mode 100644 index f30d98971..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Relleno interno de Sliver", - "info": "Puede contener un componente hijo de la familia Sliver, añadiendo su propio relleno interno para limitar el espacio ocupado por el componente hijo, la propiedad principal es padding.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverPadding", - "desc": [ - "【sliver】 : Componente hijo 【Widget】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_fr_FR.json deleted file mode 100644 index 801d55e6c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Espacement intérieur de Sliver", - "info": "Peut contenir un composant enfant de la famille Sliver, ajoute sa propre marge intérieure pour limiter l'emplacement du composant enfant, la propriété principale étant padding.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverPadding", - "desc": [ - "【sliver】 : Composant enfant 【Widget】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_it_IT.json deleted file mode 100644 index 2e02d440a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Spaziatura interna Sliver", - "info": "Può contenere un componente figlio della famiglia Sliver, aggiungendo il proprio padding interno per limitare il posizionamento del componente figlio, la proprietà principale è padding.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di SliverPadding", - "desc": [ - "【sliver】 : Componente figlio 【Widget】", - "【padding】 : Padding interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ja_JP.json deleted file mode 100644 index ce93600bd..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Sliver内間隔", - "info": "Sliverファミリーの子コンポーネントを収容し、自身の内側の余白を追加して子コンポーネントの占める位置を制限します。コア属性はpaddingです。", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPaddingの基本使用", - "desc": [ - "【sliver】 : 子コンポーネント 【Widget】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ko_KR.json deleted file mode 100644 index fa541f023..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Sliver 내부 여백", - "info": "Sliver 가족의 하위 구성 요소를 수용할 수 있으며, 자체 내부 여백을 추가하여 자식 구성 요소의 위치를 제한합니다. 핵심 속성은 padding입니다.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPadding 기본 사용", - "desc": [ - "【sliver】 : 하위 구성 요소 【Widget】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_pt_PT.json deleted file mode 100644 index 840c02b56..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Espaçamento interno do Sliver", - "info": "Pode acomodar um componente filho da família Sliver, adicionando o próprio preenchimento interno para limitar o espaço ocupado pelo componente filho, sendo o atributo principal o padding.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do SliverPadding", - "desc": [ - "【sliver】 : Componente filho 【Widget】", - "【padding】 : Preenchimento interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ru_RU.json deleted file mode 100644 index 6fb97bea5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Отступ внутри Sliver", - "info": "Может содержать дочерний компонент из семейства Sliver, добавляя собственные внутренние отступы для ограничения места, занимаемого дочерним компонентом. Основное свойство - padding.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverPadding", - "desc": [ - "【sliver】 : Дочерний компонент 【Widget】", - "【padding】 : Внутренний отступ 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_zh-CN.json deleted file mode 100644 index e4bd9cbc9..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Sliver内间距", - "info": "可容纳一个Sliver家族的子组件,添加自身内边距来限制孩子组件的占位,核心属性为padding。", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPadding基本使用", - "desc": [ - "【sliver】 : 子组件 【Widget】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverPadding/node1_base.dart deleted file mode 100644 index 26b707ba8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/node1_base.dart +++ /dev/null @@ -1,87 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class SliverPaddingDemo extends StatelessWidget { - const SliverPaddingDemo({super.key}); - - List get data => List.generate(128, (i) => Color(0xFF6600FF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - _buildSliverAppBar(), - SliverPadding( - padding: const EdgeInsets.only(top: 10), - sliver: _buildSliverGrid()) - ], - ), - ); - } - - Widget _buildSliverGrid() => SliverGrid.extent( - childAspectRatio: 1 / 0.618, - maxCrossAxisExtent: 180, - crossAxisSpacing: 5, - mainAxisSpacing: 5, - children: data - .map((e) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: e, - child: Text( - colorString(e), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - )) - .toList(), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_de_DE.json deleted file mode 100644 index 3ab0ea209..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "Fixierter Header", - "info": "Wird normalerweise in CustomScrollView verwendet, um eine Komponente beim Scrollen oben zu fixieren, damit sie nicht verschwindet.", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverPersistentHeader", - "desc": [ - "【delegate】 : Delegat 【SliverPersistentHeaderDelegate】", - "【floating】 : Ob schwebend 【bool】", - "【pinned】 : Ob oben fixiert 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_en_US.json deleted file mode 100644 index ef494ee2a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "Sticky Slider", - "info": "Usually used in CustomScrollView, it allows a component to stay at the top during scrolling and not disappear.", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverPersistentHeader", - "desc": [ - "【delegate】: Delegate 【SliverPersistentHeaderDelegate】", - "【floating】: Whether to float 【bool】", - "【pinned】: Whether to stay at the top 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_es_ES.json deleted file mode 100644 index c0373b7db..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "Cabecera persistente", - "info": "Se utiliza normalmente en CustomScrollView para permitir que un componente permanezca en la parte superior durante el desplazamiento y no desaparezca.", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverPersistentHeader", - "desc": [ - "【delegate】 : delegado 【SliverPersistentHeaderDelegate】", - "【floating】 : si flota 【bool】", - "【pinned】 : si se queda en la parte superior 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_fr_FR.json deleted file mode 100644 index 1f02f849d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "En-tête persistant", - "info": "Utilisé généralement dans CustomScrollView, il permet à un composant de rester en haut lors du défilement sans disparaître.", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverPersistentHeader", - "desc": [ - "【delegate】 : Délégué 【SliverPersistentHeaderDelegate】", - "【floating】 : Flottant 【bool】", - "【pinned】 : Reste en haut 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_it_IT.json deleted file mode 100644 index 8a3505c6a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "Intestazione persistente", - "info": "Utilizzato solitamente in CustomScrollView, consente a un componente di rimanere in cima durante lo scorrimento, senza scomparire.", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverPersistentHeader", - "desc": [ - "【delegate】 : delegato 【SliverPersistentHeaderDelegate】", - "【floating】 : se galleggiante 【bool】", - "【pinned】 : se rimane in cima 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ja_JP.json deleted file mode 100644 index 5e4734e4a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "吸頂スライド", - "info": "通常、CustomScrollViewで使用され、コンポーネントがスクロール中に上部に留まり、スクロールして消えないようにします。", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPersistentHeaderの基本的な使用法", - "desc": [ - "【delegate】 : デリゲート 【SliverPersistentHeaderDelegate】", - "【floating】 : フローティングするかどうか 【bool】", - "【pinned】 : 上部に留まるかどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ko_KR.json deleted file mode 100644 index 020f82322..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "스티커 슬라이드", - "info": "일반적으로 CustomScrollView에서 사용되며, 스크롤 중에 상단에 고정되어 사라지지 않도록 하는 컴포넌트입니다.", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPersistentHeader 기본 사용법", - "desc": [ - "【delegate】 : 대리자 【SliverPersistentHeaderDelegate】", - "【floating】 : 플로팅 여부 【bool】", - "【pinned】 : 상단 고정 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_pt_PT.json deleted file mode 100644 index 2c485a8a0..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "Cabeçalho Fixo Deslizante", - "info": "Geralmente usado em CustomScrollView, permite que um componente permaneça no topo durante a rolagem, sem desaparecer.", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SliverPersistentHeader", - "desc": [ - "【delegate】 : Delegado 【SliverPersistentHeaderDelegate】", - "【floating】 : Se flutua 【bool】", - "【pinned】 : Se fica no topo 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ru_RU.json deleted file mode 100644 index d5baa3db1..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "Прилипающий заголовок", - "info": "Обычно используется в CustomScrollView, позволяет компоненту оставаться вверху при прокрутке и не исчезать.", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverPersistentHeader", - "desc": [ - "【delegate】 : делегат 【SliverPersistentHeaderDelegate】", - "【floating】 : плавающий 【bool】", - "【pinned】 : закреплённый вверху 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_zh-CN.json deleted file mode 100644 index a72aae229..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "吸顶滑片", - "info": "通常用于 CustomScrollView 中,可以让一个组件在滑动中停留在顶部,不会滑动消失。", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPersistentHeader基本使用", - "desc": [ - "【delegate】 : 代理 【SliverPersistentHeaderDelegate】", - "【floating】 : 是否浮动 【bool】", - "【pinned】 : 是否顶部停留 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/node1_base.dart deleted file mode 100644 index 7ea9109c7..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/node1_base.dart +++ /dev/null @@ -1,158 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class SliverPersistentHeaderDemo extends StatelessWidget { - const SliverPersistentHeaderDemo({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 500, - child: CustomScrollView( - slivers: [ - _buildSliverAppBar(), - _buildPersistentHeader('袅缈岁月,青丝银发',const Color(0xffe7fcc9)), - _buildCommonWidget(), - _buildPersistentHeader('以梦为马,不负韶华',const Color(0xffcca4ff)), - _buildSliverList() - ], - ), - ); - } - - Widget _buildCommonWidget() => SliverToBoxAdapter( - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 10), - color: Colors.grey.withAlpha(22), - child: ListTile( - leading: Image.asset("assets/images/icon_head.webp"), - title: const Text("以梦为马"), - subtitle: const Text("海子"), - selected: true, - contentPadding: const EdgeInsets.all(5), - trailing: const Icon(Icons.more_vert), - ), - ), - ); - Widget _buildPersistentHeader(String text,Color color) => SliverPersistentHeader( - pinned: true, - delegate: _SliverDelegate( - minHeight: 40.0, - maxHeight: 100.0, - child: Container( - color: color, - child: Center( - child: Text(text, style: const TextStyle( - fontSize: 18, - shadows: [Shadow(color: Colors.white, offset: Offset(1, 1))]), - ), - )), - )); - - Widget _buildSliverList() => SliverList( - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 2, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} - - -class _SliverDelegate extends SliverPersistentHeaderDelegate { - _SliverDelegate({ - required this.minHeight, - required this.maxHeight, - required this.child, - }); - - final double minHeight; //最小高度 - final double maxHeight; //最大高度 - final Widget child; //孩子 - - @override - double get minExtent => minHeight; - - @override - double get maxExtent => max(maxHeight, minHeight); - - @override - Widget build( - BuildContext context, double shrinkOffset, bool overlapsContent) { - return SizedBox.expand(child: child); - } - - @override //是否需要重建 - bool shouldRebuild(_SliverDelegate oldDelegate) { - return maxHeight != oldDelegate.maxHeight || - minHeight != oldDelegate.minHeight || - child != oldDelegate.child; - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_de_DE.json deleted file mode 100644 index 6274480b2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Sliver-Prototyp-Erweiterungsliste", - "info": "Die Eigenschaft prototypeItem ist ein Widget, das die Größe der Elemente in der Hauptachsenrichtung einschränkt, aber nicht angezeigt wird. Der delegate akzeptiert einen SliverChildDelegate, um die Erstellung der Elemente abzuschließen.", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverPrototypeExtentList", - "desc": [ - "【prototypeItem】 : Hauptachsenrichtungsgrößenkomponente 【Widget】", - "【delegate】 : Kind-Delegate 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_en_US.json deleted file mode 100644 index 471973dbe..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Sliver Prototype Extent List", - "info": "The prototypeItem property is a Widget, which is responsible for constraining the size of the item in the main axis direction, but it will not be displayed. The delegate accepts a SliverChildDelegate to complete the creation of the item.", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverPrototypeExtentList", - "desc": [ - "【prototypeItem】 : Main axis size component 【Widget】", - "【delegate】 : Child delegate 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_es_ES.json deleted file mode 100644 index 6755cc3c2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Lista de Extensión de Prototipo Sliver", - "info": "La propiedad prototypeItem es un Widget, que se encarga de restringir el tamaño del ítem en la dirección del eje principal, pero no se mostrará. El delegate acepta un SliverChildDelegate para completar la creación del ítem.", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverPrototypeExtentList", - "desc": [ - "【prototypeItem】 : Componente de tamaño en la dirección del eje principal 【Widget】", - "【delegate】 : Delegado de hijos 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_fr_FR.json deleted file mode 100644 index 0642cc05a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Liste d'extension de prototype Sliver", - "info": "La propriété prototypeItem est un Widget, elle est responsable de contraindre la taille de l'item dans la direction de l'axe principal, mais ne sera pas affichée. Le delegate accepte un SliverChildDelegate pour créer l'item.", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverPrototypeExtentList", - "desc": [ - "【prototypeItem】 : Composant de taille dans la direction de l'axe principal 【Widget】", - "【delegate】 : Délégué des enfants 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_it_IT.json deleted file mode 100644 index b0130d179..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Lista di estensione del prototipo Sliver", - "info": "La proprietà prototypeItem è un Widget, che si occupa di vincolare le dimensioni dell'elemento nella direzione dell'asse principale, ma non viene visualizzato. Il delegate accetta un SliverChildDelegate per completare la creazione dell'elemento.", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverPrototypeExtentList", - "desc": [ - "【prototypeItem】 : Componente di dimensioni nella direzione dell'asse principale 【Widget】", - "【delegate】 : Delegato per i figli 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ja_JP.json deleted file mode 100644 index 5b31fd936..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Sliverプロトタイプ拡張リスト", - "info": "prototypeItemプロパティはWidgetで、主軸方向のitemのサイズを制約しますが、表示されません。delegateはSliverChildDelegateを受け取り、itemの作成を完了します。", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPrototypeExtentListの基本使用", - "desc": [ - "【prototypeItem】 : 主軸方向サイズコンポーネント 【Widget】", - "【delegate】 : 子デリゲート 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ko_KR.json deleted file mode 100644 index 033af1774..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Sliver 프로토타입 확장 리스트", - "info": "prototypeItem 속성은 Widget이며, 주축 방향의 item 크기를 제한하지만 표시되지는 않습니다. delegate는 SliverChildDelegate를 받아 item 생성을 완료합니다.", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPrototypeExtentList 기본 사용", - "desc": [ - "【prototypeItem】 : 주축 방향 크기 컴포넌트 【Widget】", - "【delegate】 : 자식 대리자 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_pt_PT.json deleted file mode 100644 index daa4feea8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Lista de Extensão de Protótipo Sliver", - "info": "A propriedade prototypeItem é um Widget, que é responsável por restringir o tamanho do item na direção do eixo principal, mas não será exibido. O delegate aceita um SliverChildDelegate para criar o item.", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SliverPrototypeExtentList", - "desc": [ - "【prototypeItem】 : Componente de tamanho na direção do eixo principal 【Widget】", - "【delegate】 : Delegado de criança 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ru_RU.json deleted file mode 100644 index 6ce33abfd..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Список расширений прототипа Sliver", - "info": "Свойство prototypeItem является Widget, оно отвечает за ограничение размера элемента в направлении основной оси, но не отображается. Delegate принимает SliverChildDelegate для создания элементов.", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverPrototypeExtentList", - "desc": [ - "【prototypeItem】 : Компонент размера в направлении основной оси 【Widget】", - "【delegate】 : Делегат детей 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_zh-CN.json deleted file mode 100644 index 4a5ffaf18..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Sliver原型延伸列表", - "info": "其中prototypeItem属性是Widget,它负责约束主轴方向上item尺寸,但不会显示出来。delegate接受一个SliverChildDelegate完成item的创建。", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPrototypeExtentList基本使用", - "desc": [ - "【prototypeItem】 : 主轴方向尺寸组件 【Widget】", - "【delegate】 : 孩子代理 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/node1_base.dart deleted file mode 100644 index 04deb5571..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/node1_base.dart +++ /dev/null @@ -1,99 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class SliverPrototypeExtentListDemo extends StatefulWidget { - const SliverPrototypeExtentListDemo({Key? key}) : super(key: key); - - @override - _SliverPrototypeExtentListDemoState createState() => - _SliverPrototypeExtentListDemoState(); -} - -class _SliverPrototypeExtentListDemoState - extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [_buildSliverAppBar(), _buildSliverList()], - ), - ); - } - - Widget _buildSliverList() => SliverPrototypeExtentList( - prototypeItem: Container( - height: 80, - ), - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 150.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_de_DE.json deleted file mode 100644 index e2848f0a0..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Sliver-Adapter", - "info": "Kann ein normales Widget aufnehmen und in ein Sliver-Widget umwandeln.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverToBoxAdapter", - "desc": [ - "【child】 : Untergeordnetes Widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_en_US.json deleted file mode 100644 index efcf4521c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Sliver Adapter", - "info": "An adapter that can accommodate a common component and convert it into a component of the Sliver family.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverToBoxAdapter", - "desc": [ - "【child】: Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_es_ES.json deleted file mode 100644 index fc7ad225a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Adaptador Sliver", - "info": "Puede contener un componente común y convertirlo en un adaptador para los componentes de la familia Sliver.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverToBoxAdapter", - "desc": [ - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_fr_FR.json deleted file mode 100644 index 0d6c369dd..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Adaptateur Sliver", - "info": "Un adaptateur qui peut contenir un composant ordinaire et le transformer en un composant de la famille Sliver.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverToBoxAdapter", - "desc": [ - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_it_IT.json deleted file mode 100644 index 684fd564e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Adattatore Sliver", - "info": "Un adattatore che può contenere un componente normale e trasformarlo in un componente della famiglia Sliver.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverToBoxAdapter", - "desc": [ - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ja_JP.json deleted file mode 100644 index 30979cf2a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Sliverアダプター", - "info": "通常のコンポーネントを収容し、それをSliverファミリーのコンポーネントに変換するアダプターです。", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverToBoxAdapterの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ko_KR.json deleted file mode 100644 index 89baca35e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Sliver 어댑터", - "info": "일반 컴포넌트를 수용하고 Sliver 패밀리 컴포넌트로 변환할 수 있는 어댑터입니다.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverToBoxAdapter 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_pt_PT.json deleted file mode 100644 index cd7812119..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Adaptador Sliver", - "info": "Pode acomodar um componente comum e transformá-lo num adaptador para componentes da família Sliver.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do SliverToBoxAdapter", - "desc": [ - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ru_RU.json deleted file mode 100644 index 5912820d4..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Sliver адаптер", - "info": "Адаптер, который может вместить обычный компонент и преобразовать его в компонент семейства Sliver.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverToBoxAdapter", - "desc": [ - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_zh-CN.json deleted file mode 100644 index 10aef0b95..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Sliver适配器", - "info": "可以容纳一个普通的组件,并将其转化成Sliver家族组件的适配器。", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverToBoxAdapter基本使用", - "desc": [ - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/node1_base.dart deleted file mode 100644 index 31d23053e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/node1_base.dart +++ /dev/null @@ -1,108 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class SliverToBoxAdapterDemo extends StatelessWidget { - const SliverToBoxAdapterDemo({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - _buildSliverAppBar(), - _buildCommonWidget(), - _buildSliverList() - ], - ), - ); - } - - Widget _buildCommonWidget() => SliverToBoxAdapter( - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 10), - color: Colors.grey.withAlpha(22), - child: ListTile( - leading: Image.asset("assets/images/icon_head.webp"), - title: const Text("以梦为马"), - subtitle: const Text("海子"), - selected: true, - contentPadding: const EdgeInsets.all(5), - trailing: const Icon(Icons.more_vert), - ), - ), - ); - - Widget _buildSliverList() => SliverList( - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 2, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_de_DE.json deleted file mode 100644 index 7e133c118..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Sliver Keep-Alive-Container", - "info": "Es ist eine abstrakte Klasse und kann nicht alleine verwendet werden. Nur seine Unterklassen können Keep-Alive-Kinder aufnehmen.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in SliverWithKeepAliveWidget", - "desc": [ - "【key】 : Schlüssel 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_en_US.json deleted file mode 100644 index fd21e244d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Sliver Keep-Alive Container", - "info": "It is an abstract class and cannot be used alone. Only its subclasses can accommodate KeepAlive children.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to SliverWithKeepAliveWidget", - "desc": [ - "【key】 : key 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_es_ES.json deleted file mode 100644 index f71c82068..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Contenedor Sliver con KeepAlive", - "info": "Es una clase abstracta y no se puede usar por sí sola. Solo sus subclases pueden contener hijos con KeepAlive.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a SliverWithKeepAliveWidget", - "desc": [ - "【key】 : clave 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_fr_FR.json deleted file mode 100644 index 30bc843a6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Conteneur Sliver avec KeepAlive", - "info": "C'est une classe abstraite et ne peut pas être utilisée seule. Seules ses sous-classes peuvent contenir des enfants KeepAlive.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à SliverWithKeepAliveWidget", - "desc": [ - "【key】 : clé 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_it_IT.json deleted file mode 100644 index 2679e37d9..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Contenitore Sliver con KeepAlive", - "info": "È una classe astratta e non può essere utilizzata da sola. Solo le sue sottoclassi possono contenere figli KeepAlive.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a SliverWithKeepAliveWidget", - "desc": [ - "【key】 : chiave 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ja_JP.json deleted file mode 100644 index 7871fae73..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Sliver保活コンテナ", - "info": "これは抽象クラスであり、単独で使用することはできません。そのサブクラスのみがKeepAliveの子を保持できます。", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverWithKeepAliveWidget 紹介", - "desc": [ - "【key】 : キー 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ko_KR.json deleted file mode 100644 index ce057802c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Sliver 생존 유지 컨테이너", - "info": "이것은 추상 클래스로, 단독으로 사용할 수 없습니다. 오직 그 하위 클래스만이 KeepAlive 자식을 포함할 수 있습니다.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverWithKeepAliveWidget 소개", - "desc": [ - "【key】 : 키 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_pt_PT.json deleted file mode 100644 index 6ad1ecdb9..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Recipiente Sliver com KeepAlive", - "info": "É uma classe abstrata e não pode ser usada sozinha. Apenas suas subclasses podem conter filhos KeepAlive.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao SliverWithKeepAliveWidget", - "desc": [ - "【key】 : chave 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ru_RU.json deleted file mode 100644 index 42890b043..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Sliver контейнер с поддержкой активности", - "info": "Это абстрактный класс, который нельзя использовать отдельно. Только его подклассы могут содержать дочерние элементы KeepAlive.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в SliverWithKeepAliveWidget", - "desc": [ - "【key】 : ключ 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_zh-CN.json deleted file mode 100644 index 801ceb7f7..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Sliver保活容器", - "info": "它是抽象类,不能单独使用。只有其子类才可以容纳 KeepAlive 的孩子.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverWithKeepAliveWidget 介绍", - "desc": [ - "【key】 : 键 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/node1_base.dart deleted file mode 100644 index e079ddc33..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/node1_base.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - - -class SliverWithKeepAliveWidgetDemo extends StatelessWidget { - const SliverWithKeepAliveWidgetDemo({Key? key}) : super(key: key); - - final String info = - '只有 SliverWithKeepAliveWidget 之下才可以包含 KeepAlive 组件, 由于其为抽象类,不能直接使用。其子类 SliverMultiBoxAdaptorWidget 也说抽象类,' - '用于容纳多个孩子,帮助它的子类使用 SliverChildDelegate 构建懒加载 children。' - '最终实现类为 SliverGrid、SliverList、SliverPrototypeExtentList、SliverFixedExtentList,表示他们都可以支持 item 的状态保持。' - '除此之外还有 _SliverFillViewportRenderObjectWidget 的私有实现类,这是 PageView 的底层实现,这也是为什么 PageView 也支持保活的原因。'; - - @override - Widget build(BuildContext context) { - - return Container( - color: Theme.of(context).primaryColor.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_de_DE.json deleted file mode 100644 index 5ab06a883..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "Ausrichtungsübergang", - "info": "Eine Unterklasse von AnimatedWidget, die einen Animator vom Typ Alignment verwendet, um eine Übergangsanimation zwischen zwei Alignment-Objekten für das untergeordnete Widget zu ermöglichen.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AlignTransition", - "desc": [ - "【child】 : Kind-Widget 【Widget】", - "【alignment】 : Ausrichtungsanimation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_en_US.json deleted file mode 100644 index cb576d3cb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "Alignment Transition", - "info": "A subclass of AnimatedWidget, using an animator of type Alignment to allow child components to transition between two Alignment objects.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AlignTransition", - "desc": [ - "【child】: Child component 【Widget】", - "【alignment】: Alignment animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_es_ES.json deleted file mode 100644 index 969c3b2c8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "Transición de alineación", - "info": "Subclase de AnimatedWidget, utiliza un animador de tipo Alignment para permitir que los componentes hijos realicen una animación de transición entre dos objetos Alignment.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AlignTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【alignment】 : Animación de alineación 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_fr_FR.json deleted file mode 100644 index afe4f3009..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "Transition d'alignement", - "info": "Sous-classe de AnimatedWidget, utilisant un animateur de type Alignment pour permettre à un composant enfant de faire une transition animée entre deux objets Alignment.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AlignTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【alignment】 : Animation d'alignement 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_it_IT.json deleted file mode 100644 index 252739a65..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "Transizione di allineamento", - "info": "Una sottoclasse di AnimatedWidget, utilizza un animatore di tipo Alignment per far sì che i componenti figli effettuino una transizione animata tra due oggetti Alignment.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AlignTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【alignment】 : Animazione di allineamento 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ja_JP.json deleted file mode 100644 index 9d05b5949..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "整列遷移", - "info": "AnimatedWidgetのサブクラスで、Alignmentタイプのアニメーターを使用して子コンポーネントを2つのAlignmentオブジェクト間で遷移アニメーションさせます。", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AlignTransition基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【alignment】 : 整列アニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ko_KR.json deleted file mode 100644 index 4af24abf5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "정렬 변환", - "info": "AnimatedWidget의 하위 클래스, Alignment 타입의 애니메이터를 사용하여 자식 위젯이 두 Alignment 객체 사이에서 전환 애니메이션을 수행합니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AlignTransition 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【alignment】 : 정렬 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_pt_PT.json deleted file mode 100644 index a7abb56e4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "Transição de Alinhamento", - "info": "Subclasse de AnimatedWidget, usa um animador do tipo Alignment para permitir que um componente filho faça uma animação de transição entre dois objetos Alignment.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AlignTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【alignment】 : Animação de alinhamento 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ru_RU.json deleted file mode 100644 index 5ef6388f3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "Анимация выравнивания", - "info": "Подкласс AnimatedWidget, использующий аниматор типа Alignment для создания переходной анимации между двумя объектами Alignment для дочернего компонента.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AlignTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【alignment】 : Анимация выравнивания 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_zh-CN.json deleted file mode 100644 index 8d6d6db0d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "对齐变换", - "info": "AnimatedWidget的子类,使用Alignment类型的动画器让子组件在两个Alignment对象之间进行过渡动画。", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AlignTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【alignment】 : 对齐动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/node1_base.dart deleted file mode 100644 index daf4201f6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/node1_base.dart +++ /dev/null @@ -1,54 +0,0 @@ - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomAlignTransition extends StatefulWidget { - const CustomAlignTransition({Key? key}) : super(key: key); - - @override - _CustomAlignTransitionState createState() => _CustomAlignTransitionState(); -} - -class _CustomAlignTransitionState extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 1), - ); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Container( - width: MediaQuery.of(context).size.width, - color: Colors.grey.withAlpha(33), - height: 100, - child: AlignTransition( - alignment: AlignmentTween( - begin: Alignment.topLeft, - end: Alignment.bottomRight, - ).animate(_ctrl), - child: const Icon( - Icons.android, - color: Colors.green, - size: 60, - ), - ), - )); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_de_DE.json deleted file mode 100644 index 553c66f3d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "Ausrichtungsanimation", - "info": "Ermöglicht die Ausrichtungsanimation von Unterkomponenten, ermöglicht die Angabe von Dauer und Kurve und verfügt über ein Ereignis für das Ende der Animation.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedAlign", - "desc": [ - "【child】: Untergeordnete Komponente 【Widget】", - "【duration】: Animationsdauer 【Duration】", - "【onEnd】: Rückruf bei Ende der Animation 【Function()】", - "【alignment】: Ausrichtungsart 【AlignmentGeometry】", - "【curve】: Animationskurve 【Duration】", - "【padding】: Innenabstand 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_en_US.json deleted file mode 100644 index d3e7481ba..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "Alignment Animation", - "info": "Allows child components to perform Align (alignment) animations, with specified duration and curve, and includes an animation end event.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedAlign", - "desc": [ - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【alignment】: Alignment method 【AlignmentGeometry】", - "【curve】: Animation curve 【Duration】", - "【padding】: Padding 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_es_ES.json deleted file mode 100644 index af8b46dc7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "Animación de alineación", - "info": "Permite que los componentes hijos realicen una animación de Align (alineación), se puede especificar la duración y la curva, y tiene un evento de finalización de la animación.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedAlign", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Callback de finalización de la animación 【Function()】", - "【alignment】 : Modo de alineación 【AlignmentGeometry】", - "【curve】 : Curva de la animación 【Duration】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_fr_FR.json deleted file mode 100644 index 38d3c4a7a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "Animation d'alignement", - "info": "Permet à un composant enfant de réaliser une animation d'alignement (Align), avec la possibilité de spécifier la durée et la courbe, et un événement de fin d'animation.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de AnimatedAlign", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【alignment】 : Mode d'alignement 【AlignmentGeometry】", - "【curve】 : Courbe de l'animation 【Duration】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_it_IT.json deleted file mode 100644 index 0c6ea987a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "Allineamento Animato", - "info": "Consente ai componenti figli di eseguire animazioni di allineamento (Align), con la possibilità di specificare la durata e la curva, e con un evento di fine animazione.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedAlign", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【alignment】 : Modalità di allineamento 【AlignmentGeometry】", - "【curve】 : Curva dell'animazione 【Duration】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ja_JP.json deleted file mode 100644 index f14ebc2fd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "アニメーションアライメント", - "info": "子コンポーネントにAlign(アライメント)アニメーションを行わせることができます。時間と曲線を指定でき、アニメーション終了イベントがあります。", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedAlignの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【alignment】 : アライメント方法 【AlignmentGeometry】", - "【curve】 : アニメーション曲線 【Duration】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ko_KR.json deleted file mode 100644 index 1dcd679e1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "정렬 애니메이션", - "info": "자식 위젯이 Align(정렬) 애니메이션을 수행할 수 있게 하며, 지속 시간과 곡선을 지정할 수 있고, 애니메이션 종료 이벤트가 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedAlign 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_pt_PT.json deleted file mode 100644 index 2a9dfac3d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "Animação de Alinhamento", - "info": "Permite que os componentes filhos realizem animações de Alinhamento (Align), podendo especificar a duração e a curva, com evento de término da animação.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do AnimatedAlign", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【alignment】 : Modo de alinhamento 【AlignmentGeometry】", - "【curve】 : Curva da animação 【Duration】", - "【padding】 : Margem interna 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ru_RU.json deleted file mode 100644 index 782ec832c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "Анимация выравнивания", - "info": "Позволяет дочернему компоненту выполнять анимацию выравнивания (Align), можно указать продолжительность и кривую, есть событие завершения анимации.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedAlign", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Продолжительность анимации 【Duration】", - "【onEnd】 : Обратный вызов завершения анимации 【Function()】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】", - "【curve】 : Кривая анимации 【Duration】", - "【padding】 : Внутренний отступ 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_zh-CN.json deleted file mode 100644 index f5ff49466..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "对齐动画", - "info": "能让子组件进行Align(对齐)动画,可指定时长和曲线,有动画结束事件。", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedAlign基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【alignment】 : 对齐方式 【AlignmentGeometry】", - "【curve】 : 动画曲线 【Duration】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/node1_base.dart deleted file mode 100644 index 6005ec16c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedAlign extends StatefulWidget { - const CustomAnimatedAlign({Key? key}) : super(key: key); - - @override - _CustomAnimatedAlignState createState() => _CustomAnimatedAlignState(); -} - -class _CustomAnimatedAlignState extends State { - final Alignment start = const Alignment(0, 0); - final Alignment end = Alignment.bottomRight; - - late Alignment _alignment; - - @override - void initState() { - _alignment = start; - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSwitch(), - Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 100, - child: AnimatedAlign( - duration: const Duration(seconds: 1), - curve: Curves.fastOutSlowIn, - alignment: _alignment, - onEnd: () => print('End'), - child: Container( - height: 40, - width: 80, - alignment: Alignment.center, - color: Colors.blue, - child: const Text( - '张风捷特烈', - style: TextStyle(color: Colors.white), - ), - ), - ), - ), - ], - ); - } - - Widget _buildSwitch() => Switch( - value: _alignment == end, - onChanged: (v) { - setState(() { - _alignment = v ? end : start; - }); - }); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_de_DE.json deleted file mode 100644 index 57e1754fe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "Animations-Builder", - "info": "Durch den Builder werden die entsprechenden Knoten der Animation lokal aktualisiert, und es wird vermieden, dass untergeordnete Komponenten aktualisiert werden, wodurch die Bauzeit reduziert und die Animationsleistung verbessert wird.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Anwendungsbeispiel für AnimatedBuilder", - "desc": [ - "【animation】 : *beobachtbares Objekt 【Listenable】", - "【builder】 : *Komponenten-Builder 【TransitionBuilder】", - "【child】 : untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_en_US.json deleted file mode 100644 index 700c5563f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "Animated Builder", - "info": "By using the builder, the corresponding node of the animation can be updated locally, and the refresh of child components can be avoided, reducing the build time and improving animation performance.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedBuilder Usage Example", - "desc": [ - "【animation】: *Listenable object 【Listenable】", - "【builder】: *Component builder 【TransitionBuilder】", - "【child】: Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_es_ES.json deleted file mode 100644 index 4c55c51ff..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "Constructor de Animación", - "info": "A través del builder, hace que los nodos correspondientes a la animación se actualicen parcialmente, y evita la actualización de los componentes hijos, reduciendo el tiempo de construcción y mejorando el rendimiento de la animación.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Caso de uso de AnimatedBuilder", - "desc": [ - "【animation】 : *Objeto observable 【Listenable】", - "【builder】 : *Constructor de componentes 【TransitionBuilder】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_fr_FR.json deleted file mode 100644 index 5f566be46..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "Constructeur d'animation", - "info": "Rend les nœuds correspondant à l'animation mis à jour localement via le builder, évite le rafraîchissement des composants enfants, réduit le temps de construction et améliore les performances de l'animation.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Exemple d'utilisation d'AnimatedBuilder", - "desc": [ - "【animation】 : *Objet observable 【Listenable】", - "【builder】 : *Constructeur de composant 【TransitionBuilder】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_it_IT.json deleted file mode 100644 index 24f5dc3b4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "Costruttore di animazioni", - "info": "Attraverso il builder, il nodo corrispondente all'animazione viene aggiornato localmente, evitando l'aggiornamento dei componenti figli, riducendo il tempo di costruzione e migliorando le prestazioni dell'animazione.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Esempio di utilizzo di AnimatedBuilder", - "desc": [ - "【animation】 : *oggetto ascoltabile 【Listenable】", - "【builder】 : *costruttore di componenti 【TransitionBuilder】", - "【child】 : componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ja_JP.json deleted file mode 100644 index bb283ed60..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "アニメーションビルダー", - "info": "ビルダーを通じてアニメーションに対応するノードを部分的に更新し、子コンポーネントのリフレッシュを避け、ビルド時間を短縮し、アニメーションのパフォーマンスを向上させます。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedBuilder 使用例", - "desc": [ - "【animation】 : *リスナブルオブジェクト 【Listenable】", - "【builder】 : *コンポーネントビルダー 【TransitionBuilder】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ko_KR.json deleted file mode 100644 index 8f79a9c08..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "애니메이션 빌더", - "info": "빌더를 통해 애니메이션에 해당하는 노드를 부분적으로 업데이트하고, 하위 컴포넌트의 새로고침을 방지하여 빌드 시간을 줄이고 애니메이션 성능을 향상시킵니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedBuilder 사용 예제", - "desc": [ - "【animation】 : *리스너 가능 객체 【Listenable】", - "【builder】 : *컴포넌트 빌더 【TransitionBuilder】", - "【child】 : 하위 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_pt_PT.json deleted file mode 100644 index 6fa9c0de1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "Construtor de Animação", - "info": "Através do builder, o nó correspondente à animação é atualizado localmente, evitando a atualização de componentes filhos, reduzindo o tempo de construção e melhorando o desempenho da animação.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Exemplo de uso do AnimatedBuilder", - "desc": [ - "【animation】 : *objeto observável 【Listenable】", - "【builder】 : *construtor de componente 【TransitionBuilder】", - "【child】 : componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ru_RU.json deleted file mode 100644 index 1eac5f1fe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "Анимационный конструктор", - "info": "С помощью builder делает узел, соответствующий анимации, частично обновляемым, а также позволяет избежать обновления дочерних компонентов, сократить время сборки и повысить производительность анимации.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Пример использования AnimatedBuilder", - "desc": [ - "【animation】 : *Объект, который можно прослушивать 【Listenable】", - "【builder】 : *Конструктор компонентов 【TransitionBuilder】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_zh-CN.json deleted file mode 100644 index afc38032e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "动画构造器", - "info": "通过 builder 使动画对应的节点变为局部更新,并且可避免子组件刷新,减少构建的时间,提高动画性能。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedBuilder 使用案例", - "desc": [ - "【animation】 : *可监听对象 【Listenable】", - "【builder】 : *组件构造器 【TransitionBuilder】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/node1_base.dart deleted file mode 100644 index ea7fe5670..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ - -import 'package:flutter/material.dart'; - - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class AnimatedBuilderDemo extends StatefulWidget { - const AnimatedBuilderDemo({Key? key}) : super(key: key); - - @override - _AnimatedBuilderDemoState createState() => _AnimatedBuilderDemoState(); -} - -class _AnimatedBuilderDemoState extends State - with SingleTickerProviderStateMixin { - late AnimationController controller; - - @override - void initState() { - super.initState(); - controller = AnimationController( - vsync: this, - lowerBound: 0.3, - upperBound: 1.0, - duration: const Duration(milliseconds: 500)) - ..forward(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () { - controller.forward(from: 0); - }, - child: AnimatedBuilder( - animation: controller, - builder: (ctx, child) { - return Transform.scale( - scale: controller.value, - child: Opacity(opacity: controller.value, child: child), - ); - }, - child: buildChild()), - ); - } - - Widget buildChild() => Container( - height: 100, - width: 100, - decoration: const BoxDecoration( - color: Colors.orange, - shape: BoxShape.circle, - ), - alignment: Alignment.center, - child: const Text( - 'Toly', - style: TextStyle(fontSize: 40, color: Colors.white), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_de_DE.json deleted file mode 100644 index 3c9dd45ce..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_de_DE.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "Animierter Container", - "info": "Vereint alignment, padding, color, decoration, width, height, constraints, margin, transform in einem. Alle diese Eigenschaften können animiert werden, können Dauer und Kurve angeben und haben ein Ereignis am Ende der Animation.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedContainer", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf am Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【color】 : Farbe 【Color】", - "【width】 : Breite 【double】", - "【height】 : Höhe 【double】", - "【alignment】 : Ausrichtung 【AlignmentGeometry】", - "【decoration】 : Dekoration 【Decoration】", - "【constraints】 : Einschränkungen 【BoxConstraints】", - "【transform】 : Transformation 【Matrix4】", - "【margin】 : Außenabstand 【EdgeInsetsGeometry】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_en_US.json deleted file mode 100644 index f9f0462c1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_en_US.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "Container Animation", - "info": "Combines alignment, padding, color, decoration, width, height, constraints, margin, and transform, all of which can be animated. You can specify the duration and curve, and there is an animation end event.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedContainer", - "desc": [ - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【color】: Color 【Color】", - "【width】: Width 【double】", - "【height】: Height 【double】", - "【alignment】: Alignment 【AlignmentGeometry】", - "【decoration】: Decoration 【Decoration】", - "【constraints】: Constraints 【BoxConstraints】", - "【transform】: Transformation 【Matrix4】", - "【margin】: Margin 【EdgeInsetsGeometry】", - "【padding】: Padding 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_es_ES.json deleted file mode 100644 index c8284b888..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_es_ES.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "Contenedor Animado", - "info": "Combina alignment, padding, color, decoration, width, height, constraints, margin, transform en uno solo. Todas estas propiedades pueden animarse, se pueden especificar la duración y la curva, y tiene un evento de finalización de animación.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedContainer", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Callback al finalizar la animación 【Function()】", - "【curve】 : Curva de la animación 【Duration】", - "【color】 : Color 【Color】", - "【width】 : Ancho 【double】", - "【height】 : Alto 【double】", - "【alignment】 : Alineación 【AlignmentGeometry】", - "【decoration】 : Decoración 【Decoration】", - "【constraints】 : Restricciones 【BoxConstraints】", - "【transform】 : Transformación 【Matrix4】", - "【margin】 : Margen exterior 【EdgeInsetsGeometry】", - "【padding】 : Margen interior 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_fr_FR.json deleted file mode 100644 index 430220dea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_fr_FR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "Animation de conteneur", - "info": "Combine alignment, padding, color, decoration, width, height, constraints, margin, transform en un seul, toutes ces propriétés peuvent être animées, la durée et la courbe peuvent être spécifiées, et il y a un événement de fin d'animation.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedContainer", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe d'animation 【Duration】", - "【color】 : Couleur 【Color】", - "【width】 : Largeur 【double】", - "【height】 : Hauteur 【double】", - "【alignment】 : Alignement 【AlignmentGeometry】", - "【decoration】 : Décoration 【Decoration】", - "【constraints】 : Contraintes 【BoxConstraints】", - "【transform】 : Transformation 【Matrix4】", - "【margin】 : Marge extérieure 【EdgeInsetsGeometry】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_it_IT.json deleted file mode 100644 index fcb17f57d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_it_IT.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "Animazione del contenitore", - "info": "Raccoglie alignment, padding, color, decoration, width, height, constraints, margin, transform in un unico componente. Tutti questi attributi possono essere animati, è possibile specificare la durata e la curva, e c'è un evento di fine animazione.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedContainer", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【color】 : Colore 【Color】", - "【width】 : Larghezza 【double】", - "【height】 : Altezza 【double】", - "【alignment】 : Allineamento 【AlignmentGeometry】", - "【decoration】 : Decorazione 【Decoration】", - "【constraints】 : Vincoli 【BoxConstraints】", - "【transform】 : Trasformazione 【Matrix4】", - "【margin】 : Margine esterno 【EdgeInsetsGeometry】", - "【padding】 : Margine interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ja_JP.json deleted file mode 100644 index 85d41bc01..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ja_JP.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "コンテナアニメーション", - "info": "alignment、padding、color、decoration、width、height、constraints、margin、transformを集約し、これらのプロパティはすべてアニメーション可能で、時間と曲線を指定でき、アニメーション終了イベントがあります。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedContainerの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【curve】 : アニメーション曲線 【Duration】", - "【color】 : 色 【Color】", - "【width】 : 幅 【double】", - "【height】 : 高さ 【double】", - "【alignment】 : 配置 【AlignmentGeometry】", - "【decoration】 : 装飾 【Decoration】", - "【constraints】 : 制約 【BoxConstraints】", - "【transform】 : 変換 【Matrix4】", - "【margin】 : 外側の余白 【EdgeInsetsGeometry】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ko_KR.json deleted file mode 100644 index 0e4e5f8a6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ko_KR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "애니메이션 컨테이너", - "info": "alignment, padding, color, decoration, width, height, constraints, margin, transform을 모두 포함하며, 이러한 속성들은 모두 애니메이션 가능하며, 지속 시간과 곡선을 지정할 수 있고, 애니메이션 종료 이벤트가 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedContainer 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【color】 : 색상 【Color】", - "【width】 : 너비 【double】", - "【height】 : 높이 【double】", - "【alignment】 : 정렬 【AlignmentGeometry】", - "【decoration】 : 장식 【Decoration】", - "【constraints】 : 제약 【BoxConstraints】", - "【transform】 : 변환 【Matrix4】", - "【margin】 : 외부 여백 【EdgeInsetsGeometry】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_pt_PT.json deleted file mode 100644 index f13eb49f4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_pt_PT.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "Animação de Contêiner", - "info": "Combina alignment, padding, color, decoration, width, height, constraints, margin, transform em um único lugar, todas essas propriedades podem ser animadas, é possível especificar a duração e a curva, e há um evento de término da animação.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedContainer", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【curve】 : Curva da animação 【Duration】", - "【color】 : Cor 【Color】", - "【width】 : Largura 【double】", - "【height】 : Altura 【double】", - "【alignment】 : Alinhamento 【AlignmentGeometry】", - "【decoration】 : Decoração 【Decoration】", - "【constraints】 : Restrições 【BoxConstraints】", - "【transform】 : Transformação 【Matrix4】", - "【margin】 : Margem externa 【EdgeInsetsGeometry】", - "【padding】 : Margem interna 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ru_RU.json deleted file mode 100644 index d0a51b159..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ru_RU.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "Анимация контейнера", - "info": "Объединяет alignment, padding, color, decoration, width, height, constraints, margin, transform. Все эти свойства могут быть анимированы, можно указать длительность и кривую, есть событие завершения анимации.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedContainer", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Длительность анимации 【Duration】", - "【onEnd】 : Обратный вызов завершения анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【color】 : Цвет 【Color】", - "【width】 : Ширина 【double】", - "【height】 : Высота 【double】", - "【alignment】 : Выравнивание 【AlignmentGeometry】", - "【decoration】 : Декорация 【Decoration】", - "【constraints】 : Ограничения 【BoxConstraints】", - "【transform】 : Преобразование 【Matrix4】", - "【margin】 : Внешний отступ 【EdgeInsetsGeometry】", - "【padding】 : Внутренний отступ 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_zh-CN.json deleted file mode 100644 index dbec27ada..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_zh-CN.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "容器动画", - "info": "集合alignment、padding、color、decoration、width、height、constraints、margin、transform于一身,这些属性皆可动画,可指定时长和曲线,有动画结束事件。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedContainer基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【color】 : 颜色 【Color】", - "【width】 : 宽 【double】", - "【height】 : 高 【double】", - "【alignment】 : 对齐 【AlignmentGeometry】", - "【decoration】 : 装饰 【Decoration】", - "【constraints】 : 约束 【BoxConstraints】", - "【transform】 : 变化 【Matrix4】", - "【margin】 : 外边距 【EdgeInsetsGeometry】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/node1_base.dart deleted file mode 100644 index e65689a2c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/node1_base.dart +++ /dev/null @@ -1,94 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedContainer extends StatefulWidget { - const CustomAnimatedContainer({Key? key}) : super(key: key); - - @override - _CustomAnimatedContainerState createState() => - _CustomAnimatedContainerState(); -} - -class _CustomAnimatedContainerState extends State { - final Decoration startDecoration = const BoxDecoration( - color: Colors.deepPurple, - borderRadius: BorderRadius.all(Radius.circular(30)), - boxShadow: [ - BoxShadow( - offset: Offset(1, 1), - color: Colors.purple, - blurRadius: 5, - spreadRadius: 2) - ]); - final Decoration endDecoration = const BoxDecoration( - color: Colors.blue, - borderRadius: BorderRadius.all(Radius.circular(10)), - boxShadow: [ - BoxShadow( - offset: Offset(1, 1), - color: Colors.blue, - blurRadius: 10, - spreadRadius: 0) - ]); - - final Alignment startAlignment = Alignment.topLeft + const Alignment(0.2, 0.2); - final Alignment endAlignment = Alignment.center; - - final double startHeight = 150.0; - final double endHeight = 100.0; - - late Decoration _decoration; - late double _height; - late Alignment _alignment; - - @override - void initState() { - super.initState(); - _decoration = startDecoration; - _height = startHeight; - _alignment = startAlignment; - } - - bool get selected => _height == endHeight; - @override - Widget build(BuildContext context) { - return Wrap( - direction: Axis.vertical, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Switch( - value: selected, - onChanged: onChanged, - ), - buildAnim() - ], - ); - } - Widget _buildChild() => const Icon( - Icons.camera_outlined, - size: 30, - color: Colors.white, - ); - Widget buildAnim() => AnimatedContainer( - duration: const Duration(seconds: 1), - curve: Curves.fastOutSlowIn, - decoration: _decoration, - alignment: _alignment, - onEnd: onEnd, - height: _height, - width: _height, - child: _buildChild(), - ); - void onChanged(bool value) { - setState(() { - _height = value ? endHeight : startHeight; - _decoration = value ? endDecoration : startDecoration; - _alignment = value ? endAlignment : startAlignment; - }); - } - void onEnd() { - print('End'); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_de_DE.json deleted file mode 100644 index f98e50550..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_de_DE.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "Komponentenwechsel", - "info": "Zeigt Animationseffekte beim Wechsel zwischen zwei Komponenten an. Eigenschaften wie Animationskurve, Dauer, Ausrichtung usw. können angegeben werden. Es ist eine sehr nützliche Komponente.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedCrossFade", - "desc": [ - "【firstChild】 : Erstes Kind 【Widget】", - "【secondChild】 : Zweites Kind 【Widget】", - "【crossFadeState】 : Welches anzeigen 【CrossFadeState】", - "【duration】 : Dauer 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "Animationskurve von AnimatedCrossFade", - "desc": [ - "【firstCurve】 : Erste Kurve 【Curve】", - "【secondCurve】 : Zweite Kurve 【Curve】", - "【sizeCurve】 : Größenänderungskurve 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_en_US.json deleted file mode 100644 index 047e68db6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_en_US.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "Component Switch", - "info": "Presents animation effects when switching between two components, allowing you to specify properties such as animation curves, duration, alignment, etc. It is a very useful component.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedCrossFade", - "desc": [ - "【firstChild】 : First Child 【Widget】", - "【secondChild】 : Second Child 【Widget】", - "【crossFadeState】 : Which to Display 【CrossFadeState】", - "【duration】 : Duration 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "Animation Curves of AnimatedCrossFade", - "desc": [ - "【firstCurve】 : First Curve 【Curve】", - "【secondCurve】 : Second Curve 【Curve】", - "【sizeCurve】 : Size Change Curve 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_es_ES.json deleted file mode 100644 index f743f5441..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_es_ES.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "Transición de componentes", - "info": "Muestra un efecto de animación al cambiar entre dos componentes, se pueden especificar propiedades como la curva de animación, la duración, la alineación, etc. Es un componente muy útil.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedCrossFade", - "desc": [ - "【firstChild】 : Primer hijo 【Widget】", - "【secondChild】 : Segundo hijo 【Widget】", - "【crossFadeState】 : Mostrar cuál 【CrossFadeState】", - "【duration】 : Duración 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "Curva de animación de AnimatedCrossFade", - "desc": [ - "【firstCurve】 : Primera curva 【Curve】", - "【secondCurve】 : Segunda curva 【Curve】", - "【sizeCurve】 : Curva de cambio de tamaño 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_fr_FR.json deleted file mode 100644 index 530d0ad95..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_fr_FR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "Transition de composants", - "info": "Anime la transition entre deux composants avec des effets, en spécifiant des propriétés telles que la courbe d'animation, la durée, l'alignement, etc. C'est un composant très utile.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedCrossFade", - "desc": [ - "【firstChild】 : Premier enfant 【Widget】", - "【secondChild】 : Deuxième enfant 【Widget】", - "【crossFadeState】 : Afficher lequel 【CrossFadeState】", - "【duration】 : Durée 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "Courbe d'animation d'AnimatedCrossFade", - "desc": [ - "【firstCurve】 : Première courbe 【Curve】", - "【secondCurve】 : Deuxième courbe 【Curve】", - "【sizeCurve】 : Courbe de changement de taille 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_it_IT.json deleted file mode 100644 index 9795e9a9e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_it_IT.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "Transizione Componenti", - "info": "Presenta un effetto animato quando si passa da un componente all'altro, è possibile specificare proprietà come la curva di animazione, la durata, l'allineamento, ecc. È un componente molto utile.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di AnimatedCrossFade", - "desc": [ - "【firstChild】 : Primo figlio 【Widget】", - "【secondChild】 : Secondo figlio 【Widget】", - "【crossFadeState】 : Mostra quale 【CrossFadeState】", - "【duration】 : Durata 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "Curva di Animazione di AnimatedCrossFade", - "desc": [ - "【firstCurve】 : Prima curva 【Curve】", - "【secondCurve】 : Seconda curva 【Curve】", - "【sizeCurve】 : Curva di variazione dimensionale 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ja_JP.json deleted file mode 100644 index 338813187..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ja_JP.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "コンポーネント切り替え", - "info": "2つのコンポーネントを切り替える際にアニメーション効果を表示し、アニメーションカーブ、時間、配置方法などの属性を指定できます。非常に便利なコンポーネントです。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedCrossFadeの基本使用", - "desc": [ - "【firstChild】 : 最初の子 【Widget】", - "【secondChild】 : 2番目の子 【Widget】", - "【crossFadeState】 : 表示する番号 【CrossFadeState】", - "【duration】 : 時間 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "AnimatedCrossFadeのアニメーションカーブ", - "desc": [ - "【firstCurve】 : 最初のカーブ 【Curve】", - "【secondCurve】 : 2番目のカーブ 【Curve】", - "【sizeCurve】 : サイズ変化カーブ 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ko_KR.json deleted file mode 100644 index 6531263ea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ko_KR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "컴포넌트 전환", - "info": "두 컴포넌트를 전환할 때 애니메이션 효과를 나타내며, 애니메이션 곡선, 지속 시간, 정렬 방식 등의 속성을 지정할 수 있습니다. 매우 유용한 컴포넌트입니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedCrossFade 기본 사용", - "desc": [ - "【firstChild】 : 첫 번째 자식 【Widget】", - "【secondChild】 : 두 번째 자식 【Widget】", - "【crossFadeState】 : 몇 번째를 표시할지 【CrossFadeState】", - "【duration】 : 지속 시간 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "AnimatedCrossFade 애니메이션 곡선", - "desc": [ - "【firstCurve】 : 첫 번째 곡선 【Curve】", - "【secondCurve】 : 두 번째 곡선 【Curve】", - "【sizeCurve】 : 크기 변화 곡선 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_pt_PT.json deleted file mode 100644 index 1537e8a37..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_pt_PT.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "Transição de Componentes", - "info": "Apresenta um efeito de animação ao alternar entre dois componentes, podendo especificar propriedades como a curva de animação, duração, alinhamento, etc. É um componente muito útil.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedCrossFade", - "desc": [ - "【firstChild】 : Primeiro filho 【Widget】", - "【secondChild】 : Segundo filho 【Widget】", - "【crossFadeState】 : Mostrar qual 【CrossFadeState】", - "【duration】 : Duração 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "Curva de Animação do AnimatedCrossFade", - "desc": [ - "【firstCurve】 : Primeira curva 【Curve】", - "【secondCurve】 : Segunda curva 【Curve】", - "【sizeCurve】 : Curva de mudança de tamanho 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ru_RU.json deleted file mode 100644 index 2ab52f739..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ru_RU.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "Переключение компонентов", - "info": "При переключении двух компонентов отображается анимация, можно указать такие свойства, как кривая анимации, продолжительность, выравнивание и т.д. Это очень полезный компонент.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedCrossFade", - "desc": [ - "【firstChild】 : Первый ребенок 【Widget】", - "【secondChild】 : Второй ребенок 【Widget】", - "【crossFadeState】 : Показать какой 【CrossFadeState】", - "【duration】 : Продолжительность 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "Кривая анимации AnimatedCrossFade", - "desc": [ - "【firstCurve】 : Первая кривая 【Curve】", - "【secondCurve】 : Вторая кривая 【Curve】", - "【sizeCurve】 : Кривая изменения размера 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_zh-CN.json deleted file mode 100644 index 1c0695851..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_zh-CN.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "组件切换", - "info": "将两个组件切换时呈现动画效果,可指定动画曲线、时长、对齐方式等属性。是一个非常有用的组件。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedCrossFade基本使用", - "desc": [ - "【firstChild】 : 第一孩子 【Widget】", - "【secondChild】 : 第二孩子 【Widget】", - "【crossFadeState】 : 显示第几个 【CrossFadeState】", - "【duration】 : 时长 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "AnimatedCrossFade动画曲线", - "desc": [ - "【firstCurve】 : 第一曲线 【Curve】", - "【secondCurve】 : 第二曲线 【Curve】", - "【sizeCurve】 : 尺寸变化曲线 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/node1_base.dart deleted file mode 100644 index 627d7861c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/node1_base.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-20 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedCrossFade extends StatefulWidget { - const CustomAnimatedCrossFade({Key? key}) : super(key: key); - - @override - _CustomAnimatedCrossFadeState createState() => - _CustomAnimatedCrossFadeState(); -} - -class _CustomAnimatedCrossFadeState extends State { - CrossFadeState _crossFadeState = CrossFadeState.showFirst; - - bool get isFirst => _crossFadeState == CrossFadeState.showFirst; - - @override - Widget build(BuildContext context) { - return Wrap( - children: [ - AnimatedCrossFade( - firstChild: Container( - alignment: Alignment.center, - width: 200, - height: 150, - color: Colors.orange, - child: const FlutterLogo(textColor: Colors.blue, size: 100,), - ), - secondChild: Container( - width: 200, - height: 150, - alignment: Alignment.center, - color: Colors.blue, - child: const FlutterLogo( - textColor: Colors.white, -// colors: Colors.orange, - size: 100, - style: FlutterLogoStyle.stacked,), - ), - duration: const Duration(milliseconds: 600), - crossFadeState: _crossFadeState, - ), - _buildSwitch(), - ], - - ); - } - - Widget _buildSwitch() => - Switch(value: isFirst, onChanged: (v) { - setState(() { - _crossFadeState = - v ? CrossFadeState.showFirst : CrossFadeState.showSecond; - }); - }); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/node2_curve.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/node2_curve.dart deleted file mode 100644 index 946798ae2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/node2_curve.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-20 -/// contact me by email 1981462002@qq.com - -class CurveAnimatedCrossFade extends StatefulWidget { - const CurveAnimatedCrossFade({Key? key}) : super(key: key); - - @override - _CurveAnimatedCrossFadeState createState() => _CurveAnimatedCrossFadeState(); -} - -class _CurveAnimatedCrossFadeState extends State { - var _crossFadeState = CrossFadeState.showFirst; - - bool get isFirst=> _crossFadeState == CrossFadeState.showFirst; - - @override - Widget build(BuildContext context) { - return Wrap( - children: [ - AnimatedCrossFade( - firstCurve: Curves.easeInCirc, - secondCurve: Curves.easeInToLinear, - sizeCurve: Curves.bounceOut, - firstChild: Container( - alignment: Alignment.center, - width: 200, - height: 80, - color: Colors.orange , - child: const FlutterLogo(textColor: Colors.blue,size: 50,), - ), - secondChild: Container( - width: 200, - height: 150, - alignment: Alignment.center, - color: Colors.blue, - child: const FlutterLogo( - textColor: Colors.white, -// colors: Colors.orange, - size: 100,style: FlutterLogoStyle.stacked,), - ), - duration: const Duration(milliseconds: 1000), - crossFadeState: _crossFadeState, - ), - _buildSwitch(), - ], - ); - } - - Widget _buildSwitch() => Switch(value: isFirst, onChanged: (v){ - setState(() { - _crossFadeState= v?CrossFadeState.showFirst:CrossFadeState.showSecond; - }); - }); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_de_DE.json deleted file mode 100644 index 100cc0663..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "Container-Animation", - "info": "Ermöglicht die Animation von TextStyle (Textstil) für untergeordnete Textkomponenten, gibt Dauer und Kurve an und verfügt über ein Ereignis zum Ende der Animation.", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedDefaultTextStyle", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf bei Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【textAlign】 : Textausrichtung 【TextAlign】", - "【softWrap】 : Umhüllung 【bool】", - "【maxLines】 : Maximale Zeilenanzahl 【int】", - "【overflow】 : Überlaufmodus 【TextOverflow】", - "【style】 : Textstil 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_en_US.json deleted file mode 100644 index 59279303e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "Container Animation", - "info": "Allows child text components to perform TextStyle (text style) animations, with specified duration and curve, and has an animation end event.", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedDefaultTextStyle", - "desc": [ - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【textAlign】: Text alignment 【TextAlign】", - "【softWrap】: Whether to wrap 【bool】", - "【maxLines】: Maximum number of lines 【int】", - "【overflow】: Overflow mode 【TextOverflow】", - "【style】: Text style 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_es_ES.json deleted file mode 100644 index c54a2bd4d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "Animación de contenedor", - "info": "Permite que los componentes de texto hijos realicen una animación de TextStyle (estilo de texto), se puede especificar la duración y la curva, y tiene un evento de finalización de la animación.", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedDefaultTextStyle", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Callback de finalización de la animación 【Function()】", - "【curve】 : Curva de la animación 【Duration】", - "【textAlign】 : Alineación del texto 【TextAlign】", - "【softWrap】 : Si se envuelve 【bool】", - "【maxLines】 : Número máximo de líneas 【int】", - "【overflow】 : Modo de desbordamiento 【TextOverflow】", - "【style】 : Estilo de texto 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_fr_FR.json deleted file mode 100644 index 939dd0774..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "Animation de conteneur", - "info": "Permet aux composants texte enfants d'effectuer une animation TextStyle (style de texte), peut spécifier la durée et la courbe, et dispose d'un événement de fin d'animation.", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedDefaultTextStyle", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe d'animation 【Duration】", - "【textAlign】 : Alignement du texte 【TextAlign】", - "【softWrap】 : Encapsulage 【bool】", - "【maxLines】 : Nombre maximum de lignes 【int】", - "【overflow】 : Mode de débordement 【TextOverflow】", - "【style】 : Style de texte 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_it_IT.json deleted file mode 100644 index 058c9f6a9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "Animazione del contenitore", - "info": "Consente ai componenti di testo figlio di animare lo stile del testo (TextStyle), con la possibilità di specificare durata e curva, e un evento di fine animazione.", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedDefaultTextStyle", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【textAlign】 : Allineamento del testo 【TextAlign】", - "【softWrap】 : Avvolgimento del testo 【bool】", - "【maxLines】 : Numero massimo di righe 【int】", - "【overflow】 : Modalità di overflow 【TextOverflow】", - "【style】 : Stile del testo 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ja_JP.json deleted file mode 100644 index 77d50c449..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "コンテナアニメーション", - "info": "子テキストコンポーネントにTextStyle(テキストスタイル)アニメーションを適用できます。時間と曲線を指定でき、アニメーション終了イベントがあります。", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedDefaultTextStyleの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【curve】 : アニメーション曲線 【Duration】", - "【textAlign】 : テキストの配置 【TextAlign】", - "【softWrap】 : ラップするかどうか 【bool】", - "【maxLines】 : 最大行数 【int】", - "【overflow】 : オーバーフローモード 【TextOverflow】", - "【style】 : テキストスタイル 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ko_KR.json deleted file mode 100644 index b68b4dce5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "컨테이너 애니메이션", - "info": "자식 텍스트 컴포넌트에 TextStyle(텍스트 스타일) 애니메이션을 적용할 수 있으며, 지속 시간과 곡선을 지정할 수 있고 애니메이션 종료 이벤트가 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedDefaultTextStyle 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【textAlign】 : 텍스트 정렬 방식 【TextAlign】", - "【softWrap】 : 감싸기 여부 【bool】", - "【maxLines】 : 최대 줄 수 【int】", - "【overflow】 : 오버플로우 모드 【TextOverflow】", - "【style】 : 텍스트 스타일 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_pt_PT.json deleted file mode 100644 index d95c63a4f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "Animação de Contêiner", - "info": "Permite que componentes de texto filhos realizem animações de TextStyle (estilo de texto), pode especificar duração e curva, e possui evento de término de animação.", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedDefaultTextStyle", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【curve】 : Curva da animação 【Duration】", - "【textAlign】 : Alinhamento do texto 【TextAlign】", - "【softWrap】 : Se deve envolver 【bool】", - "【maxLines】 : Número máximo de linhas 【int】", - "【overflow】 : Modo de overflow 【TextOverflow】", - "【style】 : Estilo de texto 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ru_RU.json deleted file mode 100644 index 83117ad5c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "Анимация контейнера", - "info": "Позволяет дочерним текстовым компонентам анимировать TextStyle (стиль текста), можно указать продолжительность и кривую, есть событие завершения анимации.", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedDefaultTextStyle", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Продолжительность анимации 【Duration】", - "【onEnd】 : Обратный вызов завершения анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【textAlign】 : Выравнивание текста 【TextAlign】", - "【softWrap】 : Обёртка 【bool】", - "【maxLines】 : Максимальное количество строк 【int】", - "【overflow】 : Режим переполнения 【TextOverflow】", - "【style】 : Стиль текста 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_zh-CN.json deleted file mode 100644 index 0f48f68e3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "容器动画", - "info": "能让子文字组件进行TextStyle(文字样式)动画,可指定时长和曲线,有动画结束事件。", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedDefaultTextStyle基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【textAlign】 : 文字对齐方式 【TextAlign】", - "【softWrap】 : 是否包裹 【bool】", - "【maxLines】 : 最大行数 【int】", - "【overflow】 : 溢出模式 【TextOverflow】", - "【style】 : 文字样式 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/node1_base.dart deleted file mode 100644 index 5923a1f9d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/node1_base.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedDefaultTextStyle extends StatefulWidget { - const CustomAnimatedDefaultTextStyle({Key? key}) : super(key: key); - - @override - _CustomAnimatedDefaultTextStyleState createState() => - _CustomAnimatedDefaultTextStyleState(); -} - -class _CustomAnimatedDefaultTextStyleState - extends State { - final TextStyle start = const TextStyle( - color: Colors.blue, - fontSize: 50, - shadows: [ - Shadow(offset: Offset(1, 1), color: Colors.black, blurRadius: 3) - ]); - final TextStyle end = const TextStyle( - color: Colors.white, - fontSize: 20, - shadows: [ - Shadow(offset: Offset(1, 1), color: Colors.purple, blurRadius: 3) - ]); - - late TextStyle _style; - - @override - void initState() { - _style = start; - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSwitch(), - Container( - alignment: Alignment.center, - color: Colors.grey.withAlpha(22), - width: 300, - height: 100, - child: AnimatedDefaultTextStyle( - textAlign: TextAlign.start, - softWrap: true, - maxLines: 1, - overflow: TextOverflow.ellipsis, - duration: const Duration(seconds: 1), - curve: Curves.fastOutSlowIn, - style: _style, - onEnd: () => print('End'), - child: const Text( - '张风捷特烈', - style: TextStyle(color: Colors.white), - ), - ), - ), - ], - ); - } - - Widget _buildSwitch() => Switch( - value: _style == end, - onChanged: (v) { - setState(() { - _style = v ? end : start; - }); - }); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_de_DE.json deleted file mode 100644 index df9f04640..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "Animierte Bruchteilbox", - "info": "Animierte Version von FractionallySizedBox, die sich automatisch und sanft innerhalb der angegebenen Dauer zur Zielgröße und Position des Kindelements übergeht, wenn sich widthFactor oder heightFactor ändern sowie wenn sich die Ausrichtung ändert.", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Animationsübergangseffekt", - "desc": [ - "In diesem Fall werden die Parameter heightFactor, widthFactor und alignment beim Klicken geändert, um den Animationseffekt zu sehen.", - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf bei Animationsende 【Function()】", - "【alignment】 : Animationszentrum 【Alignment】", - "【curve】 : Animationskurve 【Duration】", - "【heightFactor】 : Höhenfaktor 【double?】", - "【widthFactor】 : Breitenfaktor 【double?】", - "【turns】 : Drehungsmenge 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_en_US.json deleted file mode 100644 index 5edb98fd8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "Animated Fractionally Sized Box", - "info": "An animated version of FractionallySizedBox, which automatically and smoothly transitions to the target size and position of the child component within the specified duration when the widthFactor or heightFactor changes, or when the alignment changes.", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Animation Transition Effect", - "desc": [ - "In this case, the heightFactor, widthFactor, and alignment parameters are modified when clicked to view the animation effect.", - "【child】 : Child component 【Widget】", - "【duration】 : Animation duration 【Duration】", - "【onEnd】 : Animation end callback 【Function()】", - "【alignment】 : Animation transformation center 【Alignment】", - "【curve】 : Animation curve 【Duration】", - "【heightFactor】 : Height factor 【double?】", - "【widthFactor】 : Width factor 【double?】", - "【turns】 : Rotation amount 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_es_ES.json deleted file mode 100644 index a05b4fdc7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "Caja de tamaño fraccional animada", - "info": "Versión animada de FractionallySizedBox, cuando cambia el widthFactor o el heightFactor, así como cuando cambia el alignment, se realizará una transición suave automática a las dimensiones y posición objetivo del componente hijo en la duración especificada.", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Efecto de transición animada", - "desc": [ - "En este caso, al hacer clic se modifican los parámetros heightFactor, widthFactor, alignment para ver el efecto de movimiento animado.", - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Devolución de llamada al finalizar la animación 【Function()】", - "【alignment】 : Centro de transformación de la animación 【Alignment】", - "【curve】 : Curva de la animación 【Duration】", - "【heightFactor】 : Factor de altura 【double?】", - "【widthFactor】 : Factor de ancho 【double?】", - "【turns】 : Cantidad de rotación 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_fr_FR.json deleted file mode 100644 index 9662b770c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "Boîte fractionnée animée", - "info": "Version animée de FractionallySizedBox, lorsque widthFactor ou heightFactor change, ainsi que lorsque l'alignement change, elle transite automatiquement et en douceur vers la taille et la position cible du composant enfant dans la durée spécifiée.", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Effet de transition animée", - "desc": [ - "Dans ce cas, en cliquant, les paramètres heightFactor, widthFactor et alignment sont modifiés pour observer l'effet de mouvement animé.", - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【alignment】 : Centre de transformation de l'animation 【Alignment】", - "【curve】 : Courbe de l'animation 【Duration】", - "【heightFactor】 : Facteur de hauteur 【double?】", - "【widthFactor】 : Facteur de largeur 【double?】", - "【turns】 : Quantité de rotation 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_it_IT.json deleted file mode 100644 index 96dd4486f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "Scatola animata frazionata", - "info": "Versione animata di FractionallySizedBox, quando widthFactor o heightFactor cambiano, così come quando alignment cambia, si transiziona automaticamente e dolcemente alle dimensioni e posizioni target del componente figlio entro la durata specificata.", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Effetto di transizione animata", - "desc": [ - "In questo caso, cliccando si modificano i parametri heightFactor, widthFactor, alignment, per osservare l'effetto del movimento animato.", - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【alignment】 : Centro di trasformazione dell'animazione 【Alignment】", - "【curve】 : Curva dell'animazione 【Duration】", - "【heightFactor】 : Fattore di altezza 【double?】", - "【widthFactor】 : Fattore di larghezza 【double?】", - "【turns】 : Quantità di rotazione 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ja_JP.json deleted file mode 100644 index 70b690cb8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "アニメーションフラクショナリーボックス", - "info": "FractionallySizedBox のアニメーションバージョンで、widthFactor または heightFactor が変化したとき、および alignment が変更されたときに、指定された期間内で子コンポーネントの目標サイズと位置に自動的にスムーズに遷移します。", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "アニメーション遷移効果", - "desc": [ - "このケースでは、クリックすると heightFactor、widthFactor、alignment パラメータが変更され、アニメーションの動きを確認できます。", - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【alignment】 : アニメーション変換中心 【Alignment】", - "【curve】 : アニメーションカーブ 【Duration】", - "【heightFactor】 : 高さ分率 【double?】", - "【widthFactor】 : 幅分率 【double?】", - "【turns】 : 回転量 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ko_KR.json deleted file mode 100644 index 036dd40f1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "애니메이션 분율 박스", - "info": "FractionallySizedBox의 애니메이션 버전으로, widthFactor 또는 heightFactor가 변경될 때, 그리고 alignment가 변경될 때 지정된 지속 시간 동안 자동으로 부드럽게 자식 위젯의 목표 크기와 위치로 전환됩니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "애니메이션 전환 효과", - "desc": [ - "이 예제에서는 클릭 시 heightFactor, widthFactor, alignment 매개변수를 수정하여 애니메이션 동작 효과를 확인합니다.", - "【child】 : 자식 위젯 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【alignment】 : 애니메이션 변환 중심 【Alignment】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【heightFactor】 : 높이 분율 【double?】", - "【widthFactor】 : 너비 분율 【double?】", - "【turns】 : 회전량 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_pt_PT.json deleted file mode 100644 index 1b3855532..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "Caixa de Fração Animada", - "info": "Versão animada do FractionallySizedBox, quando o widthFactor ou heightFactor muda, assim como a alignment, ele faz automaticamente uma transição suave para o tamanho e posição desejados do componente filho dentro da duração especificada.", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Efeito de Transição Animada", - "desc": [ - "Neste caso, ao clicar, os parâmetros heightFactor, widthFactor e alignment são modificados para visualizar o efeito de movimento da animação.", - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de fim da animação 【Function()】", - "【alignment】 : Centro de transformação da animação 【Alignment】", - "【curve】 : Curva da animação 【Duration】", - "【heightFactor】 : Fator de altura 【double?】", - "【widthFactor】 : Fator de largura 【double?】", - "【turns】 : Quantidade de rotação 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ru_RU.json deleted file mode 100644 index 8efe05d52..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "Анимированный FractionallySizedBox", - "info": "Анимированная версия FractionallySizedBox, которая автоматически плавно переходит к целевому размеру и положению дочернего компонента в течение указанной продолжительности при изменении widthFactor или heightFactor, а также при изменении alignment.", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Анимационный переход", - "desc": [ - "В этом примере при нажатии изменяются параметры heightFactor, widthFactor и alignment, чтобы увидеть эффект анимации.", - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Длительность анимации 【Duration】", - "【onEnd】 : Обратный вызов по завершении анимации 【Function()】", - "【alignment】 : Центр анимационного преобразования 【Alignment】", - "【curve】 : Кривая анимации 【Duration】", - "【heightFactor】 : Коэффициент высоты 【double?】", - "【widthFactor】 : Коэффициент ширины 【double?】", - "【turns】 : Количество поворотов 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_zh-CN.json deleted file mode 100644 index 5408f22fc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "动画分率盒", - "info": "FractionallySizedBox 的动画版本,当 widthFactor 或 heightFactor 变化时, 以及 alignment 改变时,都会在指定的持续时间内自动平滑过渡到子组件的目标尺寸和位置。", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "动画过渡效果", - "desc": [ - "该案例中,点击时会修改 heightFactor、widthFactor、alignment 参数,查看动画运动效果。", - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【alignment】 : 动画变换中心 【Alignment】", - "【curve】 : 动画曲线 【Duration】", - "【heightFactor】 : 高度分率 【double?】", - "【widthFactor】 : 宽度分率 【double?】", - "【turns】 : 旋转量 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/node1.dart deleted file mode 100644 index c870a4555..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/node1.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -class AnimatedFractionallySizedBoxDemo extends StatefulWidget { - const AnimatedFractionallySizedBoxDemo({super.key}); - - @override - State createState() => _AnimatedFractionallySizedBoxDemoState(); -} - -class _AnimatedFractionallySizedBoxDemoState - extends State { - bool selected = false; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 240, - child: Center( - child: GestureDetector( - onTap: () { - setState(() { - selected = !selected; - }); - }, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - _buildCell(), - const SizedBox(height: 4), - const Text('点击面板') - ], - ), - ), - ), - ); - } - - Widget _buildCell() { - return SizedBox( - width: 200, - height: 200, - child: ColoredBox( - color: Colors.red, - child: AnimatedFractionallySizedBox( - widthFactor: selected ? 0.25 : 0.75, - heightFactor: selected ? 0.75 : 0.25, - alignment: selected ? Alignment.topLeft : Alignment.bottomRight, - duration: const Duration(seconds: 1), - curve: Curves.fastOutSlowIn, - child: const ColoredBox( - color: Colors.blue, - child: FlutterLogo(size: 75), - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_de_DE.json deleted file mode 100644 index 4b077f164..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "Animierte Liste", - "info": "Erweiterte Version von ListView, die Animationen für Elemente ermöglicht. Zum Beispiel Animationen beim Hinzufügen oder Entfernen von Elementen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedList", - "desc": [ - "【itemBuilder】 : Komponentenkonstruktor 【AnimatedListItemBuilder】", - "【initialItemCount】 : Anzahl der Unterkomponenten 【int】", - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【controller】 : Scroll-Controller 【ScrollController】", - "【reverse】 : Daten umgekehrt 【bool】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_en_US.json deleted file mode 100644 index ffc8e3359..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "Animated List", - "info": "An enhanced version of ListView, which can animate items. For example, animations for adding or deleting items.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedList", - "desc": [ - "【itemBuilder】: Component builder 【AnimatedListItemBuilder】", - "【initialItemCount】: Number of child components 【int】", - "【scrollDirection】: Scroll direction 【Axis】", - "【controller】: Scroll controller 【ScrollController】", - "【reverse】: Whether the data is reversed 【bool】", - "【padding】: Padding 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_es_ES.json deleted file mode 100644 index e4b800f47..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "Lista animada", - "info": "Versión mejorada de ListView, permite animar los ítems. Por ejemplo, animaciones al añadir o eliminar ítems.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedList", - "desc": [ - "【itemBuilder】: Constructor de componentes 【AnimatedListItemBuilder】", - "【initialItemCount】: Número de componentes hijos 【int】", - "【scrollDirection】: Dirección de desplazamiento 【Axis】", - "【controller】: Controlador de desplazamiento 【ScrollController】", - "【reverse】: Si los datos están invertidos 【bool】", - "【padding】: Relleno interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_fr_FR.json deleted file mode 100644 index 085b8bb7f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "Liste animée", - "info": "Une version améliorée de ListView, permettant d'animer les éléments. Par exemple, des animations lors de l'ajout ou de la suppression d'éléments.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedList", - "desc": [ - "【itemBuilder】 : Constructeur de composants 【AnimatedListItemBuilder】", - "【initialItemCount】 : Nombre de composants enfants 【int】", - "【scrollDirection】 : Direction de défilement 【Axis】", - "【controller】 : Contrôleur de défilement 【ScrollController】", - "【reverse】 : Inversion des données 【bool】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_it_IT.json deleted file mode 100644 index d31874c9e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "Lista Animata", - "info": "Versione potenziata di ListView, consente di animare gli item. Ad esempio, animazioni degli item durante l'aggiunta o la rimozione.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedList", - "desc": [ - "【itemBuilder】 : Costruttore di componenti 【AnimatedListItemBuilder】", - "【initialItemCount】 : Numero di componenti figli 【int】", - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【controller】 : Controllore di scorrimento 【ScrollController】", - "【reverse】 : Se i dati sono invertiti 【bool】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ja_JP.json deleted file mode 100644 index 3a73e79fc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "アニメーションリスト", - "info": "強化版のListViewで、アイテムにアニメーションを適用できます。例えば、追加や削除時のアイテムのアニメーションなど。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedListの基本使用", - "desc": [ - "【itemBuilder】 : コンポーネントビルダー 【AnimatedListItemBuilder】", - "【initialItemCount】 : サブコンポーネントの数 【int】", - "【scrollDirection】 : スライド方向 【Axis】", - "【controller】 : スライドコントローラー 【ScrollController】", - "【reverse】 : データが逆順かどうか 【bool】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ko_KR.json deleted file mode 100644 index 6e1f1c136..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "애니메이션 리스트", - "info": "강화된 ListView, 아이템에 애니메이션을 적용할 수 있습니다. 예를 들어 추가, 삭제 시 아이템의 애니메이션.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedList 기본 사용", - "desc": [ - "【itemBuilder】 : 컴포넌트 생성기 【AnimatedListItemBuilder】", - "【initialItemCount】 : 하위 컴포넌트 수 【int】", - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【controller】 : 스크롤 컨트롤러 【ScrollController】", - "【reverse】 : 데이터 반전 여부 【bool】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_pt_PT.json deleted file mode 100644 index 5b981ca1c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "Lista Animada", - "info": "Versão aprimorada do ListView, que permite animar os itens. Por exemplo, animações ao adicionar ou remover itens.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedList", - "desc": [ - "【itemBuilder】: Construtor de componentes 【AnimatedListItemBuilder】", - "【initialItemCount】: Número de subcomponentes 【int】", - "【scrollDirection】: Direção de deslizamento 【Axis】", - "【controller】: Controlador de deslizamento 【ScrollController】", - "【reverse】: Se os dados estão invertidos 【bool】", - "【padding】: Preenchimento interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ru_RU.json deleted file mode 100644 index 7aade432b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "Анимированный список", - "info": "Улучшенная версия ListView, которая позволяет анимировать элементы. Например, анимация при добавлении или удалении элементов.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedList", - "desc": [ - "【itemBuilder】 : Конструктор компонента 【AnimatedListItemBuilder】", - "【initialItemCount】 : Количество дочерних компонентов 【int】", - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【controller】 : Контроллер прокрутки 【ScrollController】", - "【reverse】 : Обратный порядок данных 【bool】", - "【padding】 : Внутренний отступ 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_zh-CN.json deleted file mode 100644 index 0553e92f5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "动画列表", - "info": "强化版的ListView,可以对item进行动画处理。比如在添加、删除是item的动画。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedList基本使用", - "desc": [ - "【itemBuilder】 : 组件构造器 【AnimatedListItemBuilder】", - "【initialItemCount】 : 子组件数量 【int】", - "【scrollDirection】 : 滑动方向 【Axis】", - "【controller】 : 滑动控制器 【ScrollController】", - "【reverse】 : 数据是否反向 【bool】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/node1_base.dart deleted file mode 100644 index 9f5ded80a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/node1_base.dart +++ /dev/null @@ -1,179 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedList extends StatefulWidget { - const CustomAnimatedList({super.key}); - - @override - State createState() => _CustomAnimatedListState(); -} - -class _CustomAnimatedListState extends State { - final GlobalKey _listKey = GlobalKey(); - late ListModel _list; - int? _selectedItem; - int _nextItem = 0; - - @override - void initState() { - super.initState(); - _list = ListModel( - listKey: _listKey, - initialItems: [0, 1, 2, 3], - removedItemBuilder: _buildRemovedItem, - ); - _nextItem = 4; - } - - Widget _buildItem( - BuildContext context, int index, Animation animation) { - return _CardItem( - animation: animation, - item: _list[index], - selected: _selectedItem == _list[index], - onTap: () { - setState(() { - _selectedItem = _selectedItem == _list[index] ? null : _list[index]; - }); - }, - ); - } - - Widget _buildRemovedItem( - int item, BuildContext context, Animation animation) { - return _CardItem( - animation: animation, - item: item, - selected: false, - ); - } - - void _insert() { - final int index = - _selectedItem == null ? _list.length : _list.indexOf(_selectedItem!); - _list.insert(index, _nextItem++); - } - - void _remove() { - if (_selectedItem != null) { - _list.removeAt(_list.indexOf(_selectedItem!)); - setState(() { - _selectedItem = null; - }); - } - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.grey.withAlpha(33), - width: MediaQuery.of(context).size.width/2, - child: Column( - children: [ - _buildBtn(), - SizedBox( - width: MediaQuery.of(context).size.width/2, - height: 300, - child: AnimatedList( - padding: const EdgeInsets.all(10.0), - key: _listKey, - initialItemCount: _list.length, - itemBuilder: _buildItem, - ), - ) - ], - )); - } - - Widget _buildBtn() => Row( - children: [ - IconButton( - icon: const Icon( - Icons.add_circle, - color: Colors.blue, - ), - onPressed: _insert, - ), - IconButton( - icon: const Icon(Icons.remove_circle, color: Colors.blue), - onPressed: _remove, - ), - ], - ); -} - -class ListModel { - ListModel({ - required this.listKey, - required this.removedItemBuilder, - required Iterable initialItems, - }) : assert(removedItemBuilder != null), - _items = List.from(initialItems); - final GlobalKey listKey; - final dynamic removedItemBuilder; - final List _items; - - AnimatedListState? get _animatedList => listKey.currentState; - - void insert(int index, E item) { - _items.insert(index, item); - _animatedList?.insertItem(index); - } - - E removeAt(int index) { - final E removedItem = _items.removeAt(index); - if (removedItem != null) { - _animatedList?.removeItem( - index, - (BuildContext context, Animation animation) => - removedItemBuilder(removedItem, context, animation), - ); - } - return removedItem; - } - - int get length => _items.length; - - E operator [](int index) => _items[index]; - - int indexOf(E item) => _items.indexOf(item); -} - -class _CardItem extends StatelessWidget { - const _CardItem( - {super.key, - required this.animation, - this.onTap, - required this.item, - this.selected = false}) - : assert(item >= 0); - final Animation animation; - final VoidCallback? onTap; - final int item; - final bool selected; - - @override - Widget build(BuildContext context) { - return SizeTransition( - axis: Axis.vertical, - sizeFactor: animation, - child: Card( - child: Container( - color: Colors.primaries[item % Colors.primaries.length], - child: CheckboxListTile( - dense: true, - title: Text( - 'Item $item', - style: const TextStyle(color: Colors.white, fontSize: 18), - ), - value: selected, - onChanged: (v) { - onTap?.call(); - }), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_de_DE.json deleted file mode 100644 index 1b4de5738..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "Animierte Modalschranke", - "info": "Intern basiert es auf ModalBarrier und bietet die gleiche Funktionalität, jedoch kann dieser Komponente eine Farbanimation übergeben werden, um einen Übergangseffekt zu erzielen.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in AnimatedModalBarrier", - "desc": [ - "【dismissible】 : Gibt an, ob ein Klick zurückkehrt 【bool】", - "【color】 : Farbe 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_en_US.json deleted file mode 100644 index e412ca897..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "Animated Barrier Module", - "info": "Internally relies on ModalBarrier for implementation, with the same functionality, except that this component can accept a color animation for transition display.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to AnimatedModalBarrier", - "desc": [ - "【dismissible】: Whether to return on click 【bool】", - "【color】: Color 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_es_ES.json deleted file mode 100644 index 18c13fdb4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "Barrera Modal Animada", - "info": "Implementado internamente con ModalBarrier, con la misma funcionalidad, pero este componente puede recibir una animación de color para una transición suave.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a AnimatedModalBarrier", - "desc": [ - "【dismissible】: Si se puede volver al hacer clic 【bool】", - "【color】: Color 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_fr_FR.json deleted file mode 100644 index e9ed5dea5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "Barrière Modale Animée", - "info": "Implémenté en interne avec ModalBarrier, fonctionne de la même manière, mais ce composant peut recevoir une animation de couleur pour une transition visuelle.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à AnimatedModalBarrier", - "desc": [ - "【dismissible】 : Retour au clic 【bool】", - "【color】 : Couleur 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_it_IT.json deleted file mode 100644 index c127583cd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "Barriera Modale Animata", - "info": "Implementato internamente con ModalBarrier, le funzionalità sono le stesse, ma questo componente può ricevere un'animazione di colore per una transizione graduale.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a AnimatedModalBarrier", - "desc": [ - "【dismissible】 : Se cliccato, ritorna 【bool】", - "【color】 : Colore 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ja_JP.json deleted file mode 100644 index 8bf23aef5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "アニメーションバリアモジュール", - "info": "内部的にModalBarrierに依存して実装されており、機能は同じですが、このコンポーネントにはカラーアニメーションを渡して、トランジションを表示することができます。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedModalBarrier 紹介", - "desc": [ - "【dismissible】 : クリックで戻るかどうか 【bool】", - "【color】 : 色 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ko_KR.json deleted file mode 100644 index 041ab445d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "애니메이션 배리어 모드", - "info": "내부적으로 ModalBarrier를 기반으로 구현되었으며, 기능은 동일합니다. 다만 이 컴포넌트는 색상 애니메이션을 전달하여 전환 효과를 나타낼 수 있습니다.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedModalBarrier 소개", - "desc": [ - "【dismissible】 : 클릭 시 반환 여부 【bool】", - "【color】 : 색상 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_pt_PT.json deleted file mode 100644 index 8614f706f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "Barreira Modal Animada", - "info": "Implementado internamente com ModalBarrier, com funcionalidades idênticas, exceto que este componente pode receber uma animação de cor para transição.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao AnimatedModalBarrier", - "desc": [ - "【dismissible】: Clicar para retornar 【bool】", - "【color】: Cor 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ru_RU.json deleted file mode 100644 index a4d6fdce9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "Анимированный барьер", - "info": "Внутренняя реализация зависит от ModalBarrier, функциональность идентична, за исключением того, что этот компонент может принимать анимацию цвета для плавного отображения.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в AnimatedModalBarrier", - "desc": [ - "【dismissible】 : Возврат при клике 【bool】", - "【color】 : Цвет 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_zh-CN.json deleted file mode 100644 index 7697738b0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "动画屏障模", - "info": "内部依赖 ModalBarrier 实现,功能一致,只不过该组件可以传入一个颜色动画,进行过渡展现。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedModalBarrier 介绍", - "desc": [ - "【dismissible】 : 点击是否返回 【bool】", - "【color】 : 颜色 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/node1_base.dart deleted file mode 100644 index a01d1d7bf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/node1_base.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class AnimatedModalBarrierDemo extends StatefulWidget { - const AnimatedModalBarrierDemo({Key? key}) : super(key: key); - - @override - _AnimatedModalBarrierDemoState createState() => - _AnimatedModalBarrierDemoState(); -} - -class _AnimatedModalBarrierDemoState extends State - with SingleTickerProviderStateMixin { - late AnimationController _controller; - late Animation _color; - - @override - void initState() { - super.initState(); - _controller = AnimationController( - vsync: this, - duration: const Duration(seconds: 2), - )..forward(); - _color = ColorTween( - begin: Colors.blue, - end: Colors.purple, - ).animate(_controller); - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 200, - height: 100, - child: Stack(alignment: Alignment.center, children: [ - AnimatedModalBarrier( - dismissible: true, - color: _color, - ), - const Text( - '点击背景返回', - style: TextStyle(color: Colors.white), - ) - ]), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_de_DE.json deleted file mode 100644 index 37fe54b46..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "Transparenz-Animation", - "info": "Ermöglicht die Animation der Opazität (Transparenz) von Kindkomponenten, ermöglicht die Angabe von Dauer und Kurve und verfügt über ein Ereignis zum Ende der Animation.", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedOpacity", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf am Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【opacity】 : Transparenz 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_en_US.json deleted file mode 100644 index bbfbc733a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "Opacity Animation", - "info": "Allows child components to perform opacity animations, with specified duration and curve, and has an animation end event.", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedOpacity", - "desc": [ - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【opacity】: Opacity 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_es_ES.json deleted file mode 100644 index 3b874d14f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "Animación de Opacidad", - "info": "Permite animar la opacidad de los componentes hijos, se puede especificar la duración y la curva, y tiene un evento de finalización de la animación.", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedOpacity", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Callback al finalizar la animación 【Function()】", - "【curve】 : Curva de la animación 【Duration】", - "【opacity】 : Opacidad 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_fr_FR.json deleted file mode 100644 index 2217fa08f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "Animation de transparence", - "info": "Permet à un composant enfant de réaliser une animation d'opacité, avec une durée et une courbe spécifiables, et un événement de fin d'animation.", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedOpacity", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Callback de fin d'animation 【Function()】", - "【curve】 : Courbe de l'animation 【Duration】", - "【opacity】 : Opacité 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_it_IT.json deleted file mode 100644 index f2ad7713c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "Animazione di opacità", - "info": "Consente ai componenti figli di eseguire un'animazione di Opacity (opacità), può specificare la durata e la curva, e ha un evento di fine animazione.", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedOpacity", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【opacity】 : Opacità 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ja_JP.json deleted file mode 100644 index b36dddf6e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "透明度アニメーション", - "info": "子コンポーネントにOpacity(透明度)アニメーションを適用でき、時間と曲線を指定でき、アニメーション終了イベントがあります。", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedOpacityの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【curve】 : アニメーション曲線 【Duration】", - "【opacity】 : 透明度 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ko_KR.json deleted file mode 100644 index 7305222cd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "투명도 애니메이션", - "info": "자식 위젯에 Opacity(투명도) 애니메이션을 적용할 수 있으며, 지속 시간과 곡선을 지정할 수 있고 애니메이션 종료 이벤트가 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedOpacity 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【opacity】 : 투명도 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_pt_PT.json deleted file mode 100644 index 0c8f16020..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "Animação de Opacidade", - "info": "Permite que os componentes filhos realizem animações de Opacidade, podendo especificar a duração e a curva, com eventos de término da animação.", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedOpacity", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【curve】 : Curva da animação 【Duration】", - "【opacity】 : Opacidade 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ru_RU.json deleted file mode 100644 index 1320b3bfa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "Анимация прозрачности", - "info": "Позволяет дочерним компонентам выполнять анимацию Opacity (прозрачности), можно указать продолжительность и кривую, есть событие завершения анимации.", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedOpacity", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Продолжительность анимации 【Duration】", - "【onEnd】 : Обратный вызов завершения анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【opacity】 : Прозрачность 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_zh-CN.json deleted file mode 100644 index 4939396b5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "透明动画", - "info": "能让子组件进行Opacity(透明度)动画,可指定时长和曲线,有动画结束事件。", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedOpacity基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【opacity】 : 透明度 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/node1_base.dart deleted file mode 100644 index 8bc2cba6e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/node1_base.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedOpacity extends StatefulWidget { - const CustomAnimatedOpacity({Key? key}) : super(key: key); - - @override - _CustomAnimatedOpacityState createState() => _CustomAnimatedOpacityState(); -} - -class _CustomAnimatedOpacityState extends State { - double _opacity = 1.0; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Switch( - value: _opacity == 0, - onChanged: (v) { - setState(() { - _opacity = v ? 0 : 1.0; - }); - }), - Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 100, - child: AnimatedOpacity( - duration: const Duration(seconds: 1), - curve: Curves.fastOutSlowIn, - opacity: _opacity, - onEnd: () => print('End'), - child: const Icon(Icons.android, color: Colors.green, size: 60), - ), - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_de_DE.json deleted file mode 100644 index b87470c96..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "Animierter Abstand", - "info": "Ermöglicht Padding (Innenabstand) Animationen für Kind-Komponenten, kann Dauer und Kurve angeben, hat ein Ereignis für das Ende der Animation.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedPadding", - "desc": [ - "【child】 : Kind-Komponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf am Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_en_US.json deleted file mode 100644 index ab9b53fd0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "Padding Animation", - "info": "Allows child components to perform padding animation, with specified duration and curve, and has an animation end event.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedPadding", - "desc": [ - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【padding】: Padding 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_es_ES.json deleted file mode 100644 index 1b6f61137..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "Animación de margen", - "info": "Permite que los componentes hijos realicen una animación de Padding (margen interior), se puede especificar la duración y la curva, y tiene un evento de finalización de la animación.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedPadding", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Callback al finalizar la animación 【Function()】", - "【curve】 : Curva de la animación 【Duration】", - "【padding】 : Margen interior 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_fr_FR.json deleted file mode 100644 index f0cd004b4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "Animation de marge", - "info": "Permet à un composant enfant d'animer le Padding (marge intérieure), avec la possibilité de spécifier la durée et la courbe, et un événement de fin d'animation.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedPadding", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe de l'animation 【Duration】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_it_IT.json deleted file mode 100644 index ec6ac5f79..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "Animazione del margine", - "info": "Consente ai componenti figli di eseguire animazioni di Padding (margine interno), con la possibilità di specificare durata e curva, e con un evento di fine animazione.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedPadding", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【padding】 : Margine interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ja_JP.json deleted file mode 100644 index 319764422..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "パディングアニメーション", - "info": "子コンポーネントにPadding(パディング)アニメーションを行わせることができ、時間と曲線を指定でき、アニメーション終了イベントがあります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPaddingの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【curve】 : アニメーション曲線 【Duration】", - "【padding】 : パディング 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ko_KR.json deleted file mode 100644 index 6d5c3d4b6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "패딩 애니메이션", - "info": "자식 위젯에 패딩(내부 여백) 애니메이션을 적용할 수 있으며, 지속 시간과 곡선을 지정할 수 있고, 애니메이션 종료 이벤트가 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPadding 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_pt_PT.json deleted file mode 100644 index bf6ac0b7a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "Animação de Margem", - "info": "Permite que os componentes filhos realizem animações de Padding (margem interna), pode especificar a duração e a curva, e tem um evento de término da animação.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedPadding", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【curve】 : Curva da animação 【Duration】", - "【padding】 : Margem interna 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ru_RU.json deleted file mode 100644 index 7b2c17d70..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "Анимация отступов", - "info": "Позволяет дочерним компонентам анимировать отступы (Padding), можно указать длительность и кривую, есть событие завершения анимации.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedPadding", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Длительность анимации 【Duration】", - "【onEnd】 : Обратный вызов завершения анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_zh-CN.json deleted file mode 100644 index 0b7eafc48..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "边距动画", - "info": "能让子组件进行Padding(内边距)动画,可指定时长和曲线,有动画结束事件。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPadding基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/node1_base.dart deleted file mode 100644 index 000ae15e2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/node1_base.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedPadding extends StatefulWidget { - const CustomAnimatedPadding({Key? key}) : super(key: key); - - @override - _CustomAnimatedPaddingState createState() => _CustomAnimatedPaddingState(); -} - -class _CustomAnimatedPaddingState extends State { - final EdgeInsets startPadding = const EdgeInsets.all(10); - final EdgeInsets endPadding = const EdgeInsets.all(30); - - late EdgeInsets _padding; - - @override - void initState() { - _padding = startPadding; - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Switch( - value: _padding == endPadding, - onChanged: (v) { - setState(() { - _padding = v ? endPadding : startPadding; - }); - }), - Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 100, - child: AnimatedPadding( - duration: const Duration(seconds: 1), - curve: Curves.fastOutSlowIn, - padding: _padding, - onEnd: () => print('End'), - child: Container( - alignment: Alignment.center, - color: Colors.blue, - child: const Text( - '张风捷特烈', - style: TextStyle(color: Colors.white), - ), - ), - ), - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_de_DE.json deleted file mode 100644 index 12cbe3188..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "Animiertes Physikalisches Modell", - "info": "Eine PhysicalModel-Komponente mit Animationseffekten bei Änderungen der relevanten Eigenschaften, im Wesentlichen eine Kombination aus PhysicalModel und Animation. Es können Eigenschaften wie Schatten, Schattentiefe, abgerundete Ecken, Animationsdauer, Endrückruf usw. angegeben werden.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedPhysicalModel", - "desc": [ - "【color】 : Hintergrundfarbe 【Color】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf nach Abschluss der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【shape】 : Form 【BoxShape】", - "【elevation】 : Schattentiefe 【double】", - "【borderRadius】 : Abgerundete Ecken 【BorderRadius】", - "【shadowColor】 : Schattenfarbe 【Color】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_en_US.json deleted file mode 100644 index 70d62f756..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "Animated Physical Model", - "info": "A PhysicalModel component with animation effects when related properties change, essentially a combination of PhysicalModel and animation. Properties such as shadow, elevation, borderRadius, animation duration, and end callback can be specified.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedPhysicalModel", - "desc": [ - "【color】: Background color 【Color】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【shape】: Shape 【BoxShape】", - "【elevation】: Elevation 【double】", - "【borderRadius】: Border radius 【BorderRadius】", - "【shadowColor】: Shadow color 【Color】", - "【child】: Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_es_ES.json deleted file mode 100644 index d7df7f575..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "Modelo Físico Animado", - "info": "Un componente PhysicalModel con efectos de animación cuando cambian las propiedades relacionadas, esencialmente es una combinación de PhysicalModel y animación. Se pueden especificar propiedades como sombra, profundidad de sombra, esquinas redondeadas, duración de la animación, devolución de llamada al finalizar, etc.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedPhysicalModel", - "desc": [ - "【color】 : Color de fondo 【Color】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Devolución de llamada al finalizar la animación 【Function()】", - "【curve】 : Curva de animación 【Duration】", - "【shape】 : Forma 【BoxShape】", - "【elevation】 : Profundidad de sombra 【double】", - "【borderRadius】 : Esquinas redondeadas 【BorderRadius】", - "【shadowColor】 : Color de la sombra 【Color】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_fr_FR.json deleted file mode 100644 index 53c14c051..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "Animation de module physique", - "info": "Un composant PhysicalModel avec des effets d'animation lorsque les propriétés associées changent, essentiellement une combinaison de PhysicalModel et d'animation. Vous pouvez spécifier des propriétés telles que l'ombre, la profondeur de l'ombre, le rayon de bordure, la durée de l'animation, le rappel de fin, etc.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedPhysicalModel", - "desc": [ - "【color】 : Couleur de fond 【Color】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe d'animation 【Duration】", - "【shape】 : Forme 【BoxShape】", - "【elevation】 : Profondeur de l'ombre 【double】", - "【borderRadius】 : Rayon de bordure 【BorderRadius】", - "【shadowColor】 : Couleur de l'ombre 【Color】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_it_IT.json deleted file mode 100644 index 8ffe12ecc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "Modello Fisico Animato", - "info": "Componente PhysicalModel con effetti di animazione quando cambiano le proprietà relative, essenzialmente una combinazione di PhysicalModel e animazione. È possibile specificare proprietà come ombre, profondità dell'ombra, angoli arrotondati, durata dell'animazione, callback di fine, ecc.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedPhysicalModel", - "desc": [ - "【color】 : Colore di sfondo 【Color】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【shape】 : Forma 【BoxShape】", - "【elevation】 : Profondità dell'ombra 【double】", - "【borderRadius】 : Angoli arrotondati 【BorderRadius】", - "【shadowColor】 : Colore dell'ombra 【Color】", - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ja_JP.json deleted file mode 100644 index ef1334122..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "物理モジュールアニメーション", - "info": "関連する属性が変化する際にアニメーション効果を持つPhysicalModelコンポーネントで、本質的にはPhysicalModelとアニメーションの組み合わせです。影、影の深さ、角の丸み、アニメーションの長さ、終了コールバックなどの属性を指定できます。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPhysicalModelの基本使用", - "desc": [ - "【color】 : 背景色 【Color】", - "【duration】 : アニメーションの長さ 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【curve】 : アニメーションカーブ 【Duration】", - "【shape】 : 形状 【BoxShape】", - "【elevation】 : 影の深さ 【double】", - "【borderRadius】 : 角の丸み 【BorderRadius】", - "【shadowColor】 : 影の色 【Color】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ko_KR.json deleted file mode 100644 index a5814d3b7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "물리 모듈 애니메이션", - "info": "관련 속성이 변경될 때 애니메이션 효과가 있는 PhysicalModel 컴포넌트로, 본질적으로 PhysicalModel과 애니메이션의 결합체입니다. 그림자, 그림자 깊이, 둥근 모서리, 애니메이션 지속 시간, 종료 콜백 등의 속성을 지정할 수 있습니다.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPhysicalModel 기본 사용", - "desc": [ - "【color】 : 배경색 【Color】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【shape】 : 모양 【BoxShape】", - "【elevation】 : 그림자 깊이 【double】", - "【borderRadius】 : 둥근 모서리 【BorderRadius】", - "【shadowColor】 : 그림자 색상 【Color】", - "【child】 : 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_pt_PT.json deleted file mode 100644 index 1157fca62..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "Modelo Físico Animado", - "info": "Componente PhysicalModel com efeitos de animação quando as propriedades relacionadas mudam, essencialmente uma combinação de PhysicalModel e animação. Pode especificar propriedades como sombra, profundidade de sombra, cantos arredondados, duração da animação, callback de término, etc.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedPhysicalModel", - "desc": [ - "【color】 : Cor de fundo 【Color】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【curve】 : Curva de animação 【Duration】", - "【shape】 : Forma 【BoxShape】", - "【elevation】 : Profundidade de sombra 【double】", - "【borderRadius】 : Cantos arredondados 【BorderRadius】", - "【shadowColor】 : Cor da sombra 【Color】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ru_RU.json deleted file mode 100644 index 4f04e95f3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "Анимация физического модуля", - "info": "Компонент PhysicalModel с анимацией при изменении связанных свойств, по сути, представляет собой комбинацию PhysicalModel и анимации. Можно указать такие свойства, как тень, глубина тени, скругление углов, длительность анимации, обратный вызов по завершении и другие.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedPhysicalModel", - "desc": [ - "【color】 : Цвет фона 【Color】", - "【duration】 : Длительность анимации 【Duration】", - "【onEnd】 : Обратный вызов по завершении анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【shape】 : Форма 【BoxShape】", - "【elevation】 : Глубина тени 【double】", - "【borderRadius】 : Скругление углов 【BorderRadius】", - "【shadowColor】 : Цвет тени 【Color】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_zh-CN.json deleted file mode 100644 index 12cf35945..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "物理模块动画", - "info": "相关属性变化时具有动画效果的PhysicalModel组件,本质是PhysicalModel和动画结合的产物。可指定阴影、影深、圆角、动画时长、结束回调等属性。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPhysicalModel基本使用", - "desc": [ - "【color】 : 背景色 【Color】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【shape】 : 形状 【BoxShape】", - "【elevation】 : 影深 【double】", - "【borderRadius】 : 圆角 【BorderRadius】", - "【shadowColor】 : 阴影色 【Color】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/node1_base.dart deleted file mode 100644 index c96a4f6ef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/node1_base.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class AnimatedPhysicalModelDemo extends StatefulWidget { - const AnimatedPhysicalModelDemo({Key? key}) : super(key: key); - - @override - _AnimatedPhysicalModelDemoState createState() => - _AnimatedPhysicalModelDemoState(); -} - -class _AnimatedPhysicalModelDemoState extends State { - bool flag = false; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSwitch(), - SizedBox( - width: 150, - height: 150, - child: AnimatedPhysicalModel( - duration: const Duration(seconds: 2), - curve: Curves.fastOutSlowIn, - shadowColor: flag?Colors.orange:Colors.purple, - elevation: flag?10:5, - child: Image.asset( - 'assets/images/caver.webp', - fit: BoxFit.cover, - ), - borderRadius: BorderRadius.all(Radius.circular(flag? 10:75)), - clipBehavior: Clip.hardEdge, - shape: BoxShape.rectangle, - color: Colors.deepPurpleAccent, - onEnd: () => print('----onEnd---'), - ), - ), - ], - ); - } - - Widget _buildSwitch() => Switch( - value: flag, - onChanged: (v) { - setState(() { - flag = v; - }); - }); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_de_DE.json deleted file mode 100644 index c1da6abed..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "Positionierte Animation", - "info": "Ermöglicht die Positionierungsanimation von Unterkomponenten, kann Dauer und Kurve angeben und hat ein Ereignis zum Ende der Animation. Kann nur in einem Stack verwendet werden.", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedPositioned", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf am Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【top】 : Abstand zum oberen Rand des Elternteils 【double】", - "【right】 : Abstand zum rechten Rand des Elternteils 【double】", - "【left】 : Abstand zum linken Rand des Elternteils 【double】", - "【bottom】 : Abstand zum unteren Rand des Elternteils 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_en_US.json deleted file mode 100644 index a27ec8804..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "Positioning Animation", - "info": "Allows child components to perform Positioned (positioning) animations, with specified duration and curves, and has an animation end event. Can only be used within a Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedPositioned", - "desc": [ - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【top】: Distance to parent top 【double】", - "【right】: Distance to parent right 【double】", - "【left】: Distance to parent left 【double】", - "【bottom】: Distance to parent bottom 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_es_ES.json deleted file mode 100644 index 5128fa97a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "Animación de Posicionamiento", - "info": "Permite que los componentes hijos realicen animaciones de Positioned (posicionamiento), se pueden especificar la duración y la curva, y hay un evento de finalización de la animación. Solo se puede usar dentro de Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedPositioned", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Callback de finalización de la animación 【Function()】", - "【curve】 : Curva de la animación 【Duration】", - "【top】 : Distancia a la parte superior del padre 【double】", - "【right】 : Distancia a la derecha del padre 【double】", - "【left】 : Distancia a la izquierda del padre 【double】", - "【bottom】 : Distancia a la parte inferior del padre 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_fr_FR.json deleted file mode 100644 index fb1343801..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "Animation de positionnement", - "info": "Permet à un composant enfant d'effectuer une animation Positioned (positionnement), avec une durée et une courbe spécifiables, et un événement de fin d'animation. Ne peut être utilisé que dans un Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedPositioned", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe de l'animation 【Duration】", - "【top】 : Distance par rapport au haut du parent 【double】", - "【right】 : Distance par rapport à la droite du parent 【double】", - "【left】 : Distance par rapport à la gauche du parent 【double】", - "【bottom】 : Distance par rapport au bas du parent 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_it_IT.json deleted file mode 100644 index 2e5cb4dd3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "Animazione di Posizionamento", - "info": "Consente ai componenti figli di eseguire animazioni di posizionamento (Positioned), con durata e curva specificabili, e un evento di fine animazione. Può essere utilizzato solo all'interno di uno Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedPositioned", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【top】 : Distanza dal bordo superiore del genitore 【double】", - "【right】 : Distanza dal bordo destro del genitore 【double】", - "【left】 : Distanza dal bordo sinistro del genitore 【double】", - "【bottom】 : Distanza dal bordo inferiore del genitore 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ja_JP.json deleted file mode 100644 index 2ed82519e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "位置アニメーション", - "info": "子コンポーネントをPositioned(位置)アニメーションさせることができ、時間と曲線を指定でき、アニメーション終了イベントがあります。Stack内でのみ使用できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPositionedの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【curve】 : アニメーション曲線 【Duration】", - "【top】 : 親の上端までの距離 【double】", - "【right】 : 親の右端までの距離 【double】", - "【left】 : 親の左端までの距離 【double】", - "【bottom】 : 親の下端までの距離 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ko_KR.json deleted file mode 100644 index 0bbbb46b4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "위치 애니메이션", - "info": "자식 컴포넌트를 Positioned(위치) 애니메이션으로 이동시킬 수 있으며, 지속 시간과 곡선을 지정할 수 있고 애니메이션 종료 이벤트가 있습니다. Stack 내에서만 사용할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPositioned 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【top】 : 부모 상단까지의 거리 【double】", - "【right】 : 부모 오른쪽까지의 거리 【double】", - "【left】 : 부모 왼쪽까지의 거리 【double】", - "【bottom】 : 부모 하단까지의 거리 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_pt_PT.json deleted file mode 100644 index 117e6a50b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "Animação de Posicionamento", - "info": "Permite que os componentes filhos realizem animações de Positioned (posicionamento), podendo especificar a duração e a curva, com evento de término da animação. Só pode ser usado dentro de uma Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedPositioned", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【curve】 : Curva da animação 【Duration】", - "【top】 : Distância até o topo do pai 【double】", - "【right】 : Distância até a direita do pai 【double】", - "【left】 : Distância até a esquerda do pai 【double】", - "【bottom】 : Distância até a base do pai 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ru_RU.json deleted file mode 100644 index 577fb6360..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "Анимация позиционирования", - "info": "Позволяет дочерним компонентам выполнять анимацию Positioned (позиционирования), можно указать продолжительность и кривую, есть событие завершения анимации. Может использоваться только в Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedPositioned", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Продолжительность анимации 【Duration】", - "【onEnd】 : Обратный вызов завершения анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【top】 : Расстояние до верхнего края родителя 【double】", - "【right】 : Расстояние до правого края родителя 【double】", - "【left】 : Расстояние до левого края родителя 【double】", - "【bottom】 : Расстояние до нижнего края родителя 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_zh-CN.json deleted file mode 100644 index 4fe0c26f9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "定位动画", - "info": "能让子组件进行Positioned(定位)动画,可指定时长和曲线,有动画结束事件。只能用于Stack之中。", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPositioned基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【top】 : 到父顶距离 【double】", - "【right】 : 到父右距离 【double】", - "【left】 : 到父左距离 【double】", - "【bottom】 : 到父底距离 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/node1_base.dart deleted file mode 100644 index 65885b9e1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/node1_base.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedPositioned extends StatefulWidget { - const CustomAnimatedPositioned({Key? key}) : super(key: key); - - @override - _CustomAnimatedPositionedState createState() => - _CustomAnimatedPositionedState(); -} - -class _CustomAnimatedPositionedState extends State { - final double startTop = 0.0; - final double endTop = 30.0; - - double _top = 0.0; - - @override - void initState() { - _top = startTop; - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSwitch(), - Container( - color: Colors.grey.withAlpha(33), - width: 200, - height: 100, - child: Stack( - children: _buildChildren(), - ), - ), - ], - ); - } - - List _buildChildren() => [ - AnimatedPositioned( - duration: const Duration(seconds: 1), - top: _top, - left: _top * 4, - child: const Icon( - Icons.android, - color: Colors.green, - size: 50, - ), - ), - AnimatedPositioned( - duration: const Duration(seconds: 1), - top: 50 - _top, - left: 150 - _top * 4, - child: const Icon( - Icons.android, - color: Colors.red, - size: 50, - ), - ) - ]; - - Widget _buildSwitch() => Switch( - value: _top == endTop, - onChanged: (v) { - setState(() { - _top = v ? endTop : startTop; - }); - }); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_de_DE.json deleted file mode 100644 index 2ef2b7153..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_de_DE.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "Richtungsbasierte Positionierungsanimation", - "info": "Ermöglicht es Kindkomponenten, eine PositionedDirectional (richtungsbasierte Positionierung) Animation durchzuführen, wobei Dauer und Kurve angegeben werden können und ein Ereignis am Ende der Animation vorhanden ist. Kann nur innerhalb eines Stacks verwendet werden.", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedPositionedDirectional", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf am Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【top】 : Abstand zum oberen Rand des Elternteils 【double】", - "【end】 : Abstand zum rechten Rand des Elternteils 【double】", - "【start】 : Abstand zum linken Rand des Elternteils 【double】", - "【bottom】 : Abstand zum unteren Rand des Elternteils 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_en_US.json deleted file mode 100644 index b4f69a916..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_en_US.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "Directional Positioning Animation", - "info": "Allows child components to perform PositionedDirectional (directional positioning) animations, with specified duration and curve, and has an animation end event. Can only be used within Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedPositionedDirectional", - "desc": [ - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【top】: Distance to parent top 【double】", - "【end】: Distance to parent right 【double】", - "【start】: Distance to parent left 【double】", - "【bottom】: Distance to parent bottom 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_es_ES.json deleted file mode 100644 index dfd55b246..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_es_ES.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "Animación de Posicionamiento Direccional", - "info": "Permite que los componentes hijos realicen animaciones de PositionedDirectional (posicionamiento direccional), se pueden especificar la duración y la curva, y tiene un evento de finalización de la animación. Solo se puede usar dentro de un Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedPositionedDirectional", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Callback de finalización de la animación 【Function()】", - "【curve】 : Curva de la animación 【Duration】", - "【top】 : Distancia desde la parte superior del padre 【double】", - "【end】 : Distancia desde la derecha del padre 【double】", - "【start】 : Distancia desde la izquierda del padre 【double】", - "【bottom】 : Distancia desde la parte inferior del padre 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_fr_FR.json deleted file mode 100644 index 0bab7f7d0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_fr_FR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "Animation de positionnement directionnel", - "info": "Permet à un composant enfant d'effectuer une animation de PositionedDirectional (positionnement directionnel), avec une durée et une courbe spécifiables, et un événement de fin d'animation. Ne peut être utilisé que dans un Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedPositionedDirectional", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe de l'animation 【Duration】", - "【top】 : Distance du haut du parent 【double】", - "【end】 : Distance de la droite du parent 【double】", - "【start】 : Distance de la gauche du parent 【double】", - "【bottom】 : Distance du bas du parent 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_it_IT.json deleted file mode 100644 index c435d24ca..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_it_IT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "Animazione di posizionamento direzionale", - "info": "Consente ai componenti figli di eseguire un'animazione PositionedDirectional (posizionamento direzionale), con durata e curva specificabili, e un evento di fine animazione. Può essere utilizzato solo all'interno di uno Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedPositionedDirectional", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【top】 : Distanza dal bordo superiore del genitore 【double】", - "【end】 : Distanza dal bordo destro del genitore 【double】", - "【start】 : Distanza dal bordo sinistro del genitore 【double】", - "【bottom】 : Distanza dal bordo inferiore del genitore 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ja_JP.json deleted file mode 100644 index f4ccfa9b7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ja_JP.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "方向定位アニメーション", - "info": "子コンポーネントをPositionedDirectional(方向定位)アニメーションさせることができ、時間と曲線を指定でき、アニメーション終了イベントがあります。Stack内でのみ使用できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPositionedDirectional基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【curve】 : アニメーション曲線 【Duration】", - "【top】 : 親の上端までの距離 【double】", - "【end】 : 親の右端までの距離 【double】", - "【start】 : 親の左端までの距離 【double】", - "【bottom】 : 親の下端までの距離 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ko_KR.json deleted file mode 100644 index 7fb293765..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ko_KR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "방향 위치 애니메이션", - "info": "자식 구성 요소를 PositionedDirectional(방향 위치) 애니메이션으로 만들 수 있으며, 지속 시간과 곡선을 지정할 수 있고, 애니메이션 종료 이벤트가 있습니다. Stack 내에서만 사용할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPositionedDirectional 기본 사용", - "desc": [ - "【child】 : 자식 구성 요소 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【top】 : 부모 상단까지의 거리 【double】", - "【end】 : 부모 오른쪽까지의 거리 【double】", - "【start】 : 부모 왼쪽까지의 거리 【double】", - "【bottom】 : 부모 하단까지의 거리 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_pt_PT.json deleted file mode 100644 index 2bc583d15..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_pt_PT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "Animação de Posicionamento Direcional", - "info": "Permite que os componentes filhos realizem animações de PositionedDirectional (Posicionamento Direcional), podendo especificar a duração e a curva, com eventos de término da animação. Só pode ser usado dentro de uma Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do AnimatedPositionedDirectional", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【curve】 : Curva da animação 【Duration】", - "【top】 : Distância até o topo do pai 【double】", - "【end】 : Distância até a direita do pai 【double】", - "【start】 : Distância até a esquerda do pai 【double】", - "【bottom】 : Distância até a base do pai 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ru_RU.json deleted file mode 100644 index e68ad6229..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ru_RU.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "Анимация направленного позиционирования", - "info": "Позволяет дочерним компонентам выполнять анимацию PositionedDirectional (направленное позиционирование), можно указать продолжительность и кривую, есть событие окончания анимации. Может использоваться только внутри Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedPositionedDirectional", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Продолжительность анимации 【Duration】", - "【onEnd】 : Обратный вызов окончания анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【top】 : Расстояние до верха родителя 【double】", - "【end】 : Расстояние до правой стороны родителя 【double】", - "【start】 : Расстояние до левой стороны родителя 【double】", - "【bottom】 : Расстояние до низа родителя 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_zh-CN.json deleted file mode 100644 index 585f8084f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_zh-CN.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "方向定位动画", - "info": "能让子组件进行PositionedDirectional(方向定位)动画,可指定时长和曲线,有动画结束事件。只能用于Stack之中。", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPositionedDirectional基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【top】 : 到父顶距离 【double】", - "【end】 : 到父右距离 【double】", - "【start】 : 到父左距离 【double】", - "【bottom】 : 到父底距离 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/node1_base.dart deleted file mode 100644 index 558c62ceb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/node1_base.dart +++ /dev/null @@ -1,74 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedPositionedDirectional extends StatefulWidget { - const CustomAnimatedPositionedDirectional({Key? key}) : super(key: key); - - @override - _CustomAnimatedPositionedDirectionalState createState() => - _CustomAnimatedPositionedDirectionalState(); -} - -class _CustomAnimatedPositionedDirectionalState - extends State { - final double startTop = 0.0; - final double endTop = 30.0; - - double _top = 0.0; - - @override - void initState() { - _top = startTop; - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSwitch(), - Container( - color: Colors.grey.withAlpha(33), - width: 200, - height: 100, - child: Stack( - children: _buildChildren(), - ), - ), - ], - ); - } - - List _buildChildren() => [ - AnimatedPositionedDirectional( - duration: const Duration(seconds: 1), - top: _top, - start: _top * 4, - child: const Icon( - Icons.android, - color: Colors.green, - size: 50, - ), - ), - AnimatedPositionedDirectional( - duration: const Duration(seconds: 1), - top: 50 - _top, - start: 150 - _top * 4, - child: const Icon( - Icons.android, - color: Colors.red, - size: 50, - ), - ) - ]; - - Widget _buildSwitch() => Switch( - value: _top == endTop, - onChanged: (v) { - setState(() { - _top = v ? endTop : startTop; - }); - }); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_de_DE.json deleted file mode 100644 index 31511c6ba..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_de_DE.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "Rotationsanimation", - "info": "Wenn sich die gegebene Rotationsmenge ändert, kann die Unterkomponente automatisch den relativen Rotationswert anpassen, und es gibt eine animierte Änderung zwischen den vorherigen und nachfolgenden Werten.", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Rotationsanimationseffekt", - "desc": [ - "In diesem Beispiel wird der Parameter turns durch Ziehen angepasst, um den animierten Bewegungseffekt zu sehen. Der Rotationswinkel beträgt: turns*2*pi", - "【child】 : Kinderkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf bei Animationsende 【Function()】", - "【alignment】 : Zentrum der Animationstransformation 【Alignment】", - "【curve】 : Animationskurve 【Duration】", - "【filterQuality】 : Filterqualität 【FilterQuality】", - "【turns】 : Rotationsmenge 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_en_US.json deleted file mode 100644 index f11797f26..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_en_US.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "Rotation Animation", - "info": "When the given rotation amount changes, the child component can automatically adjust relative to the rotation value, and there is an animated transition between the previous and new values.", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Rotation Animation Effect", - "desc": [ - "In this case, drag to adjust the turns parameter to see the animation effect. The rotation angle is: turns*2*pi", - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【alignment】: Animation transformation center 【Alignment】", - "【curve】: Animation curve 【Duration】", - "【filterQuality】: Filter quality 【FilterQuality】", - "【turns】: Rotation amount 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_es_ES.json deleted file mode 100644 index 15e01c402..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_es_ES.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "Animación de rotación", - "info": "Cuando cambia la cantidad de rotación dada, el componente hijo puede ajustarse automáticamente en relación con el valor de rotación, y hay un cambio animado entre los valores anteriores y posteriores.", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Efecto de animación de rotación", - "desc": [ - "En este caso, arrastra para ajustar el parámetro turns y observa el efecto de movimiento de la animación. El ángulo de rotación es: turns*2*pi", - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Callback al finalizar la animación 【Function()】", - "【alignment】 : Centro de transformación de la animación 【Alignment】", - "【curve】 : Curva de la animación 【Duration】", - "【filterQuality】 : Calidad del filtro 【FilterQuality】", - "【turns】 : Cantidad de rotación 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_fr_FR.json deleted file mode 100644 index 970fae798..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_fr_FR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "Animation de rotation", - "info": "Lorsque la quantité de rotation donnée change, le composant enfant peut s'ajuster automatiquement par rapport à la valeur de rotation, avec une animation entre les valeurs précédentes et suivantes.", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Effet d'animation de rotation", - "desc": [ - "Dans cet exemple, faites glisser pour ajuster le paramètre turns et observez l'effet de l'animation. L'angle de rotation est : turns*2*pi", - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel à la fin de l'animation 【Function()】", - "【alignment】 : Centre de transformation de l'animation 【Alignment】", - "【curve】 : Courbe de l'animation 【Duration】", - "【filterQuality】 : Qualité du filtre 【FilterQuality】", - "【turns】 : Quantité de rotation 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_it_IT.json deleted file mode 100644 index 5fdc73855..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_it_IT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "Animazione di rotazione", - "info": "Quando la quantità di rotazione specificata cambia, il componente figlio può regolarsi automaticamente rispetto al valore di rotazione, con un'animazione che mostra la transizione tra i valori precedenti e successivi.", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Effetto di animazione di rotazione", - "desc": [ - "In questo esempio, trascina per regolare il parametro turns e osserva l'effetto dell'animazione. L'angolo di rotazione è: turns*2*pi", - "【child】 : componente figlio 【Widget】", - "【duration】 : durata dell'animazione 【Duration】", - "【onEnd】 : callback alla fine dell'animazione 【Function()】", - "【alignment】 : centro di trasformazione dell'animazione 【Alignment】", - "【curve】 : curva dell'animazione 【Duration】", - "【filterQuality】 : qualità del filtro 【FilterQuality】", - "【turns】 : quantità di rotazione 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ja_JP.json deleted file mode 100644 index 1e813b8eb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ja_JP.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "回転アニメーション", - "info": "指定された回転量が変化した場合、子コンポーネントは回転値に応じて自動的に調整され、前後の値にアニメーションの変化があります。", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "回転アニメーション効果", - "desc": [ - "このケースでは、turns パラメータをドラッグして調整し、アニメーションの動きを確認します。回転角度は: turns*2*pi", - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーションの時間 【Duration】", - "【onEnd】 : アニメーション終了時のコールバック 【Function()】", - "【alignment】 : アニメーションの変換中心 【Alignment】", - "【curve】 : アニメーション曲線 【Duration】", - "【filterQuality】 : フィルター品質 【FilterQuality】", - "【turns】 : 回転量 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ko_KR.json deleted file mode 100644 index 4f3ac69c2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ko_KR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "회전 애니메이션", - "info": "주어진 회전량이 변경될 때, 자식 구성 요소가 회전 값에 따라 자동으로 조정되며, 이전 값과 이후 값 사이에 애니메이션 변화가 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "회전 애니메이션 효과", - "desc": [ - "이 예제에서는 turns 매개변수를 드래그하여 조정하고 애니메이션 효과를 확인합니다. 회전 각도는: turns*2*pi", - "【child】 : 자식 구성 요소 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【alignment】 : 애니메이션 변환 중심 【Alignment】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【filterQuality】 : 필터 품질 【FilterQuality】", - "【turns】 : 회전량 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_pt_PT.json deleted file mode 100644 index 10bc8835f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_pt_PT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "Animação de Rotação", - "info": "Quando a quantidade de rotação dada muda, o componente filho pode ajustar automaticamente o valor relativo à rotação, e há uma animação entre os valores anteriores e posteriores.", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Efeito de Animação de Rotação", - "desc": [ - "Neste exemplo, arraste para ajustar o parâmetro turns e observe o efeito da animação. O ângulo de rotação é: turns*2*pi", - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de fim de animação 【Function()】", - "【alignment】 : Centro de transformação da animação 【Alignment】", - "【curve】 : Curva da animação 【Duration】", - "【filterQuality】 : Qualidade do filtro 【FilterQuality】", - "【turns】 : Quantidade de rotação 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ru_RU.json deleted file mode 100644 index 78487046a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ru_RU.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "Анимация вращения", - "info": "Когда заданное количество вращения изменяется, дочерний компонент может автоматически настраиваться относительно значения вращения, и есть анимационные изменения между предыдущим и текущим значениями.", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Эффект анимации вращения", - "desc": [ - "В этом примере, перетащите для регулировки параметра turns, чтобы увидеть эффект анимации. Угол вращения: turns*2*pi", - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Длительность анимации 【Duration】", - "【onEnd】 : Обратный вызов по завершении анимации 【Function()】", - "【alignment】 : Центр преобразования анимации 【Alignment】", - "【curve】 : Кривая анимации 【Duration】", - "【filterQuality】 : Качество фильтра 【FilterQuality】", - "【turns】 : Количество вращения 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_zh-CN.json deleted file mode 100644 index b36954d50..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_zh-CN.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "旋转动画", - "info": "给定的旋转量发生变化时,子组件可以自动调整相对于旋转值,且前后值有动画变化。", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "旋转动画效果", - "desc": [ - "该案例中,拖拽调节 turns 参数,查看动画运动效果。旋转角度为: turns*2*pi", - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【alignment】 : 动画变换中心 【Alignment】", - "【curve】 : 动画曲线 【Duration】", - "【filterQuality】 : 滤镜质量 【FilterQuality】", - "【turns】 : 旋转量 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/node1.dart deleted file mode 100644 index beff715fd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/node1.dart +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:math'; - -import 'package:flutter/material.dart'; - -class AnimatedRotationDemo extends StatefulWidget { - const AnimatedRotationDemo({super.key}); - - @override - State createState() => _AnimatedRotationDemoState(); -} - -class _AnimatedRotationDemoState extends State { - double _turns = 0; - - @override - Widget build(BuildContext context) { - final TextTheme textTheme = Theme.of(context).textTheme; - - return Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Row( - children: [ - Expanded( - child: GridPaper( - color: Colors.blue.withOpacity(0.1), - child: SizedBox( - height: 200, - child: Center( - child: AnimatedRotation( - turns: _turns, - duration: const Duration(milliseconds: 500), - curve: Curves.easeInOut, - child: Container( - color: Colors.red, - height: 40, - width: 40, - ), - ), - ), - ), - ), - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Text('scale:${_turns.toStringAsFixed(2)}', - style: textTheme.bodyMedium), - Expanded( - child: Slider( - min: 0, - max: 1, - value: _turns, - onChanged: (double value) { - setState(() { - _turns = value; - }); - }, - ), - ), - const SizedBox(width: 48.0), - ], - ), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_de_DE.json deleted file mode 100644 index 1d2dc66d6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "Skalierungsanimation", - "info": "Wenn sich die gegebene Skalierung ändert, kann die Unterkomponente automatisch relativ zum Skalierungswert angepasst werden, und die vorherigen und nachfolgenden Werte haben eine animierte Änderung.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Skalierungsanimationseffekt", - "desc": [ - "In diesem Beispiel ziehen Sie den scale-Parameter, um den Animationsbewegungseffekt zu sehen.", - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf beim Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【alignment】 : Animationszentrum 【Alignment】", - "【filterQuality】 : Filterqualität 【FilterQuality】", - "【scale】 : Skalierungsmenge 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_en_US.json deleted file mode 100644 index 7bacac754..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "Scaling Animation", - "info": "When the given scaling amount changes, the child component can automatically adjust relative to the scaling value, and there is an animation change between the previous and next values.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Scaling Animation Effect", - "desc": [ - "In this case, drag to adjust the scale parameter to view the animation effect.", - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【alignment】: Animation transformation center 【Alignment】", - "【filterQuality】: Filter quality 【FilterQuality】", - "【scale】: Scaling amount 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_es_ES.json deleted file mode 100644 index ccab272e3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "Animación de escala", - "info": "Cuando cambia la cantidad de escala dada, el componente hijo puede ajustarse automáticamente en relación con el valor de escala, y hay una animación entre los valores anteriores y posteriores.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Efecto de animación de escala", - "desc": [ - "En este caso, arrastre para ajustar el parámetro scale y observe el efecto de movimiento de la animación.", - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Devolución de llamada al finalizar la animación 【Function()】", - "【curve】 : Curva de animación 【Duration】", - "【alignment】 : Centro de transformación de la animación 【Alignment】", - "【filterQuality】 : Calidad del filtro 【FilterQuality】", - "【scale】 : Cantidad de escala 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_fr_FR.json deleted file mode 100644 index f5116c216..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "Animation de mise à l'échelle", - "info": "Lorsque la quantité de mise à l'échelle donnée change, le composant enfant peut s'ajuster automatiquement par rapport à la valeur de mise à l'échelle, et les valeurs avant et après ont une animation.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Effet d'animation de mise à l'échelle", - "desc": [ - "Dans ce cas, faites glisser pour ajuster le paramètre scale et observez l'effet de l'animation.", - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe d'animation 【Duration】", - "【alignment】 : Centre de transformation de l'animation 【Alignment】", - "【filterQuality】 : Qualité du filtre 【FilterQuality】", - "【scale】 : Quantité de mise à l'échelle 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_it_IT.json deleted file mode 100644 index 43bd19501..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "Animazione di Scala", - "info": "Quando la quantità di scala data cambia, il componente figlio può regolarsi automaticamente rispetto al valore di scala, con un'animazione tra i valori precedenti e successivi.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Effetto di Animazione di Scala", - "desc": [ - "In questo caso, trascina per regolare il parametro scale e osserva l'effetto di movimento dell'animazione.", - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback alla fine dell'animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【alignment】 : Centro di trasformazione dell'animazione 【Alignment】", - "【filterQuality】 : Qualità del filtro 【FilterQuality】", - "【scale】 : Quantità di scala 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ja_JP.json deleted file mode 100644 index 99a8ee38c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "スケーリングアニメーション", - "info": "指定されたスケーリング量が変化すると、子コンポーネントは自動的にスケーリング値に応じて調整され、前後の値にアニメーションの変化があります。", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "スケーリングアニメーション効果", - "desc": [ - "このケースでは、scaleパラメータをドラッグして調整し、アニメーションの動き効果を確認します。", - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーションの持続時間 【Duration】", - "【onEnd】 : アニメーション終了時のコールバック 【Function()】", - "【curve】 : アニメーション曲線 【Duration】", - "【alignment】 : アニメーションの変形中心 【Alignment】", - "【filterQuality】 : フィルター品質 【FilterQuality】", - "【scale】 : スケーリング量 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ko_KR.json deleted file mode 100644 index c18e6510e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "스케일 애니메이션", - "info": "주어진 스케일 양이 변경될 때, 자식 구성 요소가 스케일 값에 따라 자동으로 조정되며, 이전 값과 이후 값 간에 애니메이션 변화가 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "스케일 애니메이션 효과", - "desc": [ - "이 예제에서는 scale 매개변수를 드래그하여 조정하고 애니메이션 효과를 확인합니다.", - "【child】 : 자식 구성 요소 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【alignment】 : 애니메이션 변환 중심 【Alignment】", - "【filterQuality】 : 필터 품질 【FilterQuality】", - "【scale】 : 스케일 양 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_pt_PT.json deleted file mode 100644 index 3d30020af..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "Animação de Escala", - "info": "Quando a quantidade de escala fornecida muda, o componente filho pode ajustar automaticamente em relação ao valor de escala, e há uma animação entre os valores anteriores e posteriores.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Efeito de Animação de Escala", - "desc": [ - "Neste exemplo, arraste para ajustar o parâmetro de escala e observe o efeito da animação.", - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de fim de animação 【Function()】", - "【curve】 : Curva de animação 【Duration】", - "【alignment】 : Centro de transformação da animação 【Alignment】", - "【filterQuality】 : Qualidade do filtro 【FilterQuality】", - "【scale】 : Quantidade de escala 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ru_RU.json deleted file mode 100644 index fe5c15586..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "Анимация масштабирования", - "info": "Когда заданный масштаб изменяется, дочерний компонент может автоматически регулироваться относительно значения масштабирования, и значения до и после имеют анимационные изменения.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Эффект анимации масштабирования", - "desc": [ - "В этом примере перетащите для настройки параметра scale и посмотрите эффект анимации.", - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Продолжительность анимации 【Duration】", - "【onEnd】 : Обратный вызов по окончании анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【alignment】 : Центр преобразования анимации 【Alignment】", - "【filterQuality】 : Качество фильтра 【FilterQuality】", - "【scale】 : Масштаб 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_zh-CN.json deleted file mode 100644 index 845ded529..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "缩放动画", - "info": "给定的缩放量发生变化时,子组件可以自动调整相对于缩放值,且前后值有动画变化。", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "缩放动画效果", - "desc": [ - "该案例中,拖拽调节 scale 参数,查看动画运动效果。", - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【alignment】 : 动画变换中心 【Alignment】", - "【filterQuality】 : 滤镜质量 【FilterQuality】", - "【scale】 : 缩放量 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/node1.dart deleted file mode 100644 index 5f02a5984..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/node1.dart +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - - -class AnimatedScaleDemo extends StatefulWidget { - const AnimatedScaleDemo({super.key}); - - @override - State createState() => _AnimatedScaleDemoState(); -} - -class _AnimatedScaleDemoState extends State { - double _scale = 1; - - @override - Widget build(BuildContext context) { - final TextTheme textTheme = Theme.of(context).textTheme; - - return Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Row( - children: [ - Expanded( - child: GridPaper( - color: Colors.blue.withOpacity(0.1), - child: SizedBox( - height: 200, - child: Center( - child: AnimatedScale( - scale: _scale, - duration: const Duration(milliseconds: 500), - curve: Curves.easeInOut, - child: Container(color: Colors.red,height: 40,width: 40,), - ), - ), - ), - ), - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Text('scale:${_scale.toStringAsFixed(1)}', style: textTheme.bodyMedium), - Expanded( - child: Slider( - min: 0, - max: 5.0, - value: _scale, - onChanged: (double value) { - setState(() { - _scale = value; - }); - }, - ), - ), - const SizedBox(width: 48.0), - ], - ), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_de_DE.json deleted file mode 100644 index 5d979ecd3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "Gleitende Animation", - "info": "Wenn sich der gegebene Versatz ändert, kann die Unterkomponente den relativen Versatz automatisch anpassen, und die vorherigen und nachfolgenden Werte haben eine animierte Veränderung.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Gleitende Animationseffekt", - "desc": [ - "In diesem Fall ziehen Sie die x,y-Parameter, um den Animationseffekt zu sehen. Dabei ist der Versatz = x,y * Breite und Höhe des Rahmens", - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf beim Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【offset】 : Versatz 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_en_US.json deleted file mode 100644 index bac59c4d8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "Slide Animation", - "info": "When the given offset changes, the child component can automatically adjust the relative offset, and there is an animated change between the previous and current values.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Slide Animation Effect", - "desc": [ - "In this case, drag to adjust the x, y parameters to view the animation effect. The offset = x, y * the width and height of the box.", - "【child】: child component 【Widget】", - "【duration】: animation duration 【Duration】", - "【onEnd】: animation end callback 【Function()】", - "【curve】: animation curve 【Duration】", - "【offset】: offset 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_es_ES.json deleted file mode 100644 index 70971c09d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "Animación de deslizamiento", - "info": "Cuando el desplazamiento dado cambia, los componentes hijos pueden ajustar automáticamente el desplazamiento relativo, y los valores anteriores y posteriores tienen una animación de cambio.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Efecto de animación de deslizamiento", - "desc": [ - "En este caso, arrastre para ajustar los parámetros x, y y observe el efecto de movimiento de la animación. Donde el desplazamiento = x, y * ancho y alto del cuadro", - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Devolución de llamada al final de la animación 【Function()】", - "【curve】 : Curva de animación 【Duration】", - "【offset】 : Desplazamiento 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_fr_FR.json deleted file mode 100644 index 30064c4b6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "Animation de glissement", - "info": "Lorsque l'offset donné change, le composant enfant peut ajuster automatiquement l'offset relatif, et les valeurs avant et après ont une animation.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Effet d'animation de glissement", - "desc": [ - "Dans ce cas, faites glisser pour ajuster les paramètres x, y et observez l'effet de l'animation. Où l'offset = x, y * largeur et hauteur de la boîte", - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe d'animation 【Duration】", - "【offset】 : Offset 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_it_IT.json deleted file mode 100644 index 1b46a47bd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "Animazione di scorrimento", - "info": "Quando l'offset dato cambia, i componenti figli possono regolare automaticamente l'offset relativo e i valori precedenti e successivi hanno un'animazione.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Effetto animazione di scorrimento", - "desc": [ - "In questo caso, trascina per regolare i parametri x,y e osserva l'effetto di movimento dell'animazione. Dove offset = x,y * larghezza e altezza del riquadro", - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【offset】 : Offset 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ja_JP.json deleted file mode 100644 index c70d021ae..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "スライドアニメーション", - "info": "指定されたオフセットが変化するとき、子コンポーネントは自動的に相対的なオフセットを調整し、前後の値にアニメーションの変化があります。", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "スライドアニメーション効果", - "desc": [ - "このケースでは、x、yパラメータをドラッグして調整し、アニメーションの動き効果を確認します。オフセット = x、y * ボックスの幅と高さ", - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーションの時間 【Duration】", - "【onEnd】 : アニメーション終了時のコールバック 【Function()】", - "【curve】 : アニメーションカーブ 【Duration】", - "【offset】 : オフセット 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ko_KR.json deleted file mode 100644 index ae881562a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "슬라이드 애니메이션", - "info": "주어진 오프셋이 변경될 때, 자식 컴포넌트가 자동으로 상대 오프셋을 조정할 수 있으며, 이전과 이후 값에 애니메이션 변화가 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "슬라이드 애니메이션 효과", - "desc": [ - "이 예제에서 x, y 매개변수를 드래그하여 조정하고 애니메이션 효과를 확인하세요. 여기서 오프셋 = x, y * 상자 너비 및 높이", - "【child】 : 자식 컴포넌트 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【offset】 : 오프셋 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_pt_PT.json deleted file mode 100644 index 728d47cb1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "Animação de Deslize", - "info": "Quando o deslocamento fornecido muda, o componente filho pode ajustar automaticamente o deslocamento relativo, e os valores anteriores e posteriores têm uma mudança animada.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Efeito de Animação de Deslize", - "desc": [ - "Neste caso, arraste para ajustar os parâmetros x, y e observe o efeito do movimento da animação. Onde o deslocamento = x, y * largura e altura da caixa", - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de fim de animação 【Function()】", - "【curve】 : Curva de animação 【Duration】", - "【offset】 : Deslocamento 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ru_RU.json deleted file mode 100644 index 102c86d7c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "Анимация скольжения", - "info": "Когда заданное смещение изменяется, дочерний компонент может автоматически регулировать относительное смещение, и значения до и после имеют анимационные изменения.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Эффект анимации скольжения", - "desc": [ - "В этом примере перетащите параметры x, y, чтобы увидеть эффект анимации. Смещение = x, y * ширина и высота рамки", - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Длительность анимации 【Duration】", - "【onEnd】 : Обратный вызов по завершении анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【offset】 : Смещение 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_zh-CN.json deleted file mode 100644 index 611a28798..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "滑动动画", - "info": "给定的偏移量发生变化时,子组件可以自动调整相对偏移量,且前后值有动画变化。", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "滑动动画效果", - "desc": [ - "该案例中,拖拽调节 x,y 参数,查看动画运动效果。其中偏移量 = x,y * 方框宽高", - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【offset】 : 偏移量 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/node1.dart deleted file mode 100644 index 10da0649f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/node1.dart +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - - -class AnimatedSlideDemo extends StatefulWidget { - const AnimatedSlideDemo({super.key}); - - @override - State createState() => _AnimatedSlideDemoState(); -} - -class _AnimatedSlideDemoState extends State { - Offset offset = Offset.zero; - - @override - Widget build(BuildContext context) { - final TextTheme textTheme = Theme.of(context).textTheme; - - return Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Row( - children: [ - Expanded( - child: GridPaper( - color: Colors.blue.withOpacity(0.1), - // alignment: Alignment.center, - child: SizedBox( - height: 200, - child: Center( - child: AnimatedSlide( - offset: offset, - duration: const Duration(milliseconds: 500), - curve: Curves.easeInOut, - child: Container(color: Colors.red,height: 40,width: 40,), - ), - ), - ), - ), - ), - SizedBox( - height: 200, - child: Column( - children: [ - Text('Y:${offset.dy.toStringAsFixed(1)}', style: textTheme.bodyMedium), - Expanded( - child: RotatedBox( - quarterTurns: 1, - child: Slider( - min: -2.0, - max: 2.0, - value: offset.dy, - onChanged: (double value) { - setState(() { - offset = Offset(offset.dx, value); - }); - }, - ), - ), - ), - ], - ), - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Text('X:${offset.dx.toStringAsFixed(1)}', style: textTheme.bodyMedium), - Expanded( - child: Slider( - min: -4.0, - max: 4.0, - value: offset.dx, - onChanged: (double value) { - setState(() { - offset = Offset(value, offset.dy); - }); - }, - ), - ), - const SizedBox(width: 48.0), - ], - ), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_de_DE.json deleted file mode 100644 index 11a1f9c05..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "Animierter Wechsel", - "info": "Führt eine Animation aus, wenn sich das Kind-Widget ändert. Der Schlüssel des Kind-Widgets muss angegeben werden. Die Animationsart kann angepasst werden, und Eigenschaften wie Animationsdauer und Animationskurve können festgelegt werden.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedSwitcher", - "desc": [ - "【child】 : Kind-Widget 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【switchOutCurve】 : Ausblendkurve 【Curves】", - "【switchInCurve】 : Einblendkurve 【Curves】", - "【switchInCurve】 : Einblendkurve 【Curves】", - "【transitionBuilder】 : Animationsgenerator 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_en_US.json deleted file mode 100644 index 1efd5c64e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "Animated Switcher", - "info": "Executes animations when child components change. The key of the child components needs to be specified for identification. The animation method can be customized, and properties such as animation duration and animation curve can be specified.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedSwitcher", - "desc": [ - "【child】 : Child component 【Widget】", - "【duration】 : Animation duration 【Duration】", - "【switchOutCurve】 : Switch out curve 【Curves】", - "【switchInCurve】 : Switch in curve 【Curves】", - "【switchInCurve】 : Switch in curve 【Curves】", - "【transitionBuilder】 : Animation builder 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_es_ES.json deleted file mode 100644 index e6686707b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "Cambio animado", - "info": "Ejecuta una animación cuando cambia el componente hijo, es necesario especificar la clave del componente hijo para identificarlo. La forma de la animación se puede personalizar, se pueden especificar propiedades como la duración de la animación, la curva de la animación, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedSwitcher", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【switchOutCurve】 : Curva de salida 【Curves】", - "【switchInCurve】 : Curva de entrada 【Curves】", - "【switchInCurve】 : Curva de entrada 【Curves】", - "【transitionBuilder】 : Constructor de animación 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_fr_FR.json deleted file mode 100644 index b7002d431..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "Changement animé", - "info": "Exécute une animation lorsque les composants enfants changent, nécessite de spécifier une clé pour identifier les composants enfants. Le style d'animation peut être personnalisé, permettant de spécifier la durée de l'animation, la courbe d'animation, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de AnimatedSwitcher", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【switchOutCurve】 : Courbe de sortie 【Curves】", - "【switchInCurve】 : Courbe d'entrée 【Curves】", - "【switchInCurve】 : Courbe d'entrée 【Curves】", - "【transitionBuilder】 : Constructeur d'animation 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_it_IT.json deleted file mode 100644 index f82759ee0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "Cambio Animato", - "info": "Esegue un'animazione quando il componente figlio cambia, è necessario specificare la chiave del componente figlio per l'identificazione. Il metodo di animazione può essere personalizzato, è possibile specificare la durata dell'animazione, la curva dell'animazione e altre proprietà.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedSwitcher", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【switchOutCurve】 : Curva di uscita 【Curves】", - "【switchInCurve】 : Curva di ingresso 【Curves】", - "【switchInCurve】 : Curva di ingresso 【Curves】", - "【transitionBuilder】 : Costruttore di animazione 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ja_JP.json deleted file mode 100644 index 343dac5b5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "アニメーション切り替え", - "info": "子コンポーネントが変更されたときにアニメーションを実行します。子コンポーネントのkeyを指定して識別する必要があります。アニメーションの方法はカスタマイズ可能で、アニメーションの時間やアニメーションカーブなどの属性を指定できます。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedSwitcherの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【switchOutCurve】 : 切り出しカーブ 【Curves】", - "【switchInCurve】 : 切り込みカーブ 【Curves】", - "【switchInCurve】 : 切り込みカーブ 【Curves】", - "【transitionBuilder】 : アニメーションビルダー 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ko_KR.json deleted file mode 100644 index 127b5bb02..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "애니메이션 전환", - "info": "자식 컴포넌트가 변경될 때 애니메이션을 실행하며, 자식 컴포넌트의 key를 지정하여 식별해야 합니다. 애니메이션 방식은 사용자 정의가 가능하며, 애니메이션 지속 시간, 애니메이션 곡선 등의 속성을 지정할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedSwitcher 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【switchOutCurve】 : 전환 아웃 곡선 【Curves】", - "【switchInCurve】 : 전환 인 곡선 【Curves】", - "【switchInCurve】 : 전환 인 곡선 【Curves】", - "【transitionBuilder】 : 애니메이션 빌더 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_pt_PT.json deleted file mode 100644 index bcb3ab6fa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "Alternância Animada", - "info": "Executa uma animação quando o componente filho muda, é necessário especificar a chave do componente filho para identificação. O modo de animação pode ser personalizado, podendo especificar a duração da animação, a curva da animação, entre outros atributos.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedSwitcher", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【switchOutCurve】 : Curva de saída 【Curves】", - "【switchInCurve】 : Curva de entrada 【Curves】", - "【switchInCurve】 : Curva de entrada 【Curves】", - "【transitionBuilder】 : Construtor de animação 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ru_RU.json deleted file mode 100644 index 8b2cf9cc3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "Анимированный переключатель", - "info": "Выполняет анимацию при изменении дочернего компонента, необходимо указать ключ дочернего компонента для идентификации. Способ анимации может быть настроен, можно указать продолжительность анимации, кривую анимации и другие свойства.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedSwitcher", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Продолжительность анимации 【Duration】", - "【switchOutCurve】 : Кривая выхода 【Curves】", - "【switchInCurve】 : Кривая входа 【Curves】", - "【switchInCurve】 : Кривая входа 【Curves】", - "【transitionBuilder】 : Конструктор анимации 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_zh-CN.json deleted file mode 100644 index 6b783f19e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "动画切换", - "info": "当子组件变化时执行动画,需要指定子组件的key进行标识。动画方式可以自定义,能指定动画时长、动画曲线等属性。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedSwitcher基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【switchOutCurve】 : 切出曲线 【Curves】", - "【switchInCurve】 : 切入曲线 【Curves】", - "【switchInCurve】 : 切入曲线 【Curves】", - "【transitionBuilder】 : 动画构造器 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/node1_base.dart deleted file mode 100644 index dd7f8164c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/node1_base.dart +++ /dev/null @@ -1,76 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - - -class CustomAnimatedSwitcher extends StatefulWidget { - const CustomAnimatedSwitcher({Key? key}) : super(key: key); - - @override - _CustomAnimatedSwitcherState createState() => _CustomAnimatedSwitcherState(); -} - -class _CustomAnimatedSwitcherState extends State { - int _count = 0; - - @override - Widget build(BuildContext context) { - return Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - _buildMinusBtn(), - SizedBox(width:80,child: _buildAnimatedSwitcher(context)), - _buildAddBtn() - ], - ); - } - - Widget _buildAnimatedSwitcher(BuildContext context) => - AnimatedSwitcher( - duration: const Duration(milliseconds: 400), - transitionBuilder: (Widget child, Animation animation) => - ScaleTransition( - child: RotationTransition(turns: animation, child: child), - scale: animation), - child: Text( - '$_count', - key: ValueKey(_count), - style: Theme.of(context).textTheme.headlineSmall, - ), - ); - - Widget _buildMinusBtn() { - return MaterialButton( - padding: const EdgeInsets.all(0), - textColor: const Color(0xffFfffff), - elevation: 3, - color: Colors.red, - highlightColor: const Color(0xffF88B0A), - splashColor: Colors.red, - child: const Icon( - Icons.remove, - color: Colors.white, - ), - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - onPressed: () => setState(() => _count -= 1)); - } - - Widget _buildAddBtn() => MaterialButton( - padding: const EdgeInsets.all(0), - textColor: const Color(0xffFfffff), - elevation: 3, - color: Colors.blue, - highlightColor: const Color(0xffF88B0A), - splashColor: Colors.red, - child: const Icon( - Icons.add, - color: Colors.white, - ), - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - onPressed: () => setState(() => _count += 1)); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_de_DE.json deleted file mode 100644 index 3800fd0a4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "Animiertes Thema", - "info": "Eine Komponente mit animierten Effekten bei Themenänderungen, im Wesentlichen eine Kombination aus der Theme-Komponente und Animationen. Kann ThemeData, Animationsdauer, Kurve, Endrückruf usw. angeben. Entspricht einer erweiterten Version der Theme-Komponente.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedTheme", - "desc": [ - "【data】 : Themen-Daten 【ThemeData】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf bei Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_en_US.json deleted file mode 100644 index 922c7eec1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "Animated Theme", - "info": "A component with animation effects when the theme changes, essentially a combination of the Theme component and animation. You can specify ThemeData, animation duration, curve, end callback, etc. It is equivalent to an enhanced version of the Theme component.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedTheme", - "desc": [ - "【data】 : Theme data 【ThemeData】", - "【duration】 : Animation duration 【Duration】", - "【onEnd】 : Animation end callback 【Function()】", - "【curve】 : Animation curve 【Duration】", - "【child】 : Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_es_ES.json deleted file mode 100644 index 75c8c2b2b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "Tema Animado", - "info": "Componente con efectos de animación cuando cambia el tema, esencialmente es una combinación del componente Theme y animaciones. Se puede especificar ThemeData, duración de la animación, curva, devolución de llamada al finalizar, etc. Equivale a una versión mejorada del componente Theme.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedTheme", - "desc": [ - "【data】 : Datos del tema 【ThemeData】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Devolución de llamada al finalizar la animación 【Function()】", - "【curve】 : Curva de la animación 【Duration】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_fr_FR.json deleted file mode 100644 index f0926763a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "Thème animé", - "info": "Un composant avec des effets d'animation lors du changement de thème, essentiellement une combinaison du composant Theme et d'animations. Peut spécifier ThemeData, la durée de l'animation, la courbe, le rappel de fin, etc. Équivalent à une version améliorée du composant Theme.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedTheme", - "desc": [ - "【data】 : Données du thème 【ThemeData】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe de l'animation 【Duration】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_it_IT.json deleted file mode 100644 index ec4dc6e8d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "Tema Animato", - "info": "Componente con effetti animati quando il tema cambia, essenzialmente una combinazione del componente Theme e delle animazioni. È possibile specificare ThemeData, durata dell'animazione, curva, callback di fine, ecc. Equivale a una versione potenziata del componente Theme.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedTheme", - "desc": [ - "【data】 : Dati del tema 【ThemeData】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ja_JP.json deleted file mode 100644 index 35034028c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "アニメーションテーマ", - "info": "テーマ変更時にアニメーション効果を持つコンポーネントで、本質的にはThemeコンポーネントとアニメーションを組み合わせたものです。ThemeData、アニメーション時間、曲線、終了コールバックなどを指定できます。強化版のThemeコンポーネントと言えます。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedThemeの基本使用", - "desc": [ - "【data】 : テーマデータ 【ThemeData】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【curve】 : アニメーション曲線 【Duration】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ko_KR.json deleted file mode 100644 index 8081edd6d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "애니메이션 테마", - "info": "테마 변경 시 애니메이션 효과가 있는 컴포넌트로, 본질적으로 Theme 컴포넌트와 애니메이션의 결합물입니다. ThemeData, 애니메이션 지속 시간, 곡선, 종료 콜백 등을 지정할 수 있습니다. 강화된 버전의 Theme 컴포넌트에 해당합니다.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedTheme 기본 사용", - "desc": [ - "【data】 : 테마 데이터 【ThemeData】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【child】 : 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_pt_PT.json deleted file mode 100644 index 978ace025..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "Tema Animado", - "info": "Componente com efeitos de animação durante a mudança de tema, essencialmente uma combinação do componente Theme com animação. Pode especificar ThemeData, duração da animação, curva, callback de término, etc. Equivalente a uma versão aprimorada do componente Theme.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedTheme", - "desc": [ - "【data】 : Dados do tema 【ThemeData】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【curve】 : Curva da animação 【Duration】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ru_RU.json deleted file mode 100644 index fb343373f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "Анимированная тема", - "info": "Компонент с анимацией при изменении темы, по сути, является комбинацией компонента Theme и анимации. Можно указать ThemeData, продолжительность анимации, кривую, обратный вызов завершения и т.д. Это улучшенная версия компонента Theme.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedTheme", - "desc": [ - "【data】 : Данные темы 【ThemeData】", - "【duration】 : Продолжительность анимации 【Duration】", - "【onEnd】 : Обратный вызов завершения анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_zh-CN.json deleted file mode 100644 index 65224b215..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "动画主题", - "info": "主题变化时具有动画效果的组件,本质是Theme组件和动画结合的产物。可指定ThemeData、动画时长、曲线、结束回调等。相当于增强版的Theme组件。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedTheme基本使用", - "desc": [ - "【data】 : 主题数据 【ThemeData】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/node1_base.dart deleted file mode 100644 index eda0d045d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/node1_base.dart +++ /dev/null @@ -1,91 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class AnimatedThemeDemo extends StatefulWidget { - const AnimatedThemeDemo({Key? key}) : super(key: key); - - @override - _AnimatedThemeDemoState createState() => _AnimatedThemeDemoState(); -} - -class _AnimatedThemeDemoState extends State { - ThemeData startThem = ThemeData( - primaryColor: Colors.blue, - textTheme: const TextTheme( - headlineMedium: TextStyle( - color: Colors.white, - fontSize: 24, - fontWeight: FontWeight.bold, - ), - )); - - ThemeData endThem = ThemeData( - primaryColor: Colors.red, - textTheme: const TextTheme( - headlineMedium: TextStyle( - color: Colors.black, - fontSize: 16, - fontWeight: FontWeight.normal, - ))); - - late ThemeData them; - - @override - void initState() { - super.initState(); - them = startThem; - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSwitch(), - AnimatedTheme( - data: them, - duration: const Duration(seconds: 2), - curve: Curves.fastOutSlowIn, - onEnd: () { - print('----onEnd---'); - }, - child: const ChildContent(), - ), - ], - ); - } - - Widget _buildSwitch() { - print(them == endThem); - return Switch( - value: them == endThem, - onChanged: (v) { - setState(() { - them = v ? endThem : startThem; - }); - }); - } -} - -class ChildContent extends StatelessWidget { - const ChildContent({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - width: 250, - height: 60, - alignment: Alignment.center, - decoration: BoxDecoration( - borderRadius: const BorderRadius.all(Radius.circular(5)), - color: Theme.of(context).primaryColor, - ), - padding: const EdgeInsets.all(10), - child: Text( - 'Flutter Unit', - style: Theme.of(context).textTheme.headlineMedium, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_de_DE.json deleted file mode 100644 index cf8888ccc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "Anwendungsleiste", - "info": "Eine allgemeine Struktur für die obere Leiste einer Anwendung, in der entsprechende Komponenten an bestimmten Stellen platziert werden können. Wird häufig in Scaffold-Komponenten verwendet.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AppBar", - "desc": [ - "【leading】 : Linke Komponente 【Widget】", - "【title】 : Mittlere Komponente 【Widget】", - "【actions】 : Rechte Komponente 【List】", - "【elevation】 : Schattentiefe 【double】", - "【shape】 : Form 【ShapeBorder】", - "【backgroundColor】 : Hintergrundfarbe 【Hintergrundfarbe】", - "【centerTitle】 : Zentrierung in der Mitte 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "Verwendung von AppBar mit TabBar und TabBarView", - "desc": [ - "【bottom】 : Untere Komponente 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_en_US.json deleted file mode 100644 index 0a73cc160..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "App Header", - "info": "A common structure for the top bar of an application, where corresponding components can be placed in specified areas, often used in the Scaffold component.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AppBar", - "desc": [ - "【leading】 : Left component 【Widget】", - "【title】 : Middle component 【Widget】", - "【actions】 : Right component 【List】", - "【elevation】 : Shadow depth 【double】", - "【shape】 : Shape 【ShapeBorder】", - "【backgroundColor】 : Background color 【Color】", - "【centerTitle】 : Whether the title is centered 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "Using AppBar with TabBar and TabBarView", - "desc": [ - "【bottom】 : Bottom component 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_es_ES.json deleted file mode 100644 index b055e3b14..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "Barra de aplicación", - "info": "Una estructura común para la barra superior de una aplicación, que permite colocar componentes correspondientes en áreas específicas, comúnmente utilizada en el componente Scaffold.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AppBar", - "desc": [ - "【leading】 : Componente izquierdo 【Widget】", - "【title】 : Componente central 【Widget】", - "【actions】 : Componente derecho 【List】", - "【elevation】 : Profundidad de sombra 【double】", - "【shape】 : Forma 【ShapeBorder】", - "【backgroundColor】 : Profundidad de sombra 【Color de fondo】", - "【centerTitle】 : Centrar el título 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "Uso combinado de AppBar con TabBar y TabBarView", - "desc": [ - "【bottom】 : Componente inferior 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_fr_FR.json deleted file mode 100644 index 99b7c29c9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "Barre d'application", - "info": "Une structure commune pour une barre en haut de l'application, où des composants peuvent être placés dans des zones spécifiées, souvent utilisée dans le composant Scaffold.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de l'AppBar", - "desc": [ - "【leading】 : Composant gauche 【Widget】", - "【title】 : Composant central 【Widget】", - "【actions】 : Composant droit 【List】", - "【elevation】 : Profondeur de l'ombre 【double】", - "【shape】 : Forme 【ShapeBorder】", - "【backgroundColor】 : Profondeur de l'ombre 【Couleur de fond】", - "【centerTitle】 : Centrage du titre 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "Utilisation combinée de l'AppBar avec TabBar et TabBarView", - "desc": [ - "【bottom】 : Composant inférieur 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_it_IT.json deleted file mode 100644 index 67ffa34d5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "Barra dell'applicazione", - "info": "Una struttura comune per la barra superiore di un'applicazione, che consente di posizionare componenti specifici in aree designate, spesso utilizzata nel componente Scaffold.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AppBar", - "desc": [ - "【leading】 : Componente sinistro 【Widget】", - "【title】 : Componente centrale 【Widget】", - "【actions】 : Componente destro 【List】", - "【elevation】 : Profondità dell'ombra 【double】", - "【shape】 : Forma 【ShapeBorder】", - "【backgroundColor】 : Colore di sfondo 【Colore】", - "【centerTitle】 : Centratura del titolo 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "Uso combinato di AppBar con TabBar e TabBarView", - "desc": [ - "【bottom】 : Componente inferiore 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ja_JP.json deleted file mode 100644 index 55bc8d2a7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "アプリケーションバー", - "info": "アプリの上部バーの一般的な構造で、指定された部分に適切なコンポーネントを配置できます。Scaffoldコンポーネントでよく使用されます。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AppBarの基本使用", - "desc": [ - "【leading】 : 左側コンポーネント 【Widget】", - "【title】 : 中央コンポーネント 【Widget】", - "【actions】 : 右側コンポーネント 【List】", - "【elevation】 : 影の深さ 【double】", - "【shape】 : 形状 【ShapeBorder】", - "【backgroundColor】 : 背景色 【背景色】", - "【centerTitle】 : 中央を中央揃えにするか 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "AppBarとTabBar、TabBarViewの連携使用", - "desc": [ - "【bottom】 : 下部コンポーネント 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ko_KR.json deleted file mode 100644 index 09bbd0c3e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "앱 상단 바", - "info": "앱 상단 바의 일반적인 구조로, 지정된 위치에 해당 컴포넌트를 배치할 수 있으며, 주로 Scaffold 컴포넌트에서 사용됩니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AppBar 기본 사용법", - "desc": [ - "【leading】 : 왼쪽 컴포넌트 【Widget】", - "【title】 : 중앙 컴포넌트 【Widget】", - "【actions】 : 오른쪽 컴포넌트 【List】", - "【elevation】 : 그림자 깊이 【double】", - "【shape】 : 모양 【ShapeBorder】", - "【backgroundColor】 : 배경색 【Color】", - "【centerTitle】 : 중앙 제목 정렬 여부 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "AppBar와 TabBar, TabBarView 함께 사용", - "desc": [ - "【bottom】 : 하단 컴포넌트 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_pt_PT.json deleted file mode 100644 index 2f139cc1e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "Barra de Aplicação", - "info": "Uma estrutura comum para a barra superior de uma aplicação, onde componentes correspondentes podem ser colocados em áreas específicas, frequentemente utilizada no componente Scaffold.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AppBar", - "desc": [ - "【leading】 : Componente do lado esquerdo 【Widget】", - "【title】 : Componente do meio 【Widget】", - "【actions】 : Componente do lado direito 【List】", - "【elevation】 : Profundidade da sombra 【double】", - "【shape】 : Forma 【ShapeBorder】", - "【backgroundColor】 : Cor de fundo 【Cor de fundo】", - "【centerTitle】 : Centralizar no meio 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "Uso do AppBar com TabBar e TabBarView", - "desc": [ - "【bottom】 : Componente inferior 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ru_RU.json deleted file mode 100644 index b3d5c22a2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "Верхняя панель приложения", - "info": "Общая структура верхней панели приложения, в которой можно разместить соответствующие компоненты в указанных местах, часто используется в компоненте Scaffold.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AppBar", - "desc": [ - "【leading】 : Левый компонент 【Widget】", - "【title】 : Центральный компонент 【Widget】", - "【actions】 : Правый компонент 【List】", - "【elevation】 : Глубина тени 【double】", - "【shape】 : Форма 【ShapeBorder】", - "【backgroundColor】 : Цвет фона 【Цвет】", - "【centerTitle】 : Центрирование заголовка 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "Использование AppBar с TabBar и TabBarView", - "desc": [ - "【bottom】 : Нижний компонент 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_zh-CN.json deleted file mode 100644 index 1ab0dc10b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "应用头栏", - "info": "一个应用顶部栏的通用结构,可在指定的部位放置相应的组件,常用于Scaffold组件中。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AppBar基本使用", - "desc": [ - "【leading】 : 左侧组件 【Widget】", - "【title】 : 中间组件 【Widget】", - "【actions】 : 右侧组件 【List】", - "【elevation】 : 影深 【double】", - "【shape】 : 形状 【ShapeBorder】", - "【backgroundColor】 : 影深 【背景色】", - "【centerTitle】 : 中间是否居中 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "AppBar与TabBar、TabBarView联用", - "desc": [ - "【bottom】 : 底部组件 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/node1_base.dart deleted file mode 100644 index 1b86573eb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/node1_base.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; - -import '../PopupMenuButton/node1_base.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - - -class CustomAppBar extends StatelessWidget { - const CustomAppBar({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return AppBar( - title: const Text('风雅六社'), - leading: const BackButton(), - backgroundColor: Colors.amber[500], - elevation: 2, - centerTitle: true, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(20), - bottomRight: Radius.circular(20), - topRight: Radius.circular(5), - bottomLeft: Radius.circular(5), - )), - actions: [ - IconButton( - icon: const Icon(Icons.star), - tooltip: 'liked_widget_bloc', - onPressed: () { - // do nothing - }), - const CustomPopupMenuButton() - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/node2_tab.dart b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/node2_tab.dart deleted file mode 100644 index 5eaf703fe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/node2_tab.dart +++ /dev/null @@ -1,81 +0,0 @@ -import 'package:flutter/material.dart'; - -import '../PopupMenuButton/node1_base.dart'; -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class TabAppBar extends StatefulWidget { - const TabAppBar({Key? key}) : super(key: key); - - @override - _TabAppBarState createState() => _TabAppBarState(); -} - -class _TabAppBarState extends State - with SingleTickerProviderStateMixin { - final List tabs = ['风画庭', '雨韵舍', '雷鸣殿', '电疾堂', '霜寒阁', '雪月楼']; - late TabController _tabController; - - @override - void initState() { - super.initState(); - _tabController = TabController(vsync: this, length: tabs.length); - } - - @override - void dispose() { - _tabController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 220, - child: Scaffold( - appBar: _buildAppBar(), - body: _buildTableBarView(), - ), - ); - } - - PreferredSizeWidget _buildAppBar() => AppBar( - title: const Text('风雅六社'), - elevation: 1, - leading: const BackButton(), - centerTitle: true, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(20), - topRight: Radius.circular(20), - )), - actions: [ - IconButton( - icon: const Icon(Icons.star), - tooltip: 'liked_widget_bloc', - onPressed: () { - // do nothing - }), - const CustomPopupMenuButton() - ], - bottom: TabBar( - isScrollable: true, - controller: _tabController, - indicatorColor: Colors.orangeAccent, - tabs: tabs.map((e) => Tab(text: e)).toList(), - ), - ); - - Widget _buildTableBarView() => TabBarView( - controller: _tabController, - children: tabs - .map((e) => ColoredBox( - color: Colors.purple, - child:Center( - child: Text( - e, - style: const TextStyle(color: Colors.white, fontSize: 20), - ), - ))) - .toList()); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_de_DE.json deleted file mode 100644 index 926bc240b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "Automatische Lebenserhaltung", - "info": "In einer Liste mit verzögerter Ladung ermöglicht es den Unterbäumen, den Zustand beizubehalten. Allein verwendet hat es keine Wirkung und muss in Verbindung mit KeepAliveNotification verwendet werden.", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in AutomaticKeepAlive", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "In den Quellcodes von Listen- und Seitenwechselkomponenten wie ListView, SliverList, GridView, SliverGrid, PageView, TabBarView wird die AutomaticKeepAlive-Komponente verwendet. Um den Zustand eines States zu erhalten, kann AutomaticKeepAliveClientMixin verwendet werden, das eine einfache Kapselung der Verwendung von KeepAliveNotification darstellt. Dieses Beispiel zeigt die Zustandserhaltung der ListView-Einträge." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_en_US.json deleted file mode 100644 index 721b09ba5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "Automatic Keep Alive", - "info": "In lazy-loaded lists, allows subtrees to request to maintain state. It has no effect when used alone and needs to be used in conjunction with KeepAliveNotification.", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to AutomaticKeepAlive", - "desc": [ - "【child】: Child component 【Widget】", - "The AutomaticKeepAlive component is used in the source code of list and page-switching components such as ListView, SliverList, GridView, SliverGrid, PageView, and TabBarView. When keeping a State alive, you can use AutomaticKeepAliveClientMixin, which is a simple encapsulation of the use of KeepAliveNotification. This example demonstrates the state preservation of ListView items." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_es_ES.json deleted file mode 100644 index ab29b9ec8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "Mantenimiento automático", - "info": "En listas de carga perezosa, permite que los subárboles soliciten mantener el estado. No tiene efecto si se usa solo, debe usarse junto con KeepAliveNotification.", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a AutomaticKeepAlive", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "El componente AutomaticKeepAlive se utiliza en el código fuente de componentes de lista y cambio de página como ListView, SliverList, GridView, SliverGrid, PageView, TabBarView, etc. Para mantener vivo un State, se puede usar AutomaticKeepAliveClientMixin, que es una encapsulación simple del uso de KeepAliveNotification. Este ejemplo muestra cómo mantener vivo el estado de un elemento en ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_fr_FR.json deleted file mode 100644 index e4380b34b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "Maintien automatique en vie", - "info": "Dans les listes chargées de manière paresseuse, permet aux sous-arbres de demander à maintenir leur état. Utilisé seul, il n'a aucun effet. Doit être utilisé avec KeepAliveNotification.", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à AutomaticKeepAlive", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "Le composant AutomaticKeepAlive est utilisé dans les composants de liste et de pagination tels que ListView, SliverList, GridView, SliverGrid, PageView, TabBarView, etc. Pour maintenir en vie un certain State, on peut utiliser AutomaticKeepAliveClientMixin, qui est un enrobage simplifié de l'utilisation de KeepAliveNotification. Cet exemple montre le maintien en vie de l'état des entrées de ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_it_IT.json deleted file mode 100644 index 8a34fd8fe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "Mantenimento Automatico", - "info": "Nelle liste a caricamento lento, consente ai sottoalberi di richiedere il mantenimento dello stato. Non ha effetto se usato da solo, deve essere utilizzato insieme a KeepAliveNotification.", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a AutomaticKeepAlive", - "desc": [ - "【child】 : componente figlio 【Widget】", - "Nei componenti come ListView, SliverList, GridView, SliverGrid, PageView, TabBarView, il componente AutomaticKeepAlive è ampiamente utilizzato. Per mantenere attivo uno stato, è possibile utilizzare AutomaticKeepAliveClientMixin, che è un'implementazione semplificata dell'uso di KeepAliveNotification. Questo esempio mostra il mantenimento dello stato degli elementi in ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ja_JP.json deleted file mode 100644 index ec58d18d8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "自動キープアライブ", - "info": "遅延読み込みのリストで、サブツリーが状態を維持することを許可します。単独で使用しても効果はなく、KeepAliveNotification と併用する必要があります。", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AutomaticKeepAlive 紹介", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "ListView、SliverList、GridView、SliverGrid、PageView、TabBarView などのリストやページ切り替えコンポーネントのソースコードでは、AutomaticKeepAlive コンポーネントが使用されています。特定の State をキープアライブする場合、AutomaticKeepAliveClientMixin を使用して操作できます。これは KeepAliveNotification を使用するための簡易なラッパーです。この例では、ListView の項目の状態をキープアライブする方法を示しています。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ko_KR.json deleted file mode 100644 index a1b74b317..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "자동 생존 유지", - "info": "지연 로드 목록에서 하위 트리가 상태를 유지하도록 요청할 수 있으며, 단독으로 사용할 경우 효과가 없으며 KeepAliveNotification과 함께 사용해야 합니다.", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AutomaticKeepAlive 소개", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "ListView, SliverList, GridView, SliverGrid, PageView, TabBarView 등의 목록 및 페이지 전환 위젯 소스 코드에는 AutomaticKeepAlive 위젯이 사용됩니다. 특정 State를 생존 유지할 때 AutomaticKeepAliveClientMixin을 사용하여 작업할 수 있으며, 이는 KeepAliveNotification 사용을 간단하게 캡슐화한 것입니다. 이 예제는 ListView 항목의 상태 생존 유지를 보여줍니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_pt_PT.json deleted file mode 100644 index c234a4e04..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "Manutenção automática", - "info": "Em listas de carregamento preguiçoso, permite que as subárvores solicitem a manutenção do estado. O uso isolado não tem efeito e deve ser usado em conjunto com o KeepAliveNotification.", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao AutomaticKeepAlive", - "desc": [ - "【child】 : componente filho 【Widget】", - "O componente AutomaticKeepAlive é utilizado em ListView, SliverList, GridView, SliverGrid, PageView, TabBarView e outros componentes de lista e de mudança de página. Para manter o estado de um State, pode-se usar o AutomaticKeepAliveClientMixin, que é um encapsulamento simplificado do uso do KeepAliveNotification. Este exemplo mostra a manutenção do estado de um item da ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ru_RU.json deleted file mode 100644 index 6b757e2b6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "Автоматическое поддержание активности", - "info": "В лениво загружаемых списках позволяет поддеревьям запрашивать сохранение состояния. Само по себе не имеет эффекта, необходимо использовать вместе с KeepAliveNotification.", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в AutomaticKeepAlive", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "Компонент AutomaticKeepAlive используется в исходном коде списков и страничных компонентов, таких как ListView, SliverList, GridView, SliverGrid, PageView, TabBarView и других. Для поддержания активности определенного State можно использовать AutomaticKeepAliveClientMixin, который представляет собой простую обертку для использования KeepAliveNotification. Этот пример демонстрирует поддержание состояния элементов ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_zh-CN.json deleted file mode 100644 index 630f8742c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "自动保活", - "info": "在懒加载的列表中,允许子树请求保持状态,单独使用无效果,需要配合 KeepAliveNotification 使用。", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AutomaticKeepAlive 介绍", - "desc": [ - "【child】 : 子组件 【Widget】", - "在 ListView、SliverList、GridView、SliverGrid、PageView、TabBarView 等列表、切页组件源码中都有使用到 AutomaticKeepAlive 组件。在保活某个 State 时,可以使用 AutomaticKeepAliveClientMixin 进行操作,它是对 KeepAliveNotification 使用的一个简易封装。该示例展示出 ListView 条目的状态保活。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/node1_base.dart deleted file mode 100644 index 0416dbc2f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/node1_base.dart +++ /dev/null @@ -1,114 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class AutomaticKeepAliveDemo extends StatelessWidget { - const AutomaticKeepAliveDemo({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - Colors.red[50]!, - Colors.red[100]!, - Colors.red[200]!, - Colors.red[300]!, - Colors.red[400]!, - Colors.red[500]!, - Colors.red[600]!, - Colors.red[700]!, - Colors.red[800]!, - Colors.red[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: ListView.builder( - itemCount: data.length, - itemBuilder: (_, index) => _ColorBox( - color: data[index], - index: index, - ), - ), - ); - } -} - -class _ColorBox extends StatefulWidget { - final Color color; - final int index; - - const _ColorBox({super.key, required this.color, required this.index}); - - @override - _ColorBoxState createState() => _ColorBoxState(); -} - -class _ColorBoxState extends State<_ColorBox> with AutomaticKeepAliveClientMixin { - bool _checked = false; - - @override - void initState() { - super.initState(); - _checked = false; - print('-----_ColorBoxState#initState---${widget.index}-------'); - } - - @override - void dispose() { - print('-----_ColorBoxState#dispose---${widget.index}-------'); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - super.build(context); - return Container( - alignment: Alignment.center, - height: 50, - color: widget.color, - child: Row( - children: [ - const SizedBox( - width: 60, - ), - Checkbox( - value: _checked, - onChanged: (bool? v) { - setState(() { - _checked = v ?? false; - }); - }, - ), - Text( - "index ${widget.index}: ${colorString(widget.color)}", - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]), - ), - ], - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - @override - bool get wantKeepAlive => true; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_de_DE.json deleted file mode 100644 index 5659293cd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "Untere Navigationsleiste", - "info": "Eine einbettbare untere Navigationsleiste, die normalerweise am unteren Ende des Scaffold-Widgets verwendet wird. Kann Eigenschaften wie Farbe, Schattentiefe, Form usw. angeben und kann mit PageView einen Seitenwechsel-Effekt erzielen.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von BottomAppBar", - "desc": [ - "【elevation】 : Schattentiefe 【double】", - "【shape】 : Form 【NotchedShape】", - "【notchMargin】 : Abstand 【double】", - "【color】 : Farbe 【Color】", - "【child】 : Kind 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_en_US.json deleted file mode 100644 index c4bb3f05a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "Bottom Navigation", - "info": "A recessed bottom navigation bar, typically used at the bottom of a Scaffold component, can specify properties such as color, elevation, shape, etc., and can achieve page-switching effects with PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of BottomAppBar", - "desc": [ - "【elevation】: Elevation 【double】", - "【shape】: Shape 【NotchedShape】", - "【notchMargin】: Notch Margin 【double】", - "【color】: Color 【Color】", - "【child】: Child 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_es_ES.json deleted file mode 100644 index ac76510df..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "Barra de navegación inferior", - "info": "Una barra de navegación inferior que se puede incrustar, generalmente se usa en la parte inferior del componente Scaffold, se pueden especificar propiedades como color, profundidad de sombra, forma, etc., y se puede implementar un efecto de cambio de página con PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de BottomAppBar", - "desc": [ - "【elevation】 : Profundidad de sombra 【double】", - "【shape】 : Forma 【NotchedShape】", - "【notchMargin】 : Distancia de separación 【double】", - "【color】 : Color 【Color】", - "【child】 : Hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_fr_FR.json deleted file mode 100644 index bcfc5fb68..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "Barre de navigation inférieure", - "info": "Une barre de navigation inférieure encastrable, généralement utilisée au bas du composant Scaffold, peut spécifier des propriétés telles que la couleur, la profondeur de l'ombre, la forme, etc., et peut réaliser un effet de changement de page avec PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de BottomAppBar", - "desc": [ - "【elevation】 : Profondeur de l'ombre 【double】", - "【shape】 : Forme 【NotchedShape】", - "【notchMargin】 : Distance d'intervalle 【double】", - "【color】 : Couleur 【Color】", - "【child】 : Enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_it_IT.json deleted file mode 100644 index ccdb358bc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "Barra di navigazione inferiore", - "info": "Una barra di navigazione inferiore incassabile, solitamente utilizzata nella parte inferiore del componente Scaffold, può specificare proprietà come colore, profondità dell'ombra, forma, ecc., e può realizzare l'effetto di cambio pagina con PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di BottomAppBar", - "desc": [ - "【elevation】 : profondità dell'ombra 【double】", - "【shape】 : forma 【NotchedShape】", - "【notchMargin】 : distanza di intervallo 【double】", - "【color】 : colore 【Color】", - "【child】 : figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ja_JP.json deleted file mode 100644 index de775395f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "ボトムナビゲーション", - "info": "凹型のボトムナビゲーションバーで、通常Scaffoldコンポーネントの下部に使用され、色、影の深さ、形状などの属性を指定できます。PageViewと組み合わせてページ切り替え効果を実現できます。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomAppBarの基本使用法", - "desc": [ - "【elevation】 : 影の深さ 【double】", - "【shape】 : 形状 【NotchedShape】", - "【notchMargin】 : 間隔距離 【double】", - "【color】 : 色 【Color】", - "【child】 : 子 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ko_KR.json deleted file mode 100644 index c91f6fa04..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "하단 네비게이션", - "info": "들여쓰기 가능한 하단 네비게이션 바로, 일반적으로 Scaffold 컴포넌트의 하단에 사용되며, 색상, 그림자 깊이, 모양 등 속성을 지정할 수 있으며, PageView와 함께 페이지 전환 효과를 구현할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomAppBar 기본 사용법", - "desc": [ - "【elevation】 : 그림자 깊이 【double】", - "【shape】 : 모양 【NotchedShape】", - "【notchMargin】 : 간격 거리 【double】", - "【color】 : 색상 【Color】", - "【child】 : 자식 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_pt_PT.json deleted file mode 100644 index 33969f6bc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "Barra de Navegação Inferior", - "info": "Uma barra de navegação inferior recortável, geralmente usada na parte inferior do componente Scaffold, pode especificar propriedades como cor, profundidade de sombra, forma, etc., e pode ser usada com PageView para implementar efeitos de mudança de página.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do BottomAppBar", - "desc": [ - "【elevation】 : Profundidade de Sombra 【double】", - "【shape】 : Forma 【NotchedShape】", - "【notchMargin】 : Distância de Espaçamento 【double】", - "【color】 : Cor 【Color】", - "【child】 : Filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ru_RU.json deleted file mode 100644 index 105a260a8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "Нижняя навигация", - "info": "Встраиваемая нижняя панель навигации, обычно используемая в нижней части компонента Scaffold, может быть указана с такими свойствами, как цвет, глубина тени, форма и может быть реализована с эффектом перелистывания страниц с помощью PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование BottomAppBar", - "desc": [ - "【elevation】 : Глубина тени 【double】", - "【shape】 : Форма 【NotchedShape】", - "【notchMargin】 : Расстояние между элементами 【double】", - "【color】 : Цвет 【Color】", - "【child】 : Дочерний элемент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_zh-CN.json deleted file mode 100644 index e367a9f14..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "底部导航", - "info": "一个可凹嵌的底部导航栏,通常用于Scaffold组件的底部,可指定颜色、影深、形状等属性,可与PageView实现切页效果。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomAppBar基本用法", - "desc": [ - "【elevation】 : 影深 【double】", - "【shape】 : 形状 【NotchedShape】", - "【notchMargin】 : 间隔距离 【double】", - "【color】 : 颜色 【Color】", - "【child】 : 孩子 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/node1_base.dart deleted file mode 100644 index f0478b4e1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/node1_base.dart +++ /dev/null @@ -1,108 +0,0 @@ -import 'package:flutter/material.dart'; - - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomBottomAppBar extends StatefulWidget { - const CustomBottomAppBar({Key? key}) : super(key: key); - - @override - _CustomBottomAppBarState createState() => _CustomBottomAppBarState(); -} - -class _CustomBottomAppBarState extends State { - int _position = 0; - FloatingActionButtonLocation _location = - FloatingActionButtonLocation.centerDocked; - final Map iconsMap = { - "图鉴": Icons.home, - "动态": Icons.toys, - "喜欢": Icons.favorite, - "手册": Icons.class_, - }; - Color activeColor = Colors.blue.withAlpha(240); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: 180, - child: Scaffold( - backgroundColor: Colors.purple.withAlpha(22), - floatingActionButton: FloatingActionButton( - onPressed: () => Navigator.of(context).pushNamed('AboutMePage'), - child: const Icon(Icons.add), - ), - bottomNavigationBar: _buildBottomAppBar(), - floatingActionButtonLocation: _location, - body: _buildContent(), - ), - ); - } - - Widget _buildBottomAppBar() { - return BottomAppBar( - elevation: 1, - shape: const CircularNotchedRectangle(), - notchMargin: 5, - color: Colors.red, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: info.asMap().keys.map((i) => _buildChild(i)).toList() - ..insertAll(isCenter ? 2 : 4, [const SizedBox(width: 30)])), - ); - } - - Container _buildContent() { - return Container( - alignment: Alignment.center, - child: Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Text( - '当前页索引:$_position', - style: const TextStyle(color: Colors.blue, fontSize: 18), - ), - Switch( - value: isCenter, - onChanged: (v) { - setState(() { - _location = v - ? FloatingActionButtonLocation.centerDocked - : FloatingActionButtonLocation.endDocked; - }); - }), - ], - ), - ); - } - - List get info => iconsMap.keys.toList(); - - bool get isCenter => _location == FloatingActionButtonLocation.centerDocked; - - Widget _buildChild(int i) { - bool active = i == _position; - return Padding( - padding: const EdgeInsets.all(8.0), - child: GestureDetector( - onTap: () => setState(() => _position = i), - child: Wrap( - direction: Axis.vertical, - alignment: WrapAlignment.center, - children: [ - Icon( - iconsMap[info[i]], - color: active ? activeColor : Colors.white, - size: 30, - ), - Text(info[i], - style: TextStyle( - color: active ? activeColor : Colors.white, fontSize: 14)), - ], - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_de_DE.json deleted file mode 100644 index 768c23712..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_de_DE.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "Untere Navigationsleiste", - "info": "Eine untere Navigationsleiste, die normalerweise am unteren Rand des Scaffold-Widgets verwendet wird. Kann Farben und Modi angeben, akzeptiert Klick-Rückrufe und kann mit PageView Seiteneffekte erzielen.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von BottomNavigationBar", - "desc": [ - "【currentIndex】 : Aktueller Index 【int】", - "【elevation】 : Schattentiefe 【double】", - "【type】 : Typ*2 【BottomNavigationBarType】", - "【fixedColor】 : Farbe, wenn type fix ist 【Color】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【iconSize】 : Symbolgröße 【double】", - "【selectedLabelStyle】 : Stil des ausgewählten Textes 【TextStyle】", - "【unselectedLabelStyle】 : Stil des nicht ausgewählten Textes 【TextStyle】", - "【showUnselectedLabels】 : Nicht ausgewählte Labels anzeigen 【bool】", - "【showSelectedLabels】 : Ausgewählte Labels anzeigen 【bool】", - "【items】 : Elemente 【List】", - "【onTap】 : Klick-Ereignis 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "Kann mit PageView für Seitenwechsel kombiniert werden", - "desc": [ - "Verwenden Sie den Controller beim onTap für den Seitenwechsel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_en_US.json deleted file mode 100644 index 1c7aba5bb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_en_US.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "Bottom Navigation", - "info": "A bottom navigation bar, usually used at the bottom of the Scaffold component, can specify colors and modes, accepts click callbacks, and can achieve page switching effects with PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of BottomNavigationBar", - "desc": [ - "【currentIndex】 : Current index 【int】", - "【elevation】 : Shadow depth 【double】", - "【type】 : Type*2 【BottomNavigationBarType】", - "【fixedColor】 : Color when type is fix 【Color】", - "【backgroundColor】 : Background color 【Color】", - "【iconSize】 : Icon size 【double】", - "【selectedLabelStyle】 : Selected text style 【TextStyle】", - "【unselectedLabelStyle】 : Unselected text style 【TextStyle】", - "【showUnselectedLabels】 : Show unselected labels 【bool】", - "【showSelectedLabels】 : Show selected labels 【bool】", - "【items】 : Items 【List】", - "【onTap】 : Click event 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "Page Switching with PageView", - "desc": [ - "Use the controller for page switching during onTap" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_es_ES.json deleted file mode 100644 index 181161124..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_es_ES.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "Barra de navegación inferior", - "info": "Una barra de navegación inferior, generalmente utilizada en la parte inferior del componente Scaffold, puede especificar colores y modos, acepta devoluciones de llamada de clics y puede lograr efectos de cambio de página con PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de BottomNavigationBar", - "desc": [ - "【currentIndex】 : Índice actual 【int】", - "【elevation】 : Profundidad de sombra 【double】", - "【type】 : Tipo*2 【BottomNavigationBarType】", - "【fixedColor】 : Color cuando el tipo es fix 【Color】", - "【backgroundColor】 : Color de fondo 【Color】", - "【iconSize】 : Tamaño del ícono 【double】", - "【selectedLabelStyle】 : Estilo del texto seleccionado 【TextStyle】", - "【unselectedLabelStyle】 : Estilo del texto no seleccionado 【TextStyle】", - "【showUnselectedLabels】 : Mostrar etiquetas no seleccionadas 【bool】", - "【showSelectedLabels】 : Mostrar etiquetas seleccionadas 【bool】", - "【items】 : Elementos 【List】", - "【onTap】 : Evento de clic 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "Se puede combinar con PageView para cambiar de página", - "desc": [ - "Usar el controlador para cambiar de página durante onTap" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_fr_FR.json deleted file mode 100644 index db97216bf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_fr_FR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "Navigation inférieure", - "info": "Une barre de navigation inférieure, généralement utilisée au bas du composant Scaffold, peut spécifier la couleur et le mode, accepte un rappel de clic et peut réaliser un effet de changement de page avec PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de BottomNavigationBar", - "desc": [ - "【currentIndex】 : Index actuel 【int】", - "【elevation】 : Profondeur de l'ombre 【double】", - "【type】 : Type*2 【BottomNavigationBarType】", - "【fixedColor】 : Couleur lorsque le type est fixe 【Color】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【iconSize】 : Taille de l'icône 【double】", - "【selectedLabelStyle】 : Style du texte sélectionné 【TextStyle】", - "【unselectedLabelStyle】 : Style du texte non sélectionné 【TextStyle】", - "【showUnselectedLabels】 : Afficher les étiquettes non sélectionnées 【bool】", - "【showSelectedLabels】 : Afficher les étiquettes sélectionnées 【bool】", - "【items】 : Éléments 【List】", - "【onTap】 : Événement de clic 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "Peut être combiné avec PageView pour changer de page", - "desc": [ - "Utiliser le contrôleur pour changer de page lors de onTap" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_it_IT.json deleted file mode 100644 index d7cc293f3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_it_IT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "Barra di navigazione inferiore", - "info": "Una barra di navigazione inferiore, solitamente utilizzata nella parte inferiore del componente Scaffold, può specificare colore e modalità, accetta callback di clic e può realizzare l'effetto di cambio pagina con PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di BottomNavigationBar", - "desc": [ - "【currentIndex】 : Indice corrente 【int】", - "【elevation】 : Profondità dell'ombra 【double】", - "【type】 : Tipo*2 【BottomNavigationBarType】", - "【fixedColor】 : Colore quando il tipo è fix 【Color】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【iconSize】 : Dimensione dell'icona 【double】", - "【selectedLabelStyle】 : Stile del testo selezionato 【TextStyle】", - "【unselectedLabelStyle】 : Stile del testo non selezionato 【TextStyle】", - "【showUnselectedLabels】 : Mostra etichette non selezionate 【bool】", - "【showSelectedLabels】 : Mostra etichette selezionate 【bool】", - "【items】 : Voci 【List】", - "【onTap】 : Evento di clic 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "Può essere combinato con PageView per il cambio pagina", - "desc": [ - "Utilizza il controller per il cambio pagina durante onTap" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ja_JP.json deleted file mode 100644 index c9b5e9469..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ja_JP.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "ボトムナビゲーション", - "info": "ボトムナビゲーションバーは、通常Scaffoldコンポーネントの下部に使用され、色やモードを指定でき、クリックコールバックを受け取り、PageViewと組み合わせてページ切り替え効果を実現できます。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomNavigationBarの基本使用", - "desc": [ - "【currentIndex】 : 現在のインデックス 【int】", - "【elevation】 : 影の深さ 【double】", - "【type】 : タイプ*2 【BottomNavigationBarType】", - "【fixedColor】 : typeがfixの場合の色 【Color】", - "【backgroundColor】 : 背景色 【Color】", - "【iconSize】 : アイコンサイズ 【double】", - "【selectedLabelStyle】 : 選択されたテキストスタイル 【TextStyle】", - "【unselectedLabelStyle】 : 選択されていないテキストスタイル 【TextStyle】", - "【showUnselectedLabels】 : 選択されていないラベルを表示 【bool】", - "【showSelectedLabels】 : 選択されたラベルを表示 【bool】", - "【items】 : アイテム 【List】", - "【onTap】 : クリックイベント 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "PageViewと組み合わせてページ切り替え", - "desc": [ - "onTap時にコントローラーを使用してページ切り替えを行う" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ko_KR.json deleted file mode 100644 index 40574e58f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ko_KR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "하단 네비게이션", - "info": "하단 네비게이션 바는 일반적으로 Scaffold 컴포넌트의 하단에 사용되며, 색상과 모드를 지정할 수 있고, 클릭 콜백을 받으며, PageView와 함께 페이지 전환 효과를 구현할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomNavigationBar 기본 사용", - "desc": [ - "【currentIndex】 : 현재 인덱스 【int】", - "【elevation】 : 그림자 깊이 【double】", - "【type】 : 타입*2 【BottomNavigationBarType】", - "【fixedColor】 : type이 fix일 때의 색상 【Color】", - "【backgroundColor】 : 배경색 【Color】", - "【iconSize】 : 아이콘 크기 【double】", - "【selectedLabelStyle】 : 선택된 텍스트 스타일 【TextStyle】", - "【unselectedLabelStyle】 : 선택되지 않은 텍스트 스타일 【TextStyle】", - "【showUnselectedLabels】 : 선택되지 않은 라벨 표시 【bool】", - "【showSelectedLabels】 : 선택된 라벨 표시 【bool】", - "【items】 : 항목 【List】", - "【onTap】 : 클릭 이벤트 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "PageView와 함께 페이지 전환", - "desc": [ - "onTap 시 컨트롤러를 사용하여 페이지 전환" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_pt_PT.json deleted file mode 100644 index 5a815723d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_pt_PT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "Navegação Inferior", - "info": "Uma barra de navegação inferior, normalmente usada na parte inferior de um componente Scaffold, pode especificar cores e modos, aceita callbacks de clique e pode ser usada com PageView para efeitos de mudança de página.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do BottomNavigationBar", - "desc": [ - "【currentIndex】 : Índice atual 【int】", - "【elevation】 : Profundidade da sombra 【double】", - "【type】 : Tipo*2 【BottomNavigationBarType】", - "【fixedColor】 : Cor quando o tipo é fixo 【Color】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【iconSize】 : Tamanho do ícone 【double】", - "【selectedLabelStyle】 : Estilo do texto selecionado 【TextStyle】", - "【unselectedLabelStyle】 : Estilo do texto não selecionado 【TextStyle】", - "【showUnselectedLabels】 : Mostrar etiquetas não selecionadas 【bool】", - "【showSelectedLabels】 : Mostrar etiquetas selecionadas 【bool】", - "【items】 : Itens 【List】", - "【onTap】 : Evento de clique 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "Pode ser combinado com PageView para mudar de página", - "desc": [ - "Usar o controlador para mudar de página durante o onTap" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ru_RU.json deleted file mode 100644 index 86f960935..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ru_RU.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "Нижняя навигация", - "info": "Нижняя панель навигации, обычно используется внизу компонента Scaffold, может задавать цвет и режим, принимает обратный вызов при нажатии, может реализовать эффект переключения страниц с PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование BottomNavigationBar", - "desc": [ - "【currentIndex】 : текущий индекс 【int】", - "【elevation】 : глубина тени 【double】", - "【type】 : тип*2 【BottomNavigationBarType】", - "【fixedColor】 : цвет для типа fix 【Color】", - "【backgroundColor】 : цвет фона 【Color】", - "【iconSize】 : размер иконки 【double】", - "【selectedLabelStyle】 : стиль выбранного текста 【TextStyle】", - "【unselectedLabelStyle】 : стиль невыбранного текста 【TextStyle】", - "【showUnselectedLabels】 : показывать невыбранные метки 【bool】", - "【showSelectedLabels】 : показывать выбранные метки 【bool】", - "【items】 : элементы 【List】", - "【onTap】 : событие нажатия 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "Можно использовать с PageView для переключения страниц", - "desc": [ - "Использовать контроллер для переключения страниц при onTap" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_zh-CN.json deleted file mode 100644 index 2582fb6da..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_zh-CN.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "底部导航", - "info": "一个底部导航栏,通常用于Scaffold组件的底部,可指定颜色和模式,接受点击回调,可与PageView实现切页效果。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomNavigationBar基本使用", - "desc": [ - "【currentIndex】 : 当前索引 【int】", - "【elevation】 : 影深 【double】", - "【type】 : 类型*2 【BottomNavigationBarType】", - "【fixedColor】 : type为fix的颜色 【Color】", - "【backgroundColor】 : 背景色 【Color】", - "【iconSize】 : 图标大小 【double】", - "【selectedLabelStyle】 : 选中文字样式 【TextStyle】", - "【unselectedLabelStyle】 : 未选中文字样式 【TextStyle】", - "【showUnselectedLabels】 : 显示未选中标签 【bool】", - "【showSelectedLabels】 : 显示选中标签 【bool】", - "【items】 : 条目 【List】", - "【onTap】 : 点击事件 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "可结合PageView进行切页", - "desc": [ - "在onTap时进行使用控制器进行切页" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/node1_base.dart deleted file mode 100644 index ca5caa22c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/node1_base.dart +++ /dev/null @@ -1,81 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomBottomNavigationBar extends StatefulWidget { - const CustomBottomNavigationBar({Key? key}) : super(key: key); - - @override - _CustomBottomNavigationBarState createState() => - _CustomBottomNavigationBarState(); -} - -class _CustomBottomNavigationBarState extends State { - int _position = 0; - BottomNavigationBarType _type = BottomNavigationBarType.shifting; - final Map iconsMap = { //底栏图标 - "图鉴": Icons.home, "动态": Icons.toys, - "喜欢": Icons.favorite, "手册": Icons.class_, - "我的": Icons.account_circle, - }; - final List _colors = [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green, - Colors.purple, - ]; - - @override - Widget build(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - _buildOp(), - _buildBottomNavigationBar(), - ], - ); - } - - bool get isShifting => _type == BottomNavigationBarType.shifting; - - BottomNavigationBar _buildBottomNavigationBar() { - return BottomNavigationBar( - onTap: (position) => setState(() => _position = position), - currentIndex: _position, - elevation: 1, - type: _type, - fixedColor: isShifting ? Colors.white : _colors[_position], - backgroundColor: Colors.white, - iconSize: 25, - selectedLabelStyle: const TextStyle(fontWeight: FontWeight.bold), - showUnselectedLabels: false, - showSelectedLabels: true, - items: iconsMap.keys - .map((key) => BottomNavigationBarItem( - label:key, - icon: Icon(iconsMap[key]), - backgroundColor: _colors[_position])) - .toList(), - ); - } - - Widget _buildOp() { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Text( - _type.toString(), - style: const TextStyle(fontWeight: FontWeight.bold, color: Colors.blue), - ), - Switch( - value: _type == BottomNavigationBarType.shifting, - onChanged: (b) { - setState(() => _type = b - ? BottomNavigationBarType.shifting - : BottomNavigationBarType.fixed); - }), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/node2_page.dart b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/node2_page.dart deleted file mode 100644 index e3b0ba15d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/node2_page.dart +++ /dev/null @@ -1,95 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class BottomNavigationBarWithPageView extends StatefulWidget { - const BottomNavigationBarWithPageView({Key? key}) : super(key: key); - - @override - _BottomNavigationBarWithPageViewState createState() => - _BottomNavigationBarWithPageViewState(); -} - -class _BottomNavigationBarWithPageViewState - extends State { - int _position = 0; - final Map iconsMap = { - //底栏图标 - "图鉴": Icons.home, "动态": Icons.toys, - "喜欢": Icons.favorite, "手册": Icons.class_, - "我的": Icons.account_circle, - }; - final List _colors = [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green, - Colors.purple, - ]; - late PageController _controller; //页面控制器,初始0 - - @override - void initState() { - _controller = PageController( - initialPage: _position, - ); - super.initState(); - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Container( - color: Colors.orange.withAlpha(88), - width: MediaQuery.of(context).size.width, - height: 150, - child: PageView( - controller: _controller, - children: iconsMap.keys - .map((e) => Center( - child: Text( - e, - style: const TextStyle( - color: Colors.white, - fontSize: 20, - ), - ), - )) - .toList(), - ), - ), - _buildBottomNavigationBar() - ], - ); - } - - BottomNavigationBar _buildBottomNavigationBar() { - return BottomNavigationBar( - onTap: (position) { - _controller.jumpToPage(position); - setState(() => _position = position); - }, - currentIndex: _position, - elevation: 1, - type: BottomNavigationBarType.shifting, - fixedColor: Colors.white, - iconSize: 25, - selectedLabelStyle: const TextStyle(fontWeight: FontWeight.bold), - showUnselectedLabels: false, - showSelectedLabels: true, - items: iconsMap.keys - .map((key) => BottomNavigationBarItem( - label: key, - icon: Icon(iconsMap[key]), - backgroundColor: _colors[_position])) - .toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_de_DE.json deleted file mode 100644 index 05061a64b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_de_DE.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "Karussellansicht", - "info": "Eine Karussell-Komponente, die den Material Design-Richtlinien entspricht. Zeigt eine scrollbare Liste von Elementen an, wobei jedes Element basierend auf dem ausgewählten Layout dynamisch angepasst werden kann.", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CarouselView", - "desc": [ - "【itemExtent】 : Erzwungene Größe in der Hauptachse 【double】", - "【shrinkExtent】: Minimale Größe des Elements in der Hauptachse während des Scrollens 【double】", - "【scrollDirection】 : Scrollrichtung 【Axis?】", - "【children】: Liste der Unterkomponenten 【List】" - ] - }, - { - "file": "node2.dart", - "name": "Stilkonfiguration von CarouselView", - "desc": [ - "【padding】 : Innenabstand 【EdgeInsets? 】", - "【backgroundColor】 : Hintergrundfarbe 【Color? 】", - "【elevation】 : Schattentiefe 【double?】", - "【shape】 : Form 【ShapeBorder?】", - "【controller】 : Controller 【CarouselController?】", - "【reverse】 : Umgekehrtes Scrollen 【bool】", - "【onTap】 : Klick-Ereignis 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_en_US.json deleted file mode 100644 index 714743fca..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_en_US.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "Carousel View", - "info": "A carousel component that conforms to Material Design specifications. Displays a scrollable list of items, each of which can dynamically resize based on the selected layout.", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CarouselView Basic Usage", - "desc": [ - "【itemExtent】 : Forced size in the main axis direction 【double】", - "【shrinkExtent】: Minimum size of the item in the main axis direction during scrolling 【double】", - "【scrollDirection】 : Scroll axis direction 【Axis?】", - "【children】: List of child components 【List】" - ] - }, - { - "file": "node2.dart", - "name": "CarouselView Style Configuration", - "desc": [ - "【padding】 : Padding 【EdgeInsets? 】", - "【backgroundColor】 : Background color 【Color? 】", - "【elevation】 : Shadow depth 【double?】", - "【shape】 : Shape 【ShapeBorder?】", - "【controller】 : Controller 【CarouselController?】", - "【reverse】 : Whether to scroll in reverse 【bool】", - "【onTap】 : Click event 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_es_ES.json deleted file mode 100644 index 8d303b7c4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_es_ES.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "Vista de Carrusel", - "info": "Un componente de carrusel que cumple con las especificaciones de Material Design. Muestra una lista de elementos desplazables, donde cada elemento puede ajustar dinámicamente su tamaño según el diseño seleccionado.", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CarouselView", - "desc": [ - "【itemExtent】 : Tamaño forzado en la dirección del eje principal 【double】", - "【shrinkExtent】: Tamaño mínimo de los elementos en la dirección del eje principal durante el desplazamiento 【double】", - "【scrollDirection】 : Dirección del desplazamiento 【Axis?】", - "【children】: Lista de componentes hijos 【List】" - ] - }, - { - "file": "node2.dart", - "name": "Configuración de estilo de CarouselView", - "desc": [ - "【padding】 : Relleno interno 【EdgeInsets? 】", - "【backgroundColor】 : Color de fondo 【Color? 】", - "【elevation】 : Profundidad de la sombra 【double?】", - "【shape】 : Forma 【ShapeBorder?】", - "【controller】 : Controlador 【CarouselController?】", - "【reverse】 : Desplazamiento inverso 【bool】", - "【onTap】 : Evento de clic 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_fr_FR.json deleted file mode 100644 index f780de403..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_fr_FR.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "Vue Carrousel", - "info": "Un composant de carrousel conforme aux normes Material Design. Affiche une liste d'éléments défilables, chaque élément pouvant être redimensionné dynamiquement en fonction de la mise en page sélectionnée.", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CarouselView", - "desc": [ - "【itemExtent】 : Taille forcée dans la direction de l'axe principal 【double】", - "【shrinkExtent】: Taille minimale des éléments dans la direction de l'axe principal pendant le défilement 【double】", - "【scrollDirection】 : Direction de défilement 【Axis?】", - "【children】: Liste des composants enfants 【List】" - ] - }, - { - "file": "node2.dart", - "name": "Configuration du style de CarouselView", - "desc": [ - "【padding】 : Marge intérieure 【EdgeInsets? 】", - "【backgroundColor】 : Couleur de fond 【Color? 】", - "【elevation】 : Profondeur de l'ombre 【double?】", - "【shape】 : Forme 【ShapeBorder?】", - "【controller】 : Contrôleur 【CarouselController?】", - "【reverse】 : Défilement inversé 【bool】", - "【onTap】 : Événement de clic 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_it_IT.json deleted file mode 100644 index 554e03260..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_it_IT.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "Vista Carosello", - "info": "Un componente carosello conforme alle specifiche di Material Design. Visualizza un elenco di elementi scorrevoli, ciascuno dei quali può ridimensionarsi dinamicamente in base al layout selezionato.", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di CarouselView", - "desc": [ - "【itemExtent】 : Dimensione forzata nella direzione principale 【double】", - "【shrinkExtent】: Dimensione minima dell'elemento nella direzione principale durante lo scorrimento 【double】", - "【scrollDirection】 : Direzione di scorrimento 【Axis?】", - "【children】: Lista dei componenti figli 【List】" - ] - }, - { - "file": "node2.dart", - "name": "Configurazione dello stile di CarouselView", - "desc": [ - "【padding】 : Spaziatura interna 【EdgeInsets? 】", - "【backgroundColor】 : Colore di sfondo 【Color? 】", - "【elevation】 : Profondità dell'ombra 【double?】", - "【shape】 : Forma 【ShapeBorder?】", - "【controller】 : Controller 【CarouselController?】", - "【reverse】 : Scorrimento inverso 【bool】", - "【onTap】 : Evento di clic 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ja_JP.json deleted file mode 100644 index 12f3963b5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ja_JP.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "カルーセルビュー", - "info": "Material Design 仕様に準拠したカルーセルコンポーネント。スクロール可能な項目リストを表示し、各項目は選択されたレイアウトに基づいて動的にサイズを調整できます。", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CarouselView 基本の使い方", - "desc": [ - "【itemExtent】 : 主軸方向の強制サイズ 【double】", - "【shrinkExtent】: スクロール中、主軸方向の項目の最小サイズ 【double】", - "【scrollDirection】 : スクロール軸方向 【Axis?】", - "【children】: 子コンポーネントリスト 【List】" - ] - }, - { - "file": "node2.dart", - "name": "CarouselView スタイル設定", - "desc": [ - "【padding】 : パディング 【EdgeInsets? 】", - "【backgroundColor】 : 背景色 【Color? 】", - "【elevation】 : 影の深さ 【double?】", - "【shape】 : 形状 【ShapeBorder?】", - "【controller】 : コントローラー 【CarouselController?】", - "【reverse】 : 逆方向にスクロールするかどうか 【bool】", - "【onTap】 : クリックイベント 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ko_KR.json deleted file mode 100644 index cb49905c6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ko_KR.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "캐러셀 뷰", - "info": "Material Design 규격에 부합하는 캐러셀 컴포넌트입니다. 스크롤 가능한 항목 목록을 표시하며, 각 항목은 선택된 레이아웃에 따라 동적으로 크기를 조정할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CarouselView 기본 사용법", - "desc": [ - "【itemExtent】 : 주축 방향 강제 크기 【double】", - "【shrinkExtent】: 스크롤 중, 주축 방향 항목 최소 크기 【double】", - "【scrollDirection】 : 스크롤 방향 【Axis?】", - "【children】: 하위 컴포넌트 목록 【List】" - ] - }, - { - "file": "node2.dart", - "name": "CarouselView 스타일 설정", - "desc": [ - "【padding】 : 안쪽 여백 【EdgeInsets? 】", - "【backgroundColor】 : 배경색 【Color? 】", - "【elevation】 : 그림자 깊이 【double?】", - "【shape】 : 모양 【ShapeBorder?】", - "【controller】 : 컨트롤러 【CarouselController?】", - "【reverse】 : 역방향 스크롤 여부 【bool】", - "【onTap】 : 클릭 이벤트 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_pt_PT.json deleted file mode 100644 index 23c1508ec..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_pt_PT.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "Visualização de Carrossel", - "info": "Um componente de carrossel que segue as especificações do Material Design. Exibe uma lista de itens roláveis, onde cada item pode ser redimensionado dinamicamente com base no layout selecionado.", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CarouselView", - "desc": [ - "【itemExtent】 : Tamanho fixo na direção do eixo principal 【double】", - "【shrinkExtent】: Tamanho mínimo do item na direção do eixo principal durante o deslize 【double】", - "【scrollDirection】 : Direção do deslize 【Axis?】", - "【children】: Lista de componentes filhos 【List】" - ] - }, - { - "file": "node2.dart", - "name": "Configuração de Estilo do CarouselView", - "desc": [ - "【padding】 : Preenchimento interno 【EdgeInsets? 】", - "【backgroundColor】 : Cor de fundo 【Color? 】", - "【elevation】 : Profundidade da sombra 【double?】", - "【shape】 : Forma 【ShapeBorder?】", - "【controller】 : Controlador 【CarouselController?】", - "【reverse】 : Deslize reverso 【bool】", - "【onTap】 : Evento de clique 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ru_RU.json deleted file mode 100644 index d42e01009..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ru_RU.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "Карусель", - "info": "Карусельный компонент, соответствующий спецификациям Material Design. Отображает прокручиваемый список элементов, каждый из которых может динамически изменять размер в зависимости от выбранного макета.", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CarouselView", - "desc": [ - "【itemExtent】 : Фиксированный размер по главной оси 【double】", - "【shrinkExtent】: Минимальный размер элемента по главной оси при прокрутке 【double】", - "【scrollDirection】 : Направление прокрутки 【Axis?】", - "【children】: Список дочерних элементов 【List】" - ] - }, - { - "file": "node2.dart", - "name": "Настройка стиля CarouselView", - "desc": [ - "【padding】 : Внутренний отступ 【EdgeInsets? 】", - "【backgroundColor】 : Цвет фона 【Color? 】", - "【elevation】 : Глубина тени 【double?】", - "【shape】 : Форма 【ShapeBorder?】", - "【controller】 : Контроллер 【CarouselController?】", - "【reverse】 : Прокрутка в обратном направлении 【bool】", - "【onTap】 : Событие нажатия 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_zh-CN.json deleted file mode 100644 index f75e987c7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_zh-CN.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "轮播视图", - "info": "一个符合 Material Design 规范的轮播组件。显示一个可滚动的项目列表,每条目都可以根据选定的布局动态调整大小。", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CarouselView 基础用法", - "desc": [ - "【itemExtent】 : 主轴方向强制尺寸 【double】", - "【shrinkExtent】: 滑动中,主轴方向条目最小尺寸 【double】", - "【scrollDirection】 : 滑动轴向 【Axis?】", - "【children】: 子组件列表 【List】" - ] - }, - { - "file": "node2.dart", - "name": "CarouselView 样式配置", - "desc": [ - "【padding】 : 内边距 【EdgeInsets? 】", - "【backgroundColor】 : 背景色 【Color? 】", - "【elevation】 : 阴影深 【double?】", - "【shape】 : 形状 【ShapeBorder?】", - "【controller】 : 控制器 【CarouselController?】", - "【reverse】 : 是否反向滑动 【bool】", - "【onTap】 : 点击事件 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/node1_base.dart deleted file mode 100644 index 158a34146..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/node1_base.dart +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - -class CarouselNode1 extends StatefulWidget { - const CarouselNode1({super.key}); - - @override - State createState() => _CarouselNode1State(); -} - -class _CarouselNode1State extends State { - @override - Widget build(BuildContext context) { - return ConstrainedBox( - constraints: const BoxConstraints(maxHeight: 160), - child: CarouselView( - itemExtent: 260, - shrinkExtent: 160, - children: List.generate(20, (int index) { - return UncontainedLayoutCard(index: index, label: 'Item $index'); - }), - ), - ); - } -} - -class UncontainedLayoutCard extends StatelessWidget { - const UncontainedLayoutCard({ - super.key, - required this.index, - required this.label, - }); - - final int index; - final String label; - - @override - Widget build(BuildContext context) { - return ColoredBox( - color: Colors.primaries[index % Colors.primaries.length].withOpacity(0.5), - child: Center( - child: Text( - label, - style: const TextStyle(color: Colors.white, fontSize: 20), - overflow: TextOverflow.clip, - softWrap: false, - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/node2.dart b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/node2.dart deleted file mode 100644 index 6caabcbf8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/node2.dart +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - -class CarouselNode2 extends StatefulWidget { - const CarouselNode2({super.key}); - - @override - State createState() => _CarouselNode2State(); -} - -class _WidgetMeta { - final String name; - final String desc; - - _WidgetMeta(this.name, this.desc); -} - -class _CarouselNode2State extends State { - final List<_WidgetMeta> widgets = [ - _WidgetMeta('Container 容器组件', '用于容纳单个子组件的容器组件。集成了若干个单子组件的功能,如内外边距、形变、装饰、约束等...'), - _WidgetMeta('Text 文字组件', '用于显示文字的组件。拥有的属性非常多,足够满足你的使用需求,核心样式由style属性控制。'), - _WidgetMeta('Card 卡片组件', '基于Material组件实现,用于将单个组件卡片化。并使其具有投影效果,可加外边距,也可以自定义卡片形状。'), - _WidgetMeta('FlutterLogo Flutter图标', '用于展示Flutter图标组件。可定义颜色、尺寸、展示模式等信息,是一个非常简单的组件。'), - _WidgetMeta('Banner 角标组件', '用于角标显示的组件。可容纳一个子组件,可选择方位添加角标及信息文字,可设置颜色。'), - _WidgetMeta('Icon 图标组件', '用于图标显示的组件。可指定图标资源、大小、颜色。非常简单,但非常实用。'), - _WidgetMeta('ImageIcon 图形图标', '用于将一个图片变为纯色的组件。可指定大小、颜色。'), - _WidgetMeta('FadeInImage 淡入图片', '透明渐变地加载一张图片。可指定占位图片、进退的动画曲线、时间、宽高、fit类型、对齐方式、重复方式等。'), - _WidgetMeta('CircleAvatar 圆形组件', '可将一张图片变成圆形,并且中间可以放置一个组件。可指定半径、前景色、背景色等。'), - _WidgetMeta('Visibility 显隐组件', '控制一个组件显示或隐藏,可设置隐藏后的占位组件。与其功能相似的由OffStage组件。'), - ]; - - @override - Widget build(BuildContext context) { - return ConstrainedBox( - constraints: const BoxConstraints(maxHeight: 64), - child: CarouselView( - backgroundColor: const Color(0xfff7f8fa), - itemExtent: 240, - // elevation: 1, - shrinkExtent: 240, - itemSnapping: true, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(6)), - children: widgets.map((e) => _WidgetDisplay(widget: e)).toList(), - ), - ); - } -} - -class _WidgetDisplay extends StatelessWidget { - const _WidgetDisplay({ - super.key, - required this.widget, - }); - - final _WidgetMeta widget; - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - children: [ - Container( - width: 16, - height: 16, - margin: EdgeInsets.only(right: 6), - alignment: Alignment.center, - decoration: - BoxDecoration(color: Colors.red, borderRadius: BorderRadius.circular(4)), - child: Text( - '热', - style: TextStyle(fontSize: 8, color: Colors.white, height: 1), - ), - ), - Text( - widget.name, - style: - const TextStyle(color: Colors.black, fontSize: 14, fontWeight: FontWeight.bold), - overflow: TextOverflow.clip, - softWrap: false, - ), - ], - ), - Text( - widget.desc, - style: const TextStyle(color: Colors.grey, fontSize: 12), - overflow: TextOverflow.clip, - softWrap: false, - ), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_de_DE.json deleted file mode 100644 index e2ca253cf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "Checkbox", - "info": "Checkbox-Komponente, häufig für Konfigurationswechsel verwendet, kann Farben angeben, empfängt Statusänderungsrückrufe und kann auch einen dreistufigen Zustand angeben.", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung der Checkbox", - "desc": [ - "【value】 : Ob ausgewählt 【double】", - "【checkColor】: Farbe des Häkchens ✔️, wenn ausgewählt 【Color】", - "【activeColor】: Farbe innerhalb des Rahmens, wenn ausgewählt 【Color】", - "【onChanged】: Ereignis bei Zustandsänderung 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "Dreistufige Checkbox", - "desc": [ - "【tristate】 : Ob dreistufig 【double】", - " bei onChanged," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_en_US.json deleted file mode 100644 index c2413a9cd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "Checkbox", - "info": "Checkbox component, commonly used for toggling configurations, can specify colors, receive state change callbacks, and can also specify tristate.", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Checkbox", - "desc": [ - "【value】 : Whether it is selected 【double】", - "【checkColor】: Color of ✔️ when selected 【Color】", - "【activeColor】: Color inside the box when selected 【Color】", - "【onChanged】: State change event 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "Tristate of Checkbox", - "desc": [ - "【tristate】 : Whether it is tristate 【double】", - " when onChanged," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_es_ES.json deleted file mode 100644 index 5b500e892..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "Casilla de verificación", - "info": "Componente de casilla de verificación, comúnmente utilizado para alternar configuraciones, puede especificar colores, recibir devoluciones de llamada de cambios de estado, y también puede especificar tres estados.", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Checkbox", - "desc": [ - "【value】 : Si está seleccionado 【double】", - "【checkColor】: Color de la marca ✔️ cuando está seleccionado 【Color】", - "【activeColor】: Color dentro del cuadro cuando está seleccionado 【Color】", - "【onChanged】: Evento de cambio de estado 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "Tres estados de Checkbox", - "desc": [ - "【tristate】 : Si tiene tres estados 【double】", - " en onChanged," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_fr_FR.json deleted file mode 100644 index 5f9960596..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "Case à cocher", - "info": "Composant de case à cocher, souvent utilisé pour basculer les configurations, peut spécifier la couleur, recevoir un rappel de changement d'état, et peut également spécifier un état ternaire.", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Checkbox", - "desc": [ - "【value】 : Est-ce sélectionné 【double】", - "【checkColor】: Couleur du ✔️gou lorsque sélectionné 【Color】", - "【activeColor】: Couleur à l'intérieur de la case lorsque sélectionné 【Color】", - "【onChanged】: Événement de changement d'état 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "État ternaire de Checkbox", - "desc": [ - "【tristate】 : Est-ce un état ternaire 【double】", - " lors de onChanged," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_it_IT.json deleted file mode 100644 index 26f3c698c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "Casella di controllo", - "info": "Componente casella di controllo, comunemente utilizzato per l'alternanza delle configurazioni, può specificare il colore, ricevere callback di cambio di stato e può anche specificare tre stati.", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base della casella di controllo", - "desc": [ - "【value】 : Se è selezionato 【double】", - "【checkColor】: Colore del segno di spunta quando selezionato 【Color】", - "【activeColor】: Colore all'interno del riquadro quando selezionato 【Color】", - "【onChanged】: Evento di cambio di stato 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "Tre stati della casella di controllo", - "desc": [ - "【tristate】 : Se è a tre stati 【double】", - " Quando onChanged," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ja_JP.json deleted file mode 100644 index 87d867397..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "チェックボックス", - "info": "チェックボックスコンポーネントは、設定の切り替えによく使用され、色を指定でき、状態変化のコールバックを受け取り、三状態も指定できます。", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "チェックボックスの基本使用法", - "desc": [ - "【value】 : 選択されているかどうか 【double】", - "【checkColor】: 選択時の✔️チェックマークの色 【Color】", - "【activeColor】: 選択時のボックス内の色 【Color】", - "【onChanged】: 状態変更イベント 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "チェックボックスの三状態", - "desc": [ - "【tristate】 : 三状態かどうか 【double】", - " onChanged時," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ko_KR.json deleted file mode 100644 index e6a3927b1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "체크박스", - "info": "체크박스 컴포넌트는 설정 전환에 자주 사용되며, 색상을 지정할 수 있고, 상태 변경 콜백을 받을 수 있으며, 삼중 상태를 지정할 수도 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Checkbox 기본 사용법", - "desc": [ - "【value】 : 선택 여부 【double】", - "【checkColor】: 선택 시 ✔️ 체크 색상 【Color】", - "【activeColor】: 선택 시 상자 내부 색상 【Color】", - "【onChanged】: 상태 변경 이벤트 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "Checkbox의 삼중 상태", - "desc": [ - "【tristate】 : 삼중 상태 여부 【double】", - " onChanged 시," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_pt_PT.json deleted file mode 100644 index 4a7be7554..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "Caixa de verificação", - "info": "Componente de caixa de verificação, frequentemente usado para alternar configurações, pode especificar cores, receber retorno de chamada de alteração de estado e também pode especificar três estados.", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Checkbox", - "desc": [ - "【value】 : se está selecionado 【double】", - "【checkColor】: cor do ✔️gou quando selecionado 【Color】", - "【activeColor】: cor dentro da caixa quando selecionado 【Color】", - "【onChanged】: evento de mudança de estado 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "Três estados do Checkbox", - "desc": [ - "【tristate】 : se é de três estados 【double】", - " onChanged," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ru_RU.json deleted file mode 100644 index f20275f56..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "Флажок", - "info": "Компонент флажка, часто используется для переключения настроек, может быть указан цвет, принимает обратный вызов изменения состояния, также может быть указан трехсостояний.", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Checkbox", - "desc": [ - "【value】 : Выбрано ли 【double】", - "【checkColor】: Цвет галочки при выборе 【Color】", - "【activeColor】: Цвет внутри рамки при выборе 【Color】", - "【onChanged】: Событие изменения состояния 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "Трехсостояний Checkbox", - "desc": [ - "【tristate】 : Является ли трехсостояний 【double】", - " onChanged," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_zh-CN.json deleted file mode 100644 index 7e0c96b8f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "复选框", - "info": "复选框组件,常用于配置的切换,可指定颜色,接收状态变化回调,也可指定三态。", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Checkbox基础用法", - "desc": [ - "【value】 : 是否选中 【double】", - "【checkColor】: 选中时✔️gou颜色 【Color】", - "【activeColor】: 选中时框内颜色 【Color】", - "【onChanged】: 状态改变事件 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "Checkbox的三态", - "desc": [ - "【tristate】 : 是否是三态 【double】", - " onChanged时," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/node1_base.dart deleted file mode 100644 index 70988aea8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/node1_base.dart +++ /dev/null @@ -1,39 +0,0 @@ - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - - -class CustomCheckbox extends StatefulWidget { - const CustomCheckbox({Key? key}) : super(key: key); - - @override - _CustomCheckboxState createState() => _CustomCheckboxState(); -} - -class _CustomCheckboxState extends State { - bool _checked = false; - final List colors = [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: colors - .map((e) => Checkbox( - value: _checked, - checkColor: Colors.white, - activeColor: e, - onChanged: (bool? value) => - setState(() => _checked = value??false))) - .toList(), - ); - } -} - - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/node2_tristate.dart b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/node2_tristate.dart deleted file mode 100644 index e0d55bd0c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/node2_tristate.dart +++ /dev/null @@ -1,35 +0,0 @@ - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class TristateCheckBok extends StatefulWidget { - const TristateCheckBok({Key? key}) : super(key: key); - - @override - _TristateCheckBokState createState() => _TristateCheckBokState(); -} - -class _TristateCheckBokState extends State { - bool _checked = false; - final colors = [Colors.red, Colors.yellow, Colors.blue, Colors.green]; - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: colors - .map((e) => - Checkbox( - value: _checked, - tristate: true, - checkColor: Colors.white, - activeColor: e, - onChanged: (bool? value) { - print(value); - setState(() => _checked = value??false); - })) - .toList(), - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_de_DE.json deleted file mode 100644 index 1e2eaed9f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "Rundes Fortschrittsanzeige", - "info": "Runde Fortschrittsanzeige, bei der Eigenschaften wie Farbe, Linienstärke, Fortschritt usw. angegeben werden können. Wenn der Wert null ist, dreht sie sich ununterbrochen.", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CircularProgressIndicator", - "desc": [ - "【value】 : Fortschritt 【double】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【valueColor】 : Fortschrittsfarbe 【Animation】", - "【strokeWidth】 : Linienstärke 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_en_US.json deleted file mode 100644 index 69d3e60ce..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "Circular Progress", - "info": "A circular progress display that can specify properties such as color, line width, and progress. It will keep rotating when value is null.", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CircularProgressIndicator", - "desc": [ - "【value】 : Progress 【double】", - "【backgroundColor】 : Background Color 【Color】", - "【valueColor】 : Progress Color 【Animation】", - "【strokeWidth】 : Line Width 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_es_ES.json deleted file mode 100644 index 028316bd8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "Indicador de progreso circular", - "info": "Muestra de progreso circular, se pueden especificar propiedades como color, ancho de línea, progreso, etc. Si el valor es nulo, girará continuamente.", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CircularProgressIndicator", - "desc": [ - "【value】 : progreso 【double】", - "【backgroundColor】 : color de fondo 【Color】", - "【valueColor】 : color de progreso 【Animation】", - "【strokeWidth】 : ancho de línea 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_fr_FR.json deleted file mode 100644 index e2b75ebdb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "Progrès circulaire", - "info": "Affichage de progression circulaire, permettant de spécifier des propriétés telles que la couleur, l'épaisseur de la ligne, la progression, etc. Lorsque la valeur est null, il tourne en continu.", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CircularProgressIndicator", - "desc": [ - "【value】 : Progression 【double】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【valueColor】 : Couleur de progression 【Animation】", - "【strokeWidth】 : Épaisseur de la ligne 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_it_IT.json deleted file mode 100644 index 521191029..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "Indicatore di progresso circolare", - "info": "Visualizzazione del progresso circolare, con possibilità di specificare colore, larghezza della linea, progresso, ecc. Ruota continuamente quando il valore è null.", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CircularProgressIndicator", - "desc": [ - "【value】 : Progresso 【double】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【valueColor】 : Colore del progresso 【Animation】", - "【strokeWidth】 : Larghezza della linea 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ja_JP.json deleted file mode 100644 index 5da057873..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "円形の進捗", - "info": "円形の進捗表示、色、線幅、進捗などの属性を指定できます。valueがnullの場合、回転し続けます。", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CircularProgressIndicatorの基本使用", - "desc": [ - "【value】 : 進捗 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【valueColor】 : 進捗色 【Animation】", - "【strokeWidth】 : 線幅 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ko_KR.json deleted file mode 100644 index 130e986bf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "원형 진행률", - "info": "원형 진행률 표시, 색상, 선 두께, 진행률 등 속성을 지정할 수 있습니다. value가 null일 경우 계속 회전합니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CircularProgressIndicator 기본 사용", - "desc": [ - "【value】 : 진행률 【double】", - "【backgroundColor】 : 배경색 【Color】", - "【valueColor】 : 진행률 색상 【Animation】", - "【strokeWidth】 : 선 두께 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_pt_PT.json deleted file mode 100644 index 9f3c2822d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "Indicador de Progresso Circular", - "info": "Exibição de progresso circular, pode especificar atributos como cor, largura da linha, progresso, etc. Quando o valor é nulo, ele gira continuamente.", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CircularProgressIndicator", - "desc": [ - "【value】 : Progresso 【double】", - "【backgroundColor】 : Cor de Fundo 【Color】", - "【valueColor】 : Cor do Progresso 【Animation】", - "【strokeWidth】 : Largura da Linha 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ru_RU.json deleted file mode 100644 index 2ce4fce90..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "Круговой индикатор прогресса", - "info": "Круговой индикатор прогресса, можно указать цвет, ширину линии, прогресс и другие свойства. Если значение value равно null, индикатор будет вращаться бесконечно.", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CircularProgressIndicator", - "desc": [ - "【value】 : Прогресс 【double】", - "【backgroundColor】 : Цвет фона 【Color】", - "【valueColor】 : Цвет прогресса 【Animation】", - "【strokeWidth】 : Ширина линии 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_zh-CN.json deleted file mode 100644 index eb7776e50..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "圆形进度", - "info": "圆形的进度显示,可指定颜色、线宽、进度等属性。value为null时会不停旋转。", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CircularProgressIndicator基本使用", - "desc": [ - "【value】 : 进度 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【valueColor】 : 进度颜色 【Animation】", - "【strokeWidth】 : 线宽 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/node1_base.dart deleted file mode 100644 index 9a462969f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/node1_base.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomCircularProgressIndicator extends StatefulWidget { - const CustomCircularProgressIndicator({Key? key}) : super(key: key); - - @override - _CustomCircularProgressIndicatorState createState() => - _CustomCircularProgressIndicatorState(); -} - -class _CustomCircularProgressIndicatorState - extends State { - - List data = [0.2,0.4,0.6,0.8,null]; - - @override - Widget build(BuildContext context) { - - return Wrap( - spacing: 10, - children:data.map((e)=>SizedBox( - width: 50, - height: 50, - child: CircularProgressIndicator( - value: e, - backgroundColor: Colors.grey.withAlpha(33), - valueColor: const AlwaysStoppedAnimation(Colors.orange), - strokeWidth: 5, - ), - )).toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_de_DE.json deleted file mode 100644 index 6830a1709..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "iOS-Indikator", - "info": "iOS-stilisiertes Ladeanzeige-Widget, kann Radius und Drehung angeben.", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoActivityIndicator", - "desc": [ - "【animating】 : Ob Ladeanimation aktiviert ist 【bool】", - "【radius】 : Radius 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_en_US.json deleted file mode 100644 index f126511f7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "iOS Indicator", - "info": "iOS style loading display component, can specify radius and whether to rotate.", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoActivityIndicator", - "desc": [ - "【animating】 : Whether the loading animation is active 【bool】", - "【radius】 : Radius 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_es_ES.json deleted file mode 100644 index 4ddefe723..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "Indicador de iOS", - "info": "Componente de visualización de carga con estilo iOS, que permite especificar el radio y si gira.", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoActivityIndicator", - "desc": [ - "【animating】 : Si la animación está cargando 【bool】", - "【radius】 : Radio 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_fr_FR.json deleted file mode 100644 index 4528f85e9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "Indicateur iOS", - "info": "Composant d'affichage de chargement de style iOS, peut spécifier le rayon et s'il tourne.", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoActivityIndicator", - "desc": [ - "【animating】 : Si l'animation de chargement est active 【bool】", - "【radius】 : Rayon 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_it_IT.json deleted file mode 100644 index 510c2e874..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "Indicatore iOS", - "info": "Componente di caricamento in stile iOS, può specificare il raggio e se ruotare.", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoActivityIndicator", - "desc": [ - "【animating】 : Se l'animazione di caricamento è attiva 【bool】", - "【radius】 : Raggio 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ja_JP.json deleted file mode 100644 index 762661b55..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "iOSインジケーター", - "info": "iOSスタイルのローディング表示コンポーネントで、半径と回転の有無を指定できます。", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActivityIndicatorの基本的な使用", - "desc": [ - "【animating】 : ローディングアニメーションの有無 【bool】", - "【radius】 : 半径 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ko_KR.json deleted file mode 100644 index 2dadbffef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "iOS 인디케이터", - "info": "iOS 스타일의 로딩 표시 컴포넌트, 반지름 및 회전 여부를 지정할 수 있습니다.", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActivityIndicator 기본 사용", - "desc": [ - "【animating】 : 로딩 애니메이션 여부 【bool】", - "【radius】 : 반지름 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_pt_PT.json deleted file mode 100644 index 38480d9fa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "Indicador iOS", - "info": "Componente de exibição de carregamento no estilo iOS, pode especificar o raio e se deve girar.", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoActivityIndicator", - "desc": [ - "【animating】 : Se a animação de carregamento está ativa 【bool】", - "【radius】 : Raio 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ru_RU.json deleted file mode 100644 index 5105df86f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "Индикатор iOS", - "info": "Компонент отображения загрузки в стиле iOS, можно указать радиус и вращение.", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoActivityIndicator", - "desc": [ - "【animating】 : Анимация загрузки 【bool】", - "【radius】 : Радиус 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_zh-CN.json deleted file mode 100644 index afbc40be5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "iOS指示器", - "info": "iOS样式的loading显示组件,可指定半径和是否旋转。", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActivityIndicator基本使用", - "desc": [ - "【animating】 : 是否loading动画 【bool】", - "【radius】 : 半径 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/node1_base.dart deleted file mode 100644 index 29ccfb864..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/node1_base.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/cupertino.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoActivityIndicator extends StatelessWidget { - const CustomCupertinoActivityIndicator({Key? key}) : super(key: key); - - - @override - Widget build(BuildContext context) { - - return Wrap( - spacing: 20, - children: const [ - CupertinoActivityIndicator( - animating: true, - radius: 25, - ), - CupertinoActivityIndicator( - animating: false, - radius: 25, - ) - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_de_DE.json deleted file mode 100644 index f342ac7bf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "iOS-App", - "info": "Top-Level-Komponente für iOS-stil-Apps, enthält Eigenschaften wie Routen-Generator, Thema, Sprache, Startseite usw.", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoApp", - "desc": [ - "【theme】 : Thema 【ThemeData】", - "【title】 : Taskleisten-Titel 【String】", - "【onGenerateRoute】 : Routen-Generator 【RouteFactory】", - "【home】 : Startseite 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_en_US.json deleted file mode 100644 index a3a5f4232..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "iOS App", - "info": "Top-level component for iOS-style apps, including route generator, theme, language, home page, and other attributes.", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoApp", - "desc": [ - "【theme】 : Theme 【ThemeData】", - "【title】 : Taskbar Title 【String】", - "【onGenerateRoute】 : Route Generator 【RouteFactory】", - "【home】 : Home Page 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_es_ES.json deleted file mode 100644 index 761bbe64a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "Aplicación iOS", - "info": "Componente de nivel superior para aplicaciones con estilo iOS, que incluye generador de rutas, tema, idioma, página de inicio, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoApp", - "desc": [ - "【theme】 : Tema 【ThemeData】", - "【title】 : Título de la barra de tareas 【String】", - "【onGenerateRoute】 : Generador de rutas 【RouteFactory】", - "【home】 : Página de inicio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_fr_FR.json deleted file mode 100644 index 85ce4672d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "Application iOS", - "info": "Composant de haut niveau pour les applications de style iOS, incluant un générateur de routes, un thème, une langue, une page d'accueil, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoApp", - "desc": [ - "【theme】 : Thème 【ThemeData】", - "【title】 : Titre de la barre des tâches 【String】", - "【onGenerateRoute】 : Générateur de routes 【RouteFactory】", - "【home】 : Page d'accueil 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_it_IT.json deleted file mode 100644 index 76516eeb4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "App iOS", - "info": "Componente di alto livello per applicazioni in stile iOS, include generatore di rotte, tema, lingua, home page e altre proprietà.", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di CupertinoApp", - "desc": [ - "【theme】 : Tema 【ThemeData】", - "【title】 : Titolo della barra delle applicazioni 【String】", - "【onGenerateRoute】 : Generatore di rotte 【RouteFactory】", - "【home】 : Home page 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ja_JP.json deleted file mode 100644 index 38fec145c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "iOSアプリ", - "info": "iOSスタイルのアプリのトップレベルコンポーネントで、ルートジェネレーター、テーマ、言語、ホームなどの属性を含みます。", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoAppの基本使用法", - "desc": [ - "【theme】 : テーマ 【ThemeData】", - "【title】 : タスクバータイトル 【String】", - "【onGenerateRoute】 : ルートジェネレーター 【RouteFactory】", - "【home】 : ホーム 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ko_KR.json deleted file mode 100644 index aaa445e69..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "iOS 앱", - "info": "iOS 스타일 앱의 최상위 컴포넌트로, 라우트 생성기, 테마, 언어, 홈페이지 등의 속성을 포함합니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoApp 기본 사용법", - "desc": [ - "【theme】 : 테마 【ThemeData】", - "【title】 : 작업 표시줄 제목 【String】", - "【onGenerateRoute】 : 라우트 생성기 【RouteFactory】", - "【home】 : 홈페이지 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_pt_PT.json deleted file mode 100644 index 145e285f1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "Aplicação iOS", - "info": "Componente de topo para aplicações de estilo iOS, incluindo gerador de rotas, tema, idioma, página inicial, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoApp", - "desc": [ - "【theme】 : Tema 【ThemeData】", - "【title】 : Título da barra de tarefas 【String】", - "【onGenerateRoute】 : Gerador de rotas 【RouteFactory】", - "【home】 : Página inicial 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ru_RU.json deleted file mode 100644 index 96c62ada9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "iOS приложение", - "info": "Верхнеуровневый компонент для приложений в стиле iOS, включающий генератор маршрутов, темы, язык, домашнюю страницу и другие атрибуты.", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoApp", - "desc": [ - "【theme】 : Тема 【ThemeData】", - "【title】 : Заголовок в панели задач 【String】", - "【onGenerateRoute】 : Генератор маршрутов 【RouteFactory】", - "【home】 : Домашняя страница 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_zh-CN.json deleted file mode 100644 index 7cff756f5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "iOS应用", - "info": "iOS风格应用的顶级组件,包含路由生成器、主题、语言、主页等属性。", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoApp基本用法", - "desc": [ - "【theme】 : 主题 【ThemeData】", - "【title】 : 任务栏标题 【String】", - "【onGenerateRoute】 : 路由生成器 【RouteFactory】", - "【home】 : 主页 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/node1_base.dart deleted file mode 100644 index cf3ffb9c2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/node1_base.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -/// create by 张风捷特烈 on 2020-03-17 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoApp extends StatelessWidget { - const CustomCupertinoApp({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height - 200, - child: const CupertinoApp( - title: 'Flutter Demo', - theme: CupertinoThemeData( - primaryColor: CupertinoColors.white, - ), - home: CupertinoPageScaffold( - navigationBar: CupertinoNavigationBar( - leading: Icon( - CupertinoIcons.reply, - color: CupertinoColors.black, - ), - trailing: Icon( - CupertinoIcons.share, - color: CupertinoColors.black, - ), - middle: Text('Flutter Unit'), - ), - backgroundColor: CupertinoColors.systemBackground, - child: Center( - child: Text('Hello, World!'), - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_de_DE.json deleted file mode 100644 index b5c3e3e72..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "iOS-Schaltfläche", - "info": "iOS-stilige Schaltfläche. Kann Farbe, Transparenz beim Klicken, Innenabstand, abgerundete Ecken usw. festlegen. Kann Klickereignisse empfangen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoButton Klickereignis", - "desc": [ - "【color】: Farbe 【Color】", - "【pressedOpacity】: Transparenz beim Drücken 【double】", - "【child】: Kind-Widget 【Widget】", - "【padding】: Innenabstand 【EdgeInsetsGeometry】", - "【borderRadius】: Radius der abgerundeten Ecken 【BorderRadius】", - "【onPressed】: Klickereignis 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_en_US.json deleted file mode 100644 index 7641c4712..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "iOS Button", - "info": "A button with iOS style. You can specify color, opacity when pressed, padding, border radius, etc. It can receive click events.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoButton Click Event", - "desc": [ - "【color】: Color 【Color】", - "【pressedOpacity】: Opacity when pressed 【double】", - "【child】: Child widget 【Widget】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【borderRadius】: Border radius 【BorderRadius】", - "【onPressed】: Click event 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_es_ES.json deleted file mode 100644 index 1299f825b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "Botón de iOS", - "info": "Botón con estilo iOS. Se puede especificar el color, la opacidad al hacer clic, el relleno interno, el radio de las esquinas, etc. Puede recibir eventos de clic.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clic de CupertinoButton", - "desc": [ - "【color】: Color 【Color】", - "【pressedOpacity】: Opacidad al presionar 【double】", - "【child】: Componente hijo 【Widget】", - "【padding】: Relleno interno 【EdgeInsetsGeometry】", - "【borderRadius】: Radio de las esquinas 【BorderRadius】", - "【onPressed】: Evento de clic 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_fr_FR.json deleted file mode 100644 index 27faffb5e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "Bouton iOS", - "info": "Bouton de style iOS. Peut spécifier la couleur, l'opacité lors du clic, le remplissage interne, les coins arrondis, etc. Peut recevoir des événements de clic.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événement de clic CupertinoButton", - "desc": [ - "【color】: Couleur 【Color】", - "【pressedOpacity】: Opacité lors de la pression 【double】", - "【child】: Composant enfant 【Widget】", - "【padding】: Remplissage interne 【EdgeInsetsGeometry】", - "【borderRadius】: Rayon des coins arrondis 【BorderRadius】", - "【onPressed】: Événement de clic 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_it_IT.json deleted file mode 100644 index dc95032a8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "Pulsante iOS", - "info": "Pulsante in stile iOS. Puoi specificare colore, opacità al click, padding, bordi arrotondati, ecc. Può ricevere eventi di click.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento di click di CupertinoButton", - "desc": [ - "【color】: Colore 【Color】", - "【pressedOpacity】: Opacità quando premuto 【double】", - "【child】: Componente figlio 【Widget】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【borderRadius】: Raggio del bordo arrotondato 【BorderRadius】", - "【onPressed】: Evento di click 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ja_JP.json deleted file mode 100644 index 567eccc1d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "iOSボタン", - "info": "iOSスタイルのボタン。色、クリック時の透明度、パディング、角丸などを指定できます。クリックイベントを受け取ることができます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoButtonクリックイベント", - "desc": [ - "【color】: 色 【Color】", - "【pressedOpacity】: 押下時の透明度 【double】", - "【child】: 子コンポーネント 【Widget】", - "【padding】: パディング 【EdgeInsetsGeometry】", - "【borderRadius】: 角丸半径 【BorderRadius】", - "【onPressed】: クリックイベント 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ko_KR.json deleted file mode 100644 index 7d48b7601..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "iOS 버튼", - "info": "iOS 스타일의 버튼. 색상, 클릭 시 투명도, 내부 여백, 모서리 반경 등을 지정할 수 있습니다. 클릭 이벤트를 수신할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoButton 클릭 이벤트", - "desc": [ - "【color】: 색상 【Color】", - "【pressedOpacity】: 눌렀을 때 투명도 【double】", - "【child】: 자식 위젯 【Widget】", - "【padding】: 내부 여백 【EdgeInsetsGeometry】", - "【borderRadius】: 모서리 반경 【BorderRadius】", - "【onPressed】: 클릭 이벤트 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_pt_PT.json deleted file mode 100644 index 636a87011..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "Botão iOS", - "info": "Botão de estilo iOS. Pode especificar cor, opacidade ao clicar, preenchimento interno, bordas arredondadas, etc. Pode receber eventos de clique.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clique do CupertinoButton", - "desc": [ - "【color】: Cor 【Color】", - "【pressedOpacity】: Opacidade ao pressionar 【double】", - "【child】: Componente filho 【Widget】", - "【padding】: Preenchimento interno 【EdgeInsetsGeometry】", - "【borderRadius】: Raio da borda arredondada 【BorderRadius】", - "【onPressed】: Evento de clique 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ru_RU.json deleted file mode 100644 index 80bdb35f5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "Кнопка iOS", - "info": "Кнопка в стиле iOS. Можно указать цвет, прозрачность при нажатии, внутренние отступы, радиус скругления и т.д. Может принимать события нажатия.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Событие нажатия CupertinoButton", - "desc": [ - "【color】: Цвет 【Color】", - "【pressedOpacity】: Прозрачность при нажатии 【double】", - "【child】: Дочерний виджет 【Widget】", - "【padding】: Внутренние отступы 【EdgeInsetsGeometry】", - "【borderRadius】: Радиус скругления 【BorderRadius】", - "【onPressed】: Событие нажатия 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_zh-CN.json deleted file mode 100644 index 97b0cf664..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "iOS按钮", - "info": "iOS风格的按钮。可指定颜色、点击时透明度、内边距、圆角等。可接收点击事件。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoButton点击事件", - "desc": [ - "【color】: 颜色 【Color】", - "【pressedOpacity】: 按下时透明度 【double】", - "【child】: 子组件 【Widget】", - "【padding】: 内边距 【EdgeInsetsGeometry】", - "【borderRadius】: 圆角半径 【BorderRadius】", - "【onPressed】: 点击事件 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/node1_base.dart deleted file mode 100644 index 7ddf6689f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/node1_base.dart +++ /dev/null @@ -1,32 +0,0 @@ -/// create by 张风捷特烈 on 2020-03-24 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class CustomCupertinoButton extends StatelessWidget { - const CustomCupertinoButton({super.key}); - - Map get data => { - CupertinoColors.activeBlue:4.0, - Colors.blue:6.0, - CupertinoColors.activeOrange:8.0, - }; - - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children:data.keys.map((e)=> CupertinoButton( - padding: EdgeInsets.zero, - onPressed: () => Navigator.of(context).pushNamed('AboutMePage'), - color: e, - pressedOpacity: 0.4, - borderRadius: BorderRadius.all(Radius.circular(data[e]!)), - child: const Text("iOS"), - )).toList() - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_de_DE.json deleted file mode 100644 index f9da14bea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_de_DE.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "Checkbox·macOS-Stil", - "info": "Ein macOS-stilisiertes Checkbox, das drei Zustände unterstützt; bei der Verwendung müssen der Wert und die onChanged-Rückruffunktion bereitgestellt werden.", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoCheckbox Verwendung", - "desc": [ - "【value】 : Ob ausgewählt 【bool?】", - "【onChanged】 : Änderungsrückruf 【ValueChanged?】", - "【checkColor】 : Farbe des Häkchens bei Auswahl 【Color?】", - "【activeColor】 : Hintergrundfarbe bei Auswahl 【Color?】", - "【activeColor】 : Hintergrundfarbe bei Auswahl 【Color?】", - "【inactiveColor】 : Randfarbe/Hintergrundfarbe bei Inaktivität 【Color?】", - "Wenn onChanged null ist, bedeutet dies, dass es nicht verfügbar ist." - ] - }, - { - "file": "node2.dart", - "name": "CupertinoCheckbox Drei Zustände", - "desc": [ - "【tristate】 : Ob der Dreizustand aktiviert ist 【bool】", - "Im Dreizustand ist der Wert null als -" - ] - }, - { - "file": "node3.dart", - "name": "CupertinoCheckbox Randlinie und Form", - "desc": [ - "【shape】 : Form 【OutlinedBorder?】", - "【side】 : Randlinie 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_en_US.json deleted file mode 100644 index 945515951..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_en_US.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "Checkbox·macOS Style", - "info": "A macOS-style checkbox that supports three states; requires providing a value and an onChanged callback function when used.", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoCheckbox Usage", - "desc": [ - "【value】: Whether it is selected 【bool?】", - "【onChanged】: Change callback 【ValueChanged?】", - "【checkColor】: Checkmark color when selected 【Color?】", - "【activeColor】: Background color when selected 【Color?】", - "【activeColor】: Background color when selected 【Color?】", - "【inactiveColor】: Border color when inactive/background color when disabled 【Color?】", - "When onChanged is null, it means it is disabled." - ] - }, - { - "file": "node2.dart", - "name": "CupertinoCheckbox Three States", - "desc": [ - "【tristate】: Whether to enable three states 【bool】", - "In three states, the value is null for -" - ] - }, - { - "file": "node3.dart", - "name": "CupertinoCheckbox Border and Shape", - "desc": [ - "【shape】: Shape 【OutlinedBorder?】", - "【side】: Border 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_es_ES.json deleted file mode 100644 index 453a09955..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_es_ES.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "Casilla de verificación·Estilo macOS", - "info": "Una casilla de verificación con estilo macOS, compatible con tres estados; se debe proporcionar un valor value y una función de devolución de llamada onChanged al usarla.", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso de CupertinoCheckbox", - "desc": [ - "【value】 : Si está seleccionado 【bool?】", - "【onChanged】 : Función de devolución de llamada para cambios 【ValueChanged?】", - "【checkColor】 : Color de la marca de verificación cuando está seleccionado 【Color?】", - "【activeColor】 : Color de fondo cuando está seleccionado 【Color?】", - "【activeColor】 : Color de fondo cuando está seleccionado 【Color?】", - "【inactiveColor】 : Color de borde cuando no está activo/Color de fondo cuando no está disponible 【Color?】", - "Cuando onChanged es null, significa que no está disponible." - ] - }, - { - "file": "node2.dart", - "name": "Tres estados de CupertinoCheckbox", - "desc": [ - "【tristate】 : Si está habilitado el estado tristate 【bool】", - "En el estado tristate, el valor null representa -" - ] - }, - { - "file": "node3.dart", - "name": "Borde y forma de CupertinoCheckbox", - "desc": [ - "【shape】 : Forma 【OutlinedBorder?】", - "【side】 : Borde 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_fr_FR.json deleted file mode 100644 index a94227ac8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_fr_FR.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "Case à cocher·Style macOS", - "info": "Une case à cocher de style macOS, prenant en charge trois états ; nécessite de fournir une valeur value et une fonction de rappel onChanged lors de l'utilisation.", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de CupertinoCheckbox", - "desc": [ - "【value】 : Est-ce sélectionné 【bool?】", - "【onChanged】 : Rappel de changement 【ValueChanged?】", - "【checkColor】 : Couleur de la coche √ lorsqu'elle est sélectionnée 【Color?】", - "【activeColor】 : Couleur de fond lorsqu'elle est sélectionnée 【Color?】", - "【activeColor】 : Couleur de fond lorsqu'elle est sélectionnée 【Color?】", - "【inactiveColor】 : Couleur de bordure/arrière-plan non activé 【Color?】", - "Lorsque onChanged est null, cela signifie qu'il est désactivé." - ] - }, - { - "file": "node2.dart", - "name": "Trois états de CupertinoCheckbox", - "desc": [ - "【tristate】 : Activer trois états 【bool】", - "En mode tristate, la valeur null représente -" - ] - }, - { - "file": "node3.dart", - "name": "Bordure et forme de CupertinoCheckbox", - "desc": [ - "【shape】 : Forme 【OutlinedBorder?】", - "【side】 : Bordure 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_it_IT.json deleted file mode 100644 index 9999264ec..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_it_IT.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "Casella di controllo·Stile macOS", - "info": "Una casella di controllo in stile macOS, supporta tre stati; richiede un valore value e una funzione di callback onChanged.", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso di CupertinoCheckbox", - "desc": [ - "【value】 : Se selezionato 【bool?】", - "【onChanged】 : Callback di modifica 【ValueChanged?】", - "【checkColor】 : Colore del segno di spunta quando selezionato 【Color?】", - "【activeColor】 : Colore di sfondo quando selezionato 【Color?】", - "【activeColor】 : Colore di sfondo quando selezionato 【Color?】", - "【inactiveColor】 : Colore del bordo/colore di sfondo non attivo 【Color?】", - "Quando onChanged è null, indica che non è utilizzabile." - ] - }, - { - "file": "node2.dart", - "name": "CupertinoCheckbox a tre stati", - "desc": [ - "【tristate】 : Se abilitare i tre stati 【bool】", - "In modalità tristate, il valore null rappresenta -" - ] - }, - { - "file": "node3.dart", - "name": "Bordo e forma di CupertinoCheckbox", - "desc": [ - "【shape】 : Forma 【OutlinedBorder?】", - "【side】 : Bordo 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ja_JP.json deleted file mode 100644 index 3f66dfdfa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ja_JP.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "チェックボックス・macOSスタイル", - "info": "macOSスタイルのチェックボックスで、三態をサポートしています。使用時にはvalue値とonChangedコールバック関数を提供する必要があります。", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoCheckbox 使用", - "desc": [ - "【value】 : 選択されているかどうか 【bool?】", - "【onChanged】 : 変更コールバック 【ValueChanged?】", - "【checkColor】 : 選択時の√色 【Color?】", - "【activeColor】 : 選択時の背景色 【Color?】", - "【activeColor】 : 選択時の背景色 【Color?】", - "【inactiveColor】 : 非アクティブ時の枠線色/無効な背景色 【Color?】", - "onChangedがnullの場合、無効であることを示します。" - ] - }, - { - "file": "node2.dart", - "name": "CupertinoCheckbox 三態", - "desc": [ - "【tristate】 : 三態を有効にするかどうか 【bool】", - "三態の場合、値がnullの場合は - です" - ] - }, - { - "file": "node3.dart", - "name": "CupertinoCheckbox 枠線と形状", - "desc": [ - "【shape】 : 形状 【OutlinedBorder?】", - "【side】 : 枠線 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ko_KR.json deleted file mode 100644 index 8d70a6a70..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ko_KR.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "체크박스·macOS 스타일", - "info": "macOS 스타일의 체크박스로, 3가지 상태를 지원합니다. 사용 시 value 값과 onChanged 콜백 함수를 제공해야 합니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoCheckbox 사용", - "desc": [ - "【value】 : 선택 여부 【bool?】", - "【onChanged】 : 변경 콜백 【ValueChanged?】", - "【checkColor】 : 선택 시 √ 색상 【Color?】", - "【activeColor】 : 선택 배경 색상 【Color?】", - "【activeColor】 : 선택 배경 색상 【Color?】", - "【inactiveColor】 : 비활성 시 테두리 색상/사용 불가 배경 색상 【Color?】", - "onChanged이 null일 경우, 사용 불가를 나타냅니다." - ] - }, - { - "file": "node2.dart", - "name": "CupertinoCheckbox 3가지 상태", - "desc": [ - "【tristate】 : 3가지 상태 활성화 여부 【bool】", - "3가지 상태일 때, 값이 null이면 -로 표시됩니다." - ] - }, - { - "file": "node3.dart", - "name": "CupertinoCheckbox 테두리와 모양", - "desc": [ - "【shape】 : 모양 【OutlinedBorder?】", - "【side】 : 테두리 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_pt_PT.json deleted file mode 100644 index 28c444674..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_pt_PT.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "Caixa de verificação - Estilo macOS", - "info": "Uma caixa de verificação no estilo macOS, suporta três estados; ao usar, é necessário fornecer o valor 'value' e a função de retorno 'onChanged'.", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso do CupertinoCheckbox", - "desc": [ - "【value】 : Se está selecionado 【bool?】", - "【onChanged】 : Retorno de chamada de mudança 【ValueChanged?】", - "【checkColor】 : Cor do √ quando selecionado 【Color?】", - "【activeColor】 : Cor de fundo quando selecionado 【Color?】", - "【activeColor】 : Cor de fundo quando selecionado 【Color?】", - "【inactiveColor】 : Cor da borda/Cor de fundo inativa 【Color?】", - "Quando onChanged é null, indica que está inativo." - ] - }, - { - "file": "node2.dart", - "name": "CupertinoCheckbox Três Estados", - "desc": [ - "【tristate】 : Se ativa três estados 【bool】", - "Em três estados, o valor null representa -" - ] - }, - { - "file": "node3.dart", - "name": "Borda e Forma do CupertinoCheckbox", - "desc": [ - "【shape】 : Forma 【OutlinedBorder?】", - "【side】 : Borda 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ru_RU.json deleted file mode 100644 index f8374ba4a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ru_RU.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "Флажок·стиль macOS", - "info": "Флажок в стиле macOS, поддерживающий три состояния; при использовании необходимо предоставить значение value и функцию обратного вызова onChanged.", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Использование CupertinoCheckbox", - "desc": [ - "【value】 : Выбрано ли 【bool?】", - "【onChanged】 : Обратный вызов при изменении 【ValueChanged?】", - "【checkColor】 : Цвет галочки при выборе 【Color?】", - "【activeColor】 : Цвет фона при выборе 【Color?】", - "【activeColor】 : Цвет фона при выборе 【Color?】", - "【inactiveColor】 : Цвет границы/фона при неактивности 【Color?】", - "Когда onChanged равен null, это означает, что элемент недоступен." - ] - }, - { - "file": "node2.dart", - "name": "Три состояния CupertinoCheckbox", - "desc": [ - "【tristate】 : Включены ли три состояния 【bool】", - "В режиме три состояния значение null означает -" - ] - }, - { - "file": "node3.dart", - "name": "Границы и форма CupertinoCheckbox", - "desc": [ - "【shape】 : Форма 【OutlinedBorder?】", - "【side】 : Граница 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_zh-CN.json deleted file mode 100644 index 205ecbe6c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_zh-CN.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "复选框·macOS风格", - "info": "一个 macOS 风格的复选框,支持三态;使用时需要提供 value 值和 onChanged 回调函数。", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoCheckbox 使用", - "desc": [ - "【value】 : 是否选中 【bool?】", - "【onChanged】 : 变化回调 【ValueChanged?】", - "【checkColor】 : 选中时√颜色 【Color?】", - "【activeColor】 : 选中背景颜色 【Color?】", - "【activeColor】 : 选中背景颜色 【Color?】", - "【inactiveColor】 : 非激活是边线色/不可用背景色 【Color?】", - "onChanged 为 null 时,表示不可用。" - ] - }, - { - "file": "node2.dart", - "name": "CupertinoCheckbox 三态", - "desc": [ - "【tristate】 : 是否启用三态 【bool】", - "三态时,值为 null 为 - " - ] - }, - { - "file": "node3.dart", - "name": "CupertinoCheckbox 边线与形状", - "desc": [ - "【shape】 : 形状 【OutlinedBorder?】", - "【side】 : 边线 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node1.dart deleted file mode 100644 index fedab6fd7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node1.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class CupertinoCheckboxDemo1 extends StatefulWidget { - const CupertinoCheckboxDemo1({super.key}); - - @override - State createState() => _CupertinoCheckboxDemo1State(); -} - -class _CupertinoCheckboxDemo1State extends State { - bool? _active = false; - - @override - Widget build(BuildContext context) { - return Wrap( - children: [ - CupertinoCheckbox( - value: _active, - onChanged: (bool? value) { - setState(() { - _active = value; - }); - }, - ), - - CupertinoCheckbox( - value: _active, - checkColor: Colors.yellow, - activeColor: Colors.purple, - onChanged: (bool? value) { - setState(() { - _active = value; - }); - }, - ), - CupertinoCheckbox( - value: true, - inactiveColor: Colors.black.withOpacity(0.2), - onChanged: null, - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node2.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node2.dart deleted file mode 100644 index 1f1167a7c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node2.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class CupertinoCheckboxDemo2 extends StatefulWidget { - const CupertinoCheckboxDemo2({super.key}); - - @override - State createState() => _CupertinoCheckboxDemo2State(); -} - -class _CupertinoCheckboxDemo2State extends State { - bool? _active = false; - - @override - Widget build(BuildContext context) { - return - CupertinoCheckbox( - value: _active, - tristate: true, - onChanged: (bool? value) { - setState(() { - _active = value; - }); - }, - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node3.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node3.dart deleted file mode 100644 index 7253583f7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node3.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class CupertinoCheckboxDemo3 extends StatefulWidget { - const CupertinoCheckboxDemo3({super.key}); - - @override - State createState() => _CupertinoCheckboxDemo3State(); -} - -class _CupertinoCheckboxDemo3State extends State { - bool? _active = false; - @override - Widget build(BuildContext context) { - return Wrap( - children: [ - CupertinoCheckbox( - value: _active, - onChanged: (bool? value) { - setState(() { - _active = value; - }); - }, - ), - CupertinoCheckbox( - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(6)), - side: const BorderSide(color: Colors.black12), - value: _active, - onChanged: (bool? value) { - setState(() { - _active = value; - }); - }, - ), - CupertinoCheckbox( - shape: const StadiumBorder(), - side: const BorderSide(color: Colors.black12), - value: _active, - onChanged: (bool? value) { - setState(() { - _active = value; - }); - }, - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_de_DE.json deleted file mode 100644 index 8f7ce5486..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "iOS-Popup-Menü", - "info": "Ein beeindruckendes iOS-stilisiertes Popup-Menü, das bei langem Drücken animiert erscheint. Wird oft in Verbindung mit CupertinoContextMenuAction verwendet.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoContextMenu", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【actions】 : Aktionen-Komponentensammlung 【List】", - "【previewBuilder】 : Animationskonstruktor 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_en_US.json deleted file mode 100644 index cd760b19a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "iOS Pop-up Menu", - "info": "A gorgeous iOS-style button pop-up box. When long-pressed, a menu panel will pop up in an animated form. It is usually used in conjunction with CupertinoContextMenuAction.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoContextMenu", - "desc": [ - "【child】 : Child Component 【Widget】", - "【actions】 : Action Components Set 【List】", - "【previewBuilder】 : Animation Builder 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_es_ES.json deleted file mode 100644 index 714108532..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "Menú emergente de iOS", - "info": "Un impresionante botón de estilo iOS que muestra un panel de menú emergente con animación cuando se mantiene presionado, generalmente se usa junto con CupertinoContextMenuAction.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoContextMenu", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【actions】 : Conjunto de componentes de acción 【List】", - "【previewBuilder】 : Constructor de animación 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_fr_FR.json deleted file mode 100644 index 5a4a4e820..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "Menu contextuel iOS", - "info": "Un magnifique bouton contextuel de style iOS, qui affiche un panneau de menu animé lors d'un appui long, généralement utilisé avec CupertinoContextMenuAction.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoContextMenu", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【actions】 : Ensemble de composants d'action 【List】", - "【previewBuilder】 : Constructeur d'animation 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_it_IT.json deleted file mode 100644 index e89db3c3a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "Menu a comparsa iOS", - "info": "Un elegante menu a comparsa in stile iOS che appare con un'animazione quando viene premuto a lungo, solitamente utilizzato insieme a CupertinoContextMenuAction.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di CupertinoContextMenu", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【actions】 : Insieme di componenti di azione 【List】", - "【previewBuilder】 : Costruttore di animazione 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ja_JP.json deleted file mode 100644 index ea29dae50..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "iosポップアップメニュー", - "info": "華やかなiOSスタイルのボタンポップアップです。長押しするとアニメーションでメニューパネルが表示され、通常はCupertinoContextMenuActionと一緒に使用されます。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoContextMenuの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【actions】 : アクションコンポーネント集 【List】", - "【previewBuilder】 : アニメーションビルダー 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ko_KR.json deleted file mode 100644 index 34c13947c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "ios 팝업 메뉴", - "info": "화려한 iOS 스타일 버튼 팝업 상자로, 길게 누르면 애니메이션 형태로 메뉴 패널이 팝업됩니다. 일반적으로 CupertinoContextMenuAction와 함께 사용됩니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoContextMenu 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【actions】 : 액션 위젯 집합 【List】", - "【previewBuilder】 : 애니메이션 빌더 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_pt_PT.json deleted file mode 100644 index f69a99785..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "Menu pop-up iOS", - "info": "Um botão de estilo iOS elegante que exibe um painel de menu com animação ao ser pressionado por um longo tempo, geralmente usado em conjunto com CupertinoContextMenuAction.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoContextMenu", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【actions】 : Conjunto de componentes de ação 【List】", - "【previewBuilder】 : Construtor de animação 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ru_RU.json deleted file mode 100644 index e12d61c62..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "ios всплывающее меню", - "info": "Эффективное всплывающее меню в стиле iOS, которое появляется с анимацией при длительном нажатии, обычно используется вместе с CupertinoContextMenuAction.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoContextMenu", - "desc": [ - "【child】 : дочерний компонент 【Widget】", - "【actions】 : набор компонентов действий 【List】", - "【previewBuilder】 : конструктор анимации 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_zh-CN.json deleted file mode 100644 index ead54490c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "ios弹出菜单", - "info": "一个华丽的iOS风格按钮弹出框,长按时会以动画的形式弹出菜单面板,通常和CupertinoContextMenuAction联用。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoContextMenu基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【actions】 : 行为组件集 【List】", - "【previewBuilder】 : 动画构造器 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/node1_base.dart deleted file mode 100644 index 2c1325b27..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/node1_base.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoContextMenu extends StatelessWidget { - const CustomCupertinoContextMenu({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 100, - height: 100, - child: DecoratedBox( - decoration: const BoxDecoration( - image: DecorationImage( - image: AssetImage('assets/images/sabar_bar.webp'), - fit: BoxFit.cover), - borderRadius: BorderRadius.all(Radius.circular(50))), - child: _buildCupertinoContextMenu(context)), - ); - } - - final List info = const ['保存图片', '立刻呼叫', '添加到收藏夹']; - - Widget _buildCupertinoContextMenu(context) => CupertinoContextMenu( - child: Container( - decoration: const BoxDecoration( - image: DecorationImage( - image: AssetImage('assets/images/sabar_bar.webp'), - fit: BoxFit.cover), - borderRadius: BorderRadius.all(Radius.circular(50))), - ), - actions: info - .map((e) => CupertinoContextMenuAction( - child: Center(child: Text(e)), - onPressed: () => Navigator.pop(context), - )) - .toList()); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_de_DE.json deleted file mode 100644 index 5de2763d4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "iOS-Popup-Menü-Schaltfläche", - "info": "Wird im Allgemeinen nur für die Klick-Schaltfläche in CupertinoContextMenu verwendet. Kann Kind- und Endsymbole angeben und empfängt Klick-Ereignisse.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoContextMenuAction", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【isDefaultAction】 : Standardmäßig ausgewählt 【bool】", - "【trailingIcon】 : Ende 【bool】", - "【onPressed】 : Klick-Ereignis 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_en_US.json deleted file mode 100644 index 4f631c365..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "iOS Popup Menu Button", - "info": "Generally used only for click buttons in CupertinoContextMenu. Can specify child and trailing icons, and receives click events.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoContextMenuAction", - "desc": [ - "【child】 : Child Component 【Widget】", - "【isDefaultAction】 : Whether it is the default action 【bool】", - "【trailingIcon】 : Trailing Icon 【bool】", - "【onPressed】 : Click Event 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_es_ES.json deleted file mode 100644 index f2d62182c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "Botón de menú emergente de iOS", - "info": "Generalmente se usa solo para el botón de clic en CupertinoContextMenu. Se puede especificar el icono del hijo y el icono de la cola, y recibe el evento de clic.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoContextMenuAction", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【isDefaultAction】 : Si está seleccionado por defecto 【bool】", - "【trailingIcon】 : Icono de cola 【bool】", - "【onPressed】 : Evento de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_fr_FR.json deleted file mode 100644 index 61ca09a93..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "Bouton de menu contextuel iOS", - "info": "Généralement utilisé uniquement pour les boutons cliquables dans CupertinoContextMenu. Peut spécifier un enfant et une icône de fin, et reçoit les événements de clic.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoContextMenuAction", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【isDefaultAction】 : Est-ce sélectionné par défaut 【bool】", - "【trailingIcon】 : Icône de fin 【bool】", - "【onPressed】 : Événement de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_it_IT.json deleted file mode 100644 index e08ede5fb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "Pulsante del menu a comparsa iOS", - "info": "Generalmente utilizzato solo per i pulsanti di clic in CupertinoContextMenu. È possibile specificare l'icona del figlio e della coda, ricevere eventi di clic.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di CupertinoContextMenuAction", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【isDefaultAction】 : Se selezionato per default 【bool】", - "【trailingIcon】 : Coda 【bool】", - "【onPressed】 : Evento di clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ja_JP.json deleted file mode 100644 index 5a6c599a8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "iosポップアップメニューボタン", - "info": "通常、CupertinoContextMenu内のクリックボタンにのみ使用されます。子要素と末尾アイコンを指定でき、クリックイベントを受け取ります。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoContextMenuActionの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【isDefaultAction】 : デフォルトで選択されているかどうか 【bool】", - "【trailingIcon】 : 末尾アイコン 【bool】", - "【onPressed】 : クリックイベント 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ko_KR.json deleted file mode 100644 index 9999b5231..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "ios 팝업 메뉴 버튼", - "info": "일반적으로 CupertinoContextMenu 내의 클릭 버튼에만 사용됩니다. 자식 및 꼬리 아이콘을 지정하고 클릭 이벤트를 수신할 수 있습니다.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoContextMenuAction 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【isDefaultAction】 : 기본 선택 여부 【bool】", - "【trailingIcon】 : 꼬리 아이콘 【bool】", - "【onPressed】 : 클릭 이벤트 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_pt_PT.json deleted file mode 100644 index 89f34b48f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "Botão de menu pop-up iOS", - "info": "Geralmente usado apenas para botões de clique em CupertinoContextMenu. Pode especificar ícones de criança e cauda, e receber eventos de clique.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoContextMenuAction", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【isDefaultAction】 : Selecionado por padrão 【bool】", - "【trailingIcon】 : Ícone de cauda 【bool】", - "【onPressed】 : Evento de clique 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ru_RU.json deleted file mode 100644 index 6fc6d61ee..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "ios всплывающее меню кнопка", - "info": "Обычно используется только для кнопки нажатия в CupertinoContextMenu. Можно указать дочерний элемент и значок в конце, принимает событие нажатия.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoContextMenuAction", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【isDefaultAction】 : Выбрано ли по умолчанию 【bool】", - "【trailingIcon】 : Конечный значок 【bool】", - "【onPressed】 : Событие нажатия 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_zh-CN.json deleted file mode 100644 index a510198ed..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "ios弹出菜单按钮", - "info": "一般只用于CupertinoContextMenu中的点击按钮。可指定孩子和尾部图标,接收点击事件。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoContextMenuAction基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【isDefaultAction】 : 是否默认选中 【bool】", - "【trailingIcon】 : 尾部 【bool】", - "【onPressed】 : 点击事件 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/node1_base.dart deleted file mode 100644 index b20882734..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/node1_base.dart +++ /dev/null @@ -1,34 +0,0 @@ -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/cupertino.dart'; - -class CustomCupertinoContextMenuAction extends StatelessWidget { - const CustomCupertinoContextMenuAction({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Container( - width: 200, - margin: const EdgeInsets.all(5), - child: CupertinoContextMenuAction( - trailingIcon: CupertinoIcons.settings, - isDefaultAction: true, - onPressed: () => Navigator.of(context).pushNamed('AboutMePage'), - child: const Text('张风捷特烈')), - ), - Container( - width: 200, - margin: const EdgeInsets.all(5), - child: CupertinoContextMenuAction( - trailingIcon: CupertinoIcons.home, - isDefaultAction: false, - onPressed: () => Navigator.of(context).pushNamed('AboutMePage'), - child: const Text('百里·巫缨')), - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_de_DE.json deleted file mode 100644 index 89d30b76a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "iOS-Datumsauswahl", - "info": "Hochwertige Roll-Datumsauswahl, die den Auswahltyp, Datumsbereich usw. angeben kann und Datumsauswahlereignisse empfängt.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoDatePicker", - "desc": [ - "【initialDateTime】 : Anfangsdatum 【DateTime】", - "【minimumYear】 : Mindestjahr 【int】", - "【maximumYear】 : Höchstjahr 【int】", - "【onDateTimeChanged】 : Klick-Rückruf 【Function(DateTime)】", - "【minuteInterval】 : Minutenintervall 【int】", - "【use24hFormat】 : Ist 24-Stunden-Format 【bool】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【mode】 : Modus*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_en_US.json deleted file mode 100644 index eea93649c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "iOS Date Picker", - "info": "A high-end rolling date picker that allows you to specify the type of selection, date range, etc., and receive date selection events.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoDatePicker", - "desc": [ - "【initialDateTime】 : Initial date 【DateTime】", - "【minimumYear】 : Minimum year 【int】", - "【maximumYear】 : Maximum year 【int】", - "【onDateTimeChanged】 : Click callback 【Function(DateTime)】", - "【minuteInterval】 : Minute interval 【int】", - "【use24hFormat】 : Whether it is 24-hour format 【bool】", - "【backgroundColor】 : Background color 【Color】", - "【mode】 : Mode*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_es_ES.json deleted file mode 100644 index b6cb9f307..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "Selector de fecha de iOS", - "info": "Selector de fecha de desplazamiento de alta gama, que puede especificar el tipo de selección, el rango de fechas, etc., y recibir eventos de selección de fecha.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoDatePicker", - "desc": [ - "【initialDateTime】 : Fecha inicial 【DateTime】", - "【minimumYear】 : Año mínimo 【int】", - "【maximumYear】 : Año máximo 【int】", - "【onDateTimeChanged】 : Devolución de llamada al hacer clic 【Function(DateTime)】", - "【minuteInterval】 : Intervalo de minutos 【int】", - "【use24hFormat】 : Si es formato de 24 horas 【bool】", - "【backgroundColor】 : Color de fondo 【Color】", - "【mode】 : Modo*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_fr_FR.json deleted file mode 100644 index cfca4dd1d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "Sélecteur de date iOS", - "info": "Sélecteur de date élégant à défilement, permettant de spécifier le type de sélection, la plage de dates, etc., et de recevoir des événements de sélection de date.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoDatePicker", - "desc": [ - "【initialDateTime】 : Date initiale 【DateTime】", - "【minimumYear】 : Année minimale 【int】", - "【maximumYear】 : Année maximale 【int】", - "【onDateTimeChanged】 : Rappel au clic 【Function(DateTime)】", - "【minuteInterval】 : Intervalle des minutes 【int】", - "【use24hFormat】 : Format 24 heures 【bool】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【mode】 : Mode*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_it_IT.json deleted file mode 100644 index 02fdf7302..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "Selettore di data iOS", - "info": "Un selettore di data di alta qualità con scorrimento, che consente di specificare il tipo di selezione, l'intervallo di date, ecc., e riceve eventi di selezione della data.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoDatePicker", - "desc": [ - "【initialDateTime】 : Data iniziale 【DateTime】", - "【minimumYear】 : Anno minimo 【int】", - "【maximumYear】 : Anno massimo 【int】", - "【onDateTimeChanged】 : Callback al click 【Function(DateTime)】", - "【minuteInterval】 : Intervallo di minuti 【int】", - "【use24hFormat】 : Se è in formato 24 ore 【bool】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【mode】 : Modalità*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ja_JP.json deleted file mode 100644 index 6e5aedcf0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "iOS日付ピッカー", - "info": "高級感のあるスクロール日付ピッカーで、選択するタイプや日付範囲などを指定でき、日付選択イベントを受け取ります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoDatePickerの基本使用", - "desc": [ - "【initialDateTime】 : 初期日付 【DateTime】", - "【minimumYear】 : 最小年 【int】", - "【maximumYear】 : 最大年 【int】", - "【onDateTimeChanged】 : クリックコールバック 【Function(DateTime)】", - "【minuteInterval】 : 分間隔 【int】", - "【use24hFormat】 : 24時間制かどうか 【bool】", - "【backgroundColor】 : 背景色 【Color】", - "【mode】 : モード*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ko_KR.json deleted file mode 100644 index a0b820e88..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "iOS 날짜 선택기", - "info": "고급스러운 스크롤 날짜 선택기로, 선택 유형, 날짜 범위 등을 지정할 수 있으며, 날짜 선택 이벤트를 수신합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoDatePicker 기본 사용", - "desc": [ - "【initialDateTime】 : 초기 날짜 【DateTime】", - "【minimumYear】 : 최소 연도 【int】", - "【maximumYear】 : 최대 연도 【int】", - "【onDateTimeChanged】 : 클릭 콜백 【Function(DateTime)】", - "【minuteInterval】 : 분 간격 【int】", - "【use24hFormat】 : 24시간 형식 여부 【bool】", - "【backgroundColor】 : 배경색 【Color】", - "【mode】 : 모드*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_pt_PT.json deleted file mode 100644 index 761e0003f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "Seletor de Data iOS", - "info": "Um seletor de data sofisticado com rolagem, que permite especificar o tipo de seleção, intervalo de datas, etc., e recebe eventos de seleção de data.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CupertinoDatePicker", - "desc": [ - "【initialDateTime】 : Data inicial 【DateTime】", - "【minimumYear】 : Ano mínimo 【int】", - "【maximumYear】 : Ano máximo 【int】", - "【onDateTimeChanged】 : Callback de clique 【Function(DateTime)】", - "【minuteInterval】 : Intervalo de minutos 【int】", - "【use24hFormat】 : Se é formato de 24 horas 【bool】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【mode】 : Modo*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ru_RU.json deleted file mode 100644 index 8dea1b310..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "iOS-выбор даты", - "info": "Стильный колесный выбор даты, который позволяет указать тип выбора, диапазон дат и т.д., получает событие выбора даты.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoDatePicker", - "desc": [ - "【initialDateTime】 : Начальная дата 【DateTime】", - "【minimumYear】 : Минимальный год 【int】", - "【maximumYear】 : Максимальный год 【int】", - "【onDateTimeChanged】 : Обратный вызов при нажатии 【Function(DateTime)】", - "【minuteInterval】 : Интервал минут 【int】", - "【use24hFormat】 : Используется ли 24-часовой формат 【bool】", - "【backgroundColor】 : Цвет фона 【Color】", - "【mode】 : Режим*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_zh-CN.json deleted file mode 100644 index fee41db04..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "iOS日期选择器", - "info": "高大上的滑滚日期选择器,可指定选择的类型、日期范围等,接收日期选中事件。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoDatePicker基本使用", - "desc": [ - "【initialDateTime】 : 初始日期 【DateTime】", - "【minimumYear】 : 最小年份 【int】", - "【maximumYear】 : 最大年份 【int】", - "【onDateTimeChanged】 : 点击回调 【Function(DateTime)】", - "【minuteInterval】 : 分钟间隔 【int】", - "【use24hFormat】 : 是否是24小时制 【bool】", - "【backgroundColor】 : 背景色 【Color】", - "【mode】 : 模式*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/node1_base.dart deleted file mode 100644 index 60cbd0cda..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/node1_base.dart +++ /dev/null @@ -1,67 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoDatePicker extends StatefulWidget { - const CustomCupertinoDatePicker({Key? key}) : super(key: key); - - @override - _CustomCupertinoDatePickerState createState() => - _CustomCupertinoDatePickerState(); -} - -class _CustomCupertinoDatePickerState extends State { - DateTime _date = DateTime.now(); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Text( - '当前日期:${_date.toIso8601String()}', - style: const TextStyle(color: Colors.grey, fontSize: 16), - ), - _buildInfoTitle('CupertinoDatePickerMode.dateAndTime'), - buildPicker(CupertinoDatePickerMode.dateAndTime), - _buildInfoTitle('CupertinoDatePickerMode.date'), - buildPicker(CupertinoDatePickerMode.date), - _buildInfoTitle('CupertinoDatePickerMode.time'), - buildPicker(CupertinoDatePickerMode.time), - ], - ); - } - - Container buildPicker(CupertinoDatePickerMode mode) { - return Container( - margin: const EdgeInsets.all(10), - height: 150, - child: CupertinoDatePicker( - mode: mode, - initialDateTime: DateTime.now(), -// maximumDate: DateTime(2018,8,8), -// minimumDate: DateTime(2030,8,8), - minimumYear: 2018, - maximumYear: 2030, - use24hFormat: false, - minuteInterval: 1, - backgroundColor: CupertinoColors.white, - onDateTimeChanged: (date) { - print(date); - setState(() => _date = date); - }, - ), - ); - } - - Widget _buildInfoTitle(info){ - return Padding( - padding: const EdgeInsets.only(left: 20,top: 20,bottom: 5), - child: Text( - info, - style: const TextStyle(color: Colors.blue, fontSize: 16,fontWeight: FontWeight.bold), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_de_DE.json deleted file mode 100644 index 11528d25f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "iOS-Navigation", - "info": "Eine allgemeine Struktur für eine iOS-ähnliche Anwendungsleiste oben, die es ermöglicht, entsprechende Komponenten an bestimmten Stellen zu platzieren. Attribute wie Hintergrundfarbe, Abstände und Rahmen können angegeben werden.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoNavigationBar", - "desc": [ - "【leading】: Linke Komponente 【Widget】", - "【middle】: Mittlere Komponente 【Widget】", - "【trailing】: Rechte Komponente 【Widget】", - "【backgroundColor】: Hintergrundfarbe 【Color】", - "【padding】: Innenabstand 【EdgeInsetsDirectional】", - "【border】: Rahmen 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_en_US.json deleted file mode 100644 index 67150e6b2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "iOS Navigation", - "info": "A general structure for an iOS-style app top bar, where corresponding components can be placed in specified areas. Attributes such as background color, spacing, and border can be specified.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoNavigationBar", - "desc": [ - "【leading】: Left component 【Widget】", - "【middle】: Middle component 【Widget】", - "【trailing】: Trailing component 【Widget】", - "【backgroundColor】: Background color 【Color】", - "【padding】: Padding 【EdgeInsetsDirectional】", - "【border】: Border 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_es_ES.json deleted file mode 100644 index 7e03967dc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "Navegación iOS", - "info": "Una estructura común para la barra superior de aplicaciones con estilo iOS, donde se pueden colocar componentes correspondientes en las partes especificadas. Se pueden especificar propiedades como el color de fondo, el espaciado, el borde, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoNavigationBar", - "desc": [ - "【leading】 : Componente izquierdo 【Widget】", - "【middle】 : Componente central 【Widget】", - "【trailing】 : Componente derecho 【Widget】", - "【backgroundColor】 : Color de fondo 【Color】", - "【padding】 : Relleno interno 【EdgeInsetsDirectional】", - "【border】 : Borde 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_fr_FR.json deleted file mode 100644 index 18ffb31e8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "Navigation iOS", - "info": "Une structure générique pour une barre supérieure d'application de style iOS, permettant de placer des composants correspondants dans des parties spécifiées. Peut spécifier des propriétés telles que la couleur de fond, l'espacement, la bordure, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoNavigationBar", - "desc": [ - "【leading】 : Composant gauche 【Widget】", - "【middle】 : Composant central 【Widget】", - "【trailing】 : Composant de fin 【Widget】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【padding】 : Marge intérieure 【EdgeInsetsDirectional】", - "【border】 : Bordure 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_it_IT.json deleted file mode 100644 index d99005b7f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "Navigazione iOS", - "info": "Una struttura generica per una barra superiore di un'app in stile iOS, che consente di posizionare i componenti corrispondenti nelle aree specificate. È possibile specificare proprietà come il colore di sfondo, la spaziatura, il bordo, ecc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di CupertinoNavigationBar", - "desc": [ - "【leading】 : Componente sinistro 【Widget】", - "【middle】 : Componente centrale 【Widget】", - "【trailing】 : Componente destro 【Widget】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【padding】 : Spaziatura interna 【EdgeInsetsDirectional】", - "【border】 : Bordo 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ja_JP.json deleted file mode 100644 index c6b20cf54..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "iOSナビゲーション", - "info": "iOSスタイルのアプリトップバーの一般的な構造で、指定された部分に適切なコンポーネントを配置できます。背景色、間隔、ボーダーなどの属性を指定できます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoNavigationBar基本使用法", - "desc": [ - "【leading】 : 左側のコンポーネント 【Widget】", - "【middle】 : 中央のコンポーネント 【Widget】", - "【trailing】 : 右側のコンポーネント 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【padding】 : パディング 【EdgeInsetsDirectional】", - "【border】 : ボーダー 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ko_KR.json deleted file mode 100644 index a51e27689..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "iOS 네비게이션", - "info": "iOS 스타일의 앱 상단 바의 일반적인 구조로, 지정된 부분에 해당하는 컴포넌트를 배치할 수 있습니다. 배경색, 간격, 테두리 등 속성을 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoNavigationBar 기본 사용법", - "desc": [ - "【leading】 : 왼쪽 컴포넌트 【Widget】", - "【middle】 : 중간 컴포넌트 【Widget】", - "【trailing】 : 오른쪽 컴포넌트 【Widget】", - "【backgroundColor】 : 배경색 【Color】", - "【padding】 : 내부 여백 【EdgeInsetsDirectional】", - "【border】 : 테두리 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_pt_PT.json deleted file mode 100644 index c7ccb9110..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "Navegação iOS", - "info": "Uma estrutura genérica para uma barra superior de aplicativos no estilo iOS, onde é possível colocar componentes correspondentes em áreas especificadas. Pode-se especificar atributos como cor de fundo, espaçamento, borda, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoNavigationBar", - "desc": [ - "【leading】 : Componente esquerdo 【Widget】", - "【middle】 : Componente central 【Widget】", - "【trailing】 : Componente direito 【Widget】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【padding】 : Margem interna 【EdgeInsetsDirectional】", - "【border】 : Borda 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ru_RU.json deleted file mode 100644 index 4b9574764..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "iOS навигация", - "info": "Универсальная структура для верхней панели приложения в стиле iOS, позволяющая размещать соответствующие компоненты в указанных местах. Можно указать такие свойства, как цвет фона, отступы, границы и т.д.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoNavigationBar", - "desc": [ - "【leading】 : Левый компонент 【Widget】", - "【middle】 : Центральный компонент 【Widget】", - "【trailing】 : Правый компонент 【Widget】", - "【backgroundColor】 : Цвет фона 【Color】", - "【padding】 : Внутренние отступы 【EdgeInsetsDirectional】", - "【border】 : Граница 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_zh-CN.json deleted file mode 100644 index a4c3cf064..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "iOS导航", - "info": "一个iOS风格的应用顶部栏的通用结构,可在指定的部位放置相应的组件。可指定背景色、间距、边线等属性。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoNavigationBar基本用法", - "desc": [ - "【leading】 : 左侧组件 【Widget】", - "【middle】 : 中间组件 【Widget】", - "【trailing】 : 尾部组件 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【padding】 : 内边距 【EdgeInsetsDirectional】", - "【border】 : 边线 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/node1_base.dart deleted file mode 100644 index d0abec839..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/node1_base.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoNavigationBar extends StatelessWidget { - const CustomCupertinoNavigationBar({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return CupertinoNavigationBar( - leading: const Icon( - CupertinoIcons.back, - size: 25, - color: Colors.blue, - ), - middle: const Text("风雪雅舍"), - trailing: Image.asset( - "assets/images/icon_head.webp", - width: 25.0, - height: 25.0, - ), - backgroundColor: const Color(0xfff1f1f1), - padding: const EdgeInsetsDirectional.only(start: 10,end: 20), - border: Border.all(color: Colors.transparent), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_de_DE.json deleted file mode 100644 index 99bcfa1c2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "iOS-Seitengerüst", - "info": "iOS-stilisiertes Seitenlayout-Gerüst, das die Navigationsleiste oben und die Hintergrundfarbe der Seite festlegen kann.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoPageScaffold", - "desc": [ - "【child】 : Inhalt 【Widget】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【navigationBar】 : Kopf 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_en_US.json deleted file mode 100644 index 13b13ee49..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "iOS Page Scaffold", - "info": "iOS style page layout scaffold structure, can specify the top navigation bar and page background color.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoPageScaffold", - "desc": [ - "【child】 : Content 【Widget】", - "【backgroundColor】 : Background Color 【Color】", - "【navigationBar】 : Header 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_es_ES.json deleted file mode 100644 index 9cd2fb31c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "Estructura de andamio de página iOS", - "info": "Estructura de andamio de diseño de página estilo iOS, puede especificar la barra de navegación superior y el color de fondo de la página.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoPageScaffold", - "desc": [ - "【child】 : contenido 【Widget】", - "【backgroundColor】 : color de fondo 【Color】", - "【navigationBar】 : cabecera 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_fr_FR.json deleted file mode 100644 index 919cd6c10..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "Structure de base de page iOS", - "info": "Structure de base de mise en page de page de style iOS, permettant de spécifier la barre de navigation supérieure et la couleur de fond de la page.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoPageScaffold", - "desc": [ - "【child】 : contenu 【Widget】", - "【backgroundColor】 : couleur de fond 【Color】", - "【navigationBar】 : en-tête 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_it_IT.json deleted file mode 100644 index 41ade4739..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "Impalcatura della pagina iOS", - "info": "Struttura di impalcatura per layout di pagine in stile iOS, consente di specificare la barra di navigazione superiore e il colore di sfondo della pagina.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di CupertinoPageScaffold", - "desc": [ - "【child】 : Contenuto 【Widget】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【navigationBar】 : Testa 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ja_JP.json deleted file mode 100644 index 2c9c1ec71..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "iOSページスキャフォールド", - "info": "iOSスタイルのページレイアウトスキャフォールド構造で、上部のナビゲーションバーとページの背景色を指定できます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPageScaffold基本使用法", - "desc": [ - "【child】 : コンテンツ 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【navigationBar】 : ヘッダー 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ko_KR.json deleted file mode 100644 index c20f63728..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "iOS 페이지 스캐폴드", - "info": "iOS 스타일의 페이지 레이아웃 스캐폴드 구조로, 상단의 내비게이션 바와 페이지 배경색을 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPageScaffold 기본 사용법", - "desc": [ - "【child】 : 내용 【Widget】", - "【backgroundColor】 : 배경색 【Color】", - "【navigationBar】 : 헤더 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_pt_PT.json deleted file mode 100644 index bcae30240..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "Estrutura de Scaffold de Página iOS", - "info": "Estrutura de scaffold de layout de página no estilo iOS, que pode especificar a barra de navegação superior e a cor de fundo da página.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CupertinoPageScaffold", - "desc": [ - "【child】 : Conteúdo 【Widget】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【navigationBar】 : Cabeçalho 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ru_RU.json deleted file mode 100644 index 4efe59963..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "iOS страница каркас", - "info": "iOS-стиль макета страницы каркасной структуры, можно указать верхнюю навигационную панель и цвет фона страницы.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPageScaffold базовое использование", - "desc": [ - "【child】 : содержимое 【Widget】", - "【backgroundColor】 : цвет фона 【Color】", - "【navigationBar】 : верхняя часть 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_zh-CN.json deleted file mode 100644 index 1636363b8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "iOS页面脚手架", - "info": "iOS风格的页面布局脚手架结构,可指定顶部的导航栏和页面背景色。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPageScaffold基本用法", - "desc": [ - "【child】 : 内容 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【navigationBar】 : 头部 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/node1_base.dart deleted file mode 100644 index d0950a299..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/node1_base.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoPageScaffold extends StatelessWidget { - const CustomCupertinoPageScaffold({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height - 300, - child: const CupertinoPageScaffold( - navigationBar: CupertinoNavigationBar( - leading: Icon(CupertinoIcons.reply), - trailing: Icon(CupertinoIcons.share), - middle: Text('Flutter Unit'), - ), - backgroundColor: CupertinoColors.systemBackground, - child: Center( - child: Text('Hello, World!'), - ), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_de_DE.json deleted file mode 100644 index 2cde8206c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "iOS-Auswahl", - "info": "Hochwertiger zylindrischer Schieberegler, äußerst raffiniert, kann viele Konfigurationsattribute angeben und empfängt ausgewählte Ereignisse beim Schieben.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPicker Grundlegende Verwendung", - "desc": [ - "【children】 : Liste der Unterkomponenten 【List】", - "【offAxisFraction】 : Achsversatzrate 【double】", - "【squeeze】 : Quetschrate 【double】", - "【diameterRatio】 : Verhältnis von Höhe zu Zylinderdurchmesser 【double】", - "【itemExtent】 : Abstand 【double】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【onSelectedItemChanged】 : Ausgewähltes Ereignis 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_en_US.json deleted file mode 100644 index 440bae87a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "iOS Picker", - "info": "A high-end cylindrical sliding picker, very sophisticated, with many configurable attributes, and it receives the selected event when sliding.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoPicker", - "desc": [ - "【children】 : List of child components 【List】", - "【offAxisFraction】 : Axis offset rate 【double】", - "【squeeze】 : Squeeze rate 【double】", - "【diameterRatio】 : Ratio of height to cylinder diameter 【double】", - "【itemExtent】 : Spacing 【double】", - "【backgroundColor】 : Background color 【Color】", - "【onSelectedItemChanged】 : Selected event 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_es_ES.json deleted file mode 100644 index 245844479..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "Selector iOS", - "info": "Selector de deslizamiento cilíndrico de alta gama, muy ingenioso, con muchas propiedades de configuración, recibe eventos de selección al deslizar.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoPicker", - "desc": [ - "【children】 : Lista de componentes hijos 【List】", - "【offAxisFraction】 : Tasa de desplazamiento del eje 【double】", - "【squeeze】 : Tasa de compresión 【double】", - "【diameterRatio】 : Relación entre la altura y el diámetro del cilindro 【double】", - "【itemExtent】 : Espaciado 【double】", - "【backgroundColor】 : Color de fondo 【Color】", - "【onSelectedItemChanged】 : Evento de selección 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_fr_FR.json deleted file mode 100644 index fb1445e37..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "Sélecteur iOS", - "info": "Un sélecteur cylindrique haut de gamme, très sophistiqué, avec de nombreuses propriétés configurables, recevant des événements de sélection lors du glissement.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoPicker", - "desc": [ - "【children】 : Liste des composants enfants 【List】", - "【offAxisFraction】 : Taux de décalage de l'axe 【double】", - "【squeeze】 : Taux de compression 【double】", - "【diameterRatio】 : Rapport hauteur/diamètre du cylindre 【double】", - "【itemExtent】 : Espacement 【double】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【onSelectedItemChanged】 : Événement de sélection 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_it_IT.json deleted file mode 100644 index 436b0ec2e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "Selettore iOS", - "info": "Un selettore a scorrimento cilindrico di alta gamma, estremamente sofisticato, con molte proprietà configurabili e in grado di ricevere eventi di selezione durante lo scorrimento.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoPicker", - "desc": [ - "【children】 : Lista dei componenti figli 【List】", - "【offAxisFraction】 : Frazione di offset dell'asse 【double】", - "【squeeze】 : Frazione di compressione 【double】", - "【diameterRatio】 : Rapporto tra altezza e diametro del cilindro 【double】", - "【itemExtent】 : Spaziatura 【double】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【onSelectedItemChanged】 : Evento di selezione 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ja_JP.json deleted file mode 100644 index c348d5fe5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "iOSピッカー", - "info": "高級感あふれる円柱スライドピッカーで、精巧で、多くの設定属性を指定でき、スライド時の選択イベントを受け取ります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPickerの基本使用", - "desc": [ - "【children】 : 子コンポーネントリスト 【List】", - "【offAxisFraction】 : 軸オフセット率 【double】", - "【squeeze】 : 圧縮率 【double】", - "【diameterRatio】 : 高さと円柱直径の比率 【double】", - "【itemExtent】 : 間隔 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【onSelectedItemChanged】 : 選択イベント 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ko_KR.json deleted file mode 100644 index 64c6fc06b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "iOS 선택기", - "info": "고급스러운 원통형 슬라이드 선택기로, 정교하며 많은 설정 속성을 지정할 수 있고 슬라이드 시 선택 이벤트를 수신합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPicker 기본 사용법", - "desc": [ - "【children】 : 자식 위젯 리스트 【List】", - "【offAxisFraction】 : 축 오프셋 비율 【double】", - "【squeeze】 : 압축 비율 【double】", - "【diameterRatio】 : 높이와 원통 직경 비율 【double】", - "【itemExtent】 : 간격 【double】", - "【backgroundColor】 : 배경색 【Color】", - "【onSelectedItemChanged】 : 선택 이벤트 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_pt_PT.json deleted file mode 100644 index 0d17c373b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "Seletor iOS", - "info": "Um seletor deslizante cilíndrico de alta classe, extremamente sofisticado, que permite especificar muitos atributos de configuração e recebe eventos de seleção ao deslizar.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoPicker", - "desc": [ - "【children】 : Lista de componentes filhos 【List】", - "【offAxisFraction】 : Taxa de desvio do eixo 【double】", - "【squeeze】 : Taxa de compressão 【double】", - "【diameterRatio】 : Razão entre altura e diâmetro do cilindro 【double】", - "【itemExtent】 : Espaçamento 【double】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【onSelectedItemChanged】 : Evento de seleção 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ru_RU.json deleted file mode 100644 index 9cd80dc48..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "iOS селектор", - "info": "Высококлассный цилиндрический слайдер-селектор, очень изысканный, может быть настроен с множеством свойств, принимает события при выборе во время скольжения.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoPicker", - "desc": [ - "【children】 : Список дочерних компонентов 【List】", - "【offAxisFraction】 : Коэффициент смещения оси 【double】", - "【squeeze】 : Коэффициент сжатия 【double】", - "【diameterRatio】 : Соотношение высоты к диаметру цилиндра 【double】", - "【itemExtent】 : Расстояние между элементами 【double】", - "【backgroundColor】 : Цвет фона 【Color】", - "【onSelectedItemChanged】 : Событие выбора 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_zh-CN.json deleted file mode 100644 index f04bba123..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "iOS选择器", - "info": "高大上的柱面滑动选择器,精妙十足,可指定很多配置属性,接收滑动时选中事件。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPicker基本使用", - "desc": [ - "【children】 : 子组件列表 【List】", - "【offAxisFraction】 : 轴偏移率 【double】", - "【squeeze】 : 挤压率 【double】", - "【diameterRatio】 : 高与圆柱直径比率 【double】", - "【itemExtent】 : 间距 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【onSelectedItemChanged】 : 选中事件 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/node1_base.dart deleted file mode 100644 index e00bb7583..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/node1_base.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoPicker extends StatelessWidget { - const CustomCupertinoPicker({Key? key}) : super(key: key); - - final List names = const[ - 'Java', - 'Kotlin', - 'Dart', - 'Swift', - 'C++', - 'Python', - "JavaScript", - "PHP", - "Go", - "Object-c" - ]; - - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 150, - child: CupertinoPicker( - backgroundColor: CupertinoColors.systemGrey.withAlpha(33), - diameterRatio: 1, - offAxisFraction: 0.4, - squeeze: 1.5, - itemExtent: 40, - onSelectedItemChanged: (position) { - print('当前条目 ${names[position]}'); - }, - children: names.map((e) => Center(child: Text(e))).toList()), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_de_DE.json deleted file mode 100644 index 2dbe2c6f2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_de_DE.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "Radio-Button im macOS-Stil", - "info": "Ein Radio-Button im macOS-Stil, dessen Auswahlstatus durch value und groupValue bestimmt wird; onChanged ist der Callback für Klickereignisse.", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Verwendung von CupertinoRadio", - "desc": [ - "【value】 : Wert des Radio-Buttons 【T】", - "【groupValue】 : Aktueller übereinstimmender Wert 【T】", - "【onChanged】 : Callback bei Änderung 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "Farben von CupertinoRadio", - "desc": [ - "【activeColor】 : Hintergrundfarbe im aktiven Zustand 【Color?】", - "【fillColor】 : Füllfarbe 【Color?】", - "【inactiveColor】 : Hintergrundfarbe im inaktiven Zustand 【Color?】", - "【focusColor】 : Fokusfarbe 【Color?】", - "【mouseCursor】 : Mauszeigerstil 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "Umschaltbarkeit", - "desc": [ - "【toggleable】 : Ist Umschaltbarkeit unterstützt 【bool】", - "toggleable ist standardmäßig false. Wenn es true ist, wird bei einem Klick auf den aktiven Radio-Button ein null-Wert zurückgegeben, um die Anforderungen für die Auswahl und Nichtauswahl zu unterstützen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_en_US.json deleted file mode 100644 index 118f86351..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_en_US.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "Radio Button·macOS Style", - "info": "A macOS-style radio button, where the value and groupValue together determine whether the radio button is selected; the onChanged callback handles click events.", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoRadio Usage", - "desc": [ - "【value】: Radio button value 【T】", - "【groupValue】: Current matching value 【T】", - "【onChanged】: Callback when changed 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "CupertinoRadio Colors", - "desc": [ - "【activeColor】: Active background color 【Color?】", - "【fillColor】: Fill color 【Color?】", - "【inactiveColor】: Inactive background color 【Color?】", - "【focusColor】: Focus color 【Color?】", - "【mouseCursor】: Mouse cursor style 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "Toggle Support", - "desc": [ - "【toggleable】: Whether toggle is supported 【bool】", - "toggleable defaults to false. When set to true, clicking an active radio button will call back null data, supporting the need for toggling between selected and unselected states." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_es_ES.json deleted file mode 100644 index fa288631f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_es_ES.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "Botón de opción estilo macOS", - "info": "Un botón de opción con estilo macOS, donde value y groupValue determinan si este botón de opción está seleccionado; onChanged es la devolución de llamada para el evento de clic.", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso de CupertinoRadio", - "desc": [ - "【value】: Valor del botón de opción 【T】", - "【groupValue】: Valor actual coincidente 【T】", - "【onChanged】: Devolución de llamada al cambiar 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "Colores de CupertinoRadio", - "desc": [ - "【activeColor】: Color de fondo activo 【Color?】", - "【fillColor】: Relleno 【Color?】", - "【inactiveColor】: Color de fondo inactivo 【Color?】", - "【focusColor】: Color de enfoque 【Color?】", - "【mouseCursor】: Estilo del cursor del ratón 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "Soporte de alternancia", - "desc": [ - "【toggleable】: Soporta alternancia 【bool】", - "toggleable es false por defecto, cuando es true, al hacer clic en un botón de opción activo, se devuelve un valor null, lo que permite satisfacer la necesidad de alternar entre seleccionado y no seleccionado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_fr_FR.json deleted file mode 100644 index f9705e372..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_fr_FR.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "Bouton radio·style macOS", - "info": "Un bouton radio de style macOS, la valeur et groupValue déterminent ensemble si ce bouton radio est sélectionné; onChanged rappelle l'événement de clic.", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de CupertinoRadio", - "desc": [ - "【value】 : Valeur du bouton radio 【T】", - "【groupValue】 : Valeur de correspondance actuelle 【T】", - "【onChanged】 : Rappel lors du changement 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "Couleur de CupertinoRadio", - "desc": [ - "【activeColor】 : Couleur de fond active 【Color?】", - "【fillColor】 : Remplissage 【Color?】", - "【inactiveColor】 : Couleur de fond inactive 【Color?】", - "【focusColor】 : Couleur de focus 【Color?】", - "【mouseCursor】 : Style du curseur de la souris 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "Prise en charge du basculement", - "desc": [ - "【toggleable】 : Prise en charge du basculement 【bool】", - "toggleable est par défaut false, lorsqu'il est true, cliquer sur le bouton radio actif rappellera des données null, répondant ainsi aux besoins de basculement entre sélection et non-sélection." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_it_IT.json deleted file mode 100644 index dcccf7ed9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_it_IT.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "Pulsante di scelta·Stile macOS", - "info": "Un pulsante di scelta in stile macOS, value e groupValue determinano insieme se questo pulsante di scelta è selezionato; onChanged richiama l'evento di clic.", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilizzo di CupertinoRadio", - "desc": [ - "【value】 : Valore del pulsante di scelta 【T】", - "【groupValue】 : Valore corrente corrispondente 【T】", - "【onChanged】 : Richiama quando cambia 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "Colori di CupertinoRadio", - "desc": [ - "【activeColor】 : Colore di sfondo attivo 【Color?】", - "【fillColor】 : Riempimento 【Color?】", - "【inactiveColor】 : Colore di sfondo inattivo 【Color?】", - "【focusColor】 : Colore di messa a fuoco 【Color?】", - "【mouseCursor】 : Stile del puntatore del mouse 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "Supporto per il passaggio", - "desc": [ - "【toggleable】 : Supporto per il passaggio 【bool】", - "toggleable è impostato su false per impostazione predefinita, quando è true, cliccando sul pulsante di scelta attivo, richiamerà i dati null, supportando così la necessità di passare tra selezionato e non selezionato." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ja_JP.json deleted file mode 100644 index 42f6cf60e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ja_JP.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "ラジオボタン·macOSスタイル", - "info": "macOSスタイルのラジオボタンで、valueとgroupValueによってこのラジオボタンが選択されているかどうかが決まります;onChangedはクリックイベントのコールバックです。", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoRadio 使用", - "desc": [ - "【value】 : ラジオボタンの値 【T】", - "【groupValue】 : 現在のマッチ値 【T】", - "【onChanged】 : 変更時のコールバック 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "CupertinoRadio 色", - "desc": [ - "【activeColor】 : アクティブな背景色 【Color?】", - "【fillColor】 : 塗りつぶし 【Color?】", - "【inactiveColor】 : 非アクティブな背景色 【Color?】", - "【focusColor】 : フォーカス色 【Color?】", - "【mouseCursor】 : マウスポインタのスタイル 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "切り替えサポート", - "desc": [ - "【toggleable】 : 切り替えサポート 【bool】", - "toggleableはデフォルトでfalseで、trueの場合、アクティブなラジオボタンをクリックするとnullデータがコールバックされ、選択と非選択の切り替えニーズをサポートします。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ko_KR.json deleted file mode 100644 index ce96904d1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ko_KR.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "라디오 버튼·macOS 스타일", - "info": "macOS 스타일의 라디오 버튼, value와 groupValue가 함께 이 라디오 버튼이 선택되었는지 여부를 결정합니다; onChanged는 클릭 이벤트를 콜백합니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoRadio 사용", - "desc": [ - "【value】 : 라디오 버튼 값 【T】", - "【groupValue】 : 현재 매칭 값 【T】", - "【onChanged】 : 변경 시 콜백 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "CupertinoRadio 색상", - "desc": [ - "【activeColor】 : 활성 배경 색상 【Color?】", - "【fillColor】 : 채우기 【Color?】", - "【inactiveColor】 : 비활성 배경 색상 【Color?】", - "【focusColor】 : 포커스 색상 【Color?】", - "【mouseCursor】 : 마우스 커서 스타일 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "토글 지원 여부", - "desc": [ - "【toggleable】 : 토글 지원 여부 【bool】", - "toggleable은 기본적으로 false이며, true일 때 활성화된 라디오 버튼을 클릭하면 null 데이터를 콜백하여 선택 및 비선택 전환 요구를 지원합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_pt_PT.json deleted file mode 100644 index 1e16f0768..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_pt_PT.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "Botão de Rádio·Estilo macOS", - "info": "Um botão de rádio no estilo macOS, onde value e groupValue determinam se o botão de rádio está selecionado; onChanged é o callback para o evento de clique.", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso do CupertinoRadio", - "desc": [ - "【value】 : Valor do botão de rádio 【T】", - "【groupValue】 : Valor correspondente atual 【T】", - "【onChanged】 : Callback de mudança 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "Cores do CupertinoRadio", - "desc": [ - "【activeColor】 : Cor de fundo ativa 【Color?】", - "【fillColor】 : Preenchimento 【Color?】", - "【inactiveColor】 : Cor de fundo inativa 【Color?】", - "【focusColor】 : Cor de foco 【Color?】", - "【mouseCursor】 : Estilo do cursor do mouse 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "Suporte a Alternância", - "desc": [ - "【toggleable】 : Suporta alternância 【bool】", - "toggleable é false por padrão, quando true, clicar no botão de rádio ativo retorna dados nulos, suportando a necessidade de alternar entre selecionado e não selecionado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ru_RU.json deleted file mode 100644 index 66cab929e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ru_RU.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "Радиокнопка·macOS стиль", - "info": "Радиокнопка в стиле macOS, value и groupValue вместе определяют, выбрана ли эта радиокнопка; onChanged обратный вызов события клика.", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Использование CupertinoRadio", - "desc": [ - "【value】 : Значение радиокнопки 【T】", - "【groupValue】 : Текущее совпадающее значение 【T】", - "【onChanged】 : Обратный вызов при изменении 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "Цвета CupertinoRadio", - "desc": [ - "【activeColor】 : Цвет активного фона 【Color?】", - "【fillColor】 : Заполнение 【Color?】", - "【inactiveColor】 : Цвет неактивного фона 【Color?】", - "【focusColor】 : Цвет фокуса 【Color?】", - "【mouseCursor】 : Стиль указателя мыши 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "Поддержка переключения", - "desc": [ - "【toggleable】 : Поддержка переключения 【bool】", - "toggleable по умолчанию false, если true, при нажатии на активную радиокнопку будет возвращаться null, чтобы поддерживать переключение между выбором и отменой выбора." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_zh-CN.json deleted file mode 100644 index 89fe1e0fe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_zh-CN.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "单选钮·macOS风格", - "info": "一个 macOS 风格的选钮,value 和 groupValue 一起决定该单选按钮是否被选中; onChanged 回调点击事件。", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoRadio 使用", - "desc": [ - "【value】 : 选钮值 【T】", - "【groupValue】 : 当前匹配值 【T】", - "【onChanged】 : 改变时回调 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "CupertinoRadio 颜色", - "desc": [ - "【activeColor】 : 激活背景颜色 【Color?】", - "【fillColor】 : 填充 【Color?】", - "【inactiveColor】 : 未激活背景颜色 【Color?】", - "【focusColor】 : 聚焦色 【Color?】", - "【mouseCursor】 : 鼠标指针样式 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "是否支持切换", - "desc": [ - "【toggleable】 : 是否支持切换 【bool】", - "toggleable 默认为 false, 为 true 时,点击激活的选钮,会回调 null 数据,以此支持选中和非选择切换需求。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node1.dart deleted file mode 100644 index bfe2b26c8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node1.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class CupertinoRadioDemo1 extends StatefulWidget { - const CupertinoRadioDemo1({super.key}); - - @override - State createState() => _CupertinoRadioDemo1State(); -} - -class _CupertinoRadioDemo1State extends State { - List data = [0, 1, 2, 3, 4, 5]; - int _value = 1; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 6, - children: data - .map((int value) => CupertinoRadio( - value: value, - groupValue: _value, - onChanged: _onChange, - )) - .toList(), - ); - } - - void _onChange(int? value) { - setState(() => _value = value ?? 0); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node2.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node2.dart deleted file mode 100644 index d2925e4a5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node2.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class CupertinoRadioDemo2 extends StatefulWidget { - const CupertinoRadioDemo2({super.key}); - - @override - State createState() => _CupertinoRadioDemo2State(); -} - -class _CupertinoRadioDemo2State extends State { - List data = [0, 1, 2, 3, 4, 5]; - int _value = 1; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 6, - children: data - .map((int value) => CupertinoRadio( - mouseCursor: SystemMouseCursors.click, - activeColor: Colors.purple, - fillColor: Colors.cyanAccent, - inactiveColor: Colors.cyanAccent.withOpacity(0.05), - focusColor: Colors.yellow.withOpacity(0.2), - value: value, - groupValue: _value, - onChanged: _onChange)) - .toList(), - ); - } - - void _onChange(int? value) { - setState(() => _value = value ?? 0); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node3.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node3.dart deleted file mode 100644 index cc01444a5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node3.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -class CupertinoRadioDemo3 extends StatefulWidget { - const CupertinoRadioDemo3({super.key}); - - @override - State createState() => _CupertinoRadioDemo3State(); -} - -class _CupertinoRadioDemo3State extends State { - List data = [0, 1, 2, 3, 4, 5]; - int? _value = 1; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 6, - children: data - .map((int value) => CupertinoRadio( - mouseCursor: SystemMouseCursors.click, - toggleable: true, - value: value, - groupValue: _value, - onChanged: _onChange)) - .toList(), - ); - } - - void _onChange(int? value) { - setState(() => _value = value); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_de_DE.json deleted file mode 100644 index db0a648aa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "iOS-Scrollbalken", - "info": "Ein iOS-stil Scrollbalken, der einen scrollbaren Bereich umschließen muss. Wenn der Bereich scrollbar ist, wird ein Scrollbalken angezeigt, um die Position anzuzeigen.", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoScrollbar", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_en_US.json deleted file mode 100644 index 0ed9921ff..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "iOS Scroll Indicator", - "info": "An iOS-style scroll indicator that needs to wrap a scrollable area. When scrollable, it displays a scroll bar for indication.", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoScrollbar", - "desc": [ - "【child】 : Child widget 【Widget】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_es_ES.json deleted file mode 100644 index eca87f9d0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "Barra de desplazamiento de iOS", - "info": "Barra de desplazamiento al estilo de iOS, necesita envolver un área desplazable. Cuando es desplazable, muestra una barra de desplazamiento para indicar.", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoScrollbar", - "desc": [ - "【child】 : Widget hijo 【Widget】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_fr_FR.json deleted file mode 100644 index b608b3806..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "Barre de défilement iOS", - "info": "Barre de défilement de style iOS, nécessite d'être enveloppée dans une zone défilable. Lorsque la zone est défilable, une barre de défilement est affichée pour l'indication.", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoScrollbar", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【controller】 : Contrôleur 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_it_IT.json deleted file mode 100644 index 27fca5422..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "Barra di scorrimento iOS", - "info": "Barra di scorrimento in stile iOS, deve avvolgere un'area scorrevole. Quando è possibile scorrere, viene visualizzata una barra di scorrimento per indicare.", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoScrollbar", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ja_JP.json deleted file mode 100644 index 792fad381..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "iOSスクロールバー", - "info": "iOSスタイルのスクロールバーで、スクロール可能な領域をラップする必要があります。スクロール可能な場合、スクロールバーが表示されて指示します。", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoScrollbarの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【controller】 : コントローラー 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ko_KR.json deleted file mode 100644 index 9cef34b09..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "iOS 스크롤바", - "info": "iOS 스타일의 스크롤바로, 스크롤 가능한 영역을 감싸야 하며, 스크롤이 가능할 때 스크롤을 나타내는 바가 표시됩니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoScrollbar 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【controller】 : 컨트롤러 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_pt_PT.json deleted file mode 100644 index 47a54f6c9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "Barra de rolagem iOS", - "info": "Barra de rolagem no estilo iOS, precisa envolver uma área rolável. Quando a área é rolável, uma barra de rolagem é exibida para indicar.", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoScrollbar", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ru_RU.json deleted file mode 100644 index 0200f9c4c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "Ползунок прокрутки iOS", - "info": "Ползунок прокрутки в стиле iOS, который должен оборачивать прокручиваемую область. Когда прокрутка возможна, отображается ползунок для индикации.", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoScrollbar", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【controller】 : Контроллер 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_zh-CN.json deleted file mode 100644 index 861998d77..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "iOS滑动指示栏", - "info": "iOS风格的滑动指示栏,需要包裹一个可滑动区域,当可滑动时,会显示滑动的bar用于指示。", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoScrollbar基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【controller】 : 控制器 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/node1_base.dart deleted file mode 100644 index 77436718a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/node1_base.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoScrollbar extends StatelessWidget { - const CustomCupertinoScrollbar({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - TextStyle get textStyle => const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: CupertinoScrollbar( - child: ListView( - padding: const EdgeInsets.symmetric(horizontal: 5), - children: data - .map((color) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - )) - .toList(), - ), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_de_DE.json deleted file mode 100644 index 0aee025ec..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_de_DE.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "iOS-Tab-Umschaltung", - "info": "iOS-Stil mehrerer Schaltflächenleiste, ähnlich wie ToggleButtons, kann Attribute wie Innenabstand, ausgewählte Farbe, Randfarbe usw. angeben.", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von iOS-Tabs", - "desc": [ - "【children】 : Widget-Map 【Map】", - "【onValueChanged】 : Rückruf bei Wertänderung 【ValueChanged】", - "【groupValue】 : Ausgewählter Wert 【T】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Farbe von CupertinoSegmentedControl", - "desc": [ - "【unselectedColor】 : Nicht ausgewählte Farbe 【Color】", - "【selectedColor】 : Ausgewählte Farbe 【Color】", - "【pressedColor】 : Gedrückte Farbe 【Color】", - "【borderColor】 : Randfarbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_en_US.json deleted file mode 100644 index 852b8e80d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_en_US.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "iOS Multi-Tab Switch", - "info": "iOS-style multi-button bar, similar in behavior to ToggleButtons, with customizable properties such as padding, selected color, border color, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of iOS Tabs", - "desc": [ - "【children】: Component Map 【Map】", - "【onValueChanged】: Value Change Callback 【ValueChanged】", - "【groupValue】: Selected Value 【T】", - "【padding】: Padding 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Colors of CupertinoSegmentedControl", - "desc": [ - "【unselectedColor】: Unselected Color 【Color】", - "【selectedColor】: Selected Color 【Color】", - "【pressedColor】: Pressed Color 【Color】", - "【borderColor】: Border Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_es_ES.json deleted file mode 100644 index e0d08d209..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_es_ES.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "Control de segmentos iOS", - "info": "Barra de múltiples botones al estilo iOS, similar a ToggleButtons, se pueden especificar propiedades como el relleno interno, el color seleccionado, el color del borde, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de pestañas iOS", - "desc": [ - "【children】 : Mapa de componentes 【Map】", - "【onValueChanged】 : Callback de cambio de valor 【ValueChanged】", - "【groupValue】 : Valor seleccionado 【T】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Colores de CupertinoSegmentedControl", - "desc": [ - "【unselectedColor】 : Color no seleccionado 【Color】", - "【selectedColor】 : Color seleccionado 【Color】", - "【pressedColor】 : Color al presionar 【Color】", - "【borderColor】 : Color del borde 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_fr_FR.json deleted file mode 100644 index da8eda6d8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_fr_FR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "Commutateur à onglets iOS", - "info": "Barre à boutons multiples de style iOS, similaire à ToggleButtons, avec des propriétés telles que le padding, la couleur sélectionnée, la couleur de la bordure, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base des onglets iOS", - "desc": [ - "【children】 : Map de composants 【Map】", - "【onValueChanged】 : Callback de changement de valeur 【ValueChanged】", - "【groupValue】 : Valeur sélectionnée 【T】", - "【padding】 : Padding 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Couleurs de CupertinoSegmentedControl", - "desc": [ - "【unselectedColor】 : Couleur non sélectionnée 【Color】", - "【selectedColor】 : Couleur sélectionnée 【Color】", - "【pressedColor】 : Couleur pressée 【Color】", - "【borderColor】 : Couleur de la bordure 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_it_IT.json deleted file mode 100644 index 409ec6e53..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_it_IT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "Interruttore a segmenti iOS", - "info": "Barra a pulsanti multipli in stile iOS, simile a ToggleButtons, con proprietà come padding, colore selezionato, colore del bordo, ecc.", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base delle schede iOS", - "desc": [ - "【children】 : Mappa dei componenti 【Map】", - "【onValueChanged】 : Callback per il cambio di valore 【ValueChanged】", - "【groupValue】 : Valore selezionato 【T】", - "【padding】 : Padding interno 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Colori di CupertinoSegmentedControl", - "desc": [ - "【unselectedColor】 : Colore non selezionato 【Color】", - "【selectedColor】 : Colore selezionato 【Color】", - "【pressedColor】 : Colore premuto 【Color】", - "【borderColor】 : Colore del bordo 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ja_JP.json deleted file mode 100644 index 16d592054..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ja_JP.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "iOSタブ切り替え", - "info": "iOSスタイルのマルチボタンバー、ToggleButtonsと同様の動作をします。内側の余白、選択色、枠線色などの属性を指定できます。", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "iOSタブの基本使用", - "desc": [ - "【children】 : コンポーネントマップ 【Map】", - "【onValueChanged】 : 値変更コールバック 【ValueChanged】", - "【groupValue】 : 選択値 【T】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "CupertinoSegmentedControlの色", - "desc": [ - "【unselectedColor】 : 未選択色 【Color】", - "【selectedColor】 : 選択色 【Color】", - "【pressedColor】 : 押下色 【Color】", - "【borderColor】 : 枠線色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ko_KR.json deleted file mode 100644 index c3c3a8be4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ko_KR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "iOS 다중 탭 전환", - "info": "iOS 스타일의 다중 버튼 바로, ToggleButtons와 유사하게 동작하며 내부 여백, 선택 색상, 테두리 색상 등의 속성을 지정할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "iOS 탭 기본 사용", - "desc": [ - "【children】 : 컴포넌트 맵 【Map】", - "【onValueChanged】 : 값 변경 콜백 【ValueChanged】", - "【groupValue】 : 선택된 값 【T】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "CupertinoSegmentedControl의 색상", - "desc": [ - "【unselectedColor】 : 선택되지 않은 색상 【Color】", - "【selectedColor】 : 선택된 색상 【Color】", - "【pressedColor】 : 눌린 색상 【Color】", - "【borderColor】 : 테두리 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_pt_PT.json deleted file mode 100644 index d9a5caca5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_pt_PT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "Alternância de múltiplas abas iOS", - "info": "Barra de múltiplos botões no estilo iOS, semelhante ao ToggleButtons, pode especificar atributos como preenchimento interno, cor selecionada, cor da borda, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de abas iOS", - "desc": [ - "【children】 : Mapa de componentes 【Map】", - "【onValueChanged】 : Callback de mudança de valor 【ValueChanged】", - "【groupValue】 : Valor selecionado 【T】", - "【padding】 : Preenchimento interno 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Cores do CupertinoSegmentedControl", - "desc": [ - "【unselectedColor】 : Cor não selecionada 【Color】", - "【selectedColor】 : Cor selecionada 【Color】", - "【pressedColor】 : Cor pressionada 【Color】", - "【borderColor】 : Cor da borda 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ru_RU.json deleted file mode 100644 index c78e5cabf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ru_RU.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "iOS многоколоночный переключатель", - "info": "iOS-стиль многокнопочной панели, поведение аналогично ToggleButtons, можно указать такие свойства, как внутренние отступы, цвет выделения, цвет границы и т.д.", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование вкладок iOS", - "desc": [ - "【children】 : Карта компонентов 【Map】", - "【onValueChanged】 : Обратный вызов изменения значения 【ValueChanged】", - "【groupValue】 : Выбранное значение 【T】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Цвета CupertinoSegmentedControl", - "desc": [ - "【unselectedColor】 : Цвет невыделенного 【Color】", - "【selectedColor】 : Цвет выделенного 【Color】", - "【pressedColor】 : Цвет нажатия 【Color】", - "【borderColor】 : Цвет границы 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_zh-CN.json deleted file mode 100644 index ae97e64e5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_zh-CN.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "iOS多栏切换", - "info": "iOS风格的多按钮栏,表现和ToggleButtons类似,可指定内边距、选中色、边线色等属性。", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "iOS页签基本使用", - "desc": [ - "【children】 : 组件Map 【Map】", - "【onValueChanged】 : 值改变回调 【ValueChanged】", - "【groupValue】 : 选中值 【T】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "CupertinoSegmentedControl的颜色", - "desc": [ - "【unselectedColor】 : 未选中色 【Color】", - "【selectedColor】 : 选中色 【Color】", - "【pressedColor】 : 按下色 【Color】", - "【borderColor】 : 边线色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/node1_base.dart deleted file mode 100644 index 357ecb5ef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/node1_base.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -/// create by 张风捷特烈 on 2020/6/30 -/// contact me by email 1981462002@qq.com - -class CupertinoSegmentedControlDemo extends StatefulWidget { - const CupertinoSegmentedControlDemo({Key? key}) : super(key: key); - - @override - _CupertinoSegmentedControlDemoState createState() => - _CupertinoSegmentedControlDemoState(); -} - -class _CupertinoSegmentedControlDemoState - extends State { - int _value = 1; - - @override - Widget build(BuildContext context) { - return CupertinoSegmentedControl( - groupValue: _value, - onValueChanged: _onValueChanged, - padding: const EdgeInsets.only(top: 20), - children: const { - 1: Padding( - padding: EdgeInsets.only(left: 20, right: 20), - child: Text("混沌战士"), - ), - 2: Text("青眼白龙"), - 3: Text("黑魔术士"), - }, - ); - } - - void _onValueChanged(int value) { - setState(() { - _value=value; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/node2_color.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/node2_color.dart deleted file mode 100644 index 1a5098ed1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/node2_color.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/6/30 -/// contact me by email 1981462002@qq.com - -class CupertinoSegmentedControlColor extends StatefulWidget { - const CupertinoSegmentedControlColor({Key? key}) : super(key: key); - - @override - _CupertinoSegmentedControlColorState createState() => - _CupertinoSegmentedControlColorState(); -} - -class _CupertinoSegmentedControlColorState - extends State { - int _value = 1; - - @override - Widget build(BuildContext context) { - return CupertinoSegmentedControl( - unselectedColor: Colors.yellow, - selectedColor: Colors.green, - pressedColor: Colors.blue, - borderColor: Colors.red, - groupValue: _value, - onValueChanged: _onValueChanged, - padding: const EdgeInsets.only(top: 20), - children: const { - 1: Padding( - padding: EdgeInsets.only(left: 20, right: 20), - child: Text("混沌战士"), - ), - 2: Text("青眼白龙"), - 3: Text("黑魔术士"), - }, - ); - } - - void _onValueChanged(int value) { - setState(() { - _value=value; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_de_DE.json deleted file mode 100644 index c44512a7b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "iOS-Schieberegler", - "info": "iOS-stilisiertes Schieberegler-Widget, das zwischen einem festgelegten Minimum und Maximum verschoben werden kann. Ermöglicht die Angabe von Farben und empfängt Rückrufe bei Fortschrittsänderungen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoSlider", - "desc": [ - "【value】 : Wert 【double】", - "【min】 : Mindestwert 【double】", - "【max】 : Höchstwert 【double】", - "【activeColor】 : Aktive Farbe 【Color】", - "【thumbColor】 : Farbe des Reglers 【Color】", - "【divisions】 : Anzahl der Abschnitte 【int】", - "【onChangeStart】 : Rückruf beim Start des Verschiebens 【Function(double)】", - "【onChangeEnd】 : Rückruf beim Ende des Verschiebens 【Function(double)】", - "【onChanged】 : Rückruf bei Änderung 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_en_US.json deleted file mode 100644 index d8ca6668d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "iOS Slider", - "info": "An iOS-style slider component that allows dragging to select between a specified maximum and minimum value. You can specify colors and receive callbacks for progress changes.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoSlider", - "desc": [ - "【value】: value 【double】", - "【min】: minimum value 【double】", - "【max】: maximum value 【double】", - "【activeColor】: active color 【Color】", - "【thumbColor】: thumb color 【Color】", - "【divisions】: number of divisions 【int】", - "【onChangeStart】: callback when sliding starts 【Function(double)】", - "【onChangeEnd】: callback when sliding ends 【Function(double)】", - "【onChanged】: callback when value changes 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_es_ES.json deleted file mode 100644 index c14cbf8bd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "Control deslizante de iOS", - "info": "Componente de control deslizante al estilo de iOS, que permite seleccionar arrastrando entre un valor máximo y mínimo especificados. Se puede especificar el color y recibir una devolución de llamada para los cambios de progreso.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoSlider", - "desc": [ - "【value】 : valor 【double】", - "【min】 : valor mínimo 【double】", - "【max】 : valor máximo 【double】", - "【activeColor】 : color activo 【Color】", - "【thumbColor】 : color del círculo 【Color】", - "【divisions】 : número de divisiones 【int】", - "【onChangeStart】 : devolución de llamada al comenzar a deslizar 【Function(double)】", - "【onChangeEnd】 : devolución de llamada al finalizar el deslizamiento 【Function(double)】", - "【onChanged】 : devolución de llamada al cambiar 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_fr_FR.json deleted file mode 100644 index 09d1ddd2d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "Curseur iOS", - "info": "Composant curseur de style iOS, permettant de faire glisser et sélectionner entre une valeur minimale et maximale spécifiées. Peut spécifier la couleur et recevoir un rappel de changement de progression.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoSlider", - "desc": [ - "【value】 : valeur 【double】", - "【min】 : valeur minimale 【double】", - "【max】 : valeur maximale 【double】", - "【activeColor】 : couleur active 【Color】", - "【thumbColor】 : couleur du curseur 【Color】", - "【divisions】 : nombre de divisions 【int】", - "【onChangeStart】 : rappel de début de glissement 【Function(double)】", - "【onChangeEnd】 : rappel de fin de glissement 【Function(double)】", - "【onChanged】 : rappel de changement 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_it_IT.json deleted file mode 100644 index 6d3a68f24..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "Cursore iOS", - "info": "Componente cursore in stile iOS, che consente di selezionare trascinando tra un valore massimo e minimo specificato. È possibile specificare il colore e ricevere un callback per le modifiche di avanzamento.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoSlider", - "desc": [ - "【value】 : valore 【double】", - "【min】 : valore minimo 【double】", - "【max】 : valore massimo 【double】", - "【activeColor】 : colore attivo 【Color】", - "【thumbColor】 : colore del cerchio 【Color】", - "【divisions】 : numero di divisioni 【int】", - "【onChangeStart】 : callback di inizio scorrimento 【Function(double)】", - "【onChangeEnd】 : callback di fine scorrimento 【Function(double)】", - "【onChanged】 : callback di modifica 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ja_JP.json deleted file mode 100644 index e0265be8b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "iOSスライダー", - "info": "iOSスタイルのスライダーコンポーネントで、指定された最大値と最小値の間でドラッグして選択できます。色を指定でき、進捗変化のコールバックを受け取ります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoSliderの基本使用", - "desc": [ - "【value】 : 数値 【double】", - "【min】 : 最小値 【double】", - "【max】 : 最大値 【double】", - "【activeColor】 : アクティブカラー 【Color】", - "【thumbColor】 : サークルカラー 【Color】", - "【divisions】 : セグメント数 【int】", - "【onChangeStart】 : スライド開始コールバック 【Function(double)】", - "【onChangeEnd】 : スライド終了コールバック 【Function(double)】", - "【onChanged】 : 変更時コールバック 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ko_KR.json deleted file mode 100644 index 7ec7d2484..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "iOS 슬라이더", - "info": "iOS 스타일의 슬라이더 컴포넌트로, 지정된 최대값과 최소값 사이에서 드래그하여 선택할 수 있습니다. 색상을 지정할 수 있으며, 진행 상황 변화 콜백을 받을 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoSlider 기본 사용", - "desc": [ - "【value】 : 값 【double】", - "【min】 : 최소값 【double】", - "【max】 : 최대값 【double】", - "【activeColor】 : 활성 색상 【Color】", - "【thumbColor】 : 원형 색상 【Color】", - "【divisions】 : 분할 수 【int】", - "【onChangeStart】 : 슬라이드 시작 콜백 【Function(double)】", - "【onChangeEnd】 : 슬라이드 종료 콜백 【Function(double)】", - "【onChanged】 : 변경 시 콜백 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_pt_PT.json deleted file mode 100644 index dc6d97aef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "Controlo Deslizante iOS", - "info": "Componente de controlo deslizante no estilo iOS, que permite selecionar arrastando entre um valor máximo e mínimo especificados. Pode-se especificar cores e receber callbacks de mudança de progresso.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CupertinoSlider", - "desc": [ - "【value】 : valor 【double】", - "【min】 : valor mínimo 【double】", - "【max】 : valor máximo 【double】", - "【activeColor】 : cor ativa 【Color】", - "【thumbColor】 : cor do círculo 【Color】", - "【divisions】 : número de divisões 【int】", - "【onChangeStart】 : callback de início de deslize 【Function(double)】", - "【onChangeEnd】 : callback de fim de deslize 【Function(double)】", - "【onChanged】 : callback de mudança 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ru_RU.json deleted file mode 100644 index 4c3511136..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "iOS слайдер", - "info": "Компонент слайдера в стиле iOS, который позволяет выбирать значения путем перетаскивания между указанными минимальным и максимальным значениями. Можно указать цвет и получать обратные вызовы при изменении прогресса.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoSlider", - "desc": [ - "【value】 : значение 【double】", - "【min】 : минимальное значение 【double】", - "【max】 : максимальное значение 【double】", - "【activeColor】 : активный цвет 【Color】", - "【thumbColor】 : цвет круга 【Color】", - "【divisions】 : количество делений 【int】", - "【onChangeStart】 : обратный вызов при начале перетаскивания 【Function(double)】", - "【onChangeEnd】 : обратный вызов при завершении перетаскивания 【Function(double)】", - "【onChanged】 : обратный вызов при изменении 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_zh-CN.json deleted file mode 100644 index 09a46305e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "iOS滑块", - "info": "iOS风格的滑块组件,可以在指定的最大值和最小值之间拖动选择。可指定颜色,接收进度变化回调。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoSlider基本使用", - "desc": [ - "【value】 : 数值 【double】", - "【min】 : 最小值 【double】", - "【max】 : 最大值 【double】", - "【activeColor】 : 激活颜色 【Color】", - "【thumbColor】 : 圆形颜色 【Color】", - "【divisions】 : 分段数 【int】", - "【onChangeStart】 : 开始滑动回调 【Function(double)】", - "【onChangeEnd】 : 滑动结束回调 【Function(double)】", - "【onChanged】 : 改变时回调 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/node1_base.dart deleted file mode 100644 index b115de460..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/node1_base.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoSlider extends StatefulWidget { - const CustomCupertinoSlider({Key? key}) : super(key: key); - - @override - _CustomCupertinoSliderState createState() => _CustomCupertinoSliderState(); -} - -class _CustomCupertinoSliderState extends State { - double _value = 0.0; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text('当前值:${_value.toStringAsFixed(1)}'), - CupertinoSlider( - value: _value, - divisions: 180, - min: 0.0, - max: 360.0, - activeColor: Colors.green, - thumbColor: Colors.white, - onChangeStart: (value) => print('开始滑动:$value'), - onChangeEnd: (value) => print('滑动结束:$value'), - onChanged: (value) { - setState(() { - _value = value; - }); - }), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_de_DE.json deleted file mode 100644 index a6e5aa82e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "iOS-Schieberegister", - "info": "iOS-stilisiertes Schieberegister, unterstützt Klicken und Schieben zum Wechseln. Ermöglicht die Angabe von Registerfarben, Hintergrundfarben, Rändern und anderen Eigenschaften.", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung des iOS-Schieberegisters", - "desc": [ - "【children】 : Komponenten-Map 【Map】", - "【onValueChanged】 : Rückruf bei Wertänderung 【ValueChanged】", - "【groupValue】 : Ausgewählter Wert 【T】", - "【thumbColor】 : Ausgewählte Farbe 【Color】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_en_US.json deleted file mode 100644 index a00cd8a8d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "iOS Sliding Tabs", - "info": "iOS-style sliding tabs, supporting click and slide to switch. You can specify tab color, background color, margin and other properties.", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of iOS Sliding Tabs", - "desc": [ - "【children】: Component Map 【Map】", - "【onValueChanged】: Value Change Callback 【ValueChanged】", - "【groupValue】: Selected Value 【T】", - "【thumbColor】: Selected Color 【Color】", - "【backgroundColor】: Background Color 【Color】", - "【padding】: Padding 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_es_ES.json deleted file mode 100644 index 31cb1f686..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "Pestañas deslizantes de iOS", - "info": "Pestañas deslizantes al estilo de iOS, que admiten el cambio mediante clics y deslizamientos. Se pueden especificar propiedades como el color de la pestaña, el color de fondo, los márgenes, etc.", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de pestañas deslizantes de iOS", - "desc": [ - "【children】: Mapa de componentes 【Map】", - "【onValueChanged】: Callback de cambio de valor 【ValueChanged】", - "【groupValue】: Valor seleccionado 【T】", - "【thumbColor】: Color de selección 【Color】", - "【backgroundColor】: Color de fondo 【Color】", - "【padding】: Relleno interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_fr_FR.json deleted file mode 100644 index 3948c259a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "Onglets coulissants iOS", - "info": "Onglets coulissants de style iOS, prenant en charge le changement par clic ou glissement. Vous pouvez spécifier des propriétés telles que la couleur des onglets, la couleur de fond, les marges, etc.", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base des onglets coulissants iOS", - "desc": [ - "【children】 : Map des composants 【Map】", - "【onValueChanged】 : Rappel de changement de valeur 【ValueChanged】", - "【groupValue】 : Valeur sélectionnée 【T】", - "【thumbColor】 : Couleur de sélection 【Color】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_it_IT.json deleted file mode 100644 index f1e82bead..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "Schede scorrevoli iOS", - "info": "Schede scorrevoli in stile iOS, supportano il passaggio tramite clic e scorrimento. È possibile specificare proprietà come il colore delle schede, il colore di sfondo, i margini, ecc.", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base delle schede scorrevoli iOS", - "desc": [ - "【children】 : Mappa dei componenti 【Map】", - "【onValueChanged】 : Callback per il cambio di valore 【ValueChanged】", - "【groupValue】 : Valore selezionato 【T】", - "【thumbColor】 : Colore selezionato 【Color】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ja_JP.json deleted file mode 100644 index 451a966e9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "iOSスライドタブ", - "info": "iOSスタイルのスライドタブで、クリックやスライドでの切り替えをサポートします。タブの色、背景色、余白などの属性を指定できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "iOSスライドタブの基本使用", - "desc": [ - "【children】 : コンポーネントMap 【Map】", - "【onValueChanged】 : 値変更コールバック 【ValueChanged】", - "【groupValue】 : 選択値 【T】", - "【thumbColor】 : 選択色 【Color】", - "【backgroundColor】 : 背景色 【Color】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ko_KR.json deleted file mode 100644 index 480697947..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "iOS 슬라이딩 탭", - "info": "iOS 스타일의 슬라이딩 탭으로, 클릭 및 슬라이드 전환을 지원합니다. 탭 색상, 배경색, 여백 등 속성을 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "iOS 슬라이딩 탭 기본 사용", - "desc": [ - "【children】 : 컴포넌트 맵 【Map】", - "【onValueChanged】 : 값 변경 콜백 【ValueChanged】", - "【groupValue】 : 선택된 값 【T】", - "【thumbColor】 : 선택된 색상 【Color】", - "【backgroundColor】 : 배경색 【Color】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_pt_PT.json deleted file mode 100644 index 7f6034f8f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "Separador deslizante iOS", - "info": "Separador deslizante ao estilo iOS, suporta alternância por toque e deslize. Permite especificar propriedades como cor do separador, cor de fundo, margens, etc.", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do separador deslizante iOS", - "desc": [ - "【children】 : Mapa de componentes 【Map】", - "【onValueChanged】 : Callback de mudança de valor 【ValueChanged】", - "【groupValue】 : Valor selecionado 【T】", - "【thumbColor】 : Cor de seleção 【Color】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【padding】 : Preenchimento interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ru_RU.json deleted file mode 100644 index c8696f4cf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "iOS слайдер вкладок", - "info": "Слайдер вкладок в стиле iOS, поддерживает переключение по клику и скольжению. Можно указать цвет вкладок, цвет фона, отступы и другие свойства.", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование iOS слайдера вкладок", - "desc": [ - "【children】 : Карта компонентов 【Map】", - "【onValueChanged】 : Обратный вызов при изменении значения 【ValueChanged】", - "【groupValue】 : Выбранное значение 【T】", - "【thumbColor】 : Цвет выбранного элемента 【Color】", - "【backgroundColor】 : Цвет фона 【Color】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_zh-CN.json deleted file mode 100644 index cac065fcc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "iOS滑动页签", - "info": "iOS风格的滑动页签,支持点击、滑动切换。可指定页签颜色、背景色、边距等属性。", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "iOS滑动页签基本使用", - "desc": [ - "【children】 : 组件Map 【Map】", - "【onValueChanged】 : 值改变回调 【ValueChanged】", - "【groupValue】 : 选中值 【T】", - "【thumbColor】 : 选中色 【Color】", - "【backgroundColor】 : 背景色 【Color】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/node1_base.dart deleted file mode 100644 index 088ae395e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/node1_base.dart +++ /dev/null @@ -1,44 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - -class CupertinoSlidingSegmentedControlDemo extends StatefulWidget { - const CupertinoSlidingSegmentedControlDemo({Key? key}) : super(key: key); - - @override - _CupertinoSlidingSegmentedControlDemoState createState() => - _CupertinoSlidingSegmentedControlDemoState(); -} - -class _CupertinoSlidingSegmentedControlDemoState - extends State { - int _value = 1; - - @override - Widget build(BuildContext context) { - return CupertinoSlidingSegmentedControl( - groupValue: _value, - onValueChanged: _onValueChanged, - thumbColor: Colors.amberAccent, - backgroundColor: Colors.green.withAlpha(99), - padding: const EdgeInsets.all(5), - children: const { - 1: Padding( - padding: EdgeInsets.only(left: 20, right: 20), - child: Text("混沌战士"), - ), - 2: Text("青眼白龙"), - 3: Text("黑魔导"), - }, - ); - } - - void _onValueChanged(int? value) { - if(value==null) return; - setState(() { - _value=value; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_de_DE.json deleted file mode 100644 index 56853543c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "iOS-Schalter", - "info": "Ein iOS-stilbasierter Umschalter, der häufig für die Konfigurationsumschaltung verwendet wird, kann Farben angeben und empfängt Rückrufe für Zustandsänderungen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoSwitch", - "desc": [ - "【value】 : Ob ausgewählt 【double】", - "【activeColor】 : Farbe im aktivierten Zustand 【Color】", - "【onChanged】 : Umschalt-Rückruf 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_en_US.json deleted file mode 100644 index c4226620d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "iOS Switch", - "info": "An iOS-style toggle switch, commonly used for configuration toggles, can specify colors, and receives state change callbacks.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoSwitch", - "desc": [ - "【value】: Whether it is selected 【double】", - "【activeColor】: Active state color 【Color】", - "【onChanged】: Toggle callback 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_es_ES.json deleted file mode 100644 index 060362991..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "Interruptor iOS", - "info": "Interruptor de estilo iOS, comúnmente utilizado para cambiar configuraciones, se puede especificar el color y recibe una devolución de llamada para cambios de estado.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoSwitch", - "desc": [ - "【value】 : si está seleccionado 【double】", - "【activeColor】 : color del estado activo 【Color】", - "【onChanged】 : devolución de llamada de cambio 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_fr_FR.json deleted file mode 100644 index a3f017956..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "Bouton de commutation iOS", - "info": "Bouton de commutation de style iOS, souvent utilisé pour la commutation de configuration, peut spécifier la couleur et recevoir un rappel de changement d'état.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoSwitch", - "desc": [ - "【value】 : Est-ce sélectionné 【double】", - "【activeColor】 : Couleur de l'état actif 【Color】", - "【onChanged】 : Rappel de commutation 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_it_IT.json deleted file mode 100644 index 18d6fe7c1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "Interruttore iOS", - "info": "Interruttore in stile iOS, comunemente utilizzato per il cambio di configurazione, può specificare il colore e riceve un callback per i cambiamenti di stato.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoSwitch", - "desc": [ - "【value】 : Se è selezionato 【double】", - "【activeColor】 : Colore dello stato attivo 【Color】", - "【onChanged】 : Callback di cambio 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ja_JP.json deleted file mode 100644 index 7d8343e99..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "iOSスイッチ", - "info": "iOSスタイルのトグルスイッチ。設定の切り替えに頻繁に使用され、色を指定でき、状態変化のコールバックを受け取ります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoSwitchの基本使用", - "desc": [ - "【value】 : 選択されているかどうか 【double】", - "【activeColor】 : アクティブ状態の色 【Color】", - "【onChanged】 : 切り替えコールバック 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ko_KR.json deleted file mode 100644 index de3ac1587..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "iOS 스위치", - "info": "iOS 스타일의 토글 스위치로, 설정 전환에 자주 사용되며 색상을 지정할 수 있고 상태 변화 콜백을 받습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoSwitch 기본 사용법", - "desc": [ - "【value】 : 선택 여부 【double】", - "【activeColor】 : 활성 상태 색상 【Color】", - "【onChanged】 : 전환 콜백 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_pt_PT.json deleted file mode 100644 index cbc0fa543..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "Interruptor iOS", - "info": "Interruptor de estilo iOS, frequentemente usado para alternar configurações, pode especificar cores e receber callbacks de mudança de estado.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoSwitch", - "desc": [ - "【value】 : Se está selecionado 【double】", - "【activeColor】 : Cor do estado ativo 【Color】", - "【onChanged】 : Callback de alternância 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ru_RU.json deleted file mode 100644 index f8f139a53..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "iOS переключатель", - "info": "Переключатель в стиле iOS, часто используется для переключения настроек, может быть указан цвет, получает обратный вызов при изменении состояния.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoSwitch", - "desc": [ - "【value】 : выбрано ли 【double】", - "【activeColor】 : цвет активного состояния 【Color】", - "【onChanged】 : обратный вызов переключения 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_zh-CN.json deleted file mode 100644 index b07fe449b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "iOS切钮", - "info": "iOS风格的切换选钮,常用于配置的切换,可指定颜色,接收状态变化回调。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoSwitch基本使用", - "desc": [ - "【value】 : 是否选中 【double】", - "【activeColor】 : 激活态颜色 【Color】", - "【onChanged】 : 切换回调 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/node1_base.dart deleted file mode 100644 index db405538d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/node1_base.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoSwitch extends StatefulWidget { - const CustomCupertinoSwitch({Key? key}) : super(key: key); - - @override - _CustomCupertinoSwitchState createState() => _CustomCupertinoSwitchState(); -} - -class _CustomCupertinoSwitchState extends State { - final List colors = [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - - bool _checked = false; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: colors - .map((e) => CupertinoSwitch( - value: _checked, - activeColor: e, - onChanged: (v) { - setState(() => _checked = v); - })).toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_de_DE.json deleted file mode 100644 index 43f67a679..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "iOS-Tab", - "info": "Ein iOS-stilvoller TabBar, der normalerweise für CupertinoTabScaffold verwendet wird. Kann Farben, Symbolgrößen, Ränder usw. angeben. Empfängt Klickereignisse für Elemente.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoTabBar", - "desc": [ - "【currentIndex】 : Aktueller aktivierter Index 【Widget】", - "【items】 : Elementkomponenten 【Widget】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【inactiveColor】 : Inaktive Farbe 【Color】", - "【activeColor】 : Aktive Farbe 【Color】", - "【iconSize】 : Symbolgröße 【double】", - "【border】 : Rand 【Border】", - "【onTap】 : Klickereignis 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_en_US.json deleted file mode 100644 index dd8e27711..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "iOS Tab", - "info": "An iOS-style TabBar, typically used in CupertinoTabScaffold. Can specify color, icon size, border, and other data. Receives item click events.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoTabBar", - "desc": [ - "【currentIndex】 : Current active index 【Widget】", - "【items】 : Item components 【Widget】", - "【backgroundColor】 : Background color 【Color】", - "【inactiveColor】 : Inactive color 【Color】", - "【activeColor】 : Active color 【Color】", - "【iconSize】 : Icon size 【double】", - "【border】 : Border 【Border】", - "【onTap】 : Click event 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_es_ES.json deleted file mode 100644 index bb3d70228..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "Pestañas iOS", - "info": "Un TabBar de estilo iOS, generalmente utilizado en CupertinoTabScaffold. Se pueden especificar datos como el color, el tamaño del icono, el borde, etc. Recibe eventos de clic en los elementos.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoTabBar", - "desc": [ - "【currentIndex】 : Índice activo actual 【Widget】", - "【items】 : Componentes de elementos 【Widget】", - "【backgroundColor】 : Color de fondo 【Color】", - "【inactiveColor】 : Color inactivo 【Color】", - "【activeColor】 : Color activo 【Color】", - "【iconSize】 : Tamaño del icono 【double】", - "【border】 : Borde 【Border】", - "【onTap】 : Evento de clic 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_fr_FR.json deleted file mode 100644 index 6ff1d38ab..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "Onglets iOS", - "info": "Une barre d'onglets de style iOS, généralement utilisée dans CupertinoTabScaffold. Peut spécifier des données telles que la couleur, la taille des icônes, les bordures, etc. Reçoit les événements de clic sur les éléments.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoTabBar", - "desc": [ - "【currentIndex】 : Index actif actuel 【Widget】", - "【items】 : Composants des éléments 【Widget】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【inactiveColor】 : Couleur inactive 【Color】", - "【activeColor】 : Couleur active 【Color】", - "【iconSize】 : Taille de l'icône 【double】", - "【border】 : Bordure 【Border】", - "【onTap】 : Événement de clic 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_it_IT.json deleted file mode 100644 index a84652e00..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "Schede iOS", - "info": "Una TabBar in stile iOS, solitamente utilizzata in CupertinoTabScaffold. È possibile specificare colore, dimensione delle icone, bordi, ecc. Riceve gli eventi di click sugli item.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di CupertinoTabBar", - "desc": [ - "【currentIndex】 : Indice attualmente attivo 【Widget】", - "【items】 : Componenti degli elementi 【Widget】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【inactiveColor】 : Colore inattivo 【Color】", - "【activeColor】 : Colore attivo 【Color】", - "【iconSize】 : Dimensione dell'icona 【double】", - "【border】 : Bordo 【Border】", - "【onTap】 : Evento di click 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ja_JP.json deleted file mode 100644 index 1a0143453..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "iOSタブ", - "info": "iOSスタイルのTabBarで、通常CupertinoTabScaffoldで使用されます。色、アイコンサイズ、ボーダーなどのデータを指定できます。アイテムのクリックイベントを受け取ります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabBarの基本使い方", - "desc": [ - "【currentIndex】 : 現在のアクティブインデックス 【Widget】", - "【items】 : アイテムコンポーネント 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【inactiveColor】 : 非アクティブ色 【Color】", - "【activeColor】 : アクティブ色 【Color】", - "【iconSize】 : アイコンサイズ 【double】", - "【border】 : ボーダー 【Border】", - "【onTap】 : クリックイベント 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ko_KR.json deleted file mode 100644 index d97ac75a7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "iOS 탭", - "info": "iOS 스타일의 TabBar로, 일반적으로 CupertinoTabScaffold에서 사용됩니다. 색상, 아이콘 크기, 테두리 등을 지정할 수 있습니다. 아이템의 클릭 이벤트를 수신합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabBar 기본 사용법", - "desc": [ - "【currentIndex】 : 현재 활성화된 인덱스 【Widget】", - "【items】 : 항목 위젯 【Widget】", - "【backgroundColor】 : 배경색 【Color】", - "【inactiveColor】 : 비활성화 색상 【Color】", - "【activeColor】 : 활성화 색상 【Color】", - "【iconSize】 : 아이콘 크기 【double】", - "【border】 : 테두리 【Border】", - "【onTap】 : 클릭 이벤트 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_pt_PT.json deleted file mode 100644 index 9b9feb286..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "Separador de Páginas iOS", - "info": "Um TabBar de estilo iOS, geralmente usado em CupertinoTabScaffold. Pode especificar dados como cor, tamanho do ícone, borda, etc. Recebe eventos de clique nos itens.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CupertinoTabBar", - "desc": [ - "【currentIndex】 : Índice ativo atual 【Widget】", - "【items】 : Componentes dos itens 【Widget】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【inactiveColor】 : Cor inativa 【Color】", - "【activeColor】 : Cor ativa 【Color】", - "【iconSize】 : Tamanho do ícone 【double】", - "【border】 : Borda 【Border】", - "【onTap】 : Evento de clique 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ru_RU.json deleted file mode 100644 index 3f1d18321..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "iOS вкладки", - "info": "TabBar в стиле iOS, обычно используется в CupertinoTabScaffold. Можно указать цвет, размер иконок, границы и другие данные. Получает события кликов по элементам.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoTabBar", - "desc": [ - "【currentIndex】 : текущий активный индекс 【Widget】", - "【items】 : компоненты элементов 【Widget】", - "【backgroundColor】 : цвет фона 【Color】", - "【inactiveColor】 : цвет неактивного элемента 【Color】", - "【activeColor】 : цвет активного элемента 【Color】", - "【iconSize】 : размер иконки 【double】", - "【border】 : граница 【Border】", - "【onTap】 : событие клика 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_zh-CN.json deleted file mode 100644 index 323d78bd8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "iOS页签", - "info": "一个iOS风格的TabBar,通常用于CupertinoTabScaffold。可指定颜色、图标大小、边线等数据。接收item的点击事件。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabBar基本用法", - "desc": [ - "【currentIndex】 : 当前激活索引 【Widget】", - "【items】 : 条目组件 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【inactiveColor】 : 非激活色 【Color】", - "【activeColor】 : 激活色 【Color】", - "【iconSize】 : 图标大小 【double】", - "【border】 : 边线 【Border】", - "【onTap】 : 点击事件 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/node1_base.dart deleted file mode 100644 index 523ee6171..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/node1_base.dart +++ /dev/null @@ -1,63 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoTabBar extends StatefulWidget { - const CustomCupertinoTabBar({Key? key}) : super(key: key); - - @override - _CustomCupertinoTabBarState createState() => _CustomCupertinoTabBarState(); -} - -class _CustomCupertinoTabBarState extends State { - int _position = 0; - final Map iconsMap = { - //底栏图标 - "图鉴": Icons.home, "动态": Icons.toys, - "喜欢": Icons.favorite, "手册": Icons.class_, - "我的": Icons.account_circle, - }; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildContent(context), - _buildTabBar(), - ], - ); - } - - Widget _buildTabBar() { - return CupertinoTabBar( - currentIndex: _position, - onTap: (value) => setState(() => _position = value), - items: iconsMap.keys - .map((e) => BottomNavigationBarItem( - icon: Icon( - iconsMap[e], - ), - label: e, - )) - .toList(), - activeColor: Colors.blue, - inactiveColor: const Color(0xff333333), - backgroundColor: const Color(0xfff1f1f1), - iconSize: 25.0, - ); - } - - Widget _buildContent(BuildContext context) { - return Container( - alignment: Alignment.center, - width: MediaQuery.of(context).size.width, - height: 150, - color: const Color(0xffE7F3FC), - child: Text( - iconsMap.keys.toList()[_position], - style: const TextStyle(color: Colors.blue, fontSize: 24), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_de_DE.json deleted file mode 100644 index b87197045..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "iOS-Tab-Scaffold", - "info": "iOS-stilisiertes Seitenlayout-Scaffold, das eine Navigationsleiste am unteren Rand und eine Hauptinhaltseite festlegen kann.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoTabScaffold", - "desc": [ - "【tabBar】 : Tab-Leiste 【CupertinoTabBar】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【controller】 : Controller 【CupertinoTabController】", - "【tabBuilder】 : Seitenkonstruktor 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_en_US.json deleted file mode 100644 index 1ab677a42..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "iOS Tab Scaffold", - "info": "iOS style page layout scaffold structure, which can specify the bottom navigation bar and the main content page.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoTabScaffold", - "desc": [ - "【tabBar】: Tab bar 【CupertinoTabBar】", - "【backgroundColor】: Background color 【Color】", - "【controller】: Controller 【CupertinoTabController】", - "【tabBuilder】: Page builder 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_es_ES.json deleted file mode 100644 index 2b2cfcd9c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "Andamio de pestañas iOS", - "info": "Estructura de andamio de diseño de página al estilo iOS, que permite especificar la barra de navegación inferior y la página de contenido principal.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoTabScaffold", - "desc": [ - "【tabBar】 : Barra de pestañas 【CupertinoTabBar】", - "【backgroundColor】 : Color de fondo 【Color】", - "【controller】 : Controlador 【CupertinoTabController】", - "【tabBuilder】 : Constructor de página 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_fr_FR.json deleted file mode 100644 index f0c9844e2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "Échafaudage d'onglets iOS", - "info": "Structure d'échafaudage de mise en page de style iOS, permettant de spécifier la barre de navigation en bas et la page de contenu principal.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoTabScaffold", - "desc": [ - "【tabBar】 : Barre d'onglets 【CupertinoTabBar】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【controller】 : Contrôleur 【CupertinoTabController】", - "【tabBuilder】 : Constructeur de page 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_it_IT.json deleted file mode 100644 index 66dcdb499..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "Impalcatura a schede iOS", - "info": "Struttura di impalcatura per layout di pagine in stile iOS, con barra di navigazione inferiore e pagina principale specificabili.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di CupertinoTabScaffold", - "desc": [ - "【tabBar】 : Barra delle schede 【CupertinoTabBar】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【controller】 : Controllore 【CupertinoTabController】", - "【tabBuilder】 : Costruttore di pagine 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ja_JP.json deleted file mode 100644 index 5dc3ca23b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "iOSタブスキャフォールド", - "info": "iOSスタイルのページレイアウトスキャフォールド構造で、最下部のナビゲーションバーとメインコンテンツページを指定できます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabScaffold基本使用法", - "desc": [ - "【tabBar】 : タブバー 【CupertinoTabBar】", - "【backgroundColor】 : 背景色 【Color】", - "【controller】 : コントローラー 【CupertinoTabController】", - "【tabBuilder】 : ページビルダー 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ko_KR.json deleted file mode 100644 index fc87a3502..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "iOS 탭 스캐폴드", - "info": "iOS 스타일의 페이지 레이아웃 스캐폴드 구조, 최하단의 네비게이션 전환 바와 주 내용 페이지를 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabScaffold 기본 사용법", - "desc": [ - "【tabBar】 : 탭 바 【CupertinoTabBar】", - "【backgroundColor】 : 배경색 【Color】", - "【controller】 : 컨트롤러 【CupertinoTabController】", - "【tabBuilder】 : 페이지 빌더 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_pt_PT.json deleted file mode 100644 index e08956199..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "Estrutura de Scaffold de Abas iOS", - "info": "Estrutura de scaffold de layout de página no estilo iOS, que permite especificar a barra de navegação no fundo e a página de conteúdo principal.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CupertinoTabScaffold", - "desc": [ - "【tabBar】 : Barra de Abas 【CupertinoTabBar】", - "【backgroundColor】 : Cor de Fundo 【Color】", - "【controller】 : Controlador 【CupertinoTabController】", - "【tabBuilder】 : Construtor de Páginas 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ru_RU.json deleted file mode 100644 index 448d9d93a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "iOS каркас вкладок", - "info": "iOS-стиль каркаса макета страницы, который позволяет указать нижнюю панель навигации и основную страницу контента.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoTabScaffold", - "desc": [ - "【tabBar】 : Панель вкладок 【CupertinoTabBar】", - "【backgroundColor】 : Цвет фона 【Color】", - "【controller】 : Контроллер 【CupertinoTabController】", - "【tabBuilder】 : Конструктор страницы 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_zh-CN.json deleted file mode 100644 index 3f8ee2fff..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "iOS页签脚手架", - "info": "iOS风格的页面布局脚手架结构,可指定最底部的导航切换栏可主体内容页。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabScaffold基本用法", - "desc": [ - "【tabBar】 : 页签条 【CupertinoTabBar】", - "【backgroundColor】 : 背景色 【Color】", - "【controller】 : 控制器 【CupertinoTabController】", - "【tabBuilder】 : 页面构造器 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/node1_base.dart deleted file mode 100644 index 8092538f4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/node1_base.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoTabScaffold extends StatefulWidget { - const CustomCupertinoTabScaffold({Key? key}) : super(key: key); - - @override - _CustomCupertinoTabScaffoldState createState() => - _CustomCupertinoTabScaffoldState(); -} - -class _CustomCupertinoTabScaffoldState - extends State { - int _position = 0; - final Map iconsMap = { - //底栏图标 - "图鉴": Icons.home, "动态": Icons.toys, - "喜欢": Icons.favorite, "手册": Icons.class_, - "我的": Icons.account_circle, - }; - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height - 300, - child: CupertinoTabScaffold( - backgroundColor: Colors.grey.withAlpha(11), - tabBar: _buildTabBar(), - tabBuilder: (_, index) => _buildContent(index)), - ); - } - - CupertinoTabBar _buildTabBar() => CupertinoTabBar( - currentIndex: _position, - onTap: (value) => setState(() => _position = value), - items: iconsMap.keys - .map((e) => BottomNavigationBarItem( - icon: Icon( - iconsMap[e], - ), - label: e, - )) - .toList(), - activeColor: Colors.blue, - inactiveColor: const Color(0xff333333), - backgroundColor: const Color(0xfff1f1f1), - iconSize: 25.0, - ); - - _buildContent(int index) => Container( - alignment: Alignment.center, - child: Text(iconsMap.keys.toList()[index]), - ); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_de_DE.json deleted file mode 100644 index d3da3a862..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Cupertino-Seite", - "info": "Kann wie MaterialApp einen Navigationsstapel verwalten. Routen werden über routes und onGenerateRoute erstellt, und die Navigation kann über navigatorObservers überwacht werden.", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoTabView", - "desc": [ - "【builder】: Hauptseitenkonstruktor 【WidgetBuilder】", - "【navigatorObservers】: Routenbeobachter 【List】", - "【routes】: Routenzuordnung 【Map】", - "【onGenerateRoute】: Routenfabrik 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_en_US.json deleted file mode 100644 index 821498eba..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Cupertino Page", - "info": "Can maintain a routing stack like MaterialApp. Build routes through routes and onGenerateRoute, and listen to routes through navigatorObservers.", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoTabView", - "desc": [ - "【builder】 : Homepage builder 【WidgetBuilder】", - "【navigatorObservers】 : Route observers 【List】", - "【routes】 : Route mapping 【Map】", - "【onGenerateRoute】 : Route factory 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_es_ES.json deleted file mode 100644 index 21f797ff8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Página de Cupertino", - "info": "Puede mantener una pila de rutas como MaterialApp. Construye rutas a través de routes y onGenerateRoute, y puede escuchar rutas a través de navigatorObservers.", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoTabView", - "desc": [ - "【builder】 : Constructor de la página principal 【WidgetBuilder】", - "【navigatorObservers】 : Observador de rutas 【List】", - "【routes】 : Mapeo de rutas 【Map】", - "【onGenerateRoute】 : Fábrica de rutas 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_fr_FR.json deleted file mode 100644 index e6c226862..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Page Cupertino", - "info": "Peut maintenir une pile de routes comme MaterialApp. Construit les routes via routes et onGenerateRoute, et peut écouter les routes via navigatorObservers.", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoTabView", - "desc": [ - "【builder】 : Constructeur de la page d'accueil 【WidgetBuilder】", - "【navigatorObservers】 : Observateur de routes 【List】", - "【routes】 : Mappage des routes 【Map】", - "【onGenerateRoute】 : Usine de routes 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_it_IT.json deleted file mode 100644 index 33b5f2322..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Pagina Cupertino", - "info": "Può mantenere uno stack di routing come MaterialApp. Costruisce il routing tramite routes e onGenerateRoute, e può monitorare il routing tramite navigatorObservers.", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoTabView", - "desc": [ - "【builder】: Costruttore della pagina principale 【WidgetBuilder】", - "【navigatorObservers】: Osservatore di routing 【List】", - "【routes】: Mappatura del routing 【Map】", - "【onGenerateRoute】: Fabbrica di routing 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ja_JP.json deleted file mode 100644 index c47c93fd7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Cupertinoページ", - "info": "MaterialAppのようにルートスタックを維持できます。routes、onGenerateRouteを使用してルートを構築し、navigatorObserversでルートを監視できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabViewの基本使用", - "desc": [ - "【builder】 : ホームページビルダー 【WidgetBuilder】", - "【navigatorObservers】 : ルート監視者 【List】", - "【routes】 : ルートマッピング 【Map】", - "【onGenerateRoute】 : ルートファクトリ 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ko_KR.json deleted file mode 100644 index fd8f866aa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Cupertino 페이지", - "info": "MaterialApp과 같이 라우팅 스택을 유지할 수 있습니다. routes, onGenerateRoute를 통해 라우팅을 구성하고, navigatorObservers를 통해 라우팅을 모니터링할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabView 기본 사용법", - "desc": [ - "【builder】 : 홈페이지 빌더 【WidgetBuilder】", - "【navigatorObservers】 : 라우팅 리스너 【List】", - "【routes】 : 라우팅 매핑 【Map】", - "【onGenerateRoute】 : 라우팅 팩토리 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_pt_PT.json deleted file mode 100644 index 84eab5e5e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Página Cupertino", - "info": "Pode manter uma pilha de rotas como o MaterialApp. Constrói rotas através de routes e onGenerateRoute, e pode monitorar rotas com navigatorObservers.", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoTabView", - "desc": [ - "【builder】 : Construtor da página inicial 【WidgetBuilder】", - "【navigatorObservers】 : Observador de rotas 【List】", - "【routes】 : Mapeamento de rotas 【Map】", - "【onGenerateRoute】 : Fábrica de rotas 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ru_RU.json deleted file mode 100644 index 868182b68..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Cupertino страница", - "info": "Может поддерживать стек маршрутов, как MaterialApp. Маршруты строятся через routes и onGenerateRoute, можно отслеживать маршруты через navigatorObservers.", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoTabView", - "desc": [ - "【builder】 : Конструктор главной страницы 【WidgetBuilder】", - "【navigatorObservers】 : Наблюдатель маршрутов 【List】", - "【routes】 : Карта маршрутов 【Map】", - "【onGenerateRoute】 : Фабрика маршрутов 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_zh-CN.json deleted file mode 100644 index 927e90f0b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Cupertino页面", - "info": "可以像 MaterialApp 一样维护一个路由栈。通过 routes 、onGenerateRoute 来构建路由,可以通过 navigatorObservers 监听路由。", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabView基本使用", - "desc": [ - "【builder】 : 主页构造器 【WidgetBuilder】", - "【navigatorObservers】 : 路由监听器 【List】", - "【routes】 : 路由映射 【Map】", - "【onGenerateRoute】 : 路由工厂 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/node1_base.dart deleted file mode 100644 index 511a70d70..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/node1_base.dart +++ /dev/null @@ -1,103 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class CupertinoTabViewDemo extends StatelessWidget { - const CupertinoTabViewDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.all(10), - child: ElevatedButton( - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => const CupertinoTabViewPage()), - ); - }, - child: const Text("进入 CupertinoTabView 测试页"), - ), - ); - } -} - - -class CupertinoTabViewPage extends StatelessWidget { - const CupertinoTabViewPage({Key? key}) : super(key: key); - - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CupertinoTabView( - routes: { - '/': (context) => _HomePage(), - '/test_detail': (context) => const DetailPage(), - }, - ), - ); - } -} - -class DetailPage extends StatelessWidget { - const DetailPage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return CupertinoPageScaffold( - navigationBar: const CupertinoNavigationBar( - middle: Text('我是详情页'), - ), - child: Center( - child: Container( - width: 200, - height: 200, - color: Colors.blue, - ), - ), - ); - } -} - -class _HomePage extends StatelessWidget { - - final String info = "CupertinoTabView 可以像 MaterialApp 一样维护一个路由栈。" - "通过 routes 、onGenerateRoute 来构建路由,可以通过 navigatorObservers 监听路由。" - "在这个路由栈中可以进行指定名称跳转,如下通过 /test_detail 跳到详情页。"; - - @override - Widget build(BuildContext context) { - return CupertinoPageScaffold( - navigationBar: const CupertinoNavigationBar( - middle: Text('我是主页'), - ), - child: Center(child: Column( - - children: [ - const Spacer(), - Material(child: Padding( - padding: const EdgeInsets.only(left:18.0,right: 18,bottom: 20), - child: Text(info), - )), - CupertinoButton( - padding: const EdgeInsets.only(left: 10,right: 10), - color: Colors.blue, - onPressed: () { - Navigator.pushNamed( - context, "/test_detail" - ); - }, - child: const Text("进入详情页"), - ), - const Spacer(), - ], - )), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_de_DE.json deleted file mode 100644 index 4a8ec787d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_de_DE.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "iOS-Stil Eingabefeld", - "info": "Cupertino-stilisiertes Eingabefeld, ähnliche Eigenschaften wie TextField, kann Controller, Textstil, Dekorationslinien, Zeilenbegrenzung, Cursor-Stil usw. angeben. Empfängt Ereignisse wie Eingabeänderungen und Eingabeabschluss.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoTextField", - "desc": [ - "【placeholder】 : Hinweistext 【String】", - "【showCursor】 : Cursor anzeigen 【bool】", - "【minLines】 : Mindestanzahl von Zeilen 【int】", - "【maxLines】 : Maximale Anzahl von Zeilen 【int】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】", - "【onChanged】 : Änderungsüberwachung 【ValueChanged】", - "【onTap】: Klicküberwachung 【GestureTapCallback】", - "【onSubmitted】: Übermittlungsüberwachung 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "Häufig verwendete Stileigenschaften von CupertinoTextField", - "desc": [ - "【style】 : Eingabetextstil 【TextStyle】", - "【prefix】: Präfix-Komponente 【Widget】", - "【prefixMode】: Präfix-Modus 【OverlayVisibilityMode】", - "【suffix】: Suffix-Komponente 【Widget】", - "【suffixMode】: Suffix-Modus 【OverlayVisibilityMode】", - "【cursorColor】: Cursor-Farbe 【Color】", - "【cursorWidth】: Cursor-Breite 【double】", - "【cursorRadius】: Cursor-Radius 【Radius】", - "【readOnly】: Nur lesen 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_en_US.json deleted file mode 100644 index 68079c3d0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_en_US.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "iOS Style Input Box", - "info": "Cupertino style input box, properties are similar to TextField, can specify controller, text style, decoration line, line limit, cursor style, etc. Receives input change, input completion and other events.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoTextField", - "desc": [ - "【placeholder】 : Hint text 【String】", - "【showCursor】 : Whether to show cursor 【bool】", - "【minLines】 : Minimum number of lines 【int】", - "【maxLines】 : Maximum number of lines 【int】", - "【padding】 : Padding 【EdgeInsetsGeometry】", - "【onChanged】 : Change listener 【ValueChanged】", - "【onTap】: Tap listener 【GestureTapCallback】", - "【onSubmitted】: Submit listener 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "Common Style Properties of CupertinoTextField", - "desc": [ - "【style】 : Input text style 【TextStyle】", - "【prefix】: Prefix component 【Widget】", - "【prefixMode】: Prefix mode 【OverlayVisibilityMode】", - "【suffix】: Suffix component 【Widget】", - "【suffixMode】: Suffix mode 【OverlayVisibilityMode】", - "【cursorColor】: Cursor color 【Color】", - "【cursorWidth】: Cursor width 【double】", - "【cursorRadius】: Cursor radius 【Radius】", - "【readOnly】: Whether read-only 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_es_ES.json deleted file mode 100644 index 5e587a02f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_es_ES.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "Campo de texto estilo iOS", - "info": "Campo de texto de estilo Cupertino, con propiedades similares a TextField, se puede especificar controlador, estilo de texto, línea de decoración, límite de líneas, estilo de cursor, etc. Recibe eventos de cambio de entrada, finalización de entrada, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoTextField", - "desc": [ - "【placeholder】 : Texto de sugerencia 【String】", - "【showCursor】 : Mostrar cursor 【bool】", - "【minLines】 : Número mínimo de líneas 【int】", - "【maxLines】 : Número máximo de líneas 【int】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】", - "【onChanged】 : Escucha de cambios 【ValueChanged】", - "【onTap】: Escucha de clics 【GestureTapCallback】", - "【onSubmitted】: Escucha de envío 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "Propiedades de estilo comunes de CupertinoTextField", - "desc": [ - "【style】 : Estilo del texto de entrada 【TextStyle】", - "【prefix】: Componente de prefijo 【Widget】", - "【prefixMode】: Modo de prefijo 【OverlayVisibilityMode】", - "【suffix】: Componente de sufijo 【Widget】", - "【suffixMode】: Modo de sufijo 【OverlayVisibilityMode】", - "【cursorColor】: Color del cursor 【Color】", - "【cursorWidth】: Ancho del cursor 【double】", - "【cursorRadius】: Radio del cursor 【Radius】", - "【readOnly】: Solo lectura 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_fr_FR.json deleted file mode 100644 index 69274be14..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_fr_FR.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "Champ de saisie de style iOS", - "info": "Champ de saisie de style Cupertino, les propriétés sont similaires à TextField, peut spécifier un contrôleur, le style du texte, la décoration, la limite de lignes, le style du curseur, etc. Reçoit des événements tels que les changements d'entrée, la fin de la saisie, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoTextField", - "desc": [ - "【placeholder】 : Texte d'indication 【String】", - "【showCursor】 : Afficher le curseur 【bool】", - "【minLines】 : Nombre minimum de lignes 【int】", - "【maxLines】 : Nombre maximum de lignes 【int】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】", - "【onChanged】 : Écouteur de changement 【ValueChanged】", - "【onTap】: Écouteur de clic 【GestureTapCallback】", - "【onSubmitted】: Écouteur de soumission 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "Propriétés de style courantes de CupertinoTextField", - "desc": [ - "【style】 : Style du texte saisi 【TextStyle】", - "【prefix】: Composant de préfixe 【Widget】", - "【prefixMode】: Mode de préfixe 【OverlayVisibilityMode】", - "【suffix】: Composant de suffixe 【Widget】", - "【suffixMode】: Mode de suffixe 【OverlayVisibilityMode】", - "【cursorColor】: Couleur du curseur 【Color】", - "【cursorWidth】: Largeur du curseur 【double】", - "【cursorRadius】: Rayon du curseur 【Radius】", - "【readOnly】: Lecture seule 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_it_IT.json deleted file mode 100644 index b6ea2672a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_it_IT.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "Campo di testo in stile iOS", - "info": "Campo di testo in stile Cupertino, le proprietà sono simili a TextField, è possibile specificare il controller, lo stile del testo, la decorazione, il limite di righe, lo stile del cursore, ecc. Riceve eventi come cambiamenti di input, completamento dell'input, ecc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoTextField", - "desc": [ - "【placeholder】 : Testo suggerito 【String】", - "【showCursor】 : Mostra il cursore 【bool】", - "【minLines】 : Numero minimo di righe 【int】", - "【maxLines】 : Numero massimo di righe 【int】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】", - "【onChanged】 : Ascolta i cambiamenti 【ValueChanged】", - "【onTap】: Ascolta i clic 【GestureTapCallback】", - "【onSubmitted】: Ascolta l'invio 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "Proprietà di stile comuni di CupertinoTextField", - "desc": [ - "【style】 : Stile del testo di input 【TextStyle】", - "【prefix】: Componente prefisso 【Widget】", - "【prefixMode】: Modalità prefisso 【OverlayVisibilityMode】", - "【suffix】: Componente suffisso 【Widget】", - "【suffixMode】: Modalità suffisso 【OverlayVisibilityMode】", - "【cursorColor】: Colore del cursore 【Color】", - "【cursorWidth】: Larghezza del cursore 【double】", - "【cursorRadius】: Raggio del cursore 【Radius】", - "【readOnly】: Solo lettura 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ja_JP.json deleted file mode 100644 index f465bfe96..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ja_JP.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "iOSスタイルの入力ボックス", - "info": "Cupertinoスタイルの入力ボックス。プロパティはTextFieldと類似しており、コントローラー、テキストスタイル、デコレーションライン、行数制限、カーソルスタイルなどを指定できます。入力変更や入力完了などのイベントを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTextFieldの基本使用", - "desc": [ - "【placeholder】 : ヒントテキスト 【String】", - "【showCursor】 : カーソルを表示するかどうか 【bool】", - "【minLines】 : 最小行数 【int】", - "【maxLines】 : 最大行数 【int】", - "【padding】 : パディング 【EdgeInsetsGeometry】", - "【onChanged】 : 変更リスナー 【ValueChanged】", - "【onTap】: クリックリスナー 【GestureTapCallback】", - "【onSubmitted】: 送信リスナー 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "CupertinoTextFieldの一般的なスタイルプロパティ", - "desc": [ - "【style】 : 入力テキストスタイル 【TextStyle】", - "【prefix】: プレフィックスコンポーネント 【Widget】", - "【prefixMode】: プレフィックスモード 【OverlayVisibilityMode】", - "【suffix】: サフィックスコンポーネント 【Widget】", - "【suffixMode】: サフィックスモード 【OverlayVisibilityMode】", - "【cursorColor】: カーソルカラー 【Color】", - "【cursorWidth】: カーソル幅 【double】", - "【cursorRadius】: カーソルの角丸 【Radius】", - "【readOnly】: 読み取り専用かどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ko_KR.json deleted file mode 100644 index 0b2a5e1e6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ko_KR.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "iOS 스타일 입력 필드", - "info": "Cupertino 스타일의 입력 필드, 속성은 TextField와 유사하며, 컨트롤러, 텍스트 스타일, 장식선, 줄 수 제한, 커서 스타일 등을 지정할 수 있습니다. 입력 변화, 입력 완료 등의 이벤트를 수신합니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTextField 기본 사용", - "desc": [ - "【placeholder】 : 힌트 텍스트 【String】", - "【showCursor】 : 커서 표시 여부 【bool】", - "【minLines】 : 최소 줄 수 【int】", - "【maxLines】 : 최대 줄 수 【int】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】", - "【onChanged】 : 변경 감지 【ValueChanged】", - "【onTap】: 클릭 감지 【GestureTapCallback】", - "【onSubmitted】: 제출 감지 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "CupertinoTextField 일반 스타일 속성", - "desc": [ - "【style】 : 입력 텍스트 스타일 【TextStyle】", - "【prefix】: 접두사 컴포넌트 【Widget】", - "【prefixMode】: 접두사 모드 【OverlayVisibilityMode】", - "【suffix】: 접미사 컴포넌트 【Widget】", - "【suffixMode】: 접미사 모드 【OverlayVisibilityMode】", - "【cursorColor】: 커서 색상 【Color】", - "【cursorWidth】: 커서 너비 【double】", - "【cursorRadius】: 커서 모서리 반경 【Radius】", - "【readOnly】: 읽기 전용 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_pt_PT.json deleted file mode 100644 index aea2caf0c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_pt_PT.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "Campo de entrada estilo iOS", - "info": "Campo de entrada no estilo Cupertino, com propriedades semelhantes ao TextField, pode especificar controlador, estilo de texto, decoração de linha, limite de linhas, estilo do cursor, etc. Recebe eventos de mudança de entrada, conclusão de entrada, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoTextField", - "desc": [ - "【placeholder】 : Texto de dica 【String】", - "【showCursor】 : Mostrar cursor 【bool】", - "【minLines】 : Número mínimo de linhas 【int】", - "【maxLines】 : Número máximo de linhas 【int】", - "【padding】 : Preenchimento interno 【EdgeInsetsGeometry】", - "【onChanged】 : Monitoramento de mudanças 【ValueChanged】", - "【onTap】: Monitoramento de clique 【GestureTapCallback】", - "【onSubmitted】: Monitoramento de submissão 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "Propriedades de estilo comuns do CupertinoTextField", - "desc": [ - "【style】 : Estilo do texto de entrada 【TextStyle】", - "【prefix】: Componente de prefixo 【Widget】", - "【prefixMode】: Modo de prefixo 【OverlayVisibilityMode】", - "【suffix】: Componente de sufixo 【Widget】", - "【suffixMode】: Modo de sufixo 【OverlayVisibilityMode】", - "【cursorColor】: Cor do cursor 【Color】", - "【cursorWidth】: Largura do cursor 【double】", - "【cursorRadius】: Raio do cursor 【Radius】", - "【readOnly】: Somente leitura 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ru_RU.json deleted file mode 100644 index 4e5937626..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ru_RU.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "Текстовое поле в стиле iOS", - "info": "Текстовое поле в стиле Cupertino, свойства аналогичны TextField, можно указать контроллер, стиль текста, декоративные линии, ограничение на количество строк, стиль курсора и т.д. Получает события изменения ввода, завершения ввода и другие.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoTextField", - "desc": [ - "【placeholder】 : Подсказка 【String】", - "【showCursor】 : Показывать ли курсор 【bool】", - "【minLines】 : Минимальное количество строк 【int】", - "【maxLines】 : Максимальное количество строк 【int】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】", - "【onChanged】 : Слушатель изменений 【ValueChanged】", - "【onTap】: Слушатель нажатия 【GestureTapCallback】", - "【onSubmitted】: Слушатель отправки 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "Общие стилевые свойства CupertinoTextField", - "desc": [ - "【style】 : Стиль текста ввода 【TextStyle】", - "【prefix】: Префиксный компонент 【Widget】", - "【prefixMode】: Режим префикса 【OverlayVisibilityMode】", - "【suffix】: Суффиксный компонент 【Widget】", - "【suffixMode】: Режим суффикса 【OverlayVisibilityMode】", - "【cursorColor】: Цвет курсора 【Color】", - "【cursorWidth】: Ширина курсора 【double】", - "【cursorRadius】: Радиус закругления курсора 【Radius】", - "【readOnly】: Только для чтения 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_zh-CN.json deleted file mode 100644 index a7141373a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_zh-CN.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "iOS风格输入框", - "info": "Cupertino风格的输入框,属性和TextField类似,可指定控制器、文字样式、装饰线、行数限制、游标样式等。接收输入变化、完成输入等事件。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTextField基础使用", - "desc": [ - "【placeholder】 : 提示文字 【String】", - "【showCursor】 : 是否显示游标 【bool】", - "【minLines】 : 最小行数 【int】", - "【maxLines】 : 最大行数 【int】", - "【padding】 : 内边距 【EdgeInsetsGeometry】", - "【onChanged】 : 变化监听 【ValueChanged】", - "【onTap】: 点击监听 【GestureTapCallback】", - "【onSubmitted】: 提交监听 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "CupertinoTextField常用样式属性", - "desc": [ - "【style】 : 输入文字样式 【TextStyle】", - "【prefix】: 前缀组件 【Widget】", - "【prefixMode】: 前缀模式 【OverlayVisibilityMode】", - "【suffix】: 后缀组件 【Widget】", - "【suffixMode】: 后缀模式 【OverlayVisibilityMode】", - "【cursorColor】: 游标颜色 【Color】", - "【cursorWidth】: 游标宽度 【double】", - "【cursorRadius】: 游标圆角 【Radius】", - "【readOnly】: 是否只读 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/node1_base.dart deleted file mode 100644 index 085ec04e2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/node1_base.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - -class CupertinoTextFieldDemo extends StatefulWidget { - const CupertinoTextFieldDemo({Key? key}) : super(key: key); - - @override - _CupertinoTextFieldDemoState createState() => _CupertinoTextFieldDemoState(); -} - -class _CupertinoTextFieldDemoState extends State { - String _value = ''; - Color _color =Colors.black; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Text('输入了:$_value',style: TextStyle(color: _color),), - CupertinoTextField( - placeholder: 'Input Name', - showCursor: true, - minLines: 1, - maxLines: 4, - padding: const EdgeInsets.all(8), - onChanged: _onChanged, - onTap: _onTap, - onSubmitted: _onSubmitted, - ), - ], - ); - } - - void _onChanged(String value) { - setState(() { - _value = value; - }); - } - - void _onTap() { - print('----_onTap----'); - setState(() { - _color=Colors.blue; - }); - } - - void _onSubmitted(String value) { - print('----_onSubmitted:$value}----'); - setState(() { - _color=Colors.black; - }); - } - -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/node2_style.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/node2_style.dart deleted file mode 100644 index d1fb7c1d4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/node2_style.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - -class CupertinoTextFieldStyle extends StatelessWidget { - const CupertinoTextFieldStyle({Key? key}) : super(key: key); - - - @override - Widget build(BuildContext context) { - return const CupertinoTextField( - style: TextStyle(color: Colors.blue), - prefix: Icon(CupertinoIcons.add), - prefixMode: OverlayVisibilityMode.notEditing, - suffix: Icon(CupertinoIcons.clear), - suffixMode: OverlayVisibilityMode.editing, - cursorColor: Colors.purple, - cursorWidth: 4, - cursorRadius: Radius.circular(2), - readOnly: false, - placeholder: '输入用户名', - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_de_DE.json deleted file mode 100644 index c475d3a13..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "iOS-Zeitauswahl", - "info": "Hochwertiger Zeitauswahl-Schieberegler, der den ausgewählten Typ, die Anfangszeit, die Hintergrundfarbe usw. angeben kann und Zeitauswahlereignisse empfängt.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoTimerPicker", - "desc": [ - "【initialTimerDuration】 : Anfangszeit 【Duration】", - "【minuteInterval】 : Minutenintervall 【double】", - "【secondInterval】 : Sekundenintervall 【double】", - "【alignment】 : Ausrichtung 【AlignmentGeometry】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【mode】 : Modus*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_en_US.json deleted file mode 100644 index 820b4f2fa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "iOS Time Picker", - "info": "A high-end rolling time picker that allows you to specify the type of selection, initial time, background color, etc., and receives time selection events.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoTimerPicker", - "desc": [ - "【initialTimerDuration】: Initial time 【Duration】", - "【minuteInterval】: Minute interval 【double】", - "【secondInterval】: Second interval 【double】", - "【alignment】: Alignment 【AlignmentGeometry】", - "【backgroundColor】: Background color 【Color】", - "【mode】: Mode*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_es_ES.json deleted file mode 100644 index 7c6a97eaf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "Selector de tiempo de iOS", - "info": "Selector de tiempo de desplazamiento de alta gama, que puede especificar el tipo de selección, la hora inicial, el color de fondo, etc., y recibe eventos de selección de tiempo.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoTimerPicker", - "desc": [ - "【initialTimerDuration】 : Hora inicial 【Duration】", - "【minuteInterval】 : Intervalo de minutos 【double】", - "【secondInterval】 : Intervalo de segundos 【double】", - "【alignment】 : Alineación 【AlignmentGeometry】", - "【backgroundColor】 : Color de fondo 【Color】", - "【mode】 : Modo*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_fr_FR.json deleted file mode 100644 index 368b68945..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "Sélecteur de temps iOS", - "info": "Sélecteur de temps haut de gamme avec défilement, permet de spécifier le type de sélection, l'heure initiale, la couleur de fond, etc., et reçoit les événements de sélection de temps.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoTimerPicker", - "desc": [ - "【initialTimerDuration】 : Durée initiale 【Duration】", - "【minuteInterval】 : Intervalle de minutes 【double】", - "【secondInterval】 : Intervalle de secondes 【double】", - "【alignment】 : Alignement 【AlignmentGeometry】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【mode】 : Mode*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_it_IT.json deleted file mode 100644 index 517390259..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "Selettore di tempo iOS", - "info": "Un selettore di tempo di scorrimento di alta gamma, che consente di specificare il tipo di selezione, l'ora iniziale, il colore di sfondo, ecc., e riceve l'evento di selezione del tempo.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoTimerPicker", - "desc": [ - "【initialTimerDuration】 : Ora iniziale 【Duration】", - "【minuteInterval】 : Intervallo di minuti 【double】", - "【secondInterval】 : Intervallo di secondi 【double】", - "【alignment】 : Allineamento 【AlignmentGeometry】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【mode】 : Modalità*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ja_JP.json deleted file mode 100644 index 9ff54547a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "iOSタイムピッカー", - "info": "高級感のあるスクロールタイムピッカーで、選択するタイプ、初期時間、背景色などを指定でき、時間選択イベントを受け取ります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTimerPickerの基本使用", - "desc": [ - "【initialTimerDuration】 : 初期時間 【Duration】", - "【minuteInterval】 : 分間隔数 【double】", - "【secondInterval】 : 秒間隔数 【double】", - "【alignment】 : 配置方法 【AlignmentGeometry】", - "【backgroundColor】 : 背景色 【Color】", - "【mode】 : モード*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ko_KR.json deleted file mode 100644 index 391b966db..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "iOS 시간 선택기", - "info": "고급스러운 스크롤 시간 선택기로, 선택 유형, 초기 시간, 배경색 등을 지정할 수 있으며, 시간 선택 이벤트를 수신합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTimerPicker 기본 사용법", - "desc": [ - "【initialTimerDuration】 : 초기 시간 【Duration】", - "【minuteInterval】 : 분 간격 수 【double】", - "【secondInterval】 : 초 간격 수 【double】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】", - "【backgroundColor】 : 배경색 【Color】", - "【mode】 : 모드*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_pt_PT.json deleted file mode 100644 index cb65335fd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "Seletor de Tempo iOS", - "info": "Um seletor de tempo sofisticado com rolagem, que permite especificar o tipo de seleção, hora inicial, cor de fundo, etc., e recebe eventos de seleção de tempo.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoTimerPicker", - "desc": [ - "【initialTimerDuration】 : Hora inicial 【Duration】", - "【minuteInterval】 : Intervalo de minutos 【double】", - "【secondInterval】 : Intervalo de segundos 【double】", - "【alignment】 : Alinhamento 【AlignmentGeometry】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【mode】 : Modo*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ru_RU.json deleted file mode 100644 index 9c784f5f1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "iOS-таймер выбора времени", - "info": "Стильный скроллинг-таймер выбора времени, позволяющий указать тип выбора, начальное время, цвет фона и т.д., а также получать события выбора времени.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoTimerPicker", - "desc": [ - "【initialTimerDuration】 : Начальное время 【Duration】", - "【minuteInterval】 : Интервал минут 【double】", - "【secondInterval】 : Интервал секунд 【double】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】", - "【backgroundColor】 : Цвет фона 【Color】", - "【mode】 : Режим*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_zh-CN.json deleted file mode 100644 index 68f83bcad..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "iOS时间选择器", - "info": "高大上的滑滚时间选择器,可指定选择的类型、初始时间、背景色等,接收时间选中事件。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTimerPicker基本使用", - "desc": [ - "【initialTimerDuration】 : 初始时间 【Duration】", - "【minuteInterval】 : 分钟间隔数 【double】", - "【secondInterval】 : 秒间隔数 【double】", - "【alignment】 : 对齐方式 【AlignmentGeometry】", - "【backgroundColor】 : 背景色 【Color】", - "【mode】 : 模式*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/node1_base.dart deleted file mode 100644 index 7c159ab8b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoTimerPicker extends StatefulWidget { - const CustomCupertinoTimerPicker({Key? key}) : super(key: key); - - @override - _CustomCupertinoTimerPickerState createState() => - _CustomCupertinoTimerPickerState(); -} - -class _CustomCupertinoTimerPickerState - extends State { - Duration _date = const Duration(seconds: 30); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Text( - '当前时间:${_date.toString()}', - style: const TextStyle(color: Colors.grey, fontSize: 16), - ), - _buildInfoTitle('CupertinoTimerPickerMode.hms'), - buildPicker(CupertinoTimerPickerMode.hms), - _buildInfoTitle('CupertinoTimerPickerMode.hm'), - buildPicker(CupertinoTimerPickerMode.hm), - _buildInfoTitle('CupertinoTimerPickerMode.ms'), - buildPicker(CupertinoTimerPickerMode.ms), - ], - ); - } - - Widget _buildInfoTitle(info) { - return Padding( - padding: const EdgeInsets.only(left: 20, top: 20, bottom: 5), - child: Text( - info, - style: const TextStyle( - color: Colors.blue, fontSize: 16, fontWeight: FontWeight.bold), - ), - ); - } - - Widget buildPicker(CupertinoTimerPickerMode mode) { - return Container( - margin: const EdgeInsets.all(10), - height: 150, - child: CupertinoTimerPicker( - mode: mode, - initialTimerDuration: const Duration(seconds: 30), - onTimerDurationChanged: (date) { - print(date); - setState(() => _date = date); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_de_DE.json deleted file mode 100644 index 316f60470..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_de_DE.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "Datumsbereich", - "info": "Material-stil Datumsbereichsauswahl, unterstützt Kalenderauswahl und Eingabeauswahl.", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DateRangePickerDialog grundlegende Verwendung", - "desc": [ - "【firstDate】 : Frühestes Datum 【DateTime】", - "【lastDate】 : Spätestes Datum 【DateTime】", - "【initialDateRange】 : Anfangsbereich 【DateTimeRange?】", - "【saveText】 : Speichern Text 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "DateRangePickerDialog anpassen", - "desc": [ - "Ändern Sie den Quellcode von DateRangePickerDialog, sodass Monatseinträge numerische Hintergründe anzeigen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_en_US.json deleted file mode 100644 index 0107b9c9d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_en_US.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "Date Range", - "info": "Material style date range picker, supports calendar selection and input selection.", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DateRangePickerDialog", - "desc": [ - "【firstDate】 : Earliest date 【DateTime】", - "【lastDate】 : Latest date 【DateTime】", - "【initialDateRange】 : Initial range 【DateTimeRange?】", - "【saveText】 : Save text 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Customize DateRangePickerDialog", - "desc": [ - "Modify the source code of DateRangePickerDialog to display a numerical background for month entries." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_es_ES.json deleted file mode 100644 index fb92b40b6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_es_ES.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "Selector de rango de fechas", - "info": "Selector de rango de fechas al estilo Material, compatible con selección de calendario y selección de entrada.", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DateRangePickerDialog", - "desc": [ - "【firstDate】 : Fecha más temprana 【DateTime】", - "【lastDate】 : Fecha más tardía 【DateTime】", - "【initialDateRange】 : Rango inicial 【DateTimeRange?】", - "【saveText】 : Texto de guardar 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Modificación de DateRangePickerDialog", - "desc": [ - "Modifica el código fuente de DateRangePickerDialog para que los elementos del mes muestren un fondo numérico." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_fr_FR.json deleted file mode 100644 index 0ef412655..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_fr_FR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "Plage de dates", - "info": "Sélecteur de plage de dates de style Material, prenant en charge la sélection par calendrier et par saisie.", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DateRangePickerDialog", - "desc": [ - "【firstDate】 : Date la plus ancienne 【DateTime】", - "【lastDate】 : Date la plus récente 【DateTime】", - "【initialDateRange】 : Plage initiale 【DateTimeRange?】", - "【saveText】 : Texte de sauvegarde 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Personnalisation de DateRangePickerDialog", - "desc": [ - "Modifiez le code source de DateRangePickerDialog pour afficher un arrière-plan numérique sur les entrées de mois." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_it_IT.json deleted file mode 100644 index 3aa6595d3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_it_IT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "Intervallo di date", - "info": "Selettore di intervalli di date in stile Material, supporta la selezione tramite calendario e input.", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di DateRangePickerDialog", - "desc": [ - "【firstDate】 : Data più antica 【DateTime】", - "【lastDate】 : Data più recente 【DateTime】", - "【initialDateRange】 : Intervallo iniziale 【DateTimeRange?】", - "【saveText】 : Testo di salvataggio 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Modifica di DateRangePickerDialog", - "desc": [ - "Modifica il codice sorgente di DateRangePickerDialog per mostrare uno sfondo numerico per le voci dei mesi." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ja_JP.json deleted file mode 100644 index caf3a1d32..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ja_JP.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "日付範囲", - "info": "Materialスタイルの日付範囲ピッカーで、カレンダー選択と入力選択をサポートしています。", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DateRangePickerDialog 基本使用", - "desc": [ - "【firstDate】 : 最も早い日付 【DateTime】", - "【lastDate】 : 最も遅い日付 【DateTime】", - "【initialDateRange】 : 初期範囲 【DateTimeRange?】", - "【saveText】 : 保存テキスト 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "DateRangePickerDialog のカスタマイズ", - "desc": [ - "DateRangePickerDialog のソースコードを変更して、月の項目に数値の背景を表示するようにします。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ko_KR.json deleted file mode 100644 index 0a6e2d476..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ko_KR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "날짜 범위", - "info": "Material 스타일의 날짜 범위 선택기로, 캘린더 선택 및 입력 선택을 지원합니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DateRangePickerDialog 기본 사용", - "desc": [ - "【firstDate】 : 가장 이른 날짜 【DateTime】", - "【lastDate】 : 가장 늦은 날짜 【DateTime】", - "【initialDateRange】 : 초기 범위 【DateTimeRange?】", - "【saveText】 : 저장 텍스트 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "DateRangePickerDialog 커스터마이징", - "desc": [ - "DateRangePickerDialog 소스 코드를 수정하여 월 항목에 숫자 배경을 표시합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_pt_PT.json deleted file mode 100644 index 370c61c07..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_pt_PT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "Intervalo de Datas", - "info": "Seletor de intervalo de datas no estilo Material, suporta seleção de calendário e seleção de entrada.", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DateRangePickerDialog", - "desc": [ - "【firstDate】 : Data mais antiga 【DateTime】", - "【lastDate】 : Data mais recente 【DateTime】", - "【initialDateRange】 : Intervalo inicial 【DateTimeRange?】", - "【saveText】 : Texto de salvamento 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Modificar o DateRangePickerDialog", - "desc": [ - "Modifique o código-fonte do DateRangePickerDialog para exibir o fundo numérico nos itens do mês." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ru_RU.json deleted file mode 100644 index 81ddd3820..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ru_RU.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "Диапазон дат", - "info": "Селектор диапазона дат в стиле Material, поддерживает выбор через календарь и ввод.", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DateRangePickerDialog", - "desc": [ - "【firstDate】 : Самая ранняя дата 【DateTime】", - "【lastDate】 : Самая поздняя дата 【DateTime】", - "【initialDateRange】 : Начальный диапазон 【DateTimeRange?】", - "【saveText】 : Текст сохранения 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Модификация DateRangePickerDialog", - "desc": [ - "Изменение исходного кода DateRangePickerDialog для отображения числового фона для элементов месяца." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_zh-CN.json deleted file mode 100644 index 369c54cbd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_zh-CN.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "日期范围", - "info": "Material 风格的日期范围选择器,支持日历选择和输入选择。", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DateRangePickerDialog 基本使用", - "desc": [ - "【firstDate】 : 最早日期 【DateTime】", - "【lastDate】 : 最晚日期 【DateTime】", - "【initialDateRange】 : 初始范围 【DateTimeRange?】", - "【saveText】 : 保存文字 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "魔改 DateRangePickerDialog", - "desc": [ - "修改 DateRangePickerDialog 源码,使得月份条目显示数值背景。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/node1_base.dart deleted file mode 100644 index 7ebc070e7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/node1_base.dart +++ /dev/null @@ -1,68 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class DateRangePickerDialogDemo extends StatefulWidget { - const DateRangePickerDialogDemo({Key? key}) : super(key: key); - - @override - _DateRangePickerDialogDemoState createState() => - _DateRangePickerDialogDemoState(); -} - -class _DateRangePickerDialogDemoState - extends State { - String _dateRange = ''; - - // 需要 intl 包 - final DateFormat format = DateFormat('yyyy-MM-dd'); - - @override - Widget build(BuildContext context) { - String info = _dateRange.isEmpty ? '选择日期范围' : _dateRange; - - return Center( - child: Wrap( - alignment: WrapAlignment.center, - direction: Axis.vertical, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - ElevatedButton( - onPressed: _show, - child: const Text('选择'), - ), - Text( - info, - style: const TextStyle(color: Colors.grey), - ) - ], - ), - ); - } - - void _show() async { - DateTime firstDate = DateTime(2021, 1, 1); - DateTime lastDate = DateTime.now(); - DateTime start = lastDate.add(const Duration(days: -8)); - DateTime end = lastDate.add(const Duration(days: -2)); - DateTimeRange? range = await showDateRangePicker( - context: context, - firstDate: firstDate, - lastDate: lastDate, - initialDateRange: DateTimeRange( - start: start, - end: end, - ), - saveText: "确定", - ); - if (range != null) { - setState(() { - _dateRange = - "${format.format(range.start)} ~ ${format.format(range.end)}"; - }); - } - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/node2_diy.dart b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/node2_diy.dart deleted file mode 100644 index ddd5be205..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/node2_diy.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; -import 'toly_date_picker.dart' as toly; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class DiyDateRangePickerDialogDemo extends StatefulWidget { - const DiyDateRangePickerDialogDemo({Key? key}) : super(key: key); - - @override - _DiyDateRangePickerDialogDemoState createState() => - _DiyDateRangePickerDialogDemoState(); -} - -class _DiyDateRangePickerDialogDemoState - extends State { - String _dateRange = ''; - - // 需要 intl 包 - final DateFormat format = DateFormat('yyyy-MM-dd'); - - @override - Widget build(BuildContext context) { - String info = _dateRange.isEmpty ? '选择日期范围' : _dateRange; - - return Center( - child: Wrap( - alignment: WrapAlignment.center, - direction: Axis.vertical, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - ElevatedButton( - onPressed: _show, - child: const Text('选择'), - ), - Text( - info, - style: const TextStyle(color: Colors.grey), - ) - ], - ), - ); - } - - void _show() async { - DateTime firstDate = DateTime(2021, 1, 1); - DateTime lastDate = DateTime.now(); - DateTime start = lastDate.add(const Duration(days: -8)); - DateTime end = lastDate.add(const Duration(days: -2)); - DateTimeRange? range = await toly.showDateRangePicker( - context: context, - firstDate: firstDate, - lastDate: lastDate, - initialDateRange: DateTimeRange( - start: start, - end: end, - ), - saveText: "确定", - ); - if (range != null) { - setState(() { - _dateRange = - "${format.format(range.start)} ~ ${format.format(range.end)}"; - }); - } - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/toly_date_picker.dart b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/toly_date_picker.dart deleted file mode 100644 index e2c3a9f88..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/toly_date_picker.dart +++ /dev/null @@ -1,3041 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:math' as math; - -import 'package:flutter/gestures.dart' show DragStartBehavior; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter/widgets.dart'; - -const Size _calendarPortraitDialogSize = Size(330.0, 518.0); -const Size _calendarLandscapeDialogSize = Size(496.0, 346.0); -const Size _inputPortraitDialogSize = Size(330.0, 270.0); -const Size _inputLandscapeDialogSize = Size(496, 160.0); -const Size _inputRangeLandscapeDialogSize = Size(496, 164.0); -const Duration _dialogSizeAnimationDuration = Duration(milliseconds: 200); -const double _inputFormPortraitHeight = 98.0; -const double _inputFormLandscapeHeight = 108.0; - -/// Shows a dialog containing a Material Design date picker. -/// -/// The returned [Future] resolves to the date selected by the user when the -/// user confirms the dialog. If the user cancels the dialog, null is returned. -/// -/// When the date picker is first displayed, it will show the month of -/// [initialDate], with [initialDate] selected. -/// -/// The [firstDate] is the earliest allowable date. The [lastDate] is the latest -/// allowable date. [initialDate] must either fall between these dates, -/// or be equal to one of them. For each of these [DateTime] parameters, only -/// their dates are considered. Their time fields are ignored. They must all -/// be non-null. -/// -/// The [currentDate] represents the current day (i.e. today). This -/// date will be highlighted in the day grid. If null, the date of -/// `DateTime.now()` will be used. -/// -/// An optional [initialEntryMode] argument can be used to display the date -/// picker in the [DatePickerEntryMode.calendar] (a calendar month grid) -/// or [DatePickerEntryMode.input] (a text input field) mode. -/// It defaults to [DatePickerEntryMode.calendar] and must be non-null. -/// -/// An optional [selectableDayPredicate] function can be passed in to only allow -/// certain days for selection. If provided, only the days that -/// [selectableDayPredicate] returns true for will be selectable. For example, -/// this can be used to only allow weekdays for selection. If provided, it must -/// return true for [initialDate]. -/// -/// The following optional string parameters allow you to override the default -/// text used for various parts of the dialog: -/// -/// * [helpText], label displayed at the top of the dialog. -/// * [cancelText], label on the cancel button. -/// * [confirmText], label on the ok button. -/// * [errorFormatText], message used when the input text isn't in a proper date format. -/// * [errorInvalidText], message used when the input text isn't a selectable date. -/// * [fieldHintText], text used to prompt the user when no text has been entered in the field. -/// * [fieldLabelText], label for the date text input field. -/// -/// An optional [locale] argument can be used to set the locale for the date -/// picker. It defaults to the ambient locale provided by [Localizations]. -/// -/// An optional [textDirection] argument can be used to set the text direction -/// ([TextDirection.ltr] or [TextDirection.rtl]) for the date picker. It -/// defaults to the ambient text direction provided by [Directionality]. If both -/// [locale] and [textDirection] are non-null, [textDirection] overrides the -/// direction chosen for the [locale]. -/// -/// The [context], [useRootNavigator] and [routeSettings] arguments are passed to -/// [showDialog], the documentation for which discusses how it is used. [context] -/// and [useRootNavigator] must be non-null. -/// -/// The [builder] parameter can be used to wrap the dialog widget -/// to add inherited widgets like [Theme]. -/// -/// An optional [initialDatePickerMode] argument can be used to have the -/// calendar date picker initially appear in the [DatePickerMode.year] or -/// [DatePickerMode.day] mode. It defaults to [DatePickerMode.day], and -/// must be non-null. -/// -/// {@macro flutter.widgets.RawDialogRoute} -/// -/// ### State Restoration -/// -/// Using this method will not enable state restoration for the date picker. -/// In order to enable state restoration for a date picker, use -/// [Navigator.restorablePush] or [Navigator.restorablePushNamed] with -/// [DatePickerDialog]. -/// -/// For more information about state restoration, see [RestorationManager]. -/// -/// {@macro flutter.widgets.RestorationManager} -/// -/// {@tool dartpad} -/// This sample demonstrates how to create a restorable Material date picker. -/// This is accomplished by enabling state restoration by specifying -/// [MaterialApp.restorationScopeId] and using [Navigator.restorablePush] to -/// push [DatePickerDialog] when the button is tapped. -/// -/// ** See code in examples/api/lib/material/date_picker/show_date_picker.0.dart ** -/// {@end-tool} -/// -/// See also: -/// -/// * [showDateRangePicker], which shows a Material Design date range picker -/// used to select a range of dates. -/// * [CalendarDatePicker], which provides the calendar grid used by the date picker dialog. -/// * [InputDatePickerFormField], which provides a text input field for entering dates. -/// * [DisplayFeatureSubScreen], which documents the specifics of how -/// [DisplayFeature]s can split the screen into sub-screens. -/// * [showTimePicker], which shows a dialog that contains a Material Design time picker. -/// -Future showDatePicker({ - required BuildContext context, - required DateTime initialDate, - required DateTime firstDate, - required DateTime lastDate, - DateTime? currentDate, - DatePickerEntryMode initialEntryMode = DatePickerEntryMode.calendar, - SelectableDayPredicate? selectableDayPredicate, - String? helpText, - String? cancelText, - String? confirmText, - Locale? locale, - bool useRootNavigator = true, - RouteSettings? routeSettings, - TextDirection? textDirection, - TransitionBuilder? builder, - DatePickerMode initialDatePickerMode = DatePickerMode.day, - String? errorFormatText, - String? errorInvalidText, - String? fieldHintText, - String? fieldLabelText, - TextInputType? keyboardType, - Offset? anchorPoint, -}) async { - assert(context != null); - assert(initialDate != null); - assert(firstDate != null); - assert(lastDate != null); - initialDate = DateUtils.dateOnly(initialDate); - firstDate = DateUtils.dateOnly(firstDate); - lastDate = DateUtils.dateOnly(lastDate); - assert( - !lastDate.isBefore(firstDate), - 'lastDate $lastDate must be on or after firstDate $firstDate.', - ); - assert( - !initialDate.isBefore(firstDate), - 'initialDate $initialDate must be on or after firstDate $firstDate.', - ); - assert( - !initialDate.isAfter(lastDate), - 'initialDate $initialDate must be on or before lastDate $lastDate.', - ); - assert( - selectableDayPredicate == null || selectableDayPredicate(initialDate), - 'Provided initialDate $initialDate must satisfy provided selectableDayPredicate.', - ); - assert(initialEntryMode != null); - assert(useRootNavigator != null); - assert(initialDatePickerMode != null); - assert(debugCheckHasMaterialLocalizations(context)); - - Widget dialog = DatePickerDialog( - initialDate: initialDate, - firstDate: firstDate, - lastDate: lastDate, - currentDate: currentDate, - initialEntryMode: initialEntryMode, - selectableDayPredicate: selectableDayPredicate, - helpText: helpText, - cancelText: cancelText, - confirmText: confirmText, - initialCalendarMode: initialDatePickerMode, - errorFormatText: errorFormatText, - errorInvalidText: errorInvalidText, - fieldHintText: fieldHintText, - fieldLabelText: fieldLabelText, - keyboardType: keyboardType, - ); - - if (textDirection != null) { - dialog = Directionality( - textDirection: textDirection, - child: dialog, - ); - } - - if (locale != null) { - dialog = Localizations.override( - context: context, - locale: locale, - child: dialog, - ); - } - - return showDialog( - context: context, - useRootNavigator: useRootNavigator, - routeSettings: routeSettings, - builder: (BuildContext context) { - return builder == null ? dialog : builder(context, dialog); - }, - anchorPoint: anchorPoint, - ); -} - -/// A Material-style date picker dialog. -/// -/// It is used internally by [showDatePicker] or can be directly pushed -/// onto the [Navigator] stack to enable state restoration. See -/// [showDatePicker] for a state restoration app example. -/// -/// See also: -/// -/// * [showDatePicker], which is a way to display the date picker. -class DatePickerDialog extends StatefulWidget { - /// A Material-style date picker dialog. - DatePickerDialog({ - super.key, - required DateTime initialDate, - required DateTime firstDate, - required DateTime lastDate, - DateTime? currentDate, - this.initialEntryMode = DatePickerEntryMode.calendar, - this.selectableDayPredicate, - this.cancelText, - this.confirmText, - this.helpText, - this.initialCalendarMode = DatePickerMode.day, - this.errorFormatText, - this.errorInvalidText, - this.fieldHintText, - this.fieldLabelText, - this.keyboardType, - this.restorationId, - }) : assert(initialDate != null), - assert(firstDate != null), - assert(lastDate != null), - initialDate = DateUtils.dateOnly(initialDate), - firstDate = DateUtils.dateOnly(firstDate), - lastDate = DateUtils.dateOnly(lastDate), - currentDate = DateUtils.dateOnly(currentDate ?? DateTime.now()), - assert(initialEntryMode != null), - assert(initialCalendarMode != null) { - assert( - !this.lastDate.isBefore(this.firstDate), - 'lastDate ${this.lastDate} must be on or after firstDate ${this.firstDate}.', - ); - assert( - !this.initialDate.isBefore(this.firstDate), - 'initialDate ${this.initialDate} must be on or after firstDate ${this.firstDate}.', - ); - assert( - !this.initialDate.isAfter(this.lastDate), - 'initialDate ${this.initialDate} must be on or before lastDate ${this.lastDate}.', - ); - assert( - selectableDayPredicate == null || - selectableDayPredicate!(this.initialDate), - 'Provided initialDate ${this.initialDate} must satisfy provided selectableDayPredicate', - ); - } - - /// The initially selected [DateTime] that the picker should display. - final DateTime initialDate; - - /// The earliest allowable [DateTime] that the user can select. - final DateTime firstDate; - - /// The latest allowable [DateTime] that the user can select. - final DateTime lastDate; - - /// The [DateTime] representing today. It will be highlighted in the day grid. - final DateTime currentDate; - - /// The initial mode of date entry method for the date picker dialog. - /// - /// See [DatePickerEntryMode] for more details on the different data entry - /// modes available. - final DatePickerEntryMode initialEntryMode; - - /// Function to provide full control over which [DateTime] can be selected. - final SelectableDayPredicate? selectableDayPredicate; - - /// The text that is displayed on the cancel button. - final String? cancelText; - - /// The text that is displayed on the confirm button. - final String? confirmText; - - /// The text that is displayed at the top of the header. - /// - /// This is used to indicate to the user what they are selecting a date for. - final String? helpText; - - /// The initial display of the calendar picker. - final DatePickerMode initialCalendarMode; - - /// The error text displayed if the entered date is not in the correct format. - final String? errorFormatText; - - /// The error text displayed if the date is not valid. - /// - /// A date is not valid if it is earlier than [firstDate], later than - /// [lastDate], or doesn't pass the [selectableDayPredicate]. - final String? errorInvalidText; - - /// The hint text displayed in the [TextField]. - /// - /// If this is null, it will default to the date format string. For example, - /// 'mm/dd/yyyy' for en_US. - final String? fieldHintText; - - /// The label text displayed in the [TextField]. - /// - /// If this is null, it will default to the words representing the date format - /// string. For example, 'Month, Day, Year' for en_US. - final String? fieldLabelText; - - /// The keyboard type of the [TextField]. - /// - /// If this is null, it will default to [TextInputType.datetime] - final TextInputType? keyboardType; - - /// Restoration ID to save and restore the state of the [DatePickerDialog]. - /// - /// If it is non-null, the date picker will persist and restore the - /// date selected on the dialog. - /// - /// The state of this widget is persisted in a [RestorationBucket] claimed - /// from the surrounding [RestorationScope] using the provided restoration ID. - /// - /// See also: - /// - /// * [RestorationManager], which explains how state restoration works in - /// Flutter. - final String? restorationId; - - @override - State createState() => _DatePickerDialogState(); -} - -class _DatePickerDialogState extends State - with RestorationMixin { - late final RestorableDateTime _selectedDate = - RestorableDateTime(widget.initialDate); - late final _RestorableDatePickerEntryMode _entryMode = - _RestorableDatePickerEntryMode(widget.initialEntryMode); - final _RestorableAutovalidateMode _autovalidateMode = - _RestorableAutovalidateMode(AutovalidateMode.disabled); - - @override - String? get restorationId => widget.restorationId; - - @override - void restoreState(RestorationBucket? oldBucket, bool initialRestore) { - registerForRestoration(_selectedDate, 'selected_date'); - registerForRestoration(_autovalidateMode, 'autovalidateMode'); - registerForRestoration(_entryMode, 'calendar_entry_mode'); - } - - final GlobalKey _calendarPickerKey = GlobalKey(); - final GlobalKey _formKey = GlobalKey(); - - void _handleOk() { - if (_entryMode.value == DatePickerEntryMode.input || - _entryMode.value == DatePickerEntryMode.inputOnly) { - final FormState form = _formKey.currentState!; - if (!form.validate()) { - setState(() => _autovalidateMode.value = AutovalidateMode.always); - return; - } - form.save(); - } - Navigator.pop(context, _selectedDate.value); - } - - void _handleCancel() { - Navigator.pop(context); - } - - void _handleEntryModeToggle() { - setState(() { - switch (_entryMode.value) { - case DatePickerEntryMode.calendar: - _autovalidateMode.value = AutovalidateMode.disabled; - _entryMode.value = DatePickerEntryMode.input; - break; - case DatePickerEntryMode.input: - _formKey.currentState!.save(); - _entryMode.value = DatePickerEntryMode.calendar; - break; - case DatePickerEntryMode.calendarOnly: - case DatePickerEntryMode.inputOnly: - assert(false, 'Can not change entry mode from _entryMode'); - break; - } - }); - } - - void _handleDateChanged(DateTime date) { - setState(() { - _selectedDate.value = date; - }); - } - - Size _dialogSize(BuildContext context) { - final Orientation orientation = MediaQuery.of(context).orientation; - switch (_entryMode.value) { - case DatePickerEntryMode.calendar: - case DatePickerEntryMode.calendarOnly: - switch (orientation) { - case Orientation.portrait: - return _calendarPortraitDialogSize; - case Orientation.landscape: - return _calendarLandscapeDialogSize; - } - case DatePickerEntryMode.input: - case DatePickerEntryMode.inputOnly: - switch (orientation) { - case Orientation.portrait: - return _inputPortraitDialogSize; - case Orientation.landscape: - return _inputLandscapeDialogSize; - } - } - } - - static const Map _formShortcutMap = - { - // Pressing enter on the field will move focus to the next field or control. - SingleActivator(LogicalKeyboardKey.enter): NextFocusIntent(), - }; - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final Orientation orientation = MediaQuery.of(context).orientation; - final TextTheme textTheme = theme.textTheme; - // Constrain the textScaleFactor to the largest supported value to prevent - // layout issues. - final double textScaleFactor = - math.min(MediaQuery.of(context).textScaleFactor, 1.3); - - final String dateText = localizations.formatMediumDate(_selectedDate.value); - final Color onPrimarySurface = colorScheme.brightness == Brightness.light - ? colorScheme.onPrimary - : colorScheme.onSurface; - final TextStyle? dateStyle = orientation == Orientation.landscape - ? textTheme.bodyMedium?.copyWith(color: onPrimarySurface) - : textTheme.bodySmall?.copyWith(color: onPrimarySurface); - - final Widget actions = Container( - alignment: AlignmentDirectional.centerEnd, - constraints: const BoxConstraints(minHeight: 52.0), - padding: const EdgeInsets.symmetric(horizontal: 8), - child: OverflowBar( - spacing: 8, - children: [ - TextButton( - onPressed: _handleCancel, - child: Text(widget.cancelText ?? localizations.cancelButtonLabel), - ), - TextButton( - onPressed: _handleOk, - child: Text(widget.confirmText ?? localizations.okButtonLabel), - ), - ], - ), - ); - - CalendarDatePicker calendarDatePicker() { - return CalendarDatePicker( - key: _calendarPickerKey, - initialDate: _selectedDate.value, - firstDate: widget.firstDate, - lastDate: widget.lastDate, - currentDate: widget.currentDate, - onDateChanged: _handleDateChanged, - selectableDayPredicate: widget.selectableDayPredicate, - initialCalendarMode: widget.initialCalendarMode, - ); - } - - Form inputDatePicker() { - return Form( - key: _formKey, - autovalidateMode: _autovalidateMode.value, - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 24), - height: orientation == Orientation.portrait - ? _inputFormPortraitHeight - : _inputFormLandscapeHeight, - child: Shortcuts( - shortcuts: _formShortcutMap, - child: Column( - children: [ - const Spacer(), - InputDatePickerFormField( - initialDate: _selectedDate.value, - firstDate: widget.firstDate, - lastDate: widget.lastDate, - onDateSubmitted: _handleDateChanged, - onDateSaved: _handleDateChanged, - selectableDayPredicate: widget.selectableDayPredicate, - errorFormatText: widget.errorFormatText, - errorInvalidText: widget.errorInvalidText, - fieldHintText: widget.fieldHintText, - fieldLabelText: widget.fieldLabelText, - keyboardType: widget.keyboardType, - autofocus: true, - ), - const Spacer(), - ], - ), - ), - ), - ); - } - - final Widget picker; - final Widget? entryModeButton; - switch (_entryMode.value) { - case DatePickerEntryMode.calendar: - picker = calendarDatePicker(); - entryModeButton = IconButton( - icon: const Icon(Icons.edit), - color: onPrimarySurface, - tooltip: localizations.inputDateModeButtonLabel, - onPressed: _handleEntryModeToggle, - ); - break; - - case DatePickerEntryMode.calendarOnly: - picker = calendarDatePicker(); - entryModeButton = null; - break; - - case DatePickerEntryMode.input: - picker = inputDatePicker(); - entryModeButton = IconButton( - icon: const Icon(Icons.calendar_today), - color: onPrimarySurface, - tooltip: localizations.calendarModeButtonLabel, - onPressed: _handleEntryModeToggle, - ); - break; - - case DatePickerEntryMode.inputOnly: - picker = inputDatePicker(); - entryModeButton = null; - break; - } - - final Widget header = _DatePickerHeader( - helpText: widget.helpText ?? localizations.datePickerHelpText, - titleText: dateText, - titleStyle: dateStyle, - orientation: orientation, - isShort: orientation == Orientation.landscape, - entryModeButton: entryModeButton, - ); - - final Size dialogSize = _dialogSize(context) * textScaleFactor; - return Dialog( - insetPadding: - const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0), - clipBehavior: Clip.antiAlias, - child: AnimatedContainer( - width: dialogSize.width, - height: dialogSize.height, - duration: _dialogSizeAnimationDuration, - curve: Curves.easeIn, - child: MediaQuery( - data: MediaQuery.of(context).copyWith( - textScaleFactor: textScaleFactor, - ), - child: Builder(builder: (BuildContext context) { - switch (orientation) { - case Orientation.portrait: - return Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - header, - Expanded(child: picker), - actions, - ], - ); - case Orientation.landscape: - return Row( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - header, - Flexible( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Expanded(child: picker), - actions, - ], - ), - ), - ], - ); - } - }), - ), - ), - ); - } -} - -// A restorable [DatePickerEntryMode] value. -// -// This serializes each entry as a unique `int` value. -class _RestorableDatePickerEntryMode - extends RestorableValue { - _RestorableDatePickerEntryMode( - DatePickerEntryMode defaultValue, - ) : _defaultValue = defaultValue; - - final DatePickerEntryMode _defaultValue; - - @override - DatePickerEntryMode createDefaultValue() => _defaultValue; - - @override - void didUpdateValue(DatePickerEntryMode? oldValue) { - assert(debugIsSerializableForRestoration(value.index)); - notifyListeners(); - } - - @override - DatePickerEntryMode fromPrimitives(Object? data) => - DatePickerEntryMode.values[data! as int]; - - @override - Object? toPrimitives() => value.index; -} - -// A restorable [AutovalidateMode] value. -// -// This serializes each entry as a unique `int` value. -class _RestorableAutovalidateMode extends RestorableValue { - _RestorableAutovalidateMode( - AutovalidateMode defaultValue, - ) : _defaultValue = defaultValue; - - final AutovalidateMode _defaultValue; - - @override - AutovalidateMode createDefaultValue() => _defaultValue; - - @override - void didUpdateValue(AutovalidateMode? oldValue) { - assert(debugIsSerializableForRestoration(value.index)); - notifyListeners(); - } - - @override - AutovalidateMode fromPrimitives(Object? data) => - AutovalidateMode.values[data! as int]; - - @override - Object? toPrimitives() => value.index; -} - -/// Re-usable widget that displays the selected date (in large font) and the -/// help text above it. -/// -/// These types include: -/// -/// * Single Date picker with calendar mode. -/// * Single Date picker with text input mode. -/// * Date Range picker with text input mode. -/// -/// [helpText], [orientation], [icon], [onIconPressed] are required and must be -/// non-null. -class _DatePickerHeader extends StatelessWidget { - /// Creates a header for use in a date picker dialog. - const _DatePickerHeader({ - required this.helpText, - required this.titleText, - this.titleSemanticsLabel, - required this.titleStyle, - required this.orientation, - this.isShort = false, - this.entryModeButton, - }) : assert(helpText != null), - assert(orientation != null), - assert(isShort != null); - - static const double _datePickerHeaderLandscapeWidth = 152.0; - static const double _datePickerHeaderPortraitHeight = 120.0; - static const double _headerPaddingLandscape = 16.0; - - /// The text that is displayed at the top of the header. - /// - /// This is used to indicate to the user what they are selecting a date for. - final String helpText; - - /// The text that is displayed at the center of the header. - final String titleText; - - /// The semantic label associated with the [titleText]. - final String? titleSemanticsLabel; - - /// The [TextStyle] that the title text is displayed with. - final TextStyle? titleStyle; - - /// The orientation is used to decide how to layout its children. - final Orientation orientation; - - /// Indicates the header is being displayed in a shorter/narrower context. - /// - /// This will be used to tighten up the space between the help text and date - /// text if `true`. Additionally, it will use a smaller typography style if - /// `true`. - /// - /// This is necessary for displaying the manual input mode in - /// landscape orientation, in order to account for the keyboard height. - final bool isShort; - - final Widget? entryModeButton; - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; - final TextTheme textTheme = theme.textTheme; - - // The header should use the primary color in light themes and surface color in dark - final bool isDark = colorScheme.brightness == Brightness.dark; - final Color primarySurfaceColor = - isDark ? colorScheme.surface : colorScheme.primary; - final Color onPrimarySurfaceColor = - isDark ? colorScheme.onSurface : colorScheme.onPrimary; - - final TextStyle? helpStyle = textTheme.bodyMedium?.copyWith( - color: onPrimarySurfaceColor, - ); - - final Text help = Text( - helpText, - style: helpStyle, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ); - final Text title = Text( - titleText, - semanticsLabel: titleSemanticsLabel ?? titleText, - style: titleStyle, - maxLines: orientation == Orientation.portrait ? 1 : 2, - overflow: TextOverflow.ellipsis, - ); - - switch (orientation) { - case Orientation.portrait: - return SizedBox( - height: _datePickerHeaderPortraitHeight, - child: Material( - color: primarySurfaceColor, - child: Padding( - padding: const EdgeInsetsDirectional.only( - start: 24, - end: 12, - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const SizedBox(height: 16), - help, - const Flexible(child: SizedBox(height: 38)), - Row( - children: [ - Expanded(child: title), - if (entryModeButton != null) entryModeButton!, - ], - ), - ], - ), - ), - ), - ); - case Orientation.landscape: - return SizedBox( - width: _datePickerHeaderLandscapeWidth, - child: Material( - color: primarySurfaceColor, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const SizedBox(height: 16), - Padding( - padding: const EdgeInsets.symmetric( - horizontal: _headerPaddingLandscape, - ), - child: help, - ), - SizedBox(height: isShort ? 16 : 56), - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: _headerPaddingLandscape, - ), - child: title, - ), - ), - if (entryModeButton != null) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 4), - child: entryModeButton, - ), - ], - ), - ), - ); - } - } -} - -/// Shows a full screen modal dialog containing a Material Design date range -/// picker. -/// -/// The returned [Future] resolves to the [DateTimeRange] selected by the user -/// when the user saves their selection. If the user cancels the dialog, null is -/// returned. -/// -/// If [initialDateRange] is non-null, then it will be used as the initially -/// selected date range. If it is provided, `initialDateRange.start` must be -/// before or on `initialDateRange.end`. -/// -/// The [firstDate] is the earliest allowable date. The [lastDate] is the latest -/// allowable date. Both must be non-null. -/// -/// If an initial date range is provided, `initialDateRange.start` -/// and `initialDateRange.end` must both fall between or on [firstDate] and -/// [lastDate]. For all of these [DateTime] values, only their dates are -/// considered. Their time fields are ignored. -/// -/// The [currentDate] represents the current day (i.e. today). This -/// date will be highlighted in the day grid. If null, the date of -/// `DateTime.now()` will be used. -/// -/// An optional [initialEntryMode] argument can be used to display the date -/// picker in the [DatePickerEntryMode.calendar] (a scrollable calendar month -/// grid) or [DatePickerEntryMode.input] (two text input fields) mode. -/// It defaults to [DatePickerEntryMode.calendar] and must be non-null. -/// -/// The following optional string parameters allow you to override the default -/// text used for various parts of the dialog: -/// -/// * [helpText], the label displayed at the top of the dialog. -/// * [cancelText], the label on the cancel button for the text input mode. -/// * [confirmText],the label on the ok button for the text input mode. -/// * [saveText], the label on the save button for the fullscreen calendar -/// mode. -/// * [errorFormatText], the message used when an input text isn't in a proper -/// date format. -/// * [errorInvalidText], the message used when an input text isn't a -/// selectable date. -/// * [errorInvalidRangeText], the message used when the date range is -/// invalid (e.g. start date is after end date). -/// * [fieldStartHintText], the text used to prompt the user when no text has -/// been entered in the start field. -/// * [fieldEndHintText], the text used to prompt the user when no text has -/// been entered in the end field. -/// * [fieldStartLabelText], the label for the start date text input field. -/// * [fieldEndLabelText], the label for the end date text input field. -/// -/// An optional [locale] argument can be used to set the locale for the date -/// picker. It defaults to the ambient locale provided by [Localizations]. -/// -/// An optional [textDirection] argument can be used to set the text direction -/// ([TextDirection.ltr] or [TextDirection.rtl]) for the date picker. It -/// defaults to the ambient text direction provided by [Directionality]. If both -/// [locale] and [textDirection] are non-null, [textDirection] overrides the -/// direction chosen for the [locale]. -/// -/// The [context], [useRootNavigator] and [routeSettings] arguments are passed -/// to [showDialog], the documentation for which discusses how it is used. -/// [context] and [useRootNavigator] must be non-null. -/// -/// The [builder] parameter can be used to wrap the dialog widget -/// to add inherited widgets like [Theme]. -/// -/// {@macro flutter.widgets.RawDialogRoute} -/// -/// ### State Restoration -/// -/// Using this method will not enable state restoration for the date range picker. -/// In order to enable state restoration for a date range picker, use -/// [Navigator.restorablePush] or [Navigator.restorablePushNamed] with -/// [DateRangePickerDialog]. -/// -/// For more information about state restoration, see [RestorationManager]. -/// -/// {@macro flutter.widgets.RestorationManager} -/// -/// {@tool sample} -/// This sample demonstrates how to create a restorable Material date range picker. -/// This is accomplished by enabling state restoration by specifying -/// [MaterialApp.restorationScopeId] and using [Navigator.restorablePush] to -/// push [DateRangePickerDialog] when the button is tapped. -/// -/// ** See code in examples/api/lib/material/date_picker/show_date_range_picker.0.dart ** -/// {@end-tool} -/// -/// See also: -/// -/// * [showDatePicker], which shows a Material Design date picker used to -/// select a single date. -/// * [DateTimeRange], which is used to describe a date range. -/// * [DisplayFeatureSubScreen], which documents the specifics of how -/// [DisplayFeature]s can split the screen into sub-screens. -Future showDateRangePicker({ - required BuildContext context, - DateTimeRange? initialDateRange, - required DateTime firstDate, - required DateTime lastDate, - DateTime? currentDate, - DatePickerEntryMode initialEntryMode = DatePickerEntryMode.calendar, - String? helpText, - String? cancelText, - String? confirmText, - String? saveText, - String? errorFormatText, - String? errorInvalidText, - String? errorInvalidRangeText, - String? fieldStartHintText, - String? fieldEndHintText, - String? fieldStartLabelText, - String? fieldEndLabelText, - Locale? locale, - bool useRootNavigator = true, - RouteSettings? routeSettings, - TextDirection? textDirection, - TransitionBuilder? builder, - Offset? anchorPoint, -}) async { - assert(context != null); - assert( - initialDateRange == null || - (initialDateRange.start != null && initialDateRange.end != null), - 'initialDateRange must be null or have non-null start and end dates.', - ); - assert( - initialDateRange == null || - !initialDateRange.start.isAfter(initialDateRange.end), - "initialDateRange's start date must not be after it's end date.", - ); - initialDateRange = - initialDateRange == null ? null : DateUtils.datesOnly(initialDateRange); - assert(firstDate != null); - firstDate = DateUtils.dateOnly(firstDate); - assert(lastDate != null); - lastDate = DateUtils.dateOnly(lastDate); - assert( - !lastDate.isBefore(firstDate), - 'lastDate $lastDate must be on or after firstDate $firstDate.', - ); - assert( - initialDateRange == null || !initialDateRange.start.isBefore(firstDate), - "initialDateRange's start date must be on or after firstDate $firstDate.", - ); - assert( - initialDateRange == null || !initialDateRange.end.isBefore(firstDate), - "initialDateRange's end date must be on or after firstDate $firstDate.", - ); - assert( - initialDateRange == null || !initialDateRange.start.isAfter(lastDate), - "initialDateRange's start date must be on or before lastDate $lastDate.", - ); - assert( - initialDateRange == null || !initialDateRange.end.isAfter(lastDate), - "initialDateRange's end date must be on or before lastDate $lastDate.", - ); - currentDate = DateUtils.dateOnly(currentDate ?? DateTime.now()); - assert(initialEntryMode != null); - assert(useRootNavigator != null); - assert(debugCheckHasMaterialLocalizations(context)); - - Widget dialog = DateRangePickerDialog( - initialDateRange: initialDateRange, - firstDate: firstDate, - lastDate: lastDate, - currentDate: currentDate, - initialEntryMode: initialEntryMode, - helpText: helpText, - cancelText: cancelText, - confirmText: confirmText, - saveText: saveText, - errorFormatText: errorFormatText, - errorInvalidText: errorInvalidText, - errorInvalidRangeText: errorInvalidRangeText, - fieldStartHintText: fieldStartHintText, - fieldEndHintText: fieldEndHintText, - fieldStartLabelText: fieldStartLabelText, - fieldEndLabelText: fieldEndLabelText, - ); - - if (textDirection != null) { - dialog = Directionality( - textDirection: textDirection, - child: dialog, - ); - } - - if (locale != null) { - dialog = Localizations.override( - context: context, - locale: locale, - child: dialog, - ); - } - - return showDialog( - context: context, - useRootNavigator: useRootNavigator, - routeSettings: routeSettings, - useSafeArea: false, - builder: (BuildContext context) { - return builder == null ? dialog : builder(context, dialog); - }, - anchorPoint: anchorPoint, - ); -} - -/// Returns a locale-appropriate string to describe the start of a date range. -/// -/// If `startDate` is null, then it defaults to 'Start Date', otherwise if it -/// is in the same year as the `endDate` then it will use the short month -/// day format (i.e. 'Jan 21'). Otherwise it will return the short date format -/// (i.e. 'Jan 21, 2020'). -String _formatRangeStartDate(MaterialLocalizations localizations, - DateTime? startDate, DateTime? endDate) { - return startDate == null - ? localizations.dateRangeStartLabel - : (endDate == null || startDate.year == endDate.year) - ? localizations.formatShortMonthDay(startDate) - : localizations.formatShortDate(startDate); -} - -/// Returns an locale-appropriate string to describe the end of a date range. -/// -/// If `endDate` is null, then it defaults to 'End Date', otherwise if it -/// is in the same year as the `startDate` and the `currentDate` then it will -/// just use the short month day format (i.e. 'Jan 21'), otherwise it will -/// include the year (i.e. 'Jan 21, 2020'). -String _formatRangeEndDate(MaterialLocalizations localizations, - DateTime? startDate, DateTime? endDate, DateTime currentDate) { - return endDate == null - ? localizations.dateRangeEndLabel - : (startDate != null && - startDate.year == endDate.year && - startDate.year == currentDate.year) - ? localizations.formatShortMonthDay(endDate) - : localizations.formatShortDate(endDate); -} - -/// A Material-style date range picker dialog. -/// -/// It is used internally by [showDateRangePicker] or can be directly pushed -/// onto the [Navigator] stack to enable state restoration. See -/// [showDateRangePicker] for a state restoration app example. -/// -/// See also: -/// -/// * [showDateRangePicker], which is a way to display the date picker. -class DateRangePickerDialog extends StatefulWidget { - /// A Material-style date range picker dialog. - const DateRangePickerDialog({ - super.key, - this.initialDateRange, - required this.firstDate, - required this.lastDate, - this.currentDate, - this.initialEntryMode = DatePickerEntryMode.calendar, - this.helpText, - this.cancelText, - this.confirmText, - this.saveText, - this.errorInvalidRangeText, - this.errorFormatText, - this.errorInvalidText, - this.fieldStartHintText, - this.fieldEndHintText, - this.fieldStartLabelText, - this.fieldEndLabelText, - this.restorationId, - }); - - /// The date range that the date range picker starts with when it opens. - /// - /// If an initial date range is provided, `initialDateRange.start` - /// and `initialDateRange.end` must both fall between or on [firstDate] and - /// [lastDate]. For all of these [DateTime] values, only their dates are - /// considered. Their time fields are ignored. - /// - /// If [initialDateRange] is non-null, then it will be used as the initially - /// selected date range. If it is provided, `initialDateRange.start` must be - /// before or on `initialDateRange.end`. - final DateTimeRange? initialDateRange; - - /// The earliest allowable date on the date range. - final DateTime firstDate; - - /// The latest allowable date on the date range. - final DateTime lastDate; - - /// The [currentDate] represents the current day (i.e. today). - /// - /// This date will be highlighted in the day grid. - /// - /// If `null`, the date of `DateTime.now()` will be used. - final DateTime? currentDate; - - /// The initial date range picker entry mode. - /// - /// The date range has two main modes: [DatePickerEntryMode.calendar] (a - /// scrollable calendar month grid) or [DatePickerEntryMode.input] (two text - /// input fields) mode. - /// - /// It defaults to [DatePickerEntryMode.calendar] and must be non-null. - final DatePickerEntryMode initialEntryMode; - - /// The label on the cancel button for the text input mode. - /// - /// If null, the localized value of - /// [MaterialLocalizations.cancelButtonLabel] is used. - final String? cancelText; - - /// The label on the "OK" button for the text input mode. - /// - /// If null, the localized value of - /// [MaterialLocalizations.okButtonLabel] is used. - final String? confirmText; - - /// The label on the save button for the fullscreen calendar mode. - /// - /// If null, the localized value of - /// [MaterialLocalizations.saveButtonLabel] is used. - final String? saveText; - - /// The label displayed at the top of the dialog. - /// - /// If null, the localized value of - /// [MaterialLocalizations.dateRangePickerHelpText] is used. - final String? helpText; - - /// The message used when the date range is invalid (e.g. start date is after - /// end date). - /// - /// If null, the localized value of - /// [MaterialLocalizations.invalidDateRangeLabel] is used. - final String? errorInvalidRangeText; - - /// The message used when an input text isn't in a proper date format. - /// - /// If null, the localized value of - /// [MaterialLocalizations.invalidDateFormatLabel] is used. - final String? errorFormatText; - - /// The message used when an input text isn't a selectable date. - /// - /// If null, the localized value of - /// [MaterialLocalizations.dateOutOfRangeLabel] is used. - final String? errorInvalidText; - - /// The text used to prompt the user when no text has been entered in the - /// start field. - /// - /// If null, the localized value of - /// [MaterialLocalizations.dateHelpText] is used. - final String? fieldStartHintText; - - /// The text used to prompt the user when no text has been entered in the - /// end field. - /// - /// If null, the localized value of [MaterialLocalizations.dateHelpText] is - /// used. - final String? fieldEndHintText; - - /// The label for the start date text input field. - /// - /// If null, the localized value of [MaterialLocalizations.dateRangeStartLabel] - /// is used. - final String? fieldStartLabelText; - - /// The label for the end date text input field. - /// - /// If null, the localized value of [MaterialLocalizations.dateRangeEndLabel] - /// is used. - final String? fieldEndLabelText; - - /// Restoration ID to save and restore the state of the [DateRangePickerDialog]. - /// - /// If it is non-null, the date range picker will persist and restore the - /// date range selected on the dialog. - /// - /// The state of this widget is persisted in a [RestorationBucket] claimed - /// from the surrounding [RestorationScope] using the provided restoration ID. - /// - /// See also: - /// - /// * [RestorationManager], which explains how state restoration works in - /// Flutter. - final String? restorationId; - - @override - State createState() => _DateRangePickerDialogState(); -} - -class _DateRangePickerDialogState extends State - with RestorationMixin { - late final _RestorableDatePickerEntryMode _entryMode = - _RestorableDatePickerEntryMode(widget.initialEntryMode); - late final RestorableDateTimeN _selectedStart = - RestorableDateTimeN(widget.initialDateRange?.start); - late final RestorableDateTimeN _selectedEnd = - RestorableDateTimeN(widget.initialDateRange?.end); - final RestorableBool _autoValidate = RestorableBool(false); - final GlobalKey _calendarPickerKey = GlobalKey(); - final GlobalKey<_InputDateRangePickerState> _inputPickerKey = - GlobalKey<_InputDateRangePickerState>(); - - @override - String? get restorationId => widget.restorationId; - - @override - void restoreState(RestorationBucket? oldBucket, bool initialRestore) { - registerForRestoration(_entryMode, 'entry_mode'); - registerForRestoration(_selectedStart, 'selected_start'); - registerForRestoration(_selectedEnd, 'selected_end'); - registerForRestoration(_autoValidate, 'autovalidate'); - } - - void _handleOk() { - if (_entryMode.value == DatePickerEntryMode.input || - _entryMode.value == DatePickerEntryMode.inputOnly) { - final _InputDateRangePickerState picker = _inputPickerKey.currentState!; - if (!picker.validate()) { - setState(() { - _autoValidate.value = true; - }); - return; - } - } - final DateTimeRange? selectedRange = _hasSelectedDateRange - ? DateTimeRange(start: _selectedStart.value!, end: _selectedEnd.value!) - : null; - - Navigator.pop(context, selectedRange); - } - - void _handleCancel() { - Navigator.pop(context); - } - - void _handleEntryModeToggle() { - setState(() { - switch (_entryMode.value) { - case DatePickerEntryMode.calendar: - _autoValidate.value = false; - _entryMode.value = DatePickerEntryMode.input; - break; - - case DatePickerEntryMode.input: - // Validate the range dates - if (_selectedStart.value != null && - (_selectedStart.value!.isBefore(widget.firstDate) || - _selectedStart.value!.isAfter(widget.lastDate))) { - _selectedStart.value = null; - // With no valid start date, having an end date makes no sense for the UI. - _selectedEnd.value = null; - } - if (_selectedEnd.value != null && - (_selectedEnd.value!.isBefore(widget.firstDate) || - _selectedEnd.value!.isAfter(widget.lastDate))) { - _selectedEnd.value = null; - } - // If invalid range (start after end), then just use the start date - if (_selectedStart.value != null && - _selectedEnd.value != null && - _selectedStart.value!.isAfter(_selectedEnd.value!)) { - _selectedEnd.value = null; - } - _entryMode.value = DatePickerEntryMode.calendar; - break; - - case DatePickerEntryMode.calendarOnly: - case DatePickerEntryMode.inputOnly: - assert(false, 'Can not change entry mode from $_entryMode'); - break; - } - }); - } - - void _handleStartDateChanged(DateTime? date) { - setState(() => _selectedStart.value = date); - } - - void _handleEndDateChanged(DateTime? date) { - setState(() => _selectedEnd.value = date); - } - - bool get _hasSelectedDateRange => - _selectedStart.value != null && _selectedEnd.value != null; - - @override - Widget build(BuildContext context) { - final MediaQueryData mediaQuery = MediaQuery.of(context); - final Orientation orientation = mediaQuery.orientation; - final double textScaleFactor = math.min(mediaQuery.textScaleFactor, 1.3); - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final ColorScheme colors = Theme.of(context).colorScheme; - final Color onPrimarySurface = colors.brightness == Brightness.light - ? colors.onPrimary - : colors.onSurface; - - final Widget contents; - final Size size; - ShapeBorder? shape; - final double elevation; - final EdgeInsets insetPadding; - final bool showEntryModeButton = - _entryMode.value == DatePickerEntryMode.calendar || - _entryMode.value == DatePickerEntryMode.input; - switch (_entryMode.value) { - case DatePickerEntryMode.calendar: - case DatePickerEntryMode.calendarOnly: - contents = _CalendarRangePickerDialog( - key: _calendarPickerKey, - selectedStartDate: _selectedStart.value, - selectedEndDate: _selectedEnd.value, - firstDate: widget.firstDate, - lastDate: widget.lastDate, - currentDate: widget.currentDate, - onStartDateChanged: _handleStartDateChanged, - onEndDateChanged: _handleEndDateChanged, - onConfirm: _hasSelectedDateRange ? _handleOk : null, - onCancel: _handleCancel, - entryModeButton: showEntryModeButton - ? IconButton( - icon: const Icon(Icons.edit), - padding: EdgeInsets.zero, - color: onPrimarySurface, - tooltip: localizations.inputDateModeButtonLabel, - onPressed: _handleEntryModeToggle, - ) - : null, - confirmText: widget.saveText ?? localizations.saveButtonLabel, - helpText: widget.helpText ?? localizations.dateRangePickerHelpText, - ); - size = mediaQuery.size; - insetPadding = EdgeInsets.zero; - shape = const RoundedRectangleBorder(); - elevation = 0; - break; - - case DatePickerEntryMode.input: - case DatePickerEntryMode.inputOnly: - contents = _InputDateRangePickerDialog( - selectedStartDate: _selectedStart.value, - selectedEndDate: _selectedEnd.value, - currentDate: widget.currentDate, - picker: Container( - padding: const EdgeInsets.symmetric(horizontal: 24), - height: orientation == Orientation.portrait - ? _inputFormPortraitHeight - : _inputFormLandscapeHeight, - child: Column( - children: [ - const Spacer(), - _InputDateRangePicker( - key: _inputPickerKey, - initialStartDate: _selectedStart.value, - initialEndDate: _selectedEnd.value, - firstDate: widget.firstDate, - lastDate: widget.lastDate, - onStartDateChanged: _handleStartDateChanged, - onEndDateChanged: _handleEndDateChanged, - autofocus: true, - autovalidate: _autoValidate.value, - helpText: widget.helpText, - errorInvalidRangeText: widget.errorInvalidRangeText, - errorFormatText: widget.errorFormatText, - errorInvalidText: widget.errorInvalidText, - fieldStartHintText: widget.fieldStartHintText, - fieldEndHintText: widget.fieldEndHintText, - fieldStartLabelText: widget.fieldStartLabelText, - fieldEndLabelText: widget.fieldEndLabelText, - ), - const Spacer(), - ], - ), - ), - onConfirm: _handleOk, - onCancel: _handleCancel, - entryModeButton: showEntryModeButton - ? IconButton( - icon: const Icon(Icons.calendar_today), - padding: EdgeInsets.zero, - color: onPrimarySurface, - tooltip: localizations.calendarModeButtonLabel, - onPressed: _handleEntryModeToggle, - ) - : null, - confirmText: widget.confirmText ?? localizations.okButtonLabel, - cancelText: widget.cancelText ?? localizations.cancelButtonLabel, - helpText: widget.helpText ?? localizations.dateRangePickerHelpText, - ); - final DialogThemeData dialogTheme = Theme.of(context).dialogTheme; - size = orientation == Orientation.portrait - ? _inputPortraitDialogSize - : _inputRangeLandscapeDialogSize; - insetPadding = - const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0); - shape = dialogTheme.shape; - elevation = dialogTheme.elevation ?? 24; - break; - } - - return Dialog( - insetPadding: insetPadding, - shape: shape, - elevation: elevation, - clipBehavior: Clip.antiAlias, - child: AnimatedContainer( - width: size.width, - height: size.height, - duration: _dialogSizeAnimationDuration, - curve: Curves.easeIn, - child: MediaQuery( - data: MediaQuery.of(context).copyWith( - textScaleFactor: textScaleFactor, - ), - child: Builder(builder: (BuildContext context) { - return contents; - }), - ), - ), - ); - } -} - -class _CalendarRangePickerDialog extends StatelessWidget { - const _CalendarRangePickerDialog({ - super.key, - required this.selectedStartDate, - required this.selectedEndDate, - required this.firstDate, - required this.lastDate, - required this.currentDate, - required this.onStartDateChanged, - required this.onEndDateChanged, - required this.onConfirm, - required this.onCancel, - required this.confirmText, - required this.helpText, - this.entryModeButton, - }); - - final DateTime? selectedStartDate; - final DateTime? selectedEndDate; - final DateTime firstDate; - final DateTime lastDate; - final DateTime? currentDate; - final ValueChanged onStartDateChanged; - final ValueChanged onEndDateChanged; - final VoidCallback? onConfirm; - final VoidCallback? onCancel; - final String confirmText; - final String helpText; - final Widget? entryModeButton; - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final Orientation orientation = MediaQuery.of(context).orientation; - final TextTheme textTheme = theme.textTheme; - final Color headerForeground = colorScheme.brightness == Brightness.light - ? colorScheme.onPrimary - : colorScheme.onSurface; - final Color headerDisabledForeground = headerForeground.withOpacity(0.38); - final String startDateText = _formatRangeStartDate( - localizations, selectedStartDate, selectedEndDate); - final String endDateText = _formatRangeEndDate( - localizations, selectedStartDate, selectedEndDate, DateTime.now()); - final TextStyle? headlineStyle = textTheme.headlineSmall; - final TextStyle? startDateStyle = headlineStyle?.apply( - color: selectedStartDate != null - ? headerForeground - : headerDisabledForeground, - ); - final TextStyle? endDateStyle = headlineStyle?.apply( - color: - selectedEndDate != null ? headerForeground : headerDisabledForeground, - ); - final TextStyle saveButtonStyle = textTheme.titleMedium!.apply( - color: onConfirm != null ? headerForeground : headerDisabledForeground, - ); - - return SafeArea( - top: false, - left: false, - right: false, - child: Scaffold( - appBar: AppBar( - leading: CloseButton( - onPressed: onCancel, - ), - actions: [ - if (orientation == Orientation.landscape && entryModeButton != null) - entryModeButton!, - TextButton( - onPressed: onConfirm, - child: Text(confirmText, style: saveButtonStyle), - ), - const SizedBox(width: 8), - ], - bottom: PreferredSize( - preferredSize: const Size(double.infinity, 64), - child: Row(children: [ - SizedBox( - width: MediaQuery.of(context).size.width < 360 ? 42 : 72), - Expanded( - child: Semantics( - label: '$helpText $startDateText to $endDateText', - excludeSemantics: true, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - helpText, - style: textTheme.bodyMedium!.apply( - color: headerForeground, - ), - ), - const SizedBox(height: 8), - Row( - children: [ - Text( - startDateText, - style: startDateStyle, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - Text( - ' – ', - style: startDateStyle, - ), - Flexible( - child: Text( - endDateText, - style: endDateStyle, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ), - ], - ), - const SizedBox(height: 16), - ], - ), - ), - ), - if (orientation == Orientation.portrait && - entryModeButton != null) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0), - child: entryModeButton, - ), - ]), - ), - ), - body: _CalendarDateRangePicker( - initialStartDate: selectedStartDate, - initialEndDate: selectedEndDate, - firstDate: firstDate, - lastDate: lastDate, - currentDate: currentDate, - onStartDateChanged: onStartDateChanged, - onEndDateChanged: onEndDateChanged, - ), - ), - ); - } -} - -const Duration _monthScrollDuration = Duration(milliseconds: 200); - -const double _monthItemHeaderHeight = 58.0; -const double _monthItemFooterHeight = 12.0; -const double _monthItemRowHeight = 42.0; -const double _monthItemSpaceBetweenRows = 8.0; -const double _horizontalPadding = 8.0; -const double _maxCalendarWidthLandscape = 384.0; -const double _maxCalendarWidthPortrait = 480.0; - -/// Displays a scrollable calendar grid that allows a user to select a range -/// of dates. -class _CalendarDateRangePicker extends StatefulWidget { - /// Creates a scrollable calendar grid for picking date ranges. - _CalendarDateRangePicker({ - DateTime? initialStartDate, - DateTime? initialEndDate, - required DateTime firstDate, - required DateTime lastDate, - DateTime? currentDate, - required this.onStartDateChanged, - required this.onEndDateChanged, - }) : initialStartDate = initialStartDate != null - ? DateUtils.dateOnly(initialStartDate) - : null, - initialEndDate = - initialEndDate != null ? DateUtils.dateOnly(initialEndDate) : null, - assert(firstDate != null), - assert(lastDate != null), - firstDate = DateUtils.dateOnly(firstDate), - lastDate = DateUtils.dateOnly(lastDate), - currentDate = DateUtils.dateOnly(currentDate ?? DateTime.now()) { - assert( - this.initialStartDate == null || - this.initialEndDate == null || - !this.initialStartDate!.isAfter(initialEndDate!), - 'initialStartDate must be on or before initialEndDate.', - ); - assert( - !this.lastDate.isBefore(this.firstDate), - 'firstDate must be on or before lastDate.', - ); - } - - /// The [DateTime] that represents the start of the initial date range selection. - final DateTime? initialStartDate; - - /// The [DateTime] that represents the end of the initial date range selection. - final DateTime? initialEndDate; - - /// The earliest allowable [DateTime] that the user can select. - final DateTime firstDate; - - /// The latest allowable [DateTime] that the user can select. - final DateTime lastDate; - - /// The [DateTime] representing today. It will be highlighted in the day grid. - final DateTime currentDate; - - /// Called when the user changes the start date of the selected range. - final ValueChanged? onStartDateChanged; - - /// Called when the user changes the end date of the selected range. - final ValueChanged? onEndDateChanged; - - @override - _CalendarDateRangePickerState createState() => - _CalendarDateRangePickerState(); -} - -class _CalendarDateRangePickerState extends State<_CalendarDateRangePicker> { - final GlobalKey _scrollViewKey = GlobalKey(); - DateTime? _startDate; - DateTime? _endDate; - int _initialMonthIndex = 0; - late ScrollController _controller; - late bool _showWeekBottomDivider; - - @override - void initState() { - super.initState(); - _controller = ScrollController(); - _controller.addListener(_scrollListener); - - _startDate = widget.initialStartDate; - _endDate = widget.initialEndDate; - - // Calculate the index for the initially displayed month. This is needed to - // divide the list of months into two `SliverList`s. - final DateTime initialDate = widget.initialStartDate ?? widget.currentDate; - if (!initialDate.isBefore(widget.firstDate) && - !initialDate.isAfter(widget.lastDate)) { - _initialMonthIndex = DateUtils.monthDelta(widget.firstDate, initialDate); - } - - _showWeekBottomDivider = _initialMonthIndex != 0; - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - - void _scrollListener() { - if (_controller.offset <= _controller.position.minScrollExtent) { - setState(() { - _showWeekBottomDivider = false; - }); - } else if (!_showWeekBottomDivider) { - setState(() { - _showWeekBottomDivider = true; - }); - } - } - - int get _numberOfMonths => - DateUtils.monthDelta(widget.firstDate, widget.lastDate) + 1; - - void _vibrate() { - switch (Theme.of(context).platform) { - case TargetPlatform.android: - case TargetPlatform.fuchsia: - HapticFeedback.vibrate(); - break; - case TargetPlatform.iOS: - case TargetPlatform.linux: - case TargetPlatform.macOS: - case TargetPlatform.windows: - break; - } - } - - // This updates the selected date range using this logic: - // - // * From the unselected state, selecting one date creates the start date. - // * If the next selection is before the start date, reset date range and - // set the start date to that selection. - // * If the next selection is on or after the start date, set the end date - // to that selection. - // * After both start and end dates are selected, any subsequent selection - // resets the date range and sets start date to that selection. - void _updateSelection(DateTime date) { - _vibrate(); - setState(() { - if (_startDate != null && - _endDate == null && - !date.isBefore(_startDate!)) { - _endDate = date; - widget.onEndDateChanged?.call(_endDate); - } else { - _startDate = date; - widget.onStartDateChanged?.call(_startDate!); - if (_endDate != null) { - _endDate = null; - widget.onEndDateChanged?.call(_endDate); - } - } - }); - } - - Widget _buildMonthItem( - BuildContext context, int index, bool beforeInitialMonth) { - final int monthIndex = beforeInitialMonth - ? _initialMonthIndex - index - 1 - : _initialMonthIndex + index; - final DateTime month = - DateUtils.addMonthsToMonthDate(widget.firstDate, monthIndex); - return Stack( - alignment: Alignment.center, - children: [ - Text( - "${month.month}", - style: TextStyle(fontSize: 200, color: Colors.grey.withOpacity(0.1)), - ), - _MonthItem( - selectedDateStart: _startDate, - selectedDateEnd: _endDate, - currentDate: widget.currentDate, - firstDate: widget.firstDate, - lastDate: widget.lastDate, - displayedMonth: month, - onChanged: _updateSelection, - ), - ], - ); - } - - @override - Widget build(BuildContext context) { - const Key sliverAfterKey = Key('sliverAfterKey'); - - return Column( - children: [ - const _DayHeaders(), - if (_showWeekBottomDivider) const Divider(height: 0), - Expanded( - child: _CalendarKeyboardNavigator( - firstDate: widget.firstDate, - lastDate: widget.lastDate, - initialFocusedDay: - _startDate ?? widget.initialStartDate ?? widget.currentDate, - // In order to prevent performance issues when displaying the - // correct initial month, 2 `SliverList`s are used to split the - // months. The first item in the second SliverList is the initial - // month to be displayed. - child: CustomScrollView( - key: _scrollViewKey, - controller: _controller, - center: sliverAfterKey, - slivers: [ - SliverList( - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) => - _buildMonthItem(context, index, true), - childCount: _initialMonthIndex, - ), - ), - SliverList( - key: sliverAfterKey, - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) => - _buildMonthItem(context, index, false), - childCount: _numberOfMonths - _initialMonthIndex, - ), - ), - ], - ), - ), - ), - ], - ); - } -} - -class _CalendarKeyboardNavigator extends StatefulWidget { - const _CalendarKeyboardNavigator({ - required this.child, - required this.firstDate, - required this.lastDate, - required this.initialFocusedDay, - }); - - final Widget child; - final DateTime firstDate; - final DateTime lastDate; - final DateTime initialFocusedDay; - - @override - _CalendarKeyboardNavigatorState createState() => - _CalendarKeyboardNavigatorState(); -} - -class _CalendarKeyboardNavigatorState - extends State<_CalendarKeyboardNavigator> { - final Map _shortcutMap = - const { - SingleActivator(LogicalKeyboardKey.arrowLeft): - DirectionalFocusIntent(TraversalDirection.left), - SingleActivator(LogicalKeyboardKey.arrowRight): - DirectionalFocusIntent(TraversalDirection.right), - SingleActivator(LogicalKeyboardKey.arrowDown): - DirectionalFocusIntent(TraversalDirection.down), - SingleActivator(LogicalKeyboardKey.arrowUp): - DirectionalFocusIntent(TraversalDirection.up), - }; - late Map> _actionMap; - late FocusNode _dayGridFocus; - TraversalDirection? _dayTraversalDirection; - DateTime? _focusedDay; - - @override - void initState() { - super.initState(); - - _actionMap = >{ - NextFocusIntent: - CallbackAction(onInvoke: _handleGridNextFocus), - PreviousFocusIntent: CallbackAction( - onInvoke: _handleGridPreviousFocus), - DirectionalFocusIntent: CallbackAction( - onInvoke: _handleDirectionFocus), - }; - _dayGridFocus = FocusNode(debugLabel: 'Day Grid'); - } - - @override - void dispose() { - _dayGridFocus.dispose(); - super.dispose(); - } - - void _handleGridFocusChange(bool focused) { - setState(() { - if (focused) { - _focusedDay ??= widget.initialFocusedDay; - } - }); - } - - /// Move focus to the next element after the day grid. - void _handleGridNextFocus(NextFocusIntent intent) { - _dayGridFocus.requestFocus(); - _dayGridFocus.nextFocus(); - } - - /// Move focus to the previous element before the day grid. - void _handleGridPreviousFocus(PreviousFocusIntent intent) { - _dayGridFocus.requestFocus(); - _dayGridFocus.previousFocus(); - } - - /// Move the internal focus date in the direction of the given intent. - /// - /// This will attempt to move the focused day to the next selectable day in - /// the given direction. If the new date is not in the current month, then - /// the page view will be scrolled to show the new date's month. - /// - /// For horizontal directions, it will move forward or backward a day (depending - /// on the current [TextDirection]). For vertical directions it will move up and - /// down a week at a time. - void _handleDirectionFocus(DirectionalFocusIntent intent) { - assert(_focusedDay != null); - setState(() { - final DateTime? nextDate = - _nextDateInDirection(_focusedDay!, intent.direction); - if (nextDate != null) { - _focusedDay = nextDate; - _dayTraversalDirection = intent.direction; - } - }); - } - - static const Map _directionOffset = - { - TraversalDirection.up: -DateTime.daysPerWeek, - TraversalDirection.right: 1, - TraversalDirection.down: DateTime.daysPerWeek, - TraversalDirection.left: -1, - }; - - int _dayDirectionOffset( - TraversalDirection traversalDirection, TextDirection textDirection) { - // Swap left and right if the text direction if RTL - if (textDirection == TextDirection.rtl) { - if (traversalDirection == TraversalDirection.left) { - traversalDirection = TraversalDirection.right; - } else if (traversalDirection == TraversalDirection.right) { - traversalDirection = TraversalDirection.left; - } - } - return _directionOffset[traversalDirection]!; - } - - DateTime? _nextDateInDirection(DateTime date, TraversalDirection direction) { - final TextDirection textDirection = Directionality.of(context); - final DateTime nextDate = DateUtils.addDaysToDate( - date, _dayDirectionOffset(direction, textDirection)); - if (!nextDate.isBefore(widget.firstDate) && - !nextDate.isAfter(widget.lastDate)) { - return nextDate; - } - return null; - } - - @override - Widget build(BuildContext context) { - return FocusableActionDetector( - shortcuts: _shortcutMap, - actions: _actionMap, - focusNode: _dayGridFocus, - onFocusChange: _handleGridFocusChange, - child: _FocusedDate( - date: _dayGridFocus.hasFocus ? _focusedDay : null, - scrollDirection: _dayGridFocus.hasFocus ? _dayTraversalDirection : null, - child: widget.child, - ), - ); - } -} - -/// InheritedWidget indicating what the current focused date is for its children. -/// -/// This is used by the [_MonthPicker] to let its children [_DayPicker]s know -/// what the currently focused date (if any) should be. -class _FocusedDate extends InheritedWidget { - const _FocusedDate({ - required super.child, - this.date, - this.scrollDirection, - }); - - final DateTime? date; - final TraversalDirection? scrollDirection; - - @override - bool updateShouldNotify(_FocusedDate oldWidget) { - return !DateUtils.isSameDay(date, oldWidget.date) || - scrollDirection != oldWidget.scrollDirection; - } - - static _FocusedDate? of(BuildContext context) { - return context.dependOnInheritedWidgetOfExactType<_FocusedDate>(); - } -} - -class _DayHeaders extends StatelessWidget { - const _DayHeaders(); - - /// Builds widgets showing abbreviated days of week. The first widget in the - /// returned list corresponds to the first day of week for the current locale. - /// - /// Examples: - /// - /// ``` - /// ┌ Sunday is the first day of week in the US (en_US) - /// | - /// S M T W T F S <-- the returned list contains these widgets - /// _ _ _ _ _ 1 2 - /// 3 4 5 6 7 8 9 - /// - /// ┌ But it's Monday in the UK (en_GB) - /// | - /// M T W T F S S <-- the returned list contains these widgets - /// _ _ _ _ 1 2 3 - /// 4 5 6 7 8 9 10 - /// ``` - List _getDayHeaders( - TextStyle headerStyle, MaterialLocalizations localizations) { - final List result = []; - for (int i = localizations.firstDayOfWeekIndex; true; i = (i + 1) % 7) { - final String weekday = localizations.narrowWeekdays[i]; - result.add(ExcludeSemantics( - child: Center(child: Text(weekday, style: headerStyle)), - )); - if (i == (localizations.firstDayOfWeekIndex - 1) % 7) { - break; - } - } - return result; - } - - @override - Widget build(BuildContext context) { - final ThemeData themeData = Theme.of(context); - final ColorScheme colorScheme = themeData.colorScheme; - final TextStyle textStyle = - themeData.textTheme.bodyMedium!.apply(color: colorScheme.onSurface); - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final List labels = _getDayHeaders(textStyle, localizations); - - // Add leading and trailing containers for edges of the custom grid layout. - labels.insert(0, Container()); - labels.add(Container()); - - return Container( - constraints: BoxConstraints( - maxWidth: MediaQuery.of(context).orientation == Orientation.landscape - ? _maxCalendarWidthLandscape - : _maxCalendarWidthPortrait, - maxHeight: _monthItemRowHeight, - ), - child: GridView.custom( - shrinkWrap: true, - gridDelegate: _monthItemGridDelegate, - childrenDelegate: SliverChildListDelegate( - labels, - addRepaintBoundaries: false, - ), - ), - ); - } -} - -class _MonthItemGridDelegate extends SliverGridDelegate { - const _MonthItemGridDelegate(); - - @override - SliverGridLayout getLayout(SliverConstraints constraints) { - final double tileWidth = - (constraints.crossAxisExtent - 2 * _horizontalPadding) / - DateTime.daysPerWeek; - return _MonthSliverGridLayout( - crossAxisCount: DateTime.daysPerWeek + 2, - dayChildWidth: tileWidth, - edgeChildWidth: _horizontalPadding, - reverseCrossAxis: axisDirectionIsReversed(constraints.crossAxisDirection), - ); - } - - @override - bool shouldRelayout(_MonthItemGridDelegate oldDelegate) => false; -} - -const _MonthItemGridDelegate _monthItemGridDelegate = _MonthItemGridDelegate(); - -class _MonthSliverGridLayout extends SliverGridLayout { - /// Creates a layout that uses equally sized and spaced tiles for each day of - /// the week and an additional edge tile for padding at the start and end of - /// each row. - /// - /// This is necessary to facilitate the painting of the range highlight - /// correctly. - const _MonthSliverGridLayout({ - required this.crossAxisCount, - required this.dayChildWidth, - required this.edgeChildWidth, - required this.reverseCrossAxis, - }) : assert(crossAxisCount != null && crossAxisCount > 0), - assert(dayChildWidth != null && dayChildWidth >= 0), - assert(edgeChildWidth != null && edgeChildWidth >= 0), - assert(reverseCrossAxis != null); - - /// The number of children in the cross axis. - final int crossAxisCount; - - /// The width in logical pixels of the day child widgets. - final double dayChildWidth; - - /// The width in logical pixels of the edge child widgets. - final double edgeChildWidth; - - /// Whether the children should be placed in the opposite order of increasing - /// coordinates in the cross axis. - /// - /// For example, if the cross axis is horizontal, the children are placed from - /// left to right when [reverseCrossAxis] is false and from right to left when - /// [reverseCrossAxis] is true. - /// - /// Typically set to the return value of [axisDirectionIsReversed] applied to - /// the [SliverConstraints.crossAxisDirection]. - final bool reverseCrossAxis; - - /// The number of logical pixels from the leading edge of one row to the - /// leading edge of the next row. - double get _rowHeight { - return _monthItemRowHeight + _monthItemSpaceBetweenRows; - } - - /// The height in logical pixels of the children widgets. - double get _childHeight { - return _monthItemRowHeight; - } - - @override - int getMinChildIndexForScrollOffset(double scrollOffset) { - return crossAxisCount * (scrollOffset ~/ _rowHeight); - } - - @override - int getMaxChildIndexForScrollOffset(double scrollOffset) { - final int mainAxisCount = (scrollOffset / _rowHeight).ceil(); - return math.max(0, crossAxisCount * mainAxisCount - 1); - } - - double _getCrossAxisOffset(double crossAxisStart, bool isPadding) { - if (reverseCrossAxis) { - return ((crossAxisCount - 2) * dayChildWidth + 2 * edgeChildWidth) - - crossAxisStart - - (isPadding ? edgeChildWidth : dayChildWidth); - } - return crossAxisStart; - } - - @override - SliverGridGeometry getGeometryForChildIndex(int index) { - final int adjustedIndex = index % crossAxisCount; - final bool isEdge = - adjustedIndex == 0 || adjustedIndex == crossAxisCount - 1; - final double crossAxisStart = - math.max(0, (adjustedIndex - 1) * dayChildWidth + edgeChildWidth); - - return SliverGridGeometry( - scrollOffset: (index ~/ crossAxisCount) * _rowHeight, - crossAxisOffset: _getCrossAxisOffset(crossAxisStart, isEdge), - mainAxisExtent: _childHeight, - crossAxisExtent: isEdge ? edgeChildWidth : dayChildWidth, - ); - } - - @override - double computeMaxScrollOffset(int childCount) { - assert(childCount >= 0); - final int mainAxisCount = ((childCount - 1) ~/ crossAxisCount) + 1; - final double mainAxisSpacing = _rowHeight - _childHeight; - return _rowHeight * mainAxisCount - mainAxisSpacing; - } -} - -/// Displays the days of a given month and allows choosing a date range. -/// -/// The days are arranged in a rectangular grid with one column for each day of -/// the week. -class _MonthItem extends StatefulWidget { - /// Creates a month item. - _MonthItem({ - required this.selectedDateStart, - required this.selectedDateEnd, - required this.currentDate, - required this.onChanged, - required this.firstDate, - required this.lastDate, - required this.displayedMonth, - this.dragStartBehavior = DragStartBehavior.start, - }) : assert(firstDate != null), - assert(lastDate != null), - assert(!firstDate.isAfter(lastDate)), - assert(selectedDateStart == null || - !selectedDateStart.isBefore(firstDate)), - assert(selectedDateEnd == null || !selectedDateEnd.isBefore(firstDate)), - assert( - selectedDateStart == null || !selectedDateStart.isAfter(lastDate)), - assert(selectedDateEnd == null || !selectedDateEnd.isAfter(lastDate)), - assert(selectedDateStart == null || - selectedDateEnd == null || - !selectedDateStart.isAfter(selectedDateEnd)), - assert(currentDate != null), - assert(onChanged != null), - assert(displayedMonth != null), - assert(dragStartBehavior != null); - - /// The currently selected start date. - /// - /// This date is highlighted in the picker. - final DateTime? selectedDateStart; - - /// The currently selected end date. - /// - /// This date is highlighted in the picker. - final DateTime? selectedDateEnd; - - /// The current date at the time the picker is displayed. - final DateTime currentDate; - - /// Called when the user picks a day. - final ValueChanged onChanged; - - /// The earliest date the user is permitted to pick. - final DateTime firstDate; - - /// The latest date the user is permitted to pick. - final DateTime lastDate; - - /// The month whose days are displayed by this picker. - final DateTime displayedMonth; - - /// Determines the way that drag start behavior is handled. - /// - /// If set to [DragStartBehavior.start], the drag gesture used to scroll a - /// date picker wheel will begin at the position where the drag gesture won - /// the arena. If set to [DragStartBehavior.down] it will begin at the position - /// where a down event is first detected. - /// - /// In general, setting this to [DragStartBehavior.start] will make drag - /// animation smoother and setting it to [DragStartBehavior.down] will make - /// drag behavior feel slightly more reactive. - /// - /// By default, the drag start behavior is [DragStartBehavior.start]. - /// - /// See also: - /// - /// * [DragGestureRecognizer.dragStartBehavior], which gives an example for - /// the different behaviors. - final DragStartBehavior dragStartBehavior; - - @override - _MonthItemState createState() => _MonthItemState(); -} - -class _MonthItemState extends State<_MonthItem> { - /// List of [FocusNode]s, one for each day of the month. - late List _dayFocusNodes; - - @override - void initState() { - super.initState(); - final int daysInMonth = DateUtils.getDaysInMonth( - widget.displayedMonth.year, widget.displayedMonth.month); - _dayFocusNodes = List.generate( - daysInMonth, - (int index) => - FocusNode(skipTraversal: true, debugLabel: 'Day ${index + 1}'), - ); - } - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - // Check to see if the focused date is in this month, if so focus it. - final DateTime? focusedDate = _FocusedDate.of(context)?.date; - if (focusedDate != null && - DateUtils.isSameMonth(widget.displayedMonth, focusedDate)) { - _dayFocusNodes[focusedDate.day - 1].requestFocus(); - } - } - - @override - void dispose() { - for (final FocusNode node in _dayFocusNodes) { - node.dispose(); - } - super.dispose(); - } - - Color _highlightColor(BuildContext context) { - return Theme.of(context).colorScheme.primary.withOpacity(0.12); - } - - void _dayFocusChanged(bool focused) { - if (focused) { - final TraversalDirection? focusDirection = - _FocusedDate.of(context)?.scrollDirection; - if (focusDirection != null) { - ScrollPositionAlignmentPolicy policy = - ScrollPositionAlignmentPolicy.explicit; - switch (focusDirection) { - case TraversalDirection.up: - case TraversalDirection.left: - policy = ScrollPositionAlignmentPolicy.keepVisibleAtStart; - break; - case TraversalDirection.right: - case TraversalDirection.down: - policy = ScrollPositionAlignmentPolicy.keepVisibleAtEnd; - break; - } - Scrollable.ensureVisible( - primaryFocus!.context!, - duration: _monthScrollDuration, - alignmentPolicy: policy, - ); - } - } - } - - Widget _buildDayItem(BuildContext context, DateTime dayToBuild, - int firstDayOffset, int daysInMonth) { - final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; - final TextTheme textTheme = theme.textTheme; - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final TextDirection textDirection = Directionality.of(context); - final Color highlightColor = _highlightColor(context); - final int day = dayToBuild.day; - - final bool isDisabled = dayToBuild.isAfter(widget.lastDate) || - dayToBuild.isBefore(widget.firstDate); - - BoxDecoration? decoration; - TextStyle? itemStyle = textTheme.bodyMedium; - - final bool isRangeSelected = - widget.selectedDateStart != null && widget.selectedDateEnd != null; - final bool isSelectedDayStart = widget.selectedDateStart != null && - dayToBuild.isAtSameMomentAs(widget.selectedDateStart!); - final bool isSelectedDayEnd = widget.selectedDateEnd != null && - dayToBuild.isAtSameMomentAs(widget.selectedDateEnd!); - final bool isInRange = isRangeSelected && - dayToBuild.isAfter(widget.selectedDateStart!) && - dayToBuild.isBefore(widget.selectedDateEnd!); - - _HighlightPainter? highlightPainter; - - if (isSelectedDayStart || isSelectedDayEnd) { - // The selected start and end dates gets a circle background - // highlight, and a contrasting text color. - itemStyle = textTheme.bodyMedium?.apply(color: colorScheme.onPrimary); - decoration = BoxDecoration( - color: colorScheme.primary, - shape: BoxShape.circle, - ); - - if (isRangeSelected && - widget.selectedDateStart != widget.selectedDateEnd) { - final _HighlightPainterStyle style = isSelectedDayStart - ? _HighlightPainterStyle.highlightTrailing - : _HighlightPainterStyle.highlightLeading; - highlightPainter = _HighlightPainter( - color: highlightColor, - style: style, - textDirection: textDirection, - ); - } - } else if (isInRange) { - // The days within the range get a light background highlight. - highlightPainter = _HighlightPainter( - color: highlightColor, - style: _HighlightPainterStyle.highlightAll, - textDirection: textDirection, - ); - } else if (isDisabled) { - itemStyle = textTheme.bodyMedium - ?.apply(color: colorScheme.onSurface.withOpacity(0.38)); - } else if (DateUtils.isSameDay(widget.currentDate, dayToBuild)) { - // The current day gets a different text color and a circle stroke - // border. - itemStyle = textTheme.bodyMedium?.apply(color: colorScheme.primary); - decoration = BoxDecoration( - border: Border.all(color: colorScheme.primary), - shape: BoxShape.circle, - ); - } - - // We want the day of month to be spoken first irrespective of the - // locale-specific preferences or TextDirection. This is because - // an accessibility user is more likely to be interested in the - // day of month before the rest of the date, as they are looking - // for the day of month. To do that we prepend day of month to the - // formatted full date. - String semanticLabel = - '${localizations.formatDecimal(day)}, ${localizations.formatFullDate(dayToBuild)}'; - if (isSelectedDayStart) { - semanticLabel = - localizations.dateRangeStartDateSemanticLabel(semanticLabel); - } else if (isSelectedDayEnd) { - semanticLabel = - localizations.dateRangeEndDateSemanticLabel(semanticLabel); - } - - Widget dayWidget = Container( - decoration: decoration, - child: Center( - child: Semantics( - label: semanticLabel, - selected: isSelectedDayStart || isSelectedDayEnd, - child: ExcludeSemantics( - child: Text(localizations.formatDecimal(day), style: itemStyle), - ), - ), - ), - ); - - if (highlightPainter != null) { - dayWidget = CustomPaint( - painter: highlightPainter, - child: dayWidget, - ); - } - - if (!isDisabled) { - dayWidget = InkResponse( - focusNode: _dayFocusNodes[day - 1], - onTap: () => widget.onChanged(dayToBuild), - radius: _monthItemRowHeight / 2 + 4, - splashColor: colorScheme.primary.withOpacity(0.38), - onFocusChange: _dayFocusChanged, - child: dayWidget, - ); - } - - return dayWidget; - } - - Widget _buildEdgeContainer(BuildContext context, bool isHighlighted) { - return Container(color: isHighlighted ? _highlightColor(context) : null); - } - - @override - Widget build(BuildContext context) { - final ThemeData themeData = Theme.of(context); - final TextTheme textTheme = themeData.textTheme; - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final int year = widget.displayedMonth.year; - final int month = widget.displayedMonth.month; - final int daysInMonth = DateUtils.getDaysInMonth(year, month); - final int dayOffset = DateUtils.firstDayOffset(year, month, localizations); - final int weeks = ((daysInMonth + dayOffset) / DateTime.daysPerWeek).ceil(); - final double gridHeight = - weeks * _monthItemRowHeight + (weeks - 1) * _monthItemSpaceBetweenRows; - final List dayItems = []; - - for (int i = 0; true; i += 1) { - // 1-based day of month, e.g. 1-31 for January, and 1-29 for February on - // a leap year. - final int day = i - dayOffset + 1; - if (day > daysInMonth) { - break; - } - if (day < 1) { - dayItems.add(Container()); - } else { - final DateTime dayToBuild = DateTime(year, month, day); - final Widget dayItem = _buildDayItem( - context, - dayToBuild, - dayOffset, - daysInMonth, - ); - dayItems.add(dayItem); - } - } - - // Add the leading/trailing edge containers to each week in order to - // correctly extend the range highlight. - final List paddedDayItems = []; - for (int i = 0; i < weeks; i++) { - final int start = i * DateTime.daysPerWeek; - final int end = math.min( - start + DateTime.daysPerWeek, - dayItems.length, - ); - final List weekList = dayItems.sublist(start, end); - - final DateTime dateAfterLeadingPadding = - DateTime(year, month, start - dayOffset + 1); - // Only color the edge container if it is after the start date and - // on/before the end date. - final bool isLeadingInRange = !(dayOffset > 0 && i == 0) && - widget.selectedDateStart != null && - widget.selectedDateEnd != null && - dateAfterLeadingPadding.isAfter(widget.selectedDateStart!) && - !dateAfterLeadingPadding.isAfter(widget.selectedDateEnd!); - weekList.insert(0, _buildEdgeContainer(context, isLeadingInRange)); - - // Only add a trailing edge container if it is for a full week and not a - // partial week. - if (end < dayItems.length || - (end == dayItems.length && - dayItems.length % DateTime.daysPerWeek == 0)) { - final DateTime dateBeforeTrailingPadding = - DateTime(year, month, end - dayOffset); - // Only color the edge container if it is on/after the start date and - // before the end date. - final bool isTrailingInRange = widget.selectedDateStart != null && - widget.selectedDateEnd != null && - !dateBeforeTrailingPadding.isBefore(widget.selectedDateStart!) && - dateBeforeTrailingPadding.isBefore(widget.selectedDateEnd!); - weekList.add(_buildEdgeContainer(context, isTrailingInRange)); - } - - paddedDayItems.addAll(weekList); - } - - final double maxWidth = - MediaQuery.of(context).orientation == Orientation.landscape - ? _maxCalendarWidthLandscape - : _maxCalendarWidthPortrait; - return Column( - children: [ - Container( - constraints: BoxConstraints(maxWidth: maxWidth), - height: _monthItemHeaderHeight, - padding: const EdgeInsets.symmetric(horizontal: 16), - alignment: AlignmentDirectional.centerStart, - child: ExcludeSemantics( - child: Text( - localizations.formatMonthYear(widget.displayedMonth), - style: textTheme.bodyMedium! - .apply(color: themeData.colorScheme.onSurface), - ), - ), - ), - Container( - constraints: BoxConstraints( - maxWidth: maxWidth, - maxHeight: gridHeight, - ), - child: GridView.custom( - physics: const NeverScrollableScrollPhysics(), - gridDelegate: _monthItemGridDelegate, - childrenDelegate: SliverChildListDelegate( - paddedDayItems, - addRepaintBoundaries: false, - ), - ), - ), - const SizedBox(height: _monthItemFooterHeight), - ], - ); - } -} - -/// Determines which style to use to paint the highlight. -enum _HighlightPainterStyle { - /// Paints nothing. - none, - - /// Paints a rectangle that occupies the leading half of the space. - highlightLeading, - - /// Paints a rectangle that occupies the trailing half of the space. - highlightTrailing, - - /// Paints a rectangle that occupies all available space. - highlightAll, -} - -/// This custom painter will add a background highlight to its child. -/// -/// This highlight will be drawn depending on the [style], [color], and -/// [textDirection] supplied. It will either paint a rectangle on the -/// left/right, a full rectangle, or nothing at all. This logic is determined by -/// a combination of the [style] and [textDirection]. -class _HighlightPainter extends CustomPainter { - _HighlightPainter({ - required this.color, - this.style = _HighlightPainterStyle.none, - this.textDirection, - }); - - final Color color; - final _HighlightPainterStyle style; - final TextDirection? textDirection; - - @override - void paint(Canvas canvas, Size size) { - if (style == _HighlightPainterStyle.none) { - return; - } - - final Paint paint = Paint() - ..color = color - ..style = PaintingStyle.fill; - - final Rect rectLeft = Rect.fromLTWH(0, 0, size.width / 2, size.height); - final Rect rectRight = - Rect.fromLTWH(size.width / 2, 0, size.width / 2, size.height); - - switch (style) { - case _HighlightPainterStyle.highlightTrailing: - canvas.drawRect( - textDirection == TextDirection.ltr ? rectRight : rectLeft, - paint, - ); - break; - case _HighlightPainterStyle.highlightLeading: - canvas.drawRect( - textDirection == TextDirection.ltr ? rectLeft : rectRight, - paint, - ); - break; - case _HighlightPainterStyle.highlightAll: - canvas.drawRect( - Rect.fromLTWH(0, 0, size.width, size.height), - paint, - ); - break; - case _HighlightPainterStyle.none: - break; - } - } - - @override - bool shouldRepaint(CustomPainter oldDelegate) => false; -} - -class _InputDateRangePickerDialog extends StatelessWidget { - const _InputDateRangePickerDialog({ - required this.selectedStartDate, - required this.selectedEndDate, - required this.currentDate, - required this.picker, - required this.onConfirm, - required this.onCancel, - required this.confirmText, - required this.cancelText, - required this.helpText, - required this.entryModeButton, - }); - - final DateTime? selectedStartDate; - final DateTime? selectedEndDate; - final DateTime? currentDate; - final Widget picker; - final VoidCallback onConfirm; - final VoidCallback onCancel; - final String? confirmText; - final String? cancelText; - final String? helpText; - final Widget? entryModeButton; - - String _formatDateRange( - BuildContext context, DateTime? start, DateTime? end, DateTime now) { - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final String startText = _formatRangeStartDate(localizations, start, end); - final String endText = _formatRangeEndDate(localizations, start, end, now); - if (start == null || end == null) { - return localizations.unspecifiedDateRange; - } - if (Directionality.of(context) == TextDirection.ltr) { - return '$startText – $endText'; - } else { - return '$endText – $startText'; - } - } - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final Orientation orientation = MediaQuery.of(context).orientation; - final TextTheme textTheme = theme.textTheme; - - final Color onPrimarySurfaceColor = - colorScheme.brightness == Brightness.light - ? colorScheme.onPrimary - : colorScheme.onSurface; - final TextStyle? dateStyle = orientation == Orientation.landscape - ? textTheme.bodySmall?.apply(color: onPrimarySurfaceColor) - : textTheme.bodyMedium?.apply(color: onPrimarySurfaceColor); - final String dateText = _formatDateRange( - context, selectedStartDate, selectedEndDate, currentDate!); - final String semanticDateText = selectedStartDate != null && - selectedEndDate != null - ? '${localizations.formatMediumDate(selectedStartDate!)} – ${localizations.formatMediumDate(selectedEndDate!)}' - : ''; - - final Widget header = _DatePickerHeader( - helpText: helpText ?? localizations.dateRangePickerHelpText, - titleText: dateText, - titleSemanticsLabel: semanticDateText, - titleStyle: dateStyle, - orientation: orientation, - isShort: orientation == Orientation.landscape, - entryModeButton: entryModeButton, - ); - - final Widget actions = Container( - alignment: AlignmentDirectional.centerEnd, - constraints: const BoxConstraints(minHeight: 52.0), - padding: const EdgeInsets.symmetric(horizontal: 8), - child: OverflowBar( - spacing: 8, - children: [ - TextButton( - onPressed: onCancel, - child: Text(cancelText ?? localizations.cancelButtonLabel), - ), - TextButton( - onPressed: onConfirm, - child: Text(confirmText ?? localizations.okButtonLabel), - ), - ], - ), - ); - - switch (orientation) { - case Orientation.portrait: - return Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - header, - Expanded(child: picker), - actions, - ], - ); - - case Orientation.landscape: - return Row( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - header, - Flexible( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Expanded(child: picker), - actions, - ], - ), - ), - ], - ); - } - } -} - -/// Provides a pair of text fields that allow the user to enter the start and -/// end dates that represent a range of dates. -class _InputDateRangePicker extends StatefulWidget { - /// Creates a row with two text fields configured to accept the start and end dates - /// of a date range. - _InputDateRangePicker({ - super.key, - DateTime? initialStartDate, - DateTime? initialEndDate, - required DateTime firstDate, - required DateTime lastDate, - required this.onStartDateChanged, - required this.onEndDateChanged, - this.helpText, - this.errorFormatText, - this.errorInvalidText, - this.errorInvalidRangeText, - this.fieldStartHintText, - this.fieldEndHintText, - this.fieldStartLabelText, - this.fieldEndLabelText, - this.autofocus = false, - this.autovalidate = false, - }) : initialStartDate = initialStartDate == null - ? null - : DateUtils.dateOnly(initialStartDate), - initialEndDate = - initialEndDate == null ? null : DateUtils.dateOnly(initialEndDate), - assert(firstDate != null), - firstDate = DateUtils.dateOnly(firstDate), - assert(lastDate != null), - lastDate = DateUtils.dateOnly(lastDate), - assert(firstDate != null), - assert(lastDate != null), - assert(autofocus != null), - assert(autovalidate != null); - - /// The [DateTime] that represents the start of the initial date range selection. - final DateTime? initialStartDate; - - /// The [DateTime] that represents the end of the initial date range selection. - final DateTime? initialEndDate; - - /// The earliest allowable [DateTime] that the user can select. - final DateTime firstDate; - - /// The latest allowable [DateTime] that the user can select. - final DateTime lastDate; - - /// Called when the user changes the start date of the selected range. - final ValueChanged? onStartDateChanged; - - /// Called when the user changes the end date of the selected range. - final ValueChanged? onEndDateChanged; - - /// The text that is displayed at the top of the header. - /// - /// This is used to indicate to the user what they are selecting a date for. - final String? helpText; - - /// Error text used to indicate the text in a field is not a valid date. - final String? errorFormatText; - - /// Error text used to indicate the date in a field is not in the valid range - /// of [firstDate] - [lastDate]. - final String? errorInvalidText; - - /// Error text used to indicate the dates given don't form a valid date - /// range (i.e. the start date is after the end date). - final String? errorInvalidRangeText; - - /// Hint text shown when the start date field is empty. - final String? fieldStartHintText; - - /// Hint text shown when the end date field is empty. - final String? fieldEndHintText; - - /// Label used for the start date field. - final String? fieldStartLabelText; - - /// Label used for the end date field. - final String? fieldEndLabelText; - - /// {@macro flutter.widgets.editableText.autofocus} - final bool autofocus; - - /// If true, this the date fields will validate and update their error text - /// immediately after every change. Otherwise, you must call - /// [_InputDateRangePickerState.validate] to validate. - final bool autovalidate; - - @override - _InputDateRangePickerState createState() => _InputDateRangePickerState(); -} - -/// The current state of an [_InputDateRangePicker]. Can be used to -/// [validate] the date field entries. -class _InputDateRangePickerState extends State<_InputDateRangePicker> { - late String _startInputText; - late String _endInputText; - DateTime? _startDate; - DateTime? _endDate; - late TextEditingController _startController; - late TextEditingController _endController; - String? _startErrorText; - String? _endErrorText; - bool _autoSelected = false; - - @override - void initState() { - super.initState(); - _startDate = widget.initialStartDate; - _startController = TextEditingController(); - _endDate = widget.initialEndDate; - _endController = TextEditingController(); - } - - @override - void dispose() { - _startController.dispose(); - _endController.dispose(); - super.dispose(); - } - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - if (_startDate != null) { - _startInputText = localizations.formatCompactDate(_startDate!); - final bool selectText = widget.autofocus && !_autoSelected; - _updateController(_startController, _startInputText, selectText); - _autoSelected = selectText; - } - - if (_endDate != null) { - _endInputText = localizations.formatCompactDate(_endDate!); - _updateController(_endController, _endInputText, false); - } - } - - /// Validates that the text in the start and end fields represent a valid - /// date range. - /// - /// Will return true if the range is valid. If not, it will - /// return false and display an appropriate error message under one of the - /// text fields. - bool validate() { - String? startError = _validateDate(_startDate); - final String? endError = _validateDate(_endDate); - if (startError == null && endError == null) { - if (_startDate!.isAfter(_endDate!)) { - startError = widget.errorInvalidRangeText ?? - MaterialLocalizations.of(context).invalidDateRangeLabel; - } - } - setState(() { - _startErrorText = startError; - _endErrorText = endError; - }); - return startError == null && endError == null; - } - - DateTime? _parseDate(String? text) { - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - return localizations.parseCompactDate(text); - } - - String? _validateDate(DateTime? date) { - if (date == null) { - return widget.errorFormatText ?? - MaterialLocalizations.of(context).invalidDateFormatLabel; - } else if (date.isBefore(widget.firstDate) || - date.isAfter(widget.lastDate)) { - return widget.errorInvalidText ?? - MaterialLocalizations.of(context).dateOutOfRangeLabel; - } - return null; - } - - void _updateController( - TextEditingController controller, String text, bool selectText) { - TextEditingValue textEditingValue = controller.value.copyWith(text: text); - if (selectText) { - textEditingValue = textEditingValue.copyWith( - selection: TextSelection( - baseOffset: 0, - extentOffset: text.length, - )); - } - controller.value = textEditingValue; - } - - void _handleStartChanged(String text) { - setState(() { - _startInputText = text; - _startDate = _parseDate(text); - widget.onStartDateChanged?.call(_startDate); - }); - if (widget.autovalidate) { - validate(); - } - } - - void _handleEndChanged(String text) { - setState(() { - _endInputText = text; - _endDate = _parseDate(text); - widget.onEndDateChanged?.call(_endDate); - }); - if (widget.autovalidate) { - validate(); - } - } - - @override - Widget build(BuildContext context) { - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final InputDecorationThemeData inputTheme = - Theme.of(context).inputDecorationTheme; - return Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - child: TextField( - controller: _startController, - decoration: InputDecoration( - border: inputTheme.border ?? const UnderlineInputBorder(), - filled: inputTheme.filled, - hintText: widget.fieldStartHintText ?? localizations.dateHelpText, - labelText: widget.fieldStartLabelText ?? - localizations.dateRangeStartLabel, - errorText: _startErrorText, - ), - keyboardType: TextInputType.datetime, - onChanged: _handleStartChanged, - autofocus: widget.autofocus, - ), - ), - const SizedBox(width: 8), - Expanded( - child: TextField( - controller: _endController, - decoration: InputDecoration( - border: inputTheme.border ?? const UnderlineInputBorder(), - filled: inputTheme.filled, - hintText: widget.fieldEndHintText ?? localizations.dateHelpText, - labelText: - widget.fieldEndLabelText ?? localizations.dateRangeEndLabel, - errorText: _endErrorText, - ), - keyboardType: TextInputType.datetime, - onChanged: _handleEndChanged, - ), - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_de_DE.json deleted file mode 100644 index dd5215012..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "Dekorierte Box-Übergang", - "info": "Eine Unterklasse von AnimatedWidget, die einen Animator vom Typ Decorated verwendet, um eine Übergangsanimation zwischen zwei Decorated-Objekten für die Kindkomponente durchzuführen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DecoratedBoxTransition", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【position】 : Vordergrund-/Hintergrundfarbe 【DecorationPosition】", - "【decoration】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_en_US.json deleted file mode 100644 index 49466d8c5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "Decoration Transition", - "info": "A subclass of AnimatedWidget that uses a Decorated type animator to allow child components to transition between two Decorated objects.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DecoratedBoxTransition", - "desc": [ - "【child】: Child component 【Widget】", - "【position】: Foreground/Background color 【DecorationPosition】", - "【decoration】: Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_es_ES.json deleted file mode 100644 index a8cbf440a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "Transición de caja decorada", - "info": "Subclase de AnimatedWidget, utiliza un animador de tipo Decorated para permitir que los componentes secundarios realicen una animación de transición entre dos objetos Decorated.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DecoratedBoxTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【position】 : Color de primer plano/fondo 【DecorationPosition】", - "【decoration】 : Animación 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_fr_FR.json deleted file mode 100644 index 20bd975fd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "Transition de boîte décorée", - "info": "Sous-classe de AnimatedWidget, utilise un animateur de type Decorated pour permettre à un composant enfant de faire une transition animée entre deux objets Decorated.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DecoratedBoxTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【position】 : Couleur de premier plan/arrière-plan 【DecorationPosition】", - "【decoration】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_it_IT.json deleted file mode 100644 index bad2bb5ee..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "Transizione Decorata", - "info": "Sottoclasse di AnimatedWidget, utilizza un animatore di tipo Decorated per far sì che i componenti figli eseguano un'animazione di transizione tra due oggetti Decorated.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di DecoratedBoxTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【position】 : Colore di primo piano/sfondo 【DecorationPosition】", - "【decoration】 : Animazione 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ja_JP.json deleted file mode 100644 index 7b3d731a5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "装飾変換", - "info": "AnimatedWidgetのサブクラスで、Decoratedタイプのアニメーターを使用して、子コンポーネントが2つのDecoratedオブジェクト間で遷移アニメーションを行うようにします。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DecoratedBoxTransitionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【position】 : 前景/背景色 【DecorationPosition】", - "【decoration】 : アニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ko_KR.json deleted file mode 100644 index 856874152..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "장식 변환", - "info": "AnimatedWidget의 하위 클래스, Decorated 타입의 애니메이터를 사용하여 자식 위젯이 두 Decorated 객체 간에 전환 애니메이션을 수행합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DecoratedBoxTransition 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【position】 : 전경/배경색 【DecorationPosition】", - "【decoration】 : 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_pt_PT.json deleted file mode 100644 index 1cd6907fb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "Transição Decorada", - "info": "Subclasse de AnimatedWidget, usa um animador do tipo Decorated para permitir que os componentes filhos realizem uma animação de transição entre dois objetos Decorated.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do DecoratedBoxTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【position】 : Cor de frente/fundo 【DecorationPosition】", - "【decoration】 : Animação 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ru_RU.json deleted file mode 100644 index 665d61b51..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "Декорированный переход", - "info": "Подкласс AnimatedWidget, использует аниматор типа Decorated для создания переходной анимации между двумя объектами Decorated для дочерних компонентов.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DecoratedBoxTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【position】 : Передний/фоновый цвет 【DecorationPosition】", - "【decoration】 : Анимация 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_zh-CN.json deleted file mode 100644 index 6731cee6c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "装饰变换", - "info": "AnimatedWidget的子类,使用Decorated类型的动画器让子组件在两个Decorated对象之间进行过渡动画。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DecoratedBoxTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【position】 : 前/背景色 【DecorationPosition】", - "【decoration】 : 动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/node1_base.dart deleted file mode 100644 index 1eced4434..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/node1_base.dart +++ /dev/null @@ -1,68 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomDecoratedBoxTransition extends StatefulWidget { - const CustomDecoratedBoxTransition({Key? key}) : super(key: key); - - @override - _CustomDecoratedBoxTransitionState createState() => - _CustomDecoratedBoxTransitionState(); -} - -class _CustomDecoratedBoxTransitionState - extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 1), - ); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: SizedBox( - width: 200, - height: 100, - child: DecoratedBoxTransition( - position: DecorationPosition.background, - decoration: DecorationTween( - begin: const BoxDecoration( - color: Colors.greenAccent, - borderRadius: BorderRadius.all(Radius.circular(50)), - boxShadow: [ - BoxShadow( - offset: Offset(1, 1), - color: Colors.purple, - blurRadius: 3, - spreadRadius: 1) - ]), - end: const BoxDecoration( - color: Colors.orange, - borderRadius: BorderRadius.all(Radius.circular(10)), - boxShadow: [ - BoxShadow( - offset: Offset(1, 1), - color: Colors.blue, - blurRadius: 1, - spreadRadius: 0) - ])).animate(_ctrl), - child: const Icon(Icons.android, color: Colors.white, size: 60), - ), - )); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_de_DE.json deleted file mode 100644 index c4196581d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "Standard-Tab-Controller", - "info": "Bei der Verwendung von TabBar und TabBarView ist ein gemeinsamer Controller erforderlich, um die Steuerung der Tabs und Seiten zu implementieren. DefaultTabController bietet einen Standard-Controller, wenn kein Controller angegeben ist, und vereinfacht die Verwendung.", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DefaultTabController", - "desc": [ - "【length】 : Anzahl der Tabs 【int】", - "【initialIndex】 : Anfänglicher Tab-Index 【int】", - "【child】 : Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_en_US.json deleted file mode 100644 index 29fa51ca6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "Default Tab Controller", - "info": "When using TabBar and TabBarView, the same controller is needed to control both the tabs and the pages. DefaultTabController provides a default controller when no controller is specified, simplifying usage.", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DefaultTabController", - "desc": [ - "【length】: Number of tabs 【int】", - "【initialIndex】: Initial tab index 【int】", - "【child】: Component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_es_ES.json deleted file mode 100644 index b21625e15..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "Controlador de pestañas predeterminado", - "info": "Al usar TabBar y TabBarView, se necesita el mismo controlador para controlar las pestañas y las páginas. DefaultTabController proporciona un controlador predeterminado cuando no se especifica uno, simplificando su uso.", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DefaultTabController", - "desc": [ - "【length】 : Número de pestañas 【int】", - "【initialIndex】 : Índice inicial de la pestaña 【int】", - "【child】 : Componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_fr_FR.json deleted file mode 100644 index 6429435c9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "Contrôleur d'onglets par défaut", - "info": "Lors de l'utilisation de TabBar et TabBarView, il est nécessaire qu'un même contrôleur gère à la fois les onglets et les pages. DefaultTabController fournit un contrôleur par défaut lorsqu'aucun contrôleur n'est spécifié, simplifiant ainsi son utilisation.", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DefaultTabController", - "desc": [ - "【length】 : Nombre d'onglets 【int】", - "【initialIndex】 : Index de l'onglet initial 【int】", - "【child】 : Composant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_it_IT.json deleted file mode 100644 index 53653e081..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "Controllore di schede predefinito", - "info": "Quando si utilizza TabBar e TabBarView, è necessario che lo stesso controllore gestisca sia le schede che le pagine. DefaultTabController fornisce un controllore predefinito quando non ne viene specificato uno, semplificando l'uso.", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di DefaultTabController", - "desc": [ - "【length】 : Numero di schede 【int】", - "【initialIndex】 : Indice della scheda iniziale 【int】", - "【child】 : Componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ja_JP.json deleted file mode 100644 index a78257bad..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "デフォルトタブコントローラー", - "info": "TabBarとTabBarViewを使用する場合、同じコントローラーでタブとページの制御を実現する必要があります。DefaultTabControllerは、コントローラーが指定されていない場合にデフォルトのコントローラーを提供し、使用を簡素化します。", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTabControllerの基本的な使用法", - "desc": [ - "【length】 : タブの数 【int】", - "【initialIndex】 : 初期タブインデックス 【int】", - "【child】 : コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ko_KR.json deleted file mode 100644 index 5608a9a3f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "기본 탭 컨트롤러", - "info": "TabBar와 TabBarView를 사용할 때, 동일한 컨트롤러가 탭과 페이지를 제어해야 합니다. DefaultTabController는 컨트롤러가 지정되지 않았을 때 기본 컨트롤러를 제공하여 사용을 단순화합니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTabController 기본 사용", - "desc": [ - "【length】 : 탭 수 【int】", - "【initialIndex】 : 초기 탭 인덱스 【int】", - "【child】 : 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_pt_PT.json deleted file mode 100644 index 010a806d5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "Controlador de Abas Padrão", - "info": "Ao usar TabBar e TabBarView, é necessário que o mesmo controlador implemente o controle das abas e das páginas. O DefaultTabController fornece um controlador padrão quando nenhum controlador é especificado, simplificando o uso.", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DefaultTabController", - "desc": [ - "【length】 : Número de abas 【int】", - "【initialIndex】 : Índice inicial da aba 【int】", - "【child】 : Componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ru_RU.json deleted file mode 100644 index 09e795e21..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "Контроллер вкладок по умолчанию", - "info": "При использовании TabBar и TabBarView требуется один и тот же контроллер для управления вкладками и страницами. DefaultTabController предоставляет контроллер по умолчанию, если он не указан, что упрощает использование.", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DefaultTabController", - "desc": [ - "【length】 : Количество вкладок 【int】", - "【initialIndex】 : Начальный индекс вкладки 【int】", - "【child】 : Компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_zh-CN.json deleted file mode 100644 index 51d6dc7e1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "默认页签控制器", - "info": "在使用 TabBar 和 TabBarView 时,需要同一个控制器实现页签和页面的控制。DefaultTabController 会在未指定控制器时提供默认控制器,简化使用。", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTabController基本使用", - "desc": [ - "【length】 : 页签数量 【int】", - "【initialIndex】 : 初始页签索引 【int】", - "【child】 : 组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/node1_base.dart deleted file mode 100644 index 3e04b5156..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/node1_base.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class DefaultTabControllerDemo extends StatelessWidget { - final List tabs = const [ - Tab(text: '青眼白龙'), - Tab(text: '黑魔术师'), - Tab(text: '混沌战士'), - ]; - - const DefaultTabControllerDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: DefaultTabController( - length: tabs.length, - child: Scaffold( - appBar: AppBar( - title: const Text("DefaultTabController"), - bottom: TabBar( - tabs: tabs, - ), - ), - body: TabBarView( - children: tabs.map((Tab tab) { - return Center( - child: Text( - '${tab.text}', - style: const TextStyle(fontSize: 20), - ), - ); - }).toList(), - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_de_DE.json deleted file mode 100644 index 34d04c2b0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "Textstilübergang", - "info": "Eine Unterklasse von AnimatedWidget, die einen Animator vom Typ TextStyle verwendet, um Textkomponenten zwischen zwei TextStyle-Objekten zu animieren.", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DefaultTextStyleTransition", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【textAlign】 : Textausrichtung 【TextAlign】", - "【softWrap】 : Umbrüche aktivieren 【bool】", - "【maxLines】 : Maximale Zeilenanzahl 【int】", - "【overflow】 : Überlaufmodus 【TextOverflow】", - "【style】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_en_US.json deleted file mode 100644 index 2225e1be8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "Text Style Transition", - "info": "A subclass of AnimatedWidget, using a TextStyle type animator to transition text components between two TextStyle objects.", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DefaultTextStyleTransition", - "desc": [ - "【child】 : Child component 【Widget】", - "【textAlign】 : Text alignment 【TextAlign】", - "【softWrap】 : Whether to wrap 【bool】", - "【maxLines】 : Maximum number of lines 【int】", - "【overflow】 : Overflow mode 【TextOverflow】", - "【style】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_es_ES.json deleted file mode 100644 index 2e865c013..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "Transición de Estilo de Texto", - "info": "Subclase de AnimatedWidget, utiliza un animador de tipo TextStyle para permitir que los componentes de texto realicen una transición animada entre dos objetos TextStyle.", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DefaultTextStyleTransition", - "desc": [ - "【child】 : Widget hijo 【Widget】", - "【textAlign】 : Alineación del texto 【TextAlign】", - "【softWrap】 : Si debe envolver 【bool】", - "【maxLines】 : Número máximo de líneas 【int】", - "【overflow】 : Modo de desbordamiento 【TextOverflow】", - "【style】 : Animación 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_fr_FR.json deleted file mode 100644 index 42a88a161..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "Transition de style de texte", - "info": "Sous-classe de AnimatedWidget, utilise un animateur de type TextStyle pour permettre à un composant de texte de faire une transition animée entre deux objets TextStyle.", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DefaultTextStyleTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【textAlign】 : Alignement du texte 【TextAlign】", - "【softWrap】 : Enveloppement 【bool】", - "【maxLines】 : Nombre maximum de lignes 【int】", - "【overflow】 : Mode de débordement 【TextOverflow】", - "【style】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_it_IT.json deleted file mode 100644 index 5e229f8ff..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "Transizione dello stile del testo", - "info": "Sottoclasse di AnimatedWidget, utilizza un animatore di tipo TextStyle per far sì che i componenti di testo eseguano un'animazione di transizione tra due oggetti TextStyle.", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di DefaultTextStyleTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【textAlign】 : Allineamento del testo 【TextAlign】", - "【softWrap】 : Se avvolgere 【bool】", - "【maxLines】 : Numero massimo di righe 【int】", - "【overflow】 : Modalità di overflow 【TextOverflow】", - "【style】 : Animazione 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ja_JP.json deleted file mode 100644 index 3eb5d7259..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "テキストスタイルの切り替え", - "info": "AnimatedWidgetのサブクラスで、TextStyleタイプのアニメーターを使用して、テキストコンポーネントが2つのTextStyleオブジェクト間でトランジションアニメーションを行います。", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTextStyleTransitionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【textAlign】 : テキストの配置 【TextAlign】", - "【softWrap】 : ラップするかどうか 【bool】", - "【maxLines】 : 最大行数 【int】", - "【overflow】 : オーバーフローモード 【TextOverflow】", - "【style】 : アニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ko_KR.json deleted file mode 100644 index 2e3f8d7f9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "텍스트 스타일 전환", - "info": "AnimatedWidget의 하위 클래스로, TextStyle 타입의 애니메이터를 사용하여 텍스트 컴포넌트가 두 TextStyle 객체 사이에서 전환 애니메이션을 수행합니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTextStyleTransition 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【textAlign】 : 텍스트 정렬 방식 【TextAlign】", - "【softWrap】 : 감싸기 여부 【bool】", - "【maxLines】 : 최대 줄 수 【int】", - "【overflow】 : 오버플로우 모드 【TextOverflow】", - "【style】 : 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_pt_PT.json deleted file mode 100644 index 32515881a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "Transição de Estilo de Texto", - "info": "Subclasse de AnimatedWidget, utiliza um animador do tipo TextStyle para permitir que componentes de texto façam uma transição animada entre dois objetos TextStyle.", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de DefaultTextStyleTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【textAlign】 : Alinhamento do texto 【TextAlign】", - "【softWrap】 : Se deve envolver 【bool】", - "【maxLines】 : Número máximo de linhas 【int】", - "【overflow】 : Modo de overflow 【TextOverflow】", - "【style】 : Animação 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ru_RU.json deleted file mode 100644 index 06190b7e8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "Анимация стиля текста", - "info": "Подкласс AnimatedWidget, использует аниматор типа TextStyle для создания анимации перехода между двумя объектами TextStyle в текстовых компонентах.", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DefaultTextStyleTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【textAlign】 : Выравнивание текста 【TextAlign】", - "【softWrap】 : Обернуть ли текст 【bool】", - "【maxLines】 : Максимальное количество строк 【int】", - "【overflow】 : Режим переполнения 【TextOverflow】", - "【style】 : Анимация 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_zh-CN.json deleted file mode 100644 index bd6649d12..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "文字样式变换", - "info": "AnimatedWidget的子类,使用TextStyle类型的动画器让文字组件在两个TextStyle对象之间进行过渡动画。", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTextStyleTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【textAlign】 : 文字对齐方式 【TextAlign】", - "【softWrap】 : 是否包裹 【bool】", - "【maxLines】 : 最大行数 【int】", - "【overflow】 : 溢出模式 【TextOverflow】", - "【style】 : 动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/node1_base.dart deleted file mode 100644 index da7853e0f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/node1_base.dart +++ /dev/null @@ -1,75 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomDefaultTextStyleTransition extends StatefulWidget { - const CustomDefaultTextStyleTransition({Key? key}) : super(key: key); - - @override - _CustomDefaultTextStyleTransitionState createState() => - _CustomDefaultTextStyleTransitionState(); -} - -class _CustomDefaultTextStyleTransitionState - extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 1), - ); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () { - setState(() { - _ctrl.reset(); - _ctrl.forward(); - }); - }, - child: Container( - alignment: Alignment.center, - width: 300, - height: 100, - child: DefaultTextStyleTransition( - textAlign: TextAlign.start, - softWrap: true, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyleTween( - begin: const TextStyle( - color: Colors.blue, - fontSize: 50, - shadows: [ - Shadow( - offset: Offset(1, 1), - color: Colors.black, - blurRadius: 3) - ]), - end: const TextStyle( - color: Colors.white, - fontSize: 20, - shadows: [ - Shadow( - offset: Offset(1, 1), - color: Colors.purple, - blurRadius: 3) - ])).animate(_ctrl), - child: const Text('张风捷特烈'), - ), - )); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_de_DE.json deleted file mode 100644 index cb6cb1f98..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "Wischbar", - "info": "Beim Wischen kann die untere Komponente angezeigt werden, die Wischrichtung und die seitliche Verschiebung können angegeben werden. Empfängt Rückrufe bei Bestätigung des Verschwindens und beim Verschwinden.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Dismissible", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【background】 : Linke Unterseite 【Widget】", - "【secondaryBackground】 : Rechte Unterseite 【Widget】", - "【key】 : Schlüssel 【Key】", - "【confirmDismiss】 : Bestätigungsrückruf 【DismissDirectionCallback】", - "【onDismissed】 : Rückruf beim Verschwinden 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Grundlegende Verwendung von Dismissible", - "desc": [ - "【direction】 : Richtung 【DismissDirection】", - "【crossAxisEndOffset】 : Verschiebung 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_en_US.json deleted file mode 100644 index 647ec0b09..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "Swipe to Dismiss", - "info": "When swiping, the bottom component can be displayed, and the direction of the swipe and the offset of the cross axis can be specified. Receives callbacks for confirming dismissal and when dismissed.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Dismissible", - "desc": [ - "【child】: Child component 【Widget】", - "【background】: Left bottom 【Widget】", - "【secondaryBackground】: Right bottom 【Widget】", - "【key】: Key 【Key】", - "【confirmDismiss】: Confirmation callback 【DismissDirectionCallback】", - "【onDismissed】: Dismissal callback 【DismissDirectionCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Basic Usage of Dismissible", - "desc": [ - "【direction】: Direction 【DismissDirection】", - "【crossAxisEndOffset】: Offset 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_es_ES.json deleted file mode 100644 index d128f79e1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "Deslizar para desaparecer", - "info": "Al deslizar, se puede mostrar el componente inferior. Se puede especificar la dirección del deslizamiento y el desplazamiento del eje cruzado. Recibe devoluciones de llamada de confirmación de desaparición y desaparición.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Dismissible", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【background】 : Fondo izquierdo 【Widget】", - "【secondaryBackground】 : Fondo derecho 【Widget】", - "【key】 : Clave 【Key】", - "【confirmDismiss】 : Devolución de llamada de confirmación 【DismissDirectionCallback】", - "【onDismissed】 : Devolución de llamada de desaparición 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Uso básico de Dismissible", - "desc": [ - "【direction】 : Dirección 【DismissDirection】", - "【crossAxisEndOffset】 : Desplazamiento 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_fr_FR.json deleted file mode 100644 index 03d61cd7b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "Glissement pour disparaître", - "info": "Lors du glissement, le composant inférieur peut être affiché. Il est possible de spécifier la direction du glissement et le décalage de l'axe croisé. Reçoit des rappels de confirmation de disparition et de disparition.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Dismissible", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【background】 : Fond gauche 【Widget】", - "【secondaryBackground】 : Fond droit 【Widget】", - "【key】 : Clé 【Key】", - "【confirmDismiss】 : Rappel de confirmation 【DismissDirectionCallback】", - "【onDismissed】 : Rappel de disparition 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Utilisation de base de Dismissible", - "desc": [ - "【direction】 : Direction 【DismissDirection】", - "【crossAxisEndOffset】 : Décalage 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_it_IT.json deleted file mode 100644 index 96b274752..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "Scorrimento per eliminare", - "info": "Durante lo scorrimento è possibile visualizzare il componente sottostante, è possibile specificare la direzione dello scorrimento e l'offset dell'asse trasversale. Riceve callback di conferma eliminazione e di eliminazione.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Dismissible", - "desc": [ - "【child】 : componente figlio 【Widget】", - "【background】 : fondo sinistro 【Widget】", - "【secondaryBackground】 : fondo destro 【Widget】", - "【key】 : chiave 【Key】", - "【confirmDismiss】 : callback di conferma 【DismissDirectionCallback】", - "【onDismissed】 : callback di eliminazione 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Uso di base di Dismissible", - "desc": [ - "【direction】 : direzione 【DismissDirection】", - "【crossAxisEndOffset】 : offset 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ja_JP.json deleted file mode 100644 index 4f656b32b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "スワイプで消える", - "info": "スワイプ時に下部コンポーネントを表示でき、スワイプの方向と交差軸のオフセットを指定できます。確認消失と消失時のコールバックを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Dismissibleの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【background】 : 左底 【Widget】", - "【secondaryBackground】 : 右底 【Widget】", - "【key】 : キー 【Key】", - "【confirmDismiss】 : 確認コールバック 【DismissDirectionCallback】", - "【onDismissed】 : 消失コールバック 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Dismissibleの基本使用", - "desc": [ - "【direction】 : 方向 【DismissDirection】", - "【crossAxisEndOffset】 : オフセット 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ko_KR.json deleted file mode 100644 index 9d03c0280..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "슬라이드로 사라짐", - "info": "슬라이드 시 하위 컴포넌트를 표시할 수 있으며, 슬라이드 방향과 교차 축의 오프셋을 지정할 수 있습니다. 사라짐 확인 및 사라짐 시 콜백을 받습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Dismissible 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【background】 : 왼쪽 하단 【Widget】", - "【secondaryBackground】 : 오른쪽 하단 【Widget】", - "【key】 : 키 【Key】", - "【confirmDismiss】 : 확인 콜백 【DismissDirectionCallback】", - "【onDismissed】 : 사라짐 콜백 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Dismissible 기본 사용", - "desc": [ - "【direction】 : 방향 【DismissDirection】", - "【crossAxisEndOffset】 : 오프셋 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_pt_PT.json deleted file mode 100644 index 0a9c30ace..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "Deslizar para desaparecer", - "info": "Ao deslizar, o componente inferior pode ser exibido, e a direção do deslize e o deslocamento do eixo cruzado podem ser especificados. Recebe retornos de chamada para confirmação de desaparecimento e desaparecimento.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Dismissible", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【background】 : Fundo esquerdo 【Widget】", - "【secondaryBackground】 : Fundo direito 【Widget】", - "【key】 : Chave 【Key】", - "【confirmDismiss】 : Retorno de chamada de confirmação 【DismissDirectionCallback】", - "【onDismissed】 : Retorno de chamada de desaparecimento 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Uso básico do Dismissible", - "desc": [ - "【direction】 : Direção 【DismissDirection】", - "【crossAxisEndOffset】 : Deslocamento 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ru_RU.json deleted file mode 100644 index 128c3c9f2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "Скользящее исчезновение", - "info": "При скольжении можно отобразить компонент внизу, можно указать направление скольжения и смещение по поперечной оси. Получает обратные вызовы при подтверждении исчезновения и исчезновении.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Dismissible", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【background】 : Левый низ 【Widget】", - "【secondaryBackground】 : Правый низ 【Widget】", - "【key】 : Ключ 【Key】", - "【confirmDismiss】 : Обратный вызов подтверждения 【DismissDirectionCallback】", - "【onDismissed】 : Обратный вызов исчезновения 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Основное использование Dismissible", - "desc": [ - "【direction】 : Направление 【DismissDirection】", - "【crossAxisEndOffset】 : Смещение 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_zh-CN.json deleted file mode 100644 index f4f9ae05c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "滑动消失", - "info": "滑动时可显示底部组件,可指定滑动的方向和交叉轴的偏移量。接收确认消失和消失时的回调。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Dismissible基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【background】 : 左底 【Widget】", - "【secondaryBackground】 : 右底 【Widget】", - "【key】 : 键 【Key】", - "【confirmDismiss】 : 确认回调 【DismissDirectionCallback】", - "【onDismissed】 : 消失回调 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Dismissible基本使用", - "desc": [ - "【direction】 : 方向 【DismissDirection】", - "【crossAxisEndOffset】 : 偏移 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/node1_base.dart deleted file mode 100644 index 06622dddb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/node1_base.dart +++ /dev/null @@ -1,87 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomDismissible extends StatefulWidget { - const CustomDismissible({Key? key}) : super(key: key); - - @override - _CustomDismissibleState createState() => _CustomDismissibleState(); -} - -class _CustomDismissibleState extends State { - final List data = [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ListView( - padding: const EdgeInsets.symmetric(horizontal: 5), - children: data.map((color) => _buildItem(color)).toList(), - ), - ); - } - - Widget _buildItem(Color color) { - return Dismissible( - background: Container( - color: Colors.green, - alignment: const Alignment(-0.9, 0), - child: const Icon( - Icons.check, - color: Colors.white, - ), - ), - secondaryBackground: Container( - alignment: const Alignment(0.9, 0), - child: const Icon( - Icons.close, - color: Colors.white, - ), - color: Colors.red, - ), - key: ValueKey(color), - onDismissed: (d) { - data.remove(color); - }, - confirmDismiss: (e) async { - if (e == DismissDirection.endToStart) { - return true; - } else { - return false; - } - }, - child: Container( - alignment: Alignment.center, - height: 50, - color: color, - child: Text( - colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]), - ), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/node2_direction.dart b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/node2_direction.dart deleted file mode 100644 index 66ee53a01..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/node2_direction.dart +++ /dev/null @@ -1,99 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class DirectionDismissible extends StatefulWidget { - const DirectionDismissible({Key? key}) : super(key: key); - - @override - _CustomDirectionDismissibleState createState() => - _CustomDirectionDismissibleState(); -} - -class _CustomDirectionDismissibleState extends State { - final List data = [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ListView( - scrollDirection: Axis.horizontal, - padding: const EdgeInsets.symmetric(horizontal: 5), - children: data.map((color) => _buildItem(color)).toList(), - ), - ); - } - - Widget _buildItem(Color color) { - return Dismissible( - direction: DismissDirection.vertical, - background: Container( - color: Colors.green, - alignment: const Alignment( - 0, - -0.9, - ), - child: const Icon( - Icons.check, - color: Colors.white, - ), - ), - crossAxisEndOffset: 0.5, - secondaryBackground: Container( - alignment: const Alignment( - 0, - 0.9, - ), - child: const Icon( - Icons.close, - color: Colors.white, - ), - color: Colors.red, - ), - key: ValueKey(color), - onDismissed: (d) { - data.remove(color); - }, - confirmDismiss: (e) async { - print(e); - if (e == DismissDirection.up) { - return true; - } else { - return false; - } - }, - child: Container( - alignment: Alignment.center, - width: 80, - color: color, - child: Text( - colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]), - ), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_de_DE.json deleted file mode 100644 index 81b99c4f7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "Ziel zum Ziehen", - "info": "Ein Zielbereich zum Ziehen, der Informationen von der Draggable-Komponente empfangen kann. Kann Rückrufe beim Ziehen erhalten.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DragTarget", - "desc": [ - "【builder】 : Komponentenkonstruktor 【DragTargetBuilder】", - "【onWillAccept】 : Beim Ziehen 【Function(T)】", - "【onAccept】 : Ziehen erfolgreich 【Function(T)】", - "【onLeave】 : Ziehen und Loslassen 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_en_US.json deleted file mode 100644 index c78436447..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "Drag Target", - "info": "A target area for dragging, which can receive information from the Draggable component. It can get callbacks during dragging.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DragTarget", - "desc": [ - "【builder】: Component builder 【DragTargetBuilder】", - "【onWillAccept】: When dragging in 【Function(T)】", - "【onAccept】: Drag success 【Function(T)】", - "【onLeave】: Drag in and then out 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_es_ES.json deleted file mode 100644 index 859043849..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "Objetivo de Arrastrar", - "info": "Un área objetivo para arrastrar, que puede recibir información del componente Draggable. Puede obtener devoluciones de llamada durante el arrastre.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de DragTarget", - "desc": [ - "【builder】 : Constructor del componente 【DragTargetBuilder】", - "【onWillAccept】 : Al arrastrar hacia adentro 【Function(T)】", - "【onAccept】 : Arrastre exitoso 【Function(T)】", - "【onLeave】 : Arrastrar hacia adentro y luego hacia afuera 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_fr_FR.json deleted file mode 100644 index 6d06cb8a8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "Cible de glisser-déposer", - "info": "Une zone cible pour le glisser-déposer, capable de recevoir des informations du composant Draggable. Peut obtenir des rappels lors du glisser-déposer.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DragTarget", - "desc": [ - "【builder】 : Constructeur de composant 【DragTargetBuilder】", - "【onWillAccept】 : Lors du glissement 【Function(T)】", - "【onAccept】 : Glisser-déposer réussi 【Function(T)】", - "【onLeave】 : Glisser-déposer puis sortir 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_it_IT.json deleted file mode 100644 index 04c0e0083..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "Obiettivo di trascinamento", - "info": "Un'area di destinazione per il trascinamento, in grado di ricevere informazioni dal componente Draggable. È possibile ottenere callback durante il trascinamento.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di DragTarget", - "desc": [ - "【builder】 : Costruttore del componente 【DragTargetBuilder】", - "【onWillAccept】 : Durante il trascinamento 【Function(T)】", - "【onAccept】 : Trascinamento riuscito 【Function(T)】", - "【onLeave】 : Trascinato e poi rilasciato 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ja_JP.json deleted file mode 100644 index 60747d786..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "ドラッグターゲット", - "info": "ドラッグ可能なコンポーネントの情報を受け取るためのドラッグターゲットエリアです。ドラッグ時のコールバックを取得できます。", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DragTargetの基本使用", - "desc": [ - "【builder】 : コンポーネントビルダー 【DragTargetBuilder】", - "【onWillAccept】 : ドラッグイン時 【Function(T)】", - "【onAccept】 : ドラッグ成功時 【Function(T)】", - "【onLeave】 : ドラッグイン後ドラッグアウト時 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ko_KR.json deleted file mode 100644 index c7822b57e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "드래그 대상", - "info": "드래그 가능한 영역으로, Draggable 컴포넌트의 정보를 받을 수 있습니다. 드래그 시 콜백을 얻을 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DragTarget 기본 사용", - "desc": [ - "【builder】 : 컴포넌트 빌더 【DragTargetBuilder】", - "【onWillAccept】 : 드래그 시 【Function(T)】", - "【onAccept】 : 드래그 성공 【Function(T)】", - "【onLeave】 : 드래그 후 떼기 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_pt_PT.json deleted file mode 100644 index e83591672..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "Alvo de Arrastar", - "info": "Uma área de destino para arrastar, que pode receber informações do componente Draggable. Pode obter retornos de chamada durante o arrasto.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DragTarget", - "desc": [ - "【builder】 : Construtor de componentes 【DragTargetBuilder】", - "【onWillAccept】 : Ao arrastar para dentro 【Function(T)】", - "【onAccept】 : Arrasto bem-sucedido 【Function(T)】", - "【onLeave】 : Arrastar para dentro e depois para fora 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ru_RU.json deleted file mode 100644 index 6355c56c3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "Цель перетаскивания", - "info": "Область цели для перетаскивания, которая может принимать информацию от компонента Draggable. Можно получить обратные вызовы при перетаскивании.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DragTarget", - "desc": [ - "【builder】 : Конструктор компонента 【DragTargetBuilder】", - "【onWillAccept】 : При перетаскивании 【Function(T)】", - "【onAccept】 : Успешное перетаскивание 【Function(T)】", - "【onLeave】 : Перетаскивание и выход 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_zh-CN.json deleted file mode 100644 index 6f1036ba8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "拖拽目标", - "info": "一个拖拽的目标区域,可接收Draggable组件的信息。可以获取拖拽时的回调。", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DragTarget基本使用", - "desc": [ - "【builder】 : 组件构造器 【DragTargetBuilder】", - "【onWillAccept】 : 拖入时 【Function(T)】", - "【onAccept】 : 拖拽成功 【Function(T)】", - "【onLeave】 : 拖入再脱出 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/node1_base.dart deleted file mode 100644 index 756160220..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/node1_base.dart +++ /dev/null @@ -1,86 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - - -class CustomDragTarget extends StatefulWidget { - const CustomDragTarget({Key? key}) : super(key: key); - - @override - _CustomDragTargetState createState() => _CustomDragTargetState(); -} - -class _CustomDragTargetState extends State { - Color _color = Colors.grey; - String _info = 'DragTarget'; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Wrap(children: _buildColors(), spacing: 10), - const SizedBox(height: 20), - _buildDragTarget() - ], - ); - } - - final List colors = const [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green, - Colors.orange, - Colors.purple, - Colors.cyanAccent - ]; - - List _buildColors() => colors - .map( - (e) => Draggable( - child: Container( - width: 30, - height: 30, - alignment: Alignment.center, - child: Text( - colors.indexOf(e).toString(), - style: const TextStyle( - color: Colors.white, fontWeight: FontWeight.bold), - ), - decoration: BoxDecoration(color: e, shape: BoxShape.circle), - ), - data: e, - feedback: Container( - width: 25, - height: 25, - decoration: BoxDecoration(color: e, shape: BoxShape.circle), - )), - ).toList(); - - Widget _buildDragTarget() { - return DragTarget( - onLeave: (data) => setState(() => _info='onLeave'), - onAccept: (data) => setState(() { - _info='onAccept'; - _color = data; - }), - onWillAccept: (data) { - setState(() { - _info='onWillAccept'; - }); - print("onWillAccept: data = $data "); - return data != null; - }, - builder: (context, candidateData, rejectedData) => Container( - width: 150.0, - height: 50.0, - color: _color, - child: Center( - child: Text( - _info, - style: const TextStyle(color: Colors.white), - ), - ))); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_de_DE.json deleted file mode 100644 index 9d4157287..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_de_DE.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "Verschiebbare Komponente", - "info": "Ermöglicht das Verschieben der Komponente auf der Benutzeroberfläche und kann Daten eines generischen Typs T speichern. Wird normalerweise in Kombination mit DragTarget verwendet, um den Drag-and-Drop-Effekt zu erzielen.", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Draggable", - "desc": [ - "【child】 : Kind 【Widget】", - "【feedback】 : Kind während des Ziehens 【Widget】", - "【axis】 : Achse des Ziehens 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Kombinierte Verwendung von Draggable und DragTarget", - "desc": [ - "【data】 : Daten 【T】", - "【onDragStarted】 : Ziehen gestartet 【Function()】", - "【onDragEnd】 : Ziehen beendet 【Function(DraggableDetails)】", - "【onDragCompleted】 : Ziehen abgeschlossen 【Function()】", - "【onDraggableCanceled】 : Ziehen abgebrochen 【Function(Velocity,Offset)】", - "【onChanged】 : Rückruf bei Änderung 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Andere Verwendungen von Draggable", - "desc": [ - "Kann verwendet werden, um einige Ereignisse basierend auf dem Ziehen zu verarbeiten, wie z.B. Löschen, Abfragen, Pop-up-Fenster usw." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_en_US.json deleted file mode 100644 index 28afb401e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_en_US.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "Draggable Component", - "info": "Allows the component to be dragged anywhere on the interface, and can store data of a generic type T. It is usually used in combination with DragTarget to achieve the drag effect.", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Draggable", - "desc": [ - "【child】 : child 【Widget】", - "【feedback】 : child during dragging 【Widget】", - "【axis】 : axis of dragging 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Combined Usage of Draggable and DragTarget", - "desc": [ - "【data】 : data 【T】", - "【onDragStarted】 : start dragging 【Function()】", - "【onDragEnd】 : end dragging 【Function(DraggableDetails)】", - "【onDragCompleted】 : drag completed 【Function()】", - "【onDraggableCanceled】 : drag canceled 【Function(Velocity,Offset)】", - "【onChanged】 : callback when changed 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Other Usages of Draggable", - "desc": [ - "Some events can be handled based on dragging, such as deletion, querying, pop-ups, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_es_ES.json deleted file mode 100644 index e36c39ffd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_es_ES.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "Componente Arrastrable", - "info": "Permite arrastrar el componente en la interfaz, puede almacenar datos de un tipo genérico T. Normalmente se usa en combinación con DragTarget para lograr el efecto de arrastre.", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Draggable", - "desc": [ - "【child】 : hijo 【Widget】", - "【feedback】 : hijo durante el arrastre 【Widget】", - "【axis】 : eje de arrastre 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Uso combinado de Draggable y DragTarget", - "desc": [ - "【data】 : datos 【T】", - "【onDragStarted】 : inicio del arrastre 【Function()】", - "【onDragEnd】 : fin del arrastre 【Function(DraggableDetails)】", - "【onDragCompleted】 : arrastre completado 【Function()】", - "【onDraggableCanceled】 : arrastre cancelado 【Function(Velocity,Offset)】", - "【onChanged】 : devolución de llamada al cambiar 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Otros usos de Draggable", - "desc": [ - "Puede manejar algunos eventos según el arrastre. Como eliminar, consultar, mostrar cuadros de diálogo, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_fr_FR.json deleted file mode 100644 index 9087a3703..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_fr_FR.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "Composant déplaçable", - "info": "Permet de déplacer un composant librement sur l'interface, peut contenir des données de type générique T. Généralement utilisé en combinaison avec DragTarget pour réaliser des effets de glisser-déposer.", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Draggable", - "desc": [ - "【child】 : enfant 【Widget】", - "【feedback】 : enfant pendant le glissement 【Widget】", - "【axis】 : axe de glissement 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Utilisation combinée de Draggable et DragTarget", - "desc": [ - "【data】 : données 【T】", - "【onDragStarted】 : début du glissement 【Function()】", - "【onDragEnd】 : fin du glissement 【Function(DraggableDetails)】", - "【onDragCompleted】 : glissement terminé 【Function()】", - "【onDraggableCanceled】 : glissement annulé 【Function(Velocity,Offset)】", - "【onChanged】 : rappel lors du changement 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Autres utilisations de Draggable", - "desc": [ - "Peut traiter certains événements en fonction du glissement. Comme la suppression, la recherche, les boîtes de dialogue, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_it_IT.json deleted file mode 100644 index 6a8e0ecc4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_it_IT.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "Componente Trascinabile", - "info": "Permette di trascinare il componente sull'interfaccia e può contenere un dato di tipo generico T. Solitamente utilizzato in combinazione con DragTarget per completare l'effetto di trascinamento.", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di Draggable", - "desc": [ - "【child】 : figlio 【Widget】", - "【feedback】 : figlio durante il trascinamento 【Widget】", - "【axis】 : asse di trascinamento 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Utilizzo combinato di Draggable e DragTarget", - "desc": [ - "【data】 : dati 【T】", - "【onDragStarted】 : inizio del trascinamento 【Function()】", - "【onDragEnd】 : fine del trascinamento 【Function(DraggableDetails)】", - "【onDragCompleted】 : trascinamento completato 【Function()】", - "【onDraggableCanceled】 : trascinamento annullato 【Function(Velocity,Offset)】", - "【onChanged】 : callback al cambiamento 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Altri utilizzi di Draggable", - "desc": [ - "È possibile gestire alcuni eventi in base al trascinamento. Ad esempio, eliminazione, ricerca, finestra pop-up, ecc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ja_JP.json deleted file mode 100644 index 39b751802..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ja_JP.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "ドラッグ可能なコンポーネント", - "info": "コンポーネントをインターフェース上で自由にドラッグできるようにし、ジェネリック型Tのデータを格納できます。通常、DragTargetと組み合わせて使用し、ドラッグ効果を実現します。", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Draggableの基本使用", - "desc": [ - "【child】 : 子 【Widget】", - "【feedback】 : ドラッグ時の子 【Widget】", - "【axis】 : ドラッグ軸 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "DraggableとDragTargetの連携使用", - "desc": [ - "【data】 : データ 【T】", - "【onDragStarted】 : ドラッグ開始 【Function()】", - "【onDragEnd】 : ドラッグ終了 【Function(DraggableDetails)】", - "【onDragCompleted】 : ドラッグ完了 【Function()】", - "【onDraggableCanceled】 : ドラッグキャンセル 【Function(Velocity,Offset)】", - "【onChanged】 : 変更時のコールバック 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Draggableのその他の使用", - "desc": [ - "ドラッグに基づいていくつかのイベントを処理できます。例えば、削除、検索、ポップアップなど" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ko_KR.json deleted file mode 100644 index 1d9a29c48..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ko_KR.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "드래그 가능한 컴포넌트", - "info": "컴포넌트를 인터페이스 상에서 자유롭게 드래그할 수 있으며, 제네릭 T 데이터를 저장할 수 있습니다. 일반적으로 DragTarget과 함께 사용되어 드래그 효과를 완성합니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Draggable 기본 사용", - "desc": [ - "【child】 : 자식 【Widget】", - "【feedback】 : 드래그 시의 자식 【Widget】", - "【axis】 : 드래그 축 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Draggable과 DragTarget 연동", - "desc": [ - "【data】 : 데이터 【T】", - "【onDragStarted】 : 드래그 시작 【Function()】", - "【onDragEnd】 : 드래그 종료 【Function(DraggableDetails)】", - "【onDragCompleted】 : 드래그 완료 【Function()】", - "【onDraggableCanceled】 : 드래그 취소 【Function(Velocity,Offset)】", - "【onChanged】 : 변경 시 콜백 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Draggable 기타 사용", - "desc": [ - "드래그를 통해 일부 이벤트를 처리할 수 있습니다. 예를 들어 삭제, 조회, 팝업 등" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_pt_PT.json deleted file mode 100644 index b6b3af3b8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_pt_PT.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "Componente Arrastável", - "info": "Permite que o componente seja arrastado livremente na interface, podendo armazenar dados de um tipo genérico T. Normalmente usado em combinação com DragTarget para alcançar o efeito de arrastar e soltar.", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Draggable", - "desc": [ - "【child】 : Filho 【Widget】", - "【feedback】 : Filho durante o arrasto 【Widget】", - "【axis】 : Eixo de arrasto 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Uso Conjunto de Draggable e DragTarget", - "desc": [ - "【data】 : Dados 【T】", - "【onDragStarted】 : Início do arrasto 【Function()】", - "【onDragEnd】 : Fim do arrasto 【Function(DraggableDetails)】", - "【onDragCompleted】 : Arrasto concluído 【Function()】", - "【onDraggableCanceled】 : Arrasto cancelado 【Function(Velocity,Offset)】", - "【onChanged】 : Callback de mudança 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Outros Usos do Draggable", - "desc": [ - "Pode processar alguns eventos com base no arrasto, como exclusão, consulta, exibição de diálogos, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ru_RU.json deleted file mode 100644 index 00ffd0c16..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ru_RU.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "Перетаскиваемый компонент", - "info": "Позволяет компоненту перетаскиваться на интерфейсе, может хранить данные типа T. Обычно используется в сочетании с DragTarget для достижения эффекта перетаскивания.", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Draggable", - "desc": [ - "【child】 : Дочерний элемент 【Widget】", - "【feedback】 : Дочерний элемент при перетаскивании 【Widget】", - "【axis】 : Ось перетаскивания 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Использование Draggable с DragTarget", - "desc": [ - "【data】 : Данные 【T】", - "【onDragStarted】 : Начало перетаскивания 【Function()】", - "【onDragEnd】 : Конец перетаскивания 【Function(DraggableDetails)】", - "【onDragCompleted】 : Завершение перетаскивания 【Function()】", - "【onDraggableCanceled】 : Отмена перетаскивания 【Function(Velocity,Offset)】", - "【onChanged】 : Обратный вызов при изменении 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Другое использование Draggable", - "desc": [ - "Можно обрабатывать некоторые события на основе перетаскивания. Например, удаление, поиск, всплывающие окна и т.д." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_zh-CN.json deleted file mode 100644 index 4ab0f12df..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_zh-CN.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "可拖拽组件", - "info": "可以让组件在界面上任意拖拽,可存放一个泛型T的数据。通常和DragTarget组合使用,来完成拖拽效果。", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Draggable基本使用", - "desc": [ - "【child】 : 孩子 【Widget】", - "【feedback】 : 拖拽时的孩子 【Widget】", - "【axis】 : 拖动的轴 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Draggable与DragTarget联用", - "desc": [ - "【data】 : 数据 【T】", - "【onDragStarted】 : 开始拖拽 【Function()】", - "【onDragEnd】 : 结束拖拽 【Function(DraggableDetails)】", - "【onDragCompleted】 : 拖拽完成 【Function()】", - "【onDraggableCanceled】 : 拖拽取消 【Function(Velocity,Offset)】", - "【onChanged】 : 改变时回调 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Draggable其他使用", - "desc": [ - "可以根据拖拽来处理一些事件。如删除、查询、弹框等" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node1_base.dart deleted file mode 100644 index 0f74ab705..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node1_base.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class CustomDraggable extends StatelessWidget { - const CustomDraggable({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - List axis = [null, Axis.vertical, Axis.horizontal]; - return Wrap( - spacing: 30, - children: axis - .map((e) => Draggable( - axis: e, - child: Container( - width: 30, - height: 30, - alignment: Alignment.center, - decoration: const BoxDecoration( - color: Colors.blue, - shape: BoxShape.circle, - ), - ), - feedback: Container( - width: 30, - height: 30, - decoration: const BoxDecoration( - color: Colors.red, - shape: BoxShape.circle, - ), - ), - )) - .toList()); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node2_data.dart b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node2_data.dart deleted file mode 100644 index d8bfd4d4b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node2_data.dart +++ /dev/null @@ -1,95 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - - -class DraggablePage extends StatefulWidget { - const DraggablePage({Key? key}) : super(key: key); - - @override - _DraggablePageState createState() => _DraggablePageState(); -} - -class _DraggablePageState extends State { - Color _color = Colors.grey; - String _info = 'DragTarget'; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Wrap( - children: _buildColors(), - spacing: 10, - ), - const SizedBox( - height: 20, - ), - _buildDragTarget() - ], - ); - } - - List colors = [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green, - Colors.orange, - Colors.purple, - Colors.cyanAccent - ]; - - List _buildColors() => colors - .map( - (e) => Draggable( - onDragStarted: () => setState(() => _info = '开始拖拽'), - onDragEnd: (d) => setState(() => _info = '结束拖拽'), - onDragCompleted: () => _info = '拖拽完成', - onDraggableCanceled: (v, o) => _info = '拖拽取消', - child: Container( - width: 30, - height: 30, - alignment: Alignment.center, - child: Text( - colors.indexOf(e).toString(), - style: const TextStyle( - color: Colors.white, fontWeight: FontWeight.bold,), - ), - decoration: BoxDecoration(color: e, shape: BoxShape.circle), - ), - data: e, - feedback: Container( - width: 25, - height: 25, - decoration: BoxDecoration(color: e, shape: BoxShape.circle), - )), - ) - .toList(); - - Widget _buildDragTarget() { - return DragTarget( - onLeave: (data) => print("onLeave: data = $data "), - onAccept: (data) { - print("onAccept: data = $data "); - setState(() { - _color = data; - }); - }, - onWillAccept: (data) { - print("onWillAccept: data = $data "); - return data != null; - }, - builder: (context, candidateData, rejectedData) => Container( - width: 150.0, - height: 50.0, - color: _color, - child: Center( - child: Text( - _info, - style: const TextStyle(color: Colors.white), - ), - ))); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node3_use.dart b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node3_use.dart deleted file mode 100644 index 6f2a09f60..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node3_use.dart +++ /dev/null @@ -1,77 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/28 -/// contact me by email 1981462002@qq.com - - -class DeleteDraggable extends StatefulWidget { - const DeleteDraggable({Key? key}) : super(key: key); - - @override - _DeleteDraggableState createState() => _DeleteDraggableState(); -} - -class _DeleteDraggableState extends State { - List colors = [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green, - Colors.orange, - Colors.purple, - Colors.cyanAccent - ]; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Wrap(children: _buildColors(), spacing: 10), - const SizedBox(height: 20), - _buildDragTarget() - ], - ); - } - - Widget _buildDragTarget() { - return DragTarget( - onAccept: (data) { - setState(() { - colors.removeAt(data); - }); - }, - onWillAccept: (data) => data != null, - builder: (context, candidateData, rejectedData) => Container( - width: 50.0, - height: 50.0, - decoration: - const BoxDecoration(color: Colors.red, shape: BoxShape.circle), - child: const Center( - child: Icon(Icons.delete_sweep, color: Colors.white), - ))); - } - - List _buildColors() => colors - .map( - (e) => Draggable( - child: Container( - width: 30, - height: 30, - alignment: Alignment.center, - child: Text( - colors.indexOf(e).toString(), - style: const TextStyle( - color: Colors.white, fontWeight: FontWeight.bold), - ), - decoration: BoxDecoration(color: e, shape: BoxShape.circle), - ), - data: colors.indexOf(e), - feedback: Container( - width: 25, - height: 25, - decoration: BoxDecoration( - color: e.withAlpha(100), shape: BoxShape.circle), - )), - ) - .toList(); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_de_DE.json deleted file mode 100644 index 8186a9543..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "Zieh- und schiebbares Blatt", - "info": "Ein Blatt, das gezogen und geschoben werden kann, mit der Möglichkeit, den maximalen, minimalen und anfänglichen Teilungsbereich festzulegen. Der Konstruktor builder muss eine schiebbare Komponente zurückgeben.", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DraggableScrollableSheet", - "desc": [ - "【initialChildSize】 : Anfänglicher Teilungsgrad 【double】", - "【minChildSize】 : Minimaler Teilungsgrad 【double】", - "【maxChildSize】 : Maximaler Teilungsgrad 【double】", - "【builder】 : Schiebbare Komponentenkonstruktor 【ScrollableWidgetBuilder】", - "【expand】 : Ob erweitert 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_en_US.json deleted file mode 100644 index 3a4f380ac..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "Draggable Sheet", - "info": "A sheet that can be dragged and scrolled, with the ability to specify the maximum, minimum, and initial fractions within the scroll range. The builder constructor needs to return a scrollable component.", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DraggableScrollableSheet", - "desc": [ - "【initialChildSize】: Initial fraction 【double】", - "【minChildSize】: Minimum fraction 【double】", - "【maxChildSize】: Maximum fraction 【double】", - "【builder】: Scrollable component builder 【ScrollableWidgetBuilder】", - "【expand】: Whether to expand 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_es_ES.json deleted file mode 100644 index bf72d3647..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "Hoja deslizante", - "info": "Hoja que se puede arrastrar y deslizar, se puede especificar el tamaño máximo, mínimo e inicial dentro del rango de deslizamiento. El constructor builder debe devolver un componente deslizable.", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DraggableScrollableSheet", - "desc": [ - "【initialChildSize】 : Tamaño inicial 【double】", - "【minChildSize】 : Tamaño mínimo 【double】", - "【maxChildSize】 : Tamaño máximo 【double】", - "【builder】 : Constructor de componente deslizable 【ScrollableWidgetBuilder】", - "【expand】 : Si se expande 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_fr_FR.json deleted file mode 100644 index 61897ae32..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "Feuille glissable et déplaçable", - "info": "Feuille déplaçable et glissable, permettant de spécifier les divisions maximales, minimales et initiales dans la plage de glissement. Le constructeur builder doit retourner un composant glissant.", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DraggableScrollableSheet", - "desc": [ - "【initialChildSize】 : Division initiale 【double】", - "【minChildSize】 : Division minimale 【double】", - "【maxChildSize】 : Division maximale 【double】", - "【builder】 : Constructeur de composant glissant 【ScrollableWidgetBuilder】", - "【expand】 : S'étend ou non 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_it_IT.json deleted file mode 100644 index e1873bd0b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "Foglio trascinabile e scorrevole", - "info": "Un foglio trascinabile e scorrevole che può specificare la dimensione massima, minima e iniziale all'interno dell'intervallo di scorrimento. Il costruttore builder deve restituire un componente scorrevole.", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di DraggableScrollableSheet", - "desc": [ - "【initialChildSize】 : Dimensione iniziale 【double】", - "【minChildSize】 : Dimensione minima 【double】", - "【maxChildSize】 : Dimensione massima 【double】", - "【builder】 : Costruttore del componente scorrevole 【ScrollableWidgetBuilder】", - "【expand】 : Se espandere 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ja_JP.json deleted file mode 100644 index 9dbe32fe8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "ドラッグ可能なシート", - "info": "ドラッグおよびスクロール可能なシートで、最大、最小、および初期の分割位置を指定できます。ビルダーはスクロール可能なコンポーネントを返す必要があります。", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DraggableScrollableSheetの基本使用", - "desc": [ - "【initialChildSize】 : 初期分割位置 【double】", - "【minChildSize】 : 最小分割位置 【double】", - "【maxChildSize】 : 最大分割位置 【double】", - "【builder】 : スクロールコンポーネントビルダー 【ScrollableWidgetBuilder】", - "【expand】 : 拡張するかどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ko_KR.json deleted file mode 100644 index be2920e46..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "드래그 가능한 시트", - "info": "드래그 및 스크롤 가능한 시트로, 최대, 최소, 초기 분할 위치를 지정할 수 있습니다. 생성자 builder는 스크롤 가능한 컴포넌트를 반환해야 합니다.", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DraggableScrollableSheet 기본 사용법", - "desc": [ - "【initialChildSize】 : 초기 분할 위치 【double】", - "【minChildSize】 : 최소 분할 위치 【double】", - "【maxChildSize】 : 최대 분할 위치 【double】", - "【builder】 : 스크롤 컴포넌트 생성자 【ScrollableWidgetBuilder】", - "【expand】 : 확장 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_pt_PT.json deleted file mode 100644 index b9b9a40ea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "Folha Deslizável e Arrastável", - "info": "Uma folha que pode ser arrastada e deslizada, permitindo especificar a divisão máxima, mínima e inicial dentro da faixa de deslizamento. O construtor builder precisa retornar um componente deslizável.", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DraggableScrollableSheet", - "desc": [ - "【initialChildSize】: Divisão inicial 【double】", - "【minChildSize】: Divisão mínima 【double】", - "【maxChildSize】: Divisão máxima 【double】", - "【builder】: Construtor do componente deslizável 【ScrollableWidgetBuilder】", - "【expand】: Estender 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ru_RU.json deleted file mode 100644 index 6df183a31..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "Перетаскиваемый и прокручиваемый лист", - "info": "Перетаскиваемый и прокручиваемый лист, который может указывать максимальное, минимальное и начальное деление в текущем диапазоне прокрутки. Конструктор builder должен возвращать прокручиваемый компонент.", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DraggableScrollableSheet", - "desc": [ - "【initialChildSize】 : Начальное деление 【double】", - "【minChildSize】 : Минимальное деление 【double】", - "【maxChildSize】 : Максимальное деление 【double】", - "【builder】 : Конструктор прокручиваемого компонента 【ScrollableWidgetBuilder】", - "【expand】 : Расширять ли 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_zh-CN.json deleted file mode 100644 index a49c47d77..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "拖滑页", - "info": "可拖动和滑动的Sheet,可指定最大、最小、最初的分度现在滑动范围。构造器builder需要返回一个可滑动组件。", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DraggableScrollableSheet基本使用", - "desc": [ - "【initialChildSize】 : 初始分度 【double】", - "【minChildSize】 : 最小分度 【double】", - "【maxChildSize】 : 最大分度 【double】", - "【builder】 : 滑动组件构造器 【ScrollableWidgetBuilder】", - "【expand】 : 是否延展 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/node1_base.dart deleted file mode 100644 index 6a93804ec..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/node1_base.dart +++ /dev/null @@ -1,96 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class DraggableScrollableSheetDemo extends StatelessWidget { - const DraggableScrollableSheetDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(10), - child: ElevatedButton( - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => DraggableScrollableSheetPage()), - ); - }, - child: const Text("进入 DraggableScrollableSheet 测试页"), - ), - ); - } -} - -class DraggableScrollableSheetPage extends StatelessWidget { - DraggableScrollableSheetPage({Key? key}) : super(key: key); - - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - Colors.red[50]!, - Colors.red[100]!, - Colors.red[200]!, - Colors.red[300]!, - Colors.red[400]!, - Colors.red[500]!, - Colors.red[600]!, - Colors.red[700]!, - Colors.red[800]!, - Colors.red[900]!, - ]; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text("DraggableScrollableSheet"), - ), - body: SizedBox.expand( - child: DraggableScrollableSheet( - initialChildSize: 0.3, - minChildSize: 0.2, - maxChildSize: 0.5, - expand: true, - builder: (BuildContext context, ScrollController scrollController)=> - ListView.builder( - controller: scrollController, - itemCount: data.length, - itemBuilder: buildColorItem, - ), - )), - ); - } - - Widget buildColorItem(BuildContext context, int index) { - return Container( - alignment: Alignment.center, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_de_DE.json deleted file mode 100644 index a2c8d3469..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "iOS-Schiebe-Tab", - "info": "Bietet Interaktionsverhalten für die Drawer-Komponente und wird selten verwendet. Es gibt Anwendungsfälle im Quellcode der Scaffold-Komponente.", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DrawerController", - "desc": [ - "【drawerCallback】 : Ereignisrückruf 【DrawerCallback】", - "【enableOpenDragGesture】 : Ob seitliches Aufziehen aktiviert ist 【bool】", - "【alignment】 : Ausrichtung 【DrawerAlignment】", - "【scrimColor】 : Hintergrundfarbe 【Color】", - "【child】 : Drawer-Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_en_US.json deleted file mode 100644 index e49012f23..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "iOS Sliding Tabs", - "info": "Provides interactive behavior for the Drawer component, which is rarely used. It is used in the source code of the Scaffold component.", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DrawerController", - "desc": [ - "【drawerCallback】: Event callback 【DrawerCallback】", - "【enableOpenDragGesture】: Whether to slide open from the side 【bool】", - "【alignment】: Alignment 【DrawerAlignment】", - "【scrimColor】: Background color 【Color】", - "【child】: Drawer component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_es_ES.json deleted file mode 100644 index 7afc8a3db..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "Pestañas deslizantes de iOS", - "info": "Proporciona comportamiento interactivo para el componente Drawer, generalmente se usa poco. Tiene un caso de uso en el código fuente del componente Scaffold.", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DrawerController", - "desc": [ - "【drawerCallback】 : devolución de llamada de evento 【DrawerCallback】", - "【enableOpenDragGesture】 : si se puede deslizar hacia un lado 【bool】", - "【alignment】 : alineación 【DrawerAlignment】", - "【scrimColor】 : color de fondo 【Color】", - "【child】 : componente Drawer 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_fr_FR.json deleted file mode 100644 index bbf96da0c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "Onglets glissants iOS", - "info": "Fournit des comportements interactifs pour le composant Drawer, généralement peu utilisé. Utilisé dans le code source du composant Scaffold.", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DrawerController", - "desc": [ - "【drawerCallback】 : Rappel d'événement 【DrawerCallback】", - "【enableOpenDragGesture】 : Glissement latéral activé 【bool】", - "【alignment】 : Mode d'alignement 【DrawerAlignment】", - "【scrimColor】 : Couleur de fond 【Color】", - "【child】 : Composant Drawer 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_it_IT.json deleted file mode 100644 index 0a51c96e9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "Schede scorrevoli iOS", - "info": "Fornisce comportamenti interattivi per il componente Drawer, generalmente usato raramente. Ci sono scenari di utilizzo nel codice sorgente del componente Scaffold.", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di DrawerController", - "desc": [ - "【drawerCallback】 : callback dell'evento 【DrawerCallback】", - "【enableOpenDragGesture】 : se scorrere lateralmente per aprire 【bool】", - "【alignment】 : allineamento 【DrawerAlignment】", - "【scrimColor】 : colore di sfondo 【Color】", - "【child】 : componente Drawer 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ja_JP.json deleted file mode 100644 index 07b6f06d7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "iOSスライドタブ", - "info": "Drawerコンポーネントにインタラクションを提供しますが、一般的にはあまり使用されません。Scaffoldコンポーネントのソースコードで使用されることがあります。", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerControllerの基本的な使用法", - "desc": [ - "【drawerCallback】 : イベントコールバック 【DrawerCallback】", - "【enableOpenDragGesture】 : サイドスワイプを有効にするか 【bool】", - "【alignment】 : 配置方法 【DrawerAlignment】", - "【scrimColor】 : 背景色 【Color】", - "【child】 : Drawerコンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ko_KR.json deleted file mode 100644 index bc6be0dd1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "iOS 슬라이드 탭", - "info": "Drawer 컴포넌트에 상호 작용을 제공하며, 일반적으로 잘 사용되지 않습니다. Scaffold 컴포넌트 소스 코드에서 사용 사례가 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerController 기본 사용", - "desc": [ - "【drawerCallback】 : 이벤트 콜백 【DrawerCallback】", - "【enableOpenDragGesture】 : 측면 슬라이드 열기 【bool】", - "【alignment】 : 정렬 방식 【DrawerAlignment】", - "【scrimColor】 : 배경 색상 【Color】", - "【child】 : Drawer 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_pt_PT.json deleted file mode 100644 index 25c9c0e11..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "Separador deslizante iOS", - "info": "Fornece comportamento interativo para o componente Drawer, geralmente raramente usado. Há cenários de uso no código-fonte do componente Scaffold.", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do DrawerController", - "desc": [ - "【drawerCallback】 : Callback de evento 【DrawerCallback】", - "【enableOpenDragGesture】 : Se o deslizar lateral está ativado 【bool】", - "【alignment】 : Alinhamento 【DrawerAlignment】", - "【scrimColor】 : Cor de fundo 【Color】", - "【child】 : Componente Drawer 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ru_RU.json deleted file mode 100644 index e2ae2d8f7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "iOS слайдер вкладок", - "info": "Обеспечивает интерактивное поведение для компонента Drawer, обычно используется редко. Используется в исходном коде компонента Scaffold.", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DrawerController", - "desc": [ - "【drawerCallback】 : Обратный вызов события 【DrawerCallback】", - "【enableOpenDragGesture】 : Возможность открытия смахиванием 【bool】", - "【alignment】 : Способ выравнивания 【DrawerAlignment】", - "【scrimColor】 : Цвет фона 【Color】", - "【child】 : Компонент Drawer 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_zh-CN.json deleted file mode 100644 index 2f3c9a12d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "iOS滑动页签", - "info": "为 Drawer 组件提供交互行为,一般很少使用。在 Scaffold 组件源码中有使用场景。", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerController基本使用", - "desc": [ - "【drawerCallback】 : 事件回调 【DrawerCallback】", - "【enableOpenDragGesture】 : 是否侧边滑开 【bool】", - "【alignment】 : 对齐方式 【DrawerAlignment】", - "【scrimColor】 : 背景颜色 【Color】", - "【child】 : Drawer组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/node1_base.dart deleted file mode 100644 index f29d10cab..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/node1_base.dart +++ /dev/null @@ -1,63 +0,0 @@ -import 'package:flutter/material.dart'; - - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class DrawerControllerDemo extends StatefulWidget { - const DrawerControllerDemo({Key? key}) : super(key: key); - - @override - _DrawerControllerDemoState createState() => _DrawerControllerDemoState(); -} - -class _DrawerControllerDemoState extends State { - final GlobalKey _drawerKey = - GlobalKey(); - - bool _open = false; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - ElevatedButton( - onPressed: toggleDrawer, - child: const Text("显隐 Drawer"), - ), - SizedBox( - height: 200, - child: DrawerController( - scrimColor: Colors.blue.withAlpha(88), - enableOpenDragGesture: true, - key: _drawerKey, - alignment: DrawerAlignment.start, - drawerCallback: (value) { - _open = value; - }, - child: Drawer( - child: Container( - alignment: Alignment.center, - color: Colors.red, - child: const Text( - "I am Drawer!", - style: TextStyle(color: Colors.white, fontSize: 18), - ), - ), - ), - ), - ), - ], - ); - } - - void toggleDrawer() { - if (_open) { - _drawerKey.currentState?.close(); - } else { - print('---open--$_open-------'); - _drawerKey.currentState?.open(); - } - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_de_DE.json deleted file mode 100644 index 6bb9d991f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_de_DE.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "Dropdown-Schaltfläche", - "info": "Eine Schaltfläche für Dropdown-Auswahl, die Eigenschaften wie Symbol, Schattentiefe, Hinweis usw. angeben kann und Ereignisse bei Änderungen der Auswahl empfängt.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DropdownButton", - "desc": [ - "【value】 : Aktueller Wert 【T】", - "【items】 : Dropdown-Auswahlbox 【List>】", - "【icon】 : Symbol 【Widget】", - "【elevation】 : Schattentiefe 【double】", - "【onChanged】 : Ereignis bei Auswahl eines Elements 【Function(T)】", - "【backgroundColor】 : Hintergrundfarbe 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "Stilangabe für DropdownButton", - "desc": [ - "【isDense】 : Ob kompakt angeordnet 【bool】", - "【iconSize】 : Symbolgröße 【double】", - "【hint】 : Hinweis-Komponente 【Widget】", - "【iconEnabledColor】 : Symbolfarbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_en_US.json deleted file mode 100644 index 67516d470..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_en_US.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "Dropdown Button", - "info": "A button for dropdown selection, which can specify attributes such as icon, elevation, hint, etc., and receives events for selection changes.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DropdownButton", - "desc": [ - "【value】 : Current value 【T】", - "【items】 : Dropdown items 【List>】", - "【icon】 : Icon 【Widget】", - "【elevation】 : Elevation 【double】", - "【onChanged】 : Selection change event 【Function(T)】", - "【backgroundColor】 : Background color 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "Styling of DropdownButton", - "desc": [ - "【isDense】 : Whether to be dense 【bool】", - "【iconSize】 : Icon size 【double】", - "【hint】 : Hint widget 【Widget】", - "【iconEnabledColor】 : Icon color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_es_ES.json deleted file mode 100644 index 720853692..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_es_ES.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "Botón desplegable", - "info": "Botón para selección desplegable, se pueden especificar propiedades como icono, profundidad de sombra, sugerencias, etc., y recibe eventos de cambio de selección.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DropdownButton", - "desc": [ - "【value】 : Valor actual 【T】", - "【items】 : Opciones desplegables 【List>】", - "【icon】 : Icono 【Widget】", - "【elevation】 : Profundidad de sombra 【double】", - "【onChanged】 : Evento de cambio de selección 【Function(T)】", - "【backgroundColor】 : Color de fondo 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "Especificación de estilo de DropdownButton", - "desc": [ - "【isDense】 : Si está compacto 【bool】", - "【iconSize】 : Tamaño del icono 【double】", - "【hint】 : Componente de sugerencia 【Widget】", - "【iconEnabledColor】 : Color del icono 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_fr_FR.json deleted file mode 100644 index 7116ccf50..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_fr_FR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "Bouton déroulant", - "info": "Bouton pour la sélection déroulante, pouvant spécifier des attributs tels que l'icône, la profondeur d'ombre, l'indice, etc., et recevoir des événements de changement de sélection.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DropdownButton", - "desc": [ - "【value】 : Valeur actuelle 【T】", - "【items】 : Liste déroulante 【List>】", - "【icon】 : Icône 【Widget】", - "【elevation】 : Profondeur d'ombre 【double】", - "【onChanged】 : Événement de sélection d'élément 【Function(T)】", - "【backgroundColor】 : Couleur de fond 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "Spécification du style de DropdownButton", - "desc": [ - "【isDense】 : Si compact 【bool】", - "【iconSize】 : Taille de l'icône 【double】", - "【hint】 : Composant d'indice 【Widget】", - "【iconEnabledColor】 : Couleur de l'icône 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_it_IT.json deleted file mode 100644 index f6ff0ac0d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_it_IT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "Pulsante a discesa", - "info": "Pulsante per la selezione a discesa, può specificare attributi come icona, profondità dell'ombra, suggerimento, ecc., e riceve eventi di cambiamento di selezione.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di DropdownButton", - "desc": [ - "【value】 : Valore corrente 【T】", - "【items】 : Casella di selezione a discesa 【List>】", - "【icon】 : Icona 【Widget】", - "【elevation】 : Profondità dell'ombra 【double】", - "【onChanged】 : Evento di selezione dell'elemento 【Function(T)】", - "【backgroundColor】 : Colore di sfondo 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "Specifica dello stile di DropdownButton", - "desc": [ - "【isDense】 : Se è compatto 【bool】", - "【iconSize】 : Dimensione dell'icona 【double】", - "【hint】 : Componente di suggerimento 【Widget】", - "【iconEnabledColor】 : Colore dell'icona 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ja_JP.json deleted file mode 100644 index 17cebf26d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ja_JP.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "ドロップダウンボタン", - "info": "ドロップダウン選択用のボタンで、アイコン、影の深さ、ヒントなどの属性を指定でき、選択変更イベントを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DropdownButtonの基本的な使い方", - "desc": [ - "【value】 : 現在の値 【T】", - "【items】 : ドロップダウンリスト 【List>】", - "【icon】 : アイコン 【Widget】", - "【elevation】 : 影の深さ 【double】", - "【onChanged】 : 項目選択イベント 【Function(T)】", - "【backgroundColor】 : 背景色 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "DropdownButtonのスタイル指定", - "desc": [ - "【isDense】 : コンパクト表示かどうか 【bool】", - "【iconSize】 : アイコンのサイズ 【double】", - "【hint】 : ヒントコンポーネント 【Widget】", - "【iconEnabledColor】 : アイコンの色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ko_KR.json deleted file mode 100644 index fcf3fdafc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ko_KR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "드롭다운 버튼", - "info": "드롭다운 선택을 위한 버튼으로, 아이콘, 그림자 깊이, 힌트 등의 속성을 지정할 수 있으며, 선택 변경 이벤트를 수신합니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DropdownButton 기본 사용법", - "desc": [ - "【value】 : 현재 값 【T】", - "【items】 : 드롭다운 목록 【List>】", - "【icon】 : 아이콘 【Widget】", - "【elevation】 : 그림자 깊이 【double】", - "【onChanged】 : 항목 선택 이벤트 【Function(T)】", - "【backgroundColor】 : 배경색 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "DropdownButton 스타일 지정", - "desc": [ - "【isDense】 : 간격 축소 여부 【bool】", - "【iconSize】 : 아이콘 크기 【double】", - "【hint】 : 힌트 위젯 【Widget】", - "【iconEnabledColor】 : 아이콘 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_pt_PT.json deleted file mode 100644 index dc801566e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_pt_PT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "Botão de dropdown", - "info": "Botão para seleção de dropdown, pode especificar ícone, profundidade de sombra, dica e outros atributos, recebe eventos de mudança de seleção.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do DropdownButton", - "desc": [ - "【value】 : Valor atual 【T】", - "【items】 : Caixa de seleção de dropdown 【List>】", - "【icon】 : Ícone 【Widget】", - "【elevation】 : Profundidade de sombra 【double】", - "【onChanged】 : Evento de seleção de item 【Function(T)】", - "【backgroundColor】 : Cor de fundo 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "Especificação de estilo do DropdownButton", - "desc": [ - "【isDense】 : Se deve ser compacto 【bool】", - "【iconSize】 : Tamanho do ícone 【double】", - "【hint】 : Componente de dica 【Widget】", - "【iconEnabledColor】 : Cor do ícone 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ru_RU.json deleted file mode 100644 index a9a8965b0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ru_RU.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "Выпадающая кнопка", - "info": "Кнопка для выбора из выпадающего списка, может иметь указанные иконки, тени, подсказки и другие свойства, принимает события изменения выбора.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DropdownButton", - "desc": [ - "【value】 : Текущее значение 【T】", - "【items】 : Выпадающий список 【List>】", - "【icon】 : Иконка 【Widget】", - "【elevation】 : Тень 【double】", - "【onChanged】 : Событие выбора элемента 【Function(T)】", - "【backgroundColor】 : Цвет фона 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "Указание стиля DropdownButton", - "desc": [ - "【isDense】 : Компактное расположение 【bool】", - "【iconSize】 : Размер иконки 【double】", - "【hint】 : Компонент подсказки 【Widget】", - "【iconEnabledColor】 : Цвет иконки 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_zh-CN.json deleted file mode 100644 index 3acb5df22..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_zh-CN.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "下拉按钮", - "info": "用于下拉选择的按钮,可指定图标、影深、提示等属性,接收选中变化的事件。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DropdownButton基本用法", - "desc": [ - "【value】 : 当前值 【T】", - "【items】 : 下拉选框 【List>】", - "【icon】 : 图标 【Widget】", - "【elevation】 : 影深 【double】", - "【onChanged】 : 选择条目事件 【Function(T)】", - "【backgroundColor】 : 背景色 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "DropdownButton的样式指定", - "desc": [ - "【isDense】 : 是否紧排 【bool】", - "【iconSize】 : 图标大小 【double】", - "【hint】 : 提示组件 【Widget】", - "【iconEnabledColor】 : 图标颜色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/node1_base.dart deleted file mode 100644 index 7126a49ce..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/node1_base.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-16 -/// contact me by email 1981462002@qq.com - -class CustomDropDownButton extends StatefulWidget { - const CustomDropDownButton({Key? key}) : super(key: key); - - @override - _CustomDropDownButtonState createState() => _CustomDropDownButtonState(); -} - -class _CustomDropDownButtonState extends State { - Color _color = Colors.red; - final List _colors = const [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - final List _info = const ["红色", "黄色", "蓝色", "绿色"]; - - @override - Widget build(BuildContext context) { - return Wrap( - children: [ - Container( - margin: const EdgeInsets.symmetric(horizontal: 20), - width: 50, - height: 50, - color: _color, - ), - DropdownButton( - value: _color, - elevation: 1, - icon: Icon( - Icons.expand_more, - size: 20, - color: _color, - ), - items: _buildItems(), - onChanged: (v) => setState(() => _color = v??Colors.blue)), - ], - ); - } - - List> _buildItems() => _colors - .map((e) => DropdownMenuItem( - value: e, - child: Text( - _info[_colors.indexOf(e)], - style: TextStyle(color: e), - ))) - .toList(); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/node2_style.dart b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/node2_style.dart deleted file mode 100644 index a5ce7c1fd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/node2_style.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-16 -/// contact me by email 1981462002@qq.com - - -class StyleDropDownButton extends StatefulWidget { - const StyleDropDownButton({Key? key}) : super(key: key); - - @override - _StyleDropDownButtonState createState() => _StyleDropDownButtonState(); -} - -class _StyleDropDownButtonState extends State { - Color _color = Colors.red; - - final List _colors = const [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - final List _info = const ["红色", "黄色", "蓝色", "绿色"]; - - @override - Widget build(BuildContext context) { - return Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Container( - margin: const EdgeInsets.symmetric(horizontal: 20), - width: 50, - height: 50, - color: _color, - ), - DropdownButton( - hint: const Text('请选择'), - isDense: true, - iconSize:20, - iconEnabledColor:_color, - value: _color, - items: _buildItems(), - onChanged: (v) => setState(() => _color = v??Colors.blue)), - ], - ); - } - - List> _buildItems() => _colors - .map((e) => DropdownMenuItem( - value: e, - child: Text( - _info[_colors.indexOf(e)], - style: TextStyle(color: e), - ))) - .toList(); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_de_DE.json deleted file mode 100644 index 4ae73458b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "Formular Dropdown", - "info": "Basiert auf der DropdownButton-Implementierung, daher sind die grundlegenden Eigenschaften ähnlich. Verfügt jedoch über die Funktionen von FormField und kann die Methoden onSaved und validator zurückrufen.", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einfache Verwendung des Formular Dropdowns", - "desc": [ - "【items】 : Liste der Unterkomponenten 【List>】", - "【validator】 : Rückruf für Formularvalidierung 【FormFieldValidator】", - "【onSaved】 : Rückruf für Formularspeicherung 【FormFieldSetter】", - "Weitere Eigenschaften finden Sie unter DropdownButton, Formularvalidierungsfunktionen finden Sie unter FormField." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_en_US.json deleted file mode 100644 index 0ac6e2cfa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "Form Dropdown", - "info": "It is implemented based on DropdownButton, so it has similar basic properties. However, it has the characteristics of FormField and can call back the onSaved and validator methods.", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Simple Usage of Form Dropdown", - "desc": [ - "【items】: List of child components 【List>】", - "【validator】: Form validation callback 【FormFieldValidator】", - "【onSaved】: Form save callback 【FormFieldSetter】", - "For other properties, refer to DropdownButton. For form validation features, refer to FormField." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_es_ES.json deleted file mode 100644 index 79188e35a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "Campo de selección de formulario", - "info": "Depende de DropdownButton en su implementación subyacente, por lo que las propiedades básicas son similares. Sin embargo, tiene características de FormField, lo que permite devolver los métodos onSaved y validator.", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso simple del campo de selección de formulario", - "desc": [ - "【items】: Lista de componentes secundarios 【List>】", - "【validator】: Devolución de llamada de validación de formulario 【FormFieldValidator】", - "【onSaved】: Devolución de llamada de guardado de formulario 【FormFieldSetter】", - "Para otras propiedades, consulte DropdownButton, y para las características de validación de formularios, consulte FormField." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_fr_FR.json deleted file mode 100644 index 6f9970d33..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "Champ de formulaire déroulant", - "info": "Basé sur DropdownButton, donc les propriétés de base sont similaires. Mais il possède les caractéristiques de FormField, permettant de rappeler les méthodes onSaved et validator.", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation simple du champ de formulaire déroulant", - "desc": [ - "【items】 : Liste des composants enfants 【List>】", - "【validator】 : Rappel de validation du formulaire 【FormFieldValidator】", - "【onSaved】 : Rappel de sauvegarde du formulaire 【FormFieldSetter】", - "Pour les autres propriétés, voir DropdownButton. Pour les caractéristiques de validation du formulaire, voir FormField." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_it_IT.json deleted file mode 100644 index 985a7f29d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "Campo a discesa del modulo", - "info": "Si basa sull'implementazione di DropdownButton, quindi le proprietà di base sono simili. Tuttavia, ha le caratteristiche di FormField, può richiamare i metodi onSaved e validator.", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso semplice del campo a discesa del modulo", - "desc": [ - "【items】 : Lista dei componenti figli 【List>】", - "【validator】 : Callback di convalida del modulo 【FormFieldValidator】", - "【onSaved】 : Callback di salvataggio del modulo 【FormFieldSetter】", - "Per altre proprietà, vedere DropdownButton, per le caratteristiche di convalida del modulo, vedere FormField." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ja_JP.json deleted file mode 100644 index a2c486230..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "フォームドロップダウン", - "info": "基盤は DropdownButton に依存して実装されているため、基本的な属性は似ています。ただし、FormField の特性を持っており、onSaved や validator メソッドをコールバックできます。", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "フォームドロップダウンの簡単な使用", - "desc": [ - "【items】 : 子コンポーネントリスト 【List>】", - "【validator】 : フォーム検証コールバック 【FormFieldValidator】", - "【onSaved】 : フォーム保存コールバック 【FormFieldSetter】", - "その他の属性については DropdownButton を参照し、フォーム検証の特性については FormField を参照してください。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ko_KR.json deleted file mode 100644 index 88832c689..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "폼 드롭다운", - "info": "기본적으로 DropdownButton에 의존하여 구현되었으므로 기본 속성이 유사합니다. 그러나 FormField의 특성을 가지고 있어 onSaved, validator 메서드를 콜백할 수 있습니다.", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "폼 드롭다운 간단 사용", - "desc": [ - "【items】 : 하위 컴포넌트 리스트 【List>】", - "【validator】 : 폼 검증 콜백 【FormFieldValidator】", - "【onSaved】 : 폼 저장 콜백 【FormFieldSetter】", - "기타 속성은 DropdownButton을 참조하고, 폼 검증 특성은 FormField를 참조하세요." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_pt_PT.json deleted file mode 100644 index 2eff5ad62..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "Campo de seleção de formulário", - "info": "Implementado com base no DropdownButton, portanto, possui propriedades semelhantes. No entanto, possui características do FormField, podendo chamar os métodos onSaved e validator.", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso simples do campo de seleção de formulário", - "desc": [ - "【items】: Lista de componentes filhos 【List>】", - "【validator】: Callback de validação do formulário 【FormFieldValidator】", - "【onSaved】: Callback de salvamento do formulário 【FormFieldSetter】", - "Para outras propriedades, consulte DropdownButton. Para características de validação de formulário, consulte FormField." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ru_RU.json deleted file mode 100644 index f7450f3e1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "Выпадающее поле формы", - "info": "Базовая реализация зависит от DropdownButton, поэтому основные свойства схожи. Однако обладает функциями FormField, может вызывать методы onSaved и validator.", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Простое использование выпадающего поля формы", - "desc": [ - "【items】 : Список дочерних компонентов 【List>】", - "【validator】 : Обратный вызов проверки формы 【FormFieldValidator】", - "【onSaved】 : Обратный вызов сохранения формы 【FormFieldSetter】", - "Другие свойства см. в DropdownButton, функции проверки формы см. в FormField." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_zh-CN.json deleted file mode 100644 index 9b42b54bd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "表单下拉框", - "info": "底层依赖 DropdownButton 实现,所以基本属性类似。但拥有 FormField 的特性,可以回调 onSaved、validator 方法。", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "表单下拉框简单使用", - "desc": [ - "【items】 : 子组件列表 【List>】", - "【validator】 : 表单验证回调 【FormFieldValidator】", - "【onSaved】 : 表单保存回调 【FormFieldSetter】", - "其他属性详见 DropdownButton,表单校验特性详见 FormField。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/node1_base.dart deleted file mode 100644 index 63014bca2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/node1_base.dart +++ /dev/null @@ -1,63 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class DropdownButtonFormFieldDemo extends StatefulWidget { - const DropdownButtonFormFieldDemo({Key? key}) : super(key: key); - - @override - _DropdownButtonFormFieldDemoState createState() => - _DropdownButtonFormFieldDemoState(); -} - -class _DropdownButtonFormFieldDemoState extends State { - Color _color = Colors.blue; - final List _colors = const [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - final List _info = const ["红色", "黄色", "蓝色", "绿色"]; - - @override - Widget build(BuildContext context) { - return Wrap( - children: [ - Container( - margin: const EdgeInsets.symmetric(horizontal: 20), - width: 50, - height: 50, - color: _color, - ), - - SizedBox( - width: 80, - child: DropdownButtonFormField( - value: _color, - elevation: 1, - hint: const Text('选择颜色',style: TextStyle(fontSize: 12),), - icon: Icon( - Icons.expand_more, - size: 20, - color: _color, - ), - items: _buildItems(), - onChanged: (v) => setState(() => _color = v ?? Colors.blue)), - ) - - ], - ); - } - - List> _buildItems() => _colors - .map((e) => DropdownMenuItem( - value: e, - child: Text( - _info[_colors.indexOf(e)], - style: TextStyle(color: e), - ))) - .toList(); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_de_DE.json deleted file mode 100644 index 73673fe84..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_de_DE.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "Dropdown-Menü", - "info": "Dropdown-Auswahlkomponente, unterstützt Textfilterung und kann Menüelemente anpassen. Basierend auf MenuAnchor und TextFiled.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Einfache Verwendung des Dropdown-Menüs", - "desc": [ - "【dropdownMenuEntries】 : Liste der Menüeinträge 【List>】", - "【initialSelection】 : Rückruf zur Formularvalidierung 【T?】", - "【onSelected】 : Rückruf zur Formularspeicherung 【ValueChanged?】", - "【menuHeight】 : Menühöhe 【double】", - "【width】 : Breite des Eingabefelds 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Stil des Dropdown-Menüs", - "desc": [ - "【controller】 : Text-Eingabe-Controller 【TextEditingController?】", - "【label】 : Label des Eingabefelds 【Widget?】", - "【textStyle】 : Textstil des Eingabefelds 【TextStyle?】", - "【inputDecorationTheme】 : Dekorationsthema des Eingabefelds 【InputDecorationTheme?】", - "【leadingIcon】 : Linkes Symbol 【Widget?】", - "【trailingIcon】 : Rechtes Symbol, wenn das Menü erweitert ist 【Widget?】", - "【selectedTrailingIcon】 : Rechtes Symbol, wenn das Menü erweitert ist 【Widget?】", - "【hintText】 : Hinweistext des Eingabefelds 【String?】", - "【helperText】 : Hilfstext des Eingabefelds 【String?】", - "【errorText】 : Fehlertext des Eingabefelds 【String?】", - "【menuStyle】 : Stil des Popup-Menüs 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "Benutzerdefinierte Menüelemente im Dropdown-Menü", - "desc": [ - "Menüelemente können über das labelWidget von DropdownMenuEntry angepasst werden." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_en_US.json deleted file mode 100644 index e15e900bc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_en_US.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "Dropdown Menu", - "info": "Dropdown selection component, supports text input filtering, and allows custom menu items. It mainly relies on MenuAnchor and TextField for implementation.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Simple Usage of Dropdown Menu", - "desc": [ - "【dropdownMenuEntries】 : Menu item list 【List>】", - "【initialSelection】 : Form validation callback 【T?】", - "【onSelected】 : Form save callback 【ValueChanged?】", - "【menuHeight】 : Menu height 【double】", - "【width】 : Input box width 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Dropdown Menu Style Settings", - "desc": [ - "【controller】 : Text input controller 【TextEditingController?】", - "【label】 : Input box label 【Widget?】", - "【textStyle】 : Input box text style 【TextStyle?】", - "【inputDecorationTheme】 : Input box decoration theme 【InputDecorationTheme?】", - "【leadingIcon】 : Left icon 【Widget?】", - "【trailingIcon】 : Right icon when menu is expanded 【Widget?】", - "【selectedTrailingIcon】 : Right icon when menu is expanded 【Widget?】", - "【hintText】 : Input box hint text 【String?】", - "【helperText】 : Input box helper text 【String?】", - "【errorText】 : Input box error text 【String?】", - "【menuStyle】 : Popup menu style 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "Custom Menu Items for Dropdown Menu", - "desc": [ - "You can customize the menu items by using the labelWidget of DropdownMenuEntry." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_es_ES.json deleted file mode 100644 index aba441edf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_es_ES.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "Menú desplegable", - "info": "Componente de selección desplegable, admite filtrado de entrada de texto y permite personalizar los elementos del menú. Depende principalmente de MenuAnchor y TextFiled para su implementación.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso básico del menú desplegable", - "desc": [ - "【dropdownMenuEntries】 : Lista de entradas del menú 【List>】", - "【initialSelection】 : Callback de validación del formulario 【T?】", - "【onSelected】 : Callback de guardado del formulario 【ValueChanged?】", - "【menuHeight】 : Altura del menú 【double】", - "【width】 : Ancho del campo de entrada 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Configuración de estilo del menú desplegable", - "desc": [ - "【controller】 : Controlador de entrada de texto 【TextEditingController?】", - "【label】 : Etiqueta del campo de entrada 【Widget?】", - "【textStyle】 : Estilo del texto del campo de entrada 【TextStyle?】", - "【inputDecorationTheme】 : Tema de decoración del campo de entrada 【InputDecorationTheme?】", - "【leadingIcon】 : Icono izquierdo 【Widget?】", - "【trailingIcon】 : Icono derecho cuando el menú está colapsado 【Widget?】", - "【selectedTrailingIcon】 : Icono derecho cuando el menú está expandido 【Widget?】", - "【hintText】 : Texto de sugerencia del campo de entrada 【String?】", - "【helperText】 : Texto auxiliar del campo de entrada 【String?】", - "【errorText】 : Texto de error del campo de entrada 【String?】", - "【menuStyle】 : Estilo del menú emergente 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "Personalización de elementos del menú desplegable", - "desc": [ - "Puede personalizar la construcción de los elementos del menú utilizando labelWidget de DropdownMenuEntry." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_fr_FR.json deleted file mode 100644 index 5af1271f6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_fr_FR.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "Menu déroulant", - "info": "Composant de sélection déroulante, prend en charge le filtrage par saisie de texte, et permet de personnaliser les éléments du menu. Il repose principalement sur MenuAnchor et TextFiled pour son implémentation.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation simple du menu déroulant", - "desc": [ - "【dropdownMenuEntries】 : Liste des entrées du menu 【List>】", - "【initialSelection】 : Rappel de validation du formulaire 【T?】", - "【onSelected】 : Rappel de sauvegarde du formulaire 【ValueChanged?】", - "【menuHeight】 : Hauteur du menu 【double】", - "【width】 : Largeur du champ de saisie 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Configuration du style du menu déroulant", - "desc": [ - "【controller】 : Contrôleur de saisie de texte 【TextEditingController?】", - "【label】 : Étiquette du champ de saisie 【Widget?】", - "【textStyle】 : Style du texte du champ de saisie 【TextStyle?】", - "【inputDecorationTheme】 : Thème de décoration du champ de saisie 【InputDecorationTheme?】", - "【leadingIcon】 : Icône de gauche 【Widget?】", - "【trailingIcon】 : Icône de droite lorsque le menu est déployé 【Widget?】", - "【selectedTrailingIcon】 : Icône de droite lorsque le menu est déployé 【Widget?】", - "【hintText】 : Texte d'indication du champ de saisie 【String?】", - "【helperText】 : Texte d'aide du champ de saisie 【String?】", - "【errorText】 : Texte d'erreur du champ de saisie 【String?】", - "【menuStyle】 : Style du menu contextuel 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "Personnalisation des éléments du menu déroulant", - "desc": [ - "Il est possible de personnaliser la construction des éléments du menu via le labelWidget de DropdownMenuEntry." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_it_IT.json deleted file mode 100644 index 074fcd7db..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_it_IT.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "Menu a tendina", - "info": "Componente di selezione a tendina, supporta il filtraggio tramite input di testo e consente la personalizzazione delle voci del menu. Si basa principalmente su MenuAnchor e TextFiled per l'implementazione.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso semplice del menu a tendina", - "desc": [ - "【dropdownMenuEntries】 : Lista delle voci del menu 【List>】", - "【initialSelection】 : Callback di convalida del modulo 【T?】", - "【onSelected】 : Callback di salvataggio del modulo 【ValueChanged?】", - "【menuHeight】 : Altezza del menu 【double】", - "【width】 : Larghezza del campo di input 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Impostazione dello stile del menu a tendina", - "desc": [ - "【controller】 : Controller di input del testo 【TextEditingController?】", - "【label】 : Etichetta del campo di input 【Widget?】", - "【textStyle】 : Stile del testo del campo di input 【TextStyle?】", - "【inputDecorationTheme】 : Tema di decorazione del campo di input 【InputDecorationTheme?】", - "【leadingIcon】 : Icona a sinistra 【Widget?】", - "【trailingIcon】 : Icona a destra quando il menu è espanso 【Widget?】", - "【selectedTrailingIcon】 : Icona a destra quando il menu è espanso 【Widget?】", - "【hintText】 : Testo di suggerimento del campo di input 【String?】", - "【helperText】 : Testo di supporto del campo di input 【String?】", - "【errorText】 : Testo di errore del campo di input 【String?】", - "【menuStyle】 : Stile del menu a comparsa 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "Personalizzazione delle voci del menu a tendina", - "desc": [ - "È possibile personalizzare la costruzione delle voci del menu utilizzando il labelWidget di DropdownMenuEntry." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ja_JP.json deleted file mode 100644 index cab24c05e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ja_JP.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "ドロップダウンメニュー", - "info": "ドロップダウン選択コンポーネント、テキスト入力フィルタリングをサポートし、メニュー項目をカスタマイズ可能。主にMenuAnchorとTextFiledに依存して実装されています。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "ドロップダウンメニューの簡単な使用", - "desc": [ - "【dropdownMenuEntries】 : メニューエントリリスト 【List>】", - "【initialSelection】 : フォーム検証コールバック 【T?】", - "【onSelected】 : フォーム保存コールバック 【ValueChanged?】", - "【menuHeight】 : メニューの高さ 【double】", - "【width】 : 入力ボックスの幅 【double】" - ] - }, - { - "file": "node2.dart", - "name": "ドロップダウンメニューのスタイル設定", - "desc": [ - "【controller】 : テキスト入力コントローラー 【TextEditingController?】", - "【label】 : 入力ボックスのラベル 【Widget?】", - "【textStyle】 : 入力ボックスのテキストスタイル 【TextStyle?】", - "【inputDecorationTheme】 : 入力ボックスの装飾テーマ 【InputDecorationTheme?】", - "【leadingIcon】 : 左側のアイコン 【Widget?】", - "【trailingIcon】 : 右側のメニュー展開時のアイコン 【Widget?】", - "【selectedTrailingIcon】 : 右側のメニュー展開時のアイコン 【Widget?】", - "【hintText】 : 入力ボックスのヒントテキスト 【String?】", - "【helperText】 : 入力ボックスの補助テキスト 【String?】", - "【errorText】 : 入力ボックスのエラーテキスト 【String?】", - "【menuStyle】 : ポップアップメニューのスタイル 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "ドロップダウンメニューのカスタムメニュー項目", - "desc": [ - "DropdownMenuEntryのlabelWidgetを使用してメニュー項目をカスタマイズできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ko_KR.json deleted file mode 100644 index ad6961567..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ko_KR.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "드롭다운 메뉴", - "info": "드롭다운 선택 컴포넌트로, 텍스트 입력 필터링을 지원하며 메뉴 항목을 사용자 정의할 수 있습니다. 기본적으로 MenuAnchor와 TextFiled에 의존하여 구현됩니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "드롭다운 메뉴의 간단한 사용", - "desc": [ - "【dropdownMenuEntries】 : 메뉴 항목 리스트 【List>】", - "【initialSelection】 : 폼 검증 콜백 【T?】", - "【onSelected】 : 폼 저장 콜백 【ValueChanged?】", - "【menuHeight】 : 메뉴 높이 【double】", - "【width】 : 입력 필드 너비 【double】" - ] - }, - { - "file": "node2.dart", - "name": "드롭다운 메뉴 스타일 설정", - "desc": [ - "【controller】 : 텍스트 입력 컨트롤러 【TextEditingController?】", - "【label】 : 입력 필드 라벨 【Widget?】", - "【textStyle】 : 입력 필드 텍스트 스타일 【TextStyle?】", - "【inputDecorationTheme】 : 입력 필드 장식 테마 【InputDecorationTheme?】", - "【leadingIcon】 : 왼쪽 아이콘 【Widget?】", - "【trailingIcon】 : 오른쪽 메뉴 확장 아이콘 【Widget?】", - "【selectedTrailingIcon】 : 오른쪽 메뉴 확장 아이콘 【Widget?】", - "【hintText】 : 입력 필드 힌트 텍스트 【String?】", - "【helperText】 : 입력 필드 보조 텍스트 【String?】", - "【errorText】 : 입력 필드 오류 텍스트 【String?】", - "【menuStyle】 : 팝업 메뉴 스타일 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "드롭다운 메뉴 사용자 정의 메뉴 항목", - "desc": [ - "DropdownMenuEntry의 labelWidget을 통해 메뉴 항목을 사용자 정의할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_pt_PT.json deleted file mode 100644 index 4442f7fcc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_pt_PT.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "Menu Suspenso", - "info": "Componente de seleção suspensa, suporta filtragem de entrada de texto, e permite personalizar os itens do menu. Depende principalmente de MenuAnchor e TextFiled para implementação.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso Simples do Menu Suspenso", - "desc": [ - "【dropdownMenuEntries】 : Lista de entradas do menu 【List>】", - "【initialSelection】 : Callback de validação do formulário 【T?】", - "【onSelected】 : Callback de salvamento do formulário 【ValueChanged?】", - "【menuHeight】 : Altura do menu 【double】", - "【width】 : Largura da caixa de entrada 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Configuração de Estilo do Menu Suspenso", - "desc": [ - "【controller】 : Controlador de entrada de texto 【TextEditingController?】", - "【label】 : Etiqueta da caixa de entrada 【Widget?】", - "【textStyle】 : Estilo do texto da caixa de entrada 【TextStyle?】", - "【inputDecorationTheme】 : Tema de decoração da caixa de entrada 【InputDecorationTheme?】", - "【leadingIcon】 : Ícone à esquerda 【Widget?】", - "【trailingIcon】 : Ícone à direita quando o menu está expandido 【Widget?】", - "【selectedTrailingIcon】 : Ícone à direita quando o menu está expandido 【Widget?】", - "【hintText】 : Texto de dica da caixa de entrada 【String?】", - "【helperText】 : Texto auxiliar da caixa de entrada 【String?】", - "【errorText】 : Texto de erro da caixa de entrada 【String?】", - "【menuStyle】 : Estilo do menu suspenso 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "Personalização de Itens do Menu Suspenso", - "desc": [ - "É possível personalizar a construção de itens do menu através do labelWidget do DropdownMenuEntry." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ru_RU.json deleted file mode 100644 index e04a851f5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ru_RU.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "Выпадающее меню", - "info": "Компонент выбора из выпадающего списка, поддерживает фильтрацию по текстовому вводу, позволяет настраивать пункты меню. Основная реализация зависит от MenuAnchor и TextFiled.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Простое использование выпадающего меню", - "desc": [ - "【dropdownMenuEntries】 : Список пунктов меню 【List>】", - "【initialSelection】 : Обратный вызов проверки формы 【T?】", - "【onSelected】 : Обратный вызов сохранения формы 【ValueChanged?】", - "【menuHeight】 : Высота меню 【double】", - "【width】 : Ширина поля ввода 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Настройка стиля выпадающего меню", - "desc": [ - "【controller】 : Контроллер текстового ввода 【TextEditingController?】", - "【label】 : Метка поля ввода 【Widget?】", - "【textStyle】 : Стиль текста поля ввода 【TextStyle?】", - "【inputDecorationTheme】 : Тема оформления поля ввода 【InputDecorationTheme?】", - "【leadingIcon】 : Иконка слева 【Widget?】", - "【trailingIcon】 : Иконка справа при развернутом меню 【Widget?】", - "【selectedTrailingIcon】 : Иконка справа при развернутом меню 【Widget?】", - "【hintText】 : Подсказка в поле ввода 【String?】", - "【helperText】 : Вспомогательный текст в поле ввода 【String?】", - "【errorText】 : Текст ошибки в поле ввода 【String?】", - "【menuStyle】 : Стиль всплывающего меню 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "Настройка пунктов меню выпадающего меню", - "desc": [ - "Можно настроить пункты меню с помощью labelWidget в DropdownMenuEntry." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_zh-CN.json deleted file mode 100644 index 047ff7ab2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_zh-CN.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "下拉菜单", - "info": "下拉选择组件,支持文本输入过滤,可自定义菜单项。底层主要依赖 MenuAnchor 和 TextFiled 实现。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "下拉菜单的简单使用", - "desc": [ - "【dropdownMenuEntries】 : 菜单条目列表 【List>】", - "【initialSelection】 : 表单验证回调 【T?】", - "【onSelected】 : 表单保存回调 【ValueChanged?】", - "【menuHeight】 : 菜单高度 【double】", - "【width】 : 输入框宽度 【double】" - ] - }, - { - "file": "node2.dart", - "name": "下拉菜单样式设置", - "desc": [ - "【controller】 : 文字输入控制器 【TextEditingController?】", - "【label】 : 输入框标签 【Widget?】", - "【textStyle】 : 输入框文字样式 【TextStyle?】", - "【inputDecorationTheme】 : 输入框装饰主题 【InputDecorationTheme?】", - "【leadingIcon】 : 左侧图标 【Widget?】", - "【trailingIcon】 : 右侧为展开菜单时图标 【Widget?】", - "【selectedTrailingIcon】 : 右侧展开菜单时图标 【Widget?】", - "【hintText】 : 输入框提示文字 【String?】", - "【helperText】 : 输入框辅助文字 【String?】", - "【errorText】 : 输入框错误文字 【String?】", - "【menuStyle】 : 弹出菜单样式 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "下拉菜单自定义菜单项", - "desc": [ - "可以通过 DropdownMenuEntry 的 labelWidget 定制构建菜单项。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node1.dart deleted file mode 100644 index a2dc6ebfe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node1.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class DropdownMenuNode1 extends StatefulWidget { - const DropdownMenuNode1({super.key}); - - @override - State createState() => _DropdownMenuNode1State(); -} - -class _DropdownMenuNode1State extends State { - final List data = ['语文', '数学', '英语', '物理', '化学', '生物', '地理']; - late String _dropdownValue = data.first; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - DropdownMenu( - menuHeight: 200, - initialSelection: data.first, - onSelected: _onSelect, - dropdownMenuEntries: _buildMenuList(data), - ), - const SizedBox(height: 8,), - Text('你选择的学科是: $_dropdownValue') - ], - ); - } - - void _onSelect(String? value) { - setState(() { - _dropdownValue = value!; - }); - } - - List> _buildMenuList(List data) { - return data.map((String value) { - return DropdownMenuEntry(value: value, label: value); - }).toList(); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node2.dart b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node2.dart deleted file mode 100644 index cf4f5eaad..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node2.dart +++ /dev/null @@ -1,148 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -enum ColorLabel { - blue('Blue', Colors.blue), - pink('Pink', Colors.pink), - green('Green', Colors.green), - yellow('Orange', Colors.orange), - grey('Grey', Colors.grey); - - const ColorLabel(this.label, this.color); - - final String label; - final Color color; -} - - -enum IconLabel { - smile('Smile', Icons.sentiment_satisfied_outlined), - cloud('Cloud', Icons.cloud_outlined), - brush('Brush', Icons.brush_outlined), - heart('Heart', Icons.favorite); - - const IconLabel(this.label, this.icon); - - final String label; - final IconData icon; -} - -class DropdownMenuNode2 extends StatefulWidget { - const DropdownMenuNode2({super.key}); - - @override - State createState() => _DropdownMenuNode2State(); -} - -class _DropdownMenuNode2State extends State { - final TextEditingController colorController = TextEditingController(); - final TextEditingController iconController = TextEditingController(); - ColorLabel? selectedColor; - IconLabel? selectedIcon; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.symmetric(vertical: 20,horizontal: 20), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - _buildColorMenu(), - const SizedBox(height: 16), - _buildLabelMenu(), - ], - ), - ), - const SizedBox(height: 8), - _buildInfo() - ], - ); - } - - Widget _buildColorMenu(){ - return DropdownMenu( - initialSelection: ColorLabel.green, - controller: colorController, - requestFocusOnTap: true, - label: const Text('Color'), - width: 160, - menuHeight: 150, - menuStyle: const MenuStyle( - backgroundColor: MaterialStatePropertyAll(Colors.white), - surfaceTintColor: MaterialStatePropertyAll(Colors.white), - padding: MaterialStatePropertyAll(EdgeInsets.symmetric(vertical: 20,horizontal: 8)), - ), - onSelected: (ColorLabel? color) { - setState(() { - selectedColor = color; - }); - }, - dropdownMenuEntries: ColorLabel.values.map((ColorLabel color) { - return DropdownMenuEntry( - value: color, - label: color.label, - enabled: color.label != 'Grey', - style: MenuItemButton.styleFrom( - foregroundColor: color.color, - ), - ); - } - ).toList(), - ); - } - - Widget _buildInfo() { - if (selectedColor != null && selectedIcon != null) { - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text('You selected a ${selectedColor?.label} ${selectedIcon?.label}'), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 5), - child: Icon( - selectedIcon?.icon, - color: selectedColor?.color, - ), - ) - ], - ); - } - return const Text('Please select a color and an icon.'); - } - - Widget _buildLabelMenu() { - return DropdownMenu( - controller: iconController, - enableFilter: false, - requestFocusOnTap: false, - width: 160, - leadingIcon: const Icon(Icons.search), - label: const Text('Icon'), - inputDecorationTheme: const InputDecorationTheme( - filled: true, - contentPadding: EdgeInsets.symmetric(vertical: 5.0), - ), - onSelected: (IconLabel? icon) { - setState(() { - selectedIcon = icon; - }); - }, - dropdownMenuEntries: IconLabel.values.map((IconLabel icon) { - return DropdownMenuEntry( - value: icon, - label: icon.label, - leadingIcon: Icon(icon.icon), - ); - }, - ).toList(), - ); - } -} - - - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node3.dart b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node3.dart deleted file mode 100644 index f401df201..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node3.dart +++ /dev/null @@ -1,128 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class User { - final String name; - final bool man; - final String image; - - const User(this.name, this.man, this.image); - - @override - String toString() { - return 'User{name: $name, man: $man, image: $image}'; - } -} - -class DropdownMenuNode3 extends StatefulWidget { - const DropdownMenuNode3({ super.key }); - - @override - State createState() => _DropdownMenuNode3State(); -} - -class _DropdownMenuNode3State extends State { - late final TextEditingController controller; - - List data = const [ - User('toly', true, 'icon_5.webp'), - User('toly49', false, 'icon_6.webp'), - User('toly42', true, 'icon_7.webp'), - User('toly56', false, 'icon_8.webp'), - User('card', true, 'icon_5.webp'), - User('ls', true, 'icon_6.webp'), - User('alex', true, 'icon_7.webp'), - User('fan sha', false, 'icon_8.webp'), - ]; - - User? _selectUser; - - @override - void initState() { - super.initState(); - controller = TextEditingController(); - } - - @override - void dispose() { - controller.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return DropdownMenu( - width: 300, - menuHeight: 250, - controller: controller, - leadingIcon: _selectUser!=null?SizedBox( - width: 26, - height: 26, - child: Center( - child: CircleAvatar( - radius: 14, - foregroundColor: Colors.transparent, - backgroundImage: - AssetImage('assets/images/head_icon/${_selectUser!.image}'), - ), - ), - ):null, - label: const Text('选择用户'), - onSelected: (User? user) { - print('Selected $user'); - setState(() { - _selectUser = user; - - }); - }, - dropdownMenuEntries: data.map>((User user) { - return DropdownMenuEntry( - value: user, - label: user.name, - // Try commenting the labelWidget out or changing - // the labelWidget's Text parameters. - labelWidget: _UserItem(user: user), - ); - }).toList(), - ); - } -} -class _UserItem extends StatelessWidget { - final User user; - - const _UserItem({ - Key? key, - required this.user, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 6), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - CircleAvatar( - foregroundColor: Colors.transparent, - backgroundImage: - AssetImage('assets/images/head_icon/${user.image}'), - ), - const SizedBox(width: 20), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text(user.name), - Text( - '性别:'+ (user.man ? '男' : '女'), - style: const TextStyle(color: Colors.grey), - ), - ], - ), - ], - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_de_DE.json deleted file mode 100644 index c74d1d999..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "Bearbarer Text", - "info": "Bearbarer Text ist die grundlegendste Komponente von TextField und wird in der Regel nicht allein verwendet.", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von EditableText", - "desc": [ - "【controller】 : Controller 【TextEditingController】", - "【focusNode】 : Fokus 【FocusNode】", - "【style】 : Textstil 【TextStyle】", - "【backgroundCursorColor】 : Hintergrundcursorfarbe 【Color】", - "【cursorColor】 : Cursorfarbe 【Color】", - "Die oben genannten fünf Attribute sind für EditableText obligatorisch, andere sind identisch mit TextField und werden hier nicht aufgeführt." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_en_US.json deleted file mode 100644 index 54b54a0e4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "Editable Text", - "info": "Editable text is the core component at the bottom layer of TextField and is generally not used alone.", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of EditableText", - "desc": [ - "【controller】: Controller 【TextEditingController】", - "【focusNode】: Focus Node 【FocusNode】", - "【style】: Text Style 【TextStyle】", - "【backgroundCursorColor】: Background Cursor Color 【Color】", - "【cursorColor】: Cursor Color 【Color】", - "The above five are the essential properties of EditableText. Others are the same as TextField and will not be listed here." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_es_ES.json deleted file mode 100644 index 54869ba9f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "Texto editable", - "info": "Texto que se puede editar, es el componente central subyacente de TextField, generalmente no se usa solo.", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de EditableText", - "desc": [ - "【controller】: Controlador 【TextEditingController】", - "【focusNode】: Foco 【FocusNode】", - "【style】: Estilo de texto 【TextStyle】", - "【backgroundCursorColor】: Color del cursor de fondo 【Color】", - "【cursorColor】: Color del cursor 【Color】", - "Los cinco anteriores son atributos obligatorios de EditableText, otros son iguales a TextField, no se enumeran aquí." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_fr_FR.json deleted file mode 100644 index 8c42e91cd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "Texte modifiable", - "info": "Texte qui peut être édité, c'est le composant central sous-jacent de TextField, généralement non utilisé seul.", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de EditableText", - "desc": [ - "【controller】 : Contrôleur 【TextEditingController】", - "【focusNode】 : Nœud de focus 【FocusNode】", - "【style】 : Style de texte 【TextStyle】", - "【backgroundCursorColor】 : Couleur du curseur de fond 【Color】", - "【cursorColor】 : Couleur du curseur 【Color】", - "Les cinq propriétés ci-dessus sont obligatoires pour EditableText, les autres sont similaires à TextField et ne sont pas listées ici." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_it_IT.json deleted file mode 100644 index c3ec0779e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "Testo modificabile", - "info": "Testo che può essere modificato, è il componente più fondamentale di TextField, generalmente non utilizzato da solo.", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di EditableText", - "desc": [ - "【controller】 : Controller 【TextEditingController】", - "【focusNode】 : Focus 【FocusNode】", - "【style】 : Stile del testo 【TextStyle】", - "【backgroundCursorColor】 : Colore del cursore di sfondo 【Color】", - "【cursorColor】 : Colore del cursore 【Color】", - "I cinque attributi sopra sono obbligatori per EditableText, gli altri sono simili a TextField e non verranno elencati qui." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ja_JP.json deleted file mode 100644 index 4098e3865..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "編集可能なテキスト", - "info": "編集可能なテキストで、TextFieldの最もコアなコンポーネントです。通常は単独で使用しません。", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EditableTextの基本使用", - "desc": [ - "【controller】 : コントローラー 【TextEditingController】", - "【focusNode】 : フォーカス 【FocusNode】", - "【style】 : テキストスタイル 【TextStyle】", - "【backgroundCursorColor】 : 背景カーソルカラー 【Color】", - "【cursorColor】 : カーソルカラー 【Color】", - "上記の5つはEditableTextの必須属性です。その他はTextFieldと同じで、ここでは列挙しません。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ko_KR.json deleted file mode 100644 index b3865d545..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "편집 가능한 텍스트", - "info": "편집 가능한 텍스트는 TextField의 가장 핵심적인 구성 요소로, 일반적으로 단독으로 사용되지 않습니다.", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EditableText 기본 사용법", - "desc": [ - "【controller】 : 컨트롤러 【TextEditingController】", - "【focusNode】 : 포커스 【FocusNode】", - "【style】 : 텍스트 스타일 【TextStyle】", - "【backgroundCursorColor】 : 배경 커서 색상 【Color】", - "【cursorColor】 : 커서 색상 【Color】", - "위 다섯 가지는 EditableText의 필수 속성이며, 나머지는 TextField와 동일하므로 여기서는 더 이상 열거하지 않습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_pt_PT.json deleted file mode 100644 index e558d5412..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "Texto Editável", - "info": "Texto que pode ser editado, é o componente central mais básico do TextField, geralmente não é usado sozinho.", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do EditableText", - "desc": [ - "【controller】 : Controlador 【TextEditingController】", - "【focusNode】 : Foco 【FocusNode】", - "【style】 : Estilo de Texto 【TextStyle】", - "【backgroundCursorColor】 : Cor do Cursor de Fundo 【Color】", - "【cursorColor】 : Cor do Cursor 【Color】", - "Os cinco acima são atributos obrigatórios do EditableText, outros são semelhantes ao TextField, não serão listados aqui." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ru_RU.json deleted file mode 100644 index b0182f626..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "Редактируемый текст", - "info": "Редактируемый текст, это основной компонент TextField, обычно не используется отдельно.", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование EditableText", - "desc": [ - "【controller】 : Контроллер 【TextEditingController】", - "【focusNode】 : Фокус 【FocusNode】", - "【style】 : Стиль текста 【TextStyle】", - "【backgroundCursorColor】 : Цвет фонового курсора 【Color】", - "【cursorColor】 : Цвет курсора 【Color】", - "Эти пять свойств являются обязательными для EditableText, остальные аналогичны TextField и здесь не перечисляются." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_zh-CN.json deleted file mode 100644 index 010756602..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "可编辑文字", - "info": "可以编辑的文字,是TextField的底层最核心组件,一般不单独使用。", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EditableText基本使用", - "desc": [ - "【controller】 : 控制器 【TextEditingController】", - "【focusNode】 : 焦点 【FocusNode】", - "【style】 : 文字样式 【TextStyle】", - "【backgroundCursorColor】 : 背景游标颜色 【Color】", - "【cursorColor】 : 游标颜色 【Color】", - "上面五个是EditableText必须的属性,其他同TextField,此处不再列举。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/node1_base.dart deleted file mode 100644 index 951baf837..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/node1_base.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class EditableTextDemo extends StatefulWidget { - const EditableTextDemo({Key? key}) : super(key: key); - - @override - _EditableTextDemoState createState() => _EditableTextDemoState(); -} - -class _EditableTextDemoState extends State { - final TextEditingController _ctrl = - TextEditingController(text: 'Hello Flutter Unit!'); - final FocusNode _node = FocusNode(); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(8.0), - child: EditableText( - controller: _ctrl, - focusNode: _node, - style: const TextStyle(fontSize: 16, color: Colors.blue), - cursorColor: Colors.blue, - backgroundCursorColor: Colors.orange, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_de_DE.json deleted file mode 100644 index 35e6a1b8d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_de_DE.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "Erhobener Button", - "info": "Material-stil erhobener Button, ähnlich wie RaisedButton. Eigenschaften wie Rahmen, Farbe, Schatten können durch Stile geändert werden.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ElevatedButton", - "desc": [ - "【child】 : Hat es ein scrollendes Hauptelement 【Widget】", - "【onPressed】 : Klickereignis 【VoidCallback】", - "【onLongPress】 : Langer Druckereignis 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Stil von ElevatedButton", - "desc": [ - "【style】 : Button-Stil 【ButtonStyle】", - "【focusNode】 : Fokus 【FocusNode】", - "【clipBehavior】 : Zuschneideverhalten 【Clip】", - "【autofocus】 : Autofokus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_en_US.json deleted file mode 100644 index ece99fa06..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_en_US.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "Raised Button", - "info": "A Material-styled raised button, similar in behavior to RaisedButton. Properties such as border, color, and shadow can be changed through styling.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ElevatedButton", - "desc": [ - "【child】: Whether it has a scrollable body 【Widget】", - "【onPressed】: Click event 【VoidCallback】", - "【onLongPress】: Long press event 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "ElevatedButton Style", - "desc": [ - "【style】: Button style 【ButtonStyle】", - "【focusNode】: Focus 【FocusNode】", - "【clipBehavior】: Clip behavior 【Clip】", - "【autofocus】: Auto focus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_es_ES.json deleted file mode 100644 index 4381dd4d7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_es_ES.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "Botón elevado", - "info": "Botón elevado de estilo Material, similar en comportamiento a RaisedButton. Se pueden cambiar propiedades como el borde, el color, la sombra, etc., mediante estilos.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ElevatedButton", - "desc": [ - "【child】 : Si tiene un cuerpo desplazable 【Widget】", - "【onPressed】 : Evento de clic 【VoidCallback】", - "【onLongPress】 : Evento de pulsación prolongada 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Estilo de ElevatedButton", - "desc": [ - "【style】 : Estilo del botón 【ButtonStyle】", - "【focusNode】 : Foco 【FocusNode】", - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【autofocus】 : Enfoque automático 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_fr_FR.json deleted file mode 100644 index 3768217e9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_fr_FR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "Bouton surélevé", - "info": "Bouton de style Material, similaire à RaisedButton. Les propriétés telles que la bordure, la couleur, l'ombre peuvent être modifiées via le style.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'ElevatedButton", - "desc": [ - "【child】 : Si le bouton a un corps défilant 【Widget】", - "【onPressed】 : Événement de clic 【VoidCallback】", - "【onLongPress】 : Événement de pression longue 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Style d'ElevatedButton", - "desc": [ - "【style】 : Style du bouton 【ButtonStyle】", - "【focusNode】 : Focus 【FocusNode】", - "【clipBehavior】 : Comportement de découpage 【Clip】", - "【autofocus】 : Autofocus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_it_IT.json deleted file mode 100644 index c58874075..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_it_IT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "Pulsante sollevato", - "info": "Pulsante in stile Material, simile a RaisedButton. È possibile modificare proprietà come bordo, colore, ombra, ecc. attraverso lo stile.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ElevatedButton", - "desc": [ - "【child】 : Se ha un corpo scorrevole 【Widget】", - "【onPressed】 : Evento di clic 【VoidCallback】", - "【onLongPress】 : Evento di pressione lunga 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Stile di ElevatedButton", - "desc": [ - "【style】 : Stile del pulsante 【ButtonStyle】", - "【focusNode】 : Fuoco 【FocusNode】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【autofocus】 : Autofocus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ja_JP.json deleted file mode 100644 index f094a53f1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ja_JP.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "昇格ボタン", - "info": "Materialスタイルの昇格ボタンで、RaisedButtonと似たような動作をします。スタイルを変更して、ボーダー、色、影などのプロパティを変更できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ElevatedButtonの基本使用", - "desc": [ - "【child】 : スクロール主体を持つかどうか 【Widget】", - "【onPressed】 : クリックイベント 【VoidCallback】", - "【onLongPress】 : 長押しイベント 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "ElevatedButtonのスタイル", - "desc": [ - "【style】 : ボタンのスタイル 【ButtonStyle】", - "【focusNode】 : フォーカス 【FocusNode】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【autofocus】 : 自動フォーカス 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ko_KR.json deleted file mode 100644 index af9be9331..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ko_KR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "올라간 버튼", - "info": "Material 스타일의 올라간 버튼으로, RaisedButton과 유사하게 동작합니다. 스타일을 통해 테두리, 색상, 그림자 등의 속성을 변경할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ElevatedButton 기본 사용법", - "desc": [ - "【child】 : 스크롤 가능한 본체 여부 【Widget】", - "【onPressed】 : 클릭 이벤트 【VoidCallback】", - "【onLongPress】 : 길게 누르기 이벤트 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "ElevatedButton 스타일", - "desc": [ - "【style】 : 버튼 스타일 【ButtonStyle】", - "【focusNode】 : 포커스 【FocusNode】", - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【autofocus】 : 자동 포커스 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_pt_PT.json deleted file mode 100644 index 91c7f259b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_pt_PT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "Botão Elevado", - "info": "Botão elevado no estilo Material, semelhante ao RaisedButton. Pode alterar propriedades como borda, cor, sombra, etc., através de estilos.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ElevatedButton", - "desc": [ - "【child】 : Se tem um corpo rolável 【Widget】", - "【onPressed】 : Evento de clique 【VoidCallback】", - "【onLongPress】 : Evento de pressão longa 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Estilo do ElevatedButton", - "desc": [ - "【style】 : Estilo do botão 【ButtonStyle】", - "【focusNode】 : Foco 【FocusNode】", - "【clipBehavior】 : Comportamento de corte 【Clip】", - "【autofocus】 : Foco automático 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ru_RU.json deleted file mode 100644 index 91c2bfe13..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ru_RU.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "Поднятая кнопка", - "info": "Кнопка в стиле Material, похожая на RaisedButton. Можно изменить свойства, такие как граница, цвет, тень и т.д., через стили.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ElevatedButton", - "desc": [ - "【child】 : Имеет ли прокручиваемое содержимое 【Widget】", - "【onPressed】 : Событие нажатия 【VoidCallback】", - "【onLongPress】 : Событие долгого нажатия 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Стиль ElevatedButton", - "desc": [ - "【style】 : Стиль кнопки 【ButtonStyle】", - "【focusNode】 : Фокус 【FocusNode】", - "【clipBehavior】 : Поведение обрезки 【Clip】", - "【autofocus】 : Автофокус 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_zh-CN.json deleted file mode 100644 index a4f8675db..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_zh-CN.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "升起按钮", - "info": "Material风格的升起按钮,表现和RaisedButton类似。可通过样式更改边框、颜色、阴影等属性。", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ElevatedButton基本使用", - "desc": [ - "【child】 : 是否具有滚动主体 【Widget】", - "【onPressed】 : 点击事件 【VoidCallback】", - "【onLongPress】 : 长按事件 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "ElevatedButton样式", - "desc": [ - "【style】 : 按钮样式 【ButtonStyle】", - "【focusNode】 : 焦点 【FocusNode】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【autofocus】 : 自动聚焦 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/node1_base.dart deleted file mode 100644 index 68ce3de16..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/node1_base.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ElevatedButtonDemo extends StatelessWidget { - const ElevatedButtonDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - height: 60, - child: Wrap( - spacing: 20, - children: [ - ElevatedButton( - child: const Text('ElevatedButton'), - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - const ElevatedButton( - child: Text('禁用按钮'), - onPressed: null, - onLongPress: null, - ), - ], - )); - } - - void _onPressed() {} - - void _onLongPress() {} -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/node2_style.dart b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/node2_style.dart deleted file mode 100644 index afe9bf65d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/node2_style.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ElevatedButtonStyleDemo extends StatelessWidget { - const ElevatedButtonStyleDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - child: Wrap( - spacing: 10, - children: [ - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.orange, - foregroundColor: Colors.white, - elevation: 2, - shadowColor: Colors.orangeAccent), - child: const Text('ElevatedButton样式'), - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.white, - foregroundColor: Colors.black, - side: const BorderSide(color: Colors.blue,width: 1), - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)) - ), - // elevation: 2, - shadowColor: Colors.orangeAccent), - child: const Text('ElevatedButton边线'), - autofocus: false, - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - ], - ), - ); - } - - void _onPressed() {} - - void _onLongPress() {} -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_de_DE.json deleted file mode 100644 index adafa04d2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "Erweitern-Symbol", - "info": "Ein Erweitern-Button, der beim Klicken eine 180-Grad-Drehanimation ausführt. Kann Farbe, Größe, Rand angeben und Klickereignisse empfangen.", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ExpandIcon", - "desc": [ - "【isExpanded】 : Ob erweitert 【bool】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】", - "【size】 : Symbolgröße 【double】", - "【color】 : Farbe wenn nicht erweitert 【Color】", - "【expandedColor】 : Farbe wenn erweitert 【Color】", - "【onPressed】 : Klickereignis 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_en_US.json deleted file mode 100644 index 09a290c9d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "Expand Icon", - "info": "An expand button that performs a 180-degree rotation animation when clicked. Can specify color, size, margin, and receive click events.", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ExpandIcon", - "desc": [ - "【isExpanded】 : Whether expanded 【bool】", - "【padding】 : Padding 【EdgeInsetsGeometry】,", - "【size】 : Icon size 【double】", - "【color】 : Color when not expanded 【Color】", - "【expandedColor】 : Color when expanded 【Color】", - "【onPressed】 : Click event 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_es_ES.json deleted file mode 100644 index 3b1b28a23..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "Icono de expansión", - "info": "Un botón de expansión que, al hacer clic, realiza una animación de rotación de 180 grados. Se puede especificar el color, el tamaño, el margen y recibir eventos de clic.", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ExpandIcon", - "desc": [ - "【isExpanded】 : Si está expandido 【bool】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】,", - "【size】 : Tamaño del icono 【double】", - "【color】 : Color cuando no está expandido 【Color】", - "【expandedColor】 : Color cuando está expandido 【Color】", - "【onPressed】 : Evento de clic 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_fr_FR.json deleted file mode 100644 index 31b6694f2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "Icône de déploiement", - "info": "Un bouton de déploiement qui exécute une animation de rotation de 180 degrés lorsqu'il est cliqué. Peut spécifier la couleur, la taille, la marge et recevoir des événements de clic.", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ExpandIcon", - "desc": [ - "【isExpanded】 : Déployé ou non 【bool】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】,", - "【size】 : Taille de l'icône 【double】", - "【color】 : Couleur lorsqu'il n'est pas déployé 【Color】", - "【expandedColor】 : Couleur lorsqu'il est déployé 【Color】", - "【onPressed】 : Événement de clic 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_it_IT.json deleted file mode 100644 index a166b8118..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "Icona Espandi", - "info": "Un pulsante di espansione che esegue un'animazione di rotazione di 180 gradi quando viene cliccato. È possibile specificare colore, dimensione, margine e ricevere eventi di clic.", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di ExpandIcon", - "desc": [ - "【isExpanded】 : Se è espanso 【bool】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】,", - "【size】 : Dimensione dell'icona 【double】", - "【color】 : Colore quando non è espanso 【Color】", - "【expandedColor】 : Colore quando è espanso 【Color】", - "【onPressed】 : Evento di clic 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ja_JP.json deleted file mode 100644 index 561d97c77..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "展開アイコン", - "info": "展開ボタンで、クリックすると180度回転するアニメーションを自動的に実行します。色、サイズ、マージンを指定でき、クリックイベントを受け取ります。", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpandIconの基本的な使用", - "desc": [ - "【isExpanded】 : 展開されているかどうか 【bool】", - "【padding】 : パディング 【EdgeInsetsGeometry】,", - "【size】 : アイコンのサイズ 【double】", - "【color】 : 展開されていないときの色 【Color】", - "【expandedColor】 : 展開されているときの色 【Color】", - "【onPressed】 : クリックイベント 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ko_KR.json deleted file mode 100644 index 86696afd7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "펼치기 아이콘", - "info": "펼치기 버튼으로, 클릭 시 180도 회전 애니메이션을 자동으로 실행합니다. 색상, 크기, 여백을 지정할 수 있으며 클릭 이벤트를 받습니다.", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpandIcon 기본 사용", - "desc": [ - "【isExpanded】 : 펼쳐져 있는지 여부 【bool】", - "【padding】 : 안쪽 여백 【EdgeInsetsGeometry】,", - "【size】 : 아이콘 크기 【double】", - "【color】 : 펼쳐지지 않았을 때 색상 【Color】", - "【expandedColor】 : 펼쳐졌을 때 색상 【Color】", - "【onPressed】 : 클릭 이벤트 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_pt_PT.json deleted file mode 100644 index 61a792889..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "Ícone de Expansão", - "info": "Um botão de expansão que executa uma animação de rotação de 180 graus ao ser clicado. Pode especificar cor, tamanho, margem e receber eventos de clique.", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ExpandIcon", - "desc": [ - "【isExpanded】 : Se está expandido 【bool】", - "【padding】 : Margem interna 【EdgeInsetsGeometry】,", - "【size】 : Tamanho do ícone 【double】", - "【color】 : Cor quando não expandido 【Color】", - "【expandedColor】 : Cor quando expandido 【Color】", - "【onPressed】 : Evento de clique 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ru_RU.json deleted file mode 100644 index f642cbde0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "Иконка раскрытия", - "info": "Кнопка раскрытия, которая при нажатии выполняет анимацию поворота на 180 градусов. Можно указать цвет, размер, отступы и обрабатывать события нажатия.", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ExpandIcon", - "desc": [ - "【isExpanded】 : Раскрыто ли 【bool】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】", - "【size】 : Размер иконки 【double】", - "【color】 : Цвет в нераскрытом состоянии 【Color】", - "【expandedColor】 : Цвет в раскрытом состоянии 【Color】", - "【onPressed】 : Событие нажатия 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_zh-CN.json deleted file mode 100644 index 0e38b4cbe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "展开图标", - "info": "一个展开按钮,点击时会自己执行旋转180的动画。可指定颜色、大小、边距,接收点击事件。", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpandIcon基本使用", - "desc": [ - "【isExpanded】 : 是否展开 【bool】", - "【padding】 : 内边距 【EdgeInsetsGeometry】,", - "【size】 : 图标大小 【double】", - "【color】 : 不展开时颜色 【Color】", - "【expandedColor】 : 展开时颜色 【Color】", - "【onPressed】 : 点击事件 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/node1_base.dart deleted file mode 100644 index f3c3ae024..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/node1_base.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-16 -/// contact me by email 1981462002@qq.com - -class CustomExpandIcon extends StatefulWidget { - const CustomExpandIcon({Key? key}) : super(key: key); - - @override - _CustomExpandIconState createState() => _CustomExpandIconState(); -} - -class _CustomExpandIconState extends State { - bool _closed = true; - - @override - Widget build(BuildContext context) { - return ExpandIcon( - isExpanded: _closed, - padding: const EdgeInsets.all(5), - size: 30, - color: Colors.blue, - expandedColor: Colors.orangeAccent, - onPressed: (value) => setState(() => _closed = !_closed), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_de_DE.json deleted file mode 100644 index 1fa12fbc1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "Erweiterungsliste", - "info": "Erweiterbare Listenkomponente, die logisch für einfache oder mehrfache Erweiterungen implementiert werden kann. Kann die Animationsdauer für die Erweiterung festlegen und empfängt einen Rückruf bei der Erweiterung", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ExpansionPanelList", - "desc": [ - "【children】 : Liste der Unterkomponenten 【List】", - "【animationDuration】 : Animationsdauer 【Duration】", - "【expansionCallback】 : Rückruf bei Erweiterung 【List】", - "【onPressed】 : Klickereignis 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_en_US.json deleted file mode 100644 index 2c2c9e002..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "Expandable List", - "info": "A list component that can be expanded, which can implement single or multiple expansions based on logic. You can specify the duration of the expansion animation and receive expansion callbacks.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ExpansionPanelList", - "desc": [ - "【children】: List of child components 【List】", - "【animationDuration】: Animation duration 【Duration】", - "【expansionCallback】: Expansion callback 【List】", - "【onPressed】: Click event 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_es_ES.json deleted file mode 100644 index 7ad00b1f8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "Lista Expandible", - "info": "Componente de lista expandible que puede implementar expansión única o múltiple según la lógica. Puede especificar la duración de la animación de expansión y recibir una devolución de llamada de expansión.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ExpansionPanelList", - "desc": [ - "【children】 : Lista de componentes hijos 【List】", - "【animationDuration】 : Duración de la animación 【Duration】", - "【expansionCallback】 : Devolución de llamada de expansión 【List】", - "【onPressed】 : Evento de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_fr_FR.json deleted file mode 100644 index 80df8e542..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "Liste de déploiement", - "info": "Composant de liste extensible, pouvant être implémenté pour un déploiement unique ou multiple selon la logique. Permet de spécifier la durée de l'animation de déploiement et reçoit un rappel de déploiement.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ExpansionPanelList", - "desc": [ - "【children】 : Liste des composants enfants 【List】", - "【animationDuration】 : Durée de l'animation 【Duration】", - "【expansionCallback】 : Rappel de déploiement 【List】", - "【onPressed】 : Événement de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_it_IT.json deleted file mode 100644 index eef556546..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "Lista Espandibile", - "info": "Componente lista espandibile, può essere implementato per espansione singola o multipla in base alla logica. È possibile specificare la durata dell'animazione di espansione e ricevere un callback di espansione", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di ExpansionPanelList", - "desc": [ - "【children】 : Lista dei componenti figli 【List】", - "【animationDuration】 : Durata dell'animazione 【Duration】", - "【expansionCallback】 : Callback di espansione 【List】", - "【onPressed】 : Evento di click 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ja_JP.json deleted file mode 100644 index 4d590b2ad..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "展開リスト", - "info": "展開可能なリストコンポーネントで、ロジックに応じて単一展開または複数展開を実現できます。展開アニメーションの持続時間を指定でき、展開コールバックを受け取ります", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpansionPanelList基本使用", - "desc": [ - "【children】 : 子コンポーネントリスト 【List】", - "【animationDuration】 : アニメーションの持続時間 【Duration】", - "【expansionCallback】 : 展開コールバック 【List】", - "【onPressed】 : クリックイベント 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ko_KR.json deleted file mode 100644 index 21d91c6f7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "확장 목록", - "info": "확장 가능한 목록 컴포넌트로, 로직에 따라 단일 확장 또는 다중 확장을 구현할 수 있습니다. 확장 애니메이션 지속 시간을 지정할 수 있으며, 확장 콜백을 받습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpansionPanelList 기본 사용", - "desc": [ - "【children】 : 자식 컴포넌트 목록 【List】", - "【animationDuration】 : 애니메이션 지속 시간 【Duration】", - "【expansionCallback】 : 확장 콜백 【List】", - "【onPressed】 : 클릭 이벤트 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_pt_PT.json deleted file mode 100644 index 4432a0195..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "Lista Expansível", - "info": "Componente de lista expansível, pode implementar expansão única ou múltipla de acordo com a lógica. Pode especificar a duração da animação de expansão e receber um callback de expansão.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do ExpansionPanelList", - "desc": [ - "【children】 : Lista de componentes filhos 【List】", - "【animationDuration】 : Duração da animação 【Duration】", - "【expansionCallback】 : Callback de expansão 【List】", - "【onPressed】 : Evento de clique 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ru_RU.json deleted file mode 100644 index 6ab3ff8e8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "Раскрывающийся список", - "info": "Раскрывающийся компонент списка, который может быть реализован для одиночного или множественного раскрытия в зависимости от логики. Можно указать продолжительность анимации раскрытия, принимает обратный вызов при раскрытии", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ExpansionPanelList", - "desc": [ - "【children】 : Список дочерних компонентов 【List】", - "【animationDuration】 : Продолжительность анимации 【Duration】", - "【expansionCallback】 : Обратный вызов при раскрытии 【List】", - "【onPressed】 : Событие нажатия 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_zh-CN.json deleted file mode 100644 index 25d51a59d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "展开列表", - "info": "可展开的列表组件,可根据逻辑来实现单展开或多展开。可指定展开动画时长,接收展开回调", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpansionPanelList基本使用", - "desc": [ - "【children】 : 子组件列表 【List】", - "【animationDuration】 : 动画时长 【Duration】", - "【expansionCallback】 : 展开回调 【List】", - "【onPressed】 : 点击事件 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/node1_base.dart deleted file mode 100644 index 2576dc4a9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/node1_base.dart +++ /dev/null @@ -1,88 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class CustomExpansionPanelList extends StatefulWidget { - const CustomExpansionPanelList({Key? key}) : super(key: key); - - @override - _CustomExpansionPanelListState createState() => - _CustomExpansionPanelListState(); -} - -class _CustomExpansionPanelListState extends State { - final List data = [ - Colors.red[50]!, - Colors.red[100]!, - Colors.red[200]!, - Colors.red[300]!, - Colors.red[400]!, - Colors.red[500]!, - Colors.red[600]!, - Colors.red[700]!, - Colors.red[800]!, - Colors.red[900]!, - ]; - int _position = 0; - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 300, - child: ExpansionPanelList( - children: data.map((color) => _buildItem(color)).toList(), - animationDuration: const Duration(milliseconds: 200), - expansionCallback: (index, open) { - setState(() => _position = open ? -1 : index); - }, - ), - ); - } - - ExpansionPanel _buildItem(Color color) { - return ExpansionPanel( - isExpanded: data.indexOf(color) == _position, - canTapOnHeader: true, - headerBuilder: (ctx, index) => Center( - child: Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Container( - height: 30, - width: 30, - decoration: - BoxDecoration(color: color, shape: BoxShape.circle), - ), - Container( - width: 120, - alignment: Alignment.center, - height: 50, - child: Text( - colorString(color), - style: const TextStyle(color: Colors.black), - ), - ), - ], - ), - ), - body: Container( - alignment: Alignment.center, - height: 50, - color: color, - child: Text( - colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]), - ), - )); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_de_DE.json deleted file mode 100644 index e0286cecc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "Erweiterungs-Kachel", - "info": "Ein allgemeines Erweiterungsfeld, das Komponenten an einer bestimmten Stelle platzieren kann. Beim Klicken werden die darunter liegenden Komponenten ein- und ausgeklappt. Empfängt Ereignisse beim Einklappen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ExpansionTile", - "desc": [ - "【children】 : Erweiterungsinhalt 【List】", - "【leading】 : Linke Kopfkomponente 【Widget】", - "【title】 : Mittlere Kopfkomponente 【Widget】", - "【trailing】 : Rechte Kopfkomponente 【Widget】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【onExpansionChanged】 : Einklapp-Ereignis 【Function(bool)】", - "【initiallyExpanded】 : Beim Start erweitert 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_en_US.json deleted file mode 100644 index 26aadb370..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "Expand Tile", - "info": "A general-purpose expansion panel that can place components in specified locations. Clicking it will collapse or expand the components below. Receives events upon collapsing.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ExpansionTile", - "desc": [ - "【children】: Expanded content 【List】", - "【leading】: Leading component 【Widget】", - "【title】: Title component 【Widget】", - "【trailing】: Trailing component 【Widget】", - "【backgroundColor】: Background color 【Color】", - "【onExpansionChanged】: Collapse event 【Function(bool)】", - "【initiallyExpanded】: Whether initially expanded 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_es_ES.json deleted file mode 100644 index bcd411268..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "Panel Expandible", - "info": "Un panel expandible genérico que permite colocar componentes en áreas específicas. Al hacer clic, se pliega o despliega para mostrar u ocultar los componentes inferiores. Recibe eventos al plegarse.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ExpansionTile", - "desc": [ - "【children】: Contenido expandido 【List】", - "【leading】: Componente izquierdo del encabezado 【Widget】", - "【title】: Componente central del encabezado 【Widget】", - "【trailing】: Componente derecho del encabezado 【Widget】", - "【backgroundColor】: Color de fondo 【Color】", - "【onExpansionChanged】: Evento de plegado 【Function(bool)】", - "【initiallyExpanded】: Si está inicialmente expandido 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_fr_FR.json deleted file mode 100644 index 53c7262c8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "Tuile d'expansion", - "info": "Un panneau d'expansion générique qui peut placer des composants dans une partie spécifiée. Cliquez pour plier ou déplier les composants ci-dessous. Reçoit un événement lors du pliage.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'ExpansionTile", - "desc": [ - "【children】 : Contenu déplié 【List】", - "【leading】 : Composant gauche de la tête 【Widget】", - "【title】 : Composant central de la tête 【Widget】", - "【trailing】 : Composant droit de la tête 【Widget】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【onExpansionChanged】 : Événement de pliage 【Function(bool)】", - "【initiallyExpanded】 : Déplié initialement 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_it_IT.json deleted file mode 100644 index 7c14f9bec..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "Piastrella Espandibile", - "info": "Un pannello espandibile generico, che può posizionare componenti in aree specifiche. Cliccando, si espande o collassa per mostrare o nascondere i componenti sottostanti. Riceve eventi quando viene collassato.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di ExpansionTile", - "desc": [ - "【children】 : Contenuto espanso 【List】", - "【leading】 : Componente sinistro dell'intestazione 【Widget】", - "【title】 : Componente centrale dell'intestazione 【Widget】", - "【trailing】 : Componente destro dell'intestazione 【Widget】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【onExpansionChanged】 : Evento di collassamento 【Function(bool)】", - "【initiallyExpanded】 : Se espanso inizialmente 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ja_JP.json deleted file mode 100644 index 9dd2b3c30..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "展開タイル", - "info": "一般的な展開バーで、指定された部分にコンポーネントを配置でき、クリックすると下のコンポーネントを折りたたんで表示/非表示にします。折りたたみ時のイベントを受け取ります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpansionTileの基本的な使用", - "desc": [ - "【children】 : 展開内容 【List】", - "【leading】 : ヘッダー左コンポーネント 【Widget】", - "【title】 : ヘッダー中央コンポーネント 【Widget】", - "【trailing】 : ヘッダー右コンポーネント 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【onExpansionChanged】 : 折りたたみイベント 【Function(bool)】", - "【initiallyExpanded】 : 初期状態で展開されているか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ko_KR.json deleted file mode 100644 index ab1bf3326..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "확장 타일", - "info": "일반적인 확장 바, 지정된 부분에 컴포넌트를 배치할 수 있으며, 클릭 시 아래 컴포넌트를 접거나 펼칠 수 있습니다. 접힐 때 이벤트를 수신합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpansionTile 기본 사용", - "desc": [ - "【children】 : 확장 내용 【List】", - "【leading】 : 헤더 왼쪽 컴포넌트 【Widget】", - "【title】 : 헤더 중앙 컴포넌트 【Widget】", - "【trailing】 : 헤더 오른쪽 컴포넌트 【Widget】", - "【backgroundColor】 : 배경색 【Color】", - "【onExpansionChanged】 : 접힘 이벤트 【Function(bool)】", - "【initiallyExpanded】 : 초기 상태에서 펼쳐져 있는지 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_pt_PT.json deleted file mode 100644 index 5ad3db3c0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "Azulejo de Expansão", - "info": "Uma barra de expansão genérica que pode ser usada para colocar componentes em uma área especificada. Clicar nela irá expandir ou recolher os componentes abaixo. Recebe eventos quando recolhida.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ExpansionTile", - "desc": [ - "【children】: Conteúdo expandido 【List】", - "【leading】: Componente à esquerda do cabeçalho 【Widget】", - "【title】: Componente no centro do cabeçalho 【Widget】", - "【trailing】: Componente à direita do cabeçalho 【Widget】", - "【backgroundColor】: Cor de fundo 【Color】", - "【onExpansionChanged】: Evento de recolhimento 【Function(bool)】", - "【initiallyExpanded】: Expandido inicialmente 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ru_RU.json deleted file mode 100644 index 92d07803f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "Раскрывающаяся плитка", - "info": "Универсальная раскрывающаяся панель, в которой можно разместить компоненты в указанной области. При нажатии сворачивает или раскрывает компоненты снизу. Получает события при сворачивании.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ExpansionTile", - "desc": [ - "【children】 : Раскрываемое содержимое 【List】", - "【leading】 : Компонент слева в заголовке 【Widget】", - "【title】 : Компонент в центре заголовка 【Widget】", - "【trailing】 : Компонент справа в заголовке 【Widget】", - "【backgroundColor】 : Цвет фона 【Color】", - "【onExpansionChanged】 : Событие сворачивания 【Function(bool)】", - "【initiallyExpanded】 : Раскрыт ли изначально 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_zh-CN.json deleted file mode 100644 index 8eca010f4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "展开瓦片", - "info": "一个通用的展开栏,可在指定的部位安放组件,点击时会折叠显隐下方组件。接收折叠时事件。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpansionTile基本使用", - "desc": [ - "【children】 : 展开内容 【List】", - "【leading】 : 头左组件 【Widget】", - "【title】 : 头中组件 【Widget】", - "【trailing】 : 头尾组件 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【onExpansionChanged】 : 折叠事件 【Function(bool)】", - "【initiallyExpanded】 : 是否初始时展开 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/node1_base.dart deleted file mode 100644 index d3f0f8163..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/node1_base.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/material.dart'; -import '../../StatelessWidget/RadioListTile/node1_base.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomExpansionTile extends StatefulWidget { - const CustomExpansionTile({Key? key}) : super(key: key); - - @override - _CustomExpansionTileState createState() => _CustomExpansionTileState(); -} - -class _CustomExpansionTileState extends State { - @override - Widget build(BuildContext context) { - return ExpansionTile( - leading: const Icon(Icons.star), - title: const Text("选择语言"), - backgroundColor: Colors.grey.withAlpha(6), - onExpansionChanged: (value) { - print('$value'); - }, - initiallyExpanded: false, - children: const[CustomRadioListTile()], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_de_DE.json deleted file mode 100644 index 54c851112..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_de_DE.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "Gefüllter Button", - "info": "Ein gefüllter Button, der den Material Design-Richtlinien entspricht, dessen Stil durch FilledButtonTheme festgelegt wird.", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Grundlegende Verwendung", - "desc": [ - "【child】 : Buttoninhalt 【Widget】", - "【onPressed】 : Klick-Ereignis 【VoidCallback】", - "【onHover】 : Hover-Ereignis 【ValueChanged? 】", - "【onLongPress】 : Langdruck-Ereignis 【VoidCallback?】", - "Der gefüllte Button ist visuell nur dem [FloatingActionButton] unterlegen und wird für wichtige, abschließende Aktionen wie Speichern, Sofort beitreten oder Bestätigen verwendet." - ] - }, - { - "file": "node2.dart", - "name": "Farbtonvariante", - "desc": [ - "FilledButton.tonal ist ein tonal gefüllter Button, der visuell zwischen [FilledButton] und [OutlinedButton] liegt und für Szenarien geeignet ist, die eine etwas stärkere Betonung als ein Konturbutton erfordern, aber eine niedrigere Priorität haben. Zum Beispiel der [Weiter] Button." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_en_US.json deleted file mode 100644 index 45d61d7b4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_en_US.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "Filled Button", - "info": "A filled button that conforms to Material Design, with styles set via FilledButtonTheme.", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Basic Usage", - "desc": [ - "【child】: Button content 【Widget】", - "【onPressed】: Click event 【VoidCallback】", - "【onHover】: Long press event 【ValueChanged? 】", - "【onLongPress】: Long press event 【VoidCallback?】", - "The filled button is visually second only to [FloatingActionButton] and is used for important, finalizing actions such as save, join now, or confirm." - ] - }, - { - "file": "node2.dart", - "name": "Tonal Variant", - "desc": [ - "FilledButton.tonal is a tonal filled button, visually between [FilledButton] and [OutlinedButton], suitable for scenarios requiring slightly stronger emphasis than an outlined button but with lower priority. For example, a [Next] button." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_es_ES.json deleted file mode 100644 index 969b6c361..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_es_ES.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "Botón Relleno", - "info": "Un botón relleno que cumple con Material Design, configurado a través de FilledButtonTheme.", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso Básico", - "desc": [ - "【child】 : Contenido del botón 【Widget】", - "【onPressed】 : Evento de clic 【VoidCallback】", - "【onHover】 : Evento de mantener presionado 【ValueChanged? 】", - "【onLongPress】 : Evento de mantener presionado 【VoidCallback?】", - "El botón relleno es visualmente inferior al [FloatingActionButton], y se utiliza para acciones importantes y finales, como: guardar, unirse ahora o confirmar." - ] - }, - { - "file": "node2.dart", - "name": "Variante Tonal", - "desc": [ - "FilledButton.tonal es un botón relleno tonal, visualmente entre [FilledButton] y [OutlinedButton], adecuado para escenarios que requieren un énfasis ligeramente mayor que el botón de contorno pero con menor prioridad. Por ejemplo, el botón [Siguiente]" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_fr_FR.json deleted file mode 100644 index e5cf563c1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_fr_FR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "Bouton rempli", - "info": "Un bouton rempli conforme au Material Design, configurable via FilledButtonTheme.", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de base", - "desc": [ - "【child】 : Contenu du bouton 【Widget】", - "【onPressed】 : Événement de clic 【VoidCallback】", - "【onHover】 : Événement de survol 【ValueChanged? 】", - "【onLongPress】 : Événement de pression longue 【VoidCallback?】", - "Le bouton rempli est visuellement secondaire au [FloatingActionButton], utilisé pour des actions importantes et finales, comme : sauvegarder, rejoindre immédiatement ou confirmer." - ] - }, - { - "file": "node2.dart", - "name": "Variante tonale", - "desc": [ - "FilledButton.tonal est un bouton rempli tonal, visuellement entre [FilledButton] et [OutlinedButton], adapté pour des scénarios nécessitant une emphase légèrement plus forte que le bouton contour mais avec une priorité moindre. Par exemple, le bouton [Suivant]" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_it_IT.json deleted file mode 100644 index 065eda6b4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_it_IT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "Pulsante Riempito", - "info": "Un pulsante conforme a Material Design che utilizza FilledButtonTheme per impostare lo stile del pulsante.", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso di Base", - "desc": [ - "【child】 : Contenuto del pulsante 【Widget】", - "【onPressed】 : Evento di clic 【VoidCallback】", - "【onHover】 : Evento di pressione prolungata 【ValueChanged? 】", - "【onLongPress】 : Evento di pressione prolungata 【VoidCallback?】", - "Il pulsante riempito è visivamente secondario solo a [FloatingActionButton] e viene utilizzato per operazioni importanti e finali del flusso, come: salvare, unirsi immediatamente o confermare." - ] - }, - { - "file": "node2.dart", - "name": "Variante Tonale", - "desc": [ - "FilledButton.tonal è un pulsante riempito tonale, visivamente intermedio tra [FilledButton] e [OutlinedButton], adatto per scenari che richiedono un'enfasi leggermente maggiore rispetto ai pulsanti contornati ma con priorità inferiore. Ad esempio il pulsante [Avanti]" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ja_JP.json deleted file mode 100644 index cc03a205a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ja_JP.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "塗りつぶしボタン", - "info": "Material Designに準拠した塗りつぶしボタンで、FilledButtonThemeを使用してボタンのスタイルを設定します。", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "基本使用", - "desc": [ - "【child】 : ボタンの内容 【Widget】", - "【onPressed】 : クリックイベント 【VoidCallback】", - "【onHover】 : 長押しイベント 【ValueChanged? 】", - "【onLongPress】 : 長押しイベント 【VoidCallback?】", - "塗りつぶしボタンは視覚的に [FloatingActionButton] に次ぐもので、重要な、最終的なプロセスを完了する操作に使用されます。例えば、保存、即時参加、確認などです。" - ] - }, - { - "file": "node2.dart", - "name": "トーンバリアント", - "desc": [ - "FilledButton.tonal はトーン塗りつぶしボタンで、視覚的に [FilledButton] と [OutlinedButton] の中間に位置し、輪郭ボタンよりもやや強い強調が必要だが優先度が低いシナリオに適しています。例えば [次へ] ボタン" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ko_KR.json deleted file mode 100644 index ac83fa5ac..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ko_KR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "채움 버튼", - "info": "Material Design을 준수하는 채움 버튼으로, FilledButtonTheme을 통해 버튼 스타일을 설정합니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "기본 사용", - "desc": [ - "【child】 : 버튼 내용 【Widget】", - "【onPressed】 : 클릭 이벤트 【VoidCallback】", - "【onHover】 : 롱프레스 이벤트 【ValueChanged? 】", - "【onLongPress】 : 롱프레스 이벤트 【VoidCallback?】", - "채움 버튼은 시각적으로 [FloatingActionButton] 다음으로 중요하며, 중요한 최종 프로세스 작업에 사용됩니다. 예: 저장, 즉시 가입 또는 확인." - ] - }, - { - "file": "node2.dart", - "name": "톤 변형", - "desc": [ - "FilledButton.tonal은 톤 채움 버튼으로, 시각적으로 [FilledButton]과 [OutlinedButton] 사이에 위치하며, 윤곽 버튼보다 약간 강조가 필요하지만 우선순위가 낮은 시나리오에 적합합니다. 예: [다음] 버튼" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_pt_PT.json deleted file mode 100644 index 845de8195..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_pt_PT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "Botão Preenchido", - "info": "Um botão preenchido que segue o Material Design, com o estilo definido pelo FilledButtonTheme.", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso Básico", - "desc": [ - "【child】 : Conteúdo do botão 【Widget】", - "【onPressed】 : Evento de clique 【VoidCallback】", - "【onHover】 : Evento de passar o mouse 【ValueChanged? 】", - "【onLongPress】 : Evento de pressionar e segurar 【VoidCallback?】", - "O botão preenchido é visualmente inferior apenas ao [FloatingActionButton], sendo usado para ações importantes e finais do processo, como: salvar, juntar-se imediatamente ou confirmar." - ] - }, - { - "file": "node2.dart", - "name": "Variante de Tom", - "desc": [ - "FilledButton.tonal é um botão preenchido com tom, visualmente entre [FilledButton] e [OutlinedButton], adequado para cenários que precisam de um pouco mais de ênfase do que um botão de contorno, mas com menor prioridade. Por exemplo, o botão [Próximo]" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ru_RU.json deleted file mode 100644 index ef07de342..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ru_RU.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "Заполненная кнопка", - "info": "Кнопка, соответствующая Material Design, стиль которой задается через FilledButtonTheme.", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Основное использование", - "desc": [ - "【child】 : Содержимое кнопки 【Widget】", - "【onPressed】 : Событие нажатия 【VoidCallback】", - "【onHover】 : Событие наведения 【ValueChanged? 】", - "【onLongPress】 : Событие долгого нажатия 【VoidCallback?】", - "Заполненная кнопка визуально уступает только [FloatingActionButton] и используется для важных, завершающих действий, таких как: сохранение, немедленное присоединение или подтверждение." - ] - }, - { - "file": "node2.dart", - "name": "Тональный вариант", - "desc": [ - "FilledButton.tonal - это тональная заполненная кнопка, визуально находящаяся между [FilledButton] и [OutlinedButton], подходит для сценариев, где требуется немного больше акцента, чем у контурной кнопки, но с более низким приоритетом. Например, кнопка [Далее]." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_zh-CN.json deleted file mode 100644 index ececec5a3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_zh-CN.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "填充按钮", - "info": "一个符合 Material Design 的填充按钮,通过 FilledButtonTheme 设置按钮样式。", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "基本使用", - "desc": [ - "【child】 : 按钮内容 【Widget】", - "【onPressed】 : 点击事件 【VoidCallback】", - "【onHover】 : 长按事件 【ValueChanged? 】", - "【onLongPress】 : 长按事件 【VoidCallback?】", - "填充按钮在视觉上仅次于 [FloatingActionButton],应用于重要的、最终完成流程的操作,例如: 保存、立即加入 或 确认。" - ] - }, - { - "file": "node2.dart", - "name": "色调变体", - "desc": [ - "FilledButton.tonal 是色调填充按钮,视觉上介于 [FilledButton] 和 [OutlinedButton] 之间,适用于需要比轮廓按钮稍强一些的强调但优先级较低的场景。例如 [下一步] 按钮 " - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/node1.dart deleted file mode 100644 index d083f55d9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/node1.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter/material.dart'; - -class FilledButtonDemo1 extends StatelessWidget { - const FilledButtonDemo1({super.key}); - - @override - Widget build(BuildContext context) { - return Wrap(spacing: 10, children: [ - FilledButton( - onPressed: () {}, - child: const Text('FilledButton'), - ), - const FilledButton( - onPressed: null, - child: Text('Disabled'), - ), - ]); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/node2.dart b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/node2.dart deleted file mode 100644 index 2d8d078c9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/node2.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; - -class FilledButtonDemo2 extends StatelessWidget { - const FilledButtonDemo2({super.key}); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: [ - FilledButton.tonal( - onPressed: () {}, - child: const Text('FilledButton'), - ), - const FilledButton.tonal( - onPressed: null, - child: Text('Disabled'), - ), - ]); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_de_DE.json deleted file mode 100644 index 60ccb4690..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_de_DE.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "Fokus-Komponente", - "info": "Eine Komponente zur Verwaltung von [FocusNode], die es ermöglicht, den Tastaturfokus auf dieses Widget und seine Unterbaumknoten zu setzen.", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "FocusNode Fokussierung und Defokussierung", - "desc": [ - "【focusNode】 : Fokus 【FocusNode?】", - "【onFocusChange】 : Fokusänderungsüberwachung 【ValueChanged?】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "Automatische Fokussierung", - "desc": [ - "【autofocus】 : Automatische Fokussierung 【bool】", - "Das Flutter-Framework verfügt über integrierte Tastenkombinationen für den Fokuswechsel, z. B. ← und → für die horizontale Bildlaufleiste, um den Fokus auf das vorherige bzw. nächste Element zu setzen. Die Tab-Taste kann den Fokus auf den nächsten Focus-Knoten setzen." - ] - }, - { - "file": "node3.dart", - "name": "Tastaturereignis-Rückruf", - "desc": [ - "【onKeyEvent】 : Tastaturereignis-Rückruf 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_en_US.json deleted file mode 100644 index ba989bf85..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_en_US.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "Focus Component", - "info": "A component that manages [FocusNode], used to allow keyboard focus to be assigned to this widget and its subtree nodes.", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "FocusNode Focus and Blur", - "desc": [ - "【focusNode】 : Focus 【FocusNode?】", - "【onFocusChange】 : Focus change listener 【ValueChanged?】", - "【child】 : Child widget 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "Auto Focus", - "desc": [ - "【autofocus】 : Whether to auto focus 【bool】", - "The Flutter framework has built-in shortcuts for focus switching, such as ← and → for horizontal sliding lists to focus on the previous and next items respectively. The Tab key can focus on the next Focus node." - ] - }, - { - "file": "node3.dart", - "name": "Keyboard Event Callback", - "desc": [ - "【onKeyEvent】 : Keyboard event callback 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_es_ES.json deleted file mode 100644 index cddd075db..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_es_ES.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "Componente de enfoque", - "info": "Un componente que gestiona [FocusNode], utilizado para permitir que el enfoque del teclado se asigne a este widget y a los nodos de su subárbol.", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Enfoque y desenfoque de FocusNode", - "desc": [ - "【focusNode】 : enfoque 【FocusNode?】", - "【onFocusChange】 : escucha de cambios de enfoque 【ValueChanged?】", - "【child】 : componente hijo 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "Enfoque automático", - "desc": [ - "【autofocus】 : si se enfoca automáticamente 【bool】", - "El marco de Flutter incluye atajos de teclado para cambiar el enfoque, como deslizar horizontalmente la lista ←, → para enfocar el elemento anterior y posterior respectivamente. La tecla Tab puede enfocar el siguiente nodo Focus." - ] - }, - { - "file": "node3.dart", - "name": "Devolución de llamada de eventos de teclado", - "desc": [ - "【onKeyEvent】 : devolución de llamada de eventos de teclado 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_fr_FR.json deleted file mode 100644 index 4e14496c3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_fr_FR.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "Composant de mise au point", - "info": "Un composant qui gère [FocusNode], utilisé pour permettre au focus clavier d'être attribué à ce widget et à ses nœuds enfants.", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Mise au point et perte de focus de FocusNode", - "desc": [ - "【focusNode】 : focus 【FocusNode?】", - "【onFocusChange】 : écouteur de changement de focus 【ValueChanged?】", - "【child】 : composant enfant 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "Mise au point automatique", - "desc": [ - "【autofocus】 : mise au point automatique 【bool】", - "Le framework Flutter intègre des raccourcis clavier pour changer le focus, par exemple, dans une liste défilable horizontalement, ← et → permettent de se concentrer respectivement sur l'élément précédent et suivant. La touche Tab permet de se concentrer sur le nœud Focus suivant" - ] - }, - { - "file": "node3.dart", - "name": "Rappel d'événement clavier", - "desc": [ - "【onKeyEvent】 : rappel d'événement clavier 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_it_IT.json deleted file mode 100644 index f44e45b2d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_it_IT.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "Componente Focus", - "info": "Un componente che gestisce [FocusNode], utilizzato per consentire che il focus della tastiera venga assegnato a questo widget e ai suoi nodi secondari.", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "FocusNode messa a fuoco e perdita di fuoco", - "desc": [ - "【focusNode】 : focus 【FocusNode?】", - "【onFocusChange】 : listener per il cambio di focus 【ValueChanged?】", - "【child】 : componente figlio 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "Autofocus", - "desc": [ - "【autofocus】 : se mettere a fuoco automaticamente 【bool】", - "Il framework Flutter ha scorciatoie integrate per il cambio di focus, ad esempio in una lista scorrevole orizzontalmente ← e → mettono a fuoco rispettivamente l'elemento precedente e successivo. Il tasto Tab può mettere a fuoco il prossimo nodo Focus." - ] - }, - { - "file": "node3.dart", - "name": "Callback per eventi della tastiera", - "desc": [ - "【onKeyEvent】 : callback per eventi della tastiera 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ja_JP.json deleted file mode 100644 index 223fd4495..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ja_JP.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "フォーカスコンポーネント", - "info": "[FocusNode]を管理するコンポーネントで、キーボードフォーカスをこのウィジェットとそのサブツリーノードに与えることを可能にします。", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "FocusNode フォーカスとフォーカス解除", - "desc": [ - "【focusNode】 : フォーカス 【FocusNode?】", - "【onFocusChange】 : フォーカス変更リスナー 【ValueChanged?】", - "【child】 : 子コンポーネント 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "自動フォーカス", - "desc": [ - "【autofocus】 : 自動フォーカスするかどうか 【bool】", - "Flutterフレームワークには、フォーカス切り替えのショートカットキーが組み込まれており、例えば横方向にスクロールするリストでは ←、→ で前後の項目にフォーカスが移動します。Tabキーで次のFocusノードにフォーカスを移動できます" - ] - }, - { - "file": "node3.dart", - "name": "キーボードイベントコールバック", - "desc": [ - "【onKeyEvent】 : キーボードイベントコールバック 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ko_KR.json deleted file mode 100644 index e78e6542d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ko_KR.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "포커스 컴포넌트", - "info": "[FocusNode]를 관리하는 컴포넌트로, 키보드 포커스가 해당 위젯 및 하위 트리 노드에 부여될 수 있도록 합니다.", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "FocusNode 포커스와 포커스 해제", - "desc": [ - "【focusNode】 : 포커스 【FocusNode?】", - "【onFocusChange】 : 포커스 변화 리스너 【ValueChanged?】", - "【child】 : 자식 컴포넌트 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "자동 포커스", - "desc": [ - "【autofocus】 : 자동 포커스 여부 【bool】", - "Flutter 프레임워크는 포커스 전환을 위한 단축키를 내장하고 있습니다. 예를 들어, 가로 스크롤 목록에서 ←, →는 각각 이전 항목과 다음 항목에 포커스를 줍니다. Tab 키는 다음 Focus 노드에 포커스를 줄 수 있습니다." - ] - }, - { - "file": "node3.dart", - "name": "키보드 이벤트 콜백", - "desc": [ - "【onKeyEvent】 : 키보드 이벤트 콜백 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_pt_PT.json deleted file mode 100644 index 840780c0c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_pt_PT.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "Componente de Foco", - "info": "Um componente que gerencia [FocusNode], usado para permitir que o foco do teclado seja atribuído a este widget e aos nós da sua subárvore.", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Foco e Desfoco do FocusNode", - "desc": [ - "【focusNode】 : Foco 【FocusNode?】", - "【onFocusChange】 : Monitoramento de mudança de foco 【ValueChanged?】", - "【child】 : Componente filho 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "Foco Automático", - "desc": [ - "【autofocus】 : Foco automático 【bool】", - "O framework Flutter possui atalhos de teclado embutidos para alternar o foco, como ← e → em listas de deslizamento horizontal para focar o item anterior e o próximo. A tecla Tab pode focar o próximo nó Focus." - ] - }, - { - "file": "node3.dart", - "name": "Callback de Evento de Teclado", - "desc": [ - "【onKeyEvent】 : Callback de evento de teclado 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ru_RU.json deleted file mode 100644 index 00506af53..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ru_RU.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "Компонент фокуса", - "info": "Компонент, управляющий [FocusNode], который позволяет клавиатурному фокусу быть назначенным на этот виджет и его дочерние узлы.", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Фокусировка и потер фокуса FocusNode", - "desc": [ - "【focusNode】 : фокус 【FocusNode?】", - "【onFocusChange】 : отслеживание изменений фокуса 【ValueChanged?】", - "【child】 : дочерний компонент 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "Автоматическая фокусировка", - "desc": [ - "【autofocus】 : автоматическая фокусировка 【bool】", - "Фреймворк Flutter имеет встроенные сочетания клавиш для переключения фокуса, например, ← и → для горизонтального списка позволяют фокусироваться на предыдущем и следующем элементе. Клавиша Tab позволяет фокусироваться на следующем узле Focus." - ] - }, - { - "file": "node3.dart", - "name": "Обратный вызов событий клавиатуры", - "desc": [ - "【onKeyEvent】 : обратный вызов событий клавиатуры 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_zh-CN.json deleted file mode 100644 index accac2338..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_zh-CN.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "焦点组件", - "info": "一个管理 [FocusNode] 的组件,用于允许键盘焦点被赋予该小部件及其子树节点。", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "FocusNode 聚焦与失焦", - "desc": [ - "【focusNode】 : 焦点 【FocusNode?】", - "【onFocusChange】 : 焦点变化监听 【ValueChanged?】", - "【child】 : 子组件 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "自动聚焦", - "desc": [ - "【autofocus】 : 是否自动聚焦 【bool】", - "Flutter 框架内置了焦点切换的快捷键,比如横向滑动的列表 ←、→ 分别让前项和后项聚焦。Tab 键可以让下一个 Focus 节点聚焦" - ] - }, - { - "file": "node3.dart", - "name": "键盘事件回调", - "desc": [ - "【onKeyEvent】 : 键盘事件回调 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/Focus/node1.dart deleted file mode 100644 index f78147801..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/node1.dart +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -class FocusDemo1 extends StatefulWidget { - const FocusDemo1({super.key}); - - @override - State createState() => _FocusDemo1State(); -} - -class _FocusDemo1State extends State { - final FocusNode _focusNode = FocusNode(); - - @override - void dispose() { - super.dispose(); - _focusNode.dispose(); - } - - @override - Widget build(BuildContext context) { - return Focus( - focusNode: _focusNode, - onFocusChange: _onFocusChange, - child: GestureDetector( - onTap: _toggleFocus, - child: _FocusBox(active: _focusNode.hasFocus), - ), - ); - } - - void _onFocusChange(bool value) { - setState(() {}); - } - - void _toggleFocus() { - if (_focusNode.hasFocus) { - _focusNode.unfocus(); - } else { - _focusNode.requestFocus(); - } - } -} - -class _FocusBox extends StatelessWidget { - final bool active; - - const _FocusBox({super.key, required this.active}); - - @override - Widget build(BuildContext context) { - Color color = active ? Colors.blue : Colors.white; - Color borderColor = active ? Colors.lightBlue : Colors.grey; - Color? textColor = active ? Colors.white : null; - String text = active ? "点击失去焦点" : '点击获取焦点'; - return Container( - width: 120, - height: 60, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - border: Border.all(color: borderColor), - color: color, - ), - alignment: Alignment.center, - child: Text(text, style: TextStyle(color: textColor)), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/node2.dart b/modules/widget_system/widgets/lib/StatefulWidget/Focus/node2.dart deleted file mode 100644 index da663acc5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/node2.dart +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - -/// Flutter code sample for [Focus]. - -void main() => runApp(const FocusExampleApp()); - -class FocusExampleApp extends StatelessWidget { - const FocusExampleApp({super.key}); - - @override - Widget build(BuildContext context) { - return const MaterialApp( - home: FocusDemo2(), - ); - } -} - -class _FocusTiled extends StatelessWidget { - const _FocusTiled( - this.data, { - super.key, - required this.autofocus, - }); - - final String data; - final bool autofocus; - - @override - Widget build(BuildContext context) { - return Focus( - autofocus: autofocus, - child: Builder(builder: _buildTiled), - ); - } - - Widget _buildTiled(BuildContext context) { - FocusNode node = Focus.of(context); - bool focus = node.hasFocus; - Color color = focus ? Colors.blue : Colors.white; - Color? textColor = focus ? Colors.white : null; - return GestureDetector( - onTap: node.requestFocus, - child: Container( - padding: const EdgeInsets.all(8.0), - alignment: Alignment.center, - color: color, - child: Text(data, style: TextStyle(color: textColor)), - ), - ); - } -} - -class FocusDemo2 extends StatelessWidget { - const FocusDemo2({super.key}); - - @override - Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.symmetric(horizontal: 24), - height: 56, - child: ListView.builder( - scrollDirection: Axis.horizontal, - itemBuilder: (_, int index) => _FocusTiled( - 'Item $index', - autofocus: index == 0, - ), - itemCount: 50, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/node3.dart b/modules/widget_system/widgets/lib/StatefulWidget/Focus/node3.dart deleted file mode 100644 index bbba3bef2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/node3.dart +++ /dev/null @@ -1,129 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -class FocusDemo3 extends StatefulWidget { - const FocusDemo3({super.key}); - - @override - State createState() => _FocusDemo3State(); -} - -class _FocusDemo3State extends State { - FocusNode focusNode = FocusNode(); - List events = []; - ScrollController _ctrl = ScrollController(); - - @override - void initState() { - focusNode.addListener(_onFocusChange); - super.initState(); - } - - @override - void dispose() { - focusNode.removeListener(_onFocusChange); - focusNode.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Center( - child: TapRegion( - onTapInside: (_) => focusNode.requestFocus(), - onTapOutside: (_) => focusNode.unfocus(), - child: Focus( - autofocus: true, - focusNode: focusNode, - onKeyEvent: _onKeyEvent, - child: _buildDisplay(), - ), - ), - ); - } - - KeyEventResult _onKeyEvent(FocusNode node,KeyEvent value) { - events.add(value); - setState(() {}); - _scrollToEnd(); - print('${value.runtimeType}:${value.logicalKey.keyLabel}'); - return KeyEventResult.ignored; - } - - void _onFocusChange() { - if (!focusNode.hasFocus) { - events.clear(); - } - setState(() {}); - } - - void _scrollToEnd() async { - if (_ctrl.hasClients) { - await Future.delayed(Duration(milliseconds: 200)); - _ctrl.animateTo(_ctrl.position.maxScrollExtent, - duration: Duration(milliseconds: 100), curve: Curves.ease); - } - } - - Widget _buildDisplay() { - Color color = focusNode.hasFocus ? Colors.blue : Colors.grey; - - return Container( - decoration: BoxDecoration(border: Border.all(color: color)), - width: 460, - padding: EdgeInsets.symmetric(horizontal: 12), - alignment: Alignment.center, - height: 60, - child: events.isNotEmpty - ? SizedBox( - width: 460, - height: 60, - child: ListView.builder( - controller: _ctrl, - itemCount: events.length, - scrollDirection: Axis.horizontal, - itemBuilder: (_, index) => _KeyBoardBox( - event: events[index], - )), - ) - : Text( - focusNode.hasFocus ? '键盘输入点东西吧' : '点击我获取焦点', - style: TextStyle(color: color), - ), - ); - } -} - -class _KeyBoardBox extends StatelessWidget { - final KeyEvent event; - - const _KeyBoardBox({super.key, required this.event}); - - @override - Widget build(BuildContext context) { - Color? color; - if (event is KeyDownEvent) { - color = Colors.blue; - } - if (event is KeyRepeatEvent) { - color = Colors.green; - } - if (event is KeyUpEvent) { - color = Colors.grey; - } - return Center( - child: Container( - margin: EdgeInsets.only(right: 4), - width: 32, - height: 32, - decoration: BoxDecoration(color: color), - alignment: Alignment.center, - child: Text( - event.logicalKey.keyLabel, - textAlign: TextAlign.center, - style: TextStyle(color: Colors.white, fontSize: 8, height: 1), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_de_DE.json deleted file mode 100644 index 73eda55ce..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "Formular-Komponente", - "info": "Die Formular-Komponente kann Rückrufe für Änderungen der darunter liegenden FormField-Komponenten empfangen, den Seitenrückruf über onWillPop abfangen und Formularfelder über FormState speichern oder validieren.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Form", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onChanged】 : Rückruf bei Formularänderungen 【VoidCallback】", - "【onWillPop】 : Rückruf bei Rückkehr 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_en_US.json deleted file mode 100644 index f2e847d1d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "Form Component", - "info": "Form component, which can receive change callbacks from FormField components below it, intercept page returns through onWillPop, and save or validate form fields through FormState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Form", - "desc": [ - "【child】 : Child component 【Widget】", - "【onChanged】 : Form change callback 【VoidCallback】", - "【onWillPop】 : Return callback 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_es_ES.json deleted file mode 100644 index dfcab4d01..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "Componente de formulario", - "info": "Componente de formulario que puede recibir devoluciones de llamada de cambios de los componentes FormField debajo de él, interceptar el retorno de la página a través de onWillPop, y guardar o validar los campos del formulario a través de FormState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Form", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onChanged】 : Devolución de llamada de cambio de formulario 【VoidCallback】", - "【onWillPop】 : Devolución de llamada de retorno 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_fr_FR.json deleted file mode 100644 index 0ac4e0dbc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "Composant de formulaire", - "info": "Le composant de formulaire peut recevoir les rappels de changement des composants FormField qui lui sont associés, intercepter le retour de la page via onWillPop, et enregistrer ou valider les champs du formulaire via FormState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Form", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onChanged】 : Rappel de changement de formulaire 【VoidCallback】", - "【onWillPop】 : Rappel de retour 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_it_IT.json deleted file mode 100644 index cdc73cfe4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "Componente modulo", - "info": "Il componente modulo può ricevere callback di modifica dai componenti FormField sottostanti, intercetta il ritorno alla pagina tramite onWillPop e consente di salvare o convalidare i campi del modulo tramite FormState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Form", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onChanged】 : Callback per le modifiche del modulo 【VoidCallback】", - "【onWillPop】 : Callback di ritorno 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ja_JP.json deleted file mode 100644 index f7190629a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "フォームコンポーネント", - "info": "フォームコンポーネントは、その下のFormFieldコンポーネントの変更コールバックを受け取ることができ、onWillPopでページの戻りをインターセプトし、FormStateでフォームフィールドを保存または検証することができます。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Formの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onChanged】 : フォーム変更コールバック 【VoidCallback】", - "【onWillPop】 : 戻りコールバック 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ko_KR.json deleted file mode 100644 index dd14d454a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "폼 컴포넌트", - "info": "폼 컴포넌트는 하위 FormField 컴포넌트의 변경 콜백을 받을 수 있으며, onWillPop을 통해 페이지 반환을 가로채고, FormState를 통해 폼 필드를 저장하거나 검증할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Form 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【onChanged】 : 폼 변경 콜백 【VoidCallback】", - "【onWillPop】 : 반환 콜백 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_pt_PT.json deleted file mode 100644 index 679d3393c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "Componente de Formulário", - "info": "Componente de formulário, pode receber retornos de chamada de alterações dos componentes FormField abaixo dele, interceptar o retorno da página através de onWillPop, e salvar ou validar os campos do formulário através de FormState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Form", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onChanged】 : Retorno de chamada de alteração do formulário 【VoidCallback】", - "【onWillPop】 : Retorno de chamada de retorno 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ru_RU.json deleted file mode 100644 index 58c176a6c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "Компонент формы", - "info": "Компонент формы, который может получать обратные вызовы изменений от компонентов FormField, перехватывать возврат на страницу через onWillPop, а также сохранять или проверять поля формы через FormState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Form", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onChanged】 : Обратный вызов изменения формы 【VoidCallback】", - "【onWillPop】 : Обратный вызов возврата 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_zh-CN.json deleted file mode 100644 index 18d129e66..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "表单组件", - "info": "表单组件,可以接收其下的FormField组件的变化回调,通过onWillPop拦截页面返回,通过FormState可对表单字段进行保存或校验。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Form基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onChanged】 : 表单变化回调 【VoidCallback】", - "【onWillPop】 : 返回回调 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Form/node1_base.dart deleted file mode 100644 index 22d56bd80..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/node1_base.dart +++ /dev/null @@ -1,105 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomForm extends StatefulWidget { - const CustomForm({Key? key}) : super(key: key); - - @override - _CustomFormState createState() => _CustomFormState(); -} - -class _CustomFormState extends State { - final GlobalKey _formKey = GlobalKey(); - - @override - Widget build(BuildContext context) { - return Form( - onWillPop: () => _willPop(context), - key: _formKey, - onChanged: () { - print('Form---onChanged'); - }, - child: - Stack( - alignment: Alignment.centerRight, - children: [ - SizedBox( - width: 350, - child: UnconstrainedBox( - child: SizedBox( - width: 200, - height: 70, - child: TextFormField( - style: const TextStyle(textBaseline: TextBaseline.alphabetic), - decoration: const InputDecoration( - border: OutlineInputBorder(), - labelText: 'username', - ), - validator: _validateUsername, - ), - ), - ), - ), - Positioned( - top: 0, right: 0, child: _buildSubmitButton(context)), - ], - ), - ); - } - - String? _validateUsername(value) { - if (value.isEmpty) { - return '用户名不能为空'; - } - return null; - } - - Widget _buildSubmitButton(BuildContext context) { - return ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - ), - onPressed: _onSubmit, - child: const Icon( - Icons.check, - color: Colors.white, - ), - ); - } - - void _onSubmit(){ - if(_formKey.currentState==null) return; - if (_formKey.currentState!.validate()) { - FocusScope.of(context).requestFocus(FocusNode()); - Navigator.of(context).pop(); - } - } - - Future _willPop(context) async { - return await showDialog( - context: context, - builder: (context) => AlertDialog( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10))), - title: const Text('提示'), - content: const Text('你确定要离开此页吗?'), - actions: [ - ElevatedButton( - onPressed: () => Navigator.of(context).pop(true), - child: const Text('确定'), - ), - ElevatedButton( - onPressed: () => Navigator.of(context).pop(false), - child: const Text('取消'), - ), - ], - ), - ) ?? - false; - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_de_DE.json deleted file mode 100644 index 40fa20bc3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "Formularfeld", - "info": "Ein Formularfeld, das in der Form-Komponente verwendet werden muss, enthält ein Feld des generischen Typs T als Zustandsvariable. Aktualisierungen und Validierungen des Felds lösen entsprechende Rückrufe aus.", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in FormField", - "desc": [ - "【builder】 : Inhaltsersteller 【FormFieldBuilder】", - "【initialValue】 : Anfangswert 【T】", - "【validator】 : Validierungsfunktion 【FormFieldValidator 】", - "【enabled】 : Ist aktiviert 【bool】", - "【onSaved】 : Rückruf beim Speichern des Formulars 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_en_US.json deleted file mode 100644 index c4b8578a3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "Form Field", - "info": "A form field that needs to be used within the Form component, containing a field of generic type T as the state. Updates and validations of the field will trigger corresponding callbacks.", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FormField Introduction", - "desc": [ - "【builder】 : Content builder 【FormFieldBuilder】", - "【initialValue】 : Initial value 【T】", - "【validator】 : Validation function 【FormFieldValidator】", - "【enabled】 : Whether it is enabled 【bool】", - "【onSaved】 : Callback when the form is saved 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_es_ES.json deleted file mode 100644 index b5f3f7847..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "Campo de formulario", - "info": "Un campo de formulario que debe usarse en el componente Form, contiene un campo de tipo genérico T como estado, y las actualizaciones y validaciones del campo activarán las devoluciones de llamada correspondientes.", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a FormField", - "desc": [ - "【builder】 : Constructor de contenido 【FormFieldBuilder】", - "【initialValue】 : Valor inicial 【T】", - "【validator】 : Función de validación 【FormFieldValidator 】", - "【enabled】 : Si está habilitado 【bool】", - "【onSaved】 : Devolución de llamada al guardar el formulario 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_fr_FR.json deleted file mode 100644 index 849cbfd55..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "Champ de formulaire", - "info": "Un champ de formulaire, à utiliser dans le composant Form, contenant un champ de type générique T comme état, les mises à jour et les validations du champ déclenchent des rappels correspondants.", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à FormField", - "desc": [ - "【builder】 : Constructeur de contenu 【FormFieldBuilder】", - "【initialValue】 : Valeur initiale 【T】", - "【validator】 : Fonction de validation 【FormFieldValidator 】", - "【enabled】 : Est activé 【bool】", - "【onSaved】 : Rappel lors de la sauvegarde du formulaire 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_it_IT.json deleted file mode 100644 index 83bb81b49..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "Campo del modulo", - "info": "Un campo del modulo, deve essere utilizzato nel componente Form, contiene un campo di tipo generico T come stato, gli aggiornamenti e le validazioni del campo attivano i rispettivi callback.", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a FormField", - "desc": [ - "【builder】 : Costruttore del contenuto 【FormFieldBuilder】", - "【initialValue】 : Valore iniziale 【T】", - "【validator】 : Funzione di validazione 【FormFieldValidator 】", - "【enabled】 : Se è abilitato 【bool】", - "【onSaved】 : Callback quando il modulo viene salvato 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ja_JP.json deleted file mode 100644 index cf65e35fa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "フォームフィールド", - "info": "フォームフィールドは、Formコンポーネント内で使用する必要があり、ジェネリック型Tのフィールドを状態量として含みます。フィールドの更新と検証に応じて、対応するコールバックがトリガーされます。", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FormField 紹介", - "desc": [ - "【builder】 : 内容ビルダー 【FormFieldBuilder】", - "【initialValue】 : 初期値 【T】", - "【validator】 : 検証関数 【FormFieldValidator 】", - "【enabled】 : 有効かどうか 【bool】", - "【onSaved】 : フォーム保存時のコールバック 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ko_KR.json deleted file mode 100644 index 28777a151..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "폼 필드", - "info": "폼 필드는 Form 컴포넌트 내에서 사용되며, 상태량으로 제네릭 T의 필드를 포함합니다. 필드의 업데이트 및 검증에 따라 해당 콜백이 트리거됩니다.", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FormField 소개", - "desc": [ - "【builder】 : 콘텐츠 빌더 【FormFieldBuilder】", - "【initialValue】 : 초기값 【T】", - "【validator】 : 검증 함수 【FormFieldValidator 】", - "【enabled】 : 유효 여부 【bool】", - "【onSaved】 : 폼 저장 시 콜백 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_pt_PT.json deleted file mode 100644 index cf1bcc27b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "Campo de Formulário", - "info": "Um campo de formulário, que precisa ser usado no componente Form, contém um campo do tipo genérico T como estado, e as atualizações e validações do campo acionam callbacks correspondentes.", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao FormField", - "desc": [ - "【builder】 : Construtor de conteúdo 【FormFieldBuilder】", - "【initialValue】 : Valor inicial 【T】", - "【validator】 : Função de validação 【FormFieldValidator 】", - "【enabled】 : Se está ativo 【bool】", - "【onSaved】 : Callback ao salvar o formulário 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ru_RU.json deleted file mode 100644 index 95155cf13..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "Поле формы", - "info": "Поле формы, которое должно использоваться в компоненте Form, содержит поле типа T в качестве состояния. Обновление и проверка поля вызывают соответствующие обратные вызовы.", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в FormField", - "desc": [ - "【builder】 : Конструктор содержимого 【FormFieldBuilder】", - "【initialValue】 : Начальное значение 【T】", - "【validator】 : Функция проверки 【FormFieldValidator 】", - "【enabled】 : Активно ли поле 【bool】", - "【onSaved】 : Обратный вызов при сохранении формы 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_zh-CN.json deleted file mode 100644 index f1925f244..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "表单字段", - "info": "一个表单字段,需要在 Form 组件中使用,内含泛型 T 的字段作为状态量,对根据字段的更新和验证会触发相应回调。", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FormField 介绍", - "desc": [ - "【builder】 : 内容构造器 【FormFieldBuilder】", - "【initialValue】 : 初始值 【T】", - "【validator】 : 验证函数 【FormFieldValidator 】", - "【enabled】 : 是否有效 【bool】", - "【onSaved】 : 表单save时回调 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/FormField/node1_base.dart deleted file mode 100644 index 690432bef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/node1_base.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class FormFieldDemo extends StatelessWidget { - const FormFieldDemo({Key? key}) : super(key: key); - - final String info = - 'FormField 代表表单中的一个字段,对于字符串类型的字段,框架中封装了 TextFormField 以便使用;下拉选择的字段,用 DropdownButtonFormField。' - '目前框架中 FormField 的子类也只有这两个。既然是表单字段,必然是要和 Form 组件一起使用。通过对 Form 添加 GlobalKey ,来获取 FormState 对象。' - '当 FormState 调用 save 方法时,所有的 FormField 都会触发 onSave 方法,当 FormState 调用 validate 方法时,所有的 FormField 都会触发 validate 方法。'; - - - @override - Widget build(BuildContext context) { - - - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_de_DE.json deleted file mode 100644 index 8e76619d8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "Asynchroner Konstruktor", - "info": "Kann ein Future-Objekt angeben, das den Status der asynchronen Ausführung überwachen kann und im Konstruktor unterschiedliche Schnittstellen basierend auf dem Status erstellt. Beachten Sie, dass das Future-Objekt nicht gleichzeitig mit dem FutureBuilder erstellt werden kann, da dies zu übermäßigen Aktualisierungen führen kann.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von FutureBuilder", - "desc": [ - "【builder】 : Unterkomponente 【AsyncWidgetBuilder】", - "【initialData】 : Initialdaten 【T】", - "【future】 : Asynchrone Aufgabe 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_en_US.json deleted file mode 100644 index ee2173e00..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "Asynchronous Constructor", - "info": "You can specify a Future object, which can monitor the status of asynchronous execution and build different interfaces in the constructor based on the status. Note that the Future object cannot be created simultaneously with the FutureBuilder, otherwise it may cause excessive refreshing.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of FutureBuilder", - "desc": [ - "【builder】 : Subcomponent 【AsyncWidgetBuilder】", - "【initialData】 : Initial Data 【T】", - "【future】 : Asynchronous Task 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_es_ES.json deleted file mode 100644 index 0d5746113..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "Constructor Asíncrono", - "info": "Puede especificar un objeto Future, que puede monitorear el estado de la ejecución asíncrona y construir diferentes interfaces en el constructor según el estado. Tenga en cuenta que este objeto Future no se puede crear simultáneamente con FutureBuilder, de lo contrario podría provocar una actualización excesiva.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de FutureBuilder", - "desc": [ - "【builder】 : Componente hijo 【AsyncWidgetBuilder】", - "【initialData】 : Datos iniciales 【T】", - "【future】 : Tarea asíncrona 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_fr_FR.json deleted file mode 100644 index b3e474445..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "Constructeur asynchrone", - "info": "Peut spécifier un objet Future, capable d'écouter l'état de l'exécution asynchrone et de construire des interfaces différentes dans le constructeur en fonction de l'état. Notez que cet objet Future ne peut pas être créé en même temps que FutureBuilder, sinon il pourrait y avoir un rafraîchissement excessif.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de FutureBuilder", - "desc": [ - "【builder】 : Composant enfant 【AsyncWidgetBuilder】", - "【initialData】 : Données initiales 【T】", - "【future】 : Tâche asynchrone 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_it_IT.json deleted file mode 100644 index f1f0e4533..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "Costruttore Asincrono", - "info": "Puoi specificare un oggetto Future, che può monitorare lo stato dell'esecuzione asincrona e costruire interfacce diverse nel costruttore in base allo stato. Nota che l'oggetto Future non può essere creato contemporaneamente al FutureBuilder, altrimenti potrebbe causare un aggiornamento eccessivo.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di FutureBuilder", - "desc": [ - "【builder】 : Componente Figlio 【AsyncWidgetBuilder】", - "【initialData】 : Dati Iniziali 【T】", - "【future】 : Attività Asincrona 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ja_JP.json deleted file mode 100644 index 80034fe85..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "非同期ビルダー", - "info": "Futureオブジェクトを指定することができ、非同期実行の状態を監視し、ビルダー内で状態に応じて異なるインターフェースを構築できます。このFutureオブジェクトはFutureBuilderと同時に作成しないでください。そうしないと、過剰なリフレッシュが発生する可能性があります。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FutureBuilderの基本使用", - "desc": [ - "【builder】 : 子コンポーネント 【AsyncWidgetBuilder】", - "【initialData】 : 初期データ 【T】", - "【future】 : 非同期タスク 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ko_KR.json deleted file mode 100644 index 0079d8979..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "비동기 빌더", - "info": "Future 객체를 지정할 수 있으며, 비동기 실행 상태를 모니터링하고 빌더에서 상태에 따라 다른 인터페이스를 구성할 수 있습니다. 주의할 점은 해당 Future 객체가 FutureBuilder와 동시에 생성되면 과도한 새로고침이 발생할 수 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FutureBuilder 기본 사용", - "desc": [ - "【builder】 : 자식 컴포넌트 【AsyncWidgetBuilder】", - "【initialData】 : 초기 데이터 【T】", - "【future】 : 비동기 작업 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_pt_PT.json deleted file mode 100644 index 3d3ae9636..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "Construtor Assíncrono", - "info": "Pode especificar um objeto Future, que pode monitorar o estado da execução assíncrona e construir diferentes interfaces no construtor com base no estado. Observe que o objeto Future não pode ser criado ao mesmo tempo que o FutureBuilder, caso contrário, pode ocorrer uma atualização excessiva.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do FutureBuilder", - "desc": [ - "【builder】 : Componente Filho 【AsyncWidgetBuilder】", - "【initialData】 : Dados Iniciais 【T】", - "【future】 : Tarefa Assíncrona 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ru_RU.json deleted file mode 100644 index b841a64e2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "Асинхронный конструктор", - "info": "Можно указать объект Future, который может отслеживать состояние асинхронного выполнения и строить различные интерфейсы в конструкторе в зависимости от состояния. Обратите внимание, что объект Future не может быть создан одновременно с FutureBuilder, иначе может произойти чрезмерное обновление.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование FutureBuilder", - "desc": [ - "【builder】 : Дочерний компонент 【AsyncWidgetBuilder】", - "【initialData】 : Начальные данные 【T】", - "【future】 : Асинхронная задача 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_zh-CN.json deleted file mode 100644 index 7e59a1726..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "异步构造器", - "info": "可指定一个Future对象,能够监听异步执行的状态,并在构造器中根据状态构建不同的界面。注意该Future对象不能和FutureBuilder同时创建,否则可能过渡刷新。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FutureBuilder基本使用", - "desc": [ - "【builder】 : 子组件 【AsyncWidgetBuilder】", - "【initialData】 : 初始数据 【T】", - "【future】 : 异步任务 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/node1_base.dart deleted file mode 100644 index 8a5afea76..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/node1_base.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomFutureBuilder extends StatefulWidget { - const CustomFutureBuilder({Key? key}) : super(key: key); - - @override - _CustomFutureBuilderState createState() => _CustomFutureBuilderState(); -} - -class _CustomFutureBuilderState extends State { - late Future _future; - - @override - void initState() { - _future = loadData(); - super.initState(); - } - - @override - Widget build(BuildContext context) { - return FutureBuilder( - initialData: 'Load', - future: _future, - builder: (ctx, snap) { - if (snap.connectionState == ConnectionState.done) { - return Text('${snap.data}'); - } - if (snap.connectionState == ConnectionState.waiting) { - return const CircularProgressIndicator(); - } - if (snap.hasError) { - return const Text('Error'); - } - return Container(); - }); - } - - Future loadData() async { - await Future.delayed(const Duration(seconds: 2)); - return 'LoadeSuccess'; - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_de_DE.json deleted file mode 100644 index 61cd130da..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "Überlaufindikator", - "info": "Das Kind ist eine scrollbare Liste, die einen Indikatoreffekt anzeigt, wenn man oben und unten scrollt. Die Farbe kann angegeben werden, hat aber keine große Bedeutung. Es ist der Standard-Scrolleffekt für Android- und Fuchsia-Systeme.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung", - "desc": [ - "【showLeading】 : Ob der Kopf aktiv ist 【bool】", - "【showTrailing】 : Ob das Ende aktiv ist 【bool】", - "【axisDirection】 : Achsenrichtung 【AxisDirection】", - "【color】 : Farbe 【Color】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_en_US.json deleted file mode 100644 index f11284013..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "Scroll Boundary Indicator", - "info": "A child is a scrollable list, with an indicator effect when scrolling to the top and bottom. The color can be specified, but it is not very useful. It is the default scrolling effect for Android and Fuchsia systems.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage", - "desc": [ - "【showLeading】: Whether the header is active 【bool】", - "【showTrailing】: Whether the footer is active 【bool】", - "【axisDirection】: Axis direction 【AxisDirection】", - "【color】: Color 【Color】", - "【child】: Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_es_ES.json deleted file mode 100644 index 24fa19227..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "Indicador de desplazamiento fuera de límites", - "info": "El niño es una lista deslizable, el efecto indicador cuando se desliza hacia la parte superior e inferior, se puede especificar el color, no es muy útil. Es el efecto de deslizamiento predeterminado del sistema Android y Fuchsia.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico", - "desc": [ - "【showLeading】 : Si la cabeza es efectiva 【bool】", - "【showTrailing】 : Si la parte inferior es efectiva 【bool】", - "【axisDirection】 : Dirección del eje 【AxisDirection】", - "【color】 : Color 【Color】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_fr_FR.json deleted file mode 100644 index 3c75e0de2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "Indicateur de dépassement de défilement", - "info": "L'enfant est une liste déroulante, l'effet indicateur lorsqu'on fait défiler vers le haut et le bas, la couleur peut être spécifiée, mais ce n'est pas très utile. C'est l'effet de défilement par défaut des systèmes Android et Fuchsia.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base", - "desc": [ - "【showLeading】 : Si la tête est active 【bool】", - "【showTrailing】 : Si le bas est actif 【bool】", - "【axisDirection】 : Direction de l'axe 【AxisDirection】", - "【color】 : Couleur 【Color】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_it_IT.json deleted file mode 100644 index 2a9d76dd7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "Indicatore di scorrimento oltre i limiti", - "info": "Il bambino è una lista scorrevole, con un effetto indicatore quando si scorre verso l'alto e verso il basso, è possibile specificare il colore, ma non è molto utile. È l'effetto di scorrimento predefinito per i sistemi Android e Fuchsia.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base", - "desc": [ - "【showLeading】 : Se la parte superiore è attiva 【bool】", - "【showTrailing】 : Se la parte inferiore è attiva 【bool】", - "【axisDirection】 : Direzione dell'asse 【AxisDirection】", - "【color】 : Colore 【Color】", - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ja_JP.json deleted file mode 100644 index 1623f5e65..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "スクロールオーバーインジケーター", - "info": "子要素がスクロール可能なリストで、上部または下部にスクロールした際のインジケーター効果です。色を指定できますが、あまり役に立ちません。AndroidとFuchsiaシステムのデフォルトのスクロール効果です。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "基本使用", - "desc": [ - "【showLeading】 : ヘッダーが有効かどうか 【bool】", - "【showTrailing】 : フッターが有効かどうか 【bool】", - "【axisDirection】 : 軸方向 【AxisDirection】", - "【color】 : 色 【Color】", - "【child】 : 子ウィジェット 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ko_KR.json deleted file mode 100644 index 66a187c62..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "스크롤 오버스크롤 표시기", - "info": "자식이 스크롤 가능한 리스트일 때, 상단과 하단으로 스크롤할 때의 표시 효과. 색상을 지정할 수 있지만 큰 의미는 없습니다. Android와 Fuchsia 시스템의 기본 스크롤 효과입니다.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "기본 사용", - "desc": [ - "【showLeading】 : 헤더가 활성화되는지 여부 【bool】", - "【showTrailing】 : 하단이 활성화되는지 여부 【bool】", - "【axisDirection】 : 축 방향 【AxisDirection】", - "【color】 : 색상 【Color】", - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_pt_PT.json deleted file mode 100644 index c74b8ea24..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "Indicador de deslizamento fora dos limites", - "info": "A criança é uma lista deslizante, o efeito indicador quando desliza para o topo e para a base, pode especificar a cor, não tem muita utilidade. É o efeito de deslizamento padrão do sistema Android e Fuchsia.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico", - "desc": [ - "【showLeading】 : Se o cabeçalho está ativo 【bool】", - "【showTrailing】 : Se a base está ativa 【bool】", - "【axisDirection】 : Direção do eixo 【AxisDirection】", - "【color】 : Cor 【Color】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ru_RU.json deleted file mode 100644 index 62a47392d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "Индикатор прокрутки за пределы", - "info": "Дети - это прокручиваемый список, индикаторный эффект при прокрутке до верха и низа, можно указать цвет, не имеет большого значения. Это эффект прокрутки по умолчанию для систем Android и Fuchsia.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование", - "desc": [ - "【showLeading】 : Действует ли на голову 【bool】", - "【showTrailing】 : Действует ли на дно 【bool】", - "【axisDirection】 : Направление оси 【AxisDirection】", - "【color】 : Цвет 【Color】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_zh-CN.json deleted file mode 100644 index 57ad2ccce..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "滑动越域指示器", - "info": "孩子为可滑动列表,当滑动到顶部和底部时的指示效果,可指定颜色,没什么太大卵用。是Android和fuchsia系统默认滑动效果。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "基本使用", - "desc": [ - "【showLeading】 : 头部是否生效 【bool】", - "【showTrailing】 : 底部是否生效 【bool】", - "【axisDirection】 : 轴向 【AxisDirection】", - "【color】 : 颜色 【Color】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/node1_base.dart deleted file mode 100644 index aa2632398..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/node1_base.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class GlowingOverscrollIndicatorDemo extends StatelessWidget { - const GlowingOverscrollIndicatorDemo({super.key}); - - List get data => [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - Colors.red[50]!, - Colors.red[100]!, - Colors.red[200]!, - Colors.red[300]!, - Colors.red[400]!, - Colors.red[500]!, - Colors.red[600]!, - Colors.red[700]!, - Colors.red[800]!, - Colors.red[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: GlowingOverscrollIndicator( - color: Colors.purple, - // showLeading: false, - // showTrailing: false, - axisDirection: AxisDirection.down, - child: ListView.builder( - itemBuilder: (_, index) => Container( - margin: const EdgeInsets.all(10), - height: 60, - color: data[index], - ), - itemCount: data.length, - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_de_DE.json deleted file mode 100644 index 0ab7c519b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "Geteilter Animationseffekt", - "info": "Es kann ein Labelname angegeben werden. Wenn zwei Schnittstellen umgeschaltet werden, führen Komponenten mit demselben Label einen gemeinsamen Animationseffekt aus. In einer Schnittstelle können nicht zwei Hero-Labels mit demselben Namen existieren.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Hero", - "desc": [ - "【tag】 : Label 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_en_US.json deleted file mode 100644 index b6a0e7337..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "Shared Animation", - "info": "You can specify a tag name, and components with the same tag will perform a shared animation when transitioning between two interfaces. There cannot be two Hero tags with the same name in one interface.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Hero", - "desc": [ - "【tag】 : tag 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_es_ES.json deleted file mode 100644 index 72665027f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "Animación compartida", - "info": "Se puede especificar un nombre de etiqueta, los componentes con la misma etiqueta realizarán una animación compartida al saltar entre dos interfaces. No pueden existir dos etiquetas Hero con el mismo nombre en una misma interfaz.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Hero", - "desc": [ - "【tag】 : etiqueta 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_fr_FR.json deleted file mode 100644 index efe22337e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "Animation partagée", - "info": "Vous pouvez spécifier un nom de tag, les composants avec le même tag effectueront une animation partagée lors du changement d'interface. Il ne peut pas y avoir deux tags Hero avec le même nom dans une même interface.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Hero", - "desc": [ - "【tag】 : étiquette 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_it_IT.json deleted file mode 100644 index 4003710e3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "Animazione condivisa", - "info": "È possibile specificare un nome di tag. Quando si passa da un'interfaccia all'altra, i componenti con lo stesso tag eseguiranno un'animazione condivisa. Non possono esistere due tag Hero con lo stesso nome in un'interfaccia.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Hero", - "desc": [ - "【tag】 : etichetta 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ja_JP.json deleted file mode 100644 index da433da69..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "共有アニメーション", - "info": "タグ名を指定でき、2つの画面間で同じタグを持つコンポーネントが共有アニメーションを行います。1つの画面に同じ名前のHeroタグを2つ存在させることはできません。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Heroの基本的な使用", - "desc": [ - "【tag】 : タグ 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ko_KR.json deleted file mode 100644 index 3a36cd465..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "공유 애니메이션", - "info": "태그 이름을 지정할 수 있으며, 두 인터페이스 간 전환 시 동일한 태그를 가진 구성 요소가 공유 애니메이션을 수행합니다. 하나의 인터페이스에는 동일한 이름의 Hero 태그가 두 개 존재할 수 없습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Hero 기본 사용법", - "desc": [ - "【tag】 : 태그 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_pt_PT.json deleted file mode 100644 index d8eb837e1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "Animação Compartilhada", - "info": "Pode especificar o nome da etiqueta, os componentes com a mesma etiqueta realizarão uma animação compartilhada ao saltar entre duas interfaces. Não pode haver duas etiquetas Hero com o mesmo nome numa interface.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Hero", - "desc": [ - "【tag】 : etiqueta 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ru_RU.json deleted file mode 100644 index b88d92a6a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "Общая анимация", - "info": "Можно указать имя тега, при переходе между двумя интерфейсами компоненты с одинаковым тегом будут выполнять общую анимацию. В одном интерфейсе не может быть двух тегов Hero с одинаковым именем.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Hero", - "desc": [ - "【tag】 : тег 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_zh-CN.json deleted file mode 100644 index 6cd3ba9ec..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "共享动画", - "info": "可指定标签名,两个界面跳转时具有相同标签的组件会进行共享动画。一个界面中不能存在两个同名的Hero标签", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Hero基本使用", - "desc": [ - "【tag】 : 标签 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Hero/node1_base.dart deleted file mode 100644 index c0224bf1a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/node1_base.dart +++ /dev/null @@ -1,120 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomHero extends StatelessWidget { - const CustomHero({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Hero hero = Hero( - //----定义一个Hero,并添加tag标签,此中组件共享 - tag: 'user-head', - child: ClipRRect( - borderRadius: const BorderRadius.all(Radius.circular(30)), - child: Image.asset( - "assets/images/icon_head.webp", - width: 60, - height: 60, - fit: BoxFit.cover, - ), - ), - ); - - Widget container = Container( - alignment: const Alignment(-0.8, -0.8), - child: hero, - width: 250, - height: 250 * 0.618, - decoration: BoxDecoration( - gradient: LinearGradient(colors: [ - Colors.red.withAlpha(99), - Colors.yellow.withAlpha(189), - Colors.green.withAlpha(88), - Colors.blue.withAlpha(230) - ])), - ); - - return GestureDetector( - child: Card(elevation: 5, child: container), - onTap: () => Navigator.push( - context, - Bottom2TopRouter(child: const TargetPage(), duration: 1000), - ), - ); - } - -} - -class TargetPage extends StatelessWidget { - const TargetPage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Hero hero = const Hero( - //----定义一个Hero,为其添加标签,两个标签相同,则可以共享 - tag: 'user-head', - child: Padding( - padding: EdgeInsets.all(6.0), - child: CircleAvatar( - backgroundColor: Colors.transparent, - backgroundImage: AssetImage( - "assets/images/icon_head.webp", - ), - ), - ), - ); - - Widget touch = InkWell( - onTap: () { - Navigator.of(context).pop(); - }, - child: hero, - ); - - return Scaffold( - appBar: AppBar( - actions: [touch], - ), - body: Container( - decoration: BoxDecoration( - gradient: LinearGradient(colors: [ - Colors.red.withAlpha(99), - Colors.yellow.withAlpha(189), - Colors.green.withAlpha(88), - Colors.blue.withAlpha(230) - ])), - ), - ); - } -} - -//下--->上 -class Bottom2TopRouter extends PageRouteBuilder { - final Widget child; - final int duration; - final Curve curve; - - Bottom2TopRouter({ - required this.child, - this.duration = 500, - this.curve = Curves.fastOutSlowIn, - }) : super( - transitionDuration: Duration(milliseconds: duration), - pageBuilder: (ctx, a1, a2) { - return child; - }, - transitionsBuilder: ( - ctx, - a1, - a2, - Widget child, - ) => SlideTransition( - position: Tween( - begin: const Offset(0.0, 1.0), - end: const Offset(0.0, 0.0), - ).animate(CurvedAnimation(parent: a1, curve: curve)), - child: child)); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_de_DE.json deleted file mode 100644 index b34fed387..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_de_DE.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "Bildkomponente", - "info": "Wird verwendet, um ein Bild anzuzeigen, das aus einer Datei, dem Speicher, dem Netzwerk oder Ressourcen geladen werden kann. Kann Anpassungsmodus, Stil, Farbmischmodus, Wiederholungsmodus usw. angeben.", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Kann Bilder aus Ressourcendateien und dem Netzwerk laden", - "desc": [ - "Image.asset lädt Ressourcenbilder." - ] - }, - { - "file": "node2_fit.dart", - "name": "Anpassungsmodus des Bildes", - "desc": [ - "【fit】 : Anpassungsmodus*7 【BoxFit】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Ausrichtungsmodus des Bildes", - "desc": [ - "【alignment】 : Farbe 【AlignmentGeometry】", - " Neun statische Konstanten der Alignment-Klasse werden häufig verwendet, aber die Position kann auch angepasst werden." - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "Farbe und Mischmodus des Bildes", - "desc": [ - "【color】 : Farbe 【Color】", - "【colorBlendMode】: Mischmodus*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "Wiederholungsmodus des Bildes", - "desc": [ - "【repeat】 : Wiederholungsmodus*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "Lokale Vergrößerung des Bildes", - "desc": [ - "【centerSlice】 : Beibehaltener Bereich 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_en_US.json deleted file mode 100644 index d3d10de9e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_en_US.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "Image Component", - "info": "Used to display an image, which can be loaded from a file, memory, network, or resources. You can specify the adaptation method, style, color blending mode, repeat mode, etc.", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Load images from resource files and the network", - "desc": [ - "Image.asset loads resource images," - ] - }, - { - "file": "node2_fit.dart", - "name": "Image adaptation mode", - "desc": [ - "【fit】 : Adaptation mode*7 【BoxFit】," - ] - }, - { - "file": "node3_alignment.dart", - "name": "Image alignment mode", - "desc": [ - "【alignment】 : Color 【AlignmentGeometry】", - " Common nine static constants of the Alignment class, but custom positions are also possible" - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "Image color and blending mode", - "desc": [ - "【color】 : Color 【Color】", - "【colorBlendMode】: Blending mode*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "Image repeat mode", - "desc": [ - "【repeat】 : Repeat mode*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "Image partial zoom implementation", - "desc": [ - "【centerSlice】 : Reserved area 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_es_ES.json deleted file mode 100644 index c259bd7fa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_es_ES.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "Componente de imagen", - "info": "Se utiliza para mostrar una imagen, que se puede cargar desde un archivo, memoria, red o recursos. Se puede especificar el modo de ajuste, estilo, modo de mezcla de colores, modo de repetición, etc.", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Cargar imágenes desde archivos de recursos y la red", - "desc": [ - "Image.asset carga imágenes de recursos." - ] - }, - { - "file": "node2_fit.dart", - "name": "Modo de ajuste de la imagen", - "desc": [ - "【fit】 : Modo de ajuste*7 【BoxFit】." - ] - }, - { - "file": "node3_alignment.dart", - "name": "Modo de alineación de la imagen", - "desc": [ - "【alignment】 : Color 【AlignmentGeometry】", - " Nueve constantes estáticas comunes de la clase Alignment, pero también se puede personalizar la posición." - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "Color y modo de mezcla de la imagen", - "desc": [ - "【color】 : Color 【Color】", - "【colorBlendMode】: Modo de mezcla*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "Modo de repetición de la imagen", - "desc": [ - "【repeat】 : Modo de repetición*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "Ampliación local de la imagen", - "desc": [ - "【centerSlice】 : Área conservada 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_fr_FR.json deleted file mode 100644 index c618d6d8b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_fr_FR.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "Composant d'image", - "info": "Utilisé pour afficher une image, qui peut être chargée à partir d'un fichier, de la mémoire, du réseau ou des ressources. Vous pouvez spécifier le mode d'adaptation, le style, le mode de mélange des couleurs, le mode de répétition, etc.", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Peut charger des images à partir de fichiers de ressources et du réseau", - "desc": [ - "Image.asset charge les images de ressources." - ] - }, - { - "file": "node2_fit.dart", - "name": "Mode d'adaptation de l'image", - "desc": [ - "【fit】 : Mode d'adaptation*7 【BoxFit】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Mode d'alignement de l'image", - "desc": [ - "【alignment】 : Couleur 【AlignmentGeometry】", - " Neuf constantes statiques couramment utilisées de la classe Alignment, mais il est également possible de personnaliser la position" - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "Couleur et mode de mélange de l'image", - "desc": [ - "【color】 : Couleur 【Color】", - "【colorBlendMode】: Mode de mélange*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "Mode de répétition de l'image", - "desc": [ - "【repeat】 : Mode de répétition*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "Agrandissement local de l'image", - "desc": [ - "【centerSlice】 : Zone conservée 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_it_IT.json deleted file mode 100644 index 3b43a1fa8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_it_IT.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "Componente immagine", - "info": "Utilizzato per visualizzare un'immagine, può essere caricata da file, memoria, rete o risorse. È possibile specificare modalità di adattamento, stile, modalità di fusione del colore, modalità di ripetizione, ecc.", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Può caricare immagini da file di risorse e dalla rete", - "desc": [ - "Image.asset carica immagini da risorse," - ] - }, - { - "file": "node2_fit.dart", - "name": "Modalità di adattamento dell'immagine", - "desc": [ - "【fit】 : modalità di adattamento*7 【BoxFit】," - ] - }, - { - "file": "node3_alignment.dart", - "name": "Modalità di allineamento dell'immagine", - "desc": [ - "【alignment】 : colore 【AlignmentGeometry】", - " Nove costanti statiche della classe Alignment, ma è anche possibile personalizzare la posizione" - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "Colore e modalità di fusione dell'immagine", - "desc": [ - "【color】 : colore 【Color】", - "【colorBlendMode】: modalità di fusione*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "Modalità di ripetizione dell'immagine", - "desc": [ - "【repeat】 : modalità di ripetizione*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "Ingrandimento locale dell'immagine", - "desc": [ - "【centerSlice】 : area conservata 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ja_JP.json deleted file mode 100644 index 608ca9add..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ja_JP.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "画像コンポーネント", - "info": "画像を表示するために使用され、ファイル、メモリ、ネットワーク、リソースからロードできます。適応モード、スタイル、カラーブレンドモード、リピートモードなどを指定できます", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "リソースファイルとネットワークから画像をロードできます", - "desc": [ - "Image.assetでリソース画像をロードします" - ] - }, - { - "file": "node2_fit.dart", - "name": "画像の適応モード", - "desc": [ - "【fit】 : 適応モード*7 【BoxFit】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "画像の整列モード", - "desc": [ - "【alignment】 : カラー 【AlignmentGeometry】", - " 一般的にAlignmentクラスの9つの静的定数を使用しますが、位置をカスタマイズすることもできます" - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "画像のカラー及びブレンドモード", - "desc": [ - "【color】 : カラー 【Color】", - "【colorBlendMode】: ブレンドモード*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "画像のリピートモード", - "desc": [ - "【repeat】 : リピートモード*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "画像の一部を拡大", - "desc": [ - "【centerSlice】 : 保持する領域 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ko_KR.json deleted file mode 100644 index ac7e3d2ea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ko_KR.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "이미지 컴포넌트", - "info": "이미지를 표시하는 데 사용되며, 파일, 메모리, 네트워크, 리소스에서 로드할 수 있습니다. 적응 방식, 스타일, 색상 혼합 모드, 반복 모드 등을 지정할 수 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "리소스 파일 및 네트워크에서 이미지 로드", - "desc": [ - "Image.asset로 리소스 이미지 로드" - ] - }, - { - "file": "node2_fit.dart", - "name": "이미지 적응 모드", - "desc": [ - "【fit】 : 적응 모드*7 【BoxFit】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "이미지 정렬 모드", - "desc": [ - "【alignment】 : 색상 【AlignmentGeometry】", - " 일반적으로 Alignment 클래스의 9개 정적 상수를 사용하지만, 위치를 사용자 정의할 수도 있음" - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "이미지 색상 및 혼합 모드", - "desc": [ - "【color】 : 색상 【Color】", - "【colorBlendMode】: 혼합 모드*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "이미지 반복 모드", - "desc": [ - "【repeat】 : 반복 모드*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "이미지 부분 확대", - "desc": [ - "【centerSlice】 : 보존 영역 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_pt_PT.json deleted file mode 100644 index 6b510140f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_pt_PT.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "Componente de Imagem", - "info": "Usado para exibir uma imagem, pode ser carregada a partir de arquivos, memória, rede ou recursos. Pode especificar o modo de ajuste, estilo, modo de mistura de cores, modo de repetição, etc.", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Pode carregar imagens de arquivos de recursos e da rede", - "desc": [ - "Image.asset carrega imagens de recursos," - ] - }, - { - "file": "node2_fit.dart", - "name": "Modo de ajuste da imagem", - "desc": [ - "【fit】 : modo de ajuste*7 【BoxFit】," - ] - }, - { - "file": "node3_alignment.dart", - "name": "Modo de alinhamento da imagem", - "desc": [ - "【alignment】 : cor 【AlignmentGeometry】", - " Nove constantes estáticas comuns da classe Alignment, mas também pode personalizar a posição" - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "Cor e modo de mistura da imagem", - "desc": [ - "【color】 : cor 【Color】", - "【colorBlendMode】: modo de mistura*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "Modo de repetição da imagem", - "desc": [ - "【repeat】 : modo de repetição*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "Ampliação local da imagem", - "desc": [ - "【centerSlice】 : área retida 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ru_RU.json deleted file mode 100644 index 5c26b2c46..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ru_RU.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "Компонент изображения", - "info": "Используется для отображения изображения, которое можно загрузить из файла, памяти, сети или ресурсов. Можно указать режим адаптации, стиль, режим смешивания цветов, режим повторения и т.д.", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Загрузка изображений из ресурсов и сети", - "desc": [ - "Image.asset загружает изображения из ресурсов," - ] - }, - { - "file": "node2_fit.dart", - "name": "Режим адаптации изображения", - "desc": [ - "【fit】 : режим адаптации*7 【BoxFit】," - ] - }, - { - "file": "node3_alignment.dart", - "name": "Режим выравнивания изображения", - "desc": [ - "【alignment】 : цвет 【AlignmentGeometry】", - " Девять статических констант класса Alignment, но также можно настроить положение" - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "Цвет и режим смешивания изображения", - "desc": [ - "【color】 : цвет 【Color】", - "【colorBlendMode】: режим смешивания*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "Режим повторения изображения", - "desc": [ - "【repeat】 : режим повторения*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "Локальное увеличение изображения", - "desc": [ - "【centerSlice】 : сохраняемая область 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_zh-CN.json deleted file mode 100644 index 1b2434ac4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_zh-CN.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "图片组件", - "info": "用于显示一张图片,可以从文件、内存、网络、资源里加载。可以指定适应方式、样式、颜色混合模式、重复模式等", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "可从资源文件和网络加载图片", - "desc": [ - "Image.asset加载资源图片," - ] - }, - { - "file": "node2_fit.dart", - "name": "图片的适应模式", - "desc": [ - "【fit】 : 适应模式*7 【BoxFit】," - ] - }, - { - "file": "node3_alignment.dart", - "name": "图片对齐模式", - "desc": [ - "【alignment】 : 颜色 【AlignmentGeometry】", - " 常用Alignment类的九个静态常量,但也可定制位置" - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "图片颜色及混合模式", - "desc": [ - "【color】 : 颜色 【Color】", - "【colorBlendMode】: 混合模式*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "图片重复模式", - "desc": [ - "【repeat】 : 重复模式*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "图片实现局部放大", - "desc": [ - "【centerSlice】 : 保留的区域 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Image/node1_base.dart deleted file mode 100644 index 71530c45c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/node1_base.dart +++ /dev/null @@ -1,27 +0,0 @@ - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - - -class LoadImage extends StatelessWidget { - const LoadImage({Key? key}) : super(key: key); - - final String assetsImagePath = "assets/images/icon_head.webp"; - final String netImageUrl = "https://p9-juejin.byteimg.com" - "/tos-cn-i-k3u1fbpfcp/36dee4e4dceb4c41a93df4a3603439fe~" - "tplv-k3u1fbpfcp-zoom-crop-mark:1304:1304:1304:734.awebp"; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: [ - Image.asset(assetsImagePath, height: 80, width: 80), - _loadFromNet(), - ], - ); - } - - Widget _loadFromNet() => Image.network(netImageUrl, height: 80); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/node2_fit.dart b/modules/widget_system/widgets/lib/StatefulWidget/Image/node2_fit.dart deleted file mode 100644 index b61fb6375..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/node2_fit.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class FitImage extends StatefulWidget { - const FitImage({Key? key}) : super(key: key); - - @override - _FitImageState createState() => _FitImageState(); -} - -class _FitImageState extends State { - bool _smallImage = false; - - @override - Widget build(BuildContext context) { - List imageLi = BoxFit.values - .toList() - .map((mode) => Column(children:[ - Container( - margin: const EdgeInsets.all(5), - width: 100, - height: 80, - color: Colors.grey.withAlpha(88), - child: Image( - image: AssetImage(!_smallImage - ? "assets/images/wy_300x200.webp" - : "assets/images/wy_30x20.webp"), - fit: mode)), - Text(mode.toString().split(".")[1]) - ])).toList(); - - return Wrap( - children: [...imageLi, _buildSwitch()], - ); - } - - Widget _buildSwitch() { - return Container( - alignment: Alignment.center, - width: 200, - height: 100, - child: Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - const Text("使用小图"), - Switch( - value: _smallImage, - onChanged: (b) => setState(() => _smallImage = b)), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/node3_alignment.dart b/modules/widget_system/widgets/lib/StatefulWidget/Image/node3_alignment.dart deleted file mode 100644 index a7885cee2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/node3_alignment.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -enum AlignmentType { - center(Alignment.center, 'center'), - centerLeft(Alignment.centerLeft, 'centerLeft'), - centerRight(Alignment.centerRight, 'centerRight'), - topCenter(Alignment.topCenter, 'topCenter'), - topLeft(Alignment.topLeft, 'topLeft'), - topRight(Alignment.topRight, 'topRight'), - bottomCenter(Alignment.bottomCenter, 'bottomCenter'), - bottomLeft(Alignment.bottomLeft, 'bottomLeft'), - bottomRight(Alignment.bottomRight, 'bottomRight'), - ; - - const AlignmentType(this.alignment, this.title); - - final Alignment alignment; - final String title; -} - -class AlignmentImage extends StatelessWidget { - const AlignmentImage({Key? key}) : super(key: key); - - //测试数组 - - @override - Widget build(BuildContext context) { - List imgLi = AlignmentType.values - .map((v) => //生成子Widget列表 - Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 90, - height: 60, - color: Colors.grey.withAlpha(88), - child: Image( - image: const AssetImage("assets/images/wy_30x20.webp"), - alignment: v.alignment, - )), - Text(v.title), - ])) - .toList(); - var imageAlignment = Wrap(children: imgLi); - return imageAlignment; - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/node4_colorBlendMode.dart b/modules/widget_system/widgets/lib/StatefulWidget/Image/node4_colorBlendMode.dart deleted file mode 100644 index 8c2510295..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/node4_colorBlendMode.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - - -class BlendModeImage extends StatelessWidget { - const BlendModeImage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - children: BlendMode.values - .toList() - .map((mode) => Column(children:[ - Container( - margin: const EdgeInsets.all(5), - width: 60, - height: 60, - color: Colors.red, - child: Image( - image: const AssetImage("assets/images/icon_head.webp"), - color: Colors.blue.withAlpha(88), - colorBlendMode: mode)), - Text(mode.toString().split(".")[1]) - ])) - .toList(), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/node5_repeat.dart b/modules/widget_system/widgets/lib/StatefulWidget/Image/node5_repeat.dart deleted file mode 100644 index 2048dc2e9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/node5_repeat.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class RepeatImage extends StatelessWidget { - const RepeatImage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - children: ImageRepeat.values - .toList() - .map((mode) => Column(children:[ - Container( - margin: const EdgeInsets.all(5), - width: 150, - height: 60, - color: Colors.red, - child: Image( - image: const AssetImage("assets/images/wy_30x20.webp"), - repeat: mode)), - Text(mode.toString().split(".")[1]) - ])) - .toList(), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/node6_centerSlice.dart b/modules/widget_system/widgets/lib/StatefulWidget/Image/node6_centerSlice.dart deleted file mode 100644 index d4f4364ff..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/node6_centerSlice.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - - -class CenterSliceImage extends StatelessWidget { - const CenterSliceImage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 300, - height: 80, - child: Image.asset( - "assets/images/right_chat.png", - centerSlice: const Rect.fromLTRB(9, 27, 60, 27 + 1.0), - fit: BoxFit.fill, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_de_DE.json deleted file mode 100644 index 86515655a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_de_DE.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "Wasserwelle", - "info": "Macht die Wasserwellen von InkWell und InkResponse effektiv, verwendet für das Zeichnen von Bildern oder anderen dekorativen Materialkomponenten.", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Ink", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】", - "【decoration】 : Dekoration 【Decoration】", - "【width】 : Breite 【double】", - "【height】 : Höhe 【double】", - "【color】 : Farbe 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Ink.image Bildwasserwelle", - "desc": [ - "Die Eigenschaften sind identisch mit der Image-Komponente, siehe Image-Komponente für Details" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_en_US.json deleted file mode 100644 index 36b89e1f8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_en_US.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "Ripple", - "info": "Enables the ripple effect for InkWell and InkResponse, a Material component used to draw images or other decorations.", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Ink", - "desc": [ - "【child】: Child component 【Widget】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【decoration】: Decoration 【Decoration】", - "【width】: Width 【double】", - "【height】: Height 【double】", - "【color】: Color 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Ink.image Ripple with Image", - "desc": [ - "The properties are consistent with the Image component, see the Image component for details" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_es_ES.json deleted file mode 100644 index 9572e4f68..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_es_ES.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "Onda de agua", - "info": "Hace que las ondas de agua de InkWell e InkResponse sean efectivas, utilizadas para dibujar imágenes u otros componentes decorativos de Material.", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Ink", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】", - "【decoration】 : Decoración 【Decoration】", - "【width】 : Ancho 【double】", - "【height】 : Alto 【double】", - "【color】 : Color 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Onda de agua con Ink.image", - "desc": [ - "Los atributos son consistentes con el componente Image, consulte el componente Image para más detalles" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_fr_FR.json deleted file mode 100644 index 4a7cd29dd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_fr_FR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "Onde", - "info": "Active les ondulations d'eau pour InkWell et InkResponse, utilisé pour dessiner des images ou d'autres composants de décoration Material.", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'Ink", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】", - "【decoration】 : Décoration 【Decoration】", - "【width】 : Largeur 【double】", - "【height】 : Hauteur 【double】", - "【color】 : Couleur 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Onde d'image avec Ink.image", - "desc": [ - "Les propriétés sont identiques à celles du composant Image, voir le composant Image pour plus de détails" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_it_IT.json deleted file mode 100644 index 918d13deb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_it_IT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "Onda d'acqua", - "info": "Rende efficace l'effetto ondulato dell'acqua di InkWell e InkResponse, utilizzato per disegnare immagini o altri componenti decorativi di Material.", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Ink", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】", - "【decoration】 : Decorazione 【Decoration】", - "【width】 : Larghezza 【double】", - "【height】 : Altezza 【double】", - "【color】 : Colore 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Ink.image effetto ondulato dell'immagine", - "desc": [ - "Le proprietà sono coerenti con il componente Image, vedi il componente Image per i dettagli" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ja_JP.json deleted file mode 100644 index 95241704b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ja_JP.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "水波", - "info": "InkWellとInkResponseの水の波紋を有効にし、画像やその他の装飾を描画するためのMaterialコンポーネントです。", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Inkの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【padding】 : パディング 【EdgeInsetsGeometry】", - "【decoration】 : 装飾 【Decoration】", - "【width】 : 幅 【double】", - "【height】 : 高さ 【double】", - "【color】 : 色 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Ink.image画像の水波", - "desc": [ - "その属性はImageコンポーネントと一致し、詳細はImageコンポーネントを参照してください" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ko_KR.json deleted file mode 100644 index c8d9d18fc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ko_KR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "물결", - "info": "InkWell 및 InkResponse의 물결 효과를 활성화하고, 이미지 또는 기타 장식을 그리기 위한 Material 컴포넌트입니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Ink 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【padding】 : 안쪽 여백 【EdgeInsetsGeometry】", - "【decoration】 : 장식 【Decoration】", - "【width】 : 너비 【double】", - "【height】 : 높이 【double】", - "【color】 : 색상 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Ink.image 이미지 물결", - "desc": [ - "속성은 Image 컴포넌트와 동일하며, 자세한 내용은 Image 컴포넌트를 참조하세요" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_pt_PT.json deleted file mode 100644 index aeb564476..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_pt_PT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "Onda", - "info": "Torna as ondulações de água do InkWell e InkResponse eficazes, usadas para desenhar imagens ou outros componentes decorativos do Material.", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Ink", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【padding】 : Preenchimento interno 【EdgeInsetsGeometry】", - "【decoration】 : Decoração 【Decoration】", - "【width】 : Largura 【double】", - "【height】 : Altura 【double】", - "【color】 : Cor 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Ondulação de água do Ink.image", - "desc": [ - "Os atributos são consistentes com o componente Image, consulte o componente Image para mais detalhes" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ru_RU.json deleted file mode 100644 index 0f674edcf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ru_RU.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "Волна", - "info": "Делает водяные волны InkWell и InkResponse активными, используется для рисования изображений или других декоративных компонентов Material.", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Ink", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【padding】 : Внутренний отступ 【EdgeInsetsGeometry】", - "【decoration】 : Декорация 【Decoration】", - "【width】 : Ширина 【double】", - "【height】 : Высота 【double】", - "【color】 : Цвет 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Водяные волны Ink.image", - "desc": [ - "Свойства совпадают с компонентом Image, подробнее см. компонент Image" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_zh-CN.json deleted file mode 100644 index 961f0dc92..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_zh-CN.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "水波", - "info": "使InkWell和InkResponse的水波纹有效,用于绘制图像或其他装饰的Material组件。", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Ink基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【padding】 : 内边距 【EdgeInsetsGeometry】", - "【decoration】 : 装饰 【Decoration】", - "【width】 : 宽 【double】", - "【height】 : 高 【double】", - "【color】 : 颜色 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Ink.image图片水波纹", - "desc": [ - "其中属性与Image组件一致,详见Image组件" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Ink/node1_base.dart deleted file mode 100644 index fdc0a1d71..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/node1_base.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class CustomInk extends StatelessWidget { - const CustomInk({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Material( - color: Colors.orangeAccent, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Center( - child: Ink( - padding: const EdgeInsets.all(10), - decoration: const BoxDecoration( - color: Colors.yellow, - borderRadius: BorderRadius.all(Radius.circular(20))), - width: 200.0, - height: 100.0, - child: InkWell( - onTap: () {}, - child: const Center(child: Text('Hello')), - ), - ), - ), - ), - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/node2_image.dart b/modules/widget_system/widgets/lib/StatefulWidget/Ink/node2_image.dart deleted file mode 100644 index aceedd2d6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/node2_image.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - - -class InkImage extends StatelessWidget { - const InkImage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Material( - color: Colors.grey[800], - child: Center( - child: Ink.image( - image: const AssetImage('assets/images/sabar.webp'), - fit: BoxFit.cover, - width: 300.0, - height: 200.0, - child: InkWell( - onTap: () {}, - child: const Align( - alignment: Alignment.topLeft, - child: Padding( - padding: EdgeInsets.all(10.0), - child: Text('Chaos', - style: TextStyle( - fontWeight: FontWeight.w900, color: Colors.black)), - ), - )), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_de_DE.json deleted file mode 100644 index aca10f03e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_de_DE.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "Wasserwellen-Reaktion", - "info": "Klickeffekt mit Wasserwellen, empfängt Ereignisse wie Klicken, Doppelklicken, Langdrücken, Abbrechen und Hervorhebungsänderungen. Kann Eigenschaften wie Wasserwellenfarbe, Radius, Hervorhebungsform usw. angeben.", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InkResponse grundlegende Ereignisse", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onTap】 : Klickereignis 【Function()】", - "【onDoubleTap】 : Doppelklickereignis 【Function()】", - "【onTapCancel】 : Klick abbrechen 【Function()】", - "【onLongPress】 : Langdrückereignis 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "InkResponse andere Eigenschaften", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onHighlightChanged】 : Hervorhebungsänderungsrückruf 【Function(bool)】", - "【highlightColor】 : Hervorhebungsfarbe 【Color】", - "【splashColor】 : Wasserwellenfarbe 【Color】", - "【radius】 : Wasserwellenradius 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_en_US.json deleted file mode 100644 index b550baae5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_en_US.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "Ripple Response", - "info": "Ripple click effect, receiving click, double-click, long press, cancel, highlight change events, and can specify ripple color, radius, highlight shape and other properties.", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Events of InkResponse", - "desc": [ - "【child】 : Child component 【Widget】", - "【onTap】 : Click event 【Function()】", - "【onDoubleTap】 : Double-click event 【Function()】", - "【onTapCancel】 : Click cancel 【Function()】", - "【onLongPress】 : Long press event 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Other Properties of InkResponse", - "desc": [ - "【child】 : Child component 【Widget】", - "【onHighlightChanged】 : Highlight change callback 【Function(bool)】", - "【highlightColor】 : Highlight color 【Color】", - "【splashColor】 : Ripple color 【Color】", - "【radius】 : Ripple radius 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_es_ES.json deleted file mode 100644 index 6301b0fb5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_es_ES.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "Respuesta de ondas", - "info": "Efecto de clic de ondas, recibe eventos de clic, doble clic, pulsación larga, cancelación y cambio de resaltado. Se pueden especificar propiedades como el color de las ondas, el radio, la forma de resaltado, etc.", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos básicos de InkResponse", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onTap】 : Evento de clic 【Function()】", - "【onDoubleTap】 : Evento de doble clic 【Function()】", - "【onTapCancel】 : Cancelación de clic 【Function()】", - "【onLongPress】 : Evento de pulsación larga 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Otras propiedades de InkResponse", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onHighlightChanged】 : Callback de cambio de resaltado 【Function(bool)】", - "【highlightColor】 : Color de resaltado 【Color】", - "【splashColor】 : Color de las ondas 【Color】", - "【radius】 : Radio de las ondas 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_fr_FR.json deleted file mode 100644 index 7da358ce7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_fr_FR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "Réponse d'ondulation", - "info": "Effet de clic d'ondulation, reçoit les événements de clic, double-clic, appui long, annulation et changement de surbrillance. Peut spécifier la couleur de l'ondulation, le rayon, la forme de la surbrillance et d'autres propriétés.", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événements de base d'InkResponse", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onTap】 : Événement de clic 【Function()】", - "【onDoubleTap】 : Événement de double-clic 【Function()】", - "【onTapCancel】 : Annulation de clic 【Function()】", - "【onLongPress】 : Événement d'appui long 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Autres propriétés d'InkResponse", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onHighlightChanged】 : Rappel de changement de surbrillance 【Function(bool)】", - "【highlightColor】 : Couleur de surbrillance 【Color】", - "【splashColor】 : Couleur de l'ondulation 【Color】", - "【radius】 : Rayon de l'ondulation 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_it_IT.json deleted file mode 100644 index 9b01d305c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_it_IT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "Effetto Ripple", - "info": "Effetto di clic a ripple, riceve eventi di clic, doppio clic, pressione prolungata, annullamento e cambiamento di evidenziazione. È possibile specificare proprietà come il colore del ripple, il raggio e la forma dell'evidenziazione.", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventi di base di InkResponse", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onTap】 : Evento di clic 【Function()】", - "【onDoubleTap】 : Evento di doppio clic 【Function()】", - "【onTapCancel】 : Annullamento clic 【Function()】", - "【onLongPress】 : Evento di pressione prolungata 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Altre proprietà di InkResponse", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onHighlightChanged】 : Callback di cambiamento di evidenziazione 【Function(bool)】", - "【highlightColor】 : Colore di evidenziazione 【Color】", - "【splashColor】 : Colore del ripple 【Color】", - "【radius】 : Raggio del ripple 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ja_JP.json deleted file mode 100644 index fa3339000..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ja_JP.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "リップルレスポンス", - "info": "リップルのクリック効果。クリック、ダブルクリック、長押し、キャンセル、ハイライト変更イベントを受け取り、リップルの色、半径、ハイライト形状などの属性を指定できます。", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InkResponse基本イベント", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onTap】 : クリックイベント 【Function()】", - "【onDoubleTap】 : ダブルクリックイベント 【Function()】", - "【onTapCancel】 : クリックキャンセル 【Function()】", - "【onLongPress】 : 長押しイベント 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "InkResponseその他の属性", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onHighlightChanged】 : ハイライト変更コールバック 【Function(bool)】", - "【highlightColor】 : ハイライト色 【Color】", - "【splashColor】 : リップル色 【Color】", - "【radius】 : リップル半径 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ko_KR.json deleted file mode 100644 index 1b4ca2a7a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ko_KR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "물결 반응", - "info": "물결 클릭 효과, 클릭, 더블 클릭, 길게 누르기, 취소, 하이라이트 변경 이벤트를 수신하며, 물결 색상, 반경, 하이라이트 모양 등의 속성을 지정할 수 있습니다.", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InkResponse 기본 이벤트", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【onTap】 : 클릭 이벤트 【Function()】", - "【onDoubleTap】 : 더블 클릭 이벤트 【Function()】", - "【onTapCancel】 : 클릭 취소 【Function()】", - "【onLongPress】 : 길게 누르기 이벤트 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "InkResponse 기타 속성", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【onHighlightChanged】 : 하이라이트 변경 콜백 【Function(bool)】", - "【highlightColor】 : 하이라이트 색상 【Color】", - "【splashColor】 : 물결 색상 【Color】", - "【radius】 : 물결 반경 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_pt_PT.json deleted file mode 100644 index 7f36fcd83..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_pt_PT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "Resposta de Ondulação", - "info": "Efeito de clique de ondulação, recebe eventos de clique, duplo clique, pressionamento longo, cancelamento e mudança de destaque, podendo especificar a cor da ondulação, raio, forma de destaque, entre outros atributos.", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos Básicos do InkResponse", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onTap】 : Evento de clique 【Function()】", - "【onDoubleTap】 : Evento de duplo clique 【Function()】", - "【onTapCancel】 : Cancelamento de clique 【Function()】", - "【onLongPress】 : Evento de pressionamento longo 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Outras Propriedades do InkResponse", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onHighlightChanged】 : Callback de mudança de destaque 【Function(bool)】", - "【highlightColor】 : Cor de destaque 【Color】", - "【splashColor】 : Cor da ondulação 【Color】", - "【radius】 : Raio da ondulação 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ru_RU.json deleted file mode 100644 index 255ee434f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ru_RU.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "Эффект ряби", - "info": "Эффект нажатия с рябью, принимает события нажатия, двойного нажатия, долгого нажатия, отмены и изменения выделения. Можно указать цвет ряби, радиус, форму выделения и другие свойства.", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основные события InkResponse", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onTap】 : Событие нажатия 【Function()】", - "【onDoubleTap】 : Событие двойного нажатия 【Function()】", - "【onTapCancel】 : Отмена нажатия 【Function()】", - "【onLongPress】 : Событие долгого нажатия 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Другие свойства InkResponse", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onHighlightChanged】 : Обратный вызов изменения выделения 【Function(bool)】", - "【highlightColor】 : Цвет выделения 【Color】", - "【splashColor】 : Цвет ряби 【Color】", - "【radius】 : Радиус ряби 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_zh-CN.json deleted file mode 100644 index 900fa0b28..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_zh-CN.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "水波纹响应", - "info": "水波纹的点击效果,接收点击、双击、长按、取消、高亮变化事件,可指定水波纹颜色、半径、高亮形状等属性。", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InkResponse基本事件", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onTap】 : 点击事件 【Function()】", - "【onDoubleTap】 : 双击事件 【Function()】", - "【onTapCancel】 : 点击取消 【Function()】", - "【onLongPress】 : 长按事件 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "InkResponse其他属性", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onHighlightChanged】 : 高亮变化回调 【Function(bool)】", - "【highlightColor】 : 高亮色 【Color】", - "【splashColor】 : 水波纹色 【Color】", - "【radius】 : 水波半径 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/node1_base.dart deleted file mode 100644 index da42a370e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/node1_base.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class CustomInkResponse extends StatefulWidget { - const CustomInkResponse({Key? key}) : super(key: key); - - @override - _CustomInkResponseState createState() => _CustomInkResponseState(); -} - -class _CustomInkResponseState extends State { - String _info = 'Push'; - - @override - Widget build(BuildContext context) { - return InkResponse( - onTap: () => setState(() => _info = 'onTap'), - onDoubleTap: () => setState(() => _info = 'onDoubleTap'), - onLongPress: () => setState(() => _info = 'onLongPress'), - onTapCancel: () => setState(() => _info = 'onTapCancel'), - child: Container( - alignment: Alignment.center, - width: 200, - height: 100, - child: Text(_info), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/node2_color.dart b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/node2_color.dart deleted file mode 100644 index b9f452696..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/node2_color.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class ColorInkResponse extends StatefulWidget { - const ColorInkResponse({Key? key}) : super(key: key); - - @override - _ColorInkResponseState createState() => _ColorInkResponseState(); -} - -class _ColorInkResponseState extends State { - String _info = 'Push'; - - @override - Widget build(BuildContext context) { - return InkResponse( - onTap: () => {}, - splashColor: Colors.blueAccent, - highlightColor: Colors.orange, - onHighlightChanged: (v) => - setState(() => _info = 'onHighlightChanged:$v'), - radius: 50, - child: Container( - alignment: Alignment.center, - width: 200, - height: 100, - child: Text(_info), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_de_DE.json deleted file mode 100644 index d68bb899c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_de_DE.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "Wasserwelle", - "info": "Unterklasse von InkResponse, grundlegende Eigenschaften wie InkResponse. Eine rechteckige Wasserwelle, die den Radius der abgerundeten Ecken, die Form der Umrandung usw. kennt.", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Ereignisse von InkWell", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onTap】 : Klickereignis 【Function()】", - "【onDoubleTap】 : Doppelklickereignis 【Function()】", - "【onTapCancel】 : Klick abbrechen 【Function()】", - "【onLongPress】 : Langdrücken 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Weitere Eigenschaften von InkWell", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onHighlightChanged】 : Rückruf bei Hervorhebungsänderung 【Function(bool)】", - "【highlightColor】 : Hervorhebungsfarbe 【Color】", - "【splashColor】 : Wasserwellenfarbe 【Color】", - "【radius】 : Wasserwellenradius 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_en_US.json deleted file mode 100644 index 4de7cf5d4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_en_US.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "Ripple", - "info": "A subclass of InkResponse, with basic properties similar to InkResponse. A rectangular area with ripple effects, allowing customization of corner radius, border shape, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InkWell Basic Events", - "desc": [ - "【child】: Child component 【Widget】", - "【onTap】: Tap event 【Function()】", - "【onDoubleTap】: Double tap event 【Function()】", - "【onTapCancel】: Tap cancel 【Function()】", - "【onLongPress】: Long press event 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "InkWell Other Properties", - "desc": [ - "【child】: Child component 【Widget】", - "【onHighlightChanged】: Highlight change callback 【Function(bool)】", - "【highlightColor】: Highlight color 【Color】", - "【splashColor】: Ripple color 【Color】", - "【radius】: Ripple radius 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_es_ES.json deleted file mode 100644 index 8862b4a31..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_es_ES.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "Ondulación", - "info": "Subclase de InkResponse, con propiedades básicas similares a InkResponse. Una región rectangular de ondulación, que puede conocer el radio de las esquinas redondeadas, la forma del borde, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos básicos de InkWell", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onTap】 : Evento de clic 【Function()】", - "【onDoubleTap】 : Evento de doble clic 【Function()】", - "【onTapCancel】 : Cancelación de clic 【Function()】", - "【onLongPress】 : Evento de pulsación larga 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Otras propiedades de InkWell", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onHighlightChanged】 : Callback de cambio de resaltado 【Function(bool)】", - "【highlightColor】 : Color de resaltado 【Color】", - "【splashColor】 : Color de la ondulación 【Color】", - "【radius】 : Radio de la ondulación 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_fr_FR.json deleted file mode 100644 index 8f623f9ac..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_fr_FR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "Effet de vague", - "info": "Sous-classe de InkResponse, les propriétés de base sont les mêmes que InkResponse. Une zone rectangulaire avec un effet de vague, permet de connaître le rayon des coins arrondis, la forme de la bordure, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événements de base d'InkWell", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onTap】 : Événement de clic 【Function()】", - "【onDoubleTap】 : Événement de double clic 【Function()】", - "【onTapCancel】 : Annulation de clic 【Function()】", - "【onLongPress】 : Événement de pression longue 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Autres propriétés d'InkWell", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onHighlightChanged】 : Rappel de changement de surbrillance 【Function(bool)】", - "【highlightColor】 : Couleur de surbrillance 【Color】", - "【splashColor】 : Couleur de l'effet de vague 【Color】", - "【radius】 : Rayon de l'effet de vague 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_it_IT.json deleted file mode 100644 index 19456853c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_it_IT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "Onda d'acqua", - "info": "Sottoclasse di InkResponse, le proprietà di base sono le stesse di InkResponse. Un'area rettangolare con un'effetto onda d'acqua, può conoscere il raggio degli angoli, la forma del bordo, ecc.", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventi di base di InkWell", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onTap】 : Evento di clic 【Function()】", - "【onDoubleTap】 : Evento di doppio clic 【Function()】", - "【onTapCancel】 : Annullamento del clic 【Function()】", - "【onLongPress】 : Evento di pressione prolungata 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Altre proprietà di InkWell", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onHighlightChanged】 : Callback di cambiamento dell'evidenziazione 【Function(bool)】", - "【highlightColor】 : Colore di evidenziazione 【Color】", - "【splashColor】 : Colore dell'onda d'acqua 【Color】", - "【radius】 : Raggio dell'onda 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ja_JP.json deleted file mode 100644 index 32ba38c79..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ja_JP.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "波紋", - "info": "InkResponseのサブクラスで、基本属性はInkResponseと同じです。矩形領域の波紋で、角丸半径や辺の形状などを知ることができます。", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InkWell基本イベント", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onTap】 : タップイベント 【Function()】", - "【onDoubleTap】 : ダブルタップイベント 【Function()】", - "【onTapCancel】 : タップキャンセル 【Function()】", - "【onLongPress】 : 長押しイベント 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "InkWellその他の属性", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onHighlightChanged】 : ハイライト変更コールバック 【Function(bool)】", - "【highlightColor】 : ハイライト色 【Color】", - "【splashColor】 : 波紋色 【Color】", - "【radius】 : 波紋半径 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ko_KR.json deleted file mode 100644 index 7f5b712ca..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ko_KR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "물결무늬", - "info": "InkResponse의 하위 클래스로, 기본 속성은 InkResponse와 동일합니다. 둥근 모서리 반경, 테두리 모양 등을 알 수 있는 직사각형 영역의 물결무늬입니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InkWell 기본 이벤트", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【onTap】 : 탭 이벤트 【Function()】", - "【onDoubleTap】 : 더블 탭 이벤트 【Function()】", - "【onTapCancel】 : 탭 취소 【Function()】", - "【onLongPress】 : 롱 프레스 이벤트 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "InkWell 기타 속성", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【onHighlightChanged】 : 하이라이트 변경 콜백 【Function(bool)】", - "【highlightColor】 : 하이라이트 색상 【Color】", - "【splashColor】 : 물결무늬 색상 【Color】", - "【radius】 : 물결 반경 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_pt_PT.json deleted file mode 100644 index 2bc5f24a0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_pt_PT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "Onda de Água", - "info": "Subclasse de InkResponse, com propriedades básicas semelhantes ao InkResponse. Uma área retangular de onda de água, que pode conhecer o raio de curvatura, a forma da borda, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos Básicos do InkWell", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onTap】 : Evento de clique 【Function()】", - "【onDoubleTap】 : Evento de duplo clique 【Function()】", - "【onTapCancel】 : Cancelamento de clique 【Function()】", - "【onLongPress】 : Evento de pressionar longo 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Outras Propriedades do InkWell", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onHighlightChanged】 : Callback de mudança de destaque 【Function(bool)】", - "【highlightColor】 : Cor de destaque 【Color】", - "【splashColor】 : Cor da onda de água 【Color】", - "【radius】 : Raio da onda 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ru_RU.json deleted file mode 100644 index bf0b487df..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ru_RU.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "Водяные волны", - "info": "Подкласс InkResponse, основные свойства такие же, как у InkResponse. Прямоугольная область с водяными волнами, можно узнать радиус скругления, форму границы и т.д.", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основные события InkWell", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onTap】 : Событие нажатия 【Function()】", - "【onDoubleTap】 : Событие двойного нажатия 【Function()】", - "【onTapCancel】 : Отмена нажатия 【Function()】", - "【onLongPress】 : Событие длительного нажатия 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Другие свойства InkWell", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onHighlightChanged】 : Обратный вызов изменения подсветки 【Function(bool)】", - "【highlightColor】 : Цвет подсветки 【Color】", - "【splashColor】 : Цвет водяных волн 【Color】", - "【radius】 : Радиус волны 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_zh-CN.json deleted file mode 100644 index 46a7480fb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_zh-CN.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "水波纹", - "info": "InkResponse的子类,基本属性同InkResponse。一个矩形区域的水波纹,可以知道圆角半径,边线形状等。", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InkWell基本事件", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onTap】 : 点击事件 【Function()】", - "【onDoubleTap】 : 双击事件 【Function()】", - "【onTapCancel】 : 点击取消 【Function()】", - "【onLongPress】 : 长按事件 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "InkWell其他属性", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onHighlightChanged】 : 高亮变化回调 【Function(bool)】", - "【highlightColor】 : 高亮色 【Color】", - "【splashColor】 : 水波纹色 【Color】", - "【radius】 : 水波半径 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/node1_base.dart deleted file mode 100644 index 11d053a5d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/node1_base.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class CustomInkWell extends StatefulWidget { - const CustomInkWell({Key? key}) : super(key: key); - - @override - _CustomInkWellState createState() => _CustomInkWellState(); -} - -class _CustomInkWellState extends State { - String _info = 'Push'; - - @override - Widget build(BuildContext context) { - return InkWell( - onTap: () => setState(() => _info = 'onTap'), - onDoubleTap: () => setState(() => _info = 'onDoubleTap'), - onLongPress: () => setState(() => _info = 'onLongPress'), - onTapCancel: () => setState(() => _info = 'onTapCancel'), - child: Container( - alignment: Alignment.center, - width: 120, - height: 50, - child: Text(_info), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/node2_color.dart b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/node2_color.dart deleted file mode 100644 index f10b47a16..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/node2_color.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class ColorInkWell extends StatefulWidget { - const ColorInkWell({Key? key}) : super(key: key); - - @override - _ColorInkWellState createState() => _ColorInkWellState(); -} - -class _ColorInkWellState extends State { - String _info = 'Push'; - - @override - Widget build(BuildContext context) { - return InkWell( - onTap: () => {}, - splashColor: Colors.blueAccent, - highlightColor: Colors.orange, - onHighlightChanged: (v) => - setState(() => _info = 'onHighlightChanged:$v'), - radius: 50, - child: Container( - alignment: Alignment.center, - width: 180, - height: 50, - child: Text(_info), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_de_DE.json deleted file mode 100644 index 37aa2970d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "Eingabedekor", - "info": "Eine Dekoration, die die Eingabe umhüllt, ist eine der Kernkomponenten von TextField und wird normalerweise nicht alleine verwendet.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von InputDecorator", - "desc": [ - "【decoration】: Dekorationsobjekt 【InputDecoration】", - "【textAlign】: Textausrichtung 【TextAlign】", - "【child】: Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_en_US.json deleted file mode 100644 index b627a301a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "Input Decorator", - "info": "A decorator that wraps around the input, one of the core components of TextField, generally not used alone.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of InputDecorator", - "desc": [ - "【decoration】: Decoration object 【InputDecoration】", - "【textAlign】: Text alignment 【TextAlign】", - "【child】: Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_es_ES.json deleted file mode 100644 index e00e64b7e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "Decorador de entrada", - "info": "Un decorador que envuelve la entrada, es uno de los componentes centrales subyacentes de TextField, generalmente no se usa por separado.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de InputDecorator", - "desc": [ - "【decoration】 : Objeto de decoración 【InputDecoration】", - "【textAlign】 : Alineación del texto 【TextAlign】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_fr_FR.json deleted file mode 100644 index 389496841..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "Décorateur d'entrée", - "info": "Un décorateur qui enveloppe l'entrée, est l'un des composants de base de TextField, généralement pas utilisé seul.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'InputDecorator", - "desc": [ - "【decoration】 : Objet de décoration 【InputDecoration】", - "【textAlign】 : Alignement du texte 【TextAlign】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_it_IT.json deleted file mode 100644 index 34a56a088..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "Decorazione di Input", - "info": "Una decorazione che avvolge l'input all'esterno, è uno dei componenti principali di TextField, generalmente non utilizzato da solo.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di Base di InputDecorator", - "desc": [ - "【decoration】 : Oggetto di decorazione 【InputDecoration】", - "【textAlign】 : Allineamento del testo 【TextAlign】", - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ja_JP.json deleted file mode 100644 index 4e26de07a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "入力デコレータ", - "info": "入力の外側を包むデコレーションで、TextFieldのコアコンポーネントの一つです。通常は単独で使用しません。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InputDecoratorの基本使用", - "desc": [ - "【decoration】 : デコレーションオブジェクト 【InputDecoration】", - "【textAlign】 : テキストの配置 【TextAlign】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ko_KR.json deleted file mode 100644 index 94d452bf4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "입력 장식", - "info": "입력을 감싸는 외부 장식으로, TextField의 핵심 구성 요소 중 하나이며 일반적으로 단독으로 사용되지 않습니다.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InputDecorator 기본 사용", - "desc": [ - "【decoration】 : 장식 객체 【InputDecoration】", - "【textAlign】 : 텍스트 정렬 방식 【TextAlign】", - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_pt_PT.json deleted file mode 100644 index f5f0cfcff..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "Decoração de Entrada", - "info": "Decoração que envolve a entrada, é um dos componentes principais do TextField, geralmente não é usado sozinho.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do InputDecorator", - "desc": [ - "【decoration】 : Objeto de decoração 【InputDecoration】", - "【textAlign】 : Alinhamento do texto 【TextAlign】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ru_RU.json deleted file mode 100644 index ce8ef0995..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "Декоратор ввода", - "info": "Декоратор, оборачивающий ввод, является одним из основных компонентов TextField и обычно не используется отдельно.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование InputDecorator", - "desc": [ - "【decoration】 : Объект декорации 【InputDecoration】", - "【textAlign】 : Выравнивание текста 【TextAlign】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_zh-CN.json deleted file mode 100644 index 629ece4a0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "输入装饰", - "info": "在外层包裹输入的装饰,是TextField的底层核心组件之一,一般不单独使用。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InputDecorator基本使用", - "desc": [ - "【decoration】 : 装饰对象 【InputDecoration】", - "【textAlign】 : 文字对齐方式 【TextAlign】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/node1_base.dart deleted file mode 100644 index 8bac27f06..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/node1_base.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class InputDecoratorDemo extends StatelessWidget { - const InputDecoratorDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(8.0), - child: InputDecorator( - decoration: const InputDecoration(), - child: EditableText( - controller: TextEditingController(text:'hello'), - focusNode: FocusNode(), - style: const TextStyle(fontSize: 12,color: Colors.black), - cursorColor: Colors.blue, - backgroundCursorColor: Colors.orange, - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_de_DE.json deleted file mode 100644 index 90c0b174f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_de_DE.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "Interaktiver Viewer", - "info": "Kapselt hauptsächlich Gesteninteraktionen wie Verschieben und Zoomen, vereinfacht die Verwendung und ermöglicht die Angabe von Verschiebegrenzen, Zoomverhältnissen, Gestenerkennung usw.", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von InteractiveViewer", - "desc": [ - "【alignPanAxis】 : Entlang der Achse ziehen 【bool】", - "【boundaryMargin】 : Randabstand 【EdgeInsets】", - "【panEnabled】 : Verschiebung aktiviert 【bool】", - "【scaleEnabled】 : Skalierung aktiviert 【bool】", - "【maxScale】 : Maximale Vergrößerung 【double】", - "【minScale】 : Minimale Verkleinerung 【double】", - "【onInteractionEnd】 : Rückruf bei Interaktionsende 【GestureScaleEndCallback】", - "【onInteractionStart】 : Rückruf bei Interaktionsstart 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : Rückruf bei Interaktionsaktualisierung 【GestureScaleUpdateCallback】", - "【child】 : Cursorfarbe 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "Test der constrained-Eigenschaft", - "desc": [ - "【constrained】 : Eingeschränkt 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Verwendung des Transformationscontrollers", - "desc": [ - "【transformationController】 : Transformationscontroller 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_en_US.json deleted file mode 100644 index d02fcc098..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_en_US.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "Interactive Viewer", - "info": "Mainly encapsulates gesture interactions such as moving and zooming, simplifies usage, and allows specifying movement boundaries, zoom ratios, gesture monitoring, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of InteractiveViewer", - "desc": [ - "【alignPanAxis】: Drag along the axis 【bool】", - "【boundaryMargin】: Boundary margin 【EdgeInsets】", - "【panEnabled】: Whether panning is enabled 【bool】", - "【scaleEnabled】: Whether scaling is enabled 【bool】", - "【maxScale】: Maximum zoom scale 【double】", - "【minScale】: Minimum zoom scale 【double】", - "【onInteractionEnd】: Interaction end callback 【GestureScaleEndCallback】", - "【onInteractionStart】: Interaction start callback 【GestureScaleStartCallback】", - "【onInteractionUpdate】: Interaction update callback 【GestureScaleUpdateCallback】", - "【child】: Cursor color 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "Constrained Property Test", - "desc": [ - "【constrained】: Constrained 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Usage of Transformation Controller", - "desc": [ - "【transformationController】: Transformation controller 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_es_ES.json deleted file mode 100644 index 4c309f36c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_es_ES.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "Visor Interactivo", - "info": "Principalmente encapsula interacciones gestuales como mover y hacer zoom, simplificando su uso. Puede especificar límites de movimiento, proporciones de zoom, escucha de gestos, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de InteractiveViewer", - "desc": [ - "【alignPanAxis】 : Arrastrar a lo largo del eje 【bool】", - "【boundaryMargin】 : Margen del borde 【EdgeInsets】", - "【panEnabled】 : Si se puede desplazar 【bool】", - "【scaleEnabled】 : Si se puede hacer zoom 【bool】", - "【maxScale】 : Máximo aumento 【double】", - "【minScale】 : Mínima reducción 【double】", - "【onInteractionEnd】 : Callback al finalizar la interacción 【GestureScaleEndCallback】", - "【onInteractionStart】 : Callback al iniciar la interacción 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : Callback al actualizar la interacción 【GestureScaleUpdateCallback】", - "【child】 : Color del cursor 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "Prueba de la propiedad constrained", - "desc": [ - "【constrained】 : Restringido 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Uso del controlador de transformación", - "desc": [ - "【transformationController】 : Controlador de transformación 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_fr_FR.json deleted file mode 100644 index eb4de3052..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_fr_FR.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "Vue interactive", - "info": "Principalement pour encapsuler les interactions gestuelles telles que le déplacement et le zoom, simplifier l'utilisation, et permettre de spécifier les limites de déplacement, les ratios de zoom, l'écoute des gestes, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'InteractiveViewer", - "desc": [ - "【alignPanAxis】 : Glisser le long de l'axe 【bool】", - "【boundaryMargin】 : Marge de la limite 【EdgeInsets】", - "【panEnabled】 : Peut être déplacé 【bool】", - "【scaleEnabled】 : Peut être zoomé 【bool】", - "【maxScale】 : Facteur de zoom maximum 【double】", - "【minScale】 : Facteur de zoom minimum 【double】", - "【onInteractionEnd】 : Rappel de fin d'interaction 【GestureScaleEndCallback】", - "【onInteractionStart】 : Rappel de début d'interaction 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : Rappel de mise à jour d'interaction 【GestureScaleUpdateCallback】", - "【child】 : Couleur du curseur 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "Test de la propriété constrained", - "desc": [ - "【constrained】 : Contraint 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Utilisation du contrôleur de transformation", - "desc": [ - "【transformationController】 : Contrôleur de transformation 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_it_IT.json deleted file mode 100644 index b182913ef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_it_IT.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "Visualizzatore Interattivo", - "info": "Principalmente incapsula le interazioni gestuali come lo spostamento e lo zoom, semplificando l'uso, è possibile specificare i limiti di movimento, la scala di zoom, il monitoraggio dei gesti, ecc.", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di InteractiveViewer", - "desc": [ - "【alignPanAxis】 : Trascina lungo l'asse 【bool】", - "【boundaryMargin】 : Margine del bordo 【EdgeInsets】", - "【panEnabled】 : Se è possibile traslare 【bool】", - "【scaleEnabled】 : Se è possibile ridimensionare 【bool】", - "【maxScale】 : Fattore di ingrandimento massimo 【double】", - "【minScale】 : Fattore di riduzione minimo 【double】", - "【onInteractionEnd】 : Callback di fine interazione 【GestureScaleEndCallback】", - "【onInteractionStart】 : Callback di inizio interazione 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : Callback di aggiornamento interazione 【GestureScaleUpdateCallback】", - "【child】 : Colore del cursore 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "Test della proprietà constrained", - "desc": [ - "【constrained】 : Vincolato 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Uso del controller di trasformazione", - "desc": [ - "【transformationController】 : Controller di trasformazione 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ja_JP.json deleted file mode 100644 index 3028d848e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ja_JP.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "インタラクティブビュー", - "info": "主に移動、ズームなどのジェスチャー操作をカプセル化し、使用を簡素化します。移動の境界、ズーム比率、ジェスチャーリスナーなどを指定できます。", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InteractiveViewerの基本使用", - "desc": [ - "【alignPanAxis】 : 軸に沿ってドラッグ 【bool】", - "【boundaryMargin】 : 境界マージン 【EdgeInsets】", - "【panEnabled】 : 平行移動可能かどうか 【bool】", - "【scaleEnabled】 : ズーム可能かどうか 【bool】", - "【maxScale】 : 最大ズーム倍率 【double】", - "【minScale】 : 最小ズーム倍率 【double】", - "【onInteractionEnd】 : インタラクション終了コールバック 【GestureScaleEndCallback】", - "【onInteractionStart】 : インタラクション開始コールバック 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : インタラクション更新コールバック 【GestureScaleUpdateCallback】", - "【child】 : カーソルカラー 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "constrained属性のテスト", - "desc": [ - "【constrained】 : 制約付き 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "変換コントローラーの使用", - "desc": [ - "【transformationController】 : 変換コントローラー 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ko_KR.json deleted file mode 100644 index 76bf8581e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ko_KR.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "인터랙티브 뷰어", - "info": "주로 이동, 확대/축소 등의 제스처 인터랙션을 캡슐화하여 사용을 단순화하며, 이동 경계, 확대/축소 비율, 제스처 리스너 등을 지정할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InteractiveViewer 기본 사용", - "desc": [ - "【alignPanAxis】 : 축을 따라 드래그 【bool】", - "【boundaryMargin】 : 경계 여백 【EdgeInsets】", - "【panEnabled】 : 이동 가능 여부 【bool】", - "【scaleEnabled】 : 확대/축소 가능 여부 【bool】", - "【maxScale】 : 최대 확대 배율 【double】", - "【minScale】 : 최소 축소 배율 【double】", - "【onInteractionEnd】 : 인터랙션 종료 콜백 【GestureScaleEndCallback】", - "【onInteractionStart】 : 인터랙션 시작 콜백 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : 인터랙션 업데이트 콜백 【GestureScaleUpdateCallback】", - "【child】 : 커서 색상 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "constrained 속성 테스트", - "desc": [ - "【constrained】 : 제약이 있는 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "변환 컨트롤러 사용", - "desc": [ - "【transformationController】 : 변환 컨트롤러 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_pt_PT.json deleted file mode 100644 index be7b44f3e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_pt_PT.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "Visualizador Interativo", - "info": "Principalmente encapsula interações gestuais como movimento e zoom, simplificando o uso. Pode especificar limites de movimento, proporção de zoom, monitorização de gestos, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do InteractiveViewer", - "desc": [ - "【alignPanAxis】 : Arrastar ao longo do eixo 【bool】", - "【boundaryMargin】 : Margem da fronteira 【EdgeInsets】", - "【panEnabled】 : Se pode ser movido 【bool】", - "【scaleEnabled】 : Se pode ser ampliado 【bool】", - "【maxScale】 : Fator de ampliação máximo 【double】", - "【minScale】 : Fator de redução mínimo 【double】", - "【onInteractionEnd】 : Callback de fim de interação 【GestureScaleEndCallback】", - "【onInteractionStart】 : Callback de início de interação 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : Callback de atualização de interação 【GestureScaleUpdateCallback】", - "【child】 : Cor do cursor 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "Teste da Propriedade Constrained", - "desc": [ - "【constrained】 : Restrito 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Uso do Controlador de Transformação", - "desc": [ - "【transformationController】 : Controlador de transformação 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ru_RU.json deleted file mode 100644 index cf059b7b0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ru_RU.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "Интерактивное представление", - "info": "Основная цель - инкапсуляция жестов, таких как перемещение и масштабирование, упрощение использования, возможность указания границ перемещения, масштабирования, прослушивания жестов и т.д.", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование InteractiveViewer", - "desc": [ - "【alignPanAxis】 : Перетаскивание по оси 【bool】", - "【boundaryMargin】 : Отступ границы 【EdgeInsets】", - "【panEnabled】 : Возможность панорамирования 【bool】", - "【scaleEnabled】 : Возможность масштабирования 【bool】", - "【maxScale】 : Максимальный коэффициент увеличения 【double】", - "【minScale】 : Минимальный коэффициент уменьшения 【double】", - "【onInteractionEnd】 : Обратный вызов завершения взаимодействия 【GestureScaleEndCallback】", - "【onInteractionStart】 : Обратный вызов начала взаимодействия 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : Обратный вызов обновления взаимодействия 【GestureScaleUpdateCallback】", - "【child】 : Цвет курсора 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "Тестирование свойства constrained", - "desc": [ - "【constrained】 : Ограниченный 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Использование контроллера преобразования", - "desc": [ - "【transformationController】 : Контроллер преобразования 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_zh-CN.json deleted file mode 100644 index 13775de26..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_zh-CN.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "交互视图", - "info": "主要对移动、缩放等手势交互进行封装,简化使用,可指定移动边界、缩放比例、手势监听等。", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InteractiveViewer基本使用", - "desc": [ - "【alignPanAxis】 : 沿轴拖动 【bool】", - "【boundaryMargin】 : 边界边距 【EdgeInsets】", - "【panEnabled】 : 是否可平移 【bool】", - "【scaleEnabled】 : 是否可缩放 【bool】", - "【maxScale】 : 最大放大倍数 【double】", - "【minScale】 : 最小缩小倍数 【double】", - "【onInteractionEnd】 : 交互结束回调 【GestureScaleEndCallback】", - "【onInteractionStart】 : 交互开始回调 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : 交互更新回调 【GestureScaleUpdateCallback】", - "【child】 : 游标颜色 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "constrained属性测试", - "desc": [ - "【constrained】 : 受约束的 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "变换控制器的使用", - "desc": [ - "【transformationController】 : 变换控制器 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node1_base.dart deleted file mode 100644 index 1a2bb7955..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node1_base.dart +++ /dev/null @@ -1,41 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class InteractiveViewerDemo extends StatelessWidget { - const InteractiveViewerDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - height: 150, - color: Colors.grey.withAlpha(33), - child: InteractiveViewer( - boundaryMargin: const EdgeInsets.all(40.0), - maxScale: 2.5, - minScale: 0.3, - panEnabled: true, - scaleEnabled: true, - child: Image.asset('assets/images/caver.webp'), - onInteractionStart: _onInteractionStart, - onInteractionUpdate: _onInteractionUpdate, - onInteractionEnd: _onInteractionEnd, - ), - ); - } - - void _onInteractionStart(ScaleStartDetails details) { - print('onInteractionStart----' + details.toString()); - } - - void _onInteractionUpdate(ScaleUpdateDetails details) { - print('onInteractionUpdate----' + details.toString()); - } - - void _onInteractionEnd(ScaleEndDetails details) { - print('onInteractionEnd----' + details.toString()); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node2_constrained.dart b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node2_constrained.dart deleted file mode 100644 index 75c856055..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node2_constrained.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class InteractiveViewerDemo2 extends StatelessWidget { - const InteractiveViewerDemo2({Key? key}) : super(key: key); - - final List colors = const [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - - final List colors2 = const [ - Colors.yellow, - Colors.blue, - Colors.green, - Colors.red - ]; - - @override - Widget build(BuildContext context) { - int _rowCount = 20; - int _columnCount = 4; - - return SizedBox( - width: 300, - height: 200, - child: InteractiveViewer( - constrained: false, - scaleEnabled: false, - child: Table( - columnWidths: { - for (int column = 0; column < _columnCount; column += 1) - column: const FixedColumnWidth(150.0), - }, - children: buildRows(_rowCount, _columnCount), - ), - ), - ); - } - - List buildRows(int rowCount, int columnCount) { - return [ - for (int row = 0; row < rowCount; row += 1) - TableRow( - children: [ - for (int column = 0; column < columnCount; column += 1) - Container( - margin: const EdgeInsets.all(2), - height: 50, - alignment: Alignment.center, - color: _colorful(row, column), - child: Text( - '($row,$column)', - style: const TextStyle(fontSize: 20, color: Colors.white), - ), - ), - ], - ), - ]; - } - - Color _colorful(int row, int column) => - row % 2 == 0 ? colors[column] : colors2[column]; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node3_controller.dart b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node3_controller.dart deleted file mode 100644 index b6631fac6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node3_controller.dart +++ /dev/null @@ -1,146 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class InteractiveViewerDemo3 extends StatefulWidget { - const InteractiveViewerDemo3({Key? key}) : super(key: key); - - @override - _InteractiveViewerDemo3State createState() => _InteractiveViewerDemo3State(); -} - -class _InteractiveViewerDemo3State extends State - with SingleTickerProviderStateMixin { - final TransformationController _transformationController = - TransformationController(); - late Animation _animationReset; - late AnimationController _controllerReset; - - void _onAnimateReset() { - _transformationController.value = _animationReset.value; - if (!_controllerReset.isAnimating) { - _animationReset.removeListener(_onAnimateReset); - _controllerReset.reset(); - } - } - - void _animateResetInitialize() { - _controllerReset.reset(); - _animationReset = Matrix4Tween( - begin: _transformationController.value, - end: Matrix4.identity(), - ).animate(_controllerReset); - _animationReset.addListener(_onAnimateReset); - _controllerReset.forward(); - } - - void _animateResetStop() { - _controllerReset.stop(); - _animationReset.removeListener(_onAnimateReset); - _controllerReset.reset(); - } - - void _onInteractionStart(ScaleStartDetails details) { - if (_controllerReset.status == AnimationStatus.forward) { - _animateResetStop(); - } - } - - @override - void initState() { - super.initState(); - _controllerReset = AnimationController( - vsync: this, - duration: const Duration(milliseconds: 400), - ); - } - - @override - void dispose() { - _controllerReset.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Wrap( - direction: Axis.vertical, - spacing: 10, - crossAxisAlignment: WrapCrossAlignment.center, - alignment: WrapAlignment.center, - children: [ - Container( - height: 150, - color: Colors.grey.withAlpha(33), - child: InteractiveViewer( - boundaryMargin: const EdgeInsets.all(40), - transformationController: _transformationController, - minScale: 0.1, - maxScale: 1.8, - onInteractionStart: _onInteractionStart, - child: Image.asset('assets/images/caver.webp'), - ), - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - _buildButton(), - _buildButton2(), - _buildButton3(), - ], - ) - ], - ); - } - - Widget _buildButton() { - return MaterialButton( - child: const Icon( - Icons.refresh, - color: Colors.white, - ), - color: Colors.green, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - onPressed: _animateResetInitialize); - } - - final double _x = 0.0; - - Widget _buildButton2() { - return MaterialButton( - child: const Icon( - Icons.navigate_before, - color: Colors.white, - ), - color: Colors.green, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - onPressed: () { - var temp = _transformationController.value.clone(); - temp.translate(_x - 4); - _transformationController.value = temp; - }); - } - - Widget _buildButton3() { - return MaterialButton( - child: const Icon( - Icons.navigate_next, - color: Colors.white, - ), - color: Colors.green, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - onPressed: () { - var temp = _transformationController.value.clone(); - temp.translate(_x + 4); - _transformationController.value = temp; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_de_DE.json deleted file mode 100644 index dd140ea9d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "Tastatur-Listener", - "info": "Nachdem der Fokus erhalten wurde, wird über onKeyEvent das Tastaturereignis überwacht.", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Tastaturereignisse überwachen", - "desc": [ - "Im Beispiel erhält der Bereich durch Klicken den Fokus, und durch Drücken der Tastatur können die ausgelösten Ereignisse angezeigt werden.", - "【focusNode】 : Fokus 【FocusNode】", - "【autofocus】 : Automatischer Fokus 【bool】", - "【includeSemantics】 : Semantik einschließen 【bool】", - "【onKeyEvent】 : Tastaturrückrufereignis 【ValueChanged?】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_en_US.json deleted file mode 100644 index 7edfce716..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "Keyboard Listener", - "info": "After gaining focus, listen to keyboard key events through onKeyEvent.", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Listen to Keyboard Events", - "desc": [ - "In the example, click the area to gain focus, and then press the keyboard to see the event trigger information.", - "【focusNode】 : Focus 【FocusNode】", - "【autofocus】 : Whether to auto-focus 【bool】", - "【includeSemantics】 : Include semantics 【bool】", - "【onKeyEvent】 : Key callback event 【ValueChanged?】", - "【child】 : Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_es_ES.json deleted file mode 100644 index 4a4e92502..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "Escuchador de teclado", - "info": "Después de obtener el foco, escucha los eventos de teclado a través de onKeyEvent.", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Escuchar eventos de teclado", - "desc": [ - "En el ejemplo, al hacer clic en el área se obtiene el foco, y luego al presionar el teclado se pueden ver los mensajes de eventos activados.", - "【focusNode】 : Foco 【FocusNode】", - "【autofocus】 : Si se enfoca automáticamente 【bool】", - "【includeSemantics】 : Incluir semántica 【bool】", - "【onKeyEvent】 : Evento de devolución de llamada de tecla 【ValueChanged?】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_fr_FR.json deleted file mode 100644 index 02089c3c6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "Écouteur de clavier", - "info": "Après avoir obtenu le focus, écoute les événements de touche du clavier via onKeyEvent.", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Écouter les événements du clavier", - "desc": [ - "Dans l'exemple, cliquez sur la zone pour obtenir le focus, puis tapez sur le clavier pour voir les informations de déclenchement de l'événement.", - "【focusNode】 : Focus 【FocusNode】", - "【autofocus】 : Mise au point automatique 【bool】", - "【includeSemantics】 : Inclure la sémantique 【bool】", - "【onKeyEvent】 : Événement de rappel de touche 【ValueChanged?】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_it_IT.json deleted file mode 100644 index b8fa6f8fd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "Ascoltatore Tastiera", - "info": "Dopo aver ottenuto il focus, ascolta gli eventi dei tasti della tastiera tramite onKeyEvent.", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Ascolta Eventi Tastiera", - "desc": [ - "Nell'esempio, clicca sull'area per ottenere il focus, quindi premi un tasto per vedere le informazioni sull'evento attivato.", - "【focusNode】 : Focus 【FocusNode】", - "【autofocus】 : Autofocus 【bool】", - "【includeSemantics】 : Includi Semantica 【bool】", - "【onKeyEvent】 : Evento di Richiamata Tasto 【ValueChanged?】", - "【child】 : Componente Figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ja_JP.json deleted file mode 100644 index 3b3fe5431..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "キーボードリスナー", - "info": "フォーカスを取得した後、onKeyEventを通じてキーボードのキーイベントを監視します。", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "キーボードイベントの監視", - "desc": [ - "例では、領域をクリックしてフォーカスを取得し、キーボードを叩くとイベントのトリガー情報が表示されます。", - "【focusNode】 : フォーカス 【FocusNode】", - "【autofocus】 : 自動フォーカス 【bool】", - "【includeSemantics】 : セマンティクスを含む 【bool】", - "【onKeyEvent】 : キーコールバックイベント 【ValueChanged?】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ko_KR.json deleted file mode 100644 index b385c9172..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "키보드 리스너", - "info": "포커스를 얻은 후, onKeyEvent를 통해 키보드의 키 이벤트를 감지합니다.", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "키보드 이벤트 감지", - "desc": [ - "예제에서 영역을 클릭하여 포커스를 얻은 후, 키보드를 누르면 이벤트 트리거 정보를 볼 수 있습니다.", - "【focusNode】 : 포커스 【FocusNode】", - "【autofocus】 : 자동 포커스 여부 【bool】", - "【includeSemantics】 : 의미 포함 여부 【bool】", - "【onKeyEvent】 : 키 이벤트 콜백 【ValueChanged?】", - "【child】 : 하위 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_pt_PT.json deleted file mode 100644 index b063905cf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "Ouvinte de Teclado", - "info": "Após obter o foco, monitora os eventos de teclas através de onKeyEvent.", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Monitorar Eventos de Teclado", - "desc": [ - "No exemplo, clique na área para obter o foco e, em seguida, pressione as teclas para ver as informações de acionamento do evento.", - "【focusNode】 : Foco 【FocusNode】", - "【autofocus】 : Foco automático 【bool】", - "【includeSemantics】 : Incluir semântica 【bool】", - "【onKeyEvent】 : Evento de retorno de tecla 【ValueChanged?】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ru_RU.json deleted file mode 100644 index a64b76936..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "Слушатель клавиатуры", - "info": "После получения фокуса, прослушивает события нажатия клавиш через onKeyEvent.", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Прослушивание событий клавиатуры", - "desc": [ - "В примере область получает фокус при нажатии, затем при нажатии клавиш можно увидеть информацию о срабатывании события.", - "【focusNode】 : Фокус 【FocusNode】", - "【autofocus】 : Автоматический фокус 【bool】", - "【includeSemantics】 : Включать семантику 【bool】", - "【onKeyEvent】 : Событие обратного вызова нажатия клавиши 【ValueChanged?】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_zh-CN.json deleted file mode 100644 index 85ed93521..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "键盘监听器", - "info": "在获取焦点后, 通过 onKeyEvent 监听键盘的按键事件。 ", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "监听键盘事件", - "desc": [ - "案例中区域点击获取焦点,然后敲击键盘可以看到事件触发信息。", - "【focusNode】 : 焦点 【FocusNode】", - "【autofocus】 : 是否自动聚焦 【bool】", - "【includeSemantics】 : 包含语义 【bool】", - "【onKeyEvent】 : 按键回调事件 【ValueChanged?】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/node1.dart deleted file mode 100644 index 602cf0bee..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/node1.dart +++ /dev/null @@ -1,133 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -class KeyboardListenerDemo1 extends StatefulWidget { - const KeyboardListenerDemo1({super.key}); - - @override - State createState() => _KeyboardListenerDemo1State(); -} - -class _KeyboardListenerDemo1State extends State { - FocusNode focusNode = FocusNode(); - List events = []; - ScrollController _ctrl = ScrollController(); - - @override - void initState() { - focusNode.addListener(_onFocusChange); - super.initState(); - } - - @override - void dispose() { - focusNode.removeListener(_onFocusChange); - focusNode.dispose(); - - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Center( - child: TapRegion( - onTapInside: (_) { - focusNode.requestFocus(); - }, - onTapOutside: (_) { - focusNode.unfocus(); - }, - child: KeyboardListener( - autofocus: true, - focusNode: focusNode, - onKeyEvent: _onKeyEvent, - child: _buildDisplay(), - ), - ), - ); - } - - void _onKeyEvent(KeyEvent value) { - events.add(value); - setState(() {}); - _scrollToEnd(); - print('${value.runtimeType}:${value.logicalKey.keyLabel}'); - } - - void _onFocusChange() { - if (!focusNode.hasFocus) { - events.clear(); - } - setState(() {}); - } - - void _scrollToEnd() async { - if (_ctrl.hasClients) { - await Future.delayed(Duration(milliseconds: 200)); - _ctrl.animateTo(_ctrl.position.maxScrollExtent, - duration: Duration(milliseconds: 100), curve: Curves.ease); - } - } - - Widget _buildDisplay() { - Color color = focusNode.hasFocus ? Colors.blue : Colors.grey; - - return Container( - decoration: BoxDecoration(border: Border.all(color: color)), - width: 460, - padding: EdgeInsets.symmetric(horizontal: 12), - alignment: Alignment.center, - height: 60, - child: events.isNotEmpty - ? SizedBox( - width: 460, - height: 60, - child: ListView.builder( - controller: _ctrl, - itemCount: events.length, - scrollDirection: Axis.horizontal, - itemBuilder: (_, index) => KeyBoardBox( - event: events[index], - )), - ) - : Text( - focusNode.hasFocus ? '键盘输入点东西吧' : '点击我获取焦点', - style: TextStyle(color: color), - ), - ); - } -} - -class KeyBoardBox extends StatelessWidget { - final KeyEvent event; - - const KeyBoardBox({super.key, required this.event}); - - @override - Widget build(BuildContext context) { - Color? color; - if (event is KeyDownEvent) { - color = Colors.blue; - } - if (event is KeyRepeatEvent) { - color = Colors.green; - } - if (event is KeyUpEvent) { - color = Colors.grey; - } - return Center( - child: Container( - margin: EdgeInsets.only(right: 4), - width: 32, - height: 32, - decoration: BoxDecoration(color: color), - alignment: Alignment.center, - child: Text( - event.logicalKey.keyLabel, - textAlign: TextAlign.center, - style: TextStyle(color: Colors.white, fontSize: 8, height: 1), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_de_DE.json deleted file mode 100644 index f002e2948..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "Lizenzseite", - "info": "Die Lizenzseite der Anwendung, auf der Anwendungssymbol, Anwendungsname, Anwendungsversionsnummer usw. angegeben werden können, der Rest wird automatisch von Flutter generiert.", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung der LicensePage", - "desc": [ - "【applicationIcon】 : Symbol oben links 【Widget】", - "【applicationVersion】 : Versionsnummer 【String】", - "【applicationName】 : Anwendungsname 【String】", - "【applicationLegalese】 : Rechtliche Hinweise der Anwendung 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_en_US.json deleted file mode 100644 index 7eb9f3d3c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "License Page", - "info": "The license page of the application, where you can specify information such as the application icon, application name, application version number, etc. Other details are automatically generated by Flutter.", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of LicensePage", - "desc": [ - "【applicationIcon】: Top-left icon 【Widget】", - "【applicationVersion】: Version number 【String】", - "【applicationName】: Application name 【String】", - "【applicationLegalese】: Application legalese 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_es_ES.json deleted file mode 100644 index eedee8dea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "Página de Licencia", - "info": "La página de licencia de la aplicación, donde se pueden especificar el icono de la aplicación, el nombre de la aplicación, el número de versión, etc., el resto es generado automáticamente por Flutter.", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de LicensePage", - "desc": [ - "【applicationIcon】 : Icono en la esquina superior izquierda 【Widget】", - "【applicationVersion】 : Número de versión 【String】", - "【applicationName】 : Nombre de la aplicación 【String】", - "【applicationLegalese】 : Aspectos legales de la aplicación 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_fr_FR.json deleted file mode 100644 index 47101fb52..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "Page de licence", - "info": "Page de licence de l'application, permettant de spécifier l'icône de l'application, le nom de l'application, le numéro de version, etc. Le reste est généré automatiquement par Flutter.", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de LicensePage", - "desc": [ - "【applicationIcon】 : Icône en haut à gauche 【Widget】", - "【applicationVersion】 : Numéro de version 【String】", - "【applicationName】 : Nom de l'application 【String】", - "【applicationLegalese】 : Législation de l'application 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_it_IT.json deleted file mode 100644 index e0c737bbb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "Pagina della Licenza", - "info": "Pagina della licenza dell'applicazione, dove è possibile specificare l'icona dell'applicazione, il nome dell'applicazione, il numero di versione dell'applicazione, ecc., il resto è generato automaticamente da Flutter.", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di LicensePage", - "desc": [ - "【applicationIcon】 : Icona in alto a sinistra 【Widget】", - "【applicationVersion】 : Numero di versione 【String】", - "【applicationName】 : Nome dell'applicazione 【String】", - "【applicationLegalese】 : Legale dell'applicazione 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ja_JP.json deleted file mode 100644 index 16e66bc6a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "ライセンスページ", - "info": "アプリのライセンスページ。アプリのアイコン、アプリ名、アプリのバージョン番号などを指定できます。その他はFlutterによって自動生成されます。", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LicensePageの基本的な使用法", - "desc": [ - "【applicationIcon】 : 左上のアイコン 【Widget】", - "【applicationVersion】 : バージョン番号 【String】", - "【applicationName】 : アプリ名 【String】", - "【applicationLegalese】 : アプリの法律文 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ko_KR.json deleted file mode 100644 index 1fb4a7426..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "라이센스 페이지", - "info": "앱의 라이센스 페이지, 앱 아이콘, 앱 이름, 앱 버전 번호 등을 지정할 수 있으며, 나머지는 Flutter에서 자동으로 생성됩니다.", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LicensePage 기본 사용", - "desc": [ - "【applicationIcon】 : 왼쪽 상단 아이콘 【Widget】", - "【applicationVersion】 : 버전 번호 【String】", - "【applicationName】 : 앱 이름 【String】", - "【applicationLegalese】 : 앱 법률 문구 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_pt_PT.json deleted file mode 100644 index fcdce6a90..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "Página de Licença", - "info": "Página de licença da aplicação, onde pode especificar o ícone da aplicação, o nome da aplicação, o número da versão da aplicação, entre outras informações, geradas automaticamente pelo Flutter.", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico da LicensePage", - "desc": [ - "【applicationIcon】 : Ícone no canto superior esquerdo 【Widget】", - "【applicationVersion】 : Número da versão 【String】", - "【applicationName】 : Nome da aplicação 【String】", - "【applicationLegalese】 : Legalidade da aplicação 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ru_RU.json deleted file mode 100644 index 069c22b45..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "Страница лицензии", - "info": "Страница лицензии приложения, где можно указать значок приложения, имя приложения, версию приложения и другую информацию, остальное автоматически генерируется Flutter.", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование LicensePage", - "desc": [ - "【applicationIcon】 : Иконка в верхнем левом углу 【Widget】", - "【applicationVersion】 : Версия 【String】", - "【applicationName】 : Имя приложения 【String】", - "【applicationLegalese】 : Юридическая информация приложения 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_zh-CN.json deleted file mode 100644 index 56434b383..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "证书页", - "info": "应用的证书页,可指定应用图标、应用名、应用版本号等信息,其他由Flutter自动生成。", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LicensePage基本使用", - "desc": [ - "【applicationIcon】 : 左上图标 【Widget】", - "【applicationVersion】 : 版本号 【String】", - "【applicationName】 : 应用名 【String】", - "【applicationLegalese】 : 应用律术 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/node1_base.dart deleted file mode 100644 index 90c27cc41..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/node1_base.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomLicensePage extends StatelessWidget { - const CustomLicensePage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: 400, - child: const LicensePage( - applicationIcon: FlutterLogo(), - applicationVersion: 'v0.0.1', - applicationName: 'Flutter Unit', - applicationLegalese: 'Copyright© 2018-2024 张风捷特烈', - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_de_DE.json deleted file mode 100644 index be736cf93..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "Horizontaler Fortschritt", - "info": "Eine lineare Fortschrittsanzeige, bei der Eigenschaften wie Farbe und Fortschritt angegeben werden können. Wenn der Wert null ist, dreht sie sich ununterbrochen.", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von LinearProgressIndicator", - "desc": [ - "【value】 : Fortschritt 【double】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【valueColor】 : Fortschrittsfarbe 【Animation】", - " Wenn der Wert null ist, wird er kontinuierlich wiederholt" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_en_US.json deleted file mode 100644 index a8b734250..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "Horizontal Progress", - "info": "A linear progress display that can specify properties such as color and progress. It will keep spinning when the value is null.", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of LinearProgressIndicator", - "desc": [ - "【value】: Progress 【double】", - "【backgroundColor】: Background Color 【Color】", - "【valueColor】: Progress Color 【Animation】", - " It will keep looping when the value is null" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_es_ES.json deleted file mode 100644 index b1dc370c8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "Progreso horizontal", - "info": "Indicador de progreso lineal, se pueden especificar propiedades como el color, el progreso, etc. Si el valor es nulo, girará continuamente.", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de LinearProgressIndicator", - "desc": [ - "【value】 : Progreso 【double】", - "【backgroundColor】 : Color de fondo 【Color】", - "【valueColor】 : Color del progreso 【Animation】", - " Si el valor es nulo, girará continuamente" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_fr_FR.json deleted file mode 100644 index 931656eac..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "Progression horizontale", - "info": "Affichage de progression linéaire, peut spécifier des propriétés telles que la couleur, la progression, etc. Tourne en continu lorsque la valeur est nulle.", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de LinearProgressIndicator", - "desc": [ - "【value】 : Progression 【double】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【valueColor】 : Couleur de progression 【Animation】", - " Tourne en continu lorsque la valeur est nulle" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_it_IT.json deleted file mode 100644 index 49eb97e2a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "Progresso Orizzontale", - "info": "Visualizzazione del progresso in linea retta, è possibile specificare attributi come colore e progresso. Quando il valore è null, continua a ruotare.", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di LinearProgressIndicator", - "desc": [ - "【value】 : Progresso 【double】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【valueColor】 : Colore del progresso 【Animation】", - " Quando il valore è null, continua a ciclare" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ja_JP.json deleted file mode 100644 index 18b7db38d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "水平プログレス", - "info": "直線型の進捗表示で、色や進捗などの属性を指定できます。valueがnullの場合は回転し続けます。", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LinearProgressIndicatorの基本使用", - "desc": [ - "【value】 : 進捗 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【valueColor】 : 進捗色 【Animation】", - " valueがnullの場合はループし続けます" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ko_KR.json deleted file mode 100644 index 51efe73c6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "수평 진행률", - "info": "직선형 진행률 표시, 색상, 진행률 등 속성을 지정할 수 있습니다. value가 null일 경우 계속 회전합니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LinearProgressIndicator 기본 사용", - "desc": [ - "【value】 : 진행률 【double】", - "【backgroundColor】 : 배경색 【Color】", - "【valueColor】 : 진행률 색상 【Animation】", - " value가 null일 경우 계속 반복" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_pt_PT.json deleted file mode 100644 index bebd5b714..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "Progresso Horizontal", - "info": "Exibição de progresso em linha reta, pode especificar atributos como cor, progresso, etc. Quando o valor for null, ele girará continuamente.", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do LinearProgressIndicator", - "desc": [ - "【value】 : Progresso 【double】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【valueColor】 : Cor do progresso 【Animation】", - " Quando o valor for null, ele girará continuamente" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ru_RU.json deleted file mode 100644 index 8adec3c3f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "Горизонтальный прогресс", - "info": "Линейный индикатор прогресса, можно указать цвет, прогресс и другие свойства. Если значение value равно null, индикатор будет вращаться бесконечно.", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Базовое использование LinearProgressIndicator", - "desc": [ - "【value】 : Прогресс 【double】", - "【backgroundColor】 : Цвет фона 【Color】", - "【valueColor】 : Цвет прогресса 【Animation】", - " Если значение value равно null, индикатор будет вращаться бесконечно" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_zh-CN.json deleted file mode 100644 index 110a08782..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "水平进度", - "info": "直线型的进度显示,可指定颜色、进度等属性。value为null时会不停旋转。", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LinearProgressIndicator基本使用", - "desc": [ - "【value】 : 进度 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【valueColor】 : 进度颜色 【Animation】", - " value为null时会不停循环" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/node1_base.dart deleted file mode 100644 index c7d770f96..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/node1_base.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomLinearProgressIndicator extends StatefulWidget { - const CustomLinearProgressIndicator({Key? key}) : super(key: key); - - @override - _CustomLinearProgressIndicatorState createState() => - _CustomLinearProgressIndicatorState(); -} - -class _CustomLinearProgressIndicatorState - extends State { - List data = [0.2, 0.4, 0.6, 0.8, null]; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: data - .map((e) => SizedBox( - width: 50, - height: 3, - child:LinearProgressIndicator( - value: e, - backgroundColor: Colors.grey.withAlpha(33), - valueColor: const AlwaysStoppedAnimation(Colors.orange), - ), - )) - .toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_de_DE.json deleted file mode 100644 index 3f8c2dd18..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "Radliste", - "info": "Hochwertige zylindrische Scroll-Liste, äußerst raffiniert, ermöglicht die Angabe von Eigenschaften wie Höhe, Perspektive, Kompression usw. und empfängt Ereignisse bei der Auswahl während des Scrollens.", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ListWheelScrollView", - "desc": [ - "【children】 : Liste der Unterkomponenten 【List】", - "【perspective】 : Perspektive 【double】", - "【itemExtent】 : Höhe des Elements 【EdgeInsets】", - "【onSelectedItemChanged】 : Rückruf bei Auswahl 【ValueChanged 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_en_US.json deleted file mode 100644 index f9958d8d2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "Wheel List", - "info": "A high-end cylindrical sliding list, exquisitely designed, allowing you to specify properties such as item height, perspective, and extrusion, and receive selection events during scrolling.", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ListWheelScrollView", - "desc": [ - "【children】: List of child components 【List】", - "【perspective】: Perspective 【double】", - "【itemExtent】: Item height 【EdgeInsets】", - "【onSelectedItemChanged】: Selection callback 【ValueChanged】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_es_ES.json deleted file mode 100644 index 740eaf9ae..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "Lista de rueda de desplazamiento", - "info": "Una lista de desplazamiento cilíndrica de alta gama, muy ingeniosa, permite especificar propiedades como la altura del ítem, la perspectiva, la compresión, etc., y recibe eventos de selección al deslizar.", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ListWheelScrollView", - "desc": [ - "【children】 : Lista de componentes hijos 【List】", - "【perspective】 : Grado de perspectiva 【double】", - "【itemExtent】 : Altura del ítem 【EdgeInsets】", - "【onSelectedItemChanged】 : Callback de selección 【ValueChanged 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_fr_FR.json deleted file mode 100644 index db5f6631e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "Liste à roulette", - "info": "Une liste de défilement cylindrique haut de gamme, très ingénieuse, permettant de spécifier des propriétés telles que la hauteur des éléments, la perspective, la compression, etc., et recevant des événements de sélection lors du défilement.", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ListWheelScrollView", - "desc": [ - "【children】 : Liste des composants enfants 【List】", - "【perspective】 : Degré de perspective 【double】", - "【itemExtent】 : Hauteur de l'élément 【EdgeInsets】", - "【onSelectedItemChanged】 : Rappel de sélection 【ValueChanged】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_it_IT.json deleted file mode 100644 index 4ba379f00..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "Lista a rotella", - "info": "Una lista di scorrimento cilindrica di alto livello, molto raffinata, con la possibilità di specificare proprietà come l'altezza degli item, la prospettiva, la compressione, e di ricevere eventi di selezione durante lo scorrimento.", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ListWheelScrollView", - "desc": [ - "【children】 : Lista dei componenti figli 【List】", - "【perspective】 : Prospettiva 【double】", - "【itemExtent】 : Altezza dell'item 【EdgeInsets】", - "【onSelectedItemChanged】 : Callback di selezione 【ValueChanged 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ja_JP.json deleted file mode 100644 index 225fb0424..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "ホイールリスト", - "info": "高級感あふれる円柱状のスライドリストで、精巧な仕様です。アイテムの高さ、パースペクティブ、圧縮などの属性を指定でき、スライド時の選択イベントを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListWheelScrollViewの基本使用", - "desc": [ - "【children】 : 子コンポーネントリスト 【List】", - "【perspective】 : パースペクティブ 【double】", - "【itemExtent】 : アイテムの高さ 【EdgeInsets】", - "【onSelectedItemChanged】 : 選択コールバック 【ValueChanged 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ko_KR.json deleted file mode 100644 index 48a86a827..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "휠 리스트", - "info": "고급스러운 원통형 슬라이드 리스트, 정교함이 가득하며, 아이템 높이, 원근감, 압축 등 속성을 지정할 수 있고, 슬라이드 시 선택 이벤트를 받습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListWheelScrollView 기본 사용", - "desc": [ - "【children】 : 자식 위젯 리스트 【List】", - "【perspective】 : 원근감 【double】", - "【itemExtent】 : 아이템 높이 【EdgeInsets】", - "【onSelectedItemChanged】 : 선택 콜백 【ValueChanged 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_pt_PT.json deleted file mode 100644 index 7755454f7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "Lista de Rolagem de Roda", - "info": "Uma lista de rolagem cilíndrica de alta classe, cheia de sofisticação, permite especificar propriedades como altura do item, perspetiva, esmagamento, e recebe eventos de seleção durante a rolagem.", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ListWheelScrollView", - "desc": [ - "【children】 : Lista de componentes filhos 【List】", - "【perspective】 : Grau de perspetiva 【double】", - "【itemExtent】 : Altura do item 【EdgeInsets】", - "【onSelectedItemChanged】 : Callback de seleção 【ValueChanged 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ru_RU.json deleted file mode 100644 index 204c580c4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "Колесо списка", - "info": "Высококлассный цилиндрический список с прокруткой, изысканный и утонченный, позволяет задавать такие свойства, как высота элемента, перспектива, сжатие и т.д., принимает события выбора при прокрутке.", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ListWheelScrollView", - "desc": [ - "【children】 : Список дочерних компонентов 【List】", - "【perspective】 : Перспектива 【double】", - "【itemExtent】 : Высота элемента 【EdgeInsets】", - "【onSelectedItemChanged】 : Обратный вызов при выборе 【ValueChanged 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_zh-CN.json deleted file mode 100644 index 7b9117dc3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "滚轮列表", - "info": "高大上的柱面滑动列表,精妙十足,可指定item高度、透视、挤压等属性,接收滑动时选中事件。", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListWheelScrollView基本使用", - "desc": [ - "【children】 : 子组件列表 【List】", - "【perspective】 : 透视度 【double】", - "【itemExtent】 : item高 【EdgeInsets】", - "【onSelectedItemChanged】 : 选中回调 【ValueChanged 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/node1_base.dart deleted file mode 100644 index d3c253db7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/node1_base.dart +++ /dev/null @@ -1,80 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class CustomListWheelScrollView extends StatefulWidget { - const CustomListWheelScrollView({Key? key}) : super(key: key); - - @override - _CustomListWheelScrollViewState createState() => - _CustomListWheelScrollViewState(); -} - -class _CustomListWheelScrollViewState extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - Color _color = Colors.blue; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildCircle(), - SizedBox( - height: 150, - width: 300, - child: ListWheelScrollView( - perspective: 0.006, - itemExtent: 50, - onSelectedItemChanged: (index) { - print('onSelectedItemChanged:$index'); - setState(() => _color = data[index]); - }, - children: data.map((color) => _buildItem(color)).toList(), - ), - ), - ], - ); - } - - Widget _buildCircle() => Container( - margin: const EdgeInsets.only(bottom: 5), - width: 30, - height: 30, - decoration: BoxDecoration(color: _color, shape: BoxShape.circle), - ); - - Widget _buildItem(Color color) { - return Container( - key: ValueKey(color) , - alignment: Alignment.center, - height: 50, - color: color, - child: Text( - colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_de_DE.json deleted file mode 100644 index e76332fe8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "Internationalisierung", - "info": "Stellt internationalisierte Ressourcen für Teilbaumknoten bereit, basierend auf der Implementierung von InheritedWidget. MaterialApp integriert diese Komponente intern, deren locale- und delegates-Parameter letztendlich für diese Komponente verwendet werden.", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Aktuelle Sprache abrufen", - "desc": [ - "Mit Localizations.localeOf(context) können die Locale-Dateninformationen der nächstgelegenen übergeordneten Localizations-Komponente basierend auf dem Kontext abgerufen werden." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_en_US.json deleted file mode 100644 index 6836b4789..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "Internationalization", - "info": "Provides internationalization resources for subtree nodes, implemented with the underlying dependency on InheritedWidget. The MaterialApp internally integrates this component, and its locale and delegates parameters are ultimately used for this component.", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Get Current Language", - "desc": [ - "Through Localizations.localeOf(context), you can retrieve the Locale data information stored in the nearest upper-level Localizations component based on the context." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_es_ES.json deleted file mode 100644 index 60f1de634..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "Internacionalización", - "info": "Proporciona recursos de internacionalización para los nodos del subárbol, implementado en el fondo con InheritedWidget. MaterialApp ya integra este componente internamente, y sus parámetros locale y delegates se utilizan finalmente en este componente.", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Obtener el idioma actual", - "desc": [ - "A través de Localizations.localeOf(context) se puede obtener la información de Locale almacenada en el componente Localizations más cercano en el contexto." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_fr_FR.json deleted file mode 100644 index ede448266..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "Internationalisation", - "info": "Fournit des ressources d'internationalisation pour les nœuds de sous-arbre, implémenté en s'appuyant sur InheritedWidget. MaterialApp intègre déjà ce composant en interne, ses paramètres locale et delegates sont finalement utilisés pour ce composant.", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Obtenir la langue actuelle", - "desc": [ - "Avec Localizations.localeOf(context), vous pouvez obtenir les informations de Locale stockées dans le composant Localizations le plus proche en fonction du contexte." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_it_IT.json deleted file mode 100644 index 753b5da43..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "Internazionalizzazione", - "info": "Fornisce risorse di internazionalizzazione per i nodi del sottoalbero, implementato tramite InheritedWidget. Questo componente è già integrato all'interno di MaterialApp, e i parametri locale e delegates vengono utilizzati per questo componente.", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Ottieni la lingua corrente", - "desc": [ - "Utilizzando Localizations.localeOf(context), è possibile ottenere le informazioni di Locale memorizzate nel componente Localizations più vicino in base al contesto." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ja_JP.json deleted file mode 100644 index ab2dee74d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "国際化", - "info": "サブツリーノードに国際化リソースを提供し、内部では InheritedWidget に依存して実装されています。MaterialApp 内部ではこのコンポーネントが統合されており、その locale と delegates パラメータは最終的にこのコンポーネントに使用されます。", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "現在の言語を取得", - "desc": [ - "Localizations.localeOf(context) を使用して、コンテキストに基づいて最も近い上位の Localizations コンポーネントに保存されている Locale データ情報を取得できます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ko_KR.json deleted file mode 100644 index 046365c4d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "국제화", - "info": "하위 트리 노드에 국제화 리소스를 제공하며, 내부적으로 InheritedWidget에 의존하여 구현됩니다. MaterialApp 내부에 이 컴포넌트가 통합되어 있으며, locale 및 delegates 매개변수는 최종적으로 이 컴포넌트에 사용됩니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "현재 언어 가져오기", - "desc": [ - "Localizations.localeOf(context)를 통해 컨텍스트에서 가장 가까운 상위 Localizations 컴포넌트에 저장된 Locale 데이터 정보를 가져올 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_pt_PT.json deleted file mode 100644 index dc911f179..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "Internacionalização", - "info": "Fornece recursos de internacionalização para os nós da subárvore, dependendo da implementação do InheritedWidget. O MaterialApp já integra este componente internamente, e os parâmetros locale e delegates são usados ​​finalmente para este componente.", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Obter idioma atual", - "desc": [ - "Através de Localizations.localeOf(context), é possível obter as informações de Locale armazenadas no componente Localizations mais próximo com base no contexto." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ru_RU.json deleted file mode 100644 index 2f1d22dba..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "Интернационализация", - "info": "Предоставляет ресурсы интернационализации для поддеревьев, реализовано на основе InheritedWidget. MaterialApp уже интегрирует этот компонент, его параметры locale и delegates в конечном итоге используются этим компонентом.", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Получить текущий язык", - "desc": [ - "С помощью Localizations.localeOf(context) можно получить данные Locale, хранящиеся в ближайшем верхнем компоненте Localizations, на основе контекста." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_zh-CN.json deleted file mode 100644 index c61848f0e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "国际化", - "info": "为子树节点提供国际化资源,底层依赖 InheritedWidget 实现。 MaterialApp 内部已集成该组件,其 locale 和 delegates 参数最终用于该组件。", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "获取当前语言", - "desc": [ - "通过 Localizations.localeOf(context) 可以根据上下文获取最近上层的 Localizations 组件存储的 Locale 数据信息。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/node1.dart deleted file mode 100644 index 16c98c8c9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/node1.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:flutter/material.dart'; - -class LocalizationsDemo1 extends StatelessWidget { - const LocalizationsDemo1({super.key}); - - @override - Widget build(BuildContext context) { - Locale locale = Localizations.localeOf(context); - return Text('Locale: ${locale.toString()}'); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_de_DE.json deleted file mode 100644 index a20e742e0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_de_DE.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "Ziel ziehen", - "info": "Lassen Sie die Komponente bei langem Drücken auf der Oberfläche frei ziehen, und speichern Sie Daten eines generischen Typs T. Wird normalerweise in Kombination mit DragTarget verwendet, um den Zieheffekt zu erzielen.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LongPressDraggable mit DragTarget kombinieren", - "desc": [ - "【child】 : Kind 【Widget】", - "【feedback】 : Kind beim Ziehen 【Widget】", - "【axis】 : Achse ziehen 【Axis】", - "【data】 : Daten 【T】", - "【onDragStarted】 : Ziehen beginnen 【Function()】", - "【onDragEnd】 : Ziehen beenden 【Function(DraggableDetails)】", - "【onDragCompleted】 : Ziehen abgeschlossen 【Function()】", - "【onDraggableCanceled】 : Ziehen abbrechen 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_en_US.json deleted file mode 100644 index 7119db040..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_en_US.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "Drag Target", - "info": "Allows the component to be dragged anywhere on the interface when long-pressed, and can store data of a generic type T. It is usually used in combination with DragTarget to achieve the drag effect.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LongPressDraggable used with DragTarget", - "desc": [ - "【child】 : child 【Widget】", - "【feedback】 : child during drag 【Widget】", - "【axis】 : axis of drag 【Axis】", - "【data】 : data 【T】", - "【onDragStarted】 : start drag 【Function()】", - "【onDragEnd】 : end drag 【Function(DraggableDetails)】", - "【onDragCompleted】 : drag completed 【Function()】", - "【onDraggableCanceled】 : drag canceled 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_es_ES.json deleted file mode 100644 index b1d47365d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_es_ES.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "Objetivo de arrastre", - "info": "Permite que el componente se arrastre libremente en la interfaz cuando se mantiene presionado, y puede almacenar datos de un tipo genérico T. Generalmente se usa en combinación con DragTarget para completar el efecto de arrastre.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso combinado de LongPressDraggable y DragTarget", - "desc": [ - "【child】 : Hijo 【Widget】", - "【feedback】 : Hijo durante el arrastre 【Widget】", - "【axis】 : Eje de arrastre 【Axis】", - "【data】 : Datos 【T】", - "【onDragStarted】 : Inicio del arrastre 【Function()】", - "【onDragEnd】 : Fin del arrastre 【Function(DraggableDetails)】", - "【onDragCompleted】 : Arrastre completado 【Function()】", - "【onDraggableCanceled】 : Arrastre cancelado 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_fr_FR.json deleted file mode 100644 index 4a4e46ad9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_fr_FR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "Cible de glissement", - "info": "Permet à un composant d'être glissé n'importe où sur l'interface lorsqu'il est pressé longuement, peut contenir une donnée de type générique T. Généralement utilisé en combinaison avec DragTarget pour réaliser l'effet de glissement.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation conjointe de LongPressDraggable et DragTarget", - "desc": [ - "【child】 : Enfant 【Widget】", - "【feedback】 : Enfant pendant le glissement 【Widget】", - "【axis】 : Axe de glissement 【Axis】", - "【data】 : Données 【T】", - "【onDragStarted】 : Début du glissement 【Function()】", - "【onDragEnd】 : Fin du glissement 【Function(DraggableDetails)】", - "【onDragCompleted】 : Glissement terminé 【Function()】", - "【onDraggableCanceled】 : Glissement annulé 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_it_IT.json deleted file mode 100644 index a8a08abf9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_it_IT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "Obiettivo trascinabile", - "info": "Permette di trascinare il componente sull'interfaccia quando viene premuto a lungo, può contenere un dato di tipo generico T. Solitamente utilizzato in combinazione con DragTarget per completare l'effetto di trascinamento.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso combinato di LongPressDraggable e DragTarget", - "desc": [ - "【child】 : figlio 【Widget】", - "【feedback】 : figlio durante il trascinamento 【Widget】", - "【axis】 : asse di trascinamento 【Axis】", - "【data】 : dati 【T】", - "【onDragStarted】 : inizio trascinamento 【Function()】", - "【onDragEnd】 : fine trascinamento 【Function(DraggableDetails)】", - "【onDragCompleted】 : trascinamento completato 【Function()】", - "【onDraggableCanceled】 : trascinamento annullato 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ja_JP.json deleted file mode 100644 index facd28a22..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ja_JP.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "ドラッグターゲット", - "info": "長押しでコンポーネントをインターフェース上で自由にドラッグできるようにし、ジェネリック型Tのデータを格納できます。通常、DragTargetと組み合わせてドラッグ効果を実現します。", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LongPressDraggableとDragTargetの連携", - "desc": [ - "【child】 : 子 【Widget】", - "【feedback】 : ドラッグ時の子 【Widget】", - "【axis】 : ドラッグ軸 【Axis】", - "【data】 : データ 【T】", - "【onDragStarted】 : ドラッグ開始 【Function()】", - "【onDragEnd】 : ドラッグ終了 【Function(DraggableDetails)】", - "【onDragCompleted】 : ドラッグ完了 【Function()】", - "【onDraggableCanceled】 : ドラッグキャンセル 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ko_KR.json deleted file mode 100644 index 4294fc42e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ko_KR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "드래그 대상", - "info": "길게 누르면 컴포넌트를 화면에서 자유롭게 드래그할 수 있으며, 제네릭 T 타입의 데이터를 저장할 수 있습니다. 일반적으로 DragTarget과 조합하여 드래그 효과를 완성합니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LongPressDraggable과 DragTarget 함께 사용", - "desc": [ - "【child】 : 자식 【Widget】", - "【feedback】 : 드래그 시 자식 【Widget】", - "【axis】 : 드래그 축 【Axis】", - "【data】 : 데이터 【T】", - "【onDragStarted】 : 드래그 시작 【Function()】", - "【onDragEnd】 : 드래그 종료 【Function(DraggableDetails)】", - "【onDragCompleted】 : 드래그 완료 【Function()】", - "【onDraggableCanceled】 : 드래그 취소 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_pt_PT.json deleted file mode 100644 index 818aee013..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_pt_PT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "Alvo de Arrastar", - "info": "Permite que um componente seja arrastado livremente na interface quando pressionado por um longo tempo, podendo armazenar um dado do tipo genérico T. Geralmente usado em combinação com DragTarget para completar o efeito de arrastar.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Conjunto de LongPressDraggable e DragTarget", - "desc": [ - "【child】 : Filho 【Widget】", - "【feedback】 : Filho durante o arrasto 【Widget】", - "【axis】 : Eixo de arrasto 【Axis】", - "【data】 : Dados 【T】", - "【onDragStarted】 : Início do arrasto 【Function()】", - "【onDragEnd】 : Fim do arrasto 【Function(DraggableDetails)】", - "【onDragCompleted】 : Arrasto concluído 【Function()】", - "【onDraggableCanceled】 : Arrasto cancelado 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ru_RU.json deleted file mode 100644 index 611d49af9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ru_RU.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "Цель для перетаскивания", - "info": "Позволяет компоненту перетаскиваться по интерфейсу при длительном нажатии, может хранить данные типа T. Обычно используется в сочетании с DragTarget для достижения эффекта перетаскивания.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование LongPressDraggable с DragTarget", - "desc": [ - "【child】 : Дочерний элемент 【Widget】", - "【feedback】 : Дочерний элемент при перетаскивании 【Widget】", - "【axis】 : Ось перетаскивания 【Axis】", - "【data】 : Данные 【T】", - "【onDragStarted】 : Начало перетаскивания 【Function()】", - "【onDragEnd】 : Конец перетаскивания 【Function(DraggableDetails)】", - "【onDragCompleted】 : Перетаскивание завершено 【Function()】", - "【onDraggableCanceled】 : Перетаскивание отменено 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_zh-CN.json deleted file mode 100644 index 8f9210bab..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_zh-CN.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "拖拽目标", - "info": "长按时让组件在界面上任意拖拽,可存放一个泛型T的数据。通常和DragTarget组合使用,来完成拖拽效果。", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LongPressDraggable与DragTarget联用", - "desc": [ - "【child】 : 孩子 【Widget】", - "【feedback】 : 拖拽时的孩子 【Widget】", - "【axis】 : 拖动的轴 【Axis】", - "【data】 : 数据 【T】", - "【onDragStarted】 : 开始拖拽 【Function()】", - "【onDragEnd】 : 结束拖拽 【Function(DraggableDetails)】", - "【onDragCompleted】 : 拖拽完成 【Function()】", - "【onDraggableCanceled】 : 拖拽取消 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/node1_base.dart deleted file mode 100644 index c969744ab..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/node1_base.dart +++ /dev/null @@ -1,86 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class CustomLongPressDraggable extends StatefulWidget { - const CustomLongPressDraggable({Key? key}) : super(key: key); - - @override - _CustomLongPressDraggableState createState() => - _CustomLongPressDraggableState(); -} - -class _CustomLongPressDraggableState extends State { - Color _color = Colors.grey; - String _info = 'DragTarget'; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Wrap( - children: _buildColors(), - spacing: 10, - ), - const SizedBox(height: 20), - _buildDragTarget() - ], - ); - } - - final List colors = const [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green, - Colors.orange, - Colors.purple, - Colors.cyanAccent - ]; - - List _buildColors() => colors - .map( - (e) => LongPressDraggable( - onDragStarted: () => setState(() => _info = '开始拖拽'), - onDragEnd: (d) => setState(() => _info = '结束拖拽'), - onDragCompleted: () => _info = '拖拽完成', - onDraggableCanceled: (v, o) => _info = '拖拽取消', - child: Container( - width: 30, - height: 30, - alignment: Alignment.center, - child: Text( - colors.indexOf(e).toString(), - style: const TextStyle( - color: Colors.white, fontWeight: FontWeight.bold), - ), - decoration: BoxDecoration(color: e, shape: BoxShape.circle), - ), - data: e, - feedback: Container( - width: 25, - height: 25, - decoration: BoxDecoration(color: e, shape: BoxShape.circle), - )), - ) - .toList(); - - Widget _buildDragTarget() { - return DragTarget( - onAccept: (data) => setState(() { - _info='onAccept'; - _color = data; - }), - builder: (context, candidateData, rejectedData) => Container( - width: 150.0, - height: 50.0, - color: _color, - child: Center( - child: Text( - _info, - style: const TextStyle(color: Colors.white), - ), - ))); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_de_DE.json deleted file mode 100644 index c6036f689..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "Materialkomponente", - "info": "Der führende Vertreter von Material-Stil-Komponenten, das Herzstück. Kann Attribute wie Farbe, Schattentiefe, Typ, Schattenfarbe, Form usw. festlegen.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Material", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【type】 : Typ 【MaterialType】", - "【elevation】 : Schattentiefe 【double】", - "【shadowColor】 : Schattenfarbe 【Color】", - "【color】 : Farbe 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Shape-Attribut von Material", - "desc": [ - "【shape】 : Form 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_en_US.json deleted file mode 100644 index 13bbe4f29..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "Material Component", - "info": "The leader and core of Material style components. You can specify properties such as color, elevation, type, shadow color, shape, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Material", - "desc": [ - "【child】 : Child Component 【Widget】", - "【type】 : Type 【MaterialType】", - "【elevation】 : Elevation 【double】", - "【shadowColor】 : Shadow Color 【Color】", - "【color】 : Color 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Shape Property of Material", - "desc": [ - "【shape】 : Shape 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_es_ES.json deleted file mode 100644 index 06f9ae7f9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "Componente de Material", - "info": "El líder y núcleo espiritual de los componentes de estilo Material. Puede especificar atributos como color, profundidad de sombra, tipo, color de sombra, forma, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Material", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【type】 : Tipo 【MaterialType】", - "【elevation】 : Profundidad de sombra 【double】", - "【shadowColor】 : Color de sombra 【Color】", - "【color】 : Color 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Propiedad shape de Material", - "desc": [ - "【shape】 : Forma 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_fr_FR.json deleted file mode 100644 index b5694ce2e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "Composant Matériel", - "info": "Le leader des composants de style Material, l'âme centrale. Peut spécifier des attributs tels que la couleur, la profondeur de l'ombre, le type, la couleur de l'ombre, la forme, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Material", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【type】 : Type 【MaterialType】", - "【elevation】 : Profondeur de l'ombre 【double】", - "【shadowColor】 : Couleur de l'ombre 【Color】", - "【color】 : Couleur 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Attribut de forme de Material", - "desc": [ - "【shape】 : Forme 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_it_IT.json deleted file mode 100644 index 695b1f790..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "Componente Material", - "info": "Leader dei componenti in stile Material, cuore e anima. Puoi specificare attributi come colore, profondità dell'ombra, tipo, colore dell'ombra, forma, ecc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di Material", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【type】 : Tipo 【MaterialType】", - "【elevation】 : Profondità dell'ombra 【double】", - "【shadowColor】 : Colore dell'ombra 【Color】", - "【color】 : Colore 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Attributo shape di Material", - "desc": [ - "【shape】 : Forma 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ja_JP.json deleted file mode 100644 index 1e988e452..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "材料コンポーネント", - "info": "Materialスタイルコンポーネントのリーダー、コアとなる存在。色、影の深さ、タイプ、影の色、形状などの属性を指定できます。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Materialの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【type】 : タイプ 【MaterialType】", - "【elevation】 : 影の深さ 【double】", - "【shadowColor】 : 影の色 【Color】", - "【color】 : 色 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Materialのshape属性", - "desc": [ - "【shape】 : 形状 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ko_KR.json deleted file mode 100644 index 9b9337d4f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "재료 컴포넌트", - "info": "Material 스타일 컴포넌트의 선두주자, 핵심 요소. 색상, 그림자 깊이, 유형, 그림자 색상, 모양 등 속성을 지정할 수 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Material 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【type】 : 유형 【MaterialType】", - "【elevation】 : 그림자 깊이 【double】", - "【shadowColor】 : 그림자 색상 【Color】", - "【color】 : 색상 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Material의 shape 속성", - "desc": [ - "【shape】 : 모양 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_pt_PT.json deleted file mode 100644 index d4379be64..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "Componente de Material", - "info": "O líder e núcleo espiritual dos componentes de estilo Material. Pode especificar atributos como cor, profundidade de sombra, tipo, cor da sombra, forma, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Material", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【type】 : Tipo 【MaterialType】", - "【elevation】 : Profundidade de sombra 【double】", - "【shadowColor】 : Cor da sombra 【Color】", - "【color】 : Cor 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Propriedade shape do Material", - "desc": [ - "【shape】 : Forma 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ru_RU.json deleted file mode 100644 index c047f3f2f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "Компонент материала", - "info": "Лидер компонентов в стиле Material, ядро и душа. Можно указать такие атрибуты, как цвет, глубина тени, тип, цвет тени, форма и другие.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Material", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【type】 : Тип 【MaterialType】", - "【elevation】 : Глубина тени 【double】", - "【shadowColor】 : Цвет тени 【Color】", - "【color】 : Цвет 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Атрибут shape Material", - "desc": [ - "【shape】 : Форма 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_zh-CN.json deleted file mode 100644 index 9c232cab1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "材料组件", - "info": "Material风格组件的领军人物,灵魂核心。可指定颜色、影深、类型、阴影颜色、形状等属性。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Material基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【type】 : 类型 【MaterialType】", - "【elevation】 : 影深 【double】", - "【shadowColor】 : 阴影颜色 【Color】", - "【color】 : 颜色 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Material的shape属性", - "desc": [ - "【shape】 : 形状 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Material/node1_base.dart deleted file mode 100644 index 3dec9b671..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/node1_base.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class CustomMaterial extends StatelessWidget { - const CustomMaterial({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - runSpacing: 10, - children: MaterialType.values.map((e) => _buildMaterial(e)).toList()); - } - - Material _buildMaterial(MaterialType type) => Material( - shadowColor: Colors.blue, - type: type, - color: Colors.orange, - elevation: 3, - child: Container( - alignment: Alignment.center, - width: 100, - height: 60, - child: Text( - type.toString().split('.')[1], - style: const TextStyle(color: Colors.black), - ), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/node2_shape.dart b/modules/widget_system/widgets/lib/StatefulWidget/Material/node2_shape.dart deleted file mode 100644 index d31d3c2cb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/node2_shape.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class ShapeMaterial extends StatelessWidget { - const ShapeMaterial({Key? key}) : super(key: key); - - final Map shapeMap = const { - 'BorderDirectional': BorderDirectional( - top: BorderSide( - color: Colors.white, - ), - start: BorderSide(color: Colors.black, width: 15), - bottom: BorderSide( - color: Colors.white, - )), - 'Border': Border( - top: BorderSide(width: 5.0, color: Color(0xFFDFDFDF)), - left: BorderSide(width: 5.0, color: Color(0xFFDFDFDF)), - right: BorderSide(width: 5.0, color: Color(0xFF7F7F7F)), - bottom: BorderSide(width: 5.0, color: Color(0xFF7F7F7F)), - ), - 'Circle': CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - 'RoundedRectangleBorder': RoundedRectangleBorder( - side: BorderSide(width: 1.0, color: Colors.black), - borderRadius: BorderRadius.all(Radius.circular(15))), - 'ContinuousRectangleBorder': ContinuousRectangleBorder( - side: BorderSide.none, - borderRadius: BorderRadius.all(Radius.circular(40.0)), - ) - }; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - runSpacing: 10, - children: shapeMap.keys.map((e) => _buildMaterial(e)).toList(), - ); - } - - Material _buildMaterial(String type) => Material( - shadowColor: Colors.blue, - shape: shapeMap[type], - color: Colors.orange, - elevation: 3, - textStyle: const TextStyle(color: Colors.white), - child: Container( - alignment: Alignment.center, - width: 300, - height: 60, - child: Text( - type, - ), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_de_DE.json deleted file mode 100644 index 54c459134..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Material-Anwendung", - "info": "Die oberste Komponente der Material-Anwendung, enthält Eigenschaften wie Routengenerator, Thema, Sprache, Startseite usw.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von MaterialApp", - "desc": [ - "【theme】 : Thema 【ThemeData】", - "【title】 : Titel in der Taskleiste 【String】", - "【debugShowCheckedModeBanner】 : Badge aktivieren 【bool】", - "【showPerformanceOverlay】 : Leistungsüberlagerung aktivieren 【bool】", - "【debugShowMaterialGrid】 : Raster aktivieren 【bool】", - "【onGenerateRoute】 : Routengenerator 【RouteFactory】", - "【home】 : Startseite 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_en_US.json deleted file mode 100644 index 94a88732b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Material Application", - "info": "The top-level component of a Material application, including properties such as route generator, theme, language, home page, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of MaterialApp", - "desc": [ - "【theme】 : Theme 【ThemeData】", - "【title】 : Taskbar Title 【String】", - "【debugShowCheckedModeBanner】 : Enable Badge 【bool】", - "【showPerformanceOverlay】 : Enable Performance Overlay 【bool】", - "【debugShowMaterialGrid】 : Enable Grid 【bool】", - "【onGenerateRoute】 : Route Generator 【RouteFactory】", - "【home】 : Home Page 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_es_ES.json deleted file mode 100644 index b994d6c27..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Aplicación Material", - "info": "Componente de nivel superior de la aplicación Material, que incluye propiedades como el generador de rutas, tema, idioma, página de inicio, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de MaterialApp", - "desc": [ - "【theme】 : Tema 【ThemeData】", - "【title】 : Título de la barra de tareas 【String】", - "【debugShowCheckedModeBanner】 : Activar insignia 【bool】", - "【showPerformanceOverlay】 : Activar superposición de rendimiento 【bool】", - "【debugShowMaterialGrid】 : Activar cuadrícula 【bool】", - "【onGenerateRoute】 : Generador de rutas 【RouteFactory】", - "【home】 : Página de inicio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_fr_FR.json deleted file mode 100644 index dae6e1a30..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Application Material", - "info": "Le composant de niveau supérieur de l'application Material, incluant des propriétés telles que le générateur de routes, le thème, la langue, la page d'accueil, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de MaterialApp", - "desc": [ - "【theme】 : Thème 【ThemeData】", - "【title】 : Titre de la barre des tâches 【String】", - "【debugShowCheckedModeBanner】 : Activer le badge 【bool】", - "【showPerformanceOverlay】 : Activer la superposition de performance 【bool】", - "【debugShowMaterialGrid】 : Activer la grille 【bool】", - "【onGenerateRoute】 : Générateur de routes 【RouteFactory】", - "【home】 : Page d'accueil 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_it_IT.json deleted file mode 100644 index 0c824a8c8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Applicazione Material", - "info": "Componente di primo livello per applicazioni Material, include proprietà come generatore di route, tema, lingua, homepage, ecc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di MaterialApp", - "desc": [ - "【theme】 : Tema 【ThemeData】", - "【title】 : Titolo della barra delle applicazioni 【String】", - "【debugShowCheckedModeBanner】 : Attiva badge 【bool】", - "【showPerformanceOverlay】 : Attiva overlay delle prestazioni 【bool】", - "【debugShowMaterialGrid】 : Attiva griglia 【bool】", - "【onGenerateRoute】 : Generatore di route 【RouteFactory】", - "【home】 : Homepage 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ja_JP.json deleted file mode 100644 index 207e1de51..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Materialアプリ", - "info": "Materialアプリのトップレベルのコンポーネントで、ルートジェネレータ、テーマ、言語、ホームページなどの属性を含みます。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialAppの基本使い方", - "desc": [ - "【theme】 : テーマ 【ThemeData】", - "【title】 : タスクバーのタイトル 【String】", - "【debugShowCheckedModeBanner】 : バッジを表示する 【bool】", - "【showPerformanceOverlay】 : パフォーマンスオーバーレイを表示する 【bool】", - "【debugShowMaterialGrid】 : グリッドを表示する 【bool】", - "【onGenerateRoute】 : ルートジェネレータ 【RouteFactory】", - "【home】 : ホームページ 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ko_KR.json deleted file mode 100644 index 420abe91d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Material 앱", - "info": "Material 앱의 최상위 컴포넌트로, 라우트 생성기, 테마, 언어, 홈페이지 등의 속성을 포함합니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialApp 기본 사용법", - "desc": [ - "【theme】 : 테마 【ThemeData】", - "【title】 : 작업 표시줄 제목 【String】", - "【debugShowCheckedModeBanner】 : 배지 활성화 【bool】", - "【showPerformanceOverlay】 : 성능 오버레이 활성화 【bool】", - "【debugShowMaterialGrid】 : 그리드 활성화 【bool】", - "【onGenerateRoute】 : 라우트 생성기 【RouteFactory】", - "【home】 : 홈페이지 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_pt_PT.json deleted file mode 100644 index faa156503..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Aplicação Material", - "info": "Componente de topo da aplicação Material, que inclui gerador de rotas, tema, idioma, página inicial, entre outros atributos.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do MaterialApp", - "desc": [ - "【theme】 : Tema 【ThemeData】", - "【title】 : Título da barra de tarefas 【String】", - "【debugShowCheckedModeBanner】 : Ativar insígnia 【bool】", - "【showPerformanceOverlay】 : Ativar sobreposição de desempenho 【bool】", - "【debugShowMaterialGrid】 : Ativar grelha 【bool】", - "【onGenerateRoute】 : Gerador de rotas 【RouteFactory】", - "【home】 : Página inicial 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ru_RU.json deleted file mode 100644 index 43e5975c1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Material приложение", - "info": "Верхний компонент Material приложения, включающий генератор маршрутов, тему, язык, домашнюю страницу и другие атрибуты.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование MaterialApp", - "desc": [ - "【theme】 : Тема 【ThemeData】", - "【title】 : Заголовок в панели задач 【String】", - "【debugShowCheckedModeBanner】 : Включить значок 【bool】", - "【showPerformanceOverlay】 : Включить наложение производительности 【bool】", - "【debugShowMaterialGrid】 : Включить сетку 【bool】", - "【onGenerateRoute】 : Генератор маршрутов 【RouteFactory】", - "【home】 : Домашняя страница 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_zh-CN.json deleted file mode 100644 index 57ba7ea55..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Material应用", - "info": "Material应用的顶级组件,包含路由生成器、主题、语言、主页等属性。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialApp基本用法", - "desc": [ - "【theme】 : 主题 【ThemeData】", - "【title】 : 任务栏标题 【String】", - "【debugShowCheckedModeBanner】 : 开启角标 【bool】", - "【showPerformanceOverlay】 : 开启性能浮层 【bool】", - "【debugShowMaterialGrid】 : 开启网格 【bool】", - "【onGenerateRoute】 : 路由生成器 【RouteFactory】", - "【home】 : 主页 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/node1_base.dart deleted file mode 100644 index c7c61e555..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/node1_base.dart +++ /dev/null @@ -1,118 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-17 -/// contact me by email 1981462002@qq.com - -class MaterialAppDemo extends StatefulWidget { - const MaterialAppDemo({Key? key}) : super(key: key); - - @override - _WidgetsAppDemoState createState() => _WidgetsAppDemoState(); -} - -class _WidgetsAppDemoState extends State { - bool _debugShowCheckedModeBanner = false; - bool _showPerformanceOverlay = false; - bool _debugShowMaterialGrid = false; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - _buildSwitchers(), - SizedBox( - height: 250, - child: MaterialApp( - debugShowCheckedModeBanner: _debugShowCheckedModeBanner, - showPerformanceOverlay: _showPerformanceOverlay, - debugShowMaterialGrid: _debugShowMaterialGrid, - home: const HomePage(), - ), - ), - ], - ); - } - - Widget _buildSwitchers() { - return DefaultTextStyle( - style: const TextStyle(color: Colors.blue), - child: Wrap( - spacing: 10, - children: [ - Column( - children: [ - Switch( - value: _showPerformanceOverlay, - onChanged: (v) { - setState(() { - _showPerformanceOverlay = v; - }); - }, - ), - const Text('性能浮层') - ], - ), - Column( - children: [ - Switch( - value: _debugShowCheckedModeBanner, - onChanged: (v) { - setState(() { - _debugShowCheckedModeBanner = v; - }); - }, - ), - const Text('开启角标') - ], - ), - Column( - children: [ - Switch( - value: _debugShowMaterialGrid, - onChanged: (v) { - setState(() { - _debugShowMaterialGrid = v; - }); - }, - ), - const Text('开启网格') - ], - ) - ], - ), - ); - } -} - -class HomePage extends StatefulWidget { - const HomePage({Key? key}) : super(key: key); - - @override - _HomePageState createState() => _HomePageState(); -} - -class _HomePageState extends State { - var _count = 0; - - @override - Widget build(BuildContext context) { - return Scaffold( - body: Container( - alignment: const Alignment(0, 0.7), - child: Text( - '你点击了$_count次', - style: const TextStyle(fontSize: 18, color: Colors.blue), - ), - ), - floatingActionButton: FloatingActionButton( - child: const Icon(Icons.add), - onPressed: () { - setState(() { - _count++; - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_de_DE.json deleted file mode 100644 index c6265925a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "Kombinierbares Material", - "info": "Wird verwendet, um eine Liste von MergeableMaterialItem anzuzeigen, einschließlich MaterialSlice (Hauptteil) und MaterialGap (Trennlinie).", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von MergeableMaterial", - "desc": [ - "【elevation】 : Schattentiefe 【double】", - "【hasDividers】 : Gibt es Trennlinien 【bool】", - "【dividerColor】 : Farbe der Trennlinie 【Color】", - "【mainAxis】 : Achse 【Axis】", - "【children】 : Sammlung von Unterkomponenten 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_en_US.json deleted file mode 100644 index 8c6e9e0e2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "Mergeable Material", - "info": "Used to display a list of MergeableMaterialItem, including MaterialSlice (main body) and MaterialGap (separator).", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of MergeableMaterial", - "desc": [ - "【elevation】 : Shadow depth 【double】", - "【hasDividers】 : Whether there are dividers 【bool】", - "【dividerColor】 : Divider color 【Color】", - "【mainAxis】 : Axis direction 【Axis】", - "【children】 : Child components collection 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_es_ES.json deleted file mode 100644 index 871630a11..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "Material Fusionable", - "info": "Utilizado para mostrar una lista de MergeableMaterialItem, incluyendo MaterialSlice (cuerpo) y MaterialGap (separador).", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de MergeableMaterial", - "desc": [ - "【elevation】 : Profundidad de la sombra 【double】", - "【hasDividers】 : Si tiene líneas divisorias 【bool】", - "【dividerColor】 : Color de la línea divisoria 【Color】", - "【mainAxis】 : Eje principal 【Axis】", - "【children】 : Conjunto de componentes hijos 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_fr_FR.json deleted file mode 100644 index 005e06aea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "Matériau Fusionnable", - "info": "Utilisé pour afficher une liste de MergeableMaterialItem, comprenant MaterialSlice (corps principal) et MaterialGap (séparateur).", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de MergeableMaterial", - "desc": [ - "【elevation】 : Profondeur d'ombre 【double】", - "【hasDividers】 : Présence de lignes de séparation 【bool】", - "【dividerColor】 : Couleur de la ligne de séparation 【Color】", - "【mainAxis】 : Axe principal 【Axis】", - "【children】 : Ensemble de composants enfants 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_it_IT.json deleted file mode 100644 index 32e9b9d1d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "Materiale Unificabile", - "info": "Utilizzato per visualizzare una lista di MergeableMaterialItem, inclusi MaterialSlice (corpo) e MaterialGap (separazione).", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di MergeableMaterial", - "desc": [ - "【elevation】 : Profondità dell'ombra 【double】", - "【hasDividers】 : Presenza di linee divisorie 【bool】", - "【dividerColor】 : Colore della linea divisoria 【Color】", - "【mainAxis】 : Asse principale 【Axis】", - "【children】 : Insieme di componenti figli 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ja_JP.json deleted file mode 100644 index d62c71e38..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "マージ可能な材料", - "info": "MergeableMaterialItemのリストを表示するために使用され、MaterialSlice(本体)とMaterialGap(区切り)を含みます。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MergeableMaterialの基本使用", - "desc": [ - "【elevation】 : 影の深さ 【double】", - "【hasDividers】 : 区切り線があるかどうか 【bool】", - "【dividerColor】 : 区切り線の色 【Color】", - "【mainAxis】 : 軸方向 【Axis】", - "【children】 : 子コンポーネントセット 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ko_KR.json deleted file mode 100644 index 3a511350e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "병합 가능한 재료", - "info": "MergeableMaterialItem의 목록을 표시하는 데 사용되며, MaterialSlice(본체)와 MaterialGap(구분자)를 포함합니다.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MergeableMaterial 기본 사용법", - "desc": [ - "【elevation】 : 그림자 깊이 【double】", - "【hasDividers】 : 구분선 여부 【bool】", - "【dividerColor】 : 구분선 색상 【Color】", - "【mainAxis】 : 축 방향 【Axis】", - "【children】 : 하위 컴포넌트 집합 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_pt_PT.json deleted file mode 100644 index a0f50e44d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "Material Fundível", - "info": "Usado para exibir uma lista de MergeableMaterialItem, incluindo MaterialSlice (corpo) e MaterialGap (separador).", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do MergeableMaterial", - "desc": [ - "【elevation】 : Profundidade da sombra 【double】", - "【hasDividers】 : Se tem linhas divisórias 【bool】", - "【dividerColor】 : Cor da linha divisória 【Color】", - "【mainAxis】 : Eixo 【Axis】", - "【children】 : Conjunto de componentes filhos 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ru_RU.json deleted file mode 100644 index 6190e65dd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "Объединяемый материал", - "info": "Используется для отображения списка MergeableMaterialItem, включая MaterialSlice (основная часть) и MaterialGap (разделитель).", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование MergeableMaterial", - "desc": [ - "【elevation】 : Глубина тени 【double】", - "【hasDividers】 : Наличие разделителей 【bool】", - "【dividerColor】 : Цвет разделителя 【Color】", - "【mainAxis】 : Ось 【Axis】", - "【children】 : Набор дочерних компонентов 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_zh-CN.json deleted file mode 100644 index 67f725fee..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "可合并材料", - "info": "用于展示 MergeableMaterialItem 的列表,包括 MaterialSlice(主体) 和 MaterialGap(分隔) 。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MergeableMaterial基本使用", - "desc": [ - "【elevation】 : 影深 【double】", - "【hasDividers】 : 是否有分隔线 【bool】", - "【dividerColor】 : 分隔线颜色 【Color】", - "【mainAxis】 : 轴向 【Axis】", - "【children】 : 子组件集 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/node1_base.dart deleted file mode 100644 index 8c51e0757..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/node1_base.dart +++ /dev/null @@ -1,72 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class MergeableMaterialDemo extends StatefulWidget { - const MergeableMaterialDemo({Key? key}) : super(key: key); - - @override - _MergeableMaterialDemoState createState() => _MergeableMaterialDemoState(); -} - -class _MergeableMaterialDemoState extends State { - List items=[]; - - @override - void initState() { - super.initState(); - _init(20); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: SingleChildScrollView( - child: MergeableMaterial( - elevation: 1, - hasDividers: true, - dividerColor: Colors.red, - children: items, - ), - ), - ); - } - - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]! - ]; - - void _init(int count) { - for (int i = 0; i < count; i++) { - items.add(MaterialSlice( - key: ValueKey(i), - child: Container( - alignment: Alignment.center, - height: 60, - color: data[i % data.length], - child: Text(colorString(data[i % data.length])), - ))); - if(i!=count-1){ - items.add(MaterialGap( - key: ValueKey(i), - size: 5)); - } - } - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_de_DE.json deleted file mode 100644 index a98eb3c6c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_de_DE.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "Monatsauswahl", - "info": "Komponente zur Auswahl eines Monats mit integrierter Überwachung für den Wechsel zwischen den Monaten. Ermöglicht die Angabe des auszuwählenden Datumsbereichs, des ausgewählten Datums usw. und empfängt Ereignisse bei der Datumsauswahl.", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von MonthPicker", - "desc": [ - "【selectedDate】 : Ausgewähltes Datum 【DateTime】", - "【firstDate】 : Frühestes Datum 【DateTime】", - "【lastDate】 : Spätestes Datum 【DateTime】", - "【onChanged】 : Rückruf bei Klick 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker, die Monatsauswahl, wurde mit Flutter 3.0 aus dem Verkehr gezogen. Der Ersatz ist der CalendarDatePicker, der Kalenderauswahl.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_en_US.json deleted file mode 100644 index ef72e4a6d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_en_US.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "Month Picker", - "info": "A component for selecting months, with built-in listeners for switching between previous and next months. Allows specifying the date range, selected date, and receives date selection events.", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of MonthPicker", - "desc": [ - "【selectedDate】: Selected date 【DateTime】", - "【firstDate】: Earliest date limit 【DateTime】", - "【lastDate】: Latest date limit 【DateTime】", - "【onChanged】: Click callback 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker, the month selector, has been phased out in Flutter 3.0. It is replaced by the CalendarDatePicker, the calendar selector.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_es_ES.json deleted file mode 100644 index 0c2e6c0e8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_es_ES.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "Selector de Mes", - "info": "Componente de selección de mes con escucha incorporada para cambiar entre meses. Permite especificar rangos de fechas seleccionables, fechas seleccionadas, y recibe eventos de selección de fecha.", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de MonthPicker", - "desc": [ - "【selectedDate】 : Fecha seleccionada 【DateTime】", - "【firstDate】 : Límite de la primera fecha 【DateTime】", - "【lastDate】 : Límite de la última fecha 【DateTime】", - "【onChanged】 : Callback al hacer clic 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker, el selector de mes, dejó de usarse en Flutter 3.0. Fue reemplazado por CalendarDatePicker, el selector de calendario.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_fr_FR.json deleted file mode 100644 index 02ed61229..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_fr_FR.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "Sélecteur de mois", - "info": "Composant de sélection de mois avec écouteur intégré pour passer au mois précédent ou suivant. Peut spécifier la plage de dates sélectionnables, la date sélectionnée, etc., et reçoit les événements de sélection de date.", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de MonthPicker", - "desc": [ - "【selectedDate】 : Date sélectionnée 【DateTime】", - "【firstDate】 : Limite de la première date 【DateTime】", - "【lastDate】 : Limite de la dernière date 【DateTime】", - "【onChanged】 : Rappel au clic 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker, le sélecteur de mois, a quitté la scène historique avec Flutter 3.0. Il est remplacé par CalendarDatePicker, le sélecteur de calendrier.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_it_IT.json deleted file mode 100644 index c5d648dce..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_it_IT.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "Selettore del mese", - "info": "Componente di selezione del mese, con monitoraggio integrato per il passaggio al mese precedente o successivo. È possibile specificare l'intervallo di date selezionabile, la data selezionata, ecc., e ricevere eventi di selezione della data.", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di MonthPicker", - "desc": [ - "【selectedDate】 : Data selezionata 【DateTime】", - "【firstDate】 : Limite della data più recente 【DateTime】", - "【lastDate】 : Limite della data più lontana 【DateTime】", - "【onChanged】 : Callback al click 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker, il selettore del mese, è stato ritirato in Flutter 3.0. Il suo sostituto è il CalendarDatePicker, il selettore del calendario.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ja_JP.json deleted file mode 100644 index 46d812124..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ja_JP.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "月選択器", - "info": "月の選択コンポーネントで、前後の月への切り替えを監視します。選択可能な日付範囲や選択された日付を指定でき、日付選択イベントを受け取ります。", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MonthPickerの基本使用", - "desc": [ - "【selectedDate】 : 選択された日付 【DateTime】", - "【firstDate】 : 最初の日付制限 【DateTime】", - "【lastDate】 : 最後の日付制限 【DateTime】", - "【onChanged】 : クリックコールバック 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker 月選択器は Flutter3.0 で歴史の舞台から退場しました。代替として CalendarDatePicker カレンダー選択器が登場しました。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ko_KR.json deleted file mode 100644 index 9299152b3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ko_KR.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "월 선택기", - "info": "월을 선택하는 컴포넌트로, 상하월 전환을 자동으로 감지합니다. 선택 가능한 날짜 범위, 선택된 날짜 등을 지정할 수 있으며, 날짜 선택 이벤트를 수신합니다.", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MonthPicker 기본 사용법", - "desc": [ - "【selectedDate】 : 선택된 날짜 【DateTime】", - "【firstDate】 : 최초 날짜 제한 【DateTime】", - "【lastDate】 : 마지막 날짜 제한 【DateTime】", - "【onChanged】 : 클릭 콜백 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker 월 선택기는 Flutter3.0에서 역사 속으로 사라졌습니다. 이를 대체하는 것은 CalendarDatePicker 달력 선택기입니다.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_pt_PT.json deleted file mode 100644 index 0ff589c00..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_pt_PT.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "Seletor de Mês", - "info": "Componente de seleção de mês, com monitoramento integrado para mudança de mês. Pode especificar o intervalo de datas selecionado, a data selecionada, etc., e recebe eventos de seleção de data.", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do MonthPicker", - "desc": [ - "【selectedDate】 : Data selecionada 【DateTime】", - "【firstDate】 : Limite da data mais antiga 【DateTime】", - "【lastDate】 : Limite da data mais recente 【DateTime】", - "【onChanged】 : Callback de clique 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'O MonthPicker, o seletor de mês, foi retirado do palco histórico no Flutter 3.0. O substituto é o CalendarDatePicker, o seletor de calendário.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ru_RU.json deleted file mode 100644 index baa157397..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ru_RU.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "Выбор месяца", - "info": "Компонент выбора месяца с встроенным прослушиванием переключения на предыдущий и следующий месяц. Можно указать диапазон выбора дат, выбранную дату и т.д., принимает событие выбора даты.", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование MonthPicker", - "desc": [ - "【selectedDate】 : Выбранная дата 【DateTime】", - "【firstDate】 : Ограничение на самую раннюю дату 【DateTime】", - "【lastDate】 : Ограничение на самую позднюю дату 【DateTime】", - "【onChanged】 : Обратный вызов при клике 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker, компонент выбора месяца, ушел в историю с выходом Flutter 3.0. Его заменил CalendarDatePicker, компонент выбора даты.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_zh-CN.json deleted file mode 100644 index 816c09a77..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_zh-CN.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "月份选择器", - "info": "月份的选择组件,自带上下月切换的监听。可指定选择的日期范围、选中日期等,接收日期选中事件。", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MonthPicker基本使用", - "desc": [ - "【selectedDate】 : 选中日期 【DateTime】", - "【firstDate】 : 最前日期限制 【DateTime】", - "【lastDate】 : 最后日期限制 【DateTime】", - "【onChanged】 : 点击回调 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker 月份期选择器于 Flutter3.0 退出历史舞台。取代者为 CalendarDatePicker 日历选择器。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/node1_base.dart deleted file mode 100644 index b7f9668b1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/node1_base.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomMonthPicker extends StatelessWidget{ - const CustomMonthPicker({Key? key}) : super(key: key); - - final String info = - 'MonthPicker 月份期选择器于 Flutter3.0 退出历史舞台。取代者为 CalendarDatePicker 日历选择器。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_de_DE.json deleted file mode 100644 index 246a4c828..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "Mausbereich", - "info": "Eine Komponente zur Überwachung von Mausereignissen, wird normalerweise für Desktop- und Webplattformen verwendet und kann Mausbewegungen, Eintritts- und Austrittsereignisse überwachen.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von MouseRegion", - "desc": [ - "【onEnter】: Eintrittsereignis 【PointerEnterEventListener】", - "【onHover】: Bewegungsereignis 【PointerHoverEventListener】", - "【onExit】: Austrittsereignis 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_en_US.json deleted file mode 100644 index 858d30015..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "Mouse Region", - "info": "A component for mouse event listening, typically used on desktop and web platforms, can listen to mouse enter, exit, and move events.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of MouseRegion", - "desc": [ - "【onEnter】: Enter event 【PointerEnterEventListener】", - "【onHover】: Move event 【PointerHoverEventListener】", - "【onExit】: Exit event 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_es_ES.json deleted file mode 100644 index 8aaf2d68a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "Región del Ratón", - "info": "Componente utilizado para la escucha de eventos del ratón, comúnmente utilizado en plataformas de escritorio y web, puede escuchar eventos de entrada, salida y movimiento del ratón.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de MouseRegion", - "desc": [ - "【onEnter】 : Evento de entrada 【PointerEnterEventListener】", - "【onHover】: Evento de movimiento 【PointerHoverEventListener】", - "【onExit】: Evento de salida 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_fr_FR.json deleted file mode 100644 index e58a9d8f0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "Région de souris", - "info": "Composant utilisé pour la surveillance des événements de souris, généralement utilisé sur les plateformes de bureau et Web, peut surveiller les événements d'entrée, de sortie et de déplacement de la souris.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de MouseRegion", - "desc": [ - "【onEnter】 : Événement d'entrée 【PointerEnterEventListener】", - "【onHover】: Événement de déplacement 【PointerHoverEventListener】", - "【onExit】: Événement de sortie 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_it_IT.json deleted file mode 100644 index 820627991..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "Area del Mouse", - "info": "Componente per il monitoraggio degli eventi del mouse, comunemente utilizzato su piattaforme desktop e web, in grado di monitorare eventi di entrata, uscita e movimento del mouse.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di MouseRegion", - "desc": [ - "【onEnter】: Evento di entrata 【PointerEnterEventListener】", - "【onHover】: Evento di movimento 【PointerHoverEventListener】", - "【onExit】: Evento di uscita 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ja_JP.json deleted file mode 100644 index 8984d5dbc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "マウス領域", - "info": "マウスイベントを監視するためのコンポーネントで、通常はデスクトップおよびWebプラットフォームで使用され、マウスの入場、退出、移動イベントを監視できます。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MouseRegionの基本使用", - "desc": [ - "【onEnter】 : 入場イベント 【PointerEnterEventListener】", - "【onHover】: 移動イベント 【PointerHoverEventListener】", - "【onExit】: 退出イベント 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ko_KR.json deleted file mode 100644 index 56709993b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "마우스 영역", - "info": "마우스 이벤트를 감지하는 컴포넌트로, 주로 데스크톱 및 웹 플랫폼에서 사용되며, 마우스 진입, 이동, 이탈 이벤트를 감지할 수 있습니다.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MouseRegion 기본 사용", - "desc": [ - "【onEnter】 : 진입 이벤트 【PointerEnterEventListener】", - "【onHover】: 이동 이벤트 【PointerHoverEventListener】", - "【onExit】: 이탈 이벤트 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_pt_PT.json deleted file mode 100644 index cf3097e9e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "Região do Rato", - "info": "Componente para monitorização de eventos do rato, geralmente utilizado em plataformas de desktop e web, pode monitorizar eventos de entrada, saída e movimento do rato.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do MouseRegion", - "desc": [ - "【onEnter】 : Evento de entrada 【PointerEnterEventListener】", - "【onHover】: Evento de movimento 【PointerHoverEventListener】", - "【onExit】: Evento de saída 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ru_RU.json deleted file mode 100644 index fbde4efeb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "Область мыши", - "info": "Компонент для отслеживания событий мыши, обычно используется на платформах для настольных компьютеров и веб-платформах, может отслеживать события входа, выхода и перемещения мыши.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование MouseRegion", - "desc": [ - "【onEnter】: Событие входа 【PointerEnterEventListener】", - "【onHover】: Событие перемещения 【PointerHoverEventListener】", - "【onExit】: Событие выхода 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_zh-CN.json deleted file mode 100644 index 194a6654e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "鼠标区域", - "info": "用于鼠标事件监听的组件,通常用于桌面和Web平台,可监听鼠标的移入、移除、移动事件。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MouseRegion基本使用", - "desc": [ - "【onEnter】 : 移入事件 【PointerEnterEventListener】", - "【onHover】: 移动事件 【PointerHoverEventListener】", - "【onExit】: 移出事件 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/node1_base.dart deleted file mode 100644 index 2d77a327f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/node1_base.dart +++ /dev/null @@ -1,63 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class MouseRegionDemo extends StatefulWidget { - const MouseRegionDemo({Key? key}) : super(key: key); - - @override - _MouseRegionDemoState createState() => _MouseRegionDemoState(); -} - -class _MouseRegionDemoState extends State { - int _enterCounter = 0; - int _exitCounter = 0; - double x = 0.0; - double y = 0.0; - void _incrementEnter(PointerEvent details) { - setState(() { - _enterCounter++; - }); - } - void _incrementExit(PointerEvent details) { - setState(() { - _exitCounter++; - }); - } - void _updateLocation(PointerEvent details) { - setState(() { - x = details.position.dx; - y = details.position.dy; - }); - } - @override - Widget build(BuildContext context) { - return ConstrainedBox( - constraints: BoxConstraints.tight(const Size(300.0, 200.0)), - child: MouseRegion( - onEnter: _incrementEnter, - onHover: _updateLocation, - onExit: _incrementExit, - child: Container( - color: Colors.lightBlueAccent, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Text('你的鼠标移入移除信息:'), - Text( - '$_enterCounter Entries\n$_exitCounter Exits', - style: Theme.of(context).textTheme.headlineMedium, - ), - Text( - 'The cursor is here: (${x.toStringAsFixed(2)}, ${y.toStringAsFixed(2)})', - ), - ], - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_de_DE.json deleted file mode 100644 index 74f4b8e8d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_de_DE.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "Seitennavigation", - "info": "Seitennavigationsleiste, wird im Allgemeinen für Desktop-Navigationsmenüs verwendet. Unterstützt erweiterbare und reduzierbare Bereiche, kann Komponenten für die Anfangsposition und Endposition angeben.", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NavigationRail Grundlegende Verwendung", - "desc": [ - "【destinations】 : Menüdatenliste 【List】", - "【selectedIndex】: Aktivierter Index 【int】", - "【labelType】: Label-Stil 【NavigationRailLabelType?】", - "【onDestinationSelected】: Menü-Klick-Ereignis 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "NavigationRail Falt-Effekt", - "desc": [ - "【elevation】 : Schattentiefe 【double】", - "【leading】: Startkomponente 【Widget?】", - "【trailing】: Endkomponente 【Widget?】", - "【extended】: Ob erweitert 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "NavigationRail Stil", - "desc": [ - "【useIndicator】 : Ob Indikator angezeigt wird 【bool】", - "【indicatorColor】: Indikatorfarbe 【Color?】", - "【backgroundColor】: Hintergrundfarbe 【Color?】", - "【labelType】: Label-Stil 【NavigationRailLabelType?】", - "【selectedIconTheme】: Ausgewähltes Icon-Thema 【IconThemeData?】", - "【unselectedIconTheme】: Nicht ausgewähltes Icon-Thema 【IconThemeData?】", - "【selectedLabelTextStyle】: Ausgewählter Textstil 【TextStyle?】", - "【unselectedLabelTextStyle】: Nicht ausgewählter Textstil 【TextStyle?】", - "【minExtendedWidth】: Erweiterte Breite 【double?】", - "【minWidth】: Nicht erweiterte Breite 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_en_US.json deleted file mode 100644 index e98539271..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_en_US.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "Side Navigation Bar", - "info": "Side navigation bar, generally used for desktop navigation menus. Supports expanding and collapsing areas, and can specify components at the beginning and end positions.", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of NavigationRail", - "desc": [ - "【destinations】 : Menu data list 【List】", - "【selectedIndex】: Active index 【int】", - "【labelType】: Label style 【NavigationRailLabelType?】", - "【onDestinationSelected】: Menu click event 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "Collapse Effect of NavigationRail", - "desc": [ - "【elevation】 : Shadow depth 【double】", - "【leading】: Leading component 【Widget?】", - "【trailing】: Trailing component 【Widget?】", - "【extended】: Whether to expand 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "NavigationRail Style", - "desc": [ - "【useIndicator】 : Whether to show the indicator 【bool】", - "【indicatorColor】: Indicator color 【Color?】", - "【backgroundColor】: Background color 【Color?】", - "【labelType】: Label style 【NavigationRailLabelType?】", - "【selectedIconTheme】: Selected icon style 【IconThemeData?】", - "【unselectedIconTheme】: Unselected icon style 【IconThemeData?】", - "【selectedLabelTextStyle】: Selected text style 【TextStyle?】", - "【unselectedLabelTextStyle】: Unselected text style 【TextStyle?】", - "【minExtendedWidth】: Expanded width 【double?】", - "【minWidth】: Unexpanded width 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_es_ES.json deleted file mode 100644 index ed04f6691..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_es_ES.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "Navegación lateral", - "info": "Barra de navegación lateral, generalmente utilizada para menús de navegación de escritorio. Admite áreas expandibles y contraíbles, y permite especificar componentes en la posición inicial y final.", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de NavigationRail", - "desc": [ - "【destinations】 : Lista de datos del menú 【List】", - "【selectedIndex】: Índice activo 【int】", - "【labelType】: Estilo de la etiqueta 【NavigationRailLabelType?】", - "【onDestinationSelected】: Evento de clic en el menú 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "Efecto de plegado de NavigationRail", - "desc": [ - "【elevation】 : Profundidad de la sombra 【double】", - "【leading】: Componente inicial 【Widget?】", - "【trailing】: Componente final 【Widget?】", - "【extended】: Si está expandido 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "Estilo de NavigationRail", - "desc": [ - "【useIndicator】 : Si se muestra el indicador 【bool】", - "【indicatorColor】: Color del indicador 【Color?】", - "【backgroundColor】: Color de fondo 【Color?】", - "【labelType】: Estilo de la etiqueta 【NavigationRailLabelType?】", - "【selectedIconTheme】: Estilo del icono seleccionado 【IconThemeData?】", - "【unselectedIconTheme】: Estilo del icono no seleccionado 【IconThemeData?】", - "【selectedLabelTextStyle】: Estilo del texto seleccionado 【TextStyle?】", - "【unselectedLabelTextStyle】: Estilo del texto no seleccionado 【TextStyle?】", - "【minExtendedWidth】: Ancho expandido 【double?】", - "【minWidth】: Ancho no expandido 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_fr_FR.json deleted file mode 100644 index 8203bb856..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_fr_FR.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "Barre de navigation latérale", - "info": "Barre de navigation latérale, généralement utilisée pour les menus de navigation sur ordinateur. Prend en charge l'expansion et la contraction des zones, et permet de spécifier les composants en position de début et de fin.", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de NavigationRail", - "desc": [ - "【destinations】 : Liste des données du menu 【List】", - "【selectedIndex】: Index actif 【int】", - "【labelType】: Style de l'étiquette 【NavigationRailLabelType?】", - "【onDestinationSelected】: Événement de clic sur le menu 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "Effet de pliage de NavigationRail", - "desc": [ - "【elevation】 : Profondeur de l'ombre 【double】", - "【leading】: Composant de début 【Widget?】", - "【trailing】: Composant de fin 【Widget?】", - "【extended】: Est-ce étendu 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "Style de NavigationRail", - "desc": [ - "【useIndicator】 : Afficher l'indicateur 【bool】", - "【indicatorColor】: Couleur de l'indicateur 【Color?】", - "【backgroundColor】: Couleur de fond 【Color?】", - "【labelType】: Style de l'étiquette 【NavigationRailLabelType?】", - "【selectedIconTheme】: Style de l'icône sélectionnée 【IconThemeData?】", - "【unselectedIconTheme】: Style de l'icône non sélectionnée 【IconThemeData?】", - "【selectedLabelTextStyle】: Style du texte sélectionné 【TextStyle?】", - "【unselectedLabelTextStyle】: Style du texte non sélectionné 【TextStyle?】", - "【minExtendedWidth】: Largeur étendue 【double?】", - "【minWidth】: Largeur non étendue 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_it_IT.json deleted file mode 100644 index 6e44bddfa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_it_IT.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "Navigazione laterale", - "info": "Barra di navigazione laterale, generalmente utilizzata per il menu di navigazione desktop. Supporta l'espansione e la contrazione delle aree, e consente di specificare i componenti nelle posizioni iniziali e finali.", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di NavigationRail", - "desc": [ - "【destinations】 : Lista dei dati del menu 【List】", - "【selectedIndex】: Indice attivo 【int】", - "【labelType】: Stile dell'etichetta 【NavigationRailLabelType?】", - "【onDestinationSelected】: Evento di clic sul menu 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "Effetto di collasso di NavigationRail", - "desc": [ - "【elevation】 : Profondità dell'ombra 【double】", - "【leading】: Componente iniziale 【Widget?】", - "【trailing】: Componente finale 【Widget?】", - "【extended】: Se espanso 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "Stile di NavigationRail", - "desc": [ - "【useIndicator】 : Se mostrare l'indicatore 【bool】", - "【indicatorColor】: Colore dell'indicatore 【Color?】", - "【backgroundColor】: Colore di sfondo 【Color?】", - "【labelType】: Stile dell'etichetta 【NavigationRailLabelType?】", - "【selectedIconTheme】: Stile dell'icona selezionata 【IconThemeData?】", - "【unselectedIconTheme】: Stile dell'icona non selezionata 【IconThemeData?】", - "【selectedLabelTextStyle】: Stile del testo selezionato 【TextStyle?】", - "【unselectedLabelTextStyle】: Stile del testo non selezionato 【TextStyle?】", - "【minExtendedWidth】: Larghezza espansa 【double?】", - "【minWidth】: Larghezza non espansa 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ja_JP.json deleted file mode 100644 index 81addefbf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ja_JP.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "サイドバーナビゲーション", - "info": "サイドナビゲーションバーは、通常デスクトップのナビゲーションメニューに使用されます。展開と収縮の領域をサポートし、最初と最後の位置のコンポーネントを指定できます。", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NavigationRail 基本使用", - "desc": [ - "【destinations】 : メニューデータリスト 【List】", - "【selectedIndex】: アクティブインデックス 【int】", - "【labelType】: ラベルスタイル 【NavigationRailLabelType?】", - "【onDestinationSelected】: メニュークリックイベント 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "NavigationRail 折りたたみ効果", - "desc": [ - "【elevation】 : 影の深さ 【double】", - "【leading】: 最初のコンポーネント 【Widget?】", - "【trailing】: 最後のコンポーネント 【Widget?】", - "【extended】: 展開するかどうか 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "NavigationRail スタイル", - "desc": [ - "【useIndicator】 : インジケーターを表示するかどうか 【bool】", - "【indicatorColor】: インジケーターの色 【Color?】", - "【backgroundColor】: 背景色 【Color?】", - "【labelType】: ラベルスタイル 【NavigationRailLabelType?】", - "【selectedIconTheme】: 選択されたアイコンのスタイル 【IconThemeData?】", - "【unselectedIconTheme】: 選択されていないアイコンのスタイル 【IconThemeData?】", - "【selectedLabelTextStyle】: 選択されたテキストのスタイル 【TextStyle?】", - "【unselectedLabelTextStyle】: 選択されていないテキストのスタイル 【TextStyle?】", - "【minExtendedWidth】: 展開幅 【double?】", - "【minWidth】: 未展開幅 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ko_KR.json deleted file mode 100644 index 351ea2c04..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ko_KR.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "사이드바 내비게이션", - "info": "사이드 내비게이션 바, 일반적으로 데스크톱 내비게이션 메뉴에 사용됩니다. 확장 및 축소 영역을 지원하며, 처음과 끝 위치 컴포넌트를 지정할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NavigationRail 기본 사용법", - "desc": [ - "【destinations】 : 메뉴 데이터 리스트 【List】", - "【selectedIndex】: 활성화 인덱스 【int】", - "【labelType】: 라벨 스타일 【NavigationRailLabelType?】", - "【onDestinationSelected】: 메뉴 클릭 이벤트 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "NavigationRail 접힘 효과", - "desc": [ - "【elevation】 : 그림자 깊이 【double】", - "【leading】: 처음 컴포넌트 【Widget?】", - "【trailing】: 끝 컴포넌트 【Widget?】", - "【extended】: 확장 여부 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "NavigationRail 스타일", - "desc": [ - "【useIndicator】 : 인디케이터 표시 여부 【bool】", - "【indicatorColor】: 인디케이터 색상 【Color?】", - "【backgroundColor】: 배경색 【Color?】", - "【labelType】: 라벨 스타일 【NavigationRailLabelType?】", - "【selectedIconTheme】: 선택된 아이콘 스타일 【IconThemeData?】", - "【unselectedIconTheme】: 선택되지 않은 아이콘 스타일 【IconThemeData?】", - "【selectedLabelTextStyle】: 선택된 텍스트 스타일 【TextStyle?】", - "【unselectedLabelTextStyle】: 선택되지 않은 텍스트 스타일 【TextStyle?】", - "【minExtendedWidth】: 확장된 너비 【double?】", - "【minWidth】: 확장되지 않은 너비 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_pt_PT.json deleted file mode 100644 index ae772d91b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_pt_PT.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "Barra de Navegação Lateral", - "info": "Barra de navegação lateral, geralmente usada para menus de navegação em desktop. Suporta áreas expansíveis e retráteis, com componentes especificáveis nas posições inicial e final.", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do NavigationRail", - "desc": [ - "【destinations】 : Lista de dados do menu 【List】", - "【selectedIndex】: Índice ativo 【int】", - "【labelType】: Estilo da etiqueta 【NavigationRailLabelType?】", - "【onDestinationSelected】: Evento de clique no menu 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "Efeito de Recolhimento do NavigationRail", - "desc": [ - "【elevation】 : Profundidade da sombra 【double】", - "【leading】: Componente inicial 【Widget?】", - "【trailing】: Componente final 【Widget?】", - "【extended】: Expandido 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "Estilo do NavigationRail", - "desc": [ - "【useIndicator】 : Mostrar indicador 【bool】", - "【indicatorColor】: Cor do indicador 【Color?】", - "【backgroundColor】: Cor de fundo 【Color?】", - "【labelType】: Estilo da etiqueta 【NavigationRailLabelType?】", - "【selectedIconTheme】: Estilo do ícone selecionado 【IconThemeData?】", - "【unselectedIconTheme】: Estilo do ícone não selecionado 【IconThemeData?】", - "【selectedLabelTextStyle】: Estilo do texto selecionado 【TextStyle?】", - "【unselectedLabelTextStyle】: Estilo do texto não selecionado 【TextStyle?】", - "【minExtendedWidth】: Largura expandida 【double?】", - "【minWidth】: Largura não expandida 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ru_RU.json deleted file mode 100644 index e9889ecd9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ru_RU.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "Боковая навигация", - "info": "Боковая панель навигации, обычно используется для навигационного меню на рабочем столе. Поддерживает расширение и сворачивание области, можно указать компоненты в начале и конце.", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование NavigationRail", - "desc": [ - "【destinations】 : Список данных меню 【List】", - "【selectedIndex】: Активный индекс 【int】", - "【labelType】: Стиль метки 【NavigationRailLabelType?】", - "【onDestinationSelected】: Событие клика по меню 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "Эффект сворачивания NavigationRail", - "desc": [ - "【elevation】 : Глубина тени 【double】", - "【leading】: Начальный компонент 【Widget?】", - "【trailing】: Конечный компонент 【Widget?】", - "【extended】: Развернуто ли 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "Стиль NavigationRail", - "desc": [ - "【useIndicator】 : Показывать ли индикатор 【bool】", - "【indicatorColor】: Цвет индикатора 【Color?】", - "【backgroundColor】: Цвет фона 【Color?】", - "【labelType】: Стиль метки 【NavigationRailLabelType?】", - "【selectedIconTheme】: Стиль выбранной иконки 【IconThemeData?】", - "【unselectedIconTheme】: Стиль невыбранной иконки 【IconThemeData?】", - "【selectedLabelTextStyle】: Стиль выбранного текста 【TextStyle?】", - "【unselectedLabelTextStyle】: Стиль невыбранного текста 【TextStyle?】", - "【minExtendedWidth】: Ширина в развернутом состоянии 【double?】", - "【minWidth】: Ширина в свернутом состоянии 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_zh-CN.json deleted file mode 100644 index 92520a94e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_zh-CN.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "侧栏导航", - "info": "侧导航栏,一般用于桌面导航菜单。支持展开和收缩区域,可指定首尾位置组件。", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NavigationRail 基本使用", - "desc": [ - "【destinations】 : 菜单数据列表 【List】", - "【selectedIndex】: 激活索引 【int】", - "【labelType】: 标签样式 【NavigationRailLabelType?】", - "【onDestinationSelected】: 菜单点击事件 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "NavigationRail 折叠效果", - "desc": [ - "【elevation】 : 影深 【double】", - "【leading】: 首组件 【Widget?】", - "【trailing】: 尾组件 【Widget?】", - "【extended】: 是否展开 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "NavigationRail 样式", - "desc": [ - "【useIndicator】 : 是否显示指示器 【bool】", - "【indicatorColor】: 指示器颜色 【Color?】", - "【backgroundColor】: 背景色 【Color?】", - "【labelType】: 标签样式 【NavigationRailLabelType?】", - "【selectedIconTheme】: 选中图标样式 【IconThemeData?】", - "【unselectedIconTheme】: 未选中图标样式 【IconThemeData?】", - "【selectedLabelTextStyle】: 选中文字样式 【TextStyle?】", - "【unselectedLabelTextStyle】: 未选中文字样式 【TextStyle?】", - "【minExtendedWidth】: 展开宽度 【double?】", - "【minWidth】: 未展开宽度 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node1_base.dart deleted file mode 100644 index b5c732600..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node1_base.dart +++ /dev/null @@ -1,111 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2022/7/23 -/// contact me by email 1981462002@qq.com - -class CustomNavigationRail extends StatefulWidget { - const CustomNavigationRail({Key? key}) : super(key: key); - - @override - State createState() => _CustomNavigationRailState(); -} - -class _CustomNavigationRailState extends State { - final PageController _controller = PageController(); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(), - body: Row( - children: [ - _NavigationRailDemo( - onDestinationSelected: _onDestinationSelected, - ), - Expanded( - child: PageView( - controller: _controller, - children: const [ - _TestContent(content: '消息'), - _TestContent(content: '视频会议'), - _TestContent(content: '通讯录'), - _TestContent(content: '云文档'), - _TestContent(content: '工作台'), - _TestContent(content: '日历'), - ], - )) - ], - ), - ); - } - - void _onDestinationSelected(int value) { - _controller.jumpToPage(value); - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } -} - -class _TestContent extends StatelessWidget { - final String content; - - const _TestContent({Key? key, required this.content}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Center( - child: Text( - content, - style: const TextStyle(fontSize: 26), - )); - } -} - -class _NavigationRailDemo extends StatefulWidget { - final ValueChanged? onDestinationSelected; - - const _NavigationRailDemo({Key? key, this.onDestinationSelected}) - : super(key: key); - - @override - State<_NavigationRailDemo> createState() => _NavigationRailDemoState(); -} - -class _NavigationRailDemoState extends State<_NavigationRailDemo> { - int _selectIndex = 0; - - final List destinations = const [ - NavigationRailDestination( - icon: Icon(Icons.message_outlined), label: Text("消息")), - NavigationRailDestination( - icon: Icon(Icons.video_camera_back_outlined), label: Text("视频会议")), - NavigationRailDestination( - icon: Icon(Icons.book_outlined), label: Text("通讯录")), - NavigationRailDestination( - icon: Icon(Icons.cloud_upload_outlined), label: Text("云文档")), - NavigationRailDestination( - icon: Icon(Icons.games_sharp), label: Text("工作台")), - NavigationRailDestination( - icon: Icon(Icons.calendar_month), label: Text("日历")) - ]; - - @override - Widget build(BuildContext context) { - return NavigationRail( - onDestinationSelected: _onDestinationSelected, - labelType: NavigationRailLabelType.all, - destinations: destinations, - selectedIndex: _selectIndex, - ); - } - - void _onDestinationSelected(int value) { - _selectIndex = value; - setState(() {}); - widget.onDestinationSelected?.call(value); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node2_extend.dart b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node2_extend.dart deleted file mode 100644 index 0f3d350f9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node2_extend.dart +++ /dev/null @@ -1,139 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2022/7/23 -/// contact me by email 1981462002@qq.com - -class ExtendableNavigationRail extends StatefulWidget { - const ExtendableNavigationRail({Key? key}) : super(key: key); - - @override - State createState() => - _ExtendableNavigationRailState(); -} - -class _ExtendableNavigationRailState extends State { - final PageController _controller = PageController(); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(), - body: Row( - children: [ - ExtendableNavigation( - onDestinationSelected: _onDestinationSelected, - ), - Expanded( - child: PageView( - controller: _controller, - children: const [ - _TestContent(content: '消息'), - _TestContent(content: '视频会议'), - _TestContent(content: '通讯录'), - _TestContent(content: '云文档'), - _TestContent(content: '工作台'), - _TestContent(content: '日历'), - ], - )) - ], - ), - ); - } - - void _onDestinationSelected(int value) { - _controller.jumpToPage(value); - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } -} - -class _TestContent extends StatelessWidget { - final String content; - - const _TestContent({Key? key, required this.content}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Center( - child: Text( - content, - style: const TextStyle(fontSize: 26), - )); - } -} - -class ExtendableNavigation extends StatefulWidget { - final ValueChanged? onDestinationSelected; - - const ExtendableNavigation({Key? key, this.onDestinationSelected}) - : super(key: key); - - @override - State createState() => _ExtendableNavigationState(); -} - -class _ExtendableNavigationState extends State { - int _selectIndex = 0; - bool _extended = false; - - final List destinations = const [ - NavigationRailDestination( - icon: Icon(Icons.message_outlined), label: Text("消息")), - NavigationRailDestination( - icon: Icon(Icons.video_camera_back_outlined), label: Text("视频会议")), - NavigationRailDestination( - icon: Icon(Icons.book_outlined), label: Text("通讯录")), - NavigationRailDestination( - icon: Icon(Icons.cloud_upload_outlined), label: Text("云文档")), - NavigationRailDestination( - icon: Icon(Icons.games_sharp), label: Text("工作台")), - NavigationRailDestination( - icon: Icon(Icons.calendar_month), label: Text("日历")) - ]; - - Widget buildLeading() { - return GestureDetector( - onTap: _toggleExtended, - child: const Icon( - Icons.menu_open, - color: Colors.grey, - )); - } - - @override - Widget build(BuildContext context) { - return NavigationRail( - leading: buildLeading(), - extended: _extended, - elevation: 1, - trailing: const Expanded( - child: Align( - alignment: Alignment.bottomCenter, - child: Padding( - padding: EdgeInsets.only(bottom: 20.0), - child: FlutterLogo(), - ), - ), - ), - onDestinationSelected: _onDestinationSelected, - destinations: destinations, - selectedIndex: _selectIndex, - ); - } - - void _onDestinationSelected(int value) { - _selectIndex = value; - setState(() {}); - widget.onDestinationSelected?.call(value); - } - - void _toggleExtended() { - setState(() { - _extended = !_extended; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node3_dark.dart b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node3_dark.dart deleted file mode 100644 index fe234ed5d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node3_dark.dart +++ /dev/null @@ -1,160 +0,0 @@ -import 'package:flutter/material.dart'; - -// minWidth: 72, -// minExtendedWidth: 200 , -// unselectedIconTheme: const IconThemeData(color: textColor) , -// selectedIconTheme: const IconThemeData(color: activeColor) , -// unselectedLabelTextStyle: labelStyle, -// selectedLabelTextStyle: labelStyle, - -/// create by 张风捷特烈 on 2022/7/23 -/// contact me by email 1981462002@qq.com - -class DarkNavigationRail extends StatefulWidget { - const DarkNavigationRail({Key? key}) : super(key: key); - - @override - State createState() => _DarkNavigationRailState(); -} - -class _DarkNavigationRailState extends State { - final PageController _controller = PageController(); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(), - body: Row( - children: [ - DarkExtendableNavigation( - onDestinationSelected: _onDestinationSelected, - ), - Expanded( - child: PageView( - controller: _controller, - children: const [ - _TestContent(content: '消息'), - _TestContent(content: '视频会议'), - _TestContent(content: '通讯录'), - _TestContent(content: '云文档'), - _TestContent(content: '工作台'), - _TestContent(content: '日历'), - ], - )) - ], - ), - ); - } - - void _onDestinationSelected(int value) { - _controller.jumpToPage(value); - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } -} - -class _TestContent extends StatelessWidget { - final String content; - - const _TestContent({Key? key, required this.content}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Center( - child: Text( - content, - style: const TextStyle(fontSize: 26), - )); - } -} - -class DarkExtendableNavigation extends StatefulWidget { - final ValueChanged? onDestinationSelected; - - const DarkExtendableNavigation({Key? key, this.onDestinationSelected}) - : super(key: key); - - @override - State createState() => - _DarkExtendableNavigationState(); -} - -class _DarkExtendableNavigationState extends State { - int _selectIndex = 0; - bool _extended = false; - - final List destinations = const [ - NavigationRailDestination( - icon: Icon(Icons.message_outlined), label: Text("消息")), - NavigationRailDestination( - icon: Icon(Icons.video_camera_back_outlined), label: Text("视频会议")), - NavigationRailDestination( - icon: Icon(Icons.book_outlined), label: Text("通讯录")), - NavigationRailDestination( - icon: Icon(Icons.cloud_upload_outlined), label: Text("云文档")), - NavigationRailDestination( - icon: Icon(Icons.games_sharp), label: Text("工作台")), - NavigationRailDestination( - icon: Icon(Icons.calendar_month), label: Text("日历")) - ]; - - Widget buildLeading() { - return GestureDetector( - onTap: _toggleExtended, - child: const Icon( - Icons.menu_open, - color: Colors.grey, - )); - } - - @override - Widget build(BuildContext context) { - const Color textColor = Color(0xffcfd1d7); - const Color activeColor = Colors.white; - const TextStyle labelStyle = TextStyle(color: textColor, fontSize: 11); - - return NavigationRail( - leading: buildLeading(), - extended: _extended, - labelType: NavigationRailLabelType.none, - useIndicator: true, - indicatorColor: Colors.blue, - elevation: 1, - backgroundColor: const Color(0xff324465), - minWidth: 72, - minExtendedWidth: 200, - unselectedIconTheme: const IconThemeData(color: textColor), - selectedIconTheme: const IconThemeData(color: activeColor), - unselectedLabelTextStyle: labelStyle, - selectedLabelTextStyle: labelStyle, - trailing: const Expanded( - child: Align( - alignment: Alignment.bottomCenter, - child: Padding( - padding: EdgeInsets.only(bottom: 20.0), - child: FlutterLogo(), - ), - ), - ), - onDestinationSelected: _onDestinationSelected, - destinations: destinations, - selectedIndex: _selectIndex, - ); - } - - void _onDestinationSelected(int value) { - _selectIndex = value; - setState(() {}); - widget.onDestinationSelected?.call(value); - } - - void _toggleExtended() { - setState(() { - _extended = !_extended; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_de_DE.json deleted file mode 100644 index 3f97142a7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "Navigator", - "info": "Der Navigator verwaltet eine Gruppe von Unterkomponenten nach Stack-Regeln, kann Unterkomponenten ein- und ausblenden und Ereignisse beim Ein- und Ausstapeln überwachen. Die Routenverwaltung von MaterialApp basiert auf dem Navigator.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung des Navigators", - "desc": [ - "【initialRoute】: Anfangsroute 【String】", - "【onGenerateRoute】: Routengenerator 【RouteFactory】", - "【observers】: Routenbeobachter 【List】", - "【onPopPage】: Rückruf beim Entfernen aus dem Stack 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_en_US.json deleted file mode 100644 index b36e3220f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "Navigator", - "info": "The Navigator manages a group of child components using stack rules, allowing child components to be pushed and popped, and listening to stack events. The origin of MaterialApp's route management is the use of Navigator.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Navigator", - "desc": [ - "【initialRoute】: Initial display route 【String】", - "【onGenerateRoute】: Route generator 【RouteFactory】", - "【observers】: Route observers 【List】", - "【onPopPage】: Pop page callback 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_es_ES.json deleted file mode 100644 index d3006b1b6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "Navegador", - "info": "Navigator gestiona un grupo de componentes secundarios utilizando reglas de pila, permitiendo empujar y sacar componentes secundarios, así como escuchar eventos de entrada y salida de la pila. La gestión de rutas de MaterialApp se basa en el uso de Navigator.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Navigator", - "desc": [ - "【initialRoute】 : Ruta inicial 【String】", - "【onGenerateRoute】 : Generador de rutas 【RouteFactory】", - "【observers】 : Observador de rutas 【List】", - "【onPopPage】 : Callback de salida de pila 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_fr_FR.json deleted file mode 100644 index 867043566..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "Navigateur", - "info": "Navigator gère un ensemble de composants enfants en utilisant des règles de pile, permettant de pousser et de retirer des composants enfants ainsi que d'écouter les événements d'entrée et de sortie de la pile. La gestion des routes de MaterialApp est fondamentalement basée sur l'utilisation de Navigator.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Navigator", - "desc": [ - "【initialRoute】 : Route initiale 【String】", - "【onGenerateRoute】 : Générateur de route 【RouteFactory】", - "【observers】 : Observateur de route 【List】", - "【onPopPage】 : Rappel de sortie de pile 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_it_IT.json deleted file mode 100644 index 713fe080b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "Navigatore", - "info": "Navigator gestisce un gruppo di componenti figli utilizzando regole di stack, può spingere e rimuovere componenti figli e monitorare gli eventi di entrata e uscita dallo stack. La gestione delle route di MaterialApp si basa sull'uso di Navigator.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Navigator", - "desc": [ - "【initialRoute】 : Route iniziale 【String】", - "【onGenerateRoute】 : Generatore di route 【RouteFactory】", - "【observers】 : Osservatori di route 【List】", - "【onPopPage】 : Callback di rimozione dallo stack 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ja_JP.json deleted file mode 100644 index 8d9747e23..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "ナビゲーター", - "info": "Navigatorはスタックルールを使用して一連の子コンポーネントを管理し、子コンポーネントを切り替えたり、スタックの出入りイベントを監視したりすることができます。MaterialAppのルート管理の根源はNavigatorを使用しています。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Navigatorの基本使用方法", - "desc": [ - "【initialRoute】 : 最初に表示されるルート 【String】", - "【onGenerateRoute】 : ルートジェネレーター 【RouteFactory】", - "【observers】 : ルートオブザーバー 【List】", - "【onPopPage】 : スタックから出るコールバック 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ko_KR.json deleted file mode 100644 index b84707bec..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "네비게이터", - "info": "Navigator는 스택 규칙을 사용하여 자식 위젯 그룹을 관리하며, 자식 위젯을 푸시하고 팝하며 스택 이벤트를 수신할 수 있습니다. MaterialApp의 라우팅 관리의 근원은 Navigator를 사용한 것입니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Navigator 기본 사용법", - "desc": [ - "【initialRoute】 : 초기 표시 라우트 【String】", - "【onGenerateRoute】 : 라우트 생성기 【RouteFactory】", - "【observers】 : 라우트 리스너 【List】", - "【onPopPage】 : 팝 콜백 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_pt_PT.json deleted file mode 100644 index 16934999a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "Navegador", - "info": "O Navigator gere um grupo de componentes filhos usando regras de pilha, podendo empurrar e retirar componentes filhos, bem como monitorar eventos de entrada e saída da pilha. A gestão de rotas do MaterialApp baseia-se no uso do Navigator.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Navigator", - "desc": [ - "【initialRoute】 : Rota inicial 【String】", - "【onGenerateRoute】 : Gerador de rotas 【RouteFactory】", - "【observers】 : Observador de rotas 【List】", - "【onPopPage】 : Callback de saída da pilha 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ru_RU.json deleted file mode 100644 index fcf4be64d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "Навигатор", - "info": "Navigator управляет группой дочерних компонентов по правилам стека, может добавлять и удалять дочерние компоненты, а также отслеживать события входа и выхода из стека. Источник управления маршрутами MaterialApp использует Navigator.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Navigator", - "desc": [ - "【initialRoute】 : Первоначальный маршрут отображения 【String】", - "【onGenerateRoute】 : Генератор маршрутов 【RouteFactory】", - "【observers】 : Наблюдатели маршрутов 【List】", - "【onPopPage】 : Обратный вызов выхода из стека 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_zh-CN.json deleted file mode 100644 index f350eeb22..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "导航器", - "info": "Navigator用堆栈规则管理一组子组件,可以将子组件切入弹出及监听出入栈事件。MaterialApp路由管理的本源就是使用了Navigator。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Navigator基本用法", - "desc": [ - "【initialRoute】 : 最初显示路由 【String】", - "【onGenerateRoute】 : 路由生成器 【RouteFactory】", - "【observers】 : 路由监听器 【List】", - "【onPopPage】 : 出栈回调 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/node1_base.dart deleted file mode 100644 index eb000b4a0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/node1_base.dart +++ /dev/null @@ -1,185 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/19 -/// contact me by email 1981462002@qq.com - -class NavigatorDemo extends StatelessWidget { - const NavigatorDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - width: 300, - child: Navigator( - onPopPage: _onPopPage, - initialRoute: '/home-content', - onGenerateRoute: _onGenerateRoute, - observers: [TolyNavigatorObservers()], - ), - ); - } - - Route _onGenerateRoute(RouteSettings settings) { - switch (settings.name) { - case '/home-content': - return MaterialPageRoute( - builder: (_) => const HomeContent(), settings: settings); - case "/red": - return MaterialPageRoute(builder: (_) => const RedPage(), settings: settings); - case "/yellow": - return MaterialPageRoute( - builder: (_) => const YellowPage(), settings: settings); - case "/green": - return MaterialPageRoute( - builder: (_) => const GreenPage(), settings: settings); - default: - return MaterialPageRoute( - builder: (_) => const HomeContent(), settings: settings); - } - } - - bool _onPopPage(Route route, result) { - print('----_onPopPage-----'); - return true; - } -} - -//路由监听器 -class TolyNavigatorObservers extends NavigatorObserver { - @override - void didPush(Route route, Route? previousRoute) { - print( - '--didPush:--route:--${route.settings}--previousRoute:--${previousRoute?.settings}'); - } - - @override - void didStopUserGesture() { - print('--didStopUserGesture:--'); - } - - @override - void didStartUserGesture(Route route, Route? previousRoute) { - print( - '--didStartUserGesture:--route:--${route.settings}--previousRoute:--${previousRoute?.settings}'); - } - - @override - void didReplace({Route? newRoute, Route? oldRoute}) { - print( - '--didReplace:--newRoute:--${newRoute?.settings}--oldRoute:--${oldRoute?.settings}'); - } - - @override - void didRemove(Route? route, Route? previousRoute) { - print( - '--didRemove:--route:--${route?.settings}--previousRoute:--${previousRoute?.settings}'); - } - - @override - void didPop(Route route, Route? previousRoute) { - print( - '--didPop:--route:--${route.settings}--previousRoute:--${previousRoute?.settings}'); - } -} - -class HomeContent extends StatelessWidget { - const HomeContent({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.red, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - ), - child: const Text('to red'), - onPressed: () { - Navigator.pushNamed(context, '/red'); - }, - ), - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.yellow, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - ), - child: const Text('to yellow'), - onPressed: () { - Navigator.pushNamed(context, '/yellow'); - }, - ), - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.green, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - ), - child: const Text('to yellow'), - onPressed: () { - Navigator.pushNamed(context, '/green'); - }, - ) - ], - ), - ], - ); - } -} - -class RedPage extends StatelessWidget { - const RedPage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text("RedPage"), - ), - body: Container( - color: Colors.red, - ), - ); - } -} - -class YellowPage extends StatelessWidget { - const YellowPage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text("YellowPage"), - ), - body: Container( - color: Colors.yellow, - ), - ); - } -} - -class GreenPage extends StatelessWidget { - const GreenPage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text("GreenPage"), - ), - body: Container( - color: Colors.green, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_de_DE.json deleted file mode 100644 index d0a10392b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "Verschachtelte Scrollansicht", - "info": "Wird zur Behandlung des verschachtelten Scrollens mehrerer Ansichten verwendet. Es können Kopf, Scroll-Controller, Scrollrichtung usw. angegeben werden. Dabei muss der Körper eine scrollbare Komponente sein.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von NestedScrollView", - "desc": [ - "【controller】 : Scroll-Controller 【ScrollController】", - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【reverse】 : Umgekehrt 【bool】", - "【physics】 : Scrollstil 【ScrollPhysics】", - "【dragStartBehavior】 : Startverhalten beim Ziehen 【DragStartBehavior】", - "【headerSliverBuilder】 : *Kopfkonstruktor 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *Inhalt 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_en_US.json deleted file mode 100644 index e2f92a4bf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "Nested Scroll View", - "info": "Used for handling nested scrolling of multiple views, can specify the header, scroll controller, scroll direction, etc., where the body must be a scrollable type of component.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of NestedScrollView", - "desc": [ - "【controller】 : Scroll Controller 【ScrollController】", - "【scrollDirection】 : Scroll Direction 【Axis】", - "【reverse】 : Whether to Reverse 【bool】", - "【physics】 : Scroll Physics 【ScrollPhysics】", - "【dragStartBehavior】 : Drag Start Behavior 【DragStartBehavior】", - "【headerSliverBuilder】 : *Header Builder 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *Content 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_es_ES.json deleted file mode 100644 index 3650d9638..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "Vista de desplazamiento anidada", - "info": "Utilizado para manejar el desplazamiento anidado de múltiples vistas, se puede especificar la cabecera, el controlador de desplazamiento, la dirección de desplazamiento, etc., donde el cuerpo debe ser un componente de tipo desplazable.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de NestedScrollView", - "desc": [ - "【controller】 : Controlador de desplazamiento 【ScrollController】", - "【scrollDirection】 : Dirección de desplazamiento 【Axis】", - "【reverse】 : Invertir 【bool】", - "【physics】 : Estilo de desplazamiento 【ScrollPhysics】", - "【dragStartBehavior】 : Comportamiento de inicio de arrastre 【DragStartBehavior】", - "【headerSliverBuilder】 : *Constructor de cabecera 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *Contenido 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_fr_FR.json deleted file mode 100644 index b2956b13a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "Vue de défilement imbriquée", - "info": "Utilisé pour gérer le défilement imbriqué de plusieurs vues, peut spécifier l'en-tête, le contrôleur de défilement, la direction de défilement, etc., où le corps doit être un composant de type défilable.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de NestedScrollView", - "desc": [ - "【controller】 : Contrôleur de défilement 【ScrollController】", - "【scrollDirection】 : Direction de défilement 【Axis】", - "【reverse】 : Inverser 【bool】", - "【physics】 : Style de défilement 【ScrollPhysics】", - "【dragStartBehavior】 : Comportement de début de glissement 【DragStartBehavior】", - "【headerSliverBuilder】 : *Constructeur d'en-tête 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *Contenu 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_it_IT.json deleted file mode 100644 index ad1bc771b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "Vista di scorrimento annidata", - "info": "Utilizzato per gestire lo scorrimento annidato di più viste, è possibile specificare l'intestazione, il controller di scorrimento, la direzione di scorrimento, ecc., dove il corpo deve essere un componente di tipo scorrevole.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di NestedScrollView", - "desc": [ - "【controller】 : Controller di scorrimento 【ScrollController】", - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【reverse】 : Se invertire 【bool】", - "【physics】 : Stile di scorrimento 【ScrollPhysics】", - "【dragStartBehavior】 : Comportamento di inizio trascinamento 【DragStartBehavior】", - "【headerSliverBuilder】 : *Costruttore di intestazione 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *Contenuto 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ja_JP.json deleted file mode 100644 index 73f25d989..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "ネストされたスクロールビュー", - "info": "複数のビューのスクロールネスト処理に使用されます。ヘッダー、スクロールコントローラー、スクロール方向などを指定できます。bodyはスクロール可能なタイプのコンポーネントでなければなりません。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollViewの基本使い方", - "desc": [ - "【controller】 : スクロールコントローラー 【ScrollController】", - "【scrollDirection】 : スクロール方向 【Axis】", - "【reverse】 : 逆方向かどうか 【bool】", - "【physics】 : スクロールスタイル 【ScrollPhysics】", - "【dragStartBehavior】 : ドラッグ開始動作 【DragStartBehavior】", - "【headerSliverBuilder】 : *ヘッダービルダー 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *コンテンツ 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ko_KR.json deleted file mode 100644 index de4bdc44a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "중첩 스크롤 뷰", - "info": "여러 뷰의 스크롤 중첩 처리를 위해 사용되며, 헤더, 스크롤 컨트롤러, 스크롤 방향 등을 지정할 수 있습니다. 이때 body는 반드시 스크롤 가능한 타입의 컴포넌트여야 합니다.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollView 기본 사용법", - "desc": [ - "【controller】 : 스크롤 컨트롤러 【ScrollController】", - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【reverse】 : 역방향 여부 【bool】", - "【physics】 : 스크롤 스타일 【ScrollPhysics】", - "【dragStartBehavior】 : 드래그 시작 동작 【DragStartBehavior】", - "【headerSliverBuilder】 : *헤더 빌더 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *내용 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_pt_PT.json deleted file mode 100644 index 183b33074..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "Visão de Rolagem Aninhada", - "info": "Usado para o tratamento de rolagem aninhada de várias visualizações, pode especificar o cabeçalho, controlador de rolagem, direção de rolagem, etc., onde o corpo deve ser um componente do tipo rolável.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do NestedScrollView", - "desc": [ - "【controller】 : Controlador de Rolagem 【ScrollController】", - "【scrollDirection】 : Direção de Rolagem 【Axis】", - "【reverse】 : Inverter 【bool】", - "【physics】 : Estilo de Rolagem 【ScrollPhysics】", - "【dragStartBehavior】 : Comportamento de Início de Arrasto 【DragStartBehavior】", - "【headerSliverBuilder】 : *Construtor de Cabeçalho 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *Conteúdo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ru_RU.json deleted file mode 100644 index 10f3aa2ed..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "Вложенное прокручиваемое представление", - "info": "Используется для обработки вложенной прокрутки нескольких представлений, можно указать заголовок, контроллер прокрутки, направление прокрутки и т.д., где тело должно быть компонентом с возможностью прокрутки.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование NestedScrollView", - "desc": [ - "【controller】 : Контроллер прокрутки 【ScrollController】", - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【reverse】 : Обратное направление 【bool】", - "【physics】 : Стиль прокрутки 【ScrollPhysics】", - "【dragStartBehavior】 : Поведение начала перетаскивания 【DragStartBehavior】", - "【headerSliverBuilder】 : *Конструктор заголовка 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *Содержимое 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_zh-CN.json deleted file mode 100644 index 30e70e894..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "嵌套滑动视图", - "info": "用于多个视图滑动嵌套处理,可以指定头部、滑动控制器、滑动方向等,其中body必须是可滑动类型的组件。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollView基本用法", - "desc": [ - "【controller】 : 滑动控制器 【ScrollController】", - "【scrollDirection】 : 滑动方向 【Axis】", - "【reverse】 : 是否反向 【bool】", - "【physics】 : 滑顶样式 【ScrollPhysics】", - "【dragStartBehavior】 : 开始拖动行为 【DragStartBehavior】", - "【headerSliverBuilder】 : *头部构造器 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *内容 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/node1_base.dart deleted file mode 100644 index d49d94cae..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/node1_base.dart +++ /dev/null @@ -1,89 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/6/16 -/// contact me by email 1981462002@qq.com - - -class NestedScrollViewDemo extends StatelessWidget { - final List _tabs = const ['风神传', '封妖志', "幻将录", "永恒传说"]; - - const NestedScrollViewDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height - 200, - child: Scaffold( - body: DefaultTabController( - length: _tabs.length, - child: NestedScrollView( - headerSliverBuilder: - (BuildContext context, bool innerBoxIsScrolled) { - return [ - SliverOverlapAbsorber( - handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), - sliver: SliverAppBar( - title: const Text('旷古奇书'), - pinned: true, - elevation: 6, //影深 - expandedHeight: 220.0, - forceElevated: innerBoxIsScrolled, //为true时展开有阴影 - flexibleSpace: FlexibleSpaceBar( - background: Image.asset( - "assets/images/wy_300x200_filter.webp", - fit: BoxFit.cover, - ), - ), - bottom: TabBar( - tabs: _tabs - .map((String name) => Tab(text: name,)) - .toList(), - ), - ), - ), - ]; - }, - body: _buildTabBarView(), - ), - ), - )); - } - - Widget _buildTabBarView() { - return TabBarView( - children: _tabs.map((String name) { - return SafeArea( - top: false, - bottom: false, - child: Builder( - builder: (BuildContext context) { - return CustomScrollView( - key: PageStorageKey(name), - slivers: [ - SliverOverlapInjector( - handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), - ), - SliverPadding( - padding: const EdgeInsets.all(8.0), - sliver: SliverFixedExtentList( - itemExtent: 48.0, - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) { - return ListTile( - title: Text('《$name》 第 $index章'), - ); - }, - childCount: 50, - ), - ), - ), - ], - ); - }, - ), - ); - }).toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_de_DE.json deleted file mode 100644 index 26c0e4a63..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_de_DE.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "Umrandeter Button", - "info": "Material-stilisiertes Schaltflächenelement mit Rahmen, ähnlich wie OutlineButton. Attribute wie Rahmen, Farbe, Schatten usw. können über Stile geändert werden.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von OutlinedButton", - "desc": [ - "【child】 : Schaltflächeninhalt 【Widget】", - "【onPressed】 : Klickereignis 【VoidCallback】", - "【onLongPress】 : Langdrückereignis 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Stil von OutlinedButton", - "desc": [ - "【style】 : Schaltflächenstil 【ButtonStyle】", - "【focusNode】 : Fokus 【FocusNode】", - "【clipBehavior】 : Zuschneideverhalten 【Clip】", - "【autofocus】 : Autofokus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_en_US.json deleted file mode 100644 index 01a2b1ec7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_en_US.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "Outlined Button", - "info": "A Material-style outlined button, similar in behavior to OutlineButton. Properties such as border, color, and shadow can be changed through styling.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of OutlinedButton", - "desc": [ - "【child】: Button content 【Widget】", - "【onPressed】: Click event 【VoidCallback】", - "【onLongPress】: Long press event 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "OutlinedButton Style", - "desc": [ - "【style】: Button style 【ButtonStyle】", - "【focusNode】: Focus 【FocusNode】", - "【clipBehavior】: Clip behavior 【Clip】", - "【autofocus】: Autofocus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_es_ES.json deleted file mode 100644 index 567b7f319..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_es_ES.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "Botón con borde", - "info": "Botón de estilo Material con borde, similar a OutlineButton. Se pueden cambiar propiedades como el borde, el color, la sombra, etc., mediante estilos.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de OutlinedButton", - "desc": [ - "【child】 : Contenido del botón 【Widget】", - "【onPressed】 : Evento de clic 【VoidCallback】", - "【onLongPress】 : Evento de pulsación prolongada 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Estilo de OutlinedButton", - "desc": [ - "【style】 : Estilo del botón 【ButtonStyle】", - "【focusNode】 : Foco 【FocusNode】", - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【autofocus】 : Enfoque automático 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_fr_FR.json deleted file mode 100644 index 143ee767f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_fr_FR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "Bouton bordé", - "info": "Bouton de style Material avec bordure, similaire à OutlineButton. Les propriétés telles que la bordure, la couleur, l'ombre, etc., peuvent être modifiées via le style.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de OutlinedButton", - "desc": [ - "【child】 : Contenu du bouton 【Widget】", - "【onPressed】 : Événement de clic 【VoidCallback】", - "【onLongPress】 : Événement de pression longue 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Style de OutlinedButton", - "desc": [ - "【style】 : Style du bouton 【ButtonStyle】", - "【focusNode】 : Focus 【FocusNode】", - "【clipBehavior】 : Comportement de découpage 【Clip】", - "【autofocus】 : Mise au point automatique 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_it_IT.json deleted file mode 100644 index e0e9e9751..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_it_IT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "Pulsante con bordo", - "info": "Pulsante in stile Material con bordo, simile a OutlineButton. È possibile modificare proprietà come il bordo, il colore, l'ombra, ecc. tramite lo stile.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di OutlinedButton", - "desc": [ - "【child】 : Contenuto del pulsante 【Widget】", - "【onPressed】 : Evento di clic 【VoidCallback】", - "【onLongPress】 : Evento di pressione prolungata 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Stile di OutlinedButton", - "desc": [ - "【style】 : Stile del pulsante 【ButtonStyle】", - "【focusNode】 : Fuoco 【FocusNode】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【autofocus】 : Autofocus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ja_JP.json deleted file mode 100644 index 04a4e01da..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ja_JP.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "枠線ボタン", - "info": "Materialスタイルの枠線ボタンで、OutlineButtonと同様の動作をします。スタイルを変更して、枠線、色、影などのプロパティを変更できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OutlinedButtonの基本使用", - "desc": [ - "【child】 : ボタンの内容 【Widget】", - "【onPressed】 : クリックイベント 【VoidCallback】", - "【onLongPress】 : 長押しイベント 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "OutlinedButtonのスタイル", - "desc": [ - "【style】 : ボタンのスタイル 【ButtonStyle】", - "【focusNode】 : フォーカス 【FocusNode】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【autofocus】 : 自動フォーカス 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ko_KR.json deleted file mode 100644 index 08ef6379e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ko_KR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "테두리 버튼", - "info": "Material 스타일의 테두리 버튼으로, OutlineButton과 유사하게 동작합니다. 스타일을 통해 테두리, 색상, 그림자 등의 속성을 변경할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OutlinedButton 기본 사용법", - "desc": [ - "【child】 : 버튼 내용 【Widget】", - "【onPressed】 : 클릭 이벤트 【VoidCallback】", - "【onLongPress】 : 길게 누르기 이벤트 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "OutlinedButton 스타일", - "desc": [ - "【style】 : 버튼 스타일 【ButtonStyle】", - "【focusNode】 : 포커스 【FocusNode】", - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【autofocus】 : 자동 포커스 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_pt_PT.json deleted file mode 100644 index c744c26f2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_pt_PT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "Botão com Contorno", - "info": "Botão com contorno no estilo Material, semelhante ao OutlineButton. Pode alterar propriedades como contorno, cor, sombra, etc., através de estilos.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do OutlinedButton", - "desc": [ - "【child】 : Conteúdo do botão 【Widget】", - "【onPressed】 : Evento de clique 【VoidCallback】", - "【onLongPress】 : Evento de pressionar longo 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Estilo do OutlinedButton", - "desc": [ - "【style】 : Estilo do botão 【ButtonStyle】", - "【focusNode】 : Foco 【FocusNode】", - "【clipBehavior】 : Comportamento de corte 【Clip】", - "【autofocus】 : Foco automático 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ru_RU.json deleted file mode 100644 index c6dbfa19c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ru_RU.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "Кнопка с контуром", - "info": "Кнопка в стиле Material с контуром, аналогичная OutlineButton. Свойства, такие как контур, цвет, тень, могут быть изменены через стили.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование OutlinedButton", - "desc": [ - "【child】 : Содержимое кнопки 【Widget】", - "【onPressed】 : Событие нажатия 【VoidCallback】", - "【onLongPress】 : Событие длительного нажатия 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Стиль OutlinedButton", - "desc": [ - "【style】 : Стиль кнопки 【ButtonStyle】", - "【focusNode】 : Фокус 【FocusNode】", - "【clipBehavior】 : Поведение обрезки 【Clip】", - "【autofocus】 : Автофокус 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_zh-CN.json deleted file mode 100644 index 6c10b7c3c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_zh-CN.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "边框按钮", - "info": "Material风格的边线按钮,表现和 OutlineButton 类似。可通过样式更改边框、颜色、阴影等属性。", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OutlinedButton基本使用", - "desc": [ - "【child】 : 按钮内容 【Widget】", - "【onPressed】 : 点击事件 【VoidCallback】", - "【onLongPress】 : 长按事件 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "OutlinedButton样式", - "desc": [ - "【style】 : 按钮样式 【ButtonStyle】", - "【focusNode】 : 焦点 【FocusNode】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【autofocus】 : 自动聚焦 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/node1_base.dart deleted file mode 100644 index 01e46cec0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/node1_base.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class OutlinedButtonDemo extends StatelessWidget { - const OutlinedButtonDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - height: 60, - child: Wrap( - spacing: 20, - children: [ - OutlinedButton( - child: const Text('OutlinedButton'), - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - const OutlinedButton( - child: Text('禁用按钮'), - onPressed: null, - onLongPress: null, - ), - ], - )); - } - - void _onPressed() {} - - void _onLongPress() {} -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/node2_style.dart b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/node2_style.dart deleted file mode 100644 index 3564a741f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/node2_style.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class OutlinedButtonStyleDemo extends StatelessWidget { - const OutlinedButtonStyleDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - child: Wrap( - spacing: 10, - children: [ - OutlinedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.orange, - foregroundColor: Colors.white, - elevation: 2, - shadowColor: Colors.orangeAccent), - child: const Text('ElevatedButton样式'), - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - OutlinedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.white, - foregroundColor: Colors.black, - side: const BorderSide(color: Colors.blue,width: 1), - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)) - ), - // elevation: 2, - shadowColor: Colors.orangeAccent), - child: const Text('ElevatedButton边线'), - autofocus: false, - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - ], - ), - ); - } - - void _onPressed() {} - - void _onLongPress() {} -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_de_DE.json deleted file mode 100644 index 4a34c1f33..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "Schwebende Komponente", - "info": "Ermöglicht die schwebende Anzeige von Komponenten in der gesamten Anwendung, Komponenten können hinzugefügt oder entfernt werden, sie haben einen unabhängig verwalteten Stack.", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Overlay", - "desc": [ - "Overlay.of(context).insert fügt eine globale Komponente ein" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_en_US.json deleted file mode 100644 index 57430ba3c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "Floating Component", - "info": "Can display components in a floating manner across the entire application, allowing components to be added or removed, with an independently managed stack.", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Overlay", - "desc": [ - "Overlay.of(context).insert inserts a global component" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_es_ES.json deleted file mode 100644 index 61645ccc9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "Componente Flotante", - "info": "Permite mostrar componentes de forma flotante en toda la aplicación, se pueden agregar o eliminar componentes, tienen una pila gestionada de forma independiente.", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de Overlay", - "desc": [ - "Overlay.of(context).insert inserta un componente global" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_fr_FR.json deleted file mode 100644 index 811e9797f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "Composant flottant", - "info": "Permet d'afficher un composant en mode flottant dans toute l'application, peut ajouter ou supprimer des composants, ils ont une pile gérée indépendamment.", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'Overlay", - "desc": [ - "Overlay.of(context).insert insère un composant global" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_it_IT.json deleted file mode 100644 index 8cd793adc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "Componente Sovrapposto", - "info": "Consente di visualizzare i componenti in sovrapposizione su tutta l'applicazione, aggiungere o rimuovere componenti, che hanno una pila gestita in modo indipendente.", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di Overlay", - "desc": [ - "Overlay.of(context).insert inserisce un componente globale" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ja_JP.json deleted file mode 100644 index 8aa728b4a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "フローティングコンポーネント", - "info": "コンポーネントをアプリ全体でフローティング表示することができ、コンポーネントを追加または削除することができます。これらは独立して管理されるスタックを持っています。", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Overlayの基本使用", - "desc": [ - "Overlay.of(context).insertでグローバルコンポーネントを挿入" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ko_KR.json deleted file mode 100644 index 9fd065af9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "플로팅 컴포넌트", - "info": "컴포넌트를 전체 애플리케이션에서 플로팅으로 표시할 수 있으며, 컴포넌트를 추가하거나 제거할 수 있고, 독립적으로 관리되는 스택을 가집니다.", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Overlay 기본 사용법", - "desc": [ - "Overlay.of(context).insert로 전역 컴포넌트 삽입" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_pt_PT.json deleted file mode 100644 index 0c59436be..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "Componente Flutuante", - "info": "Permite exibir componentes de forma flutuante em toda a aplicação, podendo adicionar ou remover componentes, eles têm uma pilha de gerenciamento independente.", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Overlay", - "desc": [ - "Overlay.of(context).insert insere um componente global" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ru_RU.json deleted file mode 100644 index 6e3895e9d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "Плавающий компонент", - "info": "Позволяет отображать компоненты поверх всего приложения, добавлять или удалять компоненты, они имеют независимо управляемый стек.", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Overlay", - "desc": [ - "Overlay.of(context).insert вставляет глобальный компонент" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_zh-CN.json deleted file mode 100644 index a582e71e3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "悬浮组件", - "info": "可以将组件在全应用中进行悬浮显示,能够添加或移除组件,它们有独立管理的栈。", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Overlay基本使用", - "desc": [ - "Overlay.of(context).insert插入全局组件" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/node1_base.dart deleted file mode 100644 index 54d8d481d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/node1_base.dart +++ /dev/null @@ -1,100 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - - -class CustomOverlay extends StatelessWidget { - const CustomOverlay({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - children: [ - SizedBox( - height: 50, - child: RawMaterialButton( - elevation: 2, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - fillColor: Colors.blue, - splashColor: Colors.orange, - textStyle: const TextStyle(color: Colors.white), - child: const Icon(Icons.add), - onPressed: ()=>showFloating(context), - ), - ), - const SizedBox( - height: 50, - child: RawMaterialButton( - elevation: 2, - shape: CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - fillColor: Colors.red, - splashColor: Colors.orange, - textStyle: TextStyle(color: Colors.white), - child: Icon(Icons.remove), - onPressed: hideFloating, - ), - ), - ], - ); - } -} - -bool show = false; -Offset offset = const Offset(200, 200); - -const double radius = 60; - -var entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - left: offset.dx, - top: offset.dy, - child: _buildFloating(), - ), - ], - )); - -///绘制悬浮控件 -_buildFloating() => GestureDetector( - onPanDown: (details) { - offset = details.globalPosition - const Offset(radius / 2, radius / 2); - entry.markNeedsBuild(); - }, - onPanUpdate: (DragUpdateDetails details) { - offset = offset + details.delta; - entry.markNeedsBuild(); - }, - onLongPress: hideFloating, - child: Material( - color: Colors.transparent, - child: Container( - height: radius, - width: radius, - alignment: Alignment.center, - decoration: const BoxDecoration( - shape: BoxShape.circle, - image: DecorationImage( - image: AssetImage('assets/images/icon_head.webp')), - ), - ), - )); - -showFloating(BuildContext context) { - if (!show) { - Overlay.of(context)?.insert(entry); - show = true; - } -} - -hideFloating() { - if (show) { - entry.remove(); - show = false; - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_de_DE.json deleted file mode 100644 index 3199650a8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_de_DE.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "Swipe-Seite", - "info": "Enthält mehrere Komponentenseiten, zwischen denen durch Wischen gewechselt werden kann. Es können Attribute wie Wischrichtung, ob umgekehrt, Wischcontroller usw. angegeben werden.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PageView", - "desc": [ - "【children】 : Liste der Unterkomponenten 【List】", - "【onPageChanged】 : Klickereignis 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Wischrichtung von PageView", - "desc": [ - "【scrollDirection】 : Wischrichtung 【Axis】", - "【reverse】 : Ob umgekehrt 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Einfache Verwendung des PageView-Controllers", - "desc": [ - "【controller】 : Seitencontroller 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_en_US.json deleted file mode 100644 index f886e9db1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_en_US.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "Swipe Page", - "info": "It can accommodate multiple component pages, and you can swipe to switch between them. You can specify properties such as the direction of the swipe, whether it is reversed, and the swipe controller.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PageView", - "desc": [ - "【children】 : List of child components 【List】", - "【onPageChanged】 : Click event 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Swipe Direction of PageView", - "desc": [ - "【scrollDirection】 : Swipe direction 【Axis】", - "【reverse】 : Whether to reverse 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Simple Use of PageView Controller", - "desc": [ - "【controller】 : Page controller 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_es_ES.json deleted file mode 100644 index a1c218402..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_es_ES.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "Deslizar página", - "info": "Contiene múltiples páginas de componentes, permite cambiar entre ellas deslizando, y se pueden especificar propiedades como la dirección del deslizamiento, si es inverso, el controlador de deslizamiento, etc.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PageView", - "desc": [ - "【children】 : Lista de componentes hijos 【List】", - "【onPageChanged】 : Evento de clic 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Dirección de deslizamiento de PageView", - "desc": [ - "【scrollDirection】 : Dirección de deslizamiento 【Axis】", - "【reverse】 : Si es inverso 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Uso simple del controlador de PageView", - "desc": [ - "【controller】 : Controlador de página 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_fr_FR.json deleted file mode 100644 index 3463d157f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_fr_FR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "Glissement de page", - "info": "Contient plusieurs pages de composants, permet de les faire glisser pour les changer, et permet de spécifier la direction du glissement, l'inversion, le contrôleur de glissement, etc.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PageView", - "desc": [ - "【children】 : Liste des composants enfants 【List】", - "【onPageChanged】 : Événement de clic 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direction de glissement de PageView", - "desc": [ - "【scrollDirection】 : Direction de glissement 【Axis】", - "【reverse】 : Inversion 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Utilisation simple du contrôleur de PageView", - "desc": [ - "【controller】 : Contrôleur de page 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_it_IT.json deleted file mode 100644 index 385a3183e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_it_IT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "Scorrimento Pagina", - "info": "Contiene più componenti di pagina, consente di scorrere tra di essi, è possibile specificare la direzione di scorrimento, se invertire, il controller di scorrimento e altre proprietà.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di PageView", - "desc": [ - "【children】 : Lista dei componenti figli 【List】", - "【onPageChanged】 : Evento di clic 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direzione di scorrimento di PageView", - "desc": [ - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【reverse】 : Se invertire 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Uso semplice del controller di PageView", - "desc": [ - "【controller】 : Controller della pagina 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ja_JP.json deleted file mode 100644 index 7741210a4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ja_JP.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "スワイプページ", - "info": "複数のコンポーネントページを収容し、それらをスワイプして切り替えることができます。スワイプの方向、逆方向にするかどうか、スワイプコントローラーなどの属性を指定できます。", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PageViewの基本使用", - "desc": [ - "【children】 : 子コンポーネントリスト 【List】", - "【onPageChanged】 : クリックイベント 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "PageViewのスワイプ方向", - "desc": [ - "【scrollDirection】 : スワイプ方向 【Axis】", - "【reverse】 : 逆方向にするかどうか 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "PageViewコントローラーの簡単な使用", - "desc": [ - "【controller】 : ページコントローラー 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ko_KR.json deleted file mode 100644 index 345c08edd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ko_KR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "스와이프 페이지", - "info": "여러 컴포넌트 페이지를 수용하며, 슬라이딩 전환을 할 수 있습니다. 슬라이딩 방향, 역방향 여부, 슬라이딩 컨트롤러 등의 속성을 지정할 수 있습니다.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PageView 기본 사용법", - "desc": [ - "【children】 : 자식 컴포넌트 리스트 【List】", - "【onPageChanged】 : 클릭 이벤트 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "PageView 슬라이딩 방향", - "desc": [ - "【scrollDirection】 : 슬라이딩 방향 【Axis】", - "【reverse】 : 역방향 여부 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "PageView 컨트롤러 간단 사용법", - "desc": [ - "【controller】 : 페이지 컨트롤러 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_pt_PT.json deleted file mode 100644 index e9da0fde7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_pt_PT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "Deslizar Página", - "info": "Acomoda várias páginas de componentes, permite alternar entre elas deslizando, pode especificar a direção do deslize, se é reverso, controlador de deslize e outras propriedades.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do PageView", - "desc": [ - "【children】 : Lista de componentes filhos 【List】", - "【onPageChanged】 : Evento de clique 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direção de deslize do PageView", - "desc": [ - "【scrollDirection】 : Direção de deslize 【Axis】", - "【reverse】 : Se é reverso 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Uso simples do controlador do PageView", - "desc": [ - "【controller】 : Controlador de página 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ru_RU.json deleted file mode 100644 index 521e3d14e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ru_RU.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "Скользящая страница", - "info": "Содержит несколько компонентов страниц, позволяет переключаться между ними с помощью скольжения, можно указать направление скольжения, обратное направление, контроллер скольжения и другие свойства.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PageView", - "desc": [ - "【children】 : Список дочерних компонентов 【List】", - "【onPageChanged】 : Событие клика 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Направление скольжения PageView", - "desc": [ - "【scrollDirection】 : Направление скольжения 【Axis】", - "【reverse】 : Обратное направление 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Простое использование контроллера PageView", - "desc": [ - "【controller】 : Контроллер страницы 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_zh-CN.json deleted file mode 100644 index de89d037a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_zh-CN.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "滑页", - "info": "容纳多个组件页面,可对它们进行滑动切换,可指定滑动的方向、是否反向、滑动控制器等属性。", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PageView基本使用", - "desc": [ - "【children】 : 子组件列表 【List】", - "【onPageChanged】 : 点击事件 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "PageView滑动方向", - "desc": [ - "【scrollDirection】 : 滑动方向 【Axis】", - "【reverse】 : 是否反向 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "PageView控制器简单实用", - "desc": [ - "【controller】 : 页面控制器 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/PageView/node1_base.dart deleted file mode 100644 index 8d046efa1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/node1_base.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-28 -/// contact me by email 1981462002@qq.com - -class CustomPageView extends StatelessWidget { - const CustomPageView({super.key}); - - List get data => [ - Colors.green[50]!, - Colors.green[100]!, - Colors.green[200]!, - Colors.green[300]!, - Colors.green[400]!, - Colors.green[500]!, - Colors.green[600]!, - Colors.green[700]!, - Colors.green[800]!, - Colors.green[900]!, - ]; - - TextStyle get textStyle => - const TextStyle(color: Colors.white, fontSize: 24, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ), - ]); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 150, - child: PageView( - onPageChanged: (position) => print(position), - children: data - .map((color) => Container( - alignment: Alignment.center, - width: 90, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - )) - .toList(), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/node2_direction.dart b/modules/widget_system/widgets/lib/StatefulWidget/PageView/node2_direction.dart deleted file mode 100644 index 95139a7dd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/node2_direction.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-28 -/// contact me by email 1981462002@qq.com - -class DirectionPageView extends StatelessWidget { - const DirectionPageView({super.key}); - - List get data => [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - TextStyle get textStyle => - const TextStyle(color: Colors.white, fontSize: 24, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ), - ]); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 150, - child: PageView( - scrollDirection: Axis.vertical, - reverse: true, - onPageChanged: (position) { - print(position); - }, - children: data - .map((color) => Container( - alignment: Alignment.center, - width: 90, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - )) - .toList(), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/node3_controller.dart b/modules/widget_system/widgets/lib/StatefulWidget/PageView/node3_controller.dart deleted file mode 100644 index c7e0d62a0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/node3_controller.dart +++ /dev/null @@ -1,78 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-28 -/// contact me by email 1981462002@qq.com - -class CtrlPageView extends StatefulWidget { - const CtrlPageView({Key? key}) : super(key: key); - - @override - _CtrlPageViewState createState() => _CtrlPageViewState(); -} - -class _CtrlPageViewState extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - late PageController _controller; - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - - @override - void initState() { - super.initState(); - _controller=PageController( - viewportFraction: 0.8, - initialPage: (data.length/2).round() - ); - } - TextStyle get textStyle => - const TextStyle(color: Colors.white, fontSize: 24, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ), - ]); - @override - Widget build(BuildContext context) { - return SizedBox( - height: 150, - child: PageView( - controller: _controller, - onPageChanged: (position) { - print(position); - }, - children: data - .map((color) => - Container( - alignment: Alignment.center, - width: 90, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - )) - .toList(), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_de_DE.json deleted file mode 100644 index 9f7f1ee81..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_de_DE.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "Seitenweise Tabelle", - "info": "Eine funktionsreiche, seitenweise Tabellenkomponente, die die Seitenzahl, Sortierung und das Wechseln zwischen den Seiten ermöglicht.", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Verwendung von PaginatedDataTable", - "desc": [ - "【header】 : Tabellenname 【Widget】", - "【rowsPerPage】 : Anzahl der Datensätze pro Seite 【int】", - "【actions】 : Aktionskomponenten 【List】", - "【columns】 : Datenspalten 【List】", - "【sortColumnIndex】 : Index der Sortierspalte 【int】", - "【sortAscending】 : Aufsteigend sortieren 【bool】", - "【onSelectAll】 : Rückruf für Alle auswählen 【ValueSetter】", - "【onRowsPerPageChanged】 : Listener für Seitenänderungen 【ValueChanged】", - "【availableRowsPerPage】 : Verfügbare Seitenlisten 【List】", - "【source】 : Datenquelle 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_en_US.json deleted file mode 100644 index add383634..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_en_US.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "Paginated Table", - "info": "A feature-rich paginated table component that allows specifying the number of pages, sorting, and switching between pages.", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PaginatedDataTable Usage", - "desc": [ - "【header】 : Table Name 【Widget】", - "【rowsPerPage】 : Number of records per page 【int】", - "【actions】 : Action components 【List】", - "【columns】 : Data columns 【List】", - "【sortColumnIndex】 : Sort column index 【int】", - "【sortAscending】 : Whether ascending 【bool】", - "【onSelectAll】 : Select all callback 【ValueSetter】", - "【onRowsPerPageChanged】 : Page change listener 【ValueChanged】", - "【availableRowsPerPage】 : Available page list 【List】", - "【source】 : Data source 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_es_ES.json deleted file mode 100644 index 96607e25f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_es_ES.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "Tabla Paginada", - "info": "Un componente de tabla paginada rico en funciones, que permite especificar el número de páginas, el orden, y la navegación entre páginas.", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de PaginatedDataTable", - "desc": [ - "【header】 : Nombre de la tabla 【Widget】", - "【rowsPerPage】 : Número de registros por página 【int】", - "【actions】 : Componentes de acción 【List】", - "【columns】 : Columnas de datos 【List】", - "【sortColumnIndex】 : Índice de la columna de ordenación 【int】", - "【sortAscending】 : Orden ascendente 【bool】", - "【onSelectAll】 : Callback de selección total 【ValueSetter】", - "【onRowsPerPageChanged】 : Listener de cambio de paginación 【ValueChanged】", - "【availableRowsPerPage】 : Lista de paginación disponible 【List】", - "【source】 : Fuente de datos 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_fr_FR.json deleted file mode 100644 index 43e77c18d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_fr_FR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "Tableau paginé", - "info": "Un composant de tableau paginé riche en fonctionnalités, permettant de spécifier le nombre de pages, le tri, et la navigation entre les pages.", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de PaginatedDataTable", - "desc": [ - "【header】 : Nom du tableau 【Widget】", - "【rowsPerPage】 : Nombre d'enregistrements par page 【int】", - "【actions】 : Composants d'action 【List】", - "【columns】 : Colonnes de données 【List】", - "【sortColumnIndex】 : Index de la colonne de tri 【int】", - "【sortAscending】 : Ordre croissant 【bool】", - "【onSelectAll】 : Rappel de sélection totale 【ValueSetter】", - "【onRowsPerPageChanged】 : Écouteur de changement de pagination 【ValueChanged】", - "【availableRowsPerPage】 : Liste des paginations disponibles 【List】", - "【source】 : Source de données 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_it_IT.json deleted file mode 100644 index 47a368e5e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_it_IT.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "Tabella Paginabile", - "info": "Un componente di tabella ricco di funzionalità, con paginazione, ordinamento e navigazione tra le pagine.", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di PaginatedDataTable", - "desc": [ - "【header】 : Nome della tabella 【Widget】", - "【rowsPerPage】 : Numero di record per pagina 【int】", - "【actions】 : Componenti di azione 【List】", - "【columns】 : Colonne dei dati 【List】", - "【sortColumnIndex】 : Indice della colonna di ordinamento 【int】", - "【sortAscending】 : Ordinamento crescente 【bool】", - "【onSelectAll】 : Callback per la selezione di tutti 【ValueSetter】", - "【onRowsPerPageChanged】 : Listener per il cambio della paginazione 【ValueChanged】", - "【availableRowsPerPage】 : Lista delle paginazioni disponibili 【List】", - "【source】 : Fonte dei dati 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ja_JP.json deleted file mode 100644 index 4485ba4d4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ja_JP.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "ページネーション可能なテーブル", - "info": "ページネーション数、並び替え、ページの前後切り替えを指定できる機能豊富なページネーション可能なテーブルコンポーネント。", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PaginatedDataTable の使用", - "desc": [ - "【header】 : テーブル名 【Widget】", - "【rowsPerPage】 : 1ページあたりのレコード数 【int】", - "【actions】 : 操作コンポーネント 【List】", - "【columns】 : データ列 【List】", - "【sortColumnIndex】 : 並び替え列のインデックス 【int】", - "【sortAscending】 : 昇順かどうか 【bool】", - "【onSelectAll】 : 全選択コールバック 【ValueSetter】", - "【onRowsPerPageChanged】 : ページネーション変更リスナー 【ValueChanged】", - "【availableRowsPerPage】 : 利用可能なページネーションリスト 【List】", - "【source】 : データソース 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ko_KR.json deleted file mode 100644 index ce3edafc4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ko_KR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "페이지네이션 테이블", - "info": "기능이 풍부한 페이지네이션 테이블 컴포넌트로, 페이지 수, 정렬, 페이지 전환 등을 지정할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PaginatedDataTable 사용", - "desc": [ - "【header】 : 테이블 이름 【Widget】", - "【rowsPerPage】 : 페이지당 레코드 수 【int】", - "【actions】 : 액션 컴포넌트 【List】", - "【columns】 : 데이터 열 【List】", - "【sortColumnIndex】 : 정렬 열 인덱스 【int】", - "【sortAscending】 : 오름차순 여부 【bool】", - "【onSelectAll】 : 전체 선택 콜백 【ValueSetter】", - "【onRowsPerPageChanged】 : 페이지 변경 리스너 【ValueChanged】", - "【availableRowsPerPage】 : 사용 가능한 페이지 목록 【List】", - "【source】 : 데이터 소스 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_pt_PT.json deleted file mode 100644 index a3d105d80..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_pt_PT.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "Tabela Paginada", - "info": "Um componente de tabela paginada rico em funcionalidades, que permite especificar o número de páginas, ordenação, e navegação entre páginas.", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do PaginatedDataTable", - "desc": [ - "【header】 : Nome da tabela 【Widget】", - "【rowsPerPage】 : Número de registros por página 【int】", - "【actions】 : Componentes de ação 【List】", - "【columns】 : Colunas de dados 【List】", - "【sortColumnIndex】 : Índice da coluna de ordenação 【int】", - "【sortAscending】 : Ordenação ascendente 【bool】", - "【onSelectAll】 : Callback de seleção total 【ValueSetter】", - "【onRowsPerPageChanged】 : Listener de mudança de paginação 【ValueChanged】", - "【availableRowsPerPage】 : Lista de paginação disponível 【List】", - "【source】 : Fonte de dados 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ru_RU.json deleted file mode 100644 index c64937f4c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ru_RU.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "Таблица с постраничной навигацией", - "info": "Многофункциональный компонент таблицы с постраничной навигацией, позволяющий указать количество страниц, сортировку и переключение между страницами.", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование PaginatedDataTable", - "desc": [ - "【header】 : Название таблицы 【Widget】", - "【rowsPerPage】 : Количество записей на странице 【int】", - "【actions】 : Компоненты действий 【List】", - "【columns】 : Столбцы данных 【List】", - "【sortColumnIndex】 : Индекс столбца сортировки 【int】", - "【sortAscending】 : Сортировка по возрастанию 【bool】", - "【onSelectAll】 : Обратный вызов для выбора всех 【ValueSetter】", - "【onRowsPerPageChanged】 : Слушатель изменения страницы 【ValueChanged】", - "【availableRowsPerPage】 : Список доступных страниц 【List】", - "【source】 : Источник данных 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_zh-CN.json deleted file mode 100644 index 2eeb0cf84..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_zh-CN.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "可分页表格", - "info": "一个功能丰富的可分页表格组件,可指定分页数、排列、页码前后切换。", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PaginatedDataTable 使用", - "desc": [ - "【header】 : 表名 【Widget】", - "【rowsPerPage】 : 每页记录数 【int】", - "【actions】 : 操作组件 【List】", - "【columns】 : 数据列 【List】", - "【sortColumnIndex】 : 排序列索引 【int】", - "【sortAscending】 : 是否升序 【bool】", - "【onSelectAll】 : 全选回调 【ValueSetter】", - "【onRowsPerPageChanged】 : 分页改变监听 【ValueChanged】", - "【availableRowsPerPage】 : 可用分页列表 【List】", - "【source】 : 数据源 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/node1_base.dart deleted file mode 100644 index 622c38e35..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/node1_base.dart +++ /dev/null @@ -1,207 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class PaginatedDataTableDemo extends StatefulWidget { - const PaginatedDataTableDemo({Key? key}) : super(key: key); - - @override - State createState() => _PaginatedDataTableDemoState(); -} - -class _PaginatedDataTableDemoState extends State { - int _rowsPerPage = 5; - - int _sortColumnIndex = 0; - bool _sortAscending = true; - - final DessertDataSource _dessertsDataSource = DessertDataSource(); - - void sort( - Comparable Function(HeroInfo d) getField, - int columnIndex, - bool ascending, - ) { - _dessertsDataSource.sort(getField, ascending); - setState(() { - _sortColumnIndex = columnIndex; - _sortAscending = ascending; - }); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - width: 350, - child: SingleChildScrollView( - child: PaginatedDataTable( - actions: const [ - IconButton(icon: Icon(Icons.add), onPressed: null), - ], - header: const Text( - '《旷古奇书》-角色预设', - style: TextStyle(color: Colors.blue), - ), - rowsPerPage: _rowsPerPage, - availableRowsPerPage: const [5, 8, 10, 15], - onRowsPerPageChanged: (int? value) { - setState(() { - _rowsPerPage = value ?? 0; - }); - }, - sortColumnIndex: _sortColumnIndex, - sortAscending: _sortAscending, - onSelectAll: _dessertsDataSource._selectAll, - columns: [ - DataColumn( - label: const Text('角色名称'), - onSort: (int columnIndex, bool ascending) => sort( - (HeroInfo d) => d.name, columnIndex, ascending)), - DataColumn( - label: const Text('主场卷部'), - tooltip: '人物主要出场的作品.', - numeric: true, - onSort: (int columnIndex, bool ascending) => sort( - (HeroInfo d) => d.calories, columnIndex, ascending)), - DataColumn( - label: const Text('种族'), - numeric: true, - onSort: (int columnIndex, bool ascending) => sort( - (HeroInfo d) => d.fat, columnIndex, ascending)), - DataColumn( - label: const Text('性别'), - numeric: true, - onSort: (int columnIndex, bool ascending) => sort( - (HeroInfo d) => d.carbs, columnIndex, ascending)), - ], - source: _dessertsDataSource), - )); - } -} - -class HeroInfo { - HeroInfo(this.name, this.calories, this.fat, this.carbs); - - final String name; - final String calories; - final String fat; - final String carbs; - bool selected = false; -} - -class DessertDataSource extends DataTableSource { - final List _desserts = [ - HeroInfo('捷特', '《幻将录》', "人族", "男"), - HeroInfo('龙少', '《幻将录》', "人族", "男"), - HeroInfo('巫缨', '《幻将录》', "人族", "女"), - HeroInfo('林兮', '《幻将录》', "人族", "男"), - HeroInfo('九方玄玉', '《风神传》', "神族", "男"), - HeroInfo('七日洪荒', '《风神传》', "魔族", "男"), - HeroInfo('林昔瑶', '《封妖志》', "鬼族", "女"), - HeroInfo('林兮鬼帝', '《封妖志》', "鬼族", "男"), - HeroInfo('艾隆', '《封妖志》', "鬼族", "男"), - HeroInfo('语熙华', '《风神传》', "道族", "男"), - HeroInfo('雪玉宛如', '《幻将录》', "人族", "女"), - HeroInfo('破千', '《幻将录》', "人族", "男"), - HeroInfo('浪封', '《幻将录》', "人族", "男"), - HeroInfo('虎翼穷奇', '《封妖志》', "妖族", "男"), - HeroInfo('凯', '《幻将录》', "人族", "男"), - HeroInfo('荆棘', '《幻将录》', "人族", "女"), - HeroInfo('龙右', '《幻将录》', "人族", "男"), - HeroInfo('梦千', '《幻将录》', "人族", "男"), - HeroInfo('梦小梦', '《幻将录》', "人族", "女"), - HeroInfo('梦瞳', '《幻将录》', "人族", "男"), - HeroInfo('十戈', '《幻将录》', "人族", "男"), - HeroInfo('计画天', '《幻将录》', "人族", "女"), - HeroInfo('士方', '《幻将录》', "人族", "男"), - HeroInfo('巫妻孋', '《幻将录》', "人族", "女"), - HeroInfo('木时黎', '《永恒传说》', "人族", "男"), - HeroInfo('木艾奇', '《永恒传说》', "人族", "男"), - HeroInfo('张风', '《永恒传说》', "人族", "男"), - HeroInfo('薛剑儿', '《永恒传说》', "人族", "男"), - HeroInfo('李月', '《永恒传说》', "人族", "女"), - HeroInfo('刘雪', '《永恒传说》', "人族", "女"), - HeroInfo('葛心', '《永恒传说》', "人族", "女"), - HeroInfo('步映容', '《幻将录》', "人族", "女"), - HeroInfo('莫慈良', '《幻将录》', "人族", "男"), - HeroInfo('莫向阳', '《幻将录》', "人族", "男"), - HeroInfo('莫子薇', '《永恒传说》', "人族", "女"), - HeroInfo('藏凯阳', '《永恒传说》', "人族", "男"), - HeroInfo('奇雨歆', '《永恒传说》', "人族", "女"), - HeroInfo('林天蕊', '《永恒传说》', "人族", "女"), - HeroInfo('吴灏然', '《永恒传说》', "人族", "男"), - HeroInfo('何解连', '《永恒传说》', "人族", "男"), - HeroInfo('步络尘', '《幻将录》', "人族", "男"), - HeroInfo('拓雷', '《幻将录》', "人族", "男"), - HeroInfo('炽阳骑', '《幻将录》', "人族", "男"), - HeroInfo('正构', '《幻将录》', "人族", "男"), - HeroInfo('烈', '《幻将录》', "人族", "男"), - HeroInfo('梦华君', '《幻将录》', "人族", "男"), - HeroInfo('初星', '《幻将录》', "人族", "男"), - HeroInfo('梦飞烟', '《幻将录》', "人族", "男"), - HeroInfo('武落英', '《幻将录》', "人族", "女"), - HeroInfo('古千缘', '《幻将录》', "人族", "男"), - ]; - - void sort( - Comparable Function(HeroInfo d) getField, - bool ascending, - ) { - _desserts.sort((HeroInfo a, HeroInfo b) { - if (!ascending) { - final HeroInfo c = a; - a = b; - b = c; - } - final Comparable aValue = getField(a); - final Comparable bValue = getField(b); - return Comparable.compare(aValue, bValue); - }); - notifyListeners(); - } - - int _selectedCount = 0; - - @override - DataRow? getRow(int index) { - if (index >= _desserts.length) return null; - final HeroInfo dessert = _desserts[index]; - return DataRow.byIndex( - index: index, - selected: dessert.selected, - onSelectChanged: (bool? value) { - if (dessert.selected != value && value != null) { - _selectedCount += value ? 1 : -1; - assert(_selectedCount >= 0); - dessert.selected = value; - notifyListeners(); - } - }, - cells: [ - DataCell(Center(child: Text(dessert.name))), - DataCell(Center(child: Text(dessert.calories))), - DataCell(Center(child: Text(dessert.fat))), - DataCell(Center(child: Text(dessert.carbs))), - ]); - } - - @override - bool get isRowCountApproximate => false; - - @override - int get rowCount => _desserts.length; - - @override - int get selectedRowCount => _selectedCount; - - void _selectAll(bool? checked) { - if (checked == null) return; - for (HeroInfo dessert in _desserts) { - dessert.selected = checked; - } - _selectedCount = checked ? _desserts.length : 0; - notifyListeners(); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_de_DE.json deleted file mode 100644 index 27b13dcce..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "Menüschaltfläche", - "info": "Zeigt ein Popup-Menü an, kann Attribute wie Versatz, Farbe, Schattentiefe, Form usw. angeben. Empfängt Ereignisse für die Auswahl von Elementen und die Abwahl.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PopupMenuButton", - "desc": [ - "【itemBuilder】 : Builder 【PopupMenuItemBuilder】", - "【offset】 : Versatz 【Offset】", - "【color】 : Hintergrundfarbe 【Color】", - "【shape】 : Form 【ShapeBorder】", - "【elevation】 : Schattentiefe 【double】", - "【onCanceled】 : Abwahlereignis 【Function()】", - "【onSelected】 : Auswahlereignis 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_en_US.json deleted file mode 100644 index 9946a4c75..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "Menu Button", - "info": "A pop-up menu bar that can specify attributes such as offset, color, elevation, and shape. Receives item selection and deselection events.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PopupMenuButton", - "desc": [ - "【itemBuilder】: Constructor 【PopupMenuItemBuilder】", - "【offset】: Offset 【Offset】", - "【color】: Background Color 【Color】", - "【shape】: Shape 【ShapeBorder】", - "【elevation】: Elevation 【double】", - "【onCanceled】: Cancel Event 【Function()】", - "【onSelected】: Selection Event 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_es_ES.json deleted file mode 100644 index 4ea4d72da..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "Botón de menú", - "info": "Menú emergente, se pueden especificar propiedades como desplazamiento, color, profundidad de sombra, forma, etc. Recibe eventos de selección de ítem y eventos de cancelación.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PopupMenuButton", - "desc": [ - "【itemBuilder】 : Constructor 【PopupMenuItemBuilder】", - "【offset】 : Desplazamiento 【Offset】", - "【color】 : Color de fondo 【Color】", - "【shape】 : Forma 【ShapeBorder】", - "【elevation】 : Profundidad de sombra 【double】", - "【onCanceled】 : Evento de cancelación 【Function()】", - "【onSelected】 : Evento de selección 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_fr_FR.json deleted file mode 100644 index b7aac68c0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "Bouton de menu", - "info": "Affiche un menu contextuel, permettant de spécifier des propriétés telles que le décalage, la couleur, la profondeur d'ombre, la forme, etc. Reçoit les événements de sélection et de désélection des éléments.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PopupMenuButton", - "desc": [ - "【itemBuilder】 : Constructeur 【PopupMenuItemBuilder】", - "【offset】 : Décalage 【Offset】", - "【color】 : Couleur de fond 【Color】", - "【shape】 : Forme 【ShapeBorder】", - "【elevation】 : Profondeur d'ombre 【double】", - "【onCanceled】 : Événement d'annulation 【Function()】", - "【onSelected】 : Événement de sélection 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_it_IT.json deleted file mode 100644 index 3f7896f37..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "Pulsante del menu", - "info": "Apre un menu a comparsa, con la possibilità di specificare proprietà come offset, colore, profondità dell'ombra, forma, ecc. Riceve eventi di selezione e annullamento degli elementi.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di PopupMenuButton", - "desc": [ - "【itemBuilder】 : Costruttore 【PopupMenuItemBuilder】", - "【offset】 : Offset 【Offset】", - "【color】 : Colore di sfondo 【Color】", - "【shape】 : Forma 【ShapeBorder】", - "【elevation】 : Profondità dell'ombra 【double】", - "【onCanceled】 : Evento di annullamento 【Function()】", - "【onSelected】 : Evento di selezione 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ja_JP.json deleted file mode 100644 index 66ccb8300..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "メニューボタン", - "info": "ポップアップメニューバーを表示し、オフセット、色、影の深さ、形状などの属性を指定できます。アイテムの選択イベントと選択解除イベントを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuButtonの基本使用", - "desc": [ - "【itemBuilder】 : ビルダー 【PopupMenuItemBuilder】", - "【offset】 : オフセット 【Offset】", - "【color】 : 背景色 【Color】", - "【shape】 : 形状 【ShapeBorder】", - "【elevation】 : 影の深さ 【double】", - "【onCanceled】 : キャンセルイベント 【Function()】", - "【onSelected】 : 選択イベント 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ko_KR.json deleted file mode 100644 index 77a05c34a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "메뉴 버튼", - "info": "팝업 메뉴 바를 표시하며, 오프셋, 색상, 그림자 깊이, 모양 등의 속성을 지정할 수 있습니다. 아이템 선택 이벤트와 선택 취소 이벤트를 수신합니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuButton 기본 사용", - "desc": [ - "【itemBuilder】 : 생성자 【PopupMenuItemBuilder】", - "【offset】 : 오프셋 【Offset】", - "【color】 : 배경색 【Color】", - "【shape】 : 모양 【ShapeBorder】", - "【elevation】 : 그림자 깊이 【double】", - "【onCanceled】 : 취소 이벤트 【Function()】", - "【onSelected】 : 선택 이벤트 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_pt_PT.json deleted file mode 100644 index 946e108f8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "Botão de Menu", - "info": "Exibe um menu pop-up, podendo especificar atributos como deslocamento, cor, profundidade de sombra, forma, etc. Recebe eventos de seleção e cancelamento de itens.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do PopupMenuButton", - "desc": [ - "【itemBuilder】 : Construtor 【PopupMenuItemBuilder】", - "【offset】 : Deslocamento 【Offset】", - "【color】 : Cor de fundo 【Color】", - "【shape】 : Forma 【ShapeBorder】", - "【elevation】 : Profundidade de sombra 【double】", - "【onCanceled】 : Evento de cancelamento 【Function()】", - "【onSelected】 : Evento de seleção 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ru_RU.json deleted file mode 100644 index 58a6e396f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "Кнопка меню", - "info": "Всплывающее меню, можно указать смещение, цвет, глубину тени, форму и другие атрибуты. Принимает события выбора элемента и отмены выбора.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PopupMenuButton", - "desc": [ - "【itemBuilder】 : Конструктор 【PopupMenuItemBuilder】", - "【offset】 : Смещение 【Offset】", - "【color】 : Цвет фона 【Color】", - "【shape】 : Форма 【ShapeBorder】", - "【elevation】 : Глубина тени 【double】", - "【onCanceled】 : Событие отмены 【Function()】", - "【onSelected】 : Событие выбора 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_zh-CN.json deleted file mode 100644 index d25591057..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "菜单按钮", - "info": "弹出菜单栏,可指定偏移、颜色、影深、形状等属性。接收item选中的事件和取消选择事件。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuButton基本使用", - "desc": [ - "【itemBuilder】 : 构造器 【PopupMenuItemBuilder】", - "【offset】 : 偏移 【Offset】", - "【color】 : 背景颜色 【Color】", - "【shape】 : 形状 【ShapeBorder】", - "【elevation】 : 影深 【double】", - "【onCanceled】 : 取消事件 【Function()】", - "【onSelected】 : 选择事件 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/node1_base.dart deleted file mode 100644 index 03fe4f20d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/node1_base.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:widgets/utils/dialog_about.dart'; - - -/// create by 张风捷特烈 on 2020-03-16 -/// contact me by email 1981462002@qq.com - -class CustomPopupMenuButton extends StatefulWidget { - const CustomPopupMenuButton({Key? key}) : super(key: key); - - @override - _CustomPopupMenuButtonState createState() => _CustomPopupMenuButtonState(); -} - -class _CustomPopupMenuButtonState extends State { - final Map map = const { - "关于": Icons.info_outline, - "帮助": Icons.help_outline, - "问题反馈": Icons.add_comment, - }; - - @override - Widget build(BuildContext context) { - return PopupMenuButton( - itemBuilder: (context) => buildItems(), - offset: const Offset(0, 50), - color: const Color(0xffF4FFFA), - elevation: 1, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(20), - bottomRight: Radius.circular(20), - topRight: Radius.circular(5), - bottomLeft: Radius.circular(5), - )), - onSelected: (e) { - print(e); - if (e == '关于') { - DialogAbout.show(context); - } - }, - onCanceled: () => print('onCanceled'), - ); - } - - List> buildItems() { - return map.keys - .toList() - .map((e) => PopupMenuItem( - value: e, - child: Wrap( - spacing: 10, - children: [ - Icon(map[e], color: Colors.blue), - Text(e), - ], - ))) - .toList(); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_de_DE.json deleted file mode 100644 index 7a5dba891..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "Popup-Menü-Trennlinie", - "info": "Die Trennlinie des PopupMenuButton, wird normalerweise nicht allein verwendet und kann in der Höhe angegeben werden.", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PopupMenuDivider", - "desc": [ - "【height】 : Höhe 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_en_US.json deleted file mode 100644 index 728542b5f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "Popup Menu Divider", - "info": "The divider of PopupMenuButton, generally not used alone, the height can be specified.", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PopupMenuDivider", - "desc": [ - "【height】 : height 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_es_ES.json deleted file mode 100644 index 9c1269225..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "Divisor de menú emergente", - "info": "Divisor de PopupMenuButton, generalmente no se usa por separado, se puede especificar la altura.", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PopupMenuDivider", - "desc": [ - "【height】 : altura 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_fr_FR.json deleted file mode 100644 index f928156a4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "Ligne de séparation du menu contextuel", - "info": "Ligne de séparation pour PopupMenuButton, généralement pas utilisée seule, peut spécifier la hauteur.", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PopupMenuDivider", - "desc": [ - "【height】 : hauteur 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_it_IT.json deleted file mode 100644 index 925e2b303..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "Linea di divisione del menu a comparsa", - "info": "Linea di divisione per PopupMenuButton, generalmente non utilizzata da sola, può essere specificata l'altezza.", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di PopupMenuDivider", - "desc": [ - "【height】 : Altezza 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ja_JP.json deleted file mode 100644 index 1de2e6aea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "ポップアップメニュー区切り線", - "info": "PopupMenuButtonの区切り線で、通常は単独で使用されず、高さを指定できます。", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuDividerの基本使用", - "desc": [ - "【height】 : 高さ 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ko_KR.json deleted file mode 100644 index 831ee3807..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "팝업 메뉴 구분선", - "info": "PopupMenuButton의 구분선, 일반적으로 단독으로 사용되지 않으며, 높이를 지정할 수 있습니다.", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuDivider 기본 사용", - "desc": [ - "【height】 : 높이 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_pt_PT.json deleted file mode 100644 index 2b66764a7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "Divisor de Menu Pop-up", - "info": "Divisor do PopupMenuButton, geralmente não é usado sozinho, pode ser especificada a altura.", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do PopupMenuDivider", - "desc": [ - "【height】 : altura 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ru_RU.json deleted file mode 100644 index 3a81af8ed..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "Разделитель всплывающего меню", - "info": "Разделитель для PopupMenuButton, обычно не используется отдельно, можно указать высоту.", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PopupMenuDivider", - "desc": [ - "【height】 : Высота 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_zh-CN.json deleted file mode 100644 index 40ed06d79..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "弹出菜单分割线", - "info": "PopupMenuButton的分割线,一般不单独使用,可指定高度。", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuDivider基本使用", - "desc": [ - "【height】 : 高度 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/node1_base.dart deleted file mode 100644 index b72d5538d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/node1_base.dart +++ /dev/null @@ -1,68 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:widgets/utils/dialog_about.dart'; - - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomPopupMenuDivider extends StatelessWidget { - const CustomPopupMenuDivider({Key? key}) : super(key: key); - - final Map map = const { - "关于": Icons.info_outline, - "帮助": Icons.help_outline, - "问题反馈": Icons.add_comment, - }; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildPopupMenuButton(context), - const PopupMenuDivider(), - ], - ); - } - - PopupMenuButton _buildPopupMenuButton(BuildContext context) { - return PopupMenuButton( - itemBuilder: (context) => [ - ...buildItems().sublist(0, 2), - const PopupMenuDivider(), - ...buildItems().sublist(2, 3) - ], - offset: const Offset(0, 50), - color: const Color(0xffF4FFFA), - elevation: 1, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(20), - bottomRight: Radius.circular(20), - topRight: Radius.circular(5), - bottomLeft: Radius.circular(5), - )), - onSelected: (e) { - print(e); - if (e == '关于') { - DialogAbout.show(context); - } - }, - onCanceled: () => print('onCanceled'), - ); - } - - List> buildItems() { - return map.keys - .toList() - .map((e) => PopupMenuItem( - value: e, - child: Wrap( - spacing: 10, - children: [ - Icon(map[e], color: Colors.blue), - Text(e), - ], - ))) - .toList(); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_de_DE.json deleted file mode 100644 index 190ea2229..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "Positionsübergang", - "info": "Kann nur in einem Stack verwendet werden, kann ein Kindelement enthalten und lässt es eine Positionsanimation zwischen zwei Rechtecken durchführen, erfordert einen Animator rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PositionedTransition", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【rect】 : Animation 【Animation】", - " PositionedTransition-Komponente kann nur innerhalb eines Stacks funktionieren" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_en_US.json deleted file mode 100644 index c9b298bf7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "Position Transition", - "info": "Can only be used in a Stack, can contain one child component, allowing it to animate between two rectangles, requires an animator rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PositionedTransition", - "desc": [ - "【child】 : Child component 【Widget】", - "【rect】 : Animation 【Animation】", - " The PositionedTransition component only works within a Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_es_ES.json deleted file mode 100644 index af3c0d420..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "Transición de Posición", - "info": "Solo se puede usar en Stack, puede contener un componente hijo y permite que realice una animación de posición entre dos rectángulos, se requiere proporcionar un animador rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PositionedTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【rect】 : Animación 【Animation】", - " El componente PositionedTransition solo funciona dentro de Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_fr_FR.json deleted file mode 100644 index aa494ce66..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "Transition de position", - "info": "Ne peut être utilisé que dans une Stack, peut contenir un seul composant enfant, permettant une animation de position entre deux rectangles, nécessite un animateur rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PositionedTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【rect】 : Animation 【Animation】", - " Le composant PositionedTransition ne fonctionne que dans une Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_it_IT.json deleted file mode 100644 index d503ee471..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "Transizione di posizione", - "info": "Può essere utilizzato solo in uno Stack, può contenere un componente figlio e permette di animare la posizione tra due rettangoli, è necessario fornire un animatore rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di PositionedTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【rect】 : Animazione 【Animation】", - " Il componente PositionedTransition funziona solo all'interno di uno Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ja_JP.json deleted file mode 100644 index a7eb3d4cf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "位置変換", - "info": "Stack内でのみ使用可能で、1つの子コンポーネントを収容し、2つの矩形間で位置アニメーションを行わせることができます。アニメーターrectを提供する必要があります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PositionedTransitionの基本的な使用法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【rect】 : アニメーション 【Animation】", - " PositionedTransitionコンポーネントはStack内でのみ機能します" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ko_KR.json deleted file mode 100644 index 1b7674db7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "위치 변환", - "info": "Stack에서만 사용 가능하며, 하나의 자식 위젯을 포함할 수 있고, 두 사각형 사이에서 위치 애니메이션을 수행할 수 있습니다. 애니메이션 rect를 제공해야 합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PositionedTransition 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【rect】 : 애니메이션 【Animation】", - " PositionedTransition 위젯은 Stack 내에서만 작동합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_pt_PT.json deleted file mode 100644 index 9c65910dc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "Transição de Posição", - "info": "Só pode ser usado em uma Stack, pode conter um componente filho, permitindo que ele faça uma animação de posição entre dois retângulos, é necessário fornecer um animador rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do PositionedTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【rect】 : Animação 【Animation】", - " O componente PositionedTransition só funciona dentro de uma Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ru_RU.json deleted file mode 100644 index bd5e2aa96..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "Позиционный переход", - "info": "Может использоваться только в Stack, может содержать один дочерний компонент, позволяющий ему выполнять анимацию между двумя прямоугольниками, требуется предоставить аниматор rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PositionedTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【rect】 : Анимация 【Animation】", - " Компонент PositionedTransition может работать только внутри Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_zh-CN.json deleted file mode 100644 index 5999b455f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "位置变换", - "info": "只能用于Stack中,可容纳一个子组件,让其在两个矩形间进行位置动画,需要提供动画器rect。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PositionedTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【rect】 : 动画 【Animation】", - " PositionedTransition组件只能在Stack内起作用" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/node1_base.dart deleted file mode 100644 index 6485185c5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/node1_base.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomPositionedTransition extends StatefulWidget { - const CustomPositionedTransition({Key? key}) : super(key: key); - - @override - _CustomPositionedTransitionState createState() => - _CustomPositionedTransitionState(); -} - -class _CustomPositionedTransitionState extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 2), - ); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Container( - color: Colors.grey.withAlpha(33), - width: 200, - height: 100, - child: Stack( - children: [ - PositionedTransition( - rect: RelativeRectTween( - begin: const RelativeRect.fromLTRB(0, 50, 150, 100), - end: const RelativeRect.fromLTRB(60, 0, 150, -50), - ).animate(_ctrl), - child: const Icon( - Icons.android, - color: Colors.green, - size: 50, - ), - ) - ], - ), - )); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_de_DE.json deleted file mode 100644 index d7c3a2b24..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "Auswahlknopf", - "info": "Aufgrund der runden Knöpfe für ausgewählte und nicht ausgewählte Zustände können mehrere Radios je nach Logik Einzel- oder Mehrfachauswahl ermöglichen. Farbe kann angegeben werden, und Statusänderungsrückrufe werden empfangen.", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Radio", - "desc": [ - "【value】 : Auswahlknopfwert 【T】", - "【groupValue】 : Aktueller Übereinstimmungswert 【T】", - "【activeColor】 : Aktivierungsfarbe 【Color】", - "【onChanged】 : Rückruf bei Änderung 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_en_US.json deleted file mode 100644 index 9cba63c94..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "Radio Button", - "info": "Due to the selected and unselected states of the circular button, multiple Radios can implement single or multiple selection requirements based on logic. The color can be specified, and a callback for state changes is supported.", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Radio", - "desc": [ - "【value】: Radio button value 【T】", - "【groupValue】: Current matching value 【T】", - "【activeColor】: Active color 【Color】", - "【onChanged】: Callback on change 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_es_ES.json deleted file mode 100644 index 1b0024bfc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "Botón de selección", - "info": "Debido a los botones circulares en estados seleccionados y no seleccionados, múltiples Radio pueden satisfacer necesidades de selección única o múltiple según la lógica. Se puede especificar el color y recibir una devolución de llamada para cambios de estado.", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Radio", - "desc": [ - "【value】 : Valor del botón de selección 【T】", - "【groupValue】 : Valor de coincidencia actual 【T】", - "【activeColor】 : Color activo 【Color】", - "【onChanged】 : Devolución de llamada al cambiar 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_fr_FR.json deleted file mode 100644 index c4853c7c2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "Bouton de sélection", - "info": "En raison des boutons ronds pour les états sélectionnés et non sélectionnés, plusieurs Radio peuvent répondre aux besoins de sélection unique ou multiple selon la logique. La couleur peut être spécifiée et un rappel de changement d'état peut être reçu.", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Radio", - "desc": [ - "【value】 : Valeur du bouton de sélection 【T】", - "【groupValue】 : Valeur de correspondance actuelle 【T】", - "【activeColor】 : Couleur active 【Color】", - "【onChanged】 : Rappel lors du changement 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_it_IT.json deleted file mode 100644 index f1786d8da..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "Pulsante di selezione", - "info": "A causa dei pulsanti rotondi per lo stato selezionato e non selezionato, più Radio possono realizzare la necessità di selezione singola o multipla secondo la logica. È possibile specificare il colore e ricevere un callback per i cambiamenti di stato.", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Radio", - "desc": [ - "【value】 : Valore del pulsante di selezione 【T】", - "【groupValue】 : Valore di corrispondenza corrente 【T】", - "【activeColor】 : Colore attivo 【Color】", - "【onChanged】 : Callback al cambiamento 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ja_JP.json deleted file mode 100644 index 587b57670..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "ラジオボタン", - "info": "選択状態と未選択状態の円形ボタンであり、複数のRadioを論理的に使用することで、単一選択または複数選択の要件を実現できます。色を指定でき、状態変化のコールバックを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Radioの基本的な使用法", - "desc": [ - "【value】 : ラジオボタンの値 【T】", - "【groupValue】 : 現在のマッチ値 【T】", - "【activeColor】 : アクティブな色 【Color】", - "【onChanged】 : 変更時のコールバック 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ko_KR.json deleted file mode 100644 index f28f41ce1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "라디오 버튼", - "info": "선택 및 미선택 상태의 원형 버튼으로, 여러 개의 라디오 버튼을 통해 논리에 따라 단일 선택 또는 다중 선택이 가능합니다. 색상을 지정할 수 있으며, 상태 변화 콜백을 받을 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "라디오 버튼 기본 사용법", - "desc": [ - "【value】 : 라디오 버튼 값 【T】", - "【groupValue】 : 현재 일치 값 【T】", - "【activeColor】 : 활성화 색상 【Color】", - "【onChanged】 : 변경 시 콜백 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_pt_PT.json deleted file mode 100644 index 03a9593d0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "Botão de seleção", - "info": "Devido aos botões circulares para estados selecionados e não selecionados, vários Radios podem atender às necessidades de seleção única ou múltipla com base na lógica. Pode-se especificar a cor e receber um retorno de chamada para mudanças de estado.", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Radio", - "desc": [ - "【value】 : Valor do botão de seleção 【T】", - "【groupValue】 : Valor correspondente atual 【T】", - "【activeColor】 : Cor ativa 【Color】", - "【onChanged】 : Retorno de chamada ao mudar 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ru_RU.json deleted file mode 100644 index 1859bd1e5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "Кнопка выбора", - "info": "Из-за круглых кнопок в выбранном и невыбранном состоянии, несколько Radio могут реализовать потребности в выборе одного или нескольких вариантов в зависимости от логики. Можно указать цвет, получать обратные вызовы при изменении состояния.", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Radio", - "desc": [ - "【value】 : Значение кнопки выбора 【T】", - "【groupValue】 : Текущее совпадающее значение 【T】", - "【activeColor】 : Активный цвет 【Color】", - "【onChanged】 : Обратный вызов при изменении 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_zh-CN.json deleted file mode 100644 index 05943372d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "选钮", - "info": "由于选中和未选择状态的圆钮,多个Radio根据逻辑可以实现单选或多选的需求。可指定颜色,接收状态变化回调。", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Radio基本使用", - "desc": [ - "【value】 : 选钮值 【T】", - "【groupValue】 : 当前匹配值 【T】", - "【activeColor】 : 激活颜色 【Color】", - "【onChanged】 : 改变时回调 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Radio/node1_base.dart deleted file mode 100644 index 363a7ece5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/node1_base.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomRadio extends StatefulWidget { - const CustomRadio({Key? key}) : super(key: key); - - @override - _CustomRadioState createState() => _CustomRadioState(); -} - -class _CustomRadioState extends State { - List data = [1, 2, 3, 4, 5]; - double _value = 1; - - @override - Widget build(BuildContext context) { - return Row( - mainAxisSize: MainAxisSize.min, - children: data - .map((e) => Radio( - activeColor: Colors.orangeAccent, - value: e, - groupValue: _value, - onChanged: (v) => setState(() => _value = v??0))) - .toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_de_DE.json deleted file mode 100644 index b64765646..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "Bereichs-Schieberegler", - "info": "Bereichs-Schieberegler-Komponente, unterstützt das Ziehen von zwei Punkten, um den Bereich dazwischen zu erhalten. Ermöglicht die Angabe von Farbe, Anzahl der Abschnitte und angezeigte Labels, empfängt Rückrufe bei Fortschrittsänderungen.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RangeSlider", - "desc": [ - "【values】 : Werte 【RangeValues】", - "【min】 : Mindestwert 【double】", - "【max】 : Höchstwert 【double】", - "【divisions】 : Anzahl der Abschnitte 【int】", - "【label】 : Text der Hinweisblase 【String】", - "【activeColor】 : Aktive Farbe 【Color】", - "【inactiveColor】 : Inaktive Farbe 【Color】", - "【onChangeStart】 : Listener beim Start des Ziehens 【Function(RangeValues)】", - "【onChangeEnd】 : Listener beim Ende des Ziehens 【Function(RangeValues)】", - "【onChanged】 : Rückruf bei Änderung 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_en_US.json deleted file mode 100644 index ac404002a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "Range Slider", - "info": "The Range Slider component supports two-point dragging to get the range between them. You can specify the color, number of segments, and displayed labels, and receive progress change callbacks.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RangeSlider", - "desc": [ - "【values】 : Values 【RangeValues】", - "【min】 : Minimum value 【double】", - "【max】 : Maximum value 【double】", - "【divisions】 : Number of divisions 【int】", - "【label】 : Tooltip text 【String】", - "【activeColor】 : Active color 【Color】", - "【inactiveColor】 : Inactive color 【Color】", - "【onChangeStart】 : Listener when sliding starts 【Function(RangeValues)】", - "【onChangeEnd】 : Listener when sliding ends 【Function(RangeValues)】", - "【onChanged】 : Callback when changed 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_es_ES.json deleted file mode 100644 index 60d9003b5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "Control deslizante de rango", - "info": "Componente de control deslizante de rango, compatible con arrastre de dos puntos para obtener el rango entre ellos. Permite especificar colores, número de segmentos y etiquetas mostradas, y recibe una devolución de llamada para cambios de progreso.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RangeSlider", - "desc": [ - "【values】 : valores 【RangeValues】", - "【min】 : valor mínimo 【double】", - "【max】 : valor máximo 【double】", - "【divisions】 : número de divisiones 【int】", - "【label】 : texto de la burbuja de sugerencia 【String】", - "【activeColor】 : color activo 【Color】", - "【inactiveColor】 : color inactivo 【Color】", - "【onChangeStart】 : escucha al comenzar a deslizar 【Function(RangeValues)】", - "【onChangeEnd】 : escucha al finalizar el deslizamiento 【Function(RangeValues)】", - "【onChanged】 : devolución de llamada al cambiar 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_fr_FR.json deleted file mode 100644 index ee1de5b21..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "Curseur de plage", - "info": "Composant de curseur de plage, prend en charge le glissement à deux points pour obtenir la plage entre eux. Peut spécifier la couleur, le nombre de segments et les étiquettes affichées, reçoit un rappel de changement de progression.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RangeSlider", - "desc": [ - "【values】 : valeurs 【RangeValues】", - "【min】 : valeur minimale 【double】", - "【max】 : valeur maximale 【double】", - "【divisions】 : nombre de segments 【int】", - "【label】 : texte de la bulle d'information 【String】", - "【activeColor】 : couleur active 【Color】", - "【inactiveColor】 : couleur inactive 【Color】", - "【onChangeStart】 : écouteur au début du glissement 【Function(RangeValues)】", - "【onChangeEnd】 : écouteur à la fin du glissement 【Function(RangeValues)】", - "【onChanged】 : rappel lors du changement 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_it_IT.json deleted file mode 100644 index fdf083528..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "Cursore di intervallo", - "info": "Componente cursore di intervallo, supporta il trascinamento di due punti per ottenere l'intervallo tra di essi. Può specificare il colore, il numero di segmenti e le etichette visualizzate, riceve un callback per le modifiche di avanzamento.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di RangeSlider", - "desc": [ - "【values】 : Valori 【RangeValues】", - "【min】 : Valore minimo 【double】", - "【max】 : Valore massimo 【double】", - "【divisions】 : Numero di segmenti 【int】", - "【label】 : Testo del tooltip 【String】", - "【activeColor】 : Colore attivo 【Color】", - "【inactiveColor】 : Colore inattivo 【Color】", - "【onChangeStart】 : Ascolta quando inizia lo scorrimento 【Function(RangeValues)】", - "【onChangeEnd】 : Ascolta quando finisce lo scorrimento 【Function(RangeValues)】", - "【onChanged】 : Callback al cambiamento 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ja_JP.json deleted file mode 100644 index d62e6d3fa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "範囲スライダー", - "info": "範囲スライダーコンポーネントは、2点のドラッグをサポートし、その間の範囲を取得します。色、セグメント数、表示されるラベルを指定でき、進捗変化のコールバックを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RangeSlider基本使用", - "desc": [ - "【values】 : 数値 【RangeValues】", - "【min】 : 最小値 【double】", - "【max】 : 最大値 【double】", - "【divisions】 : セグメント数 【int】", - "【label】 : ヒントバブルテキスト 【String】", - "【activeColor】 : アクティブカラー 【Color】", - "【inactiveColor】 : 非アクティブカラー 【Color】", - "【onChangeStart】 : スライド開始時のリスナー 【Function(RangeValues)】", - "【onChangeEnd】 : スライド終了時のリスナー 【Function(RangeValues)】", - "【onChanged】 : 変更時のコールバック 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ko_KR.json deleted file mode 100644 index c95744b34..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "범위 슬라이더", - "info": "범위 슬라이더 컴포넌트, 두 점 드래그를 지원하여 그 사이의 범위를 얻을 수 있습니다. 색상, 분할 수 및 표시된 라벨을 지정할 수 있으며, 진행 변화 콜백을 받습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RangeSlider 기본 사용", - "desc": [ - "【values】 : 값 【RangeValues】", - "【min】 : 최소값 【double】", - "【max】 : 최대값 【double】", - "【divisions】 : 분할 수 【int】", - "【label】 : 툴팁 텍스트 【String】", - "【activeColor】 : 활성화 색상 【Color】", - "【inactiveColor】 : 비활성화 색상 【Color】", - "【onChangeStart】 : 슬라이드 시작 시 리스너 【Function(RangeValues)】", - "【onChangeEnd】 : 슬라이드 종료 시 리스너 【Function(RangeValues)】", - "【onChanged】 : 변경 시 콜백 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_pt_PT.json deleted file mode 100644 index 6158ffede..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "Controlo deslizante de intervalo", - "info": "Componente de controlo deslizante de intervalo, suporta arrasto de dois pontos para obter o intervalo entre eles. Pode especificar a cor, o número de segmentos e as etiquetas exibidas, e recebe uma chamada de retorno para alterações no progresso.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do RangeSlider", - "desc": [ - "【values】 : valores 【RangeValues】", - "【min】 : valor mínimo 【double】", - "【max】 : valor máximo 【double】", - "【divisions】 : número de segmentos 【int】", - "【label】 : texto da bolha de dica 【String】", - "【activeColor】 : cor ativa 【Color】", - "【inactiveColor】 : cor inativa 【Color】", - "【onChangeStart】 : ouvinte ao iniciar o deslize 【Function(RangeValues)】", - "【onChangeEnd】 : ouvinte ao terminar o deslize 【Function(RangeValues)】", - "【onChanged】 : chamada de retorno ao alterar 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ru_RU.json deleted file mode 100644 index 7475fa488..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "Ползунок диапазона", - "info": "Компонент ползунка диапазона, поддерживает перетаскивание двух точек для получения диапазона между ними. Можно указать цвет, количество сегментов и отображаемые метки, а также получать обратные вызовы при изменении прогресса.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RangeSlider", - "desc": [ - "【values】 : Значения 【RangeValues】", - "【min】 : Минимальное значение 【double】", - "【max】 : Максимальное значение 【double】", - "【divisions】 : Количество сегментов 【int】", - "【label】 : Текст подсказки 【String】", - "【activeColor】 : Активный цвет 【Color】", - "【inactiveColor】 : Неактивный цвет 【Color】", - "【onChangeStart】 : Слушатель начала перетаскивания 【Function(RangeValues)】", - "【onChangeEnd】 : Слушатель окончания перетаскивания 【Function(RangeValues)】", - "【onChanged】 : Обратный вызов при изменении 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_zh-CN.json deleted file mode 100644 index 815e725eb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "范围滑块", - "info": "范围滑块组件,支持两点拖动,获取之间的范围。可指定颜色、分段数及显示的标签,接收进度变化回调。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RangeSlider基本使用", - "desc": [ - "【values】 : 数值 【RangeValues】", - "【min】 : 最小值 【double】", - "【max】 : 最大值 【double】", - "【divisions】 : 分段数 【int】", - "【label】 : 提示气泡文字 【String】", - "【activeColor】 : 激活颜色 【Color】", - "【inactiveColor】 : 非激活颜色 【Color】", - "【onChangeStart】 : 开始滑动时监听 【Function(RangeValues)】", - "【onChangeEnd】 : 滑动结束时监听 【Function(RangeValues)】", - "【onChanged】 : 改变时回调 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/node1_base.dart deleted file mode 100644 index bb9ab74e9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/node1_base.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomRangeSlider extends StatefulWidget { - const CustomRangeSlider({Key? key}) : super(key: key); - - @override - _CustomRangeSliderState createState() => _CustomRangeSliderState(); -} - -class _CustomRangeSliderState extends State { - RangeValues _rangeValues = const RangeValues(90, 270); - - @override - Widget build(BuildContext context) { - return RangeSlider( - values: _rangeValues, - divisions: 180, - min: 0.0, - max: 360.0, - labels: RangeLabels(_rangeValues.start.toStringAsFixed(1), - _rangeValues.end.toStringAsFixed(1)), - activeColor: Colors.orangeAccent, - inactiveColor: Colors.green.withAlpha(99), - onChangeStart: (value) { - print('开始滑动:$value'); - }, - onChangeEnd: (value) { - print('滑动结束:$value'); - }, - onChanged: (value) { - setState(() { - _rangeValues = value; - }); - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_de_DE.json deleted file mode 100644 index 36e4d9cd8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_de_DE.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "Native Chip", - "info": "Der Vorfahr aller Chip-Komponenten, der die Fähigkeit besitzt, das Verhalten jedes Chips zu zeigen, unterstützt Ereignisse wie Auswählen, Klicken und Löschen. Weitere Informationen finden Sie unter Chip, FilterChip, ActionChip, InputChip und ChoiceChip.", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "RawChip Klickeffekt", - "desc": [ - "【label】: Mittlere Komponente 【Widget】", - "【padding】: Innenabstand 【EdgeInsetsGeometry】", - "【labelPadding】: Label-Abstand 【EdgeInsetsGeometry】", - "【shadowColor】: Schattenfarbe 【Color】", - "【avatar】: Linke Komponente 【Widget】", - "【elevation】: Schattentiefe 【double】", - "【pressElevation】: Schattentiefe beim Klicken 【double】", - "【onPressed】: Klickereignis 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "RawChip Auswahl- und Lösch-Effekt", - "desc": [ - "【selected】: Ist ausgewählt 【bool】", - "【deleteIconColor】: Farbe des Endsymbols 【Color】", - "【selectedColor】: Auswahlfarbe 【Color】", - "【deleteIcon】: Endkomponente 【Widget】", - "【onSelected】: Auswahlereignis 【Function(bool)】", - "【onDeleted】: Endereignis 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_en_US.json deleted file mode 100644 index cc299aa39..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_en_US.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "RawChip", - "info": "The ancestor of each Chip component, possessing the ability to exhibit each Chip's behavior, supporting events such as selection, click, and deletion. For details, see Chip, FilterChip, ActionChip, InputChip, ChoiceChip.", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "RawChip Click Effect", - "desc": [ - "【label】: Middle component 【Widget】", - "【padding】 : Padding 【EdgeInsetsGeometry】", - "【labelPadding】 : Label padding 【EdgeInsetsGeometry】", - "【shadowColor】: Shadow color 【Color】", - "【avatar】: Left component 【Widget】", - "【elevation】: Elevation 【double】", - "【pressElevation】: Elevation when pressed 【double】", - "【onPressed】 : Click event 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "RawChip Selection and Deletion Effect", - "desc": [ - "【selected】: Whether selected 【bool】", - "【deleteIconColor】: Trailing icon color 【Color】", - "【selectedColor】: Selected color 【Color】", - "【deleteIcon】: Trailing component 【Widget】", - "【onSelected】: Selection event 【Function(bool)】", - "【onDeleted】 : Trailing event 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_es_ES.json deleted file mode 100644 index 48e0eb6db..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_es_ES.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "Chip Nativo", - "info": "El antepasado de cada componente Chip, con la capacidad de representar cada comportamiento de Chip, soporta eventos como selección, clic, eliminación, etc. Para más detalles, consulta Chip, FilterChip, ActionChip, InputChip, ChoiceChip.", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "Efecto de clic en RawChip", - "desc": [ - "【label】: Componente central 【Widget】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】", - "【labelPadding】 : Relleno de la etiqueta 【EdgeInsetsGeometry】", - "【shadowColor】: Color de la sombra 【Color】", - "【avatar】: Componente izquierdo 【Widget】", - "【elevation】: Profundidad de la sombra 【double】", - "【pressElevation】: Profundidad de la sombra al hacer clic 【double】", - "【onPressed】 : Evento de clic 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Efecto de selección y eliminación en RawChip", - "desc": [ - "【selected】: Si está seleccionado 【bool】", - "【deleteIconColor】: Color del icono de eliminación 【Color】", - "【selectedColor】: Color de selección 【Color】", - "【deleteIcon】: Componente de eliminación 【Widget】", - "【onSelected】: Evento de selección 【Function(bool)】", - "【onDeleted】 : Evento de eliminación 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_fr_FR.json deleted file mode 100644 index 7c9461bc1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_fr_FR.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "Petite barre native", - "info": "L'ancêtre de chaque composant Chip, possédant la capacité de représenter chaque Chip, prend en charge des événements tels que la sélection, le clic, la suppression, etc. Voir Chip, FilterChip, ActionChip, InputChip, ChoiceChip pour plus de détails.", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "Effet de clic de RawChip", - "desc": [ - "【label】: Composant central 【Widget】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】", - "【labelPadding】 : Marge du label 【EdgeInsetsGeometry】", - "【shadowColor】: Couleur de l'ombre 【Color】", - "【avatar】: Composant gauche 【Widget】", - "【elevation】: Profondeur de l'ombre 【double】", - "【pressElevation】: Profondeur de l'ombre lors du clic 【double】", - "【onPressed】 : Événement de clic 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Effet de sélection et de suppression de RawChip", - "desc": [ - "【selected】: Est sélectionné 【bool】", - "【deleteIconColor】: Couleur de l'icône de fin 【Color】", - "【selectedColor】: Couleur de sélection 【Color】", - "【deleteIcon】: Composant de fin 【Widget】", - "【onSelected】: Événement de sélection 【Function(bool)】", - "【onDeleted】 : Événement de fin 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_it_IT.json deleted file mode 100644 index 9469f54d3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_it_IT.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "Chip Nativo", - "info": "L'antenato di tutti i componenti Chip, con la capacità di rappresentare ogni Chip, supporta eventi come selezione, clic, eliminazione, ecc. Vedi Chip, FilterChip, ActionChip, InputChip, ChoiceChip per maggiori dettagli.", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "Effetto Clic di RawChip", - "desc": [ - "【label】: Componente centrale 【Widget】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】", - "【labelPadding】 : Spaziatura del label 【EdgeInsetsGeometry】", - "【shadowColor】: Colore dell'ombra 【Color】", - "【avatar】: Componente sinistro 【Widget】", - "【elevation】: Profondità dell'ombra 【double】", - "【pressElevation】: Profondità dell'ombra al clic 【double】", - "【onPressed】 : Evento di clic 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Effetto Selezione ed Eliminazione di RawChip", - "desc": [ - "【selected】: Se selezionato 【bool】", - "【deleteIconColor】: Colore dell'icona di coda 【Color】", - "【selectedColor】: Colore selezionato 【Color】", - "【deleteIcon】: Componente di coda 【Widget】", - "【onSelected】: Evento di selezione 【Function(bool)】", - "【onDeleted】 : Evento di coda 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ja_JP.json deleted file mode 100644 index 7c53a5b74..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ja_JP.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "ネイティブチップ", - "info": "各Chipコンポーネントの始祖であり、各Chipの表現能力を持ち、選択、クリック、削除などのイベントをサポートします。詳細はChip、FilterChip、ActionChip、InputChip、ChoiceChipを参照してください。", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "RawChipクリック効果", - "desc": [ - "【label】: 中間コンポーネント 【Widget】", - "【padding】 : パディング 【EdgeInsetsGeometry】", - "【labelPadding】 : ラベルパディング 【EdgeInsetsGeometry】", - "【shadowColor】: シャドウカラー 【Color】", - "【avatar】: 左側コンポーネント 【Widget】", - "【elevation】: 影の深さ 【double】", - "【pressElevation】: クリック時の影の深さ 【double】", - "【onPressed】 : クリックイベント 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "RawChip選択と削除効果", - "desc": [ - "【selected】: 選択されているか 【bool】", - "【deleteIconColor】: 末尾アイコンカラー 【Color】", - "【selectedColor】: 選択色 【Color】", - "【deleteIcon】: 末尾コンポーネント 【Widget】", - "【onSelected】: 選択イベント 【Function(bool)】", - "【onDeleted】 : 末尾イベント 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ko_KR.json deleted file mode 100644 index 5ee7e501a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ko_KR.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "원본 칩", - "info": "각 Chip 컴포넌트의 조상으로, 각 Chip의 표현 능력을 가지고 있으며, 선택, 클릭, 삭제 등의 이벤트를 지원합니다. 자세한 내용은 Chip, FilterChip, ActionChip, InputChip, ChoiceChip을 참조하세요.", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "RawChip 클릭 효과", - "desc": [ - "【label】: 중간 컴포넌트 【Widget】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】", - "【labelPadding】 : 라벨 여백 【EdgeInsetsGeometry】", - "【shadowColor】: 그림자 색상 【Color】", - "【avatar】: 왼쪽 컴포넌트 【Widget】", - "【elevation】: 그림자 깊이 【double】", - "【pressElevation】: 클릭 시 그림자 깊이 【double】", - "【onPressed】 : 클릭 이벤트 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "RawChip 선택 및 삭제 효과", - "desc": [ - "【selected】: 선택 여부 【bool】", - "【deleteIconColor】: 끝 아이콘 색상 【Color】", - "【selectedColor】: 선택 색상 【Color】", - "【deleteIcon】: 끝 컴포넌트 【Widget】", - "【onSelected】: 선택 이벤트 【Function(bool)】", - "【onDeleted】 : 끝 이벤트 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_pt_PT.json deleted file mode 100644 index 972d20a3f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_pt_PT.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "Chip Nativo", - "info": "O ancestral de cada componente Chip, possui a capacidade de exibir cada comportamento de Chip, suportando eventos como seleção, clique, exclusão, etc. Consulte Chip, FilterChip, ActionChip, InputChip, ChoiceChip para mais detalhes.", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "Efeito de Clique do RawChip", - "desc": [ - "【label】: Componente central 【Widget】", - "【padding】 : Preenchimento interno 【EdgeInsetsGeometry】", - "【labelPadding】 : Preenchimento do label 【EdgeInsetsGeometry】", - "【shadowColor】: Cor da sombra 【Color】", - "【avatar】: Componente esquerdo 【Widget】", - "【elevation】: Profundidade da sombra 【double】", - "【pressElevation】: Profundidade da sombra ao clicar 【double】", - "【onPressed】 : Evento de clique 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Efeito de Seleção e Exclusão do RawChip", - "desc": [ - "【selected】: Selecionado ou não 【bool】", - "【deleteIconColor】: Cor do ícone de exclusão 【Color】", - "【selectedColor】: Cor de seleção 【Color】", - "【deleteIcon】: Componente de ícone de exclusão 【Widget】", - "【onSelected】: Evento de seleção 【Function(bool)】", - "【onDeleted】 : Evento de exclusão 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ru_RU.json deleted file mode 100644 index 852e4ae38..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ru_RU.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "Нативный чип", - "info": "Прародитель всех компонентов Chip, обладает способностью отображать различные чипы, поддерживает события выбора, клика, удаления и другие. Подробнее см. Chip, FilterChip, ActionChip, InputChip, ChoiceChip.", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "Эффект нажатия RawChip", - "desc": [ - "【label】: Центральный компонент 【Widget】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】", - "【labelPadding】 : Отступы для label 【EdgeInsetsGeometry】", - "【shadowColor】: Цвет тени 【Color】", - "【avatar】: Левый компонент 【Widget】", - "【elevation】: Глубина тени 【double】", - "【pressElevation】: Глубина тени при нажатии 【double】", - "【onPressed】 : Событие нажатия 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Эффект выбора и удаления RawChip", - "desc": [ - "【selected】: Выбрано ли 【bool】", - "【deleteIconColor】: Цвет иконки удаления 【Color】", - "【selectedColor】: Цвет выбора 【Color】", - "【deleteIcon】: Компонент в конце 【Widget】", - "【onSelected】: Событие выбора 【Function(bool)】", - "【onDeleted】 : Событие в конце 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_zh-CN.json deleted file mode 100644 index c70fd51df..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_zh-CN.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "原生小条", - "info": "各自Chip组件的始祖,拥有各自Chip表现的能力,支持选中、点击、删除等事件。详见Chip、FilterChip、ActionChip、InputChip、ChoiceChip。", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "RawChip点击效果", - "desc": [ - "【label】: 中间组件 【Widget】", - "【padding】 : 内边距 【EdgeInsetsGeometry】", - "【labelPadding】 : label边距 【EdgeInsetsGeometry】", - "【shadowColor】: 阴影色 【Color】", - "【avatar】: 左侧组件 【Widget】", - "【elevation】: 影深 【double】", - "【pressElevation】: 点击时影深 【double】", - "【onPressed】 : 点击事件 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "RawChip选中和删除效果", - "desc": [ - "【selected】: 是否选中 【bool】", - "【deleteIconColor】: 尾部图标色 【Color】", - "【selectedColor】: 选中色 【Color】", - "【deleteIcon】: 尾部组件 【Widget】", - "【onSelected】: 选中事件 【Function(bool)】", - "【onDeleted】 : 尾部事件 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/node1_press.dart b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/node1_press.dart deleted file mode 100644 index 39140106c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/node1_press.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class PressRawChip extends StatelessWidget { - const PressRawChip({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return RawChip( - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(3), - label: const Text('张风捷特烈'), - avatar: Image.asset("assets/images/icon_head.webp"), - elevation: 3, - pressElevation: 5, - shadowColor: Colors.orangeAccent, - onPressed: () => Navigator.of(context).pushNamed('AboutMePage'), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/node2_select.dart b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/node2_select.dart deleted file mode 100644 index 2165a0d24..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/node2_select.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class SelectRawChip extends StatefulWidget { - const SelectRawChip({Key? key}) : super(key: key); - - @override - _SelectRawChipState createState() => _SelectRawChipState(); -} - -class _SelectRawChipState extends State { - bool _selected = false; - @override - Widget build(BuildContext context) { - return RawChip( - selected: _selected, - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(3), - deleteIconColor: Colors.red, - selectedColor: Colors.orangeAccent.withAlpha(44), - label: const Text('张风捷特烈'), - avatar: Image.asset("assets/images/icon_head.webp"), - elevation: 3, - pressElevation: 5, - shadowColor: Colors.orangeAccent, - onSelected: (v)=> setState(() => _selected=v), - onDeleted: () => Navigator.of(context).pushNamed('AboutMePage'), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_de_DE.json deleted file mode 100644 index a9931825e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "Rohgestenerkennung", - "info": "Kann verwendet werden, um die durch eine gegebene Gestenfabrik beschriebenen Gesten zu erkennen, was bei der Entwicklung eigener Gestenerkenner sehr nützlich ist. Für gängige Gesten verwenden Sie GestureRecognizer.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RawGestureDetector", - "desc": [ - "【behavior】 : Erkennungsverhalten 【HitTestBehavior】", - "【gestures】 : Gestenzuordnung 【Map】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_en_US.json deleted file mode 100644 index 68828d2b9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "Raw Gesture Detector", - "info": "Can be used to detect gestures described by a given gesture factory, which is very useful when developing your own gesture recognizer. For common gestures, use GestureRecognizer.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RawGestureDetector", - "desc": [ - "【behavior】: Detection behavior 【HitTestBehavior】", - "【gestures】: Gesture mapping 【Map】", - "【child】: Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_es_ES.json deleted file mode 100644 index ac69bfcaa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "Detector de gestos en bruto", - "info": "Se puede utilizar para detectar gestos descritos por una fábrica de gestos dada, es muy útil al desarrollar su propio reconocedor de gestos. Para gestos comunes, use GestureRecognizer.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RawGestureDetector", - "desc": [ - "【behavior】 : Comportamiento de detección 【HitTestBehavior】", - "【gestures】 : Mapeo de gestos 【Map】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_fr_FR.json deleted file mode 100644 index 109a3ad2a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "Détecteur de gestes bruts", - "info": "Peut être utilisé pour détecter les gestes décrits par une usine de gestes donnée, très utile lors du développement de son propre détecteur de gestes. Pour les gestes courants, utilisez GestureRecognizer.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RawGestureDetector", - "desc": [ - "【behavior】 : Comportement de détection 【HitTestBehavior】", - "【gestures】 : Mappage des gestes 【Map】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_it_IT.json deleted file mode 100644 index 5607345e2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "Rilevatore di gesti grezzi", - "info": "Può essere utilizzato per rilevare i gesti descritti da una determinata fabbrica di gesti, molto utile nello sviluppo del proprio riconoscitore di gesti. Per i gesti comuni, utilizzare GestureRecognizer.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di RawGestureDetector", - "desc": [ - "【behavior】 : Comportamento di rilevamento 【HitTestBehavior】", - "【gestures】 : Mappatura dei gesti 【Map】", - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ja_JP.json deleted file mode 100644 index 11076bb36..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "生のジェスチャー検出器", - "info": "指定されたジェスチャーファクトリの記述に基づいてジェスチャーを検出するために使用できます。独自のジェスチャー認識器を開発する際に非常に便利です。一般的なジェスチャーには、GestureRecognizerを使用してください。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawGestureDetectorの基本的な使用法", - "desc": [ - "【behavior】 : 検出動作 【HitTestBehavior】", - "【gestures】 : ジェスチャーマッピング 【Map】", - "【child】 : 子ウィジェット 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ko_KR.json deleted file mode 100644 index 35c0c4e75..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "원 제스처 감지기", - "info": "주어진 제스처 팩토리 설명에 따라 제스처를 감지하는 데 사용할 수 있으며, 자신만의 제스처 인식기를 개발할 때 매우 유용합니다. 일반적인 제스처의 경우 GestureRecognizer를 사용하세요.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawGestureDetector 기본 사용법", - "desc": [ - "【behavior】 : 감지 행동 【HitTestBehavior】", - "【gestures】 : 제스처 매핑 【Map】", - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_pt_PT.json deleted file mode 100644 index cc83464e4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "Detetor de Gestos Bruto", - "info": "Pode ser usado para detetar gestos descritos por uma fábrica de gestos fornecida, sendo muito útil ao desenvolver o seu próprio reconhecedor de gestos. Para gestos comuns, use o GestureRecognizer.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RawGestureDetector", - "desc": [ - "【behavior】 : Comportamento de deteção 【HitTestBehavior】", - "【gestures】 : Mapeamento de gestos 【Map】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ru_RU.json deleted file mode 100644 index 1b1570ad6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "Детектор жестов", - "info": "Может использоваться для обнаружения жестов, описанных заданной фабрикой жестов. Очень полезен при разработке собственного распознавателя жестов. Для распространенных жестов используйте GestureRecognizer.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RawGestureDetector", - "desc": [ - "【behavior】 : Поведение обнаружения 【HitTestBehavior】", - "【gestures】 : Сопоставление жестов 【Map】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_zh-CN.json deleted file mode 100644 index f061068ae..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "原手势检测器", - "info": "可以用来检测给定手势工厂描述的手势,在开发自己的手势识别器时非常有用。对于常见的手势,使用 GestureRecognizer。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawGestureDetector基本使用", - "desc": [ - "【behavior】 : 侦测行为 【HitTestBehavior】", - "【gestures】 : 手势映射 【Map】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/node1_base.dart deleted file mode 100644 index 505f019a8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/node1_base.dart +++ /dev/null @@ -1,61 +0,0 @@ - -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class RawGestureDetectorDemo extends StatefulWidget { - const RawGestureDetectorDemo({Key? key}) : super(key: key); - - @override - _RawGestureDetectorDemoState createState() => _RawGestureDetectorDemoState(); -} - -class _RawGestureDetectorDemoState extends State { - String _last = ""; - - @override - Widget build(BuildContext context) { - return RawGestureDetector( - gestures: { - TapGestureRecognizer: - GestureRecognizerFactoryWithHandlers( - () => TapGestureRecognizer(), - init, - ), - }, - child: Container( - width: 300.0, - height: 100.0, - alignment: Alignment.center, - color: Colors.yellow, - child: Text(_last)), - ); - } - - void init(TapGestureRecognizer instance) { - instance..onTapDown = (TapDownDetails details) { - setState(() { - _last = 'down'; - }); - } - ..onTapUp = (TapUpDetails details) { - setState(() { - _last = 'up'; - }); - } - ..onTap = () { - setState(() { - _last = 'tap'; - }); - } - ..onTapCancel = () { - setState(() { - _last = 'cancel'; - }); - } - ; - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_de_DE.json deleted file mode 100644 index b8923e6fc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "Roh-Tastatur-Listener", - "info": "Kann verwendet werden, um Tastendruck- und Tastenloslass-Ereignisse zu erkennen. Derzeit können nur physische Tastaturen erkannt werden und kann auf Desktop-Plattformen verwendet werden.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RawGestureDetector", - "desc": [ - "【onKey】 : Tastaturereignis 【ValueChanged】", - "【focusNode】 : Fokus 【FocusNode】", - "【autofocus】 : Automatischer Fokus 【bool】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_en_US.json deleted file mode 100644 index d1dc21295..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "Raw Keyboard Listener", - "info": "Can be used to detect keyboard key press and release events, currently only physical keyboards can be detected, and can be used on desktop.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RawGestureDetector", - "desc": [ - "【onKey】 : Keyboard event 【ValueChanged】", - "【focusNode】 : Focus 【FocusNode】", - "【autofocus】 : Whether to auto focus 【bool】", - "【child】 : Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_es_ES.json deleted file mode 100644 index a759ad93f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "Escuchador de teclado en bruto", - "info": "Se puede utilizar para detectar eventos de pulsación y liberación de teclas del teclado. Actualmente solo puede detectar teclados físicos y se puede utilizar en aplicaciones de escritorio.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RawGestureDetector", - "desc": [ - "【onKey】 : Evento de teclado 【ValueChanged】", - "【focusNode】 : Nodo de enfoque 【FocusNode】", - "【autofocus】 : Enfoque automático 【bool】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_fr_FR.json deleted file mode 100644 index 6b46447fb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "Écouteur de clavier brut", - "info": "Peut être utilisé pour détecter les événements de pression et de relâchement des touches du clavier. Actuellement, il ne peut détecter que les claviers physiques et peut être utilisé sur les plateformes de bureau.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RawGestureDetector", - "desc": [ - "【onKey】 : Événement de clavier 【ValueChanged】", - "【focusNode】 : Point focal 【FocusNode】", - "【autofocus】 : Mise au point automatique 【bool】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_it_IT.json deleted file mode 100644 index 114bda061..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "Ascoltatore Tastiera Originale", - "info": "Può essere utilizzato per rilevare eventi di pressione e rilascio dei tasti della tastiera, attualmente può rilevare solo tastiere fisiche, può essere utilizzato su desktop.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di RawGestureDetector", - "desc": [ - "【onKey】 : Evento Tastiera 【ValueChanged】", - "【focusNode】 : Nodo Focus 【FocusNode】", - "【autofocus】 : Autofocus 【bool】", - "【child】 : Componente Figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ja_JP.json deleted file mode 100644 index 0811d9ead..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "生キーボードリスナー", - "info": "キーボードのキー押下とキーリリースのイベントを検出するために使用できます。現在は物理キーボードのみ検出可能で、デスクトップで使用できます。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawGestureDetectorの基本使用", - "desc": [ - "【onKey】 : キーボードイベント 【ValueChanged】", - "【focusNode】 : フォーカス 【FocusNode】", - "【autofocus】 : 自動フォーカス 【bool】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ko_KR.json deleted file mode 100644 index ff8c7f9c9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "원시 키보드 리스너", - "info": "키보드 키 누름 및 해제 이벤트를 감지하는 데 사용할 수 있으며, 현재는 물리적 키보드만 감지할 수 있으며 데스크톱에서 사용할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawGestureDetector 기본 사용", - "desc": [ - "【onKey】 : 키보드 이벤트 【ValueChanged】", - "【focusNode】 : 포커스 【FocusNode】", - "【autofocus】 : 자동 포커스 여부 【bool】", - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_pt_PT.json deleted file mode 100644 index 2bdb176e0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "Ouvinte de Teclado Bruto", - "info": "Pode ser usado para detectar eventos de pressionamento e liberação de teclas do teclado, atualmente só pode detectar teclados físicos e pode ser usado em desktop.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RawGestureDetector", - "desc": [ - "【onKey】 : Evento de teclado 【ValueChanged】", - "【focusNode】 : Foco 【FocusNode】", - "【autofocus】 : Foco automático 【bool】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ru_RU.json deleted file mode 100644 index 8e4770dc8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "Слушатель клавиатуры", - "info": "Может использоваться для обнаружения событий нажатия и отпускания клавиш на клавиатуре. В настоящее время может обнаруживать только физические клавиатуры и может использоваться на настольных устройствах.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RawGestureDetector", - "desc": [ - "【onKey】 : Событие клавиатуры 【ValueChanged】", - "【focusNode】 : Фокус 【FocusNode】", - "【autofocus】 : Автоматическая фокусировка 【bool】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_zh-CN.json deleted file mode 100644 index 44a4de06d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "原键盘监听器", - "info": "可以用来检测键盘按键和松键的事件,目前只能检测到物理键盘,可在桌面端使用。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawGestureDetector基本使用", - "desc": [ - "【onKey】 : 键盘事件 【ValueChanged】", - "【focusNode】 : 焦点 【FocusNode】", - "【autofocus】 : 是否自动聚焦 【bool】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/node1_base.dart deleted file mode 100644 index 45a43cdf2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/node1_base.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class RawKeyboardListenerDemo extends StatefulWidget { - const RawKeyboardListenerDemo({Key? key}) : super(key: key); - - @override - _RawKeyboardListenerDemoState createState() => _RawKeyboardListenerDemoState(); -} - -class _RawKeyboardListenerDemoState extends State { - String _info = ""; - - final FocusNode node = FocusNode(); - - @override - Widget build(BuildContext context) { - return RawKeyboardListener( - focusNode: node, - onKey: _onKey, - child: SizedBox( - width: 300, - child: Row( - children: [ - const Expanded( - child: TextField( - decoration: InputDecoration( - border: OutlineInputBorder() - ), - ), - ), - const SizedBox(width: 20,), - Text(_info) - ], - ), - ), - ); - } - - void _onKey(RawKeyEvent value) { - print(value); - if(value is RawKeyDownEvent){ - _info = "按下: ${value.logicalKey.debugName}\nid: 0x${value.logicalKey.keyId.toRadixString(16).padLeft(9,"0")}"; - } - if(value is RawKeyUpEvent){ - _info = "抬起: ${value.logicalKey.debugName}\nid: 0x${value.logicalKey.keyId.toRadixString(16).padLeft(9,"0")}"; - } - setState(() { - - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_de_DE.json deleted file mode 100644 index c3e73fef5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_de_DE.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "Rohmaterialknopf", - "info": "Der ursprüngliche Material-Knopf, der große Meister hinter den Kulissen der Knopfwelt, kann Klick-, Langdruck-, Hervorhebungsänderungsereignisse akzeptieren und Farbe, Form, Schattentiefe, Innenabstand usw. angeben.", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RawMaterialButton", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【elevation】 : Schattentiefe 【double】", - "【fillColor】 : Füllfarbe 【Color】", - "【splashColor】 : Wasserwellenfarbe 【Color】", - "【textStyle】 : Textstil 【TextStyle】", - "【onLongPress】 : Langdruckereignis 【Function()】", - "【onPressed】 : Klickereignis 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Hervorhebung und Form von RawMaterialButton", - "desc": [ - "【highlightElevation】 : Hervorhebungs-Schattentiefe 【double】", - "【shape】 : Form 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_en_US.json deleted file mode 100644 index fd8cfeae3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_en_US.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "Raw Button", - "info": "The original Material button, the behind-the-scenes boss of the button world, can accept click, long press, and highlight change events, and can specify color, shape, shadow depth, padding, and other properties.", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RawMaterialButton", - "desc": [ - "【child】: Child component 【Widget】", - "【elevation】: Shadow depth 【double】", - "【fillColor】: Fill color 【Color】", - "【splashColor】: Ripple color 【Color】", - "【textStyle】: Text style 【TextStyle】", - "【onLongPress】: Long press event 【Function()】", - "【onPressed】: Click event 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Highlight and Shape of RawMaterialButton", - "desc": [ - "【highlightElevation】: Highlight shadow depth 【double】", - "【shape】: Shape 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_es_ES.json deleted file mode 100644 index 738ddebc6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_es_ES.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "Botón Original", - "info": "El botón original de Material, el gran jefe detrás de los botones, puede aceptar eventos de clic, pulsación larga, cambios de resaltado, y puede especificar color, forma, profundidad de sombra, relleno interno y otros atributos.", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RawMaterialButton", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【elevation】 : Profundidad de sombra 【double】", - "【fillColor】 : Color de relleno 【Color】", - "【splashColor】 : Color de efecto de ondas 【Color】", - "【textStyle】 : Estilo de texto 【TextStyle】", - "【onLongPress】 : Evento de pulsación larga 【Function()】", - "【onPressed】 : Evento de clic 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Resaltado y forma de RawMaterialButton", - "desc": [ - "【highlightElevation】 : Profundidad de sombra resaltada 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_fr_FR.json deleted file mode 100644 index ec2bbbca9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_fr_FR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "Bouton Brut", - "info": "Le bouton Material original, le grand maître derrière les boutons, peut accepter des événements de clic, de pression longue et de changement de surbrillance, et peut spécifier la couleur, la forme, l'ombre, la marge intérieure et d'autres attributs.", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RawMaterialButton", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【elevation】 : Profondeur de l'ombre 【double】", - "【fillColor】 : Couleur de remplissage 【Color】", - "【splashColor】 : Couleur de l'effet de vague 【Color】", - "【textStyle】 : Style du texte 【TextStyle】", - "【onLongPress】 : Événement de pression longue 【Function()】", - "【onPressed】 : Événement de clic 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Surbrillance et forme de RawMaterialButton", - "desc": [ - "【highlightElevation】 : Profondeur de l'ombre en surbrillance 【double】", - "【shape】 : Forme 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_it_IT.json deleted file mode 100644 index 5a618dcb0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_it_IT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "Pulsante Originale", - "info": "Il pulsante Material originale, il grande capo dietro le quinte dei pulsanti, può accettare eventi di clic, pressione prolungata, cambiamenti di evidenziazione, e può specificare colore, forma, profondità dell'ombra, spaziatura interna e altre proprietà.", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di RawMaterialButton", - "desc": [ - "【child】 : Componente Figlio 【Widget】", - "【elevation】 : Profondità dell'Ombra 【double】", - "【fillColor】 : Colore di Riempimento 【Color】", - "【splashColor】 : Colore dell'Onda 【Color】", - "【textStyle】 : Stile del Testo 【TextStyle】", - "【onLongPress】 : Evento di Pressione Prolungata 【Function()】", - "【onPressed】 : Evento di Clic 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Evidenziazione e Forma di RawMaterialButton", - "desc": [ - "【highlightElevation】 : Profondità dell'Ombra in Evidenza 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ja_JP.json deleted file mode 100644 index 3dae08ab8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ja_JP.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "オリジナルボタン", - "info": "オリジナルのMaterialボタン、ボタン界の裏の大物、クリック、長押し、ハイライト変更イベントを受け入れ、色、形状、影の深さ、内側の余白などの属性を指定できます。", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawMaterialButtonの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【elevation】 : 影の深さ 【double】", - "【fillColor】 : 塗りつぶし色 【Color】", - "【splashColor】 : 波紋色 【Color】", - "【textStyle】 : テキストスタイル 【TextStyle】", - "【onLongPress】 : 長押しイベント 【Function()】", - "【onPressed】 : クリックイベント 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "RawMaterialButtonのハイライトと形状", - "desc": [ - "【highlightElevation】 : ハイライトの影の深さ 【double】", - "【shape】 : 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ko_KR.json deleted file mode 100644 index 3836fa29d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ko_KR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "원시 버튼", - "info": "원시 Material 버튼, 버튼계의 숨은 거물, 클릭, 길게 누르기, 강조 변화 이벤트를 받아들일 수 있으며, 색상, 모양, 그림자 깊이, 안쪽 여백 등의 속성을 지정할 수 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawMaterialButton 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【elevation】 : 그림자 깊이 【double】", - "【fillColor】 : 채우기 색상 【Color】", - "【splashColor】 : 물결 색상 【Color】", - "【textStyle】 : 텍스트 스타일 【TextStyle】", - "【onLongPress】 : 길게 누르기 이벤트 【Function()】", - "【onPressed】 : 클릭 이벤트 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "RawMaterialButton 강조 및 모양", - "desc": [ - "【highlightElevation】 : 강조 그림자 깊이 【double】", - "【shape】 : 모양 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_pt_PT.json deleted file mode 100644 index 1cf0df63a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_pt_PT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "Botão Original", - "info": "O botão Material original, o grande mestre nos bastidores dos botões, pode aceitar eventos de clique, pressão longa e mudanças de destaque, e pode especificar cor, forma, profundidade de sombra, preenchimento interno e outros atributos.", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RawMaterialButton", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【elevation】 : Profundidade de sombra 【double】", - "【fillColor】 : Cor de preenchimento 【Color】", - "【splashColor】 : Cor do efeito de ondulação 【Color】", - "【textStyle】 : Estilo de texto 【TextStyle】", - "【onLongPress】 : Evento de pressão longa 【Function()】", - "【onPressed】 : Evento de clique 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Destaque e Forma do RawMaterialButton", - "desc": [ - "【highlightElevation】 : Profundidade de sombra em destaque 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ru_RU.json deleted file mode 100644 index 728b9baaa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ru_RU.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "Исходная кнопка", - "info": "Исходная кнопка Material, скрытый лидер среди кнопок, поддерживает события нажатия, долгого нажатия, изменения выделения. Можно указать цвет, форму, тень, внутренние отступы и другие атрибуты.", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RawMaterialButton", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【elevation】 : Глубина тени 【double】", - "【fillColor】 : Цвет заливки 【Color】", - "【splashColor】 : Цвол эффекта ряби 【Color】", - "【textStyle】 : Стиль текста 【TextStyle】", - "【onLongPress】 : Событие долгого нажатия 【Function()】", - "【onPressed】 : Событие нажатия 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Выделение и форма RawMaterialButton", - "desc": [ - "【highlightElevation】 : Глубина тени при выделении 【double】", - "【shape】 : Форма 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_zh-CN.json deleted file mode 100644 index 756285b84..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_zh-CN.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "原始按钮", - "info": "原始的Material按钮,按钮界的幕后大佬,可接受点击、长按、高亮变化事件,可指定颜色、形状。影深、内边距等属性。", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawMaterialButton基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【elevation】 : 影深 【double】", - "【fillColor】 : 填充色 【Color】", - "【splashColor】 : 水波纹色 【Color】", - "【textStyle】 : 文字样式 【TextStyle】", - "【onLongPress】 : 长按事件 【Function()】", - "【onPressed】 : 点击事件 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "RawMaterialButton高亮和形状", - "desc": [ - "【highlightElevation】 : 高亮影深 【double】", - "【shape】 : 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/node1_base.dart deleted file mode 100644 index 18e720465..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/node1_base.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'package:flutter/material.dart'; - - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomRawMaterialButton extends StatelessWidget { - const CustomRawMaterialButton({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [ - RawMaterialButton( - elevation: 2, - fillColor: Colors.green, - splashColor: Colors.orange, - textStyle: const TextStyle(color: Colors.white), - onLongPress: ()=>print('onLongPress'), - child: const Icon(Icons.remove), - onPressed: ()=>print('onPressed'), - ), - RawMaterialButton( - elevation: 2, - fillColor: Colors.blue, - splashColor: Colors.orange, - textStyle: const TextStyle(color: Colors.white), - onLongPress: ()=>print('onLongPress'), - child: const Text('Push'), - onPressed: ()=>print('onPressed'), - ), - RawMaterialButton( - elevation: 2, - fillColor: Colors.red, - splashColor: Colors.orange, - textStyle: const TextStyle(color: Colors.white), - onLongPress: ()=>print('onLongPress'), - child: const Icon(Icons.add), - onPressed: ()=>print('onPressed'), - ), - - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/node2_shape.dart b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/node2_shape.dart deleted file mode 100644 index b38ded03d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/node2_shape.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class ShapeRawMaterialButton extends StatelessWidget { - const ShapeRawMaterialButton({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [ - RawMaterialButton( - elevation: 2, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - fillColor: Colors.green, - splashColor: Colors.orange, - textStyle: const TextStyle(color: Colors.white), - onLongPress: () => print('onLongPress'), - child: const Icon(Icons.remove), - onPressed: () => print('onPressed'), - ), - RawMaterialButton( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(15))), - elevation: 0, - highlightElevation: 0, - fillColor: Colors.blue, - splashColor: Colors.orange, - textStyle: const TextStyle(color: Colors.white), - onLongPress: () => print('onLongPress'), - child: const Text('Push'), - onPressed: () => print('onPressed'), - ), - RawMaterialButton( - elevation: 2, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - fillColor: Colors.red, - splashColor: Colors.orange, - textStyle: const TextStyle(color: Colors.white), - onLongPress: () => print('onLongPress'), - child: const Icon(Icons.add), - onPressed: () => print('onPressed'), - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_de_DE.json deleted file mode 100644 index c415b0c64..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "Aktualisierungsanzeige", - "info": "Enthält einen verschachtelten, scrollbaren Bereich, der beim Herunterziehen ein Aktualisierungssymbol anzeigt und beim Loslassen eine spezifizierte asynchrone Methode ausführt. Eigenschaften wie Farbe und Abstand zur Oberseite können angegeben werden.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RefreshIndicator", - "desc": [ - "【child】 : Kind (scrollbar) 【Widget】", - "【displacement】 : Höhe des schwebenden Indikators 【double】", - "【color】 : Farbe des Indikators 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_en_US.json deleted file mode 100644 index 614a45716..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "Refresh Indicator", - "info": "Internally nested scrollable area, displaying a refresh icon when pulled down, and executing a specified asynchronous method upon release. Properties such as color and distance to the top can be specified.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RefreshIndicator", - "desc": [ - "【child】 : Child (scrollable) 【Widget】", - "【displacement】 : Indicator floating height 【double】", - "【color】 : Indicator color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_es_ES.json deleted file mode 100644 index 7c6b90900..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "Indicador de actualización", - "info": "Área deslizante anidada internamente, muestra un ícono de actualización al deslizar hacia abajo y ejecuta un método asíncrono especificado al soltar. Se pueden especificar propiedades como el color y la distancia desde la parte superior.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RefreshIndicator", - "desc": [ - "【child】 : Hijo (deslizable) 【Widget】", - "【displacement】 : Altura flotante del indicador 【double】", - "【color】 : Color del indicador 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_fr_FR.json deleted file mode 100644 index 0259f3b70..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "Indicateur de rafraîchissement", - "info": "Zone coulissante interne, l'icône de rafraîchissement s'affiche lors du glissement vers le bas, et une méthode asynchrone spécifiée peut être exécutée après le relâchement. Vous pouvez spécifier des propriétés telles que la couleur, la distance par rapport au sommet, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RefreshIndicator", - "desc": [ - "【child】 : Enfant (coulissant) 【Widget】", - "【displacement】 : Hauteur de flottement de l'indicateur 【double】", - "【color】 : Couleur de l'indicateur 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_it_IT.json deleted file mode 100644 index 9107a0d5c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "Indicatore di Aggiornamento", - "info": "Area scorrevole interna nidificata, che mostra un'icona di aggiornamento quando si scorre verso il basso e può eseguire un metodo asincrono specificato dopo il rilascio. È possibile specificare attributi come il colore e la distanza dalla parte superiore.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di RefreshIndicator", - "desc": [ - "【child】 : Figlio (scorrevole) 【Widget】", - "【displacement】 : Altezza di sospensione dell'indicatore 【double】", - "【color】 : Colore dell'indicatore 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ja_JP.json deleted file mode 100644 index 1f504c15c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "リフレッシュインジケーター", - "info": "内部にスライド可能な領域をネストし、下にスライドするとリフレッシュアイコンが表示され、手を離すと指定された非同期メソッドを実行できます。色やトップまでの距離などの属性を指定できます。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RefreshIndicatorの基本使用", - "desc": [ - "【child】 : 子(スライド可能) 【Widget】", - "【displacement】 : インジケーターの浮遊高さ 【double】", - "【color】 : インジケーターの色 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ko_KR.json deleted file mode 100644 index eb369bccb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "새로고침 표시기", - "info": "내부에 스크롤 가능한 영역을 포함하고 있으며, 아래로 스크롤할 때 새로고침 아이콘이 표시되고, 손을 떼면 지정된 비동기 메서드를 실행할 수 있습니다. 색상, 상단까지의 거리 등의 속성을 지정할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RefreshIndicator 기본 사용법", - "desc": [ - "【child】 : 자식(스크롤 가능) 【Widget】", - "【displacement】 : 표시기 부유 높이 【double】", - "【color】 : 표시기 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_pt_PT.json deleted file mode 100644 index 4853223d1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "Indicador de Atualização", - "info": "Área deslizante aninhada internamente, que exibe um ícone de atualização ao deslizar para baixo e executa um método assíncrono especificado ao soltar. Pode especificar atributos como cor, distância até o topo, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RefreshIndicator", - "desc": [ - "【child】 : Filho (deslizante) 【Widget】", - "【displacement】 : Altura de suspensão do indicador 【double】", - "【color】 : Cor do indicador 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ru_RU.json deleted file mode 100644 index c6c4707ba..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "Индикатор обновления", - "info": "Внутренняя вложенная область с возможностью прокрутки, при прокрутке вниз отображается значок обновления, после отпускания можно выполнить указанный асинхронный метод. Можно указать такие свойства, как цвет, расстояние до верхнего края и т.д.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RefreshIndicator", - "desc": [ - "【child】 : Дочерний элемент (с возможностью прокрутки) 【Widget】", - "【displacement】 : Высота индикатора 【double】", - "【color】 : Цвет индикатора 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_zh-CN.json deleted file mode 100644 index f9b529a5e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "刷新指示器", - "info": "内部嵌套可滑动区域,下滑时会显示刷新图标,松手后可以执行指定的异步方法。可指定颜色、到顶端距离等属性。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RefreshIndicator基本使用", - "desc": [ - "【child】 : 孩子(可滑动) 【Widget】", - "【displacement】 : 指示器悬浮高度 【double】", - "【color】 : 指示器颜色 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/node1_base.dart deleted file mode 100644 index 3b0b1745d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/node1_base.dart +++ /dev/null @@ -1,44 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomRefreshIndicator extends StatefulWidget { - const CustomRefreshIndicator({Key? key}) : super(key: key); - - @override - _CustomRefreshIndicatorState createState() => _CustomRefreshIndicatorState(); -} - -class _CustomRefreshIndicatorState extends State { - int _count = 0; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - width: 200, - child: RefreshIndicator( - onRefresh: _increment, - displacement: 20, - color: Colors.orange, - backgroundColor: Colors.white, - child: SingleChildScrollView( - child: Container( - alignment: Alignment.center, - width: 200, - height: 300, - color: Colors.blue, - child: Text('$_count',style: const TextStyle(color: Colors.white,fontSize: 40)), - ), - ), - ), - ); - } - - Future _increment() async { - await Future.delayed(const Duration(seconds: 2)); - setState(() { - _count++; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_de_DE.json deleted file mode 100644 index dca63683c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "Rechteckpositionsübergang", - "info": "Eine Unterklasse von AnimatedWidget, die einen Animator vom Typ Rect verwendet, um Übergangsanimationen zwischen zwei Rect-Objekten für die Kindkomponente zu ermöglichen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RelativePositionedTransition", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【size】 : Versatz von links und oben 【Size】", - "【rect】 : Animation 【Animation】", - " Die PositionedTransition-Komponente funktioniert nur innerhalb eines Stacks" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_en_US.json deleted file mode 100644 index abb6f78ef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "Rectangle Position Transition", - "info": "A subclass of AnimatedWidget, using a Rect type animator to allow child components to transition between two Rect objects.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RelativePositionedTransition", - "desc": [ - "【child】: Child component 【Widget】", - "【size】: Left and top offset 【Size】", - "【rect】: Animation 【Animation】", - " PositionedTransition component only works within a Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_es_ES.json deleted file mode 100644 index a9cee0881..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "Transición de posición rectangular", - "info": "Subclase de AnimatedWidget, utiliza un animador de tipo Rect para realizar una animación de transición entre dos objetos Rect en los componentes hijos.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RelativePositionedTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【size】 : Desplazamiento izquierdo y superior 【Size】", - "【rect】 : Animación 【Animation】", - " El componente PositionedTransition solo funciona dentro de un Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_fr_FR.json deleted file mode 100644 index f9cadaae5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "Transition de position rectangulaire", - "info": "Sous-classe de AnimatedWidget, utilise un animateur de type Rect pour permettre à un composant enfant de faire une transition animée entre deux objets Rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RelativePositionedTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【size】 : Décalage gauche et haut 【Size】", - "【rect】 : Animation 【Animation】", - " Le composant PositionedTransition ne fonctionne que dans une Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_it_IT.json deleted file mode 100644 index 930bfdc68..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "Transizione Posizione Rettangolo", - "info": "Sottoclasse di AnimatedWidget, utilizza un animatore di tipo Rect per far eseguire un'animazione di transizione tra due oggetti Rect ai componenti figli.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di RelativePositionedTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【size】 : Offset sinistro e superiore 【Size】", - "【rect】 : Animazione 【Animation】", - " Il componente PositionedTransition funziona solo all'interno di uno Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ja_JP.json deleted file mode 100644 index 87051af50..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "矩形位置変換", - "info": "AnimatedWidgetのサブクラスで、Rectタイプのアニメーターを使用して子コンポーネントを2つのRectオブジェクト間でトランジションアニメーションさせます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RelativePositionedTransitionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【size】 : 左と上のオフセット 【Size】", - "【rect】 : アニメーション 【Animation】", - " PositionedTransitionコンポーネントはStack内でのみ機能します" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ko_KR.json deleted file mode 100644 index 94672c446..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "사각형 위치 변환", - "info": "AnimatedWidget의 하위 클래스, Rect 타입의 애니메이터를 사용하여 자식 위젯이 두 Rect 객체 간에 전환 애니메이션을 수행하도록 합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RelativePositionedTransition 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【size】 : 왼쪽과 위쪽의 오프셋 【Size】", - "【rect】 : 애니메이션 【Animation】", - " PositionedTransition 위젯은 Stack 내에서만 작동합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_pt_PT.json deleted file mode 100644 index da3db99f3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "Transição de Posição Retangular", - "info": "Subclasse de AnimatedWidget, usa um animador do tipo Rect para permitir que os componentes filhos façam uma animação de transição entre dois objetos Rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de RelativePositionedTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【size】 : Deslocamento esquerdo e superior 【Size】", - "【rect】 : Animação 【Animation】", - " O componente PositionedTransition só funciona dentro de uma Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ru_RU.json deleted file mode 100644 index ead4f390a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "Прямоугольное позиционное преобразование", - "info": "Подкласс AnimatedWidget, использующий аниматор типа Rect для создания переходной анимации между двумя объектами Rect для дочернего компонента.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RelativePositionedTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【size】 : Смещение по левому и верхнему краю 【Size】", - "【rect】 : Анимация 【Animation】", - " Компонент PositionedTransition может работать только внутри Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_zh-CN.json deleted file mode 100644 index b8b19f596..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "矩形位置变换", - "info": "AnimatedWidget的子类,使用Rect类型的动画器让子组件在两个Rect对象之间进行过渡动画。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RelativePositionedTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【size】 : 左和上的偏移量 【Size】", - "【rect】 : 动画 【Animation】", - " PositionedTransition组件只能在Stack内起作用" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/node1_base.dart deleted file mode 100644 index 2fc8df004..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomRelativePositionedTransition extends StatefulWidget { - const CustomRelativePositionedTransition({Key? key}) : super(key: key); - - @override - _CustomRelativePositionedTransitionState createState() => - _CustomRelativePositionedTransitionState(); -} - -class _CustomRelativePositionedTransitionState - extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - late Animation rectAnimation; - - @override - void initState() { - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 2), - ); - rectAnimation = RectTween( - begin: const Rect.fromLTRB(0, 0, 50, 50), - end: const Rect.fromLTRB(0, 0, 50, 50).translate(100, 50), - ).animate(_ctrl); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Container( - color: Colors.grey.withAlpha(33), - width: 200, - height: 100, - child: Stack( - children: [ - RelativePositionedTransition( - size: const Size(200, 100), - rect: rectAnimation as Animation, - child: const Icon( - Icons.android, - color: Colors.green, - size: 50, - ), - ) - ], - ), - )); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_de_DE.json deleted file mode 100644 index 50fda898a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "Sortierbare Liste", - "info": "Eine ListView, die durch langes Drücken sortiert werden kann. Es können Eigenschaften wie die Scrollrichtung, ob umgekehrt, Scroll-Controller usw. angegeben werden.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ReorderableListView", - "desc": [ - "【children】 : Liste der Unterkomponenten 【List】", - "【header】 : Kopfkomponente 【Widget】", - "【padding】 : Innenabstand 【EdgeInsets】", - "【onReorder】 : Rückruf beim Austauschen 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Scrollrichtung von ReorderableListView", - "desc": [ - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【reverse】 : Ob umgekehrt 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_en_US.json deleted file mode 100644 index a1b043f95..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "Reorderable List", - "info": "A ListView that can be reordered by long-pressing, with properties such as scroll direction, reverse, and scroll controller.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ReorderableListView", - "desc": [ - "【children】 : List of child components 【List】", - "【header】 : Header component 【Widget】", - "【padding】 : Padding 【EdgeInsets】", - "【onReorder】 : Callback when reordering 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Scroll Direction of ReorderableListView", - "desc": [ - "【scrollDirection】 : Scroll direction 【Axis】", - "【reverse】 : Whether to reverse 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_es_ES.json deleted file mode 100644 index 6a3fb8142..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "Lista reordenable", - "info": "ListView que permite reordenar mediante pulsación larga, se pueden especificar propiedades como la dirección de deslizamiento, si es inversa, el controlador de deslizamiento, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ReorderableListView", - "desc": [ - "【children】 : Lista de componentes hijos 【List】", - "【header】 : Componente de cabecera 【Widget】", - "【padding】 : Relleno interno 【EdgeInsets】", - "【onReorder】 : Callback al reordenar 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Dirección de deslizamiento de ReorderableListView", - "desc": [ - "【scrollDirection】 : Dirección de deslizamiento 【Axis】", - "【reverse】 : Si es inverso 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_fr_FR.json deleted file mode 100644 index 0f1b257b0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "Liste réorganisable", - "info": "ListView qui permet de réorganiser les éléments par un appui long. Peut spécifier la direction de défilement, l'inversion, le contrôleur de défilement, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ReorderableListView", - "desc": [ - "【children】 : Liste des composants enfants 【List】", - "【header】 : Composant d'en-tête 【Widget】", - "【padding】 : Marge intérieure 【EdgeInsets】", - "【onReorder】 : Rappel lors de la réorganisation 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direction de défilement de ReorderableListView", - "desc": [ - "【scrollDirection】 : Direction de défilement 【Axis】", - "【reverse】 : Inversion 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_it_IT.json deleted file mode 100644 index 49a293d63..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "Lista riordinabile", - "info": "Una ListView che può essere riordinata con un lungo tocco, con la possibilità di specificare la direzione di scorrimento, se invertire, il controller di scorrimento e altre proprietà.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ReorderableListView", - "desc": [ - "【children】 : Lista dei componenti figli 【List】", - "【header】 : Componente di intestazione 【Widget】", - "【padding】 : Spaziatura interna 【EdgeInsets】", - "【onReorder】 : Callback per lo scambio 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direzione di scorrimento di ReorderableListView", - "desc": [ - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【reverse】 : Se invertire 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ja_JP.json deleted file mode 100644 index bc86df7ef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "並べ替え可能なリスト", - "info": "長押しで並べ替え可能なListViewで、スワイプ方向、逆方向かどうか、スワイプコントローラーなどの属性を指定できます。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ReorderableListViewの基本使用", - "desc": [ - "【children】 : 子コンポーネントリスト 【List】", - "【header】 : ヘッダーコンポーネント 【Widget】", - "【padding】 : 内側の余白 【EdgeInsets】", - "【onReorder】 : 並べ替え時のコールバック 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "ReorderableListViewのスワイプ方向", - "desc": [ - "【scrollDirection】 : スワイプ方向 【Axis】", - "【reverse】 : 逆方向かどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ko_KR.json deleted file mode 100644 index 526d329be..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "재정렬 가능한 리스트", - "info": "길게 눌러 정렬할 수 있는 ListView, 스크롤 방향, 반대 방향 여부, 스크롤 컨트롤러 등의 속성을 지정할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ReorderableListView 기본 사용법", - "desc": [ - "【children】 : 자식 위젯 리스트 【List】", - "【header】 : 헤더 위젯 【Widget】", - "【padding】 : 내부 여백 【EdgeInsets】", - "【onReorder】 : 재정렬 시 콜백 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "ReorderableListView 스크롤 방향", - "desc": [ - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【reverse】 : 반대 방향 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_pt_PT.json deleted file mode 100644 index 098c74865..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "Lista Reordenável", - "info": "Uma ListView que permite reordenar com um toque longo, podendo especificar a direção de deslize, se é reverso, controlador de deslize, entre outros atributos.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ReorderableListView", - "desc": [ - "【children】 : Lista de componentes filhos 【List】", - "【header】 : Componente de cabeçalho 【Widget】", - "【padding】 : Preenchimento interno 【EdgeInsets】", - "【onReorder】 : Callback ao reordenar 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direção de Deslize do ReorderableListView", - "desc": [ - "【scrollDirection】 : Direção de deslize 【Axis】", - "【reverse】 : Se é reverso 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ru_RU.json deleted file mode 100644 index 09d81f1cf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "Переупорядочиваемый список", - "info": "ListView, который можно упорядочивать с помощью длительного нажатия, можно указать направление прокрутки, обратное направление, контроллер прокрутки и другие свойства.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ReorderableListView", - "desc": [ - "【children】 : Список дочерних компонентов 【List】", - "【header】 : Верхний компонент 【Widget】", - "【padding】 : Внутренний отступ 【EdgeInsets】", - "【onReorder】 : Обратный вызов при переупорядочивании 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Направление прокрутки ReorderableListView", - "desc": [ - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【reverse】 : Обратное направление 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_zh-CN.json deleted file mode 100644 index b67b345a5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "可重排序列表", - "info": "可以进行长按排序的ListView,可指定滑动方向、是否反向、滑动控制器等属性。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ReorderableListView基本使用", - "desc": [ - "【children】 : 子组件列表 【List】", - "【header】 : 头部组件 【Widget】", - "【padding】 : 内边距 【EdgeInsets】", - "【onReorder】 : 调换时回调 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "ReorderableListView滑动方向", - "desc": [ - "【scrollDirection】 : 滑动方向 【Axis】", - "【reverse】 : 是否反向 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/node1_base.dart deleted file mode 100644 index 153fe66ea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/node1_base.dart +++ /dev/null @@ -1,74 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class CustomReorderableListView extends StatefulWidget { - const CustomReorderableListView({Key? key}) : super(key: key); - - @override - _CustomReorderableListViewState createState() => _CustomReorderableListViewState(); -} - -class _CustomReorderableListViewState extends State { - -final List data = [ - Colors.yellow[50]!, - Colors.yellow[100]!, - Colors.yellow[200]!, - Colors.yellow[300]!, - Colors.yellow[400]!, - Colors.yellow[500]!, - Colors.yellow[600]!, - Colors.yellow[700]!, - Colors.yellow[800]!, - Colors.yellow[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 250, - child: ReorderableListView( - padding: const EdgeInsets.all(10), - header: Container( - color: Colors.blue, - alignment: Alignment.center, - height: 50, - child: const Text('长按拖拽进行换位',style: TextStyle(color: Colors.white),)), - onReorder: _handleReorder, - children: data.map((color) => _buildItem(color)).toList(), - ), - ); - } - - void _handleReorder(int oldIndex, int newIndex) { - if (oldIndex < newIndex) { - newIndex -= 1; - } - - setState(() { - final element = data.removeAt(oldIndex); - data.insert(newIndex, element); - }); - - } - - Widget _buildItem(Color color) { - return Container( - key: ValueKey(color) , - alignment: Alignment.center, - height: 50, - color: color, - child: Text( - colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ]), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/node2_direction.dart b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/node2_direction.dart deleted file mode 100644 index 906ba9bbd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/node2_direction.dart +++ /dev/null @@ -1,74 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class DirectionReorderableListView extends StatefulWidget { - const DirectionReorderableListView({Key? key}) : super(key: key); - - @override - _DirectionReorderableListViewState createState() => - _DirectionReorderableListViewState(); -} - -class _DirectionReorderableListViewState extends State { - final List data = [ - Colors.yellow[50]!, - Colors.yellow[100]!, - Colors.yellow[200]!, - Colors.yellow[300]!, - Colors.yellow[400]!, - Colors.yellow[500]!, - Colors.yellow[600]!, - Colors.yellow[700]!, - Colors.yellow[800]!, - Colors.yellow[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ReorderableListView( - scrollDirection: Axis.horizontal, - reverse: false, - onReorder: _handleReorder, - children: data.map((color) => _buildItem(color)).toList(), - ), - ); - } - - void _handleReorder(int oldIndex, int newIndex) { - if (oldIndex < newIndex) { - newIndex -= 1; - } - - setState(() { - final element = data.removeAt(oldIndex); - data.insert(newIndex, element); - }); - - } - - Widget _buildItem(Color color) { - return Container( - key: ValueKey(color) , - alignment: Alignment.center, - width: 80, - color: color, - child: Text( - colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_de_DE.json deleted file mode 100644 index 5d4f0f0c0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "Drehübergang", - "info": "Kann ein Kind-Widget aufnehmen und es mit einer Drehanimation versehen, erfordert einen Animator turns und verfügt über die Eigenschaft alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RotationTransition", - "desc": [ - "【child】 : Kind-Widget 【Widget】", - "【turns】 : Ob verschwinden 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_en_US.json deleted file mode 100644 index 42eaf2aa6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "Rotation Transition", - "info": "Can accommodate a child component and make it perform a rotation animation. Requires an animator turns and has an alignment property.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RotationTransition", - "desc": [ - "【child】 : Child component 【Widget】", - "【turns】 : Whether to disappear 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_es_ES.json deleted file mode 100644 index 2e2b439c9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "Transición de Rotación", - "info": "Puede contener un componente hijo y hacer que realice una animación de rotación. Requiere un animador turns y tiene la propiedad alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RotationTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【turns】 : ¿Desaparece? 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_fr_FR.json deleted file mode 100644 index 83817b99e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "Transition de rotation", - "info": "Peut contenir un composant enfant et lui faire effectuer une animation de rotation, nécessite un animateur turns, possède une propriété alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RotationTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【turns】 : Disparaît ou non 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_it_IT.json deleted file mode 100644 index 4eb81129c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "Transizione di rotazione", - "info": "Può contenere un componente figlio e farlo ruotare con un'animazione, richiede un animatore turns, possiede l'attributo alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di RotationTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【turns】 : Scompare 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ja_JP.json deleted file mode 100644 index 6c2f878f0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "回転変換", - "info": "子コンポーネントを収容し、回転アニメーションを行わせることができます。アニメーターturnsを提供する必要があり、alignment属性を持っています。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RotationTransitionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【turns】 : 消えるかどうか 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ko_KR.json deleted file mode 100644 index fcacc7f8d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "회전 변환", - "info": "하나의 자식 위젯을 포함하고 회전 애니메이션을 적용할 수 있습니다. 애니메이터 turns를 제공해야 하며, alignment 속성을 가지고 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RotationTransition 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【turns】 : 사라짐 여부 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_pt_PT.json deleted file mode 100644 index a19b0f636..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "Transição de Rotação", - "info": "Pode conter um componente filho e fazê-lo realizar uma animação de rotação, requer um animador turns e possui a propriedade alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RotationTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【turns】 : Desaparece ou não 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ru_RU.json deleted file mode 100644 index 7fcc81619..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "Вращательный переход", - "info": "Может содержать один дочерний компонент и анимировать его вращение. Требуется предоставить аниматор turns, имеет свойство alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RotationTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【turns】 : Исчезнет ли 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_zh-CN.json deleted file mode 100644 index 77a2fb32b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "旋转变换", - "info": "可容纳一个子组件,并使其进行旋转动画,需要提供动画器turns,拥有alignment属性。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RotationTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【turns】 : 是否消失 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/node1_base.dart deleted file mode 100644 index 761491f04..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/node1_base.dart +++ /dev/null @@ -1,55 +0,0 @@ - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomRotationTransition extends StatefulWidget { - const CustomRotationTransition({Key? key}) : super(key: key); - - @override - _CustomRotationTransitionState createState() => _CustomRotationTransitionState(); -} - -class _CustomRotationTransitionState extends State with SingleTickerProviderStateMixin{ - - late AnimationController _ctrl; - - @override - void initState() { - super.initState(); - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 2), - ); - _ctrl.forward(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Container( - color: Colors.grey.withAlpha(22), - width: 100, - height: 100, - child: RotationTransition( - turns: CurvedAnimation( - parent: _ctrl, - curve: Curves.linear, - ), - child: const Icon( - Icons.camera_outlined, - color: Colors.green, - size: 60, - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_de_DE.json deleted file mode 100644 index 96eec136f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "Gerüst", - "info": "Eine allgemeine App-Struktur, die obere, untere, linke, rechte, mittlere und schwebende Button-Bereiche umfasst, in denen Komponenten platziert werden können.", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Scaffold", - "desc": [ - "【appBar】 : Kopfkomponente 【PreferredSizeWidget】", - "【bottomNavigationBar】 : Fußkomponente 【Widget】", - "【drawer】 : Linke Schiebekomponente 【Widget】", - "【endDrawer】 : Rechte Schiebekomponente 【Widget】", - "【body】 : Inhaltkomponente 【Widget】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【floatingActionButton】 : Schwebender Button 【Widget】", - "【floatingActionButtonLocation】 : Position des schwebenden Buttons 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_en_US.json deleted file mode 100644 index 2964c3817..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "Scaffold", - "info": "A general app structure, including top, bottom, left, right, middle, and floating button parts, where components can be placed in corresponding positions.", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Scaffold", - "desc": [ - "【appBar】: Header component 【PreferredSizeWidget】", - "【bottomNavigationBar】: Bottom component 【Widget】", - "【drawer】: Left sliding component 【Widget】", - "【endDrawer】: Right sliding component 【Widget】", - "【body】: Content component 【Widget】", - "【backgroundColor】: Background color 【Color】", - "【floatingActionButton】: Floating button 【Widget】", - "【floatingActionButtonLocation】: Floating button position 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_es_ES.json deleted file mode 100644 index 3fbddd852..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "Andamio", - "info": "Una estructura de aplicación genérica que incluye partes superior, inferior, izquierda, derecha, central y botón flotante, donde se pueden colocar componentes en las posiciones correspondientes.", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Scaffold", - "desc": [ - "【appBar】 : Componente de la cabecera 【PreferredSizeWidget】", - "【bottomNavigationBar】 : Componente inferior 【Widget】", - "【drawer】 : Componente deslizante izquierdo 【Widget】", - "【endDrawer】 : Componente deslizante derecho 【Widget】", - "【body】 : Componente de contenido 【Widget】", - "【backgroundColor】 : Color de fondo 【Color】", - "【floatingActionButton】 : Botón flotante 【Widget】", - "【floatingActionButtonLocation】 : Ubicación del botón flotante 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_fr_FR.json deleted file mode 100644 index 156168ecf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "Échafaudage", - "info": "Une structure d'application générique comprenant des parties supérieure, inférieure, gauche, droite, centrale et un bouton flottant, où des composants peuvent être placés aux positions correspondantes.", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Scaffold", - "desc": [ - "【appBar】 : Composant de tête 【PreferredSizeWidget】", - "【bottomNavigationBar】 : Composant de bas 【Widget】", - "【drawer】 : Composant de glissement gauche 【Widget】", - "【endDrawer】 : Composant de glissement droit 【Widget】", - "【body】 : Composant de contenu 【Widget】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【floatingActionButton】 : Bouton flottant 【Widget】", - "【floatingActionButtonLocation】 : Position du bouton flottant 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_it_IT.json deleted file mode 100644 index 3d6852f77..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "Impalcatura", - "info": "Una struttura generica per app, che include parti superiore, inferiore, sinistra, destra, centrale e un pulsante fluttuante, dove è possibile posizionare componenti nelle posizioni corrispondenti.", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di Scaffold", - "desc": [ - "【appBar】 : Componente superiore 【PreferredSizeWidget】", - "【bottomNavigationBar】 : Componente inferiore 【Widget】", - "【drawer】 : Componente scorrevole a sinistra 【Widget】", - "【endDrawer】 : Componente scorrevole a destra 【Widget】", - "【body】 : Componente principale 【Widget】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【floatingActionButton】 : Pulsante fluttuante 【Widget】", - "【floatingActionButtonLocation】 : Posizione del pulsante fluttuante 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ja_JP.json deleted file mode 100644 index 966ee658b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "足場", - "info": "一般的なアプリの構造で、上部、下部、左側、右側、中央、フローティングボタンの部分を含み、対応する位置にコンポーネントを配置できます。", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scaffoldの基本的な使い方", - "desc": [ - "【appBar】 : ヘッダーコンポーネント 【PreferredSizeWidget】", - "【bottomNavigationBar】 : フッターコンポーネント 【Widget】", - "【drawer】 : 左スライドコンポーネント 【Widget】", - "【endDrawer】 : 右スライドコンポーネント 【Widget】", - "【body】 : コンテンツコンポーネント 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【floatingActionButton】 : フローティングボタン 【Widget】", - "【floatingActionButtonLocation】 : フローティングボタンの位置 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ko_KR.json deleted file mode 100644 index a5ac3c4c6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "스캐폴드", - "info": "일반적인 앱 구조로, 상단, 하단, 좌측, 우측, 중앙, 플로팅 버튼 부분을 포함하며, 해당 위치에 컴포넌트를 배치할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scaffold 기본 사용법", - "desc": [ - "【appBar】 : 헤더 컴포넌트 【PreferredSizeWidget】", - "【bottomNavigationBar】 : 하단 컴포넌트 【Widget】", - "【drawer】 : 좌측 슬라이드 컴포넌트 【Widget】", - "【endDrawer】 : 우측 슬라이드 컴포넌트 【Widget】", - "【body】 : 내용 컴포넌트 【Widget】", - "【backgroundColor】 : 배경색 【Color】", - "【floatingActionButton】 : 플로팅 버튼 【Widget】", - "【floatingActionButtonLocation】 : 플로팅 버튼 위치 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_pt_PT.json deleted file mode 100644 index 9dd00eea9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "Andaime", - "info": "Uma estrutura de aplicativo genérica, incluindo partes superior, inferior, esquerda, direita, central e botão flutuante, onde os componentes podem ser colocados nas posições correspondentes.", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Scaffold", - "desc": [ - "【appBar】 : Componente do cabeçalho 【PreferredSizeWidget】", - "【bottomNavigationBar】 : Componente inferior 【Widget】", - "【drawer】 : Componente deslizante esquerdo 【Widget】", - "【endDrawer】 : Componente deslizante direito 【Widget】", - "【body】 : Componente de conteúdo 【Widget】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【floatingActionButton】 : Botão flutuante 【Widget】", - "【floatingActionButtonLocation】 : Localização do botão flutuante 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ru_RU.json deleted file mode 100644 index 8d59eb995..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "Леса", - "info": "Универсальная структура приложения, включающая верхнюю, нижнюю, левую, правую, центральную части и плавающую кнопку, в соответствующих местах могут размещаться компоненты.", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Scaffold", - "desc": [ - "【appBar】 : Верхний компонент 【PreferredSizeWidget】", - "【bottomNavigationBar】 : Нижний компонент 【Widget】", - "【drawer】 : Левый выдвижной компонент 【Widget】", - "【endDrawer】 : Правый выдвижной компонент 【Widget】", - "【body】 : Основной компонент 【Widget】", - "【backgroundColor】 : Цвет фона 【Color】", - "【floatingActionButton】 : Плавающая кнопка 【Widget】", - "【floatingActionButtonLocation】 : Расположение плавающей кнопки 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_zh-CN.json deleted file mode 100644 index 72cb719e4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "脚手架", - "info": "一个通用app结构,包括上、下、左、右、中、浮动按钮部位,对应位置可盛放组件。", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scaffold基本用法", - "desc": [ - "【appBar】 : 头部组件 【PreferredSizeWidget】", - "【bottomNavigationBar】 : 底部组件 【Widget】", - "【drawer】 : 左侧滑组件 【Widget】", - "【endDrawer】 : 右侧滑组件 【Widget】", - "【body】 : 内容组件 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【floatingActionButton】 : 浮动按钮 【Widget】", - "【floatingActionButtonLocation】 : 浮动按钮位置 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/node1_base.dart deleted file mode 100644 index 5c18db228..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/node1_base.dart +++ /dev/null @@ -1,113 +0,0 @@ -import 'package:flutter/material.dart'; -import '../PopupMenuButton/node1_base.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomScaffold extends StatefulWidget { - const CustomScaffold({Key? key}) : super(key: key); - - @override - State createState() => _CustomScaffoldState(); -} - -// AppBar 默认的实例,有状态 -class _CustomScaffoldState extends State with SingleTickerProviderStateMixin { - final List tabs = const ['风画庭', '雨韵舍', '雷鸣殿', '电疾堂', '霜寒阁', '雪月楼']; - int _position = 0; - final Map iconsMap = { - "图鉴": Icons.home, - "动态": Icons.toys, - "喜欢": Icons.favorite, - "手册": Icons.class_, - "我的": Icons.account_circle, - }; - final List _colors = [ - Colors.blue, - Colors.red, - Colors.yellow, - Colors.green, - Colors.purple, - ]; - - late TabController _tabController; - - @override - void initState() { - super.initState(); - _tabController = TabController(vsync: this, length: tabs.length); - } - - @override - void dispose() { - _tabController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height - 300, - child: Scaffold( - floatingActionButtonLocation: FloatingActionButtonLocation.endFloat, - floatingActionButton: FloatingActionButton( - child: const Icon(Icons.add), - onPressed: () {}, - ), - drawer: _buildLeftDrawer(), - endDrawer: _buildLeftDrawer(), - appBar: AppBar( - title: const Text('风雅六社'), - backgroundColor: Colors.blue, - centerTitle: true, - actions: const [Icon(Icons.star), CustomPopupMenuButton()], - bottom: _buildTabBar(), - ), - body: _buildTableBarView(), - bottomNavigationBar: _buildBottomNavigationBar(), - ), - ); - } - - Drawer _buildLeftDrawer() => Drawer( - elevation: 1, - child: Image.asset( - 'assets/images/sabar.webp', - fit: BoxFit.cover, - ), - ); - - PreferredSizeWidget _buildTabBar() => TabBar( - isScrollable: true, - controller: _tabController, - indicatorColor: Colors.orangeAccent, - tabs: tabs.map((e) => Tab(text: e)).toList(), - ); - - Widget _buildBottomNavigationBar() => BottomNavigationBar( - onTap: (position) => setState(() => _position = position), - currentIndex: _position, - elevation: 1, - backgroundColor: Colors.white, - iconSize: 25, - selectedLabelStyle: const TextStyle(fontWeight: FontWeight.bold), - showUnselectedLabels: false, - showSelectedLabels: true, - items: iconsMap.keys - .map((key) => BottomNavigationBarItem( - label: key, - icon: Icon(iconsMap[key]), - backgroundColor: _colors[_position])) - .toList(), - ); - - Widget _buildTableBarView() => TabBarView( - controller: _tabController, - children: tabs - .map((e) => Center( - child: Text( - e, - style: const TextStyle(color: Colors.blue, fontSize: 20), - ))) - .toList()); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_de_DE.json deleted file mode 100644 index 6153ce835..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "Skalierungstransformation", - "info": "Kann ein Kindelement aufnehmen und es mit einer Skalierungsanimation versehen. Erfordert einen Animator 'scale' und besitzt das Attribut 'alignment'.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ScaleTransition", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【scale】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_en_US.json deleted file mode 100644 index 1486f2425..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "Scale Transition", - "info": "Can contain a child component and make it perform a scaling animation. Requires providing an animator scale and has the alignment property.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ScaleTransition", - "desc": [ - "【child】: Child component 【Widget】", - "【scale】: Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_es_ES.json deleted file mode 100644 index 6bb870aea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "Transición de Escala", - "info": "Puede contener un componente hijo y realizar una animación de escala, requiere un animador scale, tiene la propiedad alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ScaleTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【scale】 : Animación 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_fr_FR.json deleted file mode 100644 index 9a59a7918..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "Transition de mise à l'échelle", - "info": "Peut contenir un composant enfant et lui appliquer une animation de mise à l'échelle. Nécessite un animateur scale et possède l'attribut alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ScaleTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【scale】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_it_IT.json deleted file mode 100644 index 2614f2878..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "Transizione di Scala", - "info": "Può contenere un componente figlio e farlo animare con una transizione di scala, richiede un animatore scale, ha la proprietà alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di ScaleTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【scale】 : Animazione 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ja_JP.json deleted file mode 100644 index 1d61966a1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "スケールトランジション", - "info": "子コンポーネントを収容し、スケールアニメーションを行わせることができます。アニメーターscaleを提供する必要があり、alignment属性を持っています。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScaleTransitionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【scale】 : アニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ko_KR.json deleted file mode 100644 index a902e389b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "스케일 변환", - "info": "하나의 자식 위젯을 포함하고, 스케일 애니메이션을 수행할 수 있습니다. 애니메이션 스케일을 제공해야 하며, alignment 속성을 가지고 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScaleTransition 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【scale】 : 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_pt_PT.json deleted file mode 100644 index 67ce554da..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "Transição de Escala", - "info": "Pode conter um componente filho e fazer com que ele realize uma animação de escala, requer um animador scale, possui o atributo alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do ScaleTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【scale】 : Animação 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ru_RU.json deleted file mode 100644 index a3d008386..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "Масштабирование", - "info": "Может содержать один дочерний компонент и выполнять анимацию масштабирования. Требуется предоставить аниматор scale, имеет свойство alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ScaleTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【scale】 : Анимация 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_zh-CN.json deleted file mode 100644 index de5eae99c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "缩放变换", - "info": "可容纳一个子组件,并使其进行缩放动画,需要提供动画器scale,拥有alignment属性。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScaleTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【scale】 : 动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/node1_base.dart deleted file mode 100644 index 524dbdb7e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/node1_base.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomScaleTransition extends StatefulWidget { - const CustomScaleTransition({Key? key}) : super(key: key); - - @override - _CustomScaleTransitionState createState() => _CustomScaleTransitionState(); -} - -class _CustomScaleTransitionState extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - _ctrl = AnimationController(vsync: this, duration: const Duration(seconds: 2)); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Container( - color: Colors.grey.withAlpha(22), - width: 100, - height: 100, - child: ScaleTransition( - scale: CurvedAnimation(parent: _ctrl, curve: Curves.linear), - child: const Icon(Icons.android, color: Colors.green, size: 60), - ), - )); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_de_DE.json deleted file mode 100644 index ec33e7447..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "Scrollbare Komponente", - "info": "Implementiert ein Interaktionsmodell für eine scrollbare Komponente, das die Konstruktion des Viewports durch den viewportBuilder erfordert. Es ist eine der Kernkomponenten der ScrollView-Implementierung und wird in der Regel nicht direkt verwendet.", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Scrollable", - "desc": [ - "【viewportBuilder】: Viewport-Konstruktor 【ViewportBuilder】", - "【axisDirection】: Scrollrichtung 【AxisDirection】", - "【controller】: Scroll-Controller 【ScrollController】", - "【dragStartBehavior】: Drag-Verhalten 【DragStartBehavior】", - "【physics】: Scroll-Physik 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_en_US.json deleted file mode 100644 index eb851f1c9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "Scrollable Component", - "info": "Implements an interactive model for a scrollable component, requiring the construction of a viewport via viewportBuilder. It is one of the core implementation components of ScrollView and is generally not used directly.", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Scrollable", - "desc": [ - "【viewportBuilder】: Viewport Constructor 【ViewportBuilder】", - "【axisDirection】: Scroll Direction 【AxisDirection】", - "【controller】: Scroll Controller 【ScrollController】", - "【dragStartBehavior】: Drag Behavior 【DragStartBehavior】", - "【physics】: Scroll Physics 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_es_ES.json deleted file mode 100644 index 04ba09ed5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "Componente Deslizable", - "info": "Implementa un modelo de interacción para un componente desplazable, requiere la construcción del viewport a través del viewportBuilder. Es uno de los componentes centrales de ScrollView, generalmente no se usa directamente.", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Scrollable", - "desc": [ - "【viewportBuilder】: Constructor del viewport 【ViewportBuilder】", - "【axisDirection】: Dirección de desplazamiento 【AxisDirection】", - "【controller】: Controlador de desplazamiento 【ScrollController】", - "【dragStartBehavior】: Comportamiento de arrastre 【DragStartBehavior】", - "【physics】: Fenómeno de desplazamiento 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_fr_FR.json deleted file mode 100644 index 5ead61272..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "Composant défilable", - "info": "Implémente un modèle d'interaction pour un composant défilable, nécessitant la construction d'une fenêtre d'affichage via viewportBuilder. C'est l'un des composants de base de ScrollView, généralement pas utilisé directement.", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Scrollable", - "desc": [ - "【viewportBuilder】 : Constructeur de fenêtre d'affichage 【ViewportBuilder】", - "【axisDirection】: Direction de défilement 【AxisDirection】", - "【controller】: Contrôleur de défilement 【ScrollController】", - "【dragStartBehavior】: Comportement de glissement 【DragStartBehavior】", - "【physics】: Physique de défilement 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_it_IT.json deleted file mode 100644 index d2c6a6e2f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "Componente Scorrevole", - "info": "Implementa un modello di interazione per un componente scorrevole, richiede la costruzione di un viewport tramite viewportBuilder. È uno dei componenti principali di ScrollView e generalmente non viene utilizzato direttamente.", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Scrollable", - "desc": [ - "【viewportBuilder】 : Costruttore del viewport 【ViewportBuilder】", - "【axisDirection】: Direzione di scorrimento 【AxisDirection】", - "【controller】: Controller di scorrimento 【ScrollController】", - "【dragStartBehavior】: Comportamento di trascinamento 【DragStartBehavior】", - "【physics】: Fisica dello scorrimento 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ja_JP.json deleted file mode 100644 index f653f3c3d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "スクロール可能コンポーネント", - "info": "スクロール可能なコンポーネントのインタラクションモデルを実装し、viewportBuilderを使用してビューポートを構築する必要があります。ScrollViewのコア実装コンポーネントの一つで、通常直接使用されません。", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scrollableの基本的な使用法", - "desc": [ - "【viewportBuilder】 : ビューポートビルダー 【ViewportBuilder】", - "【axisDirection】: スクロール方向 【AxisDirection】", - "【controller】: スクロールコントローラー 【ScrollController】", - "【dragStartBehavior】: ドラッグ開始動作 【DragStartBehavior】", - "【physics】: スクロール物理現象 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ko_KR.json deleted file mode 100644 index cd7375312..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "스크롤 가능한 컴포넌트", - "info": "스크롤 가능한 컴포넌트의 상호작용 모델을 구현하며, viewportBuilder를 통해 viewport를 구성해야 합니다. ScrollView의 핵심 구현 컴포넌트 중 하나로, 일반적으로 직접 사용되지 않습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scrollable 기본 사용법", - "desc": [ - "【viewportBuilder】 : 뷰포트 빌더 【ViewportBuilder】", - "【axisDirection】: 스크롤 방향 【AxisDirection】", - "【controller】: 스크롤 컨트롤러 【ScrollController】", - "【dragStartBehavior】: 드래그 시작 동작 【DragStartBehavior】", - "【physics】: 스크롤 물리 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_pt_PT.json deleted file mode 100644 index dfded8887..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "Componente Deslizável", - "info": "Implementa um modelo de interação para um componente deslizável, necessitando da construção de um viewport através do viewportBuilder. É um dos componentes principais da implementação do ScrollView, geralmente não utilizado diretamente.", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Scrollable", - "desc": [ - "【viewportBuilder】 : Construtor do viewport 【ViewportBuilder】", - "【axisDirection】: Direção do deslize 【AxisDirection】", - "【controller】: Controlador de deslize 【ScrollController】", - "【dragStartBehavior】: Comportamento de arrasto 【DragStartBehavior】", - "【physics】: Fenómeno de rolagem 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ru_RU.json deleted file mode 100644 index 7bc209fe1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "Прокручиваемый компонент", - "info": "Реализует модель взаимодействия прокручиваемого компонента, требуется viewportBuilder для построения viewport. Это один из основных компонентов реализации ScrollView, обычно не используется напрямую.", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Scrollable", - "desc": [ - "【viewportBuilder】 : Конструктор viewport 【ViewportBuilder】", - "【axisDirection】: Направление прокрутки 【AxisDirection】", - "【controller】: Контроллер прокрутки 【ScrollController】", - "【dragStartBehavior】: Поведение при перетаскивании 【DragStartBehavior】", - "【physics】: Физика прокрутки 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_zh-CN.json deleted file mode 100644 index f726ea80e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "可滑动组件", - "info": "实现了一个可滚动组件的交互模型,需要viewportBuilder进的viewport的构造。是ScrollView的核心实现组件之一,一般不直接使用。", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scrollable的基本使用", - "desc": [ - "【viewportBuilder】 : 视口构造器 【ViewportBuilder】", - "【axisDirection】: 滑动方向 【AxisDirection】", - "【controller】: 滑动控制器 【ScrollController】", - "【dragStartBehavior】: t拖动行为 【DragStartBehavior】", - "【physics】: 滚动现象 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/node1_base.dart deleted file mode 100644 index f32df2c33..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/node1_base.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; - -/// create by 张风捷特烈 on 2020/8/2 -/// contact me by email 1981462002@qq.com - - -class ScrollableDemo extends StatelessWidget { - const ScrollableDemo({super.key}); - - List get data => List.generate(32, (i) => Color(0xFF6600FF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 250, - child: Scrollable( - axisDirection: AxisDirection.down, - physics: const BouncingScrollPhysics(), - dragStartBehavior: DragStartBehavior.start, - viewportBuilder: (ctx, position) => Viewport( - cacheExtent: 200, - cacheExtentStyle: CacheExtentStyle.pixel, - offset: position, - slivers: [_buildSliverList()], - ), - ), - ); - } - - Widget _buildSliverList() => SliverList( - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - margin: const EdgeInsets.only(top: 1), - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle( - color: Colors.white, - shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ], - ), - ), - ), - childCount: data.length), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_de_DE.json deleted file mode 100644 index d452345bb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "Scrollleiste", - "info": "Muss einen scrollbaren Bereich umschließen. Wenn scrollbar, wird eine Scrollleiste zur Anzeige angezeigt.", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Scrollbar", - "desc": [ - "【child】: Untergeordnete Komponente 【Widget】", - "【controller】: Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_en_US.json deleted file mode 100644 index 875f30bf9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "Scrollbar", - "info": "It needs to wrap a scrollable area. When it is scrollable, a scroll bar will be displayed for indication.", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Scrollbar", - "desc": [ - "【child】: Child widget 【Widget】", - "【controller】: Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_es_ES.json deleted file mode 100644 index cbaf503aa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "Barra de desplazamiento", - "info": "Debe envolver un área desplazable. Cuando es desplazable, se mostrará una barra de desplazamiento para indicar.", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Scrollbar", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_fr_FR.json deleted file mode 100644 index c94a78d5b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "Barre de défilement", - "info": "Doit envelopper une zone défilable. Lorsqu'elle est défilable, une barre de défilement est affichée pour l'indication.", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Scrollbar", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【controller】 : Contrôleur 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_it_IT.json deleted file mode 100644 index d06c80c1d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "Barra di scorrimento", - "info": "Deve avvolgere un'area scorrevole. Quando è scorrevole, verrà visualizzata una barra di scorrimento per indicare.", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Scrollbar", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【controller】 : Controllore 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ja_JP.json deleted file mode 100644 index c2831c338..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "スクロールバー", - "info": "スクロール可能な領域をラップする必要があります。スクロール可能な場合、スクロールのバーが表示されて指示します。", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scrollbarの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【controller】 : コントローラー 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ko_KR.json deleted file mode 100644 index c4a018f38..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "스크롤바", - "info": "스크롤 가능한 영역을 감싸야 하며, 스크롤이 가능할 때 스크롤 바가 표시되어 위치를 표시합니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scrollbar 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【controller】 : 컨트롤러 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_pt_PT.json deleted file mode 100644 index 4724067d9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "Barra de Rolagem", - "info": "Precisa envolver uma área rolável. Quando rolável, exibirá uma barra de rolagem para indicar.", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Scrollbar", - "desc": [ - "【child】 : Componente Filho 【Widget】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ru_RU.json deleted file mode 100644 index 3f8d4a3df..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "Ползунок прокрутки", - "info": "Необходимо обернуть прокручиваемую область, при прокрутке будет отображаться ползунок для индикации.", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Scrollbar", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【controller】 : Контроллер 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_zh-CN.json deleted file mode 100644 index 7e6d02ea7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "滑动指示栏", - "info": "需要包裹一个可滑动区域,当可滑动时,会显示滑动的bar用于指示。", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scrollbar基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【controller】 : 控制器 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/node1_base.dart deleted file mode 100644 index da07c5b34..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/node1_base.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomScrollbar extends StatelessWidget { - const CustomScrollbar({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Scrollbar( - child: ListView( - padding: const EdgeInsets.symmetric(horizontal: 5), - children: data - .map((color) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: color, - child: Text( - colorString(color), - style: const TextStyle( - color: Colors.white, - shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ], - ), - ), - )) - .toList(), - ), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_de_DE.json deleted file mode 100644 index 9d384d43b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_de_DE.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "Auswählbarer Text", - "info": "Auswählbarer Text, der ausgewählt und kopiert werden kann. Die Farbe, Größe, Textstil, Ausrichtung usw. des Cursors können angegeben werden.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SelectableText", - "desc": [ - "【Parameter】 : Angezeigter Text 【String】", - "【style】 : Textstil 【TextStyle】", - "【cursorRadius】 : Cursorradius 【Radius】", - "【cursorColor】 : Cursorfarbe 【Color】", - "【cursorWidth】 : Cursorbreite 【double】", - "【showCursor】 : Cursor anzeigen 【bool】", - "【autofocus】 : Autofokus 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "Ausrichtungseigenschaften von SelectableText", - "desc": [ - "【textAlign】 : Ausrichtung*6 【textAlign】", - "【textDirection】 : Textrichtung*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_en_US.json deleted file mode 100644 index ac2e706d1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_en_US.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "Selectable Text", - "info": "Selectable text that can be selected and copied. You can specify the color, size, text style, alignment, etc. of the cursor.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SelectableText", - "desc": [ - "【Parameter】 : Display text 【String】", - "【style】 : Text style 【TextStyle】", - "【cursorRadius】 : Cursor radius 【Radius】", - "【cursorColor】 : Cursor color 【Color】", - "【cursorWidth】 : Cursor width 【double】", - "【showCursor】 : Whether to show the cursor 【bool】", - "【autofocus】 : Auto focus 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "Alignment Properties of SelectableText", - "desc": [ - "【textAlign】 : Alignment method*6 【textAlign】", - "【textDirection】 : Text direction*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_es_ES.json deleted file mode 100644 index ef1aee65c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_es_ES.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "Texto Seleccionable", - "info": "Texto seleccionable que se puede seleccionar y copiar. Se puede especificar el color, tamaño, estilo de texto, alineación, etc., del cursor.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SelectableText", - "desc": [ - "【Parámetro】 : Texto mostrado 【String】", - "【style】 : Estilo de texto 【TextStyle】", - "【cursorRadius】 : Radio del cursor 【Radius】", - "【cursorColor】 : Color del cursor 【Color】", - "【cursorWidth】 : Ancho del cursor 【double】", - "【showCursor】 : Mostrar cursor 【bool】", - "【autofocus】 : Enfoque automático 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "Propiedades de alineación de SelectableText", - "desc": [ - "【textAlign】 : Alineación*6 【textAlign】", - "【textDirection】 : Dirección del texto*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_fr_FR.json deleted file mode 100644 index 99181eb37..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_fr_FR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "Texte sélectionnable", - "info": "Texte sélectionnable, peut être sélectionné et copié. Permet de spécifier la couleur du curseur, la taille, le style du texte, l'alignement, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SelectableText", - "desc": [ - "【Paramètre】 : Texte affiché 【String】", - "【style】 : Style du texte 【TextStyle】", - "【cursorRadius】 : Rayon du curseur 【Radius】", - "【cursorColor】 : Couleur du curseur 【Color】", - "【cursorWidth】 : Largeur du curseur 【double】", - "【showCursor】 : Afficher le curseur 【bool】", - "【autofocus】 : Mise au point automatique 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "Propriétés d'alignement de SelectableText", - "desc": [ - "【textAlign】 : Mode d'alignement*6 【textAlign】", - "【textDirection】 : Direction du texte*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_it_IT.json deleted file mode 100644 index 10e6cc53d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_it_IT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "Testo selezionabile", - "info": "Testo selezionabile che può essere selezionato e copiato. È possibile specificare il colore, la dimensione, lo stile del testo, l'allineamento, ecc. del cursore.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SelectableText", - "desc": [ - "【Parametro】 : Testo da visualizzare 【String】", - "【style】 : Stile del testo 【TextStyle】", - "【cursorRadius】 : Raggio del cursore 【Radius】", - "【cursorColor】 : Colore del cursore 【Color】", - "【cursorWidth】 : Larghezza del cursore 【double】", - "【showCursor】 : Mostra il cursore 【bool】", - "【autofocus】 : Autofocus 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "Proprietà di allineamento di SelectableText", - "desc": [ - "【textAlign】 : Allineamento*6 【textAlign】", - "【textDirection】 : Direzione del testo*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ja_JP.json deleted file mode 100644 index b669bbeac..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ja_JP.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "選択可能なテキスト", - "info": "選択可能なテキストで、選択やコピーが可能です。カーソルの色、サイズ、テキストスタイル、配置などを指定できます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SelectableTextの基本使用", - "desc": [ - "【入参】 : 表示テキスト 【String】", - "【style】 : テキストスタイル 【TextStyle】", - "【cursorRadius】 : カーソル半径 【Radius】", - "【cursorColor】 : カーソル色 【Color】", - "【cursorWidth】 : カーソル幅 【double】", - "【showCursor】 : カーソル表示の有無 【bool】", - "【autofocus】 : 自動フォーカス 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "SelectableTextの配置属性", - "desc": [ - "【textAlign】 : 配置方法*6 【textAlign】", - "【textDirection】 : テキスト方向*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ko_KR.json deleted file mode 100644 index 75baa2b45..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ko_KR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "선택 가능한 텍스트", - "info": "선택 가능한 텍스트로, 선택 및 복사가 가능합니다. 커서의 색상, 크기, 텍스트 스타일, 정렬 방식 등을 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SelectableText 기본 사용법", - "desc": [ - "【입력 매개변수】 : 표시할 텍스트 【String】", - "【style】 : 텍스트 스타일 【TextStyle】", - "【cursorRadius】 : 커서 반지름 【Radius】", - "【cursorColor】 : 커서 색상 【Color】", - "【cursorWidth】 : 커서 너비 【double】", - "【showCursor】 : 커서 표시 여부 【bool】", - "【autofocus】 : 자동 포커스 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "SelectableText 정렬 속성", - "desc": [ - "【textAlign】 : 정렬 방식*6 【textAlign】", - "【textDirection】 : 텍스트 방향*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_pt_PT.json deleted file mode 100644 index 571375f5d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_pt_PT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "Texto Selecionável", - "info": "Texto que pode ser selecionado e copiado. Pode especificar a cor do cursor, tamanho, estilo de texto, alinhamento, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SelectableText", - "desc": [ - "【Parâmetro】 : Texto a ser exibido 【String】", - "【style】 : Estilo do texto 【TextStyle】", - "【cursorRadius】 : Raio do cursor 【Radius】", - "【cursorColor】 : Cor do cursor 【Color】", - "【cursorWidth】 : Largura do cursor 【double】", - "【showCursor】 : Mostrar cursor 【bool】", - "【autofocus】 : Foco automático 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "Propriedades de Alinhamento do SelectableText", - "desc": [ - "【textAlign】 : Método de alinhamento*6 【textAlign】", - "【textDirection】 : Direção do texto*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ru_RU.json deleted file mode 100644 index 6b26264f8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ru_RU.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "Выбираемый текст", - "info": "Текст, который можно выбирать и копировать. Можно указать цвет курсора, размер, стиль текста, выравнивание и т.д.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SelectableText", - "desc": [ - "【Параметр】 : Отображаемый текст 【String】", - "【style】 : Стиль текста 【TextStyle】", - "【cursorRadius】 : Радиус курсора 【Radius】", - "【cursorColor】 : Цвет курсора 【Color】", - "【cursorWidth】 : Ширина курсора 【double】", - "【showCursor】 : Показывать ли курсор 【bool】", - "【autofocus】 : Автофокус 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "Свойства выравнивания SelectableText", - "desc": [ - "【textAlign】 : Способ выравнивания*6 【textAlign】", - "【textDirection】 : Направление текста*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_zh-CN.json deleted file mode 100644 index 0459ab60d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_zh-CN.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "可选择文字", - "info": "可选择的文字,可以选择、复制。可指定浮标的颜色、大小、文字样式、对齐方式等。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SelectableText基本使用", - "desc": [ - "【入参】 : 显示文字 【String】", - "【style】 : 文字样式 【TextStyle】", - "【cursorRadius】 : 光标半径 【Radius】", - "【cursorColor】 : 光标颜色 【Color】", - "【cursorWidth】 : 光标宽度 【double】", - "【showCursor】 : 是否显示光标 【bool】", - "【autofocus】 : 自动聚焦 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "SelectableText对齐属性", - "desc": [ - "【textAlign】 : 对齐方式*6 【textAlign】", - "【textDirection】 : 文字方向*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/node1_base.dart deleted file mode 100644 index a20dcd5a8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/node1_base.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomSelectableText extends StatelessWidget { - const CustomSelectableText({Key? key}) : super(key: key); - - final String text = " 始臣之解牛之时,所见无非牛者。三年之后,未尝见全牛也。方今之时," - "臣以神遇而不以目视,官知止而神欲行。依乎天理,批大郤,导大窾,因其固然," - "技经肯綮之未尝,而况大軱乎!良庖岁更刀,割也;族庖月更刀,折也。" - "今臣之刀十九年矣,所解数千牛矣,而刀刃若新发于硎。彼节者有间,而刀刃者无厚;" - "以无厚入有间,恢恢乎其于游刃必有余地矣,是以十九年而刀刃若新发于硎。" - "虽然,每至于族,吾见其难为,怵然为戒,视为止,行为迟。动刀甚微,謋然已解,如土委地。" - "提刀而立,为之四顾,为之踌躇满志,善刀而藏之."; - - @override - Widget build(BuildContext context) { - return SelectableText( - text, - style: const TextStyle(fontSize: 18, color: Colors.orange), - cursorColor: Colors.green, - cursorRadius: const Radius.circular(3), - cursorWidth: 5, - showCursor: true, - autofocus: false, - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/node2_align.dart b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/node2_align.dart deleted file mode 100644 index 53bf6c37a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/node2_align.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class AlignSelectableText extends StatefulWidget { - const AlignSelectableText({Key? key}) : super(key: key); - - @override - _AlignSelectableTextState createState() => _AlignSelectableTextState(); -} - -class _AlignSelectableTextState extends State { - final String text = - "The [SelectableText] widget displays a string of text with a single style." - "The string might break across multiple lines or might all be displayed on" - "the same line depending on the layout constraints."; - TextAlign _textAlign = TextAlign.left; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSelector(), - SelectableText( - text, - style: const TextStyle(fontSize: 18, color: Colors.red), - cursorColor: Colors.green, - cursorRadius: const Radius.circular(3), - cursorWidth: 5, - showCursor: true, - textAlign: _textAlign, - textDirection: TextDirection.ltr, - autofocus: false, - ), - ], - ); - } - - Widget _buildSelector() { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - const Text( - "textAlign属性选择:", - style: TextStyle( - fontSize: 16, - color: Colors.blue, - fontWeight: FontWeight.bold, - ), - ), - DropdownButton( - underline: Container(), - value: _textAlign, - items: TextAlign.values - .map((e) => DropdownMenuItem( - value: e, - child: Text(e.toString()), - )) - .toList(), - onChanged: (e) { - setState(() { - _textAlign = e??_textAlign; - }); - }), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_de_DE.json deleted file mode 100644 index d6ac3b941..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "Größenübergang", - "info": "Kann ein Kindelement aufnehmen und eine Größenanimation durchführen. Es erfordert einen Animator sizeFactor und kann die Achse und die Achsenausrichtung der Größenänderung angeben.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SizeTransition", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【axis】 : Achse*2 【Axis】", - "【sizeFactor】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_en_US.json deleted file mode 100644 index 35fe02fd9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "Size Transition", - "info": "Can accommodate a child component and animate its size. Requires an animator sizeFactor, and can specify the axis of size change and the axis alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SizeTransition", - "desc": [ - "【child】: Child component 【Widget】", - "【axis】: Axis*2 【Axis】", - "【sizeFactor】: Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_es_ES.json deleted file mode 100644 index 7c346567e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "Transición de Tamaño", - "info": "Puede contener un componente hijo y realizar una animación de tamaño, requiere un animador sizeFactor, y se puede especificar el eje de cambio de tamaño y la alineación del eje.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SizeTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【axis】 : Eje*2 【Axis】", - "【sizeFactor】 : Animación 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_fr_FR.json deleted file mode 100644 index cc72ace55..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "Transition de taille", - "info": "Peut contenir un composant enfant et lui faire subir une animation de taille. Nécessite un animateur sizeFactor, peut spécifier l'axe de changement de taille et l'alignement axial axisAlignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SizeTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【axis】 : Axe*2 【Axis】", - "【sizeFactor】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_it_IT.json deleted file mode 100644 index f4cd22911..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "Transizione Dimensionale", - "info": "Può contenere un componente figlio e fargli eseguire un'animazione di dimensione, richiede un animatore sizeFactor, è possibile specificare l'asse di cambiamento delle dimensioni e l'allineamento assiale.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di SizeTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【axis】 : Asse*2 【Axis】", - "【sizeFactor】 : Animazione 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ja_JP.json deleted file mode 100644 index 9e63d9144..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "サイズ変更", - "info": "子コンポーネントを収容し、そのサイズアニメーションを実行します。アニメーターsizeFactorを提供する必要があり、サイズ変化の軸と軸方向のaxisAlignmentを指定できます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizeTransitionの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【axis】 : 軸方向*2 【Axis】", - "【sizeFactor】 : アニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ko_KR.json deleted file mode 100644 index 4ea1cccb3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "크기 변환", - "info": "하위 컴포넌트를 수용하고 크기 애니메이션을 수행할 수 있습니다. 애니메이션 sizeFactor를 제공해야 하며, 크기 변화 축 및 축 정렬을 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizeTransition 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【axis】 : 축*2 【Axis】", - "【sizeFactor】 : 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_pt_PT.json deleted file mode 100644 index 849222156..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "Transição de Tamanho", - "info": "Pode conter um componente filho e fazê-lo realizar uma animação de tamanho, requer um animador sizeFactor, pode especificar o eixo de mudança de tamanho e o alinhamento axial do eixo.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SizeTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【axis】 : Eixo*2 【Axis】", - "【sizeFactor】 : Animação 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ru_RU.json deleted file mode 100644 index 7b4cef6d8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "Изменение размера", - "info": "Может содержать один дочерний компонент и анимировать его размер. Требуется предоставить аниматор sizeFactor, можно указать ось изменения размера и выравнивание оси axisAlignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SizeTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【axis】 : Ось*2 【Axis】", - "【sizeFactor】 : Анимация 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_zh-CN.json deleted file mode 100644 index 8cb4f26b3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "尺寸变换", - "info": "可容纳一个子组件,并使其进行尺寸动画,需要提供动画器sizeFactor,可指定尺寸变化轴及轴向的axisAlignment。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizeTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【axis】 : 轴向*2 【Axis】", - "【sizeFactor】 : 动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/node1_base.dart deleted file mode 100644 index 733e9c49d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/node1_base.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomSizeTransition extends StatefulWidget { - const CustomSizeTransition({Key? key}) : super(key: key); - - @override - _CustomSizeTransitionState createState() => _CustomSizeTransitionState(); -} - -class _CustomSizeTransitionState extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - _ctrl = - AnimationController(vsync: this, duration: const Duration(seconds: 1)); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Wrap( - runSpacing: 20, - children: [ - SizeTransition( - axis: Axis.horizontal, - sizeFactor: CurvedAnimation(parent: _ctrl, curve: Curves.linear), - child: Container( - width: MediaQuery.of(context).size.width, - color: Colors.orange, - child: - const Icon(Icons.android, color: Colors.green, size: 80)), - ), - SizeTransition( - axis: Axis.vertical, - sizeFactor: CurvedAnimation(parent: _ctrl, curve: Curves.linear), - child: Container( - width: MediaQuery.of(context).size.width, - color: Colors.orange, - child: - const Icon(Icons.android, color: Colors.green, size: 80)), - ), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_de_DE.json deleted file mode 100644 index a3835b8c4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "Schiebeübergang", - "info": "Eine Unterklasse von AnimatedWidget, die einen Animator vom Typ Offset verwendet, um eine Übergangsanimation zwischen zwei Offset-Objekten für das Kind-Widget zu ermöglichen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SlideTransition", - "desc": [ - "【child】 : Kind-Widget 【Widget】", - "【textDirection】 : X-Achsenrichtung 【TextDirection】", - "【position】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_en_US.json deleted file mode 100644 index b808bde8a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "Slide Transition", - "info": "A subclass of AnimatedWidget, using an animator of type Offset to allow child components to transition between two Offset objects.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SlideTransition", - "desc": [ - "【child】: Child component 【Widget】", - "【textDirection】: X-axis direction 【TextDirection】", - "【position】: Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_es_ES.json deleted file mode 100644 index da6678e9c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "Transición de deslizamiento", - "info": "Subclase de AnimatedWidget, utiliza un animador de tipo Offset para realizar una animación de transición entre dos objetos Offset en el componente hijo.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SlideTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【textDirection】 : Dirección del eje x 【TextDirection】", - "【position】 : Animación 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_fr_FR.json deleted file mode 100644 index 3e24c65a6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "Transition par glissement", - "info": "Sous-classe de AnimatedWidget, utilise un animateur de type Offset pour permettre à un composant enfant de faire une animation de transition entre deux objets Offset.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SlideTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【textDirection】 : Direction de l'axe x 【TextDirection】", - "【position】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_it_IT.json deleted file mode 100644 index 067c33256..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "Transizione scorrevole", - "info": "Sottoclasse di AnimatedWidget, utilizza un animatore di tipo Offset per far sì che i componenti figli eseguano un'animazione di transizione tra due oggetti Offset.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di SlideTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【textDirection】 : Direzione dell'asse x 【TextDirection】", - "【position】 : Animazione 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ja_JP.json deleted file mode 100644 index 06eef3ac4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "スライド遷移", - "info": "AnimatedWidgetのサブクラスで、Offsetタイプのアニメーターを使用して子コンポーネントを2つのOffsetオブジェクト間で遷移させるアニメーションを行います。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SlideTransition 基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【textDirection】 : x軸方向 【TextDirection】", - "【position】 : アニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ko_KR.json deleted file mode 100644 index fece4f899..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "슬라이드 전환", - "info": "AnimatedWidget의 하위 클래스로, Offset 타입의 애니메이터를 사용하여 자식 위젯이 두 Offset 객체 간의 전환 애니메이션을 수행하도록 합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SlideTransition 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【textDirection】 : x축 방향 【TextDirection】", - "【position】 : 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_pt_PT.json deleted file mode 100644 index 62082d061..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "Transição de Deslizamento", - "info": "Subclasse de AnimatedWidget, usa um animador do tipo Offset para fazer com que os componentes filhos realizem uma animação de transição entre dois objetos Offset.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SlideTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【textDirection】 : Direção do eixo x 【TextDirection】", - "【position】 : Animação 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ru_RU.json deleted file mode 100644 index 70208440c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "Скользящий переход", - "info": "Подкласс AnimatedWidget, использует аниматор типа Offset для создания анимации перехода между двумя объектами Offset для дочернего компонента.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SlideTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【textDirection】 : Направление оси x 【TextDirection】", - "【position】 : Анимация 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_zh-CN.json deleted file mode 100644 index 8007c60a1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "滑动变换", - "info": "AnimatedWidget的子类,使用Offset类型的动画器让子组件在两个Offset对象之间进行过渡动画。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SlideTransition 基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【textDirection】 : x轴方向 【TextDirection】", - "【position】 : 动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/node1_base.dart deleted file mode 100644 index 19569425d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/node1_base.dart +++ /dev/null @@ -1,67 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomSlideTransition extends StatefulWidget { - const CustomSlideTransition({Key? key}) : super(key: key); - - @override - _CustomSlideTransitionState createState() => _CustomSlideTransitionState(); -} - -class _CustomSlideTransitionState extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - late Animation animation; - - @override - void initState() { - super.initState(); - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 2), - )..forward(); - - animation = Tween( - begin: Offset.zero, - end: const Offset(0.5, 0.5), - ).animate(_ctrl); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Container( - width: 200, - color: Colors.grey.withAlpha(33), - height: 100, - child: Stack( - fit: StackFit.expand, - children: [ - SlideTransition( - textDirection: TextDirection.ltr, - position: animation, - child: _buildChild(), - ), - SlideTransition( - textDirection: TextDirection.rtl, - position: animation, - child: _buildChild(), - ), - ], - ), - )); - } - Widget _buildChild() => const Icon( - Icons.accessible_forward_sharp, - color: Colors.green, - size: 25, - ); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_de_DE.json deleted file mode 100644 index 96f03fab1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_de_DE.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "Schieberegler", - "info": "Schieberegler-Komponente, die es ermöglicht, zwischen einem festgelegten Minimum und Maximum zu wählen. Kann Farbe, Anzahl der Segmente und angezeigte Labels angeben und erhält einen Rückruf bei Fortschrittsänderungen.", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung des Sliders", - "desc": [ - "【value】 : Wert 【double】", - "【min】 : Mindestwert 【double】", - "【max】 : Höchstwert 【double】", - "【activeColor】 : Aktive Farbe 【Color】", - "【inactiveColor】 : Inaktive Farbe 【Color】", - "【onChanged】 : Rückruf bei Änderung 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Segmente und Labels des Sliders", - "desc": [ - "【divisions】 : Anzahl der Segmente 【int】", - "【label】 : Text des Hinweisblasens 【String】", - "【onChangeStart】 : Überwachung beim Start des Schiebens 【Function(double)】", - "【onChangeEnd】 : Überwachung beim Ende des Schiebens 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_en_US.json deleted file mode 100644 index 91e1a8e2b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_en_US.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "Slider", - "info": "Slider component, allows dragging to select between a specified maximum and minimum value. Can specify color, number of segments, and displayed labels, and receives progress change callbacks.", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Slider", - "desc": [ - "【value】 : value 【double】", - "【min】 : minimum value 【double】", - "【max】 : maximum value 【double】", - "【activeColor】 : active color 【Color】", - "【inactiveColor】 : inactive color 【Color】", - "【onChanged】 : callback when changed 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Slider Segments and Labels", - "desc": [ - "【divisions】 : number of segments 【int】", - "【label】 : tooltip text 【String】", - "【onChangeStart】 : listener when sliding starts 【Function(double)】", - "【onChangeEnd】 : listener when sliding ends 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_es_ES.json deleted file mode 100644 index 3f9140447..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_es_ES.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "Control deslizante", - "info": "Componente de control deslizante que permite seleccionar arrastrando entre un valor máximo y mínimo especificados. Se puede especificar el color, el número de segmentos y las etiquetas mostradas, y recibe una devolución de llamada para los cambios de progreso.", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico del Slider", - "desc": [ - "【value】 : valor 【double】", - "【min】 : valor mínimo 【double】", - "【max】 : valor máximo 【double】", - "【activeColor】 : color activo 【Color】", - "【inactiveColor】 : color inactivo 【Color】", - "【onChanged】 : devolución de llamada al cambiar 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Segmentos y etiquetas del Slider", - "desc": [ - "【divisions】 : número de segmentos 【int】", - "【label】 : texto de la burbuja de información 【String】", - "【onChangeStart】 : escucha al comenzar a deslizar 【Function(double)】", - "【onChangeEnd】 : escucha al finalizar el deslizamiento 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_fr_FR.json deleted file mode 100644 index 737792618..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_fr_FR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "Curseur", - "info": "Composant curseur, permet de faire glisser pour sélectionner entre une valeur maximale et minimale spécifiées. Peut spécifier la couleur, le nombre de segments et les étiquettes affichées, reçoit un rappel de changement de progression.", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base du Slider", - "desc": [ - "【value】 : valeur 【double】", - "【min】 : valeur minimale 【double】", - "【max】 : valeur maximale 【double】", - "【activeColor】 : couleur active 【Color】", - "【inactiveColor】 : couleur inactive 【Color】", - "【onChanged】 : rappel lors du changement 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Segmentation et étiquettes du Slider", - "desc": [ - "【divisions】 : nombre de segments 【int】", - "【label】 : texte de la bulle d'info 【String】", - "【onChangeStart】 : écoute au début du glissement 【Function(double)】", - "【onChangeEnd】 : écoute à la fin du glissement 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_it_IT.json deleted file mode 100644 index 35fb80343..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_it_IT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "Cursore", - "info": "Componente cursore, consente di selezionare trascinando tra un valore massimo e minimo specificato. È possibile specificare il colore, il numero di segmenti e le etichette visualizzate, e ricevere un callback per le variazioni di avanzamento.", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base del cursore", - "desc": [ - "【value】 : valore 【double】", - "【min】 : valore minimo 【double】", - "【max】 : valore massimo 【double】", - "【activeColor】 : colore attivo 【Color】", - "【inactiveColor】 : colore inattivo 【Color】", - "【onChanged】 : callback al cambiamento 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Segmentazione ed etichette del cursore", - "desc": [ - "【divisions】 : numero di segmenti 【int】", - "【label】 : testo della bolla di suggerimento 【String】", - "【onChangeStart】 : ascolto all'inizio dello scorrimento 【Function(double)】", - "【onChangeEnd】 : ascolto alla fine dello scorrimento 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ja_JP.json deleted file mode 100644 index 626b39242..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ja_JP.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "スライダー", - "info": "スライダーコンポーネントは、指定された最大値と最小値の間でドラッグして選択することができます。色、分割数、表示されるラベルを指定でき、進捗変化のコールバックを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "スライダーの基本使用", - "desc": [ - "【value】 : 数値 【double】", - "【min】 : 最小値 【double】", - "【max】 : 最大値 【double】", - "【activeColor】 : アクティブカラー 【Color】", - "【inactiveColor】 : 非アクティブカラー 【Color】", - "【onChanged】 : 変更時のコールバック 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "スライダーの分割とラベル", - "desc": [ - "【divisions】 : 分割数 【int】", - "【label】 : ヒントバブルテキスト 【String】", - "【onChangeStart】 : スライド開始時のリスナー 【Function(double)】", - "【onChangeEnd】 : スライド終了時のリスナー 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ko_KR.json deleted file mode 100644 index 4a82878cb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ko_KR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "슬라이더", - "info": "슬라이더 컴포넌트는 지정된 최대값과 최소값 사이에서 드래그하여 선택할 수 있습니다. 색상, 분할 수 및 표시된 라벨을 지정할 수 있으며, 진행률 변경 콜백을 받습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Slider 기본 사용", - "desc": [ - "【value】 : 값 【double】", - "【min】 : 최소값 【double】", - "【max】 : 최대값 【double】", - "【activeColor】 : 활성화 색상 【Color】", - "【inactiveColor】 : 비활성화 색상 【Color】", - "【onChanged】 : 변경 시 콜백 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Slider의 분할과 라벨", - "desc": [ - "【divisions】 : 분할 수 【int】", - "【label】 : 툴팁 텍스트 【String】", - "【onChangeStart】 : 슬라이드 시작 시 리스너 【Function(double)】", - "【onChangeEnd】 : 슬라이드 종료 시 리스너 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_pt_PT.json deleted file mode 100644 index e4a68925f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_pt_PT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "Deslizador", - "info": "Componente deslizante que permite selecionar arrastando entre um valor máximo e mínimo especificados. Pode especificar a cor, o número de segmentos e as etiquetas exibidas, e recebe uma chamada de retorno para alterações de progresso.", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Slider", - "desc": [ - "【value】 : valor 【double】", - "【min】 : valor mínimo 【double】", - "【max】 : valor máximo 【double】", - "【activeColor】 : cor ativa 【Color】", - "【inactiveColor】 : cor inativa 【Color】", - "【onChanged】 : chamada de retorno ao alterar 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Segmentação e etiquetas do Slider", - "desc": [ - "【divisions】 : número de segmentos 【int】", - "【label】 : texto da bolha de dica 【String】", - "【onChangeStart】 : ouvinte ao iniciar o deslize 【Function(double)】", - "【onChangeEnd】 : ouvinte ao terminar o deslize 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ru_RU.json deleted file mode 100644 index 64bbb857f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ru_RU.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "Ползунок", - "info": "Компонент ползунка, который позволяет выбирать значение, перетаскивая между указанными минимальным и максимальным значениями. Можно указать цвет, количество сегментов и отображаемые метки, а также получить обратный вызов при изменении прогресса.", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Slider", - "desc": [ - "【value】 : значение 【double】", - "【min】 : минимальное значение 【double】", - "【max】 : максимальное значение 【double】", - "【activeColor】 : активный цвет 【Color】", - "【inactiveColor】 : неактивный цвет 【Color】", - "【onChanged】 : обратный вызов при изменении 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Сегменты и метки Slider", - "desc": [ - "【divisions】 : количество сегментов 【int】", - "【label】 : текст подсказки 【String】", - "【onChangeStart】 : слушатель начала перетаскивания 【Function(double)】", - "【onChangeEnd】 : слушатель окончания перетаскивания 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_zh-CN.json deleted file mode 100644 index d8164d8fa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_zh-CN.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "滑块", - "info": "滑块组件,可以在指定的最大值和最小值之间拖动选择。可指定颜色、分段数及显示的标签,接收进度变化回调。", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Slider基本使用", - "desc": [ - "【value】 : 数值 【double】", - "【min】 : 最小值 【double】", - "【max】 : 最大值 【double】", - "【activeColor】 : 激活颜色 【Color】", - "【inactiveColor】 : 非激活颜色 【Color】", - "【onChanged】 : 改变时回调 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Slider的分段与标签", - "desc": [ - "【divisions】 : 分段数 【int】", - "【label】 : 提示气泡文字 【String】", - "【onChangeStart】 : 开始滑动时监听 【Function(double)】", - "【onChangeEnd】 : 滑动结束时监听 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Slider/node1_base.dart deleted file mode 100644 index 102802e02..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/node1_base.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomSlider extends StatefulWidget { - const CustomSlider({Key? key}) : super(key: key); - - @override - _CustomSliderState createState() => _CustomSliderState(); -} - -class _CustomSliderState extends State { - double _value = 0.0; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Text('当前值:${_value.toStringAsFixed(1)}'), - Slider( - value: _value, - min: 0.0, - max: 360.0, - activeColor: Colors.orangeAccent, - inactiveColor: Colors.green.withAlpha(99), - onChanged: _onChange), - ], - ); - } - - void _onChange(value) { - setState(() { - _value = value; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/node2_lable.dart b/modules/widget_system/widgets/lib/StatefulWidget/Slider/node2_lable.dart deleted file mode 100644 index 268f5e8fe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/node2_lable.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class DivisionsSlider extends StatefulWidget { - const DivisionsSlider({Key? key}) : super(key: key); - - @override - _DivisionsSliderState createState() => _DivisionsSliderState(); -} - -class _DivisionsSliderState extends State { - double _value = 0.0; - - @override - Widget build(BuildContext context) { - return Slider( - value: _value, - min: 0.0, - max: 360.0, - divisions: 10, - label: _value.toStringAsFixed(1), - activeColor: Colors.orangeAccent, - inactiveColor: Colors.green.withAlpha(99), - onChangeStart: (value) { - print('开始滑动:$value'); - }, - onChangeEnd: (value) { - print('滑动结束:$value'); - }, - onChanged: (value) { - setState(() { - _value = value; - }); - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_de_DE.json deleted file mode 100644 index d4526d874..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "Statuskonstruktor", - "info": "Es muss das builder-Attribut übergeben werden, um die Komponente zu konstruieren. Im builder kann StateSetter verwendet werden, um den Zustand der Unterkomponenten zu ändern, d.h. es ist möglich, eine lokal aktualisierte Komponente zu erstellen, ohne eine Klasse zu erstellen.", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von StatefulBuilder", - "desc": [ - "【builder】 : Komponentenkonstruktor 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_en_US.json deleted file mode 100644 index 7b339f1e6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "State Constructor", - "info": "The builder property needs to be passed to construct the component. In the builder, StateSetter can be used to change the state of the child component, which means a locally refreshed component can be implemented without creating a class.", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of StatefulBuilder", - "desc": [ - "【builder】 : Component Constructor 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_es_ES.json deleted file mode 100644 index f4ab980b7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "Constructor de Estado", - "info": "Requiere que se pase la propiedad builder para construir el componente. En el builder, se puede usar StateSetter para cambiar el estado del subcomponente, lo que permite implementar un componente con actualización local sin necesidad de crear una clase.", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de StatefulBuilder", - "desc": [ - "【builder】 : Constructor del componente 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_fr_FR.json deleted file mode 100644 index 56c80e8fc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "Constructeur d'état", - "info": "Nécessite de passer la propriété builder pour construire le composant. Dans le builder, vous pouvez utiliser StateSetter pour modifier l'état du sous-composant, ce qui permet de créer un composant à rafraîchissement local sans avoir à créer une classe.", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de StatefulBuilder", - "desc": [ - "【builder】 : Constructeur de composant 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_it_IT.json deleted file mode 100644 index 656f0161b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "Costruttore di Stato", - "info": "È necessario passare la proprietà builder per costruire il componente. Nel builder, è possibile utilizzare StateSetter per cambiare lo stato del componente figlio, il che consente di implementare un componente con aggiornamento locale senza dover creare una classe.", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di StatefulBuilder", - "desc": [ - "【builder】: Costruttore del componente 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ja_JP.json deleted file mode 100644 index 8a72f81a9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "ステートフルビルダー", - "info": "builderプロパティを渡してコンポーネントを構築する必要があります。builder内でStateSetterを使用して子コンポーネントの状態を変更できます。つまり、クラスを作成せずに局所的な更新を行うコンポーネントを実現できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StatefulBuilderの基本使用", - "desc": [ - "【builder】 : コンポーネントビルダー 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ko_KR.json deleted file mode 100644 index 12ea565a6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "상태 생성기", - "info": "builder 속성을 전달하여 컴포넌트를 구성해야 합니다. builder 내에서 StateSetter를 사용하여 하위 컴포넌트의 상태를 변경할 수 있습니다. 즉, 클래스를 생성하지 않고도 부분적으로 새로 고치는 컴포넌트를 구현할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StatefulBuilder 기본 사용법", - "desc": [ - "【builder】 : 컴포넌트 생성기 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_pt_PT.json deleted file mode 100644 index c09e9ade2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "Construtor de Estado", - "info": "É necessário passar a propriedade builder para construir o componente. No builder, pode-se usar o StateSetter para alterar o estado do subcomponente, o que permite implementar um componente com atualização local sem a necessidade de criar uma classe.", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do StatefulBuilder", - "desc": [ - "【builder】: Construtor de Componentes 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ru_RU.json deleted file mode 100644 index f6dd4db8e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "Конструктор состояния", - "info": "Необходимо передать свойство builder для создания компонента. В builder можно использовать StateSetter для изменения состояния дочернего компонента, что позволяет реализовать локальное обновление компонента без создания класса.", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование StatefulBuilder", - "desc": [ - "【builder】 : Конструктор компонента 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_zh-CN.json deleted file mode 100644 index 4105126d1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "状态构造器", - "info": "需要传入 builder 属性进行构造组件,在 builder 中可以使用 StateSetter 改变构造子组件的状态,即可以不用创建类而实现一个局部刷新的组件。", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StatefulBuilder基本使用", - "desc": [ - "【builder】 : 组件构造器 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/node1_base.dart deleted file mode 100644 index 6cc0f4654..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/node1_base.dart +++ /dev/null @@ -1,26 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class StatefulBuilderDemo extends StatelessWidget { - const StatefulBuilderDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - int count = 0; - - return StatefulBuilder( - builder: (ctx, setState) => ElevatedButton( - child: Text("当前数字: $count"), - onPressed: () { - setState(() { - count++; - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_de_DE.json deleted file mode 100644 index d00db6457..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "Statusübergangskomponente", - "info": "Abstrakte Klasse, die Aktualisierungen basierend auf den bereitgestellten Animatorstatusänderungen auslösen kann. Es gibt keine implementierten Unterklassen auf der Flutter-Framework-Ebene und keine Anwendungsfälle, daher scheint sie nicht sehr nützlich zu sein.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in StatusTransitionWidget", - "desc": [ - "【animation】 : Unterkomponente 【Animation】", - "Hier wird ein benutzerdefiniertes ColorStatusTransitionWidget verwendet, das beim Zustandswechsel des Animators verschiedene Farben erstellt." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_en_US.json deleted file mode 100644 index de7e4f032..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "Status Transition Widget", - "info": "Abstract class that can trigger refresh based on the state changes of the provided animator. There are no implemented subclasses in the Flutter framework layer, nor any usage scenarios, so it doesn't seem very useful.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to StatusTransitionWidget", - "desc": [ - "【animation】 : Child component 【Animation】", - "Here, a custom ColorStatusTransitionWidget is used to build different colors when the state of the animator changes." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_es_ES.json deleted file mode 100644 index 26137220d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "Componente de Transición de Estado", - "info": "Clase abstracta que puede desencadenar una actualización basada en los cambios de estado del animador proporcionado. No hay subclases implementadas en el nivel del framework Flutter, ni escenarios de uso, parece no ser muy útil.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a StatusTransitionWidget", - "desc": [ - "【animation】 : Componente hijo 【Animation】", - "Aquí se personaliza ColorStatusTransitionWidget para su uso, construyendo diferentes colores cuando cambia el estado del animador." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_fr_FR.json deleted file mode 100644 index 837becf1d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "Widget de transition d'état", - "info": "Classe abstraite qui peut déclencher un rafraîchissement en fonction des changements d'état de l'animateur fourni. Il n'y a pas de sous-classes implémentées au niveau du framework Flutter, ni de scénarios d'utilisation, ce qui semble peu utile.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction de StatusTransitionWidget", - "desc": [ - "【animation】 : Sous-composant 【Animation】", - "Ici, ColorStatusTransitionWidget est personnalisé pour être utilisé, construisant différentes couleurs lorsque l'état de l'animateur change." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_it_IT.json deleted file mode 100644 index 33ca6c76f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "Widget di transizione di stato", - "info": "Classe astratta che può attivare un aggiornamento in base ai cambiamenti di stato dell'animatore fornito. Non ci sono sottoclassi implementate a livello di framework Flutter, né scenari di utilizzo, sembra non essere molto utile.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a StatusTransitionWidget", - "desc": [ - "【animation】 : componente figlio 【Animation】", - "Qui viene utilizzato il ColorStatusTransitionWidget personalizzato, che costruisce colori diversi quando lo stato dell'animatore cambia." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ja_JP.json deleted file mode 100644 index ecf6183b3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "ステータス遷移コンポーネント", - "info": "抽象クラスで、提供されたアニメーターの状態変化に基づいて更新をトリガーできます。Flutterフレームワーク層には実装されたサブクラスも使用シナリオもなく、あまり役に立たないと感じます。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StatusTransitionWidget 紹介", - "desc": [ - "【animation】 : サブコンポーネント 【Animation】", - "ここでカスタムColorStatusTransitionWidgetを使用し、アニメーターの状態が変化したときに異なる色を構築します。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ko_KR.json deleted file mode 100644 index d81411783..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "상태 전환 위젯", - "info": "추상 클래스로, 제공된 애니메이터 상태 변화에 따라 새로고침을 트리거할 수 있습니다. Flutter 프레임워크 레벨에서 구현된 하위 클래스도 없고, 사용 사례도 없어서 유용성이 크지 않아 보입니다.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StatusTransitionWidget 소개", - "desc": [ - "【animation】 : 자식 위젯 【Animation】", - "여기서 사용자 정의 ColorStatusTransitionWidget을 사용하여 애니메이터의 상태가 변경될 때 다른 색상을 구성합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_pt_PT.json deleted file mode 100644 index ee2ef811c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "Componente de Transição de Estado", - "info": "Classe abstrata que pode acionar atualizações com base nas mudanças de estado do animador fornecido. Não há subclasses implementadas na camada do framework Flutter, nem cenários de uso, parece não ser muito útil.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao StatusTransitionWidget", - "desc": [ - "【animation】 : Subcomponente 【Animation】", - "Aqui, o ColorStatusTransitionWidget é personalizado para uso, construindo cores diferentes quando o estado do animador muda." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ru_RU.json deleted file mode 100644 index 441f8cd4c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "Виджет перехода состояний", - "info": "Абстрактный класс, который может вызывать обновление при изменении состояния предоставленного аниматора. На уровне фреймворка Flutter нет реализованных подклассов, а также сценариев использования, что делает его не очень полезным.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в StatusTransitionWidget", - "desc": [ - "【animation】 : Дочерний компонент 【Animation】", - "Здесь используется пользовательский ColorStatusTransitionWidget, который строит различные цвета при изменении состояния аниматора." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_zh-CN.json deleted file mode 100644 index 523c58f62..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "状态转变组件", - "info": "抽象类,可以根据提供的动画器状态变化触发刷新。在 Flutter 框架层没有实现的子类,也没有使用的场景,感觉用处不是很大。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StatusTransitionWidget 介绍", - "desc": [ - "【animation】 : 子组件 【Animation】", - "这里自定义 ColorStatusTransitionWidget 进行使用,在动画器的状态改变时构建不同的颜色。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/node1_base.dart deleted file mode 100644 index c431fb386..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/node1_base.dart +++ /dev/null @@ -1,74 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - - -class StatusTransitionWidgetDemo extends StatefulWidget { - const StatusTransitionWidgetDemo({Key? key}) : super(key: key); - - @override - _StatusTransitionWidgetDemoState createState() => - _StatusTransitionWidgetDemoState(); -} - -class _StatusTransitionWidgetDemoState extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - super.initState(); - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 1), - )..forward(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: (){ - _ctrl.forward(from: 0); - }, - child: ColorStatusTransitionWidget( - anim: _ctrl, - ), - ); - } -} - -class ColorStatusTransitionWidget extends StatusTransitionWidget { - final Animation anim; - - const ColorStatusTransitionWidget({Key? key,required this.anim}) - : super(key: key, animation: anim); - - @override - Widget build(BuildContext context) { - Color color = Colors.blue; - switch (animation.status) { - case AnimationStatus.dismissed: - color = Colors.black; - break; - case AnimationStatus.forward: - color = Colors.blue; - break; - case AnimationStatus.reverse: - color = Colors.red; - break; - case AnimationStatus.completed: - color = Colors.green; - break; - } - - return Container( - alignment: Alignment.center, - width: 80, - height: 80, - decoration: BoxDecoration(color: color, shape: BoxShape.circle), - child: Text('${animation.status}'.split('.')[1],style: const TextStyle(color: Colors.white),), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_de_DE.json deleted file mode 100644 index 78dd51b74..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "Schrittkomponente", - "info": "Schrittkomponente, die schrittweise Operationen festlegen kann, kann den Inhalt der Schritte, die Bestätigungs- und Rückgängig-Buttons sowie die Ausrichtung der Schritte anpassen.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Stepper", - "desc": [ - "【steps】 : Schrittliste 【List】", - "【currentStep】 : Aktueller Schritt 【double】", - "【onStepTapped】 : Klick-Rückruf 【ValueChanged】", - "【onStepCancel】 : Rückgängig-Rückruf 【VoidCallback】", - "【controlsBuilder】 : Controller-Konstruktion 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Ausrichtung des Steppers", - "desc": [ - "【type】 : Ausrichtung 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_en_US.json deleted file mode 100644 index a769d9019..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "Step Component", - "info": "Step component, which can specify step-by-step operations, customize the content of the steps, the buttons for confirmation and return, and the direction of the step arrangement.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Stepper", - "desc": [ - "【steps】: Step list 【List】", - "【currentStep】: Current step 【double】", - "【onStepTapped】: Click callback 【ValueChanged】", - "【onStepCancel】: Previous step callback 【VoidCallback】", - "【controlsBuilder】: Controller construction 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Direction of Stepper", - "desc": [ - "【type】: Direction 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_es_ES.json deleted file mode 100644 index 9e71ee58c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "Componente de pasos", - "info": "Componente de pasos, permite especificar operaciones paso a paso, se puede personalizar el contenido de los pasos, los botones de confirmación y retroceso, así como la dirección de la secuencia de pasos.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Stepper", - "desc": [ - "【steps】 : Lista de pasos 【List】", - "【currentStep】 : Paso actual 【double】", - "【onStepTapped】 : Callback de clic 【ValueChanged】", - "【onStepCancel】 : Callback de retroceso 【VoidCallback】", - "【controlsBuilder】 : Constructor del controlador 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Dirección de Stepper", - "desc": [ - "【type】 : Dirección 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_fr_FR.json deleted file mode 100644 index 88f480104..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "Composant d'étapes", - "info": "Composant d'étapes, permet de spécifier des opérations étape par étape, peut personnaliser le contenu des étapes, les boutons de confirmation et de retour ainsi que la direction de l'arrangement des étapes.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Stepper", - "desc": [ - "【steps】 : Liste des étapes 【List】", - "【currentStep】 : Étape actuelle 【double】", - "【onStepTapped】 : Rappel de clic 【ValueChanged】", - "【onStepCancel】 : Rappel de l'étape précédente 【VoidCallback】", - "【controlsBuilder】 : Constructeur de contrôleur 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Direction de Stepper", - "desc": [ - "【type】 : Direction 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_it_IT.json deleted file mode 100644 index 064e5653f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "Componente Passaggi", - "info": "Componente passaggi, consente di specificare operazioni passo-passo, personalizzare il contenuto dei passaggi, i pulsanti di conferma e ritorno, e la direzione dell'ordinamento dei passaggi.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di Stepper", - "desc": [ - "【steps】 : Lista dei passaggi 【List】", - "【currentStep】 : Passaggio corrente 【double】", - "【onStepTapped】 : Callback al click 【ValueChanged】", - "【onStepCancel】 : Callback del passaggio precedente 【VoidCallback】", - "【controlsBuilder】 : Costruttore del controller 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Direzione di Stepper", - "desc": [ - "【type】 : Direzione 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ja_JP.json deleted file mode 100644 index 9e7687943..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "ステップコンポーネント", - "info": "ステップコンポーネントは、ステップごとの操作を指定でき、ステップの内容、確認と戻るボタン、およびステップの並び方向をカスタマイズできます。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Stepperの基本使用", - "desc": [ - "【steps】 : ステップリスト 【List】", - "【currentStep】 : 現在のステップ 【double】", - "【onStepTapped】 : クリックコールバック 【ValueChanged】", - "【onStepCancel】 : 前のステップコールバック 【VoidCallback】", - "【controlsBuilder】 : コントローラー構築 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Stepperの方向", - "desc": [ - "【type】 : 方向 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ko_KR.json deleted file mode 100644 index ea94ac5bb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "스텝 컴포넌트", - "info": "스텝 컴포넌트는 단계별 작업을 지정할 수 있으며, 스텝의 내용, 확인 및 뒤로 가기 버튼, 스텝 배열 방향을 사용자 정의할 수 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Stepper 기본 사용", - "desc": [ - "【steps】 : 스텝 리스트 【List】", - "【currentStep】 : 현재 스텝 【double】", - "【onStepTapped】 : 클릭 콜백 【ValueChanged】", - "【onStepCancel】 : 이전 스텝 콜백 【VoidCallback】", - "【controlsBuilder】 : 컨트롤러 생성 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Stepper의 방향", - "desc": [ - "【type】 : 방향 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_pt_PT.json deleted file mode 100644 index 9b918a77c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "Componente de Passos", - "info": "Componente de passos, que permite especificar operações passo a passo, pode personalizar o conteúdo dos passos, os botões de confirmação e retorno, bem como a direção do arranjo dos passos.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Stepper", - "desc": [ - "【steps】 : Lista de passos 【List】", - "【currentStep】 : Passo atual 【double】", - "【onStepTapped】 : Callback de clique 【ValueChanged】", - "【onStepCancel】 : Callback de passo anterior 【VoidCallback】", - "【controlsBuilder】 : Construtor de controlador 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Direção do Stepper", - "desc": [ - "【type】 : Direção 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ru_RU.json deleted file mode 100644 index ec410f0c1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "Компонент шагов", - "info": "Компонент шагов, который позволяет указать шаги выполнения операций, можно настроить содержимое шагов, кнопки подтверждения и возврата, а также направление расположения шагов.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Stepper", - "desc": [ - "【steps】 : Список шагов 【List】", - "【currentStep】 : Текущий шаг 【double】", - "【onStepTapped】 : Обратный вызов при нажатии 【ValueChanged】", - "【onStepCancel】 : Обратный вызов для предыдущего шага 【VoidCallback】", - "【controlsBuilder】 : Конструктор контроллера 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Направление Stepper", - "desc": [ - "【type】 : Направление 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_zh-CN.json deleted file mode 100644 index 23576b382..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "步骤组件", - "info": "步骤组件,可指定一步步的操作,可以自定义步骤的内容,确认和返回的按钮以及步骤排列的方向。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Stepper基本使用", - "desc": [ - "【steps】 : 步骤列表 【List】", - "【currentStep】 : 当前步骤 【double】", - "【onStepTapped】 : 点击回调 【ValueChanged】", - "【onStepCancel】 : 上一步回调 【VoidCallback】", - "【controlsBuilder】 : 控制器构造 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Stepper的方向", - "desc": [ - "【type】 : 方向 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/node1_base.dart deleted file mode 100644 index 6b2b2cfd1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/node1_base.dart +++ /dev/null @@ -1,104 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class StepperDemo extends StatefulWidget { - const StepperDemo({Key? key}) : super(key: key); - - @override - _StepperDemoState createState() => _StepperDemoState(); -} - -class _StepperDemoState extends State { - int _position = 0; - - final Map stepsData = { - "填写表单": '请按表单填写个人信息。', - "邮箱校验": '已将邮件发送至您的邮箱,请按照相关指示对您的账号进行邮箱校验。', - "注册完成": '恭喜您,注册完成!', - }; - - final List steps = const [ - Step( - title: Text("填写表单"), - content: SizedBox(height: 60, child: Text("请按表单填写个人信息")), - ), - Step(title: Text("邮箱校验"), content: Text("请对您的账号进行邮箱校验")), - Step(title: Text("注册完成"), content: Text("恭喜您,注册完成")), - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Stepper( - type: StepperType.horizontal, - currentStep: _position, - onStepTapped: (index) { - setState(() { - _position = index; - }); - }, - onStepContinue: () { - setState(() { - if (_position < 2) { - _position++; - } - }); - }, - onStepCancel: () { - if (_position > 0) { - setState(() { - _position--; - }); - } - }, - controlsBuilder: (_, ControlsDetails details) { - return Row( - children: [ - ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.blue, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - )), - onPressed: details.onStepContinue, - child: const Icon( - Icons.check, - color: Colors.white, - ), - ), - ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.red, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - )), - onPressed: details.onStepCancel, - child: const Icon( - Icons.keyboard_backspace, - color: Colors.white, - ), - ), - ], - ); - }, - steps: stepsData.keys.map((e){ - bool isActive = stepsData.keys.toList().indexOf(e) ==_position; - return Step( - title: Text(e,style: TextStyle(color: isActive?Colors.blue:Colors.black),), - isActive: isActive, - state: _getState(stepsData.keys.toList().indexOf(e)), - content: SizedBox(height: 60, child: Text(stepsData[e]!)), - ); - }).toList()), - ); - } - - StepState _getState(index){ - if(_position==index) return StepState.editing; - if(_position>index) return StepState.complete; - return StepState.indexed; - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/node2_type.dart b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/node2_type.dart deleted file mode 100644 index 0b42e6238..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/node2_type.dart +++ /dev/null @@ -1,104 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class VerticalStepper extends StatefulWidget { - const VerticalStepper({Key? key}) : super(key: key); - - @override - _VerticalStepperState createState() => _VerticalStepperState(); -} - -class _VerticalStepperState extends State { - int _position = 0; - - final Map stepsData = { - "填写表单": '请按表单填写个人信息。', - "邮箱校验": '已将邮件发送至您的邮箱,请按照相关指示对您的账号进行邮箱校验。', - "注册完成": '恭喜您,注册完成!', - }; - - final List steps = const[ - Step( - title: Text("填写表单"), - content: SizedBox(height: 60, child: Text("请按表单填写个人信息")), - ), - Step(title: Text("邮箱校验"), content: Text("请对您的账号进行邮箱校验")), - Step(title: Text("注册完成"), content: Text("恭喜您,注册完成")), - ]; - - @override - Widget build(BuildContext context) { - return Stepper( - type: StepperType.vertical, - currentStep: _position, - onStepTapped: (index) { - setState(() { - _position = index; - }); - }, - onStepContinue: () { - setState(() { - if (_position < 2) { - _position++; - } - }); - }, - onStepCancel: () { - if (_position > 0) { - setState(() { - _position--; - }); - } - }, - controlsBuilder: (_,ControlsDetails details) { - return Row( - children: [ - ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.blue, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - )), - onPressed: details.onStepContinue, - child: const Icon( - Icons.check, - color: Colors.white, - ), - ), - ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.red, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - )), - onPressed: details.onStepCancel, - child: const Icon( - Icons.keyboard_backspace, - color: Colors.white, - ), - ), - ], - ); - }, - steps: stepsData.keys.map((e) { - bool isActive = stepsData.keys.toList().indexOf(e) == _position; - return Step( - title: Text( - e, - style: TextStyle(color: isActive ? Colors.blue : Colors.black), - ), - isActive: isActive, - state: _getState(stepsData.keys.toList().indexOf(e)), - content: SizedBox(height: 60, child: Text(stepsData[e]!)), - ); - }).toList()); - } - - StepState _getState(index) { - if (_position == index) return StepState.editing; - if (_position > index) return StepState.complete; - return StepState.indexed; - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_de_DE.json deleted file mode 100644 index b344ba789..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "Stream-Builder", - "info": "Kann ein Stream-Objekt angeben, kann den Status der asynchronen Ausführung überwachen und im Builder verschiedene Benutzeroberflächen basierend auf dem Status erstellen.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von StreamBuilder", - "desc": [ - "【stream】 : Unterkomponente 【Stream】", - "【initialData】 : Initiale Daten 【T】", - "【builder】 : Klickereignis 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_en_US.json deleted file mode 100644 index 7a9c86d23..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "Stream Builder", - "info": "Can specify a stream object, able to listen to the state of asynchronous execution, and build different interfaces in the constructor based on the state.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of StreamBuilder", - "desc": [ - "【stream】 : Child component 【Stream】", - "【initialData】 : Initial data 【T】", - "【builder】 : Click event 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_es_ES.json deleted file mode 100644 index 6720b0f5e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "Constructor de Flujo", - "info": "Puede especificar un objeto stream, capaz de escuchar el estado de ejecución asíncrona y construir diferentes interfaces en el constructor según el estado.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de StreamBuilder", - "desc": [ - "【stream】 : componente hijo 【Stream】", - "【initialData】 : datos iniciales 【T】", - "【builder】 : evento de clic 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_fr_FR.json deleted file mode 100644 index f61d970bc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "Constructeur de flux", - "info": "Peut spécifier un objet stream, capable de surveiller l'état d'exécution asynchrone et de construire différentes interfaces dans le constructeur en fonction de l'état.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de StreamBuilder", - "desc": [ - "【stream】 : composant enfant 【Stream】", - "【initialData】 : données initiales 【T】", - "【builder】 : événement de clic 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_it_IT.json deleted file mode 100644 index 3d550c1de..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "Costruttore di Flusso", - "info": "Può specificare un oggetto stream, in grado di monitorare lo stato dell'esecuzione asincrona e costruire diverse interfacce nel costruttore in base allo stato.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di StreamBuilder", - "desc": [ - "【stream】 : Componente figlio 【Stream】", - "【initialData】 : Dati iniziali 【T】", - "【builder】 : Evento di clic 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ja_JP.json deleted file mode 100644 index bc75ba75d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "ストリームビルダー", - "info": "ストリームオブジェクトを指定でき、非同期実行の状態を監視し、ビルダー内で状態に応じて異なるインターフェースを構築できます。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StreamBuilderの基本使用", - "desc": [ - "【stream】 : 子コンポーネント 【Stream】", - "【initialData】 : 初期データ 【T】", - "【builder】 : クリックイベント 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ko_KR.json deleted file mode 100644 index 9731100a4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "스트림 빌더", - "info": "스트림 객체를 지정할 수 있으며, 비동기 실행 상태를 감시하고, 빌더에서 상태에 따라 다른 인터페이스를 구성할 수 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StreamBuilder 기본 사용", - "desc": [ - "【stream】 : 자식 컴포넌트 【Stream】", - "【initialData】 : 초기 데이터 【T】", - "【builder】 : 클릭 이벤트 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_pt_PT.json deleted file mode 100644 index e56a75c6e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "Construtor de Fluxo", - "info": "Pode especificar um objeto stream, capaz de monitorar o estado da execução assíncrona e construir diferentes interfaces no construtor com base no estado.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do StreamBuilder", - "desc": [ - "【stream】 : Componente Filho 【Stream】", - "【initialData】 : Dados Iniciais 【T】", - "【builder】 : Evento de Clique 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ru_RU.json deleted file mode 100644 index 03020df17..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "Потоковый конструктор", - "info": "Можно указать объект stream, который может отслеживать состояние асинхронного выполнения и строить различные интерфейсы в конструкторе в зависимости от состояния.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование StreamBuilder", - "desc": [ - "【stream】 : Дочерний компонент 【Stream】", - "【initialData】 : Начальные данные 【T】", - "【builder】 : Событие клика 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_zh-CN.json deleted file mode 100644 index f6be1cc3d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "流构造器", - "info": "可指定一个stream对象,能够监听异步执行的状态,并在构造器中根据状态构建不同的界面。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StreamBuilder基本使用", - "desc": [ - "【stream】 : 子组件 【Stream】", - "【initialData】 : 初始数据 【T】", - "【builder】 : 点击事件 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/node1_base.dart deleted file mode 100644 index 2abad5656..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/node1_base.dart +++ /dev/null @@ -1,101 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomStreamBuilder extends StatefulWidget { - const CustomStreamBuilder({Key? key}) : super(key: key); - - @override - _CustomStreamBuilderState createState() => _CustomStreamBuilderState(); -} - -class _CustomStreamBuilderState extends State { - final CountGenerator _generator = CountGenerator()..increment(); - - @override - void dispose() { - _generator.dispose(); //关闭控制器 - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Row( - mainAxisSize: MainAxisSize.min, - children: [ - ElevatedButton( - style: ElevatedButton.styleFrom( - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - )), - child: const Icon( - Icons.add, - color: Colors.white, - ), - onPressed: () async { - await _generator.increment(); - }, - ), - _buildStreamBuilder(), - ElevatedButton( - style: ElevatedButton.styleFrom( - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - )), - child: const Icon( - Icons.remove, - color: Colors.white, - ), - onPressed: () async { - await _generator.minus(); - }, - ), - ], - ); - } - - Widget _buildStreamBuilder() => StreamBuilder( - stream: _generator.state, - builder: (BuildContext context, AsyncSnapshot snap) { - print(snap); - if (snap.connectionState == ConnectionState.done) { - return const Text('Done'); - } - if (snap.connectionState == ConnectionState.active) { - return Text( - snap.data.toString(), - style: Theme.of(context).textTheme.bodyMedium, - ); - } - if (snap.connectionState == ConnectionState.waiting) { - return const CircularProgressIndicator(); - } - if (snap.hasError) { - return const Text('Error'); - } - return Container(); - }); -} - -class CountGenerator { - int _count = 0; //计数器数据 - final StreamController _controller = StreamController(); //控制器 - - Stream get state => _controller.stream; //获取状态流 - int get count => _count; //获取计数器数据 - - void dispose() {//关闭控制器 - _controller.close(); - } - - Future increment() async {//增加记数方法 - _controller.add(++_count); - } - - Future minus() async {//增加记数方法 - _controller.add(--_count); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_de_DE.json deleted file mode 100644 index a11d67fa5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_de_DE.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "Schalter", - "info": "Umschaltknopf, häufig für Konfigurationswechsel verwendet, kann die Farbe des kleinen Kreises, Bilder, Farbe der Gleitschiene usw. angeben, empfängt Rückrufe bei Zustandsänderungen.", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Switch", - "desc": [ - "【inactiveThumbColor】 : Farbe des nicht ausgewählten kleinen Kreises 【Color】", - "【inactiveTrackColor】 : Farbe der nicht ausgewählten Gleitschiene 【Color】", - "【activeColor】 : Farbe des ausgewählten kleinen Kreises 【Color】", - "【activeTrackColor】 : Farbe der ausgewählten Gleitschiene 【Color】", - "【onChanged】 : Umschalt-Rückruf 【Function(double)】", - "Bei onChanged werden drei Zustände zurückgerufen: true, null, false" - ] - }, - { - "file": "node2_image.dart", - "name": "Switch Bild", - "desc": [ - "【inactiveThumbImage】 : Bild des nicht ausgewählten kleinen Kreises 【ImageProvider】", - "【activeThumbImage】 : Bild des ausgewählten kleinen Kreises 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_en_US.json deleted file mode 100644 index 224367a63..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_en_US.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "Toggle Button", - "info": "Toggle button, commonly used for configuration switching, can specify small circle color, image, track color, etc., and receives state change callbacks.", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Switch", - "desc": [ - "【inactiveThumbColor】 : Unselected small circle color 【Color】", - "【inactiveTrackColor】 : Unselected track color 【Color】", - "【activeColor】 : Selected small circle color 【Color】", - "【activeTrackColor】 : Selected track color 【Color】", - "【onChanged】 : Toggle callback 【Function(double)】", - "When onChanged, callbacks for true, null, and false states" - ] - }, - { - "file": "node2_image.dart", - "name": "Switch Image", - "desc": [ - "【inactiveThumbImage】 : Unselected small circle image 【ImageProvider】", - "【activeThumbImage】 : Selected small circle image 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_es_ES.json deleted file mode 100644 index f05a37f03..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_es_ES.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "Interruptor", - "info": "Interruptor de selección, comúnmente utilizado para cambiar configuraciones, puede especificar el color del círculo pequeño, la imagen, el color de la ranura, etc., y recibe una devolución de llamada para cambios de estado.", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Switch", - "desc": [ - "【inactiveThumbColor】 : Color del círculo pequeño no seleccionado 【Color】", - "【inactiveTrackColor】 : Color de la ranura no seleccionada 【Color】", - "【activeColor】 : Color del círculo pequeño seleccionado 【Color】", - "【activeTrackColor】 : Color de la ranura seleccionada 【Color】", - "【onChanged】 : Devolución de llamada de cambio 【Function(double)】", - " En onChanged, devuelve tres estados: true, null, false" - ] - }, - { - "file": "node2_image.dart", - "name": "Imagen de Switch", - "desc": [ - "【inactiveThumbImage】 : Imagen del círculo pequeño no seleccionado 【ImageProvider】", - "【activeThumbImage】 : Imagen del círculo pequeño seleccionado 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_fr_FR.json deleted file mode 100644 index dd1fa7bcf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_fr_FR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "Bouton de commutation", - "info": "Bouton de commutation, souvent utilisé pour changer les configurations, peut spécifier la couleur du petit cercle, l'image, la couleur de la glissière, etc., et reçoit un rappel de changement d'état.", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Switch", - "desc": [ - "【inactiveThumbColor】 : Couleur du petit cercle non sélectionné 【Color】", - "【inactiveTrackColor】 : Couleur de la glissière non sélectionnée 【Color】", - "【activeColor】 : Couleur du petit cercle sélectionné 【Color】", - "【activeTrackColor】 : Couleur de la glissière sélectionnée 【Color】", - "【onChanged】 : Rappel de commutation 【Function(double)】", - " Lors de onChanged, rappelle trois états : true, null, false" - ] - }, - { - "file": "node2_image.dart", - "name": "Image de Switch", - "desc": [ - "【inactiveThumbImage】 : Image du petit cercle non sélectionné 【ImageProvider】", - "【activeThumbImage】 : Image du petit cercle sélectionné 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_it_IT.json deleted file mode 100644 index 70dedac9a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_it_IT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "Interruttore", - "info": "Interruttore per la commutazione, spesso utilizzato per il cambio di configurazione, può specificare il colore del cerchio, l'immagine, il colore della scanalatura, ecc., riceve un callback per i cambiamenti di stato.", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Switch", - "desc": [ - "【inactiveThumbColor】 : Colore del cerchio non selezionato 【Color】", - "【inactiveTrackColor】 : Colore della scanalatura non selezionata 【Color】", - "【activeColor】 : Colore del cerchio selezionato 【Color】", - "【activeTrackColor】 : Colore della scanalatura selezionata 【Color】", - "【onChanged】 : Callback di commutazione 【Function(double)】\"", - " Durante onChanged, il callback restituisce tre stati: true, null, false" - ] - }, - { - "file": "node2_image.dart", - "name": "Immagine di Switch", - "desc": [ - "【inactiveThumbImage】 : Immagine del cerchio non selezionato 【ImageProvider】", - "【activeThumbImage】 : Immagine del cerchio selezionato 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ja_JP.json deleted file mode 100644 index 0955a1a6e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ja_JP.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "スイッチ", - "info": "トグルボタンを切り替えます。設定の切り替えによく使用され、小さな円の色や画像、スライドトラックの色などを指定できます。状態変化のコールバックを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Switchの基本的な使い方", - "desc": [ - "【inactiveThumbColor】 : 未選択時の小さな円の色 【Color】", - "【inactiveTrackColor】 : 未選択時のスライドトラックの色 【Color】", - "【activeColor】 : 選択時の小さな円の色 【Color】", - "【activeTrackColor】 : 選択時のスライドトラックの色 【Color】", - "【onChanged】 : 切り替えコールバック 【Function(double)】", - " onChanged時、true、null、falseの3つの状態をコールバックします" - ] - }, - { - "file": "node2_image.dart", - "name": "Switchの画像", - "desc": [ - "【inactiveThumbImage】 : 未選択時の小さな円の画像 【ImageProvider】", - "【activeThumbImage】 : 選択時の小さな円の画像 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ko_KR.json deleted file mode 100644 index ebaf48ab6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ko_KR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "스위치", - "info": "선택 버튼 전환, 주로 설정 전환에 사용되며, 작은 원의 색상, 이미지, 슬롯 색상 등을 지정할 수 있으며, 상태 변화 콜백을 받습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Switch 기본 사용법", - "desc": [ - "【inactiveThumbColor】 : 선택되지 않은 작은 원 색상 【Color】", - "【inactiveTrackColor】 : 선택되지 않은 슬롯 색상 【Color】", - "【activeColor】 : 선택된 작은 원 색상 【Color】", - "【activeTrackColor】 : 선택된 슬롯 색상 【Color】", - "【onChanged】 : 전환 콜백 【Function(double)】\"", - " onChanged 시, true, null, false 세 가지 상태를 콜백합니다." - ] - }, - { - "file": "node2_image.dart", - "name": "Switch 이미지", - "desc": [ - "【inactiveThumbImage】 : 선택되지 않은 작은 원 이미지 【ImageProvider】", - "【activeThumbImage】 : 선택된 작은 원 이미지 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_pt_PT.json deleted file mode 100644 index 922b3f170..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_pt_PT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "Botão de Alternar", - "info": "Botão de alternar, frequentemente usado para alternar configurações, pode especificar a cor do círculo pequeno, imagem, cor da faixa deslizante, etc., e recebe uma chamada de retorno para mudanças de estado.", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Switch", - "desc": [ - "【inactiveThumbColor】 : Cor do círculo pequeno quando não selecionado 【Color】", - "【inactiveTrackColor】 : Cor da faixa deslizante quando não selecionada 【Color】", - "【activeColor】 : Cor do círculo pequeno quando selecionado 【Color】", - "【activeTrackColor】 : Cor da faixa deslizante quando selecionada 【Color】", - "【onChanged】 : Chamada de retorno para alternar 【Function(double)】\"", - " Quando onChanged, retorna três estados: true, null, false" - ] - }, - { - "file": "node2_image.dart", - "name": "Imagem do Switch", - "desc": [ - "【inactiveThumbImage】 : Imagem do círculo pequeno quando não selecionado 【ImageProvider】", - "【activeThumbImage】 : Imagem do círculo pequeno quando selecionado 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ru_RU.json deleted file mode 100644 index b4c01d161..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ru_RU.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "Переключатель", - "info": "Переключатель, часто используется для изменения настроек, можно указать цвет маленького круга, изображение, цвет дорожки и т.д., принимает обратный вызов при изменении состояния.", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Базовое использование Switch", - "desc": [ - "【inactiveThumbColor】 : Цвет маленького круга в неактивном состоянии 【Color】", - "【inactiveTrackColor】 : Цвет дорожки в неактивном состоянии 【Color】", - "【activeColor】 : Цвет маленького круга в активном состоянии 【Color】", - "【activeTrackColor】 : Цвет дорожки в активном состоянии 【Color】", - "【onChanged】 : Обратный вызов при переключении 【Function(double)】", - " При onChanged, обратный вызов возвращает три состояния: true, null, false" - ] - }, - { - "file": "node2_image.dart", - "name": "Изображение Switch", - "desc": [ - "【inactiveThumbImage】 : Изображение маленького круга в неактивном состоянии 【ImageProvider】", - "【activeThumbImage】 : Изображение маленького круга в активном состоянии 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_zh-CN.json deleted file mode 100644 index c034cac0c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_zh-CN.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "切钮", - "info": "切换选钮,常用于配置的切换,可指定小圆颜色、图片,滑槽颜色等,接收状态变化回调。", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Switch基础用法", - "desc": [ - "【inactiveThumbColor】 : 未选中小圈颜色 【Color】", - "【inactiveTrackColor】 : 未选中滑槽颜色 【Color】", - "【activeColor】 : 选中时小圈颜色 【Color】", - "【activeTrackColor】 : 选中时滑槽颜色 【Color】", - "【onChanged】 : 切换回调 【Function(double)】\"", - " onChanged时,回调true、null、false三种状态" - ] - }, - { - "file": "node2_image.dart", - "name": "Switch图片", - "desc": [ - "【inactiveThumbImage】 : 未选中小圈图片 【ImageProvider】", - "【activeThumbImage】 : 选中小圈图片 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Switch/node1_base.dart deleted file mode 100644 index 7ba534a7d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/node1_base.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-14 -/// contact me by email 1981462002@qq.com - -class CustomSwitch extends StatefulWidget { - const CustomSwitch({Key? key}) : super(key: key); - - @override - _CustomSwitchState createState() => _CustomSwitchState(); -} - -class _CustomSwitchState extends State { - final List colors = const[ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - bool _checked = false; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: colors - .map((e) => Switch( - value: _checked, - inactiveThumbColor: e, - inactiveTrackColor: Colors.grey.withAlpha(88), - activeColor: Colors.green, - activeTrackColor: Colors.orange, - onChanged: (v) { - setState(() => _checked = v); - })) - .toList(), - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/node2_image.dart b/modules/widget_system/widgets/lib/StatefulWidget/Switch/node2_image.dart deleted file mode 100644 index 5487e25fe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/node2_image.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-14 -/// contact me by email 1981462002@qq.com - -class ImageSwitch extends StatefulWidget { - const ImageSwitch({Key? key}) : super(key: key); - - @override - _ImageSwitchState createState() => _ImageSwitchState(); -} - -class _ImageSwitchState extends State { - final List imgs = const [ - "assets/images/head_icon/icon_5.webp", - "assets/images/head_icon/icon_6.webp", - "assets/images/head_icon/icon_7.webp", - "assets/images/head_icon/icon_8.webp" - ]; - bool _checked = false; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: imgs - .map((e) => - Switch( - value: _checked, - inactiveThumbImage: AssetImage(e), - activeThumbImage: const AssetImage('assets/images/icon_head.webp'), - onChanged: (v) { - setState(() => _checked = v); - })) - .toList(), - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_de_DE.json deleted file mode 100644 index d3a0a2e48..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "Tab", - "info": "Wird normalerweise mit TabBar verwendet, um den Slide-Effekt zu erzielen. Wird normalerweise nicht allein verwendet.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView muss mit TabBar verwendet werden", - "desc": [ - "【controller】 : Controller 【TabController】", - "【children】 : Kinder 【Indikatorfarbe】", - "【physics】 : Verhalten 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_en_US.json deleted file mode 100644 index 3d8755bf0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "Tab Page", - "info": "Usually used in conjunction with TabBar to achieve the effect of sliding pages. It is generally not used alone.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView needs to be used in conjunction with TabBar", - "desc": [ - "【controller】 : Controller 【TabController】", - "【children】 : Children 【Indicator Color】", - "【physics】 : Behavior 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_es_ES.json deleted file mode 100644 index 4038a99d9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "Pestañas", - "info": "Normalmente se usa junto con TabBar para lograr un efecto de deslizamiento de páginas. Generalmente no se usa por separado.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView debe usarse junto con TabBar", - "desc": [ - "【controller】 : Controlador 【TabController】", - "【children】 : Hijos 【Color del indicador】", - "【physics】 : Comportamiento 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_fr_FR.json deleted file mode 100644 index 5749b4580..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "Onglets", - "info": "Généralement utilisé avec TabBar pour réaliser un effet de glissement de pages. Il n'est généralement pas utilisé seul.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView doit être utilisé avec TabBar", - "desc": [ - "【controller】 : Contrôleur 【TabController】", - "【children】 : Enfants 【Couleur de l'indicateur】", - "【physics】 : Comportement 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_it_IT.json deleted file mode 100644 index d9855ddbe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "Schede", - "info": "Generalmente utilizzato insieme a TabBar per ottenere un effetto di scorrimento delle pagine. Di solito non viene utilizzato da solo.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView deve essere utilizzato insieme a TabBar", - "desc": [ - "【controller】 : Controller 【TabController】", - "【children】 : Figli 【Colore dell'indicatore】", - "【physics】 : Comportamento 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ja_JP.json deleted file mode 100644 index 747d2d1ee..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "タブビュー", - "info": "通常はTabBarと一緒に使用し、スライドページの効果を実現します。通常は単独で使用しません。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarViewはTabBarと一緒に使用する必要があります", - "desc": [ - "【controller】 : コントローラー 【TabController】", - "【children】 : 子供たち 【インジケーターカラー】", - "【physics】 : パフォーマンス 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ko_KR.json deleted file mode 100644 index 1202916c6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "탭 뷰", - "info": "일반적으로 TabBar와 함께 사용되어 페이지 슬라이딩 효과를 구현합니다. 일반적으로 단독으로 사용되지 않습니다.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView는 TabBar와 함께 사용해야 합니다", - "desc": [ - "【controller】 : 컨트롤러 【TabController】", - "【children】 : 자식들 【인디케이터 색상】", - "【physics】 : 동작 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_pt_PT.json deleted file mode 100644 index 53848ce7c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "Separador de Páginas", - "info": "Geralmente usado em conjunto com o TabBar para alcançar o efeito de deslizar páginas. Normalmente não é usado sozinho.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView precisa ser usado em conjunto com o TabBar", - "desc": [ - "【controller】 : Controlador 【TabController】", - "【children】 : Crianças 【Cor do indicador】", - "【physics】 : Comportamento 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ru_RU.json deleted file mode 100644 index 542c10f83..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "Вкладки", - "info": "Обычно используется вместе с TabBar для реализации эффекта скольжения страниц. Обычно не используется отдельно.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView должен использоваться вместе с TabBar", - "desc": [ - "【controller】 : Контроллер 【TabController】", - "【children】 : Дети 【Цвет индикатора】", - "【physics】 : Поведение 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_zh-CN.json deleted file mode 100644 index 8e7388e92..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "标签页", - "info": "通常与TabBar联用,实现滑页的效果。一般不单独使用。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView需要与TabBar联用", - "desc": [ - "【controller】 : 控制器 【TabController】", - "【children】 : 孩子们 【指示器颜色】", - "【physics】 : 表现 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/node1_base.dart deleted file mode 100644 index 9e5a3e7c8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/node1_base.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomTabBarView extends StatefulWidget { - const CustomTabBarView({Key? key}) : super(key: key); - - @override - _CustomTabBarViewState createState() => _CustomTabBarViewState(); -} - -class _CustomTabBarViewState extends State with SingleTickerProviderStateMixin { - final List tabs = const [ - '风画庭', - '雨韵舍', - '雷鸣殿', - '电疾堂', - '霜寒阁', - '雪月楼', - ]; - late TabController _tabController; - - @override - void initState() { - super.initState(); - _tabController = TabController(vsync: this, length: tabs.length); - } - - @override - void dispose() { - _tabController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildTabBar(), - Container( - color: Colors.purple, - width: MediaQuery.of(context).size.width, - height: 200, - child: _buildTableBarView()) - ], - ); - } - - Widget _buildTabBar() => TabBar( - onTap: (tab) => print(tab), - labelStyle: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold), - unselectedLabelStyle: const TextStyle(fontSize: 16), - isScrollable: true, - controller: _tabController, - labelColor: Colors.blue, - indicatorWeight: 3, - indicatorPadding: const EdgeInsets.symmetric(horizontal: 10), - unselectedLabelColor: Colors.grey, - indicatorColor: Colors.orangeAccent, - tabs: tabs.map((e) => Tab(text: e)).toList(), - ); - - Widget _buildTableBarView() => TabBarView( - controller: _tabController, - children: tabs.map((e) => Center( - child: Text( - e, - style: const TextStyle( - color: Colors.white, - fontSize: 20, - ), - ))).toList()); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_de_DE.json deleted file mode 100644 index 7391d0cc0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "Tabellen-Wasserwellen", - "info": "Kann nur für Tabellen-Wasserwellen verwendet werden, empfängt Klick-, Doppelklick-, Langklick- und Hervorhebungsänderungsereignisse. Die Wasserwellen wirken auf eine Tabellenzeile.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TableRowInkWell grundlegende Ereignisse", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onTap】 : Klickereignis 【Function()】", - "【onDoubleTap】 : Doppelklickereignis 【Function()】", - "【onLongPress】 : Langklickereignis 【Function()】", - "【onHighlightChanged】 : Hervorhebungsänderungsrückruf 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_en_US.json deleted file mode 100644 index e2d8c29c4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "Table Ripple", - "info": "Can only be used for Table's ripple, receives click, double-click, long-press, and highlight change events, the ripple will be applied to a row of the table.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TableRowInkWell Basic Events", - "desc": [ - "【child】 : Child component 【Widget】", - "【onTap】 : Click event 【Function()】", - "【onDoubleTap】 : Double-click event 【Function()】", - "【onLongPress】 : Long-press event 【Function()】", - "【onHighlightChanged】 : Highlight change callback 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_es_ES.json deleted file mode 100644 index cbdd77c48..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "Onda de tabla", - "info": "Solo se puede usar para la onda de la tabla, recibe eventos de clic, doble clic, pulsación larga y cambios de resaltado, la onda actuará en una fila de la tabla.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos básicos de TableRowInkWell", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onTap】 : Evento de clic 【Function()】", - "【onDoubleTap】 : Evento de doble clic 【Function()】", - "【onLongPress】 : Evento de pulsación larga 【Function()】", - "【onHighlightChanged】 : Callback de cambio de resaltado 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_fr_FR.json deleted file mode 100644 index 184c25082..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "Ondulation de Tableau", - "info": "Utilisé uniquement pour les ondulations dans un Tableau, reçoit les événements de clic, double-clic, appui long et changement de surbrillance, l'ondulation s'applique à une ligne du tableau.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événements de base de TableRowInkWell", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onTap】 : Événement de clic 【Function()】", - "【onDoubleTap】 : Événement de double-clic 【Function()】", - "【onLongPress】 : Événement d'appui long 【Function()】", - "【onHighlightChanged】 : Rappel de changement de surbrillance 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_it_IT.json deleted file mode 100644 index 63bc0fdac..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "Effetto Riga Tabella", - "info": "Può essere utilizzato solo per l'effetto ondulato nelle tabelle, riceve eventi di clic, doppio clic, pressione prolungata e cambiamenti di evidenziazione, l'effetto ondulato agirà su una riga della tabella.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventi Base di TableRowInkWell", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onTap】 : Evento di clic 【Function()】", - "【onDoubleTap】 : Evento di doppio clic 【Function()】", - "【onLongPress】 : Evento di pressione prolungata 【Function()】", - "【onHighlightChanged】 : Callback di cambiamento di evidenziazione 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ja_JP.json deleted file mode 100644 index 0c36282fd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "テーブル波紋", - "info": "Table専用の波紋で、クリック、ダブルクリック、長押し、ハイライト変更イベントを受け取り、波紋はテーブルの一行に作用します。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TableRowInkWell基本イベント", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onTap】 : クリックイベント 【Function()】", - "【onDoubleTap】 : ダブルクリックイベント 【Function()】", - "【onLongPress】 : 長押しイベント 【Function()】", - "【onHighlightChanged】 : ハイライト変更コールバック 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ko_KR.json deleted file mode 100644 index 236a4c40c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "테이블 물결 효과", - "info": "Table에서만 사용 가능한 물결 효과로, 클릭, 더블 클릭, 롱 프레스, 하이라이트 변경 이벤트를 받습니다. 물결 효과는 테이블의 한 행에 적용됩니다.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TableRowInkWell 기본 이벤트", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【onTap】 : 클릭 이벤트 【Function()】", - "【onDoubleTap】 : 더블 클릭 이벤트 【Function()】", - "【onLongPress】 : 롱 프레스 이벤트 【Function()】", - "【onHighlightChanged】 : 하이라이트 변경 콜백 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_pt_PT.json deleted file mode 100644 index d107384fa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "Onda de tinta da tabela", - "info": "Só pode ser usado para a onda de tinta da tabela, recebe eventos de clique, duplo clique, pressão longa e mudança de destaque, a onda de tinta será aplicada a uma linha da tabela.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos básicos do TableRowInkWell", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onTap】 : Evento de clique 【Function()】", - "【onDoubleTap】 : Evento de duplo clique 【Function()】", - "【onLongPress】 : Evento de pressão longa 【Function()】", - "【onHighlightChanged】 : Callback de mudança de destaque 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ru_RU.json deleted file mode 100644 index 0cd39d75d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "Табличная волна", - "info": "Может использоваться только для волны в таблице, принимает события нажатия, двойного нажатия, длительного нажатия и изменения подсветки, волна будет применяться к строке таблицы.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основные события TableRowInkWell", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onTap】 : Событие нажатия 【Function()】", - "【onDoubleTap】 : Событие двойного нажатия 【Function()】", - "【onLongPress】 : Событие длительного нажатия 【Function()】", - "【onHighlightChanged】 : Обратный вызов изменения подсветки 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_zh-CN.json deleted file mode 100644 index 47f41a158..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "表格水波纹", - "info": "只能用于Table的水波纹,接收点击、双击、长按、高亮变化事件,水波纹会作用于表格的一行。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TableRowInkWell基本事件", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onTap】 : 点击事件 【Function()】", - "【onDoubleTap】 : 双击事件 【Function()】", - "【onLongPress】 : 长按事件 【Function()】", - "【onHighlightChanged】 : 高亮变化回调 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/node1_base.dart deleted file mode 100644 index ef2758b67..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/node1_base.dart +++ /dev/null @@ -1,80 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class CustomTableRowInkWell extends StatelessWidget { - const CustomTableRowInkWell({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - _ItemBean title = _ItemBean("单位称", "量纲", "单位", "单位名称", "单位符号"); - _ItemBean m = _ItemBean("长度", "L", "1m", "米", "m"); - _ItemBean kg = _ItemBean("质量", "M", "1Kg", "千克", "Kg"); - _ItemBean s = _ItemBean("时间", "T", "1s", "秒", "s"); - _ItemBean a = _ItemBean("安培", "Ι", "1A", "安培", "A"); - _ItemBean k = _ItemBean("热力学温度", "θ", "1K", "开尔文", "K"); - _ItemBean mol = _ItemBean("物质的量", "N", "1mol", "摩尔", "mol"); - _ItemBean cd = _ItemBean("发光强度", "J", "1cd", "坎德拉", "cd"); - - List<_ItemBean> data = [title, m, kg, s, a, k, mol, cd]; - - return SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: Table( - columnWidths: const { - 0: FixedColumnWidth(80.0), - 1: FixedColumnWidth(80.0), - 2: FixedColumnWidth(80.0), - 3: FixedColumnWidth(80.0), - 4: FixedColumnWidth(80.0), - }, - defaultVerticalAlignment: TableCellVerticalAlignment.middle, - border: TableBorder.all( - color: Colors.orangeAccent, width: 1.0, style: BorderStyle.solid), - children: data - .map((item) => TableRow(children: [ - TableRowInkWell( - onTap: () => print('onTap'), - onDoubleTap: () => print('onDoubleTap'), - onLongPress: () => print('onLongPress'), - onHighlightChanged: (v) => print('onHighlightChanged:$v'), - child: Center( - child: Text( - item.name, - style: const TextStyle(color: Colors.blue), - )), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Center(child: Text(item.symbol)), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Center(child: Text(item.unitSymbol)), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Center(child: Text(item.unitName)), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Center(child: Text(item.unit)), - ), - ])) - .toList(), - ), - ); - } -} - -class _ItemBean { - String name; - String symbol; - String unit; - String unitName; - String unitSymbol; - - _ItemBean(this.name, this.symbol, this.unit, this.unitName, this.unitSymbol); -} - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_de_DE.json deleted file mode 100644 index b7714bb06..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_de_DE.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "Textschaltfläche", - "info": "Materialstil-Textschaltfläche, standardmäßig nur mit Text, bei Klick mit Wasserwelleneffekt. Eigenschaften wie Rahmen, Farbe, Schatten können durch Stile geändert werden.", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von TextButton", - "desc": [ - "【child】 : Hat es ein scrollbares Hauptelement 【Widget】", - "【onPressed】 : Klickereignis 【VoidCallback】", - "【onLongPress】 : Langklickereignis 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "TextButton-Stil", - "desc": [ - "【style】 : Schaltflächenstil 【ButtonStyle】", - "【focusNode】 : Fokus 【FocusNode】", - "【clipBehavior】 : Beschneidungsverhalten 【Clip】", - "【autofocus】 : Autofokus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_en_US.json deleted file mode 100644 index 779529c74..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_en_US.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "Text Button", - "info": "A Material-style text button, which only has text by default, and has a ripple effect when clicked. The border, color, shadow and other properties can be changed through styles.", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of TextButton", - "desc": [ - "【child】 : Whether it has a scrollable body 【Widget】", - "【onPressed】 : Click event 【VoidCallback】", - "【onLongPress】 : Long press event 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "TextButton Style", - "desc": [ - "【style】 : Button style 【ButtonStyle】", - "【focusNode】 : Focus 【FocusNode】", - "【clipBehavior】 : Clip behavior 【Clip】", - "【autofocus】 : Auto focus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_es_ES.json deleted file mode 100644 index b78784bb0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_es_ES.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "Botón de texto", - "info": "Botón de texto con estilo Material, por defecto solo tiene texto y tiene un efecto de onda al hacer clic. Se pueden cambiar propiedades como el borde, el color, la sombra, etc., a través del estilo.", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de TextButton", - "desc": [ - "【child】 : ¿Tiene un cuerpo de desplazamiento? 【Widget】", - "【onPressed】 : Evento de clic 【VoidCallback】", - "【onLongPress】 : Evento de pulsación larga 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Estilo de TextButton", - "desc": [ - "【style】 : Estilo del botón 【ButtonStyle】", - "【focusNode】 : Foco 【FocusNode】", - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【autofocus】 : Enfoque automático 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_fr_FR.json deleted file mode 100644 index 7d96e6a73..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_fr_FR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "Bouton texte", - "info": "Bouton texte de style Material, par défaut uniquement du texte, avec un effet de vague lors du clic. Les propriétés telles que la bordure, la couleur, l'ombre, etc., peuvent être modifiées via le style.", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de TextButton", - "desc": [ - "【child】 : Si le corps peut défiler 【Widget】", - "【onPressed】 : Événement de clic 【VoidCallback】", - "【onLongPress】 : Événement de maintien 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Style de TextButton", - "desc": [ - "【style】 : Style du bouton 【ButtonStyle】", - "【focusNode】 : Focus 【FocusNode】", - "【clipBehavior】 : Comportement de découpage 【Clip】", - "【autofocus】 : Mise au point automatique 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_it_IT.json deleted file mode 100644 index 241b16dd7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_it_IT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "Pulsante di testo", - "info": "Pulsante di testo in stile Material, di default ha solo testo e un effetto onda al clic. È possibile modificare bordi, colori, ombre e altre proprietà attraverso lo stile.", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di TextButton", - "desc": [ - "【child】 : Se ha un corpo scorrevole 【Widget】", - "【onPressed】 : Evento di clic 【VoidCallback】", - "【onLongPress】 : Evento di pressione prolungata 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Stile di TextButton", - "desc": [ - "【style】 : Stile del pulsante 【ButtonStyle】", - "【focusNode】 : Fuoco 【FocusNode】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【autofocus】 : Autofocus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ja_JP.json deleted file mode 100644 index 70633f0db..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ja_JP.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "テキストボタン", - "info": "Materialスタイルのテキストボタンで、デフォルトではテキストのみが表示され、クリック時に波紋効果があります。スタイルを変更することで、枠線、色、影などのプロパティを変更できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextButtonの基本的な使用", - "desc": [ - "【child】 : スクロール主体を持つかどうか 【Widget】", - "【onPressed】 : クリックイベント 【VoidCallback】", - "【onLongPress】 : 長押しイベント 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "TextButtonのスタイル", - "desc": [ - "【style】 : ボタンのスタイル 【ButtonStyle】", - "【focusNode】 : フォーカス 【FocusNode】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【autofocus】 : 自動フォーカス 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ko_KR.json deleted file mode 100644 index ccb144974..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ko_KR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "텍스트 버튼", - "info": "Material 스타일의 텍스트 버튼으로, 기본적으로 텍스트만 있으며 클릭 시 물결 효과가 있습니다. 스타일을 통해 테두리, 색상, 그림자 등의 속성을 변경할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextButton 기본 사용법", - "desc": [ - "【child】 : 스크롤 가능한 주체 여부 【Widget】", - "【onPressed】 : 클릭 이벤트 【VoidCallback】", - "【onLongPress】 : 길게 누르기 이벤트 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "TextButton 스타일", - "desc": [ - "【style】 : 버튼 스타일 【ButtonStyle】", - "【focusNode】 : 포커스 【FocusNode】", - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【autofocus】 : 자동 포커스 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_pt_PT.json deleted file mode 100644 index 17a48bce5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_pt_PT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "Botão de texto", - "info": "Botão de texto no estilo Material, por padrão só tem texto, com efeito de ondulação ao clicar. Pode alterar propriedades como borda, cor, sombra, etc., através de estilos.", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do TextButton", - "desc": [ - "【child】 : Se tem um corpo de rolagem 【Widget】", - "【onPressed】 : Evento de clique 【VoidCallback】", - "【onLongPress】 : Evento de pressionar longo 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Estilo do TextButton", - "desc": [ - "【style】 : Estilo do botão 【ButtonStyle】", - "【focusNode】 : Foco 【FocusNode】", - "【clipBehavior】 : Comportamento de corte 【Clip】", - "【autofocus】 : Foco automático 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ru_RU.json deleted file mode 100644 index b2ae2d6ab..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ru_RU.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "Текстовая кнопка", - "info": "Текстовая кнопка в стиле Material, по умолчанию имеет только текст, при нажатии появляется эффект волны. Можно изменить свойства границы, цвета, тени и другие через стили.", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование TextButton", - "desc": [ - "【child】 : Имеет ли прокручиваемое содержимое 【Widget】", - "【onPressed】 : Событие нажатия 【VoidCallback】", - "【onLongPress】 : Событие долгого нажатия 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Стиль TextButton", - "desc": [ - "【style】 : Стиль кнопки 【ButtonStyle】", - "【focusNode】 : Фокус 【FocusNode】", - "【clipBehavior】 : Поведение обрезки 【Clip】", - "【autofocus】 : Автофокус 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_zh-CN.json deleted file mode 100644 index 73589c97a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_zh-CN.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "文字按钮", - "info": "Material风格的文字按钮,默认只有文字,点击时有水波纹。可通过样式更改边框、颜色、阴影等属性。", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextButton基本使用", - "desc": [ - "【child】 : 是否具有滚动主体 【Widget】", - "【onPressed】 : 点击事件 【VoidCallback】", - "【onLongPress】 : 长按事件 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "TextButton样式", - "desc": [ - "【style】 : 按钮样式 【ButtonStyle】", - "【focusNode】 : 焦点 【FocusNode】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【autofocus】 : 自动聚焦 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/node1_base.dart deleted file mode 100644 index 0b8383a5d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/node1_base.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; - - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class TextButtonDemo extends StatelessWidget { - const TextButtonDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - height: 60, - child: Wrap( - spacing: 20, - children: [ - TextButton( - child: const Text('TextButton 文字'), - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - const TextButton( - child: Text('TextButton 禁用'), - onPressed: null, - onLongPress: null, - ), - ], - )); - } - - void _onPressed() {} - - void _onLongPress() {} -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/node2_style.dart b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/node2_style.dart deleted file mode 100644 index d5a620047..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/node2_style.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class TextButtonStyleDemo extends StatelessWidget { - const TextButtonStyleDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - child: Wrap( - spacing: 10, - children: [ - TextButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - padding: const EdgeInsets.symmetric(horizontal: 8), - foregroundColor: Colors.white, - elevation: 2, - shadowColor: Colors.orangeAccent), - child: const Text('TextButton 样式'), - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - TextButton( - style: TextButton.styleFrom( - backgroundColor: Colors.white, - foregroundColor: Colors.black, - side: const BorderSide(color: Colors.blue, width: 1), - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10))), - // elevation: 2, - shadowColor: Colors.orangeAccent), - child: const Text('TextButton 边线'), - autofocus: false, - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - ], - ), - ); - } - - void _onPressed() {} - - void _onLongPress() {} -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_de_DE.json deleted file mode 100644 index a5be0cb36..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_de_DE.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "Eingabefeld", - "info": "Eine Komponente zur Eingabe mit komplexen Eigenschaften. Kann Controller, Textstil, Dekorationslinien, Zeilenbeschränkungen, Cursor-Stil usw. angeben. Empfängt Ereignisse wie Eingabeänderungen und Eingabeabschluss.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von TextField", - "desc": [ - "【controller】 : Controller 【TextEditingController】", - "【style】 : Textstil 【TextStyle】", - "【decoration】 : Dekorationslinie 【InputDecoration】", - "【onEditingComplete】 : Ereignis bei Eingabeabschluss 【Function()】", - "【onSubmitted】 : Ereignis bei Übermittlung 【Function(String)】", - "【onChanged】 : Ereignis bei Eingabe 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "Zeilenanzahl und Cursor von TextField", - "desc": [ - "【minLines】 : Minimale Zeilenanzahl 【int】", - "【maxLines】 : Maximale Zeilenanzahl 【int】", - "【cursorRadius】 : Cursor-Radius 【Radius】", - "【cursorColor】 : Cursor-Farbe 【Color】", - "【cursorWidth】 : Cursor-Breite 【double】", - "【showCursor】 : Cursor anzeigen 【bool】", - "【autofocus】 : Automatischer Fokus 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Komplexe Dekoration von InputDecoration", - "desc": [ - "InputDecoration hat viele Dekorationspunkte, siehe Code für Details:", - "border: Bezogen auf den Rand", - "helper: Bezogen auf die Hinweise unten links", - "counter: Bezogen auf die Hinweise unten rechts", - "prefix: Ganz links innerhalb des Eingabefelds", - "suffix: Ganz rechts innerhalb des Eingabefelds", - "label: Text ohne Fokus", - "label: Text ohne Fokus", - "hint: Bezogen auf Hinweistext", - "border: Bezogen auf den Rand" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_en_US.json deleted file mode 100644 index f84e35c80..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_en_US.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "Input Box", - "info": "A component for input, with complex properties. Can specify controller, text style, decoration, line limit, cursor style, etc. Receives input change, input completion, and other events.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of TextField", - "desc": [ - "【controller】 : Controller 【TextEditingController】", - "【style】 : Text Style 【TextStyle】", - "【decoration】 : Decoration 【InputDecoration】", - "【onEditingComplete】 : Input Completion Event 【Function()】", - "【onSubmitted】 : Submission Event 【Function(String)】", - "【onChanged】 : Input Event 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "Line Number and Cursor of TextField", - "desc": [ - "【minLines】 : Minimum Lines 【int】", - "【maxLines】 : Maximum Lines 【int】", - "【cursorRadius】 : Cursor Radius 【Radius】", - "【cursorColor】 : Cursor Color 【Color】", - "【cursorWidth】 : Cursor Width 【double】", - "【showCursor】 : Whether to Show Cursor 【bool】", - "【autofocus】 : Auto Focus 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Complex Decoration of Decoration", - "desc": [ - "InputDecoration has many decoration points, corresponding to the code:", - "border: Border related", - "helper: Bottom left corner related hints", - "counter: Bottom right corner related hints", - "prefix: Innermost left side of the input box", - "suffix: Innermost right side of the input box", - "label: Text when no focus", - "label: Text when no focus", - "hint: Hint text related", - "border: Border related" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_es_ES.json deleted file mode 100644 index 90168ca13..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_es_ES.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "Campo de texto", - "info": "Componente de entrada con propiedades complejas. Puede especificar controladores, estilos de texto, decoraciones de línea, límites de líneas, estilos de cursor, etc. Recibe eventos de cambio de entrada, finalización de entrada, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de TextField", - "desc": [ - "【controller】 : Controlador 【TextEditingController】", - "【style】 : Estilo de texto 【TextStyle】", - "【decoration】 : Decoración de línea 【InputDecoration】", - "【onEditingComplete】 : Evento de finalización de entrada 【Function()】", - "【onSubmitted】 : Evento de envío 【Function(String)】", - "【onChanged】 : Evento de entrada 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "Número de líneas y cursor de TextField", - "desc": [ - "【minLines】 : Número mínimo de líneas 【int】", - "【maxLines】 : Número máximo de líneas 【int】", - "【cursorRadius】 : Radio del cursor 【Radius】", - "【cursorColor】 : Color del cursor 【Color】", - "【cursorWidth】 : Ancho del cursor 【double】", - "【showCursor】 : Mostrar cursor 【bool】", - "【autofocus】 : Enfoque automático 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Decoración compleja de decoration", - "desc": [ - "InputDecoration tiene muchos puntos de decoración, consulte el código para los detalles:", - "border: Relacionado con el borde", - "helper: Sugerencia en la esquina inferior izquierda", - "counter: Sugerencia en la esquina inferior derecha", - "prefix: Interior del campo de texto, extremo izquierdo", - "suffix: Interior del campo de texto, extremo derecho", - "label: Texto sin foco", - "label: Texto sin foco", - "hint: Relacionado con el texto de sugerencia", - "border: Relacionado con el borde" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_fr_FR.json deleted file mode 100644 index f612657ed..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_fr_FR.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "Champ de saisie", - "info": "Composant pour la saisie, possédant des propriétés complexes. Peut spécifier un contrôleur, un style de texte, une décoration de ligne, une limite de lignes, un style de curseur, etc. Reçoit des événements de changement de saisie, de saisie terminée, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de TextField", - "desc": [ - "【controller】 : Contrôleur 【TextEditingController】", - "【style】 : Style de texte 【TextStyle】", - "【decoration】 : Décoration de ligne 【InputDecoration】", - "【onEditingComplete】 : Événement de saisie terminée 【Function()】", - "【onSubmitted】 : Événement de soumission 【Function(String)】", - "【onChanged】 : Événement de saisie 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "Nombre de lignes et curseur de TextField", - "desc": [ - "【minLines】 : Nombre minimal de lignes 【int】", - "【maxLines】 : Nombre maximal de lignes 【int】", - "【cursorRadius】 : Rayon du curseur 【Radius】", - "【cursorColor】 : Couleur du curseur 【Color】", - "【cursorWidth】 : Largeur du curseur 【double】", - "【showCursor】 : Afficher le curseur 【bool】", - "【autofocus】 : Mise au point automatique 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Décoration complexe de InputDecoration", - "desc": [ - "InputDecoration a de nombreux points de décoration, voir le code pour les détails:", - "border: Relatif à la bordure", - "helper: Indication en bas à gauche", - "counter: Indication en bas à droite", - "prefix: Partie la plus à gauche à l'intérieur du champ de saisie", - "suffix: Partie la plus à droite à l'intérieur du champ de saisie", - "label: Texte sans focus", - "label: Texte sans focus", - "hint: Relatif au texte d'indication", - "border: Relatif à la bordure" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_it_IT.json deleted file mode 100644 index 87050f769..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_it_IT.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "Campo di testo", - "info": "Componente per l'input, con proprietà complesse. Puoi specificare il controller, lo stile del testo, la decorazione della linea, il limite di righe, lo stile del cursore, ecc. Riceve eventi di cambiamento dell'input, completamento dell'input, ecc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di TextField", - "desc": [ - "【controller】 : Controller 【TextEditingController】", - "【style】 : Stile del testo 【TextStyle】", - "【decoration】 : Decorazione della linea 【InputDecoration】", - "【onEditingComplete】 : Evento di completamento dell'input 【Function()】", - "【onSubmitted】 : Evento di invio 【Function(String)】", - "【onChanged】 : Evento di input 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "Numero di righe e cursore di TextField", - "desc": [ - "【minLines】 : Numero minimo di righe 【int】", - "【maxLines】 : Numero massimo di righe 【int】", - "【cursorRadius】 : Raggio del cursore 【Radius】", - "【cursorColor】 : Colore del cursore 【Color】", - "【cursorWidth】 : Larghezza del cursore 【double】", - "【showCursor】 : Mostrare il cursore 【bool】", - "【autofocus】 : Autofocus 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Decorazione complessa di decoration", - "desc": [ - "InputDecoration ha molti punti di decorazione, i dettagli sono nel codice:", - "border: Relativo al bordo", - "helper: Suggerimento nell'angolo inferiore sinistro", - "counter: Suggerimento nell'angolo inferiore destro", - "prefix: Parte più interna a sinistra del campo di input", - "suffix: Parte più interna a destra del campo di input", - "label: Testo senza focus", - "label: Testo senza focus", - "hint: Relativo al testo di suggerimento", - "border: Relativo al bordo" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ja_JP.json deleted file mode 100644 index a77554dfc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ja_JP.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "入力欄", - "info": "入力用のコンポーネントで、複雑な属性を持っています。コントローラー、テキストスタイル、装飾線、行数制限、カーソルスタイルなどを指定できます。入力の変化、入力完了などのイベントを受け取ります。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextFieldの基本使用法", - "desc": [ - "【controller】 : コントローラー 【TextEditingController】", - "【style】 : テキストスタイル 【TextStyle】", - "【decoration】 : 装飾線 【InputDecoration】", - "【onEditingComplete】 : 入力完了イベント 【Function()】", - "【onSubmitted】 : 送信イベント 【Function(String)】", - "【onChanged】 : 入力イベント 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "TextFieldの行数とカーソル", - "desc": [ - "【minLines】 : 最小行数 【int】", - "【maxLines】 : 最大行数 【int】", - "【cursorRadius】 : カーソルの半径 【Radius】", - "【cursorColor】 : カーソルの色 【Color】", - "【cursorWidth】 : カーソルの幅 【double】", - "【showCursor】 : カーソルを表示するかどうか 【bool】", - "【autofocus】 : 自動フォーカス 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "decorationの複雑な装飾", - "desc": [ - "InputDecorationには非常に多くの装飾ポイントがあり、コードに対応する装飾があります:", - "border: ボーダー関連", - "helper: 左下のヒント関連", - "counter: 右下のヒント関連", - "prefix: 入力欄の内部最左側", - "suffix: 入力欄の内部最右側", - "label: フォーカスがない時のテキスト", - "label: フォーカスがない時のテキスト", - "hint: ヒントテキスト関連", - "border: ボーダー関連" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ko_KR.json deleted file mode 100644 index 0f27e08eb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ko_KR.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "입력 필드", - "info": "입력을 위한 컴포넌트로, 복잡한 속성을 가지고 있습니다. 컨트롤러, 텍스트 스타일, 장식선, 줄 수 제한, 커서 스타일 등을 지정할 수 있습니다. 입력 변경, 입력 완료 등의 이벤트를 받습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextField 기본 사용법", - "desc": [ - "【controller】 : 컨트롤러 【TextEditingController】", - "【style】 : 텍스트 스타일 【TextStyle】", - "【decoration】 : 장식선 【InputDecoration】", - "【onEditingComplete】 : 입력 완료 이벤트 【Function()】", - "【onSubmitted】 : 제출 이벤트 【Function(String)】", - "【onChanged】 : 입력 이벤트 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "TextField 줄 수와 커서", - "desc": [ - "【minLines】 : 최소 줄 수 【int】", - "【maxLines】 : 최대 줄 수 【int】", - "【cursorRadius】 : 커서 반지름 【Radius】", - "【cursorColor】 : 커서 색상 【Color】", - "【cursorWidth】 : 커서 너비 【double】", - "【showCursor】 : 커서 표시 여부 【bool】", - "【autofocus】 : 자동 포커스 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "decoration의 복잡한 장식", - "desc": [ - "InputDecoration에는 매우 많은 장식점이 있으며, 해당 장식점은 코드를 참조하세요:", - "border: 테두리 관련", - "helper: 왼쪽 하단 관련 힌트", - "counter: 오른쪽 하단 관련 힌트", - "prefix: 입력 필드 내부 가장 왼쪽", - "suffix: 입력 필드 내부 가장 오른쪽", - "label: 포커스 없을 때의 텍스트", - "label: 포커스 없을 때의 텍스트", - "hint: 힌트 텍스트 관련", - "border: 테두리 관련" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_pt_PT.json deleted file mode 100644 index 76c04b016..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_pt_PT.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "Campo de entrada", - "info": "Componente para entrada de dados, possui propriedades complexas. Pode especificar controlador, estilo de texto, decoração de linha, limite de linhas, estilo do cursor, etc. Recebe eventos de mudança de entrada, conclusão de entrada, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do TextField", - "desc": [ - "【controller】 : Controlador 【TextEditingController】", - "【style】 : Estilo de texto 【TextStyle】", - "【decoration】 : Decoração de linha 【InputDecoration】", - "【onEditingComplete】 : Evento de conclusão de entrada 【Function()】", - "【onSubmitted】 : Evento de submissão 【Function(String)】", - "【onChanged】 : Evento de entrada 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "Número de linhas e cursor do TextField", - "desc": [ - "【minLines】 : Número mínimo de linhas 【int】", - "【maxLines】 : Número máximo de linhas 【int】", - "【cursorRadius】 : Raio do cursor 【Radius】", - "【cursorColor】 : Cor do cursor 【Color】", - "【cursorWidth】 : Largura do cursor 【double】", - "【showCursor】 : Mostrar cursor 【bool】", - "【autofocus】 : Foco automático 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Decoração complexa do decoration", - "desc": [ - "InputDecoration tem muitos pontos de decoração, correspondentes ao código:", - "border: Relacionado à borda", - "helper: Dica relacionada ao canto inferior esquerdo", - "counter: Dica relacionada ao canto inferior direito", - "prefix: Extremidade esquerda interna do campo de entrada", - "suffix: Extremidade direita interna do campo de entrada", - "label: Texto sem foco", - "label: Texto sem foco", - "hint: Texto de dica relacionado", - "border: Relacionado à borda" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ru_RU.json deleted file mode 100644 index fc395008c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ru_RU.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "Поле ввода", - "info": "Компонент для ввода, обладающий сложными свойствами. Можно указать контроллер, стиль текста, декоративные линии, ограничение на количество строк, стиль курсора и т.д. Получает события изменения ввода, завершения ввода и т.д.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование TextField", - "desc": [ - "【controller】 : Контроллер 【TextEditingController】", - "【style】 : Стиль текста 【TextStyle】", - "【decoration】 : Декоративные линии 【InputDecoration】", - "【onEditingComplete】 : Событие завершения ввода 【Function()】", - "【onSubmitted】 : Событие отправки 【Function(String)】", - "【onChanged】 : Событие ввода 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "Количество строк и курсор в TextField", - "desc": [ - "【minLines】 : Минимальное количество строк 【int】", - "【maxLines】 : Максимальное количество строк 【int】", - "【cursorRadius】 : Радиус курсора 【Radius】", - "【cursorColor】 : Цвет курсора 【Color】", - "【cursorWidth】 : Ширина курсора 【double】", - "【showCursor】 : Показывать ли курсор 【bool】", - "【autofocus】 : Автоматическая фокусировка 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Сложные декорации в decoration", - "desc": [ - "InputDecoration имеет множество точек декорации, соответствующие элементы см. в коде:", - "border: Связано с границами", - "helper: Подсказка в нижнем левом углу", - "counter: Подсказка в нижнем правом углу", - "prefix: Самая левая часть внутри поля ввода", - "suffix: Самая правая часть внутри поля ввода", - "label: Текст без фокуса", - "label: Текст без фокуса", - "hint: Связано с подсказкой", - "border: Связано с границами" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_zh-CN.json deleted file mode 100644 index cf7ea31a3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_zh-CN.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "输入框", - "info": "由于输入的组件,拥有复杂的属性。可指定控制器、文字样式、装饰线、行数限制、游标样式等。接收输入变化、完成输入等事件。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextField基本用法", - "desc": [ - "【controller】 : 控制器 【TextEditingController】", - "【style】 : 文字样式 【TextStyle】", - "【decoration】 : 装饰线 【InputDecoration】", - "【onEditingComplete】 : 输入完成事件 【Function()】", - "【onSubmitted】 : 提交事件 【Function(String)】", - "【onChanged】 : 输入事件 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "TextField行数和cursor", - "desc": [ - "【minLines】 : 最小行数 【int】", - "【maxLines】 : 最大行数 【int】", - "【cursorRadius】 : 光标半径 【Radius】", - "【cursorColor】 : 光标颜色 【Color】", - "【cursorWidth】 : 光标宽度 【double】", - "【showCursor】 : 是否显示光标 【bool】", - "【autofocus】 : 自动聚焦 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "decoration的复杂装饰", - "desc": [ - "InputDecoration有非常多的装饰点,对应点缀见代码:", - "border: 边线相关", - "helper: 左下角相关提示", - "counter: 右下角相关提示", - "prefix: 输入框内部最左侧", - "suffix: 输入框内部最右侧", - "label: 无焦点时文字", - "label: 无焦点时文字", - "hint: 提示文字相关", - "border: 边线相关" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/TextField/node1_base.dart deleted file mode 100644 index 64a59be92..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/node1_base.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomTextField extends StatefulWidget { - const CustomTextField({Key? key}) : super(key: key); - - @override - _CustomTextFieldState createState() => _CustomTextFieldState(); -} - -class _CustomTextFieldState extends State { - final FocusNode _focusNode = FocusNode(); - late TextEditingController _controller; - - @override - void initState() { - super.initState(); - _controller = TextEditingController(); - } - - @override - void dispose() { - _controller.dispose(); - _focusNode.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 300, - child: TextField( - controller: _controller, - style: const TextStyle(color: Colors.blue), - decoration: const InputDecoration( - border: OutlineInputBorder(), - labelText: 'username', - ), - onEditingComplete: () { - print('onEditingComplete'); - }, - onChanged: (v) { - print('onChanged:' + v); - }, - onSubmitted: (v) { - FocusScope.of(context).requestFocus(_focusNode); - print('onSubmitted:' + v); - _controller.clear(); - }, - )); - } -} - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/node2_cursor.dart b/modules/widget_system/widgets/lib/StatefulWidget/TextField/node2_cursor.dart deleted file mode 100644 index 5efaa0cc6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/node2_cursor.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CursorTextField extends StatefulWidget { - const CursorTextField({Key? key}) : super(key: key); - - @override - _CursorTextFieldState createState() => _CursorTextFieldState(); -} - -class _CursorTextFieldState extends State { - final FocusNode _focusNode = FocusNode(); - - @override - void dispose() { - _focusNode.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - _buildSubmitBtn(), - _buildTextField(context), - ], - ); - } - - Widget _buildTextField(BuildContext context) { - return SizedBox( - width: 300, - child: TextField( - style: const TextStyle(color: Colors.blue), - minLines: 3, - maxLines: 5, - cursorColor: Colors.green, - cursorRadius: const Radius.circular(3), - cursorWidth: 5, - showCursor: true, - decoration: const InputDecoration( - contentPadding: EdgeInsets.all(10), - hintText: "请输入...", - border: OutlineInputBorder(), - ), - onChanged: (v) {}, - ), - ); - } - - Widget _buildSubmitBtn() => ElevatedButton( - child: const Text( - "提交", - style: TextStyle(color: Colors.white, fontSize: 16), - ), - onPressed: () => FocusScope.of(context).requestFocus(_focusNode)); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/node3_decoration.dart b/modules/widget_system/widgets/lib/StatefulWidget/TextField/node3_decoration.dart deleted file mode 100644 index 0a8aeb3d3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/node3_decoration.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class ComplexTextField extends StatelessWidget { - const ComplexTextField({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const TextField( - decoration: InputDecoration( - border: OutlineInputBorder(), - focusedBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.blue), - borderRadius: BorderRadius.only( - topLeft: Radius.circular(10), bottomLeft: Radius.circular(10))), - enabledBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.deepPurpleAccent), - borderRadius: BorderRadius.only( - topLeft: Radius.circular(10), bottomLeft: Radius.circular(10))), - labelText: 'username', - labelStyle: TextStyle(color: Colors.purple), - helperText: "help me", - helperStyle: TextStyle(color: Colors.blue), - - suffixText: "suffix", - suffixIcon: Icon(Icons.done), - suffixStyle: TextStyle(color: Colors.green), - - counterText: "counter", - counterStyle: TextStyle(color: Colors.orange), - - prefixText: "ID ", - prefixStyle: TextStyle(color: Colors.blue), - prefixIcon: Icon(Icons.language), - - fillColor: Color(0x110099ee), - filled: true, - - // errorText: "error", - // errorMaxLines: 1, - // errorStyle: TextStyle(color: Colors.red), - // errorBorder: UnderlineInputBorder(), - - hintText: "请输入用户名", - hintMaxLines: 1, - hintStyle: TextStyle(color: Colors.black38), - icon: Icon(Icons.assignment_ind), - )); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_de_DE.json deleted file mode 100644 index a44d1a43f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "Textformularfeld", - "info": "Die Eigenschaften sind im Wesentlichen dieselben wie bei TextField, zusätzlich gibt es Validierungs- und Rückruffunktionen für die Felder. Der FormState-save löst den onSaved-Rückruf aus.", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von TextFormField", - "desc": [ - "Die grundlegenden Eigenschaften sind identisch mit TextField, siehe dort für Details", - "【validator】: Validierungsfunktion 【FormFieldValidator】", - "【onFieldSubmitted】: Einreichungsrückruf 【ValueChanged】", - "【onSaved】: Rückruf beim Speichern des Formulars 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_en_US.json deleted file mode 100644 index caa91b5f2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "Text Form Input", - "info": "The properties are basically the same as TextField, with the addition of field validation and submission callbacks. The save of FormState will trigger the onSaved callback.", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of TextFormField", - "desc": [ - "The basic properties are the same as TextField, see details there", - "【validator】: Validation function 【FormFieldValidator】", - "【onFieldSubmitted】: Submission callback 【ValueChanged】", - "【onSaved】: Callback when the form is saved 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_es_ES.json deleted file mode 100644 index d7d1c29dd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "Campo de entrada de texto", - "info": "Básicamente es igual a las propiedades de TextField, con la adición de validación de campo y devolución de llamada de envío. El save de FormState activará la devolución de llamada onSaved.", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de TextFormField", - "desc": [ - "Las propiedades básicas son las mismas que las de TextField, consulte los detalles", - "【validator】 : Función de validación 【FormFieldValidator 】", - "【onFieldSubmitted】 : Devolución de llamada de envío 【ValueChanged】", - "【onSaved】 : Devolución de llamada cuando se guarda el formulario 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_fr_FR.json deleted file mode 100644 index 100a2351b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "Champ de formulaire de texte", - "info": "Les propriétés sont fondamentalement les mêmes que celles de TextField, avec en plus des validations de champ et des rappels de soumission. Le save de FormState déclenche le rappel onSaved.", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de TextFormField", - "desc": [ - "Les propriétés de base sont les mêmes que celles de TextField, voir les détails", - "【validator】 : Fonction de validation 【FormFieldValidator 】", - "【onFieldSubmitted】 : Rappel de soumission 【ValueChanged】", - "【onSaved】 : Rappel lors de la sauvegarde du formulaire 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_it_IT.json deleted file mode 100644 index 3c20c0b81..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "Campo di input di testo", - "info": "Le proprietà sono fondamentalmente le stesse di TextField, con l'aggiunta di callback per la validazione e l'invio dei campi. Il save di FormState attiverà la callback onSaved.", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di TextFormField", - "desc": [ - "Le proprietà di base sono le stesse di TextField, vedi dettagli", - "【validator】 : funzione di validazione 【FormFieldValidator 】", - "【onFieldSubmitted】 : callback di invio 【ValueChanged】", - "【onSaved】 : callback quando il modulo viene salvato 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ja_JP.json deleted file mode 100644 index d1909f133..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "テキストフォーム入力", - "info": "TextFieldの属性と基本的に同じで、それに基づいてフィールドの検証と送信のコールバックが追加されています。FormStateのsaveはonSavedコールバックをトリガーします。", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextFormFieldの基本使用", - "desc": [ - "基本属性はTextFieldと一致します。詳細はそちらをご覧ください", - "【validator】 : 検証関数 【FormFieldValidator 】", - "【onFieldSubmitted】 : 送信コールバック 【ValueChanged】", - "【onSaved】 : フォームsave時のコールバック 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ko_KR.json deleted file mode 100644 index 01894f41d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "텍스트 폼 입력", - "info": "TextField 속성과 기본적으로 동일하며, 여기에 필드 검증 및 제출 콜백이 추가되었습니다. FormState의 save는 onSaved 콜백을 트리거합니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextFormField 기본 사용", - "desc": [ - "기본 속성은 TextField와 동일하며, 자세한 내용은 해당 항목을 참조하세요", - "【validator】 : 검증 함수 【FormFieldValidator 】", - "【onFieldSubmitted】 : 제출 콜백 【ValueChanged】", - "【onSaved】 : 폼 save 시 콜백 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_pt_PT.json deleted file mode 100644 index b70a87a65..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "Campo de Entrada de Texto", - "info": "As propriedades são basicamente as mesmas que o TextField, com a adição de validação de campo e callbacks de envio. O save do FormState irá acionar o callback onSaved.", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do TextFormField", - "desc": [ - "As propriedades básicas são as mesmas que o TextField, consulte-o para mais detalhes", - "【validator】: Função de validação 【FormFieldValidator】", - "【onFieldSubmitted】: Callback de envio 【ValueChanged】", - "【onSaved】: Callback quando o formulário é salvo 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ru_RU.json deleted file mode 100644 index 47b202b2c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "Текстовое поле формы", - "info": "Свойства аналогичны TextField, с добавлением проверки поля и обратного вызова отправки. Сохранение FormState вызовет обратный вызов onSaved.", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование TextFormField", - "desc": [ - "Основные свойства аналогичны TextField, подробнее см. там", - "【validator】 : Функция проверки 【FormFieldValidator 】", - "【onFieldSubmitted】 : Обратный вызов отправки 【ValueChanged】", - "【onSaved】 : Обратный вызов при сохранении формы 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_zh-CN.json deleted file mode 100644 index 26a01201e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "文字表单输入", - "info": "和TextField属性基本一致,在其基础上增加字段的校验和提交的回调,FormState的save会触发onSaved回调。", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextFormField基本使用", - "desc": [ - "基本属性和TextField一致,详见之", - "【validator】 : 验证函数 【FormFieldValidator 】", - "【onFieldSubmitted】 : 提交回调 【ValueChanged】", - "【onSaved】 : 表单save时回调 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/node1_base.dart deleted file mode 100644 index 0e8dc1731..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/node1_base.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class CustomTextFormField extends StatefulWidget { - const CustomTextFormField({Key? key}) : super(key: key); - - @override - _CustomTextFormFieldState createState() => _CustomTextFormFieldState(); -} - -class _CustomTextFormFieldState extends State { - final GlobalKey _formKey = GlobalKey(); - - @override - Widget build(BuildContext context) { - return Row( - children: [ - const SizedBox(width: 40), - Expanded( - child: TextFormField( - style: const TextStyle(textBaseline: TextBaseline.alphabetic), - decoration: const InputDecoration( - border: OutlineInputBorder(), - labelText: 'username', - ), - validator: _validateUsername, - onFieldSubmitted: _onFieldSubmitted, - onSaved: _onSaved, - ), - ), - _buildSubmitButton(context), - ], - ); - } - - String? _validateUsername(value) { - if (value.isEmpty) { - return '用户名不能为空'; - } - return null; - } - - void _onSaved(value) { - print('onSaved:' + value); - } - - void _onFieldSubmitted(value) { - print('onFieldSubmitted:' + value); - } - - Widget _buildSubmitButton(BuildContext context) => ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.blue, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - )), - onPressed: _onSubmit, - child: const Icon( - Icons.check, - color: Colors.white, - ), - ); - - void _onSubmit() { - if (_formKey.currentState == null) return; - _formKey.currentState!.save(); - if (_formKey.currentState!.validate()) { - FocusScope.of(context).requestFocus(FocusNode()); - } - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_de_DE.json deleted file mode 100644 index 36f681f19..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "Timer-Modus", - "info": "Deaktiviert/Aktiviert den Timer (Ticker) des Unterbaums, der Animationscontroller basiert auf Ticker.", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Animation einheitlich deaktivieren/aktivieren", - "desc": [ - "Das enabled von TickerMode kann die Animationseffekte des Unterbaums einheitlich aktivieren/deaktivieren." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_en_US.json deleted file mode 100644 index a1a0961e8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "Timer Mode", - "info": "Enable/disable the timer (Ticker) for the subtree, the animation controller is implemented based on Ticker.", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Unified Enable/Disable Animation", - "desc": [ - "The enabled property of TickerMode can uniformly enable/disable the animation effects of the subtree." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_es_ES.json deleted file mode 100644 index d5b3baf4f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "Modo Ticker", - "info": "Deshabilitar/habilitar el Ticker del subárbol, el controlador de animación se basa en Ticker.", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Deshabilitar/Habilitar Animación Unificada", - "desc": [ - "El enabled de TickerMode puede habilitar/deshabilitar uniformemente los efectos de animación del subárbol." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_fr_FR.json deleted file mode 100644 index 04167417d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "Mode Ticker", - "info": "Activer/Désactiver le Ticker du sous-arbre, le contrôleur d'animation est basé sur Ticker.", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Activer/Désactiver l'animation de manière uniforme", - "desc": [ - "Le paramètre enabled de TickerMode peut activer/désactiver de manière uniforme les effets d'animation du sous-arbre." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_it_IT.json deleted file mode 100644 index 1c5b23230..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "Modalità Timer", - "info": "Disabilita/abilita il timer (Ticker) del sottoalbero, il controller di animazione è basato su Ticker.", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Disabilita/Abilita Animazione Unificata", - "desc": [ - "L'attributo enabled di TickerMode può abilitare/disabilitare in modo unificato gli effetti di animazione del sottoalbero." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ja_JP.json deleted file mode 100644 index 2cd5ca731..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "タイカーモード", - "info": "サブツリーのタイマー(Ticker)を無効/有効にします。アニメーションコントローラーは Ticker に基づいて実装されています。", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "アニメーションの一括無効/有効", - "desc": [ - "TickerMode の enabled は、サブツリーのアニメーション効果を一括して有効/無効にすることができます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ko_KR.json deleted file mode 100644 index f65208410..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "타이머 모드", - "info": "서브트리의 타이머(Ticker)를 비활성화/활성화합니다. 애니메이션 컨트롤러는 Ticker를 기반으로 구현됩니다.", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "통합 비활성화/활성화 애니메이션", - "desc": [ - "TickerMode의 enabled는 서브트리의 애니메이션 효과를 통합적으로 활성화/비활성화할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_pt_PT.json deleted file mode 100644 index 4eae56896..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "Modo de Temporizador", - "info": "Desativar/ativar o temporizador (Ticker) da subárvore, o controlador de animação é implementado com base no Ticker.", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Desativar/Ativar Animação Uniformemente", - "desc": [ - "O enabled do TickerMode pode ativar/desativar uniformemente os efeitos de animação da subárvore." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ru_RU.json deleted file mode 100644 index 25a8a650d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "Режим таймера", - "info": "Отключить/включить таймер (Ticker) для поддерева, контроллер анимации реализован на основе Ticker.", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Единое отключение/включение анимации", - "desc": [ - "Свойство enabled TickerMode позволяет единообразно включить/отключить анимацию для поддерева." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_zh-CN.json deleted file mode 100644 index 4cd210d03..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "计时器模式", - "info": "禁用/启用子树的计时器(Ticker),动画控制器基于 Ticker 实现。", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "统一禁用/启用动画", - "desc": [ - "TickerMode 的 enabled 可以统一启用/禁用子树的动画效果。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/node1.dart deleted file mode 100644 index f602baac1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/node1.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class TickerModeDemo1 extends StatefulWidget { - const TickerModeDemo1({super.key}); - - @override - State createState() => _TickerModeDemo1State(); -} - -class _TickerModeDemo1State extends State { - bool _disable = false; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - buildOutSwitch(), - const SizedBox(height: 4), - TickerMode(enabled: !_disable, child: buildTestContent()), - ], - ); - } - - Widget buildOutSwitch() => Wrap( - alignment: WrapAlignment.center, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - const Text('TickerMode外的Switch:'), - Switch(value: _disable, onChanged: _onChanged) - ], - ); - - Widget buildTestContent() => Wrap( - alignment: WrapAlignment.center, - crossAxisAlignment: WrapCrossAlignment.center, - spacing: 20, - children: [ - Switch(value: _disable, onChanged: _onChanged), - const CupertinoActivityIndicator(), - const CircularProgressIndicator(), - ], - ); - - void _onChanged(bool value) { - setState(() { - _disable = value; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_de_DE.json deleted file mode 100644 index 47c9c3c93..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_de_DE.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "Hinweiswerkzeug", - "info": "Eine Komponente zur Anzeige von Hinweistexten, die bei längerem Drücken Informationen anzeigt. Kann Rand, Anzeigedauer, Textstil und Dekorationseigenschaften festlegen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Tooltip", - "desc": [ - "【preferBelow】 : Bevorzugt unten 【bool】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】", - "【margin】 : Außenabstand 【EdgeInsetsGeometry】", - "【message】 : Nachrichteninhalt 【String】", - "【showDuration】 : Anzeigedauer 【Duration】", - "【waitDuration】 : Schwebeerscheinungszeit 【Duration】", - "【child】 : Kind 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Dekoration von Tooltip", - "desc": [ - "【decoration】 : Dekorationsobjekt 【Decoration】", - "【textStyle】 : Textstil 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_en_US.json deleted file mode 100644 index 1d33e3c3d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_en_US.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "Tooltip", - "info": "A component that displays tooltip information, showing the information when long-pressed. You can specify margins, display duration, text style, and decoration properties.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Tooltip", - "desc": [ - "【preferBelow】: Whether to prefer below 【bool】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【margin】: Margin 【EdgeInsetsGeometry】", - "【message】: Message content 【String】", - "【showDuration】: Display duration 【Duration】", - "【waitDuration】: Hover appearance time 【Duration】", - "【child】: Child 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Decoration of Tooltip", - "desc": [ - "【decoration】: Decoration object 【Decoration】", - "【textStyle】: Text style 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_es_ES.json deleted file mode 100644 index c631b3861..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_es_ES.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "Herramienta de sugerencia", - "info": "Componente para mostrar información de sugerencia, muestra información al mantener presionado. Se pueden especificar márgenes, duración de visualización, estilo de texto, propiedades de decoración.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Tooltip", - "desc": [ - "【preferBelow】 : ¿Prefiere abajo? 【bool】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】", - "【margin】 : Margen externo 【EdgeInsetsGeometry】", - "【message】 : Contenido del mensaje 【String】", - "【showDuration】 : Duración de la visualización 【Duration】", - "【waitDuration】 : Tiempo de aparición al flotar 【Duration】", - "【child】 : Hijo 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Decoración de Tooltip", - "desc": [ - "【decoration】 : Objeto de decoración 【Decoration】", - "【textStyle】 : Estilo de texto 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_fr_FR.json deleted file mode 100644 index 6eb37d216..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_fr_FR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "Info-bulle", - "info": "Composant pour afficher des informations d'aide, affiche les informations lors d'un appui long. Peut spécifier les marges, la durée d'affichage, le style du texte, les propriétés de décoration, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Tooltip", - "desc": [ - "【preferBelow】 : Préfère en dessous 【bool】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】", - "【margin】 : Marge extérieure 【EdgeInsetsGeometry】", - "【message】 : Contenu du message 【String】", - "【showDuration】 : Durée d'affichage 【Duration】", - "【waitDuration】 : Temps d'apparition au survol 【Duration】", - "【child】 : Enfant 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Décoration de Tooltip", - "desc": [ - "【decoration】 : Objet de décoration 【Decoration】", - "【textStyle】 : Style du texte 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_it_IT.json deleted file mode 100644 index 6467bfe4c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_it_IT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "Strumento di suggerimento", - "info": "Componente per visualizzare informazioni di suggerimento, mostra le informazioni quando viene premuto a lungo. È possibile specificare margini, durata di visualizzazione, stile del testo, proprietà delle luci decorative.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Tooltip", - "desc": [ - "【preferBelow】 : Preferenza per la posizione inferiore 【bool】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】", - "【margin】 : Spaziatura esterna 【EdgeInsetsGeometry】", - "【message】 : Contenuto del messaggio 【String】", - "【showDuration】 : Durata della visualizzazione 【Duration】", - "【waitDuration】 : Tempo di comparsa al passaggio del mouse 【Duration】", - "【child】 : Figlio 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Decorazione di Tooltip", - "desc": [ - "【decoration】 : Oggetto di decorazione 【Decoration】", - "【textStyle】 : Stile del testo 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ja_JP.json deleted file mode 100644 index 4e0713fed..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ja_JP.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "ツールチップ", - "info": "ヒント情報を表示するためのコンポーネントで、長押しすると情報が表示されます。余白、表示時間、テキストスタイル、装飾などの属性を指定できます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Tooltipの基本使用", - "desc": [ - "【preferBelow】 : 下方を優先するか 【bool】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】", - "【margin】 : 外側の余白 【EdgeInsetsGeometry】", - "【message】 : メッセージ内容 【String】", - "【showDuration】 : 表示時間 【Duration】", - "【waitDuration】 : ホバーして表示されるまでの時間 【Duration】", - "【child】 : 子 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Tooltipの装飾", - "desc": [ - "【decoration】 : 装飾オブジェクト 【Decoration】", - "【textStyle】 : テキストスタイル 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ko_KR.json deleted file mode 100644 index 8b98ca5f0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ko_KR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "툴팁", - "info": "툴팁 정보를 표시하는 컴포넌트로, 길게 누를 때 정보를 표시합니다. 여백, 표시 시간, 텍스트 스타일, 장식 속성 등을 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Tooltip 기본 사용", - "desc": [ - "【preferBelow】 : 아래쪽을 우선할지 여부 【bool】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】", - "【margin】 : 외부 여백 【EdgeInsetsGeometry】", - "【message】 : 메시지 내용 【String】", - "【showDuration】 : 표시 시간 【Duration】", - "【waitDuration】 : 나타나는 시간 【Duration】", - "【child】 : 자식 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Tooltip의 장식", - "desc": [ - "【decoration】 : 장식 객체 【Decoration】", - "【textStyle】 : 텍스트 스타일 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_pt_PT.json deleted file mode 100644 index f2239a7b8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_pt_PT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "Ferramenta de Dica", - "info": "Componente que exibe informações de dica, exibindo informações ao pressionar e segurar. Pode especificar margens, duração de exibição, estilo de texto, propriedades de decoração, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Tooltip", - "desc": [ - "【preferBelow】 : Preferir abaixo 【bool】", - "【padding】 : Preenchimento interno 【EdgeInsetsGeometry】", - "【margin】 : Margem externa 【EdgeInsetsGeometry】", - "【message】 : Conteúdo da mensagem 【String】", - "【showDuration】 : Duração da exibição 【Duration】", - "【waitDuration】 : Tempo de aparecimento ao pairar 【Duration】", - "【child】 : Filho 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Decoração do Tooltip", - "desc": [ - "【decoration】 : Objeto de decoração 【Decoration】", - "【textStyle】 : Estilo de texto 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ru_RU.json deleted file mode 100644 index e535f7edd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ru_RU.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "Всплывающая подсказка", - "info": "Компонент для отображения всплывающих подсказок, информация отображается при длительном нажатии. Можно указать отступы, время отображения, стиль текста, свойства декорации.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Tooltip", - "desc": [ - "【preferBelow】 : Предпочтительно снизу 【bool】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】", - "【margin】 : Внешние отступы 【EdgeInsetsGeometry】", - "【message】 : Содержание сообщения 【String】", - "【showDuration】 : Время отображения 【Duration】", - "【waitDuration】 : Время появления при наведении 【Duration】", - "【child】 : Дочерний элемент 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Декорация Tooltip", - "desc": [ - "【decoration】 : Объект декорации 【Decoration】", - "【textStyle】 : Стиль текста 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_zh-CN.json deleted file mode 100644 index 570a1548a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_zh-CN.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "提示工具", - "info": "由于显示提示信息的组件,长按时显示信息。可指定边距、显示时长、文字样式、装饰灯属性。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Tooltip基本使用", - "desc": [ - "【preferBelow】 : 是否首选下方 【bool】", - "【padding】 : 内边距 【EdgeInsetsGeometry】", - "【margin】 : 外边距 【EdgeInsetsGeometry】", - "【message】 : 消息内容 【String】", - "【showDuration】 : 展示时间 【Duration】", - "【waitDuration】 : 悬浮出现时间 【Duration】", - "【child】 : 孩子 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Tooltip的装饰", - "desc": [ - "【decoration】 : 装饰对象 【Decoration】", - "【textStyle】 : 文字样式 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/node1_base.dart deleted file mode 100644 index 29953fdb9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/node1_base.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class CustomTooltip extends StatelessWidget { - const CustomTooltip({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const Tooltip( - preferBelow: true, - padding: EdgeInsets.all(5), - margin: EdgeInsets.all(5), - message: "天王盖地虎", - showDuration: Duration(seconds: 3), - waitDuration: Duration(milliseconds: 200), - child: Icon(Icons.info_outline), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/node2_decoration.dart b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/node2_decoration.dart deleted file mode 100644 index c850cb18d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/node2_decoration.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class DecorationTooltip extends StatelessWidget { - const DecorationTooltip({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const Tooltip( - preferBelow: false, - padding: EdgeInsets.all(5), - margin: EdgeInsets.all(2), - message: "宝塔镇河妖", - textStyle: TextStyle( - color: Colors.red, - shadows: [Shadow(color: Colors.white, - offset: Offset(1, 1))]), - decoration: BoxDecoration(boxShadow: [ - BoxShadow( - color: Colors.orangeAccent, - offset: Offset(1, 1), blurRadius: 8) - ]), - child: Icon(Icons.info_outline)); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_de_DE.json deleted file mode 100644 index 8e819173a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "Tween-Animation Builder", - "info": "Verwendet den Tween-Interpolator, um Animationen für verwandte Eigenschaften zu erstellen, und führt über den Builder lokale Builds durch, um den Aktualisierungsbereich zu reduzieren. Benötigt keinen benutzerdefinierten Animator, kann Animationsdauer, Kurve und Endrückruf angeben.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TweenAnimationBuilder Anwendungsbeispiel", - "desc": [ - "【tween】 : *Interpolator 【Tween】", - "【duration】 : *Dauer 【Duration】", - "【builder】 : *Builder 【ValueWidgetBuilder】", - "【curve】 : Animationskurve 【Curve】", - "【onEnd】 : Endrückruf 【VoidCallback】", - "【child】 : Kindkomponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_en_US.json deleted file mode 100644 index 0a142ac15..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "Tween Animation Builder", - "info": "Animates related properties through the Tween, and performs partial builds through the builder to reduce the refresh scope. No need for custom animators, you can specify animation duration, curve, and end callback.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TweenAnimationBuilder Usage Example", - "desc": [ - "【tween】 : *Tween 【Tween】", - "【duration】 : *Duration 【Duration】", - "【builder】 : *Builder 【ValueWidgetBuilder】", - "【curve】 : Animation Curve 【Curve】", - "【onEnd】 : End Callback 【VoidCallback】", - "【child】 : Child Widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_es_ES.json deleted file mode 100644 index ea4cb852d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "Constructor de animación de interpolación", - "info": "Realiza una animación de interpolación en las propiedades relacionadas a través del interpolador Tween, y construye parcialmente a través del builder para reducir el alcance de la actualización. No es necesario un animador personalizado, se puede especificar la duración de la animación, la curva y la devolución de llamada al finalizar.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Ejemplo de uso de TweenAnimationBuilder", - "desc": [ - "【tween】 : *interpolador 【Tween】", - "【duration】 : *duración 【Duration】", - "【builder】 : *constructor 【ValueWidgetBuilder】", - "【curve】 : curva de animación 【Curve】", - "【onEnd】 : devolución de llamada al finalizar 【VoidCallback】", - "【child】 : componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_fr_FR.json deleted file mode 100644 index 4fb052634..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "Constructeur d'animation par interpolation", - "info": "Utilise un interpolateur Tween pour animer les propriétés associées, et utilise un builder pour une construction partielle, réduisant ainsi la portée du rafraîchissement. Ne nécessite pas de personnalisation de l'animateur, permet de spécifier la durée de l'animation, la courbe, et le rappel de fin.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Exemple d'utilisation de TweenAnimationBuilder", - "desc": [ - "【tween】 : *interpolateur 【Tween】", - "【duration】 : *durée 【Duration】", - "【builder】 : *constructeur 【ValueWidgetBuilder】", - "【curve】 : courbe d'animation 【Curve】", - "【onEnd】 : rappel de fin 【VoidCallback】", - "【child】 : composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_it_IT.json deleted file mode 100644 index cefd525af..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "Costruttore di animazione a interpolazione", - "info": "Esegue un'animazione a interpolazione sulle proprietà correlate tramite l'interpolatore Tween, costruendo localmente tramite il builder per ridurre l'ambito di aggiornamento. Non è necessario un animatore personalizzato, è possibile specificare la durata dell'animazione, la curva e il callback di fine.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Esempio di utilizzo di TweenAnimationBuilder", - "desc": [ - "【tween】 : *interpolatore 【Tween】", - "【duration】 : *durata 【Duration】", - "【builder】 : *costruttore 【ValueWidgetBuilder】", - "【curve】 : curva di animazione 【Curve】", - "【onEnd】 : callback di fine 【VoidCallback】", - "【child】 : componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ja_JP.json deleted file mode 100644 index 487e035dc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "トゥイーンアニメーションビルダー", - "info": "トゥイーンを使用して関連するプロパティのアニメーションを行い、ビルダーを使用して部分的な構築を行い、更新範囲を減らします。カスタムアニメーターは不要で、アニメーションの時間、曲線、終了コールバックを指定できます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TweenAnimationBuilder 使用例", - "desc": [ - "【tween】 : *トゥイーン 【Tween】", - "【duration】 : *時間 【Duration】", - "【builder】 : *ビルダー 【ValueWidgetBuilder】", - "【curve】 : アニメーション曲線 【Curve】", - "【onEnd】 : 終了コールバック 【VoidCallback】", - "【child】 : 子ウィジェット 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ko_KR.json deleted file mode 100644 index 29440f4a7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "트윈 애니메이션 빌더", - "info": "트윈을 사용하여 관련 속성에 대한 애니메이션을 생성하고, 빌더를 통해 부분적으로 빌드하여 새로고침 범위를 줄입니다. 사용자 정의 애니메이터가 필요 없으며, 애니메이션 지속 시간, 곡선, 종료 콜백을 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TweenAnimationBuilder 사용 예제", - "desc": [ - "【tween】 : *트윈 【Tween】", - "【duration】 : *지속 시간 【Duration】", - "【builder】 : *빌더 【ValueWidgetBuilder】", - "【curve】 : 애니메이션 곡선 【Curve】", - "【onEnd】 : 종료 콜백 【VoidCallback】", - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_pt_PT.json deleted file mode 100644 index a459fbfdf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "Construtor de Animação de Interpolação", - "info": "Realiza animações de interpolação nas propriedades relacionadas através do interpolador Tween, utilizando o builder para construir localmente e reduzir o escopo de atualização. Não é necessário personalizar o animador, podendo especificar a duração da animação, a curva e o callback de término.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Exemplo de uso do TweenAnimationBuilder", - "desc": [ - "【tween】 : *Interpolador 【Tween】", - "【duration】 : *Duração 【Duration】", - "【builder】 : *Construtor 【ValueWidgetBuilder】", - "【curve】 : Curva de animação 【Curve】", - "【onEnd】 : Callback de término 【VoidCallback】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ru_RU.json deleted file mode 100644 index f9fac07e9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "Построитель анимации с интерполяцией", - "info": "Анимация свойств через интерполятор Tween, локальное построение через builder для уменьшения области обновления. Не требует пользовательского аниматора, позволяет указать длительность анимации, кривую и обратный вызов по завершению.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Пример использования TweenAnimationBuilder", - "desc": [ - "【tween】 : *интерполятор 【Tween】", - "【duration】 : *длительность 【Duration】", - "【builder】 : *построитель 【ValueWidgetBuilder】", - "【curve】 : кривая анимации 【Curve】", - "【onEnd】 : обратный вызов по завершению 【VoidCallback】", - "【child】 : дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_zh-CN.json deleted file mode 100644 index 9631b0ae4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "渐变动画构造器", - "info": "通过渐变器 Tween 对相关属性进行渐变动画,通过 builder 进行局部构建,减少刷新范围。不需要自定义动画器,可指定动画时长、曲线、结束回调。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TweenAnimationBuilder 使用案例", - "desc": [ - "【tween】 : *渐变器 【Tween】", - "【duration】 : *时长 【Duration】", - "【builder】 : *构造器 【ValueWidgetBuilder】", - "【curve】 : 动画曲线 【Curve】", - "【onEnd】 : 结束回调 【VoidCallback】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/node1_base.dart deleted file mode 100644 index 384ed3cd7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/node1_base.dart +++ /dev/null @@ -1,58 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class TweenAnimationBuilderDemo extends StatefulWidget { - const TweenAnimationBuilderDemo({Key? key}) : super(key: key); - - @override - State createState() => - _TweenAnimationBuilderDemoState(); -} - -class _TweenAnimationBuilderDemoState extends State { - List get colors => const [ - Colors.red, - Colors.orange, - Colors.yellow, - Colors.green, - Colors.blue, - Colors.indigo, - Colors.purple - ]; - - int _activeIndex = 0; - - Color get begin => colors[_activeIndex % colors.length]; - - Color get end => colors[(_activeIndex + 1) % colors.length]; - - void nextColor(){ - _activeIndex++; - setState(() {}); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: nextColor, - child: TweenAnimationBuilder( - tween: ColorTween(begin: begin, end: end), - duration: const Duration(milliseconds: 800), - builder: (BuildContext context, Color? color, Widget? child) { - return Container( - width: 40, - height: 40, - decoration: BoxDecoration( - color: color, borderRadius: BorderRadius.circular(5)), - child: child, - ); - }, - child: const Icon(Icons.android_outlined, color: Colors.white), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_de_DE.json deleted file mode 100644 index 545a79734..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "Verlauf rückgängig machen", - "info": "Empfängt einen ValueNotifier, um den Wert zu überwachen und bietet die Funktionen Rückgängig/Wiederholen für diesen Wert; wird in der Quellcode der TextField-Komponente verwendet.", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Verwendung von UndoHistory in TextField", - "desc": [ - "In diesem Beispiel wird die Rückgängig/Wiederholen-Funktion von TextField über eine externe Schaltfläche gesteuert. Der Parameter undoController kann ein UndoHistoryController-Objekt übernehmen, um den eingegebenen Textinhalt zu steuern und zu beeinflussen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_en_US.json deleted file mode 100644 index c50f8921c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "Undo History", - "info": "Receives ValueNotifier to listen to the value, providing undo/redo functionality for that value; used in the source code of the TextField component.", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Using UndoHistory in TextField", - "desc": [ - "In this example, the undo/redo functionality of the TextField is controlled via an external button. The undoController parameter can be passed an UndoHistoryController object to control and influence the input text content." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_es_ES.json deleted file mode 100644 index f3138ef02..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "Historial de Deshacer", - "info": "Recibe un ValueNotifier para escuchar valores, proporcionando funcionalidad de deshacer/rehacer para ese valor; utilizado en el código fuente del componente TextField.", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso de UndoHistory en TextField", - "desc": [ - "En este caso, se controla la funcionalidad de deshacer/rehacer del TextField mediante un botón externo. El parámetro undoController puede recibir un objeto UndoHistoryController, utilizado para controlar y afectar el contenido del texto ingresado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_fr_FR.json deleted file mode 100644 index a20fcbcad..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "Historique d'annulation", - "info": "Reçoit une valeur observable ValueNotifier et fournit des fonctionnalités d'annulation/réexécution pour cette valeur ; utilisé dans le code source du composant TextField.", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation d'UndoHistory dans TextField", - "desc": [ - "Dans cet exemple, un bouton externe est utilisé pour contrôler les fonctionnalités d'annulation/réexécution de TextField. Le paramètre undoController peut recevoir un objet UndoHistoryController pour contrôler et influencer le contenu du texte saisi." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_it_IT.json deleted file mode 100644 index 563747f8d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "Cronologia Annulla", - "info": "Riceve un ValueNotifier per valori osservabili, fornendo funzionalità di annullamento/ripetizione per tale valore; utilizzato nel codice sorgente del componente TextField.", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilizzo di UndoHistory in TextField", - "desc": [ - "In questo caso, attraverso un pulsante esterno, si controlla la funzione di annullamento/ripetizione di TextField. Il parametro undoController può essere passato come oggetto UndoHistoryController, utilizzato per controllare e influenzare il contenuto del testo inserito." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ja_JP.json deleted file mode 100644 index 628a2393a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "取り消し履歴", - "info": "ValueNotifierの監視可能な値を受け取り、その値に取り消し/やり直し機能を提供します;TextFieldコンポーネントのソースコードで使用されています。", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "TextFieldでのUndoHistoryの使用", - "desc": [ - "このケースでは、外部ボタンを使用してTextFieldの取り消し/やり直し機能を制御します。undoControllerパラメータにUndoHistoryControllerオブジェクトを渡すことができ、入力テキストの内容を制御および影響を与えるために使用されます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ko_KR.json deleted file mode 100644 index f85244782..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "실행 취소 기록", - "info": "ValueNotifier를 통해 값을 감지하고, 해당 값에 대해 실행 취소/다시 실행 기능을 제공합니다; TextField 컴포넌트 소스 코드에서 사용됩니다.", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "TextField에서 UndoHistory 사용", - "desc": [ - "이 예제에서는 외부 버튼을 통해 TextField의 실행 취소/다시 실행 기능을 제어합니다. undoController 매개변수에 UndoHistoryController 객체를 전달하여 입력 텍스트 내용을 제어하고 영향을 줄 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_pt_PT.json deleted file mode 100644 index c1ee62f1d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "Histórico de Desfazer", - "info": "Recebe um ValueNotifier para monitorar valores, fornecendo funcionalidades de desfazer/refazer para esse valor; utilizado no código-fonte do componente TextField.", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Usando UndoHistory no TextField", - "desc": [ - "Neste exemplo, um botão externo é usado para controlar as funcionalidades de desfazer/refazer do TextField. O parâmetro undoController pode receber um objeto UndoHistoryController, que é usado para controlar e influenciar o conteúdo do texto inserido." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ru_RU.json deleted file mode 100644 index e1aeecc19..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "История отмены", - "info": "Принимает ValueNotifier для отслеживания значений и предоставляет функциональность отмены/повтора для этого значения; используется в исходном коде компонента TextField.", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Использование UndoHistory в TextField", - "desc": [ - "В этом примере с помощью внешней кнопки управляется функциональность отмены/повтора в TextField. Параметр undoController может принимать объект UndoHistoryController для управления и влияния на вводимый текст." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_zh-CN.json deleted file mode 100644 index c2ae9df96..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "撤销历史", - "info": "接收 ValueNotifier 可监听值,为该值提供撤销/重做功能;被用于 TextField 组件源码中。", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "TextField 中使用 UndoHistory", - "desc": [ - "该案例中通过外界按钮,进行控制 TextField 的撤销/重做功能。其中 undoController 参数可以传入 UndoHistoryController 对象,用于控制并影响输入文本内容。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/node1.dart deleted file mode 100644 index 85a654a46..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/node1.dart +++ /dev/null @@ -1,108 +0,0 @@ -import 'package:flutter/material.dart'; - -class UndoHistoryDemo1 extends StatefulWidget { - const UndoHistoryDemo1({super.key}); - - @override - State createState() => _UndoHistoryDemo1State(); -} - -class _UndoHistoryDemo1State extends State { - final UndoHistoryController _undoController = UndoHistoryController(); - - @override - void dispose() { - _undoController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - _buildToolBar(), - const Divider(height: 0.5), - Expanded( - child: TextField( - undoController: _undoController, - expands: true, - maxLines: null, - minLines: null, - decoration: InputDecoration( - filled: true, - hintText: '请输入...', - fillColor: Colors.white, - hoverColor: Colors.transparent, - border: InputBorder.none, - ), - )) - ], - ), - ); - } - - Widget _buildToolBar() { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4), - child: ValueListenableBuilder( - valueListenable: _undoController, - builder: (BuildContext context, UndoHistoryValue value, Widget? child) { - return Wrap( - spacing: 4, - children: [ - _IconAction( - icon: Icons.undo, - onTap: value.canUndo ? _undoController.undo : null), - _IconAction( - icon: Icons.redo, - onTap: value.canRedo ? _undoController.redo : null), - ], - ); - }, - ), - ); - } -} - -class _IconAction extends StatefulWidget { - final IconData icon; - final VoidCallback? onTap; - - const _IconAction({super.key, required this.icon, this.onTap}); - - @override - State<_IconAction> createState() => _IconActionState(); -} - -class _IconActionState extends State<_IconAction> { - bool _hover = false; - - bool get enable => widget.onTap != null; - - Color? get color => (_hover && enable) ? Colors.grey.withOpacity(0.2) : null; - - @override - Widget build(BuildContext context) { - MouseCursor cursor = (_hover && enable) ? SystemMouseCursors.click : SystemMouseCursors.basic; - return MouseRegion( - cursor: cursor , - onExit: (_) => setState(() => _hover = false), - onEnter: (_) => setState(() => _hover = true), - child: GestureDetector( - onTap: widget.onTap, - child: Container( - decoration: BoxDecoration( - color: color, borderRadius: BorderRadius.circular(4)), - padding: const EdgeInsets.all(4.0), - child: Icon( - widget.icon, - size: 20, - color: enable ? null : Colors.grey, - )), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_de_DE.json deleted file mode 100644 index fd18752fc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "Einzigartige Komponente", - "info": "Abstrakte Klasse, muss einen GlobalKey zur Identifikation bereitstellen. Diese Art von Komponente wird nur als eine Instanz inflated und hat zu jedem Zeitpunkt nur einen Zustand, der über die currentState-Eigenschaft abgerufen werden kann.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in UniqueWidget", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_en_US.json deleted file mode 100644 index 4e81b96f8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "Unique Component", - "info": "Abstract class, must provide a GlobalKey for identification. This type of component will only inflate one instance and will only have one state at any given time. The state can be obtained through the currentState property.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to UniqueWidget", - "desc": [ - "【child】 : Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_es_ES.json deleted file mode 100644 index 9a4178f9c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "Componente Único", - "info": "Clase abstracta, debe proporcionar una GlobalKey para la identificación. Este tipo de componente solo se inflará en una instancia y solo tendrá un estado en un momento dado. El estado se puede obtener a través de la propiedad currentState.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a UniqueWidget", - "desc": [ - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_fr_FR.json deleted file mode 100644 index 276b12f71..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "Widget Unique", - "info": "Classe abstraite, doit fournir une GlobalKey pour l'identification. Ce type de widget ne sera instancié qu'une seule fois et aura un seul état à la fois. L'état peut être obtenu via la propriété currentState.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à UniqueWidget", - "desc": [ - "【child】 : Widget enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_it_IT.json deleted file mode 100644 index 705120b6c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "Componente Unico", - "info": "Classe astratta, deve fornire una GlobalKey per l'identificazione. Questo tipo di componente verrà inflato solo una volta e avrà solo uno stato alla volta. Lo stato può essere ottenuto tramite la proprietà currentState.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a UniqueWidget", - "desc": [ - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ja_JP.json deleted file mode 100644 index 956984b07..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "ユニークウィジェット", - "info": "抽象クラス、GlobalKeyを提供して識別する必要があります。このタイプのウィジェットは1つのインスタンスのみがinflatedされ、同時に1つの状態のみを持ちます。currentStateプロパティを通じて状態を取得できます。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "UniqueWidget 紹介", - "desc": [ - "【child】 : 子ウィジェット 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ko_KR.json deleted file mode 100644 index 5b57d4630..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "유니크 위젯", - "info": "추상 클래스, GlobalKey를 제공하여 식별해야 합니다. 이 유형의 위젯은 하나의 인스턴스만 inflated되며, 동시에 하나의 상태만 가질 수 있습니다. currentState 속성을 통해 상태를 가져올 수 있습니다.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "UniqueWidget 소개", - "desc": [ - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_pt_PT.json deleted file mode 100644 index 1e73e8cbc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "Componente Único", - "info": "Classe abstrata, deve fornecer uma GlobalKey para identificação, este tipo de componente só será inflated uma instância, e terá apenas um estado de cada vez, o estado pode ser obtido através da propriedade currentState.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao UniqueWidget", - "desc": [ - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ru_RU.json deleted file mode 100644 index 77b6eb84e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "Уникальный компонент", - "info": "Абстрактный класс, должен предоставлять GlobalKey для идентификации. Этот тип компонента будет inflated только один экземпляр, и в любой момент времени будет только одно состояние, которое можно получить через свойство currentState.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в UniqueWidget", - "desc": [ - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_zh-CN.json deleted file mode 100644 index 362d6b536..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "唯一组件", - "info": "抽象类,必须提供一个 GlobalKey 进行身份标识,该类型组件只会 inflated 一个实例,同一时刻也只会有一个状态,可以通过 currentState 属性获取状态。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "UniqueWidget 介绍", - "desc": [ - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/node1_base.dart deleted file mode 100644 index e31fce224..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/node1_base.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class UniqueWidgetDemo extends StatelessWidget { - const UniqueWidgetDemo({Key? key}) : super(key: key); - - final String info = - '该类是抽象类,在 Flutter 框架层没有实现类,也没有其他源码使用到它,说明它基本上没啥用。' - '本质上它也非常简单,就是为组件添加一个 GlobalKey,在 Element#inflateWidget 时,会校验组件是否有 GlobalKey ,' - '如果有,则根据 key 找到之前的对应的 Element,就不会触发 Widget#createElement。为了方便获取 State,该类暴露 currentState 属性。' - '你瞄一下源码,就能看到这个组件是多么简单,简单到可以自己完成,以至于没什么大用。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_de_DE.json deleted file mode 100644 index 98e606980..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "Wertüberwachungs-Builder", - "info": "Kann einen Wert überwachen und bei Änderungen die Benutzeroberfläche über den Builder-Callback neu aufbauen, wodurch die Verwendung von setState zur Aktualisierung vermieden wird.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ValueListenableBuilder", - "desc": [ - "【builder】: Komponenten-Builder 【ValueWidgetBuilder】", - "【valueListenable】: Überwachungswert 【ValueListenable】", - "【child】: Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_en_US.json deleted file mode 100644 index 8230410da..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "Value Listener Builder", - "info": "Can listen to a value, and when it changes, the interface can be rebuilt through the builder callback, avoiding the use of setState for refreshing.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ValueListenableBuilder", - "desc": [ - "【builder】: Component builder 【ValueWidgetBuilder】", - "【valueListenable】: Listened value 【ValueListenable】", - "【child】: Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_es_ES.json deleted file mode 100644 index 6597d7f72..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "Constructor de Escucha de Valor", - "info": "Puede escuchar un valor y, cuando cambia, reconstruir la interfaz a través de la devolución de llamada del constructor, evitando el uso de setState para actualizar.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de ValueListenableBuilder", - "desc": [ - "【builder】: Constructor de componentes 【ValueWidgetBuilder】", - "【valueListenable】: Valor de escucha 【ValueListenable】", - "【child】: Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_fr_FR.json deleted file mode 100644 index 44726e9b9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "Constructeur de valeur écoutable", - "info": "Peut écouter une valeur, et lorsque celle-ci change, il peut reconstruire l'interface via un rappel builder, évitant ainsi l'utilisation de setState pour rafraîchir.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ValueListenableBuilder", - "desc": [ - "【builder】: Constructeur de composant 【ValueWidgetBuilder】", - "【valueListenable】: Valeur écoutée 【ValueListenable】", - "【child】: Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_it_IT.json deleted file mode 100644 index 4a4785b78..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "Costruttore di ascolto del valore", - "info": "Può ascoltare un valore e, quando cambia, ricostruire l'interfaccia attraverso il callback del builder, evitando l'uso di setState per aggiornare.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ValueListenableBuilder", - "desc": [ - "【builder】: Costruttore del componente 【ValueWidgetBuilder】", - "【valueListenable】: Valore di ascolto 【ValueListenable】", - "【child】: Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ja_JP.json deleted file mode 100644 index 21e7ccf6a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "値リスナービルダー", - "info": "値を監視し、その値が変化したときにbuilderコールバックを通じてUIを再構築し、setStateを使用せずに更新を避けることができます。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ValueListenableBuilderの基本使用", - "desc": [ - "【builder】: コンポーネントビルダー 【ValueWidgetBuilder】", - "【valueListenable】: 監視値 【ValueListenable】", - "【child】: 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ko_KR.json deleted file mode 100644 index b8e33579a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "값 리스너 빌더", - "info": "값을 리스닝하고, 값이 변경될 때 builder 콜백을 통해 UI를 재구성할 수 있으며, setState를 사용하지 않고도 화면을 갱신할 수 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ValueListenableBuilder 기본 사용법", - "desc": [ - "【builder】: 컴포넌트 빌더 【ValueWidgetBuilder】", - "【valueListenable】: 리스닝 값 【ValueListenable】", - "【child】: 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_pt_PT.json deleted file mode 100644 index 2dfd9ab6a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "Construtor de Valor Escutável", - "info": "Pode escutar um valor e, quando ele muda, reconstruir a interface através do callback do builder, evitando o uso de setState para atualizar.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ValueListenableBuilder", - "desc": [ - "【builder】: Construtor de Componentes 【ValueWidgetBuilder】", - "【valueListenable】: Valor Escutável 【ValueListenable】", - "【child】: Componente Filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ru_RU.json deleted file mode 100644 index f014ac90d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "Слушатель значений", - "info": "Может отслеживать значение и перестраивать интерфейс через обратный вызов builder при его изменении, избегая использования setState для обновления.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ValueListenableBuilder", - "desc": [ - "【builder】: Конструктор компонента 【ValueWidgetBuilder】", - "【valueListenable】: Отслеживаемое значение 【ValueListenable】", - "【child】: Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_zh-CN.json deleted file mode 100644 index 190489a8f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "监听值构造器", - "info": "可以监听一个值,当其变化时通过builder回调能重建界面,避免使用setState刷新。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ValueListenableBuilder基本使用", - "desc": [ - "【builder】: 组件构造器 【ValueWidgetBuilder】", - "【valueListenable】: 监听值 【ValueListenable】", - "【child】: 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/node1_base.dart deleted file mode 100644 index 0d81ba906..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/node1_base.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/21 -/// contact me by email 1981462002@qq.com - -final ValueNotifier _counter = ValueNotifier(0); - -class ValueListenableBuilderDemo extends StatelessWidget { - const ValueListenableBuilderDemo({super.key}); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Scaffold( - appBar: AppBar(title: const Text("ValueListenableBuilder")), - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Text('You have pushed the button this many times:'), - ValueListenableBuilder( - builder: _buildWithValue, - valueListenable: _counter, - child: const Text('I am Child!'), - ) - ], - ), - ), - floatingActionButton: FloatingActionButton( - child: const Icon(Icons.plus_one), - onPressed: () => _counter.value += 1, - ), - ), - ); - } - - Widget _buildWithValue(BuildContext context, int value, Widget? child) { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Text('$value'), - child ?? const SizedBox.shrink(), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_de_DE.json deleted file mode 100644 index a428050a4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "Widget-Inspektor", - "info": "Diese Komponente ermöglicht es Ihnen, die Hierarchie der Unterkomponenten bequem anzuzeigen und ist eine der Funktionen des Flutter Inspector-Plugins.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung des WidgetInspectors", - "desc": [ - "【child】 : Unterkomponente 【Widget】", - "【selectButtonBuilder】: *Auswahlschalter-Builder 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_en_US.json deleted file mode 100644 index d060acd53..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "Widget Inspector", - "info": "This component allows you to easily view the hierarchy of child components and is one of the features of the Flutter Inspector plugin.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of WidgetInspector", - "desc": [ - "【child】 : Child component 【Widget】", - "【selectButtonBuilder】: *Select button builder 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_es_ES.json deleted file mode 100644 index 9995d77f7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "Inspector de Componentes", - "info": "Este componente te permite ver fácilmente la jerarquía de los componentes hijos, es una de las funciones del plugin Flutter Inspector.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de WidgetInspector", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【selectButtonBuilder】: *Constructor del botón de selección 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_fr_FR.json deleted file mode 100644 index 16bdc06f0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "Inspecteur de widgets", - "info": "Ce composant vous permet de visualiser facilement la structure hiérarchique des composants enfants, c'est l'une des fonctionnalités de l'extension Flutter Inspector.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de WidgetInspector", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【selectButtonBuilder】: *Constructeur de bouton de sélection 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_it_IT.json deleted file mode 100644 index 267ae04e7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "Ispezione dei componenti", - "info": "Questo componente ti permette di visualizzare facilmente la struttura gerarchica dei componenti figli, è una delle funzionalità del plugin Flutter Inspector.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di WidgetInspector", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【selectButtonBuilder】: *Costruttore del pulsante di selezione 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ja_JP.json deleted file mode 100644 index 90ee326d8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "ウィジェットインスペクター", - "info": "このコンポーネントは、子コンポーネントの階層構造を簡単に確認できるようにするもので、Flutter Inspectorプラグインの機能の一つです。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WidgetInspectorの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【selectButtonBuilder】: *選択ボタンビルダー 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ko_KR.json deleted file mode 100644 index d11114b2f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "위젯 인스펙터", - "info": "이 컴포넌트는 하위 컴포넌트 계층 구조를 쉽게 확인할 수 있게 해주며, Flutter Inspector 플러그인의 기능 중 하나입니다.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WidgetInspector 기본 사용법", - "desc": [ - "【child】 : 하위 컴포넌트 【Widget】", - "【selectButtonBuilder】: *선택 버튼 생성기 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_pt_PT.json deleted file mode 100644 index ec01c1fe2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "Inspetor de Componentes", - "info": "Este componente permite visualizar facilmente a estrutura hierárquica dos componentes filhos, sendo uma das funcionalidades do plugin Flutter Inspector.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do WidgetInspector", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【selectButtonBuilder】: *Construtor do botão de seleção 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ru_RU.json deleted file mode 100644 index e4fce6368..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "Инспектор виджетов", - "info": "Этот компонент позволяет вам легко просматривать иерархию дочерних компонентов, что является одной из функций плагина Flutter Inspector.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование WidgetInspector", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【selectButtonBuilder】: *Конструктор кнопки выбора 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_zh-CN.json deleted file mode 100644 index 2a829b298..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "组件检查器", - "info": "该组件可以让你很方便地查看子组件层级结构,是Flutter Inspector插件的功能之一。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WidgetInspector基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【selectButtonBuilder】: *选择按钮构造器 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/node1_base.dart deleted file mode 100644 index afb2ff41e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/node1_base.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/8/16 -/// contact me by email 1981462002@qq.com - -class WidgetInspectorDemo extends StatelessWidget { - const WidgetInspectorDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: WidgetInspector( - child: const HomePage(), - tapBehaviorButtonBuilder: _tapBehaviorButtonBuilder, - exitWidgetSelectionButtonBuilder: null, - moveExitWidgetSelectionButtonBuilder: _selectButtonBuilder, - ), - ); - } - - Widget _tapBehaviorButtonBuilder( - BuildContext context, { - required VoidCallback onPressed, - required bool selectionOnTapEnabled, - required String semanticsLabel, - }) { - return Container(); - } - - Widget _selectButtonBuilder(BuildContext context, - {required VoidCallback onPressed, - required String semanticsLabel, - bool? usesDefaultAlignment}) { - return Container(); - } -} - -class HomePage extends StatefulWidget { - const HomePage({Key? key}) : super(key: key); - - @override - _HomePageState createState() => _HomePageState(); -} - -class _HomePageState extends State { - int _count = 0; - - @override - Widget build(BuildContext context) { - return Scaffold( - body: Container( - alignment: const Alignment(0, 0.7), - child: Text( - '你点击了$_count次', - style: const TextStyle(fontSize: 18, color: Colors.blue), - ), - ), - floatingActionButton: FloatingActionButton( - child: const Icon(Icons.add), - onPressed: () { - setState(() { - _count++; - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_de_DE.json deleted file mode 100644 index 0386443e1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "Widget-Anwendung", - "info": "Sammelt die Komponenten, die eine Anwendung benötigt, wie Routing, Sprache, einige Debug-Schalter usw. Es ist auch die Kernkomponente zur Implementierung von MaterialApp und CupertinoApp.", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von WidgetsApp", - "desc": [ - "【pageRouteBuilder】 : *Routing-Konstruktor 【PageRouteFactory】", - "【color】: *Farbe 【Color】", - "【debugShowWidgetInspector】: Ob der Widget-Inspektor angezeigt werden soll 【bool】", - "Andere Eigenschaften sind im Wesentlichen dieselben wie bei MaterialApp, siehe dort für weitere Details." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_en_US.json deleted file mode 100644 index 66c99748a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "Widget Application", - "info": "Collects the components needed for an application, such as routing, language, some debugging switches, etc. It is also the core component for implementing MaterialApp and CupertinoApp.", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of WidgetsApp", - "desc": [ - "【pageRouteBuilder】 : *Route Builder 【PageRouteFactory】", - "【color】: *Color 【Color】", - "【debugShowWidgetInspector】: Whether to display the widget inspector 【bool】", - "Other properties are basically the same as MaterialApp, see details there." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_es_ES.json deleted file mode 100644 index cd9836e8e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "Aplicación de Componentes", - "info": "Agrupa los componentes necesarios para una aplicación, como el enrutamiento, el idioma, algunos interruptores de depuración, etc. También es el componente central para implementar MaterialApp y CupertinoApp.", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de WidgetsApp", - "desc": [ - "【pageRouteBuilder】 : *Constructor de rutas 【PageRouteFactory】", - "【color】: *Color 【Color】", - "【debugShowWidgetInspector】: Mostrar el inspector de componentes z 【bool】", - "Otras propiedades son básicamente las mismas que MaterialApp, consulte allí para más detalles." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_fr_FR.json deleted file mode 100644 index 408c12203..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "Application de widgets", - "info": "Rassemble les composants nécessaires pour une application, tels que le routage, la langue, certains commutateurs de débogage, etc. C'est également le composant central pour la mise en œuvre de MaterialApp et CupertinoApp.", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de WidgetsApp", - "desc": [ - "【pageRouteBuilder】 : *constructeur de route 【PageRouteFactory】", - "【color】: *couleur 【Color】", - "【debugShowWidgetInspector】: afficher l'inspecteur de widgets 【bool】", - "Les autres propriétés sont essentiellement les mêmes que MaterialApp, voir cela pour plus de détails." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_it_IT.json deleted file mode 100644 index f5bc7c8f3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "Applicazione Componenti", - "info": "Raccoglie i componenti necessari per un'applicazione, come il routing, la lingua, alcuni interruttori di debug, ecc. È anche il componente centrale per implementare MaterialApp e CupertinoApp.", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di WidgetsApp", - "desc": [ - "【pageRouteBuilder】 : *Costruttore di routing 【PageRouteFactory】", - "【color】: *Colore 【Color】", - "【debugShowWidgetInspector】: Mostra l'ispettore dei componenti 【bool】", - "Le altre proprietà sono fondamentalmente le stesse di MaterialApp, vedi dettagli." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ja_JP.json deleted file mode 100644 index dca35af44..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "ウィジェットアプリ", - "info": "アプリケーションに必要な部品、例えばルーティング、言語、いくつかのデバッグスイッチなどを集めたものです。また、MaterialAppとCupertinoAppを実現するためのコアコンポーネントでもあります。", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WidgetsApp基本使用", - "desc": [ - "【pageRouteBuilder】 : *ルーティングビルダー 【PageRouteFactory】", - "【color】: *色 【Color】", - "【debugShowWidgetInspector】: ウィジェットインスペクターを表示するかどうか 【bool】", - "その他の属性は基本的にMaterialAppと同じです。詳細はそちらをご覧ください。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ko_KR.json deleted file mode 100644 index 709d0d738..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "위젯 앱", - "info": "앱에 필요한 구성 요소, 예를 들어 라우팅, 언어, 일부 디버그 스위치 등을 모아놓은 것입니다. 또한 MaterialApp과 CupertinoApp을 구현하는 핵심 구성 요소입니다.", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WidgetsApp 기본 사용법", - "desc": [ - "【pageRouteBuilder】 : *라우트 빌더 【PageRouteFactory】", - "【color】: *색상 【Color】", - "【debugShowWidgetInspector】: 위젯 인스펙터 표시 여부 【bool】", - "기타 속성은 기본적으로 MaterialApp과 동일하므로 자세한 내용은 해당 문서를 참조하세요." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_pt_PT.json deleted file mode 100644 index 0d9c10318..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "Aplicação de Componentes", - "info": "Agrega os componentes necessários para uma aplicação, como roteamento, idioma, alguns interruptores de depuração, etc. Também é o componente central para implementar MaterialApp e CupertinoApp.", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do WidgetsApp", - "desc": [ - "【pageRouteBuilder】 : *Construtor de Rota 【PageRouteFactory】", - "【color】: *Cor 【Color】", - "【debugShowWidgetInspector】: Mostrar o inspetor de componentes 【bool】", - "Outras propriedades são basicamente as mesmas que MaterialApp, consulte para mais detalhes." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ru_RU.json deleted file mode 100644 index b72df5d01..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "Приложение виджетов", - "info": "Собирает компоненты, необходимые для приложения, такие как маршрутизация, язык, некоторые отладочные переключатели и т.д. Также является основным компонентом для реализации MaterialApp и CupertinoApp.", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование WidgetsApp", - "desc": [ - "【pageRouteBuilder】 : *Конструктор маршрутов 【PageRouteFactory】", - "【color】: *Цвет 【Color】", - "【debugShowWidgetInspector】: Показывать ли инспектор виджетов 【bool】", - "Другие свойства в основном совпадают с MaterialApp, подробнее см. там." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_zh-CN.json deleted file mode 100644 index 6c4c0011a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "组件应用", - "info": "集合一个应用程序需要的部件,如路由、语言、一些调试开关等。也是实现MaterialApp和CupertinoApp的核心组件。", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WidgetsApp基本使用", - "desc": [ - "【pageRouteBuilder】 : *路由构造器 【PageRouteFactory】", - "【color】: *颜色 【Color】", - "【debugShowWidgetInspector】: 是否显示z组件查看器 【bool】", - "其他属性基本上同MaterialApp,详见之。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/node1_base.dart deleted file mode 100644 index 608948c7b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/node1_base.dart +++ /dev/null @@ -1,123 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/8/16 -/// contact me by email 1981462002@qq.com - -class WidgetsAppDemo extends StatefulWidget { - const WidgetsAppDemo({Key? key}) : super(key: key); - - @override - _WidgetsAppDemoState createState() => _WidgetsAppDemoState(); -} - -class _WidgetsAppDemoState extends State { - bool _debugShowCheckedModeBanner = false; - bool _debugShowWidgetInspector = false; - bool _showPerformanceOverlay = false; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - _buildSwitchers(), - SizedBox( - height: 250, - child: WidgetsApp( - color: Colors.blue, - debugShowCheckedModeBanner: _debugShowCheckedModeBanner, - showPerformanceOverlay: _showPerformanceOverlay, - debugShowWidgetInspector: _debugShowWidgetInspector, - pageRouteBuilder: - (RouteSettings settings, WidgetBuilder builder) { - return MaterialPageRoute(settings: settings, builder: builder); - }, - home: const HomePage(), - ), - ), - ], - ); - } - - Widget _buildSwitchers() { - return DefaultTextStyle( - style: const TextStyle(color: Colors.blue), - child: Wrap( - spacing: 10, - children: [ - Column( - children: [ - Switch( - value: _showPerformanceOverlay, - onChanged: (v) { - setState(() { - _showPerformanceOverlay = v; - }); - }, - ), - const Text('性能浮层') - ], - ), - Column( - children: [ - Switch( - value: _debugShowCheckedModeBanner, - onChanged: (v) { - setState(() { - _debugShowCheckedModeBanner = v; - }); - }, - ), - const Text('开启角标') - ], - ), - Column( - children: [ - Switch( - value: _debugShowWidgetInspector, - onChanged: (v) { - setState(() { - _debugShowWidgetInspector = v; - }); - }, - ), - const Text('检查器') - ], - ) - ], - ), - ); - } -} - -class HomePage extends StatefulWidget { - const HomePage({Key? key}) : super(key: key); - - @override - _HomePageState createState() => _HomePageState(); -} - -class _HomePageState extends State { - int _count = 0; - - @override - Widget build(BuildContext context) { - return Scaffold( - body: Container( - alignment: const Alignment(0, 0.7), - child: Text( - '你点击了$_count次', - style: const TextStyle(fontSize: 18, color: Colors.blue), - ), - ), - floatingActionButton: FloatingActionButton( - child: const Icon(Icons.add), - onPressed: () { - setState(() { - _count++; - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_de_DE.json deleted file mode 100644 index 90b0bf148..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "Rückkehrblockierung", - "info": "Wenn eine Oberfläche eine WillPopScope-Komponente enthält, wird beim Zurückkehren der Seite ein Callback ausgelöst, um zu entscheiden, ob zurückgekehrt werden soll. Kann für Szenarien verwendet werden, in denen ein erneutes Bestätigen des Verlassens erforderlich ist.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WillPopScope Verwendung", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onWillPop】 : Rückkehr-Callback 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_en_US.json deleted file mode 100644 index f1db277ef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "Return Intercept", - "info": "When a WillPopScope component is present in an interface, a callback is triggered when the page returns, determining whether to return. It can be used for scenarios requiring secondary confirmation before exiting.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WillPopScope Usage", - "desc": [ - "【child】: Child component 【Widget】", - "【onWillPop】: Return callback 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_es_ES.json deleted file mode 100644 index 64fbbb6fd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "Intercepción de retorno", - "info": "Cuando hay un componente WillPopScope en una interfaz, se activará una devolución de llamada al regresar de la página para decidir si se debe regresar. Se puede utilizar en escenarios de confirmación secundaria para salir.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de WillPopScope", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onWillPop】 : Devolución de llamada 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_fr_FR.json deleted file mode 100644 index 539be6bf9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "Interception de retour", - "info": "Lorsqu'un composant WillPopScope est présent dans une interface, un rappel est déclenché lors du retour à la page pour décider si le retour doit être effectué. Peut être utilisé pour des scénarios de confirmation de sortie.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de WillPopScope", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onWillPop】 : Rappel de retour 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_it_IT.json deleted file mode 100644 index 2ab9a79c4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "Intercettazione di ritorno", - "info": "Quando un'interfaccia contiene il componente WillPopScope, viene attivato un callback al momento del ritorno alla pagina, decidendo se tornare indietro. Può essere utilizzato per scenari di conferma di uscita secondaria.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di WillPopScope", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onWillPop】 : Callback di ritorno 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ja_JP.json deleted file mode 100644 index 9044470ae..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "戻り防止", - "info": "インターフェースにWillPopScopeコンポーネントがある場合、ページが戻るときにコールバックがトリガーされ、戻るかどうかを決定します。二次確認して退出するシナリオに使用できます。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WillPopScopeの使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onWillPop】 : 戻りコールバック 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ko_KR.json deleted file mode 100644 index 66971d92f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "뒤로 가기 차단", - "info": "인터페이스에 WillPopScope 컴포넌트가 있을 때, 페이지에서 뒤로 가기를 시도하면 콜백이 트리거되어 뒤로 갈지 여부를 결정합니다. 이는 두 번째로 종료를 확인하는 시나리오에 사용할 수 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WillPopScope 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【onWillPop】 : 뒤로 가기 콜백 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_pt_PT.json deleted file mode 100644 index e99f89658..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "Interceptar Retorno", - "info": "Quando há um componente WillPopScope numa interface, o callback é acionado ao retornar à página, decidindo se deve retornar. Pode ser usado em cenários de confirmação secundária de saída.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do WillPopScope", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onWillPop】 : Callback de retorno 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ru_RU.json deleted file mode 100644 index cf2110dfd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "Перехват возврата", - "info": "Когда на интерфейсе присутствует компонент WillPopScope, при возврате на страницу срабатывает обратный вызов, который определяет, следует ли возвращаться. Может использоваться для сценариев повторного подтверждения выхода.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование WillPopScope", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onWillPop】 : Обратный вызов возврата 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_zh-CN.json deleted file mode 100644 index bc4572ff9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "返回拦截", - "info": "当一个界面中有WillPopScope组件时,在页面返回时会触发回调,决定是否返回。可用于二次确认退出的场景。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WillPopScope使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onWillPop】 : 返回回调 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/node1_base.dart deleted file mode 100644 index 46b0e8270..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/node1_base.dart +++ /dev/null @@ -1,41 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomWillPopScope extends StatelessWidget { - const CustomWillPopScope({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return WillPopScope( - child: const BackButton(), - onWillPop: () => _willPop(context), - ); - } - - Future _willPop(context) async { - bool? exit = await showDialog( - context: context, - builder: (ctx) => AlertDialog( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10))), - title: const Text('提示'), - content: const Text('你确定要离开此页吗?'), - actions: [ - ElevatedButton( - onPressed: () => Navigator.of(ctx).pop(true), - child: const Text('确定'), - ), - ElevatedButton( - onPressed: () => Navigator.of(ctx).pop(false), - child: const Text('取消'), - ), - ], - ), - ); - print('====_willPop==:$exit========'); - - return exit??false; - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_de_DE.json deleted file mode 100644 index 6503e5cb3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "Jahresauswahl", - "info": "Komponente zur Auswahl des Jahres, sieht etwas bescheiden aus. Kann den auszuwählenden Datumsbereich, das ausgewählte Datum usw. festlegen und empfängt jedes Auswahlereignis", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von YearPicker", - "desc": [ - "【selectedDate】 : Ausgewähltes Datum 【DateTime】", - "【firstDate】 : Frühestes Datum 【DateTime】", - "【lastDate】 : Spätestes Datum 【DateTime】", - "【onChanged】 : Klick-Rückruf 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_en_US.json deleted file mode 100644 index 429a28280..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "Year Picker", - "info": "A component for selecting years, with a rather modest appearance. It allows specifying the date range for selection, selected dates, etc., and receives each selection event.", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of YearPicker", - "desc": [ - "【selectedDate】: Selected date 【DateTime】", - "【firstDate】: First date limit 【DateTime】", - "【lastDate】: Last date limit 【DateTime】", - "【onChanged】: Click callback 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_es_ES.json deleted file mode 100644 index 119ce9427..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "Selector de año", - "info": "Componente de selección de año, de apariencia modesta. Permite especificar el rango de fechas seleccionables, la fecha seleccionada, etc., y recibe cada evento de selección.", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de YearPicker", - "desc": [ - "【selectedDate】 : Fecha seleccionada 【DateTime】", - "【firstDate】 : Límite de la primera fecha 【DateTime】", - "【lastDate】 : Límite de la última fecha 【DateTime】", - "【onChanged】 : Callback al hacer clic 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_fr_FR.json deleted file mode 100644 index a4c3fa06c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "Sélecteur d'année", - "info": "Composant de sélection d'année, d'apparence modeste. Permet de spécifier la plage de dates sélectionnables, la date sélectionnée, etc., et reçoit chaque événement de sélection.", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de YearPicker", - "desc": [ - "【selectedDate】 : Date sélectionnée 【DateTime】", - "【firstDate】 : Limite de la première date 【DateTime】", - "【lastDate】 : Limite de la dernière date 【DateTime】", - "【onChanged】 : Rappel au clic 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_it_IT.json deleted file mode 100644 index 40602596b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "Selettore Anno", - "info": "Componente per la selezione dell'anno, dall'aspetto modesto. Consente di specificare l'intervallo di date selezionabili, la data selezionata, ecc., e riceve ogni evento di selezione.", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo Base di YearPicker", - "desc": [ - "【selectedDate】 : Data selezionata 【DateTime】", - "【firstDate】 : Limite data iniziale 【DateTime】", - "【lastDate】 : Limite data finale 【DateTime】", - "【onChanged】 : Callback al click 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ja_JP.json deleted file mode 100644 index e7ea91c28..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "年ピッカー", - "info": "年の選択コンポーネントで、見た目はやや地味です。選択可能な日付範囲や選択された日付などを指定でき、選択イベントを受け取ります。", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "YearPickerの基本使用", - "desc": [ - "【selectedDate】 : 選択された日付 【DateTime】", - "【firstDate】 : 最初の日付制限 【DateTime】", - "【lastDate】 : 最後の日付制限 【DateTime】", - "【onChanged】 : クリックコールバック 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ko_KR.json deleted file mode 100644 index 5c0dadd5e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "연도 선택기", - "info": "연도를 선택하는 컴포넌트로, 외관이 다소 허술합니다. 선택 가능한 날짜 범위, 선택된 날짜 등을 지정할 수 있으며, 선택 이벤트를 수신합니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "YearPicker 기본 사용법", - "desc": [ - "【selectedDate】 : 선택된 날짜 【DateTime】", - "【firstDate】 : 최초 날짜 제한 【DateTime】", - "【lastDate】 : 최종 날짜 제한 【DateTime】", - "【onChanged】 : 클릭 콜백 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_pt_PT.json deleted file mode 100644 index 939488739..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "Seletor de Ano", - "info": "Componente de seleção de ano, com uma aparência bastante simples. Permite especificar o intervalo de datas, a data selecionada, entre outros, e recebe eventos de seleção.", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do YearPicker", - "desc": [ - "【selectedDate】 : Data selecionada 【DateTime】", - "【firstDate】 : Limite da data mais antiga 【DateTime】", - "【lastDate】 : Limite da data mais recente 【DateTime】", - "【onChanged】 : Callback de clique 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ru_RU.json deleted file mode 100644 index 3b713079f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "Выбор года", - "info": "Компонент для выбора года, выглядит довольно скромно. Можно указать диапазон дат, выбранную дату и т.д., принимает каждое событие выбора", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование YearPicker", - "desc": [ - "【selectedDate】 : Выбранная дата 【DateTime】", - "【firstDate】 : Ограничение на самую раннюю дату 【DateTime】", - "【lastDate】 : Ограничение на самую позднюю дату 【DateTime】", - "【onChanged】 : Обратный вызов при нажатии 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_zh-CN.json deleted file mode 100644 index d83324632..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "年份选择器", - "info": "年份的选择组件,长相比较寒酸。可指定选择的日期范围、选中日期等,接收每份选中事件", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "YearPicker基本使用", - "desc": [ - "【selectedDate】 : 选中日期 【DateTime】", - "【firstDate】 : 最前日期限制 【DateTime】", - "【lastDate】 : 最后日期限制 【DateTime】", - "【onChanged】 : 点击回调 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/node1_base.dart deleted file mode 100644 index a3e83334d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/node1_base.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomYearPicker extends StatefulWidget { - const CustomYearPicker({Key? key}) : super(key: key); - - @override - _CustomYearPickerState createState() => _CustomYearPickerState(); -} - -class _CustomYearPickerState extends State { - DateTime _date = DateTime.now(); - - @override - Widget build(BuildContext context) { - return SizedBox( - height:150, - child: YearPicker( - selectedDate: _date, - onChanged: (date) => setState(() => _date = date), - firstDate: DateTime(2018), - lastDate: DateTime(2030), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_de_DE.json deleted file mode 100644 index 9bd458ba8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "Über Dialog", - "info": "Ein Dialogfeld zur Anwendungsbeschreibung, in dem das Anwendungssymbol, der Anwendungsname, die Anwendungsversionsnummer und andere Informationen sowie eine Liste von internen Unterkomponenten angegeben werden können. Durch Klicken auf die Schaltfläche auf der linken Seite gelangen Sie zur Zertifikatsseite.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AboutDialog", - "desc": [ - "【applicationIcon】 : Symbol oben links 【Widget】", - "【applicationVersion】 : Versionsnummer 【String】", - "【applicationName】 : Anwendungsname 【String】", - "【applicationLegalese】 : Anwendungsrecht 【String】", - "【children】 : Liste der Unterkomponenten 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_en_US.json deleted file mode 100644 index f21a172c2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "About Dialog", - "info": "The application's introduction dialog, which can specify the application icon, application name, application version number, and other information, as well as the internal sub-component list. Clicking the button on the left can navigate to the certificate page.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AboutDialog", - "desc": [ - "【applicationIcon】: Top-left icon 【Widget】", - "【applicationVersion】: Version number 【String】", - "【applicationName】: Application name 【String】", - "【applicationLegalese】: Application legal terms 【String】", - "【children】: Sub-component list 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_es_ES.json deleted file mode 100644 index ba17fb88a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "Diálogo Acerca de", - "info": "Diálogo de introducción de la aplicación, donde se pueden especificar el icono de la aplicación, el nombre de la aplicación, el número de versión de la aplicación y otra información, así como una lista de subcomponentes internos. Al hacer clic en el botón de la izquierda, se puede acceder a la página de certificados.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AboutDialog", - "desc": [ - "【applicationIcon】 : Icono superior izquierdo 【Widget】", - "【applicationVersion】 : Número de versión 【String】", - "【applicationName】 : Nombre de la aplicación 【String】", - "【applicationLegalese】 : Legalidad de la aplicación 【String】", - "【children】 : Lista de subcomponentes 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_fr_FR.json deleted file mode 100644 index d249dda31..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "Dialogue À Propos", - "info": "La boîte de dialogue de présentation de l'application, qui peut spécifier l'icône de l'application, le nom de l'application, le numéro de version de l'application et d'autres informations ainsi que la liste des sous-composants internes. Cliquer sur le bouton de gauche permet de naviguer vers la page des licences.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AboutDialog", - "desc": [ - "【applicationIcon】 : Icône en haut à gauche 【Widget】", - "【applicationVersion】 : Numéro de version 【String】", - "【applicationName】 : Nom de l'application 【String】", - "【applicationLegalese】 : Mentions légales de l'application 【String】", - "【children】 : Liste des sous-composants 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_it_IT.json deleted file mode 100644 index cbae88eac..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "Finestra Informazioni", - "info": "La finestra di dialogo delle informazioni sull'applicazione, che consente di specificare l'icona dell'applicazione, il nome dell'applicazione, il numero di versione dell'applicazione e altre informazioni, nonché l'elenco dei componenti interni. Cliccando sul pulsante a sinistra è possibile accedere alla pagina delle licenze.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AboutDialog", - "desc": [ - "【applicationIcon】 : Icona in alto a sinistra 【Widget】", - "【applicationVersion】 : Numero di versione 【String】", - "【applicationName】 : Nome dell'applicazione 【String】", - "【applicationLegalese】 : Informazioni legali dell'applicazione 【String】", - "【children】 : Lista dei componenti figli 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ja_JP.json deleted file mode 100644 index b0ca35053..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "ダイアログについて", - "info": "アプリケーションの概要ダイアログで、アプリケーションのアイコン、アプリケーション名、アプリケーションのバージョン番号などの情報と内部のサブコンポーネントリストを指定できます。左側のボタンをクリックすると、証明書ページにジャンプします。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AboutDialogの基本使用", - "desc": [ - "【applicationIcon】 : 左上アイコン 【Widget】", - "【applicationVersion】 : バージョン番号 【String】", - "【applicationName】 : アプリケーション名 【String】", - "【applicationLegalese】 : アプリケーションの法律 【String】", - "【children】 : サブコンポーネントリスト 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ko_KR.json deleted file mode 100644 index 453ec3396..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "정보 대화 상자", - "info": "애플리케이션의 정보 대화 상자로, 애플리케이션 아이콘, 애플리케이션 이름, 애플리케이션 버전 번호 등의 정보와 내부의 하위 구성 요소 목록을 지정할 수 있습니다. 왼쪽 버튼을 클릭하면 인증서 페이지로 이동할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AboutDialog 기본 사용", - "desc": [ - "【applicationIcon】 : 왼쪽 상단 아이콘 【Widget】", - "【applicationVersion】 : 버전 번호 【String】", - "【applicationName】 : 애플리케이션 이름 【String】", - "【applicationLegalese】 : 애플리케이션 법률 정보 【String】", - "【children】 : 하위 구성 요소 목록 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_pt_PT.json deleted file mode 100644 index 996e65a65..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "Diálogo Sobre", - "info": "Diálogo de introdução da aplicação, que pode especificar o ícone da aplicação, nome da aplicação, número da versão da aplicação e outras informações, bem como a lista de subcomponentes internos. Clicar no botão esquerdo pode saltar para a página de licenças.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do AboutDialog", - "desc": [ - "【applicationIcon】 : Ícone superior esquerdo 【Widget】", - "【applicationVersion】 : Número da versão 【String】", - "【applicationName】 : Nome da aplicação 【String】", - "【applicationLegalese】 : Legislação da aplicação 【String】", - "【children】 : Lista de subcomponentes 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ru_RU.json deleted file mode 100644 index d1fda7b5c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "О диалоговом окне", - "info": "Диалоговое окно с описанием приложения, в котором можно указать значок приложения, название приложения, версию приложения и другие данные, а также список внутренних дочерних компонентов. Нажатие на кнопку слева позволяет перейти на страницу лицензии.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AboutDialog", - "desc": [ - "【applicationIcon】 : Иконка в верхнем левом углу 【Widget】", - "【applicationVersion】 : Номер версии 【String】", - "【applicationName】 : Название приложения 【String】", - "【applicationLegalese】 : Юридическая информация приложения 【String】", - "【children】 : Список дочерних компонентов 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_zh-CN.json deleted file mode 100644 index 8dd6cffe7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "关于对话框", - "info": "应用的简介对话框,可指定应用图标、应用名、应用版本号等信息和内部的子组件列表,点击左侧按钮可以跳转到证书页。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AboutDialog基本使用", - "desc": [ - "【applicationIcon】 : 左上图标 【Widget】", - "【applicationVersion】 : 版本号 【String】", - "【applicationName】 : 应用名 【String】", - "【applicationLegalese】 : 应用律术 【String】", - "【children】 : 子组件列表 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/node1_base.dart deleted file mode 100644 index 2a1cb9023..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/node1_base.dart +++ /dev/null @@ -1,65 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -class CustomAboutDialog extends StatelessWidget { - const CustomAboutDialog({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Stack( - children: [ - _buildAboutDialog(), - Positioned(top: 50, right: 20, child: _buildRaisedButton(context)), - ], - ); - } - - Widget _buildRaisedButton(BuildContext context) => ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)), - ), - ), - onPressed: () { - showDialog(context: context, builder: (ctx) => _buildAboutDialog()); - }, - child: const Text( - 'Just Show It', - style: TextStyle(color: Colors.white), - ), - ); - - AboutDialog _buildAboutDialog() { - return AboutDialog( - applicationIcon: const FlutterLogo(), - applicationVersion: 'v0.0.1', - applicationName: 'Flutter Unit', - applicationLegalese: 'Copyright© 2018-2024 张风捷特烈', - children: [ - Container( - margin: const EdgeInsets.only(top: 20), - width: 80, - height: 80, - child: Image.asset('assets/images/icon_head.webp')), - Container( - margin: const EdgeInsets.only(top: 10), - alignment: Alignment.center, - child: const Text( - 'The King Of Coder.', - style: TextStyle( - color: Colors.white, - fontSize: 20, - shadows: [ - Shadow( - color: Colors.blue, offset: Offset(.5, .5), blurRadius: 3) - ], - ), - )) - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_de_DE.json deleted file mode 100644 index 2b309c554..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "Über App-Eintrag", - "info": "Ein Klickelement, das beim Klicken Anwendungsinformationen anzeigen kann. Es können Anwendungssymbole, Anwendungsname, Anwendungsversionsnummer und andere Informationen sowie die interne Liste der Unterkomponenten angegeben werden.", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AboutListTile", - "desc": [ - "【icon】 : Linkes Symbol 【Widget】", - "【applicationIcon】 : Symbol oben links 【Widget】", - "【applicationVersion】 : Versionsnummer 【String】", - "【applicationName】 : Anwendungsname 【String】", - "【applicationLegalese】 : Anwendungsrecht 【String】", - "【aboutBoxChildren】 : Inhaltskomponenten des Popup-Fensters 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_en_US.json deleted file mode 100644 index 2897d0091..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "About App Entry", - "info": "A clickable entry that can pop up application-related information when clicked. It can specify the application icon, application name, application version number, and other information, as well as a list of internal child components.", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AboutListTile", - "desc": [ - "【icon】 : Left icon 【Widget】", - "【applicationIcon】 : Top-left icon 【Widget】", - "【applicationVersion】 : Version number 【String】", - "【applicationName】 : Application name 【String】", - "【applicationLegalese】 : Application legalese 【String】", - "【aboutBoxChildren】 : Dialog content components 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_es_ES.json deleted file mode 100644 index 7a964f251..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "Entrada sobre la aplicación", - "info": "Una entrada en la que se puede hacer clic para mostrar información relacionada con la aplicación. Se pueden especificar el icono de la aplicación, el nombre de la aplicación, el número de versión y otros detalles, así como una lista de componentes internos.", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AboutListTile", - "desc": [ - "【icon】 : Icono izquierdo 【Widget】", - "【applicationIcon】 : Icono superior izquierdo 【Widget】", - "【applicationVersion】 : Número de versión 【String】", - "【applicationName】 : Nombre de la aplicación 【String】", - "【applicationLegalese】 : Legal de la aplicación 【String】", - "【aboutBoxChildren】 : Componentes del contenido del cuadro emergente 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_fr_FR.json deleted file mode 100644 index 579c45e74..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "Élément À Propos de l'Application", - "info": "Un élément cliquable qui peut afficher des informations sur l'application lorsqu'il est cliqué. Peut spécifier l'icône de l'application, le nom de l'application, le numéro de version de l'application et d'autres informations ainsi qu'une liste de composants internes.", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de AboutListTile", - "desc": [ - "【icon】 : Icône gauche 【Widget】", - "【applicationIcon】 : Icône en haut à gauche 【Widget】", - "【applicationVersion】 : Numéro de version 【String】", - "【applicationName】 : Nom de l'application 【String】", - "【applicationLegalese】 : Législation de l'application 【String】", - "【aboutBoxChildren】 : Composants du contenu de la boîte de dialogue 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_it_IT.json deleted file mode 100644 index 79a4be64a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "Voce di menu Informazioni", - "info": "Una voce cliccabile che, quando viene cliccata, può visualizzare informazioni relative all'applicazione, specificando icone dell'applicazione, nome dell'applicazione, numero di versione e un elenco di componenti interni.", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AboutListTile", - "desc": [ - "【icon】 : Icona a sinistra 【Widget】", - "【applicationIcon】 : Icona in alto a sinistra 【Widget】", - "【applicationVersion】 : Numero di versione 【String】", - "【applicationName】 : Nome dell'applicazione 【String】", - "【applicationLegalese】 : Legale dell'applicazione 【String】", - "【aboutBoxChildren】 : Componenti del contenuto della finestra 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ja_JP.json deleted file mode 100644 index f1a378468..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "アプリについてのリストアイテム", - "info": "クリックするとアプリの関連情報をポップアップ表示するアイテムで、アプリアイコン、アプリ名、アプリバージョン番号などの情報と内部のサブコンポーネントリストを指定できます。", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AboutListTileの基本的な使用", - "desc": [ - "【icon】 : 左アイコン 【Widget】", - "【applicationIcon】 : 左上アイコン 【Widget】", - "【applicationVersion】 : バージョン番号 【String】", - "【applicationName】 : アプリ名 【String】", - "【applicationLegalese】 : アプリの法律情報 【String】", - "【aboutBoxChildren】 : ポップアップボックスの内容コンポーネント 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ko_KR.json deleted file mode 100644 index 1d3800ee3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "앱 정보 항목", - "info": "클릭 시 앱 관련 정보를 팝업할 수 있는 클릭 항목으로, 앱 아이콘, 앱 이름, 앱 버전 번호 등의 정보와 내부 하위 컴포넌트 목록을 지정할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AboutListTile 기본 사용법", - "desc": [ - "【icon】 : 왼쪽 아이콘 【Widget】", - "【applicationIcon】 : 왼쪽 상단 아이콘 【Widget】", - "【applicationVersion】 : 버전 번호 【String】", - "【applicationName】 : 앱 이름 【String】", - "【applicationLegalese】 : 앱 법률 정보 【String】", - "【aboutBoxChildren】 : 팝업 내용 컴포넌트 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_pt_PT.json deleted file mode 100644 index 28794038e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "Item sobre a aplicação", - "info": "Um item clicável que, ao ser clicado, exibe informações sobre a aplicação, podendo especificar ícone da aplicação, nome da aplicação, número da versão e uma lista de componentes internos.", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do AboutListTile", - "desc": [ - "【icon】 : Ícone esquerdo 【Widget】", - "【applicationIcon】 : Ícone superior esquerdo 【Widget】", - "【applicationVersion】 : Número da versão 【String】", - "【applicationName】 : Nome da aplicação 【String】", - "【applicationLegalese】 : Legislação da aplicação 【String】", - "【aboutBoxChildren】 : Componentes do conteúdo da caixa de diálogo 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ru_RU.json deleted file mode 100644 index ad830b435..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "О приложении", - "info": "Элемент, при нажатии на который отображается информация о приложении, можно указать значок приложения, имя приложения, версию приложения и другие данные, а также список внутренних компонентов.", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AboutListTile", - "desc": [ - "【icon】 : Левый значок 【Widget】", - "【applicationIcon】 : Левый верхний значок 【Widget】", - "【applicationVersion】 : Номер версии 【String】", - "【applicationName】 : Имя приложения 【String】", - "【applicationLegalese】 : Юридическая информация приложения 【String】", - "【aboutBoxChildren】 : Компоненты содержимого всплывающего окна 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_zh-CN.json deleted file mode 100644 index 5fe2f3b31..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "关于应用条目", - "info": "一个点击条目,点击时可以弹出应用相关信息,可指定应用图标、应用名、应用版本号等信息和内部的子组件列表。", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AboutListTile基本使用", - "desc": [ - "【icon】 : 左图标 【Widget】", - "【applicationIcon】 : 左上图标 【Widget】", - "【applicationVersion】 : 版本号 【String】", - "【applicationName】 : 应用名 【String】", - "【applicationLegalese】 : 应用律术 【String】", - "【aboutBoxChildren】 : 弹框内容组件 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/node1_base.dart deleted file mode 100644 index 292665452..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/node1_base.dart +++ /dev/null @@ -1,34 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -class AboutListTileDemo extends StatelessWidget { - const AboutListTileDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const AboutListTile( - icon: Icon(Icons.info), - applicationIcon: FlutterLogo(), - applicationName: 'Flutter Unit', - applicationVersion: 'v0.0.1', - applicationLegalese: 'Copyright© 2018-2024 张风捷特烈', - aboutBoxChildren: [ - Padding( - padding: EdgeInsets.all(10.0), - child: Text( - ' FlutterUnit是【张风捷特烈】的开源项目,' - '收录Flutter的300+组件,并附加详细介绍以及操作交互,' - '希望帮助广大编程爱好者入门Flutter。' - '更多知识可以关注掘金账号、公众号【编程之王】。', - style: TextStyle(color: Color(0xff999999), fontSize: 16), - textAlign: TextAlign.justify, - ), - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_de_DE.json deleted file mode 100644 index 696855538..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "Ereignis-Chip", - "info": "Ähnlich wie die Chip-Komponente, aber mit einigen Klick-Eigenschaften. Kann die Schattentiefe beim Klicken und das Klick-Ereignis festlegen.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Normale Darstellung des ActionChip", - "desc": [ - "【onPressed】: Klick-Ereignis 【Function】", - "【pressElevation】: Schattentiefe beim Drücken 【double】", - "Andere Eigenschaften sind identisch mit der Chip-Komponente, keine rechte Komponente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_en_US.json deleted file mode 100644 index 245828d9c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "Action Chip", - "info": "Similar style to the Chip component, with some clickable properties. You can specify the shadow depth and click event when pressed.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "The normal performance of ActionChip is as follows", - "desc": [ - "【onPressed】: Click event 【Function】", - "【pressElevation】: Shadow depth when pressed 【double】", - "Other properties are the same as the Chip component, no right component." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_es_ES.json deleted file mode 100644 index c78651623..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "Chip de Acción", - "info": "Estilo similar al componente Chip, con algunas propiedades de clic. Puede especificar la profundidad de la sombra al hacer clic y el evento de clic.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "El comportamiento normal de ActionChip es el siguiente", - "desc": [ - "【onPressed】: Evento de clic 【Function】", - "【pressElevation】: Profundidad de la sombra al presionar 【double】", - "Otras propiedades son iguales al componente Chip, sin componente derecho." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_fr_FR.json deleted file mode 100644 index 6dc10d3b4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "Chip d'action", - "info": "Un style similaire au composant Chip, avec des propriétés de clic. Vous pouvez spécifier la profondeur de l'ombre lors du clic et l'événement de clic.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La représentation normale de l'ActionChip est la suivante", - "desc": [ - "【onPressed】: Événement de clic 【Function】", - "【pressElevation】: Profondeur de l'ombre lors de la pression 【double】", - "Les autres propriétés sont identiques au composant Chip, sans composant à droite." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_it_IT.json deleted file mode 100644 index 02508a485..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "Chip di Azione", - "info": "Uno stile simile al componente Chip, con alcune proprietà di clic. È possibile specificare la profondità dell'ombra al clic e l'evento di clic.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La rappresentazione normale di ActionChip è la seguente", - "desc": [ - "【onPressed】: Evento di clic 【Function】", - "【pressElevation】: Profondità dell'ombra al clic 【double】", - "Altre proprietà sono simili al componente Chip, senza componente a destra." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ja_JP.json deleted file mode 100644 index cd38faba7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "アクションチップ", - "info": "Chipコンポーネントに似たスタイルで、いくつかのクリック属性があります。クリック時の影の深さやクリックイベントを指定できます。", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ActionChipの通常の表現は以下の通りです", - "desc": [ - "【onPressed】: クリックイベント 【Function】", - "【pressElevation】: 押下時の影の深さ 【double】", - "その他の属性はChipコンポーネントと同じで、右側のコンポーネントはありません。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ko_KR.json deleted file mode 100644 index de66f0737..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "이벤트 칩", - "info": "Chip 컴포넌트와 유사한 스타일로, 클릭 속성이 있습니다. 클릭 시 그림자 깊이와 클릭 이벤트를 지정할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ActionChip의 일반적인 표현은 다음과 같습니다", - "desc": [ - "【onPressed】: 클릭 이벤트 【Function】", - "【pressElevation】: 눌렀을 때 그림자 깊이 【double】", - "기타 속성은 Chip 컴포넌트와 동일하며, 오른쪽 컴포넌트가 없습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_pt_PT.json deleted file mode 100644 index b11af7dc6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "Chip de Ação", - "info": "Estilo semelhante ao componente Chip, com algumas propriedades de clique. Pode especificar a profundidade da sombra ao clicar e o evento de clique.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "A aparência normal do ActionChip é a seguinte", - "desc": [ - "【onPressed】: Evento de clique 【Function】", - "【pressElevation】: Profundidade da sombra ao pressionar 【double】", - "Outras propriedades são iguais ao componente Chip, sem componente à direita." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ru_RU.json deleted file mode 100644 index 5c34b9fdd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "Чип действия", - "info": "Стиль, похожий на компонент Chip, с некоторыми свойствами для нажатия. Можно указать глубину тени при нажатии и событие нажатия.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Обычное поведение ActionChip выглядит следующим образом", - "desc": [ - "【onPressed】: Событие нажатия 【Function】", - "【pressElevation】: Глубина тени при нажатии 【double】", - "Другие свойства такие же, как у компонента Chip, без правого компонента." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_zh-CN.json deleted file mode 100644 index 64440ef30..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "事件小条", - "info": "和Chip组件类似的样式,有一些点击的属性。可以指定点击时的阴影深、点击事件。", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ActionChip的普通表现如下", - "desc": [ - "【onPressed】: 点击事件 【Function】", - "【pressElevation】: 按下时影深 【double】", - "其他属性同Chip组件,无右侧组件。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/node1_base.dart deleted file mode 100644 index b384b8901..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/node1_base.dart +++ /dev/null @@ -1,29 +0,0 @@ - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -/// - - -import 'package:flutter/material.dart'; -import 'package:widgets/utils/dialog_about.dart'; - - -class CustomActionChip extends StatelessWidget { - const CustomActionChip({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ActionChip( - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(3), - label: const Text("This is a ActionChip."), - backgroundColor: Colors.grey.withAlpha(66), - avatar: Image.asset("assets/images/icon_head.webp"), - shadowColor: Colors.orangeAccent, - elevation: 3, - pressElevation: 5, - onPressed: ()=> DialogAbout.show(context), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_de_DE.json deleted file mode 100644 index 2cf8152a8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "Dialogfeld", - "info": "Eine allgemeine Dialogstruktur, die Komponenten im Kopf-, Mittel- und Fußbereich angeben kann. Verfügt über Textstile und Ränder für Titel und Inhalt, Schattentiefe, Form und andere Attribute.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AlertDialog", - "desc": [ - "【title】 : Oberste Komponente 【Widget】", - "【content】 : Inhaltskomponente 【Widget】", - "【titleTextStyle】 : Textstil für den Titel 【TextStyle】", - "【contentTextStyle】 : Textstil für den Inhalt 【TextStyle】", - "【titlePadding】 : Innenabstand für den Titel 【EdgeInsetsGeometry】", - "【contentPadding】 : Innenabstand für den Inhalt 【EdgeInsetsGeometry】", - "【actions】 : Liste der Komponenten in der unteren rechten Ecke 【List】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【elevation】 : Schattentiefe 【double】", - "【shape】 : Form 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_en_US.json deleted file mode 100644 index fbfa30c26..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "Popup Dialog", - "info": "A general dialog structure that can specify components at the head, middle, and tail. It has text styles and margins for the title and content, as well as properties such as elevation and shape.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AlertDialog", - "desc": [ - "【title】 : Top component 【Widget】", - "【content】 : Content component 【Widget】", - "【titleTextStyle】 : Top text style 【TextStyle】", - "【contentTextStyle】 : Content text style 【TextStyle】", - "【titlePadding】 : Top padding 【EdgeInsetsGeometry】", - "【contentPadding】 : Content padding 【EdgeInsetsGeometry】", - "【actions】 : Bottom right component list 【List】", - "【backgroundColor】 : Background color 【Color】", - "【elevation】 : Elevation 【double】", - "【shape】 : Shape 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_es_ES.json deleted file mode 100644 index b41ad91d8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "Cuadro de diálogo emergente", - "info": "Una estructura de diálogo genérica que permite especificar componentes en la parte superior, media e inferior. Tiene propiedades como el estilo de texto y los márgenes del título y el contenido, la profundidad de la sombra, la forma, etc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AlertDialog", - "desc": [ - "【title】 : Componente superior 【Widget】", - "【content】 : Componente de contenido 【Widget】", - "【titleTextStyle】 : Estilo de texto del título 【TextStyle】", - "【contentTextStyle】 : Estilo de texto del contenido 【TextStyle】", - "【titlePadding】 : Relleno superior 【EdgeInsetsGeometry】", - "【contentPadding】 : Relleno del contenido 【EdgeInsetsGeometry】", - "【actions】 : Lista de componentes en la esquina inferior derecha 【List】", - "【backgroundColor】 : Color de fondo 【Color】", - "【elevation】 : Profundidad de la sombra 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_fr_FR.json deleted file mode 100644 index fa306c880..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "Boîte de dialogue contextuelle", - "info": "Une structure de dialogue générique qui permet de spécifier des composants en haut, au milieu et en bas. Possède des styles de texte et des marges pour le titre et le contenu, ainsi que des propriétés telles que la profondeur d'ombre, la forme, etc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AlertDialog", - "desc": [ - "【title】 : Composant du haut 【Widget】", - "【content】 : Composant du contenu 【Widget】", - "【titleTextStyle】 : Style de texte du titre 【TextStyle】", - "【contentTextStyle】 : Style de texte du contenu 【TextStyle】", - "【titlePadding】 : Marge intérieure du titre 【EdgeInsetsGeometry】", - "【contentPadding】 : Marge intérieure du contenu 【EdgeInsetsGeometry】", - "【actions】 : Liste des composants en bas à droite 【List】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【elevation】 : Profondeur d'ombre 【double】", - "【shape】 : Forme 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_it_IT.json deleted file mode 100644 index 8566bdcdf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "Finestra di dialogo pop-up", - "info": "Una struttura di dialogo generica che consente di specificare componenti nella parte superiore, centrale e inferiore. Possiede stili di testo e margini per il titolo e il contenuto, oltre a proprietà come profondità dell'ombra, forma, ecc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di AlertDialog", - "desc": [ - "【title】 : Componente superiore 【Widget】", - "【content】 : Componente del contenuto 【Widget】", - "【titleTextStyle】 : Stile del testo superiore 【TextStyle】", - "【contentTextStyle】 : Stile del testo del contenuto 【TextStyle】", - "【titlePadding】 : Spaziatura interna superiore 【EdgeInsetsGeometry】", - "【contentPadding】 : Spaziatura interna del contenuto 【EdgeInsetsGeometry】", - "【actions】 : Lista dei componenti nell'angolo inferiore destro 【List】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【elevation】 : Profondità dell'ombra 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ja_JP.json deleted file mode 100644 index 188f972fc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "ポップアップダイアログ", - "info": "一般的なダイアログ構造で、上部、中央、下部にコンポーネントを指定できます。タイトル、内容のテキストスタイルと余白、影の深さ、形状などの属性を持っています。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AlertDialogの基本使用", - "desc": [ - "【title】 : 上部コンポーネント 【Widget】", - "【content】 : 内容コンポーネント 【Widget】", - "【titleTextStyle】 : 上部テキストスタイル 【TextStyle】", - "【contentTextStyle】 : 内容テキストスタイル 【TextStyle】", - "【titlePadding】 : 上部内側余白 【EdgeInsetsGeometry】", - "【contentPadding】 : 内容内側余白 【EdgeInsetsGeometry】", - "【actions】 : 右下コンポーネントリスト 【List】", - "【backgroundColor】 : 背景色 【Color】", - "【elevation】 : 影の深さ 【double】", - "【shape】 : 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ko_KR.json deleted file mode 100644 index 0d50477a4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "팝업 대화 상자", - "info": "일반적인 대화 상자 구조로, 상단, 중간, 하단의 구성 요소를 지정할 수 있습니다. 제목, 내용의 텍스트 스타일과 여백, 그림자 깊이, 모양 등의 속성을 가지고 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AlertDialog 기본 사용", - "desc": [ - "【title】 : 상단 구성 요소 【Widget】", - "【content】 : 내용 구성 요소 【Widget】", - "【titleTextStyle】 : 상단 텍스트 스타일 【TextStyle】", - "【contentTextStyle】 : 내용 텍스트 스타일 【TextStyle】", - "【titlePadding】 : 상단 내부 여백 【EdgeInsetsGeometry】", - "【contentPadding】 : 내용 내부 여백 【EdgeInsetsGeometry】", - "【actions】 : 오른쪽 하단 구성 요소 목록 【List】", - "【backgroundColor】 : 배경색 【Color】", - "【elevation】 : 그림자 깊이 【double】", - "【shape】 : 모양 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_pt_PT.json deleted file mode 100644 index b8a726c07..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "Diálogo de Alerta", - "info": "Uma estrutura de diálogo genérica que permite especificar componentes no topo, meio e fim. Possui estilos de texto e margens para o título e conteúdo, além de propriedades como profundidade de sombra, forma, etc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AlertDialog", - "desc": [ - "【title】 : Componente do topo 【Widget】", - "【content】 : Componente de conteúdo 【Widget】", - "【titleTextStyle】 : Estilo de texto do topo 【TextStyle】", - "【contentTextStyle】 : Estilo de texto do conteúdo 【TextStyle】", - "【titlePadding】 : Margem interna do topo 【EdgeInsetsGeometry】", - "【contentPadding】 : Margem interna do conteúdo 【EdgeInsetsGeometry】", - "【actions】 : Lista de componentes no canto inferior direito 【List】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【elevation】 : Profundidade de sombra 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ru_RU.json deleted file mode 100644 index f9cbc251f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "Всплывающее диалоговое окно", - "info": "Универсальная структура диалогового окна, позволяющая указать компоненты в верхней, средней и нижней частях. Имеет стили текста и отступы для заголовка и содержимого, а также свойства, такие как тень, форма и другие.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AlertDialog", - "desc": [ - "【title】 : Верхний компонент 【Widget】", - "【content】 : Компонент содержимого 【Widget】", - "【titleTextStyle】 : Стиль текста заголовка 【TextStyle】", - "【contentTextStyle】 : Стиль текста содержимого 【TextStyle】", - "【titlePadding】 : Внутренний отступ заголовка 【EdgeInsetsGeometry】", - "【contentPadding】 : Внутренний отступ содержимого 【EdgeInsetsGeometry】", - "【actions】 : Список компонентов в правом нижнем углу 【List】", - "【backgroundColor】 : Цвет фона 【Color】", - "【elevation】 : Тень 【double】", - "【shape】 : Форма 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_zh-CN.json deleted file mode 100644 index 6d8bb8d8d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "弹出对话框", - "info": "一个通用的对话框结构,可指定头、中、尾处的组件。拥有标题、内容的文字样式和边距,影深、形状等属性。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AlertDialog基本使用", - "desc": [ - "【title】 : 顶部组件 【Widget】", - "【content】 : 内容组件 【Widget】", - "【titleTextStyle】 : 顶部文字样式 【TextStyle】", - "【contentTextStyle】 : 内容文字样式 【TextStyle】", - "【titlePadding】 : 顶部内边距 【EdgeInsetsGeometry】", - "【contentPadding】 : 内容内边距 【EdgeInsetsGeometry】", - "【actions】 : 右下角组件列表 【List】", - "【backgroundColor】 : 背景色 【Color】", - "【elevation】 : 影深 【double】", - "【shape】 : 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/node1_base.dart deleted file mode 100644 index ada7cf5c9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/node1_base.dart +++ /dev/null @@ -1,99 +0,0 @@ - - -/// create by 张风捷特烈 on 2020-03-24 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; - -class CustomAlertDialog extends StatelessWidget { - const CustomAlertDialog({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildRaisedButton(context), - _buildAlertDialog(), - ], - ); - } - - Widget _buildRaisedButton(BuildContext context) => ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)), - ), - ), - onPressed: () { - showDialog(context: context, builder: (ctx) => _buildAlertDialog()); - }, - child: const Text( - 'Just Show It !', - style: TextStyle(color: Colors.white), - ), - ); - - Widget _buildAlertDialog() { - return AlertDialog( - title: _buildTitle(), - titleTextStyle: const TextStyle(fontSize: 20, color: Colors.black), - titlePadding: const EdgeInsets.only( - top: 5, - left: 20, - ), - contentPadding: const EdgeInsets.symmetric(horizontal: 5), - backgroundColor: Colors.white, - content: _buildContent(), - actions: const [ - Icon(Icons.android, color: Colors.blue,), - Icon(Icons.add, color: Colors.blue,), - Icon(Icons.g_translate, color: Colors.blue,), - Icon(Icons.games, color: Colors.blue,), - ], - elevation: 4, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10))), - ); - } - - Widget _buildTitle() { - return Row( - //标题 - children: [ - Image.asset( - "assets/images/icon_head.webp", - width: 30, - height: 30, - ), - const SizedBox(width: 10,), - const Expanded( - child: Text( - "关于", - style: TextStyle(fontSize: 18), - )), - const CloseButton() - ], - ); - } - - Widget _buildContent() { - return Column( - mainAxisSize: MainAxisSize.min, - children: const [ - Padding( - padding: EdgeInsets.all(10.0), - child: Text( - ' FlutterUnit是【张风捷特烈】的开源项目,' - '收录Flutter的200+组件,并附加详细介绍以及操作交互,' - '希望帮助广大编程爱好者入门Flutter。' - '更多知识可以关注掘金账号、公众号【编程之王】。', - style: TextStyle(color: Color(0xff999999), fontSize: 16), - textAlign: TextAlign.justify, - ), - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_de_DE.json deleted file mode 100644 index bd93fd190..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "Animiertes Symbol", - "info": "Verwenden Sie die Symboldaten von AnimatedIcons, um Symbole mit einem Animationscontroller zu animieren. Größe, Farbe usw. können angegeben werden.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedIcon", - "desc": [ - "【icon】 : Animationssymboldaten 【AnimatedIcons】", - "【size】 : Größe 【double】", - "【color】 : Farbe 【Color】", - "【progress】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_en_US.json deleted file mode 100644 index beed34141..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "Icon Animation", - "info": "Using the icon data of AnimatedIcons, you can animate the icon based on an animation controller. The icon size, color, etc., can be specified.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedIcon", - "desc": [ - "【icon】: Animation icon data 【AnimatedIcons】", - "【size】: Size 【double】", - "【color】: Color 【Color】", - "【progress】: Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_es_ES.json deleted file mode 100644 index d9cada141..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "Icono animado", - "info": "Utiliza los datos de iconos de AnimatedIcons para crear efectos de animación en los iconos basados en un controlador de animación. Se puede especificar el tamaño del icono, el color, etc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedIcon", - "desc": [ - "【icon】: Datos del icono animado 【AnimatedIcons】", - "【size】: Tamaño 【double】", - "【color】: Color 【Color】", - "【progress】: Animación 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_fr_FR.json deleted file mode 100644 index 583ef6c4c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "Icône animée", - "info": "Utilisez les données d'icône d'AnimatedIcons pour animer une icône en fonction d'un contrôleur d'animation. Vous pouvez spécifier la taille, la couleur, etc. de l'icône.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedIcon", - "desc": [ - "【icon】 : Données de l'icône animée 【AnimatedIcons】", - "【size】 : Taille 【double】", - "【color】 : Couleur 【Color】", - "【progress】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_it_IT.json deleted file mode 100644 index 60a5bc1dc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "Icona Animata", - "info": "Utilizza i dati delle icone di AnimatedIcons per creare effetti di animazione delle icone basati su un controller di animazione. È possibile specificare dimensioni, colore, ecc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedIcon", - "desc": [ - "【icon】 : Dati dell'icona animata 【AnimatedIcons】", - "【size】 : Dimensione 【double】", - "【color】 : Colore 【Color】", - "【progress】 : Animazione 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ja_JP.json deleted file mode 100644 index 49b64808d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "アイコンアニメーション", - "info": "AnimatedIconsのアイコンデータを使用して、アニメーションコントローラーに基づいてアイコンにアニメーション効果を与えることができます。アイコンのサイズや色などを指定できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedIconの基本使用", - "desc": [ - "【icon】 : アニメーションアイコンデータ 【AnimatedIcons】", - "【size】 : サイズ 【double】", - "【color】 : 色 【Color】", - "【progress】 : アニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ko_KR.json deleted file mode 100644 index 25b5ed60e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "아이콘 애니메이션", - "info": "AnimatedIcons의 아이콘 데이터를 사용하여 애니메이션 컨트롤러에 따라 아이콘에 애니메이션 효과를 적용할 수 있습니다. 아이콘 크기, 색상 등을 지정할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedIcon 기본 사용", - "desc": [ - "【icon】 : 애니메이션 아이콘 데이터 【AnimatedIcons】", - "【size】 : 크기 【double】", - "【color】 : 색상 【Color】", - "【progress】 : 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_pt_PT.json deleted file mode 100644 index fad0bab61..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "Ícone Animado", - "info": "Utiliza os dados de ícones de AnimatedIcons para criar efeitos de animação com base em um controlador de animação. Permite especificar o tamanho, cor e outros atributos do ícone.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedIcon", - "desc": [ - "【icon】 : Dados do ícone animado 【AnimatedIcons】", - "【size】 : Tamanho 【double】", - "【color】 : Cor 【Color】", - "【progress】 : Animação 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ru_RU.json deleted file mode 100644 index 414e42a76..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "Анимированная иконка", - "info": "Используйте данные иконки AnimatedIcons для создания анимации иконки с помощью контроллера анимации. Можно указать размер и цвет иконки.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedIcon", - "desc": [ - "【icon】 : Данные анимированной иконки 【AnimatedIcons】", - "【size】 : Размер 【double】", - "【color】 : Цвет 【Color】", - "【progress】 : Анимация 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_zh-CN.json deleted file mode 100644 index d9f9c3aaf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "图标动画", - "info": "使用AnimatedIcons的图标数据,可以根据一个动画控制器来使图标进行动画效果。可指定图标大小、颜色等。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedIcon基本使用", - "desc": [ - "【icon】 : 动画图标数据 【AnimatedIcons】", - "【size】 : 大小 【double】", - "【color】 : 颜色 【Color】", - "【progress】 : 动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/node1_base.dart deleted file mode 100644 index 4e96eb8d4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/node1_base.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedIcon extends StatefulWidget { - const CustomAnimatedIcon({Key? key}) : super(key: key); - - @override - _CustomAnimatedIconState createState() => _CustomAnimatedIconState(); -} - -class _CustomAnimatedIconState extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - _ctrl = AnimationController(vsync: this, duration: const Duration(seconds: 1)); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Wrap( - runSpacing: 30, - children: _buildChildren(), - ), - ); - } - - final Map data = { - Colors.orange: AnimatedIcons.menu_arrow, - Colors.blue: AnimatedIcons.ellipsis_search, - Colors.red: AnimatedIcons.close_menu, - Colors.green: AnimatedIcons.arrow_menu, - Colors.cyanAccent: AnimatedIcons.play_pause, - Colors.purple: AnimatedIcons.pause_play, - }; - - List _buildChildren() => - data.keys - .map((Color color) => AnimatedIcon( - size: 50, - color: color, - icon: data[color]!, - progress: _ctrl, - )) - .toList(); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_de_DE.json deleted file mode 100644 index aa565405f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "Automatische Vervollständigung", - "info": "Bietet während der Eingabe eine Überlagerung mit Vorschlägen an, damit Benutzer auswählen können, und bietet ein hohes Maß an Anpassbarkeit.", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Autocomplete", - "desc": [ - "【optionsBuilder】: Optionen-Builder 【AutocompleteOptionsBuilder】", - "【onSelected】: Rückruf bei Auswahl 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Generika von Autocomplete", - "desc": [ - "【optionsViewBuilder】: Panel-Builder 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】: Eingabe-Builder 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】: Textanzeige 【AutocompleteOptionToString】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_en_US.json deleted file mode 100644 index 221f824b7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "Autocomplete", - "info": "During input, provides a suggestion overlay for users to select from, with a high degree of customization.", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Autocomplete", - "desc": [ - "【optionsBuilder】: Option builder 【AutocompleteOptionsBuilder】", - "【onSelected】: Callback when selected 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Generics of Autocomplete", - "desc": [ - "【optionsViewBuilder】: Panel builder 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】: Input builder 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】: Text display 【AutocompleteOptionToString】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_es_ES.json deleted file mode 100644 index 8e9cdf044..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "Autocompletado", - "info": "Proporciona una capa de sugerencias durante la entrada para que el usuario pueda seleccionar, con un alto grado de personalización.", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Autocomplete", - "desc": [ - "【optionsBuilder】: Constructor de opciones 【AutocompleteOptionsBuilder】", - "【onSelected】: Devolución de llamada al seleccionar 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Genéricos de Autocomplete", - "desc": [ - "【optionsViewBuilder】: Constructor del panel 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】: Constructor de entrada 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】: Visualización de texto 【AutocompleteOptionToString】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_fr_FR.json deleted file mode 100644 index 1c2b6d1d5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "Remplissage automatique", - "info": "Pendant la saisie, fournit une superposition de suggestions pour que l'utilisateur puisse choisir, avec un haut degré de personnalisation.", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'Autocomplete", - "desc": [ - "【optionsBuilder】 : Constructeur d'options 【AutocompleteOptionsBuilder】", - "【onSelected】 : Rappel lors de la sélection 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Génériques d'Autocomplete", - "desc": [ - "【optionsViewBuilder】 : Constructeur de panneau 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】 : Constructeur de saisie 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】 : Affichage de texte 【AutocompleteOptionToString】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_it_IT.json deleted file mode 100644 index 921cc9f24..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "Completamento automatico", - "info": "Durante l'immissione, fornisce un overlay di suggerimenti per la selezione dell'utente, con un alto grado di personalizzazione.", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Autocomplete", - "desc": [ - "【optionsBuilder】 : Costruttore di opzioni 【AutocompleteOptionsBuilder】", - "【onSelected】 : Callback alla selezione 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Generics di Autocomplete", - "desc": [ - "【optionsViewBuilder】 : Costruttore del pannello 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】 : Costruttore di input 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】 : Visualizzazione del testo 【AutocompleteOptionToString】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ja_JP.json deleted file mode 100644 index 74cbbfed7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "オートコンプリート", - "info": "入力中に、ユーザーが選択できるように連想語をフローティングレイヤーで表示し、高いカスタマイズ性を持っています。", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Autocompleteの基本使用", - "desc": [ - "【optionsBuilder】 : オプション構築器 【AutocompleteOptionsBuilder】", - "【onSelected】 : 選択時のコールバック 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Autocompleteのジェネリック", - "desc": [ - "【optionsViewBuilder】 : パネル構築器 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】 : 入力構築器 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】 : テキスト表示 【AutocompleteOptionToString】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ko_KR.json deleted file mode 100644 index b86cad62c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "자동 완성", - "info": "입력 중에, 사용자가 선택할 수 있도록 연관어를 보여주는 레이어를 제공하며, 높은 수준의 커스터마이징이 가능합니다.", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Autocomplete 기본 사용", - "desc": [ - "【optionsBuilder】 : 옵션 빌더 【AutocompleteOptionsBuilder】", - "【onSelected】 : 선택 시 콜백 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Autocomplete의 제네릭", - "desc": [ - "【optionsViewBuilder】 : 패널 빌더 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】 : 입력 빌더 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】 : 텍스트 표시 【AutocompleteOptionToString】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_pt_PT.json deleted file mode 100644 index cf85c6971..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "Preenchimento automático", - "info": "Durante a entrada, fornece uma sobreposição de sugestões para o usuário escolher, com alto grau de personalização.", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Autocomplete", - "desc": [ - "【optionsBuilder】: Construtor de opções 【AutocompleteOptionsBuilder】", - "【onSelected】: Callback de seleção 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Genéricos do Autocomplete", - "desc": [ - "【optionsViewBuilder】: Construtor de painel 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】: Construtor de entrada 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】: Exibição de texto 【AutocompleteOptionToString】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ru_RU.json deleted file mode 100644 index 7d6e34258..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "Автозаполнение", - "info": "Во время ввода предоставляет всплывающий слой с подсказками для выбора пользователем, обладает высокой степенью настройки.", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Autocomplete", - "desc": [ - "【optionsBuilder】 : конструктор опций 【AutocompleteOptionsBuilder】", - "【onSelected】 : обратный вызов при выборе 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Обобщение Autocomplete", - "desc": [ - "【optionsViewBuilder】 : конструктор панели 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】 : конструктор ввода 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】 : отображение текста 【AutocompleteOptionToString】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_zh-CN.json deleted file mode 100644 index 3f7fe0139..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "自动填充", - "info": "在输入期间,提供联想词浮层展示,以便用户选择,拥有高度的可定制性。", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Autocomplete基本使用", - "desc": [ - "【optionsBuilder】 : 选项构造器 【AutocompleteOptionsBuilder】", - "【onSelected】 : 选择时回调 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Autocomplete的泛型", - "desc": [ - "【optionsViewBuilder】 : 面板构造器 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】 : 输入构造器 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】 : 文字展示 【AutocompleteOptionToString】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/node1_base.dart deleted file mode 100644 index b9abae503..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/node1_base.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2022-04-18 -/// contact me by email 1981462002@qq.com - -class AutocompleteDemo extends StatelessWidget { - const AutocompleteDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Autocomplete( - optionsBuilder: buildOptions, - onSelected: onSelected, - ); - } - - void onSelected(String selection) { - debugPrint('当前选择了 $selection'); - } - - Future> buildOptions( - TextEditingValue textEditingValue, - ) async { - if (textEditingValue.text == '') { - return const Iterable.empty(); - } - return searchByArgs(textEditingValue.text); - } - - Future> searchByArgs(String args) async{ - // 模拟网络请求 - await Future.delayed(const Duration(milliseconds: 200)); - const List data = [ - 'toly', 'toly49', 'toly42', 'toly56', - 'card', 'ls', 'alex', 'fan sha', - ]; - return data.where((String name) => name.contains(args)); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/node2_type.dart b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/node2_type.dart deleted file mode 100644 index d48fe1bd0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/node2_type.dart +++ /dev/null @@ -1,219 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2022-04-18 -/// contact me by email 1981462002@qq.com - -class AutocompleteType extends StatefulWidget { - const AutocompleteType({Key? key}) : super(key: key); - - @override - State createState() => _AutocompleteTypeState(); -} - -class _AutocompleteTypeState extends State { - late TextEditingController _controller; - _User? user; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: Scaffold( - appBar: AppBar( - automaticallyImplyLeading: false, - title: buildAutocomplete(), - ), - body: Center( - child: Text( - user != null ? user!.name : '未选择', - style: const TextStyle(fontSize: 40), - )), - ), - ); - } - - Widget buildAutocomplete() { - return Autocomplete<_User>( - optionsBuilder: buildOptions, - onSelected: onSelected, - optionsViewBuilder: _buildOptionsView, - fieldViewBuilder: _buildFieldView, - displayStringForOption: (user) => user.name, - ); - } - - @override - void dispose() { - // _controller.dispose(); - super.dispose(); - } - - void onSelected(_User selection) { - debugPrint('当前选择了 $selection'); - setState(() { - user = selection; - }); - } - - Future> buildOptions( - TextEditingValue textEditingValue, - ) async { - if (textEditingValue.text == '') { - return const Iterable<_User>.empty(); - } - return searchByArgs(textEditingValue.text); - } - - Future> searchByArgs(String args) async { - // 模拟网络请求 - await Future.delayed(const Duration(milliseconds: 200)); - const List<_User> data = [ - _User('toly', true, 'icon_5.webp'), - _User('toly49', false, 'icon_6.webp'), - _User('toly42', true, 'icon_7.webp'), - _User('toly56', false, 'icon_8.webp'), - _User('card', true, 'icon_5.webp'), - _User('ls', true, 'icon_6.webp'), - _User('alex', true, 'icon_7.webp'), - _User('fan sha', false, 'icon_8.webp'), - ]; - return data.where((_User user) => user.name.contains(args)); - } - - Widget _buildFieldView( - BuildContext context, - TextEditingController textEditingController, - FocusNode focusNode, - VoidCallback onFieldSubmitted) { - _controller = textEditingController; - return SizedBox( - height: 34, - child: TextFormField( - controller: textEditingController, - decoration: const InputDecoration( - filled: true, - fillColor: Color(0xffF7F8FA), - prefixIcon: Icon(Icons.search), - contentPadding: EdgeInsets.only(top: 1), - border: UnderlineInputBorder( - borderSide: BorderSide.none, - borderRadius: BorderRadius.all(Radius.circular(19)), - ), - hintText: "输入用户名 (toly)", - hintStyle: TextStyle(fontSize: 13)), - focusNode: focusNode, - onFieldSubmitted: (String value) { - onFieldSubmitted(); - }, - ), - ); - } - - Widget _buildOptionsView(BuildContext context, - AutocompleteOnSelected<_User> onSelected, Iterable<_User> options) { - return Align( - alignment: Alignment.topCenter, - child: Padding( - padding: const EdgeInsets.only(top: 20), - child: Material( - child: ConstrainedBox( - constraints: BoxConstraints(maxHeight: 150), - child: ListView.builder( - padding: EdgeInsets.zero, - itemBuilder: (_, index) { - final _User option = options.elementAt(index); - return _UserItem( - onSelected: onSelected, - user: option, - args: _controller.text, - ); - }, - itemCount: options.length, - ), - ), - ), - ), - ); - } -} - -class _UserItem extends StatelessWidget { - final AutocompleteOnSelected<_User>? onSelected; - final String args; - final _User user; - - const _UserItem({ - Key? key, - this.onSelected, - required this.user, - required this.args, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return InkWell( - onTap: () => onSelected?.call(user), - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 6), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - CircleAvatar( - foregroundColor: Colors.transparent, - backgroundImage: - AssetImage('assets/images/head_icon/${user.image}'), - ), - const SizedBox(width: 20), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text.rich(formSpan(user.name, args)), - Text( - '性别: ${user.man ? '男' : '女'}', - style: const TextStyle(color: Colors.grey), - ), - ], - ), - ], - ), - ), - ); - } - - final TextStyle lightTextStyle = const TextStyle( - color: Colors.blue, - fontWeight: FontWeight.bold, - ); - - InlineSpan formSpan(String src, String pattern) { - List span = []; - List parts = src.split(pattern); - if (parts.length > 1) { - for (int i = 0; i < parts.length; i++) { - span.add(TextSpan(text: parts[i])); - if (i != parts.length - 1) { - span.add(TextSpan(text: pattern, style: lightTextStyle)); - } - } - } else { - span.add(TextSpan(text: src)); - } - return TextSpan(children: span); - } -} - -class _User { - final String name; - final bool man; - final String image; - - const _User(this.name, this.man, this.image); - - @override - String toString() { - return '_User{name: $name, man: $man, image: $image}'; - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_de_DE.json deleted file mode 100644 index 2110748f9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "Zurück-Button", - "info": "Ein IconButton mit Rückkehrfunktion, das Rückkehrsymbol kann nicht geändert werden. Verhält sich in iOS und Android unterschiedlich.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButton Attribute", - "desc": [ - "【color】: Farbe 【Color】", - "【style】: Button-Stil 【ButtonStyle?】", - "【onPressed】: Klick-Ereignis 【Function】", - " Wenn onPressed leer ist, wird der aktuelle Stack verlassen" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_en_US.json deleted file mode 100644 index 5827f1c25..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "Back Button", - "info": "An IconButton with a back function, the back icon cannot be changed. It behaves differently in iOS and Android.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButton Properties", - "desc": [ - "【color】: Color 【Color】", - "【style】: Button Style 【ButtonStyle?】", - "【onPressed】: Click Event 【Function】", - " If onPressed is empty, it will exit the current stack." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_es_ES.json deleted file mode 100644 index d776911ee..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "Botón de retroceso", - "info": "Un IconButton con función de retroceso, el icono de retroceso no se puede cambiar. Se comporta de manera diferente en iOS y Android.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propiedades de BackButton", - "desc": [ - "【color】: Color 【Color】", - "【style】: Estilo del botón 【ButtonStyle?】", - "【onPressed】: Evento de clic 【Function】", - "Si onPressed está vacío, saldrá de la pila actual." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_fr_FR.json deleted file mode 100644 index 67ab49af4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "Bouton Retour", - "info": "Un IconButton avec une fonction de retour, l'icône de retour ne peut pas être modifiée. Se comporte différemment sur iOS et Android.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propriétés du BackButton", - "desc": [ - "【color】: Couleur 【Color】", - "【style】: Style du bouton 【ButtonStyle?】", - "【onPressed】: Événement de clic 【Function】", - " Si onPressed est vide, la pile actuelle sera quittée" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_it_IT.json deleted file mode 100644 index 15d82d523..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "Pulsante Indietro", - "info": "Un IconButton con funzionalità di ritorno, l'icona di ritorno non può essere modificata. Si comporta diversamente in iOS e Android.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Proprietà del BackButton", - "desc": [ - "【color】: Colore 【Color】", - "【style】: Stile del pulsante 【ButtonStyle?】", - "【onPressed】: Evento di clic 【Function】", - " Se onPressed è vuoto, uscirà dallo stack corrente" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ja_JP.json deleted file mode 100644 index 12bbc9f55..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "戻るボタン", - "info": "戻る機能を持つIconButtonで、戻るアイコンは変更できません。iOSとAndroidでは異なる動作をします。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButton属性", - "desc": [ - "【color】: 色 【Color】", - "【style】: ボタンスタイル 【ButtonStyle?】", - "【onPressed】: クリックイベント 【Function】", - " onPressedが空の場合、現在のスタックを終了します" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ko_KR.json deleted file mode 100644 index 52da81318..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "뒤로 가기 버튼", - "info": "뒤로 가기 기능을 가진 IconButton, 뒤로 가기 아이콘은 변경할 수 없습니다. iOS와 Android에서 다르게 동작합니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButton 속성", - "desc": [ - "【color】: 색상 【Color】", - "【style】: 버튼 스타일 【ButtonStyle?】", - "【onPressed】: 클릭 이벤트 【Function】", - "onPressed가 비어 있으면 현재 스택에서 빠져나옵니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_pt_PT.json deleted file mode 100644 index 17115929c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "Botão de Voltar", - "info": "Um IconButton com função de voltar, o ícone de voltar não pode ser alterado. Comporta-se de forma diferente no iOS e no Android.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propriedades do BackButton", - "desc": [ - "【color】: Cor 【Color】", - "【style】: Estilo do botão 【ButtonStyle?】", - "【onPressed】: Evento de clique 【Function】", - "Se onPressed estiver vazio, a pilha atual será encerrada" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ru_RU.json deleted file mode 100644 index 310f813db..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "Кнопка возврата", - "info": "IconButton с функцией возврата, значок возврата нельзя изменить. По-разному ведет себя в iOS и Android", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Свойства BackButton", - "desc": [ - "【color】: Цвет 【Color】", - "【style】: Стиль кнопки 【ButtonStyle?】", - "【onPressed】: Событие нажатия 【Function】", - "Если onPressed пуст, текущий стек будет завершен" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_zh-CN.json deleted file mode 100644 index 4806e8bc3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "返回按钮", - "info": "一个具有返回功能的IconButton,返回图标不可更改。在iOS和Android中表现不同", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButton属性", - "desc": [ - "【color】: 颜色 【Color】", - "【style】: 按钮样式 【ButtonStyle?】", - "【onPressed】: 点击事件 【Function】", - " onPressed为空会退出当前栈" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/node1_base.dart deleted file mode 100644 index e51f70a73..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/node1_base.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class CustomBackButton extends StatelessWidget { - const CustomBackButton({super.key}); - - List get data => [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: data - .map((e) => BackButton( - color: e, - )) - .toList()); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_de_DE.json deleted file mode 100644 index cfce90a8a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "Zurück-Button-Icon", - "info": "Ein Rück-Icon, das je nach Plattform das entsprechende Icon anzeigt. Das Thema kann über ActionIconTheme angepasst werden.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButtonIcon-Effekt", - "desc": [ - "Das _ActionIcon-Widget passt das Rück-Button-Icon basierend auf dem ActionIconTheme an die jeweilige Plattform an." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_en_US.json deleted file mode 100644 index 013efdd99..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "Back Button Icon", - "info": "A return Icon icon, displaying the corresponding icon according to the platform, and the theme can be customized through ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButtonIcon Effect", - "desc": [ - "The _ActionIcon component adapts the back button icon for different platforms according to the ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_es_ES.json deleted file mode 100644 index b4dcc7b7c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "Icono de botón de retroceso", - "info": "Un icono de retroceso, muestra el icono correspondiente según la plataforma, se puede personalizar el tema a través de ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Efecto de BackButtonIcon", - "desc": [ - "El componente _ActionIcon adapta el icono del botón de retroceso para diferentes plataformas según el tema de ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_fr_FR.json deleted file mode 100644 index 2448d2894..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "Icône de bouton de retour", - "info": "Une icône de retour, affichant l'icône correspondante selon la plateforme, qui peut être personnalisée via ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Effet de BackButtonIcon", - "desc": [ - "Le composant _ActionIcon adapte l'icône de bouton de retour à différentes plateformes selon le thème ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_it_IT.json deleted file mode 100644 index 9754d6102..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "Icona del pulsante Indietro", - "info": "Un'icona di ritorno, che mostra l'icona corrispondente in base alla piattaforma, può essere personalizzata tramite ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Effetto BackButtonIcon", - "desc": [ - "Attraverso il componente _ActionIcon, adatta l'icona del pulsante Indietro per diverse piattaforme in base al tema ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ja_JP.json deleted file mode 100644 index 71e0b52ae..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "戻るボタンアイコン", - "info": "戻るアイコンで、プラットフォームに応じたアイコンを表示し、ActionIconThemeでテーマをカスタマイズできます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButtonIcon 効果", - "desc": [ - "_ActionIconコンポーネントを使用して、ActionIconThemeテーマに基づいて、異なるプラットフォームの戻るボタンアイコンを適応させます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ko_KR.json deleted file mode 100644 index 64ea426a3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "뒤로 가기 버튼 아이콘", - "info": "플랫폼에 따라 해당 아이콘을 표시하는 뒤로 가기 Icon 아이콘입니다. ActionIconTheme을 통해 테마를 사용자 정의할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButtonIcon 효과", - "desc": [ - "ActionIconTheme 테마에 따라 _ActionIcon 컴포넌트를 사용하여 다른 플랫폼의 뒤로 가기 버튼 아이콘을 적응시킵니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_pt_PT.json deleted file mode 100644 index 598f57cd4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "Ícone do botão de voltar", - "info": "Um ícone de retorno, que exibe o ícone correspondente de acordo com a plataforma, pode ser personalizado com o tema ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Efeito do BackButtonIcon", - "desc": [ - "O componente _ActionIcon adapta o ícone do botão de voltar para diferentes plataformas com base no tema ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ru_RU.json deleted file mode 100644 index 2d572f030..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "Иконка кнопки возврата", - "info": "Иконка возврата, которая отображает соответствующую иконку в зависимости от платформы. Можно настроить тему через ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Эффект BackButtonIcon", - "desc": [ - "Компонент _ActionIcon адаптирует иконку кнопки возврата для разных платформ в соответствии с темой ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_zh-CN.json deleted file mode 100644 index 1a3a42731..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "返回按钮图标", - "info": "一个返回 Icon 图标, 根据平台展示对应的图标,可以通过 ActionIconTheme 定制主题。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButtonIcon 效果", - "desc": [ - "通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的返回按钮图标。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/node1_base.dart deleted file mode 100644 index 1f39e5634..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/node1_base.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/11/28 -/// contact me by email 1981462002@qq.com - -class BackButtonIconDemo extends StatelessWidget { - const BackButtonIconDemo({super.key}); - - @override - Widget build(BuildContext context) { - return const BackButtonIcon(); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_de_DE.json deleted file mode 100644 index a3f266228..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_de_DE.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "Kennzeichnungskomponente", - "info": "Badge ist eine Komponente im Material-Stil, die eine Markierung über einem Kindelement hinzufügen kann. Beim Aufbau wird die Stack-Komponente für die Überlagerung verwendet.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Verwendung von Badge-Punktmarkierungen", - "desc": [ - "【backgroundColor】 : Hintergrundfarbe 【Color?】", - "【isLabelVisible】 : Sichtbarkeit der Markierung 【bool】", - "【smallSize】 : Durchmesser ohne Label 【double?】", - "【child】 : Kindelement 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Badge-Label-Markierung", - "desc": [ - "【label】 : Titelkomponente 【Widget?】", - "【textStyle】 : Titeltextstil 【TextStyle?】", - "【textColor】 : Titeltextfarbe 【Color?】", - "【padding】 : Titelabstand 【EdgeInsetsGeometry?】", - "【largeSize】 : Höhe mit Label 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Versatz von Badge", - "desc": [ - "【offset】 : Versatz der Markierung 【Offset?】", - "【alignment】 : Titelversatz 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_en_US.json deleted file mode 100644 index 662c3bc9e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_en_US.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "Badge Component", - "info": "Badge is a Material-style component that can add markers on top of the child. It relies on the Stack component for layering during construction.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Usage of Badge Dot Marker", - "desc": [ - "【backgroundColor】: Background color 【Color?】", - "【isLabelVisible】: Whether to display the marker 【bool】", - "【smallSize】: Diameter when there is no label 【double?】", - "【child】: Child component 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Badge Label Marker", - "desc": [ - "【label】: Title component 【Widget?】", - "【textStyle】: Title color 【TextStyle?】", - "【textColor】: Title style 【Color?】", - "【padding】: Title margin 【EdgeInsetsGeometry?】", - "【largeSize】: Height when there is a label 【double?】" - ] - }, - { - "file": "node_3.dart", - "name": "Badge Offset", - "desc": [ - "【offset】: Marker offset 【Offset?】", - "【alignment】: Title offset 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_es_ES.json deleted file mode 100644 index 54ab567e3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_es_ES.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "Componente de marcador", - "info": "Badge es un componente de estilo Material que puede agregar un marcador sobre el child, dependiendo del componente Stack para la superposición durante la construcción.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Uso del marcador de punto Badge", - "desc": [ - "【backgroundColor】 : Color de fondo 【Color?】", - "【isLabelVisible】 : Si se muestra el marcador 【bool】", - "【smallSize】 : Diámetro sin etiqueta 【double?】", - "【child】 : Componente hijo 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Marcador de etiqueta Badge", - "desc": [ - "【label】 : Componente de título 【Widget?】", - "【textStyle】 : Color del título 【TextStyle?】", - "【textColor】 : Estilo del título 【Color?】", - "【padding】 : Márgenes del título 【EdgeInsetsGeometry?】", - "【largeSize】 : Altura con etiqueta 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Desplazamiento del Badge", - "desc": [ - "【offset】 : Desplazamiento del marcador 【Offset?】", - "【alignment】 : Desplazamiento del título 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_fr_FR.json deleted file mode 100644 index 081f19815..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_fr_FR.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "Composant de marquage", - "info": "Badge est un composant de style Material qui peut ajouter des marqueurs au-dessus d'un enfant, dépendant du composant Stack pour l'empilement lors de la construction.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Utilisation du badge en point", - "desc": [ - "【backgroundColor】 : Couleur de fond 【Color?】", - "【isLabelVisible】 : Afficher le marqueur 【bool】", - "【smallSize】 : Diamètre sans étiquette 【double?】", - "【child】 : Composant enfant 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Badge avec étiquette", - "desc": [ - "【label】 : Composant de titre 【Widget?】", - "【textStyle】 : Couleur du titre 【TextStyle?】", - "【textColor】 : Style du titre 【Color?】", - "【padding】 : Marge du titre 【EdgeInsetsGeometry?】", - "【largeSize】 : Hauteur avec étiquette 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Décalage du badge", - "desc": [ - "【offset】 : Décalage du marqueur 【Offset?】", - "【alignment】 : Décalage du titre 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_it_IT.json deleted file mode 100644 index ad52a654f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_it_IT.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "Componente Badge", - "info": "Badge è un componente in stile Material che aggiunge un segnalino sopra il child, dipendendo dal componente Stack per la sovrapposizione durante la costruzione.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Uso del Badge con punto", - "desc": [ - "【backgroundColor】 : Colore di sfondo 【Color?】", - "【isLabelVisible】 : Visibilità del segnalino 【bool】", - "【smallSize】 : Diametro senza etichetta 【double?】", - "【child】 : Componente figlio 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Badge con etichetta", - "desc": [ - "【label】 : Componente del titolo 【Widget?】", - "【textStyle】 : Colore del titolo 【TextStyle?】", - "【textColor】 : Stile del titolo 【Color?】", - "【padding】 : Margine del titolo 【EdgeInsetsGeometry?】", - "【largeSize】 : Altezza con etichetta 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Offset del Badge", - "desc": [ - "【offset】 : Offset del segnalino 【Offset?】", - "【alignment】 : Offset del titolo 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ja_JP.json deleted file mode 100644 index 5a80853c3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ja_JP.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "バッジコンポーネント", - "info": "Badge は Material スタイルのコンポーネントで、child の上にマーカーを追加できます。構築時には Stack コンポーネントに依存して重ねられます。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Badge ドットマーカーの使用", - "desc": [ - "【backgroundColor】 : 背景色 【Color?】", - "【isLabelVisible】 : マーカーを表示するかどうか 【bool】", - "【smallSize】 : ラベルがない場合の直径 【double?】", - "【child】 : 子コンポーネント 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Badge ラベルマーカー", - "desc": [ - "【label】 : タイトルコンポーネント 【Widget?】", - "【textStyle】 : タイトルの色 【TextStyle?】", - "【textColor】 : タイトルのスタイル 【Color?】", - "【padding】 : タイトルの余白 【EdgeInsetsGeometry?】", - "【largeSize】 : ラベルがある場合の高さ 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Badge のオフセット", - "desc": [ - "【offset】 : マーカーのオフセット 【Offset?】", - "【alignment】 : タイトルのオフセット 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ko_KR.json deleted file mode 100644 index 56527a315..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ko_KR.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "배지 컴포넌트", - "info": "Badge는 Material 스타일의 컴포넌트로, child 위에 배지를 추가할 수 있으며, Stack 컴포넌트를 사용하여 겹쳐서 구성됩니다.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Badge 점 표시 사용", - "desc": [ - "【backgroundColor】 : 배경색 【Color?】", - "【isLabelVisible】 : 표시 여부 【bool】", - "【smallSize】 : 라벨 없을 때 직경 【double?】", - "【child】 : 하위 컴포넌트 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Badge 라벨 표시", - "desc": [ - "【label】 : 제목 컴포넌트 【Widget?】", - "【textStyle】 : 제목 색상 【TextStyle?】", - "【textColor】 : 제목 스타일 【Color?】", - "【padding】 : 제목 여백 【EdgeInsetsGeometry?】", - "【largeSize】 : 라벨 있을 때 높이 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Badge의 오프셋", - "desc": [ - "【offset】 : 배지 오프셋 【Offset?】", - "【alignment】 : 제목 오프셋 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_pt_PT.json deleted file mode 100644 index e53be402f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_pt_PT.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "Componente de Marcação", - "info": "O Badge é um componente de estilo Material que pode adicionar uma marcação sobreposta a um filho, dependendo do componente Stack para sobreposição durante a construção.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Uso do Badge com Marcação de Ponto", - "desc": [ - "【backgroundColor】 : Cor de fundo 【Color?】", - "【isLabelVisible】 : Se a marcação é visível 【bool】", - "【smallSize】 : Diâmetro sem etiqueta 【double?】", - "【child】 : Componente filho 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Badge com Marcação de Etiqueta", - "desc": [ - "【label】 : Componente de título 【Widget?】", - "【textStyle】 : Cor do título 【TextStyle?】", - "【textColor】 : Estilo do título 【Color?】", - "【padding】 : Margem do título 【EdgeInsetsGeometry?】", - "【largeSize】 : Altura com etiqueta 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Deslocamento do Badge", - "desc": [ - "【offset】 : Deslocamento da marcação 【Offset?】", - "【alignment】 : Deslocamento do título 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ru_RU.json deleted file mode 100644 index 8e577d2eb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ru_RU.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "Компонент метки", - "info": "Badge — это компонент в стиле Material, который может добавлять маркеры поверх дочернего элемента, при построении он зависит от компонента Stack для наложения.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Использование круглой метки Badge", - "desc": [ - "【backgroundColor】 : Цвет фона 【Color?】", - "【isLabelVisible】 : Видимость метки 【bool】", - "【smallSize】 : Диаметр без метки 【double?】", - "【child】 : Дочерний компонент 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Метка Badge с текстом", - "desc": [ - "【label】 : Компонент заголовка 【Widget?】", - "【textStyle】 : Цвет заголовка 【TextStyle?】", - "【textColor】 : Стиль заголовка 【Color?】", - "【padding】 : Отступы заголовка 【EdgeInsetsGeometry?】", - "【largeSize】 : Высота с меткой 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Смещение Badge", - "desc": [ - "【offset】 : Смещение метки 【Offset?】", - "【alignment】 : Смещение заголовка 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_zh-CN.json deleted file mode 100644 index c14d74fd2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_zh-CN.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "标记组件", - "info": "Badge 是一种 Material 风格的组件,可以在 child 上层添加标记物,构建时依赖 Stack 组件进行叠放。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Badge 圆点标记的使用", - "desc": [ - "【backgroundColor】 : 背景色 【Color?】", - "【isLabelVisible】 : 是否显示标记 【bool】", - "【smallSize】 : 无标签时直径 【double?】", - "【child】 : 子组件 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Badge 标签标记", - "desc": [ - "【label】 : 标题组件 【Widget?】", - "【textStyle】 : 标题颜色 【TextStyle?】", - "【textColor】 : 标题样式 【Color?】", - "【padding】 : 标题边距 【EdgeInsetsGeometry?】", - "【largeSize】 : 有标签时高度 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Badge 的偏移量", - "desc": [ - "【offset】 : 标记偏移量 【Offset?】", - "【alignment】 : 标题偏移 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_1.dart b/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_1.dart deleted file mode 100644 index f5173c384..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_1.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/01/27 -/// contact me by email 1981462002@qq.com - - -class BadgeDemo extends StatelessWidget { - const BadgeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const Wrap( - spacing: 20, - children: [ - Badge( - backgroundColor: Colors.redAccent, - smallSize: 10, - child: Icon(Icons.update,size: 36,color: Colors.green,), - ), - Badge( - backgroundColor: Colors.redAccent, - smallSize: 10, - isLabelVisible: false, - child: Icon(Icons.update,size: 36,color: Colors.green,), - ), - ], - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_2.dart b/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_2.dart deleted file mode 100644 index 73cf887d8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_2.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/01/27 -/// contact me by email 1981462002@qq.com - - -class BadgeLabelDemo extends StatelessWidget { - const BadgeLabelDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const Badge( - backgroundColor: Colors.red, - label: Text('99'), - textStyle: TextStyle(fontSize: 8,color: Colors.red), - padding: EdgeInsets.symmetric(horizontal: 8,vertical: 2), - largeSize: 14, - child: Icon(Icons.message,size: 36,color: Colors.indigo,), - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_3.dart b/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_3.dart deleted file mode 100644 index e815b2398..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_3.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/01/27 -/// contact me by email 1981462002@qq.com - - -class BadgeAlignOffsetDemo extends StatelessWidget { - const BadgeAlignOffsetDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - final List info = ['默认偏移和对齐', '偏移-4,-4', '偏移-2,-2;右下角']; - final List offsets = [ - null, - const Offset(-4, -4), - const Offset(-2, -2) - ]; - final List alignments = [null, null, Alignment.bottomRight]; - - return Wrap( - spacing: 40, - children: info - .asMap() - .keys - .map((int i) => _buildShowItem(info[i], offsets[i], alignments[i])) - .toList(), - ); - } - - Widget _buildShowItem(String info, Offset? offset, Alignment? alignment) { - return Wrap( - spacing: 8, - direction: Axis.vertical, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Badge( - backgroundColor: Colors.red, - label: const Text('99'), - textStyle: const TextStyle(fontSize: 8, color: Colors.red), - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 2), - largeSize: 14, - offset: offset, - alignment: alignment, - child: const Icon(Icons.message, size: 36, color: Colors.indigo), - ), - Text( - info, - style: const TextStyle(fontSize: 10, color: Colors.grey), - ) - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_de_DE.json deleted file mode 100644 index dac9cc9b7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "Banner-Komponente", - "info": "Komponente zur Anzeige von Bannern. Kann eine Unterkomponente aufnehmen, ermöglicht die Auswahl der Position für das Banner und den Text sowie die Einstellung der Farbe.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Zur Anzeige eines Banners", - "desc": [ - "【message】 : Angezeigte Textnachricht 【String】", - "【location】 : Position*4 【BannerLocation】", - "【color】: Bannerfarbe 【Color】", - "【child】: Kind 【Widget】", - "【textStyle】: Textstil 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_en_US.json deleted file mode 100644 index a51113065..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "Badge Component", - "info": "A component for displaying badges. It can accommodate one child component, allows for the selection of orientation to add badges and informational text, and can set colors.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Used to display a badge", - "desc": [ - "【message】: The text message to display 【String】", - "【location】: Position*4 【BannerLocation】", - "【color】: Badge color 【Color】", - "【child】: Child 【Widget】", - "【textStyle】: Text style 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_es_ES.json deleted file mode 100644 index 237d2e60c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "Componente de insignia", - "info": "Componente para mostrar insignias. Puede contener un subcomponente, permite elegir la ubicación para agregar la insignia y el texto informativo, y permite configurar el color.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Para mostrar una insignia", - "desc": [ - "【message】 : Información de texto a mostrar 【String】", - "【location】 : Ubicación*4 【BannerLocation】", - "【color】: Color de la insignia 【Color】", - "【child】: Hijo 【Widget】", - "【textStyle】: Estilo del texto 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_fr_FR.json deleted file mode 100644 index 90aa4a5c7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "Composant de badge", - "info": "Composant pour l'affichage de badges. Peut contenir un composant enfant, permet de choisir l'emplacement pour ajouter un badge et du texte d'information, et de définir la couleur.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisé pour afficher un badge", - "desc": [ - "【message】 : Informations textuelles affichées 【String】", - "【location】 : Position*4 【BannerLocation】", - "【color】: Couleur du badge 【Color】", - "【child】: Enfant 【Widget】", - "【textStyle】: Style de texte 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_it_IT.json deleted file mode 100644 index c31554082..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "Componente Banner", - "info": "Componente per la visualizzazione di banner. Può contenere un componente figlio, permette di scegliere la posizione del banner e il testo informativo, e di impostare il colore.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzato per visualizzare un banner", - "desc": [ - "【message】 : Informazioni di testo visualizzate 【String】", - "【location】 : Posizione*4 【BannerLocation】", - "【color】: Colore del banner 【Color】", - "【child】: Figlio 【Widget】", - "【textStyle】: Stile del testo 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ja_JP.json deleted file mode 100644 index c36e9bd49..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "バナーコンポーネント", - "info": "バナー表示用のコンポーネントです。1つの子コンポーネントを収容でき、バナーと情報テキストを追加する位置を選択し、色を設定できます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "バナーを表示するために使用されます", - "desc": [ - "【message】 : 表示するテキスト情報 【String】", - "【location】 : 位置*4 【BannerLocation】", - "【color】: バナー色 【Color】", - "【child】: 子 【Widget】", - "【textStyle】: テキストスタイル 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ko_KR.json deleted file mode 100644 index e264df6fb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "배너 컴포넌트", - "info": "배너 표시를 위한 컴포넌트입니다. 하나의 자식 컴포넌트를 포함할 수 있으며, 배너 및 정보 텍스트를 추가할 위치를 선택할 수 있고, 색상을 설정할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "배너를 표시하는 데 사용", - "desc": [ - "【message】 : 표시할 텍스트 정보 【String】", - "【location】 : 위치*4 【BannerLocation】", - "【color】: 배너 색상 【Color】", - "【child】: 자식 【Widget】", - "【textStyle】: 텍스트 스타일 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_pt_PT.json deleted file mode 100644 index ed6402585..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "Componente de Banner", - "info": "Componente para exibição de banner. Pode conter um componente filho, permite escolher a posição para adicionar o banner e o texto informativo, e permite definir a cor.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Usado para exibir um banner", - "desc": [ - "【message】 : Informação de texto exibida 【String】", - "【location】 : Posição*4 【BannerLocation】", - "【color】: Cor do banner 【Color】", - "【child】: Filho 【Widget】", - "【textStyle】: Estilo de texto 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ru_RU.json deleted file mode 100644 index cbdc79154..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "Компонент для отображения уголка", - "info": "Компонент для отображения уголка. Может содержать один дочерний компонент, позволяет выбрать место для добавления уголка и текстовой информации, можно настроить цвет.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Для отображения уголка", - "desc": [ - "【message】 : Отображаемое текстовое сообщение 【String】", - "【location】 : Позиция*4 【BannerLocation】", - "【color】: Цвет уголка 【Color】", - "【child】: Дочерний элемент 【Widget】", - "【textStyle】: Стиль текста 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_zh-CN.json deleted file mode 100644 index 7b2765d2e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "角标组件", - "info": "用于角标显示的组件。可容纳一个子组件,可选择方位添加角标及信息文字,可设置颜色。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "用于显示一个角标", - "desc": [ - "【message】 : 显示的文字信息 【String】", - "【location】 : 位置*4 【BannerLocation】", - "【color】: 角标颜色 【Color】", - "【child】: 孩子 【Widget】", - "【textStyle】: 文字样式 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Banner/node1_base.dart deleted file mode 100644 index 884b61031..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/node1_base.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - - -class CustomBanner extends StatelessWidget { - const CustomBanner({super.key}); - - Map get data => { - BannerLocation.topStart: Colors.red, - BannerLocation.bottomStart: Colors.green, - BannerLocation.bottomEnd: Colors.orange, - BannerLocation.topEnd: Colors.blue, - - }; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - runSpacing: 10, - children: data.keys - .map((BannerLocation location) => Container( - color: const Color(0xffD8F5FF), - width: 150, - height: 150 * 0.618, - child: Banner( - message: "Flutter 3.29.0 发布", - location: location, - textStyle: TextStyle(fontSize: 8,height: 1), - color: data[location]!, - child: const Padding( - padding: EdgeInsets.all(20), - child: FlutterLogo( - textColor: Colors.blue, - style: FlutterLogoStyle.horizontal, - )), - ), - )).toList()); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_de_DE.json deleted file mode 100644 index 24a1898bf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "Unterer Schublade", - "info": "Als Komponente ist es eine einfache Strukturkomponente, die Form, Schattentiefe, Hintergrundfarbe und interne Komponentenkonstruktoren angeben kann. Es wird normalerweise durch die showBottomSheet-Methode von ScaffoldState von unten eingeblendet.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von BottomSheet", - "desc": [ - "【builder】 : Komponentenkonstruktor 【WidgetBuilder】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【elevation】 : Schattentiefe 【double】", - "【shape】 : Form 【ShapeBorder】", - "【onClosing】 : Schließrückruf 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_en_US.json deleted file mode 100644 index 6c7e7bb96..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "Bottom Drawer", - "info": "As a component, it is a simple structural component that can specify shape, shadow depth, background color, and internal component constructors. It generally pops up from the bottom through the showBottomSheet method of ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of BottomSheet", - "desc": [ - "【builder】: Component constructor 【WidgetBuilder】", - "【backgroundColor】: Background color 【Color】", - "【elevation】: Shadow depth 【double】", - "【shape】: Shape 【ShapeBorder】", - "【onClosing】: Closing callback 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_es_ES.json deleted file mode 100644 index d919c8110..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "Cajón Inferior", - "info": "Como componente, es una estructura simple que puede especificar forma, profundidad de sombra, color de fondo y constructor de componentes internos. Generalmente se despliega desde la parte inferior mediante el método showBottomSheet de ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de BottomSheet", - "desc": [ - "【builder】 : Constructor de componentes 【WidgetBuilder】", - "【backgroundColor】 : Color de fondo 【Color】", - "【elevation】 : Profundidad de sombra 【double】", - "【shape】 : Forma 【ShapeBorder】", - "【onClosing】 : Callback de cierre 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_fr_FR.json deleted file mode 100644 index 05e874ce6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "Tiroir inférieur", - "info": "En tant que composant, il s'agit d'un composant structurel simple qui peut spécifier la forme, la profondeur de l'ombre, la couleur de fond, le constructeur de composants internes, etc. Il est généralement affiché à partir du bas via la méthode showBottomSheet de ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de BottomSheet", - "desc": [ - "【builder】 : Constructeur de composant 【WidgetBuilder】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【elevation】 : Profondeur de l'ombre 【double】", - "【shape】 : Forme 【ShapeBorder】", - "【onClosing】 : Rappel de fermeture 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_it_IT.json deleted file mode 100644 index 9bf4f91d0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "Cassetto inferiore", - "info": "Come componente, è una struttura semplice che può specificare forma, profondità dell'ombra, colore di sfondo, costruttore di componenti interni. Di solito viene visualizzato dal basso tramite il metodo showBottomSheet di ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di BottomSheet", - "desc": [ - "【builder】 : Costruttore del componente 【WidgetBuilder】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【elevation】 : Profondità dell'ombra 【double】", - "【shape】 : Forma 【ShapeBorder】", - "【onClosing】 : Callback di chiusura 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ja_JP.json deleted file mode 100644 index 1bf8340af..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "ボトムシート", - "info": "コンポーネントとして、シンプルな構造コンポーネントであり、形状、影の深さ、背景色、内部コンポーネントのビルダーなどを指定できます。一般的にはScaffoldStateのshowBottomSheetメソッドを使用して下部からポップアップします。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomSheetの基本使用", - "desc": [ - "【builder】 : コンポーネントビルダー 【WidgetBuilder】", - "【backgroundColor】 : 背景色 【Color】", - "【elevation】 : 影の深さ 【double】", - "【shape】 : 形状 【ShapeBorder】", - "【onClosing】 : 閉じるコールバック 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ko_KR.json deleted file mode 100644 index d6ea73ed1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "하단 서랍", - "info": "컴포넌트로서는 간단한 구조 컴포넌트이며, 모양, 그림자 깊이, 배경색, 내부 컴포넌트 빌더 등을 지정할 수 있습니다. 일반적으로 ScaffoldState의 showBottomSheet 메소드를 통해 하단에서 팝업됩니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomSheet 기본 사용", - "desc": [ - "【builder】 : 컴포넌트 빌더 【WidgetBuilder】", - "【backgroundColor】 : 배경색 【Color】", - "【elevation】 : 그림자 깊이 【double】", - "【shape】 : 모양 【ShapeBorder】", - "【onClosing】 : 닫기 콜백 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_pt_PT.json deleted file mode 100644 index 252fc7b06..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "Gaveta Inferior", - "info": "Como componente, é uma estrutura simples que pode especificar forma, profundidade de sombra, cor de fundo, construtor de componentes internos, etc. Geralmente é exibido a partir da parte inferior através do método showBottomSheet do ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do BottomSheet", - "desc": [ - "【builder】: Construtor de Componentes 【WidgetBuilder】", - "【backgroundColor】: Cor de Fundo 【Color】", - "【elevation】: Profundidade de Sombra 【double】", - "【shape】: Forma 【ShapeBorder】", - "【onClosing】: Callback de Fechamento 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ru_RU.json deleted file mode 100644 index 777a625a3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "Нижний ящик", - "info": "Как компонент, это простая структурная компонента, которая может быть настроена по форме, глубине тени, цвету фона и конструктору внутренних компонентов. Обычно появляется снизу с помощью метода showBottomSheet ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование BottomSheet", - "desc": [ - "【builder】 : Конструктор компонентов 【WidgetBuilder】", - "【backgroundColor】 : Цвет фона 【Color】", - "【elevation】 : Глубина тени 【double】", - "【shape】 : Форма 【ShapeBorder】", - "【onClosing】 : Обратный вызов при закрытии 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_zh-CN.json deleted file mode 100644 index afe4e4994..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "底部抽屉", - "info": "作为组件来说是一个简单的结构组件,可指定形状、影深、背景色、内部组件构造器等。一般通过ScaffoldState的showBottomSheet方法从底部弹出。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomSheet基本使用", - "desc": [ - "【builder】 : 组件构造器 【WidgetBuilder】", - "【backgroundColor】 : 背景色 【Color】", - "【elevation】 : 影深 【double】", - "【shape】 : 形状 【ShapeBorder】", - "【onClosing】 : 关闭回调 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/node1_base.dart deleted file mode 100644 index 36364e8ac..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/node1_base.dart +++ /dev/null @@ -1,53 +0,0 @@ -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; - -class CustomBottomSheet extends StatefulWidget { - const CustomBottomSheet({Key? key}) : super(key: key); - - @override - _CustomBottomSheetState createState() => _CustomBottomSheetState(); -} - -class _CustomBottomSheetState extends State { - bool opened = false; - - @override - Widget build(BuildContext context) { - return ElevatedButton( - onPressed: () { - opened = !opened; - opened - ? Scaffold.of(context).showBottomSheet((_) => _buildBottomSheet()) - : Navigator.of(context).pop(); - }, - child: const Text( - '点我显隐BottomSheet', - style: TextStyle(color: Colors.white), - )); - } - - Widget _buildBottomSheet() => BottomSheet( - enableDrag: true, - elevation: 4, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topRight: Radius.circular(60), - topLeft: Radius.circular(60), - )), - backgroundColor: Colors.transparent, - onClosing: () => print('onClosing'), - builder: (_) => (Container( - height: 250, - decoration: const BoxDecoration( - image: DecorationImage( - image: AssetImage('assets/images/sabar_bar.webp'), - fit: BoxFit.cover), - borderRadius: BorderRadius.only( - topRight: Radius.circular(60), - topLeft: Radius.circular(60), - )), - ))); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_de_DE.json deleted file mode 100644 index 5d5b14ba1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "BoxScrollView", - "info": "BoxScrollView ist eine abstrakte Klasse, die von ScrollView erbt und daher nicht direkt verwendet werden kann. Seine Unterklassen sind ListView und GridView. Normalerweise wird keine eigene Unterklasse implementiert, um es zu verwenden.", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BoxScrollView Einführung", - "desc": [ - "【reverse】 : Ob umgekehrt 【bool】", - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【cacheExtent】 : Cache-Länge 【double】", - "【dragStartBehavior】 : Ziehverhalten 【DragStartBehavior】", - "【clipBehavior】 : Beschneidungsverhalten 【ClipBehavior】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_en_US.json deleted file mode 100644 index b1f438571..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "Box Scroll View", - "info": "BoxScrollView is an abstract class that inherits from ScrollView, so it cannot be used directly. Its subclasses include ListView and GridView. Generally, you do not implement subclasses to use it.", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to BoxScrollView", - "desc": [ - "【reverse】 : Whether to reverse 【bool】", - "【scrollDirection】 : Scroll direction 【Axis】", - "【cacheExtent】 : Cache length 【double】", - "【dragStartBehavior】 : Drag start behavior 【DragStartBehavior】", - "【clipBehavior】 : Clip behavior 【ClipBehavior】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_es_ES.json deleted file mode 100644 index a121e0ac0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "Vista de desplazamiento de caja", - "info": "BoxScrollView es una clase abstracta que hereda de ScrollView, por lo que no se puede usar directamente. Sus subclases son ListView y GridView. Generalmente no se implementa una subclase para usarla", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a BoxScrollView", - "desc": [ - "【reverse】 : ¿Invertido? 【bool】", - "【scrollDirection】 : Dirección de desplazamiento 【Axis】", - "【cacheExtent】 : Longitud de caché 【double】", - "【dragStartBehavior】 : Comportamiento de arrastre 【DragStartBehavior】", - "【clipBehavior】 : Comportamiento de recorte 【ClipBehavior】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_fr_FR.json deleted file mode 100644 index 3e5554276..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "Vue de défilement de boîte", - "info": "BoxScrollView est une classe abstraite héritée de ScrollView, donc elle ne peut pas être utilisée directement. Ses sous-classes incluent ListView et GridView. Généralement, on ne l'utilise pas en implémentant une sous-classe soi-même.", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à BoxScrollView", - "desc": [ - "【reverse】 : Inverser ou non 【bool】", - "【scrollDirection】 : Direction de défilement 【Axis】", - "【cacheExtent】 : Longueur du cache 【double】", - "【dragStartBehavior】 : Comportement de glissement 【DragStartBehavior】", - "【clipBehavior】 : Comportement de découpage 【ClipBehavior】", - "【controller】 : Contrôleur 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_it_IT.json deleted file mode 100644 index 72c02fbe7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "Vista a scorrimento a scatola", - "info": "BoxScrollView è una classe astratta che eredita da ScrollView, quindi non può essere utilizzata direttamente. Le sue sottoclassi includono ListView e GridView. Generalmente non si implementa una sottoclasse per utilizzarla", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a BoxScrollView", - "desc": [ - "【reverse】 : Se invertire 【bool】", - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【cacheExtent】 : Estensione della cache 【double】", - "【dragStartBehavior】 : Comportamento di trascinamento 【DragStartBehavior】", - "【clipBehavior】 : Comportamento di ritaglio 【ClipBehavior】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ja_JP.json deleted file mode 100644 index 7c974d575..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "ボックススクロールビュー", - "info": "BoxScrollView は ScrollView を継承した抽象クラスであるため、直接使用することはできません。そのサブクラスには ListView や GridView があります。通常、自分でサブクラスを実装して使用することはありません。", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BoxScrollView 紹介", - "desc": [ - "【reverse】 : 逆方向かどうか 【bool】", - "【scrollDirection】 : スクロール方向 【Axis】", - "【cacheExtent】 : キャッシュの長さ 【double】", - "【dragStartBehavior】 : ドラッグ開始の動作 【DragStartBehavior】", - "【clipBehavior】 : クリップ動作 【ClipBehavior】", - "【controller】 : コントローラー 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ko_KR.json deleted file mode 100644 index 116839dd6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "박스 스크롤 뷰", - "info": "BoxScrollView는 ScrollView에서 상속된 추상 클래스이므로 직접 사용할 수 없습니다. 그 하위 클래스로는 ListView, GridView가 있습니다. 일반적으로 직접 하위 클래스를 구현하여 사용하지 않습니다.", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BoxScrollView 소개", - "desc": [ - "【reverse】 : 역방향 여부 【bool】", - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【cacheExtent】 : 캐시 길이 【double】", - "【dragStartBehavior】 : 드래그 시작 동작 【DragStartBehavior】", - "【clipBehavior】 : 클리핑 동작 【ClipBehavior】", - "【controller】 : 컨트롤러 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_pt_PT.json deleted file mode 100644 index 7f91210a1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "Visualização de Rolagem de Caixa", - "info": "BoxScrollView é uma classe abstrata que herda de ScrollView, portanto, não pode ser usada diretamente. Suas subclasses incluem ListView e GridView. Geralmente, não se implementa subclasses para usá-la.", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao BoxScrollView", - "desc": [ - "【reverse】 : Se é reverso 【bool】", - "【scrollDirection】 : Direção de rolagem 【Axis】", - "【cacheExtent】 : Extensão do cache 【double】", - "【dragStartBehavior】 : Comportamento de arrasto 【DragStartBehavior】", - "【clipBehavior】 : Comportamento de recorte 【ClipBehavior】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ru_RU.json deleted file mode 100644 index e0fd153b6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "Прокручиваемое представление коробки", - "info": "BoxScrollView — это абстрактный класс, который наследуется от ScrollView, поэтому его нельзя использовать напрямую. Его подклассы включают ListView и GridView. Обычно не рекомендуется самостоятельно реализовывать подклассы для его использования.", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в BoxScrollView", - "desc": [ - "【reverse】 : Обратный порядок 【bool】", - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【cacheExtent】 : Размер кэша 【double】", - "【dragStartBehavior】 : Поведение при перетаскивании 【DragStartBehavior】", - "【clipBehavior】 : Поведение обрезки 【ClipBehavior】", - "【controller】 : Контроллер 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_zh-CN.json deleted file mode 100644 index 398232fe2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "盒滑动视图", - "info": "BoxScrollView 是一个继承自 ScrollView 的抽象类,所以无法直接使用,它的子类有 ListView、GridView。一般不自己实现子类使用它", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BoxScrollView 介绍", - "desc": [ - "【reverse】 : 是否反向 【bool】", - "【scrollDirection】 : 滑动方向 【Axis】", - "【cacheExtent】 : 缓存长 【double】", - "【dragStartBehavior】 : 拖动行为 【DragStartBehavior】", - "【clipBehavior】 : 裁剪行为 【ClipBehavior】", - "【controller】 : 控制器 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/node1_base.dart deleted file mode 100644 index af29d47ad..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/node1_base.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class BoxScrollViewDemo extends StatelessWidget { - const BoxScrollViewDemo({Key? key}) : super(key: key); - - final String info = - 'BoxScrollView 是 ScrollView 的子类,实现了它的抽象方法,且暴露出另一个抽象方法 buildChildLayout,返回 Sliver 家族 Widget,' - '其子类有 ListView 和 GridView,分别使用 Sliver 家族相关List、Gird列表组件实现的。'; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: Column( - children: [ - Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ), - Expanded(child: MyBoxScrollView()), - ], - ), - ); - } -} - -class MyBoxScrollView extends BoxScrollView { - MyBoxScrollView({Key? key}) : super(key: key); - - final List data = [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - @override - Widget buildChildLayout(BuildContext context)=> SliverFixedExtentList( - itemExtent: 60, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_de_DE.json deleted file mode 100644 index 19ad0ac4d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "Konstruktor", - "info": "Eine Komponente, die den Platzbedarf von Unterkomponenten nicht beeinflusst und keine Anzeigeeigenschaften hat. Ihr einziger Wert besteht darin, den Kontext für das entsprechende Element der aktuellen Komponente bereitzustellen.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Verwendung von Builder", - "desc": [ - "【builder】 : Komponentenkonstruktor 【WidgetBuilder】", - "Die Verwendung der Methode `XXX.of(context)` in derselben Klasse, um ein Zustandsobjekt einer bestimmten Klasse zu erhalten, kann zu einem `Kontextverzögerungsfehler` führen. Verwenden Sie Builder, um dies zu beheben." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_en_US.json deleted file mode 100644 index 71fff4135..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "Constructor", - "info": "A component that does not affect the space occupied by child components and has no display properties. Its sole value is to provide the context for the corresponding element of the current component.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Usage of Builder", - "desc": [ - "【builder】: Component Constructor 【WidgetBuilder】", - "Using `XXX.of(context)` to obtain a state object of a certain class within the same class may result in a 'context lag' error, which can be resolved using Builder." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_es_ES.json deleted file mode 100644 index 899c3ee31..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "Constructor", - "info": "Un componente que no afecta el espacio ocupado por los componentes secundarios y no tiene visibilidad, cuyo único valor es proporcionar el contexto del elemento correspondiente al componente actual.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de Builder", - "desc": [ - "【builder】: Constructor de componentes 【WidgetBuilder】", - "El uso del método `XXX.of(context)` para obtener un objeto de estado de una clase en la misma clase puede resultar en un error de `contexto desfasado`, que se resuelve utilizando Builder." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_fr_FR.json deleted file mode 100644 index 8db8b9203..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "Constructeur", - "info": "Un composant qui n'affecte pas l'espace occupé par les composants enfants et n'a pas de visibilité, dont la seule valeur est de fournir le contexte de l'élément correspondant au composant actuel.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de Builder", - "desc": [ - "【builder】 : Constructeur de composant 【WidgetBuilder】", - "L'utilisation de la méthode `XXX.of(context)` pour obtenir un objet d'état dans la même classe peut entraîner une erreur de `contexte en retard`, résolue en utilisant Builder." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_it_IT.json deleted file mode 100644 index dd8f1a8b6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "Costruttore", - "info": "Un componente che non influisce sullo spazio occupato dai componenti figli e non ha una visualizzazione, il cui unico scopo è fornire il contesto per l'elemento corrispondente del componente corrente.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso del Builder", - "desc": [ - "【builder】 : Costruttore del componente 【WidgetBuilder】", - "L'uso del metodo `XXX.of(context)` per ottenere un oggetto di stato di un certo tipo nella stessa classe può causare un errore di `contesto in ritardo`, che viene risolto utilizzando Builder." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ja_JP.json deleted file mode 100644 index 5483ea42c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "ビルダー", - "info": "子コンポーネントのスペースに影響を与えず、表示性を持たないコンポーネントで、唯一の価値は現在のコンポーネントに対応する要素のコンテキストを提供することです。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Builderの使用", - "desc": [ - "【builder】 : コンポーネントビルダー 【WidgetBuilder】", - "同じクラス内で`XXX.of(context)`を使用して特定の状態オブジェクトを取得する方法には`コンテキストの遅延`というエラーが存在し、Builderを使用して解決します。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ko_KR.json deleted file mode 100644 index 4a7d18780..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "빌더", - "info": "하위 컴포넌트의 공간을 차지하지 않고, 시각적으로 표시되지 않는 컴포넌트로, 현재 컴포넌트에 해당하는 요소의 컨텍스트를 제공하는 유일한 가치가 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Builder 사용법", - "desc": [ - "【builder】 : 컴포넌트 빌더 【WidgetBuilder】", - "동일한 클래스에서 `XXX.of(context)`를 사용하여 특정 상태 객체를 가져오는 방법은 `컨텍스트 지연` 오류가 발생할 수 있으며, 이를 해결하기 위해 Builder를 사용합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_pt_PT.json deleted file mode 100644 index 90fa2ca1c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "Construtor", - "info": "Um componente que não afeta o espaço ocupado pelos componentes filhos e não tem visibilidade, cujo único valor é fornecer o contexto do elemento correspondente ao componente atual.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do Builder", - "desc": [ - "【builder】 : Construtor de componentes 【WidgetBuilder】", - "O uso do método `XXX.of(context)` para obter o objeto de estado de uma classe dentro da mesma classe pode resultar em um erro de `contexto atrasado`, que é resolvido usando o Builder." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ru_RU.json deleted file mode 100644 index e08118e1f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "Конструктор", - "info": "Компонент, который не влияет на занимаемое пространство дочерних компонентов и не имеет визуального отображения. Его единственная цель - предоставить контекст для соответствующего элемента текущего компонента.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование Builder", - "desc": [ - "【builder】 : Конструктор компонента 【WidgetBuilder】", - "Использование метода `XXX.of(context)` для получения объекта состояния определенного класса в одном и том же классе может привести к ошибке `задержки контекста`. Используйте Builder для решения этой проблемы." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_zh-CN.json deleted file mode 100644 index 93bbb25f4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "构造器", - "info": "一个不影响子组件占位空间,不具有显示性的组件,存在的唯一价值是提供当前组件对应元素的上下文。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Builder的使用", - "desc": [ - "【builder】 : 组件构造器 【WidgetBuilder】", - "同一个类中使用`XXX.of(context)`获取某类状态对象方法会存在`上下文滞后`的错误,使用Builder解决。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Builder/node1_base.dart deleted file mode 100644 index 83e7e8ace..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/node1_base.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/5/3 -/// contact me by email 1981462002@qq.com - - -class BuilderDemo extends StatelessWidget { - const BuilderDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Scaffold( - appBar: AppBar( - title: const Text('Builder'), - ), - floatingActionButton: Builder( - builder: (ctx) => FloatingActionButton( - onPressed: () { - ScaffoldMessenger.of(ctx).showSnackBar(const SnackBar(content: Text('hello builder'))); - }, - child: const Icon(Icons.add), - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_de_DE.json deleted file mode 100644 index a4ab2fa3a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "Schaltflächenleiste", - "info": "Empfängt eine Liste von Komponenten, die häufig verwendet wird, um mehrere Schaltflächen zu enthalten. Kann Ausrichtung, Ränder usw. angeben.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonBar-Ausrichtung", - "desc": [ - "【alignment】: Ausrichtung 【MainAxisAlignment】", - "【children】: Untergeordnete Komponenten 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "ButtonBar-Ränder und Höhe", - "desc": [ - "【buttonPadding】: Innenabstand 【EdgeInsetsGeometry】", - "【buttonHeight】: Höhe 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_en_US.json deleted file mode 100644 index 5a3eddd89..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "Button Bar", - "info": "Receives a list of components, often used to hold several buttons. You can specify alignment, margins, and other information.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonBar Alignment", - "desc": [ - "【alignment】: Alignment 【MainAxisAlignment】", - "【children】: Child components 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "ButtonBar Margin and Height", - "desc": [ - "【buttonPadding】: Padding 【EdgeInsetsGeometry】", - "【buttonHeight】: Height 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_es_ES.json deleted file mode 100644 index c2ddb366a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "Barra de botones", - "info": "Recibe una lista de componentes, comúnmente utilizada para contener varios botones. Se pueden especificar la alineación, los márgenes, etc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Alineación de la Barra de botones", - "desc": [ - "【alignment】: Alineación 【MainAxisAlignment】", - "【children】: Conjunto de componentes hijos 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "Márgenes y altura de la Barra de botones", - "desc": [ - "【buttonPadding】: Relleno interno 【EdgeInsetsGeometry】", - "【buttonHeight】: Altura 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_fr_FR.json deleted file mode 100644 index 329762a4d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "Barre de boutons", - "info": "Reçoit une liste de composants, souvent utilisée pour contenir plusieurs boutons. Peut spécifier l'alignement, les marges, etc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Alignement de la barre de boutons", - "desc": [ - "【alignment】: Alignement 【MainAxisAlignment】", - "【children】: Ensemble de composants enfants 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "Marge et hauteur de la barre de boutons", - "desc": [ - "【buttonPadding】: Marge intérieure 【EdgeInsetsGeometry】", - "【buttonHeight】: Hauteur 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_it_IT.json deleted file mode 100644 index f976469f7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "Barra dei pulsanti", - "info": "Riceve un elenco di componenti, spesso utilizzato per contenere diversi pulsanti. È possibile specificare l'allineamento, i margini, ecc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Allineamento della ButtonBar", - "desc": [ - "【alignment】: Allineamento 【MainAxisAlignment】", - "【children】: Insieme di componenti figli 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "Margini e altezza della ButtonBar", - "desc": [ - "【buttonPadding】: Margine interno 【EdgeInsetsGeometry】", - "【buttonHeight】: Altezza 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ja_JP.json deleted file mode 100644 index e2a5b021c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "ボタンバー", - "info": "コンポーネントリストを受け取り、通常はいくつかのボタンを配置するために使用されます。配置方法や余白などを指定できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonBarの配置方法", - "desc": [ - "【alignment】: 配置方法 【MainAxisAlignment】", - "【children】: 子コンポーネントセット 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "ButtonBarの余白と高さ", - "desc": [ - "【buttonPadding】: 内側の余白 【EdgeInsetsGeometry】", - "【buttonHeight】: 高さ 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ko_KR.json deleted file mode 100644 index cc7d57b3c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "버튼 바", - "info": "컴포넌트 리스트를 받아들이며, 주로 여러 버튼을 담는 데 사용됩니다. 정렬 방식, 여백 등을 지정할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonBar 정렬 방식", - "desc": [ - "【alignment】: 정렬 방식 【MainAxisAlignment】", - "【children】: 자식 컴포넌트 집합 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "ButtonBar 여백과 높이", - "desc": [ - "【buttonPadding】: 안쪽 여백 【EdgeInsetsGeometry】", - "【buttonHeight】: 높이 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_pt_PT.json deleted file mode 100644 index 31ef2efce..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "Barra de Botões", - "info": "Recebe uma lista de componentes, frequentemente usada para conter vários botões. Pode especificar alinhamento, margens, etc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Alinhamento da Barra de Botões", - "desc": [ - "【alignment】: Alinhamento 【MainAxisAlignment】", - "【children】: Conjunto de componentes filhos 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "Margens e Altura da Barra de Botões", - "desc": [ - "【buttonPadding】: Margem interna 【EdgeInsetsGeometry】", - "【buttonHeight】: Altura 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ru_RU.json deleted file mode 100644 index 7a57b239c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "Панель кнопок", - "info": "Принимает список компонентов, часто используется для размещения нескольких кнопок. Можно указать выравнивание, отступы и другую информацию.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Выравнивание ButtonBar", - "desc": [ - "【alignment】: Выравнивание 【MainAxisAlignment】", - "【children】: Набор дочерних компонентов 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "Отступы и высота ButtonBar", - "desc": [ - "【buttonPadding】: Внутренние отступы 【EdgeInsetsGeometry】", - "【buttonHeight】: Высота 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_zh-CN.json deleted file mode 100644 index afbc84717..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "按钮栏", - "info": "接收组件列表,常用于盛放若干个按钮。可指定对齐方式、边距等信息。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonBar对齐方式", - "desc": [ - "【alignment】: 对齐方式 【MainAxisAlignment】", - "【children】: 子组件集 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "ButtonBar边距和高", - "desc": [ - "【buttonPadding】: 内边距 【EdgeInsetsGeometry】", - "【buttonHeight】: 高 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/node1_base.dart deleted file mode 100644 index 12c2f4ce0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/node1_base.dart +++ /dev/null @@ -1,31 +0,0 @@ -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; -import 'package:widgets/utils/dialog_about.dart'; - - -class CustomButtonBar extends StatelessWidget { - const CustomButtonBar({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ButtonBar( - alignment: MainAxisAlignment.center, - children: [ - ElevatedButton( - child: const Text("ElevatedButton"), - onPressed: () => DialogAbout.show(context)), - OutlinedButton( - child: const Text("Outlined"), - onPressed: () => DialogAbout.show(context)), - TextButton( - onPressed: () => DialogAbout.show(context), - child: const Text("TextButton"), - ) - ], - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/node2_padding.dart b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/node2_padding.dart deleted file mode 100644 index 7c35a8dbd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/node2_padding.dart +++ /dev/null @@ -1,32 +0,0 @@ - -import 'package:flutter/material.dart'; -import 'package:widgets/utils/dialog_about.dart'; - - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class PaddingButtonBar extends StatelessWidget { - const PaddingButtonBar({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ButtonBar( - alignment: MainAxisAlignment.center, - buttonHeight: 40, - buttonPadding: const EdgeInsets.only(left: 15,right: 15), - children: [ - ElevatedButton( - child: const Text("ElevatedButton"), - onPressed: () => DialogAbout.show(context)), - OutlinedButton( - child: const Text("Outlined"), - onPressed: () => DialogAbout.show(context)), - TextButton( - onPressed: () => DialogAbout.show(context), - child: const Text("TextButton"), - ) - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_de_DE.json deleted file mode 100644 index 350077f30..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "Kartenkomponente", - "info": " Basierend auf Material-Komponenten implementiert, wird verwendet, um eine einzelne Komponente zu karten. Es verleiht ihr einen Schatteneffekt, kann Außenabstände hinzufügen und die Form der Karte anpassen.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Card kann eine Komponente karten", - "desc": [ - "【elevation】 : Schattentiefe 【double】", - "【margin】: Außenabstand 【double】", - "【color】: Farbe 【Color】", - "【child】: Kind 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Kann durch die shape-Eigenschaft einen Zuschneideeffekt erzielen", - "desc": [ - "【shape】 : Form 【ShapeBorder】", - "【margin】: Außenabstand 【double】", - "【color】: Farbe 【Color】", - "【child】: Kind 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_en_US.json deleted file mode 100644 index 0e2687aaa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "Card Component", - "info": "Implemented based on Material components, used to cardify a single component. It has a shadow effect, can add margin, and can customize the shape of the card.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Card can cardify a component", - "desc": [ - "【elevation】: Shadow depth 【double】", - "【margin】: Margin 【double】", - "【color】: Color 【Color】", - "【child】: Child 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Can achieve clipping effect through the shape property", - "desc": [ - "【shape】: Shape 【ShapeBorder】", - "【margin】: Margin 【double】", - "【color】: Color 【Color】", - "【child】: Child 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_es_ES.json deleted file mode 100644 index 1306be48f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "Componente de tarjeta", - "info": "Implementado basado en componentes Material, utilizado para convertir un solo componente en una tarjeta. Y hacer que tenga un efecto de sombra, se puede agregar margen exterior y también se puede personalizar la forma de la tarjeta.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Card puede convertir un componente en una tarjeta", - "desc": [ - "【elevation】 : profundidad de la sombra 【double】", - "【margin】: margen exterior 【double】", - "【color】: color 【Color】", - "【child】: hijo 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Se puede lograr un efecto de recorte a través de la propiedad shape", - "desc": [ - "【shape】 : forma 【ShapeBorder】", - "【margin】: margen exterior 【double】", - "【color】: color 【Color】", - "【child】: hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_fr_FR.json deleted file mode 100644 index 4430a0d32..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "Composant Carte", - "info": " Basé sur les composants Material, utilisé pour transformer un composant unique en carte. Il peut avoir un effet d'ombre, peut ajouter des marges extérieures, et peut également personnaliser la forme de la carte.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Card peut transformer un composant en carte", - "desc": [ - "【elevation】 : profondeur de l'ombre 【double】", - "【margin】: marge extérieure 【double】", - "【color】: couleur 【Color】", - "【child】: enfant 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Peut réaliser un effet de découpe via la propriété shape", - "desc": [ - "【shape】 : forme 【ShapeBorder】", - "【margin】: marge extérieure 【double】", - "【color】: couleur 【Color】", - "【child】: enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_it_IT.json deleted file mode 100644 index d1c82e199..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "Componente Carta", - "info": "Implementato basandosi sui componenti Material, utilizzato per trasformare un singolo componente in una carta. Con effetti di ombreggiatura, può includere margini esterni e consente la personalizzazione della forma della carta.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Card può trasformare un componente in una carta", - "desc": [ - "【elevation】 : profondità dell'ombra 【double】", - "【margin】: margine esterno 【double】", - "【color】: colore 【Color】", - "【child】: figlio 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "È possibile ottenere effetti di ritaglio attraverso la proprietà shape", - "desc": [ - "【shape】 : forma 【ShapeBorder】", - "【margin】: margine esterno 【double】", - "【color】: colore 【Color】", - "【child】: figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ja_JP.json deleted file mode 100644 index f3c87b5a5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "カードコンポーネント", - "info": "Materialコンポーネントに基づいて実装され、単一のコンポーネントをカード化するために使用されます。また、投影効果を持たせることができ、外側の余白を追加したり、カードの形状をカスタマイズすることもできます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Cardはコンポーネントをカード化することができます", - "desc": [ - "【elevation】 : 影の深さ 【double】", - "【margin】: 外側の余満 【double】", - "【color】: 色 【Color】", - "【child】: 子 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "shapeプロパティを使用して切り取り効果を実現できます", - "desc": [ - "【shape】 : 形状 【ShapeBorder】", - "【margin】: 外側の余満 【double】", - "【color】: 色 【Color】", - "【child】: 子 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ko_KR.json deleted file mode 100644 index 3bd5e7962..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "카드 컴포넌트", - "info": "Material 컴포넌트를 기반으로 구현되었으며, 단일 컴포넌트를 카드화하는 데 사용됩니다. 그림자 효과를 가지며, 외부 여백을 추가할 수 있고, 카드 모양을 사용자 정의할 수도 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Card는 컴포넌트를 카드화할 수 있습니다", - "desc": [ - "【elevation】 : 그림자 깊이 【double】", - "【margin】: 외부 여백 【double】", - "【color】: 색상 【Color】", - "【child】: 자식 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "shape 속성을 통해 잘라내기 효과를 구현할 수 있습니다", - "desc": [ - "【shape】 : 모양 【ShapeBorder】", - "【margin】: 외부 여백 【double】", - "【color】: 색상 【Color】", - "【child】: 자식 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_pt_PT.json deleted file mode 100644 index 5dd17b24e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "Componente de Cartão", - "info": "Implementado com base em componentes Material, usado para transformar um único componente em um cartão. E fazê-lo ter um efeito de sombra, pode adicionar margem externa e também pode personalizar a forma do cartão.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "O Card pode transformar um componente em um cartão", - "desc": [ - "【elevation】 : Profundidade da sombra 【double】", - "【margin】: Margem externa 【double】", - "【color】: Cor 【Color】", - "【child】: Filho 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Pode-se alcançar o efeito de corte através da propriedade shape", - "desc": [ - "【shape】 : Forma 【ShapeBorder】", - "【margin】: Margem externa 【double】", - "【color】: Cor 【Color】", - "【child】: Filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ru_RU.json deleted file mode 100644 index 7b304d073..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "Карточка", - "info": "Реализовано на основе компонентов Material, используется для карточного оформления отдельного компонента. Имеет эффект тени, можно добавить внешние отступы, также можно настроить форму карточки.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Card может сделать компонент карточным", - "desc": [ - "【elevation】 : Глубина тени 【double】", - "【margin】: Внешний отступ 【double】", - "【color】: Цвет 【Color】", - "【child】: Дочерний элемент 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Можно реализовать эффект обрезки с помощью свойства shape", - "desc": [ - "【shape】 : Форма 【ShapeBorder】", - "【margin】: Внешний отступ 【double】", - "【color】: Цвет 【Color】", - "【child】: Дочерний элемент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_zh-CN.json deleted file mode 100644 index f0de12b03..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "卡片组件", - "info": " 基于Material组件实现,用于将单个组件卡片化。并使其具有投影效果,可加外边距,也可以自定义卡片形状。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Card可以让一个组件卡片化", - "desc": [ - "【elevation】 : 影深 【double】", - "【margin】: 外边距 【double】", - "【color】: 颜色 【Color】", - "【child】: 孩子 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "可以通过shape属性实现裁切效果", - "desc": [ - "【shape】 : 形状 【ShapeBorder】", - "【margin】: 外边距 【double】", - "【color】: 颜色 【Color】", - "【child】: 孩子 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Card/node1_base.dart deleted file mode 100644 index eb27e7f4b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/node1_base.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class CustomCard extends StatelessWidget { - const CustomCard({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Card( - color: const Color(0xffB3FE65), - elevation: 4, - margin: const EdgeInsets.all(10), - child: Container( - alignment: Alignment.topLeft, - width: 200, - height: 0.618 * 200, - margin: const EdgeInsets.all(10), - child: const Text("Card", style: TextStyle(fontSize: 20)), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/node2_shape.dart b/modules/widget_system/widgets/lib/StatelessWidget/Card/node2_shape.dart deleted file mode 100644 index a58450184..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/node2_shape.dart +++ /dev/null @@ -1,50 +0,0 @@ - - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; -import 'package:widgets/utils/pather.dart'; - -class ShapeCard extends StatelessWidget { - const ShapeCard({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Card( - color: const Color(0xffB3FE65), - elevation: 6, - shape: StarShapeBorder(), - child: Container( - alignment: Alignment.center, - width: 100, - height: 100, - child: const Text("Card", style: TextStyle(fontSize: 20)), - ), - ); - } -} - -class StarShapeBorder extends ShapeBorder { - @override - EdgeInsetsGeometry get dimensions => EdgeInsets.zero; - - @override - Path getInnerPath(Rect rect, {TextDirection? textDirection}) { - return Path(); - } - - @override - Path getOuterPath(Rect rect, {TextDirection? textDirection}) => - Pather.create.nStarPath(9, 50, 40, dx: 50, dy: 50); - - @override - void paint(Canvas canvas, Rect rect, {TextDirection? textDirection}) { - } - - @override - ShapeBorder scale(double t) { - return this; - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_de_DE.json deleted file mode 100644 index 327dfa245..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_de_DE.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "Kachel mit Kontrollkästchen", - "info": "Eine allgemeine Listenstruktur, die von Flutter bereitgestellt wird, hat eine linke und mittlere Struktur, wobei sich am Ende ein CheckBox befindet. An den entsprechenden Positionen können Komponenten eingefügt werden, was eine einfache Anpassung an spezifische Einträge ermöglicht.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Darstellung der CheckBoxListTile", - "desc": [ - "【secondary】: Linke Komponente 【Widget】", - "【checkColor】: Farbe des Häkchens 【Color】", - "【activeColor】: Farbe des Rahmens bei Auswahl 【Color】", - "【title】: Obere mittlere Komponente 【Widget】", - "【subtitle】: Untere mittlere Komponente 【Widget】", - "【onChanged】: Auswahlereignis 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Auswahleffekt der CheckBoxListTile", - "desc": [ - "【selected】: Ob ausgewählt 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Dichte Eigenschaft der CheckBoxListTile", - "desc": [ - "【dense】: Ob dicht angeordnet 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_en_US.json deleted file mode 100644 index 0c257dc62..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_en_US.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "Checkbox Tile", - "info": "A common list item structure provided by Flutter, featuring a left-middle structure with a CheckBox at the end. Components can be inserted at the corresponding positions, making it easy to handle specific items.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic representation of CheckBoxListTile", - "desc": [ - "【secondary】: Left component 【Widget】", - "【checkColor】: ✔️ color 【Color】", - "【activeColor】: Frame color when selected 【Color】", - "【title】: Top middle component 【Widget】", - "【subtitle】: Bottom middle component 【Widget】", - "【onChanged】: Selection event 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Selection effect of CheckBoxListTile", - "desc": [ - "【selected】: Whether selected 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Dense property of CheckBoxListTile", - "desc": [ - "【dense】: Whether dense 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_es_ES.json deleted file mode 100644 index 076a7263d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_es_ES.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "Casilla de verificación", - "info": "Una estructura de lista genérica proporcionada por Flutter, con una estructura de izquierda a centro, y un CheckBox al final. Se pueden insertar componentes en las posiciones correspondientes, lo que permite manejar fácilmente elementos específicos.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "El comportamiento básico de CheckBoxListTile es el siguiente", - "desc": [ - "【secondary】: Componente izquierdo 【Widget】", - "【checkColor】: Color del ✔️ 【Color】", - "【activeColor】: Color del borde cuando está seleccionado 【Color】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【onChanged】: Evento de selección 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Efecto de selección de CheckBoxListTile", - "desc": [ - "【selected】: Si está seleccionado 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propiedad de densidad de CheckBoxListTile", - "desc": [ - "【dense】: Si está en modo denso 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_fr_FR.json deleted file mode 100644 index 616d472e8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_fr_FR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "Tuile de case à cocher", - "info": "Une structure de liste générique fournie par Flutter, de structure gauche-centre, avec une case à cocher à la fin. Des composants peuvent être insérés aux positions correspondantes, ce qui permet de répondre facilement à des entrées spécifiques.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La performance de base de CheckBoxListTile est la suivante", - "desc": [ - "【secondary】: Composant gauche 【Widget】", - "【checkColor】: Couleur de la coche 【Color】", - "【activeColor】: Couleur de la bordure lors de la sélection 【Color】", - "【title】: Composant supérieur central 【Widget】", - "【subtitle】: Composant inférieur central 【Widget】", - "【onChanged】: Événement de sélection 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Effet de sélection de CheckBoxListTile", - "desc": [ - "【selected】: Est sélectionné 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propriété de densité de CheckBoxListTile", - "desc": [ - "【dense】: Est dense 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_it_IT.json deleted file mode 100644 index c3891f1bd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_it_IT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "Piastrella di selezione", - "info": "Una struttura di elenco generica fornita da Flutter, con una struttura sinistra-centro, e una casella di controllo alla fine. I componenti possono essere inseriti nelle posizioni corrispondenti, rendendo facile affrontare voci specifiche.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La rappresentazione di base di CheckBoxListTile è la seguente", - "desc": [ - "【secondary】: Componente sinistro 【Widget】", - "【checkColor】: Colore del segno di spunta 【Color】", - "【activeColor】: Colore del bordo quando selezionato 【Color】", - "【title】: Componente superiore centrale 【Widget】", - "【subtitle】: Componente inferiore centrale 【Widget】", - "【onChanged】: Evento di selezione 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Effetto di selezione di CheckBoxListTile", - "desc": [ - "【selected】: Se selezionato 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Proprietà di disposizione compatta di CheckBoxListTile", - "desc": [ - "【dense】: Se disposto in modo compatto 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ja_JP.json deleted file mode 100644 index 969448a1e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ja_JP.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "チェックボックスリストタイル", - "info": "Flutterが提供する汎用リストアイテム構造で、左中構造で、末尾にCheckBoxがあります。適切な位置にコンポーネントを挿入でき、特定のアイテムに簡単に対応できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CheckBoxListTileの基本表現は以下の通りです", - "desc": [ - "【secondary】: 左側コンポーネント 【Widget】", - "【checkColor】: ✔️色 【Color】", - "【activeColor】: 選択時の外枠色 【Color】", - "【title】: 中央上部コンポーネント 【Widget】", - "【subtitle】: 中央下部コンポーネント 【Widget】", - "【onChanged】: 選択イベント 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "CheckBoxListTileの選択効果", - "desc": [ - "【selected】: 選択されているかどうか 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "CheckBoxListTileの密排属性", - "desc": [ - "【dense】: 密排かどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ko_KR.json deleted file mode 100644 index 06ab1886f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ko_KR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "체크박스 타일", - "info": "Flutter에서 제공하는 일반적인 목록 항목 구조로, 왼쪽과 중앙 구조이며, 끝에는 CheckBox가 있습니다. 해당 위치에 컴포넌트를 삽입할 수 있어 특정 항목에 쉽게 대응할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CheckBoxListTile의 기본적인 표현은 다음과 같습니다", - "desc": [ - "【secondary】: 왼쪽 컴포넌트 【Widget】", - "【checkColor】: ✔️ 색상 【Color】", - "【activeColor】: 선택 시 외곽선 색상 【Color】", - "【title】: 중앙 상단 컴포넌트 【Widget】", - "【subtitle】: 중앙 하단 컴포넌트 【Widget】", - "【onChanged】: 선택 이벤트 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "CheckBoxListTile의 선택 효과", - "desc": [ - "【selected】: 선택 여부 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "CheckBoxListTile의 밀집 속성", - "desc": [ - "【dense】: 밀집 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_pt_PT.json deleted file mode 100644 index fe70e8627..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_pt_PT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "Azulejo de Seleção", - "info": "Uma estrutura de item de lista genérica fornecida pelo Flutter, com uma estrutura esquerda-central, e uma CheckBox na extremidade. Componentes podem ser inseridos nas posições correspondentes, permitindo uma fácil adaptação a itens específicos.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "A apresentação básica do CheckBoxListTile é a seguinte", - "desc": [ - "【secondary】: Componente do lado esquerdo 【Widget】", - "【checkColor】: Cor do ✔️ 【Color】", - "【activeColor】: Cor da moldura quando selecionado 【Color】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【onChanged】: Evento de seleção 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Efeito de seleção do CheckBoxListTile", - "desc": [ - "【selected】: Se está selecionado 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propriedade de densidade do CheckBoxListTile", - "desc": [ - "【dense】: Se está em alta densidade 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ru_RU.json deleted file mode 100644 index e21dca7eb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ru_RU.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "Флажок плитки", - "info": "Универсальная структура элемента списка, предоставляемая Flutter, имеет лево-центральную структуру, а в конце находится CheckBox. Компоненты могут быть вставлены в соответствующие позиции, что позволяет легко адаптироваться к конкретным элементам.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное представление CheckBoxListTile выглядит следующим образом", - "desc": [ - "【secondary】: Левый компонент 【Widget】", - "【checkColor】: Цвет ✔️ 【Color】", - "【activeColor】: Цвет рамки при выборе 【Color】", - "【title】: Верхний центральный компонент 【Widget】", - "【subtitle】: Нижний центральный компонент 【Widget】", - "【onChanged】: Событие выбора 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Эффект выбора CheckBoxListTile", - "desc": [ - "【selected】: Выбрано ли 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Свойство плотного расположения CheckBoxListTile", - "desc": [ - "【dense】: Плотное ли расположение 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_zh-CN.json deleted file mode 100644 index 02ac59622..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_zh-CN.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "复选瓦片", - "info": "Flutter提供的一个通用列表条目结构,为左中结构,尾部是一个CheckBox。相应位置可插入组件,可以很方便地应对特定的条目。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CheckBoxListTile的基本表现如下", - "desc": [ - "【secondary】: 左侧组件 【Widget】", - "【checkColor】: ✔️颜色 【Color】", - "【activeColor】: 选中时外框颜色 【Color】", - "【title】: 中间上组件 【Widget】", - "【subtitle】: 中间下组件 【Widget】", - "【onChanged】: 选中事件 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "CheckBoxListTile的选中效果", - "desc": [ - "【selected】: 是否选中 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "CheckBoxListTile的密排属性", - "desc": [ - "【dense】: 是否密排 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node1_base.dart deleted file mode 100644 index 9d0a9b4bf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node1_base.dart +++ /dev/null @@ -1,33 +0,0 @@ - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; - -class CustomCheckBoxListTile extends StatefulWidget { - const CustomCheckBoxListTile({Key? key}) : super(key: key); - - @override - _CustomCheckBoxListTileState createState() => _CustomCheckBoxListTileState(); -} - -class _CustomCheckBoxListTileState extends State { - bool _selected = false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: CheckboxListTile( - value: _selected, - checkColor: Colors.yellow, - activeColor: Colors.orangeAccent, - secondary: Image.asset("assets/images/icon_head.webp"), - title: const Text("张风捷特烈"), - subtitle: const Text("@万花过尽知无物"), - onChanged: (v) => setState(() => _selected = !_selected), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node2_select.dart b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node2_select.dart deleted file mode 100644 index f6fd5c804..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node2_select.dart +++ /dev/null @@ -1,34 +0,0 @@ - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; - -class SelectCheckBoxListTile extends StatefulWidget { - const SelectCheckBoxListTile({Key? key}) : super(key: key); - - @override - _SelectCheckBoxListTileState createState() => _SelectCheckBoxListTileState(); -} - -class _SelectCheckBoxListTileState extends State { - bool _selected = false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: CheckboxListTile( - value: _selected, - selected: _selected, - checkColor: Colors.yellow, - activeColor: Colors.orangeAccent, - secondary: Image.asset("assets/images/icon_head.webp"), - title: const Text("张风捷特烈"), - subtitle: const Text("@万花过尽知无物"), - onChanged: (v) => setState(() => _selected = !_selected), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node3_dense.dart b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node3_dense.dart deleted file mode 100644 index e65566b78..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node3_dense.dart +++ /dev/null @@ -1,34 +0,0 @@ -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; - -class DenseCheckBoxListTile extends StatefulWidget { - const DenseCheckBoxListTile({Key? key}) : super(key: key); - - @override - _DenseCheckBoxListTileState createState() => _DenseCheckBoxListTileState(); -} - -class _DenseCheckBoxListTileState extends State { - bool _selected = false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: CheckboxListTile( - value: _selected, - dense: true, - checkColor: Colors.yellow, - activeColor: Colors.orangeAccent, - secondary: Image.asset("assets/images/icon_head.webp"), - title: const Text("张风捷特烈"), - subtitle: const Text("@万花过尽知无物"), - onChanged: (v) => setState(() => _selected = !_selected), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_de_DE.json deleted file mode 100644 index 16eb1fdd3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "Debug-Label", - "info": "Wird nur im Debug-Modus in der oberen rechten Ecke angezeigt und hat keine große Bedeutung. Wird im MaterialApp-Komponenten-Quellcode verwendet.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CheckedModeBanner", - "desc": [ - "【child】 : Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_en_US.json deleted file mode 100644 index bcff1cf43..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "debug label", - "info": "Only shows the corner mark in the upper right corner in debug mode, which is not very useful. There are usage scenarios in the MaterialApp component source code.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic usage of CheckedModeBanner", - "desc": [ - "【child】 : Component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_es_ES.json deleted file mode 100644 index 69cdea9a5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "etiqueta de depuración", - "info": "Solo muestra la esquina superior derecha en el modo de ejecución debug, no tiene mucha utilidad. Tiene un caso de uso en el código fuente del componente MaterialApp.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CheckedModeBanner", - "desc": [ - "【child】 : componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_fr_FR.json deleted file mode 100644 index cdce1d8c3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "étiquette de débogage", - "info": "Affiche uniquement le badge en haut à droite en mode de débogage, ce qui n'est pas très utile. Utilisé dans le code source du composant MaterialApp.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CheckedModeBanner", - "desc": [ - "【child】 : composant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_it_IT.json deleted file mode 100644 index 970ea5b0e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "etichetta di debug", - "info": "Mostra l'etichetta nell'angolo superiore destro solo in modalità debug, non ha molto uso. È utilizzato nel codice sorgente del componente MaterialApp.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CheckedModeBanner", - "desc": [ - "【child】 : componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ja_JP.json deleted file mode 100644 index ef3ea16d5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "デバッグタグ", - "info": "デバッグ実行モードでのみ右上の角に表示されるバッジで、あまり役に立ちません。MaterialAppコンポーネントのソースコードで使用例があります。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CheckedModeBannerの基本的な使用", - "desc": [ - "【child】 : コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ko_KR.json deleted file mode 100644 index 7b034ecf2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "디버그 라벨", - "info": "디버그 실행 모드에서만 오른쪽 상단 코너에 표시되며, 특별히 큰 의미는 없습니다. MaterialApp 컴포넌트 소스 코드에서 사용 사례가 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CheckedModeBanner 기본 사용", - "desc": [ - "【child】 : 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_pt_PT.json deleted file mode 100644 index 6f44c1075..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "etiqueta de depuração", - "info": "Exibe o ícone no canto superior direito apenas no modo de execução de depuração, não tem muita utilidade. Há cenários de uso no código-fonte do componente MaterialApp.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CheckedModeBanner", - "desc": [ - "【child】 : componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ru_RU.json deleted file mode 100644 index b11b14015..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "отладочная метка", - "info": "Отображает значок в правом верхнем углу только в режиме отладки, не имеет особого значения. Используется в исходном коде компонента MaterialApp.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CheckedModeBanner", - "desc": [ - "【child】 : компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_zh-CN.json deleted file mode 100644 index 72c0cd98d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "debug标签", - "info": "仅在debug运行模式中显示右上角角标,没什么太大卵用。在 MaterialApp 组件源码中有使用场景。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CheckedModeBanner基本使用", - "desc": [ - "【child】 : 组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/node1_base.dart deleted file mode 100644 index 6cf083097..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/node1_base.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class CheckedModeBannerDemo extends StatelessWidget { - const CheckedModeBannerDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return CheckedModeBanner( - child: Container( - alignment: Alignment.center, - width: 250, - height: 150, - color: Theme.of(context).primaryColor, - child: const Text( - "CheckedModeBanner", - style: TextStyle(color: Colors.white, fontSize: 20), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_de_DE.json deleted file mode 100644 index 222ba57f1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_de_DE.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "Kleine Leiste Komponente", - "info": "Eine horizontale, abgerundete kleine Leiste, die links, mittig und rechts Komponenten enthalten kann. Kann Farbe, Schattenfarbe und Klick-Ereignisse angeben.", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Normale Darstellung des Chips wie folgt", - "desc": [ - "【avatar】: Linke Komponente 【Widget】", - "【label】: Mittlere Komponente 【Widget】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】", - "【labelPadding】: Label-Abstand 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Farbe und Schatten können eingestellt werden", - "desc": [ - "【backgroundColor】: Hintergrundfarbe 【Color】", - "【shadowColor】: Schattenfarbe 【Color】", - "【elevation】: Schattentiefe 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "Rechte Klick-Schaltfläche kann eingestellt werden", - "desc": [ - "【deleteIcon】: Rechte Komponente (normalerweise ein Icon) 【Widget】", - "【deleteIconColor】: Farbe der rechten Komponente 【Color】", - "【onDeleted】: Klick-Ereignis der rechten Komponente 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_en_US.json deleted file mode 100644 index 6318c42a6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_en_US.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "Chip Component", - "info": "A horizontal rounded bar that can contain left, middle, and right components. You can specify colors, shadow colors, and click events.", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "The normal appearance of Chip is as follows", - "desc": [ - "【avatar】: Left component 【Widget】", - "【label】: Middle component 【Widget】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【labelPadding】: Label padding 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "You can set colors and shadows", - "desc": [ - "【backgroundColor】: Background color 【Color】", - "【shadowColor】: Shadow color 【Color】", - "【elevation】: Shadow depth 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "You can set the right click button", - "desc": [ - "【deleteIcon】: Right component (usually an Icon) 【Widget】", - "【deleteIconColor】: Right component color 【Color】", - "【onDeleted】: Right component click event 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_es_ES.json deleted file mode 100644 index 0b116b3b4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_es_ES.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "Componente de barra pequeña", - "info": "Una barra pequeña con bordes redondeados en horizontal, puede contener tres componentes: izquierdo, central y derecho. Se puede especificar el color, el color de la sombra y el evento de clic.", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "El comportamiento normal de Chip es el siguiente", - "desc": [ - "【avatar】: Componente izquierdo 【Widget】", - "【label】: Componente central 【Widget】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】", - "【labelPadding】: Relleno del label 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Se puede configurar el color y la sombra", - "desc": [ - "【backgroundColor】: Color de fondo 【Color】", - "【shadowColor】: Color de la sombra 【Color】", - "【elevation】: Profundidad de la sombra 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "Se puede configurar el botón de clic derecho", - "desc": [ - "【deleteIcon】: Componente derecho (normalmente un Icono) 【Widget】", - "【deleteIconColor】: Color del componente derecho 【Color】", - "【onDeleted】: Evento de clic del componente derecho 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_fr_FR.json deleted file mode 100644 index dd86d847d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_fr_FR.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "Composant Petite Barre", - "info": "Une petite barre horizontale aux bords arrondis, pouvant contenir trois composants à gauche, au centre et à droite. Peut spécifier la couleur, la couleur de l'ombre et l'événement de clic.", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La performance normale de Chip est la suivante", - "desc": [ - "【avatar】: Composant gauche 【Widget】", - "【label】: Composant central 【Widget】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】", - "【labelPadding】: Marge du label 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Peut définir la couleur et l'ombre", - "desc": [ - "【backgroundColor】: Couleur de fond 【Color】", - "【shadowColor】: Couleur de l'ombre 【Color】", - "【elevation】: Profondeur de l'ombre 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "Peut définir un bouton de clic à droite", - "desc": [ - "【deleteIcon】: Composant droit (généralement une icône) 【Widget】", - "【deleteIconColor】: Couleur du composant droit 【Color】", - "【onDeleted】: Événement de clic du composant droit 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_it_IT.json deleted file mode 100644 index e8f386586..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_it_IT.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "Componente Piccolo", - "info": "Una piccola barra orizzontale con bordi arrotondati, può contenere tre componenti: sinistro, centrale e destro. È possibile specificare il colore, il colore dell'ombra e l'evento di clic.", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Il comportamento normale di Chip è il seguente", - "desc": [ - "【avatar】: Componente sinistro 【Widget】", - "【label】: Componente centrale 【Widget】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】", - "【labelPadding】: Spaziatura del label 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "È possibile impostare il colore e l'ombra", - "desc": [ - "【backgroundColor】: Colore di sfondo 【Color】", - "【shadowColor】: Colore dell'ombra 【Color】", - "【elevation】: Profondità dell'ombra 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "È possibile impostare il pulsante di clic destro", - "desc": [ - "【deleteIcon】: Componente destro (solitamente Icon) 【Widget】", - "【deleteIconColor】: Colore del componente destro 【Color】", - "【onDeleted】: Evento di clic del componente destro 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ja_JP.json deleted file mode 100644 index 1da3165ea..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ja_JP.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "チップコンポーネント", - "info": "横方向の丸いエッジを持つ小さなバーで、左、中央、右の3つのコンポーネントを含むことができます。色、影の色、クリックイベントを指定できます。", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Chipの通常の表現は以下の通りです", - "desc": [ - "【avatar】: 左側のコンポーネント 【Widget】", - "【label】: 中央のコンポーネント 【Widget】", - "【padding】 : パディング 【EdgeInsetsGeometry】", - "【labelPadding】: ラベルのパディング 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "色と影を設定できます", - "desc": [ - "【backgroundColor】: 背景色 【Color】", - "【shadowColor】: 影の色 【Color】", - "【elevation】: 影の深さ 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "右側のクリックボタンを設定できます", - "desc": [ - "【deleteIcon】: 右側のコンポーネント(通常はアイコン) 【Widget】", - "【deleteIconColor】: 右側のコンポーネントの色 【Color】", - "【onDeleted】: 右側のコンポーネントのクリックイベント 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ko_KR.json deleted file mode 100644 index 01ab4fb6c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ko_KR.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "작은 막대 컴포넌트", - "info": "가로로 된 둥근 모서리의 작은 막대로, 왼쪽, 중앙, 오른쪽 세 개의 컴포넌트를 포함할 수 있습니다. 색상, 그림자 색상 및 클릭 이벤트를 지정할 수 있습니다.", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Chip의 일반적인 모습은 다음과 같습니다", - "desc": [ - "【avatar】: 왼쪽 컴포넌트 【Widget】", - "【label】: 중앙 컴포넌트 【Widget】", - "【padding】 : 안쪽 여백 【EdgeInsetsGeometry】", - "【labelPadding】: label 여백 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "색상과 그림자를 설정할 수 있습니다", - "desc": [ - "【backgroundColor】: 배경색 【Color】", - "【shadowColor】: 그림자 색상 【Color】", - "【elevation】: 그림자 깊이 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "오른쪽 클릭 버튼을 설정할 수 있습니다", - "desc": [ - "【deleteIcon】: 오른쪽 컴포넌트(일반적으로 Icon) 【Widget】", - "【deleteIconColor】: 오른쪽 컴포넌트 색상 【Color】", - "【onDeleted】: 오른쪽 컴포넌트 클릭 이벤트 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_pt_PT.json deleted file mode 100644 index eddf2b10d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_pt_PT.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "Componente de Barra Pequena", - "info": "Uma pequena barra horizontal com bordas arredondadas que pode conter três componentes: esquerdo, central e direito. Pode especificar a cor, a cor da sombra e o evento de clique.", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "O comportamento normal do Chip é o seguinte", - "desc": [ - "【avatar】: Componente esquerdo 【Widget】", - "【label】: Componente central 【Widget】", - "【padding】 : Espaçamento interno 【EdgeInsetsGeometry】", - "【labelPadding】: Espaçamento do label 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Pode definir cor e sombra", - "desc": [ - "【backgroundColor】: Cor de fundo 【Color】", - "【shadowColor】: Cor da sombra 【Color】", - "【elevation】: Profundidade da sombra 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "Pode definir um botão de clique à direita", - "desc": [ - "【deleteIcon】: Componente direito (normalmente um ícone) 【Widget】", - "【deleteIconColor】: Cor do componente direito 【Color】", - "【onDeleted】: Evento de clique do componente direito 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ru_RU.json deleted file mode 100644 index b540b89ce..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ru_RU.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "Маленький компонент", - "info": "Горизонтальная полоска с закругленными краями, которая может содержать три компонента: левый, центральный и правый. Можно указать цвет, цвет тени и событие клика.", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Обычное отображение Chip", - "desc": [ - "【avatar】: Левый компонент 【Widget】", - "【label】: Центральный компонент 【Widget】", - "【padding】: Внутренние отступы 【EdgeInsetsGeometry】", - "【labelPadding】: Отступы для label 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Можно задать цвет и тень", - "desc": [ - "【backgroundColor】: Цвет фона 【Color】", - "【shadowColor】: Цвет тени 【Color】", - "【elevation】: Глубина тени 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "Можно задать кнопку клика справа", - "desc": [ - "【deleteIcon】: Правый компонент (обычно Icon) 【Widget】", - "【deleteIconColor】: Цвет правого компонента 【Color】", - "【onDeleted】: Событие клика правого компонента 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_zh-CN.json deleted file mode 100644 index a7f5a6491..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_zh-CN.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "小条组件", - "info": "一个横向的圆边小条,可以包含左中右三个组件。可以指定颜色、阴影色和点击事件。", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Chip的普通表现如下", - "desc": [ - "【avatar】: 左侧组件 【Widget】", - "【label】: 中间组件 【Widget】", - "【padding】 : 内边距 【EdgeInsetsGeometry】", - "【labelPadding】: label边距 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "可以设置颜色和阴影", - "desc": [ - "【backgroundColor】: 背景色 【Color】", - "【shadowColor】: 阴影色 【Color】", - "【elevation】: 影深 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "可以设置右侧点击按钮", - "desc": [ - "【deleteIcon】: 右侧组件(通常为Icon) 【Widget】", - "【deleteIconColor】: 右侧组件颜色 【Color】", - "【onDeleted】: 右侧组件点击事件 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Chip/node1_base.dart deleted file mode 100644 index 59f80507b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/node1_base.dart +++ /dev/null @@ -1,33 +0,0 @@ - - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; -class CustomChip extends StatelessWidget { - const CustomChip({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [ - Chip( - avatar: Image.asset("assets/images/icon_head.webp"), - label: const Text("张风捷特烈"), - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(5), - ), - const Chip( - avatar: CircleAvatar( - backgroundImage: - AssetImage("assets/images/wy_200x300.webp")), - label: Text("百里巫缨"), - padding: EdgeInsets.all(8), - labelPadding: EdgeInsets.all(6), - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/node2_color.dart b/modules/widget_system/widgets/lib/StatelessWidget/Chip/node2_color.dart deleted file mode 100644 index 0a1af3df4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/node2_color.dart +++ /dev/null @@ -1,36 +0,0 @@ - - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; -class ColorOfChip extends StatelessWidget { - const ColorOfChip({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [ - Chip( - avatar: Image.asset("assets/images/icon_head.webp"), - label: const Text("张风捷特烈"), - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(5), - backgroundColor: Colors.grey.withAlpha(66), - shadowColor: Colors.orangeAccent, - elevation: 3, - ), - Chip( - avatar: Image.asset("assets/images/icon_head.webp"), - label: const Text("张风捷特烈"), - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(5), - backgroundColor: Colors.cyanAccent.withAlpha(11), - shadowColor: Colors.blue.withAlpha(88), - elevation: 4, - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/node3_delete.dart b/modules/widget_system/widgets/lib/StatelessWidget/Chip/node3_delete.dart deleted file mode 100644 index e9eae1998..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/node3_delete.dart +++ /dev/null @@ -1,27 +0,0 @@ - - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; -import 'package:widgets/utils/dialog_about.dart'; - -class DeleteOfChip extends StatelessWidget { - const DeleteOfChip({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Chip( - avatar: Image.asset("assets/images/icon_head.webp"), - label: const Text("张风捷特烈"), - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(3), - backgroundColor: Colors.grey.withAlpha(66), - shadowColor: Colors.orangeAccent, -// deleteIcon: Icon(Icons.close,size: 18), - deleteIconColor: Colors.red, - onDeleted: () => DialogAbout.show(context), - elevation: 3, - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_de_DE.json deleted file mode 100644 index 4d334bfc6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "Auswahl-Chip", - "info": "Ähnlich wie die Chip-Komponente, aber mit einigen Auswahlattributen. Sie können die Farbe, die Schattenfarbe und das Auswahlereignis angeben, wenn sie ausgewählt ist.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Die normale Darstellung des ChoiceChip ist wie folgt", - "desc": [ - "【selectedColor】: Farbe bei Auswahl 【Color】", - "【selectedShadowColor】: Schattenfarbe bei Auswahl 【Color】", - "【onSelected】: Auswahlereignis 【Fuction(bool)】", - " Andere Attribute sind identisch mit der Chip-Komponente, ohne rechte Komponente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_en_US.json deleted file mode 100644 index ff345510f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "Choice Strip", - "info": "Similar in style to the Chip component, with some selectable properties. You can specify the color when selected, the shadow color, and the selection event.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "The normal performance of ChoiceChip is as follows", - "desc": [ - "【selectedColor】: Color when selected 【Color】", - "【selectedShadowColor】: Shadow color when selected 【Color】", - "【onSelected】: Selection event 【Fuction(bool)】", - " Other properties are the same as the Chip component, with no right component." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_es_ES.json deleted file mode 100644 index 09e2d306d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "Pestaña de selección", - "info": "Estilo similar al componente Chip, con algunas propiedades de selección. Puede especificar el color cuando está seleccionado, el color de la sombra y el evento de selección.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "El comportamiento normal de ChoiceChip es el siguiente", - "desc": [ - "【selectedColor】: Color cuando está seleccionado 【Color】", - "【selectedShadowColor】: Color de la sombra cuando está seleccionado 【Color】", - "【onSelected】: Evento de selección 【Fuction(bool)】", - " Otras propiedades son las mismas que el componente Chip, sin componente a la derecha." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_fr_FR.json deleted file mode 100644 index 5b7a40db5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "Petite barre de sélection", - "info": "Un style similaire au composant Chip, avec quelques propriétés de sélection. Vous pouvez spécifier la couleur lorsqu'il est sélectionné, la couleur de l'ombre et l'événement de sélection.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La performance normale de ChoiceChip est la suivante", - "desc": [ - "【selectedColor】: Couleur lorsqu'il est sélectionné 【Color】", - "【selectedShadowColor】: Couleur de l'ombre lorsqu'il est sélectionné 【Color】", - "【onSelected】: Événement de sélection 【Fuction(bool)】", - " Les autres propriétés sont les mêmes que le composant Chip, sans composant à droite." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_it_IT.json deleted file mode 100644 index 281199d10..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "Selezione Piccola Barra", - "info": "Uno stile simile al componente Chip, con alcune proprietà di selezione. È possibile specificare il colore selezionato, il colore dell'ombra e l'evento di selezione.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La performance normale di ChoiceChip è la seguente", - "desc": [ - "【selectedColor】: Colore selezionato 【Color】", - "【selectedShadowColor】: Colore dell'ombra selezionato 【Color】", - "【onSelected】: Evento di selezione 【Fuction(bool)】", - " Altre proprietà sono le stesse del componente Chip, senza componente a destra." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ja_JP.json deleted file mode 100644 index 5276900af..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "選択チップ", - "info": "Chipコンポーネントと似たスタイルで、いくつかの選択属性があります。選択時の色、影の色、および選択イベントを指定できます。", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ChoiceChipの通常の表現は以下の通りです", - "desc": [ - "【selectedColor】: 選択時の色 【Color】", - "【selectedShadowColor】: 選択時の影の色 【Color】", - "【onSelected】: 選択イベント 【Fuction(bool)】", - " 他の属性はChipコンポーネントと同じで、右側のコンポーネントはありません。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ko_KR.json deleted file mode 100644 index 492a2aef8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "선택 칩", - "info": "Chip 컴포넌트와 유사한 스타일로, 몇 가지 선택 속성이 있습니다. 선택 시 색상, 그림자 색상 및 선택 이벤트를 지정할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ChoiceChip의 일반적인 표현은 다음과 같습니다", - "desc": [ - "【selectedColor】: 선택 시 색상 【Color】", - "【selectedShadowColor】: 선택 시 그림자 색상 【Color】", - "【onSelected】: 선택 이벤트 【Fuction(bool)】", - " 다른 속성은 Chip 컴포넌트와 동일하며, 오른쪽 컴포넌트는 없습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_pt_PT.json deleted file mode 100644 index 3098e281d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "Barra de Seleção", - "info": "Estilo semelhante ao componente Chip, com algumas propriedades de seleção. Pode especificar a cor quando selecionado, a cor da sombra e o evento de seleção.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "O comportamento normal do ChoiceChip é o seguinte", - "desc": [ - "【selectedColor】: Cor quando selecionado 【Color】", - "【selectedShadowColor】: Cor da sombra quando selecionado 【Color】", - "【onSelected】: Evento de seleção 【Fuction(bool)】", - " Outras propriedades são iguais ao componente Chip, sem componente à direita." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ru_RU.json deleted file mode 100644 index 8078651ad..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "Выбор полоски", - "info": "Стиль, похожий на компонент Chip, с некоторыми свойствами выбора. Можно указать цвет при выборе, цвет тени и событие выбора.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Обычное поведение ChoiceChip следующее", - "desc": [ - "【selectedColor】: Цвет при выборе 【Color】", - "【selectedShadowColor】: Цвет тени при выборе 【Color】", - "【onSelected】: Событие выбора 【Fuction(bool)】", - " Остальные свойства такие же, как у компонента Chip, без правого компонента." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_zh-CN.json deleted file mode 100644 index 000e49a01..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "选择小条", - "info": "和Chip组件类似的样式,有一些选择的属性。可以指定选中时的颜色、阴影色和选择事件。", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ChoiceChip的普通表现如下", - "desc": [ - "【selectedColor】: 选中时颜色 【Color】", - "【selectedShadowColor】: 选中时阴影颜色 【Color】", - "【onSelected】: 选中事件 【Fuction(bool)】", - " 其他属性同Chip组件,无右侧组件。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/node1_base.dart deleted file mode 100644 index 973d090fc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/node1_base.dart +++ /dev/null @@ -1,39 +0,0 @@ - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; - -class CustomChoiceChip extends StatefulWidget { - const CustomChoiceChip({Key? key}) : super(key: key); - - @override - _CustomChoiceChipState createState() => _CustomChoiceChipState(); -} - -class _CustomChoiceChipState extends State { - bool _select = false; - - @override - Widget build(BuildContext context) { - return ChoiceChip( - selected: _select, - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(5), - label: Text( - _select ? - "You are selected it." : - "This is a ChoiceChip.", - style: const TextStyle(fontSize: 16), - ), - backgroundColor: Colors.grey.withAlpha(66), - avatar: Image.asset("assets/images/icon_head.webp"), - selectedColor: Colors.orangeAccent.withAlpha(44), - selectedShadowColor: Colors.blue, - shadowColor: Colors.orangeAccent, - elevation: 3, - onSelected: (value) => setState(() => _select = value), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_de_DE.json deleted file mode 100644 index ce5e95ac5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "Rundes Widget", - "info": "Kann ein Bild in einen Kreis verwandeln und in der Mitte ein Widget platzieren. Es können Radius, Vordergrundfarbe, Hintergrundfarbe usw. angegeben werden.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Darstellung von CircleAvatar", - "desc": [ - "【radius】 : Radius 【double】", - "【backgroundImage】 : Bildressource 【ImageProvider】", - "【foregroundColor】: Vordergrundfarbe 【Color】", - "【backgroundColor】: Hintergrundfarbe 【Color】", - "【minRadius】: Minimaler Radius 【double】", - "【maxRadius】: Maximaler Radius 【double】", - "【child】: Kind-Widget 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_en_US.json deleted file mode 100644 index d121b9386..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "Circular Component", - "info": "Can turn an image into a circle, and a component can be placed in the center. You can specify the radius, foreground color, background color, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CircleAvatar Performance", - "desc": [ - "【radius】: radius 【double】", - "【backgroundImage】: image resource 【ImageProvider】", - "【foregroundColor】: foreground color 【Color】", - "【backgroundColor】: background color 【Color】", - "【minRadius】: minimum radius 【double】", - "【maxRadius】: maximum radius 【double】", - "【child】: child component 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_es_ES.json deleted file mode 100644 index d1bfae5da..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "Componente Circular", - "info": "Puede convertir una imagen en un círculo y colocar un componente en el centro. Puede especificar el radio, el color de primer plano, el color de fondo, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Comportamiento de CircleAvatar", - "desc": [ - "【radius】 : radio 【double】", - "【backgroundImage】 : recurso de imagen 【ImageProvider】", - "【foregroundColor】: color de primer plano 【Color】", - "【backgroundColor】: color de fondo 【Color】", - "【minRadius】: radio mínimo 【double】", - "【maxRadius】: radio máximo 【double】", - "【child】: componente hijo 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_fr_FR.json deleted file mode 100644 index bdbef6fa0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "Composant Circulaire", - "info": "Permet de transformer une image en cercle et de placer un composant au centre. Peut spécifier le rayon, la couleur de premier plan, la couleur d'arrière-plan, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Comportement de CircleAvatar", - "desc": [ - "【radius】 : rayon 【double】", - "【backgroundImage】 : ressource d'image 【ImageProvider】", - "【foregroundColor】: couleur de premier plan 【Color】", - "【backgroundColor】: couleur d'arrière-plan 【Color】", - "【minRadius】: rayon minimum 【double】", - "【maxRadius】: rayon maximum 【double】", - "【child】: composant enfant 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_it_IT.json deleted file mode 100644 index a225eb75e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "Componente circolare", - "info": "Trasforma un'immagine in un cerchio e può posizionare un componente al centro. È possibile specificare il raggio, il colore di primo piano, il colore di sfondo, ecc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Comportamento di CircleAvatar", - "desc": [ - "【radius】 : raggio 【double】", - "【backgroundImage】 : risorsa immagine 【ImageProvider】", - "【foregroundColor】: colore di primo piano 【Color】", - "【backgroundColor】: colore di sfondo 【Color】", - "【minRadius】: raggio minimo 【double】", - "【maxRadius】: raggio massimo 【double】", - "【child】: componente figlio 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ja_JP.json deleted file mode 100644 index 4b8adfced..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "円形コンポーネント", - "info": "画像を円形にし、中央にコンポーネントを配置できます。半径、前景色、背景色などを指定できます。", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CircleAvatarの表現", - "desc": [ - "【radius】 : 半径 【double】", - "【backgroundImage】 : 画像リソース 【ImageProvider】", - "【foregroundColor】: 前景色 【Color】", - "【backgroundColor】: 背景色 【Color】", - "【minRadius】: 最小半径 【double】", - "【maxRadius】: 最大半径 【double】", - "【child】: 子コンポーネント 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ko_KR.json deleted file mode 100644 index 91fabafcd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "원형 컴포넌트", - "info": "이미지를 원형으로 만들고 중앙에 컴포넌트를 배치할 수 있습니다. 반지름, 전경색, 배경색 등을 지정할 수 있습니다.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CircleAvatar의 표현", - "desc": [ - "【radius】 : 반지름 【double】", - "【backgroundImage】 : 이미지 리소스 【ImageProvider】", - "【foregroundColor】: 전경색 【Color】", - "【backgroundColor】: 배경색 【Color】", - "【minRadius】: 최소 반지름 【double】", - "【maxRadius】: 최대 반지름 【double】", - "【child】: 자식 컴포넌트 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_pt_PT.json deleted file mode 100644 index 7ac327c8f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "Componente Circular", - "info": "Pode transformar uma imagem em um círculo e colocar um componente no meio. Pode especificar raio, cor de primeiro plano, cor de fundo, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Comportamento do CircleAvatar", - "desc": [ - "【radius】 : raio 【double】", - "【backgroundImage】 : recurso de imagem 【ImageProvider】", - "【foregroundColor】: cor de primeiro plano 【Color】", - "【backgroundColor】: cor de fundo 【Color】", - "【minRadius】: raio mínimo 【double】", - "【maxRadius】: raio máximo 【double】", - "【child】: componente filho 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ru_RU.json deleted file mode 100644 index c76175ff0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "Круглый компонент", - "info": "Может превратить изображение в круг и разместить компонент в центре. Можно указать радиус, цвет переднего плана, цвет фона и т.д.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Поведение CircleAvatar", - "desc": [ - "【radius】 : радиус 【double】", - "【backgroundImage】 : ресурс изображения 【ImageProvider】", - "【foregroundColor】: цвет переднего плана 【Color】", - "【backgroundColor】: цвет фона 【Color】", - "【minRadius】: минимальный радиус 【double】", - "【maxRadius】: максимальный радиус 【double】", - "【child】: дочерний компонент 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_zh-CN.json deleted file mode 100644 index 53f64fbe9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "圆形组件", - "info": "可将一张图片变成圆形,并且中间可以放置一个组件。可指定半径、前景色、背景色等。", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CircleAvatar的表现", - "desc": [ - "【radius】 : 半径 【double】", - "【backgroundImage】 : 图片资源 【ImageProvider】", - "【foregroundColor】: 前景色 【Color】", - "【backgroundColor】: 背景色 【Color】", - "【minRadius】: 最小半径 【double】", - "【maxRadius】: 最大半径 【double】", - "【child】: 孩子组件 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/node1_base.dart deleted file mode 100644 index 796785f26..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/node1_base.dart +++ /dev/null @@ -1,22 +0,0 @@ -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; - -class CustomCircleAvatar extends StatelessWidget { - const CustomCircleAvatar({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const CircleAvatar( - radius: 50, - backgroundImage: AssetImage("assets/images/wy_200x300.webp"), - foregroundColor: Colors.white, - child: Icon( - Icons.check, - size: 50, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_de_DE.json deleted file mode 100644 index eabc3b828..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "Schließen-Button", - "info": "Ein IconButton mit Schließfunktion, das Schließsymbol kann nicht geändert werden.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButton-Klickereignis", - "desc": [ - "【onPressed】 : Klickereignis 【VoidCallback?】", - "【style】: Button-Stil 【ButtonStyle?】", - "【color】: Farbe 【Color】", - "Wenn onPressed leer ist, wird beim Klicken die aktuelle Oberfläche verlassen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_en_US.json deleted file mode 100644 index 14e86541c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "Close Button", - "info": "An IconButton with close functionality, the close icon cannot be changed.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButton Click Event", - "desc": [ - "【onPressed】: Click event 【VoidCallback?】", - "【style】: Button style 【ButtonStyle?】", - "【color】: Color 【Color】", - "When onPressed is null, clicking will exit the current interface." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_es_ES.json deleted file mode 100644 index 9384aac01..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "Botón de cerrar", - "info": "Un IconButton con función de cerrar, el ícono de cerrar no se puede cambiar.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clic de CloseButton", - "desc": [ - "【onPressed】: Evento de clic 【VoidCallback?】", - "【style】: Estilo del botón 【ButtonStyle?】", - "【color】: Color 【Color】", - "Cuando onPressed es nulo, al hacer clic se cerrará la interfaz actual." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_fr_FR.json deleted file mode 100644 index d05f99e50..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "Bouton de fermeture", - "info": "Un IconButton avec une fonction de fermeture, l'icône de fermeture ne peut pas être modifiée.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événement de clic du CloseButton", - "desc": [ - "【onPressed】 : Événement de clic 【VoidCallback?】", - "【style】: Style du bouton 【ButtonStyle?】", - "【color】: Couleur 【Color】", - "Lorsque onPressed est vide, un clic quitte l'interface actuelle." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_it_IT.json deleted file mode 100644 index 8282b27e9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "Pulsante di chiusura", - "info": "Un IconButton con funzionalità di chiusura, l'icona di chiusura non può essere modificata.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento di clic del Pulsante di chiusura", - "desc": [ - "【onPressed】: Evento di clic 【VoidCallback?】", - "【style】: Stile del pulsante 【ButtonStyle?】", - "【color】: Colore 【Color】", - "Quando onPressed è vuoto, il clic chiude l'interfaccia corrente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ja_JP.json deleted file mode 100644 index 452d7464f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "閉じるボタン", - "info": "閉じる機能を持つIconButtonで、閉じるアイコンは変更できません。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButtonクリックイベント", - "desc": [ - "【onPressed】 : クリックイベント 【VoidCallback?】", - "【style】: ボタンスタイル 【ButtonStyle?】", - "【color】: 色 【Color】", - "onPressedが空の場合、クリックすると現在の画面が閉じます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ko_KR.json deleted file mode 100644 index dde13e43e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "닫기 버튼", - "info": "닫기 기능이 있는 IconButton, 닫기 아이콘은 변경할 수 없습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButton 클릭 이벤트", - "desc": [ - "【onPressed】 : 클릭 이벤트 【VoidCallback?】", - "【style】: 버튼 스타일 【ButtonStyle?】", - "【color】: 색상 【Color】", - "onPressed가 비어 있을 때, 클릭하면 현재 화면을 종료합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_pt_PT.json deleted file mode 100644 index 1b9c91684..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "Botão de Fechar", - "info": "Um IconButton com função de fechar, o ícone de fechar não pode ser alterado.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de Clique do CloseButton", - "desc": [ - "【onPressed】 : Evento de clique 【VoidCallback?】", - "【style】: Estilo do botão 【ButtonStyle?】", - "【color】: Cor 【Color】", - "Quando onPressed estiver vazio, ao clicar, a interface atual será fechada." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ru_RU.json deleted file mode 100644 index ce22d866d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "Кнопка закрытия", - "info": "IconButton с функцией закрытия, значок закрытия нельзя изменить.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Событие нажатия кнопки CloseButton", - "desc": [ - "【onPressed】 : Событие нажатия 【VoidCallback?】", - "【style】: Стиль кнопки 【ButtonStyle?】", - "【color】: Цвет 【Color】", - "Когда onPressed пуст, нажатие закрывает текущий интерфейс." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_zh-CN.json deleted file mode 100644 index 844ed1b3d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "关闭按钮", - "info": "一个具有关闭功能的IconButton,关闭图标不可更改。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButton点击事件", - "desc": [ - "【onPressed】 : 点击事件 【VoidCallback?】", - "【style】: 按钮样式 【ButtonStyle?】", - "【color】: 颜色 【Color】", - "onPressed 为空时,点击时会退出当前界面。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/node1_base.dart deleted file mode 100644 index 973db918c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/node1_base.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -class CustomCloseButton extends StatelessWidget { - const CustomCloseButton({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const CloseButton(); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_de_DE.json deleted file mode 100644 index 89f22fb29..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "Schaltfläche zum Schließen Symbol", - "info": "Ein Close Icon-Symbol, das je nach Plattform das entsprechende Symbol anzeigt und über ActionIconTheme angepasst werden kann.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButtonIcon Effekt", - "desc": [ - "Passt das Symbol der Schaltfläche zum Schließen für verschiedene Plattformen über die _ActionIcon-Komponente gemäß dem ActionIconTheme an." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_en_US.json deleted file mode 100644 index f2a5aaa08..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "Close Button Icon", - "info": "A close Icon that displays the corresponding icon based on the platform, and can be customized with ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButtonIcon Effect", - "desc": [ - "The _ActionIcon component adapts the close button icon for different platforms based on the ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_es_ES.json deleted file mode 100644 index 9df7ee0a7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "Icono de botón de cierre", - "info": "Un icono de cierre, muestra el icono correspondiente según la plataforma, se puede personalizar el tema a través de ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Efecto de CloseButtonIcon", - "desc": [ - "A través del componente _ActionIcon, se adapta el icono del botón de cierre a diferentes plataformas según el tema de ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_fr_FR.json deleted file mode 100644 index 4237a4ea4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "Icône de bouton de fermeture", - "info": "Une icône de fermeture, affichant l'icône correspondante selon la plateforme, peut être personnalisée via ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Effet de CloseButtonIcon", - "desc": [ - "Le composant _ActionIcon adapte l'icône de bouton de fermeture à différentes plateformes selon le thème ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_it_IT.json deleted file mode 100644 index 4a687a0b0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "Icona del pulsante di chiusura", - "info": "Un'icona di chiusura, che mostra l'icona corrispondente in base alla piattaforma, può essere personalizzata con il tema ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Effetto CloseButtonIcon", - "desc": [ - "Attraverso il componente _ActionIcon, adatta l'icona del pulsante di chiusura a diverse piattaforme in base al tema ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ja_JP.json deleted file mode 100644 index 5993f2784..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "閉じるボタンアイコン", - "info": "閉じるアイコンで、プラットフォームに応じて対応するアイコンを表示します。ActionIconThemeでテーマをカスタマイズできます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButtonIcon 効果", - "desc": [ - "_ActionIconコンポーネントを使用して、ActionIconThemeテーマに基づいて、異なるプラットフォームの閉じるボタンアイコンを適応させます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ko_KR.json deleted file mode 100644 index 1e02127e6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "닫기 버튼 아이콘", - "info": "닫기 아이콘, 플랫폼에 따라 해당 아이콘을 표시하며, ActionIconTheme을 통해 테마를 사용자 정의할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButtonIcon 효과", - "desc": [ - "_ActionIcon 컴포넌트를 통해 ActionIconTheme 테마에 따라 다른 플랫폼의 닫기 버튼 아이콘을 적용합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_pt_PT.json deleted file mode 100644 index 26d0adbb2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "Ícone do Botão de Fechar", - "info": "Um ícone de fechar que exibe o ícone correspondente de acordo com a plataforma, podendo ser personalizado com o tema ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Efeito do CloseButtonIcon", - "desc": [ - "O componente _ActionIcon adapta o ícone do botão de fechar de acordo com o tema ActionIconTheme para diferentes plataformas." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ru_RU.json deleted file mode 100644 index 95657f89d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "Иконка кнопки закрытия", - "info": "Иконка закрытия, которая отображает соответствующую иконку в зависимости от платформы. Можно настроить тему через ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Эффект CloseButtonIcon", - "desc": [ - "Компонент _ActionIcon адаптирует иконку кнопки закрытия для разных платформ в зависимости от темы ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_zh-CN.json deleted file mode 100644 index 0eb431175..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "关闭按钮图标", - "info": "一个关闭 Icon 图标, 根据平台展示对应的图标,可以通过 ActionIconTheme 定制主题。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButtonIcon 效果", - "desc": [ - "通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的关闭按钮图标。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/node1_base.dart deleted file mode 100644 index c18bfd496..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/node1_base.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/11/28 -/// contact me by email 1981462002@qq.com - -class CloseButtonIconDemo extends StatelessWidget { - const CloseButtonIconDemo({super.key}); - - @override - Widget build(BuildContext context) { - return const CloseButtonIcon(); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_de_DE.json deleted file mode 100644 index aac7c4dbb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_de_DE.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "Container-Komponente", - "info": "Eine Container-Komponente, die ein einzelnes Unterelement aufnehmen kann. Integriert mehrere Funktionen von Unterelementen wie Innen- und Außenabstände, Transformationen, Dekorationen, Einschränkungen usw...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Kann verwendet werden, um einen Bereich mit einer bestimmten Breite und Höhe anzuzeigen", - "desc": [ - "【width】 : Breite 【int】", - "【height】: Höhe 【int】", - "【color】: Farbe 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "Kann ein Unterelement in den Bereich einfügen", - "desc": [ - "【padding】 : Innenabstand 【EdgeInsetsGeometry】", - "【margin】: Außenabstand 【EdgeInsetsGeometry】", - "【child】: Unterelement 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Kann das Unterelement ausrichten und positionieren", - "desc": [ - "【alignment】 : Ausrichtung und Positionierung 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "Kann das Unterelement dekorieren", - "desc": [ - "【decoration】 : Dekoration 【Decoration】", - "Kann dekorieren: Rahmen, abgerundete Ecken, Farbe, Verlauf, Schatten, Bilder usw." - ] - }, - { - "file": "node5_transform.dart", - "name": "Container hat auch Transformationsfähigkeiten", - "desc": [ - "【transform】 : Transformationsmatrix 【Matrix4】", - "Matrix-Transformation basierend auf Matrix4, Details siehe lineare Algebra" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Einschränkungen des Containers", - "desc": [ - "【constraints】 : Einschränkungen 【BoxConstraints】", - "Schränkt die Größe des Bereichs ein, nicht kleiner als die angegebene minimale Breite und Höhe, und nicht größer als die angegebene maximale Breite und Höhe." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_en_US.json deleted file mode 100644 index 3e1ce07f1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_en_US.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "Container Component", - "info": "A container component used to hold a single child component. It integrates several functionalities of single child components, such as padding, margin, transformation, decoration, constraints, etc...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Can be used to display an area with specified width and height", - "desc": [ - "【width】 : width 【int】", - "【height】: height 【int】", - "【color】: color 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "Can place a child component within the area", - "desc": [ - "【padding】 : padding 【EdgeInsetsGeometry】", - "【margin】: margin 【EdgeInsetsGeometry】", - "【child】: child component 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Can align and position the child component", - "desc": [ - "【alignment】 : alignment 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "Can decorate the child component", - "desc": [ - "【decoration】 : decoration 【Decoration】", - "Can decorate: borders, rounded corners, colors, gradients, shadows, images, etc." - ] - }, - { - "file": "node5_transform.dart", - "name": "Container also has transformation capabilities", - "desc": [ - "【transform】 : transformation matrix 【Matrix4】", - "Matrix transformation based on Matrix4, see linear algebra for details" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Constraints of the Container", - "desc": [ - "【constraints】 : constraints 【BoxConstraints】", - "Will constrain the size of the area, it will not be smaller than the specified minimum width and height, nor larger than the specified maximum width and height." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_es_ES.json deleted file mode 100644 index 2fe57f969..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_es_ES.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "Componente Contenedor", - "info": "Componente contenedor utilizado para albergar un único componente hijo. Integra varias funciones de componentes hijos únicos, como márgenes internos y externos, transformaciones, decoraciones, restricciones, etc...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Puede usarse para mostrar un área con un ancho y alto especificados", - "desc": [ - "【width】 : Ancho 【int】", - "【height】: Alto 【int】", - "【color】: Color 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "Puede colocar un componente hijo dentro del área", - "desc": [ - "【padding】 : Relleno interno 【EdgeInsetsGeometry】", - "【margin】: Margen externo 【EdgeInsetsGeometry】", - "【child】: Componente hijo 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Puede alinear y posicionar el componente hijo", - "desc": [ - "【alignment】 : Alineación y posicionamiento 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "Puede decorar el componente hijo", - "desc": [ - "【decoration】 : Decoración 【Decoration】", - "Se puede decorar: bordes, esquinas redondeadas, colores, degradados, sombras, imágenes, etc." - ] - }, - { - "file": "node5_transform.dart", - "name": "Container también tiene capacidad de transformación", - "desc": [ - "【transform】 : Matriz de transformación 【Matrix4】", - "Transformación basada en la matriz Matrix4, los detalles de la transformación se pueden ver en álgebra lineal" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Restricciones de Container", - "desc": [ - "【constraints】 : Restricciones 【BoxConstraints】", - "Restringirá el tamaño del área, no será menor que el ancho y alto mínimo especificados, ni mayor que el ancho y alto máximo especificados." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_fr_FR.json deleted file mode 100644 index 50c57bbe0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_fr_FR.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "Composant conteneur", - "info": "Composant conteneur utilisé pour contenir un seul composant enfant. Intègre plusieurs fonctionnalités de composants enfants uniques, telles que les marges intérieures et extérieures, la transformation, la décoration, les contraintes, etc...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Peut être utilisé pour afficher une zone de largeur et de hauteur spécifiées", - "desc": [ - "【width】 : Largeur 【int】", - "【height】: Hauteur 【int】", - "【color】: Couleur 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "Peut contenir un composant enfant dans la zone", - "desc": [ - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】", - "【margin】: Marge extérieure 【EdgeInsetsGeometry】", - "【child】: Composant enfant 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Peut aligner et positionner le composant enfant", - "desc": [ - "【alignment】 : Alignement et positionnement 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "Peut décorer le composant enfant", - "desc": [ - "【decoration】 : Décoration 【Decoration】", - "Peut décorer : bordures, coins arrondis, couleurs, dégradés, ombres, images, etc." - ] - }, - { - "file": "node5_transform.dart", - "name": "Le Container a également des propriétés de transformation", - "desc": [ - "【transform】 : Matrice de transformation 【Matrix4】", - "Transformation matricielle basée sur Matrix4, voir l'algèbre linéaire pour plus de détails sur les transformations" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Les contraintes du Container", - "desc": [ - "【constraints】 : Contraintes 【BoxConstraints】", - "Contraint la taille de la zone, ne sera pas plus petite que la largeur et la hauteur minimales spécifiées, ni plus grande que la largeur et la hauteur maximales spécifiées." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_it_IT.json deleted file mode 100644 index 1ffcac6cd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_it_IT.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "Componente contenitore", - "info": "Un componente contenitore utilizzato per contenere un singolo componente figlio. Integra diverse funzionalità per i componenti figli singoli, come margini interni ed esterni, trasformazioni, decorazioni, vincoli, ecc...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Può essere utilizzato per visualizzare un'area con larghezza e altezza specificate", - "desc": [ - "【width】 : Larghezza 【int】", - "【height】: Altezza 【int】", - "【color】: Colore 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "Può contenere un componente figlio all'interno dell'area", - "desc": [ - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】", - "【margin】: Spaziatura esterna 【EdgeInsetsGeometry】", - "【child】: Componente figlio 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Può allineare e posizionare il componente figlio", - "desc": [ - "【alignment】 : Allineamento e posizionamento 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "Può decorare il componente figlio", - "desc": [ - "【decoration】 : Decorazione 【Decoration】", - "Può decorare: bordi, angoli arrotondati, colori, gradienti, ombre, immagini, ecc." - ] - }, - { - "file": "node5_transform.dart", - "name": "Container ha anche capacità di trasformazione", - "desc": [ - "【transform】 : Matrice di trasformazione 【Matrix4】", - "Trasformazione basata sulla matrice Matrix4, per i dettagli vedere l'algebra lineare" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Vincoli del Container", - "desc": [ - "【constraints】 : Vincoli 【BoxConstraints】", - "Vincolerà le dimensioni dell'area, non sarà inferiore alla larghezza e altezza minima specificata, né superiore alla larghezza e altezza massima specificata." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ja_JP.json deleted file mode 100644 index 1dfc93af3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ja_JP.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "コンテナコンポーネント", - "info": "単一の子コンポーネントを収容するためのコンテナコンポーネントです。内部および外部の余白、変形、装飾、制約など、複数の単一子コンポーネントの機能を統合しています...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "指定された幅と高さの領域を表示するために使用できます", - "desc": [ - "【width】 : 幅 【int】", - "【height】: 高さ 【int】", - "【color】: 色 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "領域内に子コンポーネントを配置できます", - "desc": [ - "【padding】 : 内側の余白 【EdgeInsetsGeometry】", - "【margin】: 外側の余白 【EdgeInsetsGeometry】", - "【child】: 子コンポーネント 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "子コンポーネントを整列および配置できます", - "desc": [ - "【alignment】 : 整列および配置 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "子コンポーネントを装飾できます", - "desc": [ - "【decoration】 : 装飾 【Decoration】", - "装飾可能: ボーダー、角丸、色、グラデーション、シャドウ、画像など" - ] - }, - { - "file": "node5_transform.dart", - "name": "Containerは変形性も持っています", - "desc": [ - "【transform】 : 変換行列 【Matrix4】", - "Matrix4に基づく行列変換、変換の詳細は線形代数を参照してください" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Containerの制約性", - "desc": [ - "【constraints】 : 制約 【BoxConstraints】", - "この領域のサイズを制約し、指定された最小幅と高さより小さくならないようにし、指定された最大幅と高さより大きくならないようにします。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ko_KR.json deleted file mode 100644 index 183d80268..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ko_KR.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "컨테이너 컴포넌트", - "info": "단일 자식 컴포넌트를 수용하는 컨테이너 컴포넌트입니다. 내부 및 외부 여백, 변형, 장식, 제약 등 여러 단일 자식 컴포넌트의 기능을 통합했습니다...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "지정된 너비와 높이의 영역을 표시할 수 있습니다", - "desc": [ - "【width】 : 너비 【int】", - "【height】: 높이 【int】", - "【color】: 색상 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "영역에 자식 컴포넌트를 넣을 수 있습니다", - "desc": [ - "【padding】 : 내부 여백 【EdgeInsetsGeometry】", - "【margin】: 외부 여백 【EdgeInsetsGeometry】", - "【child】: 자식 컴포넌트 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "자식 컴포넌트를 정렬 및 위치 지정할 수 있습니다", - "desc": [ - "【alignment】 : 정렬 및 위치 지정 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "자식 컴포넌트를 장식할 수 있습니다", - "desc": [ - "【decoration】 : 장식 【Decoration】", - "장식 가능: 테두리, 둥근 모서리, 색상, 그라데이션, 그림자, 이미지 등" - ] - }, - { - "file": "node5_transform.dart", - "name": "Container는 변환 기능도 가지고 있습니다", - "desc": [ - "【transform】 : 변환 행렬 【Matrix4】", - "Matrix4 기반의 행렬 변환, 변환 상세는 선형 대수 참조" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Container의 제약성", - "desc": [ - "【constraints】 : 제약 【BoxConstraints】", - "이 영역의 크기를 제한하며, 지정된 최소 너비와 높이보다 작지 않고, 지정된 최대 너비와 높이보다 크지 않습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_pt_PT.json deleted file mode 100644 index a4a4af6a9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_pt_PT.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "Componente de Contêiner", - "info": "Componente de contêiner usado para acomodar um único componente filho. Integra várias funcionalidades de componentes filhos únicos, como margens internas e externas, transformações, decorações, restrições, etc...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Pode ser usado para exibir uma área com largura e altura especificadas", - "desc": [ - "【width】 : Largura 【int】", - "【height】: Altura 【int】", - "【color】: Cor 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "Pode colocar um componente filho na área", - "desc": [ - "【padding】 : Margem interna 【EdgeInsetsGeometry】", - "【margin】: Margem externa 【EdgeInsetsGeometry】", - "【child】: Componente filho 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Pode alinhar e posicionar o componente filho", - "desc": [ - "【alignment】 : Alinhamento e posicionamento 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "Pode decorar o componente filho", - "desc": [ - "【decoration】 : Decoração 【Decoration】", - "Pode decorar: bordas, arcos, cores, gradientes, sombras, imagens, etc." - ] - }, - { - "file": "node5_transform.dart", - "name": "Container também possui transformações", - "desc": [ - "【transform】 : Matriz de transformação 【Matrix4】", - "Transformação de matriz baseada em Matrix4, detalhes da transformação veja álgebra linear" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Restrições do Container", - "desc": [ - "【constraints】 : Restrições 【BoxConstraints】", - "Irá restringir o tamanho da área, não será menor que a largura e altura mínima especificada, nem maior que a largura e altura máxima especificada." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ru_RU.json deleted file mode 100644 index 5ee7cd290..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ru_RU.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "Контейнерный компонент", - "info": "Контейнерный компонент для размещения одного дочернего компонента. Интегрирует несколько функций для одного дочернего компонента, таких как внутренние и внешние отступы, трансформации, декорации, ограничения и т.д...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Может использоваться для отображения области с заданной шириной и высотой", - "desc": [ - "【width】 : Ширина 【int】", - "【height】: Высота 【int】", - "【color】: Цвет 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "Можно поместить один дочерний компонент в область", - "desc": [ - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】", - "【margin】: Внешние отступы 【EdgeInsetsGeometry】", - "【child】: Дочерний компонент 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Можно выровнять и позиционировать дочерний компонент", - "desc": [ - "【alignment】 : Выравнивание и позиционирование 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "Можно украсить дочерний компонент", - "desc": [ - "【decoration】 : Декорация 【Decoration】", - "Можно украсить: границы, скругления, цвет, градиент, тени, изображения и т.д." - ] - }, - { - "file": "node5_transform.dart", - "name": "Container также обладает трансформационными свойствами", - "desc": [ - "【transform】 : Матрица трансформации 【Matrix4】", - "Матричные преобразования на основе Matrix4, подробности см. в линейной алгебре" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Ограничения Container", - "desc": [ - "【constraints】 : Ограничения 【BoxConstraints】", - "Ограничивает размер области, не позволяя ей быть меньше указанной минимальной ширины и высоты, а также больше указанной максимальной ширины и высоты." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_zh-CN.json deleted file mode 100644 index cb27642aa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_zh-CN.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "容器组件", - "info": "用于容纳单个子组件的容器组件。集成了若干个单子组件的功能,如内外边距、形变、装饰、约束等...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "可用于显示一个指定宽高的区域", - "desc": [ - "【width】 : 宽 【int】", - "【height】: 高 【int】", - "【color】: 颜色 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "可以在区域中放入一个子组件", - "desc": [ - "【padding】 : 内边距 【EdgeInsetsGeometry】", - "【margin】: 外边距 【EdgeInsetsGeometry】", - "【child】: 子组件 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "可对子组件进行对齐定位", - "desc": [ - "【alignment】 : 对齐定位 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "可对子组件进行装饰", - "desc": [ - "【decoration】 : 装饰 【Decoration】", - "可装饰: 边线、圆弧、颜色、渐变色、阴影、图片等内容" - ] - }, - { - "file": "node5_transform.dart", - "name": "Container还具有变换性", - "desc": [ - "【transform】 : 变换矩阵 【Matrix4】", - "基于Matrix4的矩阵变换,变换详情见线性代数" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Container的约束性", - "desc": [ - "【constraints】 : 约束 【BoxConstraints】", - "会约束该区域的尺寸,不会小于指定的最小宽高,也不会大于指定的最大宽高。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Container/node1_base.dart deleted file mode 100644 index b4cb2c7ff..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/node1_base.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class CustomContainer extends StatelessWidget { - const CustomContainer({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.topLeft, - width: 200, - height: 200 * 0.618, - color: Colors.red.withAlpha(88), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/node2_child.dart b/modules/widget_system/widgets/lib/StatelessWidget/Container/node2_child.dart deleted file mode 100644 index 592513f39..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/node2_child.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class ContainerWithChild extends StatelessWidget { - const ContainerWithChild({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.topLeft, - padding: const EdgeInsets.all(20), - margin: const EdgeInsets.all(10), - width: 200, - height: 200 * 0.618, - color: Colors.grey.withAlpha(88), - child: const Icon(Icons.android), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/node3_alignment.dart b/modules/widget_system/widgets/lib/StatelessWidget/Container/node3_alignment.dart deleted file mode 100644 index 069ed3c88..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/node3_alignment.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class ContainerAlignment extends StatelessWidget { - const ContainerAlignment({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.bottomRight, - width: 200, - height: 200 * 0.618, - color: Colors.grey.withAlpha(88), - child: const Icon( - Icons.android, - color: Colors.green, - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/node4_decoration.dart b/modules/widget_system/widgets/lib/StatelessWidget/Container/node4_decoration.dart deleted file mode 100644 index 7d35f39ce..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/node4_decoration.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class ContainerDecoration extends StatelessWidget { - const ContainerDecoration({super.key}); - - List get rainbow => [ - 0xffff0000, - 0xffFF7F00, - 0xffFFFF00, - 0xff00FF00, - 0xff00FFFF, - 0xff0000FF, - 0xff8B00FF - ]; - - List get stops => [0.0, 1 / 6, 2 / 6, 3 / 6, 4 / 6, 5 / 6, 1.0]; - - @override - Widget build(BuildContext context) { - - return Container( - alignment: Alignment.center, - width: 200, - height: 200 * 0.618, - margin: const EdgeInsets.all(20), - padding: const EdgeInsets.all(20), - decoration: BoxDecoration(//添加渐变色 - gradient: LinearGradient( - stops: stops, - colors: rainbow.map((e) => Color(e)).toList()), - borderRadius: const BorderRadius.only( - topLeft: Radius.circular(50), - bottomRight: Radius.circular(50)), - boxShadow: const [ - BoxShadow( - color: Colors.grey, - offset: Offset(1, 1), - blurRadius: 10, - spreadRadius: 1), - ]), - child: const Text( - "Container", - style: TextStyle(fontSize: 20), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/node5_transform.dart b/modules/widget_system/widgets/lib/StatelessWidget/Container/node5_transform.dart deleted file mode 100644 index f2598d30d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/node5_transform.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class ContainerTransform extends StatelessWidget { - const ContainerTransform({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 150, - height: 150 * 0.618, - transform: Matrix4.skew(-pi / 10, 0), - child: const Text( - "Container", - style: TextStyle(fontSize: 20), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/node6_constraints.dart b/modules/widget_system/widgets/lib/StatelessWidget/Container/node6_constraints.dart deleted file mode 100644 index c67937c16..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/node6_constraints.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class ContainerConstraints extends StatelessWidget { - const ContainerConstraints({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue, - width: 200, - height: 200 * 0.618, - constraints: const BoxConstraints( - minWidth: 100, - maxWidth: 150, - minHeight: 20, - maxHeight: 100, - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_de_DE.json deleted file mode 100644 index 65402c8dd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "iOS-Aktionsblatt", - "info": "Ein iOS-stiliges Popup-Auswahlmenü, das mehrere Schaltflächen enthalten kann und normalerweise mit CupertinoActionSheetAction verwendet wird.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoActionSheet", - "desc": [ - "【title】 : Erstes Zeilenelement 【Widget】", - "【message】 : Zweites Zeilenelement 【Widget】", - "【cancelButton】 : Abbrechen-Schaltflächenelement 【Widget】", - "【actions】 : Liste der mittleren Elemente 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_en_US.json deleted file mode 100644 index 26edfc6cb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "iOS Action Sheet", - "info": "A pop-up selection structure in iOS style that can hold multiple buttons, generally used in conjunction with CupertinoActionSheetAction.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoActionSheet", - "desc": [ - "【title】: First row component 【Widget】", - "【message】: Second row component 【Widget】", - "【cancelButton】: Component at the cancel button 【Widget】", - "【actions】: List of middle components 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_es_ES.json deleted file mode 100644 index 58157eace..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "Hoja de acciones de iOS", - "info": "Estructura de selección emergente al estilo de iOS, que puede contener múltiples botones, generalmente se usa junto con CupertinoActionSheetAction.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoActionSheet", - "desc": [ - "【title】 : Componente de la primera línea 【Widget】", - "【message】 : Componente de la segunda línea 【Widget】", - "【cancelButton】 : Componente del botón de cancelar 【Widget】", - "【actions】 : Lista de componentes intermedios 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_fr_FR.json deleted file mode 100644 index 049a82aa5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "Feuille d'action iOS", - "info": "Une structure de sélection contextuelle de style iOS, pouvant contenir plusieurs boutons, généralement utilisée avec CupertinoActionSheetAction.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoActionSheet", - "desc": [ - "【title】 : Composant de la première ligne 【Widget】", - "【message】 : Composant de la deuxième ligne 【Widget】", - "【cancelButton】 : Composant du bouton d'annulation 【Widget】", - "【actions】 : Liste des composants du milieu 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_it_IT.json deleted file mode 100644 index 80b958601..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "Foglio di azione iOS", - "info": "Struttura di selezione pop-up in stile iOS, può contenere molti pulsanti, generalmente utilizzato insieme a CupertinoActionSheetAction.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoActionSheet", - "desc": [ - "【title】 : Componente della prima riga 【Widget】", - "【message】 : Componente della seconda riga 【Widget】", - "【cancelButton】 : Componente del pulsante di annullamento 【Widget】", - "【actions】 : Lista dei componenti centrali 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ja_JP.json deleted file mode 100644 index 79b13d240..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "iOSアクションシート", - "info": "iOSスタイルのポップアップ選択構造で、多くのボタンを配置でき、通常はCupertinoActionSheetActionと併用されます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheetの基本的な使用", - "desc": [ - "【title】 : 最初の行のコンポーネント 【Widget】", - "【message】 : 2行目のコンポーネント 【Widget】", - "【cancelButton】 : キャンセルボタンのコンポーネント 【Widget】", - "【actions】 : 中間のコンポーネントリスト 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ko_KR.json deleted file mode 100644 index ee43433d6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "iOS 행동 시트", - "info": "iOS 스타일의 팝업 선택 구조로, 여러 버튼을 넣을 수 있으며 일반적으로 CupertinoActionSheetAction과 함께 사용됩니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheet 기본 사용", - "desc": [ - "【title】 : 첫 번째 줄 컴포넌트 【Widget】", - "【message】 : 두 번째 줄 컴포넌트 【Widget】", - "【cancelButton】 : 취소 버튼 컴포넌트 【Widget】", - "【actions】 : 중간 컴포넌트 목록 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_pt_PT.json deleted file mode 100644 index 8b648e9c2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "Folha de Ação iOS", - "info": "Estrutura de seleção pop-up no estilo iOS, que pode conter vários botões, geralmente usada em conjunto com CupertinoActionSheetAction.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoActionSheet", - "desc": [ - "【title】 : Componente da primeira linha 【Widget】", - "【message】 : Componente da segunda linha 【Widget】", - "【cancelButton】 : Componente do botão de cancelamento 【Widget】", - "【actions】 : Lista de componentes do meio 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ru_RU.json deleted file mode 100644 index 9c74cbe5f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "iOS лист действий", - "info": "Всплывающая структура выбора в стиле iOS, которая может содержать несколько кнопок, обычно используется вместе с CupertinoActionSheetAction.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoActionSheet", - "desc": [ - "【title】 : Компонент первой строки 【Widget】", - "【message】 : Компонент второй строки 【Widget】", - "【cancelButton】 : Компонент кнопки отмены 【Widget】", - "【actions】 : Список компонентов в середине 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_zh-CN.json deleted file mode 100644 index c716d2990..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "iOS行为单", - "info": "iOS风格的弹出选择结构,可放多的按钮,一般与CupertinoActionSheetAction联用。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheet基本使用", - "desc": [ - "【title】 : 第一行组件 【Widget】", - "【message】 : 第二行组件 【Widget】", - "【cancelButton】 : 取消按钮处组件 【Widget】", - "【actions】 : 中间组件列表 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/node1_base.dart deleted file mode 100644 index e7c1c58fc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/node1_base.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoActionSheet extends StatelessWidget { - const CustomCupertinoActionSheet({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - _buildRaisedButton(context), - _buildCupertinoActionSheet(context), - ], - ); - } - - Widget _buildCupertinoActionSheet(BuildContext context) => - Container( - alignment: Alignment.bottomCenter, - child: CupertinoActionSheet( - title: const Text("Please chose a language"), - message: const Text('the language you use in this application.'), - cancelButton: CupertinoActionSheetAction( - onPressed: () => Navigator.pop(context), child: const Text("Cancel")), - actions: [ - CupertinoActionSheetAction( - onPressed: () => Navigator.pop(context), - child: const Text('Dart')), - CupertinoActionSheetAction( - onPressed: () => Navigator.pop(context), - child: const Text('Java')), - CupertinoActionSheetAction( - onPressed: () => Navigator.pop(context), - child: const Text('Kotlin')), - ], - ), - ); - - Widget _buildRaisedButton(BuildContext context) => ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)), - ), - ), - onPressed: () => showDialog( - context: context, - builder: (ctx) => _buildCupertinoActionSheet(context)), - child: const Text( - 'Just Show It !', - style: TextStyle(color: Colors.white), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_de_DE.json deleted file mode 100644 index 804e501d5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "iOS-Aktionsblatt-Schaltfläche", - "info": "Eine Schaltfläche, die selten verwendet wird und normalerweise in CupertinoActionSheet verwendet wird, um Klickereignisse zu empfangen.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoActionSheetAction", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【isDefaultAction】 : Standardmäßig ausgewählt 【bool】", - "【onPressed】 : Klickereignis 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_en_US.json deleted file mode 100644 index 022777a4b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "iOS Action Sheet Button", - "info": "A button with limited use cases, typically used in CupertinoActionSheet to receive click events.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoActionSheetAction", - "desc": [ - "【child】: Child widget 【Widget】", - "【isDefaultAction】: Whether it is the default action 【bool】", - "【onPressed】: Click event 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_es_ES.json deleted file mode 100644 index d5cef1aa3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "Botón de hoja de acción de iOS", - "info": "Un botón con pocos escenarios de aplicación, generalmente utilizado en CupertinoActionSheet, que recibe eventos de clic.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoActionSheetAction", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【isDefaultAction】 : Si está seleccionado por defecto 【bool】", - "【onPressed】 : Evento de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_fr_FR.json deleted file mode 100644 index a0f631bb0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "Bouton iOS Action Sheet", - "info": "Un bouton, rarement utilisé, généralement utilisé dans CupertinoActionSheet, qui reçoit les événements de clic.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoActionSheetAction", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【isDefaultAction】 : Est-ce l'action par défaut 【bool】", - "【onPressed】 : Événement de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_it_IT.json deleted file mode 100644 index 521cf337d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "Pulsante iOS Action Sheet", - "info": "Un pulsante, utilizzato raramente, solitamente all'interno di CupertinoActionSheet, che riceve eventi di clic.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoActionSheetAction", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【isDefaultAction】 : Selezionato per impostazione predefinita 【bool】", - "【onPressed】 : Evento di clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ja_JP.json deleted file mode 100644 index 1637d285c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "iOSアクションシートボタン", - "info": "ボタンで、使用シーンが少なく、通常はCupertinoActionSheetで使用され、クリックイベントを受け取ります。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheetActionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【isDefaultAction】 : デフォルトで選択されているかどうか 【bool】", - "【onPressed】 : クリックイベント 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ko_KR.json deleted file mode 100644 index 07806fb68..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "iOS 액션 시트 버튼", - "info": "버튼으로, 사용되는 경우가 드물며 주로 CupertinoActionSheet에서 사용되며 클릭 이벤트를 수신합니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheetAction 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【isDefaultAction】 : 기본 선택 여부 【bool】", - "【onPressed】 : 클릭 이벤트 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_pt_PT.json deleted file mode 100644 index 14acf26b8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "Botão de ação iOS", - "info": "Um botão, usado raramente, normalmente usado em CupertinoActionSheet, que recebe eventos de clique.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoActionSheetAction", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【isDefaultAction】 : Se selecionado por padrão 【bool】", - "【onPressed】 : Evento de clique 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ru_RU.json deleted file mode 100644 index 67f4b00b4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "Кнопка iOS Action Sheet", - "info": "Кнопка, которая редко используется, обычно применяется в CupertinoActionSheet, принимает события нажатия.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoActionSheetAction", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【isDefaultAction】 : Выбрано по умолчанию 【bool】", - "【onPressed】 : Событие нажатия 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_zh-CN.json deleted file mode 100644 index 1cbe10e8b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "iOS行为单按键", - "info": "一个按钮,应用场景很少,通常用于CupertinoActionSheet中,接收点击事件。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheetAction基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【isDefaultAction】 : 是否默认选中 【bool】", - "【onPressed】 : 点击事件 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/node1_base.dart deleted file mode 100644 index 73053e521..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/node1_base.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:widgets/utils/dialog_about.dart'; - - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoActionSheetAction extends StatelessWidget { - const CustomCupertinoActionSheetAction({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Container( - margin: const EdgeInsets.all(5), - color: Colors.grey.withAlpha(33), - child: CupertinoActionSheetAction( - isDefaultAction: true, - onPressed: () => DialogAbout.show(context), - child: const Text('张风捷特烈')), - ), - Container( - color: Colors.grey.withAlpha(33), - margin: const EdgeInsets.all(5), - child: CupertinoActionSheetAction( - isDefaultAction: false, - onPressed: () => DialogAbout.show(context), - child: const Text('百里·巫缨')), - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_de_DE.json deleted file mode 100644 index c1f1085a0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "iOS-Dialog", - "info": "Ein universelles Dialogfeld im iOS-Stil, das Komponenten für Kopf, Mitte und Ende angeben kann.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoActionSheetAction", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【isDefaultAction】 : Standardmäßig ausgewählt 【bool】", - "【onPressed】 : Klickereignis 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_en_US.json deleted file mode 100644 index 69536a55c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "iOS Dialog", - "info": "A general dialog structure in iOS style, which can specify components at the head, middle, and tail.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoActionSheetAction", - "desc": [ - "【child】 : Child component 【Widget】", - "【isDefaultAction】 : Whether it is selected by default 【bool】", - "【onPressed】 : Click event 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_es_ES.json deleted file mode 100644 index 5c240104d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "Cuadro de diálogo de iOS", - "info": "Estructura de cuadro de diálogo genérico al estilo de iOS, que permite especificar componentes en la parte superior, media e inferior.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoActionSheetAction", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【isDefaultAction】 : Si está seleccionado por defecto 【bool】", - "【onPressed】 : Evento de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_fr_FR.json deleted file mode 100644 index db43bdf75..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "Boîte de dialogue iOS", - "info": "Structure de boîte de dialogue générique de style iOS, permettant de spécifier des composants dans les sections d'en-tête, de corps et de pied.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoActionSheetAction", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【isDefaultAction】 : Est-ce que c'est l'action par défaut 【bool】", - "【onPressed】 : Événement de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_it_IT.json deleted file mode 100644 index 989b952ca..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "Finestra di dialogo iOS", - "info": "Struttura di dialogo generica in stile iOS, che consente di specificare i componenti nella parte superiore, centrale e inferiore.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoActionSheetAction", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【isDefaultAction】 : Selezionato per impostazione predefinita 【bool】", - "【onPressed】 : Evento di clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ja_JP.json deleted file mode 100644 index d9c5d2d75..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "iOSダイアログ", - "info": "iOSスタイルの汎用ダイアログ構造で、ヘッダー、中央、フッターのコンポーネントを指定できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheetActionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【isDefaultAction】 : デフォルトで選択されているかどうか 【bool】", - "【onPressed】 : クリックイベント 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ko_KR.json deleted file mode 100644 index 0b82317cd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "iOS 대화 상자", - "info": "iOS 스타일의 일반적인 대화 상자 구조로, 머리, 중간, 꼬리 부분의 컴포넌트를 지정할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheetAction 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【isDefaultAction】 : 기본 선택 여부 【bool】", - "【onPressed】 : 클릭 이벤트 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_pt_PT.json deleted file mode 100644 index 72870d68d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "Diálogo iOS", - "info": "Estrutura de diálogo genérica no estilo iOS, que permite especificar componentes no cabeçalho, corpo e rodapé.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoActionSheetAction", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【isDefaultAction】 : Selecionado por padrão 【bool】", - "【onPressed】 : Evento de clique 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ru_RU.json deleted file mode 100644 index 83a1cb23b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "Диалоговое окно iOS", - "info": "Универсальная структура диалогового окна в стиле iOS, позволяющая указать компоненты в верхней, средней и нижней частях.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoActionSheetAction", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【isDefaultAction】 : Выбрано ли по умолчанию 【bool】", - "【onPressed】 : Событие нажатия 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_zh-CN.json deleted file mode 100644 index 8e5764718..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "iOS对话框", - "info": "iOS风格的通用的对话框结构,可指定头、中、尾处的组件。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheetAction基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【isDefaultAction】 : 是否默认选中 【bool】", - "【onPressed】 : 点击事件 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/node1_base.dart deleted file mode 100644 index 2c4a6fc62..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/node1_base.dart +++ /dev/null @@ -1,94 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class CustomCupertinoAlertDialog extends StatelessWidget { - const CustomCupertinoAlertDialog({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildRaisedButton(context), - _buildCupertinoAlertDialog(context), - ], - ); - } - - Widget _buildRaisedButton(BuildContext context) => - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)), - ), - ), - onPressed: () { - showDialog( - context: context, - builder: (ctx) => _buildCupertinoAlertDialog(context)); - }, - child: const Text( - 'Just Show It !', - style: TextStyle(color: Colors.white), - ), - ); - - Widget _buildCupertinoAlertDialog(BuildContext context) { - return Material( - color: Colors.transparent, - child: CupertinoAlertDialog( - title: _buildTitle(context), - content: _buildContent(), - actions: [ - CupertinoButton( - child: const Text("Yes, Delete"), - onPressed: () => Navigator.pop(context), - ), - CupertinoButton( - child: const Text("Cancle"), - onPressed: () => Navigator.pop(context), - ), - ]), - ); - } - - Widget _buildTitle(context) { - return Row( - //标题 - children: [ - const Icon( - CupertinoIcons.delete_solid, - color: Colors.red, - ), - const Expanded( - child: Text( - 'Delete File', - style: TextStyle(color: Colors.red, fontSize: 20), - )), - InkWell( - child: const Icon(CupertinoIcons.clear_thick), - onTap: () => Navigator.pop(context), - ) - ]); - } - - Widget _buildContent() { - return Padding( - padding: const EdgeInsets.only(top: 18.0), - child: Column( - children: const[ - Text( - ' Hi toly! If you push the conform buttom ,' - ' You will lose this file. Are you sure wand to do that?', - style: TextStyle(color: Color(0xff999999), fontSize: 16), - textAlign: TextAlign.justify, - ), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_de_DE.json deleted file mode 100644 index ec6a67397..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "Interaktive Ansicht", - "info": "Ein einfacher Button, der normalerweise in CupertinoAlertDialog verwendet wird und im Allgemeinen nicht allein verwendet wird.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoDialogAction", - "desc": [ - "【isDefaultAction】 : Ist es die Standardaktion? 【bool】", - "【isDestructiveAction】 : Ist es eine zerstörerische Aktion? 【bool】", - "【textStyle】: Textstil 【TextStyle】", - "【onPressed】: Klickereignis 【VoidCallback】", - "【child】: Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_en_US.json deleted file mode 100644 index 9f7bad2ba..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "Interactive View", - "info": "A simple button, usually used in CupertinoAlertDialog, and generally not used alone.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoDialogAction", - "desc": [ - "【isDefaultAction】: Whether it is a default action 【bool】", - "【isDestructiveAction】: Whether it is a destructive action 【bool】", - "【textStyle】: Text style 【TextStyle】", - "【onPressed】: Click event 【VoidCallback】", - "【child】: Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_es_ES.json deleted file mode 100644 index 26e29ae5a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "Vista de interacción", - "info": "Un botón simple, generalmente utilizado en CupertinoAlertDialog, generalmente no se usa solo.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoDialogAction", - "desc": [ - "【isDefaultAction】: ¿Es una acción predeterminada? 【bool】", - "【isDestructiveAction】: ¿Es una acción destructiva? 【bool】", - "【textStyle】: Estilo de texto 【TextStyle】", - "【onPressed】: Evento de clic 【VoidCallback】", - "【child】: Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_fr_FR.json deleted file mode 100644 index d053bb52d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "Vue d'interaction", - "info": "Un bouton simple, généralement utilisé dans CupertinoAlertDialog, généralement pas utilisé seul.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoDialogAction", - "desc": [ - "【isDefaultAction】 : Est-ce une action par défaut 【bool】", - "【isDestructiveAction】 : Est-ce une action destructive 【bool】", - "【textStyle】: Style de texte 【TextStyle】", - "【onPressed】: Événement de clic 【VoidCallback】", - "【child】: Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_it_IT.json deleted file mode 100644 index aeb2063c8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "Vista interattiva", - "info": "Un semplice pulsante, solitamente utilizzato in CupertinoAlertDialog, generalmente non utilizzato da solo.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoDialogAction", - "desc": [ - "【isDefaultAction】 : Se è un'operazione predefinita 【bool】", - "【isDestructiveAction】 : Se è un'operazione distruttiva 【bool】", - "【textStyle】: Stile del testo 【TextStyle】", - "【onPressed】: Evento di clic 【VoidCallback】", - "【child】: Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ja_JP.json deleted file mode 100644 index fe4126ca6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "インタラクティブビュー", - "info": "シンプルなボタンで、通常はCupertinoAlertDialogで使用され、単独で使用されることはあまりありません。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoDialogActionの基本的な使用", - "desc": [ - "【isDefaultAction】 : デフォルトの操作かどうか 【bool】", - "【isDestructiveAction】 : 破壊的な操作かどうか 【bool】", - "【textStyle】: テキストスタイル 【TextStyle】", - "【onPressed】: クリックイベント 【VoidCallback】", - "【child】: 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ko_KR.json deleted file mode 100644 index 103cd0011..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "상호 작용 뷰", - "info": " 간단한 버튼으로, 일반적으로 CupertinoAlertDialog에서 사용되며, 일반적으로 단독으로 사용되지 않습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoDialogAction 기본 사용", - "desc": [ - "【isDefaultAction】 : 기본 작업인지 여부 【bool】", - "【isDestructiveAction】 : 파괴적인 작업인지 여부 【bool】", - "【textStyle】: 텍스트 스타일 【TextStyle】", - "【onPressed】: 클릭 이벤트 【VoidCallback】", - "【child】: 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_pt_PT.json deleted file mode 100644 index 51d9d1613..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "Vista Interativa", - "info": "Um botão simples, geralmente usado em CupertinoAlertDialog, geralmente não é usado sozinho.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CupertinoDialogAction", - "desc": [ - "【isDefaultAction】 : Se é uma ação padrão 【bool】", - "【isDestructiveAction】 : Se é uma ação destrutiva 【bool】", - "【textStyle】: Estilo de texto 【TextStyle】", - "【onPressed】: Evento de clique 【VoidCallback】", - "【child】: Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ru_RU.json deleted file mode 100644 index 920dca0de..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "Интерактивное представление", - "info": "Простая кнопка, обычно используется в CupertinoAlertDialog, как правило, не используется отдельно.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoDialogAction", - "desc": [ - "【isDefaultAction】: Является ли действие по умолчанию 【bool】", - "【isDestructiveAction】: Является ли действие разрушительным 【bool】", - "【textStyle】: Стиль текста 【TextStyle】", - "【onPressed】: Событие нажатия 【VoidCallback】", - "【child】: Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_zh-CN.json deleted file mode 100644 index 246eacf32..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "交互视图", - "info": " 一个简单的按钮,通常用于CupertinoAlertDialog中,一般不单独使用。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoDialogAction基本使用", - "desc": [ - "【isDefaultAction】 : 是否是默认性操作 【bool】", - "【isDestructiveAction】 : 是否是毁灭性操作 【bool】", - "【textStyle】: 文字样式 【TextStyle】", - "【onPressed】: 点击事件 【VoidCallback】", - "【child】: 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/no_node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/no_node1_base.dart deleted file mode 100644 index 8e0f866e3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/no_node1_base.dart +++ /dev/null @@ -1,130 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com -/// 说明: - -class CustomDialog extends StatelessWidget { - const CustomDialog({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildRaisedButton(context), - _buildDialog(), - ], - ); - } - - Widget _buildDialog() => CupertinoDialogAction( - onPressed: (){ - - }, - child: const SizedBox( - width: 50, - child: DeleteDialog(), - ), - ); - - Widget _buildRaisedButton(BuildContext context) => ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)), - ), - ), - onPressed: () { - showDialog(context: context, builder: (ctx) => _buildDialog()); - }, - child: const Text( - 'Just Show It !', - style: TextStyle(color: Colors.white), - ), - - ); -} - -class DeleteDialog extends StatelessWidget { - const DeleteDialog({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - _buildBar(context), - _buildTitle(), - _buildContent(), - _buildFooter(context), - ], - ); - } - - Widget _buildTitle() { - return const Text( - 'Delete Doucument', - style: TextStyle(color: Color(0xff5CC5E9), fontSize: 24), - ); - } - - Widget _buildContent() { - return const Padding( - padding: EdgeInsets.all(10.0), - child: Text( - ' Hi toly! If you push the conform buttom ,' - ' You will lose this file. Are you sure wand to do that?', - style: TextStyle(color: Color(0xffCFCFCF), fontSize: 16), - textAlign: TextAlign.justify, - ), - ); - } - - Widget _buildFooter(context) { - return Padding( - padding: const EdgeInsets.only(bottom: 15.0, top: 10), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Container( - alignment: Alignment.center, - height: 40, - width: 120, - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(30)), - color: Color(0xff73D1EE)), - child: const Text('Yes, Delete', - style: TextStyle(color: Colors.white, fontSize: 16)), - ), - InkWell( - onTap: ()=>Navigator.of(context).pop(), - child: Container( - alignment: Alignment.center, - height: 40, - width: 120, - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(30)), - color: Colors.orangeAccent), - child: const Text('Cancle', - style: TextStyle(color: Colors.white, fontSize: 16)), - ), - ) - ], - ), - ); - } - - _buildBar(context) => Container( - height: 30, - alignment: Alignment.centerRight, - margin: const EdgeInsets.only(right: 10, top: 5), - child: InkWell( - onTap: ()=>Navigator.of(context).pop(), - child: const Icon( - Icons.close, - color: Color(0xff82CAE3), - ), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/node1_base.dart deleted file mode 100644 index 2f6e6c1b3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/node1_base.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - -class CupertinoDialogActionDemo extends StatelessWidget { - const CupertinoDialogActionDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - CupertinoDialogAction( - isDestructiveAction: false, - onPressed: () => _toast(context), - child: const Text('CupertinoDialogAction'), - ), - CupertinoDialogAction( - isDestructiveAction: true, - onPressed: () => _toast(context), - child: const Text('CupertinoDialogAction'), - ), - ], - ); - } - - void _toast(BuildContext context) { - SnackBar snackBar = SnackBar( - backgroundColor: Theme.of(context).primaryColor, - content: const Text('CupertinoDialogAction'), - ); - - ScaffoldMessenger.of(context).showSnackBar(snackBar); - - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_de_DE.json deleted file mode 100644 index 3dcd6104b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "Vollbild-Dialog-Übergang", - "info": "Erstellt einen iOS-stilisierten Übergang für das Aufrufen eines Vollbild-Dialogs.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Komponenteneinführung", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【linearTransition】 : Lineare Übergang 【bool】", - "【primaryRouteAnimation】 : Anfängliche Routenanimation 【Animation】", - "【secondaryRouteAnimation】 : Zweite Routenanimation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_en_US.json deleted file mode 100644 index fd77e8308..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "Full Page Transition", - "info": "Create an iOS-style transition for invoking a full-screen dialog.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Component Introduction", - "desc": [ - "【child】 : Child component 【Widget】", - "【linearTransition】 : Whether to use linear transition 【bool】", - "【primaryRouteAnimation】 : Initial route animation 【Animation】", - "【secondaryRouteAnimation】 : Secondary route animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_es_ES.json deleted file mode 100644 index 9683edf08..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "Transición de diálogo de pantalla completa", - "info": "Crea una transición al estilo de iOS para invocar un diálogo de pantalla completa.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción del componente", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【linearTransition】 : ¿Transición lineal? 【bool】", - "【primaryRouteAnimation】 : Animación de ruta inicial 【Animation】", - "【secondaryRouteAnimation】 : Animación de ruta secundaria 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_fr_FR.json deleted file mode 100644 index 1cb272101..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "Transition de dialogue plein écran", - "info": "Crée une transition de style iOS pour afficher une boîte de dialogue en plein écran.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction du composant", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【linearTransition】 : Transition linéaire 【bool】", - "【primaryRouteAnimation】 : Animation de route initiale 【Animation】", - "【secondaryRouteAnimation】 : Animation de route secondaire 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_it_IT.json deleted file mode 100644 index a0040840e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "Transizione a schermo intero", - "info": "Crea una transizione in stile iOS per richiamare una finestra di dialogo a schermo intero.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione al componente", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【linearTransition】 : Transizione lineare 【bool】", - "【primaryRouteAnimation】 : Animazione della rotta iniziale 【Animation】", - "【secondaryRouteAnimation】 : Animazione della seconda rotta 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ja_JP.json deleted file mode 100644 index e74986fbf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "全ページ遷移変換", - "info": "iOSスタイルの全画面ダイアログを呼び出すための遷移を作成します。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "コンポーネント紹介", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【linearTransition】 : 線形変換かどうか 【bool】", - "【primaryRouteAnimation】 : 初期ルートアニメーション 【Animation】", - "【secondaryRouteAnimation】 : 第二ルートアニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ko_KR.json deleted file mode 100644 index becc2777c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "전체 페이지 전환", - "info": "전체 화면 대화 상자를 불러오기 위한 iOS 스타일의 전환을 생성합니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "컴포넌트 소개", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【linearTransition】 : 선형 전환 여부 【bool】", - "【primaryRouteAnimation】 : 초기 라우트 애니메이션 【Animation】", - "【secondaryRouteAnimation】 : 두 번째 라우트 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_pt_PT.json deleted file mode 100644 index 9d275362f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "Transição de Diálogo em Tela Cheia", - "info": "Cria uma transição no estilo iOS para exibir um diálogo em tela cheia.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao Componente", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【linearTransition】 : Transição linear 【bool】", - "【primaryRouteAnimation】 : Animação de rota inicial 【Animation】", - "【secondaryRouteAnimation】 : Animação de rota secundária 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ru_RU.json deleted file mode 100644 index 3d0cd07ea..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "Переход на полный экран", - "info": "Создает переход в стиле iOS для вызова диалогового окна на весь экран.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в компонент", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【linearTransition】 : Линейный переход 【bool】", - "【primaryRouteAnimation】 : Анимация начального маршрута 【Animation】", - "【secondaryRouteAnimation】 : Анимация второго маршрута 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_zh-CN.json deleted file mode 100644 index ab421eed5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "全页面过渡变换", - "info": "创建一个 iOS 风格的转换,用于唤出全屏对话框。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "组件介绍", - "desc": [ - "【child】 : 子组件 【Widget】", - "【linearTransition】 : 是否线性转换 【bool】", - "【primaryRouteAnimation】 : 初始路由动画 【Animation】", - "【secondaryRouteAnimation】 : 第二路由动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/node1_base.dart deleted file mode 100644 index 94a27961d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/node1_base.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/11 -/// contact me by email 1981462002@qq.com -/// - - -class CupertinoFullscreenDialogTransitionDemo extends StatelessWidget { - const CupertinoFullscreenDialogTransitionDemo({Key? key}) : super(key: key); - - final String info = - '和 CupertinoPageTransition 一样,该组件底层基于 SlideTransition 组件实现,' - '主要用途是模仿 iOS 风格,用于唤出全屏对话框动画过渡效果。' - '源码中唯一的使用处是 CupertinoPageRoute 处理路由跳转动画时,一般不会单独使用。' - '当【route.fullscreenDialog】为 true 时,会使用 CupertinoFullscreenDialogTransition 组件,否则使用 CupertinoPageTransition 组件。' - '其中个属性信息和 CupertinoPageTransition 组件一致,详见之。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_de_DE.json deleted file mode 100644 index 341bea2d9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "iOS-Stil Zurück-Button", - "info": "Cupertino-Stil Navigationsleiste Zurück-Button, kann Farbe und Klick-Ereignis angeben, wird normalerweise nicht allein verwendet.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung des Zurück-Buttons", - "desc": [ - "【onPressed】 : Klick-Ereignis 【VoidCallback】", - "【color】: Farbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_en_US.json deleted file mode 100644 index 2c1954384..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "iOS Style Back Button", - "info": "A Cupertino-style navigation bar back button, which can specify color and click events, and is generally not used alone.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Back Button", - "desc": [ - "【onPressed】: Click event 【VoidCallback】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_es_ES.json deleted file mode 100644 index 4c7ecd854..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "Botón de retroceso de estilo iOS", - "info": "Botón de retroceso de la barra de navegación de estilo Cupertino, se puede especificar el color y el evento de clic, generalmente no se usa solo.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico del botón de retroceso", - "desc": [ - "【onPressed】 : Evento de clic 【VoidCallback】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_fr_FR.json deleted file mode 100644 index e43bfcc9d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "Bouton de retour de style iOS", - "info": "Bouton de retour de barre de navigation de style Cupertino, peut spécifier la couleur et l'événement de clic, généralement pas utilisé seul.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base du bouton de retour", - "desc": [ - "【onPressed】 : Événement de clic 【VoidCallback】", - "【color】: Couleur 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_it_IT.json deleted file mode 100644 index 5e70e8c33..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "Pulsante Indietro in stile iOS", - "info": "Pulsante Indietro per barra di navigazione in stile Cupertino, può specificare colore ed evento di clic, generalmente non utilizzato da solo.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base del pulsante Indietro", - "desc": [ - "【onPressed】 : Evento di clic 【VoidCallback】", - "【color】: Colore 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ja_JP.json deleted file mode 100644 index 490051d1c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "iOSスタイルの戻るボタン", - "info": "Cupertinoスタイルのナビゲーションバーの戻るボタンで、色とクリックイベントを指定できます。通常は単独で使用されません。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "戻るボタンの基本的な使用", - "desc": [ - "【onPressed】 : クリックイベント 【VoidCallback】", - "【color】: 色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ko_KR.json deleted file mode 100644 index b96301a71..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "iOS 스타일 뒤로 가기 버튼", - "info": "Cupertino 스타일의 네비게이션 바 뒤로 가기 버튼, 색상과 클릭 이벤트를 지정할 수 있으며, 일반적으로 단독으로 사용되지 않습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "뒤로 가기 버튼 기본 사용", - "desc": [ - "【onPressed】 : 클릭 이벤트 【VoidCallback】", - "【color】: 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_pt_PT.json deleted file mode 100644 index 4b820f15b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "Botão de Voltar no Estilo iOS", - "info": "Botão de voltar da barra de navegação no estilo Cupertino, pode especificar a cor e o evento de clique, geralmente não é usado sozinho.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Botão de Voltar", - "desc": [ - "【onPressed】 : Evento de clique 【VoidCallback】", - "【color】: Cor 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ru_RU.json deleted file mode 100644 index fbf254105..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "Кнопка возврата в стиле iOS", - "info": "Кнопка возврата в стиле Cupertino для навигационной панели, можно указать цвет и событие нажатия, обычно не используется отдельно.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование кнопки возврата", - "desc": [ - "【onPressed】 : Событие нажатия 【VoidCallback】", - "【color】: Цвет 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_zh-CN.json deleted file mode 100644 index 0312f63e7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "iOS风格返回按钮", - "info": "Cupertino风格的导航栏返回按钮,可指定颜色和点击事件,一般不单独使用。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "返回按钮基本使用", - "desc": [ - "【onPressed】 : 点击事件 【VoidCallback】", - "【color】: 颜色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/node1_base.dart deleted file mode 100644 index e9ae28f75..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/node1_base.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class CupertinoNavigationBarBackButtonDemo extends StatelessWidget { - const CupertinoNavigationBarBackButtonDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return CupertinoNavigationBarBackButton( - color: Colors.deepPurpleAccent, - onPressed: () => Navigator.of(context).pop(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_de_DE.json deleted file mode 100644 index e4153eef0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "Seitenübergangsanimation", - "info": "Bietet eine iOS-ähnliche Seitenübergangsanimation.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in CupertinoPageTransition", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【linearTransition】 : Lineare Transformation 【bool】", - "【primaryRouteAnimation】 : Anfängliche Routenanimation 【Animation】", - "【secondaryRouteAnimation】 : Zweite Routenanimation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_en_US.json deleted file mode 100644 index fc18cdc1d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "Page Transition Animation", - "info": "Provides an iOS-style page transition animation.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to CupertinoPageTransition", - "desc": [ - "【child】 : Child widget 【Widget】", - "【linearTransition】 : Whether to use linear transition 【bool】", - "【primaryRouteAnimation】 : Primary route animation 【Animation】", - "【secondaryRouteAnimation】 : Secondary route animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_es_ES.json deleted file mode 100644 index f17094600..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "Transición de página", - "info": "Proporciona una animación de transición de página al estilo de iOS.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a CupertinoPageTransition", - "desc": [ - "【child】 : Widget hijo 【Widget】", - "【linearTransition】 : ¿Transición lineal? 【bool】", - "【primaryRouteAnimation】 : Animación de ruta inicial 【Animation】", - "【secondaryRouteAnimation】 : Animación de ruta secundaria 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_fr_FR.json deleted file mode 100644 index fb75a3d0d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "Transition de page", - "info": "Fournit une animation de transition de page de style iOS.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à CupertinoPageTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【linearTransition】 : Transition linéaire 【bool】", - "【primaryRouteAnimation】 : Animation de route initiale 【Animation】", - "【secondaryRouteAnimation】 : Animation de route secondaire 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_it_IT.json deleted file mode 100644 index fb35028b4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "Transizione di pagina", - "info": "Fornisce un'animazione di transizione di pagina in stile iOS.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a CupertinoPageTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【linearTransition】 : Transizione lineare 【bool】", - "【primaryRouteAnimation】 : Animazione della rotta iniziale 【Animation】", - "【secondaryRouteAnimation】 : Animazione della seconda rotta 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ja_JP.json deleted file mode 100644 index 0c5ec262d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "ページ遷移変換", - "info": "iOSスタイルのページ遷移アニメーション変換を提供します。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPageTransition 紹介", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【linearTransition】 : 線形変換かどうか 【bool】", - "【primaryRouteAnimation】 : 初期ルートアニメーション 【Animation】", - "【secondaryRouteAnimation】 : 第二ルートアニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ko_KR.json deleted file mode 100644 index fd8ae1e15..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "페이지 전환 효과", - "info": "iOS 스타일의 페이지 전환 애니메이션 효과를 제공합니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPageTransition 소개", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【linearTransition】 : 선형 변환 여부 【bool】", - "【primaryRouteAnimation】 : 초기 라우트 애니메이션 【Animation】", - "【secondaryRouteAnimation】 : 두 번째 라우트 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_pt_PT.json deleted file mode 100644 index bcd91b938..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "Transição de Página", - "info": "Fornece uma animação de transição de página no estilo iOS.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução à CupertinoPageTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【linearTransition】 : Transição linear 【bool】", - "【primaryRouteAnimation】 : Animação de rota inicial 【Animation】", - "【secondaryRouteAnimation】 : Animação de segunda rota 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ru_RU.json deleted file mode 100644 index f4ec74543..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "Переход страницы", - "info": "Предоставляет анимацию перехода страницы в стиле iOS.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в CupertinoPageTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【linearTransition】 : Линейное преобразование 【bool】", - "【primaryRouteAnimation】 : Начальная анимация маршрута 【Animation】", - "【secondaryRouteAnimation】 : Вторичная анимация маршрута 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_zh-CN.json deleted file mode 100644 index c2fbb0a04..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "页面过渡变换", - "info": "提供一个 iOS 风格的页面过渡动画变换。 ", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPageTransition 介绍", - "desc": [ - "【child】 : 子组件 【Widget】", - "【linearTransition】 : 是否线性转换 【bool】", - "【primaryRouteAnimation】 : 初始路由动画 【Animation】", - "【secondaryRouteAnimation】 : 第二路由动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/node1_base.dart deleted file mode 100644 index d3b9c9ae2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/node1_base.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/11 -/// contact me by email 1981462002@qq.com -/// - -class CupertinoPageTransitionDemo extends StatelessWidget { - const CupertinoPageTransitionDemo({Key? key}) : super(key: key); - - final String info = - '该组件底层基于 SlideTransition 组件实现,主要用途是模仿 iOS 风格,处理页面间跳转的过渡动画。' - '源码中唯一的使用处是 CupertinoPageRoute 处理路由跳转动画时,一般不会单独使用。' - '如 A 跳转到 B, primaryRouteAnimation 和 secondaryRouteAnimation 都是一个 0.0->1.0 的动画,' - '前者用于处理 B 界面进入过渡动画;后者用于处理 A 界面被覆盖的过渡动画。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_de_DE.json deleted file mode 100644 index 46dd442cb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "Verschwommene Popup-Ebene", - "info": "Runde, rechteckige, verschwommene Hintergründe für iOS-Popups, die in Cupertino-stilisierten Dialogen verwendet werden.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPopupSurface Verwendung", - "desc": [ - "【isSurfacePainted】 : Ob Weiß gemalt wird 【bool】", - "【child】 : Untergeordnete Komponente 【Widget】", - "Testeffekt links isSurfacePainted = false, rechts isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_en_US.json deleted file mode 100644 index 44cc50177..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "Blur Popup Layer", - "info": "The rounded rectangle blur background of the ios popup box, applied in the source code to the dialog box of the Cupertino style.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPopupSurface Usage", - "desc": [ - "【isSurfacePainted】: Whether to paint white 【bool】", - "【child】: Child component 【Widget】", - "Test effect: left isSurfacePainted = false, right isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_es_ES.json deleted file mode 100644 index ca8be8bfc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "Capa emergente difuminada", - "info": "Fondo difuminado rectangular con bordes redondeados para cuadros emergentes de iOS, utilizado en diálogos de estilo Cupertino en el código fuente.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de CupertinoPopupSurface", - "desc": [ - "【isSurfacePainted】 : Si se pinta en blanco 【bool】", - "【child】 : Componente hijo 【Widget】", - "Efecto de prueba: izquierda isSurfacePainted = false, derecha isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_fr_FR.json deleted file mode 100644 index 8b78d066b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "Fond flou de la fenêtre contextuelle", - "info": "Fond flou rectangulaire avec coins arrondis pour les boîtes de dialogue de style Cupertino, utilisé dans les dialogues de style Cupertino dans le code source.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de CupertinoPopupSurface", - "desc": [ - "【isSurfacePainted】 : Si le blanc est dessiné 【bool】", - "【child】 : Composant enfant 【Widget】", - "Effet de test : isSurfacePainted = false à gauche, isSurfacePainted = true à droite" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_it_IT.json deleted file mode 100644 index 111084168..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "Livello popup sfocato", - "info": "Sfondo sfocato rettangolare con angoli arrotondati per le finestre popup iOS, utilizzato nei dialoghi in stile Cupertino nel codice sorgente.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di CupertinoPopupSurface", - "desc": [ - "【isSurfacePainted】 : Se disegnare in bianco 【bool】", - "【child】 : Componente figlio 【Widget】", - "Testare l'effetto: a sinistra isSurfacePainted = false, a destra isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ja_JP.json deleted file mode 100644 index 8119b53f8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "ぼかしポップアップレイヤー", - "info": "iOSポップアップボックスの角丸長方形のぼかし背景で、ソースコードではCupertinoスタイルのダイアログに適用されています。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPopupSurface の使用", - "desc": [ - "【isSurfacePainted】 : 白を描画するかどうか 【bool】", - "【child】 : 子コンポーネント 【Widget】", - "テスト効果の左側は isSurfacePainted = false、右側は isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ko_KR.json deleted file mode 100644 index 33c52196e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "블러 팝업 레이어", - "info": "ios 팝업 상자의 둥근 모서리 사각형 블러 배경, 소스 코드에서 Cupertino 스타일의 대화 상자에 적용됩니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPopupSurface 사용", - "desc": [ - "【isSurfacePainted】 : 흰색으로 그릴지 여부 【bool】", - "【child】 : 하위 위젯 【Widget】", - "테스트 효과 왼쪽 isSurfacePainted = false, 오른쪽 isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_pt_PT.json deleted file mode 100644 index c1856d16f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "Camada de Pop-up Desfocada", - "info": "Fundo desfocado retangular com cantos arredondados para caixas de diálogo no estilo iOS, usado em caixas de diálogo de estilo Cupertino no código-fonte.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do CupertinoPopupSurface", - "desc": [ - "【isSurfacePainted】 : Se a superfície é pintada de branco 【bool】", - "【child】 : Componente filho 【Widget】", - "Efeito de teste: à esquerda isSurfacePainted = false, à direita isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ru_RU.json deleted file mode 100644 index c9279fbbe..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "Размытый всплывающий слой", - "info": "Фон с закругленными углами и размытием для всплывающего окна iOS, используется в диалогах в стиле Cupertino в исходном коде.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование CupertinoPopupSurface", - "desc": [ - "【isSurfacePainted】 : Рисовать ли белый цвет 【bool】", - "【child】 : Дочерний компонент 【Widget】", - "Тестовый эффект: слева isSurfacePainted = false, справа isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_zh-CN.json deleted file mode 100644 index 10e0dc73d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "模糊弹出层", - "info": "ios 弹出框的圆角矩形模糊背景,源码中应用于 Cupertino 风格的对话框中。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPopupSurface 使用", - "desc": [ - "【isSurfacePainted】 : 是否绘白 【bool】", - "【child】 : 子组件 【Widget】", - "测试效果左侧 isSurfacePainted = false,右侧 isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/node1_base.dart deleted file mode 100644 index b755874d6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/node1_base.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class CupertinoPopupSurfaceDemo extends StatelessWidget { - const CupertinoPopupSurfaceDemo({super.key}); - - List get rainbow => [ - 0xffff0000, - 0xffFF7F00, - 0xffFFFF00, - 0xff00FF00, - 0xff00FFFF, - 0xff0000FF, - 0xff8B00FF - ]; - - List get stops => [0.0, 1 / 6, 2 / 6, 3 / 6, 4 / 6, 5 / 6, 1.0]; - - - @override - Widget build(BuildContext context) { - return Container( - decoration: BoxDecoration( - gradient: RadialGradient( - radius: 1.8, - stops: stops, - colors: rainbow.map((e) => Color(e)).toList())), - padding: const EdgeInsets.all(10), - child: Wrap( - spacing: 10, - children: [ - buildCupertinoPopupSurface(false), - buildCupertinoPopupSurface(true), - ], - ), - ); - } - - Widget buildCupertinoPopupSurface(bool isSurfacePainted) { - return CupertinoPopupSurface( - isSurfacePainted: isSurfacePainted, - child: Container( - width: 150, - height: 100, - color: Colors.white.withOpacity(0.3), - alignment: Alignment.center, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_de_DE.json deleted file mode 100644 index 89d27cd12..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_de_DE.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "iOS-Thema", - "info": "Das CupertinoThemeData-Objekt kann über CupertinoTheme.of abgerufen werden. Es kann auch ein Thema angegeben werden, das auf die Nachkommenkomponenten von CupertinoTheme angewendet wird.", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Textstil-TextTheme", - "desc": [ - "Nachkommenkomponenten können die Daten des Themas über CupertinoTheme.of abrufen und verwenden." - ] - }, - { - "file": "node2_use.dart", - "name": "Verwendung von CupertinoThemeData", - "desc": [ - "Wie bei Theme können bestimmte Attribute angegeben werden, damit sie in den Nachkommen gemeinsam genutzt werden, allerdings gibt es weniger Attribute. Beachten Sie, dass Sie das Thema nicht im aktuellen Kontext abrufen können, wenn Sie es verwenden möchten." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_en_US.json deleted file mode 100644 index 4cff035ce..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_en_US.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "iOS Theme", - "info": "You can obtain the CupertinoThemeData object through CupertinoTheme.of. You can also specify the theme to be applied to the descendant components of CupertinoTheme.", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Text Style-TextTheme", - "desc": [ - "Descendant components can obtain and use the theme data through CupertinoTheme.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Usage of CupertinoThemeData", - "desc": [ - "Like Theme, you can share specified properties among descendants, but there are fewer properties. Note that if you need to use the theme, you cannot obtain it in the current context." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_es_ES.json deleted file mode 100644 index 59b37c1ba..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_es_ES.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "Tema de iOS", - "info": "Puedes obtener el objeto CupertinoThemeData a través de CupertinoTheme.of. También puedes especificar que el tema se aplique a los componentes descendientes de CupertinoTheme.", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Estilo de texto-TextTheme", - "desc": [ - "Los componentes descendientes pueden obtener y utilizar los datos del tema a través de CupertinoTheme.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Uso de CupertinoThemeData", - "desc": [ - "Al igual que con Theme, puedes compartir ciertos atributos en los descendientes, aunque hay menos atributos. Ten en cuenta que si necesitas usar el tema, no puedes obtenerlo en el contexto actual." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_fr_FR.json deleted file mode 100644 index db0b5859d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_fr_FR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "Thème iOS", - "info": "Vous pouvez obtenir l'objet CupertinoThemeData via CupertinoTheme.of. Vous pouvez également spécifier un thème à appliquer aux composants descendants de CupertinoTheme.", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Style de texte-TextTheme", - "desc": [ - "Les composants descendants peuvent utiliser les données du thème obtenues via CupertinoTheme.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Utilisation de CupertinoThemeData", - "desc": [ - "Comme avec Theme, vous pouvez partager des attributs spécifiés avec les descendants, bien qu'il y ait moins d'attributs. Notez que si vous avez besoin d'utiliser le thème, vous ne pouvez pas l'obtenir dans le contexte actuel." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_it_IT.json deleted file mode 100644 index 34539eafe..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_it_IT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "Tema iOS", - "info": "È possibile ottenere l'oggetto CupertinoThemeData tramite CupertinoTheme.of. È anche possibile specificare un tema da applicare ai componenti discendenti di CupertinoTheme.", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Stile di testo-TextTheme", - "desc": [ - "I componenti discendenti possono ottenere e utilizzare i dati del tema tramite CupertinoTheme.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Uso di CupertinoThemeData", - "desc": [ - "Come con Theme, è possibile condividere attributi specifici tra i discendenti, anche se gli attributi sono meno numerosi. Nota: se è necessario utilizzare un tema, non è possibile ottenerlo nel contesto corrente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ja_JP.json deleted file mode 100644 index 2529887fe..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ja_JP.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "iOSテーマ", - "info": "CupertinoTheme.ofを使用してCupertinoThemeDataオブジェクトを取得できます。また、テーマを指定してCupertinoThemeの子孫コンポーネントに適用することもできます。", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "テキストスタイル-TextTheme", - "desc": [ - "子孫コンポーネントはCupertinoTheme.ofを使用してテーマのデータを取得して使用できます。" - ] - }, - { - "file": "node2_use.dart", - "name": "CupertinoThemeDataの使用", - "desc": [ - "Themeと同様に、指定されたプロパティを使用して子孫で共有できますが、プロパティは少ないです。テーマを使用する必要がある場合、現在のcontextで取得できないことに注意してください。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ko_KR.json deleted file mode 100644 index 3e11e8402..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ko_KR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "iOS 테마", - "info": "CupertinoTheme.of를 통해 CupertinoThemeData 객체를 가져올 수 있습니다. 또한 테마를 지정하여 CupertinoTheme의 하위 구성 요소에 적용할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "텍스트 스타일-TextTheme", - "desc": [ - "하위 구성 요소는 CupertinoTheme.of를 통해 테마 데이터를 가져와 사용할 수 있습니다." - ] - }, - { - "file": "node2_use.dart", - "name": "CupertinoThemeData 사용", - "desc": [ - "Theme와 마찬가지로 지정된 속성을 통해 하위 구성 요소에서 공유할 수 있지만 속성이 적습니다. 테마를 사용해야 하는 경우 현재 context에서 가져올 수 없습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_pt_PT.json deleted file mode 100644 index e80783356..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_pt_PT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "Tema iOS", - "info": "Pode obter o objeto CupertinoThemeData através de CupertinoTheme.of. Também pode especificar o tema para ser aplicado aos componentes descendentes de CupertinoTheme.", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Estilo de texto-TextTheme", - "desc": [ - "Os componentes descendentes podem obter os dados do tema através de CupertinoTheme.of para uso." - ] - }, - { - "file": "node2_use.dart", - "name": "Uso de CupertinoThemeData", - "desc": [ - "Assim como o Theme, pode compartilhar atributos especificados entre os descendentes, embora os atributos sejam menos. Note que, se precisar usar o tema, não pode obtê-lo no contexto atual." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ru_RU.json deleted file mode 100644 index 4cd4e908f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ru_RU.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "iOS тема", - "info": "Можно получить объект CupertinoThemeData через CupertinoTheme.of. Также можно указать тему для применения к дочерним компонентам CupertinoTheme.", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Стиль текста-TextTheme", - "desc": [ - "Дочерние компоненты могут использовать данные темы, полученные через CupertinoTheme.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Использование CupertinoThemeData", - "desc": [ - "Как и в случае с Theme, можно указать свойства, чтобы они были общими для дочерних элементов, но их меньше. Обратите внимание, что если нужно использовать тему, её нельзя получить в текущем контексте." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_zh-CN.json deleted file mode 100644 index 917562453..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_zh-CN.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "iOS主题", - "info": "可通过CupertinoTheme.of获取CupertinoThemeData对象。也可以指定主题应用于CupertinoTheme的后代组件。", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "文字样式-TextTheme", - "desc": [ - "后代组件可以通过CupertinoTheme.of获取主题的数据进行使用。" - ] - }, - { - "file": "node2_use.dart", - "name": "CupertinoThemeData的使用", - "desc": [ - "和Theme一样可以通过指定的属性,让它们在后代中共享,不过属性较少。注意如果需要使用主题,不能在当前的context中获取。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/node1_base.dart deleted file mode 100644 index 64ccfd50c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/node1_base.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class TextCupertinoTheme extends StatelessWidget { - const TextCupertinoTheme({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - CupertinoTextThemeData queryData = CupertinoTheme.of(context).textTheme; - Map styles = { - "tabLabelTextStyle: ": queryData.tabLabelTextStyle, - "actionTextStyle: ": queryData.actionTextStyle, - "navActionTextStyle: ": queryData.navActionTextStyle, - "textStyle: ": queryData.textStyle, - "navTitleTextStyle: ": queryData.navTitleTextStyle, - "pickerTextStyle: ": queryData.pickerTextStyle, - "dateTimePickerTextStyle: ": queryData.dateTimePickerTextStyle, - "navLargeTitleTextStyle: ": queryData.navLargeTitleTextStyle, - }; - TextStyle style = - const TextStyle(fontSize: 16, fontWeight: FontWeight.bold); - return Column( - children: - styles.keys.map((e) => buildItem(e, style, styles[e]!)).toList(), - ); - } - - Widget buildItem(String label, TextStyle labelStyle, TextStyle style) => - Column( - children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text(label, style: labelStyle), - Text("@toly", style: style) - ], - ), - ), - const Divider(height: 1) - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/node2_use.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/node2_use.dart deleted file mode 100644 index 61cad7ac3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/node2_use.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - - -class CustomCupertinoTheme extends StatelessWidget { - const CustomCupertinoTheme({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const CupertinoTheme( - data: CupertinoThemeData( - primaryColor: Colors.blue, primaryContrastingColor: Colors.green), - child: _ChildUseTheme()); - } -} - -class _ChildUseTheme extends StatelessWidget { - const _ChildUseTheme({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Container( - width: 50, - height: 50, - color: CupertinoTheme.of(context).primaryContrastingColor, - ), - SizedBox(width: 150, child: Slider(value: 0.8, onChanged: (v) => {})), - SizedBox( - width: 150, - child: Divider( - color: CupertinoTheme.of(context).primaryContrastingColor, - thickness: 1, - )) - ]); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_de_DE.json deleted file mode 100644 index 436313dde..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_de_DE.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "Datentabelle", - "info": "Eine Tabellenkomponente, die Logik für Klicken, Ändern, Sortieren usw. festlegen kann.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DataTable", - "desc": [ - "【columns】 : Spalten 【List】", - "【rows】 : Zeilen 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "Sortierung von DataTable", - "desc": [ - "【sortColumnIndex】 : Spaltennummer 【int】", - "【columnSpacing】 : Spaltenabstand 【double】", - "【sortAscending】 : Aufsteigend sortieren 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_en_US.json deleted file mode 100644 index 9178f352d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_en_US.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "Data Table", - "info": "A table component that can be customized with logic for clicking, editing, sorting, etc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DataTable", - "desc": [ - "【columns】 : columns 【List】", - "【rows】 : rows 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "Sorting in DataTable", - "desc": [ - "【sortColumnIndex】 : column index 【int】", - "【columnSpacing】 : column spacing 【double】", - "【sortAscending】 : ascending order 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_es_ES.json deleted file mode 100644 index 16ed9cd67..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_es_ES.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "Tabla de datos", - "info": "Un componente de tabla que permite realizar operaciones como hacer clic, modificar, ordenar, etc., con lógica personalizada.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DataTable", - "desc": [ - "【columns】 : columnas 【List】", - "【rows】 : filas 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "Ordenación de DataTable", - "desc": [ - "【sortColumnIndex】 : índice de columna 【int】", - "【columnSpacing】 : espaciado de columnas 【double】", - "【sortAscending】 : orden ascendente 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_fr_FR.json deleted file mode 100644 index 76f390ce6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_fr_FR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "Tableau de données", - "info": "Un composant de tableau qui permet de cliquer, modifier, trier, etc. en fonction de la logique définie.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DataTable", - "desc": [ - "【columns】 : colonnes 【List】", - "【rows】 : lignes 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "Tri de DataTable", - "desc": [ - "【sortColumnIndex】 : numéro de colonne 【int】", - "【columnSpacing】 : espacement des colonnes 【double】", - "【sortAscending】 : ordre ascendant 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_it_IT.json deleted file mode 100644 index b8cf7229a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_it_IT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "Tabella dati", - "info": "Un componente tabella che può essere personalizzato con logiche per clic, modifiche, ordinamento e altre operazioni.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di DataTable", - "desc": [ - "【columns】 : colonne 【List】", - "【rows】 : righe 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "Ordinamento di DataTable", - "desc": [ - "【sortColumnIndex】 : indice della colonna 【int】", - "【columnSpacing】 : spaziatura tra le colonne 【double】", - "【sortAscending】 : ordine crescente 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ja_JP.json deleted file mode 100644 index 4b3a32dcf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ja_JP.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "データテーブル", - "info": "テーブルコンポーネントで、クリック、編集、ソートなどの操作を論理的に設定できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DataTableの基本使用", - "desc": [ - "【columns】 : 列 【List】", - "【rows】 : 行 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "DataTableのsort", - "desc": [ - "【sortColumnIndex】 : 列番号 【int】", - "【columnSpacing】 : 列間隔 【double】", - "【sortAscending】 : 順序かどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ko_KR.json deleted file mode 100644 index dfd1ec90d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ko_KR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "데이터 테이블", - "info": "테이블 컴포넌트로, 클릭, 수정, 정렬 등의 작업을 위한 로직을 지정할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DataTable 기본 사용", - "desc": [ - "【columns】 : 열 【List】", - "【rows】 : 행 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "DataTable의 정렬", - "desc": [ - "【sortColumnIndex】 : 열 번호 【int】", - "【columnSpacing】 : 열 간격 【double】", - "【sortAscending】 : 순서 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_pt_PT.json deleted file mode 100644 index 3ab4fccc6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_pt_PT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "Tabela de Dados", - "info": "Um componente de tabela que pode definir lógicas para cliques, modificações, ordenação e outras operações.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DataTable", - "desc": [ - "【columns】 : Colunas 【List】", - "【rows】 : Linhas 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "Ordenação do DataTable", - "desc": [ - "【sortColumnIndex】 : Índice da Coluna 【int】", - "【columnSpacing】 : Espaçamento entre Colunas 【double】", - "【sortAscending】 : Ordem Ascendente 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ru_RU.json deleted file mode 100644 index 49b4af781..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ru_RU.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "Таблица данных", - "info": "Компонент таблицы, который позволяет настраивать логику для кликов, редактирования, сортировки и других операций.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DataTable", - "desc": [ - "【columns】 : Столбцы 【List】", - "【rows】 : Строки 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "Сортировка DataTable", - "desc": [ - "【sortColumnIndex】 : Номер столбца 【int】", - "【columnSpacing】 : Расстояние между столбцами 【double】", - "【sortAscending】 : По возрастанию 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_zh-CN.json deleted file mode 100644 index be8ceb7dd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_zh-CN.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "数据表格", - "info": "一个表格组件,可以制订逻辑进行点击、修改、排序等操作。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DataTable基本使用", - "desc": [ - "【columns】 : 列 【List】", - "【rows】 : 行 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "DataTable的sort", - "desc": [ - "【sortColumnIndex】 : 列号 【int】", - "【columnSpacing】 : 列间距 【double】", - "【sortAscending】 : 是否顺序 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/node1_base.dart deleted file mode 100644 index 9ead9206a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/node1_base.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-21 -/// contact me by email 1981462002@qq.com - - -class _Bean { - final int id; - final String name; - final String type; - - _Bean(this.id, this.name, this.type); -} - -class CustomDataTable extends StatelessWidget { - const CustomDataTable({super.key}); - - List<_Bean> get data => [ - _Bean(101, 'DataTable', 'StatelessWidget'), - _Bean(44, 'RangeSlider', 'StatefulWidget'), - _Bean(2, 'Text', 'StatelessWidget'), - _Bean(1, 'Image', 'StatefulWidget'), - ]; - List get columns => ['id', '名称', '类型']; - - @override - Widget build(BuildContext context) { - return DataTable( - columns: columns - .map((String title) => DataColumn(label: Text(title))) - .toList(), - rows: data - .map((_Bean bean) => DataRow(cells: [ - DataCell(Text('${bean.id}')), - DataCell(Text(bean.name)), - DataCell(Text(bean.type)), - ])) - .toList()); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/node2_operation.dart b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/node2_operation.dart deleted file mode 100644 index 5895e621c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/node2_operation.dart +++ /dev/null @@ -1,108 +0,0 @@ - - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; - -class _BeanOp { - final int id; - final String name; - final String type; - bool select; - - _BeanOp(this.id, this.name, this.type, this.select); - - @override - String toString() { - return '_BeanOp{id: $id, name: $name, type: $type, select: $select}'; - } -} - -class SortDataTable extends StatefulWidget { - const SortDataTable({Key? key}) : super(key: key); - - @override - _SortDataTableState createState() => _SortDataTableState(); -} - -class _SortDataTableState extends State { - List<_BeanOp> data = [ - _BeanOp(101, 'DataTable', 'StatelessWidget', false), - _BeanOp(44, 'RangeSlider', 'StatefulWidget', false), - _BeanOp(2, 'Text', 'StatelessWidget', false), - _BeanOp(1, 'Image', 'StatefulWidget', false), - ]; - - bool _sortAscending = false; - List<_BeanOp> selectData = <_BeanOp>[]; - - @override - Widget build(BuildContext context) { - return DataTable( - columnSpacing: 20, - sortColumnIndex: 1, - sortAscending: _sortAscending, - columns: [ - DataColumn( - label: Checkbox( - value: selectData.length == data.length, - onChanged: _onSelectAll, - ), - ), - DataColumn(label: const Text('id'), numeric: false, onSort: _onSortId), - const DataColumn(label: Text('名称')), - const DataColumn(label: Text('类型')), - ], - rows: data - .map((e) => DataRow(selected: false, cells: [ - DataCell(Checkbox( - value: e.select, - onChanged: (v) => _onSelectOne(v, e), - )), - DataCell(Text('${e.id}')), - DataCell(Text(e.name), - showEditIcon: true, onTap: () {}), - DataCell(Text(e.type)), - ])) - .toList()); - } - - _onSortId(int index, bool ascending) { - setState(() { - _sortAscending = ascending; - data.sort( - (a, b) => ascending ? a.id.compareTo(b.id) : b.id.compareTo(a.id)); - }); - } - - void _onSelectOne(bool? selected, _BeanOp e) { - if(selected==null) return; - setState(() { - if (selected) { - selectData.add(e); - } else { - selectData.remove(e); - } - e.select = selected; - }); - } - - void _onSelectAll(bool? select) { - if(select==null) return; - setState(() { - if (select) { - for (_BeanOp e in data) { - e.select = true; - } - selectData = data.map((e) => e).toList(); - } else { - for (_BeanOp e in data) { - e.select = false; - } - selectData = []; - } - }); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_de_DE.json deleted file mode 100644 index 8c78b48cd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_de_DE.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "Datumsauswahl", - "info": "Komponente zur Auswahl von Datumsangaben, die das aktuelle Datum, das ausgewählte Datum, den angezeigten Monat usw. festlegen kann und Datumsauswahlereignisse empfängt.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DayPicker", - "desc": [ - "【selectedDate】 : Ausgewähltes Datum 【DateTime】", - "【currentDate】 : Aktuelles Datum 【DateTime】", - "【firstDate】 : Frühestes Datum 【DateTime】", - "【lastDate】 : Spätestes Datum 【DateTime】", - "【displayedMonth】 : Aktuell angezeigter Monat 【DateTime】", - "【onChanged】 : Klick-Rückruf 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'DayPicker Datumsauswahl ist mit Flutter3.0 ausgelaufen. Der Ersatz ist der CalendarDatePicker Kalenderauswahl.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_en_US.json deleted file mode 100644 index 3e27118a1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_en_US.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "Date Picker", - "info": "A component for selecting dates, which can specify the current date, selected date, displayed month, etc., and receives date selection events.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DayPicker", - "desc": [ - "【selectedDate】 : Selected date 【DateTime】", - "【currentDate】 : Current date 【DateTime】", - "【firstDate】 : Earliest date limit 【DateTime】", - "【lastDate】 : Latest date limit 【DateTime】", - "【displayedMonth】 : Currently displayed month 【DateTime】", - "【onChanged】 : Click callback 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'DayPicker date picker has exited the stage of history in Flutter 3.0. It is replaced by the CalendarDatePicker calendar picker.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_es_ES.json deleted file mode 100644 index 5ff44e943..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_es_ES.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "Selector de Fecha", - "info": "Componente de selección de fecha, puede especificar la fecha actual, la fecha seleccionada, el mes mostrado, etc., y recibe eventos de selección de fecha.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DayPicker", - "desc": [ - "【selectedDate】 : Fecha seleccionada 【DateTime】", - "【currentDate】 : Fecha actual 【DateTime】", - "【firstDate】 : Límite de la fecha más temprana 【DateTime】", - "【lastDate】 : Límite de la fecha más tardía 【DateTime】", - "【displayedMonth】 : Mes actualmente mostrado 【DateTime】", - "【onChanged】 : Retroalimentación al hacer clic 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'DayPicker, el selector de fecha, dejó de usarse en Flutter 3.0. Su reemplazo es CalendarDatePicker, el selector de calendario.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_fr_FR.json deleted file mode 100644 index 83f9d1992..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_fr_FR.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "Sélecteur de date", - "info": "Composant de sélection de date, permet de spécifier la date actuelle, la date sélectionnée, le mois affiché, etc., et reçoit les événements de sélection de date.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DayPicker", - "desc": [ - "【selectedDate】 : Date sélectionnée 【DateTime】", - "【currentDate】 : Date actuelle 【DateTime】", - "【firstDate】 : Limite de la première date 【DateTime】", - "【lastDate】 : Limite de la dernière date 【DateTime】", - "【displayedMonth】 : Mois actuellement affiché 【DateTime】", - "【onChanged】 : Rappel de clic 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'Le sélecteur de date DayPicker a quitté la scène historique avec Flutter 3.0. Il est remplacé par le sélecteur de calendrier CalendarDatePicker.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_it_IT.json deleted file mode 100644 index f757f8ee0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_it_IT.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "Selettore di data", - "info": "Componente per la selezione della data, consente di specificare la data corrente, la data selezionata, il mese visualizzato, ecc., e riceve l'evento di selezione della data.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di DayPicker", - "desc": [ - "【selectedDate】 : Data selezionata 【DateTime】", - "【currentDate】 : Data corrente 【DateTime】", - "【firstDate】 : Limite della data più antica 【DateTime】", - "【lastDate】 : Limite della data più recente 【DateTime】", - "【displayedMonth】 : Mese attualmente visualizzato 【DateTime】", - "【onChanged】 : Callback al click 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'DayPicker, il selettore di date, è stato ritirato da Flutter 3.0. Il suo sostituto è CalendarDatePicker, il selettore di calendario.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ja_JP.json deleted file mode 100644 index d6b678017..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ja_JP.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "日付ピッカー", - "info": "日付を選択するコンポーネントで、現在の日付、選択された日付、表示する月などを指定できます。日付が選択されたイベントを受け取ります。", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DayPickerの基本的な使用法", - "desc": [ - "【selectedDate】 : 選択された日付 【DateTime】", - "【currentDate】 : 現在の日付 【DateTime】", - "【firstDate】 : 最初の日付制限 【DateTime】", - "【lastDate】 : 最後の日付制限 【DateTime】", - "【displayedMonth】 : 現在表示されている月 【DateTime】", - "【onChanged】 : クリックコールバック 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'DayPicker 日付ピッカーは Flutter3.0 で歴史の舞台から退場しました。代替として CalendarDatePicker カレンダーピッカーがあります。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ko_KR.json deleted file mode 100644 index addf834e2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ko_KR.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "날짜 선택기", - "info": "날짜 선택 컴포넌트로, 현재 날짜, 선택된 날짜, 표시할 월 등을 지정할 수 있으며, 날짜 선택 이벤트를 수신합니다.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DayPicker 기본 사용", - "desc": [ - "【selectedDate】 : 선택된 날짜 【DateTime】", - "【currentDate】 : 현재 날짜 【DateTime】", - "【firstDate】 : 가장 이른 날짜 제한 【DateTime】", - "【lastDate】 : 가장 늦은 날짜 제한 【DateTime】", - "【displayedMonth】 : 현재 표시되는 월 【DateTime】", - "【onChanged】 : 클릭 콜백 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'DayPicker 날짜 선택기는 Flutter3.0에서 역사의 뒤안길로 사라졌습니다. 이를 대체하는 것은 CalendarDatePicker 캘린더 선택기입니다.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_pt_PT.json deleted file mode 100644 index 26c935660..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_pt_PT.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "Seletor de Data", - "info": "Componente de seleção de data, pode especificar a data atual, a data selecionada, o mês exibido, etc., e recebe eventos de seleção de data.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DayPicker", - "desc": [ - "【selectedDate】 : Data selecionada 【DateTime】", - "【currentDate】 : Data atual 【DateTime】", - "【firstDate】 : Limite da data mais antiga 【DateTime】", - "【lastDate】 : Limite da data mais recente 【DateTime】", - "【displayedMonth】 : Mês atualmente exibido 【DateTime】", - "【onChanged】 : Callback de clique 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'O DayPicker, o seletor de data, saiu de cena no Flutter 3.0. O substituto é o CalendarDatePicker, o seletor de calendário.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ru_RU.json deleted file mode 100644 index d0b916f13..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ru_RU.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "Выбор даты", - "info": "Компонент для выбора даты, который позволяет указать текущую дату, выбранную дату, отображаемый месяц и т.д., а также получать события выбора даты.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DayPicker", - "desc": [ - "【selectedDate】 : Выбранная дата 【DateTime】", - "【currentDate】 : Текущая дата 【DateTime】", - "【firstDate】 : Ограничение на самую раннюю дату 【DateTime】", - "【lastDate】 : Ограничение на самую позднюю дату 【DateTime】", - "【displayedMonth】 : Отображаемый месяц 【DateTime】", - "【onChanged】 : Обратный вызов при клике 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'DayPicker, компонент выбора даты, ушел в историю с выходом Flutter 3.0. Его заменил CalendarDatePicker, компонент выбора даты из календаря.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_zh-CN.json deleted file mode 100644 index be05cf4bc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_zh-CN.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "日期选择器", - "info": "日期的选择组件,可指定当前日期、选中日期、展示月份等,接收日期选中事件。", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DayPicker基本使用", - "desc": [ - "【selectedDate】 : 选中日期 【DateTime】", - "【currentDate】 : 当前日期 【DateTime】", - "【firstDate】 : 最前日期限制 【DateTime】", - "【lastDate】 : 最后日期限制 【DateTime】", - "【displayedMonth】 : 当前展示的月份 【DateTime】", - "【onChanged】 : 点击回调 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'DayPicker 日期选择器于 Flutter3.0 退出历史舞台。取代者为 CalendarDatePicker 日历选择器。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/node1_base.dart deleted file mode 100644 index 9938f6036..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/node1_base.dart +++ /dev/null @@ -1,24 +0,0 @@ - - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; - -class CustomDayPicker extends StatelessWidget { - - const CustomDayPicker({Key? key}) : super(key: key); - - final String info = - 'DayPicker 日期选择器于 Flutter3.0 退出历史舞台。取代者为 CalendarDatePicker 日历选择器。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_de_DE.json deleted file mode 100644 index b27282e35..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "Dialogfeld", - "info": "Das einfachste Dialogfeld-Panel, das eine Inhaltskomponente enthält und Eigenschaften wie Schattentiefe, Hintergrundfarbe, Form usw. angeben kann.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung des Dialogs", - "desc": [ - "【child】: Animationssymboldaten 【Widget】", - "【elevation】: Schattentiefe 【double】", - "【backgroundColor】: Hintergrundfarbe 【Color】", - "【shape】: Form 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_en_US.json deleted file mode 100644 index 97d42177d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "Dialog Box", - "info": "The simplest dialog panel, containing a content component, with properties such as shadow depth, background color, shape, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Dialog", - "desc": [ - "【child】: Animation icon data 【Widget】", - "【elevation】: Shadow depth 【double】", - "【backgroundColor】: Background color 【Color】", - "【shape】: Shape 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_es_ES.json deleted file mode 100644 index f3ca155d6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "Cuadro de diálogo", - "info": "El panel de cuadro de diálogo más simple, que incluye un componente de contenido, puede especificar propiedades como la profundidad de la sombra, el color de fondo, la forma, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Dialog", - "desc": [ - "【child】 : Datos del ícono de animación 【Widget】", - "【elevation】 : Profundidad de la sombra 【double】", - "【backgroundColor】 : Color de fondo 【Color】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_fr_FR.json deleted file mode 100644 index 89e47cc68..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "Boîte de dialogue", - "info": "Le panneau de boîte de dialogue le plus simple, contenant un composant de contenu, peut spécifier des propriétés telles que la profondeur d'ombre, la couleur de fond, la forme, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de la boîte de dialogue", - "desc": [ - "【child】 : Données de l'icône animée 【Widget】", - "【elevation】 : Profondeur d'ombre 【double】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【shape】 : Forme 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_it_IT.json deleted file mode 100644 index 45c1c1862..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "Finestra di dialogo", - "info": "Il pannello di dialogo più semplice, contiene un componente di contenuto, può specificare proprietà come profondità dell'ombra, colore di sfondo, forma, ecc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di Dialog", - "desc": [ - "【child】 : Dati dell'icona animata 【Widget】", - "【elevation】 : Profondità dell'ombra 【double】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ja_JP.json deleted file mode 100644 index 509250c2a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "ダイアログ", - "info": "最もシンプルなダイアログパネルで、コンテンツコンポーネントを含み、影の深さ、背景色、形状などの属性を指定できます。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Dialog基本使用", - "desc": [ - "【child】 : アニメーションアイコンデータ 【Widget】", - "【elevation】 : 影の深さ 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【shape】 : 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ko_KR.json deleted file mode 100644 index bbbda1320..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "대화 상자", - "info": "가장 간단한 대화 상자 패널로, 내용 컴포넌트를 포함하며, 그림자 깊이, 배경색, 모양 등의 속성을 지정할 수 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Dialog 기본 사용", - "desc": [ - "【child】 : 애니메이션 아이콘 데이터 【Widget】", - "【elevation】 : 그림자 깊이 【double】", - "【backgroundColor】 : 배경색 【Color】", - "【shape】 : 모양 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_pt_PT.json deleted file mode 100644 index d2f524b3e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "Caixa de Diálogo", - "info": "O painel de diálogo mais simples, contendo um componente de conteúdo, pode especificar propriedades como profundidade de sombra, cor de fundo, forma, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Dialog", - "desc": [ - "【child】 : Dados do ícone de animação 【Widget】", - "【elevation】 : Profundidade de sombra 【double】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ru_RU.json deleted file mode 100644 index 560ec3a96..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "Диалоговое окно", - "info": "Самая простая панель диалогового окна, содержащая компонент содержимого, можно указать такие свойства, как глубина тени, цвет фона, форма и т.д.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Dialog", - "desc": [ - "【child】 : Данные анимационного иконка 【Widget】", - "【elevation】 : Глубина тени 【double】", - "【backgroundColor】 : Цвет фона 【Color】", - "【shape】 : Форма 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_zh-CN.json deleted file mode 100644 index b12763d41..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "对话框", - "info": "最简易的对话框面板,包含一个内容组件,可指定影深、背景色、形状等属性。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Dialog基本使用", - "desc": [ - "【child】 : 动画图标数据 【Widget】", - "【elevation】 : 影深 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【shape】 : 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/node1_base.dart deleted file mode 100644 index 59d39bd6c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/node1_base.dart +++ /dev/null @@ -1,128 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-24 -/// contact me by email 1981462002@qq.com - -class CustomDialog extends StatelessWidget { - const CustomDialog({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildRaisedButton(context), - _buildDialog(), - ], - ); - } - - Widget _buildDialog() => const Dialog( - backgroundColor: Colors.white, - elevation: 5, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10))), - child: SizedBox( - width: 50, - child: DeleteDialog(), - ), - ); - - Widget _buildRaisedButton(BuildContext context) => ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)), - ), - ), - onPressed: () { - showDialog(context: context, builder: (ctx) => _buildDialog()); - }, - child: const Text( - 'Just Show It !', - style: TextStyle(color: Colors.white), - ), - ); - -} - -class DeleteDialog extends StatelessWidget { - const DeleteDialog({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - _buildBar(context), - _buildTitle(), - _buildContent(), - _buildFooter(context), - ], - ); - } - - Widget _buildTitle() { - return const Text( - 'Delete Doucument', - style: TextStyle(color: Color(0xff5CC5E9), fontSize: 24), - ); - } - - Widget _buildContent() { - return const Padding( - padding: EdgeInsets.all(15.0), - child: Text( - ' Hi toly! If you push the conform buttom ,' - ' You will lose this file. Are you sure wand to do that?', - style: TextStyle(color: Color(0xffCFCFCF), fontSize: 16), - textAlign: TextAlign.justify, - ), - ); - } - - Widget _buildFooter(context) { - return Padding( - padding: const EdgeInsets.only(bottom: 15.0, top: 10,left: 10,right: 10), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Container( - alignment: Alignment.center, - height: 40, - width: 100, - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(30)), - color: Color(0xff73D1EE)), - child: const Text('Yes', - style: TextStyle(color: Colors.white, fontSize: 16)), - ), - InkWell( - onTap: ()=>Navigator.of(context).pop(), - child: Container( - alignment: Alignment.center, - height: 40, - width: 100, - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(30)), - color: Colors.orangeAccent), - child: const Text('Cancle', - style: TextStyle(color: Colors.white, fontSize: 16)), - ), - ) - ], - ), - ); - } - - Widget _buildBar(context) => Container( - height: 30, - alignment: Alignment.centerRight, - margin: const EdgeInsets.only(right: 10, top: 5), - child: InkWell( - onTap: ()=>Navigator.of(context).pop(), - child: const Icon( - Icons.close, - color: Color(0xff82CAE3), - ), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_de_DE.json deleted file mode 100644 index 0ec5efd92..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "Horizontale Trennlinie", - "info": "Horizontale Trennlinie, bei der Farbe, Höhe, Dicke und seitliche Abstände angegeben werden können. Wird häufig als Trennlinie für Listenelemente verwendet.", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Divider Farbe und Dicke", - "desc": [ - "【color】: Farbe 【Color】", - "【thickness】: Linienstärke 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Divider Höhe und Lücke", - "desc": [ - "【indent】: Länge der vorderen Lücke 【double】", - "【endIndent】: Länge der hinteren Lücke 【double】", - "【height】: Platzhalterhöhe 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_en_US.json deleted file mode 100644 index 71ed3d1b9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "Horizontal Divider", - "info": "A horizontal divider that can specify color, height, thickness, and left and right margin information, commonly used as a divider for list items.", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Divider Color and Thickness", - "desc": [ - "【color】: Color 【Color】", - "【thickness】: Line thickness 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Divider Height and Indent", - "desc": [ - "【indent】: Front indent length 【double】", - "【endIndent】: Rear indent length 【double】", - "【height】: Placeholder height 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_es_ES.json deleted file mode 100644 index 2b91b1bee..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "Línea divisoria horizontal", - "info": "Línea divisoria horizontal, se puede especificar el color, la altura, el grosor, la información de los márgenes izquierdo y derecho, comúnmente utilizada como línea divisoria de elementos de la lista.", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Color y grosor de Divider", - "desc": [ - "【color】: color 【Color】", - "【thickness】: grosor de la línea 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Altura y espacio de Divider", - "desc": [ - "【indent】: longitud del espacio frontal 【double】", - "【endIndent】: longitud del espacio posterior 【double】", - "【height】: altura del espacio ocupado 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_fr_FR.json deleted file mode 100644 index d6d3201c9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "Ligne de séparation horizontale", - "info": "Ligne de séparation horizontale, peut spécifier la couleur, la hauteur, l'épaisseur et les marges gauche et droite, couramment utilisée pour les lignes de séparation des éléments de liste.", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Couleur et épaisseur du Divider", - "desc": [ - "【color】: Couleur 【Color】", - "【thickness】: Épaisseur de la ligne 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Hauteur et espacement du Divider", - "desc": [ - "【indent】: Longueur de l'espacement avant 【double】", - "【endIndent】: Longueur de l'espacement arrière 【double】", - "【height】: Hauteur de l'élément 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_it_IT.json deleted file mode 100644 index c69a2bca8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "Linea di divisione orizzontale", - "info": "Linea di divisione orizzontale, è possibile specificare colore, altezza, spessore, margini sinistro e destro, comunemente utilizzata come linea di divisione tra gli elementi di una lista.", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Colore e spessore del Divider", - "desc": [ - "【color】: Colore 【Color】", - "【thickness】: Spessore della linea 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Altezza e spazio vuoto del Divider", - "desc": [ - "【indent】: Lunghezza dello spazio vuoto anteriore 【double】", - "【endIndent】: Lunghezza dello spazio vuoto posteriore 【double】", - "【height】: Altezza occupata 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ja_JP.json deleted file mode 100644 index 6319c3823..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "水平分割線", - "info": "水平分割線、色、高さ、太さ、左右の余白情報を指定できます。リストのアイテム分割線としてよく使用されます。", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Dividerの色と太さ", - "desc": [ - "【color】: 色 【Color】", - "【thickness】: 線の太さ 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Dividerの高さと空白", - "desc": [ - "【indent】: 前の空白の長さ 【double】", - "【endIndent】: 後の空白の長さ 【double】", - "【height】: 占める高さ 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ko_KR.json deleted file mode 100644 index 819480d46..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "수평 구분선", - "info": "수평 구분선으로, 색상, 높이, 두께, 좌우 여백 정보를 지정할 수 있으며, 주로 리스트의 항목 구분선으로 사용됩니다.", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Divider 색상과 두께", - "desc": [ - "【color】: 색상 【Color】", - "【thickness】: 선 두께 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Divider 높이와 여백", - "desc": [ - "【indent】: 앞쪽 여백 길이 【double】", - "【endIndent】: 뒤쪽 여백 길이 【double】", - "【height】: 높이 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_pt_PT.json deleted file mode 100644 index c2f0d239d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "Linha divisória horizontal", - "info": "Linha divisória horizontal, pode especificar cor, altura, espessura, margens esquerda e direita, comumente usada como linha divisória de itens de lista.", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Cor e espessura do Divider", - "desc": [ - "【color】: Cor 【Color】", - "【thickness】: Espessura da linha 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Altura e lacuna do Divider", - "desc": [ - "【indent】: Comprimento da lacuna frontal 【double】", - "【endIndent】: Comprimento da lacuna traseira 【double】", - "【height】: Altura do espaço ocupado 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ru_RU.json deleted file mode 100644 index fa945ba44..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "Горизонтальная разделительная линия", - "info": "Горизонтальная разделительная линия, можно указать цвет, высоту, толщину, отступы слева и справа. Обычно используется как разделитель элементов списка.", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Цвет и толщина Divider", - "desc": [ - "【color】: Цвет 【Color】", - "【thickness】: Толщина линии 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Высота и отступы Divider", - "desc": [ - "【indent】: Длина отступа спереди 【double】", - "【endIndent】: Длина отступа сзади 【double】", - "【height】: Высота занимаемого места 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_zh-CN.json deleted file mode 100644 index 1c2926855..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "水平分割线", - "info": "水平分割线,可指定颜色、高度、粗细、左右边距信息,常用与列表的item分割线。", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Divider颜色和粗细", - "desc": [ - "【color】: 颜色 【Color】", - "【thickness】: 线粗细 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Divider高度和空缺", - "desc": [ - "【indent】: 前面空缺长度 【double】", - "【endIndent】: 后面空缺长度 【double】", - "【height】: 占位高 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Divider/node1_base.dart deleted file mode 100644 index c17f923fb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/node1_base.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-24 -/// contact me by email 1981462002@qq.com - - -class CustomDivider extends StatelessWidget { - const CustomDivider({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - List dataColor = [ - Colors.red, Colors.yellow, - Colors.blue, Colors.green]; - List dataThickness = [1.0, 2.0, 4.0, 6.0]; - Map data = Map.fromIterables(dataColor, dataThickness); - return Column( - children: dataColor - .map((e) => Divider( - color: e, - thickness: data[e], - )).toList(), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/node2_height.dart b/modules/widget_system/widgets/lib/StatelessWidget/Divider/node2_height.dart deleted file mode 100644 index 5c4a8531c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/node2_height.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-24 -/// contact me by email 1981462002@qq.com - - - -class HeightDivider extends StatelessWidget { - const HeightDivider({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - List dataThickness = [10.0, 20.0, 30.0, 40.0]; - List dataColor = [ - Colors.red, Colors.yellow, - Colors.blue, Colors.green]; - Map data = Map.fromIterables(dataColor, dataThickness); - - return Column( - children: dataColor - .map((Color color) => Divider( - color: color, - indent:data[color], - endIndent: data[color]!*2, - height: data[color], - thickness: data[color]!/10, - )) - .toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_de_DE.json deleted file mode 100644 index ec56bf294..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "Zieh- und Schieb-Rücksetzer", - "info": "Es kann die nachfolgenden DraggableScrollableSheet benachrichtigen, um ihre Position auf den Ausgangszustand zurückzusetzen.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "Verwenden Sie DraggableScrollableActuator.reset(context), um die Position der nachfolgenden DraggableScrollableSheet auf die Ausgangsposition zurückzusetzen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_en_US.json deleted file mode 100644 index 5c9afd686..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "Drag and Slide Resetter", - "info": "It can notify the descendant DraggableScrollableSheet to reset its position to the initial state.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage", - "desc": [ - "【child】: Child component 【Widget】", - "Use DraggableScrollableActuator.reset(context) to reset the position of the descendant DraggableScrollableSheet to the initial position." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_es_ES.json deleted file mode 100644 index c6229f577..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "Restablecedor de arrastre y desplazamiento", - "info": "Puede notificar a la hoja DraggableScrollableSheet descendiente para restablecer su posición al estado inicial.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "Usa DraggableScrollableActuator.reset(context) para restablecer la posición inicial de la hoja DraggableScrollableSheet descendiente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_fr_FR.json deleted file mode 100644 index 928a6385c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "Réinitialisateur de glissement", - "info": "Il peut informer les descendants DraggableScrollableSheet de réinitialiser leur position à l'état initial.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "Utilisez DraggableScrollableActuator.reset(context) pour réinitialiser la position initiale du descendant DraggableScrollableSheet." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_it_IT.json deleted file mode 100644 index a13ffb466..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "Trascinabile scorrevole reset", - "info": "Può notificare ai discendenti DraggableScrollableSheet di ripristinare la loro posizione allo stato iniziale.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Metodo di utilizzo di base", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "Utilizza DraggableScrollableActuator.reset(context) per ripristinare la posizione iniziale del discendente DraggableScrollableSheet." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ja_JP.json deleted file mode 100644 index 4935f4bca..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "ドラッグスクロールリセッター", - "info": "これは子孫の DraggableScrollableSheet に通知して、その位置を初期状態にリセットすることができます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "基本的な使用方法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "DraggableScrollableActuator.reset(context) を使用して、子孫の DraggableScrollableSheet を初期位置にリセットします。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ko_KR.json deleted file mode 100644 index 57c5481df..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "드래그 스크롤 재설정기", - "info": "이것은 후손 DraggableScrollableSheet에게 초기 상태로 위치를 재설정하도록 알릴 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "기본 사용 방법", - "desc": [ - "【child】 : 자식 구성 요소 【Widget】", - "DraggableScrollableActuator.reset(context)를 사용하여 후손 DraggableScrollableSheet를 초기 위치로 재설정합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_pt_PT.json deleted file mode 100644 index 06f3310bf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "Reposicionador de Arrasto e Deslize", - "info": "Ele pode notificar o DraggableScrollableSheet descendente para redefinir sua posição para o estado inicial.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Método de Uso Básico", - "desc": [ - "【child】 : Componente filho 【Widget】", - "Use DraggableScrollableActuator.reset(context) para redefinir a posição inicial do DraggableScrollableSheet descendente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ru_RU.json deleted file mode 100644 index 912c56347..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "Перетаскиваемый сбрасыватель", - "info": "Он может уведомить дочерние DraggableScrollableSheet о необходимости сбросить их положение в исходное состояние.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "Используйте DraggableScrollableActuator.reset(context) для сброса положения дочернего DraggableScrollableSheet в исходное положение." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_zh-CN.json deleted file mode 100644 index 77c96c876..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "拖滑重置器", - "info": "它可以通知后代的 DraggableScrollableSheet,将其位置重置为初始状态。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "基本使用方法", - "desc": [ - "【child】 : 子组件 【Widget】", - "使用 DraggableScrollableActuator.reset(context) 重置后代 DraggableScrollableSheet 位初始位置。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/node1_base.dart deleted file mode 100644 index 16f720053..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/node1_base.dart +++ /dev/null @@ -1,110 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class DraggableScrollableActuatorDemo extends StatelessWidget { - const DraggableScrollableActuatorDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.all(10), - child: ElevatedButton( - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => DraggableScrollableActuatorPage()), - ); - }, - child: const Text("进入 DraggableScrollableActuator 测试页"), - ), - ); - } -} - -class DraggableScrollableActuatorPage extends StatelessWidget { - DraggableScrollableActuatorPage({Key? key}) : super(key: key); - - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - Colors.red[50]!, - Colors.red[100]!, - Colors.red[200]!, - Colors.red[300]!, - Colors.red[400]!, - Colors.red[500]!, - Colors.red[600]!, - Colors.red[700]!, - Colors.red[800]!, - Colors.red[900]!, - ]; - - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text("DraggableScrollableActuator"), - ), - body: DraggableScrollableActuator( - child: Builder( - builder: (ctx) => Column( - children: [ - ElevatedButton( - onPressed: () { - DraggableScrollableActuator.reset(ctx); - }, - child: const Text("重置位置"), - ), - Expanded( - child: buildSheet(), - ), - ], - ), - ), - ), - ); - } - - Widget buildSheet() => DraggableScrollableSheet( - initialChildSize: 0.3, - minChildSize: 0.2, - maxChildSize: 1, - expand: true, - builder: (BuildContext context, ScrollController scrollController) => - ListView.builder( - controller: scrollController, - itemCount: data.length, - itemBuilder: buildColorItem, - ), - ); - - Widget buildColorItem(BuildContext context, int index) { - return Container( - alignment: Alignment.center, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ]), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_de_DE.json deleted file mode 100644 index 2a2df0ec7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "Seitenleiste", - "info": "Wird im Allgemeinen für die draw- und endDraw-Eigenschaften in Scaffold als linke und rechte Seitenleiste verwendet. Kann ein Kindelement aufnehmen und die Schattentiefe angeben.", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Drawer", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【elevation】 : Schattentiefe 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_en_US.json deleted file mode 100644 index 7f1cbcd2d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "Drawer", - "info": "Generally used as the left and right sliding panels in the Scaffold's draw and endDraw properties. It can contain a child component and can specify the elevation.", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Drawer", - "desc": [ - "【child】 : Child component 【Widget】", - "【elevation】 : Elevation 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_es_ES.json deleted file mode 100644 index 12dc49f46..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "Barra deslizante", - "info": "Generalmente se utiliza en los atributos draw y endDraw de Scaffold como barras deslizantes izquierda y derecha, puede contener un componente hijo y permite especificar la profundidad de la sombra.", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Drawer", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【elevation】 : Profundidad de la sombra 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_fr_FR.json deleted file mode 100644 index c85c7ed57..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "Barre de glissement", - "info": "Généralement utilisé pour les propriétés draw et endDraw dans Scaffold comme barres de glissement gauche et droite, peut contenir un composant enfant, peut spécifier la profondeur de l'ombre.", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Drawer", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【elevation】 : Profondeur de l'ombre 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_it_IT.json deleted file mode 100644 index b28e89eb8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "Barra di scorrimento", - "info": "Generalmente utilizzato per gli attributi draw e endDraw in Scaffold come barre di scorrimento laterali, può contenere un componente figlio e specificare la profondità dell'ombra.", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Drawer", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【elevation】 : Profondità dell'ombra 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ja_JP.json deleted file mode 100644 index e1366ece3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "スライドバー", - "info": "一般的にScaffoldのdrawおよびendDrawプロパティで左右のスライドバーとして使用され、1つの子コンポーネントを収容でき、影の深さを指定できます。", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Drawerの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【elevation】 : 影の深さ 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ko_KR.json deleted file mode 100644 index b7eb4ada1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "슬라이드 바", - "info": "일반적으로 Scaffold의 draw 및 endDraw 속성으로 좌우 슬라이드 바로 사용되며, 하나의 자식 위젯을 수용할 수 있고, 그림자 깊이를 지정할 수 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Drawer 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【elevation】 : 그림자 깊이 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_pt_PT.json deleted file mode 100644 index 7dfd72b68..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "Barra de deslizamento", - "info": "Geralmente usado para os atributos draw e endDraw no Scaffold como barras de deslizamento esquerda e direita, pode conter um componente filho e especificar a profundidade da sombra.", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Drawer", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【elevation】 : Profundidade da sombra 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ru_RU.json deleted file mode 100644 index 09836344c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "Скользящая панель", - "info": "Обычно используется в свойствах draw и endDraw Scaffold в качестве левой и правой скользящей панели, может содержать один дочерний компонент, можно указать глубину тени.", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Drawer", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【elevation】 : Глубина тени 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_zh-CN.json deleted file mode 100644 index 35284bfad..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "滑页栏", - "info": "一般用于Scaffold中的draw和endDraw属性作为左右的滑页栏,可以容纳一个子组件,能指定影深。", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Drawer基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【elevation】 : 影深 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/node1_base.dart deleted file mode 100644 index 9248e9a52..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/node1_base.dart +++ /dev/null @@ -1,65 +0,0 @@ - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; - -class CustomDrawer extends StatelessWidget { - const CustomDrawer({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 400, - child: Scaffold( - appBar: AppBar( - title: const Text('Flutter Unit'), - ), - drawer: Drawer( - elevation: 3, - child: _buildChild(), - ), - ), - ); - } - - Widget _buildChild() => ListView( - padding: EdgeInsets.zero, - children: const [ - DrawerHeader( - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage('assets/images/caver.webp'), - fit: BoxFit.cover), - ), - child: Text( - '张风捷特烈', - style: TextStyle(fontSize: 24, color: Colors.white, shadows: [ - Shadow(color: Colors.black, offset: Offset(1, 1), blurRadius: 3) - ]), - ), - ), - ListTile( - leading: Icon( - Icons.star, - color: Colors.blue, - ), - title: Text('我的收藏'), - ), - ListTile( - leading: Icon( - Icons.palette, - color: Colors.orangeAccent, - ), - title: Text('我的绘画'), - ), - ListTile( - leading: Icon( - Icons.insert_drive_file, - color: Colors.green, - ), - title: Text('我的文件'), - ), - ], - ); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_de_DE.json deleted file mode 100644 index 4ee3ddcb0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "Schubladenknopf", - "info": "Ein linker Schubladensymbolknopf, der das Symbol mit DrawerButtonIcon anzeigt. Das Standardklickereignis kann die linke Schublade öffnen.", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DrawerButton", - "desc": [ - "【onPressed】: Klickereignis 【VoidCallback?】", - "【style】: Schaltflächenstil 【ButtonStyle?】", - "Wenn onPressed leer ist, wird beim Klicken die linke Schublade geöffnet." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_en_US.json deleted file mode 100644 index efd56389d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "Drawer Button", - "info": "A left drawer icon button, using DrawerButtonIcon to display the icon. The default click event can open the left drawer.", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DrawerButton", - "desc": [ - "【onPressed】: Click event 【VoidCallback?】", - "【style】: Button style 【ButtonStyle?】", - "When onPressed is empty, clicking will open the left drawer." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_es_ES.json deleted file mode 100644 index d8466e59e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "Botón de cajón", - "info": "Un botón de icono de cajón izquierdo, utiliza DrawerButtonIcon para mostrar el icono, el evento de clic predeterminado puede abrir el cajón izquierdo.", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DrawerButton", - "desc": [ - "【onPressed】: Evento de clic 【VoidCallback?】", - "【style】: Estilo del botón 【ButtonStyle?】", - "Cuando onPressed está vacío, al hacer clic se abrirá el cajón izquierdo." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_fr_FR.json deleted file mode 100644 index 12c175fbe..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "Bouton de tiroir", - "info": "Un bouton d'icône de tiroir gauche, utilise DrawerButtonIcon pour afficher l'icône. L'événement de clic par défaut peut ouvrir le tiroir gauche.", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DrawerButton", - "desc": [ - "【onPressed】 : Événement de clic 【VoidCallback?】", - "【style】: Style du bouton 【ButtonStyle?】", - "Lorsque onPressed est vide, un clic ouvrira le tiroir gauche." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_it_IT.json deleted file mode 100644 index 8a7da810f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "Pulsante Cassetto", - "info": "Un pulsante con icona del cassetto sinistro, utilizza DrawerButtonIcon per mostrare l'icona, l'evento di clic predefinito può aprire il cassetto sinistro.", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di DrawerButton", - "desc": [ - "【onPressed】 : Evento di clic 【VoidCallback?】", - "【style】: Stile del pulsante 【ButtonStyle?】", - "Quando onPressed è vuoto, il clic aprirà il cassetto sinistro." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ja_JP.json deleted file mode 100644 index 8710f35dd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "ドロワーボタン", - "info": "左ドロワーアイコンボタンで、DrawerButtonIconを使用してアイコンを表示します。デフォルトのクリックイベントで左ドロワーを開きます。", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerButton 基本使用", - "desc": [ - "【onPressed】 : クリックイベント 【VoidCallback?】", - "【style】: ボタンスタイル 【ButtonStyle?】", - "onPressedが空の場合、クリックすると左ドロワーが開きます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ko_KR.json deleted file mode 100644 index 2065716b9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "서랍 버튼", - "info": "왼쪽 서랍 아이콘 버튼, DrawerButtonIcon을 사용하여 아이콘을 표시하며, 기본 클릭 이벤트는 왼쪽 서랍을 엽니다.", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerButton 기본 사용", - "desc": [ - "【onPressed】 : 클릭 이벤트 【VoidCallback?】", - "【style】: 버튼 스타일 【ButtonStyle?】", - "onPressed가 비어 있을 때, 클릭하면 왼쪽 서랍이 열립니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_pt_PT.json deleted file mode 100644 index 3ea74e2bd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "Botão de Gaveta", - "info": "Um botão de ícone de gaveta esquerda, usando DrawerButtonIcon para exibir o ícone, o evento de clique padrão pode abrir a gaveta esquerda.", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DrawerButton", - "desc": [ - "【onPressed】 : Evento de clique 【VoidCallback?】", - "【style】: Estilo do botão 【ButtonStyle?】", - "Quando onPressed estiver vazio, ao clicar, a gaveta esquerda será aberta." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ru_RU.json deleted file mode 100644 index 8a62d7b9b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "Кнопка ящика", - "info": "Кнопка с иконкой левого ящика, использует DrawerButtonIcon для отображения иконки, по умолчанию при нажатии открывает левый ящик.", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DrawerButton", - "desc": [ - "【onPressed】: Событие нажатия 【VoidCallback?】", - "【style】: Стиль кнопки 【ButtonStyle?】", - "Если onPressed пуст, при нажатии открывается левый ящик." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_zh-CN.json deleted file mode 100644 index 6cf4fc4bc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "抽屉按钮", - "info": "一个左抽屉图标按钮, 使用 DrawerButtonIcon 展示图标,默认点击事件可以打开左抽屉。", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerButton 基本使用", - "desc": [ - "【onPressed】 : 点击事件 【VoidCallback?】", - "【style】: 按钮样式 【ButtonStyle?】", - "onPressed 为空时,点击时会打开左抽屉。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/node1_base.dart deleted file mode 100644 index 8803ccdb9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/node1_base.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/11/28 -/// contact me by email 1981462002@qq.com - - -class DrawerButtonDemo extends StatelessWidget { - const DrawerButtonDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return DrawerButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - iconColor: Colors.white, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_de_DE.json deleted file mode 100644 index 6d7a5fde0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "Schubladen-Schaltflächensymbol", - "info": "Ein Schubladen-Icon-Symbol, das je nach Plattform das entsprechende Symbol anzeigt und über ActionIconTheme angepasst werden kann.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerButtonIcon-Effekt", - "desc": [ - "Passt das Symbol der Schubladenschaltfläche für verschiedene Plattformen über die _ActionIcon-Komponente gemäß dem ActionIconTheme an." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_en_US.json deleted file mode 100644 index 3b9628df1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "Drawer Button Icon", - "info": "A drawer Icon, which displays the corresponding icon according to the platform, and can be customized with ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerButtonIcon Effect", - "desc": [ - "The _ActionIcon component adapts the drawer button icon for different platforms based on the ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_es_ES.json deleted file mode 100644 index 1be7aee19..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "Icono del botón del cajón", - "info": "Un icono de cajón, muestra el icono correspondiente según la plataforma, se puede personalizar el tema a través de ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Efecto de DrawerButtonIcon", - "desc": [ - "A través del componente _ActionIcon, se adapta el icono del botón del cajón para diferentes plataformas según el tema de ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_fr_FR.json deleted file mode 100644 index 9143ef42d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "Icône de bouton de tiroir", - "info": "Une icône de tiroir, affichant l'icône correspondante selon la plateforme, peut être personnalisée avec ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Effet de DrawerButtonIcon", - "desc": [ - "Le composant _ActionIcon adapte l'icône du bouton de tiroir à différentes plateformes selon le thème ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_it_IT.json deleted file mode 100644 index 6da1a0b42..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "Icona del pulsante del cassetto", - "info": "Un'icona del cassetto, che mostra l'icona corrispondente in base alla piattaforma, può essere personalizzata tramite ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Effetto DrawerButtonIcon", - "desc": [ - "Utilizzando il componente _ActionIcon in base al tema ActionIconTheme, per adattare l'icona del pulsante del cassetto a diverse piattaforme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ja_JP.json deleted file mode 100644 index 7c10cefc6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "ドロワーボタンアイコン", - "info": "ドロワー Icon アイコンで、プラットフォームに応じたアイコンを表示し、ActionIconTheme でテーマをカスタマイズできます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerButtonIcon 効果", - "desc": [ - "_ActionIcon コンポーネントを使用して、ActionIconTheme テーマに基づいて、異なるプラットフォームのドロワーボタンアイコンを適応させます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ko_KR.json deleted file mode 100644 index 003120801..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "서랍 버튼 아이콘", - "info": "서랍 아이콘, 플랫폼에 따라 해당 아이콘을 표시하며, ActionIconTheme을 통해 테마를 사용자 정의할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerButtonIcon 효과", - "desc": [ - "_ActionIcon 컴포넌트를 통해 ActionIconTheme 테마에 따라 다른 플랫폼의 서랍 버튼 아이콘을 조정합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_pt_PT.json deleted file mode 100644 index 5daebcdfa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "Ícone do botão da gaveta", - "info": "Um ícone de gaveta, exibe o ícone correspondente de acordo com a plataforma, pode ser personalizado com o tema ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Efeito do DrawerButtonIcon", - "desc": [ - "Através do componente _ActionIcon, adapta o ícone do botão da gaveta para diferentes plataformas de acordo com o tema ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ru_RU.json deleted file mode 100644 index 5d97ec8ac..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "Иконка кнопки ящика", - "info": "Иконка ящика, которая отображает соответствующую иконку в зависимости от платформы. Можно настроить тему через ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Эффект DrawerButtonIcon", - "desc": [ - "Компонент _ActionIcon адаптирует иконку кнопки ящика для разных платформ в соответствии с темой ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_zh-CN.json deleted file mode 100644 index 1397b3c20..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "抽屉按钮图标", - "info": "一个抽屉 Icon 图标, 根据平台展示对应的图标,可以通过 ActionIconTheme 定制主题。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerButtonIcon 效果", - "desc": [ - "通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的抽屉按钮图标。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/node1_base.dart deleted file mode 100644 index a60b8b70e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/node1_base.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/11/28 -/// contact me by email 1981462002@qq.com - -class DrawerButtonIconDemo extends StatelessWidget { - const DrawerButtonIconDemo({super.key}); - - @override - Widget build(BuildContext context) { - return const DrawerButtonIcon(); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_de_DE.json deleted file mode 100644 index 309a66241..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "Drawer-Header", - "info": "Wird normalerweise in Drawer verwendet, als Kopf des Drawers. Kann Attribute wie Innen- und Außenabstand, Dekoration, Unterkomponenten usw. festlegen.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DrawerHeader", - "desc": [ - "【child】 : Unterkomponente 【Widget】", - "【decoration】 : Dekoration 【Decoration】", - "【margin】 : Außenabstand 【EdgeInsetsGeometry】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_en_US.json deleted file mode 100644 index 1c719c261..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "Drawer Header", - "info": "Generally used in Drawer, as the header of the drawer. You can specify properties such as padding, decoration, child components, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DrawerHeader", - "desc": [ - "【child】 : Child Component 【Widget】", - "【decoration】 : Decoration 【Decoration】", - "【margin】 : Margin 【EdgeInsetsGeometry】", - "【padding】 : Padding 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_es_ES.json deleted file mode 100644 index 3deee37bf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "Encabezado del cajón", - "info": "Generalmente se utiliza en Drawer, como encabezado del cajón. Se pueden especificar propiedades como márgenes internos y externos, decoración, componentes secundarios, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DrawerHeader", - "desc": [ - "【child】 : Componente secundario 【Widget】", - "【decoration】 : Decoración 【Decoration】", - "【margin】 : Margen externo 【EdgeInsetsGeometry】", - "【padding】 : Margen interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_fr_FR.json deleted file mode 100644 index 95784358b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "En-tête de tiroir", - "info": "Généralement utilisé dans Drawer, comme en-tête du tiroir. Peut spécifier des propriétés telles que les marges intérieures et extérieures, la décoration, les composants enfants, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DrawerHeader", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【decoration】 : Décoration 【Decoration】", - "【margin】 : Marge extérieure 【EdgeInsetsGeometry】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_it_IT.json deleted file mode 100644 index 54fc9e885..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "Intestazione del cassetto", - "info": "Generalmente utilizzato in Drawer, come intestazione del cassetto. È possibile specificare proprietà come margini interni ed esterni, decorazioni, componenti figli, ecc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di DrawerHeader", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【decoration】 : Decorazione 【Decoration】", - "【margin】 : Margine esterno 【EdgeInsetsGeometry】", - "【padding】 : Margine interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ja_JP.json deleted file mode 100644 index c917a0602..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "ドロワーヘッダー", - "info": "一般的にDrawer内で使用され、ドロワーのヘッダーとして機能します。内外の余白、装飾、子コンポーネントなどのプロパティを指定できます。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerHeaderの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【decoration】 : 装飾 【Decoration】", - "【margin】 : 外側の余白 【EdgeInsetsGeometry】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ko_KR.json deleted file mode 100644 index b796014dc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "슬라이드 페이지 헤더", - "info": "일반적으로 Drawer에서 사용되며, 슬라이드 페이지의 헤더로 사용됩니다. 내부 및 외부 여백, 장식, 하위 구성 요소 등의 속성을 지정할 수 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerHeader 기본 사용", - "desc": [ - "【child】 : 하위 구성 요소 【Widget】", - "【decoration】 : 장식 【Decoration】", - "【margin】 : 외부 여백 【EdgeInsetsGeometry】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_pt_PT.json deleted file mode 100644 index 209efa1e3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "Cabeçalho do Painel Deslizante", - "info": "Geralmente utilizado no Drawer, como cabeçalho do painel deslizante. Pode especificar atributos como margens internas e externas, decoração, componentes filhos, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DrawerHeader", - "desc": [ - "【child】 : Componente Filho 【Widget】", - "【decoration】 : Decoração 【Decoration】", - "【margin】 : Margem Externa 【EdgeInsetsGeometry】", - "【padding】 : Margem Interna 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ru_RU.json deleted file mode 100644 index 77940ee30..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "Заголовок выдвижной панели", - "info": "Обычно используется в Drawer в качестве заголовка выдвижной панели. Можно указать свойства, такие как отступы, декор, дочерние компоненты и т.д.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DrawerHeader", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【decoration】 : Декор 【Decoration】", - "【margin】 : Внешний отступ 【EdgeInsetsGeometry】", - "【padding】 : Внутренний отступ 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_zh-CN.json deleted file mode 100644 index 7ebf64d04..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "滑页栏标题", - "info": "一般用于Drawer中,作为滑页栏的头部。可以指定内外边距、装饰、子组件等属性。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerHeader基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【decoration】 : 装饰 【Decoration】", - "【margin】 : 外边距 【EdgeInsetsGeometry】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/node1_base.dart deleted file mode 100644 index 76e761a9e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/node1_base.dart +++ /dev/null @@ -1,73 +0,0 @@ - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; -class CustomDrawerHeader extends StatelessWidget { - const CustomDrawerHeader({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 400, - child: Scaffold( - appBar: AppBar( - title: const Text('Flutter Unit'), - ), - drawer: Drawer( - elevation: 3, - child: _buildChild(), - ), - ), - ); - } - - Widget _buildChild() => ListView( - padding: EdgeInsets.zero, - children: [ - _buildHeader(), - const ListTile( - leading: Icon( - Icons.star, - color: Colors.blue, - ), - title: Text('我的收藏'), - ), - const ListTile( - leading: Icon( - Icons.palette, - color: Colors.orangeAccent, - ), - title: Text('我的绘画'), - ), - const ListTile( - leading: Icon( - Icons.insert_drive_file, - color: Colors.green, - ), - title: Text('我的文件'), - ), - ], - ); - - Widget _buildHeader() => const DrawerHeader( - margin: EdgeInsets.all(10), - padding: EdgeInsets.only(left: 20,top: 15), - decoration: BoxDecoration( - borderRadius: BorderRadius.only( - topLeft:Radius.circular(40), - topRight:Radius.circular(40) - ), - image: DecorationImage( - image: AssetImage('assets/images/caver.webp'), - fit: BoxFit.cover), - ), - child: Text( - '张风捷特烈', - style: TextStyle(fontSize: 24, color: Colors.white, shadows: [ - Shadow(color: Colors.black, offset: Offset(1, 1), blurRadius: 3) - ]), - ), - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_de_DE.json deleted file mode 100644 index 9b37050e6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "Rechte Schubladen-Schaltfläche", - "info": "Eine rechte Schubladen-Icon-Schaltfläche, die das EndDrawerButtonIcon verwendet, um das Icon anzuzeigen. Standardmäßig öffnet ein Klick die rechte Schublade.", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von EndDrawerButton", - "desc": [ - "【onPressed】 : Klick-Ereignis 【VoidCallback?】", - "【style】: Schaltflächenstil 【ButtonStyle?】", - "Wenn onPressed leer ist, wird beim Klicken die rechte Schublade geöffnet." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_en_US.json deleted file mode 100644 index 807315a6f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "Right Drawer Button", - "info": "A right drawer icon button, using EndDrawerButtonIcon to display the icon, the default click event can open the right drawer.", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of EndDrawerButton", - "desc": [ - "【onPressed】: Click event 【VoidCallback?】", - "【style】: Button style 【ButtonStyle?】", - "When onPressed is empty, clicking will open the right drawer." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_es_ES.json deleted file mode 100644 index 9166032a5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "Botón de cajón derecho", - "info": "Un botón de icono de cajón derecho, que utiliza EndDrawerButtonIcon para mostrar el icono. El evento de clic predeterminado puede abrir el cajón derecho.", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de EndDrawerButton", - "desc": [ - "【onPressed】 : Evento de clic 【VoidCallback?】", - "【style】: Estilo del botón 【ButtonStyle?】", - "Cuando onPressed está vacío, al hacer clic se abrirá el cajón derecho." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_fr_FR.json deleted file mode 100644 index 8e80d8281..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "Bouton de tiroir droit", - "info": "Un bouton d'icône de tiroir droit, utilisant EndDrawerButtonIcon pour afficher l'icône, l'événement de clic par défaut peut ouvrir le tiroir droit.", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de EndDrawerButton", - "desc": [ - "【onPressed】 : Événement de clic 【VoidCallback?】", - "【style】: Style du bouton 【ButtonStyle?】", - "Lorsque onPressed est vide, un clic ouvrira le tiroir droit." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_it_IT.json deleted file mode 100644 index bc4fca22a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "Pulsante cassetto destro", - "info": "Un pulsante icona per il cassetto destro, utilizza EndDrawerButtonIcon per visualizzare l'icona. L'evento di clic predefinito apre il cassetto destro.", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di EndDrawerButton", - "desc": [ - "【onPressed】 : Evento di clic 【VoidCallback?】", - "【style】: Stile del pulsante 【ButtonStyle?】", - "Quando onPressed è vuoto, cliccando si apre il cassetto destro." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ja_JP.json deleted file mode 100644 index 23fcf703b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "右ドロワーボタン", - "info": "右ドロワーアイコンボタンで、EndDrawerButtonIconを使用してアイコンを表示し、デフォルトのクリックイベントで右ドロワーを開くことができます。", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EndDrawerButton 基本使用", - "desc": [ - "【onPressed】 : クリックイベント 【VoidCallback?】", - "【style】: ボタンスタイル 【ButtonStyle?】", - "onPressedが空の場合、クリックすると右ドロワーが開きます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ko_KR.json deleted file mode 100644 index 74f43710b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "오른쪽 서랍 버튼", - "info": "오른쪽 서랍 아이콘 버튼, EndDrawerButtonIcon을 사용하여 아이콘을 표시하며, 기본 클릭 이벤트는 오른쪽 서랍을 열 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EndDrawerButton 기본 사용", - "desc": [ - "【onPressed】 : 클릭 이벤트 【VoidCallback?】", - "【style】: 버튼 스타일 【ButtonStyle?】", - "onPressed가 비어 있을 때, 클릭하면 오른쪽 서랍이 열립니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_pt_PT.json deleted file mode 100644 index 77bcd2109..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "Botão de gaveta direita", - "info": "Um botão de ícone de gaveta direita, usando EndDrawerButtonIcon para exibir o ícone, o evento de clique padrão pode abrir a gaveta direita.", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do EndDrawerButton", - "desc": [ - "【onPressed】 : Evento de clique 【VoidCallback?】", - "【style】: Estilo do botão 【ButtonStyle?】", - "Quando onPressed estiver vazio, ao clicar, a gaveta direita será aberta." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ru_RU.json deleted file mode 100644 index 9ee1ce2d8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "Кнопка правого ящика", - "info": "Кнопка с иконкой правого ящика, использующая EndDrawerButtonIcon для отображения иконки. По умолчанию при нажатии открывает правый ящик.", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование EndDrawerButton", - "desc": [ - "【onPressed】: Событие нажатия 【VoidCallback?】", - "【style】: Стиль кнопки 【ButtonStyle?】", - "Если onPressed пуст, при нажатии открывается правый ящик." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_zh-CN.json deleted file mode 100644 index 6d40c8cbd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "右抽屉按钮", - "info": "一个右抽屉图标按钮, 使用 EndDrawerButtonIcon 展示图标,默认点击事件可以打开右抽屉。", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EndDrawerButton 基本使用", - "desc": [ - "【onPressed】 : 点击事件 【VoidCallback?】", - "【style】: 按钮样式 【ButtonStyle?】", - "onPressed 为空时,点击时会打开右抽屉。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/node1_base.dart deleted file mode 100644 index bbce197e0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/node1_base.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/11/28 -/// contact me by email 1981462002@qq.com - - -class EndDrawerButtonDemo extends StatelessWidget { - const EndDrawerButtonDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return EndDrawerButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - iconColor: Colors.white, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_de_DE.json deleted file mode 100644 index 3e564d5f9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "Rechte Schubladen-Schaltfläche Symbol", - "info": "Ein Symbol für die rechte Schubladen-Schaltfläche, das je nach Plattform das entsprechende Symbol anzeigt. Das Thema kann über ActionIconTheme angepasst werden.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EndDrawerButtonIcon Effekt", - "desc": [ - "Durch die _ActionIcon-Komponente wird das Symbol für die rechte Schubladen-Schaltfläche entsprechend dem ActionIconTheme-Theme an verschiedene Plattformen angepasst." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_en_US.json deleted file mode 100644 index 3afb85737..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "Right Drawer Button Icon", - "info": "A right drawer Icon that displays the corresponding icon based on the platform. It can be customized with the ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EndDrawerButtonIcon Effect", - "desc": [ - "The _ActionIcon component adapts the right drawer button icon for different platforms based on the ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_es_ES.json deleted file mode 100644 index 47c9524b4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "Icono del botón del cajón derecho", - "info": "Un icono de cajón derecho que muestra el icono correspondiente según la plataforma, y se puede personalizar el tema a través de ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Efecto de EndDrawerButtonIcon", - "desc": [ - "El componente _ActionIcon adapta el icono del botón del cajón derecho para diferentes plataformas según el tema de ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_fr_FR.json deleted file mode 100644 index c1be227cc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "Icône de bouton de tiroir droit", - "info": "Une icône de tiroir droit, affichant l'icône correspondante selon la plateforme, peut être personnalisée avec ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Effet de l'icône EndDrawerButtonIcon", - "desc": [ - "Le composant _ActionIcon adapte l'icône du bouton de tiroir droit pour différentes plateformes selon le thème ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_it_IT.json deleted file mode 100644 index 679a54690..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "Icona del pulsante del cassetto destro", - "info": "Un'icona del cassetto destro, mostra l'icona corrispondente in base alla piattaforma, può essere personalizzata tramite ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Effetto di EndDrawerButtonIcon", - "desc": [ - "Adatta l'icona del pulsante del cassetto destro per diverse piattaforme tramite il componente _ActionIcon in base al tema ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ja_JP.json deleted file mode 100644 index 0bdd2df7b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "右ドロワーボタンアイコン", - "info": "右ドロワーのアイコンで、プラットフォームに応じて対応するアイコンを表示します。ActionIconTheme を使用してテーマをカスタマイズできます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EndDrawerButtonIcon 効果", - "desc": [ - "_ActionIcon コンポーネントを使用して、ActionIconTheme テーマに基づいて、異なるプラットフォームの右ドロワーボタンアイコンを適応させます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ko_KR.json deleted file mode 100644 index feb4b6525..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "오른쪽 서랍 버튼 아이콘", - "info": "오른쪽 서랍 Icon 아이콘, 플랫폼에 따라 해당 아이콘을 표시하며, ActionIconTheme을 통해 테마를 커스터마이징할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EndDrawerButtonIcon 효과", - "desc": [ - "_ActionIcon 컴포넌트를 통해 ActionIconTheme 테마에 따라 다른 플랫폼의 오른쪽 서랍 버튼 아이콘을 적용합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_pt_PT.json deleted file mode 100644 index 769b41677..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "Ícone do botão da gaveta direita", - "info": "Um ícone de gaveta direita, que exibe o ícone correspondente de acordo com a plataforma, podendo ser personalizado com o tema ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Efeito do EndDrawerButtonIcon", - "desc": [ - "O componente _ActionIcon adapta o ícone do botão da gaveta direita para diferentes plataformas de acordo com o tema ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ru_RU.json deleted file mode 100644 index 7e3fa0783..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "Иконка кнопки правого выдвижного ящика", - "info": "Иконка правого выдвижного ящика, отображающая соответствующую иконку в зависимости от платформы, может быть настроена с помощью ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Эффект EndDrawerButtonIcon", - "desc": [ - "Компонент _ActionIcon адаптирует иконку кнопки правого выдвижного ящика для разных платформ в зависимости от темы ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_zh-CN.json deleted file mode 100644 index 07e601ffa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "右抽屉按钮图标", - "info": "一个右抽屉 Icon 图标, 根据平台展示对应的图标,可以通过 ActionIconTheme 定制主题。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EndDrawerButtonIcon 效果", - "desc": [ - "通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的右抽屉按钮图标。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/node1_base.dart deleted file mode 100644 index a2957fcd9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/node1_base.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/11/28 -/// contact me by email 1981462002@qq.com - -class EndDrawerButtonIconDemo extends StatelessWidget { - const EndDrawerButtonIconDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const EndDrawerButtonIcon(); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_de_DE.json deleted file mode 100644 index f508855f2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_de_DE.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "Einblendendes Bild", - "info": "Lädt ein Bild mit transparentem Übergang. Kann Platzhalterbild, Animationskurven für Ein- und Ausblenden, Zeit, Breite, Höhe, Fit-Typ, Ausrichtung, Wiederholungsmodus usw. angeben.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork lädt Netzwerkbild", - "desc": [ - "【placeholder】 : Platzhalterbild-Adresse 【String】", - "【image】 : Anzeigebild-Adresse 【String】", - "【width】: Breite 【double】", - "【height】: Höhe 【double】", - "【fadeInDuration】: Einblenddauer 【Duration】", - "【fadeOutDuration】: Ausblenddauer 【Duration】", - "【fadeInCurve】: Einblendkurve 【Cubic】", - "【fadeOutCurve】: Ausblendkurve 【Cubic】", - "【fit】: Anpassungsmodus 【BoxFit】", - "【alignment】: Ausrichtungsmodus 【Alignment】", - "【repeat】: Wiederholungsmodus 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_en_US.json deleted file mode 100644 index 6d20fb528..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_en_US.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "Fade-in Image", - "info": "Load an image with a transparent gradient. You can specify a placeholder image, animation curves for fade in and out, duration, width, height, fit type, alignment, repeat mode, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork Load Network Image", - "desc": [ - "【placeholder】 : Placeholder image address 【String】", - "【image】 : Display image address 【String】", - "【width】: Width 【double】", - "【height】: Height 【double】", - "【fadeInDuration】: Fade-in duration 【Duration】", - "【fadeOutDuration】: Fade-out duration 【Duration】", - "【fadeInCurve】: Fade-in curve 【Cubic】", - "【fadeOutCurve】: Fade-out curve 【Cubic】", - "【fit】: Fit mode 【BoxFit】", - "【alignment】: Alignment mode 【Alignment】", - "【repeat】: Repeat mode 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_es_ES.json deleted file mode 100644 index fbb31cee9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_es_ES.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "Imagen de fundido", - "info": "Carga una imagen con un gradiente transparente. Se puede especificar una imagen de marcador de posición, curvas de animación de entrada y salida, tiempo, ancho y alto, tipo de ajuste, alineación, modo de repetición, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork cargar imagen de red", - "desc": [ - "【placeholder】 : dirección de la imagen de marcador de posición 【String】", - "【image】 : dirección de la imagen a mostrar 【String】", - "【width】: ancho 【double】", - "【height】: alto 【double】", - "【fadeInDuration】: duración del fundido de entrada 【Duration】", - "【fadeOutDuration】: duración del fundido de salida 【Duration】", - "【fadeInCurve】: curva de fundido de entrada 【Cubic】", - "【fadeOutCurve】: curva de fundido de salida 【Cubic】", - "【fit】: modo de ajuste 【BoxFit】", - "【alignment】: modo de alineación 【Alignment】", - "【repeat】: modo de repetición 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_fr_FR.json deleted file mode 100644 index 9433dd845..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_fr_FR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "Image en fondu", - "info": "Charge une image avec un dégradé transparent. Vous pouvez spécifier une image de remplacement, les courbes d'animation d'entrée et de sortie, la durée, la largeur, la hauteur, le type de fit, l'alignement, le mode de répétition, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork charger une image réseau", - "desc": [ - "【placeholder】 : adresse de l'image de remplacement 【String】", - "【image】 : adresse de l'image à afficher 【String】", - "【width】: largeur 【double】", - "【height】: hauteur 【double】", - "【fadeInDuration】: durée du fondu entrant 【Duration】", - "【fadeOutDuration】: durée du fondu sortant 【Duration】", - "【fadeInCurve】: courbe du fondu entrant 【Cubic】", - "【fadeOutCurve】: courbe du fondu sortant 【Cubic】", - "【fit】: mode d'ajustement 【BoxFit】", - "【alignment】: mode d'alignement 【Alignment】", - "【repeat】: mode de répétition 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_it_IT.json deleted file mode 100644 index 3b135d11e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_it_IT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "Immagine dissolvenza", - "info": "Carica un'immagine con una dissolvenza trasparente. È possibile specificare un'immagine segnaposto, curve di animazione per l'entrata e l'uscita, durata, larghezza, altezza, tipo di adattamento, allineamento, modalità di ripetizione, ecc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork carica immagini dalla rete", - "desc": [ - "【placeholder】 : Indirizzo dell'immagine segnaposto 【String】", - "【image】 : Indirizzo dell'immagine da visualizzare 【String】", - "【width】: Larghezza 【double】", - "【height】: Altezza 【double】", - "【fadeInDuration】: Durata della dissolvenza in entrata 【Duration】", - "【fadeOutDuration】: Durata della dissolvenza in uscita 【Duration】", - "【fadeInCurve】: Curva della dissolvenza in entrata 【Cubic】", - "【fadeOutCurve】: Curva della dissolvenza in uscita 【Cubic】", - "【fit】: Modalità di adattamento 【BoxFit】", - "【alignment】: Modalità di allineamento 【Alignment】", - "【repeat】: Modalità di ripetizione 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ja_JP.json deleted file mode 100644 index ff0eb9c45..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ja_JP.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "フェードイン画像", - "info": "画像を透明にグラデーションしてロードします。プレースホルダー画像、進退のアニメーションカーブ、時間、幅と高さ、fitタイプ、配置方法、繰り返し方法などを指定できます。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetworkでネットワーク画像をロード", - "desc": [ - "【placeholder】 : プレースホルダー画像のアドレス 【String】", - "【image】 : 表示画像のアドレス 【String】", - "【width】: 幅 【double】", - "【height】: 高さ 【double】", - "【fadeInDuration】: フェードイン時間 【Duration】", - "【fadeOutDuration】: フェードアウト時間 【Duration】", - "【fadeInCurve】: フェードインカーブ 【Cubic】", - "【fadeOutCurve】: フェードアウトカーブ 【Cubic】", - "【fit】: フィットモード 【BoxFit】", - "【alignment】: 配置モード 【Alignment】", - "【repeat】: 繰り返しモード 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ko_KR.json deleted file mode 100644 index 268d935ca..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ko_KR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "페이드 인 이미지", - "info": "이미지를 투명하게 페이드 인하여 로드합니다. 플레이스홀더 이미지, 애니메이션 곡선, 시간, 너비, 높이, fit 유형, 정렬 방식, 반복 방식 등을 지정할 수 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork 네트워크 이미지 로드", - "desc": [ - "【placeholder】 : 플레이스홀더 이미지 주소 【String】", - "【image】 : 표시할 이미지 주소 【String】", - "【width】: 너비 【double】", - "【height】: 높이 【double】", - "【fadeInDuration】: 페이드 인 시간 【Duration】", - "【fadeOutDuration】: 페이드 아웃 시간 【Duration】", - "【fadeInCurve】: 페이드 인 곡선 【Cubic】", - "【fadeOutCurve】: 페이드 아웃 곡선 【Cubic】", - "【fit】: 적합 모드 【BoxFit】", - "【alignment】: 정렬 모드 【Alignment】", - "【repeat】: 반복 모드 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_pt_PT.json deleted file mode 100644 index 734af47d1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_pt_PT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "Imagem de Desvanecimento", - "info": "Carrega uma imagem com um gradiente transparente. Pode especificar uma imagem de placeholder, curvas de animação de entrada e saída, duração, largura, altura, tipo de ajuste, alinhamento, modo de repetição, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork carregar imagem da rede", - "desc": [ - "【placeholder】 : endereço da imagem de placeholder 【String】", - "【image】 : endereço da imagem a ser exibida 【String】", - "【width】: largura 【double】", - "【height】: altura 【double】", - "【fadeInDuration】: duração do desvanecimento de entrada 【Duration】", - "【fadeOutDuration】: duração do desvanecimento de saída 【Duration】", - "【fadeInCurve】: curva de desvanecimento de entrada 【Cubic】", - "【fadeOutCurve】: curva de desvanecimento de saída 【Cubic】", - "【fit】: modo de ajuste 【BoxFit】", - "【alignment】: modo de alinhamento 【Alignment】", - "【repeat】: modo de repetição 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ru_RU.json deleted file mode 100644 index f2ed4160f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ru_RU.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "Изображение с плавным появлением", - "info": "Загрузка изображения с плавным появлением. Можно указать изображение-заполнитель, кривые анимации появления и исчезновения, время, ширину, высоту, тип подгонки, выравнивание, режим повторения и т.д.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork загрузка изображения из сети", - "desc": [ - "【placeholder】 : Адрес изображения-заполнителя 【String】", - "【image】 : Адрес отображаемого изображения 【String】", - "【width】: Ширина 【double】", - "【height】: Высота 【double】", - "【fadeInDuration】: Длительность появления 【Duration】", - "【fadeOutDuration】: Длительность исчезновения 【Duration】", - "【fadeInCurve】: Кривая появления 【Cubic】", - "【fadeOutCurve】: Кривая исчезновения 【Cubic】", - "【fit】: Режим подгонки 【BoxFit】", - "【alignment】: Режим выравнивания 【Alignment】", - "【repeat】: Режим повторения 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_zh-CN.json deleted file mode 100644 index 4c4d01c56..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_zh-CN.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "淡入图片", - "info": "透明渐变地加载一张图片。可指定占位图片、进退的动画曲线、时间、宽高、fit类型、对齐方式、重复方式等。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork加载网络图片", - "desc": [ - "【placeholder】 : 展位图地址 【String】", - "【image】 : 显示图地址 【String】", - "【width】: 宽 【double】", - "【height】: 高 【double】", - "【fadeInDuration】: 淡入时长 【Duration】", - "【fadeOutDuration】: 淡出时长 【Duration】", - "【fadeInCurve】: 淡入曲线 【Cubic】", - "【fadeOutCurve】: 淡出曲线 【Cubic】", - "【fit】: 适应模式 【BoxFit】", - "【alignment】: 对齐模式 【Alignment】", - "【repeat】: 重复模式 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/node1_base.dart deleted file mode 100644 index 0e6e88aca..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/node1_base.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - - -class CustomFadeInImage extends StatelessWidget { - const CustomFadeInImage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - String placeholder = "assets/images/icon_head.webp"; - String img = - "https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/" - "15739960c2da4de3a263eeabcb60057f~tplv-k3u1fbpfcp-zoom-crop-mark" - ":1304:1304:1304:734.awebp"; - return FadeInImage.assetNetwork( - placeholder: placeholder, - image: img, - width: 100, - height: 100, - fit: BoxFit.cover, - repeat:ImageRepeat.noRepeat, - alignment: Alignment.center, - fadeInDuration:const Duration(seconds: 5), - fadeInCurve: Curves.easeInCubic, - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_de_DE.json deleted file mode 100644 index 526328334..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "Filterstreifen", - "info": "Ähnlich wie die Chip-Komponente, hat Eigenschaften für ausgewählt oder nicht und ein Auswahlereignis. Wenn ausgewählt, wird die obere Ebene der linken Komponente mit einem ✔️ überlagert.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip kann Auswahlereignisse akzeptieren", - "desc": [ - "【selected】: Ob ausgewählt 【bool】", - "【onSelected】: Auswahlereignis 【Function(bool)】", - "【selectedColor】: Farbe nach der Auswahl 【Color】", - "【selectedShadowColor】: Schattenfarbe nach der Auswahl 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_en_US.json deleted file mode 100644 index b5d60b4ee..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "Filter Chip", - "info": "Similar in style to the Chip component, with properties for selection and selection events. When selected, the upper layer of the left component will be masked by a ✔️.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip can accept selection events", - "desc": [ - "【selected】: Whether selected 【bool】", - "【onSelected】: Selection event 【Function(bool)】", - "【selectedColor】: Color after selection 【Color】", - "【selectedShadowColor】: Shadow color after selection 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_es_ES.json deleted file mode 100644 index 4380e5b48..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "Chip de Filtro", - "info": "Estilo similar al componente Chip, con propiedades de selección y eventos de selección. Cuando está seleccionado, la capa superior del componente izquierdo estará cubierta por ✔️.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip puede aceptar eventos de selección", - "desc": [ - "【selected】: Si está seleccionado 【bool】", - "【onSelected】: Evento de selección 【Function(bool)】", - "【selectedColor】: Color después de la selección 【Color】", - "【selectedShadowColor】: Color de sombra después de la selección 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_fr_FR.json deleted file mode 100644 index bca9e2e67..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "Filtre puce", - "info": "Un style similaire au composant Chip, avec des propriétés de sélection et des événements de sélection. Lorsqu'il est sélectionné, une superposition de ✔️ apparaît sur le composant de gauche.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip peut accepter des événements de sélection", - "desc": [ - "【selected】: Sélectionné ou non 【bool】", - "【onSelected】: Événement de sélection 【Function(bool)】", - "【selectedColor】: Couleur après sélection 【Color】", - "【selectedShadowColor】: Couleur de l'ombre après sélection 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_it_IT.json deleted file mode 100644 index 7d643b69a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "Filtro Chip", - "info": "Stile simile al componente Chip, con proprietà di selezione e evento di selezione. Quando selezionato, il livello superiore del componente a sinistra sarà coperto da ✔️.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip accetta eventi di selezione", - "desc": [ - "【selected】: Se selezionato 【bool】", - "【onSelected】: Evento di selezione 【Function(bool)】", - "【selectedColor】: Colore dopo la selezione 【Color】", - "【selectedShadowColor】: Colore dell'ombra dopo la selezione 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ja_JP.json deleted file mode 100644 index 5bfbfd28b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "フィルターチップ", - "info": "Chipコンポーネントと似たスタイルで、選択状態の属性と選択イベントを持ちます。選択時には左側のコンポーネントの上層に✔️が表示されます。", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChipが選択イベントを受け入れる", - "desc": [ - "【selected】: 選択されているかどうか 【bool】", - "【onSelected】: 選択イベント 【Function(bool)】", - "【selectedColor】: 選択後の色 【Color】", - "【selectedShadowColor】: 選択後の影の色 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ko_KR.json deleted file mode 100644 index 54b96de4a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "필터 칩", - "info": "Chip 컴포넌트와 유사한 스타일로, 선택 여부 속성과 선택 이벤트를 가지고 있습니다. 선택 시 왼쪽 컴포넌트 상단에 ✔️ 마스크가 적용됩니다.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip 선택 이벤트 수신 가능", - "desc": [ - "【selected】: 선택 여부 【bool】", - "【onSelected】: 선택 이벤트 【Function(bool)】", - "【selectedColor】: 선택 후 색상 【Color】", - "【selectedShadowColor】: 선택 후 그림자 색상 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_pt_PT.json deleted file mode 100644 index 99a05f151..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "Filtro de Chip", - "info": "Estilo semelhante ao componente Chip, com propriedades de seleção e eventos de seleção. Quando selecionado, a camada superior do componente à esquerda será coberta por um ✔️.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip pode aceitar eventos de seleção", - "desc": [ - "【selected】: Se selecionado 【bool】", - "【onSelected】: Evento de seleção 【Function(bool)】", - "【selectedColor】: Cor após seleção 【Color】", - "【selectedShadowColor】: Cor da sombra após seleção 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ru_RU.json deleted file mode 100644 index e6904c931..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "Фильтр-чип", - "info": "Стиль, аналогичный компоненту Chip, с атрибутом выбора и событием выбора. При выборе верхний слой левого компонента будет затенен ✔️.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip может принимать события выбора", - "desc": [ - "【selected】: Выбрано ли 【bool】", - "【onSelected】: Событие выбора 【Function(bool)】", - "【selectedColor】: Цвет после выбора 【Color】", - "【selectedShadowColor】: Цвет тени после выбора 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_zh-CN.json deleted file mode 100644 index 3c4aaf75d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "过滤小条", - "info": "和Chip组件类似的样式,具有选中与否的属性和选中事件。当选中时左侧组件上层会被✔️遮罩。", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip可接受选择事件", - "desc": [ - "【selected】: 是否选择 【bool】", - "【onSelected】: 选择事件 【Function(bool)】", - "【selectedColor】: 选择后的颜色 【Color】", - "【selectedShadowColor】: 选择后的阴影颜色 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/node1_base.dart deleted file mode 100644 index ff56da994..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/node1_base.dart +++ /dev/null @@ -1,72 +0,0 @@ -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; - -class CustomFilterChip extends StatefulWidget { - const CustomFilterChip({Key? key}) : super(key: key); - - @override - _CustomFilterChipState createState() => _CustomFilterChipState(); -} - -class _CustomFilterChipState extends State { - final Map map = { - 'A': 'Ant', - 'B': 'Bug', - 'C': 'Cat', - 'D': 'Dog', - }; - final List _selected = []; - - @override - Widget build(BuildContext context) { - Color themeColor = Theme.of(context).primaryColor; - return Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Wrap( - children: map.keys.map((key) => _buildChild(themeColor,key)).toList(), - ), - Container( - padding: const EdgeInsets.all(10), - child: Text('您已选择: ${_selected.join(', ')}')), - ], - ); - } - - Padding _buildChild( Color themeColor,String key) { - bool select = _selected.contains(map[key]); - return Padding( - padding: const EdgeInsets.all(4.0), - child: FilterChip( - selectedColor: themeColor, - selectedShadowColor: Colors.blue, - side: BorderSide.none, - shadowColor: themeColor, - pressElevation: 5, - elevation: 2, - avatarBoxConstraints: BoxConstraints( - maxWidth: 22,maxHeight: 22 - ), - checkmarkColor: select?Colors.white:null, - avatar: CircleAvatar( - backgroundColor: select?Colors.blueAccent:null, - child: Text(key,style: TextStyle(fontSize: 12,color: select?Colors.transparent:null),)), - label: Text(map[key]!,style: TextStyle(color: select?Colors.white:null),), - selected: select, - onSelected: (bool value) => _onSelected(value, key), - ), - ); - } - - void _onSelected(bool value, String key) { - setState(() { - if (value) { - _selected.add(map[key]!); - } else { - _selected.removeWhere((name) => name == map[key]); - } - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_de_DE.json deleted file mode 100644 index 5d8b76852..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_de_DE.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "Flacher Button", - "info": "Ein flacher Button ohne Schatten, basierend auf MaterialButton. Alle Eigenschaften ähneln denen von MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlatButton-Klickereignis", - "desc": [ - "【color】: Farbe 【Color】", - "【splashColor】: Wasserwellenfarbe 【Color】", - "【child】: Untergeordnete Komponente 【Widget】", - "【textColor】: Textfarbe der untergeordneten Komponente 【Color】", - "【highlightColor】: Hervorhebungsfarbe beim Langdrücken 【Color】", - "【padding】: Innenabstand 【EdgeInsetsGeometry】", - "【onPressed】: Klickereignis 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'FlatButton wurde in Flutter 3.3 ausgemustert. Der Ersatz ist der ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_en_US.json deleted file mode 100644 index b342c431f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_en_US.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "Flat Button", - "info": "A flat button without shadows, implemented based on MaterialButton, with all properties similar to MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlatButton Click Event", - "desc": [ - "【color】: Color 【Color】", - "【splashColor】: Splash Color 【Color】", - "【child】: Child Widget 【Widget】", - "【textColor】: Text Color of Child Widget 【Color】", - "【highlightColor】: Long Press Highlight Color 【Color】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【onPressed】: Click Event 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'FlatButton was phased out in Flutter 3.3. Its successor is the ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_es_ES.json deleted file mode 100644 index 94f2a9daf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_es_ES.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "Botón Plano", - "info": "Botón plano sin sombra, implementado basado en MaterialButton, todas las propiedades son similares a MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clic de FlatButton", - "desc": [ - "【color】: Color 【Color】", - "【splashColor】: Color de la onda 【Color】", - "【child】: Widget hijo 【Widget】", - "【textColor】: Color del texto del widget hijo 【Color】", - "【highlightColor】: Color de resaltado al mantener presionado 【Color】", - "【padding】: Relleno interno 【EdgeInsetsGeometry】", - "【onPressed】: Evento de clic 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'El botón FlatButton dejó de estar disponible en Flutter 3.3. Su reemplazo es el botón ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_fr_FR.json deleted file mode 100644 index b185806c7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_fr_FR.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "Bouton plat", - "info": "Bouton plat sans ombre, basé sur MaterialButton, toutes les propriétés sont similaires à MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événement de clic de FlatButton", - "desc": [ - "【color】: Couleur 【Color】", - "【splashColor】: Couleur de l'effet de vague 【Color】", - "【child】: Composant enfant 【Widget】", - "【textColor】: Couleur du texte du composant enfant 【Color】", - "【highlightColor】: Couleur de surbrillance lors d'un appui long 【Color】", - "【padding】: Marge intérieure 【EdgeInsetsGeometry】", - "【onPressed】: Événement de clic 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Le bouton FlatButton a quitté la scène historique avec Flutter 3.3. Il est remplacé par le bouton ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_it_IT.json deleted file mode 100644 index 5b0b62b69..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_it_IT.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "Pulsante piatto", - "info": "Pulsante piatto senza ombre, implementato basandosi su MaterialButton, tutte le proprietà sono simili a MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento di clic FlatButton", - "desc": [ - "【color】: Colore 【Color】", - "【splashColor】: Colore effetto ondulazione 【Color】", - "【child】: Componente figlio 【Widget】", - "【textColor】: Colore testo componente figlio 【Color】", - "【highlightColor】: Colore evidenziazione pressione prolungata 【Color】", - "【padding】: Spaziatura interna 【EdgeInsetsGeometry】", - "【onPressed】: Evento clic 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Il pulsante FlatButton è uscito di scena con Flutter 3.3. Il suo sostituto è il pulsante ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ja_JP.json deleted file mode 100644 index 438bf3a76..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ja_JP.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "フラットボタン", - "info": "影のないフラットボタンで、MaterialButtonを基に実装されており、すべてのプロパティはMaterialButtonと類似しています。", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlatButtonクリックイベント", - "desc": [ - "【color】: 色 【Color】", - "【splashColor】: 波紋色 【Color】", - "【child】: 子コンポーネント 【Widget】", - "【textColor】: 子コンポーネントの文字色 【Color】", - "【highlightColor】: 長押しハイライト色 【Color】", - "【padding】: 内側の余白 【EdgeInsetsGeometry】", - "【onPressed】: クリックイベント 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'FlatButton ボタンは Flutter3.3 で歴史の舞台から退きました。代替は ElevatedButton ボタンです。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ko_KR.json deleted file mode 100644 index b862cd0d4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ko_KR.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "평평한 버튼", - "info": "그림자가 없는 평평한 버튼으로, MaterialButton을 기반으로 구현되었으며 모든 속성이 MaterialButton과 유사합니다.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlatButton 클릭 이벤트", - "desc": [ - "【color】: 색상 【Color】", - "【splashColor】: 물결 효과 색상 【Color】", - "【child】: 자식 위젯 【Widget】", - "【textColor】: 자식 위젯 텍스트 색상 【Color】", - "【highlightColor】: 길게 누를 때 강조 색상 【Color】", - "【padding】: 내부 여백 【EdgeInsetsGeometry】", - "【onPressed】: 클릭 이벤트 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'FlatButton 버튼은 Flutter3.3에서 더 이상 사용되지 않습니다. 대체 버튼은 ElevatedButton입니다.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_pt_PT.json deleted file mode 100644 index 2177fd125..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_pt_PT.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "Botão Plano", - "info": "Botão plano sem sombra, implementado com base no MaterialButton, todas as propriedades são semelhantes ao MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de Clique do FlatButton", - "desc": [ - "【color】: Cor 【Color】", - "【splashColor】: Cor do efeito de ondulação 【Color】", - "【child】: Componente filho 【Widget】", - "【textColor】: Cor do texto do componente filho 【Color】", - "【highlightColor】: Cor de destaque ao pressionar 【Color】", - "【padding】: Preenchimento interno 【EdgeInsetsGeometry】", - "【onPressed】: Evento de clique 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'O botão FlatButton foi descontinuado no Flutter 3.3. O substituto é o botão ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ru_RU.json deleted file mode 100644 index 1fd459f24..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ru_RU.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "Плоская кнопка", - "info": "Плоская кнопка без тени, реализованная на основе MaterialButton, все свойства аналогичны MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Событие нажатия FlatButton", - "desc": [ - "【color】: Цвет 【Color】", - "【splashColor】: Цвол водной ряби 【Color】", - "【child】: Дочерний компонент 【Widget】", - "【textColor】: Цвет текста дочернего компонента 【Color】", - "【highlightColor】: Цвет подсветки при длительном нажатии 【Color】", - "【padding】: Внутренний отступ 【EdgeInsetsGeometry】", - "【onPressed】: Событие нажатия 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Кнопка FlatButton ушла с исторической сцены в Flutter3.3. Ее заменила кнопка ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_zh-CN.json deleted file mode 100644 index acf03901c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_zh-CN.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "平按钮", - "info": "无阴影的平按钮,基于MaterialButton实现,所有属性和MaterialButton类似。", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlatButton点击事件", - "desc": [ - "【color】: 颜色 【Color】", - "【splashColor】: 水波纹颜色 【Color】", - "【child】: 子组件 【Widget】", - "【textColor】: 子组件文字颜色 【Color】", - "【highlightColor】: 长按高亮色 【Color】", - "【padding】: 内边距 【EdgeInsetsGeometry】", - "【onPressed】: 点击事件 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'FlatButton 按钮于 Flutter3.3 退出历史舞台。取代者为 ElevatedButton 按钮。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/node1_base.dart deleted file mode 100644 index 096d961d4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/node1_base.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class CustomFlatButton extends StatelessWidget { - const CustomFlatButton({Key? key}) : super(key: key); - - final String info = - 'FlatButton 按钮于 Flutter3.3 退出历史舞台。取代者为 ElevatedButton 按钮。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_de_DE.json deleted file mode 100644 index c88bf31ef..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_de_DE.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "Schwebende Schaltfläche", - "info": "Schwebende Schaltfläche, die normalerweise in Scaffold verwendet wird und an einer bestimmten Position platziert werden kann. Kann ein Unterelement enthalten, empfängt Klicks, und kann Farbe, Form usw. definieren.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FloatingActionButton Klickereignis", - "desc": [ - "【child】: Unterelement 【Widget】", - "【tooltip】: Tooltip-Text bei langem Drücken 【String】", - "【backgroundColor】: Hintergrundfarbe 【Color】", - "【foregroundColor】: Vordergrundfarbe 【Color】", - "【elevation】: Schattentiefe 【double】", - "【onPressed】: Klickereignis 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "mini Eigenschaft", - "desc": [ - "【mini】: Ist es mini 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "shape Eigenschaft", - "desc": [ - "【shape】: Form 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_en_US.json deleted file mode 100644 index 2da1d5461..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_en_US.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "Floating Button", - "info": "Floating button, generally used in Scaffold, can be placed in a specific position. It can contain a child widget, receive clicks, and define colors, shapes, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FloatingActionButton Click Event", - "desc": [ - "【child】: Child widget 【Widget】", - "【tooltip】: Tooltip text when long pressed 【String】", - "【backgroundColor】: Background color 【Color】", - "【foregroundColor】: Foreground color 【Color】", - "【elevation】: Elevation 【double】", - "【onPressed】: Click event 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "mini Property", - "desc": [ - "【mini】: Whether it is mini 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "shape Property", - "desc": [ - "【shape】: Shape 【ShapeBorder】" - ] -} - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_es_ES.json deleted file mode 100644 index 4b951eaba..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_es_ES.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "Botón flotante", - "info": "Botón flotante, generalmente utilizado en Scaffold, se puede colocar en una posición específica. Puede contener un componente secundario, recibir clics, definir colores, formas, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clic de FloatingActionButton", - "desc": [ - "【child】: Componente secundario 【Widget】", - "【tooltip】: Texto de sugerencia al mantener presionado 【String】", - "【backgroundColor】: Color de fondo 【Color】", - "【foregroundColor】: Color de primer plano 【Color】", - "【elevation】: Profundidad de sombra 【double】", - "【onPressed】: Evento de clic 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "Propiedad mini", - "desc": [ - "【mini】: Si es mini 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Propiedad shape", - "desc": [ - "【shape】: Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_fr_FR.json deleted file mode 100644 index b24c5798d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_fr_FR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "Bouton flottant", - "info": "Le bouton flottant, généralement utilisé dans Scaffold, peut être placé à un endroit spécifique. Il peut contenir un composant enfant, recevoir des clics, et définir des couleurs, des formes, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événement de clic du FloatingActionButton", - "desc": [ - "【child】: Composant enfant 【Widget】", - "【tooltip】: Texte d'aide lors d'un appui long 【String】", - "【backgroundColor】: Couleur de fond 【Color】", - "【foregroundColor】: Couleur de premier plan 【Color】", - "【elevation】: Profondeur de l'ombre 【double】", - "【onPressed】: Événement de clic 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "Propriété mini", - "desc": [ - "【mini】: Est-ce un mini bouton 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Propriété de forme", - "desc": [ - "【shape】: Forme 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_it_IT.json deleted file mode 100644 index 8df3b178a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_it_IT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "Pulsante galleggiante", - "info": "Il pulsante galleggiante, generalmente utilizzato in Scaffold, può essere posizionato in una posizione specifica. Può contenere un componente figlio, ricevere clic, definire colori, forme, ecc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento di clic di FloatingActionButton", - "desc": [ - "【child】: Componente figlio 【Widget】", - "【tooltip】: Testo di suggerimento durante la pressione prolungata 【String】", - "【backgroundColor】: Colore di sfondo 【Color】", - "【foregroundColor】: Colore di primo piano 【Color】", - "【elevation】: Profondità dell'ombra 【double】", - "【onPressed】: Evento di clic 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "Proprietà mini", - "desc": [ - "【mini】: Se è mini 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Proprietà shape", - "desc": [ - "【shape】: Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ja_JP.json deleted file mode 100644 index 8155c5657..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ja_JP.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "フローティングボタン", - "info": "フローティングボタンは、一般にScaffold内で使用され、特定の位置に配置できます。子コンポーネントを収容し、クリックを受け取り、色や形状などを定義できます。", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FloatingActionButtonクリックイベント", - "desc": [ - "【child】: 子コンポーネント 【Widget】", - "【tooltip】: 長押し時のヒントテキスト 【String】", - "【backgroundColor】: 背景色 【Color】", - "【foregroundColor】: 前景色 【Color】", - "【elevation】: 影の深さ 【double】", - "【onPressed】: クリックイベント 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "miniプロパティ", - "desc": [ - "【mini】: ミニかどうか 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "shapeプロパティ", - "desc": [ - "【shape】: 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ko_KR.json deleted file mode 100644 index 4626b1fdd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ko_KR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "플로팅 버튼", - "info": "플로팅 버튼은 일반적으로 Scaffold에서 사용되며 특정 위치에 배치할 수 있습니다. 하나의 자식 위젯을 포함할 수 있으며, 클릭 이벤트를 받고 색상, 모양 등을 정의할 수 있습니다.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FloatingActionButton 클릭 이벤트", - "desc": [ - "【child】: 자식 위젯 【Widget】", - "【tooltip】: 길게 누를 때 표시되는 텍스트 【String】", - "【backgroundColor】: 배경색 【Color】", - "【foregroundColor】: 전경색 【Color】", - "【elevation】: 그림자 깊이 【double】", - "【onPressed】: 클릭 이벤트 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "mini 속성", - "desc": [ - "【mini】: 미니 여부 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "shape 속성", - "desc": [ - "【shape】: 모양 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_pt_PT.json deleted file mode 100644 index c49411f06..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_pt_PT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "Botão Flutuante", - "info": "Botão flutuante, geralmente usado em Scaffold, pode ser colocado em uma posição específica. Pode conter um componente filho, receber cliques, e definir cor, forma, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clique do FloatingActionButton", - "desc": [ - "【child】: Componente filho 【Widget】", - "【tooltip】: Texto de dica ao pressionar 【String】", - "【backgroundColor】: Cor de fundo 【Color】", - "【foregroundColor】: Cor de frente 【Color】", - "【elevation】: Profundidade da sombra 【double】", - "【onPressed】: Evento de clique 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "Propriedade mini", - "desc": [ - "【mini】: É mini 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Propriedade shape", - "desc": [ - "【shape】: Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ru_RU.json deleted file mode 100644 index e60f0cb23..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ru_RU.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "Плавающая кнопка", - "info": "Плавающая кнопка, обычно используется в Scaffold, может быть размещена в определенном месте. Может содержать один дочерний компонент, принимает клики, может определять цвет, форму и т.д.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Событие нажатия FloatingActionButton", - "desc": [ - "【child】: Дочерний компонент 【Widget】", - "【tooltip】: Текст подсказки при долгом нажатии 【String】", - "【backgroundColor】: Цвет фона 【Color】", - "【foregroundColor】: Цвет переднего плана 【Color】", - "【elevation】: Глубина тени 【double】", - "【onPressed】: Событие нажатия 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "Свойство mini", - "desc": [ - "【mini】: Является ли мини 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Свойство shape", - "desc": [ - "【shape】: Форма 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_zh-CN.json deleted file mode 100644 index 71c3705ec..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_zh-CN.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "浮动按钮", - "info": "浮动按钮,一般用于Scaffold中,可摆放在特定位置。可盛放一个子组件,接收点击、可定义颜色、形状等。", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FloatingActionButton点击事件", - "desc": [ - "【child】: 子组件 【Widget】", - "【tooltip】: 长按时提示文字 【String】", - "【backgroundColor】: 背景色 【Color】", - "【foregroundColor】: 前景色 【Color】", - "【elevation】: 影深 【double】", - "【onPressed】: 点击事件 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "mini属性", - "desc": [ - "【mini】: 是否是迷你 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "shape属性", - "desc": [ - "【shape】: 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node1_base.dart deleted file mode 100644 index e55a46787..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node1_base.dart +++ /dev/null @@ -1,29 +0,0 @@ -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; - -class CustomFAB extends StatelessWidget { - const CustomFAB({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Map data = { - Colors.red: Icons.add, - Colors.blue: Icons.bluetooth, - Colors.green: Icons.android, - }; - return Wrap( - spacing: 20, - children: data.keys - .map((e) => FloatingActionButton( - heroTag: e.toString()+"a", - onPressed: () {}, - backgroundColor: e, - foregroundColor: Colors.white, - child: Icon(data[e]), - tooltip: "android", - elevation: 5, //z-阴影盖度 - )).toList()); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node2_mini.dart b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node2_mini.dart deleted file mode 100644 index 0478fa291..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node2_mini.dart +++ /dev/null @@ -1,31 +0,0 @@ -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; - -class MiniFAB extends StatelessWidget { - const MiniFAB({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Map data = { - Colors.red: Icons.add, - Colors.blue: Icons.bluetooth, - Colors.green: Icons.android, - }; - return Wrap( - spacing: 20, - children: data.keys - .map((e) => FloatingActionButton( - heroTag: e.toString()+"b", - onPressed: () {}, - backgroundColor: e, - mini: true, - foregroundColor: Colors.white, - child: Icon(data[e]), - tooltip: "android", - elevation: 5, //z-阴影盖度 - )).toList()); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node3_shape.dart b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node3_shape.dart deleted file mode 100644 index 4aa0083cf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node3_shape.dart +++ /dev/null @@ -1,57 +0,0 @@ - - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - - -import 'dart:math'; - -import 'package:flutter/material.dart'; -import 'package:widgets/utils/pather.dart'; - -class ShapeFAB extends StatelessWidget { - const ShapeFAB({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Map data = { - Colors.red: Icons.add, - Colors.blue: Icons.bluetooth, - Colors.green: Icons.android, - }; - return Wrap( - spacing: 20, - children: data.keys - .map((e) => FloatingActionButton( - heroTag: e.toString()+"c", - onPressed: () {}, - backgroundColor: e, - shape: StarBorder(), - foregroundColor: Colors.white, - child: Icon(data[e]), - tooltip: "android", - elevation: 5, - )).toList()); - } -} - -/// 边线形状类 -class StarBorder extends ShapeBorder { - @override - EdgeInsetsGeometry get dimensions => EdgeInsets.zero; - - @override - Path getInnerPath(Rect rect, {TextDirection? textDirection}) => Path(); - - @override - Path getOuterPath(Rect rect, {TextDirection? textDirection}) { - return Pather.create.nStarPath(20, 25, 25 * cos((360 / 9 / 2) * pi / 180), - dx: rect.height / 2, dy: rect.width / 2); - } - - @override - void paint(Canvas canvas, Rect rect, {TextDirection? textDirection}) {} - - @override - ShapeBorder scale(double t) => this; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_de_DE.json deleted file mode 100644 index b16aa1cdb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Flutter-Logo", - "info": "Wird verwendet, um die Flutter-Logo-Komponente anzuzeigen. Kann Farbe, Größe, Anzeigemodus usw. definieren. Es ist eine sehr einfache Komponente.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Wird verwendet, um ein FlutterLogo anzuzeigen", - "desc": [ - "【size】 : Größe 【double】", - "【colors】: Farbe 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "Stil wird verwendet, um Text anzuzeigen", - "desc": [ - "【style】 : Stil-3 Arten von Aufzählungen 【FlutterLogoStyle】", - "【textColor】: Textfarbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_en_US.json deleted file mode 100644 index df16eb502..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Flutter Icon", - "info": "Used to display the Flutter icon component. You can define color, size, display mode, and other information. It is a very simple component.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Used to display a FlutterLogo", - "desc": [ - "【size】 : Size 【double】", - "【colors】: Color 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "Style used to display text", - "desc": [ - "【style】 : Style - 3 types of enumeration 【FlutterLogoStyle】", - "【textColor】: Text color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_es_ES.json deleted file mode 100644 index eeb38b9f1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Logotipo de Flutter", - "info": "Se utiliza para mostrar el componente del logotipo de Flutter. Puede definir información como el color, el tamaño, el modo de visualización, etc. Es un componente muy simple.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Se utiliza para mostrar un logotipo de Flutter", - "desc": [ - "【size】 : Tamaño 【double】", - "【colors】: Color 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "Estilo utilizado para mostrar texto", - "desc": [ - "【style】 : Estilo - 3 tipos de enumeración 【FlutterLogoStyle】", - "【textColor】: Color del texto 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_fr_FR.json deleted file mode 100644 index 2f5331ac3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Icône Flutter", - "info": "Utilisé pour afficher le composant d'icône Flutter. Permet de définir des informations telles que la couleur, la taille, le mode d'affichage, etc. C'est un composant très simple.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisé pour afficher un FlutterLogo", - "desc": [ - "【size】 : Taille 【double】", - "【colors】: Couleur 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "Style utilisé pour afficher du texte", - "desc": [ - "【style】 : Style - 3 types d'énumération 【FlutterLogoStyle】", - "【textColor】: Couleur du texte 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_it_IT.json deleted file mode 100644 index 808ae853b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Icona Flutter", - "info": "Utilizzato per mostrare il componente dell'icona Flutter. È possibile definire colore, dimensioni, modalità di visualizzazione, ecc. È un componente molto semplice.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzato per visualizzare un FlutterLogo", - "desc": [ - "【size】 : Dimensione 【double】", - "【colors】: Colore 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "Stile utilizzato per visualizzare il testo", - "desc": [ - "【style】 : Stile - 3 tipi di enumerazione 【FlutterLogoStyle】", - "【textColor】: Colore del testo 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ja_JP.json deleted file mode 100644 index 742935419..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Flutterアイコン", - "info": "Flutterアイコンコンポーネントを表示するために使用されます。色、サイズ、表示モードなどの情報を定義でき、非常にシンプルなコンポーネントです。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlutterLogoを表示するために使用", - "desc": [ - "【size】 : サイズ 【double】", - "【colors】: 色 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "テキストを表示するためのスタイル", - "desc": [ - "【style】 : スタイル-3種類の列挙 【FlutterLogoStyle】", - "【textColor】: テキストの色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ko_KR.json deleted file mode 100644 index b9b2f8db2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Flutter 로고", - "info": "Flutter 로고 컴포넌트를 표시하는 데 사용됩니다. 색상, 크기, 표시 모드 등을 정의할 수 있는 매우 간단한 컴포넌트입니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlutterLogo를 표시하는 데 사용", - "desc": [ - "【size】 : 크기 【double】", - "【colors】: 색상 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "텍스트 표시를 위한 스타일", - "desc": [ - "【style】 : 스타일-3가지 열거 【FlutterLogoStyle】", - "【textColor】: 텍스트 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_pt_PT.json deleted file mode 100644 index 74bd56ece..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Ícone do Flutter", - "info": "Usado para exibir o componente de ícone do Flutter. Pode definir cor, tamanho, modo de exibição e outras informações, é um componente muito simples.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Usado para exibir um FlutterLogo", - "desc": [ - "【size】 : Tamanho 【double】", - "【colors】: Cor 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "Estilo usado para exibir texto", - "desc": [ - "【style】 : Estilo - 3 tipos de enumeração 【FlutterLogoStyle】", - "【textColor】: Cor do texto 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ru_RU.json deleted file mode 100644 index d40a8818f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Логотип Flutter", - "info": "Используется для отображения компонента логотипа Flutter. Можно определить цвет, размер, режим отображения и другую информацию. Это очень простой компонент.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Используется для отображения логотипа Flutter", - "desc": [ - "【size】 : Размер 【double】", - "【colors】: Цвет 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "Стиль для отображения текста", - "desc": [ - "【style】 : Стиль-3 типа перечисления 【FlutterLogoStyle】", - "【textColor】: Цвет текста 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_zh-CN.json deleted file mode 100644 index 10eea5bb0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Flutter图标", - "info": "用于展示Flutter图标组件。可定义颜色、尺寸、展示模式等信息,是一个非常简单的组件。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "用于显示一个FlutterLogo", - "desc": [ - "【size】 : 大小 【double】", - "【colors】: 颜色 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "样式用于显示文字", - "desc": [ - "【style】 : 样式-3种枚举 【FlutterLogoStyle】", - "【textColor】: 文字颜色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/node1_base.dart deleted file mode 100644 index aa5bec8da..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/node1_base.dart +++ /dev/null @@ -1,28 +0,0 @@ - - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; - -class CustomFlutterLogo extends StatelessWidget { - const CustomFlutterLogo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - - Map data = { - Colors.blue:50.0, - Colors.red:60.0, - Colors.green:70.0, - Colors.yellow:80.0, - }; - return Wrap( - children: data.keys - .map((e) => FlutterLogo( - size: data[e], - textColor: e, - )).toList(), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/node2_style.dart b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/node2_style.dart deleted file mode 100644 index ace614eb5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/node2_style.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class FlutterLogoWithText extends StatelessWidget { - const FlutterLogoWithText({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - final Map data = { - FlutterLogoStyle.horizontal: Colors.blue, - FlutterLogoStyle.markOnly: Colors.red, - FlutterLogoStyle.stacked: Colors.green, - }; - - return Wrap( - spacing: 20, - children: data.keys - .map((FlutterLogoStyle style) => FlutterLogo( - size: 80, - style: style, - textColor: data[style]!, - )) - .toList(), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_de_DE.json deleted file mode 100644 index 40f67dd96..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_de_DE.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "Gesten-Erkenner", - "info": "Komponente zur Erkennung von Gestenereignissen, kann Klicks, lange Drücke, Doppelklicks, Drücken, Loslassen, Bewegen usw. erkennen und kann Informationen über die Berührungspunkte abrufen. Ein unverzichtbares Werkzeug für zu Hause und unterwegs.", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Ereignisse von GestureDetector", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onTap】 : Klick-Ereignis 【Function()】", - "【onDoubleTap】 : Doppelklick-Ereignis 【GestureTapCallback】", - "【onLongPress】 : Langer Druck-Ereignis 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "Details von GestureDetector", - "desc": [ - "【onTapDown】 : Rückruf beim Drücken 【GestureTapDownCallback】", - "【onTapUp】 : Rückruf beim Loslassen 【GestureTapUpCallback】", - "【onTapCancel】 : Klick abbrechen 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "Pan-Ereignisse von GestureDetector", - "desc": [ - "【onPanDown】 : Rückruf beim Drücken 【GestureDragDownCallback】", - "【onPanEnd】 : Ende des Ziehens 【GestureDragEndCallback】", - "【onPanStart】 : Beginn des Ziehens 【GestureDragStartCallback】", - "【onPanUpdate】 : Aktualisierung des Ziehens 【GestureDragUpdateCallback】", - "【onPanCancel】 : Ziehen abbrechen 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_en_US.json deleted file mode 100644 index 33b508da1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_en_US.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "Gesture Detector", - "info": "A detector for component gesture events, capable of accepting events such as tap, long press, double tap, press, release, move, etc., and can obtain touch information. An essential component for home and travel.", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Events of GestureDetector", - "desc": [ - "【child】 : Child component 【Widget】", - "【onTap】 : Tap event 【Function()】", - "【onDoubleTap】 : Double tap event 【GestureTapCallback】", - "【onLongPress】 : Long press event 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "Details of GestureDetector", - "desc": [ - "【onTapDown】 : Press down callback 【GestureTapDownCallback】", - "【onTapUp】 : Tap release callback 【GestureTapUpCallback】", - "【onTapCancel】 : Tap cancel 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "Pan Events of GestureDetector", - "desc": [ - "【onPanDown】 : Press down callback 【GestureDragDownCallback】", - "【onPanEnd】 : Drag end 【GestureDragEndCallback】", - "【onPanStart】 : Drag start 【GestureDragStartCallback】", - "【onPanUpdate】 : Drag update 【GestureDragUpdateCallback】", - "【onPanCancel】 : Drag cancel 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_es_ES.json deleted file mode 100644 index 25e66c3af..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_es_ES.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "Detector de gestos", - "info": "Detector de eventos de gestos del componente, puede aceptar eventos como clics, pulsaciones largas, doble clic, presionar, soltar, mover, etc., y puede obtener información de los puntos de contacto, un componente esencial para viajes y hogar.", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos básicos de GestureDetector", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onTap】 : Evento de clic 【Function()】", - "【onDoubleTap】 : Evento de doble clic 【GestureTapCallback】", - "【onLongPress】 : Evento de pulsación larga 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "Información detallada de GestureDetector", - "desc": [ - "【onTapDown】 : Callback de presionar 【GestureTapDownCallback】", - "【onTapUp】 : Callback de levantar el clic 【GestureTapUpCallback】", - "【onTapCancel】 : Cancelar clic 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "Eventos Pan de GestureDetector", - "desc": [ - "【onPanDown】 : Callback de presionar 【GestureDragDownCallback】", - "【onPanEnd】 : Fin de arrastre 【GestureDragEndCallback】", - "【onPanStart】 : Inicio de arrastre 【GestureDragStartCallback】", - "【onPanUpdate】 : Actualización de arrastre 【GestureDragUpdateCallback】", - "【onPanCancel】 : Cancelar arrastre 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_fr_FR.json deleted file mode 100644 index 1d3b40aba..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_fr_FR.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "Détecteur de gestes", - "info": "Détecteur d'événements gestuels pour les composants, peut accepter des événements tels que le clic, le maintien, le double-clic, l'appui, le relâchement, le déplacement, et peut obtenir des informations sur les points de contact, un composant essentiel pour les voyages à domicile.", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événements de base de GestureDetector", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onTap】 : Événement de clic 【Function()】", - "【onDoubleTap】 : Événement de double-clic 【GestureTapCallback】", - "【onLongPress】 : Événement de maintien 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "Informations détaillées de GestureDetector", - "desc": [ - "【onTapDown】 : Rappel d'appui 【GestureTapDownCallback】", - "【onTapUp】 : Rappel de relâchement 【GestureTapUpCallback】", - "【onTapCancel】 : Annulation de clic 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "Événements Pan de GestureDetector", - "desc": [ - "【onPanDown】 : Rappel d'appui 【GestureDragDownCallback】", - "【onPanEnd】 : Fin de glissement 【GestureDragEndCallback】", - "【onPanStart】 : Début de glissement 【GestureDragStartCallback】", - "【onPanUpdate】 : Mise à jour de glissement 【GestureDragUpdateCallback】", - "【onPanCancel】 : Annulation de glissement 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_it_IT.json deleted file mode 100644 index 2b481e789..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_it_IT.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "Rilevatore di gesti", - "info": "Rilevatore di eventi gestuali del componente, può accettare eventi come clic, pressione lunga, doppio clic, premuto, rilasciato, spostamento, ecc., e può ottenere informazioni sui punti di contatto, un componente essenziale per viaggi e casa.", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventi di base di GestureDetector", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onTap】 : Evento di clic 【Function()】", - "【onDoubleTap】 : Evento di doppio clic 【GestureTapCallback】", - "【onLongPress】 : Evento di pressione lunga 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "Dettagli di GestureDetector", - "desc": [ - "【onTapDown】 : Callback di pressione 【GestureTapDownCallback】", - "【onTapUp】 : Callback di rilascio del clic 【GestureTapUpCallback】", - "【onTapCancel】 : Annullamento del clic 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "Eventi Pan di GestureDetector", - "desc": [ - "【onPanDown】 : Callback di pressione 【GestureDragDownCallback】", - "【onPanEnd】 : Fine del trascinamento 【GestureDragEndCallback】", - "【onPanStart】 : Inizio del trascinamento 【GestureDragStartCallback】", - "【onPanUpdate】 : Aggiornamento del trascinamento 【GestureDragUpdateCallback】", - "【onPanCancel】 : Annullamento del trascinamento 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ja_JP.json deleted file mode 100644 index 4f3f9f408..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ja_JP.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "ジェスチャー検出器", - "info": "コンポーネントのジェスチャーイベントを検出するデテクターで、クリック、長押し、ダブルクリック、押下、解放、移動などのイベントを受け取り、タッチポイントの情報を取得できます。家庭や旅行に必須のコンポーネントです。", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GestureDetector基本イベント", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onTap】 : クリックイベント 【Function()】", - "【onDoubleTap】 : ダブルクリックイベント 【GestureTapCallback】", - "【onLongPress】 : 長押しイベント 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "GestureDetector詳細情報", - "desc": [ - "【onTapDown】 : 押下コールバック 【GestureTapDownCallback】", - "【onTapUp】 : クリック解放コールバック 【GestureTapUpCallback】", - "【onTapCancel】 : クリックキャンセル 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "GestureDetectorのPanイベント", - "desc": [ - "【onPanDown】 : 押下コールバック 【GestureDragDownCallback】", - "【onPanEnd】 : ドラッグ終了 【GestureDragEndCallback】", - "【onPanStart】 : ドラッグ開始 【GestureDragStartCallback】", - "【onPanUpdate】 : ドラッグ更新 【GestureDragUpdateCallback】", - "【onPanCancel】 : ドラッグキャンセル 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ko_KR.json deleted file mode 100644 index 520768ecd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ko_KR.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "제스처 감지기", - "info": "컴포넌트 제스처 이벤트를 감지하는 장치로, 클릭, 길게 누르기, 더블 클릭, 누르기, 떼기, 이동 등의 이벤트를 받아들일 수 있으며, 접촉점 정보를 얻을 수 있습니다. 집에서 여행할 때 필수 컴포넌트입니다.", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GestureDetector 기본 이벤트", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【onTap】 : 클릭 이벤트 【Function()】", - "【onDoubleTap】 : 더블 클릭 이벤트 【GestureTapCallback】", - "【onLongPress】 : 길게 누르기 이벤트 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "GestureDetector 상세 정보", - "desc": [ - "【onTapDown】 : 누르기 콜백 【GestureTapDownCallback】", - "【onTapUp】 : 클릭 떼기 콜백 【GestureTapUpCallback】", - "【onTapCancel】 : 클릭 취소 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "GestureDetector의 Pan 이벤트", - "desc": [ - "【onPanDown】 : 누르기 콜백 【GestureDragDownCallback】", - "【onPanEnd】 : 드래그 종료 【GestureDragEndCallback】", - "【onPanStart】 : 드래그 시작 【GestureDragStartCallback】", - "【onPanUpdate】 : 드래그 업데이트 【GestureDragUpdateCallback】", - "【onPanCancel】 : 드래그 취소 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_pt_PT.json deleted file mode 100644 index f53b6704f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_pt_PT.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "Detector de Gestos", - "info": "Detector de eventos de gestos do componente, pode aceitar eventos como clique, pressionamento longo, duplo clique, pressionar, soltar, mover, etc., e pode obter informações de toque, um componente essencial para viagens e uso doméstico.", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos Básicos do GestureDetector", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onTap】 : Evento de clique 【Function()】", - "【onDoubleTap】 : Evento de duplo clique 【GestureTapCallback】", - "【onLongPress】 : Evento de pressionamento longo 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "Detalhes do GestureDetector", - "desc": [ - "【onTapDown】 : Callback de pressionar 【GestureTapDownCallback】", - "【onTapUp】 : Callback de soltar o clique 【GestureTapUpCallback】", - "【onTapCancel】 : Cancelamento do clique 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "Eventos de Pan do GestureDetector", - "desc": [ - "【onPanDown】 : Callback de pressionar 【GestureDragDownCallback】", - "【onPanEnd】 : Fim do arrasto 【GestureDragEndCallback】", - "【onPanStart】 : Início do arrasto 【GestureDragStartCallback】", - "【onPanUpdate】 : Atualização do arrasto 【GestureDragUpdateCallback】", - "【onPanCancel】 : Cancelamento do arrasto 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ru_RU.json deleted file mode 100644 index 0ee8016d3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ru_RU.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "Детектор жестов", - "info": "Детектор событий жестов компонента, который может принимать события, такие как нажатие, долгое нажатие, двойное нажатие, нажатие, отпускание, перемещение и т.д., а также может получать информацию о точках касания. Незаменимый компонент для домашнего использования и путешествий.", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основные события GestureDetector", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onTap】 : Событие нажатия 【Function()】", - "【onDoubleTap】 : Событие двойного нажатия 【GestureTapCallback】", - "【onLongPress】 : Событие долгого нажатия 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "Детальная информация GestureDetector", - "desc": [ - "【onTapDown】 : Обратный вызов нажатия 【GestureTapDownCallback】", - "【onTapUp】 : Обратный вызов отпускания нажатия 【GestureTapUpCallback】", - "【onTapCancel】 : Отмена нажатия 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "События Pan GestureDetector", - "desc": [ - "【onPanDown】 : Обратный вызов нажатия 【GestureDragDownCallback】", - "【onPanEnd】 : Завершение перетаскивания 【GestureDragEndCallback】", - "【onPanStart】 : Начало перетаскивания 【GestureDragStartCallback】", - "【onPanUpdate】 : Обновление перетаскивания 【GestureDragUpdateCallback】", - "【onPanCancel】 : Отмена перетаскивания 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_zh-CN.json deleted file mode 100644 index 483a6bd6b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_zh-CN.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "手势监听器", - "info": "组件手势事件的检测器,可接受点击、长按、双击,按下、松开、移动等事件,并可以获取触点信息,居家旅行必备组件。", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GestureDetector基本事件", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onTap】 : 点击事件 【Function()】", - "【onDoubleTap】 : 双击事件 【GestureTapCallback】", - "【onLongPress】 : 长按事件 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "GestureDetector详情信息", - "desc": [ - "【onTapDown】 : 按下回调 【GestureTapDownCallback】", - "【onTapUp】 : 点击抬起回调 【GestureTapUpCallback】", - "【onTapCancel】 : 点击取消 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "GestureDetector的Pan事件", - "desc": [ - "【onPanDown】 : 按下回调 【GestureDragDownCallback】", - "【onPanEnd】 : 拖动结束 【GestureDragEndCallback】", - "【onPanStart】 : 开始拖动 【GestureDragStartCallback】", - "【onPanUpdate】 : 拖动更新 【GestureDragUpdateCallback】", - "【onPanCancel】 : 拖动取消 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node1_base.dart deleted file mode 100644 index b9f20e61b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node1_base.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - -class CustomGestureDetector extends StatefulWidget { - const CustomGestureDetector({Key? key}) : super(key: key); - - @override - _CustomGestureDetectorState createState() => _CustomGestureDetectorState(); -} - -class _CustomGestureDetectorState extends State { - String _info = ''; - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => setState(() => _info = 'onTap'), - onDoubleTap: () => setState(() => _info = 'onDoubleTap'), - onLongPress: () => setState(() => _info = 'onLongPress'), - child: Container( - alignment: Alignment.center, - width: 300, - height: 300 * 0.4, - color: Colors.grey.withAlpha(33), - child: Text( - _info, - style: const TextStyle(fontSize: 18, color: Colors.blue), - ), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node2_tap.dart b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node2_tap.dart deleted file mode 100644 index c9d42241b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node2_tap.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class TapGestureDetector extends StatefulWidget { - const TapGestureDetector({Key? key}) : super(key: key); - - @override - _TapGestureDetectorState createState() => _TapGestureDetectorState(); -} - -class _TapGestureDetectorState extends State { - String _info = ''; - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTapDown: (detail) => setState(() => _info = - 'onTapDown:\n相对落点:${detail.localPosition}\n绝对落点:${detail.globalPosition}'), - onTapUp: (detail) => setState(() => _info = - 'onTapUp:\n相对落点:${detail.localPosition}\n绝对落点:${detail.globalPosition}'), - onTapCancel: () => setState(() => _info = 'onTapCancel'), - child: Container( - alignment: Alignment.center, - width: 300, - height: 300 * 0.618, - color: Colors.grey.withAlpha(33), - child: Text( - _info, - style: const TextStyle(fontSize: 18, color: Colors.blue), - ), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node3_pan.dart b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node3_pan.dart deleted file mode 100644 index 34558bb37..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node3_pan.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class PanGestureDetector extends StatefulWidget { - const PanGestureDetector({Key? key}) : super(key: key); - - @override - _PanGestureDetectorState createState() => _PanGestureDetectorState(); -} - -class _PanGestureDetectorState extends State { - String _info = ''; - - @override - Widget build(BuildContext context) { - return GestureDetector( - onPanDown: (detail) => setState(() => _info = - 'onPanDown:\n相对落点:${detail.localPosition}\n绝对落点:${detail.globalPosition}'), - onPanEnd: (detail) => setState(() => _info = - 'onPanEnd:\n初速度:${detail.primaryVelocity}\n最终速度:${detail.velocity}'), - onPanUpdate: (detail) => setState(() => _info = - 'onPanUpdate:\n相对落点:${detail.localPosition}\n绝对落点:${detail.globalPosition}'), - onPanStart: (detail) => setState(() => _info = - 'onPanStart:\n相对落点:${detail.localPosition}\n绝对落点:${detail.globalPosition}'), - onPanCancel: () => setState(() => _info = 'onTapCancel'), - child: SingleChildScrollView( - child: Container( - alignment: Alignment.center, - width: 300, - height: 300 * 0.618, - color: Colors.grey.withAlpha(33), - child: Text( - _info, - style: const TextStyle(fontSize: 18, color: Colors.blue), - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_de_DE.json deleted file mode 100644 index 5bc18b0ff..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_de_DE.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "Rasterlinien-Komponente", - "info": "Kann eine Komponente aufnehmen und ein Raster darauf zeichnen. Eigenschaften wie Farbe, Linienstärke, Abstand usw. können angegeben werden.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridPager Grundlegende Eigenschaften", - "desc": [ - "【child】: Untergeordnete Komponente 【Widget】", - "【color】: Farbe 【Color】", - "【interval】: Seitenlänge des kleinen Blocks 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "GridPager Unterteilung", - "desc": [ - "【child】: Untergeordnete Komponente 【Widget】", - "【color】: Farbe 【Color】", - "【subdivisions】: Anzahl der Unterblöcke im kleinen Block 【int】", - "【divisions】: Anzahl der Unterteilungen der Unterblöcke im kleinen Block 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_en_US.json deleted file mode 100644 index 6b1cffeec..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_en_US.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "Grid Line Component", - "info": "Can contain a component and draw a grid on it. Properties such as color, line width, spacing, etc., can be specified.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridPager Basic Properties", - "desc": [ - "【child】: Child component 【Widget】", - "【color】: Color 【Color】", - "【interval】: Small block side length 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "GridPager Subdivision", - "desc": [ - "【child】: Child component 【Widget】", - "【color】: Color 【Color】", - "【subdivisions】: Number of sub-blocks in a small block 【int】", - "【divisions】: Number of subdivisions of sub-blocks in a small block 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_es_ES.json deleted file mode 100644 index 82a72db59..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_es_ES.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "Componente de líneas de cuadrícula", - "info": "Puede contener un componente y dibujar una cuadrícula en él. Se pueden especificar propiedades como el color, el ancho de la línea, el espaciado, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propiedades básicas de GridPager", - "desc": [ - "【child】: Componente hijo 【Widget】", - "【color】: Color 【Color】", - "【interval】: Longitud del lado del bloque pequeño 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "Subdivisión de GridPager", - "desc": [ - "【child】: Componente hijo 【Widget】", - "【color】: Color 【Color】", - "【subdivisions】: Número de subbloques en el bloque pequeño 【int】", - "【divisions】: Número de divisiones de los subbloques en el bloque pequeño 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_fr_FR.json deleted file mode 100644 index 04f0e9f20..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_fr_FR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "Composant de grille", - "info": "Peut contenir un composant et dessiner une grille dessus. Peut spécifier des propriétés telles que la couleur, l'épaisseur de la ligne, l'espacement, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propriétés de base de GridPager", - "desc": [ - "【child】: Composant enfant 【Widget】", - "【color】: Couleur 【Color】", - "【interval】: Longueur du côté d'un petit bloc 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "Subdivision de GridPager", - "desc": [ - "【child】: Composant enfant 【Widget】", - "【color】: Couleur 【Color】", - "【subdivisions】: Nombre de sous-blocs dans un petit bloc 【int】", - "【divisions】: Nombre de subdivisions des sous-blocs dans un petit bloc 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_it_IT.json deleted file mode 100644 index 34edfbc1c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_it_IT.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "Componente Griglia", - "info": "Può contenere un componente e disegnare una griglia su di esso. È possibile specificare proprietà come colore, spessore della linea, spaziatura, ecc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Proprietà Base di GridPager", - "desc": [ - "【child】: Componente Figlio 【Widget】", - "【color】: Colore 【Color】", - "【interval】: Lunghezza del lato del blocco 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "Suddivisione di GridPager", - "desc": [ - "【child】: Componente Figlio 【Widget】", - "【color】: Colore 【Color】", - "【subdivisions】: Numero di sotto-blocchi in un blocco 【int】", - "【divisions】: Numero di suddivisioni dei sotto-blocchi in un blocco 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ja_JP.json deleted file mode 100644 index 24f5b37d7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ja_JP.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "グリッド線コンポーネント", - "info": "1つのコンポーネントを収容し、その上にグリッドを描画します。色、線幅、間隔などの属性を指定できます。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridPager 基本属性", - "desc": [ - "【child】: 子コンポーネント 【Widget】", - "【color】: 色 【Color】", - "【interval】: 小片の辺の長さ 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "GridPager 再分割", - "desc": [ - "【child】: 子コンポーネント 【Widget】", - "【color】: 色 【Color】", - "【subdivisions】: 小片中の中片の数 【int】", - "【divisions】: 小片中の中片の分割数 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ko_KR.json deleted file mode 100644 index a961488c0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ko_KR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "그리드 라인 컴포넌트", - "info": "하나의 컴포넌트를 수용할 수 있으며, 그 위에 그리드를 그립니다. 색상, 선 두께, 간격 등의 속성을 지정할 수 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridPager 기본 속성", - "desc": [ - "【child】: 자식 컴포넌트 【Widget】", - "【color】: 색상 【Color】", - "【interval】: 작은 블록의 변 길이 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "GridPager 재분할", - "desc": [ - "【child】: 자식 컴포넌트 【Widget】", - "【color】: 색상 【Color】", - "【subdivisions】: 작은 블록 내의 하위 블록 개수 【int】", - "【divisions】: 작은 블록 내의 하위 블록 분할 수 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_pt_PT.json deleted file mode 100644 index dfdbfcf8e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_pt_PT.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "Componente de Linhas de Grelha", - "info": "Pode conter um componente, desenhando uma grelha sobre ele. Pode especificar propriedades como cor, largura da linha, espaçamento, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propriedades Básicas do GridPager", - "desc": [ - "【child】: Componente filho 【Widget】", - "【color】: Cor 【Color】", - "【interval】: Comprimento do lado do pequeno bloco 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "Subdivisão do GridPager", - "desc": [ - "【child】: Componente filho 【Widget】", - "【color】: Cor 【Color】", - "【subdivisions】: Número de sub-blocos no pequeno bloco 【int】", - "【divisions】: Número de divisões dos sub-blocos no pequeno bloco 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ru_RU.json deleted file mode 100644 index 39087b7b1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ru_RU.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "Компонент с сеткой", - "info": "Может содержать один компонент, на котором рисуется сетка. Можно указать такие свойства, как цвет, толщина линий, расстояние и т.д.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основные свойства GridPager", - "desc": [ - "【child】: Дочерний компонент 【Widget】", - "【color】: Цвет 【Color】", - "【interval】: Длина стороны квадрата 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "Разделение GridPager", - "desc": [ - "【child】: Дочерний компонент 【Widget】", - "【color】: Цвет 【Color】", - "【subdivisions】: Количество подблоков в квадрате 【int】", - "【divisions】: Количество разделений подблоков в квадрате 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_zh-CN.json deleted file mode 100644 index 154fe340b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_zh-CN.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "网格线组件", - "info": "可容纳一个组件,在其上绘制网格。可指定颜色、线宽、间距等属性。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridPager 基础属性", - "desc": [ - "【child】: 子组件 【Widget】", - "【color】: 颜色 【Color】", - "【interval】: 小块边长 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "GridPager 再分割", - "desc": [ - "【child】: 子组件 【Widget】", - "【color】: 颜色 【Color】", - "【subdivisions】: 小块中子块个数 【int】", - "【divisions】: 小块中子块的分割数 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/node1_base.dart deleted file mode 100644 index 173bc587a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/node1_base.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class CustomGridPaper extends StatelessWidget { - const CustomGridPaper({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 200, - height: 100, - child: GridPaper( - color: Colors.red, - interval: 50, - child: Image.asset( - "assets/images/wy_300x200.webp", - fit: BoxFit.cover, - ))); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/node2_divisions.dart b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/node2_divisions.dart deleted file mode 100644 index 3c7ee0077..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/node2_divisions.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class DivisionsGridPaper extends StatelessWidget { - const DivisionsGridPaper({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 200, - height: 100, - child: GridPaper( - color: Colors.red, - interval: 50, - divisions: 4, - subdivisions: 4, - child: Image.asset( - "assets/images/wy_300x200.webp", - fit: BoxFit.cover, - ))); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_de_DE.json deleted file mode 100644 index 08ad2e816..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "Rasterkachel", - "info": "Eine allgemeine Listenstruktur, die von Flutter bereitgestellt wird, kann Kopf-, Fuß- und Unterkomponenten angeben und wird häufig in Rasterlisten verwendet.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Die grundlegende Darstellung von GridTile ist wie folgt", - "desc": [ - "【header】: Kopfkomponente 【Widget】", - "【child】: Unterkomponente 【Widget】", - "【footer】: Fußkomponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_en_US.json deleted file mode 100644 index a26935828..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "Grid Tile", - "info": "A general list item structure provided by Flutter, which can specify header, footer, and child components, commonly used in grid lists.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "The basic representation of GridTile is as follows", - "desc": [ - "【header】: Header component 【Widget】", - "【child】: Child component 【Widget】", - "【footer】: Footer component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_es_ES.json deleted file mode 100644 index 80ba2b89b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "Mosaico de cuadrícula", - "info": "Una estructura de lista genérica proporcionada por Flutter que permite especificar componentes de cabecera, pie y secundarios, comúnmente utilizada en listas de cuadrícula.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La representación básica de GridTile es la siguiente", - "desc": [ - "【header】: Componente de cabecera 【Widget】", - "【child】: Componente secundario 【Widget】", - "【footer】: Componente de pie 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_fr_FR.json deleted file mode 100644 index 1cc76759c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "Tuile de grille", - "info": "Une structure d'élément de liste générique fournie par Flutter, permettant de spécifier des composants de tête, de queue et enfants, souvent utilisée dans les listes en grille.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La représentation de base de GridTile est la suivante", - "desc": [ - "【header】: Composant de tête 【Widget】", - "【child】: Composant enfant 【Widget】", - "【footer】: Composant de pied 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_it_IT.json deleted file mode 100644 index 5d5022afa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "Piastrella a griglia", - "info": "Una struttura di voci di lista generica fornita da Flutter, che consente di specificare componenti di testa, coda e figlio, comunemente utilizzata nelle liste a griglia.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La rappresentazione di base di GridTile è la seguente", - "desc": [ - "【header】: componente di testa 【Widget】", - "【child】: componente figlio 【Widget】", - "【footer】: componente di coda 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ja_JP.json deleted file mode 100644 index 9124ce39e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "グリッドタイル", - "info": "Flutterが提供する汎用リストエントリ構造で、ヘッダー、フッター、子コンポーネントを指定でき、グリッドリストでよく使用されます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridTileの基本的な表現は以下の通りです", - "desc": [ - "【header】: ヘッダーコンポーネント 【Widget】", - "【child】: 子コンポーネント 【Widget】", - "【footer】: フッターコンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ko_KR.json deleted file mode 100644 index 9cf8a7905..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "그리드 타일", - "info": "Flutter에서 제공하는 일반적인 목록 항목 구조로, 헤더, 푸터, 자식 컴포넌트를 지정할 수 있으며, 주로 그리드 목록에 사용됩니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridTile의 기본 표현은 다음과 같습니다", - "desc": [ - "【header】: 헤더 컴포넌트 【Widget】", - "【child】: 자식 컴포넌트 【Widget】", - "【footer】: 푸터 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_pt_PT.json deleted file mode 100644 index 06300e45d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "Azulejo de Grade", - "info": "Uma estrutura de item de lista genérica fornecida pelo Flutter, que permite especificar componentes de cabeçalho, rodapé e filhos, comumente usada em listas de grade.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "A apresentação básica do GridTile é a seguinte", - "desc": [ - "【header】: Componente de cabeçalho 【Widget】", - "【child】: Componente filho 【Widget】", - "【footer】: Componente de rodapé 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ru_RU.json deleted file mode 100644 index 6355dbdc7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "Сетка плитки", - "info": "Универсальная структура элемента списка, предоставляемая Flutter, которая позволяет указать компоненты заголовка, нижнего колонтитула и дочерние компоненты, часто используется в списках сеток.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное представление GridTile выглядит следующим образом", - "desc": [ - "【header】: Компонент заголовка 【Widget】", - "【child】: Дочерний компонент 【Widget】", - "【footer】: Компонент нижнего колонтитула 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_zh-CN.json deleted file mode 100644 index b55b947ba..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "网格瓦片", - "info": "Flutter提供的一个通用列表条目结构,可指定头、尾、子组件,常用于网格列表。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridTile的基本表现如下", - "desc": [ - "【header】: 头组件 【Widget】", - "【child】: 子组件 【Widget】", - "【footer】: 脚组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/node1_base.dart deleted file mode 100644 index 3d9e7e261..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/node1_base.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - -class CustomGridTile extends StatelessWidget { - const CustomGridTile({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 200, - height: 200, - child: GridTile( - header: GridTileBar( - backgroundColor: Colors.blue.withAlpha(120), - trailing: const Icon(Icons.star, color: Colors.red), - leading: const CircleAvatar( - backgroundImage: AssetImage("assets/images/wy_200x300.webp"), - ), - title: const Text("百里·巫缨"), - subtitle: const Text("倾国必倾城"), - ), - child: Opacity( - opacity: 0.5, - child: Image.asset("assets/images/sabar.webp", fit: BoxFit.cover), - ), - footer: const Padding( - padding: EdgeInsets.all(8.0), - child: Text( - "ID:z\$ySX32&29", - style: TextStyle( - shadows: [ - Shadow( - color: Colors.blue, offset: Offset(.1, .1), blurRadius: 2), - ], - ), - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_de_DE.json deleted file mode 100644 index 5948a8547..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "Gitterfliesenkopf", - "info": "Eine allgemeine Kopfstruktur, die von Flutter bereitgestellt wird, mit einer Struktur von links, Mitte und rechts. Komponenten können an den entsprechenden Positionen eingefügt werden, was eine einfache Handhabung spezifischer Einträge ermöglicht. Im Vergleich zu ListTile gibt es weniger Attribute.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Die grundlegende Darstellung von GridTileBar ist wie folgt", - "desc": [ - "【leading】: Linke Komponente 【Widget】", - "【trailing】: Rechte Komponente 【Widget】", - "【title】: Obere mittlere Komponente 【Widget】", - "【subtitle】: Untere mittlere Komponente 【Widget】", - "【backgroundColor】: Hintergrundfarbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_en_US.json deleted file mode 100644 index e9db776e0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "Grid Tile Header", - "info": "A common header structure provided by Flutter, with a left-center-right layout. Components can be inserted into the corresponding positions, making it easy to handle specific items. Compared to ListTile, it has fewer properties.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "The basic representation of GridTileBar is as follows", - "desc": [ - "【leading】: Left component 【Widget】", - "【trailing】: Trailing component 【Widget】", - "【title】: Top middle component 【Widget】", - "【subtitle】: Bottom middle component 【Widget】", - "【backgroundColor】: Background color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_es_ES.json deleted file mode 100644 index 28d06ccef..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "Barra de mosaico de cuadrícula", - "info": "Flutter proporciona una estructura de encabezado común, con una estructura de izquierda, centro y derecha. Se pueden insertar componentes en las posiciones correspondientes, lo que permite manejar elementos específicos de manera conveniente. En comparación con ListTile, tiene menos atributos.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La representación básica de GridTileBar es la siguiente", - "desc": [ - "【leading】: Componente izquierdo 【Widget】", - "【trailing】: Componente derecho 【Widget】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【backgroundColor】: Color de fondo 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_fr_FR.json deleted file mode 100644 index 0cd457192..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "Barre de tuile de grille", - "info": "Une structure de tête générique fournie par Flutter, avec une structure gauche-centre-droite. Des composants peuvent être insérés aux positions correspondantes, ce qui permet de répondre facilement à des entrées spécifiques, avec moins d'attributs que ListTile.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La performance de base de GridTileBar est la suivante", - "desc": [ - "【leading】: Composant gauche 【Widget】", - "【trailing】: Composant de queue 【Widget】", - "【title】: Composant supérieur central 【Widget】", - "【subtitle】: Composant inférieur central 【Widget】", - "【backgroundColor】: Couleur de fond 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_it_IT.json deleted file mode 100644 index c43d5fb52..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "Barra della piastrella della griglia", - "info": "Una struttura di intestazione generica fornita da Flutter, con una struttura sinistra-centro-destra. I componenti possono essere inseriti nelle posizioni corrispondenti, rendendolo molto conveniente per gestire voci specifiche, con meno attributi rispetto a ListTile.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La rappresentazione di base di GridTileBar è la seguente", - "desc": [ - "【leading】: Componente sinistro 【Widget】", - "【trailing】: Componente destro 【Widget】", - "【title】: Componente superiore centrale 【Widget】", - "【subtitle】: Componente inferiore centrale 【Widget】", - "【backgroundColor】: Colore di sfondo 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ja_JP.json deleted file mode 100644 index 334e2d47d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "グリッドタイルバー", - "info": "Flutterが提供する一般的なヘッダー構造で、左中右の構造です。対応する位置にコンポーネントを挿入でき、特定の項目に簡単に対応できます。ListTileと比較して、属性が少ないです。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridTileBarの基本的な表現は以下の通りです", - "desc": [ - "【leading】: 左側のコンポーネント 【Widget】", - "【trailing】: 右側のコンポーネント 【Widget】", - "【title】: 中央上部のコンポーネント 【Widget】", - "【subtitle】: 中央下部のコンポーネント 【Widget】", - "【backgroundColor】: 背景色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ko_KR.json deleted file mode 100644 index 239ae9286..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "그리드 타일 헤더", - "info": "Flutter에서 제공하는 일반적인 헤더 구조로, 왼쪽, 중앙, 오른쪽 구조를 가지고 있습니다. 해당 위치에 컴포넌트를 삽입할 수 있어 특정 항목에 쉽게 대응할 수 있으며, ListTile에 비해 속성이 적습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridTileBar의 기본적인 표현은 다음과 같습니다", - "desc": [ - "【leading】: 왼쪽 컴포넌트 【Widget】", - "【trailing】: 오른쪽 컴포넌트 【Widget】", - "【title】: 중앙 상단 컴포넌트 【Widget】", - "【subtitle】: 중앙 하단 컴포넌트 【Widget】", - "【backgroundColor】: 배경색 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_pt_PT.json deleted file mode 100644 index c130ca60f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "Barra de Azulejo de Grade", - "info": "Uma estrutura de cabeçalho genérica fornecida pelo Flutter, com uma estrutura de esquerda, centro e direita. Componentes podem ser inseridos nas posições correspondentes, o que facilita a adaptação a itens específicos, com menos atributos em comparação com o ListTile.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "A representação básica do GridTileBar é a seguinte", - "desc": [ - "【leading】: Componente esquerdo 【Widget】", - "【trailing】: Componente direito 【Widget】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【backgroundColor】: Cor de fundo 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ru_RU.json deleted file mode 100644 index 39586e3b0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "Сетка плитки", - "info": "Flutter предоставляет универсальную структуру заголовка, которая имеет структуру слева, по центру и справа. В соответствующие позиции можно вставлять компоненты, что позволяет легко адаптироваться к конкретным элементам, по сравнению с ListTile, атрибутов меньше.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное представление GridTileBar выглядит следующим образом", - "desc": [ - "【leading】: Левый компонент 【Widget】", - "【trailing】: Правый компонент 【Widget】", - "【title】: Верхний центральный компонент 【Widget】", - "【subtitle】: Нижний центральный компонент 【Widget】", - "【backgroundColor】: Цвет фона 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_zh-CN.json deleted file mode 100644 index 799a543b2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "网格瓦片头", - "info": "Flutter提供的一个通用头结构,为左中右结构。相应位置可插入组件,可以很方便地应对特定的条目,相比ListTile而言,属性较少。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridTileBar的基本表现如下", - "desc": [ - "【leading】: 左侧组件 【Widget】", - "【trailing】: 尾组件 【Widget】", - "【title】: 中间上组件 【Widget】", - "【subtitle】: 中间下组件 【Widget】", - "【backgroundColor】: 背景色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/node1_base.dart deleted file mode 100644 index b5960402e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/node1_base.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - - -class CustomGridTileBar extends StatelessWidget { - const CustomGridTileBar({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return GridTileBar( - backgroundColor: Colors.blue.withAlpha(120), - trailing: const Icon(Icons.star, color: Colors.red), - leading: const CircleAvatar( - backgroundImage: AssetImage("assets/images/wy_200x300.webp"), - ), - title: const Text("百里·巫缨"), - subtitle: const Text("倾国必倾城"), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_de_DE.json deleted file mode 100644 index 26249c9a4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_de_DE.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "Rasterkomponente", - "info": "Enthält mehrere Komponenten und organisiert sie in einem Raster. Kann über count, extent, custom, builder usw. konstruiert werden. Hat Eigenschaften wie Innenabstand, ob umgekehrt, Scroll-Controller usw.", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridView.count Konstruktion", - "desc": [ - "【children】 : Liste der Unterkomponenten 【List】", - "【crossAxisCount】 : Anzahl der Boxen pro Zeile in der Hauptachse 【int】", - "【mainAxisSpacing】 : Abstand zwischen den Zeilen in der Hauptachse 【double】", - "【crossAxisSpacing】 : Abstand zwischen den Zeilen in der Querachse 【double】", - "【childAspectRatio】 : Verhältnis von Hauptlänge zu Querlänge der Box 【double】", - "【crossAxisCount】 : Anzahl der Boxen pro Zeile in der Hauptachse 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "GridView Scrollrichtung", - "desc": [ - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【reverse】 : Ob umgekehrt gescrollt wird 【bool】", - "【shrinkWrap】 : Ob bei fehlenden Grenzen umwickelt wird 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "GridView Scrollrichtung", - "desc": [ - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【reverse】 : Ob umgekehrt gescrollt wird 【bool】", - "【shrinkWrap】 : Ob bei fehlenden Grenzen umwickelt wird 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "GridView.builder Konstruktion", - "desc": [ - "【itemCount】 : Anzahl der Einträge 【int】", - "【gridDelegate】 : Rasterdelegat 【SliverGridDelegate】", - "【itemBuilder】 : Eintragskonstruktor 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_en_US.json deleted file mode 100644 index a99d2fdc1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_en_US.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "Grid Component", - "info": "Accommodates multiple components in a grid manner. Can be constructed via count, extent, custom, builder, etc. Has properties such as padding, whether to reverse, scroll controller, etc.", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridView.count Construction", - "desc": [ - "【children】 : List of child components 【List】", - "【crossAxisCount】 : Number of boxes per row on the main axis 【int】", - "【mainAxisSpacing】 : Spacing between rows on the main axis 【double】", - "【crossAxisSpacing】 : Spacing between rows on the cross axis 【double】", - "【childAspectRatio】 : Main length/cross length of the box 【double】", - "【crossAxisCount】 : Number of boxes per row on the main axis 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "GridView Scroll Direction", - "desc": [ - "【scrollDirection】 : Scroll direction 【Axis】", - "【reverse】 : Whether to scroll in reverse 【bool】", - "【shrinkWrap】 : Whether to wrap when there is no boundary 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "GridView Scroll Direction", - "desc": [ - "【scrollDirection】 : Scroll direction 【Axis】", - "【reverse】 : Whether to scroll in reverse 【bool】", - "【shrinkWrap】 : Whether to wrap when there is no boundary 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "GridView.builder Construction", - "desc": [ - "【itemCount】 : Number of items 【int】", - "【gridDelegate】 : Grid delegate 【SliverGridDelegate】", - "【itemBuilder】 : Item builder 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_es_ES.json deleted file mode 100644 index 62b7abda8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_es_ES.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "Componente de cuadrícula", - "info": "Contiene múltiples componentes y los organiza en forma de cuadrícula. Se puede construir mediante count, extent, custom, builder, etc. Tiene propiedades como el relleno interno, si es inverso, el controlador de desplazamiento, etc.", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Construcción de GridView.count", - "desc": [ - "【children】 : Lista de componentes hijos 【List】", - "【crossAxisCount】 : Número de cajas por fila en el eje principal 【int】", - "【mainAxisSpacing】 : Espaciado entre filas en el eje principal 【double】", - "【crossAxisSpacing】 : Espaciado entre filas en el eje transversal 【double】", - "【childAspectRatio】 : Relación entre la longitud principal y la longitud transversal de la caja 【double】", - "【crossAxisCount】 : Número de cajas por fila en el eje principal 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Dirección de desplazamiento de GridView", - "desc": [ - "【scrollDirection】 : Dirección de desplazamiento 【Axis】", - "【reverse】 : Si el desplazamiento es inverso 【bool】", - "【shrinkWrap】 : Si se envuelve cuando no hay límites 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "Dirección de desplazamiento de GridView", - "desc": [ - "【scrollDirection】 : Dirección de desplazamiento 【Axis】", - "【reverse】 : Si el desplazamiento es inverso 【bool】", - "【shrinkWrap】 : Si se envuelve cuando no hay límites 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "Construcción de GridView.builder", - "desc": [ - "【itemCount】 : Número de elementos 【int】", - "【gridDelegate】 : Delegado de cuadrícula 【SliverGridDelegate】", - "【itemBuilder】 : Constructor de elementos 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_fr_FR.json deleted file mode 100644 index 56ed3d5d6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_fr_FR.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "Composant de grille", - "info": "Contient plusieurs composants et les organise en grille. Peut être construit via count, extent, custom, builder, etc. Possède des propriétés telles que la marge intérieure, la direction inverse, le contrôleur de défilement, etc.", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Construction de GridView.count", - "desc": [ - "【children】 : Liste des composants enfants 【List】", - "【crossAxisCount】 : Nombre de boîtes par ligne sur l'axe principal 【int】", - "【mainAxisSpacing】 : Espacement entre les lignes sur l'axe principal 【double】", - "【crossAxisSpacing】 : Espacement entre les lignes sur l'axe transversal 【double】", - "【childAspectRatio】 : Rapport longueur principale/longueur transversale de la boîte 【double】", - "【crossAxisCount】 : Nombre de boîtes par ligne sur l'axe principal 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direction de défilement de GridView", - "desc": [ - "【scrollDirection】 : Direction de défilement 【Axis】", - "【reverse】 : Défilement inversé 【bool】", - "【shrinkWrap】 : Encapsulation lorsque sans limites 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "Direction de défilement de GridView", - "desc": [ - "【scrollDirection】 : Direction de défilement 【Axis】", - "【reverse】 : Défilement inversé 【bool】", - "【shrinkWrap】 : Encapsulation lorsque sans limites 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "Construction de GridView.builder", - "desc": [ - "【itemCount】 : Nombre d'éléments 【int】", - "【gridDelegate】 : Délégué de grille 【SliverGridDelegate】", - "【itemBuilder】 : Constructeur d'éléments 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_it_IT.json deleted file mode 100644 index c3b9b94fa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_it_IT.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "Componente griglia", - "info": "Contiene più componenti e li organizza in una griglia. Può essere costruito utilizzando count, extent, custom, builder, ecc. Ha proprietà come padding, reverse, controller di scorrimento, ecc.", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Costruzione GridView.count", - "desc": [ - "【children】 : Lista di componenti figli 【List】", - "【crossAxisCount】 : Numero di box per riga nell'asse principale 【int】", - "【mainAxisSpacing】 : Spaziatura tra le righe nell'asse principale 【double】", - "【crossAxisSpacing】 : Spaziatura tra le righe nell'asse trasversale 【double】", - "【childAspectRatio】 : Rapporto lunghezza principale/lunghezza trasversale del box 【double】", - "【crossAxisCount】 : Numero di elementi per riga nell'asse principale 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direzione di scorrimento GridView", - "desc": [ - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【reverse】 : Scorrimento inverso 【bool】", - "【shrinkWrap】 : Avvolgere quando non ci sono confini 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "Direzione di scorrimento GridView", - "desc": [ - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【reverse】 : Scorrimento inverso 【bool】", - "【shrinkWrap】 : Avvolgere quando non ci sono confini 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "Costruzione GridView.builder", - "desc": [ - "【itemCount】 : Numero di elementi 【int】", - "【gridDelegate】 : Delegato della griglia 【SliverGridDelegate】", - "【itemBuilder】 : Costruttore di elementi 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ja_JP.json deleted file mode 100644 index c3a5a7a48..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ja_JP.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "グリッドコンポーネント", - "info": "複数のコンポーネントを収容し、グリッド方式で表示します。count、extent、custom、builderなどを使用して構築できます。内側の余白、逆方向かどうか、スクロールコントローラーなどの属性があります。", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridView.count構築", - "desc": [ - "【children】 : 子コンポーネントリスト 【List】", - "【crossAxisCount】 : 主軸一行のボックス数 【int】", - "【mainAxisSpacing】 : 主軸各行の間隔 【double】", - "【crossAxisSpacing】 : 交差軸各行の間隔 【double】", - "【childAspectRatio】 : ボックスの主軸長/交差軸長 【double】", - "【crossAxisCount】 : 主軸一行の数 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "GridViewスクロール方向", - "desc": [ - "【scrollDirection】 : スクロール方向 【Axis】", - "【reverse】 : 逆方向にスクロールするかどうか 【bool】", - "【shrinkWrap】 : 境界がない場合にラップするかどうか 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "GridViewスクロール方向", - "desc": [ - "【scrollDirection】 : スクロール方向 【Axis】", - "【reverse】 : 逆方向にスクロールするかどうか 【bool】", - "【shrinkWrap】 : 境界がない場合にラップするかどうか 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "GridView.builder構築", - "desc": [ - "【itemCount】 : 項目数 【int】", - "【gridDelegate】 : グリッドデリゲート 【SliverGridDelegate】", - "【itemBuilder】 : 項目ビルダー 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ko_KR.json deleted file mode 100644 index 68a10541c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ko_KR.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "그리드 컴포넌트", - "info": "여러 컴포넌트를 포함하고 그리드 방식으로 배치합니다. count, extent, custom, builder 등을 통해 구성할 수 있습니다. 내부 여백, 반대 방향 여부, 스크롤 컨트롤러 등의 속성이 있습니다.", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridView.count 구성", - "desc": [ - "【children】 : 자식 컴포넌트 리스트 【List】", - "【crossAxisCount】 : 주축 한 줄의 box 수 【int】", - "【mainAxisSpacing】 : 주축 각 줄 간격 【double】", - "【crossAxisSpacing】 : 교차축 각 줄 간격 【double】", - "【childAspectRatio】 : box 주 길이/교차축 길이 【double】", - "【crossAxisCount】 : 주축 한 줄 수 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "GridView 스크롤 방향", - "desc": [ - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【reverse】 : 반대 방향 스크롤 여부 【bool】", - "【shrinkWrap】 : 경계 없을 때 감싸기 여부 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "GridView 스크롤 방향", - "desc": [ - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【reverse】 : 반대 방향 스크롤 여부 【bool】", - "【shrinkWrap】 : 경계 없을 때 감싸기 여부 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "GridView.builder 구성", - "desc": [ - "【itemCount】 : 항목 수 【int】", - "【gridDelegate】 : 그리드 대리자 【SliverGridDelegate】", - "【itemBuilder】 : 항목 빌더 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_pt_PT.json deleted file mode 100644 index 21b7bcc52..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_pt_PT.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "Componente de Grade", - "info": "Acomoda vários componentes em formato de grade. Pode ser construído através de count, extent, custom, builder, etc. Possui propriedades como padding, reversão, controlador de deslize, etc.", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Construção de GridView.count", - "desc": [ - "【children】 : Lista de componentes filhos 【List】", - "【crossAxisCount】 : Número de caixas por linha no eixo principal 【int】", - "【mainAxisSpacing】 : Espaçamento entre linhas no eixo principal 【double】", - "【crossAxisSpacing】 : Espaçamento entre linhas no eixo cruzado 【double】", - "【childAspectRatio】 : Proporção do comprimento principal/comprimento do eixo cruzado da caixa 【double】", - "【crossAxisCount】 : Número de caixas por linha no eixo principal 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direção de Deslize do GridView", - "desc": [ - "【scrollDirection】 : Direção de deslize 【Axis】", - "【reverse】 : Se desliza na direção inversa 【bool】", - "【shrinkWrap】 : Se envolve quando não há limites 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "Direção de Deslize do GridView", - "desc": [ - "【scrollDirection】 : Direção de deslize 【Axis】", - "【reverse】 : Se desliza na direção inversa 【bool】", - "【shrinkWrap】 : Se envolve quando não há limites 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "Construção de GridView.builder", - "desc": [ - "【itemCount】 : Número de itens 【int】", - "【gridDelegate】 : Delegado de grade 【SliverGridDelegate】", - "【itemBuilder】 : Construtor de itens 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ru_RU.json deleted file mode 100644 index 4dc330ef2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ru_RU.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "Сетка", - "info": "Содержит несколько компонентов и отображает их в виде сетки. Может быть создан с использованием count, extent, custom, builder и других методов. Имеет свойства, такие как внутренние отступы, обратное направление, контроллер прокрутки и другие.", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Конструктор GridView.count", - "desc": [ - "【children】 : Список дочерних компонентов 【List】", - "【crossAxisCount】 : Количество элементов в строке по главной оси 【int】", - "【mainAxisSpacing】 : Расстояние между строками по главной оси 【double】", - "【crossAxisSpacing】 : Расстояние между строками по поперечной оси 【double】", - "【childAspectRatio】 : Соотношение длины по главной оси к длине по поперечной оси 【double】", - "【crossAxisCount】 : Количество элементов в строке по главной оси 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Направление прокрутки GridView", - "desc": [ - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【reverse】 : Обратное направление прокрутки 【bool】", - "【shrinkWrap】 : Обертывание при отсутствии границ 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "Направление прокрутки GridView", - "desc": [ - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【reverse】 : Обратное направление прокрутки 【bool】", - "【shrinkWrap】 : Обертывание при отсутствии границ 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "Конструктор GridView.builder", - "desc": [ - "【itemCount】 : Количество элементов 【int】", - "【gridDelegate】 : Делегат сетки 【SliverGridDelegate】", - "【itemBuilder】 : Конструктор элементов 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_zh-CN.json deleted file mode 100644 index 226589b73..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_zh-CN.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "网格组件", - "info": "容纳多个组件,并以网格的方式。可以通过count、extent、custom、builder等构造。有内边距、是否反向、滑动控制器等属性。", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridView.count构造", - "desc": [ - "【children】 : 子组件列表 【List】", - "【crossAxisCount】 : 主轴一行box数量 【int】", - "【mainAxisSpacing】 : 主轴每行间距 【double】", - "【crossAxisSpacing】 : 交叉轴每行间距 【double】", - "【childAspectRatio】 : box主长/交叉轴长 【double】", - "【crossAxisCount】 : 主轴一行数量 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "GridView滑动方向", - "desc": [ - "【scrollDirection】 : 滑动方向 【Axis】", - "【reverse】 : 是否反向滑动 【bool】", - "【shrinkWrap】 : 无边界时是否包裹 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "GridView滑动方向", - "desc": [ - "【scrollDirection】 : 滑动方向 【Axis】", - "【reverse】 : 是否反向滑动 【bool】", - "【shrinkWrap】 : 无边界时是否包裹 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "GridView.builder构造", - "desc": [ - "【itemCount】 : 条目数量 【int】", - "【gridDelegate】 : 网格代理 【SliverGridDelegate】", - "【itemBuilder】 : 条目构造器 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/GridView/node1_base.dart deleted file mode 100644 index 475b961f7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/node1_base.dart +++ /dev/null @@ -1,56 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-27 -/// contact me by email 1981462002@qq.com -/// 说明: -// { -// "widgetId": 163, -// "name": 'GridView.count构造', -// "priority": 1, -// "subtitle": -// "【children】 : 子组件列表 【List】\n" -// "【crossAxisCount】 : 主轴一行box数量 【int】\n" -// "【mainAxisSpacing】 : 主轴每行间距 【double】\n" -// "【crossAxisSpacing】 : 交叉轴每行间距 【double】\n" -// "【childAspectRatio】 : box主长/交叉轴长 【double】\n" -// "【crossAxisCount】 : 主轴一行数量 【int】", -// } -class CustomGridView extends StatelessWidget { - const CustomGridView({super.key}); - - List get data => List.generate(128, (i) => Color(0xFFFF00FF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: GridView.count( - crossAxisCount: 4, - mainAxisSpacing: 2, - crossAxisSpacing: 2, - childAspectRatio: 1 / 0.618, - children: data.map((color) => _buildItem(color)).toList(), - ), - ); - } - - Container _buildItem(Color color) => Container( - alignment: Alignment.center, - width: 100, - height: 30, - color: color, - child: Text( - colorString(color), - style: const TextStyle( - color: Colors.white, - shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ], - ), - ), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/node2_direction.dart b/modules/widget_system/widgets/lib/StatelessWidget/GridView/node2_direction.dart deleted file mode 100644 index 32281c038..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/node2_direction.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-27 -/// contact me by email 1981462002@qq.com -/// 说明: - -// { -// "widgetId": 163, -// "name": 'GridView滑动方向', -// "priority": 2, -// "subtitle": -// "【scrollDirection】 : 滑动方向 【Axis】\n" -// "【reverse】 : 是否反向滑动 【bool】\n" -// "【shrinkWrap】 : 无边界时是否包裹 【bool】", -// } -class HorizontalGridView extends StatelessWidget { - const HorizontalGridView({super.key}); - - List get data => List.generate(128, (i) => Color(0xFF00FFFF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: GridView.count( - scrollDirection: Axis.horizontal, - reverse: true, - crossAxisCount: 4, - mainAxisSpacing: 2, - crossAxisSpacing: 2, - childAspectRatio: 0.618, - children: data.map((color) => _buildItem(color)).toList(), - ), - ); - } - - Container _buildItem(Color color) => Container( - alignment: Alignment.center, - width: 100, - height: 30, - color: color, - child: Text( - colorString(color), - style: const TextStyle( - color: Colors.white, - shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ], - ), - ), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/node3_extend.dart b/modules/widget_system/widgets/lib/StatelessWidget/GridView/node3_extend.dart deleted file mode 100644 index c42658dd0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/node3_extend.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-27 -/// contact me by email 1981462002@qq.com -/// 说明: - -// { -// "widgetId": 163, -// "name": 'GridView滑动方向', -// "priority": 2, -// "subtitle": -// "【scrollDirection】 : 滑动方向 【Axis】\n" -// "【reverse】 : 是否反向滑动 【bool】\n" -// "【shrinkWrap】 : 无边界时是否包裹 【bool】", -// } -class ExtentGridView extends StatelessWidget { - const ExtentGridView({super.key}); - - List get data => List.generate(128, (i) => Color(0xFF00FFFF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: GridView.extent( - scrollDirection: Axis.horizontal, - maxCrossAxisExtent: 80.0, - mainAxisSpacing: 2, - crossAxisSpacing: 2, - childAspectRatio: 0.618, - children: data.map((color) => _buildItem(color)).toList(), - ), - ); - } - - Container _buildItem(Color color) => Container( - alignment: Alignment.center, - width: 100, - height: 30, - color: color, - child: Text( - colorString(color), - style: const TextStyle( - color: Colors.white, - shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ], - ), - ), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/node4_builder.dart b/modules/widget_system/widgets/lib/StatelessWidget/GridView/node4_builder.dart deleted file mode 100644 index a0b2ca75e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/node4_builder.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-27 -/// contact me by email 1981462002@qq.com -/// 说明: - -// { -// "widgetId": 163, -// "name": 'GridView.builder构造', -// "priority": 4, -// "subtitle": -// "【itemCount】 : 条目数量 【int】\n" -// "【gridDelegate】 : 网格代理 【SliverGridDelegate】\n" -// "【itemBuilder】 : 条目构造器 【IndexedWidgetBuilder】", -// } -class BuilderGridView extends StatelessWidget { - const BuilderGridView({super.key}); - - List get data => List.generate(128, (i) => Color(0xFF33FFF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: GridView.builder( - itemCount: data.length, - scrollDirection: Axis.vertical, - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - //网格代理:定交叉轴数目 - crossAxisCount: 4, //条目个数 - mainAxisSpacing: 5, //主轴间距 - crossAxisSpacing: 5, //交叉轴间距 - childAspectRatio: 1 / 0.618), - itemBuilder: (_, int position) => _buildItem(data[position])), - ); - } - - Widget _buildItem(Color color) => Container( - alignment: Alignment.center, - width: 100, - height: 30, - color: color, - child: Text( - colorString(color), - style: const TextStyle( - color: Colors.white, - shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ], - ), - ), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_de_DE.json deleted file mode 100644 index a7e5179a6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "html-Elementansicht", - "info": "Einbetten eines HTML-Elements in die Widget-Hierarchie von Flutter Web.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in HtmlElementView", - "desc": [ - "【child】 : Untergeordnete Komponente 【child】", - "【viewType】 : Eindeutige Kennung des HTML-Elements 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_en_US.json deleted file mode 100644 index 5c1a76ba4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "html element view", - "info": "Embeds an HTML element within the Widget hierarchy of Flutter Web.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to HtmlElementView", - "desc": [ - "【child】 : Child widget 【child】", - "【viewType】 : Unique identifier for the HTML element 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_es_ES.json deleted file mode 100644 index 7411690d0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "vista de elemento html", - "info": "Incrusta un elemento HTML en la jerarquía de Widgets de Flutter Web.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a HtmlElementView", - "desc": [ - "【child】 : componente hijo 【child】", - "【viewType】 : identificador único del elemento html 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_fr_FR.json deleted file mode 100644 index a597b30af..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "vue d'élément html", - "info": "Intégrer un élément HTML dans la hiérarchie des Widgets de Flutter Web.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à HtmlElementView", - "desc": [ - "【child】 : composant enfant 【child】", - "【viewType】 : identifiant unique de l'élément html 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_it_IT.json deleted file mode 100644 index 03d1b1469..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "vista elemento html", - "info": "Incorpora un elemento HTML nella gerarchia dei widget di Flutter Web.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a HtmlElementView", - "desc": [ - "【child】 : componente figlio 【child】", - "【viewType】 : identificatore unico dell'elemento html 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ja_JP.json deleted file mode 100644 index ee3c57dac..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "html エレメントビュー", - "info": "Flutter Web の Widget 階層に HTML エレメントを埋め込みます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "HtmlElementView 紹介", - "desc": [ - "【child】 : 子コンポーネント 【child】", - "【viewType】 : htmlエレメントのユニーク識別子 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ko_KR.json deleted file mode 100644 index 16031534f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "html 요소 뷰", - "info": "Flutter Web의 위젯 계층 구조에 HTML 요소를 삽입합니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "HtmlElementView 소개", - "desc": [ - "【child】 : 자식 위젯 【child】", - "【viewType】 : html 요소 고유 식별자 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_pt_PT.json deleted file mode 100644 index 5b0863d0b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "vista de elemento html", - "info": "Incorpora um elemento HTML na hierarquia de Widgets do Flutter Web.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao HtmlElementView", - "desc": [ - "【child】 : componente filho 【child】", - "【viewType】 : identificador único do elemento html 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ru_RU.json deleted file mode 100644 index 3a7aea921..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "html элемент представления", - "info": "Встраивает HTML-элемент в иерархию виджетов Flutter Web.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в HtmlElementView", - "desc": [ - "【child】 : дочерний компонент 【child】", - "【viewType】 : уникальный идентификатор HTML-элемента 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_zh-CN.json deleted file mode 100644 index 899721db8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "html 元素视图", - "info": "在 Flutter Web 的 Widget 层次结构中嵌入一个 HTML 元素。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "HtmlElementView 介绍", - "desc": [ - "【child】 : 子组件 【child】", - "【viewType】 : html元素唯一表识 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/node1_base.dart deleted file mode 100644 index edbf1324d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/node1_base.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/11 -/// contact me by email 1981462002@qq.com -/// - -class HtmlElementViewDemo extends StatelessWidget { - const HtmlElementViewDemo({Key? key}) : super(key: key); - - final String info = - '该组件只能用于 Flutter Web 中,嵌入 Html 元素的较为昂贵。' - '内部基于 PlatformViewLink 和 PlatformViewSurface 组件实现。'; - - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_de_DE.json deleted file mode 100644 index a4370c7c3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "Symbolkomponente", - "info": "Komponente zur Anzeige von Symbolen. Ermöglicht die Angabe von Symbolressourcen, Größe und Farbe. Sehr einfach, aber sehr nützlich", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Zum Anzeigen eines Symbols", - "desc": [ - "【Eingabeparameter】 : Symboldaten 【IconData】", - "【size】 : Größe 【double】", - "【color】: Farbe 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Verwendung von benutzerdefinierten Symbolen", - "desc": [ - "Symbolschriftarten können von der iconfont-Website heruntergeladen und verwendet werden" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_en_US.json deleted file mode 100644 index 8952d62b0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "Icon Component", - "info": "Component for displaying icons. Can specify icon resources, size, and color. Very simple, but very useful", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Used to display an icon", - "desc": [ - "【Input】 : Icon data 【IconData】", - "【size】 : Size 【double】", - "【color】: Color 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Use custom icons", - "desc": [ - "You can download icon fonts from the iconfont website for use" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_es_ES.json deleted file mode 100644 index 5fe3cb435..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "Componente de icono", - "info": "Componente para mostrar iconos. Puede especificar el recurso del icono, el tamaño y el color. Muy simple, pero muy útil", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Para mostrar un icono", - "desc": [ - "【Parámetro de entrada】: Datos del icono 【IconData】", - "【size】: Tamaño 【double】", - "【color】: Color 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Usar iconos personalizados", - "desc": [ - "Puede descargar fuentes de iconos desde el sitio web de iconfont para su uso" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_fr_FR.json deleted file mode 100644 index 280fb11ff..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "Composant d'icône", - "info": "Composant pour l'affichage d'icônes. Permet de spécifier la ressource d'icône, la taille, la couleur. Très simple, mais très utile", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Pour afficher une icône", - "desc": [ - "【Paramètre】 : Données de l'icône 【IconData】", - "【size】 : Taille 【double】", - "【color】: Couleur 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Utiliser des icônes personnalisées", - "desc": [ - "Vous pouvez télécharger des polices d'icônes sur le site iconfont pour les utiliser" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_it_IT.json deleted file mode 100644 index ede363f04..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "Componente Icona", - "info": "Componente per la visualizzazione delle icone. Puoi specificare la risorsa dell'icona, la dimensione e il colore. Molto semplice, ma molto utile", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Per visualizzare un'icona", - "desc": [ - "【Parametro】 : Dati dell'icona 【IconData】", - "【size】 : Dimensione 【double】", - "【color】: Colore 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Usa icone personalizzate", - "desc": [ - "Puoi scaricare i caratteri delle icone dal sito iconfont per usarli" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ja_JP.json deleted file mode 100644 index 74877e3df..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "アイコンコンポーネント", - "info": "アイコン表示用のコンポーネントです。アイコンリソース、サイズ、色を指定できます。非常にシンプルですが、非常に便利です。", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "アイコンを表示するために使用", - "desc": [ - "【引数】: アイコンデータ 【IconData】", - "【size】: サイズ 【double】", - "【color】: 色 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "カスタムアイコンを使用", - "desc": [ - "iconfontウェブサイトからアイコンフォントをダウンロードして使用できます" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ko_KR.json deleted file mode 100644 index f7e049a6f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "아이콘 컴포넌트", - "info": "아이콘 표시를 위한 컴포넌트입니다. 아이콘 리소스, 크기, 색상을 지정할 수 있습니다. 매우 간단하지만 매우 유용합니다.", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "아이콘을 표시하기 위해 사용", - "desc": [ - "【입력 매개변수】 : 아이콘 데이터 【IconData】", - "【size】 : 크기 【double】", - "【color】: 색상 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "사용자 정의 아이콘 사용", - "desc": [ - "iconfont 웹사이트에서 아이콘 폰트를 다운로드하여 사용할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_pt_PT.json deleted file mode 100644 index fb473652d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "Componente de Ícone", - "info": "Componente para exibição de ícones. Pode especificar o recurso do ícone, tamanho e cor. Muito simples, mas muito útil", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Usado para exibir um ícone", - "desc": [ - "【Parâmetro de entrada】: Dados do ícone 【IconData】", - "【size】: Tamanho 【double】", - "【color】: Cor 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Usar ícone personalizado", - "desc": [ - "Pode baixar fontes de ícones no site iconfont para uso" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ru_RU.json deleted file mode 100644 index 9cda5c090..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "Компонент иконки", - "info": "Компонент для отображения иконок. Можно указать ресурс иконки, размер, цвет. Очень просто, но очень полезно", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Для отображения иконки", - "desc": [ - "【Входные параметры】 : данные иконки 【IconData】", - "【size】 : размер 【double】", - "【color】: цвет 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Использование пользовательской иконки", - "desc": [ - "Можно скачать шрифт иконки с сайта iconfont для использования" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_zh-CN.json deleted file mode 100644 index 6b2847df4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "图标组件", - "info": "用于图标显示的组件。可指定图标资源、大小、颜色。非常简单,但是非常用", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "用于显示一个图标", - "desc": [ - "【入参】 :图标数据 【IconData】", - "【size】 : 大小 【double】", - "【color】: 颜色 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "使用自定义图标", - "desc": [ - "可在iconfont网站中下载图标字体进行使用" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Icon/node1_base.dart deleted file mode 100644 index 4a27ebe70..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/node1_base.dart +++ /dev/null @@ -1,23 +0,0 @@ - - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - - -class CustomIcon extends StatelessWidget { - const CustomIcon({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: const [ - Icon(Icons.send, color: Colors.orange, size: 60), - Icon(Icons.android, color: Colors.green, size: 100), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/node2_diy.dart b/modules/widget_system/widgets/lib/StatelessWidget/Icon/node2_diy.dart deleted file mode 100644 index 0bbffd9c6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/node2_diy.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:app/app.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - - -class MyIcon extends StatelessWidget { - const MyIcon({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - TolyIcon.icon_search, - TolyIcon.icon_star, - TolyIcon.icon_layout, - TolyIcon.icon_star_ok - ].map((e) => Icon( - e, - color: Colors.green, - size: 60, - ),).toList(), - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_de_DE.json deleted file mode 100644 index 095206db1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "Symbolschaltfläche", - "info": "Klickbare Symbolschaltfläche, die Symbolinformationen, Innenabstand, Größe, Farbe usw. angeben kann und Klickereignisse empfängt.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconButton-Eigenschaften", - "desc": [ - "【icon】: Symbolkomponente 【Widget】", - "【tooltip】: Langzeitdruck-Hinweistext 【String】", - "【highlightColor】: Langzeitdruck-Highlight-Farbe 【Color】", - "【splashColor】: Wasserwellenfarbe 【Color】", - "【onPressed】: Klickereignis 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_en_US.json deleted file mode 100644 index 8284e78a2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "Icon Button", - "info": "A clickable icon button that can specify icon information, padding, size, color, etc., and receives click events.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconButton Properties", - "desc": [ - "【icon】: Icon component 【Widget】", - "【tooltip】: Long press tooltip text 【String】", - "【highlightColor】: Long press highlight color 【Color】", - "【splashColor】: Ripple color 【Color】", - "【onPressed】: Click event 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_es_ES.json deleted file mode 100644 index 7432a0b41..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "Botón de icono", - "info": "Botón de icono clickeable, puede especificar información del icono, padding, tamaño, color, etc., y recibe eventos de clic.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propiedades de IconButton", - "desc": [ - "【icon】: Componente de icono 【Widget】", - "【tooltip】: Texto de sugerencia al mantener presionado 【String】", - "【highlightColor】: Color de resaltado al mantener presionado 【Color】", - "【splashColor】: Color de la onda 【Color】", - "【onPressed】: Evento de clic 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_fr_FR.json deleted file mode 100644 index 1cbaf9ebc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "Bouton d'icône", - "info": "Bouton d'icône cliquable, peut spécifier des informations d'icône, un remplissage, une taille, une couleur, etc., et reçoit des événements de clic.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propriétés d'IconButton", - "desc": [ - "【icon】: Composant d'icône 【Widget】", - "【tooltip】: Texte d'info-bulle lors d'un appui long 【String】", - "【highlightColor】: Couleur de surbrillance lors d'un appui long 【Color】", - "【splashColor】: Couleur de l'effet de vague 【Color】", - "【onPressed】: Événement de clic 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_it_IT.json deleted file mode 100644 index 317294485..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "Pulsante Icona", - "info": "Pulsante icona cliccabile, può specificare informazioni sull'icona, spaziatura interna, dimensione, colore, ecc., riceve eventi di clic.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Proprietà IconButton", - "desc": [ - "【icon】: Componente icona 【Widget】", - "【tooltip】: Testo di suggerimento per pressione prolungata 【String】", - "【highlightColor】: Colore evidenziato per pressione prolungata 【Color】", - "【splashColor】: Colore effetto ondulazione 【Color】", - "【onPressed】: Evento di clic 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ja_JP.json deleted file mode 100644 index 39425031c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "アイコンボタン", - "info": "クリック可能なアイコンボタンで、アイコン情報、パディング、サイズ、色などを指定でき、クリックイベントを受け取ります。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconButtonプロパティ", - "desc": [ - "【icon】: アイコンコンポーネント 【Widget】", - "【tooltip】: 長押し時のヒントテキスト 【String】", - "【highlightColor】: 長押し時のハイライト色 【Color】", - "【splashColor】: 波紋色 【Color】", - "【onPressed】: クリックイベント 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ko_KR.json deleted file mode 100644 index 69529b1e8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "아이콘 버튼", - "info": "클릭 가능한 아이콘 버튼으로, 아이콘 정보, 패딩, 크기, 색상 등을 지정할 수 있으며 클릭 이벤트를 수신합니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconButton 속성", - "desc": [ - "【icon】: 아이콘 컴포넌트 【Widget】", - "【tooltip】: 길게 누를 때 표시되는 텍스트 【String】", - "【highlightColor】: 길게 누를 때 강조 색상 【Color】", - "【splashColor】: 물결 효과 색상 【Color】", - "【onPressed】: 클릭 이벤트 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_pt_PT.json deleted file mode 100644 index 06ef0ae62..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "Botão de Ícone", - "info": "Botão de ícone clicável, pode especificar informações de ícone, preenchimento interno, tamanho, cor, etc., e recebe eventos de clique.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propriedades do IconButton", - "desc": [ - "【icon】: Componente de ícone 【Widget】", - "【tooltip】: Texto de dica ao pressionar 【String】", - "【highlightColor】: Cor de destaque ao pressionar 【Color】", - "【splashColor】: Cor do efeito de ondulação 【Color】", - "【onPressed】: Evento de clique 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ru_RU.json deleted file mode 100644 index cc27ab35b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "Кнопка с иконкой", - "info": "Кликабельная кнопка с иконкой, можно указать информацию об иконке, внутренние отступы, размер, цвет и т.д., принимает событие клика.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Свойства IconButton", - "desc": [ - "【icon】: Компонент иконки 【Widget】", - "【tooltip】: Текст подсказки при долгом нажатии 【String】", - "【highlightColor】: Цвет подсветки при долгом нажатии 【Color】", - "【splashColor】: Цвет эффекта волны 【Color】", - "【onPressed】: Событие клика 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_zh-CN.json deleted file mode 100644 index b8e6bf4de..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "图标按钮", - "info": "可点击的图标按钮,可指定图标信息、内边距、大小、颜色等,接收点击事件。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconButton属性", - "desc": [ - "【icon】: 图标组件 【Widget】", - "【tooltip】: 长按提示文字 【String】", - "【highlightColor】: 长按高亮色 【Color】", - "【splashColor】: 水波纹色 【Color】", - "【onPressed】: 点击事件 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/node1_base.dart deleted file mode 100644 index a3fff8484..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/node1_base.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - -class CustomIconButton extends StatelessWidget { - const CustomIconButton({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(8.0), - child: IconButton( - padding: const EdgeInsets.only(), - onPressed: () {}, - icon: const Icon(Icons.android, size: 40, color: Colors.green), - tooltip: "android", - highlightColor: Colors.orangeAccent, - splashColor: Colors.blue, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_de_DE.json deleted file mode 100644 index c9c0f95ae..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "Container", - "info": "Eine Komponente, die ein Bild in eine einfarbige Farbe umwandelt. Größe und Farbe können angegeben werden.", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Wird verwendet, um ein einfarbiges Bild anzuzeigen", - "desc": [ - "【Parameter】: Bildressource 【ImageProvider】", - "【size】: Größe 【double】", - "【color】: Farbe der Markierung 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_en_US.json deleted file mode 100644 index 90f16806e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "Container", - "info": "A component used to turn an image into a solid color. You can specify the size and color.", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Used to display a solid color image", - "desc": [ - "【Parameter】: Image resource 【ImageProvider】", - "【size】: Size 【double】", - "【color】: Badge color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_es_ES.json deleted file mode 100644 index 09e681c8c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "Contenedor", - "info": "Componente utilizado para convertir una imagen en un color sólido. Puede especificar el tamaño y el color.", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Se utiliza para mostrar una imagen de color sólido", - "desc": [ - "【Parámetro de entrada】: Recurso de imagen 【ImageProvider】", - "【size】: Tamaño 【double】", - "【color】: Color de la etiqueta 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_fr_FR.json deleted file mode 100644 index 36b48738e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "Conteneur", - "info": "Un composant pour transformer une image en une couleur unie. Peut spécifier la taille et la couleur.", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisé pour afficher une image en couleur unie", - "desc": [ - "【Paramètre】 : Ressource d'image 【ImageProvider】", - "【size】 : Taille 【double】", - "【color】: Couleur de l'étiquette 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_it_IT.json deleted file mode 100644 index f32ca86ab..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "Contenitore", - "info": "Componente utilizzato per trasformare un'immagine in un colore solido. È possibile specificare dimensioni e colore.", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzato per visualizzare un'immagine a tinta unita", - "desc": [ - "【Parametro】 : Risorsa immagine 【ImageProvider】", - "【size】 : Dimensione 【double】", - "【color】: Colore del badge 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ja_JP.json deleted file mode 100644 index f14e7c892..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "コンテナ", - "info": "画像を単色に変えるためのコンポーネントです。サイズや色を指定できます。", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "単色の画像を表示するために使用", - "desc": [ - "【入参】 : 画像リソース 【ImageProvider】", - "【size】 : サイズ 【double】", - "【color】: バッジの色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ko_KR.json deleted file mode 100644 index 11ec8ae0b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "컨테이너", - "info": "이미지를 단색으로 변경하는 컴포넌트입니다. 크기와 색상을 지정할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "단색 이미지를 표시하는 데 사용", - "desc": [ - "【입력 매개변수】 : 이미지 리소스 【ImageProvider】", - "【size】 : 크기 【double】", - "【color】: 배지 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_pt_PT.json deleted file mode 100644 index 7cf446f09..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "Recipiente", - "info": "Componente usado para transformar uma imagem em uma cor sólida. Pode especificar o tamanho e a cor.", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Usado para exibir uma imagem de cor sólida", - "desc": [ - "【Parâmetro de entrada】: Recurso de imagem 【ImageProvider】", - "【size】: Tamanho 【double】", - "【color】: Cor do ícone 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ru_RU.json deleted file mode 100644 index f560ccf04..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "Контейнер", - "info": "Компонент для преобразования изображения в однотонный цвет. Можно указать размер и цвет.", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Используется для отображения однотонного изображения", - "desc": [ - "【Параметр】 : Ресурс изображения 【ImageProvider】", - "【size】 : Размер 【double】", - "【color】: Цвет индикатора 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_zh-CN.json deleted file mode 100644 index f86199f6f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "容器", - "info": "用于将一个图片变为纯色的组件。可指定大小、颜色。", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "用于显示一个纯色图片", - "desc": [ - "【入参】 : 图片资源 【ImageProvider】", - "【size】 : 大小 【double】", - "【color】: 角标颜色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/node1_base.dart deleted file mode 100644 index c687766c6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/node1_base.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - -class CustomImageIcon extends StatelessWidget { - const CustomImageIcon({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Map data = { - Colors.blue: 50.0, - Colors.red: 60.0, - Colors.green: 70.0, - Colors.yellow: 80.0, - }; - return Wrap( - spacing: 10, - children: data.keys - .map((e) => ImageIcon( - const AssetImage("assets/images/leaf.webp"), - color: e, - size: data[e], - )) - .toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_de_DE.json deleted file mode 100644 index b6e32c703..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_de_DE.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "Kombinierter Chip", - "info": "Ähnlich wie die Chip-Komponente, integriert Klick-, Lösch- und Auswahlereignisse. Hinweis: Klick- und Auswahlereignisse können nicht gleichzeitig vorhanden sein.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Kann Klick- und Lösch-Ereignisse akzeptieren", - "desc": [ - "【onPressed】: Klick-Ereignis 【Function()】", - "【onDeleted】: Lösch-Ereignis 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Kann Auswahl-Ereignisse akzeptieren", - "desc": [ - "【selected】: Ob ausgewählt 【bool】", - "【onSelected】: Auswahl-Ereignis 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_en_US.json deleted file mode 100644 index 6c0ac259d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_en_US.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "Comprehensive Chip", - "info": "Similar in style to the Chip component, it integrates click, delete, and select events into one. Note: Click event and select event cannot coexist.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Can accept click and delete events", - "desc": [ - "【onPressed】: Click event 【Function()】", - "【onDeleted】: Delete event 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Can accept select event", - "desc": [ - "【selected】: Whether selected 【bool】", - "【onSelected】: Select event 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_es_ES.json deleted file mode 100644 index bf5a73a29..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_es_ES.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "Chip Integrado", - "info": "Estilo similar al componente Chip, integra eventos de clic, eliminación y selección en uno. Nota: Los eventos de clic y selección no pueden coexistir.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Puede aceptar eventos de clic y eliminación", - "desc": [ - "【onPressed】: Evento de clic 【Function()】", - "【onDeleted】: Evento de eliminación 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Puede aceptar eventos de selección", - "desc": [ - "【selected】: Si está seleccionado 【bool】", - "【onSelected】: Evento de selección 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_fr_FR.json deleted file mode 100644 index f4ffd569f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_fr_FR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "Puce Intégrée", - "info": "Un style similaire au composant Chip, intégrant les événements de clic, de suppression et de sélection en un seul. Remarque : les événements de clic et de sélection ne peuvent pas coexister.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Peut accepter les événements de clic et de suppression", - "desc": [ - "【onPressed】: Événement de clic 【Function()】", - "【onDeleted】: Événement de suppression 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Peut accepter l'événement de sélection", - "desc": [ - "【selected】: Est sélectionné 【bool】", - "【onSelected】: Événement de sélection 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_it_IT.json deleted file mode 100644 index dc95c4e49..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_it_IT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "Chip Integrato", - "info": "Stile simile al componente Chip, integrato con eventi di clic, eliminazione e selezione. Nota: gli eventi di clic e selezione non possono coesistere.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Può accettare eventi di clic ed eliminazione", - "desc": [ - "【onPressed】: Evento di clic 【Function()】", - "【onDeleted】: Evento di eliminazione 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Può accettare eventi di selezione", - "desc": [ - "【selected】: Se selezionato 【bool】", - "【onSelected】: Evento di selezione 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ja_JP.json deleted file mode 100644 index 314715264..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ja_JP.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "統合チップ", - "info": "Chipコンポーネントと同様のスタイルで、クリック、削除、選択イベントを統合しています。注意: クリックイベントと選択イベントは同時に存在できません。", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "クリック、削除イベントを受け取ることができます", - "desc": [ - "【onPressed】: クリックイベント 【Function()】", - "【onDeleted】: 削除イベント 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "選択イベントを受け取ることができます", - "desc": [ - "【selected】: 選択されているかどうか 【bool】", - "【onSelected】: 選択イベント 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ko_KR.json deleted file mode 100644 index 63de89c92..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ko_KR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "종합 칩", - "info": "Chip 컴포넌트와 유사한 스타일로, 클릭, 삭제, 선택 이벤트를 하나로 통합했습니다. 주의: 클릭 이벤트와 선택 이벤트는 동시에 존재할 수 없습니다.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "클릭 및 삭제 이벤트를 수신할 수 있음", - "desc": [ - "【onPressed】: 클릭 이벤트 【Function()】", - "【onDeleted】: 삭제 이벤트 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "선택 이벤트를 수신할 수 있음", - "desc": [ - "【selected】: 선택 여부 【bool】", - "【onSelected】: 선택 이벤트 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_pt_PT.json deleted file mode 100644 index 41eaaf1ba..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_pt_PT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "Chip Integrado", - "info": "Estilo semelhante ao componente Chip, integra eventos de clique, exclusão e seleção em um só. Nota: os eventos de clique e seleção não podem coexistir.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Pode aceitar eventos de clique e exclusão", - "desc": [ - "【onPressed】: Evento de clique 【Function()】", - "【onDeleted】: Evento de exclusão 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Pode aceitar eventos de seleção", - "desc": [ - "【selected】: Se está selecionado 【bool】", - "【onSelected】: Evento de seleção 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ru_RU.json deleted file mode 100644 index d1eb785ce..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ru_RU.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "Комплексный чип", - "info": "Стиль, похожий на компонент Chip, объединяет события нажатия, удаления и выбора в одном элементе. Обратите внимание: события нажатия и выбора не могут существовать одновременно.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Может принимать события нажатия и удаления", - "desc": [ - "【onPressed】: Событие нажатия 【Function()】", - "【onDeleted】: Событие удаления 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Может принимать событие выбора", - "desc": [ - "【selected】: Выбрано ли 【bool】", - "【onSelected】: Событие выбора 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_zh-CN.json deleted file mode 100644 index 9d99ecd40..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_zh-CN.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "综合小条", - "info": "和Chip组件类似的样式,集成了点击、删除、选择事件为一体。注意:点击事件和选择事件不能同时存在。", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "可以接受点击、删除事件", - "desc": [ - "【onPressed】: 点击事件 【Function()】", - "【onDeleted】: 删除事件 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "可以接受选中事件", - "desc": [ - "【selected】: 是否选中 【bool】", - "【onSelected】: 选中事件 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/node1_base.dart deleted file mode 100644 index 3d1161beb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/node1_base.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - -class PressInputChip extends StatefulWidget { - const PressInputChip({Key? key}) : super(key: key); - - @override - _PressInputChipState createState() => _PressInputChipState(); -} - -class _PressInputChipState extends State { - bool _delete = false; - - @override - Widget build(BuildContext context) { - return InputChip( - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(3), - label: Text( - !_delete ? - "This is a InputChip." : - "You are clicked delete icon."), - backgroundColor: Colors.grey.withAlpha(66), - avatar: Image.asset("assets/images/icon_head.webp"), - selectedColor: Colors.orangeAccent.withAlpha(88), - selectedShadowColor: Colors.blue, - shadowColor: Colors.orangeAccent, - elevation: 3, - onPressed: () => Navigator.of(context).pushNamed('AboutMePage'), - onDeleted: () => setState(() => _delete = !_delete)); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/node2_select.dart b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/node2_select.dart deleted file mode 100644 index f19dcb12e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/node2_select.dart +++ /dev/null @@ -1,41 +0,0 @@ -import 'package:flutter/material.dart'; - - - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - -class SelectInputChip extends StatefulWidget { - const SelectInputChip({Key? key}) : super(key: key); - - @override - _SelectInputChipState createState() => _SelectInputChipState(); -} - -class _SelectInputChipState extends State { - bool _select = false; - - @override - Widget build(BuildContext context) { - return InputChip( - selected: _select, - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(3), - label: const Text("This is a InputChip."), - backgroundColor: Colors.grey.withAlpha(66), - avatar: Image.asset("assets/images/icon_head.webp"), - selectedColor: Colors.orangeAccent.withAlpha(88), - selectedShadowColor: Colors.blue, - shadowColor: Colors.orangeAccent, - elevation: 3, - onDeleted: () => Navigator.of(context).pushNamed('AboutMePage'), - onSelected: (bool value) { - setState(() { - _select = value; - }); - print("onSelected"); - }, - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_de_DE.json deleted file mode 100644 index 483c5b99e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_de_DE.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "Listenkachel", - "info": "Eine allgemeine Listenstruktur, die von Flutter bereitgestellt wird, mit einer Struktur von links, Mitte und rechts. An den entsprechenden Positionen können Komponenten eingefügt werden, was es sehr einfach macht, bestimmte Einträge zu verarbeiten.", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Darstellung von ListTile", - "desc": [ - "【leading】: Linke Komponente 【Widget】", - "【title】: Obere mittlere Komponente 【Widget】", - "【subtitle】: Untere mittlere Komponente 【Widget】", - "【trailing】: Rechte Komponente 【Widget】", - "【contentPadding】: Innenabstand 【EdgeInsetsGeometry】", - "【onLongPress】: Klick-Ereignis 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Auswahl-Effekt und Long-Press-Ereignis von ListTile", - "desc": [ - "【selected】: Ist ausgewählt 【bool】", - "【onTap】: Klick-Ereignis 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Dichte Eigenschaft von ListTile", - "desc": [ - "【dense】: Ist dicht 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_en_US.json deleted file mode 100644 index cb894918e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_en_US.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "List Tile", - "info": "A general list item structure provided by Flutter, which has a left-center-right structure. Components can be inserted at the corresponding positions, making it easy to handle specific items.", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "The basic representation of ListTile is as follows", - "desc": [ - "【leading】: Left component 【Widget】", - "【title】: Top middle component 【Widget】", - "【subtitle】: Bottom middle component 【Widget】", - "【trailing】: Trailing component 【Widget】", - "【contentPadding】: Inner padding 【EdgeInsetsGeometry】", - "【onLongPress】: Click event 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "ListTile selection effect and long press event", - "desc": [ - "【selected】: Whether selected 【bool】", - "【onTap】: Click event 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Dense property of ListTile", - "desc": [ - "【dense】: Whether dense 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_es_ES.json deleted file mode 100644 index 4437361ee..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_es_ES.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "Lista de fichas", - "info": "Una estructura de elementos de lista común proporcionada por Flutter, con una estructura de izquierda, centro y derecha. Se pueden insertar componentes en las posiciones correspondientes, lo que permite manejar elementos específicos de manera conveniente.", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La representación básica de ListTile es la siguiente", - "desc": [ - "【leading】: Componente izquierdo 【Widget】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【trailing】: Componente final 【Widget】", - "【contentPadding】: Relleno interno 【EdgeInsetsGeometry】", - "【onLongPress】: Evento de clic 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Efecto de selección y evento de pulsación prolongada de ListTile", - "desc": [ - "【selected】: Si está seleccionado 【bool】", - "【onTap】: Evento de clic 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propiedad de disposición densa de ListTile", - "desc": [ - "【dense】: Si está en disposición densa 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_fr_FR.json deleted file mode 100644 index dccc7dea7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_fr_FR.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "Tuile de liste", - "info": "Une structure d'élément de liste générique fournie par Flutter, avec une structure gauche-centre-droite. Des composants peuvent être insérés aux positions correspondantes, ce qui permet de répondre facilement à des éléments spécifiques.", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La performance de base de ListTile est la suivante", - "desc": [ - "【leading】: Composant de gauche 【Widget】", - "【title】: Composant du haut au centre 【Widget】", - "【subtitle】: Composant du bas au centre 【Widget】", - "【trailing】: Composant de fin 【Widget】", - "【contentPadding】: Marge intérieure 【EdgeInsetsGeometry】", - "【onLongPress】: Événement de clic 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Effet de sélection et événement de pression longue de ListTile", - "desc": [ - "【selected】: Est sélectionné 【bool】", - "【onTap】: Événement de clic 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propriété de densité de ListTile", - "desc": [ - "【dense】: Est dense 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_it_IT.json deleted file mode 100644 index 282eaca6e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_it_IT.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "Piastrella della lista", - "info": "Una struttura comune per gli elementi della lista fornita da Flutter, con una struttura sinistra-centro-destra. I componenti possono essere inseriti nelle posizioni corrispondenti, rendendo facile adattarsi a elementi specifici.", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La rappresentazione di base di ListTile è la seguente", - "desc": [ - "【leading】: Componente sinistro 【Widget】", - "【title】: Componente superiore centrale 【Widget】", - "【subtitle】: Componente inferiore centrale 【Widget】", - "【trailing】: Componente finale 【Widget】", - "【contentPadding】: Spaziatura interna 【EdgeInsetsGeometry】", - "【onLongPress】: Evento di clic 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Effetto di selezione e evento di pressione prolungata di ListTile", - "desc": [ - "【selected】: Selezionato 【bool】", - "【onTap】: Evento di clic 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Proprietà di disposizione compatta di ListTile", - "desc": [ - "【dense】: Disposizione compatta 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ja_JP.json deleted file mode 100644 index 86428b005..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ja_JP.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "リストタイル", - "info": "Flutterが提供する一般的なリスト項目構造で、左中右の構造を持っています。対応する位置にコンポーネントを挿入することができ、特定の項目に簡単に対応できます。", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListTileの基本的な表現は以下の通りです", - "desc": [ - "【leading】: 左側のコンポーネント 【Widget】", - "【title】: 中央上部のコンポーネント 【Widget】", - "【subtitle】: 中央下部のコンポーネント 【Widget】", - "【trailing】: 末尾のコンポーネント 【Widget】", - "【contentPadding】: 内側の余白 【EdgeInsetsGeometry】", - "【onLongPress】: クリックイベント 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "ListTileの選択効果と長押しイベント", - "desc": [ - "【selected】: 選択されているかどうか 【bool】", - "【onTap】: クリックイベント 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "ListTileの密排属性", - "desc": [ - "【dense】: 密排かどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ko_KR.json deleted file mode 100644 index 3b4aef742..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ko_KR.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "리스트 타일", - "info": "Flutter에서 제공하는 일반적인 리스트 항목 구조로, 왼쪽, 중앙, 오른쪽 구조를 가지고 있습니다. 해당 위치에 컴포넌트를 삽입할 수 있으며, 특정 항목에 쉽게 대응할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListTile의 기본적인 표현은 다음과 같습니다", - "desc": [ - "【leading】: 왼쪽 컴포넌트 【Widget】", - "【title】: 중앙 상단 컴포넌트 【Widget】", - "【subtitle】: 중앙 하단 컴포넌트 【Widget】", - "【trailing】: 오른쪽 컴포넌트 【Widget】", - "【contentPadding】: 내부 여백 【EdgeInsetsGeometry】", - "【onLongPress】: 클릭 이벤트 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "ListTile 선택 효과 및 길게 누르기 이벤트", - "desc": [ - "【selected】: 선택 여부 【bool】", - "【onTap】: 클릭 이벤트 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "ListTile의 밀집 속성", - "desc": [ - "【dense】: 밀집 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_pt_PT.json deleted file mode 100644 index f73b46a75..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_pt_PT.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "Azulejo de Lista", - "info": "Uma estrutura de item de lista genérica fornecida pelo Flutter, com uma estrutura de esquerda, centro e direita. Componentes podem ser inseridos nas posições correspondentes, o que pode lidar facilmente com itens específicos.", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "A apresentação básica do ListTile é a seguinte", - "desc": [ - "【leading】: Componente esquerdo 【Widget】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【trailing】: Componente final 【Widget】", - "【contentPadding】: Preenchimento interno 【EdgeInsetsGeometry】", - "【onLongPress】: Evento de clique 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Efeito de seleção e evento de pressionamento longo do ListTile", - "desc": [ - "【selected】: Se está selecionado 【bool】", - "【onTap】: Evento de clique 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propriedade de densidade do ListTile", - "desc": [ - "【dense】: Se é denso 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ru_RU.json deleted file mode 100644 index 1ae22bb01..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ru_RU.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "Список плиток", - "info": "Универсальная структура элемента списка, предоставляемая Flutter, имеет структуру слева, по центру и справа. В соответствующие позиции можно вставлять компоненты, что позволяет легко адаптироваться к конкретным элементам.", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное представление ListTile выглядит следующим образом", - "desc": [ - "【leading】: Левый компонент 【Widget】", - "【title】: Верхний центральный компонент 【Widget】", - "【subtitle】: Нижний центральный компонент 【Widget】", - "【trailing】: Правый компонент 【Widget】", - "【contentPadding】: Внутренний отступ 【EdgeInsetsGeometry】", - "【onLongPress】: Событие нажатия 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Эффект выбора и событие долгого нажатия ListTile", - "desc": [ - "【selected】: Выбрано ли 【bool】", - "【onTap】: Событие нажатия 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Свойство плотного расположения ListTile", - "desc": [ - "【dense】: Плотное ли расположение 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_zh-CN.json deleted file mode 100644 index aee1c8456..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_zh-CN.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "列表瓦片", - "info": "Flutter提供的一个通用列表条目结构,为左中右结构。相应位置可插入组件,可以很方便地应对特定的条目。", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListTile的基本表现如下", - "desc": [ - "【leading】: 左侧组件 【Widget】", - "【title】: 中间上组件 【Widget】", - "【subtitle】: 中间下组件 【Widget】", - "【trailing】: 尾组件 【Widget】", - "【contentPadding】: 内边距 【EdgeInsetsGeometry】", - "【onLongPress】: 点击事件 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "ListTile选中效果和长按事件", - "desc": [ - "【selected】: 是否选中 【bool】", - "【onTap】: 点击事件 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "ListTile的密排属性", - "desc": [ - "【dense】: 是否密排 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node1_base.dart deleted file mode 100644 index 7e7f533d8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node1_base.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomListTile extends StatelessWidget { - const CustomListTile({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: ListTile( - leading: Image.asset("assets/images/icon_head.webp"), - title: const Text("以梦为马"), - subtitle: const Text("海子"), - contentPadding: const EdgeInsets.all(5), - trailing: const Icon(Icons.more_vert), - onLongPress: () => Navigator.of(context).pushNamed('AboutMePage'), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node2_select.dart b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node2_select.dart deleted file mode 100644 index 5262e161b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node2_select.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class SelectListTile extends StatefulWidget { - const SelectListTile({Key? key}) : super(key: key); - - @override - _SelectListTileState createState() => _SelectListTileState(); -} - -class _SelectListTileState extends State { - bool _selected = false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: ListTile( - leading: Image.asset("assets/images/icon_head.webp"), - selected: _selected, - title: const Text("以梦为马"), - subtitle: const Text("海子"), - contentPadding: const EdgeInsets.all(5), - trailing: const Icon(Icons.more_vert), - onTap: () => setState(() => _selected = !_selected), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node3_dense.dart b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node3_dense.dart deleted file mode 100644 index 347c420d1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node3_dense.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class DenseListTile extends StatefulWidget { - const DenseListTile({Key? key}) : super(key: key); - - @override - _DenseListTileState createState() => _DenseListTileState(); -} - -class _DenseListTileState extends State { - bool _dense = false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: ListTile( - leading: Image.asset("assets/images/icon_head.webp"), - title: const Text("以梦为马"), - subtitle: const Text("海子"), - selected: false, - contentPadding: const EdgeInsets.all(5), - trailing: const Icon(Icons.more_vert), - dense: _dense, - onTap: () => setState(() => _dense = !_dense), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_de_DE.json deleted file mode 100644 index 0d813b29f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_de_DE.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "Listenkomponente", - "info": "Führende Figur bei der Anzeige von Listen, die mehrere Unterkomponenten aufnehmen kann und über Builder, Separated, Custom usw. konstruiert werden kann. Verfügt über Eigenschaften wie Innenabstand, Umkehrung, Scroll-Controller usw.", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ListView", - "desc": [ - "【children】 : Liste der Unterkomponenten 【List】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Horizontales Scrollen mit ListView", - "desc": [ - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【reverse】 : Umgekehrtes Scrollen 【bool】", - "【shrinkWrap】 : Bei fehlenden Grenzen einwickeln 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "ListView.builder Konstruktion", - "desc": [ - "【itemCount】 : Anzahl der Elemente 【int】", - "【itemBuilder】 : Elementkonstruktor 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "ListView.separated Konstruktion", - "desc": [ - "【separatorBuilder】 : Elementkonstruktor 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_en_US.json deleted file mode 100644 index df175a347..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_en_US.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "List Component", - "info": "The leader in list display, accommodating multiple sub-components, can be constructed through builder, separated, custom, etc. It has properties such as padding, whether to reverse, scroll controller, etc.", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ListView", - "desc": [ - "【children】 : List of child components 【List】", - "【padding】 : Padding 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Horizontal Scrolling of ListView", - "desc": [ - "【scrollDirection】 : Scroll direction 【Axis】", - "【reverse】 : Whether to scroll in reverse 【bool】", - "【shrinkWrap】 : Whether to wrap when unbounded 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "ListView.builder Construction", - "desc": [ - "【itemCount】 : Number of items 【int】", - "【itemBuilder】 : Item builder 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "ListView.separated Construction", - "desc": [ - "【separatorBuilder】 : Item builder 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_es_ES.json deleted file mode 100644 index 77fe43fed..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_es_ES.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "Componente de lista", - "info": "El líder en la visualización de listas, capaz de contener múltiples componentes hijos, puede construirse mediante builder, separated, custom, etc. Tiene propiedades como el relleno interno, si es inverso, el controlador de desplazamiento, etc.", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ListView", - "desc": [ - "【children】 : Lista de componentes hijos 【List】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Desplazamiento horizontal de ListView", - "desc": [ - "【scrollDirection】 : Dirección de desplazamiento 【Axis】", - "【reverse】 : Si el desplazamiento es inverso 【bool】", - "【shrinkWrap】 : Si se envuelve cuando no hay límites 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "Construcción de ListView.builder", - "desc": [ - "【itemCount】 : Número de elementos 【int】", - "【itemBuilder】 : Constructor de elementos 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "Construcción de ListView.separated", - "desc": [ - "【separatorBuilder】 : Constructor de elementos 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_fr_FR.json deleted file mode 100644 index c376522b0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_fr_FR.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "Composant de liste", - "info": "Le leader de l'affichage de listes, contenant plusieurs sous-composants, peut être construit via builder, separated, custom, etc. Possède des attributs tels que le padding, la direction inverse, le contrôleur de défilement, etc.", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ListView", - "desc": [ - "【children】 : Liste des sous-composants 【List】", - "【padding】 : Padding 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Défilement horizontal de ListView", - "desc": [ - "【scrollDirection】 : Direction de défilement 【Axis】", - "【reverse】 : Défilement inverse 【bool】", - "【shrinkWrap】 : Enveloppe sans limite 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "Construction de ListView.builder", - "desc": [ - "【itemCount】 : Nombre d'éléments 【int】", - "【itemBuilder】 : Constructeur d'éléments 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "Construction de ListView.separated", - "desc": [ - "【separatorBuilder】 : Constructeur d'éléments 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_it_IT.json deleted file mode 100644 index 2e4d601aa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_it_IT.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "Componente Lista", - "info": "Leader nella visualizzazione delle liste, contiene più componenti figli, può essere costruito con builder, separated, custom, ecc. Ha proprietà come padding, reverse, controller di scorrimento, ecc.", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di ListView", - "desc": [ - "【children】 : Lista dei componenti figli 【List】", - "【padding】 : Padding interno 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Scorrimento orizzontale di ListView", - "desc": [ - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【reverse】 : Scorrimento inverso 【bool】", - "【shrinkWrap】 : Avvolgere quando non ci sono confini 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "Costruzione di ListView.builder", - "desc": [ - "【itemCount】 : Numero di elementi 【int】", - "【itemBuilder】 : Costruttore di elementi 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "Costruzione di ListView.separated", - "desc": [ - "【separatorBuilder】 : Costruttore di elementi 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ja_JP.json deleted file mode 100644 index 6b1e00e9b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ja_JP.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "リストコンポーネント", - "info": "リスト表示のリーダーであり、複数の子コンポーネントを収容し、builder、separated、customなどを介して構築できます。内側の余白、反転の有無、スクロールコントローラーなどの属性があります。", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListViewの基本使用", - "desc": [ - "【children】 : 子コンポーネントリスト 【List】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "ListViewの横方向スクロール", - "desc": [ - "【scrollDirection】 : スクロール方向 【Axis】", - "【reverse】 : 反転スクロールの有無 【bool】", - "【shrinkWrap】 : 境界がない場合にラップするかどうか 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "ListView.builderの構築", - "desc": [ - "【itemCount】 : アイテムの数 【int】", - "【itemBuilder】 : アイテムビルダー 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "ListView.separatedの構築", - "desc": [ - "【separatorBuilder】 : アイテムビルダー 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ko_KR.json deleted file mode 100644 index 3eea3377d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ko_KR.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "리스트 컴포넌트", - "info": "리스트 표시의 선두주자로, 여러 하위 컴포넌트를 수용할 수 있으며 builder, separated, custom 등을 통해 구성할 수 있습니다. 내부 여백, 반대 방향 여부, 스크롤 컨트롤러 등의 속성이 있습니다.", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListView 기본 사용", - "desc": [ - "【children】 : 하위 컴포넌트 리스트 【List】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "ListView 가로 스크롤", - "desc": [ - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【reverse】 : 반대 방향 스크롤 여부 【bool】", - "【shrinkWrap】 : 경계가 없을 때 감싸기 여부 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "ListView.builder 구성", - "desc": [ - "【itemCount】 : 항목 개수 【int】", - "【itemBuilder】 : 항목 빌더 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "ListView.separated 구성", - "desc": [ - "【separatorBuilder】 : 항목 빌더 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_pt_PT.json deleted file mode 100644 index 695d74854..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_pt_PT.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "Componente de Lista", - "info": "O líder na exibição de listas, acomoda vários subcomponentes, pode ser construído através de builder, separated, custom, etc. Possui atributos como padding, reversão, controlador de deslizamento, etc.", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do ListView", - "desc": [ - "【children】 : Lista de subcomponentes 【List】", - "【padding】 : Padding 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Deslizamento horizontal do ListView", - "desc": [ - "【scrollDirection】 : Direção de deslizamento 【Axis】", - "【reverse】 : Deslizamento reverso 【bool】", - "【shrinkWrap】 : Envolver quando sem limites 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "Construção do ListView.builder", - "desc": [ - "【itemCount】 : Número de itens 【int】", - "【itemBuilder】 : Construtor de itens 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "Construção do ListView.separated", - "desc": [ - "【separatorBuilder】 : Construtor de itens 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ru_RU.json deleted file mode 100644 index 5999aa8ef..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ru_RU.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "Компонент списка", - "info": "Лидер в отображении списков, вмещает несколько дочерних компонентов, может быть построен с помощью builder, separated, custom и других. Имеет такие свойства, как внутренние отступы, обратное направление, контроллер прокрутки и другие.", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ListView", - "desc": [ - "【children】 : Список дочерних компонентов 【List】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Горизонтальная прокрутка ListView", - "desc": [ - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【reverse】 : Обратное направление прокрутки 【bool】", - "【shrinkWrap】 : Обернуть ли при отсутствии границ 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "Конструкция ListView.builder", - "desc": [ - "【itemCount】 : Количество элементов 【int】", - "【itemBuilder】 : Конструктор элементов 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "Конструкция ListView.separated", - "desc": [ - "【separatorBuilder】 : Конструктор элементов 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_zh-CN.json deleted file mode 100644 index c3e9400b1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_zh-CN.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "列表组件", - "info": "列表显示的领军人物,容纳多个子组件,可以通过builder、separated、custom等构造。有内边距、是否反向、滑动控制器等属性。", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListView基本使用", - "desc": [ - "【children】 : 子组件列表 【List】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "ListView横向滑动", - "desc": [ - "【scrollDirection】 : 滑动方向 【Axis】", - "【reverse】 : 是否反向滑动 【bool】", - "【shrinkWrap】 : 无边界时是否包裹 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "ListView.builder构造", - "desc": [ - "【itemCount】 : 条目个数 【int】", - "【itemBuilder】 : 条目构造器 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "ListView.separated构造", - "desc": [ - "【separatorBuilder】 : 条目构造器 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/ListView/node1_base.dart deleted file mode 100644 index a6c2a115c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/node1_base.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-27 -/// contact me by email 1981462002@qq.com - -class CustomListView extends StatelessWidget { - const CustomListView({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - TextStyle get textStyle => const TextStyle( - color: Colors.white, - shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ], - ); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ListView( - padding: const EdgeInsets.symmetric(horizontal: 5), - children: data - .map((color) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - )) - .toList(), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/node2_direction.dart b/modules/widget_system/widgets/lib/StatelessWidget/ListView/node2_direction.dart deleted file mode 100644 index ff9458e07..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/node2_direction.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class HorizontalListView extends StatelessWidget { - const HorizontalListView({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - TextStyle get textStyle => const TextStyle( - color: Colors.white, - shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ], - ); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ListView( - reverse: true, - shrinkWrap: true, - scrollDirection: Axis.horizontal, - children: data - .map((color) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - )) - .toList(), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/node3_builder.dart b/modules/widget_system/widgets/lib/StatelessWidget/ListView/node3_builder.dart deleted file mode 100644 index b479f73fc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/node3_builder.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class BuilderListView extends StatelessWidget { - const BuilderListView({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ListView.builder( - itemCount: data.length, - itemBuilder: (context, index) => _buildItem(data[index]), - ), - ); - } - - TextStyle get textStyle => const TextStyle( - color: Colors.white, - shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ], - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - Widget _buildItem(Color color) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/node4_separated.dart b/modules/widget_system/widgets/lib/StatelessWidget/ListView/node4_separated.dart deleted file mode 100644 index 8ccca75a9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/node4_separated.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class SeparatedListView extends StatelessWidget { - const SeparatedListView({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ListView.separated( - separatorBuilder: (context, index) => const Divider( - thickness: 1, - height: 1, - color: Colors.orange, - ), - itemCount: data.length, - itemBuilder: (context, index) => _buildItem(data[index]), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - TextStyle get textStyle => const TextStyle( - color: Colors.white, - shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ], - ); - - Widget _buildItem(Color color) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - ); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_de_DE.json deleted file mode 100644 index 2ade155c9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "Ereignis-Listener", - "info": "Der Listener für Komponentenereignisse kann Ereignisse wie Drücken, Loslassen, Bewegen, Abbrechen usw. akzeptieren. Im Vergleich zu GestureDetector ist es primitiver und kann mehr Informationen liefern.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Listener-Ereignisse", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onPointerDown】 : Drücken-Ereignis 【Function(PointerDownEvent)】", - "【onPointerMove】 : Bewegen-Ereignis 【Function(PointerMoveEvent)】", - "【onPointerMove】 : Loslassen-Ereignis 【Function(PointerUpEvent)】", - "【onPointerCancel】 : Abbrechen-Ereignis 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_en_US.json deleted file mode 100644 index 143fa9e1a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "Event Listener", - "info": "A listener for component events, which can accept events such as press, release, move, cancel, etc. It is more primitive compared to GestureDetector and can obtain more information.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Events of Listener", - "desc": [ - "【child】 : Child component 【Widget】", - "【onPointerDown】 : Press event 【Function(PointerDownEvent)】", - "【onPointerMove】 : Move event 【Function(PointerMoveEvent)】", - "【onPointerMove】 : Release event 【Function(PointerUpEvent)】", - "【onPointerCancel】 : Cancel event 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_es_ES.json deleted file mode 100644 index a601b4c23..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "Escuchador de eventos", - "info": "Escuchador de eventos de componentes, puede aceptar eventos como presionar, soltar, mover, cancelar, etc. Es más primitivo en comparación con GestureDetector y puede obtener más información.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos básicos de Listener", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onPointerDown】 : Evento de presionar 【Function(PointerDownEvent)】", - "【onPointerMove】 : Evento de mover 【Function(PointerMoveEvent)】", - "【onPointerMove】 : Evento de soltar 【Function(PointerUpEvent)】", - "【onPointerCancel】 : Evento de cancelar 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_fr_FR.json deleted file mode 100644 index 9fc559376..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "Écouteur d'événements", - "info": "Un écouteur d'événements pour les composants, capable de recevoir des événements tels que l'appui, le relâchement, le déplacement et l'annulation. Plus primitif que GestureDetector, il permet d'obtenir plus d'informations.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événements de base de Listener", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onPointerDown】 : Événement d'appui 【Function(PointerDownEvent)】", - "【onPointerMove】 : Événement de déplacement 【Function(PointerMoveEvent)】", - "【onPointerMove】 : Événement de relâchement 【Function(PointerUpEvent)】", - "【onPointerCancel】 : Événement d'annulation 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_it_IT.json deleted file mode 100644 index 727234e7e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "Ascoltatore di eventi", - "info": "Un ascoltatore di eventi del componente, può accettare eventi come premere, rilasciare, muovere, annullare, ecc. Rispetto a GestureDetector è più primitivo e può ottenere più informazioni.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventi di base di Listener", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onPointerDown】 : Evento di pressione 【Function(PointerDownEvent)】", - "【onPointerMove】 : Evento di movimento 【Function(PointerMoveEvent)】", - "【onPointerMove】 : Evento di rilascio 【Function(PointerUpEvent)】", - "【onPointerCancel】 : Evento di annullamento 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ja_JP.json deleted file mode 100644 index bed58802a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "イベントリスナー", - "info": "コンポーネントイベントのリスナーで、押下、離す、移動、キャンセルなどのイベントを受け取ることができます。GestureDetectorと比較して原始的で、より多くの情報を取得できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Listener基本イベント", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onPointerDown】 : 押下イベント 【Function(PointerDownEvent)】", - "【onPointerMove】 : 移動イベント 【Function(PointerMoveEvent)】", - "【onPointerMove】 : 離すイベント 【Function(PointerUpEvent)】", - "【onPointerCancel】 : キャンセルイベント 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ko_KR.json deleted file mode 100644 index 51d4280fa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "이벤트 리스너", - "info": "컴포넌트 이벤트의 리스너로, 누름, 놓음, 이동, 취소 등의 이벤트를 수신할 수 있습니다. GestureDetector보다 원시적이며, 더 많은 정보를 얻을 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Listener 기본 이벤트", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【onPointerDown】 : 누름 이벤트 【Function(PointerDownEvent)】", - "【onPointerMove】 : 이동 이벤트 【Function(PointerMoveEvent)】", - "【onPointerMove】 : 놓음 이벤트 【Function(PointerUpEvent)】", - "【onPointerCancel】 : 취소 이벤트 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_pt_PT.json deleted file mode 100644 index 9902d2163..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "Ouvinte de Eventos", - "info": "Ouvinte de eventos do componente, pode aceitar eventos como pressionar, soltar, mover, cancelar, etc. Comparado ao GestureDetector, é mais primitivo e pode obter mais informações.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos Básicos do Listener", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onPointerDown】 : Evento de pressionar 【Function(PointerDownEvent)】", - "【onPointerMove】 : Evento de mover 【Function(PointerMoveEvent)】", - "【onPointerMove】 : Evento de soltar 【Function(PointerUpEvent)】", - "【onPointerCancel】 : Evento de cancelar 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ru_RU.json deleted file mode 100644 index 2a43cf615..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "Слушатель событий", - "info": "Слушатель событий компонента, который может принимать события нажатия, отпускания, перемещения, отмены и т.д. Более примитивен, чем GestureDetector, но предоставляет больше информации.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основные события Listener", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onPointerDown】 : Событие нажатия 【Function(PointerDownEvent)】", - "【onPointerMove】 : Событие перемещения 【Function(PointerMoveEvent)】", - "【onPointerMove】 : Событие отпускания 【Function(PointerUpEvent)】", - "【onPointerCancel】 : Событие отмены 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_zh-CN.json deleted file mode 100644 index 8053c35af..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "事件监听器", - "info": "组件事件的监听器,可接受按下、松开、移动、取消等事件。较GestureDetector比较原始,可获取的信息也更多。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Listener基本事件", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onPointerDown】 : 按下事件 【Function(PointerDownEvent)】", - "【onPointerMove】 : 移动事件 【Function(PointerMoveEvent)】", - "【onPointerMove】 : 抬起事件 【Function(PointerUpEvent)】", - "【onPointerCancel】 : 取消事件 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Listener/node1_base.dart deleted file mode 100644 index f302a3eb0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/node1_base.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class CustomListener extends StatefulWidget { - const CustomListener({Key? key}) : super(key: key); - - @override - _CustomListenerState createState() => _CustomListenerState(); -} - -class _CustomListenerState extends State { - String _info = ''; - - @override - Widget build(BuildContext context) { - return Listener( - onPointerDown: (detail) => setState(() => _info = detail.toString()), - onPointerMove: (detail) => setState(() => _info = detail.toString()), - onPointerUp: (detail) => setState(() => _info = detail.toString()), - onPointerCancel: (detail) => setState(() => _info = detail.toString()), - - child: Container( - alignment: Alignment.center, - width: 300, - height: 300 * 0.618, - color: Colors.grey.withAlpha(33), - child: Text( - _info, - style: const TextStyle(fontSize: 16, color: Colors.blue), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_de_DE.json deleted file mode 100644 index 30fb3fcb7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_de_DE.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "Banner-Komponente", - "info": "Materialstil Banner-Komponente, unterstützt links-mitte-rechts oder links-mitte-unten Struktur, kann Ränder, Hintergrundfarbe usw. angeben", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "Verwendung von MaterialBanner in einer Zeile", - "desc": [ - "【content】 : Mittlere Komponente 【Widget】", - "【leading】: Linke Komponente 【Widget】", - "【actions】: Liste der rechten Komponenten 【List】", - "【padding】: Innenabstand 【EdgeInsetsGeometry】", - "【forceActionsBelow】: Ob die Schaltflächen unten sind 【bool】", - "【backgroundColor】: Hintergrundfarbe 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "Verwendung von MaterialBanner in zwei Zeilen", - "desc": [ - "【contentTextStyle】: Stil der mittleren Position 【TextStyle】", - "【leadingPadding】: Rand der linken Komponente 【EdgeInsetsGeometry】", - "Wenn die Anzahl der Endkomponenten größer als 1 ist, ist die Struktur der Komponente links-mitte-unten." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_en_US.json deleted file mode 100644 index ceb877a36..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_en_US.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "Banner Component", - "info": "A Material-style banner component that supports left-center-right or left-center-bottom structures, and allows specifying margins, background colors, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "Usage of MaterialBanner in a Single Line", - "desc": [ - "【content】: Middle component 【Widget】", - "【leading】: Left component 【Widget】", - "【actions】: List of right components 【List】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【forceActionsBelow】: Whether buttons are below 【bool】", - "【backgroundColor】: Background color 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "Usage of MaterialBanner in Two Lines", - "desc": [ - "【contentTextStyle】: Style for the middle position 【TextStyle】", - "【leadingPadding】: Padding for the left component 【EdgeInsetsGeometry】", - "When the number of trailing components is greater than 1, the component structure is left-center-bottom." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_es_ES.json deleted file mode 100644 index e17431713..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_es_ES.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "Componente de banner", - "info": "Componente de banner de estilo Material, compatible con estructuras de izquierda, centro, derecha o izquierda, centro, abajo, y permite especificar márgenes, colores de fondo, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "Uso de MaterialBanner en una fila", - "desc": [ - "【content】 : Componente central 【Widget】", - "【leading】: Componente izquierdo 【Widget】", - "【actions】: Lista de componentes derechos 【List】", - "【padding】: Relleno interno 【EdgeInsetsGeometry】", - "【forceActionsBelow】: Si los botones están abajo 【bool】", - "【backgroundColor】: Color de fondo 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "Uso de MaterialBanner en dos filas", - "desc": [ - "【contentTextStyle】: Estilo de la posición central 【TextStyle】", - "【leadingPadding】: Márgenes del componente izquierdo 【EdgeInsetsGeometry】", - "Cuando el número de componentes en la cola es mayor que 1, la estructura del componente es izquierda, centro, abajo." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_fr_FR.json deleted file mode 100644 index 5a3856d3e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_fr_FR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "Composant de bannière", - "info": "Composant de bannière de style Material, prenant en charge les structures gauche-centre-droite ou gauche-centre-bas, peut spécifier les marges, la couleur de fond, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "Utilisation d'une ligne de MaterialBanner", - "desc": [ - "【content】 : Composant central 【Widget】", - "【leading】: Composant gauche 【Widget】", - "【actions】: Liste des composants droits 【List】", - "【padding】: Marge intérieure 【EdgeInsetsGeometry】", - "【forceActionsBelow】: Si les boutons sont en bas 【bool】", - "【backgroundColor】: Couleur de fond 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "Utilisation de deux lignes de MaterialBanner", - "desc": [ - "【contentTextStyle】: Style de la position centrale 【TextStyle】", - "【leadingPadding】: Marge du composant gauche 【EdgeInsetsGeometry】", - "Lorsque le nombre de composants de fin est supérieur à 1, la structure du composant est gauche-centre-bas." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_it_IT.json deleted file mode 100644 index 905bb35a1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_it_IT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "Componente Banner", - "info": "Componente banner in stile Material, supporta strutture sinistra-centro-destra o sinistra-centro-basso, può specificare margini, colore di sfondo, ecc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "Uso di MaterialBanner su una riga", - "desc": [ - "【content】 : Componente centrale 【Widget】", - "【leading】: Componente sinistro 【Widget】", - "【actions】: Lista dei componenti destri 【List】", - "【padding】: Spaziatura interna 【EdgeInsetsGeometry】", - "【forceActionsBelow】: Se i pulsanti sono in basso 【bool】", - "【backgroundColor】: Colore di sfondo 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "Uso di MaterialBanner su due righe", - "desc": [ - "【contentTextStyle】: Stile della posizione centrale 【TextStyle】", - "【leadingPadding】: Margine del componente sinistro 【EdgeInsetsGeometry】", - "Quando il numero di componenti di coda è maggiore di 1, la struttura del componente è sinistra-centro-basso." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ja_JP.json deleted file mode 100644 index 6757a59d4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ja_JP.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "バナーコンポーネント", - "info": "Materialスタイルのバナーコンポーネントで、左中右または左中下の構造をサポートし、余白や背景色などを指定できます", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "MaterialBanner一行の使用", - "desc": [ - "【content】 : 中間コンポーネント 【Widget】", - "【leading】: 左側コンポーネント 【Widget】", - "【actions】: 右側コンポーネントリスト 【List】", - "【padding】: 内側の余白 【EdgeInsetsGeometry】", - "【forceActionsBelow】: ボタンを下に配置するかどうか 【bool】", - "【backgroundColor】: 背景色 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "MaterialBanner二行の使用", - "desc": [ - "【contentTextStyle】: 中間位置のスタイル 【TextStyle】", - "【leadingPadding】: 左側コンポーネントの余白 【EdgeInsetsGeometry】", - "末尾のコンポーネント数が1より多い場合、このコンポーネントの構造は左中下になります。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ko_KR.json deleted file mode 100644 index 8451bdd41..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ko_KR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "배너 컴포넌트", - "info": "Material 스타일의 배너 컴포넌트, 좌중우 또는 좌중하 구조를 지원하며, 여백 및 배경색 등을 지정할 수 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "MaterialBanner 한 줄 사용", - "desc": [ - "【content】 : 중간 컴포넌트 【Widget】", - "【leading】: 왼쪽 컴포넌트 【Widget】", - "【actions】: 오른쪽 컴포넌트 리스트 【List】", - "【padding】: 안쪽 여백 【EdgeInsetsGeometry】", - "【forceActionsBelow】: 버튼이 아래에 있는지 여부 【bool】", - "【backgroundColor】: 배경색 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "MaterialBanner 두 줄 사용", - "desc": [ - "【contentTextStyle】: 중간 위치 스타일 【TextStyle】", - "【leadingPadding】: 왼쪽 컴포넌트 여백 【EdgeInsetsGeometry】", - "꼬리 컴포넌트 수가 1보다 크면, 이 컴포넌트 구조는 좌중하입니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_pt_PT.json deleted file mode 100644 index 6875665c1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_pt_PT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "Componente de Banner", - "info": "Componente de banner no estilo Material, suporta estruturas esquerda-centro-direita ou esquerda-centro-abaixo, pode especificar margens, cor de fundo, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "Uso de uma linha do MaterialBanner", - "desc": [ - "【content】: Componente do meio 【Widget】", - "【leading】: Componente esquerdo 【Widget】", - "【actions】: Lista de componentes direitos 【List】", - "【padding】: Margem interna 【EdgeInsetsGeometry】", - "【forceActionsBelow】: Se os botões estão abaixo 【bool】", - "【backgroundColor】: Cor de fundo 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "Uso de duas linhas do MaterialBanner", - "desc": [ - "【contentTextStyle】: Estilo da posição central 【TextStyle】", - "【leadingPadding】: Margem do componente esquerdo 【EdgeInsetsGeometry】", - "Quando o número de componentes finais é maior que 1, a estrutura do componente é esquerda-centro-abaixo." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ru_RU.json deleted file mode 100644 index 9c6300b4e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ru_RU.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "Компонент баннера", - "info": "Компонент баннера в стиле Material, поддерживает структуру слева-в центре-справа или слева-в центре-снизу, можно указать отступы, цвет фона и т.д.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "Использование MaterialBanner в одну строку", - "desc": [ - "【content】 : Центральный компонент 【Widget】", - "【leading】: Левый компонент 【Widget】", - "【actions】: Список правых компонентов 【List】", - "【padding】: Внутренние отступы 【EdgeInsetsGeometry】", - "【forceActionsBelow】: Кнопки внизу 【bool】", - "【backgroundColor】: Цвет фона 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "Использование MaterialBanner в две строки", - "desc": [ - "【contentTextStyle】: Стиль центральной позиции 【TextStyle】", - "【leadingPadding】: Отступ левого компонента 【EdgeInsetsGeometry】", - "Когда количество конечных компонентов больше 1, структура компонента становится слева-в центре-снизу." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_zh-CN.json deleted file mode 100644 index d4af77e03..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_zh-CN.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "横幅组件", - "info": "Material风格的横幅组件,支持左中右或左中下结构,可指定边距背景色等", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "MaterialBanner一行的使用", - "desc": [ - "【content】 : 中间组件 【Widget】", - "【leading】: 左侧组件 【Widget】", - "【actions】: 右侧组件列表 【List】", - "【padding】: 内边距 【EdgeInsetsGeometry】", - "【forceActionsBelow】: 是否按钮在下方 【bool】", - "【backgroundColor】: 背景色 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "MaterialBanner两行的使用", - "desc": [ - "【contentTextStyle】: 中间位置样式 【TextStyle】", - "【leadingPadding】: 左侧组件边距 【EdgeInsetsGeometry】", - "当尾部组件数量大于1,该组件结构为左中下。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/node1_one_btn.dart b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/node1_one_btn.dart deleted file mode 100644 index 9d1223666..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/node1_one_btn.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/21 -/// contact me by email 1981462002@qq.com - -class MaterialBannerDemo extends StatelessWidget { - const MaterialBannerDemo({Key? key}) : super(key: key); - - final String info = 'Welcome to Flutter Unit!'; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - MaterialBanner( - content: Text( - info, - style: const TextStyle(color: Colors.white), - ), - backgroundColor: Colors.purple, - leading: const Icon(Icons.info, color: Colors.lightBlueAccent), - padding: const EdgeInsetsDirectional.only(start: 16.0, top: 2.0), - forceActionsBelow: false, - // 默认false - actions: const [ - Text( - 'I KNOW', - style: TextStyle( - color: Colors.orange, - fontWeight: FontWeight.bold, - fontSize: 14), - ) - ], - )], - ); - } - -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/node2_two_btn.dart b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/node2_two_btn.dart deleted file mode 100644 index d2fe347e5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/node2_two_btn.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/21 -/// contact me by email 1981462002@qq.com - -class MaterialBannerDemoTwo extends StatelessWidget { - const MaterialBannerDemoTwo({Key? key}) : super(key: key); - - final String info = - 'A banner displays an important, succinct message, and provides actions for users to address. ' - 'A user action is required for itto be dismissed.'; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - MaterialBanner( - content: Text( - info, - style: const TextStyle(color: Colors.white), - ), - backgroundColor: Colors.purple, - leading: const Icon(Icons.warning, color: Colors.yellow), - padding: - const EdgeInsetsDirectional.only(start: 16.0, top: 2.0, end: 2), - leadingPadding: const EdgeInsetsDirectional.only(end: 16.0), - actions: [ - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.white, - ), - onPressed: () {}, - child: const Text( - 'I KNOW', - style: TextStyle( - color: Colors.purple, - fontWeight: FontWeight.bold, - fontSize: 14), - ), - ), - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.white, - ), - onPressed: () {}, - child: const Text( - 'I IGNORE', - style: TextStyle( - color: Colors.purple, - fontWeight: FontWeight.bold, - fontSize: 14), - ), - ), - ], - )], - ); - } - -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_de_DE.json deleted file mode 100644 index 01da8b87c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_de_DE.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "Material-Schaltfläche", - "info": "Eine allgemeine Material-Schaltfläche, die auf RawMaterialButton basiert. Kann ein Unterelement enthalten, kann Farbe, Form usw. definieren und kann Klick- und Long-Press-Ereignisse empfangen.", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialButton Klick-Ereignis", - "desc": [ - "【color】: Farbe 【Color】", - "【splashColor】: Wasserwellenfarbe 【Color】", - "【height】: Höhe 【double】", - "【elevation】: Schattentiefe 【double】", - "【child】: Unterelement 【Widget】", - "【textColor】: Textfarbe des Unterelements 【Color】", - "【highlightColor】: Hervorhebungsfarbe bei langem Drücken 【Color】", - "【padding】: Innenabstand 【EdgeInsetsGeometry】", - "【onPressed】: Klick-Ereignis 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "MaterialButton Long-Press-Ereignis", - "desc": [ - "【highlightColor】: Hervorhebungsfarbe bei langem Drücken 【Color】", - "【onLongPress】: Long-Press-Ereignis 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Benutzerdefinierte Form der MaterialButton", - "desc": [ - "【shape】: Form 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_en_US.json deleted file mode 100644 index b9c3470ee..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_en_US.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "Material Button", - "info": "A general Material button implemented based on RawMaterialButton. It can contain a child component, define colors, shapes, etc., and can receive click and long press events.", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialButton Click Event", - "desc": [ - "【color】: Color 【Color】", - "【splashColor】: Ripple Color 【Color】", - "【height】: Height 【double】", - "【elevation】: Elevation 【double】", - "【child】: Child Component 【Widget】", - "【textColor】: Child Component Text Color 【Color】", - "【highlightColor】: Long Press Highlight Color 【Color】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【onPressed】: Click Event 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "MaterialButton Long Press Event", - "desc": [ - "【highlightColor】: Long Press Highlight Color 【Color】", - "【onLongPress】: Long Press Event 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "MaterialButton Custom Shape", - "desc": [ - "【shape】: Shape 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_es_ES.json deleted file mode 100644 index afd5833aa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_es_ES.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "Botón de Material", - "info": "Botón de Material genérico implementado basado en RawMaterialButton. Puede contener un componente hijo, puede definir colores, formas, etc., y puede recibir eventos de clic y pulsación prolongada.", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clic de MaterialButton", - "desc": [ - "【color】: Color 【Color】", - "【splashColor】: Color de efecto de ondas 【Color】", - "【height】: Altura 【double】", - "【elevation】: Profundidad de sombra 【double】", - "【child】: Componente hijo 【Widget】", - "【textColor】: Color del texto del componente hijo 【Color】", - "【highlightColor】: Color de resaltado al pulsar prolongadamente 【Color】", - "【padding】: Relleno interno 【EdgeInsetsGeometry】", - "【onPressed】: Evento de clic 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "Evento de pulsación prolongada de MaterialButton", - "desc": [ - "【highlightColor】: Color de resaltado al pulsar prolongadamente 【Color】", - "【onLongPress】: Evento de pulsación prolongada 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Forma personalizada de MaterialButton", - "desc": [ - "【shape】: Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_fr_FR.json deleted file mode 100644 index 3f348033d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_fr_FR.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "Bouton Matériel", - "info": "Bouton Matériel générique basé sur RawMaterialButton. Peut contenir un composant enfant, peut définir des couleurs, des formes, etc., et peut recevoir des événements de clic et de pression longue.", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événement de clic de MaterialButton", - "desc": [ - "【color】: Couleur 【Color】", - "【splashColor】: Couleur de l'effet de vague 【Color】", - "【height】: Hauteur 【double】", - "【elevation】: Profondeur de l'ombre 【double】", - "【child】: Composant enfant 【Widget】", - "【textColor】: Couleur du texte du composant enfant 【Color】", - "【highlightColor】: Couleur de surbrillance lors d'une pression longue 【Color】", - "【padding】: Marge intérieure 【EdgeInsetsGeometry】", - "【onPressed】: Événement de clic 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "Événement de pression longue de MaterialButton", - "desc": [ - "【highlightColor】: Couleur de surbrillance lors d'une pression longue 【Color】", - "【onLongPress】: Événement de pression longue 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Forme personnalisée de MaterialButton", - "desc": [ - "【shape】: Forme 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_it_IT.json deleted file mode 100644 index 598096884..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_it_IT.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "Pulsante Material", - "info": "Un pulsante Material generico implementato sulla base di RawMaterialButton. Può contenere un componente figlio, può definire colori, forme e altre rappresentazioni, e può ricevere eventi di clic e pressione prolungata.", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento di clic di MaterialButton", - "desc": [ - "【color】: Colore 【Color】", - "【splashColor】: Colore dell'effetto a increspatura 【Color】", - "【height】: Altezza 【double】", - "【elevation】: Profondità dell'ombra 【double】", - "【child】: Componente figlio 【Widget】", - "【textColor】: Colore del testo del componente figlio 【Color】", - "【highlightColor】: Colore di evidenziazione durante la pressione prolungata 【Color】", - "【padding】: Spaziatura interna 【EdgeInsetsGeometry】", - "【onPressed】: Evento di clic 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "Evento di pressione prolungata di MaterialButton", - "desc": [ - "【highlightColor】: Colore di evidenziazione durante la pressione prolungata 【Color】", - "【onLongPress】: Evento di pressione prolungata 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Forma personalizzata di MaterialButton", - "desc": [ - "【shape】: Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ja_JP.json deleted file mode 100644 index 2ced61863..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ja_JP.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "マテリアルボタン", - "info": "RawMaterialButtonをベースにした汎用Materialボタンです。子コンポーネントを保持でき、色や形状などの表現を定義でき、クリックや長押しイベントを受け取ることができます。", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialButtonクリックイベント", - "desc": [ - "【color】: 色 【Color】", - "【splashColor】: 波紋色 【Color】", - "【height】: 高さ 【double】", - "【elevation】: 影の深さ 【double】", - "【child】: 子コンポーネント 【Widget】", - "【textColor】: 子コンポーネントのテキスト色 【Color】", - "【highlightColor】: 長押しハイライト色 【Color】", - "【padding】: パディング 【EdgeInsetsGeometry】", - "【onPressed】: クリックイベント 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "MaterialButton長押しイベント", - "desc": [ - "【highlightColor】: 長押しハイライト色 【Color】", - "【onLongPress】: 長押しイベント 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "MaterialButtonのカスタム形状", - "desc": [ - "【shape】: 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ko_KR.json deleted file mode 100644 index a2ea29180..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ko_KR.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "재료 버튼", - "info": "RawMaterialButton를 기반으로 구현된 일반 Material 버튼입니다. 하나의 자식 위젯을 포함할 수 있으며, 색상, 모양 등을 정의할 수 있고, 클릭 및 길게 누르기 이벤트를 받을 수 있습니다.", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialButton 클릭 이벤트", - "desc": [ - "【color】: 색상 【Color】", - "【splashColor】: 물결 효과 색상 【Color】", - "【height】: 높이 【double】", - "【elevation】: 그림자 깊이 【double】", - "【child】: 자식 위젯 【Widget】", - "【textColor】: 자식 위젯 텍스트 색상 【Color】", - "【highlightColor】: 길게 누를 때 강조 색상 【Color】", - "【padding】: 안쪽 여백 【EdgeInsetsGeometry】", - "【onPressed】: 클릭 이벤트 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "MaterialButton 길게 누르기 이벤트", - "desc": [ - "【highlightColor】: 길게 누를 때 강조 색상 【Color】", - "【onLongPress】: 길게 누르기 이벤트 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "MaterialButton의 사용자 정의 모양", - "desc": [ - "【shape】: 모양 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_pt_PT.json deleted file mode 100644 index b6784cc2f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_pt_PT.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "Botão de Material", - "info": "Botão Material genérico implementado com base no RawMaterialButton. Pode conter um componente filho, permite definir cor, forma e outras aparências, e pode receber eventos de clique e pressão longa.", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clique do MaterialButton", - "desc": [ - "【color】: Cor 【Color】", - "【splashColor】: Cor do efeito de ondulação 【Color】", - "【height】: Altura 【double】", - "【elevation】: Profundidade da sombra 【double】", - "【child】: Componente filho 【Widget】", - "【textColor】: Cor do texto do componente filho 【Color】", - "【highlightColor】: Cor de destaque ao pressionar 【Color】", - "【padding】: Preenchimento interno 【EdgeInsetsGeometry】", - "【onPressed】: Evento de clique 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "Evento de pressão longa do MaterialButton", - "desc": [ - "【highlightColor】: Cor de destaque ao pressionar 【Color】", - "【onLongPress】: Evento de pressão longa 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Forma personalizada do MaterialButton", - "desc": [ - "【shape】: Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ru_RU.json deleted file mode 100644 index de0df3d5f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ru_RU.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "Материальная кнопка", - "info": "Универсальная Material кнопка, реализованная на основе RawMaterialButton. Может содержать дочерний компонент, позволяет определять цвет, форму и другие характеристики, может принимать события нажатия и длительного нажатия.", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Событие нажатия MaterialButton", - "desc": [ - "【color】: Цвет 【Color】", - "【splashColor】: Цвет водяного эффекта 【Color】", - "【height】: Высота 【double】", - "【elevation】: Глубина тени 【double】", - "【child】: Дочерний компонент 【Widget】", - "【textColor】: Цвет текста дочернего компонента 【Color】", - "【highlightColor】: Цвет подсветки при длительном нажатии 【Color】", - "【padding】: Внутренний отступ 【EdgeInsetsGeometry】", - "【onPressed】: Событие нажатия 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "Событие длительного нажатия MaterialButton", - "desc": [ - "【highlightColor】: Цвет подсветки при длительном нажатии 【Color】", - "【onLongPress】: Событие длительного нажатия 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Пользовательская форма MaterialButton", - "desc": [ - "【shape】: Форма 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_zh-CN.json deleted file mode 100644 index 649b27fec..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_zh-CN.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "材料按钮", - "info": "基于RawMaterialButton实现的通用Material按钮。可盛放一个子组件,能定义颜色、形状等表现,可接收点击和长按事件。", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialButton点击事件", - "desc": [ - "【color】: 颜色 【Color】", - "【splashColor】: 水波纹颜色 【Color】", - "【height】: 高 【double】", - "【elevation】: 影深 【double】", - "【child】: 子组件 【Widget】", - "【textColor】: 子组件文字颜色 【Color】", - "【highlightColor】: 长按高亮色 【Color】", - "【padding】: 内边距 【EdgeInsetsGeometry】", - "【onPressed】: 点击事件 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "MaterialButton长按事件", - "desc": [ - "【highlightColor】: 长按高亮色 【Color】", - "【onLongPress】: 长按事件 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "MaterialButton的自定义形状", - "desc": [ - "【shape】: 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node1_base.dart deleted file mode 100644 index 40b063c6b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node1_base.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class CustomMaterialButton extends StatelessWidget { - const CustomMaterialButton({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return MaterialButton( - height: 40, - elevation: 5, - color: Colors.blue, - textColor: Colors.white, - splashColor: Colors.orangeAccent, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(6)), - child: const Text("MaterialButton"), - onPressed: () { - - // Navigator.of(context).pushNamed('AboutMePage'); - }); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node2_onLongPress.dart b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node2_onLongPress.dart deleted file mode 100644 index a0d3c2ca4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node2_onLongPress.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class LongPressMaterialButton extends StatelessWidget { - const LongPressMaterialButton({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return MaterialButton( - height: 40, - elevation: 5, - color: Colors.blue, - highlightColor: Colors.green, - textColor: Colors.white, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(6)), - child: const Text("MaterialButton"), - onLongPress: () { - // Navigator.of(context).pushNamed('AboutMePage'); - }, - onPressed: () { - // Navigator.of(context).pushNamed('AboutMePage'); - }); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node3_shape.dart b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node3_shape.dart deleted file mode 100644 index 5e497291c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node3_shape.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class ShapeMaterialButton extends StatelessWidget { - const ShapeMaterialButton({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [ - SizedBox( - width: 40, - height: 40, - child: MaterialButton( - padding: const EdgeInsets.all(0), - textColor: const Color(0xffFfffff), - elevation: 3, - color: Colors.blue, - highlightColor: const Color(0xffF88B0A), - splashColor: Colors.red, - child: const Icon( - Icons.add, - color: Colors.white, - ), - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - onLongPress: () => Navigator.of(context).pushNamed('AboutMePage'), - onPressed: () => Navigator.of(context).pushNamed('AboutMePage')), - ), - SizedBox( - width: 100, - height: 40, - child: MaterialButton( - padding: const EdgeInsets.all(0), - textColor: const Color(0xffFfffff), - elevation: 3, - color: Colors.blue, - highlightColor: const Color(0xffF88B0A), - splashColor: Colors.red, - child: const Icon( - Icons.remove, - color: Colors.white, - ), - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(15))), - onLongPress: () => Navigator.of(context).pushNamed('AboutMePage'), - onPressed: () => Navigator.of(context).pushNamed('AboutMePage')), - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_de_DE.json deleted file mode 100644 index 68f51a75e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "Barriere Modul", - "info": "Entspricht einer Vorhangschicht, die verhindert, dass der Benutzer mit den dahinter liegenden Widgets interagiert. Es kann durch dismissible festgelegt werden, ob beim Klicken der Rückgabestapel ausgelöst wird. Im Quellcode wird es für Dialog-bezogene Komponenten verwendet.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ModalBarrier Einführung", - "desc": [ - "【dismissible】 : Klicken, um zurückzukehren 【bool】", - "【color】 : Farbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_en_US.json deleted file mode 100644 index 2a27ad7af..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "Modal Barrier", - "info": "Equivalent to a curtain layer, preventing users from interacting with the Widget behind it. It can be determined by dismissible whether to trigger the back stack when clicked. Used in the source code for Dialog related components.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to ModalBarrier", - "desc": [ - "【dismissible】: Whether to return when clicked 【bool】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_es_ES.json deleted file mode 100644 index 9756ab1de..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "Barrera Modal", - "info": "Equivale a una capa de cortina que evita que el usuario interactúe con los Widgets detrás de ella. Se puede decidir si se activa la pila de retorno al hacer clic a través de dismissible. En el código fuente, se utiliza para componentes relacionados con Dialog.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a ModalBarrier", - "desc": [ - "【dismissible】: Si se retorna al hacer clic 【bool】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_fr_FR.json deleted file mode 100644 index c81a6a940..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "Barrière modale", - "info": "Équivaut à une couche de rideau, empêchant l'utilisateur d'interagir avec les Widgets derrière. Peut être configuré pour déclencher ou non la pile de retour lors d'un clic via dismissible. Utilisé dans les composants liés à Dialog dans le code source.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à ModalBarrier", - "desc": [ - "【dismissible】 : Retour au clic 【bool】", - "【color】 : Couleur 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_it_IT.json deleted file mode 100644 index e6ffe7654..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "Barriera Modale", - "info": "Equivale a uno strato di tenda che impedisce all'utente di interagire con i widget dietro di esso. È possibile decidere se attivare lo stack di ritorno al clic tramite dismissible. Nel codice sorgente è utilizzato per i componenti relativi a Dialog.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a ModalBarrier", - "desc": [ - "【dismissible】 : Ritorna al clic 【bool】", - "【color】 : Colore 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ja_JP.json deleted file mode 100644 index 9993ed792..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "バリアモード", - "info": "これは一種のカーテン層に相当し、ユーザーがその背後にあるウィジェットとやり取りするのを防ぎます。dismissibleを介して、クリック時に戻るスタックをトリガーするかどうかを決定できます。ソースコードではDialog関連のコンポーネントに使用されています。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ModalBarrier 紹介", - "desc": [ - "【dismissible】 : クリック時に戻るかどうか 【bool】", - "【color】 : 色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ko_KR.json deleted file mode 100644 index 1ee2365eb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "배리어 모드", - "info": "막대기와 같은 역할을 하며, 사용자가 뒤에 있는 위젯과 상호 작용하지 못하도록 합니다. dismissible을 통해 클릭 시 반환 스택을 트리거할지 여부를 결정할 수 있습니다. 소스 코드에서는 Dialog 관련 컴포넌트에 사용됩니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ModalBarrier 소개", - "desc": [ - "【dismissible】 : 클릭 시 반환 여부 【bool】", - "【color】 : 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_pt_PT.json deleted file mode 100644 index 42c896a2e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "Barreira Modal", - "info": "Equivale a uma camada de cortina, impedindo que o usuário interaja com os Widgets por trás dela. Pode ser decidido através de dismissible se, ao clicar, deve-se acionar a pilha de retorno. No código-fonte, é usado para componentes relacionados ao Dialog.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao ModalBarrier", - "desc": [ - "【dismissible】 : Clicar retorna 【bool】", - "【color】 : Cor 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ru_RU.json deleted file mode 100644 index 3102cc565..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "Барьер", - "info": "Эквивалентно слою занавеса, который предотвращает взаимодействие пользователя с виджетами за ним. Можно определить, будет ли нажатие вызывать возврат в стек, с помощью dismissible. В исходном коде используется для компонентов, связанных с диалогами.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в ModalBarrier", - "desc": [ - "【dismissible】 : Возврат при нажатии 【bool】", - "【color】 : Цвет 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_zh-CN.json deleted file mode 100644 index 1cd6dd287..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "屏障模", - "info": "相当于一块幕布层,防止用户与其背后的 Widget 交互,可以通过 dismissible 决定点击时,是否触发返回栈。源码中用于 Dialog 相关组件。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ModalBarrier 介绍", - "desc": [ - "【dismissible】 : 点击是否返回 【bool】", - "【color】 : 颜色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/node1_base.dart deleted file mode 100644 index 449fd8efb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/node1_base.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class ModalBarrierDemo extends StatelessWidget { - const ModalBarrierDemo({Key? key}) : super(key: key); - - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 200, - height: 100, - child: Stack(alignment: Alignment.center, children: [ - ModalBarrier( - dismissible: true, - color: Colors.grey.withOpacity(0.3), - ), - const Text('点击背景返回') - ]), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_de_DE.json deleted file mode 100644 index 3cc6538bd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "Navigationsleiste", - "info": "Allgemeine Strukturkomponente mit links, mittig und rechts Modus, kann den Abstand der mittleren Komponente zum linken Rand und ob sie zentriert ist, festlegen. Der Quellcode wird in Strukturen wie der AppBar verwendet.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung der NavigationToolbar", - "desc": [ - "【leading】 : Linke Komponente 【Widget】", - "【middle】: Mittlere Komponente 【Widget】", - "【trailing】: Rechte Komponente 【Widget】", - "【centerMiddle】: Ob die mittlere Komponente zentriert ist 【bool】", - "【middleSpacing】: Abstand der mittleren Komponente zum linken Rand 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_en_US.json deleted file mode 100644 index b64752257..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "Navigation Toolbar", - "info": "A general structural component with left-center-right mode, which can specify the left margin of the middle component and whether it is centered. The source code is used in the structure of navigation bars such as AppBar.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of NavigationToolbar", - "desc": [ - "【leading】: Left component 【Widget】", - "【middle】: Middle component 【Widget】", - "【trailing】: Right component 【Widget】", - "【centerMiddle】: Whether the middle component is centered 【bool】", - "【middleSpacing】: Distance of the middle component from the left 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_es_ES.json deleted file mode 100644 index d168fd878..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "Barra de herramientas de navegación", - "info": "Componente de estructura común en modo izquierdo, central y derecho, se puede especificar el margen izquierdo del componente central y si está centrado. El código fuente lo utiliza en estructuras de barras de navegación como AppBar.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de NavigationToolbar", - "desc": [ - "【leading】: Componente izquierdo 【Widget】", - "【middle】: Componente central 【Widget】", - "【trailing】: Componente derecho 【Widget】", - "【centerMiddle】: Si el componente central está centrado 【bool】", - "【middleSpacing】: Distancia del componente central al margen izquierdo 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_fr_FR.json deleted file mode 100644 index ef615c108..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "Barre d'outils de navigation", - "info": "Un composant structurel universel avec un modèle gauche-centre-droit, qui permet de spécifier la marge gauche du composant central et s'il est centré. Le code source est utilisé dans des structures de barres de navigation comme AppBar.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de NavigationToolbar", - "desc": [ - "【leading】 : Composant gauche 【Widget】", - "【middle】: Composant central 【Widget】", - "【trailing】: Composant droit 【Widget】", - "【centerMiddle】: Si le composant central est centré 【bool】", - "【middleSpacing】: Distance du composant central par rapport à la gauche 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_it_IT.json deleted file mode 100644 index 378c44998..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "Barra degli strumenti di navigazione", - "info": "Componente strutturale generico con modalità sinistra, centrale e destra, può specificare la distanza del componente centrale dal margine sinistro e se è centrato. Il codice sorgente viene utilizzato in strutture come AppBar.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di NavigationToolbar", - "desc": [ - "【leading】 : Componente sinistro 【Widget】", - "【middle】: Componente centrale 【Widget】", - "【trailing】: Componente destro 【Widget】", - "【centerMiddle】: Se il componente centrale è centrato 【bool】", - "【middleSpacing】: Distanza del componente centrale dal lato sinistro 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ja_JP.json deleted file mode 100644 index ce590edab..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "ナビゲーションツールバー", - "info": "左中右モードの汎用構造コンポーネントで、中央コンポーネントの左側のマージンと中央揃えかどうかを指定できます。ソースコードはAppBarなどのナビゲーションバー構造で使用されています。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NavigationToolbarの基本的な使用", - "desc": [ - "【leading】 : 左側コンポーネント 【Widget】", - "【middle】: 中央コンポーネント 【Widget】", - "【trailing】: 右側コンポーネント 【Widget】", - "【centerMiddle】: 中央コンポーネントを中央揃えにするかどうか 【bool】", - "【middleSpacing】: 中央コンポーネントの左側からの距離 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ko_KR.json deleted file mode 100644 index 4c9cd2452..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "네비게이션 툴바", - "info": "좌중우 모드의 일반 구조 컴포넌트로, 중간 컴포넌트의 왼쪽 여백 및 중앙 정렬 여부를 지정할 수 있습니다. 소스 코드는 AppBar 등 네비게이션 바 구조에서 이를 사용합니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NavigationToolbar 기본 사용", - "desc": [ - "【leading】 : 왼쪽 컴포넌트 【Widget】", - "【middle】: 중간 컴포넌트 【Widget】", - "【trailing】: 오른쪽 컴포넌트 【Widget】", - "【centerMiddle】: 중간 컴포넌트 중앙 정렬 여부 【bool】", - "【middleSpacing】: 중간 컴포넌트의 왼쪽 여백 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_pt_PT.json deleted file mode 100644 index 8dec55cab..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "Barra de Ferramentas de Navegação", - "info": "Componente estrutural genérico no modo esquerdo-central-direito, pode especificar a margem esquerda do componente central e se está centralizado. O código-fonte é usado em estruturas de barras de navegação como AppBar.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do NavigationToolbar", - "desc": [ - "【leading】: Componente esquerdo 【Widget】", - "【middle】: Componente central 【Widget】", - "【trailing】: Componente direito 【Widget】", - "【centerMiddle】: Se o componente central está centralizado 【bool】", - "【middleSpacing】: Distância do componente central à esquerda 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ru_RU.json deleted file mode 100644 index 8a3988416..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "Панель навигации", - "info": "Универсальный структурный компонент с левым, центральным и правым режимами, можно указать отступ центрального компонента от левого края и выравнивание по центру. Исходный код используется в структурах навигационных панелей, таких как AppBar.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование NavigationToolbar", - "desc": [ - "【leading】 : Левый компонент 【Widget】", - "【middle】: Центральный компонент 【Widget】", - "【trailing】: Правый компонент 【Widget】", - "【centerMiddle】: Выравнивание центрального компонента по центру 【bool】", - "【middleSpacing】: Расстояние центрального компонента от левого края 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_zh-CN.json deleted file mode 100644 index 0fea6ef08..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "导航工具条", - "info": "左中右模式的通用结构组件,可指定中间组件距左侧边距及是否居中。源码在AppBar等导航条结构中有使用它。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NavigationToolbar基本使用", - "desc": [ - "【leading】 : 左侧组件 【Widget】", - "【middle】: 中间组件 【Widget】", - "【trailing】: 右侧组件组件 【Widget】", - "【centerMiddle】: 中间组件是否居中 【bool】", - "【middleSpacing】: 中间组件距左距离 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/node1_base.dart deleted file mode 100644 index 37e89d969..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/node1_base.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/20 -/// contact me by email 1981462002@qq.com - -class NavigationToolbarDemo extends StatelessWidget { - const NavigationToolbarDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: const [ - SizedBox( - height: 60, - child: NavigationToolbar( - leading: Icon(Icons.ac_unit), - middle: Text('middleSpacing#true'), - middleSpacing: 20, - centerMiddle: true, - trailing: Icon(Icons.more_vert), - ), - ), - SizedBox( - height: 60, - child: NavigationToolbar( - leading: Icon(Icons.ac_unit), - middle: Text('middleSpacing#false'), - middleSpacing: 20, - centerMiddle: false, - trailing: Icon(Icons.more_vert), - ), - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_de_DE.json deleted file mode 100644 index 7ed6f083d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "Benachrichtigungs-Listener", - "info": "Sie können den generischen Typ T von Notification angeben, um Änderungen dieses Typs zu überwachen. Flutter bietet viele integrierte Benachrichtigungen für das Scrollen, aber Sie können auch benutzerdefinierte Benachrichtigungen erstellen und überwachen.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Überwachung von OverscrollIndicatorNotification", - "desc": [ - "Diese Benachrichtigung wird nur dann zurückgerufen, wenn bis zum obersten oder untersten Rand gescrollt wird. Die Eigenschaft 'leading' bestimmt, ob es sich um den oberen oder unteren Rand handelt. Darüber hinaus kann die blaue Schattierung beim Scrollen am oberen und unteren Rand durch notification#disallowGlow() entfernt werden." - ] - }, - { - "file": "node2_update.dart", - "name": "Überwachung von ScrollUpdateNotification", - "desc": [ - "Während des Scrollvorgangs werden die Scroll-Daten zurückgerufen, sodass Sie eine Vielzahl von Daten für Operationen erhalten können." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_en_US.json deleted file mode 100644 index 798e2267a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "Notification Listener", - "info": "You can specify the sub-generic type T of Notification to listen for changes of that type. Flutter has many built-in sliding Notifications, and of course, you can also customize Notifications for listening.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Listen to OverscrollIndicatorNotification", - "desc": [ - "This notification is called back when sliding to the top and bottom, and it is judged whether it is the top or bottom by the leading property. In addition, you can remove the blue shadow at the top and bottom sliding through notification#disallowGlow()." - ] - }, - { - "file": "node2_update.dart", - "name": "Listen to ScrollUpdateNotification", - "desc": [ - "During the sliding process, the sliding data is called back, and you can obtain a large amount of data to operate." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_es_ES.json deleted file mode 100644 index f70e983b0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "Escuchador de notificaciones", - "info": "Puede especificar el subgenérico T de Notification para escuchar cambios en ese tipo. Flutter tiene muchas notificaciones de desplazamiento integradas, por supuesto, también puedes personalizar las notificaciones para escucharlas.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Escuchar OverscrollIndicatorNotification", - "desc": [ - "Esta notificación se devuelve de llamada después de deslizarse hasta la parte superior e inferior, y se juzga si es la parte superior o la inferior a través de la propiedad leading. Además, a través de notification#disallowGlow(), se puede eliminar la sombra azul de deslizamiento superior e inferior." - ] - }, - { - "file": "node2_update.dart", - "name": "Escuchar ScrollUpdateNotification", - "desc": [ - "Durante el proceso de desplazamiento, se devuelven los datos de desplazamiento, y puedes obtener una gran cantidad de datos para operar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_fr_FR.json deleted file mode 100644 index 8ae278a82..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "Écouteur de notifications", - "info": "Vous pouvez spécifier le sous-générique T de Notification pour écouter les changements de ce type. Flutter intègre de nombreuses notifications de défilement, bien sûr, vous pouvez également personnaliser les notifications pour les écouter.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Écouter OverscrollIndicatorNotification", - "desc": [ - "Cette notification est rappelée uniquement lors du défilement vers le haut ou le bas, en utilisant la propriété leading pour déterminer si c'est le haut ou le bas. De plus, en utilisant notification#disallowGlow(), vous pouvez supprimer l'ombre bleue du défilement en haut et en bas." - ] - }, - { - "file": "node2_update.dart", - "name": "Écouter ScrollUpdateNotification", - "desc": [ - "Pendant le défilement, les données de défilement sont rappelées, vous pouvez obtenir de nombreuses données pour les manipuler." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_it_IT.json deleted file mode 100644 index a9a7e5c75..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "Ascoltatore di Notifiche", - "info": "È possibile specificare il sottotipo generico T di Notification per monitorare i cambiamenti di quel tipo. Flutter include molte notifiche di scorrimento integrate, ma puoi anche creare e monitorare notifiche personalizzate.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Monitorare OverscrollIndicatorNotification", - "desc": [ - "Questa notifica viene richiamata solo quando si scorre fino in cima o in fondo, e si può determinare se si tratta della cima o del fondo tramite la proprietà leading. Inoltre, è possibile rimuovere l'ombra blu dello scorrimento in cima e in fondo utilizzando notification#disallowGlow()." - ] - }, - { - "file": "node2_update.dart", - "name": "Monitorare ScrollUpdateNotification", - "desc": [ - "Durante lo scorrimento, i dati di scorrimento vengono richiamati, permettendoti di ottenere molti dati per operazioni successive." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ja_JP.json deleted file mode 100644 index 243419363..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "通知リスナー", - "info": "NotificationのサブジェネリックTを指定して、そのタイプの変更を監視できます。Flutterには多くのスライドNotificationが組み込まれており、もちろん独自のNotificationを監視することもできます。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OverscrollIndicatorNotificationを監視", - "desc": [ - "この通知は、最上部または最下部にスライドしたときにコールバックされ、leadingプロパティを使用して上部か下部かを判断します。また、notification#disallowGlow()を使用して、上部と下部のスライド時の青色の影を取り除くことができます。" - ] - }, - { - "file": "node2_update.dart", - "name": "ScrollUpdateNotificationを監視", - "desc": [ - "スライド中にスライドデータをコールバックし、大量のデータを取得して操作することができます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ko_KR.json deleted file mode 100644 index e514456f0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "알림 리스너", - "info": "Notification의 하위 제네릭 T를 지정하여 해당 유형의 변경 사항을 감지할 수 있습니다. Flutter에는 많은 스크롤 Notification이 내장되어 있으며, 물론 사용자 정의 Notification을 감지할 수도 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OverscrollIndicatorNotification 감지", - "desc": [ - "이 알림은 스크롤이 가장 위나 가장 아래에 도달했을 때 콜백되며, leading 속성을 통해 상단인지 하단인지 판단할 수 있습니다. 또한 notification#disallowGlow()를 통해 상하단 스크롤 시 파란색 그림자를 제거할 수 있습니다." - ] - }, - { - "file": "node2_update.dart", - "name": "ScrollUpdateNotification 감지", - "desc": [ - "스크롤 과정에서 스크롤 데이터를 콜백하며, 이를 통해 많은 데이터를 얻어 작업할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_pt_PT.json deleted file mode 100644 index debe830e7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "Ouvinte de Notificação", - "info": "Pode especificar o subgenérico T de Notification para monitorar alterações desse tipo. O Flutter possui muitas Notificações de deslizamento integradas, mas você também pode criar e monitorar suas próprias Notificações personalizadas.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Monitorar OverscrollIndicatorNotification", - "desc": [ - "Esta notificação é chamada de volta apenas quando o deslizamento atinge o topo ou o fundo, e o atributo leading determina se é o topo ou o fundo. Além disso, através de notification#disallowGlow(), é possível remover a sombra azul do deslizamento no topo e no fundo." - ] - }, - { - "file": "node2_update.dart", - "name": "Monitorar ScrollUpdateNotification", - "desc": [ - "Durante o processo de deslizamento, os dados de deslizamento são chamados de volta, permitindo que você obtenha uma grande quantidade de dados para operações." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ru_RU.json deleted file mode 100644 index 25132315f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "Слушатель уведомлений", - "info": "Можно указать подтип T для Notification, чтобы отслеживать изменения этого типа. В Flutter встроено множество уведомлений о прокрутке, конечно, вы также можете настроить свои собственные уведомления для отслеживания.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Отслеживание OverscrollIndicatorNotification", - "desc": [ - "Это уведомление вызывается только при прокрутке до самого верха или низа, и можно определить, верх это или низ, с помощью свойства leading. Кроме того, с помощью notification#disallowGlow() можно убрать синюю тень при прокрутке вверху и внизу." - ] - }, - { - "file": "node2_update.dart", - "name": "Отслеживание ScrollUpdateNotification", - "desc": [ - "В процессе прокрутки данные о прокрутке передаются обратно, и вы можете получить множество данных для работы." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_zh-CN.json deleted file mode 100644 index e659e4513..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "通知监听器", - "info": "可指定Notification子泛型T,监听该类型的变化。Flutter内置很多滑动的Notification,当然你也可以自定义Notification进行监听。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "监听OverscrollIndicatorNotification", - "desc": [ - "该通知之后在滑动到最顶和最底是回调,通过leading属性判断是顶部还是底部。另外通过notification#disallowGlow(),可以去除顶底滑动蓝色阴影" - ] - }, - { - "file": "node2_update.dart", - "name": "监听ScrollUpdateNotification", - "desc": [ - "在滑动过程中对滑动数据进行回调,你可以获取大量数据来进行操作。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/node1_base.dart deleted file mode 100644 index ed6f94563..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/node1_base.dart +++ /dev/null @@ -1,61 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/8/14 -/// contact me by email 1981462002@qq.com - - -class NotificationListenerDemo extends StatefulWidget { - const NotificationListenerDemo({Key? key}) : super(key: key); - - @override - _NotificationListenerDemoState createState() => _NotificationListenerDemoState(); -} - -class _NotificationListenerDemoState extends State { - final List data = List.generate(30, (i) => '第${i + 1}条'); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 250, - child: NotificationListener( - onNotification: _onNotification, - child: CupertinoScrollbar( - child: ListView.separated( - itemBuilder: _buildItem, - itemCount: data.length, - separatorBuilder: (_,__)=>const Divider(height: 5,), - ), - )), - ); - } - - bool _onNotification(OverscrollIndicatorNotification notification) { - if (notification.leading) { - notification.disallowIndicator(); - ScaffoldMessenger.of(context).showSnackBar(const SnackBar( - content: Text('已滑到顶部'), - backgroundColor: Colors.blue, - duration: Duration(milliseconds: 200), - )); - } else { - notification.disallowIndicator(); - ScaffoldMessenger.of(context).showSnackBar(const SnackBar( - content: Text('已滑到底部'), - duration: Duration(milliseconds: 200), - backgroundColor: Colors.blue, - )); - } - - return true; - } - - Widget _buildItem(BuildContext context, int index) { - return Container( - height: 50, - alignment: Alignment.center, - child: Text(data[index],style: TextStyle(color: Theme.of(context).primaryColor,fontSize: 18),), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/node2_update.dart b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/node2_update.dart deleted file mode 100644 index b7195b1d5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/node2_update.dart +++ /dev/null @@ -1,79 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/8/14 -/// contact me by email 1981462002@qq.com - - -class NotificationListenerUpdate extends StatefulWidget { - const NotificationListenerUpdate({Key? key}) : super(key: key); - - @override - _NotificationListenerUpdateState createState() => - _NotificationListenerUpdateState(); -} - -class _NotificationListenerUpdateState - extends State { - final List data = List.generate(30, (i) => '第${i + 1}条'); - - String _info = ''; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: Stack( - children: [ - Positioned( - child: Padding( - padding: const EdgeInsets.only(left: 8.0), - child: Text(_info), - )), - NotificationListener( - onNotification: _onNotification, - child: CupertinoScrollbar( - child: ListView.separated( - itemBuilder: _buildItem, - itemCount: data.length, - separatorBuilder: (_, __) => const Divider(height: 5), - ), - )), - - ], - ), - ); - } - - bool _onNotification(ScrollUpdateNotification notification) { - setState(() { - _info = 'axis------【${notification.metrics.axis}】------\n' - 'pixels------【${notification.metrics.pixels}】------\n' - 'atEdge------【${notification.metrics.atEdge}】------\n' - 'axisDirection------【${notification.metrics.axisDirection}】------\n' - 'extentInside------【${notification.metrics.extentInside}】------\n' - 'outOfRange------【${notification.metrics.outOfRange}】------\n' - 'minScrollExtent------【${notification.metrics.minScrollExtent}】------\n' - 'maxScrollExtent------【${notification.metrics.maxScrollExtent}】------\n' - 'viewportDimension------【${notification.metrics.viewportDimension}】------\n' - 'delta------【${notification.dragDetails?.delta}】------\n' - 'globalPosition------【${notification.dragDetails?.globalPosition}】------\n' - 'localPosition------【${notification.dragDetails?.localPosition}】------\n' - 'scrollDelta------【${notification.scrollDelta}】------\n' - 'depth------【${notification.depth}】------'; - }); - return true; - } - - Widget _buildItem(BuildContext context, int index) { - return Container( - height: 50, - alignment: Alignment.centerRight, - padding: const EdgeInsets.only(right: 8), - child: Text( - data[index], - style: TextStyle(color: Theme.of(context).primaryColor, fontSize: 18), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_de_DE.json deleted file mode 100644 index a5091791d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "Ausrichtungs-Builder", - "info": "Kann zurückmelden, ob das übergeordnete Element horizontal oder vertikal ist, und kann darauf basierend verschiedene untergeordnete Elemente erstellen.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von OrientationBuilder", - "desc": [ - "【builder】 : Ausrichtungskomponenten-Builder 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_en_US.json deleted file mode 100644 index 77d4311fe..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "Orientation Builder", - "info": "Can callback whether the parent component is horizontal or vertical, and can build different child components based on this.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of OrientationBuilder", - "desc": [ - "【builder】: Orientation component builder 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_es_ES.json deleted file mode 100644 index 79d4f460b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "Constructor de Orientación", - "info": "Puede devolver una llamada para determinar si el componente padre es horizontal o vertical, y puede construir diferentes componentes secundarios en consecuencia.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de OrientationBuilder", - "desc": [ - "【builder】: Constructor de componentes de orientación 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_fr_FR.json deleted file mode 100644 index b026d8821..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "Constructeur d'orientation", - "info": "Capable de rappeler si le composant parent est horizontal ou vertical, et peut construire différents composants enfants en conséquence.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'OrientationBuilder", - "desc": [ - "【builder】 : Constructeur de composant d'orientation 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_it_IT.json deleted file mode 100644 index 3ee33c719..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "Costruttore di Orientamento", - "info": "Può richiamare se il componente genitore è orizzontale o verticale, e può costruire diversi componenti figli in base a ciò.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di OrientationBuilder", - "desc": [ - "【builder】 : Costruttore del componente di orientamento 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ja_JP.json deleted file mode 100644 index 51eafbef3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "方向ビルダー", - "info": "親コンポーネントが横向きか縦向きかをコールバックでき、それに応じて異なる子コンポーネントを構築できます。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OrientationBuilderの基本的な使用", - "desc": [ - "【builder】 : 方向コンポーネントビルダー 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ko_KR.json deleted file mode 100644 index acd5e42f7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "방향 빌더", - "info": "부모 구성 요소가 가로 방향인지 세로 방향인지 콜백할 수 있으며, 이를 기반으로 다른 자식 구성 요소를 구축할 수 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OrientationBuilder 기본 사용", - "desc": [ - "【builder】 : 방향 구성 요소 빌더 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_pt_PT.json deleted file mode 100644 index db124afac..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "Construtor de Orientação", - "info": "Pode retornar se o componente pai é horizontal ou vertical, e pode construir diferentes componentes filhos com base nisso.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do OrientationBuilder", - "desc": [ - "【builder】 : Construtor de componentes de orientação 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ru_RU.json deleted file mode 100644 index 060e68fe1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "Ориентация строителя", - "info": "Может обратно вызывать, является ли родительский компонент горизонтальным или вертикальным, и может создавать различные дочерние компоненты на основе этого.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование OrientationBuilder", - "desc": [ - "【builder】 : Строитель компонента ориентации 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_zh-CN.json deleted file mode 100644 index 3a25ec697..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "方向构造器", - "info": "能够回调父组件是横向还是纵向,可以据此来构建不同的子组件。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OrientationBuilder基本使用", - "desc": [ - "【builder】 : 方向组件构造器 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/node1_base.dart deleted file mode 100644 index 1f383a903..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/node1_base.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/21 -/// contact me by email 1981462002@qq.com - -class OrientationBuilderDemo extends StatefulWidget { - const OrientationBuilderDemo({Key? key}) : super(key: key); - - @override - _OrientationBuilderDemoState createState() => _OrientationBuilderDemoState(); -} - -class _OrientationBuilderDemoState extends State { - double _width = 200; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Container( - width: _width, - height: 200, - child: OrientationBuilder(builder: _builder), - color: Colors.orange, - ), - _buildSlider() - ], - ); - } - - //根据回调的orientation返回组件 - Widget _builder(BuildContext context, Orientation orientation) { - switch(orientation){ - case Orientation.portrait: - return const Icon(Icons.phone_android,size: 60,); - case Orientation.landscape: - return const RotatedBox( - quarterTurns: 1, - child: Icon(Icons.phone_android,size: 60,)); - default: return Container(); - } - } - - Widget _buildSlider() =>Slider( - value: _width, - max: 350.0, - min: 80.0, - divisions: 17, - onChanged: (v)=> setState(() => _width= v), - ); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_de_DE.json deleted file mode 100644 index 5b472ff85..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_de_DE.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "Umriss-Schaltfläche", - "info": "Schaltfläche mit Rahmenstil, basierend auf MaterialButton implementiert, alle Eigenschaften ähnlich wie MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OutlineButton Klickereignis", - "desc": [ - "【textColor】: Textfarbe der Unterkomponente 【Color】", - "【splashColor】: Wasserwellenfarbe 【Color】", - "【highlightColor】: Hervorhebungsfarbe bei langem Drücken 【Color】", - "【highlightedBorderColor】: Rahmenfarbe bei Hervorhebung 【Color】", - "【child】: Unterkomponente 【Widget】", - "【padding】: Innenabstand 【EdgeInsetsGeometry】", - "【borderSide】: Randlinie 【BorderSide】", - "【onPressed】: Klickereignis 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Die OutlineButton-Schaltfläche hat die Bühne in Flutter 3.0 verlassen. Der Ersatz ist die OutlinedButton-Schaltfläche.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(Umriss-Schaltfläche", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_en_US.json deleted file mode 100644 index d8fffcfbb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_en_US.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "Outline Button", - "info": "A button with a border style, implemented based on MaterialButton, with all properties similar to MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OutlineButton Click Event", - "desc": [ - "【textColor】: Text color of child component 【Color】", - "【splashColor】: Ripple color 【Color】", - "【highlightColor】: Long press highlight color 【Color】", - "【highlightedBorderColor】: Border color when highlighted 【Color】", - "【child】: Child component 【Widget】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【borderSide】: Border side 【BorderSide】", - "【onPressed】: Click event 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'The OutlineButton has been phased out in Flutter 3.0. It is replaced by the OutlinedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_es_ES.json deleted file mode 100644 index 48c34e9a7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_es_ES.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "Botón de contorno", - "info": "Botón con estilo de borde, implementado basado en MaterialButton, todas las propiedades son similares a MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clic de OutlineButton", - "desc": [ - "【textColor】: Color del texto del componente hijo 【Color】", - "【splashColor】: Color de la onda 【Color】", - "【highlightColor】: Color de resaltado al mantener presionado 【Color】", - "【highlightedBorderColor】: Color del borde al resaltar 【Color】", - "【child】: Componente hijo 【Widget】", - "【padding】: Relleno interno 【EdgeInsetsGeometry】", - "【borderSide】: Línea del borde 【BorderSide】", - "【onPressed】: Evento de clic 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'El botón OutlineButton dejó de estar disponible en Flutter 3.0. Su reemplazo es el botón OutlinedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(Botón de contorno", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_fr_FR.json deleted file mode 100644 index 5dfc02352..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_fr_FR.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "Bouton à contour", - "info": "Bouton de style à bordure, basé sur MaterialButton, toutes les propriétés sont similaires à MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événement de clic OutlineButton", - "desc": [ - "【textColor】: Couleur du texte des composants enfants 【Color】", - "【splashColor】: Couleur de l'effet de vague 【Color】", - "【highlightColor】: Couleur de surbrillance lors d'un appui long 【Color】", - "【highlightedBorderColor】: Couleur de la bordure en surbrillance 【Color】", - "【child】: Composant enfant 【Widget】", - "【padding】: Marge intérieure 【EdgeInsetsGeometry】", - "【borderSide】: Bordure 【BorderSide】", - "【onPressed】: Événement de clic 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Le bouton OutlineButton a quitté la scène historique dans Flutter 3.0. Il est remplacé par le bouton OutlinedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(Bouton à contour", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_it_IT.json deleted file mode 100644 index 0b312f10f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_it_IT.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "Pulsante a contorno", - "info": "Pulsante con stile bordo, implementato basandosi su MaterialButton, tutte le proprietà sono simili a MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento di clic di OutlineButton", - "desc": [ - "【textColor】: Colore del testo del componente figlio 【Color】", - "【splashColor】: Colore dell'effetto ripple 【Color】", - "【highlightColor】: Colore di evidenziazione durante la pressione prolungata 【Color】", - "【highlightedBorderColor】: Colore del bordo durante l'evidenziazione 【Color】", - "【child】: Componente figlio 【Widget】", - "【padding】: Spaziatura interna 【EdgeInsetsGeometry】", - "【borderSide】: Linea del bordo 【BorderSide】", - "【onPressed】: Evento di clic 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Il pulsante OutlineButton è stato ritirato in Flutter 3.0. Il suo sostituto è il pulsante OutlinedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(Pulsante a contorno", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ja_JP.json deleted file mode 100644 index 6ff6ea27a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ja_JP.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "アウトライン ボタン", - "info": "枠線スタイルのボタンで、MaterialButtonをベースに実装されており、すべてのプロパティはMaterialButtonと同様です。", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OutlineButtonクリックイベント", - "desc": [ - "【textColor】: 子コンポーネントのテキストカラー 【Color】", - "【splashColor】: 波紋カラー 【Color】", - "【highlightColor】: 長押し時のハイライトカラー 【Color】", - "【highlightedBorderColor】: ハイライト時の枠線カラー 【Color】", - "【child】: 子コンポーネント 【Widget】", - "【padding】: 内側の余白 【EdgeInsetsGeometry】", - "【borderSide】: 枠線 【BorderSide】", - "【onPressed】: クリックイベント 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'OutlineButton ボタンは Flutter3.0 で歴史の舞台から退場しました。代替として OutlinedButton ボタンがあります。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(枠線ボタン", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ko_KR.json deleted file mode 100644 index 8105312e7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ko_KR.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "아웃라인 버튼", - "info": "테두리 스타일 버튼, MaterialButton을 기반으로 구현되었으며, 모든 속성은 MaterialButton과 유사합니다.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OutlineButton 클릭 이벤트", - "desc": [ - "【textColor】: 자식 컴포넌트 텍스트 색상 【Color】", - "【splashColor】: 물결 효과 색상 【Color】", - "【highlightColor】: 길게 누를 때 강조 색상 【Color】", - "【highlightedBorderColor】: 강조 시 테두리 색상 【Color】", - "【child】: 자식 컴포넌트 【Widget】", - "【padding】: 안쪽 여백 【EdgeInsetsGeometry】", - "【borderSide】: 테두리 선 【BorderSide】", - "【onPressed】: 클릭 이벤트 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'OutlineButton 버튼은 Flutter3.0에서 역사의 무대에서 퇴장했습니다. 대체자는 OutlinedButton 버튼입니다.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(아웃라인 버튼", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_pt_PT.json deleted file mode 100644 index dedf8efff..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_pt_PT.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "Botão de Contorno", - "info": "Botão de estilo de borda, implementado com base no MaterialButton, todas as propriedades são semelhantes ao MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de Clique do OutlineButton", - "desc": [ - "【textColor】: Cor do texto do componente filho 【Color】", - "【splashColor】: Cor do efeito de ondulação 【Color】", - "【highlightColor】: Cor de destaque ao pressionar 【Color】", - "【highlightedBorderColor】: Cor da borda ao destacar 【Color】", - "【child】: Componente filho 【Widget】", - "【padding】: Preenchimento interno 【EdgeInsetsGeometry】", - "【borderSide】: Linha da borda 【BorderSide】", - "【onPressed】: Evento de clique 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'O botão OutlineButton saiu de cena no Flutter 3.0. O substituto é o botão OutlinedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(Botão de Contorno", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ru_RU.json deleted file mode 100644 index b4a9f8a42..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ru_RU.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "Кнопка с контуром", - "info": "Кнопка с рамкой, реализованная на основе MaterialButton, все свойства аналогичны MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Событие нажатия OutlineButton", - "desc": [ - "【textColor】: Цвет текста дочернего компонента 【Color】", - "【splashColor】: Цвет водяного эффекта 【Color】", - "【highlightColor】: Цвет подсветки при длительном нажатии 【Color】", - "【highlightedBorderColor】: Цвет рамки при подсветке 【Color】", - "【child】: Дочерний компонент 【Widget】", - "【padding】: Внутренний отступ 【EdgeInsetsGeometry】", - "【borderSide】: Линия рамки 【BorderSide】", - "【onPressed】: Событие нажатия 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Кнопка OutlineButton ушла в историю с выходом Flutter 3.0. Ее заменила кнопка OutlinedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(Кнопка с контуром", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_zh-CN.json deleted file mode 100644 index ffaa5f472..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_zh-CN.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "线框按钮", - "info": "边框样式按钮,基于MaterialButton实现,所有属性和MaterialButton类似。", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OutlineButton点击事件", - "desc": [ - "【textColor】: 子组件文字颜色 【Color】", - "【splashColor】: 水波纹颜色 【Color】", - "【highlightColor】: 长按高亮色 【Color】", - "【highlightedBorderColor】: 高亮时框色 【Color】", - "【child】: 子组件 【Widget】", - "【padding】: 内边距 【EdgeInsetsGeometry】", - "【borderSide】: 边线 【BorderSide】", - "【onPressed】: 点击事件 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'OutlineButton 按钮于 Flutter3.0 退出历史舞台。取代者为 OutlinedButton 按钮。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(边线按钮", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/node1_base.dart deleted file mode 100644 index 3c8df0345..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/node1_base.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomOutlineButton extends StatelessWidget { - const CustomOutlineButton({Key? key}) : super(key: key); - - final String info = - 'OutlineButton 按钮于 Flutter3.0 退出历史舞台。取代者为 OutlinedButton 按钮。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_de_DE.json deleted file mode 100644 index a459a8b0c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "Seitenspeicher", - "info": "Kann den Seitenstatus speichern und den Status beim Wechseln der Seite beibehalten. Im Quellcode wird es in ScrollView, PageView, ExpansionTile usw. verwendet.", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PageStorage", - "desc": [ - "【bucket】 : Speicherbereich 【PageStorageBucket】", - "【child】: Untergeordnete Komponente 【Widget】", - "Beim Initialisieren der Komponente beim Wechseln der Oberfläche wird der Status nicht zurückgesetzt. Wie bei CountWidget muss die untergeordnete Komponente beim Initialisieren den Status aus dem Speicher lesen und beim Ändern des Status den Status in den Speicher schreiben. Außerdem ist PageStorage bereits in MaterialApp integriert, aber Sie können auch ein PageStorage erstellen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_en_US.json deleted file mode 100644 index dd4ed4b19..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "Page Storage", - "info": "Can store the state of a page, maintaining the state when switching pages. It is used in ScrollView, PageView, ExpansionTile, etc. in the source code.", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PageStorage", - "desc": [ - "【bucket】: Storage Area 【PageStorageBucket】", - "【child】: Child Widget 【Widget】", - "When switching interfaces and initializing components, the state will not be reset. As in the CountWidget example, the child component needs to read the state from the storage during initialization and write the state to the storage when changing the state. Additionally, MaterialApp already has PageStorage built-in, but you can also create your own PageStorage." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_es_ES.json deleted file mode 100644 index ca743ed2e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "Almacenamiento de Página", - "info": "Puede almacenar el estado de la página, manteniendo el estado al cambiar de página. En el código fuente, se utiliza en ScrollView, PageView, ExpansionTile, etc.", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PageStorage", - "desc": [ - "【bucket】: Área de almacenamiento 【PageStorageBucket】", - "【child】: Componente hijo 【Widget】", - "Al cambiar de interfaz y inicializar componentes, el estado no se restablecerá. Como en CountWidget, el componente hijo necesita leer el estado del almacenamiento durante la inicialización y escribir el estado en el almacenamiento al cambiar el estado. Además, si usas MaterialApp, ya tiene PageStorage incorporado, pero también puedes crear uno." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_fr_FR.json deleted file mode 100644 index 5c9131434..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "Stockage de page", - "info": "Permet de stocker l'état de la page, ce qui permet de maintenir l'état lors du changement de page. Il est utilisé dans le code source de ScrollView, PageView, ExpansionTile, etc.", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PageStorage", - "desc": [ - "【bucket】 : Zone de stockage 【PageStorageBucket】", - "【child】: Composant enfant 【Widget】", - "Lors de l'initialisation des composants en changeant d'interface, l'état n'est pas réinitialisé. Comme dans CountWidget, le composant enfant doit lire l'état du stockage lors de l'initialisation et écrire l'état dans le stockage lors du changement d'état. De plus, si vous utilisez MaterialApp, PageStorage est déjà intégré, mais vous pouvez également créer un PageStorage." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_it_IT.json deleted file mode 100644 index 53e06b5aa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "Memoria di pagina", - "info": "Consente di memorizzare lo stato della pagina, mantenendo lo stato durante il cambio di pagina. Nel codice sorgente, viene utilizzato in ScrollView, PageView, ExpansionTile, ecc.", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di PageStorage", - "desc": [ - "【bucket】 : Area di archiviazione 【PageStorageBucket】", - "【child】: Componente figlio 【Widget】", - "Quando si inizializzano i componenti durante il cambio di interfaccia, lo stato non viene reimpostato. Ad esempio, nel caso di CountWidget, il componente figlio deve leggere lo stato dalla memoria durante l'inizializzazione e scrivere lo stato nella memoria quando lo stato cambia. Inoltre, se si utilizza MaterialApp, PageStorage è già integrato, ma è comunque possibile creare un PageStorage." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ja_JP.json deleted file mode 100644 index 14259a6b5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "ページストレージ", - "info": "ページの状態を保存することができ、ページを切り替える際に状態を保持することができます。ソースコードでは、ScrollView、PageView、ExpansionTileなどに適用されています。", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PageStorageの基本使用", - "desc": [ - "【bucket】 : ストレージエリア 【PageStorageBucket】", - "【child】: 子コンポーネント 【Widget】", - "上記のインターフェースを切り替える際、コンポーネントの初期化時に状態がリセットされることはありません。例えばCountWidgetでは、子コンポーネントは初期化時にストレージから状態を読み取り、状態を変更する際に状態をストレージに書き込む必要があります。また、MaterialAppを使用すると、すでにPageStorageが組み込まれていますが、自分でPageStorageを作成することもできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ko_KR.json deleted file mode 100644 index 77bbbfac1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "페이지 스토리지", - "info": "페이지 상태를 저장할 수 있으며, 페이지 전환 시 상태를 유지할 수 있습니다. 소스 코드에서 ScrollView, PageView, ExpansionTile 등에 적용되어 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PageStorage 기본 사용", - "desc": [ - "【bucket】 : 저장 영역 【PageStorageBucket】", - "【child】: 자식 위젯 【Widget】", - "위에서 인터페이스를 전환할 때 초기화 컴포넌트는 상태를 재설정하지 않습니다. 위의 CountWidget과 같이, 자식 컴포넌트는 초기화 시 스토리지에서 상태를 읽어야 하며, 상태를 변경할 때 상태를 스토리지에 기록해야 합니다. 또한, MaterialApp을 사용하면 이미 내장된 PageStorage가 있지만, PageStorage를 직접 생성할 수도 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_pt_PT.json deleted file mode 100644 index e440872ab..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "Armazenamento de Página", - "info": "Pode armazenar o estado da página, mantendo o estado ao alternar entre páginas. No código-fonte, é aplicado em ScrollView, PageView, ExpansionTile, etc.", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do PageStorage", - "desc": [ - "【bucket】: Área de armazenamento 【PageStorageBucket】", - "【child】: Componente filho 【Widget】", - "Ao alternar a interface e inicializar componentes, o estado não será redefinido. Como no CountWidget, o componente filho precisa ler o estado do armazenamento durante a inicialização e escrever o estado no armazenamento ao alterar o estado. Além disso, se usar o MaterialApp, o PageStorage já está embutido, mas você também pode criar um PageStorage." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ru_RU.json deleted file mode 100644 index 16b638c74..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "Хранилище страниц", - "info": "Позволяет сохранять состояние страницы, чтобы оно сохранялось при переключении страниц. Используется в исходном коде в ScrollView, PageView, ExpansionTile и других.", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PageStorage", - "desc": [ - "【bucket】 : Область хранения 【PageStorageBucket】", - "【child】: Дочерний компонент 【Widget】", - "При переключении интерфейса инициализация компонентов не сбрасывает состояние. Например, CountWidget, дочерний компонент должен читать состояние из хранилища при инициализации и записывать состояние в хранилище при изменении состояния. Кроме того, если вы используете MaterialApp, PageStorage уже встроен, но вы также можете создать PageStorage." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_zh-CN.json deleted file mode 100644 index f511ec008..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "页面存储器", - "info": "可以将页面状态进行存储,在切页时可以保持状态。源码中在ScrollView、PageView、ExpansionTile等皆有应用。", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PageStorage基本使用", - "desc": [ - "【bucket】 : 存储区 【PageStorageBucket】", - "【child】: 子组件 【Widget】", - "上面切换界面初始化组件时并不会将状态重置。如上CountWidget,子组件需要在初始化时从存储器中读取状态,在改变状态时将状态量写入存储器。另外,如果使用MaterialApp已经内置了PageStorage,不过你也可以创建PageStorage。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/node1_base.dart deleted file mode 100644 index 5f7cf6a96..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/node1_base.dart +++ /dev/null @@ -1,109 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/8/14 -/// contact me by email 1981462002@qq.com - - -class PageStorageDemo extends StatefulWidget { - const PageStorageDemo({Key? key}) : super(key: key); - - @override - _PageStorageDemoState createState() => _PageStorageDemoState(); -} - -class _PageStorageDemoState extends State { - int _pageIndex = 0; - final PageStorageBucket _bucket = PageStorageBucket(); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Scaffold( - body: PageStorage( - child: _buildContentByIndex(), - bucket: _bucket, - ), - bottomNavigationBar: BottomNavigationBar( - elevation: 0, - backgroundColor: Colors.blueAccent.withAlpha(55), - currentIndex: _pageIndex, - onTap: (int index) { - setState(() { - _pageIndex = index; - }); - }, - items: const [ - BottomNavigationBarItem( - icon: Icon(Icons.home), - label: 'Home', - ), - BottomNavigationBarItem( - icon: Icon(Icons.settings), - label: 'Setting', - ), - ], - ), - ), - ); - } - - Widget _buildContentByIndex() { - if (_pageIndex == 0) { - return const CountWidget(key: PageStorageKey('CountWidget1')); - } - - if (_pageIndex == 1) { - return const CountWidget(key: PageStorageKey('CountWidget2')); - } - - return ListView(); - } -} - -class CountWidget extends StatefulWidget { - const CountWidget({Key? key}) : super(key: key); - - @override - _CountWidgetState createState() => _CountWidgetState(); -} - -class _CountWidgetState extends State { - int _count = 0; - - @override - void initState() { - super.initState(); - _count = PageStorage.of(context)?.readState(context); - } - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text('点击了$_count次'), - MaterialButton( - onPressed: _addCount, - child: const Icon( - Icons.add, - color: Colors.white, - ), - color: Colors.green, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - )) - ], - ), - ); - } - - void _addCount() { - setState(() { - _count++; - PageStorage.of(context)?.writeState(context, _count); - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_de_DE.json deleted file mode 100644 index 68fa7dad6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_de_DE.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "Platzhalter-Komponente", - "info": "Eine Platzhalter-Komponente mit einem Rechteck und einem Kreuz, bei der Farbe, Linienstärke, Breite, Höhe usw. angegeben werden können.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Eigenschaften des Platzhalters", - "desc": [ - "【color】: Farbe 【Color】", - "【strokeWidth】: Linienstärke 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Fallback-Eigenschaften des Platzhalters", - "desc": [ - "Wenn der Bereich keine Breiten- und Höhenbeschränkungen hat, die Breite und Höhe der Platzhalter-Komponente.", - "【fallbackHeight】: Höhe 【double】", - "【fallbackWidth】: Breite 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_en_US.json deleted file mode 100644 index 2b9703837..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_en_US.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "Placeholder Component", - "info": "A placeholder component with a rectangle and a cross, which can specify properties such as color, stroke width, width, and height.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Placeholder Basic Properties", - "desc": [ - "【color】: Color 【Color】", - "【strokeWidth】: Stroke Width 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Placeholder Fallback Properties", - "desc": [ - "When there are no width and height constraints in the area, the width and height of the placeholder component.", - "【fallbackHeight】: Height 【double】", - "【fallbackWidth】: Width 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_es_ES.json deleted file mode 100644 index 95a7a9a55..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_es_ES.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "Componente de marcador de posición", - "info": "Un componente de marcador de posición con un rectángulo y una cruz, que puede especificar propiedades como color, grosor de línea, ancho y alto.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propiedades básicas de Placeholder", - "desc": [ - "【color】: Color 【Color】", - "【strokeWidth】: Grosor de línea 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Propiedades de fallback de Placeholder", - "desc": [ - "Cuando no hay restricciones de ancho y alto en el área, el ancho y alto del componente de marcador de posición.", - "【fallbackHeight】: Alto 【double】", - "【fallbackWidth】: Ancho 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_fr_FR.json deleted file mode 100644 index d9df0a99c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_fr_FR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "Composant d'espace réservé", - "info": "Un composant d'espace réservé avec un rectangle et une croix, pouvant spécifier des propriétés telles que la couleur, l'épaisseur de la ligne, la largeur et la hauteur.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propriétés de base de Placeholder", - "desc": [ - "【color】: Couleur 【Color】", - "【strokeWidth】: Épaisseur de la ligne 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Propriétés de fallback de Placeholder", - "desc": [ - "Lorsque la zone n'a pas de contraintes de largeur et de hauteur, la largeur et la hauteur du composant d'espace réservé.", - "【fallbackHeight】: Hauteur 【double】", - "【fallbackWidth】: Largeur 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_it_IT.json deleted file mode 100644 index 3b343b5d2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_it_IT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "Componente segnaposto", - "info": "Un componente segnaposto con un rettangolo e una croce, che può specificare proprietà come colore, larghezza della linea, larghezza e altezza.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Proprietà di base del Placeholder", - "desc": [ - "【color】: Colore 【Color】", - "【strokeWidth】: Larghezza della linea 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Proprietà fallback del Placeholder", - "desc": [ - "Quando non ci sono vincoli di larghezza e altezza nell'area, la larghezza e l'altezza del componente segnaposto.", - "【fallbackHeight】: Altezza 【double】", - "【fallbackWidth】: Larghezza 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ja_JP.json deleted file mode 100644 index 295dc30f4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ja_JP.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "プレースホルダーコンポーネント", - "info": "矩形とバツ印のプレースホルダーコンポーネントで、色、線の太さ、幅と高さなどの属性を指定できます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Placeholderの基本属性", - "desc": [ - "【color】: 色 【Color】", - "【strokeWidth】: 線の太さ 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Placeholderのfallback属性", - "desc": [ - "エリアに幅と高さの制約がない場合のプレースホルダーコンポーネントの幅と高さ。", - "【fallbackHeight】: 高さ 【double】", - "【fallbackWidth】: 幅 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ko_KR.json deleted file mode 100644 index fe00fc2dd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ko_KR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "플레이스홀더 컴포넌트", - "info": "사각형과 엑스 표시가 있는 플레이스홀더 컴포넌트로, 색상, 선 두께, 너비 및 높이 등의 속성을 지정할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Placeholder 기본 속성", - "desc": [ - "【color】: 색상 【Color】", - "【strokeWidth】: 선 두께 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Placeholder의 fallback 속성", - "desc": [ - "해당 영역에 너비와 높이 제약이 없을 때 플레이스홀더 컴포넌트의 너비와 높이.", - "【fallbackHeight】: 높이 【double】", - "【fallbackWidth】: 너비 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_pt_PT.json deleted file mode 100644 index a74137ffa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_pt_PT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "Componente de Espaço Reservado", - "info": "Um componente de espaço reservado com um retângulo e um X, que permite especificar propriedades como cor, largura da linha, altura e largura.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propriedades Básicas do Placeholder", - "desc": [ - "【color】: Cor 【Color】", - "【strokeWidth】: Espessura da Linha 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Propriedades Fallback do Placeholder", - "desc": [ - "Quando a área não tem restrições de altura e largura, a altura e largura do componente de espaço reservado.", - "【fallbackHeight】: Altura 【double】", - "【fallbackWidth】: Largura 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ru_RU.json deleted file mode 100644 index 51a976029..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ru_RU.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "Компонент-заглушка", - "info": "Прямоугольный компонент-заглушка с крестиком, можно указать цвет, толщину линии, ширину, высоту и другие свойства.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основные свойства Placeholder", - "desc": [ - "【color】: Цвет 【Color】", - "【strokeWidth】: Толщина линии 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Свойства fallback Placeholder", - "desc": [ - "Ширина и высота компонента-заглушки, если в области нет ограничений по ширине и высоте.\"", - "【fallbackHeight】: Высота 【double】", - "【fallbackWidth】: Ширина 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_zh-CN.json deleted file mode 100644 index 00869967e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_zh-CN.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "占位组件", - "info": "一个矩形和叉叉的占位组件,可指定颜色、线宽、宽高等属性。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Placeholder基础属性", - "desc": [ - "【color】: 颜色 【Color】", - "【strokeWidth】: 线粗 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Placeholder的fallback属性", - "desc": [ - "当所在区域无宽高约束时,占位组件的宽高。\"", - "【fallbackHeight】: 高 【double】", - "【fallbackWidth】: 宽 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/node1_base.dart deleted file mode 100644 index 560a8a2e6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/node1_base.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomPlaceholder extends StatelessWidget { - const CustomPlaceholder({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const SizedBox( - width: 100, - height: 100*0.618, - child: Placeholder( - color: Colors.orangeAccent, - strokeWidth: 2, - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/node2_fallback.dart b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/node2_fallback.dart deleted file mode 100644 index 680283b51..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/node2_fallback.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class FallbackPlaceholder extends StatelessWidget { - const FallbackPlaceholder({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const UnconstrainedBox( - child: Placeholder( - color: Colors.blue, - strokeWidth: 2, - fallbackHeight: 100, - fallbackWidth: 150, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_de_DE.json deleted file mode 100644 index 63de5e989..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "Richtungsbasierte Positionierung", - "info": "Funktioniert wie die Positioned-Komponente, aber mit unterschiedlichen Eigenschaftsnamen. Kann nur in einem Stack verwendet werden und ermöglicht die präzise Platzierung einer Komponente durch Angabe der Abstände von oben, links, rechts und unten.", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PositionedDirectional", - "desc": [ - "【child】 : Komponente 【Widget】", - "【top】 : Abstand zum oberen Rand des Elternelements 【double】", - "【end】 : Abstand zum rechten Rand des Elternelements 【double】", - "【start】 : Abstand zum linken Rand des Elternelements 【double】", - "【bottom】 : Abstand zum unteren Rand des Elternelements 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_en_US.json deleted file mode 100644 index 950dd6978..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "Directional Positioning", - "info": "Same functionality as the Positioned component, but with different property names. It can only be used in a Stack, allowing precise placement of a component by specifying distances from the top, left, right, and bottom.", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PositionedDirectional", - "desc": [ - "【child】 : Component 【Widget】", - "【top】 : Distance to the top of the parent 【double】", - "【end】 : Distance to the right of the parent 【double】", - "【start】 : Distance to the left of the parent 【double】", - "【bottom】 : Distance to the bottom of the parent 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_es_ES.json deleted file mode 100644 index 8796fef0d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "Posicionamiento direccional", - "info": "Funciona igual que el componente Positioned, pero con nombres de propiedades diferentes. Solo se puede usar en Stack, y permite colocar un componente con precisión especificando las distancias desde la parte superior, inferior, izquierda y derecha.", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PositionedDirectional", - "desc": [ - "【child】 : Componente 【Widget】", - "【top】 : Distancia desde la parte superior del padre 【double】", - "【end】 : Distancia desde la derecha del padre 【double】", - "【start】 : Distancia desde la izquierda del padre 【double】", - "【bottom】 : Distancia desde la parte inferior del padre 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_fr_FR.json deleted file mode 100644 index cf354b507..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "Positionnement directionnel", - "info": "Fonctionne comme le composant Positioned, mais avec des noms de propriétés différents. Ne peut être utilisé que dans une Stack, permet de positionner précisément un composant en spécifiant les distances par rapport au haut, à gauche, à droite et au bas.", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PositionedDirectional", - "desc": [ - "【child】 : Composant 【Widget】", - "【top】 : Distance par rapport au haut du parent 【double】", - "【end】 : Distance par rapport à la droite du parent 【double】", - "【start】 : Distance par rapport à la gauche du parent 【double】", - "【bottom】 : Distance par rapport au bas du parent 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_it_IT.json deleted file mode 100644 index 6fb07841b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "Posizionamento Direzionale", - "info": "Funziona come il componente Positioned, ma con nomi di attributi diversi. Può essere utilizzato solo in Stack e consente di posizionare con precisione un componente specificando le distanze da sinistra, destra, alto e basso.", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di PositionedDirectional", - "desc": [ - "【child】 : Componente 【Widget】", - "【top】 : Distanza dal bordo superiore del genitore 【double】", - "【end】 : Distanza dal bordo destro del genitore 【double】", - "【start】 : Distanza dal bordo sinistro del genitore 【double】", - "【bottom】 : Distanza dal bordo inferiore del genitore 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ja_JP.json deleted file mode 100644 index 63112a1ed..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "方向定位", - "info": "Positionedコンポーネントと同じ機能で、属性名が異なります。Stack内でのみ使用でき、左上右下の距離を指定してコンポーネントを正確に配置できます。", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PositionedDirectional基本使用", - "desc": [ - "【child】 : コンポーネント 【Widget】", - "【top】 : 親の上端までの距離 【double】", - "【end】 : 親の右端までの距離 【double】", - "【start】 : 親の左端までの距離 【double】", - "【bottom】 : 親の下端までの距離 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ko_KR.json deleted file mode 100644 index b807c3b11..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "방향 위치 지정", - "info": "Positioned 컴포넌트와 기능이 동일하며, 속성 이름이 다릅니다. Stack에서만 사용할 수 있으며, 상하좌우 거리를 지정하여 특정 컴포넌트를 정확하게 배치할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PositionedDirectional 기본 사용", - "desc": [ - "【child】 : 컴포넌트 【Widget】", - "【top】 : 부모 상단까지의 거리 【double】", - "【end】 : 부모 오른쪽까지의 거리 【double】", - "【start】 : 부모 왼쪽까지의 거리 【double】", - "【bottom】 : 부모 하단까지의 거리 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_pt_PT.json deleted file mode 100644 index b594afb36..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "Posicionamento Direcional", - "info": "Funciona da mesma forma que o componente Positioned, mas com nomes de propriedades diferentes. Só pode ser usado em Stack, e permite especificar distâncias de cima, esquerda, direita e baixo para posicionar um componente com precisão.", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de PositionedDirectional", - "desc": [ - "【child】 : Componente 【Widget】", - "【top】 : Distância até o topo do pai 【double】", - "【end】 : Distância até a direita do pai 【double】", - "【start】 : Distância até a esquerda do pai 【double】", - "【bottom】 : Distância até a base do pai 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ru_RU.json deleted file mode 100644 index e0978368e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "Направленное позиционирование", - "info": "Функциональность аналогична компоненту Positioned, но с разными именами свойств. Может использоваться только в Stack, позволяет точно разместить компонент, указав расстояния до верха, низа, левого и правого краев.", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PositionedDirectional", - "desc": [ - "【child】 : Компонент 【Widget】", - "【top】 : Расстояние до верхнего края родителя 【double】", - "【end】 : Расстояние до правого края родителя 【double】", - "【start】 : Расстояние до левого края родителя 【double】", - "【bottom】 : Расстояние до нижнего края родителя 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_zh-CN.json deleted file mode 100644 index 225dc9998..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "方向定位", - "info": "和Positioned组件功能一样,属性名不同。只能用于Stack中,可以指定左上右下的距离对某个组件进行位置精确安放。", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PositionedDirectional基本使用", - "desc": [ - "【child】 : 组件 【Widget】", - "【top】 : 到父顶距离 【double】", - "【end】 : 到父右距离 【double】", - "【start】 : 到父左距离 【double】", - "【bottom】 : 到父底距离 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/node1_base.dart deleted file mode 100644 index d918c053e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/node1_base.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class CustomPositionedDirectional extends StatelessWidget { - const CustomPositionedDirectional({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Widget yellowBox = Container( - color: Colors.yellow, - height: 100, - width: 100, - ); - - Widget redBox = Container( - color: Colors.red, - height: 90, - width: 90, - ); - - Widget greenBox = Container( - color: Colors.green, - height: 80, - width: 80, - ); - - Widget cyanBox = Container( - color: Colors.cyanAccent, - height: 70, - width: 70, - ); - - return Container( - width: 200, - height: 120, - color: Colors.grey.withAlpha(33), - child: Stack( - children: [ - yellowBox, - redBox, - PositionedDirectional(top: 20, start: 20, child: greenBox), - PositionedDirectional( - child: cyanBox, - bottom: 10, - end: 10, - ) - ], - )); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_de_DE.json deleted file mode 100644 index 462a98c79..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_de_DE.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "Bevorzugte Größe", - "info": "Implementiert das PreferredSizeWidget-Interface, kann ein Kind-Widget aufnehmen, bevorzugte Größe festlegen und übt keine Einschränkungen auf sein Kind-Widget aus.", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PreferredSize passt die Höhe der AppBar an", - "desc": [ - "【preferredSize】 : Größe 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "Umwandlung und Verwendung von PreferredSize", - "desc": [ - "【PreferredSize wandelt ein normales Widget in ein PreferredSizeWidget um" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_en_US.json deleted file mode 100644 index 9dfdf89e3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_en_US.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "Preferred Size", - "info": "Implements the PreferredSizeWidget interface, can contain a child component, sets the preferred size, and does not impose any constraints on its child component.", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Adjusting AppBar Height with PreferredSize", - "desc": [ - "【preferredSize】 : size 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "Conversion and Usage of PreferredSize", - "desc": [ - "【PreferredSize converts a regular component into a PreferredSizeWidget" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_es_ES.json deleted file mode 100644 index eaa44d85b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_es_ES.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "Tamaño preferido", - "info": "Implementa la interfaz PreferredSizeWidget, puede contener un componente hijo, establece un tamaño preferido y no impone ninguna restricción a su componente hijo.", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Ajustar la altura de AppBar con PreferredSize", - "desc": [ - "【preferredSize】 : tamaño 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "Uso de conversión de PreferredSize", - "desc": [ - "【PreferredSize convierte un componente normal en un PreferredSizeWidget" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_fr_FR.json deleted file mode 100644 index 24b4e2a25..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_fr_FR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "Taille préférée", - "info": "Implémente l'interface PreferredSizeWidget, peut contenir un composant enfant, définit une taille préférée et n'impose aucune contrainte à son composant enfant.", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Ajuster la hauteur de l'AppBar avec PreferredSize", - "desc": [ - "【preferredSize】 : taille 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "Conversion et utilisation de PreferredSize", - "desc": [ - "【PreferredSize convertit un composant ordinaire en PreferredSizeWidget" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_it_IT.json deleted file mode 100644 index 280de33e7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_it_IT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "Dimensione Preferita", - "info": "Implementa l'interfaccia PreferredSizeWidget, può contenere un componente figlio, imposta una dimensione preferita e non applica alcun vincolo al suo componente figlio.", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Regolazione dell'altezza dell'AppBar con PreferredSize", - "desc": [ - "【preferredSize】 : dimensione 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "Conversione e utilizzo di PreferredSize", - "desc": [ - "【PreferredSize converte un componente comune in un PreferredSizeWidget" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ja_JP.json deleted file mode 100644 index 7e8a00689..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ja_JP.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "優先サイズ", - "info": "PreferredSizeWidgetインターフェースを実装しており、子コンポーネントを収容し、優先サイズを設定しますが、子コンポーネントに制約を課しません。", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PreferredSizeでAppBarの高さを調整", - "desc": [ - "【preferredSize】 : サイズ 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "PreferredSizeの変換と使用", - "desc": [ - "【PreferredSizeは通常のコンポーネントをPreferredSizeWidgetに変換します" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ko_KR.json deleted file mode 100644 index 8d61e15ca..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ko_KR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "우선 크기", - "info": "PreferredSizeWidget 인터페이스를 구현하여 하나의 자식 위젯을 수용하고 우선 크기를 설정하며, 자식 위젯에 어떠한 제약도 가하지 않습니다.", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PreferredSize로 AppBar 높이 조정", - "desc": [ - "【preferredSize】 : 크기 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "PreferredSize의 변환 사용", - "desc": [ - "【PreferredSize는 일반 위젯을 PreferredSizeWidget으로 변환합니다" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_pt_PT.json deleted file mode 100644 index 20c2181b8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_pt_PT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "Tamanho Preferido", - "info": "Implementa a interface PreferredSizeWidget, pode acomodar um componente filho, define o tamanho preferido e não impõe quaisquer restrições ao seu componente filho.", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Ajustar a altura do AppBar com PreferredSize", - "desc": [ - "【preferredSize】 : tamanho 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "Conversão e uso do PreferredSize", - "desc": [ - "【PreferredSize converte um componente comum em PreferredSizeWidget" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ru_RU.json deleted file mode 100644 index ded165f2f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ru_RU.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "Предпочтительный размер", - "info": "Реализует интерфейс PreferredSizeWidget, может содержать дочерний компонент, устанавливает предпочтительный размер и не накладывает никаких ограничений на свои дочерние компоненты.", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Настройка высоты AppBar с помощью PreferredSize", - "desc": [ - "【preferredSize】 : размер 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "Преобразование и использование PreferredSize", - "desc": [ - "【PreferredSize преобразует обычный компонент в PreferredSizeWidget" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_zh-CN.json deleted file mode 100644 index 77ca7e112..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_zh-CN.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "优先尺寸", - "info": "实现了PreferredSizeWidget接口,可容纳一个子组件,设置优先尺寸,不会对其子组件施加任何约束。", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PreferredSize调整AppBar高度", - "desc": [ - "【preferredSize】 : 尺寸 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "PreferredSize的转化使用", - "desc": [ - "【PreferredSize将普通组件转化为PreferredSizeWidget" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/node1_base.dart deleted file mode 100644 index 3879b6d30..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/node1_base.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/5/3 -/// contact me by email 1981462002@qq.com - -class CustomPreferredSize extends StatelessWidget { - const CustomPreferredSize({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Scaffold( - appBar: PreferredSize( - preferredSize: const Size.fromHeight(150), - child: AppBar( - title: const Text('PreferredSize'), - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/node2_adapter.dart b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/node2_adapter.dart deleted file mode 100644 index b68bf26cd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/node2_adapter.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/5/3 -/// contact me by email 1981462002@qq.com - -class AdapterPreferredSize extends StatelessWidget { - const AdapterPreferredSize({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Scaffold( - appBar: PreferredSize( - preferredSize: const Size.fromHeight(150), - child: AppBar( - title: const Text('PreferredSize'), - bottom: PreferredSize( - preferredSize: const Size.fromHeight(40), - child: Container( - height: 40, - color: Colors.orange, - ), - ), - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_de_DE.json deleted file mode 100644 index 191499f72..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_de_DE.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "Auswahlkachel", - "info": "Eine allgemeine Listenelementstruktur, die von Flutter bereitgestellt wird, mit einer mittel-rechten Struktur und einem Radio am Ende. Komponenten können an den entsprechenden Positionen eingefügt werden, wodurch spezifische Elemente leicht angepasst werden können.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile benötigt einen generischen Typ T", - "desc": [ - "【value】 : Elementobjekt 【T】", - "【groupValue】 : Ausgewähltes Objekt 【T】", - "【selected】: Ob ausgewählt 【bool】", - "【secondary】: Rechte Komponente 【Widget】", - "【title】: Obere mittlere Komponente 【Widget】", - "【subtitle】: Untere mittlere Komponente 【Widget】", - "【onChanged】: Wechselereignis 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "RadioListTile Auswahlfarbe und dichte Anordnung", - "desc": [ - "【activeColor】 : Farbe bei Auswahl 【Color】", - "【dense】: Ob dichte Anordnung 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_en_US.json deleted file mode 100644 index 5da2c4cd1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_en_US.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "Radio Tile", - "info": "A general list item structure provided by Flutter, with a middle-right structure, and a Radio at the end. Components can be inserted at corresponding positions, making it easy to handle specific items.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile requires a generic type T", - "desc": [ - "【value】 : Item object 【T】", - "【groupValue】 : Selected object 【T】", - "【selected】: Whether selected 【bool】", - "【secondary】: Right component 【Widget】", - "【title】: Middle top component 【Widget】", - "【subtitle】: Middle bottom component 【Widget】", - "【onChanged】: Switch event 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "RadioListTile selection color and dense layout", - "desc": [ - "【activeColor】 : Color when selected 【Color】", - "【dense】: Whether dense layout 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_es_ES.json deleted file mode 100644 index 4f1d55921..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_es_ES.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "Elemento de lista de radio", - "info": "Una estructura de elemento de lista genérica proporcionada por Flutter, con una estructura de centro-derecha y un Radio al final. Se pueden insertar componentes en las posiciones correspondientes, lo que permite manejar elementos específicos de manera conveniente.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile requiere un tipo genérico T", - "desc": [ - "【value】 : Objeto del elemento 【T】", - "【groupValue】 : Objeto seleccionado 【T】", - "【selected】: Si está seleccionado 【bool】", - "【secondary】: Componente derecho 【Widget】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【onChanged】: Evento de cambio 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "Color de selección y disposición densa de RadioListTile", - "desc": [ - "【activeColor】 : Color cuando está seleccionado 【Color】", - "【dense】: Si está en disposición densa 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_fr_FR.json deleted file mode 100644 index 80c5b656d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_fr_FR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "Tuile de bouton radio", - "info": "Une structure de liste générique fournie par Flutter, de structure centrale-droite, avec un bouton radio à la fin. Des composants peuvent être insérés aux positions appropriées, ce qui permet de répondre facilement à des entrées spécifiques.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile nécessite un type générique T", - "desc": [ - "【value】 : objet de l'entrée 【T】", - "【groupValue】 : objet sélectionné 【T】", - "【selected】: si sélectionné 【bool】", - "【secondary】: composant droit 【Widget】", - "【title】: composant supérieur central 【Widget】", - "【subtitle】: composant inférieur central 【Widget】", - "【onChanged】: événement de bascule 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "Couleur de sélection et alignement serré de RadioListTile", - "desc": [ - "【activeColor】 : couleur lors de la sélection 【Color】", - "【dense】: si alignement serré 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_it_IT.json deleted file mode 100644 index 7f1f85e33..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_it_IT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "Piastrella Radio", - "info": "Una struttura di elenco generica fornita da Flutter, con una struttura centrale-destra, e una Radio alla fine. I componenti possono essere inseriti nelle posizioni corrispondenti, rendendo facile adattarsi a voci specifiche.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile richiede un tipo generico T", - "desc": [ - "【value】 : oggetto voce 【T】", - "【groupValue】 : oggetto selezionato 【T】", - "【selected】: se selezionato 【bool】", - "【secondary】: componente a destra 【Widget】", - "【title】: componente superiore centrale 【Widget】", - "【subtitle】: componente inferiore centrale 【Widget】", - "【onChanged】: evento di cambio 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "Colore selezionato e disposizione compatta di RadioListTile", - "desc": [ - "【activeColor】 : colore quando selezionato 【Color】", - "【dense】: se disposto in modo compatto 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ja_JP.json deleted file mode 100644 index e37e7747d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ja_JP.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "ラジオタイル", - "info": "Flutterが提供する一般的なリストアイテム構造で、中央右構造で、末尾にラジオがあります。対応する位置にコンポーネントを挿入でき、特定のアイテムに簡単に対応できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTileはジェネリック型Tを必要とします", - "desc": [ - "【value】 : アイテムオブジェクト 【T】", - "【groupValue】 : 選択オブジェクト 【T】", - "【selected】: 選択されているかどうか 【bool】", - "【secondary】: 右側のコンポーネント 【Widget】", - "【title】: 中央上部のコンポーネント 【Widget】", - "【subtitle】: 中央下部のコンポーネント 【Widget】", - "【onChanged】: 切り替えイベント 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "RadioListTileの選択色と密排", - "desc": [ - "【activeColor】 : 選択時の色 【Color】", - "【dense】: 密排かどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ko_KR.json deleted file mode 100644 index 1deb0e6a0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ko_KR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "라디오 타일", - "info": "Flutter에서 제공하는 일반적인 목록 항목 구조로, 중앙-오른쪽 구조이며 끝에 라디오 버튼이 있습니다. 해당 위치에 컴포넌트를 삽입할 수 있어 특정 항목에 쉽게 대응할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile은 제네릭 T가 필요합니다", - "desc": [ - "【value】 : 항목 객체 【T】", - "【groupValue】 : 선택된 객체 【T】", - "【selected】: 선택 여부 【bool】", - "【secondary】: 오른쪽 컴포넌트 【Widget】", - "【title】: 중앙 상단 컴포넌트 【Widget】", - "【subtitle】: 중앙 하단 컴포넌트 【Widget】", - "【onChanged】: 전환 이벤트 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "RadioListTile 선택 색상 및 밀집 배치", - "desc": [ - "【activeColor】 : 선택 시 색상 【Color】", - "【dense】: 밀집 배치 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_pt_PT.json deleted file mode 100644 index 708dd9bc0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_pt_PT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "Azulejo de Rádio", - "info": "Uma estrutura de item de lista genérica fornecida pelo Flutter, com uma estrutura de centro-direita, e um Rádio na extremidade. Componentes podem ser inseridos nas posições correspondentes, o que permite lidar facilmente com itens específicos.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile requer um tipo genérico T", - "desc": [ - "【value】 : objeto do item 【T】", - "【groupValue】 : objeto selecionado 【T】", - "【selected】: está selecionado 【bool】", - "【secondary】: componente à direita 【Widget】", - "【title】: componente superior no centro 【Widget】", - "【subtitle】: componente inferior no centro 【Widget】", - "【onChanged】: evento de alternância 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "Cor de seleção e disposição densa do RadioListTile", - "desc": [ - "【activeColor】 : cor quando selecionado 【Color】", - "【dense】: disposição densa 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ru_RU.json deleted file mode 100644 index b4a2d170d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ru_RU.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "Плитка с радиокнопкой", - "info": "Универсальная структура элемента списка, предоставляемая Flutter, имеет структуру с центром справа, в конце которой находится радиокнопка. В соответствующие позиции можно вставлять компоненты, что позволяет легко адаптироваться к определенным элементам.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile требует обобщенный тип T", - "desc": [ - "【value】 : объект элемента 【T】", - "【groupValue】 : выбранный объект 【T】", - "【selected】: выбран ли элемент 【bool】", - "【secondary】: правый компонент 【Widget】", - "【title】: верхний центральный компонент 【Widget】", - "【subtitle】: нижний центральный компонент 【Widget】", - "【onChanged】: событие переключения 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "Цвет выбора и плотное расположение RadioListTile", - "desc": [ - "【activeColor】 : цвет при выборе 【Color】", - "【dense】: плотное расположение 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_zh-CN.json deleted file mode 100644 index 814244243..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_zh-CN.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "选钮瓦片", - "info": "Flutter提供的一个通用列表条目结构,为中右结构,尾部是一个Radio。相应位置可插入组件,可以很方便地应对特定的条目。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile需要一个泛型T", - "desc": [ - "【value】 : 条目对象 【T】", - "【groupValue】 : 选中对象 【T】", - "【selected】: 是否选中 【bool】", - "【secondary】: 右侧组件 【Widget】", - "【title】: 中间上组件 【Widget】", - "【subtitle】: 中间下组件 【Widget】", - "【onChanged】: 切换事件 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "RadioListTile选中色和密排", - "desc": [ - "【activeColor】 : 选中时颜色 【Color】", - "【dense】: 是否密排 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/node1_base.dart deleted file mode 100644 index 9e32a0cf7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/node1_base.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - - -enum ItemType { - java, - kotlin, - dart, -} - -class ItemBean { - final String title; - final String subTitle; - final String imgUrl; - - ItemBean(this.title, this.subTitle, this.imgUrl); -} - -class CustomRadioListTile extends StatefulWidget { - const CustomRadioListTile({Key? key}) : super(key: key); - - @override - _CustomRadioListTileState createState() => _CustomRadioListTileState(); -} - -class _CustomRadioListTileState extends State { - final Map languages = { - ItemType.java: - ItemBean("Java", "曾经世界上最流行的语言", "assets/images/java.webp"), - ItemType.kotlin: - ItemBean("Kotlin", "未来世界上最流行的语言", "assets/images/kotlin.webp"), - ItemType.dart: - ItemBean("Dart", "世界上最优雅的语言", "assets/images/dart.webp"), - }; - ItemType _type = ItemType.java; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.grey.withAlpha(11), - child: Column( - mainAxisSize: MainAxisSize.min, - children: languages.keys - .map((type) => RadioListTile( - value: type, - groupValue: _type, - title: Text(languages[type]!.title), - subtitle: Text(languages[type]!.subTitle), - selected: _type == type, - secondary: CircleAvatar( - backgroundImage: AssetImage(languages[type]!.imgUrl), - ), - onChanged: (ItemType? type) => setState(() => _type = type?? _type), - )) - .toList()), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/node2_dense.dart b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/node2_dense.dart deleted file mode 100644 index dcbd3e3c0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/node2_dense.dart +++ /dev/null @@ -1,61 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - - -enum ItemType { - java, - kotlin, - dart, -} - -class ItemBean { - final String title; - final String subTitle; - final String imgUrl; - - ItemBean(this.title, this.subTitle, this.imgUrl); -} - -class DenseRadioListTile extends StatefulWidget { - const DenseRadioListTile({Key? key}) : super(key: key); - - @override - _DenseRadioListTileState createState() => _DenseRadioListTileState(); -} - -class _DenseRadioListTileState extends State { - final Map languages = { - ItemType.java: ItemBean("Java", "曾经世界上最流行的语言", "assets/images/java.webp"), - ItemType.kotlin: - ItemBean("Kotlin", "未来世界上最流行的语言", "assets/images/kotlin.webp"), - ItemType.dart: ItemBean("Dart", "世界上最优雅的语言", "assets/images/dart.webp"), - }; - ItemType _type = ItemType.java; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.grey.withAlpha(11), - child: Column( - mainAxisSize: MainAxisSize.min, - children: languages.keys - .map((type) => RadioListTile( - value: type, - groupValue: _type, - title: Text(languages[type]!.title), - activeColor: Colors.orangeAccent, - dense: true, - subtitle: Text(languages[type]!.subTitle), - selected: _type == type, - secondary: CircleAvatar( - backgroundImage: AssetImage(languages[type]!.imgUrl), - ), - onChanged: (ItemType? type) => - setState(() => _type = type ?? _type), - )) - .toList()), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_de_DE.json deleted file mode 100644 index f18bf9939..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_de_DE.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "Erhobener Button", - "info": "Ein Button mit Schatten, basierend auf MaterialButton, alle Eigenschaften ähneln MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RaisedButton Klick-Ereignis", - "desc": [ - "【color】: Farbe 【Color】", - "【splashColor】: Wasserwellenfarbe 【Color】", - "【elevation】: Schattentiefe 【double】", - "【child】: Untergeordnete Komponente 【Widget】", - "【textColor】: Textfarbe der Untergeordneten Komponente 【Color】", - "【highlightColor】: Hervorhebungsfarbe bei langem Drücken 【Color】", - "【padding】: Innenabstand 【EdgeInsetsGeometry】", - "【onPressed】: Klick-Ereignis 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'RaisedButton wurde in Flutter 3.3 aus dem Verkehr gezogen. Der Ersatz ist der ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_en_US.json deleted file mode 100644 index 44af003d6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_en_US.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "Raised Button", - "info": "A raised button with shadow, implemented based on MaterialButton, with all properties similar to MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RaisedButton Click Event", - "desc": [ - "【color】: Color 【Color】", - "【splashColor】: Ripple Color 【Color】", - "【elevation】: Shadow Depth 【double】", - "【child】: Child Widget 【Widget】", - "【textColor】: Child Widget Text Color 【Color】", - "【highlightColor】: Long Press Highlight Color 【Color】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【onPressed】: Click Event 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'RaisedButton button has exited the stage in Flutter 3.3. The replacement is the ElevatedButton button.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_es_ES.json deleted file mode 100644 index ed720d07d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_es_ES.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "Botón elevado", - "info": "Un botón elevado con sombra, implementado basado en MaterialButton, todas las propiedades son similares a MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clic de RaisedButton", - "desc": [ - "【color】: Color 【Color】", - "【splashColor】: Color de la onda 【Color】", - "【elevation】: Profundidad de la sombra 【double】", - "【child】: Widget hijo 【Widget】", - "【textColor】: Color del texto del widget hijo 【Color】", - "【highlightColor】: Color de resaltado al mantener presionado 【Color】", - "【padding】: Relleno interno 【EdgeInsetsGeometry】", - "【onPressed】: Evento de clic 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'El botón RaisedButton ha dejado de usarse a partir de Flutter 3.3. Su reemplazo es el botón ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_fr_FR.json deleted file mode 100644 index 27552483f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_fr_FR.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "Bouton surélevé", - "info": "Bouton surélevé avec ombre, basé sur MaterialButton, toutes les propriétés sont similaires à MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événement de clic sur RaisedButton", - "desc": [ - "【color】: Couleur 【Color】", - "【splashColor】: Couleur de l'effet de vague 【Color】", - "【elevation】: Profondeur de l'ombre 【double】", - "【child】: Composant enfant 【Widget】", - "【textColor】: Couleur du texte du composant enfant 【Color】", - "【highlightColor】: Couleur de surbrillance lors d'un appui long 【Color】", - "【padding】: Marge intérieure 【EdgeInsetsGeometry】", - "【onPressed】: Événement de clic 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Le bouton RaisedButton a quitté la scène historique avec Flutter 3.3. Il est remplacé par le bouton ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_it_IT.json deleted file mode 100644 index c2a30a3ab..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_it_IT.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "Pulsante sollevato", - "info": "Un pulsante sollevato con ombre, basato su MaterialButton, con proprietà simili a MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento di clic di RaisedButton", - "desc": [ - "【color】: Colore 【Color】", - "【splashColor】: Colore dell'effetto splash 【Color】", - "【elevation】: Profondità dell'ombra 【double】", - "【child】: Widget figlio 【Widget】", - "【textColor】: Colore del testo del widget figlio 【Color】", - "【highlightColor】: Colore di evidenziazione durante il press lungo 【Color】", - "【padding】: Spaziatura interna 【EdgeInsetsGeometry】", - "【onPressed】: Evento di clic 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Il pulsante RaisedButton è uscito di scena in Flutter 3.3. Il suo sostituto è il pulsante ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ja_JP.json deleted file mode 100644 index 9e5f8b39a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ja_JP.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "浮き上がるボタン", - "info": "影付きの浮き上がるボタンで、MaterialButtonを基に実装されています。すべてのプロパティはMaterialButtonと同様です。", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RaisedButtonクリックイベント", - "desc": [ - "【color】: 色 【Color】", - "【splashColor】: 波紋の色 【Color】", - "【elevation】: 影の深さ 【double】", - "【child】: 子ウィジェット 【Widget】", - "【textColor】: 子ウィジェットのテキスト色 【Color】", - "【highlightColor】: 長押し時のハイライト色 【Color】", - "【padding】: パディング 【EdgeInsetsGeometry】", - "【onPressed】: クリックイベント 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'RaisedButton ボタンは Flutter3.3 で歴史の舞台から退きました。代替として ElevatedButton ボタンがあります。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ko_KR.json deleted file mode 100644 index a23105c74..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ko_KR.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "떠오르는 버튼", - "info": "그림자가 있는 떠오르는 버튼, MaterialButton을 기반으로 구현되었으며 모든 속성은 MaterialButton과 유사합니다.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RaisedButton 클릭 이벤트", - "desc": [ - "【color】: 색상 【Color】", - "【splashColor】: 물결 효과 색상 【Color】", - "【elevation】: 그림자 깊이 【double】", - "【child】: 자식 위젯 【Widget】", - "【textColor】: 자식 위젯 텍스트 색상 【Color】", - "【highlightColor】: 길게 누를 때 강조 색상 【Color】", - "【padding】: 안쪽 여백 【EdgeInsetsGeometry】", - "【onPressed】: 클릭 이벤트 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'RaisedButton 버튼은 Flutter3.3에서 역사의 뒤안길로 사라졌습니다. 대체 버튼은 ElevatedButton입니다.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_pt_PT.json deleted file mode 100644 index 40fb855cf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_pt_PT.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "Botão Elevado", - "info": "Um botão elevado com sombra, baseado no MaterialButton, com todas as propriedades semelhantes ao MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de Clique do RaisedButton", - "desc": [ - "【color】: Cor 【Color】", - "【splashColor】: Cor do efeito de onda 【Color】", - "【elevation】: Profundidade da sombra 【double】", - "【child】: Widget filho 【Widget】", - "【textColor】: Cor do texto do widget filho 【Color】", - "【highlightColor】: Cor de destaque ao pressionar 【Color】", - "【padding】: Espaçamento interno 【EdgeInsetsGeometry】", - "【onPressed】: Evento de clique 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'O botão RaisedButton foi descontinuado no Flutter 3.3. O substituto é o botão ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ru_RU.json deleted file mode 100644 index fccd3d2ea..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ru_RU.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "Кнопка с тенью", - "info": "Кнопка с тенью, реализованная на основе MaterialButton, все свойства аналогичны MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Событие нажатия RaisedButton", - "desc": [ - "【color】: Цвет 【Color】", - "【splashColor】: Цвол водной ряби 【Color】", - "【elevation】: Глубина тени 【double】", - "【child】: Дочерний виджет 【Widget】", - "【textColor】: Цвет текста дочернего виджета 【Color】", - "【highlightColor】: Цвет подсветки при длительном нажатии 【Color】", - "【padding】: Внутренние отступы 【EdgeInsetsGeometry】", - "【onPressed】: Событие нажатия 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Кнопка RaisedButton ушла с исторической сцены в Flutter 3.3. Её заменила кнопка ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_zh-CN.json deleted file mode 100644 index e1cac5feb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_zh-CN.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "浮起按钮", - "info": "有阴影的浮起按钮,基于MaterialButton实现,所有属性和MaterialButton类似。", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RaisedButton点击事件", - "desc": [ - "【color】: 颜色 【Color】", - "【splashColor】: 水波纹颜色 【Color】", - "【elevation】: 影深 【double】", - "【child】: 子组件 【Widget】", - "【textColor】: 子组件文字颜色 【Color】", - "【highlightColor】: 长按高亮色 【Color】", - "【padding】: 内边距 【EdgeInsetsGeometry】", - "【onPressed】: 点击事件 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'RaisedButton 按钮于 Flutter3.3 退出历史舞台。取代者为 ElevatedButton 按钮。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/node1_base.dart deleted file mode 100644 index f8123b6a3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/node1_base.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class CustomRaisedButton extends StatelessWidget { - const CustomRaisedButton({Key? key}) : super(key: key); - - final String info = - 'RaisedButton 按钮于 Flutter3.3 退出历史舞台。取代者为 ElevatedButton 按钮。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_de_DE.json deleted file mode 100644 index 8ebab7344..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "Originalle Lupe", - "info": "Eine Lupe, die jede Komponente darunter vergrößern kann. Kann Eigenschaften wie Dekorationsform, Größe, Versatz usw. festlegen.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einfache Verwendung von RawMagnifier", - "desc": [ - "【size】: Größe 【Size】", - "【magnificationScale】: Vergrößerungsmaßstab 【double】", - "【focalPointOffset】: Versatz des vergrößerten Inhalts 【Offset】", - "【decoration】: Dekoration entdecken 【MagnifierDecoration】", - "【child】: Untergeordnete Komponente 【Widget?】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Benutzerdefinierte Dekorationsform für RawMagnifier", - "desc": [ - "Hier wird eine benutzerdefinierte fünfzackige Dekorationsform erstellt" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_en_US.json deleted file mode 100644 index 0000d3448..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "Original Magnifier", - "info": "A magnifier that can magnify any component below it. Properties such as decoration shape, size, offset, etc., can be set.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Simple use of RawMagnifier", - "desc": [ - "【size】: Size 【Size】", - "【magnificationScale】: Magnification 【double】", - "【focalPointOffset】: Magnification content offset 【Offset】", - "【decoration】: Decoration 【MagnifierDecoration】", - "【child】: Child component 【Widget?】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Custom decoration shape for RawMagnifier", - "desc": [ - "Customize the five-pointed star decoration shape here" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_es_ES.json deleted file mode 100644 index f9ddd7fa0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "Lupa original", - "info": "Una lupa que puede ampliar cualquier componente debajo, permite configurar propiedades como la forma de decoración, tamaño, desplazamiento, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RawMagnifier", - "desc": [ - "【size】: Tamaño 【Size】", - "【magnificationScale】: Escala de ampliación 【double】", - "【focalPointOffset】: Desplazamiento del contenido ampliado 【Offset】", - "【decoration】: Decoración de la lupa 【MagnifierDecoration】", - "【child】: Componente hijo 【Widget?】," - ] - }, - { - "file": "node2_shape.dart", - "name": "Forma de decoración personalizada de RawMagnifier", - "desc": [ - "Aquí se personaliza la forma de decoración en estrella de cinco puntas" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_fr_FR.json deleted file mode 100644 index 7238b8f70..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "Loupe brute", - "info": "Une loupe qui peut agrandir n'importe quel composant en dessous, avec des propriétés réglables telles que la forme de décoration, la taille, le décalage, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation simple de RawMagnifier", - "desc": [ - "【size】 : Taille 【Size】", - "【magnificationScale】 : Échelle de grossissement 【double】", - "【focalPointOffset】: Décalage du point focal 【Offset】", - "【decoration】: Décoration de découverte 【MagnifierDecoration】", - "【child】: Composant enfant 【Widget?】," - ] - }, - { - "file": "node2_shape.dart", - "name": "Forme de décoration personnalisée de RawMagnifier", - "desc": [ - "Ici, une forme de décoration en étoile à cinq branches personnalisée" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_it_IT.json deleted file mode 100644 index d8de73b79..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "Lente d'ingrandimento originale", - "info": "Una lente d'ingrandimento che può ingrandire qualsiasi componente sottostante, con proprietà come forma decorativa, dimensioni, offset, ecc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso semplice di RawMagnifier", - "desc": [ - "【size】 : Dimensioni 【Size】", - "【magnificationScale】 : Fattore di ingrandimento 【double】", - "【focalPointOffset】: Offset del contenuto ingrandito 【Offset】", - "【decoration】: Decorazione scoperta 【MagnifierDecoration】", - "【child】: Componente figlio 【Widget?】," - ] - }, - { - "file": "node2_shape.dart", - "name": "Forma decorativa personalizzata di RawMagnifier", - "desc": [ - "Qui viene personalizzata la forma decorativa a stella a cinque punte" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ja_JP.json deleted file mode 100644 index 363187ab4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "原拡大鏡", - "info": "任意のコンポーネントを拡大する拡大鏡で、装飾形状、サイズ、オフセットなどのプロパティを設定できます。", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawMagnifier の簡単な使用", - "desc": [ - "【size】 : サイズ 【Size】", - "【magnificationScale】 : 倍率 【double】", - "【focalPointOffset】: 拡大内容のオフセット 【Offset】", - "【decoration】: 装飾を発見 【MagnifierDecoration】", - "【child】: 子コンポーネント 【Widget?】," - ] - }, - { - "file": "node2_shape.dart", - "name": "RawMagnifier カスタム装飾形状", - "desc": [ - "ここで五角形の装飾形状をカスタマイズします" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ko_KR.json deleted file mode 100644 index 3f6e40366..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "원 확대경", - "info": "아래의 임의의 컴포넌트를 확대할 수 있는 확대경으로, 장식 모양, 크기, 오프셋 등의 속성을 설정할 수 있습니다.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawMagnifier의 간단한 사용", - "desc": [ - "【size】 : 크기 【Size】", - "【magnificationScale】 : 확대 배율 【double】", - "【focalPointOffset】: 확대 내용 오프셋 【Offset】", - "【decoration】: 장식 발견 【MagnifierDecoration】", - "【child】: 자식 컴포넌트 【Widget?】," - ] - }, - { - "file": "node2_shape.dart", - "name": "RawMagnifier 사용자 정의 장식 모양", - "desc": [ - "여기서 사용자 정의 오각형 장식 모양" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_pt_PT.json deleted file mode 100644 index fab2680dc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "Lupa Original", - "info": "Uma lupa que pode ampliar qualquer componente abaixo, com propriedades configuráveis como forma de decoração, tamanho, deslocamento, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso simples do RawMagnifier", - "desc": [ - "【size】 : Tamanho 【Size】", - "【magnificationScale】 : Escala de ampliação 【double】", - "【focalPointOffset】: Deslocamento do conteúdo ampliado 【Offset】", - "【decoration】: Decoração descoberta 【MagnifierDecoration】", - "【child】: Componente filho 【Widget?】," - ] - }, - { - "file": "node2_shape.dart", - "name": "Forma de decoração personalizada do RawMagnifier", - "desc": [ - "Aqui, personaliza-se a forma de decoração em estrela de cinco pontas" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ru_RU.json deleted file mode 100644 index 43de5b17c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "Исходная лупа", - "info": "Лупа, которая может увеличивать любой компонент под ней, можно настроить такие свойства, как форма декора, размер, смещение и т.д.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Простое использование RawMagnifier", - "desc": [ - "【size】 : Размер 【Size】", - "【magnificationScale】 : Увеличение 【double】", - "【focalPointOffset】: Смещение увеличенного содержимого 【Offset】", - "【decoration】: Обнаружение декора 【MagnifierDecoration】", - "【child】: Дочерний компонент 【Widget?】," - ] - }, - { - "file": "node2_shape.dart", - "name": "Пользовательская форма декора RawMagnifier", - "desc": [ - "Здесь пользовательская форма декора в виде пятиконечной звезды" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_zh-CN.json deleted file mode 100644 index 0eb7cf711..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "原放大镜", - "info": "一个可以放大下方任意组件的放大镜,可以设置装饰形状、尺寸、偏移量等属性。", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawMagnifier 的简单使用", - "desc": [ - "【size】 : 尺寸 【Size】", - "【magnificationScale】 : 放大倍率 【double】", - "【focalPointOffset】: 放大内容偏移量 【Offset】", - "【decoration】: 发现装饰 【MagnifierDecoration】", - "【child】: 子组件 【Widget?】," - ] - }, - { - "file": "node2_shape.dart", - "name": "RawMagnifier 自定义装饰形状", - "desc": [ - "这里自定义五角星装饰形状" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/node1_base.dart deleted file mode 100644 index a391e6224..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/node1_base.dart +++ /dev/null @@ -1,76 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class MagnifierCircleShape extends StatefulWidget{ - - const MagnifierCircleShape({super.key}); - - @override - State createState() => _MagnifierCircleShapeState(); -} - -class _MagnifierCircleShapeState extends State { - final Size magnifierSize = const Size(150, 150); - - @override - Widget build(BuildContext context) { - return Stack( - alignment: Alignment.center, - children: [ - GestureDetector( - onPanDown: _onPanDown, - onPanEnd: _onPanEnd, - onPanUpdate: _onPanUpdate, - onPanCancel: _onPanCancel, - child: Image.asset('assets/images/sabar_bar.webp')), - Text("张风捷特烈",style: TextStyle(color: Colors.white),), - if(_show) - Positioned( - left: _dragGesturePosition.dx, - top: _dragGesturePosition.dy, - child: _buildMagnifier()), - ], - ); - } - - Widget _buildMagnifier(){ - return RawMagnifier( - decoration: const MagnifierDecoration( - shape: CircleBorder( - side: BorderSide(color: Colors.blue, width: 2), - ), - ), - size: magnifierSize, - // focalPointOffset: Offset(-10, 0), - magnificationScale: 3, - ); - } - - Offset _dragGesturePosition = Offset.zero; - bool _show = false; - - void _onPanDown(DragDownDetails details) { - _dragGesturePosition = details.localPosition-Offset(magnifierSize.width/2,magnifierSize.height/2); - _show = true; - setState(() { - - }); - } - - void _onPanEnd(DragEndDetails details) { - setState(() => _show = false); - } - - void _onPanUpdate(DragUpdateDetails details) { - _dragGesturePosition = details.localPosition-Offset(magnifierSize.width/2,magnifierSize.height/2); - setState(() { - - }); - } - - void _onPanCancel() { - setState(() => _show = false); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/node2_shape.dart b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/node2_shape.dart deleted file mode 100644 index 69fd15080..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/node2_shape.dart +++ /dev/null @@ -1,117 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class MagnifierStarShape extends StatefulWidget{ - - const MagnifierStarShape({super.key}); - - @override - State createState() => _MagnifierStarShapeState(); -} - -class _MagnifierStarShapeState extends State { - final Size magnifierSize = const Size(150, 150); - - @override - Widget build(BuildContext context) { - return Stack( - alignment: Alignment.center, - children: [ - GestureDetector( - onPanDown: _onPanDown, - onPanEnd: _onPanEnd, - onPanUpdate: _onPanUpdate, - onPanCancel: _onPanCancel, - child: Image.asset('assets/images/sabar_bar.webp')), - Text("张风捷特烈",style: TextStyle(color: Colors.white),), - if(_show) - Positioned( - left: _dragGesturePosition.dx, - top: _dragGesturePosition.dy, - child: _buildMagnifier()), - ], - ); - } - - Widget _buildMagnifier(){ - return RawMagnifier( - decoration: MagnifierDecoration( - shape: _StarShapeBorder(), - ), - size: magnifierSize, - // focalPointOffset: Offset(-10, 0), - magnificationScale: 3, - ); - } - - Offset _dragGesturePosition = Offset.zero; - bool _show = false; - - void _onPanDown(DragDownDetails details) { - _dragGesturePosition = details.localPosition-Offset(magnifierSize.width/2,magnifierSize.height/2); - _show = true; - setState(() { - - }); - } - - void _onPanEnd(DragEndDetails details) { - setState(() => _show = false); - } - - void _onPanUpdate(DragUpdateDetails details) { - _dragGesturePosition = details.localPosition-Offset(magnifierSize.width/2,magnifierSize.height/2); - setState(() { - - }); - } - - void _onPanCancel() { - setState(() => _show = false); - } -} - -class _StarShapeBorder extends ShapeBorder { - final Path _path = Path(); - - @override - EdgeInsetsGeometry get dimensions => EdgeInsets.zero; - - @override - Path getInnerPath(Rect rect, {TextDirection? textDirection}) { - return Path(); - } - - @override - Path getOuterPath(Rect rect, {TextDirection? textDirection}) => - nStarPath(5, rect.height / 2, rect.height / 2 * 0.5, - dx: rect.width / 2, dy: rect.height / 2); - - @override - void paint(Canvas canvas, Rect rect, {TextDirection? textDirection}) { - Paint paint = Paint()..style=PaintingStyle.stroke..color=Colors.blue..strokeWidth =2; - canvas.drawPath(getOuterPath(rect), paint); - } - - Path nStarPath(int num, double R, double r, {dx = 0, dy = 0}) { - double perRad = 2 * pi / num; - double radA = perRad / 2 / 2; - double radB = 2 * pi / (num - 1) / 2 - radA / 2 + radA; - _path.moveTo(cos(radA) * R + dx, -sin(radA) * R + dy); - for (int i = 0; i < num; i++) { - _path.lineTo( - cos(radA + perRad * i) * R + dx, -sin(radA + perRad * i) * R + dy); - _path.lineTo( - cos(radB + perRad * i) * r + dx, -sin(radB + perRad * i) * r + dy); - } - _path.close(); - return _path; - } - - @override - ShapeBorder scale(double t) => this; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_de_DE.json deleted file mode 100644 index 74eedc963..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "Sicherheitsbereich", - "info": "Durch das Hinzufügen von Innenabständen werden Layoutprobleme angepasst, die durch die Besonderheiten einiger Handys (abgerundete Ecken, Notch-Display usw.) verursacht werden.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SafeArea Verwendungstest", - "desc": [ - "【left】 : Ob die linke Seite aktiviert ist 【bool】", - "【top】 : Ob die obere Seite aktiviert ist 【bool】", - "【bottom】 : Ob die untere Seite aktiviert ist 【bool】", - "【right】 : Ob die rechte Seite aktiviert ist 【bool】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_en_US.json deleted file mode 100644 index e50a9b22a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "Safe Area", - "info": "Adapts layout issues caused by some phone-specific features (rounded corners, notches, etc.) by adding padding.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SafeArea Usage Test", - "desc": [ - "【left】: Whether to enable the left side 【bool】", - "【top】: Whether to enable the top 【bool】", - "【bottom】: Whether to enable the bottom 【bool】", - "【right】: Whether to enable the right side 【bool】", - "【child】: Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_es_ES.json deleted file mode 100644 index 0f677038b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "Área segura", - "info": "Adapta los problemas de diseño causados por las características especiales de algunos teléfonos (esquinas redondeadas, muescas, etc.) mediante la adición de relleno.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Prueba de uso de SafeArea", - "desc": [ - "【left】 : Si está habilitado en el lado izquierdo 【bool】", - "【top】 : Si está habilitado en la parte superior 【bool】", - "【bottom】 : Si está habilitado en la parte inferior 【bool】", - "【right】 : Si está habilitado en el lado derecho 【bool】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_fr_FR.json deleted file mode 100644 index dff12976f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "Zone de sécurité", - "info": "Adapte les problèmes de mise en page causés par les particularités de certains téléphones (coins arrondis, encoche, etc.) en ajoutant des marges intérieures.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Test d'utilisation de SafeArea", - "desc": [ - "【left】 : Activer à gauche 【bool】", - "【top】 : Activer en haut 【bool】", - "【bottom】 : Activer en bas 【bool】", - "【right】 : Activer à droite 【bool】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_it_IT.json deleted file mode 100644 index b53272198..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "Area Sicura", - "info": "Adatta i problemi di layout causati da alcune caratteristiche speciali dei telefoni (angoli arrotondati, notch, ecc.) aggiungendo un padding.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Test di utilizzo di SafeArea", - "desc": [ - "【left】 : Se abilitare il lato sinistro 【bool】", - "【top】 : Se abilitare la parte superiore 【bool】", - "【bottom】 : Se abilitare la parte inferiore 【bool】", - "【right】 : Se abilitare il lato destro 【bool】", - "【child】 : Widget figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ja_JP.json deleted file mode 100644 index f1b2021a3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "セーフエリア", - "info": "パディングを追加することで、一部のスマートフォンの特殊性(角丸、ノッチスクリーンなど)によるレイアウトの問題に対応します。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SafeArea 使用テスト", - "desc": [ - "【left】 : 左側を有効にするか 【bool】", - "【top】 : 上部を有効にするか 【bool】", - "【bottom】 : 下部を有効にするか 【bool】", - "【right】 : 右側を有効にするか 【bool】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ko_KR.json deleted file mode 100644 index c9cd66afa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "안전 영역", - "info": "일부 휴대폰의 특수성(둥근 모서리, 노치 등)으로 인한 레이아웃 문제를 해결하기 위해 패딩을 추가합니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SafeArea 사용 테스트", - "desc": [ - "【left】 : 왼쪽 활성화 여부 【bool】", - "【top】 : 상단 활성화 여부 【bool】", - "【bottom】 : 하단 활성화 여부 【bool】", - "【right】 : 오른쪽 활성화 여부 【bool】", - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_pt_PT.json deleted file mode 100644 index 40f34adaf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "Área Segura", - "info": "Adapta problemas de layout causados por características especiais de alguns telemóveis (cantos arredondados, entalhes, etc.) através da adição de padding.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Teste de uso do SafeArea", - "desc": [ - "【left】 : Ativar à esquerda 【bool】", - "【top】 : Ativar no topo 【bool】", - "【bottom】 : Ativar na parte inferior 【bool】", - "【right】 : Ativar à direita 【bool】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ru_RU.json deleted file mode 100644 index 3b34bfc8c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "Безопасная зона", - "info": "Путём добавления внутренних отступов адаптирует проблемы макета, вызванные особенностями некоторых телефонов (скруглённые углы, вырез для камеры и т.д.).", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Тестирование использования SafeArea", - "desc": [ - "【left】 : Включено ли слева 【bool】", - "【top】 : Включено ли сверху 【bool】", - "【bottom】 : Включено ли снизу 【bool】", - "【right】 : Включено ли справа 【bool】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_zh-CN.json deleted file mode 100644 index b0c52070a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "安全区", - "info": "通过添加内边距,来适配一些手机本身特殊性(圆角、刘海屏等)而所造成的布局问题。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SafeArea 使用测试", - "desc": [ - "【left】 : 左侧是否启用 【bool】", - "【top】 : 上方是否启用 【bool】", - "【bottom】 : 下方是否启用 【bool】", - "【right】 : 右侧是否启用 【bool】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/node1_base.dart deleted file mode 100644 index d32b2dc5b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/node1_base.dart +++ /dev/null @@ -1,116 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class SafeAreaDemo extends StatelessWidget { - const SafeAreaDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.all(10), - child: ElevatedButton( - onPressed: () { - Navigator.push( - context, - MaterialPageRoute(builder: (context) => const SafeAreaPage()), - ); - }, - child: const Text("进入 SafeArea 测试页"), - ), - ); - } -} - -class SafeAreaPage extends StatefulWidget { - const SafeAreaPage({Key? key}) : super(key: key); - - @override - _SafeAreaPageState createState() => _SafeAreaPageState(); -} - -class _SafeAreaPageState extends State { - bool _top = true; - bool _left = true; - bool _right = true; - bool _bottom = true; - - @override - Widget build(BuildContext context) { - return SafeArea( - top: _top, - left: _left, - right: _right, - bottom: _bottom, - child: Scaffold( - appBar: AppBar( - title: const Text( - 'SafeArea 测试', - ), - ), - body: Column( - children: [ - ..._buildSlider(), - Expanded( - child: ListView.separated( - itemCount: 20, - separatorBuilder: (_, __) => const Divider( - height: 1, - ), - itemBuilder: (_, index) => Container( - color: Colors.blue, - // padding: EdgeInsets.only(left: 20), - alignment: Alignment.center, - height: 50, - child: Text( - "第$index个", - style: const TextStyle(fontSize: 24, color: Colors.white), - ), - ), - ), - ), - ], - ), - ), - ); - } - - List _buildSlider()=>[Row( - children: [ - Switch( - value: _top, - onChanged: (v) => setState(() => _top = v), - ), - Text("top: $_top") - ], - ), - Row( - children: [ - Switch( - value: _left, - onChanged: (v) => setState(() => _left = v), - ), - Text("left: $_left") - ], - ), - Row( - children: [ - Switch( - value: _right, - onChanged: (v) => setState(() => _right = v), - ), - Text("right: $_right") - ], - ), - Row( - children: [ - Switch( - value: _bottom, - onChanged: (v) => setState(() => _bottom = v), - ), - Text("bottom: $_bottom") - ], - ),]; -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_de_DE.json deleted file mode 100644 index 360fd9acb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "Bildlaufansicht", - "info": "Diese Komponente wird zur Unterstützung des Scrollens verwendet. Diese Klasse ist eine abstrakte Klasse und kann daher nicht direkt verwendet werden. Sie hat viele Implementierungsklassen wie CustomScrollView, BoxScrollView, ListView und GridView.", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScrollView Einführung", - "desc": [ - "【reverse】 : Ob umgekehrt 【bool】", - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【cacheExtent】 : Cache-Länge 【double】", - "【dragStartBehavior】 : Ziehverhalten 【DragStartBehavior】", - "【clipBehavior】 : Ausschneideverhalten 【ClipBehavior】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_en_US.json deleted file mode 100644 index ba557c9b1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "Scroll View", - "info": "This component is used to support scrolling. This class is an abstract class, so it cannot be used directly. It has many implementation classes, such as CustomScrollView, BoxScrollView, ListView, and GridView.", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to ScrollView", - "desc": [ - "【reverse】: Whether to reverse 【bool】", - "【scrollDirection】: Scroll direction 【Axis】", - "【cacheExtent】: Cache length 【double】", - "【dragStartBehavior】: Drag behavior 【DragStartBehavior】", - "【clipBehavior】: Clip behavior 【ClipBehavior】", - "【controller】: Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_es_ES.json deleted file mode 100644 index 11607c3f3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "Vista de desplazamiento", - "info": "Este componente se utiliza para soportar el desplazamiento, esta clase es una clase abstracta, por lo que no se puede usar directamente, tiene muchas clases de implementación, como CustomScrollView, BoxScrollView, ListView, GridView.", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a ScrollView", - "desc": [ - "【reverse】 : Si es inverso 【bool】", - "【scrollDirection】 : Dirección de desplazamiento 【Axis】", - "【cacheExtent】 : Extensión de caché 【double】", - "【dragStartBehavior】 : Comportamiento de arrastre 【DragStartBehavior】", - "【clipBehavior】 : Comportamiento de recorte 【ClipBehavior】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_fr_FR.json deleted file mode 100644 index 555f79b25..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "Vue de défilement", - "info": "Ce composant est utilisé pour prendre en charge le défilement, cette classe est une classe abstraite, donc elle ne peut pas être utilisée directement, elle a de nombreuses classes d'implémentation, telles que CustomScrollView, BoxScrollView, ListView, GridView.", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à ScrollView", - "desc": [ - "【reverse】 : Inverser ou non 【bool】", - "【scrollDirection】 : Direction de défilement 【Axis】", - "【cacheExtent】 : Longueur de cache 【double】", - "【dragStartBehavior】 : Comportement de glissement 【DragStartBehavior】", - "【clipBehavior】 : Comportement de découpage 【ClipBehavior】", - "【controller】 : Contrôleur 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_it_IT.json deleted file mode 100644 index 8a725f26e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "Scorrimento Vista", - "info": "Questo componente è utilizzato per supportare lo scorrimento, questa classe è una classe astratta, quindi non può essere utilizzata direttamente, ha molte classi di implementazione, come CustomScrollView, BoxScrollView, ListView, GridView.", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a ScrollView", - "desc": [ - "【reverse】 : Se inverso 【bool】", - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【cacheExtent】 : Estensione della cache 【double】", - "【dragStartBehavior】 : Comportamento di trascinamento 【DragStartBehavior】", - "【clipBehavior】 : Comportamento di ritaglio 【ClipBehavior】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ja_JP.json deleted file mode 100644 index cfdd5527b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "スクロールビュー", - "info": "このコンポーネントはスクロールをサポートするために使用されます。このクラスは抽象クラスであるため、直接使用することはできません。CustomScrollView、BoxScrollView、ListView、GridViewなどの多くの実装クラスがあります。", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScrollView 紹介", - "desc": [ - "【reverse】 : 逆方向かどうか 【bool】", - "【scrollDirection】 : スクロール方向 【Axis】", - "【cacheExtent】 : キャッシュ長 【double】", - "【dragStartBehavior】 : ドラッグ動作 【DragStartBehavior】", - "【clipBehavior】 : クリップ動作 【ClipBehavior】", - "【controller】 : コントローラー 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ko_KR.json deleted file mode 100644 index b9d218386..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "스크롤 뷰", - "info": "이 컴포넌트는 스크롤을 지원하기 위해 사용됩니다. 이 클래스는 추상 클래스이므로 직접 사용할 수 없으며, CustomScrollView, BoxScrollView, ListView, GridView와 같은 많은 구현 클래스가 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScrollView 소개", - "desc": [ - "【reverse】 : 역방향 여부 【bool】", - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【cacheExtent】 : 캐시 길이 【double】", - "【dragStartBehavior】 : 드래그 시작 동작 【DragStartBehavior】", - "【clipBehavior】 : 클리핑 동작 【ClipBehavior】", - "【controller】 : 컨트롤러 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_pt_PT.json deleted file mode 100644 index 93d6fbaf9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "Rolagem de Visualização", - "info": "Este componente é usado para suporte de rolagem, esta classe é uma classe abstrata, portanto, não pode ser usada diretamente, tem muitas classes de implementação, como CustomScrollView, BoxScrollView, ListView, GridView.", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao ScrollView", - "desc": [ - "【reverse】 : Se é reverso 【bool】", - "【scrollDirection】 : Direção de rolagem 【Axis】", - "【cacheExtent】 : Extensão do cache 【double】", - "【dragStartBehavior】 : Comportamento de arrasto 【DragStartBehavior】", - "【clipBehavior】 : Comportamento de corte 【ClipBehavior】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ru_RU.json deleted file mode 100644 index 6b6a0c112..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "Прокрутка", - "info": "Этот компонент используется для поддержки прокрутки. Этот класс является абстрактным, поэтому его нельзя использовать напрямую. У него есть много реализаций, таких как CustomScrollView, BoxScrollView, ListView, GridView.", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в ScrollView", - "desc": [ - "【reverse】 : Обратный ли 【bool】", - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【cacheExtent】 : Длина кэша 【double】", - "【dragStartBehavior】 : Поведение перетаскивания 【DragStartBehavior】", - "【clipBehavior】 : Поведение обрезки 【ClipBehavior】", - "【controller】 : Контроллер 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_zh-CN.json deleted file mode 100644 index 78028aa7a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "视滑动图", - "info": "该组件用于滑动的支持,该类是一个抽象类,所以无法直接使用,它有很多实现类,如 CustomScrollView、BoxScrollView、ListView、GridView。", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScrollView 介绍", - "desc": [ - "【reverse】 : 是否反向 【bool】", - "【scrollDirection】 : 滑动方向 【Axis】", - "【cacheExtent】 : 缓存长 【double】", - "【dragStartBehavior】 : 拖动行为 【DragStartBehavior】", - "【clipBehavior】 : 裁剪行为 【ClipBehavior】", - "【controller】 : 控制器 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/node1_base.dart deleted file mode 100644 index a17fee85f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/node1_base.dart +++ /dev/null @@ -1,103 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ScrollViewDemo extends StatelessWidget { - const ScrollViewDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: MyScrollView(), - ); - } -} - -class MyScrollView extends ScrollView { - MyScrollView({Key? key}) : super(key: key); - - final String info = - 'ScrollView 其内部依靠 Viewport + Scrollable 实现滑动。它只有一个 buildSlivers 的抽象方法,返回 Sliver 家族 Widget 列表,' - '其子类最简单的是 CustomScrollView,将 slivers 交由用户传递,自身打个酱油。' - 'ListView 和 GridView 在底层源码中也是使用 Sliver 家族相关组件实现的。'; - - final List data = [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - List buildSlivers(BuildContext context) { - return [ - _buildSliverAppBar(), - SliverToBoxAdapter( - child: Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ), - ), - _buildSliverFixedExtentList() - ]; - } - - _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')), - flexibleSpace: FlexibleSpaceBar(//伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - title: const Text( - '张风捷特烈', - style: TextStyle(color: Colors.black, //标题 - shadows: [ - Shadow(color: Colors.blue, offset: Offset(1, 1), blurRadius: 2) - ]), - ), - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildSliverFixedExtentList() => SliverFixedExtentList( - itemExtent: 60, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_de_DE.json deleted file mode 100644 index b8fc3b81b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "Einfacher Dialog", - "info": "Eine einfache Dialogstruktur, die Kopf- und Mittelkomponenten angeben kann. Verfügt über Textstile und Ränder für Titel und Inhalt sowie Eigenschaften wie Schattentiefe und Form. Wird oft mit SimpleDialogOption verwendet.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SimpleDialog", - "desc": [ - "【title】 : Oberste Komponente 【Widget】", - "【children】 : Liste der Unterkomponenten 【List】", - "【titlePadding】 : Oberer Innenabstand 【EdgeInsetsGeometry】", - "【contentPadding】 : Innenabstand des Inhalts 【EdgeInsetsGeometry】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【elevation】 : Schattentiefe 【double】", - "【shape】 : Form 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_en_US.json deleted file mode 100644 index 7ed1afdf4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "Simple Dialog", - "info": "A simple dialog structure that allows specifying components for the header and middle sections. It has properties such as text styles and margins for the title and content, as well as shadow depth and shape. Often used in conjunction with SimpleDialogOption.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SimpleDialog", - "desc": [ - "【title】 : Top component 【Widget】", - "【children】 : List of child components 【List】", - "【titlePadding】 : Top padding 【EdgeInsetsGeometry】", - "【contentPadding】 : Content padding 【EdgeInsetsGeometry】", - "【backgroundColor】 : Background color 【Color】", - "【elevation】 : Shadow depth 【double】", - "【shape】 : Shape 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_es_ES.json deleted file mode 100644 index 338649a36..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "Cuadro de diálogo simple", - "info": "Una estructura de cuadro de diálogo simple que permite especificar componentes en la parte superior y central. Tiene estilos de texto y márgenes para el título y el contenido, así como propiedades como profundidad de sombra, forma, etc. A menudo se usa junto con SimpleDialogOption.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SimpleDialog", - "desc": [ - "【title】 : Componente superior 【Widget】", - "【children】 : Lista de componentes hijos 【List】", - "【titlePadding】 : Relleno superior 【EdgeInsetsGeometry】", - "【contentPadding】 : Relleno del contenido 【EdgeInsetsGeometry】", - "【backgroundColor】 : Color de fondo 【Color】", - "【elevation】 : Profundidad de sombra 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_fr_FR.json deleted file mode 100644 index a72754b59..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "Boîte de dialogue simple", - "info": "Une structure de boîte de dialogue simple qui permet de spécifier des composants pour l'en-tête et le corps. Elle possède des styles de texte pour le titre et le contenu, ainsi que des propriétés telles que les marges, la profondeur d'ombre, la forme, etc. Elle est souvent utilisée avec SimpleDialogOption.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SimpleDialog", - "desc": [ - "【title】 : Composant supérieur 【Widget】", - "【children】 : Liste des composants enfants 【List】", - "【titlePadding】 : Marge intérieure supérieure 【EdgeInsetsGeometry】", - "【contentPadding】 : Marge intérieure du contenu 【EdgeInsetsGeometry】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【elevation】 : Profondeur d'ombre 【double】", - "【shape】 : Forme 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_it_IT.json deleted file mode 100644 index 773932ec6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "Finestra di dialogo semplice", - "info": "Una struttura di finestra di dialogo semplice che consente di specificare i componenti nella parte superiore e centrale. Possiede stili di testo e margini per titoli e contenuti, nonché proprietà come profondità dell'ombra, forma, ecc. Spesso utilizzato in combinazione con SimpleDialogOption.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SimpleDialog", - "desc": [ - "【title】 : Componente superiore 【Widget】", - "【children】 : Lista dei componenti figli 【List】", - "【titlePadding】 : Spaziatura interna superiore 【EdgeInsetsGeometry】", - "【contentPadding】 : Spaziatura interna del contenuto 【EdgeInsetsGeometry】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【elevation】 : Profondità dell'ombra 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ja_JP.json deleted file mode 100644 index a75dac7b7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "シンプルダイアログ", - "info": "シンプルなダイアログ構造で、ヘッダーと中央のコンポーネントを指定できます。タイトルと内容のテキストスタイルとマージン、影の深さ、形状などの属性を持っています。SimpleDialogOptionと一緒に使用されることが多いです。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SimpleDialogの基本使用", - "desc": [ - "【title】 : トップコンポーネント 【Widget】", - "【children】 : 子コンポーネントリスト 【List】", - "【titlePadding】 : トップパディング 【EdgeInsetsGeometry】", - "【contentPadding】 : コンテンツパディング 【EdgeInsetsGeometry】", - "【backgroundColor】 : 背景色 【Color】", - "【elevation】 : 影の深さ 【double】", - "【shape】 : 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ko_KR.json deleted file mode 100644 index ceef0b963..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "간단한 대화 상자", - "info": "간단한 대화 상자 구조로, 상단과 중간의 컴포넌트를 지정할 수 있습니다. 제목, 내용의 텍스트 스타일과 여백, 그림자 깊이, 모양 등의 속성을 가지고 있습니다. 주로 SimpleDialogOption과 함께 사용됩니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SimpleDialog 기본 사용법", - "desc": [ - "【title】 : 상단 컴포넌트 【Widget】", - "【children】 : 하위 컴포넌트 리스트 【List】", - "【titlePadding】 : 상단 내부 여백 【EdgeInsetsGeometry】", - "【contentPadding】 : 내용 내부 여백 【EdgeInsetsGeometry】", - "【backgroundColor】 : 배경색 【Color】", - "【elevation】 : 그림자 깊이 【double】", - "【shape】 : 모양 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_pt_PT.json deleted file mode 100644 index 46bf6ca2b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "Diálogo Simples", - "info": "Uma estrutura de diálogo simples que permite especificar componentes no topo e no meio. Possui estilos de texto e margens para o título e conteúdo, além de propriedades como sombra, forma, etc. Geralmente usado em conjunto com SimpleDialogOption.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SimpleDialog", - "desc": [ - "【title】 : Componente do topo 【Widget】", - "【children】 : Lista de componentes filhos 【List】", - "【titlePadding】 : Preenchimento interno do topo 【EdgeInsetsGeometry】", - "【contentPadding】 : Preenchimento interno do conteúdo 【EdgeInsetsGeometry】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【elevation】 : Profundidade da sombra 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ru_RU.json deleted file mode 100644 index f2e1b7fc5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "Простое диалоговое окно", - "info": "Простая структура диалогового окна, которая позволяет указать компоненты в верхней и средней частях. Имеет стили текста и отступы для заголовка и содержимого, а также свойства, такие как глубина тени и форма. Часто используется вместе с SimpleDialogOption.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SimpleDialog", - "desc": [ - "【title】 : Верхний компонент 【Widget】", - "【children】 : Список дочерних компонентов 【List】", - "【titlePadding】 : Верхний отступ 【EdgeInsetsGeometry】", - "【contentPadding】 : Отступ содержимого 【EdgeInsetsGeometry】", - "【backgroundColor】 : Цвет фона 【Color】", - "【elevation】 : Глубина тени 【double】", - "【shape】 : Форма 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_zh-CN.json deleted file mode 100644 index 5f5bbc27f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "简单对话框", - "info": "一个简单的对话框结构,可指定头、中处的组件。拥有拥有标题、内容的文字样式和边距,影深、形状等属性。常与SimpleDialogOption联用。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SimpleDialog基本使用", - "desc": [ - "【title】 : 顶部组件 【Widget】", - "【children】 : 子组件列表 【List】", - "【titlePadding】 : 顶部内边距 【EdgeInsetsGeometry】", - "【contentPadding】 : 内容内边距 【EdgeInsetsGeometry】", - "【backgroundColor】 : 背景色 【Color】", - "【elevation】 : 影深 【double】", - "【shape】 : 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/node1_base.dart deleted file mode 100644 index 262eec587..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/node1_base.dart +++ /dev/null @@ -1,110 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-24 -/// contact me by email 1981462002@qq.com - -class CustomSimpleDialog extends StatelessWidget { - const CustomSimpleDialog({Key? key}) : super(key: key); - - final List info = const [ - '性别: 男 未婚', - '微信: zdl1994328', - "掘金: 张风捷特烈", - "github: toly1994328", - "邮箱: 1981462008@qq.com", - ]; - - @override - Widget build(BuildContext context) { - return Stack( - children: [ - _buildSimpleDialog(context), - Positioned( - top: 70, - right: 30, - child: _buildRaisedButton(context)), - - ], - ); - } - Widget _buildRaisedButton(BuildContext context) => ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)), - ), - ), - onPressed: () { - showDialog(context: context, builder: (ctx) => _buildSimpleDialog(ctx)); - }, - child: const Text( - 'Just Show It', - style: TextStyle(color: Colors.white), - ), - ); - - SimpleDialog _buildSimpleDialog(BuildContext context) { - return SimpleDialog( - title: _buildTitle(), - titlePadding: const EdgeInsets.only( - top: 5, - left: 20, - ), - contentPadding: const EdgeInsets.symmetric(horizontal: 5), - children: _buildChild(context), - backgroundColor: Colors.white, - elevation: 4, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10))), - ); - } - - List _buildChild(BuildContext context) { - return info - .map((str) => Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SimpleDialogOption( - onPressed: () => print(str), - child: SizedBox( - width: double.infinity, - child: Text( - str, - style: const TextStyle( - color: Color(0xff999999), fontSize: 16), - ), - ), - ), - Divider( - indent: 20, - height: 12, - color: info.indexOf(str) == info.length - 1 - ? Colors.transparent - : Theme.of(context).dividerColor, - ) - ], - )) - .toList(); - } - - Widget _buildTitle() { - return Row(//标题 - children: [ - Image.asset( - "assets/images/icon_head.webp", - width: 30, - height: 30, - ), - const SizedBox( - width: 10, - ), - const Expanded( - child: Text( - "张风捷特烈", - style: TextStyle(fontSize: 18), - )), - const CloseButton() - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_de_DE.json deleted file mode 100644 index 7af364aab..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "Einfache Dialogoption", - "info": "Eine Schaltfläche, die selten verwendet wird und normalerweise in SimpleDialog verwendet wird, um Klickereignisse zu empfangen.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SimpleDialogOption", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onPressed】 : Klickereignis 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_en_US.json deleted file mode 100644 index b7c0cbbe5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "Simple Dialog Option", - "info": "A button with limited use cases, typically used in SimpleDialog to receive click events.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SimpleDialogOption", - "desc": [ - "【child】 : Child widget 【Widget】", - "【onPressed】 : Click event 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_es_ES.json deleted file mode 100644 index b7330359f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "Opción de diálogo simple", - "info": "Un botón que se usa en pocas ocasiones, generalmente en SimpleDialog, que recibe eventos de clic.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SimpleDialogOption", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onPressed】 : Evento de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_fr_FR.json deleted file mode 100644 index 7c182ece8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "Option de boîte de dialogue simple", - "info": "Un bouton, rarement utilisé, généralement utilisé dans SimpleDialog, reçoit les événements de clic.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SimpleDialogOption", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onPressed】 : Événement de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_it_IT.json deleted file mode 100644 index 0bc86c9e6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "Opzione del Dialogo Semplice", - "info": "Un pulsante, utilizzato raramente, solitamente all'interno di SimpleDialog, che riceve eventi di clic.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SimpleDialogOption", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onPressed】 : Evento di clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ja_JP.json deleted file mode 100644 index d8778257b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "シンプルダイアログオプション", - "info": "ボタンで、使用シナリオが少なく、通常はSimpleDialogで使用され、クリックイベントを受け取ります。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SimpleDialogOptionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onPressed】 : クリックイベント 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ko_KR.json deleted file mode 100644 index 09b02aa2a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "간단한 대화 상자 옵션", - "info": "버튼 하나, 사용 시나리오가 적으며 일반적으로 SimpleDialog에서 사용되며 클릭 이벤트를 수신합니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SimpleDialogOption 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【onPressed】 : 클릭 이벤트 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_pt_PT.json deleted file mode 100644 index 2c814d6ac..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "Opção de Diálogo Simples", - "info": "Um botão, com poucos cenários de aplicação, geralmente usado em SimpleDialog, recebe eventos de clique.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de SimpleDialogOption", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onPressed】 : Evento de clique 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ru_RU.json deleted file mode 100644 index 29af17773..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "Простая опция диалога", - "info": "Кнопка, которая редко используется, обычно используется в SimpleDialog, принимает событие нажатия.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SimpleDialogOption", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onPressed】 : Событие нажатия 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_zh-CN.json deleted file mode 100644 index 54061f587..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "简单对话框选项", - "info": "一个按钮,应用场景很少,通常用于SimpleDialog中,接收点击事件。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SimpleDialogOption基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onPressed】 : 点击事件 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/node1_base.dart deleted file mode 100644 index 62f76cf51..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/node1_base.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomSimpleDialogOption extends StatelessWidget { - const CustomSimpleDialogOption({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Container( - alignment: Alignment.center, - width: double.infinity, - height: 50, - margin: const EdgeInsets.all(5), - color: Colors.grey.withAlpha(33), - child: SimpleDialogOption( - onPressed: () => Navigator.of(context).pushNamed('AboutMePage'), - child: const Text('张风捷特烈')), - ), - Container( - height: 50, - alignment: Alignment.center, - width: double.infinity, - color: Colors.grey.withAlpha(33), - margin: const EdgeInsets.all(5), - child: SimpleDialogOption( - onPressed: () => Navigator.of(context).pushNamed('AboutMePage'), - child: const Text('百里·巫缨')), - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_de_DE.json deleted file mode 100644 index 04b6d9d58..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "Einzelkind-Scrollen", - "info": "Ermöglicht einem Widget einen Scroll-Effekt, kann die Scroll-Richtung, ob umgekehrt, Scroll-Controller und andere Eigenschaften angeben.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SingleChildScrollView", - "desc": [ - "【child】 : Untergeordnetes Widget 【Widget】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Scrollrichtung von SingleChildScrollView", - "desc": [ - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【reverse】 : Ob umgekehrt 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_en_US.json deleted file mode 100644 index ba8db73e6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "Single Child Scroll", - "info": "Makes a component scrollable, allowing you to specify properties such as the scroll direction, whether to reverse the direction, the scroll controller, etc.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SingleChildScrollView", - "desc": [ - "【child】: Child widget 【Widget】", - "【padding】: Padding 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Scroll Direction of SingleChildScrollView", - "desc": [ - "【scrollDirection】: Scroll direction 【Axis】", - "【reverse】: Whether to reverse 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_es_ES.json deleted file mode 100644 index 3a31ff533..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "Desplazamiento de un solo hijo", - "info": "Hace que un componente tenga un efecto de desplazamiento, y se pueden especificar propiedades como la dirección del desplazamiento, si es inverso, el controlador de desplazamiento, etc.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SingleChildScrollView", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Dirección de desplazamiento de SingleChildScrollView", - "desc": [ - "【scrollDirection】 : Dirección de desplazamiento 【Axis】", - "【reverse】 : Si es inverso 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_fr_FR.json deleted file mode 100644 index f38f78947..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "Défilement à un seul enfant", - "info": "Permet à un composant d'avoir un effet de défilement, avec des propriétés telles que la direction du défilement, l'inversion, le contrôleur de défilement, etc.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SingleChildScrollView", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direction de défilement de SingleChildScrollView", - "desc": [ - "【scrollDirection】 : Direction de défilement 【Axis】", - "【reverse】 : Inversion 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_it_IT.json deleted file mode 100644 index 63f3993c5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "Scorrimento singolo figlio", - "info": "Rende un componente scorrevole, è possibile specificare la direzione di scorrimento, se invertire, il controller di scorrimento e altre proprietà.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SingleChildScrollView", - "desc": [ - "【child】 : componente figlio 【Widget】", - "【padding】 : spaziatura interna 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direzione di scorrimento di SingleChildScrollView", - "desc": [ - "【scrollDirection】 : direzione di scorrimento 【Axis】", - "【reverse】 : invertire 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ja_JP.json deleted file mode 100644 index cd62f691f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "シングルチャイルドスクロール", - "info": "コンポーネントにスクロール効果を持たせ、スクロールの方向、反転、スクロールコントローラーなどのプロパティを指定できます。", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SingleChildScrollViewの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "SingleChildScrollViewのスクロール方向", - "desc": [ - "【scrollDirection】 : スクロール方向 【Axis】", - "【reverse】 : 反転するかどうか 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ko_KR.json deleted file mode 100644 index a88236ed0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "단일 자식 스크롤", - "info": "컴포넌트에 스크롤 효과를 부여하며, 스크롤 방향, 반대 방향 여부, 스크롤 컨트롤러 등의 속성을 지정할 수 있습니다.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SingleChildScrollView 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "SingleChildScrollView 스크롤 방향", - "desc": [ - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【reverse】 : 반대 방향 여부 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_pt_PT.json deleted file mode 100644 index 2a8b62acf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "Deslizamento de Filho Único", - "info": "Torna um componente com efeito de deslizamento, podendo especificar a direção do deslizamento, se é reverso, controlador de deslizamento, entre outras propriedades.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SingleChildScrollView", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【padding】 : Preenchimento interno 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direção de Deslizamento do SingleChildScrollView", - "desc": [ - "【scrollDirection】 : Direção de deslizamento 【Axis】", - "【reverse】 : Se é reverso 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ru_RU.json deleted file mode 100644 index 04e9dc278..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "Одиночный скролл", - "info": "Делает компонент прокручиваемым, позволяет указать направление прокрутки, обратное направление, контроллер прокрутки и другие свойства.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SingleChildScrollView", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【padding】 : Внутренний отступ 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Направление прокрутки SingleChildScrollView", - "desc": [ - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【reverse】 : Обратное направление 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_zh-CN.json deleted file mode 100644 index 8dea51b5a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "单子滑动", - "info": "使一个组件具有滑动的效果,可指定滑动的方向、是否反向、滑动控制器等属性。", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SingleChildScrollView基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "SingleChildScrollView滑动方向", - "desc": [ - "【scrollDirection】 : 滑动方向 【Axis】", - "【reverse】 : 是否反向 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/node1_base.dart deleted file mode 100644 index 5c3d85b64..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/node1_base.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-28 -/// contact me by email 1981462002@qq.com - -class CustomSingleChildScrollView extends StatelessWidget { - const CustomSingleChildScrollView({super.key}); - - List get data => [ - Colors.blue[50]!, - Colors.blue[100]!, - Colors.blue[200]!, - Colors.blue[300]!, - Colors.blue[400]!, - Colors.blue[500]!, - Colors.blue[600]!, - Colors.blue[700]!, - Colors.blue[800]!, - Colors.blue[900]!, - ]; - - TextStyle get textStyle => const TextStyle( - color: Colors.white, - shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ], - ); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: SingleChildScrollView( - padding: const EdgeInsets.symmetric(horizontal: 10), - child: Column( - children: data - .map((color) => Container( - alignment: Alignment.center, - height: 50, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - )) - .toList(), - ), - - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/node2_direction.dart b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/node2_direction.dart deleted file mode 100644 index 96b9351a4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/node2_direction.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class DirectionSingleChildScrollView extends StatelessWidget { - const DirectionSingleChildScrollView({super.key}); - - List get data => [ - Colors.blue[50]!, - Colors.blue[100]!, - Colors.blue[200]!, - Colors.blue[300]!, - Colors.blue[400]!, - Colors.blue[500]!, - Colors.blue[600]!, - Colors.blue[700]!, - Colors.blue[800]!, - Colors.blue[900]!, - ]; - - TextStyle get textStyle => const TextStyle( - color: Colors.white, - shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ], - ); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: SingleChildScrollView( - scrollDirection: Axis.horizontal, - reverse: true, - padding: const EdgeInsets.symmetric(horizontal: 10), - child: Row( - children: data - .map((color) => Container( - alignment: Alignment.center, - width: 90, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - )) - .toList(), - ), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_de_DE.json deleted file mode 100644 index bf007e818..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "Informationsleiste", - "info": "Als Komponente handelt es sich um eine einfache Strukturkomponente, die Form, Schattentiefe, Hintergrundfarbe usw. angeben kann. Wird normalerweise über die showSnackBar-Methode von ScaffoldState von unten eingeblendet.", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SnackBar", - "desc": [ - "【content】 : Mittleres Inhalts-Widget 【Widget】", - "【action】 : Rechte Schaltfläche 【SnackBarAction】", - "【duration】 : Dauer 【Widget】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【elevation】 : Schattentiefe 【double】", - "【shape】 : Form 【ShapeBorder】", - "【onVisible】 : Callback bei Anzeige 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_en_US.json deleted file mode 100644 index 5b195a359..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "SnackBar", - "info": "As a component, it is a simple structural component that can specify shape, shadow depth, background color, etc. It usually pops up from the bottom through the showSnackBar method of ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SnackBar", - "desc": [ - "【content】: Middle content component 【Widget】", - "【action】: Right side button 【SnackBarAction】", - "【duration】: Duration 【Widget】", - "【backgroundColor】: Background color 【Color】", - "【elevation】: Shadow depth 【double】", - "【shape】: Shape 【ShapeBorder】", - "【onVisible】: Callback when shown 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_es_ES.json deleted file mode 100644 index 27dd24e49..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "Barra de información", - "info": "Como componente, es una estructura simple que puede especificar forma, profundidad de sombra, color de fondo, etc. Generalmente aparece desde la parte inferior a través del método showSnackBar de ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SnackBar", - "desc": [ - "【content】 : Componente de contenido central 【Widget】", - "【action】 : Botón derecho 【SnackBarAction】", - "【duration】 : Duración 【Widget】", - "【backgroundColor】 : Color de fondo 【Color】", - "【elevation】 : Profundidad de sombra 【double】", - "【shape】 : Forma 【ShapeBorder】", - "【onVisible】 : Devolución de llamada al mostrar 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_fr_FR.json deleted file mode 100644 index 2c375ecd8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "Barre d'information", - "info": "En tant que composant, il s'agit d'une structure simple qui peut spécifier la forme, l'ombre, la couleur de fond, etc. Généralement, il apparaît depuis le bas via la méthode showSnackBar de ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SnackBar", - "desc": [ - "【content】 : Composant de contenu central 【Widget】", - "【action】 : Bouton de droite 【SnackBarAction】", - "【duration】 : Durée 【Widget】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【elevation】 : Profondeur de l'ombre 【double】", - "【shape】 : Forme 【ShapeBorder】", - "【onVisible】 : Rappel lors de l'affichage 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_it_IT.json deleted file mode 100644 index 9bb71debd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "Barra di notifica", - "info": "Come componente, è una struttura semplice che può specificare forma, profondità dell'ombra, colore di sfondo, ecc. Generalmente viene visualizzato dal basso tramite il metodo showSnackBar di ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SnackBar", - "desc": [ - "【content】 : Componente del contenuto centrale 【Widget】", - "【action】 : Bottone a destra 【SnackBarAction】", - "【duration】 : Durata 【Widget】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【elevation】 : Profondità dell'ombra 【double】", - "【shape】 : Forma 【ShapeBorder】", - "【onVisible】 : Callback quando viene visualizzato 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ja_JP.json deleted file mode 100644 index 8ec32e385..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "情報提示バー", - "info": "コンポーネントとして簡単な構造コンポーネントで、形状、影の深さ、背景色などを指定できます。一般的にScaffoldStateのshowSnackBarメソッドを使用して下部から表示されます。", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SnackBarの基本使用", - "desc": [ - "【content】 : 中間内容コンポーネント 【Widget】", - "【action】 : 右側ボタン 【SnackBarAction】", - "【duration】 : 持続時間 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【elevation】 : 影の深さ 【double】", - "【shape】 : 形状 【ShapeBorder】", - "【onVisible】 : 表示時のコールバック 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ko_KR.json deleted file mode 100644 index 9d0848142..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "정보 알림 바", - "info": "컴포넌트로서는 간단한 구조 컴포넌트로, 모양, 그림자 깊이, 배경색 등을 지정할 수 있습니다. 일반적으로 ScaffoldState의 showSnackBar 메소드를 통해 하단에서 팝업됩니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SnackBar 기본 사용", - "desc": [ - "【content】 : 중간 내용 컴포넌트 【Widget】", - "【action】 : 오른쪽 버튼 【SnackBarAction】", - "【duration】 : 지속 시간 【Widget】", - "【backgroundColor】 : 배경색 【Color】", - "【elevation】 : 그림자 깊이 【double】", - "【shape】 : 모양 【ShapeBorder】", - "【onVisible】 : 표시 시 콜백 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_pt_PT.json deleted file mode 100644 index 8a888dd71..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "Barra de Informação", - "info": "Como componente, é uma estrutura simples que pode especificar forma, profundidade de sombra, cor de fundo, etc. Geralmente é exibido a partir da parte inferior através do método showSnackBar do ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SnackBar", - "desc": [ - "【content】 : Componente de conteúdo central 【Widget】", - "【action】 : Botão do lado direito 【SnackBarAction】", - "【duration】 : Duração 【Widget】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【elevation】 : Profundidade de sombra 【double】", - "【shape】 : Forma 【ShapeBorder】", - "【onVisible】 : Callback ao exibir 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ru_RU.json deleted file mode 100644 index cf0b478b9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "Информационная панель", - "info": "Как компонент, это простая структурная компонента, которая может указывать форму, глубину тени, цвет фона и т.д. Обычно вызывается методом showSnackBar из ScaffoldState, появляясь снизу.", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SnackBar", - "desc": [ - "【content】 : Промежуточный компонент содержимого 【Widget】", - "【action】 : Правая кнопка 【SnackBarAction】", - "【duration】 : Продолжительность 【Widget】", - "【backgroundColor】 : Цвет фона 【Color】", - "【elevation】 : Глубина тени 【double】", - "【shape】 : Форма 【ShapeBorder】", - "【onVisible】 : Обратный вызов при отображении 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_zh-CN.json deleted file mode 100644 index f199b3bf6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "信息提示条", - "info": "作为组件来说是一个简单的结构组件,可指定形状、影深、背景色等。一般通过ScaffoldState的showSnackBar方法从底部弹出。", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SnackBar基本使用", - "desc": [ - "【content】 : 中间内容组件 【Widget】", - "【action】 : 右侧按钮 【SnackBarAction】", - "【duration】 : 持续时长 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【elevation】 : 影深 【double】", - "【shape】 : 形状 【ShapeBorder】", - "【onVisible】 : 显示时回调 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/node1_base.dart deleted file mode 100644 index 36cac9c38..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/node1_base.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomSnackBar extends StatefulWidget { - const CustomSnackBar({Key? key}) : super(key: key); - - @override - _CustomSnackBarState createState() => _CustomSnackBarState(); -} - -class _CustomSnackBarState extends State { - @override - Widget build(BuildContext context) { - return ElevatedButton( - onPressed: () => - ScaffoldMessenger.of(context).showSnackBar(_buildSnackBar()), - child: const Text( - '点我弹出SnackBar', - style: TextStyle(color: Colors.white), - )); - } - - SnackBar _buildSnackBar() { - return SnackBar( - elevation: 3, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(10), topRight: Radius.circular(10))), - content: const Text('Wellcome to for join Flutter Unit!'), - duration: const Duration(seconds: 3), - //持续时间 - backgroundColor: Colors.red, - onVisible: () => print('onVisible'), - action: SnackBarAction( - textColor: Colors.white, label: '确定', onPressed: () {}), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_de_DE.json deleted file mode 100644 index 0d67865b4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "SnackBar-Schaltfläche", - "info": "Wird im Allgemeinen nur in SnackBar verwendet, akzeptiert Klick-Ereignisse. Nach einem Klick wird die Schaltfläche deaktiviert, es können Farbe und deaktivierte Farbe angegeben werden.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SnackBarAction", - "desc": [ - "【label】 : Beschriftung 【String】", - "【textColor】 : Textfarbe 【Color】", - "【disabledTextColor】 : Deaktivierte Textfarbe 【Color】", - "【onPressed】 : Klick-Rückruf 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_en_US.json deleted file mode 100644 index c5bb4f653..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "Snack Bar Button", - "info": "Generally used only in SnackBar, accepts click events. The button will be disabled after one click, and the color and disabled color can be specified.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SnackBarAction", - "desc": [ - "【label】 : Label 【String】", - "【textColor】 : Text Color 【Color】", - "【disabledTextColor】 : Disabled Text Color 【Color】", - "【onPressed】 : Click Callback 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_es_ES.json deleted file mode 100644 index 41e2e6d4b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "Botón de barra de información", - "info": "Generalmente se usa solo en SnackBar, acepta eventos de clic. Después de hacer clic una vez, el botón se deshabilitará, se puede especificar el color y el color cuando está deshabilitado.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SnackBarAction", - "desc": [ - "【label】 : Etiqueta 【String】", - "【textColor】 : Color del texto 【Color】", - "【disabledTextColor】 : Color del texto deshabilitado 【Color】", - "【onPressed】 : Callback de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_fr_FR.json deleted file mode 100644 index d87e87390..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "Bouton de barre de message", - "info": "Généralement utilisé uniquement dans SnackBar, accepte les événements de clic. Après un clic, le bouton est désactivé, et vous pouvez spécifier la couleur et la couleur désactivée.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SnackBarAction", - "desc": [ - "【label】 : Étiquette 【String】", - "【textColor】 : Couleur du texte 【Color】", - "【disabledTextColor】 : Couleur du texte désactivé 【Color】", - "【onPressed】 : Rappel de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_it_IT.json deleted file mode 100644 index 1137e3470..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "Pulsante della barra di notifica", - "info": "Generalmente utilizzato solo in SnackBar, accetta eventi di clic. Dopo un clic, il pulsante viene disabilitato. È possibile specificare il colore e il colore quando è disabilitato.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SnackBarAction", - "desc": [ - "【label】 : Etichetta 【String】", - "【textColor】 : Colore del testo 【Color】", - "【disabledTextColor】 : Colore del testo disabilitato 【Color】", - "【onPressed】 : Callback del clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ja_JP.json deleted file mode 100644 index e36d851c6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "スナックバーボタン", - "info": "一般的にSnackBarでのみ使用され、クリックイベントを受け取ります。一度クリックするとボタンは無効化され、色や無効時の色を指定できます。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SnackBarActionの基本使用", - "desc": [ - "【label】 : ラベル 【String】", - "【textColor】 : 文字色 【Color】", - "【disabledTextColor】 : 無効時の文字色 【Color】", - "【onPressed】 : クリックコールバック 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ko_KR.json deleted file mode 100644 index a20a19864..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "스낵바 버튼", - "info": "일반적으로 SnackBar에서만 사용되며, 클릭 이벤트를 수신합니다. 한 번 클릭하면 버튼이 비활성화되며, 색상과 비활성화 시 색상을 지정할 수 있습니다.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SnackBarAction 기본 사용법", - "desc": [ - "【label】 : 라벨 【String】", - "【textColor】 : 텍스트 색상 【Color】", - "【disabledTextColor】 : 텍스트 비활성화 색상 【Color】", - "【onPressed】 : 클릭 콜백 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_pt_PT.json deleted file mode 100644 index 1c34e086e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "Botão da Barra de Informações", - "info": "Geralmente usado apenas em SnackBar, aceita eventos de clique. Após um clique, o botão será desativado, e é possível especificar a cor e a cor quando desativado.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SnackBarAction", - "desc": [ - "【label】 : Etiqueta 【String】", - "【textColor】 : Cor do texto 【Color】", - "【disabledTextColor】 : Cor do texto desativado 【Color】", - "【onPressed】 : Callback de clique 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ru_RU.json deleted file mode 100644 index 74e932e5b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "Кнопка информационной панели", - "info": "Обычно используется только в SnackBar, принимает события нажатия. После одного нажатия кнопка становится отключенной, можно указать цвет и цвет в отключенном состоянии.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SnackBarAction", - "desc": [ - "【label】 : Метка 【String】", - "【textColor】 : Цвет текста 【Color】", - "【disabledTextColor】 : Цвет текста в отключенном состоянии 【Color】", - "【onPressed】 : Обратный вызов при нажатии 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_zh-CN.json deleted file mode 100644 index a5e8dc226..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "信息提示条按钮", - "info": "一般只用于SnackBar中,接受点击事件。点击一次后该按钮就会被禁用,可以指定颜色和禁用时颜色。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SnackBarAction基本使用", - "desc": [ - "【label】 : 标签 【String】", - "【textColor】 : 文字颜色 【Color】", - "【disabledTextColor】 : 文字失效色 【Color】", - "【onPressed】 : 点击回调 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/node1_base.dart deleted file mode 100644 index 65cf6ac06..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/node1_base.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomSnackBarAction extends StatelessWidget { - const CustomSnackBarAction({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SnackBarAction( - disabledTextColor: Colors.red, - textColor: Colors.blue, - label: '确定', - onPressed: () => print('onPressed'), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_de_DE.json deleted file mode 100644 index 0b33068d2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "Raumkomponente", - "info": "Kann nur in Row-, Column- und Flex-Layouts verwendet werden. Nutzt den verbleibenden Platz als Platzhalter. Mit der flex-Eigenschaft kann der Platz für mehrere Spacer proportional zugeteilt werden.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Spacer", - "desc": [ - "Ein Spacer nimmt den erweiterbaren Bereich ein" - ] - }, - { - "file": "node2_flex.dart", - "name": "Raumzuweisung für mehrere Spacer", - "desc": [ - "【flex】 : Anteil der verbleibenden Raumzuweisung 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_en_US.json deleted file mode 100644 index 7bee2cc61..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "Space Component", - "info": "Can only be used in Row, Column, and Flex layouts. It can occupy the remaining space. The flex property can be used to allocate space proportionally among multiple Spacers.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Spacer", - "desc": [ - "A Spacer will occupy the extendable area" - ] - }, - { - "file": "node2_flex.dart", - "name": "Space Allocation with Multiple Spacers", - "desc": [ - "【flex】 : Proportion of remaining space allocation 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_es_ES.json deleted file mode 100644 index 11078f41d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "Componente de espacio", - "info": "Solo se puede usar en diseños de Row, Column y Flex. Puede ocupar el espacio restante. La propiedad flex permite distribuir el espacio entre múltiples Spacer en proporción.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Spacer", - "desc": [ - "Un Spacer ocupará el área extensible" - ] - }, - { - "file": "node2_flex.dart", - "name": "Distribución de espacio entre múltiples Spacer", - "desc": [ - "【flex】 : Proporción de distribución del espacio restante 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_fr_FR.json deleted file mode 100644 index bc465c768..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "Composant d'espace", - "info": "Ne peut être utilisé que dans les dispositions Row, Column et Flex, il occupe l'espace restant. La propriété flex permet de distribuer l'espace entre plusieurs Spacer proportionnellement.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Spacer", - "desc": [ - "Un Spacer occupe une zone extensible" - ] - }, - { - "file": "node2_flex.dart", - "name": "Répartition de l'espace entre plusieurs Spacer", - "desc": [ - "【flex】 : Proportion de répartition de l'espace restant 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_it_IT.json deleted file mode 100644 index a0e264305..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "Componente Spaziatore", - "info": "Può essere utilizzato solo nei layout Row, Column e Flex, occupa lo spazio rimanente e può distribuire lo spazio a più Spacer in proporzione utilizzando la proprietà flex.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Spacer", - "desc": [ - "Un Spacer occuperà l'area estensibile" - ] - }, - { - "file": "node2_flex.dart", - "name": "Distribuzione dello spazio con più Spacer", - "desc": [ - "【flex】 : percentuale di distribuzione dello spazio rimanente 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ja_JP.json deleted file mode 100644 index 2fc247f67..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "スペーサー", - "info": "Row、Column、Flexレイアウトでのみ使用可能で、残りのスペースを占めるために使用されます。flexプロパティを使用して、複数のSpacerに比例してスペースを分配できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Spacerの基本使用", - "desc": [ - "1つのSpacerが拡張可能な領域を占めます" - ] - }, - { - "file": "node2_flex.dart", - "name": "複数のSpacerスペース分配", - "desc": [ - "【flex】 : 残りのスペースの分配比率 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ko_KR.json deleted file mode 100644 index a5c2cf176..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "공간 컴포넌트", - "info": "Row, Column, Flex 레이아웃에서만 사용할 수 있으며, 남은 공간을 차지하는 데 사용됩니다. flex 속성을 사용하여 여러 Spacer에 비례적으로 공간을 배분할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Spacer 기본 사용", - "desc": [ - "하나의 Spacer가 확장 가능한 영역을 차지합니다" - ] - }, - { - "file": "node2_flex.dart", - "name": "여러 Spacer 공간 배분", - "desc": [ - "【flex】 : 남은 공간 배분 비율 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_pt_PT.json deleted file mode 100644 index e1bcb0829..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "Componente de Espaço", - "info": "Só pode ser usado em layouts Row, Column e Flex, pode ocupar espaço utilizando o espaço restante, e a propriedade flex pode distribuir espaço proporcionalmente para múltiplos Spacers.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Spacer", - "desc": [ - "Um Spacer ocupará a área extensível" - ] - }, - { - "file": "node2_flex.dart", - "name": "Distribuição de Espaço para Múltiplos Spacers", - "desc": [ - "【flex】 : Proporção de distribuição do espaço restante 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ru_RU.json deleted file mode 100644 index c75f90e54..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "Пространственный компонент", - "info": "Может использоваться только в макетах Row, Column и Flex, занимает оставшееся пространство. Свойство flex позволяет распределять пространство между несколькими Spacer пропорционально.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Spacer", - "desc": [ - "Один Spacer занимает расширяемую область" - ] - }, - { - "file": "node2_flex.dart", - "name": "Распределение пространства между несколькими Spacer", - "desc": [ - "【flex】 : Доля распределения оставшегося пространства 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_zh-CN.json deleted file mode 100644 index 3e50a8236..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "空间组件", - "info": "只能用于Row、Column和Flex布局中,可利用剩余空间进行占位,使用flex属性可以给多个Spacer按比例分配空间。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Spacer基本使用", - "desc": [ - "一个Spacer会占据可延伸区域" - ] - }, - { - "file": "node2_flex.dart", - "name": "多个Spacer空间分配", - "desc": [ - "【flex】 : 剩余空间分配占比 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/node1_base.dart deleted file mode 100644 index 2efb18a00..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/node1_base.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class OneSpacer extends StatelessWidget { - const OneSpacer({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return - Container( - color: Colors.grey.withAlpha(33), - child: Row(children: [ - Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: Colors.red, - ), - const Spacer(), - Container( - alignment: Alignment.center, - width: 60, - height: 50, - color: Colors.blue, - ), - ],), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/node2_flex.dart b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/node2_flex.dart deleted file mode 100644 index dfc17ae76..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/node2_flex.dart +++ /dev/null @@ -1,67 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class ManySpacer extends StatefulWidget { - const ManySpacer({Key? key}) : super(key: key); - - @override - _ManySpacerState createState() => _ManySpacerState(); -} - -class _ManySpacerState extends State { - int _flexA = 1; - int _flexB = 1; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSliders(), - Container( - color: Colors.grey.withAlpha(33), - child: Row(children: [ - Spacer(flex: _flexA), - Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: Colors.red, - ), - Spacer(flex: _flexB), - Container( - alignment: Alignment.center, - width: 60, - height: 50, - color: Colors.blue, - ), - ],), - ) - ], - ); - } - - Widget _buildSliders() { - return Column( - children: [ - Slider( - divisions: 20, - min: 1, - max: 10, - label: "左边flex: $_flexA", - value: _flexA.toDouble(), - onChanged: (v) => setState(() => _flexA = v.round()) - ), - Slider( - divisions: 20, - label: "右边flex: $_flexB", - min: 1, - max: 10, - value: _flexB.toDouble(), - onChanged: (v) => setState(() => _flexB = v.round()) - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_de_DE.json deleted file mode 100644 index 568dbf543..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_de_DE.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "Schalterkachel", - "info": "Eine allgemeine Listenstruktur, die von Flutter bereitgestellt wird, mit einer linken und mittleren Struktur und einem Schalter am Ende. Komponenten können an den entsprechenden Positionen eingefügt werden, um spezifische Einträge einfach zu handhaben.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Darstellung von SwitchListTile", - "desc": [ - "【secondary】: Linke Komponente 【Widget】", - "【title】: Obere mittlere Komponente 【Widget】", - "【subtitle】: Untere mittlere Komponente 【Widget】", - "【inactiveThumbColor】: Farbe des Kreises, wenn nicht ausgewählt 【Color】", - "【inactiveTrackColor】: Farbe der Schiene, wenn nicht ausgewählt 【Color】", - "【activeColor】: Farbe des Kreises, wenn ausgewählt 【Color】", - "【activeTrackColor】: Farbe der Schiene, wenn ausgewählt 【Color】", - "【onChanged】: Ereignis bei Auswahl 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Auswahleffekt von SwitchListTile", - "desc": [ - "【selected】: Ob ausgewählt 【bool】", - "【inactiveThumbImage】: Bild des Kreises, wenn nicht ausgewählt 【ImageProvider】", - "【activeThumbImage】: Bild des Kreises, wenn ausgewählt 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Dichte Eigenschaft von SwitchListTile", - "desc": [ - "【dense】: Ob dicht 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_en_US.json deleted file mode 100644 index b0a879fbf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_en_US.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "Switch Tile", - "info": "A common list item structure provided by Flutter, with a left-center structure and a Switch at the end. Components can be inserted at the corresponding positions, making it easy to handle specific items.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic representation of SwitchListTile", - "desc": [ - "【secondary】: Left component 【Widget】", - "【title】: Top middle component 【Widget】", - "【subtitle】: Bottom middle component 【Widget】", - "【inactiveThumbColor】: Circle color when not selected 【Color】", - "【inactiveTrackColor】: Track color when not selected 【Color】", - "【activeColor】: Circle color when selected 【Color】", - "【activeTrackColor】: Track color when selected 【Color】", - "【onChanged】: Selection event 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Selection effect of SwitchListTile", - "desc": [ - "【selected】: Whether selected 【bool】", - "【inactiveThumbImage】: Circle image when not selected 【ImageProvider】", - "【activeThumbImage】: Circle image when selected 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Dense property of SwitchListTile", - "desc": [ - "【dense】: Whether dense 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_es_ES.json deleted file mode 100644 index 956f9c095..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_es_ES.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "Interruptor de Lista", - "info": "Estructura de elemento de lista genérica proporcionada por Flutter, con una estructura de izquierda a centro y un Switch en la cola. Se pueden insertar componentes en las posiciones correspondientes, lo que permite manejar elementos específicos de manera conveniente.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "El comportamiento básico de SwitchListTile es el siguiente", - "desc": [ - "【secondary】: Componente izquierdo 【Widget】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【inactiveThumbColor】: Color del círculo cuando no está seleccionado 【Color】", - "【inactiveTrackColor】: Color de la pista cuando no está seleccionado 【Color】", - "【activeColor】: Color del círculo cuando está seleccionado 【Color】", - "【activeTrackColor】: Color de la pista cuando está seleccionado 【Color】", - "【onChanged】: Evento de selección 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Efecto de selección de SwitchListTile", - "desc": [ - "【selected】: Si está seleccionado 【bool】", - "【inactiveThumbImage】: Imagen del círculo cuando no está seleccionado 【ImageProvider】", - "【activeThumbImage】: Imagen del círculo cuando está seleccionado 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propiedad de densidad de SwitchListTile", - "desc": [ - "【dense】: Si está en modo denso 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_fr_FR.json deleted file mode 100644 index 161512fc4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_fr_FR.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "Bouton de Commutation Tuile", - "info": "Une structure de liste générique fournie par Flutter, de structure gauche-centre, avec un Switch à la fin. Des composants peuvent être insérés aux positions correspondantes, ce qui permet de répondre facilement à des entrées spécifiques.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La performance de base de SwitchListTile est la suivante", - "desc": [ - "【secondary】: Composant gauche 【Widget】", - "【title】: Composant supérieur central 【Widget】", - "【subtitle】: Composant inférieur central 【Widget】", - "【inactiveThumbColor】: Couleur du cercle lorsqu'il n'est pas sélectionné 【Color】", - "【inactiveTrackColor】: Couleur de la piste lorsqu'elle n'est pas sélectionnée 【Color】", - "【activeColor】: Couleur du cercle lorsqu'il est sélectionné 【Color】", - "【activeTrackColor】: Couleur de la piste lorsqu'elle est sélectionnée 【Color】", - "【onChanged】: Événement de sélection 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Effet de sélection de SwitchListTile", - "desc": [ - "【selected】: Est sélectionné 【bool】", - "【inactiveThumbImage】: Image du cercle lorsqu'il n'est pas sélectionné 【ImageProvider】", - "【activeThumbImage】: Image du cercle lorsqu'il est sélectionné 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propriété de densité de SwitchListTile", - "desc": [ - "【dense】: Est dense 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_it_IT.json deleted file mode 100644 index 20b56b709..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_it_IT.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "Interruttore Piastrella", - "info": "Una struttura di elenco generica fornita da Flutter, con una struttura sinistra-centrale, e un interruttore alla fine. I componenti possono essere inseriti nelle posizioni appropriate, rendendo facile adattarsi a voci specifiche.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La rappresentazione di base di SwitchListTile è la seguente", - "desc": [ - "【secondary】: Componente sinistro 【Widget】", - "【title】: Componente superiore centrale 【Widget】", - "【subtitle】: Componente inferiore centrale 【Widget】", - "【inactiveThumbColor】: Colore del cerchio quando non selezionato 【Color】", - "【inactiveTrackColor】: Colore della scanalatura quando non selezionato 【Color】", - "【activeColor】: Colore del cerchio quando selezionato 【Color】", - "【activeTrackColor】: Colore della scanalatura quando selezionato 【Color】", - "【onChanged】: Evento di selezione 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Effetto di selezione di SwitchListTile", - "desc": [ - "【selected】: Se selezionato 【bool】", - "【inactiveThumbImage】: Immagine del cerchio quando non selezionato 【ImageProvider】", - "【activeThumbImage】: Immagine del cerchio quando selezionato 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Proprietà di densità di SwitchListTile", - "desc": [ - "【dense】: Se denso 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ja_JP.json deleted file mode 100644 index b7026233d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ja_JP.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "スイッチリストタイル", - "info": "Flutterが提供する汎用リスト項目構造で、左中構造で、末尾にSwitchがあります。対応する位置にコンポーネントを挿入でき、特定の項目に簡単に対応できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SwitchListTileの基本表現は以下の通りです", - "desc": [ - "【secondary】: 左側コンポーネント 【Widget】", - "【title】: 中央上コンポーネント 【Widget】", - "【subtitle】: 中央下コンポーネント 【Widget】", - "【inactiveThumbColor】: 未選択時の円の色 【Color】", - "【inactiveTrackColor】: 未選択時のスロットの色 【Color】", - "【activeColor】: 選択時の円の色 【Color】", - "【activeTrackColor】: 選択時のスロットの色 【Color】", - "【onChanged】: 選択イベント 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "SwitchListTileの選択効果", - "desc": [ - "【selected】: 選択されているかどうか 【bool】", - "【inactiveThumbImage】: 未選択時の円の画像 【ImageProvider】", - "【activeThumbImage】: 選択時の円の画像 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "SwitchListTileの密排属性", - "desc": [ - "【dense】: 密排かどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ko_KR.json deleted file mode 100644 index 743c75131..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ko_KR.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "스위치 리스트 타일", - "info": "Flutter에서 제공하는 일반적인 리스트 항목 구조로, 왼쪽과 중앙 구조이며, 끝에는 스위치가 있습니다. 해당 위치에 컴포넌트를 삽입할 수 있어 특정 항목에 쉽게 대응할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SwitchListTile의 기본 표현은 다음과 같습니다", - "desc": [ - "【secondary】: 왼쪽 컴포넌트 【Widget】", - "【title】: 중앙 상단 컴포넌트 【Widget】", - "【subtitle】: 중앙 하단 컴포넌트 【Widget】", - "【inactiveThumbColor】: 선택되지 않았을 때 원 색상 【Color】", - "【inactiveTrackColor】: 선택되지 않았을 때 트랙 색상 【Color】", - "【activeColor】: 선택되었을 때 원 색상 【Color】", - "【activeTrackColor】: 선택되었을 때 트랙 색상 【Color】", - "【onChanged】: 선택 이벤트 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "SwitchListTile의 선택 효과", - "desc": [ - "【selected】: 선택 여부 【bool】", - "【inactiveThumbImage】: 선택되지 않았을 때 원 이미지 【ImageProvider】", - "【activeThumbImage】: 선택되었을 때 원 이미지 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "SwitchListTile의 밀집 속성", - "desc": [ - "【dense】: 밀집 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_pt_PT.json deleted file mode 100644 index 6e3af4759..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_pt_PT.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "Azulejo de Interruptor", - "info": "Uma estrutura de item de lista genérica fornecida pelo Flutter, com uma estrutura de esquerda para o meio, e um Switch no final. Componentes podem ser inseridos nas posições correspondentes, facilitando a adaptação a itens específicos.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "A apresentação básica do SwitchListTile é a seguinte", - "desc": [ - "【secondary】: Componente esquerdo 【Widget】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【inactiveThumbColor】: Cor do círculo quando não selecionado 【Color】", - "【inactiveTrackColor】: Cor do trilho quando não selecionado 【Color】", - "【activeColor】: Cor do círculo quando selecionado 【Color】", - "【activeTrackColor】: Cor do trilho quando selecionado 【Color】", - "【onChanged】: Evento de seleção 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Efeito de seleção do SwitchListTile", - "desc": [ - "【selected】: Se está selecionado 【bool】", - "【inactiveThumbImage】: Imagem do círculo quando não selecionado 【ImageProvider】", - "【activeThumbImage】: Imagem do círculo quando selecionado 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propriedade de densidade do SwitchListTile", - "desc": [ - "【dense】: Se é denso 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ru_RU.json deleted file mode 100644 index e4e3d0ce6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ru_RU.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "Переключатель плитки", - "info": "Общая структура элемента списка, предоставляемая Flutter, имеет лево-центральную структуру, а в конце находится Switch. Компоненты могут быть вставлены в соответствующие позиции, что позволяет легко адаптироваться к конкретным элементам.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное поведение SwitchListTile", - "desc": [ - "【secondary】: Левый компонент 【Widget】", - "【title】: Верхний центральный компонент 【Widget】", - "【subtitle】: Нижний центральный компонент 【Widget】", - "【inactiveThumbColor】: Цвет кружка в невыбранном состоянии 【Color】", - "【inactiveTrackColor】: Цвет дорожки в невыбранном состоянии 【Color】", - "【activeColor】: Цвет кружка в выбранном состоянии 【Color】", - "【activeTrackColor】: Цвет дорожки в выбранном состоянии 【Color】", - "【onChanged】: Событие выбора 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Эффект выбора SwitchListTile", - "desc": [ - "【selected】: Выбрано ли 【bool】", - "【inactiveThumbImage】: Изображение кружка в невыбранном состоянии 【ImageProvider】", - "【activeThumbImage】: Изображение кружка в выбранном состоянии 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Свойство плотного расположения SwitchListTile", - "desc": [ - "【dense】: Плотное ли расположение 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_zh-CN.json deleted file mode 100644 index 1feece7fe..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_zh-CN.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "切钮瓦片", - "info": "Flutter提供的一个通用列表条目结构,为左中结构,尾部是一个Switch。相应位置可插入组件,可以很方便地应对特定的条目。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SwitchListTile的基本表现如下", - "desc": [ - "【secondary】: 左侧组件 【Widget】", - "【title】: 中间上组件 【Widget】", - "【subtitle】: 中间下组件 【Widget】", - "【inactiveThumbColor】: 未选中时圆圈颜色 【Color】", - "【inactiveTrackColor】: 未选中滑槽颜色 【Color】", - "【activeColor】: 选中时圆圈颜色 【Color】", - "【activeTrackColor】: 选中滑槽颜色 【Color】", - "【onChanged】: 选中事件 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "SwitchListTile的选中效果", - "desc": [ - "【selected】: 是否选中 【bool】", - "【inactiveThumbImage】: 未选中时圆圈图片 【ImageProvider】", - "【activeThumbImage】: 选中时圆圈图片 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "SwitchListTile的密排属性", - "desc": [ - "【dense】: 是否密排 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node1_base.dart deleted file mode 100644 index 510988295..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node1_base.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomSwitchListTile extends StatefulWidget { - const CustomSwitchListTile({Key? key}) : super(key: key); - - @override - _CustomSwitchListTileState createState() => _CustomSwitchListTileState(); -} - -class _CustomSwitchListTileState extends State { - var _value=false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: SwitchListTile( - value: _value, - inactiveThumbColor:Colors.cyanAccent , - inactiveTrackColor: Colors.blue.withAlpha(88), - activeColor: Colors.orangeAccent, - activeTrackColor: Colors.orange, - secondary: Image.asset("assets/images/icon_head.webp"), - title: const Text("张风捷特烈"), - subtitle: const Text("@万花过尽知无物"), - onChanged: (v) => setState(() => _value = !_value), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node2_select.dart b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node2_select.dart deleted file mode 100644 index bbdeaee30..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node2_select.dart +++ /dev/null @@ -1,35 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class SelectSwitchListTile extends StatefulWidget { - const SelectSwitchListTile({Key? key}) : super(key: key); - - @override - _SelectSwitchListTileState createState() => _SelectSwitchListTileState(); -} - -class _SelectSwitchListTileState extends State { - bool _value=false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: SwitchListTile( - value: _value, - selected: _value, - activeColor: Colors.orangeAccent, - secondary: Image.asset("assets/images/icon_head.webp"), - inactiveThumbImage: const AssetImage("assets/images/head_icon/icon_5.webp"), - activeThumbImage: const AssetImage("assets/images/icon_head.webp"), - title: const Text("张风捷特烈"), - subtitle: const Text("@万花过尽知无物"), - onChanged: (v) => setState(() => _value = !_value), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node3_dense.dart b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node3_dense.dart deleted file mode 100644 index 06387d3c4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node3_dense.dart +++ /dev/null @@ -1,34 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class DenseSwitchListTile extends StatefulWidget { - const DenseSwitchListTile({Key? key}) : super(key: key); - - @override - _DenseSwitchListTileState createState() => _DenseSwitchListTileState(); -} - -class _DenseSwitchListTileState extends State { - bool _value = false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: SwitchListTile( - value: _value, - dense: true, - selected: _value, - activeColor: Colors.orangeAccent, - secondary: Image.asset("assets/images/icon_head.webp"), - title: const Text("张风捷特烈"), - subtitle: const Text("@万花过尽知无物"), - onChanged: (v) => setState(() => _value = !_value), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_de_DE.json deleted file mode 100644 index ee33c758d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "Tab", - "info": "Wird normalerweise für Items in der TabBar verwendet, hat eine obere und untere Struktur und kann ein Symbol und eine Inhaltskomponente angeben.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Tab", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【text】 : Text 【String】", - "【icon】 : Untere Komponente 【Widgit】", - " text und child können nicht gleichzeitig existieren" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_en_US.json deleted file mode 100644 index f25740606..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "Tab", - "info": "Generally used as an item in the TabBar, with a top-bottom structure, allowing the specification of an icon and a content component.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Tab", - "desc": [ - "【child】: Child component 【Widget】", - "【text】: Text 【String】", - "【icon】: Bottom component 【Widget】", - " text and child cannot exist simultaneously" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_es_ES.json deleted file mode 100644 index 926b3d31d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "Pestaña", - "info": "Generalmente se utiliza como un ítem en el TabBar, con una estructura de arriba hacia abajo, se puede especificar un ícono y un componente de contenido.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Tab", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【text】 : Texto 【String】", - "【icon】 : Componente inferior 【Widget】", - " text y child no pueden coexistir" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_fr_FR.json deleted file mode 100644 index 0b4fde058..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "Onglet", - "info": "Généralement utilisé comme élément dans une TabBar, structure verticale, peut spécifier une icône et un composant de contenu.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Tab", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【text】 : Texte 【String】", - "【icon】 : Composant inférieur 【Widgit】", - " text et child ne peuvent pas coexister" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_it_IT.json deleted file mode 100644 index 964a9f73a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "Scheda", - "info": "Generalmente utilizzato per gli elementi in TabBar, struttura verticale, può specificare un'icona e un componente di contenuto.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di Tab", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【text】 : Testo 【String】", - "【icon】 : Componente inferiore 【Widgit】", - " text e child non possono esistere contemporaneamente" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ja_JP.json deleted file mode 100644 index 0b432a21e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "タブ", - "info": "一般的にTabBarのアイテムとして使用され、上下構造で、アイコンとコンテンツコンポーネントを指定できます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Tabの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【text】 : テキスト 【String】", - "【icon】 : 下部コンポーネント 【Widgit】", - " textとchildは同時に存在できません" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ko_KR.json deleted file mode 100644 index 2a2307ed5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "탭", - "info": "일반적으로 TabBar의 항목으로 사용되며, 상하 구조로 아이콘과 내용 컴포넌트를 지정할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "탭 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【text】 : 텍스트 【String】", - "【icon】 : 하단 컴포넌트 【Widget】", - " text와 child는 동시에 존재할 수 없습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_pt_PT.json deleted file mode 100644 index 524a2d596..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "Separador", - "info": "Geralmente utilizado como item na TabBar, com uma estrutura de cima para baixo, pode especificar um ícone e um componente de conteúdo.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Tab", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【text】 : Texto 【String】", - "【icon】 : Componente inferior 【Widgit】", - " text e child não podem coexistir" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ru_RU.json deleted file mode 100644 index c5eedc1c9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "Вкладка", - "info": "Обычно используется как элемент в TabBar, имеет верхнюю и нижнюю структуру, может содержать иконку и компонент содержимого.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Tab", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【text】 : Текст 【String】", - "【icon】 : Нижний компонент 【Widgit】", - " text и child не могут существовать одновременно" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_zh-CN.json deleted file mode 100644 index b3849f40c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "标签", - "info": "一般用于TabBar中的item,上下结构,可指定图标和一个内容组件。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Tab基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【text】 : 文字 【String】", - "【icon】 : 下方组件 【Widgit】", - " text和child不能同时存在" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Tab/node1_base.dart deleted file mode 100644 index 932f2bc16..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/node1_base.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class CustomTab extends StatelessWidget { - const CustomTab({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: const [ - Tab( - icon:Icon( Icons.add,color: Colors.blue,), - child: Text('添加'), - ), - Tab( - icon:Icon( Icons.close,color: Colors.red,), - text: '删除', - ), - Tab( - icon:Icon( Icons.refresh,color: Colors.green), - text: '更新', - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_de_DE.json deleted file mode 100644 index b6b2c857b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_de_DE.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "Tab-Leiste", - "info": "Eine schiebbare und klickbare Tab-Leiste, die normalerweise am unteren Rand der AppBar verwendet wird. Kann mit TabBarView kombiniert werden, um den Effekt des Seitenwechselns zu erzielen.", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von TabBar", - "desc": [ - "【controller】 : Controller 【TabController】", - "【indicatorColor】 : Indikatorfarbe 【Indikatorfarbe】", - "【indicatorWeight】 : Indikatorhöhe 【double】", - "【indicatorPadding】 : Indikatorrand 【EdgeInsetsGeometry】", - "【labelStyle】 : Textstil der Registerkarte 【TextStyle】", - "【unselectedLabelStyle】 : Textstil der nicht ausgewählten Registerkarte 【TextStyle】", - "【isScrollable】 : Ob scrollbar 【bool】", - "【onTap】 : Rückruf beim Klicken auf die Registerkarte 【Function(int)】", - "【tabs】 : Tab-Komponenten 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Durch das Setzen von Theme kann der Wasserwelleneffekt vermieden werden", - "desc": [ - "Setzen Sie die Farbe der Wasserwelle in Theme auf transparent." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_en_US.json deleted file mode 100644 index 88bd3cce8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_en_US.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "Tab Bar", - "info": "A slidable and clickable tab bar, usually used at the bottom of the AppBar, can be used in conjunction with TabBarView to achieve a sliding page effect.", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of TabBar", - "desc": [ - "【controller】 : Controller 【TabController】", - "【indicatorColor】 : Indicator Color 【Indicator Color】", - "【indicatorWeight】 : Indicator Height 【double】", - "【indicatorPadding】 : Indicator Margin 【EdgeInsetsGeometry】", - "【labelStyle】 : Tab Text Style 【TextStyle】", - "【unselectedLabelStyle】 : Unselected Text Style 【TextStyle】", - "【isScrollable】 : Whether Scrollable 【bool】", - "【onTap】 : Tab Click Callback 【Function(int)】", - "【tabs】 : Tab Components 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Achieve No Ripple Effect by Setting Theme", - "desc": [ - "Set the ripple color in the Theme to transparent." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_es_ES.json deleted file mode 100644 index 1844c1b3b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_es_ES.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "Barra de pestañas", - "info": "Barra de pestañas deslizante y clicable, generalmente utilizada en la parte inferior de AppBar, se puede usar junto con TabBarView para lograr un efecto de deslizamiento de página.", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de TabBar", - "desc": [ - "【controller】 : Controlador 【TabController】", - "【indicatorColor】 : Color del indicador 【Color del indicador】", - "【indicatorWeight】 : Altura del indicador 【double】", - "【indicatorPadding】 : Márgenes del indicador 【EdgeInsetsGeometry】", - "【labelStyle】 : Estilo del texto de la pestaña 【TextStyle】", - "【unselectedLabelStyle】 : Estilo del texto no seleccionado 【TextStyle】", - "【isScrollable】 : Deslizable 【bool】", - "【onTap】 : Callback al hacer clic en la pestaña 【Function(int)】", - "【tabs】 : Componentes de la pestaña 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Se puede lograr sin efecto de onda configurando Theme", - "desc": [ - "Simplemente configure el color de la onda en Theme como transparente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_fr_FR.json deleted file mode 100644 index 330c9071a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_fr_FR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "Barre d'onglets", - "info": "Barre d'onglets glissable et cliquable, généralement utilisée en bas de l'AppBar, peut être utilisée avec TabBarView pour réaliser un effet de glissement de page.", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de TabBar", - "desc": [ - "【controller】 : Contrôleur 【TabController】", - "【indicatorColor】 : Couleur de l'indicateur 【Couleur de l'indicateur】", - "【indicatorWeight】 : Hauteur de l'indicateur 【double】", - "【indicatorPadding】 : Marge de l'indicateur 【EdgeInsetsGeometry】", - "【labelStyle】 : Style de texte de l'onglet 【TextStyle】", - "【unselectedLabelStyle】 : Style de texte non sélectionné 【TextStyle】", - "【isScrollable】 : Peut être glissé 【bool】", - "【onTap】 : Rappel de clic sur l'onglet 【Function(int)】", - "【tabs】 : Composant d'onglet 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Réaliser sans ondulation en définissant Theme", - "desc": [ - "Définissez simplement la couleur de l'ondulation dans Theme comme transparente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_it_IT.json deleted file mode 100644 index 4245686a3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_it_IT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "Barra delle schede", - "info": "Barra delle schede scorrevole e cliccabile, solitamente utilizzata nella parte inferiore dell'AppBar, può essere utilizzata insieme a TabBarView per ottenere l'effetto di scorrimento delle pagine.", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di TabBar", - "desc": [ - "【controller】 : Controller 【TabController】", - "【indicatorColor】 : Colore dell'indicatore 【Colore dell'indicatore】", - "【indicatorWeight】 : Altezza dell'indicatore 【double】", - "【indicatorPadding】 : Margine dell'indicatore 【EdgeInsetsGeometry】", - "【labelStyle】 : Stile del testo della scheda 【TextStyle】", - "【unselectedLabelStyle】 : Stile del testo non selezionato 【TextStyle】", - "【isScrollable】 : Scorrevole 【bool】", - "【onTap】 : Callback del clic sulla scheda 【Function(int)】", - "【tabs】 : Componenti delle schede 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Impostando il tema è possibile ottenere l'effetto senza ondulazione", - "desc": [ - "Basta impostare il colore dell'ondulazione nel tema su trasparente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ja_JP.json deleted file mode 100644 index 47debc38b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ja_JP.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "タブバー", - "info": "スワイプやクリックが可能なタブバーで、通常はAppBarの下部に使用され、TabBarViewと連携してページをスワイプする効果を実現できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarの基本的な使用", - "desc": [ - "【controller】 : コントローラー 【TabController】", - "【indicatorColor】 : インジケーターの色 【インジケーターの色】", - "【indicatorWeight】 : インジケーターの高さ 【double】", - "【indicatorPadding】 : インジケーターの余白 【EdgeInsetsGeometry】", - "【labelStyle】 : タブのテキストスタイル 【TextStyle】", - "【unselectedLabelStyle】 : 未選択のテキストスタイル 【TextStyle】", - "【isScrollable】 : スワイプ可能かどうか 【bool】", - "【onTap】 : タブクリックのコールバック 【Function(int)】", - "【tabs】 : タブコンポーネント 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Themeを設定して水波紋を無効にする", - "desc": [ - "Themeの水波紋の色を透明に設定します。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ko_KR.json deleted file mode 100644 index 40400db9c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ko_KR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "탭 바", - "info": "탭 바를 스와이프하고 클릭할 수 있으며, 일반적으로 AppBar의 하단에 사용됩니다. TabBarView와 함께 사용하여 페이지 슬라이딩 효과를 구현할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBar 기본 사용", - "desc": [ - "【controller】 : 컨트롤러 【TabController】", - "【indicatorColor】 : 인디케이터 색상 【인디케이터 색상】", - "【indicatorWeight】 : 인디케이터 높이 【double】", - "【indicatorPadding】 : 인디케이터 여백 【EdgeInsetsGeometry】", - "【labelStyle】 : 탭 텍스트 스타일 【TextStyle】", - "【unselectedLabelStyle】 : 선택되지 않은 텍스트 스타일 【TextStyle】", - "【isScrollable】 : 스와이프 가능 여부 【bool】", - "【onTap】 : 탭 클릭 콜백 【Function(int)】", - "【tabs】 : 탭 위젯 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Theme 설정을 통해 물결 효과 없이 구현", - "desc": [ - "Theme에서 물결 효과 색상을 투명으로 설정하면 됩니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_pt_PT.json deleted file mode 100644 index 7105e7935..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_pt_PT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "Barra de Etiquetas", - "info": "Barra de etiquetas deslizável e clicável, geralmente usada na parte inferior do AppBar, pode ser usada em conjunto com o TabBarView para alcançar o efeito de deslizar páginas.", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do TabBar", - "desc": [ - "【controller】 : Controlador 【TabController】", - "【indicatorColor】 : Cor do Indicador 【Cor do Indicador】", - "【indicatorWeight】 : Altura do Indicador 【double】", - "【indicatorPadding】 : Margem do Indicador 【EdgeInsetsGeometry】", - "【labelStyle】 : Estilo do Texto da Etiqueta 【TextStyle】", - "【unselectedLabelStyle】 : Estilo do Texto Não Selecionado 【TextStyle】", - "【isScrollable】 : Se é Deslizável 【bool】", - "【onTap】 : Callback de Clique na Etiqueta 【Function(int)】", - "【tabs】 : Componentes das Etiquetas 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Configuração do Theme para Eliminar Ondulações", - "desc": [ - "Defina a cor das ondulações no Theme como transparente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ru_RU.json deleted file mode 100644 index d0fad2872..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ru_RU.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "Панель вкладок", - "info": "Скользящая и кликабельная панель вкладок, обычно используется в нижней части AppBar, может использоваться вместе с TabBarView для создания эффекта скользящих страниц.", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование TabBar", - "desc": [ - "【controller】 : Контроллер 【TabController】", - "【indicatorColor】 : Цвет индикатора 【Цвет индикатора】", - "【indicatorWeight】 : Высота индикатора 【double】", - "【indicatorPadding】 : Отступы индикатора 【EdgeInsetsGeometry】", - "【labelStyle】 : Стиль текста вкладки 【TextStyle】", - "【unselectedLabelStyle】 : Стиль текста невыбранной вкладки 【TextStyle】", - "【isScrollable】 : Возможность прокрутки 【bool】", - "【onTap】 : Обратный вызов при нажатии на вкладку 【Function(int)】", - "【tabs】 : Компоненты вкладок 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Реализация без водяных волн через настройку Theme", - "desc": [ - "Просто установите цвет водяных волн в Theme на прозрачный." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_zh-CN.json deleted file mode 100644 index b49dbb29f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_zh-CN.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "标签栏", - "info": "可滑动和点击标签栏,通常用于AppBar的底部,可与TabBarView联用,实现滑页的效果。", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBar基本使用", - "desc": [ - "【controller】 : 控制器 【TabController】", - "【indicatorColor】 : 指示器颜色 【指示器颜色】", - "【indicatorWeight】 : 指示器高 【double】", - "【indicatorPadding】 : 指示器边距 【EdgeInsetsGeometry】", - "【labelStyle】 : 页签文字样式 【TextStyle】", - "【unselectedLabelStyle】 : 未选中文字样式 【TextStyle】", - "【isScrollable】 : 是否可滑动 【bool】", - "【onTap】 : 页签点击回调 【Function(int)】", - "【tabs】 : 标签组件 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "通过设置Theme可实现无水波纹", - "desc": [ - "将Theme关于水波纹的颜色设置为透明即可。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/node1_base.dart deleted file mode 100644 index 747d93ea4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/node1_base.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-16 -/// contact me by email 1981462002@qq.com - -class CustomTabBar extends StatefulWidget { - const CustomTabBar({Key? key}) : super(key: key); - - @override - _CustomTabBarState createState() => _CustomTabBarState(); -} - -class _CustomTabBarState extends State - with SingleTickerProviderStateMixin { - final List tabs = ['风画庭', '雨韵舍', '雷鸣殿', '电疾堂', '霜寒阁', '雪月楼']; - late TabController _tabController; - - @override - void initState() { - super.initState(); - _tabController = TabController(vsync: this, length: tabs.length); - } - - @override - void dispose() { - _tabController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return TabBar( - onTap: (tab) => print(tab), - labelStyle: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold), - unselectedLabelStyle: const TextStyle(fontSize: 16), - isScrollable: true, - controller: _tabController, - labelColor: Colors.blue, - indicatorWeight: 3, - indicatorPadding: const EdgeInsets.symmetric(horizontal: 10), - unselectedLabelColor: Colors.grey, - indicatorColor: Colors.orangeAccent, - tabs: tabs.map((e) => Tab(text: e)).toList(), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/node2_noShadow.dart b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/node2_noShadow.dart deleted file mode 100644 index 469933933..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/node2_noShadow.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class NoShadowTabBarDemo extends StatefulWidget { - const NoShadowTabBarDemo({Key? key}) : super(key: key); - - @override - _NSTabBarState createState() => _NSTabBarState(); -} - -class _NSTabBarState extends State - with SingleTickerProviderStateMixin { - final List tabs = ['风画庭', '雨韵舍', '雷鸣殿', '电疾堂', '霜寒阁', '雪月楼']; - late TabController _tabController; - - @override - void initState() { - super.initState(); - _tabController = TabController(vsync: this, length: tabs.length); - } - - @override - void dispose() { - _tabController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Theme( - data: Theme.of(context).copyWith( - splashColor: Colors.transparent, - highlightColor: Colors.transparent, - ), - child: TabBar( - onTap: (tab) => print(tab), - labelStyle: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold), - unselectedLabelStyle: const TextStyle(fontSize: 16), - isScrollable: true, - controller: _tabController, - labelColor: Colors.blue, - indicatorWeight: 3, - indicatorPadding: const EdgeInsets.symmetric(horizontal: 10), - unselectedLabelColor: Colors.grey, - indicatorColor: Colors.orangeAccent, - tabs: tabs.map((e) => Tab(text: e)).toList(), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_de_DE.json deleted file mode 100644 index 96f33fc05..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "Tab-Seitenwähler", - "info": "Wird normalerweise als Indikator in Verbindung mit TabBarView verwendet und teilt sich einen gemeinsamen TabController. Farbe, Größe und ausgewählte Farbe können angegeben werden.", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von TabPageSelector", - "desc": [ - "【controller】 : Controller 【TabController】", - "【indicatorSize】: Indikatorgröße 【double】", - "【selectedColor】: Ausgewählte Farbe 【Color】", - "【color】: Farbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_en_US.json deleted file mode 100644 index b56c27475..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "Tab Sliding Selector", - "info": "Usually used as an indicator with TabBarView, sharing a common TabController. Can specify color, size, and selected color.", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of TabPageSelector", - "desc": [ - "【controller】 : Controller 【TabController】", - "【indicatorSize】: Indicator Size 【double】", - "【selectedColor】: Selected Color 【Color】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_es_ES.json deleted file mode 100644 index 734482d3b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "Selector de pestañas deslizante", - "info": "Normalmente se utiliza como indicador junto con TabBarView, compartiendo un TabController. Se pueden especificar colores, tamaños y colores seleccionados.", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de TabPageSelector", - "desc": [ - "【controller】 : Controlador 【TabController】", - "【indicatorSize】: Tamaño del indicador 【double】", - "【selectedColor】: Color seleccionado 【Color】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_fr_FR.json deleted file mode 100644 index 21bef59b7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "Sélecteur de page à onglets", - "info": "Utilisé généralement comme indicateur avec TabBarView, partageant un TabController commun. Peut spécifier la couleur, la taille, la couleur sélectionnée.", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de TabPageSelector", - "desc": [ - "【controller】 : Contrôleur 【TabController】", - "【indicatorSize】: Taille de l'indicateur 【double】", - "【selectedColor】: Couleur sélectionnée 【Color】", - "【color】: Couleur 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_it_IT.json deleted file mode 100644 index ca2cb9293..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "Selettore di scorrimento delle schede", - "info": "Utilizzato solitamente come indicatore insieme a TabBarView, condividendo un TabController. È possibile specificare colore, dimensione e colore selezionato.", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di TabPageSelector", - "desc": [ - "【controller】 : Controller 【TabController】", - "【indicatorSize】: Dimensione dell'indicatore 【double】", - "【selectedColor】: Colore selezionato 【Color】", - "【color】: Colore 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ja_JP.json deleted file mode 100644 index 9457a660c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "タブページセレクター", - "info": "通常、インジケーターとしてTabBarViewと連携して使用され、同じTabControllerを共有します。色、サイズ、選択色を指定できます。", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabPageSelectorの基本的な使用", - "desc": [ - "【controller】 : コントローラー 【TabController】", - "【indicatorSize】: インジケーターサイズ 【double】", - "【selectedColor】: 選択色 【Color】", - "【color】: 色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ko_KR.json deleted file mode 100644 index 0fe8b10b7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "탭 페이지 선택기", - "info": "일반적으로 지시자로 사용되며 TabBarView와 함께 사용되며, 동일한 TabController를 공유합니다. 색상, 크기, 선택된 색상을 지정할 수 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabPageSelector 기본 사용", - "desc": [ - "【controller】 : 컨트롤러 【TabController】", - "【indicatorSize】: 지시자 크기 【double】", - "【selectedColor】: 선택된 색상 【Color】", - "【color】: 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_pt_PT.json deleted file mode 100644 index bc5a77ae3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "Seletor de Deslizamento de Abas", - "info": "Geralmente usado como um indicador em conjunto com o TabBarView, compartilhando um TabController. Pode especificar cor, tamanho e cor de seleção.", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do TabPageSelector", - "desc": [ - "【controller】 : Controlador 【TabController】", - "【indicatorSize】: Tamanho do Indicador 【double】", - "【selectedColor】: Cor de Seleção 【Color】", - "【color】: Cor 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ru_RU.json deleted file mode 100644 index 41d153360..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "Выбор вкладок с прокруткой", - "info": "Обычно используется как индикатор вместе с TabBarView, используя общий TabController. Можно указать цвет, размер, цвет выбранного элемента.", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование TabPageSelector", - "desc": [ - "【controller】 : Контроллер 【TabController】", - "【indicatorSize】: Размер индикатора 【double】", - "【selectedColor】: Цвет выбранного элемента 【Color】", - "【color】: Цвет 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_zh-CN.json deleted file mode 100644 index 65dd3fd6d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "页签滑动选择器", - "info": "通常作为指示器与TabBarView联用,共同使用一个TabController。可指定颜色、大小、选中色。", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabPageSelector基本使用", - "desc": [ - "【controller】 : 控制器 【TabController】", - "【indicatorSize】: 指示器大小 【double】", - "【selectedColor】: 选中色 【Color】", - "【color】: 颜色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/node1_base.dart deleted file mode 100644 index e061bc8b5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/node1_base.dart +++ /dev/null @@ -1,64 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class TabPageSelectorDemo extends StatefulWidget { - const TabPageSelectorDemo({Key? key}) : super(key: key); - - @override - _TabPageSelectorDemoState createState() => _TabPageSelectorDemoState(); -} - -class _TabPageSelectorDemoState extends State - with SingleTickerProviderStateMixin { - final List tabs = ['风画庭', '雨韵舍', '雷鸣殿', '电疾堂', '霜寒阁', '雪月楼']; - late TabController _tabController; - - @override - void initState() { - super.initState(); - _tabController = TabController(vsync: this, length: tabs.length); - } - - @override - void dispose() { - _tabController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Stack( - alignment: Alignment.center, - children: [ - Container(color: Colors.purple, child: _buildTableBarView()), - Positioned( - bottom: 10, - child: buildTabPageSelector(), - ), - ], - ), - ); - } - - Widget buildTabPageSelector() => TabPageSelector( - controller: _tabController, - color: Colors.white, - indicatorSize: 10, - selectedColor: Colors.orangeAccent, - ); - - Widget _buildTableBarView() => TabBarView( - controller: _tabController, - children: tabs - .map((e) => Center( - child: Text( - e, - style: const TextStyle(color: Colors.white, fontSize: 20), - ))) - .toList()); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_de_DE.json deleted file mode 100644 index 4dcbc7e14..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "Tab-Indikator", - "info": "Eine runde Komponente mit Randlinie, bei der Größe, Farbe und Randfarbe angegeben werden können. Es ist Teil des TabPageSelector und wird in der Regel nicht allein verwendet.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von TabPageSelectorIndicator", - "desc": [ - "【size】: Größe 【double】", - "【backgroundColor】: Hintergrundfarbe 【Color】", - "【borderColor】: Randfarbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_en_US.json deleted file mode 100644 index 5394fb213..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "Tab Indicator", - "info": "A circular component with a border, which can specify size, color, and border color. It is part of the TabPageSelector and is generally not used alone.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of TabPageSelectorIndicator", - "desc": [ - "【size】: size 【double】", - "【backgroundColor】: background color 【Color】", - "【borderColor】: border color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_es_ES.json deleted file mode 100644 index 660971761..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "Indicador de selección de pestañas", - "info": "Un componente circular con bordes que puede especificar tamaño, color y color del borde. Es parte de TabPageSelector y generalmente no se usa por separado.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de TabPageSelectorIndicator", - "desc": [ - "【size】: Tamaño 【double】", - "【backgroundColor】: Color de fondo 【Color】", - "【borderColor】: Color del borde 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_fr_FR.json deleted file mode 100644 index cecf95637..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "Indicateur d'onglet", - "info": "Un composant circulaire avec une bordure, pouvant spécifier la taille, la couleur et la couleur de la bordure. Fait partie du TabPageSelector, généralement non utilisé seul.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de TabPageSelectorIndicator", - "desc": [ - "【size】: Taille 【double】", - "【backgroundColor】: Couleur de fond 【Color】", - "【borderColor】: Couleur de la bordure 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_it_IT.json deleted file mode 100644 index a5f7ce13f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "Indicatore del selettore di pagine", - "info": "Un componente circolare con bordi, che può essere specificato per dimensioni, colore e colore del bordo. Fa parte del TabPageSelector e generalmente non viene utilizzato da solo.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di TabPageSelectorIndicator", - "desc": [ - "【size】: dimensione 【double】", - "【backgroundColor】: colore di sfondo 【Color】", - "【borderColor】: colore del bordo 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ja_JP.json deleted file mode 100644 index df8e573cd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "タブインジケーター", - "info": "枠線付きの円形コンポーネントで、サイズ、色、枠線の色を指定できます。TabPageSelectorの一部であり、通常は単独で使用しません。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabPageSelectorIndicatorの基本使用", - "desc": [ - "【size】: サイズ 【double】", - "【backgroundColor】: 背景色 【Color】", - "【borderColor】: 枠線の色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ko_KR.json deleted file mode 100644 index 482e05949..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "탭 페이지 선택기 표시기", - "info": "테두리가 있는 원형 컴포넌트로, 크기, 색상, 테두리 색상을 지정할 수 있습니다. TabPageSelector의 일부이며 일반적으로 단독으로 사용되지 않습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabPageSelectorIndicator 기본 사용법", - "desc": [ - "【size】: 크기 【double】", - "【backgroundColor】: 배경색 【Color】", - "【borderColor】: 테두리 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_pt_PT.json deleted file mode 100644 index f35b4ce92..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "Indicador de Seletor de Página", - "info": "Um componente circular com borda que pode especificar tamanho, cor e cor da borda. Faz parte do TabPageSelector e geralmente não é usado sozinho.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do TabPageSelectorIndicator", - "desc": [ - "【size】: Tamanho 【double】", - "【backgroundColor】: Cor de fundo 【Color】", - "【borderColor】: Cor da borda 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ru_RU.json deleted file mode 100644 index c8ff63b0b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "Индикатор вкладки", - "info": "Круглый компонент с границей, который можно настроить по размеру, цвету и цвету границы. Является частью TabPageSelector и обычно не используется отдельно.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование TabPageSelectorIndicator", - "desc": [ - "【size】: Размер 【double】", - "【backgroundColor】: Цвет фона 【Color】", - "【borderColor】: Цвет границы 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_zh-CN.json deleted file mode 100644 index e667b9a44..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "页签指示器", - "info": "一个有边线的圆形组件,可指定大小、颜色、边线色。是TabPageSelector的部分之一,一般不单独使用。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabPageSelectorIndicator基本使用", - "desc": [ - "【size】: 大小 【double】", - "【backgroundColor】: 背景色 【Color】", - "【borderColor】: 边线色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/node1_base.dart deleted file mode 100644 index 089bb4aca..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/node1_base.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter/material.dart'; - - - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class TabPageSelectorIndicatorDemo extends StatelessWidget { - const TabPageSelectorIndicatorDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children:const [ - TabPageSelectorIndicator( - backgroundColor: Colors.greenAccent, - borderColor: Colors.deepPurpleAccent, - size: 15, - ), - TabPageSelectorIndicator( - backgroundColor: Colors.blue, - borderColor: Colors.grey, - size: 20, - ), - TabPageSelectorIndicator( - backgroundColor: Colors.green, - borderColor: Colors.red, - size: 25, - ), - TabPageSelectorIndicator( - backgroundColor: Colors.yellow, - borderColor: Colors.brown, - size: 30, - ), - TabPageSelectorIndicator( - backgroundColor: Colors.amber, - borderColor: Colors.purpleAccent, - size: 35, - ), - ], - ); - } - -} - diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_de_DE.json deleted file mode 100644 index 15ee33b2e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_de_DE.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "Textkomponente", - "info": "Eine Komponente zur Anzeige von Text. Verfügt über eine Vielzahl von Eigenschaften, die Ihren Anforderungen gerecht werden. Der Kernstil wird durch das style-Attribut gesteuert.", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Grundlegende Textstile", - "desc": [ - "【Parameter】 : Text 【String】", - "【style】: Textstil 【TextStyle】", - "【color】: Textfarbe 【Color】", - "【fontSize】: Textgröße 【double】", - "【fontWeight】: Schriftstärke 【FontWeight】", - "【fontStyle】: Schriftstil 【fontStyle】", - "【letterSpacing】: Zeichenabstand 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Textschatten", - "desc": [ - "【shadows】 : Text 【List】", - "【backgroundColor】: Hintergrundfarbe 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Textdekoration", - "desc": [ - "【fontFamily】 : Schriftart 【String】", - "【decoration】: Dekorationslinie 【TextDecoration】", - "【decorationColor】: Dekorationslinienfarbe 【Color】", - "【decorationThickness】: Dekorationsliniendicke 【double】", - "【decorationStyle】: Dekorationslinienstil 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "Textausrichtung", - "desc": [ - "【textAlign】: Ausrichtung 【TextAlign】", - "Unten sind in der Reihenfolge: left, right, center, justify, start, end." - ] - }, - { - "file": "node5_textDirection.dart", - "name": "Textrichtung und maximale Zeilenanzahl", - "desc": [ - "【maxLines】 : Maximale Zeilenanzahl 【int】", - "【textDirection】 : Textrichtung 【TextDirection】", - "Unten sind in der Reihenfolge: rtl, ltr." - ] - }, - { - "file": "node6_softWrap.dart", - "name": "Zeilenumbruch und Überlaufverhalten", - "desc": [ - "【softWrap】 : Zeilenumbruch 【bool】", - "【overflow】 : Überlaufverhalten 【TextOverflow】", - "Unten softWrap=false; overflow in der Reihenfolge: clip, fade, ellipsis, visible." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_en_US.json deleted file mode 100644 index cdfa68730..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_en_US.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "Text Component", - "info": "A component used to display text. It has a wide range of properties to meet your usage needs, with core styles controlled by the style attribute.", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Basic Text Styles", - "desc": [ - "【Parameter】 : Text 【String】", - "【style】: Text Style 【TextStyle】", - "【color】: Text Color 【Color】", - "【fontSize】: Font Size 【double】", - "【fontWeight】: Font Weight 【FontWeight】", - "【fontStyle】: Font Style 【fontStyle】", - "【letterSpacing】: Letter Spacing 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Text Shadow", - "desc": [ - "【shadows】 : Text Shadows 【List】", - "【backgroundColor】: Background Color 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Text Decoration", - "desc": [ - "【fontFamily】 : Font Family 【String】", - "【decoration】: Decoration Line 【TextDecoration】", - "【decorationColor】: Decoration Line Color 【Color】", - "【decorationThickness】: Decoration Line Thickness 【double】", - "【decorationStyle】: Decoration Line Style 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "Text Alignment", - "desc": [ - "【textAlign】: Alignment 【TextAlign】", - "The following are: left, right, center, justify, start, end." - ] - }, - { - "file": "node5_textDirection.dart", - "name": "Text Direction and Maximum Lines", - "desc": [ - "【maxLines】 : Maximum Lines 【int】", - "【textDirection】 : Text Direction 【TextDirection】", - "The following are: rtl, ltr." - ] - }, - { - "file": "node6_softWrap.dart", - "name": "Wrapping and Overflow Effects", - "desc": [ - "【softWrap】 : Whether to Wrap 【bool】", - "【overflow】 : Overflow Effect 【TextOverflow】", - "When softWrap=false; overflow options are: clip, fade, ellipsis, visible." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_es_ES.json deleted file mode 100644 index 57bfe77bb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_es_ES.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "Componente de texto", - "info": "Componente utilizado para mostrar texto. Tiene una gran cantidad de propiedades, suficientes para satisfacer tus necesidades de uso. El estilo principal está controlado por la propiedad style.", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Estilo básico del texto", - "desc": [ - "【Parámetro de entrada】 : Texto 【String】", - "【style】: Estilo del texto 【TextStyle】", - "【color】: Color del texto 【Color】", - "【fontSize】: Tamaño del texto 【double】", - "【fontWeight】: Peso de la fuente 【FontWeight】", - "【fontStyle】: Estilo de la fuente 【fontStyle】", - "【letterSpacing】: Espaciado entre letras 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Sombra del texto", - "desc": [ - "【shadows】 : Sombra del texto 【List】", - "【backgroundColor】: Color de fondo 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Línea decorativa del texto", - "desc": [ - "【fontFamily】 : Fuente del texto 【String】", - "【decoration】: Línea decorativa 【TextDecoration】", - "【decorationColor】: Color de la línea decorativa 【Color】", - "【decorationThickness】: Grosor de la línea decorativa 【double】", - "【decorationStyle】: Estilo de la línea decorativa 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "Alineación del texto", - "desc": [ - "【textAlign】: Alineación del texto 【TextAlign】", - "A continuación se muestran en orden: izquierda, derecha, centro, justificado, inicio, final." - ] - }, - { - "file": "node5_textDirection.dart", - "name": "Dirección del texto y número máximo de líneas", - "desc": [ - "【maxLines】 : Número máximo de líneas 【int】", - "【textDirection】 : Dirección del texto 【TextDirection】", - "A continuación se muestran en orden: rtl, ltr." - ] - }, - { - "file": "node6_softWrap.dart", - "name": "Ajuste de línea y efecto de desbordamiento", - "desc": [ - "【softWrap】 : Ajuste de línea 【bool】", - "【overflow】 : Efecto de desbordamiento 【TextOverflow】", - "A continuación softWrap=false; overflow en orden: recortar, desvanecer, puntos suspensivos, visible." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_fr_FR.json deleted file mode 100644 index 650db5af9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_fr_FR.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "Composant de texte", - "info": "Un composant pour afficher du texte. Possède de nombreuses propriétés, suffisantes pour répondre à vos besoins d'utilisation. Les styles de base sont contrôlés par l'attribut style.", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Style de base du texte", - "desc": [ - "【Paramètre】 : Texte 【String】", - "【style】: Style du texte 【TextStyle】", - "【color】: Couleur du texte 【Color】", - "【fontSize】: Taille du texte 【double】", - "【fontWeight】: Poids de la police 【FontWeight】", - "【fontStyle】: Style de la police 【fontStyle】", - "【letterSpacing】: Espacement des lettres 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Ombre du texte", - "desc": [ - "【shadows】 : Texte 【List】", - "【backgroundColor】: Couleur de fond 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Ligne de décoration du texte", - "desc": [ - "【fontFamily】 : Police du texte 【String】", - "【decoration】: Ligne de décoration 【TextDecoration】", - "【decorationColor】: Couleur de la ligne de décoration 【Color】", - "【decorationThickness】: Épaisseur de la ligne de décoration 【double】", - "【decorationStyle】: Style de la ligne de décoration 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "Alignement du texte", - "desc": [ - "【textAlign】: Alignement 【TextAlign】", - "Les options suivantes sont : left, right, center, justify, start, end" - ] - }, - { - "file": "node5_textDirection.dart", - "name": "Direction du texte et nombre maximum de lignes", - "desc": [ - "【maxLines】 : Nombre maximum de lignes 【int】", - "【textDirection】 : Direction du texte 【TextDirection】", - "Les options suivantes sont : rtl, ltr" - ] - }, - { - "file": "node6_softWrap.dart", - "name": "Retour à la ligne et effet de débordement", - "desc": [ - "【softWrap】 : Retour à la ligne 【bool】", - "【overflow】 : Effet de débordement 【TextOverflow】", - "Si softWrap=false; les options overflow sont : clip, fade, ellipsis, visible" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_it_IT.json deleted file mode 100644 index 18a546bb7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_it_IT.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "Componente di testo", - "info": "Componente per visualizzare il testo. Possiede molte proprietà, sufficienti per soddisfare le tue esigenze di utilizzo. Lo stile principale è controllato dalla proprietà style.", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Stile di base del testo", - "desc": [ - "【Parametro】 : Testo 【String】", - "【style】: Stile del testo 【TextStyle】", - "【color】: Colore del testo 【Color】", - "【fontSize】: Dimensione del testo 【double】", - "【fontWeight】: Peso del carattere 【FontWeight】", - "【fontStyle】: Stile del carattere 【fontStyle】", - "【letterSpacing】: Spaziatura tra i caratteri 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Ombreggiatura del testo", - "desc": [ - "【shadows】 : Ombre del testo 【List】", - "【backgroundColor】: Colore di sfondo 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Linea decorativa del testo", - "desc": [ - "【fontFamily】 : Famiglia del carattere 【String】", - "【decoration】: Linea decorativa 【TextDecoration】", - "【decorationColor】: Colore della linea decorativa 【Color】", - "【decorationThickness】: Spessore della linea decorativa 【double】", - "【decorationStyle】: Stile della linea decorativa 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "Allineamento del testo", - "desc": [ - "【textAlign】: Allineamento 【TextAlign】", - "Di seguito in ordine: left, right, center, justify, start, end," - ] - }, - { - "file": "node5_textDirection.dart", - "name": "Direzione del testo e numero massimo di righe", - "desc": [ - "【maxLines】 : Numero massimo di righe 【int】", - "【textDirection】 : Direzione del testo 【TextDirection】", - "Di seguito in ordine: rtl, ltr," - ] - }, - { - "file": "node6_softWrap.dart", - "name": "A capo automatico ed effetto di overflow", - "desc": [ - "【softWrap】 : A capo automatico 【bool】", - "【overflow】 : Effetto di overflow 【TextOverflow】", - "Di seguito softWrap=false; overflow in ordine: clip, fade, ellipsis, visible," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ja_JP.json deleted file mode 100644 index 80209a30f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ja_JP.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "テキストコンポーネント", - "info": "テキストを表示するためのコンポーネントです。多くの属性を持っており、あなたの使用ニーズを十分に満たすことができます。コアのスタイルはstyle属性によって制御されます。", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "テキストの基本スタイル", - "desc": [ - "【入参】 : テキスト 【String】", - "【style】: テキストスタイル 【TextStyle】", - "【color】: テキストカラー 【Color】", - "【fontSize】: テキストサイズ 【double】", - "【fontWeight】: フォントの太さ 【FontWeight】", - "【fontStyle】: フォントスタイル 【fontStyle】", - "【letterSpacing】: 文字間隔 【double】" - ] - }, - { - "file": "node2.dart", - "name": "テキストシャドウ", - "desc": [ - "【shadows】 : テキスト 【List】", - "【backgroundColor】: 背景色 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "テキスト装飾線", - "desc": [ - "【fontFamily】 : テキストフォント 【String】", - "【decoration】: 装飾線 【TextDecoration】", - "【decorationColor】: 装飾線の色 【Color】", - "【decorationThickness】: 装飾線の太さ 【double】", - "【decorationStyle】: 装飾線のスタイル 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "テキストの配置", - "desc": [ - "【textAlign】: 配置 【TextAlign】", - "以下は順に:left、right、center、justify、start、end," - ] - }, - { - "file": "node5_textDirection.dart", - "name": "テキストの方向と最大行数", - "desc": [ - "【maxLines】 : 最大行数 【int】", - "【textDirection】 : テキストの方向 【TextDirection】", - "以下は順に:rtl、ltr," - ] - }, - { - "file": "node6_softWrap.dart", - "name": "折り返しとオーバーフロー効果", - "desc": [ - "【softWrap】 : 折り返し 【bool】", - "【overflow】 : オーバーフロー効果 【TextOverflow】", - "以下softWrap=false; overflowは順に:clip、fade、ellipsis、visible," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ko_KR.json deleted file mode 100644 index 875691c29..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ko_KR.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "텍스트 컴포넌트", - "info": "텍스트를 표시하는 데 사용되는 컴포넌트. 매우 많은 속성을 가지고 있어 사용자의 요구를 충족시킬 수 있으며, 핵심 스타일은 style 속성에 의해 제어됩니다.", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "텍스트의 기본 스타일", - "desc": [ - "【입력 매개변수】 : 텍스트 【String】", - "【style】: 텍스트 스타일 【TextStyle】", - "【color】: 텍스트 색상 【Color】", - "【fontSize】: 텍스트 크기 【double】", - "【fontWeight】: 글자 두께 【FontWeight】", - "【fontStyle】: 글자 스타일 【fontStyle】", - "【letterSpacing】: 글자 간격 【double】" - ] - }, - { - "file": "node2.dart", - "name": "텍스트 그림자", - "desc": [ - "【shadows】 : 텍스트 【List】", - "【backgroundColor】: 배경 색상 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "텍스트 장식선", - "desc": [ - "【fontFamily】 : 텍스트 글꼴 【String】", - "【decoration】: 장식선 【TextDecoration】", - "【decorationColor】: 장식선 색상 【Color】", - "【decorationThickness】: 장식선 두께 【double】", - "【decorationStyle】: 장식선 스타일 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "텍스트 정렬 방식", - "desc": [ - "【textAlign】: 정렬 방식 【TextAlign】", - "아래는 순서대로:left、right、center、justify、start、end," - ] - }, - { - "file": "node5_textDirection.dart", - "name": "텍스트 방향과 최대 줄 수", - "desc": [ - "【maxLines】 : 최대 줄 수 【int】", - "【textDirection】 : 텍스트 방향 【TextDirection】", - "아래는 순서대로:rtl、ltr," - ] - }, - { - "file": "node6_softWrap.dart", - "name": "줄바꿈 여부와 넘침 효과", - "desc": [ - "【softWrap】 : 줄바꿈 여부 【bool】", - "【overflow】 : 넘침 효과 【TextOverflow】", - "아래 softWrap=false; overflow는 순서대로:clip、fade、ellipsis、visible," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_pt_PT.json deleted file mode 100644 index 4a9489c81..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_pt_PT.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "Componente de Texto", - "info": "Componente utilizado para exibir texto. Possui uma grande quantidade de atributos, suficientes para atender às suas necessidades de uso. O estilo principal é controlado pelo atributo style.", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Estilo Básico do Texto", - "desc": [ - "【Parâmetro de Entrada】 : Texto 【String】", - "【style】: Estilo do Texto 【TextStyle】", - "【color】: Cor do Texto 【Color】", - "【fontSize】: Tamanho do Texto 【double】", - "【fontWeight】: Peso da Fonte 【FontWeight】", - "【fontStyle】: Estilo da Fonte 【fontStyle】", - "【letterSpacing】: Espaçamento entre Letras 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Sombra do Texto", - "desc": [ - "【shadows】 : Sombra do Texto 【List】", - "【backgroundColor】: Cor de Fundo 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Linha de Decoração do Texto", - "desc": [ - "【fontFamily】 : Fonte do Texto 【String】", - "【decoration】: Linha de Decoração 【TextDecoration】", - "【decorationColor】: Cor da Linha de Decoração 【Color】", - "【decorationThickness】: Espessura da Linha de Decoração 【double】", - "【decorationStyle】: Estilo da Linha de Decoração 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "Alinhamento do Texto", - "desc": [ - "【textAlign】: Alinhamento 【TextAlign】", - "A seguir estão: left, right, center, justify, start, end," - ] - }, - { - "file": "node5_textDirection.dart", - "name": "Direção do Texto e Número Máximo de Linhas", - "desc": [ - "【maxLines】 : Número Máximo de Linhas 【int】", - "【textDirection】 : Direção do Texto 【TextDirection】", - "A seguir estão: rtl, ltr," - ] - }, - { - "file": "node6_softWrap.dart", - "name": "Quebra de Linha e Efeito de Transbordamento", - "desc": [ - "【softWrap】 : Quebra de Linha 【bool】", - "【overflow】 : Efeito de Transbordamento 【TextOverflow】", - "A seguir, softWrap=false; overflow são: clip, fade, ellipsis, visible," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ru_RU.json deleted file mode 100644 index 492442103..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ru_RU.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "Текстовый компонент", - "info": "Компонент для отображения текста. Имеет множество свойств, достаточных для удовлетворения ваших потребностей. Основные стили управляются свойством style.", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Основные стили текста", - "desc": [ - "【Входные параметры】 : текст 【String】", - "【style】: стиль текста 【TextStyle】", - "【color】: цвет текста 【Color】", - "【fontSize】: размер текста 【double】", - "【fontWeight】: толщина шрифта 【FontWeight】", - "【fontStyle】: стиль шрифта 【fontStyle】", - "【letterSpacing】: межбуквенный интервал 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Тень текста", - "desc": [ - "【shadows】 : тень текста 【List】", - "【backgroundColor】: цвет фона 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Декоративные линии текста", - "desc": [ - "【fontFamily】 : шрифт текста 【String】", - "【decoration】: декоративная линия 【TextDecoration】", - "【decorationColor】: цвет декоративной линии 【Color】", - "【decorationThickness】: толщина декоративной линии 【double】", - "【decorationStyle】: стиль декоративной линии 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "Выравнивание текста", - "desc": [ - "【textAlign】: выравнивание 【TextAlign】", - "Ниже приведены: left, right, center, justify, start, end," - ] - }, - { - "file": "node5_textDirection.dart", - "name": "Направление текста и максимальное количество строк", - "desc": [ - "【maxLines】 : максимальное количество строк 【int】", - "【textDirection】 : направление текста 【TextDirection】", - "Ниже приведены: rtl, ltr," - ] - }, - { - "file": "node6_softWrap.dart", - "name": "Перенос строк и эффект переполнения", - "desc": [ - "【softWrap】 : перенос строк 【bool】", - "【overflow】 : эффект переполнения 【TextOverflow】", - "Ниже softWrap=false; overflow: clip, fade, ellipsis, visible," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_zh-CN.json deleted file mode 100644 index cd97d60ab..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_zh-CN.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "文字组件", - "info": "用于显示文字的组件。拥有的属性非常多,足够满足你的使用需求,核心样式由style属性控制。", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "文字的基本样式", - "desc": [ - "【入参】 : 文字 【String】", - "【style】: 文字样式 【TextStyle】", - "【color】: 文字样式 【Color】", - "【fontSize】: 文字大小 【double】", - "【fontWeight】: 字重 【FontWeight】", - "【fontStyle】: 字体样式 【fontStyle】", - "【letterSpacing】: 字距 【double】" - ] - }, - { - "file": "node2.dart", - "name": "文字阴影", - "desc": [ - "【shadows】 : 文字 【List】", - "【backgroundColor】: 背景颜色 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "文字装饰线", - "desc": [ - "【fontFamily】 : 文字字体 【String】", - "【decoration】: 装饰线 【TextDecoration】", - "【decorationColor】: 装饰线颜色 【Color】", - "【decorationThickness】: 装饰线粗 【double】", - "【decorationStyle】: 装饰线样式 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "文字对齐方式", - "desc": [ - "【textAlign】: 对齐方式 【TextAlign】", - "下面依次是:left、right、center、justify、start、end," - ] - }, - { - "file": "node5_textDirection.dart", - "name": "文字方向与最大行数", - "desc": [ - "【maxLines】 : 最大行数 【int】", - "【textDirection】 : 文字方向 【TextDirection】", - "下面依次是:rtl、ltr," - ] - }, - { - "file": "node6_softWrap.dart", - "name": "是否包裹与越界效果", - "desc": [ - "【softWrap】 : 是否换行 【bool】", - "【overflow】 : 越界效果 【TextOverflow】", - "下面softWrap=false; overflow依次是:clip、fade、ellipsis、visible," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/node1.dart b/modules/widget_system/widgets/lib/StatelessWidget/Text/node1.dart deleted file mode 100644 index b7a871960..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/node1.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class TextDemo1 extends StatelessWidget { - const TextDemo1({super.key}); - - @override - Widget build(BuildContext context) { - const TextStyle style = TextStyle( - color: Colors.blue, - fontSize: 20, - fontWeight: FontWeight.bold, - fontStyle: FontStyle.italic, - letterSpacing: 10, - ); - return Container( - width: 200, - color: Colors.cyanAccent.withAlpha(33), - height: 76, - child: const Text("toly-张风捷特烈-1994`", style: style), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/node2.dart b/modules/widget_system/widgets/lib/StatelessWidget/Text/node2.dart deleted file mode 100644 index 9f3d949f3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/node2.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class TextDemo2 extends StatelessWidget { - const TextDemo2({super.key}); - - @override - Widget build(BuildContext context) { - const TextStyle style = TextStyle( - fontSize: 50, - color: Colors.white, - backgroundColor: Colors.black, - shadows: [ - Shadow(color: Colors.cyanAccent, offset: Offset(1, 1), blurRadius: 10), - Shadow(color: Colors.blue, offset: Offset(-0.1, 0.1), blurRadius: 10), - ]); - return const Text("张风捷特烈", style: style); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/node3_decoration.dart b/modules/widget_system/widgets/lib/StatelessWidget/Text/node3_decoration.dart deleted file mode 100644 index 7a3716e30..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/node3_decoration.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class DecorationText extends StatelessWidget { - const DecorationText({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const Text( - "19940328", - style: TextStyle( - fontSize: 50, - fontWeight: FontWeight.bold, - decoration: TextDecoration.underline, - decorationThickness: 3, - decorationStyle: TextDecorationStyle.wavy, - decorationColor: Colors.blue, - fontStyle: FontStyle.italic, - fontFamily: "DancingScript", - letterSpacing: 10), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/node4_textAlign.dart b/modules/widget_system/widgets/lib/StatelessWidget/Text/node4_textAlign.dart deleted file mode 100644 index de98a0340..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/node4_textAlign.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class TextAlignText extends StatelessWidget { - const TextAlignText({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - runSpacing: 10, - children: TextAlign.values - .map((TextAlign textAlign) => Container( - width: 120, - color: Colors.cyanAccent.withAlpha(33), - height: 120 * 0.618, - child: Text( - " 张风捷特烈 toly " * 3, - textAlign: textAlign, - ), - )) - .toList(), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/node5_textDirection.dart b/modules/widget_system/widgets/lib/StatelessWidget/Text/node5_textDirection.dart deleted file mode 100644 index 89d286abc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/node5_textDirection.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class TextDirectionText extends StatelessWidget { - const TextDirectionText({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 40, - runSpacing: 10, - children: TextDirection.values - .map((TextDirection direction) => Container( - width: 120, - color: Colors.cyanAccent.withAlpha(33), - height: 120 * 0.618, - child: Text( - " 张风捷特烈 toly " * 10, - textDirection: direction, - maxLines: 3, - overflow: TextOverflow.ellipsis, - ), - )) - .toList(), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/node6_softWrap.dart b/modules/widget_system/widgets/lib/StatelessWidget/Text/node6_softWrap.dart deleted file mode 100644 index 9c1aba9a8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/node6_softWrap.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class SoftWrapText extends StatelessWidget { - const SoftWrapText({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - runSpacing: 10, - children: TextOverflow.values - .map((TextOverflow textOverflow) => Container( - width: 150, - color: Colors.cyanAccent.withAlpha(33), - height: 150 * 0.618 * 0.618, - child: Text( - " 张风捷特烈 toly " * 5, - overflow: textOverflow, - softWrap: false, - ), - )) - .toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_de_DE.json deleted file mode 100644 index 20ae58b13..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "Thema", - "info": "Sie können das ThemeData-Objekt über Theme.of abrufen. Sie können auch ein Thema angeben, das auf die Nachkommenkomponenten von Theme angewendet wird.", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Textstil-ThemeData#TextTheme", - "desc": [ - "Untergeordnete Komponenten können die Daten des Themas über ThemeData.of abrufen und verwenden." - ] - }, - { - "file": "node2_use.dart", - "name": "Verwendung von Theme", - "desc": [ - "Mit Theme können Sie sehr viele Attribute als Thema angeben, die auf alle Nachkommenkomponenten angewendet werden, wie z. B. Schriftarten, Schieberegler, Karten, Text, Trennlinien, Schaltflächen usw." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_en_US.json deleted file mode 100644 index f3fe2ebdd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "Theme", - "info": "You can obtain the ThemeData object through Theme.of. You can also specify a theme to be applied to the descendant components of Theme.", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Text Style-ThemeData#TextTheme", - "desc": [ - "Child components can use the theme data obtained through ThemeData.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Usage of Theme", - "desc": [ - "Using Theme, you can specify a wide range of properties as themes, which will be applied to all descendant components, such as specifying properties for fonts, sliders, cards, text, dividers, buttons, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_es_ES.json deleted file mode 100644 index 98494e70f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "Tema", - "info": "Puedes obtener el objeto ThemeData a través de Theme.of. También puedes especificar un tema para aplicarlo a los componentes descendientes de Theme.", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Estilo de texto-ThemeData#TextTheme", - "desc": [ - "Los componentes secundarios pueden obtener y utilizar los datos del tema a través de ThemeData.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Uso de Theme", - "desc": [ - "Usando Theme, puedes especificar una gran cantidad de atributos como tema, que se aplicarán a todos los componentes descendientes, como la fuente, el control deslizante, la tarjeta, el texto, el divisor, el botón, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_fr_FR.json deleted file mode 100644 index 251f16963..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "Thème", - "info": "Vous pouvez obtenir l'objet ThemeData via Theme.of. Vous pouvez également spécifier un thème à appliquer aux composants descendants de Theme.", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Style de texte-ThemeData#TextTheme", - "desc": [ - "Les composants enfants peuvent obtenir les données du thème via ThemeData.of pour les utiliser." - ] - }, - { - "file": "node2_use.dart", - "name": "Utilisation de Theme", - "desc": [ - "En utilisant Theme, vous pouvez spécifier de nombreuses propriétés comme thème, ces propriétés seront appliquées à tous les composants descendants, comme la police, le curseur, la carte, le texte, la ligne de séparation, le bouton, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_it_IT.json deleted file mode 100644 index 6d2dc6e5a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "Tema", - "info": "Puoi ottenere l'oggetto ThemeData tramite Theme.of. Puoi anche specificare un tema da applicare ai componenti discendenti di Theme.", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Stile del testo-ThemeData#TextTheme", - "desc": [ - "I componenti figli possono ottenere i dati del tema tramite ThemeData.of e utilizzarli." - ] - }, - { - "file": "node2_use.dart", - "name": "Uso di Theme", - "desc": [ - "Utilizzando Theme, puoi specificare molte proprietà come tema, che verranno applicate a tutti i componenti discendenti, come font, slider, card, testo, linee divisorie, pulsanti, ecc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ja_JP.json deleted file mode 100644 index 07b34e756..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "テーマ", - "info": "Theme.ofを使用してThemeDataオブジェクトを取得できます。また、テーマをThemeの子孫コンポーネントに適用することもできます。", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "テキストスタイル-ThemeData#TextTheme", - "desc": [ - "子コンポーネントはThemeData.ofを使用してテーマのデータを取得して使用できます。" - ] - }, - { - "file": "node2_use.dart", - "name": "Themeの使い方", - "desc": [ - "Themeを使用すると、フォント、スライダー、カード、テキスト、分割線、ボタンなどの属性をテーマとして指定でき、これらの属性はすべての子孫コンポーネントに適用されます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ko_KR.json deleted file mode 100644 index 376210652..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "테마", - "info": "Theme.of를 통해 ThemeData 객체를 얻을 수 있습니다. 또한 테마를 지정하여 Theme의 하위 구성 요소에 적용할 수 있습니다.", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "텍스트 스타일-ThemeData#TextTheme", - "desc": [ - "하위 구성 요소는 ThemeData.of를 통해 테마 데이터를 얻어 사용할 수 있습니다." - ] - }, - { - "file": "node2_use.dart", - "name": "Theme 사용법", - "desc": [ - "Theme를 사용하면 매우 많은 속성을 테마로 지정할 수 있으며, 이러한 속성은 모든 하위 구성 요소에 적용됩니다. 예를 들어 글꼴, 슬라이더, 카드, 텍스트, 구분선, 버튼 등의 속성을 지정할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_pt_PT.json deleted file mode 100644 index 60fcfb4af..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "Tema", - "info": "Pode obter o objeto ThemeData através de Theme.of. Também pode especificar um tema para ser aplicado aos componentes descendentes do Theme.", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Estilo de texto-ThemeData#TextTheme", - "desc": [ - "Os componentes filhos podem obter e usar os dados do tema através de ThemeData.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Uso do Theme", - "desc": [ - "Ao usar Theme, pode especificar uma grande variedade de propriedades como tema, que serão aplicadas a todos os componentes descendentes, como fonte, slider, cartão, texto, divisor, botão, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ru_RU.json deleted file mode 100644 index 188d286f2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "Тема", - "info": "Можно получить объект ThemeData через Theme.of. Также можно указать тему для применения к дочерним компонентам Theme.", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Текстовые стили - ThemeData#TextTheme", - "desc": [ - "Дочерние компоненты могут использовать данные темы, полученные через ThemeData.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Использование Theme", - "desc": [ - "Используя Theme, можно указать множество свойств в качестве темы, которые будут применены ко всем дочерним компонентам, таким как шрифты, ползунки, карточки, текст, разделители, кнопки и т.д." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_zh-CN.json deleted file mode 100644 index 18c0dedb4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "主题", - "info": "可通过Theme.of获取ThemeData对象。也可以指定主题应用于Theme的后代组件。", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "文字样式-ThemeData#TextTheme", - "desc": [ - "子组件可以通过ThemeData.of获取主题的数据进行使用。" - ] - }, - { - "file": "node2_use.dart", - "name": "Theme的用法", - "desc": [ - "使用Theme,可以指定非常多的属性作为主题,这些属性将应用于所有的后代组件,如指定字体、滑块、卡片、文字、分割线、按钮等属性。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Theme/node1_base.dart deleted file mode 100644 index 69e4d691e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/node1_base.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class TextThemeDemo extends StatelessWidget { - const TextThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - TextTheme queryData = Theme.of(context).textTheme; - Map styles = { - "headlineSmall: ": queryData.headlineSmall!, - "headlineMedium: ": queryData.headlineMedium!, - "headlineLarge: ": queryData.headlineLarge!, - "bodySmall: ": queryData.bodySmall!, - "bodyMedium: ": queryData.bodyMedium!, - "bodyLarge: ": queryData.bodyLarge!, - "titleSmall: ": queryData.titleSmall!, - "titleMedium: ": queryData.titleMedium!, - "titleLarge: ": queryData.titleLarge!, - "labelMedium: ": queryData.labelMedium!, - "labelSmall: ": queryData.labelSmall!, - "labelLarge: ": queryData.labelLarge!, - }; - - return Column( - children: styles.keys - .map((String styleInfo) => buildItem(styleInfo, styles[styleInfo]!)) - .toList(), - ); - } - - TextStyle get textStyle => const TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, - ); - - Widget buildItem(String styleInfo, TextStyle style) => Column( - children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text(styleInfo, style: textStyle), - Text("@toly", style: style) - ], - ), - ), - const Divider(height: 1) - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/node2_use.dart b/modules/widget_system/widgets/lib/StatelessWidget/Theme/node2_use.dart deleted file mode 100644 index d2599ca41..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/node2_use.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class CustomTheme extends StatelessWidget { - const CustomTheme({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Theme( - data: ThemeData( - cardTheme: const CardThemeData( - color: Colors.red, - elevation: 4, - ), - dividerTheme: const DividerThemeData( - color: Colors.blue, - thickness: 2, - ), - sliderTheme: const SliderThemeData( - thumbColor: Colors.red, - activeTrackColor: Colors.green, - inactiveTrackColor: Colors.grey, - )), - child: Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Card( - child: Container( - width: 50, - height: 50, - color: Colors.transparent, - ), - ), - const SizedBox( - width: 150, - child: Slider(value: 0.8, onChanged: null), - ), - const SizedBox(width: 150, child: Divider()) - ])); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_de_DE.json deleted file mode 100644 index 6f58c0b6b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "Anwendungsname", - "info": "Diese Komponente wird verwendet, um den Namen der App im Betriebssystem zu beschreiben. Die Auswirkungen können in der Anwendungsleiste gesehen werden. Die Quelle des Effekts des title-Felds in MaterialApp ist diese Komponente.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Title", - "desc": [ - "【title】 : Name 【int】", - "【color】: Farbe 【Color】", - "【child】: Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_en_US.json deleted file mode 100644 index 4ffca745a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "Application Title", - "info": "This component is used to describe the name of the app in the operating system, and the effect can be seen in the app bar list. The root of the title field effect in MaterialApp is this component.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Title", - "desc": [ - "【title】: Name 【int】", - "【color】: Color 【Color】", - "【child】: Child Component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_es_ES.json deleted file mode 100644 index 4804913b7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "Título de la aplicación", - "info": "Este componente se utiliza para describir el nombre de la aplicación en el sistema operativo, y se puede ver el efecto en la lista de la barra de aplicaciones. El origen del efecto del campo title en MaterialApp es este componente.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Title", - "desc": [ - "【title】 : Nombre 【int】", - "【color】: Color 【Color】", - "【child】: Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_fr_FR.json deleted file mode 100644 index 1507f62a5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "Titre de l'application", - "info": "Ce composant est utilisé pour décrire le nom de l'application dans le système d'exploitation, et son effet peut être vu dans la liste de la barre d'applications. La source de l'effet du champ title dans MaterialApp est ce composant.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Title", - "desc": [ - "【title】 : Nom 【int】", - "【color】: Couleur 【Color】", - "【child】: Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_it_IT.json deleted file mode 100644 index a7c3efba5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "Titolo dell'applicazione", - "info": "Questo componente è utilizzato per descrivere il nome dell'app nel sistema operativo, e l'effetto può essere visto nella lista della barra delle applicazioni. L'origine dell'effetto del campo title in MaterialApp è questo componente.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Title", - "desc": [ - "【title】 : Nome 【int】", - "【color】: Colore 【Color】", - "【child】: Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ja_JP.json deleted file mode 100644 index 742a027d2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "アプリタイトル", - "info": "このコンポーネントは、アプリのオペレーティングシステムでの名前を記述するために使用され、アプリケーションバーのリストで効果を確認できます。MaterialAppのtitleフィールドの効果の根源はこのコンポーネントです。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Title基本使用", - "desc": [ - "【title】 : 名称 【int】", - "【color】: 色 【Color】", - "【child】: 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ko_KR.json deleted file mode 100644 index ce0edf1f7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "앱 제목", - "info": "이 컴포넌트는 앱이 운영 체제에서의 이름을 설명하는 데 사용되며, 앱 바 목록에서 효과를 볼 수 있습니다. MaterialApp의 title 필드 효과의 근원은 이 컴포넌트입니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Title 기본 사용", - "desc": [ - "【title】 : 이름 【int】", - "【color】: 색상 【Color】", - "【child】: 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_pt_PT.json deleted file mode 100644 index de353c50b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "Título da Aplicação", - "info": "Este componente é usado para descrever o nome da aplicação no sistema operativo, e o efeito pode ser visto na lista da barra de aplicações. A origem do efeito do campo 'title' no MaterialApp é este componente.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Title", - "desc": [ - "【title】 : Nome 【int】", - "【color】: Cor 【Color】", - "【child】: Componente Filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ru_RU.json deleted file mode 100644 index 56b3fb155..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "Заголовок приложения", - "info": "Этот компонент используется для описания имени приложения в операционной системе, эффект можно увидеть в списке приложений. Источником эффекта поля title в MaterialApp является этот компонент.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Title", - "desc": [ - "【title】 : Название 【int】", - "【color】: Цвет 【Color】", - "【child】: Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_zh-CN.json deleted file mode 100644 index 0df024dbd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "应用标题", - "info": "该组件用于描述app在操作系统中的名称,可以在应用栏列表里看到效果。MaterialApp中的title字段效果的根源是该组件。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Title基本使用", - "desc": [ - "【title】 : 名称 【int】", - "【color】: 颜色 【Color】", - "【child】: 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Title/node1_base.dart deleted file mode 100644 index 19bb988c1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/node1_base.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - -class TitleDemo extends StatelessWidget { - const TitleDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Title( - title: '张风捷特烈', - color: const Color(0xFF9C27B0), - child: const Center( - child: Text('应用菜单栏中该页的名称为: 张风捷特烈'), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_de_DE.json deleted file mode 100644 index 0e621b8ec..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_de_DE.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "Schaltflächengruppe umschalten", - "info": "Empfängt eine Liste von Komponenten und kann Eigenschaften wie Randlinie, abgerundete Ecken, Farbe usw. angeben. Basierend auf der spezifischen Logik kann es die Anforderungen für die Einzel- oder Mehrfachauswahl mehrerer Schaltflächen erfüllen.", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "ToggleButtons Einzelauswahl umschalten", - "desc": [ - "【children】: Untergeordnete Komponentensammlung 【List】", - "【borderWidth】: Randlinienbreite 【double】", - "【borderRadius】: Abgerundete Ecken 【BorderRadius】", - "【isSelected】: Auswahlstatus 【List】", - "【onPressed】: Klickereignis 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "ToggleButtons Farbeigenschaften", - "desc": [ - "【borderColor】: Randlinienfarbe 【Color】", - "【selectedBorderColor】: Ausgewählte Randlinienfarbe 【Color】", - "【selectedColor】: Farbe der ausgewählten Komponente 【Color】", - "【fillColor】: Füllfarbe bei Auswahl 【Color】", - "【splashColor】: Wasserwellenfarbe 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "ToggleButtons Mehrfachauswahl umschalten", - "desc": [ - "Kann die Logik der Zustandsänderung steuern, um unterschiedliche Effekte zu erzielen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_en_US.json deleted file mode 100644 index 75e2c4cd8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_en_US.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "Toggle Buttons Group", - "info": "Receives a list of components, and can specify properties such as border, rounded corners, color, etc. According to specific logic, it can achieve the requirements of single or multiple selection of buttons.", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "ToggleButtons Single Selection", - "desc": [ - "【children】: Children components 【List】", - "【borderWidth】: Border width 【double】", - "【borderRadius】: Rounded corners 【BorderRadius】", - "【isSelected】: Selection status set 【List】", - "【onPressed】: Click event 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "ToggleButtons Color Properties", - "desc": [ - "【borderColor】: Border color 【Color】", - "【selectedBorderColor】: Selected border color 【Color】", - "【selectedColor】: Component color when selected 【Color】", - "【fillColor】: Fill color when selected 【Color】", - "【splashColor】: Ripple color 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "ToggleButtons Multiple Selection", - "desc": [ - "The logic of state transformation can be controlled to create different effects." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_es_ES.json deleted file mode 100644 index 17d5fb3c3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_es_ES.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "Grupo de botones de conmutación", - "info": "Recibe una lista de componentes y permite especificar propiedades como el borde, el radio de las esquinas, el color, etc. Según la lógica específica, se puede implementar la necesidad de selección única o múltiple de varios botones.", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "Conmutación única de ToggleButtons", - "desc": [ - "【children】: Conjunto de componentes hijos 【List】", - "【borderWidth】: Ancho del borde 【double】", - "【borderRadius】: Radio de las esquinas 【BorderRadius】", - "【isSelected】: Conjunto de selección 【List】", - "【onPressed】: Evento de clic 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "Propiedades de color de ToggleButtons", - "desc": [ - "【borderColor】: Color del borde 【Color】", - "【selectedBorderColor】: Color del borde seleccionado 【Color】", - "【selectedColor】: Color del componente cuando está seleccionado 【Color】", - "【fillColor】: Color de relleno cuando está seleccionado 【Color】", - "【splashColor】: Color de la onda 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "Conmutación múltiple de ToggleButtons", - "desc": [ - "Puede controlar la lógica de transformación de estado para crear diferentes efectos." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_fr_FR.json deleted file mode 100644 index 1c28ef4dd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_fr_FR.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "Groupe de boutons de bascule", - "info": "Reçoit une liste de composants, peut spécifier des propriétés telles que la bordure, le rayon, la couleur, etc. Selon la logique spécifique, il peut répondre à la demande de sélection unique ou multiple de plusieurs boutons.", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "Basculement unique de ToggleButtons", - "desc": [ - "【children】: Ensemble de composants enfants 【List】", - "【borderWidth】: Largeur de la bordure 【double】", - "【borderRadius】: Rayon 【BorderRadius】", - "【isSelected】: Ensemble de sélection 【List】", - "【onPressed】: Événement de clic 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "Propriétés de couleur de ToggleButtons", - "desc": [ - "【borderColor】: Couleur de la bordure 【Color】", - "【selectedBorderColor】: Couleur de la bordure sélectionnée 【Color】", - "【selectedColor】: Couleur du composant sélectionné 【Color】", - "【fillColor】: Couleur de remplissage sélectionnée 【Color】", - "【splashColor】: Couleur de l'effet de vague 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "Basculement multiple de ToggleButtons", - "desc": [ - "Peut contrôler la logique de transformation d'état pour créer différents effets." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_it_IT.json deleted file mode 100644 index 8bed81226..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_it_IT.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "Gruppo di pulsanti di commutazione", - "info": "Riceve un elenco di componenti e può specificare proprietà come bordi, angoli arrotondati, colori, ecc. In base alla logica specifica, è possibile implementare la selezione singola o multipla di più pulsanti.", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "ToggleButtons selezione singola", - "desc": [ - "【children】: Insieme di componenti figli 【List】", - "【borderWidth】: Larghezza del bordo 【double】", - "【borderRadius】: Angoli arrotondati 【BorderRadius】", - "【isSelected】: Insieme di selezione 【List】", - "【onPressed】: Evento di clic 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "Proprietà del colore di ToggleButtons", - "desc": [ - "【borderColor】: Colore del bordo 【Color】", - "【selectedBorderColor】: Colore del bordo selezionato 【Color】", - "【selectedColor】: Colore del componente selezionato 【Color】", - "【fillColor】: Colore di riempimento selezionato 【Color】", - "【splashColor】: Colore dell'effetto ondulazione 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "ToggleButtons selezione multipla", - "desc": [ - "È possibile controllare la logica di trasformazione dello stato per creare effetti diversi." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ja_JP.json deleted file mode 100644 index 084ac4a66..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ja_JP.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "トグルボタングループ", - "info": "コンポーネントリストを受け取り、境界線、角丸、色などの属性を指定できます。特定のロジックに基づいて、複数のボタンの単一選択または複数選択の要件を実現できます。", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "ToggleButtons単一選択トグル", - "desc": [ - "【children】: 子コンポーネントセット 【List】", - "【borderWidth】: 境界線の幅 【double】", - "【borderRadius】: 角丸 【BorderRadius】", - "【isSelected】: 選択状態セット 【List】", - "【onPressed】: クリックイベント 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "ToggleButtonsカラープロパティ", - "desc": [ - "【borderColor】: 境界線の色 【Color】", - "【selectedBorderColor】: 選択時の境界線の色 【Color】", - "【selectedColor】: 選択時のコンポーネントの色 【Color】", - "【fillColor】: 選択時の塗りつぶし色 【Color】", - "【splashColor】: 波紋の色 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "ToggleButtons複数選択トグル", - "desc": [ - "状態変換のロジックを制御して、異なる効果を生み出すことができます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ko_KR.json deleted file mode 100644 index c424bb2d8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ko_KR.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "토글 버튼 그룹", - "info": "컴포넌트 리스트를 받아 테두리, 모서리 둥글기, 색상 등 속성을 지정할 수 있습니다. 특정 로직에 따라 여러 버튼의 단일 선택 또는 다중 선택 요구를 구현할 수 있습니다.", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "ToggleButtons 단일 선택 토글", - "desc": [ - "【children】: 자식 컴포넌트 집합 【List】", - "【borderWidth】: 테두리 두께 【double】", - "【borderRadius】: 모서리 둥글기 【BorderRadius】", - "【isSelected】: 선택 여부 집합 【List】", - "【onPressed】: 클릭 이벤트 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "ToggleButtons 색상 속성", - "desc": [ - "【borderColor】: 테두리 색상 【Color】", - "【selectedBorderColor】: 선택된 테두리 색상 【Color】", - "【selectedColor】: 선택된 컴포넌트 색상 【Color】", - "【fillColor】: 선택된 채우기 색상 【Color】", - "【splashColor】: 물결 효과 색상 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "ToggleButtons 다중 선택 토글", - "desc": [ - "상태 변환 로직을 제어하여 다양한 효과를 만들 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_pt_PT.json deleted file mode 100644 index 507252ee9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_pt_PT.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "Grupo de Botões de Alternância", - "info": "Recebe uma lista de componentes, pode especificar atributos como borda, raio, cor, etc. De acordo com a lógica específica, pode atender à necessidade de seleção única ou múltipla de vários botões.", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "Alternância Única de ToggleButtons", - "desc": [ - "【children】: Conjunto de componentes filhos 【List】", - "【borderWidth】: Largura da borda 【double】", - "【borderRadius】: Raio da borda 【BorderRadius】", - "【isSelected】: Conjunto de seleção 【List】", - "【onPressed】: Evento de clique 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "Atributos de Cor de ToggleButtons", - "desc": [ - "【borderColor】: Cor da borda 【Color】", - "【selectedBorderColor】: Cor da borda selecionada 【Color】", - "【selectedColor】: Cor do componente quando selecionado 【Color】", - "【fillColor】: Cor de preenchimento quando selecionado 【Color】", - "【splashColor】: Cor do efeito de ondulação 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "Alternância Múltipla de ToggleButtons", - "desc": [ - "Pode controlar a lógica de transformação de estado para criar diferentes efeitos." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ru_RU.json deleted file mode 100644 index 3534d10aa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ru_RU.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "Группа переключателей", - "info": "Принимает список компонентов, можно указать свойства границы, радиуса, цвета и т.д. В зависимости от конкретной логики, можно реализовать требования для одного или нескольких кнопок.", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "Одиночный переключатель ToggleButtons", - "desc": [ - "【children】: Набор дочерних компонентов 【List】", - "【borderWidth】: Ширина границы 【double】", - "【borderRadius】: Радиус угла 【BorderRadius】", - "【isSelected】: Набор выбранных 【List】", - "【onPressed】: Событие нажатия 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "Цветовые свойства ToggleButtons", - "desc": [ - "【borderColor】: Цвет границы 【Color】", - "【selectedBorderColor】: Цвет выбранной границы 【Color】", - "【selectedColor】: Цвет компонента при выборе 【Color】", - "【fillColor】: Цвет заполнения при выборе 【Color】", - "【splashColor】: Цвет водяного знака 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "Множественный переключатель ToggleButtons", - "desc": [ - "Можно управлять логикой преобразования состояния для создания различных эффектов." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_zh-CN.json deleted file mode 100644 index 570997964..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_zh-CN.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "切换按钮组", - "info": "接收组件列表,可指定边线、圆角、颜色等属性。根据具体逻辑,可以实现多个按钮单选或多选的需求。", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "ToggleButtons单选切换", - "desc": [ - "【children】: 子组件集 【List】", - "【borderWidth】: 边线宽 【double】", - "【borderRadius】: 圆角 【BorderRadius】", - "【isSelected】: 是否选中集 【List】", - "【onPressed】: 点击事件 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "ToggleButtons颜色属性", - "desc": [ - "【borderColor】: 边线色 【Color】", - "【selectedBorderColor】: 选中边线色 【Color】", - "【selectedColor】: 选中时组件色 【Color】", - "【fillColor】: 选中时填充色 【Color】", - "【splashColor】: 水波纹色 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "ToggleButtons多选切换", - "desc": [ - "可以控制状态转化的逻辑来形成不同的效果。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node1_single.dart b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node1_single.dart deleted file mode 100644 index 7ec287cc1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node1_single.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class CustomToggleButtons extends StatefulWidget { - const CustomToggleButtons({Key? key}) : super(key: key); - - @override - _CustomToggleButtonsState createState() => _CustomToggleButtonsState(); -} - -class _CustomToggleButtonsState extends State { - List _isSelected = [true, false, false]; - - @override - Widget build(BuildContext context) { - return ToggleButtons( - children: const [ - Icon(Icons.skip_previous), - Icon(Icons.pause), - Icon(Icons.skip_next), - ], - borderWidth: 1, - borderRadius: BorderRadius.circular(10), - isSelected: _isSelected, - onPressed: (value) => setState(() { - _isSelected = _isSelected.map((e) => false).toList(); - _isSelected[value] = true; - }), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node2_color.dart b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node2_color.dart deleted file mode 100644 index db779159b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node2_color.dart +++ /dev/null @@ -1,40 +0,0 @@ - - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class ColorToggleButtons extends StatefulWidget { - const ColorToggleButtons({Key? key}) : super(key: key); - - @override - _ColorToggleButtonsState createState() => _ColorToggleButtonsState(); -} - -class _ColorToggleButtonsState extends State { - List _isSelected = [true, false, false]; - - @override - Widget build(BuildContext context) { - return ToggleButtons( - children: const [ - Icon(Icons.skip_previous), - Icon(Icons.pause), - Icon(Icons.skip_next), - ], - borderWidth: 1, - borderColor: Colors.orangeAccent, - selectedBorderColor: Colors.blue, - splashColor: Colors.purple.withAlpha(66), - borderRadius: BorderRadius.circular(10), - selectedColor: Colors.red, - fillColor: Colors.green.withAlpha(11), - isSelected: _isSelected, - onPressed: (value) => setState(() { - _isSelected = _isSelected.map((e) => false).toList(); - _isSelected[value] = true; - }), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node3_multi.dart b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node3_multi.dart deleted file mode 100644 index edb205b5a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node3_multi.dart +++ /dev/null @@ -1,38 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class ProToggleButtons extends StatefulWidget { - const ProToggleButtons({Key? key}) : super(key: key); - - @override - _ProToggleButtonsState createState() => _ProToggleButtonsState(); -} - -class _ProToggleButtonsState extends State { - final List _isSelected = [false, false, false]; - - @override - Widget build(BuildContext context) { - return ToggleButtons( - children: const [ - Icon(Icons.skip_previous), - Icon(Icons.pause), - Icon(Icons.skip_next), - ], - borderWidth: 1, - borderColor: Colors.blue, - selectedBorderColor: Colors.orangeAccent, - splashColor: Colors.purple.withAlpha(66), - borderRadius: BorderRadius.circular(10), - selectedColor: Colors.red, - fillColor: Colors.green.withAlpha(11), - isSelected: _isSelected, - onPressed: (value) => setState(() { - _isSelected[value] = !_isSelected[value]; - }), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_de_DE.json deleted file mode 100644 index 42b7931b1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "Anzeigekopf", - "info": "Eine allgemeine Anzeigestruktur, die von Flutter bereitgestellt wird. Komponenten können an entsprechenden Positionen eingefügt werden, um spezifische Einträge einfach zu handhaben. Wird häufig in Drawern verwendet.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Die grundlegende Darstellung dieser Komponente ist wie folgt", - "desc": [ - "【currentAccountPicture】: Obere Komponente 【Widget】", - "【accountName】: Mittlere Komponente 【Widget】", - "【accountEmail】: Untere Komponente 【Widget】", - "【decoration】: Dekoration 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "Obere rechte Ecke und Unterseite", - "desc": [ - "【otherAccountsPictures】: Obere rechte Komponente 【List】", - "【onDetailsPressed】: Klickereignis in der unteren rechten Ecke 【Function()】", - "【arrowColor】: Farbe der Schaltfläche in der unteren rechten Ecke 【Color】", - "【margin】: Außenabstand 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_en_US.json deleted file mode 100644 index 93b0d2be0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "Display Header", - "info": "A common display structure provided by Flutter, where components can be inserted in corresponding positions, making it easy to handle specific items, commonly used in Drawers.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "The basic performance of this component is as follows", - "desc": [ - "【currentAccountPicture】: Top component 【Widget】", - "【accountName】: Middle component 【Widget】", - "【accountEmail】: Bottom component 【Widget】", - "【decoration】: Decoration 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "Top right corner and bottom", - "desc": [ - "【otherAccountsPictures】: Top right component 【List】", - "【onDetailsPressed】: Bottom right click event 【Function()】", - "【arrowColor】: Bottom right button color 【Color】", - "【margin】: Margin 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_es_ES.json deleted file mode 100644 index 5a180edc2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "Encabezado de exhibición", - "info": "Una estructura de exhibición genérica proporcionada por Flutter, donde se pueden insertar componentes en las posiciones correspondientes, lo que permite manejar fácilmente elementos específicos, comúnmente utilizado en Drawer.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La presentación básica de este componente es la siguiente", - "desc": [ - "【currentAccountPicture】: componente superior 【Widget】", - "【accountName】: componente central 【Widget】", - "【accountEmail】: componente inferior 【Widget】", - "【decoration】: decoración 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "Esquina superior derecha y parte inferior", - "desc": [ - "【otherAccountsPictures】: componente superior derecho 【List】", - "【onDetailsPressed】: evento de clic en la esquina inferior derecha 【Function()】", - "【arrowColor】: color del botón en la esquina inferior derecha 【Color】", - "【margin】: margen exterior 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_fr_FR.json deleted file mode 100644 index 3382b7357..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "En-tête d'affichage", - "info": "Une structure d'affichage générique fournie par Flutter, où des composants peuvent être insérés à des positions spécifiques, permettant de répondre facilement à des éléments spécifiques, souvent utilisé dans les Drawer.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La présentation de base de ce composant est la suivante", - "desc": [ - "【currentAccountPicture】: Composant supérieur 【Widget】", - "【accountName】: Composant central 【Widget】", - "【accountEmail】: Composant inférieur 【Widget】", - "【decoration】: Décoration 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "Coin supérieur droit et bas", - "desc": [ - "【otherAccountsPictures】: Composant supérieur droit 【List】", - "【onDetailsPressed】: Événement de clic en bas à droite 【Function()】", - "【arrowColor】: Couleur du bouton en bas à droite 【Color】", - "【margin】: Marge extérieure 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_it_IT.json deleted file mode 100644 index 4f0b3b4c9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "Intestazione del cassetto degli account utente", - "info": "Una struttura di visualizzazione generica fornita da Flutter, in cui è possibile inserire componenti nelle posizioni corrispondenti, utile per gestire voci specifiche, comunemente utilizzata nei cassetti.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La rappresentazione di base di questo componente è la seguente", - "desc": [ - "【currentAccountPicture】: componente superiore 【Widget】", - "【accountName】: componente centrale 【Widget】", - "【accountEmail】: componente inferiore 【Widget】", - "【decoration】: decorazione 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "Angolo superiore destro e parte inferiore", - "desc": [ - "【otherAccountsPictures】: componente superiore destro 【List】", - "【onDetailsPressed】: evento di clic nell'angolo inferiore destro 【Function()】", - "【arrowColor】: colore del pulsante nell'angolo inferiore destro 【Color】", - "【margin】: margine esterno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ja_JP.json deleted file mode 100644 index fc71dfa33..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "ヘッダーを表示", - "info": "Flutterが提供する汎用的な表示構造で、対応する位置にコンポーネントを挿入でき、特定の項目に簡単に対応できます。Drawerでよく使用されます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "このコンポーネントの基本的な表現は以下の通りです", - "desc": [ - "【currentAccountPicture】: 上部コンポーネント 【Widget】", - "【accountName】: 中部コンポーネント 【Widget】", - "【accountEmail】: 下部コンポーネント 【Widget】", - "【decoration】: 装飾 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "右上と下部", - "desc": [ - "【otherAccountsPictures】: 右上コンポーネント 【List】", - "【onDetailsPressed】: 右下クリックイベント 【Function()】", - "【arrowColor】: 右下ボタンの色 【Color】", - "【margin】: マージン 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ko_KR.json deleted file mode 100644 index 50fa97540..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "디스플레이 헤더", - "info": "Flutter에서 제공하는 일반적인 디스플레이 구조로, 해당 위치에 컴포넌트를 삽입할 수 있으며 특정 항목에 쉽게 대응할 수 있습니다. 주로 Drawer에서 사용됩니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "이 컴포넌트의 기본적인 표현은 다음과 같습니다", - "desc": [ - "【currentAccountPicture】: 상단 컴포넌트 【Widget】", - "【accountName】: 중간 컴포넌트 【Widget】", - "【accountEmail】: 하단 컴포넌트 【Widget】", - "【decoration】: 장식 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "오른쪽 상단과 하단", - "desc": [ - "【otherAccountsPictures】: 오른쪽 상단 컴포넌트 【List】", - "【onDetailsPressed】: 오른쪽 하단 클릭 이벤트 【Function()】", - "【arrowColor】: 오른쪽 하단 버튼 색상 【Color】", - "【margin】: 외부 여백 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_pt_PT.json deleted file mode 100644 index 261f41add..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "Cabeçalho de Exibição", - "info": "Uma estrutura de exibição genérica fornecida pelo Flutter, onde componentes podem ser inseridos nas posições correspondentes, facilitando a adaptação a itens específicos, comumente usado em Drawers.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "A representação básica deste componente é a seguinte", - "desc": [ - "【currentAccountPicture】: Componente superior 【Widget】", - "【accountName】: Componente do meio 【Widget】", - "【accountEmail】: Componente inferior 【Widget】", - "【decoration】: Decoração 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "Canto superior direito e inferior", - "desc": [ - "【otherAccountsPictures】: Componente superior direito 【List】", - "【onDetailsPressed】: Evento de clique no canto inferior direito 【Function()】", - "【arrowColor】: Cor do botão no canto inferior direito 【Color】", - "【margin】: Margem externa 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ru_RU.json deleted file mode 100644 index f4512b44b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "Заголовок отображения", - "info": "Универсальная структура отображения, предоставляемая Flutter, в которую можно вставлять компоненты в соответствующие места, что позволяет легко адаптироваться к конкретным элементам, часто используется в Drawer.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное представление компонента", - "desc": [ - "【currentAccountPicture】: Верхний компонент 【Widget】", - "【accountName】: Средний компонент 【Widget】", - "【accountEmail】: Нижний компонент 【Widget】", - "【decoration】: Декорация 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "Верхний правый угол и нижняя часть", - "desc": [ - "【otherAccountsPictures】: Верхний правый компонент 【List】", - "【onDetailsPressed】: Событие нажатия в нижнем правом углу 【Function()】", - "【arrowColor】: Цвет кнопки в нижнем правом углу 【Color】", - "【margin】: Внешний отступ 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_zh-CN.json deleted file mode 100644 index efda05170..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "展示头", - "info": "Flutter提供的一个通用展示结构,相应位置可插入组件,可以很方便地应对特定的条目,常用于Drawer中。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "该组件的基本表现如下", - "desc": [ - "【currentAccountPicture】: 上组件 【Widget】", - "【accountName】: 中组件 【Widget】", - "【accountEmail】: 下组件 【Widget】", - "【decoration】: 装饰 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "右上角和底部", - "desc": [ - "【otherAccountsPictures】: 右上组件 【List】", - "【onDetailsPressed】: 右下角点击事件 【Function()】", - "【arrowColor】: 右下角按钮颜色 【Color】", - "【margin】: 外边距 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/node1_base.dart deleted file mode 100644 index dc2eda1bd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/node1_base.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - -class CustomUAGHP extends StatelessWidget { - const CustomUAGHP({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width / 3 * 2, - child: UserAccountsDrawerHeader( - accountName: Container( - padding: const EdgeInsets.all(8.0), - child: const Text( - "张风捷特烈", - style: - TextStyle(color: Colors.orangeAccent, fontSize: 22, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ), - ]), - ), - ), - accountEmail: const Padding( - padding: EdgeInsets.all(8.0), - child: Text("1981462002@qq.com", - style: TextStyle(color: Colors.white, fontSize: 14, shadows: [ - Shadow( - color: Colors.orangeAccent, - offset: Offset(.5, .5), - blurRadius: 2), - ])), - ), - currentAccountPicture: Container( - padding: const EdgeInsets.all(15.0), - child: const CircleAvatar( - backgroundImage: AssetImage("assets/images/icon_head.webp"), - ), - ), - decoration: const BoxDecoration( - image: DecorationImage(image: AssetImage("assets/images/caver.webp")), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/node2_pro.dart b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/node2_pro.dart deleted file mode 100644 index 3c8e7d544..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/node2_pro.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class ProUAGHP extends StatelessWidget { - const ProUAGHP({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width / 3 * 2, - child: UserAccountsDrawerHeader( - margin: const EdgeInsets.all(10), - accountName: Container( - padding: const EdgeInsets.all(8.0), - child: const Text( - "张风捷特烈", - style: - TextStyle(color: Colors.orangeAccent, fontSize: 22, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ), - ]), - ), - ), - accountEmail: const Padding( - padding: EdgeInsets.all(8.0), - child: Text("1981462002@qq.com", - style: TextStyle(color: Colors.white, fontSize: 14, shadows: [ - Shadow( - color: Colors.orangeAccent, - offset: Offset(.5, .5), - blurRadius: 2, - ), - ])), - ), - currentAccountPicture: Container( - padding: const EdgeInsets.all(15.0), - child: const CircleAvatar( - backgroundImage: AssetImage("assets/images/icon_head.webp"), - ), - ), - otherAccountsPictures: const [ - FlutterLogo(textColor: Colors.green), - ], - onDetailsPressed: () { - - }, - arrowColor: Colors.white, - decoration: const BoxDecoration( - image: DecorationImage(image: AssetImage("assets/images/caver.webp")), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_de_DE.json deleted file mode 100644 index 746f6a94b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "Vertikale Trennlinie", - "info": "Vertikale Trennlinie, kann Farbe, Breite, Dicke und Abstände oben und unten angeben, wird häufig als Trennlinie für Listenelemente verwendet.", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "VerticalDivider Farbe und Dicke", - "desc": [ - "【color】: Farbe 【Color】", - "【thickness】: Linienstärke 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "VerticalDivider Breite und Abstand", - "desc": [ - "【indent】: Abstand vorne 【double】", - "【endIndent】: Abstand hinten 【double】", - "【width】: Platzhalterbreite 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_en_US.json deleted file mode 100644 index 77b486897..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "Vertical Divider", - "info": "Vertical divider, which can specify color, width, thickness, top and bottom margin information, commonly used as the divider between list items.", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "VerticalDivider Color and Thickness", - "desc": [ - "【color】: Color 【Color】", - "【thickness】: Line thickness 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "VerticalDivider Width and Indent", - "desc": [ - "【indent】: Front indent length 【double】", - "【endIndent】: Back indent length 【double】", - "【width】: Placeholder width 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_es_ES.json deleted file mode 100644 index d8fe84857..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "Divisor vertical", - "info": "Divisor vertical, se puede especificar el color, el ancho, el grosor, el margen superior e inferior, comúnmente utilizado como divisor de elementos en una lista.", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Color y grosor del VerticalDivider", - "desc": [ - "【color】: color 【Color】", - "【thickness】: grosor de la línea 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Ancho y espacio del VerticalDivider", - "desc": [ - "【indent】: longitud del espacio frontal 【double】", - "【endIndent】: longitud del espacio posterior 【double】", - "【width】: ancho de ocupación 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_fr_FR.json deleted file mode 100644 index 9ce751ace..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "Ligne de séparation verticale", - "info": "Ligne de séparation verticale, peut spécifier la couleur, la largeur, l'épaisseur, les marges supérieure et inférieure, couramment utilisée pour les lignes de séparation des éléments de liste.", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Couleur et épaisseur de VerticalDivider", - "desc": [ - "【color】: Couleur 【Color】", - "【thickness】: Épaisseur de la ligne 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Largeur et espacement de VerticalDivider", - "desc": [ - "【indent】: Longueur de l'espacement avant 【double】", - "【endIndent】: Longueur de l'espacement arrière 【double】", - "【width】: Largeur occupée 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_it_IT.json deleted file mode 100644 index af0d6378a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "Divisore Verticale", - "info": "Divisore verticale, può specificare colore, larghezza, spessore, margini superiore e inferiore, comunemente usato come divisore per gli elementi di una lista.", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Colore e Spessore del VerticalDivider", - "desc": [ - "【color】: Colore 【Color】", - "【thickness】: Spessore della linea 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Larghezza e Spaziature del VerticalDivider", - "desc": [ - "【indent】: Lunghezza dello spazio anteriore 【double】", - "【endIndent】: Lunghezza dello spazio posteriore 【double】", - "【width】: Larghezza occupata 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ja_JP.json deleted file mode 100644 index e1d4653e5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "垂直分割線", - "info": "垂直分割線、色、幅、太さ、上下の余白情報を指定でき、リストのアイテム分割線としてよく使われます。", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "VerticalDividerの色と太さ", - "desc": [ - "【color】: 色 【Color】", - "【thickness】: 線の太さ 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "VerticalDividerの幅と空白", - "desc": [ - "【indent】: 前の空白の長さ 【double】", - "【endIndent】: 後の空白の長さ 【double】", - "【width】: 占める幅 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ko_KR.json deleted file mode 100644 index ad155b5a7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "수직 구분선", - "info": "수직 구분선, 색상, 너비, 두께, 상하 여백 정보를 지정할 수 있으며, 주로 리스트의 항목 구분선으로 사용됩니다.", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "VerticalDivider 색상 및 두께", - "desc": [ - "【color】: 색상 【Color】", - "【thickness】: 선 두께 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "VerticalDivider 너비 및 여백", - "desc": [ - "【indent】: 앞쪽 여백 길이 【double】", - "【endIndent】: 뒤쪽 여백 길이 【double】", - "【width】: 차지하는 너비 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_pt_PT.json deleted file mode 100644 index dafc51e13..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "Divisor Vertical", - "info": "Divisor vertical, pode especificar cor, largura, espessura, margens superior e inferior, comumente usado como divisor de itens de lista.", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Cor e Espessura do VerticalDivider", - "desc": [ - "【color】: cor 【Color】", - "【thickness】: espessura da linha 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Largura e Espaço do VerticalDivider", - "desc": [ - "【indent】: comprimento do espaço frontal 【double】", - "【endIndent】: comprimento do espaço traseiro 【double】", - "【width】: largura ocupada 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ru_RU.json deleted file mode 100644 index 39c05222d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "Вертикальный разделитель", - "info": "Вертикальный разделитель, можно указать цвет, ширину, толщину, отступы сверху и снизу, часто используется для разделения элементов списка.", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Цвет и толщина VerticalDivider", - "desc": [ - "【color】: цвет 【Color】", - "【thickness】: толщина линии 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Ширина и отступы VerticalDivider", - "desc": [ - "【indent】: длина отступа спереди 【double】", - "【endIndent】: длина отступа сзади 【double】", - "【width】: ширина занимаемого места 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_zh-CN.json deleted file mode 100644 index 7fad0ce50..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "竖直分割线", - "info": "竖直分割线,可指定颜色、宽度、粗细、上下边距信息,常用与列表的item分割线。", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "VerticalDivider颜色和粗细", - "desc": [ - "【color】: 颜色 【Color】", - "【thickness】: 线粗细 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "VerticalDivider宽度和空缺", - "desc": [ - "【indent】: 前面空缺长度 【double】", - "【endIndent】: 后面空缺长度 【double】", - "【width】: 占位宽 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/node1_base.dart deleted file mode 100644 index 36473ef20..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/node1_base.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class CustomVerticalDivider extends StatelessWidget { - const CustomVerticalDivider({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - List dataColor = [ - Colors.red, Colors.yellow, - Colors.blue, Colors.green]; - List dataThickness = [1.0, 2.0, 4.0, 6.0]; - Map data = Map.fromIterables(dataColor, dataThickness); - return SizedBox( - height: 150, - child: Row( - mainAxisSize: MainAxisSize.min, - children: dataColor - .map((e) => VerticalDivider( - color: e, - thickness: data[e], - )).toList(), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/node2_height.dart b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/node2_height.dart deleted file mode 100644 index 86610bcca..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/node2_height.dart +++ /dev/null @@ -1,34 +0,0 @@ - - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class WidthVerticalDivider extends StatelessWidget { - const WidthVerticalDivider({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - List dataColor = [ - Colors.red, Colors.yellow, - Colors.blue, Colors.green]; - List dataThickness = [10.0, 20.0, 30.0, 40.0]; - Map data = Map.fromIterables(dataColor, dataThickness); - return SizedBox( - height: 150, - child: Row( - mainAxisSize: MainAxisSize.min, - children: dataColor - .map((e) => VerticalDivider( - color: e, - indent:data[e], - endIndent: data[e]!*2, - width: data[e], - thickness: data[e]!/10, - )) - .toList(), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_de_DE.json deleted file mode 100644 index d4836b21c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "Sichtbarkeitskomponente", - "info": "Steuert die Anzeige oder Ausblendung einer Komponente und ermöglicht die Festlegung eines Platzhalterkomponente nach dem Ausblenden. Eine ähnliche Funktion bietet die OffStage-Komponente.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Steuert die Sichtbarkeit der internen Unterkomponenten basierend auf visible", - "desc": [ - "【visible】 : Gibt an, ob angezeigt wird 【bool】", - "【child】: Kind 【Widget】", - "Standardmäßig geht der ursprüngliche Bereich verloren, wenn das Kind ausgeblendet wird." - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement kann beim Ausblenden als Platzhalter verwendet werden", - "desc": [ - "【replacement】 : Platzhalterkomponente beim Ausblenden 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_en_US.json deleted file mode 100644 index 857330ac6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "Visibility Component", - "info": "Controls the display or hiding of a component, and can set a placeholder component when hidden. A similar function is provided by the OffStage component.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Control the visibility of internal child components based on visible", - "desc": [ - "【visible】: Whether to display 【bool】", - "【child】: Child 【Widget】", - "By default, the child will lose its original area when hidden." - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement can be used as a placeholder when hidden", - "desc": [ - "【replacement】: Placeholder component when hidden 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_es_ES.json deleted file mode 100644 index ace7d1b88..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "Componente de Visibilidad", - "info": "Controla si un componente se muestra o se oculta, y permite configurar un componente de marcador de posición cuando está oculto. Un componente similar en funcionalidad es el componente OffStage.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Controla la visibilidad de los componentes hijos internos según visible", - "desc": [ - "【visible】 : Si se muestra o no 【bool】", - "【child】: Hijo 【Widget】", - "Por defecto, cuando el hijo está oculto, pierde el área original donde estaba." - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement puede ocupar el lugar cuando está oculto", - "desc": [ - "【replacement】 : Componente de marcador de posición cuando está oculto 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_fr_FR.json deleted file mode 100644 index c6f8bc0c4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "Composant de visibilité", - "info": "Contrôle l'affichage ou la dissimulation d'un composant, peut définir un composant de remplacement lorsqu'il est caché. Le composant OffStage a une fonction similaire.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Contrôle l'affichage ou la dissimulation des composants enfants en fonction de visible", - "desc": [ - "【visible】 : Afficher ou non 【bool】", - "【child】: Enfant 【Widget】", - "Par défaut, l'enfant perd sa zone d'origine lorsqu'il est caché." - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement peut être utilisé comme espace réservé lors de la dissimulation", - "desc": [ - "【replacement】 : Composant de remplacement lors de la dissimulation 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_it_IT.json deleted file mode 100644 index 5e05510aa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "Componente di Visibilità", - "info": "Controlla la visualizzazione o l'occultamento di un componente, con la possibilità di impostare un componente segnaposto quando è nascosto. Una funzionalità simile è offerta dal componente OffStage.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Controlla la visibilità dei componenti figli interni in base a visible", - "desc": [ - "【visible】: Se visualizzare o meno 【bool】", - "【child】: Figlio 【Widget】", - "Per impostazione predefinita, quando il figlio è nascosto, perde l'area originale in cui si trovava." - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement può essere utilizzato come segnaposto quando è nascosto", - "desc": [ - "【replacement】: Componente segnaposto quando è nascosto 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ja_JP.json deleted file mode 100644 index 9a43e083c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "表示/非表示コンポーネント", - "info": "コンポーネントの表示または非表示を制御し、非表示時のプレースホルダーコンポーネントを設定できます。類似の機能を持つコンポーネントとしてOffStageコンポーネントがあります。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "visibleに基づいて内部の子コンポーネントの表示/非表示を制御", - "desc": [ - "【visible】 : 表示するかどうか 【bool】", - "【child】: 子コンポーネント 【Widget】", - "デフォルトでは、子コンポーネントが非表示になると元の領域を失います。" - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacementを使用して非表示時のプレースホルダーを設定", - "desc": [ - "【replacement】 : 非表示時のプレースホルダーコンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ko_KR.json deleted file mode 100644 index 4cac94c9a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "표시/숨김 컴포넌트", - "info": "컴포넌트의 표시 또는 숨김을 제어하며, 숨김 후의 자리 표시 컴포넌트를 설정할 수 있습니다. 이와 유사한 기능을 가진 OffStage 컴포넌트가 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "visible에 따라 내부 자식 컴포넌트의 표시/숨김 상태를 제어", - "desc": [ - "【visible】 : 표시 여부 【bool】", - "【child】: 자식 【Widget】", - "기본적으로 자식이 숨겨지면 원래 영역을 잃습니다." - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement는 숨김 시 자리 표시를 할 수 있습니다", - "desc": [ - "【replacement】 : 숨김 시의 자리 표시 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_pt_PT.json deleted file mode 100644 index 18e4cbaf0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "Componente de Visibilidade", - "info": "Controla a exibição ou ocultação de um componente, podendo definir um componente de espaço reservado após a ocultação. Um componente com funcionalidade semelhante é o OffStage.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Controla a visibilidade dos componentes internos com base no visível", - "desc": [ - "【visible】 : Se deve ser exibido 【bool】", - "【child】: Filho 【Widget】", - "Por padrão, o filho perde a área original quando oculto." - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement pode ser usado como espaço reservado ao ocultar", - "desc": [ - "【replacement】 : Componente de espaço reservado ao ocultar 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ru_RU.json deleted file mode 100644 index 52e8b516e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "Компонент видимости", - "info": "Управляет отображением или скрытием компонента, можно установить компонент-заполнитель при скрытии. Похожую функциональность имеет компонент OffStage.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Управление видимостью внутренних дочерних компонентов с помощью visible", - "desc": [ - "【visible】 : Отображать ли 【bool】", - "【child】: Дочерний элемент 【Widget】", - "По умолчанию при скрытии дочернего элемента он теряет свою исходную область." - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement может использоваться для заполнения при скрытии", - "desc": [ - "【replacement】 : Компонент-заполнитель при скрытии 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_zh-CN.json deleted file mode 100644 index 48f0b2d69..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "显隐组件", - "info": "控制一个组件显示或隐藏,可设置隐藏后的占位组件。与其功能相似的由OffStage组件。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "根据visible控制内部子组件的显隐情况", - "desc": [ - "【visible】 : 是否显示 【bool】", - "【child】: 孩子 【Widget】", - "默认孩子隐藏时会失去原来所在区域。" - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement可在隐藏时进行占位", - "desc": [ - "【replacement】 : 隐藏时的占位组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/node1_base.dart deleted file mode 100644 index e6c1de433..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/node1_base.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class CustomVisibility extends StatelessWidget { - const CustomVisibility({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: [ - _buildVisibility(true), - _buildVisibility(false), - ], - ); - } - - Widget _buildVisibility(bool visible) { - Widget box = Container( - height: 30, - width: 30, - color: Colors.blue, - ); - return Container( - width: 150, - height: 150 * 0.618, - color: Colors.cyanAccent.withAlpha(33), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - box, - Visibility( - visible: visible, - child: Container( - alignment: Alignment.center, - height: 80 * 0.618, - width: 80, - color: Colors.red, - child: const Text( - "visible\ntrue", - style: TextStyle(fontSize: 20), - ), - )), - box, - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/node2_replacement.dart b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/node2_replacement.dart deleted file mode 100644 index 9c96f49d6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/node2_replacement.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class ReplacementVisibility extends StatelessWidget { - const ReplacementVisibility({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: [ - _buildVisibility(true), - _buildVisibility(false), - ], - ); - } - - Widget _buildVisibility(bool visible) { - Widget box = Container( - height: 30, - width: 30, - color: Colors.blue, - ); - return Container( - width: 150, - height: 150 * 0.618, - color: Colors.cyanAccent.withAlpha(33), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - box, - Visibility( - visible: visible, - replacement: Container( - alignment: Alignment.center, - height: 80 * 0.618, - width: 80, - ), - child: Container( - alignment: Alignment.center, - height: 80 * 0.618, - width: 80, - color: Colors.red, - child: const Text( - "visible\ntrue", - style: TextStyle(fontSize: 20), - ), - )), - box, - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/exp/MultiChildRenderObjectWidget.dart b/modules/widget_system/widgets/lib/exp/MultiChildRenderObjectWidget.dart deleted file mode 100644 index 692ab3958..000000000 --- a/modules/widget_system/widgets/lib/exp/MultiChildRenderObjectWidget.dart +++ /dev/null @@ -1,28 +0,0 @@ -library render_object_widget; - - -export '../MultiChildRenderObjectWidget/Flex/node_01.dart'; -export '../MultiChildRenderObjectWidget/Flex/node_02.dart'; -export '../MultiChildRenderObjectWidget/Flex/node_03.dart'; -export '../MultiChildRenderObjectWidget/Flex/node_04.dart'; -export '../MultiChildRenderObjectWidget/Flex/node_05.dart'; - -export '../MultiChildRenderObjectWidget/Flow/node_01.dart'; -export '../MultiChildRenderObjectWidget/Flow/node_02.dart'; -export '../MultiChildRenderObjectWidget/RichText/node1_base.dart'; -export '../MultiChildRenderObjectWidget/RichText/node2_widget.dart'; -export '../MultiChildRenderObjectWidget/Stack/node1_base.dart'; -export '../MultiChildRenderObjectWidget/Stack/node2_positioned.dart'; -export '../MultiChildRenderObjectWidget/Wrap/node1_base.dart'; -export '../MultiChildRenderObjectWidget/Wrap/node2_alignment.dart'; -export '../MultiChildRenderObjectWidget/Wrap/node3_crossAxisAlignment.dart'; -export '../MultiChildRenderObjectWidget/Wrap/node4_textDirection.dart'; -export '../MultiChildRenderObjectWidget/Wrap/node5_verticalDirection.dart'; -export '../MultiChildRenderObjectWidget/Column/node_01.dart'; -export '../MultiChildRenderObjectWidget/IndexedStack/node1_base.dart'; -export '../MultiChildRenderObjectWidget/Row/node1_base.dart'; -export '../MultiChildRenderObjectWidget/CustomMultiChildLayout/node_01.dart'; -export '../MultiChildRenderObjectWidget/Viewport/node1_base.dart'; -export '../MultiChildRenderObjectWidget/ListBody/node1_base.dart'; -export '../MultiChildRenderObjectWidget/ShrinkWrappingViewport/node1_base.dart'; -export '../MultiChildRenderObjectWidget/NestedScrollViewViewport/node1_base.dart'; diff --git a/modules/widget_system/widgets/lib/exp/Other.dart b/modules/widget_system/widgets/lib/exp/Other.dart deleted file mode 100644 index 8309e77f3..000000000 --- a/modules/widget_system/widgets/lib/exp/Other.dart +++ /dev/null @@ -1,16 +0,0 @@ -/// create by 张风捷特烈 on 2020/4/28 -/// contact me by email 1981462002@qq.com -/// 说明: - -library other_unit.dart; - - -export '../Other/ErrorWidget/node1_base.dart'; -export '../Other/Table/node1_base.dart'; -export '../Other/RawImage/node1_base.dart'; -export '../Other/PerformanceOverlay/node1_base.dart'; -export '../Other/RenderObjectToWidgetAdapter/node1_base.dart'; -export '../Other/ListWheelViewport/node1_base.dart'; -export '../Other/ListWheelViewport/node2_perspective.dart'; -export '../Other/ListWheelViewport/node3_magnifier.dart'; -export '../Other/ListWheelViewport/node4_opacity.dart'; \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/exp/ProxyWidget.dart b/modules/widget_system/widgets/lib/exp/ProxyWidget.dart deleted file mode 100644 index 2b2e5cdda..000000000 --- a/modules/widget_system/widgets/lib/exp/ProxyWidget.dart +++ /dev/null @@ -1,38 +0,0 @@ -/// create by 张风捷特烈 on 2020/4/28 -/// contact me by email 1981462002@qq.com -/// 说明: - -library proxy_widget_unit.dart; - - -export '../ProxyWidget/DropdownButtonHideUnderline/node1_base.dart'; -export '../ProxyWidget/Flexible/node1_base.dart'; -export '../ProxyWidget/MediaQuery/node1_base.dart'; -export '../ProxyWidget/ButtonTheme/node1_base.dart'; -export '../ProxyWidget/DefaultTextStyle/node1_base.dart'; -export '../ProxyWidget/SliderTheme/node1_base.dart'; -export '../ProxyWidget/SliderTheme/node2_diy.dart'; -export '../ProxyWidget/DividerTheme/node1_base.dart'; -export '../ProxyWidget/IconTheme/node1_base.dart'; -export '../ProxyWidget/ScrollConfiguration/node1_base.dart'; -export '../ProxyWidget/Expanded/node1_base.dart'; -export '../ProxyWidget/Positioned/node1_base.dart'; -export '../ProxyWidget/LayoutId/node1_base.dart'; -export '../ProxyWidget/ChipTheme/node1_base.dart' hide CustomFilterChip; -export '../ProxyWidget/ListTileTheme/node1_base.dart'; -export '../ProxyWidget/MaterialBannerTheme/node1_base.dart'; -export '../ProxyWidget/PopupMenuTheme/node1_base.dart'; -export '../ProxyWidget/ToggleButtonsTheme/node1_base.dart'; -export '../ProxyWidget/ButtonBarTheme/node1_base.dart'; -export '../ProxyWidget/TooltipTheme/node1_base.dart'; -export '../ProxyWidget/Directionality/node1_base.dart'; -export '../ProxyWidget/TableCell/node1_base.dart'; -export '../ProxyWidget/KeepAlive/node1_base.dart'; -export '../ProxyWidget/CupertinoUserInterfaceLevel/node1_base.dart'; -export '../ProxyWidget/InheritedTheme/node1_base.dart'; -export '../ProxyWidget/DefaultAssetBundle/node1_base.dart'; -export '../ProxyWidget/InheritedWidget/node1_base.dart'; -export '../ProxyWidget/InheritedWidget/node2_use.dart'; -export '../ProxyWidget/ParentDataWidget/node1_base.dart'; -export '../ProxyWidget/InheritedModel/node1.dart'; -export '../ProxyWidget/PrimaryScrollController/node1_base.dart'; diff --git a/modules/widget_system/widgets/lib/exp/SingleChildRenderObjectWidget.dart b/modules/widget_system/widgets/lib/exp/SingleChildRenderObjectWidget.dart deleted file mode 100644 index 6b519dcb5..000000000 --- a/modules/widget_system/widgets/lib/exp/SingleChildRenderObjectWidget.dart +++ /dev/null @@ -1,76 +0,0 @@ -library render_object_widget; - -export '../SingleChildRenderObjectWidget/Align/node1_base.dart'; -export '../SingleChildRenderObjectWidget/Align/node2_other.dart'; -export '../SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart'; -export '../SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart'; -export '../SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart'; -export '../SingleChildRenderObjectWidget/RepaintBoundary/node2_save.dart'; -export '../SingleChildRenderObjectWidget/CompositedTransformTarget/node1_base.dart'; -export '../SingleChildRenderObjectWidget/CompositedTransformFollower/node1_base.dart'; - -export '../SingleChildRenderObjectWidget/AnnotatedRegion/node1_base.dart'; -export '../SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/node1_base.dart'; -export '../SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/node1_base.dart'; -export '../SingleChildRenderObjectWidget/ColoredBox/node1_base.dart'; - -export '../SingleChildRenderObjectWidget/ConstrainedBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/PhysicalModel/node1_base.dart'; -export '../SingleChildRenderObjectWidget/FractionalTranslation/node1_base.dart'; -export '../SingleChildRenderObjectWidget/ColorFiltered/node1_base.dart'; -export '../SingleChildRenderObjectWidget/Baseline/node1_base.dart'; -export '../SingleChildRenderObjectWidget/DecoratedBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/DecoratedBox/node2_image.dart'; -export '../SingleChildRenderObjectWidget/DecoratedBox/node3_border.dart'; -export '../SingleChildRenderObjectWidget/DecoratedBox/node4_shape.dart'; -export '../SingleChildRenderObjectWidget/DecoratedBox/node5_line.dart'; -export '../SingleChildRenderObjectWidget/DecoratedBox/node6_flutterLogo.dart'; -export '../SingleChildRenderObjectWidget/FadeTransition/node1_base.dart'; -export '../SingleChildRenderObjectWidget/FittedBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/FractionallySizedBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/LimitedBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/OffStage/node1_base.dart'; -export '../SingleChildRenderObjectWidget/Opacity/node1_base.dart'; -export '../SingleChildRenderObjectWidget/Padding/node1_all.dart'; -export '../SingleChildRenderObjectWidget/Padding/node2_only.dart'; -export '../SingleChildRenderObjectWidget/Padding/node3_symmetric.dart'; -export '../SingleChildRenderObjectWidget/RotatedBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/SizedBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/SizedOverflowBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/Transform/node1_skew.dart'; -export '../SingleChildRenderObjectWidget/Transform/node2_translation.dart'; -export '../SingleChildRenderObjectWidget/Transform/node3_scale.dart'; -export '../SingleChildRenderObjectWidget/Transform/node4_rotate.dart'; -export '../SingleChildRenderObjectWidget/Transform/node5_perspective.dart'; -export '../SingleChildRenderObjectWidget/UnConstrainedBox/node1_base.dart'; -export '../StatefulWidget/PositionedTransition/node1_base.dart'; -export '../StatefulWidget/RotationTransition/node1_base.dart'; -export '../StatefulWidget/ScaleTransition/node1_base.dart'; -export '../StatefulWidget/SizeTransition/node1_base.dart'; -export '../SingleChildRenderObjectWidget/ClipOval/node1_base.dart'; -export '../SingleChildRenderObjectWidget/ClipPath/node1_base.dart'; -export '../SingleChildRenderObjectWidget/ClipRRect/node1_base.dart'; -export '../SingleChildRenderObjectWidget/ClipRect/node1_base.dart'; -export '../SingleChildRenderObjectWidget/OverflowBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/AspectRatio/node1_base.dart'; -export '../SingleChildRenderObjectWidget/AnimatedSize/node1_base.dart'; -export '../SingleChildRenderObjectWidget/Center/node1_base.dart'; -export '../SingleChildRenderObjectWidget/CustomPaint/node2_bezier.dart'; -export '../SingleChildRenderObjectWidget/CustomPaint/node1_clock.dart'; -export '../SingleChildRenderObjectWidget/AbsorbPointer/node1_base.dart'; -export '../SingleChildRenderObjectWidget/BackdropFilter/node1_base.dart'; -export '../SingleChildRenderObjectWidget/IgnorePointer/node1_base.dart'; -export '../SingleChildRenderObjectWidget/LayoutBuilder/node1_base.dart'; -export '../SingleChildRenderObjectWidget/LayoutBuilder/node2_fit.dart'; -export '../SingleChildRenderObjectWidget/LayoutBuilder/node3_expend.dart'; -export '../SingleChildRenderObjectWidget/ShaderMask/node1_radial.dart'; -export '../SingleChildRenderObjectWidget/ShaderMask/node2_linear.dart'; -export '../SingleChildRenderObjectWidget/IntrinsicHeight/node1_base.dart'; -export '../SingleChildRenderObjectWidget/IntrinsicWidth/node1_base.dart'; -export '../SingleChildRenderObjectWidget/PhysicalShape/node1_base.dart'; -export '../SingleChildRenderObjectWidget/ImageFiltered/node1_blur.dart'; -export '../SingleChildRenderObjectWidget/ImageFiltered/node2_color.dart'; -export '../SingleChildRenderObjectWidget/ImageFiltered/node3_matrix.dart'; -export '../SingleChildRenderObjectWidget/TapRegion/node1.dart'; -export '../SingleChildRenderObjectWidget/TextFieldTapRegion/node1.dart'; -export '../SingleChildRenderObjectWidget/CallbackShortcuts/node1.dart'; diff --git a/modules/widget_system/widgets/lib/exp/Sliver.dart b/modules/widget_system/widgets/lib/exp/Sliver.dart deleted file mode 100644 index b7cbed9ff..000000000 --- a/modules/widget_system/widgets/lib/exp/Sliver.dart +++ /dev/null @@ -1,37 +0,0 @@ -/// create by 张风捷特烈 on 2020/4/28 -/// contact me by email 1981462002@qq.com -/// 说明: - -library sliver_unit.dart; - -export '../Sliver/CustomScrollView/node1_base.dart'; -export '../Sliver/FlexibleSpaceBar/node1_base.dart'; -export '../Sliver/SliverAppBar/node1_base.dart'; -export '../Sliver/SliverFillViewport/node1_base.dart'; -export '../Sliver/SliverFixedExtentList/node1_base.dart'; -export '../Sliver/SliverGrid/node1_base.dart'; -export '../Sliver/SliverList/node1_base.dart'; -export '../Sliver/SliverOpacity/node1_base.dart'; -export '../Sliver/SliverPadding/node1_base.dart'; -export '../Sliver/SliverPersistentHeader/node1_base.dart'; -export '../Sliver/SliverToBoxAdapter/node1_base.dart'; -export '../Sliver/SliverOverlapAbsorber/node1_base.dart'; -export '../Sliver/SliverOverlapInjector/node1_base.dart'; -export '../Sliver/SliverPrototypeExtentList/node1_base.dart'; -export '../Sliver/CupertinoSliverNavigationBar/node1_base.dart'; -export '../Sliver/CupertinoSliverRefreshControl/node1_base.dart'; -export '../Sliver/SliverFillRemaining/node1_base.dart'; -export '../Sliver/SliverIgnorePointer/node1_base.dart'; -export '../Sliver/SliverAnimatedList/node1_base.dart'; -export '../Sliver/SliverLayoutBuilder/node1_base.dart'; -export '../Sliver/SliverWithKeepAliveWidget/node1_base.dart'; -export '../Sliver/DecoratedSliver/node1.dart'; -export '../Sliver/SliverConstrainedCrossAxis/node1.dart'; -export '../Sliver/SliverCrossAxisExpanded/node1.dart'; -export '../Sliver/SliverCrossAxisGroup/node1.dart'; -export '../Sliver/SliverMainAxisGroup/node1.dart'; -export '../Sliver/PinnedHeaderSliver/node_01.dart'; -export '../Sliver/PinnedHeaderSliver/node_02.dart'; -export '../Sliver/PinnedHeaderSliver/node_03.dart'; -// export '../Sliver/SliverResizingHeader/node_01.dart'; -// export '../Sliver/SliverResizingHeader/node_02.dart'; diff --git a/modules/widget_system/widgets/lib/exp/StatefulWidget.dart b/modules/widget_system/widgets/lib/exp/StatefulWidget.dart deleted file mode 100644 index f90b2fa0c..000000000 --- a/modules/widget_system/widgets/lib/exp/StatefulWidget.dart +++ /dev/null @@ -1,204 +0,0 @@ -library stateful_unit; - -export '../StatefulWidget/CupertinoButton/node1_base.dart'; -export '../StatefulWidget/CupertinoContextMenu/node1_base.dart'; -export '../StatefulWidget/CupertinoContextMenuAction/node1_base.dart'; -export '../StatefulWidget/DateRangePickerDialog/node1_base.dart'; -export '../StatefulWidget/DateRangePickerDialog/node2_diy.dart'; - -export '../StatefulWidget/CupertinoDatePicker/node1_base.dart'; -export '../StatefulWidget/CupertinoPicker/node1_base.dart'; -export '../StatefulWidget/CupertinoTimerPicker/node1_base.dart'; -export '../StatefulWidget/SlideTransition/node1_base.dart'; -export '../StatefulWidget/MonthPicker/node1_base.dart'; -export '../StatefulWidget/YearPicker/node1_base.dart'; -export '../StatefulWidget/WillPopScope/node1_base.dart'; -export '../StatefulWidget/NestedScrollView/node1_base.dart'; -export '../StatefulWidget/AppBar/node1_base.dart'; -export '../StatefulWidget/AppBar/node2_tab.dart'; -export '../StatefulWidget/BottomAppBar/node1_base.dart'; -export '../StatefulWidget/BottomNavigationBar/node1_base.dart'; -export '../StatefulWidget/BottomNavigationBar/node2_page.dart'; -export '../StatefulWidget/Checkbox/node1_base.dart'; -export '../StatefulWidget/Checkbox/node2_tristate.dart'; -export '../StatefulWidget/ExpandIcon/node1_base.dart'; -export '../StatefulWidget/ExpansionTile/node1_base.dart'; -export '../StatefulWidget/Radio/node1_base.dart'; -export '../StatefulWidget/Tooltip/node1_base.dart'; -export '../StatefulWidget/Tooltip/node2_decoration.dart'; -export '../StatefulWidget/CircularProgressIndicator/node1_base.dart'; -export '../StatefulWidget/CupertinoActivityIndicator/node1_base.dart'; -export '../StatefulWidget/CupertinoSlider/node1_base.dart'; -export '../StatefulWidget/CupertinoSwitch/node1_base.dart'; -export '../StatefulWidget/CupertinoSegmentedControl/node1_base.dart'; -export '../StatefulWidget/CupertinoSegmentedControl/node2_color.dart'; -export '../StatefulWidget/Navigator/node1_base.dart'; -export '../StatefulWidget/InteractiveViewer/node1_base.dart'; -export '../StatefulWidget/InteractiveViewer/node2_constrained.dart'; -export '../StatefulWidget/InteractiveViewer/node3_controller.dart'; -export '../StatefulWidget/CarouselView/node1_base.dart'; -export '../StatefulWidget/CarouselView/node2.dart'; - -export '../StatefulWidget/Image/node1_base.dart'; -export '../StatefulWidget/Image/node2_fit.dart'; -export '../StatefulWidget/Image/node3_alignment.dart'; -export '../StatefulWidget/Image/node4_colorBlendMode.dart'; -export '../StatefulWidget/Image/node5_repeat.dart'; -export '../StatefulWidget/Image/node6_centerSlice.dart'; - -export '../StatefulWidget/RangeSlider/node1_base.dart'; -export '../StatefulWidget/Slider/node1_base.dart'; -export '../StatefulWidget/Slider/node2_lable.dart'; -export '../StatefulWidget/Switch/node1_base.dart'; -export '../StatefulWidget/Switch/node2_image.dart'; -export '../StatefulWidget/StatefulBuilder/node1_base.dart'; -export '../StatefulWidget/RefreshIndicator/node1_base.dart'; -export '../StatefulWidget/SelectableText/node1_base.dart'; -export '../StatefulWidget/SelectableText/node2_align.dart'; -export '../StatefulWidget/CupertinoNavigationBar/node1_base.dart'; -export '../StatefulWidget/CupertinoTabBar/node1_base.dart'; -export '../StatefulWidget/CupertinoTextField/node1_base.dart'; -export '../StatefulWidget/CupertinoTextField/node2_style.dart'; -export '../StatefulWidget/ValueListenableBuilder/node1_base.dart'; -export '../StatefulWidget/MouseRegion/node1_base.dart'; -export '../StatefulWidget/Scrollable/node1_base.dart'; - -export '../StatefulWidget/DropdownButton/node1_base.dart'; -export '../StatefulWidget/DropdownButton/node2_style.dart'; - -export '../StatefulWidget/AnimatedCrossFade/node1_base.dart'; -export '../StatefulWidget/AnimatedCrossFade/node2_curve.dart'; - -export '../StatefulWidget/AnimatedList/node1_base.dart'; -export '../StatefulWidget/AnimatedSwitcher/node1_base.dart'; -export '../StatefulWidget/AlignTransition/node1_base.dart'; -export '../StatefulWidget/DecoratedBoxTransition/node1_base.dart'; -export '../StatefulWidget/DefaultTextStyleTransition/node1_base.dart'; -export '../StatefulWidget/RelativePositionedTransition/node1_base.dart'; -export '../StatefulWidget/CupertinoScrollbar/node1_base.dart'; -export '../StatefulWidget/RawGestureDetector/node1_base.dart'; - -export '../StatefulWidget/Dismissible/node1_base.dart'; -export '../StatefulWidget/AutomaticKeepAlive/node1_base.dart'; -export '../StatefulWidget/AnimatedModalBarrier/node1_base.dart'; -export '../StatefulWidget/FormField/node1_base.dart'; -export '../StatefulWidget/AnimatedBuilder/node1_base.dart'; -export '../StatefulWidget/TweenAnimationBuilder/node1_base.dart'; -export '../StatefulWidget/PaginatedDataTable/node1_base.dart'; -export '../StatefulWidget/RawKeyboardListener/node1_base.dart'; -export '../StatefulWidget/Dismissible/node2_direction.dart'; - -export '../StatefulWidget/DragTarget/node1_base.dart'; -export '../StatefulWidget/Draggable/node1_base.dart'; -export '../StatefulWidget/Draggable/node2_data.dart'; -export '../StatefulWidget/Draggable/node3_use.dart'; - -export '../StatefulWidget/Form/node1_base.dart'; -export '../StatefulWidget/StatusTransitionWidget/node1_base.dart'; -export '../StatefulWidget/UniqueWidget/node1_base.dart'; -export '../StatefulWidget/FutureBuilder/node1_base.dart'; -export '../StatefulWidget/Hero/node1_base.dart'; -export '../StatefulWidget/AnimatedAlign/node1_base.dart'; -export '../StatefulWidget/AnimatedScale/node1.dart'; -export '../StatefulWidget/AnimatedSlide/node1.dart'; -export '../StatefulWidget/AnimatedRotation/node1.dart'; -export '../StatefulWidget/AnimatedFractionallySizedBox/node1.dart'; -export '../StatefulWidget/AnimatedContainer/node1_base.dart'; -export '../StatefulWidget/AnimatedDefaultTextStyle/node1_base.dart'; -export '../StatefulWidget/AnimatedOpacity/node1_base.dart'; -export '../StatefulWidget/AnimatedPadding/node1_base.dart'; -export '../StatefulWidget/AnimatedPositioned/node1_base.dart'; -export '../StatefulWidget/AnimatedPositionedDirectional/node1_base.dart'; - -export '../StatefulWidget/ExpansionPanelList/node1_base.dart'; -export '../StatefulWidget/DropdownButtonFormField/node1_base.dart'; - -export '../StatefulWidget/Ink/node1_base.dart'; -export '../StatefulWidget/Ink/node2_image.dart'; - -export '../StatefulWidget/InkResponse/node1_base.dart'; - -export '../StatefulWidget/InkResponse/node2_color.dart'; -export '../StatefulWidget/DropdownMenu/node1.dart'; -export '../StatefulWidget/DropdownMenu/node2.dart'; -export '../StatefulWidget/DropdownMenu/node3.dart'; -export '../StatefulWidget/InkWell/node1_base.dart'; -export '../StatefulWidget/InkWell/node2_color.dart'; - -export '../StatefulWidget/LicensePage/node1_base.dart'; -export '../StatefulWidget/ListWheelScrollView/node1_base.dart'; -export '../StatefulWidget/LongPressDraggable/node1_base.dart'; -export '../StatefulWidget/Material/node1_base.dart'; -export '../StatefulWidget/Material/node2_shape.dart'; -export '../StatefulWidget/Overlay/node1_base.dart'; -export '../StatefulWidget/PageView/node1_base.dart'; -export '../StatefulWidget/PageView/node2_direction.dart'; -export '../StatefulWidget/PageView/node3_controller.dart'; -export '../StatefulWidget/PopupMenuButton/node1_base.dart'; -export '../StatefulWidget/PopupMenuDivider/node1_base.dart'; -export '../StatefulWidget/RawChip/node1_press.dart'; -export '../StatefulWidget/RawChip/node2_select.dart'; - -export '../StatefulWidget/RawMaterialButton/node1_base.dart'; -export '../StatefulWidget/RawMaterialButton/node2_shape.dart'; -export '../StatefulWidget/ReorderableListView/node1_base.dart'; -export '../StatefulWidget/ReorderableListView/node2_direction.dart'; -export '../StatefulWidget/Scrollbar/node1_base.dart'; -export '../StatefulWidget/Stepper/node1_base.dart'; -export '../StatefulWidget/Stepper/node2_type.dart'; -export '../StatefulWidget/StreamBuilder/node1_base.dart'; -export '../StatefulWidget/TableRowInkWell/node1_base.dart'; -export '../StatefulWidget/TextField/node1_base.dart'; -export '../StatefulWidget/TextField/node2_cursor.dart'; -export '../StatefulWidget/TextField/node3_decoration.dart'; - -export '../StatefulWidget/TextFormField/node1_base.dart'; -export '../StatefulWidget/LinearProgressIndicator/node1_base.dart'; -export '../StatefulWidget/CupertinoApp/node1_base.dart'; -export '../StatefulWidget/CupertinoPageScaffold/node1_base.dart'; -export '../StatefulWidget/CupertinoTabScaffold/node1_base.dart'; -export '../StatefulWidget/MaterialApp/node1_base.dart'; -export '../StatefulWidget/Scaffold/node1_base.dart'; -export '../StatefulWidget/TabBarView/node1_base.dart'; -export '../StatefulWidget/InputDecorator/node1_base.dart'; -export '../StatefulWidget/EditableText/node1_base.dart'; -export '../StatefulWidget/CupertinoSlidingSegmentedControl/node1_base.dart'; -export '../StatefulWidget/WidgetsApp/node1_base.dart' hide HomePage; -export '../StatefulWidget/WidgetInspector/node1_base.dart' hide HomePage; -export '../StatefulWidget/AnimatedTheme/node1_base.dart'; -export '../StatefulWidget/AnimatedPhysicalModel/node1_base.dart'; -export '../StatefulWidget/DefaultTabController/node1_base.dart'; -export '../StatefulWidget/GlowingOverscrollIndicator/node1_base.dart'; -export '../StatefulWidget/DraggableScrollableSheet/node1_base.dart'; -export '../StatefulWidget/DrawerController/node1_base.dart'; -export '../StatefulWidget/MergeableMaterial/node1_base.dart'; -export '../StatefulWidget/CupertinoTabView/node1_base.dart'; - -export '../StatefulWidget/TextButton/node1_base.dart'; -export '../StatefulWidget/TextButton/node2_style.dart'; -export '../StatefulWidget/FilledButton/node1.dart'; -export '../StatefulWidget/FilledButton/node2.dart'; -export '../StatefulWidget/Localizations/node1.dart'; - -export '../StatefulWidget/ElevatedButton/node1_base.dart'; -export '../StatefulWidget/ElevatedButton/node2_style.dart'; - -export '../StatefulWidget/OutlinedButton//node1_base.dart'; -export '../StatefulWidget/OutlinedButton/node2_style.dart'; - -export '../StatefulWidget/NavigationRail/node1_base.dart'; -export '../StatefulWidget/NavigationRail/node2_extend.dart'; -export '../StatefulWidget/NavigationRail/node3_dark.dart'; -export '../StatefulWidget/CupertinoCheckbox/node1.dart'; -export '../StatefulWidget/CupertinoCheckbox/node2.dart'; -export '../StatefulWidget/CupertinoCheckbox/node3.dart'; - -export '../StatefulWidget/CupertinoRadio/node1.dart'; -export '../StatefulWidget/CupertinoRadio/node2.dart'; -export '../StatefulWidget/CupertinoRadio/node3.dart'; -export '../StatefulWidget/UndoHistory/node1.dart'; -export '../StatefulWidget/TickerMode/node1.dart'; -export '../StatefulWidget/KeyboardListener/node1.dart'; -export '../StatefulWidget/Focus/node1.dart'; -export '../StatefulWidget/Focus/node2.dart'; -export '../StatefulWidget/Focus/node3.dart'; \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/exp/StatelessWidget.dart b/modules/widget_system/widgets/lib/exp/StatelessWidget.dart deleted file mode 100644 index 9833ccaee..000000000 --- a/modules/widget_system/widgets/lib/exp/StatelessWidget.dart +++ /dev/null @@ -1,213 +0,0 @@ -library stateless_unit; - -export '../StatelessWidget/AboutDialog/node1_base.dart'; -export '../StatelessWidget/AboutListTile/node1_base.dart'; -export '../StatelessWidget/ActionChip/node1_base.dart'; -export '../StatelessWidget/AlertDialog/node1_base.dart'; -export '../StatelessWidget/AnimatedIcon/node1_base.dart'; -export '../StatelessWidget/CheckedModeBanner/node1_base.dart'; -export '../StatelessWidget/Card/node1_base.dart'; -export '../StatelessWidget/Card/node2_shape.dart'; -export '../StatelessWidget/PreferredSize/node1_base.dart'; -export '../StatelessWidget/PreferredSize/node2_adapter.dart'; -export '../StatelessWidget/Builder/node1_base.dart'; -export '../StatelessWidget/NavigationToolbar/node1_base.dart'; -export '../StatelessWidget/CupertinoDialogAction/node1_base.dart'; -export '../StatelessWidget/DraggableScrollableActuator/node1_base.dart'; - -export '../StatelessWidget/CheckboxListTile/node1_base.dart'; -export '../StatelessWidget/CheckboxListTile/node2_select.dart'; -export '../StatelessWidget/CheckboxListTile/node3_dense.dart'; - -export '../StatelessWidget/Chip/node1_base.dart'; -export '../StatelessWidget/Chip/node2_color.dart'; -export '../StatelessWidget/Chip/node3_delete.dart'; - -export '../StatelessWidget/Container/node1_base.dart'; -export '../StatelessWidget/Container/node2_child.dart'; -export '../StatelessWidget/Container/node3_alignment.dart'; -export '../StatelessWidget/Container/node4_decoration.dart'; -export '../StatelessWidget/Container/node5_transform.dart'; -export '../StatelessWidget/Container/node6_constraints.dart'; -export '../StatelessWidget/MaterialBanner/node1_one_btn.dart'; -export '../StatelessWidget/MaterialBanner/node2_two_btn.dart'; -export '../StatelessWidget/SafeArea/node1_base.dart'; - -export '../StatelessWidget/Badge/node_1.dart'; -export '../StatelessWidget/Badge/node_2.dart'; -export '../StatelessWidget/Badge/node_3.dart'; - -export '../StatelessWidget/BackButtonIcon/node1_base.dart'; -export '../StatelessWidget/DrawerButtonIcon/node1_base.dart'; -export '../StatelessWidget/CloseButtonIcon/node1_base.dart'; -export '../StatelessWidget/EndDrawerButtonIcon/node1_base.dart'; - -export '../StatelessWidget/EndDrawerButton/node1_base.dart'; -export '../StatelessWidget/DrawerButton/node1_base.dart'; -export '../StatelessWidget/CloseButton/node1_base.dart'; -export '../StatelessWidget/BackButton/node1_base.dart'; - - -export '../StatelessWidget/CupertinoFullscreenDialogTransition/node1_base.dart'; -export '../StatelessWidget/CupertinoPageTransition/node1_base.dart'; -export '../StatelessWidget/HtmlElementView/node1_base.dart'; - -export '../StatelessWidget/DataTable/node1_base.dart'; -export '../StatelessWidget/DataTable/node2_operation.dart'; -export '../StatelessWidget/OrientationBuilder/node1_base.dart'; -export '../StatelessWidget/Title/node1_base.dart'; -export '../StatelessWidget/TabPageSelector/node1_base.dart'; -export '../StatelessWidget/TabPageSelectorIndicator/node1_base.dart'; -export '../StatelessWidget/CupertinoNavigationBarBackButton/node1_base.dart'; - -export '../StatelessWidget/CupertinoTheme/node1_base.dart'; -export '../StatelessWidget/CupertinoTheme/node2_use.dart'; - -export '../StatelessWidget/CupertinoPopupSurface/node1_base.dart'; -export '../StatelessWidget/Divider/node1_base.dart'; -export '../StatelessWidget/Divider/node2_height.dart'; - -export '../StatelessWidget/ScrollView/node1_base.dart'; -export '../StatelessWidget/ModalBarrier/node1_base.dart'; -export '../StatelessWidget/BoxScrollView/node1_base.dart'; -export '../StatelessWidget/FloatingActionButton/node1_base.dart'; -export '../StatelessWidget/FloatingActionButton/node2_mini.dart'; -export '../StatelessWidget/FloatingActionButton/node3_shape.dart'; -export '../StatelessWidget/GestureDetector/node1_base.dart'; -export '../StatelessWidget/GestureDetector/node2_tap.dart'; -export '../StatelessWidget/GestureDetector/node3_pan.dart'; - -export '../StatelessWidget/Banner/node1_base.dart'; -export '../StatelessWidget/ImageIcon/node1_base.dart'; -export '../StatelessWidget/FadeInImage/node1_base.dart'; -export '../StatelessWidget/CircleAvatar/node1_base.dart'; - - -export '../StatelessWidget/InputChip/node1_base.dart'; -export '../StatelessWidget/InputChip/node2_select.dart'; - - -export '../StatelessWidget/Visibility/node1_base.dart'; -export '../StatelessWidget/Visibility/node2_replacement.dart'; - -export '../StatelessWidget/ChoiceChip/node1_base.dart'; - -export '../StatelessWidget/FilterChip/node1_base.dart'; - - -export '../StatelessWidget/ListTile/node1_base.dart'; -export '../StatelessWidget/ListTile/node2_select.dart'; -export '../StatelessWidget/ListTile/node3_dense.dart'; - - -export '../StatelessWidget/ListView/node1_base.dart'; -export '../StatelessWidget/ListView/node2_direction.dart'; -export '../StatelessWidget/ListView/node3_builder.dart'; -export '../StatelessWidget/ListView/node4_separated.dart'; - -export '../StatelessWidget/MaterialButton/node1_base.dart'; -export '../StatelessWidget/MaterialButton/node2_onLongPress.dart'; -export '../StatelessWidget/MaterialButton/node3_shape.dart'; - -export '../StatelessWidget/GridTileBar/node1_base.dart'; -export '../StatelessWidget/GridTile/node1_base.dart'; - -export '../StatelessWidget/Icon/node1_base.dart'; -export '../StatelessWidget/Icon/node2_diy.dart'; - -export '../StatelessWidget/Placeholder/node1_base.dart'; -export '../StatelessWidget/Placeholder/node2_fallback.dart'; - -export '../StatelessWidget/RadioListTile/node1_base.dart'; -export '../StatelessWidget/RadioListTile/node2_dense.dart' show DenseRadioListTile; - -export '../StatelessWidget/SingleChildScrollView/node1_base.dart'; -export '../StatelessWidget/SingleChildScrollView/node2_direction.dart'; - -export '../StatelessWidget/TabBar/node1_base.dart'; -export '../StatelessWidget/TabBar/node2_noShadow.dart'; - - - -export '../StatelessWidget/ButtonBar/node1_base.dart'; -export '../StatelessWidget/ButtonBar/node2_padding.dart'; - - -export '../StatelessWidget/FlatButton/node1_base.dart'; - -export '../StatelessWidget/FlutterLogo/node1_base.dart'; -export '../StatelessWidget/FlutterLogo/node2_style.dart'; - -export '../StatelessWidget/IconButton/node1_base.dart'; -export '../StatelessWidget/OutlineButton/node1_base.dart'; -export '../StatelessWidget/RaisedButton/node1_base.dart'; - -export '../StatelessWidget/Drawer/node1_base.dart'; -export '../StatelessWidget/DrawerHeader/node1_base.dart'; - -export '../StatelessWidget/UserAccountsDrawerHeader/node1_base.dart'; -export '../StatelessWidget/UserAccountsDrawerHeader/node2_pro.dart'; - - -export '../StatelessWidget/VerticalDivider/node1_base.dart'; -export '../StatelessWidget/VerticalDivider/node2_height.dart'; - - -export '../StatelessWidget/GridView/node1_base.dart'; -export '../StatelessWidget/GridView/node2_direction.dart'; -export '../StatelessWidget/GridView/node3_extend.dart'; -export '../StatelessWidget/GridView/node4_builder.dart'; - -export '../StatelessWidget/GridPaper/node1_base.dart'; -export '../StatelessWidget/GridPaper/node2_divisions.dart'; - -export '../StatelessWidget/Spacer/node1_base.dart'; -export '../StatelessWidget/Spacer/node2_flex.dart'; - -export '../StatelessWidget/SwitchListTile/node1_base.dart'; -export '../StatelessWidget/SwitchListTile/node2_select.dart'; -export '../StatelessWidget/SwitchListTile/node3_dense.dart'; - -export '../StatelessWidget/Listener/node1_base.dart'; -export '../StatelessWidget/PositionedDirectional/node1_base.dart'; - -export '../StatelessWidget/Tab/node1_base.dart'; -export '../StatelessWidget/Theme/node1_base.dart'; -export '../StatelessWidget/Theme/node2_use.dart'; - -export '../StatelessWidget/ToggleButtons/node1_single.dart'; -export '../StatelessWidget/ToggleButtons/node2_color.dart'; -export '../StatelessWidget/ToggleButtons/node3_multi.dart'; - - -export '../StatelessWidget/BottomSheet/node1_base.dart'; -export '../StatelessWidget/CupertinoActionSheet/node1_base.dart'; -export '../StatelessWidget/CupertinoActionSheetAction/node1_base.dart'; -export '../StatelessWidget/CupertinoAlertDialog/node1_base.dart'; - -export '../StatelessWidget/Text/node1.dart'; -export '../StatelessWidget/Text/node2.dart'; -export '../StatelessWidget/Text/node3_decoration.dart'; -export '../StatelessWidget/Text/node4_textAlign.dart'; -export '../StatelessWidget/Text/node5_textDirection.dart'; -export '../StatelessWidget/Text/node6_softWrap.dart'; - - -export '../StatelessWidget/DayPicker/node1_base.dart'; -export '../StatelessWidget/Dialog/node1_base.dart'; - -export '../StatelessWidget/SimpleDialog/node1_base.dart'; -export '../StatelessWidget/SimpleDialogOption/node1_base.dart'; -export '../StatelessWidget/SnackBar/node1_base.dart'; -export '../StatelessWidget/SnackBarAction/node1_base.dart'; - -export '../StatelessWidget/PageStorage/node1_base.dart'; -export '../StatelessWidget/NotificationListener/node1_base.dart'; -export '../StatelessWidget/NotificationListener/node2_update.dart'; - -export '../StatelessWidget/Autocomplete/node1_base.dart'; -export '../StatelessWidget/Autocomplete/node2_type.dart'; -export '../StatelessWidget/RawMagnifier/node1_base.dart'; -export '../StatelessWidget/RawMagnifier/node2_shape.dart'; - - diff --git a/modules/widget_system/widgets/lib/node_display_map.dart b/modules/widget_system/widgets/lib/node_display_map.dart deleted file mode 100644 index a6929b0b1..000000000 --- a/modules/widget_system/widgets/lib/node_display_map.dart +++ /dev/null @@ -1,516 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'exp/Other.dart'; -import 'exp/ProxyWidget.dart'; -import 'exp/MultiChildRenderObjectWidget.dart'; -import 'exp/SingleChildRenderObjectWidget.dart'; -import 'exp/Sliver.dart'; -import 'exp/StatefulWidget.dart'; -import 'exp/StatelessWidget.dart'; - - -Widget mapNodeDisplay(int widgetId, int nodePriority) { - String name = '$widgetId#$nodePriority'; - - return switch (name) { - '96#0' => const ColumnNode1(), - '341#0' => const CustomMultiChildLayoutNode1(), - '94#0' => const FlexNode1(), - '94#1' => const FlexNode2(), - '94#2' => const FlexNode3(), - '94#3' => const FlexNode4(), - '94#4' => const FlexNode5(), - '99#0' => const FlowNode1(), - '99#1' => const FlowNode02(), - '161#0' => const IndexedStackNode01(), - '342#0' => const ListBodyDemo(), - '344#0' => const NestedScrollViewViewportDemo(), - '101#0' => const CustomRichText(), - '101#1' => const RichTextWithWidget(), - '95#0' => const CustomRow(), - '343#0' => const ShrinkWrappingViewportDemo(), - '97#0' => const CustomStack(), - '97#1' => const PositionedStack(), - '340#0' => const ViewportDemo(), - '98#0' => const DirectionWrap(), - '98#1' => const WrapAlignmentWrap(), - '98#2' => const CrossAxisAlignmentWrap(), - '98#3' => const TextDirectionWrap(), - '98#4' => const VerticalDirectionWrap(), - '197#0' => const ErrorWidgetDemo(), - '291#0' => const ListWheelViewportDemo(), - '291#1' => const ListWheelViewportDemo2(), - '291#2' => const ListWheelViewportDemo3(), - '291#3' => const ListWheelViewportDemo4(), - '312#0' => const PerformanceOverlayDemo(), - '313#0' => const RawImageDemo(), - '289#0' => const RenderObjectToWidgetAdapterDemo(), - '110#0' => const CustomTable(), - '338#0' => const ButtonBarThemeDemo(), - '326#0' => const ButtonThemeDemo(), - '328#0' => const ChipThemeDemo(), - '337#0' => const CupertinoUserInterfaceLevelDemo(), - '320#0' => const DefaultAssetBundleDemo(), - '324#0' => const DefaultTextStyleDemo(), - '319#0' => const DirectionalityDemo(), - '329#0' => const DividerThemeDemo(), - '181#0' => const CustomDropDownButtonHideUnderline(), - '106#0' => const CustomExpended(), - '109#0' => const CustomFlexible(), - '325#0' => const IconThemeDemo(), - '336#0' => const InheritedModelDemo(), - '345#0' => const InheritedThemeDemo(), - '346#0' => const InheritedWidgetDemo(), - '346#1' => const InheritedWidgetDemo2(), - '316#0' => const KeepAliveDemo(), - '315#0' => const LayoutIdDemo(), - '334#0' => const ListTileThemeDemo(), - '327#0' => const MaterialBannerThemeDemo(), - '167#0' => const CustomMediaQuery(), - '347#0' => const ParentDataWidgetDemo(), - '330#0' => const PopupMenuThemeDemo(), - '108#0' => const CustomPositioned(), - '335#0' => const PrimaryScrollControllerDemo(), - '180#0' => const CustomScrollConfiguration(), - '331#0' => const SliderThemeDemo(), - '331#1' => const DIYSliderTheme(), - '317#0' => const TableCellDemo(), - '332#0' => const ToggleButtonsThemeDemo(), - '333#0' => const TooltipThemeDemo(), - '295#0' => const CustomAbsorbPointer(), - '85#0' => const CustomAlign(), - '85#1' => const Ball(), - '201#0' => const CustomAnimatedSize(), - '288#0' => const AnnotatedRegionDemo(), - '77#0' => const CustomAspectRatio(), - '278#0' => const CustomBackdropFilter(), - '75#0' => const CustomBaseline(), - '283#0' => const CallbackShortcutsDemo1(), - '86#0' => const CustomCenter(), - '66#0' => const CustomClipOval(), - '69#0' => const CustomClipPath(), - '67#0' => const CustomClipRect(), - '68#0' => const CustomClipRRect(), - '267#0' => const ColoredBoxDemo(), - '88#0' => const CustomColorFiltered(), - '265#0' => const CompositedTransformFollowerDemo(), - '266#0' => const CompositedTransformTargetDemo(), - '80#0' => const CustomConstrainedBox(), - '299#0' => const CupertinoTextSelectionToolbarDemo(), - '166#0' => const ClockPage(), - '166#1' => const PlayBezier3Page(), - '285#0' => const CustomSingleChildLayoutDemo(), - '285#1' => const OffSetWidgetDemo(), - '70#0' => const BoxDecorationDemo(), - '70#1' => const ShapeImageDemo(), - '70#2' => const BorderDemo(), - '70#3' => const ShapeDecorationDemo(), - '70#4' => const UnderlineTabIndicatorDemo(), - '70#5' => const FlutterLogoDecorationDemo(), - '89#0' => const CustomFadeTransition(), - '87#0' => const CustomFittedBox(), - '82#0' => const CustomFractionallySizedBox(), - '263#0' => const FractionalTranslationDemo(), - '292#0' => const CustomIgnorePointer(), - '357#0' => const ImageFilteredBlur(), - '357#1' => const ImageFilteredColor(), - '357#2' => const ImageFilteredMatrix(), - '298#0' => const IntrinsicHeightDemo(), - '297#0' => const IntrinsicWidthDemo(), - '287#0' => const CustomLayoutBuilder(), - '287#1' => const FitByLayoutBuilder(), - '287#2' => const SimpleExpandableText(), - '79#0' => const CustomLimitedBox(), - '71#0' => const CustomOffstage(), - '73#0' => const CustomOpacity(), - '83#0' => const CustomOverflowBox(), - '74#0' => const PaddingAll(), - '74#1' => const PaddingOnly(), - '74#2' => const PaddingSymmetric(), - '296#0' => const PhysicalModelDemo(), - '279#0' => const PhysicalShapeDemo(), - '264#0' => const RepaintBoundaryDemo(), - '264#1' => const RepaintBoundarySave(), - '72#0' => const CustomRotatedBox(), - '277#0' => const RadialShaderMask(), - '277#1' => const LinearShaderMask(), - '294#0' => const SizeChangedLayoutNotifierDemo(), - '76#0' => const CustomSizedBox(), - '84#0' => const CustomSizedOverflowBox(), - '280#0' => const TapRegionDemo1(), - '281#0' => const TextFieldTapRegionDemo1(), - '78#0' => const SkewTransform(), - '78#1' => const TranslationTransform(), - '78#2' => const ScaleTransform(), - '78#3' => const RotateTransform(), - '78#4' => const R3C2(), - '81#0' => const CustomUnConstrainedBox(), - '302#0' => const CupertinoSliverNavigationBarDemo(), - '303#0' => const CupertinoSliverRefreshControlDemo(), - '183#0' => const CustomScrollViewDemo(), - '209#0' => const DecorationSliverDemo(), - '196#0' => const FlexibleSpaceBarDemo(), - '309#0' => const PinnedHeaderSliverNode1(), - '309#1' => const PinnedHeaderSliverNode2(), - '309#2' => const PinnedHeaderSliverNode3(), - '301#0' => const SliverAnimatedListDemo(), - '184#0' => const SliverAppBarDemo(), - '270#0' => const SliverConstrainedCrossAxisDemo(), - '271#0' => const SliverCrossAxisExpandedDemo(), - '269#0' => const SliverCrossAxisGroupDemo(), - '306#0' => const SliverFillRemainingDemo(), - '187#0' => const SliverFillViewportDemo(), - '186#0' => const SliverFixedExtentListDemo(), - '188#0' => const SliverGirdDemo(), - '305#0' => const SliverIgnorePointerDemo(), - '304#0' => const SliverLayoutBuilderDemo(), - '185#0' => const SliverListDemo(), - '268#0' => const SliverMainAxisGroupDemo(), - '192#0' => const SliverOpacityDemo(), - '307#0' => const SliverOverlapAbsorberDemo(), - '308#0' => const SliverOverlapInjectorDemo(), - '191#0' => const SliverPaddingDemo(), - '190#0' => const SliverPersistentHeaderDemo(), - '314#0' => const SliverPrototypeExtentListDemo(), - '189#0' => const SliverToBoxAdapterDemo(), - '348#0' => const SliverWithKeepAliveWidgetDemo(), - '111#0' => const CustomAlignTransition(), - '120#0' => const CustomAnimatedAlign(), - '228#0' => const AnimatedBuilderDemo(), - '123#0' => const CustomAnimatedContainer(), - '100#0' => const CustomAnimatedCrossFade(), - '100#1' => const CurveAnimatedCrossFade(), - '124#0' => const CustomAnimatedDefaultTextStyle(), - '260#0' => const AnimatedFractionallySizedBoxDemo(), - '117#0' => const CustomAnimatedList(), - '227#0' => const AnimatedModalBarrierDemo(), - '118#0' => const CustomAnimatedOpacity(), - '119#0' => const CustomAnimatedPadding(), - '225#0' => const AnimatedPhysicalModelDemo(), - '121#0' => const CustomAnimatedPositioned(), - '122#0' => const CustomAnimatedPositionedDirectional(), - '259#0' => const AnimatedRotationDemo(), - '249#0' => const AnimatedScaleDemo(), - '247#0' => const AnimatedSlideDemo(), - '116#0' => const CustomAnimatedSwitcher(), - '224#0' => const AnimatedThemeDemo(), - '57#0' => const CustomAppBar(), - '57#1' => const TabAppBar(), - '239#0' => const AutomaticKeepAliveDemo(), - '61#0' => const CustomBottomAppBar(), - '60#0' => const CustomBottomNavigationBar(), - '60#1' => const BottomNavigationBarWithPageView(), - '237#0' => const CarouselNode1(), - '237#1' => const CarouselNode2(), - '39#0' => const CustomCheckbox(), - '39#1' => const TristateCheckBok(), - '46#0' => const CustomCircularProgressIndicator(), - '48#0' => const CustomCupertinoActivityIndicator(), - '156#0' => const CustomCupertinoApp(), - '24#0' => const CustomCupertinoButton(), - '238#0' => const CupertinoCheckboxDemo1(), - '238#1' => const CupertinoCheckboxDemo2(), - '238#2' => const CupertinoCheckboxDemo3(), - '143#0' => const CustomCupertinoContextMenu(), - '144#0' => const CustomCupertinoContextMenuAction(), - '137#0' => const CustomCupertinoDatePicker(), - '62#0' => const CustomCupertinoNavigationBar(), - '157#0' => const CustomCupertinoPageScaffold(), - '139#0' => const CustomCupertinoPicker(), - '240#0' => const CupertinoRadioDemo1(), - '240#1' => const CupertinoRadioDemo2(), - '240#2' => const CupertinoRadioDemo3(), - '195#0' => const CustomCupertinoScrollbar(), - '262#0' => const CupertinoSegmentedControlDemo(), - '262#1' => const CupertinoSegmentedControlColor(), - '43#0' => const CustomCupertinoSlider(), - '256#0' => const CupertinoSlidingSegmentedControlDemo(), - '41#0' => const CustomCupertinoSwitch(), - '63#0' => const CustomCupertinoTabBar(), - '158#0' => const CustomCupertinoTabScaffold(), - '229#0' => const CupertinoTabViewDemo(), - '245#0' => const CupertinoTextFieldDemo(), - '245#1' => const CupertinoTextFieldStyle(), - '138#0' => const CustomCupertinoTimerPicker(), - '339#0' => const DateRangePickerDialogDemo(), - '339#1' => const DiyDateRangePickerDialogDemo(), - '113#0' => const CustomDecoratedBoxTransition(), - '230#0' => const DefaultTabControllerDemo(), - '114#0' => const CustomDefaultTextStyleTransition(), - '176#0' => const CustomDismissible(), - '176#1' => const DirectionDismissible(), - '103#0' => const CustomDraggable(), - '103#1' => const DraggablePage(), - '103#2' => const DeleteDraggable(), - '252#0' => const DraggableScrollableSheetDemo(), - '104#0' => const CustomDragTarget(), - '257#0' => const DrawerControllerDemo(), - '55#0' => const CustomDropDownButton(), - '55#1' => const StyleDropDownButton(), - '223#0' => const DropdownButtonFormFieldDemo(), - '370#0' => const DropdownMenuNode1(), - '370#1' => const DropdownMenuNode2(), - '370#2' => const DropdownMenuNode3(), - '244#0' => const EditableTextDemo(), - '354#0' => const ElevatedButtonDemo(), - '354#1' => const ElevatedButtonStyleDemo(), - '51#0' => const CustomExpandIcon(), - '178#0' => const CustomExpansionPanelList(), - '52#0' => const CustomExpansionTile(), - '359#0' => const FilledButtonDemo1(), - '359#1' => const FilledButtonDemo2(), - '282#0' => const FocusDemo1(), - '282#1' => const FocusDemo2(), - '282#2' => const FocusDemo3(), - '198#0' => const CustomForm(), - '222#0' => const FormFieldDemo(), - '172#0' => const CustomFutureBuilder(), - '250#0' => const GlowingOverscrollIndicatorDemo(), - '171#0' => const CustomHero(), - '38#0' => const LoadImage(), - '38#1' => const FitImage(), - '38#2' => const AlignmentImage(), - '38#3' => const BlendModeImage(), - '38#4' => const RepeatImage(), - '38#5' => const CenterSliceImage(), - '152#0' => const CustomInk(), - '152#1' => const InkImage(), - '149#0' => const CustomInkResponse(), - '149#1' => const ColorInkResponse(), - '150#0' => const CustomInkWell(), - '150#1' => const ColorInkWell(), - '231#0' => const InputDecoratorDemo(), - '351#0' => const InteractiveViewerDemo(), - '351#1' => const InteractiveViewerDemo2(), - '351#2' => const InteractiveViewerDemo3(), - '284#0' => const KeyboardListenerDemo1(), - '145#0' => const CustomLicensePage(), - '47#0' => const CustomLinearProgressIndicator(), - '179#0' => const CustomListWheelScrollView(), - '290#0' => const LocalizationsDemo1(), - '105#0' => const CustomLongPressDraggable(), - '160#0' => const CustomMaterial(), - '160#1' => const ShapeMaterial(), - '65#0' => const MaterialAppDemo(), - '261#0' => const MergeableMaterialDemo(), - '135#0' => const CustomMonthPicker(), - '293#0' => const MouseRegionDemo(), - '358#0' => const CustomNavigationRail(), - '358#1' => const ExtendableNavigationRail(), - '358#2' => const DarkNavigationRail(), - '232#0' => const NavigatorDemo(), - '251#0' => const NestedScrollViewDemo(), - '355#0' => const OutlinedButtonDemo(), - '355#1' => const OutlinedButtonStyleDemo(), - '182#0' => const CustomOverlay(), - '165#0' => const CustomPageView(), - '165#1' => const DirectionPageView(), - '165#2' => const CtrlPageView(), - '235#0' => const PaginatedDataTableDemo(), - '56#0' => const CustomPopupMenuButton(), - '174#0' => const CustomPopupMenuDivider(), - '93#0' => const CustomPositionedTransition(), - '45#0' => const CustomRadio(), - '44#0' => const CustomRangeSlider(), - '153#0' => const PressRawChip(), - '153#1' => const SelectRawChip(), - '248#0' => const RawGestureDetectorDemo(), - '254#0' => const RawKeyboardListenerDemo(), - '175#0' => const CustomRawMaterialButton(), - '175#1' => const ShapeRawMaterialButton(), - '49#0' => const CustomRefreshIndicator(), - '115#0' => const CustomRelativePositionedTransition(), - '177#0' => const CustomReorderableListView(), - '177#1' => const DirectionReorderableListView(), - '90#0' => const CustomRotationTransition(), - '64#0' => const CustomScaffold(), - '91#0' => const CustomScaleTransition(), - '253#0' => const ScrollableDemo(), - '194#0' => const CustomScrollbar(), - '53#0' => const CustomSelectableText(), - '53#1' => const AlignSelectableText(), - '92#0' => const CustomSizeTransition(), - '42#0' => const CustomSlider(), - '42#1' => const DivisionsSlider(), - '112#0' => const CustomSlideTransition(), - '242#0' => const StatefulBuilderDemo(), - '233#0' => const StatusTransitionWidgetDemo(), - '200#0' => const StepperDemo(), - '200#1' => const VerticalStepper(), - '173#0' => const CustomStreamBuilder(), - '40#0' => const CustomSwitch(), - '40#1' => const ImageSwitch(), - '59#0' => const CustomTabBarView(), - '151#0' => const CustomTableRowInkWell(), - '353#0' => const TextButtonDemo(), - '353#1' => const TextButtonStyleDemo(), - '54#0' => const CustomTextField(), - '54#1' => const CursorTextField(), - '54#2' => const ComplexTextField(), - '199#0' => const CustomTextFormField(), - '246#0' => const TickerModeDemo1(), - '50#0' => const CustomTooltip(), - '50#1' => const DecorationTooltip(), - '226#0' => const TweenAnimationBuilderDemo(), - '241#0' => const UndoHistoryDemo1(), - '243#0' => const UniqueWidgetDemo(), - '255#0' => const ValueListenableBuilderDemo(), - '234#0' => const WidgetInspectorDemo(), - '236#0' => const WidgetsAppDemo(), - '170#0' => const CustomWillPopScope(), - '136#0' => const CustomYearPicker(), - '130#0' => const CustomAboutDialog(), - '193#0' => const AboutListTileDemo(), - '13#0' => const CustomActionChip(), - '127#0' => const CustomAlertDialog(), - '125#0' => const CustomAnimatedIcon(), - '356#0' => const AutocompleteDemo(), - '356#1' => const AutocompleteType(), - '31#0' => const CustomBackButton(), - '272#0' => const BackButtonIconDemo(), - '258#0' => const BadgeDemo(), - '258#1' => const BadgeLabelDemo(), - '258#2' => const BadgeAlignOffsetDemo(), - '5#0' => const CustomBanner(), - '142#0' => const CustomBottomSheet(), - '350#0' => const BoxScrollViewDemo(), - '202#0' => const BuilderDemo(), - '29#0' => const CustomButtonBar(), - '29#1' => const PaddingButtonBar(), - '3#0' => const CustomCard(), - '3#1' => const ShapeCard(), - '17#0' => const CustomCheckBoxListTile(), - '17#1' => const SelectCheckBoxListTile(), - '17#2' => const DenseCheckBoxListTile(), - '215#0' => const CheckedModeBannerDemo(), - '11#0' => const CustomChip(), - '11#1' => const ColorOfChip(), - '11#2' => const DeleteOfChip(), - '12#0' => const CustomChoiceChip(), - '9#0' => const CustomCircleAvatar(), - '32#0' => const CustomCloseButton(), - '274#0' => const CloseButtonIconDemo(), - '1#0' => const CustomContainer(), - '1#1' => const ContainerWithChild(), - '1#2' => const ContainerAlignment(), - '1#3' => const ContainerDecoration(), - '1#4' => const ContainerTransform(), - '1#5' => const ContainerConstraints(), - '131#0' => const CustomCupertinoActionSheet(), - '132#0' => const CustomCupertinoActionSheetAction(), - '129#0' => const CustomCupertinoAlertDialog(), - '352#0' => const CupertinoDialogActionDemo(), - '219#0' => const CupertinoFullscreenDialogTransitionDemo(), - '218#0' => const CupertinoNavigationBarBackButtonDemo(), - '216#0' => const CupertinoPageTransitionDemo(), - '217#0' => const CupertinoPopupSurfaceDemo(), - '169#0' => const TextCupertinoTheme(), - '169#1' => const CustomCupertinoTheme(), - '102#0' => const CustomDataTable(), - '102#1' => const SortDataTable(), - '134#0' => const CustomDayPicker(), - '126#0' => const CustomDialog(), - '34#0' => const CustomDivider(), - '34#1' => const HeightDivider(), - '221#0' => const DraggableScrollableActuatorDemo(), - '154#0' => const CustomDrawer(), - '276#0' => const DrawerButtonDemo(), - '273#0' => const DrawerButtonIconDemo(), - '155#0' => const CustomDrawerHeader(), - '361#0' => const EndDrawerButtonDemo(), - '275#0' => const EndDrawerButtonIconDemo(), - '8#0' => const CustomFadeInImage(), - '15#0' => const CustomFilterChip(), - '25#0' => const CustomFlatButton(), - '28#0' => const CustomFAB(), - '28#1' => const MiniFAB(), - '28#2' => const ShapeFAB(), - '4#0' => const CustomFlutterLogo(), - '4#1' => const FlutterLogoWithText(), - '146#0' => const CustomGestureDetector(), - '146#1' => const TapGestureDetector(), - '146#2' => const PanGestureDetector(), - '37#0' => const CustomGridPaper(), - '37#1' => const DivisionsGridPaper(), - '21#0' => const CustomGridTile(), - '20#0' => const CustomGridTileBar(), - '163#0' => const CustomGridView(), - '163#1' => const HorizontalGridView(), - '163#2' => const ExtentGridView(), - '163#3' => const BuilderGridView(), - '213#0' => const HtmlElementViewDemo(), - '6#0' => const CustomIcon(), - '6#1' => const MyIcon(), - '30#0' => const CustomIconButton(), - '7#0' => const CustomImageIcon(), - '14#0' => const PressInputChip(), - '14#1' => const SelectInputChip(), - '147#0' => const CustomListener(), - '16#0' => const CustomListTile(), - '16#1' => const SelectListTile(), - '16#2' => const DenseListTile(), - '162#0' => const CustomListView(), - '162#1' => const HorizontalListView(), - '162#2' => const BuilderListView(), - '162#3' => const SeparatedListView(), - '211#0' => const MaterialBannerDemo(), - '211#1' => const MaterialBannerDemoTwo(), - '23#0' => const CustomMaterialButton(), - '23#1' => const LongPressMaterialButton(), - '23#2' => const ShapeMaterialButton(), - '212#0' => const ModalBarrierDemo(), - '214#0' => const NavigationToolbarDemo(), - '220#0' => const NotificationListenerDemo(), - '220#1' => const NotificationListenerUpdate(), - '203#0' => const OrientationBuilderDemo(), - '27#0' => const CustomOutlineButton(), - '210#0' => const PageStorageDemo(), - '36#0' => const CustomPlaceholder(), - '36#1' => const FallbackPlaceholder(), - '159#0' => const CustomPositionedDirectional(), - '204#0' => const CustomPreferredSize(), - '204#1' => const AdapterPreferredSize(), - '19#0' => const CustomRadioListTile(), - '19#1' => const DenseRadioListTile(), - '26#0' => const CustomRaisedButton(), - '360#0' => const MagnifierCircleShape(), - '360#1' => const MagnifierStarShape(), - '207#0' => const SafeAreaDemo(), - '349#0' => const ScrollViewDemo(), - '128#0' => const CustomSimpleDialog(), - '133#0' => const CustomSimpleDialogOption(), - '164#0' => const CustomSingleChildScrollView(), - '164#1' => const DirectionSingleChildScrollView(), - '140#0' => const CustomSnackBar(), - '141#0' => const CustomSnackBarAction(), - '107#0' => const OneSpacer(), - '107#1' => const ManySpacer(), - '18#0' => const CustomSwitchListTile(), - '18#1' => const SelectSwitchListTile(), - '18#2' => const DenseSwitchListTile(), - '148#0' => const CustomTab(), - '58#0' => const CustomTabBar(), - '58#1' => const NoShadowTabBarDemo(), - '205#0' => const TabPageSelectorDemo(), - '206#0' => const TabPageSelectorIndicatorDemo(), - '2#0' => const TextDemo1(), - '2#1' => const TextDemo2(), - '2#2' => const DecorationText(), - '2#3' => const TextAlignText(), - '2#4' => const TextDirectionText(), - '2#5' => const SoftWrapText(), - '168#0' => const TextThemeDemo(), - '168#1' => const CustomTheme(), - '208#0' => const TitleDemo(), - '33#0' => const CustomToggleButtons(), - '33#1' => const ColorToggleButtons(), - '33#2' => const ProToggleButtons(), - '22#0' => const CustomUAGHP(), - '22#1' => const ProUAGHP(), - '35#0' => const CustomVerticalDivider(), - '35#1' => const WidthVerticalDivider(), - '10#0' => const CustomVisibility(), - '10#1' => const ReplacementVisibility(), - - _ => const SizedBox(), - }; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/utils/color_utils.dart b/modules/widget_system/widgets/lib/utils/color_utils.dart deleted file mode 100644 index e1a2b49ea..000000000 --- a/modules/widget_system/widgets/lib/utils/color_utils.dart +++ /dev/null @@ -1,75 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -class RandomProvider{ - RandomProvider._();//私有化构造 - static final _random= Random(); - static Random get random =>_random; -} - -class ColorUtils { - static Color randomColor({ - int limitA = 120, - int limitR = 0, - int limitG = 0, - int limitB = 0, - }) { - Random random = RandomProvider.random; - int a = limitA + random.nextInt(256 - limitA); //透明度值 - int r = limitR + random.nextInt(256 - limitR); //红值 - int g = limitG + random.nextInt(256 - limitG); //绿值 - int b = limitB + random.nextInt(256 - limitB); //蓝值 - return Color.fromARGB(a, r, g, b); //生成argb模式的颜色 - } - - - /// 使用方法: - /// var color1=ColorUtils.parse("#33428A43"); - /// var color2=ColorUtils.parse("33428A43"); - /// var color3=ColorUtils.parse("#428A43"); - ///var color4=ColorUtils.parse("428A43"); - /// - static Color parse(String code) { - Color result =Colors.red; - int value = 0 ; - if (code.contains("#")) { - try { - value = int.parse(code.substring(1), radix: 16); - } catch (e) { - print(e); - } - switch (code.length) { - case 7://6位 - result = Color(value + 0xFF000000); - break; - case 9://8位 - result = Color(value); - break; - default: - result =Colors.red; - } - }else { - try { - value = int.parse(code, radix: 16); - } catch (e) { - print(e); - } - switch (code.length) { - case 6: - result = Color(value + 0xFF000000); - break; - case 8: - result = Color(value); - break; - default: - result =Colors.red; - } - } - return result; - } - - static String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} - diff --git a/modules/widget_system/widgets/lib/utils/dialog_about.dart b/modules/widget_system/widgets/lib/utils/dialog_about.dart deleted file mode 100644 index 81b3023eb..000000000 --- a/modules/widget_system/widgets/lib/utils/dialog_about.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:app/app.dart'; -import 'package:flutter/material.dart'; - -class DialogAbout extends StatelessWidget { - const DialogAbout({super.key}); - - static show(BuildContext context){ - showDialog(//内置方法,创建对话弹框 - context: context, - builder: (_) => const DialogAbout()); - } - @override - Widget build(BuildContext context) { - Widget title = Row( - //标题 - children: [ - Image.asset( - "assets/images/icon_head.webp", - width: 30, - height: 30, - ), - const SizedBox( - width: 10, - ), - const Expanded(child: Text("关于",style: TextStyle(fontSize: 18),)), - InkWell( - child: const Icon(Icons.close), - onTap: ()=>Navigator.of(context).pop(), - ) - ], - ); - Widget content = const Column( - //内容 - mainAxisSize: MainAxisSize.min, - children: [ - FlutterLogo(size: 50,), - SizedBox( - height: 20, - ), - Text( - "Flutter Unit ${StrUnit.version}", - ), - ]); - return AlertDialog(title: title, content: content, actions: const [ - Padding( - padding: EdgeInsets.only(right:15.0,bottom: 10,top: 10), - child: Column( - children: [ - Text( - "Power By GF·J·Toly\n张风捷特烈", - textAlign: TextAlign.center, - ), - ], - )) - ]); - } -} diff --git a/modules/widget_system/widgets/lib/utils/pather.dart b/modules/widget_system/widgets/lib/utils/pather.dart deleted file mode 100644 index 6953fdf34..000000000 --- a/modules/widget_system/widgets/lib/utils/pather.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/cupertino.dart'; - -class Pather { - Pather._(); - - static Pather create = Pather._(); - - final Path _path = Path(); - - Path nStarPath(int num, double R, double r, {dx = 0, dy = 0}) { - _path.reset();//重置路径 - double perRad = 2 * pi / num;//每份的角度 - double radA = perRad / 2 / 2;//a角 - double radB = 2 * pi / (num - 1) / 2 - radA / 2 + radA;//起始b角 - _path.moveTo(cos(radA) * R + dx, -sin(radA) * R + dy);//移动到起点 - for (int i = 0; i < num; i++) {//循环生成点,路径连至 - _path.lineTo(cos(radA + perRad * i) * R + dx, -sin(radA + perRad * i) * R + dy); - _path.lineTo(cos(radB + perRad * i) * r + dx, -sin(radB + perRad * i) * r + dy); - } - _path.close(); - return _path; - } -} diff --git a/modules/widget_system/widgets/lib/widgets.dart b/modules/widget_system/widgets/lib/widgets.dart deleted file mode 100644 index 6454bac6c..000000000 --- a/modules/widget_system/widgets/lib/widgets.dart +++ /dev/null @@ -1,3 +0,0 @@ -library widgets; - -export 'node_display_map.dart'; diff --git a/modules/widget_system/widgets/pubspec.yaml b/modules/widget_system/widgets/pubspec.yaml deleted file mode 100644 index d1999a168..000000000 --- a/modules/widget_system/widgets/pubspec.yaml +++ /dev/null @@ -1,50 +0,0 @@ -name: widgets -description: A new Flutter package project. -version: 0.0.1 -homepage: - -environment: - sdk: ">=3.5.0 <4.0.0" - flutter: ">=1.17.0" -resolution: workspace -dependencies: - flutter: - sdk: flutter - - -# For information on the generic Dart part of this file, see the -# following page: https://dart.dev/tools/pub/pubspec - -# The following section is specific to Flutter packages. -flutter: - - # To add assets to your package, add an assets section, like this: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - # - # For details regarding assets in packages, see - # https://flutter.dev/assets-and-images/#from-packages - # - # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware - - # To add custom fonts to your package, add a fonts section here, - # in this "flutter" section. Each entry in this list should have a - # "family" key with the font family name, and a "fonts" key with a - # list giving the asset and other descriptors for the font. For - # example: - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic - # - family: Trajan Pro - # fonts: - # - asset: fonts/TrajanPro.ttf - # - asset: fonts/TrajanPro_Bold.ttf - # weight: 700 - # - # For details regarding fonts in packages, see - # https://flutter.dev/custom-fonts/#from-packages diff --git a/modules/widget_system/widgets/test/widgets_test.dart b/modules/widget_system/widgets/test/widgets_test.dart deleted file mode 100644 index f286e7dcc..000000000 --- a/modules/widget_system/widgets/test/widgets_test.dart +++ /dev/null @@ -1,12 +0,0 @@ -// import 'package:flutter_test/flutter_test.dart'; -// -// import 'package:widgets/widgets.dart'; -// -// void main() { -// test('adds one to input values', () { -// final calculator = Calculator(); -// expect(calculator.addOne(2), 3); -// expect(calculator.addOne(-7), -6); -// expect(calculator.addOne(0), 1); -// }); -// } diff --git a/pubspec.lock b/pubspec.lock index fdaa62000..2062c8572 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1216,6 +1216,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.4.0" + unit_widgets_display: + dependency: transitive + description: + name: unit_widgets_display + sha256: f5a70c4933f324e944d71a405f61c907a5dc0c5f7c0eedaf260d823963856b82 + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.0.1" url_launcher: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index c10551964..e62205890 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -27,7 +27,6 @@ workspace: - modules/tools_system/treasure_tools - modules/widget_system/widget_module - - modules/widget_system/widgets - modules/knowledge_system/note dependencies: From f5764baa0f33b9b163b7028e773ede42cee39529 Mon Sep 17 00:00:00 2001 From: toly <1981462002@qq.com> Date: Sun, 24 Aug 2025 12:27:35 +0800 Subject: [PATCH 4/7] feature: widget attr page --- assets/article.db | Bin 0 -> 147456 bytes assets/flutter.db | Bin 3702784 -> 2265088 bytes assets/images/widgets/Banner.svg | 10 - assets/images/widgets/Card.svg | 16 -- assets/images/widgets/Chip.svg | 10 - assets/images/widgets/Container.svg | 10 - assets/images/widgets/FilterChip.svg | 10 - assets/images/widgets/InputChip.svg | 10 - assets/images/widgets/MaterialButton.svg | 10 - assets/version.json | 2 +- doc/development/architecture.md | 247 ++++++++++++++++++ .../view/mobile/unit_navigation.dart | 2 +- lib/src/starter/fx_application.dart | 4 +- lib/src/starter/start_repository.dart | 23 +- .../view/data_manage/data_manage_page.dart | 4 +- .../basic_system/l10n/lib/enum/language.dart | 23 +- .../storage/lib/src/app_storage.dart | 13 +- .../db_storage/flutter/article_db_store.dart | 27 ++ .../db_storage/flutter/flutter_db_store.dart | 5 +- .../basic_system/toly_ui/lib/ti/panel.dart | 19 +- .../data/repository/article_repository.dart | 5 +- .../data/repository/columnize_repository.dart | 7 +- .../lib/src/articles/view/artifact_page.dart | 38 +-- .../lib/blocs/action/widget_action.dart | 14 +- .../widget_module/lib/blocs/blocs.dart | 3 +- .../liked_widget_bloc/liked_widget_bloc.dart | 33 --- .../liked_widget_bloc/liked_widget_event.dart | 33 --- .../liked_widget_bloc/liked_widget_state.dart | 14 - .../widget_detail_bloc.dart | 6 +- .../widget_detail_state.dart | 2 - .../lib/blocs/widgets_bloc/widgets_bloc.dart | 13 +- .../lib/event/widget_statistics_event.dart | 10 + .../lib/views/components/collected_tag.dart | 58 ++-- .../category_panel/desk_top_like_panel.dart | 41 ++- .../lib/views/desk_ui/like_tag.dart | 40 --- .../widget_detail/widget_detail_bar.dart | 68 ++--- .../widget_detail/widget_detail_page.dart | 25 +- .../widget_detail/widget_detail_panel.dart | 83 +----- .../widget_panel/desk_widget_top_bar.dart | 95 +++++-- .../desk_ui/widget_panel/widget_panel.dart | 31 +-- .../category_page/like_widget_page.dart | 51 ++-- .../category_page/sync/async_button.dart | 4 +- .../search_page/standard_search_page.dart | 18 +- .../widget_detail/widget_detail_bar.dart | 20 +- .../widget_detail/widget_detail_page.dart | 11 +- .../widget_detail/widget_detail_panel.dart | 46 ++-- .../widget_detail/widget_fields_sliver.dart | 150 +++++++++++ .../widget_page/mobile_widget_tiled.dart | 29 -- .../widget_page/phone_widget_content.dart | 20 +- .../widget_page/standard_home_page.dart | 81 +++++- .../lib/views/widgets_bloc_provider.dart | 15 +- .../widget_module/lib/widget_module.dart | 2 + .../widget_system/widget_module/pubspec.yaml | 13 +- .../widget_repository/doc/tables_overview.md | 110 ++++++++ .../lib/src/database/dao/like_dao.dart | 43 +-- .../lib/src/database/dao/widget_dao.dart | 10 + .../database/dao/widget_statistics_dao.dart | 93 +++++++ .../lib/src/database/database.dart | 1 + .../db_impl/widget_db_repository.dart | 6 + .../src/memory/memory_widget_repository.dart | 22 +- .../lib/src/model/model.dart | 4 +- .../lib/src/model/widget_field_model.dart | 49 ++++ .../lib/src/model/widget_model.dart | 25 +- .../lib/src/model/widget_statistics.dart | 52 ++++ .../lib/src/repository/repository.dart | 4 +- .../lib/src/repository/widget_repository.dart | 2 + .../widget_statistics_provider.dart | 90 +++++++ .../repository/widget_statistics_service.dart | 57 ++++ modules/widget_system/widget_ui/.gitignore | 31 +++ modules/widget_system/widget_ui/.metadata | 10 + modules/widget_system/widget_ui/CHANGELOG.md | 3 + modules/widget_system/widget_ui/LICENSE | 1 + modules/widget_system/widget_ui/README.md | 39 +++ .../widget_ui/analysis_options.yaml | 4 + .../widget_ui/lib/src/bloc/bloc.dart | 1 + .../lib/src/bloc/liked_widget_bloc.dart | 22 ++ .../lib/src/view/node_tiled/node_tiled.dart | 1 + .../widget_ui/lib/src/view/view.dart | 2 + .../view/widget_tiled/widget_detail_logo.dart | 137 ++++++++++ .../widget_tiled/widget_fields_dialog.dart | 155 +++++++++++ .../view/widget_tiled/widget_fields_page.dart | 160 ++++++++++++ .../view/widget_tiled}/widget_id_view.dart | 12 +- .../src/view/widget_tiled/widget_item.dart} | 134 +++++----- .../view/widget_tiled/widget_like_tag.dart | 43 +++ .../src/view/widget_tiled/widget_logo.dart | 150 +++++++++++ .../src/view/widget_tiled/widget_tiled.dart | 5 + .../widget_ui/lib/widget_ui.dart | 4 + modules/widget_system/widget_ui/pubspec.yaml | 64 +++++ .../widget_ui/test/widget_ui_test.dart | 5 + pubspec.lock | 7 + pubspec.yaml | 1 + 91 files changed, 2353 insertions(+), 730 deletions(-) create mode 100644 assets/article.db create mode 100644 doc/development/architecture.md create mode 100644 modules/basic_system/storage/lib/src/db_storage/flutter/article_db_store.dart delete mode 100644 modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_bloc.dart delete mode 100644 modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_event.dart delete mode 100644 modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_state.dart create mode 100644 modules/widget_system/widget_module/lib/event/widget_statistics_event.dart delete mode 100644 modules/widget_system/widget_module/lib/views/desk_ui/like_tag.dart create mode 100644 modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_fields_sliver.dart delete mode 100644 modules/widget_system/widget_module/lib/views/mobile/widget_page/mobile_widget_tiled.dart create mode 100644 modules/widget_system/widget_repository/doc/tables_overview.md create mode 100644 modules/widget_system/widget_repository/lib/src/database/dao/widget_statistics_dao.dart create mode 100644 modules/widget_system/widget_repository/lib/src/model/widget_field_model.dart create mode 100644 modules/widget_system/widget_repository/lib/src/model/widget_statistics.dart create mode 100644 modules/widget_system/widget_repository/lib/src/repository/widget_statistics_provider.dart create mode 100644 modules/widget_system/widget_repository/lib/src/repository/widget_statistics_service.dart create mode 100644 modules/widget_system/widget_ui/.gitignore create mode 100644 modules/widget_system/widget_ui/.metadata create mode 100644 modules/widget_system/widget_ui/CHANGELOG.md create mode 100644 modules/widget_system/widget_ui/LICENSE create mode 100644 modules/widget_system/widget_ui/README.md create mode 100644 modules/widget_system/widget_ui/analysis_options.yaml create mode 100644 modules/widget_system/widget_ui/lib/src/bloc/bloc.dart create mode 100644 modules/widget_system/widget_ui/lib/src/bloc/liked_widget_bloc.dart create mode 100644 modules/widget_system/widget_ui/lib/src/view/node_tiled/node_tiled.dart create mode 100644 modules/widget_system/widget_ui/lib/src/view/view.dart create mode 100644 modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_detail_logo.dart create mode 100644 modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_fields_dialog.dart create mode 100644 modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_fields_page.dart rename modules/widget_system/{widget_module/lib/views/desk_ui/widget_panel => widget_ui/lib/src/view/widget_tiled}/widget_id_view.dart (58%) rename modules/widget_system/{widget_module/lib/views/desk_ui/widget_panel/widget_tiled.dart => widget_ui/lib/src/view/widget_tiled/widget_item.dart} (66%) create mode 100644 modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_like_tag.dart create mode 100644 modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_logo.dart create mode 100644 modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_tiled.dart create mode 100644 modules/widget_system/widget_ui/lib/widget_ui.dart create mode 100644 modules/widget_system/widget_ui/pubspec.yaml create mode 100644 modules/widget_system/widget_ui/test/widget_ui_test.dart diff --git a/assets/article.db b/assets/article.db new file mode 100644 index 0000000000000000000000000000000000000000..2d4ee64f0360e76226962db1d93b457a4817b9a3 GIT binary patch literal 147456 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 z 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%0AAn;!b&+ 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 @Y_%Y3Qz?~ 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

  • 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

    =bWEEA{?(co&nlD%svU16-e5lYAh_AOn4H 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≧9fNU?ZoxVwXTi#+s?LF(p;Uo;DA^mOW}zuqBg*}E7VbCAh+l`N@s_Hn zqesUl(y4fEKc6{6vg`zzTz;C}@5w1%oSDosVA*0TS9d=pYl_MwzAq_ z*N&XDVNRZcIf=q@#w6|eTo0Gz6jFIC<%Z;JmOB~pf<+%&06`cD>U^WN<(r{OMI+Ky zC4~c~06jrxw3xQ19>OD<_q}oTB`^0CRTLG(Nb9yqsvJwQr?tD*BOZfK%{QH3lc<`m zMSvvq6QQJ@AY2!gBCI#vr5P!V%rfRZgRX($Wk#bq%AG4tHKAc6B6swl%{7*H<&xc&^i$&y!wesx=Lq62eSRABUkT0#VFVa>O;udD#hB-P{>d zo+~Td&b)aV_*B#=@}U9rO-(On&=FpN+Mm~y+6kEeKO${6V&d_4zbe2Uhxc8V2@~)8 z;XuBY3MQUln?g;e$mM{7C0H|pZTDjAuDSN3*me~13FbLQjYcmh97Kh%BE@q4av$W_ z0Y?|LS~c!Li=FbVtYgGk%p{>4Npdh`v)8wJlUBm-*NPk>(jUCKs9+*JVVo`+jm~*K z+0@#!Hs09!Bs)ROX@s}PT;$hF#iP}+=9V(-wt|TI>__I$o;QD(Ml|Aq4Hcm%{|lhz zrtED{aZ@)R_4XIYq1yh}{=qIWFO}CnnPwuQFj;u6M-~X=lW9&;3PZ$c!1Z%&VmmGa zI|v6utaw_Wpax0X$mTmodNbF~lKIZy@s9`J``tj-e)(~E@X80-b2sTn|B>JIzxhSx zWSZZcIFUL3+Tc-Fiv2o!qAUC1^)gWr*Q0L-LnX2&1}|*d;{6OeNI0$^C0h`bG{=Ud zX0=|RGHq)zmhoD|M0_2VZ%wr|R>2$t*0D$p7;mhl1Zp&8Wnbgl#l91b2Lj{xK=xQ) zcNCXa-mB5%Ngzu@^);?f6Vd_?eOzjlG`VfS7{}0KP5)pGVm7y;eIZszF_i^c2$ZsZ z@wT@%QZfqm`Z%l_=ptlMb6wmAGI&gQK`Pa({GAX<$uYMHF|dL4*x>PwOvl;&(_i@X zc@RhCrq3g5DYzwh+25XoorzEtYsjGb?0mUi?0Eu4IdIXY6o6ICxxFBl-4}4KbM#*E zf->MHR3j)gV^fK1)MCeWl!|i7H;>FaxK%Vg8?S-kh7^xhC7P>R>tS>>FOUrm1z#ZV zv|E)lM>UN^*@1_i#=;ROVAw;ViU~|t&zX4%`X_~GZLwy(z*I~=WMbZufZan`ed6VK z^=5EYxG8Pk0u^JK!8%>oxX<8VG22$Zq`!0KIMqo9-c)s1x8S&T`g@l}5w0|FYLr_+ zQ}kg>&1*{x5P+abPC}WmQ55tL+bndZ2$WcfRG8nsNkZG42+8#*99w|@qyZ6`QN)I= zPJ$La@tHX`160ie1no3}lW$*Pde-iw-6a#|-KwElz>GY8h{mZa(g4H~Nk+@AJ$}kV zMg07?1l;h!N=T8YX#<;x>MM3^vE#62-|k&r%fEg;Sf26KUt=)UW@kv9!ji|U(vr@C zNI@qS4Q@JW%LBBuEdS2*+gKT^4#fh={r~4h#UDj}e#b7qcNL~X?@b-7NEV41{)aR$Ax&jkMOaK7JmwMLJkzy@naKeE;gAA_pSt>g7azu1q zU~#CPo_I0j;?UZeV;+KpSYs6k0Ay1lIpFu@W!?+J#~b{kk+QbL-~$axPh^?c#j0`Y z6;f9qtXdSdtrn|d&SpJ-KkpLSg+<_$gv4et)NUfxm{kzo0~8#9E*lHY^l1ZoJe1b{ zZ1jdg1(?J3KXM5DHpXqvl}dU$ntmz1DDHo1*YU9_1`xn9$H89Od0<1jk`L0dqI1JI zNOe)jYVaT3ZjrNUb8HI|ZMU=y_rPT-&7#{naRZG1O3Kd$6|!&p4;38NEWN5((8-%a zF?jiGk|9Ugoh2NDZ=D-_|0uGFe*NSF%rUb38pIwFd*u>u;HYksnxt5}Kwx4DYJhu~ ztFhKc159~8B~vE;fwu)oNCI^O2zMfSgM>?3_9U-6DMwp3OOJfml5jeXZ!cKL z={TYjq2U`~5n5HZvhAKxlCM<1%Tus1Mi4=mWO+D66{=dBw?eCo@X%WkL$@ZDYJo>% zB|-tNY4kOmY+OaDigR`2N^CkCA1;HxWg;x0=IOK3*O0nfDKP*U2Ud`zmvRPM<-G6u zj^h)+_;kt|Zd&3hBa)R}s&|PVlD0?@SbJMl-2?-*tPuq)&vtlKaVNBF(0nhTP!R;% zip-^YzartYCSZ(i0wusnkCB09=4&YzDlBmMsb(H=qE&wQE zr;5P}4@-xRaxm9YNhtiMBgYzg*=mV4?QDSYm~EY+3uT7B2M0=s&o9N47CMwa-vJB7Yb5^~U6aF;jx0M!eDLf9_nbe-A@oLh1c5 zN2zTb%8X);=YhrbSq*ID!kd70({i60-p?41dM9=FH+DZqq~*1#AT57L#DyX5!*u_y z3?(nQm2QK;ZBPIH4JSygsg`7euh#8Qq}*2WlB7IEb7@kZg8oSXy{!}-`RZ=dxE^@s`OJG_l^XZZv$2-c?jI(ISdIwQvXzeVHs5a^2CxD8h3g+6c6@90xaAXF`SP80$*c7Vt+f29)zX4Ula*8AIE) za?S4+;Z59MMwDn&cd_GX`n76}{wl>wu9C_wWJT;S*H{00t-tb(-Y!yzHp?y#rL9qB zX@i7(8ZLjmDvBRvZq&XDvcDiSl;SOpb}Q){`*YWa!ztIBLmKnMWxDYi^jdZ}Q@Iq;=4L*wULaf>vZ>(># zmPdN^;3Z)2K~0MMM4esX5c)$bo?e0N|408#5&paTxeI~2 z5V#A0yAb$efxwZeyB{Ea^5Z9puHJcma{lbwj6{kcg19LX^IIq<>90|~L*kObd!8*M zi3Q@DDYI_NIQlK|d=yMbo%D*S6PtsL3m(}tP4Ni+7vM_ryg|0MJZ})mG0&Sv^S)V- z_szn*ZywA0=JC957MVA9#-b&MsnhJ79nMl;t63}|VZVLBoN)JK1OOv#Y+uAZTb9{` zb5q{a-r|?f^mv{eR)(-ZNiyu#wCV722h%{noJ&ZJmD2C^!AyG{mS-4TehD&OqO z0)>_FHA3ki;4(w_4M1*TwW-WtJ-ZHQBO?YlIq(+GY~4m1Gaq$mqRT?@rx@ z_ZKn=l*ltODdulE=w#qErN8OuASy0Mbiphq>hr(W1--uzpqS`*^DKtiD*@&@93Wv& zgU@)QsGMB{VI9NKUzG1Gj7gZWM|wofd^&RJS%Ysts7!U zaKp^?lZbDa-G8~i`)dF0E)y5U3gjoPNe*^9NDIsqboj#sW}=~KM!i&>MJbI2ULs8IoH>;A3yFsjCkM7L_(g*vBPSJ=!pUB&){8x4wM5LWf-RpT!{QwoB zM-pIivzRgYDhI_#At9=*@`k49<5}pfIFTvZ%g8TJ$jDGnWBQEm?_d%bWs^ck6Uk~} zyQ(yI;Y?szHAUhoe;iS6A1NclpAAjOz*B+n#N{)0P6us)BMGs(JfN!jWNUSKSq1$; z^jn!FKh&Y2ss%^3G`FVe%FCXlKc*l*3>3r)Hn)_QJxza1!J61sXa!n0Fa=G8fZ4*m zJsaB+uP>*_wowiXJ&U8!TVnIU~G8t_B<@jTEZ+ zIc&#yezi)dMbOG%oiMJ`XCKU_K1*`yEei>CpHqnI=Ggv(7xNE3tiv51ROlpLRh?)- zw5JMiDJpI;BaZbOUXx+vct9Gyp(PmD1vkW~%6YZ^ec+MF{y8jP$eyA?~~=y1MoJCz&-(-YF(gvc2EL%$Mjz_15>6sj$M%E+5-dAkNY^uCN@i;Y|gJ@Z~ z_bgh#-h15g`SWJsi?779Q1q#aR>2oODX+t)kIq3~&Q+P-$#$`PJUup~+B$qz0gsSn z$cJitNR#5)@MF?Wk2_fi~MhF7grNK+QREM>PK~gB*NahRR zueb#%gHsF*?@WkF6*c5YTfAchvIu z^NuSYARN}xy%dNK~cr`qN)mLnu^E-L%+!f@k0m6_VB z3Q5#zp<5hILXw}y4H|j4q&q;AJ8~#lbgYs2qo{I!XTR-$kctTkp}prvAF^MU&}_M= zcNXD^IbaA373Q}Ah-|{uiF%Om#mfCeZ`6>pM;zgFfsm6$i3(^idU5G{IsJnx5g7fd zIuE3VN_e26f))xT8k<@n1J=3D*tozn9P-XW26E>j^5Q!$nM8~m?onkB{RIBp7R@)E%PmileDgGSM4`M49U*ODI3yHM z(Rv!BK^=LcmXO|r(s>_3(5T9}DE;F>lbW&#u6NAkr?k*N`1jF=W_k4#4K z;e6bA-7kzU8Zm8#JKr5!TwHYAGvD&|{&MdtXHINE_Ch)Yo$BV;HiXJ0aS;A&tN@k6 z<9PF?CmeXa;_A-DV@*x=pr?UD-j7`hgER20y&;57&?P zANd#&voqI@;LE`7ec89qf4M7N*Zt#?q7e^GO00>LL?Ve4%nUJ(bxm>P5lzheg$9kmR--yp zbzDE%f9hQ3+%c8s^x*lv-VX};&xIA7$M76$pO?g3)qE&Ec&^?#kcPex3jm*U~@{(rGT?It@uU*VsePi(b69e79 z!JtQ_@9SQR{V->ayTgqUNC^_SUNyHo8Lx}M(Yu)->wB={M_`KKLyZJfDs2RKf4P@M z1<157M7R^pX>O-utqsj`Ta2=rV(wH_V$WcGq;HyF9heuKuFK`ozeX)R&wUUZfPs6Bt`~kS3r17J6g?A{aU`RsRfsB zWRQogF~67DVC3`wTW?z(P(Ef*MK79vQ_9kHy(t^fD~#0~xUd@wO2a&OesEW}q|C-J zNBpe&8Bm3(53i{x!NM8Mo{Z0M=Id#HYOSB%uzEK{^%tT+ne$f%ZyYjUsOkO_G+#P- z^TuK{&up-Wx~N4kWR%wxB7x*KOc=9OPe1`^Ra@ZC9?hOSj2z$Dv!^o`4i4`AxUct8 z-<7>+pZd~IFp(YIYlym)zWj2exae3_eWFR@UIo4{-|?e{7?L>WBAdQ~N9`&*hgrNh zJ+b>~?0~W<>B;U(G=NmR0XcFLRm^9Je3$pGevV*Yn6`$b;0EpIYG+Fuaz|A`mYdjq>~WKZqMzI&Uwc``^cMjIHZ_iWYv#=8e1_q@0z7*M$F$t^AlLyH|5pOXpHo zK%x9+i~vTFI>I1*DvW-rdlfbEkTk;9(ooqp#U)aMtR4OKFPYWSjraR|E@9@Q++TLD z1TM^;?55lmj0*w5QIL}JvLk0QqW(!q2f}TTad7nr?hn-tZw489S;}GvlrTe`mPqtQ z0%#%oru0Ump4=3rrMz)MtunI(Lc{y6^Z*tEr#>Eh=Y5cL(2C5#lbN2Acqj#c28e&3 zJ$lj{s*cqzCOy)v>aM_~XH0f$-6wd`tnUszxp=-fzM8=HwD38UY*HF@Ij;Qk-Ke+d zrdh+9DHtFiEwf9Qh~qWmfPnP(9?f)J%J#gGxpA@ZX^wEe+5IGl`qU}z>rGUQs!|oLT{=<{q8O)C!^LR#U0V?APH-vvs zT$cqFK0xaboe`)=T$Z2b0p=+NA{8AtN5jeN>&P7XG~2x^d!pMrYz&uRL)?HEqiyW| zQAttc;fL34h?LaTC0f>lW74$x>A+7q7m{+4gQ~S6y-BTuDozXP;CmD+oH=}h&WGRa z9XS6+_QZRGZ+)IQlkU6m2GF_xzyYJj@8muxgro=geEmUVVn8sg_6~r&- zwEhJN$$k;d+<2WqrCTNxJ$qUn$!In?fMEYey~HKza~re3q_Xdx&<%p+P%YBd?0UQJ z%KpCV$K;Sl;W6&=?q!(rl=--!l=76J?6&93KXWHt3uJ6`ni6p!D%PJyj|maffw8r< z#BP8p2@Zq5BN~nyGXaOsYkop=lxg)JKL-Q_brGf)NYLN=HgUyoT*&S}*WcZlJ@>o* zGrc%fq@+FH(dil8OEHD{&$!!MoatCK%HY@3@*-9N++QqFPd6B~205>CrUvebtFsT9 ze}daUdr3asBAFuvpmxA7&1|g$dhJ9eDp!>|+6qf`|do?XL8w^n~su z0MmmD0$>Wl=3fgyM$-M?DQYje_fPK~HF3{`znQS;p2PP{82|He`^L>E`TLSJ#s982 zSv+R!Uyl8gF&D-}MqeKN)6w^gIyP$F$WKO29r0S^pCkV!;zAs zk_~L5+^`irq-=SS}a!>YTmpt#gu^;pq=$CO1f|Lw)(v2kUJ_NcetoSQmBPYJp z{XY7cJY_!Eu{P1FT65R4l^1F@bUb`|RNc>?aA(jsr_81LL2gc0=jUE+kB@Wjb*BUL zlc%`%r%+!Eo2>rBVK2o3z*i4LppW}7t|Gb6m*)Yvk8(@gX$l(}Fr;S6C40*eajC$7 za&6f&61dnk2NBOcS~ICLYYmo#c*_-;t~QIAEkXk?wZzm+z!D~O2z8v;L*>)y$Xk} z1WnhD44nTEoJ0SSUhMedHSTxO zTMtcovBDaC=(vTy3>z>@j6#Px<|+3(bpI+{#Y5#LxN&Qc9#<p z6OTUGUGypqHNc}=4f;5Bn-?eO3oo9Jfp4m7OC`YPLD=?ZxO90edw^f>@BRc*A#n2p z7f)dW2xuLPcOT_`+kF7TeW=Wx9K*%w@5Ka90`|z|Q@-;RR4td3ahhQt*9z&ZFzT#2 z1`7k_6Qs#0ks>?II$yTpYUaeAfsbA@!@_ofKp?ZfC-X%+R(#|u zZYi%gL@EHIEgvC~$}mMF!z?~xiTiEBhX?1*EfLhEtGIY}^9r`fRUC*5S8tgPP2^&4 z=H0y*e2qJas0MKH3(T#YZ|NSTdU)hO1zcIp;_vMLs>cz=bi*p8bP^7TyW_+B(0$o zHwT3R)CY&ofTij0?UH+?@Htphkw^92Je74xjWJ@mdmjN}^8Ck2O135`?_*1woMDU@ zLeSK6MIvxL8r*d-dlV`WQUTPs-%x8-T)g$`Tr>AM_g-Ag=T31e+=sBaztrMCF^+l~ z@(&{$1W=&)psVfn7QiJ1JunG#AS}UN-bS+Rmby4(gUwiAilc#hF_N{jT$o?9AZMx) z6>WrtcB~#b)?sGTyosa+2M_h1zLtHnGkfB*?7mKXhbSo9bs2Y&{`A#MXD{yRb`^(i zV!Ll-PQRD!{sa9Vvy4 z%Tz6FG+yzM?)Tk$K;SD%-6>%IioV<;>teQ$8d3s_O1o*f*2G~|A$Y(-LgL3O34;s~ zDr5Tq3-sQ>7r85#w<0(H_*8b6o4I&!@Yo3@(v>~NQX8ziddT8++E=dQjt8>NoC3z| zJ_xrwWVMCZX4p!C&B8pbgwg|rr+k)mWP_BF&71VlY57SS|;b)|>Ukdds-!Kn!` z9c~5ubmMbSSJlQ^lFgf<10S8q9)@=X0Z_;jL@a&12OO&qM2TlJ*Rg}HkowTJ_Cg>yvH6#-o^Ft1G+VR!;J#B0Nm5*6DgarYAJfxSQEC2Y7zDNaSx_djUWp4 zqulB4Scn=X&35m1OClvZskF}Cu?FACR((A{OV61+N&3a8vtlcxHB7YVm0)i@oF&1m z0CzXqZKMGAGj8_i7eu3Qf8`lsN|32w=JGSs^%l@KSdW$h1^NE}?V`g)_f}85KCyDb zf4t{!?%6p0e;eOC?#Q^YB`a|I|LNHOFm~IR-;MtFqyB#6e;sixvK@uL&W~Hw^<99i zY?`~yT@xv;A)y)}0UN5CFQ7vCHKJUF0Ei5~R^^?PDMt0St6Tr2x?P9vCu9=08 z!mcbcZ9wd!hSmnunYRxe z|G2W}4=U)K*p)f`k%%$=;d&QX4)8JAy`L#=rt2-bQ@wwbXxgcL|8TvVh=gx_#sY%h z34>sw@hd=3S5^>&z4spm1if+jAP9{v3xaM7f@9oR*JMEOp*7&Q9`iX`7#a|%^)))txQ^RWp0M1QA`?HliZ4P)Jjd zs=9d9%UhD$HFrhkTJ#RZNWmfevuMs`V`Eq21fnzRG%g$6xJlE$dq2s-9^>Gf*-KsO z=lO$uS9YPWt?U@-F6;U>=2kYzUFtp%n_E_-;8IO}`WPExU4)du`+@igb%;_8 z;3a4r#bknyG}$c08r$#}qGi04axvW~KmgVvx-nRfj!|3}GF=yFDqU}3BMRFFB_F7k zFhbdV-I@KJnQI5L2VTR!SgR4SE?l@H4^Mh&O-V5i-x>_AHO%N}o=YVf;$b<6dBCbg z8ak_vy7$A(jhFy#d+-R$vAf9|qZU7(c z$sGKE)Q!-OOI38_KG}62c(nX5`M3i~BXW)EyrUT|E9sSo| z&zwDq+pOsB!4c9G^#s;zFLqSs%14B`$3M>=xr#|Z=-%}Wk^)YGbeSfRNL3_Za2DSl z+)eiAs-y_gm?c|l>u8i)VE71sW6{XaJTZ@`G9KXT)WD_R;+l*-pM56{BR|{^WSoRa z&;TCq!C*$Zf7(TIfJu{}fnH0aNx?CX9Km?a@YjOYMhTetJQ+u9(m;(R8i@AJazsH( z%c(Gk7;4x6p>T?~JYLb=Fa=$-go9MKuIz74VFwFx;hM!tXJ1c%q-bXq>RmgNedj$O zMs{~cX3y^cWSEmexZMA4d!};_A?E3iV1I?#jo8{nB7r$GtJdMxcm~5%ZY(?nn7nb= z4E2NQ0E3*>$dGFA58MfA2$N`HERey?hn4%R?CQI^H*@HKKpj0pxScsirZx>-bh)20 zGrkT+xMx(Wg>|V;ncu*jD>Q{9*buNps!`3{1n(jYX16I z0{VWTkWB~`Nb8e?kgB#0mVk9iiYV7;Y-#NvfXxHj{OG{VBV=TFW>5d|H-TDm_+{S4 zZtcM~>HoEhJF{H#N^eeb*hehBMb+|o4;3ovbRJdRD&1E=eT zRh0Ni>5YOS=Bie5?MpN!qcZxaS0P7;GgR5JHC?#O!@LF-D*(C2^5MkMcDYYNkR;Aq zbUcH-AfbGs0U%R-51c!N6CVIDkig6Wtlb#*`(4FEwC1>zNOjR;OfHQfrk3-r1XUu# zjD8ViUl zTGT+awFg2C>Ru<}l(V9mnKJc#iGH_COWm}QjN#8@2C(rFnXw!XWNM_~mfh#}_nrj| zA)ppAZ#XEz5#ZW|-N2Dir2oG!a=hr?g%fKhr0%J{XUh2hZrr~w`HSL9W8WO}7o-1n zboHpe8&y6sjv{wIzh4OKUfo$S7SwCcy3)vhq6kXFj?m)0cMXDRVWz*_bx2h7U+y~W zEOvgVcoc2N0M8qg&~?|<)IgnqlH>4@xe%cTELy?i#m?aS?J#5PGQsTm$EEB?q|a?`?-=^WgD4 zQqSh=ba#za@P^=8gGY`*Y>$!z3vW!|h(KBgZXUwzV&LZ6eb}7gI-l%|i7Uy{HH96c-VD7xf`>y;N#-E_TnX8uu-+322RrWK8kUz?Fd?#jnJl0r? zvVn=9f{885b%?s&vI?{UEp=S{c`~#lLq?Eaej4Z?-Z;B8(~4ffS4C{vhrr|jhj#@1)8Tt_KzRj%dM+;QP_}47+We%L#Pu zjNBoJ9-ct=o45LV_xO63chX?~?)$IZl)8bQW%j@5T!yY+OxKo1{?{jC(7`(!QZd{k zaNhEPLpw)2dK4>!5o~G2^(-!Xhi(D5Gy?_IQ|X240&$@iR`p;or=YWyG+JJ}3P#io zj#Yk%Hkd5=3wkXuOUw0`PXvpg2O$-uV-yg~e7c;=WI=B}YnKA-w=zJVOURT9SBmZ#?IRRF~5(0Nwx_u&dI3mpG zF(1-|6`W!&Wd#&;L4n}v&d1R1{Fl(K-Hy}O3$v5`1T>Q40p4iNCTDg-f}!I(7xGd( zQyTdX8(3z%p|LvoG|rwRM9J9hq}N-Wh}R=RJ{_f$p*Tk3CyD{aPMOI$$kqUVG(~f8 z(`$jNk7%JyWs>8N28;b5an>YaAe9^~tC^eyg$6}g3kW~YWQ8t@TPFhYAv_ZpAmyss zL=ovYfP*zstAg0Ev0zSGVWJEx9-Mu&<7n6%-9Yq>G%66zs9KimNJ`BF7^b&!Z$Er%V2PO_H zw&SV~j~BR@Sg(ILkC+Zsh$)x$(3DF0mjgtoOICAX{VaI?xT`zoV>+wSt1zA5_ygRA zZ`0SFdnT$YniY?fD0r>cBmed@xc>3fgWKwb6Vr1XPsB2v5%PV#hV03mG2Yfa^wtFExq zaefF_!tG7CEvAfrU$y6W5AhJOgG_#4T?V~^QZrDv6n-j>1VlRVv7}oCO+S1bL=D(| zKXdjixF{*x#A`<~r#{Vebck#WJ{TZL#%tl*07={jlGyfPf<#sLZw`{saoh$-Cb>U2 zRt=EMnFM#3`v^BVf>vcK{K!DdKq14n2Fx9|CgA=Yr9H8RLgs*2d&)c?gV!NMw$ZK+VbPpB-{+w!_c_W|1*eLx9Tv^+OP*4tbad-yCrA1 zE0K@h8m{;Awub9fzrEpF^}qS6V=)k@8IzJpfHv0JlEkf#jN!tTKa|#4b#g{?%L@1X z>ew&5?p16ILau_lx9Swuy+ckaaW8ElZ$8lkAMp=?Q`pVZ(KuVO4(k%&=&{i}FXgeV4#4X2HW0M0hF3IeUwf9{+ z-FNM^iCd3t!ZJ>sMBWgL#oT7WNJKcyH40lYulNM_o?|~l&t)@HaM)Vd0?aiMWkO@~ zqp*|LSHG~a_^aIGe*f4;BI|QqI7+G!v3^PmBWYB=2RS1n$0rKG8D#>muDXc4NIm&# z<_xg#n&WpI`%_x5sk~sOWiz;fcATk}Gmy{?>J=a779D#D-A|hV6&Y=>=2kKI#CBKT za-b60q*t@BAz0;0>W}>tLnxhAg%}(d0$l89_N*LXJ-ir=;#RHgjp>p{b5K6t#Ihl1 zj=CA0{Qz5~|2l*?hv_oL#-Q{?+k+OnQ;)rf{^rhQN=NNf#G1h1)+b(JogQ`We^T%o z_^TBLiQEC~9P2h7`w5+#v)xTDVsr3rVjPsP>oh{^CsruODo`&H73B*)Bdt|QEa_U5 ze-e>KNG_DLFaTRryhrf^sF~v<^P3HoAL9{kes8jQL z)DS1)wK94%2U=A0=Jpu^=&NODKLb%JWCSDYj=ey0UGxl0z8B)suFh2gdQSB6UHdvSkS7f8ig&WF6@5$*z@Rg zQN@l8#kl{)Y8%=4$H%MFT-S!a5o?!`w#dF5~+p!g6-W&Z_ zqn{u3-;bIy@{ti2M?4T|FZyd#Dsqd{4UmI8ThNQ=q)?w1M&U*F~T%lc{ zIs70L3=-)CoT!dAM03S;B~C1^?bT?4G*D}`#HM;cGGHV>Qwj$|MneF+M6khhYoQaW z6=3};oxr#raw|*g5EUf5_l7tL%f!?Z?Kv#53fLd*1QOqC$QI0Z1_JDlc$fp|jR^T*nG z`U=jBOj&mC_;Qy^U&!u}zjVDr@a)fg~SB*0jsJ-XYiDo=fmpG!UpvS7TqyPp3+2 zO?ybwqZGfe`iG*A2kmLuFbf#HRnzuj3~ht>5LTX~I^xLzXcWR&1H8m6? zKyc7WS7BNYrze%x3g*#{=e1Y+_1q`wC%El5_Tdi7CX>C{_JgvCXQ3P!LLd1;k%-?O zhtK^t7oZFY}IwWmMwk8ewSJPXtL17PVF+UR`~ALE2r9ww6WGGfNUnFNiXCR^RogKFlu zIN%{`$b{n+DAlH8Jc6>o2nbg?E(xN+OQG+J<9P-`nAUL#`euL-9+@_?ChVJ@tNU2` z7wD>t6d!9;s$_?+NNaKY>4O%lN?Qg)j=|d3Ixl&`-eeu!0wa(?OrQ|>BPg$t$(c7Y zEXoP}V)ZG;SU$|rM{*0FxrD4CT>(Q?^9q$7NN=XCnI4Iu6A|kE4QyxRJ|->{a@G>i z^wv}j$o)Va8NKfTktC#>a42#B&+5DSp4r}rTx(R$1AL-LQQaP>AfMU>tdFFB4m6(& z1F`8(BR|qB#7@-f@vpE0`&K6ir%1%F4jFxJu-VcqT2R4w0~9fA5mu7kL|fCXEuAhQg*~8hgkkg3J{WZ15m)O1 zTy6Q}3iBdH4{|C~#Vc26S*{#_qlx%G(GX1227r^&Kf~fa;Wm^;-hzub+&S7-$75s+ zQ`x!&M4f_vKCj3(9Ics4gTDa$o&}OXF=VDnV9SXucN0?5(J9h~9ph_mlaxmfv~dad zaDr0nknI8OTer-X-wH~vrZ@7qR^%U-mv(930I?g>f>Q z(J(Rs1>#-^jd;@;Cv5CBh6J~+Uk74GH78S`XVB5=76ow=5SieNW`>boY37em4xCF( zf?`S|pq`8un}V8WGidb)^#vavNWX-6K9nxOJcUVs8(HS`MfDx#^(whED<{UIsq|81MtfHg;kjz9u#gW4e3YweEDU>6z)Zrf1FS zHS12VxvG+wNB2zs(f`c!TJzg`pL4$Ref5=80+RO4RmDM7-*+DS?6c24`|Q2X-k@;m z7p^Ech7vR810^#d{y~0sh78mR!aIlxCj-w`p{W`X`f&>qRR-=^%%k`1kmzC^4KkB- z{x6*Lw*~lb>@$XeF$|1hULh;C)C_xFzS5BGBDd zTy&{c=~60;B^;WWj#A{}nl`zjqC%zSrI>$#l;)%btD0XmzkL3J@~X#FVUo!jI^ZBm z6%aox-r`g)T~fL5v8ws=tA6szE66d|N-a0Ez#tC@^Ql?+3MCr6BPn#q}ekR(!42E((!f~e(2y=x9dwA7kE{6N|guH$|7c`0fU+} z+2L!)Uw1PuqHQJ77B|x*xw_6p=cr?;ud?@YL?AR2YT#zHW+1@9fMxS{ ztX;dB|7T?kCFP0_w9!>(J5>Jl7q6xNS>4N#{gxXr$f=Dd8(LyOj(ib z<%1*B$MdAuj5XrG-vLWSi%J-RKEq#_-jQoBNB@<<{!`v=2uo0zf72W0|ILR&yF2JXF%?Okg=*48T-Gi87gtj$f0nRsY zCOg|Uggj;~8p1GuJqfRCkAOL;B!w}`R_{oLX3Yi5Vsmom{3FnH!C*aMZ)|AbW_39Q zHM&Ra=UQu_5)pK2L^E_AkaeVP)@h>c)t!nY*nXzQZOpXQ&I0v_u*d3dou+c5egF-L z$0h>#kQq1PH{3dIfK}V1xI|1O85X6jg)v+R3%eYJZ20kyeUNF>_sIB#0^srM8czf1j3+{ z=cYRYPR{k>z~P1Nhw9bm-4L~se0y0Ct0BT^swYD8+@y2^P{JvHN?0ciVyUdXob6rT z07-=uV?iq$II=eFAh@-rm$&2Cy{l1$HRh4B-DX}J8$)Y=k% zTYjwM#s@X5aKeAALDH){a3RGYbjz-%_hH_F6_cx67~ITl)LZ$Psjc8R6jo@d`DT*J z`ly{A(8r$QY{^y1Q0OUag^vY>>+jqC<$c%ROcHS)Yat#gafiT5!L`ACabzIB^5Ee> zI0awYuBBQl1n`u_UijL(4j!Wl>41M$F@6JsJNcjU_W+}@VJh1xR2<|nAsi;9kmG-4 zbrbqt!^bc05T^+jWW32^5@CU*fySEh7OLYQqh@;<1Qe25a&au73Hn#@E@bUSaXl2& z4$uh|RdgwmkZdVo1?Tw4JJOM$886cf8X_W)m4N4KQRbG1Wj0&2ze%46D~$7(Ss9WI z0i<1JKvsZq8_x3OHlf&vS_%52jVW}Y(L-!J6b{m~OGuy(H=OgNC}nc3HyeOzhq8m2 z<~<_^}_q`koPl+dm)M3w=w;8T;3$2lfT^n%7iiJ=IWA8WBJnDfHK)0Il5 zUAYp~h%v|!k|8q^Yi*YJo_pI)b+zIeF?^%SY-t2*&A~YhiB6*})sD3ho0TU5p9s(_ z%j@-@?>0Ts8VlKbRTci@bw|r_nByr)I($~PMj=&56vAPw+NrbGtV8xrd1F|Rta$p@ z2EnXr?{x~7sG^Pf`0g<*uLKTzN&S9FNDJbNprt+ugjELJ4vy0{l$-SUL)nI+9GVyZ ziVJ5LR`GmUg;gbtNm#GL*+Z~^AIxR-*83H*!f%fuSnb_WRuEuR-xfw7Yz7Pw1S?0< zeA$egNr}x!JusU2e(vHsxzARJ1snU3sxsS9HQz(3cBlfYBDCg#7tuTfdhU2JMiD0w zJj{HLY{v0Dl(=#JFS_g9g30Ib&)8=S17jE%!@w8@#xU@$z(C)W?$llIPdhrjK5xTr z-e%ne^G9jc)rMV(nT^aAe(@@(w~=$BDV&!<*C&qUFZSqze%1-aQU2i7&SKAeV9DEb z-l(M$5Am}f>^g@Yar~QNi}nXvsB6C1YagL-Ks_Np7@nJzJ>#mT+}MUJwFCPMj)3ch#aGVE*6QG{-}-PhtnwcPEJ* z^gsBEX_N0PL#S9-F=~DwRwBK?q0E5|VIvHP5=7k3972zXxvGwyRn+HdO7uh7`leya zml4u!wbQVr{R3T=tLzH7{3R(sHgbS`bwLV2U7!eiCcY!ywo}wpE%@z7qBG!>6fb;p zGU?PebR=5@tkKN7uL#-BU>?BHnTKdbMAZR2 z)l?0nA}t8v7S(EIDd3@ii_6|AVnE2Ar&Q$#JeiEvBfSkZ*cj}R_GY6p2fkvS(N_AD z4bk!hpvN{K-go`YW~t==UsN;ATv}urQ6^w7pW{YK=_JLylRwD4N{=wjvOVQjx|Sdw4>6siS{m*VgJRa@GPlZ zQVtK{g+b3@ubD7@+dsAY9-_tHPcMA@PSaw=V-=(IR3=GEs8RBj6hWW)+F7nQY{!?K<;#jai&yhK#$pQ;zsWPNbcDNQ$L%r!3BHLIfs-t%6fQ`_u4M z#!1eWO|Y~V%`a0j8Jx$AizzKFe1>W5c``H%*IZYOB2VPoq6~N>5XrN1bS;huCQDYn zHoZfrMz~LG!tDWP(R?J#IgKnZgQwom%ZPC~{QAi{VrIqy07Tm!h%S|hcz ztW~5Lxb;XaEdHZ-tRF+uCdb;4epprsksqIEGzk*D;=9ZY{jlcV`^m4>SyZEVxMgQB zA6&pX<_5zcGvKX5Nd1iz1BxetIv=i!vYk9VstS&fUOSOjW64CgF9;v*R89t2Pi3^N z!mIsNxEwK5@KS@n?Urb&mKG=0V{qBpKCLaB5i?iGd1P$|%S7BC&UF}RNzkE^JJZKf zuq71_A$KccDCc2C&{SKB4(4TQ=n+zp&C|Fe-ZDqGjiV?rj$y{b6KfA>TNL;GY2b{O zigl zL&hJ1u^?;RLW4Z8v7kpS6ku>7ZRSe_QuqTAvSJrl|Gn<nGYIxMD|)JGUD`%rJo1B~b9&wekdo zI8saZY_|)zTGR8}l3hXM1d?a?5Je$15E{{+tIG!+dKeB*LtkA$bgMzh)}@nu<&P(+ zo;mS;`r;lL-L0WX+DU))QTny+P%NpeIqnW%X+uwK$!~_CC>cDDl^&-AP*`HkI+9={L{Vnt=X=(ll!yR#sg!E@grRpaQ;ftr$W z783plh(J-5iC9yW4dU>K5C9RlENUFR8H(LAT)arlJX^LJDV-6FM51o)8$&yN;mxQjf$d zG#m3-6>7MJT*c!cS&}JL*WKbCBfH3rQj<5E`{Vfp3}NvONf-Ig?1`D zCmwtRDJ>pTZqE$26O&cDH&L?FCJW3?fM`_~HfyFNzES4J?#!iYgO@%?f88$-<(emz z5t<`gg_I1Pq+y6WWOk72RKN*c6PT&YLdixbmY?I3O%LPjMK508?LnPlEUg7TvS zmpp}1Q)KT{^olC1c`?+buJLd;8xzgABW*oY|a__9T11Ndmp_bGTfB@OZeN-XJLrB_^!$q=7jYffwQ0PeoIv`E2AR+7#dn z6g657w|L~E^HON40y@dJA^}h4siu^`3Tod*sVfRbOrhYGx!iq)NMg_8lCE^$SD9lM z%_bEf355XDkijPAToOWqKoBOH!gC`h`yWn(r}0(IgyRuS4V^`JYJ?2t4AUH>8sUR; zwq_#`m60zob8x?%bW>wN#SF|s9}%pEIk36vsyPuTMA_lC1A$NMomH|UK$J?bhNS_U z9E78zEx4fo6%tQ2DKNd=(v#*Dgsq$+lS@7m%$A9ke7v0$I4}%LyBpPyVcJIcg67!9 zct?wn?kY*)Dk;PKL7ua~GP|F?nMoyl>@|D)2-)IM$!2Kkyvd_|PSkAFuBSA!B95St z$a>9g0(f7%x1?l8`oh;keZQwX+y1oY9=?f2zxsIKo3j#EP}a8(i3Z_JM(1uGzm&76 zg>P#2;x|a$Kjr>DaDpP)=iGxWAtUETmW^pNKg>q$VVS_#w^yR53Mz7; znn|3_|5FMo3htgX^|{GAi?>c%f7if-=g0l8MH>tM3Xg-I?(ZYlEKY7)OCAg?2yv*0 zHF9J{OfW@>#(V-Cej-t$nM?9-x(tukBv5IW8YyiYGbsGK1dZle+R;W;O0=zMQ=5!e z19xb>y^?F0-BKqhW*?4VPyA4j73hX_fl{1Rkt!-=fX0MqCoTnQR`#qfdC-T80Nr|c zkqD6zg<2XM9y1hb{jF;VN{=+^p}<-=k+Or=-psu7Ug-84f)CaHDGG}m+P;O1Txl$s zrg|nV0VbZ>yQbs^Ifz8$64GnfNn{1X=9CdYa(<+O76Vh5V(D!?GUJi^j?AU>??4A4 zPCZO3{GL=I)RWX&*Opz0BAQc6ccu<&mgD3(=xyFuGagNweIGyxQ*#Va%kOz!>185S ztuRtycl%;muX|^f{6G_>#(jV;eUm$Eno_+k1(klP%n$wPzTR~2)r_Jv)ENo&Q~`-) z?^J~xNLNGg^h={fxlsQ-NOoMfbZ@L=rX(Qn=5h^3wqHl_^*Ic33XxbjsZG)YO!=^C~{Z^-YWZShv&iYiP#r!!78HBrFzXR|O|3VQ8v=`4 z1`bL@7!kn%11|;*JQmKpWf5kia_>VWGbO^an&|$%%)6)U49kcGEdlc_VLxXpM?T6sR#8whM zW#TId*yg8|+L@=w+a$boo16aFMOZrEuhO{RyV;Q8G~|pfT;8*(Yd7cNhmY+DU$RnyFPrNdO3q~`S*E1DurJKxD-e^!o*}15a zcYd0+EYltGj=Fg{$V7pIhVfC6JSp{CJt3I z*FHopx1md)-0VFfm4=%+RFL^FrOmv_V(grcd0W{#x8(cUjehj2kv;7Ft1%Um%s!sb zV9PB@<*^T$g7lnmxaV^lk5)a}9=GTDTeDp4`Maeh$ZMOIlE)-+t@m49u8c$O!^~x_ z^-Aae`wF%c-2K6{%+y0u{%*?sliP~_r{cDWmnN3q^_vO*Zo;JTOU8XPZduW<3Tsg8 zmOt(b$L^g{P&9LnyT)BwIH};jv~TH3#T!zhTYXM`43|Mv3X%#dqN?t4p2QVQ5||Tu(rK)4#;HxaW@jJq~AQ8zWNqf82i2& z`sPg>NRZv3sC&k-?_glFD!OO54aFE33{1)-D$ROo>pX|&HLwdy5N7>fBWxbV=_QrZ z36NAt#({R`qET<(66d@&IAjQF*hrzW&*g~-8ww;&k=#f+wdRKgJDF=I!Nbyh7bzbN zrzxXMDHpB`eSQYmaer~_9w4W*)P2TXFsZoUzfk@cqwuS-f8;kkzWS0ow$Wsv!O1*( zBmV^S4T}e# z0@pQ4WK<*?H_x1PtBD9wQRpZ*;}gFUHY}DWm9D1_n>i=B+!PtO@eY!tQ4SmTgY<`o z9q*MRdFE)`@@m~`Kvd#BeQYXH1FxIz&T;1!7XJit4sxF%pXZu3TBGX`O_Xw>sq19q z%0%HGDVGoOp}{YZmaXXosYq1qO*%PH0u3OHCFhHyL~|+dG)_&|nn23LSOlqekY^>l z39)KPGA>HOeD)eh6dAkHANC?S9J0M3Jy&Kwj&e67l_2A4OiSgiA zeyf9#syRl2m(BSMM>mq!SU4YJU_{g1A0C?wqFFH0eYhD!qXq;<(MAC<@rr&!H z$6;8Hfb;v^@?*uo`QsJt1b2eLIe~{uoXL(=u`TdkN+h!$1oQMl?3MiJD2Yk)7;Xe$ z`P<4$+dG=N_qpSaO#(`1PIvE(0$#*MLpV}gluop0doV9_h_bw_i0f{S(Yc1MZ^DC* zvMh><2kxR8+h9<*)fWL17}|3ZlbCt;OPO?)tLpS8lJM*1nJ>W*fVc1VJa%j%@V309 zr=n+^@Bu{y0g8*B(4r>jec4fhBPBeCHVx~arPs52Ew@omUBFc5M zVq0b_C1*#f+6oi*HmqFm6;6}J&B4D|QlIJD;wpEc(l=rBzNCfVMo0unekXO_&7n=` z-1^kFzZb$`db|JVds`}fe=mxer(B`lVz#~R&9n>Y%RJ##bs#xT!{W;Mks zV05N8MdFlD++baqzc|GjEqAttDf`{~$N}4Zk30L=cu?-#8SV_XkN`9OW^6L#e^j<> zxSZ(~QumBn;5sQ6s1NIi0?8*^5U-kv5eS1IVDdIcFxALFZGN-)m^W6;oN3OG2f)>t z3A^uhD~^o=_R43ti+&3r!9>7SAk4*EL!kt&AdqqLFj-Y7C=kLU6QVr;RGb1jR-DW+ zvk+5o+=-I%7flnNAWj-l8MODmnf`h=B_BrO!>g~|bkAoFoskTcuCHOGp8*vh%?0(Tlth@hvJZ-ekfb{%JuDJb3i&hC{Q@vvOo+-=mG7#lo>GR zF0CL&IZRVS3oaKlMijU2JC@%2#m(dAa_r5=zr;Gk$cR9WT!8C|$*(-M`)9`rF^Gp| zcE8lU0D~}6fgx5-j;1LSodflZas<9N#KPPFS?`*FX=e-U>-Ynz7P$c&X&WwFB5^m& zAnhcIv>}~xqE&)?ly@Y`$)(*XtD{&QMo^8kbR;*;p`p@SD#bqCS;dkaEt}>Tw(Tg! z1j{tM`-sBe_fbYp`mrgan9l#>3RV_OJ%3j>{*3l> zXr=osMPxa#t3lspr35?G5UaLGmL2{0PA25J#Yin{aTI$N;b1GxEiuTM+3~i)q+y6N zg~MWZvd_4jyjE~>O|t4!BxrgO;k4Lj*jyU5!iSf^4=uKXuV?VLNIbO$4qO*Um z#9a`?mBKDs;Z%WQhztY4POVyuaE?&wE2=ty0E0}>a@qvB1bUQMX`xu4Zv*{ zCFVblKg-m6Cq8$s0b6%Zj@#m{?Ewu{AESWYmBr^ch^0zj`Ie&UMORlKiTU#9&T^YL z$`m%rxqZ3oN5h{3up1JovN(ayW0~X3Rj3=T`Im-mUY&_l`>A-_@a^jfYBv*J7PkT! z;OZ>hNF;2nD*O#3z?|9Al4;t4R36JC4!o;z z;z~tu{U2V(AU}@8XGl)HrJMKqHGS_$B&;YOsu16$*QKC}Bld@nDIp#~??0owX-x84v`Rx5UOMvRqM61lh?Eb8D_M zyCEzNALV;cxp}G`ip{mlV1^pgA8%7(RG{(DVkycMQ%%V}lHy+L+s<@j;9-emtQi;e z+K|7?4g-bLV@G()%$WuCWrVG|n2BiaHA~+xaV;HjB;T2>CMbN=RtBs^Aw$WzP5O65 zTGry}n!f%4)X9UNU(1cH9v8D~>E$6!#@XQkYjrZwf>) zzIL9&(xsZ~+7KIqew0ymHxOn6uC(v;o&Hujw6mJSAks0S3$79>TkC>%*bQlvRt=URAc>vH94$mg@bBx82GmR!la;E!k1c!;9F=y%G5& zY0TF4$4fMf$9ob;S#7j!85k=z?(!GEL?g zzO7}2`1q%EH@9Vcwt+#jL4 zaMprRJ{>x&>MBS*l!a87Ns%4V>V+&zG-t}!9wN)GVeJ!S1kmW52kE&%d^DF8kUl^Ry@thP@WplhBSDr@0`)0TV(UKyc z>^5kJw%Qba<7sc?6(86Y*7c##hhWDktDgsLJQM?3LB`}w7teKq6P9TC^`?0`C>NoD z87S)`s`*%hz(j4$9b2S`meEAU$H^X&w37F^19?I-uQ}!Hhkvw_i$(aREY1g%S!jo< zRQcE(3Z_C={K~KtOXrtTM%x$Kp(?12QsCZQvqe_Xe8LRFlWZ4;HD5K_yd;tJ@l}JIy7;BYrjWBFk zd_zT?7qX-J%zN|-WUA1qGAa8hxHvdWonAV$8X?T%X`qHm?XDTtdR8};MR10RAh@9e zU4lv9Rb}a3t<$SUp_xqd1icqr7VKd$fPbG<*5%7;mFn@bwW5?k^WMiy37 zEgq#bA{r;qamN-!KIP1EtK-|C$sHl7s7!EJy+7s2gzY9gN1}j|>00g)5IM95GKww5F@C&l^|1_pPyP{#Bk1Zs3#Ii)CHkW!JN{Ao5?!DmQj zq83QY>-~!0%wZ6s_CI3)VVLX%>DQ12sKjCqwArwl$$yZc4Hps7dGj?{(`lhQ4tV}L zdCMq(wrSR*{_K2;m4#Ktsa~cMcJb%)YrjFVh-5^uoh=ug|>n z&d3mPi>p(@wFMCGmj;H*9TTYd7rs7udD1_e3i`3(*5*I?rJ22iEUsW3_s!F+O>`I8 z|BJ@|e+5&1fq%w6V;C62z!(PpiD2MR-TfpfyuE09-jYI|l6?961?5!>Zb_6EVL@LI z))8}j2ke0AK&c22Js{B{8uZQ!5+1~qCBYlcM^QHXdjnWbvcE!} zkuIdH2>}P~>Nd-vN8ZB9AA?STyyLtaSNawG_4;tO!4=Ny1~*tku;x|exa;0eL#hmTCDNFX_cKOL1xNEOuQYSoNCC6zjrK~>DrGGZE80mSOtJ%O%3x2Q zmvu##2+5x4@0;Byf@Afx-?|-t3Hz7#UF*?}ath0K|HJpu?()W(ZQt76Wj#6EbaeR{ za2~shs(0JFi)x42L6{EOw`JIcN7!BLqW-}Jb{ADp?Jmmcpgy6{vfQbRP?q*A2LE4= z0UOZZJejqcRp`xIRZ;ljEc(&*CWS` zGUbM+Jm>(A?OKs~CHhJ|!qHX;iuC%|mQ zMtF;k}HR7C9!qhY3_W++UDaH=E^2kpQltR|b0 z+$j$x(F$qiaeIzux5ED|zMn+ai6rGP4*033w!npIE8WA&e#I`m=Gu!my++`=s)*lO zww^+nO!6KFr}Z9bjkcGGH&{-7mA?itlxNXxF3QGOjf|`oR5|%pZqB8uLwJVhFJnO*Z0hL^3UH z(t%$PUn<(!(m^dU+!XJy13@4=oVFN})5AGb_0W~*L^vU2->KW6i|SxPhzxi;BSYLS zWW^cy=AerEBB3Hre=>0S@Xgb^DOA%}2tW5e!cL{X`W!)Ed=S|2hcZ2T)BFC2_f%0UxZzXqoWuQyZ$b|Ij=~ctOOIdC)D}(}roUneG<5 z#f8NMryFCNJDY)v?X_EC4O?T4&mbaQgFZV0xze<2@~t3yKg(@Sfii@VE&A z`~qB1Fu6T*#I&ao3oe=R4Z$u)go{916fq7drsQ&yL^~n}YKghFIo^StHKl>Q{5P5R z-lQ;`A74W-GeqJo+OBB%tXz5(>?XO?!R~V3tmQYPp{B z=VD2oEu`UEFO%y-Sd^kO=mL8BH9B^m#RS>&@_qOIJ#lnUUf$Ws9dx$K^go@T5aKEA z*Sk!9ugGHsz+mrdA|JZXs#D@Vv}X(8TD~%oAa>ls;2@eOO!jnzy;g((Wn_gOwgV`g7fY_w(Gw5o<{VCIJfoGAD^W79F7bk1QA3jfXrfH8~^X0{|D#r&}rbot=B4 z=xkF_pEycau9P(D4Yy7~02i{9f-+w(HIe`IkhLJb$3<~-39Qne}G%(Mq{1iJ0C~n(1+Y zb)GErTok&2B!igsbkv|`wU9T+*)^vC^j`w>rQrO@2LYhR4(u8BEVIERV#Np?QzRgP*(48UMniQv3y_+sm1aC9xV8M!9DBm z{`}0Oz4OybE8B-x?gI+K2#nC8xQCC%%iW=gwdjeK`2WiF$RYddw~d?u8bkErIhT>qc=T;~2zz ze5`{^g1E|?BI(0l3|zk=`KLOQP0r^0UVvdTDH9HMARc@pu6{jz{>mf66WZsliR~w*0bVgyAvH(rSrwb` zn-i1KZRyN-oVsmliS3BvF6;*QOXl05ug-}5`b&>*KT(YCXO?c-MBOVM&fBOAH+%04 zvOQI2#Ex~jag8UCwgi&@OD|EEETQL#+HkQy2#}O2a({RNA^nS1PA3r!gS;H=#BC0o zN+}w5*E*<8yPlQ=)5O$*%86j3IV+Dm?p)pOil0E}`l6XLH*J~(M5ye`d7?s<96*F@G_j$EVp1a{~`9HPOq+Id2(ajQ|@^0Q4O`2O+V0-Vx0?!B#(Cbg64(3n-p zkZpc&>Vrm;&nS>sV26tLgBbSMz~Y-d=<0L;qfHUX8Q^$NoXn9ULpLZrle0tR?j!~5 zu`B7LuM=$3kN-86+Vr{ZeJNxydWsCVAP;P+ELD>*y`eqU5O30X78*#};1nX*`;iBR zuLdE32p$q#xUT~}Jy9WrpwL8-In;}6J?W#b4P5&jq3E6CX1++s`QY@>{=Y%~4havL z-u*QJw(j^YgnfUo#9c`V!yfI5MUz$Ys}|6zUx~@Xa-fiFB6|tMWYIxV8cN1MONB~P za9j={=B$pT;>~T&0uuYs6rwQ2B6!I5BhG6=%|+7J-_)5!90a9@j8>=HhD`=?9q^m0 z;q-^chR%`=Kuj>Y9XzDa}KAEm9TDbdi$YcdxXT1y2Yrf5#y6D)Uc+wm^yY8D9$k8(E@|DB7`mn`u} z)2lRODvZ#fSMED*`SBfC>MLtpO1$!@-jddGZca9-NVW~ViDkWz>?ca;Po&IAE+jq^ z*-7;t$IDJqSKz6vHVIcH900i?)I!_+b-M3V`r1|5%dog;N>06td<&S2d)WVfTuH&C ze~Ev_K4Tad!vJC6V8!!vdGFY!m-BYt&MSxvT@1g)>=igO;}UP)`75mAVUC8k=Zz+f z8~-vbU0bmRJtr{nUEN4F6JG#Fc@E10DOR+nvF8Aqb)}M86oJw4HL1hLshHx_VDO@^ zb`M)@yN9tLqwn2fK#3$mX)av2WZ_zTJUEQAm_Im^dd#<|p&Y`kbLH;9;` zYP20)EpS|tm_*n+|MdHRYw{-?sPqde6o79HnB~(UIc37AA3_a<6ZCTKMG{RE_jHb=|KQga zEPfI~p3%1ESPi^r+U!88dPVu2#}#eMdLShFW?IpE@s3&9S`*ev;HdWxT78inovzOE~Ya9}CMXm)=I$4<4+f@rK|BipOzE zMb#YUTDGs&Enmv^wKDvb?ChdBE@WpH^bbm1$MzLdm$CVoQ{TYH&E?v0o8kq)<*;K* zO-uWhXxWk_x9MGN+IPsB42P@dS~{DNoMlb~bl;eegnzh-Ky+$0nEZojaDoe1sVS5( z*cGChB|FaTkR9%M4+h`X39sr%WEG;^vfG}7sZII0iFUkh#W6?uUHib6 zg{S}Zpa_Wwq6^7iwQW;~hB9v4VjcdH!Ul}vy2moSwd=1S_k?^r!(V{GYes$! zFPP>zG`RHIQp|nP5^EYXrhN|;Z}u&<0IH>k*R~$2;^&kntBig7a2LSKmNk5`vN^%Y z<^?S*PF=^49}$||GFgxFoK~xzUgAEq_?8CUBU72CNrln?$7O41Fc8!A1_^WGi$3Fv z5MvOOEkBO>eu5RImyoC@B=EQ~)}YdOS39c`J64;YI(V+e25Z{5%m&iAMH=GChL)Hg zvkH8V#>+|vyRT&WUiXD_@#?5;lg|I&DL7X!ZSmB9KXuQPZId?@kDGYlu1gcXoKQCY z)cEg>J5cm);ZYR$HhkQdw@!pwx98rH$He`Hb(Er&Q>k{3bZ7c6rjH)ddOs;gF4ada zP`Y1E{%uu;EHw1mSLq|iGKcoxeB(UQtls?K1e(YkK95SXCl6eCPijJ)XI1-$-A6^6 z`478ahdxCr4_@1YeCKU#lyM&VShLrY~MiU${JY zj@Py&mx&b8zytGl5Ibyj#2lW36@9mn<|zp}r>kvbz0AzT<=;Y-aB_ zb&di3RqL}RI1OHB>y=SvvZ<$=K{fd*wZw>pl7jc5X27!8ea3=Ch6^n{Qe&IeY$%N8 zd9-k#!2l4v6x_*80Ahg~Em`0pq(*0v1PF#4842c%w58)Eo5uZW_+VZ2qVE|=G{FvcfX&0`;#04 z$9^$zc{i@pATt@vdeT%D9@IYZ-cgi77PAbv_k}A%pPvC|K#tCVuTRnqhtr?DJaG8{ zZt-M}^=7WUi%sHX0C)4Pw}&oVz&;>NE2xLg{w}@m3%&lkw{6C#p4j_HNhJ(2$wVWj z3i=vKCQHq&e_lr>=e$k$;l1d+w z{ox}YWBP?nX#0s+Nd=_%!E0~A#ZosobmJ7LKHb-Q^UNQ?wz&%Bq36fKrwy6gWf|nX zYk!Fe{ON(mOCq6^t=zgX=@8g4D+t;NnFHA-5k>_>0KC-76YPh0B)EiqUD1?HqbLg` zdqm1e^pR;tS9?qv-H30GR!M6@SUy1Lwd$b>$)qH$r~-%eY}?td0;R}L3Pq$Pn_NQ4 zD{ILyjCQp+rj4{0(iv%jC98AxVC05xtnuk6e1TZuFLgEmCk=F6ljR0Jeh73%pQA?B z*_Nw`7tEUx8zEm|uQV_d7Y%5Tv#M(Vb5*7wJgPeiw4+*Q zu{2~>smKa7c&1_j6l}ao9QezU~M#H(lV^+(k2&x-~GXRt#J@=Y0w24NZ2OV zBm4<%UKw+Uz${$p>hzcE4i~3N7iLKr!M!wfhW2M8RaXp}GV@5kMl&EV`QT%QAy3GR zspsjAkjhD^6cx=5F1kdQM9-wSaQ5{&a;7D6y1Tce!rH0vyP9$1}f(AwDE(&rLvrCLdy8zSQh9^`PR@m)v4E$g>*DL z&u~GYrRf89)Z|o)>Giu`=FE=^4H@O;@g_mIq9U4MlCh}S(xW#-i!42IM-J|lJj*;!v-;@GXq>8 z4A7X-S>}gVTYvMBGX(9Tg1H4n{{sIE|Ji&067sM+P&)38Gg_q9Ty#5bbBL|wC;aee z)*|}WqV%7Ev2r(huWQgdKFu*xIGl}}npQ1XyXG-Vq%nHGYGlUx#`G=HMZ#Hd9TcmJXX2Hc{GsFK5yuZBef8^EFePCY~@W5?&AxWV@GtI;mnE(;I_Ss_Y8npxe##&W6oNMSm@MrA~YbjBS?5H;?PX7)e!guX2u9n zAABv?(}J&ErVuf(0rpFHC6O|;nc~Z}LH&qmaZzX0hSlYwf`pQdwn{iNAncsjF1e{D zzOtn(p--=?UGwaQHPEQG#L$!HcM4CytzcBuDyU+GxyaiXO?H%mA?I3Y1T}h2Sw5<= zE$Mh+8+4dMl07Q@izBc*$$W%Y3_BkBHVEFBmW5YFaPREA^2#pahcA443vX36Ozh~M zZ*0!~chdSZ*S%mcz&$d$K>-G7p7O4mwejUjQg51wz`vh%pcv(XuTQjbdy;`is1vEo zC|i9En|@Y7%?~c0;?79I&Oh55Lqe{}i4-nS=-Un+97#;@w%7=uc*RXiYP;8<*w2k8 zBKPedoCiX{l@9HhdeAUq<#gg-A9&sMm>TNgy6y6$L~VnOeX&&So|9kSXNO zr6vW7?Hbl7V3~`KDkif>w~)v+3F9V$u={$NIe0FYS$xvtl-@VPGYM5Wg1!DM5pUGP zfjr>{7<0LEmzqo=j4=Av1R7FV&yg3`bpymR@0W@43XVjU`*}{tJHCwZLi?O*y1)GafGidPLUuhNmkTcr_wi-+=hlY&o;`#+F&S0Y(OQ`47e&A8r0LzG7b=d z10d+eP;F#OG{r=Y)Q((4PKRU*U7Dyp)|6HM~aA8DnK)umd(+33+rg|>>7PCcjWh$UC6mCl4fa7G>}tUa_Ee^Q6qWtX37gJVvxmxDj~O^%A}^qNm?D zXQ}A>bQ+|PFb2i&3QMKPXUk|U;Sh#s{7GLFUcgBYe5cy^k;0Wt z0gxJk*YdoUh-e+Gd3{Z<$~()*D|z{%3fjLG1?78WbE2iuj7^tSD_DEenyaD_#O}iB zql-C*rZuW$fA^u2UYgrDkNGH;rmXEIP^Hei^{S9aSuwCkFCDgeGjDG4{k9_{WR51QZ!KLAk|KFas zeT6;cq=`6Mi0dd6g4rn@@gSwN3w$1-Gh85jECmrqypZ{1iK|?A8>$HLUh=cE@beZY zH&xk|cOtg^N(a1Z*Bmfl=3Hg?RZWjHhww2cm8M&&%ZVuDtYvkP_{qdr#n*n?pWxTvSOna3AonEE-bEHN?3^*S|?_G>Dl6K5;fO|$fl zKJhk^vA4lY(Am0~2Vd=Y3U?`El|tB-t*VrVsV@J8$gDo3hpcL`?5pJpmh4^v>T(U& zNU6TTZLMVAq@ncYaGP);-4y-Z0Y% zFc`Z%A0J^UP(}5|Nuj=()G2hh!YcQ_!L{NNe0%l^*K}5lPml7^iYG#*+7q zWacjsVZmf=GSTWQOUsTud$s+cmai7d`6;U;%Cc5PUT?tnGIfrsir{W@gDAO~(?Gqw zcI|5ZpLOb@?&uSE#3R)Zum!}=N9hqq#R%{=yF-6cFV&5&e4-5zGGP&tl=sXgG>u4c zsL8iS5f09x7(d17VxS4DWlz9@%8w1NzGdN48Tlv0hhQa8`%C-Rj{MZ^@yvgBbIN2hL4=bI8 zAulIR>U$Jv#KlfulSbKs$}mvLd1W<9mD&gdBh;82O>ZJqg!jiidCgMuG%%PoI-=H1 ze}g*dU!Ohc0;zpfEkgK{bK>SiV;4m{>1_4Yy#vD`76C_=#6&w=qRHoy2}rUj zL@sT_shw1YBlQpU*c!SGH(cv7J6tT+^q5c;T6O02%gPQ*5#!%wg&~rr1$WQ2{vMm< z(D^fT)_waExlv0qCQ2Du2OuzY)ryw_Rn`x%kq65F3uw~Xd8s)mB-QDLFfSQeX;xcU zM_WUnTcS>Vb`if0W|^oof2{j zq(SoaXi7lVDWxVhavXTkLEW-d$;fcNxLw041$^2}5-z;bDr^_4YJDeC2;87441wd5 ziA+LO?NhBtwOOA2R7@K+t2~vdzpixbVWrHND?`s+p^D`?0gDw2x2IE9hXK`+Ppzq* z`CNz9vxcr{n}k3lKu9M|e;HIcCqmZbL!Fd|4V|s_q!!l*WnHoU;W%ZYH8%97bm`^{ zNvI`P7AgROr#z)$5v)i&)`Uk{OV1ueD1gkt>%N#zUQ27*sFg+rFQ}Q-&ES%B=AHM3 zZH8isv>?uw0m;B1)zaq=W%`c#&4qd}%rz0>0%S`&nJh&fTAKtmXXrdtr4Ws32&!e>zN z)1mslN~|r=ZP@CwMB9tVwV?YQ7C5`$Z~!V?a*|G*RpRvKRjxFPyMC|36spR|WTcbkEwm|GT?4-u=+D|8ZLV)PFwp zr&Ipbl={j4d2&nfe_Q;$Nfi_K-u3!~|1@Fl_@m?g^|(bvTZ?8E-Y8sO@ZX@S`t0m` zcw#}(EO$dm(IXp^u^4hoz+DBAHPY{P51zV&z+st-m(o|hkc4OmisaPMl~uCeZ$e76 zb1HxO=l!&iq40qd$luJxyw=EfcawvMCVhyGp5%_}n~jJZ54p`H&vLF*BqV9YK0^t> z6Rn6X3DTfoRsMiq^Ek2^xow*qF&vsMPz=wIf}ooN+?tYS(??EZ4u62KBkA*32CsfGzyYRAc&|W2LV1hEX>43^@V!rOp7$F@mY7^_8! zM+n5|kcg^92FXl0Uj{IJr~qX5_dSS_Jkni=kz|e>9sKaBMD)YILm#^;1IOj7f*;^Q zwJg!d2Cuz`>9)f}N+7^_CWxR!sT{iSkqS)60V*Y;qzxk>`SW*e46p3_0myGAFkGby z)<7Mq0y$zxxT8R}O?V4a${QvZXe$Y45^J7wB+_w)&|D#2{}tB=xqzZ!h&^MR|c z36D@1zi}qxUH}dRNmx*bnT0@{h~Xo}OxiB2K?x8kAq)|^QMGgYOH`qs$9mz$3Czp zZcg*7P~x50H-m?94~8K*Vr1mGiPviSj*zh3UKS0v_kAA(u&8Hl$t)R^ihP=Ko&Xbu zzkfpv8w-MwIxTQQq8NmR!a;lx1Na(_rb-J-I*O?{2}4GJnjM)6P#qV0lBg@Yxr8!> zWCI^!UJ8htDjBdEumYOn4f7n>h-uG=Vw=!hMR}K!)}I5JQb4d4+$Ksot%!OU$9YNJ zE~H3%fLVfgDo*SExUU3bp4&aEWEKKaVcRePWizjRlzHn*!Fsyy_|Tb8WalshJ$RKU zIDLBG(AhWeMMBIXD5;^{%==dm%oa;%;QE_4cV8R&=5@38q|d)Q_}azvhbIyGPw@3E2c)tT9# zYg0Ob5$!gVvWyu^8wG|`ycgNHz-ag}#eqd*;6AA?+^cDo$s|q`<7{l|dKK^pUZm#D9Qi$+vuVex?Q`ILq}vHZ}uJ< zJbf_T2a8Z&=H1gku>~0fBDBB*Al7vLk5UNFXg;qVMHE5Xb*l0`y|rLA!Fmsy@wHl8E*%#oz3jOVVc#LYU=wg04aALEGe4p z!M_?rk!W^m429^VaTXFtZbBY8awAWuRB{+Kxy67XwI|v;+kqu&Muxnl?_Ta`R!B#X z0AP{Cz|*}~X&Hh*zJ}vH0zzLIy6{fs%svFv#SpTf35-~e2@>#k(AO-tp`_qH)1Z>h zGZ2^8w2`8=0-G}Z<%LGWNjha4c~?skGBads8JlQuDg8R(QlA>9pSb||1G)+-n zk;(-m(22O-D%frma|jke$puwGOmQp5i5syDe^uWUYHFR=ROZC{>5J6u;2$mwUcEAS zbRR9V_dZ2PbKU>;zR4K$I``p{B6cO&09_wDq>xMsZcRXm-~+g1BNXYd5qx|rEhNnd zoi=O;klSk{X^aZnr<-#?hn=bc0k^ZSn0tO`#GXaup?JSvf9-Xbe(k-%x85_|Q4HVH zp9yanI&vDDquQ5s#CJX7U-nHxzl-P?_7IIOIAV+whLM)8@+K7uG}>Z1RTqhA0xS`M zq;sH3hV}EliI{~&J9D(2KJea9&vnEoPw)N2$1raG?zPPOU)!S)VLJ0ZC1T_aUF`qY z3npCG=lHR|V;C62z!(O`Fz~I%z*{SO9>B&h>64uW|LjlUAh4kFmTp3c=65}rl{>of zjeV6>DJ=AaZ5<|k2(-E|oUC9|Y(%-+#>y(Imdta?;!5ui4Lv)fKla%C`D@oY zmes5n0dn7K=1^N4SIdsWq)i6`6rxXa$7(vuRC4=jXMO}1T6G!aC(R`(S3H6dSY|bC z>GzBgKJP}Kl}&n+HrUbHv>AbfM0YLx(#%fY~S{x=jkXdQq_N?V@LeBoULx9^4Y^1G`pH^!)ydio9${>WFnII&pg-S(* zJJDbVLd}~H5k9XS_@TGNcEq9DptTDt`&#=au}a;X1F!LcuP>)zVEk}T`f^YD^WEMn z9%EiH2^WD-bPU2u5Da;;i)xV5L3vGrAX{*SBSuOXhTZ&%v`3Q&O%dHem50vmOMi7< zw0mA094aR-LSL!bszV&E41Ez$A=l*S=9s7&EIJ@xB>O7ZPTRKt z_XtpD#LH;7o{+3pmIQlJMt8NzFcIxjro0K6nJE@qOYBx`6C}~-&hAL`RPq1+VZoaP z_x$?q&+mSE+P|I_o%+8|{dDTDru>^JGm#5$TXE^6e>>@~Cp|Rri-`~1)juIU;iCzS z6UL3-Iqv@%_ju8Vh5u*av#5M$Kknk*7HCr*>3*W5;P^(?T0S3#>Mcg*d=gnm7srML zQc!aNXquB;ggif#eW-!*AHW)!=mc{pSHCKmTn&Tr^x*9 z)+bO7O3!GY?968lX}QRMSgNhG!$Cr*7))eH{6%W@coXbNxW=Q^ zWD2YI^&$;m(G1u%3YTMS>GL0^Z|uE!<{DJy3Mgfk)cR0kH~@x}rG_&WQRQ==l1Bw} zmVY<~w-m|B1f{D<@ki?CD_>^*<_t_M1J`yBTaUBxQA$TL-DyMeaU>s!D z0TWG|TC~6FrPO{8!5H*7cJje<-yk6nRP^b~mj^DtCjAY$WCA40V2dfN<|sq!S6l9A zq4j+>aQQHF#DfP_VoE*G6}^o(r9b>qNzn{xj+OT?E{Wky8ySdD>ZCxx6K8pE12yoX zzX3}2Wy%{9ml(jrTA%@N=k;#J5NCETFR4Zc4lr25m}07BlQ}U<{?&o^o1@8jK$A5U zuoDtT6v0O`J`pq7_s;N-+;hhH3CL)s<_)<7t+`V6Sw*9Ty_AyeA(*nNWlEs2CL+A{ zIxItQ4pR}Tc((8g6C)EQL@aP&deT?>Z}xn`23S3l1jUH6DW>k}y)T37+}90L_glc) z6NZR{fZ%}ulPc`g+7>NShm}oqib+khmn(dwIPW6tFkpWa{)G7e(5d|jSRN*88x$)Bw5-y}tl~KiuJRjX66XA3NMD% zS`fy!T+$W5l152B$>>K5JF4=jIcf#N))(>iDR^suos(W9;Fdyk&U-Df_wD!jN!8bo1 z+~2FfhacC#H>YS{W%|Ps1__IAMCP3{gQw0Lk|iVgSBSHHPM*w5U;KtC;eyl@6au+} zr!Hd>2CkF!pUC{k8x-G;DOw000lU-R^kLH<_~u6X^hFfLCN;SK3b-b*bMDnlQdRHI z0evaBW|_|uN&OJZCAkgJoas%AxHy)u5=63*)8l75H-2wZ2e8Df?2J$`cGVvxZ|xGG$0W81M1 zASavVv;{rhyMenc9;sXLixy6o{_1arZuF+Fe(X6*8nkH+WexMgR19f%Q=V@JZq>sri`6)K zXH!cZ+@el;*(6i6x%a2s{e5BGiw_4RDv=~jRcGMphXYsNz}A$$c6F%t_d{3zKs)!v zBUs=#;?Vc^u0n>?V{{kwK8IfBbgwKaI49l1L68$3)A>-ZE=&z0KncTGKqR1pT@h=A z{}{fJKqD)Oc3!%t52ui}L}v<@0%HxG#PDR@333|a@Is>`jvxb|qzT$4xWf=7kl2l| z87jB3@rp6+3wGS^_O1uukGQ)4I6@Yfq{L=F7G@@Ji|mXghBIUO!}kVHy`Db$S^Del z%(;&;`_JM~2gFDcVp_RZzQk^68U&vdr#~qms3qC-DA(#gbn_kKt3mevnFWUm?s@y3 zAKV?A_IJ~kO+7R9J5x4K{^yf_RQz7?4=0_N^xcWCOf0+Wz=Z!}!n5Q5)A*)wUyZx3 zXh-3R!Us|9j(*%}r^XdyyQqBSmBLAn*#Vh1>Nw9jIPuDzKWU9(?Lqs8Z0Mx-(w^&$ zaY(SpyMhxEQi-6Vis`&-^feajI8_9ADyDC(FDw>#YFf6#cbcHUy(YM5=;X_F+|?%X zpYDXSA$C+^%UB__(r`*iVyi@06O}s{TNK>gE*!~xc19%Gp^H7>%8qIUq+aFz@>JoJ zg2IvoZjJkd#>NwfT#bz#gR<~|?G_H*xZR*p(W?9#BXmk+=SM-rE=S-t4qr|2Bu@T- zi^v!Y2F`&XX)FdjN=0`5WE3r9JfL1UKVtiqA&CS!_!$mGy949I_$u9!Qw4%jYr1W)hgV%C;uAcQ8V40=1v0wW9;R(PV?$*F#{n{X)fgXddb~H zeozimKjKb0xeF*Qos~)fSV6ziwtJa>@`BP=H$TAqRmxvF`5S;z`S4Sfm|euzCC zo1}QDiH;DyqW}wzm4oL=O#?Xsz|D1Mo_rO+Evg6rCuSiFI_rTCybiE5*){dJZXY}V zEZ{xrK5()N;FZsCXAt{G#^h8Y$x)721J3{Ol(4L(;daH>+bfz)-*? zxFo{~8MviG3&aE5he{+PS%pN1y!qDKLl-WP$Likwbg+i=`v<3yG#kj9v-ac;P|d?L zmJ`)Trz3+E$!@63eemRVtlY&V?l^axX-iqxYua!E=!m6g(dNfe1e8Ga{MJQy)l#?U zUOKeX@gRJ(0j_ z7F6)k6&UhjSXQmkK)~JX`jK0BG6e|clyo(NR-hq=e)qWq3!p+It8ouMiHJ~O4Y;F) z6#(5R-NFDXAqN?$k%DJB*HPw;$l#gtIPuyJ_ewIkaec7=BS`2s-{=z)18DzYaJ3{> z=FAfJne~7|7(I(WE7vtiFkWU0td*AA7Jy*3ayf6DjZ_UDBqUp~W+INWN1b;Qj8`he zYsBpbXM;dO5jG;}kGpX-0@8(aLq|^b$(1`1Lm&KMHrCTCz|h>45F~&hTK#MJJ{$0o zVv8Yd*vu8o^A-6~PoS~q#>Z}a@=Vr6GZZhLGlDG9oyrOup56CZRw0jew)T+ICp`e=7~nDk$eF& zz3zI*Ejif+fGSE^8cVdTfnt@iQx9Nq)1M)kMBP1$y4~LwDlIR)F@<;;ma5 zR|-3~gDKTSz98x14`TCd0VsCoXF{H>w73V!AH0E@ z%A0Uj#@t(HnwT`#sQ3pK=fHJb*S?zW`%(_2PMuZz=G#Z{0u1B_?t+tBvFANB-Cge9 zW5Wlg#9KOQ#alaDap%8vGdLKIAPrj}jy2F4cFJC8gHjxlQ8N-7@O6xa7MLvYY7R+2 z5J~{LI*5BLC}J}T97fW6-J$cBv8QKF?}jxG3}o=Lj}eRSKYrb(+oxxj-XFXOUDtkq zJ@eI*zXnccm9(}3W)dQ5StiMUbN1@wH=$Pf2O3Yt(fORY>ub@ux(%?towcy)8io3` z5;B^lZKUIy+#PTdQaoau{z(UT<_gI*d_M|foI&URqN4v$Q2ZwT8T*W3;4c~jhiCPS zhZcF#$(4mazS9oV6-z6sM(Zy=ck{<63k|R~ zZ2emZxHfEih(`r&Q+5Ehkt<~dWE;7PfAGtOt)K$7-JVCcU|w!DllVwh-(1~FDKGMK zqRp-iA4vZL<9Ns3FxtgT=AATHPz)GHNuM7c?Kr{4%5tDW-N%Nb13S~uhGBvUOWdK- za{U>$2`OYE46EooI`syJ#kXSX`9|TNv`~ummA?fF_0`Wsk=cc^C@{N-ANXay0*b=q z_(x|fSo)Vc3-3^h!-Ox=pK&|SH%ox!J)L7>k*QL<50Yo7B16*gghf;1;Z@5h4e3%n zFEmoN13D{bjH|Ad*+nX9H&gm$e}~^P4t_r9AQQsPdcN(a?>IQ=(nB9Ojd6->!%oLm z;uh*bWnbZe_^McmOOTR;9RFUVxwOi7o|)>QZ$WaaA_?x%thdmRTbgRPs0whU z!fatZ;lD%io^iBEy}iER!#lo7A=C2WTe{S<8oATh3Mg3+Yw4Q62DW~(V-L>QIJ>71 z5Cxk80LV-YxI=nCfAKe_+^_X;i++|z#d-`~A{ z+P|On($v45S~um)ltq(2oBUky_(>=4x<28F@qafyG45ZDD=eB;*owmc6+iCM{=bGU zdgUVb!Ci&LKS9W#6btE4`X--rcqpYPm<@+@VWk+k z2{l2_1kc$`kvjXA1Gh;hcOy`?h;uoVEtA|I^zQ=jkC(dlMhhop0k3*yr8VRc=e1g0ei+ITs#OO-)Fr37>;+;35S7kfA*%Gy4x_-u+VCVgVVM z?62*Sm==I$cPn)v($7(La?vb? zHMfaXcupJqr|QDqKb?>R&87&PEyIf-AmrI=gRnFh^Ih(m zelpo&%rl{%4;`|u95!VAZsqgrE{V{K*lo$_qfr@V$nXfu3?_^TDQt|!ZKOF78M^e| z(52sreI|S;n;dv8BKA|}t#2@?={J9mI8qqM1b0?Hn|EirC9s5q4n&9wG$q7jk&p%p zZc;Q|b(B756Z{dyy-B$-vt=B-iNd9MWTgrtgy#YHRr1Xh_`@DVI5JYU{_#9!#!%S! z7y7%P)to-_1!y&YLY*j(XldefO6gqD0o)kiW<{DzJT`=E=$9#%0xgQiG6p|xS3j9& zXDmw8q1`Cok;V-#_-nzKM0>d&Is9By#4u2%T0wgKSf0wJPkY(;+>f!Wbu=&ZU(}uK zC#&w#>D}AAA1^NciHO6iFhDr4z-Ye|bGxas?)2T4N;aQ$xIQqaAiz50p{WEi)X!E*@tC zm){aszJaS)m}(UCs_$)05|}8l?`QUZikl@cjNlNd!6D$_>5*9)(_veA|=^QLJFJrsP74!{8{2p@NxpA*3S=r|?R} zVp7N=UuZZ#j@*0u+dvnUGu?@>ei!~-?oxF9 zlr~4HqrC6fz@ez4?s=GFVvza=ZoHE|cY-35yC0-KJnZNfj*OW|R$i=I4H_Bmj_ZeW zK+&Sb(H96Nx}hNg^lIF5h~n}=EV(M=8JokYuq~rWapSj((1m~~GV~SVD1Htx7F`eB zcndc#M9zXUFTUrx)p_pcZ`djA(n0_t_?M9OO&3cOddGK5Z`zC~F_`+fB zItZ75S|dXu0iTD?{x0+GQ5n8_cRx({Max&lUzijIj$EnA21q^61&?~2FGO5z z{m^pFNG6DA8zZ>e3===N=*=@%DNyJeeVOA2hpvAH8cClzmG0X&aOEJ5ed*JE@O=P0 zZ2vF(p9?13kAKEKe=!)?x5RylQimN%{Gg(uLRo8_&0S6)bPMf^Rr9Onm(O2NUiH{0 zEd!&lPKcdbLSU_}S>-pfh1&~E;nAB1MNk9_g^?mO$*wWcJQHn~lr8fpR0s)WD|8l> zom%(H8aU27gv?EZ3X)i1-H5v7iiH%X@0gG9Ai{{Rb&Nf4(Mu!cZ zLK{~z7U|#xzNY;@mQIu|QxY@^L~~^=d@H5j6Ut#O~!q z8A6nuSIcjnxRk#BIVG*Q`mvr^sADNd6Diyfu#6{wOmO{M+`l3N+#jAP_}fvCc;4%5 z)M53sn@BLWQMPwT_(}?^cMJA5i_&ddoBi0fv)RvW8=L*ywy)XGZQGjt+_tOP&uyEU z{oJ;v+0SiT+W*hqy9Y;kWqE=UPx1DPQc-G`6DV4ufCPbEwy`mdg&$Oz!ewx|Y&FFs zQVL}uDOE~|hdor0k`Z9Q$QW$%unm5fA7Ga$W57U6cgIHT{?pMNF)_2VF)_PS%9NPi z>8_5QnAn-^?bzS%oO|zgzkG-k*ltfRX@|)CzWY4)-gECgkKgg12YNKCL;H&KNa(m* zRIV~B;*Ado-knZxPe*2|c2k}U z!tl&O1%C}7W9nf#1a8={Ai~Ii9eJ+=5HVXWe0j_b!Guf? z_(~*_hmq#xbeg6>|5{kD8i^RqYJ;*l10UKqiyc5b8=aAfFu5sN;Gl%?&)N*HFy`Sf(Wj< zHV5`(y52_xh|F7f*HPAZgi`%aO5Jm(=Fr4Zx& zT9MVnF2M5d0&FdhGtwXe7D!;Rxv#W=gtSmjx;Wx6HSG=A0;JYa7i~Pz?VZ|@gxy2b z&vg_C(}5fjB8Skbm#RyL6toZwsI^tNBiLeCyWt_kDXo_l_)EbZxyX`onk^ZPHrmVW zvk;bVwCB1y1I`v^U3%0jVn)JJ?5ChfiG8X6hD$DFU=mKB!!W-h$WNav{&(5s>u@$U zaT=p7;-aBRxD#`(DV24o48`lda{d3b@`+_r{&e!glm5e`wn?KW?w!y&esKH`5%+I$ z#S3Hq-Prrad@yFp=mVqvaa8Nb|2FdV5obo+QT~_6^3U#*UV30YM6K0yQ@ItA-M@hY zYUi>P4go~L2?;MLfe~{}B9u@_r9Nx*%z*&|R@(}$ajH;>>a-RALYst_nhy9TS|~J7 zuzQT=<&%Jj`{6(HF$FifUWS*7y253T?S^-XiuEDx%j^S6$o}l}2k@6t$A$w@$h+oD zeR4&4g|^>o4OovzwBV8`I2Kmn%63I?c?620b}E{=@M327KIq~gk=MfM>?|!oEhB$@ zU>@YHRrAv2t4Jozq|SD{L2H#FO$0OWd{ZcBZHYl?lX9XnlNT&e#9HF?9##A~I_&^W zzK&nE?zdZ1Llw38nm8z7tp^A9`=9{584qZxPBZRMwf&m3# zIrJ^f5fDu=BCrHnaB(&gdYU3gcrw(~|M^?&{}~u%9QPGCfGRjJ8vrKsUKsA~)Ybu-y(InuOw%hj9;d^c)9N5Q7h<_Q?Eb8aTYrqwfk57O5z#pS_ zh2pC=z0jP=zd02fUlx;t|Y7Or~tXX2ToXBo1Osw?6S9U@K#T!n<_&58n`DlcddM6BR{821 zSsv@hV*ItS;?bg% zNk|;XI6OFnN(~~Ru%K7#;{b0>08T+enL0Ia1R!e~>dUkZVUzY@*V;==qn+<7K&3&u zIswapb3|l2wi^IAX!e+=56r+ISIyoC3pwzm=B=qjLu$2{&_1d^mOgA;Ri&Y%lGTGi ziATsfb_T8P09oM;9@SQmY)3CbF=D({U)*O5OLm3hav7p8 zP`y>pFKc0SgkZ9c9<=fznFUCVTbYP9Fn;thOA*_En3{1whf4dSX76#2u1Y3xTmW&LCfI3*b6G2HR|H6lYSU!L31!P; zu2;;^U3K7AOfOi8Ri!sTDgL(jF0X(mdjg?SRtpKt;;hrD7B(``3P2wYB8dWud2_!0 zF>KE9j#U!kF3Qu+sx}k~l>^S9I`t%rdQ8(u5z=j`no+WWc#~M4XhFypGZ<)z!Ip8> zG6BDN51{}DFYd@Z_Ztmd=BCi51Al}e znl``nao9Qh_4+PErt9RgTTP|?2E@wc1I{6t!!m&2RGQALdBe=Pq)g;Vvz!oHQbJ0) z9#EIx{a*G29n_l+RH0&;8evfWS~eCvWU(?OI?jJzf~is4f$zXfv8uMUu43E|&B-b- zj(I4aq%Hqe)*5T&O_3*4s(#SRt#+{_u`Fm4+=*1u)TqK-y6tJ;H|H1;b0;qZO$Vm2 zXI1sEi!A>uuV*j<{W3c?qWgve-^SElRGm(wH;)@v{#P&~?LeGq*^iA>L}_Y%EQ{2K zey>$rW-v+7+5wNOl=jgs59}A)I3~U`@@Z&Ef@yR{#84ZJSR2(@fJ16An=l2*^Cx<4 z`#6tJz3o!4tYg~;FTEgqh8E$hNUUH#|84g57eV}V@~7UJ(k?I)bLY*Xvis3&t0WhM;T)zgF8#Ks0N(H9gS!W z1Tfmgk)UO&aVhBduCIjlQQTVMu(>e}*Ehw8rEiUky!qjV#ObX#AM#NQhN(&Otuk1X z)uiR(9LPa>F(Y^s;SU~(SWYKahIk|{j*ywiS5b6!dL3cHRI;g)reAp;z5?F{j0>Z+(0N;TABpje&!Bj~7VD z#1Q1u;0v<;Wq@heM+?kER=8fhmm1#BDvK%K2pSPz+b8X&j>|!y&~5M;6;@)8eCu;AEK~P#g!fG zG#Gd@XNsBL2H`5rrUR*iS;zH$W64)*W;_h$o18miZcsd@ripy=NOD8cK|Se|)m-NN zjJdfyTA>RZe}!A??3|*t0ALw*MrZhy238*SsWbcI;Q(j-@0N9xO?hd`-IFg&o;7Ln z#H|zFo=`ph_3`5o{clvoD`Wp*?2pI%e$37>w~f9qdd8?%N7at}c;ws>=SIvg|Dt?R z*+pa?)@Ma8Rn*g`-MIuFDZAR?rJLA7O|4ESC?(*M3SVG8HX!u0eVDdGc3=79+9A8zHCFFnuqUL)_KMoLb~AJg zptvfBhfnNItPv$b3#6OPz$u_Z)5(jFR~g(+&|u$jDmgxUr{FM*PxexmJZtvaRS<3N zvZ(B95cG~KK>&aGL-geKEgj$NSWrd`%y+01G)4k+E!n|BwPD92g81l0-KwDufcdi!X|y8Q{4J$?pi3N&JLy0Vu# z-kDYD8@J}Qg7R31(&6IY8S$%=dNf9mL>3S|jxllJ)Q8a!kPa{f5xk>wtHG*OJtP#O zkl+)Ae&@M?=V|`~^)nGX>~hcrf~JjH*EL0Jyafx)EKNU zL>{&g2=!FT81=D0YqLVz`H}HnYGY^KxoQb(@Q|Dff*h}C+mzf03#TqH^!IzI16?#NU7Laq>(6zCKLN|oI4vhQ4$31a>DQNbW~!DE&bO#ZlzSEcB6xx6 zqHUpB#s<(CN+E7&qyaS?=zVt2OT^m{r7WVEfeh|DILW{lub{P#nWVqn`(3p5?rG_p zsg3+|$T}J}GV(>J!HR6h2D|t9ZKg>BP~OSggj!eCLbmPsBN`4O(R(W=#MHHGp-cWl ztgAEGl!W;Kwb{k=v=1^t)Fmydp3O}+A=yj4<89MXS4G($q@Ewcs9e(VOHo@SEy-oL zLXAPX@#!0StEd^8mL3b9V(Ro*IH?`pxH(yp!Pa5uEiuP91;o+;9F`P72vQn)?Pa{T z%#JfKtx(1?@a#JX%|phr<1^h>Kyb&{$E9!V{SMl6+qCqpv}O526ST_(n4UK4m1;nQ9`3+lf;)BeN9ihe|0Oc`8E^&>jNRR5J z0<(JBHfd9$jV5=SfSeC0gZxp0Mlq3vS_~^es}mE8P%E%_XvXK-kv;alX$n-s9>vhI z{tK6|n*4T*eWv%@XvWNGU9?L1!?iTRHK6p`$D|+at%P!Q{#2Ny+|BiXe%3X|8#V$j zXQS+ZTo;aWf#8@EYF?x?piB_zNwM`ncs*uCI2pSgXv#(vWP&9f z&=RMa1v?{$80a|xH$xNJg5xQ63}A!Q8H1h1=^d><5$S~%?y!gh)&vaW&=vj#zci6` zz|etgAKL(lVb1(iGh4GQhNlKtK6(txE6(2DeTZtMV~Fmm|2-^oVAQGLO+j$BU55h$ zDfWjuH#Ul?SZp(ArK^EDRrUvH`!S>fFTXPQYOQr)pev`R7{IhR#cebX%LQLyTMSePE zXlR-4-=mNwis-P1u0-;CYn6Q z8^v6LFg_2$v^TlAP&A7$UIC@(l!kU{g!1Brl%%fUnJ>{`3KYj6xiJv?nmWqJl6v_q zz#enW*R7P=Z??b0joiEu=ni!%Wivxcdfl6cp-|^hJ*=!o$nUlkX|*^4PmYenmfNEO z=>w_BQ#JEy@0eeE*Mjf2C#(oRP)#rNw5UcLYn6+EST>5Ia?KqJq8==?QFcT~7&<*T zbqv)JDsynQ+e1NC`?`=E*I-p_M5q&nLtLl=zOn%hL>o>wI(9wLM*DF0D5@?IdHOyDR zwbvNjXu1gpBZp%cop0}2z*?+ zDQt|aLvr(VN$^;VKDdH-%M<%n7~U|0(iC6{O;z$kyy36N3L786dx^T0*UZ4=+^X>hgzi+1l ztgi=-p2YnXcQb^Ar`M1u$LLmsyV=Q}%>Gxh``*Cy5KmA5Tod}gI1QH&eU1xTwOxPV znhQP6f0p|sun-`XLThr^o52;WtJbM##LRPV8Wo?GYh(h1#%IXss3rL$t`ou6SNm@< zb;X1S+|PgPlPOFhjhGVZNU)G0;HjC;wcsrDU<)SxE6Qb@q1d(ve23%Kj1P%u8E@zk zB+?c!KUj;D3l8PX>$D}I(rtkuu7@-&qqXXS&Dl5t0V+ zDs!4$u=b@ekt1@t=~W>!J}Jss`?*pIkwoncU0O>HqyN99{Drb9znJo!$$vIEG3mcd zIy$LpV&8=SXTm&S0PLvv?bzng|7CRDsOLxi)rkLqgx5b`Ed{!N*u7|M*@!2fy}PpP zNUqIHV1TR^0V=8f{q{atzrWx9LS%6y^U-hM3Z!fjtPU@gBjN3M{NPR~8-k{W>I(X9 zMbxHK-xvEO3mLIZ#az}d(PR?uFJO5OzIj%Xb1ygLTO&o2@)(0{4xZQxv`I+`MX5=M z$t_ljCgHg^pzqAScfxN0S2hh9O%9PqYjP;L1`eLr?l~*od)aCchu?=(PdCqNXiK+s zF9bF3?wMX$b~u-sk;hXoGN(w*=;jk9z&fPoK!$CF&rM3~HRnQrh=2=moY__B(Gic1 zUjYqwQ&*eBM1tHEFfc~%ZUyP2v=OnZgc`25EeRD+LpLuF5HaYDaqgg>A$;_pprDow z4o&&5#l1iuO77UR>cg-^gZ8y{!N{B zp#I$Kr|)H--S0o`Kl?h|TOll0m}AcDlAE!dKq!!9aX zUExmKhAT?Wf>Mgl>zcB@Au{hwams@>KgSoVKy_$J< zkLIDF$`^-n^VlXMaX}6sRPJu?j-tUo*#RoQyn^cP#x9-4n5U)#%TlR$=lw8}Yk|I^ zZ@u{fB7gs}cq-Y2pu!P-t1Sp67d~TKf*f^3MzZ*FVTSYs^qf%EV9CG|FM@JqKIgYV zMD|pDP=(XAJ{A9E7e}LwfM7sE>xgVN1&Q-AB>qgxWsH((q76g!cofJU5W_dnFsl)p zE949SiN=ygBopy`riY!;lu>^Yqi?Nt6@e+>X$mB9JZ7l{8fdTuoKn820}NzyvSXtz z%kBre=Yi%+pZyVNULbq_`8@;Y_xYs85PpB~ch6?e^?}h|iONjuaeb5%Fnyke&wr>( zPo3}Sg@5J~EWJV<$-WAh^P^a}1Lr>)e6Aa}XyqE<5^e<#0B+#3}77$OLAgY z|HVDoFAhSV0dVlaOFO9|eC;#EP$*I-+_eWU019P0&}mJdk6r|93Di{FJB(XnxAKTp z-E%?772T^V%U;Uk5r|HLF>O>Z2#_HquwJs>bs9DlTFOh2fZJSPtt2@DgC^_jFMC+< z*kluV7bG>gne1~Ny&#*tgd)9ikY(L-(4_~u??IPLGTVnp4)<^!B0ngy)femz(yL{a z0tV!^DZeW&gF+4DX7D!1_Ted#1NyC-?YV%2OX5` z`~cfe1u;W3w7?j<(}QMnKkp5Oi>C=4ryq9DMi+n5y$oG+;}q&s&S=^G4KY~xy<_6t z`{oad<=x=!-{wp@kMMc@Vb+32qi}C@z;5iWL2p*3v5*dW7rh`U*n_MmOzkI=UBapD z;lrd?3)e=M4BQb)*bU9XB@36C6nKJ24XrV7z7tjr2fEpFmBeGatI?>s^onAQ(n+kW zrC<#@zrpYHoMF0mr`@w4`(Kho^`=S*NrpA z!|f75%jl(ptbU)QFuyDrYTKKcrZ)#dy}9rPEG7Kj3OYLry5#tH8Whk1aXuLn?H=6#f6m z`DOV3`sX?Yu2W!W3LIY9{WQ2j#iy0!Ypp`|iq7gKx`NHWd;Y@OVS0jDr7K{5pkt*T zuT(FvaE_7`s@Epw79Sa~MJJTD&b7YNt(=#j2izJo&-qC?IjX0^@)HJXGe-;+iu#F4 z>Zoe63>GUR(L|P5DR*_yun6TOy*ucQbn(^8uO5$({DNOF2XWFk9yDf*WKO;YGyd%P z7ZfK;R2A>@=%M-zQB&!4CB^t>+2<|*&I_Wr?5Bq)n32Ff2AvpXeU^QBzr9K;;35)L zyVkKu5dM8~9@sPkC%41Ij77e3Di2&9xfoDWZxg8q?C}vxNNvdbzc_w*`vKN15}NGp z7omr_yyKJXZxP+GJE+TQjwA3_iagYjXk`B*G$lNDDDz1-F0KQ|)3BDrt&!>+F{%xB zWZ>xMnH`_1phC%n*0PSUMiClnjnUykbJS~xp;)G~vHFx22uWaG6bMRS-V_K+VBQo6 zOkmy=2u)z#6bMdW-V_K=VBQo6P+;B^2vK0(Tp>t-m^$e7|30-zFw<-3NGL{|YDf#+ ziZ?S|gaJFzw8S+@tmkEov38iBx@GN@gcQ?-jT~?^vbu6JbhNOD5&>crxG12M)t@kk_I%c_kk~LAia=|)%0t>Kr`HOe`V`3p3OD}WG!Su`CO^HU zpjFctYAYShOH17NmUf&BAYg@6`6h zIsS@C67HQ%5YH}-7(0L~hJIjiAt-`i7{8HG5Oi7Ot+6ZN^s}1H;mr7h zN_6FeZ+xJxLpa@bkL#I=sMXa~-BZ%=YpzbkTcHL{G(19Nd>ub{90FAUE?dwCH??$i z;(UcrZulzz-=@ZBDC0K4t+$U9W?!^sAu@<^SwLXnF%@fT1ITEDx~QaJX$L<&q5#8} zD0(#w(5Sfz5RCYngnT{uX6AFER6BAEp2B^ADD+T!f)+QW*Z154VpL5{uS%~gA6K17 zJf0hAmC+dzYeuFvq8$EOvPnsfNg*Rto}V{Fhf!WB+TH}y;=K~|*e(szI$v`B)ru57q=wuoso z5D5jkL!}Vdb4qHfU!1>iVdbB@UIP-9wr0ac7n|hHje0`&$eu~)>GWwBdU!Bbi;t-E zQ~s3JpCD7oy;0v6<|dr(bBIQYCVQEc8;rdr&Y&QNWlCF;TRd# z`uOy;o{0#)47dBK@VeDS=TTt|4-9hJ8ghuVQ*a+{hItqnZ^-%Hwx*cpeX+)k>mJiH z0b^7>JG~h@VMX<(M5-&+vOG@2(XBuAf0Q;{q5RvRVWNo*>AxABY=yYRLWrv~ICc%p zeZ=d=tpu?0>#uHo=2WWYCT@P>ERgwxs7eE;-_7iNVc@+zy0L`UWkvUGJ>x-%JMV^T zI0Cv?+mjEVCe^N)qGY>3Lk~-%Ou_QDQJx~Pia;ceDm=#%tzE5R=xn#x&KO{~#kBgW zxL1*iFYnj~+#_{YF-GnX+QM@3^b~<0fe&fmtQH$23 z0a%AU7&8tb#1$TjH_bs|eEm?C$N*W`ql3_%eg<;Y}b%lu=zhV{rDFIgLSH zs)vK7VcXB0M84 z?<>}g{cvn#%u8b?jecs>e;;*V)Yy^rBaW0GF24;~zp4-5)@Y`BTY6n(*`KLG4e&@S zVD%Y~!%Yo*U^9?%VWx?zt5vqeaDR& zlk7uvO@d#NUKlkcW+xh>EJRBN_f&I{ZM`&eyrZYCvh4rW-itcXnIf-%d>~G@N#G?C z?gZy6T}c25fvnTa!=V4N>x&WdT%5sw*_F^(5_0CDDXcL8#!W0HVR%H7xhWC+xSye5 zA&7`z2tZjBWw%9GK;aZ*+au%)YLjSj+5u4z(&z=*Hy{QUqvmIoZ2wznO?mu}f= z4B40T(kOCH_ev1JQPEcx_MhwZ2+ue~`W8fmKC}Pa0lE{swr8%6)Fz{yHQj(|Dbm@8 z_=*T1m$x4W`Jt=~n#&i*KS!u7qn}jov$K0pF~%2v2X}o)%ooof){S6IFAO5f=XKAl ztY6&_gDN;MeXPTfL9;^r7|1Q+!GL0NwQr4W1Wkb|2Nwvq1V z(AKepbNeiTl5pHsBVChAj1TcvX>J0i$wNqlq&;|<-SalK4A&NQMzCay_tGkHetKGE z`QL(UO-%rYTnSJzL`%gDVr8rirr3ayK_s(=jrYeo)^hqc2B+%#A=N_QM#c5?+$cB% zQWkbOS=wuRX=peUtY18F0y@xjK> zU3kS{3Scs^SKV`%|K%F}F2Pw!R~y zduO4^x1~2${>k98N3y&3z;Ihf9`=^tQfT$S`4_QLIR1NgWcOh1KZkfT{h#l_-^`hJ z_;>%O^5i4@&HnBrR;42M&`#pQK4v_176Ml_D#rX8IC>P*O;@g?-I!jQD6%1Cf4Mr= z6pt(eV;4=cyQTnAunQBRAtt@s_-6Zg7+{8oQl-I@{&4L5&-i9 zw1WL9P7wGK?`(+9relGLbZNZk4Hv5DohdDW8RlPRPVUa^cn{p&7`BHaTykQ+`u64R z-8j#aXy=ZSfX9g3N=KL7XR{}t1E^;Wq!xqk9w4Q5y^{Ui8AweBKH5EdaQj}Iq`-l) zyZXR%^s03E<&zq%Q@4cqy)!U8)4P{cu6qpExJTr^whW-c@h!pS4S~{PxaD;uo+f{3 ziNrbpEwDj$3d3QsyWw(RqShhuSF#m52Bc#McG}XJz^>xWpeVeDTOtVjiM3b6OG>?? zq!HXgjhmE`@0s4|GNGQRTn9sb?Gyvbe%@mv$ie69{Y)QG6j_3%;3Tn(C-c@3n4h@m z0e;he{w3qSwBtQaD)8W)r;%mw6n&Ujik(JldTDVvEj_8S{69a2t1bGl2Kya-JYpPt zMb(0Ar%gF0W(Oii$-)pO!@UsvnQmMDp`fn!HrRkoYjvfnACz2Y8GnxP7bT zr#n8q{PIWW9Z;)q*##4{jZ4q!{Vr&;sJpWAsmGGUs=%;>cL;xMO5G(aYJ}MZc#;XW z3HC;I4~!Gh(v){{bKo1Ry|e=z>LV2azQD4@JST`f4$12PJ z&&QIeYs3_CZzcG3^j?a75X@1|Hs0(VhOtL~f>%Gk#)H}`nxYt+H5QK{3~J5{Q_ zr!t;7wO6rd(Ktdh%FzuRbl}~6zTYM!HSht&Lw8r zW(P!+L~Cdq%q%k}mG<77r3tkKn&8fEZuaZ_D)Z*Y*;k$~RH)cprr&_DE3#rayeyAq z&Y#P^^zq={p3KqHuG^3G-o!e)yDG~o9*ei*=-vtLgHuJUV{6ds6yDGUO?DYbR3%8Z zT*h)v`O;5Znh@;>#}+;1$Dob1_bVZgoY;)-DPvkx|3IkY)reM4S z$2;a4(^K3k^`xk#G(7roX&QgV2HX&J^3eYO*0R2`DNjxrH+kpe8z$|Z_zx446aM!J zcaDE!+~1G;^|(nD8^;ceT{h;W(U(X6V$|P_`qjw4AK5$d#u2AS)RmuvO+eq5d;L$3 zJG>Dh`pU|5IYjg~HA4I?c%Vx|O7|8>J0qPyRpw2SXJ7J4+*AoHi8~LLhh#JX%AvB= z(Bv<^1D`@%?-06_e_!jywJme1_wvzRFLwEMu+Ge`UJQFxdeY%vpfNM2rf+O5A9oW2 z*n$bu35asm;w|E3Tn?LLa|*o*>LaVT0m+4!OhN1f@>}-udz7k)R=NN4-SmGHTy8Yz zJLww_C(xkVs?wFMppJ%}!t~Q^B#7zh)hlN`+|=9UtdAK0_F;Dxp>@XXe z8O(k_2-W}j^E|`AKo@4Zr_T0Yd{-Nlv#(5RJKPLm-mO&|V9an6!>%SeTjI7w2p-QR zk8>!myY$&L1mWs82$m2=GYcZgUnI^sgLKlw50?rY5>eab!_R6YdGIq(;oDCg-hc`# ztDXSt`AvRpJlwS-h#V;5s>8(K#CJ0$>dyrf-v9Y|ig5rvEQMEg9B!goc3K<&`zXA{ z#~RMn0b6-~lqR=pkT&WvXsCeVoi3dGmbSwU?6>H^Z~7W^;5TnM zydD+Ks@ecJ>6;2Fz>D-ZrHjMQQoOf?65sSM564*biYF1T;wE2#yV4jY6c+t+PKT9} zS~~P~PV%reY8EP$G`6_4+|``O{l@g{!~cT3Oc94~@}$?khOkF>k#IZl{b#V$vY)IuNhP!HAe65QQOUEh%gSz%-Ln&tY{-S2{zbK7lhWTk z{HJKc{1w0aCEEaL^+sbmB#ObpZIM@EaWVA5%q#ASl*-RBF?qNi4V=DW6^xs-fhDvo zSfH}iIGSLAN)@up3uOi`ymvYMqQ5F9Bo9C3)yQGF#u`~fP@|58U*q`nyu(joX)Rrp zE>D-Eo5{8n22_8I%nBl1hzXuJ1;{txzR>JSXB39R3+-R69Eb?D3my z1c0Ei(oR_DY{J3j%1zAAf5o;H$WoD>b@&N1>Yhd0wh0ZFNmzoQQCCmFf+bzCjmfsc z`NpOv9R4X9I&XFoCSNzHf+%R_@MxEt`--i~%PK{x&D>b6hm*9>xvD@%P_L@ z@MCDjOg;YU>tPIxm!ZVErSNSdetq~SsP?u+zl6CrSduw}7C4aB;dY0s0~8&)8)0LD zC{sd5fZt-r(hZ556@(7(1h9c|L?BDShX`cNR^{1xuRQ!HT2MLlM|BnBZgRHXp*x-_ z8XVp?JI!11a{q|oIEJecHV{ar0j-1` zH`N78We69fQz|+Dx*#ua?B#mC(u*X1)vuOa7{|b4@3|iWM{sB_Z#G9y51c;);n(F8 zyiOsy)a92?18|BrO5Xp!RrVKUQ~IXNntWu^zn=K333rWuVcd@^HjVxL*sd}E%b1^! z{%@m?jb1Y9)Tloi`OL_h%e#>H8}>=hJ2Vkn8qE4;rYpm@Hf`dG8~#T4gkdd2oJ}J#1o^whz^mHXCR5b#JTnE9!P`riwonG zN$($c_dJL`qUSq@XzDj>T2F0vY}~k7y%INwjwWa_o_10o6md6nnFc&pB-=T=4YWvo z(BHMDgPbCWpvXQ#@?*h8#N+{fW4voe5WAX+4yKg;i9!gThln$+3n?!@w3M_pfW{KH zdB4dJ@Iw2R*wB_}NgQCMu!2&Q_#r35Q)M}xJ93Q z?egIr)H=R<9@5dlo(pP+?W0z}arrg-!Zu?Ru zj5iT;I9`FG#t1hc@c=v-AWiAwBE?8L5j?9=1=T<}hG%;AgFX=ET)xn!axiLQKYv~& zOsbO0>^%zwCfYY9J>^h^hJ6{yXpjA_-ep!(WSQ8*&_=Rlp@z`Igb6VZ40YBc<`6Cv z(0fC8%Gn3=Uu_kd0o%j=3x_bQ1Lxk!zWO@+BVA}|L?Wou1O?nAKifsbZ_1=0aCRueSBbRh@j`VY;w z-gdc;B+wfd^Zo-^N@&s4^qPae##qgnmR^>=2dw2kLdKX%5&3_mIPmKb^7hpV= z*}r@6!f66JNytRqb^h*)U5sqD{XC*Rl9Qf3PF2&sLt@sl8~wVad+EVnpH1x z#eUfs2gB|bk0IRSp-13hgri}*$L(I_FNijU2_uGj`F*6B9xR?tlM)?|)N?G+f#c_vFGS^vn^xsaY9fD9NcI2&f?8&FPs3 zw_$PIapyD7aI(4)U)7O-_CWN9tHs_E)6#pEC!0_fn~J)`(LzP#-BL=-c2oEL2md8T zdS+$!s_vWFP|pC9+cw&h=cSfkwwGxetyVG2Tx;<_iRY~}FR`pd%yl?Y$@Jg}PJ+Dp zGCILUg~vj>?6gLB$Gag+f-vC2Z(y*-<+g*RO|Mx%yNIzRfSWmK&VHueS1Nik@kn>Q zWVnHjclX)MPM+az>|TBF8Bp=gy6#2YH*&q;h$Dwc>Wm&mkaH~B&bSWYj|;sjsS^bY z-3FrzxyFIsFoiM}V>tWbYAM42i-i1&aY4{i7C0XQ>%tz-0KU4DU}+AM%)Iq1tP;6~-rSyjo$U37^s<9bgRIrJrXNaAAz2xWE`<}nEFb&t8g4Z9 z$6Dbi30TkxIbxAVl5HC>0$`-F8N$H?A!l`R%6$Pwn6#|3jL0o6sLhvm%6r@h9Y6I0S-4{ik`n11UszhoCW(Y7_o2jQJ; zn_Q&*xJV~jWDzwXF;)tW9b$E`K8_^<-hbuDY3^wVFJHJRlba82K}%-c z`owCsgvHu6*nbPO1=I~Upg_&2Fx=}&tp_)ws(I65&=R53T(0U^>q%i)S%dhgne)F# zd}hG5xL)Fs2TWa;A9ywn)Tq>{g(mX;KXSx_W#b+kbtnG0{<%(ptDwM%(dmVR#rw0d zFF>;+z&?Q3W)KuS(ztwZ~Wh%;N3f6&La$`;Pqxc)VLitbPw8XnymAQx^Z|SkAq%y89#vAUuv@69Ud?~dEWS-e8Mzev zwykqr3cNGbgs27UU_UE<{gR#(--Ct>y6324qs(N_3Py^tAyb zAORnMGW>+fZ=NBFijq4oPt7wLEd}xGw^>q$kPk&!dT(An#FZ1%H+hZNHV78BE-#UJ zX@|rF{wka--1tHjN;h=8siV7B!9xO+yz0SIA3?N(VXejiJM+;y{5H7f6Fla(f!)8s z$${T8dtWkd2M)fD$MWph$9$`ZW`abb#YfgP8ZwJ`KC&c2%%Esfq9fIbevz^vav72f znp{Z;beOt+xHx--qSJ2>A&$SIaM5*;M{+UNh;SAnCj#rZU_w~xctCZCL5G=QVb%Z! z=t?6dkBPsq8p0%rj>LJhwk_t)qh=W%{Dk`5~ z<$wh8O3**njkOG=^O-d0&1Y`s+}An{hcm_qxeuQGH3lEB5AhTal-Nm z6DV(ryOtO*J(-6Rug}a>soSNBKp;me^U$maRaqk$7HdD@eM8P`erdzm1K=phc)6|s zMQPs;(hJBAk0i=|_hs*Y^A;?cw`jpIabcCQ)OEq;wv`lK4z75=xC%WC71HA(b0Z=- zrc4m?uONTCVi_eNs)jhix+|6`^D2*@+I3xGehHmLh^z62&6ZZJ))FGjy;sa>f+Xs$ zyH2)gFh=<)@kM3+dz@O{V1`Rdgd)|=s9x(1vYEAM9+=>yp+r2ugj30(glUv>dzISl zVVy$SnmT6;oO=U724>8S%(#61S@Ui1#aGR@f%BL6O(UOPD{FrO4!e&37UbA<>J%Bm z6J@B-BCwvRt*z9eCK_r2kEg|vggJl~^$i#;EhH>yC5~% z=j}B-SV^N~*$^CWDFTwp6Azx$-#`oQae2EB+iJ$f?medYa+Z?{Qo8se5x}t_E^J(m zd3H8%EB6Ws4TTxpFzwCskd50Gti6^cTCbf-A*^6ye9NjPRA+l)X=AV$S;A@t0kbHK z=Eh-@%?_f{`rDVm{~HCR{)9h_``PHf#+U1#ubu+Co?1Spti0ldMH9F?A%3>m>ZpA| z1f9s)`}iI~#@MM|rh>Y5Yn;d4PaNVmN> z$+Fet!#@HH`%)0vIcOvUp*9)4<7L5aQXmR7`xIJ^P=P?h0+vb5xj{ajF%GjKT>jMB}*rUrIE8k)O6>5r;Aa%nl%L+rOf?1f}l99%HP3xcn`tfjp< zR`Y`&gey|`;cym}SS)KGZmpv(8Hu+8E%ILYCI0`G&J9~*u)rkAJZjhGK$#b!HqUQf zmb>oq$r+;g?FDIWH-z9evU6k|nalH|zgp%pY5Z{6i(E!Z<}NPvb>`Ap^H0fK{0XW2 zuIMVS1LR{%e3|gp5W6M&2w0Rb-NoSpPb4BCB;{324kzBcbsc0gTM&{#KUHy~fl);ZM?r9gYD40%n_J<+(EZO| z3Ts18hWjOHt%@g&-NL4otok0bpY#mhkB_c6*bW6O}Htm zOf-Dm4Q8eN7VHg^#_yW6jJreMv>U&&W9Kk-1}mB&$|XDxF*jk&$BP-ADZ_`*g2JhS z`G!9$*A*HE zK2_J{Nn46aT3~ly<40RDOTx^_oO9;Fg?8>a8HkK73_$JZx^)}~K5Q4g#n4E)ELO0} zUu+aYJ`PPxXb zKwoF~dLAE6#LMrt#|OYnbS{piwzf4eJXYvw=hk*8XsQ0ld)1YwCSpWaLimNvm8+W% zJYHFgUr26B=ZbZugz(GRlxRRydYiD+)6Jdp7cLy8phM*skHt32@iG5MQ*iI_lV8P_ z;b$+lQ{<(|Q%U5d$k`YC_hvijN<^ibka;F3y(qL1i2jcHOS3K6s8g!h_Ff<}ndLf$ zK$lV<1R8{##8Wj_hy*2BMZI#>yHKJjQlp)SELkGh!THKMJwrLwXRryFhJQ^B>G5BZT<0ELD8>zbzTobDrhp4FFy&${|9ky-{55cEC< zS-xOJ2b9+oKmi7R)=%IJ1blJ?TH&7 zZ)5!Km-EkWU<7#kYUwPQhe7C;+1@O(vYa6j z+Z+RUSfR|4%kVJ&DD+I&&;W7YPQmHxC6td;h<5oo5&7V>0yrSH?!hjavfgVs>wN|5 zG7SZCU~^7G@88-PUyjXJ>_c$!()KDe8cl?wY&twZk=M8q( z4Q;SeL$Jr-C{iG#U;~wR?xLG_8+O-lxt+?$J1MGT0FF_!pEZT(K{rbANp|Nn`ydJ= zDCD4>5vCL~^DCAh5Fg>IrvJKJqLYQ&aEb?WWep z+pn$8uJ#gZWPQWzPiL&u!hvYo5O2APD&T&Nj92P{&=l<6=>N;hUn|4^*FWDl3LN`+ zx{Bi3v-kX}}b&4T?5Pztwn2CNH5Fqrj72+(jG$kEWbMcoZT6V=`c?AgSeOmrg3F~Cl+>K|f>BHT1U9N;rNz1lU? zqio2!OlGT5M1{MeV=Gc270UT@p%iZ6r~mr7MTv5n5}3;Uv5w-rWDVg?LuX567&7JC zIt#pc5IEbgiM4CNjnI{ukg3aFs?80t&@52WN0ukM8oGGmEO8#xEZEZ2bVps?9S__+ z8v(_zT2;!m@OC#f?0F+^)w>QCY@SiVyG875sB)C@wRc24gI_bxLo+-QsphHi;RJl? zTeeP*tZ0fL)Lo>#3-~yl;!O!O3IthMPZRmp$lPkXG??*8q!b@m#0H>yEL?pd`vQc{ zGPu987(g`v8HPyb@YHXlvwo~|X+XUzD0GE>br15t5d9Fs*$s06o?~jhR}&V#Ab8mQ4ZOQ5?rT?NA@J7pf!p=1bbxA9}a5Cc6?nhmoZD^i-axV zH`^??o%piXKsf5|H>FBnePL;V-8};PdmskD&7s3hAHpodhcFFXKrI40E3HII2%;*MWI zEq1R8k`(7t{`Sd(U!kG4Yjcsm1Y^bJC67rMrJy}UO&x@}IqqdR+Z{e_%>*norLST_ zhn6HAaC6p(`s6Y+P1t=PJQHNm-?gxA*#nFGrUumJ2nTOSdvpIERrXlf#Fs1ncyu4W zT=VC-dm1T1KA0-|+hTXtYfv{^iy?>VZ0$-Y3A6lW5o}Cbs!fN;e*^%gX7aYT9sz3Ug1?{|wIr%6ZT@(M*14nWGQe-*Xh~7EY7o~8_;+hq=H{^0kU$tU5v_C6%wTU^}3r~Liv$7Nn zk38b?Fi?9fv$D42Sy?-bS*dADnU$#jtDTjRf7ZKtaLCV_8l@ghO0h96Y-QZu)qxnA z|3jX03@^&F_p<2uVKs%EPQ-a_6&*4=x7I9(=A2bLcGcF^(&7;%ID8e_278-ehf-d# z??>PM>eN|Z>FtET8*c8YS|Ysehfs=ZSADKxrQV0g!icR!DdzB41SYPIJzFgpOOQNsB9 zItCB-{co53UuBd3V$y$|w0`2niH}eC-zGdY{(l~S^SB)qrz*yeeH4-Z{&DnANBvKu zR*d}jBOe~IdBmvloyhP%?k9ai-_3~3aOd>&(plvd%V?@f@lpq@PL{_yHj0y%{8zC*e+5M|4}sh1;R7gaq)U#@|IGyO*$n#v2P-3pLJ&|!eTB14g!>= zSkq034N&8|@As}+{|gvO0_*m+4nFco1q)kz)-`)m2&pi@M&jrmeM+Bv4VX))y& zR!UO~6LlE@={iCIvr8;$gMX?rnY{snQx-IO~}7q&~zNDW6lFvjJZv5p6A!eRvJiETezb zHv;XMRV7;zEvhZ$O5cP1T&1)jlz!CaK13NQpH@dGapjWY&GqxUfFF6M&1alfV_wL}CQ^2JkJn9cm(o>9HzFO`|7+BA$4^ol##Jm!H6Y$avZZk)Q0w6x6Yuy@ zeCtCk$@Q@oe7SdZ?pqPu-G`vrxKDVC`{^GQbAOJa~A^^;5&muy6p;r+=*}J%> zmk*uW;jx^!?YC->lzYPHbX5E>- z8xhkg%8vVYQB}mKU8oK4v=kOoZOOKIBE&H!Qyt)`CIlT0+;Ht@TnWwrOfvD z+TU+adsXq5UzhyOs|=SA4Hz}}PVd0cmk^>xX{w9#@4nbgN4MwR8#s7Ad-Qbn;Mwfn z^uYO#G~fbgC-?tvmHn!0^4W<~CVXf7j`7RK{o8TzivOcxQ^mBg^TvEOX4U9tN0*Jf zIO0Ez_*wa1ls{bdZ;|**`#f=E6`~zXU9|Gfig6>VDBz$7L(j_YHi$30QR6W0jhM_W zP#JhEm^BFEj)3vJx9!+BaDl6?^~jI0=w?sb0OmJBQ4zq^WQ638-0K@C+X^jx35a8t zzRPB!EGe#XXobIV4B)7!?uM;LR-(SzyH~G9eVypU!*QCM*m%`&Eo9Ha4;??Gi+mJG z^7FZsJw%cz=^Ktb!p_d=>N1ss-*z_NA4?@ttTp)MYHVtOr6XJoZGWZeM`0_+hipcW z$2DO%c_ybPANdi43X7`Jh#kifXhmSaL_=x?5Iq>;1?p~SxY{;={dTn_5GO4H?YDVj zZt;+m*j(T}2<71}_sR}K;nN0BeT0=X_+0luH)C984xZ}&d^_Th4W8;9`0yQ!(4_RE zM}CN7&Fm@!MVaq6=@H^bxlI|O8H73OL~VvdT3JfQ55V}QACd_%WZDqp4m4}Srn$*) zu%JiHA)pW9U3TPQtexpIc}$aqi~YVO-oXLU zZ>6spO<($YG3m#rA3E|7MsZG6`p)zmzZH6Z@1nL3bh`?b_2a=HND4;Px z7jSSwpiID)xE;n{TrDQ9msS|fK=|0V7Ywfd^Y>ku5K6MW`%fW8ozD1-MB5rXc@bM8 z9`=8}54jlR^NanN7j_Li|1s7Q))mIF|J?Jsxv69mBp&nBkvfpLdiIa*G&9mgCFO9s zAF_|S7^ASh?A&TYLXrH2x|~a>x9^4Q_IFYE=;kB$qww3N$2m=yPHewfuzYdBJo(C- z9b()GA_Z9AEn7_uZo*_gKAk!Hsf!po3JZK0>M{#F1y%%56d)yo;hS%zE$|>`X$#y- zKeGMEpP&hq)8jH-Sv$Kb&B#AkiwUkhl(;RAl*m0U>%fI}iQ{K5xS;Te#F3?_^46J8 zJ~_^?HL&&-ZDjka@lA$Js7sdxNF`ek!WTF}2znMIS{nr2M4-da8{rPJa8TKONA5#i zQ>*T{v!Y@I4{@L^xAryO&SL5aN|Y(V%?$;lZ#=RD5h|xwrN=_{RQ_#=I_huB{$A#X zBt_$!<1OvjXgZrUR;fh613T1IRLn3awh2r6-U(0#v3N6|pUgb>8-0j&=x&n}y0jww z%Om&VR)O%m$@Bw=`}J*FtHCj5RaYmi(%|8oBFEvb*Z~ZF?u{B_k2t*T_z7ksr_>I_ z9mD#?Ap;@R7`$2cMQDhb3K2A+-H1WrYM3^pR1w^|so6k3m;e_N3AKjnRa?wV0uBi4 z<-WMWI~=>?kB{7gPFGd!xaV0YGRnU#omtVSlJn4+Lc6(Qx%O0kr6Tnp%VW~t zwd^T$E{tfHQlA)h2HXLv9GN-Ux^;JVa|vjpywF$5ch zooqu_3nP-o+C7@ri`lgqnzfPn*zD54Bpy5nyGL#duFb%GTwFn&E}FVjTcANQ z6f(BjBvU=dOIvM1$J44=m z@e%@P_MiW-|H3g0y|R8Y@*BFd=jrVTV9aY?NOh*T+01m<~Cj=F@rTiv7xT4r-e&_grA8K&b<Q_X-YY27q@yuA(sM6oY!8YDNrat&e{B-%D50fuUIxtLKA zEL;pO;0mB8!W$fuu+()!!*g$TOK?q2o}|oh<~8eFcoFA{?D+LEn^rVJRFI&YVJq1Y zmaAV@B-6XY#6#b42J3R*=;zp|BQ7hMt&SjQ(|`UYGjOuIBP-)R{%#M#vzq69h(7)t zwsstrm7<&*M_2nT6MWLIckYchq8p#D-r2A_LHtS#7xO1=j9$v5g<{L zIEy{&^jGUaJQ^D~$Tmd%<5~D}v*!lf1~dsDA4yGg{T_zwRw0whn;JkkEb!E;i$RSf zV6s7RfGy$G8xuMoSI(7AjqJo31RKuA#=vwo?8CHP7Q4|U;WmLaZ=($QYbWGlQ>d$U z6(F-+29Ex8lxPIpV==%2+csxq$Vu~rM%~mr;ilLnU~maSFYU^6>K8bZyM~Bz#yU_j z@BnWGQ2WDfJAgy+x{9NJL-R@#M=Zcm5fy;L&4L8RRbXaS*jIfx-s;r3wgu(Ubt~|m zOTd@~K!0EZHM65oKpKPAga_nNM>Lh1M4kaB3*sk=xKOaofXJk!CXuScjS*L^rICe^ z#gW^gr_!0@R-9RB@E%|53`j$RRA-&#bH_Gkh+H~1_eCso1&lI7&5)%p=+Ti(r3i&8 zVjnGnN$TXeb>%hO)s2i#$AW(Ul&-keDY2?4GuyrI@`>LKoPHzo#i7ODb2~z=C$#Z_ zR{A+XO`c~S@B9JUMQu(L3A+xo_SLu)G&JWl$$9eG!Sgz(**xp{8sL4K-9q2#-=eNQ zHj!JwVD6jjg0e5|ze@}9Hp>P=n_ICW3bRL71h#2!bF}s9zn<@reX-3apY;z2m|bYz zid~XQoYV-OON&PEcAwSdnkp74QA-|MkkCN>3R-*ePV4e zW9)=7Y~E0RY3S7BxPKUS%Vy;vWN{<}GQd|pdH7p+j;TLyAr}DCD7=t{(N3TF-0oO9 zn^Ft`**4iNALIW&V#Lw1G1Kwq`sX?YzBv@wIimY}^o4%DyzKZeuGXbHjQ!vmF4ij{ z!tQ`YU-(izlv9_@G5i~~*;&Lat)vL*IeZ#geGQigbf$pqKqn7PP=Ob+g$TrhZ8AZ7 zqv9Lr{H|oXlor`Uh)x=~8aWoj`fLgt(A$u%#y)595yr5P!>@hnae2=S$}#H@av$)q zkR7hl`0I5se7IMj9PhPvukZsJnk_W{oJ-DH%2}7`%yByxAIe@|f8dXV+g}TuTiGLo zY}NA(t_sl90h_lvT0OhIHg}sV@!*O(vE2#S((qOmyx|aHgLtvNdnV;u@7|I4N*3YO z#rjZ*&?8W&$(4I~M{L6e8mESr;}9~g{H()Ymqvb-UsPdvmtA^8XDcH7DppA$5mjja9_Z5QUGO=R3v;?)PNNu+r?^|OU60`qYFb0k{Thd2WtUutzj-0ng`~g^5T{vO zxwN`^9eP9WK*(SogwVRpGmpKQClc4)a4+*H#L>*NkoUQH7DOjyLu@E_xj5$FTvt>^1g?=(uKA=qy zcB44ml7AC4f-1bR4KQWwe<}OfuG}()++)~Jvw!4WI|97A09WKMn@ z*U5kNC3YmBl4D`F?qkVHt%opA`at*T%y?dTd4$Rqy4b0J8fr)Rv88W(9%v0<|3 zv^#PGF9f4h;FXzF+Sr`+V3)SYW4%MH_G9Q}C#1Ke?kM^Tj+|j zow@&y8o8uw-2SouYIHlkT>o6Bz;z0gMuBG+{A^6wxQbn|FZ*UR|MvL{@3=bYgx!vu zm^FMQDk7oC%QgJlkl9O0mr~@jE-JZH&LFD^DTKPfkUG80& zPv*p`z01?w81Ag6cIsO_{%zE+ZH*ntgs;`hD?HxjDz@A>;JDBJ_z6y#-M4-Nrwqd; z)lum*1JFf8yW$iedsYp^s$#_07Q0yvv_ZJwN&> zC)Cc$Z_tDSEIrV#EKezEHiff%bEncZjXQ4sp3O~ zUhUmix1-phNdY1W?gNduK!t~N2r(NbftPLg!)jz@;bIDl*Q_~NfwVcTzD%Aq&|)jn%V0? z-P>)`dlcFPMLsZt6i+lbR58w1z15j!)A?H(?a|3?oeg#lbRqzt`~cS37DxQfluHTg znnc^fMhXy$EQIH%il$-gQqYKLMaERMhng6>q3R6!1Mq|wbVJY{u@Bh~Pj9K85q zX2;vUAke4TP^Lb`21V zv(y0Kg|c16jipdA#cnJ`)8^e+il)rDu@p*YZY-*%4gj%olS(6@32qef0ahxq#2z-T zlu4S)#A4&R4lcfo0{x|hP@r2%VatJf+rmiU*r0kM@*FeZlZ-H_+I4p@Vk&dM)#IPu zda|!vynLiDqKVz*hl%Y;ir<|rLC}=oDDF!rnb_2lOM34t%2cU_js)Z9HK(Vz)4%_1j*49_4hf+wHWJT3yqwZ zi8-5Rt&xB2q{xjt!FRzCmA`VRltUZ$w(vbl3n=BXtSP0s5Tyh2j39-p)SDjuaNCqK zRzza0X2MLLkwYp?WK?;aVXKJ*k>gk3slz$3;PK*#r)@Ri38+u~Daj|{-~O-Qd%zj)12a&EhwFXp$g6JHR;qT8!%Zgg;4Bj?5aiF7(F8~uCWB> zRe0A3dohcj^`dV559(Ct1d6ZpC_s0N} zFTgvcuB32|uVEeO4lLEWRa9(!_*=OE@@eqon(Djn_6!Rmd&D2 zyO1IPq-i8R*W!q$Q%r4bZH)r~si7vosahPlYp!*Uf($z-08XnL;%280f`gc2A~%W} z)&I2;g>OTAZc4q8evs3s1gxJnB8OtR%6X6Ld7YH&j5#8fL(&1OP`#rye_qN|-2Z^h<>8VuVh!It>n zzq)oNQo=!gnn)#ZBU!B1z)&B*%%0?(VJXxef8dX+IpyD4QT{EE-h!*puUf8a;4RP;*p{?Em>{5N_-r_YhV}kXw&62i z3&Ig9rkK2pFy5b8(k=B zj?jxI-3#6UuI(6HRLtPiW5J~looU$Ub|9{vZ2q5{k?fQ_&vI^Ci;N_NyJr6C;9FEE)V>7TR@ zp7i+#3(}8S&2@PyYn#9%3*EAV*m28R+M8oFo(r>|tx%2m&vKtQduJA983e!k33W79 zw*cUaek68eZF0AT@hYQh}BLM>kqIuZK$w&N{ zIE{9l=Du!B0AUwi`LMTGl;dg0+~z1;y=8HAWR6|z&cS0@>cPYo1iGvB$ClaXd{Za* z`1F^#T09EJ&BH2dt>8*f5RkUYdi^rV_hcS*OC;a=I6OlF3O@O@QjptT$rKFchn?JD zh1g2DVdK7ARrYGxd}8b zdfBM6qZW;PXXK+J{$|7@<-aQb4zhijT{i6I8qbgF(EmK#0fAQnzgPK#83XFlU$NH0Fu4l7U_h>Q3xcv zQn8*^sk}0;^316(26vtw*u}Uf1mir{n|b}*z`08bIy`XnBmfr&w*#;I!oZ=oUEM@s z{CGcb9)YkgzZM5l!AX@KU`K9` zHzb<25)+yoX*7ZIL~7)^*BDRXUeO4|eFZ^@f=i*SwwA4oT_`Bk0Nrmg;Rq>k5=yip z}aR!PXI3AjPZUo3;3BjSprlOHx5P3nG1z1*~xGKfcRXrQgn_1mc&>KLS0jEAI zfW!dU&73?taPHH7fvnDa^qb5_eSjPV@iKkS1J_;A0Ei#M%Gj;LP z=32o8k9beRH%>$xb0hK2hA2iG0TqGk5(ln-N^3BH#AcXB^lU(5W~J9ve%Flh-rbiE zoWv+A0;xBed`@iH{im`rvYNjC(ur*P6atz6y>#&6*}*ff^7~uwVtwF?##kKq2oR-v zv(LYsJ@}axt8m4RB%^wo(2Ch;#TX$8ojEZT8HUAtk@aAJr@3HAq7>EwR+m{uN|=s# zD%sV6I0u#*B!EyP8u=+O=|Cg;iOwZ?39m1!2v;&;6Tj|>3o)Lo9Al>Bd4RQkW+tpI zf>$mMymby#0j#br{v3J?{_ffAxxRcFps$FH!|8u=duHDuu9yqGK&m$n556Z%B-Yc2 zc|AXUV`bUDZtiRaBt;9RG}iv6M11oDfKzT{jLgWxYgRtuUJ<0$pi7&xZ8Ji0#5x+9 z1-{+J0C*z4UdOz#r$Oqdv~^^5^bDLn4qSe88i=+)OOk*h5#%6TtvxYkKIzVWc!I9D zuRY5M0>9e}8#v_x+8`~*4(f^?#+kphtFrw4hY_cDC9(1!5XB}KR0n~|IoGiU`F1V7 zm_C@jAl0?Lvmx<-cK_b-3iHQNij4XrLJXBhdzkYrrl7N7(F003}ZXv@ZsO%#I{2UQHGy znH`_>pZh=~8@bh_fl)Gj`?yj*M^vEq2M+DM{OTKn zXFeUg@F5_PGakOOCU&b5z}JJ9jv{P`Uoyz7lU2*X3;{&;Ai%0WdPUH=Sp}e)Q6tJ> zm$Xpb+ke{gr)ci%p7P4FHy^_0!cAB?6vTeqkGZ!aMy=g-z2N`>2!D<|2seW;TgtSE zTrRfMT>?(MDG|f(F31m6ScHEY#9p0@3dbE>+k~M<9tPBU5JESS>S|~v`nr)_Bi>81 z!nEVe)B)sqgw_Nj1T-Ij&4bCSWeLkm-`!I$1MwsDY~aER+2da*XVXpI?9#&P$otO% zv-)k5OyfXEhysino?qS$vhS2`fd7eXs1skbBlu!^g53ZdB8+_4|Q zEnYx|?D-c6nd+9#M<#x+T`}F|Jx_sQ&+B=-@)jADH3^(}9!4;fcn9`VIVWM^@+aJG zJ3#6#OkR+06OIQG*37Uv(2a{G7HNU2(LA-ppVz^lPq<)hO?Gw4sY?eO+bB4&K#mi! z5#?ZR6BM5#3Z;1p$>e-x0obq=wZ=BerqvmV$5IlY4tK9cv{jdLq5-Focq{iaOeB?2v@tX~rNo#bFBNjlNk*5A{3=BFyP-sJz9D%!}^~?B1Dq>$K@zc7I?0#iN+j zI{z_DWSDQAR#qs;o{JLKv6Kh=kzFpp;E4)$MQ5H7CD{RhDAb#8Db$cSey?m{dO z0@@$@m{B`Uoi%Xum>aL2!08z&QBL;MLE9Oer3c^R*-j%d4_@rae2k$sN9bF7eul2x z)?HOO)s5#eK>IQNatk88fD@BYR~*dd1eOJd$+AnG1O$0Zf|nVVDeiH>O6AGPKUrhp z%Ccp(=0unt+4BS%I4d2ioa)nhNJ8&=8KD%F9FF3S&0!cY(K8=kvR0Fk zLL8l@_WTshSd`veIZNpD2(M9`J9=nB$GOj!vkZC8T{7$>d~FE&dF(v` z;eY4wQK(sNrD^G( zm303+SF3u`N6HC)h&5Xe- z@1Tt5j5*GX;j6ExPeZStRG$W~-k?u9ZPx9X7=30UK33R)AdN|=Dy=;&V}N>kuM<1A zomA|6FfVtK3`*M2l=L$nOECV)$?hqUZNmVO0m|X3Es&ZWhz8ZxisXLinU#al%k54N z#GOqlBBZGMN#TP7Y$qz2)opHuUN}XEPin2CU{UEc)1>IBJu&*u0yYr9myoq2ZKv36 zlT0FM(wgyrpz!S#6;*W3OLYYkN$MFWeHKTiSB>0t;g${>UZGcKYf}($Do!3Hs@I6K zwW%C!89MRdRIQL7jZB@&V@h{SSb-s%_D_x4yjGGh&$=M(SSxLNRVm~rCEY?sBHh28 zplbKQpSp9PD#<&!BJ21l!$!DZ%2-+Yq=HeOEaKfDZV=*lDmOj9AX#?CPy!{zaXb1cUB(Pn+1-W<4stG?>L`k)?T(zK_ zid2ZD3>AZX)WIz|iBr0!UZ3_`?56@o5r&S87252uWKbjks796K?;_8W++1o=j#0U} z*qzhcDSj?q1MgG%W3V)S?ey@w2NMS_LVGpXoH}dA>e<@7R+(rvEh&(mtMO?=2(T0;Y~*u$ zO5@TwPN}k=vDFx+FVeGXO&55Y-5R=_;o~vnX@wnrsQ3N&4#Gt1(a=zX6mI|B3zZ=(pZSn!}J2TVg>d=`K2RO0Fxd>FWXnslz$Z(#nzC-x*R zbk0efz7)UFrL5e27nr!D6H#(w{^_Bt3boZa@dIa|*Y%);rvi#S>m2Lyd;HwnCrHUr6-#B;GzjsD-v}|7n9-{4#L)l&E}% z_Wlx9{ejE-1e*BucLw*94@7#nl@#$rq#>fsieg!{=;A^@u&f%|W>Lu^)>f>8pdcfltJpT<44r+A%sxqkAioMZ*j+Jr zwl9Rz-_F4UsliR!@#_Z?7q0@H(o6i%et}i!N{}ti4SJFpaLJZ&8$lKhzXsd1B5TkS zSCmh`zRaaHV4#JR#r-rUtAPh(lQ{GyRiwRg9+&VWL@J*GzvDp0<$44*owY4Ix|6tg z29^mKfKW2L=TPF!gNaLrF&fz=fcfjFi@OJ0UK$BusR0k1#scZzU6>7r_v`^^VvS53 z|25Rkpf=bWp>`&+J9mBfSHxm)-V9#28h^W&emsA9`1)a~#*VMUdk@6lJ0M>{ni(fS zmCl;NmD`cmw#|v3h|yj$lt;A1$TMJLI#gko+Y#Ad2Vd%g(FTB_G3;-NKCTYWemRER z@kq~ffBef=2-5Im6fUL zfyMezF&7)KYCdwU+X%@gDUl;0F!D8^Z2r#r`ue5y57vjg?nGs=hCJ*^0<@BPInKO! znUpQjtq8{5mi{eLfmFBP8p!t*u5|7RC=gnx>c%rI7ab#p=tX1u}D6RY#1(sWD=%fwp`j;)&{KG#B@zkzW!7L_6ReLAAxysBPgF zI#3P^-gR412}{7^N9@!}?}#SSk|dOL1o?{|-=1ReDTzcg(y_T62+dgci1eDmbh)xX zXm;8KEKr(yeN`#Hr6dYyhE*}C%HO)=pHi!Vc^7UaI?|SKKyCWMF5hjk@inB!M!+<9 z(JvWY=z<3f*?7;imL%=NG%YAD zZxo0s9<$pHiMbcB1)gBh+p2G8kmmik-j zFRbZE#gS~kAp1I{J{3Syf2V24cA;*o)1+rmcQ5Zkw*VJ9`Zns?1@NNBeH3L^cZgz? zJWuHx@+CC3rlG`Wq`sYu2I=DH2;O9r_;s-Ur)iL-5Ji5hNrS7^92p;!sL)pi(+X`R z=*BYJk!EVo!<(W0)n@bGH2dW@93Hm+k8jK>tjAy9{`nRI-(uif419}$uO0)vySlQ; znE6H|>%CE%8^>bxytTYUVw9}L?XD?YMTRx;f}@M*Xs$*hyq+#g5$lKf`YNTG;Q<{Y zLx_^w`H9%aYnII4G+jv~_Rq*|oc4D_fu{W(k)dgShxs$@?@KcL{y>J`muC3=!3@7I zGrwzvgb_8l9Cf=EJU#o6X<*%9{1U%E%@6X&jbu#li@pAiM7;I4NU}2om&|d3mPtvZ zJlpKB&?iXRHVE@TTgGnh%A3))ZD-w6*O{~wZXtB6*JZmFgt~!pNi+X_*}j_+t@|<5; zE=HqE^-lHDf(OcjARVeUQieNj>HJcvfxEF4s-Y^xm6nz7o&oL7?tS0u3J~*utvsvy zYhnJkSS*OcMXCW2QevW*ain2=D+LaXh4UxB`%mE0f|atj8I$MOyy!w&1%tZv`eUjB z%BYAW;Rqa^puuZw*9t!&zziEq>xfdcZ)C+!VxLT2rXXTc?*B!LGy%(ahM%P%UQ?{z z7*^I(sp$D+XnSJ=IkX2O^}2E%$hRZ9^+`ls)s>Z2Zb8_}y6{s_pBvMS?#-|PPa#m2 zVg&bTb8Wb*w4v8xxfz+$SGYQ3LhYE=jAW(dNd7wZWpKXwbr?MM@)~ph=iE&b{*MWV zCQKh68h0k=A9L=_J{tJPz@DrDyfXSfKi?Zbl*IyfO;KRdz?JvnhxQF!{~Uo@Vwo00 zlpQ-pSstJkbHs)NyVcOSkK*UL2CjaLs5=Spg0V+>8n|?oIy-t9;a>;|K}0Hr^};Py$n~)q4kXj$)m7}`lj$shuuyn9FZfn zNYOnvL~qtX(O=7)l7cKk8eT7K2BBEIPpE(fzfAt96hTfMMR|4-{qpnJ%K&YuTLI7v zYT{SFfT>y#B(s4_gC0bXLg9x7lX~)G%H}X@fgTn!L{TM9zCV2IFydsSKWz+GsJS!t z3ylA?TU`{GY@vokD^i|ERn4EYDB?MNCCHKGrv6lXT6SzVz^Wp&Og8fr&95I9m%fG` z$c`-G{a!?%M7p~ay?^ba!H=#eQ#c$(E?yvm^6@M1(hygSB%5+lh}Ofg7XjhY&WfV! zaRQPAIEU-jQ+QeXE*0>M`GaRr+8e@qjWktFHYucsI#8I5N*Uo4Mo6WJUY0E%6*A-# zwiE&9s(aGcQ}`QLQj1g9A+Bf~|4hNMyx{Uozfj9ba&-9L!?9f>!=DT)*}C_C2tUZd zeLaa2AJe8je<*(a^}(yhfHGoymkx-(Lj1}H@k2)j``~8tCR}vjaDc`LWCn9EjT5iB zgI7NhUjz!9g)7ef4-s;kxO7G_A_tyQ!)Gohb*!1^w%AU9zr>wZ6qqYG_3%yC`AXf3 zAy!}{gy?sULZ=XY@|$OL5vq1M2vr3~RbjB$Fm1@cyIltZZi(%{XbX_bK#wMp_RqE~GXPzd}l+gUu4zp<*D-Dr3ta zpwW!t3;tKHMz&B9X1xyzV^I!+eW9pTj&Sl#Iq;4jAWV?__AXqVBR+7_lQ_-LGr`5N z4@n@<{(!)v1p7;4;BM%`nSsl_6!Xau{X*^XuEAI+)`qp2)m2gyc$`tz=H=eO(X9hv zNz9`_R?51gMFSIYNd`hmGGfxe&_M~qtAu4+DR<~-;G8>zZWaRgWguIlt$F zr~qVIs-`H!3%!!vZCKn%fX9c z#CE!zp&X4%_c&EP)Qy2z;YIF?-$91tLz`CHTsAxkq=2ypwsK_0FJUj@^Nvz02u^@|( zkc@i@Q>U$g-oT=@w*lizB}X%xhz{eBia{q%=XI~6(If0#j+fz})}T_v&_bwuA`oY3 zEhy6juZLEqnCEIu=Esm3479YQXoKJ=apj%(-YbL0UmIar;Hu~``EGaU+$HrEV*c6Z zG5+e6_^DH}04A3Rt&E6}bc*UjLanTOXz=V+B7SzqMg#a@N@GJsdTo9lL%OiQeQr(B z6TCDxUy!E8=0=?zjWMe)0Ld$aq-l!6iEqILgYt+F8oBhPpsX&|NL1|3EP4V`pCD~y zbV(`|C5W@jDc$?5G&}qpKAEN zdgr#UMb*1-jJf?q^jqH&uBMA)Qex@!k&34A*RRagN=xV(k_z4$(?k_1=A*$8^`gAP z$P;ykR4UD+4$kZmX!ie2RKi9noLpr!qdGHrBIKW^r%l>bTTe=Dp>%O%t*lr=YM2g3 z^!u1WPss_JL5ZCVIjnsC=s6qoO{V$)rUavh6y)h@>Y7QGkG&hS4ty=!;kGOvEs)Jf zl_R=5m|nfiYvUmI5`}#MD0}pHqP@_Xv`S9wt}qn$C@v9VTq%Rc>gQ7?QdlgSV(p*tYh zM{wOv6M*Z5;5x}Mxa6aND?qD+-KKkNAsygJ)QE-j(&xfWO}H$OMw|5@3n^DvO9&)9@wry9E-i zmCy&nOqZU261G#hql(B)=8H*`|I%(f8ACcSr|m-~PB!#E7x?j4&Hiq!B&sel0{scJ z)z2Yi;p5?OD{i9O!=eKmZ2_JUI~Wy%l=v6%oPY|rKH{v<3tt*P^h+pjm6<6Gln!(r z1DARe`wrm3h`V0=)$aJ=UpZzj%2qhXK?oQETsc47mBjw*Pz6GJh#Q|I?i@V+IrJW) zTf`NJBFI?Xs0Lm~xj1prtE>yPLLngt!qBIN&VO!qR%+n(#VK=oYLneMe(79%KiMrw zamk~|xN58_x^S-s$AC#b>>#^k{OXm&-q$4bP%ib5VgaN#7!*K*S9>H}7qfzCQ1wNc zYFJTZiAXDNz93OwdxZ44Yd9#(_l)!Wd%puoNIHnP+JUP_VQL*lno|`b2*r}idVEUl zi_qP~9(UlzN&M)84(j;CC+}gMCn zo^?rg&wYOs$;cP@l1-qd-NBIP$4VQ*x;kLUVYe&}Pu1Wv<#6Kzge+vJq@DB<KYbs$g-!ck}-)|4;LOlmA+NH2>-RCHdp?{&U`?yn}fg@|NUH z&HcOFKg@k6*UkM&?t{4#Cj7~S6BD+N|JnGgaSb_t7`Tyj9YffEs`_TnTe>ta zFR%>QX$W^T201pj0{Cf0K(C?mgV?;ybYxDireNaGp`ja;?o`6M<30FH#GJVF>%^(o z#bj}_PH6KDo&N-p?Smh~?spLg823tUUpX+aWa=wRyJiLQv;JFnXKhnQ9T$)^z)(@< z=e!)hstGCVU`|FQ7|L*qOtEc|W>(^PNa1AK&Lc2ggm;F>(FNiJu+S7~X_(u}dT#YL z3kM|Ku`vnj7NJT44m6Q!FhV64Y2Xgb^L8lgkyW4acr)0P7dH(I%HIMeThfxj_^}n9 zOk}pw&=aN5@L*ET4qiDx2VPFy)pfKYNj@(w>Emb{v`K#Kprj5SxOz~~DmlOt2VVmx zBj$4Dcw%2~d_Q8jI|sh(Md}Dr95NBcFTPKyqz@gIyzayOHxjSzlg2~u{7QO2V=x@> zXuC1&xlqB$DI`Z2tXKBv@)r20q^efK@fjlhlX;ixPe?`pi5mxmIc{-ZSpgEB&vkQN zroFHwOjwGvJ=WO10c*TUeXV#5Xrd5RgS)zLJB%h+WJC0L5qU*B5Eb0uYz0b@rkeDc zL4YMdB;MVV_)RYob^!YL5d_MAg0Dm8`x7TlQDix?`hL(kaJ`?7lY>a9(V6W|?JLEG zzpr|CO+Khp6WzK{>%$vxIL&d?K1FS-NJ9%WxNTw**tL?lfo=}Cu{RlbC{3yQ2WKe{ zAr(<`E7$yhB}U#SSWUKc1jWZcJqh@R&d1_CzrsE;3)|5517buan``obGv=3aDlr>U zqihM2M&2G*ktuHwMK;!WB&ZxEgSvqLIOxpln}w}9eX9Gi8^u;V)*fn=-1c>}LD#~< z5r!8CkD_wPGMC~RvzEWrTOs0$l!F!aN+@_S<69vsY4fI;j-e|xRR?iP}U)$iY4+XuOU1QY6; zh`Hw&$U*Y$5A8n>k1wF2bY|cE!1~NtS_|0gEwZ)#5h<={RYL{R#Q;C1l-PW`lg{(d9j{BxON-P?rkgx@Lv_v zzu)(LG$}2TCd9<5wyI`C78TB{zWdN%k?KP%oZ&i*f_y<%N7H8Z-HUe9%B7=5%o$s! znJ3R5R>S|i;`=lDO3-Sq?yZA!^lv~ma;vNR?(4e;jb`db$wS?HZ(lJDRU$)~ORu=e zR+KF5yBm*}E|bULwWyB}YT6KL-9W`o+sT@u6VUj6thlGNuLy6JsyU#DRY$04b+{!8 zFCSd)ye}2SKj`}&T9zoDhGYi+`s? zN{>(j`cQG#y?u9}#VqwUh5c&YOx6AFbo#zSz$jW|<-z)nc1o*_0&zrO72hrCn}Q}& ziTJR6qHs8nC)M~=amPJXL`HaF&M)JiAX#PE#vkX5#cdu>S0F1sBT?Ygo&K{j5l*a7JGqbzLem zGyLjVlpm^6w)BdE^1fU&ny%K~V{y-hpr2M1${wa6S61ZD?VEtMm1HLrO^Vcb+(d@TzWeo;@uV0i$Op9u ztCB|*?vtu9bU=Kswo6Vhz{*IrHMgn zyDz!Q;AFzj;_yZJ%ROI=a8oplq7!XlefaRfppsgh_$3Jy$nSpjC^GTj92JYEI!idS zlN=<{9;d8$r@$|QPTAbocVkAg=D8j2ra)fcFUVsb+=pp{(6y$HZM6Ko;-w#w9x0}n-)wbLvL8I+|FIEzl0?#f3!2)xg?Mu_=^Y! zp+r|n5fghABs@hwd3eLhF(A|5>uyw#tM6zL!w-vmRdzYG3Koe|Agyw-OPSxPh1R^8){+F1)3qp&EtJ+vO(C zORbnMJQe8y7gcL(lt?7p*lf9*i4N`)+zoqug&OOkLAWiEbpK^HDctyOCaN|}+`b3k zD=KLXp87_@>=?aK8lK4_2F1BD&U`#}%d{t3< z^YmU^glxp%f}|X4br~!uEUCy*=ZA?iUl11EcaWY8@BnA^{b4?7aAnF5{EdaPuNq~| z{dM`M@K)TgK9C1h1-bS?RIpBB8nBk6HO+l-sI;K25hhJnSDLnYEhxo8REj-z7zQ>l zHIqSaqWiu6S`4^g(aR0?fX{>*pixC}v}z54`9&CI>hHuQ!6Mtp(Vtl(zQ7AtR8QoV z#n;pGuL?6CI`_`-o815fzP%|!Yy!p$clB=}z?M~412F3FG4>SFawAk{#1#BL;&5vY zAz_n4h0lX%lKLLbqMJ4;aHsT#Xc@{oIs*ATICe<;)>WZsW0XeqzUkidQK}b$M}CS{ z1@=IK!h6L)FqU`n-K_qf0;K6Pn{lvV8?|+al@Gf}eKM0Dv0v}a(ZON0&vUo-Z!Ux{ zXNg){h(JbO> zU)P92GIS16)CdASAVm;aBfx+T*O%P# zVLpL11aC>YLD4}<@PIG~*(B&>;QH$zzueB%{XfB6@0;4$(3y|9!k3n+2f=l`y`mD~ z7R;(qWI_Abdfu~iZSf>TT6D`g-3N^b>nQ9CD6jduGidq^K+S2RiWo3xM-+RTZQqJ%7{~ksyEq{Ee zVv?(Mlpamcd|{q#0{GxNg$N>+G6W6FbsUn+o%RIzE2n!}#&f`9Ms0!x=hw zF@EUii1Nv^o_zAxU!#2DF6!S1M9!S$E^x;~6LTShB9qn)HwvgX`Fa>aoE}{jTj5MW zY@dY|XxYK&5jaA1P9ZI9rOnCQUdNbGoP*kc!QpGC;m41Q@$hRsW8>#AqC`BS08wr9eu zYeH`Nlt(FNtBA?bV4J){*QL!(5SfDMI!@tPV|)7^cV2%rpsy@(C%KaddQ!hh(wcDF zvvdq&Lle70_UlLoK*-B(7v#Xw@cp zs^0=p2rAKxFcKO!Z-?nT=zA+8Oqtr>?H2Vv4H)JvfD{K9C@60YdjzOkHo@ZiVH6;x zbTSICQr{`s(f<@6n_kiYsoRF^Cd=nd)$4Oi0POzWi~Z{{@~o-bwn4piAz2ffd>Cs* zc2Fy?Ic1}k!Bd95N%N_0cK?%16_E(dI~@~FhCpu>+#@I&7{rY|XE^HGx)d00`odjw z|If)@pEaqY;Lq{Tw|~CH!0lk*NP#<*f*;RL#9P{KmGNUEzrx1ELa z7tZIxPPgOht*VHS5oMw*Y9l;Yg{p+K0d-FNsD!<_L-KF;u*1l#pe>H>a@CbuR z-;iQ)w~QhH7K@t6l8aGh)Ct~kd9hp!VJKq|iN{5pqhsda|($k}_V+YbPtiD)gyZ+Bp>bIb0#x?6q=9cnji~AB!yd2N?cJp{bvMMZd?V+ zk{z~}%(on}bszHYmdH*q`6pEfvRh#W(k27+(pDlmlj;TuAFw;~KKm!#+R;XiU?aU? zCj<1?aq~KrPf=KbLv=b!`2s6fpxx4{UF7`?hIQ*J2hN7zgbb4y;b(Pq{{dVw6^qTP47cab!*zx0t&OCzI9xjJw0yhZcJ7>TJ}@gEUWGZi@U zIL>I@@H4(Vc3EW1XNs(r&Att%u^De#5YZBHp7{f#gt$Q&Zff?V-3=h5;4(17M$!&L3Jx2%+z^}GoO99S+#FPaXqVwX8LnacVsk#kSmt1o=BgQYWOK)m)L()>amUxMRUv(y;D|k$J)(EBGYd1 zJOAOF#OH-wT2+A35F>7TC0YMEYfA5wd6Q2}UNGrbla@`qG4YAQe^%7|BKhJ%5!v8X%bo{yTv&Q`}=O@|!Iq+Wt8}ZsV;*UEiwiZ4H^NQWV5FA}5K$>RX zSklf{k$IT^V!c13D~;=lG61M#FGeK`MXc^D2!9(GbHtOCRH}VQz;}@HtFT=N8dhUS z&U1@nj{%_4Vs{#O-WY%~0|PxeN|QFRq019)wOwM&V8ze;D&E~q5Ob|A8@OC|TkKIN zP-hi)2HbfB9ed)1>uwb|(J?XP&}y^tntYu=;cZBFM-B*KvTu?uo3D*Jl}L!=2;eXV z!yhTVNm(2etP1$}oanhISuK=@J(S$6+a9>|IhFv40SB(UM!M}!48;eS4uRfs&GmGnAss z5W;x(C$TlaH3(s|yM)FUgYc~*TfeVeQz#xn!K^NWvywg9_5Y%`qQo z=SWuJq*?kVnL3T6d5&_DIqvva6^N*O_U?`FPn&=URLj%U{tS;aHugZ~pk0hj0h=b6 z2+R@WtIw965RBbBl+B!;!DYV{CRK5lWS!`?&tAS{^?;I!O#F5{o#xFe7KzVIj_Xf2Ci+73;V^6$u#crX*wJjdAExNtBv6eJy_N5VE-qo<;!p zn-X6GT*Ij zPq);Oo!=2IiF#WeEtO%!F&lP1n5)A$?-1nYu|2g*2b za=W|0%@<+F(h@Ql2YP&#UwA%ZOQ+cE(;&|GTFT%zec{fnv4sF)X6d?(vdGmP^+-Mq zi-K>dtEuKYZNMMRT?b8%Qx@fB2s>mS-k>-lIzMtq$T$bLyB;d?duMYyrlazO)1Wa@b|u#X9&*lCxS3=h40aVG|NF?2e zhib+$OIyl9FuVBWe5Wlo4}H&CP-FMaDhW>^q2t=jSSs>O=`Kw832s$b6+P&_13)c_ zO345G<>jG^C&k$t6Pm*I|Ex<{`8DJIJO24+^QY&BU8ST#JN$BJ)T-T48=A+g*%b|% zHcufslN5=5+j9DRVo9%jo!YYJB$#0rQu;)8z*GcVDh~IgqCAdy zlYTuY={ZGhr3OUqp3#kFC;8DsEt_vfS0kBUQU+pk+~|hlrlw~-*n=s9nO{-{tKAi% znBq|&ky<8cs`Y?NQwB7@cmrlkH(Ca;o<#HD%BB^X@-5M(M*O<{tZ=zwJ zepFxjmOBs2+ODiI)HDZiE40pY9K8$%y`uB?DBag5JyZiKlqS7L`LNm{xRI_s<&mnm zobtqHmC|KTXegg~sHdju2gE~;Ecxc}5S3tXwEV+r{w?o-D+&G48^CZ1vr)`1-tJON zN)zoU_Vd38-l3SO?YN=QX7dgIae$d;;u;xv1_}1Y@m}g(o3FvP_9kmX*EhDq$%N?s zk;e95Qv|*<)>C$*r#$R-c2=F*&T0qSp^j>RhXce!ue7#?>pBZH{7A9&brCtsI!%HH+BGTb19WM8NApExXcX0#57u<~1HWciHT{%&uI@$B#ct z;=be-Deh~@J%E}lKQ-^E%6JJ=gR`0HHdSI9FJK2N^V2Hz6Ro(<-%K%pEfj1#D#t1) z6GvTrPUX0ik`TUZzNw-Yv93|?H*QSPs-wzzjEt6?`?-vevs~dw6D)N_f6_xlPttBa zRjtU|LDbT4TEAUf9%%-XrWB=r-nJkpuO`EqI-OO?O}^6Uq$EuCPMMp|CdnpC6Y|4q zCr-vQjZw{7=&a&g%Jh$-)+D;pE`~-_96g01K_8+$l0>q)M!F!w9S4@_WT6YSGa!mt zESDyPz`r!|87HAw?#zf^`~cTZp}qTMgU(3mfNcSqGEqTuHHU8ab_|V!=wB|ZLCI&g zbH!9x?1iH!mZG=+_8{Bt%ItcfHrmHLZ!?)gpCwIZRq|xUfFgU|t8RDR#N$SucM47I zmi+(sX61EGIFkK81@8T4qX76P0JLjX=kHQ7*VvAZzw&H1lA&7k*ZJ$Fm3)|rjgp(p*DW0wNPe7vR(Odeco#8?78CG62K zMfR26`&j2%TBt*l0ySSb`j^dHxZoBY{hmU3l@^#R+CzedQ6oRid!s`ANEvpMfpIu< zDus>PnQc?kM1&LCk z-L9lMvU-mslW$r&+JYOcosZF8{>M#OfAdxE<+<}0&z(Qk&8&30A%qH0I1KG(cu1mP zHtH7oRlI4hP)J~$=EYI%X5Z?wltYBy9ya5wOmnA7Kc2`)#5I{=%A7Wj(AGb*hts#T z?_F)E#RlGuhGB>yOB4a~{R@H5aPn#2#nYf)#O_*-92gFL-3UOtXlcDEQhk0&@O#RvtA0C zhrAy~9}Si%NG^Sh8pWO&Kv($ZU~YaCWKQ|nA7N)rio2R0e9+v|RIWRE7gsMLkzf<* zd$ezzx3FB_w2~w<$04sKcC1GNUrHjZzpYSFgrx7F$Scz>$w^ujVxZhP6n%!v=we;> z7&lWzpmZ%v6ZPcRC~RqhUeQd3Z<1Ws&O|{4;nE#UcI0mAXcHeMjBLH^T_ZP%80uT} zF$=sYfpuC>vcOU;DE+EtNM_X-g^C<;efE~wf)`mdiEPcqxm88cnTSEc2LkTkLC{`i z9x95YC%diAJUuB9fh;+-p+CXqP-~g2VQOWVDy$+>K&9v!Zb`jl6!|hR{jC<9|FPhe z1`2&dXcp@9%lwXbP$=kAIxsOKhKf^~cw`~{+L{OY1-E-*vzAUnzhN#jgie7&rlVl0 z;uL2LrH$7aGw*+ie+;q~0sRxT?o=-=c%VE8=YS_rTDxK(3|h^;a7h0od`16kRUn*CBt&D}-lYv9`KX-$Qf?iklByf-#VD4u z{Qj31Xb9(;+IOd|Whqn2bXO+doH?9kR<6nr{|yiH8=S>&Qn!sIzROm+X#k|#kK(zi z)Pp(Ploz*7XyW;M2f5;B6E1OVibog=GWWnHZ=516orTRm_3osg_WFoL3DNdlP0*wy z6O-4TuBwWWgUCtu#|{iW(h@>@j&o2iM}4rCcKICKg3_-Zmh>mXwJj`-hL(^gvo373 z6d8{zo%2EFWZ{l7KiJjq(w%DxY3az>tPcDe0LXIw+d`$%i80UCoJM0-fA?`7>s`dT z5UbbCJmn1WFEeFY3$2*p2bNL>8i^#=2gUl58+zKCl=Yxf6taGCU~<-!#gh+Do;L9x zCZ3sicj23bcNM%IJ0CVSETlb=jP+;0rgfQiok1BRbVvM`omh|+n7Q69MIpX&D=Dy?5G>{(VIDMb?YkbfDxR&B6cx9fDOgtFCP{)#3{q-_ z;P1HEdr{#jFs&*~%hkTMqj?JjIHd!hen&|xP%ei#QJf`3RjVBJ{Hg?_Bho!88$;!& zzP2ac{aK=yvKRvd6JBlNp{BScdr?a&Fz?ZhMuGx%iEXM77657AnhqKjPb~06q-qw$ zVYP2HKzO@N_UR@BXmQ_^irU&L>Zvny{lj7RbvQ2!T|XDU`g;7__4pNvh@b48I+ zkeR!UYp(Jq(oTn=pwApds1^|6Zt43<;RnX&>85W^bnn=Us$PKw<g~>b#ScX%l znY<~8sqfzuwluF4y0iA8d|2S2MZ0%14l9#@x^)bu?dhg4Mi5DqW({{2xP^OBw=6KX zoMJ=EZx46LZ{HNElo#^d@9iB27KpqjQ)xAka`1@|ifA(Z%O)U(A*8Q32K?0IRIH^+ z5Gt+{`9txVgu&AZAY?>YGtgx)&MX96WcZCwa01}KLq;A|1Ze-Mp|0x)tQ`F0OFL&n zo_p8c96&Y;G29GU%U2Fqi-rr(9X>xwxN_Zzd$R%8bijpRcR8m?0QLdVt12zQXckImq1k(iqK1fCyS(A^PIO&GYur8@1k8`tPsF;Vz@A6Ha4xmwi zKn=%6v-*rN{5xlN>=(43W%g==-97*raA3|jGk!Kw-s}bd(-ytZkWUhux}l_z)~c-B zHniHD1gbsK&;X68WOm_WpF{#qO;k^mh{R6up1r8uq4u!sm7b$!GmAKfb9Q6w=YXSV z>iYG0`Q>crBvIT5)Kq54;tFOAsw*K9#+&Eq!{PH(k{+L#TcF?088NClH?yh}$(i!= z1N*mhAk46Z^5936I}GR5T^DZYkb;r)h*R9uRN=-84VC}VCYmiWN|6AK#M}-sOWG>k3()Ch-c^4g0fab=|a*)Az0)cZlLeEPKMQL>) z^`xB;u+$QJ5i#i{Rhw5J>(BmBOD!syaMh=3&MpO@sEj5+s#K3a092TWz@-(33kPy% zQSuFb&XYqJS4VKT?=3{$4;?xYKhO^l2Cg3%ynYS?x=w5tmSq}}eo#$~z`RJyGvRt9 zE!e95A#$VKN)`G8FuXm2tc|kcT2XcwpOHws1|jhD-UbATHbAS22S~Hh4nV@2f`|Yc zv4NB5-51~gq3>RyvoPhjkHvNZ#*)X~x$abgk(C)#GlK^tWWqtnMC zA>=Ee3`zUHNbGUt>(HK8%>^m(_A4L*6z>MQv+4eSZ&rWSl zE|^c})S}sq>#Gx2kHk;Dfe*v)9z;SGkc<2xj=SXh%Z0A!Uh(Q)$zzo`v4^m+=Nj-p zpMjP=*9I>4Lg6YIqeb{J@vTsVB$a09CrNcTkKfap?@^!JxT|JICdsv`goLqQC@dy$;1(8|T7b)v0DK z?7`B^PZTr428L%_reHrIF}Bo>r=7cjS-G&lD5`cf;xdJMI4lp1FOnauUGg>B zf!z*zR{Biz$!r1}vX*p-q_(6A#`;^hy;e}*7Ix+U?%8gmz#V_@t;Fd=azX%PGiUmp z86BRIw>j6B#}fNsgjf2&wQFQ--h=68lMryGkE0&J`aAfPio0(G``%K z4QN)l6-9v_Z;6pNsdg*r-yfl}uBadCT_w%0syu2lP+2RdA0k;%*$O$(3{H`oZR6U< z8;Jw_bmQ7;f44ssgmiQU7=qa&K#=(G%)r$f(w9SQJWX%l2}g&{b^=AHREEPsxV_d{ zd0^|AyVE+en1FJNvi=njkQBvn3^PNyH;;y-4haaRt`RJs1$Z2QEmE>A!Uf(?`_8LY zLPh68LDGh`Sif=&H+2MJ!>A_?Xp*H_)w|g)?%nRo0C9o4TR`hqy;0#qr6*2@0W0LqRtjMNKd|I`AE6 zX-7&Z;!5r;cQ>Z8taA#c0!Bk=312&><{=wW5Ga%J_>wdP)?@-8J*0%ti3%OOGxVE_ zl6QwP>u|?vPeVF8`~gm8*`$Aa?YI~3=SU7jNs>5lr57my4bH#s{v3eL?VMDU^&eNk zXA=P+tsSk-6A-A{HV{%Mi6>Z48`5DybqJ0Hi$)vht9Ba!hOMcxB{oLDx%k~Jl*ob< zxQ%#ECn$_`wAIq36*U``NLPo#(vb!*wVk>P!z~=<_=3va?n?l0whN;8kJz+>pY4xd zyByzp1#u}fqca5JcZ9E)23YOEUw;|@;8^^CJM_h8`05>IU-sY-9PTD@Sq?2C4VG9Gw}Vxgle_wN z$+PZutV~67QPywC8`!aA6;qxiz0lH1%{`d~xM+l0&#>c-ZU;JEunQdzpZN{uA`%HH zdO_qE;s;b7lYc>~Mrh$u6~Z3p%?x{nqGVjkH77!-G_uZN*=mD#|2 zD|c$vwtzFD7?>*Iyh$HSoO+n9X2c?qWs^eKaLPz8HXmRih4?0E6B?1hjID!cE(_Z3 zMj4_zMhQ_WKyq53xIKdBkmMEXFRlPXue?R&`rcLvjLkJ%FfqYx!?^R@nxd?eO!2fL z8VmG;NSC}&xJE*=?9DEUqNug)9c^J$RDdiRZ4KAzBGRxWJ1wE@jSak-eBKhBb2k=q zWTXfJcDgSBkOl4v0Yt5#h8>V3EpPl%SNy^rGr7U5ujB6F31-7*zChY$Lc;lLLnx98 ziSM;nRi~V{n&mVl*_ODi7<(z5`hP}q=9APR8c;`UrN<7{$(l4dnv=SH(>Y5QQyV3+ z_=ExbFjRXV_1;M}jtko^rzO%Z8N|W-Tf%CuXS)#w?{NW75Fv%x<#aP7Y;a^|Z8x*9 z^Uev(9~iL@y*YG#_Iym`dvR~>{aDNO722!Q7cEJP!^q+B;-YdPNm_WP+`cmAepLg zKR{jzY)`?mz8nB3bZt6R82*9V%y+`MJU2m}a2A{J_AGoc;k`z9eKVmUC%pbe)^ZpS@?B#&D7>T^m%NQEKRt>M~$pe<-L(0msmY6}!D z+la>zd*h;_B#l7t1W7X5J_qG=x6!*I3(`q0LZ6_O?*DfLzLz!mwMqRGPZz#e5YC^R z``g@SapY>Zl1;n05@+9nu6wd_1 z1ZpMQ#c-9N*p9ML!Nln!kihKfwgZ=XQBjz@6-R&fTlwUmp}uY3(VHH@51P;Epya4BZh6;94@6B3X^>&Jm= zM3*}tl0|lab|sq|$P=9f_1ng20ZOVw|L2JL9=h@?QD>o8`LKH<4uR*FZ^RG1OZdCe zk6mk0SmwC7-7iu$-eNZg*?6-~dT3)z@?Tc*2PN#QRb-Vd-4EIz>x*Cq{)WQQ<_HY} zAOy*qQ%u&;EFy6j=G0it>~QxkrkhPQFb$uy=tiiAPy$5lpp8vPX+}U437s&zw#(fZ z%QtZ8Dl``HbC=~pYU($e5s7TV-K2pmecXN2ot=j{dq>@>P}}+~!sNjdo`MoI41uSP zyaELXMn#S9g-vsu_FWK>`FIOi^y3{M=oYOY8lgaKI|!{YuKg4sZt(Qw_f zpi8X+<|6dCp0pvC4LGJwz8`VmVgbI|Ow`tnLSq_MeYr6z8IcAsJ1h`xfIPPvHTg&z zs#Nbg3;hXg8@Z0KJ`i9-t%{=>Kv;VB9N|0-PK(e-wuiB&+R2eK=&Y@GTA<}-eTue1kgpDj z>$0{WbKGC*9InpoXCco}UqS8(g0qwl(6Ta%g}yG)CA0c@|(!1xn$S|_^ zm(T~Hig-H6^aK;1e>vE93IMF{?%*B!cqO*cpLzUOb_w&2O`2>h0WxUIY?u(nBCfrO zNH)8>9TuzNC1gEZDeNxYHmuYK3DF#hQF>D;4ypE)w^2zh3yP#d8^y@X%nkvA%^;?9 zF6@rN|D&Y1b7p60Ab%xpMv)DnhV@&11}(_woXdQhKd3s`?VuMH9clmjfdeHzhGF!) zKtwg(y>V5zovJW0eMCWFpxQR1pSUehgjhxxg$Rp=A>z>Z5*Q7#fH-jzz|u|btnO|D z)+(oVR&>q=)+FEkDs$0%q_GK76)Bk{r8*V5;lS{EDd~n94&>EE>41#j=SO4a9(`Vd zP`{JR#)_(NeLdDp6bvXH5^0$mX$`&5kw!iMQel0qyCtNK1Q@oXTr`GHz72jiyyp<| ztk@C+)THVN@4lEgu}?HtiT)n!ZJ>2h=N;WI0Id&A?aXl-fz}LEajQ7Z(47yVUKUv8@(m0dENTxdp9N5filzHr(%6F_L_;EGrC)Wl;V=kMeYvf6l5A%#Rd}iH;tXN z?Qme8X?GMkThKbJ`Y zS;(20xb*A9sn>CvjdvXy{QR^Cccx9D`$Bhw_}DTx>{bCw%Ch8nd7FHqp{85Hn(A;j zk_^?cs*p}w;%!PUm=`-CI+~qwD_=}w<<=GN`hB+1dE^-1>gJ9|X2v!-@TI$!u7iC<-Y=g+#EG5JTQ zc5duk0cK$&7>^BmiT`hvWsKOV#W+&VII;@BVn?SJthlY54og^bOGJ|lTV858M@StC zabbVm61Cg}Mlj{Xug`$n3JoQ$z6G%--t(#4PsDI#=uFs=7Rs&&2M4L;(f$9ftUt+` z^6=#LN&k9M-o$9(9~S&W!GiqP^8P-rKKE?y-4hm!FU>i_znN#{vt*f zhGoTW#N7zDo_Wd(WUaPQuAv;V?cyj*oH7LeY}~%UDM=S4rZ@Ett_|9-sXQ!Ls@{eI zq|R0-ph+Ib%>hiaCZfGm$ep<6kq*+hvXBEa13Y=!I$EgYj@-_@wrsUEtp~0iz(EWO(lZOf0_t^w9O|bR^u^i_I?-tR~^aIxvZuC2pZR z1uizhD4WUI@@`#Yp)YJm2L`jv(;e~L|PH{OvOjS`CNr`HjyXo zTPQW*k2G-Y5|klQ8_~v?=m`MPot?{L5c;#1F6x}tnL}8kq9o+CKz=<}<@6Jb<1`L=wP#^Mqfc!$pYd)x7y7d>{<%05@hFC((2Cma$4m{_qUyU;#^axV16J^4Y~p+!`+U zsIYV!H(dA}k%f_T7=#TXgvQz=>0D_fpmV?-2PdudPEc-v>MVTktSA|X0D6vjw`Ki1 z@GyMx82QEN`=Cgin4`H8Vw&G^3uCQN43reV{4(wBr0X;MH*n7#^`%eWos&b2ZhBkP zFHUhEia`v{erT#Y&7DR7Ww>~VJTyk|GW3<=_kUAxGj%lC&5yMJo5dv*M?o9Qchwmq zxav|dW@M`OCb=cCW?I^1SXuyclN-etfzu-Xn4!}zP6T*O#D-?N3@uX zdA*E%U9EQu-PN&e0IzZ?#EV%(iJ27#w?vGYyBj;)BlK0^u8aK)^FXo0*)CK)f#8VZ z_AO0i#2&{!n~}TAcW1>KF(H^irijRtbbk{&$e8Iesh6>Xo!mj5dq-?50KKn7LerR+ zp^95egA(k<3?kSLzdv@^%$vFHgRuqxRb1j$uupfexv>tOaSEhVT`i7i5|5>oxjd&o zy8On68a}&N*AK%28=fJmBppf+ZOF{5%?pnG65Sf?vuc7nCsq&G=asm3x_2^5%V1O( zGiFn)6JtklY8T_dLc)M|?o@Y?+ImepLc5~X5S-RA)@ipXFM76p1Ji9zjo^BdRxc}g zI>hhNy+jrDbIQmei!K7;ovpB3K(1xkvOJhLcos$`uOov*rL040>a)FrS9@@Y89M7y zO~M18LHZ{p-i3Yyktnh85)xhSgN!iF{b8&Q^T45eUlI!;L)u!XhIjEYr=89Y+^xiB z+TMnE@Q8!_H7YRNx7a(x+6-kn*>=<%MC7r|CW)RS16Myb^B~X4Pfre=?@zq-21G(X z`Iu>A4mouHzbETx)|3Y)|8JA;o3w1=znS=x!pef*7VIflnE#jgKg+)-uQvBjb041Y z?)d*S?oY;5%~k5pM!ZAxKpWQU2@*Rl=g8?yu53~&9R7xb$In54BuhEhWyDq+ zIt!Of&p~{md)JYTfNj}yH5=a?8P0GCtab&8cNbW4tG09-4kyMyK1p zvrJpzR=Gt4A5WUf<$9N^XTZk=So~Z8=Tvw*(De#2MdH>*hDc+yRjbSWh|3=L%>Ud-5^8(4M!f#A+hfxZ1R+r#A^lP;>(7+q!@XD@qG85BhLWi z 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

    A(~0|g+qHHz%%s8dXX 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 literal 3702784 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%0AnJoY%xwz{*Ao(PhL(##syXP*xUqHgK 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

    tl0Fe&KHwL5Wa* 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%0A~l^Zj_{_4GmANDoLGf- z58%B#YI2aD@B`i(aeg^|^hCjfj)SjK3mr5+#*sx%f6wrK%k8X$zVN~E{ZxGbSsG_6 zoF37&4=f;W?8XXfhBOUS3QX!U=-1o@(gJ8l_kj7}C(CT8H+k!XO5f*zUsc=D~F^BgRld=-K58dw)kmL=9q@;7vMfIM@%z6$dAbO2}Y!>*w% zJK^WK2^vZmJ%)mc1F%TChPI;IQTSwf%=OOT<_&{uH+sYXWdQ*;%h`R$1~+VV1~-+a zI%f|af=YCD|5le~fwvs;n1vH6bS1Cv?BMzrhc*?FSY!iz;yz#$E8!G6_}a0v`;dP` zQl<=TK_}m%?ho$X1-q}Y=zUduzw$@S zAL82fi&|y#AEzaGt*`Sv4{cFjNr9bo!f6uEk;SBkG_uaMeR*hA`&|mFcL!cR(AT-C zFJE$BhsK5s0W5jVqk%22oq6GTNM3XWayBCI%DW_Xcfwaw0k5EaC3!pFCXu~v6GSs> zgojBrqyc|~uV*?Bp4xGwkGlLZxq2$SE&tu_WuW^kP6xK2KGBxZ_hQha8nX=f0hLYd zqdGeXt8ih&o=Pwpw32N)X1w&1>}oAg=;|}M-aWL$D2EUiGg1Z@Rn2uNEO+Fjlf+@9 z%VEKr{9>}Yp{Hfi^_=sHF6AHt3_J#F>+1vtZ9Z8ku{Bx)0)P>O=gz1 zglLa+{vSQ+o~nsYPx#ky_l*8~e7yX3nF5z7P%#BojV;{`1MA#1x0?$_cv7Uqlj0Hf zr0}Q?57>Sb*oSdL2%vZ}9ANA2eZ8F91lGPQOLAnL(7qS6vGeY~GzC?Fvog|w$Ml8W zDIgHA)kEAUg9K8DMf+5UV!-yy$D(hl$at?547=WPHxI6BIB6j8kPQ|N+$xxnE0+SL zve@1ekv*BE^*nV`W!;6%7T1Yj2YmMuwt^`=xEK2h9pf-3xK32CNoDT0O__8sVY9vz zx9%n%!Un>Q6MS+f&j}eKPm8&wWaX^u$g># z$RQ=`)n`@f3_thcrlD63o!g{UCLb?)v@c<(7)A_?)lNZIjvWJqD+rS^R1jwHSE2I! z4sCySXx$!ZKZXhYrDFoE?1_=4RWf9yfLpAg8Ol;yR0+wk99_a zkCKI#JVWU;bKvw9p5>Sy(S<(|ZPwLL#j+SwmVw8&ZWAfG`R7i({?X~(NZRK~-REP; zDE+l8cZL!r0!)wEv@U5wi=O%*fAS+_GlaU2qXNJX5rjl^la7=VouO4i`yW{U^2tN* z^nao}2x9m(v<4qcVp;il=IzZmCG;1`SR@@UBRu;LuZn)#Vp(#7IP&_LZukh$RheN~ zw&|`KQ@R5zJ8zBa6GYBr0Qn#buB(-sQvv*fVCx6Cgz|r+O&dl(90#Dq>-`tGIaAuF zESvIhZItw+bc1wfkW0dMkMb>Y%0li3)OmNq76W4ZRviH)$cjHs7_#blLU0XftN@-TRIWlo`l-5r}E{1g^hUwH!9agF=uVLTCW=-cP+O3l-R#d!Q>teKF zFODi`F`sPNDj6p2*le!%aiWB3Jyn_kPMp0)(6_}67o12ch47)cw?SKj>3$BS53gq@ zT$qJgNOz>;B`z|_WKX(ZbMMYJSly$UkMdTU$pORw?Eb>Py}M8Y@DiO&9dRRF0|+xx zSKwW@RPvw`C-&|N)fqo`A!25n789}(#gt_(Wa`p|#bjAxbX&m!BaR0Rs$`&41w2^a zMhWE67yl|A~$Pt&sD{U2P2AwaNsU#i8zo4YBdFt@I?%r|HoA|R$cYtgyOh? zv5Q8(J!){|P59x0{uO>yx|i5|wFE`)sM0RI$p*T-fG*(knxp%Wd)g5O6d4RRx4uF*l|p*r&eEBctIuquFz4ua=T^CblCrSN^>@OK z_wLDKFP?hwm~^`qj*0W&o7$F}n}ivwE!%;YdGjpXTB_x_{5tD6x@R8H z+1Z3Ojue1O7#piq>ip+W1>r)pTeUH~uGHyz6NXM6&85g_)R3#sz>9>eaPa;i<$)07 zBBoH!iW*9wXeDz8{~_G_Vug}8h7Qq!d2IuuO5>Ktq-WL^v|?9DV96&?f*fMhZWcOm zyw?=&EX~2hJ+#`IxL8cv==np^w`{u+NlbE*{_tU9dY#82RN=CaR#t5SeyeJ&UUY!x-cN#@<_?M7Q)pcI z9f!^zi|WF((rjLM;-;z>UIwQ}ZS!3$s$tQ{wXB&e{w|`?Bd-O!7LVRhOYRL+4CFXh)Uqp*dS6Ck>jjh!EPyIn!aYb+R3v?^Kxx zQ+7yq#bgB&CDer8tTsIELWE2NVR^ek1A4Qg*DIJ16E+J+J$LDk7%i zLFG*mISmv9Quy=IEKI}Wt0a<{rlFER*U&k^2Il$*wk(k~fl$o4EPU9vB&B^OG=)DWAvWzS{M<_Z6$`vw`H#a4hBp1W^k_(2; z3|^ks0)ddIgF_wMG5O8Vg~G0pT@y=xg&CUOz0g>Z#F0cCGzK^)`RVuG9N1QblNU@B za03wtRk(G)-Q(mZ@4^SfbMA>T74@&rL$5;>1FyY#YRfv^(gu8xmT-&68XE<4DJ_W; zJAIbH8@}U=begQ~o^E;!D7L{2y!pVs4t{D z-YMW;R`c*NCIyQE9?tBK&0b@0$zrM)Qz(ar&@unMWCuVR(>OBYlYt<#4$B0| zI&CVDCY_t6IyY<7LkHV4c`i3t2W`~DddkD@6IG#LBmzpi1z{Cb0`Q}^FgBrr7?q11 zRi0ijNQrC+pxp{3S+BsqQ%Q5i{~MCar@HQocgo=Ic0DeqXzWCVf4yjSBFh~%wHw3F z47Zd^1oT7EW+6A`4ql^26TT%}v~U{YdMUpv)6)NbC^~u!nxm)A_%@IivZWpIs@|SP z06%)>BaHUe+!-PN8E~(oYht>Un4rEdlrcv>KONbrrp!l5SNqW;lNMVS1_t zVIMNg8kN%YUu7uLn7*#oT?0q5>gm&Je5u`~B=Tn{2Di5Xw^nOIVC$(~4YD{aO6wxD zXjxn&ksUy2NOC>!raiS()_``?7gylofoJV_HVmE|O1J%RW|>71rdRaT&I8ljLzYN? z;)oO;X!6lZR+ZE#$Dto{H8^`Ns!wI>;pFdU053a-fb;uDooRWH;w6$ml2(GtQ>XX! z$~!I{6*-~%icQqc*g&20R!_M++}=px$lka!MAO6aL2|#)@fl%x$@HDI3PIldQvEBT zR~Ct?U{(Ok1~5EoNTj*E=Y1xfuyqa9A@dq|E1RfGC#f}yR|WCO)j0>m}7N_;>Z{Amms(Rnd z4)hz%5av~*`Diwl z)oSyTw+QvpJmR;t>WEd{NO_f>GJA~?4phjw`z~jiy}D)5h3dCFCBnf!&7>N%uf$AA zhh#lv%A#`XC$gLY^+iq(_?-y!>2o}Z(gE+*|MOF>pE&(ag5Qg+6!G8)n z0co`f$0k#o(L-iK=kn`uG{yGrLb0>Rv6;**WXfJg8W@5GYs~LTyLPt`T1C3q#mV|5 zbs6M3$hAF!8y%|)^cGU^Al4Qs20}6KynvWi(+B&=&cxX;W zZ@ws1?o;Q-QuVM_8ZPzRPQ&R*MsII4o|H23z_a&M zq96DyJrTK>>|BJ@kT#N($;G5*-nacXP%s?SBYncx*B;eTdHbM`(A@#7NAyoz=02R9 zg#5M?Jb7*PELeHdwgsoUS^uLOUhh9?_fRY;^2*v~Mt$oh+( zhtP`ZMY!D33)iHZ_4goLg2gxD6=G5Es*@=tI)lGU3t*5QAyCuogIOT!!rOpbzCX1* z)xyVS&MPN%VR6vf6>mjn5wu|SnRHF>dv~%vKNF`x4sO$}aJapkH=Wuj)+rvRE zq(^2wFU@td)IyTIC{r(;A2uX0G1<@OPUJ-t7MINMl*pwp`rIz zWgzfWtj^$dzYsW!LbIDG2c*cz3d&$7EOl(Eow!g$$C z0KI^rHm3lU083xUxsQ1evX}ogEMZGMI-imWB5*8JDS1y9N&_#xclwi!2qEzv3>ipY z&XbXcL07t>O+Bi|^{-~$F+8EhmnO8`V!_Gggj&^laN*O%%SXRIz1EO;{(Aiej zh{}+&?E;Y0h~i48>mZ*XPSA^hKME^*+%2>Bhyp0@Yjsh%l_)ij-&aGE_l&0n<2vPk zP^eK8QhLK@-13n9zylijlR&cmoj#QdmF3I*782mPj6Ft8cK!UP$mtzgT|%UJ81<}}^})THfx%<)M*19w ztw|m#tQjhFM$$~+48K)+kbBl-Xck5z=hT72;JvV(5qb}S`A9(Xj)CHla;XTdF2*sT zU=x0$G#~w2(7C|$PtBQkW@acoE2r*nYBP(Q(H_NWM zrFkIzQ^iq+^ydSxPtybn(T$zDS(p8q-CvIh20OtFlJ_*akCJz=eQfh6j2910!@t8AC(>4wjOlhal1)feHZ#WlZyb=g3jOYEk=jdL)k%}cIoPsN&u=E^3 zHc8kixI8N8ltNGy|4K86xWO`Duu^3!z030iK zg>RMSV!mdrN}2hxrLH$wdf4LjBuXDDyfW1FJ|zY}?{!SbL|c$4{K$cG>-P+HmCmg_ zBx%D*Rg9Z2EG)v^?%XrDZ9AnhKlj3$WmlqGVCcwBw1lFAuPG>?vh#!n2YdDsoOc&8 zmG1?t61uJOq5Je&&l(%dAE2D+^y=RCW7ZR^xOD#iqpGK?uDSK<)`{D%`roeHKjGl` z|2D2T_T1QSjCp$W-;S=j;+|27k*i1i2fTFQ|MIoPuLJCOQP=g8mU_c`2xwmLVGr`5 zs2jrKW0DdO8L!D<3I9C;8AL}P5=5>bru-Tq!k>Po>?RZ#aRhQ`Jw%Q_66VA+jy}Uz zN3}l%;Icw$aC^BhqwXVah(`(8Ur7QM zg<(IV_-7#G9r@cQE#(Df1Pc!bYd!g(LaHa!dMtcfR58#SgP@2~wO3KPTbdxX7?j%WcG1d?WJ-04~vhgZNE^(Q_pf=M3m=Kl+>;0Us+)Lhonh zGn1B{EAAQGy=rhhnB5C8?*RiNe0w!f)uzOhK#@?$d%(Qz+6!cR8y*a3XpSImF-$(g z#h%-=l|{qQt3`sB^>xP?QV3zM92nfU9gCY#XYuNgLDZKsU z&Ceh_E)+W{3Rwymr)s4CafPv>gJ&Vro$1cB*w%SbDAPz584oQdslchw_>COI(Y0PaH%0m8qucUOzR z7@!plK!No0?KS+7Z)nVd{D15rzlo@4;$hY5bILyCoSdv!uv$@ z1CVc4I-OaD-g!;KIZDY0msY~>(UY0^^5KzW1dUabqK5B5sB{RUaHB%D@omKmqoDm{ha z^S$OD5Z_2<8m#s-8Ho!WPSy3 z{c9n^3Jr)z2?3UW2YJ?8>2QMiVfJV&rr|X9XmC!O5dUXBz)u0vq~zhffxi z^@SkgO|}@>NGYog!{6h;;Ta=hcDt~TAH%jxft(a(iYmMTvmC_>twE6X@dEa3REyo5 zLHCa!av0&4C`o~!M+tkL<5YDxu!>10T_vEJXmx@$88-cLHI!p5R6{{0+2TvBA0Qow zf;|o3zeLAM%qQn|Gx+`Mm98+ecr|E!dww=(OOOccn%)PuG<~st=Bb*KU%*EOSw2t~D zu`%Jb0Q1pZ#FZxy@aJ8-QP0q@PGrpcmG@IrIv!=K)~)%25}u)B(=> z;10mV6OyWRq#z_!WnuR9PO|WH4X)dxF;W>d-oiv3%x^wdSUH$yEY%Q=BLAJ@RTz6y z;Zck|bnj*?NF>^My{~|DH-LeElOd(vmNhOY>NXLeVPN6+zXL2rps2sq|L$w2-vCy- z0K31%@b7DZrZBLJ)<0n5`!_%nz{}7dUL>u6AmRnkGZaJXZ4_Z(NW!!V?=W2xnA6ANEj|{f3=Hka@uO0QZ55;@{0e?XNYPXWtg8Vc-TYy!sQ{IOKukiE8#Z5J zn^WkgU$ zNbRsEo88sfevA!UcID>Y-9V~G!iW@AOrxQM%4(&us?(Z8ZXa5xxP}fWIjqF6)tvzZ zNvn|s%eoYyQ4?g2Qdedb$73wF<>#rfn2D)G^!Vomo*blAz#jw?;E_R$tVzcdpTJ>D zJqD7h<8jy;2@!+mL}ZRTC!+6gdJUzu%q@;%_M!=qJr;_FPCf@>;|^k;2+ef519VFx z`~mSGo_XL@Kydj`a+YYNbeA?D;N&1~c|`O()Tp)&5u~kcaCS=2e`ty{ui-))noNCt z5|5#j(dCS#*g#XVCxm>3(uoeya^(L1pR2Cvy!!92zIoy!SFOGB$b?VE_l^IvvHxRi z$C&Sr9yjXckyESw`NALlFHMd49~Gxys&4Osu>2in2Ar62?oH)V_4@84Gh0&;S)Lbn z;7KCQFM^IZJ}@pU@Yz%jFIk@|se?}VfDkNra%SMnnIzCp%r_Kt(lbdoP-?KW=&qi%Vd#+k}$t;YFjrkx>AmnK($xN`i0ET+y0 zeO2pi)I^T;7ojL94WXlmtzkKt*7O9Y!9<6&Uzf>(%<{TA^^w4Jhpb+2Z3Wsdp5TCo zakbTpsLZE|lZka#P139j&h352W!;91CNu-D`Gzap3tS2@zd*P*tD{)Gq$E+?i?PUn zQ%TX?h<#a^YhdjS99(ZW7<90hSOjB$&>bRsj-LwY2UME{%wXJBT@Mg@4ihGc>}M@(!w;W=JXqB>m2w!2T$$cWScd7maS^T8BZ z7l_z=5Y2z1_0Q@pe7X5SJlixkv-l zMI$C)N5jO1g|Xs5GA$XnhD@WcEjqE929T1^tt{7$45lDVZZUNAWvDcrT*~%=sSfd9 zGW#%6-?c*zH^t47SPsG-hbY=eaPl^D2vQ7L=bYXyOf20S<2#*R!H5_N_E8*fQ}_{$BpUGz z*e}h_W3U>vwBZJuXp9qZl2F-b@iYArSlW8>WU}boJWKln)Ht;{XG!me1W@L!8`gs) z0Mf9T^{I6D<~!>wlG3*4meqjnP01#l zaCFMp8orMHb@6+!E?fuKjb(C)Du-k!*r(s!W$uXO!2F&*4J9*?obKd?|@w;e$ejzn!nK^Eork&z4t5@~u9KLIHLm}xcrAuTzBy?b=YQz#%fG<~$GxEk%@`ZI znitsEeHF!6+D~sQ_2t+1b-o;OAiem8_xp<9;dy;rv8d81DRTf=3nH;%!#i&cRGbxE z4~LRu6&B5aMb&{zYo(%T0=T#pC#ptDWP~H7D3(yh|c#U>E&o^^=r0rB-7A43Tc>e|V~NHMEB>VxT8g zfd)~LNq%AR+Zf5Mg%N5bMhW4ewAivE)clT}4|^)YBv{$v$uU)Uho{c@$n1;3T`HUX z*NWf5@NVpUYSJ>@8?y^mV6$&kh^;&>n&b;-vY%G`CbQ6uLU`6vUm zg1`KIr8@YCJk~Xxd_?|bYM0_2?6b)QSlT*e8(36G|u94P57P{tKc#)vamIapi5e{Do5mnnUGXV>4Rv9Z^I>)AmqgS;haqYNkav)%;7#upW;{*pU=_`=v81#M zcn)*%#IuVrn}#;x5^aXrTDjhET9H$5eoko-XjR`e$HEIdz0Fj#Dc&S z@z1r*{yb{3#QKQG_ulzCOAA4~`@6nvi02atUXR+reVe>2?m6m93o(0p;81S6%t>kg zP+DOBl64#?TtP-nOKA9u$K=EG@S^bs^wE#K@$x?_{eqcKB5FcJYA_d-N2-P=FE2~T zP-DcUOa5q)HM}S685lmHHg86WX1;XK-(31R)0Xqouw;%%3{`$%f3A`lTGUf38aG0= zr($Jmnr`L1@{q&i@;@y73}kz(>q@hv<4-@))Vt`XAEU8DI{Ca2WoU7GOy%bv&w7^O z!c60(9Xmhf?=C&YEO(ttyYQn}f?=l50 zQ{an5fprfMjLhHfWEh!|<9_?~s^5K%aAdS{>bZ*@CSq5h?5BY23e?50G6AeX4cuce zyTZ!_UolelO+ayBuwsD4P{%$Utkdi$=s^pENwE4A@Sw&n z!tMbOu@%XNdos%nj12v_j8ZKC9q?8!0--_Z^Zm~1v^LZv8$6@;)C;I5WrmH$=`%=P z)Dik)T@3~|@|BOr=@WkmkRyZa1VrYU{5e;X$&xvLhWh3K^O80k*T+JYoIY*Ftrpl6 zcZ5uSu=g|r;j@Nt=Ytr;llkY|jd09qO6G2?$K_PEW?8bX)eAdCwKb;NW;h`Hy{WdE zdgR>6`dYImiQcz8Kd7MV2f`^J#3iJLQWvx%p>Q=1-@zzuyLF1cDxd_k-jiIMSc*#~ z5EkER76UMi%vQcmfTFFyd zz%|v1Udqr;GR;Od%k^U=cw(x5VZuAKP7kV>YuAOBH~@V$k?x}Va6ogp&sA0y0f%Gf zH0vRSC6y_9GegxAOEdhKTd}jKRR$Zjb3_4(=`z@L?0zeD4To&JAb^7qxEBT#R}Gpn zak<2^7Oseu+3ZP5qGhRpKGe$*u!>2AIA=f@-Dmh@5sA=o-DY6o522b{)+AHXKYhON zauufydmoOjEnqgPPl1^VZUFejC-<@Q%Z3Y|mynbM)G4@BG_{bcFq9Ad zQDaeh_Z)(VWVJx)03M`IJ#nf%S|Iw{y-gsu9=isR|hffuX!Hpf9*4Cl3 z6jX#NDK-1)?fq_lb3X@mL52T6e#8e=SARJ1o-6-#!j5tOIQG!!H%I;N`04WB=am9o ze^FWjv)7~D0=2kXU7>{C@Y?|mbQ3^)t=$pukuJ_DWI$c>Gr!|80TF5CTizx!zwto| zxuTE02AEUc5Bt3D{1dKIdzcND6;kQ{y@(c0VCi6BT0d3eH2%`^B0Q@b1ODey(A;AY zd29_^O4f$BsOuJ8{adwaoj#;AlV15Th|{~2wWq|oiLkE0LcBECv{$&d^aOFq>M3j- zB`%3_S%}~g=<)!`Y|3WHd74>==x6uHViJ9%gZGO$xY6qooMFF??bD4rL6Jx+vR#OG zn2-kaqyy%LP9bGxe1=o2{pIP+xGC1>D8zS=L%md7W@5P$aLW&;o}N$bAcB)LC3HeR z%$*#EqIX?WN?|55-Pf9#tjM7vVp^f2{D@sTo5+{F(S=TnnAuO^R?(6`a02}A>KCWm za|8oo#iR>=N6xjU)g^SEmjXV1($kICX^razCr41V*nCUe9TPVKZJ~w89#g<_S@eTP_X)#!0c0r&i$!E@Y!1=QHhA6F2 zq@;;}kO^>)I)2Ex!hNMC_7hpnm~-q@cs_n2N+HIQv}Wpp_=#MS%-od#2ni|U*5UBI zLp+n_$7vvh1P|z&PH-JMo#Hg|<5DBoeO}jHECJa?6c>H>^lsyDIOs1v?)OfZwOf8^ zoJKq(W+zb-OA@m<#EWEJDG6%MwW#SMpVy1TOUy5&3yFuCp17A7Vv0*iYpDUme6;H+ z!2Z@aYI%0i23*e3uv9PKN- z%}5diUM!Wx35n3^1ad00CmxFXLT;o$s5lT;lY2|`EDmlpG>>pKc~A^sUTS;9!581v z#6wAv1Xj#W3?0Ni7RAqvK+zr0KgCUp;U+vcVOJEUm~D7`D==|V(hmUl9M`skvVi2IO^W0 zJT3Zdq#FR}5NTvc)lx1PD=6SPfXN{QopoEz<@ac4Jq@yR(c$=Hs1AfXzypW6wlHo_ ze$UWLyDXqTA9`PYeDM~Lgj}#YP9Ezyb?n_xF&8Di`|{7Zv_WK{R1q0a2*jOB9!kjb z54D=neBSNr{6uX}f*#oUF`@0O%nPbcTk&RI8{buH!v(Pb1JD;)8!*9EhWD2s^Nk5R zq{ZM?f|y{#RVwh1jSUG$MHae2hk(aOAwDlY#?X1Ny>}mjMi3Scg%_<@fvm^?7yuv$ z0#PQbAV)&_Xa`EAtP26M?H?}w(gP&WNs|IhZ zfYfghh`|19%h(dJOjIM!I~4_H0LbVkfK@3dprabS_z@DNsZ5eyD8j{w4x1I&QxUfR zNFYLI0kME?1~L0cXW`07;R80Pbv{s>22$LXhkVq1MpiX9=A?q)M_o=!f0}I6F~vn^ zs06`~(HvqS44v5ka>%p*SOOtu?Kw0@7!`<2)DmAX4u4v_5hJ<-;H2(|08*hrvd}p@ zYLZY6^#BlC38V&ioMH*{dLXbuHeoC=hKn-cl9(kLgD+w-0>IF@FVWKCv>*!v20?fa z%}Sob8Dbd>h_IV2OTrw}BJc{Ge_gBrV#V~rXdqUcTC?lahSdae_{wh;B*M#w`d97m zfB)5il{@;^Z|*O>0Q`jhRR;}b!oa5Dz^hxJuzUPd1m=*j751DyuoF=Ep2t96Fo+BN z8;U4>@}nJS90JtfG@RLdp#RwW06D{d2M+RwEvrxOc#eMI$WH-sz*m87Ko+vodkd%D zStFg*_zhiuQoI4V61sNubIHgulq}gaAE6{K-*#_I_Z5#WUa1y4Vr zmBS3%ybpMZKwids3}knB3SVdODn<)Z0PT?oN29g^e28XDRf2q6d7`Kq!=UlM1C$m3ZK83( zcFg~zI2C+xd)MRO3r0Q(fCgEoA1@*639z{_iR>>dmU(H5`m6A+6i^Ugu7XHGPIG%h zqFG_uxPU>VVxnFGW^pxX+b)fL+ieKIHhv5Yg3U1vqNY%!AdaflP(gsOp%Damf+|_`>&9mftQ_3B(-~Ub z1BiOUgB;wy^6b82gB!LwgPVX5>D8na-lM{dCb&rNTzJ4Fw{4k<+71ovD7qk)p4SPz z+SkC)E1R9O`}P8=a%kUyp;uQ8t}6novc@@k@X+8}N1@0A)>40T&K_Qi9;1^Z%Ew?JnC&eB^9IFy97xvsCUjS(&n_7!#z2ubI=r#|R{N{zih!Gs88Cbk2;1>hap z1)%w_?4(_w^WBq&4xtFXM%8&{(?NMZ%2w0Yxx24(7g?Qnf8()s_rLp+LIn5d^mP6o zJK~Y5iT~G?edGV;azVRy9IfiDR7M zUm01PbbLFd7b3k=Pkh{U?(yeCRWvDDhP{q&i`C+E^X2)@ol#aDb(SW3MlJpu{ski6 zf^|(OwbE4slzswA(SAQ+w_wq{NBJ0W=x)T}t0J$T5Ur^kli6W{;f6`6A&!B_gP(Cd zTH~dWcgu=9xV)`lF>{tw9 z>F8k>mVArXHLjEaH!SGB(QrfPHWR$da|IEg(xIaQsXW*luK@CCm)_(lQaD=Z1PXh! zM)q!qV+DWlm`HGo8%T+L;aNR7aRS7z2TPeUjNn(5bwlMvh1;B+gEWE>LM-mmlG(HP z60+;hN-ZoI?vLjMQVL)D2+FK`3F$IJ#ac(aW-9%Q=7!MHQM#;D7RMc-)iK;WE-+sR z?Tp1G!%|v|vM#lj;SgJ$mjac@2s#;bzFUC;6M9&Yb_{Q@*}m(lQZw_0T$bux19tAZ z1gxI;H&kqRH5O)1emPgMzi1F%I&?NH?Zn+U0_l3BXdENx9ix0~zBT{D+B0BH@L_99 zugWmOtQJ4~wiK&`9W>nuaext$rD%k-@N63)7u$TD(KWu520zqW-h}ah1Kz`~N0CKL zKLh`hLILUoJLla+AQb2l18-ki$Tb&nTYBgdPCkB6j)w7P81fUwh`sRNQhOP8c-RLI zE`=&%219M(2G!FzZivQ&;OiYa|6g7843{Jswu{*ZFvH4s1Eo3u7mZ81-PB5wBQ``7~wQiW`iam;{z32zmRB#cX6A- zb%&vjUSUOu%!aMFBBFJgU4pHR`Y0t76*RSS#Gb%g<9A$h zAzK1fqK@HqI)u7p+cKoJiUEy-mL*ORM}%aYdOY#!hZ)&SiLkjIj^ zpTLdSV$R^CAfJlB)W z1J%iop5eQ>lZV%xJoJvf7bz?%&Kg%WqVu}dlP0YQ+>6j10^d5gId+l45%zPK*eNUI zL0m8B1W*RBnsPDWV&XM^PWKrXBk5!))tu^x4pUm-xb7bR02ik?KSx}FsKl1B7-bb> zY9j$K+Bt@+CN>gKGAf_7z}&`gek)3sMV+VgT8v>PS*~yigydb6G>aafN?d}VR>>87 zNZm+_FX%Ule+8agSory*6)axdiv@EdO&8J*^B+V{B5mJIpRc!$#m(ZI;5q|YErISA zJVoa4oOr%hoC)g8?HVy@h00PJ>&t_DSGccmhF;n@w7NvuutGVp+EZ1Odk;Kn2A|*l zDII%4?i|V`+Eh2e!}IKMig$xf^9xUUC0pomq9Xqui$UP(V+*`5s>4ryQt>X(=<&is zYNZ*6pH{3i%U7oXlAgb&E5{u7Ci@KKI`M}IZwCtvp_dYA^cnaB<*zN?$)rgt(y$K% z6kDQ<>%jwEK<$AoNtQxzQ;5Vck8%(~tuf?@XbklE?0tuBEZzYkEh;>%h!o{JBm$HL zsz+9zuOE@M6m2I<_EVB6k+wi2?e|l$d(rSSoyI#D8Fwr3F={E!V6ilD(h7SNngPz= z-^i}5+OQ>{mo>)@-wjC=?3hHVkzPp3tBTQrYm2vI#ECAbm=8mJZX>rMSSCb)HRJZV z8`*A2(0zj$Rmlfh7xt*4PBl{U#kOMMz>|EbU%a9nFz$=9q-!tBP^OwN{C7LWi^(m+ zs=18^AC5Cj`Z$gpP`*>Swi?^jsU?Xg={nZybF$CnoCuevuN8j?LSC02JE>zBT6(p- zdr_70NyXdHv&^cQlRAPrd8{UT2^DW>+hw`}adC;1>Pq6a&Reavm1)NR8*!v+{6zfc z^4}MU0?*7PfS`YPO92GEGI7P{7a&L}MP5PdfkUeVE-0*)PY)gxRx9==N*szjENw~t z3>cWZ?$#(Feng?j8Ug@uKG>khg3^+QKzCM9)&oE!W=Mgfc_h;cJfCSb(-_7_Fox7~ z7=7gF&GMLYlVynQ2tAX%tnic_s=lh+loCpx70309S4nKmv0Z^Q}cHqd(CTtsg zul6=*e{(+vU|wkEegehfPPrGlJ5VWsp6Q1Rh4pAWV!MUYQW%?hdaSMd(LjAZfFQ64 z#)kiTzt)sFh|{EjccjyinQJ+quI z;NA%-c0L;>7pr)eltwDs6)$gv;Bj{!2@&s?x5Bnhu@!o@p9{4ArIU>Sr(^l`h1&iu z04>a}W+Xq!Xd%euEstn{zl*TtiT{6d)x`gL)x`0AV-JpAKWf>C<}cDQ_zTq6t}&$! zc;4Kv{C7XHL7U8`9CX(thMf2RmSwO}( z_~A;pZaPDS&cSs%&mJyOe<_yf{k;@>#r^d-*uafpahtd3=Iw)T9va$xtb)=cVZ4Q3 zJX%@Fx=b59QaokPZQ5ME&*HE7C#B`!g!$c)qcNNlLYy^SR*1Ti6bcy+z#u<_UT}UP zQV|&zIsFy_oDe9r_SD<&^-(y}4sw}1_{y1=Uyo-HDcHY$e?E zDqNLD*1;~GUEeRYvrNgjyb_)y%Qf^x%9IeW*-#!iPq1KDs+5E6km;+$A3O|Q*r)OM zSto@UaViE*!Axs8!(s+tTb0Qe#K21>@b^sCFJ=LY3d2hW7)BRPt$4B>H{lKO#Y6Z+ zS0F>sk|lBof*3rn)JB}LS|SB#_lZIb4ihID#@2P*YE+C>(~W6 zkipzcBrDj(1T>i6_cbCcFaw?_w9jCf!GTZ-3OtGt7NJF0DGe#4<~g(sJqsyf<~FpD zJoOb5(BQu)l-f9mDb`ecDs^vs%1&#br`N7 zT3h3RFMXv0VjN*U|5yD#RTKZmgmdHXAN%dm_l_EguYVAKT_by{utIX(0ulTlu|moO z!kD#TIa7sfm0wnU3aUz39SVY3&csHLQnXJ+S`$`fRvpHDh0j-2LWj$%M}Jj%8eEVp zO0++7K{@p(e)=zMMp2NL@AD%8&P0wyZjTTkI&$v(G$n{lnc`t+OMWhawqmNOL|+QB zie1B}QJPFQhNUBLvX9XNy~^M4VO@grdi*sY-+T=4Km@`8!0-@5 z5mHDT0u>1;@kA*QUndmzooDr-84Dv8^QRI|<}0~1ppG_;VS(0fy8J6aS<;gPEbgsiL*YQ=VDqQ1WJkpRWYE$sNZGNnCb}`@_Z_{ z`8uY0q7`9W4v#tlC3Hn;1w_^S?(5A;po@kuD4_^u_h1dA7b`5G7?S`o=w}NiWFtR@ zE*is>bpGgly@hRfKrnI;UY=bI!-y*F@=~yH5?RH>{ufo+ zW|m-ioPS_r4lBzbLUR6pxoYA+T>0Mkm&O*aSU2)_RWE-oj{jZv^o#|I&Me->Ec%as z^~)*~OrPLDeljmn(A<)?d58o|C364;z9*T=wWe?%v@De+lTOxoFp&i=Im{wXTYDDx z)(sTWL0!v|O%#qKjlf_87YvlDaps^l)0t&t zxxuAWvMt-Yy$K#X+|FO#^p~wElJD$pfs2tW6T(W=g_|wlf;UnIJ&tl@^QlRpiGn;z%Frd1xD7|A?Eh=ZK&Q^8wj3({uJ8Nf~srq!*BSi>RoT$65HS)wI2p=w*i4 zV)PnUD?3bZ;Q)nznnoBC>ndr%;?bBkv}$%fE!aD5OcSJ@LA@^5XVJ&5?zsYDD%mZ` zIs;ZnE5Vu3$0FJLvTD{|m!{2#b_>IBLEWgVVrH>Yu=GXN%(}kXGYTA0ubc&mBVsqM z3j78=SRW!SVswvy@1G6*9jZQCXU;(3&!6Lw z34@!7&m9prM-{jLT5LgEim#4K?np@I|F2a2m#S;7y!smxzjoD)SI(c19{0E7rjMOH zrfKwVuK3NU9V1^GaR@Jbf&MywS$qUQeYY0IPpbMoi${YHR+|HUU;@WU0>4fm=M~_b zQoI5g2!E19|o;>$@81R*>OU1UNWLg6k3BSbct zR;I2*hA;#La$D-BOl6CEw{h~l1er0Ub9C@dIshl**WrnRo{2MP4h32>IsHxYl62M= z7hsGtDZkP0ht_T%ItnlOU=olwjt;$WU}y(2ak#I%@N6JE2{5-_-7vK77006?aB>n; z?(E*@kT=g6+_-m;8hUjDW%5&L{kH8L+PZ0Q!{)(Vdr{RZ2ZpwGIe4GblDu-@+{^q8 zzjRRze$@bZQqH}&QDs8$CkVNs_%MdK5a}4Je&3fr+?Ri!6O-=lLwb$;-tfJsB*`u| z_2o-_ov#H;o#|fR=gk+=hYTLbzw}P{mWX^Gr@MFeuiK>3e+0VGzj8a$jr4!ArLS{y zU*}t=cYiXl=>X;EKnGCmnx6iT(UW)Owa`A(QuDGZJ+v zmNrma3oMQX_X*9kL z)_pv^qR7CeM{BV;1+yjj+fMG?1uxljI{6bs;8Tt|YmB?X--NldrG=c7;dKe~-c*E< z$(U`w98Q6ko6L(C#yq`<(E_bva{V)|!{YXfb*aE!gMFifL1={+FJ8jpU5e#PKPFnU zy*qQr#MTC+O)KkP4ZG%cCX4ei{#y%wtf$o=WQnktEs{zmkA_akjYwcw@(SNDuP{Jb zVv5~#TiZc+Ev7(D9%Jt|!cbL`O3+26O~lVrB>`#G0iPdAsHcqQ^0G)Pg69emR~;U4 zC9qaMD?WgM-k5(H10|02;8^*vVTo($dE!Ds!|F=W-*&JB`TGTtVTt*KX~>!z1q-{p zjYi#`)VQ!u6z}Ir{5Fkk3Ht8Cs)|5{bzdDODlF|TZKd`Yo~^Rs2|6s{ z%$CP|#YES^03HP)Tf_F$&Z~+)!Dz4Rd=ez_Tf z@imiP4{7tv^)}Msojmd;N!7JGk=_pC@)R=iy>}R(uBy(JNAdp2LmNqYZg{4DqW|Xw;#8QdnKnDKH&b0Fko@#NI0gH zWu+U}j%0Ph%^hW8^HgAEzC&#QG{u|i0SkruN-nn&l^t^P))AnTPOqn+qZkAgcaDs8 zN~!hox=G4P=iqg^4$V`usA(U)aH2%5AWa?kog#j+A#GosGUE;_-6AIQWB{nuZQY01700W-t_8S zzlCnrzx4p+MvGOwq^w`Xvh=Zwpl;=>igTG$XKPM1>J~8!e^H!jsUxg%ndfeP;)|kv znRdc7Fp4W`#*qPv82ZQ8cMR8xsD{dQv*zNxpuug0Yc<#3?mRpQAJ~{rqC68yt+)t&USUMRrv0e4OyGR$suh7kM?I}{zu#bx}_GGb^C;d7-V55vtOZ+8PA2V;U zkh%yenQ36EqqQ>8>!F#`NfKw;;VNcy{vR>szgOXZm;WwP;4%d+Q{XZME>qx3PJw5i zX6V%4G0@w{ac}%;#Hbr@1j=J;hlCy6G;R7V&LdEw?oGG1k>}W~_O``@0O`z1ryYJL z2YXpA37@Binu!xo_)!>GGL5h)Ak$1P0~a&0Il=sbuT2>MHn$`joH`_~aqd|#=Z0Kc z2W(R5RDBW-Y$%hE95;1IuBs6kaT+MiJ*Bky$-LRM4=ku9!*dcXO`M=1=^79$H3J@5 zizhSSp8mNNXp)JhV=hTfM~>(g*}Q|@8OhKH3lHz$eQ+8%7RP)Js> z(s_$j|B6GTYnCKC7)p=e|2$Bk3kV(V&ak3)2S8SxMPcu84FRCI$Tz(MiD>y()K3F- z%D#cXNLBEKp8m@%xx-kT)%P$WCoFm(7Ur1$o#Jq1j)Y=4kKhs5rx|l=KHWtO)ts!! zG*;_EHRh>m)B#hGcN=^b8ya8&Gr(Gi8>jCYU$eHMDLD_U(+0%Lbh>)_4{D~l0F??U z6PTs#%{EGAb0XC;Yk4ZSfUz#`x4zXhr))sXSkyQNevivczu*RdzcK~rmD=U4Fu5fg zd?iik8P42ns^P%|5IsU(@k4ml!TQEPtn8ZF`>v7mHqov(l-i7P7<7aP(R< zKh@;G*U4HWN=tY6CZ~e6M$)HxG8w#+GrspLVXd0B%!0NoM98e%y{Y9`hc``mYO=3t z=|AsH@L|@1tEMi~&~bmVA=TdO9U8q}epxR_r{MA&x&k0|W;o%K-<()J!6RD=awJZ;$GT`=0W#~u73)5{;7!*@IN~Lj~VfQBM0D>>&O3K%>R1DTzt9w z_Xj|Mu6aEZ;VU$^co+K$QFukT!P+_Z(oWpulaYF8b8%?v78s3(y0#3i-KYX826t>f zyLSt&@rR0=DTCPH^IHaA-HbHHz{4B*?H*@{-2?FD?EbBOYq+YMik*9L)6gp@vuki& zad6%C8a!hA`PsdlgX_D{Tufj^nEL`22AtPEPY#Z_8WfQ)o^-y80f!wSHakPxpB-AK zkPgj`pqyEG0}n49lNB3h2WTxYSi8X%=Qeen>)Pv_d#*UNqbQUr6KY{@E97kxWx;rc zt0weZ1!kJR#*Nj9xgF?VdwAegI7>Vaw+H3X0iOy&@p}(<0jvr+eT8TH3cLCW+sNM| z|4Co|xxT_0{-r>UADy^9Fpd_#MXAth2y&}fx2dnQ2gOgl{?X~(JzNlof#g{sJw%%3 z{*T^5(=qH730Ab!!Q`z3ai8rgKD8BJ=UR1Z> zgEFxGWu(*W|D+%_#V}xKB?B+-J9Y3SDXVo<)rSx+>?^=W=8e9>+cd+4qy5i!p5DJ( z4Z+8=40nl;my0je?^1c+ZvK#)pavjcBVym>7Amz$qp{rt;u@4noM_{E@>u z6i3#Y${-hQHj%4O!Sey9673#?6FpL9Nk|z0|Abk|af^%rxNezDv0~hk7f-Rq`3bTR z!^4LAK$d*zLhsHPzOy_!8dDXyVDdSEz%+&h<_J|WT?fMf9DHzJ1UM1$hYP8pT=*F5 z8SDa?V$yNMm?CsoZ85w>a;~ybgm4vHpeTe4*KzP?q34(<-V4e|IFy5PjdGoGXUH2= zCh&`o_DtZt^HDE@ISp2(X&8T~5;~>LLHwLkk1MC-aEc72BIuXdWXMAS;cwVlWi88U`=7Ap)H12n$H$NDn^MMrOt1B2uHOg9|SO9rVdhP9BgJX^>0Sj3Z3qs6Bz#zGQh2o2>t7QB|Dm z!_9^$6L-I1iL%+2n;`L<^xZ4T1oH9MJ>$S|GZhYi9c1kW5IeMc)>Du*o43JekYEkj zL=%A|s#NS`s}@nEHb)3DJk2HXGam7#D;M)zR}Guj%~HV52*H(#HI&oYIfDccPA9a?Hse~ivKk7DSREyU)K+M{sb(vuqZHk z11o=7#oCsCGYq=Ts%?=Z*Kl@3wrr6DN4Xu5bVjz9iOzUQH#>+&-svobKy(oQHfJ5_ z^w#7r;}a8@d;1vqsWwJGi$Pf!&K}28A=LHkalyF`-Rkooa9p6+?atwA%|lRcCg{@Xf|KzEy$uN zGh+pe^(i*N5Z)Tjc4qOGy`8Bjov^*^=RJP}cDieIlVPU?5auv?4}U8YzVU2jOH;{Z z;d`0QE1#R4O3!~K8;vbd?Ds3))%;Uk=}x8R7-8W<`!N8^>EQ+V!dvjo0@#M$rV8KH4z`(i}2G$)zc){tl zd8M27ug?!`+Dp$~d-K$mbrQL7`jZX#AXUIDDD{e2@Z_P7Vh%R_?|jyPeZF~<@gP8A zpy%}pt$0#|%yu7rBD3t<6hbC>;K=qfo3@-juoE8L>O2*H{xu;XJ}p2{`6l;VgQ-oe zd(519kH2%G>qHla733Wb(Lk&LA{T&p9W0B%DHm6zF9j#~uFwaSxx! zCp@Mw5JrrnXpJL+A_wHO69o?XAb^p55`pmvUZv;@s)XY(gn6bqC%U4dK-kC89qp12=60;h$C%Ggb?`j z5K&jLiVQJ+IdBwG*+?U<$(+^%CFX&itFct(D}|Y)U~MC?#VnaSw`LtgtPTIJyvKX$LEy{PWOnEuWCox!mu;pilW5|}H zm=qK%oi%R5Q3n6-D^;7SuFg#SKPFaP^@A&aJfUa&e;D_l#}1DD)6wsYcCNT`Yw88v{gxmJ8lH6mn_>#I-0w#&wNc&)%>%MU29H&`X??I_NU zoVL}U}hdgqhV5xQu{bWv+H@0thT= ztCx_K{4K?L5Nb--Oc06!yiFiT?Gs55DdCUXt@p$e<1ozQa?iD>JLdrXAel=bvlhOz z0tulJ0mE!Xh2!W_qFSJs7@IZ8@OC-_@-UP_GhO5OY@hIXmDpsV5D2s)k(~-#q5Mqt zY`5LkYzBCa#LPSk8LA89ibyadG}Gr@yvi$;Pt!s-wtD8jTC5`mE954%&0>Wg-nk2q z*&TsX+1lkqI<&?``6%ElBdka^CAkzscbGTDlnLKg@&Bc;b0loE-)l)G8**d~#l3?X z8QQ}QhU1cq+L4+}vkus0afS?%EmX1|w?mm`a%7b7Wg<*6+XmQ6imPAjAP|#LFFYwkVGzu$^B9twf$+y&RA>;E@a?aIz^$ zA;<`2#_~fk9M()@V97RTNdj%riwxT7339GYAq89xbJ9q;SeAK;HY5O|ip9`iRVSyR zCA}ZEfd8FFY?DpNbh4>Uw=Ut%h{uGO!ta@^?}qnSCL~3N9K7Csa|C0Ja~+GSlduIT1KO#Kk+SK;?&ve?y^?1GJdtC3)#*582(C(iVVt(!-OUUu)7;*W zXzAUdgkM8KLB{;D_&7#YoA1D=hSu%@j0=3a;H>5M$#Nr*uXGI;#yh>w=q)~1QtrzGRt63!N63|?Pz=F{fg@3D ztg;Og!+-`KGi1zef6e*lbkH)nE?p3Sm|4Yz82HTmEX}gU!zEXr$!1feL1h%%rYC0_ z8{zZ{d5uj;z(s%z<8E0gXq#|NARG^9Fd5hPMZ=_M1QAn{=2ft2Ip`O_Othd*4`z&l zgSox<3k>3p{H=NryoEu35I+eTg9$n|V_>iswHL==y=dJ``XWD`pZWr{7FB1(Xe|?qkD@7lzAp!yOT4?Y!k;D-%C@%UeLnP}d2cIs8Bn zV!(nC(DBjJrs_~<-GBGrs3+mShy5D-&HsxVa!u`ep9XpNk^=(pWCs8NrV}85Txj9~ z|Fe(&zqKYD8bHVYN3-ljivQ;Zzl`z!W2^qAYU01Ua_YE$9rJgi{$b?R_=E2n>0@yxV1nJ6UC}luTBc zJ!7xM&SE=BvnwT1=zX11=#5_cxS7B*zLc>h$Y{^XSjS3u{b>yAkB=XYa;g+wAvZy} zwLMDs)-d^sk7m3_rH^|qh_B=&PQ1)slfI;WmHSLu+&X->Mj!iLScl6HCO>bVNsI4~ zZ}C|8z05Dpk>Bt6GYGGF-ICl}MH7WON7hosiD7$2;$lcepOp2E^fBmcH|6W+&hOD; zrPYD*@2#+DP!|t2W1=--rOaNa!~{2Kr(E+*qvS2e*lVr}1%iHVjrfJQMhHZk$g+d)o;sI}@4;K{gMl~3QdgEiP3lD8m>OA$~ zOP3np#^Sut8HmB9@v&cMah0FxSZq{H2p0|$;Kt&{AZM9i8{@$(U^g>*{*<=8;un=#Cm7>{L3?!SOClQ!e zX<{TBzW*Qfe^%jtm;WwP;4%fi)D+k}mah{}sO!YNS62PoAH;PcVbBiuI#HJy?scLr z7kizkUn+B*=y@&bI#Iu*t`o(gr@SR$u9ojLE0WpF<%`8K_k_XAnKA{S5qxGBi&(iv zbw$X&Hc8e9_E6|$9*+hA_n!$GI{OL7+(n9wdWQD%wJ&^$%ty11XiqppeT8Y9JI7-4>SzfZl$x z9dTyK>>~uoAB92gsg?OU9N}EvbCAszo(VVH6mg?z-XhTRaxbatPeaAfb*^h1_D!fR zSP>$+ep&irwwh|)x8+j>D_!u$_1nRJBS6#ji(%mD`dN_K%RLD%;k~h!I)ZQdfAN;` zJ`HXqm+GGXXVxNHejyfF%<|G33h5x>OF&rvmI&5ood2kYK2~2I%Id>r@rqd6&(hqL zscLJ2?22OP2v!bbVK2K7%LRYAH2DAHs?t?gH(s@P!t3MyVa%2*_Ky6o_~9b_bv@DZ zU0AA~EDCBac>}~>PKHLbMuNRWTuJ)ST!7v3|Ficlz)@aVnxMch9)47JPd8IN?XJJv zOdV|yZYIznVhAkn=Wu@k!;yR*CBIp^N{-~Z1)Qz^jJ)!nG8jg)!+ z``>%+x%ZxX&v(9qb!qjjkh$#h#my3?0O3{NcfRiA7>-`@e^O>#5Y=ozA1G~akHZWm z7swgvyB51G&dYxgL@(C;+UT8@G9|?ce#JioUMvH<12eB@AAzL=aiz?Y zpkDC@+BCX;niNFf8J?7+jCznK5b?k6ov2Ox0n!wTF7w6t8vTie5)E*);i5GZ1(zx= zJ}KdQWL3zgF`kRm-!K*xYmD_Bs_+jK_a@pSOG9DeslB7huDeWQ_PZF>#fk@vMzvHZ za}n>I4Bc(^-0c`{?;ZYlTa|;H7uS1xkRrnke1>tP)`;Ou8ooSdsJ(OOY`Zhmv)LJ1 zyA`fR-w-Q*pB-I|9RjY`-=usN)>!+Ub|u_>_HdiXaOvDD8jZyMw)U#5gRx$^E@@`) zh#}pjJ#DKHZN2*TW|k=7Y4b&WlMc}Pu~GDAc1gMh>JM^MobBjOAH4Rf9sTKUpB~(P z_uNNq*S3Ek;`VtmEEh_k6Kvpg+tqVxN11uT(viSQ``eJb;zECBdvKGqLV&)@FHZ03 zz`n4|tJ&{BV_sQXZ8S#v!WhwD9AQ>We3|Yrrnn)3tO#cE>e2hcoO#Fs>E6l-3XvB4 z#_*aoYRTu{h+ZcV!6~#Z5%(#BXWjpGIMCogs5bb&zZdt$jtYx z0_>s6%+3BG@8du4j;Wts+NB5>1+6r1=%FUgw4gWik$I(^SNhH(^@6nDUD|0h!^q=gjtc4jin@u_4U6&=x!0%=M z0HgnGN7#(Mk2Rv)6a#EUVX#A3iowA^q*}#!nK{RRf0hyf1qX_ti*+jVC)Q==ny87d z@_-f)?&9V0Dm|7nMQTD?q7ZW>htPfiyc00?RqBD#<77X^D{t^i^bqMQbtxq)E%e9m z|BoN@XB7`-@Bh1r_2d7|xZl5b#odR;{vAHL^K%Ol$UK~#O1oA^h&2AM#{8>aR4hrx zowN|pC zCml8T>m)ZdN!e?CI`uB*&kqlUg_XWJ3K&h6ceBx5eKKZp_9GNaNC!|A0HYz z(Tx{bL-Y+C(eQ#Y#%g$P`;Cu4oz>kwyffqIlNO#GX~6V@yL)f*Q$>c%e<&O}yKyMH zjn!mS1IDMp%#X9*CktXN+kt@tMn|bn&gFM~DXd#pFJ2zlcF;R$xA#1yQI6$}Tds3m zf7|-px^t9-&^`8)F>vza;H3-wX=Fk)2d3NiWRU?3KCxv!pp1Q)R-D^LKbCS%bFx!- zb>vJ9W_84IqXxN!3~mv=Iz1P?qv%;3Z|NXZ-pJ9!!fjl{X#r9atg53}=n#SyYe z8f|HmH9nwxLp0F znj3;4=qyQwknaMg55Mh!*I1@T^=M8ZxGIy{h@iL597D<*8(D9icuNXrTUdu>O$GH3 z5FHfI*=4nVrqUFM&F#4WK9$eQaN1k&`8$a{7CHfJ~7gW zBq6ylXs0o0Mm;7Re%uz%eh*{vc*l2WO#T;g?%0&eBZnW;t!g>J$GMI(lpaMhH}e%9 z-OJ~%_Dck#aKx_?*!%J!w4+f5!8bN=UuVZ#64Uy-eNuO?FXH4 z;tg$o3?uPI7$p9(Y{f0h8{iaV2BBovDyKI7h1-I7v5_J>MGt9eVVJ++*qTTvN^wHO zxCVXw~*pzbve807|$ZY#gO9Ut%ypEf<0+)+;C2pGIV1z}}rN)9*3UP7U4?ANJ z*W~v3B(BE3gJ^z;vsEm?o=CC3YycyBLM=LltP~`+q{o9n`76+LMPf^GqHB&6*M%mM z0AbEXqmT@~qTClsf)Ow@^MmF!N_?omH7=7?&Z}W;>Q=rBqlug|0a7bW>}+MAU}oh+ zsJWT1$H|*OM9C0bUzd^`nuQF{)G{SJBpvNL6ph5CVsy>hLY2be`OYTRv^PDPR#&KL zcQS??5O2r%axJLE!p7Y8oz5skIHmn}AVQg^U_<7H&T$nM zm)Jhpi-?n3B)L%`7)oJhp&Oy!6iKn1xJ-;a6U!;31o6pmr(=d?nOK{VUg%9y zxKtD=Fi?zBWS}})-dJ8pk^!|%$g|U|7kTngP`-4j{bq z$PBR#j1oFE+Ex?*BL`APTolS^UwW~xHvwKqTGtX4cX}U zO}(6x43$d4JmjC-r#M#dZePc!M_^u|lp&NV1G(*_6*h$nYDL?n)J1g8-(nIB^@qfF zM)+Gs$Tx@T&XF{Mkj#*1{i)ojRj0mg#fwg&5T^k-f$GnytZO}zr=#t$&PELTQ|(ib zu_g*7k0B!&)_pNn>Ozvq2OBy}5ngiygQkoWknOv39)Y*;>{8;4sSZ*=aSEhl-#&j5 zBrJrD*u}|zQ}8f(C9Q-${4UCp))Yr+y=_Sgn&bEzq0}lx6vBAcfczgRqVPG{Pj>zz zSTfjW4j^vc-5}!J?&Eqs#ZRfp%0EzBT;g=9lxPZs-14G zlJ%!m^Ta1Hrn4T>e5K=wNvS|%UM}wQJ1@h+F6MfWJR>;70R7e9wvmnu>4R*^2Onr) z@aK+xg7uW#2-<2dUineT+&UxRkuL_1?8tR~PUn%f4Y|u5ShdlH{&X9>6Q;tz?%*gv zN92>;I3AH70_e52%l(->lw+ms9F}sd-g1^I`Z&YS`rF!r3uxblI@-XWBkO#TGme~9 zp6v`{5T>**FiFs4-;B>sh8tSwxFL41oHg7dif0D17eSv_`VOiUfU}_4=M2Cza4*M8 z01V;68jz6-$RIbZ7r(R0SrDaUUc3;f!;&4& zfnA3xT35%FYpw$wP%Po4JP?kfL{p^lU|G$6PFGpb8vO;(pkhYiMrZ_D_a~=Mx7+SG z1)ji}PNixliy{DcCnr?851Rrlv>QPUA!4%d8;MXX$-qA|u=Jh&Q9|Y*epF+XCWSz( zeki8yHgTIs4s(Ux^)_AC#!Ok(Gu~3_d1fu}wsrFNM3E=^qLF!q{v;G_2`>zqaUuqs`;X( z%OWg*3EYU!ZAqo#F-yM9p}IOCl(YuSuWJY|h#^KgS%r63dd8g^2rh_tLKo&gDyOfi zuYaMQe(csEmF^0@{+#JNVRfO9zuy&aW2B)GbG5PPOP+aV?({kKO9*$KY*cOHf09)R z|k7UXj z3Xv-S7s_<;e*t6wjEOKVmq5hMm0vS6I6ML9DZB~b6TsCwI=i{>hMe1N@a_a_XTS>i zhXiLd`UrboE7il>ERRMnCD<(RXNcrv^T9(LbKmx(?9&*#`R#vX#;!=zL*eku!woq6 zWN|?blrb#xg0ID;UGyax8%i!#XscldCHH#Yp#%s@a6NC|pi2#m4s<$0*&f7_-)QeCN3Z=C z?4C>Vk;GW=@TVO^pTRM3ao14K@sTCye_Tf~1fbz8AqMy+ghO23XXeSw|3|w#(&+GVnHAM+XG-$Z?1nW-pZ#0V85};>}2ZSXs zuDAz!eX$g9gy>xO zeBmondx*SY#7$joJRDWd$6f0=-%RiewJ5}&5$bK<$xbJkX51yS2tvJ3rm{ED5-Jkm zzX`yiHs3mTFD`;jFTFy_M8Ib5K?jYjfbMhT69bez;5D|C7-Wy5Spx$2y}Pquh~{J; zgNT;3|E^KHauDN1Ih7DTvo%|9x&;h2 z)=%I3NCrf~!d;K>JlZYKVcW+uG~dD{LSX5Ej?Zt~0|obLVvQ^8)1LNgt$TAH9kj$+ zX2dIlq}qQgJB^b=t$TnKm}Gx5C#&F)yxYQJb~6X9@5zwR0=+^(fR*d#Q%5rft3>vO!$xEuaAFX z+#C1(#k~jbxp?<~zx&~_7soy}=IPtR2bg}Ls{$a*r`ncGs`%SEz$7){h*s+?42PSE zzIX*L9@`8q=PdZfvn-jVSH-~F3eC70lEpM8ViT(xS|@ML+C3CU5dxvZi&@0Vw0h= z)Glt;%kfmCK2po)Nr985TRMMYI_oa*AOhsA*G6GD$uCNjL#)D!-T-6xdIz zzLjCzXT}shbVBD}0BiGTIzH*y+_`NCug>j1mEXJhYH#b+-ox_AwS8x){L!A?aOhf@~x-Bw9s~$HE&I+*aW&F8C6S!)4aj9rPxtxaaE* zBDO@Y=rus0dhW^aq`U~?k=Eitx<%6n)zjpMVNnadGX3+;KZksu%G@>S*}0(v5fUPr zv>AFTc*G^ZRbm=~lmQkVCQwsL6Vqe?m{`Nb*?EZo0D6u=nC`P6Qzg>`4>e;}!h}fT z_XMuC@h8-c{w6eJ6T>9wI=+_ghwuSVnPJRu#z^)Zp^1q_qMnxoJfDl4#;|{p_hBh1oDc?5VUjz!=ePO6)$MD|tFtI0`{&IL< z&(OYIfD$r9aA*t2{&uwwp9P|E3qXvghBln_fFB9pZ{R=YpOnR2j{U7#c4)?bm=X;B<`ZEVOx(U%jxW+(a z6n~pOdbM{wCLTu-flmN`whneG#)SNV4KOiOG}Oj*fMgp?A|ARS2`p&Ai; z6c|a>w)I*^7W0`Zv7(W*Vg)~hvTcY!+N_K|g@d#MlG3ktu0~gX)E047kq~aptWgZ6 zTY{(}34zzzh}E9)cz$){0C_?MT2GVDkkk>2H?)W@G7z*Ap^8Jm<{1@=n5ZKP?04`T znb%3A1I6xx^vTWe&BUD+RzJY_pnqPNpq7K6@6fAN=+zT#??|sumu?j8Lrc&B>QOD` z7q_8_qHCIQuI4Zsnqw3Y&1_>d#f&`YVN5Wvlu@)1H=fSam{Q@E73iPScbLI|(NJyQ zA?!EsyK>1j6!>Cdgy@O^U5d*i+@~bpAW(5cN|}0%=1NFUdTHlM^y;b17$S82tKo9V0 z|B`{yMFx$J%IPOMSD<^}ZJR&o**VS4&X3`(4JYPM3z~4eatEv)3tx%?YvRq+D+=>Q z+=@~<86p@bJhFP>gD2MQ2}Ta(VWPmxNr5iVHw8r{V}=$%Vx*=+q_$z`ZCbtZO~atw}B-**9vH)s^%HPq0TxU@29 zOeF|`k(d$)8^I@Gih_YQE;LI!I!*mZ0=Lsd&0U980d6i>KlPCYs$F-=ik`7d9%Y;SS!W7H*`t~9i1Cpl)79Sd*FN1L|21JNxsI>$ zySmhws=G74XP0etP!Q;;gZUj2{;48fwyG!>7%~X$MDeTV4h(c1qEMF2$HbhmEWDGl*qFVHhwJ#5@sG0Dtuw4;f4wN>vMsB15JN z?2FB?j?PPz3_gW1A-(^K)+ZzvmSd$h64ozJi|p0DN5lfb_|L&0Cbrb7>q)9Y@YC1*S+Qoag?T0%P4fO z?=yt+0h8XO!W;|Rry^Hg?|cU$d$v6Sk@?+6;{MW3Fb-9rV2^@8j~gE!yngZm#fuE@ z=^R?W&0}h@JqN`d#IbyYr@iqd6g6`FL=Oe8e0gDbPlpa+vE=4^ zg6&2tB1QaPFeg23G!9598HR$mm+l)MZ6o`0=tMgrc&I4>Z8lb^8(_mGB%S}qj=frO z-?#CfJ3n_M@Q+Xeo!@8t@c*gs!&??VI|}@;E?QOf*sJm8mgYs_Sc`z@9*bd_e0&+P zU{%#2XV7HEwf@@h#?8%hVN(K<2V*MjD{JQT`H0yxT7?M@syK+z`nM#BiC_cVE?7bF19TSJK91b&JEQrS7=4IObtG4 zNB~G&$I!f)jzZ{#nqZ$UeQNr2ji7a4!iO~gafX3#Np7?^q)jk#U5J?nuJt;-Azb%5 z?hg@J9R%qEr!%4aUPqH#06i6KpZrx7k40CT{sSxX4C70e;lbOYAjOjDOXeunn*PUzuPKkAq|0h$H@`>nI*&i+)@`wN#Mx>^eCK3 z4){zBfS3`M^q*uEE-MpuYp7@{9*?FX%`=_J(a7>}-LjSJY+F`?Bb*;k>&3FMI#Uh$ z2dI8Pg<|nkBUHw1Bz^s!{Z`RC0jK-sZ{-yIoK_lxmjp2G{h#xqafug=vEx2_s^YKp zQtfm)JAjlxNU_pFAa4~OZW)&1tQ3b}j zqPzbDW2X^bU_Lcdkc`VvVzqb0@Zd`g^x9sixFS=D1FC32WiJY2&Nl(UjkR|%fw`?R zBLPGmryk)96hMGXZ%>+KiPV<9crz^1{{{1VRShn_t#YnzGrE^F*mRiO8=dSiq*TAEz^Is3IsN1uqN)f0Q- znF}7pBmBioZoUx~^+$s*v}S8Bcx5t-wXqIs{R~&9=mEw`VDQ-UT~!}Sroa@v7%sR4 zF;B&eIA9REZ*j(Si=`?jPs0zF!M~GbWu@xr$D0m~1)-Z)O(2YF3i&}DcEjA?3s!3y zI5ip)B%|e~Lx!Y9GP1MvEYVF;0TSvNy(Ku3x=;k_%r;M1BCs>htuT5eJ+wjjKJh38 zTj4yfTS8G@dI3{fD7AR9$*Dh}imZ()_RJEOchxLn3tHtzzx>~X%Cm3QiiW_BkB}*6 z##7UcBy|qbr`?Z2I%KOvUfVk8uV8%1{8}~7{AtY!uaPFUfX7s$7#F`;_LOB1nf093 z)vzaA$KF*;UtBFM9arF)pe?$^eCI`-T6@|*q1{C0LeUihPqr3_1X z7_byMLwMoN!oRK#34)6m{^-K+;ftO-984U8gHZ4@K7ptQ_P;;e{n1DdC@WY!vSa_y z=e@zNA*a5!l-0}3sY9N={#EbL7q}7H;#@zw9>{EIo^a8tC-~qYrH2k59NzxElvzxH zMWU;!pzrLX9_i@;Ez5AGOP=B_SCzNUI#PC6^?vWJp~HuWI%R0@mz1n*=uE3TT?6wR zMa8#xPj((gr8X@9-#;{?0&m>$!$Ja`kf|nxjX^TbAI{u^u-O#a59?eshMIBEgPH)G_^O6+WZ%hKDOXHai!?wLCqM zhl})vfZ^&68h{;mR@L;zdhCb>f$PyyrPeLB?o=B$63jR#3E%_@${DOQLSFvc**T;% zioBfG6hAzjuPHF{9;LBfmV|8xUtUo99!puQ2WY+}h(WS&3Gyh3^$5JP<_#mO#;b`q zZ0EWN$Xnp8h4&lx`tYCf>xwDK3uHczN=JAJVF!4U-lqC5pBB@TYVJCFa~anUpG8zX zsC0uzCH+wLPY8i{m#rKY_Pv%J6$YfP)Pz|xwVtF#P!xuaLr)Oc6QKlLESz9P5%%;y z%svlAS*W7TSW&DN!4E?Bd*WP|_5`X7zqTRNLKuR=;rHtcmsaW$P`prE_yOdD16qq~ zFI!i14l-61)wEKoqKcHcoG671dP#M>C8|CrEh?=zpg;%nDWs%lwo)1%q4b#SbG)F8 z4_Z*5pBSUU1qFPQyh-uiG~$9%N=<~o{SUIUc|GA&lz*ky6FcN!r1d1S1`L*f(v5mS zDN92bLIqKf_g%fAJSD+JCph@)NQ%jCWIZ7zDe@9tROrpT(3I8@Ty-O6qwh$n#kaEX z_^imz!tg9j-(~3tVJVbiFrHH_Aq1f;svC3p%9M61L8X;cjM%i6Waggik61B;*`E}{ zA2$)G7<4P^e@!uiWKpCJwDcuQdzK8o8}=6;SsO6v>*6ah9L?Z~ExD=i@*qXZTq)=> zU+(SEE?f@D!#w`QhW*XPFpkO!K|>ez!~!ceE#NQQKDA76bjB~UGkKM`$7ldxt{w(| z9tVctDoub^7S{yE-`XG+d1dfc!l4bB?_{4v6JE1yj*{^q!FmyiEiZg)am`3UFjzGg zYK0Bje!R+o1p*gm{s+oX4=`WiKuRps^=0fNqf(C_LpR>@ygm=QFRcmQZZD=R(aFdO}xfcq#5@1VWVW?#XA5 zO0|3;fDoSGASZ<`Vg!(s*Y|F!6IQ&Al(n%z@wa7P0FxFxW)f_?k{w*Z31fA-674iNOs!GXj91XEU>aXd(% zKmdR#J9^L0GV^RPhrhQ#furC1wbxZO%Y3PL;rO_=80R-|!bNJAhZ8tMt^iR|f?vKU zvIJ-+s5DQ+Lb%D_1ccK6g!;X)tUeN!sNHuD<=-;Pz`w}6LA38 z6V5Wc&HWRl$baMU5|7sX?5&YJ`Su$sS0q=*YRM@X0rnpd`UY~QQJ1Ua598ViZb)4O z;Z?~nn8H|mj;{k%=6miixax>}()a0Y@r4@-MeXp?PQV#6TrZ$|C2Fs?RD+9qs0I_m0Y-OX^xL^@*+6>F-={O!Q zt2&|v0?&k|FA#b*D)8B;;Af7HXiv=-9HGol2?&}GghpOu<_BaXW>FZL<7j9Dy+eE; zfEn>UrloA?baF8mPoq&%>;g65m#GB`Qvi#DyFyv|hFWm*hoI(og0Eo=TnA2dB$Js_ zORDB6Ps@y2Y?{EmS{Y{gK{T(DphGjA@RTW4sW@FEShEb{Y$~CdM)O@xpnZ>Jd}RmzdR6{xNO3|9skz2zq$9n-2H!z{qOkrANfz_-R!G$Ww&k;-v>SU zC%>pzK$=#EkV^nzDW93)DKKI3Z~*aW%gqpb^VmNVj@2V72Qo$hbICH{B|A>CurdmS zlyFgmR!SfykUMgDOSMv5CKDkbAcr%;HHR8>UMT>+lN<|4bB^ZARA({KC?x3bsm_au zNS*yD{XNxr6$xkMQ+J-J_?%ZMu$1`}!m$YM+Yw=h$iEg)BOpYNC>GfKqQGs6Bh}4@ z8C2M<>L^8CvZY4hni1(H5%?tHHI(u;2{3IGtP0d=3S5=wQl?m-4~(!q+zU=MWDs5z z#-rd;pfv%H;y0pz!25KIxx&6fK*Xae1d5{^g|bq;T2d0Inpv5Bg@^y4g5eilrBFcE z0)}6lFG1Op=X-L56v_$F?J8IpA+Zv6+IO-p(hzs*TWGPNHXCPzbRmkt4LPeNw<3GL zn)~*VPEf(P>EW&F0wptQq9`+BuUHXTfuLri0BCe`OBhXSNg@QHuvfm(r&uyPO+Bm) zH79|67wNJNP#2@9hM)++ScgoR3PIL6O?&Yv{3AFkO@x9Pg~h?Qp>J?og61!w%X-kaeP# zh8pcgm@tho6O~}Lho>c(sfgTJ=50iWQj2VUNz<*-jknhchIm^_T(=yAC-jz(OmqYU zV=u{KNicy50vy9h)4%DOpbb|cOi5zUR-Q&4h* zaqC|$v(yS$lEko3GZDTSVU2eQJF=S&YBiv4HSBrsm^jrNmy8|HSBJ+ zDvTR+HN?+Bf#mp4eTYC23o-G-QS#8>7*7l|wreg>5l~42@{2}ORnEK!hCAuZMfiC$ zlAtx*m zV4C=CFz0PFQtn(gkZcm1En9uSkr9>wJ6GCjvkRetk9XY1FC^!%936drCJzJ&xV5X7 z4%lySjR`cy!jb@#b?w7bMN4|zen6)AY9$$!1}_4N1{|97vKVOOCO~L*wdEkt&_{&h z=eB&2JKljVOM8^-m&Kf(l>JkP`IqVMnsL3dqc}k{ALJ<7_W3gEfHZwK9K^U4W*&v-Uls0i&W^jD5mndcQWRIWgje()&$dG-YiQpnN|8I@tM49K!H)molFEp_nvd9YD29h7geqU4vL zud=xcN-2qn|9_~WzT%-756*w!7x&jsTs7hS@e{{2-S^XbqxVd^>;D-0mt(r|^)3Fi z{h;e1aL+v3{_v#Ps+B|S`-jf9Uq7)CsQBTI9YY`N2NHewgP!ZXJtmjuE_9c>nXz3n$XLK~QSf{4ICA9iC0GM>6bVBWN%ZB<x37g$3x9)6i4}jQ5OBd5*Ur3mo1|=Vu^|Yh{VeY6;A@sxwv_JDPcdyrzICcG5ko5F( z+S7r}UFsN>jkbVr2NHU#MBMj({tX}LPla=%JXUG5p6bkIO$MFCqJO#@H%`R zfbj;u9pSifPg7f4h5t%@V1VLep>zu}nbCtCEWTwBVexs24oL!^4if_zNvlK=KH|{{4VTeVorbQI1nV7sCaHF%XG)LCE|K z$qY>jr&wkwxwOJn5Tr)Am+5|hgoc;l`j#%exyks8PTdZ}&b6}2eNo$wx+X$!FSb8s zv@A?o7H&{C8d?)9B?~UV*LLO_1qzpdYao<>{OG_Ai*7aDQptr6AL^-bxc6cCfgyn}Ta?a`@XT$L zrFTM{7U`M*@jV9C)Y%GX`!Y{a(z-byb*<&ZM#}S{rY~zGRB)=3THOqPMKrovZccE! zNB048IAd-#qfeq@bSno|KTwZ}99FXsaFvO}q`5v(VlZJ_nDFFA(^^CKBvb>=u#qq* z#7Q%(`xv2^P2&6w$gI&7VGI9O*LZYxcBXdHY=tFtJ8RRf;fP#=nTsycl@+{uVW*%V zPSiN-N+>iPouR)@s7V!%X_9Xo;1zx6G&wTj8bS`*P;$B=sKPNEr}_C2Xc^dQL(CmV z7Z5KH=n}UNHpFwPL$M=}^~x$-MKutwEnZkB7Xri^tNY6*ecTP&HyqREV`eSKWo-id zZg5R2hPL1D8b_>GZ4ZDpcW~Wdpct=S-km>no=9QWZOyIUJ9zOT2+(q!9}ez2h_fEC zz;>hukM;t?nBV*U;IXgr$J^+UjcIH+`PMWQ$aW8G_)@m1{D*t<%;<*CukC6@Vr!65 zVt)y~YI1a}S{olDGh@5%8&@$l{cw9Nng^1#6GZk!#|+{<1FI@HR+;Jy+^oc!dJ6vs z#xEQXb?zbjLiEhYYELX?%)#1wWvheZ0jKf7$Dm~8GXqmO(}SFZ2o$b-TqU+v93qI( zm0s`_J)oJ^yziv*-$qcdU6A^S6s-qrWb|gVR*}no-NDB^W_QI`NO}auSz(67qnuX= zlxF+T3NY1j{Z!&KPGjgHo+4H_Fv}8Ytn+pD>vo)*PICu)K%z#q5|NrvVN*dr-7LP= zt-&vvqLx|_JRFL1wzlhD=*aBMeHesAp;!y9&4h0(M2yjW`#>2Tn%~4%q_m%4?WX;y zfwyREdib>^(sv-9LY zc?HTJ$8Bbu&p@$05S7sb!pVkBxQtNNU2mLmbjr5wXNN@gm(6>e;uu?m;)7 z$~=s2B0h9zGs03cyNCCk0*~xoB9+DeKJ0N|<_>)TZm+|KhW71NT(B@^!8PmLSdZA! zFPY0MlfIGJMV6&JOV;k@c0Aw=f4pt@#1Y%lR0b;!3PYPa6vvs^#8ir6Nk8sUrYcwc z;aVzms3*8HAXC%!uCC={n-*y@$`!nstb&DF(8)+%%*Z})*;LH)M z3_3XR16Y{&aPZ)9kTmwEk@#K_%I2~=uwtM#ZQJ6jFZ$csa$;v9wLQpf)0^?G;EPGr zd-dXJx*Oy$$lT=)EHr3Gf4Z%|ZM}JoghPh9?n2Lh1d3i(XJ~VT_D{>b5PzB2FqM-J zwheO5V>jh8SUD*ZJUNH)8OE=>%L>fa07>xK0(->`!^c}?8VN_E);3SY4jLj?5 zvI@;?NlwE)MY9*h;TXW?3^NWsTGwaEF=sFtL%1|v!f||XFruy~I7*`q7=KY!tv38{ zuS^kj!iB5pZN=^j?ySV4{b|=2boTkS#ny6q(T;H|JqTuSBsTL&r85 z`Txh<^Lz#VcjxDh1nx-Sjs)&VpnM5*KTSyTufJ9-afc%ne|x)G;vReUu^ErwWNP|3 zI?0OJ&*l|y#RU@u1wUE&t{{Su?3(F_2xiB3^wo5m@EmS0aGMeWJOwbmrGmlZZ<1Al zsRKjfTi;c9K<^iigSs*Jn;AvFd7|hyPZs@#C?bR3^K{W~epvLIXNrFFY~eRxHwoxJ zeHzet`Z%EH^l?D9>EnPt)5ifFrjG-9OCJYxl|ByWCw=U8k`VGV-X83`!g-cY9a zjxHM%DP!+uvf2@jt%|F+7^VPh#VHN^12JGyNf{M1-c%q3=C*)nEDV;q%4Nh~Ul(4* zaMoq4mPPQPRNGQ6YXfx|NgG}@Q);nZ;{r1EZw6~_QFxg*dV?Z-5gZcfz>ULk0Fw;@ z2WKG1KLFz(?^c5#SW;83HEE}E<|KI7>Ntd;ifi(J$Q?A(+cTo3&c%$vsl^R+D$KvD zN7MbsHgI@Ctziksros&O)Ff0Y{<#G)O&KHIm>`9L5N5lLM7@$(PUW3z|-te z2VoS}2}c_479eRMwwq>}%YFGH!y^c?yYIcbl4(srE(oo951-JFqQDD^p5W%0&!Tqv7tb8w8h&Q zj!v<~<2aA7qB=fZnu!m12qdzq(jJE??>*vq#pqz{xM2s;1Y!w1!$b`Sk^|pZLrNdg zkJ1HRUXoRQMo}pPnb+4tpfjCU_}|K^r=~hp7SXXThLt1QVyK&4a%la%2QZJI46gv~ zzuav=e`;2E60t~58n2|tJ&;dmztIEn$R8W z5G);#$a9fMlCdiBPk1_3p7ZQ~-`Z$&5v{Y>24;BQAhD5#Rvn~RBlpi2Hl)x`^& ze9fR^eElY`iug>NO=GfeqOWgdB#wdlT8et4M8|=8^>~3WCyMnSMcG5dB}SA0O3$fD zastD`Ds}&cR>gr27%C7Cr{H;o82_g4@iW+cK~> zO-RnnMPwzC8|hqUPXOfBktZnW&@SaS%YU*3X%`h-JOAMsa))g`cJ=({Qcpl7wh=XW zdFSB1jrk9VCPXhDNZ}_`RUX~Ykxbt1jF{z4YL`hM#F|&jzH>>dyTwQ zVA;&A4$_Q8WLiSryZYGs^ ziX;sGBmSS#bD~k~*`)lLoZyLbF}1;4nL)3mpPpQp(jIYw2J5@d_5|mr%J@kxOeEeV zwWMyUoV@5K<>e(OX%V+Dwbbi&g*%m zWSVk@S`H+$wR>kot&8KVk3=;qoLMs`yaF>sC*KU1UJg7b;s{dCO}glj$T4>v98HuN zJf`s$bU{V8anKaIa@bMA{!~vsD+MG$Iw}*3gdBQyfKQWX9ULl%xtJ!75Gpc)hLJ;x zItN#-j!qGGn+{5&RHKA_<*1}$Zd^yAk~kU-;LdoGf|80klgVR+_p!qnE;lVo$!yg= zKD(GUu64p8S7hTFUc2#n&o1u}!*M*k0bX8Y9^HG)wN{}9Z^d)^=Zup_|tjRsHy&9s5-V)8qyDyXvSJ?-$4qcVV0o#Au) zhSzUFrmY*@yWl0ySV_LPKRb{zY!}t4r4ASP5qRwhdmL7z={b(a~9JJW4KV0@yF;48iV%al(X!fZ-Yxd z0KOU6DDvyKU1Y51SuOx5Ko=uBkD)06JuXtqM(x7~pa2f|FZ$Dflqx^}K-XE$V0%<; zP5=W0q7IZBfA1+mq6WR((lQ5?=vNYKK&&SpB(*;coGw~(tcZ?TbqJ60C;e>z5F8!o z*$0z~Bnv=9CexpJp8*blyM6>~iE0Hf_Y&Z~_=Ln{bPbu|s(K6JUvE7W zj{W?m(x8Air|%%JbIlPyrWYWISK(|I2nC@az;-BMuL?vlm7WB0H5nmfumMS+WTCoR z8Uy$SV2XGY35Q+yqzExdA+56ZPzpy-I`ftj3D%n`3NTE<>yKbKbiiynC4e8O6q46* zu$;13D~&)m$p8OfMQ_D}|HJ)%d;c>Nt0&Zte`(x;`<}VC;_jil2FCt;%u#~Bq> zbUh3d#WM4H@)^EU7} zNxDFwZwU1aL^D$J03K3Luoe89YzVLH+us^v+dGW(PK-pz!8WUN1sO2{y)v7vH`B$OqG zGRl!ra@bz`bQkdbxvd-X2lwSJPzCu-pXWAzIM8-Bx9+^;t(EeKnAGRo+|fM)n|kC- zE8t6gvdi4p^)Jxcg&ozCX6Zn>uQ$`#0>M|X&;B>J-Bksmuh_jQgFXL;%7oG=@ z(O;G_(869mj>PvkL=}JzJvr|2J@VSp5uosx)nmZ2s83EUY{C;f^AtBv0V&tgS(J=> z9O3Bba|U%@z%z8_poF&seFTn^N|Z`0%f+QPIAk$OlzQU6nJY(79yOT`1RBU`0Wax* zL5NeJFd>^w1WBa^K%$<*}aVJEH;~WBcA9EeZbLWco)kVL4IFRm!~Q;s&GRI#@w*oYvL2rh!5%yuqdo_o73BlY^py;GeV=~F{r9DzN( zYpCZq*`h-|I|YX65_sIEP@^Zi{yBuQ0I?vmMv5US6^NuGjL0mx^#~)fB!LQLo3L%G zEKbVCA^_+yhJI$~7fLCDV!z_|%O_j0V)dur&u!jLXiV!u?zRRTJ^ia>2W6tMdBMSjdGqf`6fSQ*x;s-;-}WFdCEeXI;OAW-r94cDC2%EHp{C8l#HCYG7+oC=gq( zx6fA9b;3nJrX*2KoW_kdOuHVwGRCES`L-(=#T@*T!9zVTBgu^JA!|_k6Yx6nM8LYl zy*a-Cb|!rYQ&jv6Un_eTADo1dS;)-*=LGl@V1+^&WEA6Hy7FfO*ffA_RF5rd8e*BV zcn%&DZPLQy3#0pD`y?wq^QO#Q3Py}4 zQhobYgb_N>;D%%twR}0|N0NrP>r#N(s{(&Lk(k~%Opdh`9s^$>CYD&NVkHe>_lAKN z=@E@$#{b_nvjYFS^K(Z6cO+1@1U~u^LBIdUEe!o0Gwwvo>`@@U6`q^%lTOWQCwE~l z_^R{SuW)BQkm)3f#TnCQOrJLWiD@&Q7$x{yWrk(0SsUq55??AHImwf5KXemR;f0k5 z-ZKC#TF^!=SwJ3MtVS<_w6K)Q6HfTpWw^MF@QGx$Gab+;$9W+d#}OsgFo&r=g(nDN9V(TqY6K&M!q+{57-_^go3B#w)k*W!_FefeKQ&*~hY;Ed52OA% z-?bsPcBA>4)nXZc`5rfs;Wao9;+8uszt474b_0V(LG5#*&5fbT8Bb0pTpKmkgR2!^ zvU3Xn@09|-q(rqLTy7^;ds6Hskqi{g076ssiPDcthV;juDL{m4^Vot9`ckI)7=G;@ zdXiw*2dD;+Ndcc)@A5N717@cK`Qr&sx0+j$jW5IfP**v5P7UsU7lr9Ab+U#K!e56U z1#_2qNor9kx)G|YvkTh4*YL^8Jy_vhLUW*drnLP`P*?RVz{7eP82J8Gex|5KB`JK<2rLr z0x<|~eP&P@p^SUgcvXm&fyyaW2&YL3OLato5O_vaQv)g^7OS=v2rGzF1%NribyIVY z!#a`_ZfYbIp8-JIlT)3gA{hgFRx|C1=~Lb^%%^V=w>=pq?$k1)vDFijEtHbEJw{?xYU+S0LFQ8?&1fzt}Nm1 zPJNoY&^_~eW=F7-Ym;PEf^CssF-C46h;g3;s-6@{7>fCft7=q<_pgHF@>Iki$o1e^ z9hC2F40#ZGd_?>>5afCWW4Bph%ShfJ|9w7iZPUwuXLBo7Mey=ys(|~;+8ph76IDKM zNA`#B+2R`kWKF&}ll_Cx&NQ_MTiUhQKB8?A*;Pgug5UA{WwIk9%;m8)yJ1c-f}fYE0tR2mGqzYSUqO-7nXg$hLaI8(|N)*H>6Hm zJoE{#IqLnM?n`mCsJP3C|20x<6z#MZpC`?dF4foqa2u+BGt0ih|KDFxSMlKAJn*0H zzdZ3@PdGdN^KnnzH~a2K@A|0X-{Xth@Ds|`fpvGjAQ|5RzL(4$N7h8*oA$6LEdh*= zu6D8fs+14JeFiTdk;WS$?79}p_9M#72>6ag*;>L&t{2$U(tlM1?eDRU2tU;V@|aj^ z0flM-O^>~^T0W78I*1d6aDY%qd}E48S&3J{s|`ggrl6KLY`TyJ_k3>DsZ@^R>RxEQZu@aa@4{WSS!I*EHU4VSV^)mzS1qu zZAq$j;2T_I>vw=M4ed-yQ)uZ`t)L2YlM5an>0!ces@E-`U!`{5fdWRAiae)Y%ge4b z6xblR9>5)h-GK#V5`99?rl1Tfbb4I21`54e5rfjSVe&2y^A^a=6JFviXF2Ck=Ue`j zpll7t6xTNNXEB(*2>Vj)PA$MyKvYCqg2Q#u*B&A-hMlbaXW0h({p<~?0GG^r*3o12YCD!bmuV7j7qESvz@s7<04{<{b%WdEs6*yKZ`wPsA z*&y+{FZ=)e6^EGd8C+t@gykLRE5cf~Zo%Rw2@7NyuxZdeip(clU4|T8(gJn1EgoZr zy$e+7*FN4h_|@)#FV4$To|3c`@^Z(Lq}X4tS)8PWI|R zgA)N0(9iiCFt*lIRD96f)^Y@b=z;4e4msD4_kg4?plWL_4l@aLNinEE4}QCuiySYI zUX%SfCZpk_-3z@3&9 zK;cRxywBgtE)AF&fIR?q3tf*mwo()>Hi|r$pi$USfxj+eW)Q7#NE%y?3_#X^%g8mD z7X-fs>KGB;;N>ehD_AhfBq%a50wML0)U-&dZBq7UkjdhVyE+RMo;Wn%Ko;4AN01Gz z8gZP9kQ5Bhh-d=M6uOC(Era5LRgrQ;LyJZzhP+30lZ|A8-eBnocwLy|uhg0`KPV9! zbN979nEffM%R;kg&_W7YP)UhUj!4u(N-`N`vVl>EM3&KHn82-)EUToxu#S|RKR=GV zt#r;TA1?pjy|ZD&+=hexoht4~;En|DNZ^hH{%J_ygJ&25^S25D^F@4C*$|k=kUd!d zA>Taw#d8xiN)(Le*;@p|c$c8Ov+CSg95JZAAsk(m|>wK$R8fA>bQ$O5c@H@nBTE?Un+r zcU3!5NAj|oaz;9~Lka*KUBG;AZV_!T4E3LKz2hHK&~+q%nKEg_^}NP-v9}XYSJ@KZ(bG=}Gufm)M?ME3C|)FBzDoVhr6}iPlB3cEA}$<`A_?5pOFi?$gF&E4=Tlu9%tWO5KIlym zAk%!fs-kWuOU`#1U5}txDZy5!sO;=zpeWR)gkn%K1YBYpRis7JuG9WK5Ou@+dTOo^ z1S4Ru-@r67+m>%^ZAeay5w9M1FCd2y6|yopHMX|t($A0h@}Q??7JZ6mydO+sL22~F zHY%h1|6}fHslfm4{M?bi9SPi#z#R#E(-P>e;B)hTlXLUGxdR)f2L!zo zBa^qP#QER*K4TFRPdr$M=-a}>oi^QsW8F~7vvL9^U92sN4c;~Ot(H`oFBQUA>h^vb zRI@rslposTzek|pg<_WiG!PtWVB|t3vDdJVCn#{;3ekDShp=Bc+R!0-hY26Dc;@-t z66~RuIZwN&Wm;MIxUB#19Sz)bkv{VkoHOZF`m`D5v!;Y?_}(YQ=)YX&OaT`M9R{SN zd(d^C)W0d!yf4x9hflFLBePB~WlGqAvp0@o(&gNZl?`H|&}Fc1u(98*$ReN_`2W7YHg^ z0=i#V{5_+pw{X1_Ad}#evVHT!7e~n|uM*MxPzv);@y5vcO}R2s=l^kIe!JrS{QbWe z|H!zH?`ggJ@5UU$2mfS$(!Z090weNHdNN}~bi4vFAD5r9o*~uwkHFdaD@|P5*`JY& zr=a${U@?Gl^3h=4)UBXr?@zB~q|@4$vdht|*ET-O&Ef!u!gx;~+$#`vJ+S!_2;@5W)Ns6WEXnm!r` z5%b-j%IgO+8}lC>3oNgf9^KAQshvb3c9QbS((mU)2p+&<;cd1&e=XgcU%v;iIi`F4 zq(8HkNLM9UE&i*d@GGg&Y`%E5bUcK&TH$6zMp}@fji&yfoAaP%+x0^?KO#0Yq|M!T z5ah7Z@-l$h-X=p5Bi3Z0wJ8NK<^NsVpV=#K93^7gO9_XX&>xbLTl!9bp^!7+f?==*xwXKximl49%uotf$|I|i-8YAj+#|%;x;4P}(HF*0 z3@qv(Y>6`TO2h?&_16AgHiBurbVIe7)~Z5KYWY!&9-mX-+(sZp1b8}d*HBcG!qOF; z&kEr;GWyY-*>6Oe<2N^{*%Aml@3er<3VDU2NMzd_Cth4ka~UTtp(aP*yjE2}E=ky& zsHFe}=$+p4C=+s$NX-P?N#82uW?9plVk7ubge4L0E-eE@+)H}FuP%Q|`>Tpkpw&p# z6`#S2gl;~JXv;>>`GG~wQ=c06GUjbTMQ)=CE3u~RPvW%^k-;dZDmjxNK8zvr?y(sC z6O?C0`tEEaX2$CD7lrc%A8sKATl8!V--v~u0`#B?wBei{}FjrY8 z%ABASZCKaBVS~Wq_8p=CL(I?^G-K2=)KeEvsFCX{K1Ju$*VE)AwM!!11m{7=OijvE zwQJTvTV+hwqLq5O9#Ek*b^E%aeTOJC>r0 z>|!Ds1w%IGBJZ)7ubwTI=zMvD1aryDN#jtiAOO z5QO#}C*IGf({}_z7!=Y_%x<2a#Lgp2Ly^d}Xl+)IiI>>=V5JMsxcQ zmv7+bcO5RblHyBGe#a#oy4|Ywt{XUVNm^3IY9mjpRs=t4EijUlPbwef>LU3duAbX) z^}GsB_FM3*zv-W66XPoGO)p3MR1|6Tey433S4sgdzn;5xy8Cf+F`M;xFf(LuAe1u=TYMWaE4iae0aYL-|Ku70gLw zbO#X}mqWz^SKVdcRxbJy`j#)QF8L180-y|gdnO0&^+X9krx2W+0v_>BemaH3klGR@ z`4BRi%L9FGKqK8V$gLegbXBpw&(x8jRDH$gbm6(dS7X50fofZf8%4v>q=*7_A z8x~NFHCY#c+w(RYKjIe zZ~xFIUvfGfI{~CWTP5=)teu!`!UTL}LrFiHmp&rUtiG|MeRvPDOz!R-${wfem!-Gj zGT0{E$#)~uiUgB4w+B-#l#&uN4jGFmZ>Hp+>_Qq!Y2%19aHyx}`iYC6r6?@#oqogJ z?ReGj#U034^d%TKq`b$lD7NJex9`1?**&ynmvf^d3-MtX9r_17N2^(u(}DQ^zcuDt6%Rf6;13_DzW?VF7fpD5{4ehNPxn21@0<4=x%$!mxA zw%_;&sb{w!_3W16&n{^4nJqhp4)sh${#TlUoTfG~>6c0qJ9M%Ylh2p?i*nm`B9rW% zPMrp9xb4F5{`XNS<(4hTBsR1e51{b+({^szbgXMCIyXD>ok^4XGf1R$KzaT%NbRK{ z07X9+CwXQ!=iADPe^t_u4jw!rc~)`Hfs|YMotOL5os4|Ie>dxFsq7@3JqY zm*gzX?eEHM+|Iy+k+XVT?d{T;PTM@S>FlrK<*n=b0ebvY=65Ddt_C9v@*1)0N%?8x z)jItsF3JMFrf8$47P;(pGk)T}k{rR&$sr_gOvHrT1y$3Pb_~2MaPpFuFoNtKmyzzuQ3Xg+K#6Hrl){5lBqC`% z)1j{Kqn}eU-C^eH0F4^37i26ijC>_q+DE4 z-=T((%9Cl;iS%4t4u%=T3y#?;@g=<1HHFo8Hg^(!BPN@I5Lvv;lVT01^f#~+k89t# z7&S_dE8RS^M?sA$`z2&FB`+2YC;2S`@@a9`krtK=*W!t^cx>6b2$vdOHx*g6QuHDG zDFJn3h>;(WOD3!MvNrw4U6l~P!$|)*xw>-0zxQ^*l zQ}G7mfdyl#e>f@SmFU%Kd`GT78Ajv;VEuy5@bDQer5sv1RaO+-Ir`yLg2;SQVT1-x zYe}Z(c1`A%HWaqhlaIBrZ+{DfEbNmD_4Hv~TN$ox#Ef+?zF=gm3qx&|BNM8l5?q*~0-?u;3km5AYElK=d7f!Uq8j^{^1XrOJWLTwit}zGjWHg!Hjz4~eR20-NRcn>- z`_1V3VkJ-fAKaM14W~RI z`Bsq=Rj%jcQCt+~&wq^E4s;Q^?<_Jm=Q=+GrRt)b$r*Olp43A7OlSWF-Y!Oad(u)g#g`(`TxF% z(>v~z3X)7A%~Kk;AD3{*=KQCUED9BEQrA#?({>uyHNCj0p=%eN%JqU@B2^A<#Xz#B zu2pbUmuyj#67>>pv8Z|LPzB|ELXs_R5Z8``P*lLr#D|+gm9C12`ndVXnaX{j*Py-) zUw3%&Qk~*EGiLCkq^YQuu0Zf1-y3n-SyDL4Ck_uby_b?dMnMoLopF}95U1W_)zKXS^8mS{efgg@8X>unp zd&6t>H#kdUDux^IUmVxm#RmyoPh)|=s^!aNT;YUxrfnkZW9PTS9 zrBwuzn3%mVsc{)VHm93d3RDFeHA5>Rc*v2K82(sZDY3=~c^EumQOR4(_Pv~PtN1{d zUfK0W=<(#teDrwu+!mb7hC5oFp|5&;?R2hxwF?w^WG@Y!X}!^Xh|;f;HD#W$?JS&! zlqti<1lVQ!_B+>mT8GwuexnY<^1yUE591D&cQ+v|EyS{0$Afn|;F z?W6+?jxjqk+>mWOFwmW$%^wZ#O_Qm$4^{KghE1$}J>F!kKKrU|V%H<+`s~b`=z4z} zl9J+oz#!Qmkfdg9`6g_=g=y+m-^G66ZkOw zMQ%ek)*rU)6jqXef`>0-2~ycvy~bB<*LNX~AHXPK-G?SZ-{WM3#h1iveTTBk$Gkr= zi5y7sT#ESoI- z&a8}?T+lrQ_CVhN#=%5}5MVzU@J3zVq523o2!Jm^?;1n2PMELBl3PJmpTMQ8SxwLw zNj8oL*eb*J2bVwNX2?i{RfR<4uybIP;4a3Cs?ny{>aOpg&yQv1n4wjxncZ*fveal= zXA(%pj($@cYZ2HWwlZF2uV`-i(E?E{qQv*Oi){gZ&#Y+}aB4rNeNHwfE(W z7g6R_=xy5OVWmZ4ef!*HEeQZoNZ<@uXkix;(gZP5VFEay*{ysZJ9 zCynN=(Vf*C>Zu-KWsZT(K9te}o^)W;`+Dcv^=$T3IrAdao7Ko$s&dX#zqs2@yq=e9 z40t#MLk52$vI4)587G5Er-{|D#F@pNh#u>()H9<#cLW6PN|D7-qx1jW75~0s!oqQj z?>>xQ{(=6idy_(H|MO85QoDKDht@pOn%TABT;6Ng;udBMZQgpm?LJbU{gWqDmHq z2zr=IFhb8e+^_&n6US*rwvAM!e6IpY^;_s)e=M3i)cnZv&)0{d$*>*0CQrZT4e;}a z_IY?pCan8Ip5X^&hL79yqu-1f{=ft~-=ZFL@5Bh4;ljeEAGnG6?X95L><%bZFt-EB zcsrmd<8))ooYybGW|_tM_Z;>=MpoZWVliQC+gVo|0Ys#17wfY@#fVD%H4>>rjI}AyaAK`g=h-^(Ftcx zORABA`5k1k!?h^N;G`Nx9L|bxT@`J(&JviTuys<6NXLLX%LIqGz^=rf4RPEL#jvj+ zi)zT3yLjF-NkM}oD>(5|E+MkMU>?!Z?GyORtfgS4g=W9Pz`vtb0C1%K2J+N~NvGD`^m_=!vO39=It>)=sIY z81vYM@AJ4zLfo@PsTEv%xW1ZC z_H+sagipIB8_beMm@Uiocc{`bwOoUacPZ)Qb5*zsMy~f%xDreTP9=;UNdx9HiWCv# z5?nV3kp+@stwthOv=9k9aj~`vT!Zw_RGhVt_-3Xvc>!IreUCq!Y#TxrJ)7n&@R~g` ze*<6T9Z6gRB-L2)AhNujzy~Y200h(mKNgWxD8VGc@3g?%QYRBzdLY||_Z#jMKVz0H zSvicrux|L)7=8vH(-*g@U*tgZ=@vdR<}j?)rcfdhP9h&52Eln$A0EsXRk$i@NHxC2 z^dhg2y`NfLIlbyBJp_h$qkx{H7$Ju%60^5bCN!<-2Fg&$hLCBhSnhQFVi+{sHc(Bp zyCFyKO5p%`Mg3KUsGDX>n=zE}`V^Tlerimc8bjA?D;OR3F)H>}q30QIH@vEN70t6` z%uq{)j6csMYqNL`x&7*plhb0vwZ5&KjM=Yp&gPDu1@VsfN+wTrCL?Ro)pMKh>A<;@ zxokJQEyw^OUy}>ODh;>CwViA8om;M+TRXVn^W51JR5;u1DZl;`T#OQ}&lhdEwH>+r z+XpY5MVchK488biZu1WOGWc1?waN0{eGQYN~ zHGjNqYJP8T?s7&z=>yx2vvnhtNaO(eAKXe>jhtL|-$2(ox0Sfgg+}Sf|S+3(uuH!3oCcnO$;sv@p^LuuYXg43rt>0@zi%+he z{X`sCgX<2%b#?V@m$XK*$P{h2G7DddH^jAxD5!o*FOGKuC$9?1mqyam4t|*g7|;;+ zoXZ{SrC<25{K0*|_hWpoUf!2aA45a)JC2E4PKIURXe&fuk6y5V=fWEa^L6mRR&Z3i zA{IHyr=kvaRopz%YUK#jT0IqCz{Qu}a45h1?A43e{8#58PN^lgdA+n%bWVglc=Xc1 z#iP2DMRZ^Rb^*s0kR?N=)(&i-;3?#>!PD*eb6ZGw98-Z`%qwka(Qsc}tJE6$wC!Ng z@mrantt36t6@EBm27rig6?8=B4%XZ9Pv5$1gY9t(6Hd)dLdL7UJ&EAJNd8n z{>r2Km@Xaz`&-`xPxQ^^uf>&(Md*&R)B?1!E0e#GlvJ zWpn$p@+VZYsPHJ$c{Dr+iR5sNo!hmR=F<6g#9>e`NViycrrGEYRz@jDYJ(ZvyA6>p zXc!8UZ+RPOk;vPgLb|8xbC=qwwOv_Z)WGj17N=A@;hF&+B8q+0fr?%GSgqaEN?Eq- zSE@y`b34inez=*Yg3@mOJGW&MNtdN=+IY2h6RkwNun+9)y?WsSDaW?suhiFL&uR#p zf=U@~&rJa~tXsBipMFwr#IBj4PK7?x)(4N)#spufR8C)2Utj;j`e*7xZgoCu_(|L1 z#W5P549P%fbBFuwk3@^xW2u9;tArrmX28S&GtnrF)R&J;KsO+}^znuDb$ zpFeB3RA20bqhCIGAai7LfXJ{M$ce{2>$u07X9$#LpV8F8$H+NIW`&;>enKw`9$Oqc z5KWB(W*-u9o&li9yO@J*;=HHZ6j{K+pWutK|# zX#$H-a!jI!V91ZYiy*@YQ8>+^IzTrXgvD%eGho)C6wua^R};_>j&pFA<>$d>$5d-R zLrR`!Gm76*z$RrLG!~OQGBRP-^XiRO(o{-{shYN!3?{LJbV1B73L^yETDMC7Expka zfSgo0{bYjR<4MK1x0sMl1l$9@Bod=9RP3A;oWfyK@|GYLrk{k6OQV|6zIC&3llL4; zK~jn)vhQKs7Ilp0aci#te+ogy*Q{Z@mCm)Q+p0#(y_uDlT6A2F>`3dIL z0@@unwzZLFV8VGQy^%!LbuKEL37ic2EA(DXU`vLONqZ(^%tQ_)D%V78q-&Pspkm%v z!r+NU=iyG2(NVe^y0w6s*-vwm$vV;_qzw~pE!~Y#3qgFPk=hZsVF1e}&PDqc8pT=a zm@R(}ssD7XFkpFR3qgg5_=s0&f>`-v@0lr!V6ebh7EARV!nJ4%LI*}UQHn7-jWAD& z(^hE-`KF0#Sh>?g5qWWEbpJ<~C-WFIC%8A6CxF9o1;G=gDBDr+Y~eVC%)QxnF>Z@H ze&C%gg^Xdk(M2YV;>N;csqH(2l_~@XF9)zFeWYW0g}H`{ z%%M?lH5|b{syPG@I-xC_BBR}I0RDtuUglfy1mZZC%w5^l7`Ez;r`!qTP18K$#1S+n zZ!6MlQN^F}Id>N|qXhH%7S3xo<96lxi7(fdvq_)@PF%bz-K4}4XO zJbyS|%4|QF_l-yk9W;An7#_&3!Z0lAc;2?7;v;Dp%Vu3)#Qi?4({n^TQcSXRG)*}>Zil_+LE8gqbU zaQ%sj{N@+z&|3I*85peaFLW{EgkZ4%?X33{JXw1GSVXo~OOsT@s2tc9*){*0I#6I5D*@*M|}|vsS>= zvgM4ndz5?u+(5BV4a_@DcUi8k|Co1^1_Z0s)rS&@*^y0#GrRvGFas~1h4Jq z*%l1YTkXQ!NGFdMNnFt|pc+_#e=hRHt#<|o#yL{We|oEH;)XZk)Ns~9Us z!ufHir8xyiJrHAsy6Lx|cm~iJMOQ*5)O^_ok^wcY?AzZ6KIS@F^No;LC%rSR_#D7( zZDWc$$*n7?{$wL1fct=%vRofDFeFe~-x-7DE9d`k#e)a$|F09jm@sDCo_nv~Gx4r* zV}>ijx9#|!xogun4C3=0!nwg_n7xsRbNgCH7Op7&)yIR54rz*pXN1hZ?A6kQ^h0Na3hz_Q8wa?`z#O=#UiW+S+= z8zHTr{NgCpvlQTpkXS@^_9BjUbIA?i%2tGwX86g|V5ho>M-XC*s8OyibLBF%qFhbB z@`VK8I))Gp50}*ED<7bRnJdTfT2Ny-Xfm~;mtI-&ILt>phVaJy#j`$=xOI;=@ zuZcLoMM%GIM_R&elG(XiM{v>72_fQqXV^RtWFm;C1~rS z3B=FZg9pAgJMLS^=+K#>6Bt8!nM1HC5*)mTmpFpEmHLS&Z(ny18cuEV?Q}A{(>L9X z;eD&4#msPXbU`dN2)kfT%vW~-@sjiVRm#f_6H{Ne-qejiAjw%VtB)?8)qMc=_usVJ z09*uz)j6lETW7uopis~f)*r``w=LUr7sjl*y~*rYKDN9OW}W7TWBNHb2u?KWSK!Wd#)-d6T1SXVX^w>x zV`z}tf7i?d-9XxIyliztCxWau@KFt)>2_3WuY=TTuckIA!+;|#5XuFRPJznGQ<>sk z7(Tsgc3Mv6?{m(7{y+YBVV7OqZFZMrMx5t9XP>jr zeta9iRu=r0LVO4~^qFwE#f3T$Zt1r9?xAnLJQzSha#g*hV61%mdnoq|Wys3@#So>4 zQV4g|?(kY(A*GUQ1?=t`A0mMn$ZFc=m$z&axu3BgJeU(hnHPt$JBBj&|D(uNhF{9< z{PKyKf;oVJyt1oy{fri}XL&FO2nsr|!{DI|unLS88!+evbM~~J$-BenPT>(_<^3w! zv;K#_4{rkx8u&xfgT`uALuy~Cgz|#0DFrPrGKv=xDkFg7i5d~J6<8RNb_Udm zQ)UTee&X?T6CSY(@sn`k4g#rA1|imH37A~%(L^|*fOaP5o6-9%na5_$Lv2PP-Lq%x z8~`*=Tq7|5On6~>pl3b-?{SAPGA}Go&MpLB5c7R zV8P$c{|H05E3=V@!pYolTAm)tzRv(SpW?q5kA2z_%%8%oaZguCIv2c?GjEU|@-B8r z&Kwzj`ISp&Uqd4lRnc>3$OkFt!J%27zXyYxlWEkeltTOvZ2)_jV3tSBkN_Q#l~4Jg zpj0r7Un1Pzu2&|Jj>F?IB5*M2{N3DJv+0e@;JP<~f~gO4av(xi!Gc4h3;R4hCg?A* z=u5wTtUXBC2s8sc2_X3DDTNwhVY?J0%b(}(Lcfif<+@)=k%RVh&jyTTgGQm!h9sJK zJHhy&VR`>>?xB~n)i z|0OI#KogQi`XTuI1D_Gf=1Aij4nR;JJePx~yoBt)uYUu%*&w2!D;diUD8@8UfY^NCp7=XjG4C zoOc9o1~tR6tE*M^Oxz}#C_uyYvKj-!IG=N%st~QiX;hZCy%`1{ohQ`r39KC><2kS< z4N4GT!|laqXo3!GsH^C8Pj7paWlG6O%$g8~NQOQFX8%5pZ=^&JTsAqV`5Z?#xC!1@ zkZ+Vv;3PW0d9Tpf?#urGR9*^zzb5wp2h-ra4cEpbjLsBrL9XhAspcNy-R67k%8paQ ze|U%CWW6>`_(U+d5@39S;z1LH4@z%%;4yZDQB5~RsF3i+_6# zI-}3*{_N~N{H|*`qtCtXjBVRB*7JTKVy%mOCd&jQHeMbAZzk;MmyS7~eb9pj)MWyA zHxCl6lm9*jd~^0|;IC~I#e$>!@|NQxyI%19sjdWY5`be7oOkM_;g7cB7by&^GnPBw zRqR#b8sMEYl-Wre2py@EvbavvE%L&}4__L}JTv6EHZm>w+c3uE*)@7|@Vx=2FSBF- z6-%@t2S5Udzv&Sq{A>{(n3NIR)eWi8}ZGH{_1lqvvl9XJZOD{`AjGVT{9VUS{D05a@`Z+IrG>$@ zh`?w>egiZN;A_0wKy(D_OFV?2yXqBaa+ajKue2ld@8=2L#5_c2iWb#CcebmBWtNr1Q8Hj&ia85$vofWtcd_SmfBte z8t|Agc3{c^1{R)k%G>oxkyD+7N zkthIjjRHn0_{02M4CJP*(`VJgpg=Z)4b%zOba-xm^~hS`YBgtEM&+#d48+E zoxzWkERe`Ifwp(#ZYFf;=##8Rh3gJuOY`f^el9?24=jUV2*OH$EYAWxP*{@$qgn!3 z8qEU3H9&NLtU#Z`CkJ~ufq!xJFmxq77CH&F6$cChRl8WSI1;HVK;8gT8W}!|1(H-^ z;7tNtq;g4-9O(W3TXpfeYd*f_$1{I8TCR%%@goDwuA8Wat7E@z=L_#UK4SYh40 zO9CYJUx^hK?TM>$M-WceBJp%@VB=6WQTQgtmF@}ixZZ@DNlmst1;&kmil`x@d=~pz zr;-BW(HM($tuFMF*zmNu7dAi`@z~tO+6$7bSr36W*;dO|I5q?;d!PmQ=4%S#v$98n zN@Q(3CmNB;Z5ldBi$3#eHC#%XCzFne^x<>Rlu*69@C^|Cp3L=TGpw?AC}A6GM6IGN zfJ+&oF}T39sr~e|7g{VzvkSA(=bb&1%|d%J!FqbM))L);Z*W61il*Ql`#ZxJeTxY; zrb+zG{yl$ty1zZ1)}oo+2x^sEL~a7dNdhtj1SmdqR1Wnrt$3G>eG6G8p&V6R18?y0 zq0WoI18dBgJdcVV(PfQ@HOf+_o!JQ z-D{AU!&)LibuQ6Y@!II($l@aF<4BGVm8XNYZMk)^s#8{vR{&z2JwbLKN%P^a?p+XH zst=Q=C2%d6EKe7{3aYHmxNA`|Q3rJ3CO3xv;B>z!QrHKcjw3H-8$|!Uq;Ne35bpV| zS(Y*b5N*7`n20lxwN75h>DLKbI>>b(67OzJCQuvQa zyRjiF6AC=ff*bIzrO90~^708*e7;DQqFitAxyQtOy6{`R#ayM+dEi8&*IrOE5|F`r z3%2mfE{qe9w1$w(iy2HS6U=QV;am?CuEPKx?Ws45Nrxa_q7unfZV1*wO8;~UDLia{ z|HTW(93`(~AT5(bL$6;*++q7@)XkxOITlon0r0q9M`h5nI}yeC*oO1cIwniB=v~Rh zsluXK}3SR*wn=?X5l4l0;sA4jg&<&-}uc8H9oJ=(W$`IJ) z-gGB^Iywk6NZ?@y5Ja<(9N&_CxNt4HU)rr^_J(h$|k4)m( zLDuS#Cc%|SJlW369iGfKio}32XbtQ8PbZHrZnNStV)fCYNGV`Jv_uS8b%TZ=yndPw z>5V0P$if#rZZMEyS(1s^U6=tH-j?}Y<^*EIRSHL$;sHvspbpuH0_hLhDqY1VrUNX3 zG#+M{4V>gA`}M+fS~ulSOY3GuVEDSV*3H`|OK}9t?&~v%?}*HpjgnV*Os0BOYZOJi zESL*XDnN*MQf5`E1v6V-lop(7Y^s9$yc?_%uox6p(N>toi!sS828=Awws5kY(u=Wt zt(BCA*4o|14y%UDkQyX7;GV)%^s~C>26OzC3JxH}kF^P`)j+4=bh14{PWrKwx7Xq| zU^NuBdeV7t;PCoZ?24pXjs|F)pkea0RqpXI z2}(hC0I3Brv-BAW1&~F&mS5<~5nmJCpu#9E2QD#7N+T=9`s-y`76>wP3&_M4if2TV zz=JJuCD$_Os2;QgelsU(qcJW4M}%5ALrRXBOvm0K^PQLZb^&?SKwk+f)AU_Ca0nVv zNI|%NY8+}9dRP!x49s#zv5nbe^es6=vMYOssFdIZWIn?XC3Jy?=s#*}7@|Ia=@`^D zX|+p0A>0F1QIn0-zOi!dvxY)F#=6NOXQ@+(LzZe7IL<1uX!DN7Si|dSzmq~6r)!1P z4;Zg#x8nt5ISZ}H3Mj|_2-<2p!wO}aH0)$Q?7&*qF)D^`-`bIvdLZ^jkYgM;i^_AG z`q%`&O2cAVm*$&=q2pZ&TwYZKFk5_m1Xli3hcKxa;eA6A>-xQgo2Jx-GP81z^N~Vx zu1Vjg>@Y?2(c_l^s2~T|8t&aKC8<*!^1&4~QG%#ss`xGN@bKr#)e>#+h&Jt0Y=ANC z`=}^N(@+7q%|egozGH|;=kmS!+;ENO73ieD_OpIT0xe>3(}DB>nXn>lxOCju%v6nP z3G$F@v4`=gL){BTGGR?w=FbYqc@}ysC(%P?S;(u!@@^Q{{9ffw338z>!AEY}N<&rC zwt%`zISKf70&Ax-@xqO?6S7IO6G|Q-WPgA4%*g(?MLpytfLQf?U6kAgHJl>SFlmEo znzpzb_{Jj&vFi&+ZidZ&rs{xQfk>X8_ABMYu&JmYxp|zfVF8Aba3Q=6saEdrv?_F~8_#rC?J+Ts z5AtX54Ox^nlMCPGog=DLCXo-_qB_#3u~vO*wvua!rb-p(rYZ03s9K8n93gz95Y5N9 z0y3$AiA1eUr0|P%)saFok*|}ICx-N}@$k-cgFeMaBtkAN9!NWZTx@N@hmf zmH3p5?D>e0v(M}RHgxd&pQldt|B2(a)y??rsRt(hpZMj=pML}jY+FaEbN>4Lmj6^2 zsv9?D*V1py1zfWv`k}-|!1KQR7ln~sr!M9{x(L$}?!pE07R+m$cT3}fTWd^7SSl-G ztA2+zwE?}i9-zdfNLxo3MpzE47?dSvS-4vs zeGMXj-|YbA6^3!xkM2^LC>&Q?!Hkt`5}vvjZr2NMZPJj~>O0COxbXY#r+Vz3s>>7P z8@><_$&8WuGy^sheC+2-WD=Zq44G#%GOflBTu2k7JS|BLh>gh_os5v#0>M@BnI3@R z&5=ahv`c3oVwmB5*|yM;ERYX}H$>aXg}y1i4tTQ%g?06W?h;6g$o7W=2 z&9cY}c!nByeH?q@K?oRbtMP7WTIE$)=*(-n)%wqh;WYQhB9DKk z7%5!ip);)Qjqv@yQ3JvPFxEu{7i!uVu`{RTZy<*ItG{Q48$adQTk7_g+U>=Bp%{+S za8=;W`M1}|ot|WZdNVe6cV7h;p;ql#1tmzrS(}c=+GgKN|6L@Tfn8H+Q%H&^hkViy zd;)jY&E8x*8wFN-8S;pSA4x|Nn>;&;(5H}f2Ra(FB{T+fxf)W&X~ePTV-LLv3_H-Y zH3K1;W;8`vc$?HODm#(;vla(N(Uk2%zt=x+#9A$MtbQLU&`m68ZZh+IGkpoL&-FJ-&v<1 zeM>o2yJI@f6Y;J5v?@?;-JP0|z+Bto^FlCFWlHe{zhUG_t)}}VVw~(V;&XT38Epdy zl%z$PZI*X+S2X20p8VtXX(KI4tEne9A<=fH`#vz+lt#=4GU||fXTnEu^&KBZ^$)^@ z0uJA6;)z(>cghUN-75Mw`<&`Y@F{g%i3R!AdDS0M)e8_;m($pHWjFf`FIRJ5`P-=C z_@X^}6}PZ#ZFPiIe-G0k2tB)%kH9c$5dl2gBdl#u0ZDzuu7u=uw^@5lZwK0SwfDjK zcCFTMT60XDzZ1>j8dBZfeA^$R&G$e34{G!E-_}%W^A*X1U(ntw^$_-Mz2G#Q$O9km zEUBZcV&nO?-4lu*N{vaG&wZ&oHT|oqT`FyF*)F9Aj|i@l`If53ax~Rr6djSX@3~tE z+0JA0nie#WL^rSL`}p4v8YueXb0pW10hZ;&pgi0x5v%MlcimkigqZ9ex4Gg1E@PEl z((|D{(@T-V!^iyo_e#6)OfZP0e23tEpj$QBM9C32!(el)yCXdNmRoG5b|ijA)sSWcXvnHj1pzGY7QAe@Cxy^VcEPEI>G0MB?+q&!RB&$|Iey>sP5WB*Is|k zwweEV=DZnur~kX@^QP^e`sY(8Pgy{y3>+p1N{$zT&(yip=G2`gg2@7=>>N0U zrz!;wdT%@f!Kg#7MD z>0sCe6Jo6Fn5QUQK|*$^6$BXZ7YKwvtT5UjXo%B;6nX5%I8gksL=YoR!eH*5-+_1` ziha}tij^nc?XN5m@7;gU!PMk86QiP!shBF<2Q^WWW zuj^v)F-iD?y-DB_Z7_NuLqsIA1z=xNGziB^6+rx>{AwQS6TGLK(c?W= z`UtXtagB0-lsLx_68v$K@^Nnf*3XI2*WV%MedkK=+oNx89qsP{n1phKXGkdg2`r|b z{iCnHO(+wH4W`iIN-@Q{VeJ{uAQZj(#&#UMviG1f*1InVgknX073OeL_9>nNxpHR# zJn;c$Q3O1pzQSgfuwomRM%>D62JvA4fla_87fzp6(Z?l%j_o#W$8ca(4EMi)aO2_r z=h^f9xuMJv1Sbyx;Ucrk7lV95zJ=#>-K=k{NXH00f)O3u-z}gDY@>8MIGUJuQVMRi zVK`?J0x$NFF%AR9hi()wIlIzrk1>S}zY>)@!mV&QBwB%-a7xE9Zlw>9 z&mfbtdsPgK8-e$9w992$3OJ^jAWj_7&g_})j$eGDzMfyf#GfuaD|*0Y=x$i;x-kkk zbmCxMgeK=vgdf=`8*11>`Ay;qsx)`L%|QW({CrRc3Sxq(AtG}WkTkp>WQa+1%{Jwi zV`OsyM?g1JV+(>7W2tqqfy21+=>x{-z=C?dXmXY!p{fq_T?J_;iLl8?*Jip?I~@j& zj&wCRHrzJCmDjdM2oO2~##r3C9@i|#0k6a9${5kARjIAKB$L?Ao!#q5oKg|Ksr_YS{wSzbZZV+AA|Utt zR{V7mQG8qQ9l>Fo1SHW80tY>V4}6G7I+7QK>DqN0LvjCg%va|bL{kvNMjNXjQ?kSQu|CE+l3hW2=iH zu9n!@y<{73e6+^EV{jS5mVq}p+rlZP9j6C$K0sH1d>N;Iy9W*-!yo09inhYgA^ToD zeZG-jiZR`gy(0?PdV#?4{OPghPvGwtd#@Ds0m=!uOmbu5&NFx%SNh++viFD|RAX`e4=}cy zvaK?rUEQT#V%5PF>*IgX;spEF!o%)s5Gfe~|VhjyBqp+$js}dWZt>6v6qAo2UyT z45tx@4a5q%v(zZ50`E?9KdQ}1fEtJfYR8R*P#Bom1RW!R3zfpb@l~p0;7BLNorXt2 z3pVdUE#Vv2z7QJ_Uqx3kcxsa-uI8z98Jir06f+(`Qgi66=a+ev4OUit@nQ3*~@tav+fw_pI0JcsFVIR0O zBl`B5mS4<+*(hw(s0Q;84W@Ca3+=XU;G7;#G)ARJ3hBZM9mb2T7{LN*a$yKzPtaTNIH{F7Z*0G?Rrfu4=z|MAPO{s{gb+9D!Sm6AS`{6Ovlz*cJ}OW-=UF%{UZmr zLj;rZE#PmC{vda-c$Z?p2=k*<^NDa$jlaJi&I55nHab7t@f$}G0GzhaqMQVJ5luZ2l5xvM z(%tPP+bW!~6-l;g;GGmu)(B!@EndQmk3f))>+mw;&0l#BJ>ZimtDwaSub3${%*;jJ z+)x0rTj&AhA?arruQRzIKU-TygvyGuAA9AQu@|-~V7RfvK>j?qfAr0x)y_OXo~>f? z9s!qWY-TP%5TU~NG4mxkNdo7exzCMUPzJ228#%P%>`8RZ3a0UHCCO$Fvrzn2wG=2X z6<0wFBOpszLkV#;A78i)lvt)5M0xj9NSQzTYRQwMIu?kgaHru0Ap8N%1W;ONp;bid zs+plk)~0rzmJG7mdH3-h?pi%9`!&%F0G4u&dTsg1fa@W zNs5>dFYyt-zc80V2ES>ApkAF^=br(@72l`_cat#0Dzt3`bXSaJ&QvQghrxrEk&6qO znTRm;`vm~qA(pnC_f=82uPsbf9xJrsD%v*~;T#G$pk~3UP%)yqDDqbXAg9nsTmU3y z^35;58NA|9F<})1`q*$}aHwS?xd7>2ic0v~?S%%6aXr)* zmB(lV7rfk|4l_}3zCBP3j?U`59YeW8ETo(o%0c_~0a_CT^xC&I%NF$hpI-M!-8CP~ zTr&MHr>&XtzfRs98aHvl_=~XfKXMh1{>(QEQ00V{W!4ZaetDD4yxNRTklU68o#b@| zydlIU90)u_snljT>ad-^bfEK+PESb+gr?dq%x5^3bb#WC|IeihQ0;^kZ|8WUUw$ue zaIWPZ1G54?d_WO~1@FP2G}26htiymjEFUYl~_KG4VoJ` zmL**h!wy7O6~OLJh#^~zlZ1uYx)#PUDATae0JCMM3^JfWgNZDe4$PI%%(c_?jlCdR zwCn=~sL_x}>Mq`u0U91VlOoo=)#!KZ$a6g{TJ8V^4;(KpoZex3SNLucs^@BUOlm?Y zWrTii-O}qA{|qVTCZDOK)DdS6`%bHfVf^ua=U zoFUw&xv0`S#5G~-%uN-@tHSB4bO|X-deTC`+(p_9x@pNQhJQ|w(G3{#JeZQp5s=*x z@UtFIlUf(bb7cqmrSOm{u3q_t;5Mw~lpy|e0Xa-UEnBA=&RDE)(Acy~N`6?(i~ts} zh!kI6&H633-C3A@U{?T_a$O^%czMJ!`*0q!3Tv|>$T_Cg)mTX>S4a~SPvF0nM~yU8 zaTSW_=O;W1Hra3i>03g}dRPn#R66^;U_7j2NAXu+oYCH$qX*%`gX}JQk)TU^>Xaos z5G}`c9B^R396R`41*&@-erlz5k$VtRt0Iy8w2^MD-7QL_Q~`-;LXY+E8!Cv%CB1a) zJHX%uR3P+7-#NMf7?;vG5S1l!sl-hcDDLw}s+H#AzEso2P>N1PbQhIXtbm+5p+|Zc zQ-x7@7M_$qF6Ki&L?i73bZynw7jIK^2(&h+-9Aj0xnf#8D0$n950aqX_f zS|WX*S0+1~$Rl0wzflrjNvf|bcK)h;1qk(u^mkr|F=?kF^@FJBUjadNSXV&)rO@)8 zciiZN86KQ_FKsv7FU!;{?1i0U=nq8-tnsGV1a>Kb9C^=22ZGO1*p z=>i(Dq<}<=*CHpPi&dcIsU-7b`<)}`^kJSA7k&98)nt@N8`!ibMS9JbE$v-@UFcVPH(wz z`pw~8g$t)YhOPx36XMM$?(tF*s0t02_kN0x@M@z}TxWkST0&GnQX=?Q*ezZ@@Y=|M zPvKi}dCN;k_5qg)v+)*5lfC>96SP^0mm!>-DvVGalRn#eWZWSG0i4 zAIO{F&7MFh4%z;yRgUNwPa>5a0M3L^LQ)d>v*&l>xn%OP+urx$49}^x;N8b_3&=2X z937nG5mF{F_c$z~o^k+uDE|{)-Swavkrtj*-HmDX2V32V8vev~GwoxP;# z;X;`g;Y)*57-2xL#OMeHx+eT!c!$+?QwDv>xR1$ zc@4%;pWSn)5K=$GN%$uS0D*fxnk>B=l$ZV5d=&GUn}hQp?N;Z?&I4q4g(h+|f8xrE zdqxi)zOr{exj0!4h2o2^%L>>$`w@P2`t)bVcRHiJJ)=KAF?#d_To1i^P2>T)lG~56 zst2@jWVB~Dw4SQ9(cL;L7qUm5BOT{KxGbKd8l~ql_Tm-?&WFes=8R?E9((Di+ln&W z<~uOU~rW4WYw?CiCaeWM1ljZzu~zDDuY!`6+5A{(wfvU7lP9 zFYi4CxqB!BmwHJ>d!&S>6#7!PUzVWZya?~ZohrvzX75mTC%hGfyN5FGm8Jna_Hn#i zJoPLR;wlZU)b{!@Hs{+xiCePE^!_EM_fB}$CE;7Tyk#}~>GXExeQAGfIrby&n9ZmVJ>h45~+L+GIQyMM4_AaE!A&w)I2#nAw0-m$n9O2~dNb*a@J@1CcH+e{E#v~>9 zfEFw3;qM3^Khz*L1pg_EY77G>M@gCu;KrTshKMEFF7ltm%G>|Zd<4_DBMYxSI!gx5 zfPEu?P*vWKG82TjDuIeVrUOQz0;~guX4#p>2k;WX05Jn|uz1>}g<_q)xLYbLY`C5y zhrHl~>#o}PY$0Q*I$cl*X@eYnuymDMBQc0Rm~X@6ZYIy)emXr?$T^95rkkDiIHnm# zMooO9Tqoh~NXw*-Q^epQKNcZe6QLXV9E`NVM^a8pnIfkFLj{MF!2avU7{k;Mzz8 z9&w2@InI$-FO#x@^{ny|uSY6x@&UzhZ9ML1Wf(U#l0cd!c-Kb2p}SuNSvW#qV`N#N)EOM z2}Kb`Kmb;Md+ueGNCQ!O`?p+rJu}k3`@$zLtNd%jTh2iaaYG3mNh3DA{o|3n$Bg(f zCm+V3mLTg*-LLG#VZS(~7X@mj+ zgY$(_?>)#u_Az89vYr;8o0Tj~kYPxAfoB{EQYzIL9L|h|K}j7;^M49rtwB;ygs}!@ z`2rBhVu{{knyiM0S#UZqE5Wm(9{j5jdkEGmC*6S{1ceY0|-N``<0})89laltnaXn z%*C%)IKq!d=n5Vj#c=$@mCV~xo@I_(km!>l5+s9-&JB%}qb9$n5(+pdkjLtLcI?^D zJ~-!+*%|wI|LC#zNr*rsAGdLE|7RbZyt4Pi*xqyaSPLa$TutZy1mln7D5}_-=4C&L z6IsX)9}VTs^62d_hoTQS)*-`D3tY|0^+K_C6t|Nf*}7vW`z$4GC#i)49Z0a?EH(OW zSL{eyK1dJm@g#@09EMC_XwMN8sEuF=_>@s^m!E%)7!t99%)KJ341c;6{LHa`*`aKo zFAC!K^N(ZV%O#vT448hnBT@VvF1SP-fe*hpMIp;{p@45!BU~jYYYZJ`v{h9x2m}&m zZKaJtkTncv$Yse_GHGBr|fhU6K8w7okZV2}g0>^N7fm!0XS~y8c(z(+?a0GD(`N^a1 zI!c0#AUO(&z~CunLiQaV;`A9XK;`;D*#zVXT-RpoD&7zZta=eA;HVJqQW8Tr{}^WU zXqHZL%m`^P*$WB>KIa7Fd;J%uJO_a+LSRW+H~mmi6J=R26l8a)L^#5&&j=dge4em2zdh z6DryNQv^@LPCCvL;@RTdC4hwOy63Z%zs+Lw6EBz=#feQzrm%U z17%InL|Iy4Btda?+B6#=jCN-p0fhh=tw!B)LDwR^|F5b0Ufs3vnVA_EXZ-Qh|2p-) zDW^k!HtBCBJu+d*_&3LYtL}Tb4Fv#eh3?ue9>2j}^Cpggms(ultIYJw0&1`m{qW&D zr&UHmWsf!ul!s%-kE?g3x05{oP47!yhrW{D^LDMEWJ903qG!Do(GI*q_DiTWfuxfC zi=o`};!im8%0Xl!!ocTV>^U^t_Yv%+C5L3#0IEgW4is~8@Wk-$UMM+rZCFpCbA;KI z;m5Mi0#|} zTAoe;Xob+iNvhYhBS}<>O4D3aijd$=#U!!f4FzD0g&vT^iX{R|EUhMnp|5ypz6C1t zwXhRWT(^TmEPu3&CPzd8;*lFb9 z^-L@PO$I;4cQxD?R@(V>7@mC|o(w zry{vKzem!DSczLYVx$D+GZm+E8{l);8c)^nIV+7fZ>D_}QF`#11)#Ep)?_$r{g;|$ z(&!xeXyO`HS_f?kAJ-`7*J`+iS`XkG2^Ri(0bp#Q<(cKo!xWIU%2uaCX&f{dz4c{% zn>nf{;Z?+&tx9~enE8fO^$5BFauEaKVVjdWURWm5oftSuEE91Wd1O65C;)XWw5<1Q zJThh(w&}AHo>com1G88Ms&~qt?oByvMx{5adl)j3$VxE*pmi7*$S6#{1YD_x>%__! z2BQF*IUHOoY)<%Tx*qZiJ0*FCW_vU1!3A)VO0KSwmtori8So#q#X$Ztqa^;q{+o+9 ziRi$QM5M7BwszP(!Ctg!V9#XYy8QK!$`o(bg{&fq!&)OCXEMs}BoX*?*W=u!Z`-hQ zRCCHWGo`Q$d&hq>MVw9gW(wXtJ|0tH(be!+Acu+f#mxoa)Pcjq*$=o~CB}M*aJbCgo(`AL0`mO@c6&C>pmAb23zSB1q54R^$0EAuWu3m|W zFgH~&!7O$&L*$I%o_zCVE-dmmjVd>q64oh(8k1b_3SOZmRs@UCVS$|^>Fn{l$3|Bs z54~?|;${wDNY%bvY^8JB|9aaBWI{DEVnG~da&L8E-$=|gv0r>HGak{$Gk#MF*r@{;sd3kg)dQ?(?ZH%OL|1E zZu&&_d|4LNx?w5m6&?jk;p+t;3Wk-?sF)ki4S+E`tjY)a?qB z#ny%?_p&8KNc&61p;IPlSh4vsgdE^B^2l;ODF9F~bmw-?aaSTFc{Rb`T4JL+9{47q zO=d{)#Ns6^#f*43^Nk1lyRzYP@oIUEs^h5+9$SwakG3A8t9$!)kNF~A!Xg=<{4c5j zKi8OzVogAond{>C+rtBc(0bcxMEUY&e>wLKQ!9&?LJD4Uz^aXOHjl#9!da+C!lzGKv_&dVd40s3Z_6ww$h-?sSHKbE=mQ1vD5uor=7wnM<=n3hdn*vrQB_K0wKRDX0(v=K%c9IvatQBX| zkOuB1ff*gc(FI<+8#&EZgwO;rf@U}-vizG|PbREHdOh&xxN~dJEBqA&H)U!8u7{9A z+^0wJd3))TkB}Gr!s!CS8;~i|yR+o8>h_j2BxSuDi^Ig9D!}6~bXSH`YL+-~%VzK# z-VIn~cv-tiJhj*(pCMp_P%gJ1;_{3fs`N{vBSGpn7vRGex@%jxQ#D9sRh-qc)M<*f zLW0fVozIKIr4XXpvlNxxjG(%+GQT+S^*V5-8AK|hYFCTbitmP2}hJ$zVoN#>lgvICaF?n?s@dbhLy=R8q>Ct|1-?))0sWbm~T?yiAD z)Ka_<7dQeMcAH{;Fh@dWEa^Zi8%*=S;Ij_9#ghLmVrt4%D{_-%0R(=q+I{vIV;(f} z6t_+)z~?X&$-4k4gZu1g9@NwRx+eqYXuTH(pM{g{`)V2Cb4%0X^(ezqgRi*0x~NUS z4BAuIbs)yjF=sgQ(*KbCqh{VSuoG|wK8A4-7Q`8}qeGsk&-Zx`DTvQ9Vh!z|*Fh8l zj-V}yAszdo8wy}uGp4~0)Cv&v`i{9pLnJC5v*XOfBV1_e&Ko&h$aNZ+p_XQhTgKD} zKUOb;^Sdb4j6AMAy9+q++xd(0yFhJ1F{K@!rL-x=vl}kkpVG(5342Nb?xaQU`!M{T zN&JE4IUczEtW!YBRdoOmvny4Am+u9F>iPm4K|@Q`=@blUw2J+?7t50$x2l)dN%zbU zSRS`;mm5eRSlo$czU35-{4dJc)9BCiJD!J?TVFuBC1{-8JB~HZ!Gy8+5`&Q!B8%>% zcLp&lG3Lq$cmW!o30(^aDH*)PzkRBmxJpYVW!jsQrwJTkVrZFk*bRlDQF! z$K(weC}Iuo*T{RYA1M(K3mJ&Y<}HkvMM5-bpa=sBY9un^UkZh6q!`94&+JEPB42o7 z?$H7gS3xus+?8N!rUW)(tQOmh^&GsC10sqKEKZAR<|!z*`{)N-DA$n+b>KZv1AFMc zkXVUWqzLOpcUr_2s^aLeW88Z#k3bDsK6eKOu~U`x0vKTQqaIl^Ndu)fpc?aBp`Ao|A*U98jKwYg z1QJUs!Zkkc6G$2g;tok;;S`Wm3vVEX1uXLhLd=Q(!Z4vIK=)%~FCtAOx)m1NqeGc( zh?td*wM3|DSe9OnN%7f#Gwo%-!^j^7ly_Z!Uj~^&e~0goJa0=XZ{^On1Ac{7tEWt;733G zX%m9kDDi@}inL(IO>uRv)JE+IookNffP9ti>@v{} zZal{imD2Yy*U^vWNQflf9P%5ZZK)2V=$>ciEOyAKiDYCtq`^i1Y=RYM_HC|vAH)GX z&45A#LyZZNaTVP{OfxiniJH%>*E^ zEJB#*_1>vbqiT9Iwv@99b!XQPpF2n)^t(=7%ztz-*IVz22C-XM^iPE5lw+ncy^Axv z6Meo2f?s^`lgrz8{^Hc|skbhkJ5q|?LB6Itrm~a!->Y-z`D=ky0brd(%Bcr3=z1*q z!gVnKQ$!MTTlEGufo$p+;sok+1o_q-QwQTLnAbS(mc|9Oo>{F(z?lToa87vLGwm1b zFoMwdd?(NsaP}1CKUYV|eCsID$8Rh&gngSewS#8g#OngG_gB zB0K2BUxzny%wg-FBoVqBeuV4dh$EC^?6LX_pB@-~XW#J4pIppuuWxYbFTS;7xcBVv zGv|i;-=e=qP9dq)!QtLxBYQr)^g{pe;g9Mczmx7-2aqLQgCJ$rU!PAU49xOUC9T0{NVHT zoH=94wEu0|#HkY}e-QfXNoOa%IbrYkB)5EMkbMMSx{$n{HD7cGHa>l4wWqR-hJv4&9Svmj^m|740_b(AX?>Q39B=f_uC zKLyp1X&Y#)cMU5;;{vj`FCofz*Jtrr3WN z&WPl03ZlR**gIQWR+b4bX&pELh!OIx1I~)CxQ{r2P_pR2Lm|PEy{-@kg`SYqXTM|$ zmB{Z@4P_+5YYE`jK*9ujdJ-lgb_-&(VJ@mnnYgkR#o?IgEAFF=-Zn5T5lS%?_7H`= z39~Z`T}%|t|HVWpmGr3+Q5dS#@DPqybSO6|R+Tn?AW^gnp!jvc8_=*$Sl+3=Nfz&x zRqCzf(CexKO)Lo80D=&7YxbLkP7q{MPF!qgm(=R~6m+)K;sO;&Cpb`cwS^OHodbsl zUX8Xp;dHV+vT@*W2eRT;B++8P0QgJ!b_=H&ZCtE!u@)0Ye4*A901OMuR0|(69^`nYpLU+^#AUmDLmWyft?QTk~YcD9$m@WA!kNhbrU+AubdF3F^s-gtEi~ zWtN={DEG!kH4%=J-hWJ$DH%O`FTmr+k75hQ5KPRPW)VTfujkJSfSE;RL2-Jay;3T> zsMVI2Wac!Xn;_Pq?CGWHgN6j&k?iT_Hs@FYmE@ksUgbVQYvd|Oo`PtPQ6~i$uG0L) zzad%xEN$o!NvHSAQoK@>T+7-qm9j;6_Qu%WL!5O>QcH}z@eB~(YFd3i&h6+&J4biz zskqpJPJ4X;=(Jeu#fEu;4hEB@%Qy*Iv#lX%gJ2{P-a72BfVeRTF=xxmO5{9yc3<39e)iv!3!mH!za8t=^AF{>_5K)~!R%AT7fUmSyYuw(EL zJP%I`cD;C%k}v}=M7XuW>sGs%dMnwu`BH{JZ%@I^lThvZ#n}^b2ZWqc+|5pS;G&mL z#a~r?N8z=CL7YYzO1*vxRXjIeZ&0~q<_Ri{2}qfe9Zbx{8xiWy#WkUJaz zi9$o$*}#!pPzM0)n7jkKBdr`+PPntFXg9n4QBy2cAjXAsR&b5tG`;fthNF&jW^ z0?z>_$Nk>AHLFen!#y%_l@m1=tre}F#l&5{OtsHN`oJH;pZ35 z?itJ`^<3v^Tj~3EAmhA zTmW<`+elxayk%%30YjEHlIL@}qGQ-naK03@gjPIildvQtq7+jNP;)@Lu#%f&zA5zH zY%2gT#MH*Z$7q^wX~c}z>#aq53t|9Al1EzA){3@bTgld95y8~N&SG>{+FXJbu_C`2 zbGjoNp*am4jX`U{w;}I9biceM;8T*~C_7iEj^xSS zo=;;?ow=XMpy)mIu$I}qnj(v^_{G*m8J<9B76)#@D9#zRW}h8uYNQWhKIjLHn2RZ0hMN*Qn>z~V2SI0(<>k^OIhC0UKpoRw;7>yc2PC?=_3J(X*QOtMn)K(x_wJkFM#a*R8R1o!1+l)ka6fUQMH{!4~ zP|JS#fas_sf)#lfim+Oc2>8g5Y&96GClw9m3(3H^87=en(vrb_c^F@?t?=}sQQBE*8e1Ta#Zv2H1BW32b5@yXr_&sZ5!evC z{(z2yZG;@<5dR<|h&{tor_|uBWHZiE5*L;tW~h;c1{h9~n>yFV!8}@^AoKtuGpKH~ z*(4c}bT#z;pH}x=-8E-tzB}WU=}prXPFWuM$;7VlTkzpO&QC5{z;h(@$hIVF;T~1$ zc)SKg`)1{hg`^Y_nGxC-ASR@u;TV0k3NH{b(BdyVg}b7g@r^v zgiQoKb}@gdwD@?ED7#>1_{pHMa9oOZ78Q7E33qfJI+0NmgeBs-Rr^v2$)>yWuz z4G)>_m#7D~G@<{JHxh=5vx?O{?nse-X~C@>90Ey$N02JG7Jy~o3a|^6kQfq;Ca7)i)f&)(Sf zD7-D=E_MZ#tJ_eSMaPLJ+oAeJA2^C@fi{ELDK0sK7M{z~h6pHMV(k_77!scG348Sm zPZwa4MvJ`x$Rs9&-lWA#FWZ0?yaR7wRiW~l8;CDL4pQpG5=$PbxZ12*&OKSc3pVt~ z_Uqi$F5%cvd6nR~E7M!24kBfp@UTMeJI<#8UVWR=B8eiS@lN zIQt5Q*Ab>9PM>ep`O(d54*9y$nzIXs;dR`wwEFP!l$w$i&*$@k(Fva z(=k5qGEObgtX5oKuQ$qqTN^t_HkGrTD_2_LA~2@1i(Hw(1X;oA#UYvcNw}l(f2*x;n(lB} z?=HRGIKV0#;!6^e$&d(;$y+|SSoZWZn-NS;0=LC|E)#*?olctUQAG^bCiGja>JmBTKVp0w4 z!tNt6O;l+93O?d2Cd~!k?+_74Z%6HW_8)udWTzIOWrKr)AhDO{Ij_IY=<&VYJyywO zCy*Sl%8h<-TAAn!6hb9h_;qs?h@n(}MpIWz4DsY?EItOHP;UEB4k@IMvg=JRY;xL?$9bhCha>^6}u1 ze3eY0eXxgcBYi_~w#pvo-nC;FCH+K3@*{2+nRg9XnqO0^(~1ga#G<}yF|Wm>S30l+ zs@7O5Bp&GJ#K74dMkpxT_7O`2MHhb)MckEJko2yxFbrcbG(!JM6-ca9NkBmc*kz#~ z!+C?#$!n8^jt=ow)LGQ&;z&(#o)w5L$+M(O=a`c+m( zdLOtrs_`jxrIf4p^v&cgR*yL#R6r)dc2;t5?nHK8ROuc#q?e>*8DM}$=rL&(hhQ3o z`i7UISefcB1mJa%-n>05?n`CF zG`2+GX#&e@1(Db zTSWz$`Mthrlk3KPJKH$xZVY7jy>pj(-;^BP_|whLeP$2L zsFx3Y2*w{d*pGVzW*&TU@$7SO;3g=_{`ZFW9}&YTeVaRS;p1H+dp^1N@w*paK0S=; zFtncSxo{Sso34q~Jr=fPF28W%(y0S*;}ERHi|^!z-+yIf3l5yDpjyuAn~IU%u{F&j zCHOQ>hfOGUusp)pIrtZBbtE*pEwH-++wS~MDg`sB?JNy%BY-O!X9-Tw2bkg9@G`^HG*YGy@INS|w0-=XN(F0|)eON#h2Sx5twv`RMvjIjF zItE(7fn=G3$cb|u1`BxMz?*{#^WTw92l>P!(EhkS9&O>In1LJVuyuWNfK-==!is{v z(ImNvu@~h!uorxKP!Ll?us(bEP;@1khvEAruH;>PlR<`Ca&u&dj`kb|KGbK&cal+d z>poD!mtTDE`v8i{jP5uBXsA7$as0r!(PR6@4rayrszuOY z7~ata#|1lstC%ykZ5L3;Y#VYZ6LGe#FN7K2m0QF!9?AvC1DLj7_JFVfr!KMp_mUBq zeixbHU2)nFG1V41w5OK{ldqCHMlVpH-nyJQI^4UR9KwR!$suf9-nt7%ka7{z!iMMA zdH%V}FYUpxLxyO|v$Tb!7xpj%oRl0vK36l{jyR8B(>IAX|4(`I1K~mB2HO0PR(S90 z%@09>_C8KzN?q;U`Ye#7yXujl!!NP;Jjq}whDis{GTi2r5#9KWv-_Fe_>f{a69-CJ zCgoJ5jIo)rZ9__+xtdEdU66qti8!1TQ8mdfqs4L*Iq}gU(aI)sCKgc#a+jPF zD#EdE0`HiO`nVJUN9`CsE=go$e}jQDBnjeoBNi2(m6VNw=WKGUqbW!Xd|cvuV;Kwi z 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 a0 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

    s<`R`JfoqhxS?vJAAQPja;9+u}sRq?cI7 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

    gG*NZdDv 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̾#nXN?_lQgo{8oByK2aA6$hN8LmJhm{r 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 PG9J((<@x_#|NQ?4f#eN* diff --git a/assets/images/widgets/Banner.svg b/assets/images/widgets/Banner.svg index e4f8b66d7..27c390ff1 100644 --- a/assets/images/widgets/Banner.svg +++ b/assets/images/widgets/Banner.svg @@ -5,16 +5,6 @@ - - - - - - - - - - diff --git a/assets/images/widgets/Card.svg b/assets/images/widgets/Card.svg index b69099b84..62d2d4b8d 100644 --- a/assets/images/widgets/Card.svg +++ b/assets/images/widgets/Card.svg @@ -5,22 +5,6 @@ - - - - - - - - - - - - - - - - diff --git a/assets/images/widgets/Chip.svg b/assets/images/widgets/Chip.svg index cea4cbee4..a66547522 100644 --- a/assets/images/widgets/Chip.svg +++ b/assets/images/widgets/Chip.svg @@ -9,16 +9,6 @@ - - - - - - - - - - diff --git a/assets/images/widgets/Container.svg b/assets/images/widgets/Container.svg index be18043df..c1500829f 100644 --- a/assets/images/widgets/Container.svg +++ b/assets/images/widgets/Container.svg @@ -11,16 +11,6 @@ - - - - - - - - - - diff --git a/assets/images/widgets/FilterChip.svg b/assets/images/widgets/FilterChip.svg index 7a3f6fdd2..2c0214a26 100644 --- a/assets/images/widgets/FilterChip.svg +++ b/assets/images/widgets/FilterChip.svg @@ -11,16 +11,6 @@ - - - - - - - - - - diff --git a/assets/images/widgets/InputChip.svg b/assets/images/widgets/InputChip.svg index b739a7ae0..d50adf71c 100644 --- a/assets/images/widgets/InputChip.svg +++ b/assets/images/widgets/InputChip.svg @@ -13,16 +13,6 @@ - - - - - - - - - - diff --git a/assets/images/widgets/MaterialButton.svg b/assets/images/widgets/MaterialButton.svg index 7ace688c5..11b59f54b 100644 --- a/assets/images/widgets/MaterialButton.svg +++ b/assets/images/widgets/MaterialButton.svg @@ -5,16 +5,6 @@ - - - - - - - - - - diff --git a/assets/version.json b/assets/version.json index 231c882a0..0c311e970 100644 --- a/assets/version.json +++ b/assets/version.json @@ -1,3 +1,3 @@ { - "dbVersion": 4 + "dbVersion": 5 } \ No newline at end of file diff --git a/doc/development/architecture.md b/doc/development/architecture.md new file mode 100644 index 000000000..65c14cf2b --- /dev/null +++ b/doc/development/architecture.md @@ -0,0 +1,247 @@ +# FlutterUnit 架构设计文档 + +## 项目概述 + +FlutterUnit 是一个全平台的 Flutter 组件展示和学习应用,支持 Android、iOS、Web、Windows、macOS 和 Linux 平台。项目采用模块化架构,提供了 300+ Flutter 组件的详细展示、代码示例和交互演示。 + +## 技术栈 + +- **框架**: Flutter 3.35.1 +- **状态管理**: flutter_bloc (BLoC 模式) +- **路由管理**: go_router +- **数据库**: SQLite (本地数据存储) +- **网络请求**: dio +- **国际化**: flutter_localizations +- **UI组件**: 自研 TolyUI 组件库 + +## 整体架构 + +### 分层架构 + +``` +┌─────────────────────────────────────┐ +│ Presentation Layer │ ← UI层 (Views/Pages) +├─────────────────────────────────────┤ +│ Business Logic Layer │ ← 业务逻辑层 (BLoC) +├─────────────────────────────────────┤ +│ Repository Layer │ ← 仓储层 (Repository) +├─────────────────────────────────────┤ +│ Data Source Layer │ ← 数据源层 (Database/API) +└─────────────────────────────────────┘ +``` + +### 模块化设计 + +``` +FlutterUnit/ +├── modules/ +│ ├── basic_system/ # 基础系统模块 +│ │ ├── app/ # 应用核心配置 +│ │ ├── app_update/ # 应用更新 +│ │ ├── authentication/ # 用户认证 +│ │ ├── components/ # 通用组件 +│ │ ├── l10n/ # 国际化 +│ │ ├── storage/ # 数据存储 +│ │ ├── toly_ui/ # UI组件库 +│ │ └── utils/ # 工具类 +│ ├── widget_system/ # 组件系统模块 +│ │ ├── widget_module/ # 组件业务逻辑 +│ │ ├── widget_repository/ # 组件数据仓储 +│ │ └── widget_ui/ # 组件UI展示 +│ ├── knowledge_system/ # 知识系统模块 +│ │ ├── algorithm/ # 算法相关 +│ │ ├── artifact/ # 工件管理 +│ │ ├── awesome/ # 精选内容 +│ │ ├── layout/ # 布局相关 +│ │ └── note/ # 笔记功能 +│ ├── painting_system/ # 绘制系统模块 +│ │ └── draw_system/ # 自定义绘制 +│ └── tools_system/ # 工具系统模块 +│ └── treasure_tools/ # 实用工具集 +└── lib/ + ├── src/ + │ ├── navigation/ # 路由导航 + │ ├── l10n/ # 本地化 + │ └── starter/ # 应用启动 + └── main.dart +``` + +## 核心架构组件 + +### 1. 应用启动器 (FxApplication) + +```dart +class FxApplication with FxStarter { + @override + Widget get app => const AppBlocProvider(child: FlutterUnit3()); + + @override + AppStartRepository get repository => const FlutterUnitStartRepo(); +} +``` + +**职责**: +- 应用启动流程管理 +- 全局配置初始化 +- 错误处理和监控 + +### 2. 状态管理 (BLoC 模式) + +``` +Event → BLoC → State → UI + ↑ ↓ + └── User Interaction ┘ +``` + +**主要 BLoC**: +- `AppConfigBloc`: 应用配置管理 +- `WidgetsBloc`: 组件数据管理 +- `CategoryBloc`: 分类管理 +- `LikeWidgetBloc`: 收藏功能 + +### 3. 路由架构 + +```dart +GoRoute( + path: AppRoute.home.path, + routes: [ + if (kAppEnv.isDesktopUI) + ShellRoute( + builder: (_, __, Widget child) => AppDeskNavigation(content: child), + routes: body, + ), + if (!kAppEnv.isDesktopUI) ...body, + ], +) +``` + +**特点**: +- 支持桌面端和移动端不同导航 +- 声明式路由配置 +- 深度链接支持 + +### 4. 数据层架构 + +#### Repository 模式 + +```dart +abstract class WidgetRepository { + Future> loadWidgets(); + Future findWidget(int id); + Future> loadNodeByWidgetId(int widgetId); +} +``` + +**实现层**: +- `WidgetDbRepository`: 数据库实现 +- `MemoryWidgetRepository`: 内存缓存实现 + +#### 数据库设计 + +**核心表**: +- `widget`: Widget基本信息 +- `node`: 示例代码节点 +- `category`: Widget分类 + +详见: [数据表结构总览](../modules/widget_system/widget_repository/doc/tables_overview.md) + +## 平台适配 + +### 平台检测 + +```dart +class kAppEnv { + static bool get isWeb; + static bool get isDesktopUI; + static bool get isMobile; +} +``` + +### 响应式设计 + +- **移动端**: 底部导航 + 侧滑菜单 +- **桌面端**: 侧边栏导航 + 多窗口布局 +- **Web端**: 响应式布局适配 + +## 核心功能 + +### 1. 组件展示系统 + +- 300+ Flutter组件收录 +- 实时代码演示 +- 交互式组件体验 +- 组件关联跳转 + +### 2. 搜索与过滤 + +- 组件名称搜索 +- 星级过滤 +- 分类筛选 + +### 3. 收藏系统 + +- 自定义收藏集 +- 收藏集管理 +- 批量操作 + +### 4. 主题系统 + +- 明暗主题切换 +- 8种预设颜色主题 +- 6种字体选择 +- 自定义代码高亮 + +## 性能优化 + +### 1. 数据缓存 +- 内存缓存: 热点数据常驻内存 +- 数据库缓存: 本地SQLite存储 + +### 2. 懒加载 +- 路由懒加载: 按需加载页面 +- 组件懒加载: 滚动时动态加载 + +### 3. 构建优化 +- 代码分割: 模块化打包 +- 资源优化: 图片压缩、字体子集化 + +## 构建与部署 + +### 多平台构建 + +```bash +# Android +flutter build apk --target-platform --split-per-abi + +# iOS +flutter build ios + +# Web +flutter build web + +# Desktop +flutter build windows +flutter build macos +flutter build linux +``` + +### 发布渠道 + +- Android: APK 直接下载 +- iOS: App Store +- Web: 在线访问 +- Desktop: 可执行文件下载 + +## 开发规范 + +### 代码规范 +- 遵循 Dart 官方代码规范 +- 使用 `flutter_lints` 进行代码检查 + +### 模块规范 +- 每个模块独立的 `pubspec.yaml` +- 清晰的模块边界和依赖关系 + +### 测试规范 +- 单元测试覆盖核心业务逻辑 +- Widget测试验证UI行为 \ No newline at end of file diff --git a/lib/src/navigation/view/mobile/unit_navigation.dart b/lib/src/navigation/view/mobile/unit_navigation.dart index 702bca963..2873021dc 100644 --- a/lib/src/navigation/view/mobile/unit_navigation.dart +++ b/lib/src/navigation/view/mobile/unit_navigation.dart @@ -96,7 +96,7 @@ class _UnitPhoneNavigationState extends State { _controller.jumpToPage(index); _activeTab.value = AppTab.values[index]; if (index == 3) { - BlocProvider.of(context).add(const EventLoadLikeData()); + context.read().loadLikeData(); } } } diff --git a/lib/src/starter/fx_application.dart b/lib/src/starter/fx_application.dart index f66b52b39..b029751d0 100644 --- a/lib/src/starter/fx_application.dart +++ b/lib/src/starter/fx_application.dart @@ -24,12 +24,12 @@ class FxApplication with FxStarter { AppStartRepository get repository => const FlutterUnitStartRepo(); @override - void onLoaded(BuildContext context, int cost, AppConfig state) { + void onLoaded(BuildContext context, int cost, AppConfig state) async { debugPrint("App启动耗时:$cost ms"); context.read().init(state); context.initWidgetData(); if (!kAppEnv.isWeb) { - context.read().add(const EventLoadLikeData()); + context.read().loadLikeData(); context.read().add(const EventLoadCategory()); context.read().load(); } diff --git a/lib/src/starter/start_repository.dart b/lib/src/starter/start_repository.dart index 86aea38b0..e022bdf03 100644 --- a/lib/src/starter/start_repository.dart +++ b/lib/src/starter/start_repository.dart @@ -11,8 +11,9 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:storage/storage.dart'; import 'package:path/path.dart' as path; import 'package:utils/utils.dart'; - +import 'package:path/path.dart' as p; import 'bridge/unit_bridge.dart'; +import 'package:widget_module/widget_module.dart'; class FlutterUnitStartRepo implements AppStartRepository { const FlutterUnitStartRepo(); @@ -31,6 +32,8 @@ class FlutterUnitStartRepo implements AppStartRepository { registerHttpClient(); NoteEnv().attachBridge(UnitNoteBridge()); if (!kAppEnv.isWeb) await initDb(); + await initWidgetStatistics(); // 加载统计数据 + HttpUtil.instance.rebase(PathUnit.baseUrl); AppConfigPo po = await SpStorage().appConfig.read(); AppConfig state = AppConfig.fromPo(po); @@ -54,11 +57,19 @@ class FlutterUnitStartRepo implements AppStartRepository { if (!dir.existsSync()) { await dir.create(recursive: true); } - ByteData data = await rootBundle.load("assets/flutter.db"); - List bytes = - data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); - await File(dbPath).writeAsBytes(bytes, flush: true); - + { + ByteData data = await rootBundle.load("assets/flutter.db"); + List bytes = + data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); + await File(dbPath).writeAsBytes(bytes, flush: true); + } + { + ByteData data = await rootBundle.load("assets/article.db"); + List bytes = + data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); + await File(p.join(dir.path, 'article.db')) + .writeAsBytes(bytes, flush: true); + } print("=====flutter.db==== assets ======拷贝完成===="); } diff --git a/modules/basic_system/app/lib/view/data_manage/data_manage_page.dart b/modules/basic_system/app/lib/view/data_manage/data_manage_page.dart index a2a714dc3..a6a38d011 100644 --- a/modules/basic_system/app/lib/view/data_manage/data_manage_page.dart +++ b/modules/basic_system/app/lib/view/data_manage/data_manage_page.dart @@ -81,7 +81,7 @@ class DataManagePage extends StatelessWidget { await File(dbPath).writeAsBytes(bytes, flush: true); print("==== debug ===== assets ======拷贝完成===="); BlocProvider.of(context).add(const EventLoadCategory()); - BlocProvider.of(context).add(const EventLoadLikeData()); + context.read().loadLikeData(); Toast.toast(context, '重置成功!'); } @@ -116,7 +116,7 @@ class DataManagePage extends StatelessWidget { await repository.syncCategoryByData( result.data!.data, result.data!.likeData); BlocProvider.of(context).add(const EventLoadCategory()); - BlocProvider.of(context).add(const EventLoadLikeData()); + context.read().loadLikeData(); } else { // 说明还没有后台数据, // 这里防止有傻孩子没点备份,就点同步,哥哥好心,给备份一下。 diff --git a/modules/basic_system/l10n/lib/enum/language.dart b/modules/basic_system/l10n/lib/enum/language.dart index 2fbd17a56..7f969262d 100644 --- a/modules/basic_system/l10n/lib/enum/language.dart +++ b/modules/basic_system/l10n/lib/enum/language.dart @@ -1,19 +1,20 @@ import 'dart:ui'; enum Language { - zh_CN(locale: Locale('zh','CN'), label: '简体中文'), - en_US(locale: Locale('en','US'), label: 'English'), - ru_RU(locale: Locale('ru','RU'), label: 'Русский'), - fr_FR(locale: Locale('fr','FR'), label: 'Français'), - ko_KR(locale: Locale('ko','KR'), label: '한국어'), - de_DE(locale: Locale('de','DE'), label: 'Deutsch'), - ja_JP(locale: Locale('ja','JP'), label: '日本語'), - it_IT(locale: Locale('it','IT'), label: 'Italiano'), - pt_PT(locale: Locale('pt','PT'), label: 'Português'), - es_ES(locale: Locale('es','ES'), label: 'Español'), + zh_CN(locale: Locale('zh', 'CN'), label: '简体中文'), + en_US(locale: Locale('en', 'US'), label: 'English'), + // ru_RU(locale: Locale('ru','RU'), label: 'Русский'), + // fr_FR(locale: Locale('fr','FR'), label: 'Français'), + // ko_KR(locale: Locale('ko','KR'), label: '한국어'), + // de_DE(locale: Locale('de','DE'), label: 'Deutsch'), + // ja_JP(locale: Locale('ja','JP'), label: '日本語'), + // it_IT(locale: Locale('it','IT'), label: 'Italiano'), + // pt_PT(locale: Locale('pt','PT'), label: 'Português'), + // es_ES(locale: Locale('es','ES'), label: 'Español'), ; - String get code => '${locale.languageCode}-${locale.countryCode}'.toLowerCase(); + String get code => + '${locale.languageCode}-${locale.countryCode}'.toLowerCase(); final Locale locale; final String label; diff --git a/modules/basic_system/storage/lib/src/app_storage.dart b/modules/basic_system/storage/lib/src/app_storage.dart index 7e671a454..2a11dac82 100644 --- a/modules/basic_system/storage/lib/src/app_storage.dart +++ b/modules/basic_system/storage/lib/src/app_storage.dart @@ -1,11 +1,10 @@ - +import 'package:storage/src/db_storage/flutter/article_db_store.dart'; import 'package:storage/storage.dart'; import 'db_storage/flutter/flutter_db_store.dart'; import 'db_storage/flutter_unit/flutter_unit_db_store.dart'; class AppStorage { - AppStorage._(); static AppStorage? _instance; @@ -15,17 +14,21 @@ class AppStorage { final FlutterDbStore _flutterDb = FlutterDbStore(); final FlutterUnitDbStore _flutterUnitDb = FlutterUnitDbStore(); + final ArticleDbStore _articleDb = ArticleDbStore(); + FlutterDbStore get flutter => _flutterDb; + ArticleDbStore get article => _articleDb; FlutterUnitDbStore get flutterUnit => _flutterUnitDb; - Future init() async{ + Future init() async { await _flutterDb.open(); await _flutterUnitDb.open(); + await _articleDb.open(); } - void close() async{ + void close() async { await _flutterDb.close(); await _flutterUnitDb.close(); + await _articleDb.close(); } - } diff --git a/modules/basic_system/storage/lib/src/db_storage/flutter/article_db_store.dart b/modules/basic_system/storage/lib/src/db_storage/flutter/article_db_store.dart new file mode 100644 index 000000000..2bf579e54 --- /dev/null +++ b/modules/basic_system/storage/lib/src/db_storage/flutter/article_db_store.dart @@ -0,0 +1,27 @@ +import 'dart:async'; +import 'package:sqflite/sqflite.dart'; +import 'package:sqflite_common_ffi/sqflite_ffi.dart'; +import 'package:fx_dao/fx_dao.dart'; + +import 'package:widget_module/widget_module.dart'; +import 'package:artifact/artifact.dart'; + +class ArticleDbStore extends FxDb { + @override + String get dbname => 'article.db'; + + @override + int get version => 1; + + @override + Future onCreate(Database db, int version) async {} + + @override + Iterable<(int, MigrationOperation)> get migrations => []; + + @override + Iterable get tables => [ + ColumnizeDao(), + ArticleDao(), + ]; +} diff --git a/modules/basic_system/storage/lib/src/db_storage/flutter/flutter_db_store.dart b/modules/basic_system/storage/lib/src/db_storage/flutter/flutter_db_store.dart index e78b638c1..3386bd79c 100644 --- a/modules/basic_system/storage/lib/src/db_storage/flutter/flutter_db_store.dart +++ b/modules/basic_system/storage/lib/src/db_storage/flutter/flutter_db_store.dart @@ -4,7 +4,7 @@ import 'package:sqflite_common_ffi/sqflite_ffi.dart'; import 'package:fx_dao/fx_dao.dart'; import 'package:widget_module/widget_module.dart'; -import 'package:artifact/artifact.dart'; +import 'package:widget_repository/widget_repository.dart'; class FlutterDbStore extends FxDb { @override @@ -27,10 +27,9 @@ class FlutterDbStore extends FxDb { @override Iterable get tables => [ - ColumnizeDao(), - ArticleDao(), CategoryDao(), WidgetDao(), + WidgetStatisticsDao(), NodeDao(), LikeDao(), ]; diff --git a/modules/basic_system/toly_ui/lib/ti/panel.dart b/modules/basic_system/toly_ui/lib/ti/panel.dart index 2fc3bd777..cc6d0e2fb 100644 --- a/modules/basic_system/toly_ui/lib/ti/panel.dart +++ b/modules/basic_system/toly_ui/lib/ti/panel.dart @@ -1,21 +1,30 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; - class Panel extends StatelessWidget { final double radius; final Color? color; final Widget? child; final EdgeInsetsGeometry? margin; + final BoxConstraints? constraints; + final AlignmentGeometry? alignment; - const Panel({Key? key, this.radius = 5.0, this.color, this.child, this.margin=const EdgeInsets.all(10)}) : super(key: key); + const Panel( + {Key? key, + this.radius = 5.0, + this.color, + this.child, + this.margin = const EdgeInsets.all(10), + this.constraints, + this.alignment}) + : super(key: key); @override Widget build(BuildContext context) { - return Container( - alignment: Alignment.centerLeft, + alignment: alignment ?? Alignment.centerLeft, padding: margin, + constraints: constraints, decoration: BoxDecoration( color: color ?? const Color(0xffF6F8FA), borderRadius: BorderRadius.all(Radius.circular(radius))), @@ -23,5 +32,3 @@ class Panel extends StatelessWidget { ); } } - - diff --git a/modules/knowledge_system/artifact/lib/src/articles/data/repository/article_repository.dart b/modules/knowledge_system/artifact/lib/src/articles/data/repository/article_repository.dart index 094a7a982..8f27f1f85 100644 --- a/modules/knowledge_system/artifact/lib/src/articles/data/repository/article_repository.dart +++ b/modules/knowledge_system/artifact/lib/src/articles/data/repository/article_repository.dart @@ -1,16 +1,13 @@ - import 'package:storage/storage.dart'; import '../dao/article_dao.dart'; import '../exp.dart'; - - // 仓储: 提供数据 class ArticleRepository { const ArticleRepository(); - ArticleDao get dao => AppStorage().flutter(); + ArticleDao get dao => AppStorage().article(); // 从数据库加载资源 Future> queryByDb(ArticleFilter filter) async { diff --git a/modules/knowledge_system/artifact/lib/src/articles/data/repository/columnize_repository.dart b/modules/knowledge_system/artifact/lib/src/articles/data/repository/columnize_repository.dart index 60ac4d529..7b2b53c5d 100644 --- a/modules/knowledge_system/artifact/lib/src/articles/data/repository/columnize_repository.dart +++ b/modules/knowledge_system/artifact/lib/src/articles/data/repository/columnize_repository.dart @@ -1,15 +1,12 @@ - import 'package:storage/storage.dart'; import '../exp.dart'; // 仓储: 提供数据 class ColumnizeRepository { - const ColumnizeRepository(); - ColumnizeDao get dao => AppStorage().flutter(); - + ColumnizeDao get dao => AppStorage().article(); // 从数据库加载资源 Future> queryByDb({ @@ -22,6 +19,4 @@ class ColumnizeRepository { ); return caches; } - - } diff --git a/modules/knowledge_system/artifact/lib/src/articles/view/artifact_page.dart b/modules/knowledge_system/artifact/lib/src/articles/view/artifact_page.dart index 101e3bacc..1e7c65204 100644 --- a/modules/knowledge_system/artifact/lib/src/articles/view/artifact_page.dart +++ b/modules/knowledge_system/artifact/lib/src/articles/view/artifact_page.dart @@ -47,7 +47,7 @@ class _ArtifactPageState extends State @override void initState() { super.initState(); - controller = TabController(length: 4, vsync: this); + controller = TabController(length: 2, vsync: this); controller.addListener(_listen); data = List.generate(5, (index) => 'Init $index'); } @@ -70,8 +70,10 @@ class _ArtifactPageState extends State return MultiBlocProvider( providers: [ - BlocProvider(create: (_) => ColumnizeBloc(cRepository)..init()), - BlocProvider(create: (_) => ArticleBloc(aRepository)..init()), + BlocProvider( + create: (_) => ColumnizeBloc(cRepository)..init()), + BlocProvider( + create: (_) => ArticleBloc(aRepository)..init()), ], child: Scaffold( endDrawer: SortSettings(), @@ -92,7 +94,8 @@ class _ArtifactPageState extends State children: [ GestureDetector( onTap: () { - _launchURL('https://github.com/toly1994328/FlutterUnit/blob/master/packages/algorithm/lib/src/algorithm/sort/functions/${name}.dart'); + _launchURL( + 'https://github.com/toly1994328/FlutterUnit/blob/master/packages/algorithm/lib/src/algorithm/sort/functions/${name}.dart'); }, child: Text( '查看排序源码', @@ -109,8 +112,8 @@ class _ArtifactPageState extends State Expanded(child: SortPaper()), ], ), - BuildingPanel(), - BuildingPanel(), + // BuildingPanel(), + // BuildingPanel(), ], ), ), @@ -121,14 +124,12 @@ class _ArtifactPageState extends State _launchURL(String url) async { Uri uri = Uri.parse(url); if (await canLaunchUrl(Uri.parse(url))) { - await launchUrl(uri,mode: LaunchMode.externalApplication); + await launchUrl(uri, mode: LaunchMode.externalApplication); } else { debugPrint('Could not launch $url'); } } - - List _buildAppBar(BuildContext context, bool innerBoxIsScrolled) { // print('innerBoxIsScrolled:$innerBoxIsScrolled'); return [ @@ -203,8 +204,7 @@ class _ArtifactPageState extends State // ), bottom: TabBar( controller: controller, - tabs: - [ + tabs: [ Tab( // icon: Icon(Icons.account_balance_wallet_outlined), text: context.l10n.knowledgeTabToly, @@ -213,14 +213,14 @@ class _ArtifactPageState extends State // icon: Icon(Icons.account_balance_wallet_outlined), text: context.l10n.knowledgeTabAlgo, ), - Tab( - // icon: Icon(Icons.account_balance_wallet_outlined), - text:context.l10n.knowledgeTabLayout, - ), - Tab( - // icon: Icon(Icons.account_balance_wallet_outlined), - text:context.l10n.knowledgeTabPoint, - ), + // Tab( + // // icon: Icon(Icons.account_balance_wallet_outlined), + // text:context.l10n.knowledgeTabLayout, + // ), + // Tab( + // // icon: Icon(Icons.account_balance_wallet_outlined), + // text:context.l10n.knowledgeTabPoint, + // ), ], ), ), // ) diff --git a/modules/widget_system/widget_module/lib/blocs/action/widget_action.dart b/modules/widget_system/widget_module/lib/blocs/action/widget_action.dart index 422951199..09b814078 100644 --- a/modules/widget_system/widget_module/lib/blocs/action/widget_action.dart +++ b/modules/widget_system/widget_module/lib/blocs/action/widget_action.dart @@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart'; import 'package:app/app.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:widget_module/blocs/blocs.dart'; +import 'package:widget_ui/widget_ui.dart'; import '../../widget_module.dart'; @@ -16,6 +17,17 @@ extension WidgetContext on BuildContext { } void toggleLike(int widgetId) { - read().add(ToggleLikeWidgetEvent(id: widgetId)); + read().toggle(widgetId); + } + + void handleWidgetAction(WidgetAction value) { + switch (value) { + case JumpWidgetDetail(): + String? name = value.widgetName ?? value.model?.name; + push('${AppRoute.widgetDetail.url}$name', extra: value.model); + return; + case ToggleLikeWidget(): + toggleLike(value.widgetId); + } } } diff --git a/modules/widget_system/widget_module/lib/blocs/blocs.dart b/modules/widget_system/widget_module/lib/blocs/blocs.dart index 3844b6083..443306fb9 100644 --- a/modules/widget_system/widget_module/lib/blocs/blocs.dart +++ b/modules/widget_system/widget_module/lib/blocs/blocs.dart @@ -1,5 +1,4 @@ export 'category_bloc/category_bloc.dart'; export 'category_widget_bloc/category_widget_bloc.dart'; -export 'liked_widget_bloc/liked_widget_bloc.dart'; export 'widget_detail_bloc/widget_detail_bloc.dart'; -export 'widgets_bloc/widgets_bloc.dart'; \ No newline at end of file +export 'widgets_bloc/widgets_bloc.dart'; diff --git a/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_bloc.dart b/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_bloc.dart deleted file mode 100644 index 0ab2ef17f..000000000 --- a/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_bloc.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:equatable/equatable.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:widget_repository/widget_repository.dart'; - - - - -part 'liked_widget_event.dart'; -part 'liked_widget_state.dart'; - -/// create by 张风捷特烈 on 2020-04-07 -/// contact me by email 1981462002@qq.com -/// 说明: - -class LikeWidgetBloc extends Bloc { - final WidgetRepository repository; - - LikeWidgetBloc({required this.repository}):super(const LikeWidgetState(widgets: [])){ - on(_onEventLoadLikeData) ; - on(_onToggleLikeWidgetEvent) ; - } - - void _onEventLoadLikeData(EventLoadLikeData event, Emitter emit) async{ - final widgets = await repository.loadLikeWidgets(); - emit(LikeWidgetState(widgets: widgets)); - } - - void _onToggleLikeWidgetEvent(ToggleLikeWidgetEvent event, Emitter emit) async{ - await repository.toggleLike(event.id); - final widgets = await repository.loadLikeWidgets(); - emit(LikeWidgetState(widgets: widgets)); - } -} diff --git a/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_event.dart b/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_event.dart deleted file mode 100644 index f3e1d4873..000000000 --- a/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_event.dart +++ /dev/null @@ -1,33 +0,0 @@ -part of 'liked_widget_bloc.dart'; - -/// create by 张风捷特烈 on 2020-04-09 -/// contact me by email 1981462002@qq.com -/// 说明: - -abstract class LikeWidgetEvent extends Equatable { - const LikeWidgetEvent(); -} - -class EventLoadLikeData extends LikeWidgetEvent { - const EventLoadLikeData(); - - @override - List get props => []; -} - -class ToggleLikeWidgetEvent extends LikeWidgetEvent { - final int id; - - const ToggleLikeWidgetEvent({required this.id}); - - @override - // TODO: implement props - List get props => [id]; -} - -class LoadCollectEvent extends LikeWidgetEvent { - const LoadCollectEvent(); - - @override - List get props => []; -} diff --git a/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_state.dart b/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_state.dart deleted file mode 100644 index 34b57f14a..000000000 --- a/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_state.dart +++ /dev/null @@ -1,14 +0,0 @@ -part of 'liked_widget_bloc.dart'; - -/// create by 张风捷特烈 on 2020-04-09 -/// contact me by email 1981462002@qq.com -/// 说明: - -class LikeWidgetState extends Equatable { - final List widgets; - - const LikeWidgetState({required this.widgets}); - - @override - List get props => [widgets]; -} diff --git a/modules/widget_system/widget_module/lib/blocs/widget_detail_bloc/widget_detail_bloc.dart b/modules/widget_system/widget_module/lib/blocs/widget_detail_bloc/widget_detail_bloc.dart index be4d555d3..73ae25c0e 100644 --- a/modules/widget_system/widget_module/lib/blocs/widget_detail_bloc/widget_detail_bloc.dart +++ b/modules/widget_system/widget_module/lib/blocs/widget_detail_bloc/widget_detail_bloc.dart @@ -49,11 +49,7 @@ class WidgetDetailBloc extends Cubit { await nodeRepo.loadNode(widget.id, locale: locale); final List links = await widgetRepo.loadWidget(widget.links, locale); - if (nodes.isEmpty) { - emit(DetailEmpty()); - } else { - emit(DetailWithData(widgetModel: widget, nodes: nodes, links: links)); - } + emit(DetailWithData(widgetModel: widget, nodes: nodes, links: links)); } catch (e, s) { print("queryDetail=error===${e}=$s=="); emit(DetailFailed()); diff --git a/modules/widget_system/widget_module/lib/blocs/widget_detail_bloc/widget_detail_state.dart b/modules/widget_system/widget_module/lib/blocs/widget_detail_bloc/widget_detail_state.dart index d54e96638..31376c33c 100644 --- a/modules/widget_system/widget_module/lib/blocs/widget_detail_bloc/widget_detail_state.dart +++ b/modules/widget_system/widget_module/lib/blocs/widget_detail_bloc/widget_detail_state.dart @@ -45,6 +45,4 @@ class DetailWithData extends DetailState { class DetailLoading extends DetailState {} -class DetailEmpty extends DetailState {} - class DetailFailed extends DetailState {} diff --git a/modules/widget_system/widget_module/lib/blocs/widgets_bloc/widgets_bloc.dart b/modules/widget_system/widget_module/lib/blocs/widgets_bloc/widgets_bloc.dart index 3da35ffcc..8a809104f 100644 --- a/modules/widget_system/widget_module/lib/blocs/widgets_bloc/widgets_bloc.dart +++ b/modules/widget_system/widget_module/lib/blocs/widgets_bloc/widgets_bloc.dart @@ -1,9 +1,9 @@ import 'dart:async'; import 'dart:ui'; -import 'package:app/app.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:fx_platform_adapter/fx_platform_adapter.dart'; import 'package:widget_repository/widget_repository.dart'; part 'widgets_event.dart'; @@ -27,8 +27,9 @@ class WidgetsBloc extends Bloc { /// 切换页签,以 [family] 为过滤项 void _onEventTabTap(EventTabTap event, Emitter emit) async { // emit(const WidgetsLoading(operate: LoadOperate.load)); - int size = kIsDesk ? 1000 : 20; - WidgetFilter filter = WidgetFilter.family(event.family, pageSize: size,locale: event.locale); + int size = kAppEnv.isDesktop ? 1000 : 20; + WidgetFilter filter = + WidgetFilter.family(event.family, pageSize: size, locale: event.locale); try { final List widgets = await repository.searchWidgets(filter); emit(WidgetsLoaded( @@ -129,9 +130,7 @@ class WidgetsBloc extends Bloc { } void changeLocale(Locale locale) { - add(EventTabTap( - state.filter.family??WidgetFamily.stateless, - locale: '${locale.languageCode}-${locale.countryCode}'.toLowerCase() - )); + add(EventTabTap(state.filter.family ?? WidgetFamily.stateless, + locale: '${locale.languageCode}-${locale.countryCode}'.toLowerCase())); } } diff --git a/modules/widget_system/widget_module/lib/event/widget_statistics_event.dart b/modules/widget_system/widget_module/lib/event/widget_statistics_event.dart new file mode 100644 index 000000000..31830feb1 --- /dev/null +++ b/modules/widget_system/widget_module/lib/event/widget_statistics_event.dart @@ -0,0 +1,10 @@ +import 'package:flutter/material.dart'; +import 'package:storage/storage.dart'; +import 'package:widget_repository/widget_repository.dart'; + +/// 初始化统计数据 +Future initWidgetStatistics() async { + await WidgetStatisticsProvider().loadStatistics( + AppStorage().flutter(), + ); +} diff --git a/modules/widget_system/widget_module/lib/views/components/collected_tag.dart b/modules/widget_system/widget_module/lib/views/components/collected_tag.dart index 62a1d2da6..f39b3f82d 100644 --- a/modules/widget_system/widget_module/lib/views/components/collected_tag.dart +++ b/modules/widget_system/widget_module/lib/views/components/collected_tag.dart @@ -1,29 +1,29 @@ -import 'package:flutter/material.dart'; -import 'package:l10n/ext.dart'; -import 'package:wrapper/wrapper.dart'; - -class CollectedTag extends StatelessWidget { - const CollectedTag({super.key}); - - @override - Widget build(BuildContext context) { - bool isDark = Theme.of(context).brightness == Brightness.dark; - Color color = Theme.of(context).primaryColor; - String text = context.l10n.favorite; - return Wrapper.just( - radius: 10, - color: isDark ? const Color(0xff292A2D) : const Color(0xffF3F3F5), - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - child: Text( - text, - style: TextStyle(color: color, height: 1, fontSize: 10, shadows: [ - Shadow( - color: isDark ? Colors.black : Colors.white, - blurRadius: 2, - offset: const Offset(1, 1), - ) - ]), - ), - ); - } -} +// import 'package:flutter/material.dart'; +// import 'package:l10n/ext.dart'; +// import 'package:wrapper/wrapper.dart'; +// +// class CollectedTag extends StatelessWidget { +// const CollectedTag({super.key}); +// +// @override +// Widget build(BuildContext context) { +// bool isDark = Theme.of(context).brightness == Brightness.dark; +// Color color = Theme.of(context).primaryColor; +// String text = context.l10n.favorite; +// return Wrapper.just( +// radius: 10, +// color: isDark ? const Color(0xff292A2D) : const Color(0xffF3F3F5), +// padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), +// child: Text( +// text, +// style: TextStyle(color: color, height: 1, fontSize: 10, shadows: [ +// Shadow( +// color: isDark ? Colors.black : Colors.white, +// blurRadius: 2, +// offset: const Offset(1, 1), +// ) +// ]), +// ), +// ); +// } +// } diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/category_panel/desk_top_like_panel.dart b/modules/widget_system/widget_module/lib/views/desk_ui/category_panel/desk_top_like_panel.dart index ff2f7f1ae..2c1d06ac4 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/category_panel/desk_top_like_panel.dart +++ b/modules/widget_system/widget_module/lib/views/desk_ui/category_panel/desk_top_like_panel.dart @@ -1,10 +1,11 @@ import 'package:app/app.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:widget_module/blocs/action/widget_action.dart'; import 'package:widget_module/blocs/blocs.dart'; import 'package:widget_repository/widget_repository.dart'; - +import 'package:widget_ui/widget_ui.dart'; import '../../mobile/widget_detail/collect_widget_list_item.dart'; import '../../mobile/widget_detail/widget_detail_page.dart'; @@ -12,7 +13,7 @@ class DeskLikePage extends StatelessWidget { const DeskLikePage({Key? key}) : super(key: key); final SliverGridDelegate deskGridDelegate = - const SliverGridDelegateWithMaxCrossAxisExtent( + const SliverGridDelegateWithMaxCrossAxisExtent( maxCrossAxisExtent: 300, mainAxisSpacing: 15, mainAxisExtent: 80, @@ -21,36 +22,26 @@ class DeskLikePage extends StatelessWidget { @override Widget build(BuildContext context) { - - LikeWidgetBloc bloc = context.watch(); - LikeWidgetState state = bloc.state; + LikeWidgetBloc bloc = context.watch(); + List state = bloc.state; return GridView.builder( - itemCount: state.widgets.length, + itemCount: state.length, padding: EdgeInsets.all(20), - gridDelegate: deskGridDelegate, itemBuilder: (_, index) => GestureDetector( - onTap: () => _toDetailPage(context, state.widgets[index]), - child: CollectWidgetListItem( - data: state.widgets[index], - onDeleteItemClick: (model) => - _deleteCollect(context, model), - ))); - - return SizedBox.shrink(); - + gridDelegate: deskGridDelegate, + itemBuilder: (_, index) => GestureDetector( + onTap: () => _toDetailPage(context, state[index]), + child: CollectWidgetListItem( + data: state[index], + onDeleteItemClick: (model) => context.toggleLike(model.id), + ))); } - ShapeBorder get rRectBorder => const RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(10))); - - _deleteCollect(BuildContext context, WidgetModel model) => - BlocProvider.of(context).add(ToggleLikeWidgetEvent(id: model.id)); - _toDetailPage(BuildContext context, WidgetModel model) { // BlocProvider.of(context).add(FetchWidgetDetail(model)); - Navigator.push(context, SlidePageRoute(child: WidgetDetailPageScope(model: model))); + Navigator.push( + context, SlidePageRoute(child: WidgetDetailPageScope(model: model))); } - - -} \ No newline at end of file +} diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/like_tag.dart b/modules/widget_system/widget_module/lib/views/desk_ui/like_tag.dart deleted file mode 100644 index ad6b1249e..000000000 --- a/modules/widget_system/widget_module/lib/views/desk_ui/like_tag.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; - -import '../../blocs/blocs.dart'; -import '../../widget_module.dart'; -import '../components/collected_tag.dart'; - - -class LikeTag extends StatelessWidget { - final WidgetModel widget; - - const LikeTag({super.key, required this.widget}); - - @override - Widget build(BuildContext context) { - bool show = context.select( - (LikeWidgetBloc bloc) => bloc.state.widgets.contains(widget), - ); - if (show) { - return GestureDetector( - onTap: (){ - context.read().add(ToggleLikeWidgetEvent(id: widget.id)); - }, - child: Container( - width: 24, - height: 24, - decoration: BoxDecoration( - color: Colors.white.withValues(alpha: 0.3), - borderRadius: BorderRadius.only( - topLeft: Radius.circular(6), - bottomRight: Radius.circular(8), - ) - ), - child: Icon(Icons.star,color: Colors.white,size: 16,), - ), - ); - } - return const SizedBox(); - } -} diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_bar.dart b/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_bar.dart index 274a2bfaf..5fcdba687 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_bar.dart +++ b/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_bar.dart @@ -6,12 +6,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:toly_ui/toly_ui.dart'; import 'package:utils/utils.dart'; - +import 'package:widget_module/blocs/action/widget_action.dart'; +import 'package:widget_ui/widget_ui.dart'; import 'package:widget_module/blocs/blocs.dart'; import 'package:widget_repository/widget_repository.dart'; - class DeskSliverWidgetDetailBar extends StatelessWidget { final WidgetModel model; @@ -25,13 +25,16 @@ class DeskSliverWidgetDetailBar extends StatelessWidget { Widget build(BuildContext context) { bool isDark = Theme.of(context).brightness == Brightness.dark; Color? appBarColor = Theme.of(context).appBarTheme.backgroundColor; - Color? appBarTextColor = Theme.of(context).appBarTheme.titleTextStyle?.color; + Color? appBarTextColor = + Theme.of(context).appBarTheme.titleTextStyle?.color; return SliverAppBar( pinned: true, - backgroundColor: isDark? appBarColor:backgroundColor, - titleTextStyle: TextStyle(color: isDark?appBarTextColor:Color(0xff696969)), - iconTheme: IconThemeData(color: isDark?appBarTextColor:Color(0xff696969)), + backgroundColor: isDark ? appBarColor : backgroundColor, + titleTextStyle: + TextStyle(color: isDark ? appBarTextColor : Color(0xff696969)), + iconTheme: + IconThemeData(color: isDark ? appBarTextColor : Color(0xff696969)), expandedHeight: 120.0, scrolledUnderElevation: 0.5, flexibleSpace: DragToMoveWrapper( @@ -44,13 +47,16 @@ class DeskSliverWidgetDetailBar extends StatelessWidget { ), fixedSubtitle: Text( model.name, - style: TextStyle(color:isDark?appBarTextColor:Color(0xff696969), fontSize: 12), + style: TextStyle( + color: isDark ? appBarTextColor : Color(0xff696969), + fontSize: 12), ), title: Padding( padding: const EdgeInsets.only(bottom: 3), child: Text( model.nameCN, - style: TextStyle(color:isDark?appBarTextColor: textColor, fontSize: 16), + style: TextStyle( + color: isDark ? appBarTextColor : textColor, fontSize: 16), ), ), //伸展处布局 @@ -61,32 +67,25 @@ class DeskSliverWidgetDetailBar extends StatelessWidget { ), elevation: 0, actions: [ - - WindowButtons( - actions: [ - _buildToHome(context), - FeedbackWidget( - onPressed: () => _toggleLikeState(context), - child: BlocConsumer( - listener: _listenLikeStateChange, - builder: _buildByLikeState, - ), - ), - ], - ) + WindowButtons( + actions: [ + _buildToHome(context), + FeedbackWidget( + onPressed: () => context.toggleLike(model.id), + child: BlocConsumer>( + listener: _listenLikeStateChange, + builder: _buildByLikeState, + ), + ), + ], + ) ], ); } - void _toggleLikeState(BuildContext context) { - BlocProvider.of(context).add( - ToggleLikeWidgetEvent(id: model.id), - ); - } - // 监听 LikeWidgetBloc 伺机弹出 toast - void _listenLikeStateChange(BuildContext context, LikeWidgetState state) { - bool collected = state.widgets.contains(model); + void _listenLikeStateChange(BuildContext context, List state) { + bool collected = state.contains(model); String msg = collected ? "收藏【${model.name}】组件成功!" : "已取消【${model.name}】组件收藏!"; Toast.toast( @@ -103,8 +102,8 @@ class DeskSliverWidgetDetailBar extends StatelessWidget { } // 根据 [LikeWidgetState ] 构建图标 - Widget _buildByLikeState(BuildContext context, LikeWidgetState state) { - bool liked = state.widgets.contains(model); + Widget _buildByLikeState(BuildContext context, List state) { + bool liked = state.contains(model); return SizedBox( width: 30, height: 30, @@ -117,10 +116,13 @@ class DeskSliverWidgetDetailBar extends StatelessWidget { Widget _buildToHome(BuildContext context) => GestureDetector( onLongPress: () => Scaffold.of(context).openEndDrawer(), - child:const SizedBox( + child: const SizedBox( width: 30, height: 30, - child: Icon(Icons.home,size: 20,), + child: Icon( + Icons.home, + size: 20, + ), ), onTap: () => Navigator.of(context).pop()); } diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_page.dart b/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_page.dart index c6ed47264..cfa080ac1 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_page.dart +++ b/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_page.dart @@ -10,6 +10,7 @@ import 'package:widget_repository/widget_repository.dart'; import '../../mobile/mobile_ui.dart'; import '../../mobile/widget_detail/category_end_drawer.dart'; import '../../mobile/widget_detail/node_display/node_display.dart'; +import '../../mobile/widget_detail/widget_fields_sliver.dart'; import 'link_widget_buttons.dart'; import 'widget_detail_bar.dart'; import 'widget_detail_panel.dart'; @@ -55,11 +56,12 @@ class _DeskWidgetDetailPageScopeState extends State { Widget build(BuildContext context) { if (_model == null) return const Center(child: CupertinoActivityIndicator()); - Locale locale = context.read().state.language.locale; + Locale locale = context.read().state.language.locale; // Locale locale = Localizations.localeOf(context); // String? countryCode = locale.countryCode; // if (countryCode == null) {} - String localeStr = '${locale.languageCode}-${locale.countryCode}'.toLowerCase(); + String localeStr = + '${locale.languageCode}-${locale.countryCode}'.toLowerCase(); return BlocProvider( create: (_) => WidgetDetailBloc( @@ -119,16 +121,23 @@ class DeskWidgetDetailPage extends StatelessWidget { SliverToBoxAdapter( child: Column( children: [ - DeskWidgetDetailPanel(model: bloc.currentWidget, state: state,), - const Divider(height: 18,) + DeskWidgetDetailPanel( + model: bloc.currentWidget, + state: state, + ), + const Divider( + height: 18, + ) ], ), ), if (state is DetailWithData) - SliverNodeList( - nodes: state.nodes, - model: state.widgetModel, - ) + state.nodes.isNotEmpty + ? SliverNodeList( + nodes: state.nodes, + model: state.widgetModel, + ) + : SliverWidgetFieldsList(widgetId: model!.id), ], )); } diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_panel.dart b/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_panel.dart index ea3b269a5..3ca8a6c91 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_panel.dart +++ b/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_panel.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_star/flutter_star.dart'; import 'package:toly_ui/toly_ui.dart'; import 'package:widget_repository/widget_repository.dart'; +import 'package:widget_ui/widget_ui.dart'; import 'dart:math'; import '../../../blocs/blocs.dart'; @@ -31,7 +32,14 @@ class DeskWidgetDetailPanel extends StatelessWidget { children: [ _buildLeft(model, context), const SizedBox(width: 12), - _buildRight(color, model), + Hero( + tag: "hero_widget_image_${model.id}", + child: WidgetDetailLogo( + model: model, + background: color, + widgetName: model.name, + ), + ) ], ), ); @@ -67,77 +75,4 @@ class DeskWidgetDetailPanel extends StatelessWidget { ], ), ); - - Widget _buildRight(Color color, WidgetModel model) => Column( - mainAxisSize: MainAxisSize.min, - children: [ - Hero( - tag: "hero_widget_image_${model.id}", - child: WidgetLogo( - widgetId: model.id, - background: color, - widgetName: model.name, - ), - ), - const SizedBox( - height: 6, - ), - StarScore( - score: model.lever, - star: Star(size: 15, fillColor: color), - ) - ], - ); -} - -class WidgetLogo extends StatelessWidget { - final Color background; - final String widgetName; - final int widgetId; - - const WidgetLogo({ - super.key, - required this.background, - required this.widgetName, - required this.widgetId, - }); - - @override - Widget build(BuildContext context) { - return Stack( - children: [ - Container( - width: 240, - height: 160, - alignment: Alignment.center, - decoration: BoxDecoration( - color: background, - gradient: LinearGradient( - transform: const GradientRotation(270 * 180 / pi), - colors: [ - background.withValues(alpha: 0.9), - background.withValues(alpha: 0.5) - ]), - borderRadius: BorderRadius.circular(6), - ), - child: SvgPicture.asset( - 'assets/images/widgets/${widgetLogo(widgetName)}', - width: 140, - ), - ), - Positioned( - bottom: 2, - left: 6, - child: Text( - "#$widgetId", - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontSize: 12, - color: Colors.white70, - ), - )) - ], - ); - } } diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/desk_widget_top_bar.dart b/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/desk_widget_top_bar.dart index a8908c885..f5dcb97dc 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/desk_widget_top_bar.dart +++ b/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/desk_widget_top_bar.dart @@ -2,32 +2,94 @@ import 'package:app/app.dart'; import 'package:l10n/l10n.dart'; import 'package:toly_ui/toly_ui.dart'; import 'package:flutter/material.dart'; +import 'package:widget_repository/widget_repository.dart'; import 'desk_search_bar.dart'; class DeskWidgetTopBar extends StatefulWidget { final ValueChanged onTabPressed; - const DeskWidgetTopBar({Key? key,required this.onTabPressed}) : super(key: key); + const DeskWidgetTopBar({Key? key, required this.onTabPressed}) + : super(key: key); @override State createState() => _DeskWidgetTopBarState(); } -class _DeskWidgetTopBarState extends State with SingleTickerProviderStateMixin { +class _DeskWidgetTopBarState extends State + with SingleTickerProviderStateMixin { late TabController tabController; + List get _tabs { + final provider = WidgetStatisticsProvider(); + final stats = provider.statistics; - List get _tabs =>[ - context.l10n.stateless, - context.l10n.stateful, - context.l10n.single, - context.l10n.multi, - context.l10n.sliver, - context.l10n.proxy, - context.l10n.other, - ]; + if (stats == null) { + return [ + context.l10n.stateless, + context.l10n.stateful, + context.l10n.single, + context.l10n.multi, + context.l10n.sliver, + context.l10n.proxy, + context.l10n.other, + ]; + } + return [ + context.l10n.stateless, + context.l10n.stateful, + context.l10n.single, + context.l10n.multi, + context.l10n.sliver, + context.l10n.proxy, + context.l10n.other, + ]; + } + + List _buildTabWidgets() { + final provider = WidgetStatisticsProvider(); + final stats = provider.statistics; + final counts = [ + stats?.familyCount[WidgetFamily.stateless] ?? 0, + stats?.familyCount[WidgetFamily.stateful] ?? 0, + stats?.familyCount[WidgetFamily.singleChildRender] ?? 0, + stats?.familyCount[WidgetFamily.multiChildRender] ?? 0, + stats?.familyCount[WidgetFamily.sliver] ?? 0, + stats?.familyCount[WidgetFamily.proxy] ?? 0, + stats?.familyCount[WidgetFamily.other] ?? 0, + ]; + + return List.generate( + _tabs.length, + (index) => Stack( + clipBehavior: Clip.none, + children: [ + Text(_tabs[index]), + if (tabController.index == index) + Positioned( + right: -10, + top: -6, + child: Container( + padding: const EdgeInsets.symmetric( + horizontal: 6, vertical: 3), + decoration: BoxDecoration( + color: Theme.of(context) + .primaryColor + .withValues(alpha: 0.6), + borderRadius: BorderRadius.circular(6), + ), + child: Text('${counts[index]}', + style: const TextStyle( + fontFamily: '黑体', + height: 1, + fontSize: 9, + color: Colors.white)), + ), + ), + ], + )); + } @override void initState() { @@ -44,7 +106,7 @@ class _DeskWidgetTopBarState extends State with SingleTickerP child: Container( padding: const EdgeInsets.only(left: 20), height: 64, - color: isDark?Color(0xff2C3036):Colors.white, + color: isDark ? Color(0xff2C3036) : Colors.white, child: Row( children: [ SizedBox( @@ -67,16 +129,15 @@ class _DeskWidgetTopBarState extends State with SingleTickerP indicatorWeight: 3, unselectedLabelColor: Colors.grey, indicatorColor: themeColor, - tabs: - _tabs.map((String name) => Tab(text: name)).toList(), + tabs: _buildTabWidgets() + .map((Widget widget) => Tab(child: widget)) + .toList(), ), ), Spacer(), Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0), - child: SizedBox( - width: 250, height: 30, child: DeskSearchBar( - )), + child: SizedBox(width: 250, height: 30, child: DeskSearchBar()), ), // const SizedBox(width: 20,), const WindowButtons(), diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_panel.dart b/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_panel.dart index e79767fe7..85165ba15 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_panel.dart +++ b/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_panel.dart @@ -1,20 +1,15 @@ -import 'package:app/app.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:go_router/go_router.dart'; import 'package:widget_module/blocs/blocs.dart'; -import 'package:widget_module/event/widget_event.dart'; import 'package:widget_module/widget_module.dart'; import 'package:widget_repository/widget_repository.dart'; -import 'package:fx_trace/fx_trace.dart'; -import 'package:toly_ui/toly_ui.dart'; import 'desk_widget_top_bar.dart'; -import 'widget_tiled.dart'; +import 'package:widget_ui/widget_ui.dart'; class DeskWidgetPanel extends StatefulWidget { final Widget? header; + const DeskWidgetPanel({super.key, this.header}); @override @@ -86,28 +81,14 @@ class WidgetList extends StatelessWidget { padding: const EdgeInsets.only(left: 14, right: 14, bottom: 8), sliver: SliverGrid.builder( gridDelegate: gridDelegate, - itemBuilder: _buildItem, + itemBuilder: (_, index) => WidgetItem( + model: state.widgets[index], + onWidget: context.handleWidgetAction, + ), itemCount: state.widgets.length, ), ) ], ); - - return GridView.builder( - padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 8), - gridDelegate: gridDelegate, - itemBuilder: _buildItem, - itemCount: state.widgets.length, - ); - } - - Widget _buildItem(BuildContext context, int index) { - WidgetModel model = state.widgets[index]; - return WidgetTiled( - model: model, - onTap: () { - context.push('${AppRoute.widgetDetail.url}${model.name}', extra: model); - }, - ); } } diff --git a/modules/widget_system/widget_module/lib/views/mobile/category_page/like_widget_page.dart b/modules/widget_system/widget_module/lib/views/mobile/category_page/like_widget_page.dart index be108c610..0284a6d04 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/category_page/like_widget_page.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/category_page/like_widget_page.dart @@ -3,15 +3,14 @@ import 'package:components/project_ui/project_ui.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:widget_module/blocs/action/widget_action.dart'; import 'package:widget_repository/widget_repository.dart'; - +import 'package:widget_ui/widget_ui.dart'; import 'package:widget_module/blocs/blocs.dart'; import '../widget_detail/collect_widget_list_item.dart'; import '../widget_detail/widget_detail_page.dart'; - - /// create by 张风捷特烈 on 2020/6/16 /// contact me by email 1981462002@qq.com /// 说明: @@ -28,7 +27,7 @@ class LikeWidgetPage extends StatelessWidget { ); final SliverGridDelegate deskGridDelegate = - const SliverGridDelegateWithFixedCrossAxisCount( + const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, mainAxisSpacing: 10, crossAxisSpacing: 10, @@ -37,7 +36,8 @@ class LikeWidgetPage extends StatelessWidget { @override Widget build(BuildContext context) { - return BlocBuilder(builder: (ctx, state) { + return BlocBuilder>( + builder: (ctx, state) { return CustomScrollView( slivers: [ SliverOverlapInjector( @@ -52,35 +52,32 @@ class LikeWidgetPage extends StatelessWidget { }); } - Widget _buildContent(BuildContext context, LikeWidgetState state) { + Widget _buildContent(BuildContext context, List state) { return SliverPadding( - padding: const EdgeInsets.only(top: 10, left: 10, right: 10, bottom: 0), - sliver: SliverLayoutBuilder( - builder: (_,c){ + padding: const EdgeInsets.only(top: 10, left: 10, right: 10, bottom: 0), + sliver: SliverLayoutBuilder( + builder: (_, c) { SliverGridDelegate delegate = gridDelegate; - if(c.crossAxisExtent>500){ + if (c.crossAxisExtent > 500) { delegate = deskGridDelegate; } return SliverGrid( - delegate: SliverChildBuilderDelegate( - (_, index) => GestureDetector( - onTap: () => - _toDetailPage(context, state.widgets[index]), - child: CollectWidgetListItem( - data: state.widgets[index], - onDeleteItemClick: (model) => - _deleteCollect(context, model), - )), - childCount: state.widgets.length), - gridDelegate: delegate);}, - )); + delegate: SliverChildBuilderDelegate( + (_, index) => GestureDetector( + onTap: () => _toDetailPage(context, state[index]), + child: CollectWidgetListItem( + data: state[index], + onDeleteItemClick: (model) => + context.toggleLike(model.id), + )), + childCount: state.length), + gridDelegate: delegate); + }, + )); } - _deleteCollect(BuildContext context, WidgetModel model) => - BlocProvider.of(context) - .add(ToggleLikeWidgetEvent(id: model.id)); - _toDetailPage(BuildContext context, WidgetModel model) { - Navigator.push(context, SlidePageRoute(child: WidgetDetailPageScope(model: model))); + Navigator.push( + context, SlidePageRoute(child: WidgetDetailPageScope(model: model))); } } diff --git a/modules/widget_system/widget_module/lib/views/mobile/category_page/sync/async_button.dart b/modules/widget_system/widget_module/lib/views/mobile/category_page/sync/async_button.dart index be83c4add..7acd72988 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/category_page/sync/async_button.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/category_page/sync/async_button.dart @@ -11,7 +11,7 @@ import 'package:widget_module/blocs/blocs.dart'; import 'package:storage/storage.dart'; import 'package:widget_repository/widget_repository.dart'; - +import 'package:widget_ui/widget_ui.dart'; import 'package:toly_ui/toly_ui.dart'; @@ -85,7 +85,7 @@ class _SyncCategoryButtonState extends State { CategoryRepository repository = BlocProvider.of(context).repository; await repository.syncCategoryByData(result.data!.data,result.data!.likeData); BlocProvider.of(context).add(const EventLoadCategory()); - BlocProvider.of(context).add(const EventLoadLikeData()); + context.read().loadLikeData(); } else { // 说明还没有后台数据, // 这里防止有傻孩子没点备份,就点同步,哥哥好心,给备份一下。 diff --git a/modules/widget_system/widget_module/lib/views/mobile/search_page/standard_search_page.dart b/modules/widget_system/widget_module/lib/views/mobile/search_page/standard_search_page.dart index 0dd26148d..011177ed8 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/search_page/standard_search_page.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/search_page/standard_search_page.dart @@ -6,9 +6,10 @@ import 'package:go_router/go_router.dart'; import 'package:widget_module/blocs/blocs.dart'; import 'package:l10n/l10n.dart'; +import 'package:widget_module/widget_module.dart'; import 'package:widget_repository/widget_repository.dart'; -import '../widget_page/mobile_widget_tiled.dart'; +import 'package:widget_ui/widget_ui.dart'; import 'standard_search_bar.dart'; // SearchPage 可以复用 WidgetsBloc,进行局部的 Bloc @@ -72,10 +73,19 @@ class StandardSearchPage extends StatelessWidget { } return ListView.builder( padding: EdgeInsets.zero, - itemBuilder: (_, index) => MobileWidgetTiled( - searchArg: state.filter.name, + itemBuilder: (_, index) => Padding( + padding: const EdgeInsets.only(left: 8.0, right: 8, top: 8), + child: WidgetItem( model: state.widgets[index], - onTap: () => _toDetail(context, state.widgets[index])), + onWidget: context.handleWidgetAction, + ), + ), + + // MobileWidgetTiled( + // searchArg: state.filter.name, + // model: state.widgets[index], + // onTap: () => _toDetail(context, state.widgets[index]), + // ), itemCount: state.widgets.length, ); } diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_bar.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_bar.dart index 2af9060cd..b12089cc5 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_bar.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_bar.dart @@ -6,9 +6,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:toly_ui/toly_ui.dart'; import 'package:utils/utils.dart'; +import 'package:widget_module/blocs/action/widget_action.dart'; import 'package:widget_module/blocs/blocs.dart'; import 'package:widget_repository/widget_repository.dart'; - +import 'package:widget_ui/widget_ui.dart'; class SliverWidgetDetailBar extends StatelessWidget { final WidgetModel model; @@ -61,8 +62,8 @@ class SliverWidgetDetailBar extends StatelessWidget { actions: [ _buildToHome(context), FeedbackWidget( - onPressed: () => _toggleLikeState(context), - child: BlocConsumer( + onPressed: () => context.toggleLike(model.id), + child: BlocConsumer>( listener: _listenLikeStateChange, builder: _buildByLikeState, ), @@ -71,15 +72,10 @@ class SliverWidgetDetailBar extends StatelessWidget { ); } - void _toggleLikeState(BuildContext context) { - BlocProvider.of(context).add( - ToggleLikeWidgetEvent(id: model.id), - ); - } // 监听 LikeWidgetBloc 伺机弹出 toast - void _listenLikeStateChange(BuildContext context, LikeWidgetState state) { - bool collected = state.widgets.contains(model); + void _listenLikeStateChange(BuildContext context, List state) { + bool collected = state.contains(model); String msg = collected ? "收藏【${model.name}】组件成功!" : "已取消【${model.name}】组件收藏!"; Toast.toast( @@ -96,8 +92,8 @@ class SliverWidgetDetailBar extends StatelessWidget { } // 根据 [LikeWidgetState ] 构建图标 - Widget _buildByLikeState(BuildContext context, LikeWidgetState state) { - bool liked = state.widgets.contains(model); + Widget _buildByLikeState(BuildContext context, List state) { + bool liked = state.contains(model); return Padding( padding: const EdgeInsets.only(right: 20.0), child: Icon( diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_page.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_page.dart index de2cd9b29..34d1db6e4 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_page.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_page.dart @@ -15,6 +15,7 @@ import 'package:widget_module/blocs/blocs.dart'; import 'category_end_drawer.dart'; import 'widget_detail_bar.dart'; import 'widget_detail_panel.dart'; +import 'widget_fields_sliver.dart'; import 'package:tolyui/tolyui.dart'; // 用于组件详情不需要在一开始就加载 @@ -88,10 +89,12 @@ class WidgetDetailPage extends StatelessWidget { ), ), if (state is DetailWithData) - SliverNodeList( - nodes: state.nodes, - model: state.widgetModel, - ), + state.nodes.isNotEmpty + ? SliverNodeList( + nodes: state.nodes, + model: state.widgetModel, + ) + : SliverWidgetFieldsList(widgetId: model.id), ], )); } diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_panel.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_panel.dart index 96dc2abd6..cfd417555 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_panel.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_panel.dart @@ -2,7 +2,7 @@ import 'package:toly_ui/toly_ui.dart'; import 'package:flutter/material.dart'; import 'package:flutter_star/flutter_star.dart'; import 'package:widget_repository/widget_repository.dart'; - +import 'package:widget_ui/widget_ui.dart'; class WidgetDetailPanel extends StatelessWidget { final WidgetModel model; @@ -11,43 +11,31 @@ class WidgetDetailPanel extends StatelessWidget { @override Widget build(BuildContext context) { + Color color = Theme.of(context).primaryColor; + return Row( children: [ _buildLeft(model, context), - _buildRight(model), + Hero( + tag: "hero_widget_image_${model.id}", + child: WidgetDetailLogo( + model: model, + background: color, + widgetName: model.name, + ), + ) ], ); } Widget _buildLeft(WidgetModel model, BuildContext context) => Expanded( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Panel( - color: Theme.of(context).scaffoldBackgroundColor, - child: Text(model.info)), - ), - ); - - Widget _buildRight(WidgetModel model) => Column( - mainAxisSize: MainAxisSize.min, - children: [ - SizedBox( - height: 100, child: Padding( padding: const EdgeInsets.all(8.0), - child: Hero( - tag: "hero_widget_image_${model.id}", - child: ClipRRect( - borderRadius: const BorderRadius.all(Radius.circular(8)), - child: model.image == null - ? Image.asset('assets/images/caver.webp') - : Image(image: model.image!))), + child: Panel( + constraints: BoxConstraints(minHeight: 110), + alignment: Alignment.topLeft, + color: Theme.of(context).scaffoldBackgroundColor, + child: Text(model.info)), ), - ), - StarScore( - score: model.lever, - star: const Star(size: 15, fillColor: Colors.blue), - ) - ], - ); + ); } diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_fields_sliver.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_fields_sliver.dart new file mode 100644 index 000000000..17393aa59 --- /dev/null +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_fields_sliver.dart @@ -0,0 +1,150 @@ +import 'package:flutter/material.dart'; +import 'package:widget_repository/widget_repository.dart'; + +class SliverWidgetFieldsList extends StatefulWidget { + final int widgetId; + + const SliverWidgetFieldsList({ + super.key, + required this.widgetId, + }); + + @override + State createState() => _SliverWidgetFieldsListState(); +} + +class _SliverWidgetFieldsListState extends State { + List? _fields; + bool _isLoading = true; + + @override + void initState() { + super.initState(); + _loadFields(); + } + + Future _loadFields() async { + try { + final repository = const WidgetDbRepository(); + final fields = await repository.loadWidgetFields(widget.widgetId); + setState(() { + _isLoading = false; + _fields = fields; + }); + } catch (e) { + setState(() { + _isLoading = false; + _fields = []; + }); + } + } + + @override + Widget build(BuildContext context) { + if (_isLoading) { + return const SliverToBoxAdapter( + child: Center( + child: Padding( + padding: EdgeInsets.all(32), + child: CircularProgressIndicator(), + ), + ), + ); + } + + if (_fields!.isEmpty) { + return const SliverToBoxAdapter( + child: Center( + child: Padding( + padding: EdgeInsets.all(32), + child: Text('暂无属性信息'), + ), + ), + ); + } + + return SliverPadding( + padding: const EdgeInsets.all(16), + sliver: SliverList( + delegate: SliverChildBuilderDelegate( + (context, index) => _buildFieldItem(_fields![index]), + childCount: _fields!.length, + ), + ), + ); + } + + Widget _buildFieldItem(WidgetFieldModel field) { + return Padding( + padding: const EdgeInsets.all(12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + width: 4, + height: 20, + decoration: BoxDecoration( + color: Theme.of(context).primaryColor, + borderRadius: BorderRadius.circular(2), + ), + ), + const SizedBox(width: 12), + Expanded( + child: Text( + field.fieldName, + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 14, + color: Colors.black87, + ), + ), + ), + // if (field.isRequired) _buildRequiredBadge(), + ], + ), + const SizedBox(height: 2), + Padding( + padding: const EdgeInsets.only(left: 16), + child: Text( + field.fieldType, + style: TextStyle( + color: Theme.of(context).primaryColor, + fontSize: 14, + fontWeight: FontWeight.w600, + ), + ), + ), + if (field.fieldDescZh != null) const SizedBox(height: 8), + Text( + field.fieldDescZh!, + style: const TextStyle( + fontSize: 13, + color: Colors.grey, + height: 1.4, + ), + ), + ], + ), + ); + } + + Widget _buildRequiredBadge() { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + decoration: BoxDecoration( + color: Colors.red, + borderRadius: BorderRadius.circular(12), + ), + child: const Text( + '必需', + style: TextStyle( + color: Colors.white, + fontSize: 11, + fontWeight: FontWeight.w500, + ), + ), + ); + } +} diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_page/mobile_widget_tiled.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_page/mobile_widget_tiled.dart deleted file mode 100644 index ac1c637f8..000000000 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_page/mobile_widget_tiled.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:widget_repository/widget_repository.dart'; -import '../../desk_ui/widget_panel/widget_tiled.dart'; - -class MobileWidgetTiled extends StatelessWidget { - final WidgetModel model; - final VoidCallback onTap; - final String? searchArg; - - const MobileWidgetTiled({ - Key? key, - required this.model, - required this.onTap, - this.searchArg, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.only(left: 8.0, right: 8, top: 8), - child: WidgetTiled( - model: model, - onTap: onTap, - searchArg: searchArg, - ), - ); - } -} diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_page/phone_widget_content.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_page/phone_widget_content.dart index 131608018..9b1ded9a1 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_page/phone_widget_content.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_page/phone_widget_content.dart @@ -1,25 +1,26 @@ import 'package:app/app.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; +import 'package:widget_module/widget_module.dart'; import 'package:widget_repository/widget_repository.dart'; - -import 'mobile_widget_tiled.dart'; - - +import 'package:widget_ui/widget_ui.dart'; class PhoneWidgetContent extends StatelessWidget { final List items; - const PhoneWidgetContent({Key? key,required this.items}) : super(key: key); + const PhoneWidgetContent({Key? key, required this.items}) : super(key: key); @override Widget build(BuildContext context) { return SliverList( delegate: SliverChildBuilderDelegate( - (_, int index) => MobileWidgetTiled( - model: items[index], - onTap: () => _toDetail(context, items[index]), + (_, int index) => Padding( + padding: const EdgeInsets.only(left: 8.0, right: 8, top: 8), + child: WidgetItem( + model: items[index], + onWidget: context.handleWidgetAction, + ), ), childCount: items.length, ), @@ -27,7 +28,6 @@ class PhoneWidgetContent extends StatelessWidget { } void _toDetail(BuildContext context, WidgetModel model) { - context.push('/widget/detail/${model.name}',extra: model); - + context.push('/widget/detail/${model.name}', extra: model); } } diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_page.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_page.dart index 719520e9d..93f03eee7 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_page.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_page.dart @@ -13,6 +13,7 @@ import 'widget_page.dart'; class StandardHomePage extends StatefulWidget { final Widget? heard; + const StandardHomePage({super.key, this.heard}); @override @@ -21,7 +22,12 @@ class StandardHomePage extends StatefulWidget { class _StandardHomePageState extends State with SingleTickerProviderStateMixin, AutomaticKeepAliveClientMixin { - List get _tabs => [ + List get _tabs { + final provider = WidgetStatisticsProvider(); + final stats = provider.statistics; + + if (stats == null) { + return [ context.l10n.stateless, context.l10n.stateful, context.l10n.single, @@ -30,6 +36,68 @@ class _StandardHomePageState extends State context.l10n.proxy, context.l10n.other, ]; + } + + return [ + context.l10n.stateless, + context.l10n.stateful, + context.l10n.single, + context.l10n.multi, + context.l10n.sliver, + context.l10n.proxy, + context.l10n.other, + ]; + } + + ValueNotifier indexValue = ValueNotifier(0); + + List _buildTabWidgets() { + final provider = WidgetStatisticsProvider(); + final stats = provider.statistics; + final counts = [ + stats?.familyCount[WidgetFamily.stateless] ?? 0, + stats?.familyCount[WidgetFamily.stateful] ?? 0, + stats?.familyCount[WidgetFamily.singleChildRender] ?? 0, + stats?.familyCount[WidgetFamily.multiChildRender] ?? 0, + stats?.familyCount[WidgetFamily.sliver] ?? 0, + stats?.familyCount[WidgetFamily.proxy] ?? 0, + stats?.familyCount[WidgetFamily.other] ?? 0, + ]; + + return List.generate( + _tabs.length, + (index) => ValueListenableBuilder( + valueListenable: indexValue, + builder: (context, value, __) { + return Stack( + clipBehavior: Clip.none, + children: [ + Text(_tabs[index]), + if (value == index) + Positioned( + right: -10, + top: -6, + child: Container( + padding: const EdgeInsets.symmetric( + horizontal: 6, vertical: 3), + decoration: BoxDecoration( + color: Theme.of(context) + .primaryColor + .withValues(alpha: 0.6), + borderRadius: BorderRadius.circular(6), + ), + child: Text('${counts[index]}', + style: const TextStyle( + fontFamily: '黑体', + height: 1, + fontSize: 9, + color: Colors.white)), + ), + ), + ], + ); + })); + } late TabController tabController; @@ -37,12 +105,15 @@ class _StandardHomePageState extends State void initState() { super.initState(); tabController = TabController(length: 7, vsync: this); + tabController.addListener(_onChange); } int maxCount = 60; @override void dispose() { + tabController.removeListener(_onChange); + tabController.dispose(); super.dispose(); } @@ -122,7 +193,9 @@ class _StandardHomePageState extends State indicatorWeight: 3, unselectedLabelColor: Colors.grey, indicatorColor: themeColor, - tabs: _tabs.map((String name) => Tab(text: name)).toList(), + tabs: _buildTabWidgets() + .map((Widget widget) => Tab(child: widget)) + .toList(), )), // handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), // ), @@ -131,4 +204,8 @@ class _StandardHomePageState extends State @override bool get wantKeepAlive => true; + + void _onChange() { + indexValue.value = tabController.index; + } } diff --git a/modules/widget_system/widget_module/lib/views/widgets_bloc_provider.dart b/modules/widget_system/widget_module/lib/views/widgets_bloc_provider.dart index f3aa6314c..3dc693d02 100644 --- a/modules/widget_system/widget_module/lib/views/widgets_bloc_provider.dart +++ b/modules/widget_system/widget_module/lib/views/widgets_bloc_provider.dart @@ -1,11 +1,10 @@ -import 'package:app/app.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; - +import 'package:fx_platform_adapter/fx_platform_adapter.dart'; +import 'package:widget_ui/widget_ui.dart'; import '../blocs/blocs.dart'; import 'package:widget_repository/widget_repository.dart'; - class WidgetsBlocProvider extends StatefulWidget { final Widget child; @@ -17,7 +16,8 @@ class WidgetsBlocProvider extends StatefulWidget { class _WidgetsBlocProviderState extends State { late WidgetRepository repository; - final CategoryBloc categoryBloc = CategoryBloc(repository: CategoryDbRepository()); + final CategoryBloc categoryBloc = + CategoryBloc(repository: CategoryDbRepository()); @override void initState() { @@ -33,9 +33,11 @@ class _WidgetsBlocProviderState extends State { Widget build(BuildContext context) { return MultiBlocProvider( providers: [ - BlocProvider(create: (_) => WidgetsBloc(repository: repository)), + BlocProvider( + create: (_) => WidgetsBloc(repository: repository)), BlocProvider(create: (_) => categoryBloc), - BlocProvider(create: (_) => LikeWidgetBloc(repository: repository)), + BlocProvider( + create: (_) => LikeWidgetBloc(repository: repository)), BlocProvider( create: (_) => CategoryWidgetBloc(categoryBloc: categoryBloc)), ], @@ -43,7 +45,6 @@ class _WidgetsBlocProviderState extends State { ); } - @override void dispose() { categoryBloc.close(); diff --git a/modules/widget_system/widget_module/lib/widget_module.dart b/modules/widget_system/widget_module/lib/widget_module.dart index 90affcabf..05012141f 100644 --- a/modules/widget_system/widget_module/lib/widget_module.dart +++ b/modules/widget_system/widget_module/lib/widget_module.dart @@ -4,7 +4,9 @@ export 'views/desk_ui/desk_ui.dart'; export 'views/mobile/mobile_ui.dart'; export 'views/widgets_bloc_provider.dart'; export 'event/widget_event.dart'; +export 'event/widget_statistics_event.dart'; export 'blocs/action/widget_action.dart'; +export 'package:widget_ui/widget_ui.dart' show LikeWidgetBloc; export 'package:widget_repository/widget_repository.dart' show WidgetFilter, diff --git a/modules/widget_system/widget_module/pubspec.yaml b/modules/widget_system/widget_module/pubspec.yaml index 572b433cd..7448c677b 100644 --- a/modules/widget_system/widget_module/pubspec.yaml +++ b/modules/widget_system/widget_module/pubspec.yaml @@ -11,11 +11,22 @@ resolution: workspace dependencies: flutter: sdk: flutter +# flutter_bloc: ^8.1.6 # 状态管理 +# fx_trace: 0.0.5+5 # 异常追踪/监听 +# fx_platform_adapter: 0.0.3 # 平台适配器 +# flutter_svg: ^2.0.17 # svg 展示 +# +# # 视图展示 +# tolyui: 0.0.4+10 # tolyui +# tolyui_refresh: 0.0.1+1 # 下拉刷新 unit_widgets_display: ^0.0.1 + widget_ui: + path: ../widget_ui widget_repository: path: ../widget_repository - +#dependency_overrides: +# intl: 0.19.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/modules/widget_system/widget_repository/doc/tables_overview.md b/modules/widget_system/widget_repository/doc/tables_overview.md new file mode 100644 index 000000000..2770af6d5 --- /dev/null +++ b/modules/widget_system/widget_repository/doc/tables_overview.md @@ -0,0 +1,110 @@ +# 数据表结构总览 + +## 核心表 (6张) + +### 1. widget - Widget基本信息 +```sql +CREATE TABLE widget( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name VARCHAR(64) NOT NULL UNIQUE, + path TEXT NOT NULL, + is_abstract INTEGER NOT NULL DEFAULT 0, + is_private INTEGER NOT NULL DEFAULT 0, + deprecated INTEGER DEFAULT 0, + family INTEGER NOT NULL, + lever FLOAT(2) NOT NULL, + linkWidget TEXT DEFAULT '' +); +``` + +### 2. widget_inheritance - Widget继承关系 +```sql +CREATE TABLE widget_inheritance ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + widget_id INTEGER NOT NULL, + parent_name TEXT NOT NULL, + inheritance_order INTEGER NOT NULL +); +``` + +### 3. widget_fields - Widget字段信息 +```sql +CREATE TABLE widget_fields ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + widget_id INTEGER NOT NULL, + field_name TEXT NOT NULL, + field_type TEXT NOT NULL, + field_desc TEXT, + field_desc_zh TEXT, + field_order INTEGER NOT NULL, + is_required INTEGER NOT NULL DEFAULT 0 +); +``` + +### 4. widget_desc - Widget描述信息 +```sql +CREATE TABLE widget_desc( + id INTEGER PRIMARY KEY AUTOINCREMENT, + widget_id INTEGER NOT NULL, + name VARCHAR(128) NOT NULL, + info TEXT NOT NULL, + locale VARCHAR(16) DEFAULT 'zh-cn' +); +``` + +### 5. node - 示例代码节点 +```sql +CREATE TABLE node( + id INTEGER PRIMARY KEY AUTOINCREMENT, + widgetId INTEGER NOT NULL, + priority INTEGER DEFAULT 0, + code TEXT NOT NULL +); +``` + +### 6. node_desc - 节点描述信息 +```sql +CREATE TABLE node_desc( + id INTEGER PRIMARY KEY AUTOINCREMENT, + node_id INTEGER NOT NULL, + name VARCHAR(128) NOT NULL, + subtitle TEXT NOT NULL, + locale VARCHAR(16) DEFAULT 'zh-cn' +); +``` + +## 扩展表 (2张) + +### 7. category - Widget分类 +```sql +CREATE TABLE category( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name VARCHAR(64) NOT NULL UNIQUE, + type INTEGER DEFAULT 0, + color VARCHAR(9) DEFAULT '#FF2196F3', + info VARCHAR(256) DEFAULT '这里什么都没有...', + created DATETIME NOT NULL, + updated DATETIME NOT NULL, + priority INTEGER DEFAULT 0, + image VARCHAR(128) DEFAULT '' +); +``` + +### 8. category_widget - 分类Widget关联 +```sql +CREATE TABLE category_widget( + id INTEGER PRIMARY KEY AUTOINCREMENT, + categoryId INTEGER NOT NULL, + widgetId INTEGER NOT NULL +); +``` + +## 表关系图 +``` +widget (1) ←→ (N) widget_inheritance +widget (1) ←→ (N) widget_fields +widget (1) ←→ (N) widget_desc +widget (1) ←→ (N) node +node (1) ←→ (N) node_desc +widget (N) ←→ (N) category [through category_widget] +``` \ No newline at end of file diff --git a/modules/widget_system/widget_repository/lib/src/database/dao/like_dao.dart b/modules/widget_system/widget_repository/lib/src/database/dao/like_dao.dart index f533415d1..210a207f9 100644 --- a/modules/widget_system/widget_repository/lib/src/database/dao/like_dao.dart +++ b/modules/widget_system/widget_repository/lib/src/database/dao/like_dao.dart @@ -8,7 +8,13 @@ class LikeDao extends Dao { String get name => 'like_widget'; Future> likeWidgetIds() async { - var result = await database.rawQuery("SELECT widget_id FROM like_widget"); + String sql = """ +SELECT cw.widgetId as widget_id +FROM category c +JOIN category_widget cw ON c.id = cw.categoryId +WHERE c.type = 1; + """; + var result = await database.rawQuery(sql); var ids = result.map((e) => e['widget_id'] as int).toList(); return ids; } @@ -31,12 +37,12 @@ class LikeDao extends Dao { bool liked = await isLiked(widgetId); if (liked) return 0; } + String sql = """ +INSERT INTO category_widget (categoryId, widgetId) +SELECT id, ? FROM category WHERE type = 1; + """; - return await database.rawInsert( - "INSERT INTO " - "like_widget(widget_id) " - "VALUES (?);", - [widgetId]); + return await database.rawInsert(sql, [widgetId]); } Future unlike(int widgetId, {bool check = true}) async { @@ -45,21 +51,28 @@ class LikeDao extends Dao { bool liked = await isLiked(widgetId); if (!liked) return; } - await database.execute( - "DELETE FROM like_widget " - "WHERE widget_id = ?", - [widgetId]); + String sql = """ +DELETE FROM category_widget +WHERE categoryId IN (SELECT id FROM category WHERE type = 1) +AND widgetId = ?; + """; + await database.execute(sql, [widgetId]); } // 判断组件是否已 liked Future isLiked(int widgetId) async { - var data = await database.rawQuery( - "Select count(id) as `count` FROM like_widget " - "WHERE widget_id = ?", - [widgetId]); + String sql = """ +SELECT EXISTS( + SELECT 1 + FROM category c + JOIN category_widget cw ON c.id = cw.categoryId + WHERE c.type = 1 AND cw.widgetId = ? +) as is_liked; + """; + var data = await database.rawQuery(sql, [widgetId]); if (data.isNotEmpty) { var result = data[0]; - return result['count'] as int > 0; + return result['is_liked'] != 0; } return false; } diff --git a/modules/widget_system/widget_repository/lib/src/database/dao/widget_dao.dart b/modules/widget_system/widget_repository/lib/src/database/dao/widget_dao.dart index debeeefeb..337af7b4d 100644 --- a/modules/widget_system/widget_repository/lib/src/database/dao/widget_dao.dart +++ b/modules/widget_system/widget_repository/lib/src/database/dao/widget_dao.dart @@ -125,4 +125,14 @@ widget_desc.locale = ? } return null; } + + Future>> queryWidgetFields(int widgetId) async { + String sql = """ +SELECT * +FROM widget_fields +WHERE widget_id = ? +ORDER BY is_required DESC, field_order ASC +"""; + return database.rawQuery(sql, [widgetId]); + } } diff --git a/modules/widget_system/widget_repository/lib/src/database/dao/widget_statistics_dao.dart b/modules/widget_system/widget_repository/lib/src/database/dao/widget_statistics_dao.dart new file mode 100644 index 000000000..0b9adfa69 --- /dev/null +++ b/modules/widget_system/widget_repository/lib/src/database/dao/widget_statistics_dao.dart @@ -0,0 +1,93 @@ +import 'package:fx_dao/fx_dao.dart'; + +class WidgetStatisticsDao extends Dao { + @override + String get createSql => ''; + + @override + String get name => 'widget_statistics'; + + /// 获取各Family对应的组件数量 + Future> getFamilyCount() async { + String sql = ''' + SELECT family, COUNT(*) as count + FROM widget + GROUP BY family + '''; + + List> result = await database.rawQuery(sql); + Map familyCount = {}; + + for (var row in result) { + familyCount[row['family'] as int] = row['count'] as int; + } + + return familyCount; + } + + /// 获取总组件数量 + Future getTotalWidgets() async { + String sql = 'SELECT COUNT(*) as count FROM widget'; + List> result = await database.rawQuery(sql); + return result.first['count'] as int; + } + + /// 获取总字段数量 + Future getTotalFields() async { + String sql = 'SELECT COUNT(*) as count FROM widget_fields'; + List> result = await database.rawQuery(sql); + return result.first['count'] as int; + } + + /// 获取星级分布 + Future> getLeverDistribution() async { + String sql = ''' + SELECT CAST(lever as INTEGER) as lever_int, COUNT(*) as count + FROM widget + GROUP BY CAST(lever as INTEGER) + '''; + + List> result = await database.rawQuery(sql); + Map leverDistribution = {}; + + for (var row in result) { + leverDistribution[row['lever_int'] as int] = row['count'] as int; + } + + return leverDistribution; + } + + /// 获取平均字段数量 + Future getAverageFields() async { + String sql = ''' + SELECT AVG(field_count) as avg_fields + FROM ( + SELECT widget_id, COUNT(*) as field_count + FROM widget_fields + GROUP BY widget_id + ) + '''; + + List> result = await database.rawQuery(sql); + var avgFields = result.first['avg_fields']; + return avgFields != null ? (avgFields as num).toDouble() : 0.0; + } + + /// 获取每个组件的属性个数 + Future> getWidgetFieldsCount() async { + String sql = ''' + SELECT widget_id, COUNT(*) as field_count + FROM widget_fields + GROUP BY widget_id + '''; + + List> result = await database.rawQuery(sql); + Map fieldsCount = {}; + + for (var row in result) { + fieldsCount[row['widget_id'] as int] = row['field_count'] as int; + } + + return fieldsCount; + } +} \ No newline at end of file diff --git a/modules/widget_system/widget_repository/lib/src/database/database.dart b/modules/widget_system/widget_repository/lib/src/database/database.dart index 03fed7c20..13eea01a5 100644 --- a/modules/widget_system/widget_repository/lib/src/database/database.dart +++ b/modules/widget_system/widget_repository/lib/src/database/database.dart @@ -6,6 +6,7 @@ export 'dao/like_dao.dart'; export 'dao/node_dao.dart'; export 'dao/widget_dao.dart'; export 'dao/category_dao.dart'; +export 'dao/widget_statistics_dao.dart'; export 'db_impl/category_db_repository.dart'; export 'db_impl/node_db_repository.dart'; diff --git a/modules/widget_system/widget_repository/lib/src/database/db_impl/widget_db_repository.dart b/modules/widget_system/widget_repository/lib/src/database/db_impl/widget_db_repository.dart index 3f2bef0eb..e132cb68d 100644 --- a/modules/widget_system/widget_repository/lib/src/database/db_impl/widget_db_repository.dart +++ b/modules/widget_system/widget_repository/lib/src/database/db_impl/widget_db_repository.dart @@ -64,4 +64,10 @@ class WidgetDbRepository implements WidgetRepository { } return null; } + + @override + Future> loadWidgetFields(int widgetId) async { + List> data = await widgetDao.queryWidgetFields(widgetId); + return data.map((e) => WidgetFieldModel.fromJson(e)).toList(); + } } diff --git a/modules/widget_system/widget_repository/lib/src/memory/memory_widget_repository.dart b/modules/widget_system/widget_repository/lib/src/memory/memory_widget_repository.dart index 955d418b4..fa1993a34 100644 --- a/modules/widget_system/widget_repository/lib/src/memory/memory_widget_repository.dart +++ b/modules/widget_system/widget_repository/lib/src/memory/memory_widget_repository.dart @@ -5,7 +5,6 @@ import 'package:widget_repository/widget_repository.dart'; import '../model/widget_filter.dart'; import '../repository/widget_repository.dart'; - /// create by 张风捷特烈 on 2020-03-03 /// contact me by email 1981462002@qq.com /// 说明 : Widget 数据仓库 @@ -30,21 +29,25 @@ class MemoryWidgetRepository implements WidgetRepository { @override Future> searchWidgets(WidgetFilter args) async { await _initData(); - var result = widgets.map(WidgetModel.fromPo).where((e) => checkSearch(e, args)).toList(); + var result = widgets + .map(WidgetModel.fromPo) + .where((e) => checkSearch(e, args)) + .toList(); result.sort((a, b) => b.lever.compareTo(a.lever)); return result; } bool checkSearch(WidgetModel model, WidgetFilter args) { bool nameMatch = model.name.toLowerCase().contains(args.name.toLowerCase()); - bool nameCNMatch = model.nameCN.toLowerCase().contains(args.name.toLowerCase()); + bool nameCNMatch = + model.nameCN.toLowerCase().contains(args.name.toLowerCase()); bool familyMatch = model.family == args.family; return nameMatch || nameCNMatch || familyMatch; } @override - Future> loadWidget(List id,String? locale) async { + Future> loadWidget(List id, String? locale) async { await _initData(); var data = widgets.where((element) => id.contains(element.id)); return data.map(WidgetModel.fromPo).toList(); @@ -58,8 +61,9 @@ class MemoryWidgetRepository implements WidgetRepository { @override Future queryWidgetByName(String? name) async { await _initData(); - Iterable ret = - widgets.map(WidgetModel.fromPo).where((element) => element.name == name); + Iterable ret = widgets + .map(WidgetModel.fromPo) + .where((element) => element.name == name); if (ret.isNotEmpty) { return ret.first; } @@ -78,4 +82,10 @@ class MemoryWidgetRepository implements WidgetRepository { Future collected(int id) async { return 0; } + + @override + Future> loadWidgetFields(int widgetId) { + // TODO: implement loadWidgetFields + throw UnimplementedError(); + } } diff --git a/modules/widget_system/widget_repository/lib/src/model/model.dart b/modules/widget_system/widget_repository/lib/src/model/model.dart index 399e0f3c6..900537b01 100644 --- a/modules/widget_system/widget_repository/lib/src/model/model.dart +++ b/modules/widget_system/widget_repository/lib/src/model/model.dart @@ -1,4 +1,6 @@ export 'node_model.dart'; export 'widget_model.dart'; export 'category_model.dart'; -export 'widget_filter.dart'; \ No newline at end of file +export 'widget_filter.dart'; +export 'widget_statistics.dart'; +export 'widget_field_model.dart'; \ No newline at end of file diff --git a/modules/widget_system/widget_repository/lib/src/model/widget_field_model.dart b/modules/widget_system/widget_repository/lib/src/model/widget_field_model.dart new file mode 100644 index 000000000..6d41090ee --- /dev/null +++ b/modules/widget_system/widget_repository/lib/src/model/widget_field_model.dart @@ -0,0 +1,49 @@ +import 'package:equatable/equatable.dart'; + +/// Widget字段模型 +class WidgetFieldModel extends Equatable { + final int id; + final int widgetId; + final String fieldName; + final String fieldType; + final String? fieldDesc; + final String? fieldDescZh; + final int fieldOrder; + final bool isRequired; + + const WidgetFieldModel({ + required this.id, + required this.widgetId, + required this.fieldName, + required this.fieldType, + this.fieldDesc, + this.fieldDescZh, + required this.fieldOrder, + required this.isRequired, + }); + + @override + List get props => [ + id, + widgetId, + fieldName, + fieldType, + fieldDesc, + fieldDescZh, + fieldOrder, + isRequired, + ]; + + factory WidgetFieldModel.fromJson(Map json) { + return WidgetFieldModel( + id: json['id'], + widgetId: json['widget_id'], + fieldName: json['field_name'], + fieldType: json['field_type'], + fieldDesc: json['field_desc'], + fieldDescZh: json['field_desc_zh'], + fieldOrder: json['field_order'], + isRequired: json['is_required'] == 1, + ); + } +} \ No newline at end of file diff --git a/modules/widget_system/widget_repository/lib/src/model/widget_model.dart b/modules/widget_system/widget_repository/lib/src/model/widget_model.dart index ae2bd01ed..7c422fb16 100644 --- a/modules/widget_system/widget_repository/lib/src/model/widget_model.dart +++ b/modules/widget_system/widget_repository/lib/src/model/widget_model.dart @@ -33,18 +33,19 @@ class WidgetModel extends Equatable { String get heroId => 'hero_widget_image_$id'; - const WidgetModel( - {required this.id, - required this.name, - required this.nameCN, - required this.family, - this.deprecated = false, - this.death = false, - required this.links, - // required this.type, - required this.lever, - this.image, - required this.info}); + const WidgetModel({ + required this.id, + required this.name, + required this.nameCN, + required this.family, + this.deprecated = false, + this.death = false, + required this.links, + // required this.type, + required this.lever, + this.image, + required this.info, + }); @override List get props => [id]; diff --git a/modules/widget_system/widget_repository/lib/src/model/widget_statistics.dart b/modules/widget_system/widget_repository/lib/src/model/widget_statistics.dart new file mode 100644 index 000000000..7b9d70b18 --- /dev/null +++ b/modules/widget_system/widget_repository/lib/src/model/widget_statistics.dart @@ -0,0 +1,52 @@ +import 'package:equatable/equatable.dart'; +import 'widget_filter.dart'; + +/// Widget统计数据模型 +class WidgetStatistics extends Equatable { + /// 各Family对应的组件数量 + final Map familyCount; + + /// 总组件数量 + final int totalWidgets; + + /// 总字段数量 + final int totalFields; + + /// 平均字段数量 + final double averageFields; + + /// 星级分布 (1-5星对应的组件数量) + final Map leverDistribution; + + /// 每个组件的属性个数 (widgetId -> 属性个数) + final Map widgetFieldsCount; + + const WidgetStatistics({ + required this.familyCount, + required this.totalWidgets, + required this.totalFields, + required this.averageFields, + required this.leverDistribution, + required this.widgetFieldsCount, + }); + + @override + List get props => [ + familyCount, + totalWidgets, + totalFields, + averageFields, + leverDistribution, + widgetFieldsCount, + ]; + + /// 获取指定组件的属性个数 + int getWidgetFieldCount(int widgetId) { + return widgetFieldsCount[widgetId] ?? 0; + } + + @override + String toString() { + return 'WidgetStatistics{familyCount: $familyCount, totalWidgets: $totalWidgets, totalFields: $totalFields, averageFields: $averageFields, leverDistribution: $leverDistribution, widgetFieldsCount: ${widgetFieldsCount.length} widgets}'; + } +} \ No newline at end of file diff --git a/modules/widget_system/widget_repository/lib/src/repository/repository.dart b/modules/widget_system/widget_repository/lib/src/repository/repository.dart index 2f73ddde4..e7464d8aa 100644 --- a/modules/widget_system/widget_repository/lib/src/repository/repository.dart +++ b/modules/widget_system/widget_repository/lib/src/repository/repository.dart @@ -1,3 +1,5 @@ export 'category_repository.dart'; export 'node_repository.dart'; -export 'widget_repository.dart'; \ No newline at end of file +export 'widget_repository.dart'; +export 'widget_statistics_service.dart'; +export 'widget_statistics_provider.dart'; \ No newline at end of file diff --git a/modules/widget_system/widget_repository/lib/src/repository/widget_repository.dart b/modules/widget_system/widget_repository/lib/src/repository/widget_repository.dart index 684d91099..9ffbfe3a9 100644 --- a/modules/widget_system/widget_repository/lib/src/repository/widget_repository.dart +++ b/modules/widget_system/widget_repository/lib/src/repository/widget_repository.dart @@ -21,4 +21,6 @@ abstract class WidgetRepository { Future> loadLikeWidgets(); Future collected(int id); + + Future> loadWidgetFields(int widgetId); } diff --git a/modules/widget_system/widget_repository/lib/src/repository/widget_statistics_provider.dart b/modules/widget_system/widget_repository/lib/src/repository/widget_statistics_provider.dart new file mode 100644 index 000000000..ac74cf978 --- /dev/null +++ b/modules/widget_system/widget_repository/lib/src/repository/widget_statistics_provider.dart @@ -0,0 +1,90 @@ +import 'package:flutter/foundation.dart'; +import '../../widget_repository.dart'; +import '../model/widget_statistics.dart'; +import 'widget_statistics_service.dart'; + +/// 全局统计数据提供器 +class WidgetStatisticsProvider extends ChangeNotifier { + static final WidgetStatisticsProvider _instance = + WidgetStatisticsProvider._internal(); + factory WidgetStatisticsProvider() => _instance; + WidgetStatisticsProvider._internal(); + + WidgetStatistics? _statistics; + bool _isLoaded = false; + + WidgetStatistics? get statistics => _statistics; + bool get isLoaded => _isLoaded; + + /// 加载统计数据 + Future loadStatistics(WidgetStatisticsDao dao) async { + if (_isLoaded) return; + + final stopwatch = Stopwatch()..start(); + try { + _statistics = await getStatistics(dao); + _isLoaded = true; + stopwatch.stop(); + debugPrint('统计数据加载耗时: ${stopwatch.elapsedMilliseconds} ms'); + notifyListeners(); + } catch (e) { + stopwatch.stop(); + debugPrint('加载统计数据失败: $e (耗时: ${stopwatch.elapsedMilliseconds} ms)'); + } + } + + /// 获取Widget统计数据 + Future getStatistics(WidgetStatisticsDao dao) async { + final results = await Future.wait([ + dao.getFamilyCount(), + dao.getTotalWidgets(), + dao.getTotalFields(), + dao.getAverageFields(), + dao.getLeverDistribution(), + dao.getWidgetFieldsCount(), + ]); + + final rawFamilyCount = results[0] as Map; + final totalWidgets = results[1] as int; + final totalFields = results[2] as int; + final averageFields = results[3] as double; + final leverDistribution = results[4] as Map; + final widgetFieldsCount = results[5] as Map; + + final familyCount = {}; + for (var entry in rawFamilyCount.entries) { + final family = _intToWidgetFamily(entry.key); + familyCount[family] = entry.value; + } + + return WidgetStatistics( + familyCount: familyCount, + totalWidgets: totalWidgets, + totalFields: totalFields, + averageFields: averageFields, + leverDistribution: leverDistribution, + widgetFieldsCount: widgetFieldsCount, + ); + } + + WidgetFamily _intToWidgetFamily(int index) { + switch (index) { + case 0: + return WidgetFamily.stateless; + case 1: + return WidgetFamily.stateful; + case 2: + return WidgetFamily.singleChildRender; + case 3: + return WidgetFamily.multiChildRender; + case 4: + return WidgetFamily.sliver; + case 5: + return WidgetFamily.proxy; + case 6: + return WidgetFamily.other; + default: + return WidgetFamily.stateless; + } + } +} diff --git a/modules/widget_system/widget_repository/lib/src/repository/widget_statistics_service.dart b/modules/widget_system/widget_repository/lib/src/repository/widget_statistics_service.dart new file mode 100644 index 000000000..f5812e18c --- /dev/null +++ b/modules/widget_system/widget_repository/lib/src/repository/widget_statistics_service.dart @@ -0,0 +1,57 @@ +import '../model/widget_statistics.dart'; +import '../database/dao/widget_statistics_dao.dart'; +import '../model/widget_filter.dart'; + +/// Widget统计服务 +class WidgetStatisticsService { + final WidgetStatisticsDao dao; + + const WidgetStatisticsService({required this.dao}); + + /// 获取Widget统计数据 + Future getStatistics() async { + final results = await Future.wait([ + dao.getFamilyCount(), + dao.getTotalWidgets(), + dao.getTotalFields(), + dao.getAverageFields(), + dao.getLeverDistribution(), + dao.getWidgetFieldsCount(), + ]); + + final rawFamilyCount = results[0] as Map; + final totalWidgets = results[1] as int; + final totalFields = results[2] as int; + final averageFields = results[3] as double; + final leverDistribution = results[4] as Map; + final widgetFieldsCount = results[5] as Map; + + final familyCount = {}; + for (var entry in rawFamilyCount.entries) { + final family = _intToWidgetFamily(entry.key); + familyCount[family] = entry.value; + } + + return WidgetStatistics( + familyCount: familyCount, + totalWidgets: totalWidgets, + totalFields: totalFields, + averageFields: averageFields, + leverDistribution: leverDistribution, + widgetFieldsCount: widgetFieldsCount, + ); + } + + WidgetFamily _intToWidgetFamily(int index) { + switch (index) { + case 0: return WidgetFamily.stateless; + case 1: return WidgetFamily.stateful; + case 2: return WidgetFamily.singleChildRender; + case 3: return WidgetFamily.multiChildRender; + case 4: return WidgetFamily.sliver; + case 5: return WidgetFamily.proxy; + case 6: return WidgetFamily.other; + default: return WidgetFamily.stateless; + } + } +} \ No newline at end of file diff --git a/modules/widget_system/widget_ui/.gitignore b/modules/widget_system/widget_ui/.gitignore new file mode 100644 index 000000000..eb6c05cd3 --- /dev/null +++ b/modules/widget_system/widget_ui/.gitignore @@ -0,0 +1,31 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. +/pubspec.lock +**/doc/api/ +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +build/ diff --git a/modules/widget_system/widget_ui/.metadata b/modules/widget_system/widget_ui/.metadata new file mode 100644 index 000000000..ab15d7afa --- /dev/null +++ b/modules/widget_system/widget_ui/.metadata @@ -0,0 +1,10 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "c519ee916eaeb88923e67befb89c0f1dabfa83e6" + channel: "stable" + +project_type: package diff --git a/modules/widget_system/widget_ui/CHANGELOG.md b/modules/widget_system/widget_ui/CHANGELOG.md new file mode 100644 index 000000000..41cc7d819 --- /dev/null +++ b/modules/widget_system/widget_ui/CHANGELOG.md @@ -0,0 +1,3 @@ +## 0.0.1 + +* TODO: Describe initial release. diff --git a/modules/widget_system/widget_ui/LICENSE b/modules/widget_system/widget_ui/LICENSE new file mode 100644 index 000000000..ba75c69f7 --- /dev/null +++ b/modules/widget_system/widget_ui/LICENSE @@ -0,0 +1 @@ +TODO: Add your license here. diff --git a/modules/widget_system/widget_ui/README.md b/modules/widget_system/widget_ui/README.md new file mode 100644 index 000000000..4a260d8d2 --- /dev/null +++ b/modules/widget_system/widget_ui/README.md @@ -0,0 +1,39 @@ + + +TODO: Put a short description of the package here that helps potential users +know whether this package might be useful for them. + +## Features + +TODO: List what your package can do. Maybe include images, gifs, or videos. + +## Getting started + +TODO: List prerequisites and provide or point to information on how to +start using the package. + +## Usage + +TODO: Include short and useful examples for package users. Add longer examples +to `/example` folder. + +```dart +const like = 'sample'; +``` + +## Additional information + +TODO: Tell users more about the package: where to find more information, how to +contribute to the package, how to file issues, what response they can expect +from the package authors, and more. diff --git a/modules/widget_system/widget_ui/analysis_options.yaml b/modules/widget_system/widget_ui/analysis_options.yaml new file mode 100644 index 000000000..a5744c1cf --- /dev/null +++ b/modules/widget_system/widget_ui/analysis_options.yaml @@ -0,0 +1,4 @@ +include: package:flutter_lints/flutter.yaml + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/modules/widget_system/widget_ui/lib/src/bloc/bloc.dart b/modules/widget_system/widget_ui/lib/src/bloc/bloc.dart new file mode 100644 index 000000000..c9833f0be --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/bloc/bloc.dart @@ -0,0 +1 @@ +export 'liked_widget_bloc.dart'; diff --git a/modules/widget_system/widget_ui/lib/src/bloc/liked_widget_bloc.dart b/modules/widget_system/widget_ui/lib/src/bloc/liked_widget_bloc.dart new file mode 100644 index 000000000..5acdbc57c --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/bloc/liked_widget_bloc.dart @@ -0,0 +1,22 @@ +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:widget_repository/widget_repository.dart'; + +/// create by 张风捷特烈 on 2020-04-07 +/// contact me by email 1981462002@qq.com +/// 说明: + +class LikeWidgetBloc extends Cubit> { + final WidgetRepository repository; + + LikeWidgetBloc({required this.repository}) : super(const []); + + Future loadLikeData() async { + List widgets = await repository.loadLikeWidgets(); + emit(widgets); + } + + Future toggle(int widgetId) async { + await repository.toggleLike(widgetId); + return loadLikeData(); + } +} diff --git a/modules/widget_system/widget_ui/lib/src/view/node_tiled/node_tiled.dart b/modules/widget_system/widget_ui/lib/src/view/node_tiled/node_tiled.dart new file mode 100644 index 000000000..613744d49 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/node_tiled/node_tiled.dart @@ -0,0 +1 @@ +// TODO Implement this library. diff --git a/modules/widget_system/widget_ui/lib/src/view/view.dart b/modules/widget_system/widget_ui/lib/src/view/view.dart new file mode 100644 index 000000000..2e1e99659 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/view.dart @@ -0,0 +1,2 @@ +export 'widget_tiled/widget_tiled.dart'; +export 'node_tiled/node_tiled.dart'; diff --git a/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_detail_logo.dart b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_detail_logo.dart new file mode 100644 index 000000000..df8d01365 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_detail_logo.dart @@ -0,0 +1,137 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:flutter_star/star.dart'; +import 'package:flutter_star/star_score.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:widget_repository/widget_repository.dart'; +import 'package:fx_env/fx_env.dart'; +import 'package:widget_ui/widget_ui.dart'; +import 'widget_fields_dialog.dart'; +import 'widget_fields_page.dart'; + +class WidgetDetailLogo extends StatelessWidget { + final Color background; + final String widgetName; + final WidgetModel model; + + const WidgetDetailLogo({ + super.key, + required this.background, + required this.widgetName, + required this.model, + }); + + @override + Widget build(BuildContext context) { + if (kApp.isMobile) { + return Padding( + padding: const EdgeInsets.only(right: 8.0, top: 0), + child: WidgetLogo( + background: background, + widgetName: widgetName, + widgetId: model.id, + lever: model.lever, + inDetail: true, + ), + ); + } + + return Stack( + children: [ + Container( + width: 240, + height: 160, + alignment: Alignment.center, + decoration: BoxDecoration( + color: background, + gradient: LinearGradient( + transform: const GradientRotation(270 * 180 / pi), + colors: [ + background.withValues(alpha: 0.9), + background.withValues(alpha: 0.5) + ]), + borderRadius: BorderRadius.circular(6), + ), + child: SvgPicture.asset( + 'assets/images/widgets/${widgetLogo(widgetName)}', + width: 120, + ), + ), + Positioned( + top: 6, + right: 0, + child: StarScore( + score: model.lever, + star: Star(size: 15, fillColor: Colors.white), + ), + ), + Positioned( + bottom: 2, + left: 6, + child: Text( + "#${model.id}", + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 14, + color: Colors.white70, + ), + )), + _buildFieldCountBadge(context), + ], + ); + } + + Widget _buildFieldCountBadge(BuildContext context) { + final provider = WidgetStatisticsProvider(); + final stats = provider.statistics; + if (stats == null) return const SizedBox.shrink(); + + final fieldCount = stats.getWidgetFieldCount(model.id); + if (fieldCount == 0) return const SizedBox.shrink(); + + return Positioned( + right: 0, + bottom: 0, + child: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () => _showFieldsDialog(context), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 6.0, vertical: 4), + child: Text( + '属性:$fieldCount 个', + style: const TextStyle( + fontSize: 14, + color: Colors.white, + decoration: TextDecoration.underline, + decorationColor: Colors.white, + ), + ), + ), + ), + ); + } + + void _showFieldsDialog(BuildContext context) { + if (kApp.isMobile) { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => WidgetFieldsPage( + widgetId: model.id, + widgetName: widgetName, + ), + ), + ); + } else { + showDialog( + context: context, + builder: (context) => WidgetFieldsDialog( + widgetId: model.id, + widgetName: widgetName, + ), + ); + } + } +} diff --git a/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_fields_dialog.dart b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_fields_dialog.dart new file mode 100644 index 000000000..83588aac3 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_fields_dialog.dart @@ -0,0 +1,155 @@ +import 'package:flutter/material.dart'; +import 'package:widget_repository/widget_repository.dart'; +import 'package:storage/storage.dart'; + +class WidgetFieldsDialog extends StatefulWidget { + final int widgetId; + final String widgetName; + + const WidgetFieldsDialog({ + super.key, + required this.widgetId, + required this.widgetName, + }); + + @override + State createState() => _WidgetFieldsDialogState(); +} + +class _WidgetFieldsDialogState extends State { + List? _fields; + bool _isLoading = true; + + @override + void initState() { + super.initState(); + _loadFields(); + } + + Future _loadFields() async { + try { + final repository = const WidgetDbRepository(); + final fields = await repository.loadWidgetFields(widget.widgetId); + // SQL已经按必需属性排序,不需要再次排序 + setState(() { + _isLoading = false; + _fields = fields; + }); + } catch (e) { + setState(() { + _isLoading = false; + _fields = []; + }); + } + } + + @override + Widget build(BuildContext context) { + return Dialog( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + child: Container( + width: 500, + height: 600, + padding: const EdgeInsets.all(20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _buildHeader(context), + const Divider(), + const SizedBox(height: 16), + Expanded(child: _buildContent()), + ], + ), + ), + ); + } + + Widget _buildHeader(BuildContext context) { + return Row( + children: [ + Icon(Icons.widgets, color: Theme.of(context).primaryColor), + const SizedBox(width: 8), + Text( + '${widget.widgetName} 属性', + style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + ), + const Spacer(), + IconButton( + onPressed: () => Navigator.of(context).pop(), + icon: const Icon(Icons.close), + ), + ], + ); + } + + Widget _buildContent() { + if (_isLoading) return const Center(child: CircularProgressIndicator()); + if (_fields!.isEmpty) return const Center(child: Text('暂无属性信息')); + + return ListView.builder( + itemCount: _fields!.length, + itemBuilder: (context, index) => _buildFieldItem(_fields![index]), + ); + } + + Widget _buildFieldItem(WidgetFieldModel field) { + return Container( + margin: const EdgeInsets.only(bottom: 8), + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Theme.of(context).cardColor, + borderRadius: BorderRadius.circular(8), + border: Border.all(color: Colors.grey.withOpacity(0.2)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + RichText( + text: TextSpan( + children: [ + TextSpan( + text: '${field.fieldName} : ', + style: const TextStyle( + fontWeight: FontWeight.bold, color: Colors.black), + ), + TextSpan( + text: field.fieldType, + style: TextStyle( + fontWeight: FontWeight.bold, + color: Theme.of(context).primaryColor), + ), + ], + ), + ), + // if (field.isRequired) _buildRequiredBadge(), + ], + ), + if (field.fieldDescZh != null) ...[ + const SizedBox(height: 4), + Text( + field.fieldDescZh!, + style: const TextStyle(fontSize: 11, color: Colors.grey), + ), + ], + ], + ), + ); + } + + Widget _buildRequiredBadge() { + return Container( + margin: const EdgeInsets.only(left: 8), + padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 1), + decoration: BoxDecoration( + color: Colors.red, + borderRadius: BorderRadius.circular(4), + ), + child: const Text( + '必需', + style: TextStyle(color: Colors.white, fontSize: 10), + ), + ); + } +} diff --git a/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_fields_page.dart b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_fields_page.dart new file mode 100644 index 000000000..99f7bd7d8 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_fields_page.dart @@ -0,0 +1,160 @@ +import 'package:flutter/material.dart'; +import 'package:widget_repository/widget_repository.dart'; +import 'package:storage/storage.dart'; + +class WidgetFieldsPage extends StatefulWidget { + final int widgetId; + final String widgetName; + + const WidgetFieldsPage({ + super.key, + required this.widgetId, + required this.widgetName, + }); + + @override + State createState() => _WidgetFieldsPageState(); +} + +class _WidgetFieldsPageState extends State { + List? _fields; + bool _isLoading = true; + + @override + void initState() { + super.initState(); + _loadFields(); + } + + Future _loadFields() async { + try { + final repository = const WidgetDbRepository(); + final fields = await repository.loadWidgetFields(widget.widgetId); + // SQL已经按必需属性排序,不需要再次排序 + setState(() { + _isLoading = false; + _fields = fields; + }); + } catch (e) { + setState(() { + _isLoading = false; + _fields = []; + }); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + bottom: PreferredSize( + preferredSize: Size(0, 10), + child: Container( + height: 10, + color: Color(0xfff3f4f6), + )), + title: Text('${widget.widgetName} 属性'), + centerTitle: true, + ), + body: _buildContent(), + ); + } + + Widget _buildContent() { + if (_isLoading) return const Center(child: CircularProgressIndicator()); + if (_fields!.isEmpty) return const Center(child: Text('暂无属性信息')); + + return ListView.separated( + separatorBuilder: (_, __) => Divider(), + itemCount: _fields!.length, + itemBuilder: (context, index) => _buildFieldItem(_fields![index]), + ); + } + + Widget _buildFieldItem(WidgetFieldModel field) { + return Container( + color: Colors.white, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + width: 4, + height: 20, + decoration: BoxDecoration( + color: field.isRequired + ? Colors.red + : Theme.of(context).primaryColor, + borderRadius: BorderRadius.circular(2), + ), + ), + const SizedBox(width: 12), + Expanded( + child: RichText( + text: TextSpan( + children: [ + TextSpan( + text: field.fieldName, + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 14, + color: Colors.black87, + ), + ), + ], + ), + ), + ), + // if (field.isRequired) _buildRequiredBadge(), + ], + ), + const SizedBox(height: 2), + Padding( + padding: const EdgeInsets.only(left: 16), + child: Text( + field.fieldType, + style: TextStyle( + color: Theme.of(context).primaryColor, + fontSize: 14, + fontWeight: FontWeight.w600, + ), + ), + ), + if (field.fieldDescZh != null) ...[ + const SizedBox(height: 8), + Text( + field.fieldDescZh!, + style: const TextStyle( + fontSize: 13, + color: Colors.grey, + height: 1.4, + ), + ), + ], + ], + ), + ), + ); + } + + Widget _buildRequiredBadge() { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + decoration: BoxDecoration( + color: Colors.red, + borderRadius: BorderRadius.circular(12), + ), + child: const Text( + '必需', + style: TextStyle( + color: Colors.white, + fontSize: 11, + fontWeight: FontWeight.w500, + ), + ), + ); + } +} diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_id_view.dart b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_id_view.dart similarity index 58% rename from modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_id_view.dart rename to modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_id_view.dart index 073713ffc..83d592947 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_id_view.dart +++ b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_id_view.dart @@ -1,21 +1,19 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; - -import '../../../widget_module.dart'; +import 'package:widget_repository/widget_repository.dart'; class WidgetIdView extends StatelessWidget { - final WidgetModel model; + final int id; - const WidgetIdView({super.key, required this.model}); + const WidgetIdView({super.key, required this.id}); @override Widget build(BuildContext context) { return Text( - "#${model.id}", + "#$id", maxLines: 1, overflow: TextOverflow.ellipsis, style: const TextStyle( - fontSize: 12, + fontSize: 10, color: Colors.white70, ), ); diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_tiled.dart b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_item.dart similarity index 66% rename from modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_tiled.dart rename to modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_item.dart index 631d5a12f..c6f5d738c 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_tiled.dart +++ b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_item.dart @@ -1,27 +1,42 @@ -import 'package:app/app.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_star/flutter_star.dart'; -import 'package:widget_module/blocs/action/widget_action.dart'; +import 'package:flutter_star/star.dart'; +import 'package:flutter_star/star_score.dart'; +import 'package:tolyui_message/tolyui_message.dart'; import 'package:widget_repository/widget_repository.dart'; import 'package:wrapper/wrapper.dart'; -import 'package:tolyui/tolyui.dart'; -import '../../components/widget_logo_map.dart'; -import '../like_tag.dart'; -import 'package:l10n/l10n.dart'; -import 'widget_id_view.dart'; +import '../../../widget_ui.dart'; -class WidgetTiled extends StatelessWidget { +sealed class WidgetAction {} + +class JumpWidgetDetail extends WidgetAction { + final int? widgetId; + final String? widgetName; + final WidgetModel? model; + + JumpWidgetDetail({ + this.widgetId, + this.model, + this.widgetName, + }); +} + +class ToggleLikeWidget extends WidgetAction { + final int widgetId; + + ToggleLikeWidget(this.widgetId); +} + +/// 组价主页单体的样式 +class WidgetItem extends StatelessWidget { final WidgetModel model; - final VoidCallback onTap; - final String? searchArg; + final ValueChanged onWidget; - const WidgetTiled({ + const WidgetItem({ super.key, required this.model, - required this.onTap, - this.searchArg, + required this.onWidget, }); @override @@ -33,14 +48,16 @@ class WidgetTiled extends StatelessWidget { bool isDark = theme.brightness == Brightness.dark; textColor = isDark ? textColor : const Color(0xff2F3032); Color color = theme.primaryColor; - EdgeInsetsGeometry padding = - const EdgeInsets.symmetric(horizontal: 12, vertical: 8); + EdgeInsetsGeometry padding = const EdgeInsets.symmetric( + horizontal: 12, + vertical: 8, + ); return Stack( children: [ InkWell( borderRadius: BorderRadius.circular(6), - onTap: onTap, + onTap: () => onWidget.call(JumpWidgetDetail(model: model)), child: Ink( decoration: BoxDecoration( color: tileColor, @@ -55,11 +72,14 @@ class WidgetTiled extends StatelessWidget { child: Row( children: [ GestureDetector( - onLongPress: () => context.toggleLike(model.id), + onLongPress: () => onWidget.call(ToggleLikeWidget(model.id)), child: Hero( tag: model.heroId, child: WidgetLogo( - background: color, widgetName: model.name)), + lever: model.lever, + background: color, + widgetName: model.name, + widgetId: model.id)), ), Expanded( child: Padding( @@ -68,7 +88,7 @@ class WidgetTiled extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - _buildTitle(color, textColor, isDark), + listTitle(textColor), _buildContent(textColor), _buildFoot(isDark) ], @@ -79,21 +99,22 @@ class WidgetTiled extends StatelessWidget { ), ), ), - LikeTag(widget: model), - Positioned(bottom: 2, left: 6, child: WidgetIdView(model: model)) + LikeTag(model: model, onWidget: onWidget), ], ); } - Widget linkText(BuildContext context) => Row( - children: [ - const Padding( - padding: EdgeInsets.only(left: 15, right: 5), - child: Icon(Icons.link, color: Colors.blue), - ), - Text(context.l10n.relatedComponents, style: UnitTextStyle.labelBold), - ], - ); + Widget _buildTitle(Color color, Color? textColor, bool isDark) { + return Row( + children: [ + Expanded(child: listTitle(textColor)), + StarScore( + star: Star(emptyColor: Colors.white, size: 12, fillColor: color), + score: model.lever, + ), + ], + ); + } Widget listTitle(Color? textColor) { return GestureDetector( @@ -114,24 +135,6 @@ class WidgetTiled extends StatelessWidget { ); } - Widget _buildTitle(Color color, Color? textColor, bool isDark) { - Widget title; - if (searchArg == null) { - title = listTitle(textColor); - } else { - title = Text.rich(formSpan(model.name, searchArg!)); - } - return Row( - children: [ - Expanded(child: title), - StarScore( - star: Star(emptyColor: Colors.white, size: 12, fillColor: color), - score: model.lever, - ), - ], - ); - } - Widget _buildContent(Color? textColor) { return Padding( padding: const EdgeInsets.symmetric(vertical: 8), @@ -168,7 +171,7 @@ class WidgetTiled extends StatelessWidget { color: isDark ? const Color(0xff292A2D) : const Color(0xffF3F3F5), padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), child: Text( - Cons.kWidgetFamilyLabelMap[model.family]!, + kWidgetFamilyLabelMap[model.family]!, style: TextStyle( color: isDark ? const Color(0xffCCCCCC) : const Color(0xff878D96), @@ -185,25 +188,14 @@ class WidgetTiled extends StatelessWidget { ], ); } - - final TextStyle lightTextStyle = const TextStyle( - color: Colors.red, - fontSize: 16, - fontWeight: FontWeight.bold, - ); - - InlineSpan formSpan(String src, String pattern) { - List span = []; - RegExp regExp = RegExp(pattern, caseSensitive: false); - src.splitMapJoin(regExp, onMatch: (Match match) { - span.add(TextSpan(text: match.group(0), style: lightTextStyle)); - return ''; - }, onNonMatch: (str) { - span.add(TextSpan( - text: str, - style: lightTextStyle.copyWith(color: const Color(0xff2F3032)))); - return ''; - }); - return TextSpan(children: span); - } } + +Map get kWidgetFamilyLabelMap => { + WidgetFamily.stateless: "Stateless", + WidgetFamily.stateful: "Stateful", + WidgetFamily.singleChildRender: "SingleChild", + WidgetFamily.multiChildRender: "MultiChild", + WidgetFamily.sliver: "Sliver", + WidgetFamily.proxy: "Proxy", + WidgetFamily.other: "Other", + }; diff --git a/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_like_tag.dart b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_like_tag.dart new file mode 100644 index 000000000..384f24755 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_like_tag.dart @@ -0,0 +1,43 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:widget_repository/widget_repository.dart'; +import 'package:widget_ui/widget_ui.dart'; + +class LikeTag extends StatelessWidget { + final WidgetModel model; + final ValueChanged onWidget; + + const LikeTag({ + super.key, + required this.model, + required this.onWidget, + }); + + @override + Widget build(BuildContext context) { + bool show = + context.select((LikeWidgetBloc bloc) => bloc.state.contains(model)); + if (show) { + return GestureDetector( + onTap: () => onWidget(ToggleLikeWidget(model.id)), + child: Container( + width: 24, + height: 24, + decoration: BoxDecoration( + color: Colors.white.withValues(alpha: 0.3), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(6), + bottomRight: Radius.circular(8), + )), + child: Icon( + Icons.star, + color: Colors.white, + size: 16, + ), + ), + ); + } + return const SizedBox(); + } +} diff --git a/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_logo.dart b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_logo.dart new file mode 100644 index 000000000..972eefec8 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_logo.dart @@ -0,0 +1,150 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:flutter_star/star.dart'; +import 'package:flutter_star/star_score.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:widget_repository/widget_repository.dart'; +import 'package:fx_env/fx_env.dart'; +import 'package:widget_ui/widget_ui.dart'; +import 'widget_fields_dialog.dart'; +import 'widget_fields_page.dart'; + +class WidgetLogo extends StatelessWidget { + final Color background; + final String widgetName; + final int? widgetId; + final double lever; + final bool inDetail; + + const WidgetLogo({ + super.key, + required this.background, + required this.widgetName, + this.widgetId, + required this.lever, + this.inDetail = false, + }); + + @override + Widget build(BuildContext context) { + return Stack( + children: [ + Container( + width: 110, + height: 110, + alignment: Alignment.center, + decoration: BoxDecoration( + color: background, + gradient: LinearGradient( + transform: const GradientRotation(270 * 180 / pi), + colors: [ + background.withValues(alpha: 0.9), + background.withValues(alpha: 0.5) + ]), + borderRadius: inDetail + ? BorderRadius.circular(6) + : const BorderRadius.only( + topLeft: Radius.circular(6), + bottomLeft: Radius.circular(6)), + ), + child: SvgPicture.asset( + 'assets/images/widgets/${widgetLogo(widgetName)}', + width: 80, + ), + ), + Positioned( + bottom: 4, + left: 6, + child: WidgetIdView( + id: widgetId ?? 0, + )), + Positioned( + top: 6, + right: -4, + child: StarScore( + score: lever, + star: Star(size: 10, fillColor: Colors.white), + ), + ), + if (widgetId != null) _buildFieldCountBadge(context), + ], + ); + } + + Widget _buildFieldCountBadge(BuildContext context) { + final provider = WidgetStatisticsProvider(); + final stats = provider.statistics; + if (stats == null) return const SizedBox.shrink(); + + final fieldCount = stats.getWidgetFieldCount(widgetId!); + if (fieldCount == 0) return const SizedBox.shrink(); + + return Positioned( + right: 0, + bottom: 0, + child: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () => _showFieldsDialog(context), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 6.0, vertical: 4), + child: Text( + '属性:$fieldCount', + style: const TextStyle( + fontSize: 10, + color: Colors.white, + decoration: TextDecoration.underline, + decorationColor: Colors.white, + ), + ), + ), + ), + ); + } + + void _showFieldsDialog(BuildContext context) { + if (kApp.isMobile) { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => WidgetFieldsPage( + widgetId: widgetId!, + widgetName: widgetName, + ), + ), + ); + } else { + showDialog( + context: context, + builder: (context) => WidgetFieldsDialog( + widgetId: widgetId!, + widgetName: widgetName, + ), + ); + } + } +} + +String widgetLogo(String widgetName) { + return switch (widgetName) { + 'Container' => 'Container.svg', + 'Text' => 'Text.svg', + 'GestureDetector' => 'GestureDetector.svg', + 'CircleAvatar' => 'CircleAvatar.svg', + 'Card' => 'Card.svg', + 'ListView' => 'ListView.svg', + 'GridView' => 'GridView.svg', + 'SingleChildScrollView' => 'SingleChildScrollView.svg', + 'PageView' => 'PageView.svg', + 'InputChip' => 'InputChip.svg', + 'Chip' => 'Chip.svg', + 'FilterChip' => 'FilterChip.svg', + 'MaterialButton' => 'MaterialButton.svg', + 'FlutterLogo' => 'FlutterLogo.svg', + 'RichText' => 'RichText.svg', + 'FloatingActionButton' => 'FloatingActionButton.svg', + 'Banner' => 'Banner.svg', + 'Icon' => 'Icon.svg', + _ => 'Widget.svg', + }; +} diff --git a/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_tiled.dart b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_tiled.dart new file mode 100644 index 000000000..e16dd00c6 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_tiled.dart @@ -0,0 +1,5 @@ +export 'widget_item.dart'; +export 'widget_logo.dart'; +export 'widget_id_view.dart'; +export 'widget_like_tag.dart'; +export 'widget_detail_logo.dart'; diff --git a/modules/widget_system/widget_ui/lib/widget_ui.dart b/modules/widget_system/widget_ui/lib/widget_ui.dart new file mode 100644 index 000000000..5c47bd8d0 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/widget_ui.dart @@ -0,0 +1,4 @@ +library; + +export "src/view/view.dart"; +export 'src/bloc/bloc.dart'; diff --git a/modules/widget_system/widget_ui/pubspec.yaml b/modules/widget_system/widget_ui/pubspec.yaml new file mode 100644 index 000000000..4483933e7 --- /dev/null +++ b/modules/widget_system/widget_ui/pubspec.yaml @@ -0,0 +1,64 @@ +name: widget_ui +description: "A new Flutter package project." +version: 0.0.1 +homepage: + +environment: + sdk: ^3.6.1 + flutter: ">=1.17.0" + +dependencies: + flutter: + sdk: flutter + flutter_bloc: ^8.1.6 # 状态管理 + equatable: ^2.0.5 # 相等辅助 + tolyui_message: ^0.2.6+1 + flutter_star: ^1.0.2 # 星星组件 + wrapper: ^1.0.2 # 气泡包裹 + + fx_platform_adapter: 0.0.3 # 平台适配器 + flutter_svg: ^2.0.17 # svg 展示 + widget_repository: + path: ../widget_repository + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^5.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # To add assets to your package, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + # + # For details regarding assets in packages, see + # https://flutter.dev/to/asset-from-package + # + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/to/resolution-aware-images + + # To add custom fonts to your package, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts in packages, see + # https://flutter.dev/to/font-from-package diff --git a/modules/widget_system/widget_ui/test/widget_ui_test.dart b/modules/widget_system/widget_ui/test/widget_ui_test.dart new file mode 100644 index 000000000..849487fbc --- /dev/null +++ b/modules/widget_system/widget_ui/test/widget_ui_test.dart @@ -0,0 +1,5 @@ +import 'package:flutter_test/flutter_test.dart'; + +import 'package:widget_ui/widget_ui.dart'; + +void main() {} diff --git a/pubspec.lock b/pubspec.lock index 2062c8572..23d7ed180 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1383,6 +1383,13 @@ packages: relative: true source: path version: "0.0.1" + widget_ui: + dependency: transitive + description: + path: "modules/widget_system/widget_ui" + relative: true + source: path + version: "0.0.1" win32: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index e62205890..13c9158a4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -97,6 +97,7 @@ flutter: - assets/images/head_icon/ - assets/images/widgets/ - assets/flutter.db + - assets/article.db - assets/version.json fonts: # 配置字体,可配置多个,支持ttf和otf,ttc等字体资源 From c3078c298e79c28e939170041723e578ac04d483 Mon Sep 17 00:00:00 2001 From: toly <1981462002@qq.com> Date: Sat, 6 Sep 2025 11:00:17 +0800 Subject: [PATCH 5/7] fix:readme --- README-EN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README-EN.md b/README-EN.md index f2be1229c..13cf46805 100644 --- a/README-EN.md +++ b/README-EN.md @@ -29,7 +29,7 @@ FlutterUnit is a cross-platform experience app, Here, you can fully explore the --- -### Env and Build +### Env and Build #### Flutter Version From 752e911bb407f41a8bb5c1cbb619aca24ec36f19 Mon Sep 17 00:00:00 2001 From: unknown <1981462002@qq.com> Date: Sun, 14 Sep 2025 08:48:44 +0800 Subject: [PATCH 6/7] fix: flutter 3.35.1 --- assets/article.db | Bin 0 -> 147456 bytes assets/flutter.db | Bin 3702784 -> 2265088 bytes assets/images/widgets/Banner.svg | 10 - assets/images/widgets/Card.svg | 16 - assets/images/widgets/Chip.svg | 10 - assets/images/widgets/Container.svg | 10 - assets/images/widgets/FilterChip.svg | 10 - assets/images/widgets/InputChip.svg | 10 - assets/images/widgets/MaterialButton.svg | 10 - assets/version.json | 2 +- .../view/mobile/unit_navigation.dart | 2 +- lib/src/starter/fx_application.dart | 2 +- lib/src/starter/start_repository.dart | 23 +- .../view/splash/Flutter_unit_splash.dart | 9 +- .../app/lib/app/cons/global_value.dart | 2 +- .../app/lib/app/cons/str_unit.dart | 2 +- .../view/data_manage/data_manage_page.dart | 4 +- .../basic_system/l10n/lib/enum/language.dart | 20 +- .../storage/lib/src/app_storage.dart | 13 +- .../db_storage/flutter/article_db_store.dart | 27 + .../db_storage/flutter/flutter_db_store.dart | 5 +- .../basic_system/toly_ui/lib/ti/panel.dart | 18 +- .../data/repository/article_repository.dart | 2 +- .../data/repository/columnize_repository.dart | 6 +- .../articles/view/article/sliver_article.dart | 3 +- .../lib/src/articles/view/artifact_page.dart | 38 +- .../lib/blocs/action/widget_action.dart | 14 +- .../widget_module/lib/blocs/blocs.dart | 3 +- .../category_widget_bloc.dart | 16 +- .../category_widget_event.dart | 17 +- .../liked_widget_bloc/liked_widget_bloc.dart | 33 - .../liked_widget_bloc/liked_widget_event.dart | 33 - .../liked_widget_bloc/liked_widget_state.dart | 14 - .../widget_detail_bloc.dart | 6 +- .../widget_detail_state.dart | 2 - .../lib/blocs/widgets_bloc/widgets_bloc.dart | 13 +- .../lib/event/widget_statistics_event.dart | 10 + .../lib/views/components/collected_tag.dart | 58 +- .../category_panel/desk_category_page.dart | 146 +- .../category_panel/desk_top_like_panel.dart | 41 +- .../lib/views/desk_ui/like_tag.dart | 40 - .../widget_detail/widget_detail_bar.dart | 68 +- .../widget_detail/widget_detail_page.dart | 25 +- .../widget_detail/widget_detail_panel.dart | 83 +- .../widget_panel/desk_widget_top_bar.dart | 95 +- .../desk_ui/widget_panel/widget_panel.dart | 31 +- .../mobile/category_page/category_page.dart | 58 +- .../category_page/like_widget_page.dart | 51 +- .../category_page/sync/async_button.dart | 4 +- .../search_page/standard_search_page.dart | 37 +- .../widget_detail/category_end_drawer.dart | 4 +- .../widget_detail/widget_detail_bar.dart | 20 +- .../widget_detail/widget_detail_page.dart | 13 +- .../widget_detail/widget_detail_panel.dart | 46 +- .../widget_detail/widget_fields_sliver.dart | 150 + .../widget_page/mobile_widget_tiled.dart | 29 - .../widget_page/phone_widget_content.dart | 20 +- .../widget_page/standard_home_page.dart | 81 +- .../widget_page/standard_home_search.dart | 2 +- .../lib/views/widgets_bloc_provider.dart | 15 +- .../widget_module/lib/widget_module.dart | 2 + .../widget_system/widget_module/pubspec.yaml | 6 +- .../widget_repository/doc/tables_overview.md | 110 + .../lib/src/database/dao/category_dao.dart | 12 +- .../lib/src/database/dao/like_dao.dart | 43 +- .../lib/src/database/dao/widget_dao.dart | 10 + .../database/dao/widget_statistics_dao.dart | 93 + .../lib/src/database/database.dart | 1 + .../db_impl/category_db_repository.dart | 8 +- .../database/db_impl/node_db_repository.dart | 18 +- .../db_impl/widget_db_repository.dart | 6 + .../lib/src/database/po/widget_po.dart | 10 +- .../src/memory/memory_widget_repository.dart | 22 +- .../lib/src/model/model.dart | 4 +- .../lib/src/model/node_model.dart | 4 +- .../lib/src/model/widget_field_model.dart | 49 + .../lib/src/model/widget_model.dart | 25 +- .../lib/src/model/widget_statistics.dart | 52 + .../lib/src/repository/repository.dart | 4 +- .../lib/src/repository/widget_repository.dart | 2 + .../widget_statistics_provider.dart | 90 + .../repository/widget_statistics_service.dart | 57 + .../{widgets => widget_ui}/.gitignore | 4 +- .../{widgets => widget_ui}/.metadata | 4 +- .../{widgets => widget_ui}/CHANGELOG.md | 0 .../{widgets => widget_ui}/LICENSE | 0 .../{widgets => widget_ui}/README.md | 6 +- .../analysis_options.yaml | 0 .../widget_ui/lib/src/bloc/bloc.dart | 1 + .../lib/src/bloc/liked_widget_bloc.dart | 22 + .../widget_ui/lib/src/view/field/filed.dart | 2 + .../src/view/field/widget_fields_dialog.dart | 139 + .../src/view/field/widget_fields_page.dart | 140 + .../lib/src/view/node_tiled/node_tiled.dart | 1 + .../widget_ui/lib/src/view/view.dart | 3 + .../view/widget_tiled/widget_detail_logo.dart | 135 + .../view/widget_tiled}/widget_id_view.dart | 11 +- .../src/view/widget_tiled/widget_item.dart} | 162 +- .../view/widget_tiled/widget_like_tag.dart | 43 + .../src/view/widget_tiled/widget_logo.dart | 246 ++ .../src/view/widget_tiled/widget_tiled.dart | 5 + .../widget_ui/lib/widget_ui.dart | 4 + .../{widgets => widget_ui}/pubspec.yaml | 29 +- .../widget_ui/test/widget_ui_test.dart | 5 + .../AboutDialog/AboutDialog_en-US.json | 1 - .../AboutDialog/AboutDialog_zh-CN.json | 1 - .../AboutListTile/AboutListTile_en-US.json | 1 - .../AboutListTile/AboutListTile_zh-CN.json | 1 - .../AbsorbPointer/AbsorbPointer_en-US.json | 1 - .../AbsorbPointer/AbsorbPointer_zh-CN.json | 1 - .../AbstractLayoutBuilder_en-US.json | 1 - .../AbstractLayoutBuilder_zh-CN.json | 1 - .../widgets/ActionChip/ActionChip_en-US.json | 1 - .../widgets/ActionChip/ActionChip_zh-CN.json | 1 - .../ActionIconTheme_en-US.json | 1 - .../ActionIconTheme_zh-CN.json | 1 - .../ActionListener/ActionListener_en-US.json | 1 - .../ActionListener/ActionListener_zh-CN.json | 1 - .../doc/widgets/Actions/Actions_en-US.json | 1 - .../doc/widgets/Actions/Actions_zh-CN.json | 1 - .../AdaptiveTextSelectionToolbar_en-US.json | 1 - .../AdaptiveTextSelectionToolbar_zh-CN.json | 1 - .../AlertDialog/AlertDialog_en-US.json | 1 - .../AlertDialog/AlertDialog_zh-CN.json | 1 - .../doc/widgets/Align/Align_en-US.json | 1 - .../doc/widgets/Align/Align_zh-CN.json | 1 - .../AlignTransition_en-US.json | 1 - .../AlignTransition_zh-CN.json | 1 - .../AndroidView/AndroidView_en-US.json | 1 - .../AndroidView/AndroidView_zh-CN.json | 1 - .../AndroidViewSurface_en-US.json | 1 - .../AndroidViewSurface_zh-CN.json | 1 - .../AnimatedAlign/AnimatedAlign_en-US.json | 1 - .../AnimatedAlign/AnimatedAlign_zh-CN.json | 1 - .../AnimatedBuilder_en-US.json | 1 - .../AnimatedBuilder_zh-CN.json | 1 - .../AnimatedContainer_en-US.json | 1 - .../AnimatedContainer_zh-CN.json | 1 - .../AnimatedCrossFade_en-US.json | 1 - .../AnimatedCrossFade_zh-CN.json | 1 - .../AnimatedDefaultTextStyle_en-US.json | 1 - .../AnimatedDefaultTextStyle_zh-CN.json | 1 - .../AnimatedFractionallySizedBox_en-US.json | 1 - .../AnimatedFractionallySizedBox_zh-CN.json | 1 - .../AnimatedGrid/AnimatedGrid_en-US.json | 1 - .../AnimatedGrid/AnimatedGrid_zh-CN.json | 1 - .../AnimatedIcon/AnimatedIcon_en-US.json | 1 - .../AnimatedIcon/AnimatedIcon_zh-CN.json | 1 - .../AnimatedList/AnimatedList_en-US.json | 1 - .../AnimatedList/AnimatedList_zh-CN.json | 1 - .../AnimatedModalBarrier_en-US.json | 1 - .../AnimatedModalBarrier_zh-CN.json | 58 - .../AnimatedOpacity_en-US.json | 49 - .../AnimatedOpacity_zh-CN.json | 1 - .../AnimatedPadding_en-US.json | 1 - .../AnimatedPadding_zh-CN.json | 1 - .../AnimatedPhysicalModel_en-US.json | 1 - .../AnimatedPhysicalModel_zh-CN.json | 1 - .../AnimatedPositioned_en-US.json | 1 - .../AnimatedPositioned_zh-CN.json | 1 - .../AnimatedPositionedDirectional_en-US.json | 1 - .../AnimatedPositionedDirectional_zh-CN.json | 1 - .../AnimatedRotation_en-US.json | 1 - .../AnimatedRotation_zh-CN.json | 1 - .../AnimatedScale/AnimatedScale_en-US.json | 1 - .../AnimatedScale/AnimatedScale_zh-CN.json | 1 - .../AnimatedSize/AnimatedSize_en-US.json | 1 - .../AnimatedSize/AnimatedSize_zh-CN.json | 1 - .../AnimatedSlide/AnimatedSlide_en-US.json | 44 - .../AnimatedSlide/AnimatedSlide_zh-CN.json | 45 - .../AnimatedSwitcher_en-US.json | 1 - .../AnimatedSwitcher_zh-CN.json | 1 - .../AnimatedTheme/AnimatedTheme_en-US.json | 1 - .../AnimatedTheme/AnimatedTheme_zh-CN.json | 1 - .../AnimatedWidget/AnimatedWidget_en-US.json | 1 - .../AnimatedWidget/AnimatedWidget_zh-CN.json | 1 - .../AnnotatedRegion_en-US.json | 1 - .../AnnotatedRegion_zh-CN.json | 1 - .../doc/widgets/AppBar/AppBar_en-US.json | 1 - .../doc/widgets/AppBar/AppBar_zh-CN.json | 1 - .../widgets/AppKitView/AppKitView_en-US.json | 1 - .../widgets/AppKitView/AppKitView_zh-CN.json | 1 - .../AspectRatio/AspectRatio_en-US.json | 1 - .../AspectRatio/AspectRatio_zh-CN.json | 1 - .../Autocomplete/Autocomplete_en-US.json | 1 - .../Autocomplete/Autocomplete_zh-CN.json | 1 - .../AutocompleteHighlightedOption_en-US.json | 1 - .../AutocompleteHighlightedOption_zh-CN.json | 1 - .../AutofillGroup/AutofillGroup_en-US.json | 1 - .../AutofillGroup/AutofillGroup_zh-CN.json | 1 - .../AutomaticKeepAlive_en-US.json | 1 - .../AutomaticKeepAlive_zh-CN.json | 1 - .../widgets/BackButton/BackButton_en-US.json | 1 - .../widgets/BackButton/BackButton_zh-CN.json | 1 - .../BackButtonIcon/BackButtonIcon_en-US.json | 1 - .../BackButtonIcon/BackButtonIcon_zh-CN.json | 1 - .../BackButtonListener_en-US.json | 1 - .../BackButtonListener_zh-CN.json | 1 - .../BackdropFilter/BackdropFilter_en-US.json | 1 - .../BackdropFilter/BackdropFilter_zh-CN.json | 1 - .../BackdropGroup/BackdropGroup_en-US.json | 1 - .../BackdropGroup/BackdropGroup_zh-CN.json | 1 - .../doc/widgets/Badge/Badge_en-US.json | 1 - .../doc/widgets/Badge/Badge_zh-CN.json | 1 - .../widgets/BadgeTheme/BadgeTheme_en-US.json | 1 - .../widgets/BadgeTheme/BadgeTheme_zh-CN.json | 1 - .../doc/widgets/Banner/Banner_en-US.json | 1 - .../doc/widgets/Banner/Banner_zh-CN.json | 1 - .../doc/widgets/Baseline/Baseline_en-US.json | 1 - .../doc/widgets/Baseline/Baseline_zh-CN.json | 1 - .../BlockSemantics/BlockSemantics_en-US.json | 1 - .../BlockSemantics/BlockSemantics_zh-CN.json | 1 - .../BottomAppBar/BottomAppBar_en-US.json | 1 - .../BottomAppBar/BottomAppBar_zh-CN.json | 1 - .../BottomNavigationBar_en-US.json | 1 - .../BottomNavigationBar_zh-CN.json | 1 - .../BottomNavigationBarTheme_en-US.json | 1 - .../BottomNavigationBarTheme_zh-CN.json | 1 - .../BottomSheet/BottomSheet_en-US.json | 1 - .../BottomSheet/BottomSheet_zh-CN.json | 1 - .../BoxScrollView/BoxScrollView_en-US.json | 1 - .../BoxScrollView/BoxScrollView_zh-CN.json | 1 - .../doc/widgets/Builder/Builder_en-US.json | 1 - .../doc/widgets/Builder/Builder_zh-CN.json | 1 - .../widgets/ButtonBar/ButtonBar_en-US.json | 1 - .../widgets/ButtonBar/ButtonBar_zh-CN.json | 1 - .../ButtonBarTheme/ButtonBarTheme_en-US.json | 1 - .../ButtonBarTheme/ButtonBarTheme_zh-CN.json | 1 - .../ButtonStyleButton_en-US.json | 1 - .../ButtonStyleButton_zh-CN.json | 84 - .../ButtonTheme/ButtonTheme_en-US.json | 1 - .../ButtonTheme/ButtonTheme_zh-CN.json | 1 - .../CalendarDatePicker_en-US.json | 1 - .../CalendarDatePicker_zh-CN.json | 1 - .../CallbackShortcuts_en-US.json | 1 - .../CallbackShortcuts_zh-CN.json | 1 - .../widgets/doc/widgets/Card/Card_en-US.json | 1 - .../widgets/doc/widgets/Card/Card_zh-CN.json | 1 - .../widgets/CardTheme/CardTheme_en-US.json | 1 - .../widgets/CardTheme/CardTheme_zh-CN.json | 1 - .../CarouselView/CarouselView_en-US.json | 1 - .../CarouselView/CarouselView_zh-CN.json | 1 - .../doc/widgets/Center/Center_en-US.json | 1 - .../doc/widgets/Center/Center_zh-CN.json | 1 - .../doc/widgets/Checkbox/Checkbox_en-US.json | 1 - .../doc/widgets/Checkbox/Checkbox_zh-CN.json | 1 - .../CheckboxListTile_en-US.json | 1 - .../CheckboxListTile_zh-CN.json | 1 - .../CheckboxMenuButton_en-US.json | 1 - .../CheckboxMenuButton_zh-CN.json | 1 - .../CheckboxTheme/CheckboxTheme_en-US.json | 1 - .../CheckboxTheme/CheckboxTheme_zh-CN.json | 1 - .../CheckedModeBanner_en-US.json | 1 - .../CheckedModeBanner_zh-CN.json | 1 - .../CheckedPopupMenuItem_en-US.json | 1 - .../CheckedPopupMenuItem_zh-CN.json | 1 - .../widgets/doc/widgets/Chip/Chip_en-US.json | 1 - .../widgets/doc/widgets/Chip/Chip_zh-CN.json | 1 - .../widgets/ChipTheme/ChipTheme_en-US.json | 1 - .../widgets/ChipTheme/ChipTheme_zh-CN.json | 1 - .../widgets/ChoiceChip/ChoiceChip_en-US.json | 1 - .../widgets/ChoiceChip/ChoiceChip_zh-CN.json | 1 - .../CircleAvatar/CircleAvatar_en-US.json | 1 - .../CircleAvatar/CircleAvatar_zh-CN.json | 1 - .../CircularProgressIndicator_en-US.json | 1 - .../CircularProgressIndicator_zh-CN.json | 67 - .../doc/widgets/ClipOval/ClipOval_en-US.json | 1 - .../doc/widgets/ClipOval/ClipOval_zh-CN.json | 1 - .../doc/widgets/ClipPath/ClipPath_en-US.json | 1 - .../doc/widgets/ClipPath/ClipPath_zh-CN.json | 1 - .../widgets/ClipRRect/ClipRRect_en-US.json | 1 - .../widgets/ClipRRect/ClipRRect_zh-CN.json | 1 - .../ClipRSuperellipse_en-US.json | 1 - .../ClipRSuperellipse_zh-CN.json | 1 - .../doc/widgets/ClipRect/ClipRect_en-US.json | 1 - .../doc/widgets/ClipRect/ClipRect_zh-CN.json | 1 - .../CloseButton/CloseButton_en-US.json | 1 - .../CloseButton/CloseButton_zh-CN.json | 1 - .../CloseButtonIcon_en-US.json | 1 - .../CloseButtonIcon_zh-CN.json | 1 - .../ColorFiltered/ColorFiltered_en-US.json | 1 - .../ColorFiltered/ColorFiltered_zh-CN.json | 1 - .../widgets/ColoredBox/ColoredBox_en-US.json | 1 - .../widgets/ColoredBox/ColoredBox_zh-CN.json | 1 - .../doc/widgets/Column/Column_en-US.json | 1 - .../doc/widgets/Column/Column_zh-CN.json | 1 - .../CompositedTransformFollower_en-US.json | 1 - .../CompositedTransformFollower_zh-CN.json | 1 - .../CompositedTransformTarget_en-US.json | 1 - .../CompositedTransformTarget_zh-CN.json | 1 - .../ConstrainedBox/ConstrainedBox_en-US.json | 1 - .../ConstrainedBox/ConstrainedBox_zh-CN.json | 1 - .../ConstrainedLayoutBuilder_en-US.json | 1 - .../ConstrainedLayoutBuilder_zh-CN.json | 1 - .../ConstraintsTransformBox_en-US.json | 1 - .../ConstraintsTransformBox_zh-CN.json | 1 - .../widgets/Container/Container_en-US.json | 1 - .../widgets/Container/Container_zh-CN.json | 1 - .../CupertinoActionSheet_en-US.json | 1 - .../CupertinoActionSheet_zh-CN.json | 1 - .../CupertinoActionSheetAction_en-US.json | 1 - .../CupertinoActionSheetAction_zh-CN.json | 1 - .../CupertinoActivityIndicator_en-US.json | 1 - .../CupertinoActivityIndicator_zh-CN.json | 1 - ...inoAdaptiveTextSelectionToolbar_en-US.json | 1 - ...inoAdaptiveTextSelectionToolbar_zh-CN.json | 1 - .../CupertinoAlertDialog_en-US.json | 1 - .../CupertinoAlertDialog_zh-CN.json | 1 - .../CupertinoApp/CupertinoApp_en-US.json | 1 - .../CupertinoApp/CupertinoApp_zh-CN.json | 1 - .../CupertinoButton_en-US.json | 1 - .../CupertinoButton_zh-CN.json | 1 - .../CupertinoCheckbox_en-US.json | 1 - .../CupertinoCheckbox_zh-CN.json | 1 - .../CupertinoContextMenu_en-US.json | 1 - .../CupertinoContextMenu_zh-CN.json | 1 - .../CupertinoContextMenuAction_en-US.json | 1 - .../CupertinoContextMenuAction_zh-CN.json | 1 - .../CupertinoDatePicker_en-US.json | 1 - .../CupertinoDatePicker_zh-CN.json | 1 - ...tinoDesktopTextSelectionToolbar_en-US.json | 1 - ...tinoDesktopTextSelectionToolbar_zh-CN.json | 1 - ...sktopTextSelectionToolbarButton_en-US.json | 1 - ...sktopTextSelectionToolbarButton_zh-CN.json | 1 - .../CupertinoDialogAction_en-US.json | 1 - .../CupertinoDialogAction_zh-CN.json | 1 - .../CupertinoFormRow_en-US.json | 1 - .../CupertinoFormRow_zh-CN.json | 1 - .../CupertinoFormSection_en-US.json | 1 - .../CupertinoFormSection_zh-CN.json | 1 - ...rtinoFullscreenDialogTransition_en-US.json | 1 - ...rtinoFullscreenDialogTransition_zh-CN.json | 1 - .../CupertinoListSection_en-US.json | 1 - .../CupertinoListSection_zh-CN.json | 1 - .../CupertinoListTile_en-US.json | 1 - .../CupertinoListTile_zh-CN.json | 1 - .../CupertinoListTileChevron_en-US.json | 1 - .../CupertinoListTileChevron_zh-CN.json | 1 - .../CupertinoMagnifier_en-US.json | 1 - .../CupertinoMagnifier_zh-CN.json | 1 - .../CupertinoNavigationBar_en-US.json | 1 - .../CupertinoNavigationBar_zh-CN.json | 1 - ...upertinoNavigationBarBackButton_en-US.json | 1 - ...upertinoNavigationBarBackButton_zh-CN.json | 1 - .../CupertinoPageScaffold_en-US.json | 1 - .../CupertinoPageScaffold_zh-CN.json | 1 - ...tinoPageScaffoldBackgroundColor_en-US.json | 1 - ...tinoPageScaffoldBackgroundColor_zh-CN.json | 1 - .../CupertinoPageTransition_en-US.json | 1 - .../CupertinoPageTransition_zh-CN.json | 1 - .../CupertinoPicker_en-US.json | 1 - .../CupertinoPicker_zh-CN.json | 1 - ...noPickerDefaultSelectionOverlay_en-US.json | 1 - ...noPickerDefaultSelectionOverlay_zh-CN.json | 1 - .../CupertinoPopupSurface_en-US.json | 1 - .../CupertinoPopupSurface_zh-CN.json | 1 - .../CupertinoRadio/CupertinoRadio_en-US.json | 1 - .../CupertinoRadio/CupertinoRadio_zh-CN.json | 1 - .../CupertinoScrollbar_en-US.json | 1 - .../CupertinoScrollbar_zh-CN.json | 1 - .../CupertinoSearchTextField_en-US.json | 1 - .../CupertinoSearchTextField_zh-CN.json | 1 - .../CupertinoSegmentedControl_en-US.json | 1 - .../CupertinoSegmentedControl_zh-CN.json | 1 - .../CupertinoSheetTransition_en-US.json | 1 - .../CupertinoSheetTransition_zh-CN.json | 1 - .../CupertinoSlider_en-US.json | 1 - .../CupertinoSlider_zh-CN.json | 1 - ...upertinoSlidingSegmentedControl_en-US.json | 1 - ...upertinoSlidingSegmentedControl_zh-CN.json | 1 - .../CupertinoSliverNavigationBar_en-US.json | 1 - .../CupertinoSliverNavigationBar_zh-CN.json | 1 - .../CupertinoSliverRefreshControl_en-US.json | 1 - .../CupertinoSliverRefreshControl_zh-CN.json | 1 - ...inoSpellCheckSuggestionsToolbar_en-US.json | 1 - ...inoSpellCheckSuggestionsToolbar_zh-CN.json | 1 - .../CupertinoSwitch_en-US.json | 1 - .../CupertinoSwitch_zh-CN.json | 1 - .../CupertinoTabBar_en-US.json | 1 - .../CupertinoTabBar_zh-CN.json | 1 - .../CupertinoTabScaffold_en-US.json | 1 - .../CupertinoTabScaffold_zh-CN.json | 1 - .../CupertinoTabView_en-US.json | 1 - .../CupertinoTabView_zh-CN.json | 1 - .../CupertinoTextField_en-US.json | 1 - .../CupertinoTextField_zh-CN.json | 1 - .../CupertinoTextFormFieldRow_en-US.json | 1 - .../CupertinoTextFormFieldRow_zh-CN.json | 1 - .../CupertinoTextMagnifier_en-US.json | 1 - .../CupertinoTextMagnifier_zh-CN.json | 1 - .../CupertinoTextSelectionToolbar_en-US.json | 1 - .../CupertinoTextSelectionToolbar_zh-CN.json | 1 - ...rtinoTextSelectionToolbarButton_en-US.json | 1 - ...rtinoTextSelectionToolbarButton_zh-CN.json | 1 - .../CupertinoTheme/CupertinoTheme_en-US.json | 1 - .../CupertinoTheme/CupertinoTheme_zh-CN.json | 1 - .../CupertinoTimerPicker_en-US.json | 1 - .../CupertinoTimerPicker_zh-CN.json | 1 - .../CupertinoUserInterfaceLevel_en-US.json | 1 - .../CupertinoUserInterfaceLevel_zh-CN.json | 1 - .../CustomMultiChildLayout_en-US.json | 1 - .../CustomMultiChildLayout_zh-CN.json | 1 - .../CustomPaint/CustomPaint_en-US.json | 1 - .../CustomPaint/CustomPaint_zh-CN.json | 1 - .../CustomScrollView_en-US.json | 1 - .../CustomScrollView_zh-CN.json | 1 - .../CustomSingleChildLayout_en-US.json | 1 - .../CustomSingleChildLayout_zh-CN.json | 1 - .../widgets/DataTable/DataTable_en-US.json | 1 - .../widgets/DataTable/DataTable_zh-CN.json | 1 - .../DataTableTheme/DataTableTheme_en-US.json | 1 - .../DataTableTheme/DataTableTheme_zh-CN.json | 1 - .../DatePickerDialog_en-US.json | 1 - .../DatePickerDialog_zh-CN.json | 1 - .../DatePickerTheme_en-US.json | 1 - .../DatePickerTheme_zh-CN.json | 1 - .../DateRangePickerDialog_en-US.json | 1 - .../DateRangePickerDialog_zh-CN.json | 1 - .../DecoratedBox/DecoratedBox_en-US.json | 1 - .../DecoratedBox/DecoratedBox_zh-CN.json | 1 - .../DecoratedBoxTransition_en-US.json | 1 - .../DecoratedBoxTransition_zh-CN.json | 1 - .../DecoratedSliver_en-US.json | 1 - .../DecoratedSliver_zh-CN.json | 1 - .../DefaultAssetBundle_en-US.json | 1 - .../DefaultAssetBundle_zh-CN.json | 1 - .../DefaultSelectionStyle_en-US.json | 1 - .../DefaultSelectionStyle_zh-CN.json | 1 - .../DefaultTabController_en-US.json | 1 - .../DefaultTabController_zh-CN.json | 1 - .../DefaultTextEditingShortcuts_en-US.json | 1 - .../DefaultTextEditingShortcuts_zh-CN.json | 1 - .../DefaultTextHeightBehavior_en-US.json | 1 - .../DefaultTextHeightBehavior_zh-CN.json | 1 - .../DefaultTextStyle_en-US.json | 1 - .../DefaultTextStyle_zh-CN.json | 1 - .../DefaultTextStyleTransition_en-US.json | 1 - .../DefaultTextStyleTransition_zh-CN.json | 1 - .../DesktopTextSelectionToolbar_en-US.json | 1 - .../DesktopTextSelectionToolbar_zh-CN.json | 1 - ...sktopTextSelectionToolbarButton_en-US.json | 1 - ...sktopTextSelectionToolbarButton_zh-CN.json | 1 - .../doc/widgets/Dialog/Dialog_en-US.json | 1 - .../doc/widgets/Dialog/Dialog_zh-CN.json | 1 - .../DialogTheme/DialogTheme_en-US.json | 1 - .../DialogTheme/DialogTheme_zh-CN.json | 1 - .../Directionality/Directionality_en-US.json | 1 - .../Directionality/Directionality_zh-CN.json | 1 - .../Dismissible/Dismissible_en-US.json | 1 - .../Dismissible/Dismissible_zh-CN.json | 1 - .../DisplayFeatureSubScreen_en-US.json | 1 - .../DisplayFeatureSubScreen_zh-CN.json | 1 - .../doc/widgets/Divider/Divider_en-US.json | 1 - .../doc/widgets/Divider/Divider_zh-CN.json | 1 - .../DividerTheme/DividerTheme_en-US.json | 1 - .../DividerTheme/DividerTheme_zh-CN.json | 1 - .../DragBoundary/DragBoundary_en-US.json | 1 - .../DragBoundary/DragBoundary_zh-CN.json | 1 - .../widgets/DragTarget/DragTarget_en-US.json | 1 - .../widgets/DragTarget/DragTarget_zh-CN.json | 1 - .../widgets/Draggable/Draggable_en-US.json | 1 - .../widgets/Draggable/Draggable_zh-CN.json | 1 - .../DraggableScrollableActuator_en-US.json | 1 - .../DraggableScrollableActuator_zh-CN.json | 1 - .../DraggableScrollableSheet_en-US.json | 1 - .../DraggableScrollableSheet_zh-CN.json | 1 - .../doc/widgets/Drawer/Drawer_en-US.json | 1 - .../doc/widgets/Drawer/Drawer_zh-CN.json | 1 - .../DrawerButton/DrawerButton_en-US.json | 1 - .../DrawerButton/DrawerButton_zh-CN.json | 1 - .../DrawerButtonIcon_en-US.json | 1 - .../DrawerButtonIcon_zh-CN.json | 1 - .../DrawerController_en-US.json | 1 - .../DrawerController_zh-CN.json | 1 - .../DrawerHeader/DrawerHeader_en-US.json | 1 - .../DrawerHeader/DrawerHeader_zh-CN.json | 1 - .../DrawerTheme/DrawerTheme_en-US.json | 1 - .../DrawerTheme/DrawerTheme_zh-CN.json | 1 - .../DropdownButton/DropdownButton_en-US.json | 1 - .../DropdownButton/DropdownButton_zh-CN.json | 1 - .../DropdownButtonFormField_en-US.json | 1 - .../DropdownButtonFormField_zh-CN.json | 1 - .../DropdownButtonHideUnderline_en-US.json | 1 - .../DropdownButtonHideUnderline_zh-CN.json | 1 - .../DropdownMenu/DropdownMenu_en-US.json | 1 - .../DropdownMenu/DropdownMenu_zh-CN.json | 1 - .../DropdownMenuItem_en-US.json | 1 - .../DropdownMenuItem_zh-CN.json | 1 - .../DropdownMenuTheme_en-US.json | 1 - .../DropdownMenuTheme_zh-CN.json | 1 - .../DualTransitionBuilder_en-US.json | 1 - .../DualTransitionBuilder_zh-CN.json | 1 - .../EditableText/EditableText_en-US.json | 1 - .../EditableText/EditableText_zh-CN.json | 1 - .../ElevatedButton/ElevatedButton_en-US.json | 1 - .../ElevatedButton/ElevatedButton_zh-CN.json | 1 - .../ElevatedButtonTheme_en-US.json | 1 - .../ElevatedButtonTheme_zh-CN.json | 1 - .../EndDrawerButton_en-US.json | 1 - .../EndDrawerButton_zh-CN.json | 1 - .../EndDrawerButtonIcon_en-US.json | 1 - .../EndDrawerButtonIcon_zh-CN.json | 1 - .../ErrorWidget/ErrorWidget_en-US.json | 1 - .../ErrorWidget/ErrorWidget_zh-CN.json | 1 - .../ExcludeFocus/ExcludeFocus_en-US.json | 1 - .../ExcludeFocus/ExcludeFocus_zh-CN.json | 1 - .../ExcludeFocusTraversal_en-US.json | 1 - .../ExcludeFocusTraversal_zh-CN.json | 1 - .../ExcludeSemantics_en-US.json | 1 - .../ExcludeSemantics_zh-CN.json | 1 - .../widgets/ExpandIcon/ExpandIcon_en-US.json | 1 - .../widgets/ExpandIcon/ExpandIcon_zh-CN.json | 1 - .../doc/widgets/Expanded/Expanded_en-US.json | 1 - .../doc/widgets/Expanded/Expanded_zh-CN.json | 1 - .../widgets/Expansible/Expansible_en-US.json | 1 - .../widgets/Expansible/Expansible_zh-CN.json | 1 - .../ExpansionPanelList_en-US.json | 1 - .../ExpansionPanelList_zh-CN.json | 1 - .../ExpansionTile/ExpansionTile_en-US.json | 1 - .../ExpansionTile/ExpansionTile_zh-CN.json | 1 - .../ExpansionTileTheme_en-US.json | 1 - .../ExpansionTileTheme_zh-CN.json | 1 - .../FadeInImage/FadeInImage_en-US.json | 1 - .../FadeInImage/FadeInImage_zh-CN.json | 1 - .../FadeTransition/FadeTransition_en-US.json | 1 - .../FadeTransition/FadeTransition_zh-CN.json | 1 - .../FilledButton/FilledButton_en-US.json | 1 - .../FilledButton/FilledButton_zh-CN.json | 1 - .../FilledButtonTheme_en-US.json | 1 - .../FilledButtonTheme_zh-CN.json | 1 - .../widgets/FilterChip/FilterChip_en-US.json | 1 - .../widgets/FilterChip/FilterChip_zh-CN.json | 1 - .../widgets/FittedBox/FittedBox_en-US.json | 1 - .../widgets/FittedBox/FittedBox_zh-CN.json | 1 - .../widgets/doc/widgets/Flex/Flex_en-US.json | 1 - .../widgets/doc/widgets/Flex/Flex_zh-CN.json | 1 - .../doc/widgets/Flexible/Flexible_en-US.json | 1 - .../doc/widgets/Flexible/Flexible_zh-CN.json | 1 - .../FlexibleSpaceBar_en-US.json | 1 - .../FlexibleSpaceBar_zh-CN.json | 1 - .../FlexibleSpaceBarSettings_en-US.json | 1 - .../FlexibleSpaceBarSettings_zh-CN.json | 1 - .../FloatingActionButton_en-US.json | 1 - .../FloatingActionButton_zh-CN.json | 1 - .../widgets/doc/widgets/Flow/Flow_en-US.json | 1 - .../widgets/doc/widgets/Flow/Flow_zh-CN.json | 1 - .../FlutterLogo/FlutterLogo_en-US.json | 1 - .../FlutterLogo/FlutterLogo_zh-CN.json | 1 - .../doc/widgets/Focus/Focus_en-US.json | 1 - .../doc/widgets/Focus/Focus_zh-CN.json | 1 - .../widgets/FocusScope/FocusScope_en-US.json | 1 - .../widgets/FocusScope/FocusScope_zh-CN.json | 1 - .../FocusTraversalGroup_en-US.json | 1 - .../FocusTraversalGroup_zh-CN.json | 1 - .../FocusTraversalOrder_en-US.json | 1 - .../FocusTraversalOrder_zh-CN.json | 1 - .../FocusableActionDetector_en-US.json | 1 - .../FocusableActionDetector_zh-CN.json | 1 - .../widgets/doc/widgets/Form/Form_en-US.json | 1 - .../widgets/doc/widgets/Form/Form_zh-CN.json | 1 - .../widgets/FormField/FormField_en-US.json | 1 - .../widgets/FormField/FormField_zh-CN.json | 1 - .../FractionalTranslation_en-US.json | 1 - .../FractionalTranslation_zh-CN.json | 1 - .../FractionallySizedBox_en-US.json | 1 - .../FractionallySizedBox_zh-CN.json | 1 - .../FutureBuilder/FutureBuilder_en-US.json | 1 - .../FutureBuilder/FutureBuilder_zh-CN.json | 1 - .../GestureDetector_en-US.json | 1 - .../GestureDetector_zh-CN.json | 1 - .../GlowingOverscrollIndicator_en-US.json | 1 - .../GlowingOverscrollIndicator_zh-CN.json | 1 - .../widgets/GridPaper/GridPaper_en-US.json | 1 - .../widgets/GridPaper/GridPaper_zh-CN.json | 1 - .../doc/widgets/GridTile/GridTile_en-US.json | 1 - .../doc/widgets/GridTile/GridTile_zh-CN.json | 1 - .../GridTileBar/GridTileBar_en-US.json | 1 - .../GridTileBar/GridTileBar_zh-CN.json | 1 - .../doc/widgets/GridView/GridView_en-US.json | 1 - .../doc/widgets/GridView/GridView_zh-CN.json | 1 - .../widgets/doc/widgets/Hero/Hero_en-US.json | 1 - .../widgets/doc/widgets/Hero/Hero_zh-CN.json | 1 - .../HeroControllerScope_en-US.json | 1 - .../HeroControllerScope_zh-CN.json | 1 - .../doc/widgets/HeroMode/HeroMode_en-US.json | 1 - .../doc/widgets/HeroMode/HeroMode_zh-CN.json | 1 - .../HtmlElementView_en-US.json | 1 - .../HtmlElementView_zh-CN.json | 1 - .../widgets/doc/widgets/Icon/Icon_en-US.json | 1 - .../widgets/doc/widgets/Icon/Icon_zh-CN.json | 1 - .../widgets/IconButton/IconButton_en-US.json | 1 - .../widgets/IconButton/IconButton_zh-CN.json | 1 - .../IconButtonTheme_en-US.json | 1 - .../IconButtonTheme_zh-CN.json | 1 - .../widgets/IconTheme/IconTheme_en-US.json | 1 - .../widgets/IconTheme/IconTheme_zh-CN.json | 1 - .../IgnoreBaseline/IgnoreBaseline_en-US.json | 1 - .../IgnoreBaseline/IgnoreBaseline_zh-CN.json | 1 - .../IgnorePointer/IgnorePointer_en-US.json | 1 - .../IgnorePointer/IgnorePointer_zh-CN.json | 1 - .../doc/widgets/Image/Image_en-US.json | 1 - .../doc/widgets/Image/Image_zh-CN.json | 1 - .../ImageFiltered/ImageFiltered_en-US.json | 1 - .../ImageFiltered/ImageFiltered_zh-CN.json | 1 - .../widgets/ImageIcon/ImageIcon_en-US.json | 1 - .../widgets/ImageIcon/ImageIcon_zh-CN.json | 1 - .../ImgElementPlatformView_en-US.json | 1 - .../ImgElementPlatformView_zh-CN.json | 1 - .../ImplicitlyAnimatedWidget_en-US.json | 1 - .../ImplicitlyAnimatedWidget_zh-CN.json | 1 - .../IndexedSemantics_en-US.json | 1 - .../IndexedSemantics_zh-CN.json | 1 - .../IndexedStack/IndexedStack_en-US.json | 1 - .../IndexedStack/IndexedStack_zh-CN.json | 1 - .../InheritedCupertinoTheme_en-US.json | 1 - .../InheritedCupertinoTheme_zh-CN.json | 1 - .../InheritedModel/InheritedModel_en-US.json | 1 - .../InheritedModel/InheritedModel_zh-CN.json | 1 - .../InheritedNotifier_en-US.json | 1 - .../InheritedNotifier_zh-CN.json | 1 - .../InheritedTheme/InheritedTheme_en-US.json | 1 - .../InheritedTheme/InheritedTheme_zh-CN.json | 1 - .../InheritedWidget_en-US.json | 1 - .../InheritedWidget_zh-CN.json | 1 - .../widgets/doc/widgets/Ink/Ink_en-US.json | 1 - .../widgets/doc/widgets/Ink/Ink_zh-CN.json | 1 - .../InkResponse/InkResponse_en-US.json | 1 - .../InkResponse/InkResponse_zh-CN.json | 1 - .../doc/widgets/InkWell/InkWell_en-US.json | 1 - .../doc/widgets/InkWell/InkWell_zh-CN.json | 1 - .../widgets/InputChip/InputChip_en-US.json | 1 - .../widgets/InputChip/InputChip_zh-CN.json | 1 - .../InputDatePickerFormField_en-US.json | 1 - .../InputDatePickerFormField_zh-CN.json | 1 - .../InputDecorator/InputDecorator_en-US.json | 1 - .../InputDecorator/InputDecorator_zh-CN.json | 1 - .../InspectorButton_en-US.json | 1 - .../InspectorButton_zh-CN.json | 1 - .../InteractiveViewer_en-US.json | 1 - .../InteractiveViewer_zh-CN.json | 1 - .../IntrinsicHeight_en-US.json | 1 - .../IntrinsicHeight_zh-CN.json | 1 - .../IntrinsicWidth/IntrinsicWidth_en-US.json | 1 - .../IntrinsicWidth/IntrinsicWidth_zh-CN.json | 1 - .../widgets/KeepAlive/KeepAlive_en-US.json | 1 - .../widgets/KeepAlive/KeepAlive_zh-CN.json | 1 - .../KeyboardListener_en-US.json | 1 - .../KeyboardListener_zh-CN.json | 1 - .../KeyedSubtree/KeyedSubtree_en-US.json | 1 - .../KeyedSubtree/KeyedSubtree_zh-CN.json | 1 - .../LayoutBuilder/LayoutBuilder_en-US.json | 1 - .../LayoutBuilder/LayoutBuilder_zh-CN.json | 1 - .../doc/widgets/LayoutId/LayoutId_en-US.json | 1 - .../doc/widgets/LayoutId/LayoutId_zh-CN.json | 1 - .../LeafRenderObjectWidget_en-US.json | 1 - .../LeafRenderObjectWidget_zh-CN.json | 1 - .../LicensePage/LicensePage_en-US.json | 1 - .../LicensePage/LicensePage_zh-CN.json | 1 - .../widgets/LimitedBox/LimitedBox_en-US.json | 1 - .../widgets/LimitedBox/LimitedBox_zh-CN.json | 1 - .../LinearProgressIndicator_en-US.json | 1 - .../LinearProgressIndicator_zh-CN.json | 1 - .../doc/widgets/ListBody/ListBody_en-US.json | 1 - .../doc/widgets/ListBody/ListBody_zh-CN.json | 1 - .../doc/widgets/ListTile/ListTile_en-US.json | 1 - .../doc/widgets/ListTile/ListTile_zh-CN.json | 1 - .../ListTileTheme/ListTileTheme_en-US.json | 1 - .../ListTileTheme/ListTileTheme_zh-CN.json | 1 - .../doc/widgets/ListView/ListView_en-US.json | 1 - .../doc/widgets/ListView/ListView_zh-CN.json | 1 - .../ListWheelScrollView_en-US.json | 1 - .../ListWheelScrollView_zh-CN.json | 1 - .../ListWheelViewport_en-US.json | 1 - .../ListWheelViewport_zh-CN.json | 1 - .../ListenableBuilder_en-US.json | 1 - .../ListenableBuilder_zh-CN.json | 1 - .../doc/widgets/Listener/Listener_en-US.json | 1 - .../doc/widgets/Listener/Listener_zh-CN.json | 1 - .../Localizations/Localizations_en-US.json | 1 - .../Localizations/Localizations_zh-CN.json | 1 - .../LongPressDraggable_en-US.json | 1 - .../LongPressDraggable_zh-CN.json | 1 - .../LookupBoundary/LookupBoundary_en-US.json | 1 - .../LookupBoundary/LookupBoundary_zh-CN.json | 1 - .../widgets/Magnifier/Magnifier_en-US.json | 1 - .../widgets/Magnifier/Magnifier_zh-CN.json | 1 - .../doc/widgets/Material/Material_en-US.json | 1 - .../doc/widgets/Material/Material_zh-CN.json | 1 - .../MaterialApp/MaterialApp_en-US.json | 1 - .../MaterialApp/MaterialApp_zh-CN.json | 1 - .../MaterialBanner/MaterialBanner_en-US.json | 1 - .../MaterialBanner/MaterialBanner_zh-CN.json | 1 - .../MaterialBannerTheme_en-US.json | 1 - .../MaterialBannerTheme_zh-CN.json | 1 - .../MaterialButton/MaterialButton_en-US.json | 1 - .../MaterialButton/MaterialButton_zh-CN.json | 1 - .../MatrixTransition_en-US.json | 1 - .../MatrixTransition_zh-CN.json | 1 - .../widgets/MediaQuery/MediaQuery_en-US.json | 1 - .../widgets/MediaQuery/MediaQuery_zh-CN.json | 1 - .../MenuAcceleratorCallbackBinding_en-US.json | 1 - .../MenuAcceleratorCallbackBinding_zh-CN.json | 1 - .../MenuAcceleratorLabel_en-US.json | 1 - .../MenuAcceleratorLabel_zh-CN.json | 1 - .../widgets/MenuAnchor/MenuAnchor_en-US.json | 1 - .../widgets/MenuAnchor/MenuAnchor_zh-CN.json | 1 - .../doc/widgets/MenuBar/MenuBar_en-US.json | 1 - .../doc/widgets/MenuBar/MenuBar_zh-CN.json | 1 - .../MenuBarTheme/MenuBarTheme_en-US.json | 1 - .../MenuBarTheme/MenuBarTheme_zh-CN.json | 1 - .../MenuButtonTheme_en-US.json | 1 - .../MenuButtonTheme_zh-CN.json | 1 - .../MenuItemButton/MenuItemButton_en-US.json | 1 - .../MenuItemButton/MenuItemButton_zh-CN.json | 1 - .../widgets/MenuTheme/MenuTheme_en-US.json | 1 - .../widgets/MenuTheme/MenuTheme_zh-CN.json | 1 - .../MergeSemantics/MergeSemantics_en-US.json | 1 - .../MergeSemantics/MergeSemantics_zh-CN.json | 1 - .../MergeableMaterial_en-US.json | 1 - .../MergeableMaterial_zh-CN.json | 1 - .../doc/widgets/MetaData/MetaData_en-US.json | 1 - .../doc/widgets/MetaData/MetaData_zh-CN.json | 1 - .../ModalBarrier/ModalBarrier_en-US.json | 1 - .../ModalBarrier/ModalBarrier_zh-CN.json | 1 - .../MouseRegion/MouseRegion_en-US.json | 1 - .../MouseRegion/MouseRegion_zh-CN.json | 1 - .../MultiChildRenderObjectWidget_en-US.json | 1 - .../MultiChildRenderObjectWidget_zh-CN.json | 1 - .../NavigationBar/NavigationBar_en-US.json | 1 - .../NavigationBar/NavigationBar_zh-CN.json | 1 - .../NavigationBarTheme_en-US.json | 1 - .../NavigationBarTheme_zh-CN.json | 1 - .../NavigationDestination_en-US.json | 1 - .../NavigationDestination_zh-CN.json | 1 - .../NavigationDrawer_en-US.json | 1 - .../NavigationDrawer_zh-CN.json | 1 - .../NavigationDrawerDestination_en-US.json | 1 - .../NavigationDrawerDestination_zh-CN.json | 1 - .../NavigationDrawerTheme_en-US.json | 1 - .../NavigationDrawerTheme_zh-CN.json | 1 - .../NavigationIndicator_en-US.json | 1 - .../NavigationIndicator_zh-CN.json | 1 - .../NavigationRail/NavigationRail_en-US.json | 1 - .../NavigationRail/NavigationRail_zh-CN.json | 1 - .../NavigationRailTheme_en-US.json | 1 - .../NavigationRailTheme_zh-CN.json | 1 - .../NavigationToolbar_en-US.json | 1 - .../NavigationToolbar_zh-CN.json | 1 - .../widgets/Navigator/Navigator_en-US.json | 1 - .../widgets/Navigator/Navigator_zh-CN.json | 1 - .../NavigatorPopHandler_en-US.json | 1 - .../NavigatorPopHandler_zh-CN.json | 1 - .../NestedScrollView_en-US.json | 1 - .../NestedScrollView_zh-CN.json | 1 - .../NestedScrollViewViewport_en-US.json | 1 - .../NestedScrollViewViewport_zh-CN.json | 1 - .../NotificationListener_en-US.json | 1 - .../NotificationListener_zh-CN.json | 1 - .../ObstructingPreferredSizeWidget_en-US.json | 1 - .../ObstructingPreferredSizeWidget_zh-CN.json | 1 - .../doc/widgets/Offstage/Offstage_en-US.json | 1 - .../doc/widgets/Offstage/Offstage_zh-CN.json | 1 - .../doc/widgets/Opacity/Opacity_en-US.json | 1 - .../doc/widgets/Opacity/Opacity_zh-CN.json | 1 - .../OrientationBuilder_en-US.json | 1 - .../OrientationBuilder_zh-CN.json | 1 - .../OutlinedButton/OutlinedButton_en-US.json | 1 - .../OutlinedButton/OutlinedButton_zh-CN.json | 1 - .../OutlinedButtonTheme_en-US.json | 1 - .../OutlinedButtonTheme_zh-CN.json | 1 - .../OverflowBar/OverflowBar_en-US.json | 1 - .../OverflowBar/OverflowBar_zh-CN.json | 1 - .../OverflowBox/OverflowBox_en-US.json | 1 - .../OverflowBox/OverflowBox_zh-CN.json | 1 - .../doc/widgets/Overlay/Overlay_en-US.json | 1 - .../doc/widgets/Overlay/Overlay_zh-CN.json | 1 - .../OverlayPortal/OverlayPortal_en-US.json | 1 - .../OverlayPortal/OverlayPortal_zh-CN.json | 1 - .../doc/widgets/Padding/Padding_en-US.json | 1 - .../doc/widgets/Padding/Padding_zh-CN.json | 1 - .../PageStorage/PageStorage_en-US.json | 1 - .../PageStorage/PageStorage_zh-CN.json | 1 - .../doc/widgets/PageView/PageView_en-US.json | 1 - .../doc/widgets/PageView/PageView_zh-CN.json | 1 - .../PaginatedDataTable_en-US.json | 1 - .../PaginatedDataTable_zh-CN.json | 1 - .../ParentDataWidget_en-US.json | 1 - .../ParentDataWidget_zh-CN.json | 1 - .../PerformanceOverlay_en-US.json | 1 - .../PerformanceOverlay_zh-CN.json | 1 - .../PhysicalModel/PhysicalModel_en-US.json | 1 - .../PhysicalModel/PhysicalModel_zh-CN.json | 1 - .../PhysicalShape/PhysicalShape_en-US.json | 1 - .../PhysicalShape/PhysicalShape_zh-CN.json | 1 - .../PinnedHeaderSliver_en-US.json | 1 - .../PinnedHeaderSliver_zh-CN.json | 1 - .../Placeholder/Placeholder_en-US.json | 1 - .../Placeholder/Placeholder_zh-CN.json | 1 - .../PlatformMenuBar_en-US.json | 1 - .../PlatformMenuBar_zh-CN.json | 1 - ...formSelectableRegionContextMenu_en-US.json | 1 - ...formSelectableRegionContextMenu_zh-CN.json | 1 - .../PlatformViewLink_en-US.json | 1 - .../PlatformViewLink_zh-CN.json | 1 - .../PlatformViewSurface_en-US.json | 1 - .../PlatformViewSurface_zh-CN.json | 1 - .../doc/widgets/PopScope/PopScope_en-US.json | 1 - .../doc/widgets/PopScope/PopScope_zh-CN.json | 1 - .../PopupMenuButton_en-US.json | 1 - .../PopupMenuButton_zh-CN.json | 1 - .../PopupMenuDivider_en-US.json | 1 - .../PopupMenuDivider_zh-CN.json | 1 - .../PopupMenuEntry/PopupMenuEntry_en-US.json | 1 - .../PopupMenuEntry/PopupMenuEntry_zh-CN.json | 1 - .../PopupMenuItem/PopupMenuItem_en-US.json | 1 - .../PopupMenuItem/PopupMenuItem_zh-CN.json | 1 - .../PopupMenuTheme/PopupMenuTheme_en-US.json | 1 - .../PopupMenuTheme/PopupMenuTheme_zh-CN.json | 1 - .../widgets/Positioned/Positioned_en-US.json | 1 - .../widgets/Positioned/Positioned_zh-CN.json | 1 - .../PositionedDirectional_en-US.json | 1 - .../PositionedDirectional_zh-CN.json | 1 - .../PositionedTransition_en-US.json | 1 - .../PositionedTransition_zh-CN.json | 1 - .../PreferredSize/PreferredSize_en-US.json | 1 - .../PreferredSize/PreferredSize_zh-CN.json | 1 - .../PreferredSizeWidget_en-US.json | 1 - .../PreferredSizeWidget_zh-CN.json | 1 - .../PrimaryScrollController_en-US.json | 1 - .../PrimaryScrollController_zh-CN.json | 1 - .../ProgressIndicator_en-US.json | 1 - .../ProgressIndicator_zh-CN.json | 1 - .../ProgressIndicatorTheme_en-US.json | 1 - .../ProgressIndicatorTheme_zh-CN.json | 1 - .../ProxyWidget/ProxyWidget_en-US.json | 1 - .../ProxyWidget/ProxyWidget_zh-CN.json | 1 - .../doc/widgets/Radio/Radio_en-US.json | 1 - .../doc/widgets/Radio/Radio_zh-CN.json | 1 - .../RadioListTile/RadioListTile_en-US.json | 1 - .../RadioListTile/RadioListTile_zh-CN.json | 1 - .../RadioMenuButton_en-US.json | 1 - .../RadioMenuButton_zh-CN.json | 1 - .../widgets/RadioTheme/RadioTheme_en-US.json | 1 - .../widgets/RadioTheme/RadioTheme_zh-CN.json | 1 - .../RangeSlider/RangeSlider_en-US.json | 1 - .../RangeSlider/RangeSlider_zh-CN.json | 1 - .../RawAutocomplete_en-US.json | 1 - .../RawAutocomplete_zh-CN.json | 1 - .../doc/widgets/RawChip/RawChip_en-US.json | 1 - .../doc/widgets/RawChip/RawChip_zh-CN.json | 1 - .../RawGestureDetector_en-US.json | 1 - .../RawGestureDetector_zh-CN.json | 1 - .../doc/widgets/RawImage/RawImage_en-US.json | 1 - .../doc/widgets/RawImage/RawImage_zh-CN.json | 1 - .../RawKeyboardListener_en-US.json | 1 - .../RawKeyboardListener_zh-CN.json | 1 - .../RawMagnifier/RawMagnifier_en-US.json | 1 - .../RawMagnifier/RawMagnifier_zh-CN.json | 1 - .../RawMaterialButton_en-US.json | 1 - .../RawMaterialButton_zh-CN.json | 1 - .../RawMenuAnchor/RawMenuAnchor_en-US.json | 1 - .../RawMenuAnchor/RawMenuAnchor_zh-CN.json | 1 - .../RawMenuAnchorGroup_en-US.json | 1 - .../RawMenuAnchorGroup_zh-CN.json | 1 - .../RawScrollbar/RawScrollbar_en-US.json | 1 - .../RawScrollbar/RawScrollbar_zh-CN.json | 1 - .../doc/widgets/RawView/RawView_en-US.json | 1 - .../doc/widgets/RawView/RawView_zh-CN.json | 1 - .../RawWebImage/RawWebImage_en-US.json | 1 - .../RawWebImage/RawWebImage_zh-CN.json | 1 - .../RefreshIndicator_en-US.json | 1 - .../RefreshIndicator_zh-CN.json | 1 - .../RefreshProgressIndicator_en-US.json | 1 - .../RefreshProgressIndicator_zh-CN.json | 1 - .../RelativePositionedTransition_en-US.json | 1 - .../RelativePositionedTransition_zh-CN.json | 1 - .../RenderObjectToWidgetAdapter_en-US.json | 1 - .../RenderObjectToWidgetAdapter_zh-CN.json | 1 - .../RenderObjectWidget_en-US.json | 1 - .../RenderObjectWidget_zh-CN.json | 1 - ...derableDelayedDragStartListener_en-US.json | 1 - ...derableDelayedDragStartListener_zh-CN.json | 1 - .../ReorderableDragStartListener_en-US.json | 1 - .../ReorderableDragStartListener_zh-CN.json | 1 - .../ReorderableList_en-US.json | 1 - .../ReorderableList_zh-CN.json | 1 - .../ReorderableListView_en-US.json | 1 - .../ReorderableListView_zh-CN.json | 1 - .../RepaintBoundary_en-US.json | 1 - .../RepaintBoundary_zh-CN.json | 1 - .../RestorationScope_en-US.json | 1 - .../RestorationScope_zh-CN.json | 1 - .../doc/widgets/RichText/RichText_en-US.json | 1 - .../doc/widgets/RichText/RichText_zh-CN.json | 1 - .../RootRestorationScope_en-US.json | 1 - .../RootRestorationScope_zh-CN.json | 1 - .../widgets/RootWidget/RootWidget_en-US.json | 1 - .../widgets/RootWidget/RootWidget_zh-CN.json | 1 - .../widgets/RotatedBox/RotatedBox_en-US.json | 1 - .../widgets/RotatedBox/RotatedBox_zh-CN.json | 1 - .../RotationTransition_en-US.json | 1 - .../RotationTransition_zh-CN.json | 1 - .../doc/widgets/Router/Router_en-US.json | 1 - .../doc/widgets/Router/Router_zh-CN.json | 1 - .../widgets/doc/widgets/Row/Row_en-US.json | 1 - .../widgets/doc/widgets/Row/Row_zh-CN.json | 1 - .../doc/widgets/SafeArea/SafeArea_en-US.json | 1 - .../doc/widgets/SafeArea/SafeArea_zh-CN.json | 1 - .../doc/widgets/Scaffold/Scaffold_en-US.json | 1 - .../doc/widgets/Scaffold/Scaffold_zh-CN.json | 1 - .../ScaffoldMessenger_en-US.json | 1 - .../ScaffoldMessenger_zh-CN.json | 1 - .../ScaleTransition_en-US.json | 1 - .../ScaleTransition_zh-CN.json | 1 - .../ScrollConfiguration_en-US.json | 1 - .../ScrollConfiguration_zh-CN.json | 1 - .../ScrollNotificationObserver_en-US.json | 1 - .../ScrollNotificationObserver_zh-CN.json | 1 - .../widgets/ScrollView/ScrollView_en-US.json | 1 - .../widgets/ScrollView/ScrollView_zh-CN.json | 1 - .../widgets/Scrollable/Scrollable_en-US.json | 1 - .../widgets/Scrollable/Scrollable_zh-CN.json | 1 - .../widgets/Scrollbar/Scrollbar_en-US.json | 1 - .../widgets/Scrollbar/Scrollbar_zh-CN.json | 1 - .../ScrollbarTheme/ScrollbarTheme_en-US.json | 1 - .../ScrollbarTheme/ScrollbarTheme_zh-CN.json | 1 - .../SearchAnchor/SearchAnchor_en-US.json | 1 - .../SearchAnchor/SearchAnchor_zh-CN.json | 1 - .../widgets/SearchBar/SearchBar_en-US.json | 1 - .../widgets/SearchBar/SearchBar_zh-CN.json | 1 - .../SearchBarTheme/SearchBarTheme_en-US.json | 1 - .../SearchBarTheme/SearchBarTheme_zh-CN.json | 1 - .../SearchViewTheme_en-US.json | 1 - .../SearchViewTheme_zh-CN.json | 1 - .../SegmentedButton_en-US.json | 1 - .../SegmentedButton_zh-CN.json | 1 - .../SegmentedButtonTheme_en-US.json | 1 - .../SegmentedButtonTheme_zh-CN.json | 1 - .../SelectableRegion_en-US.json | 1 - .../SelectableRegion_zh-CN.json | 1 - ...tableRegionSelectionStatusScope_en-US.json | 1 - ...tableRegionSelectionStatusScope_zh-CN.json | 1 - .../SelectableText/SelectableText_en-US.json | 1 - .../SelectableText/SelectableText_zh-CN.json | 1 - .../SelectionArea/SelectionArea_en-US.json | 1 - .../SelectionArea/SelectionArea_zh-CN.json | 1 - .../SelectionContainer_en-US.json | 1 - .../SelectionContainer_zh-CN.json | 1 - .../SelectionListener_en-US.json | 1 - .../SelectionListener_zh-CN.json | 1 - .../SelectionRegistrarScope_en-US.json | 1 - .../SelectionRegistrarScope_zh-CN.json | 1 - .../widgets/Semantics/Semantics_en-US.json | 1 - .../widgets/Semantics/Semantics_zh-CN.json | 1 - .../SemanticsDebugger_en-US.json | 1 - .../SemanticsDebugger_zh-CN.json | 1 - .../widgets/ShaderMask/ShaderMask_en-US.json | 1 - .../widgets/ShaderMask/ShaderMask_zh-CN.json | 1 - .../SharedAppData/SharedAppData_en-US.json | 1 - .../SharedAppData/SharedAppData_zh-CN.json | 1 - .../ShortcutRegistrar_en-US.json | 1 - .../ShortcutRegistrar_zh-CN.json | 1 - .../widgets/Shortcuts/Shortcuts_en-US.json | 1 - .../widgets/Shortcuts/Shortcuts_zh-CN.json | 1 - .../ShrinkWrappingViewport_en-US.json | 1 - .../ShrinkWrappingViewport_zh-CN.json | 1 - .../SimpleDialog/SimpleDialog_en-US.json | 1 - .../SimpleDialog/SimpleDialog_zh-CN.json | 1 - .../SimpleDialogOption_en-US.json | 1 - .../SimpleDialogOption_zh-CN.json | 1 - .../SingleChildRenderObjectWidget_en-US.json | 1 - .../SingleChildRenderObjectWidget_zh-CN.json | 1 - .../SingleChildScrollView_en-US.json | 1 - .../SingleChildScrollView_zh-CN.json | 1 - .../SizeChangedLayoutNotifier_en-US.json | 1 - .../SizeChangedLayoutNotifier_zh-CN.json | 1 - .../SizeTransition/SizeTransition_en-US.json | 1 - .../SizeTransition/SizeTransition_zh-CN.json | 1 - .../doc/widgets/SizedBox/SizedBox_en-US.json | 1 - .../doc/widgets/SizedBox/SizedBox_zh-CN.json | 1 - .../SizedOverflowBox_en-US.json | 1 - .../SizedOverflowBox_zh-CN.json | 1 - .../SlideTransition_en-US.json | 1 - .../SlideTransition_zh-CN.json | 1 - .../doc/widgets/Slider/Slider_en-US.json | 1 - .../doc/widgets/Slider/Slider_zh-CN.json | 1 - .../SliderTheme/SliderTheme_en-US.json | 1 - .../SliderTheme/SliderTheme_zh-CN.json | 1 - .../SliverAnimatedGrid_en-US.json | 1 - .../SliverAnimatedGrid_zh-CN.json | 1 - .../SliverAnimatedList_en-US.json | 1 - .../SliverAnimatedList_zh-CN.json | 1 - .../SliverAnimatedOpacity_en-US.json | 1 - .../SliverAnimatedOpacity_zh-CN.json | 1 - .../SliverAppBar/SliverAppBar_en-US.json | 1 - .../SliverAppBar/SliverAppBar_zh-CN.json | 1 - .../SliverConstrainedCrossAxis_en-US.json | 1 - .../SliverConstrainedCrossAxis_zh-CN.json | 1 - .../SliverCrossAxisExpanded_en-US.json | 1 - .../SliverCrossAxisExpanded_zh-CN.json | 1 - .../SliverCrossAxisGroup_en-US.json | 1 - .../SliverCrossAxisGroup_zh-CN.json | 1 - .../SliverEnsureSemantics_en-US.json | 1 - .../SliverEnsureSemantics_zh-CN.json | 1 - .../SliverFadeTransition_en-US.json | 1 - .../SliverFadeTransition_zh-CN.json | 1 - .../SliverFillRemaining_en-US.json | 1 - .../SliverFillRemaining_zh-CN.json | 1 - .../SliverFillViewport_en-US.json | 1 - .../SliverFillViewport_zh-CN.json | 1 - .../SliverFixedExtentList_en-US.json | 1 - .../SliverFixedExtentList_zh-CN.json | 1 - .../SliverFloatingHeader_en-US.json | 1 - .../SliverFloatingHeader_zh-CN.json | 1 - .../widgets/SliverGrid/SliverGrid_en-US.json | 1 - .../widgets/SliverGrid/SliverGrid_zh-CN.json | 1 - .../SliverIgnorePointer_en-US.json | 1 - .../SliverIgnorePointer_zh-CN.json | 1 - .../SliverLayoutBuilder_en-US.json | 1 - .../SliverLayoutBuilder_zh-CN.json | 1 - .../widgets/SliverList/SliverList_en-US.json | 1 - .../widgets/SliverList/SliverList_zh-CN.json | 1 - .../SliverMainAxisGroup_en-US.json | 1 - .../SliverMainAxisGroup_zh-CN.json | 1 - .../SliverMultiBoxAdaptorWidget_en-US.json | 1 - .../SliverMultiBoxAdaptorWidget_zh-CN.json | 1 - .../SliverOffstage/SliverOffstage_en-US.json | 1 - .../SliverOffstage/SliverOffstage_zh-CN.json | 1 - .../SliverOpacity/SliverOpacity_en-US.json | 1 - .../SliverOpacity/SliverOpacity_zh-CN.json | 1 - .../SliverOverlapAbsorber_en-US.json | 1 - .../SliverOverlapAbsorber_zh-CN.json | 1 - .../SliverOverlapInjector_en-US.json | 1 - .../SliverOverlapInjector_zh-CN.json | 1 - .../SliverPadding/SliverPadding_en-US.json | 1 - .../SliverPadding/SliverPadding_zh-CN.json | 1 - .../SliverPersistentHeader_en-US.json | 1 - .../SliverPersistentHeader_zh-CN.json | 1 - .../SliverPrototypeExtentList_en-US.json | 1 - .../SliverPrototypeExtentList_zh-CN.json | 1 - .../SliverReorderableList_en-US.json | 1 - .../SliverReorderableList_zh-CN.json | 1 - .../SliverResizingHeader_en-US.json | 1 - .../SliverResizingHeader_zh-CN.json | 1 - .../SliverSafeArea/SliverSafeArea_en-US.json | 1 - .../SliverSafeArea/SliverSafeArea_zh-CN.json | 1 - .../SliverToBoxAdapter_en-US.json | 1 - .../SliverToBoxAdapter_zh-CN.json | 1 - .../SliverVariedExtentList_en-US.json | 1 - .../SliverVariedExtentList_zh-CN.json | 1 - .../SliverVisibility_en-US.json | 1 - .../SliverVisibility_zh-CN.json | 1 - .../SliverWithKeepAliveWidget_en-US.json | 1 - .../SliverWithKeepAliveWidget_zh-CN.json | 1 - ...tedMultiChildRenderObjectWidget_en-US.json | 1 - ...tedMultiChildRenderObjectWidget_zh-CN.json | 1 - .../doc/widgets/SnackBar/SnackBar_en-US.json | 1 - .../doc/widgets/SnackBar/SnackBar_zh-CN.json | 1 - .../SnackBarAction/SnackBarAction_en-US.json | 1 - .../SnackBarAction/SnackBarAction_zh-CN.json | 1 - .../SnapshotWidget/SnapshotWidget_en-US.json | 1 - .../SnapshotWidget/SnapshotWidget_zh-CN.json | 1 - .../doc/widgets/Spacer/Spacer_en-US.json | 1 - .../doc/widgets/Spacer/Spacer_zh-CN.json | 1 - .../SpellCheckSuggestionsToolbar_en-US.json | 1 - .../SpellCheckSuggestionsToolbar_zh-CN.json | 1 - .../doc/widgets/Stack/Stack_en-US.json | 1 - .../doc/widgets/Stack/Stack_zh-CN.json | 1 - .../StatefulBuilder_en-US.json | 1 - .../StatefulBuilder_zh-CN.json | 1 - .../StatefulWidget/StatefulWidget_en-US.json | 1 - .../StatefulWidget/StatefulWidget_zh-CN.json | 1 - .../StatelessWidget_en-US.json | 1 - .../StatelessWidget_zh-CN.json | 1 - .../StatusTransitionWidget_en-US.json | 1 - .../StatusTransitionWidget_zh-CN.json | 1 - .../doc/widgets/Stepper/Stepper_en-US.json | 1 - .../doc/widgets/Stepper/Stepper_zh-CN.json | 1 - .../StreamBuilder/StreamBuilder_en-US.json | 1 - .../StreamBuilder/StreamBuilder_zh-CN.json | 1 - .../StreamBuilderBase_en-US.json | 1 - .../StreamBuilderBase_zh-CN.json | 1 - .../StretchingOverscrollIndicator_en-US.json | 1 - .../StretchingOverscrollIndicator_zh-CN.json | 1 - .../SubmenuButton/SubmenuButton_en-US.json | 1 - .../SubmenuButton/SubmenuButton_zh-CN.json | 1 - .../doc/widgets/Switch/Switch_en-US.json | 1 - .../doc/widgets/Switch/Switch_zh-CN.json | 1 - .../SwitchListTile/SwitchListTile_en-US.json | 1 - .../SwitchListTile/SwitchListTile_zh-CN.json | 1 - .../SwitchTheme/SwitchTheme_en-US.json | 1 - .../SwitchTheme/SwitchTheme_zh-CN.json | 1 - .../SystemContextMenu_en-US.json | 1 - .../SystemContextMenu_zh-CN.json | 1 - .../widgets/doc/widgets/Tab/Tab_en-US.json | 1 - .../widgets/doc/widgets/Tab/Tab_zh-CN.json | 1 - .../doc/widgets/TabBar/TabBar_en-US.json | 1 - .../doc/widgets/TabBar/TabBar_zh-CN.json | 1 - .../TabBarTheme/TabBarTheme_en-US.json | 1 - .../TabBarTheme/TabBarTheme_zh-CN.json | 1 - .../widgets/TabBarView/TabBarView_en-US.json | 1 - .../widgets/TabBarView/TabBarView_zh-CN.json | 1 - .../TabPageSelector_en-US.json | 1 - .../TabPageSelector_zh-CN.json | 1 - .../TabPageSelectorIndicator_en-US.json | 1 - .../TabPageSelectorIndicator_zh-CN.json | 1 - .../doc/widgets/Table/Table_en-US.json | 1 - .../doc/widgets/Table/Table_zh-CN.json | 1 - .../widgets/TableCell/TableCell_en-US.json | 1 - .../widgets/TableCell/TableCell_zh-CN.json | 1 - .../TableRowInkWell_en-US.json | 1 - .../TableRowInkWell_zh-CN.json | 1 - .../widgets/TapRegion/TapRegion_en-US.json | 1 - .../widgets/TapRegion/TapRegion_zh-CN.json | 1 - .../TapRegionSurface_en-US.json | 1 - .../TapRegionSurface_zh-CN.json | 1 - .../widgets/doc/widgets/Text/Text_en-US.json | 1 - .../widgets/doc/widgets/Text/Text_zh-CN.json | 1 - .../widgets/TextButton/TextButton_en-US.json | 1 - .../widgets/TextButton/TextButton_zh-CN.json | 1 - .../TextButtonTheme_en-US.json | 1 - .../TextButtonTheme_zh-CN.json | 1 - .../widgets/TextField/TextField_en-US.json | 1 - .../widgets/TextField/TextField_zh-CN.json | 1 - .../TextFieldTapRegion_en-US.json | 1 - .../TextFieldTapRegion_zh-CN.json | 1 - .../TextFormField/TextFormField_en-US.json | 1 - .../TextFormField/TextFormField_zh-CN.json | 1 - .../TextMagnifier/TextMagnifier_en-US.json | 1 - .../TextMagnifier/TextMagnifier_zh-CN.json | 1 - .../TextSelectionGestureDetector_en-US.json | 1 - .../TextSelectionGestureDetector_zh-CN.json | 1 - .../TextSelectionTheme_en-US.json | 1 - .../TextSelectionTheme_zh-CN.json | 1 - .../TextSelectionToolbar_en-US.json | 1 - .../TextSelectionToolbar_zh-CN.json | 1 - .../TextSelectionToolbarTextButton_en-US.json | 1 - .../TextSelectionToolbarTextButton_zh-CN.json | 1 - .../doc/widgets/Texture/Texture_en-US.json | 1 - .../doc/widgets/Texture/Texture_zh-CN.json | 1 - .../doc/widgets/Theme/Theme_en-US.json | 1 - .../doc/widgets/Theme/Theme_zh-CN.json | 1 - .../widgets/TickerMode/TickerMode_en-US.json | 1 - .../widgets/TickerMode/TickerMode_zh-CN.json | 1 - .../TimePickerDialog_en-US.json | 1 - .../TimePickerDialog_zh-CN.json | 1 - .../TimePickerTheme_en-US.json | 1 - .../TimePickerTheme_zh-CN.json | 1 - .../doc/widgets/Title/Title_en-US.json | 1 - .../doc/widgets/Title/Title_zh-CN.json | 1 - .../ToggleButtons/ToggleButtons_en-US.json | 1 - .../ToggleButtons/ToggleButtons_zh-CN.json | 1 - .../ToggleButtonsTheme_en-US.json | 1 - .../ToggleButtonsTheme_zh-CN.json | 1 - .../doc/widgets/Tooltip/Tooltip_en-US.json | 1 - .../doc/widgets/Tooltip/Tooltip_zh-CN.json | 1 - .../TooltipTheme/TooltipTheme_en-US.json | 1 - .../TooltipTheme/TooltipTheme_zh-CN.json | 1 - .../TooltipVisibility_en-US.json | 1 - .../TooltipVisibility_zh-CN.json | 1 - .../widgets/Transform/Transform_en-US.json | 1 - .../widgets/Transform/Transform_zh-CN.json | 1 - .../widgets/TreeSliver/TreeSliver_en-US.json | 1 - .../widgets/TreeSliver/TreeSliver_zh-CN.json | 1 - .../TweenAnimationBuilder_en-US.json | 1 - .../TweenAnimationBuilder_zh-CN.json | 1 - .../TwoDimensionalScrollView_en-US.json | 1 - .../TwoDimensionalScrollView_zh-CN.json | 1 - .../TwoDimensionalScrollable_en-US.json | 1 - .../TwoDimensionalScrollable_zh-CN.json | 1 - .../TwoDimensionalViewport_en-US.json | 1 - .../TwoDimensionalViewport_zh-CN.json | 1 - .../widgets/UiKitView/UiKitView_en-US.json | 1 - .../widgets/UiKitView/UiKitView_zh-CN.json | 1 - .../UnconstrainedBox_en-US.json | 1 - .../UnconstrainedBox_zh-CN.json | 1 - .../UndoHistory/UndoHistory_en-US.json | 1 - .../UndoHistory/UndoHistory_zh-CN.json | 1 - .../UniqueWidget/UniqueWidget_en-US.json | 1 - .../UniqueWidget/UniqueWidget_zh-CN.json | 1 - .../UnmanagedRestorationScope_en-US.json | 1 - .../UnmanagedRestorationScope_zh-CN.json | 1 - .../UserAccountsDrawerHeader_en-US.json | 1 - .../UserAccountsDrawerHeader_zh-CN.json | 1 - .../ValueListenableBuilder_en-US.json | 1 - .../ValueListenableBuilder_zh-CN.json | 1 - .../VerticalDivider_en-US.json | 1 - .../VerticalDivider_zh-CN.json | 1 - .../widgets/doc/widgets/View/View_en-US.json | 1 - .../widgets/doc/widgets/View/View_zh-CN.json | 1 - .../widgets/ViewAnchor/ViewAnchor_en-US.json | 1 - .../widgets/ViewAnchor/ViewAnchor_zh-CN.json | 1 - .../ViewCollection/ViewCollection_en-US.json | 1 - .../ViewCollection/ViewCollection_zh-CN.json | 1 - .../doc/widgets/Viewport/Viewport_en-US.json | 1 - .../doc/widgets/Viewport/Viewport_zh-CN.json | 1 - .../widgets/Visibility/Visibility_en-US.json | 1 - .../widgets/Visibility/Visibility_zh-CN.json | 1 - .../WidgetInspector_en-US.json | 1 - .../WidgetInspector_zh-CN.json | 1 - .../WidgetToRenderBoxAdapter_en-US.json | 1 - .../WidgetToRenderBoxAdapter_zh-CN.json | 1 - .../widgets/WidgetsApp/WidgetsApp_en-US.json | 1 - .../widgets/WidgetsApp/WidgetsApp_zh-CN.json | 1 - .../WillPopScope/WillPopScope_en-US.json | 1 - .../WillPopScope/WillPopScope_zh-CN.json | 1 - .../widgets/doc/widgets/Wrap/Wrap_en-US.json | 1 - .../widgets/doc/widgets/Wrap/Wrap_zh-CN.json | 1 - .../widgets/YearPicker/YearPicker_en-US.json | 1 - .../widgets/YearPicker/YearPicker_zh-CN.json | 1 - .../widgets/doc/widgets/translation_plan.md | 8 - .../Column/desc_de_DE.json | 26 - .../Column/desc_en_US.json | 26 - .../Column/desc_es_ES.json | 26 - .../Column/desc_fr_FR.json | 26 - .../Column/desc_it_IT.json | 26 - .../Column/desc_ja_JP.json | 26 - .../Column/desc_ko_KR.json | 26 - .../Column/desc_pt_PT.json | 26 - .../Column/desc_ru_RU.json | 26 - .../Column/desc_zh-CN.json | 26 - .../Column/node_01.dart | 56 - .../CustomMultiChildLayout/desc_de_DE.json | 22 - .../CustomMultiChildLayout/desc_en_US.json | 22 - .../CustomMultiChildLayout/desc_es_ES.json | 22 - .../CustomMultiChildLayout/desc_fr_FR.json | 22 - .../CustomMultiChildLayout/desc_it_IT.json | 22 - .../CustomMultiChildLayout/desc_ja_JP.json | 22 - .../CustomMultiChildLayout/desc_ko_KR.json | 22 - .../CustomMultiChildLayout/desc_pt_PT.json | 22 - .../CustomMultiChildLayout/desc_ru_RU.json | 22 - .../CustomMultiChildLayout/desc_zh-CN.json | 22 - .../CustomMultiChildLayout/node_01.dart | 85 - .../Flex/desc_de_DE.json | 53 - .../Flex/desc_en_US.json | 53 - .../Flex/desc_es_ES.json | 53 - .../Flex/desc_fr_FR.json | 53 - .../Flex/desc_it_IT.json | 53 - .../Flex/desc_ja_JP.json | 53 - .../Flex/desc_ko_KR.json | 53 - .../Flex/desc_pt_PT.json | 53 - .../Flex/desc_ru_RU.json | 53 - .../Flex/desc_zh-CN.json | 53 - .../Flex/node_01.dart | 58 - .../Flex/node_02.dart | 60 - .../Flex/node_03.dart | 62 - .../Flex/node_04.dart | 58 - .../Flex/node_05.dart | 58 - .../Flow/desc_de_DE.json | 29 - .../Flow/desc_en_US.json | 29 - .../Flow/desc_es_ES.json | 29 - .../Flow/desc_fr_FR.json | 29 - .../Flow/desc_it_IT.json | 29 - .../Flow/desc_ja_JP.json | 29 - .../Flow/desc_ko_KR.json | 29 - .../Flow/desc_pt_PT.json | 29 - .../Flow/desc_ru_RU.json | 29 - .../Flow/desc_zh-CN.json | 29 - .../Flow/node_01.dart | 54 - .../Flow/node_02.dart | 100 - .../IndexedStack/desc_de_DE.json | 20 - .../IndexedStack/desc_en_US.json | 20 - .../IndexedStack/desc_es_ES.json | 20 - .../IndexedStack/desc_fr_FR.json | 20 - .../IndexedStack/desc_it_IT.json | 20 - .../IndexedStack/desc_ja_JP.json | 20 - .../IndexedStack/desc_ko_KR.json | 20 - .../IndexedStack/desc_pt_PT.json | 20 - .../IndexedStack/desc_ru_RU.json | 20 - .../IndexedStack/desc_zh-CN.json | 20 - .../IndexedStack/node1_base.dart | 53 - .../ListBody/desc_de_DE.json | 20 - .../ListBody/desc_en_US.json | 20 - .../ListBody/desc_es_ES.json | 20 - .../ListBody/desc_fr_FR.json | 20 - .../ListBody/desc_it_IT.json | 20 - .../ListBody/desc_ja_JP.json | 20 - .../ListBody/desc_ko_KR.json | 20 - .../ListBody/desc_pt_PT.json | 20 - .../ListBody/desc_ru_RU.json | 20 - .../ListBody/desc_zh-CN.json | 20 - .../ListBody/node1_base.dart | 40 - .../NestedScrollViewViewport/desc_de_DE.json | 24 - .../NestedScrollViewViewport/desc_en_US.json | 24 - .../NestedScrollViewViewport/desc_es_ES.json | 24 - .../NestedScrollViewViewport/desc_fr_FR.json | 24 - .../NestedScrollViewViewport/desc_it_IT.json | 24 - .../NestedScrollViewViewport/desc_ja_JP.json | 24 - .../NestedScrollViewViewport/desc_ko_KR.json | 24 - .../NestedScrollViewViewport/desc_pt_PT.json | 24 - .../NestedScrollViewViewport/desc_ru_RU.json | 24 - .../NestedScrollViewViewport/desc_zh-CN.json | 24 - .../NestedScrollViewViewport/node1_base.dart | 27 - .../RichText/desc_de_DE.json | 26 - .../RichText/desc_en_US.json | 26 - .../RichText/desc_es_ES.json | 26 - .../RichText/desc_fr_FR.json | 26 - .../RichText/desc_it_IT.json | 26 - .../RichText/desc_ja_JP.json | 26 - .../RichText/desc_ko_KR.json | 26 - .../RichText/desc_pt_PT.json | 26 - .../RichText/desc_ru_RU.json | 26 - .../RichText/desc_zh-CN.json | 26 - .../RichText/node1_base.dart | 38 - .../RichText/node2_widget.dart | 51 - .../Row/desc_de_DE.json | 26 - .../Row/desc_en_US.json | 26 - .../Row/desc_es_ES.json | 26 - .../Row/desc_fr_FR.json | 26 - .../Row/desc_it_IT.json | 26 - .../Row/desc_ja_JP.json | 26 - .../Row/desc_ko_KR.json | 26 - .../Row/desc_pt_PT.json | 26 - .../Row/desc_ru_RU.json | 26 - .../Row/desc_zh-CN.json | 26 - .../Row/node1_base.dart | 37 - .../ShrinkWrappingViewport/desc_de_DE.json | 26 - .../ShrinkWrappingViewport/desc_en_US.json | 26 - .../ShrinkWrappingViewport/desc_es_ES.json | 26 - .../ShrinkWrappingViewport/desc_fr_FR.json | 26 - .../ShrinkWrappingViewport/desc_it_IT.json | 26 - .../ShrinkWrappingViewport/desc_ja_JP.json | 26 - .../ShrinkWrappingViewport/desc_ko_KR.json | 26 - .../ShrinkWrappingViewport/desc_pt_PT.json | 26 - .../ShrinkWrappingViewport/desc_ru_RU.json | 26 - .../ShrinkWrappingViewport/desc_zh-CN.json | 26 - .../ShrinkWrappingViewport/node1_base.dart | 26 - .../Stack/desc_de_DE.json | 33 - .../Stack/desc_en_US.json | 33 - .../Stack/desc_es_ES.json | 33 - .../Stack/desc_fr_FR.json | 33 - .../Stack/desc_it_IT.json | 33 - .../Stack/desc_ja_JP.json | 33 - .../Stack/desc_ko_KR.json | 33 - .../Stack/desc_pt_PT.json | 33 - .../Stack/desc_ru_RU.json | 33 - .../Stack/desc_zh-CN.json | 33 - .../Stack/node1_base.dart | 47 - .../Stack/node2_positioned.dart | 48 - .../Viewport/desc_de_DE.json | 27 - .../Viewport/desc_en_US.json | 27 - .../Viewport/desc_es_ES.json | 27 - .../Viewport/desc_fr_FR.json | 27 - .../Viewport/desc_it_IT.json | 27 - .../Viewport/desc_ja_JP.json | 27 - .../Viewport/desc_ko_KR.json | 27 - .../Viewport/desc_pt_PT.json | 27 - .../Viewport/desc_ru_RU.json | 27 - .../Viewport/desc_zh-CN.json | 27 - .../Viewport/node1_base.dart | 79 - .../Wrap/desc_de_DE.json | 52 - .../Wrap/desc_en_US.json | 52 - .../Wrap/desc_es_ES.json | 52 - .../Wrap/desc_fr_FR.json | 52 - .../Wrap/desc_it_IT.json | 52 - .../Wrap/desc_ja_JP.json | 52 - .../Wrap/desc_ko_KR.json | 52 - .../Wrap/desc_pt_PT.json | 52 - .../Wrap/desc_ru_RU.json | 52 - .../Wrap/desc_zh-CN.json | 52 - .../Wrap/node1_base.dart | 69 - .../Wrap/node2_alignment.dart | 72 - .../Wrap/node3_crossAxisAlignment.dart | 73 - .../Wrap/node4_textDirection.dart | 71 - .../Wrap/node5_verticalDirection.dart | 72 - .../lib/Other/ErrorWidget/desc_de_DE.json | 18 - .../lib/Other/ErrorWidget/desc_en_US.json | 18 - .../lib/Other/ErrorWidget/desc_es_ES.json | 18 - .../lib/Other/ErrorWidget/desc_fr_FR.json | 18 - .../lib/Other/ErrorWidget/desc_it_IT.json | 18 - .../lib/Other/ErrorWidget/desc_ja_JP.json | 18 - .../lib/Other/ErrorWidget/desc_ko_KR.json | 18 - .../lib/Other/ErrorWidget/desc_pt_PT.json | 18 - .../lib/Other/ErrorWidget/desc_ru_RU.json | 18 - .../lib/Other/ErrorWidget/desc_zh-CN.json | 18 - .../lib/Other/ErrorWidget/node1_base.dart | 19 - .../Other/ListWheelViewport/desc_de_DE.json | 52 - .../Other/ListWheelViewport/desc_en_US.json | 52 - .../Other/ListWheelViewport/desc_es_ES.json | 52 - .../Other/ListWheelViewport/desc_fr_FR.json | 52 - .../Other/ListWheelViewport/desc_it_IT.json | 52 - .../Other/ListWheelViewport/desc_ja_JP.json | 52 - .../Other/ListWheelViewport/desc_ko_KR.json | 52 - .../Other/ListWheelViewport/desc_pt_PT.json | 52 - .../Other/ListWheelViewport/desc_ru_RU.json | 52 - .../Other/ListWheelViewport/desc_zh-CN.json | 52 - .../Other/ListWheelViewport/node1_base.dart | 65 - .../ListWheelViewport/node2_perspective.dart | 68 - .../ListWheelViewport/node3_magnifier.dart | 70 - .../ListWheelViewport/node4_opacity.dart | 71 - .../Other/PerformanceOverlay/desc_de_DE.json | 18 - .../Other/PerformanceOverlay/desc_en_US.json | 18 - .../Other/PerformanceOverlay/desc_es_ES.json | 18 - .../Other/PerformanceOverlay/desc_fr_FR.json | 18 - .../Other/PerformanceOverlay/desc_it_IT.json | 18 - .../Other/PerformanceOverlay/desc_ja_JP.json | 18 - .../Other/PerformanceOverlay/desc_ko_KR.json | 18 - .../Other/PerformanceOverlay/desc_pt_PT.json | 18 - .../Other/PerformanceOverlay/desc_ru_RU.json | 18 - .../Other/PerformanceOverlay/desc_zh-CN.json | 18 - .../Other/PerformanceOverlay/node1_base.dart | 18 - .../lib/Other/RawImage/desc_de_DE.json | 23 - .../lib/Other/RawImage/desc_en_US.json | 23 - .../lib/Other/RawImage/desc_es_ES.json | 23 - .../lib/Other/RawImage/desc_fr_FR.json | 23 - .../lib/Other/RawImage/desc_it_IT.json | 23 - .../lib/Other/RawImage/desc_ja_JP.json | 23 - .../lib/Other/RawImage/desc_ko_KR.json | 23 - .../lib/Other/RawImage/desc_pt_PT.json | 23 - .../lib/Other/RawImage/desc_ru_RU.json | 23 - .../lib/Other/RawImage/desc_zh-CN.json | 23 - .../lib/Other/RawImage/node1_base.dart | 82 - .../desc_de_DE.json | 20 - .../desc_en_US.json | 20 - .../desc_es_ES.json | 20 - .../desc_fr_FR.json | 20 - .../desc_it_IT.json | 20 - .../desc_ja_JP.json | 20 - .../desc_ko_KR.json | 20 - .../desc_pt_PT.json | 20 - .../desc_ru_RU.json | 20 - .../desc_zh-CN.json | 20 - .../node1_base.dart | 25 - .../widgets/lib/Other/Table/desc_de_DE.json | 23 - .../widgets/lib/Other/Table/desc_en_US.json | 23 - .../widgets/lib/Other/Table/desc_es_ES.json | 23 - .../widgets/lib/Other/Table/desc_fr_FR.json | 23 - .../widgets/lib/Other/Table/desc_it_IT.json | 23 - .../widgets/lib/Other/Table/desc_ja_JP.json | 23 - .../widgets/lib/Other/Table/desc_ko_KR.json | 23 - .../widgets/lib/Other/Table/desc_pt_PT.json | 23 - .../widgets/lib/Other/Table/desc_ru_RU.json | 23 - .../widgets/lib/Other/Table/desc_zh-CN.json | 23 - .../widgets/lib/Other/Table/node1_base.dart | 72 - .../ButtonBarTheme/desc_de_DE.json | 18 - .../ButtonBarTheme/desc_en_US.json | 18 - .../ButtonBarTheme/desc_es_ES.json | 18 - .../ButtonBarTheme/desc_fr_FR.json | 18 - .../ButtonBarTheme/desc_it_IT.json | 18 - .../ButtonBarTheme/desc_ja_JP.json | 18 - .../ButtonBarTheme/desc_ko_KR.json | 18 - .../ButtonBarTheme/desc_pt_PT.json | 18 - .../ButtonBarTheme/desc_ru_RU.json | 18 - .../ButtonBarTheme/desc_zh-CN.json | 18 - .../ButtonBarTheme/node1_base.dart | 44 - .../ProxyWidget/ButtonTheme/desc_de_DE.json | 24 - .../ProxyWidget/ButtonTheme/desc_en_US.json | 24 - .../ProxyWidget/ButtonTheme/desc_es_ES.json | 24 - .../ProxyWidget/ButtonTheme/desc_fr_FR.json | 24 - .../ProxyWidget/ButtonTheme/desc_it_IT.json | 24 - .../ProxyWidget/ButtonTheme/desc_ja_JP.json | 24 - .../ProxyWidget/ButtonTheme/desc_ko_KR.json | 24 - .../ProxyWidget/ButtonTheme/desc_pt_PT.json | 24 - .../ProxyWidget/ButtonTheme/desc_ru_RU.json | 24 - .../ProxyWidget/ButtonTheme/desc_zh-CN.json | 24 - .../ProxyWidget/ButtonTheme/node1_base.dart | 31 - .../lib/ProxyWidget/ChipTheme/desc_de_DE.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_en_US.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_es_ES.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_fr_FR.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_it_IT.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_ja_JP.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_ko_KR.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_pt_PT.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_ru_RU.json | 25 - .../lib/ProxyWidget/ChipTheme/desc_zh-CN.json | 25 - .../lib/ProxyWidget/ChipTheme/node1_base.dart | 74 - .../desc_de_DE.json | 18 - .../desc_en_US.json | 18 - .../desc_es_ES.json | 18 - .../desc_fr_FR.json | 18 - .../desc_it_IT.json | 18 - .../desc_ja_JP.json | 18 - .../desc_ko_KR.json | 18 - .../desc_pt_PT.json | 18 - .../desc_ru_RU.json | 18 - .../desc_zh-CN.json | 18 - .../node1_base.dart | 36 - .../DefaultAssetBundle/desc_de_DE.json | 20 - .../DefaultAssetBundle/desc_en_US.json | 20 - .../DefaultAssetBundle/desc_es_ES.json | 20 - .../DefaultAssetBundle/desc_fr_FR.json | 20 - .../DefaultAssetBundle/desc_it_IT.json | 20 - .../DefaultAssetBundle/desc_ja_JP.json | 20 - .../DefaultAssetBundle/desc_ko_KR.json | 20 - .../DefaultAssetBundle/desc_pt_PT.json | 20 - .../DefaultAssetBundle/desc_ru_RU.json | 20 - .../DefaultAssetBundle/desc_zh-CN.json | 20 - .../DefaultAssetBundle/node1_base.dart | 43 - .../DefaultTextStyle/desc_de_DE.json | 23 - .../DefaultTextStyle/desc_en_US.json | 23 - .../DefaultTextStyle/desc_es_ES.json | 23 - .../DefaultTextStyle/desc_fr_FR.json | 23 - .../DefaultTextStyle/desc_it_IT.json | 23 - .../DefaultTextStyle/desc_ja_JP.json | 23 - .../DefaultTextStyle/desc_ko_KR.json | 23 - .../DefaultTextStyle/desc_pt_PT.json | 23 - .../DefaultTextStyle/desc_ru_RU.json | 23 - .../DefaultTextStyle/desc_zh-CN.json | 23 - .../DefaultTextStyle/node1_base.dart | 28 - .../Directionality/desc_de_DE.json | 22 - .../Directionality/desc_en_US.json | 22 - .../Directionality/desc_es_ES.json | 22 - .../Directionality/desc_fr_FR.json | 22 - .../Directionality/desc_it_IT.json | 22 - .../Directionality/desc_ja_JP.json | 22 - .../Directionality/desc_ko_KR.json | 22 - .../Directionality/desc_pt_PT.json | 22 - .../Directionality/desc_ru_RU.json | 22 - .../Directionality/desc_zh-CN.json | 22 - .../Directionality/node1_base.dart | 55 - .../ProxyWidget/DividerTheme/desc_de_DE.json | 22 - .../ProxyWidget/DividerTheme/desc_en_US.json | 22 - .../ProxyWidget/DividerTheme/desc_es_ES.json | 22 - .../ProxyWidget/DividerTheme/desc_fr_FR.json | 22 - .../ProxyWidget/DividerTheme/desc_it_IT.json | 22 - .../ProxyWidget/DividerTheme/desc_ja_JP.json | 22 - .../ProxyWidget/DividerTheme/desc_ko_KR.json | 22 - .../ProxyWidget/DividerTheme/desc_pt_PT.json | 22 - .../ProxyWidget/DividerTheme/desc_ru_RU.json | 22 - .../ProxyWidget/DividerTheme/desc_zh-CN.json | 22 - .../ProxyWidget/DividerTheme/node1_base.dart | 46 - .../desc_de_DE.json | 18 - .../desc_en_US.json | 18 - .../desc_es_ES.json | 18 - .../desc_fr_FR.json | 18 - .../desc_it_IT.json | 18 - .../desc_ja_JP.json | 18 - .../desc_ko_KR.json | 18 - .../desc_pt_PT.json | 18 - .../desc_ru_RU.json | 18 - .../desc_zh-CN.json | 18 - .../node1_base.dart | 60 - .../lib/ProxyWidget/Expanded/desc_de_DE.json | 22 - .../lib/ProxyWidget/Expanded/desc_en_US.json | 22 - .../lib/ProxyWidget/Expanded/desc_es_ES.json | 22 - .../lib/ProxyWidget/Expanded/desc_fr_FR.json | 22 - .../lib/ProxyWidget/Expanded/desc_it_IT.json | 22 - .../lib/ProxyWidget/Expanded/desc_ja_JP.json | 22 - .../lib/ProxyWidget/Expanded/desc_ko_KR.json | 22 - .../lib/ProxyWidget/Expanded/desc_pt_PT.json | 22 - .../lib/ProxyWidget/Expanded/desc_ru_RU.json | 22 - .../lib/ProxyWidget/Expanded/desc_zh-CN.json | 22 - .../lib/ProxyWidget/Expanded/node1_base.dart | 46 - .../lib/ProxyWidget/Flexible/desc_de_DE.json | 23 - .../lib/ProxyWidget/Flexible/desc_en_US.json | 23 - .../lib/ProxyWidget/Flexible/desc_es_ES.json | 23 - .../lib/ProxyWidget/Flexible/desc_fr_FR.json | 23 - .../lib/ProxyWidget/Flexible/desc_it_IT.json | 23 - .../lib/ProxyWidget/Flexible/desc_ja_JP.json | 23 - .../lib/ProxyWidget/Flexible/desc_ko_KR.json | 23 - .../lib/ProxyWidget/Flexible/desc_pt_PT.json | 23 - .../lib/ProxyWidget/Flexible/desc_ru_RU.json | 23 - .../lib/ProxyWidget/Flexible/desc_zh-CN.json | 23 - .../lib/ProxyWidget/Flexible/node1_base.dart | 85 - .../lib/ProxyWidget/IconTheme/desc_de_DE.json | 18 - .../lib/ProxyWidget/IconTheme/desc_en_US.json | 18 - .../lib/ProxyWidget/IconTheme/desc_es_ES.json | 18 - .../lib/ProxyWidget/IconTheme/desc_fr_FR.json | 18 - .../lib/ProxyWidget/IconTheme/desc_it_IT.json | 18 - .../lib/ProxyWidget/IconTheme/desc_ja_JP.json | 18 - .../lib/ProxyWidget/IconTheme/desc_ko_KR.json | 18 - .../lib/ProxyWidget/IconTheme/desc_pt_PT.json | 18 - .../lib/ProxyWidget/IconTheme/desc_ru_RU.json | 18 - .../lib/ProxyWidget/IconTheme/desc_zh-CN.json | 18 - .../lib/ProxyWidget/IconTheme/node1_base.dart | 28 - .../InheritedModel/desc_de_DE.json | 19 - .../InheritedModel/desc_en_US.json | 19 - .../InheritedModel/desc_es_ES.json | 19 - .../InheritedModel/desc_fr_FR.json | 19 - .../InheritedModel/desc_it_IT.json | 19 - .../InheritedModel/desc_ja_JP.json | 19 - .../InheritedModel/desc_ko_KR.json | 19 - .../InheritedModel/desc_pt_PT.json | 19 - .../InheritedModel/desc_ru_RU.json | 19 - .../InheritedModel/desc_zh-CN.json | 19 - .../lib/ProxyWidget/InheritedModel/node1.dart | 251 -- .../InheritedTheme/desc_de_DE.json | 66 - .../InheritedTheme/desc_en_US.json | 66 - .../InheritedTheme/desc_es_ES.json | 66 - .../InheritedTheme/desc_fr_FR.json | 66 - .../InheritedTheme/desc_it_IT.json | 66 - .../InheritedTheme/desc_ja_JP.json | 66 - .../InheritedTheme/desc_ko_KR.json | 66 - .../InheritedTheme/desc_pt_PT.json | 66 - .../InheritedTheme/desc_ru_RU.json | 66 - .../InheritedTheme/desc_zh-CN.json | 66 - .../InheritedTheme/node1_base.dart | 52 - .../InheritedWidget/desc_de_DE.json | 36 - .../InheritedWidget/desc_en_US.json | 36 - .../InheritedWidget/desc_es_ES.json | 36 - .../InheritedWidget/desc_fr_FR.json | 36 - .../InheritedWidget/desc_it_IT.json | 36 - .../InheritedWidget/desc_ja_JP.json | 36 - .../InheritedWidget/desc_ko_KR.json | 36 - .../InheritedWidget/desc_pt_PT.json | 36 - .../InheritedWidget/desc_ru_RU.json | 36 - .../InheritedWidget/desc_zh-CN.json | 36 - .../InheritedWidget/node1_base.dart | 49 - .../InheritedWidget/node2_use.dart | 218 -- .../lib/ProxyWidget/KeepAlive/desc_de_DE.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_en_US.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_es_ES.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_fr_FR.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_it_IT.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_ja_JP.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_ko_KR.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_pt_PT.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_ru_RU.json | 20 - .../lib/ProxyWidget/KeepAlive/desc_zh-CN.json | 20 - .../lib/ProxyWidget/KeepAlive/node1_base.dart | 113 - .../lib/ProxyWidget/LayoutId/desc_de_DE.json | 19 - .../lib/ProxyWidget/LayoutId/desc_en_US.json | 19 - .../lib/ProxyWidget/LayoutId/desc_es_ES.json | 19 - .../lib/ProxyWidget/LayoutId/desc_fr_FR.json | 19 - .../lib/ProxyWidget/LayoutId/desc_it_IT.json | 19 - .../lib/ProxyWidget/LayoutId/desc_ja_JP.json | 19 - .../lib/ProxyWidget/LayoutId/desc_ko_KR.json | 19 - .../lib/ProxyWidget/LayoutId/desc_pt_PT.json | 19 - .../lib/ProxyWidget/LayoutId/desc_ru_RU.json | 19 - .../lib/ProxyWidget/LayoutId/desc_zh-CN.json | 19 - .../lib/ProxyWidget/LayoutId/node1_base.dart | 84 - .../ProxyWidget/ListTileTheme/desc_de_DE.json | 18 - .../ProxyWidget/ListTileTheme/desc_en_US.json | 18 - .../ProxyWidget/ListTileTheme/desc_es_ES.json | 18 - .../ProxyWidget/ListTileTheme/desc_fr_FR.json | 18 - .../ProxyWidget/ListTileTheme/desc_it_IT.json | 18 - .../ProxyWidget/ListTileTheme/desc_ja_JP.json | 18 - .../ProxyWidget/ListTileTheme/desc_ko_KR.json | 18 - .../ProxyWidget/ListTileTheme/desc_pt_PT.json | 18 - .../ProxyWidget/ListTileTheme/desc_ru_RU.json | 18 - .../ProxyWidget/ListTileTheme/desc_zh-CN.json | 18 - .../ProxyWidget/ListTileTheme/node1_base.dart | 47 - .../MaterialBannerTheme/desc_de_DE.json | 18 - .../MaterialBannerTheme/desc_en_US.json | 18 - .../MaterialBannerTheme/desc_es_ES.json | 18 - .../MaterialBannerTheme/desc_fr_FR.json | 18 - .../MaterialBannerTheme/desc_it_IT.json | 18 - .../MaterialBannerTheme/desc_ja_JP.json | 18 - .../MaterialBannerTheme/desc_ko_KR.json | 18 - .../MaterialBannerTheme/desc_pt_PT.json | 18 - .../MaterialBannerTheme/desc_ru_RU.json | 18 - .../MaterialBannerTheme/desc_zh-CN.json | 18 - .../MaterialBannerTheme/node1_base.dart | 62 - .../ProxyWidget/MediaQuery/desc_de_DE.json | 18 - .../ProxyWidget/MediaQuery/desc_en_US.json | 18 - .../ProxyWidget/MediaQuery/desc_es_ES.json | 18 - .../ProxyWidget/MediaQuery/desc_fr_FR.json | 18 - .../ProxyWidget/MediaQuery/desc_it_IT.json | 18 - .../ProxyWidget/MediaQuery/desc_ja_JP.json | 18 - .../ProxyWidget/MediaQuery/desc_ko_KR.json | 18 - .../ProxyWidget/MediaQuery/desc_pt_PT.json | 18 - .../ProxyWidget/MediaQuery/desc_ru_RU.json | 18 - .../ProxyWidget/MediaQuery/desc_zh-CN.json | 18 - .../ProxyWidget/MediaQuery/node1_base.dart | 65 - .../ParentDataWidget/desc_de_DE.json | 23 - .../ParentDataWidget/desc_en_US.json | 23 - .../ParentDataWidget/desc_es_ES.json | 23 - .../ParentDataWidget/desc_fr_FR.json | 23 - .../ParentDataWidget/desc_it_IT.json | 23 - .../ParentDataWidget/desc_ja_JP.json | 23 - .../ParentDataWidget/desc_ko_KR.json | 23 - .../ParentDataWidget/desc_pt_PT.json | 23 - .../ParentDataWidget/desc_ru_RU.json | 23 - .../ParentDataWidget/desc_zh-CN.json | 23 - .../ParentDataWidget/node1_base.dart | 24 - .../PopupMenuTheme/desc_de_DE.json | 18 - .../PopupMenuTheme/desc_en_US.json | 18 - .../PopupMenuTheme/desc_es_ES.json | 18 - .../PopupMenuTheme/desc_fr_FR.json | 18 - .../PopupMenuTheme/desc_it_IT.json | 18 - .../PopupMenuTheme/desc_ja_JP.json | 18 - .../PopupMenuTheme/desc_ko_KR.json | 18 - .../PopupMenuTheme/desc_pt_PT.json | 18 - .../PopupMenuTheme/desc_ru_RU.json | 18 - .../PopupMenuTheme/desc_zh-CN.json | 18 - .../PopupMenuTheme/node1_base.dart | 67 - .../ProxyWidget/Positioned/desc_de_DE.json | 26 - .../ProxyWidget/Positioned/desc_en_US.json | 26 - .../ProxyWidget/Positioned/desc_es_ES.json | 26 - .../ProxyWidget/Positioned/desc_fr_FR.json | 26 - .../ProxyWidget/Positioned/desc_it_IT.json | 26 - .../ProxyWidget/Positioned/desc_ja_JP.json | 26 - .../ProxyWidget/Positioned/desc_ko_KR.json | 26 - .../ProxyWidget/Positioned/desc_pt_PT.json | 26 - .../ProxyWidget/Positioned/desc_ru_RU.json | 26 - .../ProxyWidget/Positioned/desc_zh-CN.json | 26 - .../ProxyWidget/Positioned/node1_base.dart | 52 - .../PrimaryScrollController/desc_de_DE.json | 23 - .../PrimaryScrollController/desc_en_US.json | 23 - .../PrimaryScrollController/desc_es_ES.json | 23 - .../PrimaryScrollController/desc_fr_FR.json | 23 - .../PrimaryScrollController/desc_it_IT.json | 23 - .../PrimaryScrollController/desc_ja_JP.json | 23 - .../PrimaryScrollController/desc_ko_KR.json | 23 - .../PrimaryScrollController/desc_pt_PT.json | 23 - .../PrimaryScrollController/desc_ru_RU.json | 23 - .../PrimaryScrollController/desc_zh-CN.json | 23 - .../PrimaryScrollController/node1_base.dart | 29 - .../ScrollConfiguration/desc_de_DE.json | 24 - .../ScrollConfiguration/desc_en_US.json | 24 - .../ScrollConfiguration/desc_es_ES.json | 24 - .../ScrollConfiguration/desc_fr_FR.json | 24 - .../ScrollConfiguration/desc_it_IT.json | 24 - .../ScrollConfiguration/desc_ja_JP.json | 24 - .../ScrollConfiguration/desc_ko_KR.json | 24 - .../ScrollConfiguration/desc_pt_PT.json | 24 - .../ScrollConfiguration/desc_ru_RU.json | 24 - .../ScrollConfiguration/desc_zh-CN.json | 24 - .../ScrollConfiguration/node1_base.dart | 62 - .../ProxyWidget/SliderTheme/desc_de_DE.json | 27 - .../ProxyWidget/SliderTheme/desc_en_US.json | 27 - .../ProxyWidget/SliderTheme/desc_es_ES.json | 27 - .../ProxyWidget/SliderTheme/desc_fr_FR.json | 27 - .../ProxyWidget/SliderTheme/desc_it_IT.json | 27 - .../ProxyWidget/SliderTheme/desc_ja_JP.json | 27 - .../ProxyWidget/SliderTheme/desc_ko_KR.json | 27 - .../ProxyWidget/SliderTheme/desc_pt_PT.json | 27 - .../ProxyWidget/SliderTheme/desc_ru_RU.json | 27 - .../ProxyWidget/SliderTheme/desc_zh-CN.json | 27 - .../ProxyWidget/SliderTheme/node1_base.dart | 35 - .../ProxyWidget/SliderTheme/node2_diy.dart | 173 - .../lib/ProxyWidget/TableCell/desc_de_DE.json | 19 - .../lib/ProxyWidget/TableCell/desc_en_US.json | 19 - .../lib/ProxyWidget/TableCell/desc_es_ES.json | 19 - .../lib/ProxyWidget/TableCell/desc_fr_FR.json | 19 - .../lib/ProxyWidget/TableCell/desc_it_IT.json | 19 - .../lib/ProxyWidget/TableCell/desc_ja_JP.json | 19 - .../lib/ProxyWidget/TableCell/desc_ko_KR.json | 19 - .../lib/ProxyWidget/TableCell/desc_pt_PT.json | 19 - .../lib/ProxyWidget/TableCell/desc_ru_RU.json | 19 - .../lib/ProxyWidget/TableCell/desc_zh-CN.json | 19 - .../lib/ProxyWidget/TableCell/node1_base.dart | 72 - .../ToggleButtonsTheme/desc_de_DE.json | 18 - .../ToggleButtonsTheme/desc_en_US.json | 18 - .../ToggleButtonsTheme/desc_es_ES.json | 18 - .../ToggleButtonsTheme/desc_fr_FR.json | 18 - .../ToggleButtonsTheme/desc_it_IT.json | 18 - .../ToggleButtonsTheme/desc_ja_JP.json | 18 - .../ToggleButtonsTheme/desc_ko_KR.json | 18 - .../ToggleButtonsTheme/desc_pt_PT.json | 18 - .../ToggleButtonsTheme/desc_ru_RU.json | 18 - .../ToggleButtonsTheme/desc_zh-CN.json | 18 - .../ToggleButtonsTheme/node1_base.dart | 51 - .../ProxyWidget/TooltipTheme/desc_de_DE.json | 18 - .../ProxyWidget/TooltipTheme/desc_en_US.json | 18 - .../ProxyWidget/TooltipTheme/desc_es_ES.json | 18 - .../ProxyWidget/TooltipTheme/desc_fr_FR.json | 18 - .../ProxyWidget/TooltipTheme/desc_it_IT.json | 18 - .../ProxyWidget/TooltipTheme/desc_ja_JP.json | 18 - .../ProxyWidget/TooltipTheme/desc_ko_KR.json | 18 - .../ProxyWidget/TooltipTheme/desc_pt_PT.json | 18 - .../ProxyWidget/TooltipTheme/desc_ru_RU.json | 18 - .../ProxyWidget/TooltipTheme/desc_zh-CN.json | 18 - .../ProxyWidget/TooltipTheme/node1_base.dart | 44 - .../AbsorbPointer/desc_de_DE.json | 25 - .../AbsorbPointer/desc_en_US.json | 25 - .../AbsorbPointer/desc_es_ES.json | 25 - .../AbsorbPointer/desc_fr_FR.json | 25 - .../AbsorbPointer/desc_it_IT.json | 25 - .../AbsorbPointer/desc_ja_JP.json | 25 - .../AbsorbPointer/desc_ko_KR.json | 25 - .../AbsorbPointer/desc_pt_PT.json | 25 - .../AbsorbPointer/desc_ru_RU.json | 25 - .../AbsorbPointer/desc_zh-CN.json | 25 - .../AbsorbPointer/node1_base.dart | 51 - .../Align/desc_de_DE.json | 32 - .../Align/desc_en_US.json | 32 - .../Align/desc_es_ES.json | 32 - .../Align/desc_fr_FR.json | 32 - .../Align/desc_it_IT.json | 32 - .../Align/desc_ja_JP.json | 32 - .../Align/desc_ko_KR.json | 32 - .../Align/desc_pt_PT.json | 32 - .../Align/desc_ru_RU.json | 32 - .../Align/desc_zh-CN.json | 32 - .../Align/node1_base.dart | 55 - .../Align/node2_other.dart | 73 - .../AnimatedSize/desc_de_DE.json | 22 - .../AnimatedSize/desc_en_US.json | 22 - .../AnimatedSize/desc_es_ES.json | 22 - .../AnimatedSize/desc_fr_FR.json | 22 - .../AnimatedSize/desc_it_IT.json | 22 - .../AnimatedSize/desc_ja_JP.json | 22 - .../AnimatedSize/desc_ko_KR.json | 22 - .../AnimatedSize/desc_pt_PT.json | 22 - .../AnimatedSize/desc_ru_RU.json | 22 - .../AnimatedSize/desc_zh-CN.json | 22 - .../AnimatedSize/node1_base.dart | 64 - .../AnnotatedRegion/desc_de_DE.json | 20 - .../AnnotatedRegion/desc_en_US.json | 20 - .../AnnotatedRegion/desc_es_ES.json | 20 - .../AnnotatedRegion/desc_fr_FR.json | 20 - .../AnnotatedRegion/desc_it_IT.json | 20 - .../AnnotatedRegion/desc_ja_JP.json | 20 - .../AnnotatedRegion/desc_ko_KR.json | 20 - .../AnnotatedRegion/desc_pt_PT.json | 20 - .../AnnotatedRegion/desc_ru_RU.json | 20 - .../AnnotatedRegion/desc_zh-CN.json | 20 - .../AnnotatedRegion/node1_base.dart | 76 - .../AspectRatio/desc_de_DE.json | 19 - .../AspectRatio/desc_en_US.json | 19 - .../AspectRatio/desc_es_ES.json | 19 - .../AspectRatio/desc_fr_FR.json | 19 - .../AspectRatio/desc_it_IT.json | 19 - .../AspectRatio/desc_ja_JP.json | 19 - .../AspectRatio/desc_ko_KR.json | 19 - .../AspectRatio/desc_pt_PT.json | 19 - .../AspectRatio/desc_ru_RU.json | 19 - .../AspectRatio/desc_zh-CN.json | 19 - .../AspectRatio/node1_base.dart | 58 - .../BackdropFilter/desc_de_DE.json | 24 - .../BackdropFilter/desc_en_US.json | 24 - .../BackdropFilter/desc_es_ES.json | 24 - .../BackdropFilter/desc_fr_FR.json | 24 - .../BackdropFilter/desc_it_IT.json | 24 - .../BackdropFilter/desc_ja_JP.json | 24 - .../BackdropFilter/desc_ko_KR.json | 24 - .../BackdropFilter/desc_pt_PT.json | 24 - .../BackdropFilter/desc_ru_RU.json | 24 - .../BackdropFilter/desc_zh-CN.json | 24 - .../BackdropFilter/node1_base.dart | 94 - .../Baseline/desc_de_DE.json | 20 - .../Baseline/desc_en_US.json | 20 - .../Baseline/desc_es_ES.json | 20 - .../Baseline/desc_fr_FR.json | 20 - .../Baseline/desc_it_IT.json | 20 - .../Baseline/desc_ja_JP.json | 20 - .../Baseline/desc_ko_KR.json | 20 - .../Baseline/desc_pt_PT.json | 20 - .../Baseline/desc_ru_RU.json | 20 - .../Baseline/desc_zh-CN.json | 20 - .../Baseline/node1_base.dart | 49 - .../CallbackShortcuts/desc_de_DE.json | 25 - .../CallbackShortcuts/desc_en_US.json | 25 - .../CallbackShortcuts/desc_es_ES.json | 25 - .../CallbackShortcuts/desc_fr_FR.json | 25 - .../CallbackShortcuts/desc_it_IT.json | 25 - .../CallbackShortcuts/desc_ja_JP.json | 25 - .../CallbackShortcuts/desc_ko_KR.json | 25 - .../CallbackShortcuts/desc_pt_PT.json | 25 - .../CallbackShortcuts/desc_ru_RU.json | 25 - .../CallbackShortcuts/desc_zh-CN.json | 25 - .../CallbackShortcuts/node1.dart | 127 - .../Center/desc_de_DE.json | 18 - .../Center/desc_en_US.json | 18 - .../Center/desc_es_ES.json | 18 - .../Center/desc_fr_FR.json | 18 - .../Center/desc_it_IT.json | 18 - .../Center/desc_ja_JP.json | 18 - .../Center/desc_ko_KR.json | 18 - .../Center/desc_pt_PT.json | 18 - .../Center/desc_ru_RU.json | 18 - .../Center/desc_zh-CN.json | 18 - .../Center/node1_base.dart | 23 - .../ClipOval/desc_de_DE.json | 24 - .../ClipOval/desc_en_US.json | 24 - .../ClipOval/desc_es_ES.json | 24 - .../ClipOval/desc_fr_FR.json | 24 - .../ClipOval/desc_it_IT.json | 24 - .../ClipOval/desc_ja_JP.json | 24 - .../ClipOval/desc_ko_KR.json | 24 - .../ClipOval/desc_pt_PT.json | 24 - .../ClipOval/desc_ru_RU.json | 24 - .../ClipOval/desc_zh-CN.json | 24 - .../ClipOval/node1_base.dart | 32 - .../ClipPath/desc_de_DE.json | 24 - .../ClipPath/desc_en_US.json | 24 - .../ClipPath/desc_es_ES.json | 24 - .../ClipPath/desc_fr_FR.json | 24 - .../ClipPath/desc_it_IT.json | 24 - .../ClipPath/desc_ja_JP.json | 24 - .../ClipPath/desc_ko_KR.json | 24 - .../ClipPath/desc_pt_PT.json | 24 - .../ClipPath/desc_ru_RU.json | 24 - .../ClipPath/desc_zh-CN.json | 24 - .../ClipPath/node1_base.dart | 62 - .../ClipRRect/desc_de_DE.json | 25 - .../ClipRRect/desc_en_US.json | 25 - .../ClipRRect/desc_es_ES.json | 25 - .../ClipRRect/desc_fr_FR.json | 25 - .../ClipRRect/desc_it_IT.json | 25 - .../ClipRRect/desc_ja_JP.json | 25 - .../ClipRRect/desc_ko_KR.json | 25 - .../ClipRRect/desc_pt_PT.json | 25 - .../ClipRRect/desc_ru_RU.json | 25 - .../ClipRRect/desc_zh-CN.json | 25 - .../ClipRRect/node1_base.dart | 19 - .../ClipRect/desc_de_DE.json | 24 - .../ClipRect/desc_en_US.json | 24 - .../ClipRect/desc_es_ES.json | 24 - .../ClipRect/desc_fr_FR.json | 24 - .../ClipRect/desc_it_IT.json | 24 - .../ClipRect/desc_ja_JP.json | 24 - .../ClipRect/desc_ko_KR.json | 24 - .../ClipRect/desc_pt_PT.json | 24 - .../ClipRect/desc_ru_RU.json | 24 - .../ClipRect/desc_zh-CN.json | 24 - .../ClipRect/node1_base.dart | 21 - .../ColorFiltered/desc_de_DE.json | 22 - .../ColorFiltered/desc_en_US.json | 22 - .../ColorFiltered/desc_es_ES.json | 22 - .../ColorFiltered/desc_fr_FR.json | 22 - .../ColorFiltered/desc_it_IT.json | 22 - .../ColorFiltered/desc_ja_JP.json | 22 - .../ColorFiltered/desc_ko_KR.json | 22 - .../ColorFiltered/desc_pt_PT.json | 22 - .../ColorFiltered/desc_ru_RU.json | 22 - .../ColorFiltered/desc_zh-CN.json | 22 - .../ColorFiltered/node1_base.dart | 60 - .../ColoredBox/desc_de_DE.json | 19 - .../ColoredBox/desc_en_US.json | 19 - .../ColoredBox/desc_es_ES.json | 19 - .../ColoredBox/desc_fr_FR.json | 19 - .../ColoredBox/desc_it_IT.json | 19 - .../ColoredBox/desc_ja_JP.json | 19 - .../ColoredBox/desc_ko_KR.json | 19 - .../ColoredBox/desc_pt_PT.json | 19 - .../ColoredBox/desc_ru_RU.json | 19 - .../ColoredBox/desc_zh-CN.json | 19 - .../ColoredBox/node1_base.dart | 31 - .../desc_de_DE.json | 26 - .../desc_en_US.json | 26 - .../desc_es_ES.json | 26 - .../desc_fr_FR.json | 26 - .../desc_it_IT.json | 26 - .../desc_ja_JP.json | 26 - .../desc_ko_KR.json | 26 - .../desc_pt_PT.json | 26 - .../desc_ru_RU.json | 26 - .../desc_zh-CN.json | 26 - .../node1_base.dart | 106 - .../CompositedTransformTarget/desc_de_DE.json | 22 - .../CompositedTransformTarget/desc_en_US.json | 22 - .../CompositedTransformTarget/desc_es_ES.json | 22 - .../CompositedTransformTarget/desc_fr_FR.json | 22 - .../CompositedTransformTarget/desc_it_IT.json | 22 - .../CompositedTransformTarget/desc_ja_JP.json | 22 - .../CompositedTransformTarget/desc_ko_KR.json | 22 - .../CompositedTransformTarget/desc_pt_PT.json | 22 - .../CompositedTransformTarget/desc_ru_RU.json | 22 - .../CompositedTransformTarget/desc_zh-CN.json | 22 - .../CompositedTransformTarget/node1_base.dart | 103 - .../ConstrainedBox/desc_de_DE.json | 26 - .../ConstrainedBox/desc_en_US.json | 26 - .../ConstrainedBox/desc_es_ES.json | 26 - .../ConstrainedBox/desc_fr_FR.json | 26 - .../ConstrainedBox/desc_it_IT.json | 26 - .../ConstrainedBox/desc_ja_JP.json | 26 - .../ConstrainedBox/desc_ko_KR.json | 26 - .../ConstrainedBox/desc_pt_PT.json | 26 - .../ConstrainedBox/desc_ru_RU.json | 26 - .../ConstrainedBox/desc_zh-CN.json | 26 - .../ConstrainedBox/node1_base.dart | 65 - .../desc_de_DE.json | 18 - .../desc_en_US.json | 18 - .../desc_es_ES.json | 18 - .../desc_fr_FR.json | 18 - .../desc_it_IT.json | 18 - .../desc_ja_JP.json | 18 - .../desc_ko_KR.json | 18 - .../desc_pt_PT.json | 18 - .../desc_ru_RU.json | 18 - .../desc_zh-CN.json | 18 - .../node1_base.dart | 22 - .../CustomPaint/desc_de_DE.json | 25 - .../CustomPaint/desc_en_US.json | 25 - .../CustomPaint/desc_es_ES.json | 25 - .../CustomPaint/desc_fr_FR.json | 25 - .../CustomPaint/desc_it_IT.json | 25 - .../CustomPaint/desc_ja_JP.json | 25 - .../CustomPaint/desc_ko_KR.json | 25 - .../CustomPaint/desc_pt_PT.json | 25 - .../CustomPaint/desc_ru_RU.json | 25 - .../CustomPaint/desc_zh-CN.json | 25 - .../CustomPaint/node1_clock.dart | 198 -- .../CustomPaint/node2_bezier.dart | 168 - .../CustomSingleChildLayout/desc_de_DE.json | 25 - .../CustomSingleChildLayout/desc_en_US.json | 25 - .../CustomSingleChildLayout/desc_es_ES.json | 25 - .../CustomSingleChildLayout/desc_fr_FR.json | 25 - .../CustomSingleChildLayout/desc_it_IT.json | 25 - .../CustomSingleChildLayout/desc_ja_JP.json | 25 - .../CustomSingleChildLayout/desc_ko_KR.json | 25 - .../CustomSingleChildLayout/desc_pt_PT.json | 25 - .../CustomSingleChildLayout/desc_ru_RU.json | 25 - .../CustomSingleChildLayout/desc_zh-CN.json | 25 - .../CustomSingleChildLayout/node1_base.dart | 55 - .../CustomSingleChildLayout/node2_offset.dart | 113 - .../DecoratedBox/desc_de_DE.json | 55 - .../DecoratedBox/desc_en_US.json | 55 - .../DecoratedBox/desc_es_ES.json | 55 - .../DecoratedBox/desc_fr_FR.json | 55 - .../DecoratedBox/desc_it_IT.json | 55 - .../DecoratedBox/desc_ja_JP.json | 55 - .../DecoratedBox/desc_ko_KR.json | 55 - .../DecoratedBox/desc_pt_PT.json | 55 - .../DecoratedBox/desc_ru_RU.json | 55 - .../DecoratedBox/desc_zh-CN.json | 55 - .../DecoratedBox/node1_base.dart | 44 - .../DecoratedBox/node2_image.dart | 29 - .../DecoratedBox/node3_border.dart | 28 - .../DecoratedBox/node4_shape.dart | 39 - .../DecoratedBox/node5_line.dart | 22 - .../DecoratedBox/node6_flutterLogo.dart | 24 - .../FadeTransition/desc_de_DE.json | 22 - .../FadeTransition/desc_en_US.json | 22 - .../FadeTransition/desc_es_ES.json | 22 - .../FadeTransition/desc_fr_FR.json | 22 - .../FadeTransition/desc_it_IT.json | 22 - .../FadeTransition/desc_ja_JP.json | 22 - .../FadeTransition/desc_ko_KR.json | 22 - .../FadeTransition/desc_pt_PT.json | 22 - .../FadeTransition/desc_ru_RU.json | 22 - .../FadeTransition/desc_zh-CN.json | 22 - .../FadeTransition/node1_base.dart | 47 - .../FittedBox/desc_de_DE.json | 20 - .../FittedBox/desc_en_US.json | 20 - .../FittedBox/desc_es_ES.json | 20 - .../FittedBox/desc_fr_FR.json | 20 - .../FittedBox/desc_it_IT.json | 20 - .../FittedBox/desc_ja_JP.json | 20 - .../FittedBox/desc_ko_KR.json | 20 - .../FittedBox/desc_pt_PT.json | 20 - .../FittedBox/desc_ru_RU.json | 20 - .../FittedBox/desc_zh-CN.json | 20 - .../FittedBox/node1_base.dart | 87 - .../FractionalTranslation/desc_de_DE.json | 19 - .../FractionalTranslation/desc_en_US.json | 19 - .../FractionalTranslation/desc_es_ES.json | 19 - .../FractionalTranslation/desc_fr_FR.json | 19 - .../FractionalTranslation/desc_it_IT.json | 19 - .../FractionalTranslation/desc_ja_JP.json | 19 - .../FractionalTranslation/desc_ko_KR.json | 19 - .../FractionalTranslation/desc_pt_PT.json | 19 - .../FractionalTranslation/desc_ru_RU.json | 19 - .../FractionalTranslation/desc_zh-CN.json | 19 - .../FractionalTranslation/node1_base.dart | 62 - .../FractionallySizedBox/desc_de_DE.json | 21 - .../FractionallySizedBox/desc_en_US.json | 21 - .../FractionallySizedBox/desc_es_ES.json | 21 - .../FractionallySizedBox/desc_fr_FR.json | 21 - .../FractionallySizedBox/desc_it_IT.json | 21 - .../FractionallySizedBox/desc_ja_JP.json | 21 - .../FractionallySizedBox/desc_ko_KR.json | 21 - .../FractionallySizedBox/desc_pt_PT.json | 21 - .../FractionallySizedBox/desc_ru_RU.json | 21 - .../FractionallySizedBox/desc_zh-CN.json | 21 - .../FractionallySizedBox/node1_base.dart | 56 - .../IgnorePointer/desc_de_DE.json | 25 - .../IgnorePointer/desc_en_US.json | 25 - .../IgnorePointer/desc_es_ES.json | 25 - .../IgnorePointer/desc_fr_FR.json | 25 - .../IgnorePointer/desc_it_IT.json | 25 - .../IgnorePointer/desc_ja_JP.json | 25 - .../IgnorePointer/desc_ko_KR.json | 25 - .../IgnorePointer/desc_pt_PT.json | 25 - .../IgnorePointer/desc_ru_RU.json | 25 - .../IgnorePointer/desc_zh-CN.json | 25 - .../IgnorePointer/node1_base.dart | 51 - .../ImageFiltered/desc_de_DE.json | 36 - .../ImageFiltered/desc_en_US.json | 36 - .../ImageFiltered/desc_es_ES.json | 36 - .../ImageFiltered/desc_fr_FR.json | 36 - .../ImageFiltered/desc_it_IT.json | 36 - .../ImageFiltered/desc_ja_JP.json | 36 - .../ImageFiltered/desc_ko_KR.json | 36 - .../ImageFiltered/desc_pt_PT.json | 36 - .../ImageFiltered/desc_ru_RU.json | 36 - .../ImageFiltered/desc_zh-CN.json | 36 - .../ImageFiltered/node1_blur.dart | 117 - .../ImageFiltered/node2_color.dart | 138 - .../ImageFiltered/node3_matrix.dart | 69 - .../IntrinsicHeight/desc_de_DE.json | 19 - .../IntrinsicHeight/desc_en_US.json | 19 - .../IntrinsicHeight/desc_es_ES.json | 19 - .../IntrinsicHeight/desc_fr_FR.json | 19 - .../IntrinsicHeight/desc_it_IT.json | 19 - .../IntrinsicHeight/desc_ja_JP.json | 19 - .../IntrinsicHeight/desc_ko_KR.json | 19 - .../IntrinsicHeight/desc_pt_PT.json | 19 - .../IntrinsicHeight/desc_ru_RU.json | 19 - .../IntrinsicHeight/desc_zh-CN.json | 19 - .../IntrinsicHeight/node1_base.dart | 66 - .../IntrinsicWidth/desc_de_DE.json | 19 - .../IntrinsicWidth/desc_en_US.json | 19 - .../IntrinsicWidth/desc_es_ES.json | 19 - .../IntrinsicWidth/desc_fr_FR.json | 19 - .../IntrinsicWidth/desc_it_IT.json | 19 - .../IntrinsicWidth/desc_ja_JP.json | 19 - .../IntrinsicWidth/desc_ko_KR.json | 19 - .../IntrinsicWidth/desc_pt_PT.json | 19 - .../IntrinsicWidth/desc_ru_RU.json | 19 - .../IntrinsicWidth/desc_zh-CN.json | 19 - .../IntrinsicWidth/node1_base.dart | 66 - .../LayoutBuilder/desc_de_DE.json | 34 - .../LayoutBuilder/desc_en_US.json | 34 - .../LayoutBuilder/desc_es_ES.json | 34 - .../LayoutBuilder/desc_fr_FR.json | 34 - .../LayoutBuilder/desc_it_IT.json | 34 - .../LayoutBuilder/desc_ja_JP.json | 34 - .../LayoutBuilder/desc_ko_KR.json | 34 - .../LayoutBuilder/desc_pt_PT.json | 34 - .../LayoutBuilder/desc_ru_RU.json | 34 - .../LayoutBuilder/desc_zh-CN.json | 34 - .../LayoutBuilder/node1_base.dart | 28 - .../LayoutBuilder/node2_fit.dart | 100 - .../LayoutBuilder/node3_expend.dart | 84 - .../LimitedBox/desc_de_DE.json | 22 - .../LimitedBox/desc_en_US.json | 22 - .../LimitedBox/desc_es_ES.json | 22 - .../LimitedBox/desc_fr_FR.json | 22 - .../LimitedBox/desc_it_IT.json | 22 - .../LimitedBox/desc_ja_JP.json | 22 - .../LimitedBox/desc_ko_KR.json | 22 - .../LimitedBox/desc_pt_PT.json | 22 - .../LimitedBox/desc_ru_RU.json | 22 - .../LimitedBox/desc_zh-CN.json | 22 - .../LimitedBox/node1_base.dart | 62 - .../OffStage/desc_de_DE.json | 21 - .../OffStage/desc_en_US.json | 21 - .../OffStage/desc_es_ES.json | 21 - .../OffStage/desc_fr_FR.json | 21 - .../OffStage/desc_it_IT.json | 21 - .../OffStage/desc_ja_JP.json | 21 - .../OffStage/desc_ko_KR.json | 21 - .../OffStage/desc_pt_PT.json | 21 - .../OffStage/desc_ru_RU.json | 21 - .../OffStage/desc_zh-CN.json | 21 - .../OffStage/node1_base.dart | 47 - .../Opacity/desc_de_DE.json | 22 - .../Opacity/desc_en_US.json | 22 - .../Opacity/desc_es_ES.json | 22 - .../Opacity/desc_fr_FR.json | 22 - .../Opacity/desc_it_IT.json | 22 - .../Opacity/desc_ja_JP.json | 22 - .../Opacity/desc_ko_KR.json | 22 - .../Opacity/desc_pt_PT.json | 22 - .../Opacity/desc_ru_RU.json | 22 - .../Opacity/desc_zh-CN.json | 22 - .../Opacity/node1_base.dart | 35 - .../OverflowBox/desc_de_DE.json | 23 - .../OverflowBox/desc_en_US.json | 23 - .../OverflowBox/desc_es_ES.json | 23 - .../OverflowBox/desc_fr_FR.json | 23 - .../OverflowBox/desc_it_IT.json | 23 - .../OverflowBox/desc_ja_JP.json | 23 - .../OverflowBox/desc_ko_KR.json | 23 - .../OverflowBox/desc_pt_PT.json | 23 - .../OverflowBox/desc_ru_RU.json | 23 - .../OverflowBox/desc_zh-CN.json | 23 - .../OverflowBox/node1_base.dart | 56 - .../Padding/desc_de_DE.json | 37 - .../Padding/desc_en_US.json | 37 - .../Padding/desc_es_ES.json | 37 - .../Padding/desc_fr_FR.json | 37 - .../Padding/desc_it_IT.json | 37 - .../Padding/desc_ja_JP.json | 37 - .../Padding/desc_ko_KR.json | 37 - .../Padding/desc_pt_PT.json | 37 - .../Padding/desc_ru_RU.json | 37 - .../Padding/desc_zh-CN.json | 37 - .../Padding/node1_all.dart | 29 - .../Padding/node2_only.dart | 29 - .../Padding/node3_symmetric.dart | 29 - .../PhysicalModel/desc_de_DE.json | 27 - .../PhysicalModel/desc_en_US.json | 27 - .../PhysicalModel/desc_es_ES.json | 27 - .../PhysicalModel/desc_fr_FR.json | 27 - .../PhysicalModel/desc_it_IT.json | 27 - .../PhysicalModel/desc_ja_JP.json | 27 - .../PhysicalModel/desc_ko_KR.json | 27 - .../PhysicalModel/desc_pt_PT.json | 27 - .../PhysicalModel/desc_ru_RU.json | 27 - .../PhysicalModel/desc_zh-CN.json | 27 - .../PhysicalModel/node1_base.dart | 48 - .../PhysicalShape/desc_de_DE.json | 23 - .../PhysicalShape/desc_en_US.json | 23 - .../PhysicalShape/desc_es_ES.json | 23 - .../PhysicalShape/desc_fr_FR.json | 23 - .../PhysicalShape/desc_it_IT.json | 23 - .../PhysicalShape/desc_ja_JP.json | 23 - .../PhysicalShape/desc_ko_KR.json | 23 - .../PhysicalShape/desc_pt_PT.json | 23 - .../PhysicalShape/desc_ru_RU.json | 23 - .../PhysicalShape/desc_zh-CN.json | 23 - .../PhysicalShape/node1_base.dart | 30 - .../RepaintBoundary/desc_de_DE.json | 26 - .../RepaintBoundary/desc_en_US.json | 26 - .../RepaintBoundary/desc_es_ES.json | 26 - .../RepaintBoundary/desc_fr_FR.json | 26 - .../RepaintBoundary/desc_it_IT.json | 26 - .../RepaintBoundary/desc_ja_JP.json | 26 - .../RepaintBoundary/desc_ko_KR.json | 26 - .../RepaintBoundary/desc_pt_PT.json | 26 - .../RepaintBoundary/desc_ru_RU.json | 26 - .../RepaintBoundary/desc_zh-CN.json | 26 - .../RepaintBoundary/main.dart | 26 - .../RepaintBoundary/node1_base.dart | 178 - .../RepaintBoundary/node2_save.dart | 70 - .../RotatedBox/desc_de_DE.json | 19 - .../RotatedBox/desc_en_US.json | 19 - .../RotatedBox/desc_es_ES.json | 19 - .../RotatedBox/desc_fr_FR.json | 19 - .../RotatedBox/desc_it_IT.json | 19 - .../RotatedBox/desc_ja_JP.json | 19 - .../RotatedBox/desc_ko_KR.json | 19 - .../RotatedBox/desc_pt_PT.json | 19 - .../RotatedBox/desc_ru_RU.json | 19 - .../RotatedBox/desc_zh-CN.json | 19 - .../RotatedBox/node1_base.dart | 28 - .../ShaderMask/desc_de_DE.json | 32 - .../ShaderMask/desc_en_US.json | 32 - .../ShaderMask/desc_es_ES.json | 32 - .../ShaderMask/desc_fr_FR.json | 32 - .../ShaderMask/desc_it_IT.json | 32 - .../ShaderMask/desc_ja_JP.json | 32 - .../ShaderMask/desc_ko_KR.json | 32 - .../ShaderMask/desc_pt_PT.json | 32 - .../ShaderMask/desc_ru_RU.json | 32 - .../ShaderMask/desc_zh-CN.json | 32 - .../ShaderMask/node1_radial.dart | 51 - .../ShaderMask/node2_linear.dart | 50 - .../SizeChangedLayoutNotifier/desc_de_DE.json | 18 - .../SizeChangedLayoutNotifier/desc_en_US.json | 18 - .../SizeChangedLayoutNotifier/desc_es_ES.json | 18 - .../SizeChangedLayoutNotifier/desc_fr_FR.json | 18 - .../SizeChangedLayoutNotifier/desc_it_IT.json | 18 - .../SizeChangedLayoutNotifier/desc_ja_JP.json | 18 - .../SizeChangedLayoutNotifier/desc_ko_KR.json | 18 - .../SizeChangedLayoutNotifier/desc_pt_PT.json | 18 - .../SizeChangedLayoutNotifier/desc_ru_RU.json | 18 - .../SizeChangedLayoutNotifier/desc_zh-CN.json | 18 - .../SizeChangedLayoutNotifier/node1_base.dart | 67 - .../SizedBox/desc_de_DE.json | 20 - .../SizedBox/desc_en_US.json | 20 - .../SizedBox/desc_es_ES.json | 20 - .../SizedBox/desc_fr_FR.json | 20 - .../SizedBox/desc_it_IT.json | 20 - .../SizedBox/desc_ja_JP.json | 20 - .../SizedBox/desc_ko_KR.json | 20 - .../SizedBox/desc_pt_PT.json | 20 - .../SizedBox/desc_ru_RU.json | 20 - .../SizedBox/desc_zh-CN.json | 20 - .../SizedBox/node1_base.dart | 38 - .../SizedOverflowBox/desc_de_DE.json | 20 - .../SizedOverflowBox/desc_en_US.json | 20 - .../SizedOverflowBox/desc_es_ES.json | 20 - .../SizedOverflowBox/desc_fr_FR.json | 20 - .../SizedOverflowBox/desc_it_IT.json | 20 - .../SizedOverflowBox/desc_ja_JP.json | 20 - .../SizedOverflowBox/desc_ko_KR.json | 20 - .../SizedOverflowBox/desc_pt_PT.json | 20 - .../SizedOverflowBox/desc_ru_RU.json | 20 - .../SizedOverflowBox/desc_zh-CN.json | 20 - .../SizedOverflowBox/node1_base.dart | 56 - .../TapRegion/desc_de_DE.json | 24 - .../TapRegion/desc_en_US.json | 24 - .../TapRegion/desc_es_ES.json | 24 - .../TapRegion/desc_fr_FR.json | 24 - .../TapRegion/desc_it_IT.json | 24 - .../TapRegion/desc_ja_JP.json | 24 - .../TapRegion/desc_ko_KR.json | 24 - .../TapRegion/desc_pt_PT.json | 24 - .../TapRegion/desc_ru_RU.json | 24 - .../TapRegion/desc_zh-CN.json | 24 - .../TapRegion/node1.dart | 45 - .../TextFieldTapRegion/desc_de_DE.json | 26 - .../TextFieldTapRegion/desc_en_US.json | 26 - .../TextFieldTapRegion/desc_es_ES.json | 26 - .../TextFieldTapRegion/desc_fr_FR.json | 26 - .../TextFieldTapRegion/desc_it_IT.json | 26 - .../TextFieldTapRegion/desc_ja_JP.json | 26 - .../TextFieldTapRegion/desc_ko_KR.json | 26 - .../TextFieldTapRegion/desc_pt_PT.json | 26 - .../TextFieldTapRegion/desc_ru_RU.json | 26 - .../TextFieldTapRegion/desc_zh-CN.json | 26 - .../TextFieldTapRegion/node1.dart | 85 - .../Transform/desc_de_DE.json | 53 - .../Transform/desc_en_US.json | 53 - .../Transform/desc_es_ES.json | 53 - .../Transform/desc_fr_FR.json | 53 - .../Transform/desc_it_IT.json | 53 - .../Transform/desc_ja_JP.json | 53 - .../Transform/desc_ko_KR.json | 53 - .../Transform/desc_pt_PT.json | 53 - .../Transform/desc_ru_RU.json | 53 - .../Transform/desc_zh-CN.json | 53 - .../Transform/matrix4_shower.dart | 22 - .../Transform/node1_skew.dart | 81 - .../Transform/node2_translation.dart | 92 - .../Transform/node3_scale.dart | 91 - .../Transform/node4_rotate.dart | 112 - .../Transform/node5_perspective.dart | 73 - .../Transform/zz_node_op.dart | 98 - .../UnConstrainedBox/desc_de_DE.json | 22 - .../UnConstrainedBox/desc_en_US.json | 22 - .../UnConstrainedBox/desc_es_ES.json | 22 - .../UnConstrainedBox/desc_fr_FR.json | 22 - .../UnConstrainedBox/desc_it_IT.json | 22 - .../UnConstrainedBox/desc_ja_JP.json | 22 - .../UnConstrainedBox/desc_ko_KR.json | 22 - .../UnConstrainedBox/desc_pt_PT.json | 22 - .../UnConstrainedBox/desc_ru_RU.json | 22 - .../UnConstrainedBox/desc_zh-CN.json | 22 - .../UnConstrainedBox/node1_base.dart | 73 - .../desc_de_DE.json | 27 - .../desc_en_US.json | 27 - .../desc_es_ES.json | 27 - .../desc_fr_FR.json | 27 - .../desc_it_IT.json | 27 - .../desc_ja_JP.json | 27 - .../desc_ko_KR.json | 27 - .../desc_pt_PT.json | 27 - .../desc_ru_RU.json | 27 - .../desc_zh-CN.json | 27 - .../node1_base.dart | 88 - .../desc_de_DE.json | 24 - .../desc_en_US.json | 24 - .../desc_es_ES.json | 24 - .../desc_fr_FR.json | 24 - .../desc_it_IT.json | 24 - .../desc_ja_JP.json | 24 - .../desc_ko_KR.json | 24 - .../desc_pt_PT.json | 24 - .../desc_ru_RU.json | 24 - .../desc_zh-CN.json | 24 - .../node1_base.dart | 120 - .../Sliver/CustomScrollView/desc_de_DE.json | 25 - .../Sliver/CustomScrollView/desc_en_US.json | 25 - .../Sliver/CustomScrollView/desc_es_ES.json | 25 - .../Sliver/CustomScrollView/desc_fr_FR.json | 25 - .../Sliver/CustomScrollView/desc_it_IT.json | 25 - .../Sliver/CustomScrollView/desc_ja_JP.json | 25 - .../Sliver/CustomScrollView/desc_ko_KR.json | 25 - .../Sliver/CustomScrollView/desc_pt_PT.json | 25 - .../Sliver/CustomScrollView/desc_ru_RU.json | 25 - .../Sliver/CustomScrollView/desc_zh-CN.json | 25 - .../Sliver/CustomScrollView/node1_base.dart | 90 - .../Sliver/DecoratedSliver/desc_de_DE.json | 20 - .../Sliver/DecoratedSliver/desc_en_US.json | 20 - .../Sliver/DecoratedSliver/desc_es_ES.json | 20 - .../Sliver/DecoratedSliver/desc_fr_FR.json | 20 - .../Sliver/DecoratedSliver/desc_it_IT.json | 20 - .../Sliver/DecoratedSliver/desc_ja_JP.json | 20 - .../Sliver/DecoratedSliver/desc_ko_KR.json | 20 - .../Sliver/DecoratedSliver/desc_pt_PT.json | 20 - .../Sliver/DecoratedSliver/desc_ru_RU.json | 20 - .../Sliver/DecoratedSliver/desc_zh-CN.json | 20 - .../lib/Sliver/DecoratedSliver/node1.dart | 52 - .../Sliver/FlexibleSpaceBar/desc_de_DE.json | 23 - .../Sliver/FlexibleSpaceBar/desc_en_US.json | 23 - .../Sliver/FlexibleSpaceBar/desc_es_ES.json | 23 - .../Sliver/FlexibleSpaceBar/desc_fr_FR.json | 23 - .../Sliver/FlexibleSpaceBar/desc_it_IT.json | 23 - .../Sliver/FlexibleSpaceBar/desc_ja_JP.json | 23 - .../Sliver/FlexibleSpaceBar/desc_ko_KR.json | 23 - .../Sliver/FlexibleSpaceBar/desc_pt_PT.json | 23 - .../Sliver/FlexibleSpaceBar/desc_ru_RU.json | 23 - .../Sliver/FlexibleSpaceBar/desc_zh-CN.json | 23 - .../Sliver/FlexibleSpaceBar/node1_base.dart | 98 - .../Sliver/PinnedHeaderSliver/desc_de_DE.json | 38 - .../Sliver/PinnedHeaderSliver/desc_en_US.json | 38 - .../Sliver/PinnedHeaderSliver/desc_es_ES.json | 38 - .../Sliver/PinnedHeaderSliver/desc_fr_FR.json | 38 - .../Sliver/PinnedHeaderSliver/desc_it_IT.json | 38 - .../Sliver/PinnedHeaderSliver/desc_ja_JP.json | 38 - .../Sliver/PinnedHeaderSliver/desc_ko_KR.json | 38 - .../Sliver/PinnedHeaderSliver/desc_pt_PT.json | 38 - .../Sliver/PinnedHeaderSliver/desc_ru_RU.json | 38 - .../Sliver/PinnedHeaderSliver/desc_zh-CN.json | 38 - .../Sliver/PinnedHeaderSliver/node_01.dart | 115 - .../Sliver/PinnedHeaderSliver/node_02.dart | 109 - .../Sliver/PinnedHeaderSliver/node_03.dart | 161 - .../Sliver/SliverAnimatedList/desc_de_DE.json | 22 - .../Sliver/SliverAnimatedList/desc_en_US.json | 22 - .../Sliver/SliverAnimatedList/desc_es_ES.json | 22 - .../Sliver/SliverAnimatedList/desc_fr_FR.json | 22 - .../Sliver/SliverAnimatedList/desc_it_IT.json | 22 - .../Sliver/SliverAnimatedList/desc_ja_JP.json | 22 - .../Sliver/SliverAnimatedList/desc_ko_KR.json | 22 - .../Sliver/SliverAnimatedList/desc_pt_PT.json | 22 - .../Sliver/SliverAnimatedList/desc_ru_RU.json | 22 - .../Sliver/SliverAnimatedList/desc_zh-CN.json | 22 - .../Sliver/SliverAnimatedList/node1_base.dart | 192 -- .../lib/Sliver/SliverAppBar/desc_de_DE.json | 33 - .../lib/Sliver/SliverAppBar/desc_en_US.json | 33 - .../lib/Sliver/SliverAppBar/desc_es_ES.json | 33 - .../lib/Sliver/SliverAppBar/desc_fr_FR.json | 33 - .../lib/Sliver/SliverAppBar/desc_it_IT.json | 33 - .../lib/Sliver/SliverAppBar/desc_ja_JP.json | 33 - .../lib/Sliver/SliverAppBar/desc_ko_KR.json | 33 - .../lib/Sliver/SliverAppBar/desc_pt_PT.json | 33 - .../lib/Sliver/SliverAppBar/desc_ru_RU.json | 33 - .../lib/Sliver/SliverAppBar/desc_zh-CN.json | 33 - .../lib/Sliver/SliverAppBar/node1_base.dart | 155 - .../desc_de_DE.json | 22 - .../desc_en_US.json | 22 - .../desc_es_ES.json | 22 - .../desc_fr_FR.json | 22 - .../desc_it_IT.json | 22 - .../desc_ja_JP.json | 22 - .../desc_ko_KR.json | 22 - .../desc_pt_PT.json | 22 - .../desc_ru_RU.json | 22 - .../desc_zh-CN.json | 22 - .../SliverConstrainedCrossAxis/node1.dart | 86 - .../SliverCrossAxisExpanded/desc_de_DE.json | 22 - .../SliverCrossAxisExpanded/desc_en_US.json | 22 - .../SliverCrossAxisExpanded/desc_es_ES.json | 22 - .../SliverCrossAxisExpanded/desc_fr_FR.json | 22 - .../SliverCrossAxisExpanded/desc_it_IT.json | 22 - .../SliverCrossAxisExpanded/desc_ja_JP.json | 22 - .../SliverCrossAxisExpanded/desc_ko_KR.json | 22 - .../SliverCrossAxisExpanded/desc_pt_PT.json | 22 - .../SliverCrossAxisExpanded/desc_ru_RU.json | 22 - .../SliverCrossAxisExpanded/desc_zh-CN.json | 22 - .../Sliver/SliverCrossAxisExpanded/node1.dart | 76 - .../SliverCrossAxisGroup/desc_de_DE.json | 22 - .../SliverCrossAxisGroup/desc_en_US.json | 22 - .../SliverCrossAxisGroup/desc_es_ES.json | 22 - .../SliverCrossAxisGroup/desc_fr_FR.json | 22 - .../SliverCrossAxisGroup/desc_it_IT.json | 22 - .../SliverCrossAxisGroup/desc_ja_JP.json | 22 - .../SliverCrossAxisGroup/desc_ko_KR.json | 22 - .../SliverCrossAxisGroup/desc_pt_PT.json | 22 - .../SliverCrossAxisGroup/desc_ru_RU.json | 22 - .../SliverCrossAxisGroup/desc_zh-CN.json | 22 - .../Sliver/SliverCrossAxisGroup/node1.dart | 79 - .../SliverFillRemaining/desc_de_DE.json | 23 - .../SliverFillRemaining/desc_en_US.json | 23 - .../SliverFillRemaining/desc_es_ES.json | 23 - .../SliverFillRemaining/desc_fr_FR.json | 23 - .../SliverFillRemaining/desc_it_IT.json | 23 - .../SliverFillRemaining/desc_ja_JP.json | 23 - .../SliverFillRemaining/desc_ko_KR.json | 23 - .../SliverFillRemaining/desc_pt_PT.json | 23 - .../SliverFillRemaining/desc_ru_RU.json | 23 - .../SliverFillRemaining/desc_zh-CN.json | 23 - .../SliverFillRemaining/node1_base.dart | 150 - .../Sliver/SliverFillViewport/desc_de_DE.json | 23 - .../Sliver/SliverFillViewport/desc_en_US.json | 23 - .../Sliver/SliverFillViewport/desc_es_ES.json | 23 - .../Sliver/SliverFillViewport/desc_fr_FR.json | 23 - .../Sliver/SliverFillViewport/desc_it_IT.json | 23 - .../Sliver/SliverFillViewport/desc_ja_JP.json | 23 - .../Sliver/SliverFillViewport/desc_ko_KR.json | 23 - .../Sliver/SliverFillViewport/desc_pt_PT.json | 23 - .../Sliver/SliverFillViewport/desc_ru_RU.json | 23 - .../Sliver/SliverFillViewport/desc_zh-CN.json | 23 - .../Sliver/SliverFillViewport/node1_base.dart | 112 - .../SliverFixedExtentList/desc_de_DE.json | 23 - .../SliverFixedExtentList/desc_en_US.json | 23 - .../SliverFixedExtentList/desc_es_ES.json | 23 - .../SliverFixedExtentList/desc_fr_FR.json | 23 - .../SliverFixedExtentList/desc_it_IT.json | 23 - .../SliverFixedExtentList/desc_ja_JP.json | 23 - .../SliverFixedExtentList/desc_ko_KR.json | 23 - .../SliverFixedExtentList/desc_pt_PT.json | 23 - .../SliverFixedExtentList/desc_ru_RU.json | 23 - .../SliverFixedExtentList/desc_zh-CN.json | 23 - .../SliverFixedExtentList/node1_base.dart | 96 - .../lib/Sliver/SliverGrid/desc_de_DE.json | 20 - .../lib/Sliver/SliverGrid/desc_en_US.json | 20 - .../lib/Sliver/SliverGrid/desc_es_ES.json | 20 - .../lib/Sliver/SliverGrid/desc_fr_FR.json | 20 - .../lib/Sliver/SliverGrid/desc_it_IT.json | 20 - .../lib/Sliver/SliverGrid/desc_ja_JP.json | 20 - .../lib/Sliver/SliverGrid/desc_ko_KR.json | 20 - .../lib/Sliver/SliverGrid/desc_pt_PT.json | 20 - .../lib/Sliver/SliverGrid/desc_ru_RU.json | 20 - .../lib/Sliver/SliverGrid/desc_zh-CN.json | 20 - .../lib/Sliver/SliverGrid/node1_base.dart | 82 - .../SliverIgnorePointer/desc_de_DE.json | 22 - .../SliverIgnorePointer/desc_en_US.json | 22 - .../SliverIgnorePointer/desc_es_ES.json | 22 - .../SliverIgnorePointer/desc_fr_FR.json | 22 - .../SliverIgnorePointer/desc_it_IT.json | 22 - .../SliverIgnorePointer/desc_ja_JP.json | 22 - .../SliverIgnorePointer/desc_ko_KR.json | 22 - .../SliverIgnorePointer/desc_pt_PT.json | 22 - .../SliverIgnorePointer/desc_ru_RU.json | 22 - .../SliverIgnorePointer/desc_zh-CN.json | 22 - .../SliverIgnorePointer/node1_base.dart | 151 - .../SliverLayoutBuilder/desc_de_DE.json | 21 - .../SliverLayoutBuilder/desc_en_US.json | 21 - .../SliverLayoutBuilder/desc_es_ES.json | 21 - .../SliverLayoutBuilder/desc_fr_FR.json | 21 - .../SliverLayoutBuilder/desc_it_IT.json | 21 - .../SliverLayoutBuilder/desc_ja_JP.json | 21 - .../SliverLayoutBuilder/desc_ko_KR.json | 21 - .../SliverLayoutBuilder/desc_pt_PT.json | 21 - .../SliverLayoutBuilder/desc_ru_RU.json | 21 - .../SliverLayoutBuilder/desc_zh-CN.json | 21 - .../SliverLayoutBuilder/node1_base.dart | 117 - .../lib/Sliver/SliverList/desc_de_DE.json | 22 - .../lib/Sliver/SliverList/desc_en_US.json | 22 - .../lib/Sliver/SliverList/desc_es_ES.json | 22 - .../lib/Sliver/SliverList/desc_fr_FR.json | 22 - .../lib/Sliver/SliverList/desc_it_IT.json | 22 - .../lib/Sliver/SliverList/desc_ja_JP.json | 22 - .../lib/Sliver/SliverList/desc_ko_KR.json | 22 - .../lib/Sliver/SliverList/desc_pt_PT.json | 22 - .../lib/Sliver/SliverList/desc_ru_RU.json | 22 - .../lib/Sliver/SliverList/desc_zh-CN.json | 22 - .../lib/Sliver/SliverList/node1_base.dart | 89 - .../SliverMainAxisGroup/desc_de_DE.json | 19 - .../SliverMainAxisGroup/desc_en_US.json | 19 - .../SliverMainAxisGroup/desc_es_ES.json | 19 - .../SliverMainAxisGroup/desc_fr_FR.json | 19 - .../SliverMainAxisGroup/desc_it_IT.json | 19 - .../SliverMainAxisGroup/desc_ja_JP.json | 19 - .../SliverMainAxisGroup/desc_ko_KR.json | 19 - .../SliverMainAxisGroup/desc_pt_PT.json | 19 - .../SliverMainAxisGroup/desc_ru_RU.json | 19 - .../SliverMainAxisGroup/desc_zh-CN.json | 19 - .../lib/Sliver/SliverMainAxisGroup/node1.dart | 95 - .../lib/Sliver/SliverOpacity/desc_de_DE.json | 19 - .../lib/Sliver/SliverOpacity/desc_en_US.json | 19 - .../lib/Sliver/SliverOpacity/desc_es_ES.json | 19 - .../lib/Sliver/SliverOpacity/desc_fr_FR.json | 19 - .../lib/Sliver/SliverOpacity/desc_it_IT.json | 19 - .../lib/Sliver/SliverOpacity/desc_ja_JP.json | 19 - .../lib/Sliver/SliverOpacity/desc_ko_KR.json | 19 - .../lib/Sliver/SliverOpacity/desc_pt_PT.json | 19 - .../lib/Sliver/SliverOpacity/desc_ru_RU.json | 19 - .../lib/Sliver/SliverOpacity/desc_zh-CN.json | 19 - .../lib/Sliver/SliverOpacity/node1_base.dart | 87 - .../SliverOverlapAbsorber/desc_de_DE.json | 23 - .../SliverOverlapAbsorber/desc_en_US.json | 23 - .../SliverOverlapAbsorber/desc_es_ES.json | 23 - .../SliverOverlapAbsorber/desc_fr_FR.json | 23 - .../SliverOverlapAbsorber/desc_it_IT.json | 23 - .../SliverOverlapAbsorber/desc_ja_JP.json | 23 - .../SliverOverlapAbsorber/desc_ko_KR.json | 23 - .../SliverOverlapAbsorber/desc_pt_PT.json | 23 - .../SliverOverlapAbsorber/desc_ru_RU.json | 23 - .../SliverOverlapAbsorber/desc_zh-CN.json | 23 - .../SliverOverlapAbsorber/node1_base.dart | 92 - .../SliverOverlapInjector/desc_de_DE.json | 23 - .../SliverOverlapInjector/desc_en_US.json | 23 - .../SliverOverlapInjector/desc_es_ES.json | 23 - .../SliverOverlapInjector/desc_fr_FR.json | 23 - .../SliverOverlapInjector/desc_it_IT.json | 23 - .../SliverOverlapInjector/desc_ja_JP.json | 23 - .../SliverOverlapInjector/desc_ko_KR.json | 23 - .../SliverOverlapInjector/desc_pt_PT.json | 23 - .../SliverOverlapInjector/desc_ru_RU.json | 23 - .../SliverOverlapInjector/desc_zh-CN.json | 23 - .../SliverOverlapInjector/node1_base.dart | 92 - .../lib/Sliver/SliverPadding/desc_de_DE.json | 19 - .../lib/Sliver/SliverPadding/desc_en_US.json | 19 - .../lib/Sliver/SliverPadding/desc_es_ES.json | 19 - .../lib/Sliver/SliverPadding/desc_fr_FR.json | 19 - .../lib/Sliver/SliverPadding/desc_it_IT.json | 19 - .../lib/Sliver/SliverPadding/desc_ja_JP.json | 19 - .../lib/Sliver/SliverPadding/desc_ko_KR.json | 19 - .../lib/Sliver/SliverPadding/desc_pt_PT.json | 19 - .../lib/Sliver/SliverPadding/desc_ru_RU.json | 19 - .../lib/Sliver/SliverPadding/desc_zh-CN.json | 19 - .../lib/Sliver/SliverPadding/node1_base.dart | 87 - .../SliverPersistentHeader/desc_de_DE.json | 20 - .../SliverPersistentHeader/desc_en_US.json | 20 - .../SliverPersistentHeader/desc_es_ES.json | 20 - .../SliverPersistentHeader/desc_fr_FR.json | 20 - .../SliverPersistentHeader/desc_it_IT.json | 20 - .../SliverPersistentHeader/desc_ja_JP.json | 20 - .../SliverPersistentHeader/desc_ko_KR.json | 20 - .../SliverPersistentHeader/desc_pt_PT.json | 20 - .../SliverPersistentHeader/desc_ru_RU.json | 20 - .../SliverPersistentHeader/desc_zh-CN.json | 20 - .../SliverPersistentHeader/node1_base.dart | 158 - .../SliverPrototypeExtentList/desc_de_DE.json | 22 - .../SliverPrototypeExtentList/desc_en_US.json | 22 - .../SliverPrototypeExtentList/desc_es_ES.json | 22 - .../SliverPrototypeExtentList/desc_fr_FR.json | 22 - .../SliverPrototypeExtentList/desc_it_IT.json | 22 - .../SliverPrototypeExtentList/desc_ja_JP.json | 22 - .../SliverPrototypeExtentList/desc_ko_KR.json | 22 - .../SliverPrototypeExtentList/desc_pt_PT.json | 22 - .../SliverPrototypeExtentList/desc_ru_RU.json | 22 - .../SliverPrototypeExtentList/desc_zh-CN.json | 22 - .../SliverPrototypeExtentList/node1_base.dart | 99 - .../Sliver/SliverToBoxAdapter/desc_de_DE.json | 18 - .../Sliver/SliverToBoxAdapter/desc_en_US.json | 18 - .../Sliver/SliverToBoxAdapter/desc_es_ES.json | 18 - .../Sliver/SliverToBoxAdapter/desc_fr_FR.json | 18 - .../Sliver/SliverToBoxAdapter/desc_it_IT.json | 18 - .../Sliver/SliverToBoxAdapter/desc_ja_JP.json | 18 - .../Sliver/SliverToBoxAdapter/desc_ko_KR.json | 18 - .../Sliver/SliverToBoxAdapter/desc_pt_PT.json | 18 - .../Sliver/SliverToBoxAdapter/desc_ru_RU.json | 18 - .../Sliver/SliverToBoxAdapter/desc_zh-CN.json | 18 - .../Sliver/SliverToBoxAdapter/node1_base.dart | 108 - .../SliverWithKeepAliveWidget/desc_de_DE.json | 25 - .../SliverWithKeepAliveWidget/desc_en_US.json | 25 - .../SliverWithKeepAliveWidget/desc_es_ES.json | 25 - .../SliverWithKeepAliveWidget/desc_fr_FR.json | 25 - .../SliverWithKeepAliveWidget/desc_it_IT.json | 25 - .../SliverWithKeepAliveWidget/desc_ja_JP.json | 25 - .../SliverWithKeepAliveWidget/desc_ko_KR.json | 25 - .../SliverWithKeepAliveWidget/desc_pt_PT.json | 25 - .../SliverWithKeepAliveWidget/desc_ru_RU.json | 25 - .../SliverWithKeepAliveWidget/desc_zh-CN.json | 25 - .../SliverWithKeepAliveWidget/node1_base.dart | 27 - .../AlignTransition/desc_de_DE.json | 22 - .../AlignTransition/desc_en_US.json | 22 - .../AlignTransition/desc_es_ES.json | 22 - .../AlignTransition/desc_fr_FR.json | 22 - .../AlignTransition/desc_it_IT.json | 22 - .../AlignTransition/desc_ja_JP.json | 22 - .../AlignTransition/desc_ko_KR.json | 22 - .../AlignTransition/desc_pt_PT.json | 22 - .../AlignTransition/desc_ru_RU.json | 22 - .../AlignTransition/desc_zh-CN.json | 22 - .../AlignTransition/node1_base.dart | 54 - .../AnimatedAlign/desc_de_DE.json | 26 - .../AnimatedAlign/desc_en_US.json | 26 - .../AnimatedAlign/desc_es_ES.json | 26 - .../AnimatedAlign/desc_fr_FR.json | 26 - .../AnimatedAlign/desc_it_IT.json | 26 - .../AnimatedAlign/desc_ja_JP.json | 26 - .../AnimatedAlign/desc_ko_KR.json | 26 - .../AnimatedAlign/desc_pt_PT.json | 26 - .../AnimatedAlign/desc_ru_RU.json | 26 - .../AnimatedAlign/desc_zh-CN.json | 26 - .../AnimatedAlign/node1_base.dart | 62 - .../AnimatedBuilder/desc_de_DE.json | 20 - .../AnimatedBuilder/desc_en_US.json | 20 - .../AnimatedBuilder/desc_es_ES.json | 20 - .../AnimatedBuilder/desc_fr_FR.json | 20 - .../AnimatedBuilder/desc_it_IT.json | 20 - .../AnimatedBuilder/desc_ja_JP.json | 20 - .../AnimatedBuilder/desc_ko_KR.json | 20 - .../AnimatedBuilder/desc_pt_PT.json | 20 - .../AnimatedBuilder/desc_ru_RU.json | 20 - .../AnimatedBuilder/desc_zh-CN.json | 20 - .../AnimatedBuilder/node1_base.dart | 62 - .../AnimatedContainer/desc_de_DE.json | 30 - .../AnimatedContainer/desc_en_US.json | 30 - .../AnimatedContainer/desc_es_ES.json | 30 - .../AnimatedContainer/desc_fr_FR.json | 30 - .../AnimatedContainer/desc_it_IT.json | 30 - .../AnimatedContainer/desc_ja_JP.json | 30 - .../AnimatedContainer/desc_ko_KR.json | 30 - .../AnimatedContainer/desc_pt_PT.json | 30 - .../AnimatedContainer/desc_ru_RU.json | 30 - .../AnimatedContainer/desc_zh-CN.json | 30 - .../AnimatedContainer/node1_base.dart | 94 - .../AnimatedCrossFade/desc_de_DE.json | 30 - .../AnimatedCrossFade/desc_en_US.json | 30 - .../AnimatedCrossFade/desc_es_ES.json | 30 - .../AnimatedCrossFade/desc_fr_FR.json | 30 - .../AnimatedCrossFade/desc_it_IT.json | 30 - .../AnimatedCrossFade/desc_ja_JP.json | 30 - .../AnimatedCrossFade/desc_ko_KR.json | 30 - .../AnimatedCrossFade/desc_pt_PT.json | 30 - .../AnimatedCrossFade/desc_ru_RU.json | 30 - .../AnimatedCrossFade/desc_zh-CN.json | 30 - .../AnimatedCrossFade/node1_base.dart | 58 - .../AnimatedCrossFade/node2_curve.dart | 56 - .../AnimatedDefaultTextStyle/desc_de_DE.json | 29 - .../AnimatedDefaultTextStyle/desc_en_US.json | 29 - .../AnimatedDefaultTextStyle/desc_es_ES.json | 29 - .../AnimatedDefaultTextStyle/desc_fr_FR.json | 29 - .../AnimatedDefaultTextStyle/desc_it_IT.json | 29 - .../AnimatedDefaultTextStyle/desc_ja_JP.json | 29 - .../AnimatedDefaultTextStyle/desc_ko_KR.json | 29 - .../AnimatedDefaultTextStyle/desc_pt_PT.json | 29 - .../AnimatedDefaultTextStyle/desc_ru_RU.json | 29 - .../AnimatedDefaultTextStyle/desc_zh-CN.json | 29 - .../AnimatedDefaultTextStyle/node1_base.dart | 73 - .../desc_de_DE.json | 31 - .../desc_en_US.json | 31 - .../desc_es_ES.json | 31 - .../desc_fr_FR.json | 31 - .../desc_it_IT.json | 31 - .../desc_ja_JP.json | 31 - .../desc_ko_KR.json | 31 - .../desc_pt_PT.json | 31 - .../desc_ru_RU.json | 31 - .../desc_zh-CN.json | 31 - .../AnimatedFractionallySizedBox/node1.dart | 58 - .../AnimatedList/desc_de_DE.json | 23 - .../AnimatedList/desc_en_US.json | 23 - .../AnimatedList/desc_es_ES.json | 23 - .../AnimatedList/desc_fr_FR.json | 23 - .../AnimatedList/desc_it_IT.json | 23 - .../AnimatedList/desc_ja_JP.json | 23 - .../AnimatedList/desc_ko_KR.json | 23 - .../AnimatedList/desc_pt_PT.json | 23 - .../AnimatedList/desc_ru_RU.json | 23 - .../AnimatedList/desc_zh-CN.json | 23 - .../AnimatedList/node1_base.dart | 179 - .../AnimatedModalBarrier/desc_de_DE.json | 19 - .../AnimatedModalBarrier/desc_en_US.json | 19 - .../AnimatedModalBarrier/desc_es_ES.json | 19 - .../AnimatedModalBarrier/desc_fr_FR.json | 19 - .../AnimatedModalBarrier/desc_it_IT.json | 19 - .../AnimatedModalBarrier/desc_ja_JP.json | 19 - .../AnimatedModalBarrier/desc_ko_KR.json | 19 - .../AnimatedModalBarrier/desc_pt_PT.json | 19 - .../AnimatedModalBarrier/desc_ru_RU.json | 19 - .../AnimatedModalBarrier/desc_zh-CN.json | 19 - .../AnimatedModalBarrier/node1_base.dart | 55 - .../AnimatedOpacity/desc_de_DE.json | 25 - .../AnimatedOpacity/desc_en_US.json | 25 - .../AnimatedOpacity/desc_es_ES.json | 25 - .../AnimatedOpacity/desc_fr_FR.json | 25 - .../AnimatedOpacity/desc_it_IT.json | 25 - .../AnimatedOpacity/desc_ja_JP.json | 25 - .../AnimatedOpacity/desc_ko_KR.json | 25 - .../AnimatedOpacity/desc_pt_PT.json | 25 - .../AnimatedOpacity/desc_ru_RU.json | 25 - .../AnimatedOpacity/desc_zh-CN.json | 25 - .../AnimatedOpacity/node1_base.dart | 42 - .../AnimatedPadding/desc_de_DE.json | 22 - .../AnimatedPadding/desc_en_US.json | 22 - .../AnimatedPadding/desc_es_ES.json | 22 - .../AnimatedPadding/desc_fr_FR.json | 22 - .../AnimatedPadding/desc_it_IT.json | 22 - .../AnimatedPadding/desc_ja_JP.json | 22 - .../AnimatedPadding/desc_ko_KR.json | 22 - .../AnimatedPadding/desc_pt_PT.json | 22 - .../AnimatedPadding/desc_ru_RU.json | 22 - .../AnimatedPadding/desc_zh-CN.json | 22 - .../AnimatedPadding/node1_base.dart | 58 - .../AnimatedPhysicalModel/desc_de_DE.json | 26 - .../AnimatedPhysicalModel/desc_en_US.json | 26 - .../AnimatedPhysicalModel/desc_es_ES.json | 26 - .../AnimatedPhysicalModel/desc_fr_FR.json | 26 - .../AnimatedPhysicalModel/desc_it_IT.json | 26 - .../AnimatedPhysicalModel/desc_ja_JP.json | 26 - .../AnimatedPhysicalModel/desc_ko_KR.json | 26 - .../AnimatedPhysicalModel/desc_pt_PT.json | 26 - .../AnimatedPhysicalModel/desc_ru_RU.json | 26 - .../AnimatedPhysicalModel/desc_zh-CN.json | 26 - .../AnimatedPhysicalModel/node1_base.dart | 52 - .../AnimatedPositioned/desc_de_DE.json | 29 - .../AnimatedPositioned/desc_en_US.json | 29 - .../AnimatedPositioned/desc_es_ES.json | 29 - .../AnimatedPositioned/desc_fr_FR.json | 29 - .../AnimatedPositioned/desc_it_IT.json | 29 - .../AnimatedPositioned/desc_ja_JP.json | 29 - .../AnimatedPositioned/desc_ko_KR.json | 29 - .../AnimatedPositioned/desc_pt_PT.json | 29 - .../AnimatedPositioned/desc_ru_RU.json | 29 - .../AnimatedPositioned/desc_zh-CN.json | 29 - .../AnimatedPositioned/node1_base.dart | 73 - .../desc_de_DE.json | 28 - .../desc_en_US.json | 28 - .../desc_es_ES.json | 28 - .../desc_fr_FR.json | 28 - .../desc_it_IT.json | 28 - .../desc_ja_JP.json | 28 - .../desc_ko_KR.json | 28 - .../desc_pt_PT.json | 28 - .../desc_ru_RU.json | 28 - .../desc_zh-CN.json | 28 - .../node1_base.dart | 74 - .../AnimatedRotation/desc_de_DE.json | 28 - .../AnimatedRotation/desc_en_US.json | 28 - .../AnimatedRotation/desc_es_ES.json | 28 - .../AnimatedRotation/desc_fr_FR.json | 28 - .../AnimatedRotation/desc_it_IT.json | 28 - .../AnimatedRotation/desc_ja_JP.json | 28 - .../AnimatedRotation/desc_ko_KR.json | 28 - .../AnimatedRotation/desc_pt_PT.json | 28 - .../AnimatedRotation/desc_ru_RU.json | 28 - .../AnimatedRotation/desc_zh-CN.json | 28 - .../AnimatedRotation/node1.dart | 76 - .../AnimatedScale/desc_de_DE.json | 29 - .../AnimatedScale/desc_en_US.json | 29 - .../AnimatedScale/desc_es_ES.json | 29 - .../AnimatedScale/desc_fr_FR.json | 29 - .../AnimatedScale/desc_it_IT.json | 29 - .../AnimatedScale/desc_ja_JP.json | 29 - .../AnimatedScale/desc_ko_KR.json | 29 - .../AnimatedScale/desc_pt_PT.json | 29 - .../AnimatedScale/desc_ru_RU.json | 29 - .../AnimatedScale/desc_zh-CN.json | 29 - .../StatefulWidget/AnimatedScale/node1.dart | 70 - .../AnimatedSlide/desc_de_DE.json | 26 - .../AnimatedSlide/desc_en_US.json | 26 - .../AnimatedSlide/desc_es_ES.json | 26 - .../AnimatedSlide/desc_fr_FR.json | 26 - .../AnimatedSlide/desc_it_IT.json | 26 - .../AnimatedSlide/desc_ja_JP.json | 26 - .../AnimatedSlide/desc_ko_KR.json | 26 - .../AnimatedSlide/desc_pt_PT.json | 26 - .../AnimatedSlide/desc_ru_RU.json | 26 - .../AnimatedSlide/desc_zh-CN.json | 26 - .../StatefulWidget/AnimatedSlide/node1.dart | 94 - .../AnimatedSwitcher/desc_de_DE.json | 23 - .../AnimatedSwitcher/desc_en_US.json | 23 - .../AnimatedSwitcher/desc_es_ES.json | 23 - .../AnimatedSwitcher/desc_fr_FR.json | 23 - .../AnimatedSwitcher/desc_it_IT.json | 23 - .../AnimatedSwitcher/desc_ja_JP.json | 23 - .../AnimatedSwitcher/desc_ko_KR.json | 23 - .../AnimatedSwitcher/desc_pt_PT.json | 23 - .../AnimatedSwitcher/desc_ru_RU.json | 23 - .../AnimatedSwitcher/desc_zh-CN.json | 23 - .../AnimatedSwitcher/node1_base.dart | 76 - .../AnimatedTheme/desc_de_DE.json | 22 - .../AnimatedTheme/desc_en_US.json | 22 - .../AnimatedTheme/desc_es_ES.json | 22 - .../AnimatedTheme/desc_fr_FR.json | 22 - .../AnimatedTheme/desc_it_IT.json | 22 - .../AnimatedTheme/desc_ja_JP.json | 22 - .../AnimatedTheme/desc_ko_KR.json | 22 - .../AnimatedTheme/desc_pt_PT.json | 22 - .../AnimatedTheme/desc_ru_RU.json | 22 - .../AnimatedTheme/desc_zh-CN.json | 22 - .../AnimatedTheme/node1_base.dart | 91 - .../lib/StatefulWidget/AppBar/desc_de_DE.json | 31 - .../lib/StatefulWidget/AppBar/desc_en_US.json | 31 - .../lib/StatefulWidget/AppBar/desc_es_ES.json | 31 - .../lib/StatefulWidget/AppBar/desc_fr_FR.json | 31 - .../lib/StatefulWidget/AppBar/desc_it_IT.json | 31 - .../lib/StatefulWidget/AppBar/desc_ja_JP.json | 31 - .../lib/StatefulWidget/AppBar/desc_ko_KR.json | 31 - .../lib/StatefulWidget/AppBar/desc_pt_PT.json | 31 - .../lib/StatefulWidget/AppBar/desc_ru_RU.json | 31 - .../lib/StatefulWidget/AppBar/desc_zh-CN.json | 31 - .../lib/StatefulWidget/AppBar/node1_base.dart | 38 - .../lib/StatefulWidget/AppBar/node2_tab.dart | 81 - .../AutomaticKeepAlive/desc_de_DE.json | 26 - .../AutomaticKeepAlive/desc_en_US.json | 26 - .../AutomaticKeepAlive/desc_es_ES.json | 26 - .../AutomaticKeepAlive/desc_fr_FR.json | 26 - .../AutomaticKeepAlive/desc_it_IT.json | 26 - .../AutomaticKeepAlive/desc_ja_JP.json | 26 - .../AutomaticKeepAlive/desc_ko_KR.json | 26 - .../AutomaticKeepAlive/desc_pt_PT.json | 26 - .../AutomaticKeepAlive/desc_ru_RU.json | 26 - .../AutomaticKeepAlive/desc_zh-CN.json | 26 - .../AutomaticKeepAlive/node1_base.dart | 114 - .../BottomAppBar/desc_de_DE.json | 22 - .../BottomAppBar/desc_en_US.json | 22 - .../BottomAppBar/desc_es_ES.json | 22 - .../BottomAppBar/desc_fr_FR.json | 22 - .../BottomAppBar/desc_it_IT.json | 22 - .../BottomAppBar/desc_ja_JP.json | 22 - .../BottomAppBar/desc_ko_KR.json | 22 - .../BottomAppBar/desc_pt_PT.json | 22 - .../BottomAppBar/desc_ru_RU.json | 22 - .../BottomAppBar/desc_zh-CN.json | 22 - .../BottomAppBar/node1_base.dart | 108 - .../BottomNavigationBar/desc_de_DE.json | 36 - .../BottomNavigationBar/desc_en_US.json | 36 - .../BottomNavigationBar/desc_es_ES.json | 36 - .../BottomNavigationBar/desc_fr_FR.json | 36 - .../BottomNavigationBar/desc_it_IT.json | 36 - .../BottomNavigationBar/desc_ja_JP.json | 36 - .../BottomNavigationBar/desc_ko_KR.json | 36 - .../BottomNavigationBar/desc_pt_PT.json | 36 - .../BottomNavigationBar/desc_ru_RU.json | 36 - .../BottomNavigationBar/desc_zh-CN.json | 36 - .../BottomNavigationBar/node1_base.dart | 81 - .../BottomNavigationBar/node2_page.dart | 95 - .../CarouselView/desc_de_DE.json | 38 - .../CarouselView/desc_en_US.json | 38 - .../CarouselView/desc_es_ES.json | 38 - .../CarouselView/desc_fr_FR.json | 38 - .../CarouselView/desc_it_IT.json | 38 - .../CarouselView/desc_ja_JP.json | 38 - .../CarouselView/desc_ko_KR.json | 38 - .../CarouselView/desc_pt_PT.json | 38 - .../CarouselView/desc_ru_RU.json | 38 - .../CarouselView/desc_zh-CN.json | 38 - .../CarouselView/node1_base.dart | 54 - .../StatefulWidget/CarouselView/node2.dart | 101 - .../StatefulWidget/Checkbox/desc_de_DE.json | 29 - .../StatefulWidget/Checkbox/desc_en_US.json | 29 - .../StatefulWidget/Checkbox/desc_es_ES.json | 29 - .../StatefulWidget/Checkbox/desc_fr_FR.json | 29 - .../StatefulWidget/Checkbox/desc_it_IT.json | 29 - .../StatefulWidget/Checkbox/desc_ja_JP.json | 29 - .../StatefulWidget/Checkbox/desc_ko_KR.json | 29 - .../StatefulWidget/Checkbox/desc_pt_PT.json | 29 - .../StatefulWidget/Checkbox/desc_ru_RU.json | 29 - .../StatefulWidget/Checkbox/desc_zh-CN.json | 29 - .../StatefulWidget/Checkbox/node1_base.dart | 39 - .../Checkbox/node2_tristate.dart | 35 - .../CircularProgressIndicator/desc_de_DE.json | 24 - .../CircularProgressIndicator/desc_en_US.json | 24 - .../CircularProgressIndicator/desc_es_ES.json | 24 - .../CircularProgressIndicator/desc_fr_FR.json | 24 - .../CircularProgressIndicator/desc_it_IT.json | 24 - .../CircularProgressIndicator/desc_ja_JP.json | 24 - .../CircularProgressIndicator/desc_ko_KR.json | 24 - .../CircularProgressIndicator/desc_pt_PT.json | 24 - .../CircularProgressIndicator/desc_ru_RU.json | 24 - .../CircularProgressIndicator/desc_zh-CN.json | 24 - .../CircularProgressIndicator/node1_base.dart | 35 - .../desc_de_DE.json | 22 - .../desc_en_US.json | 22 - .../desc_es_ES.json | 22 - .../desc_fr_FR.json | 22 - .../desc_it_IT.json | 22 - .../desc_ja_JP.json | 22 - .../desc_ko_KR.json | 22 - .../desc_pt_PT.json | 22 - .../desc_ru_RU.json | 22 - .../desc_zh-CN.json | 22 - .../node1_base.dart | 26 - .../CupertinoApp/desc_de_DE.json | 24 - .../CupertinoApp/desc_en_US.json | 24 - .../CupertinoApp/desc_es_ES.json | 24 - .../CupertinoApp/desc_fr_FR.json | 24 - .../CupertinoApp/desc_it_IT.json | 24 - .../CupertinoApp/desc_ja_JP.json | 24 - .../CupertinoApp/desc_ko_KR.json | 24 - .../CupertinoApp/desc_pt_PT.json | 24 - .../CupertinoApp/desc_ru_RU.json | 24 - .../CupertinoApp/desc_zh-CN.json | 24 - .../CupertinoApp/node1_base.dart | 39 - .../CupertinoButton/desc_de_DE.json | 23 - .../CupertinoButton/desc_en_US.json | 23 - .../CupertinoButton/desc_es_ES.json | 23 - .../CupertinoButton/desc_fr_FR.json | 23 - .../CupertinoButton/desc_it_IT.json | 23 - .../CupertinoButton/desc_ja_JP.json | 23 - .../CupertinoButton/desc_ko_KR.json | 23 - .../CupertinoButton/desc_pt_PT.json | 23 - .../CupertinoButton/desc_ru_RU.json | 23 - .../CupertinoButton/desc_zh-CN.json | 23 - .../CupertinoButton/node1_base.dart | 32 - .../CupertinoCheckbox/desc_de_DE.json | 43 - .../CupertinoCheckbox/desc_en_US.json | 43 - .../CupertinoCheckbox/desc_es_ES.json | 43 - .../CupertinoCheckbox/desc_fr_FR.json | 43 - .../CupertinoCheckbox/desc_it_IT.json | 43 - .../CupertinoCheckbox/desc_ja_JP.json | 43 - .../CupertinoCheckbox/desc_ko_KR.json | 43 - .../CupertinoCheckbox/desc_pt_PT.json | 43 - .../CupertinoCheckbox/desc_ru_RU.json | 43 - .../CupertinoCheckbox/desc_zh-CN.json | 43 - .../CupertinoCheckbox/node1.dart | 45 - .../CupertinoCheckbox/node2.dart | 27 - .../CupertinoCheckbox/node3.dart | 48 - .../CupertinoContextMenu/desc_de_DE.json | 20 - .../CupertinoContextMenu/desc_en_US.json | 20 - .../CupertinoContextMenu/desc_es_ES.json | 20 - .../CupertinoContextMenu/desc_fr_FR.json | 20 - .../CupertinoContextMenu/desc_it_IT.json | 20 - .../CupertinoContextMenu/desc_ja_JP.json | 20 - .../CupertinoContextMenu/desc_ko_KR.json | 20 - .../CupertinoContextMenu/desc_pt_PT.json | 20 - .../CupertinoContextMenu/desc_ru_RU.json | 20 - .../CupertinoContextMenu/desc_zh-CN.json | 20 - .../CupertinoContextMenu/node1_base.dart | 40 - .../desc_de_DE.json | 21 - .../desc_en_US.json | 21 - .../desc_es_ES.json | 21 - .../desc_fr_FR.json | 21 - .../desc_it_IT.json | 21 - .../desc_ja_JP.json | 21 - .../desc_ko_KR.json | 21 - .../desc_pt_PT.json | 21 - .../desc_ru_RU.json | 21 - .../desc_zh-CN.json | 21 - .../node1_base.dart | 34 - .../CupertinoDatePicker/desc_de_DE.json | 25 - .../CupertinoDatePicker/desc_en_US.json | 25 - .../CupertinoDatePicker/desc_es_ES.json | 25 - .../CupertinoDatePicker/desc_fr_FR.json | 25 - .../CupertinoDatePicker/desc_it_IT.json | 25 - .../CupertinoDatePicker/desc_ja_JP.json | 25 - .../CupertinoDatePicker/desc_ko_KR.json | 25 - .../CupertinoDatePicker/desc_pt_PT.json | 25 - .../CupertinoDatePicker/desc_ru_RU.json | 25 - .../CupertinoDatePicker/desc_zh-CN.json | 25 - .../CupertinoDatePicker/node1_base.dart | 67 - .../CupertinoNavigationBar/desc_de_DE.json | 23 - .../CupertinoNavigationBar/desc_en_US.json | 23 - .../CupertinoNavigationBar/desc_es_ES.json | 23 - .../CupertinoNavigationBar/desc_fr_FR.json | 23 - .../CupertinoNavigationBar/desc_it_IT.json | 23 - .../CupertinoNavigationBar/desc_ja_JP.json | 23 - .../CupertinoNavigationBar/desc_ko_KR.json | 23 - .../CupertinoNavigationBar/desc_pt_PT.json | 23 - .../CupertinoNavigationBar/desc_ru_RU.json | 23 - .../CupertinoNavigationBar/desc_zh-CN.json | 23 - .../CupertinoNavigationBar/node1_base.dart | 28 - .../CupertinoPageScaffold/desc_de_DE.json | 20 - .../CupertinoPageScaffold/desc_en_US.json | 20 - .../CupertinoPageScaffold/desc_es_ES.json | 20 - .../CupertinoPageScaffold/desc_fr_FR.json | 20 - .../CupertinoPageScaffold/desc_it_IT.json | 20 - .../CupertinoPageScaffold/desc_ja_JP.json | 20 - .../CupertinoPageScaffold/desc_ko_KR.json | 20 - .../CupertinoPageScaffold/desc_pt_PT.json | 20 - .../CupertinoPageScaffold/desc_ru_RU.json | 20 - .../CupertinoPageScaffold/desc_zh-CN.json | 20 - .../CupertinoPageScaffold/node1_base.dart | 27 - .../CupertinoPicker/desc_de_DE.json | 24 - .../CupertinoPicker/desc_en_US.json | 24 - .../CupertinoPicker/desc_es_ES.json | 24 - .../CupertinoPicker/desc_fr_FR.json | 24 - .../CupertinoPicker/desc_it_IT.json | 24 - .../CupertinoPicker/desc_ja_JP.json | 24 - .../CupertinoPicker/desc_ko_KR.json | 24 - .../CupertinoPicker/desc_pt_PT.json | 24 - .../CupertinoPicker/desc_ru_RU.json | 24 - .../CupertinoPicker/desc_zh-CN.json | 24 - .../CupertinoPicker/node1_base.dart | 39 - .../CupertinoRadio/desc_de_DE.json | 42 - .../CupertinoRadio/desc_en_US.json | 42 - .../CupertinoRadio/desc_es_ES.json | 42 - .../CupertinoRadio/desc_fr_FR.json | 42 - .../CupertinoRadio/desc_it_IT.json | 42 - .../CupertinoRadio/desc_ja_JP.json | 42 - .../CupertinoRadio/desc_ko_KR.json | 42 - .../CupertinoRadio/desc_pt_PT.json | 42 - .../CupertinoRadio/desc_ru_RU.json | 42 - .../CupertinoRadio/desc_zh-CN.json | 42 - .../StatefulWidget/CupertinoRadio/node1.dart | 32 - .../StatefulWidget/CupertinoRadio/node2.dart | 36 - .../StatefulWidget/CupertinoRadio/node3.dart | 32 - .../CupertinoScrollbar/desc_de_DE.json | 23 - .../CupertinoScrollbar/desc_en_US.json | 23 - .../CupertinoScrollbar/desc_es_ES.json | 23 - .../CupertinoScrollbar/desc_fr_FR.json | 23 - .../CupertinoScrollbar/desc_it_IT.json | 23 - .../CupertinoScrollbar/desc_ja_JP.json | 23 - .../CupertinoScrollbar/desc_ko_KR.json | 23 - .../CupertinoScrollbar/desc_pt_PT.json | 23 - .../CupertinoScrollbar/desc_ru_RU.json | 23 - .../CupertinoScrollbar/desc_zh-CN.json | 23 - .../CupertinoScrollbar/node1_base.dart | 57 - .../CupertinoSegmentedControl/desc_de_DE.json | 34 - .../CupertinoSegmentedControl/desc_en_US.json | 34 - .../CupertinoSegmentedControl/desc_es_ES.json | 34 - .../CupertinoSegmentedControl/desc_fr_FR.json | 34 - .../CupertinoSegmentedControl/desc_it_IT.json | 34 - .../CupertinoSegmentedControl/desc_ja_JP.json | 34 - .../CupertinoSegmentedControl/desc_ko_KR.json | 34 - .../CupertinoSegmentedControl/desc_pt_PT.json | 34 - .../CupertinoSegmentedControl/desc_ru_RU.json | 34 - .../CupertinoSegmentedControl/desc_zh-CN.json | 34 - .../CupertinoSegmentedControl/node1_base.dart | 40 - .../node2_color.dart | 45 - .../CupertinoSlider/desc_de_DE.json | 26 - .../CupertinoSlider/desc_en_US.json | 26 - .../CupertinoSlider/desc_es_ES.json | 26 - .../CupertinoSlider/desc_fr_FR.json | 26 - .../CupertinoSlider/desc_it_IT.json | 26 - .../CupertinoSlider/desc_ja_JP.json | 26 - .../CupertinoSlider/desc_ko_KR.json | 26 - .../CupertinoSlider/desc_pt_PT.json | 26 - .../CupertinoSlider/desc_ru_RU.json | 26 - .../CupertinoSlider/desc_zh-CN.json | 26 - .../CupertinoSlider/node1_base.dart | 39 - .../desc_de_DE.json | 26 - .../desc_en_US.json | 26 - .../desc_es_ES.json | 26 - .../desc_fr_FR.json | 26 - .../desc_it_IT.json | 26 - .../desc_ja_JP.json | 26 - .../desc_ko_KR.json | 26 - .../desc_pt_PT.json | 26 - .../desc_ru_RU.json | 26 - .../desc_zh-CN.json | 26 - .../node1_base.dart | 44 - .../CupertinoSwitch/desc_de_DE.json | 20 - .../CupertinoSwitch/desc_en_US.json | 20 - .../CupertinoSwitch/desc_es_ES.json | 20 - .../CupertinoSwitch/desc_fr_FR.json | 20 - .../CupertinoSwitch/desc_it_IT.json | 20 - .../CupertinoSwitch/desc_ja_JP.json | 20 - .../CupertinoSwitch/desc_ko_KR.json | 20 - .../CupertinoSwitch/desc_pt_PT.json | 20 - .../CupertinoSwitch/desc_ru_RU.json | 20 - .../CupertinoSwitch/desc_zh-CN.json | 20 - .../CupertinoSwitch/node1_base.dart | 36 - .../CupertinoTabBar/desc_de_DE.json | 25 - .../CupertinoTabBar/desc_en_US.json | 25 - .../CupertinoTabBar/desc_es_ES.json | 25 - .../CupertinoTabBar/desc_fr_FR.json | 25 - .../CupertinoTabBar/desc_it_IT.json | 25 - .../CupertinoTabBar/desc_ja_JP.json | 25 - .../CupertinoTabBar/desc_ko_KR.json | 25 - .../CupertinoTabBar/desc_pt_PT.json | 25 - .../CupertinoTabBar/desc_ru_RU.json | 25 - .../CupertinoTabBar/desc_zh-CN.json | 25 - .../CupertinoTabBar/node1_base.dart | 63 - .../CupertinoTabScaffold/desc_de_DE.json | 21 - .../CupertinoTabScaffold/desc_en_US.json | 21 - .../CupertinoTabScaffold/desc_es_ES.json | 21 - .../CupertinoTabScaffold/desc_fr_FR.json | 21 - .../CupertinoTabScaffold/desc_it_IT.json | 21 - .../CupertinoTabScaffold/desc_ja_JP.json | 21 - .../CupertinoTabScaffold/desc_ko_KR.json | 21 - .../CupertinoTabScaffold/desc_pt_PT.json | 21 - .../CupertinoTabScaffold/desc_ru_RU.json | 21 - .../CupertinoTabScaffold/desc_zh-CN.json | 21 - .../CupertinoTabScaffold/node1_base.dart | 58 - .../CupertinoTabView/desc_de_DE.json | 24 - .../CupertinoTabView/desc_en_US.json | 24 - .../CupertinoTabView/desc_es_ES.json | 24 - .../CupertinoTabView/desc_fr_FR.json | 24 - .../CupertinoTabView/desc_it_IT.json | 24 - .../CupertinoTabView/desc_ja_JP.json | 24 - .../CupertinoTabView/desc_ko_KR.json | 24 - .../CupertinoTabView/desc_pt_PT.json | 24 - .../CupertinoTabView/desc_ru_RU.json | 24 - .../CupertinoTabView/desc_zh-CN.json | 24 - .../CupertinoTabView/node1_base.dart | 103 - .../CupertinoTextField/desc_de_DE.json | 40 - .../CupertinoTextField/desc_en_US.json | 40 - .../CupertinoTextField/desc_es_ES.json | 40 - .../CupertinoTextField/desc_fr_FR.json | 40 - .../CupertinoTextField/desc_it_IT.json | 40 - .../CupertinoTextField/desc_ja_JP.json | 40 - .../CupertinoTextField/desc_ko_KR.json | 40 - .../CupertinoTextField/desc_pt_PT.json | 40 - .../CupertinoTextField/desc_ru_RU.json | 40 - .../CupertinoTextField/desc_zh-CN.json | 40 - .../CupertinoTextField/node1_base.dart | 57 - .../CupertinoTextField/node2_style.dart | 26 - .../CupertinoTimerPicker/desc_de_DE.json | 23 - .../CupertinoTimerPicker/desc_en_US.json | 23 - .../CupertinoTimerPicker/desc_es_ES.json | 23 - .../CupertinoTimerPicker/desc_fr_FR.json | 23 - .../CupertinoTimerPicker/desc_it_IT.json | 23 - .../CupertinoTimerPicker/desc_ja_JP.json | 23 - .../CupertinoTimerPicker/desc_ko_KR.json | 23 - .../CupertinoTimerPicker/desc_pt_PT.json | 23 - .../CupertinoTimerPicker/desc_ru_RU.json | 23 - .../CupertinoTimerPicker/desc_zh-CN.json | 23 - .../CupertinoTimerPicker/node1_base.dart | 62 - .../DateRangePickerDialog/desc_de_DE.json | 32 - .../DateRangePickerDialog/desc_en_US.json | 32 - .../DateRangePickerDialog/desc_es_ES.json | 32 - .../DateRangePickerDialog/desc_fr_FR.json | 32 - .../DateRangePickerDialog/desc_it_IT.json | 32 - .../DateRangePickerDialog/desc_ja_JP.json | 32 - .../DateRangePickerDialog/desc_ko_KR.json | 32 - .../DateRangePickerDialog/desc_pt_PT.json | 32 - .../DateRangePickerDialog/desc_ru_RU.json | 32 - .../DateRangePickerDialog/desc_zh-CN.json | 32 - .../DateRangePickerDialog/node1_base.dart | 68 - .../DateRangePickerDialog/node2_diy.dart | 69 - .../toly_date_picker.dart | 3041 ----------------- .../DecoratedBoxTransition/desc_de_DE.json | 20 - .../DecoratedBoxTransition/desc_en_US.json | 20 - .../DecoratedBoxTransition/desc_es_ES.json | 20 - .../DecoratedBoxTransition/desc_fr_FR.json | 20 - .../DecoratedBoxTransition/desc_it_IT.json | 20 - .../DecoratedBoxTransition/desc_ja_JP.json | 20 - .../DecoratedBoxTransition/desc_ko_KR.json | 20 - .../DecoratedBoxTransition/desc_pt_PT.json | 20 - .../DecoratedBoxTransition/desc_ru_RU.json | 20 - .../DecoratedBoxTransition/desc_zh-CN.json | 20 - .../DecoratedBoxTransition/node1_base.dart | 68 - .../DefaultTabController/desc_de_DE.json | 23 - .../DefaultTabController/desc_en_US.json | 23 - .../DefaultTabController/desc_es_ES.json | 23 - .../DefaultTabController/desc_fr_FR.json | 23 - .../DefaultTabController/desc_it_IT.json | 23 - .../DefaultTabController/desc_ja_JP.json | 23 - .../DefaultTabController/desc_ko_KR.json | 23 - .../DefaultTabController/desc_pt_PT.json | 23 - .../DefaultTabController/desc_ru_RU.json | 23 - .../DefaultTabController/desc_zh-CN.json | 23 - .../DefaultTabController/node1_base.dart | 43 - .../desc_de_DE.json | 26 - .../desc_en_US.json | 26 - .../desc_es_ES.json | 26 - .../desc_fr_FR.json | 26 - .../desc_it_IT.json | 26 - .../desc_ja_JP.json | 26 - .../desc_ko_KR.json | 26 - .../desc_pt_PT.json | 26 - .../desc_ru_RU.json | 26 - .../desc_zh-CN.json | 26 - .../node1_base.dart | 75 - .../Dismissible/desc_de_DE.json | 31 - .../Dismissible/desc_en_US.json | 31 - .../Dismissible/desc_es_ES.json | 31 - .../Dismissible/desc_fr_FR.json | 31 - .../Dismissible/desc_it_IT.json | 31 - .../Dismissible/desc_ja_JP.json | 31 - .../Dismissible/desc_ko_KR.json | 31 - .../Dismissible/desc_pt_PT.json | 31 - .../Dismissible/desc_ru_RU.json | 31 - .../Dismissible/desc_zh-CN.json | 31 - .../Dismissible/node1_base.dart | 87 - .../Dismissible/node2_direction.dart | 99 - .../StatefulWidget/DragTarget/desc_de_DE.json | 24 - .../StatefulWidget/DragTarget/desc_en_US.json | 24 - .../StatefulWidget/DragTarget/desc_es_ES.json | 24 - .../StatefulWidget/DragTarget/desc_fr_FR.json | 24 - .../StatefulWidget/DragTarget/desc_it_IT.json | 24 - .../StatefulWidget/DragTarget/desc_ja_JP.json | 24 - .../StatefulWidget/DragTarget/desc_ko_KR.json | 24 - .../StatefulWidget/DragTarget/desc_pt_PT.json | 24 - .../StatefulWidget/DragTarget/desc_ru_RU.json | 24 - .../StatefulWidget/DragTarget/desc_zh-CN.json | 24 - .../StatefulWidget/DragTarget/node1_base.dart | 86 - .../StatefulWidget/Draggable/desc_de_DE.json | 42 - .../StatefulWidget/Draggable/desc_en_US.json | 42 - .../StatefulWidget/Draggable/desc_es_ES.json | 42 - .../StatefulWidget/Draggable/desc_fr_FR.json | 42 - .../StatefulWidget/Draggable/desc_it_IT.json | 42 - .../StatefulWidget/Draggable/desc_ja_JP.json | 42 - .../StatefulWidget/Draggable/desc_ko_KR.json | 42 - .../StatefulWidget/Draggable/desc_pt_PT.json | 42 - .../StatefulWidget/Draggable/desc_ru_RU.json | 42 - .../StatefulWidget/Draggable/desc_zh-CN.json | 42 - .../StatefulWidget/Draggable/node1_base.dart | 37 - .../StatefulWidget/Draggable/node2_data.dart | 95 - .../StatefulWidget/Draggable/node3_use.dart | 77 - .../DraggableScrollableSheet/desc_de_DE.json | 25 - .../DraggableScrollableSheet/desc_en_US.json | 25 - .../DraggableScrollableSheet/desc_es_ES.json | 25 - .../DraggableScrollableSheet/desc_fr_FR.json | 25 - .../DraggableScrollableSheet/desc_it_IT.json | 25 - .../DraggableScrollableSheet/desc_ja_JP.json | 25 - .../DraggableScrollableSheet/desc_ko_KR.json | 25 - .../DraggableScrollableSheet/desc_pt_PT.json | 25 - .../DraggableScrollableSheet/desc_ru_RU.json | 25 - .../DraggableScrollableSheet/desc_zh-CN.json | 25 - .../DraggableScrollableSheet/node1_base.dart | 96 - .../DrawerController/desc_de_DE.json | 25 - .../DrawerController/desc_en_US.json | 25 - .../DrawerController/desc_es_ES.json | 25 - .../DrawerController/desc_fr_FR.json | 25 - .../DrawerController/desc_it_IT.json | 25 - .../DrawerController/desc_ja_JP.json | 25 - .../DrawerController/desc_ko_KR.json | 25 - .../DrawerController/desc_pt_PT.json | 25 - .../DrawerController/desc_ru_RU.json | 25 - .../DrawerController/desc_zh-CN.json | 25 - .../DrawerController/node1_base.dart | 63 - .../DropdownButton/desc_de_DE.json | 33 - .../DropdownButton/desc_en_US.json | 33 - .../DropdownButton/desc_es_ES.json | 33 - .../DropdownButton/desc_fr_FR.json | 33 - .../DropdownButton/desc_it_IT.json | 33 - .../DropdownButton/desc_ja_JP.json | 33 - .../DropdownButton/desc_ko_KR.json | 33 - .../DropdownButton/desc_pt_PT.json | 33 - .../DropdownButton/desc_ru_RU.json | 33 - .../DropdownButton/desc_zh-CN.json | 33 - .../DropdownButton/node1_base.dart | 55 - .../DropdownButton/node2_style.dart | 56 - .../DropdownButtonFormField/desc_de_DE.json | 24 - .../DropdownButtonFormField/desc_en_US.json | 24 - .../DropdownButtonFormField/desc_es_ES.json | 24 - .../DropdownButtonFormField/desc_fr_FR.json | 24 - .../DropdownButtonFormField/desc_it_IT.json | 24 - .../DropdownButtonFormField/desc_ja_JP.json | 24 - .../DropdownButtonFormField/desc_ko_KR.json | 24 - .../DropdownButtonFormField/desc_pt_PT.json | 24 - .../DropdownButtonFormField/desc_ru_RU.json | 24 - .../DropdownButtonFormField/desc_zh-CN.json | 24 - .../DropdownButtonFormField/node1_base.dart | 63 - .../DropdownMenu/desc_de_DE.json | 46 - .../DropdownMenu/desc_en_US.json | 46 - .../DropdownMenu/desc_es_ES.json | 46 - .../DropdownMenu/desc_fr_FR.json | 46 - .../DropdownMenu/desc_it_IT.json | 46 - .../DropdownMenu/desc_ja_JP.json | 46 - .../DropdownMenu/desc_ko_KR.json | 46 - .../DropdownMenu/desc_pt_PT.json | 46 - .../DropdownMenu/desc_ru_RU.json | 46 - .../DropdownMenu/desc_zh-CN.json | 46 - .../StatefulWidget/DropdownMenu/node1.dart | 45 - .../StatefulWidget/DropdownMenu/node2.dart | 148 - .../StatefulWidget/DropdownMenu/node3.dart | 128 - .../EditableText/desc_de_DE.json | 26 - .../EditableText/desc_en_US.json | 26 - .../EditableText/desc_es_ES.json | 26 - .../EditableText/desc_fr_FR.json | 26 - .../EditableText/desc_it_IT.json | 26 - .../EditableText/desc_ja_JP.json | 26 - .../EditableText/desc_ko_KR.json | 26 - .../EditableText/desc_pt_PT.json | 26 - .../EditableText/desc_ru_RU.json | 26 - .../EditableText/desc_zh-CN.json | 26 - .../EditableText/node1_base.dart | 32 - .../ElevatedButton/desc_de_DE.json | 34 - .../ElevatedButton/desc_en_US.json | 34 - .../ElevatedButton/desc_es_ES.json | 34 - .../ElevatedButton/desc_fr_FR.json | 34 - .../ElevatedButton/desc_it_IT.json | 34 - .../ElevatedButton/desc_ja_JP.json | 34 - .../ElevatedButton/desc_ko_KR.json | 34 - .../ElevatedButton/desc_pt_PT.json | 34 - .../ElevatedButton/desc_ru_RU.json | 34 - .../ElevatedButton/desc_zh-CN.json | 34 - .../ElevatedButton/node1_base.dart | 35 - .../ElevatedButton/node2_style.dart | 50 - .../StatefulWidget/ExpandIcon/desc_de_DE.json | 26 - .../StatefulWidget/ExpandIcon/desc_en_US.json | 26 - .../StatefulWidget/ExpandIcon/desc_es_ES.json | 26 - .../StatefulWidget/ExpandIcon/desc_fr_FR.json | 26 - .../StatefulWidget/ExpandIcon/desc_it_IT.json | 26 - .../StatefulWidget/ExpandIcon/desc_ja_JP.json | 26 - .../StatefulWidget/ExpandIcon/desc_ko_KR.json | 26 - .../StatefulWidget/ExpandIcon/desc_pt_PT.json | 26 - .../StatefulWidget/ExpandIcon/desc_ru_RU.json | 26 - .../StatefulWidget/ExpandIcon/desc_zh-CN.json | 26 - .../StatefulWidget/ExpandIcon/node1_base.dart | 26 - .../ExpansionPanelList/desc_de_DE.json | 21 - .../ExpansionPanelList/desc_en_US.json | 21 - .../ExpansionPanelList/desc_es_ES.json | 21 - .../ExpansionPanelList/desc_fr_FR.json | 21 - .../ExpansionPanelList/desc_it_IT.json | 21 - .../ExpansionPanelList/desc_ja_JP.json | 21 - .../ExpansionPanelList/desc_ko_KR.json | 21 - .../ExpansionPanelList/desc_pt_PT.json | 21 - .../ExpansionPanelList/desc_ru_RU.json | 21 - .../ExpansionPanelList/desc_zh-CN.json | 21 - .../ExpansionPanelList/node1_base.dart | 88 - .../ExpansionTile/desc_de_DE.json | 24 - .../ExpansionTile/desc_en_US.json | 24 - .../ExpansionTile/desc_es_ES.json | 24 - .../ExpansionTile/desc_fr_FR.json | 24 - .../ExpansionTile/desc_it_IT.json | 24 - .../ExpansionTile/desc_ja_JP.json | 24 - .../ExpansionTile/desc_ko_KR.json | 24 - .../ExpansionTile/desc_pt_PT.json | 24 - .../ExpansionTile/desc_ru_RU.json | 24 - .../ExpansionTile/desc_zh-CN.json | 24 - .../ExpansionTile/node1_base.dart | 27 - .../FilledButton/desc_de_DE.json | 33 - .../FilledButton/desc_en_US.json | 33 - .../FilledButton/desc_es_ES.json | 33 - .../FilledButton/desc_fr_FR.json | 33 - .../FilledButton/desc_it_IT.json | 33 - .../FilledButton/desc_ja_JP.json | 33 - .../FilledButton/desc_ko_KR.json | 33 - .../FilledButton/desc_pt_PT.json | 33 - .../FilledButton/desc_ru_RU.json | 33 - .../FilledButton/desc_zh-CN.json | 33 - .../StatefulWidget/FilledButton/node1.dart | 19 - .../StatefulWidget/FilledButton/node2.dart | 21 - .../lib/StatefulWidget/Focus/desc_de_DE.json | 38 - .../lib/StatefulWidget/Focus/desc_en_US.json | 38 - .../lib/StatefulWidget/Focus/desc_es_ES.json | 38 - .../lib/StatefulWidget/Focus/desc_fr_FR.json | 38 - .../lib/StatefulWidget/Focus/desc_it_IT.json | 38 - .../lib/StatefulWidget/Focus/desc_ja_JP.json | 38 - .../lib/StatefulWidget/Focus/desc_ko_KR.json | 38 - .../lib/StatefulWidget/Focus/desc_pt_PT.json | 38 - .../lib/StatefulWidget/Focus/desc_ru_RU.json | 38 - .../lib/StatefulWidget/Focus/desc_zh-CN.json | 38 - .../lib/StatefulWidget/Focus/node1.dart | 72 - .../lib/StatefulWidget/Focus/node2.dart | 75 - .../lib/StatefulWidget/Focus/node3.dart | 129 - .../lib/StatefulWidget/Form/desc_de_DE.json | 20 - .../lib/StatefulWidget/Form/desc_en_US.json | 20 - .../lib/StatefulWidget/Form/desc_es_ES.json | 20 - .../lib/StatefulWidget/Form/desc_fr_FR.json | 20 - .../lib/StatefulWidget/Form/desc_it_IT.json | 20 - .../lib/StatefulWidget/Form/desc_ja_JP.json | 20 - .../lib/StatefulWidget/Form/desc_ko_KR.json | 20 - .../lib/StatefulWidget/Form/desc_pt_PT.json | 20 - .../lib/StatefulWidget/Form/desc_ru_RU.json | 20 - .../lib/StatefulWidget/Form/desc_zh-CN.json | 20 - .../lib/StatefulWidget/Form/node1_base.dart | 105 - .../StatefulWidget/FormField/desc_de_DE.json | 26 - .../StatefulWidget/FormField/desc_en_US.json | 26 - .../StatefulWidget/FormField/desc_es_ES.json | 26 - .../StatefulWidget/FormField/desc_fr_FR.json | 26 - .../StatefulWidget/FormField/desc_it_IT.json | 26 - .../StatefulWidget/FormField/desc_ja_JP.json | 26 - .../StatefulWidget/FormField/desc_ko_KR.json | 26 - .../StatefulWidget/FormField/desc_pt_PT.json | 26 - .../StatefulWidget/FormField/desc_ru_RU.json | 26 - .../StatefulWidget/FormField/desc_zh-CN.json | 26 - .../StatefulWidget/FormField/node1_base.dart | 26 - .../FutureBuilder/desc_de_DE.json | 20 - .../FutureBuilder/desc_en_US.json | 20 - .../FutureBuilder/desc_es_ES.json | 20 - .../FutureBuilder/desc_fr_FR.json | 20 - .../FutureBuilder/desc_it_IT.json | 20 - .../FutureBuilder/desc_ja_JP.json | 20 - .../FutureBuilder/desc_ko_KR.json | 20 - .../FutureBuilder/desc_pt_PT.json | 20 - .../FutureBuilder/desc_ru_RU.json | 20 - .../FutureBuilder/desc_zh-CN.json | 20 - .../FutureBuilder/node1_base.dart | 45 - .../desc_de_DE.json | 22 - .../desc_en_US.json | 22 - .../desc_es_ES.json | 22 - .../desc_fr_FR.json | 22 - .../desc_it_IT.json | 22 - .../desc_ja_JP.json | 22 - .../desc_ko_KR.json | 22 - .../desc_pt_PT.json | 22 - .../desc_ru_RU.json | 22 - .../desc_zh-CN.json | 22 - .../node1_base.dart | 53 - .../lib/StatefulWidget/Hero/desc_de_DE.json | 18 - .../lib/StatefulWidget/Hero/desc_en_US.json | 18 - .../lib/StatefulWidget/Hero/desc_es_ES.json | 18 - .../lib/StatefulWidget/Hero/desc_fr_FR.json | 18 - .../lib/StatefulWidget/Hero/desc_it_IT.json | 18 - .../lib/StatefulWidget/Hero/desc_ja_JP.json | 18 - .../lib/StatefulWidget/Hero/desc_ko_KR.json | 18 - .../lib/StatefulWidget/Hero/desc_pt_PT.json | 18 - .../lib/StatefulWidget/Hero/desc_ru_RU.json | 18 - .../lib/StatefulWidget/Hero/desc_zh-CN.json | 18 - .../lib/StatefulWidget/Hero/node1_base.dart | 120 - .../lib/StatefulWidget/Image/desc_de_DE.json | 58 - .../lib/StatefulWidget/Image/desc_en_US.json | 58 - .../lib/StatefulWidget/Image/desc_es_ES.json | 58 - .../lib/StatefulWidget/Image/desc_fr_FR.json | 58 - .../lib/StatefulWidget/Image/desc_it_IT.json | 58 - .../lib/StatefulWidget/Image/desc_ja_JP.json | 58 - .../lib/StatefulWidget/Image/desc_ko_KR.json | 58 - .../lib/StatefulWidget/Image/desc_pt_PT.json | 58 - .../lib/StatefulWidget/Image/desc_ru_RU.json | 58 - .../lib/StatefulWidget/Image/desc_zh-CN.json | 58 - .../lib/StatefulWidget/Image/node1_base.dart | 27 - .../lib/StatefulWidget/Image/node2_fit.dart | 55 - .../StatefulWidget/Image/node3_alignment.dart | 49 - .../Image/node4_colorBlendMode.dart | 30 - .../StatefulWidget/Image/node5_repeat.dart | 28 - .../Image/node6_centerSlice.dart | 21 - .../lib/StatefulWidget/Ink/desc_de_DE.json | 33 - .../lib/StatefulWidget/Ink/desc_en_US.json | 33 - .../lib/StatefulWidget/Ink/desc_es_ES.json | 33 - .../lib/StatefulWidget/Ink/desc_fr_FR.json | 33 - .../lib/StatefulWidget/Ink/desc_it_IT.json | 33 - .../lib/StatefulWidget/Ink/desc_ja_JP.json | 33 - .../lib/StatefulWidget/Ink/desc_ko_KR.json | 33 - .../lib/StatefulWidget/Ink/desc_pt_PT.json | 33 - .../lib/StatefulWidget/Ink/desc_ru_RU.json | 33 - .../lib/StatefulWidget/Ink/desc_zh-CN.json | 33 - .../lib/StatefulWidget/Ink/node1_base.dart | 33 - .../lib/StatefulWidget/Ink/node2_image.dart | 35 - .../InkResponse/desc_de_DE.json | 36 - .../InkResponse/desc_en_US.json | 36 - .../InkResponse/desc_es_ES.json | 36 - .../InkResponse/desc_fr_FR.json | 36 - .../InkResponse/desc_it_IT.json | 36 - .../InkResponse/desc_ja_JP.json | 36 - .../InkResponse/desc_ko_KR.json | 36 - .../InkResponse/desc_pt_PT.json | 36 - .../InkResponse/desc_ru_RU.json | 36 - .../InkResponse/desc_zh-CN.json | 36 - .../InkResponse/node1_base.dart | 32 - .../InkResponse/node2_color.dart | 34 - .../StatefulWidget/InkWell/desc_de_DE.json | 36 - .../StatefulWidget/InkWell/desc_en_US.json | 36 - .../StatefulWidget/InkWell/desc_es_ES.json | 36 - .../StatefulWidget/InkWell/desc_fr_FR.json | 36 - .../StatefulWidget/InkWell/desc_it_IT.json | 36 - .../StatefulWidget/InkWell/desc_ja_JP.json | 36 - .../StatefulWidget/InkWell/desc_ko_KR.json | 36 - .../StatefulWidget/InkWell/desc_pt_PT.json | 36 - .../StatefulWidget/InkWell/desc_ru_RU.json | 36 - .../StatefulWidget/InkWell/desc_zh-CN.json | 36 - .../StatefulWidget/InkWell/node1_base.dart | 32 - .../StatefulWidget/InkWell/node2_color.dart | 34 - .../InputDecorator/desc_de_DE.json | 20 - .../InputDecorator/desc_en_US.json | 20 - .../InputDecorator/desc_es_ES.json | 20 - .../InputDecorator/desc_fr_FR.json | 20 - .../InputDecorator/desc_it_IT.json | 20 - .../InputDecorator/desc_ja_JP.json | 20 - .../InputDecorator/desc_ko_KR.json | 20 - .../InputDecorator/desc_pt_PT.json | 20 - .../InputDecorator/desc_ru_RU.json | 20 - .../InputDecorator/desc_zh-CN.json | 20 - .../InputDecorator/node1_base.dart | 26 - .../InteractiveViewer/desc_de_DE.json | 45 - .../InteractiveViewer/desc_en_US.json | 45 - .../InteractiveViewer/desc_es_ES.json | 45 - .../InteractiveViewer/desc_fr_FR.json | 45 - .../InteractiveViewer/desc_it_IT.json | 45 - .../InteractiveViewer/desc_ja_JP.json | 45 - .../InteractiveViewer/desc_ko_KR.json | 45 - .../InteractiveViewer/desc_pt_PT.json | 45 - .../InteractiveViewer/desc_ru_RU.json | 45 - .../InteractiveViewer/desc_zh-CN.json | 45 - .../InteractiveViewer/node1_base.dart | 41 - .../InteractiveViewer/node2_constrained.dart | 69 - .../InteractiveViewer/node3_controller.dart | 146 - .../KeyboardListener/desc_de_DE.json | 26 - .../KeyboardListener/desc_en_US.json | 26 - .../KeyboardListener/desc_es_ES.json | 26 - .../KeyboardListener/desc_fr_FR.json | 26 - .../KeyboardListener/desc_it_IT.json | 26 - .../KeyboardListener/desc_ja_JP.json | 26 - .../KeyboardListener/desc_ko_KR.json | 26 - .../KeyboardListener/desc_pt_PT.json | 26 - .../KeyboardListener/desc_ru_RU.json | 26 - .../KeyboardListener/desc_zh-CN.json | 26 - .../KeyboardListener/node1.dart | 133 - .../LicensePage/desc_de_DE.json | 24 - .../LicensePage/desc_en_US.json | 24 - .../LicensePage/desc_es_ES.json | 24 - .../LicensePage/desc_fr_FR.json | 24 - .../LicensePage/desc_it_IT.json | 24 - .../LicensePage/desc_ja_JP.json | 24 - .../LicensePage/desc_ko_KR.json | 24 - .../LicensePage/desc_pt_PT.json | 24 - .../LicensePage/desc_ru_RU.json | 24 - .../LicensePage/desc_zh-CN.json | 24 - .../LicensePage/node1_base.dart | 22 - .../LinearProgressIndicator/desc_de_DE.json | 24 - .../LinearProgressIndicator/desc_en_US.json | 24 - .../LinearProgressIndicator/desc_es_ES.json | 24 - .../LinearProgressIndicator/desc_fr_FR.json | 24 - .../LinearProgressIndicator/desc_it_IT.json | 24 - .../LinearProgressIndicator/desc_ja_JP.json | 24 - .../LinearProgressIndicator/desc_ko_KR.json | 24 - .../LinearProgressIndicator/desc_pt_PT.json | 24 - .../LinearProgressIndicator/desc_ru_RU.json | 24 - .../LinearProgressIndicator/desc_zh-CN.json | 24 - .../LinearProgressIndicator/node1_base.dart | 34 - .../ListWheelScrollView/desc_de_DE.json | 24 - .../ListWheelScrollView/desc_en_US.json | 24 - .../ListWheelScrollView/desc_es_ES.json | 24 - .../ListWheelScrollView/desc_fr_FR.json | 24 - .../ListWheelScrollView/desc_it_IT.json | 24 - .../ListWheelScrollView/desc_ja_JP.json | 24 - .../ListWheelScrollView/desc_ko_KR.json | 24 - .../ListWheelScrollView/desc_pt_PT.json | 24 - .../ListWheelScrollView/desc_ru_RU.json | 24 - .../ListWheelScrollView/desc_zh-CN.json | 24 - .../ListWheelScrollView/node1_base.dart | 80 - .../Localizations/desc_de_DE.json | 21 - .../Localizations/desc_en_US.json | 21 - .../Localizations/desc_es_ES.json | 21 - .../Localizations/desc_fr_FR.json | 21 - .../Localizations/desc_it_IT.json | 21 - .../Localizations/desc_ja_JP.json | 21 - .../Localizations/desc_ko_KR.json | 21 - .../Localizations/desc_pt_PT.json | 21 - .../Localizations/desc_ru_RU.json | 21 - .../Localizations/desc_zh-CN.json | 21 - .../StatefulWidget/Localizations/node1.dart | 11 - .../LongPressDraggable/desc_de_DE.json | 28 - .../LongPressDraggable/desc_en_US.json | 28 - .../LongPressDraggable/desc_es_ES.json | 28 - .../LongPressDraggable/desc_fr_FR.json | 28 - .../LongPressDraggable/desc_it_IT.json | 28 - .../LongPressDraggable/desc_ja_JP.json | 28 - .../LongPressDraggable/desc_ko_KR.json | 28 - .../LongPressDraggable/desc_pt_PT.json | 28 - .../LongPressDraggable/desc_ru_RU.json | 28 - .../LongPressDraggable/desc_zh-CN.json | 28 - .../LongPressDraggable/node1_base.dart | 86 - .../StatefulWidget/Material/desc_de_DE.json | 29 - .../StatefulWidget/Material/desc_en_US.json | 29 - .../StatefulWidget/Material/desc_es_ES.json | 29 - .../StatefulWidget/Material/desc_fr_FR.json | 29 - .../StatefulWidget/Material/desc_it_IT.json | 29 - .../StatefulWidget/Material/desc_ja_JP.json | 29 - .../StatefulWidget/Material/desc_ko_KR.json | 29 - .../StatefulWidget/Material/desc_pt_PT.json | 29 - .../StatefulWidget/Material/desc_ru_RU.json | 29 - .../StatefulWidget/Material/desc_zh-CN.json | 29 - .../StatefulWidget/Material/node1_base.dart | 32 - .../StatefulWidget/Material/node2_shape.dart | 60 - .../MaterialApp/desc_de_DE.json | 24 - .../MaterialApp/desc_en_US.json | 24 - .../MaterialApp/desc_es_ES.json | 24 - .../MaterialApp/desc_fr_FR.json | 24 - .../MaterialApp/desc_it_IT.json | 24 - .../MaterialApp/desc_ja_JP.json | 24 - .../MaterialApp/desc_ko_KR.json | 24 - .../MaterialApp/desc_pt_PT.json | 24 - .../MaterialApp/desc_ru_RU.json | 24 - .../MaterialApp/desc_zh-CN.json | 24 - .../MaterialApp/node1_base.dart | 118 - .../MergeableMaterial/desc_de_DE.json | 22 - .../MergeableMaterial/desc_en_US.json | 22 - .../MergeableMaterial/desc_es_ES.json | 22 - .../MergeableMaterial/desc_fr_FR.json | 22 - .../MergeableMaterial/desc_it_IT.json | 22 - .../MergeableMaterial/desc_ja_JP.json | 22 - .../MergeableMaterial/desc_ko_KR.json | 22 - .../MergeableMaterial/desc_pt_PT.json | 22 - .../MergeableMaterial/desc_ru_RU.json | 22 - .../MergeableMaterial/desc_zh-CN.json | 22 - .../MergeableMaterial/node1_base.dart | 72 - .../MonthPicker/desc_de_DE.json | 54 - .../MonthPicker/desc_en_US.json | 54 - .../MonthPicker/desc_es_ES.json | 54 - .../MonthPicker/desc_fr_FR.json | 54 - .../MonthPicker/desc_it_IT.json | 54 - .../MonthPicker/desc_ja_JP.json | 54 - .../MonthPicker/desc_ko_KR.json | 54 - .../MonthPicker/desc_pt_PT.json | 54 - .../MonthPicker/desc_ru_RU.json | 54 - .../MonthPicker/desc_zh-CN.json | 54 - .../MonthPicker/node1_base.dart | 21 - .../MouseRegion/desc_de_DE.json | 20 - .../MouseRegion/desc_en_US.json | 20 - .../MouseRegion/desc_es_ES.json | 20 - .../MouseRegion/desc_fr_FR.json | 20 - .../MouseRegion/desc_it_IT.json | 20 - .../MouseRegion/desc_ja_JP.json | 20 - .../MouseRegion/desc_ko_KR.json | 20 - .../MouseRegion/desc_pt_PT.json | 20 - .../MouseRegion/desc_ru_RU.json | 20 - .../MouseRegion/desc_zh-CN.json | 20 - .../MouseRegion/node1_base.dart | 63 - .../NavigationRail/desc_de_DE.json | 50 - .../NavigationRail/desc_en_US.json | 50 - .../NavigationRail/desc_es_ES.json | 50 - .../NavigationRail/desc_fr_FR.json | 50 - .../NavigationRail/desc_it_IT.json | 50 - .../NavigationRail/desc_ja_JP.json | 50 - .../NavigationRail/desc_ko_KR.json | 50 - .../NavigationRail/desc_pt_PT.json | 50 - .../NavigationRail/desc_ru_RU.json | 50 - .../NavigationRail/desc_zh-CN.json | 50 - .../NavigationRail/node1_base.dart | 111 - .../NavigationRail/node2_extend.dart | 139 - .../NavigationRail/node3_dark.dart | 160 - .../StatefulWidget/Navigator/desc_de_DE.json | 21 - .../StatefulWidget/Navigator/desc_en_US.json | 21 - .../StatefulWidget/Navigator/desc_es_ES.json | 21 - .../StatefulWidget/Navigator/desc_fr_FR.json | 21 - .../StatefulWidget/Navigator/desc_it_IT.json | 21 - .../StatefulWidget/Navigator/desc_ja_JP.json | 21 - .../StatefulWidget/Navigator/desc_ko_KR.json | 21 - .../StatefulWidget/Navigator/desc_pt_PT.json | 21 - .../StatefulWidget/Navigator/desc_ru_RU.json | 21 - .../StatefulWidget/Navigator/desc_zh-CN.json | 21 - .../StatefulWidget/Navigator/node1_base.dart | 185 - .../NestedScrollView/desc_de_DE.json | 27 - .../NestedScrollView/desc_en_US.json | 27 - .../NestedScrollView/desc_es_ES.json | 27 - .../NestedScrollView/desc_fr_FR.json | 27 - .../NestedScrollView/desc_it_IT.json | 27 - .../NestedScrollView/desc_ja_JP.json | 27 - .../NestedScrollView/desc_ko_KR.json | 27 - .../NestedScrollView/desc_pt_PT.json | 27 - .../NestedScrollView/desc_ru_RU.json | 27 - .../NestedScrollView/desc_zh-CN.json | 27 - .../NestedScrollView/node1_base.dart | 89 - .../OutlinedButton/desc_de_DE.json | 34 - .../OutlinedButton/desc_en_US.json | 34 - .../OutlinedButton/desc_es_ES.json | 34 - .../OutlinedButton/desc_fr_FR.json | 34 - .../OutlinedButton/desc_it_IT.json | 34 - .../OutlinedButton/desc_ja_JP.json | 34 - .../OutlinedButton/desc_ko_KR.json | 34 - .../OutlinedButton/desc_pt_PT.json | 34 - .../OutlinedButton/desc_ru_RU.json | 34 - .../OutlinedButton/desc_zh-CN.json | 34 - .../OutlinedButton/node1_base.dart | 35 - .../OutlinedButton/node2_style.dart | 50 - .../StatefulWidget/Overlay/desc_de_DE.json | 21 - .../StatefulWidget/Overlay/desc_en_US.json | 21 - .../StatefulWidget/Overlay/desc_es_ES.json | 21 - .../StatefulWidget/Overlay/desc_fr_FR.json | 21 - .../StatefulWidget/Overlay/desc_it_IT.json | 21 - .../StatefulWidget/Overlay/desc_ja_JP.json | 21 - .../StatefulWidget/Overlay/desc_ko_KR.json | 21 - .../StatefulWidget/Overlay/desc_pt_PT.json | 21 - .../StatefulWidget/Overlay/desc_ru_RU.json | 21 - .../StatefulWidget/Overlay/desc_zh-CN.json | 21 - .../StatefulWidget/Overlay/node1_base.dart | 100 - .../StatefulWidget/PageView/desc_de_DE.json | 34 - .../StatefulWidget/PageView/desc_en_US.json | 34 - .../StatefulWidget/PageView/desc_es_ES.json | 34 - .../StatefulWidget/PageView/desc_fr_FR.json | 34 - .../StatefulWidget/PageView/desc_it_IT.json | 34 - .../StatefulWidget/PageView/desc_ja_JP.json | 34 - .../StatefulWidget/PageView/desc_ko_KR.json | 34 - .../StatefulWidget/PageView/desc_pt_PT.json | 34 - .../StatefulWidget/PageView/desc_ru_RU.json | 34 - .../StatefulWidget/PageView/desc_zh-CN.json | 34 - .../StatefulWidget/PageView/node1_base.dart | 54 - .../PageView/node2_direction.dart | 58 - .../PageView/node3_controller.dart | 78 - .../PaginatedDataTable/desc_de_DE.json | 30 - .../PaginatedDataTable/desc_en_US.json | 30 - .../PaginatedDataTable/desc_es_ES.json | 30 - .../PaginatedDataTable/desc_fr_FR.json | 30 - .../PaginatedDataTable/desc_it_IT.json | 30 - .../PaginatedDataTable/desc_ja_JP.json | 30 - .../PaginatedDataTable/desc_ko_KR.json | 30 - .../PaginatedDataTable/desc_pt_PT.json | 30 - .../PaginatedDataTable/desc_ru_RU.json | 30 - .../PaginatedDataTable/desc_zh-CN.json | 30 - .../PaginatedDataTable/node1_base.dart | 207 -- .../PopupMenuButton/desc_de_DE.json | 24 - .../PopupMenuButton/desc_en_US.json | 24 - .../PopupMenuButton/desc_es_ES.json | 24 - .../PopupMenuButton/desc_fr_FR.json | 24 - .../PopupMenuButton/desc_it_IT.json | 24 - .../PopupMenuButton/desc_ja_JP.json | 24 - .../PopupMenuButton/desc_ko_KR.json | 24 - .../PopupMenuButton/desc_pt_PT.json | 24 - .../PopupMenuButton/desc_ru_RU.json | 24 - .../PopupMenuButton/desc_zh-CN.json | 24 - .../PopupMenuButton/node1_base.dart | 60 - .../PopupMenuDivider/desc_de_DE.json | 21 - .../PopupMenuDivider/desc_en_US.json | 21 - .../PopupMenuDivider/desc_es_ES.json | 21 - .../PopupMenuDivider/desc_fr_FR.json | 21 - .../PopupMenuDivider/desc_it_IT.json | 21 - .../PopupMenuDivider/desc_ja_JP.json | 21 - .../PopupMenuDivider/desc_ko_KR.json | 21 - .../PopupMenuDivider/desc_pt_PT.json | 21 - .../PopupMenuDivider/desc_ru_RU.json | 21 - .../PopupMenuDivider/desc_zh-CN.json | 21 - .../PopupMenuDivider/node1_base.dart | 68 - .../PositionedTransition/desc_de_DE.json | 20 - .../PositionedTransition/desc_en_US.json | 20 - .../PositionedTransition/desc_es_ES.json | 20 - .../PositionedTransition/desc_fr_FR.json | 20 - .../PositionedTransition/desc_it_IT.json | 20 - .../PositionedTransition/desc_ja_JP.json | 20 - .../PositionedTransition/desc_ko_KR.json | 20 - .../PositionedTransition/desc_pt_PT.json | 20 - .../PositionedTransition/desc_ru_RU.json | 20 - .../PositionedTransition/desc_zh-CN.json | 20 - .../PositionedTransition/node1_base.dart | 58 - .../lib/StatefulWidget/Radio/desc_de_DE.json | 21 - .../lib/StatefulWidget/Radio/desc_en_US.json | 21 - .../lib/StatefulWidget/Radio/desc_es_ES.json | 21 - .../lib/StatefulWidget/Radio/desc_fr_FR.json | 21 - .../lib/StatefulWidget/Radio/desc_it_IT.json | 21 - .../lib/StatefulWidget/Radio/desc_ja_JP.json | 21 - .../lib/StatefulWidget/Radio/desc_ko_KR.json | 21 - .../lib/StatefulWidget/Radio/desc_pt_PT.json | 21 - .../lib/StatefulWidget/Radio/desc_ru_RU.json | 21 - .../lib/StatefulWidget/Radio/desc_zh-CN.json | 21 - .../lib/StatefulWidget/Radio/node1_base.dart | 30 - .../RangeSlider/desc_de_DE.json | 27 - .../RangeSlider/desc_en_US.json | 27 - .../RangeSlider/desc_es_ES.json | 27 - .../RangeSlider/desc_fr_FR.json | 27 - .../RangeSlider/desc_it_IT.json | 27 - .../RangeSlider/desc_ja_JP.json | 27 - .../RangeSlider/desc_ko_KR.json | 27 - .../RangeSlider/desc_pt_PT.json | 27 - .../RangeSlider/desc_ru_RU.json | 27 - .../RangeSlider/desc_zh-CN.json | 27 - .../RangeSlider/node1_base.dart | 38 - .../StatefulWidget/RawChip/desc_de_DE.json | 43 - .../StatefulWidget/RawChip/desc_en_US.json | 43 - .../StatefulWidget/RawChip/desc_es_ES.json | 43 - .../StatefulWidget/RawChip/desc_fr_FR.json | 43 - .../StatefulWidget/RawChip/desc_it_IT.json | 43 - .../StatefulWidget/RawChip/desc_ja_JP.json | 43 - .../StatefulWidget/RawChip/desc_ko_KR.json | 43 - .../StatefulWidget/RawChip/desc_pt_PT.json | 43 - .../StatefulWidget/RawChip/desc_ru_RU.json | 43 - .../StatefulWidget/RawChip/desc_zh-CN.json | 43 - .../StatefulWidget/RawChip/node1_press.dart | 22 - .../StatefulWidget/RawChip/node2_select.dart | 32 - .../RawGestureDetector/desc_de_DE.json | 20 - .../RawGestureDetector/desc_en_US.json | 20 - .../RawGestureDetector/desc_es_ES.json | 20 - .../RawGestureDetector/desc_fr_FR.json | 20 - .../RawGestureDetector/desc_it_IT.json | 20 - .../RawGestureDetector/desc_ja_JP.json | 20 - .../RawGestureDetector/desc_ko_KR.json | 20 - .../RawGestureDetector/desc_pt_PT.json | 20 - .../RawGestureDetector/desc_ru_RU.json | 20 - .../RawGestureDetector/desc_zh-CN.json | 20 - .../RawGestureDetector/node1_base.dart | 61 - .../RawKeyboardListener/desc_de_DE.json | 21 - .../RawKeyboardListener/desc_en_US.json | 21 - .../RawKeyboardListener/desc_es_ES.json | 21 - .../RawKeyboardListener/desc_fr_FR.json | 21 - .../RawKeyboardListener/desc_it_IT.json | 21 - .../RawKeyboardListener/desc_ja_JP.json | 21 - .../RawKeyboardListener/desc_ko_KR.json | 21 - .../RawKeyboardListener/desc_pt_PT.json | 21 - .../RawKeyboardListener/desc_ru_RU.json | 21 - .../RawKeyboardListener/desc_zh-CN.json | 21 - .../RawKeyboardListener/node1_base.dart | 56 - .../RawMaterialButton/desc_de_DE.json | 37 - .../RawMaterialButton/desc_en_US.json | 37 - .../RawMaterialButton/desc_es_ES.json | 37 - .../RawMaterialButton/desc_fr_FR.json | 37 - .../RawMaterialButton/desc_it_IT.json | 37 - .../RawMaterialButton/desc_ja_JP.json | 37 - .../RawMaterialButton/desc_ko_KR.json | 37 - .../RawMaterialButton/desc_pt_PT.json | 37 - .../RawMaterialButton/desc_ru_RU.json | 37 - .../RawMaterialButton/desc_zh-CN.json | 37 - .../RawMaterialButton/node1_base.dart | 46 - .../RawMaterialButton/node2_shape.dart | 53 - .../RefreshIndicator/desc_de_DE.json | 20 - .../RefreshIndicator/desc_en_US.json | 20 - .../RefreshIndicator/desc_es_ES.json | 20 - .../RefreshIndicator/desc_fr_FR.json | 20 - .../RefreshIndicator/desc_it_IT.json | 20 - .../RefreshIndicator/desc_ja_JP.json | 20 - .../RefreshIndicator/desc_ko_KR.json | 20 - .../RefreshIndicator/desc_pt_PT.json | 20 - .../RefreshIndicator/desc_ru_RU.json | 20 - .../RefreshIndicator/desc_zh-CN.json | 20 - .../RefreshIndicator/node1_base.dart | 44 - .../desc_de_DE.json | 21 - .../desc_en_US.json | 21 - .../desc_es_ES.json | 21 - .../desc_fr_FR.json | 21 - .../desc_it_IT.json | 21 - .../desc_ja_JP.json | 21 - .../desc_ko_KR.json | 21 - .../desc_pt_PT.json | 21 - .../desc_ru_RU.json | 21 - .../desc_zh-CN.json | 21 - .../node1_base.dart | 62 - .../ReorderableListView/desc_de_DE.json | 29 - .../ReorderableListView/desc_en_US.json | 29 - .../ReorderableListView/desc_es_ES.json | 29 - .../ReorderableListView/desc_fr_FR.json | 29 - .../ReorderableListView/desc_it_IT.json | 29 - .../ReorderableListView/desc_ja_JP.json | 29 - .../ReorderableListView/desc_ko_KR.json | 29 - .../ReorderableListView/desc_pt_PT.json | 29 - .../ReorderableListView/desc_ru_RU.json | 29 - .../ReorderableListView/desc_zh-CN.json | 29 - .../ReorderableListView/node1_base.dart | 74 - .../ReorderableListView/node2_direction.dart | 74 - .../RotationTransition/desc_de_DE.json | 19 - .../RotationTransition/desc_en_US.json | 19 - .../RotationTransition/desc_es_ES.json | 19 - .../RotationTransition/desc_fr_FR.json | 19 - .../RotationTransition/desc_it_IT.json | 19 - .../RotationTransition/desc_ja_JP.json | 19 - .../RotationTransition/desc_ko_KR.json | 19 - .../RotationTransition/desc_pt_PT.json | 19 - .../RotationTransition/desc_ru_RU.json | 19 - .../RotationTransition/desc_zh-CN.json | 19 - .../RotationTransition/node1_base.dart | 55 - .../StatefulWidget/Scaffold/desc_de_DE.json | 29 - .../StatefulWidget/Scaffold/desc_en_US.json | 29 - .../StatefulWidget/Scaffold/desc_es_ES.json | 29 - .../StatefulWidget/Scaffold/desc_fr_FR.json | 29 - .../StatefulWidget/Scaffold/desc_it_IT.json | 29 - .../StatefulWidget/Scaffold/desc_ja_JP.json | 29 - .../StatefulWidget/Scaffold/desc_ko_KR.json | 29 - .../StatefulWidget/Scaffold/desc_pt_PT.json | 29 - .../StatefulWidget/Scaffold/desc_ru_RU.json | 29 - .../StatefulWidget/Scaffold/desc_zh-CN.json | 29 - .../StatefulWidget/Scaffold/node1_base.dart | 113 - .../ScaleTransition/desc_de_DE.json | 19 - .../ScaleTransition/desc_en_US.json | 19 - .../ScaleTransition/desc_es_ES.json | 19 - .../ScaleTransition/desc_fr_FR.json | 19 - .../ScaleTransition/desc_it_IT.json | 19 - .../ScaleTransition/desc_ja_JP.json | 19 - .../ScaleTransition/desc_ko_KR.json | 19 - .../ScaleTransition/desc_pt_PT.json | 19 - .../ScaleTransition/desc_ru_RU.json | 19 - .../ScaleTransition/desc_zh-CN.json | 19 - .../ScaleTransition/node1_base.dart | 43 - .../StatefulWidget/Scrollable/desc_de_DE.json | 25 - .../StatefulWidget/Scrollable/desc_en_US.json | 25 - .../StatefulWidget/Scrollable/desc_es_ES.json | 25 - .../StatefulWidget/Scrollable/desc_fr_FR.json | 25 - .../StatefulWidget/Scrollable/desc_it_IT.json | 25 - .../StatefulWidget/Scrollable/desc_ja_JP.json | 25 - .../StatefulWidget/Scrollable/desc_ko_KR.json | 25 - .../StatefulWidget/Scrollable/desc_pt_PT.json | 25 - .../StatefulWidget/Scrollable/desc_ru_RU.json | 25 - .../StatefulWidget/Scrollable/desc_zh-CN.json | 25 - .../StatefulWidget/Scrollable/node1_base.dart | 58 - .../StatefulWidget/Scrollbar/desc_de_DE.json | 23 - .../StatefulWidget/Scrollbar/desc_en_US.json | 23 - .../StatefulWidget/Scrollbar/desc_es_ES.json | 23 - .../StatefulWidget/Scrollbar/desc_fr_FR.json | 23 - .../StatefulWidget/Scrollbar/desc_it_IT.json | 23 - .../StatefulWidget/Scrollbar/desc_ja_JP.json | 23 - .../StatefulWidget/Scrollbar/desc_ko_KR.json | 23 - .../StatefulWidget/Scrollbar/desc_pt_PT.json | 23 - .../StatefulWidget/Scrollbar/desc_ru_RU.json | 23 - .../StatefulWidget/Scrollbar/desc_zh-CN.json | 23 - .../StatefulWidget/Scrollbar/node1_base.dart | 56 - .../SelectableText/desc_de_DE.json | 32 - .../SelectableText/desc_en_US.json | 32 - .../SelectableText/desc_es_ES.json | 32 - .../SelectableText/desc_fr_FR.json | 32 - .../SelectableText/desc_it_IT.json | 32 - .../SelectableText/desc_ja_JP.json | 32 - .../SelectableText/desc_ko_KR.json | 32 - .../SelectableText/desc_pt_PT.json | 32 - .../SelectableText/desc_ru_RU.json | 32 - .../SelectableText/desc_zh-CN.json | 32 - .../SelectableText/node1_base.dart | 28 - .../SelectableText/node2_align.dart | 69 - .../SizeTransition/desc_de_DE.json | 20 - .../SizeTransition/desc_en_US.json | 20 - .../SizeTransition/desc_es_ES.json | 20 - .../SizeTransition/desc_fr_FR.json | 20 - .../SizeTransition/desc_it_IT.json | 20 - .../SizeTransition/desc_ja_JP.json | 20 - .../SizeTransition/desc_ko_KR.json | 20 - .../SizeTransition/desc_pt_PT.json | 20 - .../SizeTransition/desc_ru_RU.json | 20 - .../SizeTransition/desc_zh-CN.json | 20 - .../SizeTransition/node1_base.dart | 59 - .../SlideTransition/desc_de_DE.json | 20 - .../SlideTransition/desc_en_US.json | 20 - .../SlideTransition/desc_es_ES.json | 20 - .../SlideTransition/desc_fr_FR.json | 20 - .../SlideTransition/desc_it_IT.json | 20 - .../SlideTransition/desc_ja_JP.json | 20 - .../SlideTransition/desc_ko_KR.json | 20 - .../SlideTransition/desc_pt_PT.json | 20 - .../SlideTransition/desc_ru_RU.json | 20 - .../SlideTransition/desc_zh-CN.json | 20 - .../SlideTransition/node1_base.dart | 67 - .../lib/StatefulWidget/Slider/desc_de_DE.json | 37 - .../lib/StatefulWidget/Slider/desc_en_US.json | 37 - .../lib/StatefulWidget/Slider/desc_es_ES.json | 37 - .../lib/StatefulWidget/Slider/desc_fr_FR.json | 37 - .../lib/StatefulWidget/Slider/desc_it_IT.json | 37 - .../lib/StatefulWidget/Slider/desc_ja_JP.json | 37 - .../lib/StatefulWidget/Slider/desc_ko_KR.json | 37 - .../lib/StatefulWidget/Slider/desc_pt_PT.json | 37 - .../lib/StatefulWidget/Slider/desc_ru_RU.json | 37 - .../lib/StatefulWidget/Slider/desc_zh-CN.json | 37 - .../lib/StatefulWidget/Slider/node1_base.dart | 36 - .../StatefulWidget/Slider/node2_lable.dart | 38 - .../StatefulBuilder/desc_de_DE.json | 23 - .../StatefulBuilder/desc_en_US.json | 23 - .../StatefulBuilder/desc_es_ES.json | 23 - .../StatefulBuilder/desc_fr_FR.json | 23 - .../StatefulBuilder/desc_it_IT.json | 23 - .../StatefulBuilder/desc_ja_JP.json | 23 - .../StatefulBuilder/desc_ko_KR.json | 23 - .../StatefulBuilder/desc_pt_PT.json | 23 - .../StatefulBuilder/desc_ru_RU.json | 23 - .../StatefulBuilder/desc_zh-CN.json | 23 - .../StatefulBuilder/node1_base.dart | 26 - .../StatusTransitionWidget/desc_de_DE.json | 19 - .../StatusTransitionWidget/desc_en_US.json | 19 - .../StatusTransitionWidget/desc_es_ES.json | 19 - .../StatusTransitionWidget/desc_fr_FR.json | 19 - .../StatusTransitionWidget/desc_it_IT.json | 19 - .../StatusTransitionWidget/desc_ja_JP.json | 19 - .../StatusTransitionWidget/desc_ko_KR.json | 19 - .../StatusTransitionWidget/desc_pt_PT.json | 19 - .../StatusTransitionWidget/desc_ru_RU.json | 19 - .../StatusTransitionWidget/desc_zh-CN.json | 19 - .../StatusTransitionWidget/node1_base.dart | 74 - .../StatefulWidget/Stepper/desc_de_DE.json | 29 - .../StatefulWidget/Stepper/desc_en_US.json | 29 - .../StatefulWidget/Stepper/desc_es_ES.json | 29 - .../StatefulWidget/Stepper/desc_fr_FR.json | 29 - .../StatefulWidget/Stepper/desc_it_IT.json | 29 - .../StatefulWidget/Stepper/desc_ja_JP.json | 29 - .../StatefulWidget/Stepper/desc_ko_KR.json | 29 - .../StatefulWidget/Stepper/desc_pt_PT.json | 29 - .../StatefulWidget/Stepper/desc_ru_RU.json | 29 - .../StatefulWidget/Stepper/desc_zh-CN.json | 29 - .../StatefulWidget/Stepper/node1_base.dart | 104 - .../StatefulWidget/Stepper/node2_type.dart | 104 - .../StreamBuilder/desc_de_DE.json | 20 - .../StreamBuilder/desc_en_US.json | 20 - .../StreamBuilder/desc_es_ES.json | 20 - .../StreamBuilder/desc_fr_FR.json | 20 - .../StreamBuilder/desc_it_IT.json | 20 - .../StreamBuilder/desc_ja_JP.json | 20 - .../StreamBuilder/desc_ko_KR.json | 20 - .../StreamBuilder/desc_pt_PT.json | 20 - .../StreamBuilder/desc_ru_RU.json | 20 - .../StreamBuilder/desc_zh-CN.json | 20 - .../StreamBuilder/node1_base.dart | 101 - .../lib/StatefulWidget/Switch/desc_de_DE.json | 34 - .../lib/StatefulWidget/Switch/desc_en_US.json | 34 - .../lib/StatefulWidget/Switch/desc_es_ES.json | 34 - .../lib/StatefulWidget/Switch/desc_fr_FR.json | 34 - .../lib/StatefulWidget/Switch/desc_it_IT.json | 34 - .../lib/StatefulWidget/Switch/desc_ja_JP.json | 34 - .../lib/StatefulWidget/Switch/desc_ko_KR.json | 34 - .../lib/StatefulWidget/Switch/desc_pt_PT.json | 34 - .../lib/StatefulWidget/Switch/desc_ru_RU.json | 34 - .../lib/StatefulWidget/Switch/desc_zh-CN.json | 34 - .../lib/StatefulWidget/Switch/node1_base.dart | 40 - .../StatefulWidget/Switch/node2_image.dart | 39 - .../StatefulWidget/TabBarView/desc_de_DE.json | 20 - .../StatefulWidget/TabBarView/desc_en_US.json | 20 - .../StatefulWidget/TabBarView/desc_es_ES.json | 20 - .../StatefulWidget/TabBarView/desc_fr_FR.json | 20 - .../StatefulWidget/TabBarView/desc_it_IT.json | 20 - .../StatefulWidget/TabBarView/desc_ja_JP.json | 20 - .../StatefulWidget/TabBarView/desc_ko_KR.json | 20 - .../StatefulWidget/TabBarView/desc_pt_PT.json | 20 - .../StatefulWidget/TabBarView/desc_ru_RU.json | 20 - .../StatefulWidget/TabBarView/desc_zh-CN.json | 20 - .../StatefulWidget/TabBarView/node1_base.dart | 73 - .../TableRowInkWell/desc_de_DE.json | 22 - .../TableRowInkWell/desc_en_US.json | 22 - .../TableRowInkWell/desc_es_ES.json | 22 - .../TableRowInkWell/desc_fr_FR.json | 22 - .../TableRowInkWell/desc_it_IT.json | 22 - .../TableRowInkWell/desc_ja_JP.json | 22 - .../TableRowInkWell/desc_ko_KR.json | 22 - .../TableRowInkWell/desc_pt_PT.json | 22 - .../TableRowInkWell/desc_ru_RU.json | 22 - .../TableRowInkWell/desc_zh-CN.json | 22 - .../TableRowInkWell/node1_base.dart | 80 - .../StatefulWidget/TextButton/desc_de_DE.json | 33 - .../StatefulWidget/TextButton/desc_en_US.json | 33 - .../StatefulWidget/TextButton/desc_es_ES.json | 33 - .../StatefulWidget/TextButton/desc_fr_FR.json | 33 - .../StatefulWidget/TextButton/desc_it_IT.json | 33 - .../StatefulWidget/TextButton/desc_ja_JP.json | 33 - .../StatefulWidget/TextButton/desc_ko_KR.json | 33 - .../StatefulWidget/TextButton/desc_pt_PT.json | 33 - .../StatefulWidget/TextButton/desc_ru_RU.json | 33 - .../StatefulWidget/TextButton/desc_zh-CN.json | 33 - .../StatefulWidget/TextButton/node1_base.dart | 36 - .../TextButton/node2_style.dart | 50 - .../StatefulWidget/TextField/desc_de_DE.json | 52 - .../StatefulWidget/TextField/desc_en_US.json | 52 - .../StatefulWidget/TextField/desc_es_ES.json | 52 - .../StatefulWidget/TextField/desc_fr_FR.json | 52 - .../StatefulWidget/TextField/desc_it_IT.json | 52 - .../StatefulWidget/TextField/desc_ja_JP.json | 52 - .../StatefulWidget/TextField/desc_ko_KR.json | 52 - .../StatefulWidget/TextField/desc_pt_PT.json | 52 - .../StatefulWidget/TextField/desc_ru_RU.json | 52 - .../StatefulWidget/TextField/desc_zh-CN.json | 52 - .../StatefulWidget/TextField/node1_base.dart | 54 - .../TextField/node2_cursor.dart | 60 - .../TextField/node3_decoration.dart | 52 - .../TextFormField/desc_de_DE.json | 24 - .../TextFormField/desc_en_US.json | 24 - .../TextFormField/desc_es_ES.json | 24 - .../TextFormField/desc_fr_FR.json | 24 - .../TextFormField/desc_it_IT.json | 24 - .../TextFormField/desc_ja_JP.json | 24 - .../TextFormField/desc_ko_KR.json | 24 - .../TextFormField/desc_pt_PT.json | 24 - .../TextFormField/desc_ru_RU.json | 24 - .../TextFormField/desc_zh-CN.json | 24 - .../TextFormField/node1_base.dart | 73 - .../StatefulWidget/TickerMode/desc_de_DE.json | 20 - .../StatefulWidget/TickerMode/desc_en_US.json | 20 - .../StatefulWidget/TickerMode/desc_es_ES.json | 20 - .../StatefulWidget/TickerMode/desc_fr_FR.json | 20 - .../StatefulWidget/TickerMode/desc_it_IT.json | 20 - .../StatefulWidget/TickerMode/desc_ja_JP.json | 20 - .../StatefulWidget/TickerMode/desc_ko_KR.json | 20 - .../StatefulWidget/TickerMode/desc_pt_PT.json | 20 - .../StatefulWidget/TickerMode/desc_ru_RU.json | 20 - .../StatefulWidget/TickerMode/desc_zh-CN.json | 20 - .../lib/StatefulWidget/TickerMode/node1.dart | 51 - .../StatefulWidget/Tooltip/desc_de_DE.json | 32 - .../StatefulWidget/Tooltip/desc_en_US.json | 32 - .../StatefulWidget/Tooltip/desc_es_ES.json | 32 - .../StatefulWidget/Tooltip/desc_fr_FR.json | 32 - .../StatefulWidget/Tooltip/desc_it_IT.json | 32 - .../StatefulWidget/Tooltip/desc_ja_JP.json | 32 - .../StatefulWidget/Tooltip/desc_ko_KR.json | 32 - .../StatefulWidget/Tooltip/desc_pt_PT.json | 32 - .../StatefulWidget/Tooltip/desc_ru_RU.json | 32 - .../StatefulWidget/Tooltip/desc_zh-CN.json | 32 - .../StatefulWidget/Tooltip/node1_base.dart | 20 - .../Tooltip/node2_decoration.dart | 26 - .../TweenAnimationBuilder/desc_de_DE.json | 23 - .../TweenAnimationBuilder/desc_en_US.json | 23 - .../TweenAnimationBuilder/desc_es_ES.json | 23 - .../TweenAnimationBuilder/desc_fr_FR.json | 23 - .../TweenAnimationBuilder/desc_it_IT.json | 23 - .../TweenAnimationBuilder/desc_ja_JP.json | 23 - .../TweenAnimationBuilder/desc_ko_KR.json | 23 - .../TweenAnimationBuilder/desc_pt_PT.json | 23 - .../TweenAnimationBuilder/desc_ru_RU.json | 23 - .../TweenAnimationBuilder/desc_zh-CN.json | 23 - .../TweenAnimationBuilder/node1_base.dart | 58 - .../UndoHistory/desc_de_DE.json | 20 - .../UndoHistory/desc_en_US.json | 20 - .../UndoHistory/desc_es_ES.json | 20 - .../UndoHistory/desc_fr_FR.json | 20 - .../UndoHistory/desc_it_IT.json | 20 - .../UndoHistory/desc_ja_JP.json | 20 - .../UndoHistory/desc_ko_KR.json | 20 - .../UndoHistory/desc_pt_PT.json | 20 - .../UndoHistory/desc_ru_RU.json | 20 - .../UndoHistory/desc_zh-CN.json | 20 - .../lib/StatefulWidget/UndoHistory/node1.dart | 108 - .../UniqueWidget/desc_de_DE.json | 18 - .../UniqueWidget/desc_en_US.json | 18 - .../UniqueWidget/desc_es_ES.json | 18 - .../UniqueWidget/desc_fr_FR.json | 18 - .../UniqueWidget/desc_it_IT.json | 18 - .../UniqueWidget/desc_ja_JP.json | 18 - .../UniqueWidget/desc_ko_KR.json | 18 - .../UniqueWidget/desc_pt_PT.json | 18 - .../UniqueWidget/desc_ru_RU.json | 18 - .../UniqueWidget/desc_zh-CN.json | 18 - .../UniqueWidget/node1_base.dart | 25 - .../ValueListenableBuilder/desc_de_DE.json | 20 - .../ValueListenableBuilder/desc_en_US.json | 20 - .../ValueListenableBuilder/desc_es_ES.json | 20 - .../ValueListenableBuilder/desc_fr_FR.json | 20 - .../ValueListenableBuilder/desc_it_IT.json | 20 - .../ValueListenableBuilder/desc_ja_JP.json | 20 - .../ValueListenableBuilder/desc_ko_KR.json | 20 - .../ValueListenableBuilder/desc_pt_PT.json | 20 - .../ValueListenableBuilder/desc_ru_RU.json | 20 - .../ValueListenableBuilder/desc_zh-CN.json | 20 - .../ValueListenableBuilder/node1_base.dart | 47 - .../WidgetInspector/desc_de_DE.json | 19 - .../WidgetInspector/desc_en_US.json | 19 - .../WidgetInspector/desc_es_ES.json | 19 - .../WidgetInspector/desc_fr_FR.json | 19 - .../WidgetInspector/desc_it_IT.json | 19 - .../WidgetInspector/desc_ja_JP.json | 19 - .../WidgetInspector/desc_ko_KR.json | 19 - .../WidgetInspector/desc_pt_PT.json | 19 - .../WidgetInspector/desc_ru_RU.json | 19 - .../WidgetInspector/desc_zh-CN.json | 19 - .../WidgetInspector/node1_base.dart | 69 - .../StatefulWidget/WidgetsApp/desc_de_DE.json | 24 - .../StatefulWidget/WidgetsApp/desc_en_US.json | 24 - .../StatefulWidget/WidgetsApp/desc_es_ES.json | 24 - .../StatefulWidget/WidgetsApp/desc_fr_FR.json | 24 - .../StatefulWidget/WidgetsApp/desc_it_IT.json | 24 - .../StatefulWidget/WidgetsApp/desc_ja_JP.json | 24 - .../StatefulWidget/WidgetsApp/desc_ko_KR.json | 24 - .../StatefulWidget/WidgetsApp/desc_pt_PT.json | 24 - .../StatefulWidget/WidgetsApp/desc_ru_RU.json | 24 - .../StatefulWidget/WidgetsApp/desc_zh-CN.json | 24 - .../StatefulWidget/WidgetsApp/node1_base.dart | 123 - .../WillPopScope/desc_de_DE.json | 19 - .../WillPopScope/desc_en_US.json | 19 - .../WillPopScope/desc_es_ES.json | 19 - .../WillPopScope/desc_fr_FR.json | 19 - .../WillPopScope/desc_it_IT.json | 19 - .../WillPopScope/desc_ja_JP.json | 19 - .../WillPopScope/desc_ko_KR.json | 19 - .../WillPopScope/desc_pt_PT.json | 19 - .../WillPopScope/desc_ru_RU.json | 19 - .../WillPopScope/desc_zh-CN.json | 19 - .../WillPopScope/node1_base.dart | 41 - .../StatefulWidget/YearPicker/desc_de_DE.json | 24 - .../StatefulWidget/YearPicker/desc_en_US.json | 24 - .../StatefulWidget/YearPicker/desc_es_ES.json | 24 - .../StatefulWidget/YearPicker/desc_fr_FR.json | 24 - .../StatefulWidget/YearPicker/desc_it_IT.json | 24 - .../StatefulWidget/YearPicker/desc_ja_JP.json | 24 - .../StatefulWidget/YearPicker/desc_ko_KR.json | 24 - .../StatefulWidget/YearPicker/desc_pt_PT.json | 24 - .../StatefulWidget/YearPicker/desc_ru_RU.json | 24 - .../StatefulWidget/YearPicker/desc_zh-CN.json | 24 - .../StatefulWidget/YearPicker/node1_base.dart | 28 - .../AboutDialog/desc_de_DE.json | 22 - .../AboutDialog/desc_en_US.json | 22 - .../AboutDialog/desc_es_ES.json | 22 - .../AboutDialog/desc_fr_FR.json | 22 - .../AboutDialog/desc_it_IT.json | 22 - .../AboutDialog/desc_ja_JP.json | 22 - .../AboutDialog/desc_ko_KR.json | 22 - .../AboutDialog/desc_pt_PT.json | 22 - .../AboutDialog/desc_ru_RU.json | 22 - .../AboutDialog/desc_zh-CN.json | 22 - .../AboutDialog/node1_base.dart | 65 - .../AboutListTile/desc_de_DE.json | 26 - .../AboutListTile/desc_en_US.json | 26 - .../AboutListTile/desc_es_ES.json | 26 - .../AboutListTile/desc_fr_FR.json | 26 - .../AboutListTile/desc_it_IT.json | 26 - .../AboutListTile/desc_ja_JP.json | 26 - .../AboutListTile/desc_ko_KR.json | 26 - .../AboutListTile/desc_pt_PT.json | 26 - .../AboutListTile/desc_ru_RU.json | 26 - .../AboutListTile/desc_zh-CN.json | 26 - .../AboutListTile/node1_base.dart | 34 - .../ActionChip/desc_de_DE.json | 26 - .../ActionChip/desc_en_US.json | 26 - .../ActionChip/desc_es_ES.json | 26 - .../ActionChip/desc_fr_FR.json | 26 - .../ActionChip/desc_it_IT.json | 26 - .../ActionChip/desc_ja_JP.json | 26 - .../ActionChip/desc_ko_KR.json | 26 - .../ActionChip/desc_pt_PT.json | 26 - .../ActionChip/desc_ru_RU.json | 26 - .../ActionChip/desc_zh-CN.json | 26 - .../ActionChip/node1_base.dart | 29 - .../AlertDialog/desc_de_DE.json | 27 - .../AlertDialog/desc_en_US.json | 27 - .../AlertDialog/desc_es_ES.json | 27 - .../AlertDialog/desc_fr_FR.json | 27 - .../AlertDialog/desc_it_IT.json | 27 - .../AlertDialog/desc_ja_JP.json | 27 - .../AlertDialog/desc_ko_KR.json | 27 - .../AlertDialog/desc_pt_PT.json | 27 - .../AlertDialog/desc_ru_RU.json | 27 - .../AlertDialog/desc_zh-CN.json | 27 - .../AlertDialog/node1_base.dart | 99 - .../AnimatedIcon/desc_de_DE.json | 21 - .../AnimatedIcon/desc_en_US.json | 21 - .../AnimatedIcon/desc_es_ES.json | 21 - .../AnimatedIcon/desc_fr_FR.json | 21 - .../AnimatedIcon/desc_it_IT.json | 21 - .../AnimatedIcon/desc_ja_JP.json | 21 - .../AnimatedIcon/desc_ko_KR.json | 21 - .../AnimatedIcon/desc_pt_PT.json | 21 - .../AnimatedIcon/desc_ru_RU.json | 21 - .../AnimatedIcon/desc_zh-CN.json | 21 - .../AnimatedIcon/node1_base.dart | 59 - .../Autocomplete/desc_de_DE.json | 31 - .../Autocomplete/desc_en_US.json | 31 - .../Autocomplete/desc_es_ES.json | 31 - .../Autocomplete/desc_fr_FR.json | 31 - .../Autocomplete/desc_it_IT.json | 31 - .../Autocomplete/desc_ja_JP.json | 31 - .../Autocomplete/desc_ko_KR.json | 31 - .../Autocomplete/desc_pt_PT.json | 31 - .../Autocomplete/desc_ru_RU.json | 31 - .../Autocomplete/desc_zh-CN.json | 31 - .../Autocomplete/node1_base.dart | 40 - .../Autocomplete/node2_type.dart | 219 -- .../BackButton/desc_de_DE.json | 21 - .../BackButton/desc_en_US.json | 21 - .../BackButton/desc_es_ES.json | 21 - .../BackButton/desc_fr_FR.json | 21 - .../BackButton/desc_it_IT.json | 21 - .../BackButton/desc_ja_JP.json | 21 - .../BackButton/desc_ko_KR.json | 21 - .../BackButton/desc_pt_PT.json | 21 - .../BackButton/desc_ru_RU.json | 21 - .../BackButton/desc_zh-CN.json | 21 - .../BackButton/node1_base.dart | 26 - .../BackButtonIcon/desc_de_DE.json | 18 - .../BackButtonIcon/desc_en_US.json | 18 - .../BackButtonIcon/desc_es_ES.json | 18 - .../BackButtonIcon/desc_fr_FR.json | 18 - .../BackButtonIcon/desc_it_IT.json | 18 - .../BackButtonIcon/desc_ja_JP.json | 18 - .../BackButtonIcon/desc_ko_KR.json | 18 - .../BackButtonIcon/desc_pt_PT.json | 18 - .../BackButtonIcon/desc_ru_RU.json | 18 - .../BackButtonIcon/desc_zh-CN.json | 18 - .../BackButtonIcon/node1_base.dart | 13 - .../lib/StatelessWidget/Badge/desc_de_DE.json | 40 - .../lib/StatelessWidget/Badge/desc_en_US.json | 40 - .../lib/StatelessWidget/Badge/desc_es_ES.json | 40 - .../lib/StatelessWidget/Badge/desc_fr_FR.json | 40 - .../lib/StatelessWidget/Badge/desc_it_IT.json | 40 - .../lib/StatelessWidget/Badge/desc_ja_JP.json | 40 - .../lib/StatelessWidget/Badge/desc_ko_KR.json | 40 - .../lib/StatelessWidget/Badge/desc_pt_PT.json | 40 - .../lib/StatelessWidget/Badge/desc_ru_RU.json | 40 - .../lib/StatelessWidget/Badge/desc_zh-CN.json | 40 - .../lib/StatelessWidget/Badge/node_1.dart | 30 - .../lib/StatelessWidget/Badge/node_2.dart | 22 - .../lib/StatelessWidget/Badge/node_3.dart | 53 - .../StatelessWidget/Banner/desc_de_DE.json | 22 - .../StatelessWidget/Banner/desc_en_US.json | 22 - .../StatelessWidget/Banner/desc_es_ES.json | 22 - .../StatelessWidget/Banner/desc_fr_FR.json | 22 - .../StatelessWidget/Banner/desc_it_IT.json | 22 - .../StatelessWidget/Banner/desc_ja_JP.json | 22 - .../StatelessWidget/Banner/desc_ko_KR.json | 22 - .../StatelessWidget/Banner/desc_pt_PT.json | 22 - .../StatelessWidget/Banner/desc_ru_RU.json | 22 - .../StatelessWidget/Banner/desc_zh-CN.json | 22 - .../StatelessWidget/Banner/node1_base.dart | 42 - .../BottomSheet/desc_de_DE.json | 22 - .../BottomSheet/desc_en_US.json | 22 - .../BottomSheet/desc_es_ES.json | 22 - .../BottomSheet/desc_fr_FR.json | 22 - .../BottomSheet/desc_it_IT.json | 22 - .../BottomSheet/desc_ja_JP.json | 22 - .../BottomSheet/desc_ko_KR.json | 22 - .../BottomSheet/desc_pt_PT.json | 22 - .../BottomSheet/desc_ru_RU.json | 22 - .../BottomSheet/desc_zh-CN.json | 22 - .../BottomSheet/node1_base.dart | 53 - .../BoxScrollView/desc_de_DE.json | 27 - .../BoxScrollView/desc_en_US.json | 27 - .../BoxScrollView/desc_es_ES.json | 27 - .../BoxScrollView/desc_fr_FR.json | 27 - .../BoxScrollView/desc_it_IT.json | 27 - .../BoxScrollView/desc_ja_JP.json | 27 - .../BoxScrollView/desc_ko_KR.json | 27 - .../BoxScrollView/desc_pt_PT.json | 27 - .../BoxScrollView/desc_ru_RU.json | 27 - .../BoxScrollView/desc_zh-CN.json | 27 - .../BoxScrollView/node1_base.dart | 73 - .../StatelessWidget/Builder/desc_de_DE.json | 19 - .../StatelessWidget/Builder/desc_en_US.json | 19 - .../StatelessWidget/Builder/desc_es_ES.json | 19 - .../StatelessWidget/Builder/desc_fr_FR.json | 19 - .../StatelessWidget/Builder/desc_it_IT.json | 19 - .../StatelessWidget/Builder/desc_ja_JP.json | 19 - .../StatelessWidget/Builder/desc_ko_KR.json | 19 - .../StatelessWidget/Builder/desc_pt_PT.json | 19 - .../StatelessWidget/Builder/desc_ru_RU.json | 19 - .../StatelessWidget/Builder/desc_zh-CN.json | 19 - .../StatelessWidget/Builder/node1_base.dart | 29 - .../StatelessWidget/ButtonBar/desc_de_DE.json | 27 - .../StatelessWidget/ButtonBar/desc_en_US.json | 27 - .../StatelessWidget/ButtonBar/desc_es_ES.json | 27 - .../StatelessWidget/ButtonBar/desc_fr_FR.json | 27 - .../StatelessWidget/ButtonBar/desc_it_IT.json | 27 - .../StatelessWidget/ButtonBar/desc_ja_JP.json | 27 - .../StatelessWidget/ButtonBar/desc_ko_KR.json | 27 - .../StatelessWidget/ButtonBar/desc_pt_PT.json | 27 - .../StatelessWidget/ButtonBar/desc_ru_RU.json | 27 - .../StatelessWidget/ButtonBar/desc_zh-CN.json | 27 - .../StatelessWidget/ButtonBar/node1_base.dart | 31 - .../ButtonBar/node2_padding.dart | 32 - .../lib/StatelessWidget/Card/desc_de_DE.json | 31 - .../lib/StatelessWidget/Card/desc_en_US.json | 31 - .../lib/StatelessWidget/Card/desc_es_ES.json | 31 - .../lib/StatelessWidget/Card/desc_fr_FR.json | 31 - .../lib/StatelessWidget/Card/desc_it_IT.json | 31 - .../lib/StatelessWidget/Card/desc_ja_JP.json | 31 - .../lib/StatelessWidget/Card/desc_ko_KR.json | 31 - .../lib/StatelessWidget/Card/desc_pt_PT.json | 31 - .../lib/StatelessWidget/Card/desc_ru_RU.json | 31 - .../lib/StatelessWidget/Card/desc_zh-CN.json | 31 - .../lib/StatelessWidget/Card/node1_base.dart | 24 - .../lib/StatelessWidget/Card/node2_shape.dart | 50 - .../CheckboxListTile/desc_de_DE.json | 37 - .../CheckboxListTile/desc_en_US.json | 37 - .../CheckboxListTile/desc_es_ES.json | 37 - .../CheckboxListTile/desc_fr_FR.json | 37 - .../CheckboxListTile/desc_it_IT.json | 37 - .../CheckboxListTile/desc_ja_JP.json | 37 - .../CheckboxListTile/desc_ko_KR.json | 37 - .../CheckboxListTile/desc_pt_PT.json | 37 - .../CheckboxListTile/desc_ru_RU.json | 37 - .../CheckboxListTile/desc_zh-CN.json | 37 - .../CheckboxListTile/node1_base.dart | 33 - .../CheckboxListTile/node2_select.dart | 34 - .../CheckboxListTile/node3_dense.dart | 34 - .../CheckedModeBanner/desc_de_DE.json | 18 - .../CheckedModeBanner/desc_en_US.json | 18 - .../CheckedModeBanner/desc_es_ES.json | 18 - .../CheckedModeBanner/desc_fr_FR.json | 18 - .../CheckedModeBanner/desc_it_IT.json | 18 - .../CheckedModeBanner/desc_ja_JP.json | 18 - .../CheckedModeBanner/desc_ko_KR.json | 18 - .../CheckedModeBanner/desc_pt_PT.json | 18 - .../CheckedModeBanner/desc_ru_RU.json | 18 - .../CheckedModeBanner/desc_zh-CN.json | 18 - .../CheckedModeBanner/node1_base.dart | 25 - .../lib/StatelessWidget/Chip/desc_de_DE.json | 45 - .../lib/StatelessWidget/Chip/desc_en_US.json | 45 - .../lib/StatelessWidget/Chip/desc_es_ES.json | 45 - .../lib/StatelessWidget/Chip/desc_fr_FR.json | 45 - .../lib/StatelessWidget/Chip/desc_it_IT.json | 45 - .../lib/StatelessWidget/Chip/desc_ja_JP.json | 45 - .../lib/StatelessWidget/Chip/desc_ko_KR.json | 45 - .../lib/StatelessWidget/Chip/desc_pt_PT.json | 45 - .../lib/StatelessWidget/Chip/desc_ru_RU.json | 45 - .../lib/StatelessWidget/Chip/desc_zh-CN.json | 45 - .../lib/StatelessWidget/Chip/node1_base.dart | 33 - .../lib/StatelessWidget/Chip/node2_color.dart | 36 - .../StatelessWidget/Chip/node3_delete.dart | 27 - .../ChoiceChip/desc_de_DE.json | 27 - .../ChoiceChip/desc_en_US.json | 27 - .../ChoiceChip/desc_es_ES.json | 27 - .../ChoiceChip/desc_fr_FR.json | 27 - .../ChoiceChip/desc_it_IT.json | 27 - .../ChoiceChip/desc_ja_JP.json | 27 - .../ChoiceChip/desc_ko_KR.json | 27 - .../ChoiceChip/desc_pt_PT.json | 27 - .../ChoiceChip/desc_ru_RU.json | 27 - .../ChoiceChip/desc_zh-CN.json | 27 - .../ChoiceChip/node1_base.dart | 39 - .../CircleAvatar/desc_de_DE.json | 24 - .../CircleAvatar/desc_en_US.json | 24 - .../CircleAvatar/desc_es_ES.json | 24 - .../CircleAvatar/desc_fr_FR.json | 24 - .../CircleAvatar/desc_it_IT.json | 24 - .../CircleAvatar/desc_ja_JP.json | 24 - .../CircleAvatar/desc_ko_KR.json | 24 - .../CircleAvatar/desc_pt_PT.json | 24 - .../CircleAvatar/desc_ru_RU.json | 24 - .../CircleAvatar/desc_zh-CN.json | 24 - .../CircleAvatar/node1_base.dart | 22 - .../CloseButton/desc_de_DE.json | 21 - .../CloseButton/desc_en_US.json | 21 - .../CloseButton/desc_es_ES.json | 21 - .../CloseButton/desc_fr_FR.json | 21 - .../CloseButton/desc_it_IT.json | 21 - .../CloseButton/desc_ja_JP.json | 21 - .../CloseButton/desc_ko_KR.json | 21 - .../CloseButton/desc_pt_PT.json | 21 - .../CloseButton/desc_ru_RU.json | 21 - .../CloseButton/desc_zh-CN.json | 21 - .../CloseButton/node1_base.dart | 14 - .../CloseButtonIcon/desc_de_DE.json | 18 - .../CloseButtonIcon/desc_en_US.json | 18 - .../CloseButtonIcon/desc_es_ES.json | 18 - .../CloseButtonIcon/desc_fr_FR.json | 18 - .../CloseButtonIcon/desc_it_IT.json | 18 - .../CloseButtonIcon/desc_ja_JP.json | 18 - .../CloseButtonIcon/desc_ko_KR.json | 18 - .../CloseButtonIcon/desc_pt_PT.json | 18 - .../CloseButtonIcon/desc_ru_RU.json | 18 - .../CloseButtonIcon/desc_zh-CN.json | 18 - .../CloseButtonIcon/node1_base.dart | 13 - .../StatelessWidget/Container/desc_de_DE.json | 67 - .../StatelessWidget/Container/desc_en_US.json | 67 - .../StatelessWidget/Container/desc_es_ES.json | 67 - .../StatelessWidget/Container/desc_fr_FR.json | 67 - .../StatelessWidget/Container/desc_it_IT.json | 67 - .../StatelessWidget/Container/desc_ja_JP.json | 67 - .../StatelessWidget/Container/desc_ko_KR.json | 67 - .../StatelessWidget/Container/desc_pt_PT.json | 67 - .../StatelessWidget/Container/desc_ru_RU.json | 67 - .../StatelessWidget/Container/desc_zh-CN.json | 67 - .../StatelessWidget/Container/node1_base.dart | 18 - .../Container/node2_child.dart | 21 - .../Container/node3_alignment.dart | 22 - .../Container/node4_decoration.dart | 50 - .../Container/node5_transform.dart | 25 - .../Container/node6_constraints.dart | 23 - .../CupertinoActionSheet/desc_de_DE.json | 21 - .../CupertinoActionSheet/desc_en_US.json | 21 - .../CupertinoActionSheet/desc_es_ES.json | 21 - .../CupertinoActionSheet/desc_fr_FR.json | 21 - .../CupertinoActionSheet/desc_it_IT.json | 21 - .../CupertinoActionSheet/desc_ja_JP.json | 21 - .../CupertinoActionSheet/desc_ko_KR.json | 21 - .../CupertinoActionSheet/desc_pt_PT.json | 21 - .../CupertinoActionSheet/desc_ru_RU.json | 21 - .../CupertinoActionSheet/desc_zh-CN.json | 21 - .../CupertinoActionSheet/node1_base.dart | 58 - .../desc_de_DE.json | 20 - .../desc_en_US.json | 20 - .../desc_es_ES.json | 20 - .../desc_fr_FR.json | 20 - .../desc_it_IT.json | 20 - .../desc_ja_JP.json | 20 - .../desc_ko_KR.json | 20 - .../desc_pt_PT.json | 20 - .../desc_ru_RU.json | 20 - .../desc_zh-CN.json | 20 - .../node1_base.dart | 35 - .../CupertinoAlertDialog/desc_de_DE.json | 20 - .../CupertinoAlertDialog/desc_en_US.json | 20 - .../CupertinoAlertDialog/desc_es_ES.json | 20 - .../CupertinoAlertDialog/desc_fr_FR.json | 20 - .../CupertinoAlertDialog/desc_it_IT.json | 20 - .../CupertinoAlertDialog/desc_ja_JP.json | 20 - .../CupertinoAlertDialog/desc_ko_KR.json | 20 - .../CupertinoAlertDialog/desc_pt_PT.json | 20 - .../CupertinoAlertDialog/desc_ru_RU.json | 20 - .../CupertinoAlertDialog/desc_zh-CN.json | 20 - .../CupertinoAlertDialog/node1_base.dart | 94 - .../CupertinoDialogAction/desc_de_DE.json | 22 - .../CupertinoDialogAction/desc_en_US.json | 22 - .../CupertinoDialogAction/desc_es_ES.json | 22 - .../CupertinoDialogAction/desc_fr_FR.json | 22 - .../CupertinoDialogAction/desc_it_IT.json | 22 - .../CupertinoDialogAction/desc_ja_JP.json | 22 - .../CupertinoDialogAction/desc_ko_KR.json | 22 - .../CupertinoDialogAction/desc_pt_PT.json | 22 - .../CupertinoDialogAction/desc_ru_RU.json | 22 - .../CupertinoDialogAction/desc_zh-CN.json | 22 - .../CupertinoDialogAction/no_node1_base.dart | 130 - .../CupertinoDialogAction/node1_base.dart | 37 - .../desc_de_DE.json | 21 - .../desc_en_US.json | 21 - .../desc_es_ES.json | 21 - .../desc_fr_FR.json | 21 - .../desc_it_IT.json | 21 - .../desc_ja_JP.json | 21 - .../desc_ko_KR.json | 21 - .../desc_pt_PT.json | 21 - .../desc_ru_RU.json | 21 - .../desc_zh-CN.json | 21 - .../node1_base.dart | 26 - .../desc_de_DE.json | 19 - .../desc_en_US.json | 19 - .../desc_es_ES.json | 19 - .../desc_fr_FR.json | 19 - .../desc_it_IT.json | 19 - .../desc_ja_JP.json | 19 - .../desc_ko_KR.json | 19 - .../desc_pt_PT.json | 19 - .../desc_ru_RU.json | 19 - .../desc_zh-CN.json | 19 - .../node1_base.dart | 18 - .../CupertinoPageTransition/desc_de_DE.json | 21 - .../CupertinoPageTransition/desc_en_US.json | 21 - .../CupertinoPageTransition/desc_es_ES.json | 21 - .../CupertinoPageTransition/desc_fr_FR.json | 21 - .../CupertinoPageTransition/desc_it_IT.json | 21 - .../CupertinoPageTransition/desc_ja_JP.json | 21 - .../CupertinoPageTransition/desc_ko_KR.json | 21 - .../CupertinoPageTransition/desc_pt_PT.json | 21 - .../CupertinoPageTransition/desc_ru_RU.json | 21 - .../CupertinoPageTransition/desc_zh-CN.json | 21 - .../CupertinoPageTransition/node1_base.dart | 25 - .../CupertinoPopupSurface/desc_de_DE.json | 20 - .../CupertinoPopupSurface/desc_en_US.json | 20 - .../CupertinoPopupSurface/desc_es_ES.json | 20 - .../CupertinoPopupSurface/desc_fr_FR.json | 20 - .../CupertinoPopupSurface/desc_it_IT.json | 20 - .../CupertinoPopupSurface/desc_ja_JP.json | 20 - .../CupertinoPopupSurface/desc_ko_KR.json | 20 - .../CupertinoPopupSurface/desc_pt_PT.json | 20 - .../CupertinoPopupSurface/desc_ru_RU.json | 20 - .../CupertinoPopupSurface/desc_zh-CN.json | 20 - .../CupertinoPopupSurface/node1_base.dart | 54 - .../CupertinoTheme/desc_de_DE.json | 28 - .../CupertinoTheme/desc_en_US.json | 28 - .../CupertinoTheme/desc_es_ES.json | 28 - .../CupertinoTheme/desc_fr_FR.json | 28 - .../CupertinoTheme/desc_it_IT.json | 28 - .../CupertinoTheme/desc_ja_JP.json | 28 - .../CupertinoTheme/desc_ko_KR.json | 28 - .../CupertinoTheme/desc_pt_PT.json | 28 - .../CupertinoTheme/desc_ru_RU.json | 28 - .../CupertinoTheme/desc_zh-CN.json | 28 - .../CupertinoTheme/node1_base.dart | 47 - .../CupertinoTheme/node2_use.dart | 42 - .../StatelessWidget/DataTable/desc_de_DE.json | 28 - .../StatelessWidget/DataTable/desc_en_US.json | 28 - .../StatelessWidget/DataTable/desc_es_ES.json | 28 - .../StatelessWidget/DataTable/desc_fr_FR.json | 28 - .../StatelessWidget/DataTable/desc_it_IT.json | 28 - .../StatelessWidget/DataTable/desc_ja_JP.json | 28 - .../StatelessWidget/DataTable/desc_ko_KR.json | 28 - .../StatelessWidget/DataTable/desc_pt_PT.json | 28 - .../StatelessWidget/DataTable/desc_ru_RU.json | 28 - .../StatelessWidget/DataTable/desc_zh-CN.json | 28 - .../StatelessWidget/DataTable/node1_base.dart | 40 - .../DataTable/node2_operation.dart | 108 - .../StatelessWidget/DayPicker/desc_de_DE.json | 61 - .../StatelessWidget/DayPicker/desc_en_US.json | 61 - .../StatelessWidget/DayPicker/desc_es_ES.json | 61 - .../StatelessWidget/DayPicker/desc_fr_FR.json | 61 - .../StatelessWidget/DayPicker/desc_it_IT.json | 61 - .../StatelessWidget/DayPicker/desc_ja_JP.json | 61 - .../StatelessWidget/DayPicker/desc_ko_KR.json | 61 - .../StatelessWidget/DayPicker/desc_pt_PT.json | 61 - .../StatelessWidget/DayPicker/desc_ru_RU.json | 61 - .../StatelessWidget/DayPicker/desc_zh-CN.json | 61 - .../StatelessWidget/DayPicker/node1_base.dart | 24 - .../StatelessWidget/Dialog/desc_de_DE.json | 21 - .../StatelessWidget/Dialog/desc_en_US.json | 21 - .../StatelessWidget/Dialog/desc_es_ES.json | 21 - .../StatelessWidget/Dialog/desc_fr_FR.json | 21 - .../StatelessWidget/Dialog/desc_it_IT.json | 21 - .../StatelessWidget/Dialog/desc_ja_JP.json | 21 - .../StatelessWidget/Dialog/desc_ko_KR.json | 21 - .../StatelessWidget/Dialog/desc_pt_PT.json | 21 - .../StatelessWidget/Dialog/desc_ru_RU.json | 21 - .../StatelessWidget/Dialog/desc_zh-CN.json | 21 - .../StatelessWidget/Dialog/node1_base.dart | 128 - .../StatelessWidget/Divider/desc_de_DE.json | 31 - .../StatelessWidget/Divider/desc_en_US.json | 31 - .../StatelessWidget/Divider/desc_es_ES.json | 31 - .../StatelessWidget/Divider/desc_fr_FR.json | 31 - .../StatelessWidget/Divider/desc_it_IT.json | 31 - .../StatelessWidget/Divider/desc_ja_JP.json | 31 - .../StatelessWidget/Divider/desc_ko_KR.json | 31 - .../StatelessWidget/Divider/desc_pt_PT.json | 31 - .../StatelessWidget/Divider/desc_ru_RU.json | 31 - .../StatelessWidget/Divider/desc_zh-CN.json | 31 - .../StatelessWidget/Divider/node1_base.dart | 25 - .../StatelessWidget/Divider/node2_height.dart | 31 - .../desc_de_DE.json | 19 - .../desc_en_US.json | 19 - .../desc_es_ES.json | 19 - .../desc_fr_FR.json | 19 - .../desc_it_IT.json | 19 - .../desc_ja_JP.json | 19 - .../desc_ko_KR.json | 19 - .../desc_pt_PT.json | 19 - .../desc_ru_RU.json | 19 - .../desc_zh-CN.json | 19 - .../node1_base.dart | 110 - .../StatelessWidget/Drawer/desc_de_DE.json | 22 - .../StatelessWidget/Drawer/desc_en_US.json | 22 - .../StatelessWidget/Drawer/desc_es_ES.json | 22 - .../StatelessWidget/Drawer/desc_fr_FR.json | 22 - .../StatelessWidget/Drawer/desc_it_IT.json | 22 - .../StatelessWidget/Drawer/desc_ja_JP.json | 22 - .../StatelessWidget/Drawer/desc_ko_KR.json | 22 - .../StatelessWidget/Drawer/desc_pt_PT.json | 22 - .../StatelessWidget/Drawer/desc_ru_RU.json | 22 - .../StatelessWidget/Drawer/desc_zh-CN.json | 22 - .../StatelessWidget/Drawer/node1_base.dart | 65 - .../DrawerButton/desc_de_DE.json | 23 - .../DrawerButton/desc_en_US.json | 23 - .../DrawerButton/desc_es_ES.json | 23 - .../DrawerButton/desc_fr_FR.json | 23 - .../DrawerButton/desc_it_IT.json | 23 - .../DrawerButton/desc_ja_JP.json | 23 - .../DrawerButton/desc_ko_KR.json | 23 - .../DrawerButton/desc_pt_PT.json | 23 - .../DrawerButton/desc_ru_RU.json | 23 - .../DrawerButton/desc_zh-CN.json | 23 - .../DrawerButton/node1_base.dart | 19 - .../DrawerButtonIcon/desc_de_DE.json | 18 - .../DrawerButtonIcon/desc_en_US.json | 18 - .../DrawerButtonIcon/desc_es_ES.json | 18 - .../DrawerButtonIcon/desc_fr_FR.json | 18 - .../DrawerButtonIcon/desc_it_IT.json | 18 - .../DrawerButtonIcon/desc_ja_JP.json | 18 - .../DrawerButtonIcon/desc_ko_KR.json | 18 - .../DrawerButtonIcon/desc_pt_PT.json | 18 - .../DrawerButtonIcon/desc_ru_RU.json | 18 - .../DrawerButtonIcon/desc_zh-CN.json | 18 - .../DrawerButtonIcon/node1_base.dart | 13 - .../DrawerHeader/desc_de_DE.json | 21 - .../DrawerHeader/desc_en_US.json | 21 - .../DrawerHeader/desc_es_ES.json | 21 - .../DrawerHeader/desc_fr_FR.json | 21 - .../DrawerHeader/desc_it_IT.json | 21 - .../DrawerHeader/desc_ja_JP.json | 21 - .../DrawerHeader/desc_ko_KR.json | 21 - .../DrawerHeader/desc_pt_PT.json | 21 - .../DrawerHeader/desc_ru_RU.json | 21 - .../DrawerHeader/desc_zh-CN.json | 21 - .../DrawerHeader/node1_base.dart | 73 - .../EndDrawerButton/desc_de_DE.json | 23 - .../EndDrawerButton/desc_en_US.json | 23 - .../EndDrawerButton/desc_es_ES.json | 23 - .../EndDrawerButton/desc_fr_FR.json | 23 - .../EndDrawerButton/desc_it_IT.json | 23 - .../EndDrawerButton/desc_ja_JP.json | 23 - .../EndDrawerButton/desc_ko_KR.json | 23 - .../EndDrawerButton/desc_pt_PT.json | 23 - .../EndDrawerButton/desc_ru_RU.json | 23 - .../EndDrawerButton/desc_zh-CN.json | 23 - .../EndDrawerButton/node1_base.dart | 19 - .../EndDrawerButtonIcon/desc_de_DE.json | 18 - .../EndDrawerButtonIcon/desc_en_US.json | 18 - .../EndDrawerButtonIcon/desc_es_ES.json | 18 - .../EndDrawerButtonIcon/desc_fr_FR.json | 18 - .../EndDrawerButtonIcon/desc_it_IT.json | 18 - .../EndDrawerButtonIcon/desc_ja_JP.json | 18 - .../EndDrawerButtonIcon/desc_ko_KR.json | 18 - .../EndDrawerButtonIcon/desc_pt_PT.json | 18 - .../EndDrawerButtonIcon/desc_ru_RU.json | 18 - .../EndDrawerButtonIcon/desc_zh-CN.json | 18 - .../EndDrawerButtonIcon/node1_base.dart | 13 - .../FadeInImage/desc_de_DE.json | 28 - .../FadeInImage/desc_en_US.json | 28 - .../FadeInImage/desc_es_ES.json | 28 - .../FadeInImage/desc_fr_FR.json | 28 - .../FadeInImage/desc_it_IT.json | 28 - .../FadeInImage/desc_ja_JP.json | 28 - .../FadeInImage/desc_ko_KR.json | 28 - .../FadeInImage/desc_pt_PT.json | 28 - .../FadeInImage/desc_ru_RU.json | 28 - .../FadeInImage/desc_zh-CN.json | 28 - .../FadeInImage/node1_base.dart | 29 - .../FilterChip/desc_de_DE.json | 27 - .../FilterChip/desc_en_US.json | 27 - .../FilterChip/desc_es_ES.json | 27 - .../FilterChip/desc_fr_FR.json | 27 - .../FilterChip/desc_it_IT.json | 27 - .../FilterChip/desc_ja_JP.json | 27 - .../FilterChip/desc_ko_KR.json | 27 - .../FilterChip/desc_pt_PT.json | 27 - .../FilterChip/desc_ru_RU.json | 27 - .../FilterChip/desc_zh-CN.json | 27 - .../FilterChip/node1_base.dart | 72 - .../FlatButton/desc_de_DE.json | 58 - .../FlatButton/desc_en_US.json | 58 - .../FlatButton/desc_es_ES.json | 58 - .../FlatButton/desc_fr_FR.json | 58 - .../FlatButton/desc_it_IT.json | 58 - .../FlatButton/desc_ja_JP.json | 58 - .../FlatButton/desc_ko_KR.json | 58 - .../FlatButton/desc_pt_PT.json | 58 - .../FlatButton/desc_ru_RU.json | 58 - .../FlatButton/desc_zh-CN.json | 58 - .../FlatButton/node1_base.dart | 20 - .../FloatingActionButton/desc_de_DE.json | 37 - .../FloatingActionButton/desc_en_US.json | 37 - .../FloatingActionButton/desc_es_ES.json | 37 - .../FloatingActionButton/desc_fr_FR.json | 37 - .../FloatingActionButton/desc_it_IT.json | 37 - .../FloatingActionButton/desc_ja_JP.json | 37 - .../FloatingActionButton/desc_ko_KR.json | 37 - .../FloatingActionButton/desc_pt_PT.json | 37 - .../FloatingActionButton/desc_ru_RU.json | 37 - .../FloatingActionButton/desc_zh-CN.json | 37 - .../FloatingActionButton/node1_base.dart | 29 - .../FloatingActionButton/node2_mini.dart | 31 - .../FloatingActionButton/node3_shape.dart | 57 - .../FlutterLogo/desc_de_DE.json | 27 - .../FlutterLogo/desc_en_US.json | 27 - .../FlutterLogo/desc_es_ES.json | 27 - .../FlutterLogo/desc_fr_FR.json | 27 - .../FlutterLogo/desc_it_IT.json | 27 - .../FlutterLogo/desc_ja_JP.json | 27 - .../FlutterLogo/desc_ko_KR.json | 27 - .../FlutterLogo/desc_pt_PT.json | 27 - .../FlutterLogo/desc_ru_RU.json | 27 - .../FlutterLogo/desc_zh-CN.json | 27 - .../FlutterLogo/node1_base.dart | 28 - .../FlutterLogo/node2_style.dart | 28 - .../GestureDetector/desc_de_DE.json | 44 - .../GestureDetector/desc_en_US.json | 44 - .../GestureDetector/desc_es_ES.json | 44 - .../GestureDetector/desc_fr_FR.json | 44 - .../GestureDetector/desc_it_IT.json | 44 - .../GestureDetector/desc_ja_JP.json | 44 - .../GestureDetector/desc_ko_KR.json | 44 - .../GestureDetector/desc_pt_PT.json | 44 - .../GestureDetector/desc_ru_RU.json | 44 - .../GestureDetector/desc_zh-CN.json | 44 - .../GestureDetector/node1_base.dart | 35 - .../GestureDetector/node2_tap.dart | 36 - .../GestureDetector/node3_pan.dart | 42 - .../StatelessWidget/GridPaper/desc_de_DE.json | 30 - .../StatelessWidget/GridPaper/desc_en_US.json | 30 - .../StatelessWidget/GridPaper/desc_es_ES.json | 30 - .../StatelessWidget/GridPaper/desc_fr_FR.json | 30 - .../StatelessWidget/GridPaper/desc_it_IT.json | 30 - .../StatelessWidget/GridPaper/desc_ja_JP.json | 30 - .../StatelessWidget/GridPaper/desc_ko_KR.json | 30 - .../StatelessWidget/GridPaper/desc_pt_PT.json | 30 - .../StatelessWidget/GridPaper/desc_ru_RU.json | 30 - .../StatelessWidget/GridPaper/desc_zh-CN.json | 30 - .../StatelessWidget/GridPaper/node1_base.dart | 22 - .../GridPaper/node2_divisions.dart | 24 - .../StatelessWidget/GridTile/desc_de_DE.json | 20 - .../StatelessWidget/GridTile/desc_en_US.json | 20 - .../StatelessWidget/GridTile/desc_es_ES.json | 20 - .../StatelessWidget/GridTile/desc_fr_FR.json | 20 - .../StatelessWidget/GridTile/desc_it_IT.json | 20 - .../StatelessWidget/GridTile/desc_ja_JP.json | 20 - .../StatelessWidget/GridTile/desc_ko_KR.json | 20 - .../StatelessWidget/GridTile/desc_pt_PT.json | 20 - .../StatelessWidget/GridTile/desc_ru_RU.json | 20 - .../StatelessWidget/GridTile/desc_zh-CN.json | 20 - .../StatelessWidget/GridTile/node1_base.dart | 43 - .../GridTileBar/desc_de_DE.json | 22 - .../GridTileBar/desc_en_US.json | 22 - .../GridTileBar/desc_es_ES.json | 22 - .../GridTileBar/desc_fr_FR.json | 22 - .../GridTileBar/desc_it_IT.json | 22 - .../GridTileBar/desc_ja_JP.json | 22 - .../GridTileBar/desc_ko_KR.json | 22 - .../GridTileBar/desc_pt_PT.json | 22 - .../GridTileBar/desc_ru_RU.json | 22 - .../GridTileBar/desc_zh-CN.json | 22 - .../GridTileBar/node1_base.dart | 23 - .../StatelessWidget/GridView/desc_de_DE.json | 53 - .../StatelessWidget/GridView/desc_en_US.json | 53 - .../StatelessWidget/GridView/desc_es_ES.json | 53 - .../StatelessWidget/GridView/desc_fr_FR.json | 53 - .../StatelessWidget/GridView/desc_it_IT.json | 53 - .../StatelessWidget/GridView/desc_ja_JP.json | 53 - .../StatelessWidget/GridView/desc_ko_KR.json | 53 - .../StatelessWidget/GridView/desc_pt_PT.json | 53 - .../StatelessWidget/GridView/desc_ru_RU.json | 53 - .../StatelessWidget/GridView/desc_zh-CN.json | 53 - .../StatelessWidget/GridView/node1_base.dart | 56 - .../GridView/node2_direction.dart | 55 - .../GridView/node3_extend.dart | 54 - .../GridView/node4_builder.dart | 56 - .../HtmlElementView/desc_de_DE.json | 19 - .../HtmlElementView/desc_en_US.json | 19 - .../HtmlElementView/desc_es_ES.json | 19 - .../HtmlElementView/desc_fr_FR.json | 19 - .../HtmlElementView/desc_it_IT.json | 19 - .../HtmlElementView/desc_ja_JP.json | 19 - .../HtmlElementView/desc_ko_KR.json | 19 - .../HtmlElementView/desc_pt_PT.json | 19 - .../HtmlElementView/desc_ru_RU.json | 19 - .../HtmlElementView/desc_zh-CN.json | 19 - .../HtmlElementView/node1_base.dart | 24 - .../lib/StatelessWidget/Icon/desc_de_DE.json | 31 - .../lib/StatelessWidget/Icon/desc_en_US.json | 31 - .../lib/StatelessWidget/Icon/desc_es_ES.json | 31 - .../lib/StatelessWidget/Icon/desc_fr_FR.json | 31 - .../lib/StatelessWidget/Icon/desc_it_IT.json | 31 - .../lib/StatelessWidget/Icon/desc_ja_JP.json | 31 - .../lib/StatelessWidget/Icon/desc_ko_KR.json | 31 - .../lib/StatelessWidget/Icon/desc_pt_PT.json | 31 - .../lib/StatelessWidget/Icon/desc_ru_RU.json | 31 - .../lib/StatelessWidget/Icon/desc_zh-CN.json | 31 - .../lib/StatelessWidget/Icon/node1_base.dart | 23 - .../lib/StatelessWidget/Icon/node2_diy.dart | 30 - .../IconButton/desc_de_DE.json | 22 - .../IconButton/desc_en_US.json | 22 - .../IconButton/desc_es_ES.json | 22 - .../IconButton/desc_fr_FR.json | 22 - .../IconButton/desc_it_IT.json | 22 - .../IconButton/desc_ja_JP.json | 22 - .../IconButton/desc_ko_KR.json | 22 - .../IconButton/desc_pt_PT.json | 22 - .../IconButton/desc_ru_RU.json | 22 - .../IconButton/desc_zh-CN.json | 22 - .../IconButton/node1_base.dart | 23 - .../StatelessWidget/ImageIcon/desc_de_DE.json | 24 - .../StatelessWidget/ImageIcon/desc_en_US.json | 24 - .../StatelessWidget/ImageIcon/desc_es_ES.json | 24 - .../StatelessWidget/ImageIcon/desc_fr_FR.json | 24 - .../StatelessWidget/ImageIcon/desc_it_IT.json | 24 - .../StatelessWidget/ImageIcon/desc_ja_JP.json | 24 - .../StatelessWidget/ImageIcon/desc_ko_KR.json | 24 - .../StatelessWidget/ImageIcon/desc_pt_PT.json | 24 - .../StatelessWidget/ImageIcon/desc_ru_RU.json | 24 - .../StatelessWidget/ImageIcon/desc_zh-CN.json | 24 - .../StatelessWidget/ImageIcon/node1_base.dart | 29 - .../StatelessWidget/InputChip/desc_de_DE.json | 33 - .../StatelessWidget/InputChip/desc_en_US.json | 33 - .../StatelessWidget/InputChip/desc_es_ES.json | 33 - .../StatelessWidget/InputChip/desc_fr_FR.json | 33 - .../StatelessWidget/InputChip/desc_it_IT.json | 33 - .../StatelessWidget/InputChip/desc_ja_JP.json | 33 - .../StatelessWidget/InputChip/desc_ko_KR.json | 33 - .../StatelessWidget/InputChip/desc_pt_PT.json | 33 - .../StatelessWidget/InputChip/desc_ru_RU.json | 33 - .../StatelessWidget/InputChip/desc_zh-CN.json | 33 - .../StatelessWidget/InputChip/node1_base.dart | 35 - .../InputChip/node2_select.dart | 41 - .../StatelessWidget/ListTile/desc_de_DE.json | 41 - .../StatelessWidget/ListTile/desc_en_US.json | 41 - .../StatelessWidget/ListTile/desc_es_ES.json | 41 - .../StatelessWidget/ListTile/desc_fr_FR.json | 41 - .../StatelessWidget/ListTile/desc_it_IT.json | 41 - .../StatelessWidget/ListTile/desc_ja_JP.json | 41 - .../StatelessWidget/ListTile/desc_ko_KR.json | 41 - .../StatelessWidget/ListTile/desc_pt_PT.json | 41 - .../StatelessWidget/ListTile/desc_ru_RU.json | 41 - .../StatelessWidget/ListTile/desc_zh-CN.json | 41 - .../StatelessWidget/ListTile/node1_base.dart | 24 - .../ListTile/node2_select.dart | 32 - .../StatelessWidget/ListTile/node3_dense.dart | 33 - .../StatelessWidget/ListView/desc_de_DE.json | 46 - .../StatelessWidget/ListView/desc_en_US.json | 46 - .../StatelessWidget/ListView/desc_es_ES.json | 46 - .../StatelessWidget/ListView/desc_fr_FR.json | 46 - .../StatelessWidget/ListView/desc_it_IT.json | 46 - .../StatelessWidget/ListView/desc_ja_JP.json | 46 - .../StatelessWidget/ListView/desc_ko_KR.json | 46 - .../StatelessWidget/ListView/desc_pt_PT.json | 46 - .../StatelessWidget/ListView/desc_ru_RU.json | 46 - .../StatelessWidget/ListView/desc_zh-CN.json | 46 - .../StatelessWidget/ListView/node1_base.dart | 53 - .../ListView/node2_direction.dart | 55 - .../ListView/node3_builder.dart | 53 - .../ListView/node4_separated.dart | 58 - .../StatelessWidget/Listener/desc_de_DE.json | 22 - .../StatelessWidget/Listener/desc_en_US.json | 22 - .../StatelessWidget/Listener/desc_es_ES.json | 22 - .../StatelessWidget/Listener/desc_fr_FR.json | 22 - .../StatelessWidget/Listener/desc_it_IT.json | 22 - .../StatelessWidget/Listener/desc_ja_JP.json | 22 - .../StatelessWidget/Listener/desc_ko_KR.json | 22 - .../StatelessWidget/Listener/desc_pt_PT.json | 22 - .../StatelessWidget/Listener/desc_ru_RU.json | 22 - .../StatelessWidget/Listener/desc_zh-CN.json | 22 - .../StatelessWidget/Listener/node1_base.dart | 37 - .../MaterialBanner/desc_de_DE.json | 32 - .../MaterialBanner/desc_en_US.json | 32 - .../MaterialBanner/desc_es_ES.json | 32 - .../MaterialBanner/desc_fr_FR.json | 32 - .../MaterialBanner/desc_it_IT.json | 32 - .../MaterialBanner/desc_ja_JP.json | 32 - .../MaterialBanner/desc_ko_KR.json | 32 - .../MaterialBanner/desc_pt_PT.json | 32 - .../MaterialBanner/desc_ru_RU.json | 32 - .../MaterialBanner/desc_zh-CN.json | 32 - .../MaterialBanner/node1_one_btn.dart | 38 - .../MaterialBanner/node2_two_btn.dart | 59 - .../MaterialButton/desc_de_DE.json | 47 - .../MaterialButton/desc_en_US.json | 47 - .../MaterialButton/desc_es_ES.json | 47 - .../MaterialButton/desc_fr_FR.json | 47 - .../MaterialButton/desc_it_IT.json | 47 - .../MaterialButton/desc_ja_JP.json | 47 - .../MaterialButton/desc_ko_KR.json | 47 - .../MaterialButton/desc_pt_PT.json | 47 - .../MaterialButton/desc_ru_RU.json | 47 - .../MaterialButton/desc_zh-CN.json | 47 - .../MaterialButton/node1_base.dart | 25 - .../MaterialButton/node2_onLongPress.dart | 27 - .../MaterialButton/node3_shape.dart | 57 - .../ModalBarrier/desc_de_DE.json | 19 - .../ModalBarrier/desc_en_US.json | 19 - .../ModalBarrier/desc_es_ES.json | 19 - .../ModalBarrier/desc_fr_FR.json | 19 - .../ModalBarrier/desc_it_IT.json | 19 - .../ModalBarrier/desc_ja_JP.json | 19 - .../ModalBarrier/desc_ko_KR.json | 19 - .../ModalBarrier/desc_pt_PT.json | 19 - .../ModalBarrier/desc_ru_RU.json | 19 - .../ModalBarrier/desc_zh-CN.json | 19 - .../ModalBarrier/node1_base.dart | 24 - .../NavigationToolbar/desc_de_DE.json | 22 - .../NavigationToolbar/desc_en_US.json | 22 - .../NavigationToolbar/desc_es_ES.json | 22 - .../NavigationToolbar/desc_fr_FR.json | 22 - .../NavigationToolbar/desc_it_IT.json | 22 - .../NavigationToolbar/desc_ja_JP.json | 22 - .../NavigationToolbar/desc_ko_KR.json | 22 - .../NavigationToolbar/desc_pt_PT.json | 22 - .../NavigationToolbar/desc_ru_RU.json | 22 - .../NavigationToolbar/desc_zh-CN.json | 22 - .../NavigationToolbar/node1_base.dart | 37 - .../NotificationListener/desc_de_DE.json | 25 - .../NotificationListener/desc_en_US.json | 25 - .../NotificationListener/desc_es_ES.json | 25 - .../NotificationListener/desc_fr_FR.json | 25 - .../NotificationListener/desc_it_IT.json | 25 - .../NotificationListener/desc_ja_JP.json | 25 - .../NotificationListener/desc_ko_KR.json | 25 - .../NotificationListener/desc_pt_PT.json | 25 - .../NotificationListener/desc_ru_RU.json | 25 - .../NotificationListener/desc_zh-CN.json | 25 - .../NotificationListener/node1_base.dart | 61 - .../NotificationListener/node2_update.dart | 79 - .../OrientationBuilder/desc_de_DE.json | 18 - .../OrientationBuilder/desc_en_US.json | 18 - .../OrientationBuilder/desc_es_ES.json | 18 - .../OrientationBuilder/desc_fr_FR.json | 18 - .../OrientationBuilder/desc_it_IT.json | 18 - .../OrientationBuilder/desc_ja_JP.json | 18 - .../OrientationBuilder/desc_ko_KR.json | 18 - .../OrientationBuilder/desc_pt_PT.json | 18 - .../OrientationBuilder/desc_ru_RU.json | 18 - .../OrientationBuilder/desc_zh-CN.json | 18 - .../OrientationBuilder/node1_base.dart | 51 - .../OutlineButton/desc_de_DE.json | 60 - .../OutlineButton/desc_en_US.json | 60 - .../OutlineButton/desc_es_ES.json | 60 - .../OutlineButton/desc_fr_FR.json | 60 - .../OutlineButton/desc_it_IT.json | 60 - .../OutlineButton/desc_ja_JP.json | 60 - .../OutlineButton/desc_ko_KR.json | 60 - .../OutlineButton/desc_pt_PT.json | 60 - .../OutlineButton/desc_ru_RU.json | 60 - .../OutlineButton/desc_zh-CN.json | 60 - .../OutlineButton/node1_base.dart | 21 - .../PageStorage/desc_de_DE.json | 23 - .../PageStorage/desc_en_US.json | 23 - .../PageStorage/desc_es_ES.json | 23 - .../PageStorage/desc_fr_FR.json | 23 - .../PageStorage/desc_it_IT.json | 23 - .../PageStorage/desc_ja_JP.json | 23 - .../PageStorage/desc_ko_KR.json | 23 - .../PageStorage/desc_pt_PT.json | 23 - .../PageStorage/desc_ru_RU.json | 23 - .../PageStorage/desc_zh-CN.json | 23 - .../PageStorage/node1_base.dart | 109 - .../Placeholder/desc_de_DE.json | 28 - .../Placeholder/desc_en_US.json | 28 - .../Placeholder/desc_es_ES.json | 28 - .../Placeholder/desc_fr_FR.json | 28 - .../Placeholder/desc_it_IT.json | 28 - .../Placeholder/desc_ja_JP.json | 28 - .../Placeholder/desc_ko_KR.json | 28 - .../Placeholder/desc_pt_PT.json | 28 - .../Placeholder/desc_ru_RU.json | 28 - .../Placeholder/desc_zh-CN.json | 28 - .../Placeholder/node1_base.dart | 20 - .../Placeholder/node2_fallback.dart | 20 - .../PositionedDirectional/desc_de_DE.json | 25 - .../PositionedDirectional/desc_en_US.json | 25 - .../PositionedDirectional/desc_es_ES.json | 25 - .../PositionedDirectional/desc_fr_FR.json | 25 - .../PositionedDirectional/desc_it_IT.json | 25 - .../PositionedDirectional/desc_ja_JP.json | 25 - .../PositionedDirectional/desc_ko_KR.json | 25 - .../PositionedDirectional/desc_pt_PT.json | 25 - .../PositionedDirectional/desc_ru_RU.json | 25 - .../PositionedDirectional/desc_zh-CN.json | 25 - .../PositionedDirectional/node1_base.dart | 52 - .../PreferredSize/desc_de_DE.json | 28 - .../PreferredSize/desc_en_US.json | 28 - .../PreferredSize/desc_es_ES.json | 28 - .../PreferredSize/desc_fr_FR.json | 28 - .../PreferredSize/desc_it_IT.json | 28 - .../PreferredSize/desc_ja_JP.json | 28 - .../PreferredSize/desc_ko_KR.json | 28 - .../PreferredSize/desc_pt_PT.json | 28 - .../PreferredSize/desc_ru_RU.json | 28 - .../PreferredSize/desc_zh-CN.json | 28 - .../PreferredSize/node1_base.dart | 23 - .../PreferredSize/node2_adapter.dart | 30 - .../RadioListTile/desc_de_DE.json | 32 - .../RadioListTile/desc_en_US.json | 32 - .../RadioListTile/desc_es_ES.json | 32 - .../RadioListTile/desc_fr_FR.json | 32 - .../RadioListTile/desc_it_IT.json | 32 - .../RadioListTile/desc_ja_JP.json | 32 - .../RadioListTile/desc_ko_KR.json | 32 - .../RadioListTile/desc_pt_PT.json | 32 - .../RadioListTile/desc_ru_RU.json | 32 - .../RadioListTile/desc_zh-CN.json | 32 - .../RadioListTile/node1_base.dart | 60 - .../RadioListTile/node2_dense.dart | 61 - .../RaisedButton/desc_de_DE.json | 60 - .../RaisedButton/desc_en_US.json | 60 - .../RaisedButton/desc_es_ES.json | 60 - .../RaisedButton/desc_fr_FR.json | 60 - .../RaisedButton/desc_it_IT.json | 60 - .../RaisedButton/desc_ja_JP.json | 60 - .../RaisedButton/desc_ko_KR.json | 60 - .../RaisedButton/desc_pt_PT.json | 60 - .../RaisedButton/desc_ru_RU.json | 60 - .../RaisedButton/desc_zh-CN.json | 60 - .../RaisedButton/node1_base.dart | 20 - .../RawMagnifier/desc_de_DE.json | 29 - .../RawMagnifier/desc_en_US.json | 29 - .../RawMagnifier/desc_es_ES.json | 29 - .../RawMagnifier/desc_fr_FR.json | 29 - .../RawMagnifier/desc_it_IT.json | 29 - .../RawMagnifier/desc_ja_JP.json | 29 - .../RawMagnifier/desc_ko_KR.json | 29 - .../RawMagnifier/desc_pt_PT.json | 29 - .../RawMagnifier/desc_ru_RU.json | 29 - .../RawMagnifier/desc_zh-CN.json | 29 - .../RawMagnifier/node1_base.dart | 76 - .../RawMagnifier/node2_shape.dart | 117 - .../StatelessWidget/SafeArea/desc_de_DE.json | 22 - .../StatelessWidget/SafeArea/desc_en_US.json | 22 - .../StatelessWidget/SafeArea/desc_es_ES.json | 22 - .../StatelessWidget/SafeArea/desc_fr_FR.json | 22 - .../StatelessWidget/SafeArea/desc_it_IT.json | 22 - .../StatelessWidget/SafeArea/desc_ja_JP.json | 22 - .../StatelessWidget/SafeArea/desc_ko_KR.json | 22 - .../StatelessWidget/SafeArea/desc_pt_PT.json | 22 - .../StatelessWidget/SafeArea/desc_ru_RU.json | 22 - .../StatelessWidget/SafeArea/desc_zh-CN.json | 22 - .../StatelessWidget/SafeArea/node1_base.dart | 116 - .../ScrollView/desc_de_DE.json | 29 - .../ScrollView/desc_en_US.json | 29 - .../ScrollView/desc_es_ES.json | 29 - .../ScrollView/desc_fr_FR.json | 29 - .../ScrollView/desc_it_IT.json | 29 - .../ScrollView/desc_ja_JP.json | 29 - .../ScrollView/desc_ko_KR.json | 29 - .../ScrollView/desc_pt_PT.json | 29 - .../ScrollView/desc_ru_RU.json | 29 - .../ScrollView/desc_zh-CN.json | 29 - .../ScrollView/node1_base.dart | 103 - .../SimpleDialog/desc_de_DE.json | 24 - .../SimpleDialog/desc_en_US.json | 24 - .../SimpleDialog/desc_es_ES.json | 24 - .../SimpleDialog/desc_fr_FR.json | 24 - .../SimpleDialog/desc_it_IT.json | 24 - .../SimpleDialog/desc_ja_JP.json | 24 - .../SimpleDialog/desc_ko_KR.json | 24 - .../SimpleDialog/desc_pt_PT.json | 24 - .../SimpleDialog/desc_ru_RU.json | 24 - .../SimpleDialog/desc_zh-CN.json | 24 - .../SimpleDialog/node1_base.dart | 110 - .../SimpleDialogOption/desc_de_DE.json | 19 - .../SimpleDialogOption/desc_en_US.json | 19 - .../SimpleDialogOption/desc_es_ES.json | 19 - .../SimpleDialogOption/desc_fr_FR.json | 19 - .../SimpleDialogOption/desc_it_IT.json | 19 - .../SimpleDialogOption/desc_ja_JP.json | 19 - .../SimpleDialogOption/desc_ko_KR.json | 19 - .../SimpleDialogOption/desc_pt_PT.json | 19 - .../SimpleDialogOption/desc_ru_RU.json | 19 - .../SimpleDialogOption/desc_zh-CN.json | 19 - .../SimpleDialogOption/node1_base.dart | 36 - .../SingleChildScrollView/desc_de_DE.json | 27 - .../SingleChildScrollView/desc_en_US.json | 27 - .../SingleChildScrollView/desc_es_ES.json | 27 - .../SingleChildScrollView/desc_fr_FR.json | 27 - .../SingleChildScrollView/desc_it_IT.json | 27 - .../SingleChildScrollView/desc_ja_JP.json | 27 - .../SingleChildScrollView/desc_ko_KR.json | 27 - .../SingleChildScrollView/desc_pt_PT.json | 27 - .../SingleChildScrollView/desc_ru_RU.json | 27 - .../SingleChildScrollView/desc_zh-CN.json | 27 - .../SingleChildScrollView/node1_base.dart | 59 - .../node2_direction.dart | 60 - .../StatelessWidget/SnackBar/desc_de_DE.json | 27 - .../StatelessWidget/SnackBar/desc_en_US.json | 27 - .../StatelessWidget/SnackBar/desc_es_ES.json | 27 - .../StatelessWidget/SnackBar/desc_fr_FR.json | 27 - .../StatelessWidget/SnackBar/desc_it_IT.json | 27 - .../StatelessWidget/SnackBar/desc_ja_JP.json | 27 - .../StatelessWidget/SnackBar/desc_ko_KR.json | 27 - .../StatelessWidget/SnackBar/desc_pt_PT.json | 27 - .../StatelessWidget/SnackBar/desc_ru_RU.json | 27 - .../StatelessWidget/SnackBar/desc_zh-CN.json | 27 - .../StatelessWidget/SnackBar/node1_base.dart | 40 - .../SnackBarAction/desc_de_DE.json | 21 - .../SnackBarAction/desc_en_US.json | 21 - .../SnackBarAction/desc_es_ES.json | 21 - .../SnackBarAction/desc_fr_FR.json | 21 - .../SnackBarAction/desc_it_IT.json | 21 - .../SnackBarAction/desc_ja_JP.json | 21 - .../SnackBarAction/desc_ko_KR.json | 21 - .../SnackBarAction/desc_pt_PT.json | 21 - .../SnackBarAction/desc_ru_RU.json | 21 - .../SnackBarAction/desc_zh-CN.json | 21 - .../SnackBarAction/node1_base.dart | 18 - .../StatelessWidget/Spacer/desc_de_DE.json | 25 - .../StatelessWidget/Spacer/desc_en_US.json | 25 - .../StatelessWidget/Spacer/desc_es_ES.json | 25 - .../StatelessWidget/Spacer/desc_fr_FR.json | 25 - .../StatelessWidget/Spacer/desc_it_IT.json | 25 - .../StatelessWidget/Spacer/desc_ja_JP.json | 25 - .../StatelessWidget/Spacer/desc_ko_KR.json | 25 - .../StatelessWidget/Spacer/desc_pt_PT.json | 25 - .../StatelessWidget/Spacer/desc_ru_RU.json | 25 - .../StatelessWidget/Spacer/desc_zh-CN.json | 25 - .../StatelessWidget/Spacer/node1_base.dart | 31 - .../StatelessWidget/Spacer/node2_flex.dart | 67 - .../SwitchListTile/desc_de_DE.json | 41 - .../SwitchListTile/desc_en_US.json | 41 - .../SwitchListTile/desc_es_ES.json | 41 - .../SwitchListTile/desc_fr_FR.json | 41 - .../SwitchListTile/desc_it_IT.json | 41 - .../SwitchListTile/desc_ja_JP.json | 41 - .../SwitchListTile/desc_ko_KR.json | 41 - .../SwitchListTile/desc_pt_PT.json | 41 - .../SwitchListTile/desc_ru_RU.json | 41 - .../SwitchListTile/desc_zh-CN.json | 41 - .../SwitchListTile/node1_base.dart | 34 - .../SwitchListTile/node2_select.dart | 35 - .../SwitchListTile/node3_dense.dart | 34 - .../lib/StatelessWidget/Tab/desc_de_DE.json | 21 - .../lib/StatelessWidget/Tab/desc_en_US.json | 21 - .../lib/StatelessWidget/Tab/desc_es_ES.json | 21 - .../lib/StatelessWidget/Tab/desc_fr_FR.json | 21 - .../lib/StatelessWidget/Tab/desc_it_IT.json | 21 - .../lib/StatelessWidget/Tab/desc_ja_JP.json | 21 - .../lib/StatelessWidget/Tab/desc_ko_KR.json | 21 - .../lib/StatelessWidget/Tab/desc_pt_PT.json | 21 - .../lib/StatelessWidget/Tab/desc_ru_RU.json | 21 - .../lib/StatelessWidget/Tab/desc_zh-CN.json | 21 - .../lib/StatelessWidget/Tab/node1_base.dart | 30 - .../StatelessWidget/TabBar/desc_de_DE.json | 37 - .../StatelessWidget/TabBar/desc_en_US.json | 37 - .../StatelessWidget/TabBar/desc_es_ES.json | 37 - .../StatelessWidget/TabBar/desc_fr_FR.json | 37 - .../StatelessWidget/TabBar/desc_it_IT.json | 37 - .../StatelessWidget/TabBar/desc_ja_JP.json | 37 - .../StatelessWidget/TabBar/desc_ko_KR.json | 37 - .../StatelessWidget/TabBar/desc_pt_PT.json | 37 - .../StatelessWidget/TabBar/desc_ru_RU.json | 37 - .../StatelessWidget/TabBar/desc_zh-CN.json | 37 - .../StatelessWidget/TabBar/node1_base.dart | 46 - .../TabBar/node2_noShadow.dart | 52 - .../TabPageSelector/desc_de_DE.json | 24 - .../TabPageSelector/desc_en_US.json | 24 - .../TabPageSelector/desc_es_ES.json | 24 - .../TabPageSelector/desc_fr_FR.json | 24 - .../TabPageSelector/desc_it_IT.json | 24 - .../TabPageSelector/desc_ja_JP.json | 24 - .../TabPageSelector/desc_ko_KR.json | 24 - .../TabPageSelector/desc_pt_PT.json | 24 - .../TabPageSelector/desc_ru_RU.json | 24 - .../TabPageSelector/desc_zh-CN.json | 24 - .../TabPageSelector/node1_base.dart | 64 - .../TabPageSelectorIndicator/desc_de_DE.json | 20 - .../TabPageSelectorIndicator/desc_en_US.json | 20 - .../TabPageSelectorIndicator/desc_es_ES.json | 20 - .../TabPageSelectorIndicator/desc_fr_FR.json | 20 - .../TabPageSelectorIndicator/desc_it_IT.json | 20 - .../TabPageSelectorIndicator/desc_ja_JP.json | 20 - .../TabPageSelectorIndicator/desc_ko_KR.json | 20 - .../TabPageSelectorIndicator/desc_pt_PT.json | 20 - .../TabPageSelectorIndicator/desc_ru_RU.json | 20 - .../TabPageSelectorIndicator/desc_zh-CN.json | 20 - .../TabPageSelectorIndicator/node1_base.dart | 47 - .../lib/StatelessWidget/Text/desc_de_DE.json | 72 - .../lib/StatelessWidget/Text/desc_en_US.json | 72 - .../lib/StatelessWidget/Text/desc_es_ES.json | 72 - .../lib/StatelessWidget/Text/desc_fr_FR.json | 72 - .../lib/StatelessWidget/Text/desc_it_IT.json | 72 - .../lib/StatelessWidget/Text/desc_ja_JP.json | 72 - .../lib/StatelessWidget/Text/desc_ko_KR.json | 72 - .../lib/StatelessWidget/Text/desc_pt_PT.json | 72 - .../lib/StatelessWidget/Text/desc_ru_RU.json | 72 - .../lib/StatelessWidget/Text/desc_zh-CN.json | 72 - .../lib/StatelessWidget/Text/node1.dart | 25 - .../lib/StatelessWidget/Text/node2.dart | 21 - .../Text/node3_decoration.dart | 25 - .../StatelessWidget/Text/node4_textAlign.dart | 27 - .../Text/node5_textDirection.dart | 29 - .../StatelessWidget/Text/node6_softWrap.dart | 28 - .../lib/StatelessWidget/Theme/desc_de_DE.json | 29 - .../lib/StatelessWidget/Theme/desc_en_US.json | 29 - .../lib/StatelessWidget/Theme/desc_es_ES.json | 29 - .../lib/StatelessWidget/Theme/desc_fr_FR.json | 29 - .../lib/StatelessWidget/Theme/desc_it_IT.json | 29 - .../lib/StatelessWidget/Theme/desc_ja_JP.json | 29 - .../lib/StatelessWidget/Theme/desc_ko_KR.json | 29 - .../lib/StatelessWidget/Theme/desc_pt_PT.json | 29 - .../lib/StatelessWidget/Theme/desc_ru_RU.json | 29 - .../lib/StatelessWidget/Theme/desc_zh-CN.json | 29 - .../lib/StatelessWidget/Theme/node1_base.dart | 54 - .../lib/StatelessWidget/Theme/node2_use.dart | 43 - .../lib/StatelessWidget/Title/desc_de_DE.json | 20 - .../lib/StatelessWidget/Title/desc_en_US.json | 20 - .../lib/StatelessWidget/Title/desc_es_ES.json | 20 - .../lib/StatelessWidget/Title/desc_fr_FR.json | 20 - .../lib/StatelessWidget/Title/desc_it_IT.json | 20 - .../lib/StatelessWidget/Title/desc_ja_JP.json | 20 - .../lib/StatelessWidget/Title/desc_ko_KR.json | 20 - .../lib/StatelessWidget/Title/desc_pt_PT.json | 20 - .../lib/StatelessWidget/Title/desc_ru_RU.json | 20 - .../lib/StatelessWidget/Title/desc_zh-CN.json | 20 - .../lib/StatelessWidget/Title/node1_base.dart | 19 - .../ToggleButtons/desc_de_DE.json | 43 - .../ToggleButtons/desc_en_US.json | 43 - .../ToggleButtons/desc_es_ES.json | 43 - .../ToggleButtons/desc_fr_FR.json | 43 - .../ToggleButtons/desc_it_IT.json | 43 - .../ToggleButtons/desc_ja_JP.json | 43 - .../ToggleButtons/desc_ko_KR.json | 43 - .../ToggleButtons/desc_pt_PT.json | 43 - .../ToggleButtons/desc_ru_RU.json | 43 - .../ToggleButtons/desc_zh-CN.json | 43 - .../ToggleButtons/node1_single.dart | 33 - .../ToggleButtons/node2_color.dart | 40 - .../ToggleButtons/node3_multi.dart | 38 - .../UserAccountsDrawerHeader/desc_de_DE.json | 31 - .../UserAccountsDrawerHeader/desc_en_US.json | 31 - .../UserAccountsDrawerHeader/desc_es_ES.json | 31 - .../UserAccountsDrawerHeader/desc_fr_FR.json | 31 - .../UserAccountsDrawerHeader/desc_it_IT.json | 31 - .../UserAccountsDrawerHeader/desc_ja_JP.json | 31 - .../UserAccountsDrawerHeader/desc_ko_KR.json | 31 - .../UserAccountsDrawerHeader/desc_pt_PT.json | 31 - .../UserAccountsDrawerHeader/desc_ru_RU.json | 31 - .../UserAccountsDrawerHeader/desc_zh-CN.json | 31 - .../UserAccountsDrawerHeader/node1_base.dart | 51 - .../UserAccountsDrawerHeader/node2_pro.dart | 59 - .../VerticalDivider/desc_de_DE.json | 31 - .../VerticalDivider/desc_en_US.json | 31 - .../VerticalDivider/desc_es_ES.json | 31 - .../VerticalDivider/desc_fr_FR.json | 31 - .../VerticalDivider/desc_it_IT.json | 31 - .../VerticalDivider/desc_ja_JP.json | 31 - .../VerticalDivider/desc_ko_KR.json | 31 - .../VerticalDivider/desc_pt_PT.json | 31 - .../VerticalDivider/desc_ru_RU.json | 31 - .../VerticalDivider/desc_zh-CN.json | 31 - .../VerticalDivider/node1_base.dart | 27 - .../VerticalDivider/node2_height.dart | 34 - .../Visibility/desc_de_DE.json | 27 - .../Visibility/desc_en_US.json | 27 - .../Visibility/desc_es_ES.json | 27 - .../Visibility/desc_fr_FR.json | 27 - .../Visibility/desc_it_IT.json | 27 - .../Visibility/desc_ja_JP.json | 27 - .../Visibility/desc_ko_KR.json | 27 - .../Visibility/desc_pt_PT.json | 27 - .../Visibility/desc_ru_RU.json | 27 - .../Visibility/desc_zh-CN.json | 27 - .../Visibility/node1_base.dart | 50 - .../Visibility/node2_replacement.dart | 56 - .../lib/exp/MultiChildRenderObjectWidget.dart | 28 - .../widget_system/widgets/lib/exp/Other.dart | 16 - .../widgets/lib/exp/ProxyWidget.dart | 38 - .../exp/SingleChildRenderObjectWidget.dart | 76 - .../widget_system/widgets/lib/exp/Sliver.dart | 37 - .../widgets/lib/exp/StatefulWidget.dart | 204 -- .../widgets/lib/exp/StatelessWidget.dart | 213 -- .../widgets/lib/node_display_map.dart | 516 --- .../widgets/lib/utils/color_utils.dart | 75 - .../widgets/lib/utils/dialog_about.dart | 57 - .../widgets/lib/utils/pather.dart | 25 - .../widget_system/widgets/lib/widgets.dart | 3 - .../widgets/test/widgets_test.dart | 12 - pubspec.lock | 30 +- pubspec.yaml | 5 +- 5269 files changed, 2242 insertions(+), 130674 deletions(-) create mode 100644 assets/article.db create mode 100644 modules/basic_system/storage/lib/src/db_storage/flutter/article_db_store.dart delete mode 100644 modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_bloc.dart delete mode 100644 modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_event.dart delete mode 100644 modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_state.dart create mode 100644 modules/widget_system/widget_module/lib/event/widget_statistics_event.dart delete mode 100644 modules/widget_system/widget_module/lib/views/desk_ui/like_tag.dart create mode 100644 modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_fields_sliver.dart delete mode 100644 modules/widget_system/widget_module/lib/views/mobile/widget_page/mobile_widget_tiled.dart create mode 100644 modules/widget_system/widget_repository/doc/tables_overview.md create mode 100644 modules/widget_system/widget_repository/lib/src/database/dao/widget_statistics_dao.dart create mode 100644 modules/widget_system/widget_repository/lib/src/model/widget_field_model.dart create mode 100644 modules/widget_system/widget_repository/lib/src/model/widget_statistics.dart create mode 100644 modules/widget_system/widget_repository/lib/src/repository/widget_statistics_provider.dart create mode 100644 modules/widget_system/widget_repository/lib/src/repository/widget_statistics_service.dart rename modules/widget_system/{widgets => widget_ui}/.gitignore (91%) rename modules/widget_system/{widgets => widget_ui}/.metadata (76%) rename modules/widget_system/{widgets => widget_ui}/CHANGELOG.md (100%) rename modules/widget_system/{widgets => widget_ui}/LICENSE (100%) rename modules/widget_system/{widgets => widget_ui}/README.md (82%) rename modules/widget_system/{widgets => widget_ui}/analysis_options.yaml (100%) create mode 100644 modules/widget_system/widget_ui/lib/src/bloc/bloc.dart create mode 100644 modules/widget_system/widget_ui/lib/src/bloc/liked_widget_bloc.dart create mode 100644 modules/widget_system/widget_ui/lib/src/view/field/filed.dart create mode 100644 modules/widget_system/widget_ui/lib/src/view/field/widget_fields_dialog.dart create mode 100644 modules/widget_system/widget_ui/lib/src/view/field/widget_fields_page.dart create mode 100644 modules/widget_system/widget_ui/lib/src/view/node_tiled/node_tiled.dart create mode 100644 modules/widget_system/widget_ui/lib/src/view/view.dart create mode 100644 modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_detail_logo.dart rename modules/widget_system/{widget_module/lib/views/desk_ui/widget_panel => widget_ui/lib/src/view/widget_tiled}/widget_id_view.dart (58%) rename modules/widget_system/{widget_module/lib/views/desk_ui/widget_panel/widget_tiled.dart => widget_ui/lib/src/view/widget_tiled/widget_item.dart} (57%) create mode 100644 modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_like_tag.dart create mode 100644 modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_logo.dart create mode 100644 modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_tiled.dart create mode 100644 modules/widget_system/widget_ui/lib/widget_ui.dart rename modules/widget_system/{widgets => widget_ui}/pubspec.yaml (66%) create mode 100644 modules/widget_system/widget_ui/test/widget_ui_test.dart delete mode 100644 modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Actions/Actions_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Actions/Actions_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Align/Align_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Align/Align_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AppBar/AppBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AppBar/AppBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackButton/BackButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackButton/BackButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Badge/Badge_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Badge/Badge_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Banner/Banner_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Banner/Banner_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Baseline/Baseline_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Baseline/Baseline_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Builder/Builder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Builder/Builder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Card/Card_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Card/Card_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Center/Center_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Center/Center_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Chip/Chip_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Chip/Chip_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Column/Column_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Column/Column_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Container/Container_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Container/Container_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DataTable/DataTable_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DataTable/DataTable_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Dialog/Dialog_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Dialog/Dialog_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Directionality/Directionality_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Directionality/Directionality_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Divider/Divider_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Divider/Divider_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Draggable/Draggable_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Draggable/Draggable_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Drawer/Drawer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Drawer/Drawer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/EditableText/EditableText_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/EditableText/EditableText_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Expanded/Expanded_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Expanded/Expanded_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Expansible/Expansible_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Expansible/Expansible_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Flex/Flex_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Flex/Flex_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Flexible/Flexible_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Flexible/Flexible_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Flow/Flow_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Flow/Flow_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Focus/Focus_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Focus/Focus_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Form/Form_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Form/Form_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FormField/FormField_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FormField/FormField_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GridTile/GridTile_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GridTile/GridTile_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GridView/GridView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/GridView/GridView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Hero/Hero_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Hero/Hero_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Icon/Icon_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Icon/Icon_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IconButton/IconButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IconButton/IconButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Image/Image_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Image/Image_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Ink/Ink_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Ink/Ink_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InkWell/InkWell_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InkWell/InkWell_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InputChip/InputChip_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InputChip/InputChip_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListBody/ListBody_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListBody/ListBody_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListTile/ListTile_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListTile/ListTile_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListView/ListView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListView/ListView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Listener/Listener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Listener/Listener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Localizations/Localizations_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Localizations/Localizations_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Material/Material_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Material/Material_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MetaData/MetaData_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MetaData/MetaData_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Navigator/Navigator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Navigator/Navigator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Offstage/Offstage_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Offstage/Offstage_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Opacity/Opacity_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Opacity/Opacity_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Overlay/Overlay_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Overlay/Overlay_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Padding/Padding_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Padding/Padding_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PageView/PageView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PageView/PageView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopScope/PopScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopScope/PopScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Positioned/Positioned_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Positioned/Positioned_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Radio/Radio_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Radio/Radio_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawChip/RawChip_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawChip/RawChip_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawImage/RawImage_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawImage/RawImage_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawView/RawView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawView/RawView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RichText/RichText_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RichText/RichText_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Router/Router_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Router/Router_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Row/Row_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Row/Row_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Semantics/Semantics_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Semantics/Semantics_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Slider/Slider_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Slider/Slider_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverList/SliverList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverList/SliverList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Spacer/Spacer_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Spacer/Spacer_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Stack/Stack_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Stack/Stack_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Stepper/Stepper_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Stepper/Stepper_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Switch/Switch_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Switch/Switch_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Tab/Tab_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Tab/Tab_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabBar/TabBar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabBar/TabBar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Table/Table_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Table/Table_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TableCell/TableCell_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TableCell/TableCell_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Text/Text_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Text/Text_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextButton/TextButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextButton/TextButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextField/TextField_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextField/TextField_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Texture/Texture_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Texture/Texture_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Theme/Theme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Theme/Theme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Title/Title_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Title/Title_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Transform/Transform_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Transform/Transform_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/View/View_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/View/View_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Viewport/Viewport_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Viewport/Viewport_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Visibility/Visibility_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Visibility/Visibility_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Wrap/Wrap_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/Wrap/Wrap_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_en-US.json delete mode 100644 modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_zh-CN.json delete mode 100644 modules/widget_system/widgets/doc/widgets/translation_plan.md delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/node_01.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/node_01.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_01.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_02.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_03.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_04.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_05.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/node_01.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/node_02.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/node2_widget.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/node2_positioned.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node2_alignment.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node3_crossAxisAlignment.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node4_textDirection.dart delete mode 100644 modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node5_verticalDirection.dart delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Other/ErrorWidget/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/node2_perspective.dart delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/node3_magnifier.dart delete mode 100644 modules/widget_system/widgets/lib/Other/ListWheelViewport/node4_opacity.dart delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Other/PerformanceOverlay/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Other/RawImage/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Other/Table/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Directionality/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Expanded/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Flexible/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/IconTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/node1.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/node2_use.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/LayoutId/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/Positioned/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/node2_diy.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TableCell/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/node2_other.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/node1.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/node1_clock.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/node2_bezier.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node2_image.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node3_border.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node4_shape.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node5_line.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node6_flutterLogo.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node1_blur.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node2_color.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node3_matrix.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node2_fit.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node3_expend.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node1_all.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node2_only.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node3_symmetric.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/main.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/node2_save.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/node1_radial.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/node2_linear.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/node1.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/node1.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/matrix4_shower.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node1_skew.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node2_translation.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node3_scale.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node4_rotate.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node5_perspective.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/zz_node_op.dart delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/CustomScrollView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/DecoratedSliver/node1.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_01.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_02.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_03.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverAppBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/node1.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/node1.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/node1.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFillViewport/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverGrid/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverList/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/node1.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOpacity/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPadding/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/node2_curve.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AppBar/node2_tab.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/node2_page.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CarouselView/node2.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Checkbox/node2_tristate.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node2.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node3.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node2.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node3.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/node2_color.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/node2_style.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/node2_diy.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/toly_date_picker.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Dismissible/node2_direction.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DragTarget/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/node2_data.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Draggable/node3_use.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DrawerController/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/node2_style.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node2.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node3.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/EditableText/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/node2_style.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FilledButton/node2.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/node2.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Focus/node3.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Form/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FormField/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Hero/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/node2_fit.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/node3_alignment.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/node4_colorBlendMode.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/node5_repeat.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Image/node6_centerSlice.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Ink/node2_image.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkResponse/node2_color.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InkWell/node2_color.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node2_constrained.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node3_controller.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LicensePage/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Localizations/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Material/node2_shape.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node2_extend.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node3_dark.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Navigator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/node2_style.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Overlay/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/node2_direction.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PageView/node3_controller.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Radio/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/node1_press.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawChip/node2_select.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/node2_shape.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/node2_direction.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scaffold/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollable/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SelectableText/node2_align.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Slider/node2_lable.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Stepper/node2_type.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Switch/node2_image.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TabBarView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextButton/node2_style.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/node2_cursor.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextField/node3_decoration.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TextFormField/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TickerMode/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/Tooltip/node2_decoration.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatefulWidget/YearPicker/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ActionChip/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/node2_type.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/node_1.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/node_2.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Badge/node_3.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Banner/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Builder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/node2_padding.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Card/node2_shape.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node2_select.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node3_dense.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/node2_color.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Chip/node3_delete.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/node2_child.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/node3_alignment.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/node4_decoration.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/node5_transform.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Container/node6_constraints.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/no_node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/node2_use.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DataTable/node2_operation.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DayPicker/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Dialog/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Divider/node2_height.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Drawer/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FilterChip/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlatButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node2_mini.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node3_shape.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/node2_style.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node2_tap.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node3_pan.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridPaper/node2_divisions.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTile/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/node2_direction.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/node3_extend.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/GridView/node4_builder.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Icon/node2_diy.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/IconButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/InputChip/node2_select.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/node2_select.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListTile/node3_dense.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/node2_direction.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/node3_builder.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ListView/node4_separated.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Listener/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/node1_one_btn.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/node2_two_btn.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node2_onLongPress.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node3_shape.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/node2_update.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PageStorage/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Placeholder/node2_fallback.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/node2_adapter.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/node2_dense.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/node2_shape.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SafeArea/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ScrollView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/node2_direction.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Spacer/node2_flex.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node2_select.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node3_dense.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Tab/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabBar/node2_noShadow.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/node1.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/node2.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/node3_decoration.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/node4_textAlign.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/node5_textDirection.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Text/node6_softWrap.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Theme/node2_use.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Title/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node1_single.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node2_color.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node3_multi.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/node2_pro.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/node2_height.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_de_DE.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_en_US.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_es_ES.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_fr_FR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_it_IT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ja_JP.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ko_KR.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_pt_PT.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ru_RU.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_zh-CN.json delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/node1_base.dart delete mode 100644 modules/widget_system/widgets/lib/StatelessWidget/Visibility/node2_replacement.dart delete mode 100644 modules/widget_system/widgets/lib/exp/MultiChildRenderObjectWidget.dart delete mode 100644 modules/widget_system/widgets/lib/exp/Other.dart delete mode 100644 modules/widget_system/widgets/lib/exp/ProxyWidget.dart delete mode 100644 modules/widget_system/widgets/lib/exp/SingleChildRenderObjectWidget.dart delete mode 100644 modules/widget_system/widgets/lib/exp/Sliver.dart delete mode 100644 modules/widget_system/widgets/lib/exp/StatefulWidget.dart delete mode 100644 modules/widget_system/widgets/lib/exp/StatelessWidget.dart delete mode 100644 modules/widget_system/widgets/lib/node_display_map.dart delete mode 100644 modules/widget_system/widgets/lib/utils/color_utils.dart delete mode 100644 modules/widget_system/widgets/lib/utils/dialog_about.dart delete mode 100644 modules/widget_system/widgets/lib/utils/pather.dart delete mode 100644 modules/widget_system/widgets/lib/widgets.dart delete mode 100644 modules/widget_system/widgets/test/widgets_test.dart diff --git a/assets/article.db b/assets/article.db new file mode 100644 index 0000000000000000000000000000000000000000..2d4ee64f0360e76226962db1d93b457a4817b9a3 GIT binary patch literal 147456 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 z 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%0AAn;!b&+ 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 @Y_%Y3Qz?~ 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

  • A`75Zc7|yzJWV8wcOl^5c~1%CgJ^(9t)TwOvTy6K~X^p}q!u!&sLoMqSb&NW}4M z)psGJ}+92&^!nTL(a(up+$vgVX987$sppph9p-`Ll5>OT75l`%JJ6bpe9vZ zv?fys0jLECh>47bbk%W#g%*@U)tLx1O=^b39>i<91qr=pS5McP z_%;$|fw$^kn_Jb-(($VOdofgXz%WhtUhSPI3X2}v|C9292lRwPuJd8S3^Z4bH(CU5 zkhteiB4k2Q-Tpo3e53BXYKqov9EE&6kVa@(+xvUb>itiHX{a+ieANQ&)BK*0CP;mQ zeNMaIk?y=~f1gEvJ)(MuEUxcu7WyYooE0_h-(6m?g@!;}%LS;DM2=*ae5ViC0ee&V zND~~@grZgZcR{B62;;RHGN@n+MRfizE|_01<*&;AapFJX!)SlU9(LiF?f^X4O=D#=tKx} z<#>gnPse+b%(H=Z_;skc9x=r| z^riA~2riDIu5$L!vB=z;)^UOu^L6iB>9#|D61_cLUS}O=FOW8aJ=Sm9*o%|%c;B>g zm7ZLZ8B%@W0`kB`gtAPRQ|&CwdEngVEQl^$Y-Wn4ymj|-smF6K)mniVA83mvGiMMx z5yT<>nUxK(uALM!&i_<7;~|?O4^zY&5Bw~ERMiQfDo#J`JZ?TACVfxqZtw#}+}cO~ zdc;?Sv1%SiHl>x$LJYY(fl;9;jDQC$?e)Z3>rp_J1hr`BIYn06ZB(KWXTDQ2mx|&8 zH$flg@kdpexiv~g{>{nCmSn1uip@no9!I&>-Br$fq*3-i?9(`|6~< zxaUq{-aNx#jw7$&T+T@&L1=9Hb$F8+*nLhS^xfelOh<0~j@3CW^aRG2r-XS2=AHU1 zgK6nVrsBM~>6uzX{1cNkYzbMSP_9QR)$FGYsZ=}UO{bedO9Ojp1y0-QWPc!E9C2<88+W zn${ElpI96nGyjiKWviXP@N=nbiJq3;4s2*W$?Z7Hr;HWKzZ{IMCuB9`YhnD$qgg41 z`C24x9hdmf|I=~)Tsaq7hGyjAn;Vfr)G^!&6N%+(Hkx^YC>cNpH@2|VJhQuSFUP= zD|9Q=OCxX0;tthKeGipT$x9BaO-H6Av53V3>S!gGNkt`lg})8h0RXoHN|PdPt7=}cxpPN@brL{OfpZOiRL?J%6dxfu-vKlG6>{uUO05^#^Fm2Ufzs)K~a8wgZpLL<4nC- zqJtI-6LcaXG02W>@i2u@`1+||=4}I5;C%kyUNE`2bf9>kVEbst|IhK;!I=QULu!)6 zw~tYcx*47v^Hw&cTsTt9E^PmYoFU0bP{Mw$4BctMD~_Kro5LFl-&b(@XR}eTziQ`! zv}P4qpR)6p^$$>`T?@9VvYU|qm7^{+;e+%=CIM;C#x=vqUt0Dx9^5u>ip?91@Ha!W z7Z8&$4x>uguPwCP{A;xjcSOluRtprE{8eRY<0xjGoQ>=h|6*y-Qi^Wimb(n)wD9qi zY)=dw*bA^rXrp~!E9s#2E1KrT|xGY++KOseht1vh;j-P{9x00%p@G4Am1nxSezu*yv= z`Ct?I7JF#9oMj$b%0G}5!7{$3%}nmw_sIf5X89IE>ZUAbP3k1WnZ?y-wGjfNlnO;D z2Vj-{f&)~%OA?IT#L3c9(#L+TRGrl-JhhQ0jTlch6a`B`pwgb2pa^2^@$!3Gam#Xq zm}0Q@tEd21V``X#q+hX@R&;tXRWi37lN4aNQ^~IJa^N)9PTdUs3orMsbR{21wQ<@0 zd6b-DlyIP~PEvfZ(bTRtuJmFDzPFNA_VEY49xGcb{?=BB$@VXZ(3S14a1-m=-$1@q z9a1W1O^1~655V5CF}g9XXSNG5->tINw(zl9#>S4-oYYfMmWP{yk3u zdgI}Eyc>bdJ5`boz%CpazH;nu_nkz5*x&9u)02mC_~rJq?a;4{zV6SYcja^4H9VolgO74 zc}2>F^f5q>kp4=%u>|W<2+`Y@Ldlfd-|Sn20)6eut3Zbyt+ztpO@k|_xBU-RM1B@d zU^u3NsF-x|iu2QFxueHVoTi2wsG&=MLeyLBLWi%*2~-TO=#0t6vKfK^#wU;`F6 zSQ7f94|3eA!;I)YH246<^jQB&j48ZJ0rKm~#f!j^xun}P<`JQ~M2``=@!?+z{lf-i z3Idg!qMaGd+*e%Yr(}@Q9;|gSKQD*Rk01qs1}S#_V`7cITxk{*zz~;K$=`TQd#)TB zFakw{tc8P={h*Gp;a^r{m3IfIY5FnB>h^bm3Tj-U{Jmg;^w$hh@`EjzNfnWEp#&jU zYh-;}-$hu=$sU_9c+ZU~1CW^3j<~SGeGl=M9(x_B_UpF+4HeM9QUb-x*9-EakS0)y zfy{ls=>B<<2#7U6Mk53|K->Te8VdtIN{GDzC3qCR)JT`g(UBB+gKJsfRKg*GMvO0T z=Al~Rq)Tw$0+ZWcHb_|*Htw$n(L#H1lT+xURra+E0n)#uxZd}kTxtnG6=CUJ{S3H5 zp{0Si=6kMbCX%o!NDYDy0PfVqkFR}lhH@fE=794jt{*s-J#ij^mzsl+_(3@6>}VXM z`+SRodQ;#aq@fTFI_sMgO{L!=4*JO;CCOOpA`Q%$a0U{`YcNhyf5Kj;+_7nklZ#>! z8a8uj>C|A;?-~b5Z_sX+?kj>ZY?8ToAAAd(sj45bb<)q9_R1zDc zL>qN3x_Ua4=1T3g^cc-c`jNeZ@g8VtWxT!raIhNc`!Xonr-d5SW`G8|F-?SVD4IQk zl)d6H7uhvl3?D)aIP(ZiBH_c zyi^U!eoJ6<-WxH)vc({k(Di-i16x}73uSeDbFhks*;o;IA#|AQw|4=ib5oMRuFUG- zQ3{87`hX159I{AMB&ar+o67^hTkFpJoFERMrl+KyQaVL-D;uQT4-dO*(Jdi_uO9(I zNJnIn<#XPnht(kvO#vr-c6Ipq*Ck_{uP;?XquAhm=uF*yaP#w_G$PKEUQ*x*e4u-A z;-tHHMtvvrK1c!sZA)M_Y&b=!a;qBOx7@g1N4#r$y1jfe)TUS(=0=1+Lg*k#3N9HD zc}o&R6f;t+Qpj#b37n{3q<B046+@UshMN58dwlDn;ry3txe<&BV zlg~lkj0@A{4G2*itcR}e>h4Wf&XpS<-0>)K80Q}PK~zJ3g`8L^#t}EPR%So#&*WMA zqDTr;S+g{{!0QTAZMj2aUzdn?w3Ty!-* ztMuN+q=HsVuUqcSLGIL%PoD+C^c;&3?9%p?E&L_+Xi8B#_LYwB2T(VS_OUv4`YvGi z+Bdm-%^UUm4AtQYcyv}jyebMyPuE9U#w<+7>Ycf)dST5t12gsAt0Hczpj0%b`v?)Q z6Y2kM>iC7LVn}A-Nk5bjOlY!z@+Q28OsG;tubEu zO*V)4hwS54v_!-c#usWv`N_JTWM`lxF`MV6%H92)$6~$dWE&E1BM^YyWPEJnAb?%vIQv3bQ17iF zF0?ca9E$64JYtddsF+Fpi{Wzh8~qGjKT`5~0sjBi-z^H-#Esn|L~t7c#^93wjY zr@K&_S);GQ_|J6B{s!_{%R)-!n94%R_y@4UUqTtlI6u|~p|{iAxrk5h3Xr0iEL}Cx z1-@s5ToQctw0TB4ozFv_)wo1gBF$qX9Zs}wyb6`ni=$BVk+Cq{$D<-$I@Jpxkf>FU z`=C@q-wSTySUh&~)#J%szC)=&ir4nNb)p|d>8u=Ii`&AEKA(ymVki@Hl;Jp7 zY&1!L$_Cc21exY~Dzv9W6OE)YF6988m>Q2Y%X(kArQHk=|l7n$*^b8)Uof(GJ0;dBKVi#7>LkEMCki+i9mAn zt0cnHhM+{>F%aQtBEr*OE)i(sxFHc_HHZ`>F4@cX{}a|1Onwaix%GF80=Fn|ivqVO zFn$UgpRk9HXy?l6^vMgVs}BUVh4gTsHYW`VYQB;;3zu3uzjnO0a&lNxF@?H=n_~oj z??3W{p4md{-Nex?w4Hn>xcr544s!X6`Uj^&CjA6Z$2tOIZ0=5`7zrDjteoK_3VK7V zdxdCsRRqFAP|T~G1l^e67nD^ewCd{Y<>!aapU9s56wb4<3D3fp>xVv=1;|z^A8k)| zB1n1`f^mlSx#np)*_Tq<#;oiM=Z1d$bMsSMY$tpy0S@HM8bUg#!K3CEp44VtZRp@B z1RR(jV=e5b*i82?9TH)@7n%Td>Z>~piXu-(7#vn{FU6Oyo}Q`?WWtEn<-0z=FvR#E6`qB<52v~G#dpE2|r@p2)33m>M*nei!-EEj3~j#dmhV06>zWap!?oe892#jyhGk3s@XKdHR@QFFpGAwN3iZB21aD_xQP zwMnd>tK&*;u(|(QE(kalh*jr%T@~uD2MM468vuvc96-x-30b*dcUxO6|9M@?xu6bK zXse2FuSH4T{~qybFJIu-*{IssFLwcu!w6*=D#qO7Wb4j)QZO zVG(oWw&29n5k5HhwM*93u50iHuTJHBF|G;jO+Pc6nX)Fs*fvur_W^kkwZqOBVYkF^ z1?WmEN-y%dpg$Rs!>Dwi>S>Pne{ycV-R)n`J}8M;{9DCX_Ccxl`S(F-XN>!xRrp5x zpjFgAxZpl01=T(%J01s*@EZQoaRMkZz>%CQJ_wS}zg77>a>D#^JVO$%#=K(NY%4;k z9Eq%LNBLkweDcvRfyZtYf)&i7(oR{8TDk+S!-xSTcI@TK_y0xTD!~8W`nyGeTND5V zUTW`;ljr378zSv`6T8_&7h`m&WSpvnH+9iwa;ssVklYY{nQk^LoJB}-%66Yyt8$NA z6hTX619Fa(<$Y*HZbj?^0R&{HIkyzo&e@pql=F`u^qqXNk}Zi86Q@(>lH+eH^*HHU zB_*?x&z7eOv56;;Yk+jT9e!bm7iR@cE#1IZhOR7y~bPm4xwij0;%#u* zZl(mhit4&>6j>R9rGeO-udx3XgkGU2BIjDe)pmXst$CZ>m)_^Q*RrZHcbh1I$78#^ z-@IuhbG4pV%p>eOx0Dl+te7baXEV;vkDN(s>7AgUuD zD(Azg*|B`{RTC|IsO4L8+?T1Qe3X#-p_2nUiu|gRwveYj!_wkn7eBHGrdrzC)lsdK zO3JNF%SUBG*RhY@-FXNzph*=X8ATRv8mQQQ=BqLK$RY>2>V;MQr*g2XUMORPJ%ju& z&@iFHp{v9)0q1{tsP66pj++<_7BvqB|K=Nu-5}|N>XjCbTW+%=2DoMUn6L4$Rr6&K z${qw(!40S)(#dm$uxsZf0aHN?pTXteZ9KP<5sf|Vk%w32CGT0BlX@uU0p}vJ@$J73 zsfdK(Ho+4mEqRT=qG;3-2271 z*<&N@f}xRWU|oraoZ6Ips*un29cHhsa%h1f1#ukyR3@v2N^G(Um?|o1sM+W>(Hdes z++m{}nxf0SS{@P5QAL|3ewjCTjdF~i^+y@jN}*-2yuL{=JqpnQ=#l&d+8q5IP90K& z0bk4CQ>A85dzMGgUf+C#(cYRnLnJ0PXi?>aPsW!$0||P!h-OlpD19g4^4qaDK5;2( zV4^F98&^*|kmI6Z9A~9&k@PdwsGdV6Xq`-DRIoQRec?+9w%bUD53AB$M%AO0gfjeY z#i54lk;IMXMG;>5DeK7VXQIvVx9!}ul4scB9Z5_qHS5!r@-l4lGXwC67<pG4D!;cam_BP=CZfyt+gmj|{tHqJiRUFT;XaoBKt*)Gs_K}`m z=R3}O0vA8{){bw(;K`xuS-+d{4W^cE-X)eaKt;J^6;l}%3jFM-JA2UCzDM_H6?DY4 zP?2?^;Hd4GK@lE4Livl2z2j6e6%{$5`x@{Prq21B_eU^F<-EP|W{9ST1)ChMh&wkV zfyK3At-3-oPb&Aw!t9CvxHkb@Y1T)gBse|Z^ZzEDuyqa9AyW*z)kFD>>1`ITiu(le zgF<|hpE5Rt+_sE>wMN-Y{7VS;)N3>vZKJqqyJcZV*;O9wNN$UDp!X~6#mQFBRgM}M zi&QDz+Se891g>#zSFA$n#g6m@KM>J!ny=$Tw<=G%$OKvl>YY*L;lMpnO{hQuwLuv* zYAvr=v&YC=0~;C9L~kd)SJtV5w8B9oY>>Xix>k)8Tb0>=&6|WIx(LrP$gbWm6ykcO zQ8N8G_B5LL({3LS+A-Dvg&=im1#s`YJwbM7?|Uc~zzy_E@9--tJ9kFyj#iQVosb5q zJZ;lkdz!Mm(;7wJYLS^k=?+9kN^z`|6Eb%&$0~uW=6bD@gxgsR0JBchR-5*wyi!zE zc{4lEZ!|-gqDJ%4Y+$YSX02I!HkAB{OHE-TSiRc^vjok`ro&29rW39)=68O~YPEUf zuR^^vKXGZTuz|f;cie0C8Y3L2lCuhKUiRviMTeK?o-lYygoB?zGUNu}laM1z9fH8& zI%NIIltts#BQ|5|KB)=#d`?)TkZ>dkd#f4h0(uUII6}LO0>}tZaj_0V7_#-Q!$mZ~ zGUO6jX&f}UrZr>kZV1uif?FTbP#~{YBA#ku%Ffp4Ip(?IS8p4kb);WQNp^rcLz0kk zvsqn`)rMfF6z()alWwStSOE_isfVDI^)%7D zV%9IpeWJVq^u(K)&^1QC`lnLNTXj)PV~2_J(zSgNAGT3ncf<&0TD>^`f1_Yy!L-3? z#Z$}5|FE>bBtG%uiOVK@Fu^H)yLe5}n}z>ec(SlM@+k`4_^*G*u_q=KL}t(IPxY^i zlzvYSk+cxe*XjtsFoCaxh1!}(b$0+G9r_L;uNV?~8$)|Iz>Ms2ni8o-b;A1p*?Sk@ zsID|kPy+KdP_8OkMbj=WV7Eje62u$%frS8@vN0~e<#IC=ok%Gu8%ZfEQ-DlS))f*Y z42EpUT%$12sk5KS_r8PQ!bB8J z6x4UTJ}xhRMnT={fVB%OA}b8%SOeJ-BIu;d58ru$oJfJfMDjWa#6vPrO{wkJhz@4W*-9M%5D=k~EHsX|Yvt~*73Gl}(7^x=?a!n*sNi>|{s3ZSF zCB#w(oVoEt6LJ$<(62Nh*#uB=2Vrj*cC{3RlTd0N@C+IR`c30~Lm}`*^DJXz%?q&PO-;&wquLo|j4j9v`Q#9B?{2`ae!$q(8C?I({)eFMrxJ zdqx}sO<;)=(FUcBd7}^hOI$pz?O`o!5Oa8c@ zn#d>wyxlLO0m`S2NJn*q?F$mRE7X z;O6Mdih&z46&})|TkZ$;4?12YgnWAUZuD4(6^@iQH6o(^I`?Zw=>39WjnYM7Z4B;gRf*XHHF0SQ>wO<{ne3sV# zd8R@`7(@*Mcnx=AV?6Ms>BIm;fRPd?u^D| z3n8i%#?;q($JyV5tqD5rw13;%bCQyt-0e&~Xi0tDGr(9MZ=Krlb5NPWsjai@CS2b3 zBcI`V}uIAApmHA@X28-9)nM~dd~zF zg$PG$!+13y^%n?_GLFvIaS&*MpY_CO{89H-KD;Q-BA|YBd`H)(*OKspL@Ew$04s=j<>-c$BZ}&C%nZEc5*cq&8`s00lXHFVUN8bM3-K3yO>g<8PyNhNIqP4#6>w*vR zs^8O^(|!vjO?-a}B+q=4w1zVVuhI|p6E1Nr(_Q+*&uQ5AI_W5S@OgjB`P8k8h`5N7 zsYJ7i)Bc0H(nT0Pps+mHPW-JO$W#NB-PuqYp zyiS`9Qt()@85yaXWt~+A>KQl*LPZIGYBf+uc4-y|1`La3;gKd>y;2(kM1+V*Q$>x0 zTMulR@hq~dfw*AMiz?!kJ!k~{3~NdwO=-j;Mw(6xD^gGBX(gg{5rgn*_=3ur*iP-s z&NLukCj24zKQIzg5-KkefAm4ByWOC#v%j127o7dX$^yH>?3=AXUyyTPuyb~wbMHg* zoX}BPlRa>=6=iyFUv(br#evX!`v@pwDtQa+TI$$si6u{s9J_}ybYdL7)8F2KMr1#z zVh_%x4%_K(zj7{}$4QIw!0i50Ut>#T^o3oKI`FA;^8}qa7e9B}+Z7xRcRS~agH_v% zN2oSZ);4pJr`3+aB_hX`8)xtAco7?^U}|f={RTD?FCOFOcRrhhsjl=NO|=pDIst$9 zqR`Y}PAfXl=+Z`vqVFhjj$R+qQIy)-?(F*p#ExKi^-|x7(|tXs-P=_sl3DfkdZEk$L|;Z`_YYm*eAK+TXz!?44xleSA;eMQ!Sx>9=dxa0a_kHr;DU zevbTEWNA$In)xMup{lXz7I8P+rKpUp1ib+wJs zc!@g{C0u%d&OUE(De#beOk}R~V_E zYvbAgb8Ry7C9l|0%NHqG*Myv}21@9_cUpWLxNf=u|1<+sv{G=OnR@4%u?AGxi$l_w z(KpCXztG!T-2JZ07_lt@^$k8Cb=)c>nyILP{Rk8_S&nGh1x;-$C^kF;&5$&sex?Pj zs%Gtgk?D2RAJNUJj zl2V2Pb_0D6?GjLz zLE4z$*F`h^(Zj$PR=@Z?YJS=SpuzkqEMM8TyD#US7Jft}gS-U2>%MC~Tx z3C^s~k7$JUxqtZ{HbsRc&=0>S?qR{a`M~{!L&SZtyI`=ciPl2!7^z&x@d*9cAIv_$ zfg$3rHS`U@T*0#e0|;^w3n-R@tH>UjFe(sxN9rr%)&Sk|cG5u@VV52eEf`NC`h@q2n2n2G$K_NWVe|G-qh8do*vBZAS>~gM??Vz|O&)I)Xm9 zKM*^D;(GeZS~}oi2wA1s;pWd^M#xj1SF&vW&l;k$VUmulCDlA(y>tBAOr4yvOSf(c zH{u>vP9_V8)8Q@Y{VsgdCJ1~HJJHPa;pdjBLB|$|otI5h3{ZAH1iyI~O(77VGB=q7 z>wgRBN$S+0^t~_ASKdW>$`gk})VD``spHrWVz+HX$t#KgeE&RxM zvyon(%*4t`*YC#ObaTmokHQh2}E6CsxW?`igAhig;O6d{x zMLYAm5eM4$KEqIREAT}6P@E;Xr)pZD@QinQR;e z{HuRySO4Mp4nyFd7X-TI@698|^~RRGmhYJzozKFoMUTXe%B_kL`XSR3G~qEQ4ZM6? zFvZTUH7IUW4Dr}-R%|247Pu+~mQR=g#dH;tMNaZ__$^yj-|<^~Ji)%k`Sg8l3s&gd zzt;QUBA0l(vbJRT@LGEeb;XC>yqWmN)|1F9BJ7LZ@mRa!a6Cm<@-5_eBlaQZYjXmLCL>7D`kRLc@CJI z5*v1yU+SJ^3{^{sX%=QaS0|nHxgiW)yGrY1`lRzppNpE2FlSeW2*lR_I~_37>doi{ zE_1anf0SaLm8BoCiONWWpZKz9ZG#}T8j9F@(b*d*o=<2rw0udAkR{11f;q|66OZqJ z>qUecF?`Nt$7z_dOGpAUEf(I3Jobtz61!M*6tw(!B_M}Yq3TR6oQJvAi$n`v_;VOR zSsTgQeQiQ-7r_J%pxIt5Bhr`(@ZdHkv()^UkAMUWHF(i?OLOYV=551Vos^lVG`T67 zfR(9+uLZp(e!rH}pC*RD^rj({rjQX{k7kKD;Ylv(whZ{ur7CyZ@#ea^2rhXQMK!Q# ze49j>h|00p(*k)k@fAtNUQWODO1s5!;jTZ~7z`kF@-{cr{LnC(&NUAR6#XK=y^q`F{8;q3JO>25i8BWhf)OH*Oh)S7>UY$bl;{ZlFrw z?W3Jqf~{ySNo?lLL)hE?54-f(8Eta~L<+w9T2_Xfm<$EB)tZv__mC@p%4kP~{Km&z|4*%Q1N)*0xS5$nRbksc)jRC$-}ERIZF*S7JYt zbw(LH3)a@dz!Sb7m4d-rVAugWEoI70)>dRl4cT%SwpN=n+IxladytI^{0PV%q^hZ2 z*;&W1v3DREh-;3BXv=ySUNh@R{oJOw{dn8!G-i9Zl}C^C_I#9UFk(Rts}C}G zId}m!a?a^bVC>;q?(V;rIzguA*>i^l%G)(_E9&jZZJRKjS$1Ho|oyUTj4Y6(I)EZ`(FvL{HnVV?@qp@Alq%FLnNM`ud0Lo$x-a z1%2a5ox7Yqa?9yF>D=se?woLLbUW8?|4oaXzINZawBNbD4{~4pgyp((^;F;8PgBS5 zr>-CGy?=o^$<<)7h2k_z)fnVw}XQW!gUj}yt_}Rk+#Jo_3c6`gL6I0i1VRDXv zk~G_39b7ywKIjTBH0%(G&BU2q*AS~mby`|56y$}0;~R^|Oru&v@^VC3_~;oJ+9TNf4-q|O~pojk2An4#bMJ8Q`yIdzEms^^Jo37gvVs0d44`;2A^NtYDanUBkAO z(03A~$TnMhFTp8}?Yup-Mvq@LWS|^}lTwuM35l>6da(NsYlK}q-O1*PG3{IyPLRRB_n}yw;QVcDs$fqafjCZ)*iKNjhDb%U zs+q`^p;zt|%j^O}!kXJ&W)k)?hAyy`>FX)?e{>{u;VyvceM!dA$FIXk)VcLB8Jl)~ z1-}FNPUhP^@1;IyLm9%*!~228LcP*^52sF({WWk{DEiE{pJOjAZk=3Eru(zX8XB+% znN)*gq&w?e-2Ec8?v^IcfUtooSug7f6n3Ygwuz5X<$^~@99I+{5|TtjQ5+~5*|43m z8q~riqzP)rVwgzQMG&8Yz8VPaY+H*#&bC*(gLJx&dp5KDqCI}`+rI8A0zaDm;dbZf z=jmH847~~Oq*U@K4n5Fvpe>k9BI?(#rax&>PcD7~uw>xXpSHb(#VKi>T99|a0LWk# zfd}RY;Gl(!#Twaj&J+}MGk6vcS^B6{NaEe-8b(YeF?)UA29TN?01l8%SnCV^C?e{C zk^SSg7kP{3W28bB1JQ_S8$s&Bea^l!z1`h?2R;R)`s{D|uePQx+=kh*5JkZo5AC~| zx^)wf>bu$Fd_V_cf7jQ}y_=o_ia7cqSlYG*=h^hv3-WKT)6pWW%pF;YokGzmdDB$G zKwpviMQy98@>*|Y16-j%v@ee1^uE%6;;f+tMQy79i`lJD7v$f1B^KM>)Uc97bL1OR z2CH;>08xZ`LI+nPG}GY8z~SM*f@d^P7N+eMWpIP(4Y4sU35I`%xNVpgc0_TW0~K)n zCx<@O0c0~ZG1wj`p0U!}M#lc|z)&3vY2DFQPD8cJvW5yqCUxLG_iQpPBgl+KEWv-FgX&R{vlm-gweH$mgJ215A98LD#dmz^6;5nUZhe3Lz&D4ox z>H~wRtuxwQ!16C{n^2HHb1lJ9CJV0jZJzaO;yX&7JlQY7GsR;~jTMSZh&OFZfT6bP zp(_V_<>lYZRRlN>-z45=m5~PAU&z0R7Bb_$BhDatui-?{1EAHRu~dU4N55>HZxBV6 zJ4$CL#YKg49GE-AcZncp2@1oVDU4l#44S;V!01Hl@ItS*n9svZ-n6F{vb=2tfHb`| z0w6hO?)9H;cMhKN)P-Z|gRNw@E*`S_ZTg$GRQFLj0=iE)aNf9oF8$5P%t>0p z8)6yFSw=I3`x@A5=hm0~XZB&;3_n7xwSTLphBfz0&FO3$W${MZb94g zn8w1^c?J2iNPuafdGp*@ z>txD^cnpKFY{;rKD8q*DW{xIOVKqpPt^?wisz~F?2yV9iXqqH|Hem!a0tk9kkYv|L zGP_bMqs#)YaJ&xI_PFwuBD>wSbI!%%{U`RPzWmDh_@p+5px#Iz$Z``XGW1u^NT~>4 zos8~1+b>0~P!z3pBVVS16wE$70W}Jxn~Gtt!n-5PZOQD}Tf7tSM%qUt5_biQ5SvK) zLZ@EgJxZxDc%M>l{z!lO-9AK%%j5bjaaE1$n&9y{)v;?FSZr; zb1)SVH;^J!0Byh83z=m8*aP$aa5k1${|sSM`6~RQZ7AP%^2MYY#9qp=lRUf4vyU!) z+IQp-`{dt9pFZO5BR2VHVtG0?k2>)-?mL$1aL*;s6z>d z`V_R@eXkYiaL+LT>c|t<{4f~fHOyll54J+``dBIhH9GD+4FHy&U*1HqlFh|$j6s!s z)i-lrThIzE2peori9LD>9wY^)|Kq%8^CtgbQqjZ(6aLfq|8d-xWB*~y|2t;S=<-o# zMooY0;K=`bWX*{GJmP2hO?g*Q(DPTHoIfsa#EfZm2mzJf2`L~{-NL$25Cjez!CGD& zH%Cc4MAOI;NUowowLx#2`Zg(wJBpE@W9gYdW25a=$$1mItQam+jt$U>m>iO6J$qCCL!xF?XRo*`AO;F27R+ z6<&>TG?Oa~^)5mh^9Y9&1aq8{!KyW2WII&mkOP>XVBIafLxYX3tB`#h_ksMpP)s9^uWVJ$021|B32njcpC_UbwoxJ{{dh=zg;!8odfLKj*-s>AV@y*@?2%1l$K@ZX1XF_n zg^|#^mJmx~m=T6y^HS_j(&DgkodnBRK#vZGTb7zSmQ0*hjRIgDXh9SzZA@c2*kXCD zE{u+=Ia!3jEKg6_zCC|j6-*ZzRz_+Nw$;OEdLpdv0_7*eYR#7#hNB@d}9w61oyVLi977JBT+NK&6#YEdOO41ICUOBFz^r zg+xRM!4m}IP+w0Mv{1D3-fvSHrgsl3X?b#=bKpzZ6N%mf1w=iEb^B54lH{Kva?o?r zTBo;8#y~mOE$+oH8LQ=WEF%!}Qv^#y#9eTLAYD2vqyZeQInOYZtC2mH+pLm3K-oYl zH=c;D#_{oBA^}mkIdwwT?iZjD(Y<3m^w&olh;ylfQ2gRP=h!FCnXd^ZH@D=;kI_;AMF!ej=p!SRP=vvaGhCH=y-W77E_g z^G{VGi^{IUf4jobv z=p-$aw2C6Tv>^no2t8sxhnNW%{)mdEg1wp%5hhF)6Y<$0I2m7$5EZ3M#f z-tK@&L+a2MV%Xp$Pl?$qE!@S!fyH2t5Fm!aMo5PN^daG~ucjce>wBTejYe7m5Un;CFeapo8jLT} z%p=kp@8I`Xz!or>f+4^M3cY#lj=^d#!O0>o6I(YVE#Bg-Z?sMaT->QV0zuBKJQ(Oi z5X8-Y#_&1h0i5Rhm>uGm#H1nAVJ!?cK;HCr8zfc89wdk#9c6dB5UEdgUf&mA^ol7U zh16~#PC$NkoN(Irf{`2;#*f>L$>{{u8Ftvl#ivSbZX>fcUj}*7W!4wK^2JFGchQ?i zG!>yu_GqY;-II_P&=%}1xn`MT-G5X~uq%^4Wn8k~uo0zI&w4{_=SvZa!!)FArUqgv zD_r7+^m(DmeCOGEI`PgH0TJaG@XvF+U7LIo^PB^tY`eraPtaCGeO4?Ui&S8|!7=D1 zkk5+ehqmAt7&j@C&$J*kH#sjH26r^N&{gew=Pf3J+N!H{9Q*%ISel3bhW~~kFbsiV z2n<7D7y`o(7>2+w1co6n41r(>99UCKCNu9%czMuP4TH8tD_Q;>!tAVsCm&h(__eqh z%4J9`aLE>v8C_xM77Sbc4dhZt2b9XvMF*7ePvBX938jFROD6(Es7XJ!fZ{rm!Ie*a z4g&|ulgMEt29ChE0cp1@zJSYrxx0 zaLbU9>c&H1GQWUqD_S9=A%$^pq)S)r9uV+CLIJ2aiCW)GZIz2)G$Ygk%ZMq6^Za@9 zLrY4QdB*C-RvuC$?FBy5L)hC%-sb>dxTDhweWMpANGoLUPl!V-BPEP)8YGNneM&~C zh^&B+90YQSH->-;*J#$tL~1k!B?LPi9x`AO4-eR=D*=;sxKpO7D*yi}dFS#bJ(w7N ze8YrakN>aZ{?oW$kNtG)!ZDwX{;#9o81=u6`qg8<9QmI|mW^1He=C0$ivIro>=Ezg zL4R8~Ef&ikoA(cJhoR`DI;_>`(dH;Y!E1NJ7tq6R{|8o%I$!K6OBg(8Y?(Jj0#gIfVnfDJ~HRJDIF*&w% z+_62d1b_x&oV}SqQdJuZCthMlNo;(?)Qx+US5P?C$3$ic5U@7L!+qsiKL2ha|2^$T5kmH!|!5}astC7LrNOq;sJC5zf(56g{L3^F| z58GmuFaV_OvB_2KxT-CafioL&q_(oMACo7QQDPb04S+Jr{_U~1fguZDx6AC8dDD21 zgJU>F8Z%MBhd-)JnT}G%;!rpyDvcCr*Psd|A5KgF#$6Q=l|EDuLU4f{uHse^LQzx$ zE0HI(+1gA{*fLui1ANft^mG$0@Or96zOoPL&7h8hSFtK@A$1J&im z{~%ciuE1df*!F}oyM(;MgG)40|Ii5D>k#*7NB2%P>7^0YPYR#B($|I6EM|>8pxh^ zLnIDQOZ<>8I@ry#o1R}m-(g$D&2tUHqN&I>IhF7RNeHn_@4v3t&O@*D9-& zAE^OvInXKT?6znvLd_6`kf~eoW}H5Cd_K5YTv0_eMR6ctEkY1N21+FE)tg(vhf6bg|5Cw)c47{rm zREQ}82BfUvWGb-Xj6{e8oAJOamh1YC*$50UzLS--0V@B_-`N!S@$ex~pQ|e97 zfiz`D#{s;CGDLad<~gD3Vci68UOXY+-e>}FtcUw3f<)BCaA%YN59*Xw&4D(fJ;5^C z1yo+jVI~bt@ftSx#47Mh-F^spB2y=CNbm;A@OR{s{uUd^?_9r|PJRY5DtWTVD_1{p zIuF7_7qtL*sBRGr0=~b}f+9)X$J5turI4eIlU)G@liohofF)3zQu_DHDNVE+j>WJ7 zWmD{G`x#jQjzO}4D8=gyFcyeximk4P162lb2ISn8FyLmdHvw%ESBBXqdsYcbD-cJx zJ$F4Qz=vn?DzF)#mS^~9!0^o1spFI(3@|73*I+lWC64LtiPU>XQU@xlOAuKaI7A4erB#+Cs-G&f008FB_eCZewAk*=YPrGMsm+Ld&vf2ib8%sLX6z` zG?ZXQFdd^3+8kE9PjBWX5rBzlICfDL(!F`QUvulN{DziD&z>;$y&N|q1Q0gfaL-3Z$j&z9jgO4-dNiDOzTKS0a|-=6ozXN zP>N3Ha4mVz>03qMLv>P#X^}aZ;T_J=0pZ6-x^vl#+ak@(KLARuX$8TI%_}J9J)2jA zRq;5SLkOnimd?SPC@v9gYP2kaqo!p=h{7T)0C}i0Du$GSGw(P87-#nu+#pj54LRA8 z{dR|QglvxGXZrA7F`dh0mC=9k4#GMR*LCS6?RsG~?jpe1yMXTa*5{7Z(gs`FI?E>h zJIzB1gkIo7A4vb@fU#EtQ1t)#ALZe{;lDpj2%LS>PLL1Xop~Agh=!bcXfPt^?=A5V z8=v^4xPfA54)>|^4soTSi=tWf>`yzyEj={r5SQZGSu*MDadA2Si~{@IEuvhJP+41* zpM*>iLb$?sWA(O8u~%^DhZ`k%6pKe;UZl#v8?Bi_BSwq>n#U<`b>^REMf&~xW|0cd z4=pHJu%y_UA6iA&x_NHIwyEo#{J3Abt0(H0S-O6*!SrFf(PQIxbi zeK6BmxO^eaV(F6Q^ii^mK1>&QvTzZKU9x0Z#`^_J848ORF5>zNd3<_^dh}`% z>LY6ko^gWPz)6@G!W8DBIqrvtZ7o==1B2tYeuuBV=Tx5F1wE&S)FeJ>Jr$IFL!@xU zbmbX5oTV?c%>OAo;eN87N%#J8QivNdV-oE5jth~wwnO|flu^wurvJ?aN}D`&^NUM@ z9?Ij4l2jR`J!1mgyhGv)^N%nhlfg-k#`8cP`5u^2$a2wm*zB0}4%&^dA*(x}2x3pxj0T(y}Cc?NjSpZcLd8c*emeryN|-k9(DC2vi<;7|Qf zupLk3i+=1QU8RtSkRFi?BNc7(zJD=XR~I&F42+lP-KN+^P`|=}s^0hBs+69PVDX45 zyumH?0@I9qRj%5`AK08#nmO`k1?aR0j3R#!xoSpD z(ru}91WMUyq87-gJTX2v@d2khSQaw=*Gkpq%OGi{#^JsVP&jR*@oQDc&Tzm##)Mj8 zU;_d48~Vhxt_UY1JY;<*t4XctmSxO@+z$AOt-dKMJUY}22)fYB#WFfk;kT)p2}VNd z+&9=rxzt)?zK6EOYAcJS7ji^KXX^Yj1KERUk8sb*n5El=K-cZaKVNBPFrD*6;vw4M zSwrx*sdmMSkOnn1MphwcTLol3M#Zg19;@FJMn(%sMd0;X2B!F-4?y`GsHFvk5Pqc6 zjnijt1Pji7v8+5kCHxyP;P|uohA?#KVV;b>k3pwG! zG8v7A4n=pM;V61S-cKQ@8yX`;McfX%PIJry(qo0{5g!t87Z152V1C?8 zRn?lMYnH7k)9AoW;2(;E6x~HZIFPg!|Ee$>aWH@tHJOEJI$&+pA>oT8=5iUHcr4P1 zxI>p(uXDsx@RmF;ah>(R%3F9N_%7Q0l%t5ghw2f)K4X$PD9+$>7%lgu-=O|7CkSCF zOh$Hr^2`(st%@ITw8JW*%y6^a@J%vYs<2Vg=ukcWTI3p&l`QmiX;2pt+(>Ba!(vJ) z_Bu8=HzXR^uvZh3gBEr^!30Yq+ zu{$D_&ocRV9;4S!iV->ji435eGw&Km1sgYeQ4t}|;bc$%p?0h5Da}Et#V_b9PUnVl ze0s>g+H%>PN^TCtMa~6=113nRrnIY=8HwjzIqk$oxC#4n#0s3TALL~M@waeRnZk*9 z5e&%0-wq~oi+#O%S|_Cn!9B#+1D~au^kC-XVd&qEG{&;_0x1f3@i!89}l* zAIeCZl6X;wevB6eETMcswC`GkZ>Ud{C5og0MG~c^{Hqp^8^A)>`M{=K9U|%-P}I-cQPn+Jr3g^vh(Z7?({rwc9xhRnQPNKu zyuaM<`kUEXUUrcVX9CZ_oT4nofIDl22Y|dBQb&;n0*>dYdzRxNL7Q>Zau;j2EP+m| ztY%HoqeJeRsi&kih9w9EY`|+;r@$991b*>5%h9~He)}76G&Y##yY0BcUJ=4|qqc|! zs+Y!Wa_mj=_V?{Ev%3UHo;?g5!*|$JAAR`_)#n|v3|M3v(%MkP%JKNU__2l}qGS^<}?~Y1X zR#_ZZN`76G!N8LX>sI17=RLKX;2y#~y*jeT!=*|K?s~{?fw*C@)OEs7o~b0};mBgitfy$ zyH((<19QK^Dn#bnLgYU$bS{5YxW~0)*R|+V*|ZB_U1p?$#2hAw9}64;#*?``0SV@O zwe$srI(F;oZ-yQcE(x_V0}?5y`%{aW%@YL{|F}Kz2?r9dP=C}peXgx1IVG(Km@Tz5 zie|CUy#?CH@RWbUrl;p;?W6zKj9bS|I7HL0*yza@VJivO|_SF7LihEg?qbufa+NoGnfpF%@0~u96Z@ zl*f?Jv|2^FrCrI!L2))jhxuAHFMb}CguuLttpR}jLNN|yuD$0!4gDwqcxP;2LX$f#XN8)`77TOubTHeL|x| z#y}2kDB)%>QUuawFlG#73!Bn+UQV5F!xY}>DgywgmhW7P@h=?I_?49{jEEHc2)Hs! zq@j~pQ$Q;iAJc6e;Q+7QaA50v^ft1w_3!U+Ixk>!u4$~*^#Vf2EuUgPiQsy9|2kZ| zGu#|s%bBVW4H8=bB4eM$Bdt?hy#PpvluH&GtS!IeX{)8gK%_;Kq?k`+9SRqKqaPza zBJzPquqM5}SZcCaf@SFStG##JY=S$xRuGy^-5Ca&{p%QsQ4`Ig!lxCjY7CnklA`+0 z90pmml8cr&1BE1gp}$vEz-gg$Vu*N!btDuU-Ss@6^W+qJOl<795#uP_c>?T|*8()N zGXj21v=S;uj4W2iFd;u09i4?uQU%2=nXy2mw+G40j#2OJ2o-mld?zUI*3tASLiW~i zUC#m8pIm6aV{gGw#`-sSIeBX7T^$hX1neC9_6Sa{qx>?s9+y>y8-ULuIt=L+C8~=4 zh4I6*O$Gf_p}D9t8~}=7V7}6PP^6)ubu3%T*uANEp&BimE5}m@kejU4p565~S+xKL!Pkr?QFpAviEWR2e7X zELm3TF34Q)*gdjk{^n5n`U#3pdg^PzB$xy{JR$#AQ{T^agsR% z<;lXCO_AjkM^T!6Z~%wa@m)&+hS_sk^X)gs0t_--$o*IIdzgE18(C}p3>kSb~ z#|f}QOonw%OrRyxdw2&y!%_zsB4Gsd$vXguqH_KWMc_)iwtjt6Vm1>A;UkW)>$7|^ZN3d0{Kr0|_sf}ZrfuVH;pTkvi-LV`N&w-7Ux=mDGS(vFo28?LvT11ELl)5n3f*$a8tAV^ess)U% z1S!BjOfHcKFNUnngyZ_CBkOW~-jg{v8Fm8{y|*v*eSST4s|VSZVdgABKM69^yB1=J z=1#R|!098eha8#6ZhwtB;N68XN4}yzx}+Rd9QlqHP&c#m}Ag zc3L*R0g3nrH%BE1-?A8HP5}w*OoH$OC z1cG6LXz<7g;b^Z(BZP8DVa7QeI5lDg^!9{n>b3HS!!1yy4vntgSV+d_oFCU;h?3QT za#qzM10X(0?hek7@@E3inNn@82`lHimE_(>rC4i8bgJ(XC6WVAX51K3hYs}Ky$u6? z1)$?MQ|FKNcApU{hJ=|&t&A-Qs$^kQ#OtbU%kFLZ{Q>a|An-oek63cbd+TtwbN)Q= zfVk=l`<(};dVAV&%vqU3BrgLVqXjz9cjmU!{uOGCu#3A&ur`HL>_U4o+?*EpX7;e9 zL19pEfgU@0k+-8Q?{(wx3SxkylFA{Z1wpnu;PIqABnaKd zcFhO67fiD!)*+Jg0!9%z23LSNQyjE94VeogWRa7&5ezu|Gr*?EbxM&Wy$?dNJc7L7 z5u5{`f~Azp6QE9kcds7xo|(4QH4kG^*MJeD{}8VM_Tyb4jB(mLdsGA*@Mv`rFz1-I z>Lnh+9Cbnwd|ZsGr-_te1R45@e=$53BR>|dzoj$Pbp)6S;K_l6_2c+|BY&QU|AzmD zAutSqM~1-Z1$La=G`yzEe zX*ihhLrR#Np`99}Vu@*grfzR7>CM)#QF)}&ry62Wu)Kkdj$16WjTTo6-dXx?35cL9 zmoGk@4FvrJz&G{VH#6R9P~pA)>MNnOJJJ(RLZ$PuGAtdvCB5IpT8whV#f`POt7$T# zeVUS53SSMfdd`4&PVHQ#CN^h5n$7B6&@4b$m;p?BrKX8Xj6aYNz0-eL!GrV*`s6@D zuECi1l^ZQ6aJ6(%Pt2l)zKBG+0DY?HM1{Lb3#~bN`AvwTviO?lF3c~>HcL10@YqB$ zL~NrSK9eSCz`Mxu0CxN+G9R5Vpb1Qczz1~Wm@uXC*4Abt<*?M)=*Rw$D7aT;ksX0tyCyE`NZ`p8db&ypd*t`~c{^SIfK!)*O)pbeJr) zW8ocSPt5NO+y4s~^>N8u%CP-E1LaX188oIFmPqOUM~n>Rjhl;qhW~~kFbshKAaH2+ z-Z$xve=45$-zJV9bm-r~CNy3?Z^2OW&}%=kO_WE=ND-CI_NuI$#({VHoOK`dj-Ru^ z?7O~ZXtw686MXd_xOj#LAZK9}N0`m;a0iS*7=goB*e00ZVYpBVqAJ2bK3c6U@zpa)l1!i?gF*Tv^S-TQF|q?1 zN|@w>e zV7tK6px2_=yJd;J_2s+4W2POJoUGvsr*$a@W==h`nV>xI{)3@VWIPv1H+6~(B z$1^9|l)iN-_5U>Bp@I^qz+EG_zWdfJqp*f(&cn*f)5@LiVVo`QV5BrHwOsy}kD`nj z$zWx`SPQfo9D2kpXBzgnN6rkBt7Lp0cNw3D5Y^#Eqzq}~Q*7pJ-x^9wU^nnzg|Odh zKPMvL+RZph^?~H}so*0Am?R-Dr<+8^0%mH6ysPgvs-GIZnQ+~A-uZftw3k=>-(PWTJ>* zAuF2_3B$O8Ve~C;wNk1aS>43>r~4tY7{#jDT3R0=3>bkgpG$EN1Q@@ zxK3o=N)I`arKoS8f#LzIIEW^8G9nh3o zSg&q%{*|VVvY-6(T`)g&q!sf&`5u?d-*D+u{@+7dwCokieBx4_%oTM@5*^ASL2?$! zAw?8OpG~l5Sj`6X{L0<3uBCmc<%>?G4c|*u6HGUa{8c;@Gd6P(2hxClE=leb&!6iS zMbiqTh5_FFRF?h*xKPn+&2r?h`cS)vLOCINI!5S+F||N{-filFN#4o7+>r8D^|a^Jh_L zaj_LzoNG2xjclnlAd^ZHhPuF92;C;>+m_%af}UnR<26uWM>zDB#2j&p4S@QZfzy8D znn7hAO}*5>jVMc|msIe>k_EU;8dxEx2suyCX%vLTh_DFJsAg3?ihVwVgHK@Zr9R^d zPf;PZlK+hgMCMKwk#B3kkGTj`ROlei`A0`m9k==p-09n!^u&)4Z%YaQ!)7jJ?0o69 zA7lRliZ6uyZl>Bm>4h?*W4WO&%6;sXPb~n3wKlRVO6)he4kLi1_b0K^8rYD!&_onJ zqvzv+8^;~0jZ^^@5mJ~OR&Y(ActEp@!SktP@AvPdZ=G|S1g^u8IL=0k%r=-`AzTx% z65(A`nQZNET}z!vA~S+p*`1)W6b#V8XK<($lr})PQv*Cg_JO1;?n>%!J`R$VG{Qzg z$mm}+qTm5n7Lxr2Fkcxw&>r6i3BNSZS$6EgfhItY;$YK=|K>nqzRDnrJ``Zy!&gF2 zjoLB3}p*4U<7pY)QAcK52(m*PGSL z$I>9^ZzE;9VI4HL>bVTbd-_)ac?0Rh(Xgj9;!@P(Di>zJ;}xRulk^&FJe$M#7;xPl z2ift|@lR0IXCb5)V9+Q(g^;0$0+ksqZ+ir3-G3Q|Jr{ytJ`03@zDNrC8#ZzdIQSwK zcC5-^2ZtY(r*ysLFmrXdnfXTVZ7lF|?;@+vK98w>Vu1BK51&*@a*vNN=3Ju~!=QkM!-DxfS*HoA$3U((=|= zLCnAx>8G0-Ha0a@QCLI`=4f0!c?}j~V2BtfCZHMew$o#Z0Em39JPk6wKp_G>(`|tw zo#CL8b;yWL(C3oEY*5)v6qPPgRfV92$b|)o7lOa|yVdp`#a1H@n85dB-yzGe-rj=A zt!{lY*W}DJPRRgMxgC0?(+rS`wVl-BN>Q&7J$j5PGJJ`_2`UA}0=_DG`!JCIx^Ln2oy$BW@E zL0rb{70A*`pgL3}l-pg$I+9lC30fiLiG`?JYOTelQ`L(jtXAZ0Y)t~;M){GeY-JQd zPQlD zJ9YL8gO9vOX6X!mNx-V1tr)_8Id*5?m7cyM`vaiiTdmaLOU{u)!38z!JxkU9c~|f4 zBhJ}*)hu4ry6HR}pDQlHN0+ zF$7R83U8^_m+U{oqHJzkTu`@`LJL+lnc$u7BH^rY?H5-X<9Y4JC>9 zN2)wB$>r;iRPse z8|n}`#}SRS9tP~qK`n07F9+WyQ{2{>_M1eW_Usxs}2_bM4Ve+dJ{s|%Ao^$PvbY>bQ6b+ou0Hh#b zBF?3+5w>!W6XC^avVVzrl-aWjwr8vjLDG^dHwI_eb3hDN;94BIiu~iHH{F!lZxy6V zl(O`V&Ir8-48Yy?>*)76dwIe3^n>GI+fs*_EA*cW-d=I=^tIk`_V;KCM{N$+bN`2D zg@$^27a~|@Z$kHPw9P5_i;QWT)qFL)BZ?5+8c&WYQvse6X(wHtf|~cOWF4Xp*Ahoi zYOUk11C&i5l@7>ZHJ1k2l-Rc}%b3}AHkROao_U&kpiP*i;i&9FFGwpSe`p6~jbge7eHmN7$NJ%~nsEcV|%(2DlZTL*b(;t`0Skp~8%qh=(*saxkhiiaxbE@Aox zmjn@5bv1ZJ*qa9Aa#eng{NbzR3cLdyLyg23Z}s=t#)^@;g_$9(icy#Q6xkdZ!c?Rb zRVy?Mcs>2DC#1{b5n^Ha)3gO7N1FSbPcdT;S_t~Zd>@e+(KZG6TF4n({4JN@?_&#pb*%GJ4 zx1-4W#a}3gCw#O%s71GM2-YMu>q$bLXfA^JeTL@&Xa4nfBq3-r>MiivmN$m@q3mQqL`lQ2dyC!dc%P_f_N8Je|o=>9)qL`B~C!}w?TZx{mKKLn0G-TE7{ z+r6-M@enw$L4`*myWNFD4Vfpr9lM;17M8eVvh?%Q!9ZdjQ0o!wbpu*qiXFh~*XrwpVYGf#T0S(B{?NiKkGSt1(`|NNH+U{wMC~mtBjHrUNa}2k>t0O&xq<1$3p37 zAepa48ahh%8k*^A6KW!|qp4%NjBQ93wB4dqQSrD{N7?-vP>s}_Fdt}Cg?ISA~y^>6z&?6wGACv_3iFkv`R zv7PxlV&qjNzL#qwI5ao7kFri2*aBIgPJ#41$A*6?eAcow0Z&O|Z_2Z_HsS3?S_lqT zO*%O^4#GvO!soUIb)C02jFYdPe)iHE%}~xdDW&~gr9=4@GU4481~rV^H-(^c{Vb`y zIP%!(D=!(d_$FnR3CF7Wo>juAWJ-DB=4Yrjp>xj5$iq#E7<15wBNDESd;4<7`*7oI zcdeB1Ez(qxZL;Of8=%uUFlNhRG%s87Mlrw-*=6{R?M>PiMOIdf&I#Xiz+4 zlt4GmzHd-J-E$Ki{M}tUec-y&ebV{TPQi#Q*+PvT__FuT`MO_nrIK=+zg8P|LaXC9o1d zkvGvfdmed?F=!vmkqH^q2xUG$gmP$(kn_x${)>bZ@-uz=aJqYcs^=myCsJD{k;j^< zAb~UrGrvak*r%Qtvhd!&oy}1~XQer9bHo<%9EMqJlLUNlY23rPrXg}nQap=W%E>9^ zU~9aRGrIr(B>%O%$?-{lIjL#Vl!^a#;=YNmPMrMsya^-5?-+M`TxjgRG5`DM|33Qc z=#o+U9_t)=cf?mC{umX8{{kUkuSvohWyGx3>VmxFn`EH*8rxQvdCZp(W)-I_+5ghz zq#1?c#rm=Y18H&|twVA#*j|SbvH{^a>MJ54Yb}0KOmSrW=2XwkRGF?dP<};VEDhUY zNmDE>lNX$Hf=dz=K_AH18Y+gHTqXF@iU@-7#Vt-Vs|JH>QUok#A|&Q{Q)Z-q^#KIJjSQ$t%A<>$smhrR0BPeb0S~gI0y6O^63xPB8+K?6 zXr<=E{gcCh3zvr58?Oyjq5TGB5;Esf-tC<d3pOMzpq*kCyvMyzRaJz`4|h zJh;x)Ps!32E6vu|#qcOee|xa+#9?w2;R@;fpW!@!HLb7!DV&cuvN(q{rA_a?5+zAD;Cn1L;}ErQiW8ueW;0jsZ8d#y0J4%2?RwGh)*ww#APP9;ABxO;E6&?25V z+<)#v+9qcYcmW`bD_kJb4EJCB2E|khr@rmI`+oY$$6!{(r-v4K-&fAH_r(-iipdUz zl`Z%J7$pNE`Yv8eU%S-b(&Fszre!-jS?~_ALcW3|Emh{Iqfobn2@JuQOBPS;6f74>8uU}1n(t`4B6tyNQ645H6iMp_R=#h_B znD=X>25tlZgefG%67>-qKV+3btc&~=;BTswGa~`Ep)s}t4y~No|6q#8?s0gF1n#NiNtD4IpcrRP`WkI;`HibB z0jT3b@4XI#QsiKS>m@@C>`3q3yC~Cl{H7j_DJbm3?BpsU0d3O@@;6bO<%U>e!Ug1} z<_2}1GqDHCsYwD(I#an20+n~2HYdF(2AY8j;6P>cjNsvltqBuxT-CyL%1^5S0`#fG;r$Il5sop0h)&+ZUg6!VPN=B@?$m=5JNKL>@my0_%4B{=fi-0fLLJ5@v3a5a$Dj8p2f*Bs$P~=-Dz)g?w+@#uthUv8mxEon&bBxqk%~^t%7_NA3NW zZTCt22zLl*pg?!WH4QFei>4* zSrImdlZ^7`$>%W2DetJ}ox3L>9ZKE)GIjnvCwW8g1u(LFRmp{cR+fw5sMmwF=O&*8 zEt%Uow_w&U$=e&Op0z4Ubg0q%rU?G{jcZm-w4w&wV7phFLO<(B`;c*Evr2=F8K@wJjbps znAP|BN%DeB?t}CS{tX#Fg(+8;Cw9aE@;le=$u8*o@>E~XK0cBU_TD~(^@V$6?}Lje z`#M#W-3U^cJe9uq2_Q#9Fgj)<4Ig zGPd)bywkr6Gm`~Nh8P}B%uGboydk`^ye8VUuM&t+7ST`0?( zB)f=z@Xz`RC=(J+p0YKrLmPPWs`y5!Zg|WZ=Lle?G>=+;F7Pvwdff$-x%#US+$(QG z9iz&1FbsjQE%KPnaxNp~%9*3I$6A5nyeA?QFbYf|nc?$?Kirfai@$`Z1tj?uTjQ41 zHq?ZR7AdS0kxJ7z6MI$)4#?5E4a8ZjkJmZbz5|YJ-I>g^Pq% zY?Ih5zS@1`+F?kX_1x1jO~g#33q*q3F&lbuuNs+*)-`ON+u@ETR=FPK!-D0HbYzL?!Uj?( zAu9%5^+1qt=Tlkf1COn&IzvZWxV2EeD^I_?4Hr7I?8w$zoc-E zaSPcO0SooxIb8aPN_z?vEr;LPf~D+{@ZFWu9srp0PMHi*x&qHw4E04IPuy?gAnPcB zv~!*poD$HRtwCkJTe!skkT)l4bMLQ&w?%5>l*i7@n?v3wU{kb_O*Y+3cAmc2Jjh!I zNE1-QrT<860v+g%$RG|F^5P3B%vOk=Q+4@rZ}ZyL37CX5tvH!zK{L|hB1%p@pSLZr zt`W&n=~G;=P!1L`zVT)W(9N!+G{@A>~ zCj~U*zA6w2F_IggLgA_MKPv_?VSgJIH4u^kDoroMrdL1eJO8P3??a3|dr&{AKDY>D znpF^9Ptf;R!3-AW3S83b0Mjq9^A9dWS2JeS)zS26Avlt7BTZett=RoS9odva-OidF zB*wsg#|nk0^lS73uFr1GJwq-3N3Ep?7XaVpOlzIp`lN3dYe2D(BqY`Z2Lp@)@;7Kg zVVa1a~M>dk@6GV9=qDj8ukL_f3L-30bSm7^<2`g=Hb*3LOC? zoK_;&5JLSyKI~48bggh6M)I6T9u3UAoV$A=QU>}tH}(Ogb#ElrhQ(g$+~vLlNs3H& z`>Kv7$I92@~Q8v$_eD@r?JgwmB!#D~PM1gxn8+yc0(kmxQjALl6P z2rS*KbM;i;7to=TaYX9Eom9s)=Ww@k{=BH6@DQp5R1vcV=U5W@PizZiDs%Nz@4fdh z%^$ZeIyfKGEGcQ7YrjR?f)=Gb+<=9zjlRuSvQ1e}hO$Whw)T)2bXByPRhuxRXTdZf z9|^B5IQnmkg&T>4!JR_Gw%%%@3^5hR5JQ?mm>Q`cy7-WgCUZQ{yF+W|-1*AsywQLB zTHl#2sF!>1oltrEYvp z%gDw&n9~#X4-d`-5uUw#C!ayEaf$)?Nc&tHX?z{OUV;K7*4XSmT%o>-zJw~kJBSFQ zf;;Fx?N&?EMLuCeq8wHsZ9A{`-94GUf6N8*yO;WpxAYzSHq~NdR6nRYSd2jxOpk1) z-Nx3O1Y&l6p;J&`MXoSJU+C;7OBEt2{$3SX$nKAi>ePi>FlIu3lkLKTbFi}Wrr1x| zPf(XI2%>CXF!q2YAF<{n9m_mi;*rK3(TYesL}Oc9-vBctU$`2?oarc&hEOJkdV|DcIW3W%dTWv3;$I zA((UYI?&w9-T|X0*z*q-Vj44`2ezj(ni!9)q0GXyPWDZL9xIM|&_nk&B_mf>1k6Zd z%;Uoc{}j7^@swYb>j7_sgptGYy~Ku`ybC?B3yFvRSRN|;=(qsFuS*d=x$jSZfg zmFuAg9|~URIv%XhlTrMeikLoV^l)4B4PH1m+**#`!Qe;RKR7s(*RQFGhEC9c#57Su zF)ZUmhTUJ8lqBcX!L5=-JqA-})Xsx5Fr<=&8#iheM^bIBjMN~4CQRTkEdLX8t)Zw; zp{6Kb8~jDgPzEUS7~TJ;=Iza!d~)*iN&6>Fn0RR76OX?!;hPC-$DbQNVO;gtzZmnk zV;V;Hj{fzi|6$ZmA8UDR#K`!F|7S!8s(fF6ZKJ#90-L7%sBQM%*T;^_pUjyu>l2hA zQ(Wc5z6!?gWR(d^DAy2LqX)9>2Nx809knE0pf58^Ht%&87 zza$MpdXEd6jFphhg}WCTpgyoF#HNr%BHz!*G>ojrn2&^2h?v4eVIyZ6qpo0RRR^)7 zwo!&DvauDJFP2zf-4P)YmzBt_irS_)L}Vm8P}bcb7-tXkb$<+*lFz#O>QRso@%2(n zOL8AsyB>fc;%QS-tnNW+oV$0xlp-qtHU$x(vj@x*dMmBn*ax$5GN#joiJ`rIy!ZYg zSdy5=wIzRR`oU?qEcIXP0o}0XTd?i|h3WhB7Cg6Le?obXYc(&WT-B*F7diAQV=>9lSFfri!xQ`p zi5V>{sP$ukA9~FIJo>gLbp4D7(8BH8vDi!IB8fFsI@on(ot0GllIR9_NE`yw=BEG&6DhN4P{DPcJIOM9EdrS&|IV;Yzr*{zx zv|@^#Z|Bqa_z>1p*#ucPd_r(lsZb~1zyr)#`Jp4sU2}##wToDulBMxDVN;xg!>xxb z2y~DyI}$GL^{Dq*?p0MF$!_MMV+^Qb*(17`SDGQn#fgpSER$Q9{_@b#`0G7%BpJo0 z+he<)0*L0$h{Xs*ier0}aR~cnYCe1WTeGzp41lLs7==T#vLyt$0#40T@>cr6e%M#0dfsO*S6Imgmbb(zla3Y6 zlmU?+d?!)|uD}b59&!#HXa7AMbs+iEY^%!xGrxGMJ$VlSKd4Rj@KM8tG=wH4a{?nz zjzuC4C6W(24#;*hfw(1q%^` zf~VhnlgTh8|Jq3ZNU-vUk~q#5_RuXQr3&nycKr$9GIfeQ!yZL&k-YQ|St;RL;hR9F z>yQo#e+~7&aN?B%avs{?{jyH@5IGcM2Ko_NrsOd46gv; z#|Ytgz}TJc6VA{?KR-X@bU+-9gf!h|Y_O!QNr*(|%YJk`vQt73VOq${d zoui>6ro1~U5U=XH>5M1GU?;LPJaInkiydeD}ArG6AxBjTP>nG@6 zA5DCSZj_8jgFKqNRUV4UzQRAWf814o&X-Twy_@ivuRWC!$thwuLBgGf9Z|tGA3B;G z)t*Rn{Sk&Ws~{2~Y>@o1o1%$Y7Q#GqQ+vukbOheAKdA1Sf^Mfx*|LRqwH|72X|Cta8rns9T%PsZ1cs~fv*%zqd&Z}f=A?u=ZJe=?t5|1SURvHM2A z-DJJJq9EVS$Rx6n9hg?Z&oNdlBDSDp4(cA5oyj31_X#dECglp{;xNgbOu8+5jrssEtVD_%+Z)*HHujkGmm- zv6Lp@oEV4mC9ru_V|XV?qRVQxHPz`Awa2&b#vn`VFa`;)LWp@&w~vC+?K{_kWL|L9 z#dT|d-kszbIOt|qgp>PtX#(HiSWUkF=P#$P?@M3*nE8Hqaf>0_d(g~dG_q00w7*Rt z+xv@x{5=#767HFL(i&u#2@^rVS3jo9BKQt6fr1tla3z788|Fh(ZvfL%j&>&QKJ}IB zU@*k>R?;tmAVu7fuK1BEfKXEwHmzDvT1bpO*MiFA^xS+4sysh`)80%Avv)N>fz+44 zWbeXwpuot>kyiqf#G+&t3{b@^jyHv`KxP0SpknIQEg(kflZ!BB$N>bwngOOLSd%>~ zZ?uiV_Fb6&n|8b)|2J%0LeVU&*Pt~a$6blSAPQS;4u_d0ASdL)STKy$ttZiPezrtL z>@7y?OuxNU8C6Me=hEGuE%^W0dl%p+uPjYa4;~Uvmu*UgWr`mtN>TwS3yd+?pc2B^ zw2iS1n5I;iN~A=}LQ)E)WRNMU_*3Gg1PedFb_pA>v2nR<9)9rN{Wr1j*i&anb?Tg+3%cl@BQze4rp-I@#PRA2q zTg|4mh(kq>q>_2f2cl#KlEDrg-K#^x8K1MK>?24C@A^hAoMux~nAtQ0p2a+nrr z`!{J*D$`{OC23@25W&G;rDhd=Lg84eXQ4{US=qe5ov>p6bO1jEEBsj(5!x@&6O$HI z3=3Xi>3w|`uq!NJqarCu3o$(4#XdH1v>RJb>I@HeDR1&R0szCpT{X|f0n+@ia2H{b zZI&UGvcp@Xk8jt!D(IZ zabjqm9;6oI&0?w4q%$86hnmE}S#5JAV{|7~%ugDfOpY#HVwZ;^jL~%epOW)T&Xm8M z{N<$oed7N%apiuT^izw8}Noe+SbtCv`udhD`_`Bl40t%R6PAodI~}ShZ{0Krz3o--;7KFTmTpw5*8z4W zG@ZY48v)Wa2NxH;oPxY2fE8hI2pM^gy-bM33&!7MYCgIMzbk%EQRJH1o0J_3BbUEi zaJQ7hop88vtnm>?DK0O+mGes4>6wDJ{4-lw<2uIeHUr^FnYP_?DU;d3PXYx9%eD6t z6E3b)t9RWll7Qn1#`~N#3yKvmk~Wz<$=mFv;7B!0L*URy)=Z{GWPxg#JY;W$cU9*m zcL(jN13QXdPFeGmU8UC_2u5*&HFEn`mN9@zoZLrN?U@Vl@~cA71Y|7aUwbNilT>`! zj&R@Nqjcir0mxFamA03k3LiReK-VEN^d)GB-`nz@ajF zZZyxt`#+WPq}MQqi_m^esXTHC*PbYpJYFBl#W-^Z+u%)v3#}QDC>PVqGCITkEsQxo z-#Hd@)(HmJr_2-@DD6#_Vaf#Nlb;9)&q$k7XN(G&N@txfb#Md+L_A~b{^_DDS&Ch| znO0Voc&FQd=|0w3Qq-10z=`{~HP?Z~`F1=98hG(GI1W_Pr=oXsEps$0fY;d>0k_$$ z$E25Z&Mj)gEdNQd0N!M=vLimH;j^$EGhXLDT@+1OW)I1klZTN4V5j9u=tD%PxIu!U z6mlWVr8?M93`M!Vyz_Ckk;q+X zoLh&Hly%k?wQk`2pU!%?bcx*CO9;xO%)22`o=}S2hzylf6pS#Srmsp~E$B_yE{|<% zI7te;5&5_WFv;A8QnWabr`GNuCZEEhvTrv_1YorT=S#>h+4zFk1(;$$71vC5>WJ1H zgg{fer@ExvrUU$f}amgM;QpF%HotTC=IE!E&BI-RkqKUe~vj268 zl8;!t>ZIaXC;X6{b$cSOKle`3JLQK|qw!00pThcYT zXs5wAy7WinB%s@spJ#y7OculAr4>7fqI{fGs!d?>RWg>WCX1e0me8aY^tt16;Wf%Z zpO=;{SqO2Nxh_jryi;s73tKW5wKCswC!F?Hdt!@#3L~?U;nGCpjx^g1W`UA9@%&K2 zo|k2l%S9T;lnF*ey4ZqA@P#L(%cX*d+J}GaO=8||)dhh>LkRUmJmNq2bT@twq43c4 z)8tovalE)9ha1FtSlV=XWEFX7m(3E8SL^6JZf;4x>9Lhiy zbs&ud$)R@=hL|f4-aLj@qzO#zs{RYT@zs`{gaKWYinZOwOh4Xd1}Yeyaf zShZs>(gu-%!YTUrO~J%f-g~(Q$_3Dr9p+A;uZ}@-ZY8GO?gJ7E(07tI-0YN|jJ5#9 zcn01D&QKPqF*z&Exjm^urqY+e)w6&P7q)fKw9QNEzw3fE{Kg_ zb9!PZloZeajNpn9WUBxZ;s(Xk`KquGB3mU&>n9`g)scX&*(#}UuzpdF$PZ>Nz;bTg zzqP1n*!3HZC;Ve?E4_jv*&nigRPxZpfkR)z{saMN2R`b{08&{wQ#8@@Mb@Hv#k|6o zKgwFzER|RK+VPB~Wy7tUj}=;XU~$oRZ@Jb@bY)$YnWwOiBHsyyDx)~R(mQ|wMvLeGU||7!L6krS6#kA; z@^Pg@YVxR`(7&i;%6UUlJ)^aS&WOc)T9?iZ`$|yb=pNRL8b;7f@$Zximl}v>+%&hK zL?CFz2tecjd$^3rt!dM9FejmKxXbvsFjhBtaVp$jt zvvgci%oT67bX4@@0Wi>V1j;&^g-u^JlplKgOBh4?Z+0omMy+NsFBW;gtWqL~ogGE@ zXWMweI#S7C!BbJ;pCsexNe(?RDf4651*NfRC4f;ia)#Y+P+NeKiqvF%rf^kqUuCnv z`V&KJ4=98$BUO9S{eMQz`JAcGP5G}=-kh>z@+XtmOddb!;KV_e88lA$(SA=z6f^Ggcyrs5F1 zu5yAxa4;qsa{!T<#XGiQSjO&N7KVZG%7WSmPBnvpbSp!ZZW8cngOeAc0E&b;r7uaE1Q9f(K5&CWr*3s@29TxbN%zTL z6=1gj>7#4{ong^w1}kiop`KtoNVjr@!AgS9&0uH2eUO|jDWPHqjXI3XDdKUtjW?Xr zjL0SRECnLBONCUFZ1B)q6wBh;akxYv?aSbyPsoGvz<$6BszAufB@j;H?1{m1B=UCe zi9LvEAVA=K?YRZZ#p}(&EcvPoEZ`x?@dB~zU^IbhL<0Pda%!EcT3SE}wy3aw5SAj% zlwMr*&Jo`@!uXye1D}5bsTdUW7*b(ejb!>F9mJr>P>(5t8Qpjn8QZV{=S+7? zXag=s)~MQswVWu&BgzN|Mu~H@{)UP2Y84rk)Dj@ctQ-<&UW;a{Whg0N+)11?-eG!#URfnW$}?j$KAD7)JC+P4^E^ilLJF*rWv z7ERww8>^P?7v7fg_YJJ@PF_KLY$qlvR^zss1z^Z?1F`!7hT=tT#h$`~<%(xYXB&An zg3zpByMX>t=2xC1_K_&I2u+!n#@P~uRTytLN${!(W(uL<|Sx%j=F0R z6=&x*L^UE^F6lsxx|ona_kk5qMc|I2qP5WEiThGz_?$o-QOd9i(gWhG(w~x>v>X>4 z!&TSELLyEj{AyYQge*E@kLYlR-tI##aymRXLhIm#&&a9y{8e}ukjNj;kvbh2#SbGD zAo-yHxrDnj?GP2?S^(@XV&5TBFt=l4Vd2x;5cCvU<`A(?WO9vrl>Ejr6PHEP(q#zQ zanA70Y*F%gt+wU`(xGHQEN>h&i;8;&6b%EH`V#NO(Y^ab>>iNL8Pnah?wkT|1RmY= zO!46SiqovoX$kK}Ty|%BD@Z*dAW6wFFtsyxlS{w1Y1PQMAP(U^6fD$Dbsw((y0HpLVQ>jcO4Yf6b$$G|dt^c8psXn}{A}l1Kn+0+X` z$uw`kHh~n12#f)xAq4gS9|Rl!aQ!gWJpU)L2^dRB+0!&zg1edCNasqG0T6NPlf~ zy(zQ`zt*d);}W_;nbjyXqbr(RV&TltigQJBf#VbL0qPJC3oI%%rV~L%i2=ZH`ujdG zZ_IEcM2*<12+syqN#acmeso}<_XNgE_y63n%{lmY_wOzQ?n2-$1nxrM_XdIEQ#v1^ zbWfiY!wiG0Eu9kFEOy|0Tc*M_mXp~B<#i8G)YcMYaT!s%r}Br(7d`YXvOU2%8djh< zl5xtYJWrWZlS#fLE|~NL$D&{Fd9f|W1f`GP8>Z>9Ll+i zv*$araZ4Jw_Bnl%$KJQZFizY_I*3ZI<@!(8(?{ZHXJUVxzTtQJ7^40*AjiWEkVdRVw^9?{NJp`rmt6m7$3p{w4-GKTCA?CO-QpdF3|>9Dj3#+j^SY!gb-| zo8aH*$I}^_Yl<|cG$aHsDjVf`-1ZvbR|qT?qi_m+VRCgv+4$V>!_Ys&hcw{jU@!@@nE!-R zI&D2u+aX4nrL6(^xJXCQ<~)wO^L!}@d5C_!Vvo+?2z8_L&@yK=?uX<`q6?Hh ziX>llJ}k$n7*VN(BPz9MM5P`cK`A@AmSTusq{|{My;a)IPeH0Wgpe+&?*dKXI>b0P zpmiXqB8|DKBYIfQ|7k;vVQr=Iv=eozgy2Z07C>@0HZ<0Hd3MJRL?du>vti523H8G= zMk{|mfu>+fX(@@$%N*nlRnt{Ku_w>djCM3_i!^2#(x1{m+Y#b>{XeC_QVQ08B5)nWFt?PI`S%=B z7Scgc>fwt1Cg+k$oHs!dJe%XhVQMUL3MjvtLO3=YNBtJ0w4c!Gr~W1Yr#=%5!Bc9@ zbXH0-KiSbN{tHM4B;mnxYTNos&00Sd&Y?+_|1WRM+d1P7vK0W%IwNcqrSOg<0P$%KGNvtZx=)ee;O-1|sMeUypXqpauW1Hs|J_ z-pUFmJIV$1Dvf3xd4U7|`%JZt7WxFom$H+1 zLz)nck_bV?;$G$~Hub{I8DDUh8E&F-3q}5G47XbA+09}Hy^FTFa|fVx!p+lwWfw^$ z2*4gbXdHROdsIvJ#bu6n*|hIyLZxU)xR~(ArM`>hh;E}$bhm-4740&RO_4up*#8IX z8fc=;H2p8-ml`l{FS_SKBx|Oesl3EMUFJxv*wVn_`A%T5Mwv_%AdhHlR~G)uoP{YD z4qao5*M$CNW2gUKqPM)-DOYOYyDu0OH zHqYQ#gY3)Nuq-*#S9lT}l$Io}pC0<))#TC31Bb5;bRH_vQ;}rv5NGMu#EL6wwPvi6 zJS2Bu^Z*SvlA?2f0X=Nb^oJMC$S6dFV-}Ayi9x(ZdnW`r6w+`}?gRb_>pu%A%FB_C zg5vU@Rpza_Cr2dEN|vFgYDp`Y?vPsz1`R|ID zMeefJz^>4?me~e2RB(G3qXxxa9c~NM(%E6X_0~;)GuK}lix2M%Vq_*QVgZ-|c9?0Y zO|2E7uxC}`p9vXlZ*2e`@@z`X$;VugjA?};@&>;w?r06Fi?yLydlQ{~nNwQk?D0gA z)Ri7H)iX5&#Plc{AaBL3B5br^Ml~RN)NS+S&0j{t|E<$;L;jVZr#M} zIX~FL#R43R3dDi@Om?eE6_1nwlj@!UT9$%;D0!%)3?(*_=|?q8n@Y>}&i3yA#W^=} zroKOQ#gxCEvUu{#lm2$n%!zdq&P{lru&&^*3cf$SZd`2a%`w-gmWktw&fr0>PYfX`A5`T<*=^P!f1;I&x<2u$z zl-!xgtOChwKzi5|RpsA9B3|#A1n+H#Ek$Q@UBq2opM2}X^UAdTadtm z8zt3!GPw_BNlDn#+mfk zBP<$Q!UI{FJ`l1zwM_J2NG7@W001YwBS%b!LD2@!9TpQW6ddR~mppva7_8{|uZ%%U znzvw6QEpG_h@C1#h!hR!0_GEBePv}4vyKu)$a?)*Y%w*0_`PY3=oXxmB{Pc!>(#*v z?|wy6%q=X+eHB9rvIJkP2a*C(=;EN<#M)Ss+D67cWTIqS?wE?6^$r91 z#n>WlJU6XzBo>l5F)+*Szk-Nw$kpFXoa>es zZ8rnQrs%)2um1{ys((xyg#D@5rtAXce>(K_;Q9B(=y336FQw0lT}>S9``tdb|K@ql z+3J$lz_p%%&kl=`vtAVUSFwixxFA3*=*nw*>-lGM;a}WAgzZUy2n2rq`J3w}+7p|HDvJwRME1dwhR|XlLUcH>? zIRUe7vAj)iwk|R((~Vo=DcxWas|Gfv?Oez7#_gjJ!pi@Y$fj@~ zi7ntoT8bIUB1z~&$)hD}BhTsdFi{cT>oU7UmP%epkZ|k|m6)sND2znuCs#C~!mwS8 zDJ>aB!$SJV{=_kIC^Jjd-}kA>*D3=~oc}uc7TKN4LG**ze2lz2R#cSpkDt!{+V2$))?pzxAGOn|((vB?;xGX7>VBT?&p15-qXEyM-BiSzFbyn2zA z;aYFv?9t@AF~G=pyV%X4JbI!@n_5To{9Ad|p*- zR#EOojp1vN<21aWnsXfpk=h8G@=SzBAtjRvu@EMEVbBK%|L`S+jzt5C@_BHTY{NiO z2!@bSb$b}Z9Z7{%q&4Y$4aMqG@KrD^jKLcmStP)OY*eJ>?5}}3LR$K7+@ynu>54}l zED|!*dq6-fc3qN1$WrkJwilM7QA9|Y`1X=mdaYQ(g`P0Z(zw@CH|o(Qyo z%>5Z5(a`R5)mY3X)4=a6Sf+rojVf zNKu!372)AOz!rsXOgIun3_0=_Onwwg-294=5-uU|YoK&`2T&q$=(ib1>`>7|2f&HR zXvq^wj~0-F4-j6-5~Yrss)D0H&dS8aOGHTaU+Ta1TM8q^ap?@)m&AUEq0fs|73Fku z7|k$tvaq97P6LAOETEtYL^Bzm=&j<#m^kBt7ugkca0auzwmM#Eb8D{(!+8UaP+L-d zjW)D`i*!mz2%*SABU(eXAsqLBG<9g2aIm%@4+`qvi_K;H-77;ElPbgFk#ifeQeWvN zxc9w=Jb@_%2(~>48h8+#tJI?Ht=u;dN$}moxwupT?KSZau%xJn&7tADzmnlA*0kq>Cbzg| zf-#IpmB@Bs8T=z9hLqUsOJ@jEubu*|DH0-sJB8KtSHvoa!Mjik4bs-wYz%3=JGChH zs8@kZS@hLz1N@lai7MBB+#|$;PA)(|BHNRMmV_J>EYwojY*j6VW5L)g+%eWiM%E{_ zDjp9C3on02iPw>&lKoyKR3D)u|I`z!i8<(_3i%J_F{aS4%$yuGsVZCw*R5AKB0W^z zfuKh?H7QRfVs!eZ#3v`&|9>y%i<~L{-;|$B{?C)clc!92b<(7X?@wGkp?^ZO@cj6H zHGb*1H^%<`m;?F$K7Uo-f6A-M{VaC_D*W;O+!;sm;lnp;x;q1|j1PLjBw13z?lmkJ zp&7R;KP?JtsSiB0?(AnxsIPuEfLRPT)5V`#3@BGhEYQira!E&m3fxVwtJMvR<336; zteWwP9rNOmJb0PRo4#f_hUbwn9-cQw={A!aqiHh5doka==SVJQK5x4F9i)%O%v(be zXEUW~?Nj0v!08B?Jm2F;tVQP-wmzYQ?YPZuxO(E`l}M2faHtqJ9q}b0XZUw6z(*J; zn&*D^NDjtSTyrx7(qECY@`<6_~QC* zEeTFh6(2j0?CBZ2c@dByPifgMi2Qx=01QC~-aJK{hW%gZ3%hnxEQHou4~gW! zB#&l>QzZ&j7bFrK0AqtV|CLu2bAc07GHEkMGj#AM63?a$dQ7Y~{tFDc zWO}SA1`oX4vnn>j6RZvsm&i3Lo=0kD0oFlmag@_LoW%V?{(!dw5paWj$vN&YbBJ^| z$1@h8(o4__J`y1qtZj#Hvt0L$n{$)|hRRzHlm#aXMW94AkXX&WgkK>wU$b7s^zo?i zCJ&u((qGzx?Z0xAR+hpA3&=>`w(q*4K5%zs9wc$(1W3~0`7;CO-x|F64&7n)cfxlQ zTS5G=lNa8EA0Kcd-<=)b12E5=?iRa+1ZJonZ4j>wN)ifxzyzEibXUQ3A#J!2WKjs{ z)NIEoNsiwiHZ1ZZoIPjq5a(f(ugEB8xP^r@%5bx9lq#jh?Tr$IQ1U7x zA_e7QPMTcEBN!(9k#)LcH$UEiOTm)oNRQw~ zPVq^2W2F*beQ1L(L*R`lf{t8Dym2(4Sp?h&JSw~odDLHph%v0Q&{P zbEYqZAW*b6b5?GVoTN4nyF?sGO}Hp2|6I5%;~av#Z8r`Es7SE6=q5!HGHQ-O3Wz>! z0ml&3-qud3dMfH^BCa*^m1oV{oakYhPJDgi4Y_tfP(tU2P$a}2IrwFoPS7#QxkYt1 zaQ!z3UXZ}e_acNWF?k42P-nM8*R2l9XNg-x;@yLZBm1NgN=wdXE!mm~3eLC#+?gq3d6(@E;wHYNxV zE&6t-IcUkm+ks((&;^hou;?lTVK2$VP(XAF#F%g(7Xdw}E3Jl%*hC28?zbR0=&R;L zlBvQ|81zlXp6q#@vZ0+t*2$A}LN&)o1mR0It1nPQ^4P#*O7?4K$3vK%vCCp4PkHafM}Yn3@fNU*)9%~6t^nQByd;VgeZ>ZOEfePIHAm`VP|kefKS8gzzh71 zU=UC>(h|E5TezSj-i%Hq+|5gW*l;)FT_@gz#hhE>7IownyhP{SN*z_h`d$gXj!ln* z;3GyAZU=}{1loXXVdw_OQ|aX_ z3oNcoyzvRCK{yfz)?}Rf%XlM#aFmz3yWA?Q3n&Xa9U1Sf7gHas3PJ1$hD2Rt*vp6p z0l}dSM(AQ1_sWY zhY%|9UTmQEOQqP+ST=M9E^s}hN9*Yp^d3C-!O+2ODJ-f25ptOx>Db~P0fDjX|DT`8 z!N0qIcOh^W0{q;PK=HtZRc(Vg z0dfzH&d54L8Ad*d!lAoRtz7hYWo9UjOyeB`}~$Tyzs3 zok-k#3qNKjuJ)1W>Be#LFiu{)l5}53vB3*p&enEZci0fyA*P%xZ`Z>1BKUlJsI>!< ze)wnNIN9A+7NC$Z0WM-0p=rz9;p(V6H0;PNlU~@aky?^6;s&>GkHA-78=a9|+qOtu z2XZz@HYnJ^RAUgLGxrs9RBBvUdlFm&Ftn;~Yp{mLHgeL>vmtm*Wb&n^GW16Vf1y@E zmz88c4%c3LOj62mG6oeOn@l*PlNo6%Y#rAac^Ity(i>66vKejHbvGIDHf8p@ED}$` zGkKYlI>$hi&E!+?_bD#DI?`&^HU(n3S*eXB;#N|OdUYZF$(Igo%1AQV(vsv`u;MtI z`0!x=)sHL_U0p+eW;DLlFZHLW93k^s<~%}Xs}NlzFJDRrt(4c-f~SD|Aw8{g`( z`ZL8CcUQ+&I8^M$j@v33W-=J&>ZG7OEn`3X?V`QP@{RVg z+S1v8D+R^bKxiww!)nj>QX*N)_|bgZygjui`VE`a6j$8TQrV`I`FWlEF^5O|#XAkp4!U35xvs+Cnu&lrvM{41`t2$f*=aDD2%oO;+f6j4$lP6dy#ACCeOTi!H)iUQ{gpcq|Qrl+g z1GAbK4~5FBaDI`gr!_=^RTf?XH+Y;v2r8Z(scC2%Aj?i^kQ!Adv7Eub+t>XA!rKZDJt(xN1!VSegci#dVs8EB-|9^VUzsZ@}IOYGI z^754LO#Tm(zMS}fPFy+R-3b+ie^I!uV4z@U!MO2f#y>so{}@+3HZtaT-v7w!$=!@9 ze>#8eJ#py8^OnqVbAu4^e(tdt#5Sgh$2UMssE`m67nqRhsJ=?&8El4yn6R8#C7B$s zmx4gPdsFENV3wkjE~W?MJ_#LR~u;!l#xabx_pmzCctflf@T_fsW{)qK@qE+Yf27 z81fC*L-M_@p?#+l2XDZ_%+_2=O@ItKj{F_n(Anpe&)Bkt)-l)&|0PnU>fAp1lU7it z-_T-cUUZrpL~5#T71Dgo5EOeOHd4KmWu}0;Ob(Y7B#w21>78zWYFyXcf# z$nnY8XF)&510vIK#t^0zdhV(Tg*GH_1QuY$MWG|egr1aE9hf4+LGuu3Bj|V_d7%ec z4#d1dc<6Ga7-d@vL{)|vA*q=;xd0&nCtU{+aq%76_xeEJJMx5Hai&RVGNd^?F{mR6 z5ky)k4^?gjPQNQ1qfPh4Zn9yRvDkguEknfC&o$RW82h+?O;!*t==T~PJUzw*nR_E) zI>8shSir9_7{<&Yq=m?p?CfEx4W-5QV6=hI2V&Y9>S!e{x=4lrpTO(;)L;+21s?{Q zB8y)!(!}{r*id6aFbwR!ejOptt-6%2f+VoldqikUGkd(73>_eFp5ab|2L6m1DefZb zG*Ywk9`JLaOt|5b$G_RnqM2tiy&9ocsu2mLUqfuGeiG0-G^HR(gM9^Q)Rceoy_49n ziN0$_vxni2cjtGL1wqL)w;T#cj9;s3*SFyWrF*um?1G4!oGpZ;(O?MObqydNlPaL8 zQaLKD#C%{qt~7I`2!F#2L0#_-oiJK^QJ9IM70RT3XnHaH?yr;kT#R>Ixce1S{Y|f5 z15=nY%G|%2vQ+Yayph#Y+8r=exA*Jt)Fi=%_mV#peT`k;-GRP}iYO3v?ip^4J7EMJ zW!t9JG26O#qtzKq5p&OIqIYKrVSYpRE_5=d>IrB_bI(|4<6&d9whmVaWuc{7EAp&m z=}ce8@PW&Vr4*f*sKXb>S$|5>Vz5X+rmT zE}kYc9*_qFqkAVYS55ruIxX3s=zLer)RJe z{p{?9A~?5fdU#`Q!6Gt`hEsimovK5dVG!1v_tXt=UZEa2maY_2JaL+HyeG6dVS>_s z?YuEJEZETv1u=4P)KZ@Wm1sjXwa5P%69DQ^UXHT258g{&+i!XsAMS2NZza>4s?l4B z_z76dTm3P%+tUeSI^Is_U!VfIWqmx#$jyPMX~j zb|;P`x(>|C1EBz$iWrYyu?K^Bl^VssM=sfkSfe0gjH6#THC7dEl11s>Y1_LGcDG=V zMbq7B?qm#-*HU1==f}8{U_n3xRd`oOMW6tr@UDz`b+oeZyvAzn6Y+IEGY*wt9;qYZEjA|ymWvZpNjp@4lN04V*4>01 zI&J!rio(K0q!|!10~({wk47`(bv5`RVd2sEw(dsMo;7VNOduA8qk^WPy40gx!;Ls7 z3obHIX;s;>ob94SFucFbxxA-)2gvcvX&v<-$EQQPYa821B;fA^R6;R4OfRSmp`B>S zb;1xZMy(-$*78JF{hs`IkW+n#SMuQdzlAsB&^u=_#rE!>qxYiekuZ*+Q_MSVV$O;{ z#6NY%Op(z$E>7J2>Ii(%HndVS1$dfnp>DIiBT5Z6(LNm9d%DA5o@P#S^WA(*{FHCv zWZw!QHU%EVo@xs2AU@x~0OnYpiv|o%aahSHKo6DmgKa=|@c`I88z?jy_85jyDePW` z+@o+p2P{bcpP#cQXVO<=hVb!+{5!PcNs5L2+QvyE4A6xj*9#YqTGcoTg{S!XicGS) zArh{oAipix^$@t}u-LG56=V@vEr=tOg{f6Wq=NM62)Cv-!3?!i3)GIMLbi9DWKW`)d%Hledse5#-gWkE1xMI>tTjaWfp+pU9nYgw;>s1b}w zFQnK}9UAeJI*76e39Vo|u=NTxJ~ymLF|{cqyC63W{aG&czmJuW75l=Sfee+aI%te^kHubHc4k&rs z8mbyw8iJ*dSe0S)hBzdCjZ})(i3qkAIAyliot~h-GdmWt)#<|zr&p8!OaAHav%zVJ4K?}NPH(1B;)2tx%DJu($WPi1an&#L~+ZXvf;prjs$&kUh9 z($cXB2x&=5| zdQctoO01#>t0JnzUK~*r&nn%jM`Iv*(|W_2J7cB;oJOR5gX|>OqIi5JdLGPmQXi!T z)T<>u6svPH7@TZsMbvojNK$CXr2#z(3K|tHJH82Xz=tt#5+*zJEKP?;nj;UZoeWU` zsRXvlu;-~Au}jMHG}N(Ll8k+vxcs@exGr;kut%M)uyOx+B-~s|)>LJC5xL9kGp(^S z`-kSNj&v2vOXj3Bj67Y1If}PXr46)(pTNU*aCtR$4|Po=h*+o2)#`9-ZDXj4e@W1O zHCcwTnFws2h#OJwutqg_zh#y;Q;)P6jt5`?Ss{;?XsNDYSMVKw%$un*Pys*|z&;Iq zFC3D1=wmbGjbVH+1}wPgewHkRv`qi+1$~6O+c4EzaeloVg6y|7R4STjVpd7H=`3GP zdz~SX)~=1*9N<>>>8YqSEDUl$X?ftOC+OyIbm~MRv?DvCZ{zMTVm=|YAjMzbx{I%r z(XC2SS*|{}2Dfn_3X|VQpA@8qZVRp34pdLMa%9fLW0xQO5pi3bfY}*(U)X{AM#^uh zEh1+rGvc#TLPlE5>G1p5Vj4zp4Opa635FCVwuGNA8HU9k0i#h~F6c|f25q4=m?1cF z{9j7{MUgx>f>1*wf&u6Ms5cm|xPLH^QyIzv6(~1KJTQ~`RU-d>uCX0D;Zj(D!oi>l z`DfeG4F^#Xgo{}o&D&U;iSPdp=1kr?ZgmzPqRFj|$nxw%#TXx)cE==9e{@uP~;v!~TMt-;NHD{S)_keOJMyvte{j_;@ zdJ{?orK*ZDRJ2PR(@7d2;-9U7XagLEb`Zm$+IZ`>vE#Dvv}pL|0Xr z3rMPPt50F_uh41Ks3GNN^Do%}6rEe^>47zT2B~z(vyBGQgTCquYo>tJa@&=z&0SW4QA0Jj9V}j2 z#OYzfN^7=S&_yp5{qnxk!qJ*3&e{e6&%s+UjgxmM?(ET8cN?88z12A%{C-k7e4Eon z$l~ptEkYv1+9})FQUT1;$H?sA&KA8zg{niJAVH53Y>0xD#JR#YF~ZKR$aXv!O2H&X z8Y94R_w1#P6mdNK=-mlxmkI@V+3%t^RmEkNE@wz@ZMskk&YuxEGboJ^# zWXg!qoS_C4e%}XRYUTx^g?fic+CGt|Fd6(K9D=t#0Kww=6ELJ5d^~plp{IBlpVGso z^fKLl-iO^E>7d&`!wr(CqI>E6clriJ+R)Kmpy;UAoW4hE$Wk3XKcgd1s?r}o?mz@o z_ojJ}Y}a?vI$27EiiK7p7z&$AA>cFzXI;#r(48UCtB-ZV<=f+uRCq33)h7+qW3q(` zEEWM1OKBPSdufVr1TJ78kh|dqCca-@SKhaDr@h$&?|d_K@W{WuoVfhkf$JYzViL_l z=n*Qh%D!(By*ChOHGwauUNz+nx328}^Kwgb#{Eb9clR$V1mX+aRkV>$Y<}tYu#s;w zcQ-`_c@|-8Dn_z-P2o(81-1YJU$9=BuQePSP`)kK7*0a0Hm^v^MMds9h%ngPwn<&a zR-5kuWMr+=Bv_{oAya1BvGB@YaW+f5%!XXMHFx)VD!(Y?|AleIk}rKqH|p zcWwGwC)+U7h(Q?c(11Ppo*u6mpBnGOdi=ieE*#Z(A<_&r-=Pt6TZ&K6V@`#!`RyC? zqFavn+u4?+sLHr+mTZvJO){iJH69b!2iH;-cOV~t&WFXiJg;H~eVirQNV)ctpr#dq zSWSOD<4X2vv*gs$xhKW2(q`#b8nTb-)z>eSh{DJQQl!<3ECIK!q87mt#PE#0Q-%ui zX+h87@~7k<5GW%&F#N;=C1o`gTdagt+0*5kV}$@M7gAdSWI#=XNWsrUvh^< zWSB)z^kP1QX|xUJI~u)ZaYf`o1KIof9JiVX_Sq*k-D!fo;Gu^XR4k<%d^xxVNK0Y; z3Psm8xYgi(+=v`nk5)YV2oCs#Ki;_$;((@9whIxhV9r9D(r1x1jA@yvF?x>67z3z2 zZ)FQ$7t3l2U>EXF!dL>RBFYdzgaOW0UfWI3#V>patK=YJU^}@D$n&T0d=WjTH-NuI~X|f2{{}7fySydbO_vm9ZW? zx{@AHufG@bfnl&7+bPu)0D?p<60Xqm(wn}uz1c{F(_VVr0RMni8Hppcl$k&Z&~;DV zr`K#vwjxkBTlNV|4it2~X1s60ZIGQDZIn_?6w_@FyegxlWOhZYX_m2M3Q=HOqis4W zlY>t=Tuw_3!PL!WCyv!@t|5!zG#RgAZ8WKc>E^`ob3G|%fNh_rmPzT7QceyXo zeL8vN7%bxvd)kj>_2kCNnuBK$n=RP-r23uG3bhnP@z^J zg;^Qd7gg5}I`A&UxTFyZ;%Ro{d5SkVO}#FR{9;fjW9EJ}jKD={_)EzA{rn9C=Ui6e z%+sXb@EBE5_U13G&~w&6b;N`d7BY-*n|$~}h2WkmJ|1Kc%3?a({Dq99r6P`smn}0R zs``hAfCLP-An??vA@J1gLV(UwKLk7^W+n+IEpEKIV>aaA-`&5v5V#A0yAb%+5O}N9 zolCmi^J{bd?oQvm%9oZetQh6hOUt~GudKeF97rYJ5PhpcBDo-9UX0ZK{uWJ){&uGB z$)oV1Nn;3yw~@0MX2rlgp~9(&ld;7j8AnRCGTUSG3C{*!4kJhoqJy-wM{NUtI#uZs zjGJuAF{QI?QtYM|V40R`D?v4R-U#OBK$@S4Lj$F=&P@Bgwh4nYzVb{kP*(1FBn89uYoS7v*Zw zVXTluq|0?mbbc5Oh*w0-;)k}(Qqc3i04JB_4I~*^-avto<;}xc-z?7h=8>##mSlbN zXx2AN)89a7lwtn#G{fZSafX@G;|$ZL#~J2Kk26e|9%q;>JODxgsblK`o?dFvdY0i4#qatmH%f-rs zl$#OJ25y0+!f7&!tR#`@(cdtnQ3^Q25tRU3kC36g7Ndi7OIOgJdwtYQo@St3NS-rr z)8wXU|zLmhaq*_{*)|53`cyPc5Q<=uFp=O3q zx>STmO=l^0#>AaWFRiBZ>R|PNhBQ=rX-tg~N50D{qq?>3&XWq+!YEO}(-wRZuDmtCly#*l?J(K@f9(I0 zGvRDO1wQWn-G#ti2;7ChT?qWMhCtV&HREy$3l8nPhaXOGx#S8y^^8ch_21w?wVw}H7uQyLs>BjKR^ z7+2d7Y_6)M+;axWb}7uTFhJuS)Ou-nhg~OdqQC`ht>N7d2ckPdyGj?dgrNn6g3z(- zX%$1xxGKUmk1d~Vc1MPAIK;w>>y#G=$2QbWN4f6Jn+fHP-}&4%-=11|3hPlJmsc&5 zH72|Cu+agTEx>pdga#A#TG@8vLqC2Yl}3!AP$|GYG?`}6}Clo z%MD$Rr^X{hTmomOy27Wtz*|2FC1aX2XhHU;oG+bq{H3%4CL{hasF5_bw`$O2FsC4s zErfHcGe!JuSfYVHAZ?}l|Ghc8a;7v*{-2Y7Iq9z_{`Uzt3L6U|FVSpX!+K#~2dg%x9b* z0c^NEg1Z6r!K(@Q;cX`=JNUu=p${)gL66j`!m^!Jqi0XRPo6y%sZq~vR|iE^b=1yQ zm2@Ce=^$gJR~i=7HpiC7Uc@Y)?pjck^V^ldC@kzZM!^(Oq+gjd9h4$Xq**W=bdY)U zwaj_qWt``Z3I2{ks-6l5uZ91bK%?{s zt*Vd!1WUttaQ!Onh)t!WZ}UiX4j1?^ZDv#g=!1?|yTMQkGg_(WGR0H|heAeMqEb*a!p6o&q5@&3NAB{IFjhSX9tq-@}$ zI1U_)q5qq6Kog4TaDAV&lLcU?A&EyN?z`RRuwX;I!OkPecP>cWUa6M}YA7gh5JzAs zXn@98=iVFJ0H8hQ))(b`B85fMOD<2&6P%NrBAsr9@*756{M1{6U|p~UH!ngCfv8GV zAn|^|MZ@|FO+by(=1^#3;;RuL7x`EbQeR@TdhK$kx&SYwJ2AGNN3}WAs3ckQ&_3jd zKIj{mOj8oOIw=i1c(*G4hNwe1Yci_gzNN{(i^POR3s z^vTw5fD;LwX~&ehh;gXekVo}YQDRkEX?-5wK+gX}%p%R35I~r2f-Q7BE^`>kfHd`R zP^qW*$tbkCy_q+E>4q{>&8h-m)FUen+K5K86@Mm#0L0t@m*zmw96MX`AE$L9RG=fa z77$q4xdafPdNSn{uzS-dRPE~m4OiJ?-uc*&)Dg}fEhOV7VDtejl)A&tU5Y2;H#uc4=J+D{xfI@omyfyy)05q4m0>={hHrfYdo&PN%RKgBkQm7xG*suGl8z6K%2 z5Jny+d5{-UIyE5|2oY@MDA!qwmYUj|hOJ{MO{Gq7_pR!9t3??@iJKv2#M+}8Z+S;} zCFImn_>0c?Bxcnt_iS-4qOg@Is)JY9gC()20nm+IMF1#aQzi(e;8q4`VhL43qC*E@ zt$b@x(wZYh(#4)c)(U<&stRY%Wv$==k;-z^r;La{Lhw-|5=IK_&!yu&&4HJ}=L2Fb3))+v^PNyztw3!@>`4q@i8})WFdZiL zf8F1ALO_97@yKo@{1@mb5yp2vOq}f+ICh}_%D(<^nx$`UvpU#Zi?#CAR*zCDzZhza)FL?De33(VqfqV;GIw)X z+(pc#WU#19X^BsLCZTNqKW=6Y{@wk%3xT^3xC?>15V#8g4S_edxNFFZ{@l{0JFVE| z2(SxB>B`{?s*gAVoO8}+B`};5y{a&Jg|7CYR}I|4h2Ace&4b=9r?oot5mFzOsO#{cslU( zJ>Lxv#SW98=y-d|s!T#R|FWMut|#Nr9H)dPw;a)A($!+r zlnROCsq6g<%O!!*Mp)@*@_Q4KW!!`B4q{xuCjzbN|u!{lANM!oJ{i|Ju6A72xCh7nx3PaU z_O-Duja@qClQBQc|0Mr~y#FBNVJG-!p1|4lY=*yVE9OwPI*C*VnMQ;q5)WPv^hUxIn&Sh<ttzR8PUl6vw=XX4U6h#`m0T!o%;=*+dmwI0cf4mn!? zjpKvoJ{UUKErm&!eC)OUE8Qq*`lP(w+$ThDW84XGq_oVfsMxbHx9}wsPuHlNt97J! z^W-U-3xuh9w;_>Mq#c?y2p6H%t%X=F*cgGjh|5rI2Z{isbmb8v537ta`T0!~SvmRU zH*inGX!6_QVGL&O+~^t%#zc%pB%igg>ZO2ek7So&5U*D=D}z{;0+=J z1UQhknf}IjJw`Ee+UDg2g)f=ar)h5>ow`N`!lZVv>=4xwjJ*ypv;G?=Wv-;c=EcYS zI^x?2s?&Dt$SvFi{cy|5Py?K@k>?rT_x!jih-FVtGpwDkk$uFgv3Hck^W2omIKIUid-egsY$6zf$fw8cmLM| zhrS-TMurvx$B!T{uozMZyfJ@wV!UobPVRlv-KiY~g`03t!mtZWhUydflVFDe^fg!w z1X3CUK{1%jL~4VO(>lnaPO4Dsc(|ooL*PxBJb4NT1w{?a2>^e=ul_5aB@XosyxC`l zGdo@jh|HOb@F@jTn<7|BBzuoWTGx7CE9X2E--bdJi?|TBT1yo)a2)N3Pw48jCzZ1o z#)GJ`d>&WvQp5NS!2Q1}X9eOvL#4%1Ns{yUi}-(4Igr{b*+5x2k{!bUnDK)Y;9t(XEjqiEB+G{TcC=yw{8d7*nlOr z$~^F3d^5_-QDwZ;fHIQl#qmGK>zTzo5~H*irD^5&9*J+l+a*i+Emn#1bZ-c@h!TQm zmflRhhm}P?jK7GAB?3%DMrsc>t_n3nzt!=g{iE``bK@IPuvpMRU2xN_$10~e@eL?9 zPo|L)>{zC9e;~ddMT*u4*va@x4~~Ts&$Ys4q_wT%aVfr{^1koIUqFSK(@+76+1?h} zPPvR}1@8TR{CRpci`(MI6jYXT9n+V}?-a+MLxH(c*Cr%HdhVGSUq?d``-J)NH7HUgMP$c`b;|}B%vu;h zz-Uj6snCf(h2m;)ybWq~S}-gAB#O)|;rW`>O+FKw@ejsVqs%P3SF*$s_PBCfY5WO# zEvVwl%8gJ%GBX)+Y3`mzhGrp2~6fEGv zOry;GzcO!Hyb2|Xuo{JhQ@MnUwkZB%JfDuK6ci{rp{B7pUWrWG)0V7Vf^^p(km?R; z_Mq!h@a4>>cnF#UjT!Df_3aW1PPD=>hXOHg;_TjH>P4&)s4}w|?tSqUI1iRibEn}@ z+8k`$73_$vY34lL>k)_($?9tvzl|XQdeLdaaW;_Q8k1tJf;OxW<@Dv&P)f3n2b41X zTzsJKP~yn`#IfJXL4W}ba+dM_n`e^l1sqd*;>!Vy;__V^3ko+!C`MyjhoSn93(l>e z2?zC2fJp{n<0*EHiYb+PzL5ozubxXB`da#ho!ij99;Cv8y#mIN=>8aI6MC9Io=b(&5H@DUXG{&aDU&c3Y=FylXUHr!@T#K zL}w4Wo#s9eUxp>GnC9NM3ms$mY8!maJz>3B?g*F-oDYOUs!zpHdOVmiKB)0Eg0${p zI&t!2C*=*n!sEvK-lp}?qr2ao9bbw&$n-hx40kMs*BWX;^6oXX2ruwg#i_`sg3TS! z$F~yTS=~>g6oy2xMox2tumU-wz_B2RQdu_*ntR>c_!9KGyllrh;3Z!$ z8W0gY)GApwpT~)bZQ}b;NqYpmA_@_&wo{7e9bq*gYa76wfNU#1{YVys7V669$y09( ze)%!-+F<72`C0rCjG?4t{c_BFJE!l>)bX(WG86*Yy12&;#1{hv%8K0*cVg;H6~9`U ziD6Bf&+mtM^}`52nM(Tq`*YsPnfmF}pG^5LQ#MTgY|{Bj1rxtJVO+sil zsR(Zm!+<8NY#r8Z`#HD;Wg^0)UCblEa}Q%c$~F-@x@MsB#qLb2b7c*4@)~Tkt&WqY z4-Q^9aH~E+vxhO)p4#;wx_i>ySd=?Oi=SW=!(IY1cV#0-&xlezM`R6C#qFjJ!VE;8 zCfd;4-n0!5LDGo#5}Ja-EU_R16-ulILfk@<3|Mj3lAT@)THLNoL3s;`RZv@3F-G)+ zI}0Q7jey9@rQA^HB4{N~987%n7K$S!6p|&u6gYAIy@6LRO6}yK z6UjHf9{lPuEG!2*ZvYR)KJt;S2hi`@t{FwSldH%MJ^XUWkpa-Wd_#fR3}zn<*Tcre zSjegztDapH0VWF0UDFNRK7)Y?t1S?vKo_@TOt@3mE9194UDIjBI?Dk$Up*`VEaORLA`&Od zoGWqUTH@3xT2k00Uc}Mfi^UQ=#WD??y*7CMo5AyEusX9RBrlM}2iJ5lu%}8K*;U#| zzWoh~d#|{wfxb6jw5w_#ANcL5#5adXWOMQ&PEaa){%Z2=HwIt5oai}0H-9$smG*!x zf?B?*BraZp8Trt=?j;vmxPuMs z*;_8t7*@>=)>v;~2V0Cu@50J@W~xjgwsjSu$4WOJJ^Ba9{!4@B&w?!Yx*@AWkuSW5 z6*-;Imdu$u5p%g2UEif%_IDKJP9(oe@&brBPlr0TMS`t$;v58)m$A#>Gwx?_P$0x- z{6d9#!a%;)33}mOv%_~GE`}V{(jJONLn1&C{|5K~*VhwG^_b-VS?QWPqL5U+DGJEU zrBM-HbJ3KN7H>vx7H~sSlUO%ZNpanVnUuPUwKuG5G_78w8K7a0DXD>9p6is%h}YG3 ziPBY8Xzz`*vjUr){9L)JAOo5g`{TB*X;`3&{Wzv34)ng3IQHq#o9735-xj0DFdeFWbK@{s8I8n&a!ONJHw#+Yt&4GV`livwMW?Vv?{5fCx?+Y;d1ld;Kfdvgj5+Z=!ZQr zV{5zar;X9IxhQwS8uFm4!?q=BV%{F176>NEH^DMx{?YK~KEZTH$W(;a#E&dor8gwh z#A(D>pm9}gz159y^T9TOEq+sISEO|ZG4dg#l#=6sTw+Po%M$G>pgmnXYoFG=1)L3Z zNJZLPAqKC7yahc)BS^!B z4h?^S44){Wib=*{#iDY4#3ps!2Y@c<3dpcn5oCGRftpQ`GjQP*Isqffd%g(Dw4c*Y~Zwu@BLR#Atf}O zEEiu(96de|SFWRp^PM;x1}}U_=h8QEInT&9!^}SU?wNt!^Ek)`y1!2Db7hSBKyjP9 z?gc!a?7Xiix6rbVr;~*64Z`MdEoebog9V&)dwIMx1Y<%~l$0F1AO`mlY=oi1@`J{} ztS7h)*FA0Htt@xvTkloPrf^*y94xT#+rztI1j0On*9z|Wq}&PaP)N`KwL3gQC91k+ zgh=`Ulx^D;Q5?kVuJ2&RRk2*m*gr+vnBJN$9cWqj+6mwl1n|qCwHkW&ePR}RE+B9} zhz=d@S3V;VJ0A94gGy|E|CP8dbRuyWPJCwv_wC2hz{!Hbr|-LN)@4uEJs9Ph&Ur<- z1=-d`;+R+?{Wc3D@iMe$Bm3Wx4gSl)R(RVOG-qv+ZLJ;iAtwp)xFf808z=h!q(2{xFa9> zJFpdOP^N#={M1pyb9ugNB3gW`9xYn65|`df?mH(@i__Y};4%8Q2CjXSe3w{#`}pEf z(*6H|oPV7&b=j1ylmB}1#z}uSY0bpHnfT;{D-)I%o+>OXc)MWw__O1kaeK!8yD_`Q zOv-;h@9*+f=YEmZTLboS9$4e6Ng~1DPRb|lY;_-hUg{&a_$KqNc8WG zqfiBl^X?Fac??YjulgCaDeEI(1xdV{M0bYqd+*!{{a%@0qx?6Q(-9+HV za(AAKV=ea|)va$mw^-F&3p)+w3)LvSG1cN~4$dh^2Q!Ti){YngQGWKt4&oMK2IaI; zaB~#FtxEW`HpEO0)p>(W9O}i;j5Di z3(?)QE=*c|#VBL)FxF{>p#|7uCsYR~LkIu}B!uRg_u}sm7eW$9d(&P`u+$wbXt5EL zLDUuGb;r1BpvxWe1zNFKAS4(Hws8PN0|=TtbUAtCAhAI3qwD)LaryJa`6KWs9=MKh zBd__E;lx42JAte$dHyS~MYQSpi484;MS#cy9J6luFc>DfTiy5wq{1#a%`H9g^n{$e zk|plsUwL3v3d7-m8VUlx+rscPBv|nTk)ex3s_G`;Ary=^Jop8Ws6F}V85vps&GX4O zuiDcy^N|_aW4+&>fPt&oPc&XZ&uOXdKzT30jRixva!(#Q)%vqM7}%-X=^4ayb(_N0I^@`6*NGEQ*4b)kFD39|KAJbh18FUb0gMp_I5d4mH7Iw{{a z_5;M5r*9k>K?(>4&wLCC0>%Vx#_Z{W_7f{Gq>|z=<0paR2~K?jHrYZ@V+fWR5F;Lg zLC*0zPrwEwZ_)HEhIV>Eu~KN5f4-ir7eqVI_b_Nur!Ik_5@&v!*uUS*bsXr|^clNEoO}A{(HUFg5{8sMKDd2ZpWjP#?G$rfUpFK|B(Qb6g@d65#*fH*X-M zie_6>z#mZqVR3|o0alE4H=TG4eBRu0x7sb&!@|uu4BVTV$mi0SS+ z_sQJCrDV_tTDndQnq=4Q`7zQ`K;MZ=lZpt6S#nBv^x zuKPN7(|}V?NCyEt-(QATxv$YXlQAoe@rI0w&8OG#>|C;!;oID$?0~4SI&@-4k2k{yC<% zpe$AvgBD?_+WcgD49+ao2Vew)NNqrf8FMc4iDq-e8dg#9?GWU_zLb*hffC&i`V#$? zOMxQi;6yz7bX%j5yNv;l*Bt2*p%R2u5*>}b-vA?s#4u}%&_y=c2d66+R6ua58*w)Q zf-}q9jV>6=rCHo3Mle`Ya}+R>^OU1;j_9DX`cRP22i(Y~JjLDRzKAK$o9;Hbn=oZ! zTUOuH_$J=or;?*Sw+V5{3Lj59TBfFN6~`{Uri%($?13qb;FYk(euW5t$m(0hZnXD4OT-N_Sk+&wvI5uoke0pnlaP z`mcNfI}7m>&e#-fWU{(F^&w8Dg4o0EbC}W6;@E;%E-ep77KeX?So9sy7VRbstdj&qTw9&OMtvDsyK*5}ySDeJV$H46X zUB=P_pzYO(4&>MR|<5;x??}TLQQc!d@L*wcW}VVkC`>#ePHGZ$WI?w?I+>Y`65} zm;mLfAwS1ae7|bnv*7WjJ80w8^ zTdIRshVd{B72zTV15OMv7wVk`Xvm?gB^}t|bFep0ymo`2$2qs59klP5GHk#t-<@(Y z4}+Om;f{xR{aGjo>zm0wvPyr^{^txh^I9Lph~t3J*YjaD?`<+Ver?BqZIRu9#H**E zqX#g=^BknY>?jIiisx)7j}hg$TTkYKT1+p-;N}z-JS$yDTuvT@JkTSs2tl+1#JNi7ge?MJ$UZ*f4F`abBvzMAxE)da%A+@AM7I~hQd`5 zZVU94D3-wvY$fOy*uw@MYs$@@{oSzk0r6N<{`G89WezqOG3}8b_WlaH8n^EfcWPl_ z-VfkUO|iM?`kfNFgWo`q+}1&$s!`s$Ta@HjZR>C||DSVVZiSI<@BJl&{6*8Z)`0l@fF~_tUxJO2UTYQxtEiqR zszS6XkUWi`9-rC$%aKKEp+|&{+I#n+qiGA8Hp7W_EjiJusiLE%5V`78k1gWyP5OGe zLRs;Y(;yR2(TcqnraS7I?a62<3VMG*4s%6&q0w20Er(0ra}lnDYtED3h(c7NTfF>+=(4J$EOPehZM6{^^xri{hF_dX;S??ZDfH`yB64*5?%o1;b z-~hWWL}6eU1RX91H%lJ0vCv_06!ZclD@ITkoD)Qu=#%kRA;{46(>No+j}5(k2);2; zcaYms?9+sMlEf-{fv{yjw+L?g56hW)e{1h6fZLqPO|aNm2(gNIQH1LBvgzMs&q9oU znqiA7NW;SxBNq&^CSorDALK0Ko%`JBy&Zs1S&@6+9&{^qaH~V1I_e>1y@<{5Ef8}Qi7W0D;;FO`}G9db(G zWg(WmjqQdopzplWy9?u~m==P)nt~Mtb%?AAN1MV?|LF##(%>QkFkup?6u4aS%MG?< zf(tuZNkS7b{1PiDbbgN;?R^=C$K06^6<5((?GCrCQl9VnlffW~zWE>!%Nzh8XwbO{ zONA8z(@1H)Nc8K+<)9umt{{dUkwnA>od6VbYJgEW>B$)16F2t{o#_LnCqH}NLwO6f zHu}SgnpwtkZ6@ zRzcr0#GGCR{##*S`P(5pFYx`t;^EpwKw1nOY00G_ zBNegsFh~+h@L0y1D*Vzy5R2Z>`O0EE95A-@3KO4D-`j#A6cukJxLbS}(-K4YM3w{~ z-##N&=&tLH0D~77xlgzy=uGL$(js5@>;l#Lk{n1u8n$7Oaks*vScR6^VzEuC%{tAo zl3}3=W&%P0uF+l*KH^NPtoQUaYj`UYSVQrgufEQS8e#=>|If{voP&RN|Nf;zptq$1 z4kiVcx8#=VXx}5u?u?Lq2sagOjs&OzWrEfXKmmAX@<1;wUs!RQ(Zbc(L?-lt_|8|0 z|IsSAOu~N>^4Gek^Z&E=?$J?RSH7SmUJ}nv96|_j{2A;>7$_kye#kr`3vft`!3gZc z3Xw}vNmN{_lB*<;Lerrn%LpMGZ1b=Uw!y*A7>wfw*u3WUT6gZ9xoi5~S+njRGjpfc znjWeo_3fFyy?SQWteLsf^V@r$bH4L^^_7r-q@C^(EUD`I&U2rA_Id2Rf19DR@&Jfm zr;HoI6u(ZH+#E+-5%@EMrD_ybV3Lm|e*ggaSh7hi9>M^a{5m-mR(T7qJYx=D#j#po zwFGThrNbBV!&E4No2%AH{fedA?^L*{-WP~Np63k$_vU#6SoAz^?#=sVMcy~}<$ZI1 z-Zu~AeeoVGEZNNr1M>M;aWGm#&V?hQ3ZJh6GQHwSP^hEI$NMV`3HSO&WBXY2dXiGJY%9_5`De#O9;y98> zuA|ux?CSems!)+cM@HFDXUEN*u^5hrz?5i;R67s&6DQ(IumF&_IiWrqGE;Hh7TaB- zsiM)6DW%5fb@SwhP!^&{2?V7q-`A64uyl-HX`$gjyAWy9J@&v46O>&mR22x~#$!=S z*Lcb?YOQ+bqhv(`eB5Cw22Ew8i-DX;s*;~$(wCBYHGVjJY}Gn;1mh=DahjiV2991D zw0ycStLGNFWR(Q+Tg?F4rw2A#6(lya6;^59@pOx1=Kvjynu_I(ctsO=E0BLD{-i>< z!tEg2IaXJK?LF-7mgP8goFY%lR1Z8QHv&lJ84u&x#nERS&sv4E4y{=1gjVG1jbsMK zy$Nl-OyPR_i?sq++pmHO_CMn>sD;@hrXf){BsU*!GU9*Y;U~o%&z?M59yq&&$+h%j zCRQ&s`wRS0q*1LTN=ntFSIMt*j{c)L$>U*8K|N>bLr&BZ(hv4aDHh2mqWe%J2KGR*Gh!aP=P+hc!>h7Tn`9I=g0AGrcoot@M{VG* zB$+j_9jCJL+NBEw`E**L(z&m=kIG#`chz-gk}&e53_+v8o)Qus;{`TFskmo_^`ZDG zxkX}vF`^Y+^KjeEw-6R2oTbBEl$pFm&!3fm!)|7`@70byXl@F}neQFICS1KGdGO{N z+7ROtgujDz7uduh#_zM})sC>6p=muzTc1XoXHBUn9>%%+p>8WF?D3ccqMIVx5zN~Ur_ z@`M%4j>xJo2z1K{6DF$leg|s93gwxNUsjwVYbtNvL5f zcOp782GZ;YP&07B;!Rpsh3O8=k;EY^z<`Zu#zH}XTl9@+MJj>^%~&FqEfikCW+{R- z1xs}W4Xq{@%S`~2;2c&Hi&ZRLj4KAa&ngUq%^~z{20fK2@qi(8EBVZi%2P7$$#OyBX-c0*cV7DLqlvX-LGS zcmQmYgf-O2+je0k?6iGtkmuYIOpg|);?4$Ny`gAIbtT?v>Tz<)N#Z=Ylg$ud(UYw3 zwNMWr^7)I$-81z-H31`ofs!>(x+*l2j;i3l*xy@S9=$+ce?bAQ$=wBGW5fN85opS> zmgF0Ip_7pZI5k)6f2gN|erYLN=XP~YFIu?=cY%j_Zbv?~#Zd=bnEKs!^c(uz9xm;+)OA61M|f_CIs zqk4uDSLRd!A>9Flm{qIXc}9|2eCif#fz)(cgT zzkOgcHE9sI#LQ#EZ97R85&%*(Wmu|NDZ=#nWaMBQ9O9xz7~(juml-3@XwKv|pDcO+ zNifRTn-r=S(mU@{HGZDr)n=6UT@`#%qCR5vz*@$C4e`~Ul>Ej`=M4%m&dC&71Dgrx zTEj6z3FXs6=O6P72lP~mlCw&IY+w-I9i`Utb8QY260Zo8i}ea_Vw2aOjyJ6^H}M=t zs86{^I(_!4@|+?4djrHo>K-Nfo8Bbr$*?m*cMmy-M@AZk3&zH9lBE-V6H^u*QnOPd> z4gJ_zm;2t@$8~obshZ@O^qy0pZikkeYVKjVV-Lfey|N;^FjdZOSoXr|Cdf+;C^ z^CW@f$0h@BV$EsFA193UU|QPMMw3l3<*;oe1(irq6X;aI;WzNPVwc>FEW`O#w$7@8 ziltra*RSP&){)Z7BG%zREp`5Vg@?RyO(}M;PD2-jy2PHO-Ug5!qkJoAA4iZIx|eDY zf7yS6W8l(Dcn9Eeu#s$Qr)_FJA*RkmK--C9X;TZAWT&hl&PN;Y3Jlm1=U#7;>lBNM zsSvAF_so!I&@p*`FN02pvBHq!W&`^zIR=ky$QRwhA;;e5pSx!CpKSkG|3B$p6ybm2 zr$B)M1qu`>P~eY=0*4<;|A35k-cJ?%zh4KNn;BD^V$hQ~Ym?#DR#)lIpLRqdxZd&` z+{9oHsg4o5X?H0nvC;C6-`GZ#KlZB{rJ6ElFsK>`*hin!e3uWl_D`KB*Rk47hdMLm z`NppT->T^mHG_twV8^6}npI`SV9T{*g58Z+Gr&J3 zz>bTa1{iVC;{XdTdK_TBMUMk)x9D+z;TAm(u-c->0VZ4YIKWpAu)L{)sjq5vo>F;p0v=0 z;rbuQT(x8lM5WSY=yFR2P>HxG^}Ju^e;@Ahymt)|D7S-oOkt^f<_Pl26<$F%?28?- zDXWEGOY$jMxt6;R7P=Z`DUp7YmWl3~L#lXRpCutlODPl*f=%PxQhgni3}joCYsHc` zDR+qEGB<*!5+L!~0@7;%Db*O^Y~&?zkG;g1vI5l-9-}Q@a*fR(bJ79q zz%s;YlG{5MfhL%DNvw5fdU2o_$hF-y!TslCjRIrMPJ?OGx3t8 z%a<&_F-Md@)9l>yaG(Q9-n`>K3peB~i>*9z98R3;WMK7^bz-|ta_^ySW!}aVoJk@< zhZE&B<3FF!M(QR{D7VI4B$eaH5oD~rSZV%c^l3LklV>`esgY@7PwKj6ZkESg0}76^kdq@d$V}9^wuuk zPG#-r?Z=vhM|;Kxq1^MLn^j*#1+e~2c|ANB==C7;R3VsKwm7*L5(RgJ4tUG`(|1Sk z@SR}{lDE0{1Y`D&QOAGV$>MsRG3q{+mI>_vQSgqq1>OHnN?Zo)k!$MN`|=TC1*&#w_R^6tLvbBg|p{DCzkFrVN`Le3-jqD&aXain0l z#>!5jQ41oACm1q(7&Hcy$@3!uHIWU9U*Gd9)TD=CP zKxQLe>(Ir133ZnJJU#UO0RjtQtU+Xq6;k`Mj%0C4<)FAHofhrla_ zPMrnzGB7~(z@*iqztg1hNNoWfqxenvW8OCKSj+S*|o z2k+E?kr7mKNp1|(C87DcQVbqfBNa#AOqcZRL33)-HE52v{`@SGIrBl@Ai2aMc0+(s zI&@ftNe*fS6Xm&wd;S!yXzIUXPSF)=#fG>gNgsofDc{ zcPqJhrg9`BfXVFJB(I{L;|H6BJ)_ zKTw=wLUInf85kolG{Hs9KKyZs;pj%cxwU%FmZv@yN*D9?043`=>IO4ocHU z;S&KZwG)rRC6L;g(=XVGeQd(QruW-DzXF@A>x;}Oy6ls{>qupng7DoMjbWyU0EX`f z^DMt?29g!2&`1U&fxUZEY^xluIg8p}B8QgS$m3a0`5eM&w^AsP(Nd}aQ<7MH86~~z z{L4xp&h{|8=q1DfGU6mmUC?i3bvG1H3o>Uz5_UW0@H^b^^}x%ZMXG|<>xD?f@>G`4@*^2f;NH@nZj8*DzD*bz(-0bpptVSbg#uZ_7yHs) zd&e^Bs8Ej6p8*$k=;Ct-h%77^I3|)3Xr}p7x?`e>J$EH<;@km29>M)Wj5le=bq51k zvIB@{e$w7Sjd?UEw;){hzma+G07QWhPbybq!Ly`iZci7+VpDH;PSK@&vt)BP9*GgL zF_64h(Nl$<5fmIhba@nOaGpsMj$`E|hO)#M%n0<;(N{O-Cz`d^zO&jf48)OciTHVI zw>P!$IEh7(mLg4In}wbk>JpzbqxMYh*#+Wk=*6z-lBvf~V{~pkb4WNu5VZ5QDTpG( zW4xalMTQ3vgYwBFL44hFy?N`j>3}@m&Ap!z!Y1o`cG8r6?k97KE(WnlGx-`JYc$1l zg7^dxQMQ%}+*}f>NTc|VM2WIYleEfgjgq(~Y8o9INfuKM!o8N{RHMLPw^2WK^@62UmtQ9}yuR1zSRrjfIdBOGog*C09Ob5=bVuff$ox4M}>ND4JOM znPJLN@{G!mp1G-M$y`bL|Jg+=i)Kb=luchfEi!dq*?(WQsPvO5e>0_J^50FKHYqmo z+{7PE_{#~iOFD~xTJ#r4YJSo)kKBonlfddO+k@!p!-6^7Oyz5yCCJBm7H!)Zd5A-( z6M`;Thk})1^@FYIPJB|p*fEI1kj_CtFOHv81IK{6guKjf`UISP;3$Q4czJN>y^HvO zV`E8r@(~9unsXb1V3wgp4EqCwA_9iy&l+?S7OIJ+C~PNDF-&eOY+rTot3NMmPf9U>dT zIv9plQH}vB=g&1YgpG+Pj|6D0-pC-jP@Wubgz)C67?7@S>SI;pUtvhl%2JenX(hJkG!AEz}HkQqzwgB-UlH9~l z{7)j#UM<}akA;|McB<63X0P?*(dDa`{xMbjKu4+CLx$wnx~B+hPNM8c9L*kECe zki=`STbk)Vp1DYIJRLVPwZ8w0p|9TK$DYd3lhz~OBaC`Lqn3iq77N~TY}Ck+c?7}= zH2ku%lvR<%>$e09KmEXw?*f8#_U!bU^n%i|6s=`smB_T;oRIsVNVARt0Mu2{`v6=Q zlf(|XfLIxcF2hPx4rU^N0sziR;UWn9dFkS%p?bSe!^EI=CVdcs$HY^R2n!q#a`93Q z$pcvA)9)b%(jt5WvHiRwbHVmYs?y&GLtbVek!ZFjl4{k?U1+FRVSw0Udxb3`J7yD` znD`F__agBF3C}615$j0SNy(w?!IyFR#frw^OwZGV=4elu*WM@A`QR&nc8}~k$Xwre zyewiTk2C51Oxe_ki%^@Ah z9zl4}5A$^)bGBCo+H}d0Z%+j_^xX7>NO4(}DMV^r8-b;{qJep(DPYG0SEzy;^ynfW&DqzleYsyp z1& z1Hoq@my?)(xX%{rS>4*puOKR2w*Ne0&HzDNqBGI?iearK%mKt+Ks^|~X}gYm3xa0B z+}0?1kb-^gGZCz+9Xq_Fthe55=T-J;f2*Gk(PYhi>Qk=vH1WSAMPl20R@8Q>g}*lQ*kJhJGP$NjaQ#BW0AKwciYE?W17`;#<;M zF6ky)D`k|XpE~jlv=(vL9!k%}z}~VrY!WXw92__eI}6%mQS<}sr((HlFa!;_Avm+a z)*d?iiD#8Q{oK$YiWZdBG1;c1w;lNt^bX-OAE%IcRle&D-sba)tVi0Flvu#r)N&I= z(FHip39b-W__sv}TpSN28cYaLDt3lbTwWc5V_`HzFD%-T&aM+CGaKYMCS4< z8H91Ta1j`L=tjPhk!5oFkt4Ivu{m?o8`F!>u_n4HyH0l~0)>6CmZv*hN*$u>wM9ZI z&h2$NgGOgx`xy5_qjn~!Tx6Kk^YbG!X}f@;bcKPL0Hh?BdpyOp;>|Bf1aWE2 zY8}S~n{?XScUYr@tvTT|sZ}jNf+A06J1vErZQBNl<`qZS6$E~fU=k3#2tJbFtufG* z3DFS2^diZ{Bxd91YbOCbqyKG=&0FFn~K=O|DX zDnZ=2D`!!meX7Ww>WA77c_;SXc4P+Vd&i>Q${qxU2Yppj)E|8zRpYd%3sX=c+yTx8 zCK63eUQ&prw5(vlrpzId9wuc?awm?{0u+r%Jki;@gHBD&a61HQ5Q3r+g%L*unXr+f zKLRDXpBz1pMCYkYZs4RyZDhD$81t&B%_Y`L&LW3GN{i3b2xMSO`fZ| zsVagC9a*_P3HWw)Fx!8KmRkORoD<~yA1Ru3=gbdhE}8M?GwP-voc1rLEtonub!piL zWs^%cPI-IM#}odS37bluEPkWt|0{}^h@FV*Z3T)Aj4G1is5&kA3AFg0mCBA8xj38{CHH^t-$++bfH6jJw4kT20j}$ z(V!oxYMJ3V3>$|Cgk*@3tY}3_<3LJNfP(V9f)l<3YQudRlv&XKWlvsmli4iE9B0)h zlm}re(jABHCTY4T-9XVaYh(lXa0KCsqOdAtXDa<|&1g|b^~ReB>@7rsZ0g|AD#ofV zQ}%pnX6rkZQNwADR*|pIvQp|@fvFPxE>Hi-p}WB8Rr9(L;jsoAKb-FPKBuk;(qTh$ zo_$vUPvqtu3nvBS`a$oH4lTe~%&X~L)Vlz!Qi#DD!|f}#cDDnBT5LO35+-51WA$o` z$8~vKm9fXc*n$6?R6Gjg)eagH$i7Hdm}Df~-0Y$VYY5hbd#h$#_u;ZR-ikMpU$$L* zVH0=isTn{jj!1KGcOpTO^$4pfaXr$3ZCeMgj+9ju-JR$}$i!W$9LRco1%Oe%@$O(_ zhY)pG!j$Tok0`hvqu}teKAy+j#p7mm;YSHyMyIbk*V3jVsgH*sh_#`2Dz^w#ulq^+gdffxUqm z)3FSxDe8s?RhPi$t@=k3t+<1T!Oyxe0envU#W^PyX~K<{Z)9~oy861#*y=8hYjjQd zxjh^I_*yLp9AP?Cj@Ea@0X)o^tG@-LHzHF*zn{^AZ9l}2-<2*ubSH+q2Dj|#GJ6rI zrO4A*r(i_#aG0)tXeAf}vzt{Ur+~3Ym{D>sNUu1A>vvkO9{M#}3cByA)4_|@^5v{F z(p|2wqqWy4${}|_xE#W%Ioc@kJ)?1hP>elVJ9u87)gp+KgpDv+J*mY@W-4ynvTuHo z9e5}6(g3EFx&$TJ(@N3ZU`)^c{!pK*MWir)Qa z;lV=!J=l7r_P&SVFr#os`nE&3t}b4(q_dL>M?_p6=tmO}Baswbqm!h%SSjCEkAc(u zMT~{NbMkyY{ry99x4mjjA_0jTdi^1~ z6kqp9dIqA{>o$^QL2i4bl;C%H+iLA{W8DAX{CS%`*8JZ~|M1XU^yI+?-jJ)FM1RFw zsFaRE;$sE>>y^#j@o-zTX>2T7N2p8I*$p|HY*AO+^dEyBA! z**8yQ4h@1hSq`{s^5I--=cC)0Q)h8)X`fo4z82+Y=9LezzZ7bNs^1p>|K6gBy< z3^NI5Os%Y}R9;(TUhRv`PG)$^mM&XLK%vX-Q;F$vq6vT>?578lh-l2Idhmg&d+!4f z{<0rF`z!*5w*ib<#m=bhgxy$Mt#0DhaHEEg_kw2zB8BG9d;_>!=QFF9m;22(!ovd9I81fVSJMM+FL+PS?h8c~<|Z3BpKJJv8Oy z#sOcTNEd>{YHl?IqIfY|!|jOO!qNY@Vet9m*+=2ufyHMsfo&y`m7Bbq5j#FgoC?kk zA-qY-t({sBYC}-siU=3=aDsphRTvr=x1gx%ADN`WuH3CPdI_o1Yva8Na ze>E-bXA}q??n%{7#Oi}iu+Vn}7wSlmLdG+oWF@*Y;$;%Rc-qB9qtA>1VADi|uN2F0u_C6ktB`g?LsI ziSb-D;d!tPk?NU)&2=R;MVQPQ-3@4wz8(ut5g1N z%JC`pO^#1GK56>Irzd<_@;4<1OYSbdR9sW^ACT#KKY!Xk88{79>2-5TzE3TyWBX6= z6ifU#bPaUvS~Cvo-P2&`V*{5+mpXAWggzC_3ZNB3n>~`#HKZ z^2VD(2R_QYpwMwfUb#ZXFYK*Pj%%MEfQPW|V{3m2Dk@LkJ*VV*)W?nC)_4>Rp-$DC zFWVh0y~N%n*$JyX2ad=TJKk8p#9_;Y?$yMblYk?103s(vNtd4LFXo!2`D=oc9eG$E ze#_*{9=-zq>X9QShTnTG)BjrL`A=y?FTXH!`7C;3w@Y^;y`jGdr7!9MoYlXgemLtB z$u`(Xw|6o^1T;##DMYKu_NFnMA_HciFu_2_Nx{mLoU$n2dK!bpY^}`iC^i_`0+Ou} zj}OV=D7?Ao8JYEfE!(0nXT?`4kpxOgoQzUo5Chq$C9 zc1l7+^NM{0;<%z`?wsPerbP~xG-pes6$F7Opl|X;NJ`#;?Hk}NkV266C>H2gghvbg z*XF@ZgcHL+78t285fGMC;74-KV$?@i5huv8lSDNPsK^u-#o?7ZYEc?@881cBY5NG_ z@&5F7v{lFmGhzX>7#{4+9REzWjEuZJO(Tvoy&&o`TFLO)4?tr$bP0?R64`}ayYQl^ z1kjr(lU(aAzhX$YX&;~-i|^?9^_=^dM-l$JtH$jjO9k$PVny*x>ms8u#m6D17EXhy z_DEB-rJHD>;u$Sgg0!PMhFxfLq)BTqF+DVm z`v@0rQF_jtl6l0Mf{QAv8d*V;)0)_^YwwkMNy6T4jBXI^AfH{6cRNNQ)dW)tcqA%f z)$QxXDR$BB+&aW$8m#3lA#(`MgTDc(w1bjer*3-s$NLDaY(Ysc(rO)i-LnSmn^9DE`zEm-5kN0KM2II=>jGBAyb zS-%)ALg8lk2a%8zc5#^(0x!-}m<>hAcoT8~-kjV#%}~xhf)~4+#7kK5z~KIom(OYs zxsl(z2m^Z1#C{3p5)x$&eh3zmS9mD1lPoOp@Z4wFPv0K;>Pz7`0mc!o5i3-z>&5(%}v)HyCNPZAyP@ zAKp0#iX6_^0Do!D|M6#0nzBB(F30 zU3WyAqU~7QVacozqUtpW69zBb));N=&I_QFv1f|5!Jr{16NgJXMgu%ApIKy>9S`VF0-~)m))6J)qDDmv2<-TI zhp85LEhlK#rWR}=>7IShlB`JAp>6g;3?~%$V5?m(BjxxgC|erC?Ib?-z7F&fUA!a9 zJ-D4b<9Q?k7xZQO+R=dWo`>cX{ROTEu=7+fJ)jRRbvk3XJTN;L*{BdoQ4;$XErN+~ zdOfF$7$ZoDK#~+i;4I6s14kobSYm3T2I{1+sd5YhxhW5lv_{}O#v5J2_hUg6j$x~$ z81c@13AB1q&up|Baa)JZTrm(5v|)j_;)(qbhU6;@9y{@T=JMNS4L57GKp~NkWXwB! zkSqe%09XNE+fWoE7CnFM%LAwdB**XJ{*Q=hUpRu3i--`zci-C=M0B<+ApN^4 zP#alzFo>dZJf#ggj{_e?)3f)rp?&wKpGEr=5ih=kD?@e2d<`F7hrm>zUmBtVlhbV$ zaOU6>u{hKB3ETjr`$B(D<3JHZbVF;G`g?)zenyCH;r|^fnpHmY#hDXlY?}VBr%#%8 zeCnmL|E_FD>ED(vp7QDBe>v$dCjO_16DQ0nxwp8b=+N~J{WteMy=Cwh0HIp29PSq1 zC@w8}8F#aZPC5aE+trC0pS05zgQj3e1rGv}y&YsHPFD_hJg{LbmjDe&b|cOv?PeT7 ze~=R$x&QDntz%ads|W=8vz>%#n(7n>#6+A>1prn==OvJxcIb4(gqP;XUf?#o2|NKL zfJ24A=!;x|J74BYIP#tbj6McrX8Om2+X-6hp>$1plCM{5;k4}bjJ}!P)!;tqr>1#0X*X6jJ620xyQYhxBtk5-t&^h!bSHs1QsEw_wgkh1~Uf-f!K!$ zhiN_Xa)0Lh@6gww{a>2nH1@}I!s9-nH#5>t4*ndyS-vK{Dm_Pfvz3%7ATf^(?rLIg zk8lFPche_qlD)lZPeyrqr!uU~$d983ry* z|8nq2bi3-IbdzRayW6*bg9Ceh<19R`KKodB%Fe+jfMB?AdDDhm{ zK_=}S+)C(=4>bUkhJ|~$eIs~CPx4g7$jk5m8(vWnQswLzBwo~KQy$Ez8aPl8@7dzN^(9S9z{*i_dq z*rvrhVCoXawk^IS-iiHNeM=|7Rd45OExEA9o;3vjWZFdoLXI(xvAZ7XBS>Rh+yaUY zr@x`&pAkX|lvW=AUqu&UaLh{569yjxwdURbY`Cnf=p#0Mh$L%L-SMU;S+l5={0gR- z-(&AZcyO(_85b=)wxE1I#LXtF6;&xAC<(J~J_qb&+%+q7#LHLFUTPpeA3Ae%=*T;m zeCevejiBV*JF&f(Pzp*)O9hn;bu%%;)GAzN0-TQa?QOU_S7(rfx@fg)rxUu{KJZ~2 z7poDdpP+36KnmJSgbipT4kzF!v@vt3Cwu0d;j^cP&K?6PW$#Za49ZB2o;>&{aEU8t zrze1T#Zy3)c#1GPeiZH43N0oBiWo$9?bJ`ZR8AR_#

    P4Gur-@=IVR9o<;bokC#XH&lY@CVPG)B>;O{6!nphtq!Zma zY3X^vxmWg~RxMnK6fL2V)Wd3lTJqKFNIN_C(oym2(phHa?T>MqNE#7YYNu(TrH56H z6v90L_XZecg+`3Ou#r$fB|rj89MejTTdbKNov`3997a@L&o@8bEW!<`l(`~S3}=ZmKF zO_@~je#P|inPqR3#V0>ExpLC_(myG!EqS-(`icK?;$0KAjNdTsrs7$V{}YXWt$(`e z25&`ig-LC3XeDvT$D(@$M3#I`J z4KjV&j~5OYT;fJfpN{1Y!WyzB9N_Ta$T8Nf!=9j1vwU?Gg@d3>?E3cLEkN(Wd0o>p z$R=7H243(Ane%ZB-r+G| z%jVidFl7BMQLoEiW5HAIt9wOK7QJ~GRqWp4#zPj7vwizTU?<<$4jaJIxtCbhYUDH= z^Qk%Fu8MfjH1BOM}IhY6YD)KeGCOOab%fzwLnfodQPB*I*t{4f{-g3 zMFgupsav37jJyN4$#z$bfXN_#ot`4QrF!`!)<(#}X}bQ)9Ciy{Gn43B?n zB;O2#irxl_wcX+wOPn%WlH7M4Xn0+@Dpj*kCWiM-e>q znVU`7?!iUCAw2e>TsJF1lb}Rqb0bd%smC$&!qtyK z-T)Tqi-k-lHYsiZmA>C|vd%ln7qLZ*-in8N%Av6HzcDE_xDc>u?)&I8m!kg8RDDPK z*OUAHiNOUV=&8GQac?2Mul4pM%u0=^Hsteb4eu;B1&gM*|Bb>k&fmNwvuAKV3#iP< z?9SZH)ks)R4z13ue+w6cT*mxu#!5rN2l?VELfa?AU{bJq8H~LVZWJ$G-exF9Z)G`2jR z+U1uf1o?QNj)#UwJOLjycMePOna-&BB|`*J|Mk zHd}GtW;ILL?nc`V&MgG@>p2OI$&CkxCtb-lBoSJCUq`a76L}_y3vs%Q)65f>CeANR z1Uh)TiVgB!Dx-XUKcbvU!WnimR4Ym((j?hd4U&LgF8)StNr_Ye4XpG&TK^u;!OQRI zQ$9)EK61KsPBlJwplO!H7S)anAKSV^GN=Gpp+xfp@lWPK`%XiS{2lGnrU=mU8t z4^_vIMglq|Gw{x2Q>*QSOB&cGz=jz&XJXY)^3EDZi&aXQb*3P!QyY8*@j$LX z>9{&QdyhvO+TV(xKt_`BmsprAdh@{KusH^pT07ccDfEw47#;pr0hq!MYGDXj1($a= z!sj@&&@BxDc)l$wY^YWC2-M<_L#+$f4*at~9B##k>ejFo2Kn~ts)g>4tfTo>rJDh+ zr1HMVDfhz~Q?2|e{si)k#=fN;8Z?@g5b9gfB*)yH-5qVoPVb?z2fHU1$Cue%>Ejez#hscoqDZrkl%_0Na&SBP zTfn&XV=%5DnNHG3UE)rD`x{j5$!a)~FRT&j9QxUrJs`JpFTMiZY~XEgc|AyjgV7h& zbPLx97&&#cKre-1SV(Vn3q$8W9t<8LR6@U$sEEZ3EqfFw`@Z&k6ll;YYoHRGCAL^h zM7j-#A&=8PFzsZFSgg)#6thCv!Y~J0>8Ft$9N z+b4dm$v>Oiws|MLI5z(RJ02UFf~^G11+nFMK?pXb0G$t?!B(cjg@GPzAP3jf+opbk z$l+m(%L+CK^0AuuvH(LS--?CUnEcj?2fovJLF`Fb3wh)(SsY*N30$ARaBg z1^?U{CKH^gd=<~;&v%DBPA&{!Pd~0Ld;fN<(K1cbz$ydo!M4D`7epFSYq&D@B(YQw z91-1lx{m=G3yQD%{Lpxa_Q#(HjGj2*);?OWhG$-LcstB zi4zkk1pDPVaA}2pw60o(O^G-$T3G)6 z@h3*UQ5ek_P=(?^#&?*i&r}E8>EJzyXcm0kL7zFJ;!ebF-*m@9RV5%(UlMTvYMul0 zhNqo$wVn5GYpA{O-O`Bi43$3q&Hh6tf858;` zs0j|BSw^Gj8On0R+{>JD`;5C5GDWLu4*qJ6{XqA)H8U}h+;c|{v{Z~?*EA<34H*nR zDE+gF`=~kT*T5PGw7n?XHlb21+KK|sd`4acdC&Ko!8JrfSsMeH$pJ~VT{sk3-es6B z^m^KDJl)Z@9jV-$BsY2zg&RF_->8VKnan4<-hbP&1WfOpo-TN%5bdprqc zNqsv~E5MQ?Q5U{m5#ugD-474D4k(qifqskELw@RLO0-qq>;XubnVF7l(@pps=nu7p zRWH8W2M*uLGXc0x^7a~N=pV}e*(%R-(9gb|9q&9b;Dy&A-PzongvqbInt@@=g1Rzx zV`$z6ggnvQva{oj>5UByvDLAvHBGQLYGwP_W@e#(80KtTn>O!GL5q#+dKJoXRORxP zssJW{XsV%C8WN>hL5ZBSNW9VV(9t{_8s*kb_8(e@{3vg^w=mTZm42KDzj;sWC(Dpy zMg#{#No+?6ga!x6wp2qW3ip_BHTN?>V|0qEp6h$Si<5*B*uZzMo@?A&Bpj2CPmmP2 zOcor1Z+rISay4&wAzy*9h$Cx%gh?gD55vnLp2659)(fW28%4*?UD9eZQRN>&NCjH4 zoo!`g5$zk*;THZ&%K4UqX%tctxVJ_!!KvLAY5nv3>cfIR!;0hVIv;K?6V&q)0*3)!j7c0os=DB$G3g`fY)hf%TJFT#ndv0iW|ilzaV(bi zG-lO1hR&jJS%_lHxGW^<>qIGCa{c&^$yCdxB#3}@w0x8zjg>uciCJJJ)Kv^#_sLyh!SqNgK5TAT>bFh8*$(Yw2Yx7h4 zTHW%+i?_@+FUe$Jv=qx*-OUA`tZ+~08SpiT%n}GJRFb~N?rxi~V%cI(C1UpOD4aAs zDr;1Ap_1F0)>f3u3Gq2?a4+hNW5E$Jp;w6Ns*$&PhQBz`+zc{X?G`ufC;+qdT(+P4Fp5jYm}*t!MR(FzyB2%Y(W=N(4-+?+z%Arl90 zHi%uQ93kmK&s4ukU3RQX(nXsW{2JPKu4!uBnW$c}#7@ATyke&hZCc~kw=yO{5Aj4A z2TS$!@=tn^gfQSAtS2;YiH7*@8v+)dd&v>w5q41lqzO$n150^P%7S0%3o_ zhT=-WlxK*4_sgJok2H91K`{i5#s0)+fX}#pT9L(fyfwohwv{5KHy`^+|J8L5EO^d7 z*u;=?q#Xv+TOjnV2ZES5l@@Yd(e2zS7xKUiJ@&sFK}>(0?kEf5Y*7t4fn@0uQE!Da4NAof;P95X_%@#XDU z!%bjqD`Pb`2gcK$nW-6h|5w62RX*j*sf3)|;%d0kTF1mxInS3ii+$O}l+R{GxuiL} z*v|*NJuEVx&e~fTZCX3}xy%8pw+0SkaE98PozHe-y&jpH8&)=eGkYY!Z_B?xhA$vj zcA`$sQje)|Q2*-rU!%y)o3hY!weM{|D%pX#{e%}g$c`la6^ub{L4!lZOqKFHBx2xj zjBOi|ukQ*>kU;QHhz{b*7Q|o_%i9#zv^IN}UgG2T>}E8|@pUG6Gol5t6W7XvhPDcm zmOWUlZpI$)ax$BT7CAQmqT9P%(m~wbF&x zB`6os;OQjI_5!>67H0))JcKjPqD73l{^F=s(eYmP<{msny%w=p=tQlD>qncOrVckG zL=>u^`ex6aD6Ujbt+DT^w=DKkVZp=^2KiYo=h1>E_Du9$<9U7t1Pm4S{jx#TXtF_- z_?L3xWS{mj9;Pn>WuMh4mUu4frP$Fx=<@5y_!LJh>~fxai00Qc%%h36t*Slq;V&O| zvTr(!@&_xvo3mZsGdxj<+dJaz>(|e@;Yn#0mprJ*-A7Kd$GlW?(>zd714~U--@G7J zwYZAe{T@I#PFpRi`&7@{dp&rE+^5|=IVb>lw`E}&VUfbh3Cdr>!o!maWn1#Gjz$!T zfX)gom`;u`2ns#5vP9me!Up9@=%TG9SDA1}xfk8*Gy~4L4_`*SIswruxov63u`SzeV_bbySb=3f1t>)JPp?T1p=cU9R-%E)-)lQ&V;PqkUhr;RuOA>Nz z=gxy<2!fG+7sL#ZTJA<&d&r@XPMDjWOh;aUdtUggFqgr&o)1=cC1?q-0S6gzj}W#) z?`jGJW<)r3lF$WQ^;E4NBAKAGo}(X{@;xy#HhY!79m33w{2BYf4=fTOm0DWJY3?5Q zo6CH{O?Bz}MavgmaE^W}Y2UlE6B#2DP0%*ACdZn+I_IU|KrUnI%mU^BqZ0C` zueRzS|8F8a!JO-#r@LeE&Z!C-x!DxDwzHW}7qHZKt8&^T{~ghj|M+I;#^~LB!$$Sd zZoff&9!B+rK?7`ji=zf!1Mjjy=|ep{-cUZiQX-659*UcTEMrMY*01DnHN z9J$C&k%AL-9s%cUJFd3X#)irf*zH#n`aQG-1u-GA8}l~g@CCObADY1mZ$~y7^Oj`e z(YGaASc>Ln{WI3>$<|;%+;UKR$?g>ACe+#X*1&W*rcK4R1jl>(@(Nzm3ab9hYRq+O zD?c4@htV zixJ2#+C^`)^$*=5@_IXYlCTOvu0LZeW$AbatTurhCLTIVmW3XKg}d|mBWQn~g*>Qc zP#2LPfN&|+w29Uww6Onzc8)NJ9m&n=MC!i>+Ns$4AnyU*Rgm9k1r1Hm+@ItYsN2tX z7qmTwjL!Dwm^e?vZ@PXfOHt*kJ%=!*Y%5?r%8S~li^Sj}P zf+g&bhA_p6YZNaL+dSVjPp54C#m&6kBy(pJ^g{~w7;LXjDSqcHk5IgR>^nY@KIEk7 z@4<8LLJCH$9HK^FpSKt1i(HIeT@h-mnsru$*anr_iAMCD|s0G8tQ= zPbEtR0wobe(Ue54$2uFIh#ZqY$&7p^HQT%&V@SYw?kBGeo$PT*oUhGHAGmo^QDpY? z%#2Qqx|5zLc?V@ej=V!@9^nM?R3P>QK|lz3mR{%?&E61)5l4EiP)9aF9}0 zfkU2krln_1EeE%N_|_{UeLq8P#>&i91Irb-asnsmRxbuPBspdYPJ-Xq(u%qe(v!iF z*1;S3>IIZK8-D6tqyZfrs%e=O12-Y5_spr8Wtq8=(knD`MY4geHOS;EiP^az#6+Sg zor={ZTUeBkyO1b!vbe4x(7i3Lzo^ycIci(2Y!Jwov;zHHmmQ)ZyU6ocpa`i zUZ+g-dtgxW=c0Pd(2w>Hz48&<@R=F)(9^ooL&twM^!f`x>C~=@fn@-G&fKoanR?)~ zIfb;#wHDr#6D|*Q z>$tJRN2?c+fB17>z5(Y>rL&PUN3fQt2I&aSWkOb(VdBKFcHp_6JgTe`S^EbabGihKcdBExp@_GENd;=IN)I5fccgOZRt08rqSb(bPoo3S&PqeF6T+ine`WWd8fDZgw+tYKcVx!Y zhc;q!nXSXU70Bf7y5%kt#-n-iCE=`pKH>$39Mf8m4zs$Veqb^BpSN^vEl>ROqLa{y5Dz&sxZowil{C9e5;W9DnjW#P|${L3}c!-!jv;PczV`3APYgGhZm)jQ!kGkecQoQnwdK=52&n~o|%;yPvU{`vmW(_3IL`6xsAjr z_zqfAD#H{=uqU+b(g2C_K|=>W2ysO4OJo=i9kB%0N-8B?GY6^xXyx3l@~+7QlvYhK zXsXq0YzL~mwKo=^5F^>GZ`t)Ali1fwUQO-P>`**{mjMd%iEeR=TG1|~Mvf)yxEWuW zj!%NjKe&)oc<}7$w}$&a$F2|75t^7O9zc5UNY%VFnZV*Ug6g)g!#CHQl6O9=z zWU8Ydq>x0VNUy190_5XeK+nU98ScTd@*lE8FTKwiQ&QLA?D4*lH;pU`h{kOlxB;s_ zbH)Qa4eeo}m(SH}jMT?60d`QY5{K~FI6Icuoj?T+Ti*gB6t@h_kr8&t<;k#4I|6iN z3}nL5ZO(f;5T?2<*#uJ4s|{k&eT7+Mz_Z5>4*iIg0nQCRg;HcV<59vA14bVjxE=#m z&UkQrsX1B9XqzF&niMc@I8z$H(MsG;t>~OpSW*1ZcK-c=+30)5j0ZQCxHH|(B@ecI z1vkRz@)z3hp=;+r49WIq&foYzq_pUTZKk5cU5)LVA!phG6L%3WtNxeUz(XQFbiYNuiXt=EP4TfJ$g~x)VKo+ z68J)woOW^}sb)tBlUE|%nY`;|T3(B#>g#dY&nW=58HYFI^8z7R z6Dr?;;)tq|btXC-X?gU!6cjL8?*R0Au3kWjI|x8H;-Q|SD5RhAq`8Z`r)E%>j4N!` zbEZ6ASK9psJqgIYDeg-EX9>Z&CS_P=tw`g8N{bcP(`fpz2nl^+eW&-n-WbQEEtD75}AYw|g zB?R`vu_8a>v=<0akJH(m|D@wd1S79++1Qcaa&6wwfbd#p5S0tJTRAAO7g*H6EV^6s z4dPQ_C<;Bv|9ie)bAQYIWt8Q%@aA7?yUgM3rs&|`(xUKw@)~Xiv#73mXypx0>hhvw z2jalh+_ffsXX761pPG4ltC&DtvkO}85@)hL%_*2WH637-9jFb=MD9zlb76u8H$Bk|6t)hP|^K zN`51=_Ua0eu8dWi@N0SBMOb@-2S1IHVK3N_-*iRYQB!SK7-=JPG#mlBZ+X82lJj{# z+fQEd1N)2jZy|~Zdsm$A4bP`yw3gw~f^P+%<{l;Xkh#pDx z^q(&*I)15LmKpQ6bn!*S{Hed3rlrdDQOUebc@u{v+a4{YqlHeGm&Cs!UvPO%emnH z>dMH%Uqcl1MSH0mOc+f8p}nwm550Kts~_qpKMhzx%92dJmn2=jWK=TM0`gB$2Y{3f z=bJPf&!|(#-%^OfThVn*scng-yOW)HnoBn*7mI6HJ6eEH&fnUk_m{#0#J_}y-U@F6 z(~n4x__{i_)mkf=DcAlS+uDLj@RwDrU_dwn3XTgcNFcBS@E|De-fCusym97}lS)|h zpfS-zNN{nG3Dlt=6!J4J@y_73Bnu@ru#sd*Vsy5;AKvdhFK};{>Fb3VK_kr8siA5zDesPxqU$SKB)DoR*xzc;dn>~g%NC~H1w5x{4 z_9Odcr6fUOxP7Vx4mP;4IDjbP6cpP+eU3f`(%`prpo$40#X0xxGkd$sCKN?Vj&!z; z`4k#c-1(v#7hU8LWMU<#vV;>0O~hE6Ap6dH4&{CCBG^&he)4mp*w(_0bGT69roqYG znz!L?N`&GdxCy?MO^AA^-<52GEBoWX6!Lb0e{E>ogR<&RqNy+wN9)wsv?0qOyfL@d zx3@KM4+UG;!qy&PUlLZr!LVub0OI(`Dps=#nf-Oaq_ z)~Oke@pemN?9IDT4$Mx^jk+y~0`xY8tmuZ_M#gbq6Gm*5Ota8HB9$cma`%V04v?%C zY`W_NmnfI@x+*I+tDC&^8z{+Q*qHIzyCc~S18K^yr}6j{dgrTj9CX)@r7fLvu+R=VjurG_H-i*4+QEC^}s<<%aTqUp}tvhDrar z^v_CGPxy5FJ>&kQ_`fesML&)fMYf~CKgBdEIHY@_=X0Ky@wIf1$_sGZW$4s|q4LIognZ;c%~@0BQ=GHK!&0Dddt4rqQ6`b{c3g0S>({)OJjERMd?neo%ese3F z08@04j%Po472ZakBlOYJNE$nI>@Zxix{5M8;oLWGX=YbuQ>0{t$#8A#t$BRAM+-AZ zw6<4n1eCc!ZE6yvW57L)tQFsli7}WK#YK4Kpv`MV^rtA0>gRT(%Vw| zi4DE-;qZsY&Yn1^4p)A+^I1=1b^yO~D;dnN!k>qS39oYY6rBUwaAk|z0Gzo0m7KLc zPxI@#5}EB-fK^kw>be$1N>^aL;LDomXlmb-Y)-VmA2PkM4YDe=EMvfZq1Sy5m_ieR zW9yWhHX|X#1S2sB31@_~0E&^Rybb=NRwR%|_B3g1f-fpdM!<734NpONe=KWO7)(vU z3-7b+$-|7fcw+$maj183?#&ZQ!0PWja_r-?C;HC4c`|!)0I@4@pd0zBC)@u)w*U2! z?$hTo&t#wN)u$lxncb5zNg#Rk)UL*^$ADx^uRdwlPcBSwLQS^Rca9Ou1>fHr14F?{ z>my;{&W_~V5IbAp2|+JGFN|w5ev1Q>El9K_plo4jX}I+zWJ}mC(3@SgcDylfEXW=O z+U%Dnvj;x6n*^BlV0H07!=IkYzIG7)iK7Agt1l0X>|FKY_rG5PB%Ra2e zH@l~08n7BQ%e(e=!LxZqx)alE-Uu3kld{BJY?5CdX!QR!s<*LW1-U)#jco$IY{aRc zYog&B$`>7#>uWJa-T{JitU4Lr5tk)QTRZn$K^sa)OYhkt%*_|)s!fj8()`)L=@s*xhV`q{4zX5Z~{pdo^bu*KlG ziB@ncAKI6}9zwvI1>QW-9*=!Fa^R=(oGUXU^LVD7r@`z@A_Je`72+971EH*n`!JTJ z2)?R^fTLXW=nJGF=T|lj>b7A!D!Pn?yu%|Ij!$B?oq4ou2{IIK^Np?znQfT)!r5I* zyOwh1V7FLxH)Z!>Omh#td;zn!;T|Sv#hs8wl0)uugkrX&P_V4s;c84s$^prbCOc|O z;uGAUqoa+Lq)zu@%V(eN89Mlp1f|MaYyl}v&pez-0HJedWY%Za1EFS!2kGFVg3DMi z>3=I2=VL5olXR$MWnRHma)V`CR9)f_HN_G!u|QNkUe@@qav<_yz~g>S2ZKE zBeTvUn7gFb(AXzv=uBS=&QP!RRvt19aldPBMKVnUzhUmEfNZ9}XdO6|E}T>Dn6;`t7xuxxT3aVX+=f(|5pCT z<)_QvDSxs22jxxWo62j;zgb>X_N%ggS@vF8e_3bQBW3rN-B@-*S;^$TpZr&o|8(;4 z$?xN$mYlqK@~x8>PQGUHxJiFG>A#!w*`!w{Jw53MlbR-No^;2g1(UuxDN=f_^nWh> z{nAfLUoJgR+FJTZ>0PBON@tf|Rq`K8&X)Y^l2augmONk5RkEw(;gUN_=9f$@88`9& znD`eH|JlUPCLWo1aN^?=w@kce;*Aq;m^gXDf12=bCLEve-h_P<8YXO-aLa@R6RsTp zAIFc3|I_hbjDK_dq4AyLA07YT_{HO|9v>a|t8xF+xPLM3=(yL$^^SXd-1o<=9k*!Q zb>qet|KG*`w)lT2{;2p+@ehl)7k{_-w&Hm4wBiZTUq=7O=$Yuz=!?;wXmj-Y(L19H zqm|JKkzYmrD)NiSvB+TLKqLiZdVk9MYsVKwrt8j#C^Efti8i~Y|5kjRSF%KgcXot|{#$hPd)(+Nb@Y3Jqp#4>@5vecW*yyo zU`AgqqtCWL-h{97OJ;{AU*5lr!7 zcJJE>eH-5~q4#qpG>;7Ne0vWJzOQ4yrO}z%@6`U8+HPhTkKfdG-?Z&!XuEF)+g0>`gY6 z4gFK`a9wF+x>}(`U7OqPivDY4oXB*TGVh16CDl^af3@s|n{=3K`md6mcvBF-ivBAF zn&=Dz&DH%^;0IuQMiApu@GCGrBM0LZcmRxh4+P^C{pHecB;hbr#)hSlL=b>$`zPb~ zMJ17hmZXyFf_^OPpCmJgY8O-cOJz4lr2~(;D*8)gsOUG$P}BP-;s?<5H*yhmL;nOk zTUQeO#;EwL=pQeAMy_>zj*~tk*XHZ9So(}yJ8GZh{ZaN=TJ*=-=d}I^zGIXAacDy2 z{YBdFkIcmTeu(e$N{ap{h`Nft-(|Z<(Mtx%X?=UyV`T_*0)<)-l8q9 z>3bYs=at+NhP#6UN1}EIT;11B@bE)`=K9ivr!+b}Omls0cmSI79w_(kdrU@OX-99B z(N_jXFYiln^wOfkcG@i*rlja_Xxim{&C)PxXkcnzlMZ`ru)~VJU2GSLR%(aQtNI?r z4|7VRmA>gr>ubc1V2+ic*_8F|6sWJ#x2N{)z}NXDSB0P{>)S5Ps%^8RG^-9ZEAML{ zFs0FHwp~5G16R|6K$rJz({@vByM(rz8gBQ9w!6l*+p6uZ3AU@~`##%6iayqM(W!k~ z*s!$d<6y&U`yR&ci%R%=TQXt2Qf@~)M0sBw`zS5?g&pg6*hNXvFM?f^_dTTT&e?X~ z({|^=?H**ilIYdiuDtKN`rV+qyzc?+=WlI4o3)?64fnH&sCTUF+P?eoy{0sgy8*86 zyAO}nmLxVn3)@(LS(o?SE8|A5)N!ZvZNztw#+5Rz$JxsIzQch_cUky0;OqR7U7=bVr-E+LY5k6+p`eS5JEwC;y`hid?z)nq)8|a#?7~<$Vx;+3^2k?_Geay3TY#NjxPUw&M_mCcYfNjzkPc2#hfpOtAbSHnGhk zj$5J0K{^OEl8&q+8Dv6-EhGWvCEN0YfQ=p7;5aeh*s*!jb!%p-Z%^N@x}EO6-PO0d zy6@#2iJ7X~GgCcPQ#C!)^L_un*4lfYvyUV&&duD0dpkbbd+qi3*T2^K*Z=tb3AP}` zUKE^=SCH~A3YKZXDSIjQV$&!KPvYdglzwq(Fgq-0NWmAP%aZ)jfQA%)mzNeV8G?qC zgKNgyB9Szlw3os$Sn-k_28Cj5*q3sKF?lbgW9&hfwIGO1u^7a@oZr1W_fkX#u`drv z?8$poU@pGL)u{q=@jX#>Qeb{`eDOWQ)G2avaq$9ICk5x~(&7bCby9XloePGklOi?7 z{)etkiqaVSA4b(lsTyPd!(r;An2jY<>guF;jeVsws!od7*jGx2tdsZu+lp^3x}|i| z|2ygX6OT{$w`KoR+1E>-8uwqvc8^&+>e8qMB|j-yRs7E=@~`5bx4FA&99GG$Tgr>S zP8U!@y@@oFId+c7au+W{j}JgC)#-;yJOrTW?5n4<2To=_ek;541QbyJWoI8CJFc96 z_rL6X3ECH1T(xq8Coc_LJgHU{YXsO23xI`=@+`oPH~4PP)%Q;W(MWUm4tzuv|CO^a zBb*}CUH=ERV(Do-wQ2C+=b1yV*{7oSIgix8+An8gBvIvC&VLi(aiC++9})}X z)jip_jzWK^;Br^a?St|)w>LU${a}cmC{mnO5z!T)QP8=Or6WlY0b)&$g-GfPx24V=V(eCx^qFW@x6?vXpzH4u2<#QDsN0G#9289hy$f@tda)0BPj7lXh0e5hJRLSdYt z+0XWjuogYF9_s!kD13j{)p90_?ck-c$+-j{^)z7_W<;68oy}r6EUPPX0p&T){$pcPt3BH?1T zUINl+JIwdnU%XylYx{@ojnY z+e|YUZu;nj-MsRdK3|$~N!w*kS78A*!&Ysq*HS#h2q=z&x_xt~^j2|Q2p85_nb|!9 zJzm^ZiXK1FXuFs*5w^RaSLUOiIbK(Kg~WnjXHhzPbSLc7uvkaTT%e<_B%B>`N~-)g zt~-WauGod$>ef8E*6~vC6gDpq7RG2u#v)JB3tfl+A#iRJWkw>6M)W!G&G)c*L1>rH z%x`dT^F~N$l>60z7jMZ)fzQ4R7;yP!h2K2!xj$U{l8?)`J#z0;eT%ayGenY6u3!&n-uu}0|h?%&aMeW zRQQ|QiXXSZ%S`UKq&d;PxkBPs?PEa6ZNWLd!~_#np@arLTw^l8x%2LsTRs08ku_|# z`G;0MEAe}6qNEH5{W?#iVDi842iFnG9IimD6A`Ey5vB5imm|uA2e33;!r*DB0Eqzq zrbg%{mobPoDy~>1y=%Z=q-Phk&2$}vFoY;y{ug@RN>SZxYq!t=CI&V@cNgW!L{^MD z=7(uUg6h1)>r$=oHf!JP3L>5u8qnt%jb67!M1Dxuy!HgMy9eSb8(RvNci@IAnp!s} zDi^wtVu&WT73g1ACE9F5+P^wBx28@9*|MgiZ4)w>=b$7m3Wis@J`7h|dic6bEP)yM z$U9W+g0wlh_RSD?M?gKf4Y^xtp$}Fd2DBxJRVdX9;y$1aG=hFDTa-tk*xGOd;ZMGo z0Q#hBe7J9&BfVuK1N+VA%8)*E-*TU?WHRk1@<;B>`ZMYOlB?1ZjQ|b?aSOiKyb!z? zE^b%?zm~%3hJOyB?hbAwv?&p*}W_V zkT&UWWI;qbN{T0CIsIUPe83@wFahYH&9tmg#`<38l~n)48jFgG5A<%?RmM~8z#9Kl z`>i;>0(Do`@-#41oOJfNld zrE<tVLWDcFYWo$cpXx zlN`K8JU^Qq9OA}+JA>2!3H^d}rW8LNmbU#yQ8rjrmR`ai)HVKsk0RL|dy-ub;g3d`4j_ zmRb1Qe?!)Zq}}{Vm=aNQn(i_!2+h_-hG}ARcobqKH5c+u8Du7zvL*7RTZ2I|hvqa zgSF%f5Gj)1IAhS`0O=C!^-No$HLyh5I$G8+1xQQ7lGuU(A%|guLQD|uFLPA{sT(tP zZ!{I2*YK2$tnyA|YD{hY^6Cd?IZQKUq!D%B=OE4nE$?q8NYAGZ;246c)hB< z3CRFqk;e~632MtDKD%})?iqaN zj8mPN^zj7k0t)OuX5WDr<2WnK(_ywSTS|zGfz>sf7-hs7sxkv#k=rUn6gZnX{DBGt zAwg@$4_Ye1>&h<Z_+Bsl^(NFsJOzLT|SSvJ5CSIKNM`JDJ8%pHhre= zfI25u2LKP^xixO;1bAD0BcO)pnvV31uowV=3%+`ieI_p6CO_~VMN@Zqw@XuqB^Y?` z95@Ossq;VjX4=w(qUwgp0ocfc%z+m(m%8C~J!@R{d8Abr_$8hB_RR_S#$%2*r<&?x&5R}lvZNs)h}A$J za(>dgk@_~{d8Qf8`d-|@N>mA(pe&*~iS@^)Kq4I)W$JsgF z#l*Jny{54{2;xDK=**!v7|mnDdIruN&%SvKVLj-gIy@%5Z*u|ff=m35Fdgy1NLbW zvatoAQ8E#(v36eg*Xzuil;AO{B-3che5G|7g8z=Uj6L=`hUoE?Gp}5I{R1IfbZ1E^ z(9Wh*1`)GwzjWo&n}ff4jj7^6vezyW;O^)Lu8e}!UAgdfrsw@wZBF+cJ-^{C#lZ+* zs`95?5e$TE2ga$>JqY=bMZCk`W_wbMH95qDPQYDEa6=)@a*D<_cG`p5@;5X;;`_^0 z0P4zb5jW)sS6Ni4*Y4eq?oIbrmOo|I?2(soBt)p?bMYEpI-gRp#iB_ z8wpVEKJ?5jD`_DEB58&spTGN^2mh=D!eK!9UC(S|ds z0bWJGwR7<-l#g45B3P7woJ}=1r{I9Z1?Xfc$9m~FE`~s$1+OB2Ph(OkAYf4oLDO&m zhe&|kQTl&btTA-?eK- z`S(FKbncPHCfsegfB7Q^yj$+ZqeWcl~A=ift22yeuNw?Yk7&YZ=e(W``os5;Pd zV*X-C@PI=_1=$bY$y_*uD~%rSrqt)3V+n9_fNu*(zCEY2dtO3-$iT7puX?Wxo_c@q z)TdX@@4Rw$Pv-rLm;(qum>gU#Fi`{EX-a4(-o+CM#MHQF?>28f*4Ol|;_~7NIz>2N z9%@T$1&^7tp%I6UT)OQUYPfxfgGE4OTVnN659yeD@R-xsk0{a>?8#EiK6#I#PZ~8d zfTIQHr;Wh_vnr$N(I9c5ZvgREPZ#|JWE$xH3=!ubvj5?E7DH7odI#THZl(QyO408Y z-IAU>F!|X@mnZFoI>k`t+zXB`+8M=i;d-I>LY6 z{k`QF(ZgL;<;DBOf+MGmrnAY3st`&c(1QUBL&w3iLnYu+Q0N!i0x@R@AEDA9Sb`xX zHpPQ!;>8aJ`p-i(f;WCpk|sN07?w)l5BGiz-Cx(WpuBirz##>f;B-4=uovXQA-Kc( z_Ssa2ToCKbd$U(Do2`{Zv>?_PV#gXbnzNS<^KtJP=6L+8;2MDjg_= z?Duv}dlQgsU ztLSf4_wD7yFKQ3hikGXzQCcdeHu5s+QveqZDMYWhxs08jrbFld};x=hy zNiO*&N-;Jb2?tc*%;Dhz^PIcMXkGC#+Yh{xPFOr-)fVt8?f^!^;cOP>N$rJep82RBj228<#C6*gWh6wR@-}TCzWIb2YZJjX48$1=vLOhj^+Irm9o_|Q$iTbiRr&O}%&9YqccI+zwcf8_+$(l9mKX2Uk;K*{8z^n? zYFQ5v1^%2MWuJ5S)J1Qi&8TFs#bpD4Vgd!YNr4%utY^J>Qa7+DAHOVEgP(8vC zU1NH017(&mmd{XzN5-Ds?8#q24Fr*U;G;|VbkPFf1MOubIkJcPpr6d1?$3Vm4)m*; zk6s@cQ8E{HW=`zOo_`4e-H7ZQIPy}a?-$ob4gHv^t~ZYjUxl*BlHOZEh(+D^mlyBJ z32Ic10TpCRQ-aG+?NvD7vyt(Nm|J@#ELboB;ZF*hdt{-4xbs6zDiVi&pbw0oA+u{= zk|C`VyM2bP*hhsvv7BjmiRxR58_Jb+!f5pcCqUWg?%rEKz3T2+pq`Q|=dcct4s4Uz zd0{Bpnagf;Axk&C8b{ZZN3-nZo!L*ZcO8ukL$(A8(Cq4)Zw>uT4$-pxXL*Nw{j-k#nap$*1tE#yS~Xm6 zS!1LKrpwP4!4~&UL|-58x~sgnH-fhHy#7KTqu~L$~jzdax&o=3!c+@)}VVI}u0ge@4{NhK{02 z!*3MEb3pwIp+kGE>e#f5T1ImUDf3S5Ek)-RdP#InXo}ukH!TC*$`6m{5({=JKh$2x z^+4}O~MWQSPtjZ>MvjWw_fou?Yo@qZ`ZkPF8^>rj#k|9VL`mfxbjirZ6YCOMMPA zkX`+bfE)q5rb3+&!ifKW(T|G8{s8~;8~(TN2VN)rZ(d(m{OpZ(qOQ8`gy0SiSZ-+f zp+3>xH~C*xZco!GA-*NqDY0GZZWxM%Qa&1qw~cW}!JQT1Sr2JaG2c7Hx{w&>5&wnn zAu|6S+Czg*By|0>9wE-Ja&0o*{$Q%U)45cJd_~ICLCF>xiC2;>`(?Qz>Cg>%Mw;ri zJ@s8EiHL0C;$@waj3WiiPkG*+Sar@(?q1&yiI0bHvJChY-ZO8GaVxwh&+F2O8$9i2P%NR48T?-15W&W$+AdHu@`@ROgK+rnZ%V;I1Ofzf& z%XH#VD%|Nf>X6|ZXvs8 z*m`S}F=d4n>Xve7;IP(@4Ns#j^DDnZ@U+`NbDwh*6Tkc1&gA}mt%S=7tkG@;>6WO^ z^}vt8)aVlpc7WlD=DW0qgDZ4J+8c7EUSx@h5FFM9Svl%on+k_V2@?P*LH`>fW@sP?y>2l>>rbS6VvSTZx&GcGwmn5c%_H9!Q<0Ok47~4rm47 zBPbus_9Cy$%_e4KJ)zQa9gGZJPYs+qd?+>IF=+zJ2=OL@9bAsfI1+SMhGZs;Lj<_c z7)_Gw*=9sWhze6B-lz%E9%)N8TMEh6@_?23;cp?-Ut+719t-Vrj&eb#=xBv)F}Y@Q zs-vkMR$2IYgDGT4Qf&-=!Fr!_{NXNbJXB{a^GhhXV?X+lB}(pFODS+p#I> zn9F0?&7z+NY__u3JPZBDcyL;A`7pHM3M=4|!T^Fhr)y~1w2%z6s z>rl7kK-5w>lXsG#0NEkP{bu%kNAS&uCl2xw!bfGO-<>?a93NapB%5rAm7? zqBqOwZuwjkrE(#19fgcuQ#d!I*?g`8)@#6m`Tb$iQe?94j4ht`Z%@+$MPpjDYic@H z6=z9L0-ae*(mW@mk=C!9B>6qjco)PxAW8(TdeR>mf%Za3@_f$^(TS(MspZA3tKsrN z#>R;w*XwlbNnEMSE*^z*g>8T~ zeS{O7Jgc)lrswz26a#&VQ@OKlhHREScn_dkB!SS0#Na^jSVR;hN5JzX=xxaX^8>h{ z!0Qr@!FfKH&-JWFKNfm-qaU`bIn&LybpZr@2y*)o^tFWB0$&dtIg{zzKSy0Hubkay zeb>B-o*%GL`u4W0Ngx18iOJrsY=&xPt#JTa4eyC$+v;R1_ExAjf!mGwoD+lls(5S# ze2L^USlKZ?jVPgk0F09B%cs7YcmZDzHq0U$I~m=g5e|)P9zs!*^_IM?rxsmZ=GCFA zS1!Mq`REPpD}zYRoC9?5z~0^JvJ=@^^|4X^9cKdoD@cE@Tz)6(og$~4KRCE^zb*Cp z;EP?_lxqQmmxLth2if(tp5H~MR_;oa7dPiJPncNOw6i_}amP5T(Vt0(1MgChiN2Ba zi+LVk@^EHCt`=fdq(!DO(?e|YO$mTah&v?$elTU$;%dVixb7NTI#L~J1g9mpCF`Jp ztB=)p&_ySvb|n0Y$JR*%OU}H@lqckt(SZ~pb-1N+b(^jk=ho()XF-`7;>kDXe4oSB zfdj`)jIJ=9V6Lz1seVZX^5WGu8Ll!Q4w(oi!L-xq>cA)13PMD{geeW+wW%gBxMdL- z{p>M?N6)_YQFiYMgop`!VA;)n^6DJjP;$E~DT1zgmoq&Fh^v0NXYjb^I^mYm)SmBS zz_s4G^5Q0A2XtpR*TCu|_CbVg!OfV`O+hOnP8IXHZ$^~;##rMh4ETn`@WJbn8K8{G z2cW0PxSnUwxyL;i%$g!P5;PLx(;I3?^t&SaZC6>(_t2H6ccCj=@|H{#iG)9#tVr6C zobohyq6m#5hBjzrNE@`Xx=wep&ft5BQ1 z;(DS$Yf9QO_(CTp-LsApvkNCI(wOEAKWeEsQn=MJjN}}oK<2$q;d~!y4(E_UqYqd> z!}i$d@iQRoz)u5SKas=MLpRm47Q?RV>MSq*{go~4ZK-;Mj6xEn(4gD5rfpuE(mg=p znKgxtRqiX%wXpS9HKgWQWz#;lZx$(bRpYkC7Tk?Z*8_WwydIJz>XREg8gOlGYkvr? zrfrRgtQH`Cti6Z$3cw%@*rfxbkbXFaN1f?)J!{DKUC&_1Lkux?Aa5nMmS5HYQTr(PX6xf31JFWta&E`QXsnsd1e z-o}l23mUp{IP5)@LbMf#1{)N^FXcB!$omCGHGNWUZI zfRTFL)kAyk{#?2mC4?F9A{N!X07uaJ7~7g^+me<0vCM_H8Fzo+^MSo*2X^hjip4^ji7J9-hIn{o0!+Pmv9D0!oA@yego`_BL~tIyXR(dX7%F5 z_sm-`|2`j_Eze0N$fLf)OaNwv)5RCh2xQBW*dy+Dd?U2Jfys^q@CTHqd?Lhg?L-JI z6mJDSK#)(}mKIz`!gx=?I@d6oD7RvH7~h(BJ`A@70|@M-Jhx=2xD}IUnUXPU#T=Pd z*Vvu_m`A9mEcZyFxv{BpNo?jr$UO(a0kS>>3ZJ+nRTIKxl5GyV%7@KzR+=3>({?SB z{dwVU6N{5`=npV|B;4%^59X|7-|Ko6b{X;Z0@``>cjsGS>t-;F?XW*6s??@v!Bm|GE2E${^K*}q_Uo` z>{=@9IqSEPJ*%&UJ*$5M>>0tIVKxkHIkMdd;|7j(J{)d)l@Ev6r}Fk5vxDWZMZU0M zL=9vOaC=^O3_hP15HzfqvFKjEhM?1doJ%t)M9j_M#JN1AewfRTp`O!nyyxj%_tTx~ zrRl|AzXqw+$exMT)yW1N2HfCsI4IKNX>I6(VYx`8*rnl*qCB0#CFH9-+~0^YVV2Kp zM-0Jwu@mJj%+j8awuRT599_Qf9Q1FoPu-TyUWrkh z{`opIc!;on;^_%BM7omvU}i=j3i*w?ngr*tGB;7JX4iEl{h$+y@jie%6dD4@&GcJX z@`IK;w^O~{9=DzPb#C0g;1E!H3MBTGsxBmsBBcRCsMu)V3?N zevip29J(Jl&0mxdJ3qBSH3^J&4KApaOm5+toTkDr$gW_Q)@tTS5U6YG`mURP%d7lCY2-QM7^I-#rf}?8=7n;=g(d7z^~x zBCesR{b&+YdpAze;9D51u$4i73e1IiqD!q_PyD_$!J)gg6!fb45#j((qY=!TpMAQ?>5-QI!U|Je)i--#6)y%^{=a~xm zd-w`p7)gbsVzpF`KC2%3k==7afQ4PKQ~gKd0}!I)HhoBP;v3Qt1Lc1(QvJ_-rRp5O zkP(yOoev1TdEo@IAeVLeA7e}`jzQ^H@)w3x_~REMJ~kbYkI^0Tu}o#x6T9bNB#(C^ za_=wK)DdIHXEPAJA%)>8{JZ2cDeyADNEJv zo(-x$N|yQyAPytaT3ISU1EsaTG)%Q%xarl>I6b-N=pTluuIE$3RM+&W9wtB7U5Vi> z*acvqKVP#Yxi!E|Y5XaV3Uf|%H0Qv+WDbp}eTS_8?W8GLCbbvlmI7Pa2y55ro4UIK zm3T+Zup%8`G`Cf3(81h2X`fgw~DOj>2^(B`DItULu%|wsBt1H~{<~ zvX%yVjn}5Q@xMv!z6;b@whQ11zYbOu^eBK&lwzL+3y>b1%>ySDxdHrNMD5~f^Uv`X#p%L*dvTxJ+f@W zKj~KNCGDW|z$w~&Cx*O;0C0ciTMg(eVm`z;{K4*q0{Vh^AWN3cpTn<<>9KE&%E}fXgoR!5d0tNWZ)ER#rVG%zhT_zv41mm-k4`b|KX^A8TCNP)5V_^{VhHT{`0=lO;q7(@452g zS?bV}J^z!ziznrxqxg#-3Mk>vZ~-#~-nc~38y;@QJ_g#CmRFQu{R&GF4$v{0NioSu zl9mZ3uZG$}Wt)*gBD?0x44z5SNlOeMh<1nr%6-mszNCeA;Xj zb8}(<0=Q}m((N^9K9O9C@x;QW; zoYE99CBSV{B7&^&H&o|1eLH91mzOff4`&W|gP(oEjn3|%>?=P#cO09V-Z#0~?SC(G za36Lz-KjVo0<&-Y?VteIxtD&4=k^7hO1;KzLKV;6RZ(8_Q%;@lVvPe0A|w6TaM2XR zG<&Lm2+^3ZfWe;Y`&|=7wgtgk25?u7m&x=pLod05uHSmt332CFpIb0x^(;LNK(?alNaxpMB@ zz}}yc?us!lAhS*%q4NP?V|4>|iYU*G2UDU0!j!011&2rW=w9dP#yJbXpzu${UK2e6 zf$r^Gx>ILaH{p?I1I4xYyPU1Ha9P%D;tWIq?;{}uos~jTMSz4kl7*|npR`y{Rq+(fN$W$ z)q@Rmb3>FKdup(iy^8LIL^tl5U4E-!_*ag@cir?DNP$-_9RZO+Q-ozOjG_Mnvl!ld z2LRnJX$5EG^W#LDJoJe^1nubQf3E+^#RCw^xH%nq8Cn`8yIUT}3<7`WE0->3j-Ezg zh#&CJ(R40ZX~NCH)7|$7Z*MIxdgWm%#6xjgDmX!2XQX2HeAymu<=eJ3{YU-Sg1c zbm9bmPnJ6Ib5P4p6VcQ$p9BIda8%;ZHS9CFyNbQ#cKJPBmsgNb>9k2>;tnG) z3b45q&d*@`9()<)&8*9A37Y7p=W_LMBi-{0{Zs7>D36E~la1-(Wl-4m)zNQyH&oii z3%VwhS3Q<$Year5xE{rxYD>W=iHJw6)E36#fh_XCiVPqfHa4!8A!INyDayjKp9>8o zj$}(RiM&6^SJFZz6Q1I1h{}|NZ0TrfQlf3`p35x{*P^QI=})1s0YxAxA@mW(iOgI3 zKnQ)Jw?kQO`*&kYa(K4pgTU!4&0r5?D_}j1>d1IURf+6~Gp&0Lnx55ld-;=3m<&z8 zE~vq%sno{_O|bUdXo5MQ8TT8@U(AJp@fq~|98MGxg3>s8hRBS8bqV(5@vWw2CCu-4 zL* z>#DUCE^MMF70C|cw-H~KWdhr)+uCzJ6|f5|Gruz62r>Ua@Cijl3hfFqYz_d8s56-f zBzZxi1IXd%5VY@Dzq(R+Lc?Zc&QG&S$9GflINeKOsDr1xD`$^iedkx2`i9JApZJ`n z?+{M}m|t$@nn|kffD5Xv7gS$TzyBo9SI2N4HO)cSK zueQASSI88wDeSi|+comr5Eno_O}Ka0<`-JekV&rCRLiEu1`0f(LhDh*MyUWXbW(6L zNP%@U}J|J0cW8COIKA-nO@5bwSnH>DA z2PG^Op6jNz4tb->i|>Cz^IoikotDcFGl}h4#AGZ-a*ra!uVTui8g|}%;7b{hezDvT z!-iaOl8Q;py6(L>#Wr?R2X==CZOHwK{J*k3bLhjtT^IGBif+aT0g@GsG8VG**bD;T zjlomBNG@~bJToQ86`A+{DMg({lmBG$>`8kj{=>xC6ZTJ7T6UoH561nUV+Y2TjJap@ zH%GlcYI(`klE&iZqW_GdH|F1_BTGt)O3J5hs4Xom`amXGsn6wX!~j*~h}dtQ7z#5r zQk)rw&U}>p=skB4Y;|7kUgc~^DK;p-qh5Id>DB{=N;MLu`p%)!EcXpt! zmw7#qtK#EBnX^co_M%4na20*}0YKz2^pYJ%7GV~qPVtHxN;z^g`a+Tlx@RcO;Uc3! zw6>>mM7N~cWo-%a268D%jLeS8jAjT1gDOO1KwbPk1Cn(&# zb{ZX6bL3v|+w|MlEgO&KO*1PI+TBjV>2g%ckrU`BOZ|{37smt-{QQ)*fMMxMLalX2 z7P8jrb<2v!m-zT>D{|p=m$MPfjb=NwCzPfKsKAwt8vuBTi4fhMrGO4-WYixVxd*LG zo6*q#rm;Ej{D3~zZB!T_m-xg8JG<(WU>uoyx7nDspuZlt@CL%Hb(=sUG=x`Qef?7| zq23;wu&%45tL(@EFz)mUZ-=*~6eD#=ML}nafkY^g9*aaZ9E zafrd8Xe2U7Vmc1WWb{jbJ|Z65{%y>TT_HPeOuKqH!hWLj0H#9l7#ImN5N^)<&XM_` zM)_2)#=9Tfq|^6|EYB~{6=4Eh$MRFT#Em~{g^rZErfN4f&aWJe7@L{hw`-zRb4jBeU}K`q{B^Cvi-#-Qf!w3ublq*uD=WzYD)kH3ZtiZMzn|&(Jo`3s ztTDSIR}dI@9tL>_G^So12PqW6R>}FtSdv<~8 zahtPxUPFazAG_Z;_3F@~zqT6^o?f*wmI6E=Ma>?Z@seF*j#Pmfv!-_K=-PtacsleJ z2oM#Uiu&$fGbsW!C^a^vAmt(j6~p)S9M`lf++FR=ClDyo+zPb{1R|@DqCk{vLY9`s zO+29LQ^_>5R&By>#So~~rdAM8VEq@}3F4uC!|<1V>u7*@2d*OdSKl5`Hx_C(#xw4< zv%C%OIqb@3PQQs*Q{4NYz@jMq`NyETkx9CbBROr}PSQ2uNL(l4Hm?pliJ1r)+ZUP$ zsUd$Nl!DhZ5!cR`f%(}H8;&?6OMn4-PB1$(iS; zhU29pVBoIh$?`~JvZ;Q(oO`ue0nrQi2DvtkETw{5ELa{gTP&}9P_%QJ-c?8DhzPrE zC3ciMWIgImQX}$wp7a`zmR0RW{8ex2k-H%y-7(i2^<#(=cWg}J4%C=xd#tftV3f_D z%Zb7xLNOFxBG%!K39AuEpdb=hZ*qBpsh(mUl7&N#NmC!d9%T3K%e;6w`|i%{ul8Yg zq}cY-MeY;7+6V5<9zBNhpL*5fT~{u?N-wB`6rXPQ?m6-;%*~=H-YoAnjyKf;#GE$x zJg;cliY#$8xYH)J{F&1`-t! z5N(MD$50Qq)EgxyM#49Ez@bn8T&`nMNhASPE-raya~C^O5|bkkB)|?aVf0YWsYMSYKnjOhePpnKl7e(w2^iR_WNf*UF#@z0D z+y!ZPOV_+3-vo=^T?202s-0Ym@Igcee zyo2M7{ugsmYaFvMaO|V(Pl(x*-S08;FrNJE9G4@mk(iO!KjpD=@cqHdNQ|zBQhp0W z{{P1ddzJMvhxTW7Q_X>zO>*?J`>^M^X`Rgb|JRFl6y36U@<)>=PFg(iA13_QvNy|S z!1Di(?|!U zKJIVe=@o6sM^Z3$a>wSLvi;l52_WF*-G!x4yugRJ7hKO*-gEnT*_pb~tM%55N55KA z&?9zAQ*d>pt}oH_lsuDDNPamxDVG{J1lM-v*>8`&lX@#3k%?C%RN#rIa;Z? ztT&@7{!GM>IbdTd(N-T~LoJUttlILgKm$Lz8s%tzyQcduVQm3b~xp7<8wI(%X8D}M4O1%xvHxy#XWEMO z>)9PbN5gT4ong-UIWgTefLAZwDBKV8Vch(;U>|bJjq#@L{}wv1e9Dd;+(yFZgx$-p zJ11ZNw>bSqHSVV%I(-V}3?!q;N;r4;Q`i+9 zh9rKul9v6HDW}g^zrGawA?qQPlXR@UHP|3JMF zd+r=l(lEv5E!H z)?x|&&TuEpW8ygkkD6;aQT*fNy>8eN20qxAIY*np=&n`!XMwiUr*zeH-A~#&)=_S> z3g7}_p(_nV2<;2dCwSWmPMQ6QrY~Q%UXNsu zhk%O+=P%saVeV3I#!y8AaLzb)0-U0E3CeCtu05YA0Xd{Q_D`QsR9s%}P4y-fmyQNs zBU>&1$B4VQ+2{+h#3IX96f-owMS~>8=oj+)yc% zFu}ACZZnr(*9c&ARD*!gztP^J{r?6XyyFgUg>(=KE@|Gn#b>77T5$6NR$ z;J~*pfv-=pegjQSL;!vYR z3I(5p@bz+f>Ix%LlA2(kOSuk)P?w}Krs`7g%jVXn5T^TJ@`c7^+X6{(YT=StQSkRu z4%WERc0a1rjq5lY}3_!t!fkzPtQtquk@^C3Ql_y(VDF7d~qE;oQ=E{3eV9f(P zQXnsVyatYAF!u=1*8DiB7f7F1Id9t|k31y*Z?@mO|I7J2Er}sZ8Dei*>TI$z4iW2r z9lR&*ql?P&*hXGCm&Fnc1&wXcE6aRI|4`{OhK0E^pDTiYirEbsnbuK1h7;im-ss z0$xL@O^!XOd)&IF1#9iWL|di%;WLdSE6qc}#J!<88LB6kNY^okNqq|DpuW;z23Kf` z4R}mvUOWcV+KkxX=ch84;P-KE$(`Fb38{9tY^rA5E|;o-17imt>7XrtsXyh&aTl6q zw|@bzxs{gJLk0RHfD2(tc6Eep%YN2TW84yiH)ad7nCao)-i2vODcas7)DR7elUor)LR@SwU zN93Q~Ry6n}oQBocm!IRi@V0EAWqhbpP$hId216fQ`~GjPOLEbQ%zEo!XN{miy!U#< zf4Vcz;{FCK@iEBW{xE>*IoC$q?}H*@|q~<#ZT$)fW&KzVXNW1h9VVJo8cJ; zL=KUFD+1+G@UBB(J??j=D6&6?o&?KogySgPsBr&X3p{MsuP5z`%GvgQ>0eph;Y~3_ z8exX%P#cx<7+G%V>&n<`{o%-%hGSmc=2)eD5oaW)dkf(P8kpQME>T&Ng1eaodx<60 zq`?3=Sxn|L*@jEq2FYxqyz&?bSEF=8&JWkOCGMA%MNKzmRskkp=15wPZf|w6-rW9O z3q!QknQQ`P(ukV#=}~yF&q{UI(7xQlZ&>q>@=iaJ){OxLRK|w4WzWN1_i$HwXSvLGob$1KmgP*B9nukVnUyWy{1RK)Y>eSRy*7O6sA~a5>rl{F-)O zX`^+)>S;)Sk*RtA7_dxU_Mo;OC z^s__NTw5h{yMvHknVXZ-PTonzOGd27s+(XWr5HtOS13rk)s{wEavSN+d> z;P50m{#3#7XH4<@{^PxCyxbR0j zxAA#!;4t8G%$H1m4*iqM!~e`?<2W4 z;fqq@edX{(I66<8?TzXz#Q=bEkcL0K_WmjT!vvYZ|FAs?l*u*(sR#Q4J$pwJu>=HA zjD9L`_#&(y@Z;evi4c_|1f+uVPM}*Zsx0%$0Yxau?)iN162hb;0-@sY1kkm7hBw{2 z4L}Wl#Fo<%pSuRX9>8WMoq;>O;=7ohfm{s3X>V+YsuF^A$42|J5dfmESO-T6K0R1OMu9xkKXYE|<(^z*87 zEpnM3mTFj!blJTnkpeS|YZ{TRFsV&~i-jXS>}LAWyNv%43@^?eBFOp)N78T@co`+r z7CpTZZT}xe_LsHq_N50khXsS1;MIs`15kS+3|TKSb-YAKl}#BQ@^I@sj24RTnzCg} zacQEisj>Az6M$HQ-?=X1&OB~!NAchndH%V>6d$$y@Hn)6`yE@G(Kcd#F~GVlk2JPF z#?VKA5khp7Wz&*snQNC0#ww$O{K%jzx|1@o7et*gQEjiC&Gfy5o_N)V$H3ujdX;y#H)eck!qt)o zFkuKI1)?ZJpE9@^(yoN>#$2ZqQujK6FAF)YzWT> zZO1S-7CwfY7kv-pC&ZoBZBEv0!B)}Gz_?iM5;hEeQ}yc>gFHEi8zqNJ;5|9z zc5hPi_|h$#nv%$eEx;}OY0_A5W1!nH);t!P8#PLkJd@Z0z@}ES z5HZEz;mm=zu`YpJm^uBD23?Y+FPsIYXXeP;;BBtPuO2Suxp}u&nnnclt*yXcLpv}t zx8h`Je@g%4Ic46kJF)@G-^#1vahx`v&`~zHBd2Yj#5t25$CrN&96rW^2E32aGxgpy z;1=FJhl?nYOo2o)fgPiFIU(H~zz$YPn~7yWdxDfmGGV7A7_SjgWK%T2sB-vC==i|Yg-asA3=82w}I5CBxJ=d?0V(ONh*>i-*iZUdSv&6gmjUS`mQ||Jr zy)oD*Zf%Ail%?h>{Kjq|SYhg8Y~jNwY%!Wn-C`Xn&4CJtbogW_qy#5KT=ng_5LaHuJzeRio(*QYCg1kAzS}>cq zimZ^cd%d_!H>R5#1!PD!{sDmy9^AD*d-#;abL@h=Z2-QA43b+5f-y2ZpIm+YBe;V& znQ@f&)Eh5gcvVxqN5jLTNHNU7gkU#%OiKALGNux*<&92^>24hK-Wpsb4&=Djdszalte4fzu|Tm#$$o_J#$Mm&8g_S*Z$W5kqXqGvBOY1cPG#~OBQIdgVh zqw*`oc*OsI%nL>1eue+J`R^tLZc^YT1#VK{H$Z{+s&;*aMuI=8EuL?U1oezZfZV-# zr~m_}J7H<{C>&X=z~ZX;)z_sFU(*ErejB`hn^rTffY+*gBcxM51wAARe0lA<@eKuP z63thhznnGo4Ea@_>)en{;F$MgBbF8@8VW5ix(>*p55yQ<0vAKFR-f*x(Y_!Kg+RJ?PLrG^&%Ob_fc(Wk}P6#E?&SB-=Vej^Dfl z6KS`7GhB6Pa~sa}Cc@7~ftgjEPFVhcp*bxp363w(mTh?(rb6Ijc4z1cSVCD7S5agK z!CFn$yZUmfV&Ue*wui~s@Q?<#87|}t`%l}0bC9hT>`cavsLMCOqbkHg*hOfo;(s^c zhP(zOhUGGts@yM9hie`>b6@1wa$Bf&dCC*b8)h;g~Nt% zew_cr65v|tsth;xM$-4b;mKQFh=M}iP}B^EtN(K7D^59uNR~%mxGNPZn@`N#C*c_k zzV+YOr?j(^x59qhxeOY%+2-y#8vJFp1ofhm^&Wa|nKkf6Ht6NbTGa)f&ksDO0!mm~ zoJ-0Qp zG&efGN^-LdYKeXoZ%i})Ps~mnauLdFI#(Fh$A7FdWgd-j$|TQ}C_tK)Az=i^Q$bEj2jx zzN-rF|5J-D72WdQEoGCRnDieeJwEY2P24cy)Px0PSIQbn2TNCv?;iKZWB+c}YRSYo+|T{GlYaHk0PSjhYe1N*Nf= zX)bFArJU-`LT9+*G^jLpG>i3B)?~5`Im%(|sHfYU)*u0taT*2B?llTj*inw1BQ&+p z2AVe*oPk8)-e!;PgeqPQ2(-TU_Rz9u;pc&UnYs8=t7&o-E~Eg!vk!I38>LcXfArnoF1H9 z9+;Bfh?TekE_RpB5FbZ9k7Zuk1K?@wwAe3Pa)ZjrD&BW;R$ zAi0his@%X~U;Wv~aQX4+u0vOJP;7};ckayWKF4{senGc*_x3TvO4UNI`Z<{1eod6o zO>pXWt|CvG2MCRJ&(>miz=gC~*Tj8<(8qR!wQ6Zen<G4}rL#FyVNLNLGYysYTTe1N_y1WH&Wa1K#Xps$ukv#-BBcoHYuUUeG)x-JbW-dFk-VjgBM z@J4MQ%Neior}UKcv$oiT)5>@_eU$3zrGUf0`4BOYC)Ohukg3aV1#wM~8F(Jt0@RH` z)9+0DQ6G_(r!Htnuuq!ZI-)NRBOODh?}5~%%}3*RO+&!@Un`N3y9RS^#jPm*H0eKj=3OZ7qzI62`hpt>Y z!Ksu;l<@N2W3@GdELbN6Gp{OOPd#q zx6ho>&>{1Yx`48GZ+{MX6J2|@k2t~8rmlMw4!O2pN>4JcX|o_zqM9V8=t<_I5&M7f z&x^{+@jo~J{WepeZ*$ijV)a>7^vMmj`plau`MD#tblQmW|L^M<2?o6 zEG+ou-hyuy6?}7F!8eQDoAuC}Q>iMVLTp2w$O+5z&vcw79aG?osi#qWFk;oZVn&+j z6x~d*!4S#qt9)tK3PtBrWownn)eFN0F|i6Qi3P2PEN+y^5vwUj>x_^bxUxf@c^Vz|mfzO1Z>{_IZqs=`-4 z>o>4fCK`^6BD<7@T{m9o`YbE|n@S}KhqO}rWUl10xMzJMu25a&mL;bQ=Tz#kYS8cOB(wK5IaUU}LfPO-|0)BOT2m)bv?#eOi7oV- zi>c|Ea~_x~%O9bK@L`5;044AxF~B`MJ6J1CTQ(wLpHGphaK}G!ePg}i8zPN zn}~DRyoor6&6|jG*u052hs~RabJ)CzIET%f{B!t=9kY2Sq}>&Q_%(qekW(B_+xZKu zPxA~ZOVyZ+qYIPGn;7jHI&W`kuho2>r*EcMHs6Sd&4!ci^}VEp=H?&XGjj zwgLtG#jD4zF}TW!rEv6t!q|oa=I)4It9&7wbnu{bRoK@48*UKXY}`gG>xHD(Yq6ud zD-fW3n2@?B+noy=xopD)Hs|oCx*ZqVfy0|_aG&+5h<%PNhtB)_lQH7p=cYcA6VILZ zVaF=V@_~cUIV;E*T^F4+NJ<8XXo?p)4&8z1<|I&~Wgf^xy3zCge|ypMMYoKf^fwd# z*NF=z{QC(r%eqSccKqLuzhm5sW3P^F9P{y*uZ-S0s=4Ifqu34l*S)6qR;n?lbU)Kw zfq3S>ZcMLHMWzPPh4P3(PGN8e6;u+?m7q4LCEe6P5rf(*sIj2aY)`eS3Ir-cqe6ti zl*cc~;;pd=GLEpce3vlR+aCNXa9Fj*hDUeO806k)qz^9c8) z353=Jqc%>*V=IE+7!Mv~W6+%l-P6{n){p251}cCh)*=r}nv9zOz>HtA`cbIN5;m=! zB=d19(Ci2A41DsU#=#(=JC(H>PpJ$%-fGWv-k*&jb-x z^R0>^XrnScXEJZ?LqsI)P9MIWIrJ_pAQ8PsU_WDONJglat{&ZqFfmsf>j~6AK!DS| zQ8dsDCag$Efu;t!KZD&<$KjGI>xeV^&t;AsLu=kQdT)UW55YOJI-x52Yfk=}#)f7{ zcTBTMWm&o%L5~ga05uA_hD1j?-3aYC%f?_4ZfXR#U<#qpi4!9?3L{?gYhgXOGe20 zA3xLy2(-pJX?=ZMW2OSHhps!O9LCXFx0h`HDdaBI95aD>Ld}2>C0=60Hxn)bkcaQy&ybAiq$7-Q`pmuM`RJ6_XTZ36~_;qBYQ4uVbh;@_vBIsTOEiH2N{P%+RonnqK#)T)jedm8wK z9OmaDB!&GfR$3znj13O%(Q4&^B^UM&B;G~PF*Xz!eFi@CuooDeyCkSW0eJpo-+X7_ z$Vt-H#>|7NWjlI_nNhL0fyS79BIG>;9R%B-~&e>wsBejQ9poQ(lUJ z_1wY1Q|B`PI7gOejpEkDBpjo@a(WzUZa3v5FwoGQ1J94~X7mC+q@)7ryqGVmXkT-p z0o13J7yE^s!f@`-;n^cp$#t+-`1{c~vePkm-344C_T zp+Sy!`Jd$vx>$N}EG3PNNu(-Q2M>QYmF*MamRi(vg5SM+dW)5-ss*TN9|CEb3AnME zY^CH_oy4X9-E>UUm}sPZDdD<{;#&?7m|-!?VXezH;%E0VGRA=7qESkSZMuWZ=jd$hX;3{R0PSpZ1!136p_L zooNr*B#ZtEjU*FoYk8SK#>Z3(neAJ#ALc&(A-&z;+GRx&>~FGx@d%KchOCsx&vPJG8xG|@h>w)Rn8q)E|CN<0Gz`4r+Aj$4MG5F5@!OOd| zXWqd$)c1JcmzMwyG5Gnh!80EYUhc;^lHI#6^Wx>~zSrOrhGL_-X7>dTi4o=-i+DKxx1xWk|asN9*{DcyY%BjnX|9z{U&=5(uwD?oM+?} zyv>jmoz{^Uu+XGSH?ImN2`-=V+pN;rmTYnw4rt)biI87D*z3enb zP+f~wA8`(QG`yTN5qM5im1#fe;_&l?Hg&@c*KH-YeTg_ zgM_TjTG1H4wYXyWl%)F;^!2Dn!_~U@?^7)`O#rtGdFrn4 zB~j@Ny3*M4d}<3wC992{g$ri~*I6CEu8$8MI+{7~s$!Bj|5*0IqPDd4{}8QCMXPXG zMypS@CR?t%QDntM)S+oKyZ05`Z6X`>zS+M4vom`N0RP5ee>$b)?d>v?nqFM@>5 zkrcgV=X5F*gBSu|qErWvyy|$ERN+*EHH?34GIhm?(eMW_xlA(tX(*+yK#I#t)y)?>O9SI!#f%U~&;tJxV zKK;Ch0d&ZE^4Y+Xt|?FT|1P>xKJC#Ojy|+UsV2}QS#<$1ieq$j=T9>U8 zF^#_J&F+5|JYIDNb|B$#cUszaGa|j>O%#*I?&Z;B`!oJH3RmoBO?i^B-YtLR1b zt?tnEwr7A-@}I@PNNxq>OuxI2PxhAdufc+-rb^)!_SGq&Ze(X&M`eZBC?oA%pvPCv z^aHC4kEy&JLGLGdkN2@wj|WO_bF z7=l9SDv;txhBMLoe*e=toDB$9<77}-_~i{J0kep3KN(8e;x&M6LK_k}FgTW9eR)r| z>lYdCC}T+wh;`=0k&JDEx3K>yj19Jc`<2lg=ih+E;PV$2h=DGHH5pP*{_I@rCFYiVJyFY*9%DI!yRxsZCM*k`r0j7G>J2_V2h@4hcNs&Ls zoV{u|&I)mn&XF<_I4XCqvbKzI-jx0)w12lr|787LU;hv@R(LH(uHGR!Ha5}!I3{fR zR2tG%Thr zS#!iV>QguFYFIxf;`A|Rp0yp>ZUw%I!5*k{Cjy2!5>@8W&|m|fY#rxEcm13Gl^DdV zySnax3Iu})1o^JQjUidn(UwlNL9ETwV>d$+)dsZW_|PH0K$sNM32KosC1TQq+vwy< zhS?WyIM{C`bTYj4`HMIH1^RLI!rKr#b-&awL0n|q#u;RJ5HHiS*Tigy|9{DYMPuH^ z|J?j{lLFUFf!^QsmW?ec9)DoLJtOuMv<2hwD*S(O684?Gu7$6EvevDmhM6nE^udX|aAykWyClBH*wn2jn@{1M-S;#LK9+U}I z2o*D73SZ3YFI1!RV{*xst!4G!M^h@U0JDk5B zV2nBe>D9h@MN{kMMCHBy7b&FEF_Y~3z>D8(2xrE4zuzfu0)Fnkv%0bAHFZjT^+_b# z3+Eh?vkIm)GY~jnq~RYPVst;}o%8I2BX0i>yrp!+{n^5zU)oi3gP`8Nc+iid-cyN| zWE0K!VU`*q<|qHtFTPk@FQQkBbu`RfIN{HRTRq{@;qm4!Ay@X=!hMLOl@AKYrx6au zd>r9j%*PR~#e5v$SIox|PQ`p2;Ze-T5$?o%9N|mM$6-g}7*!y#4K@h{!1(4FZ_F>Y z(d4-oLp#YNS-~J1S%^zw5$tE#!?<0_V!i&LlRQ12-NLNCud*3pJ1m3P{^}VTFmIl} zFU7!Ct$O$nmxCLd4bGVZTS>Adv_0hq+5{-e(!jl%TMf)B^^69oX_@0ce*?2^yRCCVC|Nk=yPu=V^H*o1@TGy7S~F8&9%qna>gdkJY+F3-rEE zwmb$$3ntafNs6~w9vkxw-N4(o1zo@+5xbmY?K5qNC-TXmM8R7NVd z8(IjFksIM+zYg+GB+8>L2yJHsZkc`S`=Wz)Awg6sZBPL%<3IWy>2sjE>=De*{ zjB$74obV&@SC1x9A<{*awjpbN4{}Qd|K6CY@1ztI#bzU=YXNEseYmB;g(R?8-O7p} z?yw~N;&EIg3oI7-v0Qv%x?IC9GjtT2YN+QdGs2iI7Azds#kYZ&1O6F^?~=EHhG&Pi zTxB`!t6@Lsu-$8Kc%T>W|5J)mMYnuw@}5cm*QCmcbrZ);c(&}$(hKANWZb;5XU9$( z^NrD89W|@uPfPADUSISvihhxQ%a1~HRa`!8;iB>5XUXxb+E@XmF#hqdz{r~r{7UBJ zMfIWfDvwexRX)wDfL?ce(Z9%Yenxy<>98k4Iz>^nRji-OV+My{y?X15OROSZKnHDH z40yoi`x(H$D8D*bIo^gLojMe2!iRIZ`Xj)c?)xLaE>q%t=P1=r(-wKlyyZUHbs~p8uSt7@~6+M}&lRL(n0K_S_&(RLIf)o;O1=|k zDoYWSQr`CMnd#r$p6S~&)4%Td&D@^3eQ$H}xHCOfHQinP?z#W}T6=$w^GJeaS6BZo z=`Q)s_wC2pYwx}G-fOS*Uwe<`XbIb}^Q^Hxu#FMTS`IqU9B1<3JD?7o1*`Rb$#F?=>65aD9?Ff_pYt`LcIt1q5Sv;F73qvNSl_pM3Aa`PT-2@-noc zr1iD8m0XWXU&$cxzQZdqyrzU#Ee(}Tr~`J9512=&k;$~l-e5|K2*U(M2abK1e(MBd zC(6|@19w4AY(kl3PV3n3D6PxI1f?Tpu-^2xiWu=N5#U`BBhd01 z%2wL*S<_fkrno1dF&^{_t--*77PzR+h82*DnPf5uN1}kggVzNN;SfL)fMbNgIr%J} z2VVRMErFBAE}Z!+efW6#wVfQ~c5I_F)5m&TkeKx6@4(=mUM&8yp=5prNPkFM;yiKq zcJN{9Ba!4g$*z4@~Kec{6T`4)YC! zeAxfdet@dEO<}X_ZGUm+;oC6Pm(*;+ZU2OvZOKKOOs<@%K}_!Va_4TV9ntV=3 zGdS2!n)w6~YKyaB5h2Zp`2i;c!tp`&@qrE2GZKpJqNDem4q{(nLqX@6Xyk6#;zK}n zBa5YTqv9Scg;hyihsBypm@%i*%}hPP#WYjTH|7BOhv|taH2B5A3#VUoJCI!p^sKiI zT{wv=cXaG-T5?L*)%5;PaUlm+oc?{!_otqP4L?j?QG#n+1Boo)29_$fP`9!or{(ai z?3+o>Hs?C@P0s$zoVmD4tyi9rRmvd>AH$%G&QbxF(OagU0=x`TYXG!(gAJi0?NkvK z;HHW&A0LNlKRy-44lltJn7Cj)%)KY%h4kapG~Q8l;yEQ_0;b2?vC`_$i1t5yF8wjD zgb)BX{oH#rQv|x3^@vK=9=-*9oia5!Cs|cmI>9?vddL*AfpZ6%r;3H7Ys3<7@hrrW zqznEYV76d}29BQ`Yw)zAqoY@XZhh5#LQO#}`%y+~48z*k#p*^GiwOiTF5;yzY=(qx z1HUv_mY*2<7q)>KtO4oNLA`nO8@sz+h}umTPM!gOP-L)1zStOS2WoS!ISeS^!ik6$ z=oFQf7GATZ3w~Ff_rdhrV0+vqFNAR$vtGlwgi=B*f{iSdc}_4$c#lDWro1rU;MEwT ziM%%}j_+1*NcT`Zc?5aTR1BY+MjdFP6y{lmc@^jyonxjX4T8R!hwsAdtNA7@7 zi+8}mFz`!+r7u(^iXQ7MJ$w^5F=e4M)wvQo_MdaBqs}+Jf_O~Tm$`0ZjjW3Ti_+E% z*m|2|ha7T|Tc;-zG4yX|EZ2qVNJW{5+Rwi=^x{syPWSJ0(1>E^uEUGah{=OL4%aQcbT3+9{uh$IgD3C=LC^y%>Oko z^saYc(+D3S;~>=AGjQUFx(W6B8X*1dQHJ)6aViflq?yUWN4ByxxaGpKur&r{?W1v^ zx~}MI6RgA;>vX3+lX^(IiG{bUkcc)QJ>rS(~XWTgrPpS6^oRo96%-!{4AjtiH@$!O-ckrJ}f0sCLi3687 zaESvK$ALYYdN$Dn=HS8!U-cdRmjTPFDzAspXd<~HSEiHSvz7}w#eMbg2**KEH!hVvmP5`tDd-BPB(YR-JtJ|#~jqCz{z(n zVl4OVZLJU24;!EvH%0@uwC;5WwxR}m&Q}{X{a2;osrJKt{d+$j=sPvgle)^M`R8}N z^T@uP%Xg2Y*i&dGHaIk*w9$g*&(DW#$69_(?nE-$KHQ~I~KHM56oA4T$Yi2xA!`=a*R;re2j-e6bNQ|;`U zE(N+fdz3H(oWOB@7y*Qk3HcYewDMmS>gP=}{qOwGIaMiNZVuI6H|!+xYk30w3+izk z&^Yj`fFXb>yc8z)o$@^6DmsgHCg#Ey89st@sng#~bwqS~Y)iY(NQ@2jH_ZR+sVVF@ z3!Lf$)JQ#xBAx<7$uO_;6INdbZwEt^zi#i@KDqaTumVfn-}4}?z@D2~@MmB73iBnx z!rB#PeOog?N>uibHq>Wko>8qe8kf)9jyAV7#v_aEbeKN)(c1$bpP~QV)8__1K8k1R za}XqEMGHK-aG>fxy1W1N&(a?!`vu_&C@}~vqscCudc(Zb5I?7%9XMj(i{LDZ+X56d z_|XYKX5m@GSkZ6blcVXE-o`;32dL>T9SCtXc!JnCNQ!cYUV9yGfdj{O!u6H}9sd|4 zLgO@WW*2TJ`aeIDe)>4qM-ytFl#H0ZTNoS?4kZ6 zM~B|uW6BXXRyhB7g+!3bqsoSe?_=4igXT66F$N?3edp0e_|M~*3k?CF5{POAWtOR) z8IFH^;pARa36I$H{^tx@-c)#~gDjH_JV2{1oZgLFlMCm+7~JjV33 z|3}n`JoSG1^N-WV_CTMEa^%gYgzWm{=!G*okr9^(rVqao^D}C&;K}HVLl_k15WWm8 z+u5`R2Apt8oG~w2YbQG(mUT(9k|$#ktM%q{Jzrfmi&In%Hm&)IW%Ts(MyH@HuN)m{MG*@*Y_q$pbpyA9S%M2gOtB; z=9z&rd;etTvmG(W(F7poo`YeVQFrX$n|}5=$aj3E9tPja@u+}5wp zmJz*d4nn$^9QC-siYX+JrXD!^Li)o42vVkntI2{%ObibU=#I|YVoi0AHpe?m1p>o? zI}GZWg(U1rvl5a%zdO0+9sHq_?t9;#mu}|1@+F(A{WKLSbkM=~w6;tvBP4pfX-<8c z^WEMKF!tW$rf{hHwz>qI)xEZG$g zhqmWrLLD$2QNW`H@ywXgNEHI8 z$_)EJ^W2PHgEXf*3Oqiu;#}eb+e*lah@B{!KcDz$Z|cS*rs#63zDHmA>ou=z=O$P8 zwhC__0B@BtGLyRi3Dv0sHz#k=e}nJt2K*;1afWst0c?rZGg`jt1j>}WBk8ZKlP**lX8XIvj0#3k&3E>E(d8(}mE-$dKYDCDt zSOaZ20&LL$3wL9^0fHo)v}`H2X~-y#qo^d15fcs<-%=xC@FR(qW=5|K)*HwH>og1% zo9RBWo)|e7jc=tE3IeW{`APE5wQ_|mxo&gMy2uEX00*r7%2AHUj%at=)}8hO;>06PGkQlsc)Wa|IPF>YWL3nE);jL^#&1t8WX!@Ef_BXqGY&C`3E z(8UXOO$>)R*VZ-0meP(<_mS&h;D8>c35^V=4IXfwTI9+$PAqIBmYY=S+pYt~dzgF# z`OeItqF|UznjkBmTpJIQO|O-65^3e8-4k!ujaRTAbWi$Z?^dwth8`>o9;o-f26O?b-9vNfnfA__p*n6_~@ z=KAPJ=GAx`;bzW*=+}Pdhs@+GCfnCXiJ%Km&VtklD5GMQ)CqqQv@S*%NGXHoZs;ua zjZ(o^zBJ5+V=R!$fK=o=pe~BsZ{ET%)|^|l0Q=sb+RqKHlNpQy=#oqE4%dai_ow9pMPnM1^X&pN__Wt5G#{6{5*NeVg_~XLq zp}hrvhz!5%-}jP}q0wBtJsg_V98UnaA^qVi2H^8^1l;}{mKg-^l#uu4J&Z`6I-P!D zuTfJWTZDHjN6vEJs+o@L*X`JXe=Mg@aH)e(RNX+vD%s0xb-$ty{=^GIH@ArT1Jf7lp51IrGO4>)Z?MK*K*VaboC zdru60_Cr_&F;3_^u%9GmHn!6kv4Q7`n+-~6y84qrrHe0Rn;1;}l43!=)xgvX_3w&*(; z&JE*D*rZ4C*%29daz{AZZ?{Mh!=cm$J9(6cVTJn{B9NG*vCjHvF`2``{663~M5VF+X7%Da3u$iH_HaQV3u1zMi#X8XxVG8FCV2u}&Ry*wEX@fzgUjIIQ)*bbRRGvxv;ilmOWS z!ij*p41Cy!zUklhcK?f?Y0c^V2hw|9Mlx0S8Z4|2`!1Y*2I_XVBWEYSj%LkF&IuQ! z-9|+2fd*_DbWW`ppB$qYpai$&P)*PXO{cAeq*>bD9*v0pKp}8xb%^9!o9s{Gfydic z0tS=Ossut-VZgbf!TJxK&*BBTP&2maK_=d@W(%YWRhy<879_)X_0!`y)QWuq)UJ77d&^(f{;YdcB}fxBW*5WeIa?;0W8=!L1B3Bd&{$=A!;xl<6j8 zHl2|Hu|(A5E}N^96F~MHr!`#gI_Jx}x-C%j=~;lkWuQXm4aK8D+rt4^;dpk|C`Dl5z=!7tcO9Z= zeEl=fZ$&{Zz3Wz8FmsuR9?`- z0E%f+P&qj{Rj5=>=}_{s$q=gs z`noLTq7rR)=e>pga@5btI&(O%G{=m`oW^vAuNt!G%x35S2xf)t%$UemBrgY%Q<5d& znPlZ!T&&bL1-RK6-?|k-Iw4;mBIB*CjLqn+@L-jv>BgjF@r_@M&+tZB zq6V}o>|FR>S)#WlzlIIf25hLFcKcy%dkolMO|klIYrA0G3xr&#L)YPMgfnIxW{XAb z!YGm;3`hweV>c<7qG=nkxS$z2mo_EGv8MXb*2MlnHyVhpXU?W~A2jx=XHE|uJLYcP z+-cI4tj1hj(law0n!C0Ii&zH+ZDU6)(PRz1TY$~wPMda^@XzUt&w;W?(r}}pD<}jr zjOZyqVvoh@1+6^M4bo$XiA}N7G2DoeTs9isfTG%xLYcvk9qqeO^NL`<-Lc?!JE^r&3PJK=@ zWxHVdhZ47N&-7&^FhfTWd4ZL+48eM=b z4!m?wK|8UI>*X)5s|U}WLqDoA)`j$x!IvDHtR&?9V_BIJ9bOA@`65o1?9Tak? zZ?i60ZD%LmVh+Gb3IS%gInu?0+Z`ss4IP{rMBGLr55ToIuySJuVAd#43ufO~|0M34 z&_Nx(U9;h8WwMN1b+##?W(>+A4m#bn+y5TS&~Q|`esF-x<(MRQF7Un5$Z3WHz8Ub1T@ugz;`NA`;*7Fysr}qWWLhi{Y=j zFSzyef8;>7fGZsgf*Sm3|+}#S#i)*c7#OzXTlba0z0nGxH{}M$MIk)uARcEv->5LY7QkgvPO)4^O6E-xeYfZIVsWt^3yYlyv`H7 z*MO*-79&;;{HzQ5Ty5qWY}Ij|H?|e-Tn@g5M|`7kFH}*b9syMTnR^r~z=#aqQU`ZL z2zClEjT}Wu?1549y|GTl*-j~e(8KAUp$jE2(%?J02VQ*{I#Z)ZzW4x!6mn0U!|4

    =bWEEA{?(co&nlD%svU16-e5lYAh_AOn4H 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≧9fNU?ZoxVwXTi#+s?LF(p;Uo;DA^mOW}zuqBg*}E7VbCAh+l`N@s_Hn zqesUl(y4fEKc6{6vg`zzTz;C}@5w1%oSDosVA*0TS9d=pYl_MwzAq_ z*N&XDVNRZcIf=q@#w6|eTo0Gz6jFIC<%Z;JmOB~pf<+%&06`cD>U^WN<(r{OMI+Ky zC4~c~06jrxw3xQ19>OD<_q}oTB`^0CRTLG(Nb9yqsvJwQr?tD*BOZfK%{QH3lc<`m zMSvvq6QQJ@AY2!gBCI#vr5P!V%rfRZgRX($Wk#bq%AG4tHKAc6B6swl%{7*H<&xc&^i$&y!wesx=Lq62eSRABUkT0#VFVa>O;udD#hB-P{>d zo+~Td&b)aV_*B#=@}U9rO-(On&=FpN+Mm~y+6kEeKO${6V&d_4zbe2Uhxc8V2@~)8 z;XuBY3MQUln?g;e$mM{7C0H|pZTDjAuDSN3*me~13FbLQjYcmh97Kh%BE@q4av$W_ z0Y?|LS~c!Li=FbVtYgGk%p{>4Npdh`v)8wJlUBm-*NPk>(jUCKs9+*JVVo`+jm~*K z+0@#!Hs09!Bs)ROX@s}PT;$hF#iP}+=9V(-wt|TI>__I$o;QD(Ml|Aq4Hcm%{|lhz zrtED{aZ@)R_4XIYq1yh}{=qIWFO}CnnPwuQFj;u6M-~X=lW9&;3PZ$c!1Z%&VmmGa zI|v6utaw_Wpax0X$mTmodNbF~lKIZy@s9`J``tj-e)(~E@X80-b2sTn|B>JIzxhSx zWSZZcIFUL3+Tc-Fiv2o!qAUC1^)gWr*Q0L-LnX2&1}|*d;{6OeNI0$^C0h`bG{=Ud zX0=|RGHq)zmhoD|M0_2VZ%wr|R>2$t*0D$p7;mhl1Zp&8Wnbgl#l91b2Lj{xK=xQ) zcNCXa-mB5%Ngzu@^);?f6Vd_?eOzjlG`VfS7{}0KP5)pGVm7y;eIZszF_i^c2$ZsZ z@wT@%QZfqm`Z%l_=ptlMb6wmAGI&gQK`Pa({GAX<$uYMHF|dL4*x>PwOvl;&(_i@X zc@RhCrq3g5DYzwh+25XoorzEtYsjGb?0mUi?0Eu4IdIXY6o6ICxxFBl-4}4KbM#*E zf->MHR3j)gV^fK1)MCeWl!|i7H;>FaxK%Vg8?S-kh7^xhC7P>R>tS>>FOUrm1z#ZV zv|E)lM>UN^*@1_i#=;ROVAw;ViU~|t&zX4%`X_~GZLwy(z*I~=WMbZufZan`ed6VK z^=5EYxG8Pk0u^JK!8%>oxX<8VG22$Zq`!0KIMqo9-c)s1x8S&T`g@l}5w0|FYLr_+ zQ}kg>&1*{x5P+abPC}WmQ55tL+bndZ2$WcfRG8nsNkZG42+8#*99w|@qyZ6`QN)I= zPJ$La@tHX`160ie1no3}lW$*Pde-iw-6a#|-KwElz>GY8h{mZa(g4H~Nk+@AJ$}kV zMg07?1l;h!N=T8YX#<;x>MM3^vE#62-|k&r%fEg;Sf26KUt=)UW@kv9!ji|U(vr@C zNI@qS4Q@JW%LBBuEdS2*+gKT^4#fh={r~4h#UDj}e#b7qcNL~X?@b-7NEV41{)aR$Ax&jkMOaK7JmwMLJkzy@naKeE;gAA_pSt>g7azu1q zU~#CPo_I0j;?UZeV;+KpSYs6k0Ay1lIpFu@W!?+J#~b{kk+QbL-~$axPh^?c#j0`Y z6;f9qtXdSdtrn|d&SpJ-KkpLSg+<_$gv4et)NUfxm{kzo0~8#9E*lHY^l1ZoJe1b{ zZ1jdg1(?J3KXM5DHpXqvl}dU$ntmz1DDHo1*YU9_1`xn9$H89Od0<1jk`L0dqI1JI zNOe)jYVaT3ZjrNUb8HI|ZMU=y_rPT-&7#{naRZG1O3Kd$6|!&p4;38NEWN5((8-%a zF?jiGk|9Ugoh2NDZ=D-_|0uGFe*NSF%rUb38pIwFd*u>u;HYksnxt5}Kwx4DYJhu~ ztFhKc159~8B~vE;fwu)oNCI^O2zMfSgM>?3_9U-6DMwp3OOJfml5jeXZ!cKL z={TYjq2U`~5n5HZvhAKxlCM<1%Tus1Mi4=mWO+D66{=dBw?eCo@X%WkL$@ZDYJo>% zB|-tNY4kOmY+OaDigR`2N^CkCA1;HxWg;x0=IOK3*O0nfDKP*U2Ud`zmvRPM<-G6u zj^h)+_;kt|Zd&3hBa)R}s&|PVlD0?@SbJMl-2?-*tPuq)&vtlKaVNBF(0nhTP!R;% zip-^YzartYCSZ(i0wusnkCB09=4&YzDlBmMsb(H=qE&wQE zr;5P}4@-xRaxm9YNhtiMBgYzg*=mV4?QDSYm~EY+3uT7B2M0=s&o9N47CMwa-vJB7Yb5^~U6aF;jx0M!eDLf9_nbe-A@oLh1c5 zN2zTb%8X);=YhrbSq*ID!kd70({i60-p?41dM9=FH+DZqq~*1#AT57L#DyX5!*u_y z3?(nQm2QK;ZBPIH4JSygsg`7euh#8Qq}*2WlB7IEb7@kZg8oSXy{!}-`RZ=dxE^@s`OJG_l^XZZv$2-c?jI(ISdIwQvXzeVHs5a^2CxD8h3g+6c6@90xaAXF`SP80$*c7Vt+f29)zX4Ula*8AIE) za?S4+;Z59MMwDn&cd_GX`n76}{wl>wu9C_wWJT;S*H{00t-tb(-Y!yzHp?y#rL9qB zX@i7(8ZLjmDvBRvZq&XDvcDiSl;SOpb}Q){`*YWa!ztIBLmKnMWxDYi^jdZ}Q@Iq;=4L*wULaf>vZ>(># zmPdN^;3Z)2K~0MMM4esX5c)$bo?e0N|408#5&paTxeI~2 z5V#A0yAb$efxwZeyB{Ea^5Z9puHJcma{lbwj6{kcg19LX^IIq<>90|~L*kObd!8*M zi3Q@DDYI_NIQlK|d=yMbo%D*S6PtsL3m(}tP4Ni+7vM_ryg|0MJZ})mG0&Sv^S)V- z_szn*ZywA0=JC957MVA9#-b&MsnhJ79nMl;t63}|VZVLBoN)JK1OOv#Y+uAZTb9{` zb5q{a-r|?f^mv{eR)(-ZNiyu#wCV722h%{noJ&ZJmD2C^!AyG{mS-4TehD&OqO z0)>_FHA3ki;4(w_4M1*TwW-WtJ-ZHQBO?YlIq(+GY~4m1Gaq$mqRT?@rx@ z_ZKn=l*ltODdulE=w#qErN8OuASy0Mbiphq>hr(W1--uzpqS`*^DKtiD*@&@93Wv& zgU@)QsGMB{VI9NKUzG1Gj7gZWM|wofd^&RJS%Ysts7!U zaKp^?lZbDa-G8~i`)dF0E)y5U3gjoPNe*^9NDIsqboj#sW}=~KM!i&>MJbI2ULs8IoH>;A3yFsjCkM7L_(g*vBPSJ=!pUB&){8x4wM5LWf-RpT!{QwoB zM-pIivzRgYDhI_#At9=*@`k49<5}pfIFTvZ%g8TJ$jDGnWBQEm?_d%bWs^ck6Uk~} zyQ(yI;Y?szHAUhoe;iS6A1NclpAAjOz*B+n#N{)0P6us)BMGs(JfN!jWNUSKSq1$; z^jn!FKh&Y2ss%^3G`FVe%FCXlKc*l*3>3r)Hn)_QJxza1!J61sXa!n0Fa=G8fZ4*m zJsaB+uP>*_wowiXJ&U8!TVnIU~G8t_B<@jTEZ+ zIc&#yezi)dMbOG%oiMJ`XCKU_K1*`yEei>CpHqnI=Ggv(7xNE3tiv51ROlpLRh?)- zw5JMiDJpI;BaZbOUXx+vct9Gyp(PmD1vkW~%6YZ^ec+MF{y8jP$eyA?~~=y1MoJCz&-(-YF(gvc2EL%$Mjz_15>6sj$M%E+5-dAkNY^uCN@i;Y|gJ@Z~ z_bgh#-h15g`SWJsi?779Q1q#aR>2oODX+t)kIq3~&Q+P-$#$`PJUup~+B$qz0gsSn z$cJitNR#5)@MF?Wk2_fi~MhF7grNK+QREM>PK~gB*NahRR zueb#%gHsF*?@WkF6*c5YTfAchvIu z^NuSYARN}xy%dNK~cr`qN)mLnu^E-L%+!f@k0m6_VB z3Q5#zp<5hILXw}y4H|j4q&q;AJ8~#lbgYs2qo{I!XTR-$kctTkp}prvAF^MU&}_M= zcNXD^IbaA373Q}Ah-|{uiF%Om#mfCeZ`6>pM;zgFfsm6$i3(^idU5G{IsJnx5g7fd zIuE3VN_e26f))xT8k<@n1J=3D*tozn9P-XW26E>j^5Q!$nM8~m?onkB{RIBp7R@)E%PmileDgGSM4`M49U*ODI3yHM z(Rv!BK^=LcmXO|r(s>_3(5T9}DE;F>lbW&#u6NAkr?k*N`1jF=W_k4#4K z;e6bA-7kzU8Zm8#JKr5!TwHYAGvD&|{&MdtXHINE_Ch)Yo$BV;HiXJ0aS;A&tN@k6 z<9PF?CmeXa;_A-DV@*x=pr?UD-j7`hgER20y&;57&?P zANd#&voqI@;LE`7ec89qf4M7N*Zt#?q7e^GO00>LL?Ve4%nUJ(bxm>P5lzheg$9kmR--yp zbzDE%f9hQ3+%c8s^x*lv-VX};&xIA7$M76$pO?g3)qE&Ec&^?#kcPex3jm*U~@{(rGT?It@uU*VsePi(b69e79 z!JtQ_@9SQR{V->ayTgqUNC^_SUNyHo8Lx}M(Yu)->wB={M_`KKLyZJfDs2RKf4P@M z1<157M7R^pX>O-utqsj`Ta2=rV(wH_V$WcGq;HyF9heuKuFK`ozeX)R&wUUZfPs6Bt`~kS3r17J6g?A{aU`RsRfsB zWRQogF~67DVC3`wTW?z(P(Ef*MK79vQ_9kHy(t^fD~#0~xUd@wO2a&OesEW}q|C-J zNBpe&8Bm3(53i{x!NM8Mo{Z0M=Id#HYOSB%uzEK{^%tT+ne$f%ZyYjUsOkO_G+#P- z^TuK{&up-Wx~N4kWR%wxB7x*KOc=9OPe1`^Ra@ZC9?hOSj2z$Dv!^o`4i4`AxUct8 z-<7>+pZd~IFp(YIYlym)zWj2exae3_eWFR@UIo4{-|?e{7?L>WBAdQ~N9`&*hgrNh zJ+b>~?0~W<>B;U(G=NmR0XcFLRm^9Je3$pGevV*Yn6`$b;0EpIYG+Fuaz|A`mYdjq>~WKZqMzI&Uwc``^cMjIHZ_iWYv#=8e1_q@0z7*M$F$t^AlLyH|5pOXpHo zK%x9+i~vTFI>I1*DvW-rdlfbEkTk;9(ooqp#U)aMtR4OKFPYWSjraR|E@9@Q++TLD z1TM^;?55lmj0*w5QIL}JvLk0QqW(!q2f}TTad7nr?hn-tZw489S;}GvlrTe`mPqtQ z0%#%oru0Ump4=3rrMz)MtunI(Lc{y6^Z*tEr#>Eh=Y5cL(2C5#lbN2Acqj#c28e&3 zJ$lj{s*cqzCOy)v>aM_~XH0f$-6wd`tnUszxp=-fzM8=HwD38UY*HF@Ij;Qk-Ke+d zrdh+9DHtFiEwf9Qh~qWmfPnP(9?f)J%J#gGxpA@ZX^wEe+5IGl`qU}z>rGUQs!|oLT{=<{q8O)C!^LR#U0V?APH-vvs zT$cqFK0xaboe`)=T$Z2b0p=+NA{8AtN5jeN>&P7XG~2x^d!pMrYz&uRL)?HEqiyW| zQAttc;fL34h?LaTC0f>lW74$x>A+7q7m{+4gQ~S6y-BTuDozXP;CmD+oH=}h&WGRa z9XS6+_QZRGZ+)IQlkU6m2GF_xzyYJj@8muxgro=geEmUVVn8sg_6~r&- zwEhJN$$k;d+<2WqrCTNxJ$qUn$!In?fMEYey~HKza~re3q_Xdx&<%p+P%YBd?0UQJ z%KpCV$K;Sl;W6&=?q!(rl=--!l=76J?6&93KXWHt3uJ6`ni6p!D%PJyj|maffw8r< z#BP8p2@Zq5BN~nyGXaOsYkop=lxg)JKL-Q_brGf)NYLN=HgUyoT*&S}*WcZlJ@>o* zGrc%fq@+FH(dil8OEHD{&$!!MoatCK%HY@3@*-9N++QqFPd6B~205>CrUvebtFsT9 ze}daUdr3asBAFuvpmxA7&1|g$dhJ9eDp!>|+6qf`|do?XL8w^n~su z0MmmD0$>Wl=3fgyM$-M?DQYje_fPK~HF3{`znQS;p2PP{82|He`^L>E`TLSJ#s982 zSv+R!Uyl8gF&D-}MqeKN)6w^gIyP$F$WKO29r0S^pCkV!;zAs zk_~L5+^`irq-=SS}a!>YTmpt#gu^;pq=$CO1f|Lw)(v2kUJ_NcetoSQmBPYJp z{XY7cJY_!Eu{P1FT65R4l^1F@bUb`|RNc>?aA(jsr_81LL2gc0=jUE+kB@Wjb*BUL zlc%`%r%+!Eo2>rBVK2o3z*i4LppW}7t|Gb6m*)Yvk8(@gX$l(}Fr;S6C40*eajC$7 za&6f&61dnk2NBOcS~ICLYYmo#c*_-;t~QIAEkXk?wZzm+z!D~O2z8v;L*>)y$Xk} z1WnhD44nTEoJ0SSUhMedHSTxO zTMtcovBDaC=(vTy3>z>@j6#Px<|+3(bpI+{#Y5#LxN&Qc9#<p z6OTUGUGypqHNc}=4f;5Bn-?eO3oo9Jfp4m7OC`YPLD=?ZxO90edw^f>@BRc*A#n2p z7f)dW2xuLPcOT_`+kF7TeW=Wx9K*%w@5Ka90`|z|Q@-;RR4td3ahhQt*9z&ZFzT#2 z1`7k_6Qs#0ks>?II$yTpYUaeAfsbA@!@_ofKp?ZfC-X%+R(#|u zZYi%gL@EHIEgvC~$}mMF!z?~xiTiEBhX?1*EfLhEtGIY}^9r`fRUC*5S8tgPP2^&4 z=H0y*e2qJas0MKH3(T#YZ|NSTdU)hO1zcIp;_vMLs>cz=bi*p8bP^7TyW_+B(0$o zHwT3R)CY&ofTij0?UH+?@Htphkw^92Je74xjWJ@mdmjN}^8Ck2O135`?_*1woMDU@ zLeSK6MIvxL8r*d-dlV`WQUTPs-%x8-T)g$`Tr>AM_g-Ag=T31e+=sBaztrMCF^+l~ z@(&{$1W=&)psVfn7QiJ1JunG#AS}UN-bS+Rmby4(gUwiAilc#hF_N{jT$o?9AZMx) z6>WrtcB~#b)?sGTyosa+2M_h1zLtHnGkfB*?7mKXhbSo9bs2Y&{`A#MXD{yRb`^(i zV!Ll-PQRD!{sa9Vvy4 z%Tz6FG+yzM?)Tk$K;SD%-6>%IioV<;>teQ$8d3s_O1o*f*2G~|A$Y(-LgL3O34;s~ zDr5Tq3-sQ>7r85#w<0(H_*8b6o4I&!@Yo3@(v>~NQX8ziddT8++E=dQjt8>NoC3z| zJ_xrwWVMCZX4p!C&B8pbgwg|rr+k)mWP_BF&71VlY57SS|;b)|>Ukdds-!Kn!` z9c~5ubmMbSSJlQ^lFgf<10S8q9)@=X0Z_;jL@a&12OO&qM2TlJ*Rg}HkowTJ_Cg>yvH6#-o^Ft1G+VR!;J#B0Nm5*6DgarYAJfxSQEC2Y7zDNaSx_djUWp4 zqulB4Scn=X&35m1OClvZskF}Cu?FACR((A{OV61+N&3a8vtlcxHB7YVm0)i@oF&1m z0CzXqZKMGAGj8_i7eu3Qf8`lsN|32w=JGSs^%l@KSdW$h1^NE}?V`g)_f}85KCyDb zf4t{!?%6p0e;eOC?#Q^YB`a|I|LNHOFm~IR-;MtFqyB#6e;sixvK@uL&W~Hw^<99i zY?`~yT@xv;A)y)}0UN5CFQ7vCHKJUF0Ei5~R^^?PDMt0St6Tr2x?P9vCu9=08 z!mcbcZ9wd!hSmnunYRxe z|G2W}4=U)K*p)f`k%%$=;d&QX4)8JAy`L#=rt2-bQ@wwbXxgcL|8TvVh=gx_#sY%h z34>sw@hd=3S5^>&z4spm1if+jAP9{v3xaM7f@9oR*JMEOp*7&Q9`iX`7#a|%^)))txQ^RWp0M1QA`?HliZ4P)Jjd zs=9d9%UhD$HFrhkTJ#RZNWmfevuMs`V`Eq21fnzRG%g$6xJlE$dq2s-9^>Gf*-KsO z=lO$uS9YPWt?U@-F6;U>=2kYzUFtp%n_E_-;8IO}`WPExU4)du`+@igb%;_8 z;3a4r#bknyG}$c08r$#}qGi04axvW~KmgVvx-nRfj!|3}GF=yFDqU}3BMRFFB_F7k zFhbdV-I@KJnQI5L2VTR!SgR4SE?l@H4^Mh&O-V5i-x>_AHO%N}o=YVf;$b<6dBCbg z8ak_vy7$A(jhFy#d+-R$vAf9|qZU7(c z$sGKE)Q!-OOI38_KG}62c(nX5`M3i~BXW)EyrUT|E9sSo| z&zwDq+pOsB!4c9G^#s;zFLqSs%14B`$3M>=xr#|Z=-%}Wk^)YGbeSfRNL3_Za2DSl z+)eiAs-y_gm?c|l>u8i)VE71sW6{XaJTZ@`G9KXT)WD_R;+l*-pM56{BR|{^WSoRa z&;TCq!C*$Zf7(TIfJu{}fnH0aNx?CX9Km?a@YjOYMhTetJQ+u9(m;(R8i@AJazsH( z%c(Gk7;4x6p>T?~JYLb=Fa=$-go9MKuIz74VFwFx;hM!tXJ1c%q-bXq>RmgNedj$O zMs{~cX3y^cWSEmexZMA4d!};_A?E3iV1I?#jo8{nB7r$GtJdMxcm~5%ZY(?nn7nb= z4E2NQ0E3*>$dGFA58MfA2$N`HERey?hn4%R?CQI^H*@HKKpj0pxScsirZx>-bh)20 zGrkT+xMx(Wg>|V;ncu*jD>Q{9*buNps!`3{1n(jYX16I z0{VWTkWB~`Nb8e?kgB#0mVk9iiYV7;Y-#NvfXxHj{OG{VBV=TFW>5d|H-TDm_+{S4 zZtcM~>HoEhJF{H#N^eeb*hehBMb+|o4;3ovbRJdRD&1E=eT zRh0Ni>5YOS=Bie5?MpN!qcZxaS0P7;GgR5JHC?#O!@LF-D*(C2^5MkMcDYYNkR;Aq zbUcH-AfbGs0U%R-51c!N6CVIDkig6Wtlb#*`(4FEwC1>zNOjR;OfHQfrk3-r1XUu# zjD8ViUl zTGT+awFg2C>Ru<}l(V9mnKJc#iGH_COWm}QjN#8@2C(rFnXw!XWNM_~mfh#}_nrj| zA)ppAZ#XEz5#ZW|-N2Dir2oG!a=hr?g%fKhr0%J{XUh2hZrr~w`HSL9W8WO}7o-1n zboHpe8&y6sjv{wIzh4OKUfo$S7SwCcy3)vhq6kXFj?m)0cMXDRVWz*_bx2h7U+y~W zEOvgVcoc2N0M8qg&~?|<)IgnqlH>4@xe%cTELy?i#m?aS?J#5PGQsTm$EEB?q|a?`?-=^WgD4 zQqSh=ba#za@P^=8gGY`*Y>$!z3vW!|h(KBgZXUwzV&LZ6eb}7gI-l%|i7Uy{HH96c-VD7xf`>y;N#-E_TnX8uu-+322RrWK8kUz?Fd?#jnJl0r? zvVn=9f{885b%?s&vI?{UEp=S{c`~#lLq?Eaej4Z?-Z;B8(~4ffS4C{vhrr|jhj#@1)8Tt_KzRj%dM+;QP_}47+We%L#Pu zjNBoJ9-ct=o45LV_xO63chX?~?)$IZl)8bQW%j@5T!yY+OxKo1{?{jC(7`(!QZd{k zaNhEPLpw)2dK4>!5o~G2^(-!Xhi(D5Gy?_IQ|X240&$@iR`p;or=YWyG+JJ}3P#io zj#Yk%Hkd5=3wkXuOUw0`PXvpg2O$-uV-yg~e7c;=WI=B}YnKA-w=zJVOURT9SBmZ#?IRRF~5(0Nwx_u&dI3mpG zF(1-|6`W!&Wd#&;L4n}v&d1R1{Fl(K-Hy}O3$v5`1T>Q40p4iNCTDg-f}!I(7xGd( zQyTdX8(3z%p|LvoG|rwRM9J9hq}N-Wh}R=RJ{_f$p*Tk3CyD{aPMOI$$kqUVG(~f8 z(`$jNk7%JyWs>8N28;b5an>YaAe9^~tC^eyg$6}g3kW~YWQ8t@TPFhYAv_ZpAmyss zL=ovYfP*zstAg0Ev0zSGVWJEx9-Mu&<7n6%-9Yq>G%66zs9KimNJ`BF7^b&!Z$Er%V2PO_H zw&SV~j~BR@Sg(ILkC+Zsh$)x$(3DF0mjgtoOICAX{VaI?xT`zoV>+wSt1zA5_ygRA zZ`0SFdnT$YniY?fD0r>cBmed@xc>3fgWKwb6Vr1XPsB2v5%PV#hV03mG2Yfa^wtFExq zaefF_!tG7CEvAfrU$y6W5AhJOgG_#4T?V~^QZrDv6n-j>1VlRVv7}oCO+S1bL=D(| zKXdjixF{*x#A`<~r#{Vebck#WJ{TZL#%tl*07={jlGyfPf<#sLZw`{saoh$-Cb>U2 zRt=EMnFM#3`v^BVf>vcK{K!DdKq14n2Fx9|CgA=Yr9H8RLgs*2d&)c?gV!NMw$ZK+VbPpB-{+w!_c_W|1*eLx9Tv^+OP*4tbad-yCrA1 zE0K@h8m{;Awub9fzrEpF^}qS6V=)k@8IzJpfHv0JlEkf#jN!tTKa|#4b#g{?%L@1X z>ew&5?p16ILau_lx9Swuy+ckaaW8ElZ$8lkAMp=?Q`pVZ(KuVO4(k%&=&{i}FXgeV4#4X2HW0M0hF3IeUwf9{+ z-FNM^iCd3t!ZJ>sMBWgL#oT7WNJKcyH40lYulNM_o?|~l&t)@HaM)Vd0?aiMWkO@~ zqp*|LSHG~a_^aIGe*f4;BI|QqI7+G!v3^PmBWYB=2RS1n$0rKG8D#>muDXc4NIm&# z<_xg#n&WpI`%_x5sk~sOWiz;fcATk}Gmy{?>J=a779D#D-A|hV6&Y=>=2kKI#CBKT za-b60q*t@BAz0;0>W}>tLnxhAg%}(d0$l89_N*LXJ-ir=;#RHgjp>p{b5K6t#Ihl1 zj=CA0{Qz5~|2l*?hv_oL#-Q{?+k+OnQ;)rf{^rhQN=NNf#G1h1)+b(JogQ`We^T%o z_^TBLiQEC~9P2h7`w5+#v)xTDVsr3rVjPsP>oh{^CsruODo`&H73B*)Bdt|QEa_U5 ze-e>KNG_DLFaTRryhrf^sF~v<^P3HoAL9{kes8jQL z)DS1)wK94%2U=A0=Jpu^=&NODKLb%JWCSDYj=ey0UGxl0z8B)suFh2gdQSB6UHdvSkS7f8ig&WF6@5$*z@Rg zQN@l8#kl{)Y8%=4$H%MFT-S!a5o?!`w#dF5~+p!g6-W&Z_ zqn{u3-;bIy@{ti2M?4T|FZyd#Dsqd{4UmI8ThNQ=q)?w1M&U*F~T%lc{ zIs70L3=-)CoT!dAM03S;B~C1^?bT?4G*D}`#HM;cGGHV>Qwj$|MneF+M6khhYoQaW z6=3};oxr#raw|*g5EUf5_l7tL%f!?Z?Kv#53fLd*1QOqC$QI0Z1_JDlc$fp|jR^T*nG z`U=jBOj&mC_;Qy^U&!u}zjVDr@a)fg~SB*0jsJ-XYiDo=fmpG!UpvS7TqyPp3+2 zO?ybwqZGfe`iG*A2kmLuFbf#HRnzuj3~ht>5LTX~I^xLzXcWR&1H8m6? zKyc7WS7BNYrze%x3g*#{=e1Y+_1q`wC%El5_Tdi7CX>C{_JgvCXQ3P!LLd1;k%-?O zhtK^t7oZFY}IwWmMwk8ewSJPXtL17PVF+UR`~ALE2r9ww6WGGfNUnFNiXCR^RogKFlu zIN%{`$b{n+DAlH8Jc6>o2nbg?E(xN+OQG+J<9P-`nAUL#`euL-9+@_?ChVJ@tNU2` z7wD>t6d!9;s$_?+NNaKY>4O%lN?Qg)j=|d3Ixl&`-eeu!0wa(?OrQ|>BPg$t$(c7Y zEXoP}V)ZG;SU$|rM{*0FxrD4CT>(Q?^9q$7NN=XCnI4Iu6A|kE4QyxRJ|->{a@G>i z^wv}j$o)Va8NKfTktC#>a42#B&+5DSp4r}rTx(R$1AL-LQQaP>AfMU>tdFFB4m6(& z1F`8(BR|qB#7@-f@vpE0`&K6ir%1%F4jFxJu-VcqT2R4w0~9fA5mu7kL|fCXEuAhQg*~8hgkkg3J{WZ15m)O1 zTy6Q}3iBdH4{|C~#Vc26S*{#_qlx%G(GX1227r^&Kf~fa;Wm^;-hzub+&S7-$75s+ zQ`x!&M4f_vKCj3(9Ics4gTDa$o&}OXF=VDnV9SXucN0?5(J9h~9ph_mlaxmfv~dad zaDr0nknI8OTer-X-wH~vrZ@7qR^%U-mv(930I?g>f>Q z(J(Rs1>#-^jd;@;Cv5CBh6J~+Uk74GH78S`XVB5=76ow=5SieNW`>boY37em4xCF( zf?`S|pq`8un}V8WGidb)^#vavNWX-6K9nxOJcUVs8(HS`MfDx#^(whED<{UIsq|81MtfHg;kjz9u#gW4e3YweEDU>6z)Zrf1FS zHS12VxvG+wNB2zs(f`c!TJzg`pL4$Ref5=80+RO4RmDM7-*+DS?6c24`|Q2X-k@;m z7p^Ech7vR810^#d{y~0sh78mR!aIlxCj-w`p{W`X`f&>qRR-=^%%k`1kmzC^4KkB- z{x6*Lw*~lb>@$XeF$|1hULh;C)C_xFzS5BGBDd zTy&{c=~60;B^;WWj#A{}nl`zjqC%zSrI>$#l;)%btD0XmzkL3J@~X#FVUo!jI^ZBm z6%aox-r`g)T~fL5v8ws=tA6szE66d|N-a0Ez#tC@^Ql?+3MCr6BPn#q}ekR(!42E((!f~e(2y=x9dwA7kE{6N|guH$|7c`0fU+} z+2L!)Uw1PuqHQJ77B|x*xw_6p=cr?;ud?@YL?AR2YT#zHW+1@9fMxS{ ztX;dB|7T?kCFP0_w9!>(J5>Jl7q6xNS>4N#{gxXr$f=Dd8(LyOj(ib z<%1*B$MdAuj5XrG-vLWSi%J-RKEq#_-jQoBNB@<<{!`v=2uo0zf72W0|ILR&yF2JXF%?Okg=*48T-Gi87gtj$f0nRsY zCOg|Uggj;~8p1GuJqfRCkAOL;B!w}`R_{oLX3Yi5Vsmom{3FnH!C*aMZ)|AbW_39Q zHM&Ra=UQu_5)pK2L^E_AkaeVP)@h>c)t!nY*nXzQZOpXQ&I0v_u*d3dou+c5egF-L z$0h>#kQq1PH{3dIfK}V1xI|1O85X6jg)v+R3%eYJZ20kyeUNF>_sIB#0^srM8czf1j3+{ z=cYRYPR{k>z~P1Nhw9bm-4L~se0y0Ct0BT^swYD8+@y2^P{JvHN?0ciVyUdXob6rT z07-=uV?iq$II=eFAh@-rm$&2Cy{l1$HRh4B-DX}J8$)Y=k% zTYjwM#s@X5aKeAALDH){a3RGYbjz-%_hH_F6_cx67~ITl)LZ$Psjc8R6jo@d`DT*J z`ly{A(8r$QY{^y1Q0OUag^vY>>+jqC<$c%ROcHS)Yat#gafiT5!L`ACabzIB^5Ee> zI0awYuBBQl1n`u_UijL(4j!Wl>41M$F@6JsJNcjU_W+}@VJh1xR2<|nAsi;9kmG-4 zbrbqt!^bc05T^+jWW32^5@CU*fySEh7OLYQqh@;<1Qe25a&au73Hn#@E@bUSaXl2& z4$uh|RdgwmkZdVo1?Tw4JJOM$886cf8X_W)m4N4KQRbG1Wj0&2ze%46D~$7(Ss9WI z0i<1JKvsZq8_x3OHlf&vS_%52jVW}Y(L-!J6b{m~OGuy(H=OgNC}nc3HyeOzhq8m2 z<~<_^}_q`koPl+dm)M3w=w;8T;3$2lfT^n%7iiJ=IWA8WBJnDfHK)0Il5 zUAYp~h%v|!k|8q^Yi*YJo_pI)b+zIeF?^%SY-t2*&A~YhiB6*})sD3ho0TU5p9s(_ z%j@-@?>0Ts8VlKbRTci@bw|r_nByr)I($~PMj=&56vAPw+NrbGtV8xrd1F|Rta$p@ z2EnXr?{x~7sG^Pf`0g<*uLKTzN&S9FNDJbNprt+ugjELJ4vy0{l$-SUL)nI+9GVyZ ziVJ5LR`GmUg;gbtNm#GL*+Z~^AIxR-*83H*!f%fuSnb_WRuEuR-xfw7Yz7Pw1S?0< zeA$egNr}x!JusU2e(vHsxzARJ1snU3sxsS9HQz(3cBlfYBDCg#7tuTfdhU2JMiD0w zJj{HLY{v0Dl(=#JFS_g9g30Ib&)8=S17jE%!@w8@#xU@$z(C)W?$llIPdhrjK5xTr z-e%ne^G9jc)rMV(nT^aAe(@@(w~=$BDV&!<*C&qUFZSqze%1-aQU2i7&SKAeV9DEb z-l(M$5Am}f>^g@Yar~QNi}nXvsB6C1YagL-Ks_Np7@nJzJ>#mT+}MUJwFCPMj)3ch#aGVE*6QG{-}-PhtnwcPEJ* z^gsBEX_N0PL#S9-F=~DwRwBK?q0E5|VIvHP5=7k3972zXxvGwyRn+HdO7uh7`leya zml4u!wbQVr{R3T=tLzH7{3R(sHgbS`bwLV2U7!eiCcY!ywo}wpE%@z7qBG!>6fb;p zGU?PebR=5@tkKN7uL#-BU>?BHnTKdbMAZR2 z)l?0nA}t8v7S(EIDd3@ii_6|AVnE2Ar&Q$#JeiEvBfSkZ*cj}R_GY6p2fkvS(N_AD z4bk!hpvN{K-go`YW~t==UsN;ATv}urQ6^w7pW{YK=_JLylRwD4N{=wjvOVQjx|Sdw4>6siS{m*VgJRa@GPlZ zQVtK{g+b3@ubD7@+dsAY9-_tHPcMA@PSaw=V-=(IR3=GEs8RBj6hWW)+F7nQY{!?K<;#jai&yhK#$pQ;zsWPNbcDNQ$L%r!3BHLIfs-t%6fQ`_u4M z#!1eWO|Y~V%`a0j8Jx$AizzKFe1>W5c``H%*IZYOB2VPoq6~N>5XrN1bS;huCQDYn zHoZfrMz~LG!tDWP(R?J#IgKnZgQwom%ZPC~{QAi{VrIqy07Tm!h%S|hcz ztW~5Lxb;XaEdHZ-tRF+uCdb;4epprsksqIEGzk*D;=9ZY{jlcV`^m4>SyZEVxMgQB zA6&pX<_5zcGvKX5Nd1iz1BxetIv=i!vYk9VstS&fUOSOjW64CgF9;v*R89t2Pi3^N z!mIsNxEwK5@KS@n?Urb&mKG=0V{qBpKCLaB5i?iGd1P$|%S7BC&UF}RNzkE^JJZKf zuq71_A$KccDCc2C&{SKB4(4TQ=n+zp&C|Fe-ZDqGjiV?rj$y{b6KfA>TNL;GY2b{O zigl zL&hJ1u^?;RLW4Z8v7kpS6ku>7ZRSe_QuqTAvSJrl|Gn<nGYIxMD|)JGUD`%rJo1B~b9&wekdo zI8saZY_|)zTGR8}l3hXM1d?a?5Je$15E{{+tIG!+dKeB*LtkA$bgMzh)}@nu<&P(+ zo;mS;`r;lL-L0WX+DU))QTny+P%NpeIqnW%X+uwK$!~_CC>cDDl^&-AP*`HkI+9={L{Vnt=X=(ll!yR#sg!E@grRpaQ;ftr$W z783plh(J-5iC9yW4dU>K5C9RlENUFR8H(LAT)arlJX^LJDV-6FM51o)8$&yN;mxQjf$d zG#m3-6>7MJT*c!cS&}JL*WKbCBfH3rQj<5E`{Vfp3}NvONf-Ig?1`D zCmwtRDJ>pTZqE$26O&cDH&L?FCJW3?fM`_~HfyFNzES4J?#!iYgO@%?f88$-<(emz z5t<`gg_I1Pq+y6WWOk72RKN*c6PT&YLdixbmY?I3O%LPjMK508?LnPlEUg7TvS zmpp}1Q)KT{^olC1c`?+buJLd;8xzgABW*oY|a__9T11Ndmp_bGTfB@OZeN-XJLrB_^!$q=7jYffwQ0PeoIv`E2AR+7#dn z6g657w|L~E^HON40y@dJA^}h4siu^`3Tod*sVfRbOrhYGx!iq)NMg_8lCE^$SD9lM z%_bEf355XDkijPAToOWqKoBOH!gC`h`yWn(r}0(IgyRuS4V^`JYJ?2t4AUH>8sUR; zwq_#`m60zob8x?%bW>wN#SF|s9}%pEIk36vsyPuTMA_lC1A$NMomH|UK$J?bhNS_U z9E78zEx4fo6%tQ2DKNd=(v#*Dgsq$+lS@7m%$A9ke7v0$I4}%LyBpPyVcJIcg67!9 zct?wn?kY*)Dk;PKL7ua~GP|F?nMoyl>@|D)2-)IM$!2Kkyvd_|PSkAFuBSA!B95St z$a>9g0(f7%x1?l8`oh;keZQwX+y1oY9=?f2zxsIKo3j#EP}a8(i3Z_JM(1uGzm&76 zg>P#2;x|a$Kjr>DaDpP)=iGxWAtUETmW^pNKg>q$VVS_#w^yR53Mz7; znn|3_|5FMo3htgX^|{GAi?>c%f7if-=g0l8MH>tM3Xg-I?(ZYlEKY7)OCAg?2yv*0 zHF9J{OfW@>#(V-Cej-t$nM?9-x(tukBv5IW8YyiYGbsGK1dZle+R;W;O0=zMQ=5!e z19xb>y^?F0-BKqhW*?4VPyA4j73hX_fl{1Rkt!-=fX0MqCoTnQR`#qfdC-T80Nr|c zkqD6zg<2XM9y1hb{jF;VN{=+^p}<-=k+Or=-psu7Ug-84f)CaHDGG}m+P;O1Txl$s zrg|nV0VbZ>yQbs^Ifz8$64GnfNn{1X=9CdYa(<+O76Vh5V(D!?GUJi^j?AU>??4A4 zPCZO3{GL=I)RWX&*Opz0BAQc6ccu<&mgD3(=xyFuGagNweIGyxQ*#Va%kOz!>185S ztuRtycl%;muX|^f{6G_>#(jV;eUm$Eno_+k1(klP%n$wPzTR~2)r_Jv)ENo&Q~`-) z?^J~xNLNGg^h={fxlsQ-NOoMfbZ@L=rX(Qn=5h^3wqHl_^*Ic33XxbjsZG)YO!=^C~{Z^-YWZShv&iYiP#r!!78HBrFzXR|O|3VQ8v=`4 z1`bL@7!kn%11|;*JQmKpWf5kia_>VWGbO^an&|$%%)6)U49kcGEdlc_VLxXpM?T6sR#8whM zW#TId*yg8|+L@=w+a$boo16aFMOZrEuhO{RyV;Q8G~|pfT;8*(Yd7cNhmY+DU$RnyFPrNdO3q~`S*E1DurJKxD-e^!o*}15a zcYd0+EYltGj=Fg{$V7pIhVfC6JSp{CJt3I z*FHopx1md)-0VFfm4=%+RFL^FrOmv_V(grcd0W{#x8(cUjehj2kv;7Ft1%Um%s!sb zV9PB@<*^T$g7lnmxaV^lk5)a}9=GTDTeDp4`Maeh$ZMOIlE)-+t@m49u8c$O!^~x_ z^-Aae`wF%c-2K6{%+y0u{%*?sliP~_r{cDWmnN3q^_vO*Zo;JTOU8XPZduW<3Tsg8 zmOt(b$L^g{P&9LnyT)BwIH};jv~TH3#T!zhTYXM`43|Mv3X%#dqN?t4p2QVQ5||Tu(rK)4#;HxaW@jJq~AQ8zWNqf82i2& z`sPg>NRZv3sC&k-?_glFD!OO54aFE33{1)-D$ROo>pX|&HLwdy5N7>fBWxbV=_QrZ z36NAt#({R`qET<(66d@&IAjQF*hrzW&*g~-8ww;&k=#f+wdRKgJDF=I!Nbyh7bzbN zrzxXMDHpB`eSQYmaer~_9w4W*)P2TXFsZoUzfk@cqwuS-f8;kkzWS0ow$Wsv!O1*( zBmV^S4T}e# z0@pQ4WK<*?H_x1PtBD9wQRpZ*;}gFUHY}DWm9D1_n>i=B+!PtO@eY!tQ4SmTgY<`o z9q*MRdFE)`@@m~`Kvd#BeQYXH1FxIz&T;1!7XJit4sxF%pXZu3TBGX`O_Xw>sq19q z%0%HGDVGoOp}{YZmaXXosYq1qO*%PH0u3OHCFhHyL~|+dG)_&|nn23LSOlqekY^>l z39)KPGA>HOeD)eh6dAkHANC?S9J0M3Jy&Kwj&e67l_2A4OiSgiA zeyf9#syRl2m(BSMM>mq!SU4YJU_{g1A0C?wqFFH0eYhD!qXq;<(MAC<@rr&!H z$6;8Hfb;v^@?*uo`QsJt1b2eLIe~{uoXL(=u`TdkN+h!$1oQMl?3MiJD2Yk)7;Xe$ z`P<4$+dG=N_qpSaO#(`1PIvE(0$#*MLpV}gluop0doV9_h_bw_i0f{S(Yc1MZ^DC* zvMh><2kxR8+h9<*)fWL17}|3ZlbCt;OPO?)tLpS8lJM*1nJ>W*fVc1VJa%j%@V309 zr=n+^@Bu{y0g8*B(4r>jec4fhBPBeCHVx~arPs52Ew@omUBFc5M zVq0b_C1*#f+6oi*HmqFm6;6}J&B4D|QlIJD;wpEc(l=rBzNCfVMo0unekXO_&7n=` z-1^kFzZb$`db|JVds`}fe=mxer(B`lVz#~R&9n>Y%RJ##bs#xT!{W;Mks zV05N8MdFlD++baqzc|GjEqAttDf`{~$N}4Zk30L=cu?-#8SV_XkN`9OW^6L#e^j<> zxSZ(~QumBn;5sQ6s1NIi0?8*^5U-kv5eS1IVDdIcFxALFZGN-)m^W6;oN3OG2f)>t z3A^uhD~^o=_R43ti+&3r!9>7SAk4*EL!kt&AdqqLFj-Y7C=kLU6QVr;RGb1jR-DW+ zvk+5o+=-I%7flnNAWj-l8MODmnf`h=B_BrO!>g~|bkAoFoskTcuCHOGp8*vh%?0(Tlth@hvJZ-ekfb{%JuDJb3i&hC{Q@vvOo+-=mG7#lo>GR zF0CL&IZRVS3oaKlMijU2JC@%2#m(dAa_r5=zr;Gk$cR9WT!8C|$*(-M`)9`rF^Gp| zcE8lU0D~}6fgx5-j;1LSodflZas<9N#KPPFS?`*FX=e-U>-Ynz7P$c&X&WwFB5^m& zAnhcIv>}~xqE&)?ly@Y`$)(*XtD{&QMo^8kbR;*;p`p@SD#bqCS;dkaEt}>Tw(Tg! z1j{tM`-sBe_fbYp`mrgan9l#>3RV_OJ%3j>{*3l> zXr=osMPxa#t3lspr35?G5UaLGmL2{0PA25J#Yin{aTI$N;b1GxEiuTM+3~i)q+y6N zg~MWZvd_4jyjE~>O|t4!BxrgO;k4Lj*jyU5!iSf^4=uKXuV?VLNIbO$4qO*Um z#9a`?mBKDs;Z%WQhztY4POVyuaE?&wE2=ty0E0}>a@qvB1bUQMX`xu4Zv*{ zCFVblKg-m6Cq8$s0b6%Zj@#m{?Ewu{AESWYmBr^ch^0zj`Ie&UMORlKiTU#9&T^YL z$`m%rxqZ3oN5h{3up1JovN(ayW0~X3Rj3=T`Im-mUY&_l`>A-_@a^jfYBv*J7PkT! z;OZ>hNF;2nD*O#3z?|9Al4;t4R36JC4!o;z z;z~tu{U2V(AU}@8XGl)HrJMKqHGS_$B&;YOsu16$*QKC}Bld@nDIp#~??0owX-x84v`Rx5UOMvRqM61lh?Eb8D_M zyCEzNALV;cxp}G`ip{mlV1^pgA8%7(RG{(DVkycMQ%%V}lHy+L+s<@j;9-emtQi;e z+K|7?4g-bLV@G()%$WuCWrVG|n2BiaHA~+xaV;HjB;T2>CMbN=RtBs^Aw$WzP5O65 zTGry}n!f%4)X9UNU(1cH9v8D~>E$6!#@XQkYjrZwf>) zzIL9&(xsZ~+7KIqew0ymHxOn6uC(v;o&Hujw6mJSAks0S3$79>TkC>%*bQlvRt=URAc>vH94$mg@bBx82GmR!la;E!k1c!;9F=y%G5& zY0TF4$4fMf$9ob;S#7j!85k=z?(!GEL?g zzO7}2`1q%EH@9Vcwt+#jL4 zaMprRJ{>x&>MBS*l!a87Ns%4V>V+&zG-t}!9wN)GVeJ!S1kmW52kE&%d^DF8kUl^Ry@thP@WplhBSDr@0`)0TV(UKyc z>^5kJw%Qba<7sc?6(86Y*7c##hhWDktDgsLJQM?3LB`}w7teKq6P9TC^`?0`C>NoD z87S)`s`*%hz(j4$9b2S`meEAU$H^X&w37F^19?I-uQ}!Hhkvw_i$(aREY1g%S!jo< zRQcE(3Z_C={K~KtOXrtTM%x$Kp(?12QsCZQvqe_Xe8LRFlWZ4;HD5K_yd;tJ@l}JIy7;BYrjWBFk zd_zT?7qX-J%zN|-WUA1qGAa8hxHvdWonAV$8X?T%X`qHm?XDTtdR8};MR10RAh@9e zU4lv9Rb}a3t<$SUp_xqd1icqr7VKd$fPbG<*5%7;mFn@bwW5?k^WMiy37 zEgq#bA{r;qamN-!KIP1EtK-|C$sHl7s7!EJy+7s2gzY9gN1}j|>00g)5IM95GKww5F@C&l^|1_pPyP{#Bk1Zs3#Ii)CHkW!JN{Ao5?!DmQj zq83QY>-~!0%wZ6s_CI3)VVLX%>DQ12sKjCqwArwl$$yZc4Hps7dGj?{(`lhQ4tV}L zdCMq(wrSR*{_K2;m4#Ktsa~cMcJb%)YrjFVh-5^uoh=ug|>n z&d3mPi>p(@wFMCGmj;H*9TTYd7rs7udD1_e3i`3(*5*I?rJ22iEUsW3_s!F+O>`I8 z|BJ@|e+5&1fq%w6V;C62z!(PpiD2MR-TfpfyuE09-jYI|l6?961?5!>Zb_6EVL@LI z))8}j2ke0AK&c22Js{B{8uZQ!5+1~qCBYlcM^QHXdjnWbvcE!} zkuIdH2>}P~>Nd-vN8ZB9AA?STyyLtaSNawG_4;tO!4=Ny1~*tku;x|exa;0eL#hmTCDNFX_cKOL1xNEOuQYSoNCC6zjrK~>DrGGZE80mSOtJ%O%3x2Q zmvu##2+5x4@0;Byf@Afx-?|-t3Hz7#UF*?}ath0K|HJpu?()W(ZQt76Wj#6EbaeR{ za2~shs(0JFi)x42L6{EOw`JIcN7!BLqW-}Jb{ADp?Jmmcpgy6{vfQbRP?q*A2LE4= z0UOZZJejqcRp`xIRZ;ljEc(&*CWS` zGUbM+Jm>(A?OKs~CHhJ|!qHX;iuC%|mQ zMtF;k}HR7C9!qhY3_W++UDaH=E^2kpQltR|b0 z+$j$x(F$qiaeIzux5ED|zMn+ai6rGP4*033w!npIE8WA&e#I`m=Gu!my++`=s)*lO zww^+nO!6KFr}Z9bjkcGGH&{-7mA?itlxNXxF3QGOjf|`oR5|%pZqB8uLwJVhFJnO*Z0hL^3UH z(t%$PUn<(!(m^dU+!XJy13@4=oVFN})5AGb_0W~*L^vU2->KW6i|SxPhzxi;BSYLS zWW^cy=AerEBB3Hre=>0S@Xgb^DOA%}2tW5e!cL{X`W!)Ed=S|2hcZ2T)BFC2_f%0UxZzXqoWuQyZ$b|Ij=~ctOOIdC)D}(}roUneG<5 z#f8NMryFCNJDY)v?X_EC4O?T4&mbaQgFZV0xze<2@~t3yKg(@Sfii@VE&A z`~qB1Fu6T*#I&ao3oe=R4Z$u)go{916fq7drsQ&yL^~n}YKghFIo^StHKl>Q{5P5R z-lQ;`A74W-GeqJo+OBB%tXz5(>?XO?!R~V3tmQYPp{B z=VD2oEu`UEFO%y-Sd^kO=mL8BH9B^m#RS>&@_qOIJ#lnUUf$Ws9dx$K^go@T5aKEA z*Sk!9ugGHsz+mrdA|JZXs#D@Vv}X(8TD~%oAa>ls;2@eOO!jnzy;g((Wn_gOwgV`g7fY_w(Gw5o<{VCIJfoGAD^W79F7bk1QA3jfXrfH8~^X0{|D#r&}rbot=B4 z=xkF_pEycau9P(D4Yy7~02i{9f-+w(HIe`IkhLJb$3<~-39Qne}G%(Mq{1iJ0C~n(1+Y zb)GErTok&2B!igsbkv|`wU9T+*)^vC^j`w>rQrO@2LYhR4(u8BEVIERV#Np?QzRgP*(48UMniQv3y_+sm1aC9xV8M!9DBm z{`}0Oz4OybE8B-x?gI+K2#nC8xQCC%%iW=gwdjeK`2WiF$RYddw~d?u8bkErIhT>qc=T;~2zz ze5`{^g1E|?BI(0l3|zk=`KLOQP0r^0UVvdTDH9HMARc@pu6{jz{>mf66WZsliR~w*0bVgyAvH(rSrwb` zn-i1KZRyN-oVsmliS3BvF6;*QOXl05ug-}5`b&>*KT(YCXO?c-MBOVM&fBOAH+%04 zvOQI2#Ex~jag8UCwgi&@OD|EEETQL#+HkQy2#}O2a({RNA^nS1PA3r!gS;H=#BC0o zN+}w5*E*<8yPlQ=)5O$*%86j3IV+Dm?p)pOil0E}`l6XLH*J~(M5ye`d7?s<96*F@G_j$EVp1a{~`9HPOq+Id2(ajQ|@^0Q4O`2O+V0-Vx0?!B#(Cbg64(3n-p zkZpc&>Vrm;&nS>sV26tLgBbSMz~Y-d=<0L;qfHUX8Q^$NoXn9ULpLZrle0tR?j!~5 zu`B7LuM=$3kN-86+Vr{ZeJNxydWsCVAP;P+ELD>*y`eqU5O30X78*#};1nX*`;iBR zuLdE32p$q#xUT~}Jy9WrpwL8-In;}6J?W#b4P5&jq3E6CX1++s`QY@>{=Y%~4havL z-u*QJw(j^YgnfUo#9c`V!yfI5MUz$Ys}|6zUx~@Xa-fiFB6|tMWYIxV8cN1MONB~P za9j={=B$pT;>~T&0uuYs6rwQ2B6!I5BhG6=%|+7J-_)5!90a9@j8>=HhD`=?9q^m0 z;q-^chR%`=Kuj>Y9XzDa}KAEm9TDbdi$YcdxXT1y2Yrf5#y6D)Uc+wm^yY8D9$k8(E@|DB7`mn`u} z)2lRODvZ#fSMED*`SBfC>MLtpO1$!@-jddGZca9-NVW~ViDkWz>?ca;Po&IAE+jq^ z*-7;t$IDJqSKz6vHVIcH900i?)I!_+b-M3V`r1|5%dog;N>06td<&S2d)WVfTuH&C ze~Ev_K4Tad!vJC6V8!!vdGFY!m-BYt&MSxvT@1g)>=igO;}UP)`75mAVUC8k=Zz+f z8~-vbU0bmRJtr{nUEN4F6JG#Fc@E10DOR+nvF8Aqb)}M86oJw4HL1hLshHx_VDO@^ zb`M)@yN9tLqwn2fK#3$mX)av2WZ_zTJUEQAm_Im^dd#<|p&Y`kbLH;9;` zYP20)EpS|tm_*n+|MdHRYw{-?sPqde6o79HnB~(UIc37AA3_a<6ZCTKMG{RE_jHb=|KQga zEPfI~p3%1ESPi^r+U!88dPVu2#}#eMdLShFW?IpE@s3&9S`*ev;HdWxT78inovzOE~Ya9}CMXm)=I$4<4+f@rK|BipOzE zMb#YUTDGs&Enmv^wKDvb?ChdBE@WpH^bbm1$MzLdm$CVoQ{TYH&E?v0o8kq)<*;K* zO-uWhXxWk_x9MGN+IPsB42P@dS~{DNoMlb~bl;eegnzh-Ky+$0nEZojaDoe1sVS5( z*cGChB|FaTkR9%M4+h`X39sr%WEG;^vfG}7sZII0iFUkh#W6?uUHib6 zg{S}Zpa_Wwq6^7iwQW;~hB9v4VjcdH!Ul}vy2moSwd=1S_k?^r!(V{GYes$! zFPP>zG`RHIQp|nP5^EYXrhN|;Z}u&<0IH>k*R~$2;^&kntBig7a2LSKmNk5`vN^%Y z<^?S*PF=^49}$||GFgxFoK~xzUgAEq_?8CUBU72CNrln?$7O41Fc8!A1_^WGi$3Fv z5MvOOEkBO>eu5RImyoC@B=EQ~)}YdOS39c`J64;YI(V+e25Z{5%m&iAMH=GChL)Hg zvkH8V#>+|vyRT&WUiXD_@#?5;lg|I&DL7X!ZSmB9KXuQPZId?@kDGYlu1gcXoKQCY z)cEg>J5cm);ZYR$HhkQdw@!pwx98rH$He`Hb(Er&Q>k{3bZ7c6rjH)ddOs;gF4ada zP`Y1E{%uu;EHw1mSLq|iGKcoxeB(UQtls?K1e(YkK95SXCl6eCPijJ)XI1-$-A6^6 z`478ahdxCr4_@1YeCKU#lyM&VShLrY~MiU${JY zj@Py&mx&b8zytGl5Ibyj#2lW36@9mn<|zp}r>kvbz0AzT<=;Y-aB_ zb&di3RqL}RI1OHB>y=SvvZ<$=K{fd*wZw>pl7jc5X27!8ea3=Ch6^n{Qe&IeY$%N8 zd9-k#!2l4v6x_*80Ahg~Em`0pq(*0v1PF#4842c%w58)Eo5uZW_+VZ2qVE|=G{FvcfX&0`;#04 z$9^$zc{i@pATt@vdeT%D9@IYZ-cgi77PAbv_k}A%pPvC|K#tCVuTRnqhtr?DJaG8{ zZt-M}^=7WUi%sHX0C)4Pw}&oVz&;>NE2xLg{w}@m3%&lkw{6C#p4j_HNhJ(2$wVWj z3i=vKCQHq&e_lr>=e$k$;l1d+w z{ox}YWBP?nX#0s+Nd=_%!E0~A#ZosobmJ7LKHb-Q^UNQ?wz&%Bq36fKrwy6gWf|nX zYk!Fe{ON(mOCq6^t=zgX=@8g4D+t;NnFHA-5k>_>0KC-76YPh0B)EiqUD1?HqbLg` zdqm1e^pR;tS9?qv-H30GR!M6@SUy1Lwd$b>$)qH$r~-%eY}?td0;R}L3Pq$Pn_NQ4 zD{ILyjCQp+rj4{0(iv%jC98AxVC05xtnuk6e1TZuFLgEmCk=F6ljR0Jeh73%pQA?B z*_Nw`7tEUx8zEm|uQV_d7Y%5Tv#M(Vb5*7wJgPeiw4+*Q zu{2~>smKa7c&1_j6l}ao9QezU~M#H(lV^+(k2&x-~GXRt#J@=Y0w24NZ2OV zBm4<%UKw+Uz${$p>hzcE4i~3N7iLKr!M!wfhW2M8RaXp}GV@5kMl&EV`QT%QAy3GR zspsjAkjhD^6cx=5F1kdQM9-wSaQ5{&a;7D6y1Tce!rH0vyP9$1}f(AwDE(&rLvrCLdy8zSQh9^`PR@m)v4E$g>*DL z&u~GYrRf89)Z|o)>Giu`=FE=^4H@O;@g_mIq9U4MlCh}S(xW#-i!42IM-J|lJj*;!v-;@GXq>8 z4A7X-S>}gVTYvMBGX(9Tg1H4n{{sIE|Ji&067sM+P&)38Gg_q9Ty#5bbBL|wC;aee z)*|}WqV%7Ev2r(huWQgdKFu*xIGl}}npQ1XyXG-Vq%nHGYGlUx#`G=HMZ#Hd9TcmJXX2Hc{GsFK5yuZBef8^EFePCY~@W5?&AxWV@GtI;mnE(;I_Ss_Y8npxe##&W6oNMSm@MrA~YbjBS?5H;?PX7)e!guX2u9n zAABv?(}J&ErVuf(0rpFHC6O|;nc~Z}LH&qmaZzX0hSlYwf`pQdwn{iNAncsjF1e{D zzOtn(p--=?UGwaQHPEQG#L$!HcM4CytzcBuDyU+GxyaiXO?H%mA?I3Y1T}h2Sw5<= zE$Mh+8+4dMl07Q@izBc*$$W%Y3_BkBHVEFBmW5YFaPREA^2#pahcA443vX36Ozh~M zZ*0!~chdSZ*S%mcz&$d$K>-G7p7O4mwejUjQg51wz`vh%pcv(XuTQjbdy;`is1vEo zC|i9En|@Y7%?~c0;?79I&Oh55Lqe{}i4-nS=-Un+97#;@w%7=uc*RXiYP;8<*w2k8 zBKPedoCiX{l@9HhdeAUq<#gg-A9&sMm>TNgy6y6$L~VnOeX&&So|9kSXNO zr6vW7?Hbl7V3~`KDkif>w~)v+3F9V$u={$NIe0FYS$xvtl-@VPGYM5Wg1!DM5pUGP zfjr>{7<0LEmzqo=j4=Av1R7FV&yg3`bpymR@0W@43XVjU`*}{tJHCwZLi?O*y1)GafGidPLUuhNmkTcr_wi-+=hlY&o;`#+F&S0Y(OQ`47e&A8r0LzG7b=d z10d+eP;F#OG{r=Y)Q((4PKRU*U7Dyp)|6HM~aA8DnK)umd(+33+rg|>>7PCcjWh$UC6mCl4fa7G>}tUa_Ee^Q6qWtX37gJVvxmxDj~O^%A}^qNm?D zXQ}A>bQ+|PFb2i&3QMKPXUk|U;Sh#s{7GLFUcgBYe5cy^k;0Wt z0gxJk*YdoUh-e+Gd3{Z<$~()*D|z{%3fjLG1?78WbE2iuj7^tSD_DEenyaD_#O}iB zql-C*rZuW$fA^u2UYgrDkNGH;rmXEIP^Hei^{S9aSuwCkFCDgeGjDG4{k9_{WR51QZ!KLAk|KFas zeT6;cq=`6Mi0dd6g4rn@@gSwN3w$1-Gh85jECmrqypZ{1iK|?A8>$HLUh=cE@beZY zH&xk|cOtg^N(a1Z*Bmfl=3Hg?RZWjHhww2cm8M&&%ZVuDtYvkP_{qdr#n*n?pWxTvSOna3AonEE-bEHN?3^*S|?_G>Dl6K5;fO|$fl zKJhk^vA4lY(Am0~2Vd=Y3U?`El|tB-t*VrVsV@J8$gDo3hpcL`?5pJpmh4^v>T(U& zNU6TTZLMVAq@ncYaGP);-4y-Z0Y% zFc`Z%A0J^UP(}5|Nuj=()G2hh!YcQ_!L{NNe0%l^*K}5lPml7^iYG#*+7q zWacjsVZmf=GSTWQOUsTud$s+cmai7d`6;U;%Cc5PUT?tnGIfrsir{W@gDAO~(?Gqw zcI|5ZpLOb@?&uSE#3R)Zum!}=N9hqq#R%{=yF-6cFV&5&e4-5zGGP&tl=sXgG>u4c zsL8iS5f09x7(d17VxS4DWlz9@%8w1NzGdN48Tlv0hhQa8`%C-Rj{MZ^@yvgBbIN2hL4=bI8 zAulIR>U$Jv#KlfulSbKs$}mvLd1W<9mD&gdBh;82O>ZJqg!jiidCgMuG%%PoI-=H1 ze}g*dU!Ohc0;zpfEkgK{bK>SiV;4m{>1_4Yy#vD`76C_=#6&w=qRHoy2}rUj zL@sT_shw1YBlQpU*c!SGH(cv7J6tT+^q5c;T6O02%gPQ*5#!%wg&~rr1$WQ2{vMm< z(D^fT)_waExlv0qCQ2Du2OuzY)ryw_Rn`x%kq65F3uw~Xd8s)mB-QDLFfSQeX;xcU zM_WUnTcS>Vb`if0W|^oof2{j zq(SoaXi7lVDWxVhavXTkLEW-d$;fcNxLw041$^2}5-z;bDr^_4YJDeC2;87441wd5 ziA+LO?NhBtwOOA2R7@K+t2~vdzpixbVWrHND?`s+p^D`?0gDw2x2IE9hXK`+Ppzq* z`CNz9vxcr{n}k3lKu9M|e;HIcCqmZbL!Fd|4V|s_q!!l*WnHoU;W%ZYH8%97bm`^{ zNvI`P7AgROr#z)$5v)i&)`Uk{OV1ueD1gkt>%N#zUQ27*sFg+rFQ}Q-&ES%B=AHM3 zZH8isv>?uw0m;B1)zaq=W%`c#&4qd}%rz0>0%S`&nJh&fTAKtmXXrdtr4Ws32&!e>zN z)1mslN~|r=ZP@CwMB9tVwV?YQ7C5`$Z~!V?a*|G*RpRvKRjxFPyMC|36spR|WTcbkEwm|GT?4-u=+D|8ZLV)PFwp zr&Ipbl={j4d2&nfe_Q;$Nfi_K-u3!~|1@Fl_@m?g^|(bvTZ?8E-Y8sO@ZX@S`t0m` zcw#}(EO$dm(IXp^u^4hoz+DBAHPY{P51zV&z+st-m(o|hkc4OmisaPMl~uCeZ$e76 zb1HxO=l!&iq40qd$luJxyw=EfcawvMCVhyGp5%_}n~jJZ54p`H&vLF*BqV9YK0^t> z6Rn6X3DTfoRsMiq^Ek2^xow*qF&vsMPz=wIf}ooN+?tYS(??EZ4u62KBkA*32CsfGzyYRAc&|W2LV1hEX>43^@V!rOp7$F@mY7^_8! zM+n5|kcg^92FXl0Uj{IJr~qX5_dSS_Jkni=kz|e>9sKaBMD)YILm#^;1IOj7f*;^Q zwJg!d2Cuz`>9)f}N+7^_CWxR!sT{iSkqS)60V*Y;qzxk>`SW*e46p3_0myGAFkGby z)<7Mq0y$zxxT8R}O?V4a${QvZXe$Y45^J7wB+_w)&|D#2{}tB=xqzZ!h&^MR|c z36D@1zi}qxUH}dRNmx*bnT0@{h~Xo}OxiB2K?x8kAq)|^QMGgYOH`qs$9mz$3Czp zZcg*7P~x50H-m?94~8K*Vr1mGiPviSj*zh3UKS0v_kAA(u&8Hl$t)R^ihP=Ko&Xbu zzkfpv8w-MwIxTQQq8NmR!a;lx1Na(_rb-J-I*O?{2}4GJnjM)6P#qV0lBg@Yxr8!> zWCI^!UJ8htDjBdEumYOn4f7n>h-uG=Vw=!hMR}K!)}I5JQb4d4+$Ksot%!OU$9YNJ zE~H3%fLVfgDo*SExUU3bp4&aEWEKKaVcRePWizjRlzHn*!Fsyy_|Tb8WalshJ$RKU zIDLBG(AhWeMMBIXD5;^{%==dm%oa;%;QE_4cV8R&=5@38q|d)Q_}azvhbIyGPw@3E2c)tT9# zYg0Ob5$!gVvWyu^8wG|`ycgNHz-ag}#eqd*;6AA?+^cDo$s|q`<7{l|dKK^pUZm#D9Qi$+vuVex?Q`ILq}vHZ}uJ< zJbf_T2a8Z&=H1gku>~0fBDBB*Al7vLk5UNFXg;qVMHE5Xb*l0`y|rLA!Fmsy@wHl8E*%#oz3jOVVc#LYU=wg04aALEGe4p z!M_?rk!W^m429^VaTXFtZbBY8awAWuRB{+Kxy67XwI|v;+kqu&Muxnl?_Ta`R!B#X z0AP{Cz|*}~X&Hh*zJ}vH0zzLIy6{fs%svFv#SpTf35-~e2@>#k(AO-tp`_qH)1Z>h zGZ2^8w2`8=0-G}Z<%LGWNjha4c~?skGBads8JlQuDg8R(QlA>9pSb||1G)+-n zk;(-m(22O-D%frma|jke$puwGOmQp5i5syDe^uWUYHFR=ROZC{>5J6u;2$mwUcEAS zbRR9V_dZ2PbKU>;zR4K$I``p{B6cO&09_wDq>xMsZcRXm-~+g1BNXYd5qx|rEhNnd zoi=O;klSk{X^aZnr<-#?hn=bc0k^ZSn0tO`#GXaup?JSvf9-Xbe(k-%x85_|Q4HVH zp9yanI&vDDquQ5s#CJX7U-nHxzl-P?_7IIOIAV+whLM)8@+K7uG}>Z1RTqhA0xS`M zq;sH3hV}EliI{~&J9D(2KJea9&vnEoPw)N2$1raG?zPPOU)!S)VLJ0ZC1T_aUF`qY z3npCG=lHR|V;C62z!(O`Fz~I%z*{SO9>B&h>64uW|LjlUAh4kFmTp3c=65}rl{>of zjeV6>DJ=AaZ5<|k2(-E|oUC9|Y(%-+#>y(Imdta?;!5ui4Lv)fKla%C`D@oY zmes5n0dn7K=1^N4SIdsWq)i6`6rxXa$7(vuRC4=jXMO}1T6G!aC(R`(S3H6dSY|bC z>GzBgKJP}Kl}&n+HrUbHv>AbfM0YLx(#%fY~S{x=jkXdQq_N?V@LeBoULx9^4Y^1G`pH^!)ydio9${>WFnII&pg-S(* zJJDbVLd}~H5k9XS_@TGNcEq9DptTDt`&#=au}a;X1F!LcuP>)zVEk}T`f^YD^WEMn z9%EiH2^WD-bPU2u5Da;;i)xV5L3vGrAX{*SBSuOXhTZ&%v`3Q&O%dHem50vmOMi7< zw0mA094aR-LSL!bszV&E41Ez$A=l*S=9s7&EIJ@xB>O7ZPTRKt z_XtpD#LH;7o{+3pmIQlJMt8NzFcIxjro0K6nJE@qOYBx`6C}~-&hAL`RPq1+VZoaP z_x$?q&+mSE+P|I_o%+8|{dDTDru>^JGm#5$TXE^6e>>@~Cp|Rri-`~1)juIU;iCzS z6UL3-Iqv@%_ju8Vh5u*av#5M$Kknk*7HCr*>3*W5;P^(?T0S3#>Mcg*d=gnm7srML zQc!aNXquB;ggif#eW-!*AHW)!=mc{pSHCKmTn&Tr^x*9 z)+bO7O3!GY?968lX}QRMSgNhG!$Cr*7))eH{6%W@coXbNxW=Q^ zWD2YI^&$;m(G1u%3YTMS>GL0^Z|uE!<{DJy3Mgfk)cR0kH~@x}rG_&WQRQ==l1Bw} zmVY<~w-m|B1f{D<@ki?CD_>^*<_t_M1J`yBTaUBxQA$TL-DyMeaU>s!D z0TWG|TC~6FrPO{8!5H*7cJje<-yk6nRP^b~mj^DtCjAY$WCA40V2dfN<|sq!S6l9A zq4j+>aQQHF#DfP_VoE*G6}^o(r9b>qNzn{xj+OT?E{Wky8ySdD>ZCxx6K8pE12yoX zzX3}2Wy%{9ml(jrTA%@N=k;#J5NCETFR4Zc4lr25m}07BlQ}U<{?&o^o1@8jK$A5U zuoDtT6v0O`J`pq7_s;N-+;hhH3CL)s<_)<7t+`V6Sw*9Ty_AyeA(*nNWlEs2CL+A{ zIxItQ4pR}Tc((8g6C)EQL@aP&deT?>Z}xn`23S3l1jUH6DW>k}y)T37+}90L_glc) z6NZR{fZ%}ulPc`g+7>NShm}oqib+khmn(dwIPW6tFkpWa{)G7e(5d|jSRN*88x$)Bw5-y}tl~KiuJRjX66XA3NMD% zS`fy!T+$W5l152B$>>K5JF4=jIcf#N))(>iDR^suos(W9;Fdyk&U-Df_wD!jN!8bo1 z+~2FfhacC#H>YS{W%|Ps1__IAMCP3{gQw0Lk|iVgSBSHHPM*w5U;KtC;eyl@6au+} zr!Hd>2CkF!pUC{k8x-G;DOw000lU-R^kLH<_~u6X^hFfLCN;SK3b-b*bMDnlQdRHI z0evaBW|_|uN&OJZCAkgJoas%AxHy)u5=63*)8l75H-2wZ2e8Df?2J$`cGVvxZ|xGG$0W81M1 zASavVv;{rhyMenc9;sXLixy6o{_1arZuF+Fe(X6*8nkH+WexMgR19f%Q=V@JZq>sri`6)K zXH!cZ+@el;*(6i6x%a2s{e5BGiw_4RDv=~jRcGMphXYsNz}A$$c6F%t_d{3zKs)!v zBUs=#;?Vc^u0n>?V{{kwK8IfBbgwKaI49l1L68$3)A>-ZE=&z0KncTGKqR1pT@h=A z{}{fJKqD)Oc3!%t52ui}L}v<@0%HxG#PDR@333|a@Is>`jvxb|qzT$4xWf=7kl2l| z87jB3@rp6+3wGS^_O1uukGQ)4I6@Yfq{L=F7G@@Ji|mXghBIUO!}kVHy`Db$S^Del z%(;&;`_JM~2gFDcVp_RZzQk^68U&vdr#~qms3qC-DA(#gbn_kKt3mevnFWUm?s@y3 zAKV?A_IJ~kO+7R9J5x4K{^yf_RQz7?4=0_N^xcWCOf0+Wz=Z!}!n5Q5)A*)wUyZx3 zXh-3R!Us|9j(*%}r^XdyyQqBSmBLAn*#Vh1>Nw9jIPuDzKWU9(?Lqs8Z0Mx-(w^&$ zaY(SpyMhxEQi-6Vis`&-^feajI8_9ADyDC(FDw>#YFf6#cbcHUy(YM5=;X_F+|?%X zpYDXSA$C+^%UB__(r`*iVyi@06O}s{TNK>gE*!~xc19%Gp^H7>%8qIUq+aFz@>JoJ zg2IvoZjJkd#>NwfT#bz#gR<~|?G_H*xZR*p(W?9#BXmk+=SM-rE=S-t4qr|2Bu@T- zi^v!Y2F`&XX)FdjN=0`5WE3r9JfL1UKVtiqA&CS!_!$mGy949I_$u9!Qw4%jYr1W)hgV%C;uAcQ8V40=1v0wW9;R(PV?$*F#{n{X)fgXddb~H zeozimKjKb0xeF*Qos~)fSV6ziwtJa>@`BP=H$TAqRmxvF`5S;z`S4Sfm|euzCC zo1}QDiH;DyqW}wzm4oL=O#?Xsz|D1Mo_rO+Evg6rCuSiFI_rTCybiE5*){dJZXY}V zEZ{xrK5()N;FZsCXAt{G#^h8Y$x)721J3{Ol(4L(;daH>+bfz)-*? zxFo{~8MviG3&aE5he{+PS%pN1y!qDKLl-WP$Likwbg+i=`v<3yG#kj9v-ac;P|d?L zmJ`)Trz3+E$!@63eemRVtlY&V?l^axX-iqxYua!E=!m6g(dNfe1e8Ga{MJQy)l#?U zUOKeX@gRJ(0j_ z7F6)k6&UhjSXQmkK)~JX`jK0BG6e|clyo(NR-hq=e)qWq3!p+It8ouMiHJ~O4Y;F) z6#(5R-NFDXAqN?$k%DJB*HPw;$l#gtIPuyJ_ewIkaec7=BS`2s-{=z)18DzYaJ3{> z=FAfJne~7|7(I(WE7vtiFkWU0td*AA7Jy*3ayf6DjZ_UDBqUp~W+INWN1b;Qj8`he zYsBpbXM;dO5jG;}kGpX-0@8(aLq|^b$(1`1Lm&KMHrCTCz|h>45F~&hTK#MJJ{$0o zVv8Yd*vu8o^A-6~PoS~q#>Z}a@=Vr6GZZhLGlDG9oyrOup56CZRw0jew)T+ICp`e=7~nDk$eF& zz3zI*Ejif+fGSE^8cVdTfnt@iQx9Nq)1M)kMBP1$y4~LwDlIR)F@<;;ma5 zR|-3~gDKTSz98x14`TCd0VsCoXF{H>w73V!AH0E@ z%A0Uj#@t(HnwT`#sQ3pK=fHJb*S?zW`%(_2PMuZz=G#Z{0u1B_?t+tBvFANB-Cge9 zW5Wlg#9KOQ#alaDap%8vGdLKIAPrj}jy2F4cFJC8gHjxlQ8N-7@O6xa7MLvYY7R+2 z5J~{LI*5BLC}J}T97fW6-J$cBv8QKF?}jxG3}o=Lj}eRSKYrb(+oxxj-XFXOUDtkq zJ@eI*zXnccm9(}3W)dQ5StiMUbN1@wH=$Pf2O3Yt(fORY>ub@ux(%?towcy)8io3` z5;B^lZKUIy+#PTdQaoau{z(UT<_gI*d_M|foI&URqN4v$Q2ZwT8T*W3;4c~jhiCPS zhZcF#$(4mazS9oV6-z6sM(Zy=ck{<63k|R~ zZ2emZxHfEih(`r&Q+5Ehkt<~dWE;7PfAGtOt)K$7-JVCcU|w!DllVwh-(1~FDKGMK zqRp-iA4vZL<9Ns3FxtgT=AATHPz)GHNuM7c?Kr{4%5tDW-N%Nb13S~uhGBvUOWdK- za{U>$2`OYE46EooI`syJ#kXSX`9|TNv`~ummA?fF_0`Wsk=cc^C@{N-ANXay0*b=q z_(x|fSo)Vc3-3^h!-Ox=pK&|SH%ox!J)L7>k*QL<50Yo7B16*gghf;1;Z@5h4e3%n zFEmoN13D{bjH|Ad*+nX9H&gm$e}~^P4t_r9AQQsPdcN(a?>IQ=(nB9Ojd6->!%oLm z;uh*bWnbZe_^McmOOTR;9RFUVxwOi7o|)>QZ$WaaA_?x%thdmRTbgRPs0whU z!fatZ;lD%io^iBEy}iER!#lo7A=C2WTe{S<8oATh3Mg3+Yw4Q62DW~(V-L>QIJ>71 z5Cxk80LV-YxI=nCfAKe_+^_X;i++|z#d-`~A{ z+P|On($v45S~um)ltq(2oBUky_(>=4x<28F@qafyG45ZDD=eB;*owmc6+iCM{=bGU zdgUVb!Ci&LKS9W#6btE4`X--rcqpYPm<@+@VWk+k z2{l2_1kc$`kvjXA1Gh;hcOy`?h;uoVEtA|I^zQ=jkC(dlMhhop0k3*yr8VRc=e1g0ei+ITs#OO-)Fr37>;+;35S7kfA*%Gy4x_-u+VCVgVVM z?62*Sm==I$cPn)v($7(La?vb? zHMfaXcupJqr|QDqKb?>R&87&PEyIf-AmrI=gRnFh^Ih(m zelpo&%rl{%4;`|u95!VAZsqgrE{V{K*lo$_qfr@V$nXfu3?_^TDQt|!ZKOF78M^e| z(52sreI|S;n;dv8BKA|}t#2@?={J9mI8qqM1b0?Hn|EirC9s5q4n&9wG$q7jk&p%p zZc;Q|b(B756Z{dyy-B$-vt=B-iNd9MWTgrtgy#YHRr1Xh_`@DVI5JYU{_#9!#!%S! z7y7%P)to-_1!y&YLY*j(XldefO6gqD0o)kiW<{DzJT`=E=$9#%0xgQiG6p|xS3j9& zXDmw8q1`Cok;V-#_-nzKM0>d&Is9By#4u2%T0wgKSf0wJPkY(;+>f!Wbu=&ZU(}uK zC#&w#>D}AAA1^NciHO6iFhDr4z-Ye|bGxas?)2T4N;aQ$xIQqaAiz50p{WEi)X!E*@tC zm){aszJaS)m}(UCs_$)05|}8l?`QUZikl@cjNlNd!6D$_>5*9)(_veA|=^QLJFJrsP74!{8{2p@NxpA*3S=r|?R} zVp7N=UuZZ#j@*0u+dvnUGu?@>ei!~-?oxF9 zlr~4HqrC6fz@ez4?s=GFVvza=ZoHE|cY-35yC0-KJnZNfj*OW|R$i=I4H_Bmj_ZeW zK+&Sb(H96Nx}hNg^lIF5h~n}=EV(M=8JokYuq~rWapSj((1m~~GV~SVD1Htx7F`eB zcndc#M9zXUFTUrx)p_pcZ`djA(n0_t_?M9OO&3cOddGK5Z`zC~F_`+fB zItZ75S|dXu0iTD?{x0+GQ5n8_cRx({Max&lUzijIj$EnA21q^61&?~2FGO5z z{m^pFNG6DA8zZ>e3===N=*=@%DNyJeeVOA2hpvAH8cClzmG0X&aOEJ5ed*JE@O=P0 zZ2vF(p9?13kAKEKe=!)?x5RylQimN%{Gg(uLRo8_&0S6)bPMf^Rr9Onm(O2NUiH{0 zEd!&lPKcdbLSU_}S>-pfh1&~E;nAB1MNk9_g^?mO$*wWcJQHn~lr8fpR0s)WD|8l> zom%(H8aU27gv?EZ3X)i1-H5v7iiH%X@0gG9Ai{{Rb&Nf4(Mu!cZ zLK{~z7U|#xzNY;@mQIu|QxY@^L~~^=d@H5j6Ut#O~!q z8A6nuSIcjnxRk#BIVG*Q`mvr^sADNd6Diyfu#6{wOmO{M+`l3N+#jAP_}fvCc;4%5 z)M53sn@BLWQMPwT_(}?^cMJA5i_&ddoBi0fv)RvW8=L*ywy)XGZQGjt+_tOP&uyEU z{oJ;v+0SiT+W*hqy9Y;kWqE=UPx1DPQc-G`6DV4ufCPbEwy`mdg&$Oz!ewx|Y&FFs zQVL}uDOE~|hdor0k`Z9Q$QW$%unm5fA7Ga$W57U6cgIHT{?pMNF)_2VF)_PS%9NPi z>8_5QnAn-^?bzS%oO|zgzkG-k*ltfRX@|)CzWY4)-gECgkKgg12YNKCL;H&KNa(m* zRIV~B;*Ado-knZxPe*2|c2k}U z!tl&O1%C}7W9nf#1a8={Ai~Ii9eJ+=5HVXWe0j_b!Guf? z_(~*_hmq#xbeg6>|5{kD8i^RqYJ;*l10UKqiyc5b8=aAfFu5sN;Gl%?&)N*HFy`Sf(Wj< zHV5`(y52_xh|F7f*HPAZgi`%aO5Jm(=Fr4Zx& zT9MVnF2M5d0&FdhGtwXe7D!;Rxv#W=gtSmjx;Wx6HSG=A0;JYa7i~Pz?VZ|@gxy2b z&vg_C(}5fjB8Skbm#RyL6toZwsI^tNBiLeCyWt_kDXo_l_)EbZxyX`onk^ZPHrmVW zvk;bVwCB1y1I`v^U3%0jVn)JJ?5ChfiG8X6hD$DFU=mKB!!W-h$WNav{&(5s>u@$U zaT=p7;-aBRxD#`(DV24o48`lda{d3b@`+_r{&e!glm5e`wn?KW?w!y&esKH`5%+I$ z#S3Hq-Prrad@yFp=mVqvaa8Nb|2FdV5obo+QT~_6^3U#*UV30YM6K0yQ@ItA-M@hY zYUi>P4go~L2?;MLfe~{}B9u@_r9Nx*%z*&|R@(}$ajH;>>a-RALYst_nhy9TS|~J7 zuzQT=<&%Jj`{6(HF$FifUWS*7y253T?S^-XiuEDx%j^S6$o}l}2k@6t$A$w@$h+oD zeR4&4g|^>o4OovzwBV8`I2Kmn%63I?c?620b}E{=@M327KIq~gk=MfM>?|!oEhB$@ zU>@YHRrAv2t4Jozq|SD{L2H#FO$0OWd{ZcBZHYl?lX9XnlNT&e#9HF?9##A~I_&^W zzK&nE?zdZ1Llw38nm8z7tp^A9`=9{584qZxPBZRMwf&m3# zIrJ^f5fDu=BCrHnaB(&gdYU3gcrw(~|M^?&{}~u%9QPGCfGRjJ8vrKsUKsA~)Ybu-y(InuOw%hj9;d^c)9N5Q7h<_Q?Eb8aTYrqwfk57O5z#pS_ zh2pC=z0jP=zd02fUlx;t|Y7Or~tXX2ToXBo1Osw?6S9U@K#T!n<_&58n`DlcddM6BR{821 zSsv@hV*ItS;?bg% zNk|;XI6OFnN(~~Ru%K7#;{b0>08T+enL0Ia1R!e~>dUkZVUzY@*V;==qn+<7K&3&u zIswapb3|l2wi^IAX!e+=56r+ISIyoC3pwzm=B=qjLu$2{&_1d^mOgA;Ri&Y%lGTGi ziATsfb_T8P09oM;9@SQmY)3CbF=D({U)*O5OLm3hav7p8 zP`y>pFKc0SgkZ9c9<=fznFUCVTbYP9Fn;thOA*_En3{1whf4dSX76#2u1Y3xTmW&LCfI3*b6G2HR|H6lYSU!L31!P; zu2;;^U3K7AOfOi8Ri!sTDgL(jF0X(mdjg?SRtpKt;;hrD7B(``3P2wYB8dWud2_!0 zF>KE9j#U!kF3Qu+sx}k~l>^S9I`t%rdQ8(u5z=j`no+WWc#~M4XhFypGZ<)z!Ip8> zG6BDN51{}DFYd@Z_Ztmd=BCi51Al}e znl``nao9Qh_4+PErt9RgTTP|?2E@wc1I{6t!!m&2RGQALdBe=Pq)g;Vvz!oHQbJ0) z9#EIx{a*G29n_l+RH0&;8evfWS~eCvWU(?OI?jJzf~is4f$zXfv8uMUu43E|&B-b- zj(I4aq%Hqe)*5T&O_3*4s(#SRt#+{_u`Fm4+=*1u)TqK-y6tJ;H|H1;b0;qZO$Vm2 zXI1sEi!A>uuV*j<{W3c?qWgve-^SElRGm(wH;)@v{#P&~?LeGq*^iA>L}_Y%EQ{2K zey>$rW-v+7+5wNOl=jgs59}A)I3~U`@@Z&Ef@yR{#84ZJSR2(@fJ16An=l2*^Cx<4 z`#6tJz3o!4tYg~;FTEgqh8E$hNUUH#|84g57eV}V@~7UJ(k?I)bLY*Xvis3&t0WhM;T)zgF8#Ks0N(H9gS!W z1Tfmgk)UO&aVhBduCIjlQQTVMu(>e}*Ehw8rEiUky!qjV#ObX#AM#NQhN(&Otuk1X z)uiR(9LPa>F(Y^s;SU~(SWYKahIk|{j*ywiS5b6!dL3cHRI;g)reAp;z5?F{j0>Z+(0N;TABpje&!Bj~7VD z#1Q1u;0v<;Wq@heM+?kER=8fhmm1#BDvK%K2pSPz+b8X&j>|!y&~5M;6;@)8eCu;AEK~P#g!fG zG#Gd@XNsBL2H`5rrUR*iS;zH$W64)*W;_h$o18miZcsd@ripy=NOD8cK|Se|)m-NN zjJdfyTA>RZe}!A??3|*t0ALw*MrZhy238*SsWbcI;Q(j-@0N9xO?hd`-IFg&o;7Ln z#H|zFo=`ph_3`5o{clvoD`Wp*?2pI%e$37>w~f9qdd8?%N7at}c;ws>=SIvg|Dt?R z*+pa?)@Ma8Rn*g`-MIuFDZAR?rJLA7O|4ESC?(*M3SVG8HX!u0eVDdGc3=79+9A8zHCFFnuqUL)_KMoLb~AJg zptvfBhfnNItPv$b3#6OPz$u_Z)5(jFR~g(+&|u$jDmgxUr{FM*PxexmJZtvaRS<3N zvZ(B95cG~KK>&aGL-geKEgj$NSWrd`%y+01G)4k+E!n|BwPD92g81l0-KwDufcdi!X|y8Q{4J$?pi3N&JLy0Vu# z-kDYD8@J}Qg7R31(&6IY8S$%=dNf9mL>3S|jxllJ)Q8a!kPa{f5xk>wtHG*OJtP#O zkl+)Ae&@M?=V|`~^)nGX>~hcrf~JjH*EL0Jyafx)EKNU zL>{&g2=!FT81=D0YqLVz`H}HnYGY^KxoQb(@Q|Dff*h}C+mzf03#TqH^!IzI16?#NU7Laq>(6zCKLN|oI4vhQ4$31a>DQNbW~!DE&bO#ZlzSEcB6xx6 zqHUpB#s<(CN+E7&qyaS?=zVt2OT^m{r7WVEfeh|DILW{lub{P#nWVqn`(3p5?rG_p zsg3+|$T}J}GV(>J!HR6h2D|t9ZKg>BP~OSggj!eCLbmPsBN`4O(R(W=#MHHGp-cWl ztgAEGl!W;Kwb{k=v=1^t)Fmydp3O}+A=yj4<89MXS4G($q@Ewcs9e(VOHo@SEy-oL zLXAPX@#!0StEd^8mL3b9V(Ro*IH?`pxH(yp!Pa5uEiuP91;o+;9F`P72vQn)?Pa{T z%#JfKtx(1?@a#JX%|phr<1^h>Kyb&{$E9!V{SMl6+qCqpv}O526ST_(n4UK4m1;nQ9`3+lf;)BeN9ihe|0Oc`8E^&>jNRR5J z0<(JBHfd9$jV5=SfSeC0gZxp0Mlq3vS_~^es}mE8P%E%_XvXK-kv;alX$n-s9>vhI z{tK6|n*4T*eWv%@XvWNGU9?L1!?iTRHK6p`$D|+at%P!Q{#2Ny+|BiXe%3X|8#V$j zXQS+ZTo;aWf#8@EYF?x?piB_zNwM`ncs*uCI2pSgXv#(vWP&9f z&=RMa1v?{$80a|xH$xNJg5xQ63}A!Q8H1h1=^d><5$S~%?y!gh)&vaW&=vj#zci6` zz|etgAKL(lVb1(iGh4GQhNlKtK6(txE6(2DeTZtMV~Fmm|2-^oVAQGLO+j$BU55h$ zDfWjuH#Ul?SZp(ArK^EDRrUvH`!S>fFTXPQYOQr)pev`R7{IhR#cebX%LQLyTMSePE zXlR-4-=mNwis-P1u0-;CYn6Q z8^v6LFg_2$v^TlAP&A7$UIC@(l!kU{g!1Brl%%fUnJ>{`3KYj6xiJv?nmWqJl6v_q zz#enW*R7P=Z??b0joiEu=ni!%Wivxcdfl6cp-|^hJ*=!o$nUlkX|*^4PmYenmfNEO z=>w_BQ#JEy@0eeE*Mjf2C#(oRP)#rNw5UcLYn6+EST>5Ia?KqJq8==?QFcT~7&<*T zbqv)JDsynQ+e1NC`?`=E*I-p_M5q&nLtLl=zOn%hL>o>wI(9wLM*DF0D5@?IdHOyDR zwbvNjXu1gpBZp%cop0}2z*?+ zDQt|aLvr(VN$^;VKDdH-%M<%n7~U|0(iC6{O;z$kyy36N3L786dx^T0*UZ4=+^X>hgzi+1l ztgi=-p2YnXcQb^Ar`M1u$LLmsyV=Q}%>Gxh``*Cy5KmA5Tod}gI1QH&eU1xTwOxPV znhQP6f0p|sun-`XLThr^o52;WtJbM##LRPV8Wo?GYh(h1#%IXss3rL$t`ou6SNm@< zb;X1S+|PgPlPOFhjhGVZNU)G0;HjC;wcsrDU<)SxE6Qb@q1d(ve23%Kj1P%u8E@zk zB+?c!KUj;D3l8PX>$D}I(rtkuu7@-&qqXXS&Dl5t0V+ zDs!4$u=b@ekt1@t=~W>!J}Jss`?*pIkwoncU0O>HqyN99{Drb9znJo!$$vIEG3mcd zIy$LpV&8=SXTm&S0PLvv?bzng|7CRDsOLxi)rkLqgx5b`Ed{!N*u7|M*@!2fy}PpP zNUqIHV1TR^0V=8f{q{atzrWx9LS%6y^U-hM3Z!fjtPU@gBjN3M{NPR~8-k{W>I(X9 zMbxHK-xvEO3mLIZ#az}d(PR?uFJO5OzIj%Xb1ygLTO&o2@)(0{4xZQxv`I+`MX5=M z$t_ljCgHg^pzqAScfxN0S2hh9O%9PqYjP;L1`eLr?l~*od)aCchu?=(PdCqNXiK+s zF9bF3?wMX$b~u-sk;hXoGN(w*=;jk9z&fPoK!$CF&rM3~HRnQrh=2=moY__B(Gic1 zUjYqwQ&*eBM1tHEFfc~%ZUyP2v=OnZgc`25EeRD+LpLuF5HaYDaqgg>A$;_pprDow z4o&&5#l1iuO77UR>cg-^gZ8y{!N{B zp#I$Kr|)H--S0o`Kl?h|TOll0m}AcDlAE!dKq!!9aX zUExmKhAT?Wf>Mgl>zcB@Au{hwams@>KgSoVKy_$J< zkLIDF$`^-n^VlXMaX}6sRPJu?j-tUo*#RoQyn^cP#x9-4n5U)#%TlR$=lw8}Yk|I^ zZ@u{fB7gs}cq-Y2pu!P-t1Sp67d~TKf*f^3MzZ*FVTSYs^qf%EV9CG|FM@JqKIgYV zMD|pDP=(XAJ{A9E7e}LwfM7sE>xgVN1&Q-AB>qgxWsH((q76g!cofJU5W_dnFsl)p zE949SiN=ygBopy`riY!;lu>^Yqi?Nt6@e+>X$mB9JZ7l{8fdTuoKn820}NzyvSXtz z%kBre=Yi%+pZyVNULbq_`8@;Y_xYs85PpB~ch6?e^?}h|iONjuaeb5%Fnyke&wr>( zPo3}Sg@5J~EWJV<$-WAh^P^a}1Lr>)e6Aa}XyqE<5^e<#0B+#3}77$OLAgY z|HVDoFAhSV0dVlaOFO9|eC;#EP$*I-+_eWU019P0&}mJdk6r|93Di{FJB(XnxAKTp z-E%?772T^V%U;Uk5r|HLF>O>Z2#_HquwJs>bs9DlTFOh2fZJSPtt2@DgC^_jFMC+< z*kluV7bG>gne1~Ny&#*tgd)9ikY(L-(4_~u??IPLGTVnp4)<^!B0ngy)femz(yL{a z0tV!^DZeW&gF+4DX7D!1_Ted#1NyC-?YV%2OX5` z`~cfe1u;W3w7?j<(}QMnKkp5Oi>C=4ryq9DMi+n5y$oG+;}q&s&S=^G4KY~xy<_6t z`{oad<=x=!-{wp@kMMc@Vb+32qi}C@z;5iWL2p*3v5*dW7rh`U*n_MmOzkI=UBapD z;lrd?3)e=M4BQb)*bU9XB@36C6nKJ24XrV7z7tjr2fEpFmBeGatI?>s^onAQ(n+kW zrC<#@zrpYHoMF0mr`@w4`(Kho^`=S*NrpA z!|f75%jl(ptbU)QFuyDrYTKKcrZ)#dy}9rPEG7Kj3OYLry5#tH8Whk1aXuLn?H=6#f6m z`DOV3`sX?Yu2W!W3LIY9{WQ2j#iy0!Ypp`|iq7gKx`NHWd;Y@OVS0jDr7K{5pkt*T zuT(FvaE_7`s@Epw79Sa~MJJTD&b7YNt(=#j2izJo&-qC?IjX0^@)HJXGe-;+iu#F4 z>Zoe63>GUR(L|P5DR*_yun6TOy*ucQbn(^8uO5$({DNOF2XWFk9yDf*WKO;YGyd%P z7ZfK;R2A>@=%M-zQB&!4CB^t>+2<|*&I_Wr?5Bq)n32Ff2AvpXeU^QBzr9K;;35)L zyVkKu5dM8~9@sPkC%41Ij77e3Di2&9xfoDWZxg8q?C}vxNNvdbzc_w*`vKN15}NGp z7omr_yyKJXZxP+GJE+TQjwA3_iagYjXk`B*G$lNDDDz1-F0KQ|)3BDrt&!>+F{%xB zWZ>xMnH`_1phC%n*0PSUMiClnjnUykbJS~xp;)G~vHFx22uWaG6bMRS-V_K+VBQo6 zOkmy=2u)z#6bMdW-V_K=VBQo6P+;B^2vK0(Tp>t-m^$e7|30-zFw<-3NGL{|YDf#+ ziZ?S|gaJFzw8S+@tmkEov38iBx@GN@gcQ?-jT~?^vbu6JbhNOD5&>crxG12M)t@kk_I%c_kk~LAia=|)%0t>Kr`HOe`V`3p3OD}WG!Su`CO^HU zpjFctYAYShOH17NmUf&BAYg@6`6h zIsS@C67HQ%5YH}-7(0L~hJIjiAt-`i7{8HG5Oi7Ot+6ZN^s}1H;mr7h zN_6FeZ+xJxLpa@bkL#I=sMXa~-BZ%=YpzbkTcHL{G(19Nd>ub{90FAUE?dwCH??$i z;(UcrZulzz-=@ZBDC0K4t+$U9W?!^sAu@<^SwLXnF%@fT1ITEDx~QaJX$L<&q5#8} zD0(#w(5Sfz5RCYngnT{uX6AFER6BAEp2B^ADD+T!f)+QW*Z154VpL5{uS%~gA6K17 zJf0hAmC+dzYeuFvq8$EOvPnsfNg*Rto}V{Fhf!WB+TH}y;=K~|*e(szI$v`B)ru57q=wuoso z5D5jkL!}Vdb4qHfU!1>iVdbB@UIP-9wr0ac7n|hHje0`&$eu~)>GWwBdU!Bbi;t-E zQ~s3JpCD7oy;0v6<|dr(bBIQYCVQEc8;rdr&Y&QNWlCF;TRd# z`uOy;o{0#)47dBK@VeDS=TTt|4-9hJ8ghuVQ*a+{hItqnZ^-%Hwx*cpeX+)k>mJiH z0b^7>JG~h@VMX<(M5-&+vOG@2(XBuAf0Q;{q5RvRVWNo*>AxABY=yYRLWrv~ICc%p zeZ=d=tpu?0>#uHo=2WWYCT@P>ERgwxs7eE;-_7iNVc@+zy0L`UWkvUGJ>x-%JMV^T zI0Cv?+mjEVCe^N)qGY>3Lk~-%Ou_QDQJx~Pia;ceDm=#%tzE5R=xn#x&KO{~#kBgW zxL1*iFYnj~+#_{YF-GnX+QM@3^b~<0fe&fmtQH$23 z0a%AU7&8tb#1$TjH_bs|eEm?C$N*W`ql3_%eg<;Y}b%lu=zhV{rDFIgLSH zs)vK7VcXB0M84 z?<>}g{cvn#%u8b?jecs>e;;*V)Yy^rBaW0GF24;~zp4-5)@Y`BTY6n(*`KLG4e&@S zVD%Y~!%Yo*U^9?%VWx?zt5vqeaDR& zlk7uvO@d#NUKlkcW+xh>EJRBN_f&I{ZM`&eyrZYCvh4rW-itcXnIf-%d>~G@N#G?C z?gZy6T}c25fvnTa!=V4N>x&WdT%5sw*_F^(5_0CDDXcL8#!W0HVR%H7xhWC+xSye5 zA&7`z2tZjBWw%9GK;aZ*+au%)YLjSj+5u4z(&z=*Hy{QUqvmIoZ2wznO?mu}f= z4B40T(kOCH_ev1JQPEcx_MhwZ2+ue~`W8fmKC}Pa0lE{swr8%6)Fz{yHQj(|Dbm@8 z_=*T1m$x4W`Jt=~n#&i*KS!u7qn}jov$K0pF~%2v2X}o)%ooof){S6IFAO5f=XKAl ztY6&_gDN;MeXPTfL9;^r7|1Q+!GL0NwQr4W1Wkb|2Nwvq1V z(AKepbNeiTl5pHsBVChAj1TcvX>J0i$wNqlq&;|<-SalK4A&NQMzCay_tGkHetKGE z`QL(UO-%rYTnSJzL`%gDVr8rirr3ayK_s(=jrYeo)^hqc2B+%#A=N_QM#c5?+$cB% zQWkbOS=wuRX=peUtY18F0y@xjK> zU3kS{3Scs^SKV`%|K%F}F2Pw!R~y zduO4^x1~2${>k98N3y&3z;Ihf9`=^tQfT$S`4_QLIR1NgWcOh1KZkfT{h#l_-^`hJ z_;>%O^5i4@&HnBrR;42M&`#pQK4v_176Ml_D#rX8IC>P*O;@g?-I!jQD6%1Cf4Mr= z6pt(eV;4=cyQTnAunQBRAtt@s_-6Zg7+{8oQl-I@{&4L5&-i9 zw1WL9P7wGK?`(+9relGLbZNZk4Hv5DohdDW8RlPRPVUa^cn{p&7`BHaTykQ+`u64R z-8j#aXy=ZSfX9g3N=KL7XR{}t1E^;Wq!xqk9w4Q5y^{Ui8AweBKH5EdaQj}Iq`-l) zyZXR%^s03E<&zq%Q@4cqy)!U8)4P{cu6qpExJTr^whW-c@h!pS4S~{PxaD;uo+f{3 ziNrbpEwDj$3d3QsyWw(RqShhuSF#m52Bc#McG}XJz^>xWpeVeDTOtVjiM3b6OG>?? zq!HXgjhmE`@0s4|GNGQRTn9sb?Gyvbe%@mv$ie69{Y)QG6j_3%;3Tn(C-c@3n4h@m z0e;he{w3qSwBtQaD)8W)r;%mw6n&Ujik(JldTDVvEj_8S{69a2t1bGl2Kya-JYpPt zMb(0Ar%gF0W(Oii$-)pO!@UsvnQmMDp`fn!HrRkoYjvfnACz2Y8GnxP7bT zr#n8q{PIWW9Z;)q*##4{jZ4q!{Vr&;sJpWAsmGGUs=%;>cL;xMO5G(aYJ}MZc#;XW z3HC;I4~!Gh(v){{bKo1Ry|e=z>LV2azQD4@JST`f4$12PJ z&&QIeYs3_CZzcG3^j?a75X@1|Hs0(VhOtL~f>%Gk#)H}`nxYt+H5QK{3~J5{Q_ zr!t;7wO6rd(Ktdh%FzuRbl}~6zTYM!HSht&Lw8r zW(P!+L~Cdq%q%k}mG<77r3tkKn&8fEZuaZ_D)Z*Y*;k$~RH)cprr&_DE3#rayeyAq z&Y#P^^zq={p3KqHuG^3G-o!e)yDG~o9*ei*=-vtLgHuJUV{6ds6yDGUO?DYbR3%8Z zT*h)v`O;5Znh@;>#}+;1$Dob1_bVZgoY;)-DPvkx|3IkY)reM4S z$2;a4(^K3k^`xk#G(7roX&QgV2HX&J^3eYO*0R2`DNjxrH+kpe8z$|Z_zx446aM!J zcaDE!+~1G;^|(nD8^;ceT{h;W(U(X6V$|P_`qjw4AK5$d#u2AS)RmuvO+eq5d;L$3 zJG>Dh`pU|5IYjg~HA4I?c%Vx|O7|8>J0qPyRpw2SXJ7J4+*AoHi8~LLhh#JX%AvB= z(Bv<^1D`@%?-06_e_!jywJme1_wvzRFLwEMu+Ge`UJQFxdeY%vpfNM2rf+O5A9oW2 z*n$bu35asm;w|E3Tn?LLa|*o*>LaVT0m+4!OhN1f@>}-udz7k)R=NN4-SmGHTy8Yz zJLww_C(xkVs?wFMppJ%}!t~Q^B#7zh)hlN`+|=9UtdAK0_F;Dxp>@XXe z8O(k_2-W}j^E|`AKo@4Zr_T0Yd{-Nlv#(5RJKPLm-mO&|V9an6!>%SeTjI7w2p-QR zk8>!myY$&L1mWs82$m2=GYcZgUnI^sgLKlw50?rY5>eab!_R6YdGIq(;oDCg-hc`# ztDXSt`AvRpJlwS-h#V;5s>8(K#CJ0$>dyrf-v9Y|ig5rvEQMEg9B!goc3K<&`zXA{ z#~RMn0b6-~lqR=pkT&WvXsCeVoi3dGmbSwU?6>H^Z~7W^;5TnM zydD+Ks@ecJ>6;2Fz>D-ZrHjMQQoOf?65sSM564*biYF1T;wE2#yV4jY6c+t+PKT9} zS~~P~PV%reY8EP$G`6_4+|``O{l@g{!~cT3Oc94~@}$?khOkF>k#IZl{b#V$vY)IuNhP!HAe65QQOUEh%gSz%-Ln&tY{-S2{zbK7lhWTk z{HJKc{1w0aCEEaL^+sbmB#ObpZIM@EaWVA5%q#ASl*-RBF?qNi4V=DW6^xs-fhDvo zSfH}iIGSLAN)@up3uOi`ymvYMqQ5F9Bo9C3)yQGF#u`~fP@|58U*q`nyu(joX)Rrp zE>D-Eo5{8n22_8I%nBl1hzXuJ1;{txzR>JSXB39R3+-R69Eb?D3my z1c0Ei(oR_DY{J3j%1zAAf5o;H$WoD>b@&N1>Yhd0wh0ZFNmzoQQCCmFf+bzCjmfsc z`NpOv9R4X9I&XFoCSNzHf+%R_@MxEt`--i~%PK{x&D>b6hm*9>xvD@%P_L@ z@MCDjOg;YU>tPIxm!ZVErSNSdetq~SsP?u+zl6CrSduw}7C4aB;dY0s0~8&)8)0LD zC{sd5fZt-r(hZ556@(7(1h9c|L?BDShX`cNR^{1xuRQ!HT2MLlM|BnBZgRHXp*x-_ z8XVp?JI!11a{q|oIEJecHV{ar0j-1` zH`N78We69fQz|+Dx*#ua?B#mC(u*X1)vuOa7{|b4@3|iWM{sB_Z#G9y51c;);n(F8 zyiOsy)a92?18|BrO5Xp!RrVKUQ~IXNntWu^zn=K333rWuVcd@^HjVxL*sd}E%b1^! z{%@m?jb1Y9)Tloi`OL_h%e#>H8}>=hJ2Vkn8qE4;rYpm@Hf`dG8~#T4gkdd2oJ}J#1o^whz^mHXCR5b#JTnE9!P`riwonG zN$($c_dJL`qUSq@XzDj>T2F0vY}~k7y%INwjwWa_o_10o6md6nnFc&pB-=T=4YWvo z(BHMDgPbCWpvXQ#@?*h8#N+{fW4voe5WAX+4yKg;i9!gThln$+3n?!@w3M_pfW{KH zdB4dJ@Iw2R*wB_}NgQCMu!2&Q_#r35Q)M}xJ93Q z?egIr)H=R<9@5dlo(pP+?W0z}arrg-!Zu?Ru zj5iT;I9`FG#t1hc@c=v-AWiAwBE?8L5j?9=1=T<}hG%;AgFX=ET)xn!axiLQKYv~& zOsbO0>^%zwCfYY9J>^h^hJ6{yXpjA_-ep!(WSQ8*&_=Rlp@z`Igb6VZ40YBc<`6Cv z(0fC8%Gn3=Uu_kd0o%j=3x_bQ1Lxk!zWO@+BVA}|L?Wou1O?nAKifsbZ_1=0aCRueSBbRh@j`VY;w z-gdc;B+wfd^Zo-^N@&s4^qPae##qgnmR^>=2dw2kLdKX%5&3_mIPmKb^7hpV= z*}r@6!f66JNytRqb^h*)U5sqD{XC*Rl9Qf3PF2&sLt@sl8~wVad+EVnpH1x z#eUfs2gB|bk0IRSp-13hgri}*$L(I_FNijU2_uGj`F*6B9xR?tlM)?|)N?G+f#c_vFGS^vn^xsaY9fD9NcI2&f?8&FPs3 zw_$PIapyD7aI(4)U)7O-_CWN9tHs_E)6#pEC!0_fn~J)`(LzP#-BL=-c2oEL2md8T zdS+$!s_vWFP|pC9+cw&h=cSfkwwGxetyVG2Tx;<_iRY~}FR`pd%yl?Y$@Jg}PJ+Dp zGCILUg~vj>?6gLB$Gag+f-vC2Z(y*-<+g*RO|Mx%yNIzRfSWmK&VHueS1Nik@kn>Q zWVnHjclX)MPM+az>|TBF8Bp=gy6#2YH*&q;h$Dwc>Wm&mkaH~B&bSWYj|;sjsS^bY z-3FrzxyFIsFoiM}V>tWbYAM42i-i1&aY4{i7C0XQ>%tz-0KU4DU}+AM%)Iq1tP;6~-rSyjo$U37^s<9bgRIrJrXNaAAz2xWE`<}nEFb&t8g4Z9 z$6Dbi30TkxIbxAVl5HC>0$`-F8N$H?A!l`R%6$Pwn6#|3jL0o6sLhvm%6r@h9Y6I0S-4{ik`n11UszhoCW(Y7_o2jQJ; zn_Q&*xJV~jWDzwXF;)tW9b$E`K8_^<-hbuDY3^wVFJHJRlba82K}%-c z`owCsgvHu6*nbPO1=I~Upg_&2Fx=}&tp_)ws(I65&=R53T(0U^>q%i)S%dhgne)F# zd}hG5xL)Fs2TWa;A9ywn)Tq>{g(mX;KXSx_W#b+kbtnG0{<%(ptDwM%(dmVR#rw0d zFF>;+z&?Q3W)KuS(ztwZ~Wh%;N3f6&La$`;Pqxc)VLitbPw8XnymAQx^Z|SkAq%y89#vAUuv@69Ud?~dEWS-e8Mzev zwykqr3cNGbgs27UU_UE<{gR#(--Ct>y6324qs(N_3Py^tAyb zAORnMGW>+fZ=NBFijq4oPt7wLEd}xGw^>q$kPk&!dT(An#FZ1%H+hZNHV78BE-#UJ zX@|rF{wka--1tHjN;h=8siV7B!9xO+yz0SIA3?N(VXejiJM+;y{5H7f6Fla(f!)8s z$${T8dtWkd2M)fD$MWph$9$`ZW`abb#YfgP8ZwJ`KC&c2%%Esfq9fIbevz^vav72f znp{Z;beOt+xHx--qSJ2>A&$SIaM5*;M{+UNh;SAnCj#rZU_w~xctCZCL5G=QVb%Z! z=t?6dkBPsq8p0%rj>LJhwk_t)qh=W%{Dk`5~ z<$wh8O3**njkOG=^O-d0&1Y`s+}An{hcm_qxeuQGH3lEB5AhTal-Nm z6DV(ryOtO*J(-6Rug}a>soSNBKp;me^U$maRaqk$7HdD@eM8P`erdzm1K=phc)6|s zMQPs;(hJBAk0i=|_hs*Y^A;?cw`jpIabcCQ)OEq;wv`lK4z75=xC%WC71HA(b0Z=- zrc4m?uONTCVi_eNs)jhix+|6`^D2*@+I3xGehHmLh^z62&6ZZJ))FGjy;sa>f+Xs$ zyH2)gFh=<)@kM3+dz@O{V1`Rdgd)|=s9x(1vYEAM9+=>yp+r2ugj30(glUv>dzISl zVVy$SnmT6;oO=U724>8S%(#61S@Ui1#aGR@f%BL6O(UOPD{FrO4!e&37UbA<>J%Bm z6J@B-BCwvRt*z9eCK_r2kEg|vggJl~^$i#;EhH>yC5~% z=j}B-SV^N~*$^CWDFTwp6Azx$-#`oQae2EB+iJ$f?medYa+Z?{Qo8se5x}t_E^J(m zd3H8%EB6Ws4TTxpFzwCskd50Gti6^cTCbf-A*^6ye9NjPRA+l)X=AV$S;A@t0kbHK z=Eh-@%?_f{`rDVm{~HCR{)9h_``PHf#+U1#ubu+Co?1Spti0ldMH9F?A%3>m>ZpA| z1f9s)`}iI~#@MM|rh>Y5Yn;d4PaNVmN> z$+Fet!#@HH`%)0vIcOvUp*9)4<7L5aQXmR7`xIJ^P=P?h0+vb5xj{ajF%GjKT>jMB}*rUrIE8k)O6>5r;Aa%nl%L+rOf?1f}l99%HP3xcn`tfjp< zR`Y`&gey|`;cym}SS)KGZmpv(8Hu+8E%ILYCI0`G&J9~*u)rkAJZjhGK$#b!HqUQf zmb>oq$r+;g?FDIWH-z9evU6k|nalH|zgp%pY5Z{6i(E!Z<}NPvb>`Ap^H0fK{0XW2 zuIMVS1LR{%e3|gp5W6M&2w0Rb-NoSpPb4BCB;{324kzBcbsc0gTM&{#KUHy~fl);ZM?r9gYD40%n_J<+(EZO| z3Ts18hWjOHt%@g&-NL4otok0bpY#mhkB_c6*bW6O}Htm zOf-Dm4Q8eN7VHg^#_yW6jJreMv>U&&W9Kk-1}mB&$|XDxF*jk&$BP-ADZ_`*g2JhS z`G!9$*A*HE zK2_J{Nn46aT3~ly<40RDOTx^_oO9;Fg?8>a8HkK73_$JZx^)}~K5Q4g#n4E)ELO0} zUu+aYJ`PPxXb zKwoF~dLAE6#LMrt#|OYnbS{piwzf4eJXYvw=hk*8XsQ0ld)1YwCSpWaLimNvm8+W% zJYHFgUr26B=ZbZugz(GRlxRRydYiD+)6Jdp7cLy8phM*skHt32@iG5MQ*iI_lV8P_ z;b$+lQ{<(|Q%U5d$k`YC_hvijN<^ibka;F3y(qL1i2jcHOS3K6s8g!h_Ff<}ndLf$ zK$lV<1R8{##8Wj_hy*2BMZI#>yHKJjQlp)SELkGh!THKMJwrLwXRryFhJQ^B>G5BZT<0ELD8>zbzTobDrhp4FFy&${|9ky-{55cEC< zS-xOJ2b9+oKmi7R)=%IJ1blJ?TH&7 zZ)5!Km-EkWU<7#kYUwPQhe7C;+1@O(vYa6j z+Z+RUSfR|4%kVJ&DD+I&&;W7YPQmHxC6td;h<5oo5&7V>0yrSH?!hjavfgVs>wN|5 zG7SZCU~^7G@88-PUyjXJ>_c$!()KDe8cl?wY&twZk=M8q( z4Q;SeL$Jr-C{iG#U;~wR?xLG_8+O-lxt+?$J1MGT0FF_!pEZT(K{rbANp|Nn`ydJ= zDCD4>5vCL~^DCAh5Fg>IrvJKJqLYQ&aEb?WWep z+pn$8uJ#gZWPQWzPiL&u!hvYo5O2APD&T&Nj92P{&=l<6=>N;hUn|4^*FWDl3LN`+ zx{Bi3v-kX}}b&4T?5Pztwn2CNH5Fqrj72+(jG$kEWbMcoZT6V=`c?AgSeOmrg3F~Cl+>K|f>BHT1U9N;rNz1lU? zqio2!OlGT5M1{MeV=Gc270UT@p%iZ6r~mr7MTv5n5}3;Uv5w-rWDVg?LuX567&7JC zIt#pc5IEbgiM4CNjnI{ukg3aFs?80t&@52WN0ukM8oGGmEO8#xEZEZ2bVps?9S__+ z8v(_zT2;!m@OC#f?0F+^)w>QCY@SiVyG875sB)C@wRc24gI_bxLo+-QsphHi;RJl? zTeeP*tZ0fL)Lo>#3-~yl;!O!O3IthMPZRmp$lPkXG??*8q!b@m#0H>yEL?pd`vQc{ zGPu987(g`v8HPyb@YHXlvwo~|X+XUzD0GE>br15t5d9Fs*$s06o?~jhR}&V#Ab8mQ4ZOQ5?rT?NA@J7pf!p=1bbxA9}a5Cc6?nhmoZD^i-axV zH`^??o%piXKsf5|H>FBnePL;V-8};PdmskD&7s3hAHpodhcFFXKrI40E3HII2%;*MWI zEq1R8k`(7t{`Sd(U!kG4Yjcsm1Y^bJC67rMrJy}UO&x@}IqqdR+Z{e_%>*norLST_ zhn6HAaC6p(`s6Y+P1t=PJQHNm-?gxA*#nFGrUumJ2nTOSdvpIERrXlf#Fs1ncyu4W zT=VC-dm1T1KA0-|+hTXtYfv{^iy?>VZ0$-Y3A6lW5o}Cbs!fN;e*^%gX7aYT9sz3Ug1?{|wIr%6ZT@(M*14nWGQe-*Xh~7EY7o~8_;+hq=H{^0kU$tU5v_C6%wTU^}3r~Liv$7Nn zk38b?Fi?9fv$D42Sy?-bS*dADnU$#jtDTjRf7ZKtaLCV_8l@ghO0h96Y-QZu)qxnA z|3jX03@^&F_p<2uVKs%EPQ-a_6&*4=x7I9(=A2bLcGcF^(&7;%ID8e_278-ehf-d# z??>PM>eN|Z>FtET8*c8YS|Ysehfs=ZSADKxrQV0g!icR!DdzB41SYPIJzFgpOOQNsB9 zItCB-{co53UuBd3V$y$|w0`2niH}eC-zGdY{(l~S^SB)qrz*yeeH4-Z{&DnANBvKu zR*d}jBOe~IdBmvloyhP%?k9ai-_3~3aOd>&(plvd%V?@f@lpq@PL{_yHj0y%{8zC*e+5M|4}sh1;R7gaq)U#@|IGyO*$n#v2P-3pLJ&|!eTB14g!>= zSkq034N&8|@As}+{|gvO0_*m+4nFco1q)kz)-`)m2&pi@M&jrmeM+Bv4VX))y& zR!UO~6LlE@={iCIvr8;$gMX?rnY{snQx-IO~}7q&~zNDW6lFvjJZv5p6A!eRvJiETezb zHv;XMRV7;zEvhZ$O5cP1T&1)jlz!CaK13NQpH@dGapjWY&GqxUfFF6M&1alfV_wL}CQ^2JkJn9cm(o>9HzFO`|7+BA$4^ol##Jm!H6Y$avZZk)Q0w6x6Yuy@ zeCtCk$@Q@oe7SdZ?pqPu-G`vrxKDVC`{^GQbAOJa~A^^;5&muy6p;r+=*}J%> zmk*uW;jx^!?YC->lzYPHbX5E>- z8xhkg%8vVYQB}mKU8oK4v=kOoZOOKIBE&H!Qyt)`CIlT0+;Ht@TnWwrOfvD z+TU+adsXq5UzhyOs|=SA4Hz}}PVd0cmk^>xX{w9#@4nbgN4MwR8#s7Ad-Qbn;Mwfn z^uYO#G~fbgC-?tvmHn!0^4W<~CVXf7j`7RK{o8TzivOcxQ^mBg^TvEOX4U9tN0*Jf zIO0Ez_*wa1ls{bdZ;|**`#f=E6`~zXU9|Gfig6>VDBz$7L(j_YHi$30QR6W0jhM_W zP#JhEm^BFEj)3vJx9!+BaDl6?^~jI0=w?sb0OmJBQ4zq^WQ638-0K@C+X^jx35a8t zzRPB!EGe#XXobIV4B)7!?uM;LR-(SzyH~G9eVypU!*QCM*m%`&Eo9Ha4;??Gi+mJG z^7FZsJw%cz=^Ktb!p_d=>N1ss-*z_NA4?@ttTp)MYHVtOr6XJoZGWZeM`0_+hipcW z$2DO%c_ybPANdi43X7`Jh#kifXhmSaL_=x?5Iq>;1?p~SxY{;={dTn_5GO4H?YDVj zZt;+m*j(T}2<71}_sR}K;nN0BeT0=X_+0luH)C984xZ}&d^_Th4W8;9`0yQ!(4_RE zM}CN7&Fm@!MVaq6=@H^bxlI|O8H73OL~VvdT3JfQ55V}QACd_%WZDqp4m4}Srn$*) zu%JiHA)pW9U3TPQtexpIc}$aqi~YVO-oXLU zZ>6spO<($YG3m#rA3E|7MsZG6`p)zmzZH6Z@1nL3bh`?b_2a=HND4;Px z7jSSwpiID)xE;n{TrDQ9msS|fK=|0V7Ywfd^Y>ku5K6MW`%fW8ozD1-MB5rXc@bM8 z9`=8}54jlR^NanN7j_Li|1s7Q))mIF|J?Jsxv69mBp&nBkvfpLdiIa*G&9mgCFO9s zAF_|S7^ASh?A&TYLXrH2x|~a>x9^4Q_IFYE=;kB$qww3N$2m=yPHewfuzYdBJo(C- z9b()GA_Z9AEn7_uZo*_gKAk!Hsf!po3JZK0>M{#F1y%%56d)yo;hS%zE$|>`X$#y- zKeGMEpP&hq)8jH-Sv$Kb&B#AkiwUkhl(;RAl*m0U>%fI}iQ{K5xS;Te#F3?_^46J8 zJ~_^?HL&&-ZDjka@lA$Js7sdxNF`ek!WTF}2znMIS{nr2M4-da8{rPJa8TKONA5#i zQ>*T{v!Y@I4{@L^xAryO&SL5aN|Y(V%?$;lZ#=RD5h|xwrN=_{RQ_#=I_huB{$A#X zBt_$!<1OvjXgZrUR;fh613T1IRLn3awh2r6-U(0#v3N6|pUgb>8-0j&=x&n}y0jww z%Om&VR)O%m$@Bw=`}J*FtHCj5RaYmi(%|8oBFEvb*Z~ZF?u{B_k2t*T_z7ksr_>I_ z9mD#?Ap;@R7`$2cMQDhb3K2A+-H1WrYM3^pR1w^|so6k3m;e_N3AKjnRa?wV0uBi4 z<-WMWI~=>?kB{7gPFGd!xaV0YGRnU#omtVSlJn4+Lc6(Qx%O0kr6Tnp%VW~t zwd^T$E{tfHQlA)h2HXLv9GN-Ux^;JVa|vjpywF$5ch zooqu_3nP-o+C7@ri`lgqnzfPn*zD54Bpy5nyGL#duFb%GTwFn&E}FVjTcANQ z6f(BjBvU=dOIvM1$J44=m z@e%@P_MiW-|H3g0y|R8Y@*BFd=jrVTV9aY?NOh*T+01m<~Cj=F@rTiv7xT4r-e&_grA8K&b<Q_X-YY27q@yuA(sM6oY!8YDNrat&e{B-%D50fuUIxtLKA zEL;pO;0mB8!W$fuu+()!!*g$TOK?q2o}|oh<~8eFcoFA{?D+LEn^rVJRFI&YVJq1Y zmaAV@B-6XY#6#b42J3R*=;zp|BQ7hMt&SjQ(|`UYGjOuIBP-)R{%#M#vzq69h(7)t zwsstrm7<&*M_2nT6MWLIckYchq8p#D-r2A_LHtS#7xO1=j9$v5g<{L zIEy{&^jGUaJQ^D~$Tmd%<5~D}v*!lf1~dsDA4yGg{T_zwRw0whn;JkkEb!E;i$RSf zV6s7RfGy$G8xuMoSI(7AjqJo31RKuA#=vwo?8CHP7Q4|U;WmLaZ=($QYbWGlQ>d$U z6(F-+29Ex8lxPIpV==%2+csxq$Vu~rM%~mr;ilLnU~maSFYU^6>K8bZyM~Bz#yU_j z@BnWGQ2WDfJAgy+x{9NJL-R@#M=Zcm5fy;L&4L8RRbXaS*jIfx-s;r3wgu(Ubt~|m zOTd@~K!0EZHM65oKpKPAga_nNM>Lh1M4kaB3*sk=xKOaofXJk!CXuScjS*L^rICe^ z#gW^gr_!0@R-9RB@E%|53`j$RRA-&#bH_Gkh+H~1_eCso1&lI7&5)%p=+Ti(r3i&8 zVjnGnN$TXeb>%hO)s2i#$AW(Ul&-keDY2?4GuyrI@`>LKoPHzo#i7ODb2~z=C$#Z_ zR{A+XO`c~S@B9JUMQu(L3A+xo_SLu)G&JWl$$9eG!Sgz(**xp{8sL4K-9q2#-=eNQ zHj!JwVD6jjg0e5|ze@}9Hp>P=n_ICW3bRL71h#2!bF}s9zn<@reX-3apY;z2m|bYz zid~XQoYV-OON&PEcAwSdnkp74QA-|MkkCN>3R-*ePV4e zW9)=7Y~E0RY3S7BxPKUS%Vy;vWN{<}GQd|pdH7p+j;TLyAr}DCD7=t{(N3TF-0oO9 zn^Ft`**4iNALIW&V#Lw1G1Kwq`sX?YzBv@wIimY}^o4%DyzKZeuGXbHjQ!vmF4ij{ z!tQ`YU-(izlv9_@G5i~~*;&Lat)vL*IeZ#geGQigbf$pqKqn7PP=Ob+g$TrhZ8AZ7 zqv9Lr{H|oXlor`Uh)x=~8aWoj`fLgt(A$u%#y)595yr5P!>@hnae2=S$}#H@av$)q zkR7hl`0I5se7IMj9PhPvukZsJnk_W{oJ-DH%2}7`%yByxAIe@|f8dXV+g}TuTiGLo zY}NA(t_sl90h_lvT0OhIHg}sV@!*O(vE2#S((qOmyx|aHgLtvNdnV;u@7|I4N*3YO z#rjZ*&?8W&$(4I~M{L6e8mESr;}9~g{H()Ymqvb-UsPdvmtA^8XDcH7DppA$5mjja9_Z5QUGO=R3v;?)PNNu+r?^|OU60`qYFb0k{Thd2WtUutzj-0ng`~g^5T{vO zxwN`^9eP9WK*(SogwVRpGmpKQClc4)a4+*H#L>*NkoUQH7DOjyLu@E_xj5$FTvt>^1g?=(uKA=qy zcB44ml7AC4f-1bR4KQWwe<}OfuG}()++)~Jvw!4WI|97A09WKMn@ z*U5kNC3YmBl4D`F?qkVHt%opA`at*T%y?dTd4$Rqy4b0J8fr)Rv88W(9%v0<|3 zv^#PGF9f4h;FXzF+Sr`+V3)SYW4%MH_G9Q}C#1Ke?kM^Tj+|j zow@&y8o8uw-2SouYIHlkT>o6Bz;z0gMuBG+{A^6wxQbn|FZ*UR|MvL{@3=bYgx!vu zm^FMQDk7oC%QgJlkl9O0mr~@jE-JZH&LFD^DTKPfkUG80& zPv*p`z01?w81Ag6cIsO_{%zE+ZH*ntgs;`hD?HxjDz@A>;JDBJ_z6y#-M4-Nrwqd; z)lum*1JFf8yW$iedsYp^s$#_07Q0yvv_ZJwN&> zC)Cc$Z_tDSEIrV#EKezEHiff%bEncZjXQ4sp3O~ zUhUmix1-phNdY1W?gNduK!t~N2r(NbftPLg!)jz@;bIDl*Q_~NfwVcTzD%Aq&|)jn%V0? z-P>)`dlcFPMLsZt6i+lbR58w1z15j!)A?H(?a|3?oeg#lbRqzt`~cS37DxQfluHTg znnc^fMhXy$EQIH%il$-gQqYKLMaERMhng6>q3R6!1Mq|wbVJY{u@Bh~Pj9K85q zX2;vUAke4TP^Lb`21V zv(y0Kg|c16jipdA#cnJ`)8^e+il)rDu@p*YZY-*%4gj%olS(6@32qef0ahxq#2z-T zlu4S)#A4&R4lcfo0{x|hP@r2%VatJf+rmiU*r0kM@*FeZlZ-H_+I4p@Vk&dM)#IPu zda|!vynLiDqKVz*hl%Y;ir<|rLC}=oDDF!rnb_2lOM34t%2cU_js)Z9HK(Vz)4%_1j*49_4hf+wHWJT3yqwZ zi8-5Rt&xB2q{xjt!FRzCmA`VRltUZ$w(vbl3n=BXtSP0s5Tyh2j39-p)SDjuaNCqK zRzza0X2MLLkwYp?WK?;aVXKJ*k>gk3slz$3;PK*#r)@Ri38+u~Daj|{-~O-Qd%zj)12a&EhwFXp$g6JHR;qT8!%Zgg;4Bj?5aiF7(F8~uCWB> zRe0A3dohcj^`dV559(Ct1d6ZpC_s0N} zFTgvcuB32|uVEeO4lLEWRa9(!_*=OE@@eqon(Djn_6!Rmd&D2 zyO1IPq-i8R*W!q$Q%r4bZH)r~si7vosahPlYp!*Uf($z-08XnL;%280f`gc2A~%W} z)&I2;g>OTAZc4q8evs3s1gxJnB8OtR%6X6Ld7YH&j5#8fL(&1OP`#rye_qN|-2Z^h<>8VuVh!It>n zzq)oNQo=!gnn)#ZBU!B1z)&B*%%0?(VJXxef8dX+IpyD4QT{EE-h!*puUf8a;4RP;*p{?Em>{5N_-r_YhV}kXw&62i z3&Ig9rkK2pFy5b8(k=B zj?jxI-3#6UuI(6HRLtPiW5J~looU$Ub|9{vZ2q5{k?fQ_&vI^Ci;N_NyJr6C;9FEE)V>7TR@ zp7i+#3(}8S&2@PyYn#9%3*EAV*m28R+M8oFo(r>|tx%2m&vKtQduJA983e!k33W79 zw*cUaek68eZF0AT@hYQh}BLM>kqIuZK$w&N{ zIE{9l=Du!B0AUwi`LMTGl;dg0+~z1;y=8HAWR6|z&cS0@>cPYo1iGvB$ClaXd{Za* z`1F^#T09EJ&BH2dt>8*f5RkUYdi^rV_hcS*OC;a=I6OlF3O@O@QjptT$rKFchn?JD zh1g2DVdK7ARrYGxd}8b zdfBM6qZW;PXXK+J{$|7@<-aQb4zhijT{i6I8qbgF(EmK#0fAQnzgPK#83XFlU$NH0Fu4l7U_h>Q3xcv zQn8*^sk}0;^316(26vtw*u}Uf1mir{n|b}*z`08bIy`XnBmfr&w*#;I!oZ=oUEM@s z{CGcb9)YkgzZM5l!AX@KU`K9` zHzb<25)+yoX*7ZIL~7)^*BDRXUeO4|eFZ^@f=i*SwwA4oT_`Bk0Nrmg;Rq>k5=yip z}aR!PXI3AjPZUo3;3BjSprlOHx5P3nG1z1*~xGKfcRXrQgn_1mc&>KLS0jEAI zfW!dU&73?taPHH7fvnDa^qb5_eSjPV@iKkS1J_;A0Ei#M%Gj;LP z=32o8k9beRH%>$xb0hK2hA2iG0TqGk5(ln-N^3BH#AcXB^lU(5W~J9ve%Flh-rbiE zoWv+A0;xBed`@iH{im`rvYNjC(ur*P6atz6y>#&6*}*ff^7~uwVtwF?##kKq2oR-v zv(LYsJ@}axt8m4RB%^wo(2Ch;#TX$8ojEZT8HUAtk@aAJr@3HAq7>EwR+m{uN|=s# zD%sV6I0u#*B!EyP8u=+O=|Cg;iOwZ?39m1!2v;&;6Tj|>3o)Lo9Al>Bd4RQkW+tpI zf>$mMymby#0j#br{v3J?{_ffAxxRcFps$FH!|8u=duHDuu9yqGK&m$n556Z%B-Yc2 zc|AXUV`bUDZtiRaBt;9RG}iv6M11oDfKzT{jLgWxYgRtuUJ<0$pi7&xZ8Ji0#5x+9 z1-{+J0C*z4UdOz#r$Oqdv~^^5^bDLn4qSe88i=+)OOk*h5#%6TtvxYkKIzVWc!I9D zuRY5M0>9e}8#v_x+8`~*4(f^?#+kphtFrw4hY_cDC9(1!5XB}KR0n~|IoGiU`F1V7 zm_C@jAl0?Lvmx<-cK_b-3iHQNij4XrLJXBhdzkYrrl7N7(F003}ZXv@ZsO%#I{2UQHGy znH`_>pZh=~8@bh_fl)Gj`?yj*M^vEq2M+DM{OTKn zXFeUg@F5_PGakOOCU&b5z}JJ9jv{P`Uoyz7lU2*X3;{&;Ai%0WdPUH=Sp}e)Q6tJ> zm$Xpb+ke{gr)ci%p7P4FHy^_0!cAB?6vTeqkGZ!aMy=g-z2N`>2!D<|2seW;TgtSE zTrRfMT>?(MDG|f(F31m6ScHEY#9p0@3dbE>+k~M<9tPBU5JESS>S|~v`nr)_Bi>81 z!nEVe)B)sqgw_Nj1T-Ij&4bCSWeLkm-`!I$1MwsDY~aER+2da*XVXpI?9#&P$otO% zv-)k5OyfXEhysino?qS$vhS2`fd7eXs1skbBlu!^g53ZdB8+_4|Q zEnYx|?D-c6nd+9#M<#x+T`}F|Jx_sQ&+B=-@)jADH3^(}9!4;fcn9`VIVWM^@+aJG zJ3#6#OkR+06OIQG*37Uv(2a{G7HNU2(LA-ppVz^lPq<)hO?Gw4sY?eO+bB4&K#mi! z5#?ZR6BM5#3Z;1p$>e-x0obq=wZ=BerqvmV$5IlY4tK9cv{jdLq5-Focq{iaOeB?2v@tX~rNo#bFBNjlNk*5A{3=BFyP-sJz9D%!}^~?B1Dq>$K@zc7I?0#iN+j zI{z_DWSDQAR#qs;o{JLKv6Kh=kzFpp;E4)$MQ5H7CD{RhDAb#8Db$cSey?m{dO z0@@$@m{B`Uoi%Xum>aL2!08z&QBL;MLE9Oer3c^R*-j%d4_@rae2k$sN9bF7eul2x z)?HOO)s5#eK>IQNatk88fD@BYR~*dd1eOJd$+AnG1O$0Zf|nVVDeiH>O6AGPKUrhp z%Ccp(=0unt+4BS%I4d2ioa)nhNJ8&=8KD%F9FF3S&0!cY(K8=kvR0Fk zLL8l@_WTshSd`veIZNpD2(M9`J9=nB$GOj!vkZC8T{7$>d~FE&dF(v` z;eY4wQK(sNrD^G( zm303+SF3u`N6HC)h&5Xe- z@1Tt5j5*GX;j6ExPeZStRG$W~-k?u9ZPx9X7=30UK33R)AdN|=Dy=;&V}N>kuM<1A zomA|6FfVtK3`*M2l=L$nOECV)$?hqUZNmVO0m|X3Es&ZWhz8ZxisXLinU#al%k54N z#GOqlBBZGMN#TP7Y$qz2)opHuUN}XEPin2CU{UEc)1>IBJu&*u0yYr9myoq2ZKv36 zlT0FM(wgyrpz!S#6;*W3OLYYkN$MFWeHKTiSB>0t;g${>UZGcKYf}($Do!3Hs@I6K zwW%C!89MRdRIQL7jZB@&V@h{SSb-s%_D_x4yjGGh&$=M(SSxLNRVm~rCEY?sBHh28 zplbKQpSp9PD#<&!BJ21l!$!DZ%2-+Yq=HeOEaKfDZV=*lDmOj9AX#?CPy!{zaXb1cUB(Pn+1-W<4stG?>L`k)?T(zK_ zid2ZD3>AZX)WIz|iBr0!UZ3_`?56@o5r&S87252uWKbjks796K?;_8W++1o=j#0U} z*qzhcDSj?q1MgG%W3V)S?ey@w2NMS_LVGpXoH}dA>e<@7R+(rvEh&(mtMO?=2(T0;Y~*u$ zO5@TwPN}k=vDFx+FVeGXO&55Y-5R=_;o~vnX@wnrsQ3N&4#Gt1(a=zX6mI|B3zZ=(pZSn!}J2TVg>d=`K2RO0Fxd>FWXnslz$Z(#nzC-x*R zbk0efz7)UFrL5e27nr!D6H#(w{^_Bt3boZa@dIa|*Y%);rvi#S>m2Lyd;HwnCrHUr6-#B;GzjsD-v}|7n9-{4#L)l&E}% z_Wlx9{ejE-1e*BucLw*94@7#nl@#$rq#>fsieg!{=;A^@u&f%|W>Lu^)>f>8pdcfltJpT<44r+A%sxqkAioMZ*j+Jr zwl9Rz-_F4UsliR!@#_Z?7q0@H(o6i%et}i!N{}ti4SJFpaLJZ&8$lKhzXsd1B5TkS zSCmh`zRaaHV4#JR#r-rUtAPh(lQ{GyRiwRg9+&VWL@J*GzvDp0<$44*owY4Ix|6tg z29^mKfKW2L=TPF!gNaLrF&fz=fcfjFi@OJ0UK$BusR0k1#scZzU6>7r_v`^^VvS53 z|25Rkpf=bWp>`&+J9mBfSHxm)-V9#28h^W&emsA9`1)a~#*VMUdk@6lJ0M>{ni(fS zmCl;NmD`cmw#|v3h|yj$lt;A1$TMJLI#gko+Y#Ad2Vd%g(FTB_G3;-NKCTYWemRER z@kq~ffBef=2-5Im6fUL zfyMezF&7)KYCdwU+X%@gDUl;0F!D8^Z2r#r`ue5y57vjg?nGs=hCJ*^0<@BPInKO! znUpQjtq8{5mi{eLfmFBP8p!t*u5|7RC=gnx>c%rI7ab#p=tX1u}D6RY#1(sWD=%fwp`j;)&{KG#B@zkzW!7L_6ReLAAxysBPgF zI#3P^-gR412}{7^N9@!}?}#SSk|dOL1o?{|-=1ReDTzcg(y_T62+dgci1eDmbh)xX zXm;8KEKr(yeN`#Hr6dYyhE*}C%HO)=pHi!Vc^7UaI?|SKKyCWMF5hjk@inB!M!+<9 z(JvWY=z<3f*?7;imL%=NG%YAD zZxo0s9<$pHiMbcB1)gBh+p2G8kmmik-j zFRbZE#gS~kAp1I{J{3Syf2V24cA;*o)1+rmcQ5Zkw*VJ9`Zns?1@NNBeH3L^cZgz? zJWuHx@+CC3rlG`Wq`sYu2I=DH2;O9r_;s-Ur)iL-5Ji5hNrS7^92p;!sL)pi(+X`R z=*BYJk!EVo!<(W0)n@bGH2dW@93Hm+k8jK>tjAy9{`nRI-(uif419}$uO0)vySlQ; znE6H|>%CE%8^>bxytTYUVw9}L?XD?YMTRx;f}@M*Xs$*hyq+#g5$lKf`YNTG;Q<{Y zLx_^w`H9%aYnII4G+jv~_Rq*|oc4D_fu{W(k)dgShxs$@?@KcL{y>J`muC3=!3@7I zGrwzvgb_8l9Cf=EJU#o6X<*%9{1U%E%@6X&jbu#li@pAiM7;I4NU}2om&|d3mPtvZ zJlpKB&?iXRHVE@TTgGnh%A3))ZD-w6*O{~wZXtB6*JZmFgt~!pNi+X_*}j_+t@|<5; zE=HqE^-lHDf(OcjARVeUQieNj>HJcvfxEF4s-Y^xm6nz7o&oL7?tS0u3J~*utvsvy zYhnJkSS*OcMXCW2QevW*ain2=D+LaXh4UxB`%mE0f|atj8I$MOyy!w&1%tZv`eUjB z%BYAW;Rqa^puuZw*9t!&zziEq>xfdcZ)C+!VxLT2rXXTc?*B!LGy%(ahM%P%UQ?{z z7*^I(sp$D+XnSJ=IkX2O^}2E%$hRZ9^+`ls)s>Z2Zb8_}y6{s_pBvMS?#-|PPa#m2 zVg&bTb8Wb*w4v8xxfz+$SGYQ3LhYE=jAW(dNd7wZWpKXwbr?MM@)~ph=iE&b{*MWV zCQKh68h0k=A9L=_J{tJPz@DrDyfXSfKi?Zbl*IyfO;KRdz?JvnhxQF!{~Uo@Vwo00 zlpQ-pSstJkbHs)NyVcOSkK*UL2CjaLs5=Spg0V+>8n|?oIy-t9;a>;|K}0Hr^};Py$n~)q4kXj$)m7}`lj$shuuyn9FZfn zNYOnvL~qtX(O=7)l7cKk8eT7K2BBEIPpE(fzfAt96hTfMMR|4-{qpnJ%K&YuTLI7v zYT{SFfT>y#B(s4_gC0bXLg9x7lX~)G%H}X@fgTn!L{TM9zCV2IFydsSKWz+GsJS!t z3ylA?TU`{GY@vokD^i|ERn4EYDB?MNCCHKGrv6lXT6SzVz^Wp&Og8fr&95I9m%fG` z$c`-G{a!?%M7p~ay?^ba!H=#eQ#c$(E?yvm^6@M1(hygSB%5+lh}Ofg7XjhY&WfV! zaRQPAIEU-jQ+QeXE*0>M`GaRr+8e@qjWktFHYucsI#8I5N*Uo4Mo6WJUY0E%6*A-# zwiE&9s(aGcQ}`QLQj1g9A+Bf~|4hNMyx{Uozfj9ba&-9L!?9f>!=DT)*}C_C2tUZd zeLaa2AJe8je<*(a^}(yhfHGoymkx-(Lj1}H@k2)j``~8tCR}vjaDc`LWCn9EjT5iB zgI7NhUjz!9g)7ef4-s;kxO7G_A_tyQ!)Gohb*!1^w%AU9zr>wZ6qqYG_3%yC`AXf3 zAy!}{gy?sULZ=XY@|$OL5vq1M2vr3~RbjB$Fm1@cyIltZZi(%{XbX_bK#wMp_RqE~GXPzd}l+gUu4zp<*D-Dr3ta zpwW!t3;tKHMz&B9X1xyzV^I!+eW9pTj&Sl#Iq;4jAWV?__AXqVBR+7_lQ_-LGr`5N z4@n@<{(!)v1p7;4;BM%`nSsl_6!Xau{X*^XuEAI+)`qp2)m2gyc$`tz=H=eO(X9hv zNz9`_R?51gMFSIYNd`hmGGfxe&_M~qtAu4+DR<~-;G8>zZWaRgWguIlt$F zr~qVIs-`H!3%!!vZCKn%fX9c z#CE!zp&X4%_c&EP)Qy2z;YIF?-$91tLz`CHTsAxkq=2ypwsK_0FJUj@^Nvz02u^@|( zkc@i@Q>U$g-oT=@w*lizB}X%xhz{eBia{q%=XI~6(If0#j+fz})}T_v&_bwuA`oY3 zEhy6juZLEqnCEIu=Esm3479YQXoKJ=apj%(-YbL0UmIar;Hu~``EGaU+$HrEV*c6Z zG5+e6_^DH}04A3Rt&E6}bc*UjLanTOXz=V+B7SzqMg#a@N@GJsdTo9lL%OiQeQr(B z6TCDxUy!E8=0=?zjWMe)0Ld$aq-l!6iEqILgYt+F8oBhPpsX&|NL1|3EP4V`pCD~y zbV(`|C5W@jDc$?5G&}qpKAEN zdgr#UMb*1-jJf?q^jqH&uBMA)Qex@!k&34A*RRagN=xV(k_z4$(?k_1=A*$8^`gAP z$P;ykR4UD+4$kZmX!ie2RKi9noLpr!qdGHrBIKW^r%l>bTTe=Dp>%O%t*lr=YM2g3 z^!u1WPss_JL5ZCVIjnsC=s6qoO{V$)rUavh6y)h@>Y7QGkG&hS4ty=!;kGOvEs)Jf zl_R=5m|nfiYvUmI5`}#MD0}pHqP@_Xv`S9wt}qn$C@v9VTq%Rc>gQ7?QdlgSV(p*tYh zM{wOv6M*Z5;5x}Mxa6aND?qD+-KKkNAsygJ)QE-j(&xfWO}H$OMw|5@3n^DvO9&)9@wry9E-i zmCy&nOqZU261G#hql(B)=8H*`|I%(f8ACcSr|m-~PB!#E7x?j4&Hiq!B&sel0{scJ z)z2Yi;p5?OD{i9O!=eKmZ2_JUI~Wy%l=v6%oPY|rKH{v<3tt*P^h+pjm6<6Gln!(r z1DARe`wrm3h`V0=)$aJ=UpZzj%2qhXK?oQETsc47mBjw*Pz6GJh#Q|I?i@V+IrJW) zTf`NJBFI?Xs0Lm~xj1prtE>yPLLngt!qBIN&VO!qR%+n(#VK=oYLneMe(79%KiMrw zamk~|xN58_x^S-s$AC#b>>#^k{OXm&-q$4bP%ib5VgaN#7!*K*S9>H}7qfzCQ1wNc zYFJTZiAXDNz93OwdxZ44Yd9#(_l)!Wd%puoNIHnP+JUP_VQL*lno|`b2*r}idVEUl zi_qP~9(UlzN&M)84(j;CC+}gMCn zo^?rg&wYOs$;cP@l1-qd-NBIP$4VQ*x;kLUVYe&}Pu1Wv<#6Kzge+vJq@DB<KYbs$g-!ck}-)|4;LOlmA+NH2>-RCHdp?{&U`?yn}fg@|NUH z&HcOFKg@k6*UkM&?t{4#Cj7~S6BD+N|JnGgaSb_t7`Tyj9YffEs`_TnTe>ta zFR%>QX$W^T201pj0{Cf0K(C?mgV?;ybYxDireNaGp`ja;?o`6M<30FH#GJVF>%^(o z#bj}_PH6KDo&N-p?Smh~?spLg823tUUpX+aWa=wRyJiLQv;JFnXKhnQ9T$)^z)(@< z=e!)hstGCVU`|FQ7|L*qOtEc|W>(^PNa1AK&Lc2ggm;F>(FNiJu+S7~X_(u}dT#YL z3kM|Ku`vnj7NJT44m6Q!FhV64Y2Xgb^L8lgkyW4acr)0P7dH(I%HIMeThfxj_^}n9 zOk}pw&=aN5@L*ET4qiDx2VPFy)pfKYNj@(w>Emb{v`K#Kprj5SxOz~~DmlOt2VVmx zBj$4Dcw%2~d_Q8jI|sh(Md}Dr95NBcFTPKyqz@gIyzayOHxjSzlg2~u{7QO2V=x@> zXuC1&xlqB$DI`Z2tXKBv@)r20q^efK@fjlhlX;ixPe?`pi5mxmIc{-ZSpgEB&vkQN zroFHwOjwGvJ=WO10c*TUeXV#5Xrd5RgS)zLJB%h+WJC0L5qU*B5Eb0uYz0b@rkeDc zL4YMdB;MVV_)RYob^!YL5d_MAg0Dm8`x7TlQDix?`hL(kaJ`?7lY>a9(V6W|?JLEG zzpr|CO+Khp6WzK{>%$vxIL&d?K1FS-NJ9%WxNTw**tL?lfo=}Cu{RlbC{3yQ2WKe{ zAr(<`E7$yhB}U#SSWUKc1jWZcJqh@R&d1_CzrsE;3)|5517buan``obGv=3aDlr>U zqihM2M&2G*ktuHwMK;!WB&ZxEgSvqLIOxpln}w}9eX9Gi8^u;V)*fn=-1c>}LD#~< z5r!8CkD_wPGMC~RvzEWrTOs0$l!F!aN+@_S<69vsY4fI;j-e|xRR?iP}U)$iY4+XuOU1QY6; zh`Hw&$U*Y$5A8n>k1wF2bY|cE!1~NtS_|0gEwZ)#5h<={RYL{R#Q;C1l-PW`lg{(d9j{BxON-P?rkgx@Lv_v zzu)(LG$}2TCd9<5wyI`C78TB{zWdN%k?KP%oZ&i*f_y<%N7H8Z-HUe9%B7=5%o$s! znJ3R5R>S|i;`=lDO3-Sq?yZA!^lv~ma;vNR?(4e;jb`db$wS?HZ(lJDRU$)~ORu=e zR+KF5yBm*}E|bULwWyB}YT6KL-9W`o+sT@u6VUj6thlGNuLy6JsyU#DRY$04b+{!8 zFCSd)ye}2SKj`}&T9zoDhGYi+`s? zN{>(j`cQG#y?u9}#VqwUh5c&YOx6AFbo#zSz$jW|<-z)nc1o*_0&zrO72hrCn}Q}& ziTJR6qHs8nC)M~=amPJXL`HaF&M)JiAX#PE#vkX5#cdu>S0F1sBT?Ygo&K{j5l*a7JGqbzLem zGyLjVlpm^6w)BdE^1fU&ny%K~V{y-hpr2M1${wa6S61ZD?VEtMm1HLrO^Vcb+(d@TzWeo;@uV0i$Op9u ztCB|*?vtu9bU=Kswo6Vhz{*IrHMgn zyDz!Q;AFzj;_yZJ%ROI=a8oplq7!XlefaRfppsgh_$3Jy$nSpjC^GTj92JYEI!idS zlN=<{9;d8$r@$|QPTAbocVkAg=D8j2ra)fcFUVsb+=pp{(6y$HZM6Ko;-w#w9x0}n-)wbLvL8I+|FIEzl0?#f3!2)xg?Mu_=^Y! zp+r|n5fghABs@hwd3eLhF(A|5>uyw#tM6zL!w-vmRdzYG3Koe|Agyw-OPSxPh1R^8){+F1)3qp&EtJ+vO(C zORbnMJQe8y7gcL(lt?7p*lf9*i4N`)+zoqug&OOkLAWiEbpK^HDctyOCaN|}+`b3k zD=KLXp87_@>=?aK8lK4_2F1BD&U`#}%d{t3< z^YmU^glxp%f}|X4br~!uEUCy*=ZA?iUl11EcaWY8@BnA^{b4?7aAnF5{EdaPuNq~| z{dM`M@K)TgK9C1h1-bS?RIpBB8nBk6HO+l-sI;K25hhJnSDLnYEhxo8REj-z7zQ>l zHIqSaqWiu6S`4^g(aR0?fX{>*pixC}v}z54`9&CI>hHuQ!6Mtp(Vtl(zQ7AtR8QoV z#n;pGuL?6CI`_`-o815fzP%|!Yy!p$clB=}z?M~412F3FG4>SFawAk{#1#BL;&5vY zAz_n4h0lX%lKLLbqMJ4;aHsT#Xc@{oIs*ATICe<;)>WZsW0XeqzUkidQK}b$M}CS{ z1@=IK!h6L)FqU`n-K_qf0;K6Pn{lvV8?|+al@Gf}eKM0Dv0v}a(ZON0&vUo-Z!Ux{ zXNg){h(JbO> zU)P92GIS16)CdASAVm;aBfx+T*O%P# zVLpL11aC>YLD4}<@PIG~*(B&>;QH$zzueB%{XfB6@0;4$(3y|9!k3n+2f=l`y`mD~ z7R;(qWI_Abdfu~iZSf>TT6D`g-3N^b>nQ9CD6jduGidq^K+S2RiWo3xM-+RTZQqJ%7{~ksyEq{Ee zVv?(Mlpamcd|{q#0{GxNg$N>+G6W6FbsUn+o%RIzE2n!}#&f`9Ms0!x=hw zF@EUii1Nv^o_zAxU!#2DF6!S1M9!S$E^x;~6LTShB9qn)HwvgX`Fa>aoE}{jTj5MW zY@dY|XxYK&5jaA1P9ZI9rOnCQUdNbGoP*kc!QpGC;m41Q@$hRsW8>#AqC`BS08wr9eu zYeH`Nlt(FNtBA?bV4J){*QL!(5SfDMI!@tPV|)7^cV2%rpsy@(C%KaddQ!hh(wcDF zvvdq&Lle70_UlLoK*-B(7v#Xw@cp zs^0=p2rAKxFcKO!Z-?nT=zA+8Oqtr>?H2Vv4H)JvfD{K9C@60YdjzOkHo@ZiVH6;x zbTSICQr{`s(f<@6n_kiYsoRF^Cd=nd)$4Oi0POzWi~Z{{@~o-bwn4piAz2ffd>Cs* zc2Fy?Ic1}k!Bd95N%N_0cK?%16_E(dI~@~FhCpu>+#@I&7{rY|XE^HGx)d00`odjw z|If)@pEaqY;Lq{Tw|~CH!0lk*NP#<*f*;RL#9P{KmGNUEzrx1ELa z7tZIxPPgOht*VHS5oMw*Y9l;Yg{p+K0d-FNsD!<_L-KF;u*1l#pe>H>a@CbuR z-;iQ)w~QhH7K@t6l8aGh)Ct~kd9hp!VJKq|iN{5pqhsda|($k}_V+YbPtiD)gyZ+Bp>bIb0#x?6q=9cnji~AB!yd2N?cJp{bvMMZd?V+ zk{z~}%(on}bszHYmdH*q`6pEfvRh#W(k27+(pDlmlj;TuAFw;~KKm!#+R;XiU?aU? zCj<1?aq~KrPf=KbLv=b!`2s6fpxx4{UF7`?hIQ*J2hN7zgbb4y;b(Pq{{dVw6^qTP47cab!*zx0t&OCzI9xjJw0yhZcJ7>TJ}@gEUWGZi@U zIL>I@@H4(Vc3EW1XNs(r&Att%u^De#5YZBHp7{f#gt$Q&Zff?V-3=h5;4(17M$!&L3Jx2%+z^}GoO99S+#FPaXqVwX8LnacVsk#kSmt1o=BgQYWOK)m)L()>amUxMRUv(y;D|k$J)(EBGYd1 zJOAOF#OH-wT2+A35F>7TC0YMEYfA5wd6Q2}UNGrbla@`qG4YAQe^%7|BKhJ%5!v8X%bo{yTv&Q`}=O@|!Iq+Wt8}ZsV;*UEiwiZ4H^NQWV5FA}5K$>RX zSklf{k$IT^V!c13D~;=lG61M#FGeK`MXc^D2!9(GbHtOCRH}VQz;}@HtFT=N8dhUS z&U1@nj{%_4Vs{#O-WY%~0|PxeN|QFRq019)wOwM&V8ze;D&E~q5Ob|A8@OC|TkKIN zP-hi)2HbfB9ed)1>uwb|(J?XP&}y^tntYu=;cZBFM-B*KvTu?uo3D*Jl}L!=2;eXV z!yhTVNm(2etP1$}oanhISuK=@J(S$6+a9>|IhFv40SB(UM!M}!48;eS4uRfs&GmGnAss z5W;x(C$TlaH3(s|yM)FUgYc~*TfeVeQz#xn!K^NWvywg9_5Y%`qQo z=SWuJq*?kVnL3T6d5&_DIqvva6^N*O_U?`FPn&=URLj%U{tS;aHugZ~pk0hj0h=b6 z2+R@WtIw965RBbBl+B!;!DYV{CRK5lWS!`?&tAS{^?;I!O#F5{o#xFe7KzVIj_Xf2Ci+73;V^6$u#crX*wJjdAExNtBv6eJy_N5VE-qo<;!p zn-X6GT*Ij zPq);Oo!=2IiF#WeEtO%!F&lP1n5)A$?-1nYu|2g*2b za=W|0%@<+F(h@Ql2YP&#UwA%ZOQ+cE(;&|GTFT%zec{fnv4sF)X6d?(vdGmP^+-Mq zi-K>dtEuKYZNMMRT?b8%Qx@fB2s>mS-k>-lIzMtq$T$bLyB;d?duMYyrlazO)1Wa@b|u#X9&*lCxS3=h40aVG|NF?2e zhib+$OIyl9FuVBWe5Wlo4}H&CP-FMaDhW>^q2t=jSSs>O=`Kw832s$b6+P&_13)c_ zO345G<>jG^C&k$t6Pm*I|Ex<{`8DJIJO24+^QY&BU8ST#JN$BJ)T-T48=A+g*%b|% zHcufslN5=5+j9DRVo9%jo!YYJB$#0rQu;)8z*GcVDh~IgqCAdy zlYTuY={ZGhr3OUqp3#kFC;8DsEt_vfS0kBUQU+pk+~|hlrlw~-*n=s9nO{-{tKAi% znBq|&ky<8cs`Y?NQwB7@cmrlkH(Ca;o<#HD%BB^X@-5M(M*O<{tZ=zwJ zepFxjmOBs2+ODiI)HDZiE40pY9K8$%y`uB?DBag5JyZiKlqS7L`LNm{xRI_s<&mnm zobtqHmC|KTXegg~sHdju2gE~;Ecxc}5S3tXwEV+r{w?o-D+&G48^CZ1vr)`1-tJON zN)zoU_Vd38-l3SO?YN=QX7dgIae$d;;u;xv1_}1Y@m}g(o3FvP_9kmX*EhDq$%N?s zk;e95Qv|*<)>C$*r#$R-c2=F*&T0qSp^j>RhXce!ue7#?>pBZH{7A9&brCtsI!%HH+BGTb19WM8NApExXcX0#57u<~1HWciHT{%&uI@$B#ct z;=be-Deh~@J%E}lKQ-^E%6JJ=gR`0HHdSI9FJK2N^V2Hz6Ro(<-%K%pEfj1#D#t1) z6GvTrPUX0ik`TUZzNw-Yv93|?H*QSPs-wzzjEt6?`?-vevs~dw6D)N_f6_xlPttBa zRjtU|LDbT4TEAUf9%%-XrWB=r-nJkpuO`EqI-OO?O}^6Uq$EuCPMMp|CdnpC6Y|4q zCr-vQjZw{7=&a&g%Jh$-)+D;pE`~-_96g01K_8+$l0>q)M!F!w9S4@_WT6YSGa!mt zESDyPz`r!|87HAw?#zf^`~cTZp}qTMgU(3mfNcSqGEqTuHHU8ab_|V!=wB|ZLCI&g zbH!9x?1iH!mZG=+_8{Bt%ItcfHrmHLZ!?)gpCwIZRq|xUfFgU|t8RDR#N$SucM47I zmi+(sX61EGIFkK81@8T4qX76P0JLjX=kHQ7*VvAZzw&H1lA&7k*ZJ$Fm3)|rjgp(p*DW0wNPe7vR(Odeco#8?78CG62K zMfR26`&j2%TBt*l0ySSb`j^dHxZoBY{hmU3l@^#R+CzedQ6oRid!s`ANEvpMfpIu< zDus>PnQc?kM1&LCk z-L9lMvU-mslW$r&+JYOcosZF8{>M#OfAdxE<+<}0&z(Qk&8&30A%qH0I1KG(cu1mP zHtH7oRlI4hP)J~$=EYI%X5Z?wltYBy9ya5wOmnA7Kc2`)#5I{=%A7Wj(AGb*hts#T z?_F)E#RlGuhGB>yOB4a~{R@H5aPn#2#nYf)#O_*-92gFL-3UOtXlcDEQhk0&@O#RvtA0C zhrAy~9}Si%NG^Sh8pWO&Kv($ZU~YaCWKQ|nA7N)rio2R0e9+v|RIWRE7gsMLkzf<* zd$ezzx3FB_w2~w<$04sKcC1GNUrHjZzpYSFgrx7F$Scz>$w^ujVxZhP6n%!v=we;> z7&lWzpmZ%v6ZPcRC~RqhUeQd3Z<1Ws&O|{4;nE#UcI0mAXcHeMjBLH^T_ZP%80uT} zF$=sYfpuC>vcOU;DE+EtNM_X-g^C<;efE~wf)`mdiEPcqxm88cnTSEc2LkTkLC{`i z9x95YC%diAJUuB9fh;+-p+CXqP-~g2VQOWVDy$+>K&9v!Zb`jl6!|hR{jC<9|FPhe z1`2&dXcp@9%lwXbP$=kAIxsOKhKf^~cw`~{+L{OY1-E-*vzAUnzhN#jgie7&rlVl0 z;uL2LrH$7aGw*+ie+;q~0sRxT?o=-=c%VE8=YS_rTDxK(3|h^;a7h0od`16kRUn*CBt&D}-lYv9`KX-$Qf?iklByf-#VD4u z{Qj31Xb9(;+IOd|Whqn2bXO+doH?9kR<6nr{|yiH8=S>&Qn!sIzROm+X#k|#kK(zi z)Pp(Ploz*7XyW;M2f5;B6E1OVibog=GWWnHZ=516orTRm_3osg_WFoL3DNdlP0*wy z6O-4TuBwWWgUCtu#|{iW(h@>@j&o2iM}4rCcKICKg3_-Zmh>mXwJj`-hL(^gvo373 z6d8{zo%2EFWZ{l7KiJjq(w%DxY3az>tPcDe0LXIw+d`$%i80UCoJM0-fA?`7>s`dT z5UbbCJmn1WFEeFY3$2*p2bNL>8i^#=2gUl58+zKCl=Yxf6taGCU~<-!#gh+Do;L9x zCZ3sicj23bcNM%IJ0CVSETlb=jP+;0rgfQiok1BRbVvM`omh|+n7Q69MIpX&D=Dy?5G>{(VIDMb?YkbfDxR&B6cx9fDOgtFCP{)#3{q-_ z;P1HEdr{#jFs&*~%hkTMqj?JjIHd!hen&|xP%ei#QJf`3RjVBJ{Hg?_Bho!88$;!& zzP2ac{aK=yvKRvd6JBlNp{BScdr?a&Fz?ZhMuGx%iEXM77657AnhqKjPb~06q-qw$ zVYP2HKzO@N_UR@BXmQ_^irU&L>Zvny{lj7RbvQ2!T|XDU`g;7__4pNvh@b48I+ zkeR!UYp(Jq(oTn=pwApds1^|6Zt43<;RnX&>85W^bnn=Us$PKw<g~>b#ScX%l znY<~8sqfzuwluF4y0iA8d|2S2MZ0%14l9#@x^)bu?dhg4Mi5DqW({{2xP^OBw=6KX zoMJ=EZx46LZ{HNElo#^d@9iB27KpqjQ)xAka`1@|ifA(Z%O)U(A*8Q32K?0IRIH^+ z5Gt+{`9txVgu&AZAY?>YGtgx)&MX96WcZCwa01}KLq;A|1Ze-Mp|0x)tQ`F0OFL&n zo_p8c96&Y;G29GU%U2Fqi-rr(9X>xwxN_Zzd$R%8bijpRcR8m?0QLdVt12zQXckImq1k(iqK1fCyS(A^PIO&GYur8@1k8`tPsF;Vz@A6Ha4xmwi zKn=%6v-*rN{5xlN>=(43W%g==-97*raA3|jGk!Kw-s}bd(-ytZkWUhux}l_z)~c-B zHniHD1gbsK&;X68WOm_WpF{#qO;k^mh{R6up1r8uq4u!sm7b$!GmAKfb9Q6w=YXSV z>iYG0`Q>crBvIT5)Kq54;tFOAsw*K9#+&Eq!{PH(k{+L#TcF?088NClH?yh}$(i!= z1N*mhAk46Z^5936I}GR5T^DZYkb;r)h*R9uRN=-84VC}VCYmiWN|6AK#M}-sOWG>k3()Ch-c^4g0fab=|a*)Az0)cZlLeEPKMQL>) z^`xB;u+$QJ5i#i{Rhw5J>(BmBOD!syaMh=3&MpO@sEj5+s#K3a092TWz@-(33kPy% zQSuFb&XYqJS4VKT?=3{$4;?xYKhO^l2Cg3%ynYS?x=w5tmSq}}eo#$~z`RJyGvRt9 zE!e95A#$VKN)`G8FuXm2tc|kcT2XcwpOHws1|jhD-UbATHbAS22S~Hh4nV@2f`|Yc zv4NB5-51~gq3>RyvoPhjkHvNZ#*)X~x$abgk(C)#GlK^tWWqtnMC zA>=Ee3`zUHNbGUt>(HK8%>^m(_A4L*6z>MQv+4eSZ&rWSl zE|^c})S}sq>#Gx2kHk;Dfe*v)9z;SGkc<2xj=SXh%Z0A!Uh(Q)$zzo`v4^m+=Nj-p zpMjP=*9I>4Lg6YIqeb{J@vTsVB$a09CrNcTkKfap?@^!JxT|JICdsv`goLqQC@dy$;1(8|T7b)v0DK z?7`B^PZTr428L%_reHrIF}Bo>r=7cjS-G&lD5`cf;xdJMI4lp1FOnauUGg>B zf!z*zR{Biz$!r1}vX*p-q_(6A#`;^hy;e}*7Ix+U?%8gmz#V_@t;Fd=azX%PGiUmp z86BRIw>j6B#}fNsgjf2&wQFQ--h=68lMryGkE0&J`aAfPio0(G``%K z4QN)l6-9v_Z;6pNsdg*r-yfl}uBadCT_w%0syu2lP+2RdA0k;%*$O$(3{H`oZR6U< z8;Jw_bmQ7;f44ssgmiQU7=qa&K#=(G%)r$f(w9SQJWX%l2}g&{b^=AHREEPsxV_d{ zd0^|AyVE+en1FJNvi=njkQBvn3^PNyH;;y-4haaRt`RJs1$Z2QEmE>A!Uf(?`_8LY zLPh68LDGh`Sif=&H+2MJ!>A_?Xp*H_)w|g)?%nRo0C9o4TR`hqy;0#qr6*2@0W0LqRtjMNKd|I`AE6 zX-7&Z;!5r;cQ>Z8taA#c0!Bk=312&><{=wW5Ga%J_>wdP)?@-8J*0%ti3%OOGxVE_ zl6QwP>u|?vPeVF8`~gm8*`$Aa?YI~3=SU7jNs>5lr57my4bH#s{v3eL?VMDU^&eNk zXA=P+tsSk-6A-A{HV{%Mi6>Z48`5DybqJ0Hi$)vht9Ba!hOMcxB{oLDx%k~Jl*ob< zxQ%#ECn$_`wAIq36*U``NLPo#(vb!*wVk>P!z~=<_=3va?n?l0whN;8kJz+>pY4xd zyByzp1#u}fqca5JcZ9E)23YOEUw;|@;8^^CJM_h8`05>IU-sY-9PTD@Sq?2C4VG9Gw}Vxgle_wN z$+PZutV~67QPywC8`!aA6;qxiz0lH1%{`d~xM+l0&#>c-ZU;JEunQdzpZN{uA`%HH zdO_qE;s;b7lYc>~Mrh$u6~Z3p%?x{nqGVjkH77!-G_uZN*=mD#|2 zD|c$vwtzFD7?>*Iyh$HSoO+n9X2c?qWs^eKaLPz8HXmRih4?0E6B?1hjID!cE(_Z3 zMj4_zMhQ_WKyq53xIKdBkmMEXFRlPXue?R&`rcLvjLkJ%FfqYx!?^R@nxd?eO!2fL z8VmG;NSC}&xJE*=?9DEUqNug)9c^J$RDdiRZ4KAzBGRxWJ1wE@jSak-eBKhBb2k=q zWTXfJcDgSBkOl4v0Yt5#h8>V3EpPl%SNy^rGr7U5ujB6F31-7*zChY$Lc;lLLnx98 ziSM;nRi~V{n&mVl*_ODi7<(z5`hP}q=9APR8c;`UrN<7{$(l4dnv=SH(>Y5QQyV3+ z_=ExbFjRXV_1;M}jtko^rzO%Z8N|W-Tf%CuXS)#w?{NW75Fv%x<#aP7Y;a^|Z8x*9 z^Uev(9~iL@y*YG#_Iym`dvR~>{aDNO722!Q7cEJP!^q+B;-YdPNm_WP+`cmAepLg zKR{jzY)`?mz8nB3bZt6R82*9V%y+`MJU2m}a2A{J_AGoc;k`z9eKVmUC%pbe)^ZpS@?B#&D7>T^m%NQEKRt>M~$pe<-L(0msmY6}!D z+la>zd*h;_B#l7t1W7X5J_qG=x6!*I3(`q0LZ6_O?*DfLzLz!mwMqRGPZz#e5YC^R z``g@SapY>Zl1;n05@+9nu6wd_1 z1ZpMQ#c-9N*p9ML!Nln!kihKfwgZ=XQBjz@6-R&fTlwUmp}uY3(VHH@51P;Epya4BZh6;94@6B3X^>&Jm= zM3*}tl0|lab|sq|$P=9f_1ng20ZOVw|L2JL9=h@?QD>o8`LKH<4uR*FZ^RG1OZdCe zk6mk0SmwC7-7iu$-eNZg*?6-~dT3)z@?Tc*2PN#QRb-Vd-4EIz>x*Cq{)WQQ<_HY} zAOy*qQ%u&;EFy6j=G0it>~QxkrkhPQFb$uy=tiiAPy$5lpp8vPX+}U437s&zw#(fZ z%QtZ8Dl``HbC=~pYU($e5s7TV-K2pmecXN2ot=j{dq>@>P}}+~!sNjdo`MoI41uSP zyaELXMn#S9g-vsu_FWK>`FIOi^y3{M=oYOY8lgaKI|!{YuKg4sZt(Qw_f zpi8X+<|6dCp0pvC4LGJwz8`VmVgbI|Ow`tnLSq_MeYr6z8IcAsJ1h`xfIPPvHTg&z zs#Nbg3;hXg8@Z0KJ`i9-t%{=>Kv;VB9N|0-PK(e-wuiB&+R2eK=&Y@GTA<}-eTue1kgpDj z>$0{WbKGC*9InpoXCco}UqS8(g0qwl(6Ta%g}yG)CA0c@|(!1xn$S|_^ zm(T~Hig-H6^aK;1e>vE93IMF{?%*B!cqO*cpLzUOb_w&2O`2>h0WxUIY?u(nBCfrO zNH)8>9TuzNC1gEZDeNxYHmuYK3DF#hQF>D;4ypE)w^2zh3yP#d8^y@X%nkvA%^;?9 zF6@rN|D&Y1b7p60Ab%xpMv)DnhV@&11}(_woXdQhKd3s`?VuMH9clmjfdeHzhGF!) zKtwg(y>V5zovJW0eMCWFpxQR1pSUehgjhxxg$Rp=A>z>Z5*Q7#fH-jzz|u|btnO|D z)+(oVR&>q=)+FEkDs$0%q_GK76)Bk{r8*V5;lS{EDd~n94&>EE>41#j=SO4a9(`Vd zP`{JR#)_(NeLdDp6bvXH5^0$mX$`&5kw!iMQel0qyCtNK1Q@oXTr`GHz72jiyyp<| ztk@C+)THVN@4lEgu}?HtiT)n!ZJ>2h=N;WI0Id&A?aXl-fz}LEajQ7Z(47yVUKUv8@(m0dENTxdp9N5filzHr(%6F_L_;EGrC)Wl;V=kMeYvf6l5A%#Rd}iH;tXN z?Qme8X?GMkThKbJ`Y zS;(20xb*A9sn>CvjdvXy{QR^Cccx9D`$Bhw_}DTx>{bCw%Ch8nd7FHqp{85Hn(A;j zk_^?cs*p}w;%!PUm=`-CI+~qwD_=}w<<=GN`hB+1dE^-1>gJ9|X2v!-@TI$!u7iC<-Y=g+#EG5JTQ zc5duk0cK$&7>^BmiT`hvWsKOV#W+&VII;@BVn?SJthlY54og^bOGJ|lTV858M@StC zabbVm61Cg}Mlj{Xug`$n3JoQ$z6G%--t(#4PsDI#=uFs=7Rs&&2M4L;(f$9ftUt+` z^6=#LN&k9M-o$9(9~S&W!GiqP^8P-rKKE?y-4hm!FU>i_znN#{vt*f zhGoTW#N7zDo_Wd(WUaPQuAv;V?cyj*oH7LeY}~%UDM=S4rZ@Ett_|9-sXQ!Ls@{eI zq|R0-ph+Ib%>hiaCZfGm$ep<6kq*+hvXBEa13Y=!I$EgYj@-_@wrsUEtp~0iz(EWO(lZOf0_t^w9O|bR^u^i_I?-tR~^aIxvZuC2pZR z1uizhD4WUI@@`#Yp)YJm2L`jv(;e~L|PH{OvOjS`CNr`HjyXo zTPQW*k2G-Y5|klQ8_~v?=m`MPot?{L5c;#1F6x}tnL}8kq9o+CKz=<}<@6Jb<1`L=wP#^Mqfc!$pYd)x7y7d>{<%05@hFC((2Cma$4m{_qUyU;#^axV16J^4Y~p+!`+U zsIYV!H(dA}k%f_T7=#TXgvQz=>0D_fpmV?-2PdudPEc-v>MVTktSA|X0D6vjw`Ki1 z@GyMx82QEN`=Cgin4`H8Vw&G^3uCQN43reV{4(wBr0X;MH*n7#^`%eWos&b2ZhBkP zFHUhEia`v{erT#Y&7DR7Ww>~VJTyk|GW3<=_kUAxGj%lC&5yMJo5dv*M?o9Qchwmq zxav|dW@M`OCb=cCW?I^1SXuyclN-etfzu-Xn4!}zP6T*O#D-?N3@uX zdA*E%U9EQu-PN&e0IzZ?#EV%(iJ27#w?vGYyBj;)BlK0^u8aK)^FXo0*)CK)f#8VZ z_AO0i#2&{!n~}TAcW1>KF(H^irijRtbbk{&$e8Iesh6>Xo!mj5dq-?50KKn7LerR+ zp^95egA(k<3?kSLzdv@^%$vFHgRuqxRb1j$uupfexv>tOaSEhVT`i7i5|5>oxjd&o zy8On68a}&N*AK%28=fJmBppf+ZOF{5%?pnG65Sf?vuc7nCsq&G=asm3x_2^5%V1O( zGiFn)6JtklY8T_dLc)M|?o@Y?+ImepLc5~X5S-RA)@ipXFM76p1Ji9zjo^BdRxc}g zI>hhNy+jrDbIQmei!K7;ovpB3K(1xkvOJhLcos$`uOov*rL040>a)FrS9@@Y89M7y zO~M18LHZ{p-i3Yyktnh85)xhSgN!iF{b8&Q^T45eUlI!;L)u!XhIjEYr=89Y+^xiB z+TMnE@Q8!_H7YRNx7a(x+6-kn*>=<%MC7r|CW)RS16Myb^B~X4Pfre=?@zq-21G(X z`Iu>A4mouHzbETx)|3Y)|8JA;o3w1=znS=x!pef*7VIflnE#jgKg+)-uQvBjb041Y z?)d*S?oY;5%~k5pM!ZAxKpWQU2@*Rl=g8?yu53~&9R7xb$In54BuhEhWyDq+ zIt!Of&p~{md)JYTfNj}yH5=a?8P0GCtab&8cNbW4tG09-4kyMyK1p zvrJpzR=Gt4A5WUf<$9N^XTZk=So~Z8=Tvw*(De#2MdH>*hDc+yRjbSWh|3=L%>Ud-5^8(4M!f#A+hfxZ1R+r#A^lP;>(7+q!@XD@qG85BhLWi z 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

    A(~0|g+qHHz%%s8dXX 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 literal 3702784 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%0AnJoY%xwz{*Ao(PhL(##syXP*xUqHgK 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

    tl0Fe&KHwL5Wa* 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%0A~l^Zj_{_4GmANDoLGf- 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 z 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 a0 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

    s<`R`JfoqhxS?vJAAQPja;9+u}sRq?cI7 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

    gG*NZdDv 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̾#nXN?_lQgo{8oByK2aA6$hN8LmJhm{r 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 PG9J((<@x_#|NQ?4f#eN* diff --git a/assets/images/widgets/Banner.svg b/assets/images/widgets/Banner.svg index e4f8b66d7..27c390ff1 100644 --- a/assets/images/widgets/Banner.svg +++ b/assets/images/widgets/Banner.svg @@ -5,16 +5,6 @@ - - - - - - - - - - diff --git a/assets/images/widgets/Card.svg b/assets/images/widgets/Card.svg index b69099b84..62d2d4b8d 100644 --- a/assets/images/widgets/Card.svg +++ b/assets/images/widgets/Card.svg @@ -5,22 +5,6 @@ - - - - - - - - - - - - - - - - diff --git a/assets/images/widgets/Chip.svg b/assets/images/widgets/Chip.svg index cea4cbee4..a66547522 100644 --- a/assets/images/widgets/Chip.svg +++ b/assets/images/widgets/Chip.svg @@ -9,16 +9,6 @@ - - - - - - - - - - diff --git a/assets/images/widgets/Container.svg b/assets/images/widgets/Container.svg index be18043df..c1500829f 100644 --- a/assets/images/widgets/Container.svg +++ b/assets/images/widgets/Container.svg @@ -11,16 +11,6 @@ - - - - - - - - - - diff --git a/assets/images/widgets/FilterChip.svg b/assets/images/widgets/FilterChip.svg index 7a3f6fdd2..2c0214a26 100644 --- a/assets/images/widgets/FilterChip.svg +++ b/assets/images/widgets/FilterChip.svg @@ -11,16 +11,6 @@ - - - - - - - - - - diff --git a/assets/images/widgets/InputChip.svg b/assets/images/widgets/InputChip.svg index b739a7ae0..d50adf71c 100644 --- a/assets/images/widgets/InputChip.svg +++ b/assets/images/widgets/InputChip.svg @@ -13,16 +13,6 @@ - - - - - - - - - - diff --git a/assets/images/widgets/MaterialButton.svg b/assets/images/widgets/MaterialButton.svg index 7ace688c5..11b59f54b 100644 --- a/assets/images/widgets/MaterialButton.svg +++ b/assets/images/widgets/MaterialButton.svg @@ -5,16 +5,6 @@ - - - - - - - - - - diff --git a/assets/version.json b/assets/version.json index 231c882a0..0c311e970 100644 --- a/assets/version.json +++ b/assets/version.json @@ -1,3 +1,3 @@ { - "dbVersion": 4 + "dbVersion": 5 } \ No newline at end of file diff --git a/lib/src/navigation/view/mobile/unit_navigation.dart b/lib/src/navigation/view/mobile/unit_navigation.dart index 702bca963..2873021dc 100644 --- a/lib/src/navigation/view/mobile/unit_navigation.dart +++ b/lib/src/navigation/view/mobile/unit_navigation.dart @@ -96,7 +96,7 @@ class _UnitPhoneNavigationState extends State { _controller.jumpToPage(index); _activeTab.value = AppTab.values[index]; if (index == 3) { - BlocProvider.of(context).add(const EventLoadLikeData()); + context.read().loadLikeData(); } } } diff --git a/lib/src/starter/fx_application.dart b/lib/src/starter/fx_application.dart index f66b52b39..ae3560106 100644 --- a/lib/src/starter/fx_application.dart +++ b/lib/src/starter/fx_application.dart @@ -29,7 +29,7 @@ class FxApplication with FxStarter { context.read().init(state); context.initWidgetData(); if (!kAppEnv.isWeb) { - context.read().add(const EventLoadLikeData()); + context.read().loadLikeData(); context.read().add(const EventLoadCategory()); context.read().load(); } diff --git a/lib/src/starter/start_repository.dart b/lib/src/starter/start_repository.dart index 86aea38b0..e022bdf03 100644 --- a/lib/src/starter/start_repository.dart +++ b/lib/src/starter/start_repository.dart @@ -11,8 +11,9 @@ import 'package:shared_preferences/shared_preferences.dart'; import 'package:storage/storage.dart'; import 'package:path/path.dart' as path; import 'package:utils/utils.dart'; - +import 'package:path/path.dart' as p; import 'bridge/unit_bridge.dart'; +import 'package:widget_module/widget_module.dart'; class FlutterUnitStartRepo implements AppStartRepository { const FlutterUnitStartRepo(); @@ -31,6 +32,8 @@ class FlutterUnitStartRepo implements AppStartRepository { registerHttpClient(); NoteEnv().attachBridge(UnitNoteBridge()); if (!kAppEnv.isWeb) await initDb(); + await initWidgetStatistics(); // 加载统计数据 + HttpUtil.instance.rebase(PathUnit.baseUrl); AppConfigPo po = await SpStorage().appConfig.read(); AppConfig state = AppConfig.fromPo(po); @@ -54,11 +57,19 @@ class FlutterUnitStartRepo implements AppStartRepository { if (!dir.existsSync()) { await dir.create(recursive: true); } - ByteData data = await rootBundle.load("assets/flutter.db"); - List bytes = - data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); - await File(dbPath).writeAsBytes(bytes, flush: true); - + { + ByteData data = await rootBundle.load("assets/flutter.db"); + List bytes = + data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); + await File(dbPath).writeAsBytes(bytes, flush: true); + } + { + ByteData data = await rootBundle.load("assets/article.db"); + List bytes = + data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); + await File(p.join(dir.path, 'article.db')) + .writeAsBytes(bytes, flush: true); + } print("=====flutter.db==== assets ======拷贝完成===="); } diff --git a/lib/src/starter/view/splash/Flutter_unit_splash.dart b/lib/src/starter/view/splash/Flutter_unit_splash.dart index e9d55f1eb..fadb85b50 100644 --- a/lib/src/starter/view/splash/Flutter_unit_splash.dart +++ b/lib/src/starter/view/splash/Flutter_unit_splash.dart @@ -22,6 +22,7 @@ class FlutterUnitSplash extends StatelessWidget { value: SystemUiOverlayStyle( statusBarColor: Colors.transparent, statusBarIconBrightness: Brightness.dark, + systemNavigationBarColor: Colors.transparent, ), child: Material(color: Colors.white, child: _SplashBody()), ), @@ -74,7 +75,7 @@ class _SplashBody extends StatelessWidget { crossAxisAlignment: WrapCrossAlignment.center, children: [ Text("Power By 张风捷特烈", style: shadowStyle), - Text("· 2021 · @编程之王 ", style: shadowStyle), + Text("· 2025 · @编程之王 ", style: shadowStyle), ], )), ], @@ -101,7 +102,11 @@ class ColorfulText extends StatelessWidget { ); return Text( "U", - style: TextStyle(fontSize: 26, height: 1, fontWeight: FontWeight.bold, foreground: paint), + style: TextStyle( + fontSize: 26, + height: 1, + fontWeight: FontWeight.bold, + foreground: paint), ); } } diff --git a/modules/basic_system/app/lib/app/cons/global_value.dart b/modules/basic_system/app/lib/app/cons/global_value.dart index 3e1babfa4..36c8608b2 100644 --- a/modules/basic_system/app/lib/app/cons/global_value.dart +++ b/modules/basic_system/app/lib/app/cons/global_value.dart @@ -6,7 +6,7 @@ import 'package:uuid/uuid.dart'; double px1 = 1 / window.devicePixelRatio; -String get kAppVersion => "3.2.0"; +String get kAppVersion => "3.2.3"; bool kIsDesk = kIsWeb || Platform.isMacOS || Platform.isWindows || Platform.isLinux; diff --git a/modules/basic_system/app/lib/app/cons/str_unit.dart b/modules/basic_system/app/lib/app/cons/str_unit.dart index 4345daddf..abfa191a2 100644 --- a/modules/basic_system/app/lib/app/cons/str_unit.dart +++ b/modules/basic_system/app/lib/app/cons/str_unit.dart @@ -7,7 +7,7 @@ import 'package:l10n/l10n.dart'; class StrUnit { // 小文字大小 - static const String version = 'V3.2.0'; + static const String version = 'V3.2.2'; static const String appName = 'Flutter Unit'; static String galleryDesc(BuildContext context) => """ diff --git a/modules/basic_system/app/lib/view/data_manage/data_manage_page.dart b/modules/basic_system/app/lib/view/data_manage/data_manage_page.dart index a2a714dc3..a6a38d011 100644 --- a/modules/basic_system/app/lib/view/data_manage/data_manage_page.dart +++ b/modules/basic_system/app/lib/view/data_manage/data_manage_page.dart @@ -81,7 +81,7 @@ class DataManagePage extends StatelessWidget { await File(dbPath).writeAsBytes(bytes, flush: true); print("==== debug ===== assets ======拷贝完成===="); BlocProvider.of(context).add(const EventLoadCategory()); - BlocProvider.of(context).add(const EventLoadLikeData()); + context.read().loadLikeData(); Toast.toast(context, '重置成功!'); } @@ -116,7 +116,7 @@ class DataManagePage extends StatelessWidget { await repository.syncCategoryByData( result.data!.data, result.data!.likeData); BlocProvider.of(context).add(const EventLoadCategory()); - BlocProvider.of(context).add(const EventLoadLikeData()); + context.read().loadLikeData(); } else { // 说明还没有后台数据, // 这里防止有傻孩子没点备份,就点同步,哥哥好心,给备份一下。 diff --git a/modules/basic_system/l10n/lib/enum/language.dart b/modules/basic_system/l10n/lib/enum/language.dart index 2fbd17a56..72fb7eac0 100644 --- a/modules/basic_system/l10n/lib/enum/language.dart +++ b/modules/basic_system/l10n/lib/enum/language.dart @@ -1,16 +1,16 @@ import 'dart:ui'; enum Language { - zh_CN(locale: Locale('zh','CN'), label: '简体中文'), - en_US(locale: Locale('en','US'), label: 'English'), - ru_RU(locale: Locale('ru','RU'), label: 'Русский'), - fr_FR(locale: Locale('fr','FR'), label: 'Français'), - ko_KR(locale: Locale('ko','KR'), label: '한국어'), - de_DE(locale: Locale('de','DE'), label: 'Deutsch'), - ja_JP(locale: Locale('ja','JP'), label: '日本語'), - it_IT(locale: Locale('it','IT'), label: 'Italiano'), - pt_PT(locale: Locale('pt','PT'), label: 'Português'), - es_ES(locale: Locale('es','ES'), label: 'Español'), + zh_CN(locale: Locale('zh', 'CN'), label: '简体中文'), + en_US(locale: Locale('en', 'US'), label: 'English'), + // ru_RU(locale: Locale('ru','RU'), label: 'Русский'), + // fr_FR(locale: Locale('fr','FR'), label: 'Français'), + // ko_KR(locale: Locale('ko','KR'), label: '한국어'), + // de_DE(locale: Locale('de','DE'), label: 'Deutsch'), + // ja_JP(locale: Locale('ja','JP'), label: '日本語'), + // it_IT(locale: Locale('it','IT'), label: 'Italiano'), + // pt_PT(locale: Locale('pt','PT'), label: 'Português'), + // es_ES(locale: Locale('es','ES'), label: 'Español'), ; String get code => '${locale.languageCode}-${locale.countryCode}'.toLowerCase(); diff --git a/modules/basic_system/storage/lib/src/app_storage.dart b/modules/basic_system/storage/lib/src/app_storage.dart index 7e671a454..70af2ad9f 100644 --- a/modules/basic_system/storage/lib/src/app_storage.dart +++ b/modules/basic_system/storage/lib/src/app_storage.dart @@ -1,11 +1,10 @@ - import 'package:storage/storage.dart'; +import 'db_storage/flutter/article_db_store.dart'; import 'db_storage/flutter/flutter_db_store.dart'; import 'db_storage/flutter_unit/flutter_unit_db_store.dart'; class AppStorage { - AppStorage._(); static AppStorage? _instance; @@ -15,17 +14,21 @@ class AppStorage { final FlutterDbStore _flutterDb = FlutterDbStore(); final FlutterUnitDbStore _flutterUnitDb = FlutterUnitDbStore(); + final ArticleDbStore _articleDb = ArticleDbStore(); + FlutterDbStore get flutter => _flutterDb; + ArticleDbStore get article => _articleDb; FlutterUnitDbStore get flutterUnit => _flutterUnitDb; - Future init() async{ + Future init() async { await _flutterDb.open(); await _flutterUnitDb.open(); + await _articleDb.open(); } - void close() async{ + void close() async { await _flutterDb.close(); await _flutterUnitDb.close(); + await _articleDb.close(); } - } diff --git a/modules/basic_system/storage/lib/src/db_storage/flutter/article_db_store.dart b/modules/basic_system/storage/lib/src/db_storage/flutter/article_db_store.dart new file mode 100644 index 000000000..2bf579e54 --- /dev/null +++ b/modules/basic_system/storage/lib/src/db_storage/flutter/article_db_store.dart @@ -0,0 +1,27 @@ +import 'dart:async'; +import 'package:sqflite/sqflite.dart'; +import 'package:sqflite_common_ffi/sqflite_ffi.dart'; +import 'package:fx_dao/fx_dao.dart'; + +import 'package:widget_module/widget_module.dart'; +import 'package:artifact/artifact.dart'; + +class ArticleDbStore extends FxDb { + @override + String get dbname => 'article.db'; + + @override + int get version => 1; + + @override + Future onCreate(Database db, int version) async {} + + @override + Iterable<(int, MigrationOperation)> get migrations => []; + + @override + Iterable get tables => [ + ColumnizeDao(), + ArticleDao(), + ]; +} diff --git a/modules/basic_system/storage/lib/src/db_storage/flutter/flutter_db_store.dart b/modules/basic_system/storage/lib/src/db_storage/flutter/flutter_db_store.dart index e78b638c1..3386bd79c 100644 --- a/modules/basic_system/storage/lib/src/db_storage/flutter/flutter_db_store.dart +++ b/modules/basic_system/storage/lib/src/db_storage/flutter/flutter_db_store.dart @@ -4,7 +4,7 @@ import 'package:sqflite_common_ffi/sqflite_ffi.dart'; import 'package:fx_dao/fx_dao.dart'; import 'package:widget_module/widget_module.dart'; -import 'package:artifact/artifact.dart'; +import 'package:widget_repository/widget_repository.dart'; class FlutterDbStore extends FxDb { @override @@ -27,10 +27,9 @@ class FlutterDbStore extends FxDb { @override Iterable get tables => [ - ColumnizeDao(), - ArticleDao(), CategoryDao(), WidgetDao(), + WidgetStatisticsDao(), NodeDao(), LikeDao(), ]; diff --git a/modules/basic_system/toly_ui/lib/ti/panel.dart b/modules/basic_system/toly_ui/lib/ti/panel.dart index 2fc3bd777..fea49bcb5 100644 --- a/modules/basic_system/toly_ui/lib/ti/panel.dart +++ b/modules/basic_system/toly_ui/lib/ti/panel.dart @@ -7,15 +7,25 @@ class Panel extends StatelessWidget { final Color? color; final Widget? child; final EdgeInsetsGeometry? margin; + final BoxConstraints? constraints; + final AlignmentGeometry? alignment; - const Panel({Key? key, this.radius = 5.0, this.color, this.child, this.margin=const EdgeInsets.all(10)}) : super(key: key); + const Panel( + {Key? key, + this.radius = 5.0, + this.color, + this.child, + this.margin = const EdgeInsets.all(10), + this.constraints, + this.alignment}) + : super(key: key); @override Widget build(BuildContext context) { - return Container( - alignment: Alignment.centerLeft, + alignment: alignment ?? Alignment.centerLeft, padding: margin, + constraints: constraints, decoration: BoxDecoration( color: color ?? const Color(0xffF6F8FA), borderRadius: BorderRadius.all(Radius.circular(radius))), @@ -23,5 +33,3 @@ class Panel extends StatelessWidget { ); } } - - diff --git a/modules/knowledge_system/artifact/lib/src/articles/data/repository/article_repository.dart b/modules/knowledge_system/artifact/lib/src/articles/data/repository/article_repository.dart index 094a7a982..d3aa4eb03 100644 --- a/modules/knowledge_system/artifact/lib/src/articles/data/repository/article_repository.dart +++ b/modules/knowledge_system/artifact/lib/src/articles/data/repository/article_repository.dart @@ -10,7 +10,7 @@ import '../exp.dart'; class ArticleRepository { const ArticleRepository(); - ArticleDao get dao => AppStorage().flutter(); + ArticleDao get dao => AppStorage().article(); // 从数据库加载资源 Future> queryByDb(ArticleFilter filter) async { diff --git a/modules/knowledge_system/artifact/lib/src/articles/data/repository/columnize_repository.dart b/modules/knowledge_system/artifact/lib/src/articles/data/repository/columnize_repository.dart index 60ac4d529..fbba96140 100644 --- a/modules/knowledge_system/artifact/lib/src/articles/data/repository/columnize_repository.dart +++ b/modules/knowledge_system/artifact/lib/src/articles/data/repository/columnize_repository.dart @@ -5,11 +5,9 @@ import '../exp.dart'; // 仓储: 提供数据 class ColumnizeRepository { - const ColumnizeRepository(); - ColumnizeDao get dao => AppStorage().flutter(); - + ColumnizeDao get dao => AppStorage().article(); // 从数据库加载资源 Future> queryByDb({ @@ -22,6 +20,4 @@ class ColumnizeRepository { ); return caches; } - - } diff --git a/modules/knowledge_system/artifact/lib/src/articles/view/article/sliver_article.dart b/modules/knowledge_system/artifact/lib/src/articles/view/article/sliver_article.dart index 155a56962..2ec98f1c6 100644 --- a/modules/knowledge_system/artifact/lib/src/articles/view/article/sliver_article.dart +++ b/modules/knowledge_system/artifact/lib/src/articles/view/article/sliver_article.dart @@ -81,8 +81,9 @@ class ArticlePanel extends StatelessWidget { builder: (_) => ArticleDetailPage(article: article), ), ); + } else { + _launchURL('https://juejin.cn${article.url}'); } - _launchURL('https://juejin.cn${article.url}'); } void _launchURL(String url) async { diff --git a/modules/knowledge_system/artifact/lib/src/articles/view/artifact_page.dart b/modules/knowledge_system/artifact/lib/src/articles/view/artifact_page.dart index 101e3bacc..1e7c65204 100644 --- a/modules/knowledge_system/artifact/lib/src/articles/view/artifact_page.dart +++ b/modules/knowledge_system/artifact/lib/src/articles/view/artifact_page.dart @@ -47,7 +47,7 @@ class _ArtifactPageState extends State @override void initState() { super.initState(); - controller = TabController(length: 4, vsync: this); + controller = TabController(length: 2, vsync: this); controller.addListener(_listen); data = List.generate(5, (index) => 'Init $index'); } @@ -70,8 +70,10 @@ class _ArtifactPageState extends State return MultiBlocProvider( providers: [ - BlocProvider(create: (_) => ColumnizeBloc(cRepository)..init()), - BlocProvider(create: (_) => ArticleBloc(aRepository)..init()), + BlocProvider( + create: (_) => ColumnizeBloc(cRepository)..init()), + BlocProvider( + create: (_) => ArticleBloc(aRepository)..init()), ], child: Scaffold( endDrawer: SortSettings(), @@ -92,7 +94,8 @@ class _ArtifactPageState extends State children: [ GestureDetector( onTap: () { - _launchURL('https://github.com/toly1994328/FlutterUnit/blob/master/packages/algorithm/lib/src/algorithm/sort/functions/${name}.dart'); + _launchURL( + 'https://github.com/toly1994328/FlutterUnit/blob/master/packages/algorithm/lib/src/algorithm/sort/functions/${name}.dart'); }, child: Text( '查看排序源码', @@ -109,8 +112,8 @@ class _ArtifactPageState extends State Expanded(child: SortPaper()), ], ), - BuildingPanel(), - BuildingPanel(), + // BuildingPanel(), + // BuildingPanel(), ], ), ), @@ -121,14 +124,12 @@ class _ArtifactPageState extends State _launchURL(String url) async { Uri uri = Uri.parse(url); if (await canLaunchUrl(Uri.parse(url))) { - await launchUrl(uri,mode: LaunchMode.externalApplication); + await launchUrl(uri, mode: LaunchMode.externalApplication); } else { debugPrint('Could not launch $url'); } } - - List _buildAppBar(BuildContext context, bool innerBoxIsScrolled) { // print('innerBoxIsScrolled:$innerBoxIsScrolled'); return [ @@ -203,8 +204,7 @@ class _ArtifactPageState extends State // ), bottom: TabBar( controller: controller, - tabs: - [ + tabs: [ Tab( // icon: Icon(Icons.account_balance_wallet_outlined), text: context.l10n.knowledgeTabToly, @@ -213,14 +213,14 @@ class _ArtifactPageState extends State // icon: Icon(Icons.account_balance_wallet_outlined), text: context.l10n.knowledgeTabAlgo, ), - Tab( - // icon: Icon(Icons.account_balance_wallet_outlined), - text:context.l10n.knowledgeTabLayout, - ), - Tab( - // icon: Icon(Icons.account_balance_wallet_outlined), - text:context.l10n.knowledgeTabPoint, - ), + // Tab( + // // icon: Icon(Icons.account_balance_wallet_outlined), + // text:context.l10n.knowledgeTabLayout, + // ), + // Tab( + // // icon: Icon(Icons.account_balance_wallet_outlined), + // text:context.l10n.knowledgeTabPoint, + // ), ], ), ), // ) diff --git a/modules/widget_system/widget_module/lib/blocs/action/widget_action.dart b/modules/widget_system/widget_module/lib/blocs/action/widget_action.dart index 422951199..09b814078 100644 --- a/modules/widget_system/widget_module/lib/blocs/action/widget_action.dart +++ b/modules/widget_system/widget_module/lib/blocs/action/widget_action.dart @@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart'; import 'package:app/app.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:widget_module/blocs/blocs.dart'; +import 'package:widget_ui/widget_ui.dart'; import '../../widget_module.dart'; @@ -16,6 +17,17 @@ extension WidgetContext on BuildContext { } void toggleLike(int widgetId) { - read().add(ToggleLikeWidgetEvent(id: widgetId)); + read().toggle(widgetId); + } + + void handleWidgetAction(WidgetAction value) { + switch (value) { + case JumpWidgetDetail(): + String? name = value.widgetName ?? value.model?.name; + push('${AppRoute.widgetDetail.url}$name', extra: value.model); + return; + case ToggleLikeWidget(): + toggleLike(value.widgetId); + } } } diff --git a/modules/widget_system/widget_module/lib/blocs/blocs.dart b/modules/widget_system/widget_module/lib/blocs/blocs.dart index 3844b6083..443306fb9 100644 --- a/modules/widget_system/widget_module/lib/blocs/blocs.dart +++ b/modules/widget_system/widget_module/lib/blocs/blocs.dart @@ -1,5 +1,4 @@ export 'category_bloc/category_bloc.dart'; export 'category_widget_bloc/category_widget_bloc.dart'; -export 'liked_widget_bloc/liked_widget_bloc.dart'; export 'widget_detail_bloc/widget_detail_bloc.dart'; -export 'widgets_bloc/widgets_bloc.dart'; \ No newline at end of file +export 'widgets_bloc/widgets_bloc.dart'; diff --git a/modules/widget_system/widget_module/lib/blocs/category_widget_bloc/category_widget_bloc.dart b/modules/widget_system/widget_module/lib/blocs/category_widget_bloc/category_widget_bloc.dart index b263c2bdc..9ddea8b70 100644 --- a/modules/widget_system/widget_module/lib/blocs/category_widget_bloc/category_widget_bloc.dart +++ b/modules/widget_system/widget_module/lib/blocs/category_widget_bloc/category_widget_bloc.dart @@ -2,8 +2,6 @@ import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:widget_repository/widget_repository.dart'; - - import '../category_bloc/category_bloc.dart'; part 'category_widget_event.dart'; @@ -18,24 +16,26 @@ class CategoryWidgetBloc final CategoryBloc categoryBloc; CategoryWidgetBloc({required this.categoryBloc}) - : super(CategoryWidgetEmptyState()){ + : super(CategoryWidgetEmptyState()) { on(_onEventLoadCategoryWidget); on(_onEventToggleCategoryWidget); } CategoryRepository get repository => categoryBloc.repository; - void _onEventLoadCategoryWidget(EventLoadCategoryWidget event, Emitter emit) async{ + void _onEventLoadCategoryWidget( + EventLoadCategoryWidget event, Emitter emit) async { final widgets = - await repository.loadCategoryWidgets(categoryId: event.categoryId); - widgets.isNotEmpty + await repository.loadCategoryWidgets(categoryId: event.categoryId); + widgets.isNotEmpty ? emit(CategoryWidgetLoadedState(widgets)) : emit(CategoryWidgetEmptyState()); categoryBloc.add(const EventLoadCategory()); } - void _onEventToggleCategoryWidget(EventToggleCategoryWidget event, Emitter emit) async{ + void _onEventToggleCategoryWidget(EventToggleCategoryWidget event, + Emitter emit) async { await repository.toggleCategory(event.categoryId, event.widgetId); - add(EventLoadCategoryWidget(event.categoryId)); + add(EventLoadCategoryWidget(event.categoryId, 'zh-cn')); } } diff --git a/modules/widget_system/widget_module/lib/blocs/category_widget_bloc/category_widget_event.dart b/modules/widget_system/widget_module/lib/blocs/category_widget_bloc/category_widget_event.dart index 1e2d62bc2..45a23fd69 100644 --- a/modules/widget_system/widget_module/lib/blocs/category_widget_bloc/category_widget_event.dart +++ b/modules/widget_system/widget_module/lib/blocs/category_widget_bloc/category_widget_event.dart @@ -2,28 +2,29 @@ part of 'category_widget_bloc.dart'; /// create by 张风捷特烈 on 2020-04-21 /// contact me by email 1981462002@qq.com -/// 说明: +/// 说明: -abstract class CategoryWidgetEvent extends Equatable{ +abstract class CategoryWidgetEvent extends Equatable { @override List get props => []; } -class EventLoadCategoryWidget extends CategoryWidgetEvent{ +class EventLoadCategoryWidget extends CategoryWidgetEvent { final int categoryId; + final String locale; - EventLoadCategoryWidget(this.categoryId); + EventLoadCategoryWidget(this.categoryId, this.locale); @override - List get props => [categoryId]; + List get props => [categoryId, locale]; } -class EventToggleCategoryWidget extends CategoryWidgetEvent{ +class EventToggleCategoryWidget extends CategoryWidgetEvent { final int categoryId; final int widgetId; - EventToggleCategoryWidget(this.categoryId,this.widgetId); + EventToggleCategoryWidget(this.categoryId, this.widgetId); @override - List get props => [categoryId,widgetId]; + List get props => [categoryId, widgetId]; } diff --git a/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_bloc.dart b/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_bloc.dart deleted file mode 100644 index 0ab2ef17f..000000000 --- a/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_bloc.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:equatable/equatable.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:widget_repository/widget_repository.dart'; - - - - -part 'liked_widget_event.dart'; -part 'liked_widget_state.dart'; - -/// create by 张风捷特烈 on 2020-04-07 -/// contact me by email 1981462002@qq.com -/// 说明: - -class LikeWidgetBloc extends Bloc { - final WidgetRepository repository; - - LikeWidgetBloc({required this.repository}):super(const LikeWidgetState(widgets: [])){ - on(_onEventLoadLikeData) ; - on(_onToggleLikeWidgetEvent) ; - } - - void _onEventLoadLikeData(EventLoadLikeData event, Emitter emit) async{ - final widgets = await repository.loadLikeWidgets(); - emit(LikeWidgetState(widgets: widgets)); - } - - void _onToggleLikeWidgetEvent(ToggleLikeWidgetEvent event, Emitter emit) async{ - await repository.toggleLike(event.id); - final widgets = await repository.loadLikeWidgets(); - emit(LikeWidgetState(widgets: widgets)); - } -} diff --git a/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_event.dart b/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_event.dart deleted file mode 100644 index f3e1d4873..000000000 --- a/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_event.dart +++ /dev/null @@ -1,33 +0,0 @@ -part of 'liked_widget_bloc.dart'; - -/// create by 张风捷特烈 on 2020-04-09 -/// contact me by email 1981462002@qq.com -/// 说明: - -abstract class LikeWidgetEvent extends Equatable { - const LikeWidgetEvent(); -} - -class EventLoadLikeData extends LikeWidgetEvent { - const EventLoadLikeData(); - - @override - List get props => []; -} - -class ToggleLikeWidgetEvent extends LikeWidgetEvent { - final int id; - - const ToggleLikeWidgetEvent({required this.id}); - - @override - // TODO: implement props - List get props => [id]; -} - -class LoadCollectEvent extends LikeWidgetEvent { - const LoadCollectEvent(); - - @override - List get props => []; -} diff --git a/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_state.dart b/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_state.dart deleted file mode 100644 index 34b57f14a..000000000 --- a/modules/widget_system/widget_module/lib/blocs/liked_widget_bloc/liked_widget_state.dart +++ /dev/null @@ -1,14 +0,0 @@ -part of 'liked_widget_bloc.dart'; - -/// create by 张风捷特烈 on 2020-04-09 -/// contact me by email 1981462002@qq.com -/// 说明: - -class LikeWidgetState extends Equatable { - final List widgets; - - const LikeWidgetState({required this.widgets}); - - @override - List get props => [widgets]; -} diff --git a/modules/widget_system/widget_module/lib/blocs/widget_detail_bloc/widget_detail_bloc.dart b/modules/widget_system/widget_module/lib/blocs/widget_detail_bloc/widget_detail_bloc.dart index be4d555d3..73ae25c0e 100644 --- a/modules/widget_system/widget_module/lib/blocs/widget_detail_bloc/widget_detail_bloc.dart +++ b/modules/widget_system/widget_module/lib/blocs/widget_detail_bloc/widget_detail_bloc.dart @@ -49,11 +49,7 @@ class WidgetDetailBloc extends Cubit { await nodeRepo.loadNode(widget.id, locale: locale); final List links = await widgetRepo.loadWidget(widget.links, locale); - if (nodes.isEmpty) { - emit(DetailEmpty()); - } else { - emit(DetailWithData(widgetModel: widget, nodes: nodes, links: links)); - } + emit(DetailWithData(widgetModel: widget, nodes: nodes, links: links)); } catch (e, s) { print("queryDetail=error===${e}=$s=="); emit(DetailFailed()); diff --git a/modules/widget_system/widget_module/lib/blocs/widget_detail_bloc/widget_detail_state.dart b/modules/widget_system/widget_module/lib/blocs/widget_detail_bloc/widget_detail_state.dart index d54e96638..31376c33c 100644 --- a/modules/widget_system/widget_module/lib/blocs/widget_detail_bloc/widget_detail_state.dart +++ b/modules/widget_system/widget_module/lib/blocs/widget_detail_bloc/widget_detail_state.dart @@ -45,6 +45,4 @@ class DetailWithData extends DetailState { class DetailLoading extends DetailState {} -class DetailEmpty extends DetailState {} - class DetailFailed extends DetailState {} diff --git a/modules/widget_system/widget_module/lib/blocs/widgets_bloc/widgets_bloc.dart b/modules/widget_system/widget_module/lib/blocs/widgets_bloc/widgets_bloc.dart index 3da35ffcc..8a809104f 100644 --- a/modules/widget_system/widget_module/lib/blocs/widgets_bloc/widgets_bloc.dart +++ b/modules/widget_system/widget_module/lib/blocs/widgets_bloc/widgets_bloc.dart @@ -1,9 +1,9 @@ import 'dart:async'; import 'dart:ui'; -import 'package:app/app.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:fx_platform_adapter/fx_platform_adapter.dart'; import 'package:widget_repository/widget_repository.dart'; part 'widgets_event.dart'; @@ -27,8 +27,9 @@ class WidgetsBloc extends Bloc { /// 切换页签,以 [family] 为过滤项 void _onEventTabTap(EventTabTap event, Emitter emit) async { // emit(const WidgetsLoading(operate: LoadOperate.load)); - int size = kIsDesk ? 1000 : 20; - WidgetFilter filter = WidgetFilter.family(event.family, pageSize: size,locale: event.locale); + int size = kAppEnv.isDesktop ? 1000 : 20; + WidgetFilter filter = + WidgetFilter.family(event.family, pageSize: size, locale: event.locale); try { final List widgets = await repository.searchWidgets(filter); emit(WidgetsLoaded( @@ -129,9 +130,7 @@ class WidgetsBloc extends Bloc { } void changeLocale(Locale locale) { - add(EventTabTap( - state.filter.family??WidgetFamily.stateless, - locale: '${locale.languageCode}-${locale.countryCode}'.toLowerCase() - )); + add(EventTabTap(state.filter.family ?? WidgetFamily.stateless, + locale: '${locale.languageCode}-${locale.countryCode}'.toLowerCase())); } } diff --git a/modules/widget_system/widget_module/lib/event/widget_statistics_event.dart b/modules/widget_system/widget_module/lib/event/widget_statistics_event.dart new file mode 100644 index 000000000..31830feb1 --- /dev/null +++ b/modules/widget_system/widget_module/lib/event/widget_statistics_event.dart @@ -0,0 +1,10 @@ +import 'package:flutter/material.dart'; +import 'package:storage/storage.dart'; +import 'package:widget_repository/widget_repository.dart'; + +/// 初始化统计数据 +Future initWidgetStatistics() async { + await WidgetStatisticsProvider().loadStatistics( + AppStorage().flutter(), + ); +} diff --git a/modules/widget_system/widget_module/lib/views/components/collected_tag.dart b/modules/widget_system/widget_module/lib/views/components/collected_tag.dart index 62a1d2da6..f39b3f82d 100644 --- a/modules/widget_system/widget_module/lib/views/components/collected_tag.dart +++ b/modules/widget_system/widget_module/lib/views/components/collected_tag.dart @@ -1,29 +1,29 @@ -import 'package:flutter/material.dart'; -import 'package:l10n/ext.dart'; -import 'package:wrapper/wrapper.dart'; - -class CollectedTag extends StatelessWidget { - const CollectedTag({super.key}); - - @override - Widget build(BuildContext context) { - bool isDark = Theme.of(context).brightness == Brightness.dark; - Color color = Theme.of(context).primaryColor; - String text = context.l10n.favorite; - return Wrapper.just( - radius: 10, - color: isDark ? const Color(0xff292A2D) : const Color(0xffF3F3F5), - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), - child: Text( - text, - style: TextStyle(color: color, height: 1, fontSize: 10, shadows: [ - Shadow( - color: isDark ? Colors.black : Colors.white, - blurRadius: 2, - offset: const Offset(1, 1), - ) - ]), - ), - ); - } -} +// import 'package:flutter/material.dart'; +// import 'package:l10n/ext.dart'; +// import 'package:wrapper/wrapper.dart'; +// +// class CollectedTag extends StatelessWidget { +// const CollectedTag({super.key}); +// +// @override +// Widget build(BuildContext context) { +// bool isDark = Theme.of(context).brightness == Brightness.dark; +// Color color = Theme.of(context).primaryColor; +// String text = context.l10n.favorite; +// return Wrapper.just( +// radius: 10, +// color: isDark ? const Color(0xff292A2D) : const Color(0xffF3F3F5), +// padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), +// child: Text( +// text, +// style: TextStyle(color: color, height: 1, fontSize: 10, shadows: [ +// Shadow( +// color: isDark ? Colors.black : Colors.white, +// blurRadius: 2, +// offset: const Offset(1, 1), +// ) +// ]), +// ), +// ); +// } +// } diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/category_panel/desk_category_page.dart b/modules/widget_system/widget_module/lib/views/desk_ui/category_panel/desk_category_page.dart index 6550094e9..7817fd20f 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/category_panel/desk_category_page.dart +++ b/modules/widget_system/widget_module/lib/views/desk_ui/category_panel/desk_category_page.dart @@ -20,7 +20,6 @@ class DeskCategoryPage extends StatefulWidget { } class _DeskCategoryPageState extends State { - final PageController _ctrl = PageController(); @override @@ -28,16 +27,20 @@ class _DeskCategoryPageState extends State { return Scaffold( body: Column( children: [ - DeskTabTopBar(onTabPressed: (int value) { - _ctrl.jumpToPage(value); - }, tabs: ['组件酒肆','珍藏组件'],), - Expanded(child: PageView( - controller: _ctrl, - children: [ - DeskCateGoryPage(), - DeskLikePage(), - ], - )) + DeskTabTopBar( + onTabPressed: (int value) { + _ctrl.jumpToPage(value); + }, + tabs: ['组件酒肆', '珍藏组件'], + ), + Expanded( + child: PageView( + controller: _ctrl, + children: [ + DeskCateGoryPage(), + DeskLikePage(), + ], + )) ], ), ); @@ -47,39 +50,35 @@ class _DeskCategoryPageState extends State { class DeskCateGoryPage extends StatelessWidget { const DeskCateGoryPage({Key? key}) : super(key: key); - - @override Widget build(BuildContext context) { - const SliverGridDelegate deskGridDelegate = SliverGridDelegateWithMaxCrossAxisExtent( + const SliverGridDelegate deskGridDelegate = + SliverGridDelegateWithMaxCrossAxisExtent( maxCrossAxisExtent: 240, mainAxisSpacing: 8, mainAxisExtent: 220, crossAxisSpacing: 8, ); - CategoryBloc bloc = context.read(); + CategoryBloc bloc = context.read(); CategoryState state = bloc.state; - if(state is CategoryLoadedState){ + if (state is CategoryLoadedState) { return GridView.builder( - itemCount: state.categories.length, + itemCount: state.categories.length, padding: EdgeInsets.all(12), - gridDelegate: deskGridDelegate, itemBuilder: (_, index) => GestureDetector( - onTap: () => _toDetailPage(context, state.categories[index]), - child: CategoryListItem( - data: state.categories[index], - onDeleteItemClick: (model) => - _deleteCollect(context, model), - onEditItemClick: (model) => - _editCollect(context, model), - ))); + gridDelegate: deskGridDelegate, + itemBuilder: (_, index) => GestureDetector( + onTap: () => _toDetailPage(context, state.categories[index]), + child: CategoryListItem( + data: state.categories[index], + onDeleteItemClick: (model) => _deleteCollect(context, model), + onEditItemClick: (model) => _editCollect(context, model), + ))); } return SizedBox.shrink(); - } - ShapeBorder get rRectBorder => const RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(10))); @@ -87,65 +86,68 @@ class DeskCateGoryPage extends StatelessWidget { showDialog( context: context, builder: (ctx) => Dialog( - elevation: 5, - shape: rRectBorder, - child: SizedBox( - width: 50, - child: DeleteCategoryDialog( - title: '删除收藏集', - content: ' 删除【${model.name}】收藏集,你将会失去其中的所有收藏组件,是否确定继续执行?', - onSubmit: () { - BlocProvider.of(context) - .add(EventDeleteCategory(id: model.id!)); - Navigator.of(context).pop(); - }, - ), - ), - )); + elevation: 5, + shape: rRectBorder, + child: SizedBox( + width: 50, + child: DeleteCategoryDialog( + title: '删除收藏集', + content: ' 删除【${model.name}】收藏集,你将会失去其中的所有收藏组件,是否确定继续执行?', + onSubmit: () { + BlocProvider.of(context) + .add(EventDeleteCategory(id: model.id!)); + Navigator.of(context).pop(); + }, + ), + ), + )); } void _editCollect(BuildContext context, CategoryModel model) { showDialog( context: context, builder: (ctx) => Dialog( - backgroundColor: const Color(0xFFF2F2F2), - elevation: 5, - shape: rRectBorder, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Gap.H5, - Row( + backgroundColor: const Color(0xFFF2F2F2), + elevation: 5, + shape: rRectBorder, + child: Column( + mainAxisSize: MainAxisSize.min, children: [ + Gap.H5, + Row( + children: [ + Padding( + padding: const EdgeInsets.only(left: 20, right: 10), + child: Circle( + color: Theme.of(context).primaryColor, + ), + ), + const Text( + '修改收藏集', + style: TextStyle(fontSize: 20), + ), + const Spacer(), + const CloseButton() + ], + ), Padding( - padding: const EdgeInsets.only(left: 20, right: 10), - child: Circle( - color: Theme.of(context).primaryColor, + padding: const EdgeInsets.all(8.0), + child: EditCategoryPanel( + model: model, + type: EditType.update, ), ), - const Text( - '修改收藏集', - style: TextStyle(fontSize: 20), - ), - const Spacer(), - const CloseButton() ], ), - Padding( - padding: const EdgeInsets.all(8.0), - child: EditCategoryPanel(model: model,type: EditType.update,), - ), - ], - ), - )); + )); } void _toDetailPage(BuildContext context, CategoryModel model) { - BlocProvider.of(context).add(EventLoadCategoryWidget(model.id!)); - BlocProvider.of(context).add(EventLoadCategoryWidget(model.id!)); + String locale = context.read().language.code; + + BlocProvider.of(context) + .add(EventLoadCategoryWidget(model.id!, locale)); // Navigator.pushNamed(context, UnitRouter.category_show, arguments: model); - context.push('${AppRoute.collectionDetail.url}${model.id}',extra: model); + context.push('${AppRoute.collectionDetail.url}${model.id}', extra: model); } - - } diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/category_panel/desk_top_like_panel.dart b/modules/widget_system/widget_module/lib/views/desk_ui/category_panel/desk_top_like_panel.dart index ff2f7f1ae..2c1d06ac4 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/category_panel/desk_top_like_panel.dart +++ b/modules/widget_system/widget_module/lib/views/desk_ui/category_panel/desk_top_like_panel.dart @@ -1,10 +1,11 @@ import 'package:app/app.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:widget_module/blocs/action/widget_action.dart'; import 'package:widget_module/blocs/blocs.dart'; import 'package:widget_repository/widget_repository.dart'; - +import 'package:widget_ui/widget_ui.dart'; import '../../mobile/widget_detail/collect_widget_list_item.dart'; import '../../mobile/widget_detail/widget_detail_page.dart'; @@ -12,7 +13,7 @@ class DeskLikePage extends StatelessWidget { const DeskLikePage({Key? key}) : super(key: key); final SliverGridDelegate deskGridDelegate = - const SliverGridDelegateWithMaxCrossAxisExtent( + const SliverGridDelegateWithMaxCrossAxisExtent( maxCrossAxisExtent: 300, mainAxisSpacing: 15, mainAxisExtent: 80, @@ -21,36 +22,26 @@ class DeskLikePage extends StatelessWidget { @override Widget build(BuildContext context) { - - LikeWidgetBloc bloc = context.watch(); - LikeWidgetState state = bloc.state; + LikeWidgetBloc bloc = context.watch(); + List state = bloc.state; return GridView.builder( - itemCount: state.widgets.length, + itemCount: state.length, padding: EdgeInsets.all(20), - gridDelegate: deskGridDelegate, itemBuilder: (_, index) => GestureDetector( - onTap: () => _toDetailPage(context, state.widgets[index]), - child: CollectWidgetListItem( - data: state.widgets[index], - onDeleteItemClick: (model) => - _deleteCollect(context, model), - ))); - - return SizedBox.shrink(); - + gridDelegate: deskGridDelegate, + itemBuilder: (_, index) => GestureDetector( + onTap: () => _toDetailPage(context, state[index]), + child: CollectWidgetListItem( + data: state[index], + onDeleteItemClick: (model) => context.toggleLike(model.id), + ))); } - ShapeBorder get rRectBorder => const RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(10))); - - _deleteCollect(BuildContext context, WidgetModel model) => - BlocProvider.of(context).add(ToggleLikeWidgetEvent(id: model.id)); - _toDetailPage(BuildContext context, WidgetModel model) { // BlocProvider.of(context).add(FetchWidgetDetail(model)); - Navigator.push(context, SlidePageRoute(child: WidgetDetailPageScope(model: model))); + Navigator.push( + context, SlidePageRoute(child: WidgetDetailPageScope(model: model))); } - - -} \ No newline at end of file +} diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/like_tag.dart b/modules/widget_system/widget_module/lib/views/desk_ui/like_tag.dart deleted file mode 100644 index ad6b1249e..000000000 --- a/modules/widget_system/widget_module/lib/views/desk_ui/like_tag.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; - -import '../../blocs/blocs.dart'; -import '../../widget_module.dart'; -import '../components/collected_tag.dart'; - - -class LikeTag extends StatelessWidget { - final WidgetModel widget; - - const LikeTag({super.key, required this.widget}); - - @override - Widget build(BuildContext context) { - bool show = context.select( - (LikeWidgetBloc bloc) => bloc.state.widgets.contains(widget), - ); - if (show) { - return GestureDetector( - onTap: (){ - context.read().add(ToggleLikeWidgetEvent(id: widget.id)); - }, - child: Container( - width: 24, - height: 24, - decoration: BoxDecoration( - color: Colors.white.withValues(alpha: 0.3), - borderRadius: BorderRadius.only( - topLeft: Radius.circular(6), - bottomRight: Radius.circular(8), - ) - ), - child: Icon(Icons.star,color: Colors.white,size: 16,), - ), - ); - } - return const SizedBox(); - } -} diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_bar.dart b/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_bar.dart index 274a2bfaf..5fcdba687 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_bar.dart +++ b/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_bar.dart @@ -6,12 +6,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:toly_ui/toly_ui.dart'; import 'package:utils/utils.dart'; - +import 'package:widget_module/blocs/action/widget_action.dart'; +import 'package:widget_ui/widget_ui.dart'; import 'package:widget_module/blocs/blocs.dart'; import 'package:widget_repository/widget_repository.dart'; - class DeskSliverWidgetDetailBar extends StatelessWidget { final WidgetModel model; @@ -25,13 +25,16 @@ class DeskSliverWidgetDetailBar extends StatelessWidget { Widget build(BuildContext context) { bool isDark = Theme.of(context).brightness == Brightness.dark; Color? appBarColor = Theme.of(context).appBarTheme.backgroundColor; - Color? appBarTextColor = Theme.of(context).appBarTheme.titleTextStyle?.color; + Color? appBarTextColor = + Theme.of(context).appBarTheme.titleTextStyle?.color; return SliverAppBar( pinned: true, - backgroundColor: isDark? appBarColor:backgroundColor, - titleTextStyle: TextStyle(color: isDark?appBarTextColor:Color(0xff696969)), - iconTheme: IconThemeData(color: isDark?appBarTextColor:Color(0xff696969)), + backgroundColor: isDark ? appBarColor : backgroundColor, + titleTextStyle: + TextStyle(color: isDark ? appBarTextColor : Color(0xff696969)), + iconTheme: + IconThemeData(color: isDark ? appBarTextColor : Color(0xff696969)), expandedHeight: 120.0, scrolledUnderElevation: 0.5, flexibleSpace: DragToMoveWrapper( @@ -44,13 +47,16 @@ class DeskSliverWidgetDetailBar extends StatelessWidget { ), fixedSubtitle: Text( model.name, - style: TextStyle(color:isDark?appBarTextColor:Color(0xff696969), fontSize: 12), + style: TextStyle( + color: isDark ? appBarTextColor : Color(0xff696969), + fontSize: 12), ), title: Padding( padding: const EdgeInsets.only(bottom: 3), child: Text( model.nameCN, - style: TextStyle(color:isDark?appBarTextColor: textColor, fontSize: 16), + style: TextStyle( + color: isDark ? appBarTextColor : textColor, fontSize: 16), ), ), //伸展处布局 @@ -61,32 +67,25 @@ class DeskSliverWidgetDetailBar extends StatelessWidget { ), elevation: 0, actions: [ - - WindowButtons( - actions: [ - _buildToHome(context), - FeedbackWidget( - onPressed: () => _toggleLikeState(context), - child: BlocConsumer( - listener: _listenLikeStateChange, - builder: _buildByLikeState, - ), - ), - ], - ) + WindowButtons( + actions: [ + _buildToHome(context), + FeedbackWidget( + onPressed: () => context.toggleLike(model.id), + child: BlocConsumer>( + listener: _listenLikeStateChange, + builder: _buildByLikeState, + ), + ), + ], + ) ], ); } - void _toggleLikeState(BuildContext context) { - BlocProvider.of(context).add( - ToggleLikeWidgetEvent(id: model.id), - ); - } - // 监听 LikeWidgetBloc 伺机弹出 toast - void _listenLikeStateChange(BuildContext context, LikeWidgetState state) { - bool collected = state.widgets.contains(model); + void _listenLikeStateChange(BuildContext context, List state) { + bool collected = state.contains(model); String msg = collected ? "收藏【${model.name}】组件成功!" : "已取消【${model.name}】组件收藏!"; Toast.toast( @@ -103,8 +102,8 @@ class DeskSliverWidgetDetailBar extends StatelessWidget { } // 根据 [LikeWidgetState ] 构建图标 - Widget _buildByLikeState(BuildContext context, LikeWidgetState state) { - bool liked = state.widgets.contains(model); + Widget _buildByLikeState(BuildContext context, List state) { + bool liked = state.contains(model); return SizedBox( width: 30, height: 30, @@ -117,10 +116,13 @@ class DeskSliverWidgetDetailBar extends StatelessWidget { Widget _buildToHome(BuildContext context) => GestureDetector( onLongPress: () => Scaffold.of(context).openEndDrawer(), - child:const SizedBox( + child: const SizedBox( width: 30, height: 30, - child: Icon(Icons.home,size: 20,), + child: Icon( + Icons.home, + size: 20, + ), ), onTap: () => Navigator.of(context).pop()); } diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_page.dart b/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_page.dart index c6ed47264..cfa080ac1 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_page.dart +++ b/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_page.dart @@ -10,6 +10,7 @@ import 'package:widget_repository/widget_repository.dart'; import '../../mobile/mobile_ui.dart'; import '../../mobile/widget_detail/category_end_drawer.dart'; import '../../mobile/widget_detail/node_display/node_display.dart'; +import '../../mobile/widget_detail/widget_fields_sliver.dart'; import 'link_widget_buttons.dart'; import 'widget_detail_bar.dart'; import 'widget_detail_panel.dart'; @@ -55,11 +56,12 @@ class _DeskWidgetDetailPageScopeState extends State { Widget build(BuildContext context) { if (_model == null) return const Center(child: CupertinoActivityIndicator()); - Locale locale = context.read().state.language.locale; + Locale locale = context.read().state.language.locale; // Locale locale = Localizations.localeOf(context); // String? countryCode = locale.countryCode; // if (countryCode == null) {} - String localeStr = '${locale.languageCode}-${locale.countryCode}'.toLowerCase(); + String localeStr = + '${locale.languageCode}-${locale.countryCode}'.toLowerCase(); return BlocProvider( create: (_) => WidgetDetailBloc( @@ -119,16 +121,23 @@ class DeskWidgetDetailPage extends StatelessWidget { SliverToBoxAdapter( child: Column( children: [ - DeskWidgetDetailPanel(model: bloc.currentWidget, state: state,), - const Divider(height: 18,) + DeskWidgetDetailPanel( + model: bloc.currentWidget, + state: state, + ), + const Divider( + height: 18, + ) ], ), ), if (state is DetailWithData) - SliverNodeList( - nodes: state.nodes, - model: state.widgetModel, - ) + state.nodes.isNotEmpty + ? SliverNodeList( + nodes: state.nodes, + model: state.widgetModel, + ) + : SliverWidgetFieldsList(widgetId: model!.id), ], )); } diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_panel.dart b/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_panel.dart index ea3b269a5..3ca8a6c91 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_panel.dart +++ b/modules/widget_system/widget_module/lib/views/desk_ui/widget_detail/widget_detail_panel.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_star/flutter_star.dart'; import 'package:toly_ui/toly_ui.dart'; import 'package:widget_repository/widget_repository.dart'; +import 'package:widget_ui/widget_ui.dart'; import 'dart:math'; import '../../../blocs/blocs.dart'; @@ -31,7 +32,14 @@ class DeskWidgetDetailPanel extends StatelessWidget { children: [ _buildLeft(model, context), const SizedBox(width: 12), - _buildRight(color, model), + Hero( + tag: "hero_widget_image_${model.id}", + child: WidgetDetailLogo( + model: model, + background: color, + widgetName: model.name, + ), + ) ], ), ); @@ -67,77 +75,4 @@ class DeskWidgetDetailPanel extends StatelessWidget { ], ), ); - - Widget _buildRight(Color color, WidgetModel model) => Column( - mainAxisSize: MainAxisSize.min, - children: [ - Hero( - tag: "hero_widget_image_${model.id}", - child: WidgetLogo( - widgetId: model.id, - background: color, - widgetName: model.name, - ), - ), - const SizedBox( - height: 6, - ), - StarScore( - score: model.lever, - star: Star(size: 15, fillColor: color), - ) - ], - ); -} - -class WidgetLogo extends StatelessWidget { - final Color background; - final String widgetName; - final int widgetId; - - const WidgetLogo({ - super.key, - required this.background, - required this.widgetName, - required this.widgetId, - }); - - @override - Widget build(BuildContext context) { - return Stack( - children: [ - Container( - width: 240, - height: 160, - alignment: Alignment.center, - decoration: BoxDecoration( - color: background, - gradient: LinearGradient( - transform: const GradientRotation(270 * 180 / pi), - colors: [ - background.withValues(alpha: 0.9), - background.withValues(alpha: 0.5) - ]), - borderRadius: BorderRadius.circular(6), - ), - child: SvgPicture.asset( - 'assets/images/widgets/${widgetLogo(widgetName)}', - width: 140, - ), - ), - Positioned( - bottom: 2, - left: 6, - child: Text( - "#$widgetId", - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontSize: 12, - color: Colors.white70, - ), - )) - ], - ); - } } diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/desk_widget_top_bar.dart b/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/desk_widget_top_bar.dart index a8908c885..f5dcb97dc 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/desk_widget_top_bar.dart +++ b/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/desk_widget_top_bar.dart @@ -2,32 +2,94 @@ import 'package:app/app.dart'; import 'package:l10n/l10n.dart'; import 'package:toly_ui/toly_ui.dart'; import 'package:flutter/material.dart'; +import 'package:widget_repository/widget_repository.dart'; import 'desk_search_bar.dart'; class DeskWidgetTopBar extends StatefulWidget { final ValueChanged onTabPressed; - const DeskWidgetTopBar({Key? key,required this.onTabPressed}) : super(key: key); + const DeskWidgetTopBar({Key? key, required this.onTabPressed}) + : super(key: key); @override State createState() => _DeskWidgetTopBarState(); } -class _DeskWidgetTopBarState extends State with SingleTickerProviderStateMixin { +class _DeskWidgetTopBarState extends State + with SingleTickerProviderStateMixin { late TabController tabController; + List get _tabs { + final provider = WidgetStatisticsProvider(); + final stats = provider.statistics; - List get _tabs =>[ - context.l10n.stateless, - context.l10n.stateful, - context.l10n.single, - context.l10n.multi, - context.l10n.sliver, - context.l10n.proxy, - context.l10n.other, - ]; + if (stats == null) { + return [ + context.l10n.stateless, + context.l10n.stateful, + context.l10n.single, + context.l10n.multi, + context.l10n.sliver, + context.l10n.proxy, + context.l10n.other, + ]; + } + return [ + context.l10n.stateless, + context.l10n.stateful, + context.l10n.single, + context.l10n.multi, + context.l10n.sliver, + context.l10n.proxy, + context.l10n.other, + ]; + } + + List _buildTabWidgets() { + final provider = WidgetStatisticsProvider(); + final stats = provider.statistics; + final counts = [ + stats?.familyCount[WidgetFamily.stateless] ?? 0, + stats?.familyCount[WidgetFamily.stateful] ?? 0, + stats?.familyCount[WidgetFamily.singleChildRender] ?? 0, + stats?.familyCount[WidgetFamily.multiChildRender] ?? 0, + stats?.familyCount[WidgetFamily.sliver] ?? 0, + stats?.familyCount[WidgetFamily.proxy] ?? 0, + stats?.familyCount[WidgetFamily.other] ?? 0, + ]; + + return List.generate( + _tabs.length, + (index) => Stack( + clipBehavior: Clip.none, + children: [ + Text(_tabs[index]), + if (tabController.index == index) + Positioned( + right: -10, + top: -6, + child: Container( + padding: const EdgeInsets.symmetric( + horizontal: 6, vertical: 3), + decoration: BoxDecoration( + color: Theme.of(context) + .primaryColor + .withValues(alpha: 0.6), + borderRadius: BorderRadius.circular(6), + ), + child: Text('${counts[index]}', + style: const TextStyle( + fontFamily: '黑体', + height: 1, + fontSize: 9, + color: Colors.white)), + ), + ), + ], + )); + } @override void initState() { @@ -44,7 +106,7 @@ class _DeskWidgetTopBarState extends State with SingleTickerP child: Container( padding: const EdgeInsets.only(left: 20), height: 64, - color: isDark?Color(0xff2C3036):Colors.white, + color: isDark ? Color(0xff2C3036) : Colors.white, child: Row( children: [ SizedBox( @@ -67,16 +129,15 @@ class _DeskWidgetTopBarState extends State with SingleTickerP indicatorWeight: 3, unselectedLabelColor: Colors.grey, indicatorColor: themeColor, - tabs: - _tabs.map((String name) => Tab(text: name)).toList(), + tabs: _buildTabWidgets() + .map((Widget widget) => Tab(child: widget)) + .toList(), ), ), Spacer(), Padding( padding: const EdgeInsets.symmetric(horizontal: 8.0), - child: SizedBox( - width: 250, height: 30, child: DeskSearchBar( - )), + child: SizedBox(width: 250, height: 30, child: DeskSearchBar()), ), // const SizedBox(width: 20,), const WindowButtons(), diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_panel.dart b/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_panel.dart index e79767fe7..85165ba15 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_panel.dart +++ b/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_panel.dart @@ -1,20 +1,15 @@ -import 'package:app/app.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:go_router/go_router.dart'; import 'package:widget_module/blocs/blocs.dart'; -import 'package:widget_module/event/widget_event.dart'; import 'package:widget_module/widget_module.dart'; import 'package:widget_repository/widget_repository.dart'; -import 'package:fx_trace/fx_trace.dart'; -import 'package:toly_ui/toly_ui.dart'; import 'desk_widget_top_bar.dart'; -import 'widget_tiled.dart'; +import 'package:widget_ui/widget_ui.dart'; class DeskWidgetPanel extends StatefulWidget { final Widget? header; + const DeskWidgetPanel({super.key, this.header}); @override @@ -86,28 +81,14 @@ class WidgetList extends StatelessWidget { padding: const EdgeInsets.only(left: 14, right: 14, bottom: 8), sliver: SliverGrid.builder( gridDelegate: gridDelegate, - itemBuilder: _buildItem, + itemBuilder: (_, index) => WidgetItem( + model: state.widgets[index], + onWidget: context.handleWidgetAction, + ), itemCount: state.widgets.length, ), ) ], ); - - return GridView.builder( - padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 8), - gridDelegate: gridDelegate, - itemBuilder: _buildItem, - itemCount: state.widgets.length, - ); - } - - Widget _buildItem(BuildContext context, int index) { - WidgetModel model = state.widgets[index]; - return WidgetTiled( - model: model, - onTap: () { - context.push('${AppRoute.widgetDetail.url}${model.name}', extra: model); - }, - ); } } diff --git a/modules/widget_system/widget_module/lib/views/mobile/category_page/category_page.dart b/modules/widget_system/widget_module/lib/views/mobile/category_page/category_page.dart index 555e94368..05e953fc1 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/category_page/category_page.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/category_page/category_page.dart @@ -10,9 +10,6 @@ import 'package:widget_module/blocs/blocs.dart'; import 'package:widget_repository/widget_repository.dart'; - - - import 'category_list_item.dart'; import 'delete_category_dialog.dart'; import 'edit_category_panel.dart'; @@ -21,22 +18,23 @@ import 'empty_category.dart'; class CategoryPage extends StatelessWidget { final SliverGridDelegateWithMaxCrossAxisExtent gridDelegate = const SliverGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: 200, - mainAxisExtent: 200, - mainAxisSpacing: 8, - crossAxisSpacing: 8, + maxCrossAxisExtent: 200, + mainAxisExtent: 200, + mainAxisSpacing: 8, + crossAxisSpacing: 8, // crossAxisCount: 2, // childAspectRatio: 0.8, ); - final SliverGridDelegateWithFixedCrossAxisCount deskGridDelegate = const SliverGridDelegateWithFixedCrossAxisCount( + final SliverGridDelegateWithFixedCrossAxisCount deskGridDelegate = + const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, mainAxisSpacing: 10, crossAxisSpacing: 10, childAspectRatio: 0.9, ); - + const CategoryPage({Key? key}) : super(key: key); @override @@ -61,14 +59,14 @@ class CategoryPage extends StatelessWidget { double bottom = MediaQuery.of(context).padding.bottom; return SliverPadding( - padding: EdgeInsets.only(top: 10, left: 10, right: 10, bottom: 20+bottom), - sliver: SliverLayoutBuilder( - builder: (_,c){ - SliverGridDelegate delegate = gridDelegate; - if(c.crossAxisExtent>500){ - delegate = deskGridDelegate; - } - return SliverGrid( + padding: + EdgeInsets.only(top: 10, left: 10, right: 10, bottom: 20 + bottom), + sliver: SliverLayoutBuilder(builder: (_, c) { + SliverGridDelegate delegate = gridDelegate; + if (c.crossAxisExtent > 500) { + delegate = deskGridDelegate; + } + return SliverGrid( delegate: SliverChildBuilderDelegate( (_, index) => GestureDetector( onTap: () => @@ -77,12 +75,11 @@ class CategoryPage extends StatelessWidget { data: state.categories[index], onDeleteItemClick: (model) => _deleteCollect(context, model), - onEditItemClick: (model) => - _editCollect(context, model), + onEditItemClick: (model) => _editCollect(context, model), )), childCount: state.categories.length), - gridDelegate: delegate); } - ), + gridDelegate: delegate); + }), ); } @@ -139,7 +136,10 @@ class CategoryPage extends StatelessWidget { ), Padding( padding: const EdgeInsets.all(8.0), - child: EditCategoryPanel(model: model,type: EditType.update,), + child: EditCategoryPanel( + model: model, + type: EditType.update, + ), ), ], ), @@ -147,9 +147,15 @@ class CategoryPage extends StatelessWidget { } void _toDetailPage(BuildContext context, CategoryModel model) { - BlocProvider.of(context).add(EventLoadCategoryWidget(model.id!)); - context.push('/collection_widgets/${model.id}',extra: model); + Locale l = Localizations.localeOf(context); + String locale = '${l.languageCode}'; + if (l.countryCode == null) { + if (locale == 'en') { + locale += '-US'; + } + } + BlocProvider.of(context) + .add(EventLoadCategoryWidget(model.id!, locale.toLowerCase())); + context.push('/collection/widgets/${model.id}', extra: model); } - - } diff --git a/modules/widget_system/widget_module/lib/views/mobile/category_page/like_widget_page.dart b/modules/widget_system/widget_module/lib/views/mobile/category_page/like_widget_page.dart index be108c610..0284a6d04 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/category_page/like_widget_page.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/category_page/like_widget_page.dart @@ -3,15 +3,14 @@ import 'package:components/project_ui/project_ui.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:widget_module/blocs/action/widget_action.dart'; import 'package:widget_repository/widget_repository.dart'; - +import 'package:widget_ui/widget_ui.dart'; import 'package:widget_module/blocs/blocs.dart'; import '../widget_detail/collect_widget_list_item.dart'; import '../widget_detail/widget_detail_page.dart'; - - /// create by 张风捷特烈 on 2020/6/16 /// contact me by email 1981462002@qq.com /// 说明: @@ -28,7 +27,7 @@ class LikeWidgetPage extends StatelessWidget { ); final SliverGridDelegate deskGridDelegate = - const SliverGridDelegateWithFixedCrossAxisCount( + const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 3, mainAxisSpacing: 10, crossAxisSpacing: 10, @@ -37,7 +36,8 @@ class LikeWidgetPage extends StatelessWidget { @override Widget build(BuildContext context) { - return BlocBuilder(builder: (ctx, state) { + return BlocBuilder>( + builder: (ctx, state) { return CustomScrollView( slivers: [ SliverOverlapInjector( @@ -52,35 +52,32 @@ class LikeWidgetPage extends StatelessWidget { }); } - Widget _buildContent(BuildContext context, LikeWidgetState state) { + Widget _buildContent(BuildContext context, List state) { return SliverPadding( - padding: const EdgeInsets.only(top: 10, left: 10, right: 10, bottom: 0), - sliver: SliverLayoutBuilder( - builder: (_,c){ + padding: const EdgeInsets.only(top: 10, left: 10, right: 10, bottom: 0), + sliver: SliverLayoutBuilder( + builder: (_, c) { SliverGridDelegate delegate = gridDelegate; - if(c.crossAxisExtent>500){ + if (c.crossAxisExtent > 500) { delegate = deskGridDelegate; } return SliverGrid( - delegate: SliverChildBuilderDelegate( - (_, index) => GestureDetector( - onTap: () => - _toDetailPage(context, state.widgets[index]), - child: CollectWidgetListItem( - data: state.widgets[index], - onDeleteItemClick: (model) => - _deleteCollect(context, model), - )), - childCount: state.widgets.length), - gridDelegate: delegate);}, - )); + delegate: SliverChildBuilderDelegate( + (_, index) => GestureDetector( + onTap: () => _toDetailPage(context, state[index]), + child: CollectWidgetListItem( + data: state[index], + onDeleteItemClick: (model) => + context.toggleLike(model.id), + )), + childCount: state.length), + gridDelegate: delegate); + }, + )); } - _deleteCollect(BuildContext context, WidgetModel model) => - BlocProvider.of(context) - .add(ToggleLikeWidgetEvent(id: model.id)); - _toDetailPage(BuildContext context, WidgetModel model) { - Navigator.push(context, SlidePageRoute(child: WidgetDetailPageScope(model: model))); + Navigator.push( + context, SlidePageRoute(child: WidgetDetailPageScope(model: model))); } } diff --git a/modules/widget_system/widget_module/lib/views/mobile/category_page/sync/async_button.dart b/modules/widget_system/widget_module/lib/views/mobile/category_page/sync/async_button.dart index be83c4add..7acd72988 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/category_page/sync/async_button.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/category_page/sync/async_button.dart @@ -11,7 +11,7 @@ import 'package:widget_module/blocs/blocs.dart'; import 'package:storage/storage.dart'; import 'package:widget_repository/widget_repository.dart'; - +import 'package:widget_ui/widget_ui.dart'; import 'package:toly_ui/toly_ui.dart'; @@ -85,7 +85,7 @@ class _SyncCategoryButtonState extends State { CategoryRepository repository = BlocProvider.of(context).repository; await repository.syncCategoryByData(result.data!.data,result.data!.likeData); BlocProvider.of(context).add(const EventLoadCategory()); - BlocProvider.of(context).add(const EventLoadLikeData()); + context.read().loadLikeData(); } else { // 说明还没有后台数据, // 这里防止有傻孩子没点备份,就点同步,哥哥好心,给备份一下。 diff --git a/modules/widget_system/widget_module/lib/views/mobile/search_page/standard_search_page.dart b/modules/widget_system/widget_module/lib/views/mobile/search_page/standard_search_page.dart index 0dd26148d..335659242 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/search_page/standard_search_page.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/search_page/standard_search_page.dart @@ -6,9 +6,10 @@ import 'package:go_router/go_router.dart'; import 'package:widget_module/blocs/blocs.dart'; import 'package:l10n/l10n.dart'; +import 'package:widget_module/widget_module.dart'; import 'package:widget_repository/widget_repository.dart'; -import '../widget_page/mobile_widget_tiled.dart'; +import 'package:widget_ui/widget_ui.dart'; import 'standard_search_bar.dart'; // SearchPage 可以复用 WidgetsBloc,进行局部的 Bloc @@ -34,23 +35,22 @@ class StandardSearchPage extends StatelessWidget { @override Widget build(BuildContext context) { bool isDark = Theme.of(context).brightness == Brightness.dark; - + Color color = isDark + ? Theme.of(context).appBarTheme.backgroundColor ?? Colors.black + : Colors.white; return Scaffold( body: Column( children: [ - SizedBox( + Container( + color: color, height: MediaQuery.of(context).padding.top, width: MediaQuery.of(context).size.width, - child: ColoredBox( - color: isDark - ? Theme.of(context).appBarTheme.backgroundColor ?? - Colors.black - : Colors.white), ), const StandardSearchBarInner(), Expanded( child: BlocBuilder( - builder: _buildBodyByState)) + builder: _buildBodyByState, + )) ], ), ); @@ -66,16 +66,18 @@ class StandardSearchPage extends StatelessWidget { if (state is WidgetsLoaded) { if (state.widgets.isEmpty) { - return EmptyShower( - message: context.l10n.emptySearch, - ); + return EmptyShower(message: context.l10n.emptySearch); } return ListView.builder( padding: EdgeInsets.zero, - itemBuilder: (_, index) => MobileWidgetTiled( - searchArg: state.filter.name, + itemBuilder: (_, index) => Padding( + padding: const EdgeInsets.only(left: 8.0, right: 8, top: 8), + child: WidgetItem( + searchArgs: state.filter.name, model: state.widgets[index], - onTap: () => _toDetail(context, state.widgets[index])), + onWidget: context.handleWidgetAction, + ), + ), itemCount: state.widgets.length, ); } @@ -90,9 +92,4 @@ class StandardSearchPage extends StatelessWidget { return noSearchArg; } - - void _toDetail(BuildContext context, WidgetModel model) { - // BlocProvider.of(context).add(FetchWidgetDetail(model)); - context.push('/widget/detail/${model.name}', extra: model); - } } diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/category_end_drawer.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/category_end_drawer.dart index c14f6b832..1e8ae41a5 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/category_end_drawer.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/category_end_drawer.dart @@ -131,8 +131,10 @@ class _CategoryInfoState extends State { onSelected: (v) async { await repository.toggleCategory(category.id!, widget.id); _loadCategoryIds(); + String locale = context.read().language.code; + BlocProvider.of(context) - .add(EventLoadCategoryWidget(category.id!)); + .add(EventLoadCategoryWidget(category.id!, locale)); }); } diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_bar.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_bar.dart index 2af9060cd..b12089cc5 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_bar.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_bar.dart @@ -6,9 +6,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:toly_ui/toly_ui.dart'; import 'package:utils/utils.dart'; +import 'package:widget_module/blocs/action/widget_action.dart'; import 'package:widget_module/blocs/blocs.dart'; import 'package:widget_repository/widget_repository.dart'; - +import 'package:widget_ui/widget_ui.dart'; class SliverWidgetDetailBar extends StatelessWidget { final WidgetModel model; @@ -61,8 +62,8 @@ class SliverWidgetDetailBar extends StatelessWidget { actions: [ _buildToHome(context), FeedbackWidget( - onPressed: () => _toggleLikeState(context), - child: BlocConsumer( + onPressed: () => context.toggleLike(model.id), + child: BlocConsumer>( listener: _listenLikeStateChange, builder: _buildByLikeState, ), @@ -71,15 +72,10 @@ class SliverWidgetDetailBar extends StatelessWidget { ); } - void _toggleLikeState(BuildContext context) { - BlocProvider.of(context).add( - ToggleLikeWidgetEvent(id: model.id), - ); - } // 监听 LikeWidgetBloc 伺机弹出 toast - void _listenLikeStateChange(BuildContext context, LikeWidgetState state) { - bool collected = state.widgets.contains(model); + void _listenLikeStateChange(BuildContext context, List state) { + bool collected = state.contains(model); String msg = collected ? "收藏【${model.name}】组件成功!" : "已取消【${model.name}】组件收藏!"; Toast.toast( @@ -96,8 +92,8 @@ class SliverWidgetDetailBar extends StatelessWidget { } // 根据 [LikeWidgetState ] 构建图标 - Widget _buildByLikeState(BuildContext context, LikeWidgetState state) { - bool liked = state.widgets.contains(model); + Widget _buildByLikeState(BuildContext context, List state) { + bool liked = state.contains(model); return Padding( padding: const EdgeInsets.only(right: 20.0), child: Icon( diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_page.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_page.dart index c9c97f3f9..34d1db6e4 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_page.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_page.dart @@ -5,6 +5,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:l10n/l10n.dart'; +import 'package:unit_widgets_display/unit_widgets_display.dart'; import 'package:widget_repository/widget_repository.dart'; import '../../desk_ui/widget_detail/link_widget_buttons.dart'; @@ -14,7 +15,7 @@ import 'package:widget_module/blocs/blocs.dart'; import 'category_end_drawer.dart'; import 'widget_detail_bar.dart'; import 'widget_detail_panel.dart'; -import 'package:widgets/widgets.dart'; +import 'widget_fields_sliver.dart'; import 'package:tolyui/tolyui.dart'; // 用于组件详情不需要在一开始就加载 @@ -88,10 +89,12 @@ class WidgetDetailPage extends StatelessWidget { ), ), if (state is DetailWithData) - SliverNodeList( - nodes: state.nodes, - model: state.widgetModel, - ), + state.nodes.isNotEmpty + ? SliverNodeList( + nodes: state.nodes, + model: state.widgetModel, + ) + : SliverWidgetFieldsList(widgetId: model.id), ], )); } diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_panel.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_panel.dart index 96dc2abd6..cfd417555 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_panel.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_detail_panel.dart @@ -2,7 +2,7 @@ import 'package:toly_ui/toly_ui.dart'; import 'package:flutter/material.dart'; import 'package:flutter_star/flutter_star.dart'; import 'package:widget_repository/widget_repository.dart'; - +import 'package:widget_ui/widget_ui.dart'; class WidgetDetailPanel extends StatelessWidget { final WidgetModel model; @@ -11,43 +11,31 @@ class WidgetDetailPanel extends StatelessWidget { @override Widget build(BuildContext context) { + Color color = Theme.of(context).primaryColor; + return Row( children: [ _buildLeft(model, context), - _buildRight(model), + Hero( + tag: "hero_widget_image_${model.id}", + child: WidgetDetailLogo( + model: model, + background: color, + widgetName: model.name, + ), + ) ], ); } Widget _buildLeft(WidgetModel model, BuildContext context) => Expanded( - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Panel( - color: Theme.of(context).scaffoldBackgroundColor, - child: Text(model.info)), - ), - ); - - Widget _buildRight(WidgetModel model) => Column( - mainAxisSize: MainAxisSize.min, - children: [ - SizedBox( - height: 100, child: Padding( padding: const EdgeInsets.all(8.0), - child: Hero( - tag: "hero_widget_image_${model.id}", - child: ClipRRect( - borderRadius: const BorderRadius.all(Radius.circular(8)), - child: model.image == null - ? Image.asset('assets/images/caver.webp') - : Image(image: model.image!))), + child: Panel( + constraints: BoxConstraints(minHeight: 110), + alignment: Alignment.topLeft, + color: Theme.of(context).scaffoldBackgroundColor, + child: Text(model.info)), ), - ), - StarScore( - score: model.lever, - star: const Star(size: 15, fillColor: Colors.blue), - ) - ], - ); + ); } diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_fields_sliver.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_fields_sliver.dart new file mode 100644 index 000000000..17393aa59 --- /dev/null +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_detail/widget_fields_sliver.dart @@ -0,0 +1,150 @@ +import 'package:flutter/material.dart'; +import 'package:widget_repository/widget_repository.dart'; + +class SliverWidgetFieldsList extends StatefulWidget { + final int widgetId; + + const SliverWidgetFieldsList({ + super.key, + required this.widgetId, + }); + + @override + State createState() => _SliverWidgetFieldsListState(); +} + +class _SliverWidgetFieldsListState extends State { + List? _fields; + bool _isLoading = true; + + @override + void initState() { + super.initState(); + _loadFields(); + } + + Future _loadFields() async { + try { + final repository = const WidgetDbRepository(); + final fields = await repository.loadWidgetFields(widget.widgetId); + setState(() { + _isLoading = false; + _fields = fields; + }); + } catch (e) { + setState(() { + _isLoading = false; + _fields = []; + }); + } + } + + @override + Widget build(BuildContext context) { + if (_isLoading) { + return const SliverToBoxAdapter( + child: Center( + child: Padding( + padding: EdgeInsets.all(32), + child: CircularProgressIndicator(), + ), + ), + ); + } + + if (_fields!.isEmpty) { + return const SliverToBoxAdapter( + child: Center( + child: Padding( + padding: EdgeInsets.all(32), + child: Text('暂无属性信息'), + ), + ), + ); + } + + return SliverPadding( + padding: const EdgeInsets.all(16), + sliver: SliverList( + delegate: SliverChildBuilderDelegate( + (context, index) => _buildFieldItem(_fields![index]), + childCount: _fields!.length, + ), + ), + ); + } + + Widget _buildFieldItem(WidgetFieldModel field) { + return Padding( + padding: const EdgeInsets.all(12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + width: 4, + height: 20, + decoration: BoxDecoration( + color: Theme.of(context).primaryColor, + borderRadius: BorderRadius.circular(2), + ), + ), + const SizedBox(width: 12), + Expanded( + child: Text( + field.fieldName, + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 14, + color: Colors.black87, + ), + ), + ), + // if (field.isRequired) _buildRequiredBadge(), + ], + ), + const SizedBox(height: 2), + Padding( + padding: const EdgeInsets.only(left: 16), + child: Text( + field.fieldType, + style: TextStyle( + color: Theme.of(context).primaryColor, + fontSize: 14, + fontWeight: FontWeight.w600, + ), + ), + ), + if (field.fieldDescZh != null) const SizedBox(height: 8), + Text( + field.fieldDescZh!, + style: const TextStyle( + fontSize: 13, + color: Colors.grey, + height: 1.4, + ), + ), + ], + ), + ); + } + + Widget _buildRequiredBadge() { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + decoration: BoxDecoration( + color: Colors.red, + borderRadius: BorderRadius.circular(12), + ), + child: const Text( + '必需', + style: TextStyle( + color: Colors.white, + fontSize: 11, + fontWeight: FontWeight.w500, + ), + ), + ); + } +} diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_page/mobile_widget_tiled.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_page/mobile_widget_tiled.dart deleted file mode 100644 index ac1c637f8..000000000 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_page/mobile_widget_tiled.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'package:widget_repository/widget_repository.dart'; -import '../../desk_ui/widget_panel/widget_tiled.dart'; - -class MobileWidgetTiled extends StatelessWidget { - final WidgetModel model; - final VoidCallback onTap; - final String? searchArg; - - const MobileWidgetTiled({ - Key? key, - required this.model, - required this.onTap, - this.searchArg, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.only(left: 8.0, right: 8, top: 8), - child: WidgetTiled( - model: model, - onTap: onTap, - searchArg: searchArg, - ), - ); - } -} diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_page/phone_widget_content.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_page/phone_widget_content.dart index 131608018..9b1ded9a1 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_page/phone_widget_content.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_page/phone_widget_content.dart @@ -1,25 +1,26 @@ import 'package:app/app.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; +import 'package:widget_module/widget_module.dart'; import 'package:widget_repository/widget_repository.dart'; - -import 'mobile_widget_tiled.dart'; - - +import 'package:widget_ui/widget_ui.dart'; class PhoneWidgetContent extends StatelessWidget { final List items; - const PhoneWidgetContent({Key? key,required this.items}) : super(key: key); + const PhoneWidgetContent({Key? key, required this.items}) : super(key: key); @override Widget build(BuildContext context) { return SliverList( delegate: SliverChildBuilderDelegate( - (_, int index) => MobileWidgetTiled( - model: items[index], - onTap: () => _toDetail(context, items[index]), + (_, int index) => Padding( + padding: const EdgeInsets.only(left: 8.0, right: 8, top: 8), + child: WidgetItem( + model: items[index], + onWidget: context.handleWidgetAction, + ), ), childCount: items.length, ), @@ -27,7 +28,6 @@ class PhoneWidgetContent extends StatelessWidget { } void _toDetail(BuildContext context, WidgetModel model) { - context.push('/widget/detail/${model.name}',extra: model); - + context.push('/widget/detail/${model.name}', extra: model); } } diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_page.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_page.dart index 719520e9d..93f03eee7 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_page.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_page.dart @@ -13,6 +13,7 @@ import 'widget_page.dart'; class StandardHomePage extends StatefulWidget { final Widget? heard; + const StandardHomePage({super.key, this.heard}); @override @@ -21,7 +22,12 @@ class StandardHomePage extends StatefulWidget { class _StandardHomePageState extends State with SingleTickerProviderStateMixin, AutomaticKeepAliveClientMixin { - List get _tabs => [ + List get _tabs { + final provider = WidgetStatisticsProvider(); + final stats = provider.statistics; + + if (stats == null) { + return [ context.l10n.stateless, context.l10n.stateful, context.l10n.single, @@ -30,6 +36,68 @@ class _StandardHomePageState extends State context.l10n.proxy, context.l10n.other, ]; + } + + return [ + context.l10n.stateless, + context.l10n.stateful, + context.l10n.single, + context.l10n.multi, + context.l10n.sliver, + context.l10n.proxy, + context.l10n.other, + ]; + } + + ValueNotifier indexValue = ValueNotifier(0); + + List _buildTabWidgets() { + final provider = WidgetStatisticsProvider(); + final stats = provider.statistics; + final counts = [ + stats?.familyCount[WidgetFamily.stateless] ?? 0, + stats?.familyCount[WidgetFamily.stateful] ?? 0, + stats?.familyCount[WidgetFamily.singleChildRender] ?? 0, + stats?.familyCount[WidgetFamily.multiChildRender] ?? 0, + stats?.familyCount[WidgetFamily.sliver] ?? 0, + stats?.familyCount[WidgetFamily.proxy] ?? 0, + stats?.familyCount[WidgetFamily.other] ?? 0, + ]; + + return List.generate( + _tabs.length, + (index) => ValueListenableBuilder( + valueListenable: indexValue, + builder: (context, value, __) { + return Stack( + clipBehavior: Clip.none, + children: [ + Text(_tabs[index]), + if (value == index) + Positioned( + right: -10, + top: -6, + child: Container( + padding: const EdgeInsets.symmetric( + horizontal: 6, vertical: 3), + decoration: BoxDecoration( + color: Theme.of(context) + .primaryColor + .withValues(alpha: 0.6), + borderRadius: BorderRadius.circular(6), + ), + child: Text('${counts[index]}', + style: const TextStyle( + fontFamily: '黑体', + height: 1, + fontSize: 9, + color: Colors.white)), + ), + ), + ], + ); + })); + } late TabController tabController; @@ -37,12 +105,15 @@ class _StandardHomePageState extends State void initState() { super.initState(); tabController = TabController(length: 7, vsync: this); + tabController.addListener(_onChange); } int maxCount = 60; @override void dispose() { + tabController.removeListener(_onChange); + tabController.dispose(); super.dispose(); } @@ -122,7 +193,9 @@ class _StandardHomePageState extends State indicatorWeight: 3, unselectedLabelColor: Colors.grey, indicatorColor: themeColor, - tabs: _tabs.map((String name) => Tab(text: name)).toList(), + tabs: _buildTabWidgets() + .map((Widget widget) => Tab(child: widget)) + .toList(), )), // handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), // ), @@ -131,4 +204,8 @@ class _StandardHomePageState extends State @override bool get wantKeepAlive => true; + + void _onChange() { + indexValue.value = tabController.index; + } } diff --git a/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_search.dart b/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_search.dart index b9c59a8bd..174f01dfc 100644 --- a/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_search.dart +++ b/modules/widget_system/widget_module/lib/views/mobile/widget_page/standard_home_search.dart @@ -94,6 +94,6 @@ class StandardHomeSearch extends StatelessWidget } void _openDrawer(BuildContext context) { - Scaffold.of(context).openDrawer(); + // Scaffold.of(context).openDrawer(); } } diff --git a/modules/widget_system/widget_module/lib/views/widgets_bloc_provider.dart b/modules/widget_system/widget_module/lib/views/widgets_bloc_provider.dart index f3aa6314c..3dc693d02 100644 --- a/modules/widget_system/widget_module/lib/views/widgets_bloc_provider.dart +++ b/modules/widget_system/widget_module/lib/views/widgets_bloc_provider.dart @@ -1,11 +1,10 @@ -import 'package:app/app.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; - +import 'package:fx_platform_adapter/fx_platform_adapter.dart'; +import 'package:widget_ui/widget_ui.dart'; import '../blocs/blocs.dart'; import 'package:widget_repository/widget_repository.dart'; - class WidgetsBlocProvider extends StatefulWidget { final Widget child; @@ -17,7 +16,8 @@ class WidgetsBlocProvider extends StatefulWidget { class _WidgetsBlocProviderState extends State { late WidgetRepository repository; - final CategoryBloc categoryBloc = CategoryBloc(repository: CategoryDbRepository()); + final CategoryBloc categoryBloc = + CategoryBloc(repository: CategoryDbRepository()); @override void initState() { @@ -33,9 +33,11 @@ class _WidgetsBlocProviderState extends State { Widget build(BuildContext context) { return MultiBlocProvider( providers: [ - BlocProvider(create: (_) => WidgetsBloc(repository: repository)), + BlocProvider( + create: (_) => WidgetsBloc(repository: repository)), BlocProvider(create: (_) => categoryBloc), - BlocProvider(create: (_) => LikeWidgetBloc(repository: repository)), + BlocProvider( + create: (_) => LikeWidgetBloc(repository: repository)), BlocProvider( create: (_) => CategoryWidgetBloc(categoryBloc: categoryBloc)), ], @@ -43,7 +45,6 @@ class _WidgetsBlocProviderState extends State { ); } - @override void dispose() { categoryBloc.close(); diff --git a/modules/widget_system/widget_module/lib/widget_module.dart b/modules/widget_system/widget_module/lib/widget_module.dart index 90affcabf..05012141f 100644 --- a/modules/widget_system/widget_module/lib/widget_module.dart +++ b/modules/widget_system/widget_module/lib/widget_module.dart @@ -4,7 +4,9 @@ export 'views/desk_ui/desk_ui.dart'; export 'views/mobile/mobile_ui.dart'; export 'views/widgets_bloc_provider.dart'; export 'event/widget_event.dart'; +export 'event/widget_statistics_event.dart'; export 'blocs/action/widget_action.dart'; +export 'package:widget_ui/widget_ui.dart' show LikeWidgetBloc; export 'package:widget_repository/widget_repository.dart' show WidgetFilter, diff --git a/modules/widget_system/widget_module/pubspec.yaml b/modules/widget_system/widget_module/pubspec.yaml index 63ee4db3a..0add345f4 100644 --- a/modules/widget_system/widget_module/pubspec.yaml +++ b/modules/widget_system/widget_module/pubspec.yaml @@ -11,10 +11,14 @@ resolution: workspace dependencies: flutter: sdk: flutter + unit_widgets_display: ^0.0.1+2 + widget_ui: + path: ../widget_ui widget_repository: path: ../widget_repository - +#dependency_overrides: +# intl: 0.19.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/modules/widget_system/widget_repository/doc/tables_overview.md b/modules/widget_system/widget_repository/doc/tables_overview.md new file mode 100644 index 000000000..2770af6d5 --- /dev/null +++ b/modules/widget_system/widget_repository/doc/tables_overview.md @@ -0,0 +1,110 @@ +# 数据表结构总览 + +## 核心表 (6张) + +### 1. widget - Widget基本信息 +```sql +CREATE TABLE widget( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name VARCHAR(64) NOT NULL UNIQUE, + path TEXT NOT NULL, + is_abstract INTEGER NOT NULL DEFAULT 0, + is_private INTEGER NOT NULL DEFAULT 0, + deprecated INTEGER DEFAULT 0, + family INTEGER NOT NULL, + lever FLOAT(2) NOT NULL, + linkWidget TEXT DEFAULT '' +); +``` + +### 2. widget_inheritance - Widget继承关系 +```sql +CREATE TABLE widget_inheritance ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + widget_id INTEGER NOT NULL, + parent_name TEXT NOT NULL, + inheritance_order INTEGER NOT NULL +); +``` + +### 3. widget_fields - Widget字段信息 +```sql +CREATE TABLE widget_fields ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + widget_id INTEGER NOT NULL, + field_name TEXT NOT NULL, + field_type TEXT NOT NULL, + field_desc TEXT, + field_desc_zh TEXT, + field_order INTEGER NOT NULL, + is_required INTEGER NOT NULL DEFAULT 0 +); +``` + +### 4. widget_desc - Widget描述信息 +```sql +CREATE TABLE widget_desc( + id INTEGER PRIMARY KEY AUTOINCREMENT, + widget_id INTEGER NOT NULL, + name VARCHAR(128) NOT NULL, + info TEXT NOT NULL, + locale VARCHAR(16) DEFAULT 'zh-cn' +); +``` + +### 5. node - 示例代码节点 +```sql +CREATE TABLE node( + id INTEGER PRIMARY KEY AUTOINCREMENT, + widgetId INTEGER NOT NULL, + priority INTEGER DEFAULT 0, + code TEXT NOT NULL +); +``` + +### 6. node_desc - 节点描述信息 +```sql +CREATE TABLE node_desc( + id INTEGER PRIMARY KEY AUTOINCREMENT, + node_id INTEGER NOT NULL, + name VARCHAR(128) NOT NULL, + subtitle TEXT NOT NULL, + locale VARCHAR(16) DEFAULT 'zh-cn' +); +``` + +## 扩展表 (2张) + +### 7. category - Widget分类 +```sql +CREATE TABLE category( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name VARCHAR(64) NOT NULL UNIQUE, + type INTEGER DEFAULT 0, + color VARCHAR(9) DEFAULT '#FF2196F3', + info VARCHAR(256) DEFAULT '这里什么都没有...', + created DATETIME NOT NULL, + updated DATETIME NOT NULL, + priority INTEGER DEFAULT 0, + image VARCHAR(128) DEFAULT '' +); +``` + +### 8. category_widget - 分类Widget关联 +```sql +CREATE TABLE category_widget( + id INTEGER PRIMARY KEY AUTOINCREMENT, + categoryId INTEGER NOT NULL, + widgetId INTEGER NOT NULL +); +``` + +## 表关系图 +``` +widget (1) ←→ (N) widget_inheritance +widget (1) ←→ (N) widget_fields +widget (1) ←→ (N) widget_desc +widget (1) ←→ (N) node +node (1) ←→ (N) node_desc +widget (N) ←→ (N) category [through category_widget] +``` \ No newline at end of file diff --git a/modules/widget_system/widget_repository/lib/src/database/dao/category_dao.dart b/modules/widget_system/widget_repository/lib/src/database/dao/category_dao.dart index 43990a561..9f4b6f7ce 100644 --- a/modules/widget_system/widget_repository/lib/src/database/dao/category_dao.dart +++ b/modules/widget_system/widget_repository/lib/src/database/dao/category_dao.dart @@ -168,13 +168,15 @@ class CategoryDao extends Dao { await toggleCollect(1, widgetId); } - Future>> loadCollectWidgets(int categoryId) async { + Future>> loadCollectWidgets(int categoryId, [String locale = 'zh-cn']) async { String querySql = - "SELECT * FROM widget " - "WHERE id IN (SELECT widgetId FROM category_widget WHERE categoryId = ?) " - "ORDER BY lever DESC"; + "SELECT w.*, wd.name as localeName, wd.info as info " + "FROM widget w " + "LEFT JOIN widget_desc wd ON w.id = wd.widget_id AND wd.locale = ? " + "WHERE w.id IN (SELECT widgetId FROM category_widget WHERE categoryId = ?) " + "ORDER BY w.lever DESC"; - return await database.rawQuery(querySql, [categoryId]); + return await database.rawQuery(querySql, [locale, categoryId]); } Future> loadCollectWidgetIds(int categoryId) async { diff --git a/modules/widget_system/widget_repository/lib/src/database/dao/like_dao.dart b/modules/widget_system/widget_repository/lib/src/database/dao/like_dao.dart index f533415d1..210a207f9 100644 --- a/modules/widget_system/widget_repository/lib/src/database/dao/like_dao.dart +++ b/modules/widget_system/widget_repository/lib/src/database/dao/like_dao.dart @@ -8,7 +8,13 @@ class LikeDao extends Dao { String get name => 'like_widget'; Future> likeWidgetIds() async { - var result = await database.rawQuery("SELECT widget_id FROM like_widget"); + String sql = """ +SELECT cw.widgetId as widget_id +FROM category c +JOIN category_widget cw ON c.id = cw.categoryId +WHERE c.type = 1; + """; + var result = await database.rawQuery(sql); var ids = result.map((e) => e['widget_id'] as int).toList(); return ids; } @@ -31,12 +37,12 @@ class LikeDao extends Dao { bool liked = await isLiked(widgetId); if (liked) return 0; } + String sql = """ +INSERT INTO category_widget (categoryId, widgetId) +SELECT id, ? FROM category WHERE type = 1; + """; - return await database.rawInsert( - "INSERT INTO " - "like_widget(widget_id) " - "VALUES (?);", - [widgetId]); + return await database.rawInsert(sql, [widgetId]); } Future unlike(int widgetId, {bool check = true}) async { @@ -45,21 +51,28 @@ class LikeDao extends Dao { bool liked = await isLiked(widgetId); if (!liked) return; } - await database.execute( - "DELETE FROM like_widget " - "WHERE widget_id = ?", - [widgetId]); + String sql = """ +DELETE FROM category_widget +WHERE categoryId IN (SELECT id FROM category WHERE type = 1) +AND widgetId = ?; + """; + await database.execute(sql, [widgetId]); } // 判断组件是否已 liked Future isLiked(int widgetId) async { - var data = await database.rawQuery( - "Select count(id) as `count` FROM like_widget " - "WHERE widget_id = ?", - [widgetId]); + String sql = """ +SELECT EXISTS( + SELECT 1 + FROM category c + JOIN category_widget cw ON c.id = cw.categoryId + WHERE c.type = 1 AND cw.widgetId = ? +) as is_liked; + """; + var data = await database.rawQuery(sql, [widgetId]); if (data.isNotEmpty) { var result = data[0]; - return result['count'] as int > 0; + return result['is_liked'] != 0; } return false; } diff --git a/modules/widget_system/widget_repository/lib/src/database/dao/widget_dao.dart b/modules/widget_system/widget_repository/lib/src/database/dao/widget_dao.dart index debeeefeb..337af7b4d 100644 --- a/modules/widget_system/widget_repository/lib/src/database/dao/widget_dao.dart +++ b/modules/widget_system/widget_repository/lib/src/database/dao/widget_dao.dart @@ -125,4 +125,14 @@ widget_desc.locale = ? } return null; } + + Future>> queryWidgetFields(int widgetId) async { + String sql = """ +SELECT * +FROM widget_fields +WHERE widget_id = ? +ORDER BY is_required DESC, field_order ASC +"""; + return database.rawQuery(sql, [widgetId]); + } } diff --git a/modules/widget_system/widget_repository/lib/src/database/dao/widget_statistics_dao.dart b/modules/widget_system/widget_repository/lib/src/database/dao/widget_statistics_dao.dart new file mode 100644 index 000000000..0b9adfa69 --- /dev/null +++ b/modules/widget_system/widget_repository/lib/src/database/dao/widget_statistics_dao.dart @@ -0,0 +1,93 @@ +import 'package:fx_dao/fx_dao.dart'; + +class WidgetStatisticsDao extends Dao { + @override + String get createSql => ''; + + @override + String get name => 'widget_statistics'; + + /// 获取各Family对应的组件数量 + Future> getFamilyCount() async { + String sql = ''' + SELECT family, COUNT(*) as count + FROM widget + GROUP BY family + '''; + + List> result = await database.rawQuery(sql); + Map familyCount = {}; + + for (var row in result) { + familyCount[row['family'] as int] = row['count'] as int; + } + + return familyCount; + } + + /// 获取总组件数量 + Future getTotalWidgets() async { + String sql = 'SELECT COUNT(*) as count FROM widget'; + List> result = await database.rawQuery(sql); + return result.first['count'] as int; + } + + /// 获取总字段数量 + Future getTotalFields() async { + String sql = 'SELECT COUNT(*) as count FROM widget_fields'; + List> result = await database.rawQuery(sql); + return result.first['count'] as int; + } + + /// 获取星级分布 + Future> getLeverDistribution() async { + String sql = ''' + SELECT CAST(lever as INTEGER) as lever_int, COUNT(*) as count + FROM widget + GROUP BY CAST(lever as INTEGER) + '''; + + List> result = await database.rawQuery(sql); + Map leverDistribution = {}; + + for (var row in result) { + leverDistribution[row['lever_int'] as int] = row['count'] as int; + } + + return leverDistribution; + } + + /// 获取平均字段数量 + Future getAverageFields() async { + String sql = ''' + SELECT AVG(field_count) as avg_fields + FROM ( + SELECT widget_id, COUNT(*) as field_count + FROM widget_fields + GROUP BY widget_id + ) + '''; + + List> result = await database.rawQuery(sql); + var avgFields = result.first['avg_fields']; + return avgFields != null ? (avgFields as num).toDouble() : 0.0; + } + + /// 获取每个组件的属性个数 + Future> getWidgetFieldsCount() async { + String sql = ''' + SELECT widget_id, COUNT(*) as field_count + FROM widget_fields + GROUP BY widget_id + '''; + + List> result = await database.rawQuery(sql); + Map fieldsCount = {}; + + for (var row in result) { + fieldsCount[row['widget_id'] as int] = row['field_count'] as int; + } + + return fieldsCount; + } +} \ No newline at end of file diff --git a/modules/widget_system/widget_repository/lib/src/database/database.dart b/modules/widget_system/widget_repository/lib/src/database/database.dart index 03fed7c20..13eea01a5 100644 --- a/modules/widget_system/widget_repository/lib/src/database/database.dart +++ b/modules/widget_system/widget_repository/lib/src/database/database.dart @@ -6,6 +6,7 @@ export 'dao/like_dao.dart'; export 'dao/node_dao.dart'; export 'dao/widget_dao.dart'; export 'dao/category_dao.dart'; +export 'dao/widget_statistics_dao.dart'; export 'db_impl/category_db_repository.dart'; export 'db_impl/node_db_repository.dart'; diff --git a/modules/widget_system/widget_repository/lib/src/database/db_impl/category_db_repository.dart b/modules/widget_system/widget_repository/lib/src/database/db_impl/category_db_repository.dart index 456c216d4..cb94f5f14 100644 --- a/modules/widget_system/widget_repository/lib/src/database/db_impl/category_db_repository.dart +++ b/modules/widget_system/widget_repository/lib/src/database/db_impl/category_db_repository.dart @@ -38,9 +38,10 @@ class CategoryDbRepository implements CategoryRepository { } @override - Future> loadCategoryWidgets({int categoryId = 0}) async { + Future> loadCategoryWidgets( + {int categoryId = 0, String locale = 'zh-cn'}) async { List> rawData = - await categoryDao.loadCollectWidgets(categoryId); + await categoryDao.loadCollectWidgets(categoryId, locale); List widgets = rawData.map((e) => WidgetPo.fromJson(e)).toList(); return widgets.map(WidgetModel.fromPo).toList(); } @@ -74,7 +75,8 @@ class CategoryDbRepository implements CategoryRepository { for (int i = 0; i < data.length; i++) { List ids = await categoryDao.loadCollectWidgetIds(data[i]['id']); - collects.add(CategoryTo(widgetIds: ids, model: CategoryPo.fromJson(data[i]))); + collects + .add(CategoryTo(widgetIds: ids, model: CategoryPo.fromJson(data[i]))); if (i == data.length - 1) { completer.complete(collects); } diff --git a/modules/widget_system/widget_repository/lib/src/database/db_impl/node_db_repository.dart b/modules/widget_system/widget_repository/lib/src/database/db_impl/node_db_repository.dart index 743fb4caa..617d8ee68 100644 --- a/modules/widget_system/widget_repository/lib/src/database/db_impl/node_db_repository.dart +++ b/modules/widget_system/widget_repository/lib/src/database/db_impl/node_db_repository.dart @@ -1,18 +1,20 @@ - import 'package:storage/storage.dart'; import 'package:widget_repository/widget_repository.dart'; -class NodeDbRepository implements NodeRepository{ - +class NodeDbRepository implements NodeRepository { const NodeDbRepository(); NodeDao get nodeDao => AppStorage().flutter(); @override - Future> loadNode(int widgetId,{String? locale}) async{ - List> data = await nodeDao.queryById(widgetId,locale: locale); - List nodes = data.map((e) => NodeModel.fromJson(e)).toList(); + Future> loadNode(int widgetId, {String? locale}) async { + List> data = + await nodeDao.queryById(widgetId, locale: locale); + List nodes = []; + for (int i = 0; i < data.length; i++) { + Map e = data[i]; + nodes.add(NodeModel.fromJson(e, i)); + } return nodes; } - -} \ No newline at end of file +} diff --git a/modules/widget_system/widget_repository/lib/src/database/db_impl/widget_db_repository.dart b/modules/widget_system/widget_repository/lib/src/database/db_impl/widget_db_repository.dart index 3f2bef0eb..e132cb68d 100644 --- a/modules/widget_system/widget_repository/lib/src/database/db_impl/widget_db_repository.dart +++ b/modules/widget_system/widget_repository/lib/src/database/db_impl/widget_db_repository.dart @@ -64,4 +64,10 @@ class WidgetDbRepository implements WidgetRepository { } return null; } + + @override + Future> loadWidgetFields(int widgetId) async { + List> data = await widgetDao.queryWidgetFields(widgetId); + return data.map((e) => WidgetFieldModel.fromJson(e)).toList(); + } } diff --git a/modules/widget_system/widget_repository/lib/src/database/po/widget_po.dart b/modules/widget_system/widget_repository/lib/src/database/po/widget_po.dart index c90072f11..cfea36dc1 100644 --- a/modules/widget_system/widget_repository/lib/src/database/po/widget_po.dart +++ b/modules/widget_system/widget_repository/lib/src/database/po/widget_po.dart @@ -1,4 +1,3 @@ - /// create by 张风捷特烈 on 2020-03-04 /// contact me by email 1981462002@qq.com /// 说明: 组件信息-数据库-数据模型 @@ -28,12 +27,12 @@ class WidgetPo { return WidgetPo( id: map['id'], name: map['name'], - nameCN: map["nameCN"], - family: map["family"], + nameCN: map["nameCN"] ?? map['localeName'] ?? '', + family: map["family"] ?? '', deprecated: map["deprecated"] ?? 0, lever: map["lever"].toDouble(), - linkWidget: map["linkWidget"], - info: map["info"]); + linkWidget: map["linkWidget"] ?? '', + info: map["info"] ?? ''); } factory WidgetPo.fromDesc(Map map) { @@ -70,4 +69,3 @@ class WidgetPo { List get props => [id, name, nameCN, deprecated, family, linkWidget, lever, info]; } - diff --git a/modules/widget_system/widget_repository/lib/src/memory/memory_widget_repository.dart b/modules/widget_system/widget_repository/lib/src/memory/memory_widget_repository.dart index 955d418b4..fa1993a34 100644 --- a/modules/widget_system/widget_repository/lib/src/memory/memory_widget_repository.dart +++ b/modules/widget_system/widget_repository/lib/src/memory/memory_widget_repository.dart @@ -5,7 +5,6 @@ import 'package:widget_repository/widget_repository.dart'; import '../model/widget_filter.dart'; import '../repository/widget_repository.dart'; - /// create by 张风捷特烈 on 2020-03-03 /// contact me by email 1981462002@qq.com /// 说明 : Widget 数据仓库 @@ -30,21 +29,25 @@ class MemoryWidgetRepository implements WidgetRepository { @override Future> searchWidgets(WidgetFilter args) async { await _initData(); - var result = widgets.map(WidgetModel.fromPo).where((e) => checkSearch(e, args)).toList(); + var result = widgets + .map(WidgetModel.fromPo) + .where((e) => checkSearch(e, args)) + .toList(); result.sort((a, b) => b.lever.compareTo(a.lever)); return result; } bool checkSearch(WidgetModel model, WidgetFilter args) { bool nameMatch = model.name.toLowerCase().contains(args.name.toLowerCase()); - bool nameCNMatch = model.nameCN.toLowerCase().contains(args.name.toLowerCase()); + bool nameCNMatch = + model.nameCN.toLowerCase().contains(args.name.toLowerCase()); bool familyMatch = model.family == args.family; return nameMatch || nameCNMatch || familyMatch; } @override - Future> loadWidget(List id,String? locale) async { + Future> loadWidget(List id, String? locale) async { await _initData(); var data = widgets.where((element) => id.contains(element.id)); return data.map(WidgetModel.fromPo).toList(); @@ -58,8 +61,9 @@ class MemoryWidgetRepository implements WidgetRepository { @override Future queryWidgetByName(String? name) async { await _initData(); - Iterable ret = - widgets.map(WidgetModel.fromPo).where((element) => element.name == name); + Iterable ret = widgets + .map(WidgetModel.fromPo) + .where((element) => element.name == name); if (ret.isNotEmpty) { return ret.first; } @@ -78,4 +82,10 @@ class MemoryWidgetRepository implements WidgetRepository { Future collected(int id) async { return 0; } + + @override + Future> loadWidgetFields(int widgetId) { + // TODO: implement loadWidgetFields + throw UnimplementedError(); + } } diff --git a/modules/widget_system/widget_repository/lib/src/model/model.dart b/modules/widget_system/widget_repository/lib/src/model/model.dart index 399e0f3c6..900537b01 100644 --- a/modules/widget_system/widget_repository/lib/src/model/model.dart +++ b/modules/widget_system/widget_repository/lib/src/model/model.dart @@ -1,4 +1,6 @@ export 'node_model.dart'; export 'widget_model.dart'; export 'category_model.dart'; -export 'widget_filter.dart'; \ No newline at end of file +export 'widget_filter.dart'; +export 'widget_statistics.dart'; +export 'widget_field_model.dart'; \ No newline at end of file diff --git a/modules/widget_system/widget_repository/lib/src/model/node_model.dart b/modules/widget_system/widget_repository/lib/src/model/node_model.dart index b74a45f33..4cee384a5 100644 --- a/modules/widget_system/widget_repository/lib/src/model/node_model.dart +++ b/modules/widget_system/widget_repository/lib/src/model/node_model.dart @@ -38,12 +38,12 @@ class NodeModel extends Equatable { return NodeType.display; } - factory NodeModel.fromJson(Map map) { + factory NodeModel.fromJson(Map map, int index) { return NodeModel( name: map['name'], subtitle: map["subtitle"], code: map["code"], - priority: map['priority']); + priority: index); } @override diff --git a/modules/widget_system/widget_repository/lib/src/model/widget_field_model.dart b/modules/widget_system/widget_repository/lib/src/model/widget_field_model.dart new file mode 100644 index 000000000..6d41090ee --- /dev/null +++ b/modules/widget_system/widget_repository/lib/src/model/widget_field_model.dart @@ -0,0 +1,49 @@ +import 'package:equatable/equatable.dart'; + +/// Widget字段模型 +class WidgetFieldModel extends Equatable { + final int id; + final int widgetId; + final String fieldName; + final String fieldType; + final String? fieldDesc; + final String? fieldDescZh; + final int fieldOrder; + final bool isRequired; + + const WidgetFieldModel({ + required this.id, + required this.widgetId, + required this.fieldName, + required this.fieldType, + this.fieldDesc, + this.fieldDescZh, + required this.fieldOrder, + required this.isRequired, + }); + + @override + List get props => [ + id, + widgetId, + fieldName, + fieldType, + fieldDesc, + fieldDescZh, + fieldOrder, + isRequired, + ]; + + factory WidgetFieldModel.fromJson(Map json) { + return WidgetFieldModel( + id: json['id'], + widgetId: json['widget_id'], + fieldName: json['field_name'], + fieldType: json['field_type'], + fieldDesc: json['field_desc'], + fieldDescZh: json['field_desc_zh'], + fieldOrder: json['field_order'], + isRequired: json['is_required'] == 1, + ); + } +} \ No newline at end of file diff --git a/modules/widget_system/widget_repository/lib/src/model/widget_model.dart b/modules/widget_system/widget_repository/lib/src/model/widget_model.dart index ae2bd01ed..7c422fb16 100644 --- a/modules/widget_system/widget_repository/lib/src/model/widget_model.dart +++ b/modules/widget_system/widget_repository/lib/src/model/widget_model.dart @@ -33,18 +33,19 @@ class WidgetModel extends Equatable { String get heroId => 'hero_widget_image_$id'; - const WidgetModel( - {required this.id, - required this.name, - required this.nameCN, - required this.family, - this.deprecated = false, - this.death = false, - required this.links, - // required this.type, - required this.lever, - this.image, - required this.info}); + const WidgetModel({ + required this.id, + required this.name, + required this.nameCN, + required this.family, + this.deprecated = false, + this.death = false, + required this.links, + // required this.type, + required this.lever, + this.image, + required this.info, + }); @override List get props => [id]; diff --git a/modules/widget_system/widget_repository/lib/src/model/widget_statistics.dart b/modules/widget_system/widget_repository/lib/src/model/widget_statistics.dart new file mode 100644 index 000000000..7b9d70b18 --- /dev/null +++ b/modules/widget_system/widget_repository/lib/src/model/widget_statistics.dart @@ -0,0 +1,52 @@ +import 'package:equatable/equatable.dart'; +import 'widget_filter.dart'; + +/// Widget统计数据模型 +class WidgetStatistics extends Equatable { + /// 各Family对应的组件数量 + final Map familyCount; + + /// 总组件数量 + final int totalWidgets; + + /// 总字段数量 + final int totalFields; + + /// 平均字段数量 + final double averageFields; + + /// 星级分布 (1-5星对应的组件数量) + final Map leverDistribution; + + /// 每个组件的属性个数 (widgetId -> 属性个数) + final Map widgetFieldsCount; + + const WidgetStatistics({ + required this.familyCount, + required this.totalWidgets, + required this.totalFields, + required this.averageFields, + required this.leverDistribution, + required this.widgetFieldsCount, + }); + + @override + List get props => [ + familyCount, + totalWidgets, + totalFields, + averageFields, + leverDistribution, + widgetFieldsCount, + ]; + + /// 获取指定组件的属性个数 + int getWidgetFieldCount(int widgetId) { + return widgetFieldsCount[widgetId] ?? 0; + } + + @override + String toString() { + return 'WidgetStatistics{familyCount: $familyCount, totalWidgets: $totalWidgets, totalFields: $totalFields, averageFields: $averageFields, leverDistribution: $leverDistribution, widgetFieldsCount: ${widgetFieldsCount.length} widgets}'; + } +} \ No newline at end of file diff --git a/modules/widget_system/widget_repository/lib/src/repository/repository.dart b/modules/widget_system/widget_repository/lib/src/repository/repository.dart index 2f73ddde4..e7464d8aa 100644 --- a/modules/widget_system/widget_repository/lib/src/repository/repository.dart +++ b/modules/widget_system/widget_repository/lib/src/repository/repository.dart @@ -1,3 +1,5 @@ export 'category_repository.dart'; export 'node_repository.dart'; -export 'widget_repository.dart'; \ No newline at end of file +export 'widget_repository.dart'; +export 'widget_statistics_service.dart'; +export 'widget_statistics_provider.dart'; \ No newline at end of file diff --git a/modules/widget_system/widget_repository/lib/src/repository/widget_repository.dart b/modules/widget_system/widget_repository/lib/src/repository/widget_repository.dart index 684d91099..9ffbfe3a9 100644 --- a/modules/widget_system/widget_repository/lib/src/repository/widget_repository.dart +++ b/modules/widget_system/widget_repository/lib/src/repository/widget_repository.dart @@ -21,4 +21,6 @@ abstract class WidgetRepository { Future> loadLikeWidgets(); Future collected(int id); + + Future> loadWidgetFields(int widgetId); } diff --git a/modules/widget_system/widget_repository/lib/src/repository/widget_statistics_provider.dart b/modules/widget_system/widget_repository/lib/src/repository/widget_statistics_provider.dart new file mode 100644 index 000000000..ac74cf978 --- /dev/null +++ b/modules/widget_system/widget_repository/lib/src/repository/widget_statistics_provider.dart @@ -0,0 +1,90 @@ +import 'package:flutter/foundation.dart'; +import '../../widget_repository.dart'; +import '../model/widget_statistics.dart'; +import 'widget_statistics_service.dart'; + +/// 全局统计数据提供器 +class WidgetStatisticsProvider extends ChangeNotifier { + static final WidgetStatisticsProvider _instance = + WidgetStatisticsProvider._internal(); + factory WidgetStatisticsProvider() => _instance; + WidgetStatisticsProvider._internal(); + + WidgetStatistics? _statistics; + bool _isLoaded = false; + + WidgetStatistics? get statistics => _statistics; + bool get isLoaded => _isLoaded; + + /// 加载统计数据 + Future loadStatistics(WidgetStatisticsDao dao) async { + if (_isLoaded) return; + + final stopwatch = Stopwatch()..start(); + try { + _statistics = await getStatistics(dao); + _isLoaded = true; + stopwatch.stop(); + debugPrint('统计数据加载耗时: ${stopwatch.elapsedMilliseconds} ms'); + notifyListeners(); + } catch (e) { + stopwatch.stop(); + debugPrint('加载统计数据失败: $e (耗时: ${stopwatch.elapsedMilliseconds} ms)'); + } + } + + /// 获取Widget统计数据 + Future getStatistics(WidgetStatisticsDao dao) async { + final results = await Future.wait([ + dao.getFamilyCount(), + dao.getTotalWidgets(), + dao.getTotalFields(), + dao.getAverageFields(), + dao.getLeverDistribution(), + dao.getWidgetFieldsCount(), + ]); + + final rawFamilyCount = results[0] as Map; + final totalWidgets = results[1] as int; + final totalFields = results[2] as int; + final averageFields = results[3] as double; + final leverDistribution = results[4] as Map; + final widgetFieldsCount = results[5] as Map; + + final familyCount = {}; + for (var entry in rawFamilyCount.entries) { + final family = _intToWidgetFamily(entry.key); + familyCount[family] = entry.value; + } + + return WidgetStatistics( + familyCount: familyCount, + totalWidgets: totalWidgets, + totalFields: totalFields, + averageFields: averageFields, + leverDistribution: leverDistribution, + widgetFieldsCount: widgetFieldsCount, + ); + } + + WidgetFamily _intToWidgetFamily(int index) { + switch (index) { + case 0: + return WidgetFamily.stateless; + case 1: + return WidgetFamily.stateful; + case 2: + return WidgetFamily.singleChildRender; + case 3: + return WidgetFamily.multiChildRender; + case 4: + return WidgetFamily.sliver; + case 5: + return WidgetFamily.proxy; + case 6: + return WidgetFamily.other; + default: + return WidgetFamily.stateless; + } + } +} diff --git a/modules/widget_system/widget_repository/lib/src/repository/widget_statistics_service.dart b/modules/widget_system/widget_repository/lib/src/repository/widget_statistics_service.dart new file mode 100644 index 000000000..f5812e18c --- /dev/null +++ b/modules/widget_system/widget_repository/lib/src/repository/widget_statistics_service.dart @@ -0,0 +1,57 @@ +import '../model/widget_statistics.dart'; +import '../database/dao/widget_statistics_dao.dart'; +import '../model/widget_filter.dart'; + +/// Widget统计服务 +class WidgetStatisticsService { + final WidgetStatisticsDao dao; + + const WidgetStatisticsService({required this.dao}); + + /// 获取Widget统计数据 + Future getStatistics() async { + final results = await Future.wait([ + dao.getFamilyCount(), + dao.getTotalWidgets(), + dao.getTotalFields(), + dao.getAverageFields(), + dao.getLeverDistribution(), + dao.getWidgetFieldsCount(), + ]); + + final rawFamilyCount = results[0] as Map; + final totalWidgets = results[1] as int; + final totalFields = results[2] as int; + final averageFields = results[3] as double; + final leverDistribution = results[4] as Map; + final widgetFieldsCount = results[5] as Map; + + final familyCount = {}; + for (var entry in rawFamilyCount.entries) { + final family = _intToWidgetFamily(entry.key); + familyCount[family] = entry.value; + } + + return WidgetStatistics( + familyCount: familyCount, + totalWidgets: totalWidgets, + totalFields: totalFields, + averageFields: averageFields, + leverDistribution: leverDistribution, + widgetFieldsCount: widgetFieldsCount, + ); + } + + WidgetFamily _intToWidgetFamily(int index) { + switch (index) { + case 0: return WidgetFamily.stateless; + case 1: return WidgetFamily.stateful; + case 2: return WidgetFamily.singleChildRender; + case 3: return WidgetFamily.multiChildRender; + case 4: return WidgetFamily.sliver; + case 5: return WidgetFamily.proxy; + case 6: return WidgetFamily.other; + default: return WidgetFamily.stateless; + } + } +} \ No newline at end of file diff --git a/modules/widget_system/widgets/.gitignore b/modules/widget_system/widget_ui/.gitignore similarity index 91% rename from modules/widget_system/widgets/.gitignore rename to modules/widget_system/widget_ui/.gitignore index a17a495d3..eb6c05cd3 100644 --- a/modules/widget_system/widgets/.gitignore +++ b/modules/widget_system/widget_ui/.gitignore @@ -26,6 +26,6 @@ migrate_working_dir/ /pubspec.lock **/doc/api/ .dart_tool/ -.packages +.flutter-plugins +.flutter-plugins-dependencies build/ -example/ \ No newline at end of file diff --git a/modules/widget_system/widgets/.metadata b/modules/widget_system/widget_ui/.metadata similarity index 76% rename from modules/widget_system/widgets/.metadata rename to modules/widget_system/widget_ui/.metadata index 541c2f65c..ab15d7afa 100644 --- a/modules/widget_system/widgets/.metadata +++ b/modules/widget_system/widget_ui/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled and should not be manually edited. version: - revision: 135454af32477f815a7525073027a3ff9eff1bfd - channel: stable + revision: "c519ee916eaeb88923e67befb89c0f1dabfa83e6" + channel: "stable" project_type: package diff --git a/modules/widget_system/widgets/CHANGELOG.md b/modules/widget_system/widget_ui/CHANGELOG.md similarity index 100% rename from modules/widget_system/widgets/CHANGELOG.md rename to modules/widget_system/widget_ui/CHANGELOG.md diff --git a/modules/widget_system/widgets/LICENSE b/modules/widget_system/widget_ui/LICENSE similarity index 100% rename from modules/widget_system/widgets/LICENSE rename to modules/widget_system/widget_ui/LICENSE diff --git a/modules/widget_system/widgets/README.md b/modules/widget_system/widget_ui/README.md similarity index 82% rename from modules/widget_system/widgets/README.md rename to modules/widget_system/widget_ui/README.md index 02fe8ecab..4a260d8d2 100644 --- a/modules/widget_system/widgets/README.md +++ b/modules/widget_system/widget_ui/README.md @@ -3,12 +3,12 @@ This README describes the package. If you publish this package to pub.dev, this README's contents appear on the landing page for your package. For information about how to write a good package README, see the guide for -[writing package pages](https://dart.dev/guides/libraries/writing-package-pages). +[writing package pages](https://dart.dev/tools/pub/writing-package-pages). For general information about developing packages, see the Dart guide for -[creating packages](https://dart.dev/guides/libraries/create-library-packages) +[creating packages](https://dart.dev/guides/libraries/create-packages) and the Flutter guide for -[developing packages and plugins](https://flutter.dev/developing-packages). +[developing packages and plugins](https://flutter.dev/to/develop-packages). --> TODO: Put a short description of the package here that helps potential users diff --git a/modules/widget_system/widgets/analysis_options.yaml b/modules/widget_system/widget_ui/analysis_options.yaml similarity index 100% rename from modules/widget_system/widgets/analysis_options.yaml rename to modules/widget_system/widget_ui/analysis_options.yaml diff --git a/modules/widget_system/widget_ui/lib/src/bloc/bloc.dart b/modules/widget_system/widget_ui/lib/src/bloc/bloc.dart new file mode 100644 index 000000000..c9833f0be --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/bloc/bloc.dart @@ -0,0 +1 @@ +export 'liked_widget_bloc.dart'; diff --git a/modules/widget_system/widget_ui/lib/src/bloc/liked_widget_bloc.dart b/modules/widget_system/widget_ui/lib/src/bloc/liked_widget_bloc.dart new file mode 100644 index 000000000..5acdbc57c --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/bloc/liked_widget_bloc.dart @@ -0,0 +1,22 @@ +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:widget_repository/widget_repository.dart'; + +/// create by 张风捷特烈 on 2020-04-07 +/// contact me by email 1981462002@qq.com +/// 说明: + +class LikeWidgetBloc extends Cubit> { + final WidgetRepository repository; + + LikeWidgetBloc({required this.repository}) : super(const []); + + Future loadLikeData() async { + List widgets = await repository.loadLikeWidgets(); + emit(widgets); + } + + Future toggle(int widgetId) async { + await repository.toggleLike(widgetId); + return loadLikeData(); + } +} diff --git a/modules/widget_system/widget_ui/lib/src/view/field/filed.dart b/modules/widget_system/widget_ui/lib/src/view/field/filed.dart new file mode 100644 index 000000000..f94d92fd1 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/field/filed.dart @@ -0,0 +1,2 @@ +export 'widget_fields_dialog.dart'; +export 'widget_fields_page.dart'; diff --git a/modules/widget_system/widget_ui/lib/src/view/field/widget_fields_dialog.dart b/modules/widget_system/widget_ui/lib/src/view/field/widget_fields_dialog.dart new file mode 100644 index 000000000..c8ea26d06 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/field/widget_fields_dialog.dart @@ -0,0 +1,139 @@ +import 'package:flutter/material.dart'; +import 'package:widget_repository/widget_repository.dart'; + +class WidgetFieldsDialog extends StatefulWidget { + final int widgetId; + final String widgetName; + + const WidgetFieldsDialog({ + super.key, + required this.widgetId, + required this.widgetName, + }); + + @override + State createState() => _WidgetFieldsDialogState(); +} + +class _WidgetFieldsDialogState extends State { + List? _fields; + bool _isLoading = true; + + @override + void initState() { + super.initState(); + _loadFields(); + } + + Future _loadFields() async { + try { + final repository = const WidgetDbRepository(); + final fields = await repository.loadWidgetFields(widget.widgetId); + // SQL已经按必需属性排序,不需要再次排序 + setState(() { + _isLoading = false; + _fields = fields; + }); + } catch (e) { + setState(() { + _isLoading = false; + _fields = []; + }); + } + } + + @override + Widget build(BuildContext context) { + return Dialog( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), + child: Container( + width: 500, + height: 600, + padding: const EdgeInsets.all(20), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _buildHeader(context), + const Divider(), + const SizedBox(height: 16), + Expanded(child: _buildContent()), + ], + ), + ), + ); + } + + Widget _buildHeader(BuildContext context) { + return Row( + children: [ + Icon(Icons.widgets, color: Theme.of(context).primaryColor), + const SizedBox(width: 8), + Text( + '${widget.widgetName} 属性', + style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + ), + const Spacer(), + IconButton( + onPressed: () => Navigator.of(context).pop(), + icon: const Icon(Icons.close), + ), + ], + ); + } + + Widget _buildContent() { + if (_isLoading) return const Center(child: CircularProgressIndicator()); + if (_fields!.isEmpty) return const Center(child: Text('暂无属性信息')); + + return ListView.builder( + itemCount: _fields!.length, + itemBuilder: (context, index) => _buildFieldItem(_fields![index]), + ); + } + + Widget _buildFieldItem(WidgetFieldModel field) { + return Container( + margin: const EdgeInsets.only(bottom: 8), + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Theme.of(context).cardColor, + borderRadius: BorderRadius.circular(8), + border: Border.all(color: Colors.grey.withOpacity(0.2)), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + RichText( + text: TextSpan( + children: [ + TextSpan( + text: '${field.fieldName} : ', + style: const TextStyle( + fontWeight: FontWeight.bold, color: Colors.black), + ), + TextSpan( + text: field.fieldType, + style: TextStyle( + fontWeight: FontWeight.bold, + color: Theme.of(context).primaryColor), + ), + ], + ), + ), + // if (field.isRequired) _buildRequiredBadge(), + ], + ), + if (field.fieldDescZh != null) ...[ + const SizedBox(height: 4), + Text( + field.fieldDescZh!, + style: const TextStyle(fontSize: 11, color: Colors.grey), + ), + ], + ], + ), + ); + } +} diff --git a/modules/widget_system/widget_ui/lib/src/view/field/widget_fields_page.dart b/modules/widget_system/widget_ui/lib/src/view/field/widget_fields_page.dart new file mode 100644 index 000000000..d8df9d6d8 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/field/widget_fields_page.dart @@ -0,0 +1,140 @@ +import 'package:flutter/material.dart'; +import 'package:widget_repository/widget_repository.dart'; + +class WidgetFieldsPage extends StatefulWidget { + final int widgetId; + final String widgetName; + + const WidgetFieldsPage({ + super.key, + required this.widgetId, + required this.widgetName, + }); + + @override + State createState() => _WidgetFieldsPageState(); +} + +class _WidgetFieldsPageState extends State { + List? _fields; + bool _isLoading = true; + + @override + void initState() { + super.initState(); + _loadFields(); + } + + Future _loadFields() async { + try { + final repository = const WidgetDbRepository(); + final fields = await repository.loadWidgetFields(widget.widgetId); + // SQL已经按必需属性排序,不需要再次排序 + setState(() { + _isLoading = false; + _fields = fields; + }); + } catch (e) { + setState(() { + _isLoading = false; + _fields = []; + }); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + bottom: PreferredSize( + preferredSize: Size(0, 10), + child: Container( + height: 10, + color: Color(0xfff3f4f6), + )), + title: Text('${widget.widgetName} 属性'), + centerTitle: true, + ), + body: _buildContent(), + ); + } + + Widget _buildContent() { + if (_isLoading) return const Center(child: CircularProgressIndicator()); + if (_fields!.isEmpty) return const Center(child: Text('暂无属性信息')); + bool isZh = Localizations.localeOf(context).languageCode == 'zh'; + return ListView.separated( + separatorBuilder: (_, __) => Divider(), + itemCount: _fields!.length, + itemBuilder: (context, index) => _buildFieldItem(_fields![index], isZh), + ); + } + + Widget _buildFieldItem(WidgetFieldModel field, bool isZh) { + Color color = Theme.of(context).primaryColor; + return Container( + color: Colors.white, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + width: 4, + height: 20, + decoration: BoxDecoration( + color: color, + borderRadius: BorderRadius.circular(2), + ), + ), + const SizedBox(width: 12), + Expanded( + child: RichText( + text: TextSpan( + children: [ + TextSpan( + text: field.fieldName, + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 14, + color: Colors.black87, + ), + ), + ], + ), + ), + ), + // if (field.isRequired) _buildRequiredBadge(), + ], + ), + const SizedBox(height: 2), + Padding( + padding: const EdgeInsets.only(left: 16), + child: Text( + field.fieldType, + style: TextStyle( + color: Theme.of(context).primaryColor, + fontSize: 14, + fontWeight: FontWeight.w600, + ), + ), + ), + if (field.fieldDescZh != null) ...[ + const SizedBox(height: 8), + Text( + isZh ? field.fieldDescZh! : '${field.fieldDesc}', + style: const TextStyle( + fontSize: 13, + color: Colors.grey, + height: 1.4, + ), + ), + ], + ], + ), + ), + ); + } +} diff --git a/modules/widget_system/widget_ui/lib/src/view/node_tiled/node_tiled.dart b/modules/widget_system/widget_ui/lib/src/view/node_tiled/node_tiled.dart new file mode 100644 index 000000000..613744d49 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/node_tiled/node_tiled.dart @@ -0,0 +1 @@ +// TODO Implement this library. diff --git a/modules/widget_system/widget_ui/lib/src/view/view.dart b/modules/widget_system/widget_ui/lib/src/view/view.dart new file mode 100644 index 000000000..3d2dcfe20 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/view.dart @@ -0,0 +1,3 @@ +export 'widget_tiled/widget_tiled.dart'; +export 'node_tiled/node_tiled.dart'; +export 'field/filed.dart'; diff --git a/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_detail_logo.dart b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_detail_logo.dart new file mode 100644 index 000000000..4a5cfbe3b --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_detail_logo.dart @@ -0,0 +1,135 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; +import 'package:flutter_star/star.dart'; +import 'package:flutter_star/star_score.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:widget_repository/widget_repository.dart'; +import 'package:fx_env/fx_env.dart'; +import 'package:widget_ui/widget_ui.dart'; + +class WidgetDetailLogo extends StatelessWidget { + final Color background; + final String widgetName; + final WidgetModel model; + + const WidgetDetailLogo({ + super.key, + required this.background, + required this.widgetName, + required this.model, + }); + + @override + Widget build(BuildContext context) { + if (!kApp.isDesktop) { + return Padding( + padding: const EdgeInsets.only(right: 8.0, top: 0), + child: WidgetLogo( + background: background, + widgetName: widgetName, + widgetId: model.id, + lever: model.lever, + inDetail: true, + ), + ); + } + + return Stack( + children: [ + Container( + width: 240, + height: 160, + alignment: Alignment.center, + decoration: BoxDecoration( + color: background, + gradient: LinearGradient( + transform: const GradientRotation(270 * 180 / pi), + colors: [ + background.withValues(alpha: 0.9), + background.withValues(alpha: 0.5) + ]), + borderRadius: BorderRadius.circular(6), + ), + child: SvgPicture.asset( + 'assets/images/widgets/${widgetLogo(widgetName)}', + width: 120, + ), + ), + Positioned( + top: 6, + right: 0, + child: StarScore( + score: model.lever, + star: Star(size: 15, fillColor: Colors.white), + ), + ), + Positioned( + bottom: 2, + left: 6, + child: Text( + "#${model.id}", + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 14, + color: Colors.white70, + ), + )), + _buildFieldCountBadge(context), + ], + ); + } + + Widget _buildFieldCountBadge(BuildContext context) { + final provider = WidgetStatisticsProvider(); + final stats = provider.statistics; + if (stats == null) return const SizedBox.shrink(); + + final fieldCount = stats.getWidgetFieldCount(model.id); + if (fieldCount == 0) return const SizedBox.shrink(); + + return Positioned( + right: 0, + bottom: 0, + child: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () => _showFieldsDialog(context), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 6.0, vertical: 4), + child: Text( + '属性:$fieldCount 个', + style: const TextStyle( + fontSize: 14, + color: Colors.white, + decoration: TextDecoration.underline, + decorationColor: Colors.white, + ), + ), + ), + ), + ); + } + + void _showFieldsDialog(BuildContext context) { + if (kApp.isMobile) { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => WidgetFieldsPage( + widgetId: model.id, + widgetName: widgetName, + ), + ), + ); + } else { + showDialog( + context: context, + builder: (context) => WidgetFieldsDialog( + widgetId: model.id, + widgetName: widgetName, + ), + ); + } + } +} diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_id_view.dart b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_id_view.dart similarity index 58% rename from modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_id_view.dart rename to modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_id_view.dart index 073713ffc..bc73ced7b 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_id_view.dart +++ b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_id_view.dart @@ -1,21 +1,18 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import '../../../widget_module.dart'; - class WidgetIdView extends StatelessWidget { - final WidgetModel model; + final int id; - const WidgetIdView({super.key, required this.model}); + const WidgetIdView({super.key, required this.id}); @override Widget build(BuildContext context) { return Text( - "#${model.id}", + "#$id", maxLines: 1, overflow: TextOverflow.ellipsis, style: const TextStyle( - fontSize: 12, + fontSize: 10, color: Colors.white70, ), ); diff --git a/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_tiled.dart b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_item.dart similarity index 57% rename from modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_tiled.dart rename to modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_item.dart index 631d5a12f..b7e6468c4 100644 --- a/modules/widget_system/widget_module/lib/views/desk_ui/widget_panel/widget_tiled.dart +++ b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_item.dart @@ -1,27 +1,46 @@ -import 'package:app/app.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_star/flutter_star.dart'; -import 'package:widget_module/blocs/action/widget_action.dart'; +import 'package:flutter_star/star.dart'; +import 'package:flutter_star/star_score.dart'; +import 'package:tolyui_message/tolyui_message.dart'; +import 'package:tolyui_text/tolyui_text.dart'; import 'package:widget_repository/widget_repository.dart'; import 'package:wrapper/wrapper.dart'; -import 'package:tolyui/tolyui.dart'; -import '../../components/widget_logo_map.dart'; -import '../like_tag.dart'; -import 'package:l10n/l10n.dart'; -import 'widget_id_view.dart'; +import '../../../widget_ui.dart'; -class WidgetTiled extends StatelessWidget { +sealed class WidgetAction {} + +class JumpWidgetDetail extends WidgetAction { + final int? widgetId; + final String? widgetName; + final WidgetModel? model; + + JumpWidgetDetail({ + this.widgetId, + this.model, + this.widgetName, + }); +} + +class ToggleLikeWidget extends WidgetAction { + final int widgetId; + + ToggleLikeWidget(this.widgetId); +} + +/// 组价主页单体的样式 +class WidgetItem extends StatelessWidget { final WidgetModel model; - final VoidCallback onTap; - final String? searchArg; + final String? searchArgs; + + final ValueChanged onWidget; - const WidgetTiled({ + const WidgetItem({ super.key, required this.model, - required this.onTap, - this.searchArg, + this.searchArgs, + required this.onWidget, }); @override @@ -33,14 +52,16 @@ class WidgetTiled extends StatelessWidget { bool isDark = theme.brightness == Brightness.dark; textColor = isDark ? textColor : const Color(0xff2F3032); Color color = theme.primaryColor; - EdgeInsetsGeometry padding = - const EdgeInsets.symmetric(horizontal: 12, vertical: 8); + EdgeInsetsGeometry padding = const EdgeInsets.symmetric( + horizontal: 12, + vertical: 8, + ); return Stack( children: [ InkWell( borderRadius: BorderRadius.circular(6), - onTap: onTap, + onTap: () => onWidget.call(JumpWidgetDetail(model: model)), child: Ink( decoration: BoxDecoration( color: tileColor, @@ -55,11 +76,14 @@ class WidgetTiled extends StatelessWidget { child: Row( children: [ GestureDetector( - onLongPress: () => context.toggleLike(model.id), + onLongPress: () => onWidget.call(ToggleLikeWidget(model.id)), child: Hero( tag: model.heroId, child: WidgetLogo( - background: color, widgetName: model.name)), + lever: model.lever, + background: color, + widgetName: model.name, + widgetId: model.id)), ), Expanded( child: Padding( @@ -68,7 +92,7 @@ class WidgetTiled extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - _buildTitle(color, textColor, isDark), + listTitle(textColor), _buildContent(textColor), _buildFoot(isDark) ], @@ -79,33 +103,27 @@ class WidgetTiled extends StatelessWidget { ), ), ), - LikeTag(widget: model), - Positioned(bottom: 2, left: 6, child: WidgetIdView(model: model)) + LikeTag(model: model, onWidget: onWidget), ], ); } - Widget linkText(BuildContext context) => Row( - children: [ - const Padding( - padding: EdgeInsets.only(left: 15, right: 5), - child: Icon(Icons.link, color: Colors.blue), - ), - Text(context.l10n.relatedComponents, style: UnitTextStyle.labelBold), - ], - ); - Widget listTitle(Color? textColor) { + TextStyle style = TextStyle( + fontSize: 14, + color: textColor, + fontWeight: FontWeight.bold, + ); + return GestureDetector( - child: Text( + child: HighlightText.withArg( model.name, + arg: searchArgs, + caseSensitive: false, + highlightStyle: style.copyWith(color: Colors.red), maxLines: 1, overflow: TextOverflow.ellipsis, - style: TextStyle( - fontSize: 14, - color: textColor, - fontWeight: FontWeight.bold, - ), + style: style, ), onLongPress: () async { await Clipboard.setData(ClipboardData(text: model.name)); @@ -114,29 +132,16 @@ class WidgetTiled extends StatelessWidget { ); } - Widget _buildTitle(Color color, Color? textColor, bool isDark) { - Widget title; - if (searchArg == null) { - title = listTitle(textColor); - } else { - title = Text.rich(formSpan(model.name, searchArg!)); - } - return Row( - children: [ - Expanded(child: title), - StarScore( - star: Star(emptyColor: Colors.white, size: 12, fillColor: color), - score: model.lever, - ), - ], - ); - } - Widget _buildContent(Color? textColor) { + TextStyle style = TextStyle(fontSize: 13, color: textColor); + return Padding( padding: const EdgeInsets.symmetric(vertical: 8), - child: Text( + child: HighlightText.withArg( model.info, + arg: searchArgs, + caseSensitive: false, + highlightStyle: style.copyWith(color: Colors.red), maxLines: 2, overflow: TextOverflow.ellipsis, style: TextStyle(fontSize: 13, color: textColor), @@ -145,6 +150,8 @@ class WidgetTiled extends StatelessWidget { } Widget _buildFoot(bool isDark) { + TextStyle style = + const TextStyle(fontSize: 12, height: 1, color: Color(0xff86909c)); return Row( children: [ Container( @@ -155,12 +162,14 @@ class WidgetTiled extends StatelessWidget { color: Color(0xff86909c), shape: BoxShape.circle), ), Expanded( - child: Text( + child: HighlightText.withArg( model.nameCN, + arg: searchArgs, + caseSensitive: false, + highlightStyle: style.copyWith(color: Colors.red), maxLines: 1, overflow: TextOverflow.ellipsis, - style: const TextStyle( - fontSize: 12, height: 1, color: Color(0xff86909c)), + style: style, ), ), Wrapper.just( @@ -168,7 +177,7 @@ class WidgetTiled extends StatelessWidget { color: isDark ? const Color(0xff292A2D) : const Color(0xffF3F3F5), padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), child: Text( - Cons.kWidgetFamilyLabelMap[model.family]!, + kWidgetFamilyLabelMap[model.family]!, style: TextStyle( color: isDark ? const Color(0xffCCCCCC) : const Color(0xff878D96), @@ -185,25 +194,14 @@ class WidgetTiled extends StatelessWidget { ], ); } - - final TextStyle lightTextStyle = const TextStyle( - color: Colors.red, - fontSize: 16, - fontWeight: FontWeight.bold, - ); - - InlineSpan formSpan(String src, String pattern) { - List span = []; - RegExp regExp = RegExp(pattern, caseSensitive: false); - src.splitMapJoin(regExp, onMatch: (Match match) { - span.add(TextSpan(text: match.group(0), style: lightTextStyle)); - return ''; - }, onNonMatch: (str) { - span.add(TextSpan( - text: str, - style: lightTextStyle.copyWith(color: const Color(0xff2F3032)))); - return ''; - }); - return TextSpan(children: span); - } } + +Map get kWidgetFamilyLabelMap => { + WidgetFamily.stateless: "Stateless", + WidgetFamily.stateful: "Stateful", + WidgetFamily.singleChildRender: "SingleChild", + WidgetFamily.multiChildRender: "MultiChild", + WidgetFamily.sliver: "Sliver", + WidgetFamily.proxy: "Proxy", + WidgetFamily.other: "Other", + }; diff --git a/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_like_tag.dart b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_like_tag.dart new file mode 100644 index 000000000..384f24755 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_like_tag.dart @@ -0,0 +1,43 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:widget_repository/widget_repository.dart'; +import 'package:widget_ui/widget_ui.dart'; + +class LikeTag extends StatelessWidget { + final WidgetModel model; + final ValueChanged onWidget; + + const LikeTag({ + super.key, + required this.model, + required this.onWidget, + }); + + @override + Widget build(BuildContext context) { + bool show = + context.select((LikeWidgetBloc bloc) => bloc.state.contains(model)); + if (show) { + return GestureDetector( + onTap: () => onWidget(ToggleLikeWidget(model.id)), + child: Container( + width: 24, + height: 24, + decoration: BoxDecoration( + color: Colors.white.withValues(alpha: 0.3), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(6), + bottomRight: Radius.circular(8), + )), + child: Icon( + Icons.star, + color: Colors.white, + size: 16, + ), + ), + ); + } + return const SizedBox(); + } +} diff --git a/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_logo.dart b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_logo.dart new file mode 100644 index 000000000..ca82e7748 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_logo.dart @@ -0,0 +1,246 @@ +import 'dart:math'; +import 'dart:ui'; + +import 'package:flutter/material.dart'; +import 'package:flutter_star/star.dart'; +import 'package:flutter_star/star_score.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:widget_repository/widget_repository.dart'; +import 'package:fx_env/fx_env.dart'; +import 'package:widget_ui/widget_ui.dart'; + +class WidgetLogo extends StatelessWidget { + final Color background; + final String widgetName; + final int? widgetId; + final double lever; + final bool inDetail; + + const WidgetLogo({ + super.key, + required this.background, + required this.widgetName, + this.widgetId, + required this.lever, + this.inDetail = false, + }); + + @override + Widget build(BuildContext context) { + return Stack( + children: [ + Container( + width: 110, + height: 110, + alignment: Alignment.center, + decoration: BoxDecoration( + color: background, + gradient: LinearGradient( + transform: const GradientRotation(270 * 180 / pi), + colors: [ + background.withValues(alpha: 0.9), + background.withValues(alpha: 0.5) + ]), + borderRadius: inDetail + ? BorderRadius.circular(6) + : const BorderRadius.only( + topLeft: Radius.circular(6), + bottomLeft: Radius.circular(6)), + ), + child: SvgPicture.asset( + 'assets/images/widgets/${widgetLogo(widgetName)}', + width: 80, + ), + ), + Positioned( + bottom: 4, + left: 6, + child: WidgetIdView( + id: widgetId ?? 0, + )), + Positioned( + top: 6, + right: -4, + child: StarScore( + score: lever, + star: Star(size: 10, fillColor: Colors.white), + ), + ), + if (widgetId != null) _buildFieldCountBadge(context), + ], + ); + } + + Widget _buildFieldCountBadge(BuildContext context) { + final provider = WidgetStatisticsProvider(); + final stats = provider.statistics; + if (stats == null) return const SizedBox.shrink(); + + final fieldCount = stats.getWidgetFieldCount(widgetId!); + if (fieldCount == 0) return const SizedBox.shrink(); + + return Positioned( + right: 0, + bottom: 0, + child: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () => _showFieldsDialog(context), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 6.0, vertical: 4), + child: Text( + '属性:$fieldCount', + style: const TextStyle( + fontSize: 10, + color: Colors.white, + decoration: TextDecoration.underline, + decorationColor: Colors.white, + ), + ), + ), + ), + ); + } + + void _showFieldsDialog(BuildContext context) { + if (kApp.isMobile) { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => WidgetFieldsPage( + widgetId: widgetId!, + widgetName: widgetName, + ), + ), + ); + } else { + showDialog( + context: context, + builder: (context) => WidgetFieldsDialog( + widgetId: widgetId!, + widgetName: widgetName, + ), + ); + } + } +} + +String widgetLogo(String widgetName) { + return switch (widgetName) { + 'Container' => 'Container.svg', + 'Text' => 'Text.svg', + 'GestureDetector' => 'GestureDetector.svg', + 'CircleAvatar' => 'CircleAvatar.svg', + 'Card' => 'Card.svg', + 'ListView' => 'ListView.svg', + 'GridView' => 'GridView.svg', + 'SingleChildScrollView' => 'SingleChildScrollView.svg', + 'PageView' => 'PageView.svg', + 'InputChip' => 'InputChip.svg', + 'Chip' => 'Chip.svg', + 'FilterChip' => 'FilterChip.svg', + 'MaterialButton' => 'MaterialButton.svg', + 'FlutterLogo' => 'FlutterLogo.svg', + 'RichText' => 'RichText.svg', + 'FloatingActionButton' => 'FloatingActionButton.svg', + 'Banner' => 'Banner.svg', + 'Icon' => 'Icon.svg', + _ => 'Widget.svg', + }; +} + +class GlassSquare extends StatelessWidget { + final Color color; // 主颜色 + final double size; // 边长 + final Widget? child; // 子组件 + + const GlassSquare({ + super.key, + required this.color, + this.size = 300, + this.child, + }); + + @override + Widget build(BuildContext context) { + return ClipRRect( + borderRadius: BorderRadius.circular(20), + child: Stack( + alignment: Alignment.center, + children: [ + // 背景渐变层 + Container( + width: size, + height: size, + decoration: BoxDecoration( + gradient: LinearGradient( + colors: [ + color, + Color.lerp(color, Colors.white, 0.4)!, + ], + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.4), + blurRadius: 25, + offset: const Offset(0, 8), + ), + ], + ), + ), + + // 毛玻璃效果层 + BackdropFilter( + filter: ImageFilter.blur(sigmaX: 18, sigmaY: 18), + child: Container( + width: size, + height: size, + decoration: BoxDecoration( + border: Border.all(color: Colors.white.withOpacity(0.2)), + color: Colors.white.withOpacity(0.05), + ), + ), + ), + + // 高光层 + Container( + width: size, + height: size, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + gradient: RadialGradient( + colors: [ + Colors.white.withOpacity(0.45), + Colors.transparent, + ], + radius: 0.6, + center: const Alignment(-0.6, -0.6), + ), + ), + ), + + // 柔光层 + Container( + width: size, + height: size, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + gradient: const LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color.fromRGBO(255, 255, 255, 0.15), + Color.fromRGBO(0, 0, 0, 0.25), + ], + ), + ), + ), + + // 子组件 + if (child != null) child!, + ], + ), + ); + } +} diff --git a/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_tiled.dart b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_tiled.dart new file mode 100644 index 000000000..e16dd00c6 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/src/view/widget_tiled/widget_tiled.dart @@ -0,0 +1,5 @@ +export 'widget_item.dart'; +export 'widget_logo.dart'; +export 'widget_id_view.dart'; +export 'widget_like_tag.dart'; +export 'widget_detail_logo.dart'; diff --git a/modules/widget_system/widget_ui/lib/widget_ui.dart b/modules/widget_system/widget_ui/lib/widget_ui.dart new file mode 100644 index 000000000..5c47bd8d0 --- /dev/null +++ b/modules/widget_system/widget_ui/lib/widget_ui.dart @@ -0,0 +1,4 @@ +library; + +export "src/view/view.dart"; +export 'src/bloc/bloc.dart'; diff --git a/modules/widget_system/widgets/pubspec.yaml b/modules/widget_system/widget_ui/pubspec.yaml similarity index 66% rename from modules/widget_system/widgets/pubspec.yaml rename to modules/widget_system/widget_ui/pubspec.yaml index d1999a168..b78ce0970 100644 --- a/modules/widget_system/widgets/pubspec.yaml +++ b/modules/widget_system/widget_ui/pubspec.yaml @@ -1,16 +1,31 @@ -name: widgets -description: A new Flutter package project. +name: widget_ui +description: "A new Flutter package project." version: 0.0.1 homepage: environment: - sdk: ">=3.5.0 <4.0.0" + sdk: ^3.6.1 flutter: ">=1.17.0" -resolution: workspace + dependencies: flutter: sdk: flutter + flutter_bloc: ^8.1.6 # 状态管理 + equatable: ^2.0.5 # 相等辅助 + tolyui_message: ^0.2.6+1 + flutter_star: ^1.0.2 # 星星组件 + wrapper: ^1.0.2 # 气泡包裹 + tolyui_text: ^0.0.1+4 + + fx_platform_adapter: 0.0.3 # 平台适配器 + flutter_svg: ^2.0.17 # svg 展示 + widget_repository: + path: ../widget_repository +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^5.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec @@ -24,10 +39,10 @@ flutter: # - images/a_dot_ham.jpeg # # For details regarding assets in packages, see - # https://flutter.dev/assets-and-images/#from-packages + # https://flutter.dev/to/asset-from-package # # An image asset can refer to one or more resolution-specific "variants", see - # https://flutter.dev/assets-and-images/#resolution-aware + # https://flutter.dev/to/resolution-aware-images # To add custom fonts to your package, add a fonts section here, # in this "flutter" section. Each entry in this list should have a @@ -47,4 +62,4 @@ flutter: # weight: 700 # # For details regarding fonts in packages, see - # https://flutter.dev/custom-fonts/#from-packages + # https://flutter.dev/to/font-from-package diff --git a/modules/widget_system/widget_ui/test/widget_ui_test.dart b/modules/widget_system/widget_ui/test/widget_ui_test.dart new file mode 100644 index 000000000..849487fbc --- /dev/null +++ b/modules/widget_system/widget_ui/test/widget_ui_test.dart @@ -0,0 +1,5 @@ +import 'package:flutter_test/flutter_test.dart'; + +import 'package:widget_ui/widget_ui.dart'; + +void main() {} diff --git a/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_en-US.json deleted file mode 100644 index f882976b4..000000000 --- a/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AboutDialog","path":"/src/material/about.dart","parents":["StatelessWidget","Widget"],"desc":" An about box. This is a dialog box with the application's icon, name, version number, and copyright, plus a button to show licenses for software used by the application.","fields":[{"name":"applicationName","type":"String?","desc":"The name of the application."},{"name":"applicationVersion","type":"String?","desc":"The version of this build of the application."},{"name":"applicationIcon","type":"Widget?","desc":"The icon to show next to the application name."},{"name":"applicationLegalese","type":"String?","desc":"A string to show in small print."},{"name":"children","type":"List?","desc":"Widgets to add to the dialog box after the name, version, and legalese."}],"id":130,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AboutDialog","desc":["【applicationIcon】: Top-left icon 【Widget】","【applicationVersion】: Version number 【String】","【applicationName】: Application name 【String】","【applicationLegalese】: Application legal terms 【String】","【children】: Sub-component list 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_zh-CN.json deleted file mode 100644 index 60dcf9681..000000000 --- a/modules/widget_system/widgets/doc/widgets/AboutDialog/AboutDialog_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AboutDialog","path":"/src/material/about.dart","parents":["StatelessWidget","Widget"],"desc":"关于对话框。这是一个包含应用程序图标、名称、版本号和版权信息的对话框,还有一个按钮用于显示应用程序使用的软件许可证。","fields":[{"name":"applicationName","type":"String?","desc":"应用程序的名称。"},{"name":"applicationVersion","type":"String?","desc":"此应用程序构建的版本。"},{"name":"applicationIcon","type":"Widget?","desc":"显示在应用程序名称旁边的图标。"},{"name":"applicationLegalese","type":"String?","desc":"以小字体显示的字符串。"},{"name":"children","type":"List?","desc":"在名称、版本和法律声明之后添加到对话框的小部件。"}],"id":130,"localName":"关于对话框","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AboutDialog基本使用","desc":["【applicationIcon】 : 左上图标 【Widget】","【applicationVersion】 : 版本号 【String】","【applicationName】 : 应用名 【String】","【applicationLegalese】 : 应用律术 【String】","【children】 : 子组件列表 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_en-US.json deleted file mode 100644 index d96a816d0..000000000 --- a/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AboutListTile","path":"/src/material/about.dart","parents":["StatelessWidget","Widget"],"desc":" A [ListTile] that shows an about box.","fields":[{"name":"icon","type":"Widget?","desc":"The icon to show for this drawer item."},{"name":"child","type":"Widget?","desc":"The label to show on this drawer item."},{"name":"applicationName","type":"String?","desc":"The name of the application."},{"name":"applicationVersion","type":"String?","desc":"The version of this build of the application."},{"name":"applicationIcon","type":"Widget?","desc":"The icon to show next to the application name in the [AboutDialog]."},{"name":"applicationLegalese","type":"String?","desc":"A string to show in small print in the [AboutDialog]."},{"name":"aboutBoxChildren","type":"List?","desc":"Widgets to add to the [AboutDialog] after the name, version, and legalese."},{"name":"dense","type":"bool?","desc":"Whether this list tile is part of a vertically dense list."}],"id":193,"lever":3,"family":0,"linkIds":[130,145],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AboutListTile","desc":["【icon】 : Left icon 【Widget】","【applicationIcon】 : Top-left icon 【Widget】","【applicationVersion】 : Version number 【String】","【applicationName】 : Application name 【String】","【applicationLegalese】 : Application legalese 【String】","【aboutBoxChildren】 : Dialog content components 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_zh-CN.json deleted file mode 100644 index 452c96015..000000000 --- a/modules/widget_system/widgets/doc/widgets/AboutListTile/AboutListTile_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AboutListTile","path":"/src/material/about.dart","parents":["StatelessWidget","Widget"],"desc":"显示关于框的 [ListTile]。","fields":[{"name":"icon","type":"Widget?","desc":"为此抽屉项显示的图标。"},{"name":"child","type":"Widget?","desc":"在此抽屉项上显示的标签。"},{"name":"applicationName","type":"String?","desc":"应用程序的名称。"},{"name":"applicationVersion","type":"String?","desc":"应用程序此构建的版本。"},{"name":"applicationIcon","type":"Widget?","desc":"在 [AboutDialog] 中应用程序名称旁边显示的图标。"},{"name":"applicationLegalese","type":"String?","desc":"在 [AboutDialog] 中以小字体显示的字符串。"},{"name":"aboutBoxChildren","type":"List?","desc":"在名称、版本和法律声明之后添加到 [AboutDialog] 的小部件。"},{"name":"dense","type":"bool?","desc":"此列表瓦片是否是垂直密集列表的一部分。"}],"id":193,"localName":"关于应用条目","lever":3,"family":0,"linkIds":[130,145],"nodes":[{"file":"node1_base.dart","name":"AboutListTile基本使用","desc":["【icon】 : 左图标 【Widget】","【applicationIcon】 : 左上图标 【Widget】","【applicationVersion】 : 版本号 【String】","【applicationName】 : 应用名 【String】","【applicationLegalese】 : 应用律术 【String】","【aboutBoxChildren】 : 弹框内容组件 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_en-US.json b/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_en-US.json deleted file mode 100644 index d35364063..000000000 --- a/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AbsorbPointer","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that absorbs pointers during hit testing.","fields":[{"name":"absorbing","type":"bool","required":true,"desc":"Whether this widget absorbs pointers during hit testing."},{"name":"ignoringSemantics","type":"bool?","desc":"Whether the semantics of this render object is ignored when compiling the semantics tree."}],"id":295,"lever":4,"family":2,"linkIds":[146,149,150,292],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AbsorbPointer","desc":["【child】: Child component 【Widget】","【absorbing】: Whether to absorb events 【bool】","As shown below, when the Switch is selected, absorbing is true, and the button event will be absorbed and cannot be clicked."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_zh-CN.json deleted file mode 100644 index 79bc70fc3..000000000 --- a/modules/widget_system/widgets/doc/widgets/AbsorbPointer/AbsorbPointer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AbsorbPointer","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在命中测试期间吸收指针的小部件。","fields":[{"name":"absorbing","type":"bool","required":true,"desc":"此小部件是否在命中测试期间吸收指针。"},{"name":"ignoringSemantics","type":"bool?","desc":"编译语义树时是否忽略此渲染对象的语义。"}],"id":295,"localName":"吸收点击","lever":4,"family":2,"linkIds":[146,149,150,292],"nodes":[{"file":"node1_base.dart","name":"AbsorbPointer基本使用","desc":["【child】 : 孩子组件 【Widget】","【absorbing】 : 是否吸收事件 【bool】","如下,Switch选中时absorbing为true,按钮事件将被吸收,无法点击。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_en-US.json deleted file mode 100644 index b9564411e..000000000 --- a/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AbstractLayoutBuilder","path":"/src/widgets/layout_builder.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" An abstract superclass for widgets that defer their building until layout.","fields":[],"id":286,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_zh-CN.json deleted file mode 100644 index bbaa23dbe..000000000 --- a/modules/widget_system/widgets/doc/widgets/AbstractLayoutBuilder/AbstractLayoutBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AbstractLayoutBuilder","path":"/src/widgets/layout_builder.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"将其构建推迟到布局的小部件的抽象超类。","fields":[],"id":286,"localName":"AbstractLayoutBuilder","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_en-US.json b/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_en-US.json deleted file mode 100644 index 538b3ef68..000000000 --- a/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ActionChip","path":"/src/material/action_chip.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design action chip.","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"disabledColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":13,"lever":3,"family":0,"linkIds":[11,12,14,15,153],"nodes":[{"file":"node1_base.dart","name":"The normal performance of ActionChip is as follows","desc":["【onPressed】: Click event 【Function】","【pressElevation】: Shadow depth when pressed 【double】","Other properties are the same as the Chip component, no right component."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_zh-CN.json deleted file mode 100644 index 64f3b1f1c..000000000 --- a/modules/widget_system/widgets/doc/widgets/ActionChip/ActionChip_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ActionChip","path":"/src/material/action_chip.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 操作芯片。","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"disabledColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":13,"localName":"事件小条","lever":3,"family":0,"linkIds":[11,12,14,15,153],"nodes":[{"file":"node1_base.dart","name":"ActionChip的普通表现如下","desc":["【onPressed】: 点击事件 【Function】","【pressElevation】: 按下时影深 【double】","其他属性同Chip组件,无右侧组件。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_en-US.json deleted file mode 100644 index 4f5482883..000000000 --- a/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ActionIconTheme","path":"/src/material/action_icons_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that overrides the default icon of [BackButtonIcon], [CloseButtonIcon], [DrawerButtonIcon], and [EndDrawerButtonIcon] in this widget's subtree.","fields":[{"name":"data","type":"ActionIconThemeData","required":true,"desc":"Specifies the default icon overrides for descendant [BackButtonIcon], [CloseButtonIcon], [DrawerButtonIcon], and [EndDrawerButtonIcon] widgets."}],"id":300,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_zh-CN.json deleted file mode 100644 index 4c5b81eae..000000000 --- a/modules/widget_system/widgets/doc/widgets/ActionIconTheme/ActionIconTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ActionIconTheme","path":"/src/material/action_icons_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖此小部件子树中 [BackButtonIcon]、[CloseButtonIcon]、[DrawerButtonIcon] 和 [EndDrawerButtonIcon] 的默认图标的继承小部件。","fields":[{"name":"data","type":"ActionIconThemeData","required":true,"desc":"指定后代 [BackButtonIcon]、[CloseButtonIcon]、[DrawerButtonIcon] 和 [EndDrawerButtonIcon] 小部件的默认图标覆盖。"}],"id":300,"localName":"ActionIconTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_en-US.json b/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_en-US.json deleted file mode 100644 index 41d6a5f82..000000000 --- a/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ActionListener","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":" A helper widget for making sure that listeners on an action are removed properly.","fields":[{"name":"listener","type":"ActionListenerCallback","required":true,"desc":"The [ActionListenerCallback] callback to register with the [action]."},{"name":"action","type":"Action","required":true,"desc":"The [Action] that the callback will be registered with."},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":310,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_zh-CN.json deleted file mode 100644 index 0d540e6de..000000000 --- a/modules/widget_system/widgets/doc/widgets/ActionListener/ActionListener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ActionListener","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":"确保正确移除操作上的监听器的辅助小部件。","fields":[{"name":"listener","type":"ActionListenerCallback","required":true,"desc":"要向 [action] 注册的 [ActionListenerCallback] 回调。"},{"name":"action","type":"Action","required":true,"desc":"回调将注册到的 [Action]。"},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":310,"localName":"ActionListener","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Actions/Actions_en-US.json b/modules/widget_system/widgets/doc/widgets/Actions/Actions_en-US.json deleted file mode 100644 index 0cba06ce2..000000000 --- a/modules/widget_system/widgets/doc/widgets/Actions/Actions_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Actions","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that maps [Intent]s to [Action]s to be used by its descendants when invoking an [Action].","fields":[{"name":"dispatcher","type":"ActionDispatcher?","desc":"The [ActionDispatcher] object that invokes actions."},{"name":"actions","type":"Map>","required":true,"desc":"{@template flutter.widgets.actions.actions} A map of [Intent] keys to [Action] objects that defines which actions this widget knows about."},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":311,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Actions/Actions_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Actions/Actions_zh-CN.json deleted file mode 100644 index d7a99a048..000000000 --- a/modules/widget_system/widgets/doc/widgets/Actions/Actions_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Actions","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":"将 [Intent] 映射到 [Action] 的小部件,供其后代在调用 [Action] 时使用。","fields":[{"name":"dispatcher","type":"ActionDispatcher?","desc":"调用操作的 [ActionDispatcher] 对象。"},{"name":"actions","type":"Map>","required":true,"desc":"{@template flutter.widgets.actions.actions} [Intent] 键到 [Action] 对象的映射,定义此小部件了解的操作。"},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":311,"localName":"Actions","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_en-US.json deleted file mode 100644 index 64ba467e5..000000000 --- a/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AdaptiveTextSelectionToolbar","path":"/src/material/adaptive_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" The default context menu for text selection for the current platform.","fields":[{"name":"buttonItems","type":"List?","desc":"{@template flutter.material.AdaptiveTextSelectionToolbar.buttonItems} The [ContextMenuButtonItem]s that will be turned into the correct button widgets for the current platform. {@endtemplate}"},{"name":"children","type":"List?","desc":"The children of the toolbar, typically buttons."},{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"{@template flutter.material.AdaptiveTextSelectionToolbar.anchors} The location on which to anchor the menu. {@endtemplate}"}],"id":318,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_zh-CN.json deleted file mode 100644 index b1ba8d84c..000000000 --- a/modules/widget_system/widgets/doc/widgets/AdaptiveTextSelectionToolbar/AdaptiveTextSelectionToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AdaptiveTextSelectionToolbar","path":"/src/material/adaptive_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"当前平台文本选择的默认上下文菜单。","fields":[{"name":"buttonItems","type":"List?","desc":"{@template flutter.material.AdaptiveTextSelectionToolbar.buttonItems} 将转换为当前平台正确按钮小部件的 [ContextMenuButtonItem]。{@endtemplate}"},{"name":"children","type":"List?","desc":"工具栏的子项,通常是按钮。"},{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"{@template flutter.material.AdaptiveTextSelectionToolbar.anchors} 锚定菜单的位置。{@endtemplate}"}],"id":318,"localName":"AdaptiveTextSelectionToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_en-US.json deleted file mode 100644 index 71c27d760..000000000 --- a/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AlertDialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design alert dialog.","fields":[{"name":"icon","type":"Widget?","desc":"An optional icon to display at the top of the dialog."},{"name":"iconColor","type":"Color?","desc":"Color for the [Icon] in the [icon] of this [AlertDialog]."},{"name":"iconPadding","type":"EdgeInsetsGeometry?","desc":"Padding around the [icon]."},{"name":"title","type":"Widget?","desc":"The (optional) title of the dialog is displayed in a large font at the top of the dialog, below the (optional) [icon]."},{"name":"titlePadding","type":"EdgeInsetsGeometry?","desc":"Padding around the title."},{"name":"titleTextStyle","type":"TextStyle?","desc":"Style for the text in the [title] of this [AlertDialog]."},{"name":"content","type":"Widget?","desc":"The (optional) content of the dialog is displayed in the center of the dialog in a lighter font."},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"Padding around the content."},{"name":"contentTextStyle","type":"TextStyle?","desc":"Style for the text in the [content] of this [AlertDialog]."},{"name":"actions","type":"List?","desc":"The (optional) set of actions that are displayed at the bottom of the dialog with an [OverflowBar]."},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"Padding around the set of [actions] at the bottom of the dialog."},{"name":"actionsAlignment","type":"MainAxisAlignment?","desc":"Defines the horizontal layout of the [actions] according to the same rules as for [Row.mainAxisAlignment]."},{"name":"actionsOverflowAlignment","type":"OverflowBarAlignment?","desc":"The horizontal alignment of [actions] within the vertical \"overflow\" layout."},{"name":"actionsOverflowDirection","type":"VerticalDirection?","desc":"The vertical direction of [actions] if the children overflow horizontally."},{"name":"actionsOverflowButtonSpacing","type":"double?","desc":"The spacing between [actions] when the [OverflowBar] switches to a column layout because the actions don't fit horizontally."},{"name":"buttonPadding","type":"EdgeInsetsGeometry?","desc":"The padding that surrounds each button in [actions]."},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.dialog.backgroundColor}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.dialog.elevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.dialog.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.dialog.surfaceTintColor}"},{"name":"semanticLabel","type":"String?","desc":"The semantic label of the dialog used by accessibility frameworks to announce screen transitions when the dialog is opened and closed."},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@macro flutter.material.dialog.insetPadding}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.dialog.clipBehavior}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.dialog.shape}"},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@macro flutter.material.dialog.alignment}"},{"name":"scrollable","type":"bool","required":true,"desc":"Determines whether the [title] and [content] widgets are wrapped in a scrollable."}],"id":127,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AlertDialog","desc":["【title】 : Top component 【Widget】","【content】 : Content component 【Widget】","【titleTextStyle】 : Top text style 【TextStyle】","【contentTextStyle】 : Content text style 【TextStyle】","【titlePadding】 : Top padding 【EdgeInsetsGeometry】","【contentPadding】 : Content padding 【EdgeInsetsGeometry】","【actions】 : Bottom right component list 【List】","【backgroundColor】 : Background color 【Color】","【elevation】 : Elevation 【double】","【shape】 : Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_zh-CN.json deleted file mode 100644 index 681dfccc3..000000000 --- a/modules/widget_system/widgets/doc/widgets/AlertDialog/AlertDialog_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AlertDialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 警告对话框。","fields":[{"name":"icon","type":"Widget?","desc":"在对话框顶部显示的可选图标。"},{"name":"iconColor","type":"Color?","desc":"此 [AlertDialog] 的 [icon] 中 [Icon] 的颜色。"},{"name":"iconPadding","type":"EdgeInsetsGeometry?","desc":"[icon] 周围的内边距。"},{"name":"title","type":"Widget?","desc":"对话框的(可选)标题以大字体显示在对话框顶部,位于(可选)[icon] 下方。"},{"name":"titlePadding","type":"EdgeInsetsGeometry?","desc":"标题周围的内边距。"},{"name":"titleTextStyle","type":"TextStyle?","desc":"此 [AlertDialog] 的 [title] 中文本的样式。"},{"name":"content","type":"Widget?","desc":"对话框的(可选)内容以较浅的字体显示在对话框中心。"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"内容周围的内边距。"},{"name":"contentTextStyle","type":"TextStyle?","desc":"此 [AlertDialog] 的 [content] 中文本的样式。"},{"name":"actions","type":"List?","desc":"显示在对话框底部的(可选)操作集合,使用 [OverflowBar]。"},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"对话框底部 [actions] 集合周围的内边距。"},{"name":"actionsAlignment","type":"MainAxisAlignment?","desc":"根据与 [Row.mainAxisAlignment] 相同的规则定义 [actions] 的水平布局。"},{"name":"actionsOverflowAlignment","type":"OverflowBarAlignment?","desc":"垂直\\"},{"name":"actionsOverflowDirection","type":"VerticalDirection?","desc":"如果子项水平溢出,[actions] 的垂直方向。"},{"name":"actionsOverflowButtonSpacing","type":"double?","desc":"当 [OverflowBar] 因操作无法水平放置而切换到列布局时,[actions] 之间的间距。"},{"name":"buttonPadding","type":"EdgeInsetsGeometry?","desc":"[actions] 中每个按钮周围的内边距。"},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.dialog.backgroundColor}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.dialog.elevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.dialog.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.dialog.surfaceTintColor}"},{"name":"semanticLabel","type":"String?","desc":"辅助功能框架用于在对话框打开和关闭时宣布屏幕转换的对话框语义标签。"},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@macro flutter.material.dialog.insetPadding}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.dialog.clipBehavior}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.dialog.shape}"},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@macro flutter.material.dialog.alignment}"},{"name":"scrollable","type":"bool","required":true,"desc":"确定 [title] 和 [content] 小部件是否包装在可滚动容器中。"}],"id":127,"localName":"弹出对话框","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AlertDialog基本使用","desc":["【title】 : 顶部组件 【Widget】","【content】 : 内容组件 【Widget】","【titleTextStyle】 : 顶部文字样式 【TextStyle】","【contentTextStyle】 : 内容文字样式 【TextStyle】","【titlePadding】 : 顶部内边距 【EdgeInsetsGeometry】","【contentPadding】 : 内容内边距 【EdgeInsetsGeometry】","【actions】 : 右下角组件列表 【List】","【backgroundColor】 : 背景色 【Color】","【elevation】 : 影深 【double】","【shape】 : 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Align/Align_en-US.json b/modules/widget_system/widgets/doc/widgets/Align/Align_en-US.json deleted file mode 100644 index 8862a8a61..000000000 --- a/modules/widget_system/widgets/doc/widgets/Align/Align_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Align","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that aligns its child within itself and optionally sizes itself based on the child's size.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the child."},{"name":"widthFactor","type":"double?","desc":"If non-null, sets its width to the child's width multiplied by this factor."},{"name":"heightFactor","type":"double?","desc":"If non-null, sets its height to the child's height multiplied by this factor."}],"id":85,"lever":5,"family":2,"linkIds":[1,86,111,120],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Align","desc":["【child】 : Child component 【Widget】","【alignment】 : Alignment method 【AlignmentGeometry】"]},{"file":"node2_other.dart","name":"Other Usages of Align","desc":["Since the Alignment object can specify the fractional position of the width and height in the parent container","Align can be used to achieve some complex layout requirements, such as changing positions according to specified mathematical equations"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Align/Align_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Align/Align_zh-CN.json deleted file mode 100644 index 042e8284b..000000000 --- a/modules/widget_system/widgets/doc/widgets/Align/Align_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Align","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"一个在自身内对齐其子项的小部件,可选择根据子项的大小调整自身大小。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何对齐子项。"},{"name":"widthFactor","type":"double?","desc":"如果非空,将其宽度设置为子项宽度乘以此因子。"},{"name":"heightFactor","type":"double?","desc":"如果非空,将其高度设置为子项高度乘以此因子。"}],"id":85,"localName":"对齐组件","lever":5,"family":2,"linkIds":[1,86,111,120],"nodes":[{"file":"node1_base.dart","name":"Align基本使用","desc":["【child】 : 孩子组件 【Widget】","【alignment】 : 对齐方式 【AlignmentGeometry】"]},{"file":"node2_other.dart","name":"Align其他用法","desc":["由于Alignment对象可指定在父容器中宽高的分率位置","可以使用Align实现一些复杂的排布需求,比如按指定的数学方程变化位置"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_en-US.json deleted file mode 100644 index 6b5904426..000000000 --- a/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AlignTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of an [Align] that animates its [Align.alignment] property.","fields":[{"name":"widthFactor","type":"double?","desc":"If non-null, the child's width factor, see [Align.widthFactor]."},{"name":"heightFactor","type":"double?","desc":"If non-null, the child's height factor, see [Align.heightFactor]."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":111,"lever":3,"family":1,"linkIds":[85,120],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AlignTransition","desc":["【child】: Child component 【Widget】","【alignment】: Alignment animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_zh-CN.json deleted file mode 100644 index 6582a505e..000000000 --- a/modules/widget_system/widgets/doc/widgets/AlignTransition/AlignTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AlignTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"[Align] 的动画版本,用于动画其 [Align.alignment] 属性。","fields":[{"name":"widthFactor","type":"double?","desc":"如果非空,子项的宽度因子,参见 [Align.widthFactor]。"},{"name":"heightFactor","type":"double?","desc":"如果非空,子项的高度因子,参见 [Align.heightFactor]。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":111,"localName":"对齐变换","lever":3,"family":1,"linkIds":[85,120],"nodes":[{"file":"node1_base.dart","name":"AlignTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【alignment】 : 对齐动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_en-US.json b/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_en-US.json deleted file mode 100644 index 31eeee380..000000000 --- a/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AndroidView","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":" Embeds an Android view in the Widget hierarchy.","fields":[{"name":"viewType","type":"String","required":true,"desc":"The unique identifier for Android view type to be embedded by this widget."},{"name":"onPlatformViewCreated","type":"PlatformViewCreatedCallback?","desc":"{@template flutter.widgets.AndroidView.onPlatformViewCreated} Callback to invoke after the platform view has been created."},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@template flutter.widgets.AndroidView.hitTestBehavior} How this widget should behave during hit testing."},{"name":"layoutDirection","type":"TextDirection?","desc":"{@template flutter.widgets.AndroidView.layoutDirection} The text direction to use for the embedded view."},{"name":"gestureRecognizers","type":"Set>?","desc":"Which gestures should be forwarded to the Android view."},{"name":"creationParams","type":"dynamic","required":true,"desc":"Passed as the args argument of [PlatformViewFactory#create](/javadoc/io/flutter/plugin/platform/PlatformViewFactory.html#create-android.content.Context-int-java.lang.Object-)"},{"name":"creationParamsCodec","type":"MessageCodec?","desc":"The codec used to encode `creationParams` before sending it to the platform side. It should match the codec passed to the constructor of [PlatformViewFactory](/javadoc/io/flutter/plugin/platform/PlatformViewFactory.html#PlatformViewFactory-io.flutter.plugin.common.MessageCodec-)."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":321,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_zh-CN.json deleted file mode 100644 index fe9bd286a..000000000 --- a/modules/widget_system/widgets/doc/widgets/AndroidView/AndroidView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AndroidView","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":"在小部件层次结构中嵌入 Android 视图。","fields":[{"name":"viewType","type":"String","required":true,"desc":"此小部件要嵌入的 Android 视图类型的唯一标识符。"},{"name":"onPlatformViewCreated","type":"PlatformViewCreatedCallback?","desc":"{@template flutter.widgets.AndroidView.onPlatformViewCreated} 平台视图创建后调用的回调。"},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@template flutter.widgets.AndroidView.hitTestBehavior} 此小部件在命中测试期间的行为方式。"},{"name":"layoutDirection","type":"TextDirection?","desc":"{@template flutter.widgets.AndroidView.layoutDirection} 嵌入视图使用的文本方向。"},{"name":"gestureRecognizers","type":"Set>?","desc":"哪些手势应转发到 Android 视图。"},{"name":"creationParams","type":"dynamic","required":true,"desc":"作为 [PlatformViewFactory#create](/javadoc/io/flutter/plugin/platform/PlatformViewFactory.html#create-android.content.Context-int-java.lang.Object-) 的 args 参数传递"},{"name":"creationParamsCodec","type":"MessageCodec?","desc":"在将 `creationParams` 发送到平台端之前用于编码的编解码器。它应与传递给 [PlatformViewFactory](/javadoc/io/flutter/plugin/platform/PlatformViewFactory.html#PlatformViewFactory-io.flutter.plugin.common.MessageCodec-) 构造函数的编解码器匹配。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":321,"localName":"AndroidView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_en-US.json b/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_en-US.json deleted file mode 100644 index 6d4b6fe73..000000000 --- a/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AndroidViewSurface","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":" Integrates an Android view with Flutter's compositor, touch, and semantics subsystems.","fields":[{"name":"controller","type":"AndroidViewController","required":true,"desc":"The controller for the platform view integrated by this [AndroidViewSurface]."},{"name":"gestureRecognizers","type":"Set>","required":true,"desc":"Which gestures should be forwarded to the PlatformView."},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":322,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_zh-CN.json deleted file mode 100644 index ca9282a74..000000000 --- a/modules/widget_system/widgets/doc/widgets/AndroidViewSurface/AndroidViewSurface_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AndroidViewSurface","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":"将 Android 视图与 Flutter 的合成器、触摸和语义子系统集成。","fields":[{"name":"controller","type":"AndroidViewController","required":true,"desc":"此 [AndroidViewSurface] 集成的平台视图的控制器。"},{"name":"gestureRecognizers","type":"Set>","required":true,"desc":"哪些手势应转发到 PlatformView。"},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":322,"localName":"AndroidViewSurface","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_en-US.json deleted file mode 100644 index b2f9b32ae..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedAlign","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Align] which automatically transitions the child's position over a given duration whenever the given [alignment] changes.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the child."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"heightFactor","type":"double?","desc":"If non-null, sets its height to the child's height multiplied by this factor."},{"name":"widthFactor","type":"double?","desc":"If non-null, sets its width to the child's width multiplied by this factor."}],"id":120,"lever":3,"family":1,"linkIds":[85,111],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedAlign","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【alignment】: Alignment method 【AlignmentGeometry】","【curve】: Animation curve 【Duration】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_zh-CN.json deleted file mode 100644 index 1fb05311f..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedAlign/AnimatedAlign_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedAlign","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Align] 的动画版本,当给定的 [alignment] 发生变化时,会在给定的持续时间内自动过渡子项的位置。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何对齐子项。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"heightFactor","type":"double?","desc":"如果非空,将其高度设置为子项高度乘以此因子。"},{"name":"widthFactor","type":"double?","desc":"如果非空,将其宽度设置为子项宽度乘以此因子。"}],"id":120,"localName":"对齐动画","lever":3,"family":1,"linkIds":[85,111],"nodes":[{"file":"node1_base.dart","name":"AnimatedAlign基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【alignment】 : 对齐方式 【AlignmentGeometry】","【curve】 : 动画曲线 【Duration】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_en-US.json deleted file mode 100644 index 5af52a2d5..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedBuilder","path":"/src/widgets/transitions.dart","parents":["ListenableBuilder","AnimatedWidget","StatefulWidget","Widget"],"desc":" A general-purpose widget for building animations.","fields":[],"id":228,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedBuilder Usage Example","desc":["【animation】: *Listenable object 【Listenable】","【builder】: *Component builder 【TransitionBuilder】","【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_zh-CN.json deleted file mode 100644 index 2f40262ff..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedBuilder/AnimatedBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedBuilder","path":"/src/widgets/transitions.dart","parents":["ListenableBuilder","AnimatedWidget","StatefulWidget","Widget"],"desc":"用于构建动画的通用小部件。","fields":[],"id":228,"localName":"动画构造器","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedBuilder 使用案例","desc":["【animation】 : *可监听对象 【Listenable】","【builder】 : *组件构造器 【TransitionBuilder】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_en-US.json deleted file mode 100644 index 92ebd9249..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedContainer","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Container] that gradually changes its values over a period of time.","fields":[{"name":"child","type":"Widget?","desc":"The [child] contained by the container."},{"name":"alignment","type":"AlignmentGeometry?","desc":"Align the [child] within the container."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Empty space to inscribe inside the [decoration]. The [child], if any, is placed inside this padding."},{"name":"decoration","type":"Decoration?","desc":"The decoration to paint behind the [child]."},{"name":"foregroundDecoration","type":"Decoration?","desc":"The decoration to paint in front of the child."},{"name":"constraints","type":"BoxConstraints?","desc":"Additional constraints to apply to the child."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"Empty space to surround the [decoration] and [child]."},{"name":"transform","type":"Matrix4?","desc":"The transformation matrix to apply before painting the container."},{"name":"transformAlignment","type":"AlignmentGeometry?","desc":"The alignment of the origin, relative to the size of the container, if [transform] is specified."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"The clip behavior when [AnimatedContainer.decoration] is not null."}],"id":123,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedContainer","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【color】: Color 【Color】","【width】: Width 【double】","【height】: Height 【double】","【alignment】: Alignment 【AlignmentGeometry】","【decoration】: Decoration 【Decoration】","【constraints】: Constraints 【BoxConstraints】","【transform】: Transformation 【Matrix4】","【margin】: Margin 【EdgeInsetsGeometry】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_zh-CN.json deleted file mode 100644 index ecc92a1af..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedContainer/AnimatedContainer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedContainer","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Container] 的动画版本,在一段时间内逐渐改变其值。","fields":[{"name":"child","type":"Widget?","desc":"容器包含的 [child]。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"在容器内对齐 [child]。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在 [decoration] 内部刻画的空白空间。[child](如果有)放置在此内边距内。"},{"name":"decoration","type":"Decoration?","desc":"在 [child] 后面绘制的装饰。"},{"name":"foregroundDecoration","type":"Decoration?","desc":"在子项前面绘制的装饰。"},{"name":"constraints","type":"BoxConstraints?","desc":"应用于子项的附加约束。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕 [decoration] 和 [child] 的空白空间。"},{"name":"transform","type":"Matrix4?","desc":"在绘制容器之前应用的变换矩阵。"},{"name":"transformAlignment","type":"AlignmentGeometry?","desc":"如果指定了 [transform],相对于容器大小的原点对齐方式。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"当 [AnimatedContainer.decoration] 不为空时的裁剪行为。"}],"id":123,"localName":"容器动画","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedContainer基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【color】 : 颜色 【Color】","【width】 : 宽 【double】","【height】 : 高 【double】","【alignment】 : 对齐 【AlignmentGeometry】","【decoration】 : 装饰 【Decoration】","【constraints】 : 约束 【BoxConstraints】","【transform】 : 变化 【Matrix4】","【margin】 : 外边距 【EdgeInsetsGeometry】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_en-US.json deleted file mode 100644 index 7640d86bc..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedCrossFade","path":"/src/widgets/animated_cross_fade.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that cross-fades between two given children and animates itself between their sizes.","fields":[{"name":"firstChild","type":"Widget","required":true,"desc":"The child that is visible when [crossFadeState] is [CrossFadeState.showFirst]. It fades out when transitioning [crossFadeState] from [CrossFadeState.showFirst] to [CrossFadeState.showSecond] and vice versa."},{"name":"secondChild","type":"Widget","required":true,"desc":"The child that is visible when [crossFadeState] is [CrossFadeState.showSecond]. It fades in when transitioning [crossFadeState] from [CrossFadeState.showFirst] to [CrossFadeState.showSecond] and vice versa."},{"name":"crossFadeState","type":"CrossFadeState","required":true,"desc":"The child that will be shown when the animation has completed."},{"name":"duration","type":"Duration","required":true,"desc":"The duration of the whole orchestrated animation."},{"name":"reverseDuration","type":"Duration?","desc":"The duration of the whole orchestrated animation when running in reverse."},{"name":"firstCurve","type":"Curve","required":true,"desc":"The fade curve of the first child."},{"name":"secondCurve","type":"Curve","required":true,"desc":"The fade curve of the second child."},{"name":"sizeCurve","type":"Curve","required":true,"desc":"The curve of the animation between the two children's sizes."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How the children should be aligned while the size is animating."},{"name":"layoutBuilder","type":"AnimatedCrossFadeBuilder","required":true,"desc":"A builder that positions the [firstChild] and [secondChild] widgets."},{"name":"excludeBottomFocus","type":"bool","required":true,"desc":"When true, this is equivalent to wrapping the bottom widget with an [ExcludeFocus] widget while it is at the bottom of the cross-fade stack."}],"id":100,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedCrossFade","desc":["【firstChild】 : First Child 【Widget】","【secondChild】 : Second Child 【Widget】","【crossFadeState】 : Which to Display 【CrossFadeState】","【duration】 : Duration 【Duration】"]},{"file":"node2_curve.dart","name":"Animation Curves of AnimatedCrossFade","desc":["【firstCurve】 : First Curve 【Curve】","【secondCurve】 : Second Curve 【Curve】","【sizeCurve】 : Size Change Curve 【CrossFadeState】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_zh-CN.json deleted file mode 100644 index 0ea991a04..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedCrossFade/AnimatedCrossFade_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedCrossFade","path":"/src/widgets/animated_cross_fade.dart","parents":["StatefulWidget","Widget"],"desc":"在两个给定子项之间交叉淡入淡出并在它们的大小之间进行动画的小部件。","fields":[{"name":"firstChild","type":"Widget","required":true,"desc":"当 [crossFadeState] 为 [CrossFadeState.showFirst] 时可见的子项。当 [crossFadeState] 从 [CrossFadeState.showFirst] 转换到 [CrossFadeState.showSecond] 时淡出,反之亦然。"},{"name":"secondChild","type":"Widget","required":true,"desc":"当 [crossFadeState] 为 [CrossFadeState.showSecond] 时可见的子项。当 [crossFadeState] 从 [CrossFadeState.showFirst] 转换到 [CrossFadeState.showSecond] 时淡入,反之亦然。"},{"name":"crossFadeState","type":"CrossFadeState","required":true,"desc":"动画完成时将显示的子项。"},{"name":"duration","type":"Duration","required":true,"desc":"整个编排动画的持续时间。"},{"name":"reverseDuration","type":"Duration?","desc":"反向运行时整个编排动画的持续时间。"},{"name":"firstCurve","type":"Curve","required":true,"desc":"第一个子项的淡入淡出曲线。"},{"name":"secondCurve","type":"Curve","required":true,"desc":"第二个子项的淡入淡出曲线。"},{"name":"sizeCurve","type":"Curve","required":true,"desc":"两个子项大小之间动画的曲线。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"在大小进行动画时子项应如何对齐。"},{"name":"layoutBuilder","type":"AnimatedCrossFadeBuilder","required":true,"desc":"定位 [firstChild] 和 [secondChild] 小部件的构建器。"},{"name":"excludeBottomFocus","type":"bool","required":true,"desc":"当为 true 时,这等同于在底部小部件位于交叉淡入淡出堆栈底部时用 [ExcludeFocus] 小部件包装它。"}],"id":100,"localName":"组件切换","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedCrossFade基本使用","desc":["【firstChild】 : 第一孩子 【Widget】","【secondChild】 : 第二孩子 【Widget】","【crossFadeState】 : 显示第几个 【CrossFadeState】","【duration】 : 时长 【Duration】"]},{"file":"node2_curve.dart","name":"AnimatedCrossFade动画曲线","desc":["【firstCurve】 : 第一曲线 【Curve】","【secondCurve】 : 第二曲线 【Curve】","【sizeCurve】 : 尺寸变化曲线 【CrossFadeState】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_en-US.json deleted file mode 100644 index 9b8af9e58..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedDefaultTextStyle","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [DefaultTextStyle] which automatically transitions the default text style (the text style to apply to descendant [Text] widgets without explicit style) over a given duration whenever the given style changes.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"style","type":"TextStyle","required":true,"desc":"The target text style."},{"name":"textAlign","type":"TextAlign?","desc":"How the text should be aligned horizontally."},{"name":"softWrap","type":"bool","required":true,"desc":"Whether the text should break at soft line breaks."},{"name":"overflow","type":"TextOverflow","required":true,"desc":"How visual overflow should be handled."},{"name":"maxLines","type":"int?","desc":"An optional maximum number of lines for the text to span, wrapping if necessary."},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"The strategy to use when calculating the width of the Text."},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"}],"id":124,"lever":3,"family":1,"linkIds":[114,324],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedDefaultTextStyle","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【textAlign】: Text alignment 【TextAlign】","【softWrap】: Whether to wrap 【bool】","【maxLines】: Maximum number of lines 【int】","【overflow】: Overflow mode 【TextOverflow】","【style】: Text style 【TextStyle】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_zh-CN.json deleted file mode 100644 index 9174d25dd..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedDefaultTextStyle/AnimatedDefaultTextStyle_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedDefaultTextStyle","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[DefaultTextStyle] 的动画版本,当给定样式发生变化时,会在给定持续时间内自动过渡默认文本样式(应用于没有显式样式的后代 [Text] 小部件的文本样式)。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"style","type":"TextStyle","required":true,"desc":"目标文本样式。"},{"name":"textAlign","type":"TextAlign?","desc":"文本应如何水平对齐。"},{"name":"softWrap","type":"bool","required":true,"desc":"文本是否应在软换行符处换行。"},{"name":"overflow","type":"TextOverflow","required":true,"desc":"应如何处理视觉溢出。"},{"name":"maxLines","type":"int?","desc":"文本跨越的可选最大行数,必要时换行。"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"计算文本宽度时使用的策略。"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"}],"id":124,"localName":"容器动画","lever":3,"family":1,"linkIds":[114,324],"nodes":[{"file":"node1_base.dart","name":"AnimatedDefaultTextStyle基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【textAlign】 : 文字对齐方式 【TextAlign】","【softWrap】 : 是否包裹 【bool】","【maxLines】 : 最大行数 【int】","【overflow】 : 溢出模式 【TextOverflow】","【style】 : 文字样式 【TextStyle】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_en-US.json deleted file mode 100644 index c80008ea8..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedFractionallySizedBox","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [FractionallySizedBox] which automatically transitions the child's size over a given duration whenever the given [widthFactor] or [heightFactor] changes, as well as the position whenever the given [alignment] changes.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"heightFactor","type":"double?","desc":"{@macro flutter.widgets.basic.fractionallySizedBox.heightFactor}"},{"name":"widthFactor","type":"double?","desc":"{@macro flutter.widgets.basic.fractionallySizedBox.widthFactor}"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"{@macro flutter.widgets.basic.fractionallySizedBox.alignment}"}],"id":260,"lever":3,"family":1,"linkIds":[82,120,123,121],"nodes":[{"file":"node1.dart","name":"Animation Transition Effect","desc":["In this case, the heightFactor, widthFactor, and alignment parameters are modified when clicked to view the animation effect.","【child】 : Child component 【Widget】","【duration】 : Animation duration 【Duration】","【onEnd】 : Animation end callback 【Function()】","【alignment】 : Animation transformation center 【Alignment】","【curve】 : Animation curve 【Duration】","【heightFactor】 : Height factor 【double?】","【widthFactor】 : Width factor 【double?】","【turns】 : Rotation amount 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_zh-CN.json deleted file mode 100644 index 3dffd8d5c..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedFractionallySizedBox/AnimatedFractionallySizedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedFractionallySizedBox","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[FractionallySizedBox] 的动画版本,当给定的 [widthFactor] 或 [heightFactor] 发生变化时,会在给定持续时间内自动过渡子项的大小,以及当给定的 [alignment] 发生变化时过渡位置。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"heightFactor","type":"double?","desc":"{@macro flutter.widgets.basic.fractionallySizedBox.heightFactor}"},{"name":"widthFactor","type":"double?","desc":"{@macro flutter.widgets.basic.fractionallySizedBox.widthFactor}"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"{@macro flutter.widgets.basic.fractionallySizedBox.alignment}"}],"id":260,"localName":"动画分率盒","lever":3,"family":1,"linkIds":[82,120,123,121],"nodes":[{"file":"node1.dart","name":"动画过渡效果","desc":["该案例中,点击时会修改 heightFactor、widthFactor、alignment 参数,查看动画运动效果。","【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【alignment】 : 动画变换中心 【Alignment】","【curve】 : 动画曲线 【Duration】","【heightFactor】 : 高度分率 【double?】","【widthFactor】 : 宽度分率 【double?】","【turns】 : 旋转量 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_en-US.json deleted file mode 100644 index 87a68edc8..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedGrid","path":"/src/widgets/animated_scroll_view.dart","parents":["_AnimatedScrollView","StatefulWidget","Widget"],"desc":" A scrolling container that animates items when they are inserted into or removed from a grid. in a grid.","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"{@template flutter.widgets.AnimatedGrid.gridDelegate} A delegate that controls the layout of the children within the [AnimatedGrid]."}],"id":323,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_zh-CN.json deleted file mode 100644 index c77eb16ab..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedGrid/AnimatedGrid_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedGrid","path":"/src/widgets/animated_scroll_view.dart","parents":["_AnimatedScrollView","StatefulWidget","Widget"],"desc":"一个滚动容器,当项目插入或从网格中移除时对其进行动画处理。","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"{@template flutter.widgets.AnimatedGrid.gridDelegate} 控制 [AnimatedGrid] 内子项布局的委托。"}],"id":323,"localName":"AnimatedGrid","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_en-US.json deleted file mode 100644 index c2336bb58..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedIcon","path":"/src/material/animated_icons/animated_icons.dart","parents":["StatelessWidget","Widget"],"desc":" Shows an animated icon at a given animation [progress].","fields":[{"name":"progress","type":"Animation","required":true,"desc":"The animation progress for the animated icon."},{"name":"color","type":"Color?","desc":"The color to use when drawing the icon."},{"name":"size","type":"double?","desc":"The size of the icon in logical pixels."},{"name":"icon","type":"AnimatedIconData","required":true,"desc":"The icon to display. Available icons are listed in [AnimatedIcons]."},{"name":"semanticLabel","type":"String?","desc":"Semantic label for the icon."},{"name":"textDirection","type":"TextDirection?","desc":"The text direction to use for rendering the icon."}],"id":125,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedIcon","desc":["【icon】: Animation icon data 【AnimatedIcons】","【size】: Size 【double】","【color】: Color 【Color】","【progress】: Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_zh-CN.json deleted file mode 100644 index d2c467769..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedIcon/AnimatedIcon_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedIcon","path":"/src/material/animated_icons/animated_icons.dart","parents":["StatelessWidget","Widget"],"desc":"在给定动画 [progress] 处显示动画图标。","fields":[{"name":"progress","type":"Animation","required":true,"desc":"动画图标的动画进度。"},{"name":"color","type":"Color?","desc":"绘制图标时使用的颜色。"},{"name":"size","type":"double?","desc":"图标的逻辑像素大小。"},{"name":"icon","type":"AnimatedIconData","required":true,"desc":"要显示的图标。可用图标列在 [AnimatedIcons] 中。"},{"name":"semanticLabel","type":"String?","desc":"图标的语义标签。"},{"name":"textDirection","type":"TextDirection?","desc":"用于渲染图标的文本方向。"}],"id":125,"localName":"图标动画","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedIcon基本使用","desc":["【icon】 : 动画图标数据 【AnimatedIcons】","【size】 : 大小 【double】","【color】 : 颜色 【Color】","【progress】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_en-US.json deleted file mode 100644 index f3488814b..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedList","path":"/src/widgets/animated_scroll_view.dart","parents":["_AnimatedScrollView","StatefulWidget","Widget"],"desc":" A scrolling container that animates items when they are inserted or removed.","fields":[],"id":117,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedList","desc":["【itemBuilder】: Component builder 【AnimatedListItemBuilder】","【initialItemCount】: Number of child components 【int】","【scrollDirection】: Scroll direction 【Axis】","【controller】: Scroll controller 【ScrollController】","【reverse】: Whether the data is reversed 【bool】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_zh-CN.json deleted file mode 100644 index 299865f1e..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedList/AnimatedList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedList","path":"/src/widgets/animated_scroll_view.dart","parents":["_AnimatedScrollView","StatefulWidget","Widget"],"desc":"一个滚动容器,当项目插入或移除时对其进行动画处理。","fields":[],"id":117,"localName":"动画列表","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedList基本使用","desc":["【itemBuilder】 : 组件构造器 【AnimatedListItemBuilder】","【initialItemCount】 : 子组件数量 【int】","【scrollDirection】 : 滑动方向 【Axis】","【controller】 : 滑动控制器 【ScrollController】","【reverse】 : 数据是否反向 【bool】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_en-US.json deleted file mode 100644 index 2d8056198..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedModalBarrier","path":"/src/widgets/modal_barrier.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" A widget that prevents the user from interacting with widgets behind itself, and can be configured with an animated color value.","fields":[{"name":"dismissible","type":"bool","required":true,"desc":"Whether touching the barrier will pop the current route off the [Navigator]."},{"name":"semanticsLabel","type":"String?","desc":"Semantics label used for the barrier if it is [dismissible]."},{"name":"barrierSemanticsDismissible","type":"bool?","desc":"Whether the modal barrier semantics are included in the semantics tree."},{"name":"onDismiss","type":"VoidCallback?","desc":"{@macro flutter.widgets.ModalBarrier.onDismiss}"},{"name":"clipDetailsNotifier","type":"ValueNotifier?","desc":"{@macro flutter.widgets.ModalBarrier.clipDetailsNotifier}"},{"name":"semanticsOnTapHint","type":"String?","desc":"This hint text instructs users what they are able to do when they tap on the [ModalBarrier]"}],"id":227,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to AnimatedModalBarrier","desc":["【dismissible】: Whether to return on click 【bool】","【color】: Color 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_zh-CN.json deleted file mode 100644 index 243903aa6..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedModalBarrier/AnimatedModalBarrier_zh-CN.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "AnimatedModalBarrier", - "path": "/src/widgets/modal_barrier.dart", - "parents": [ - "AnimatedWidget", - "StatefulWidget", - "Widget" - ], - "desc": "一个阻止用户与其后面的小部件交互的小部件,可以配置动画颜色值。", - "fields": [ - { - "name": "dismissible", - "type": "bool", - "required": true, - "desc": "触摸屏障是否会从 [Navigator] 中弹出当前路由。" - }, - { - "name": "semanticsLabel", - "type": "String?", - "desc": "如果屏障是 [dismissible] 的,用于屏障的语义标签。" - }, - { - "name": "barrierSemanticsDismissible", - "type": "bool?", - "desc": "模态屏障语义是否包含在语义树中。" - }, - { - "name": "onDismiss", - "type": "VoidCallback?", - "desc": "{@macro flutter.widgets.ModalBarrier.onDismiss}" - }, - { - "name": "clipDetailsNotifier", - "type": "ValueNotifier?", - "desc": "{@macro flutter.widgets.ModalBarrier.clipDetailsNotifier}" - }, - { - "name": "semanticsOnTapHint", - "type": "String?", - "desc": "此提示文本指示用户在点击 [ModalBarrier] 时能够执行的操作" - } - ], - "id": 227, - "localName": "动画屏障模", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedModalBarrier 介绍", - "desc": [ - "【dismissible】 : 点击是否返回 【bool】", - "【color】 : 颜色 【Animation】" - ] - } - ] -} diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_en-US.json deleted file mode 100644 index 3ded2b301..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_en-US.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "AnimatedOpacity", - "path": "/src/widgets/implicit_animations.dart", - "parents": [ - "ImplicitlyAnimatedWidget", - "StatefulWidget", - "Widget" - ], - "desc": " Animated version of [Opacity] which automatically transitions the child's opacity over a given duration whenever the given opacity changes.", - "fields": [ - { - "name": "child", - "type": "Widget?", - "desc": "The widget below this widget in the tree." - }, - { - "name": "opacity", - "type": "double", - "required": true, - "desc": "The target opacity." - }, - { - "name": "alwaysIncludeSemantics", - "type": "bool", - "required": true, - "desc": "Whether the semantic information of the children is always included." - } - ], - "id": 118, - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedOpacity", - "desc": [ - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【opacity】: Opacity 【double】" - ] - } - ] -} diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_zh-CN.json deleted file mode 100644 index 17a99e6fa..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedOpacity/AnimatedOpacity_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedOpacity","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Opacity] 的动画版本,当给定的不透明度发生变化时,会在给定持续时间内自动过渡子项的不透明度。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"opacity","type":"double","required":true,"desc":"目标不透明度。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含子项的语义信息。"}],"id":118,"localName":"透明动画","lever":3,"family":1,"linkIds":[89,73],"nodes":[{"file":"node1_base.dart","name":"AnimatedOpacity基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【opacity】 : 透明度 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_en-US.json deleted file mode 100644 index 84849e02a..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedPadding","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Padding] which automatically transitions the indentation over a given duration whenever the given inset changes.","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the child."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":119,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedPadding","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_zh-CN.json deleted file mode 100644 index 28d5c3d7e..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedPadding/AnimatedPadding_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedPadding","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Padding] 的动画版本,当给定的插入值发生变化时,会在给定持续时间内自动过渡缩进。","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"子项的插入空间量。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":119,"localName":"边距动画","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedPadding基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_en-US.json deleted file mode 100644 index abf4767a7..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedPhysicalModel","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [PhysicalModel].","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"shape","type":"BoxShape","required":true,"desc":"The type of shape."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"borderRadius","type":"BorderRadius?","desc":"The target border radius of the rounded corners for a rectangle shape."},{"name":"elevation","type":"double","required":true,"desc":"The target z-coordinate relative to the parent at which to place this physical object."},{"name":"color","type":"Color","required":true,"desc":"The target background color."},{"name":"animateColor","type":"bool","required":true,"desc":"Whether the color should be animated."},{"name":"shadowColor","type":"Color","required":true,"desc":"The target shadow color."},{"name":"animateShadowColor","type":"bool","required":true,"desc":"Whether the shadow color should be animated."}],"id":225,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedPhysicalModel","desc":["【color】: Background color 【Color】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【shape】: Shape 【BoxShape】","【elevation】: Elevation 【double】","【borderRadius】: Border radius 【BorderRadius】","【shadowColor】: Shadow color 【Color】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_zh-CN.json deleted file mode 100644 index c5e54acd7..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedPhysicalModel/AnimatedPhysicalModel_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedPhysicalModel","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[PhysicalModel] 的动画版本。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"shape","type":"BoxShape","required":true,"desc":"形状的类型。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"borderRadius","type":"BorderRadius?","desc":"矩形形状圆角的目标边框半径。"},{"name":"elevation","type":"double","required":true,"desc":"相对于父级放置此物理对象的目标 z 坐标。"},{"name":"color","type":"Color","required":true,"desc":"目标背景颜色。"},{"name":"animateColor","type":"bool","required":true,"desc":"颜色是否应该动画。"},{"name":"shadowColor","type":"Color","required":true,"desc":"目标阴影颜色。"},{"name":"animateShadowColor","type":"bool","required":true,"desc":"阴影颜色是否应该动画。"}],"id":225,"localName":"物理模块动画","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedPhysicalModel基本使用","desc":["【color】 : 背景色 【Color】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【shape】 : 形状 【BoxShape】","【elevation】 : 影深 【double】","【borderRadius】 : 圆角 【BorderRadius】","【shadowColor】 : 阴影色 【Color】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_en-US.json deleted file mode 100644 index efa0430a8..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedPositioned","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Positioned] which automatically transitions the child's position over a given duration whenever the given position changes.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"left","type":"double?","desc":"The offset of the child's left edge from the left of the stack."},{"name":"top","type":"double?","desc":"The offset of the child's top edge from the top of the stack."},{"name":"right","type":"double?","desc":"The offset of the child's right edge from the right of the stack."},{"name":"bottom","type":"double?","desc":"The offset of the child's bottom edge from the bottom of the stack."},{"name":"width","type":"double?","desc":"The child's width."},{"name":"height","type":"double?","desc":"The child's height."}],"id":121,"lever":3,"family":1,"linkIds":[108,93,122],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedPositioned","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【top】: Distance to parent top 【double】","【right】: Distance to parent right 【double】","【left】: Distance to parent left 【double】","【bottom】: Distance to parent bottom 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_zh-CN.json deleted file mode 100644 index bbc09b37a..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedPositioned/AnimatedPositioned_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedPositioned","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Positioned] 的动画版本,当给定位置发生变化时,会在给定持续时间内自动过渡子项的位置。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"left","type":"double?","desc":"子项左边缘距离堆栈左侧的偏移量。"},{"name":"top","type":"double?","desc":"子项顶部边缘距离堆栈顶部的偏移量。"},{"name":"right","type":"double?","desc":"子项右边缘距离堆栈右侧的偏移量。"},{"name":"bottom","type":"double?","desc":"子项底部边缘距离堆栈底部的偏移量。"},{"name":"width","type":"double?","desc":"子项的宽度。"},{"name":"height","type":"double?","desc":"子项的高度。"}],"id":121,"localName":"定位动画","lever":3,"family":1,"linkIds":[108,93,122],"nodes":[{"file":"node1_base.dart","name":"AnimatedPositioned基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【top】 : 到父顶距离 【double】","【right】 : 到父右距离 【double】","【left】 : 到父左距离 【double】","【bottom】 : 到父底距离 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_en-US.json deleted file mode 100644 index fb5a5f6ef..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedPositionedDirectional","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [PositionedDirectional] which automatically transitions the child's position over a given duration whenever the given position changes.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"start","type":"double?","desc":"The offset of the child's start edge from the start of the stack."},{"name":"top","type":"double?","desc":"The offset of the child's top edge from the top of the stack."},{"name":"end","type":"double?","desc":"The offset of the child's end edge from the end of the stack."},{"name":"bottom","type":"double?","desc":"The offset of the child's bottom edge from the bottom of the stack."},{"name":"width","type":"double?","desc":"The child's width."},{"name":"height","type":"double?","desc":"The child's height."}],"id":122,"lever":3,"family":1,"linkIds":[121,159],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedPositionedDirectional","desc":["【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【top】: Distance to parent top 【double】","【end】: Distance to parent right 【double】","【start】: Distance to parent left 【double】","【bottom】: Distance to parent bottom 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_zh-CN.json deleted file mode 100644 index 3fc0ae575..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedPositionedDirectional/AnimatedPositionedDirectional_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedPositionedDirectional","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[PositionedDirectional] 的动画版本,当给定位置发生变化时,会在给定持续时间内自动过渡子项的位置。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"start","type":"double?","desc":"子项起始边缘距离堆栈起始位置的偏移量。"},{"name":"top","type":"double?","desc":"子项顶部边缘距离堆栈顶部的偏移量。"},{"name":"end","type":"double?","desc":"子项结束边缘距离堆栈结束位置的偏移量。"},{"name":"bottom","type":"double?","desc":"子项底部边缘距离堆栈底部的偏移量。"},{"name":"width","type":"double?","desc":"子项的宽度。"},{"name":"height","type":"double?","desc":"子项的高度。"}],"id":122,"localName":"方向定位动画","lever":3,"family":1,"linkIds":[121,159],"nodes":[{"file":"node1_base.dart","name":"AnimatedPositionedDirectional基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【top】 : 到父顶距离 【double】","【end】 : 到父右距离 【double】","【start】 : 到父左距离 【double】","【bottom】 : 到父底距离 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_en-US.json deleted file mode 100644 index 42c89f958..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedRotation","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Transform.rotate] which automatically transitions the child's rotation over a given duration whenever the given rotation changes.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"turns","type":"double","required":true,"desc":"The animation that controls the rotation of the child."},{"name":"alignment","type":"Alignment","required":true,"desc":"The alignment of the origin of the coordinate system in which the rotation takes place, relative to the size of the box."},{"name":"filterQuality","type":"FilterQuality?","desc":"The filter quality with which to apply the transform as a bitmap operation."}],"id":259,"lever":3,"family":1,"linkIds":[247,249],"nodes":[{"file":"node1.dart","name":"Rotation Animation Effect","desc":["In this case, drag to adjust the turns parameter to see the animation effect. The rotation angle is: turns*2*pi","【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【alignment】: Animation transformation center 【Alignment】","【curve】: Animation curve 【Duration】","【filterQuality】: Filter quality 【FilterQuality】","【turns】: Rotation amount 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_zh-CN.json deleted file mode 100644 index b1b43acd6..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedRotation/AnimatedRotation_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedRotation","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Transform.rotate] 的动画版本,当给定旋转发生变化时,会在给定持续时间内自动过渡子项的旋转。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"turns","type":"double","required":true,"desc":"控制子项旋转的动画。"},{"name":"alignment","type":"Alignment","required":true,"desc":"旋转发生的坐标系原点相对于盒子大小的对齐方式。"},{"name":"filterQuality","type":"FilterQuality?","desc":"作为位图操作应用变换的滤镜质量。"}],"id":259,"localName":"旋转动画","lever":3,"family":1,"linkIds":[247,249],"nodes":[{"file":"node1.dart","name":"旋转动画效果","desc":["该案例中,拖拽调节 turns 参数,查看动画运动效果。旋转角度为: turns*2*pi","【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【alignment】 : 动画变换中心 【Alignment】","【curve】 : 动画曲线 【Duration】","【filterQuality】 : 滤镜质量 【FilterQuality】","【turns】 : 旋转量 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_en-US.json deleted file mode 100644 index d5b2379e3..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedScale","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Transform.scale] which automatically transitions the child's scale over a given duration whenever the given scale changes.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"scale","type":"double","required":true,"desc":"The target scale."},{"name":"alignment","type":"Alignment","required":true,"desc":"The alignment of the origin of the coordinate system in which the scale takes place, relative to the size of the box."},{"name":"filterQuality","type":"FilterQuality?","desc":"The filter quality with which to apply the transform as a bitmap operation."}],"id":249,"lever":3,"family":1,"linkIds":[120,247,201],"nodes":[{"file":"node1.dart","name":"Scaling Animation Effect","desc":["In this case, drag to adjust the scale parameter to view the animation effect.","【child】: Child component 【Widget】","【duration】: Animation duration 【Duration】","【onEnd】: Animation end callback 【Function()】","【curve】: Animation curve 【Duration】","【alignment】: Animation transformation center 【Alignment】","【filterQuality】: Filter quality 【FilterQuality】","【scale】: Scaling amount 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_zh-CN.json deleted file mode 100644 index 8f18c532e..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedScale/AnimatedScale_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedScale","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Transform.scale] 的动画版本,当给定缩放发生变化时,会在给定持续时间内自动过渡子项的缩放。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"scale","type":"double","required":true,"desc":"目标缩放。"},{"name":"alignment","type":"Alignment","required":true,"desc":"缩放发生的坐标系原点相对于盒子大小的对齐方式。"},{"name":"filterQuality","type":"FilterQuality?","desc":"作为位图操作应用变换的滤镜质量。"}],"id":249,"localName":"缩放动画","lever":3,"family":1,"linkIds":[120,247,201],"nodes":[{"file":"node1.dart","name":"缩放动画效果","desc":["该案例中,拖拽调节 scale 参数,查看动画运动效果。","【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【alignment】 : 动画变换中心 【Alignment】","【filterQuality】 : 滤镜质量 【FilterQuality】","【scale】 : 缩放量 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_en-US.json deleted file mode 100644 index ba3fa709b..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedSize","path":"/src/widgets/animated_size.dart","parents":["StatefulWidget","Widget"],"desc":" Animated widget that automatically transitions its size over a given duration whenever the given child's size changes.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"The alignment of the child within the parent when the parent is not yet the same size as the child."},{"name":"curve","type":"Curve","required":true,"desc":"The animation curve when transitioning this widget's size to match the child's size."},{"name":"duration","type":"Duration","required":true,"desc":"The duration when transitioning this widget's size to match the child's size."},{"name":"reverseDuration","type":"Duration?","desc":"The duration when transitioning this widget's size to match the child's size when going in reverse."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"onEnd","type":"VoidCallback?","desc":"Called every time an animation completes."}],"id":201,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedSize","desc":["【child】 : Child component 【Widget】","【duration】 : Animation duration 【Duration】","【alignment】 : Alignment 【AlignmentGeometry】","【curve】 : Animation curve 【Duration】","【vsync】 : vsync 【TickerProvider】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_zh-CN.json deleted file mode 100644 index 78a578f41..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedSize/AnimatedSize_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedSize","path":"/src/widgets/animated_size.dart","parents":["StatefulWidget","Widget"],"desc":"动画小部件,当给定子项的大小发生变化时,会在给定持续时间内自动过渡其大小。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"当父级尚未与子级大小相同时,子级在父级内的对齐方式。"},{"name":"curve","type":"Curve","required":true,"desc":"过渡此小部件大小以匹配子项大小时的动画曲线。"},{"name":"duration","type":"Duration","required":true,"desc":"过渡此小部件大小以匹配子项大小时的持续时间。"},{"name":"reverseDuration","type":"Duration?","desc":"反向过渡此小部件大小以匹配子项大小时的持续时间。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"onEnd","type":"VoidCallback?","desc":"每次动画完成时调用。"}],"id":201,"localName":"尺寸动画","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedSize基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【alignment】 : 对齐方式 【AlignmentGeometry】","【curve】 : 动画曲线 【Duration】","【vsync】 : vsync 【TickerProvider】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_en-US.json deleted file mode 100644 index 6d3a49ab1..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_en-US.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "AnimatedSlide", - "path": "/src/widgets/implicit_animations.dart", - "parents": [ - "ImplicitlyAnimatedWidget", - "StatefulWidget", - "Widget" - ], - "desc": " Widget which automatically transitions the child's offset relative to its normal position whenever the given offset changes.", - "fields": [ - { - "name": "child", - "type": "Widget?", - "desc": "The widget below this widget in the tree." - }, - { - "name": "offset", - "type": "Offset", - "required": true, - "desc": "The target offset. The child will be translated horizontally by `width * dx` and vertically by `height * dy`" - } - ], - "id": 247, - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Slide Animation Effect", - "desc": [ - "In this case, drag to adjust the x, y parameters to view the animation effect. The offset = x, y * the width and height of the box.", - "【child】: child component 【Widget】", - "【duration】: animation duration 【Duration】", - "【onEnd】: animation end callback 【Function()】", - "【curve】: animation curve 【Duration】", - "【offset】: offset 【Offset】" - ] - } - ] -} diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_zh-CN.json deleted file mode 100644 index 0fc2f0116..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedSlide/AnimatedSlide_zh-CN.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "AnimatedSlide", - "path": "/src/widgets/implicit_animations.dart", - "parents": [ - "ImplicitlyAnimatedWidget", - "StatefulWidget", - "Widget" - ], - "desc": "当给定偏移量发生变化时,自动过渡子项相对于其正常位置的偏移量的小部件。", - "fields": [ - { - "name": "child", - "type": "Widget?", - "desc": "树中此小部件下方的小部件。" - }, - { - "name": "offset", - "type": "Offset", - "required": true, - "desc": "目标偏移量。子项将水平平移 `width * dx`,垂直平移 `height * dy`" - } - ], - "id": 247, - "localName": "滑动动画", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "滑动动画效果", - "desc": [ - "该案例中,拖拽调节 x,y 参数,查看动画运动效果。其中偏移量 = x,y * 方框宽高", - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【offset】 : 偏移量 【Offset】" - ] - } - ] -} diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_en-US.json deleted file mode 100644 index 67ea4b1ce..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedSwitcher","path":"/src/widgets/animated_switcher.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that by default does a cross-fade between a new widget and the widget previously set on the [AnimatedSwitcher] as a child.","fields":[{"name":"child","type":"Widget?","desc":"The current child widget to display. If there was a previous child, then that child will be faded out using the [switchOutCurve], while the new child is faded in with the [switchInCurve], over the [duration]."},{"name":"duration","type":"Duration","required":true,"desc":"The duration of the transition from the old [child] value to the new one."},{"name":"reverseDuration","type":"Duration?","desc":"The duration of the transition from the new [child] value to the old one."},{"name":"switchInCurve","type":"Curve","required":true,"desc":"The animation curve to use when transitioning in a new [child]."},{"name":"switchOutCurve","type":"Curve","required":true,"desc":"The animation curve to use when transitioning a previous [child] out."},{"name":"transitionBuilder","type":"AnimatedSwitcherTransitionBuilder","required":true,"desc":"A function that wraps a new [child] with an animation that transitions the [child] in when the animation runs in the forward direction and out when the animation runs in the reverse direction. This is only called when a new [child] is set (not for each build), or when a new [transitionBuilder] is set. If a new [transitionBuilder] is set, then the transition is rebuilt for the current child and all previous children using the new [transitionBuilder]. The function must not return null."},{"name":"layoutBuilder","type":"AnimatedSwitcherLayoutBuilder","required":true,"desc":"A function that wraps all of the children that are transitioning out, and the [child] that's transitioning in, with a widget that lays all of them out. This is called every time this widget is built. The function must not return null."}],"id":116,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedSwitcher","desc":["【child】 : Child component 【Widget】","【duration】 : Animation duration 【Duration】","【switchOutCurve】 : Switch out curve 【Curves】","【switchInCurve】 : Switch in curve 【Curves】","【switchInCurve】 : Switch in curve 【Curves】","【transitionBuilder】 : Animation builder 【Widget Function(Widget, Animation)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_zh-CN.json deleted file mode 100644 index 0b00daa8f..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedSwitcher/AnimatedSwitcher_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedSwitcher","path":"/src/widgets/animated_switcher.dart","parents":["StatefulWidget","Widget"],"desc":"默认情况下在新小部件和之前设置为 [AnimatedSwitcher] 子项的小部件之间进行交叉淡入淡出的小部件。","fields":[{"name":"child","type":"Widget?","desc":"要显示的当前子小部件。如果之前有子项,则该子项将使用 [switchOutCurve] 淡出,而新子项将使用 [switchInCurve] 在 [duration] 内淡入。"},{"name":"duration","type":"Duration","required":true,"desc":"从旧 [child] 值到新值的过渡持续时间。"},{"name":"reverseDuration","type":"Duration?","desc":"从新 [child] 值到旧值的过渡持续时间。"},{"name":"switchInCurve","type":"Curve","required":true,"desc":"过渡新 [child] 时使用的动画曲线。"},{"name":"switchOutCurve","type":"Curve","required":true,"desc":"过渡之前的 [child] 时使用的动画曲线。"},{"name":"transitionBuilder","type":"AnimatedSwitcherTransitionBuilder","required":true,"desc":"一个函数,用动画包装新的 [child],当动画正向运行时过渡 [child] 进入,当动画反向运行时过渡出去。仅在设置新 [child] 时(不是每次构建时)或设置新 [transitionBuilder] 时调用。如果设置了新的 [transitionBuilder],则使用新的 [transitionBuilder] 为当前子项和所有之前的子项重建过渡。该函数不得返回 null。"},{"name":"layoutBuilder","type":"AnimatedSwitcherLayoutBuilder","required":true,"desc":"一个函数,用小部件包装所有正在过渡出去的子项和正在过渡进入的 [child],该小部件布局所有这些子项。每次构建此小部件时都会调用此函数。该函数不得返回 null。"}],"id":116,"localName":"动画切换","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedSwitcher基本使用","desc":["【child】 : 孩子组件 【Widget】","【duration】 : 动画时长 【Duration】","【switchOutCurve】 : 切出曲线 【Curves】","【switchInCurve】 : 切入曲线 【Curves】","【switchInCurve】 : 切入曲线 【Curves】","【transitionBuilder】 : 动画构造器 【Widget Function(Widget, Animation)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_en-US.json deleted file mode 100644 index 4b4506883..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedTheme","path":"/src/material/theme.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Theme] which automatically transitions the colors, etc, over a given duration whenever the given theme changes.","fields":[{"name":"data","type":"ThemeData","required":true,"desc":"Specifies the color and typography values for descendant widgets."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":224,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AnimatedTheme","desc":["【data】 : Theme data 【ThemeData】","【duration】 : Animation duration 【Duration】","【onEnd】 : Animation end callback 【Function()】","【curve】 : Animation curve 【Duration】","【child】 : Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_zh-CN.json deleted file mode 100644 index 2ef3a2461..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedTheme/AnimatedTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedTheme","path":"/src/material/theme.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[Theme] 的动画版本,当给定主题发生变化时,会在给定持续时间内自动过渡颜色等。","fields":[{"name":"data","type":"ThemeData","required":true,"desc":"为后代小部件指定颜色和排版值。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":224,"localName":"动画主题","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnimatedTheme基本使用","desc":["【data】 : 主题数据 【ThemeData】","【duration】 : 动画时长 【Duration】","【onEnd】 : 动画结束回调 【Function()】","【curve】 : 动画曲线 【Duration】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_en-US.json deleted file mode 100644 index 8d12f50b3..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedWidget","path":"/src/widgets/transitions.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" A widget that rebuilds when the given [Listenable] changes value.","fields":[{"name":"listenable","type":"Listenable","required":true,"desc":"The [Listenable] to which this widget is listening."}],"id":362,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_zh-CN.json deleted file mode 100644 index 119153985..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnimatedWidget/AnimatedWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnimatedWidget","path":"/src/widgets/transitions.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"当给定的 [Listenable] 值发生变化时重建的小部件。","fields":[{"name":"listenable","type":"Listenable","required":true,"desc":"此小部件正在监听的 [Listenable]。"}],"id":362,"localName":"AnimatedWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_en-US.json b/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_en-US.json deleted file mode 100644 index 40a8efc2e..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnnotatedRegion","path":"/src/widgets/annotated_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Annotates a region of the layer tree with a value.","fields":[{"name":"value","type":"T","required":true,"desc":"A value which can be retrieved using [Layer.find]."},{"name":"sized","type":"bool","required":true,"desc":"If false, the layer pushed into the tree will not be provided with a size."}],"id":288,"lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnnotatedRegion Changes State Variables and Styles","desc":["【value】 : value 【T】","【sized】 : whether to provide size 【bool】","【child】 : child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_zh-CN.json deleted file mode 100644 index 92e237535..000000000 --- a/modules/widget_system/widgets/doc/widgets/AnnotatedRegion/AnnotatedRegion_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AnnotatedRegion","path":"/src/widgets/annotated_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"用值注释图层树的区域。","fields":[{"name":"value","type":"T","required":true,"desc":"可以使用 [Layer.find] 检索的值。"},{"name":"sized","type":"bool","required":true,"desc":"如果为 false,推入树中的图层将不会提供大小。"}],"id":288,"localName":"标注区域","lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AnnotatedRegion改变状态量样式","desc":["【value】 : 值 【T】","【sized】 : 是否提供大小 【bool】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_en-US.json b/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_en-US.json deleted file mode 100644 index 22065f42a..000000000 --- a/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AppBar","path":"/src/material/app_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design app bar.","fields":[{"name":"leading","type":"Widget?","desc":"{@template flutter.material.appbar.leading} A widget to display before the toolbar's [title]."},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@template flutter.material.appbar.automaticallyImplyLeading} Controls whether we should try to imply the leading widget if null."},{"name":"title","type":"Widget?","desc":"{@template flutter.material.appbar.title} The primary widget displayed in the app bar."},{"name":"actions","type":"List?","desc":"{@template flutter.material.appbar.actions} A list of Widgets to display in a row after the [title] widget."},{"name":"flexibleSpace","type":"Widget?","desc":"{@template flutter.material.appbar.flexibleSpace} This widget is stacked behind the toolbar and the tab bar. Its height will be the same as the app bar's overall height."},{"name":"bottom","type":"PreferredSizeWidget?","desc":"{@template flutter.material.appbar.bottom} This widget appears across the bottom of the app bar."},{"name":"elevation","type":"double?","desc":"{@template flutter.material.appbar.elevation} The z-coordinate at which to place this app bar relative to its parent."},{"name":"scrolledUnderElevation","type":"double?","desc":"{@template flutter.material.appbar.scrolledUnderElevation} The elevation that will be used if this app bar has something scrolled underneath it."},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"A check that specifies which child's [ScrollNotification]s should be listened to."},{"name":"shadowColor","type":"Color?","desc":"{@template flutter.material.appbar.shadowColor} The color of the shadow below the app bar."},{"name":"surfaceTintColor","type":"Color?","desc":"{@template flutter.material.appbar.surfaceTintColor} The color of the surface tint overlay applied to the app bar's background color to indicate elevation."},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.appbar.shape} The shape of the app bar's [Material] as well as its shadow."},{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.material.appbar.backgroundColor} The fill color to use for an app bar's [Material]."},{"name":"foregroundColor","type":"Color?","desc":"{@template flutter.material.appbar.foregroundColor} The default color for [Text] and [Icon]s within the app bar."},{"name":"iconTheme","type":"IconThemeData?","desc":"{@template flutter.material.appbar.iconTheme} The color, opacity, and size to use for toolbar icons."},{"name":"actionsIconTheme","type":"IconThemeData?","desc":"{@template flutter.material.appbar.actionsIconTheme} The color, opacity, and size to use for the icons that appear in the app bar's [actions]."},{"name":"primary","type":"bool","required":true,"desc":"{@template flutter.material.appbar.primary} Whether this app bar is being displayed at the top of the screen."},{"name":"centerTitle","type":"bool?","desc":"{@template flutter.material.appbar.centerTitle} Whether the title should be centered."},{"name":"excludeHeaderSemantics","type":"bool","required":true,"desc":"{@template flutter.material.appbar.excludeHeaderSemantics} Whether the title should be wrapped with header [Semantics]."},{"name":"titleSpacing","type":"double?","desc":"{@template flutter.material.appbar.titleSpacing} The spacing around [title] content on the horizontal axis. This spacing is applied even if there is no [leading] content or [actions]. If you want [title] to take all the space available, set this value to 0.0."},{"name":"toolbarOpacity","type":"double","required":true,"desc":"{@template flutter.material.appbar.toolbarOpacity} How opaque the toolbar part of the app bar is."},{"name":"bottomOpacity","type":"double","required":true,"desc":"{@template flutter.material.appbar.bottomOpacity} How opaque the bottom part of the app bar is."},{"name":"preferredSize","type":"Size","required":true,"desc":"{@template flutter.material.appbar.preferredSize} A size whose height is the sum of [toolbarHeight] and the [bottom] widget's preferred height."},{"name":"toolbarHeight","type":"double?","desc":"{@template flutter.material.appbar.toolbarHeight} Defines the height of the toolbar component of an [AppBar]."},{"name":"leadingWidth","type":"double?","desc":"{@template flutter.material.appbar.leadingWidth} Defines the width of [AppBar.leading] widget."},{"name":"toolbarTextStyle","type":"TextStyle?","desc":"{@template flutter.material.appbar.toolbarTextStyle} The default text style for the AppBar's [leading], and [actions] widgets, but not its [title]."},{"name":"titleTextStyle","type":"TextStyle?","desc":"{@template flutter.material.appbar.titleTextStyle} The default text style for the AppBar's [title] widget."},{"name":"systemOverlayStyle","type":"SystemUiOverlayStyle?","desc":"{@template flutter.material.appbar.systemOverlayStyle} Specifies the style to use for the system overlays (e.g. the status bar on Android or iOS, the system navigation bar on Android)."},{"name":"forceMaterialTransparency","type":"bool","required":true,"desc":"{@template flutter.material.appbar.forceMaterialTransparency} Forces the AppBar's Material widget type to be [MaterialType.transparency] (instead of Material's default type)."},{"name":"useDefaultSemanticsOrder","type":"bool","required":true,"desc":"{@template flutter.material.appbar.useDefaultSemanticsOrder} Whether to use the default semantic ordering for the app bar's children for accessibility traversal order."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"{@template flutter.material.appbar.actionsPadding} The padding between the [actions] and the end of the AppBar."}],"id":57,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AppBar","desc":["【leading】 : Left component 【Widget】","【title】 : Middle component 【Widget】","【actions】 : Right component 【List】","【elevation】 : Shadow depth 【double】","【shape】 : Shape 【ShapeBorder】","【backgroundColor】 : Background color 【Color】","【centerTitle】 : Whether the title is centered 【bool】"]},{"file":"node2_tab.dart","name":"Using AppBar with TabBar and TabBarView","desc":["【bottom】 : Bottom component 【PreferredSizeWidget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_zh-CN.json deleted file mode 100644 index 7b439af90..000000000 --- a/modules/widget_system/widgets/doc/widgets/AppBar/AppBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AppBar","path":"/src/material/app_bar.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 应用栏。","fields":[{"name":"leading","type":"Widget?","desc":"{@template flutter.material.appbar.leading} 在工具栏 [title] 之前显示的小部件。"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@template flutter.material.appbar.automaticallyImplyLeading} 控制当 leading 为 null 时是否应尝试推断 leading 小部件。"},{"name":"title","type":"Widget?","desc":"{@template flutter.material.appbar.title} 在应用栏中显示的主要小部件。"},{"name":"actions","type":"List?","desc":"{@template flutter.material.appbar.actions} 在 [title] 小部件之后以行形式显示的小部件列表。"},{"name":"flexibleSpace","type":"Widget?","desc":"{@template flutter.material.appbar.flexibleSpace} 此小部件堆叠在工具栏和选项卡栏后面。其高度将与应用栏的整体高度相同。"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"{@template flutter.material.appbar.bottom} 此小部件出现在应用栏底部。"},{"name":"elevation","type":"double?","desc":"{@template flutter.material.appbar.elevation} 相对于其父级放置此应用栏的 z 坐标。"},{"name":"scrolledUnderElevation","type":"double?","desc":"{@template flutter.material.appbar.scrolledUnderElevation} 如果此应用栏下方有滚动内容,将使用的高度。"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"指定应监听哪个子项的 [ScrollNotification] 的检查。"},{"name":"shadowColor","type":"Color?","desc":"{@template flutter.material.appbar.shadowColor} 应用栏下方阴影的颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"{@template flutter.material.appbar.surfaceTintColor} 应用于应用栏背景颜色以指示高度的表面色调叠加的颜色。"},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.appbar.shape} 应用栏 [Material] 及其阴影的形状。"},{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.material.appbar.backgroundColor} 用于应用栏 [Material] 的填充颜色。"},{"name":"foregroundColor","type":"Color?","desc":"{@template flutter.material.appbar.foregroundColor} 应用栏内 [Text] 和 [Icon] 的默认颜色。"},{"name":"iconTheme","type":"IconThemeData?","desc":"{@template flutter.material.appbar.iconTheme} 用于工具栏图标的颜色、不透明度和大小。"},{"name":"actionsIconTheme","type":"IconThemeData?","desc":"{@template flutter.material.appbar.actionsIconTheme} 用于应用栏 [actions] 中出现的图标的颜色、不透明度和大小。"},{"name":"primary","type":"bool","required":true,"desc":"{@template flutter.material.appbar.primary} 此应用栏是否显示在屏幕顶部。"},{"name":"centerTitle","type":"bool?","desc":"{@template flutter.material.appbar.centerTitle} 标题是否应居中。"},{"name":"excludeHeaderSemantics","type":"bool","required":true,"desc":"{@template flutter.material.appbar.excludeHeaderSemantics} 标题是否应用标题 [Semantics] 包装。"},{"name":"titleSpacing","type":"double?","desc":"{@template flutter.material.appbar.titleSpacing} 水平轴上 [title] 内容周围的间距。即使没有 [leading] 内容或 [actions],也会应用此间距。如果希望 [title] 占用所有可用空间,请将此值设置为 0.0。"},{"name":"toolbarOpacity","type":"double","required":true,"desc":"{@template flutter.material.appbar.toolbarOpacity} 应用栏工具栏部分的不透明度。"},{"name":"bottomOpacity","type":"double","required":true,"desc":"{@template flutter.material.appbar.bottomOpacity} 应用栏底部部分的不透明度。"},{"name":"preferredSize","type":"Size","required":true,"desc":"{@template flutter.material.appbar.preferredSize} 高度为 [toolbarHeight] 和 [bottom] 小部件首选高度之和的大小。"},{"name":"toolbarHeight","type":"double?","desc":"{@template flutter.material.appbar.toolbarHeight} 定义 [AppBar] 工具栏组件的高度。"},{"name":"leadingWidth","type":"double?","desc":"{@template flutter.material.appbar.leadingWidth} 定义 [AppBar.leading] 小部件的宽度。"},{"name":"toolbarTextStyle","type":"TextStyle?","desc":"{@template flutter.material.appbar.toolbarTextStyle} AppBar 的 [leading] 和 [actions] 小部件的默认文本样式,但不包括其 [title]。"},{"name":"titleTextStyle","type":"TextStyle?","desc":"{@template flutter.material.appbar.titleTextStyle} AppBar 的 [title] 小部件的默认文本样式。"},{"name":"systemOverlayStyle","type":"SystemUiOverlayStyle?","desc":"{@template flutter.material.appbar.systemOverlayStyle} 指定用于系统叠加层的样式(例如 Android 或 iOS 上的状态栏,Android 上的系统导航栏)。"},{"name":"forceMaterialTransparency","type":"bool","required":true,"desc":"{@template flutter.material.appbar.forceMaterialTransparency} 强制 AppBar 的 Material 小部件类型为 [MaterialType.transparency](而不是 Material 的默认类型)。"},{"name":"useDefaultSemanticsOrder","type":"bool","required":true,"desc":"{@template flutter.material.appbar.useDefaultSemanticsOrder} 是否对应用栏的子项使用默认语义顺序进行辅助功能遍历顺序。"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"{@template flutter.material.appbar.actionsPadding} [actions] 和 AppBar 末端之间的内边距。"}],"id":57,"localName":"应用头栏","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AppBar基本使用","desc":["【leading】 : 左侧组件 【Widget】","【title】 : 中间组件 【Widget】","【actions】 : 右侧组件 【List】","【elevation】 : 影深 【double】","【shape】 : 形状 【ShapeBorder】","【backgroundColor】 : 影深 【背景色】","【centerTitle】 : 中间是否居中 【bool】"]},{"file":"node2_tab.dart","name":"AppBar与TabBar、TabBarView联用","desc":["【bottom】 : 底部组件 【PreferredSizeWidget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_en-US.json b/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_en-US.json deleted file mode 100644 index f3801b33a..000000000 --- a/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AppKitView","path":"/src/widgets/platform_view.dart","parents":["_DarwinView","StatefulWidget","Widget"],"desc":" Widget that contains a macOS AppKit view.","fields":[],"id":363,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_zh-CN.json deleted file mode 100644 index 0e4e9ad84..000000000 --- a/modules/widget_system/widgets/doc/widgets/AppKitView/AppKitView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AppKitView","path":"/src/widgets/platform_view.dart","parents":["_DarwinView","StatefulWidget","Widget"],"desc":"包含 macOS AppKit 视图的小部件。","fields":[],"id":363,"localName":"AppKitView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_en-US.json b/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_en-US.json deleted file mode 100644 index 5f650c97b..000000000 --- a/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AspectRatio","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that attempts to size the child to a specific aspect ratio.","fields":[{"name":"aspectRatio","type":"double","required":true,"desc":"The aspect ratio to attempt to use."}],"id":77,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of AspectRatio","desc":["【child】: Child component 【Widget】","【aspectRatio】: Aspect ratio 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_zh-CN.json deleted file mode 100644 index fb6f6a8e5..000000000 --- a/modules/widget_system/widgets/doc/widgets/AspectRatio/AspectRatio_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AspectRatio","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"尝试将子项调整为特定宽高比的小部件。","fields":[{"name":"aspectRatio","type":"double","required":true,"desc":"尝试使用的宽高比。"}],"id":77,"localName":"比例盒","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"AspectRatio基本使用","desc":["【child】 : 孩子组件 【Widget】","【aspectRatio】 : 宽高比例 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_en-US.json b/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_en-US.json deleted file mode 100644 index 7e0582130..000000000 --- a/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Autocomplete","path":"/src/material/autocomplete.dart","parents":["StatelessWidget","Widget"],"desc":" {@macro flutter.widgets.RawAutocomplete.RawAutocomplete}","fields":[{"name":"displayStringForOption","type":"AutocompleteOptionToString","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.displayStringForOption}"},{"name":"fieldViewBuilder","type":"AutocompleteFieldViewBuilder","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.fieldViewBuilder}"},{"name":"onSelected","type":"AutocompleteOnSelected?","desc":"{@macro flutter.widgets.RawAutocomplete.onSelected}"},{"name":"optionsBuilder","type":"AutocompleteOptionsBuilder","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.optionsBuilder}"},{"name":"optionsViewBuilder","type":"AutocompleteOptionsViewBuilder?","desc":"{@macro flutter.widgets.RawAutocomplete.optionsViewBuilder}"},{"name":"optionsViewOpenDirection","type":"OptionsViewOpenDirection","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.optionsViewOpenDirection}"},{"name":"optionsMaxHeight","type":"double","required":true,"desc":"The maximum height used for the default Material options list widget."},{"name":"initialValue","type":"TextEditingValue?","desc":"{@macro flutter.widgets.RawAutocomplete.initialValue}"}],"id":356,"lever":4,"family":0,"linkIds":[54,199],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Autocomplete","desc":["【optionsBuilder】: Option builder 【AutocompleteOptionsBuilder】","【onSelected】: Callback when selected 【AutocompleteOnSelected】"]},{"file":"node2_type.dart","name":"Generics of Autocomplete","desc":["【optionsViewBuilder】: Panel builder 【AutocompleteOptionsViewBuilder】","【fieldViewBuilder】: Input builder 【AutocompleteFieldViewBuilder】","【displayStringForOption】: Text display 【AutocompleteOptionToString】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_zh-CN.json deleted file mode 100644 index 54a48da22..000000000 --- a/modules/widget_system/widgets/doc/widgets/Autocomplete/Autocomplete_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Autocomplete","path":"/src/material/autocomplete.dart","parents":["StatelessWidget","Widget"],"desc":"{@macro flutter.widgets.RawAutocomplete.RawAutocomplete}","fields":[{"name":"displayStringForOption","type":"AutocompleteOptionToString","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.displayStringForOption}"},{"name":"fieldViewBuilder","type":"AutocompleteFieldViewBuilder","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.fieldViewBuilder}"},{"name":"onSelected","type":"AutocompleteOnSelected?","desc":"{@macro flutter.widgets.RawAutocomplete.onSelected}"},{"name":"optionsBuilder","type":"AutocompleteOptionsBuilder","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.optionsBuilder}"},{"name":"optionsViewBuilder","type":"AutocompleteOptionsViewBuilder?","desc":"{@macro flutter.widgets.RawAutocomplete.optionsViewBuilder}"},{"name":"optionsViewOpenDirection","type":"OptionsViewOpenDirection","required":true,"desc":"{@macro flutter.widgets.RawAutocomplete.optionsViewOpenDirection}"},{"name":"optionsMaxHeight","type":"double","required":true,"desc":"用于默认 Material 选项列表小部件的最大高度。"},{"name":"initialValue","type":"TextEditingValue?","desc":"{@macro flutter.widgets.RawAutocomplete.initialValue}"}],"id":356,"localName":"自动填充","lever":4,"family":0,"linkIds":[54,199],"nodes":[{"file":"node1_base.dart","name":"Autocomplete基本使用","desc":["【optionsBuilder】 : 选项构造器 【AutocompleteOptionsBuilder】","【onSelected】 : 选择时回调 【AutocompleteOnSelected】"]},{"file":"node2_type.dart","name":"Autocomplete的泛型","desc":["【optionsViewBuilder】 : 面板构造器 【AutocompleteOptionsViewBuilder】","【fieldViewBuilder】 : 输入构造器 【AutocompleteFieldViewBuilder】","【displayStringForOption】 : 文字展示 【AutocompleteOptionToString】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_en-US.json b/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_en-US.json deleted file mode 100644 index 1de4e8c7d..000000000 --- a/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AutocompleteHighlightedOption","path":"/src/widgets/autocomplete.dart","parents":["InheritedNotifier","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget used to indicate which autocomplete option should be highlighted for keyboard navigation.","fields":[],"id":364,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_zh-CN.json deleted file mode 100644 index a4e8a4db6..000000000 --- a/modules/widget_system/widgets/doc/widgets/AutocompleteHighlightedOption/AutocompleteHighlightedOption_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AutocompleteHighlightedOption","path":"/src/widgets/autocomplete.dart","parents":["InheritedNotifier","InheritedWidget","ProxyWidget","Widget"],"desc":"用于指示应为键盘导航突出显示哪个自动完成选项的继承小部件。","fields":[],"id":364,"localName":"AutocompleteHighlightedOption","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_en-US.json deleted file mode 100644 index 946138ff1..000000000 --- a/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AutofillGroup","path":"/src/widgets/autofill.dart","parents":["StatefulWidget","Widget"],"desc":" An [AutofillScope] widget that groups [AutofillClient]s together.","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"},{"name":"onDisposeAction","type":"AutofillContextAction","required":true,"desc":"The [AutofillContextAction] to be run when this [AutofillGroup] is the topmost [AutofillGroup] and it's being disposed, in order to clean up the current autofill context."}],"id":365,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_zh-CN.json deleted file mode 100644 index 86ac6f402..000000000 --- a/modules/widget_system/widgets/doc/widgets/AutofillGroup/AutofillGroup_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AutofillGroup","path":"/src/widgets/autofill.dart","parents":["StatefulWidget","Widget"],"desc":"将 [AutofillClient] 组合在一起的 [AutofillScope] 小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"},{"name":"onDisposeAction","type":"AutofillContextAction","required":true,"desc":"当此 [AutofillGroup] 是最顶层的 [AutofillGroup] 且正在被释放时要运行的 [AutofillContextAction],以清理当前自动填充上下文。"}],"id":365,"localName":"AutofillGroup","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_en-US.json b/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_en-US.json deleted file mode 100644 index 861cb968a..000000000 --- a/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AutomaticKeepAlive","path":"/src/widgets/automatic_keep_alive.dart","parents":["StatefulWidget","Widget"],"desc":" Allows subtrees to request to be kept alive in lazy lists.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":239,"lever":1,"family":1,"linkIds":[59,162,163,165,185,188],"nodes":[{"file":"node1_base.dart","name":"Introduction to AutomaticKeepAlive","desc":["【child】: Child component 【Widget】","The AutomaticKeepAlive component is used in the source code of list and page-switching components such as ListView, SliverList, GridView, SliverGrid, PageView, and TabBarView. When keeping a State alive, you can use AutomaticKeepAliveClientMixin, which is a simple encapsulation of the use of KeepAliveNotification. This example demonstrates the state preservation of ListView items."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_zh-CN.json b/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_zh-CN.json deleted file mode 100644 index bba5a60e8..000000000 --- a/modules/widget_system/widgets/doc/widgets/AutomaticKeepAlive/AutomaticKeepAlive_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"AutomaticKeepAlive","path":"/src/widgets/automatic_keep_alive.dart","parents":["StatefulWidget","Widget"],"desc":"允许子树请求在惰性列表中保持活动状态。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":239,"localName":"自动保活","lever":1,"family":1,"linkIds":[59,162,163,165,185,188],"nodes":[{"file":"node1_base.dart","name":"AutomaticKeepAlive 介绍","desc":["【child】 : 子组件 【Widget】","在 ListView、SliverList、GridView、SliverGrid、PageView、TabBarView 等列表、切页组件源码中都有使用到 AutomaticKeepAlive 组件。在保活某个 State 时,可以使用 AutomaticKeepAliveClientMixin 进行操作,它是对 KeepAliveNotification 使用的一个简易封装。该示例展示出 ListView 条目的状态保活。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_en-US.json b/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_en-US.json deleted file mode 100644 index 454dad3f2..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":" A Material Design back icon button.","fields":[],"id":31,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BackButton Properties","desc":["【color】: Color 【Color】","【style】: Button Style 【ButtonStyle?】","【onPressed】: Click Event 【Function】"," If onPressed is empty, it will exit the current stack."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_zh-CN.json deleted file mode 100644 index 273d51db6..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackButton/BackButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":"Material Design 返回图标按钮。","fields":[],"id":31,"localName":"返回按钮","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BackButton属性","desc":["【color】: 颜色 【Color】","【style】: 按钮样式 【ButtonStyle?】","【onPressed】: 点击事件 【Function】"," onPressed为空会退出当前栈"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_en-US.json deleted file mode 100644 index d0a12532a..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":" A \"back\" icon that's appropriate for the current [TargetPlatform].","fields":[],"id":272,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BackButtonIcon Effect","desc":["The _ActionIcon component adapts the back button icon for different platforms according to the ActionIconTheme."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_zh-CN.json deleted file mode 100644 index 8d4f0d49f..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackButtonIcon/BackButtonIcon_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":"适合当前 [TargetPlatform] 的\"返回\"图标。","fields":[],"id":272,"localName":"返回按钮图标","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BackButtonIcon 效果","desc":["通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的返回按钮图标。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_en-US.json b/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_en-US.json deleted file mode 100644 index 27e115a58..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackButtonListener","path":"/src/widgets/router.dart","parents":["StatefulWidget","Widget"],"desc":" A convenience widget that registers a callback for when the back button is pressed.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"onBackButtonPressed","type":"ValueGetter>","required":true,"desc":"The callback function that will be called when the back button is pressed."}],"id":366,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_zh-CN.json deleted file mode 100644 index 1b44432da..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackButtonListener/BackButtonListener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackButtonListener","path":"/src/widgets/router.dart","parents":["StatefulWidget","Widget"],"desc":"一个便利小部件,用于注册按下返回按钮时的回调。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"onBackButtonPressed","type":"ValueGetter>","required":true,"desc":"按下返回按钮时将调用的回调函数。"}],"id":366,"localName":"BackButtonListener","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_en-US.json b/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_en-US.json deleted file mode 100644 index 2f7288ba8..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackdropFilter","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that applies a filter to the existing painted content and then paints [child].","fields":[{"name":"filter","type":"ui.ImageFilter","required":true,"desc":"The image filter to apply to the existing painted content before painting the child."},{"name":"blendMode","type":"BlendMode","required":true,"desc":"The blend mode to use to apply the filtered background content onto the background surface."},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not to apply the backdrop filter operation to the child of this widget."},{"name":"backdropGroupKey","type":"BackdropKey?","desc":"The [BackdropKey] that identifies the backdrop this filter will apply to."}],"id":278,"lever":4,"family":2,"linkIds":[88,97,67],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of BackdropFilter","desc":["【child】: Child component 【Widget】","【filter】: Filter 【ImageFilter】","ImageFilter.blur can achieve Gaussian blur by specifying the x and y blur factors."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_zh-CN.json deleted file mode 100644 index f228b5815..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackdropFilter/BackdropFilter_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackdropFilter","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对现有绘制内容应用滤镜然后绘制 [child] 的小部件。","fields":[{"name":"filter","type":"ui.ImageFilter","required":true,"desc":"在绘制子项之前应用于现有绘制内容的图像滤镜。"},{"name":"blendMode","type":"BlendMode","required":true,"desc":"用于将过滤的背景内容应用到背景表面的混合模式。"},{"name":"enabled","type":"bool","required":true,"desc":"是否对此小部件的子项应用背景滤镜操作。"},{"name":"backdropGroupKey","type":"BackdropKey?","desc":"标识此滤镜将应用到的背景的 [BackdropKey]。"}],"id":278,"localName":"背景滤镜","lever":4,"family":2,"linkIds":[88,97,67],"nodes":[{"file":"node1_base.dart","name":"BackdropFilter基本使用","desc":["【child】 : 孩子组件 【Widget】","【filter】 : 过滤器 【ImageFilter】","ImageFilter.blur可以实现高斯模糊,指定x,y模糊因子。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_en-US.json deleted file mode 100644 index 05e616f64..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackdropGroup","path":"/src/widgets/basic.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" A widget that establishes a shared backdrop layer for all child [BackdropFilter] widgets that opt into using it.","fields":[{"name":"backdropKey","type":"BackdropKey","required":true,"desc":"The backdrop key this backdrop group will use with shared child layers."}],"id":367,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_zh-CN.json deleted file mode 100644 index 21006a441..000000000 --- a/modules/widget_system/widgets/doc/widgets/BackdropGroup/BackdropGroup_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BackdropGroup","path":"/src/widgets/basic.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为所有选择使用它的子 [BackdropFilter] 小部件建立共享背景层的小部件。","fields":[{"name":"backdropKey","type":"BackdropKey","required":true,"desc":"此背景组将与共享子层一起使用的背景键。"}],"id":367,"localName":"BackdropGroup","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Badge/Badge_en-US.json b/modules/widget_system/widgets/doc/widgets/Badge/Badge_en-US.json deleted file mode 100644 index e5b0052d4..000000000 --- a/modules/widget_system/widgets/doc/widgets/Badge/Badge_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Badge","path":"/src/material/badge.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design \"badge\".","fields":[{"name":"backgroundColor","type":"Color?","desc":"The badge's fill color."},{"name":"textColor","type":"Color?","desc":"The color of the badge's [label] text."},{"name":"smallSize","type":"double?","desc":"The diameter of the badge if [label] is null."},{"name":"largeSize","type":"double?","desc":"The badge's height if [label] is non-null."},{"name":"textStyle","type":"TextStyle?","desc":"The [DefaultTextStyle] for the badge's label."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The padding added to the badge's label."},{"name":"alignment","type":"AlignmentGeometry?","desc":"Combined with [offset] to determine the location of the [label] relative to the [child]."},{"name":"offset","type":"Offset?","desc":"Combined with [alignment] to determine the location of the [label] relative to the [child]."},{"name":"label","type":"Widget?","desc":"The badge's content, typically a [Text] widget that contains 1 to 4 characters."},{"name":"isLabelVisible","type":"bool","required":true,"desc":"If false, the badge's [label] is not included."},{"name":"child","type":"Widget?","desc":"The widget that the badge is stacked on top of."}],"id":258,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node_1.dart","name":"Usage of Badge Dot Marker","desc":["【backgroundColor】: Background color 【Color?】","【isLabelVisible】: Whether to display the marker 【bool】","【smallSize】: Diameter when there is no label 【double?】","【child】: Child component 【Widget?】"]},{"file":"node_2.dart","name":"Badge Label Marker","desc":["【label】: Title component 【Widget?】","【textStyle】: Title color 【TextStyle?】","【textColor】: Title style 【Color?】","【padding】: Title margin 【EdgeInsetsGeometry?】","【largeSize】: Height when there is a label 【double?】"]},{"file":"node_3.dart","name":"Badge Offset","desc":["【offset】: Marker offset 【Offset?】","【alignment】: Title offset 【AlignmentDirectional?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Badge/Badge_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Badge/Badge_zh-CN.json deleted file mode 100644 index c79a3528f..000000000 --- a/modules/widget_system/widgets/doc/widgets/Badge/Badge_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Badge","path":"/src/material/badge.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design \",徽章\"。","fields":[{"name":"backgroundColor","type":"Color?","desc":"徽章的填充颜色。"},{"name":"textColor","type":"Color?","desc":"徽章 [label] 文本的颜色。"},{"name":"smallSize","type":"double?","desc":"如果 [label] 为 null,徽章的直径。"},{"name":"largeSize","type":"double?","desc":"如果 [label] 非空,徽章的高度。"},{"name":"textStyle","type":"TextStyle?","desc":"徽章标签的 [DefaultTextStyle]。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"添加到徽章标签的内边距。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"与 [offset] 结合确定 [label] 相对于 [child] 的位置。"},{"name":"offset","type":"Offset?","desc":"与 [alignment] 结合确定 [label] 相对于 [child] 的位置。"},{"name":"label","type":"Widget?","desc":"徽章的内容,通常是包含 1 到 4 个字符的 [Text] 小部件。"},{"name":"isLabelVisible","type":"bool","required":true,"desc":"如果为 false,则不包含徽章的 [label]。"},{"name":"child","type":"Widget?","desc":"徽章堆叠在其上方的小部件。"}],"id":258,"localName":"标记组件","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node_1.dart","name":"Badge 圆点标记的使用","desc":["【backgroundColor】 : 背景色 【Color?】","【isLabelVisible】 : 是否显示标记 【bool】","【smallSize】 : 无标签时直径 【double?】","【child】 : 子组件 【Widget?】"]},{"file":"node_2.dart","name":"Badge 标签标记","desc":["【label】 : 标题组件 【Widget?】","【textStyle】 : 标题颜色 【TextStyle?】","【textColor】 : 标题样式 【Color?】","【padding】 : 标题边距 【EdgeInsetsGeometry?】","【largeSize】 : 有标签时高度 【double?】,"]},{"file":"node_3.dart","name":"Badge 的偏移量","desc":["【offset】 : 标记偏移量 【Offset?】","【alignment】 : 标题偏移 【AlignmentDirectional?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_en-US.json deleted file mode 100644 index aced9a51c..000000000 --- a/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BadgeTheme","path":"/src/material/badge_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that overrides the default color style, and size parameters for [Badge]s in this widget's subtree.","fields":[{"name":"data","type":"BadgeThemeData","required":true,"desc":"Specifies the default color and size overrides for descendant [Badge] widgets."}],"id":368,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_zh-CN.json deleted file mode 100644 index 4ebb77071..000000000 --- a/modules/widget_system/widgets/doc/widgets/BadgeTheme/BadgeTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BadgeTheme","path":"/src/material/badge_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"一个继承小部件,用于覆盖此小部件子树中 [Badge] 的默认颜色样式和大小参数。","fields":[{"name":"data","type":"BadgeThemeData","required":true,"desc":"为后代 [Badge] 小部件指定默认颜色和大小覆盖。"}],"id":368,"localName":"BadgeTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Banner/Banner_en-US.json b/modules/widget_system/widgets/doc/widgets/Banner/Banner_en-US.json deleted file mode 100644 index ca771789a..000000000 --- a/modules/widget_system/widgets/doc/widgets/Banner/Banner_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Banner","path":"/src/widgets/banner.dart","parents":["StatefulWidget","Widget"],"desc":" Displays a diagonal message above the corner of another widget.","fields":[{"name":"child","type":"Widget?","desc":"The widget to show behind the banner."},{"name":"message","type":"String","required":true,"desc":"The message to show in the banner."},{"name":"textDirection","type":"TextDirection?","desc":"The directionality of the text."},{"name":"location","type":"BannerLocation","required":true,"desc":"Where to show the banner (e.g., the upper right corner)."},{"name":"layoutDirection","type":"TextDirection?","desc":"The directionality of the layout."},{"name":"color","type":"Color","required":true,"desc":"The color of the banner."},{"name":"textStyle","type":"TextStyle","required":true,"desc":"The style of the text shown on the banner."},{"name":"shadow","type":"BoxShadow","required":true,"desc":"The shadow properties for the banner."}],"id":5,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Used to display a badge","desc":["【message】: The text message to display 【String】","【location】: Position*4 【BannerLocation】","【color】: Badge color 【Color】","【child】: Child 【Widget】","【textStyle】: Text style 【TextStyle】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Banner/Banner_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Banner/Banner_zh-CN.json deleted file mode 100644 index 60885513e..000000000 --- a/modules/widget_system/widgets/doc/widgets/Banner/Banner_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Banner","path":"/src/widgets/banner.dart","parents":["StatefulWidget","Widget"],"desc":"在另一个小部件的角落上方显示对角线消息。","fields":[{"name":"child","type":"Widget?","desc":"在横幅后面显示的小部件。"},{"name":"message","type":"String","required":true,"desc":"在横幅中显示的消息。"},{"name":"textDirection","type":"TextDirection?","desc":"文本的方向性。"},{"name":"location","type":"BannerLocation","required":true,"desc":"显示横幅的位置(例如,右上角)。"},{"name":"layoutDirection","type":"TextDirection?","desc":"布局的方向性。"},{"name":"color","type":"Color","required":true,"desc":"横幅的颜色。"},{"name":"textStyle","type":"TextStyle","required":true,"desc":"横幅上显示的文本样式。"},{"name":"shadow","type":"BoxShadow","required":true,"desc":"横幅的阴影属性。"}],"id":5,"localName":"角标组件","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"用于显示一个角标","desc":["【message】 : 显示的文字信息 【String】","【location】 : 位置*4 【BannerLocation】","【color】: 角标颜色 【Color】","【child】: 孩子 【Widget】","【textStyle】: 文字样式 【TextStyle】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_en-US.json b/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_en-US.json deleted file mode 100644 index 343a98d04..000000000 --- a/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Baseline","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that positions its child according to the child's baseline.","fields":[{"name":"baseline","type":"double","required":true,"desc":"The number of logical pixels from the top of this box at which to position the child's baseline."},{"name":"baselineType","type":"TextBaseline","required":true,"desc":"The type of baseline to use for positioning the child."}],"id":75,"lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Baseline","desc":["【child】 : Child component 【Widget】","【baseline】 : Baseline position 【double】","【baselineType】 : Baseline type 【TextBaseline】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_zh-CN.json deleted file mode 100644 index 701d44e6d..000000000 --- a/modules/widget_system/widgets/doc/widgets/Baseline/Baseline_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Baseline","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"根据子项的基线定位其子项的小部件。","fields":[{"name":"baseline","type":"double","required":true,"desc":"从此盒子顶部开始的逻辑像素数,用于定位子项的基线。"},{"name":"baselineType","type":"TextBaseline","required":true,"desc":"用于定位子项的基线类型。"}],"id":75,"localName":"基线组件","lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Baseline基本使用","desc":["【child】 : 孩子组件 【Widget】","【baseline】 : 基线位置 【double】","【baselineType】 : 基线类型 【TextBaseline】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_en-US.json b/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_en-US.json deleted file mode 100644 index 938fbb779..000000000 --- a/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BlockSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that drops the semantics of all widget that were painted before it in the same semantic container.","fields":[{"name":"blocking","type":"bool","required":true,"desc":"Whether this widget is blocking semantics of all widget that were painted before it in the same semantic container."}],"id":369,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_zh-CN.json deleted file mode 100644 index 98b6986b8..000000000 --- a/modules/widget_system/widgets/doc/widgets/BlockSemantics/BlockSemantics_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BlockSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"一个小部件,用于丢弃在同一语义容器中在其之前绘制的所有小部件的语义。","fields":[{"name":"blocking","type":"bool","required":true,"desc":"此小部件是否阻止在同一语义容器中在其之前绘制的所有小部件的语义。"}],"id":369,"localName":"BlockSemantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_en-US.json b/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_en-US.json deleted file mode 100644 index f0cdbc9e4..000000000 --- a/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BottomAppBar","path":"/src/material/bottom_app_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A container that is typically used with [Scaffold.bottomNavigationBar].","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space to surround the child inside the bounds of the [BottomAppBar]."},{"name":"color","type":"Color?","desc":"The bottom app bar's background color."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this bottom app bar relative to its parent."},{"name":"shape","type":"NotchedShape?","desc":"The notch that is made for the floating action button."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"notchMargin","type":"double","required":true,"desc":"The margin between the [FloatingActionButton] and the [BottomAppBar]'s notch."},{"name":"surfaceTintColor","type":"Color?","desc":"A custom color for the Material 3 surface-tint elevation effect."},{"name":"shadowColor","type":"Color?","desc":"The color of the shadow below the app bar."},{"name":"height","type":"double?","desc":"The double value used to indicate the height of the [BottomAppBar]."}],"id":61,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of BottomAppBar","desc":["【elevation】: Elevation 【double】","【shape】: Shape 【NotchedShape】","【notchMargin】: Notch Margin 【double】","【color】: Color 【Color】","【child】: Child 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_zh-CN.json deleted file mode 100644 index 3fe91f384..000000000 --- a/modules/widget_system/widgets/doc/widgets/BottomAppBar/BottomAppBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BottomAppBar","path":"/src/material/bottom_app_bar.dart","parents":["StatefulWidget","Widget"],"desc":"通常与 [Scaffold.bottomNavigationBar] 一起使用的容器。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在 [BottomAppBar] 边界内围绕子项的空间量。"},{"name":"color","type":"Color?","desc":"底部应用栏的背景颜色。"},{"name":"elevation","type":"double?","desc":"相对于其父级放置此底部应用栏的 z 坐标。"},{"name":"shape","type":"NotchedShape?","desc":"为浮动操作按钮制作的缺口。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"notchMargin","type":"double","required":true,"desc":"[FloatingActionButton] 和 [BottomAppBar] 缺口之间的边距。"},{"name":"surfaceTintColor","type":"Color?","desc":"Material 3 表面色调高度效果的自定义颜色。"},{"name":"shadowColor","type":"Color?","desc":"应用栏下方阴影的颜色。"},{"name":"height","type":"double?","desc":"用于指示 [BottomAppBar] 高度的双精度值。"}],"id":61,"localName":"底部导航","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BottomAppBar基本用法","desc":["【elevation】 : 影深 【double】","【shape】 : 形状 【NotchedShape】","【notchMargin】 : 间隔距离 【double】","【color】 : 颜色 【Color】","【child】 : 孩子 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_en-US.json b/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_en-US.json deleted file mode 100644 index beaec3f6c..000000000 --- a/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BottomNavigationBar","path":"/src/material/bottom_navigation_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A material widget that's displayed at the bottom of an app for selecting among a small number of views, typically between three and five.","fields":[{"name":"items","type":"List","required":true,"desc":"Defines the appearance of the button items that are arrayed within the bottom navigation bar."},{"name":"onTap","type":"ValueChanged?","desc":"Called when one of the [items] is tapped."},{"name":"currentIndex","type":"int","required":true,"desc":"The index into [items] for the current active [BottomNavigationBarItem]."},{"name":"elevation","type":"double?","desc":"The z-coordinate of this [BottomNavigationBar]."},{"name":"type","type":"BottomNavigationBarType?","desc":"Defines the layout and behavior of a [BottomNavigationBar]."},{"name":"backgroundColor","type":"Color?","desc":"The color of the [BottomNavigationBar] itself."},{"name":"iconSize","type":"double","required":true,"desc":"The size of all of the [BottomNavigationBarItem] icons."},{"name":"selectedItemColor","type":"Color?","desc":"The color of the selected [BottomNavigationBarItem.icon] and [BottomNavigationBarItem.label]."},{"name":"unselectedItemColor","type":"Color?","desc":"The color of the unselected [BottomNavigationBarItem.icon] and [BottomNavigationBarItem.label]s."},{"name":"selectedIconTheme","type":"IconThemeData?","desc":"The size, opacity, and color of the icon in the currently selected [BottomNavigationBarItem.icon]."},{"name":"unselectedIconTheme","type":"IconThemeData?","desc":"The size, opacity, and color of the icon in the currently unselected [BottomNavigationBarItem.icon]s."},{"name":"selectedLabelStyle","type":"TextStyle?","desc":"The [TextStyle] of the [BottomNavigationBarItem] labels when they are selected."},{"name":"unselectedLabelStyle","type":"TextStyle?","desc":"The [TextStyle] of the [BottomNavigationBarItem] labels when they are not selected."},{"name":"selectedFontSize","type":"double","required":true,"desc":"The font size of the [BottomNavigationBarItem] labels when they are selected."},{"name":"unselectedFontSize","type":"double","required":true,"desc":"The font size of the [BottomNavigationBarItem] labels when they are not selected."},{"name":"showUnselectedLabels","type":"bool?","desc":"Whether the labels are shown for the unselected [BottomNavigationBarItem]s."},{"name":"showSelectedLabels","type":"bool?","desc":"Whether the labels are shown for the selected [BottomNavigationBarItem]."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the items."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"landscapeLayout","type":"BottomNavigationBarLandscapeLayout?","desc":"The arrangement of the bar's [items] when the enclosing [MediaQueryData.orientation] is [Orientation.landscape]."},{"name":"useLegacyColorScheme","type":"bool","required":true,"desc":"This flag is controlling how [BottomNavigationBar] is going to use the colors provided by the [selectedIconTheme], [unselectedIconTheme], [selectedItemColor], [unselectedItemColor]. The default value is `true` as the new theming logic is a breaking change. To opt-in the new theming logic set the flag to `false`"}],"id":60,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of BottomNavigationBar","desc":["【currentIndex】 : Current index 【int】","【elevation】 : Shadow depth 【double】","【type】 : Type*2 【BottomNavigationBarType】","【fixedColor】 : Color when type is fix 【Color】","【backgroundColor】 : Background color 【Color】","【iconSize】 : Icon size 【double】","【selectedLabelStyle】 : Selected text style 【TextStyle】","【unselectedLabelStyle】 : Unselected text style 【TextStyle】","【showUnselectedLabels】 : Show unselected labels 【bool】","【showSelectedLabels】 : Show selected labels 【bool】","【items】 : Items 【List】","【onTap】 : Click event 【Function(int)】"]},{"file":"node2_page.dart","name":"Page Switching with PageView","desc":["Use the controller for page switching during onTap"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_zh-CN.json deleted file mode 100644 index 2a4ce1b3f..000000000 --- a/modules/widget_system/widgets/doc/widgets/BottomNavigationBar/BottomNavigationBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BottomNavigationBar","path":"/src/material/bottom_navigation_bar.dart","parents":["StatefulWidget","Widget"],"desc":"显示在应用底部的 Material 小部件,用于在少量视图中进行选择,通常在三到五个之间。","fields":[{"name":"items","type":"List","required":true,"desc":"定义排列在底部导航栏内的按钮项的外观。"},{"name":"onTap","type":"ValueChanged?","desc":"点击 [items] 中的一个时调用。"},{"name":"currentIndex","type":"int","required":true,"desc":"当前活动 [BottomNavigationBarItem] 在 [items] 中的索引。"},{"name":"elevation","type":"double?","desc":"此 [BottomNavigationBar] 的 z 坐标。"},{"name":"type","type":"BottomNavigationBarType?","desc":"定义 [BottomNavigationBar] 的布局和行为。"},{"name":"backgroundColor","type":"Color?","desc":"[BottomNavigationBar] 本身的颜色。"},{"name":"iconSize","type":"double","required":true,"desc":"所有 [BottomNavigationBarItem] 图标的大小。"},{"name":"selectedItemColor","type":"Color?","desc":"选中的 [BottomNavigationBarItem.icon] 和 [BottomNavigationBarItem.label] 的颜色。"},{"name":"unselectedItemColor","type":"Color?","desc":"未选中的 [BottomNavigationBarItem.icon] 和 [BottomNavigationBarItem.label] 的颜色。"},{"name":"selectedIconTheme","type":"IconThemeData?","desc":"当前选中的 [BottomNavigationBarItem.icon] 中图标的大小、不透明度和颜色。"},{"name":"unselectedIconTheme","type":"IconThemeData?","desc":"当前未选中的 [BottomNavigationBarItem.icon] 中图标的大小、不透明度和颜色。"},{"name":"selectedLabelStyle","type":"TextStyle?","desc":"选中时 [BottomNavigationBarItem] 标签的 [TextStyle]。"},{"name":"unselectedLabelStyle","type":"TextStyle?","desc":"未选中时 [BottomNavigationBarItem] 标签的 [TextStyle]。"},{"name":"selectedFontSize","type":"double","required":true,"desc":"选中时 [BottomNavigationBarItem] 标签的字体大小。"},{"name":"unselectedFontSize","type":"double","required":true,"desc":"未选中时 [BottomNavigationBarItem] 标签的字体大小。"},{"name":"showUnselectedLabels","type":"bool?","desc":"是否为未选中的 [BottomNavigationBarItem] 显示标签。"},{"name":"showSelectedLabels","type":"bool?","desc":"是否为选中的 [BottomNavigationBarItem] 显示标签。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在项目上时的光标。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"landscapeLayout","type":"BottomNavigationBarLandscapeLayout?","desc":"当包围的 [MediaQueryData.orientation] 为 [Orientation.landscape] 时,栏的 [items] 的排列。"},{"name":"useLegacyColorScheme","type":"bool","required":true,"desc":"此标志控制 [BottomNavigationBar] 如何使用 [selectedIconTheme]、[unselectedIconTheme]、[selectedItemColor]、[unselectedItemColor] 提供的颜色。默认值为 `true`,因为新的主题逻辑是一个破坏性更改。要选择新的主题逻辑,请将标志设置为 `false`"}],"id":60,"localName":"底部导航","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BottomNavigationBar基本使用","desc":["【currentIndex】 : 当前索引 【int】","【elevation】 : 影深 【double】","【type】 : 类型*2 【BottomNavigationBarType】","【fixedColor】 : type为fix的颜色 【Color】","【backgroundColor】 : 背景色 【Color】","【iconSize】 : 图标大小 【double】","【selectedLabelStyle】 : 选中文字样式 【TextStyle】","【unselectedLabelStyle】 : 未选中文字样式 【TextStyle】","【showUnselectedLabels】 : 显示未选中标签 【bool】","【showSelectedLabels】 : 显示选中标签 【bool】","【items】 : 条目 【List】","【onTap】 : 点击事件 【Function(int)】"]},{"file":"node2_page.dart","name":"可结合PageView进行切页","desc":["在onTap时进行使用控制器进行切页"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_en-US.json deleted file mode 100644 index d2402bb48..000000000 --- a/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BottomNavigationBarTheme","path":"/src/material/bottom_navigation_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a bottom navigation bar theme to descendant [BottomNavigationBar] widgets.","fields":[{"name":"data","type":"BottomNavigationBarThemeData","required":true,"desc":"The properties used for all descendant [BottomNavigationBar] widgets."}],"id":371,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_zh-CN.json deleted file mode 100644 index 8c53e6265..000000000 --- a/modules/widget_system/widgets/doc/widgets/BottomNavigationBarTheme/BottomNavigationBarTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BottomNavigationBarTheme","path":"/src/material/bottom_navigation_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将底部导航栏主题应用于后代 [BottomNavigationBar] 小部件。","fields":[{"name":"data","type":"BottomNavigationBarThemeData","required":true,"desc":"用于所有后代 [BottomNavigationBar] 小部件的属性。"}],"id":371,"localName":"BottomNavigationBarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_en-US.json b/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_en-US.json deleted file mode 100644 index fed4f770e..000000000 --- a/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BottomSheet","path":"/src/material/bottom_sheet.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design bottom sheet.","fields":[{"name":"animationController","type":"AnimationController?","desc":"The animation controller that controls the bottom sheet's entrance and exit animations."},{"name":"onClosing","type":"VoidCallback","required":true,"desc":"Called when the bottom sheet begins to close."},{"name":"builder","type":"WidgetBuilder","required":true,"desc":"A builder for the contents of the sheet."},{"name":"enableDrag","type":"bool","required":true,"desc":"If true, the bottom sheet can be dragged up and down and dismissed by swiping downwards."},{"name":"showDragHandle","type":"bool?","desc":"Specifies whether a drag handle is shown."},{"name":"dragHandleColor","type":"Color?","desc":"The bottom sheet drag handle's color."},{"name":"dragHandleSize","type":"Size?","desc":"Defaults to [BottomSheetThemeData.dragHandleSize]. If that is also null, defaults to Size(32, 4)."},{"name":"onDragStart","type":"BottomSheetDragStartHandler?","desc":"Called when the user begins dragging the bottom sheet vertically, if [enableDrag] is true."},{"name":"onDragEnd","type":"BottomSheetDragEndHandler?","desc":"Called when the user stops dragging the bottom sheet, if [enableDrag] is true."},{"name":"backgroundColor","type":"Color?","desc":"The bottom sheet's background color."},{"name":"shadowColor","type":"Color?","desc":"The color of the shadow below the sheet."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this material relative to its parent."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the bottom sheet."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"constraints","type":"BoxConstraints?","desc":"Defines minimum and maximum sizes for a [BottomSheet]."}],"id":142,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of BottomSheet","desc":["【builder】: Component constructor 【WidgetBuilder】","【backgroundColor】: Background color 【Color】","【elevation】: Shadow depth 【double】","【shape】: Shape 【ShapeBorder】","【onClosing】: Closing callback 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_zh-CN.json deleted file mode 100644 index e99fe53a6..000000000 --- a/modules/widget_system/widgets/doc/widgets/BottomSheet/BottomSheet_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BottomSheet","path":"/src/material/bottom_sheet.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 底部表单。","fields":[{"name":"animationController","type":"AnimationController?","desc":"控制底部表单进入和退出动画的动画控制器。"},{"name":"onClosing","type":"VoidCallback","required":true,"desc":"底部表单开始关闭时调用。"},{"name":"builder","type":"WidgetBuilder","required":true,"desc":"表单内容的构建器。"},{"name":"enableDrag","type":"bool","required":true,"desc":"如果为 true,底部表单可以上下拖动并通过向下滑动来关闭。"},{"name":"showDragHandle","type":"bool?","desc":"指定是否显示拖动手柄。"},{"name":"dragHandleColor","type":"Color?","desc":"底部表单拖动手柄的颜色。"},{"name":"dragHandleSize","type":"Size?","desc":"默认为 [BottomSheetThemeData.dragHandleSize]。如果也为 null,则默认为 Size(32, 4)。"},{"name":"onDragStart","type":"BottomSheetDragStartHandler?","desc":"如果 [enableDrag] 为 true,当用户开始垂直拖动底部表单时调用。"},{"name":"onDragEnd","type":"BottomSheetDragEndHandler?","desc":"如果 [enableDrag] 为 true,当用户停止拖动底部表单时调用。"},{"name":"backgroundColor","type":"Color?","desc":"底部表单的背景颜色。"},{"name":"shadowColor","type":"Color?","desc":"表单下方阴影的颜色。"},{"name":"elevation","type":"double?","desc":"相对于其父级放置此材料的 z 坐标。"},{"name":"shape","type":"ShapeBorder?","desc":"底部表单的形状。"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"constraints","type":"BoxConstraints?","desc":"定义 [BottomSheet] 的最小和最大大小。"}],"id":142,"localName":"底部抽屉","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"BottomSheet基本使用","desc":["【builder】 : 组件构造器 【WidgetBuilder】","【backgroundColor】 : 背景色 【Color】","【elevation】 : 影深 【double】","【shape】 : 形状 【ShapeBorder】","【onClosing】 : 关闭回调 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_en-US.json deleted file mode 100644 index 4d8cb28a3..000000000 --- a/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BoxScrollView","path":"/src/widgets/scroll_view.dart","abstract":true,"parents":["ScrollView","StatelessWidget","Widget"],"desc":" A [ScrollView] that uses a single child layout model.","fields":[{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the children."}],"id":350,"lever":1,"family":0,"linkIds":[183,162,163],"nodes":[{"file":"node1_base.dart","name":"Introduction to BoxScrollView","desc":["【reverse】 : Whether to reverse 【bool】","【scrollDirection】 : Scroll direction 【Axis】","【cacheExtent】 : Cache length 【double】","【dragStartBehavior】 : Drag start behavior 【DragStartBehavior】","【clipBehavior】 : Clip behavior 【ClipBehavior】","【controller】 : Controller 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_zh-CN.json deleted file mode 100644 index caea2438b..000000000 --- a/modules/widget_system/widgets/doc/widgets/BoxScrollView/BoxScrollView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"BoxScrollView","path":"/src/widgets/scroll_view.dart","abstract":true,"parents":["ScrollView","StatelessWidget","Widget"],"desc":"使用单子布局模型的 [ScrollView]。","fields":[{"name":"padding","type":"EdgeInsetsGeometry?","desc":"子项的插入空间量。"}],"id":350,"localName":"盒滑动视图","lever":1,"family":0,"linkIds":[183,162,163],"nodes":[{"file":"node1_base.dart","name":"BoxScrollView 介绍","desc":["【reverse】 : 是否反向 【bool】","【scrollDirection】 : 滑动方向 【Axis】","【cacheExtent】 : 缓存长 【double】","【dragStartBehavior】 : 拖动行为 【DragStartBehavior】","【clipBehavior】 : 裁剪行为 【ClipBehavior】","【controller】 : 控制器 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Builder/Builder_en-US.json b/modules/widget_system/widgets/doc/widgets/Builder/Builder_en-US.json deleted file mode 100644 index b4417931b..000000000 --- a/modules/widget_system/widgets/doc/widgets/Builder/Builder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Builder","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":" A stateless utility widget whose [build] method uses its [builder] callback to create the widget's child.","fields":[{"name":"builder","type":"WidgetBuilder","required":true,"desc":"Called to obtain the child widget."}],"id":202,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Usage of Builder","desc":["【builder】: Component Constructor 【WidgetBuilder】","Using `XXX.of(context)` to obtain a state object of a certain class within the same class may result in a 'context lag' error, which can be resolved using Builder."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Builder/Builder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Builder/Builder_zh-CN.json deleted file mode 100644 index 2fe0ac7fa..000000000 --- a/modules/widget_system/widgets/doc/widgets/Builder/Builder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Builder","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":"一个无状态实用小部件,其 [build] 方法使用其 [builder] 回调来创建小部件的子项。","fields":[{"name":"builder","type":"WidgetBuilder","required":true,"desc":"调用以获取子小部件。"}],"id":202,"localName":"构造器","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Builder的使用","desc":["【builder】 : 组件构造器 【WidgetBuilder】","同一个类中使用`XXX.of(context)`获取某类状态对象方法会存在`上下文滞后`的错误,使用Builder解决。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_en-US.json b/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_en-US.json deleted file mode 100644 index 496fd226e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ButtonBar","path":"/src/material/button_bar.dart","parents":["StatelessWidget","Widget"],"desc":" An end-aligned row of buttons, laying out into a column if there is not enough horizontal space.","fields":[{"name":"alignment","type":"MainAxisAlignment?","desc":"How the children should be placed along the horizontal axis."},{"name":"mainAxisSize","type":"MainAxisSize?","desc":"How much horizontal space is available. See [Row.mainAxisSize]."},{"name":"buttonTextTheme","type":"ButtonTextTheme?","desc":"Overrides the surrounding [ButtonBarThemeData.buttonTextTheme] to define a button's base colors, size, internal padding and shape."},{"name":"buttonMinWidth","type":"double?","desc":"Overrides the surrounding [ButtonThemeData.minWidth] to define a button's minimum width."},{"name":"buttonHeight","type":"double?","desc":"Overrides the surrounding [ButtonThemeData.height] to define a button's minimum height."},{"name":"buttonPadding","type":"EdgeInsetsGeometry?","desc":"Overrides the surrounding [ButtonThemeData.padding] to define the padding for a button's child (typically the button's label)."},{"name":"buttonAlignedDropdown","type":"bool?","desc":"Overrides the surrounding [ButtonThemeData.alignedDropdown] to define whether a [DropdownButton] menu's width will match the button's width."},{"name":"layoutBehavior","type":"ButtonBarLayoutBehavior?","desc":"Defines whether a [ButtonBar] should size itself with a minimum size constraint or with padding."},{"name":"overflowDirection","type":"VerticalDirection?","desc":"Defines the vertical direction of a [ButtonBar]'s children if it overflows."},{"name":"overflowButtonSpacing","type":"double?","desc":"The spacing between buttons when the button bar overflows."},{"name":"children","type":"List","required":true,"desc":"The buttons to arrange horizontally."}],"id":29,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ButtonBar Alignment","desc":["【alignment】: Alignment 【MainAxisAlignment】","【children】: Child components 【List】"]},{"file":"node2_padding.dart","name":"ButtonBar Margin and Height","desc":["【buttonPadding】: Padding 【EdgeInsetsGeometry】","【buttonHeight】: Height 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_zh-CN.json deleted file mode 100644 index fa67aef23..000000000 --- a/modules/widget_system/widgets/doc/widgets/ButtonBar/ButtonBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ButtonBar","path":"/src/material/button_bar.dart","parents":["StatelessWidget","Widget"],"desc":"末端对齐的按钮行,如果没有足够的水平空间则布局为列。","fields":[{"name":"alignment","type":"MainAxisAlignment?","desc":"子项应如何沿水平轴放置。"},{"name":"mainAxisSize","type":"MainAxisSize?","desc":"有多少水平空间可用。参见 [Row.mainAxisSize]。"},{"name":"buttonTextTheme","type":"ButtonTextTheme?","desc":"覆盖周围的 [ButtonBarThemeData.buttonTextTheme] 以定义按钮的基本颜色、大小、内部内边距和形状。"},{"name":"buttonMinWidth","type":"double?","desc":"覆盖周围的 [ButtonThemeData.minWidth] 以定义按钮的最小宽度。"},{"name":"buttonHeight","type":"double?","desc":"覆盖周围的 [ButtonThemeData.height] 以定义按钮的最小高度。"},{"name":"buttonPadding","type":"EdgeInsetsGeometry?","desc":"覆盖周围的 [ButtonThemeData.padding] 以定义按钮子项(通常是按钮标签)的内边距。"},{"name":"buttonAlignedDropdown","type":"bool?","desc":"覆盖周围的 [ButtonThemeData.alignedDropdown] 以定义 [DropdownButton] 菜单的宽度是否与按钮宽度匹配。"},{"name":"layoutBehavior","type":"ButtonBarLayoutBehavior?","desc":"定义 [ButtonBar] 是否应使用最小大小约束或内边距来调整自身大小。"},{"name":"overflowDirection","type":"VerticalDirection?","desc":"定义 [ButtonBar] 子项溢出时的垂直方向。"},{"name":"overflowButtonSpacing","type":"double?","desc":"按钮栏溢出时按钮之间的间距。"},{"name":"children","type":"List","required":true,"desc":"要水平排列的按钮。"}],"id":29,"localName":"按钮栏","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ButtonBar对齐方式","desc":["【alignment】: 对齐方式 【MainAxisAlignment】","【children】: 子组件集 【List】"]},{"file":"node2_padding.dart","name":"ButtonBar边距和高","desc":["【buttonPadding】: 内边距 【EdgeInsetsGeometry】","【buttonHeight】: 高 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_en-US.json deleted file mode 100644 index f253d6f3e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ButtonBarTheme","path":"/src/material/button_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a button bar theme to descendant [ButtonBar] widgets.","fields":[{"name":"data","type":"ButtonBarThemeData","required":true,"desc":"The properties used for all descendant [ButtonBar] widgets."}],"id":338,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ButtonBarTheme","desc":["You can specify the ButtonBarThemeData properties to set default styles for descendant ButtonBar components, such as alignment, style, margins, etc. You can also use ButtonBarTheme.of to get the theme properties of ButtonBar."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_zh-CN.json deleted file mode 100644 index 6a2d4d378..000000000 --- a/modules/widget_system/widgets/doc/widgets/ButtonBarTheme/ButtonBarTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ButtonBarTheme","path":"/src/material/button_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将按钮栏主题应用于后代 [ButtonBar] 小部件。","fields":[{"name":"data","type":"ButtonBarThemeData","required":true,"desc":"用于所有后代 [ButtonBar] 小部件的属性。"}],"id":338,"localName":"按钮条主题","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ButtonBarTheme基本使用","desc":["可指定ButtonBarThemeData数据属性为【后代】的ButtonBar组件设置默认样式,如对齐方式、样式、边距等。也可以用ButtonBarTheme.of获取ButtonBar的主题属性。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_en-US.json b/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_en-US.json deleted file mode 100644 index 987eb205f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ButtonStyleButton","path":"/src/material/button_style_button.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" The base [StatefulWidget] class for buttons whose style is defined by a [ButtonStyle] object.","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"Called when the button is tapped or otherwise activated."},{"name":"onLongPress","type":"VoidCallback?","desc":"Called when the button is long-pressed."},{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the button response area."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"isSemanticButton","type":"bool?","desc":"Determine whether this subtree represents a button."},{"name":"iconAlignment","type":"IconAlignment?","desc":"{@macro flutter.material.ButtonStyleButton.iconAlignment}"},{"name":"tooltip","type":"String?","desc":"Text that describes the action that will occur when the button is pressed or hovered over."},{"name":"child","type":"Widget?","desc":"Typically the button's label."}],"id":372,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_zh-CN.json deleted file mode 100644 index 45b9f114f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ButtonStyleButton/ButtonStyleButton_zh-CN.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "name": "ButtonStyleButton", - "path": "/src/material/button_style_button.dart", - "abstract": true, - "parents": [ - "StatefulWidget", - "Widget" - ], - "desc": "样式由 [ButtonStyle] 对象定义的按钮的基础 [StatefulWidget] 类。", - "fields": [ - { - "name": "onPressed", - "type": "VoidCallback?", - "desc": "点击或以其他方式激活按钮时调用。" - }, - { - "name": "onLongPress", - "type": "VoidCallback?", - "desc": "长按按钮时调用。" - }, - { - "name": "onHover", - "type": "ValueChanged?", - "desc": "指针进入或退出按钮响应区域时调用。" - }, - { - "name": "onFocusChange", - "type": "ValueChanged?", - "desc": "焦点改变时调用的处理程序。" - }, - { - "name": "style", - "type": "ButtonStyle?", - "desc": "自定义此按钮的外观。" - }, - { - "name": "clipBehavior", - "type": "Clip?", - "desc": "{@macro flutter.material.Material.clipBehavior}" - }, - { - "name": "focusNode", - "type": "FocusNode?", - "desc": "{@macro flutter.widgets.Focus.focusNode}" - }, - { - "name": "autofocus", - "type": "bool", - "required": true, - "desc": "{@macro flutter.widgets.Focus.autofocus}" - }, - { - "name": "statesController", - "type": "MaterialStatesController?", - "desc": "{@macro flutter.material.inkwell.statesController}" - }, - { - "name": "isSemanticButton", - "type": "bool?", - "desc": "确定此子树是否表示按钮。" - }, - { - "name": "iconAlignment", - "type": "IconAlignment?", - "desc": "{@macro flutter.material.ButtonStyleButton.iconAlignment}" - }, - { - "name": "tooltip", - "type": "String?", - "desc": "描述按下或悬停按钮时将发生的操作的文本。" - }, - { - "name": "child", - "type": "Widget?", - "desc": "通常是按钮的标签。" - } - ], - "id": 372, - "localName": "ButtonStyleButton", - "lever": 3, - "family": 3, - "linkIds": [], - "nodes": [] -} diff --git a/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_en-US.json deleted file mode 100644 index 4cd3d9a45..000000000 --- a/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ButtonTheme","path":"/src/material/button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Used with [ButtonThemeData] to configure the color and geometry of buttons.","fields":[{"name":"data","type":"ButtonThemeData","required":true,"desc":"Specifies the color and geometry of buttons."}],"id":326,"lever":3,"family":5,"linkIds":[23,25,26,27],"nodes":[{"file":"node1_base.dart","name":"ButtonTheme Usage","desc":["The property parameters are the same as MaterialButton. You can obtain button theme data through ButtonTheme.of, \"","and also set default styles for button components that are descendants of ButtonTheme, including color, shape, size, etc."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_zh-CN.json deleted file mode 100644 index 9fad72e75..000000000 --- a/modules/widget_system/widgets/doc/widgets/ButtonTheme/ButtonTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ButtonTheme","path":"/src/material/button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"与 [ButtonThemeData] 一起使用来配置按钮的颜色和几何形状。","fields":[{"name":"data","type":"ButtonThemeData","required":true,"desc":"指定按钮的颜色和几何形状。"}],"id":326,"localName":"按钮样式","lever":3,"family":5,"linkIds":[23,25,26,27],"nodes":[{"file":"node1_base.dart","name":"ButtonTheme使用","desc":["属性参数同MaterialButton,可以通过ButtonTheme.of获取按钮主题数据,\"","也可以为ButtonTheme【后代】的按钮组件设置默认样式,包括颜色、形状、尺寸等。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_en-US.json b/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_en-US.json deleted file mode 100644 index e35e281bb..000000000 --- a/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CalendarDatePicker","path":"/src/material/calendar_date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" Displays a grid of days for a given month and allows the user to select a date.","fields":[{"name":"initialDate","type":"DateTime?","desc":"The initially selected [DateTime] that the picker should display."},{"name":"firstDate","type":"DateTime","required":true,"desc":"The earliest allowable [DateTime] that the user can select."},{"name":"lastDate","type":"DateTime","required":true,"desc":"The latest allowable [DateTime] that the user can select."},{"name":"currentDate","type":"DateTime","required":true,"desc":"The [DateTime] representing today. It will be highlighted in the day grid."},{"name":"onDateChanged","type":"ValueChanged","required":true,"desc":"Called when the user selects a date in the picker."},{"name":"onDisplayedMonthChanged","type":"ValueChanged?","desc":"Called when the user navigates to a new month/year in the picker."},{"name":"initialCalendarMode","type":"DatePickerMode","required":true,"desc":"The initial display of the calendar picker."},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"Function to provide full control over which dates in the calendar can be selected."},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":373,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_zh-CN.json deleted file mode 100644 index 5e6f9c116..000000000 --- a/modules/widget_system/widgets/doc/widgets/CalendarDatePicker/CalendarDatePicker_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CalendarDatePicker","path":"/src/material/calendar_date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"显示给定月份的日期网格并允许用户选择日期。","fields":[{"name":"initialDate","type":"DateTime?","desc":"选择器应显示的初始选中 [DateTime]。"},{"name":"firstDate","type":"DateTime","required":true,"desc":"用户可以选择的最早允许的 [DateTime]。"},{"name":"lastDate","type":"DateTime","required":true,"desc":"用户可以选择的最晚允许的 [DateTime]。"},{"name":"currentDate","type":"DateTime","required":true,"desc":"表示今天的 [DateTime]。它将在日期网格中突出显示。"},{"name":"onDateChanged","type":"ValueChanged","required":true,"desc":"用户在选择器中选择日期时调用。"},{"name":"onDisplayedMonthChanged","type":"ValueChanged?","desc":"用户在选择器中导航到新月份/年份时调用。"},{"name":"initialCalendarMode","type":"DatePickerMode","required":true,"desc":"日历选择器的初始显示。"},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"提供对日历中哪些日期可以选择的完全控制的函数。"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":373,"localName":"CalendarDatePicker","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_en-US.json b/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_en-US.json deleted file mode 100644 index 36fa96eaf..000000000 --- a/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CallbackShortcuts","path":"/src/widgets/shortcuts.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that binds key combinations to specific callbacks.","fields":[{"name":"bindings","type":"Map","required":true,"desc":"A map of key combinations to callbacks used to define the shortcut bindings."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":283,"lever":3,"family":2,"linkIds":[282,284],"nodes":[{"file":"node1.dart","name":"Shortcut Usage","desc":["After activating focus in the example, the Ctrl+↑ and Ctrl+↓ key combinations can increase or decrease the number","【enabled】: Whether it is available 【bool】","【onTapOutside】: Click outside listener 【TapRegionCallback?】","【onTapInside】: Click inside listener 【TapRegionCallback?】","【groupId】: Click area group identifier 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_zh-CN.json deleted file mode 100644 index 482f61efd..000000000 --- a/modules/widget_system/widgets/doc/widgets/CallbackShortcuts/CallbackShortcuts_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CallbackShortcuts","path":"/src/widgets/shortcuts.dart","parents":["StatelessWidget","Widget"],"desc":"将键组合绑定到特定回调的小部件。","fields":[{"name":"bindings","type":"Map","required":true,"desc":"用于定义快捷键绑定的键组合到回调的映射。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":283,"localName":"快捷键回调","lever":3,"family":2,"linkIds":[282,284],"nodes":[{"file":"node1.dart","name":"快捷键使用","desc":["案例中激活焦点后,Ctrl+↑ 和 Ctrl+↓ 组合键可以增加或减少数字","【enabled】 : 是否可用 【bool】","【onTapOutside】 : 点击外界监听 【TapRegionCallback?】","【onTapInside】 : 点击内部监听 【TapRegionCallback?】","【groupId】 : 点击区域组标识 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Card/Card_en-US.json b/modules/widget_system/widgets/doc/widgets/Card/Card_en-US.json deleted file mode 100644 index d84d294b0..000000000 --- a/modules/widget_system/widgets/doc/widgets/Card/Card_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Card","path":"/src/material/card.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design card: a panel with slightly rounded corners and an elevation shadow.","fields":[{"name":"color","type":"Color?","desc":"The card's background color."},{"name":"shadowColor","type":"Color?","desc":"The color to paint the shadow below the card."},{"name":"surfaceTintColor","type":"Color?","desc":"The color used as an overlay on [color] to indicate elevation."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this card. This controls the size of the shadow below the card."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the card's [Material]."},{"name":"borderOnForeground","type":"bool","required":true,"desc":"Whether to paint the [shape] border in front of the [child]."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"The empty space that surrounds the card."},{"name":"semanticContainer","type":"bool","required":true,"desc":"Whether this widget represents a single semantic container, or if false a collection of individual semantic nodes."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":3,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Card can cardify a component","desc":["【elevation】: Shadow depth 【double】","【margin】: Margin 【double】","【color】: Color 【Color】","【child】: Child 【Widget】"]},{"file":"node2_shape.dart","name":"Can achieve clipping effect through the shape property","desc":["【shape】: Shape 【ShapeBorder】","【margin】: Margin 【double】","【color】: Color 【Color】","【child】: Child 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Card/Card_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Card/Card_zh-CN.json deleted file mode 100644 index 60c783690..000000000 --- a/modules/widget_system/widgets/doc/widgets/Card/Card_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Card","path":"/src/material/card.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 卡片:具有略微圆角和高度阴影的面板。","fields":[{"name":"color","type":"Color?","desc":"卡片的背景颜色。"},{"name":"shadowColor","type":"Color?","desc":"绘制卡片下方阴影的颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"用作 [color] 上的叠加层以指示高度的颜色。"},{"name":"elevation","type":"double?","desc":"放置此卡片的 z 坐标。这控制卡片下方阴影的大小。"},{"name":"shape","type":"ShapeBorder?","desc":"卡片 [Material] 的形状。"},{"name":"borderOnForeground","type":"bool","required":true,"desc":"是否在 [child] 前面绘制 [shape] 边框。"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕卡片的空白空间。"},{"name":"semanticContainer","type":"bool","required":true,"desc":"此小部件是否表示单个语义容器,或者如果为 false,则表示单个语义节点的集合。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":3,"localName":"卡片组件","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Card可以让一个组件卡片化","desc":["【elevation】 : 影深 【double】","【margin】: 外边距 【double】","【color】: 颜色 【Color】","【child】: 孩子 【Widget】"]},{"file":"node2_shape.dart","name":"可以通过shape属性实现裁切效果","desc":["【shape】 : 形状 【ShapeBorder】","【margin】: 外边距 【double】","【color】: 颜色 【Color】","【child】: 孩子 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_en-US.json deleted file mode 100644 index 7a0d539dc..000000000 --- a/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CardTheme","path":"/src/material/card_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Defines default property values for descendant [Card] widgets.","fields":[],"id":374,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_zh-CN.json deleted file mode 100644 index 585066f81..000000000 --- a/modules/widget_system/widgets/doc/widgets/CardTheme/CardTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CardTheme","path":"/src/material/card_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为后代 [Card] 小部件定义默认属性值。","fields":[],"id":374,"localName":"CardTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_en-US.json b/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_en-US.json deleted file mode 100644 index f1177ac05..000000000 --- a/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CarouselView","path":"/src/material/carousel.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design carousel widget.","fields":[{"name":"padding","type":"EdgeInsets?","desc":"The amount of space to surround each carousel item with."},{"name":"backgroundColor","type":"Color?","desc":"The background color for each carousel item."},{"name":"elevation","type":"double?","desc":"The z-coordinate of each carousel item."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of each carousel item's [Material]."},{"name":"overlayColor","type":"WidgetStateProperty?","desc":"The highlight color to indicate the carousel items are in pressed, hovered or focused states."},{"name":"shrinkExtent","type":"double","required":true,"desc":"The minimum allowable extent (size) in the main axis for carousel items during scrolling transitions."},{"name":"itemSnapping","type":"bool","required":true,"desc":"Whether the carousel should keep scrolling to the next/previous items to maintain the original layout."},{"name":"controller","type":"CarouselController?","desc":"An object that can be used to control the position to which this scroll view is scrolled."},{"name":"scrollDirection","type":"Axis","required":true,"desc":"The [Axis] along which the scroll view's offset increases with each item."},{"name":"reverse","type":"bool","required":true,"desc":"Whether the carousel list scrolls in the reading direction."},{"name":"consumeMaxWeight","type":"bool","required":true,"desc":"Whether the collapsed items are allowed to expand to the max size."},{"name":"onTap","type":"ValueChanged?","desc":"Called when one of the [children] is tapped."},{"name":"enableSplash","type":"bool","required":true,"desc":"Determines whether an [InkWell] will cover each Carousel item."},{"name":"itemExtent","type":"double?","desc":"The extent the children are forced to have in the main axis."},{"name":"flexWeights","type":"List?","desc":"The weights that each visible child should occupy in the viewport."},{"name":"children","type":"List","required":true,"desc":"The child widgets for the carousel."}],"id":237,"lever":4,"family":1,"linkIds":[253,340,160],"nodes":[{"file":"node1_base.dart","name":"CarouselView Basic Usage","desc":["【itemExtent】 : Forced size in the main axis direction 【double】","【shrinkExtent】: Minimum size of the item in the main axis direction during scrolling 【double】","【scrollDirection】 : Scroll axis direction 【Axis?】","【children】: List of child components 【List】"]},{"file":"node2.dart","name":"CarouselView Style Configuration","desc":["【padding】 : Padding 【EdgeInsets? 】","【backgroundColor】 : Background color 【Color? 】","【elevation】 : Shadow depth 【double?】","【shape】 : Shape 【ShapeBorder?】","【controller】 : Controller 【CarouselController?】","【reverse】 : Whether to scroll in reverse 【bool】","【onTap】 : Click event 【ValueChanged? 】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_zh-CN.json deleted file mode 100644 index ebcd75fde..000000000 --- a/modules/widget_system/widgets/doc/widgets/CarouselView/CarouselView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CarouselView","path":"/src/material/carousel.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 轮播小部件。","fields":[{"name":"padding","type":"EdgeInsets?","desc":"围绕每个轮播项的空间量。"},{"name":"backgroundColor","type":"Color?","desc":"每个轮播项的背景颜色。"},{"name":"elevation","type":"double?","desc":"每个轮播项的 z 坐标。"},{"name":"shape","type":"ShapeBorder?","desc":"每个轮播项 [Material] 的形状。"},{"name":"overlayColor","type":"WidgetStateProperty?","desc":"指示轮播项处于按下、悬停或聚焦状态的高亮颜色。"},{"name":"shrinkExtent","type":"double","required":true,"desc":"滚动过渡期间轮播项在主轴上的最小允许范围(大小)。"},{"name":"itemSnapping","type":"bool","required":true,"desc":"轮播是否应继续滚动到下一个/上一个项目以保持原始布局。"},{"name":"controller","type":"CarouselController?","desc":"可用于控制此滚动视图滚动到的位置的对象。"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"滚动视图的偏移量随每个项目增加的 [Axis]。"},{"name":"reverse","type":"bool","required":true,"desc":"轮播列表是否按阅读方向滚动。"},{"name":"consumeMaxWeight","type":"bool","required":true,"desc":"是否允许折叠的项目扩展到最大大小。"},{"name":"onTap","type":"ValueChanged?","desc":"点击 [children] 中的一个时调用。"},{"name":"enableSplash","type":"bool","required":true,"desc":"确定 [InkWell] 是否会覆盖每个轮播项。"},{"name":"itemExtent","type":"double?","desc":"子项在主轴上被强制具有的范围。"},{"name":"flexWeights","type":"List?","desc":"每个可见子项应在视口中占据的权重。"},{"name":"children","type":"List","required":true,"desc":"轮播的子小部件。"}],"id":237,"localName":"轮播视图","lever":4,"family":1,"linkIds":[253,340,160],"nodes":[{"file":"node1_base.dart","name":"CarouselView 基础用法","desc":["【itemExtent】 : 主轴方向强制尺寸 【double】","【shrinkExtent】: 滑动中,主轴方向条目最小尺寸 【double】","【scrollDirection】 : 滑动轴向 【Axis?】","【children】: 子组件列表 【List】"]},{"file":"node2.dart","name":"CarouselView 样式配置","desc":["【padding】 : 内边距 【EdgeInsets? 】","【backgroundColor】 : 背景色 【Color? 】","【elevation】 : 阴影深 【double?】","【shape】 : 形状 【ShapeBorder?】","【controller】 : 控制器 【CarouselController?】","【reverse】 : 是否反向滑动 【bool】","【onTap】 : 点击事件 【ValueChanged? 】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Center/Center_en-US.json b/modules/widget_system/widgets/doc/widgets/Center/Center_en-US.json deleted file mode 100644 index 86b996e1b..000000000 --- a/modules/widget_system/widgets/doc/widgets/Center/Center_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Center","path":"/src/widgets/basic.dart","parents":["Align","SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that centers its child within itself.","fields":[],"id":86,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Center","desc":["【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Center/Center_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Center/Center_zh-CN.json deleted file mode 100644 index a1a5742e7..000000000 --- a/modules/widget_system/widgets/doc/widgets/Center/Center_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Center","path":"/src/widgets/basic.dart","parents":["Align","SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项在自身内居中的小部件。","fields":[],"id":86,"localName":"居中组件","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Center基本使用","desc":["【child】 : 孩子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_en-US.json b/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_en-US.json deleted file mode 100644 index d97289d82..000000000 --- a/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Checkbox","path":"/src/material/checkbox.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design checkbox.","fields":[{"name":"value","type":"bool?","desc":"Whether this checkbox is checked."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the value of the checkbox should change."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.checkbox.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"activeColor","type":"Color?","desc":"The color to use when this checkbox is checked."},{"name":"fillColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.checkbox.fillColor} The color that fills the checkbox, in all [WidgetState]s."},{"name":"checkColor","type":"Color?","desc":"{@template flutter.material.checkbox.checkColor} The color to use for the check icon when this checkbox is checked. {@endtemplate}"},{"name":"tristate","type":"bool","required":true,"desc":"If true the checkbox's [value] can be true, false, or null."},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.checkbox.materialTapTargetSize} Configures the minimum size of the tap target. {@endtemplate}"},{"name":"visualDensity","type":"VisualDensity?","desc":"{@template flutter.material.checkbox.visualDensity} Defines how compact the checkbox's layout will be. {@endtemplate}"},{"name":"focusColor","type":"Color?","desc":"The color for the checkbox's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"{@template flutter.material.checkbox.hoverColor} The color for the checkbox's [Material] when a pointer is hovering over it."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.checkbox.overlayColor} The color for the checkbox's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.checkbox.splashRadius} The splash radius of the circular [Material] ink response. {@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shape","type":"OutlinedBorder?","desc":"{@template flutter.material.checkbox.shape} The shape of the checkbox's [Material]. {@endtemplate}"},{"name":"side","type":"BorderSide?","desc":"{@template flutter.material.checkbox.side} The color and width of the checkbox's border."},{"name":"isError","type":"bool","required":true,"desc":"{@template flutter.material.checkbox.isError} True if this checkbox wants to show an error state."},{"name":"semanticLabel","type":"String?","desc":"{@template flutter.material.checkbox.semanticLabel} The semantic label for the checkbox that will be announced by screen readers."}],"id":39,"lever":4,"family":1,"linkIds":[326,17],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Checkbox","desc":["【value】 : Whether it is selected 【double】","【checkColor】: Color of ✔️ when selected 【Color】","【activeColor】: Color inside the box when selected 【Color】","【onChanged】: State change event 【Function(bool)】,"]},{"file":"node2_tristate.dart","name":"Tristate of Checkbox","desc":["【tristate】 : Whether it is tristate 【double】"," when onChanged,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_zh-CN.json deleted file mode 100644 index b4b0ef171..000000000 --- a/modules/widget_system/widgets/doc/widgets/Checkbox/Checkbox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Checkbox","path":"/src/material/checkbox.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 复选框。","fields":[{"name":"value","type":"bool?","desc":"此复选框是否被选中。"},{"name":"onChanged","type":"ValueChanged?","desc":"复选框的值应该改变时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.checkbox.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"activeColor","type":"Color?","desc":"此复选框被选中时使用的颜色。"},{"name":"fillColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.checkbox.fillColor} 在所有 [WidgetState] 中填充复选框的颜色。"},{"name":"checkColor","type":"Color?","desc":"{@template flutter.material.checkbox.checkColor} 此复选框被选中时用于勾选图标的颜色。{@endtemplate}"},{"name":"tristate","type":"bool","required":true,"desc":"如果为 true,复选框的 [value] 可以是 true、false 或 null。"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.checkbox.materialTapTargetSize} 配置点击目标的最小大小。{@endtemplate}"},{"name":"visualDensity","type":"VisualDensity?","desc":"{@template flutter.material.checkbox.visualDensity} 定义复选框布局的紧凑程度。{@endtemplate}"},{"name":"focusColor","type":"Color?","desc":"复选框具有输入焦点时其 [Material] 的颜色。"},{"name":"hoverColor","type":"Color?","desc":"{@template flutter.material.checkbox.hoverColor} 指针悬停在复选框上时其 [Material] 的颜色。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.checkbox.overlayColor} 复选框 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.checkbox.splashRadius} 圆形 [Material] 墨水响应的飞溅半径。{@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shape","type":"OutlinedBorder?","desc":"{@template flutter.material.checkbox.shape} 复选框 [Material] 的形状。{@endtemplate}"},{"name":"side","type":"BorderSide?","desc":"{@template flutter.material.checkbox.side} 复选框边框的颜色和宽度。"},{"name":"isError","type":"bool","required":true,"desc":"{@template flutter.material.checkbox.isError} 如果此复选框想要显示错误状态,则为 true。"},{"name":"semanticLabel","type":"String?","desc":"{@template flutter.material.checkbox.semanticLabel} 屏幕阅读器将宣布的复选框语义标签。"}],"id":39,"localName":"复选框","lever":4,"family":1,"linkIds":[326,17],"nodes":[{"file":"node1_base.dart","name":"Checkbox基础用法","desc":["【value】 : 是否选中 【double】","【checkColor】: 选中时✔️gou颜色 【Color】","【activeColor】: 选中时框内颜色 【Color】","【onChanged】: 状态改变事件 【Function(bool)】,"]},{"file":"node2_tristate.dart","name":"Checkbox的三态","desc":["【tristate】 : 是否是三态 【double】"," onChanged时,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_en-US.json deleted file mode 100644 index 9fb6bf037..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckboxListTile","path":"/src/material/checkbox_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A [ListTile] with a [Checkbox]. In other words, a checkbox with a label.","fields":[{"name":"value","type":"bool?","desc":"Whether this checkbox is checked."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the value of the checkbox should change."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"activeColor","type":"Color?","desc":"The color to use when this checkbox is checked."},{"name":"fillColor","type":"MaterialStateProperty?","desc":"The color that fills the checkbox."},{"name":"checkColor","type":"Color?","desc":"The color to use for the check icon when this checkbox is checked."},{"name":"hoverColor","type":"Color?","desc":"{@macro flutter.material.checkbox.hoverColor}"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The color for the checkbox's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.checkbox.splashRadius}"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.checkbox.materialTapTargetSize}"},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the list tile's layout will be."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.ListTile.shape}"},{"name":"side","type":"BorderSide?","desc":"{@macro flutter.material.checkbox.side}"},{"name":"isError","type":"bool","required":true,"desc":"{@macro flutter.material.checkbox.isError}"},{"name":"tileColor","type":"Color?","desc":"{@macro flutter.material.ListTile.tileColor}"},{"name":"title","type":"Widget?","desc":"The primary content of the list tile."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"secondary","type":"Widget?","desc":"A widget to display on the opposite side of the tile from the checkbox."},{"name":"isThreeLine","type":"bool","required":true,"desc":"Whether this list tile is intended to display three lines of text."},{"name":"dense","type":"bool?","desc":"Whether this list tile is part of a vertically dense list."},{"name":"selected","type":"bool","required":true,"desc":"Whether to render icons and text in the [activeColor]."},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"Where to place the control relative to the text."},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"Defines insets surrounding the tile's contents."},{"name":"tristate","type":"bool","required":true,"desc":"If true the checkbox's [value] can be true, false, or null."},{"name":"checkboxShape","type":"OutlinedBorder?","desc":"{@macro flutter.material.checkbox.shape}"},{"name":"selectedTileColor","type":"Color?","desc":"If non-null, defines the background color when [CheckboxListTile.selected] is true."},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"enabled","type":"bool?","desc":"Whether the CheckboxListTile is interactive."},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"Whether to add button:true to the semantics if onTap is provided. This is a temporary flag to help changing the behavior of ListTile onTap semantics."},{"name":"checkboxScaleFactor","type":"double","required":true,"desc":"Controls the scaling factor applied to the [Checkbox] within the [CheckboxListTile]."},{"name":"checkboxSemanticLabel","type":"String?","desc":"{@macro flutter.material.checkbox.semanticLabel}"}],"id":17,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic representation of CheckBoxListTile","desc":["【secondary】: Left component 【Widget】","【checkColor】: ✔️ color 【Color】","【activeColor】: Frame color when selected 【Color】","【title】: Top middle component 【Widget】","【subtitle】: Bottom middle component 【Widget】","【onChanged】: Selection event 【Function(bool)】"]},{"file":"node2_select.dart","name":"Selection effect of CheckBoxListTile","desc":["【selected】: Whether selected 【bool】"]},{"file":"node3_dense.dart","name":"Dense property of CheckBoxListTile","desc":["【dense】: Whether dense 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_zh-CN.json deleted file mode 100644 index 7453ba0ef..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckboxListTile/CheckboxListTile_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckboxListTile","path":"/src/material/checkbox_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":"带有 [Checkbox] 的 [ListTile]。换句话说,带有标签的复选框。","fields":[{"name":"value","type":"bool?","desc":"此复选框是否被选中。"},{"name":"onChanged","type":"ValueChanged?","desc":"复选框的值应该改变时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"activeColor","type":"Color?","desc":"此复选框被选中时使用的颜色。"},{"name":"fillColor","type":"MaterialStateProperty?","desc":"填充复选框的颜色。"},{"name":"checkColor","type":"Color?","desc":"此复选框被选中时用于勾选图标的颜色。"},{"name":"hoverColor","type":"Color?","desc":"{@macro flutter.material.checkbox.hoverColor}"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"复选框 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.checkbox.splashRadius}"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.checkbox.materialTapTargetSize}"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义列表项布局的紧凑程度。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.ListTile.shape}"},{"name":"side","type":"BorderSide?","desc":"{@macro flutter.material.checkbox.side}"},{"name":"isError","type":"bool","required":true,"desc":"{@macro flutter.material.checkbox.isError}"},{"name":"tileColor","type":"Color?","desc":"{@macro flutter.material.ListTile.tileColor}"},{"name":"title","type":"Widget?","desc":"列表项的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"secondary","type":"Widget?","desc":"显示在与复选框相对侧的小部件。"},{"name":"isThreeLine","type":"bool","required":true,"desc":"此列表项是否旨在显示三行文本。"},{"name":"dense","type":"bool?","desc":"此列表项是否为垂直密集列表的一部分。"},{"name":"selected","type":"bool","required":true,"desc":"是否以 [activeColor] 渲染图标和文本。"},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"控件相对于文本的放置位置。"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"定义围绕项目内容的插入。"},{"name":"tristate","type":"bool","required":true,"desc":"如果为 true,复选框的 [value] 可以是 true、false 或 null。"},{"name":"checkboxShape","type":"OutlinedBorder?","desc":"{@macro flutter.material.checkbox.shape}"},{"name":"selectedTileColor","type":"Color?","desc":"如果非空,定义 [CheckboxListTile.selected] 为 true 时的背景颜色。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"enabled","type":"bool?","desc":"CheckboxListTile 是否可交互。"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"如果提供了 onTap,是否向语义添加 button:true。这是一个临时标志,用于帮助更改 ListTile onTap 语义的行为。"},{"name":"checkboxScaleFactor","type":"double","required":true,"desc":"控制应用于 [CheckboxListTile] 内 [Checkbox] 的缩放因子。"},{"name":"checkboxSemanticLabel","type":"String?","desc":"{@macro flutter.material.checkbox.semanticLabel}"}],"id":17,"localName":"复选瓦片","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CheckBoxListTile的基本表现如下","desc":["【secondary】: 左侧组件 【Widget】","【checkColor】: ✔️颜色 【Color】","【activeColor】: 选中时外框颜色 【Color】","【title】: 中间上组件 【Widget】","【subtitle】: 中间下组件 【Widget】","【onChanged】: 选中事件 【Function(bool)】"]},{"file":"node2_select.dart","name":"CheckBoxListTile的选中效果","desc":["【selected】: 是否选中 【bool】"]},{"file":"node3_dense.dart","name":"CheckBoxListTile的密排属性","desc":["【dense】: 是否密排 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_en-US.json deleted file mode 100644 index 41f69d3c8..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckboxMenuButton","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":" A menu item that combines a [Checkbox] widget with a [MenuItemButton].","fields":[{"name":"value","type":"bool?","desc":"Whether this checkbox is checked."},{"name":"tristate","type":"bool","required":true,"desc":"If true, then the checkbox's [value] can be true, false, or null."},{"name":"isError","type":"bool","required":true,"desc":"True if this checkbox wants to show an error state."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the value of the checkbox should change."},{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the button response area."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"The optional shortcut that selects this [MenuItemButton]."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"trailingIcon","type":"Widget?","desc":"An optional icon to display after the [child] label."},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@macro flutter.material.menu_anchor.closeOnActivate}"},{"name":"child","type":"Widget?","desc":"The widget displayed in the center of this button."}],"id":375,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_zh-CN.json deleted file mode 100644 index 6772d1683..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckboxMenuButton/CheckboxMenuButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckboxMenuButton","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":"将 [Checkbox] 小部件与 [MenuItemButton] 结合的菜单项。","fields":[{"name":"value","type":"bool?","desc":"此复选框是否被选中。"},{"name":"tristate","type":"bool","required":true,"desc":"如果为 true,则复选框的 [value] 可以是 true、false 或 null。"},{"name":"isError","type":"bool","required":true,"desc":"如果此复选框想要显示错误状态,则为 true。"},{"name":"onChanged","type":"ValueChanged?","desc":"复选框的值应该改变时调用。"},{"name":"onHover","type":"ValueChanged?","desc":"指针进入或退出按钮响应区域时调用。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点改变时调用的处理程序。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"选择此 [MenuItemButton] 的可选快捷键。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"trailingIcon","type":"Widget?","desc":"在 [child] 标签后显示的可选图标。"},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@macro flutter.material.menu_anchor.closeOnActivate}"},{"name":"child","type":"Widget?","desc":"显示在此按钮中心的小部件。"}],"id":375,"localName":"CheckboxMenuButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_en-US.json deleted file mode 100644 index 8bf70e0b6..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckboxTheme","path":"/src/material/checkbox_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a checkbox theme to descendant [Checkbox] widgets.","fields":[{"name":"data","type":"CheckboxThemeData","required":true,"desc":"The properties used for all descendant [Checkbox] widgets."}],"id":376,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_zh-CN.json deleted file mode 100644 index e34293583..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckboxTheme/CheckboxTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckboxTheme","path":"/src/material/checkbox_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将复选框主题应用于后代 [Checkbox] 小部件。","fields":[{"name":"data","type":"CheckboxThemeData","required":true,"desc":"用于所有后代 [Checkbox] 小部件的属性。"}],"id":376,"localName":"CheckboxTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_en-US.json b/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_en-US.json deleted file mode 100644 index f404abc36..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckedModeBanner","path":"/src/widgets/banner.dart","parents":["StatelessWidget","Widget"],"desc":" Displays a [Banner] saying \"DEBUG\" when running in debug mode. [MaterialApp] builds one of these by default.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget to show behind the banner."}],"id":215,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic usage of CheckedModeBanner","desc":["【child】 : Component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_zh-CN.json deleted file mode 100644 index a6e229d36..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckedModeBanner/CheckedModeBanner_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckedModeBanner","path":"/src/widgets/banner.dart","parents":["StatelessWidget","Widget"],"desc":"在调试模式下运行时显示写着\",DEBUG\"的 [Banner]。[MaterialApp] 默认构建其中一个。","fields":[{"name":"child","type":"Widget","required":true,"desc":"在横幅后面显示的小部件。"}],"id":215,"localName":"debug标签","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CheckedModeBanner基本使用","desc":["【child】 : 组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_en-US.json b/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_en-US.json deleted file mode 100644 index 08c1b95c5..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckedPopupMenuItem","path":"/src/material/popup_menu.dart","parents":["PopupMenuItem","PopupMenuEntry","StatefulWidget","Widget"],"desc":" An item with a checkmark in a Material Design popup menu.","fields":[{"name":"checked","type":"bool","required":true,"desc":"Whether to display a checkmark next to the menu item."}],"id":377,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_zh-CN.json deleted file mode 100644 index 87c148b80..000000000 --- a/modules/widget_system/widgets/doc/widgets/CheckedPopupMenuItem/CheckedPopupMenuItem_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CheckedPopupMenuItem","path":"/src/material/popup_menu.dart","parents":["PopupMenuItem","PopupMenuEntry","StatefulWidget","Widget"],"desc":"Material Design 弹出菜单中带有勾选标记的项目。","fields":[{"name":"checked","type":"bool","required":true,"desc":"是否在菜单项旁边显示勾选标记。"}],"id":377,"localName":"CheckedPopupMenuItem","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Chip/Chip_en-US.json b/modules/widget_system/widgets/doc/widgets/Chip/Chip_en-US.json deleted file mode 100644 index f85482293..000000000 --- a/modules/widget_system/widgets/doc/widgets/Chip/Chip_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Chip","path":"/src/material/chip.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design chip.","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"WidgetStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":11,"lever":4,"family":0,"linkIds":[12,13,14,15,153],"nodes":[{"file":"node1_base.dart","name":"The normal appearance of Chip is as follows","desc":["【avatar】: Left component 【Widget】","【label】: Middle component 【Widget】","【padding】: Padding 【EdgeInsetsGeometry】","【labelPadding】: Label padding 【EdgeInsetsGeometry】"]},{"file":"node2_color.dart","name":"You can set colors and shadows","desc":["【backgroundColor】: Background color 【Color】","【shadowColor】: Shadow color 【Color】","【elevation】: Shadow depth 【double】"]},{"file":"node3_delete.dart","name":"You can set the right click button","desc":["【deleteIcon】: Right component (usually an Icon) 【Widget】","【deleteIconColor】: Right component color 【Color】","【onDeleted】: Right component click event 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Chip/Chip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Chip/Chip_zh-CN.json deleted file mode 100644 index 3a6f4dbb1..000000000 --- a/modules/widget_system/widgets/doc/widgets/Chip/Chip_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Chip","path":"/src/material/chip.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 芯片。","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"WidgetStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":11,"localName":"小条组件","lever":4,"family":0,"linkIds":[12,13,14,15,153],"nodes":[{"file":"node1_base.dart","name":"Chip的普通表现如下","desc":["【avatar】: 左侧组件 【Widget】","【label】: 中间组件 【Widget】","【padding】 : 内边距 【EdgeInsetsGeometry】","【labelPadding】: label边距 【EdgeInsetsGeometry】"]},{"file":"node2_color.dart","name":"可以设置颜色和阴影","desc":["【backgroundColor】: 背景色 【Color】","【shadowColor】: 阴影色 【Color】","【elevation】: 影深 【double】"]},{"file":"node3_delete.dart","name":"可以设置右侧点击按钮","desc":["【deleteIcon】: 右侧组件(通常为Icon) 【Widget】","【deleteIconColor】: 右侧组件颜色 【Color】","【onDeleted】: 右侧组件点击事件 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_en-US.json deleted file mode 100644 index 3fb9a6702..000000000 --- a/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ChipTheme","path":"/src/material/chip_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a chip theme to descendant [RawChip]-based widgets, like [Chip], [InputChip], [ChoiceChip], [FilterChip], and [ActionChip].","fields":[{"name":"data","type":"ChipThemeData","required":true,"desc":"Specifies the color, shape, and text style values for descendant chip widgets."}],"id":328,"lever":3,"family":5,"linkIds":[11,153,12,13,14,15],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ChipTheme","desc":["You can specify the ChipThemeData properties to set default styles for Chip type components of descendants. The properties are similar to those of Chip, such as shadow, color, margin, shape, text style, etc. You can also use ChipTheme.of to get the theme data of Chip."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_zh-CN.json deleted file mode 100644 index 4511e6b3f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ChipTheme/ChipTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ChipTheme","path":"/src/material/chip_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"将芯片主题应用于基于 [RawChip] 的后代小部件,如 [Chip]、[InputChip]、[ChoiceChip]、[FilterChip] 和 [ActionChip]。","fields":[{"name":"data","type":"ChipThemeData","required":true,"desc":"为后代芯片小部件指定颜色、形状和文本样式值。"}],"id":328,"localName":"小条样式","lever":3,"family":5,"linkIds":[11,153,12,13,14,15],"nodes":[{"file":"node1_base.dart","name":"ChipTheme基本使用","desc":["可指定ChipThemeData数据属性为【后代】的Chip类型组件设置默认样式,属性和Chip属性类似,如阴影、颜色、边距、形状、文字样式等。也可以用ChipTheme.of获取Chip的主题数据。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_en-US.json b/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_en-US.json deleted file mode 100644 index 72ca46a69..000000000 --- a/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ChoiceChip","path":"/src/material/choice_chip.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design choice chip.","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"onSelected","type":"ValueChanged?"},{"name":"pressElevation","type":"double?"},{"name":"selected","type":"bool","required":true},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":12,"lever":3,"family":0,"linkIds":[11,13,14,15,153],"nodes":[{"file":"node1_base.dart","name":"The normal performance of ChoiceChip is as follows","desc":["【selectedColor】: Color when selected 【Color】","【selectedShadowColor】: Shadow color when selected 【Color】","【onSelected】: Selection event 【Fuction(bool)】"," Other properties are the same as the Chip component, with no right component."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_zh-CN.json deleted file mode 100644 index d36b0e591..000000000 --- a/modules/widget_system/widgets/doc/widgets/ChoiceChip/ChoiceChip_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ChoiceChip","path":"/src/material/choice_chip.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 选择芯片。","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"onSelected","type":"ValueChanged?"},{"name":"pressElevation","type":"double?"},{"name":"selected","type":"bool","required":true},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":12,"localName":"选择小条","lever":3,"family":0,"linkIds":[11,13,14,15,153],"nodes":[{"file":"node1_base.dart","name":"ChoiceChip的普通表现如下","desc":["【selectedColor】: 选中时颜色 【Color】","【selectedShadowColor】: 选中时阴影颜色 【Color】","【onSelected】: 选中事件 【Fuction(bool)】"," 其他属性同Chip组件,无右侧组件。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_en-US.json b/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_en-US.json deleted file mode 100644 index 090b820c1..000000000 --- a/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CircleAvatar","path":"/src/material/circle_avatar.dart","parents":["StatelessWidget","Widget"],"desc":" A circle that represents a user.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"backgroundColor","type":"Color?","desc":"The color with which to fill the circle. Changing the background color will cause the avatar to animate to the new color."},{"name":"foregroundColor","type":"Color?","desc":"The default text color for text in the circle."},{"name":"backgroundImage","type":"ImageProvider?","desc":"The background image of the circle. Changing the background image will cause the avatar to animate to the new image."},{"name":"foregroundImage","type":"ImageProvider?","desc":"The foreground image of the circle."},{"name":"onBackgroundImageError","type":"ImageErrorListener?","desc":"An optional error callback for errors emitted when loading [backgroundImage]."},{"name":"onForegroundImageError","type":"ImageErrorListener?","desc":"An optional error callback for errors emitted when loading [foregroundImage]."},{"name":"radius","type":"double?","desc":"The size of the avatar, expressed as the radius (half the diameter)."},{"name":"minRadius","type":"double?","desc":"The minimum size of the avatar, expressed as the radius (half the diameter)."},{"name":"maxRadius","type":"double?","desc":"The maximum size of the avatar, expressed as the radius (half the diameter)."}],"id":9,"lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CircleAvatar Performance","desc":["【radius】: radius 【double】","【backgroundImage】: image resource 【ImageProvider】","【foregroundColor】: foreground color 【Color】","【backgroundColor】: background color 【Color】","【minRadius】: minimum radius 【double】","【maxRadius】: maximum radius 【double】","【child】: child component 【Child】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_zh-CN.json deleted file mode 100644 index 6647d02ee..000000000 --- a/modules/widget_system/widgets/doc/widgets/CircleAvatar/CircleAvatar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CircleAvatar","path":"/src/material/circle_avatar.dart","parents":["StatelessWidget","Widget"],"desc":"代表用户的圆形。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"backgroundColor","type":"Color?","desc":"填充圆形的颜色。更改背景颜色将导致头像动画到新颜色。"},{"name":"foregroundColor","type":"Color?","desc":"圆形中文本的默认文本颜色。"},{"name":"backgroundImage","type":"ImageProvider?","desc":"圆形的背景图像。更改背景图像将导致头像动画到新图像。"},{"name":"foregroundImage","type":"ImageProvider?","desc":"圆形的前景图像。"},{"name":"onBackgroundImageError","type":"ImageErrorListener?","desc":"加载 [backgroundImage] 时发出错误的可选错误回调。"},{"name":"onForegroundImageError","type":"ImageErrorListener?","desc":"加载 [foregroundImage] 时发出错误的可选错误回调。"},{"name":"radius","type":"double?","desc":"头像的大小,表示为半径(直径的一半)。"},{"name":"minRadius","type":"double?","desc":"头像的最小大小,表示为半径(直径的一半)。"},{"name":"maxRadius","type":"double?","desc":"头像的最大大小,表示为半径(直径的一半)。"}],"id":9,"localName":"圆形组件","lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CircleAvatar的表现","desc":["【radius】 : 半径 【double】","【backgroundImage】 : 图片资源 【ImageProvider】","【foregroundColor】: 前景色 【Color】","【backgroundColor】: 背景色 【Color】","【minRadius】: 最小半径 【double】","【maxRadius】: 最大半径 【double】","【child】: 孩子组件 【Child】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_en-US.json deleted file mode 100644 index 99e06e875..000000000 --- a/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CircularProgressIndicator","path":"/src/material/progress_indicator.dart","parents":["ProgressIndicator","StatefulWidget","Widget"],"desc":" A Material Design circular progress indicator, which spins to indicate that the application is busy.","fields":[{"name":"strokeWidth","type":"double?","desc":"The width of the line used to draw the circle."},{"name":"strokeAlign","type":"double?","desc":"The relative position of the stroke on a [CircularProgressIndicator]."},{"name":"strokeCap","type":"StrokeCap?","desc":"The progress indicator's line ending."},{"name":"constraints","type":"BoxConstraints?","desc":"Defines minimum and maximum sizes for a [CircularProgressIndicator]."},{"name":"trackGap","type":"double?","desc":"The gap between the active indicator and the background track."},{"name":"year2023","type":"bool?","desc":"When true, the [CircularProgressIndicator] will use the 2023 Material Design 3 appearance."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The padding around the indicator track."}],"id":46,"lever":3,"family":1,"linkIds":[47,48],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CircularProgressIndicator","desc":["【value】 : Progress 【double】","【backgroundColor】 : Background Color 【Color】","【valueColor】 : Progress Color 【Animation】","【strokeWidth】 : Line Width 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_zh-CN.json deleted file mode 100644 index bbce9db45..000000000 --- a/modules/widget_system/widgets/doc/widgets/CircularProgressIndicator/CircularProgressIndicator_zh-CN.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "CircularProgressIndicator", - "path": "/src/material/progress_indicator.dart", - "parents": [ - "ProgressIndicator", - "StatefulWidget", - "Widget" - ], - "desc": "Material Design 圆形进度指示器,旋转以指示应用程序正忙。", - "fields": [ - { - "name": "strokeWidth", - "type": "double?", - "desc": "用于绘制圆形的线条宽度。" - }, - { - "name": "strokeAlign", - "type": "double?", - "desc": "[CircularProgressIndicator] 上笔画的相对位置。" - }, - { - "name": "strokeCap", - "type": "StrokeCap?", - "desc": "进度指示器的线条结尾。" - }, - { - "name": "constraints", - "type": "BoxConstraints?", - "desc": "定义 [CircularProgressIndicator] 的最小和最大大小。" - }, - { - "name": "trackGap", - "type": "double?", - "desc": "活动指示器和背景轨道之间的间隙。" - }, - { - "name": "year2023", - "type": "bool?", - "desc": "当为 true 时,[CircularProgressIndicator] 将使用 2023 Material Design 3 外观。" - }, - { - "name": "padding", - "type": "EdgeInsetsGeometry?", - "desc": "指示器轨道周围的内边距。" - } - ], - "id": 46, - "localName": "圆形进度", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CircularProgressIndicator基本使用", - "desc": [ - "【value】 : 进度 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【valueColor】 : 进度颜色 【Animation】", - "【strokeWidth】 : 线宽 【double】" - ] - } - ] -} diff --git a/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_en-US.json b/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_en-US.json deleted file mode 100644 index f973f9e6a..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipOval","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that clips its child using an oval.","fields":[{"name":"clipper","type":"CustomClipper?","desc":"If non-null, determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":66,"lever":3,"family":2,"linkIds":[67,68,69],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ClipOval","desc":["【child】: Child component 【Widget】","【clipBehavior】: Clipping behavior 【Clip】","【clipper】: Clipper 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_zh-CN.json deleted file mode 100644 index 27b811ee8..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipOval/ClipOval_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipOval","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用椭圆形裁剪其子项的小部件。","fields":[{"name":"clipper","type":"CustomClipper?","desc":"如果非空,确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":66,"localName":"椭圆裁剪","lever":3,"family":2,"linkIds":[67,68,69],"nodes":[{"file":"node1_base.dart","name":"ClipOval基本使用","desc":["【child】 : 子组件 【Widget】","【clipBehavior】 : 裁剪行为 【Clip】","【clipper】 : 裁剪器 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_en-US.json b/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_en-US.json deleted file mode 100644 index d5f9f4ea0..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipPath","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that clips its child using a path.","fields":[{"name":"clipper","type":"CustomClipper?","desc":"If non-null, determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":69,"lever":5,"family":2,"linkIds":[66,67,68],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ClipPath","desc":["【child】 : Child component 【Widget】","【clipBehavior】 : Clipping behavior 【Clip】","【clipper】 : Clipper 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_zh-CN.json deleted file mode 100644 index 514aa5359..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipPath/ClipPath_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipPath","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用路径裁剪其子项的小部件。","fields":[{"name":"clipper","type":"CustomClipper?","desc":"如果非空,确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":69,"localName":"路径裁剪","lever":5,"family":2,"linkIds":[66,67,68],"nodes":[{"file":"node1_base.dart","name":"ClipPath基本使用","desc":["【child】 : 子组件 【Widget】","【clipBehavior】 : 裁剪行为 【Clip】","【clipper】 : 裁剪器 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_en-US.json b/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_en-US.json deleted file mode 100644 index 2a48f3d0e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipRRect","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that clips its child using a rounded rectangle.","fields":[{"name":"borderRadius","type":"BorderRadiusGeometry","required":true,"desc":"The border radius of the rounded corners."},{"name":"clipper","type":"CustomClipper?","desc":"If non-null, determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":68,"lever":3,"family":2,"linkIds":[66,67,69],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ClipRRect","desc":["【child】: Child component 【Widget】","【borderRadius】: Border radius 【BorderRadius】","【clipBehavior】: Clipping behavior 【Clip】","【clipper】: Clipper 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_zh-CN.json deleted file mode 100644 index 586234f5f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipRRect/ClipRRect_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipRRect","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用圆角矩形裁剪其子项的小部件。","fields":[{"name":"borderRadius","type":"BorderRadiusGeometry","required":true,"desc":"圆角的边框半径。"},{"name":"clipper","type":"CustomClipper?","desc":"如果非空,确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":68,"localName":"圆角矩形裁剪","lever":3,"family":2,"linkIds":[66,67,69],"nodes":[{"file":"node1_base.dart","name":"ClipRRect基本使用","desc":["【child】 : 子组件 【Widget】","【borderRadius】 : 边线半径 【BorderRadius】","【clipBehavior】 : 裁剪行为 【Clip】","【clipper】 : 裁剪器 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_en-US.json b/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_en-US.json deleted file mode 100644 index f4656838d..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipRSuperellipse","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that clips its child using a rounded superellipse.","fields":[{"name":"borderRadius","type":"BorderRadiusGeometry","required":true,"desc":"The border radius of the rounded corners."},{"name":"clipper","type":"CustomClipper?","desc":"If non-null, determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":378,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_zh-CN.json deleted file mode 100644 index 716e2a55d..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipRSuperellipse/ClipRSuperellipse_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipRSuperellipse","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用圆角超椭圆裁剪其子项的小部件。","fields":[{"name":"borderRadius","type":"BorderRadiusGeometry","required":true,"desc":"圆角的边框半径。"},{"name":"clipper","type":"CustomClipper?","desc":"如果非空,确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":378,"localName":"ClipRSuperellipse","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_en-US.json b/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_en-US.json deleted file mode 100644 index 5b75661cc..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipRect","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that clips its child using a rectangle.","fields":[{"name":"clipper","type":"CustomClipper?","desc":"If non-null, determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":67,"lever":3,"family":2,"linkIds":[66,68,69],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ClipRect","desc":["【child】: Child component 【Widget】","【clipBehavior】: Clipping behavior 【Clip】","【clipper】: Clipper 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_zh-CN.json deleted file mode 100644 index 4caea1381..000000000 --- a/modules/widget_system/widgets/doc/widgets/ClipRect/ClipRect_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ClipRect","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用矩形裁剪其子项的小部件。","fields":[{"name":"clipper","type":"CustomClipper?","desc":"如果非空,确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.rendering.ClipRectLayer.clipBehavior}"}],"id":67,"localName":"矩形裁剪","lever":3,"family":2,"linkIds":[66,68,69],"nodes":[{"file":"node1_base.dart","name":"ClipRect基本使用","desc":["【child】 : 子组件 【Widget】","【clipBehavior】 : 裁剪行为 【Clip】","【clipper】 : 裁剪器 【CustomClipper】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_en-US.json deleted file mode 100644 index 98828d271..000000000 --- a/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CloseButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":" A Material Design close icon button.","fields":[],"id":32,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CloseButton Click Event","desc":["【onPressed】: Click event 【VoidCallback?】","【style】: Button style 【ButtonStyle?】","【color】: Color 【Color】","When onPressed is null, clicking will exit the current interface."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_zh-CN.json deleted file mode 100644 index 8bc73cbf7..000000000 --- a/modules/widget_system/widgets/doc/widgets/CloseButton/CloseButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CloseButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":"Material Design 关闭图标按钮。","fields":[],"id":32,"localName":"关闭按钮","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CloseButton点击事件","desc":["【onPressed】 : 点击事件 【VoidCallback?】","【style】: 按钮样式 【ButtonStyle?】","【color】: 颜色 【Color】","onPressed 为空时,点击时会退出当前界面。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_en-US.json deleted file mode 100644 index a2b31f44f..000000000 --- a/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CloseButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":" A \"close\" icon that's appropriate for the current [TargetPlatform].","fields":[],"id":274,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CloseButtonIcon Effect","desc":["The _ActionIcon component adapts the close button icon for different platforms based on the ActionIconTheme."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_zh-CN.json deleted file mode 100644 index 316ed41c3..000000000 --- a/modules/widget_system/widgets/doc/widgets/CloseButtonIcon/CloseButtonIcon_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CloseButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":"适合当前 [TargetPlatform] 的\"关闭\"图标。","fields":[],"id":274,"localName":"关闭按钮图标","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CloseButtonIcon 效果","desc":["通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的关闭按钮图标。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_en-US.json b/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_en-US.json deleted file mode 100644 index 06bf6aed8..000000000 --- a/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ColorFiltered","path":"/src/widgets/color_filter.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Applies a [ColorFilter] to its child.","fields":[{"name":"colorFilter","type":"ColorFilter","required":true,"desc":"The color filter to apply to the child of this widget."}],"id":88,"lever":5,"family":2,"linkIds":[277,38],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ColorFiltered","desc":["【child】: Child component 【Widget】","【colorFilter】: Color filter 【ColorFilter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_zh-CN.json deleted file mode 100644 index 89ae48d50..000000000 --- a/modules/widget_system/widgets/doc/widgets/ColorFiltered/ColorFiltered_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ColorFiltered","path":"/src/widgets/color_filter.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将 [ColorFilter] 应用于其子项。","fields":[{"name":"colorFilter","type":"ColorFilter","required":true,"desc":"应用于此小部件子项的颜色滤镜。"}],"id":88,"localName":"滤色器","lever":5,"family":2,"linkIds":[277,38],"nodes":[{"file":"node1_base.dart","name":"ColorFiltered基本使用","desc":["【child】 : 孩子组件 【Widget】","【colorFilter】 : 滤色器 【ColorFilter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_en-US.json b/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_en-US.json deleted file mode 100644 index e3d8be703..000000000 --- a/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ColoredBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that paints its area with a specified [Color] and then draws its child on top of that color.","fields":[{"name":"color","type":"Color","required":true,"desc":"The color to paint the background area with."}],"id":267,"lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ColoredBox","desc":["【color】: Component 【Color】","【child】: Component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_zh-CN.json deleted file mode 100644 index b3ea48884..000000000 --- a/modules/widget_system/widgets/doc/widgets/ColoredBox/ColoredBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ColoredBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"用指定的 [Color] 绘制其区域,然后在该颜色之上绘制其子项的小部件。","fields":[{"name":"color","type":"Color","required":true,"desc":"用于绘制背景区域的颜色。"}],"id":267,"localName":"颜色盒","lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ColoredBox基本使用","desc":["【color】 : 组件 【Color】","【child】 : 组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Column/Column_en-US.json b/modules/widget_system/widgets/doc/widgets/Column/Column_en-US.json deleted file mode 100644 index d8d11c4b2..000000000 --- a/modules/widget_system/widgets/doc/widgets/Column/Column_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Column","path":"/src/widgets/basic.dart","parents":["Flex","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that displays its children in a vertical array.","fields":[],"id":96,"lever":4,"family":3,"linkIds":[94,95],"nodes":[{"file":"node_01.dart","name":"Basic Usage of Column","desc":["【children】: Component list 【List】","【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】","【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】","【textBaseline】: Text baseline 【TextBaseline】","【verticalDirection】: Vertical direction 【VerticalDirection】","【mainAxisSize】: Main axis size 【MainAxisSize】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Column/Column_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Column/Column_zh-CN.json deleted file mode 100644 index 973fb6e9d..000000000 --- a/modules/widget_system/widgets/doc/widgets/Column/Column_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Column","path":"/src/widgets/basic.dart","parents":["Flex","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"以垂直数组显示其子项的小部件。","fields":[],"id":96,"localName":"列布局","lever":4,"family":3,"linkIds":[94,95],"nodes":[{"file":"node_01.dart","name":"Column基本使用","desc":["【children】 : 组件列表 【List】","【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】","【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】","【textBaseline】 : 文字基线 【TextBaseline】","【verticalDirection】 : 竖直方向 【VerticalDirection】","【mainAxisSize】 : 主轴尺寸 【MainAxisSize】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_en-US.json b/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_en-US.json deleted file mode 100644 index 40ca4adaa..000000000 --- a/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CompositedTransformFollower","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that follows a [CompositedTransformTarget].","fields":[{"name":"link","type":"LayerLink","required":true,"desc":"The link object that connects this [CompositedTransformFollower] with a [CompositedTransformTarget]."},{"name":"showWhenUnlinked","type":"bool","required":true,"desc":"Whether to show the widget's contents when there is no corresponding [CompositedTransformTarget] with the same [link]."},{"name":"targetAnchor","type":"Alignment","required":true,"desc":"The anchor point on the linked [CompositedTransformTarget] that [followerAnchor] will line up with."},{"name":"followerAnchor","type":"Alignment","required":true,"desc":"The anchor point on this widget that will line up with [targetAnchor] on the linked [CompositedTransformTarget]."},{"name":"offset","type":"Offset","required":true,"desc":"The additional offset to apply to the [targetAnchor] of the linked [CompositedTransformTarget] to obtain this widget's [followerAnchor] position."}],"id":265,"lever":3,"family":2,"linkIds":[266,182],"nodes":[{"file":"node1_base.dart","name":"Usage of CompositedTransformFollower","desc":["【child】 : Child widget 【Widget】","【link】 : Link 【LayerLink】","【offset】 : Offset 【Offset】","【targetAnchor】 : Target anchor 【Alignment】","【followerAnchor】 : Follower anchor 【Alignment】","【showWhenUnlinked】 : Whether to show when unlinked 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_zh-CN.json deleted file mode 100644 index 8a95ea6f9..000000000 --- a/modules/widget_system/widgets/doc/widgets/CompositedTransformFollower/CompositedTransformFollower_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CompositedTransformFollower","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"跟随 [CompositedTransformTarget] 的小部件。","fields":[{"name":"link","type":"LayerLink","required":true,"desc":"连接此 [CompositedTransformFollower] 与 [CompositedTransformTarget] 的链接对象。"},{"name":"showWhenUnlinked","type":"bool","required":true,"desc":"当没有具有相同 [link] 的对应 [CompositedTransformTarget] 时,是否显示小部件的内容。"},{"name":"targetAnchor","type":"Alignment","required":true,"desc":"链接的 [CompositedTransformTarget] 上的锚点,[followerAnchor] 将与之对齐。"},{"name":"followerAnchor","type":"Alignment","required":true,"desc":"此小部件上的锚点,将与链接的 [CompositedTransformTarget] 上的 [targetAnchor] 对齐。"},{"name":"offset","type":"Offset","required":true,"desc":"应用于链接的 [CompositedTransformTarget] 的 [targetAnchor] 以获得此小部件的 [followerAnchor] 位置的附加偏移量。"}],"id":265,"localName":"合成变换跟随者","lever":3,"family":2,"linkIds":[266,182],"nodes":[{"file":"node1_base.dart","name":"CompositedTransformFollower 使用","desc":["【child】 : 子组件 【Widget】","【link】 : 链接 【LayerLink】","【offset】 : 偏移 【Offset】","【targetAnchor】 : 目标锚点 【Alignment】","【followerAnchor】 : 伴随者锚点 【Alignment】","【showWhenUnlinked】 : 为链接是否显示 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_en-US.json b/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_en-US.json deleted file mode 100644 index 77fc0322c..000000000 --- a/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CompositedTransformTarget","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that can be targeted by a [CompositedTransformFollower].","fields":[{"name":"link","type":"LayerLink","required":true,"desc":"The link object that connects this [CompositedTransformTarget] with one or more [CompositedTransformFollower]s."}],"id":266,"lever":3,"family":2,"linkIds":[265,182],"nodes":[{"file":"node1_base.dart","name":"CompositedTransformTarget Usage","desc":["【child】 : Child component 【Widget】","【link】 : Link 【LayerLink】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_zh-CN.json deleted file mode 100644 index ab744dc85..000000000 --- a/modules/widget_system/widgets/doc/widgets/CompositedTransformTarget/CompositedTransformTarget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CompositedTransformTarget","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"可以被 [CompositedTransformFollower] 定位的小部件。","fields":[{"name":"link","type":"LayerLink","required":true,"desc":"连接此 [CompositedTransformTarget] 与一个或多个 [CompositedTransformFollower] 的链接对象。"}],"id":266,"localName":"合成变换目标","lever":3,"family":2,"linkIds":[265,182],"nodes":[{"file":"node1_base.dart","name":"CompositedTransformTarget 使用","desc":["【child】 : 子组件 【Widget】","【link】 : 链接 【LayerLink】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_en-US.json deleted file mode 100644 index 3e05daa94..000000000 --- a/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ConstrainedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that imposes additional constraints on its child.","fields":[{"name":"constraints","type":"BoxConstraints","required":true,"desc":"The additional constraints to impose on the child."}],"id":80,"lever":3,"family":2,"linkIds":[1,79,81],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of BoxConstraints","desc":["【child】 : Child component 【Widget】","【minWidth】 : Minimum width 【double】","【minHeight】 : Minimum height 【double】","【maxHeight】 : Maximum height 【double】","【maxWidth】 : Maximum width 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_zh-CN.json deleted file mode 100644 index 9f2c91e02..000000000 --- a/modules/widget_system/widgets/doc/widgets/ConstrainedBox/ConstrainedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ConstrainedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对其子项施加额外约束的小部件。","fields":[{"name":"constraints","type":"BoxConstraints","required":true,"desc":"对子项施加的额外约束。"}],"id":80,"localName":"约束盒","lever":3,"family":2,"linkIds":[1,79,81],"nodes":[{"file":"node1_base.dart","name":"BoxConstraints基本使用","desc":["【child】 : 孩子组件 【Widget】","【minWidth】 : 最小宽 【double】","【minHeight】 : 最小高 【double】","【maxHeight】 : 最大高 【double】","【maxWidth】 : 最大宽 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_en-US.json deleted file mode 100644 index cdf6c01a2..000000000 --- a/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ConstrainedLayoutBuilder","path":"/src/widgets/layout_builder.dart","abstract":true,"parents":["AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":" A specialized [AbstractLayoutBuilder] whose widget subtree depends on the incoming [ConstraintType] that will be imposed on the widget.","fields":[{"name":"builder","type":"Widget Function(BuildContext context, ConstraintType constraints)","required":true}],"id":379,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_zh-CN.json deleted file mode 100644 index 2028a9081..000000000 --- a/modules/widget_system/widgets/doc/widgets/ConstrainedLayoutBuilder/ConstrainedLayoutBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ConstrainedLayoutBuilder","path":"/src/widgets/layout_builder.dart","abstract":true,"parents":["AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":"专门的 [AbstractLayoutBuilder],其小部件子树依赖于将施加在小部件上的传入 [ConstraintType]。","fields":[{"name":"builder","type":"Widget Function(BuildContext context, ConstraintType constraints)","required":true}],"id":379,"localName":"ConstrainedLayoutBuilder","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_en-US.json b/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_en-US.json deleted file mode 100644 index 0c75a93b9..000000000 --- a/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ConstraintsTransformBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A container widget that applies an arbitrary transform to its constraints, and sizes its child using the resulting [BoxConstraints], optionally clipping, or treating the overflow as an error.","fields":[{"name":"textDirection","type":"TextDirection?","desc":"The text direction to use when interpreting the [alignment] if it is an [AlignmentDirectional]."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"The alignment to use when laying out the child, if it has a different size than this widget."},{"name":"constraintsTransform","type":"BoxConstraintsTransform","required":true,"desc":"{@template flutter.widgets.constraintsTransform} The function used to transform the incoming [BoxConstraints], to size [child]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":380,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_zh-CN.json deleted file mode 100644 index 22992d565..000000000 --- a/modules/widget_system/widgets/doc/widgets/ConstraintsTransformBox/ConstraintsTransformBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ConstraintsTransformBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对其约束应用任意变换的容器小部件,使用生成的 [BoxConstraints] 调整其子项大小,可选择裁剪或将溢出视为错误。","fields":[{"name":"textDirection","type":"TextDirection?","desc":"如果 [alignment] 是 [AlignmentDirectional],则在解释 [alignment] 时使用的文本方向。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如果子项的大小与此小部件不同,则在布局子项时使用的对齐方式。"},{"name":"constraintsTransform","type":"BoxConstraintsTransform","required":true,"desc":"{@template flutter.widgets.constraintsTransform} 用于变换传入 [BoxConstraints] 以调整 [child] 大小的函数。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":380,"localName":"ConstraintsTransformBox","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Container/Container_en-US.json b/modules/widget_system/widgets/doc/widgets/Container/Container_en-US.json deleted file mode 100644 index 983f6ce80..000000000 --- a/modules/widget_system/widgets/doc/widgets/Container/Container_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Container","path":"/src/widgets/container.dart","parents":["StatelessWidget","Widget"],"desc":" A convenience widget that combines common painting, positioning, and sizing widgets.","fields":[{"name":"child","type":"Widget?","desc":"The [child] contained by the container."},{"name":"alignment","type":"AlignmentGeometry?","desc":"Align the [child] within the container."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Empty space to inscribe inside the [decoration]. The [child], if any, is placed inside this padding."},{"name":"color","type":"Color?","desc":"The color to paint behind the [child]."},{"name":"decoration","type":"Decoration?","desc":"The decoration to paint behind the [child]."},{"name":"foregroundDecoration","type":"Decoration?","desc":"The decoration to paint in front of the [child]."},{"name":"constraints","type":"BoxConstraints?","desc":"Additional constraints to apply to the child."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"Empty space to surround the [decoration] and [child]."},{"name":"transform","type":"Matrix4?","desc":"The transformation matrix to apply before painting the container."},{"name":"transformAlignment","type":"AlignmentGeometry?","desc":"The alignment of the origin, relative to the size of the container, if [transform] is specified."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"The clip behavior when [Container.decoration] is not null."}],"id":1,"lever":5,"family":0,"linkIds":[74,85,80,78,70,123],"nodes":[{"file":"node1_base.dart","name":"Can be used to display an area with specified width and height","desc":["【width】 : width 【int】","【height】: height 【int】","【color】: color 【Color】"]},{"file":"node2_child.dart","name":"Can place a child component within the area","desc":["【padding】 : padding 【EdgeInsetsGeometry】","【margin】: margin 【EdgeInsetsGeometry】","【child】: child component 【Widget】"]},{"file":"node3_alignment.dart","name":"Can align and position the child component","desc":["【alignment】 : alignment 【AlignmentGeometry】"]},{"file":"node4_decoration.dart","name":"Can decorate the child component","desc":["【decoration】 : decoration 【Decoration】","Can decorate: borders, rounded corners, colors, gradients, shadows, images, etc."]},{"file":"node5_transform.dart","name":"Container also has transformation capabilities","desc":["【transform】 : transformation matrix 【Matrix4】","Matrix transformation based on Matrix4, see linear algebra for details"]},{"file":"node6_constraints.dart","name":"Constraints of the Container","desc":["【constraints】 : constraints 【BoxConstraints】","Will constrain the size of the area, it will not be smaller than the specified minimum width and height, nor larger than the specified maximum width and height."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Container/Container_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Container/Container_zh-CN.json deleted file mode 100644 index e3bcb66ae..000000000 --- a/modules/widget_system/widgets/doc/widgets/Container/Container_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Container","path":"/src/widgets/container.dart","parents":["StatelessWidget","Widget"],"desc":"结合常见绘制、定位和大小调整小部件的便利小部件。","fields":[{"name":"child","type":"Widget?","desc":"容器包含的 [child]。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"在容器内对齐 [child]。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在 [decoration] 内部刻写的空白空间。[child](如果有)放置在此内边距内。"},{"name":"color","type":"Color?","desc":"在 [child] 后面绘制的颜色。"},{"name":"decoration","type":"Decoration?","desc":"在 [child] 后面绘制的装饰。"},{"name":"foregroundDecoration","type":"Decoration?","desc":"在 [child] 前面绘制的装饰。"},{"name":"constraints","type":"BoxConstraints?","desc":"应用于子项的额外约束。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕 [decoration] 和 [child] 的空白空间。"},{"name":"transform","type":"Matrix4?","desc":"在绘制容器之前应用的变换矩阵。"},{"name":"transformAlignment","type":"AlignmentGeometry?","desc":"如果指定了 [transform],相对于容器大小的原点对齐。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"当 [Container.decoration] 不为 null 时的裁剪行为。"}],"id":1,"localName":"容器组件","lever":5,"family":0,"linkIds":[74,85,80,78,70,123],"nodes":[{"file":"node1_base.dart","name":"可用于显示一个指定宽高的区域","desc":["【width】 : 宽 【int】","【height】: 高 【int】","【color】: 颜色 【Color】"]},{"file":"node2_child.dart","name":"可以在区域中放入一个子组件","desc":["【padding】 : 内边距 【EdgeInsetsGeometry】","【margin】: 外边距 【EdgeInsetsGeometry】","【child】: 子组件 【Widget】"]},{"file":"node3_alignment.dart","name":"可对子组件进行对齐定位","desc":["【alignment】 : 对齐定位 【AlignmentGeometry】"]},{"file":"node4_decoration.dart","name":"可对子组件进行装饰","desc":["【decoration】 : 装饰 【Decoration】","可装饰: 边线、圆弧、颜色、渐变色、阴影、图片等内容"]},{"file":"node5_transform.dart","name":"Container还具有变换性","desc":["【transform】 : 变换矩阵 【Matrix4】","基于Matrix4的矩阵变换,变换详情见线性代数"]},{"file":"node6_constraints.dart","name":"Container的约束性","desc":["【constraints】 : 约束 【BoxConstraints】","会约束该区域的尺寸,不会小于指定的最小宽高,也不会大于指定的最大宽高。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_en-US.json deleted file mode 100644 index 2b6d7cd28..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoActionSheet","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style action sheet.","fields":[{"name":"title","type":"Widget?","desc":"An optional title of the action sheet. When the [message] is non-null, the font of the [title] is bold."},{"name":"message","type":"Widget?","desc":"An optional descriptive message that provides more details about the reason for the alert."},{"name":"actions","type":"List?","desc":"The set of actions that are displayed for the user to select."},{"name":"messageScrollController","type":"ScrollController?","desc":"A scroll controller that can be used to control the scrolling of the [message] in the action sheet."},{"name":"actionScrollController","type":"ScrollController?","desc":"A scroll controller that can be used to control the scrolling of the [actions] in the action sheet."},{"name":"cancelButton","type":"Widget?","desc":"The optional cancel button that is grouped separately from the other actions."}],"id":131,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoActionSheet","desc":["【title】: First row component 【Widget】","【message】: Second row component 【Widget】","【cancelButton】: Component at the cancel button 【Widget】","【actions】: List of middle components 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_zh-CN.json deleted file mode 100644 index c7c339259..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheet/CupertinoActionSheet_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoActionSheet","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的操作表单。","fields":[{"name":"title","type":"Widget?","desc":"操作表单的可选标题。当 [message] 非空时,[title] 的字体为粗体。"},{"name":"message","type":"Widget?","desc":"提供有关警报原因的更多详细信息的可选描述性消息。"},{"name":"actions","type":"List?","desc":"为用户选择显示的操作集合。"},{"name":"messageScrollController","type":"ScrollController?","desc":"可用于控制操作表单中 [message] 滚动的滚动控制器。"},{"name":"actionScrollController","type":"ScrollController?","desc":"可用于控制操作表单中 [actions] 滚动的滚动控制器。"},{"name":"cancelButton","type":"Widget?","desc":"与其他操作分开分组的可选取消按钮。"}],"id":131,"localName":"iOS行为单","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoActionSheet基本使用","desc":["【title】 : 第一行组件 【Widget】","【message】 : 第二行组件 【Widget】","【cancelButton】 : 取消按钮处组件 【Widget】","【actions】 : 中间组件列表 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_en-US.json deleted file mode 100644 index de9a0ccb0..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoActionSheetAction","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":" The content of a typical action button in a [CupertinoActionSheet].","fields":[{"name":"onPressed","type":"VoidCallback","required":true,"desc":"The callback that is called when the button is selected."},{"name":"isDefaultAction","type":"bool","required":true,"desc":"Whether this action is the default choice in the action sheet."},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"Whether this action might change or delete data."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor that will be shown when hovering over the button."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":132,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoActionSheetAction","desc":["【child】: Child widget 【Widget】","【isDefaultAction】: Whether it is the default action 【bool】","【onPressed】: Click event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_zh-CN.json deleted file mode 100644 index 1f26e71cb..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoActionSheetAction/CupertinoActionSheetAction_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoActionSheetAction","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":"[CupertinoActionSheet] 中典型操作按钮的内容。","fields":[{"name":"onPressed","type":"VoidCallback","required":true,"desc":"选择按钮时调用的回调。"},{"name":"isDefaultAction","type":"bool","required":true,"desc":"此操作是否是操作表单中的默认选择。"},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"此操作是否可能更改或删除数据。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"悬停在按钮上时将显示的光标。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":132,"localName":"iOS行为单按键","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoActionSheetAction基本使用","desc":["【child】 : 子组件 【Widget】","【isDefaultAction】 : 是否默认选中 【bool】","【onPressed】 : 点击事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_en-US.json deleted file mode 100644 index 393d290c3..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoActivityIndicator","path":"/src/cupertino/activity_indicator.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style activity indicator that spins clockwise.","fields":[{"name":"color","type":"Color?","desc":"Color of the activity indicator."},{"name":"animating","type":"bool","required":true,"desc":"Whether the activity indicator is running its animation."},{"name":"radius","type":"double","required":true,"desc":"Radius of the spinner widget."},{"name":"progress","type":"double","required":true,"desc":"Determines the percentage of spinner ticks that will be shown. Typical usage would display all ticks, however, this allows for more fine-grained control such as during pull-to-refresh when the drag-down action shows one tick at a time as the user continues to drag down."}],"id":48,"lever":2,"family":1,"linkIds":[46,47],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoActivityIndicator","desc":["【animating】 : Whether the loading animation is active 【bool】","【radius】 : Radius 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_zh-CN.json deleted file mode 100644 index d6df91cc9..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoActivityIndicator/CupertinoActivityIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoActivityIndicator","path":"/src/cupertino/activity_indicator.dart","parents":["StatefulWidget","Widget"],"desc":"顺时针旋转的 iOS 风格活动指示器。","fields":[{"name":"color","type":"Color?","desc":"活动指示器的颜色。"},{"name":"animating","type":"bool","required":true,"desc":"活动指示器是否正在运行其动画。"},{"name":"radius","type":"double","required":true,"desc":"旋转器小部件的半径。"},{"name":"progress","type":"double","required":true,"desc":"确定将显示的旋转器刻度的百分比。典型用法会显示所有刻度,但是,这允许更细粒度的控制,例如在下拉刷新期间,当用户继续向下拖动时,拖拽动作一次显示一个刻度。"}],"id":48,"localName":"iOS指示器","lever":2,"family":1,"linkIds":[46,47],"nodes":[{"file":"node1_base.dart","name":"CupertinoActivityIndicator基本使用","desc":["【animating】 : 是否loading动画 【bool】","【radius】 : 半径 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_en-US.json deleted file mode 100644 index 25daf7ad1..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoAdaptiveTextSelectionToolbar","path":"/src/cupertino/adaptive_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" The default Cupertino context menu for text selection for the current platform with the given children.","fields":[{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"{@macro flutter.material.AdaptiveTextSelectionToolbar.anchors}"},{"name":"children","type":"List?","desc":"The children of the toolbar, typically buttons."},{"name":"buttonItems","type":"List?","desc":"The [ContextMenuButtonItem]s that will be turned into the correct button widgets for the current platform."}],"id":381,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_zh-CN.json deleted file mode 100644 index 21502c6a7..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoAdaptiveTextSelectionToolbar/CupertinoAdaptiveTextSelectionToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoAdaptiveTextSelectionToolbar","path":"/src/cupertino/adaptive_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"当前平台的默认 Cupertino 文本选择上下文菜单,包含给定的子项。","fields":[{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"{@macro flutter.material.AdaptiveTextSelectionToolbar.anchors}"},{"name":"children","type":"List?","desc":"工具栏的子项,通常是按钮。"},{"name":"buttonItems","type":"List?","desc":"将转换为当前平台正确按钮小部件的 [ContextMenuButtonItem]。"}],"id":381,"localName":"CupertinoAdaptiveTextSelectionToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_en-US.json deleted file mode 100644 index 00ef27b39..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoAlertDialog","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style alert dialog.","fields":[{"name":"title","type":"Widget?","desc":"The (optional) title of the dialog is displayed in a large font at the top of the dialog."},{"name":"content","type":"Widget?","desc":"The (optional) content of the dialog is displayed in the center of the dialog in a lighter font."},{"name":"actions","type":"List","required":true,"desc":"The (optional) set of actions that are displayed at the bottom of the dialog."},{"name":"scrollController","type":"ScrollController?","desc":"A scroll controller that can be used to control the scrolling of the [content] in the dialog."},{"name":"actionScrollController","type":"ScrollController?","desc":"A scroll controller that can be used to control the scrolling of the actions in the dialog."},{"name":"insetAnimationDuration","type":"Duration","required":true,"desc":"{@macro flutter.material.dialog.insetAnimationDuration}"},{"name":"insetAnimationCurve","type":"Curve","required":true,"desc":"{@macro flutter.material.dialog.insetAnimationCurve}"}],"id":129,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoActionSheetAction","desc":["【child】 : Child component 【Widget】","【isDefaultAction】 : Whether it is selected by default 【bool】","【onPressed】 : Click event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_zh-CN.json deleted file mode 100644 index d1cdd5575..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoAlertDialog/CupertinoAlertDialog_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoAlertDialog","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的警告对话框。","fields":[{"name":"title","type":"Widget?","desc":"对话框的(可选)标题以大字体显示在对话框顶部。"},{"name":"content","type":"Widget?","desc":"对话框的(可选)内容以较浅的字体显示在对话框中心。"},{"name":"actions","type":"List","required":true,"desc":"显示在对话框底部的(可选)操作集合。"},{"name":"scrollController","type":"ScrollController?","desc":"可用于控制对话框中 [content] 滚动的滚动控制器。"},{"name":"actionScrollController","type":"ScrollController?","desc":"可用于控制对话框中操作滚动的滚动控制器。"},{"name":"insetAnimationDuration","type":"Duration","required":true,"desc":"{@macro flutter.material.dialog.insetAnimationDuration}"},{"name":"insetAnimationCurve","type":"Curve","required":true,"desc":"{@macro flutter.material.dialog.insetAnimationCurve}"}],"id":129,"localName":"iOS对话框","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoActionSheetAction基本使用","desc":["【child】 : 子组件 【Widget】","【isDefaultAction】 : 是否默认选中 【bool】","【onPressed】 : 点击事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_en-US.json deleted file mode 100644 index 93d930ae7..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoApp","path":"/src/cupertino/app.dart","parents":["StatefulWidget","Widget"],"desc":" An application that uses Cupertino design.","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@macro flutter.widgets.widgetsApp.navigatorKey}"},{"name":"home","type":"Widget?","desc":"{@macro flutter.widgets.widgetsApp.home}"},{"name":"theme","type":"CupertinoThemeData?","desc":"The top-level [CupertinoTheme] styling."},{"name":"routes","type":"Map?","desc":"The application's top-level routing table."},{"name":"initialRoute","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.initialRoute}"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateRoute}"},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateInitialRoutes}"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onUnknownRoute}"},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@macro flutter.widgets.widgetsApp.onNavigationNotification}"},{"name":"navigatorObservers","type":"List?","desc":"{@macro flutter.widgets.widgetsApp.navigatorObservers}"},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationProvider}"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationParser}"},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@macro flutter.widgets.widgetsApp.routerDelegate}"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@macro flutter.widgets.widgetsApp.backButtonDispatcher}"},{"name":"routerConfig","type":"RouterConfig?","desc":"{@macro flutter.widgets.widgetsApp.routerConfig}"},{"name":"builder","type":"TransitionBuilder?","desc":"{@macro flutter.widgets.widgetsApp.builder}"},{"name":"title","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.title}"},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateTitle}"},{"name":"color","type":"Color?","desc":"{@macro flutter.widgets.widgetsApp.color}"},{"name":"locale","type":"Locale?","desc":"{@macro flutter.widgets.widgetsApp.locale}"},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@macro flutter.widgets.widgetsApp.localizationsDelegates}"},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.LocaleResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@macro flutter.widgets.widgetsApp.supportedLocales}"},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"Turns on a performance overlay."},{"name":"checkerboardRasterCacheImages","type":"bool","required":true,"desc":"Turns on checkerboarding of raster cache images."},{"name":"checkerboardOffscreenLayers","type":"bool","required":true,"desc":"Turns on checkerboarding of layers rendered to offscreen bitmaps."},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"Turns on an overlay that shows the accessibility information reported by the framework."},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.debugShowCheckedModeBanner}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.widgetsApp.shortcuts} {@tool snippet} This example shows how to add a single shortcut for [LogicalKeyboardKey.select] to the default shortcuts without needing to add your own [Shortcuts] widget."},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.widgetsApp.actions} {@tool snippet} This example shows how to add a single action handling an [ActivateAction] to the default actions without needing to add your own [Actions] widget."},{"name":"restorationScopeId","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.restorationScopeId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.material.materialApp.scrollBehavior}"},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.useInheritedMediaQuery}"}],"id":156,"lever":4,"family":1,"linkIds":[157,158],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoApp","desc":["【theme】 : Theme 【ThemeData】","【title】 : Taskbar Title 【String】","【onGenerateRoute】 : Route Generator 【RouteFactory】","【home】 : Home Page 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_zh-CN.json deleted file mode 100644 index 0f5ddaa64..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoApp/CupertinoApp_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoApp","path":"/src/cupertino/app.dart","parents":["StatefulWidget","Widget"],"desc":"使用 Cupertino 设计的应用程序。","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@macro flutter.widgets.widgetsApp.navigatorKey}"},{"name":"home","type":"Widget?","desc":"{@macro flutter.widgets.widgetsApp.home}"},{"name":"theme","type":"CupertinoThemeData?","desc":"顶级 [CupertinoTheme] 样式。"},{"name":"routes","type":"Map?","desc":"应用程序的顶级路由表。"},{"name":"initialRoute","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.initialRoute}"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateRoute}"},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateInitialRoutes}"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onUnknownRoute}"},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@macro flutter.widgets.widgetsApp.onNavigationNotification}"},{"name":"navigatorObservers","type":"List?","desc":"{@macro flutter.widgets.widgetsApp.navigatorObservers}"},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationProvider}"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationParser}"},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@macro flutter.widgets.widgetsApp.routerDelegate}"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@macro flutter.widgets.widgetsApp.backButtonDispatcher}"},{"name":"routerConfig","type":"RouterConfig?","desc":"{@macro flutter.widgets.widgetsApp.routerConfig}"},{"name":"builder","type":"TransitionBuilder?","desc":"{@macro flutter.widgets.widgetsApp.builder}"},{"name":"title","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.title}"},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateTitle}"},{"name":"color","type":"Color?","desc":"{@macro flutter.widgets.widgetsApp.color}"},{"name":"locale","type":"Locale?","desc":"{@macro flutter.widgets.widgetsApp.locale}"},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@macro flutter.widgets.widgetsApp.localizationsDelegates}"},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.LocaleResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@macro flutter.widgets.widgetsApp.supportedLocales}"},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"开启性能叠加层。"},{"name":"checkerboardRasterCacheImages","type":"bool","required":true,"desc":"开启光栅缓存图像的棋盘格显示。"},{"name":"checkerboardOffscreenLayers","type":"bool","required":true,"desc":"开启渲染到离屏位图的图层的棋盘格显示。"},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"开启显示框架报告的辅助功能信息的叠加层。"},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.debugShowCheckedModeBanner}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.widgetsApp.shortcuts} {@tool snippet} 此示例显示如何在不需要添加自己的 [Shortcuts] 小部件的情况下,将 [LogicalKeyboardKey.select] 的单个快捷键添加到默认快捷键中。"},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.widgetsApp.actions} {@tool snippet} 此示例显示如何在不需要添加自己的 [Actions] 小部件的情况下,将处理 [ActivateAction] 的单个操作添加到默认操作中。"},{"name":"restorationScopeId","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.restorationScopeId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.material.materialApp.scrollBehavior}"},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.useInheritedMediaQuery}"}],"id":156,"localName":"iOS应用","lever":4,"family":1,"linkIds":[157,158],"nodes":[{"file":"node1_base.dart","name":"CupertinoApp基本用法","desc":["【theme】 : 主题 【ThemeData】","【title】 : 任务栏标题 【String】","【onGenerateRoute】 : 路由生成器 【RouteFactory】","【home】 : 主页 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_en-US.json deleted file mode 100644 index 3fbaea233..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoButton","path":"/src/cupertino/button.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style button.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space to surround the child inside the bounds of the button."},{"name":"color","type":"Color?","desc":"The color of the button's background."},{"name":"disabledColor","type":"Color","required":true,"desc":"The color of the button's background when the button is disabled."},{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when the button is tapped or otherwise activated."},{"name":"onLongPress","type":"VoidCallback?","desc":"If [onPressed] and [onLongPress] callbacks are null, then the button will be disabled."},{"name":"minSize","type":"double?","desc":"Minimum size of the button."},{"name":"minimumSize","type":"Size?","desc":"The minimum size of the button."},{"name":"pressedOpacity","type":"double?","desc":"The opacity that the button will fade to when it is pressed. The button will have an opacity of 1.0 when it is not pressed."},{"name":"borderRadius","type":"BorderRadius?","desc":"The radius of the button's corners when it has a background color."},{"name":"sizeStyle","type":"CupertinoButtonSize","required":true,"desc":"The size of the button."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"The alignment of the button's [child]."},{"name":"focusColor","type":"Color?","desc":"The color to use for the focus highlight for keyboard interactions."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."}],"id":24,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoButton Click Event","desc":["【color】: Color 【Color】","【pressedOpacity】: Opacity when pressed 【double】","【child】: Child widget 【Widget】","【padding】: Padding 【EdgeInsetsGeometry】","【borderRadius】: Border radius 【BorderRadius】","【onPressed】: Click event 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_zh-CN.json deleted file mode 100644 index 14d249344..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoButton/CupertinoButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoButton","path":"/src/cupertino/button.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的按钮。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在按钮边界内围绕子项的空间量。"},{"name":"color","type":"Color?","desc":"按钮背景的颜色。"},{"name":"disabledColor","type":"Color","required":true,"desc":"按钮禁用时按钮背景的颜色。"},{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用的回调。"},{"name":"onLongPress","type":"VoidCallback?","desc":"如果 [onPressed] 和 [onLongPress] 回调为 null,则按钮将被禁用。"},{"name":"minSize","type":"double?","desc":"按钮的最小大小。"},{"name":"minimumSize","type":"Size?","desc":"按钮的最小大小。"},{"name":"pressedOpacity","type":"double?","desc":"按钮被按下时将淡化到的不透明度。按钮未被按下时不透明度为 1.0。"},{"name":"borderRadius","type":"BorderRadius?","desc":"按钮有背景颜色时按钮角的半径。"},{"name":"sizeStyle","type":"CupertinoButtonSize","required":true,"desc":"按钮的大小。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"按钮 [child] 的对齐方式。"},{"name":"focusColor","type":"Color?","desc":"用于键盘交互的焦点高亮的颜色。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点改变时调用的处理程序。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"}],"id":24,"localName":"iOS按钮","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoButton点击事件","desc":["【color】: 颜色 【Color】","【pressedOpacity】: 按下时透明度 【double】","【child】: 子组件 【Widget】","【padding】: 内边距 【EdgeInsetsGeometry】","【borderRadius】: 圆角半径 【BorderRadius】","【onPressed】: 点击事件 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_en-US.json deleted file mode 100644 index e986b04cd..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoCheckbox","path":"/src/cupertino/checkbox.dart","parents":["StatefulWidget","Widget"],"desc":" A macOS style checkbox.","fields":[{"name":"value","type":"bool?","desc":"Whether this checkbox is checked."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the value of the checkbox should change."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"activeColor","type":"Color?","desc":"The color to use when this checkbox is checked."},{"name":"fillColor","type":"WidgetStateProperty?","desc":"{@template flutter.cupertino.CupertinoCheckbox.fillColor} The color used to fill this checkbox."},{"name":"inactiveColor","type":"Color?","desc":"The color used if the checkbox is inactive."},{"name":"checkColor","type":"Color?","desc":"The color to use for the check icon when this checkbox is checked."},{"name":"tristate","type":"bool","required":true,"desc":"If true, the checkbox's [value] can be true, false, or null."},{"name":"focusColor","type":"Color?","desc":"The color for the checkbox's border shadow when it has the input focus."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"side","type":"BorderSide?","desc":"The color and width of the checkbox's border."},{"name":"shape","type":"OutlinedBorder?","desc":"The shape of the checkbox."},{"name":"semanticLabel","type":"String?","desc":"The semantic label for the checkbox that will be announced by screen readers."}],"id":238,"lever":4,"family":1,"linkIds":[39,17],"nodes":[{"file":"node1.dart","name":"CupertinoCheckbox Usage","desc":["【value】: Whether it is selected 【bool?】","【onChanged】: Change callback 【ValueChanged?】","【checkColor】: Checkmark color when selected 【Color?】","【activeColor】: Background color when selected 【Color?】","【activeColor】: Background color when selected 【Color?】","【inactiveColor】: Border color when inactive/background color when disabled 【Color?】","When onChanged is null, it means it is disabled."]},{"file":"node2.dart","name":"CupertinoCheckbox Three States","desc":["【tristate】: Whether to enable three states 【bool】","In three states, the value is null for -"]},{"file":"node3.dart","name":"CupertinoCheckbox Border and Shape","desc":["【shape】: Shape 【OutlinedBorder?】","【side】: Border 【BorderSide?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_zh-CN.json deleted file mode 100644 index 6a3938b56..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoCheckbox/CupertinoCheckbox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoCheckbox","path":"/src/cupertino/checkbox.dart","parents":["StatefulWidget","Widget"],"desc":"macOS 风格的复选框。","fields":[{"name":"value","type":"bool?","desc":"此复选框是否被选中。"},{"name":"onChanged","type":"ValueChanged?","desc":"复选框的值应该改变时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"activeColor","type":"Color?","desc":"此复选框被选中时使用的颜色。"},{"name":"fillColor","type":"WidgetStateProperty?","desc":"{@template flutter.cupertino.CupertinoCheckbox.fillColor} 用于填充此复选框的颜色。"},{"name":"inactiveColor","type":"Color?","desc":"复选框处于非活动状态时使用的颜色。"},{"name":"checkColor","type":"Color?","desc":"此复选框被选中时用于勾选图标的颜色。"},{"name":"tristate","type":"bool","required":true,"desc":"如果为 true,复选框的 [value] 可以是 true、false 或 null。"},{"name":"focusColor","type":"Color?","desc":"复选框具有输入焦点时其边框阴影的颜色。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"side","type":"BorderSide?","desc":"复选框边框的颜色和宽度。"},{"name":"shape","type":"OutlinedBorder?","desc":"复选框的形状。"},{"name":"semanticLabel","type":"String?","desc":"屏幕阅读器将宣布的复选框语义标签。"}],"id":238,"localName":"复选框·macOS风格","lever":4,"family":1,"linkIds":[39,17],"nodes":[{"file":"node1.dart","name":"CupertinoCheckbox 使用","desc":["【value】 : 是否选中 【bool?】","【onChanged】 : 变化回调 【ValueChanged?】","【checkColor】 : 选中时√颜色 【Color?】","【activeColor】 : 选中背景颜色 【Color?】","【activeColor】 : 选中背景颜色 【Color?】","【inactiveColor】 : 非激活是边线色/不可用背景色 【Color?】","onChanged 为 null 时,表示不可用。"]},{"file":"node2.dart","name":"CupertinoCheckbox 三态","desc":["【tristate】 : 是否启用三态 【bool】","三态时,值为 null 为 - "]},{"file":"node3.dart","name":"CupertinoCheckbox 边线与形状","desc":["【shape】 : 形状 【OutlinedBorder?】","【side】 : 边线 【BorderSide?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_en-US.json deleted file mode 100644 index b839181d5..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoContextMenu","path":"/src/cupertino/context_menu.dart","parents":["StatefulWidget","Widget"],"desc":" A full-screen modal route that opens when the [child] is long-pressed.","fields":[{"name":"builder","type":"CupertinoContextMenuBuilder","required":true,"desc":"A function that returns a widget to be used alternatively from [child]."},{"name":"child","type":"Widget?","desc":"The widget that can be \"opened\" with the [CupertinoContextMenu]."},{"name":"actions","type":"List","required":true,"desc":"The actions that are shown in the menu."},{"name":"enableHapticFeedback","type":"bool","required":true,"desc":"If true, clicking on the [CupertinoContextMenuAction]s will produce haptic feedback."}],"id":143,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoContextMenu","desc":["【child】 : Child Component 【Widget】","【actions】 : Action Components Set 【List】","【previewBuilder】 : Animation Builder 【ContextMenuPreviewBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_zh-CN.json deleted file mode 100644 index 78d3d34a6..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenu/CupertinoContextMenu_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoContextMenu","path":"/src/cupertino/context_menu.dart","parents":["StatefulWidget","Widget"],"desc":"长按 [child] 时打开的全屏模态路由。","fields":[{"name":"builder","type":"CupertinoContextMenuBuilder","required":true,"desc":"返回用作 [child] 替代的小部件的函数。"},{"name":"child","type":"Widget?","desc":"可以用 [CupertinoContextMenu] \\"},{"name":"actions","type":"List","required":true,"desc":"在菜单中显示的操作。"},{"name":"enableHapticFeedback","type":"bool","required":true,"desc":"如果为 true,点击 [CupertinoContextMenuAction] 将产生触觉反馈。"}],"id":143,"localName":"ios弹出菜单","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoContextMenu基本使用","desc":["【child】 : 子组件 【Widget】","【actions】 : 行为组件集 【List】","【previewBuilder】 : 动画构造器 【ContextMenuPreviewBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_en-US.json deleted file mode 100644 index 6f781e3a1..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoContextMenuAction","path":"/src/cupertino/context_menu_action.dart","parents":["StatefulWidget","Widget"],"desc":" A button in a _ContextMenuSheet.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget that will be placed inside the action."},{"name":"isDefaultAction","type":"bool","required":true,"desc":"Indicates whether this action should receive the style of an emphasized, default action."},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"Indicates whether this action should receive the style of a destructive action."},{"name":"onPressed","type":"VoidCallback?","desc":"Called when the action is pressed."},{"name":"trailingIcon","type":"IconData?","desc":"An optional icon to display to the right of the child."}],"id":144,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoContextMenuAction","desc":["【child】 : Child Component 【Widget】","【isDefaultAction】 : Whether it is the default action 【bool】","【trailingIcon】 : Trailing Icon 【bool】","【onPressed】 : Click Event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_zh-CN.json deleted file mode 100644 index b3dde5457..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoContextMenuAction/CupertinoContextMenuAction_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoContextMenuAction","path":"/src/cupertino/context_menu_action.dart","parents":["StatefulWidget","Widget"],"desc":"_ContextMenuSheet 中的按钮。","fields":[{"name":"child","type":"Widget","required":true,"desc":"将放置在操作内部的小部件。"},{"name":"isDefaultAction","type":"bool","required":true,"desc":"指示此操作是否应接收强调的默认操作样式。"},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"指示此操作是否应接收破坏性操作的样式。"},{"name":"onPressed","type":"VoidCallback?","desc":"按下操作时调用。"},{"name":"trailingIcon","type":"IconData?","desc":"在子项右侧显示的可选图标。"}],"id":144,"localName":"ios弹出菜单按钮","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoContextMenuAction基本使用","desc":["【child】 : 子组件 【Widget】","【isDefaultAction】 : 是否默认选中 【bool】","【trailingIcon】 : 尾部 【bool】","【onPressed】 : 点击事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_en-US.json deleted file mode 100644 index 4133ae5c8..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoDatePicker","path":"/src/cupertino/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A date picker widget in iOS style.","fields":[{"name":"mode","type":"CupertinoDatePickerMode","required":true,"desc":"The mode of the date picker as one of [CupertinoDatePickerMode]. Defaults to [CupertinoDatePickerMode.dateAndTime]. Value cannot change after initial build."},{"name":"initialDateTime","type":"DateTime","required":true,"desc":"The initial date and/or time of the picker. Defaults to the present date and time. The present must conform to the intervals set in [minimumDate], [maximumDate], [minimumYear], and [maximumYear]."},{"name":"minimumDate","type":"DateTime?","desc":"The minimum selectable date that the picker can settle on."},{"name":"maximumDate","type":"DateTime?","desc":"The maximum selectable date that the picker can settle on."},{"name":"minimumYear","type":"int","required":true,"desc":"Minimum year that the picker can be scrolled to in [CupertinoDatePickerMode.date] mode. Defaults to 1."},{"name":"maximumYear","type":"int?","desc":"Maximum year that the picker can be scrolled to in [CupertinoDatePickerMode.date] mode. Null if there's no limit."},{"name":"minuteInterval","type":"int","required":true,"desc":"The granularity of the minutes spinner, if it is shown in the current mode. Must be an integer factor of 60."},{"name":"use24hFormat","type":"bool","required":true,"desc":"Whether to use 24 hour format. Defaults to false."},{"name":"dateOrder","type":"DatePickerDateOrder?","desc":"Determines the order of the columns inside [CupertinoDatePicker] in [CupertinoDatePickerMode.date] and [CupertinoDatePickerMode.monthYear] mode. When using monthYear mode, both [DatePickerDateOrder.dmy] and [DatePickerDateOrder.mdy] will result in the month|year order. Defaults to the locale's default date format/order."},{"name":"onDateTimeChanged","type":"ValueChanged","required":true,"desc":"Callback called when the selected date and/or time changes. If the new selected [DateTime] is not valid, or is not in the [minimumDate] through [maximumDate] range, this callback will not be called."},{"name":"backgroundColor","type":"Color?","desc":"Background color of date picker."},{"name":"showDayOfWeek","type":"bool","required":true,"desc":"Whether to show the day of week alongside the day in [CupertinoDatePickerMode.date] mode."},{"name":"showTimeSeparator","type":"bool","required":true,"desc":"Whether to show the time separator between hour and minute in the time [CupertinoDatePickerMode.time] and datetime [CupertinoDatePickerMode.dateAndTime] picker modes."},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.cupertino.picker.itemExtent}"},{"name":"selectionOverlayBuilder","type":"SelectionOverlayBuilder?","desc":"A function that returns a widget that is overlaid on the picker to highlight the currently selected entry."}],"id":137,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoDatePicker","desc":["【initialDateTime】 : Initial date 【DateTime】","【minimumYear】 : Minimum year 【int】","【maximumYear】 : Maximum year 【int】","【onDateTimeChanged】 : Click callback 【Function(DateTime)】","【minuteInterval】 : Minute interval 【int】","【use24hFormat】 : Whether it is 24-hour format 【bool】","【backgroundColor】 : Background color 【Color】","【mode】 : Mode*3 【CupertinoDatePickerMode】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_zh-CN.json deleted file mode 100644 index c38f8819e..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoDatePicker/CupertinoDatePicker_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoDatePicker","path":"/src/cupertino/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的日期选择器小部件。","fields":[{"name":"mode","type":"CupertinoDatePickerMode","required":true,"desc":"日期选择器的模式,为 [CupertinoDatePickerMode] 之一。默认为 [CupertinoDatePickerMode.dateAndTime]。值在初始构建后无法更改。"},{"name":"initialDateTime","type":"DateTime","required":true,"desc":"选择器的初始日期和/或时间。默认为当前日期和时间。当前值必须符合 [minimumDate]、[maximumDate]、[minimumYear] 和 [maximumYear] 中设置的间隔。"},{"name":"minimumDate","type":"DateTime?","desc":"选择器可以确定的最小可选日期。"},{"name":"maximumDate","type":"DateTime?","desc":"选择器可以确定的最大可选日期。"},{"name":"minimumYear","type":"int","required":true,"desc":"在 [CupertinoDatePickerMode.date] 模式下选择器可以滚动到的最小年份。默认为 1。"},{"name":"maximumYear","type":"int?","desc":"在 [CupertinoDatePickerMode.date] 模式下选择器可以滚动到的最大年份。如果没有限制则为 null。"},{"name":"minuteInterval","type":"int","required":true,"desc":"如果在当前模式下显示分钟旋转器的粒度。必须是 60 的整数因子。"},{"name":"use24hFormat","type":"bool","required":true,"desc":"是否使用 24 小时格式。默认为 false。"},{"name":"dateOrder","type":"DatePickerDateOrder?","desc":"确定 [CupertinoDatePicker] 在 [CupertinoDatePickerMode.date] 和 [CupertinoDatePickerMode.monthYear] 模式下内部列的顺序。使用 monthYear 模式时,[DatePickerDateOrder.dmy] 和 [DatePickerDateOrder.mdy] 都将导致月|年顺序。默认为区域设置的默认日期格式/顺序。"},{"name":"onDateTimeChanged","type":"ValueChanged","required":true,"desc":"选定日期和/或时间更改时调用的回调。如果新选择的 [DateTime] 无效,或不在 [minimumDate] 到 [maximumDate] 范围内,则不会调用此回调。"},{"name":"backgroundColor","type":"Color?","desc":"日期选择器的背景颜色。"},{"name":"showDayOfWeek","type":"bool","required":true,"desc":"在 [CupertinoDatePickerMode.date] 模式下是否在日期旁边显示星期几。"},{"name":"showTimeSeparator","type":"bool","required":true,"desc":"在时间 [CupertinoDatePickerMode.time] 和日期时间 [CupertinoDatePickerMode.dateAndTime] 选择器模式下是否显示小时和分钟之间的时间分隔符。"},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.cupertino.picker.itemExtent}"},{"name":"selectionOverlayBuilder","type":"SelectionOverlayBuilder?","desc":"返回覆盖在选择器上以突出显示当前选定条目的小部件的函数。"}],"id":137,"localName":"iOS日期选择器","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoDatePicker基本使用","desc":["【initialDateTime】 : 初始日期 【DateTime】","【minimumYear】 : 最小年份 【int】","【maximumYear】 : 最大年份 【int】","【onDateTimeChanged】 : 点击回调 【Function(DateTime)】","【minuteInterval】 : 分钟间隔 【int】","【use24hFormat】 : 是否是24小时制 【bool】","【backgroundColor】 : 背景色 【Color】","【mode】 : 模式*3 【CupertinoDatePickerMode】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_en-US.json deleted file mode 100644 index 883521bb2..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoDesktopTextSelectionToolbar","path":"/src/cupertino/desktop_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" A macOS-style text selection toolbar.","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@macro flutter.material.DesktopTextSelectionToolbar.anchor}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"}],"id":382,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_zh-CN.json deleted file mode 100644 index e062c56a3..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbar/CupertinoDesktopTextSelectionToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoDesktopTextSelectionToolbar","path":"/src/cupertino/desktop_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"macOS 风格的文本选择工具栏。","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@macro flutter.material.DesktopTextSelectionToolbar.anchor}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"}],"id":382,"localName":"CupertinoDesktopTextSelectionToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_en-US.json deleted file mode 100644 index 76a4ef9b0..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoDesktopTextSelectionToolbarButton","path":"/src/cupertino/desktop_text_selection_toolbar_button.dart","parents":["StatefulWidget","Widget"],"desc":" A button in the style of the Mac context menu buttons.","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed}"},{"name":"child","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.child}"},{"name":"buttonItem","type":"ContextMenuButtonItem?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed}"},{"name":"text","type":"String?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.text}"}],"id":383,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_zh-CN.json deleted file mode 100644 index cddf6e76a..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoDesktopTextSelectionToolbarButton/CupertinoDesktopTextSelectionToolbarButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoDesktopTextSelectionToolbarButton","path":"/src/cupertino/desktop_text_selection_toolbar_button.dart","parents":["StatefulWidget","Widget"],"desc":"Mac 上下文菜单按钮样式的按钮。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed}"},{"name":"child","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.child}"},{"name":"buttonItem","type":"ContextMenuButtonItem?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed}"},{"name":"text","type":"String?","desc":"{@macro flutter.cupertino.CupertinoTextSelectionToolbarButton.text}"}],"id":383,"localName":"CupertinoDesktopTextSelectionToolbarButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_en-US.json deleted file mode 100644 index 58718fb9b..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoDialogAction","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":" A button typically used in a [CupertinoAlertDialog].","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when the button is tapped or otherwise activated."},{"name":"isDefaultAction","type":"bool","required":true,"desc":"Set to true if button is the default choice in the dialog."},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"Whether this action destroys an object."},{"name":"textStyle","type":"TextStyle?","desc":"[TextStyle] to apply to any text that appears in this button."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":352,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoDialogAction","desc":["【isDefaultAction】: Whether it is a default action 【bool】","【isDestructiveAction】: Whether it is a destructive action 【bool】","【textStyle】: Text style 【TextStyle】","【onPressed】: Click event 【VoidCallback】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_zh-CN.json deleted file mode 100644 index 9df748f86..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoDialogAction/CupertinoDialogAction_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoDialogAction","path":"/src/cupertino/dialog.dart","parents":["StatefulWidget","Widget"],"desc":"通常在 [CupertinoAlertDialog] 中使用的按钮。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用的回调。"},{"name":"isDefaultAction","type":"bool","required":true,"desc":"如果按钮是对话框中的默认选择,则设置为 true。"},{"name":"isDestructiveAction","type":"bool","required":true,"desc":"此操作是否销毁对象。"},{"name":"textStyle","type":"TextStyle?","desc":"应用于此按钮中出现的任何文本的 [TextStyle]。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":352,"localName":"交互视图","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoDialogAction基本使用","desc":["【isDefaultAction】 : 是否是默认性操作 【bool】","【isDestructiveAction】 : 是否是毁灭性操作 【bool】","【textStyle】: 文字样式 【TextStyle】","【onPressed】: 点击事件 【VoidCallback】","【child】: 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_en-US.json deleted file mode 100644 index 6b1359751..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoFormRow","path":"/src/cupertino/form_row.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-style form row.","fields":[{"name":"prefix","type":"Widget?","desc":"A widget that is displayed at the start of the row."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Content padding for the row."},{"name":"helper","type":"Widget?","desc":"A widget that is displayed underneath the [prefix] and [child] widgets."},{"name":"error","type":"Widget?","desc":"A widget that is displayed underneath the [prefix] and [child] widgets."},{"name":"child","type":"Widget","required":true,"desc":"Child widget."}],"id":384,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_zh-CN.json deleted file mode 100644 index 98df5615b..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoFormRow/CupertinoFormRow_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoFormRow","path":"/src/cupertino/form_row.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 风格的表单行。","fields":[{"name":"prefix","type":"Widget?","desc":"显示在行开始处的小部件。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"行的内容内边距。"},{"name":"helper","type":"Widget?","desc":"显示在 [prefix] 和 [child] 小部件下方的小部件。"},{"name":"error","type":"Widget?","desc":"显示在 [prefix] 和 [child] 小部件下方的小部件。"},{"name":"child","type":"Widget","required":true,"desc":"子小部件。"}],"id":384,"localName":"CupertinoFormRow","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_en-US.json deleted file mode 100644 index efdcb6685..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoFormSection","path":"/src/cupertino/form_section.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-style form section.","fields":[{"name":"header","type":"Widget?","desc":"Sets the form section header. The section header lies above the [children] rows."},{"name":"footer","type":"Widget?","desc":"Sets the form section footer. The section footer lies below the [children] rows."},{"name":"margin","type":"EdgeInsetsGeometry","required":true,"desc":"Margin around the content area of the section encapsulating [children]."},{"name":"children","type":"List","required":true,"desc":"The list of rows in the section."},{"name":"decoration","type":"BoxDecoration?","desc":"Sets the decoration around [children]."},{"name":"backgroundColor","type":"Color","required":true,"desc":"Sets the background color behind the section."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":385,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_zh-CN.json deleted file mode 100644 index ee095c6ae..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoFormSection/CupertinoFormSection_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoFormSection","path":"/src/cupertino/form_section.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 风格的表单部分。","fields":[{"name":"header","type":"Widget?","desc":"设置表单部分标题。部分标题位于 [children] 行上方。"},{"name":"footer","type":"Widget?","desc":"设置表单部分页脚。部分页脚位于 [children] 行下方。"},{"name":"margin","type":"EdgeInsetsGeometry","required":true,"desc":"围绕包含 [children] 的部分内容区域的边距。"},{"name":"children","type":"List","required":true,"desc":"部分中的行列表。"},{"name":"decoration","type":"BoxDecoration?","desc":"设置 [children] 周围的装饰。"},{"name":"backgroundColor","type":"Color","required":true,"desc":"设置部分后面的背景颜色。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":385,"localName":"CupertinoFormSection","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_en-US.json deleted file mode 100644 index 20ee64fd9..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoFullscreenDialogTransition","path":"/src/cupertino/route.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style transition used for summoning fullscreen dialogs.","fields":[{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"* `primaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when this screen is being pushed."},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"* `secondaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when another screen is being pushed on top of this one."},{"name":"linearTransition","type":"bool","required":true,"desc":"* `linearTransition` is whether to perform the transitions linearly. Used to precisely track back gesture drags."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":219,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Component Introduction","desc":["【child】 : Child component 【Widget】","【linearTransition】 : Whether to use linear transition 【bool】","【primaryRouteAnimation】 : Initial route animation 【Animation】","【secondaryRouteAnimation】 : Secondary route animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_zh-CN.json deleted file mode 100644 index 409a5465c..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoFullscreenDialogTransition/CupertinoFullscreenDialogTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoFullscreenDialogTransition","path":"/src/cupertino/route.dart","parents":["StatefulWidget","Widget"],"desc":"用于召唤全屏对话框的 iOS 风格过渡。","fields":[{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"* `primaryRouteAnimation` 是推送此屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"* `secondaryRouteAnimation` 是在此屏幕之上推送另一个屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"linearTransition","type":"bool","required":true,"desc":"* `linearTransition` 是否线性执行过渡。用于精确跟踪返回手势拖动。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":219,"localName":"全页面过渡变换","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"组件介绍","desc":["【child】 : 子组件 【Widget】","【linearTransition】 : 是否线性转换 【bool】","【primaryRouteAnimation】 : 初始路由动画 【Animation】","【secondaryRouteAnimation】 : 第二路由动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_en-US.json deleted file mode 100644 index d88523302..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoListSection","path":"/src/cupertino/list_section.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-style list section.","fields":[{"name":"type","type":"CupertinoListSectionType","required":true,"desc":"The type of list section, either base or inset grouped."},{"name":"header","type":"Widget?","desc":"Sets the form section header. The section header lies above the [children] rows. Usually a [Text] widget."},{"name":"footer","type":"Widget?","desc":"Sets the form section footer. The section footer lies below the [children] rows. Usually a [Text] widget."},{"name":"margin","type":"EdgeInsetsGeometry","required":true,"desc":"Margin around the content area of the section encapsulating [children]."},{"name":"children","type":"List?","desc":"The list of rows in the section. Usually a list of [CupertinoListTile]s."},{"name":"decoration","type":"BoxDecoration?","desc":"Sets the decoration around [children]."},{"name":"backgroundColor","type":"Color","required":true,"desc":"Sets the background color behind the section."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"dividerMargin","type":"double","required":true,"desc":"The starting offset of a margin between two list tiles."},{"name":"additionalDividerMargin","type":"double","required":true,"desc":"Additional starting inset of the divider used between rows. This is used when adding a leading icon to children and a divider should start at the text inset instead of the icon."},{"name":"topMargin","type":"double?","desc":"Margin above the list section. Only used in edge-to-edge variant and it matches iOS style by default."},{"name":"separatorColor","type":"Color?","desc":"Sets the color for the dividers between rows, and borders on top and bottom of the rows."}],"id":386,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_zh-CN.json deleted file mode 100644 index c524e0f57..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoListSection/CupertinoListSection_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoListSection","path":"/src/cupertino/list_section.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 风格的列表部分。","fields":[{"name":"type","type":"CupertinoListSectionType","required":true,"desc":"列表部分的类型,基础或插入分组。"},{"name":"header","type":"Widget?","desc":"设置表单部分标题。部分标题位于 [children] 行上方。通常是 [Text] 小部件。"},{"name":"footer","type":"Widget?","desc":"设置表单部分页脚。部分页脚位于 [children] 行下方。通常是 [Text] 小部件。"},{"name":"margin","type":"EdgeInsetsGeometry","required":true,"desc":"围绕包含 [children] 的部分内容区域的边距。"},{"name":"children","type":"List?","desc":"部分中的行列表。通常是 [CupertinoListTile] 的列表。"},{"name":"decoration","type":"BoxDecoration?","desc":"设置 [children] 周围的装饰。"},{"name":"backgroundColor","type":"Color","required":true,"desc":"设置部分后面的背景颜色。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"dividerMargin","type":"double","required":true,"desc":"两个列表项之间边距的起始偏移量。"},{"name":"additionalDividerMargin","type":"double","required":true,"desc":"行之间使用的分隔符的附加起始插入。当向子项添加前导图标且分隔符应从文本插入而不是图标开始时使用。"},{"name":"topMargin","type":"double?","desc":"列表部分上方的边距。仅在边到边变体中使用,默认情况下匹配 iOS 样式。"},{"name":"separatorColor","type":"Color?","desc":"设置行之间分隔符以及行顶部和底部边框的颜色。"}],"id":386,"localName":"CupertinoListSection","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_en-US.json deleted file mode 100644 index 1ef2eeb3e..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoListTile","path":"/src/cupertino/list_tile.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style list tile.","fields":[{"name":"title","type":"Widget","required":true,"desc":"A [title] is used to convey the central information. Usually a [Text]."},{"name":"subtitle","type":"Widget?","desc":"A [subtitle] is used to display additional information. It is located below [title]. Usually a [Text] widget."},{"name":"additionalInfo","type":"Widget?","desc":"Similar to [subtitle], an [additionalInfo] is used to display additional information. However, instead of being displayed below [title], it is displayed on the right, before [trailing]. Usually a [Text] widget."},{"name":"leading","type":"Widget?","desc":"A widget displayed at the start of the [CupertinoListTile]. This is typically an `Icon` or an `Image`."},{"name":"trailing","type":"Widget?","desc":"A widget displayed at the end of the [CupertinoListTile]. This is usually a right chevron icon (e.g. `CupertinoListTileChevron`), or an `Icon`."},{"name":"onTap","type":"FutureOr Function()?","desc":"The [onTap] function is called when a user taps on [CupertinoListTile]. If left `null`, the [CupertinoListTile] will not react on taps. If this is a `Future Function()`, then the [CupertinoListTile] remains activated until the returned future is awaited. This is according to iOS behavior. However, if this function is a `void Function()`, then the tile is active only for the duration of invocation."},{"name":"backgroundColor","type":"Color?","desc":"The [backgroundColor] of the tile in normal state. Once the tile is tapped, the background color switches to [backgroundColorActivated]. It is set to match the iOS look by default."},{"name":"backgroundColorActivated","type":"Color?","desc":"The [backgroundColorActivated] is the background color of the tile after the tile was tapped. It is set to match the iOS look by default."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Padding of the content inside [CupertinoListTile]."},{"name":"leadingSize","type":"double","required":true,"desc":"The [leadingSize] is used to constrain the width and height of [leading] widget."},{"name":"leadingToTitle","type":"double","required":true,"desc":"The horizontal space between [leading] widget and [title]."}],"id":387,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_zh-CN.json deleted file mode 100644 index 27ee69aae..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoListTile/CupertinoListTile_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoListTile","path":"/src/cupertino/list_tile.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的列表项。","fields":[{"name":"title","type":"Widget","required":true,"desc":"[title] 用于传达中心信息。通常是 [Text]。"},{"name":"subtitle","type":"Widget?","desc":"[subtitle] 用于显示附加信息。它位于 [title] 下方。通常是 [Text] 小部件。"},{"name":"additionalInfo","type":"Widget?","desc":"与 [subtitle] 类似,[additionalInfo] 用于显示附加信息。但是,它不是显示在 [title] 下方,而是显示在右侧,在 [trailing] 之前。通常是 [Text] 小部件。"},{"name":"leading","type":"Widget?","desc":"显示在 [CupertinoListTile] 开始处的小部件。这通常是 `Icon` 或 `Image`。"},{"name":"trailing","type":"Widget?","desc":"显示在 [CupertinoListTile] 末尾的小部件。这通常是右箭头图标(例如 `CupertinoListTileChevron`)或 `Icon`。"},{"name":"onTap","type":"FutureOr Function()?","desc":"当用户点击 [CupertinoListTile] 时调用 [onTap] 函数。如果保留为 `null`,[CupertinoListTile] 将不会对点击做出反应。如果这是 `Future Function()`,则 [CupertinoListTile] 保持激活状态,直到返回的 future 被等待。这符合 iOS 行为。但是,如果此函数是 `void Function()`,则项目仅在调用期间处于活动状态。"},{"name":"backgroundColor","type":"Color?","desc":"项目在正常状态下的 [backgroundColor]。一旦点击项目,背景颜色切换到 [backgroundColorActivated]。默认设置为匹配 iOS 外观。"},{"name":"backgroundColorActivated","type":"Color?","desc":"[backgroundColorActivated] 是点击项目后项目的背景颜色。默认设置为匹配 iOS 外观。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"[CupertinoListTile] 内部内容的内边距。"},{"name":"leadingSize","type":"double","required":true,"desc":"[leadingSize] 用于约束 [leading] 小部件的宽度和高度。"},{"name":"leadingToTitle","type":"double","required":true,"desc":"[leading] 小部件和 [title] 之间的水平空间。"}],"id":387,"localName":"CupertinoListTile","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_en-US.json deleted file mode 100644 index 493707680..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoListTileChevron","path":"/src/cupertino/list_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A typical iOS trailing widget used to denote that a `CupertinoListTile` is a button with an action.","fields":[],"id":388,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_zh-CN.json deleted file mode 100644 index 223f7ac82..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoListTileChevron/CupertinoListTileChevron_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoListTileChevron","path":"/src/cupertino/list_tile.dart","parents":["StatelessWidget","Widget"],"desc":"用于表示 `CupertinoListTile` 是带有操作的按钮的典型 iOS 尾随小部件。","fields":[],"id":388,"localName":"CupertinoListTileChevron","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_en-US.json deleted file mode 100644 index 4c22d5347..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoMagnifier","path":"/src/cupertino/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":" A [RawMagnifier] used for magnifying text in cases where a user's finger may be blocking the point of interest, like a selection handle.","fields":[{"name":"shadows","type":"List","required":true,"desc":"A list of shadows cast by the [Magnifier]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"Whether and how to clip the [shadows] that render inside the loupe."},{"name":"borderSide","type":"BorderSide","required":true,"desc":"The border, or \"rim\", of this magnifier."},{"name":"size","type":"Size","required":true,"desc":"The size of this magnifier."},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"The border radius of this magnifier."},{"name":"inOutAnimation","type":"Animation?","desc":"This [RawMagnifier]'s controller."},{"name":"additionalFocalPointOffset","type":"Offset","required":true,"desc":"Any additional focal point offset, applied over the regular focal point offset defined in [kMagnifierAboveFocalPoint]."},{"name":"magnificationScale","type":"double","required":true,"desc":"The magnification scale for the magnifier."}],"id":389,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_zh-CN.json deleted file mode 100644 index 41fdf800c..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoMagnifier/CupertinoMagnifier_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoMagnifier","path":"/src/cupertino/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":"用于在用户手指可能阻挡兴趣点(如选择手柄)的情况下放大文本的 [RawMagnifier]。","fields":[{"name":"shadows","type":"List","required":true,"desc":"[Magnifier] 投射的阴影列表。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"是否以及如何裁剪在放大镜内渲染的 [shadows]。"},{"name":"borderSide","type":"BorderSide","required":true,"desc":"此放大镜的边框或\\"},{"name":"size","type":"Size","required":true,"desc":"此放大镜的大小。"},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"此放大镜的边框半径。"},{"name":"inOutAnimation","type":"Animation?","desc":"此 [RawMagnifier] 的控制器。"},{"name":"additionalFocalPointOffset","type":"Offset","required":true,"desc":"任何附加的焦点偏移量,应用于 [kMagnifierAboveFocalPoint] 中定义的常规焦点偏移量之上。"},{"name":"magnificationScale","type":"double","required":true,"desc":"放大镜的放大比例。"}],"id":389,"localName":"CupertinoMagnifier","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_en-US.json deleted file mode 100644 index 56cd626a1..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoNavigationBar","path":"/src/cupertino/nav_bar.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-styled navigation bar.","fields":[{"name":"largeTitle","type":"Widget?","desc":"The navigation bar's title, when using [CupertinoNavigationBar.large]."},{"name":"leading","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.leading} Widget to place at the start of the navigation bar. Normally a back button for a normal page or a cancel button for full page dialogs."},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.automaticallyImplyLeading} Controls whether we should try to imply the leading widget if null."},{"name":"automaticallyImplyMiddle","type":"bool","required":true,"desc":"Controls whether we should try to imply the middle widget if null."},{"name":"previousPageTitle","type":"String?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.previousPageTitle} Manually specify the previous route's title when automatically implying the leading back button."},{"name":"middle","type":"Widget?","desc":"The navigation bar's default title."},{"name":"trailing","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.trailing} Widget to place at the end of the navigation bar. Normally additional actions taken on the page such as a search or edit function. {@endtemplate}"},{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.backgroundColor} The background color of the navigation bar. If it contains transparency, the tab bar will automatically produce a blurring effect to the content behind it. This behavior can be disabled by setting [enableBackgroundFilterBlur] to false."},{"name":"automaticBackgroundVisibility","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.automaticBackgroundVisibility} Whether the navigation bar appears transparent when no content is scrolled under."},{"name":"brightness","type":"Brightness?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.brightness} The brightness of the specified [backgroundColor]."},{"name":"padding","type":"EdgeInsetsDirectional?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.padding} Padding for the contents of the navigation bar."},{"name":"border","type":"Border?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.border} The border of the navigation bar. By default renders a single pixel bottom border side."},{"name":"transitionBetweenRoutes","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.transitionBetweenRoutes} Whether to transition between navigation bars."},{"name":"enableBackgroundFilterBlur","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.enableBackgroundFilterBlur} Whether to have a blur effect when a non-opaque background color is used."},{"name":"heroTag","type":"Object","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.heroTag} Tag for the navigation bar's Hero widget if [transitionBetweenRoutes] is true."},{"name":"bottom","type":"PreferredSizeWidget?","desc":"A widget to place at the bottom of the navigation bar."}],"id":62,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoNavigationBar","desc":["【leading】: Left component 【Widget】","【middle】: Middle component 【Widget】","【trailing】: Trailing component 【Widget】","【backgroundColor】: Background color 【Color】","【padding】: Padding 【EdgeInsetsDirectional】","【border】: Border 【Border】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_zh-CN.json deleted file mode 100644 index 58f40bf70..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBar/CupertinoNavigationBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoNavigationBar","path":"/src/cupertino/nav_bar.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的导航栏。","fields":[{"name":"largeTitle","type":"Widget?","desc":"使用 [CupertinoNavigationBar.large] 时导航栏的标题。"},{"name":"leading","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.leading} 放置在导航栏开始处的小部件。通常是普通页面的返回按钮或全页对话框的取消按钮。"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.automaticallyImplyLeading} 控制如果为 null,我们是否应该尝试暗示前导小部件。"},{"name":"automaticallyImplyMiddle","type":"bool","required":true,"desc":"控制如果为 null,我们是否应该尝试暗示中间小部件。"},{"name":"previousPageTitle","type":"String?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.previousPageTitle} 在自动暗示前导返回按钮时手动指定上一个路由的标题。"},{"name":"middle","type":"Widget?","desc":"导航栏的默认标题。"},{"name":"trailing","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.trailing} 放置在导航栏末尾的小部件。通常是在页面上执行的附加操作,如搜索或编辑功能。{@endtemplate}"},{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.backgroundColor} 导航栏的背景颜色。如果包含透明度,标签栏将自动对其后面的内容产生模糊效果。可以通过将 [enableBackgroundFilterBlur] 设置为 false 来禁用此行为。"},{"name":"automaticBackgroundVisibility","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.automaticBackgroundVisibility} 当没有内容滚动到下方时,导航栏是否显示为透明。"},{"name":"brightness","type":"Brightness?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.brightness} 指定 [backgroundColor] 的亮度。"},{"name":"padding","type":"EdgeInsetsDirectional?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.padding} 导航栏内容的内边距。"},{"name":"border","type":"Border?","desc":"{@template flutter.cupertino.CupertinoNavigationBar.border} 导航栏的边框。默认渲染单像素底部边框。"},{"name":"transitionBetweenRoutes","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.transitionBetweenRoutes} 是否在导航栏之间过渡。"},{"name":"enableBackgroundFilterBlur","type":"bool","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.enableBackgroundFilterBlur} 当使用非不透明背景颜色时是否具有模糊效果。"},{"name":"heroTag","type":"Object","required":true,"desc":"{@template flutter.cupertino.CupertinoNavigationBar.heroTag} 如果 [transitionBetweenRoutes] 为 true,导航栏 Hero 小部件的标签。"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"放置在导航栏底部的小部件。"}],"id":62,"localName":"iOS导航","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoNavigationBar基本用法","desc":["【leading】 : 左侧组件 【Widget】","【middle】 : 中间组件 【Widget】","【trailing】 : 尾部组件 【Widget】","【backgroundColor】 : 背景色 【Color】","【padding】 : 内边距 【EdgeInsetsDirectional】","【border】 : 边线 【Border】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_en-US.json deleted file mode 100644 index cdc390a26..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoNavigationBarBackButton","path":"/src/cupertino/nav_bar.dart","parents":["StatelessWidget","Widget"],"desc":" A nav bar back button typically used in [CupertinoNavigationBar].","fields":[{"name":"color","type":"Color?","desc":"The [Color] of the back button."},{"name":"previousPageTitle","type":"String?","desc":"An override for showing the previous route's title. If null, it will be automatically derived from [CupertinoPageRoute.title] if the current and previous routes are both [CupertinoPageRoute]s."},{"name":"onPressed","type":"VoidCallback?","desc":"An override callback to perform instead of the default behavior which is to pop the [Navigator]."}],"id":218,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Back Button","desc":["【onPressed】: Click event 【VoidCallback】","【color】: Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_zh-CN.json deleted file mode 100644 index 6d81c4e48..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoNavigationBarBackButton/CupertinoNavigationBarBackButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoNavigationBarBackButton","path":"/src/cupertino/nav_bar.dart","parents":["StatelessWidget","Widget"],"desc":"通常在 [CupertinoNavigationBar] 中使用的导航栏返回按钮。","fields":[{"name":"color","type":"Color?","desc":"返回按钮的 [Color]。"},{"name":"previousPageTitle","type":"String?","desc":"显示上一个路由标题的覆盖。如果为 null,如果当前和上一个路由都是 [CupertinoPageRoute],它将自动从 [CupertinoPageRoute.title] 派生。"},{"name":"onPressed","type":"VoidCallback?","desc":"执行的覆盖回调,而不是默认行为,即弹出 [Navigator]。"}],"id":218,"localName":"iOS风格返回按钮","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"返回按钮基本使用","desc":["【onPressed】 : 点击事件 【VoidCallback】","【color】: 颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_en-US.json deleted file mode 100644 index 0646ff05f..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPageScaffold","path":"/src/cupertino/page_scaffold.dart","parents":["StatefulWidget","Widget"],"desc":" Implements a single iOS application page's layout.","fields":[{"name":"navigationBar","type":"ObstructingPreferredSizeWidget?","desc":"The [navigationBar], typically a [CupertinoNavigationBar], is drawn at the top of the screen."},{"name":"child","type":"Widget","required":true,"desc":"Widget to show in the main content area."},{"name":"backgroundColor","type":"Color?","desc":"The color of the widget that underlies the entire scaffold."},{"name":"resizeToAvoidBottomInset","type":"bool","required":true,"desc":"Whether the [child] should size itself to avoid the window's bottom inset."}],"id":157,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoPageScaffold","desc":["【child】 : Content 【Widget】","【backgroundColor】 : Background Color 【Color】","【navigationBar】 : Header 【ObstructingPreferredSizeWidget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_zh-CN.json deleted file mode 100644 index 206938a4a..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffold/CupertinoPageScaffold_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPageScaffold","path":"/src/cupertino/page_scaffold.dart","parents":["StatefulWidget","Widget"],"desc":"实现单个 iOS 应用程序页面的布局。","fields":[{"name":"navigationBar","type":"ObstructingPreferredSizeWidget?","desc":"[navigationBar],通常是 [CupertinoNavigationBar],绘制在屏幕顶部。"},{"name":"child","type":"Widget","required":true,"desc":"在主内容区域显示的小部件。"},{"name":"backgroundColor","type":"Color?","desc":"整个脚手架下方小部件的颜色。"},{"name":"resizeToAvoidBottomInset","type":"bool","required":true,"desc":"[child] 是否应调整自身大小以避免窗口的底部插入。"}],"id":157,"localName":"iOS页面脚手架","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoPageScaffold基本用法","desc":["【child】 : 内容 【Widget】","【backgroundColor】 : 背景色 【Color】","【navigationBar】 : 头部 【ObstructingPreferredSizeWidget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_en-US.json deleted file mode 100644 index ca3567342..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPageScaffoldBackgroundColor","path":"/src/cupertino/page_scaffold.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" [InheritedWidget] indicating what the current scaffold background color is for its children.","fields":[{"name":"color","type":"Color","required":true,"desc":"The background color defined in [CupertinoPageScaffold]."}],"id":390,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_zh-CN.json deleted file mode 100644 index adf20954e..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPageScaffoldBackgroundColor/CupertinoPageScaffoldBackgroundColor_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPageScaffoldBackgroundColor","path":"/src/cupertino/page_scaffold.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"[InheritedWidget] 指示其子项的当前脚手架背景颜色。","fields":[{"name":"color","type":"Color","required":true,"desc":"在 [CupertinoPageScaffold] 中定义的背景颜色。"}],"id":390,"localName":"CupertinoPageScaffoldBackgroundColor","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_en-US.json deleted file mode 100644 index a5574693f..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPageTransition","path":"/src/cupertino/route.dart","parents":["StatefulWidget","Widget"],"desc":" Provides an iOS-style page transition animation.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"* `primaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when this screen is being pushed."},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"* `secondaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when another screen is being pushed on top of this one."},{"name":"linearTransition","type":"bool","required":true,"desc":"* `linearTransition` is whether to perform the transitions linearly. Used to precisely track back gesture drags."}],"id":216,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to CupertinoPageTransition","desc":["【child】 : Child widget 【Widget】","【linearTransition】 : Whether to use linear transition 【bool】","【primaryRouteAnimation】 : Primary route animation 【Animation】","【secondaryRouteAnimation】 : Secondary route animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_zh-CN.json deleted file mode 100644 index 972782f65..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPageTransition/CupertinoPageTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPageTransition","path":"/src/cupertino/route.dart","parents":["StatefulWidget","Widget"],"desc":"提供 iOS 风格的页面过渡动画。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"* `primaryRouteAnimation` 是推送此屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"* `secondaryRouteAnimation` 是在此屏幕之上推送另一个屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"linearTransition","type":"bool","required":true,"desc":"* `linearTransition` 是否线性执行过渡。用于精确跟踪返回手势拖动。"}],"id":216,"localName":"页面过渡变换","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoPageTransition 介绍","desc":["【child】 : 子组件 【Widget】","【linearTransition】 : 是否线性转换 【bool】","【primaryRouteAnimation】 : 初始路由动画 【Animation】","【secondaryRouteAnimation】 : 第二路由动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_en-US.json deleted file mode 100644 index c5b30bc68..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPicker","path":"/src/cupertino/picker.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-styled picker.","fields":[{"name":"diameterRatio","type":"double","required":true,"desc":"Relative ratio between this picker's height and the simulated cylinder's diameter."},{"name":"backgroundColor","type":"Color?","desc":"Background color behind the children."},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"scrollController","type":"FixedExtentScrollController?","desc":"A [FixedExtentScrollController] to read and control the current item, and to set the initial item."},{"name":"itemExtent","type":"double","required":true,"desc":"{@template flutter.cupertino.picker.itemExtent} The uniform height of all children."},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"onSelectedItemChanged","type":"ValueChanged?","desc":"An option callback when the currently centered item changes."},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"A delegate that lazily instantiates children."},{"name":"selectionOverlay","type":"Widget?","desc":"A widget overlaid on the picker to highlight the currently selected entry."}],"id":139,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoPicker","desc":["【children】 : List of child components 【List】","【offAxisFraction】 : Axis offset rate 【double】","【squeeze】 : Squeeze rate 【double】","【diameterRatio】 : Ratio of height to cylinder diameter 【double】","【itemExtent】 : Spacing 【double】","【backgroundColor】 : Background color 【Color】","【onSelectedItemChanged】 : Selected event 【Function(int)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_zh-CN.json deleted file mode 100644 index 8f1691ebb..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPicker/CupertinoPicker_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPicker","path":"/src/cupertino/picker.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的选择器。","fields":[{"name":"diameterRatio","type":"double","required":true,"desc":"此选择器高度与模拟圆柱体直径之间的相对比率。"},{"name":"backgroundColor","type":"Color?","desc":"子项后面的背景颜色。"},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"scrollController","type":"FixedExtentScrollController?","desc":"用于读取和控制当前项目以及设置初始项目的 [FixedExtentScrollController]。"},{"name":"itemExtent","type":"double","required":true,"desc":"{@template flutter.cupertino.picker.itemExtent} 所有子项的统一高度。"},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"onSelectedItemChanged","type":"ValueChanged?","desc":"当前居中项目更改时的可选回调。"},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"延迟实例化子项的委托。"},{"name":"selectionOverlay","type":"Widget?","desc":"覆盖在选择器上以突出显示当前选定条目的小部件。"}],"id":139,"localName":"iOS选择器","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoPicker基本使用","desc":["【children】 : 子组件列表 【List】","【offAxisFraction】 : 轴偏移率 【double】","【squeeze】 : 挤压率 【double】","【diameterRatio】 : 高与圆柱直径比率 【double】","【itemExtent】 : 间距 【double】","【backgroundColor】 : 背景色 【Color】","【onSelectedItemChanged】 : 选中事件 【Function(int)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_en-US.json deleted file mode 100644 index 8bcb992d7..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPickerDefaultSelectionOverlay","path":"/src/cupertino/picker.dart","parents":["StatelessWidget","Widget"],"desc":" A default selection overlay for [CupertinoPicker]s.","fields":[{"name":"capStartEdge","type":"bool","required":true,"desc":"Whether to use the default use rounded corners and margin on the start side."},{"name":"capEndEdge","type":"bool","required":true,"desc":"Whether to use the default use rounded corners and margin on the end side."},{"name":"background","type":"Color","required":true,"desc":"The color to fill in the background of the [CupertinoPickerDefaultSelectionOverlay]. It Support for use [CupertinoDynamicColor]."}],"id":391,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_zh-CN.json deleted file mode 100644 index f8975b4da..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPickerDefaultSelectionOverlay/CupertinoPickerDefaultSelectionOverlay_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPickerDefaultSelectionOverlay","path":"/src/cupertino/picker.dart","parents":["StatelessWidget","Widget"],"desc":"[CupertinoPicker] 的默认选择覆盖层。","fields":[{"name":"capStartEdge","type":"bool","required":true,"desc":"是否在开始侧使用默认的圆角和边距。"},{"name":"capEndEdge","type":"bool","required":true,"desc":"是否在结束侧使用默认的圆角和边距。"},{"name":"background","type":"Color","required":true,"desc":"填充 [CupertinoPickerDefaultSelectionOverlay] 背景的颜色。支持使用 [CupertinoDynamicColor]。"}],"id":391,"localName":"CupertinoPickerDefaultSelectionOverlay","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_en-US.json deleted file mode 100644 index 31ad87e91..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPopupSurface","path":"/src/cupertino/dialog.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-style component for creating modal overlays like dialogs and action sheets.","fields":[{"name":"blurSigma","type":"double","required":true,"desc":"The strength of the gaussian blur applied to the area beneath this surface."},{"name":"isSurfacePainted","type":"bool","required":true,"desc":"Whether or not to paint a translucent white on top of this surface's blurred background. [isSurfacePainted] should be true for a typical popup that contains content without any dividers. A popup that requires dividers should set [isSurfacePainted] to false and then paint its own surface area."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":217,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoPopupSurface Usage","desc":["【isSurfacePainted】: Whether to paint white 【bool】","【child】: Child component 【Widget】","Test effect: left isSurfacePainted = false, right isSurfacePainted = true"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_zh-CN.json deleted file mode 100644 index 8b9b38173..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoPopupSurface/CupertinoPopupSurface_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoPopupSurface","path":"/src/cupertino/dialog.dart","parents":["StatelessWidget","Widget"],"desc":"用于创建对话框和操作表单等模态覆盖层的 iOS 风格组件。","fields":[{"name":"blurSigma","type":"double","required":true,"desc":"应用于此表面下方区域的高斯模糊强度。"},{"name":"isSurfacePainted","type":"bool","required":true,"desc":"是否在此表面的模糊背景之上绘制半透明白色。对于包含没有任何分隔符内容的典型弹出窗口,[isSurfacePainted] 应为 true。需要分隔符的弹出窗口应将 [isSurfacePainted] 设置为 false,然后绘制自己的表面区域。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":217,"localName":"模糊弹出层","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoPopupSurface 使用","desc":["【isSurfacePainted】 : 是否绘白 【bool】","【child】 : 子组件 【Widget】","测试效果左侧 isSurfacePainted = false,右侧 isSurfacePainted = true"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_en-US.json deleted file mode 100644 index 7f5d2e6ab..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoRadio","path":"/src/cupertino/radio.dart","parents":["StatefulWidget","Widget"],"desc":" A macOS-style radio button.","fields":[{"name":"value","type":"T","required":true,"desc":"The value represented by this radio button."},{"name":"groupValue","type":"T?","desc":"The currently selected value for a group of radio buttons."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user selects this [CupertinoRadio] button."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"toggleable","type":"bool","required":true,"desc":"Set to true if this radio button is allowed to be returned to an indeterminate state by selecting it again when selected."},{"name":"useCheckmarkStyle","type":"bool","required":true,"desc":"Controls whether the radio displays in a checkbox style or the default iOS radio style."},{"name":"activeColor","type":"Color?","desc":"The color to use when this radio button is selected."},{"name":"inactiveColor","type":"Color?","desc":"The color to use when this radio button is not selected."},{"name":"fillColor","type":"Color?","desc":"The color that fills the inner circle of the radio button when selected."},{"name":"focusColor","type":"Color?","desc":"The color for the radio's border when it has the input focus."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"}],"id":240,"lever":4,"family":1,"linkIds":[19,45],"nodes":[{"file":"node1.dart","name":"CupertinoRadio Usage","desc":["【value】: Radio button value 【T】","【groupValue】: Current matching value 【T】","【onChanged】: Callback when changed 【Function(T)】"]},{"file":"node2.dart","name":"CupertinoRadio Colors","desc":["【activeColor】: Active background color 【Color?】","【fillColor】: Fill color 【Color?】","【inactiveColor】: Inactive background color 【Color?】","【focusColor】: Focus color 【Color?】","【mouseCursor】: Mouse cursor style 【MouseCursor?】"]},{"file":"node3.dart","name":"Toggle Support","desc":["【toggleable】: Whether toggle is supported 【bool】","toggleable defaults to false. When set to true, clicking an active radio button will call back null data, supporting the need for toggling between selected and unselected states."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_zh-CN.json deleted file mode 100644 index d285c83cc..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoRadio/CupertinoRadio_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoRadio","path":"/src/cupertino/radio.dart","parents":["StatefulWidget","Widget"],"desc":"macOS 风格的单选按钮。","fields":[{"name":"value","type":"T","required":true,"desc":"此单选按钮表示的值。"},{"name":"groupValue","type":"T?","desc":"一组单选按钮的当前选定值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户选择此 [CupertinoRadio] 按钮时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"toggleable","type":"bool","required":true,"desc":"如果允许此单选按钮在选中时再次选择以返回到不确定状态,则设置为 true。"},{"name":"useCheckmarkStyle","type":"bool","required":true,"desc":"控制单选按钮是以复选框样式显示还是以默认 iOS 单选样式显示。"},{"name":"activeColor","type":"Color?","desc":"选择此单选按钮时使用的颜色。"},{"name":"inactiveColor","type":"Color?","desc":"未选择此单选按钮时使用的颜色。"},{"name":"fillColor","type":"Color?","desc":"选择时填充单选按钮内圆的颜色。"},{"name":"focusColor","type":"Color?","desc":"单选按钮具有输入焦点时其边框的颜色。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"}],"id":240,"localName":"单选钮·macOS风格","lever":4,"family":1,"linkIds":[19,45],"nodes":[{"file":"node1.dart","name":"CupertinoRadio 使用","desc":["【value】 : 选钮值 【T】","【groupValue】 : 当前匹配值 【T】","【onChanged】 : 改变时回调 【Function(T)】"]},{"file":"node2.dart","name":"CupertinoRadio 颜色","desc":["【activeColor】 : 激活背景颜色 【Color?】","【fillColor】 : 填充 【Color?】","【inactiveColor】 : 未激活背景颜色 【Color?】","【focusColor】 : 聚焦色 【Color?】","【mouseCursor】 : 鼠标指针样式 【MouseCursor?】"]},{"file":"node3.dart","name":"是否支持切换","desc":["【toggleable】 : 是否支持切换 【bool】","toggleable 默认为 false, 为 true 时,点击激活的选钮,会回调 null 数据,以此支持选中和非选择切换需求。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_en-US.json deleted file mode 100644 index 44565efd6..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoScrollbar","path":"/src/cupertino/scrollbar.dart","parents":["RawScrollbar","StatefulWidget","Widget"],"desc":" An iOS style scrollbar.","fields":[{"name":"thicknessWhileDragging","type":"double","required":true,"desc":"The thickness of the scrollbar when it's being dragged by the user."},{"name":"radiusWhileDragging","type":"Radius","required":true,"desc":"The radius of the scrollbar edges when the scrollbar is being dragged by the user."}],"id":195,"lever":3,"family":1,"linkIds":[194,164,162],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoScrollbar","desc":["【child】 : Child widget 【Widget】","【controller】 : Controller 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_zh-CN.json deleted file mode 100644 index 3e5e577a2..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoScrollbar/CupertinoScrollbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoScrollbar","path":"/src/cupertino/scrollbar.dart","parents":["RawScrollbar","StatefulWidget","Widget"],"desc":"iOS 风格的滚动条。","fields":[{"name":"thicknessWhileDragging","type":"double","required":true,"desc":"用户拖动滚动条时滚动条的厚度。"},{"name":"radiusWhileDragging","type":"Radius","required":true,"desc":"用户拖动滚动条时滚动条边缘的半径。"}],"id":195,"localName":"iOS滑动指示栏","lever":3,"family":1,"linkIds":[194,164,162],"nodes":[{"file":"node1_base.dart","name":"CupertinoScrollbar基本使用","desc":["【child】 : 子组件 【Widget】","【controller】 : 控制器 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_en-US.json deleted file mode 100644 index 2f50698c7..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSearchTextField","path":"/src/cupertino/search_field.dart","parents":["StatefulWidget","Widget"],"desc":" A [CupertinoTextField] that mimics the look and behavior of UIKit's `UISearchTextField`.","fields":[{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited."},{"name":"onChanged","type":"ValueChanged?","desc":"Invoked upon user input."},{"name":"onSubmitted","type":"ValueChanged?","desc":"Invoked upon keyboard submission."},{"name":"style","type":"TextStyle?","desc":"Allows changing the style of the text."},{"name":"placeholder","type":"String?","desc":"A hint placeholder text that appears when the text entry is empty."},{"name":"placeholderStyle","type":"TextStyle?","desc":"Sets the style of the placeholder of the text field."},{"name":"decoration","type":"BoxDecoration?","desc":"Sets the decoration for the text field."},{"name":"backgroundColor","type":"Color?","desc":"Set the [decoration] property's background color."},{"name":"borderRadius","type":"BorderRadius?","desc":"Sets the [decoration] property's border radius."},{"name":"keyboardType","type":"TextInputType?","desc":"The keyboard type for this search field."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"Sets the padding insets for the text and placeholder."},{"name":"itemColor","type":"Color","required":true,"desc":"Sets the color for the suffix and prefix icons."},{"name":"itemSize","type":"double","required":true,"desc":"Sets the base icon size for the suffix and prefix icons."},{"name":"prefixInsets","type":"EdgeInsetsGeometry","required":true,"desc":"Sets the padding insets for the suffix."},{"name":"prefixIcon","type":"Widget","required":true,"desc":"Sets a prefix widget."},{"name":"suffixInsets","type":"EdgeInsetsGeometry","required":true,"desc":"Sets the padding insets for the prefix."},{"name":"suffixIcon","type":"Icon","required":true,"desc":"Sets the suffix widget's icon."},{"name":"suffixMode","type":"OverlayVisibilityMode","required":true,"desc":"Dictates when the X-Mark (suffix) should be visible."},{"name":"onSuffixTap","type":"VoidCallback?","desc":"Sets the X-Mark (suffix) action."},{"name":"restorationId","type":"String?","desc":"{@macro flutter.material.textfield.restorationId}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"onTap","type":"VoidCallback?","desc":"{@macro flutter.material.textfield.onTap}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartQuotesType","type":"SmartQuotesType?","desc":"Whether to allow the platform to automatically format quotes."},{"name":"smartDashesType","type":"SmartDashesType?","desc":"Whether to allow the platform to automatically format dashes."},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"enabled","type":"bool?","desc":"Disables the text field when false."},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius","required":true,"desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"The color to use when painting the cursor."}],"id":392,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_zh-CN.json deleted file mode 100644 index 1b8af9f86..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSearchTextField/CupertinoSearchTextField_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSearchTextField","path":"/src/cupertino/search_field.dart","parents":["StatefulWidget","Widget"],"desc":"模仿 UIKit 的 `UISearchTextField` 外观和行为的 [CupertinoTextField]。","fields":[{"name":"controller","type":"TextEditingController?","desc":"控制正在编辑的文本。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户输入时调用。"},{"name":"onSubmitted","type":"ValueChanged?","desc":"键盘提交时调用。"},{"name":"style","type":"TextStyle?","desc":"允许更改文本的样式。"},{"name":"placeholder","type":"String?","desc":"文本输入为空时出现的提示占位符文本。"},{"name":"placeholderStyle","type":"TextStyle?","desc":"设置文本字段占位符的样式。"},{"name":"decoration","type":"BoxDecoration?","desc":"设置文本字段的装饰。"},{"name":"backgroundColor","type":"Color?","desc":"设置 [decoration] 属性的背景颜色。"},{"name":"borderRadius","type":"BorderRadius?","desc":"设置 [decoration] 属性的边框半径。"},{"name":"keyboardType","type":"TextInputType?","desc":"此搜索字段的键盘类型。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"设置文本和占位符的内边距插入。"},{"name":"itemColor","type":"Color","required":true,"desc":"设置后缀和前缀图标的颜色。"},{"name":"itemSize","type":"double","required":true,"desc":"设置后缀和前缀图标的基本图标大小。"},{"name":"prefixInsets","type":"EdgeInsetsGeometry","required":true,"desc":"设置后缀的内边距插入。"},{"name":"prefixIcon","type":"Widget","required":true,"desc":"设置前缀小部件。"},{"name":"suffixInsets","type":"EdgeInsetsGeometry","required":true,"desc":"设置前缀的内边距插入。"},{"name":"suffixIcon","type":"Icon","required":true,"desc":"设置后缀小部件的图标。"},{"name":"suffixMode","type":"OverlayVisibilityMode","required":true,"desc":"决定 X 标记(后缀)何时应该可见。"},{"name":"onSuffixTap","type":"VoidCallback?","desc":"设置 X 标记(后缀)操作。"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.material.textfield.restorationId}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"onTap","type":"VoidCallback?","desc":"{@macro flutter.material.textfield.onTap}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartQuotesType","type":"SmartQuotesType?","desc":"是否允许平台自动格式化引号。"},{"name":"smartDashesType","type":"SmartDashesType?","desc":"是否允许平台自动格式化破折号。"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"enabled","type":"bool?","desc":"为 false 时禁用文本字段。"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius","required":true,"desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"绘制光标时使用的颜色。"}],"id":392,"localName":"CupertinoSearchTextField","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_en-US.json deleted file mode 100644 index 0e464a279..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSegmentedControl","path":"/src/cupertino/segmented_control.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style segmented control.","fields":[{"name":"children","type":"Map","required":true,"desc":"The identifying keys and corresponding widget values in the segmented control."},{"name":"groupValue","type":"T?","desc":"The identifier of the widget that is currently selected."},{"name":"onValueChanged","type":"ValueChanged","required":true,"desc":"The callback that is called when a new option is tapped."},{"name":"unselectedColor","type":"Color?","desc":"The color used to fill the backgrounds of unselected widgets and as the text color of the selected widget."},{"name":"selectedColor","type":"Color?","desc":"The color used to fill the background of the selected widget and as the text color of unselected widgets."},{"name":"borderColor","type":"Color?","desc":"The color used as the border around each widget."},{"name":"pressedColor","type":"Color?","desc":"The color used to fill the background of the widget the user is temporarily interacting with through a long press or drag."},{"name":"disabledColor","type":"Color?","desc":"The color used to fill the background of the segment when it is disabled."},{"name":"disabledTextColor","type":"Color?","desc":"The color used for the text of the segment when it is disabled."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The CupertinoSegmentedControl will be placed inside this padding."},{"name":"disabledChildren","type":"Set","required":true,"desc":"The set of identifying keys that correspond to the segments that should be disabled."}],"id":262,"lever":4,"family":1,"linkIds":[33,256],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of iOS Tabs","desc":["【children】: Component Map 【Map】","【onValueChanged】: Value Change Callback 【ValueChanged】","【groupValue】: Selected Value 【T】","【padding】: Padding 【EdgeInsetsGeometry】"]},{"file":"node2_color.dart","name":"Colors of CupertinoSegmentedControl","desc":["【unselectedColor】: Unselected Color 【Color】","【selectedColor】: Selected Color 【Color】","【pressedColor】: Pressed Color 【Color】","【borderColor】: Border Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_zh-CN.json deleted file mode 100644 index 4a544411f..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSegmentedControl/CupertinoSegmentedControl_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSegmentedControl","path":"/src/cupertino/segmented_control.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的分段控件。","fields":[{"name":"children","type":"Map","required":true,"desc":"分段控件中的标识键和相应的小部件值。"},{"name":"groupValue","type":"T?","desc":"当前选定的小部件的标识符。"},{"name":"onValueChanged","type":"ValueChanged","required":true,"desc":"点击新选项时调用的回调。"},{"name":"unselectedColor","type":"Color?","desc":"用于填充未选中小部件背景和作为选中小部件文本颜色的颜色。"},{"name":"selectedColor","type":"Color?","desc":"用于填充选中小部件背景和作为未选中小部件文本颜色的颜色。"},{"name":"borderColor","type":"Color?","desc":"用作每个小部件周围边框的颜色。"},{"name":"pressedColor","type":"Color?","desc":"用于填充用户通过长按或拖动临时交互的小部件背景的颜色。"},{"name":"disabledColor","type":"Color?","desc":"段被禁用时用于填充段背景的颜色。"},{"name":"disabledTextColor","type":"Color?","desc":"段被禁用时用于段文本的颜色。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"CupertinoSegmentedControl 将放置在此内边距内。"},{"name":"disabledChildren","type":"Set","required":true,"desc":"对应于应被禁用的段的标识键集合。"}],"id":262,"localName":"iOS多栏切换","lever":4,"family":1,"linkIds":[33,256],"nodes":[{"file":"node1_base.dart","name":"iOS页签基本使用","desc":["【children】 : 组件Map 【Map】","【onValueChanged】 : 值改变回调 【ValueChanged】","【groupValue】 : 选中值 【T】","【padding】 : 内边距 【EdgeInsetsGeometry】"]},{"file":"node2_color.dart","name":"CupertinoSegmentedControl的颜色","desc":["【unselectedColor】 : 未选中色 【Color】","【selectedColor】 : 选中色 【Color】","【pressedColor】 : 按下色 【Color】","【borderColor】 : 边线色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_en-US.json deleted file mode 100644 index 9c138db88..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSheetTransition","path":"/src/cupertino/sheet.dart","parents":["StatefulWidget","Widget"],"desc":" Provides an iOS-style sheet transition.","fields":[{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"`primaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when this screen is being pushed."},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"`secondaryRouteAnimation` is a linear route animation from 0.0 to 1.0 when another screen is being pushed on top of this one."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"linearTransition","type":"bool","required":true,"desc":"Whether to perform the transition linearly."}],"id":393,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_zh-CN.json deleted file mode 100644 index 253998c5d..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSheetTransition/CupertinoSheetTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSheetTransition","path":"/src/cupertino/sheet.dart","parents":["StatefulWidget","Widget"],"desc":"提供 iOS 风格的表单过渡。","fields":[{"name":"primaryRouteAnimation","type":"Animation","required":true,"desc":"`primaryRouteAnimation` 是推送此屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"secondaryRouteAnimation","type":"Animation","required":true,"desc":"`secondaryRouteAnimation` 是在此屏幕之上推送另一个屏幕时从 0.0 到 1.0 的线性路由动画。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"linearTransition","type":"bool","required":true,"desc":"是否线性执行过渡。"}],"id":393,"localName":"CupertinoSheetTransition","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_en-US.json deleted file mode 100644 index bd999c11e..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSlider","path":"/src/cupertino/slider.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style slider.","fields":[{"name":"value","type":"double","required":true,"desc":"The currently selected value for this slider."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user selects a new value for the slider."},{"name":"onChangeStart","type":"ValueChanged?","desc":"Called when the user starts selecting a new value for the slider."},{"name":"onChangeEnd","type":"ValueChanged?","desc":"Called when the user is done selecting a new value for the slider."},{"name":"min","type":"double","required":true,"desc":"The minimum value the user can select."},{"name":"max","type":"double","required":true,"desc":"The maximum value the user can select."},{"name":"divisions","type":"int?","desc":"The number of discrete divisions."},{"name":"activeColor","type":"Color?","desc":"The color to use for the portion of the slider that has been selected."},{"name":"thumbColor","type":"Color","required":true,"desc":"The color to use for the thumb of the slider."}],"id":43,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoSlider","desc":["【value】: value 【double】","【min】: minimum value 【double】","【max】: maximum value 【double】","【activeColor】: active color 【Color】","【thumbColor】: thumb color 【Color】","【divisions】: number of divisions 【int】","【onChangeStart】: callback when sliding starts 【Function(double)】","【onChangeEnd】: callback when sliding ends 【Function(double)】","【onChanged】: callback when value changes 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_zh-CN.json deleted file mode 100644 index a60be95d9..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSlider/CupertinoSlider_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSlider","path":"/src/cupertino/slider.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的滑块。","fields":[{"name":"value","type":"double","required":true,"desc":"此滑块当前选定的值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户为滑块选择新值时调用。"},{"name":"onChangeStart","type":"ValueChanged?","desc":"用户开始为滑块选择新值时调用。"},{"name":"onChangeEnd","type":"ValueChanged?","desc":"用户完成为滑块选择新值时调用。"},{"name":"min","type":"double","required":true,"desc":"用户可以选择的最小值。"},{"name":"max","type":"double","required":true,"desc":"用户可以选择的最大值。"},{"name":"divisions","type":"int?","desc":"离散分割的数量。"},{"name":"activeColor","type":"Color?","desc":"用于滑块已选择部分的颜色。"},{"name":"thumbColor","type":"Color","required":true,"desc":"用于滑块拇指的颜色。"}],"id":43,"localName":"iOS滑块","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoSlider基本使用","desc":["【value】 : 数值 【double】","【min】 : 最小值 【double】","【max】 : 最大值 【double】","【activeColor】 : 激活颜色 【Color】","【thumbColor】 : 圆形颜色 【Color】","【divisions】 : 分段数 【int】","【onChangeStart】 : 开始滑动回调 【Function(double)】","【onChangeEnd】 : 滑动结束回调 【Function(double)】","【onChanged】 : 改变时回调 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_en-US.json deleted file mode 100644 index 65ee5d06c..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSlidingSegmentedControl","path":"/src/cupertino/sliding_segmented_control.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS 13 style segmented control.","fields":[{"name":"children","type":"Map","required":true,"desc":"The identifying keys and corresponding widget values in the segmented control."},{"name":"disabledChildren","type":"Set","required":true,"desc":"The set of identifying keys that correspond to the segments that should be disabled."},{"name":"groupValue","type":"T?","desc":"The identifier of the widget that is currently selected."},{"name":"onValueChanged","type":"ValueChanged","required":true,"desc":"The callback that is called when a new option is tapped."},{"name":"backgroundColor","type":"Color","required":true,"desc":"The color used to paint the rounded rect behind the [children] and the separators."},{"name":"proportionalWidth","type":"bool","required":true,"desc":"Determine whether segments have proportional widths based on their content."},{"name":"thumbColor","type":"Color","required":true,"desc":"The color used to paint the interior of the thumb that appears behind the currently selected item."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the [children]."}],"id":256,"lever":3,"family":1,"linkIds":[33,262],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of iOS Sliding Tabs","desc":["【children】: Component Map 【Map】","【onValueChanged】: Value Change Callback 【ValueChanged】","【groupValue】: Selected Value 【T】","【thumbColor】: Selected Color 【Color】","【backgroundColor】: Background Color 【Color】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_zh-CN.json deleted file mode 100644 index 2a3336655..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSlidingSegmentedControl/CupertinoSlidingSegmentedControl_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSlidingSegmentedControl","path":"/src/cupertino/sliding_segmented_control.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 13 风格的分段控件。","fields":[{"name":"children","type":"Map","required":true,"desc":"分段控件中的标识键和相应的小部件值。"},{"name":"disabledChildren","type":"Set","required":true,"desc":"对应于应被禁用的段的标识键集合。"},{"name":"groupValue","type":"T?","desc":"当前选定的小部件的标识符。"},{"name":"onValueChanged","type":"ValueChanged","required":true,"desc":"点击新选项时调用的回调。"},{"name":"backgroundColor","type":"Color","required":true,"desc":"用于绘制 [children] 和分隔符后面的圆角矩形的颜色。"},{"name":"proportionalWidth","type":"bool","required":true,"desc":"确定段是否根据其内容具有比例宽度。"},{"name":"thumbColor","type":"Color","required":true,"desc":"用于绘制出现在当前选定项目后面的拇指内部的颜色。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"插入 [children] 的空间量。"}],"id":256,"localName":"iOS滑动页签","lever":3,"family":1,"linkIds":[33,262],"nodes":[{"file":"node1_base.dart","name":"iOS滑动页签基本使用","desc":["【children】 : 组件Map 【Map】","【onValueChanged】 : 值改变回调 【ValueChanged】","【groupValue】 : 选中值 【T】","【thumbColor】 : 选中色 【Color】","【backgroundColor】 : 背景色 【Color】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_en-US.json deleted file mode 100644 index 9aa22a36b..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSliverNavigationBar","path":"/src/cupertino/nav_bar.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-styled navigation bar with iOS-11-style large titles using slivers.","fields":[{"name":"largeTitle","type":"Widget?","desc":"The navigation bar's title."},{"name":"leading","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.leading}"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.automaticallyImplyLeading}"},{"name":"automaticallyImplyTitle","type":"bool","required":true,"desc":"Controls whether we should try to imply the [largeTitle] widget if null."},{"name":"alwaysShowMiddle","type":"bool","required":true,"desc":"Controls whether [middle] widget should always be visible (even in expanded state)."},{"name":"previousPageTitle","type":"String?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.previousPageTitle}"},{"name":"middle","type":"Widget?","desc":"A widget to place in the middle of the static navigation bar instead of the [largeTitle]."},{"name":"trailing","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.trailing}"},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.backgroundColor}"},{"name":"automaticBackgroundVisibility","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.automaticBackgroundVisibility}"},{"name":"enableBackgroundFilterBlur","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.enableBackgroundFilterBlur}"},{"name":"brightness","type":"Brightness?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.brightness}"},{"name":"padding","type":"EdgeInsetsDirectional?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.padding}"},{"name":"border","type":"Border?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.border}"},{"name":"transitionBetweenRoutes","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.transitionBetweenRoutes}"},{"name":"heroTag","type":"Object","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.heroTag}"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"A widget to place at the bottom of the large title or static navigation bar if there is no large title."},{"name":"bottomMode","type":"NavigationBarBottomMode?","desc":"Modes that determine how to display the navigation bar's [bottom], or the search field in a [CupertinoSliverNavigationBar.search]."},{"name":"onSearchableBottomTap","type":"ValueChanged?","desc":"Called when the search field in [CupertinoSliverNavigationBar.search] is tapped, toggling between an active and an inactive search state."},{"name":"stretch","type":"bool","required":true,"desc":"Whether the nav bar should stretch to fill the over-scroll area."},{"name":"searchField","type":"Widget?","desc":"The search field used in [CupertinoSliverNavigationBar.search]."}],"id":302,"lever":2,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Navigation Bar","desc":["【leading】: Left component 【Widget】","【middle】: Middle component 【Widget】","【trailing】: Trailing component 【Widget】","【largeTitle】: Bottom expandable component 【Widget】","【border】: Border 【Border】","【backgroundColor】: Background color 【Color】","【padding】: Padding 【EdgeInsetsDirectional】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_zh-CN.json deleted file mode 100644 index a6b277787..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSliverNavigationBar/CupertinoSliverNavigationBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSliverNavigationBar","path":"/src/cupertino/nav_bar.dart","parents":["StatefulWidget","Widget"],"desc":"使用 sliver 的 iOS 风格导航栏,具有 iOS-11 风格的大标题。","fields":[{"name":"largeTitle","type":"Widget?","desc":"导航栏的标题。"},{"name":"leading","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.leading}"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.automaticallyImplyLeading}"},{"name":"automaticallyImplyTitle","type":"bool","required":true,"desc":"控制如果为 null,我们是否应该尝试暗示 [largeTitle] 小部件。"},{"name":"alwaysShowMiddle","type":"bool","required":true,"desc":"控制 [middle] 小部件是否应始终可见(即使在展开状态下)。"},{"name":"previousPageTitle","type":"String?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.previousPageTitle}"},{"name":"middle","type":"Widget?","desc":"放置在静态导航栏中间而不是 [largeTitle] 的小部件。"},{"name":"trailing","type":"Widget?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.trailing}"},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.backgroundColor}"},{"name":"automaticBackgroundVisibility","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.automaticBackgroundVisibility}"},{"name":"enableBackgroundFilterBlur","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.enableBackgroundFilterBlur}"},{"name":"brightness","type":"Brightness?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.brightness}"},{"name":"padding","type":"EdgeInsetsDirectional?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.padding}"},{"name":"border","type":"Border?","desc":"{@macro flutter.cupertino.CupertinoNavigationBar.border}"},{"name":"transitionBetweenRoutes","type":"bool","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.transitionBetweenRoutes}"},{"name":"heroTag","type":"Object","required":true,"desc":"{@macro flutter.cupertino.CupertinoNavigationBar.heroTag}"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"如果没有大标题,则放置在大标题或静态导航栏底部的小部件。"},{"name":"bottomMode","type":"NavigationBarBottomMode?","desc":"确定如何显示导航栏的 [bottom] 或 [CupertinoSliverNavigationBar.search] 中的搜索字段的模式。"},{"name":"onSearchableBottomTap","type":"ValueChanged?","desc":"点击 [CupertinoSliverNavigationBar.search] 中的搜索字段时调用,在活动和非活动搜索状态之间切换。"},{"name":"stretch","type":"bool","required":true,"desc":"导航栏是否应拉伸以填充过度滚动区域。"},{"name":"searchField","type":"Widget?","desc":"[CupertinoSliverNavigationBar.search] 中使用的搜索字段。"}],"id":302,"localName":"Sliver导航条","lever":2,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"导航条基本使用","desc":["【leading】 : 左侧组件 【Widget】","【middle】 : 中间组件 【Widget】","【trailing】 : 尾部组件 【Widget】","【largeTitle】 : 底部折展组件 【Widget】","【border】 : 边线 【Border】","【backgroundColor】 : 背景色 【Color】","【padding】 : 内边距 【EdgeInsetsDirectional】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_en-US.json deleted file mode 100644 index 22c50bf5d..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSliverRefreshControl","path":"/src/cupertino/refresh.dart","parents":["StatefulWidget","Widget"],"desc":" A sliver widget implementing the iOS-style pull to refresh content control.","fields":[{"name":"refreshTriggerPullDistance","type":"double","required":true,"desc":"The amount of overscroll the scrollable must be dragged to trigger a reload."},{"name":"refreshIndicatorExtent","type":"double","required":true,"desc":"The amount of space the refresh indicator sliver will keep holding while [onRefresh]'s [Future] is still running."},{"name":"builder","type":"RefreshControlIndicatorBuilder?","desc":"A builder that's called as this sliver's size changes, and as the state changes."},{"name":"onRefresh","type":"RefreshCallback?","desc":"Callback invoked when pulled by [refreshTriggerPullDistance]."}],"id":303,"lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Refresh Controller","desc":["【refreshIndicatorExtent】: Height of the loading indicator 【double】","【refreshTriggerPullDistance】: Scroll height that triggers loading 【double】","【onRefresh】: Pull-down event 【RefreshCallback】","【builder】: Indicator builder 【RefreshControlIndicatorBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_zh-CN.json deleted file mode 100644 index c1cfc35e6..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSliverRefreshControl/CupertinoSliverRefreshControl_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSliverRefreshControl","path":"/src/cupertino/refresh.dart","parents":["StatefulWidget","Widget"],"desc":"实现 iOS 风格下拉刷新内容控件的 sliver 小部件。","fields":[{"name":"refreshTriggerPullDistance","type":"double","required":true,"desc":"可滚动内容必须被拖动以触发重新加载的过度滚动量。"},{"name":"refreshIndicatorExtent","type":"double","required":true,"desc":"在 [onRefresh] 的 [Future] 仍在运行时,刷新指示器 sliver 将保持占用的空间量。"},{"name":"builder","type":"RefreshControlIndicatorBuilder?","desc":"随着此 sliver 大小变化和状态变化而调用的构建器。"},{"name":"onRefresh","type":"RefreshCallback?","desc":"被 [refreshTriggerPullDistance] 拉动时调用的回调。"}],"id":303,"localName":"Sliver刷新控制器","lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"刷新控制器基本使用","desc":["【refreshIndicatorExtent】 : 加载中指示器高度 【double】","【refreshTriggerPullDistance】 : 触发加载的滑动高度 【double】","【onRefresh】 : 下拉事件 【RefreshCallback】","【builder】 : 指示器构造器 【RefreshControlIndicatorBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_en-US.json deleted file mode 100644 index 2dd7c816b..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSpellCheckSuggestionsToolbar","path":"/src/cupertino/spell_check_suggestions_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" The default spell check suggestions toolbar for iOS.","fields":[{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"The location on which to anchor the menu."},{"name":"buttonItems","type":"List","required":true,"desc":"The [ContextMenuButtonItem]s that will be turned into the correct button widgets and displayed in the spell check suggestions toolbar."}],"id":394,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_zh-CN.json deleted file mode 100644 index 4f46cda1d..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSpellCheckSuggestionsToolbar/CupertinoSpellCheckSuggestionsToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSpellCheckSuggestionsToolbar","path":"/src/cupertino/spell_check_suggestions_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 的默认拼写检查建议工具栏。","fields":[{"name":"anchors","type":"TextSelectionToolbarAnchors","required":true,"desc":"锚定菜单的位置。"},{"name":"buttonItems","type":"List","required":true,"desc":"将转换为正确按钮小部件并显示在拼写检查建议工具栏中的 [ContextMenuButtonItem]。"}],"id":394,"localName":"CupertinoSpellCheckSuggestionsToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_en-US.json deleted file mode 100644 index dda31e2b0..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSwitch","path":"/src/cupertino/switch.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style switch.","fields":[{"name":"value","type":"bool","required":true,"desc":"Whether this switch is on or off."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user toggles the switch on or off."},{"name":"activeTrackColor","type":"Color?","desc":"The color to use for the track when the switch is on."},{"name":"inactiveTrackColor","type":"Color?","desc":"The color to use for the track when the switch is off."},{"name":"thumbColor","type":"Color?","desc":"The color to use for the thumb when the switch is on."},{"name":"inactiveThumbColor","type":"Color?","desc":"The color to use on the thumb when the switch is off."},{"name":"focusColor","type":"Color?","desc":"The color to use for the focus highlight for keyboard interactions."},{"name":"onLabelColor","type":"Color?","desc":"The color to use for the accessibility label when the switch is on."},{"name":"offLabelColor","type":"Color?","desc":"The color to use for the accessibility label when the switch is off."},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.activeThumbImage}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onActiveThumbImageError}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.inactiveThumbImage}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onInactiveThumbImageError}"},{"name":"trackOutlineColor","type":"WidgetStateProperty?","desc":"The outline color of this [CupertinoSwitch]'s track."},{"name":"trackOutlineWidth","type":"WidgetStateProperty?","desc":"The outline width of this [CupertinoSwitch]'s track."},{"name":"thumbIcon","type":"WidgetStateProperty?","desc":"The icon to use on the thumb of this switch."},{"name":"mouseCursor","type":"WidgetStateProperty?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"applyTheme","type":"bool?","desc":"{@template flutter.cupertino.CupertinoSwitch.applyTheme} Whether to apply the ambient [CupertinoThemeData]."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.cupertino.CupertinoSwitch.dragStartBehavior} Determines the way that drag start behavior is handled."}],"id":41,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoSwitch","desc":["【value】: Whether it is selected 【double】","【activeColor】: Active state color 【Color】","【onChanged】: Toggle callback 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_zh-CN.json deleted file mode 100644 index ae7f74745..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoSwitch/CupertinoSwitch_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoSwitch","path":"/src/cupertino/switch.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的开关。","fields":[{"name":"value","type":"bool","required":true,"desc":"此开关是开启还是关闭。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户切换开关开启或关闭时调用。"},{"name":"activeTrackColor","type":"Color?","desc":"开关开启时用于轨道的颜色。"},{"name":"inactiveTrackColor","type":"Color?","desc":"开关关闭时用于轨道的颜色。"},{"name":"thumbColor","type":"Color?","desc":"开关开启时用于拇指的颜色。"},{"name":"inactiveThumbColor","type":"Color?","desc":"开关关闭时用于拇指的颜色。"},{"name":"focusColor","type":"Color?","desc":"用于键盘交互的焦点高亮的颜色。"},{"name":"onLabelColor","type":"Color?","desc":"开关开启时用于辅助功能标签的颜色。"},{"name":"offLabelColor","type":"Color?","desc":"开关关闭时用于辅助功能标签的颜色。"},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.activeThumbImage}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onActiveThumbImageError}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.inactiveThumbImage}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onInactiveThumbImageError}"},{"name":"trackOutlineColor","type":"WidgetStateProperty?","desc":"此 [CupertinoSwitch] 轨道的轮廓颜色。"},{"name":"trackOutlineWidth","type":"WidgetStateProperty?","desc":"此 [CupertinoSwitch] 轨道的轮廓宽度。"},{"name":"thumbIcon","type":"WidgetStateProperty?","desc":"在此开关拇指上使用的图标。"},{"name":"mouseCursor","type":"WidgetStateProperty?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点改变时调用的处理程序。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"applyTheme","type":"bool?","desc":"{@template flutter.cupertino.CupertinoSwitch.applyTheme} 是否应用环境 [CupertinoThemeData]。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.cupertino.CupertinoSwitch.dragStartBehavior} 确定拖动开始行为的处理方式。"}],"id":41,"localName":"iOS切钮","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoSwitch基本使用","desc":["【value】 : 是否选中 【double】","【activeColor】 : 激活态颜色 【Color】","【onChanged】 : 切换回调 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_en-US.json deleted file mode 100644 index 56cd80008..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTabBar","path":"/src/cupertino/bottom_tab_bar.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-styled bottom navigation tab bar.","fields":[{"name":"items","type":"List","required":true,"desc":"The interactive items laid out within the bottom navigation bar."},{"name":"onTap","type":"ValueChanged?","desc":"The callback that is called when a item is tapped."},{"name":"currentIndex","type":"int","required":true,"desc":"The index into [items] of the current active item."},{"name":"backgroundColor","type":"Color?","desc":"The background color of the tab bar. If it contains transparency, the tab bar will automatically produce a blurring effect to the content behind it."},{"name":"activeColor","type":"Color?","desc":"The foreground color of the icon and title for the [BottomNavigationBarItem] of the selected tab."},{"name":"inactiveColor","type":"Color","required":true,"desc":"The foreground color of the icon and title for the [BottomNavigationBarItem]s in the unselected state."},{"name":"iconSize","type":"double","required":true,"desc":"The size of all of the [BottomNavigationBarItem] icons."},{"name":"height","type":"double","required":true,"desc":"The height of the [CupertinoTabBar]."},{"name":"border","type":"Border?","desc":"The border of the [CupertinoTabBar]."}],"id":63,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoTabBar","desc":["【currentIndex】 : Current active index 【Widget】","【items】 : Item components 【Widget】","【backgroundColor】 : Background color 【Color】","【inactiveColor】 : Inactive color 【Color】","【activeColor】 : Active color 【Color】","【iconSize】 : Icon size 【double】","【border】 : Border 【Border】","【onTap】 : Click event 【Function(int)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_zh-CN.json deleted file mode 100644 index e9d6e0233..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTabBar/CupertinoTabBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTabBar","path":"/src/cupertino/bottom_tab_bar.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 风格的底部导航标签栏。","fields":[{"name":"items","type":"List","required":true,"desc":"在底部导航栏内布局的交互项目。"},{"name":"onTap","type":"ValueChanged?","desc":"点击项目时调用的回调。"},{"name":"currentIndex","type":"int","required":true,"desc":"当前活动项目在 [items] 中的索引。"},{"name":"backgroundColor","type":"Color?","desc":"标签栏的背景颜色。如果包含透明度,标签栏将自动对其后面的内容产生模糊效果。"},{"name":"activeColor","type":"Color?","desc":"选定标签的 [BottomNavigationBarItem] 图标和标题的前景颜色。"},{"name":"inactiveColor","type":"Color","required":true,"desc":"未选中状态下 [BottomNavigationBarItem] 图标和标题的前景颜色。"},{"name":"iconSize","type":"double","required":true,"desc":"所有 [BottomNavigationBarItem] 图标的大小。"},{"name":"height","type":"double","required":true,"desc":"[CupertinoTabBar] 的高度。"},{"name":"border","type":"Border?","desc":"[CupertinoTabBar] 的边框。"}],"id":63,"localName":"iOS页签","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoTabBar基本用法","desc":["【currentIndex】 : 当前激活索引 【Widget】","【items】 : 条目组件 【Widget】","【backgroundColor】 : 背景色 【Color】","【inactiveColor】 : 非激活色 【Color】","【activeColor】 : 激活色 【Color】","【iconSize】 : 图标大小 【double】","【border】 : 边线 【Border】","【onTap】 : 点击事件 【Function(int)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_en-US.json deleted file mode 100644 index f54f0ad48..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTabScaffold","path":"/src/cupertino/tab_scaffold.dart","parents":["StatefulWidget","Widget"],"desc":" Implements a tabbed iOS application's root layout and behavior structure.","fields":[{"name":"tabBar","type":"CupertinoTabBar","required":true,"desc":"The [tabBar] is a [CupertinoTabBar] drawn at the bottom of the screen that lets the user switch between different tabs in the main content area when present."},{"name":"controller","type":"CupertinoTabController?","desc":"Controls the currently selected tab index of the [tabBar], as well as the active tab index of the [tabBuilder]. Providing a different [controller] will also update the scaffold's current active index to the new controller's index value."},{"name":"tabBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"An [IndexedWidgetBuilder] that's called when tabs become active."},{"name":"backgroundColor","type":"Color?","desc":"The color of the widget that underlies the entire scaffold."},{"name":"resizeToAvoidBottomInset","type":"bool","required":true,"desc":"Whether the body should size itself to avoid the window's bottom inset."},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the [CupertinoTabScaffold]."}],"id":158,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoTabScaffold","desc":["【tabBar】: Tab bar 【CupertinoTabBar】","【backgroundColor】: Background color 【Color】","【controller】: Controller 【CupertinoTabController】","【tabBuilder】: Page builder 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_zh-CN.json deleted file mode 100644 index 3c74e82d4..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTabScaffold/CupertinoTabScaffold_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTabScaffold","path":"/src/cupertino/tab_scaffold.dart","parents":["StatefulWidget","Widget"],"desc":"实现标签式 iOS 应用程序的根布局和行为结构。","fields":[{"name":"tabBar","type":"CupertinoTabBar","required":true,"desc":"[tabBar] 是绘制在屏幕底部的 [CupertinoTabBar],让用户在存在时在主内容区域的不同标签之间切换。"},{"name":"controller","type":"CupertinoTabController?","desc":"控制 [tabBar] 的当前选定标签索引,以及 [tabBuilder] 的活动标签索引。提供不同的 [controller] 也会将脚手架的当前活动索引更新为新控制器的索引值。"},{"name":"tabBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"标签变为活动时调用的 [IndexedWidgetBuilder]。"},{"name":"backgroundColor","type":"Color?","desc":"整个脚手架下方小部件的颜色。"},{"name":"resizeToAvoidBottomInset","type":"bool","required":true,"desc":"主体是否应调整自身大小以避免窗口的底部插入。"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [CupertinoTabScaffold] 状态的恢复 ID。"}],"id":158,"localName":"iOS页签脚手架","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoTabScaffold基本用法","desc":["【tabBar】 : 页签条 【CupertinoTabBar】","【backgroundColor】 : 背景色 【Color】","【controller】 : 控制器 【CupertinoTabController】","【tabBuilder】 : 页面构造器 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_en-US.json deleted file mode 100644 index 884bdb282..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTabView","path":"/src/cupertino/tab_view.dart","parents":["StatefulWidget","Widget"],"desc":" A single tab view with its own [Navigator] state and history.","fields":[{"name":"builder","type":"WidgetBuilder?","desc":"The widget builder for the default route of the tab view ([Navigator.defaultRouteName], which is `/`)."},{"name":"navigatorKey","type":"GlobalKey?","desc":"A key to use when building this widget's [Navigator]."},{"name":"defaultTitle","type":"String?","desc":"The title of the default route."},{"name":"routes","type":"Map?","desc":"This tab view's routing table."},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"The route generator callback used when the tab view is navigated to a named route."},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"Called when [onGenerateRoute] also fails to generate a route."},{"name":"navigatorObservers","type":"List","required":true,"desc":"The list of observers for the [Navigator] created in this tab view."},{"name":"restorationScopeId","type":"String?","desc":"Restoration ID to save and restore the state of the [Navigator] built by this [CupertinoTabView]."}],"id":229,"lever":3,"family":1,"linkIds":[65,158],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoTabView","desc":["【builder】 : Homepage builder 【WidgetBuilder】","【navigatorObservers】 : Route observers 【List】","【routes】 : Route mapping 【Map】","【onGenerateRoute】 : Route factory 【RouteFactory】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_zh-CN.json deleted file mode 100644 index 69f3489d5..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTabView/CupertinoTabView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTabView","path":"/src/cupertino/tab_view.dart","parents":["StatefulWidget","Widget"],"desc":"具有自己的 [Navigator] 状态和历史记录的单个标签视图。","fields":[{"name":"builder","type":"WidgetBuilder?","desc":"标签视图默认路由的小部件构建器([Navigator.defaultRouteName],即 `/`)。"},{"name":"navigatorKey","type":"GlobalKey?","desc":"构建此小部件的 [Navigator] 时使用的键。"},{"name":"defaultTitle","type":"String?","desc":"默认路由的标题。"},{"name":"routes","type":"Map?","desc":"此标签视图的路由表。"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"标签视图导航到命名路由时使用的路由生成器回调。"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"当 [onGenerateRoute] 也无法生成路由时调用。"},{"name":"navigatorObservers","type":"List","required":true,"desc":"在此标签视图中创建的 [Navigator] 的观察者列表。"},{"name":"restorationScopeId","type":"String?","desc":"保存和恢复此 [CupertinoTabView] 构建的 [Navigator] 状态的恢复 ID。"}],"id":229,"localName":"Cupertino页面","lever":3,"family":1,"linkIds":[65,158],"nodes":[{"file":"node1_base.dart","name":"CupertinoTabView基本使用","desc":["【builder】 : 主页构造器 【WidgetBuilder】","【navigatorObservers】 : 路由监听器 【List】","【routes】 : 路由映射 【Map】","【onGenerateRoute】 : 路由工厂 【RouteFactory】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_en-US.json deleted file mode 100644 index 011f06fd0..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextField","path":"/src/cupertino/text_field.dart","parents":["StatefulWidget","Widget"],"desc":" An iOS-style text field.","fields":[{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"decoration","type":"BoxDecoration?","desc":"Controls the [BoxDecoration] of the box behind the text input."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"Padding around the text entry area between the [prefix] and [suffix] or the clear button when [clearButtonMode] is not never."},{"name":"placeholder","type":"String?","desc":"A lighter colored placeholder hint that appears on the first line of the text field when the text entry is empty."},{"name":"placeholderStyle","type":"TextStyle?","desc":"The style to use for the placeholder text."},{"name":"prefix","type":"Widget?","desc":"An optional [Widget] to display before the text."},{"name":"prefixMode","type":"OverlayVisibilityMode","required":true,"desc":"Controls the visibility of the [prefix] widget based on the state of text entry when the [prefix] argument is not null."},{"name":"suffix","type":"Widget?","desc":"An optional [Widget] to display after the text."},{"name":"suffixMode","type":"OverlayVisibilityMode","required":true,"desc":"Controls the visibility of the [suffix] widget based on the state of text entry when the [suffix] argument is not null."},{"name":"crossAxisAlignment","type":"CrossAxisAlignment","required":true,"desc":"Controls the vertical alignment of the [prefix] and the [suffix] widget in relation to content."},{"name":"clearButtonMode","type":"OverlayVisibilityMode","required":true,"desc":"Show an iOS-style clear button to clear the current text entry."},{"name":"clearButtonSemanticLabel","type":"String?","desc":"The semantic label for the clear button used by screen readers."},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.widgets.editableText.keyboardType}"},{"name":"textInputAction","type":"TextInputAction?","desc":"The type of action button to use for the keyboard."},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"style","type":"TextStyle?","desc":"The style to use for the text being edited."},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"Configuration of toolbar options."},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@macro flutter.material.InputDecorator.textAlignVertical}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.readOnly}"},{"name":"showCursor","type":"bool?","desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@macro flutter.widgets.editableText.obscuringCharacter}"},{"name":"obscureText","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.obscureText}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines} * [expands], which determines whether the field should fill the height of its parent."},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines} * [expands], which determines whether the field should fill the height of its parent."},{"name":"expands","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.expands}"},{"name":"maxLength","type":"int?","desc":"The maximum number of characters (Unicode grapheme clusters) to allow in the text field."},{"name":"maxLengthEnforcement","type":"MaxLengthEnforcement?","desc":"Determines how the [maxLength] limit should be enforced."},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onChanged}"},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@macro flutter.widgets.editableText.onEditingComplete}"},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onSubmitted}"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapOutside}"},{"name":"onTapUpOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapUpOutside}"},{"name":"inputFormatters","type":"List?","desc":"{@macro flutter.widgets.editableText.inputFormatters}"},{"name":"enabled","type":"bool","required":true,"desc":"Disables the text field when false."},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius","required":true,"desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"The color to use when painting the cursor."},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"Controls how tall the selection highlight boxes are computed to be."},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"Controls how wide the selection highlight boxes are computed to be."},{"name":"keyboardAppearance","type":"Brightness?","desc":"The appearance of the keyboard."},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.editableText.scrollController}"},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"onTap","type":"GestureTapCallback?","desc":"{@macro flutter.material.textfield.onTap}"},{"name":"autofillHints","type":"Iterable?","desc":"{@macro flutter.widgets.editableText.autofillHints} {@macro flutter.services.AutofillConfiguration.autofillHints}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.material.textfield.restorationId}"},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.scribbleEnabled}"},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.stylusHandwritingEnabled}"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@macro flutter.widgets.editableText.contentInsertionConfiguration}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"Configuration for the text field magnifier."},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@macro flutter.widgets.EditableText.spellCheckConfiguration}"},{"name":"undoController","type":"UndoHistoryController?","desc":"{@macro flutter.widgets.undoHistory.controller}"}],"id":245,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoTextField","desc":["【placeholder】 : Hint text 【String】","【showCursor】 : Whether to show cursor 【bool】","【minLines】 : Minimum number of lines 【int】","【maxLines】 : Maximum number of lines 【int】","【padding】 : Padding 【EdgeInsetsGeometry】","【onChanged】 : Change listener 【ValueChanged】","【onTap】: Tap listener 【GestureTapCallback】","【onSubmitted】: Submit listener 【ValueChanged】"]},{"file":"node2_style.dart","name":"Common Style Properties of CupertinoTextField","desc":["【style】 : Input text style 【TextStyle】","【prefix】: Prefix component 【Widget】","【prefixMode】: Prefix mode 【OverlayVisibilityMode】","【suffix】: Suffix component 【Widget】","【suffixMode】: Suffix mode 【OverlayVisibilityMode】","【cursorColor】: Cursor color 【Color】","【cursorWidth】: Cursor width 【double】","【cursorRadius】: Cursor radius 【Radius】","【readOnly】: Whether read-only 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_zh-CN.json deleted file mode 100644 index a0f10f02a..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextField/CupertinoTextField_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextField","path":"/src/cupertino/text_field.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的文本字段。","fields":[{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"controller","type":"TextEditingController?","desc":"控制正在编辑的文本。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"decoration","type":"BoxDecoration?","desc":"控制文本输入后面框的 [BoxDecoration]。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"当 [clearButtonMode] 不为 never 时,[prefix] 和 [suffix] 或清除按钮之间文本输入区域周围的内边距。"},{"name":"placeholder","type":"String?","desc":"当文本输入为空时出现在文本字段第一行的较浅颜色占位符提示。"},{"name":"placeholderStyle","type":"TextStyle?","desc":"用于占位符文本的样式。"},{"name":"prefix","type":"Widget?","desc":"在文本前显示的可选 [Widget]。"},{"name":"prefixMode","type":"OverlayVisibilityMode","required":true,"desc":"当 [prefix] 参数不为 null 时,根据文本输入状态控制 [prefix] 小部件的可见性。"},{"name":"suffix","type":"Widget?","desc":"在文本后显示的可选 [Widget]。"},{"name":"suffixMode","type":"OverlayVisibilityMode","required":true,"desc":"当 [suffix] 参数不为 null 时,根据文本输入状态控制 [suffix] 小部件的可见性。"},{"name":"crossAxisAlignment","type":"CrossAxisAlignment","required":true,"desc":"控制 [prefix] 和 [suffix] 小部件相对于内容的垂直对齐。"},{"name":"clearButtonMode","type":"OverlayVisibilityMode","required":true,"desc":"显示 iOS 风格的清除按钮以清除当前文本输入。"},{"name":"clearButtonSemanticLabel","type":"String?","desc":"屏幕阅读器使用的清除按钮的语义标签。"},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.widgets.editableText.keyboardType}"},{"name":"textInputAction","type":"TextInputAction?","desc":"用于键盘的操作按钮类型。"},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"style","type":"TextStyle?","desc":"用于正在编辑的文本的样式。"},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"工具栏选项的配置。"},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@macro flutter.material.InputDecorator.textAlignVertical}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.readOnly}"},{"name":"showCursor","type":"bool?","desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@macro flutter.widgets.editableText.obscuringCharacter}"},{"name":"obscureText","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.obscureText}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines} * [expands],确定字段是否应填充其父级的高度。"},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines} * [expands],确定字段是否应填充其父级的高度。"},{"name":"expands","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.expands}"},{"name":"maxLength","type":"int?","desc":"文本字段中允许的最大字符数(Unicode 字素簇)。"},{"name":"maxLengthEnforcement","type":"MaxLengthEnforcement?","desc":"确定如何强制执行 [maxLength] 限制。"},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onChanged}"},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@macro flutter.widgets.editableText.onEditingComplete}"},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onSubmitted}"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapOutside}"},{"name":"onTapUpOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapUpOutside}"},{"name":"inputFormatters","type":"List?","desc":"{@macro flutter.widgets.editableText.inputFormatters}"},{"name":"enabled","type":"bool","required":true,"desc":"为 false 时禁用文本字段。"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius","required":true,"desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"绘制光标时使用的颜色。"},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"控制选择高亮框的计算高度。"},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"控制选择高亮框的计算宽度。"},{"name":"keyboardAppearance","type":"Brightness?","desc":"键盘的外观。"},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.editableText.scrollController}"},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"onTap","type":"GestureTapCallback?","desc":"{@macro flutter.material.textfield.onTap}"},{"name":"autofillHints","type":"Iterable?","desc":"{@macro flutter.widgets.editableText.autofillHints} {@macro flutter.services.AutofillConfiguration.autofillHints}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.material.textfield.restorationId}"},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.scribbleEnabled}"},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.stylusHandwritingEnabled}"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@macro flutter.widgets.editableText.contentInsertionConfiguration}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"文本字段放大镜的配置。"},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@macro flutter.widgets.EditableText.spellCheckConfiguration}"},{"name":"undoController","type":"UndoHistoryController?","desc":"{@macro flutter.widgets.undoHistory.controller}"}],"id":245,"localName":"iOS风格输入框","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoTextField基础使用","desc":["【placeholder】 : 提示文字 【String】","【showCursor】 : 是否显示游标 【bool】","【minLines】 : 最小行数 【int】","【maxLines】 : 最大行数 【int】","【padding】 : 内边距 【EdgeInsetsGeometry】","【onChanged】 : 变化监听 【ValueChanged】","【onTap】: 点击监听 【GestureTapCallback】","【onSubmitted】: 提交监听 【ValueChanged】"]},{"file":"node2_style.dart","name":"CupertinoTextField常用样式属性","desc":["【style】 : 输入文字样式 【TextStyle】","【prefix】: 前缀组件 【Widget】","【prefixMode】: 前缀模式 【OverlayVisibilityMode】","【suffix】: 后缀组件 【Widget】","【suffixMode】: 后缀模式 【OverlayVisibilityMode】","【cursorColor】: 游标颜色 【Color】","【cursorWidth】: 游标宽度 【double】","【cursorRadius】: 游标圆角 【Radius】","【readOnly】: 是否只读 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_en-US.json deleted file mode 100644 index 67b033562..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextFormFieldRow","path":"/src/cupertino/text_form_field_row.dart","parents":["FormField","StatefulWidget","Widget"],"desc":" Creates a [CupertinoFormRow] containing a [FormField] that wraps a [CupertinoTextField].","fields":[{"name":"prefix","type":"Widget?","desc":"A widget that is displayed at the start of the row."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Content padding for the row."},{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited."},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.material.TextFormField.onChanged}"}],"id":395,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_zh-CN.json deleted file mode 100644 index a82a0ff3d..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextFormFieldRow/CupertinoTextFormFieldRow_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextFormFieldRow","path":"/src/cupertino/text_form_field_row.dart","parents":["FormField","StatefulWidget","Widget"],"desc":"创建包含包装 [CupertinoTextField] 的 [FormField] 的 [CupertinoFormRow]。","fields":[{"name":"prefix","type":"Widget?","desc":"显示在行开始处的小部件。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"行的内容内边距。"},{"name":"controller","type":"TextEditingController?","desc":"控制正在编辑的文本。"},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.material.TextFormField.onChanged}"}],"id":395,"localName":"CupertinoTextFormFieldRow","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_en-US.json deleted file mode 100644 index a8b91f938..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextMagnifier","path":"/src/cupertino/magnifier.dart","parents":["StatefulWidget","Widget"],"desc":" A [CupertinoMagnifier] used for magnifying text in cases where a user's finger may be blocking the point of interest, like a selection handle.","fields":[{"name":"animationCurve","type":"Curve","required":true,"desc":"The curve used for the in / out animations."},{"name":"controller","type":"MagnifierController","required":true,"desc":"This magnifier's controller."},{"name":"dragResistance","type":"double","required":true,"desc":"A drag resistance on the downward Y position of the lens."},{"name":"hideBelowThreshold","type":"double","required":true,"desc":"The difference in Y between the gesture position and the caret center so that the magnifier hides itself."},{"name":"horizontalScreenEdgePadding","type":"double","required":true,"desc":"The padding on either edge of the screen that any part of the magnifier cannot exist past."},{"name":"magnifierInfo","type":"ValueNotifier","required":true,"desc":"[CupertinoTextMagnifier] will determine its own positioning based on the [MagnifierInfo] of this notifier."}],"id":396,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_zh-CN.json deleted file mode 100644 index 24eb7fc26..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextMagnifier/CupertinoTextMagnifier_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextMagnifier","path":"/src/cupertino/magnifier.dart","parents":["StatefulWidget","Widget"],"desc":"用于在用户手指可能阻挡兴趣点(如选择手柄)的情况下放大文本的 [CupertinoMagnifier]。","fields":[{"name":"animationCurve","type":"Curve","required":true,"desc":"用于进入/退出动画的曲线。"},{"name":"controller","type":"MagnifierController","required":true,"desc":"此放大镜的控制器。"},{"name":"dragResistance","type":"double","required":true,"desc":"镜头向下 Y 位置的拖动阻力。"},{"name":"hideBelowThreshold","type":"double","required":true,"desc":"手势位置和插入符中心之间的 Y 差异,以便放大镜隐藏自己。"},{"name":"horizontalScreenEdgePadding","type":"double","required":true,"desc":"屏幕任一边缘的内边距,放大镜的任何部分都不能超出此范围。"},{"name":"magnifierInfo","type":"ValueNotifier","required":true,"desc":"[CupertinoTextMagnifier] 将根据此通知器的 [MagnifierInfo] 确定自己的定位。"}],"id":396,"localName":"CupertinoTextMagnifier","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_en-US.json deleted file mode 100644 index 4141bdbce..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextSelectionToolbar","path":"/src/cupertino/text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" An iOS-style text selection toolbar.","fields":[{"name":"anchorAbove","type":"Offset","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.anchorAbove}"},{"name":"anchorBelow","type":"Offset","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.anchorBelow}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"},{"name":"toolbarBuilder","type":"CupertinoToolbarBuilder","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.toolbarBuilder}"}],"id":299,"lever":1,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"This component is not available","desc":["【-】 : - 【-】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_zh-CN.json deleted file mode 100644 index a5526e370..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbar/CupertinoTextSelectionToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextSelectionToolbar","path":"/src/cupertino/text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"iOS 风格的文本选择工具栏。","fields":[{"name":"anchorAbove","type":"Offset","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.anchorAbove}"},{"name":"anchorBelow","type":"Offset","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.anchorBelow}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"},{"name":"toolbarBuilder","type":"CupertinoToolbarBuilder","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.toolbarBuilder}"}],"id":299,"localName":"ios文字选择工具条","lever":1,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"该组件无法使用","desc":["【-】 : - 【-】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_en-US.json deleted file mode 100644 index 6af01d655..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextSelectionToolbarButton","path":"/src/cupertino/text_selection_toolbar_button.dart","parents":["StatefulWidget","Widget"],"desc":" A button in the style of the iOS text selection toolbar buttons.","fields":[{"name":"child","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.child} The child of this button."},{"name":"onPressed","type":"VoidCallback?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed} Called when this button is pressed. {@endtemplate}"},{"name":"buttonItem","type":"ContextMenuButtonItem?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed} The buttonItem used to generate the button when using [CupertinoTextSelectionToolbarButton.buttonItem]. {@endtemplate}"},{"name":"text","type":"String?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.text} The text used in the button's label when using [CupertinoTextSelectionToolbarButton.text]. {@endtemplate}"}],"id":397,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_zh-CN.json deleted file mode 100644 index 916d685c8..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTextSelectionToolbarButton/CupertinoTextSelectionToolbarButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTextSelectionToolbarButton","path":"/src/cupertino/text_selection_toolbar_button.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 文本选择工具栏按钮样式的按钮。","fields":[{"name":"child","type":"Widget?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.child} 此按钮的子项。"},{"name":"onPressed","type":"VoidCallback?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed} 按下此按钮时调用。{@endtemplate}"},{"name":"buttonItem","type":"ContextMenuButtonItem?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.onPressed} 使用 [CupertinoTextSelectionToolbarButton.buttonItem] 时用于生成按钮的 buttonItem。{@endtemplate}"},{"name":"text","type":"String?","desc":"{@template flutter.cupertino.CupertinoTextSelectionToolbarButton.text} 使用 [CupertinoTextSelectionToolbarButton.text] 时按钮标签中使用的文本。{@endtemplate}"}],"id":397,"localName":"CupertinoTextSelectionToolbarButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_en-US.json deleted file mode 100644 index 0d84d7a67..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTheme","path":"/src/cupertino/theme.dart","parents":["StatelessWidget","Widget"],"desc":" Applies a visual styling theme to descendant Cupertino widgets.","fields":[{"name":"data","type":"CupertinoThemeData","required":true,"desc":"The [CupertinoThemeData] styling for this theme."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":169,"lever":3,"family":0,"linkIds":[156,168],"nodes":[{"file":"node1_base.dart","name":"Text Style-TextTheme","desc":["Descendant components can obtain and use the theme data through CupertinoTheme.of."]},{"file":"node2_use.dart","name":"Usage of CupertinoThemeData","desc":["Like Theme, you can share specified properties among descendants, but there are fewer properties. Note that if you need to use the theme, you cannot obtain it in the current context."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_zh-CN.json deleted file mode 100644 index fd3ece290..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTheme/CupertinoTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTheme","path":"/src/cupertino/theme.dart","parents":["StatelessWidget","Widget"],"desc":"将视觉样式主题应用于后代 Cupertino 小部件。","fields":[{"name":"data","type":"CupertinoThemeData","required":true,"desc":"此主题的 [CupertinoThemeData] 样式。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":169,"localName":"iOS主题","lever":3,"family":0,"linkIds":[156,168],"nodes":[{"file":"node1_base.dart","name":"文字样式-TextTheme","desc":["后代组件可以通过CupertinoTheme.of获取主题的数据进行使用。"]},{"file":"node2_use.dart","name":"CupertinoThemeData的使用","desc":["和Theme一样可以通过指定的属性,让它们在后代中共享,不过属性较少。注意如果需要使用主题,不能在当前的context中获取。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_en-US.json deleted file mode 100644 index f795a2677..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTimerPicker","path":"/src/cupertino/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A countdown timer picker in iOS style.","fields":[{"name":"mode","type":"CupertinoTimerPickerMode","required":true,"desc":"The mode of the timer picker."},{"name":"initialTimerDuration","type":"Duration","required":true,"desc":"The initial duration of the countdown timer."},{"name":"minuteInterval","type":"int","required":true,"desc":"The granularity of the minute spinner. Must be a positive integer factor of 60."},{"name":"secondInterval","type":"int","required":true,"desc":"The granularity of the second spinner. Must be a positive integer factor of 60."},{"name":"onTimerDurationChanged","type":"ValueChanged","required":true,"desc":"Callback called when the timer duration changes."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"Defines how the timer picker should be positioned within its parent."},{"name":"backgroundColor","type":"Color?","desc":"Background color of timer picker."},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.cupertino.picker.itemExtent}"},{"name":"selectionOverlayBuilder","type":"SelectionOverlayBuilder?","desc":"A function that returns a widget that is overlaid on the picker to highlight the currently selected entry."}],"id":138,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CupertinoTimerPicker","desc":["【initialTimerDuration】: Initial time 【Duration】","【minuteInterval】: Minute interval 【double】","【secondInterval】: Second interval 【double】","【alignment】: Alignment 【AlignmentGeometry】","【backgroundColor】: Background color 【Color】","【mode】: Mode*3 【CupertinoTimerPickerMode】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_zh-CN.json deleted file mode 100644 index 1d73b55a1..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoTimerPicker/CupertinoTimerPicker_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoTimerPicker","path":"/src/cupertino/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"iOS 风格的倒计时器选择器。","fields":[{"name":"mode","type":"CupertinoTimerPickerMode","required":true,"desc":"计时器选择器的模式。"},{"name":"initialTimerDuration","type":"Duration","required":true,"desc":"倒计时器的初始持续时间。"},{"name":"minuteInterval","type":"int","required":true,"desc":"分钟旋转器的粒度。必须是 60 的正整数因子。"},{"name":"secondInterval","type":"int","required":true,"desc":"秒旋转器的粒度。必须是 60 的正整数因子。"},{"name":"onTimerDurationChanged","type":"ValueChanged","required":true,"desc":"计时器持续时间更改时调用的回调。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"定义计时器选择器在其父级内的定位方式。"},{"name":"backgroundColor","type":"Color?","desc":"计时器选择器的背景颜色。"},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.cupertino.picker.itemExtent}"},{"name":"selectionOverlayBuilder","type":"SelectionOverlayBuilder?","desc":"返回覆盖在选择器上以突出显示当前选定条目的小部件的函数。"}],"id":138,"localName":"iOS时间选择器","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoTimerPicker基本使用","desc":["【initialTimerDuration】 : 初始时间 【Duration】","【minuteInterval】 : 分钟间隔数 【double】","【secondInterval】 : 秒间隔数 【double】","【alignment】 : 对齐方式 【AlignmentGeometry】","【backgroundColor】 : 背景色 【Color】","【mode】 : 模式*3 【CupertinoTimerPickerMode】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_en-US.json b/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_en-US.json deleted file mode 100644 index c00871740..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoUserInterfaceLevel","path":"/src/cupertino/interface_level.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Establishes a subtree in which [CupertinoUserInterfaceLevel.of] resolves to the given visual elevation from the [CupertinoUserInterfaceLevelData]. This can be used to apply style differences based on a widget's elevation.","fields":[],"id":337,"lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to CupertinoUserInterfaceLevel","desc":["CupertinoUserInterfaceLevel.of(context) can retrieve CupertinoUserInterfaceLevelData. This component can also be used to set and share this data with the subtree. For more information about the data source, see: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_zh-CN.json deleted file mode 100644 index 8c1c62180..000000000 --- a/modules/widget_system/widgets/doc/widgets/CupertinoUserInterfaceLevel/CupertinoUserInterfaceLevel_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CupertinoUserInterfaceLevel","path":"/src/cupertino/interface_level.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"建立一个子树,其中 [CupertinoUserInterfaceLevel.of] 解析为来自 [CupertinoUserInterfaceLevelData] 的给定视觉高度。这可用于根据小部件的高度应用样式差异。","fields":[],"id":337,"localName":"用户接口等级","lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CupertinoUserInterfaceLevel 介绍","desc":["CupertinoUserInterfaceLevel.of(context) 可以获取 CupertinoUserInterfaceLevelData 数据。也可以使用该组件设置该数据与子树共享。关于数据原图详见: https:developer.apple.com/documentation/uikit/uiuserinterfacelevel"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_en-US.json b/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_en-US.json deleted file mode 100644 index ebe6223ab..000000000 --- a/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CustomMultiChildLayout","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that uses a delegate to size and position multiple children.","fields":[{"name":"delegate","type":"MultiChildLayoutDelegate","required":true,"desc":"The delegate that controls the layout of the children."}],"id":341,"lever":4,"family":3,"linkIds":[315,285],"nodes":[{"file":"node_01.dart","name":"Basic Usage of CustomMultiChildLayout","desc":["【children】: Set of child components 【List】","【delegate】: Layout delegate 【MultiChildLayoutDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_zh-CN.json deleted file mode 100644 index 007f72cd2..000000000 --- a/modules/widget_system/widgets/doc/widgets/CustomMultiChildLayout/CustomMultiChildLayout_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CustomMultiChildLayout","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用委托来调整大小和定位多个子项的小部件。","fields":[{"name":"delegate","type":"MultiChildLayoutDelegate","required":true,"desc":"控制子项布局的委托。"}],"id":341,"localName":"通用多子布局","lever":4,"family":3,"linkIds":[315,285],"nodes":[{"file":"node_01.dart","name":"CustomMultiChildLayout基本使用","desc":["【children】 : 子组件集 【List】","【delegate】 : 布局代理 【MultiChildLayoutDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_en-US.json b/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_en-US.json deleted file mode 100644 index a8923ba2a..000000000 --- a/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CustomPaint","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that provides a canvas on which to draw during the paint phase.","fields":[{"name":"painter","type":"CustomPainter?","desc":"The painter that paints before the children."},{"name":"foregroundPainter","type":"CustomPainter?","desc":"The painter that paints after the children."},{"name":"size","type":"Size","required":true,"desc":"The size that this [CustomPaint] should aim for, given the layout constraints, if there is no child."},{"name":"isComplex","type":"bool","required":true,"desc":"Whether the painting is complex enough to benefit from caching."},{"name":"willChange","type":"bool","required":true,"desc":"Whether the raster cache should be told that this painting is likely to change in the next frame."}],"id":166,"lever":5,"family":2,"linkIds":[],"nodes":[{"file":"node1_clock.dart","name":"CustomPaint Line Drawing","desc":["【painter】: Painter 【CustomPainter】"]},{"file":"node2_bezier.dart","name":"CustomPaint Bezier Curve","desc":["Flutter also supports complex drawings such as Bezier curves."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_zh-CN.json deleted file mode 100644 index 47fe09652..000000000 --- a/modules/widget_system/widgets/doc/widgets/CustomPaint/CustomPaint_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CustomPaint","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在绘制阶段提供画布进行绘制的小部件。","fields":[{"name":"painter","type":"CustomPainter?","desc":"在子项之前绘制的画家。"},{"name":"foregroundPainter","type":"CustomPainter?","desc":"在子项之后绘制的画家。"},{"name":"size","type":"Size","required":true,"desc":"如果没有子项,此 [CustomPaint] 在给定布局约束的情况下应该瞄准的大小。"},{"name":"isComplex","type":"bool","required":true,"desc":"绘制是否足够复杂以从缓存中受益。"},{"name":"willChange","type":"bool","required":true,"desc":"是否应该告诉光栅缓存此绘制可能在下一帧中更改。"}],"id":166,"localName":"绘制组件","lever":5,"family":2,"linkIds":[],"nodes":[{"file":"node1_clock.dart","name":"CustomPaint绘线图形","desc":["【painter】 : 绘画器 【CustomPainter】"]},{"file":"node2_bezier.dart","name":"CustomPaint绘线贝塞尔曲线","desc":["Flutter也支持贝塞尔曲线等复杂绘制。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_en-US.json deleted file mode 100644 index 24f0d7cf7..000000000 --- a/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CustomScrollView","path":"/src/widgets/scroll_view.dart","parents":["ScrollView","StatelessWidget","Widget"],"desc":" A [ScrollView] that creates custom scroll effects using [slivers].","fields":[{"name":"slivers","type":"List","required":true,"desc":"The slivers to place inside the viewport."}],"id":183,"lever":5,"family":4,"linkIds":[184,185,188],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CustomScrollView","desc":["【slivers】 : Child component list 【List】","【reverse】 : Whether to reverse 【bool】","【scrollDirection】 : Scroll direction 【Axis】","【controller】 : Controller 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_zh-CN.json deleted file mode 100644 index b014b692b..000000000 --- a/modules/widget_system/widgets/doc/widgets/CustomScrollView/CustomScrollView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CustomScrollView","path":"/src/widgets/scroll_view.dart","parents":["ScrollView","StatelessWidget","Widget"],"desc":"使用 [slivers] 创建自定义滚动效果的 [ScrollView]。","fields":[{"name":"slivers","type":"List","required":true,"desc":"放置在视口内的 sliver。"}],"id":183,"localName":"通用滑动视图","lever":5,"family":4,"linkIds":[184,185,188],"nodes":[{"file":"node1_base.dart","name":"CustomScrollView基本使用","desc":["【slivers】 : 子组件列表 【List】","【reverse】 : 是否反向 【bool】","【scrollDirection】 : 滑动方向 【Axis】","【controller】 : 控制器 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_en-US.json b/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_en-US.json deleted file mode 100644 index bd667e22e..000000000 --- a/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CustomSingleChildLayout","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that defers the layout of its single child to a delegate.","fields":[{"name":"delegate","type":"SingleChildLayoutDelegate","required":true,"desc":"The delegate that controls the layout of the child."}],"id":285,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of CustomSingleChildLayout","desc":["【delegate】 : delegate 【SingleChildLayoutDelegate】"]},{"file":"node2_offset.dart","name":"Offset Usage of CustomSingleChildLayout","desc":["The offset capability of the delegate can be used to position the child component with an offset."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_zh-CN.json b/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_zh-CN.json deleted file mode 100644 index 334c69666..000000000 --- a/modules/widget_system/widgets/doc/widgets/CustomSingleChildLayout/CustomSingleChildLayout_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"CustomSingleChildLayout","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其单个子项的布局委托给委托的小部件。","fields":[{"name":"delegate","type":"SingleChildLayoutDelegate","required":true,"desc":"控制子项布局的委托。"}],"id":285,"localName":"通用单子布局","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"CustomSingleChildLayout基本使用","desc":["【delegate】 : 代理 【SingleChildLayoutDelegate】"]},{"file":"node2_offset.dart","name":"CustomSingleChildLayout的偏移使用","desc":["可以利用代理的偏移能力,对子组件进行偏移定位。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_en-US.json b/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_en-US.json deleted file mode 100644 index 2e2081554..000000000 --- a/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DataTable","path":"/src/material/data_table.dart","parents":["StatelessWidget","Widget"],"desc":" A data table that follows the [Material 2](https://material.io/go/design-data-tables) design specification.","fields":[{"name":"columns","type":"List","required":true,"desc":"The configuration and labels for the columns in the table."},{"name":"sortColumnIndex","type":"int?","desc":"The current primary sort key's column."},{"name":"sortAscending","type":"bool","required":true,"desc":"Whether the column mentioned in [sortColumnIndex], if any, is sorted in ascending order."},{"name":"onSelectAll","type":"ValueSetter?","desc":"Invoked when the user selects or unselects every row, using the checkbox in the heading row."},{"name":"decoration","type":"Decoration?","desc":"{@template flutter.material.dataTable.decoration} The background and border decoration for the table. {@endtemplate}"},{"name":"dataRowColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.dataTable.dataRowColor} The background color for the data rows."},{"name":"dataRowMinHeight","type":"double?","desc":"{@template flutter.material.dataTable.dataRowMinHeight} The minimum height of each row (excluding the row that contains column headings). {@endtemplate}"},{"name":"dataRowMaxHeight","type":"double?","desc":"{@template flutter.material.dataTable.dataRowMaxHeight} The maximum height of each row (excluding the row that contains column headings). {@endtemplate}"},{"name":"dataTextStyle","type":"TextStyle?","desc":"{@template flutter.material.dataTable.dataTextStyle} The text style for data rows. {@endtemplate}"},{"name":"headingRowColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.dataTable.headingRowColor} The background color for the heading row."},{"name":"headingRowHeight","type":"double?","desc":"{@template flutter.material.dataTable.headingRowHeight} The height of the heading row. {@endtemplate}"},{"name":"headingTextStyle","type":"TextStyle?","desc":"{@template flutter.material.dataTable.headingTextStyle} The text style for the heading row. {@endtemplate}"},{"name":"horizontalMargin","type":"double?","desc":"{@template flutter.material.dataTable.horizontalMargin} The horizontal margin between the edges of the table and the content in the first and last cells of each row."},{"name":"columnSpacing","type":"double?","desc":"{@template flutter.material.dataTable.columnSpacing} The horizontal margin between the contents of each data column. {@endtemplate}"},{"name":"showCheckboxColumn","type":"bool","required":true,"desc":"{@template flutter.material.dataTable.showCheckboxColumn} Whether the widget should display checkboxes for selectable rows."},{"name":"rows","type":"List","required":true,"desc":"The data to show in each row (excluding the row that contains the column headings)."},{"name":"dividerThickness","type":"double?","desc":"{@template flutter.material.dataTable.dividerThickness} The width of the divider that appears between [TableRow]s."},{"name":"showBottomBorder","type":"bool","required":true,"desc":"Whether a border at the bottom of the table is displayed."},{"name":"checkboxHorizontalMargin","type":"double?","desc":"{@template flutter.material.dataTable.checkboxHorizontalMargin} Horizontal margin around the checkbox, if it is displayed. {@endtemplate}"},{"name":"border","type":"TableBorder?","desc":"The style to use when painting the boundary and interior divisions of the table."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":102,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DataTable","desc":["【columns】 : columns 【List】","【rows】 : rows 【List】"]},{"file":"node2_operation.dart","name":"Sorting in DataTable","desc":["【sortColumnIndex】 : column index 【int】","【columnSpacing】 : column spacing 【double】","【sortAscending】 : ascending order 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_zh-CN.json deleted file mode 100644 index 8886617e8..000000000 --- a/modules/widget_system/widgets/doc/widgets/DataTable/DataTable_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DataTable","path":"/src/material/data_table.dart","parents":["StatelessWidget","Widget"],"desc":"遵循 [Material 2](https://material.io/go/design-data-tables) 设计规范的数据表。","fields":[{"name":"columns","type":"List","required":true,"desc":"表中列的配置和标签。"},{"name":"sortColumnIndex","type":"int?","desc":"当前主要排序键的列。"},{"name":"sortAscending","type":"bool","required":true,"desc":"[sortColumnIndex] 中提到的列(如果有)是否按升序排序。"},{"name":"onSelectAll","type":"ValueSetter?","desc":"当用户使用标题行中的复选框选择或取消选择每一行时调用。"},{"name":"decoration","type":"Decoration?","desc":"{@template flutter.material.dataTable.decoration} 表的背景和边框装饰。{@endtemplate}"},{"name":"dataRowColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.dataTable.dataRowColor} 数据行的背景颜色。"},{"name":"dataRowMinHeight","type":"double?","desc":"{@template flutter.material.dataTable.dataRowMinHeight} 每行的最小高度(不包括包含列标题的行)。{@endtemplate}"},{"name":"dataRowMaxHeight","type":"double?","desc":"{@template flutter.material.dataTable.dataRowMaxHeight} 每行的最大高度(不包括包含列标题的行)。{@endtemplate}"},{"name":"dataTextStyle","type":"TextStyle?","desc":"{@template flutter.material.dataTable.dataTextStyle} 数据行的文本样式。{@endtemplate}"},{"name":"headingRowColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.dataTable.headingRowColor} 标题行的背景颜色。"},{"name":"headingRowHeight","type":"double?","desc":"{@template flutter.material.dataTable.headingRowHeight} 标题行的高度。{@endtemplate}"},{"name":"headingTextStyle","type":"TextStyle?","desc":"{@template flutter.material.dataTable.headingTextStyle} 标题行的文本样式。{@endtemplate}"},{"name":"horizontalMargin","type":"double?","desc":"{@template flutter.material.dataTable.horizontalMargin} 表边缘与每行第一个和最后一个单元格内容之间的水平边距。"},{"name":"columnSpacing","type":"double?","desc":"{@template flutter.material.dataTable.columnSpacing} 每个数据列内容之间的水平边距。{@endtemplate}"},{"name":"showCheckboxColumn","type":"bool","required":true,"desc":"{@template flutter.material.dataTable.showCheckboxColumn} 小部件是否应为可选择的行显示复选框。"},{"name":"rows","type":"List","required":true,"desc":"在每行中显示的数据(不包括包含列标题的行)。"},{"name":"dividerThickness","type":"double?","desc":"{@template flutter.material.dataTable.dividerThickness} 出现在 [TableRow] 之间的分隔符宽度。"},{"name":"showBottomBorder","type":"bool","required":true,"desc":"是否显示表底部的边框。"},{"name":"checkboxHorizontalMargin","type":"double?","desc":"{@template flutter.material.dataTable.checkboxHorizontalMargin} 复选框周围的水平边距(如果显示)。{@endtemplate}"},{"name":"border","type":"TableBorder?","desc":"绘制表的边界和内部分割时使用的样式。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":102,"localName":"数据表格","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DataTable基本使用","desc":["【columns】 : 列 【List】","【rows】 : 行 【List】"]},{"file":"node2_operation.dart","name":"DataTable的sort","desc":["【sortColumnIndex】 : 列号 【int】","【columnSpacing】 : 列间距 【double】","【sortAscending】 : 是否顺序 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_en-US.json deleted file mode 100644 index 75708ef89..000000000 --- a/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DataTableTheme","path":"/src/material/data_table_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a data table theme to descendant [DataTable] widgets.","fields":[{"name":"data","type":"DataTableThemeData","required":true,"desc":"The properties used for all descendant [DataTable] widgets."}],"id":398,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_zh-CN.json deleted file mode 100644 index 39bf3e1dc..000000000 --- a/modules/widget_system/widgets/doc/widgets/DataTableTheme/DataTableTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DataTableTheme","path":"/src/material/data_table_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将数据表主题应用于后代 [DataTable] 小部件。","fields":[{"name":"data","type":"DataTableThemeData","required":true,"desc":"用于所有后代 [DataTable] 小部件的属性。"}],"id":398,"localName":"DataTableTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_en-US.json deleted file mode 100644 index 5a9f0fd99..000000000 --- a/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DatePickerDialog","path":"/src/material/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A Material-style date picker dialog.","fields":[{"name":"initialDate","type":"DateTime?","desc":"The initially selected [DateTime] that the picker should display."},{"name":"firstDate","type":"DateTime","required":true,"desc":"The earliest allowable [DateTime] that the user can select."},{"name":"lastDate","type":"DateTime","required":true,"desc":"The latest allowable [DateTime] that the user can select."},{"name":"currentDate","type":"DateTime","required":true,"desc":"The [DateTime] representing today. It will be highlighted in the day grid."},{"name":"initialEntryMode","type":"DatePickerEntryMode","required":true,"desc":"The initial mode of date entry method for the date picker dialog."},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"Function to provide full control over which [DateTime] can be selected."},{"name":"cancelText","type":"String?","desc":"The text that is displayed on the cancel button."},{"name":"confirmText","type":"String?","desc":"The text that is displayed on the confirm button."},{"name":"helpText","type":"String?","desc":"The text that is displayed at the top of the header."},{"name":"initialCalendarMode","type":"DatePickerMode","required":true,"desc":"The initial display of the calendar picker."},{"name":"errorFormatText","type":"String?","desc":"The error text displayed if the entered date is not in the correct format."},{"name":"errorInvalidText","type":"String?","desc":"The error text displayed if the date is not valid."},{"name":"fieldHintText","type":"String?","desc":"The hint text displayed in the [TextField]."},{"name":"fieldLabelText","type":"String?","desc":"The label text displayed in the [TextField]."},{"name":"keyboardType","type":"TextInputType?","desc":"{@template flutter.material.datePickerDialog} The keyboard type of the [TextField]."},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the [DatePickerDialog]."},{"name":"onDatePickerModeChange","type":"ValueChanged?","desc":"Called when the [DatePickerDialog] is toggled between [DatePickerEntryMode.calendar],[DatePickerEntryMode.input]."},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToInputEntryModeIcon}"},{"name":"switchToCalendarEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToCalendarEntryModeIcon}"},{"name":"insetPadding","type":"EdgeInsets","required":true,"desc":"The amount of padding added to [MediaQueryData.viewInsets] on the outside of the dialog. This defines the minimum space between the screen's edges and the dialog."},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":399,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_zh-CN.json deleted file mode 100644 index e2dc067f2..000000000 --- a/modules/widget_system/widgets/doc/widgets/DatePickerDialog/DatePickerDialog_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DatePickerDialog","path":"/src/material/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"Material 风格的日期选择器对话框。","fields":[{"name":"initialDate","type":"DateTime?","desc":"选择器应显示的初始选定 [DateTime]。"},{"name":"firstDate","type":"DateTime","required":true,"desc":"用户可以选择的最早允许的 [DateTime]。"},{"name":"lastDate","type":"DateTime","required":true,"desc":"用户可以选择的最晚允许的 [DateTime]。"},{"name":"currentDate","type":"DateTime","required":true,"desc":"表示今天的 [DateTime]。它将在日期网格中突出显示。"},{"name":"initialEntryMode","type":"DatePickerEntryMode","required":true,"desc":"日期选择器对话框的日期输入方法的初始模式。"},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"提供对哪个 [DateTime] 可以选择的完全控制的函数。"},{"name":"cancelText","type":"String?","desc":"取消按钮上显示的文本。"},{"name":"confirmText","type":"String?","desc":"确认按钮上显示的文本。"},{"name":"helpText","type":"String?","desc":"在标题顶部显示的文本。"},{"name":"initialCalendarMode","type":"DatePickerMode","required":true,"desc":"日历选择器的初始显示。"},{"name":"errorFormatText","type":"String?","desc":"如果输入的日期格式不正确,显示的错误文本。"},{"name":"errorInvalidText","type":"String?","desc":"如果日期无效,显示的错误文本。"},{"name":"fieldHintText","type":"String?","desc":"在 [TextField] 中显示的提示文本。"},{"name":"fieldLabelText","type":"String?","desc":"在 [TextField] 中显示的标签文本。"},{"name":"keyboardType","type":"TextInputType?","desc":"{@template flutter.material.datePickerDialog} [TextField] 的键盘类型。"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [DatePickerDialog] 状态的恢复 ID。"},{"name":"onDatePickerModeChange","type":"ValueChanged?","desc":"当 [DatePickerDialog] 在 [DatePickerEntryMode.calendar]、[DatePickerEntryMode.input] 之间切换时调用。"},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToInputEntryModeIcon}"},{"name":"switchToCalendarEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToCalendarEntryModeIcon}"},{"name":"insetPadding","type":"EdgeInsets","required":true,"desc":"添加到对话框外部 [MediaQueryData.viewInsets] 的内边距量。这定义了屏幕边缘和对话框之间的最小空间。"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":399,"localName":"DatePickerDialog","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_en-US.json deleted file mode 100644 index 41f9d5720..000000000 --- a/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DatePickerTheme","path":"/src/material/date_picker_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the visual properties for [DatePickerDialog]s in this widget's subtree.","fields":[{"name":"data","type":"DatePickerThemeData","required":true,"desc":"Specifies the visual properties used by descendant [DatePickerDialog] widgets."}],"id":400,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_zh-CN.json deleted file mode 100644 index 9fd66c707..000000000 --- a/modules/widget_system/widgets/doc/widgets/DatePickerTheme/DatePickerTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DatePickerTheme","path":"/src/material/date_picker_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [DatePickerDialog] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"DatePickerThemeData","required":true,"desc":"指定后代 [DatePickerDialog] 小部件使用的视觉属性。"}],"id":400,"localName":"DatePickerTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_en-US.json deleted file mode 100644 index e84702510..000000000 --- a/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DateRangePickerDialog","path":"/src/material/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A Material-style date range picker dialog.","fields":[{"name":"initialDateRange","type":"DateTimeRange?","desc":"The date range that the date range picker starts with when it opens."},{"name":"firstDate","type":"DateTime","required":true,"desc":"The earliest allowable date on the date range."},{"name":"lastDate","type":"DateTime","required":true,"desc":"The latest allowable date on the date range."},{"name":"currentDate","type":"DateTime?","desc":"The [currentDate] represents the current day (i.e. today)."},{"name":"initialEntryMode","type":"DatePickerEntryMode","required":true,"desc":"The initial date range picker entry mode."},{"name":"cancelText","type":"String?","desc":"The label on the cancel button for the text input mode."},{"name":"confirmText","type":"String?","desc":"The label on the \"OK\" button for the text input mode."},{"name":"saveText","type":"String?","desc":"The label on the save button for the fullscreen calendar mode."},{"name":"helpText","type":"String?","desc":"The label displayed at the top of the dialog."},{"name":"errorInvalidRangeText","type":"String?","desc":"The message used when the date range is invalid (e.g. start date is after end date)."},{"name":"errorFormatText","type":"String?","desc":"The message used when an input text isn't in a proper date format."},{"name":"errorInvalidText","type":"String?","desc":"The message used when an input text isn't a selectable date."},{"name":"fieldStartHintText","type":"String?","desc":"The text used to prompt the user when no text has been entered in the start field."},{"name":"fieldEndHintText","type":"String?","desc":"The text used to prompt the user when no text has been entered in the end field."},{"name":"fieldStartLabelText","type":"String?","desc":"The label for the start date text input field."},{"name":"fieldEndLabelText","type":"String?","desc":"The label for the end date text input field."},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.material.datePickerDialog}"},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the [DateRangePickerDialog]."},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToInputEntryModeIcon}"},{"name":"switchToCalendarEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToCalendarEntryModeIcon}"},{"name":"selectableDayPredicate","type":"SelectableDayForRangePredicate?","desc":"Function to provide full control over which [DateTime] can be selected."},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":339,"lever":4,"family":1,"linkIds":[135,136,137],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DateRangePickerDialog","desc":["【firstDate】 : Earliest date 【DateTime】","【lastDate】 : Latest date 【DateTime】","【initialDateRange】 : Initial range 【DateTimeRange?】","【saveText】 : Save text 【String?】"]},{"file":"node2_diy.dart","name":"Customize DateRangePickerDialog","desc":["Modify the source code of DateRangePickerDialog to display a numerical background for month entries."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_zh-CN.json deleted file mode 100644 index 3d889e0fb..000000000 --- a/modules/widget_system/widgets/doc/widgets/DateRangePickerDialog/DateRangePickerDialog_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DateRangePickerDialog","path":"/src/material/date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"Material 风格的日期范围选择器对话框。","fields":[{"name":"initialDateRange","type":"DateTimeRange?","desc":"日期范围选择器打开时开始的日期范围。"},{"name":"firstDate","type":"DateTime","required":true,"desc":"日期范围上最早允许的日期。"},{"name":"lastDate","type":"DateTime","required":true,"desc":"日期范围上最晚允许的日期。"},{"name":"currentDate","type":"DateTime?","desc":"[currentDate] 表示当前日期(即今天)。"},{"name":"initialEntryMode","type":"DatePickerEntryMode","required":true,"desc":"初始日期范围选择器输入模式。"},{"name":"cancelText","type":"String?","desc":"文本输入模式下取消按钮的标签。"},{"name":"confirmText","type":"String?","desc":"文本输入模式下\\"},{"name":"saveText","type":"String?","desc":"全屏日历模式下保存按钮的标签。"},{"name":"helpText","type":"String?","desc":"显示在对话框顶部的标签。"},{"name":"errorInvalidRangeText","type":"String?","desc":"日期范围无效时使用的消息(例如开始日期在结束日期之后)。"},{"name":"errorFormatText","type":"String?","desc":"输入文本不是正确日期格式时使用的消息。"},{"name":"errorInvalidText","type":"String?","desc":"输入文本不是可选择日期时使用的消息。"},{"name":"fieldStartHintText","type":"String?","desc":"在开始字段中未输入文本时用于提示用户的文本。"},{"name":"fieldEndHintText","type":"String?","desc":"在结束字段中未输入文本时用于提示用户的文本。"},{"name":"fieldStartLabelText","type":"String?","desc":"开始日期文本输入字段的标签。"},{"name":"fieldEndLabelText","type":"String?","desc":"结束日期文本输入字段的标签。"},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.material.datePickerDialog}"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [DateRangePickerDialog] 状态的恢复 ID。"},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToInputEntryModeIcon}"},{"name":"switchToCalendarEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.date_picker.switchToCalendarEntryModeIcon}"},{"name":"selectableDayPredicate","type":"SelectableDayForRangePredicate?","desc":"提供对哪个 [DateTime] 可以选择的完全控制的函数。"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":339,"localName":"日期范围","lever":4,"family":1,"linkIds":[135,136,137],"nodes":[{"file":"node1_base.dart","name":"DateRangePickerDialog 基本使用","desc":["【firstDate】 : 最早日期 【DateTime】","【lastDate】 : 最晚日期 【DateTime】","【initialDateRange】 : 初始范围 【DateTimeRange?】","【saveText】 : 保存文字 【String?】"]},{"file":"node2_diy.dart","name":"魔改 DateRangePickerDialog","desc":["修改 DateRangePickerDialog 源码,使得月份条目显示数值背景。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_en-US.json deleted file mode 100644 index f9d03b1ef..000000000 --- a/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DecoratedBox","path":"/src/widgets/container.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that paints a [Decoration] either before or after its child paints.","fields":[{"name":"decoration","type":"Decoration","required":true,"desc":"What decoration to paint."},{"name":"position","type":"DecorationPosition","required":true,"desc":"Whether to paint the box decoration behind or in front of the child."}],"id":70,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DecoratedBox","desc":["【decoration】: Decoration object 【Decoration】","【position】: Foreground color (left)/Background color (right) 【DecorationPosition】"]},{"file":"node2_image.dart","name":"Shape and Image Decoration of DecoratedBox","desc":["【shape】: Shape 【BoxShape】","【image】: Background image 【DecorationImage】,"]},{"file":"node3_border.dart","name":"Border Decoration of DecoratedBox","desc":["【border】: Border 【BoxBorder】,"]},{"file":"node4_shape.dart","name":"Shape Decoration of DecoratedBox","desc":["You can specify the border shape through the ShapeDecoration object,"]},{"file":"node5_line.dart","name":"Bottom Line Decoration of DecoratedBox","desc":["You can specify the bottom line through the UnderlineTabIndicator object,"]},{"file":"node6_flutterLogo.dart","name":"FlutterLogoDecoration Decoration","desc":["You can specify Flutter icon decoration through the FlutterLogoDecoration object (not very useful),"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_zh-CN.json deleted file mode 100644 index eaf0dc432..000000000 --- a/modules/widget_system/widgets/doc/widgets/DecoratedBox/DecoratedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DecoratedBox","path":"/src/widgets/container.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在其子项绘制之前或之后绘制 [Decoration] 的小部件。","fields":[{"name":"decoration","type":"Decoration","required":true,"desc":"要绘制的装饰。"},{"name":"position","type":"DecorationPosition","required":true,"desc":"是否在子项后面或前面绘制框装饰。"}],"id":70,"localName":"装饰盒","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DecoratedBox基本使用","desc":["【decoration】 : 装饰对象 【Decoration】","【position】 : 前景色(左)/后景色(右) 【DecorationPosition】"]},{"file":"node2_image.dart","name":"DecoratedBox形状和图片装饰","desc":["【shape】 : 形状 【BoxShape】","【image】 : 背景图片 【DecorationImage】,"]},{"file":"node3_border.dart","name":"DecoratedBox边线装饰","desc":["【border】 : 边线 【BoxBorder】,"]},{"file":"node4_shape.dart","name":"DecoratedBox形状装饰","desc":["通过ShapeDecoration对象可指定边线形状,"]},{"file":"node5_line.dart","name":"DecoratedBox底线装饰","desc":["通过UnderlineTabIndicator对象可指定底线,"]},{"file":"node6_flutterLogo.dart","name":"FlutterLogoDecoration装饰","desc":["通过FlutterLogoDecoration对象可指定Flutter图标装饰(并没有什么太大的作用),"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_en-US.json deleted file mode 100644 index 0224cd6fc..000000000 --- a/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DecoratedBoxTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of a [DecoratedBox] that animates the different properties of its [Decoration].","fields":[{"name":"decoration","type":"Animation","required":true,"desc":"Animation of the decoration to paint."},{"name":"position","type":"DecorationPosition","required":true,"desc":"Whether to paint the box decoration behind or in front of the child."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":113,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DecoratedBoxTransition","desc":["【child】: Child component 【Widget】","【position】: Foreground/Background color 【DecorationPosition】","【decoration】: Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_zh-CN.json deleted file mode 100644 index 435b0ba41..000000000 --- a/modules/widget_system/widgets/doc/widgets/DecoratedBoxTransition/DecoratedBoxTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DecoratedBoxTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"[DecoratedBox] 的动画版本,对其 [Decoration] 的不同属性进行动画处理。","fields":[{"name":"decoration","type":"Animation","required":true,"desc":"要绘制的装饰动画。"},{"name":"position","type":"DecorationPosition","required":true,"desc":"是否在子项后面或前面绘制框装饰。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":113,"localName":"装饰变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DecoratedBoxTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【position】 : 前/背景色 【DecorationPosition】","【decoration】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_en-US.json b/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_en-US.json deleted file mode 100644 index 1b42f1a0e..000000000 --- a/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DecoratedSliver","path":"/src/widgets/decorated_sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver widget that paints a [Decoration] either before or after its child paints.","fields":[{"name":"decoration","type":"Decoration","required":true,"desc":"What decoration to paint."},{"name":"position","type":"DecorationPosition","required":true,"desc":"Whether to paint the box decoration behind or in front of the child."}],"id":209,"lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1.dart","name":"Basic Usage of DecoratedSliver","desc":["【sliver】: Child component 【Widget?】","【decoration】: Decoration object 【Decoration】","【position】: Decoration position 【DecorationPosition】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_zh-CN.json deleted file mode 100644 index f53c9108d..000000000 --- a/modules/widget_system/widgets/doc/widgets/DecoratedSliver/DecoratedSliver_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DecoratedSliver","path":"/src/widgets/decorated_sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在其子项绘制之前或之后绘制 [Decoration] 的 sliver 小部件。","fields":[{"name":"decoration","type":"Decoration","required":true,"desc":"要绘制的装饰。"},{"name":"position","type":"DecorationPosition","required":true,"desc":"是否在子项后面或前面绘制框装饰。"}],"id":209,"localName":"装饰滑片","lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1.dart","name":"DecoratedSliver 基本使用","desc":["【sliver】 : 孩子组件 【Widget?】","【decoration】 : 装饰对象 【Decoration】","【position】 : 装饰位置 【DecorationPosition】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_en-US.json deleted file mode 100644 index 72867325f..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultAssetBundle","path":"/src/widgets/basic.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" A widget that determines the default asset bundle for its descendants.","fields":[{"name":"bundle","type":"AssetBundle","required":true,"desc":"The bundle to use as a default."}],"id":320,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to DefaultAssetBundle","desc":["【bundle】: *Resource Bundle 【AssetBundle】","【child】: *Child Widget 【Widget】","We can define our own DefaultAssetBundle for use by subsequent nodes, or we can directly use the default one. This case demonstrates loading and displaying a resource image using the DefaultAssetBundle provided by the framework."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_zh-CN.json deleted file mode 100644 index caac12e30..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultAssetBundle/DefaultAssetBundle_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultAssetBundle","path":"/src/widgets/basic.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为其后代确定默认资产包的小部件。","fields":[{"name":"bundle","type":"AssetBundle","required":true,"desc":"用作默认值的包。"}],"id":320,"localName":"默认资源包","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DefaultAssetBundle 介绍","desc":["【bundle】 : *资源包 【AssetBundle】","【child】 : *子组件 【Widget】","我们可以定义自己的 DefaultAssetBundle 来供后续节点使用,也可以直接使用默认的。该案例演示通过框架提供的 DefaultAssetBundle 加载一张资源图片进行显示。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_en-US.json deleted file mode 100644 index 2acfb4165..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultSelectionStyle","path":"/src/widgets/default_selection_style.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" The selection style to apply to descendant [EditableText] widgets which don't have an explicit style.","fields":[{"name":"cursorColor","type":"Color?","desc":"The color of the text field's cursor."},{"name":"selectionColor","type":"Color?","desc":"The background color of selected text."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The [MouseCursor] for mouse pointers hovering over selectable Text widgets."}],"id":401,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_zh-CN.json deleted file mode 100644 index c863a2b07..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultSelectionStyle/DefaultSelectionStyle_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultSelectionStyle","path":"/src/widgets/default_selection_style.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"应用于没有显式样式的后代 [EditableText] 小部件的选择样式。","fields":[{"name":"cursorColor","type":"Color?","desc":"文本字段光标的颜色。"},{"name":"selectionColor","type":"Color?","desc":"选定文本的背景颜色。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"悬停在可选择文本小部件上的鼠标指针的 [MouseCursor]。"}],"id":401,"localName":"DefaultSelectionStyle","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_en-US.json deleted file mode 100644 index 4855c980a..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTabController","path":"/src/material/tab_controller.dart","parents":["StatefulWidget","Widget"],"desc":" The [TabController] for descendant widgets that don't specify one explicitly.","fields":[{"name":"length","type":"int","required":true,"desc":"The total number of tabs."},{"name":"initialIndex","type":"int","required":true,"desc":"The initial index of the selected tab."},{"name":"animationDuration","type":"Duration?","desc":"Controls the duration of DefaultTabController and TabBarView animations."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":230,"lever":3,"family":1,"linkIds":[148,59],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DefaultTabController","desc":["【length】: Number of tabs 【int】","【initialIndex】: Initial tab index 【int】","【child】: Component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_zh-CN.json deleted file mode 100644 index dbd0417e8..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTabController/DefaultTabController_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTabController","path":"/src/material/tab_controller.dart","parents":["StatefulWidget","Widget"],"desc":"未明确指定的后代小部件的 [TabController]。","fields":[{"name":"length","type":"int","required":true,"desc":"标签的总数。"},{"name":"initialIndex","type":"int","required":true,"desc":"选定标签的初始索引。"},{"name":"animationDuration","type":"Duration?","desc":"控制 DefaultTabController 和 TabBarView 动画的持续时间。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":230,"localName":"默认页签控制器","lever":3,"family":1,"linkIds":[148,59],"nodes":[{"file":"node1_base.dart","name":"DefaultTabController基本使用","desc":["【length】 : 页签数量 【int】","【initialIndex】 : 初始页签索引 【int】","【child】 : 组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_en-US.json deleted file mode 100644 index d726ccf5e..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTextEditingShortcuts","path":"/src/widgets/default_text_editing_shortcuts.dart","parents":["StatelessWidget","Widget"],"desc":" A widget with the shortcuts used for the default text editing behavior.","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":402,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_zh-CN.json deleted file mode 100644 index 2e4990741..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTextEditingShortcuts/DefaultTextEditingShortcuts_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTextEditingShortcuts","path":"/src/widgets/default_text_editing_shortcuts.dart","parents":["StatelessWidget","Widget"],"desc":"具有用于默认文本编辑行为的快捷键的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"}],"id":402,"localName":"DefaultTextEditingShortcuts","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_en-US.json deleted file mode 100644 index f2dc1d524..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTextHeightBehavior","path":"/src/widgets/text.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" The [TextHeightBehavior] that will apply to descendant [Text] and [EditableText] widgets which have not explicitly set [Text.textHeightBehavior].","fields":[{"name":"textHeightBehavior","type":"TextHeightBehavior","required":true,"desc":"{@macro dart.ui.textHeightBehavior}"}],"id":403,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_zh-CN.json deleted file mode 100644 index aeced7fe6..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTextHeightBehavior/DefaultTextHeightBehavior_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTextHeightBehavior","path":"/src/widgets/text.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"将应用于未明确设置 [Text.textHeightBehavior] 的后代 [Text] 和 [EditableText] 小部件的 [TextHeightBehavior]。","fields":[{"name":"textHeightBehavior","type":"TextHeightBehavior","required":true,"desc":"{@macro dart.ui.textHeightBehavior}"}],"id":403,"localName":"DefaultTextHeightBehavior","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_en-US.json deleted file mode 100644 index 868b996b9..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTextStyle","path":"/src/widgets/text.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" The text style to apply to descendant [Text] widgets which don't have an explicit style.","fields":[{"name":"style","type":"TextStyle","required":true,"desc":"The text style to apply."},{"name":"textAlign","type":"TextAlign?","desc":"How each line of text in the Text widget should be aligned horizontally."},{"name":"softWrap","type":"bool","required":true,"desc":"Whether the text should break at soft line breaks."},{"name":"overflow","type":"TextOverflow","required":true,"desc":"How visual overflow should be handled."},{"name":"maxLines","type":"int?","desc":"An optional maximum number of lines for the text to span, wrapping if necessary. If the text exceeds the given number of lines, it will be truncated according to [overflow]."},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"The strategy to use when calculating the width of the Text."},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"}],"id":324,"lever":3,"family":5,"linkIds":[2,114,124],"nodes":[{"file":"node1_base.dart","name":"DefaultTextStyle Usage","desc":["The properties are the same as Text, see details there.","Its function is: Set the default text style to be applied to [descendant widgets], note that descendant widgets can also specify their own styles."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_zh-CN.json deleted file mode 100644 index 0b49c96cd..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTextStyle/DefaultTextStyle_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTextStyle","path":"/src/widgets/text.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"应用于没有显式样式的后代 [Text] 小部件的文本样式。","fields":[{"name":"style","type":"TextStyle","required":true,"desc":"要应用的文本样式。"},{"name":"textAlign","type":"TextAlign?","desc":"Text 小部件中每行文本应如何水平对齐。"},{"name":"softWrap","type":"bool","required":true,"desc":"文本是否应在软换行符处换行。"},{"name":"overflow","type":"TextOverflow","required":true,"desc":"应如何处理视觉溢出。"},{"name":"maxLines","type":"int?","desc":"文本跨越的可选最大行数,必要时换行。如果文本超过给定的行数,将根据 [overflow] 截断。"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"计算文本宽度时使用的策略。"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"}],"id":324,"localName":"默认字体样式","lever":3,"family":5,"linkIds":[2,114,124],"nodes":[{"file":"node1_base.dart","name":"DefaultTextStyle使用","desc":["各属性同Text,详见之。","其功能是: 设置默认的文字样式应用于【后代组件】,注意后代组件也可以指定自身的样式"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_en-US.json deleted file mode 100644 index f5c876589..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTextStyleTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of a [DefaultTextStyle] that animates the different properties of its [TextStyle].","fields":[{"name":"textAlign","type":"TextAlign?","desc":"How the text should be aligned horizontally."},{"name":"softWrap","type":"bool","required":true,"desc":"Whether the text should break at soft line breaks."},{"name":"overflow","type":"TextOverflow","required":true,"desc":"How visual overflow should be handled."},{"name":"maxLines","type":"int?","desc":"An optional maximum number of lines for the text to span, wrapping if necessary."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":114,"lever":3,"family":1,"linkIds":[124,324],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DefaultTextStyleTransition","desc":["【child】 : Child component 【Widget】","【textAlign】 : Text alignment 【TextAlign】","【softWrap】 : Whether to wrap 【bool】","【maxLines】 : Maximum number of lines 【int】","【overflow】 : Overflow mode 【TextOverflow】","【style】 : Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_zh-CN.json deleted file mode 100644 index 848cae741..000000000 --- a/modules/widget_system/widgets/doc/widgets/DefaultTextStyleTransition/DefaultTextStyleTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DefaultTextStyleTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"[DefaultTextStyle] 的动画版本,对其 [TextStyle] 的不同属性进行动画处理。","fields":[{"name":"textAlign","type":"TextAlign?","desc":"文本应如何水平对齐。"},{"name":"softWrap","type":"bool","required":true,"desc":"文本是否应在软换行符处换行。"},{"name":"overflow","type":"TextOverflow","required":true,"desc":"应如何处理视觉溢出。"},{"name":"maxLines","type":"int?","desc":"文本跨越的可选最大行数,必要时换行。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":114,"localName":"文字样式变换","lever":3,"family":1,"linkIds":[124,324],"nodes":[{"file":"node1_base.dart","name":"DefaultTextStyleTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【textAlign】 : 文字对齐方式 【TextAlign】","【softWrap】 : 是否包裹 【bool】","【maxLines】 : 最大行数 【int】","【overflow】 : 溢出模式 【TextOverflow】","【style】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_en-US.json deleted file mode 100644 index 1160c5640..000000000 --- a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DesktopTextSelectionToolbar","path":"/src/material/desktop_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" A Material-style desktop text selection toolbar.","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@template flutter.material.DesktopTextSelectionToolbar.anchor} The point where the toolbar will attempt to position itself as closely as possible. {@endtemplate}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"}],"id":404,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_zh-CN.json deleted file mode 100644 index 2ba4efea0..000000000 --- a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbar/DesktopTextSelectionToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DesktopTextSelectionToolbar","path":"/src/material/desktop_text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"Material 风格的桌面文本选择工具栏。","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@template flutter.material.DesktopTextSelectionToolbar.anchor} 工具栏将尝试尽可能接近定位自己的点。{@endtemplate}"},{"name":"children","type":"List","required":true,"desc":"{@macro flutter.material.TextSelectionToolbar.children}"}],"id":404,"localName":"DesktopTextSelectionToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_en-US.json b/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_en-US.json deleted file mode 100644 index 3fc6f17d1..000000000 --- a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DesktopTextSelectionToolbarButton","path":"/src/material/desktop_text_selection_toolbar_button.dart","parents":["StatelessWidget","Widget"],"desc":" A [TextButton] for the Material desktop text selection toolbar.","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"{@macro flutter.material.TextSelectionToolbarTextButton.onPressed}"},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.material.TextSelectionToolbarTextButton.child}"}],"id":405,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_zh-CN.json deleted file mode 100644 index 941810ca0..000000000 --- a/modules/widget_system/widgets/doc/widgets/DesktopTextSelectionToolbarButton/DesktopTextSelectionToolbarButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DesktopTextSelectionToolbarButton","path":"/src/material/desktop_text_selection_toolbar_button.dart","parents":["StatelessWidget","Widget"],"desc":"Material 桌面文本选择工具栏的 [TextButton]。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"{@macro flutter.material.TextSelectionToolbarTextButton.onPressed}"},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.material.TextSelectionToolbarTextButton.child}"}],"id":405,"localName":"DesktopTextSelectionToolbarButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_en-US.json b/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_en-US.json deleted file mode 100644 index 9458a63dd..000000000 --- a/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Dialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design dialog.","fields":[{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.material.dialog.backgroundColor} The background color of the surface of this [Dialog]."},{"name":"elevation","type":"double?","desc":"{@template flutter.material.dialog.elevation} The z-coordinate of this [Dialog]."},{"name":"shadowColor","type":"Color?","desc":"{@template flutter.material.dialog.shadowColor} The color used to paint a drop shadow under the dialog's [Material], which reflects the dialog's [elevation]."},{"name":"surfaceTintColor","type":"Color?","desc":"{@template flutter.material.dialog.surfaceTintColor} The color used as a surface tint overlay on the dialog's background color, which reflects the dialog's [elevation]."},{"name":"insetAnimationDuration","type":"Duration","required":true,"desc":"{@template flutter.material.dialog.insetAnimationDuration} The duration of the animation to show when the system keyboard intrudes into the space that the dialog is placed in."},{"name":"insetAnimationCurve","type":"Curve","required":true,"desc":"{@template flutter.material.dialog.insetAnimationCurve} The curve to use for the animation shown when the system keyboard intrudes into the space that the dialog is placed in."},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@template flutter.material.dialog.insetPadding} The amount of padding added to [MediaQueryData.viewInsets] on the outside of the dialog. This defines the minimum space between the screen's edges and the dialog."},{"name":"clipBehavior","type":"Clip?","desc":"{@template flutter.material.dialog.clipBehavior} Controls how the contents of the dialog are clipped (or not) to the given [shape]."},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.dialog.shape} The shape of this dialog's border."},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@template flutter.material.dialog.alignment} How to align the [Dialog]."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"semanticsRole","type":"SemanticsRole","required":true,"desc":"The role this dialog represent in assist technologies."}],"id":126,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Dialog","desc":["【child】: Animation icon data 【Widget】","【elevation】: Shadow depth 【double】","【backgroundColor】: Background color 【Color】","【shape】: Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_zh-CN.json deleted file mode 100644 index e8e8deb4d..000000000 --- a/modules/widget_system/widgets/doc/widgets/Dialog/Dialog_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Dialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 对话框。","fields":[{"name":"backgroundColor","type":"Color?","desc":"{@template flutter.material.dialog.backgroundColor} 此 [Dialog] 表面的背景颜色。"},{"name":"elevation","type":"double?","desc":"{@template flutter.material.dialog.elevation} 此 [Dialog] 的 z 坐标。"},{"name":"shadowColor","type":"Color?","desc":"{@template flutter.material.dialog.shadowColor} 用于在对话框的 [Material] 下绘制投影的颜色,反映对话框的 [elevation]。"},{"name":"surfaceTintColor","type":"Color?","desc":"{@template flutter.material.dialog.surfaceTintColor} 用作对话框背景颜色上的表面色调叠加的颜色,反映对话框的 [elevation]。"},{"name":"insetAnimationDuration","type":"Duration","required":true,"desc":"{@template flutter.material.dialog.insetAnimationDuration} 当系统键盘侵入对话框放置空间时显示的动画持续时间。"},{"name":"insetAnimationCurve","type":"Curve","required":true,"desc":"{@template flutter.material.dialog.insetAnimationCurve} 当系统键盘侵入对话框放置空间时显示的动画使用的曲线。"},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@template flutter.material.dialog.insetPadding} 添加到对话框外部 [MediaQueryData.viewInsets] 的内边距量。这定义了屏幕边缘和对话框之间的最小空间。"},{"name":"clipBehavior","type":"Clip?","desc":"{@template flutter.material.dialog.clipBehavior} 控制对话框内容如何裁剪(或不裁剪)到给定的 [shape]。"},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.dialog.shape} 此对话框边框的形状。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@template flutter.material.dialog.alignment} 如何对齐 [Dialog]。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"semanticsRole","type":"SemanticsRole","required":true,"desc":"此对话框在辅助技术中代表的角色。"}],"id":126,"localName":"对话框","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Dialog基本使用","desc":["【child】 : 动画图标数据 【Widget】","【elevation】 : 影深 【double】","【backgroundColor】 : 背景色 【Color】","【shape】 : 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_en-US.json deleted file mode 100644 index cd4129add..000000000 --- a/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DialogTheme","path":"/src/material/dialog_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Defines a theme for [Dialog] widgets.","fields":[],"id":406,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_zh-CN.json deleted file mode 100644 index 2d756f412..000000000 --- a/modules/widget_system/widgets/doc/widgets/DialogTheme/DialogTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DialogTheme","path":"/src/material/dialog_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为 [Dialog] 小部件定义主题。","fields":[],"id":406,"localName":"DialogTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_en-US.json b/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_en-US.json deleted file mode 100644 index fc2b114a6..000000000 --- a/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Directionality","path":"/src/widgets/basic.dart","parents":["_UbiquitousInheritedWidget","InheritedWidget","ProxyWidget","Widget"],"desc":" A widget that determines the ambient directionality of text and text-direction-sensitive render objects.","fields":[{"name":"textDirection","type":"TextDirection","required":true,"desc":"The text direction for this subtree."}],"id":319,"lever":2,"family":5,"linkIds":[2,94],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Directionality","desc":["【textDirection】: Text arrangement direction 【TextDirection】","【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_zh-CN.json deleted file mode 100644 index 040557780..000000000 --- a/modules/widget_system/widgets/doc/widgets/Directionality/Directionality_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Directionality","path":"/src/widgets/basic.dart","parents":["_UbiquitousInheritedWidget","InheritedWidget","ProxyWidget","Widget"],"desc":"确定文本和文本方向敏感渲染对象的环境方向性的小部件。","fields":[{"name":"textDirection","type":"TextDirection","required":true,"desc":"此子树的文本方向。"}],"id":319,"localName":"定向性","lever":2,"family":5,"linkIds":[2,94],"nodes":[{"file":"node1_base.dart","name":"Directionality基本使用","desc":["【textDirection】 : 文字排列方向 【TextDirection】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_en-US.json b/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_en-US.json deleted file mode 100644 index df3a87371..000000000 --- a/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Dismissible","path":"/src/widgets/dismissible.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that can be dismissed by dragging in the indicated [direction].","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"background","type":"Widget?","desc":"A widget that is stacked behind the child. If secondaryBackground is also specified then this widget only appears when the child has been dragged down or to the right."},{"name":"secondaryBackground","type":"Widget?","desc":"A widget that is stacked behind the child and is exposed when the child has been dragged up or to the left. It may only be specified when background has also been specified."},{"name":"confirmDismiss","type":"ConfirmDismissCallback?","desc":"Gives the app an opportunity to confirm or veto a pending dismissal."},{"name":"onResize","type":"VoidCallback?","desc":"Called when the widget changes size (i.e., when contracting before being dismissed)."},{"name":"onDismissed","type":"DismissDirectionCallback?","desc":"Called when the widget has been dismissed, after finishing resizing."},{"name":"direction","type":"DismissDirection","required":true,"desc":"The direction in which the widget can be dismissed."},{"name":"resizeDuration","type":"Duration?","desc":"The amount of time the widget will spend contracting before [onDismissed] is called."},{"name":"dismissThresholds","type":"Map","required":true,"desc":"The offset threshold the item has to be dragged in order to be considered dismissed."},{"name":"movementDuration","type":"Duration","required":true,"desc":"Defines the duration for card to dismiss or to come back to original position if not dismissed."},{"name":"crossAxisEndOffset","type":"double","required":true,"desc":"Defines the end offset across the main axis after the card is dismissed."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"Determines the way that drag start behavior is handled."},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit tests."},{"name":"onUpdate","type":"DismissUpdateCallback?","desc":"Called when the dismissible widget has been dragged."}],"id":176,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Dismissible","desc":["【child】: Child component 【Widget】","【background】: Left bottom 【Widget】","【secondaryBackground】: Right bottom 【Widget】","【key】: Key 【Key】","【confirmDismiss】: Confirmation callback 【DismissDirectionCallback】","【onDismissed】: Dismissal callback 【DismissDirectionCallback】"]},{"file":"node2_direction.dart","name":"Basic Usage of Dismissible","desc":["【direction】: Direction 【DismissDirection】","【crossAxisEndOffset】: Offset 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_zh-CN.json deleted file mode 100644 index a17d0bd16..000000000 --- a/modules/widget_system/widgets/doc/widgets/Dismissible/Dismissible_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Dismissible","path":"/src/widgets/dismissible.dart","parents":["StatefulWidget","Widget"],"desc":"可以通过在指定 [direction] 中拖动来关闭的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"background","type":"Widget?","desc":"堆叠在子项后面的小部件。如果还指定了 secondaryBackground,则此小部件仅在子项被向下或向右拖动时出现。"},{"name":"secondaryBackground","type":"Widget?","desc":"堆叠在子项后面的小部件,当子项被向上或向左拖动时暴露。只有在也指定了 background 时才能指定。"},{"name":"confirmDismiss","type":"ConfirmDismissCallback?","desc":"给应用程序一个确认或否决待定关闭的机会。"},{"name":"onResize","type":"VoidCallback?","desc":"当小部件改变大小时调用(即在被关闭之前收缩时)。"},{"name":"onDismissed","type":"DismissDirectionCallback?","desc":"当小部件被关闭时调用,在完成调整大小后。"},{"name":"direction","type":"DismissDirection","required":true,"desc":"小部件可以被关闭的方向。"},{"name":"resizeDuration","type":"Duration?","desc":"小部件在调用 [onDismissed] 之前收缩所花费的时间。"},{"name":"dismissThresholds","type":"Map","required":true,"desc":"项目必须被拖动的偏移阈值,以便被认为已关闭。"},{"name":"movementDuration","type":"Duration","required":true,"desc":"定义卡片关闭或如果未关闭则返回原始位置的持续时间。"},{"name":"crossAxisEndOffset","type":"double","required":true,"desc":"定义卡片被关闭后跨主轴的结束偏移量。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"确定拖动开始行为的处理方式。"},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"在命中测试期间如何表现。"},{"name":"onUpdate","type":"DismissUpdateCallback?","desc":"当可关闭小部件被拖动时调用。"}],"id":176,"localName":"滑动消失","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Dismissible基本使用","desc":["【child】 : 子组件 【Widget】","【background】 : 左底 【Widget】","【secondaryBackground】 : 右底 【Widget】","【key】 : 键 【Key】","【confirmDismiss】 : 确认回调 【DismissDirectionCallback】","【onDismissed】 : 消失回调 【DismissDirectionCallback】,"]},{"file":"node2_direction.dart","name":"Dismissible基本使用","desc":["【direction】 : 方向 【DismissDirection】","【crossAxisEndOffset】 : 偏移 【double】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_en-US.json b/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_en-US.json deleted file mode 100644 index ca0d12b56..000000000 --- a/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DisplayFeatureSubScreen","path":"/src/widgets/display_feature_sub_screen.dart","parents":["StatelessWidget","Widget"],"desc":" Positions [child] such that it avoids overlapping any [DisplayFeature] that splits the screen into sub-screens.","fields":[{"name":"anchorPoint","type":"Offset?","desc":"{@template flutter.widgets.DisplayFeatureSubScreen.anchorPoint} The anchor point used to pick the closest sub-screen."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":407,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_zh-CN.json deleted file mode 100644 index 6eb040da9..000000000 --- a/modules/widget_system/widgets/doc/widgets/DisplayFeatureSubScreen/DisplayFeatureSubScreen_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DisplayFeatureSubScreen","path":"/src/widgets/display_feature_sub_screen.dart","parents":["StatelessWidget","Widget"],"desc":"定位 [child] 以避免与将屏幕分割为子屏幕的任何 [DisplayFeature] 重叠。","fields":[{"name":"anchorPoint","type":"Offset?","desc":"{@template flutter.widgets.DisplayFeatureSubScreen.anchorPoint} 用于选择最近子屏幕的锚点。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":407,"localName":"DisplayFeatureSubScreen","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Divider/Divider_en-US.json b/modules/widget_system/widgets/doc/widgets/Divider/Divider_en-US.json deleted file mode 100644 index 71d0d26d9..000000000 --- a/modules/widget_system/widgets/doc/widgets/Divider/Divider_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Divider","path":"/src/material/divider.dart","parents":["StatelessWidget","Widget"],"desc":" A thin horizontal line, with padding on either side.","fields":[{"name":"height","type":"double?","desc":"The divider's height extent."},{"name":"thickness","type":"double?","desc":"The thickness of the line drawn within the divider."},{"name":"indent","type":"double?","desc":"The amount of empty space to the leading edge of the divider."},{"name":"endIndent","type":"double?","desc":"The amount of empty space to the trailing edge of the divider."},{"name":"radius","type":"BorderRadiusGeometry?","desc":"The amount of radius for the border of the divider."},{"name":"color","type":"Color?","desc":"{@template flutter.material.Divider.color} The color to use when painting the line."}],"id":34,"lever":2,"family":0,"linkIds":[35,329],"nodes":[{"file":"node1_base.dart","name":"Divider Color and Thickness","desc":["【color】: Color 【Color】","【thickness】: Line thickness 【double】"]},{"file":"node2_height.dart","name":"Divider Height and Indent","desc":["【indent】: Front indent length 【double】","【endIndent】: Rear indent length 【double】","【height】: Placeholder height 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Divider/Divider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Divider/Divider_zh-CN.json deleted file mode 100644 index f2a152b66..000000000 --- a/modules/widget_system/widgets/doc/widgets/Divider/Divider_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Divider","path":"/src/material/divider.dart","parents":["StatelessWidget","Widget"],"desc":"两侧带内边距的细水平线。","fields":[{"name":"height","type":"double?","desc":"分隔符的高度范围。"},{"name":"thickness","type":"double?","desc":"分隔符内绘制线条的厚度。"},{"name":"indent","type":"double?","desc":"分隔符前缘的空白空间量。"},{"name":"endIndent","type":"double?","desc":"分隔符后缘的空白空间量。"},{"name":"radius","type":"BorderRadiusGeometry?","desc":"分隔符边框的半径量。"},{"name":"color","type":"Color?","desc":"{@template flutter.material.Divider.color} 绘制线条时使用的颜色。"}],"id":34,"localName":"水平分割线","lever":2,"family":0,"linkIds":[35,329],"nodes":[{"file":"node1_base.dart","name":"Divider颜色和粗细","desc":["【color】: 颜色 【Color】","【thickness】: 线粗细 【double】"]},{"file":"node2_height.dart","name":"Divider高度和空缺","desc":["【indent】: 前面空缺长度 【double】","【endIndent】: 后面空缺长度 【double】","【height】: 占位高 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_en-US.json deleted file mode 100644 index ae9e0425c..000000000 --- a/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DividerTheme","path":"/src/material/divider_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for [Divider]s, [VerticalDivider]s, dividers between [ListTile]s, and dividers between rows in [DataTable]s in this widget's subtree.","fields":[{"name":"data","type":"DividerThemeData","required":true,"desc":"The properties for descendant [Divider]s, [VerticalDivider]s, dividers between [ListTile]s, and dividers between rows in [DataTable]s."}],"id":329,"lever":3,"family":5,"linkIds":[34,35],"nodes":[{"file":"node1_base.dart","name":"Using DividerTheme","desc":["The property parameters are similar to Divider. You can obtain the divider theme data through DividerTheme.of,","and you can also set default styles for the dividers of DividerTheme【descendants】, including color, thickness, height, etc."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_zh-CN.json deleted file mode 100644 index 436ba778c..000000000 --- a/modules/widget_system/widgets/doc/widgets/DividerTheme/DividerTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DividerTheme","path":"/src/material/divider_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [Divider]、[VerticalDivider]、[ListTile] 之间的分隔符和 [DataTable] 中行之间的分隔符定义配置的继承小部件。","fields":[{"name":"data","type":"DividerThemeData","required":true,"desc":"后代 [Divider]、[VerticalDivider]、[ListTile] 之间的分隔符和 [DataTable] 中行之间的分隔符的属性。"}],"id":329,"localName":"分割线样式","lever":3,"family":5,"linkIds":[34,35],"nodes":[{"file":"node1_base.dart","name":"DividerTheme使用","desc":["属性参数与Divider类似,可以通过DividerTheme.of获取分割线主题数据,\"","也可以为DividerTheme【后代】的分割线设置默认样式,包括颜色、粗细、高度等。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_en-US.json b/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_en-US.json deleted file mode 100644 index 446642fde..000000000 --- a/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DragBoundary","path":"/src/widgets/drag_boundary.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Provides a [DragBoundaryDelegate] for its descendants whose bounds are those defined by this widget.","fields":[],"id":408,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_zh-CN.json deleted file mode 100644 index 004435ac2..000000000 --- a/modules/widget_system/widgets/doc/widgets/DragBoundary/DragBoundary_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DragBoundary","path":"/src/widgets/drag_boundary.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为其后代提供 [DragBoundaryDelegate],其边界由此小部件定义。","fields":[],"id":408,"localName":"DragBoundary","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_en-US.json b/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_en-US.json deleted file mode 100644 index 485052c1c..000000000 --- a/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DragTarget","path":"/src/widgets/drag_target.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that receives data when a [Draggable] widget is dropped.","fields":[{"name":"builder","type":"DragTargetBuilder","required":true,"desc":"Called to build the contents of this widget."},{"name":"onWillAccept","type":"DragTargetWillAccept?","desc":"Called to determine whether this widget is interested in receiving a given piece of data being dragged over this drag target."},{"name":"onWillAcceptWithDetails","type":"DragTargetWillAcceptWithDetails?","desc":"Called to determine whether this widget is interested in receiving a given piece of data being dragged over this drag target."},{"name":"onAccept","type":"DragTargetAccept?","desc":"Called when an acceptable piece of data was dropped over this drag target. It will not be called if `data` is `null`."},{"name":"onAcceptWithDetails","type":"DragTargetAcceptWithDetails?","desc":"Called when an acceptable piece of data was dropped over this drag target. It will not be called if `data` is `null`."},{"name":"onLeave","type":"DragTargetLeave?","desc":"Called when a given piece of data being dragged over this target leaves the target."},{"name":"onMove","type":"DragTargetMove?","desc":"Called when a [Draggable] moves within this [DragTarget]. It will not be called if `data` is `null`."},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit testing."}],"id":104,"lever":4,"family":1,"linkIds":[103,105],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DragTarget","desc":["【builder】: Component builder 【DragTargetBuilder】","【onWillAccept】: When dragging in 【Function(T)】","【onAccept】: Drag success 【Function(T)】","【onLeave】: Drag in and then out 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_zh-CN.json deleted file mode 100644 index 968f0e528..000000000 --- a/modules/widget_system/widgets/doc/widgets/DragTarget/DragTarget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DragTarget","path":"/src/widgets/drag_target.dart","parents":["StatefulWidget","Widget"],"desc":"当 [Draggable] 小部件被放下时接收数据的小部件。","fields":[{"name":"builder","type":"DragTargetBuilder","required":true,"desc":"调用以构建此小部件的内容。"},{"name":"onWillAccept","type":"DragTargetWillAccept?","desc":"调用以确定此小部件是否有兴趣接收在此拖动目标上拖动的给定数据片段。"},{"name":"onWillAcceptWithDetails","type":"DragTargetWillAcceptWithDetails?","desc":"调用以确定此小部件是否有兴趣接收在此拖动目标上拖动的给定数据片段。"},{"name":"onAccept","type":"DragTargetAccept?","desc":"当可接受的数据片段被放在此拖动目标上时调用。如果 `data` 为 `null`,则不会调用。"},{"name":"onAcceptWithDetails","type":"DragTargetAcceptWithDetails?","desc":"当可接受的数据片段被放在此拖动目标上时调用。如果 `data` 为 `null`,则不会调用。"},{"name":"onLeave","type":"DragTargetLeave?","desc":"当在此目标上拖动的给定数据片段离开目标时调用。"},{"name":"onMove","type":"DragTargetMove?","desc":"当 [Draggable] 在此 [DragTarget] 内移动时调用。如果 `data` 为 `null`,则不会调用。"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"在命中测试期间如何表现。"}],"id":104,"localName":"拖拽目标","lever":4,"family":1,"linkIds":[103,105],"nodes":[{"file":"node1_base.dart","name":"DragTarget基本使用","desc":["【builder】 : 组件构造器 【DragTargetBuilder】","【onWillAccept】 : 拖入时 【Function(T)】","【onAccept】 : 拖拽成功 【Function(T)】","【onLeave】 : 拖入再脱出 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_en-US.json b/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_en-US.json deleted file mode 100644 index bb97b593c..000000000 --- a/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Draggable","path":"/src/widgets/drag_target.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that can be dragged from to a [DragTarget].","fields":[{"name":"data","type":"T?","desc":"The data that will be dropped by this draggable."},{"name":"axis","type":"Axis?","desc":"The [Axis] to restrict this draggable's movement, if specified."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"childWhenDragging","type":"Widget?","desc":"The widget to display instead of [child] when one or more drags are under way."},{"name":"feedback","type":"Widget","required":true,"desc":"The widget to show under the pointer when a drag is under way."},{"name":"feedbackOffset","type":"Offset","required":true,"desc":"The feedbackOffset can be used to set the hit test target point for the purposes of finding a drag target. It is especially useful if the feedback is transformed compared to the child."},{"name":"dragAnchorStrategy","type":"DragAnchorStrategy","required":true,"desc":"A strategy that is used by this draggable to get the anchor offset when it is dragged."},{"name":"ignoringFeedbackSemantics","type":"bool","required":true,"desc":"Whether the semantics of the [feedback] widget is ignored when building the semantics tree."},{"name":"ignoringFeedbackPointer","type":"bool","required":true,"desc":"Whether the [feedback] widget is ignored during hit testing."},{"name":"affinity","type":"Axis?","desc":"Controls how this widget competes with other gestures to initiate a drag."},{"name":"maxSimultaneousDrags","type":"int?","desc":"How many simultaneous drags to support."},{"name":"onDragStarted","type":"VoidCallback?","desc":"Called when the draggable starts being dragged."},{"name":"onDragUpdate","type":"DragUpdateCallback?","desc":"Called when the draggable is dragged."},{"name":"onDraggableCanceled","type":"DraggableCanceledCallback?","desc":"Called when the draggable is dropped without being accepted by a [DragTarget]."},{"name":"onDragCompleted","type":"VoidCallback?","desc":"Called when the draggable is dropped and accepted by a [DragTarget]."},{"name":"onDragEnd","type":"DragEndCallback?","desc":"Called when the draggable is dropped."},{"name":"rootOverlay","type":"bool","required":true,"desc":"Whether the feedback widget will be put on the root [Overlay]."},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit test."},{"name":"allowedButtonsFilter","type":"AllowedButtonsFilter?","desc":"{@macro flutter.gestures.multidrag._allowedButtonsFilter}"}],"id":103,"lever":4,"family":1,"linkIds":[104,105],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Draggable","desc":["【child】 : child 【Widget】","【feedback】 : child during dragging 【Widget】","【axis】 : axis of dragging 【Axis】"]},{"file":"node2_data.dart","name":"Combined Usage of Draggable and DragTarget","desc":["【data】 : data 【T】","【onDragStarted】 : start dragging 【Function()】","【onDragEnd】 : end dragging 【Function(DraggableDetails)】","【onDragCompleted】 : drag completed 【Function()】","【onDraggableCanceled】 : drag canceled 【Function(Velocity,Offset)】","【onChanged】 : callback when changed 【Function(T)】"]},{"file":"node3_use.dart","name":"Other Usages of Draggable","desc":["Some events can be handled based on dragging, such as deletion, querying, pop-ups, etc."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_zh-CN.json deleted file mode 100644 index 6e4ad63b2..000000000 --- a/modules/widget_system/widgets/doc/widgets/Draggable/Draggable_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Draggable","path":"/src/widgets/drag_target.dart","parents":["StatefulWidget","Widget"],"desc":"可以从中拖动到 [DragTarget] 的小部件。","fields":[{"name":"data","type":"T?","desc":"此可拖动项将放下的数据。"},{"name":"axis","type":"Axis?","desc":"限制此可拖动项移动的 [Axis](如果指定)。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"childWhenDragging","type":"Widget?","desc":"当一个或多个拖动正在进行时显示的小部件,而不是 [child]。"},{"name":"feedback","type":"Widget","required":true,"desc":"拖动进行时在指针下显示的小部件。"},{"name":"feedbackOffset","type":"Offset","required":true,"desc":"feedbackOffset 可用于设置命中测试目标点以查找拖动目标。如果反馈相对于子项进行了变换,这特别有用。"},{"name":"dragAnchorStrategy","type":"DragAnchorStrategy","required":true,"desc":"此可拖动项用于在拖动时获取锚点偏移量的策略。"},{"name":"ignoringFeedbackSemantics","type":"bool","required":true,"desc":"构建语义树时是否忽略 [feedback] 小部件的语义。"},{"name":"ignoringFeedbackPointer","type":"bool","required":true,"desc":"命中测试期间是否忽略 [feedback] 小部件。"},{"name":"affinity","type":"Axis?","desc":"控制此小部件如何与其他手势竞争以启动拖动。"},{"name":"maxSimultaneousDrags","type":"int?","desc":"支持多少个同时拖动。"},{"name":"onDragStarted","type":"VoidCallback?","desc":"可拖动项开始被拖动时调用。"},{"name":"onDragUpdate","type":"DragUpdateCallback?","desc":"可拖动项被拖动时调用。"},{"name":"onDraggableCanceled","type":"DraggableCanceledCallback?","desc":"可拖动项被放下但未被 [DragTarget] 接受时调用。"},{"name":"onDragCompleted","type":"VoidCallback?","desc":"可拖动项被放下并被 [DragTarget] 接受时调用。"},{"name":"onDragEnd","type":"DragEndCallback?","desc":"可拖动项被放下时调用。"},{"name":"rootOverlay","type":"bool","required":true,"desc":"反馈小部件是否将放在根 [Overlay] 上。"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"命中测试期间如何表现。"},{"name":"allowedButtonsFilter","type":"AllowedButtonsFilter?","desc":"{@macro flutter.gestures.multidrag._allowedButtonsFilter}"}],"id":103,"localName":"可拖拽组件","lever":4,"family":1,"linkIds":[104,105],"nodes":[{"file":"node1_base.dart","name":"Draggable基本使用","desc":["【child】 : 孩子 【Widget】","【feedback】 : 拖拽时的孩子 【Widget】","【axis】 : 拖动的轴 【Axis】"]},{"file":"node2_data.dart","name":"Draggable与DragTarget联用","desc":["【data】 : 数据 【T】","【onDragStarted】 : 开始拖拽 【Function()】","【onDragEnd】 : 结束拖拽 【Function(DraggableDetails)】","【onDragCompleted】 : 拖拽完成 【Function()】","【onDraggableCanceled】 : 拖拽取消 【Function(Velocity,Offset)】","【onChanged】 : 改变时回调 【Function(T)】"]},{"file":"node3_use.dart","name":"Draggable其他使用","desc":["可以根据拖拽来处理一些事件。如删除、查询、弹框等"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_en-US.json b/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_en-US.json deleted file mode 100644 index 32c7e840a..000000000 --- a/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DraggableScrollableActuator","path":"/src/widgets/draggable_scrollable_sheet.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that can notify a descendent [DraggableScrollableSheet] that it should reset its position to the initial state.","fields":[{"name":"child","type":"Widget","required":true,"desc":"This child's [DraggableScrollableSheet] descendant will be reset when the [reset] method is applied to a context that includes it."}],"id":221,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage","desc":["【child】: Child component 【Widget】","Use DraggableScrollableActuator.reset(context) to reset the position of the descendant DraggableScrollableSheet to the initial position."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_zh-CN.json deleted file mode 100644 index aa3d6682d..000000000 --- a/modules/widget_system/widgets/doc/widgets/DraggableScrollableActuator/DraggableScrollableActuator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DraggableScrollableActuator","path":"/src/widgets/draggable_scrollable_sheet.dart","parents":["StatefulWidget","Widget"],"desc":"可以通知后代 [DraggableScrollableSheet] 应将其位置重置为初始状态的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"当 [reset] 方法应用于包含它的上下文时,此子项的 [DraggableScrollableSheet] 后代将被重置。"}],"id":221,"localName":"拖滑重置器","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"基本使用方法","desc":["【child】 : 子组件 【Widget】","使用 DraggableScrollableActuator.reset(context) 重置后代 DraggableScrollableSheet 位初始位置。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_en-US.json b/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_en-US.json deleted file mode 100644 index 7ba5cc695..000000000 --- a/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DraggableScrollableSheet","path":"/src/widgets/draggable_scrollable_sheet.dart","parents":["StatefulWidget","Widget"],"desc":" A container for a [Scrollable] that responds to drag gestures by resizing the scrollable until a limit is reached, and then scrolling.","fields":[{"name":"initialChildSize","type":"double","required":true,"desc":"The initial fractional value of the parent container's height to use when displaying the widget."},{"name":"minChildSize","type":"double","required":true,"desc":"The minimum fractional value of the parent container's height to use when displaying the widget."},{"name":"maxChildSize","type":"double","required":true,"desc":"The maximum fractional value of the parent container's height to use when displaying the widget."},{"name":"expand","type":"bool","required":true,"desc":"Whether the widget should expand to fill the available space in its parent or not."},{"name":"snap","type":"bool","required":true,"desc":"Whether the widget should snap between [snapSizes] when the user lifts their finger during a drag."},{"name":"snapSizes","type":"List?","desc":"A list of target sizes that the widget should snap to."},{"name":"snapAnimationDuration","type":"Duration?","desc":"Defines a duration for the snap animations."},{"name":"controller","type":"DraggableScrollableController?","desc":"A controller that can be used to programmatically control this sheet."},{"name":"shouldCloseOnMinExtent","type":"bool","required":true,"desc":"Whether the sheet, when dragged (or flung) to its minimum size, should cause its parent sheet to close."},{"name":"builder","type":"ScrollableWidgetBuilder","required":true,"desc":"The builder that creates a child to display in this widget, which will use the provided [ScrollController] to enable dragging and scrolling of the contents."}],"id":252,"lever":2,"family":1,"linkIds":[221,142],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DraggableScrollableSheet","desc":["【initialChildSize】: Initial fraction 【double】","【minChildSize】: Minimum fraction 【double】","【maxChildSize】: Maximum fraction 【double】","【builder】: Scrollable component builder 【ScrollableWidgetBuilder】","【expand】: Whether to expand 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_zh-CN.json deleted file mode 100644 index 08ede04fe..000000000 --- a/modules/widget_system/widgets/doc/widgets/DraggableScrollableSheet/DraggableScrollableSheet_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DraggableScrollableSheet","path":"/src/widgets/draggable_scrollable_sheet.dart","parents":["StatefulWidget","Widget"],"desc":"通过拖动手势调整可滚动大小直到达到限制,然后滚动的 [Scrollable] 容器。","fields":[{"name":"initialChildSize","type":"double","required":true,"desc":"显示小部件时使用的父容器高度的初始分数值。"},{"name":"minChildSize","type":"double","required":true,"desc":"显示小部件时使用的父容器高度的最小分数值。"},{"name":"maxChildSize","type":"double","required":true,"desc":"显示小部件时使用的父容器高度的最大分数值。"},{"name":"expand","type":"bool","required":true,"desc":"小部件是否应扩展以填充其父级中的可用空间。"},{"name":"snap","type":"bool","required":true,"desc":"当用户在拖动期间抬起手指时,小部件是否应在 [snapSizes] 之间捕捉。"},{"name":"snapSizes","type":"List?","desc":"小部件应捕捉到的目标大小列表。"},{"name":"snapAnimationDuration","type":"Duration?","desc":"定义捕捉动画的持续时间。"},{"name":"controller","type":"DraggableScrollableController?","desc":"可用于以编程方式控制此表单的控制器。"},{"name":"shouldCloseOnMinExtent","type":"bool","required":true,"desc":"当表单被拖动(或抛出)到其最小大小时,是否应导致其父表单关闭。"},{"name":"builder","type":"ScrollableWidgetBuilder","required":true,"desc":"创建要在此小部件中显示的子项的构建器,它将使用提供的 [ScrollController] 来启用内容的拖动和滚动。"}],"id":252,"localName":"拖滑页","lever":2,"family":1,"linkIds":[221,142],"nodes":[{"file":"node1_base.dart","name":"DraggableScrollableSheet基本使用","desc":["【initialChildSize】 : 初始分度 【double】","【minChildSize】 : 最小分度 【double】","【maxChildSize】 : 最大分度 【double】","【builder】 : 滑动组件构造器 【ScrollableWidgetBuilder】","【expand】 : 是否延展 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_en-US.json b/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_en-US.json deleted file mode 100644 index 6c8763020..000000000 --- a/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Drawer","path":"/src/material/drawer.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design panel that slides in horizontally from the edge of a [Scaffold] to show navigation links in an application.","fields":[{"name":"backgroundColor","type":"Color?","desc":"Sets the color of the [Material] that holds all of the [Drawer]'s contents."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this drawer relative to its parent."},{"name":"shadowColor","type":"Color?","desc":"The color used to paint a drop shadow under the drawer's [Material], which reflects the drawer's [elevation]."},{"name":"surfaceTintColor","type":"Color?","desc":"The color used as a surface tint overlay on the drawer's background color, which reflects the drawer's [elevation]."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the drawer."},{"name":"width","type":"double?","desc":"The width of the drawer."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"semanticLabel","type":"String?","desc":"The semantic label of the drawer used by accessibility frameworks to announce screen transitions when the drawer is opened and closed."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":154,"lever":2,"family":0,"linkIds":[64,155],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Drawer","desc":["【child】 : Child component 【Widget】","【elevation】 : Elevation 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_zh-CN.json deleted file mode 100644 index 54dd507f9..000000000 --- a/modules/widget_system/widgets/doc/widgets/Drawer/Drawer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Drawer","path":"/src/material/drawer.dart","parents":["StatelessWidget","Widget"],"desc":"从 [Scaffold] 边缘水平滑入以显示应用程序中导航链接的 Material Design 面板。","fields":[{"name":"backgroundColor","type":"Color?","desc":"设置包含所有 [Drawer] 内容的 [Material] 的颜色。"},{"name":"elevation","type":"double?","desc":"相对于其父级放置此抽屉的 z 坐标。"},{"name":"shadowColor","type":"Color?","desc":"用于在抽屉的 [Material] 下绘制投影的颜色,反映抽屉的 [elevation]。"},{"name":"surfaceTintColor","type":"Color?","desc":"用作抽屉背景颜色上的表面色调叠加的颜色,反映抽屉的 [elevation]。"},{"name":"shape","type":"ShapeBorder?","desc":"抽屉的形状。"},{"name":"width","type":"double?","desc":"抽屉的宽度。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"semanticLabel","type":"String?","desc":"辅助功能框架使用的抽屉语义标签,用于在打开和关闭抽屉时宣布屏幕转换。"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":154,"localName":"滑页栏","lever":2,"family":0,"linkIds":[64,155],"nodes":[{"file":"node1_base.dart","name":"Drawer基本使用","desc":["【child】 : 子组件 【Widget】","【elevation】 : 影深 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_en-US.json b/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_en-US.json deleted file mode 100644 index 17d57c016..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":" A Material Design drawer icon button.","fields":[],"id":276,"lever":1,"family":0,"linkIds":[273,361],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DrawerButton","desc":["【onPressed】: Click event 【VoidCallback?】","【style】: Button style 【ButtonStyle?】","When onPressed is empty, clicking will open the left drawer."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_zh-CN.json deleted file mode 100644 index ee3076ef6..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerButton/DrawerButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":"Material Design 抽屉图标按钮。","fields":[],"id":276,"localName":"抽屉按钮","lever":1,"family":0,"linkIds":[273,361],"nodes":[{"file":"node1_base.dart","name":"DrawerButton 基本使用","desc":["【onPressed】 : 点击事件 【VoidCallback?】","【style】: 按钮样式 【ButtonStyle?】","onPressed 为空时,点击时会打开左抽屉。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_en-US.json deleted file mode 100644 index 6f951ce1f..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":" A \"drawer\" icon that's appropriate for the current [TargetPlatform].","fields":[],"id":273,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DrawerButtonIcon Effect","desc":["The _ActionIcon component adapts the drawer button icon for different platforms based on the ActionIconTheme."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_zh-CN.json deleted file mode 100644 index e7e06fe92..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerButtonIcon/DrawerButtonIcon_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":"适合当前 [TargetPlatform] 的\"抽屉\"图标。","fields":[],"id":273,"localName":"抽屉按钮图标","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DrawerButtonIcon 效果","desc":["通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的抽屉按钮图标。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_en-US.json b/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_en-US.json deleted file mode 100644 index cd28b9c98..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerController","path":"/src/material/drawer.dart","parents":["StatefulWidget","Widget"],"desc":" Provides interactive behavior for [Drawer] widgets.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"alignment","type":"DrawerAlignment","required":true,"desc":"The alignment of the [Drawer]."},{"name":"drawerCallback","type":"DrawerCallback?","desc":"Optional callback that is called when a [Drawer] is opened or closed."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.material.DrawerController.dragStartBehavior} Determines the way that drag start behavior is handled."},{"name":"scrimColor","type":"Color?","desc":"The color to use for the scrim that obscures the underlying content while a drawer is open."},{"name":"enableOpenDragGesture","type":"bool","required":true,"desc":"Determines if the [Drawer] can be opened with a drag gesture."},{"name":"edgeDragWidth","type":"double?","desc":"The width of the area within which a horizontal swipe will open the drawer."},{"name":"isDrawerOpen","type":"bool","required":true,"desc":"Whether or not the drawer is opened or closed."}],"id":257,"lever":3,"family":1,"linkIds":[154,64],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DrawerController","desc":["【drawerCallback】: Event callback 【DrawerCallback】","【enableOpenDragGesture】: Whether to slide open from the side 【bool】","【alignment】: Alignment 【DrawerAlignment】","【scrimColor】: Background color 【Color】","【child】: Drawer component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_zh-CN.json deleted file mode 100644 index a71745d6b..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerController/DrawerController_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerController","path":"/src/material/drawer.dart","parents":["StatefulWidget","Widget"],"desc":"为 [Drawer] 小部件提供交互行为。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"alignment","type":"DrawerAlignment","required":true,"desc":"[Drawer] 的对齐方式。"},{"name":"drawerCallback","type":"DrawerCallback?","desc":"打开或关闭 [Drawer] 时调用的可选回调。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.material.DrawerController.dragStartBehavior} 确定拖动开始行为的处理方式。"},{"name":"scrimColor","type":"Color?","desc":"抽屉打开时用于遮挡底层内容的纱幕颜色。"},{"name":"enableOpenDragGesture","type":"bool","required":true,"desc":"确定是否可以通过拖动手势打开 [Drawer]。"},{"name":"edgeDragWidth","type":"double?","desc":"水平滑动将打开抽屉的区域宽度。"},{"name":"isDrawerOpen","type":"bool","required":true,"desc":"抽屉是打开还是关闭。"}],"id":257,"localName":"iOS滑动页签","lever":3,"family":1,"linkIds":[154,64],"nodes":[{"file":"node1_base.dart","name":"DrawerController基本使用","desc":["【drawerCallback】 : 事件回调 【DrawerCallback】","【enableOpenDragGesture】 : 是否侧边滑开 【bool】","【alignment】 : 对齐方式 【DrawerAlignment】","【scrimColor】 : 背景颜色 【Color】","【child】 : Drawer组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_en-US.json b/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_en-US.json deleted file mode 100644 index e6ca7462b..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerHeader","path":"/src/material/drawer_header.dart","parents":["StatelessWidget","Widget"],"desc":" The top-most region of a Material Design drawer. The header's [child] widget, if any, is placed inside a [Container] whose [decoration] can be passed as an argument, inset by the given [padding].","fields":[{"name":"decoration","type":"Decoration?","desc":"Decoration for the main drawer header [Container]; useful for applying backgrounds."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The padding by which to inset [child]."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"The margin around the drawer header."},{"name":"duration","type":"Duration","required":true,"desc":"The duration for animations of the [decoration]."},{"name":"curve","type":"Curve","required":true,"desc":"The curve for animations of the [decoration]."},{"name":"child","type":"Widget?","desc":"A widget to be placed inside the drawer header, inset by the [padding]."}],"id":155,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DrawerHeader","desc":["【child】 : Child Component 【Widget】","【decoration】 : Decoration 【Decoration】","【margin】 : Margin 【EdgeInsetsGeometry】","【padding】 : Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_zh-CN.json deleted file mode 100644 index 36204c95f..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerHeader/DrawerHeader_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerHeader","path":"/src/material/drawer_header.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 抽屉的最顶部区域。标题的 [child] 小部件(如果有)放置在 [Container] 内,其 [decoration] 可以作为参数传递,由给定的 [padding] 插入。","fields":[{"name":"decoration","type":"Decoration?","desc":"主抽屉标题 [Container] 的装饰;用于应用背景。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"插入 [child] 的内边距。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"抽屉标题周围的边距。"},{"name":"duration","type":"Duration","required":true,"desc":"[decoration] 动画的持续时间。"},{"name":"curve","type":"Curve","required":true,"desc":"[decoration] 动画的曲线。"},{"name":"child","type":"Widget?","desc":"放置在抽屉标题内的小部件,由 [padding] 插入。"}],"id":155,"localName":"滑页栏标题","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DrawerHeader基本使用","desc":["【child】 : 子组件 【Widget】","【decoration】 : 装饰 【Decoration】","【margin】 : 外边距 【EdgeInsetsGeometry】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_en-US.json deleted file mode 100644 index db98dabff..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerTheme","path":"/src/material/drawer_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines visual properties for [Drawer]s in this widget's subtree.","fields":[{"name":"data","type":"DrawerThemeData","required":true,"desc":"Specifies the background color, scrim color, elevation, and shape for descendant [Drawer] widgets."}],"id":409,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_zh-CN.json deleted file mode 100644 index a20589a9e..000000000 --- a/modules/widget_system/widgets/doc/widgets/DrawerTheme/DrawerTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DrawerTheme","path":"/src/material/drawer_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [Drawer] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"DrawerThemeData","required":true,"desc":"指定后代 [Drawer] 小部件的背景颜色、纱幕颜色、高度和形状。"}],"id":409,"localName":"DrawerTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_en-US.json deleted file mode 100644 index 12755894f..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownButton","path":"/src/material/dropdown.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design button for selecting from a list of items.","fields":[{"name":"items","type":"List>?","desc":"The list of items the user can select."},{"name":"value","type":"T?","desc":"The value of the currently selected [DropdownMenuItem]."},{"name":"hint","type":"Widget?","desc":"A placeholder widget that is displayed by the dropdown button."},{"name":"disabledHint","type":"Widget?","desc":"A preferred placeholder widget that is displayed when the dropdown is disabled."},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.material.dropdownButton.onChanged} Called when the user selects an item."},{"name":"onTap","type":"VoidCallback?","desc":"Called when the dropdown button is tapped."},{"name":"selectedItemBuilder","type":"DropdownButtonBuilder?","desc":"A builder to customize the dropdown buttons corresponding to the [DropdownMenuItem]s in [items]."},{"name":"elevation","type":"int","required":true,"desc":"The z-coordinate at which to place the menu when open."},{"name":"style","type":"TextStyle?","desc":"The text style to use for text in the dropdown button and the dropdown menu that appears when you tap the button."},{"name":"underline","type":"Widget?","desc":"The widget to use for drawing the drop-down button's underline."},{"name":"icon","type":"Widget?","desc":"The widget to use for the drop-down button's icon."},{"name":"iconDisabledColor","type":"Color?","desc":"The color of any [Icon] descendant of [icon] if this button is disabled, i.e. if [onChanged] is null."},{"name":"iconEnabledColor","type":"Color?","desc":"The color of any [Icon] descendant of [icon] if this button is enabled, i.e. if [onChanged] is defined."},{"name":"iconSize","type":"double","required":true,"desc":"The size to use for the drop-down button's down arrow icon button."},{"name":"isDense","type":"bool","required":true,"desc":"Reduce the button's height."},{"name":"isExpanded","type":"bool","required":true,"desc":"Set the dropdown's inner contents to horizontally fill its parent."},{"name":"itemHeight","type":"double?","desc":"If null, then the menu item heights will vary according to each menu item's intrinsic height."},{"name":"menuWidth","type":"double?","desc":"The width of the menu."},{"name":"focusColor","type":"Color?","desc":"The color for the button's [Material] when it has the input focus."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"dropdownColor","type":"Color?","desc":"The background color of the dropdown."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Padding around the visible portion of the dropdown widget."},{"name":"menuMaxHeight","type":"double?","desc":"The maximum height of the menu."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"Defines how the hint or the selected item is positioned within the button."},{"name":"borderRadius","type":"BorderRadius?","desc":"Defines the corner radii of the menu's rounded rectangle shape."}],"id":55,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of DropdownButton","desc":["【value】 : Current value 【T】","【items】 : Dropdown items 【List>】","【icon】 : Icon 【Widget】","【elevation】 : Elevation 【double】","【onChanged】 : Selection change event 【Function(T)】","【backgroundColor】 : Background color 【Color】"]},{"file":"node2_style.dart","name":"Styling of DropdownButton","desc":["【isDense】 : Whether to be dense 【bool】","【iconSize】 : Icon size 【double】","【hint】 : Hint widget 【Widget】","【iconEnabledColor】 : Icon color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_zh-CN.json deleted file mode 100644 index 5ccba7524..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownButton/DropdownButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownButton","path":"/src/material/dropdown.dart","parents":["StatefulWidget","Widget"],"desc":"用于从项目列表中选择的 Material Design 按钮。","fields":[{"name":"items","type":"List>?","desc":"用户可以选择的项目列表。"},{"name":"value","type":"T?","desc":"当前选定的 [DropdownMenuItem] 的值。"},{"name":"hint","type":"Widget?","desc":"下拉按钮显示的占位符小部件。"},{"name":"disabledHint","type":"Widget?","desc":"下拉菜单禁用时显示的首选占位符小部件。"},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.material.dropdownButton.onChanged} 用户选择项目时调用。"},{"name":"onTap","type":"VoidCallback?","desc":"点击下拉按钮时调用。"},{"name":"selectedItemBuilder","type":"DropdownButtonBuilder?","desc":"用于自定义对应于 [items] 中 [DropdownMenuItem] 的下拉按钮的构建器。"},{"name":"elevation","type":"int","required":true,"desc":"打开时放置菜单的 z 坐标。"},{"name":"style","type":"TextStyle?","desc":"用于下拉按钮和点击按钮时出现的下拉菜单中文本的文本样式。"},{"name":"underline","type":"Widget?","desc":"用于绘制下拉按钮下划线的小部件。"},{"name":"icon","type":"Widget?","desc":"用于下拉按钮图标的小部件。"},{"name":"iconDisabledColor","type":"Color?","desc":"如果此按钮被禁用(即 [onChanged] 为 null),[icon] 的任何 [Icon] 后代的颜色。"},{"name":"iconEnabledColor","type":"Color?","desc":"如果此按钮启用(即定义了 [onChanged]),[icon] 的任何 [Icon] 后代的颜色。"},{"name":"iconSize","type":"double","required":true,"desc":"用于下拉按钮向下箭头图标按钮的大小。"},{"name":"isDense","type":"bool","required":true,"desc":"减少按钮的高度。"},{"name":"isExpanded","type":"bool","required":true,"desc":"设置下拉菜单的内部内容水平填充其父级。"},{"name":"itemHeight","type":"double?","desc":"如果为 null,则菜单项高度将根据每个菜单项的固有高度而变化。"},{"name":"menuWidth","type":"double?","desc":"菜单的宽度。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时其 [Material] 的颜色。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"dropdownColor","type":"Color?","desc":"下拉菜单的背景颜色。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"下拉小部件可见部分周围的内边距。"},{"name":"menuMaxHeight","type":"double?","desc":"菜单的最大高度。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"定义提示或选定项目在按钮内的定位方式。"},{"name":"borderRadius","type":"BorderRadius?","desc":"定义菜单圆角矩形形状的角半径。"}],"id":55,"localName":"下拉按钮","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DropdownButton基本用法","desc":["【value】 : 当前值 【T】","【items】 : 下拉选框 【List>】","【icon】 : 图标 【Widget】","【elevation】 : 影深 【double】","【onChanged】 : 选择条目事件 【Function(T)】","【backgroundColor】 : 背景色 【Color】"]},{"file":"node2_style.dart","name":"DropdownButton的样式指定","desc":["【isDense】 : 是否紧排 【bool】","【iconSize】 : 图标大小 【double】","【hint】 : 提示组件 【Widget】","【iconEnabledColor】 : 图标颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_en-US.json deleted file mode 100644 index dfc5438bc..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownButtonFormField","path":"/src/material/dropdown.dart","parents":["FormField","StatefulWidget","Widget"],"desc":" A [FormField] that contains a [DropdownButton].","fields":[{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.material.dropdownButton.onChanged}"},{"name":"decoration","type":"InputDecoration","required":true,"desc":"The decoration to show around the dropdown button form field."}],"id":223,"lever":2,"family":1,"linkIds":[55,222],"nodes":[{"file":"node1_base.dart","name":"Simple Usage of Form Dropdown","desc":["【items】: List of child components 【List>】","【validator】: Form validation callback 【FormFieldValidator】","【onSaved】: Form save callback 【FormFieldSetter】","For other properties, refer to DropdownButton. For form validation features, refer to FormField."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_zh-CN.json deleted file mode 100644 index 2d8a0efe3..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownButtonFormField/DropdownButtonFormField_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownButtonFormField","path":"/src/material/dropdown.dart","parents":["FormField","StatefulWidget","Widget"],"desc":"包含 [DropdownButton] 的 [FormField]。","fields":[{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.material.dropdownButton.onChanged}"},{"name":"decoration","type":"InputDecoration","required":true,"desc":"在下拉按钮表单字段周围显示的装饰。"}],"id":223,"localName":"表单下拉框","lever":2,"family":1,"linkIds":[55,222],"nodes":[{"file":"node1_base.dart","name":"表单下拉框简单使用","desc":["【items】 : 子组件列表 【List>】","【validator】 : 表单验证回调 【FormFieldValidator】","【onSaved】 : 表单保存回调 【FormFieldSetter】","其他属性详见 DropdownButton,表单校验特性详见 FormField。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_en-US.json deleted file mode 100644 index 1edffc17e..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownButtonHideUnderline","path":"/src/material/dropdown.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that causes any descendant [DropdownButton] widgets to not include their regular underline.","fields":[],"id":181,"lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DropDownButtonHideUnderline Usage","desc":["【child】 : Child component 【Widget】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_zh-CN.json deleted file mode 100644 index 764468a48..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownButtonHideUnderline/DropdownButtonHideUnderline_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownButtonHideUnderline","path":"/src/material/dropdown.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"导致任何后代 [DropdownButton] 小部件不包含其常规下划线的继承小部件。","fields":[],"id":181,"localName":"下拉按钮隐藏线","lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"DropDownButtonHideUnderline使用","desc":["【child】 : 子组件 【Widget】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_en-US.json deleted file mode 100644 index e127fa335..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownMenu","path":"/src/material/dropdown_menu.dart","parents":["StatefulWidget","Widget"],"desc":" A dropdown menu that can be opened from a [TextField]. The selected menu item is displayed in that field.","fields":[{"name":"enabled","type":"bool","required":true,"desc":"Determine if the [DropdownMenu] is enabled."},{"name":"width","type":"double?","desc":"Determine the width of the [DropdownMenu]."},{"name":"menuHeight","type":"double?","desc":"Determine the height of the menu."},{"name":"leadingIcon","type":"Widget?","desc":"An optional Icon at the front of the text input field."},{"name":"trailingIcon","type":"Widget?","desc":"An optional icon at the end of the text field."},{"name":"label","type":"Widget?","desc":"Optional widget that describes the input field."},{"name":"hintText","type":"String?","desc":"Text that suggests what sort of input the field accepts."},{"name":"helperText","type":"String?","desc":"Text that provides context about the [DropdownMenu]'s value, such as how the value will be used."},{"name":"errorText","type":"String?","desc":"Text that appears below the input field and the border to show the error message."},{"name":"selectedTrailingIcon","type":"Widget?","desc":"An optional icon at the end of the text field to indicate that the text field is pressed."},{"name":"enableFilter","type":"bool","required":true,"desc":"Determine if the menu list can be filtered by the text input."},{"name":"enableSearch","type":"bool","required":true,"desc":"Determine if the first item that matches the text input can be highlighted."},{"name":"keyboardType","type":"TextInputType?","desc":"The type of keyboard to use for editing the text."},{"name":"textStyle","type":"TextStyle?","desc":"The text style for the [TextField] of the [DropdownMenu];"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"The text align for the [TextField] of the [DropdownMenu]."},{"name":"inputDecorationTheme","type":"InputDecorationTheme?","desc":"Defines the default appearance of [InputDecoration] to show around the text field."},{"name":"menuStyle","type":"MenuStyle?","desc":"The [MenuStyle] that defines the visual attributes of the menu."},{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited or selected in the menu."},{"name":"initialSelection","type":"T?","desc":"The value used to for an initial selection."},{"name":"onSelected","type":"ValueChanged?","desc":"The callback is called when a selection is made."},{"name":"focusNode","type":"FocusNode?","desc":"Defines the keyboard focus for this widget."},{"name":"requestFocusOnTap","type":"bool?","desc":"Determine if the dropdown button requests focus and the on-screen virtual keyboard is shown in response to a touch event."},{"name":"dropdownMenuEntries","type":"List>","required":true,"desc":"Descriptions of the menu items in the [DropdownMenu]."},{"name":"expandedInsets","type":"EdgeInsetsGeometry?","desc":"Defines the menu text field's width to be equal to its parent's width plus the horizontal width of the specified insets."},{"name":"filterCallback","type":"FilterCallback?","desc":"When [DropdownMenu.enableFilter] is true, this callback is used to compute the list of filtered items."},{"name":"searchCallback","type":"SearchCallback?","desc":"When [DropdownMenu.enableSearch] is true, this callback is used to compute the index of the search result to be highlighted."},{"name":"inputFormatters","type":"List?","desc":"Optional input validation and formatting overrides."},{"name":"alignmentOffset","type":"Offset?","desc":"{@macro flutter.material.MenuAnchor.alignmentOffset}"},{"name":"closeBehavior","type":"DropdownMenuCloseBehavior","required":true,"desc":"Defines the behavior for closing the dropdown menu when an item is selected."},{"name":"maxLines","type":"int?","desc":"Specifies the maximum number of lines the selected value can display in the [DropdownMenu]."},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"}],"id":370,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1.dart","name":"Simple Usage of Dropdown Menu","desc":["【dropdownMenuEntries】 : Menu item list 【List>】","【initialSelection】 : Form validation callback 【T?】","【onSelected】 : Form save callback 【ValueChanged?】","【menuHeight】 : Menu height 【double】","【width】 : Input box width 【double】"]},{"file":"node2.dart","name":"Dropdown Menu Style Settings","desc":["【controller】 : Text input controller 【TextEditingController?】","【label】 : Input box label 【Widget?】","【textStyle】 : Input box text style 【TextStyle?】","【inputDecorationTheme】 : Input box decoration theme 【InputDecorationTheme?】","【leadingIcon】 : Left icon 【Widget?】","【trailingIcon】 : Right icon when menu is expanded 【Widget?】","【selectedTrailingIcon】 : Right icon when menu is expanded 【Widget?】","【hintText】 : Input box hint text 【String?】","【helperText】 : Input box helper text 【String?】","【errorText】 : Input box error text 【String?】","【menuStyle】 : Popup menu style 【MenuStyle?】"]},{"file":"node3.dart","name":"Custom Menu Items for Dropdown Menu","desc":["You can customize the menu items by using the labelWidget of DropdownMenuEntry."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_zh-CN.json deleted file mode 100644 index 97a23825e..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownMenu/DropdownMenu_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownMenu","path":"/src/material/dropdown_menu.dart","parents":["StatefulWidget","Widget"],"desc":"可以从 [TextField] 打开的下拉菜单。选定的菜单项显示在该字段中。","fields":[{"name":"enabled","type":"bool","required":true,"desc":"确定 [DropdownMenu] 是否启用。"},{"name":"width","type":"double?","desc":"确定 [DropdownMenu] 的宽度。"},{"name":"menuHeight","type":"double?","desc":"确定菜单的高度。"},{"name":"leadingIcon","type":"Widget?","desc":"文本输入字段前面的可选图标。"},{"name":"trailingIcon","type":"Widget?","desc":"文本字段末尾的可选图标。"},{"name":"label","type":"Widget?","desc":"描述输入字段的可选小部件。"},{"name":"hintText","type":"String?","desc":"建议字段接受何种输入的文本。"},{"name":"helperText","type":"String?","desc":"提供有关 [DropdownMenu] 值上下文的文本,例如如何使用该值。"},{"name":"errorText","type":"String?","desc":"出现在输入字段和边框下方以显示错误消息的文本。"},{"name":"selectedTrailingIcon","type":"Widget?","desc":"文本字段末尾的可选图标,指示文本字段被按下。"},{"name":"enableFilter","type":"bool","required":true,"desc":"确定菜单列表是否可以通过文本输入进行过滤。"},{"name":"enableSearch","type":"bool","required":true,"desc":"确定是否可以突出显示与文本输入匹配的第一个项目。"},{"name":"keyboardType","type":"TextInputType?","desc":"用于编辑文本的键盘类型。"},{"name":"textStyle","type":"TextStyle?","desc":"[DropdownMenu] 的 [TextField] 的文本样式。"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"[DropdownMenu] 的 [TextField] 的文本对齐。"},{"name":"inputDecorationTheme","type":"InputDecorationTheme?","desc":"定义在文本字段周围显示的 [InputDecoration] 的默认外观。"},{"name":"menuStyle","type":"MenuStyle?","desc":"定义菜单视觉属性的 [MenuStyle]。"},{"name":"controller","type":"TextEditingController?","desc":"控制菜单中正在编辑或选择的文本。"},{"name":"initialSelection","type":"T?","desc":"用于初始选择的值。"},{"name":"onSelected","type":"ValueChanged?","desc":"进行选择时调用的回调。"},{"name":"focusNode","type":"FocusNode?","desc":"定义此小部件的键盘焦点。"},{"name":"requestFocusOnTap","type":"bool?","desc":"确定下拉按钮是否请求焦点并且屏幕虚拟键盘是否响应触摸事件显示。"},{"name":"dropdownMenuEntries","type":"List>","required":true,"desc":"[DropdownMenu] 中菜单项的描述。"},{"name":"expandedInsets","type":"EdgeInsetsGeometry?","desc":"定义菜单文本字段的宽度等于其父级的宽度加上指定插入的水平宽度。"},{"name":"filterCallback","type":"FilterCallback?","desc":"当 [DropdownMenu.enableFilter] 为 true 时,此回调用于计算过滤项目列表。"},{"name":"searchCallback","type":"SearchCallback?","desc":"当 [DropdownMenu.enableSearch] 为 true 时,此回调用于计算要突出显示的搜索结果的索引。"},{"name":"inputFormatters","type":"List?","desc":"可选的输入验证和格式化覆盖。"},{"name":"alignmentOffset","type":"Offset?","desc":"{@macro flutter.material.MenuAnchor.alignmentOffset}"},{"name":"closeBehavior","type":"DropdownMenuCloseBehavior","required":true,"desc":"定义选择项目时关闭下拉菜单的行为。"},{"name":"maxLines","type":"int?","desc":"指定选定值可以在 [DropdownMenu] 中显示的最大行数。"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"}],"id":370,"localName":"下拉菜单","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1.dart","name":"下拉菜单的简单使用","desc":["【dropdownMenuEntries】 : 菜单条目列表 【List>】","【initialSelection】 : 表单验证回调 【T?】","【onSelected】 : 表单保存回调 【ValueChanged?】","【menuHeight】 : 菜单高度 【double】","【width】 : 输入框宽度 【double】"]},{"file":"node2.dart","name":"下拉菜单样式设置","desc":["【controller】 : 文字输入控制器 【TextEditingController?】","【label】 : 输入框标签 【Widget?】","【textStyle】 : 输入框文字样式 【TextStyle?】","【inputDecorationTheme】 : 输入框装饰主题 【InputDecorationTheme?】","【leadingIcon】 : 左侧图标 【Widget?】","【trailingIcon】 : 右侧为展开菜单时图标 【Widget?】","【selectedTrailingIcon】 : 右侧展开菜单时图标 【Widget?】","【hintText】 : 输入框提示文字 【String?】","【helperText】 : 输入框辅助文字 【String?】","【errorText】 : 输入框错误文字 【String?】","【menuStyle】 : 弹出菜单样式 【MenuStyle?】"]},{"file":"node3.dart","name":"下拉菜单自定义菜单项","desc":["可以通过 DropdownMenuEntry 的 labelWidget 定制构建菜单项。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_en-US.json deleted file mode 100644 index e2d9fe27c..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownMenuItem","path":"/src/material/dropdown.dart","parents":["_DropdownMenuItemContainer","StatelessWidget","Widget"],"desc":" An item in a menu created by a [DropdownButton].","fields":[{"name":"onTap","type":"VoidCallback?","desc":"Called when the dropdown menu item is tapped."},{"name":"value","type":"T?","desc":"The value to return if the user selects this menu item."},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not a user can select this menu item."}],"id":410,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_zh-CN.json deleted file mode 100644 index bb8ed83ed..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownMenuItem/DropdownMenuItem_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownMenuItem","path":"/src/material/dropdown.dart","parents":["_DropdownMenuItemContainer","StatelessWidget","Widget"],"desc":"由 [DropdownButton] 创建的菜单中的项目。","fields":[{"name":"onTap","type":"VoidCallback?","desc":"点击下拉菜单项时调用。"},{"name":"value","type":"T?","desc":"如果用户选择此菜单项,要返回的值。"},{"name":"enabled","type":"bool","required":true,"desc":"用户是否可以选择此菜单项。"}],"id":410,"localName":"DropdownMenuItem","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_en-US.json deleted file mode 100644 index 0d3cb5944..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownMenuTheme","path":"/src/material/dropdown_menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the visual properties for [DropdownMenu]s in this widget's subtree.","fields":[{"name":"data","type":"DropdownMenuThemeData","required":true,"desc":"Specifies the visual properties used by descendant [DropdownMenu] widgets."}],"id":411,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_zh-CN.json deleted file mode 100644 index 7bcc31cec..000000000 --- a/modules/widget_system/widgets/doc/widgets/DropdownMenuTheme/DropdownMenuTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DropdownMenuTheme","path":"/src/material/dropdown_menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [DropdownMenu] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"DropdownMenuThemeData","required":true,"desc":"指定后代 [DropdownMenu] 小部件使用的视觉属性。"}],"id":411,"localName":"DropdownMenuTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_en-US.json deleted file mode 100644 index 340036dac..000000000 --- a/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DualTransitionBuilder","path":"/src/widgets/dual_transition_builder.dart","parents":["StatefulWidget","Widget"],"desc":" A transition builder that animates its [child] based on the [AnimationStatus] of the provided [animation].","fields":[{"name":"animation","type":"Animation","required":true,"desc":"The animation that drives the [child]'s transition."},{"name":"forwardBuilder","type":"AnimatedTransitionBuilder","required":true,"desc":"A builder for the transition that makes [child] appear on screen."},{"name":"reverseBuilder","type":"AnimatedTransitionBuilder","required":true,"desc":"A builder for a transition that makes [child] disappear from the screen."},{"name":"child","type":"Widget?","desc":"The widget below this [DualTransitionBuilder] in the tree."}],"id":412,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_zh-CN.json deleted file mode 100644 index 517c16af0..000000000 --- a/modules/widget_system/widgets/doc/widgets/DualTransitionBuilder/DualTransitionBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"DualTransitionBuilder","path":"/src/widgets/dual_transition_builder.dart","parents":["StatefulWidget","Widget"],"desc":"根据提供的 [animation] 的 [AnimationStatus] 对其 [child] 进行动画处理的过渡构建器。","fields":[{"name":"animation","type":"Animation","required":true,"desc":"驱动 [child] 过渡的动画。"},{"name":"forwardBuilder","type":"AnimatedTransitionBuilder","required":true,"desc":"使 [child] 出现在屏幕上的过渡构建器。"},{"name":"reverseBuilder","type":"AnimatedTransitionBuilder","required":true,"desc":"使 [child] 从屏幕上消失的过渡构建器。"},{"name":"child","type":"Widget?","desc":"树中此 [DualTransitionBuilder] 下方的小部件。"}],"id":412,"localName":"DualTransitionBuilder","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_en-US.json b/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_en-US.json deleted file mode 100644 index ecc1d45fe..000000000 --- a/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"EditableText","path":"/src/widgets/editable_text.dart","parents":["StatefulWidget","Widget"],"desc":" A basic text input field.","fields":[{"name":"controller","type":"TextEditingController","required":true,"desc":"Controls the text being edited."},{"name":"focusNode","type":"FocusNode","required":true,"desc":"Controls whether this widget has keyboard focus."},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@template flutter.widgets.editableText.obscuringCharacter} Character used for obscuring text if [obscureText] is true."},{"name":"obscureText","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.obscureText} Whether to hide the text being edited (e.g., for passwords)."},{"name":"textHeightBehavior","type":"TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.readOnly} Whether the text can be changed."},{"name":"forceLine","type":"bool","required":true,"desc":"Whether the text will take the full width regardless of the text width."},{"name":"toolbarOptions","type":"ToolbarOptions","required":true,"desc":"Configuration of toolbar options."},{"name":"showSelectionHandles","type":"bool","required":true,"desc":"Whether to show selection handles."},{"name":"showCursor","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.showCursor} Whether to show cursor."},{"name":"autocorrect","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.autocorrect} Whether to enable autocorrection."},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"style","type":"TextStyle","required":true,"desc":"The text style to use for the editable text."},{"name":"undoController","type":"UndoHistoryController?","desc":"Controls the undo state of the current editable text."},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@template flutter.widgets.editableText.textAlign} How the text should be aligned horizontally."},{"name":"textDirection","type":"TextDirection?","desc":"{@template flutter.widgets.editableText.textDirection} The directionality of the text."},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@template flutter.widgets.editableText.textCapitalization} Configures how the platform keyboard will select an uppercase or lowercase keyboard."},{"name":"locale","type":"Locale?","desc":"Used to select a font when the same Unicode character can be rendered differently, depending on the locale."},{"name":"textScaleFactor","type":"double?","desc":"{@template flutter.widgets.editableText.textScaleFactor} Deprecated. Will be removed in a future version of Flutter. Use [textScaler] instead."},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"cursorColor","type":"Color","required":true,"desc":"The color to use when painting the cursor."},{"name":"autocorrectionTextRectColor","type":"Color?","desc":"The color to use when painting the autocorrection Rect."},{"name":"backgroundCursorColor","type":"Color","required":true,"desc":"The color to use when painting the background cursor aligned with the text while rendering the floating cursor."},{"name":"maxLines","type":"int?","desc":"{@template flutter.widgets.editableText.maxLines} The maximum number of lines to show at one time, wrapping if necessary."},{"name":"minLines","type":"int?","desc":"{@template flutter.widgets.editableText.minLines} The minimum number of lines to occupy when the content spans fewer lines."},{"name":"expands","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.expands} Whether this widget's height will be sized to fill its parent."},{"name":"autofocus","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.autofocus} Whether this text field should focus itself if nothing else is already focused."},{"name":"selectionColor","type":"Color?","desc":"The color to use when painting the selection."},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@template flutter.widgets.editableText.selectionControls} Optional delegate for building the text selection handles."},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@template flutter.widgets.editableText.keyboardType} The type of keyboard to use for editing the text."},{"name":"textInputAction","type":"TextInputAction?","desc":"The type of action button to use with the soft keyboard."},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.widgets.editableText.onChanged} Called when the user initiates a change to the TextField's value: when they have inserted or deleted text."},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@template flutter.widgets.editableText.onEditingComplete} Called when the user submits editable content (e.g., user presses the \"done\" button on the keyboard)."},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@template flutter.widgets.editableText.onSubmitted} Called when the user indicates that they are done editing the text in the field."},{"name":"onAppPrivateCommand","type":"AppPrivateCommandCallback?","desc":"{@template flutter.widgets.editableText.onAppPrivateCommand} This is used to receive a private command from the input method."},{"name":"onSelectionChanged","type":"SelectionChangedCallback?","desc":"{@template flutter.widgets.editableText.onSelectionChanged} Called when the user changes the selection of text (including the cursor location). {@endtemplate}"},{"name":"onSelectionHandleTapped","type":"VoidCallback?","desc":"{@macro flutter.widgets.SelectionOverlay.onSelectionHandleTapped}"},{"name":"groupId","type":"Object","required":true,"desc":"{@template flutter.widgets.editableText.groupId} The group identifier for the [TextFieldTapRegion] of this text field."},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@template flutter.widgets.editableText.onTapOutside} Called for each tap down that occurs outside of the [TextFieldTapRegion] group when the text field is focused."},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"{@template flutter.widgets.editableText.onTapUpOutside} Called for each tap up that occurs outside of the [TextFieldTapRegion] group when the text field is focused."},{"name":"inputFormatters","type":"List?","desc":"{@template flutter.widgets.editableText.inputFormatters} Optional input validation and formatting overrides."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"rendererIgnoresPointer","type":"bool","required":true,"desc":"Whether the caller will provide gesture handling (true), or if the [EditableText] is expected to handle basic gestures (false)."},{"name":"cursorWidth","type":"double","required":true,"desc":"{@template flutter.widgets.editableText.cursorWidth} How thick the cursor will be."},{"name":"cursorHeight","type":"double?","desc":"{@template flutter.widgets.editableText.cursorHeight} How tall the cursor will be."},{"name":"cursorRadius","type":"Radius?","desc":"{@template flutter.widgets.editableText.cursorRadius} How rounded the corners of the cursor should be."},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.cursorOpacityAnimates} Whether the cursor will animate from fully transparent to fully opaque during each cursor blink."},{"name":"cursorOffset","type":"Offset?","desc":"{@macro flutter.rendering.RenderEditable.cursorOffset}"},{"name":"paintCursorAboveText","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderEditable.paintCursorAboveText}"},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"Controls how tall the selection highlight boxes are computed to be."},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"Controls how wide the selection highlight boxes are computed to be."},{"name":"keyboardAppearance","type":"Brightness","required":true,"desc":"The appearance of the keyboard."},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@template flutter.widgets.editableText.scrollPadding} Configures the padding for the edges surrounding a [Scrollable] when the text field scrolls into view."},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.enableInteractiveSelection} Whether to enable user interface affordances for changing the text selection."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"scrollController","type":"ScrollController?","desc":"{@template flutter.widgets.editableText.scrollController} The [ScrollController] to use when vertically scrolling the input."},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.editableText.scrollPhysics} The [ScrollPhysics] to use when vertically scrolling the input."},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.scribbleEnabled} Whether iOS 14 Scribble features are enabled for this widget."},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.stylusHandwritingEnabled} Whether this input supports stylus handwriting, where the user can write directly on top of a field."},{"name":"autofillHints","type":"Iterable?","desc":"{@template flutter.widgets.editableText.autofillHints} A list of strings that helps the autofill service identify the type of this text input."},{"name":"autofillClient","type":"AutofillClient?","desc":"The [AutofillClient] that controls this input field's autofill behavior."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the scroll offset of the [EditableText]."},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.widgets.editableText.scrollBehavior} A [ScrollBehavior] that will be applied to this widget individually."},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@template flutter.widgets.editableText.contentInsertionConfiguration} Configuration of handler for media content inserted via the system input method."},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@template flutter.widgets.EditableText.contextMenuBuilder} Builds the text selection toolbar when requested by the user."},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@template flutter.widgets.EditableText.spellCheckConfiguration} Configuration that details how spell check should be performed."},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration","required":true,"desc":"The configuration for the magnifier to use with selections in this text field."}],"id":244,"lever":2,"family":1,"linkIds":[2,54],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of EditableText","desc":["【controller】: Controller 【TextEditingController】","【focusNode】: Focus Node 【FocusNode】","【style】: Text Style 【TextStyle】","【backgroundCursorColor】: Background Cursor Color 【Color】","【cursorColor】: Cursor Color 【Color】","The above five are the essential properties of EditableText. Others are the same as TextField and will not be listed here."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_zh-CN.json b/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_zh-CN.json deleted file mode 100644 index 5a9de9e6b..000000000 --- a/modules/widget_system/widgets/doc/widgets/EditableText/EditableText_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"EditableText","path":"/src/widgets/editable_text.dart","parents":["StatefulWidget","Widget"],"desc":"基本文本输入字段。","fields":[{"name":"controller","type":"TextEditingController","required":true,"desc":"控制正在编辑的文本。"},{"name":"focusNode","type":"FocusNode","required":true,"desc":"控制此小部件是否具有键盘焦点。"},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@template flutter.widgets.editableText.obscuringCharacter} 如果 [obscureText] 为 true,用于遮挡文本的字符。"},{"name":"obscureText","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.obscureText} 是否隐藏正在编辑的文本(例如,用于密码)。"},{"name":"textHeightBehavior","type":"TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.readOnly} 文本是否可以更改。"},{"name":"forceLine","type":"bool","required":true,"desc":"无论文本宽度如何,文本是否占用全宽。"},{"name":"toolbarOptions","type":"ToolbarOptions","required":true,"desc":"工具栏选项的配置。"},{"name":"showSelectionHandles","type":"bool","required":true,"desc":"是否显示选择手柄。"},{"name":"showCursor","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.showCursor} 是否显示光标。"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.autocorrect} 是否启用自动更正。"},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"style","type":"TextStyle","required":true,"desc":"用于可编辑文本的文本样式。"},{"name":"undoController","type":"UndoHistoryController?","desc":"控制当前可编辑文本的撤销状态。"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@template flutter.widgets.editableText.textAlign} 文本应如何水平对齐。"},{"name":"textDirection","type":"TextDirection?","desc":"{@template flutter.widgets.editableText.textDirection} 文本的方向性。"},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@template flutter.widgets.editableText.textCapitalization} 配置平台键盘如何选择大写或小写键盘。"},{"name":"locale","type":"Locale?","desc":"用于在同一 Unicode 字符可以根据区域设置以不同方式呈现时选择字体。"},{"name":"textScaleFactor","type":"double?","desc":"{@template flutter.widgets.editableText.textScaleFactor} 已弃用。将在 Flutter 的未来版本中删除。请改用 [textScaler]。"},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"cursorColor","type":"Color","required":true,"desc":"绘制光标时使用的颜色。"},{"name":"autocorrectionTextRectColor","type":"Color?","desc":"绘制自动更正矩形时使用的颜色。"},{"name":"backgroundCursorColor","type":"Color","required":true,"desc":"在渲染浮动光标时绘制与文本对齐的背景光标时使用的颜色。"},{"name":"maxLines","type":"int?","desc":"{@template flutter.widgets.editableText.maxLines} 一次显示的最大行数,必要时换行。"},{"name":"minLines","type":"int?","desc":"{@template flutter.widgets.editableText.minLines} 当内容跨越较少行时占用的最小行数。"},{"name":"expands","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.expands} 此小部件的高度是否将调整大小以填充其父级。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.autofocus} 如果没有其他内容已经聚焦,此文本字段是否应该聚焦自己。"},{"name":"selectionColor","type":"Color?","desc":"绘制选择时使用的颜色。"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@template flutter.widgets.editableText.selectionControls} 用于构建文本选择手柄的可选委托。"},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@template flutter.widgets.editableText.keyboardType} 用于编辑文本的键盘类型。"},{"name":"textInputAction","type":"TextInputAction?","desc":"与软键盘一起使用的操作按钮类型。"},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.widgets.editableText.onChanged} 当用户启动对 TextField 值的更改时调用:当他们插入或删除文本时。"},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@template flutter.widgets.editableText.onEditingComplete} 当用户提交可编辑内容时调用(例如,用户按下键盘上的\\"},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@template flutter.widgets.editableText.onSubmitted} 当用户指示他们已完成编辑字段中的文本时调用。"},{"name":"onAppPrivateCommand","type":"AppPrivateCommandCallback?","desc":"{@template flutter.widgets.editableText.onAppPrivateCommand} 这用于从输入法接收私有命令。"},{"name":"onSelectionChanged","type":"SelectionChangedCallback?","desc":"{@template flutter.widgets.editableText.onSelectionChanged} 当用户更改文本选择时调用(包括光标位置)。{@endtemplate}"},{"name":"onSelectionHandleTapped","type":"VoidCallback?","desc":"{@macro flutter.widgets.SelectionOverlay.onSelectionHandleTapped}"},{"name":"groupId","type":"Object","required":true,"desc":"{@template flutter.widgets.editableText.groupId} 此文本字段的 [TextFieldTapRegion] 的组标识符。"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@template flutter.widgets.editableText.onTapOutside} 当文本字段聚焦时,对于发生在 [TextFieldTapRegion] 组外的每次点击调用。"},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"{@template flutter.widgets.editableText.onTapUpOutside} 当文本字段聚焦时,对于发生在 [TextFieldTapRegion] 组外的每次点击抬起调用。"},{"name":"inputFormatters","type":"List?","desc":"{@template flutter.widgets.editableText.inputFormatters} 可选的输入验证和格式化覆盖。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"rendererIgnoresPointer","type":"bool","required":true,"desc":"调用者是否将提供手势处理(true),或者 [EditableText] 是否应该处理基本手势(false)。"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@template flutter.widgets.editableText.cursorWidth} 光标的厚度。"},{"name":"cursorHeight","type":"double?","desc":"{@template flutter.widgets.editableText.cursorHeight} 光标的高度。"},{"name":"cursorRadius","type":"Radius?","desc":"{@template flutter.widgets.editableText.cursorRadius} 光标角的圆度。"},{"name":"cursorOpacityAnimates","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.cursorOpacityAnimates} 光标是否在每次光标闪烁期间从完全透明动画到完全不透明。"},{"name":"cursorOffset","type":"Offset?","desc":"{@macro flutter.rendering.RenderEditable.cursorOffset}"},{"name":"paintCursorAboveText","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderEditable.paintCursorAboveText}"},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"控制选择高亮框的计算高度。"},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"控制选择高亮框的计算宽度。"},{"name":"keyboardAppearance","type":"Brightness","required":true,"desc":"键盘的外观。"},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@template flutter.widgets.editableText.scrollPadding} 当文本字段滚动到视图中时,为围绕 [Scrollable] 的边缘配置内边距。"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.enableInteractiveSelection} 是否启用用于更改文本选择的用户界面功能。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"scrollController","type":"ScrollController?","desc":"{@template flutter.widgets.editableText.scrollController} 垂直滚动输入时使用的 [ScrollController]。"},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.editableText.scrollPhysics} 垂直滚动输入时使用的 [ScrollPhysics]。"},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.scribbleEnabled} 是否为此小部件启用 iOS 14 Scribble 功能。"},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@template flutter.widgets.editableText.stylusHandwritingEnabled} 此输入是否支持手写笔手写,用户可以直接在字段顶部书写。"},{"name":"autofillHints","type":"Iterable?","desc":"{@template flutter.widgets.editableText.autofillHints} 帮助自动填充服务识别此文本输入类型的字符串列表。"},{"name":"autofillClient","type":"AutofillClient?","desc":"控制此输入字段自动填充行为的 [AutofillClient]。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [EditableText] 滚动偏移量的恢复 ID。"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.widgets.editableText.scrollBehavior} 将单独应用于此小部件的 [ScrollBehavior]。"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@template flutter.widgets.editableText.contentInsertionConfiguration} 通过系统输入法插入的媒体内容处理程序的配置。"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@template flutter.widgets.EditableText.contextMenuBuilder} 用户请求时构建文本选择工具栏。"},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@template flutter.widgets.EditableText.spellCheckConfiguration} 详细说明如何执行拼写检查的配置。"},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration","required":true,"desc":"用于此文本字段中选择的放大镜配置。"}],"id":244,"localName":"可编辑文字","lever":2,"family":1,"linkIds":[2,54],"nodes":[{"file":"node1_base.dart","name":"EditableText基本使用","desc":["【controller】 : 控制器 【TextEditingController】","【focusNode】 : 焦点 【FocusNode】","【style】 : 文字样式 【TextStyle】","【backgroundCursorColor】 : 背景游标颜色 【Color】","【cursorColor】 : 游标颜色 【Color】","上面五个是EditableText必须的属性,其他同TextField,此处不再列举。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_en-US.json b/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_en-US.json deleted file mode 100644 index f114cdb90..000000000 --- a/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ElevatedButton","path":"/src/material/elevated_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":" A Material Design \"elevated button\".","fields":[],"id":354,"lever":3,"family":1,"linkIds":[353,26,355],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ElevatedButton","desc":["【child】: Whether it has a scrollable body 【Widget】","【onPressed】: Click event 【VoidCallback】","【onLongPress】: Long press event 【VoidCallback】"]},{"file":"node2_style.dart","name":"ElevatedButton Style","desc":["【style】: Button style 【ButtonStyle】","【focusNode】: Focus 【FocusNode】","【clipBehavior】: Clip behavior 【Clip】","【autofocus】: Auto focus 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_zh-CN.json deleted file mode 100644 index b7d126a64..000000000 --- a/modules/widget_system/widgets/doc/widgets/ElevatedButton/ElevatedButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ElevatedButton","path":"/src/material/elevated_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":"Material Design \"凸起按钮\"。","fields":[],"id":354,"localName":"升起按钮","lever":3,"family":1,"linkIds":[353,26,355],"nodes":[{"file":"node1_base.dart","name":"ElevatedButton基本使用","desc":["【child】 : 是否具有滚动主体 【Widget】","【onPressed】 : 点击事件 【VoidCallback】","【onLongPress】 : 长按事件 【VoidCallback】"]},{"file":"node2_style.dart","name":"ElevatedButton样式","desc":["【style】 : 按钮样式 【ButtonStyle】","【focusNode】 : 焦点 【FocusNode】","【clipBehavior】 : 裁剪行为 【Clip】","【autofocus】 : 自动聚焦 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_en-US.json deleted file mode 100644 index 68859bba1..000000000 --- a/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ElevatedButtonTheme","path":"/src/material/elevated_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [ElevatedButton] descendants.","fields":[{"name":"data","type":"ElevatedButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":413,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_zh-CN.json deleted file mode 100644 index 9cf35e5fa..000000000 --- a/modules/widget_system/widgets/doc/widgets/ElevatedButtonTheme/ElevatedButtonTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ElevatedButtonTheme","path":"/src/material/elevated_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [ElevatedButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"ElevatedButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":413,"localName":"ElevatedButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_en-US.json b/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_en-US.json deleted file mode 100644 index 8e538eae0..000000000 --- a/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"EndDrawerButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":" A Material Design end drawer icon button.","fields":[],"id":361,"lever":1,"family":0,"linkIds":[275,276],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of EndDrawerButton","desc":["【onPressed】: Click event 【VoidCallback?】","【style】: Button style 【ButtonStyle?】","When onPressed is empty, clicking will open the right drawer."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_zh-CN.json deleted file mode 100644 index c9e8112e9..000000000 --- a/modules/widget_system/widgets/doc/widgets/EndDrawerButton/EndDrawerButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"EndDrawerButton","path":"/src/material/action_buttons.dart","parents":["_ActionButton","IconButton","StatelessWidget","Widget"],"desc":"Material Design 末端抽屉图标按钮。","fields":[],"id":361,"localName":"右抽屉按钮","lever":1,"family":0,"linkIds":[275,276],"nodes":[{"file":"node1_base.dart","name":"EndDrawerButton 基本使用","desc":["【onPressed】 : 点击事件 【VoidCallback?】","【style】: 按钮样式 【ButtonStyle?】","onPressed 为空时,点击时会打开右抽屉。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_en-US.json deleted file mode 100644 index e04ef0752..000000000 --- a/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"EndDrawerButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":" A \"end drawer\" icon that's appropriate for the current [TargetPlatform].","fields":[],"id":275,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"EndDrawerButtonIcon Effect","desc":["The _ActionIcon component adapts the right drawer button icon for different platforms based on the ActionIconTheme."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_zh-CN.json deleted file mode 100644 index e1c023ebf..000000000 --- a/modules/widget_system/widgets/doc/widgets/EndDrawerButtonIcon/EndDrawerButtonIcon_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"EndDrawerButtonIcon","path":"/src/material/action_buttons.dart","parents":["StatelessWidget","Widget"],"desc":"适合当前 [TargetPlatform] 的\"末端抽屉\"图标。","fields":[],"id":275,"localName":"右抽屉按钮图标","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"EndDrawerButtonIcon 效果","desc":["通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的右抽屉按钮图标。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_en-US.json deleted file mode 100644 index 21af38d9b..000000000 --- a/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ErrorWidget","path":"/src/widgets/framework.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that renders an exception's message.","fields":[{"name":"message","type":"String","required":true,"desc":"The message to display."}],"id":197,"lever":1,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ErrorWidget","desc":["Parameters: Display Message 【Object】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_zh-CN.json deleted file mode 100644 index d9117796c..000000000 --- a/modules/widget_system/widgets/doc/widgets/ErrorWidget/ErrorWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ErrorWidget","path":"/src/widgets/framework.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"渲染异常消息的小部件。","fields":[{"name":"message","type":"String","required":true,"desc":"要显示的消息。"}],"id":197,"localName":"错误组件","lever":1,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ErrorWidget基本使用","desc":["入参 : 显示信息 【Object】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_en-US.json b/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_en-US.json deleted file mode 100644 index 1b98bf364..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExcludeFocus","path":"/src/widgets/focus_scope.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that controls whether or not the descendants of this widget are focusable.","fields":[{"name":"excluding","type":"bool","required":true,"desc":"If true, will make this widget's descendants unfocusable."},{"name":"child","type":"Widget","required":true,"desc":"The child widget of this [ExcludeFocus]."}],"id":414,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_zh-CN.json deleted file mode 100644 index cab9a0e84..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExcludeFocus/ExcludeFocus_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExcludeFocus","path":"/src/widgets/focus_scope.dart","parents":["StatelessWidget","Widget"],"desc":"控制此小部件的后代是否可聚焦的小部件。","fields":[{"name":"excluding","type":"bool","required":true,"desc":"如果为 true,将使此小部件的后代无法聚焦。"},{"name":"child","type":"Widget","required":true,"desc":"此 [ExcludeFocus] 的子小部件。"}],"id":414,"localName":"ExcludeFocus","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_en-US.json b/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_en-US.json deleted file mode 100644 index f7522fea9..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExcludeFocusTraversal","path":"/src/widgets/focus_traversal.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that controls whether or not the descendants of this widget are traversable.","fields":[{"name":"excluding","type":"bool","required":true,"desc":"If true, will make this widget's descendants untraversable."},{"name":"child","type":"Widget","required":true,"desc":"The child widget of this [ExcludeFocusTraversal]."}],"id":415,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_zh-CN.json deleted file mode 100644 index 82712d623..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExcludeFocusTraversal/ExcludeFocusTraversal_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExcludeFocusTraversal","path":"/src/widgets/focus_traversal.dart","parents":["StatelessWidget","Widget"],"desc":"控制此小部件的后代是否可遍历的小部件。","fields":[{"name":"excluding","type":"bool","required":true,"desc":"如果为 true,将使此小部件的后代不可遍历。"},{"name":"child","type":"Widget","required":true,"desc":"此 [ExcludeFocusTraversal] 的子小部件。"}],"id":415,"localName":"ExcludeFocusTraversal","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_en-US.json b/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_en-US.json deleted file mode 100644 index 8ab178fb0..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExcludeSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that drops all the semantics of its descendants.","fields":[{"name":"excluding","type":"bool","required":true,"desc":"Whether this widget is excluded in the semantics tree."}],"id":416,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_zh-CN.json deleted file mode 100644 index 4ee73f1de..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExcludeSemantics/ExcludeSemantics_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExcludeSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"丢弃其所有后代语义的小部件。","fields":[{"name":"excluding","type":"bool","required":true,"desc":"此小部件是否在语义树中被排除。"}],"id":416,"localName":"ExcludeSemantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_en-US.json deleted file mode 100644 index ac2b3f416..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExpandIcon","path":"/src/material/expand_icon.dart","parents":["StatefulWidget","Widget"],"desc":" A widget representing a rotating expand/collapse button. The icon rotates 180 degrees when pressed, then reverts the animation on a second press. The underlying icon is [Icons.expand_more].","fields":[{"name":"isExpanded","type":"bool","required":true,"desc":"Whether the icon is in an expanded state."},{"name":"size","type":"double","required":true,"desc":"The size of the icon."},{"name":"onPressed","type":"ValueChanged?","desc":"The callback triggered when the icon is pressed and the state changes between expanded and collapsed. The value passed to the current state."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The padding around the icon. The entire padded icon will react to input gestures."},{"name":"color","type":"Color?","desc":"{@template flutter.material.ExpandIcon.color} The color of the icon."},{"name":"disabledColor","type":"Color?","desc":"The color of the icon when it is disabled, i.e. if [onPressed] is null."},{"name":"expandedColor","type":"Color?","desc":"The color of the icon when the icon is expanded."},{"name":"splashColor","type":"Color?","desc":"Defines the splash color of the IconButton."},{"name":"highlightColor","type":"Color?","desc":"Defines the highlight color of the IconButton."}],"id":51,"lever":1,"family":1,"linkIds":[66,125],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ExpandIcon","desc":["【isExpanded】 : Whether expanded 【bool】","【padding】 : Padding 【EdgeInsetsGeometry】,","【size】 : Icon size 【double】","【color】 : Color when not expanded 【Color】","【expandedColor】 : Color when expanded 【Color】","【onPressed】 : Click event 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_zh-CN.json deleted file mode 100644 index 8506faf29..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExpandIcon/ExpandIcon_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExpandIcon","path":"/src/material/expand_icon.dart","parents":["StatefulWidget","Widget"],"desc":"表示旋转展开/折叠按钮的小部件。按下时图标旋转 180 度,第二次按下时恢复动画。底层图标是 [Icons.expand_more]。","fields":[{"name":"isExpanded","type":"bool","required":true,"desc":"图标是否处于展开状态。"},{"name":"size","type":"double","required":true,"desc":"图标的大小。"},{"name":"onPressed","type":"ValueChanged?","desc":"按下图标且状态在展开和折叠之间变化时触发的回调。传递给当前状态的值。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"图标周围的内边距。整个带内边距的图标将对输入手势做出反应。"},{"name":"color","type":"Color?","desc":"{@template flutter.material.ExpandIcon.color} 图标的颜色。"},{"name":"disabledColor","type":"Color?","desc":"图标禁用时的颜色,即 [onPressed] 为 null 时。"},{"name":"expandedColor","type":"Color?","desc":"图标展开时的颜色。"},{"name":"splashColor","type":"Color?","desc":"定义 IconButton 的飞溅颜色。"},{"name":"highlightColor","type":"Color?","desc":"定义 IconButton 的高亮颜色。"}],"id":51,"localName":"展开图标","lever":1,"family":1,"linkIds":[66,125],"nodes":[{"file":"node1_base.dart","name":"ExpandIcon基本使用","desc":["【isExpanded】 : 是否展开 【bool】","【padding】 : 内边距 【EdgeInsetsGeometry】,","【size】 : 图标大小 【double】","【color】 : 不展开时颜色 【Color】","【expandedColor】 : 展开时颜色 【Color】","【onPressed】 : 点击事件 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_en-US.json b/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_en-US.json deleted file mode 100644 index 3564f26b0..000000000 --- a/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Expanded","path":"/src/widgets/basic.dart","parents":["Flexible","ParentDataWidget","ProxyWidget","Widget"],"desc":" A widget that expands a child of a [Row], [Column], or [Flex] so that the child fills the available space.","fields":[],"id":106,"lever":4,"family":5,"linkIds":[94,109],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Expanded","desc":["【child】: child 【Widget】","【flex】: Proportion of remaining space allocation 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_zh-CN.json deleted file mode 100644 index b64f100cd..000000000 --- a/modules/widget_system/widgets/doc/widgets/Expanded/Expanded_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Expanded","path":"/src/widgets/basic.dart","parents":["Flexible","ParentDataWidget","ProxyWidget","Widget"],"desc":"扩展 [Row]、[Column] 或 [Flex] 的子项,使子项填充可用空间的小部件。","fields":[],"id":106,"localName":"延展组件","lever":4,"family":5,"linkIds":[94,109],"nodes":[{"file":"node1_base.dart","name":"Expanded基本使用","desc":["【child】 : 孩子 【Widget】","【flex】 : 剩余空间分配占比 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_en-US.json b/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_en-US.json deleted file mode 100644 index 21e156d47..000000000 --- a/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Expansible","path":"/src/widgets/expansible.dart","parents":["StatefulWidget","Widget"],"desc":" A [StatefulWidget] that expands and collapses.","fields":[{"name":"controller","type":"ExpansibleController","required":true,"desc":"Expands and collapses the widget."},{"name":"headerBuilder","type":"ExpansibleComponentBuilder","required":true,"desc":"Builds the always-displayed header."},{"name":"bodyBuilder","type":"ExpansibleComponentBuilder","required":true,"desc":"Builds the collapsible body."},{"name":"duration","type":"Duration","required":true,"desc":"The duration of the expansion animation."},{"name":"curve","type":"Curve","required":true,"desc":"The curve of the expansion animation."},{"name":"reverseCurve","type":"Curve?","desc":"The reverse curve of the expansion animation."},{"name":"maintainState","type":"bool","required":true,"desc":"Whether the state of the body is maintained when the widget expands or collapses."},{"name":"expansibleBuilder","type":"ExpansibleBuilder","required":true,"desc":"Builds the widget with the results of [headerBuilder] and [bodyBuilder]."}],"id":417,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_zh-CN.json deleted file mode 100644 index befc9509c..000000000 --- a/modules/widget_system/widgets/doc/widgets/Expansible/Expansible_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Expansible","path":"/src/widgets/expansible.dart","parents":["StatefulWidget","Widget"],"desc":"展开和折叠的 [StatefulWidget]。","fields":[{"name":"controller","type":"ExpansibleController","required":true,"desc":"展开和折叠小部件。"},{"name":"headerBuilder","type":"ExpansibleComponentBuilder","required":true,"desc":"构建始终显示的标题。"},{"name":"bodyBuilder","type":"ExpansibleComponentBuilder","required":true,"desc":"构建可折叠的主体。"},{"name":"duration","type":"Duration","required":true,"desc":"展开动画的持续时间。"},{"name":"curve","type":"Curve","required":true,"desc":"展开动画的曲线。"},{"name":"reverseCurve","type":"Curve?","desc":"展开动画的反向曲线。"},{"name":"maintainState","type":"bool","required":true,"desc":"当小部件展开或折叠时是否保持主体的状态。"},{"name":"expansibleBuilder","type":"ExpansibleBuilder","required":true,"desc":"使用 [headerBuilder] 和 [bodyBuilder] 的结果构建小部件。"}],"id":417,"localName":"Expansible","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_en-US.json b/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_en-US.json deleted file mode 100644 index db0f4249d..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExpansionPanelList","path":"/src/material/expansion_panel.dart","parents":["StatefulWidget","Widget"],"desc":" A material expansion panel list that lays out its children and animates expansions.","fields":[{"name":"children","type":"List","required":true,"desc":"The children of the expansion panel list. They are laid out in a similar fashion to [ListBody]."},{"name":"expansionCallback","type":"ExpansionPanelCallback?","desc":"The callback that gets called whenever one of the expand/collapse buttons is pressed. The arguments passed to the callback are the index of the pressed panel and whether the panel is currently expanded or not."},{"name":"animationDuration","type":"Duration","required":true,"desc":"The duration of the expansion animation."},{"name":"initialOpenPanelValue","type":"Object?","desc":"The value of the panel that initially begins open. (This value is only used when initializing with the [ExpansionPanelList.radio] constructor.)"},{"name":"expandedHeaderPadding","type":"EdgeInsets","required":true,"desc":"The padding that surrounds the panel header when expanded."},{"name":"dividerColor","type":"Color?","desc":"Defines color for the divider when [ExpansionPanel.isExpanded] is false."},{"name":"elevation","type":"double","required":true,"desc":"Defines elevation for the [ExpansionPanel] while it's expanded."},{"name":"expandIconColor","type":"Color?","desc":"{@macro flutter.material.ExpandIcon.color}"},{"name":"materialGapSize","type":"double","required":true,"desc":"Defines the [MaterialGap.size] of the [MaterialGap] which is placed between the [ExpansionPanelList.children] when they're expanded."}],"id":178,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ExpansionPanelList","desc":["【children】: List of child components 【List】","【animationDuration】: Animation duration 【Duration】","【expansionCallback】: Expansion callback 【List】","【onPressed】: Click event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_zh-CN.json deleted file mode 100644 index 947300299..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExpansionPanelList/ExpansionPanelList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExpansionPanelList","path":"/src/material/expansion_panel.dart","parents":["StatefulWidget","Widget"],"desc":"布局其子项并为展开设置动画的 material 展开面板列表。","fields":[{"name":"children","type":"List","required":true,"desc":"展开面板列表的子项。它们以类似于 [ListBody] 的方式布局。"},{"name":"expansionCallback","type":"ExpansionPanelCallback?","desc":"每当按下展开/折叠按钮之一时调用的回调。传递给回调的参数是按下的面板的索引以及面板当前是否展开。"},{"name":"animationDuration","type":"Duration","required":true,"desc":"展开动画的持续时间。"},{"name":"initialOpenPanelValue","type":"Object?","desc":"最初开始打开的面板的值。(此值仅在使用 [ExpansionPanelList.radio] 构造函数初始化时使用。)"},{"name":"expandedHeaderPadding","type":"EdgeInsets","required":true,"desc":"展开时围绕面板标题的内边距。"},{"name":"dividerColor","type":"Color?","desc":"当 [ExpansionPanel.isExpanded] 为 false 时定义分隔符的颜色。"},{"name":"elevation","type":"double","required":true,"desc":"定义 [ExpansionPanel] 展开时的高度。"},{"name":"expandIconColor","type":"Color?","desc":"{@macro flutter.material.ExpandIcon.color}"},{"name":"materialGapSize","type":"double","required":true,"desc":"定义当 [ExpansionPanelList.children] 展开时放置在它们之间的 [MaterialGap] 的 [MaterialGap.size]。"}],"id":178,"localName":"展开列表","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ExpansionPanelList基本使用","desc":["【children】 : 子组件列表 【List】","【animationDuration】 : 动画时长 【Duration】","【expansionCallback】 : 展开回调 【List】","【onPressed】 : 点击事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_en-US.json b/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_en-US.json deleted file mode 100644 index 2795d5c63..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExpansionTile","path":"/src/material/expansion_tile.dart","parents":["StatefulWidget","Widget"],"desc":" A single-line [ListTile] with an expansion arrow icon that expands or collapses the tile to reveal or hide the [children].","fields":[{"name":"leading","type":"Widget?","desc":"A widget to display before the title."},{"name":"title","type":"Widget","required":true,"desc":"The primary content of the list item."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"onExpansionChanged","type":"ValueChanged?","desc":"Called when the tile expands or collapses."},{"name":"children","type":"List","required":true,"desc":"The widgets that are displayed when the tile expands."},{"name":"backgroundColor","type":"Color?","desc":"The color to display behind the sublist when expanded."},{"name":"collapsedBackgroundColor","type":"Color?","desc":"When not null, defines the background color of tile when the sublist is collapsed."},{"name":"trailing","type":"Widget?","desc":"A widget to display after the title."},{"name":"showTrailingIcon","type":"bool","required":true,"desc":"Specifies if the [ExpansionTile] should build a default trailing icon if [trailing] is null."},{"name":"initiallyExpanded","type":"bool","required":true,"desc":"Specifies if the list tile is initially expanded (true) or collapsed (false)."},{"name":"maintainState","type":"bool","required":true,"desc":"Specifies whether the state of the children is maintained when the tile expands and collapses."},{"name":"tilePadding","type":"EdgeInsetsGeometry?","desc":"Specifies padding for the [ListTile]."},{"name":"expandedAlignment","type":"Alignment?","desc":"Specifies the alignment of [children], which are arranged in a column when the tile is expanded."},{"name":"expandedCrossAxisAlignment","type":"CrossAxisAlignment?","desc":"Specifies the alignment of each child within [children] when the tile is expanded."},{"name":"childrenPadding","type":"EdgeInsetsGeometry?","desc":"Specifies padding for [children]."},{"name":"iconColor","type":"Color?","desc":"The icon color of tile's expansion arrow icon when the sublist is expanded."},{"name":"collapsedIconColor","type":"Color?","desc":"The icon color of tile's expansion arrow icon when the sublist is collapsed."},{"name":"textColor","type":"Color?","desc":"The color of the tile's titles when the sublist is expanded."},{"name":"collapsedTextColor","type":"Color?","desc":"The color of the tile's titles when the sublist is collapsed."},{"name":"shape","type":"ShapeBorder?","desc":"The tile's border shape when the sublist is expanded."},{"name":"collapsedShape","type":"ShapeBorder?","desc":"The tile's border shape when the sublist is collapsed."},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"Typically used to force the expansion arrow icon to the tile's leading or trailing edge."},{"name":"controller","type":"ExpansionTileController?","desc":"If provided, the controller can be used to expand and collapse tiles."},{"name":"dense","type":"bool?","desc":"{@macro flutter.material.ListTile.dense}"},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the expansion tile's layout will be."},{"name":"minTileHeight","type":"double?","desc":"{@macro flutter.material.ListTile.minTileHeight}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"enabled","type":"bool","required":true,"desc":"Whether this expansion tile is interactive."},{"name":"expansionAnimationStyle","type":"AnimationStyle?","desc":"Used to override the expansion animation curve and duration."},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"Whether to add button:true to the semantics if onTap is provided. This is a temporary flag to help changing the behavior of ListTile onTap semantics."}],"id":52,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ExpansionTile","desc":["【children】: Expanded content 【List】","【leading】: Leading component 【Widget】","【title】: Title component 【Widget】","【trailing】: Trailing component 【Widget】","【backgroundColor】: Background color 【Color】","【onExpansionChanged】: Collapse event 【Function(bool)】","【initiallyExpanded】: Whether initially expanded 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_zh-CN.json deleted file mode 100644 index 08cdca65f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExpansionTile/ExpansionTile_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExpansionTile","path":"/src/material/expansion_tile.dart","parents":["StatefulWidget","Widget"],"desc":"带有展开箭头图标的单行 [ListTile],展开或折叠磁贴以显示或隐藏 [children]。","fields":[{"name":"leading","type":"Widget?","desc":"在标题前显示的小部件。"},{"name":"title","type":"Widget","required":true,"desc":"列表项的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"onExpansionChanged","type":"ValueChanged?","desc":"磁贴展开或折叠时调用。"},{"name":"children","type":"List","required":true,"desc":"磁贴展开时显示的小部件。"},{"name":"backgroundColor","type":"Color?","desc":"展开时子列表后面显示的颜色。"},{"name":"collapsedBackgroundColor","type":"Color?","desc":"当不为 null 时,定义子列表折叠时磁贴的背景颜色。"},{"name":"trailing","type":"Widget?","desc":"在标题后显示的小部件。"},{"name":"showTrailingIcon","type":"bool","required":true,"desc":"指定如果 [trailing] 为 null,[ExpansionTile] 是否应构建默认尾随图标。"},{"name":"initiallyExpanded","type":"bool","required":true,"desc":"指定列表磁贴最初是展开(true)还是折叠(false)。"},{"name":"maintainState","type":"bool","required":true,"desc":"指定磁贴展开和折叠时是否保持子项的状态。"},{"name":"tilePadding","type":"EdgeInsetsGeometry?","desc":"指定 [ListTile] 的内边距。"},{"name":"expandedAlignment","type":"Alignment?","desc":"指定磁贴展开时排列在列中的 [children] 的对齐方式。"},{"name":"expandedCrossAxisAlignment","type":"CrossAxisAlignment?","desc":"指定磁贴展开时 [children] 内每个子项的对齐方式。"},{"name":"childrenPadding","type":"EdgeInsetsGeometry?","desc":"指定 [children] 的内边距。"},{"name":"iconColor","type":"Color?","desc":"子列表展开时磁贴展开箭头图标的图标颜色。"},{"name":"collapsedIconColor","type":"Color?","desc":"子列表折叠时磁贴展开箭头图标的图标颜色。"},{"name":"textColor","type":"Color?","desc":"子列表展开时磁贴标题的颜色。"},{"name":"collapsedTextColor","type":"Color?","desc":"子列表折叠时磁贴标题的颜色。"},{"name":"shape","type":"ShapeBorder?","desc":"子列表展开时磁贴的边框形状。"},{"name":"collapsedShape","type":"ShapeBorder?","desc":"子列表折叠时磁贴的边框形状。"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"通常用于强制展开箭头图标到磁贴的前缘或后缘。"},{"name":"controller","type":"ExpansionTileController?","desc":"如果提供,控制器可用于展开和折叠磁贴。"},{"name":"dense","type":"bool?","desc":"{@macro flutter.material.ListTile.dense}"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义展开磁贴布局的紧凑程度。"},{"name":"minTileHeight","type":"double?","desc":"{@macro flutter.material.ListTile.minTileHeight}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"enabled","type":"bool","required":true,"desc":"此展开磁贴是否可交互。"},{"name":"expansionAnimationStyle","type":"AnimationStyle?","desc":"用于覆盖展开动画曲线和持续时间。"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"如果提供了 onTap,是否向语义添加 button:true。这是一个临时标志,用于帮助更改 ListTile onTap 语义的行为。"}],"id":52,"localName":"展开瓦片","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ExpansionTile基本使用","desc":["【children】 : 展开内容 【List】","【leading】 : 头左组件 【Widget】","【title】 : 头中组件 【Widget】","【trailing】 : 头尾组件 【Widget】","【backgroundColor】 : 背景色 【Color】","【onExpansionChanged】 : 折叠事件 【Function(bool)】","【initiallyExpanded】 : 是否初始时展开 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_en-US.json deleted file mode 100644 index 06b75b646..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExpansionTileTheme","path":"/src/material/expansion_tile_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ExpansionTileTheme] of its [ExpansionTile] descendants.","fields":[{"name":"data","type":"ExpansionTileThemeData","required":true,"desc":"Specifies color, alignment, and text style values for descendant [ExpansionTile] widgets."}],"id":418,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_zh-CN.json deleted file mode 100644 index d88de856c..000000000 --- a/modules/widget_system/widgets/doc/widgets/ExpansionTileTheme/ExpansionTileTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ExpansionTileTheme","path":"/src/material/expansion_tile_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [ExpansionTile] 后代的默认 [ExpansionTileTheme]。","fields":[{"name":"data","type":"ExpansionTileThemeData","required":true,"desc":"指定后代 [ExpansionTile] 小部件的颜色、对齐和文本样式值。"}],"id":418,"localName":"ExpansionTileTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_en-US.json b/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_en-US.json deleted file mode 100644 index 07c8d6b1d..000000000 --- a/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FadeInImage","path":"/src/widgets/fade_in_image.dart","parents":["StatefulWidget","Widget"],"desc":" An image that shows a [placeholder] image while the target [image] is loading, then fades in the new image when it loads.","fields":[{"name":"placeholder","type":"ImageProvider","required":true,"desc":"Image displayed while the target [image] is loading."},{"name":"placeholderErrorBuilder","type":"ImageErrorWidgetBuilder?","desc":"A builder function that is called if an error occurs during placeholder image loading."},{"name":"image","type":"ImageProvider","required":true,"desc":"The target image that is displayed once it has loaded."},{"name":"imageErrorBuilder","type":"ImageErrorWidgetBuilder?","desc":"A builder function that is called if an error occurs during image loading."},{"name":"fadeOutDuration","type":"Duration","required":true,"desc":"The duration of the fade-out animation for the [placeholder]."},{"name":"fadeOutCurve","type":"Curve","required":true,"desc":"The curve of the fade-out animation for the [placeholder]."},{"name":"fadeInDuration","type":"Duration","required":true,"desc":"The duration of the fade-in animation for the [image]."},{"name":"fadeInCurve","type":"Curve","required":true,"desc":"The curve of the fade-in animation for the [image]."},{"name":"width","type":"double?","desc":"If non-null, require the image to have this width."},{"name":"color","type":"Color?","desc":"If non-null, this color is blended with each image pixel using [colorBlendMode]."},{"name":"colorBlendMode","type":"BlendMode?","desc":"Used to combine [color] with this [image]."},{"name":"placeholderColor","type":"Color?","desc":"If non-null, this color is blended with each placeholder image pixel using [placeholderColorBlendMode]."},{"name":"placeholderColorBlendMode","type":"BlendMode?","desc":"Used to combine [placeholderColor] with the [placeholder] image."},{"name":"height","type":"double?","desc":"If non-null, require the image to have this height."},{"name":"fit","type":"BoxFit?","desc":"How to inscribe the image into the space allocated during layout."},{"name":"placeholderFit","type":"BoxFit?","desc":"How to inscribe the placeholder image into the space allocated during layout."},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"The rendering quality of the image."},{"name":"placeholderFilterQuality","type":"FilterQuality?","desc":"The rendering quality of the placeholder image."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the image within its bounds."},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"How to paint any portions of the layout bounds not covered by the image."},{"name":"matchTextDirection","type":"bool","required":true,"desc":"Whether to paint the image in the direction of the [TextDirection]."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"Whether to exclude this image from semantics."},{"name":"imageSemanticLabel","type":"String?","desc":"A semantic description of the [image]."}],"id":8,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FadeInImage.assetNetwork Load Network Image","desc":["【placeholder】 : Placeholder image address 【String】","【image】 : Display image address 【String】","【width】: Width 【double】","【height】: Height 【double】","【fadeInDuration】: Fade-in duration 【Duration】","【fadeOutDuration】: Fade-out duration 【Duration】","【fadeInCurve】: Fade-in curve 【Cubic】","【fadeOutCurve】: Fade-out curve 【Cubic】","【fit】: Fit mode 【BoxFit】","【alignment】: Alignment mode 【Alignment】","【repeat】: Repeat mode 【ImageRepeat】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_zh-CN.json deleted file mode 100644 index d000632e5..000000000 --- a/modules/widget_system/widgets/doc/widgets/FadeInImage/FadeInImage_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FadeInImage","path":"/src/widgets/fade_in_image.dart","parents":["StatefulWidget","Widget"],"desc":"在目标 [image] 加载时显示 [placeholder] 图像,然后在加载时淡入新图像的图像。","fields":[{"name":"placeholder","type":"ImageProvider","required":true,"desc":"目标 [image] 加载时显示的图像。"},{"name":"placeholderErrorBuilder","type":"ImageErrorWidgetBuilder?","desc":"如果在占位符图像加载期间发生错误,则调用的构建器函数。"},{"name":"image","type":"ImageProvider","required":true,"desc":"加载后显示的目标图像。"},{"name":"imageErrorBuilder","type":"ImageErrorWidgetBuilder?","desc":"如果在图像加载期间发生错误,则调用的构建器函数。"},{"name":"fadeOutDuration","type":"Duration","required":true,"desc":"[placeholder] 的淡出动画持续时间。"},{"name":"fadeOutCurve","type":"Curve","required":true,"desc":"[placeholder] 的淡出动画曲线。"},{"name":"fadeInDuration","type":"Duration","required":true,"desc":"[image] 的淡入动画持续时间。"},{"name":"fadeInCurve","type":"Curve","required":true,"desc":"[image] 的淡入动画曲线。"},{"name":"width","type":"double?","desc":"如果非空,要求图像具有此宽度。"},{"name":"color","type":"Color?","desc":"如果非空,此颜色使用 [colorBlendMode] 与每个图像像素混合。"},{"name":"colorBlendMode","type":"BlendMode?","desc":"用于将 [color] 与此 [image] 组合。"},{"name":"placeholderColor","type":"Color?","desc":"如果非空,此颜色使用 [placeholderColorBlendMode] 与每个占位符图像像素混合。"},{"name":"placeholderColorBlendMode","type":"BlendMode?","desc":"用于将 [placeholderColor] 与 [placeholder] 图像组合。"},{"name":"height","type":"double?","desc":"如果非空,要求图像具有此高度。"},{"name":"fit","type":"BoxFit?","desc":"如何在布局期间分配的空间中刻画图像。"},{"name":"placeholderFit","type":"BoxFit?","desc":"如何在布局期间分配的空间中刻画占位符图像。"},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"图像的渲染质量。"},{"name":"placeholderFilterQuality","type":"FilterQuality?","desc":"占位符图像的渲染质量。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在其边界内对齐图像。"},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"如何绘制图像未覆盖的布局边界的任何部分。"},{"name":"matchTextDirection","type":"bool","required":true,"desc":"是否在 [TextDirection] 的方向上绘制图像。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"是否从语义中排除此图像。"},{"name":"imageSemanticLabel","type":"String?","desc":"[image] 的语义描述。"}],"id":8,"localName":"淡入图片","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FadeInImage.assetNetwork加载网络图片","desc":["【placeholder】 : 展位图地址 【String】","【image】 : 显示图地址 【String】","【width】: 宽 【double】","【height】: 高 【double】","【fadeInDuration】: 淡入时长 【Duration】","【fadeOutDuration】: 淡出时长 【Duration】","【fadeInCurve】: 淡入曲线 【Cubic】","【fadeOutCurve】: 淡出曲线 【Cubic】","【fit】: 适应模式 【BoxFit】","【alignment】: 对齐模式 【Alignment】","【repeat】: 重复模式 【ImageRepeat】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_en-US.json deleted file mode 100644 index cb13f8cb6..000000000 --- a/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FadeTransition","path":"/src/widgets/transitions.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Animates the opacity of a widget.","fields":[{"name":"opacity","type":"Animation","required":true,"desc":"The animation that controls the opacity of the child."},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"Whether the semantic information of the children is always included."}],"id":89,"lever":3,"family":2,"linkIds":[73,118],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FadeTransition","desc":["【child】 : Child Component 【Widget】","【opacity】 : Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_zh-CN.json deleted file mode 100644 index f11a92370..000000000 --- a/modules/widget_system/widgets/doc/widgets/FadeTransition/FadeTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FadeTransition","path":"/src/widgets/transitions.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对小部件的不透明度进行动画处理。","fields":[{"name":"opacity","type":"Animation","required":true,"desc":"控制子项不透明度的动画。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含子项的语义信息。"}],"id":89,"localName":"透明变换","lever":3,"family":2,"linkIds":[73,118],"nodes":[{"file":"node1_base.dart","name":"FadeTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【opacity】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_en-US.json b/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_en-US.json deleted file mode 100644 index c2a7ab200..000000000 --- a/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FilledButton","path":"/src/material/filled_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":" A Material Design filled button.","fields":[],"id":359,"lever":4,"family":1,"linkIds":[354,355,353],"nodes":[{"file":"node1.dart","name":"Basic Usage","desc":["【child】: Button content 【Widget】","【onPressed】: Click event 【VoidCallback】","【onHover】: Long press event 【ValueChanged? 】","【onLongPress】: Long press event 【VoidCallback?】","The filled button is visually second only to [FloatingActionButton] and is used for important, finalizing actions such as save, join now, or confirm."]},{"file":"node2.dart","name":"Tonal Variant","desc":["FilledButton.tonal is a tonal filled button, visually between [FilledButton] and [OutlinedButton], suitable for scenarios requiring slightly stronger emphasis than an outlined button but with lower priority. For example, a [Next] button."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_zh-CN.json deleted file mode 100644 index 76654b760..000000000 --- a/modules/widget_system/widgets/doc/widgets/FilledButton/FilledButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FilledButton","path":"/src/material/filled_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":"Material Design 填充按钮。","fields":[],"id":359,"localName":"填充按钮","lever":4,"family":1,"linkIds":[354,355,353],"nodes":[{"file":"node1.dart","name":"基本使用","desc":["【child】 : 按钮内容 【Widget】","【onPressed】 : 点击事件 【VoidCallback】","【onHover】 : 长按事件 【ValueChanged? 】","【onLongPress】 : 长按事件 【VoidCallback?】","填充按钮在视觉上仅次于 [FloatingActionButton],应用于重要的、最终完成流程的操作,例如: 保存、立即加入 或 确认。"]},{"file":"node2.dart","name":"色调变体","desc":["FilledButton.tonal 是色调填充按钮,视觉上介于 [FilledButton] 和 [OutlinedButton] 之间,适用于需要比轮廓按钮稍强一些的强调但优先级较低的场景。例如 [下一步] 按钮 "]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_en-US.json deleted file mode 100644 index 4ea4fc714..000000000 --- a/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FilledButtonTheme","path":"/src/material/filled_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [FilledButton] descendants.","fields":[{"name":"data","type":"FilledButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":419,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_zh-CN.json deleted file mode 100644 index d28ecd30c..000000000 --- a/modules/widget_system/widgets/doc/widgets/FilledButtonTheme/FilledButtonTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FilledButtonTheme","path":"/src/material/filled_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [FilledButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"FilledButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":419,"localName":"FilledButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_en-US.json b/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_en-US.json deleted file mode 100644 index 36425a3d4..000000000 --- a/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FilterChip","path":"/src/material/filter_chip.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design filter chip.","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"selected","type":"bool","required":true},{"name":"onSelected","type":"ValueChanged?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"pressElevation","type":"double?"},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":15,"lever":4,"family":0,"linkIds":[11,12,13,14,153],"nodes":[{"file":"node1_base.dart","name":"FilterChip can accept selection events","desc":["【selected】: Whether selected 【bool】","【onSelected】: Selection event 【Function(bool)】","【selectedColor】: Color after selection 【Color】","【selectedShadowColor】: Shadow color after selection 【Color】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_zh-CN.json deleted file mode 100644 index 03f9843e8..000000000 --- a/modules/widget_system/widgets/doc/widgets/FilterChip/FilterChip_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FilterChip","path":"/src/material/filter_chip.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 过滤芯片。","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"selected","type":"bool","required":true},{"name":"onSelected","type":"ValueChanged?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"pressElevation","type":"double?"},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":15,"localName":"过滤小条","lever":4,"family":0,"linkIds":[11,12,13,14,153],"nodes":[{"file":"node1_base.dart","name":"FilterChip可接受选择事件","desc":["【selected】: 是否选择 【bool】","【onSelected】: 选择事件 【Function(bool)】","【selectedColor】: 选择后的颜色 【Color】","【selectedShadowColor】: 选择后的阴影颜色 【Color】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_en-US.json deleted file mode 100644 index 747d85f9e..000000000 --- a/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FittedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Scales and positions its child within itself according to [fit].","fields":[{"name":"fit","type":"BoxFit","required":true,"desc":"How to inscribe the child into the space allocated during layout."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the child within its parent's bounds."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":87,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FittedBox","desc":["【child】: Child component 【Widget】","【fit】: Adaptation mode 【BoxFit】","【alignment】: Alignment method 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_zh-CN.json deleted file mode 100644 index 800238914..000000000 --- a/modules/widget_system/widgets/doc/widgets/FittedBox/FittedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FittedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"根据 [fit] 在自身内缩放和定位其子项。","fields":[{"name":"fit","type":"BoxFit","required":true,"desc":"如何在布局期间分配的空间中刻画子项。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在其父级边界内对齐子项。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":87,"localName":"适应盒","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FittedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【fit】 : 适应模式 【BoxFit】","【alignment】 : 对齐方式 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flex/Flex_en-US.json b/modules/widget_system/widgets/doc/widgets/Flex/Flex_en-US.json deleted file mode 100644 index 360fa4244..000000000 --- a/modules/widget_system/widgets/doc/widgets/Flex/Flex_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Flex","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that displays its children in a one-dimensional array.","fields":[{"name":"direction","type":"Axis","required":true,"desc":"The direction to use as the main axis."},{"name":"mainAxisAlignment","type":"MainAxisAlignment","required":true,"desc":"How the children should be placed along the main axis."},{"name":"mainAxisSize","type":"MainAxisSize","required":true,"desc":"How much space should be occupied in the main axis."},{"name":"crossAxisAlignment","type":"CrossAxisAlignment","required":true,"desc":"How the children should be placed along the cross axis."},{"name":"textDirection","type":"TextDirection?","desc":"Determines the order to lay children out horizontally and how to interpret `start` and `end` in the horizontal direction."},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"Determines the order to lay children out vertically and how to interpret `start` and `end` in the vertical direction."},{"name":"textBaseline","type":"TextBaseline?","desc":"If aligning items according to their baseline, which baseline to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"spacing","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderFlex.spacing}"}],"id":94,"lever":5,"family":3,"linkIds":[95,96,106,107,109],"nodes":[{"file":"node_01.dart","name":"Flex Direction","desc":["【children】: Component list 【List】","【direction】: Direction 【Axis】"]},{"file":"node_02.dart","name":"Flex Main Axis Alignment","desc":["【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】"]},{"file":"node_03.dart","name":"Flex Cross Axis Alignment","desc":["【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】"]},{"file":"node_04.dart","name":"Flex Vertical Direction","desc":["【verticalDirection】: Vertical direction 【VerticalDirection】"]},{"file":"node_05.dart","name":"Flex Horizontal Direction","desc":["【textDirection】: Horizontal direction 【TextDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flex/Flex_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Flex/Flex_zh-CN.json deleted file mode 100644 index d1305f97d..000000000 --- a/modules/widget_system/widgets/doc/widgets/Flex/Flex_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Flex","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在一维数组中显示其子项的小部件。","fields":[{"name":"direction","type":"Axis","required":true,"desc":"用作主轴的方向。"},{"name":"mainAxisAlignment","type":"MainAxisAlignment","required":true,"desc":"子项应如何沿主轴放置。"},{"name":"mainAxisSize","type":"MainAxisSize","required":true,"desc":"主轴应占用多少空间。"},{"name":"crossAxisAlignment","type":"CrossAxisAlignment","required":true,"desc":"子项应如何沿交叉轴放置。"},{"name":"textDirection","type":"TextDirection?","desc":"确定水平布局子项的顺序以及如何解释水平方向上的 `start` 和 `end`。"},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"确定垂直布局子项的顺序以及如何解释垂直方向上的 `start` 和 `end`。"},{"name":"textBaseline","type":"TextBaseline?","desc":"如果根据基线对齐项目,使用哪个基线。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"spacing","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderFlex.spacing}"}],"id":94,"localName":"弹性布局","lever":5,"family":3,"linkIds":[95,96,106,107,109],"nodes":[{"file":"node_01.dart","name":"Flex的排布方向","desc":["【children】 : 组件列表 【List】","【direction】 : 方向 【Axis】"]},{"file":"node_02.dart","name":"Flex主轴对齐方式","desc":["【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】"]},{"file":"node_03.dart","name":"Flex交叉轴对齐方式","desc":["【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】"]},{"file":"node_04.dart","name":"Flex垂直方向顺序","desc":["【verticalDirection】 : 垂直方向顺序 【VerticalDirection】"]},{"file":"node_05.dart","name":"Flex水平方向顺序","desc":["【textDirection】 : 水平方向顺序 【TextDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_en-US.json b/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_en-US.json deleted file mode 100644 index dbdf3a95a..000000000 --- a/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Flexible","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":" A widget that controls how a child of a [Row], [Column], or [Flex] flexes.","fields":[{"name":"flex","type":"int","required":true,"desc":"The flex factor to use for this child."},{"name":"fit","type":"FlexFit","required":true,"desc":"How a flexible child is inscribed into the available space."}],"id":109,"lever":3,"family":5,"linkIds":[94,106],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Flexible","desc":["【child】: child 【Widget】","【fit】: adaptation mode*2 【FlexFit】","【flex】: remaining space allocation ratio 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_zh-CN.json deleted file mode 100644 index 1e73702f1..000000000 --- a/modules/widget_system/widgets/doc/widgets/Flexible/Flexible_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Flexible","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":"控制 [Row]、[Column] 或 [Flex] 的子项如何弯曲的小部件。","fields":[{"name":"flex","type":"int","required":true,"desc":"用于此子项的弹性因子。"},{"name":"fit","type":"FlexFit","required":true,"desc":"弹性子项如何刻画到可用空间中。"}],"id":109,"localName":"灵活组件","lever":3,"family":5,"linkIds":[94,106],"nodes":[{"file":"node1_base.dart","name":"Flexible基本使用","desc":["【child】 : 孩子 【Widget】","【fit】 : 适应模式*2 【FlexFit】","【flex】 : 剩余空间分配占比 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_en-US.json b/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_en-US.json deleted file mode 100644 index 3201deb21..000000000 --- a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FlexibleSpaceBar","path":"/src/material/flexible_space_bar.dart","parents":["StatefulWidget","Widget"],"desc":" The part of a Material Design [AppBar] that expands, collapses, and stretches.","fields":[{"name":"title","type":"Widget?","desc":"The primary contents of the flexible space bar when expanded."},{"name":"background","type":"Widget?","desc":"Shown behind the [title] when expanded."},{"name":"centerTitle","type":"bool?","desc":"Whether the title should be centered."},{"name":"collapseMode","type":"CollapseMode","required":true,"desc":"Collapse effect while scrolling."},{"name":"stretchModes","type":"List","required":true,"desc":"Stretch effect while over-scrolling."},{"name":"titlePadding","type":"EdgeInsetsGeometry?","desc":"Defines how far the [title] is inset from either the widget's bottom-left or its center."},{"name":"expandedTitleScale","type":"double","required":true,"desc":"Defines how much the title is scaled when the FlexibleSpaceBar is expanded due to the user scrolling downwards. The title is scaled uniformly on the x and y axes while maintaining its bottom-left position (bottom-center if [centerTitle] is true)."}],"id":196,"lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FlexibleSpaceBar","desc":["【title】 : Title component 【Widget】","【titlePadding】 : Title spacing 【EdgeInsetsGeometry】","【collapseMode】 : Collapse mode 【CollapseMode】","【stretchModes】 : Stretch modes 【List】","【background】 : Background component 【Widget】","【centerTitle】 : Whether to center 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_zh-CN.json deleted file mode 100644 index 9fdba93cf..000000000 --- a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBar/FlexibleSpaceBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FlexibleSpaceBar","path":"/src/material/flexible_space_bar.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design [AppBar] 中展开、折叠和拉伸的部分。","fields":[{"name":"title","type":"Widget?","desc":"展开时弹性空间栏的主要内容。"},{"name":"background","type":"Widget?","desc":"展开时显示在 [title] 后面。"},{"name":"centerTitle","type":"bool?","desc":"标题是否应居中。"},{"name":"collapseMode","type":"CollapseMode","required":true,"desc":"滚动时的折叠效果。"},{"name":"stretchModes","type":"List","required":true,"desc":"过度滚动时的拉伸效果。"},{"name":"titlePadding","type":"EdgeInsetsGeometry?","desc":"定义 [title] 从小部件左下角或中心插入多远。"},{"name":"expandedTitleScale","type":"double","required":true,"desc":"定义当用户向下滚动导致 FlexibleSpaceBar 展开时标题缩放多少。标题在 x 和 y 轴上均匀缩放,同时保持其左下位置(如果 [centerTitle] 为 true,则为底部中心)。"}],"id":196,"localName":"伸展空间栏","lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FlexibleSpaceBar基本使用","desc":["【title】 : 标题组件 【Widget】","【titlePadding】 : 标题间距 【EdgeInsetsGeometry】","【collapseMode】 : 折叠模式 【CollapseMode】","【stretchModes】 : 延伸模式 【List】","【background】 : 背景组件 【Widget】","【centerTitle】 : 是否居中 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_en-US.json b/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_en-US.json deleted file mode 100644 index 6cdb69aa4..000000000 --- a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FlexibleSpaceBarSettings","path":"/src/material/flexible_space_bar.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Provides sizing and opacity information to a [FlexibleSpaceBar].","fields":[{"name":"toolbarOpacity","type":"double","required":true,"desc":"Affects how transparent the text within the toolbar appears."},{"name":"minExtent","type":"double","required":true,"desc":"Minimum height of the resulting [FlexibleSpaceBar] when fully collapsed."},{"name":"maxExtent","type":"double","required":true,"desc":"Maximum height of the resulting [FlexibleSpaceBar] when fully expanded."},{"name":"currentExtent","type":"double","required":true,"desc":"If the [FlexibleSpaceBar.title] or the [FlexibleSpaceBar.background] is not null, then this value is used to calculate the relative scale of these elements upon initialization."},{"name":"isScrolledUnder","type":"bool?","desc":"True if the FlexibleSpaceBar overlaps the primary scrollable's contents."},{"name":"hasLeading","type":"bool?","desc":"True if the FlexibleSpaceBar has a leading widget."}],"id":420,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_zh-CN.json deleted file mode 100644 index 269cef06a..000000000 --- a/modules/widget_system/widgets/doc/widgets/FlexibleSpaceBarSettings/FlexibleSpaceBarSettings_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FlexibleSpaceBarSettings","path":"/src/material/flexible_space_bar.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为 [FlexibleSpaceBar] 提供大小和不透明度信息。","fields":[{"name":"toolbarOpacity","type":"double","required":true,"desc":"影响工具栏内文本的透明度。"},{"name":"minExtent","type":"double","required":true,"desc":"完全折叠时生成的 [FlexibleSpaceBar] 的最小高度。"},{"name":"maxExtent","type":"double","required":true,"desc":"完全展开时生成的 [FlexibleSpaceBar] 的最大高度。"},{"name":"currentExtent","type":"double","required":true,"desc":"如果 [FlexibleSpaceBar.title] 或 [FlexibleSpaceBar.background] 不为 null,则此值用于在初始化时计算这些元素的相对比例。"},{"name":"isScrolledUnder","type":"bool?","desc":"如果 FlexibleSpaceBar 与主要可滚动内容重叠,则为 true。"},{"name":"hasLeading","type":"bool?","desc":"如果 FlexibleSpaceBar 有前导小部件,则为 true。"}],"id":420,"localName":"FlexibleSpaceBarSettings","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_en-US.json b/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_en-US.json deleted file mode 100644 index 946a8458a..000000000 --- a/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FloatingActionButton","path":"/src/material/floating_action_button.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design floating action button.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"tooltip","type":"String?","desc":"Text that describes the action that will occur when the button is pressed."},{"name":"foregroundColor","type":"Color?","desc":"The default foreground color for icons and text within the button."},{"name":"backgroundColor","type":"Color?","desc":"The button's background color."},{"name":"focusColor","type":"Color?","desc":"The color to use for filling the button when the button has input focus."},{"name":"hoverColor","type":"Color?","desc":"The color to use for filling the button when the button has a pointer hovering over it."},{"name":"splashColor","type":"Color?","desc":"The splash color for this [FloatingActionButton]'s [InkWell]."},{"name":"heroTag","type":"Object?","desc":"The tag to apply to the button's [Hero] widget."},{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when the button is tapped or otherwise activated."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this button relative to its parent."},{"name":"focusElevation","type":"double?","desc":"The z-coordinate at which to place this button relative to its parent when the button has the input focus."},{"name":"hoverElevation","type":"double?","desc":"The z-coordinate at which to place this button relative to its parent when the button is enabled and has a pointer hovering over it."},{"name":"highlightElevation","type":"double?","desc":"The z-coordinate at which to place this button relative to its parent when the user is touching the button."},{"name":"disabledElevation","type":"double?","desc":"The z-coordinate at which to place this button when the button is disabled ([onPressed] is null)."},{"name":"mini","type":"bool","required":true,"desc":"Controls the size of this button."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the button's [Material]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"isExtended","type":"bool","required":true,"desc":"True if this is an \"extended\" floating action button."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"Configures the minimum size of the tap target."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"extendedIconLabelSpacing","type":"double?","desc":"The spacing between the icon and the label for an extended [FloatingActionButton]."},{"name":"extendedPadding","type":"EdgeInsetsGeometry?","desc":"The padding for an extended [FloatingActionButton]'s content."},{"name":"extendedTextStyle","type":"TextStyle?","desc":"The text style for an extended [FloatingActionButton]'s label."}],"id":28,"lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FloatingActionButton Click Event","desc":["【child】: Child widget 【Widget】","【tooltip】: Tooltip text when long pressed 【String】","【backgroundColor】: Background color 【Color】","【foregroundColor】: Foreground color 【Color】","【elevation】: Elevation 【double】","【onPressed】: Click event 【Function】"]},{"file":"node2_mini.dart","name":"mini Property","desc":["【mini】: Whether it is mini 【bool】"]},{"file":"node3_shape.dart","name":"shape Property","desc":["【shape】: Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_zh-CN.json deleted file mode 100644 index 9b9a5e6f6..000000000 --- a/modules/widget_system/widgets/doc/widgets/FloatingActionButton/FloatingActionButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FloatingActionButton","path":"/src/material/floating_action_button.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 浮动操作按钮。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"tooltip","type":"String?","desc":"描述按下按钮时将发生的操作的文本。"},{"name":"foregroundColor","type":"Color?","desc":"按钮内图标和文本的默认前景色。"},{"name":"backgroundColor","type":"Color?","desc":"按钮的背景颜色。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时用于填充按钮的颜色。"},{"name":"hoverColor","type":"Color?","desc":"按钮有指针悬停在其上时用于填充按钮的颜色。"},{"name":"splashColor","type":"Color?","desc":"此 [FloatingActionButton] 的 [InkWell] 的飞溅颜色。"},{"name":"heroTag","type":"Object?","desc":"应用于按钮的 [Hero] 小部件的标签。"},{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用的回调。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"elevation","type":"double?","desc":"相对于其父级放置此按钮的 z 坐标。"},{"name":"focusElevation","type":"double?","desc":"按钮具有输入焦点时相对于其父级放置此按钮的 z 坐标。"},{"name":"hoverElevation","type":"double?","desc":"按钮启用且有指针悬停在其上时相对于其父级放置此按钮的 z 坐标。"},{"name":"highlightElevation","type":"double?","desc":"用户触摸按钮时相对于其父级放置此按钮的 z 坐标。"},{"name":"disabledElevation","type":"double?","desc":"按钮禁用时([onPressed] 为 null)放置此按钮的 z 坐标。"},{"name":"mini","type":"bool","required":true,"desc":"控制此按钮的大小。"},{"name":"shape","type":"ShapeBorder?","desc":"按钮的 [Material] 的形状。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"isExtended","type":"bool","required":true,"desc":"如果这是"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"配置点击目标的最小大小。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"extendedIconLabelSpacing","type":"double?","desc":"扩展 [FloatingActionButton] 的图标和标签之间的间距。"},{"name":"extendedPadding","type":"EdgeInsetsGeometry?","desc":"扩展 [FloatingActionButton] 内容的内边距。"},{"name":"extendedTextStyle","type":"TextStyle?","desc":"扩展 [FloatingActionButton] 标签的文本样式。"}],"id":28,"localName":"浮动按钮","lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FloatingActionButton点击事件","desc":["【child】: 子组件 【Widget】","【tooltip】: 长按时提示文字 【String】","【backgroundColor】: 背景色 【Color】","【foregroundColor】: 前景色 【Color】","【elevation】: 影深 【double】","【onPressed】: 点击事件 【Function】"]},{"file":"node2_mini.dart","name":"mini属性","desc":["【mini】: 是否是迷你 【bool】"]},{"file":"node3_shape.dart","name":"shape属性","desc":["【shape】: 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flow/Flow_en-US.json b/modules/widget_system/widgets/doc/widgets/Flow/Flow_en-US.json deleted file mode 100644 index ba199c7a1..000000000 --- a/modules/widget_system/widgets/doc/widgets/Flow/Flow_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Flow","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that sizes and positions children efficiently, according to the logic in a [FlowDelegate].","fields":[{"name":"delegate","type":"FlowDelegate","required":true,"desc":"The delegate that controls the transformation matrices of the children."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":99,"lever":5,"family":3,"linkIds":[98,94],"nodes":[{"file":"node_01.dart","name":"Flow Circular Arrangement","desc":["【children】: Component list 【List】","【delegate】: Agent 【FlowDelegate】"]},{"file":"node_02.dart","name":"Flow Circular with Animation","desc":["Achieve effects by changing the position of surrounding components through animation"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Flow/Flow_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Flow/Flow_zh-CN.json deleted file mode 100644 index fa6bc2c94..000000000 --- a/modules/widget_system/widgets/doc/widgets/Flow/Flow_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Flow","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"根据 [FlowDelegate] 中的逻辑高效调整大小和定位子项的小部件。","fields":[{"name":"delegate","type":"FlowDelegate","required":true,"desc":"控制子项变换矩阵的委托。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":99,"localName":"流动布局","lever":5,"family":3,"linkIds":[98,94],"nodes":[{"file":"node_01.dart","name":"Flow圆形排布","desc":["【children】 : 组件列表 【List】","【delegate】 : 代理 【FlowDelegate】"]},{"file":"node_02.dart","name":"Flow圆形与动画结合","desc":["通过动画来更改周围组件的位置实现效果"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_en-US.json b/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_en-US.json deleted file mode 100644 index e3749e5b0..000000000 --- a/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FlutterLogo","path":"/src/widgets/flutter_logo.dart","parents":["StatelessWidget","Widget"],"desc":" The Flutter logo, in widget form. This widget respects the [IconTheme]. For guidelines on using the Flutter logo, visit https://flutter.dev/brand.","fields":[{"name":"size","type":"double?","desc":"The size of the logo in logical pixels."},{"name":"textColor","type":"Color","required":true,"desc":"The color used to paint the \"Flutter\" text on the logo, if [style] is [FlutterLogoStyle.horizontal] or [FlutterLogoStyle.stacked]."},{"name":"style","type":"FlutterLogoStyle","required":true,"desc":"Whether and where to draw the \"Flutter\" text. By default, only the logo itself is drawn."},{"name":"duration","type":"Duration","required":true,"desc":"The length of time for the animation if the [style] or [textColor] properties are changed."},{"name":"curve","type":"Curve","required":true,"desc":"The curve for the logo animation if the [style] or [textColor] change."}],"id":4,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Used to display a FlutterLogo","desc":["【size】 : Size 【double】","【colors】: Color 【MaterialColor】"]},{"file":"node2_style.dart","name":"Style used to display text","desc":["【style】 : Style - 3 types of enumeration 【FlutterLogoStyle】","【textColor】: Text color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_zh-CN.json deleted file mode 100644 index b5c0bf702..000000000 --- a/modules/widget_system/widgets/doc/widgets/FlutterLogo/FlutterLogo_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FlutterLogo","path":"/src/widgets/flutter_logo.dart","parents":["StatelessWidget","Widget"],"desc":"小部件形式的 Flutter 标志。此小部件遵循 [IconTheme]。有关使用 Flutter 标志的指南,请访问 https://flutter.dev/brand。","fields":[{"name":"size","type":"double?","desc":"标志的逻辑像素大小。"},{"name":"textColor","type":"Color","required":true,"desc":"如果 [style] 是 [FlutterLogoStyle.horizontal] 或 [FlutterLogoStyle.stacked],用于绘制标志上"},{"name":"style","type":"FlutterLogoStyle","required":true,"desc":"是否以及在何处绘制"},{"name":"duration","type":"Duration","required":true,"desc":"如果 [style] 或 [textColor] 属性更改,动画的时长。"},{"name":"curve","type":"Curve","required":true,"desc":"如果 [style] 或 [textColor] 更改,标志动画的曲线。"}],"id":4,"localName":"Flutter图标","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"用于显示一个FlutterLogo","desc":["【size】 : 大小 【double】","【colors】: 颜色 【MaterialColor】"]},{"file":"node2_style.dart","name":"样式用于显示文字","desc":["【style】 : 样式-3种枚举 【FlutterLogoStyle】","【textColor】: 文字颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Focus/Focus_en-US.json b/modules/widget_system/widgets/doc/widgets/Focus/Focus_en-US.json deleted file mode 100644 index f0fc248c3..000000000 --- a/modules/widget_system/widgets/doc/widgets/Focus/Focus_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Focus","path":"/src/widgets/focus_scope.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that manages a [FocusNode] to allow keyboard focus to be given to this widget and its descendants.","fields":[{"name":"parentNode","type":"FocusNode?","desc":"The optional parent node to use when reparenting the [focusNode] for this [Focus] widget."},{"name":"child","type":"Widget","required":true,"desc":"The child widget of this [Focus]."},{"name":"focusNode","type":"FocusNode?","desc":"{@template flutter.widgets.Focus.focusNode} An optional focus node to use as the focus node for this widget."},{"name":"autofocus","type":"bool","required":true,"desc":"{@template flutter.widgets.Focus.autofocus} True if this widget will be selected as the initial focus when no other node in its scope is currently focused."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@template flutter.widgets.Focus.includeSemantics} Include semantics information in this widget."}],"id":282,"lever":5,"family":1,"linkIds":[283,284],"nodes":[{"file":"node1.dart","name":"FocusNode Focus and Blur","desc":["【focusNode】 : Focus 【FocusNode?】","【onFocusChange】 : Focus change listener 【ValueChanged?】","【child】 : Child widget 【Widget】"]},{"file":"node2.dart","name":"Auto Focus","desc":["【autofocus】 : Whether to auto focus 【bool】","The Flutter framework has built-in shortcuts for focus switching, such as ← and → for horizontal sliding lists to focus on the previous and next items respectively. The Tab key can focus on the next Focus node."]},{"file":"node3.dart","name":"Keyboard Event Callback","desc":["【onKeyEvent】 : Keyboard event callback 【FocusOnKeyEventCallback?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Focus/Focus_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Focus/Focus_zh-CN.json deleted file mode 100644 index 02f2ace25..000000000 --- a/modules/widget_system/widgets/doc/widgets/Focus/Focus_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Focus","path":"/src/widgets/focus_scope.dart","parents":["StatefulWidget","Widget"],"desc":"管理 [FocusNode] 以允许将键盘焦点给予此小部件及其后代的小部件。","fields":[{"name":"parentNode","type":"FocusNode?","desc":"为此 [Focus] 小部件重新设置 [focusNode] 父级时使用的可选父节点。"},{"name":"child","type":"Widget","required":true,"desc":"此 [Focus] 的子小部件。"},{"name":"focusNode","type":"FocusNode?","desc":"{@template flutter.widgets.Focus.focusNode} 用作此小部件焦点节点的可选焦点节点。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@template flutter.widgets.Focus.autofocus} 如果此小部件将在其范围内当前没有其他节点聚焦时被选为初始焦点,则为 true。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点更改时调用的处理程序。"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@template flutter.widgets.Focus.includeSemantics} 在此小部件中包含语义信息。"}],"id":282,"localName":"焦点组件","lever":5,"family":1,"linkIds":[283,284],"nodes":[{"file":"node1.dart","name":"FocusNode 聚焦与失焦","desc":["【focusNode】 : 焦点 【FocusNode?】","【onFocusChange】 : 焦点变化监听 【ValueChanged?】","【child】 : 子组件 【Widget】"]},{"file":"node2.dart","name":"自动聚焦","desc":["【autofocus】 : 是否自动聚焦 【bool】","Flutter 框架内置了焦点切换的快捷键,比如横向滑动的列表 ←、→ 分别让前项和后项聚焦。Tab 键可以让下一个 Focus 节点聚焦"]},{"file":"node3.dart","name":"键盘事件回调","desc":["【onKeyEvent】 : 键盘事件回调 【FocusOnKeyEventCallback?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_en-US.json b/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_en-US.json deleted file mode 100644 index dc18d05cc..000000000 --- a/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FocusScope","path":"/src/widgets/focus_scope.dart","parents":["Focus","StatefulWidget","Widget"],"desc":" A [FocusScope] is similar to a [Focus], but also serves as a scope for its descendants, restricting focus traversal to the scoped controls.","fields":[],"id":421,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_zh-CN.json deleted file mode 100644 index 9e7285b45..000000000 --- a/modules/widget_system/widgets/doc/widgets/FocusScope/FocusScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FocusScope","path":"/src/widgets/focus_scope.dart","parents":["Focus","StatefulWidget","Widget"],"desc":"[FocusScope] 类似于 [Focus],但也作为其后代的范围,将焦点遍历限制为范围内的控件。","fields":[],"id":421,"localName":"FocusScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_en-US.json deleted file mode 100644 index 2786d575c..000000000 --- a/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FocusTraversalGroup","path":"/src/widgets/focus_traversal.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that describes the inherited focus policy for focus traversal for its descendants, grouping them into a separate traversal group.","fields":[{"name":"policy","type":"FocusTraversalPolicy","required":true,"desc":"The policy used to move the focus from one focus node to another when traversing them using a keyboard."},{"name":"descendantsAreFocusable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreFocusable}"},{"name":"descendantsAreTraversable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreTraversable}"},{"name":"child","type":"Widget","required":true,"desc":"The child widget of this [FocusTraversalGroup]."}],"id":422,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_zh-CN.json deleted file mode 100644 index 665445a13..000000000 --- a/modules/widget_system/widgets/doc/widgets/FocusTraversalGroup/FocusTraversalGroup_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FocusTraversalGroup","path":"/src/widgets/focus_traversal.dart","parents":["StatefulWidget","Widget"],"desc":"描述其后代的继承焦点策略以进行焦点遍历的小部件,将它们分组到单独的遍历组中。","fields":[{"name":"policy","type":"FocusTraversalPolicy","required":true,"desc":"使用键盘遍历时用于将焦点从一个焦点节点移动到另一个焦点节点的策略。"},{"name":"descendantsAreFocusable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreFocusable}"},{"name":"descendantsAreTraversable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreTraversable}"},{"name":"child","type":"Widget","required":true,"desc":"此 [FocusTraversalGroup] 的子小部件。"}],"id":422,"localName":"FocusTraversalGroup","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_en-US.json b/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_en-US.json deleted file mode 100644 index 372519c83..000000000 --- a/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FocusTraversalOrder","path":"/src/widgets/focus_traversal.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that describes the order in which its child subtree should be traversed.","fields":[{"name":"order","type":"FocusOrder","required":true,"desc":"The order for the widget descendants of this [FocusTraversalOrder]."}],"id":423,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_zh-CN.json deleted file mode 100644 index e9e6d35b4..000000000 --- a/modules/widget_system/widgets/doc/widgets/FocusTraversalOrder/FocusTraversalOrder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FocusTraversalOrder","path":"/src/widgets/focus_traversal.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"描述其子子树应遍历顺序的继承小部件。","fields":[{"name":"order","type":"FocusOrder","required":true,"desc":"此 [FocusTraversalOrder] 的小部件后代的顺序。"}],"id":423,"localName":"FocusTraversalOrder","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_en-US.json b/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_en-US.json deleted file mode 100644 index f18c35738..000000000 --- a/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FocusableActionDetector","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that combines the functionality of [Actions], [Shortcuts], [MouseRegion] and a [Focus] widget to create a detector that defines actions and key bindings, and provides callbacks for handling focus and hover highlights.","fields":[{"name":"enabled","type":"bool","required":true,"desc":"Is this widget enabled or not."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"descendantsAreFocusable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreFocusable}"},{"name":"descendantsAreTraversable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreTraversable}"},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.actions.actions}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.shortcuts.shortcuts}"},{"name":"onShowFocusHighlight","type":"ValueChanged?","desc":"A function that will be called when the focus highlight should be shown or hidden."},{"name":"onShowHoverHighlight","type":"ValueChanged?","desc":"A function that will be called when the hover highlight should be shown or hidden."},{"name":"onFocusChange","type":"ValueChanged?","desc":"A function that will be called when the focus changes."},{"name":"mouseCursor","type":"MouseCursor","required":true,"desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"includeFocusSemantics","type":"bool","required":true,"desc":"Whether to include semantics from [Focus]."},{"name":"child","type":"Widget","required":true,"desc":"The child widget for this [FocusableActionDetector] widget."}],"id":424,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_zh-CN.json deleted file mode 100644 index 938fcbd67..000000000 --- a/modules/widget_system/widgets/doc/widgets/FocusableActionDetector/FocusableActionDetector_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FocusableActionDetector","path":"/src/widgets/actions.dart","parents":["StatefulWidget","Widget"],"desc":"结合 [Actions]、[Shortcuts]、[MouseRegion] 和 [Focus] 小部件功能的小部件,创建定义操作和键绑定的检测器,并提供处理焦点和悬停高亮的回调。","fields":[{"name":"enabled","type":"bool","required":true,"desc":"此小部件是否启用。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"descendantsAreFocusable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreFocusable}"},{"name":"descendantsAreTraversable","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.descendantsAreTraversable}"},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.actions.actions}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.shortcuts.shortcuts}"},{"name":"onShowFocusHighlight","type":"ValueChanged?","desc":"当应显示或隐藏焦点高亮时将调用的函数。"},{"name":"onShowHoverHighlight","type":"ValueChanged?","desc":"当应显示或隐藏悬停高亮时将调用的函数。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点更改时将调用的函数。"},{"name":"mouseCursor","type":"MouseCursor","required":true,"desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"includeFocusSemantics","type":"bool","required":true,"desc":"是否包含来自 [Focus] 的语义。"},{"name":"child","type":"Widget","required":true,"desc":"此 [FocusableActionDetector] 小部件的子小部件。"}],"id":424,"localName":"FocusableActionDetector","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Form/Form_en-US.json b/modules/widget_system/widgets/doc/widgets/Form/Form_en-US.json deleted file mode 100644 index d6a18e717..000000000 --- a/modules/widget_system/widgets/doc/widgets/Form/Form_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Form","path":"/src/widgets/form.dart","parents":["StatefulWidget","Widget"],"desc":" An optional container for grouping together multiple form field widgets (e.g. [TextField] widgets).","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"onWillPop","type":"WillPopCallback?","desc":"Enables the form to veto attempts by the user to dismiss the [ModalRoute] that contains the form."},{"name":"canPop","type":"bool?","desc":"{@macro flutter.widgets.PopScope.canPop}"},{"name":"onPopInvoked","type":"PopInvokedCallback?","desc":"{@macro flutter.widgets.navigator.onPopInvokedWithResult}"},{"name":"onPopInvokedWithResult","type":"PopInvokedWithResultCallback?","desc":"{@macro flutter.widgets.navigator.onPopInvokedWithResult}"},{"name":"onChanged","type":"VoidCallback?","desc":"Called when one of the form fields changes."},{"name":"autovalidateMode","type":"AutovalidateMode","required":true,"desc":"Used to enable/disable form fields auto validation and update their error text."}],"id":198,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Form","desc":["【child】 : Child component 【Widget】","【onChanged】 : Form change callback 【VoidCallback】","【onWillPop】 : Return callback 【WillPopCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Form/Form_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Form/Form_zh-CN.json deleted file mode 100644 index d011d12eb..000000000 --- a/modules/widget_system/widgets/doc/widgets/Form/Form_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Form","path":"/src/widgets/form.dart","parents":["StatefulWidget","Widget"],"desc":"用于将多个表单字段小部件(例如 [TextField] 小部件)分组在一起的可选容器。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"onWillPop","type":"WillPopCallback?","desc":"使表单能够否决用户关闭包含表单的 [ModalRoute] 的尝试。"},{"name":"canPop","type":"bool?","desc":"{@macro flutter.widgets.PopScope.canPop}"},{"name":"onPopInvoked","type":"PopInvokedCallback?","desc":"{@macro flutter.widgets.navigator.onPopInvokedWithResult}"},{"name":"onPopInvokedWithResult","type":"PopInvokedWithResultCallback?","desc":"{@macro flutter.widgets.navigator.onPopInvokedWithResult}"},{"name":"onChanged","type":"VoidCallback?","desc":"表单字段之一更改时调用。"},{"name":"autovalidateMode","type":"AutovalidateMode","required":true,"desc":"用于启用/禁用表单字段自动验证并更新其错误文本。"}],"id":198,"localName":"表单组件","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Form基本使用","desc":["【child】 : 子组件 【Widget】","【onChanged】 : 表单变化回调 【VoidCallback】","【onWillPop】 : 返回回调 【WillPopCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FormField/FormField_en-US.json b/modules/widget_system/widgets/doc/widgets/FormField/FormField_en-US.json deleted file mode 100644 index d5db3021c..000000000 --- a/modules/widget_system/widgets/doc/widgets/FormField/FormField_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FormField","path":"/src/widgets/form.dart","parents":["StatefulWidget","Widget"],"desc":" A single form field.","fields":[{"name":"builder","type":"FormFieldBuilder","required":true,"desc":"Function that returns the widget representing this form field."},{"name":"onSaved","type":"FormFieldSetter?","desc":"An optional method to call with the final value when the form is saved via [FormState.save]."},{"name":"forceErrorText","type":"String?","desc":"An optional property that forces the [FormFieldState] into an error state by directly setting the [FormFieldState.errorText] property without running the validator function."},{"name":"validator","type":"FormFieldValidator?","desc":"An optional method that validates an input. Returns an error string to display if the input is invalid, or null otherwise."},{"name":"errorBuilder","type":"FormFieldErrorBuilder?","desc":"Function that returns the widget representing the error to display."},{"name":"initialValue","type":"T?","desc":"An optional value to initialize the form field to, or null otherwise."},{"name":"enabled","type":"bool","required":true,"desc":"Whether the form is able to receive user input."},{"name":"autovalidateMode","type":"AutovalidateMode","required":true,"desc":"Used to enable/disable this form field auto validation and update its error text."},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the form field."}],"id":222,"lever":2,"family":1,"linkIds":[198,199,223],"nodes":[{"file":"node1_base.dart","name":"FormField Introduction","desc":["【builder】 : Content builder 【FormFieldBuilder】","【initialValue】 : Initial value 【T】","【validator】 : Validation function 【FormFieldValidator】","【enabled】 : Whether it is enabled 【bool】","【onSaved】 : Callback when the form is saved 【FormFieldSetter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FormField/FormField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FormField/FormField_zh-CN.json deleted file mode 100644 index beb6e303d..000000000 --- a/modules/widget_system/widgets/doc/widgets/FormField/FormField_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FormField","path":"/src/widgets/form.dart","parents":["StatefulWidget","Widget"],"desc":"单个表单字段。","fields":[{"name":"builder","type":"FormFieldBuilder","required":true,"desc":"返回表示此表单字段的小部件的函数。"},{"name":"onSaved","type":"FormFieldSetter?","desc":"通过 [FormState.save] 保存表单时使用最终值调用的可选方法。"},{"name":"forceErrorText","type":"String?","desc":"通过直接设置 [FormFieldState.errorText] 属性而不运行验证器函数,强制 [FormFieldState] 进入错误状态的可选属性。"},{"name":"validator","type":"FormFieldValidator?","desc":"验证输入的可选方法。如果输入无效,则返回要显示的错误字符串,否则返回 null。"},{"name":"errorBuilder","type":"FormFieldErrorBuilder?","desc":"返回表示要显示的错误的小部件的函数。"},{"name":"initialValue","type":"T?","desc":"初始化表单字段的可选值,否则为 null。"},{"name":"enabled","type":"bool","required":true,"desc":"表单是否能够接收用户输入。"},{"name":"autovalidateMode","type":"AutovalidateMode","required":true,"desc":"用于启用/禁用此表单字段自动验证并更新其错误文本。"},{"name":"restorationId","type":"String?","desc":"保存和恢复表单字段状态的恢复 ID。"}],"id":222,"localName":"表单字段","lever":2,"family":1,"linkIds":[198,199,223],"nodes":[{"file":"node1_base.dart","name":"FormField 介绍","desc":["【builder】 : 内容构造器 【FormFieldBuilder】","【initialValue】 : 初始值 【T】","【validator】 : 验证函数 【FormFieldValidator 】","【enabled】 : 是否有效 【bool】","【onSaved】 : 表单save时回调 【FormFieldSetter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_en-US.json b/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_en-US.json deleted file mode 100644 index 92c8bd8d3..000000000 --- a/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FractionalTranslation","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Applies a translation transformation before painting its child.","fields":[{"name":"translation","type":"Offset","required":true,"desc":"The translation to apply to the child, scaled to the child's size."},{"name":"transformHitTests","type":"bool","required":true,"desc":"Whether to apply the translation when performing hit tests."}],"id":263,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FractionalTranslation","desc":["【translation】: Offset fraction value 【Offset】","【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_zh-CN.json deleted file mode 100644 index aeaa7eee2..000000000 --- a/modules/widget_system/widgets/doc/widgets/FractionalTranslation/FractionalTranslation_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FractionalTranslation","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在绘制其子项之前应用平移变换。","fields":[{"name":"translation","type":"Offset","required":true,"desc":"应用于子项的平移,按子项的大小缩放。"},{"name":"transformHitTests","type":"bool","required":true,"desc":"执行命中测试时是否应用平移。"}],"id":263,"localName":"分度偏移","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FractionalTranslation基本使用","desc":["【translation】 : 偏移分度值 【Offset】","【child】: 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_en-US.json deleted file mode 100644 index 4008ae74f..000000000 --- a/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FractionallySizedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that sizes its child to a fraction of the total available space. For more details about the layout algorithm, see [RenderFractionallySizedOverflowBox].","fields":[{"name":"widthFactor","type":"double?","desc":"{@template flutter.widgets.basic.fractionallySizedBox.widthFactor} If non-null, the fraction of the incoming width given to the child."},{"name":"heightFactor","type":"double?","desc":"{@template flutter.widgets.basic.fractionallySizedBox.heightFactor} If non-null, the fraction of the incoming height given to the child."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"{@template flutter.widgets.basic.fractionallySizedBox.alignment} How to align the child."}],"id":82,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FractionallySizedBox","desc":["【child】 : Child component 【Widget】","【widthFactor】 : Width fraction 【double】","【heightFactor】 : Height fraction 【double】","【alignment】 : Alignment 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_zh-CN.json deleted file mode 100644 index 1d52eb73a..000000000 --- a/modules/widget_system/widgets/doc/widgets/FractionallySizedBox/FractionallySizedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FractionallySizedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项大小调整为总可用空间的一部分的小部件。有关布局算法的更多详细信息,请参阅 [RenderFractionallySizedOverflowBox]。","fields":[{"name":"widthFactor","type":"double?","desc":"{@template flutter.widgets.basic.fractionallySizedBox.widthFactor} 如果非空,给予子项的传入宽度的分数。"},{"name":"heightFactor","type":"double?","desc":"{@template flutter.widgets.basic.fractionallySizedBox.heightFactor} 如果非空,给予子项的传入高度的分数。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"{@template flutter.widgets.basic.fractionallySizedBox.alignment} 如何对齐子项。"}],"id":82,"localName":"分率盒","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FractionallySizedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【widthFactor】 : 宽分率 【double】","【heightFactor】 : 高分率 【double】","【alignment】 : 对齐方式 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_en-US.json deleted file mode 100644 index 4067e47a4..000000000 --- a/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FutureBuilder","path":"/src/widgets/async.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that builds itself based on the latest snapshot of interaction with a [Future].","fields":[{"name":"future","type":"Future?","desc":"The asynchronous computation to which this builder is currently connected, possibly null."},{"name":"builder","type":"AsyncWidgetBuilder","required":true,"desc":"The build strategy currently used by this builder."},{"name":"initialData","type":"T?","desc":"The data that will be used to create the snapshots provided until a non-null [future] has completed."}],"id":172,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of FutureBuilder","desc":["【builder】 : Subcomponent 【AsyncWidgetBuilder】","【initialData】 : Initial Data 【T】","【future】 : Asynchronous Task 【Future】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_zh-CN.json deleted file mode 100644 index 4eb6d1dae..000000000 --- a/modules/widget_system/widgets/doc/widgets/FutureBuilder/FutureBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"FutureBuilder","path":"/src/widgets/async.dart","parents":["StatefulWidget","Widget"],"desc":"基于与 [Future] 交互的最新快照构建自身的小部件。","fields":[{"name":"future","type":"Future?","desc":"此构建器当前连接的异步计算,可能为 null。"},{"name":"builder","type":"AsyncWidgetBuilder","required":true,"desc":"此构建器当前使用的构建策略。"},{"name":"initialData","type":"T?","desc":"将用于创建快照的数据,直到非空 [future] 完成。"}],"id":172,"localName":"异步构造器","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"FutureBuilder基本使用","desc":["【builder】 : 子组件 【AsyncWidgetBuilder】","【initialData】 : 初始数据 【T】","【future】 : 异步任务 【Future】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_en-US.json b/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_en-US.json deleted file mode 100644 index ec3f923eb..000000000 --- a/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GestureDetector","path":"/src/widgets/gesture_detector.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that detects gestures.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"onTapDown","type":"GestureTapDownCallback?","desc":"A pointer that might cause a tap with a primary button has contacted the screen at a particular location."},{"name":"onTapUp","type":"GestureTapUpCallback?","desc":"A pointer that will trigger a tap with a primary button has stopped contacting the screen at a particular location."},{"name":"onTap","type":"GestureTapCallback?","desc":"A tap with a primary button has occurred."},{"name":"onTapMove","type":"GestureTapMoveCallback?","desc":"A pointer that triggered a tap has moved."},{"name":"onTapCancel","type":"GestureTapCancelCallback?","desc":"The pointer that previously triggered [onTapDown] will not end up causing a tap."},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"A tap with a secondary button has occurred."},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"A pointer that might cause a tap with a secondary button has contacted the screen at a particular location."},{"name":"onSecondaryTapUp","type":"GestureTapUpCallback?","desc":"A pointer that will trigger a tap with a secondary button has stopped contacting the screen at a particular location."},{"name":"onSecondaryTapCancel","type":"GestureTapCancelCallback?","desc":"The pointer that previously triggered [onSecondaryTapDown] will not end up causing a tap."},{"name":"onTertiaryTapDown","type":"GestureTapDownCallback?","desc":"A pointer that might cause a tap with a tertiary button has contacted the screen at a particular location."},{"name":"onTertiaryTapUp","type":"GestureTapUpCallback?","desc":"A pointer that will trigger a tap with a tertiary button has stopped contacting the screen at a particular location."},{"name":"onTertiaryTapCancel","type":"GestureTapCancelCallback?","desc":"The pointer that previously triggered [onTertiaryTapDown] will not end up causing a tap."},{"name":"onDoubleTapDown","type":"GestureTapDownCallback?","desc":"A pointer that might cause a double tap has contacted the screen at a particular location."},{"name":"onDoubleTap","type":"GestureTapCallback?","desc":"The user has tapped the screen with a primary button at the same location twice in quick succession."},{"name":"onDoubleTapCancel","type":"GestureTapCancelCallback?","desc":"The pointer that previously triggered [onDoubleTapDown] will not end up causing a double tap."},{"name":"onLongPressDown","type":"GestureLongPressDownCallback?","desc":"The pointer has contacted the screen with a primary button, which might be the start of a long-press."},{"name":"onLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"A pointer that previously triggered [onLongPressDown] will not end up causing a long-press."},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"Called when a long press gesture with a primary button has been recognized."},{"name":"onLongPressStart","type":"GestureLongPressStartCallback?","desc":"Called when a long press gesture with a primary button has been recognized."},{"name":"onLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"A pointer has been drag-moved after a long-press with a primary button."},{"name":"onLongPressUp","type":"GestureLongPressUpCallback?","desc":"A pointer that has triggered a long-press with a primary button has stopped contacting the screen."},{"name":"onLongPressEnd","type":"GestureLongPressEndCallback?","desc":"A pointer that has triggered a long-press with a primary button has stopped contacting the screen."},{"name":"onSecondaryLongPressDown","type":"GestureLongPressDownCallback?","desc":"The pointer has contacted the screen with a secondary button, which might be the start of a long-press."},{"name":"onSecondaryLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"A pointer that previously triggered [onSecondaryLongPressDown] will not end up causing a long-press."},{"name":"onSecondaryLongPress","type":"GestureLongPressCallback?","desc":"Called when a long press gesture with a secondary button has been recognized."},{"name":"onSecondaryLongPressStart","type":"GestureLongPressStartCallback?","desc":"Called when a long press gesture with a secondary button has been recognized."},{"name":"onSecondaryLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"A pointer has been drag-moved after a long press with a secondary button."},{"name":"onSecondaryLongPressUp","type":"GestureLongPressUpCallback?","desc":"A pointer that has triggered a long-press with a secondary button has stopped contacting the screen."},{"name":"onSecondaryLongPressEnd","type":"GestureLongPressEndCallback?","desc":"A pointer that has triggered a long-press with a secondary button has stopped contacting the screen."},{"name":"onTertiaryLongPressDown","type":"GestureLongPressDownCallback?","desc":"The pointer has contacted the screen with a tertiary button, which might be the start of a long-press."},{"name":"onTertiaryLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"A pointer that previously triggered [onTertiaryLongPressDown] will not end up causing a long-press."},{"name":"onTertiaryLongPress","type":"GestureLongPressCallback?","desc":"Called when a long press gesture with a tertiary button has been recognized."},{"name":"onTertiaryLongPressStart","type":"GestureLongPressStartCallback?","desc":"Called when a long press gesture with a tertiary button has been recognized."},{"name":"onTertiaryLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"A pointer has been drag-moved after a long press with a tertiary button."},{"name":"onTertiaryLongPressUp","type":"GestureLongPressUpCallback?","desc":"A pointer that has triggered a long-press with a tertiary button has stopped contacting the screen."},{"name":"onTertiaryLongPressEnd","type":"GestureLongPressEndCallback?","desc":"A pointer that has triggered a long-press with a tertiary button has stopped contacting the screen."},{"name":"onVerticalDragDown","type":"GestureDragDownCallback?","desc":"A pointer has contacted the screen with a primary button and might begin to move vertically."},{"name":"onVerticalDragStart","type":"GestureDragStartCallback?","desc":"A pointer has contacted the screen with a primary button and has begun to move vertically."},{"name":"onVerticalDragUpdate","type":"GestureDragUpdateCallback?","desc":"A pointer that is in contact with the screen with a primary button and moving vertically has moved in the vertical direction."},{"name":"onVerticalDragEnd","type":"GestureDragEndCallback?","desc":"A pointer that was previously in contact with the screen with a primary button and moving vertically is no longer in contact with the screen and was moving at a specific velocity when it stopped contacting the screen."},{"name":"onVerticalDragCancel","type":"GestureDragCancelCallback?","desc":"The pointer that previously triggered [onVerticalDragDown] did not complete."},{"name":"onHorizontalDragDown","type":"GestureDragDownCallback?","desc":"A pointer has contacted the screen with a primary button and might begin to move horizontally."},{"name":"onHorizontalDragStart","type":"GestureDragStartCallback?","desc":"A pointer has contacted the screen with a primary button and has begun to move horizontally."},{"name":"onHorizontalDragUpdate","type":"GestureDragUpdateCallback?","desc":"A pointer that is in contact with the screen with a primary button and moving horizontally has moved in the horizontal direction."},{"name":"onHorizontalDragEnd","type":"GestureDragEndCallback?","desc":"A pointer that was previously in contact with the screen with a primary button and moving horizontally is no longer in contact with the screen and was moving at a specific velocity when it stopped contacting the screen."},{"name":"onHorizontalDragCancel","type":"GestureDragCancelCallback?","desc":"The pointer that previously triggered [onHorizontalDragDown] did not complete."},{"name":"onPanDown","type":"GestureDragDownCallback?","desc":"A pointer has contacted the screen with a primary button and might begin to move."},{"name":"onPanStart","type":"GestureDragStartCallback?","desc":"A pointer has contacted the screen with a primary button and has begun to move."},{"name":"onPanUpdate","type":"GestureDragUpdateCallback?","desc":"A pointer that is in contact with the screen with a primary button and moving has moved again."},{"name":"onPanEnd","type":"GestureDragEndCallback?","desc":"A pointer that was previously in contact with the screen with a primary button and moving is no longer in contact with the screen and was moving at a specific velocity when it stopped contacting the screen."},{"name":"onPanCancel","type":"GestureDragCancelCallback?","desc":"The pointer that previously triggered [onPanDown] did not complete."},{"name":"onScaleStart","type":"GestureScaleStartCallback?","desc":"The pointers in contact with the screen have established a focal point and initial scale of 1.0."},{"name":"onScaleUpdate","type":"GestureScaleUpdateCallback?","desc":"The pointers in contact with the screen have indicated a new focal point and/or scale."},{"name":"onScaleEnd","type":"GestureScaleEndCallback?","desc":"The pointers are no longer in contact with the screen."},{"name":"onForcePressStart","type":"GestureForcePressStartCallback?","desc":"The pointer is in contact with the screen and has pressed with sufficient force to initiate a force press. The amount of force is at least [ForcePressGestureRecognizer.startPressure]."},{"name":"onForcePressPeak","type":"GestureForcePressPeakCallback?","desc":"The pointer is in contact with the screen and has pressed with the maximum force. The amount of force is at least [ForcePressGestureRecognizer.peakPressure]."},{"name":"onForcePressUpdate","type":"GestureForcePressUpdateCallback?","desc":"A pointer is in contact with the screen, has previously passed the [ForcePressGestureRecognizer.startPressure] and is either moving on the plane of the screen, pressing the screen with varying forces or both simultaneously."},{"name":"onForcePressEnd","type":"GestureForcePressEndCallback?","desc":"The pointer tracked by [onForcePressStart] is no longer in contact with the screen."},{"name":"behavior","type":"HitTestBehavior?","desc":"How this gesture detector should behave during hit testing when deciding how the hit test propagates to children and whether to consider targets behind this one."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"Whether to exclude these gestures from the semantics tree. For example, the long-press gesture for showing a tooltip is excluded because the tooltip itself is included in the semantics tree directly and so having a gesture to show it would result in duplication of information."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"Determines the way that drag start behavior is handled."},{"name":"supportedDevices","type":"Set?","desc":"The kind of devices that are allowed to be recognized."},{"name":"trackpadScrollCausesScale","type":"bool","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollCausesScale}"},{"name":"trackpadScrollToScaleFactor","type":"Offset","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollToScaleFactor}"}],"id":146,"lever":5,"family":0,"linkIds":[147,150],"nodes":[{"file":"node1_base.dart","name":"Basic Events of GestureDetector","desc":["【child】 : Child component 【Widget】","【onTap】 : Tap event 【Function()】","【onDoubleTap】 : Double tap event 【GestureTapCallback】","【onLongPress】 : Long press event 【GestureLongPressCallback】"]},{"file":"node2_tap.dart","name":"Details of GestureDetector","desc":["【onTapDown】 : Press down callback 【GestureTapDownCallback】","【onTapUp】 : Tap release callback 【GestureTapUpCallback】","【onTapCancel】 : Tap cancel 【GestureTapCancelCallback】"]},{"file":"node3_pan.dart","name":"Pan Events of GestureDetector","desc":["【onPanDown】 : Press down callback 【GestureDragDownCallback】","【onPanEnd】 : Drag end 【GestureDragEndCallback】","【onPanStart】 : Drag start 【GestureDragStartCallback】","【onPanUpdate】 : Drag update 【GestureDragUpdateCallback】","【onPanCancel】 : Drag cancel 【GestureDragCancelCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_zh-CN.json deleted file mode 100644 index 6361c84f2..000000000 --- a/modules/widget_system/widgets/doc/widgets/GestureDetector/GestureDetector_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GestureDetector","path":"/src/widgets/gesture_detector.dart","parents":["StatelessWidget","Widget"],"desc":"检测手势的小部件。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"onTapDown","type":"GestureTapDownCallback?","desc":"可能导致主按钮点击的指针已在特定位置接触屏幕。"},{"name":"onTapUp","type":"GestureTapUpCallback?","desc":"将触发主按钮点击的指针已在特定位置停止接触屏幕。"},{"name":"onTap","type":"GestureTapCallback?","desc":"发生了主按钮点击。"},{"name":"onTapMove","type":"GestureTapMoveCallback?","desc":"触发点击的指针已移动。"},{"name":"onTapCancel","type":"GestureTapCancelCallback?","desc":"先前触发 [onTapDown] 的指针不会最终导致点击。"},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"发生了辅助按钮点击。"},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"可能导致辅助按钮点击的指针已在特定位置接触屏幕。"},{"name":"onSecondaryTapUp","type":"GestureTapUpCallback?","desc":"将触发辅助按钮点击的指针已在特定位置停止接触屏幕。"},{"name":"onSecondaryTapCancel","type":"GestureTapCancelCallback?","desc":"先前触发 [onSecondaryTapDown] 的指针不会最终导致点击。"},{"name":"onTertiaryTapDown","type":"GestureTapDownCallback?","desc":"可能导致第三按钮点击的指针已在特定位置接触屏幕。"},{"name":"onTertiaryTapUp","type":"GestureTapUpCallback?","desc":"将触发第三按钮点击的指针已在特定位置停止接触屏幕。"},{"name":"onTertiaryTapCancel","type":"GestureTapCancelCallback?","desc":"先前触发 [onTertiaryTapDown] 的指针不会最终导致点击。"},{"name":"onDoubleTapDown","type":"GestureTapDownCallback?","desc":"可能导致双击的指针已在特定位置接触屏幕。"},{"name":"onDoubleTap","type":"GestureTapCallback?","desc":"用户在同一位置快速连续用主按钮点击屏幕两次。"},{"name":"onDoubleTapCancel","type":"GestureTapCancelCallback?","desc":"先前触发 [onDoubleTapDown] 的指针不会最终导致双击。"},{"name":"onLongPressDown","type":"GestureLongPressDownCallback?","desc":"指针已用主按钮接触屏幕,这可能是长按的开始。"},{"name":"onLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"先前触发 [onLongPressDown] 的指针不会最终导致长按。"},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"识别到主按钮长按手势时调用。"},{"name":"onLongPressStart","type":"GestureLongPressStartCallback?","desc":"识别到主按钮长按手势时调用。"},{"name":"onLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"指针在主按钮长按后被拖动移动。"},{"name":"onLongPressUp","type":"GestureLongPressUpCallback?","desc":"触发主按钮长按的指针已停止接触屏幕。"},{"name":"onLongPressEnd","type":"GestureLongPressEndCallback?","desc":"触发主按钮长按的指针已停止接触屏幕。"},{"name":"onSecondaryLongPressDown","type":"GestureLongPressDownCallback?","desc":"指针已用辅助按钮接触屏幕,这可能是长按的开始。"},{"name":"onSecondaryLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"先前触发 [onSecondaryLongPressDown] 的指针不会最终导致长按。"},{"name":"onSecondaryLongPress","type":"GestureLongPressCallback?","desc":"识别到辅助按钮长按手势时调用。"},{"name":"onSecondaryLongPressStart","type":"GestureLongPressStartCallback?","desc":"识别到辅助按钮长按手势时调用。"},{"name":"onSecondaryLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"指针在辅助按钮长按后被拖动移动。"},{"name":"onSecondaryLongPressUp","type":"GestureLongPressUpCallback?","desc":"触发辅助按钮长按的指针已停止接触屏幕。"},{"name":"onSecondaryLongPressEnd","type":"GestureLongPressEndCallback?","desc":"触发辅助按钮长按的指针已停止接触屏幕。"},{"name":"onTertiaryLongPressDown","type":"GestureLongPressDownCallback?","desc":"指针已用第三按钮接触屏幕,这可能是长按的开始。"},{"name":"onTertiaryLongPressCancel","type":"GestureLongPressCancelCallback?","desc":"先前触发 [onTertiaryLongPressDown] 的指针不会最终导致长按。"},{"name":"onTertiaryLongPress","type":"GestureLongPressCallback?","desc":"识别到第三按钮长按手势时调用。"},{"name":"onTertiaryLongPressStart","type":"GestureLongPressStartCallback?","desc":"识别到第三按钮长按手势时调用。"},{"name":"onTertiaryLongPressMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"指针在第三按钮长按后被拖动移动。"},{"name":"onTertiaryLongPressUp","type":"GestureLongPressUpCallback?","desc":"触发第三按钮长按的指针已停止接触屏幕。"},{"name":"onTertiaryLongPressEnd","type":"GestureLongPressEndCallback?","desc":"触发第三按钮长按的指针已停止接触屏幕。"},{"name":"onVerticalDragDown","type":"GestureDragDownCallback?","desc":"指针已用主按钮接触屏幕,可能开始垂直移动。"},{"name":"onVerticalDragStart","type":"GestureDragStartCallback?","desc":"指针已用主按钮接触屏幕并开始垂直移动。"},{"name":"onVerticalDragUpdate","type":"GestureDragUpdateCallback?","desc":"与屏幕接触的主按钮指针垂直移动,已在垂直方向上移动。"},{"name":"onVerticalDragEnd","type":"GestureDragEndCallback?","desc":"先前与屏幕接触的主按钮指针垂直移动,不再与屏幕接触,并在停止接触屏幕时以特定速度移动。"},{"name":"onVerticalDragCancel","type":"GestureDragCancelCallback?","desc":"先前触发 [onVerticalDragDown] 的指针未完成。"},{"name":"onHorizontalDragDown","type":"GestureDragDownCallback?","desc":"指针已用主按钮接触屏幕,可能开始水平移动。"},{"name":"onHorizontalDragStart","type":"GestureDragStartCallback?","desc":"指针已用主按钮接触屏幕并开始水平移动。"},{"name":"onHorizontalDragUpdate","type":"GestureDragUpdateCallback?","desc":"与屏幕接触的主按钮指针水平移动,已在水平方向上移动。"},{"name":"onHorizontalDragEnd","type":"GestureDragEndCallback?","desc":"先前与屏幕接触的主按钮指针水平移动,不再与屏幕接触,并在停止接触屏幕时以特定速度移动。"},{"name":"onHorizontalDragCancel","type":"GestureDragCancelCallback?","desc":"先前触发 [onHorizontalDragDown] 的指针未完成。"},{"name":"onPanDown","type":"GestureDragDownCallback?","desc":"指针已用主按钮接触屏幕,可能开始移动。"},{"name":"onPanStart","type":"GestureDragStartCallback?","desc":"指针已用主按钮接触屏幕并开始移动。"},{"name":"onPanUpdate","type":"GestureDragUpdateCallback?","desc":"与屏幕接触的主按钮指针移动,已再次移动。"},{"name":"onPanEnd","type":"GestureDragEndCallback?","desc":"先前与屏幕接触的主按钮指针移动,不再与屏幕接触,并在停止接触屏幕时以特定速度移动。"},{"name":"onPanCancel","type":"GestureDragCancelCallback?","desc":"先前触发 [onPanDown] 的指针未完成。"},{"name":"onScaleStart","type":"GestureScaleStartCallback?","desc":"与屏幕接触的指针已建立焦点并初始比例为 1.0。"},{"name":"onScaleUpdate","type":"GestureScaleUpdateCallback?","desc":"与屏幕接触的指针已指示新的焦点和/或比例。"},{"name":"onScaleEnd","type":"GestureScaleEndCallback?","desc":"指针不再与屏幕接触。"},{"name":"onForcePressStart","type":"GestureForcePressStartCallback?","desc":"指针与屏幕接触并以足够的力按下以启动力按。力量至少为 [ForcePressGestureRecognizer.startPressure]。"},{"name":"onForcePressPeak","type":"GestureForcePressPeakCallback?","desc":"指针与屏幕接触并以最大力按下。力量至少为 [ForcePressGestureRecognizer.peakPressure]。"},{"name":"onForcePressUpdate","type":"GestureForcePressUpdateCallback?","desc":"指针与屏幕接触,先前已通过 [ForcePressGestureRecognizer.startPressure],并且正在屏幕平面上移动、以不同力量按压屏幕或两者同时进行。"},{"name":"onForcePressEnd","type":"GestureForcePressEndCallback?","desc":"[onForcePressStart] 跟踪的指针不再与屏幕接触。"},{"name":"behavior","type":"HitTestBehavior?","desc":"此手势检测器在命中测试期间应如何表现,决定命中测试如何传播到子项以及是否考虑此项后面的目标。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"是否从语义树中排除这些手势。例如,显示工具提示的长按手势被排除,因为工具提示本身直接包含在语义树中,因此有显示它的手势会导致信息重复。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"确定拖动开始行为的处理方式。"},{"name":"supportedDevices","type":"Set?","desc":"允许识别的设备类型。"},{"name":"trackpadScrollCausesScale","type":"bool","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollCausesScale}"},{"name":"trackpadScrollToScaleFactor","type":"Offset","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollToScaleFactor}"}],"id":146,"localName":"手势监听器","lever":5,"family":0,"linkIds":[147,150],"nodes":[{"file":"node1_base.dart","name":"GestureDetector基本事件","desc":["【child】 : 子组件 【Widget】","【onTap】 : 点击事件 【Function()】","【onDoubleTap】 : 双击事件 【GestureTapCallback】","【onLongPress】 : 长按事件 【GestureLongPressCallback】"]},{"file":"node2_tap.dart","name":"GestureDetector详情信息","desc":["【onTapDown】 : 按下回调 【GestureTapDownCallback】","【onTapUp】 : 点击抬起回调 【GestureTapUpCallback】","【onTapCancel】 : 点击取消 【GestureTapCancelCallback】"]},{"file":"node3_pan.dart","name":"GestureDetector的Pan事件","desc":["【onPanDown】 : 按下回调 【GestureDragDownCallback】","【onPanEnd】 : 拖动结束 【GestureDragEndCallback】","【onPanStart】 : 开始拖动 【GestureDragStartCallback】","【onPanUpdate】 : 拖动更新 【GestureDragUpdateCallback】","【onPanCancel】 : 拖动取消 【GestureDragCancelCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_en-US.json deleted file mode 100644 index 4c2cf34ff..000000000 --- a/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GlowingOverscrollIndicator","path":"/src/widgets/overscroll_indicator.dart","parents":["StatefulWidget","Widget"],"desc":" A visual indication that a scroll view has overscrolled.","fields":[{"name":"showLeading","type":"bool","required":true,"desc":"Whether to show the overscroll glow on the side with negative scroll offsets."},{"name":"showTrailing","type":"bool","required":true,"desc":"Whether to show the overscroll glow on the side with positive scroll offsets."},{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@template flutter.overscroll.axisDirection} The direction of positive scroll offsets in the [Scrollable] whose overscrolls are to be visualized. {@endtemplate}"},{"name":"color","type":"Color","required":true,"desc":"The color of the glow. The alpha channel is ignored."},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@template flutter.overscroll.notificationPredicate} A check that specifies whether a [ScrollNotification] should be handled by this widget."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":250,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage","desc":["【showLeading】: Whether the header is active 【bool】","【showTrailing】: Whether the footer is active 【bool】","【axisDirection】: Axis direction 【AxisDirection】","【color】: Color 【Color】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_zh-CN.json deleted file mode 100644 index 6bcd134ea..000000000 --- a/modules/widget_system/widgets/doc/widgets/GlowingOverscrollIndicator/GlowingOverscrollIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GlowingOverscrollIndicator","path":"/src/widgets/overscroll_indicator.dart","parents":["StatefulWidget","Widget"],"desc":"滚动视图已过度滚动的视觉指示。","fields":[{"name":"showLeading","type":"bool","required":true,"desc":"是否在负滚动偏移的一侧显示过度滚动发光。"},{"name":"showTrailing","type":"bool","required":true,"desc":"是否在正滚动偏移的一侧显示过度滚动发光。"},{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@template flutter.overscroll.axisDirection} 要可视化其过度滚动的 [Scrollable] 中正滚动偏移的方向。{@endtemplate}"},{"name":"color","type":"Color","required":true,"desc":"发光的颜色。忽略 alpha 通道。"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@template flutter.overscroll.notificationPredicate} 指定此小部件是否应处理 [ScrollNotification] 的检查。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":250,"localName":"滑动越域指示器","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"基本使用","desc":["【showLeading】 : 头部是否生效 【bool】","【showTrailing】 : 底部是否生效 【bool】","【axisDirection】 : 轴向 【AxisDirection】","【color】 : 颜色 【Color】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_en-US.json b/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_en-US.json deleted file mode 100644 index d13daa118..000000000 --- a/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GridPaper","path":"/src/widgets/grid_paper.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that draws a rectilinear grid of lines one pixel wide.","fields":[{"name":"color","type":"Color","required":true,"desc":"The color to draw the lines in the grid."},{"name":"interval","type":"double","required":true,"desc":"The distance between the primary lines in the grid, in logical pixels."},{"name":"divisions","type":"int","required":true,"desc":"The number of major divisions within each primary grid cell."},{"name":"subdivisions","type":"int","required":true,"desc":"The number of minor divisions within each major division, including the major division itself."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":37,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"GridPager Basic Properties","desc":["【child】: Child component 【Widget】","【color】: Color 【Color】","【interval】: Small block side length 【double】"]},{"file":"node2_divisions.dart","name":"GridPager Subdivision","desc":["【child】: Child component 【Widget】","【color】: Color 【Color】","【subdivisions】: Number of sub-blocks in a small block 【int】","【divisions】: Number of subdivisions of sub-blocks in a small block 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_zh-CN.json deleted file mode 100644 index 20a57b9cc..000000000 --- a/modules/widget_system/widgets/doc/widgets/GridPaper/GridPaper_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GridPaper","path":"/src/widgets/grid_paper.dart","parents":["StatelessWidget","Widget"],"desc":"绘制一像素宽的直线网格的小部件。","fields":[{"name":"color","type":"Color","required":true,"desc":"绘制网格中线条的颜色。"},{"name":"interval","type":"double","required":true,"desc":"网格中主要线条之间的距离,以逻辑像素为单位。"},{"name":"divisions","type":"int","required":true,"desc":"每个主要网格单元内的主要分割数。"},{"name":"subdivisions","type":"int","required":true,"desc":"每个主要分割内的次要分割数,包括主要分割本身。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":37,"localName":"网格线组件","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"GridPager 基础属性","desc":["【child】: 子组件 【Widget】","【color】: 颜色 【Color】","【interval】: 小块边长 【double】"]},{"file":"node2_divisions.dart","name":"GridPager 再分割","desc":["【child】: 子组件 【Widget】","【color】: 颜色 【Color】","【subdivisions】: 小块中子块个数 【int】","【divisions】: 小块中子块的分割数 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_en-US.json b/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_en-US.json deleted file mode 100644 index 45dd360c3..000000000 --- a/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GridTile","path":"/src/material/grid_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A tile in a Material Design grid list.","fields":[{"name":"header","type":"Widget?","desc":"The widget to show over the top of this grid tile."},{"name":"footer","type":"Widget?","desc":"The widget to show over the bottom of this grid tile."},{"name":"child","type":"Widget","required":true,"desc":"The widget that fills the tile."}],"id":21,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"The basic representation of GridTile is as follows","desc":["【header】: Header component 【Widget】","【child】: Child component 【Widget】","【footer】: Footer component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_zh-CN.json deleted file mode 100644 index 652e69eb5..000000000 --- a/modules/widget_system/widgets/doc/widgets/GridTile/GridTile_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GridTile","path":"/src/material/grid_tile.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 网格列表中的磁贴。","fields":[{"name":"header","type":"Widget?","desc":"显示在此网格磁贴顶部的小部件。"},{"name":"footer","type":"Widget?","desc":"显示在此网格磁贴底部的小部件。"},{"name":"child","type":"Widget","required":true,"desc":"填充磁贴的小部件。"}],"id":21,"localName":"网格瓦片","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"GridTile的基本表现如下","desc":["【header】: 头组件 【Widget】","【child】: 子组件 【Widget】","【footer】: 脚组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_en-US.json b/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_en-US.json deleted file mode 100644 index 0d9f02560..000000000 --- a/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GridTileBar","path":"/src/material/grid_tile_bar.dart","parents":["StatelessWidget","Widget"],"desc":" A header used in a Material Design [GridTile].","fields":[{"name":"backgroundColor","type":"Color?","desc":"The color to paint behind the child widgets."},{"name":"leading","type":"Widget?","desc":"A widget to display before the title."},{"name":"title","type":"Widget?","desc":"The primary content of the list item."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"trailing","type":"Widget?","desc":"A widget to display after the title."}],"id":20,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"The basic representation of GridTileBar is as follows","desc":["【leading】: Left component 【Widget】","【trailing】: Trailing component 【Widget】","【title】: Top middle component 【Widget】","【subtitle】: Bottom middle component 【Widget】","【backgroundColor】: Background color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_zh-CN.json deleted file mode 100644 index 3a7ba73f4..000000000 --- a/modules/widget_system/widgets/doc/widgets/GridTileBar/GridTileBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GridTileBar","path":"/src/material/grid_tile_bar.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design [GridTile] 中使用的标题。","fields":[{"name":"backgroundColor","type":"Color?","desc":"在子小部件后面绘制的颜色。"},{"name":"leading","type":"Widget?","desc":"在标题前显示的小部件。"},{"name":"title","type":"Widget?","desc":"列表项的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"trailing","type":"Widget?","desc":"在标题后显示的小部件。"}],"id":20,"localName":"网格瓦片头","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"GridTileBar的基本表现如下","desc":["【leading】: 左侧组件 【Widget】","【trailing】: 尾组件 【Widget】","【title】: 中间上组件 【Widget】","【subtitle】: 中间下组件 【Widget】","【backgroundColor】: 背景色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridView/GridView_en-US.json b/modules/widget_system/widgets/doc/widgets/GridView/GridView_en-US.json deleted file mode 100644 index a4fe22453..000000000 --- a/modules/widget_system/widgets/doc/widgets/GridView/GridView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GridView","path":"/src/widgets/scroll_view.dart","parents":["BoxScrollView","ScrollView","StatelessWidget","Widget"],"desc":" A scrollable, 2D array of widgets.","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"A delegate that controls the layout of the children within the [GridView]."},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"A delegate that provides the children for the [GridView]."}],"id":163,"lever":5,"family":0,"linkIds":[21,162],"nodes":[{"file":"node1_base.dart","name":"GridView.count Construction","desc":["【children】 : List of child components 【List】","【crossAxisCount】 : Number of boxes per row on the main axis 【int】","【mainAxisSpacing】 : Spacing between rows on the main axis 【double】","【crossAxisSpacing】 : Spacing between rows on the cross axis 【double】","【childAspectRatio】 : Main length/cross length of the box 【double】","【crossAxisCount】 : Number of boxes per row on the main axis 【int】"]},{"file":"node2_direction.dart","name":"GridView Scroll Direction","desc":["【scrollDirection】 : Scroll direction 【Axis】","【reverse】 : Whether to scroll in reverse 【bool】","【shrinkWrap】 : Whether to wrap when there is no boundary 【bool】"]},{"file":"node3_extend.dart","name":"GridView Scroll Direction","desc":["【scrollDirection】 : Scroll direction 【Axis】","【reverse】 : Whether to scroll in reverse 【bool】","【shrinkWrap】 : Whether to wrap when there is no boundary 【bool】"]},{"file":"node4_builder.dart","name":"GridView.builder Construction","desc":["【itemCount】 : Number of items 【int】","【gridDelegate】 : Grid delegate 【SliverGridDelegate】","【itemBuilder】 : Item builder 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/GridView/GridView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/GridView/GridView_zh-CN.json deleted file mode 100644 index 8d9d4b837..000000000 --- a/modules/widget_system/widgets/doc/widgets/GridView/GridView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"GridView","path":"/src/widgets/scroll_view.dart","parents":["BoxScrollView","ScrollView","StatelessWidget","Widget"],"desc":"可滚动的二维小部件数组。","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"控制 [GridView] 内子项布局的委托。"},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"为 [GridView] 提供子项的委托。"}],"id":163,"localName":"网格组件","lever":5,"family":0,"linkIds":[21,162],"nodes":[{"file":"node1_base.dart","name":"GridView.count构造","desc":["【children】 : 子组件列表 【List】","【crossAxisCount】 : 主轴一行box数量 【int】","【mainAxisSpacing】 : 主轴每行间距 【double】","【crossAxisSpacing】 : 交叉轴每行间距 【double】","【childAspectRatio】 : box主长/交叉轴长 【double】","【crossAxisCount】 : 主轴一行数量 【int】"]},{"file":"node2_direction.dart","name":"GridView滑动方向","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向滑动 【bool】","【shrinkWrap】 : 无边界时是否包裹 【bool】"]},{"file":"node3_extend.dart","name":"GridView滑动方向","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向滑动 【bool】","【shrinkWrap】 : 无边界时是否包裹 【bool】"]},{"file":"node4_builder.dart","name":"GridView.builder构造","desc":["【itemCount】 : 条目数量 【int】","【gridDelegate】 : 网格代理 【SliverGridDelegate】","【itemBuilder】 : 条目构造器 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Hero/Hero_en-US.json b/modules/widget_system/widgets/doc/widgets/Hero/Hero_en-US.json deleted file mode 100644 index 68adb1db1..000000000 --- a/modules/widget_system/widgets/doc/widgets/Hero/Hero_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Hero","path":"/src/widgets/heroes.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that marks its child as being a candidate for [hero animations](https://docs.flutter.dev/ui/animations/hero-animations).","fields":[{"name":"tag","type":"Object","required":true,"desc":"The identifier for this particular hero. If the tag of this hero matches the tag of a hero on a [PageRoute] that we're navigating to or from, then a hero animation will be triggered."},{"name":"createRectTween","type":"CreateRectTween?","desc":"Defines how the destination hero's bounds change as it flies from the starting route to the destination route."},{"name":"child","type":"Widget","required":true,"desc":"The widget subtree that will \"fly\" from one route to another during a [Navigator] push or pop transition."},{"name":"flightShuttleBuilder","type":"HeroFlightShuttleBuilder?","desc":"Optional override to supply a widget that's shown during the hero's flight."},{"name":"placeholderBuilder","type":"HeroPlaceholderBuilder?","desc":"Placeholder widget left in place as the Hero's [child] once the flight takes off."},{"name":"transitionOnUserGestures","type":"bool","required":true,"desc":"Whether to perform the hero transition if the [PageRoute] transition was triggered by a user gesture, such as a back swipe on iOS."}],"id":171,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Hero","desc":["【tag】 : tag 【String】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Hero/Hero_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Hero/Hero_zh-CN.json deleted file mode 100644 index 5cd534a04..000000000 --- a/modules/widget_system/widgets/doc/widgets/Hero/Hero_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Hero","path":"/src/widgets/heroes.dart","parents":["StatefulWidget","Widget"],"desc":"将其子项标记为[英雄动画](https://docs.flutter.dev/ui/animations/hero-animations)候选者的小部件。","fields":[{"name":"tag","type":"Object","required":true,"desc":"此特定英雄的标识符。如果此英雄的标签与我们导航到或来自的 [PageRoute] 上的英雄标签匹配,则将触发英雄动画。"},{"name":"createRectTween","type":"CreateRectTween?","desc":"定义目标英雄的边界在从起始路由飞到目标路由时如何变化。"},{"name":"child","type":"Widget","required":true,"desc":"在 [Navigator] 推送或弹出转换期间将从一个路由"},{"name":"flightShuttleBuilder","type":"HeroFlightShuttleBuilder?","desc":"可选覆盖,提供在英雄飞行期间显示的小部件。"},{"name":"placeholderBuilder","type":"HeroPlaceholderBuilder?","desc":"一旦飞行起飞,留在原地作为英雄 [child] 的占位符小部件。"},{"name":"transitionOnUserGestures","type":"bool","required":true,"desc":"如果 [PageRoute] 转换是由用户手势(如 iOS 上的后退滑动)触发的,是否执行英雄转换。"}],"id":171,"localName":"共享动画","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Hero基本使用","desc":["【tag】 : 标签 【String】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_en-US.json b/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_en-US.json deleted file mode 100644 index 37a8d0e2c..000000000 --- a/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"HeroControllerScope","path":"/src/widgets/navigator.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget to host a hero controller.","fields":[{"name":"controller","type":"HeroController?","desc":"The hero controller that is hosted inside this widget."}],"id":425,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_zh-CN.json deleted file mode 100644 index f30899095..000000000 --- a/modules/widget_system/widgets/doc/widgets/HeroControllerScope/HeroControllerScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"HeroControllerScope","path":"/src/widgets/navigator.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"托管英雄控制器的继承小部件。","fields":[{"name":"controller","type":"HeroController?","desc":"托管在此小部件内的英雄控制器。"}],"id":425,"localName":"HeroControllerScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_en-US.json b/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_en-US.json deleted file mode 100644 index 87dce6c60..000000000 --- a/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"HeroMode","path":"/src/widgets/heroes.dart","parents":["StatelessWidget","Widget"],"desc":" Enables or disables [Hero]es in the widget subtree.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The subtree to place inside the [HeroMode]."},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not [Hero]es are enabled in this subtree."}],"id":426,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_zh-CN.json b/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_zh-CN.json deleted file mode 100644 index 8d79a5ae3..000000000 --- a/modules/widget_system/widgets/doc/widgets/HeroMode/HeroMode_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"HeroMode","path":"/src/widgets/heroes.dart","parents":["StatelessWidget","Widget"],"desc":"启用或禁用小部件子树中的 [Hero]。","fields":[{"name":"child","type":"Widget","required":true,"desc":"放置在 [HeroMode] 内的子树。"},{"name":"enabled","type":"bool","required":true,"desc":"此子树中是否启用 [Hero]。"}],"id":426,"localName":"HeroMode","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_en-US.json b/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_en-US.json deleted file mode 100644 index 879736d2c..000000000 --- a/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"HtmlElementView","path":"/src/widgets/platform_view.dart","parents":["StatelessWidget","Widget"],"desc":" Embeds an HTML element in the Widget hierarchy in Flutter web.","fields":[{"name":"viewType","type":"String","required":true,"desc":"The unique identifier for the HTML view type to be embedded by this widget."},{"name":"onPlatformViewCreated","type":"PlatformViewCreatedCallback?","desc":"Callback to invoke after the platform view has been created."},{"name":"creationParams","type":"Object?","desc":"Passed as the 2nd argument (i.e. `params`) of the registered view factory."},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":213,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to HtmlElementView","desc":["【child】 : Child widget 【child】","【viewType】 : Unique identifier for the HTML element 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_zh-CN.json deleted file mode 100644 index 295b808d8..000000000 --- a/modules/widget_system/widgets/doc/widgets/HtmlElementView/HtmlElementView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"HtmlElementView","path":"/src/widgets/platform_view.dart","parents":["StatelessWidget","Widget"],"desc":"在 Flutter web 的小部件层次结构中嵌入 HTML 元素。","fields":[{"name":"viewType","type":"String","required":true,"desc":"此小部件要嵌入的 HTML 视图类型的唯一标识符。"},{"name":"onPlatformViewCreated","type":"PlatformViewCreatedCallback?","desc":"创建平台视图后调用的回调。"},{"name":"creationParams","type":"Object?","desc":"作为注册视图工厂的第二个参数(即 `params`)传递。"},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":213,"localName":"html 元素视图","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"HtmlElementView 介绍","desc":["【child】 : 子组件 【child】","【viewType】 : html元素唯一表识 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Icon/Icon_en-US.json b/modules/widget_system/widgets/doc/widgets/Icon/Icon_en-US.json deleted file mode 100644 index 948314ac5..000000000 --- a/modules/widget_system/widgets/doc/widgets/Icon/Icon_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Icon","path":"/src/widgets/icon.dart","parents":["StatelessWidget","Widget"],"desc":" A graphical icon widget drawn with a glyph from a font described in an [IconData] such as material's predefined [IconData]s in [Icons].","fields":[{"name":"icon","type":"IconData?","desc":"The icon to display. The available icons are described in [Icons]."},{"name":"size","type":"double?","desc":"The size of the icon in logical pixels."},{"name":"fill","type":"double?","desc":"The fill for drawing the icon."},{"name":"weight","type":"double?","desc":"The stroke weight for drawing the icon."},{"name":"grade","type":"double?","desc":"The grade (granular stroke weight) for drawing the icon."},{"name":"opticalSize","type":"double?","desc":"The optical size for drawing the icon."},{"name":"color","type":"Color?","desc":"The color to use when drawing the icon."},{"name":"shadows","type":"List?","desc":"A list of [Shadow]s that will be painted underneath the icon."},{"name":"semanticLabel","type":"String?","desc":"Semantic label for the icon."},{"name":"textDirection","type":"TextDirection?","desc":"The text direction to use for rendering the icon."},{"name":"applyTextScaling","type":"bool?","desc":"Whether to scale the size of this widget using the ambient [MediaQuery]'s [TextScaler]."},{"name":"blendMode","type":"BlendMode?","desc":"The [BlendMode] to apply to the foreground of the icon."}],"id":6,"lever":2,"family":0,"linkIds":[7,30,125],"nodes":[{"file":"node1_base.dart","name":"Used to display an icon","desc":["【Input】 : Icon data 【IconData】","【size】 : Size 【double】","【color】: Color 【Color】"]},{"file":"node2_diy.dart","name":"Use custom icons","desc":["You can download icon fonts from the iconfont website for use"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Icon/Icon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Icon/Icon_zh-CN.json deleted file mode 100644 index 6c434b787..000000000 --- a/modules/widget_system/widgets/doc/widgets/Icon/Icon_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Icon","path":"/src/widgets/icon.dart","parents":["StatelessWidget","Widget"],"desc":"使用 [IconData] 中描述的字体字形绘制的图形图标小部件,例如 material 的 [Icons] 中预定义的 [IconData]。","fields":[{"name":"icon","type":"IconData?","desc":"要显示的图标。可用图标在 [Icons] 中描述。"},{"name":"size","type":"double?","desc":"图标的逻辑像素大小。"},{"name":"fill","type":"double?","desc":"绘制图标的填充。"},{"name":"weight","type":"double?","desc":"绘制图标的笔画粗细。"},{"name":"grade","type":"double?","desc":"绘制图标的等级(细粒度笔画粗细)。"},{"name":"opticalSize","type":"double?","desc":"绘制图标的光学大小。"},{"name":"color","type":"Color?","desc":"绘制图标时使用的颜色。"},{"name":"shadows","type":"List?","desc":"将在图标下方绘制的 [Shadow] 列表。"},{"name":"semanticLabel","type":"String?","desc":"图标的语义标签。"},{"name":"textDirection","type":"TextDirection?","desc":"用于渲染图标的文本方向。"},{"name":"applyTextScaling","type":"bool?","desc":"是否使用环境 [MediaQuery] 的 [TextScaler] 缩放此小部件的大小。"},{"name":"blendMode","type":"BlendMode?","desc":"应用于图标前景的 [BlendMode]。"}],"id":6,"localName":"图标组件","lever":2,"family":0,"linkIds":[7,30,125],"nodes":[{"file":"node1_base.dart","name":"用于显示一个图标","desc":["【入参】 :图标数据 【IconData】","【size】 : 大小 【double】","【color】: 颜色 【Color】"]},{"file":"node2_diy.dart","name":"使用自定义图标","desc":["可在iconfont网站中下载图标字体进行使用"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_en-US.json b/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_en-US.json deleted file mode 100644 index 41b89881c..000000000 --- a/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IconButton","path":"/src/material/icon_button.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design icon button.","fields":[{"name":"iconSize","type":"double?","desc":"The size of the icon inside the button."},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the icon button's layout will be."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The padding around the button's icon. The entire padded icon will react to input gestures."},{"name":"alignment","type":"AlignmentGeometry?","desc":"Defines how the icon is positioned within the IconButton."},{"name":"splashRadius","type":"double?","desc":"The splash radius."},{"name":"icon","type":"Widget","required":true,"desc":"The icon to display inside the button."},{"name":"focusColor","type":"Color?","desc":"The color for the button when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"The color for the button when a pointer is hovering over it."},{"name":"color","type":"Color?","desc":"The color to use for the icon inside the button, if the icon is enabled. Defaults to leaving this up to the [icon] widget."},{"name":"splashColor","type":"Color?","desc":"The primary color of the button when the button is in the down (pressed) state. The splash is represented as a circular overlay that appears above the [highlightColor] overlay. The splash overlay has a center point that matches the hit point of the user touch event. The splash overlay will expand to fill the button area if the touch is held for long enough time. If the splash color has transparency then the highlight and button color will show through."},{"name":"highlightColor","type":"Color?","desc":"The secondary color of the button when the button is in the down (pressed) state. The highlight color is represented as a solid color that is overlaid over the button color (if any). If the highlight color has transparency, the button color will show through. The highlight fades in quickly as the button is held down."},{"name":"disabledColor","type":"Color?","desc":"The color to use for the icon inside the button, if the icon is disabled. Defaults to the [ThemeData.disabledColor] of the current [Theme]."},{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when the button is tapped or otherwise activated."},{"name":"onHover","type":"ValueChanged?","desc":"The callback that is called when the button is hovered."},{"name":"onLongPress","type":"VoidCallback?","desc":"The callback that is called when the button is long-pressed."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tooltip","type":"String?","desc":"Text that describes the action that will occur when the button is pressed."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"constraints","type":"BoxConstraints?","desc":"Optional size constraints for the button."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"isSelected","type":"bool?","desc":"The optional selection state of the icon button."},{"name":"selectedIcon","type":"Widget?","desc":"The icon to display inside the button when [isSelected] is true. This property can be null. The original [icon] will be used for both selected and unselected status if it is null."}],"id":30,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IconButton Properties","desc":["【icon】: Icon component 【Widget】","【tooltip】: Long press tooltip text 【String】","【highlightColor】: Long press highlight color 【Color】","【splashColor】: Ripple color 【Color】","【onPressed】: Click event 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_zh-CN.json deleted file mode 100644 index 5965c23d5..000000000 --- a/modules/widget_system/widgets/doc/widgets/IconButton/IconButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IconButton","path":"/src/material/icon_button.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 图标按钮。","fields":[{"name":"iconSize","type":"double?","desc":"按钮内图标的大小。"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义图标按钮布局的紧凑程度。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"按钮图标周围的内边距。整个带内边距的图标将对输入手势做出反应。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"定义图标在 IconButton 内的定位方式。"},{"name":"splashRadius","type":"double?","desc":"飞溅半径。"},{"name":"icon","type":"Widget","required":true,"desc":"在按钮内显示的图标。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时的颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在按钮上时的颜色。"},{"name":"color","type":"Color?","desc":"如果图标启用,用于按钮内图标的颜色。默认情况下将此留给 [icon] 小部件。"},{"name":"splashColor","type":"Color?","desc":"按钮处于按下状态时的主要颜色。飞溅表示为出现在 [highlightColor] 覆盖层上方的圆形覆盖层。飞溅覆盖层的中心点与用户触摸事件的命中点匹配。如果触摸保持足够长的时间,飞溅覆盖层将扩展以填充按钮区域。如果飞溅颜色具有透明度,则高亮和按钮颜色将透过。"},{"name":"highlightColor","type":"Color?","desc":"按钮处于按下状态时的次要颜色。高亮颜色表示为覆盖在按钮颜色(如果有)上的纯色。如果高亮颜色具有透明度,按钮颜色将透过。高亮在按钮被按住时快速淡入。"},{"name":"disabledColor","type":"Color?","desc":"如果图标禁用,用于按钮内图标的颜色。默认为当前 [Theme] 的 [ThemeData.disabledColor]。"},{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用的回调。"},{"name":"onHover","type":"ValueChanged?","desc":"悬停按钮时调用的回调。"},{"name":"onLongPress","type":"VoidCallback?","desc":"长按按钮时调用的回调。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tooltip","type":"String?","desc":"描述按下按钮时将发生的操作的文本。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"constraints","type":"BoxConstraints?","desc":"按钮的可选大小约束。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"isSelected","type":"bool?","desc":"图标按钮的可选选择状态。"},{"name":"selectedIcon","type":"Widget?","desc":"当 [isSelected] 为 true 时在按钮内显示的图标。此属性可以为 null。如果为 null,原始 [icon] 将用于选定和未选定状态。"}],"id":30,"localName":"图标按钮","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IconButton属性","desc":["【icon】: 图标组件 【Widget】","【tooltip】: 长按提示文字 【String】","【highlightColor】: 长按高亮色 【Color】","【splashColor】: 水波纹色 【Color】","【onPressed】: 点击事件 【Function】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_en-US.json deleted file mode 100644 index 8d8f266b5..000000000 --- a/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IconButtonTheme","path":"/src/material/icon_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [IconButton] descendants.","fields":[{"name":"data","type":"IconButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":427,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_zh-CN.json deleted file mode 100644 index 7908c0769..000000000 --- a/modules/widget_system/widgets/doc/widgets/IconButtonTheme/IconButtonTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IconButtonTheme","path":"/src/material/icon_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [IconButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"IconButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":427,"localName":"IconButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_en-US.json deleted file mode 100644 index 38fb9fadc..000000000 --- a/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IconTheme","path":"/src/widgets/icon_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Controls the default properties of icons in a widget subtree.","fields":[{"name":"data","type":"IconThemeData","required":true,"desc":"The set of properties to use for icons in this subtree."}],"id":325,"lever":3,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IconTheme Usage","desc":["You can obtain the icon theme data through IconTheme.of, or set the default style for the icon components of IconTheme【descendants】, including color, opacity, and size."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_zh-CN.json deleted file mode 100644 index 00a6357d5..000000000 --- a/modules/widget_system/widgets/doc/widgets/IconTheme/IconTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IconTheme","path":"/src/widgets/icon_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"控制小部件子树中图标的默认属性。","fields":[{"name":"data","type":"IconThemeData","required":true,"desc":"用于此子树中图标的属性集。"}],"id":325,"localName":"图标样式","lever":3,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IconTheme使用","desc":["可以通过IconTheme.of获取图标主题数据,也可以为IconTheme【后代】的图标组件设置默认样式,包括颜色、透明度、尺寸。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_en-US.json b/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_en-US.json deleted file mode 100644 index da136a135..000000000 --- a/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IgnoreBaseline","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that causes the parent to ignore the [child] for the purposes of baseline alignment.","fields":[],"id":428,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_zh-CN.json deleted file mode 100644 index 89a27069b..000000000 --- a/modules/widget_system/widgets/doc/widgets/IgnoreBaseline/IgnoreBaseline_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IgnoreBaseline","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"导致父级为了基线对齐目的而忽略 [child] 的小部件。","fields":[],"id":428,"localName":"IgnoreBaseline","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_en-US.json b/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_en-US.json deleted file mode 100644 index 0a3409d3b..000000000 --- a/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IgnorePointer","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that is invisible during hit testing.","fields":[{"name":"ignoring","type":"bool","required":true,"desc":"Whether this widget is ignored during hit testing."},{"name":"ignoringSemantics","type":"bool?","desc":"Whether the semantics of this widget is ignored when compiling the semantics subtree."}],"id":292,"lever":4,"family":2,"linkIds":[295,146,149,150],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of IgnorePointer","desc":["【child】 : Child component 【Widget】","【ignoring】 : Whether to ignore events 【bool】","As shown below, when the Switch is selected, ignoring is true, and the button event will be locked and cannot be clicked."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_zh-CN.json deleted file mode 100644 index 80a881384..000000000 --- a/modules/widget_system/widgets/doc/widgets/IgnorePointer/IgnorePointer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IgnorePointer","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在命中测试期间不可见的小部件。","fields":[{"name":"ignoring","type":"bool","required":true,"desc":"此小部件在命中测试期间是否被忽略。"},{"name":"ignoringSemantics","type":"bool?","desc":"编译语义子树时是否忽略此小部件的语义。"}],"id":292,"localName":"忽视点击","lever":4,"family":2,"linkIds":[295,146,149,150],"nodes":[{"file":"node1_base.dart","name":"IgnorePointer基本使用","desc":["【child】 : 孩子组件 【Widget】","【ignoring】 : 是否忽视事件 【bool】","如下,Switch选中时ignoring为true,按钮事件将被锁定,无法点击。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Image/Image_en-US.json b/modules/widget_system/widgets/doc/widgets/Image/Image_en-US.json deleted file mode 100644 index 6c5a409ad..000000000 --- a/modules/widget_system/widgets/doc/widgets/Image/Image_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Image","path":"/src/widgets/image.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that displays an image.","fields":[{"name":"image","type":"ImageProvider","required":true,"desc":"The image to display."},{"name":"frameBuilder","type":"ImageFrameBuilder?","desc":"A builder function responsible for creating the widget that represents this image."},{"name":"loadingBuilder","type":"ImageLoadingBuilder?","desc":"A builder that specifies the widget to display to the user while an image is still loading."},{"name":"errorBuilder","type":"ImageErrorWidgetBuilder?","desc":"A builder function that is called if an error occurs during image loading."},{"name":"width","type":"double?","desc":"If non-null, require the image to have this width (in logical pixels)."},{"name":"height","type":"double?","desc":"If non-null, require the image to have this height (in logical pixels)."},{"name":"color","type":"Color?","desc":"If non-null, this color is blended with each image pixel using [colorBlendMode]."},{"name":"opacity","type":"Animation?","desc":"If non-null, the value from the [Animation] is multiplied with the opacity of each image pixel before painting onto the canvas."},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"The rendering quality of the image."},{"name":"colorBlendMode","type":"BlendMode?","desc":"Used to combine [color] with this image."},{"name":"fit","type":"BoxFit?","desc":"How to inscribe the image into the space allocated during layout."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the image within its bounds."},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"How to paint any portions of the layout bounds not covered by the image."},{"name":"centerSlice","type":"Rect?","desc":"The center slice for a nine-patch image."},{"name":"matchTextDirection","type":"bool","required":true,"desc":"Whether to paint the image in the direction of the [TextDirection]."},{"name":"gaplessPlayback","type":"bool","required":true,"desc":"Whether to continue showing the old image (true), or briefly show nothing (false), when the image provider changes. The default value is false."},{"name":"semanticLabel","type":"String?","desc":"A Semantic description of the image."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"Whether to exclude this image from semantics."},{"name":"isAntiAlias","type":"bool","required":true,"desc":"Whether to paint the image with anti-aliasing."}],"id":38,"lever":5,"family":1,"linkIds":[8,87],"nodes":[{"file":"node1_base.dart","name":"Load images from resource files and the network","desc":["Image.asset loads resource images,"]},{"file":"node2_fit.dart","name":"Image adaptation mode","desc":["【fit】 : Adaptation mode*7 【BoxFit】,"]},{"file":"node3_alignment.dart","name":"Image alignment mode","desc":["【alignment】 : Color 【AlignmentGeometry】"," Common nine static constants of the Alignment class, but custom positions are also possible"]},{"file":"node4_colorBlendMode.dart","name":"Image color and blending mode","desc":["【color】 : Color 【Color】","【colorBlendMode】: Blending mode*29 【BlendMode】"]},{"file":"node5_repeat.dart","name":"Image repeat mode","desc":["【repeat】 : Repeat mode*4 【ImageRepeat】"]},{"file":"node6_centerSlice.dart","name":"Image partial zoom implementation","desc":["【centerSlice】 : Reserved area 【Rect】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Image/Image_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Image/Image_zh-CN.json deleted file mode 100644 index a0bcfb89e..000000000 --- a/modules/widget_system/widgets/doc/widgets/Image/Image_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Image","path":"/src/widgets/image.dart","parents":["StatefulWidget","Widget"],"desc":"显示图像的小部件。","fields":[{"name":"image","type":"ImageProvider","required":true,"desc":"要显示的图像。"},{"name":"frameBuilder","type":"ImageFrameBuilder?","desc":"负责创建表示此图像的小部件的构建器函数。"},{"name":"loadingBuilder","type":"ImageLoadingBuilder?","desc":"指定在图像仍在加载时向用户显示的小部件的构建器。"},{"name":"errorBuilder","type":"ImageErrorWidgetBuilder?","desc":"如果在图像加载期间发生错误,则调用的构建器函数。"},{"name":"width","type":"double?","desc":"如果非空,要求图像具有此宽度(以逻辑像素为单位)。"},{"name":"height","type":"double?","desc":"如果非空,要求图像具有此高度(以逻辑像素为单位)。"},{"name":"color","type":"Color?","desc":"如果非空,此颜色使用 [colorBlendMode] 与每个图像像素混合。"},{"name":"opacity","type":"Animation?","desc":"如果非空,[Animation] 的值在绘制到画布之前与每个图像像素的不透明度相乘。"},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"图像的渲染质量。"},{"name":"colorBlendMode","type":"BlendMode?","desc":"用于将 [color] 与此图像组合。"},{"name":"fit","type":"BoxFit?","desc":"如何在布局期间分配的空间中刻画图像。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在其边界内对齐图像。"},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"如何绘制图像未覆盖的布局边界的任何部分。"},{"name":"centerSlice","type":"Rect?","desc":"九宫格图像的中心切片。"},{"name":"matchTextDirection","type":"bool","required":true,"desc":"是否在 [TextDirection] 的方向上绘制图像。"},{"name":"gaplessPlayback","type":"bool","required":true,"desc":"当图像提供程序更改时,是否继续显示旧图像(true)还是短暂显示无内容(false)。默认值为 false。"},{"name":"semanticLabel","type":"String?","desc":"图像的语义描述。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"是否从语义中排除此图像。"},{"name":"isAntiAlias","type":"bool","required":true,"desc":"是否使用抗锯齿绘制图像。"}],"id":38,"localName":"图片组件","lever":5,"family":1,"linkIds":[8,87],"nodes":[{"file":"node1_base.dart","name":"可从资源文件和网络加载图片","desc":["Image.asset加载资源图片,"]},{"file":"node2_fit.dart","name":"图片的适应模式","desc":["【fit】 : 适应模式*7 【BoxFit】,"]},{"file":"node3_alignment.dart","name":"图片对齐模式","desc":["【alignment】 : 颜色 【AlignmentGeometry】"," 常用Alignment类的九个静态常量,但也可定制位置"]},{"file":"node4_colorBlendMode.dart","name":"图片颜色及混合模式","desc":["【color】 : 颜色 【Color】","【colorBlendMode】: 混合模式*29 【BlendMode】"]},{"file":"node5_repeat.dart","name":"图片重复模式","desc":["【repeat】 : 重复模式*4 【ImageRepeat】"]},{"file":"node6_centerSlice.dart","name":"图片实现局部放大","desc":["【centerSlice】 : 保留的区域 【Rect】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_en-US.json b/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_en-US.json deleted file mode 100644 index 5523003e6..000000000 --- a/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ImageFiltered","path":"/src/widgets/image_filter.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Applies an [ImageFilter] to its child.","fields":[{"name":"imageFilter","type":"ImageFilter","required":true,"desc":"The image filter to apply to the child of this widget."},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not to apply the image filter operation to the child of this widget."}],"id":357,"lever":4,"family":2,"linkIds":[278,88],"nodes":[{"file":"node1_blur.dart","name":"ImageFilter Gaussian Blur","desc":["【imageFilter】 : Image filter 【ImageFilter】","【child】 : Child component 【Widget】"]},{"file":"node2_color.dart","name":"ImageFilter Color Effect","desc":["Achieve color filter through the ColorFilter object."]},{"file":"node3_matrix.dart","name":"ImageFilter Transformation Effect","desc":["Perform matrix transformation through the ImageFilter.matrix constructor, but it is relatively weak."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_zh-CN.json deleted file mode 100644 index c89fcf0b5..000000000 --- a/modules/widget_system/widgets/doc/widgets/ImageFiltered/ImageFiltered_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ImageFiltered","path":"/src/widgets/image_filter.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对其子项应用 [ImageFilter]。","fields":[{"name":"imageFilter","type":"ImageFilter","required":true,"desc":"应用于此小部件子项的图像过滤器。"},{"name":"enabled","type":"bool","required":true,"desc":"是否对此小部件的子项应用图像过滤器操作。"}],"id":357,"localName":"图像滤镜","lever":4,"family":2,"linkIds":[278,88],"nodes":[{"file":"node1_blur.dart","name":"ImageFilter 高斯模糊","desc":["【imageFilter】 : 图像滤镜 【ImageFilter】","【child】 : 子组件 【Widget】"]},{"file":"node2_color.dart","name":"ImageFilter 滤色效果","desc":["通过 ColorFilter 对象实现颜色滤镜。"]},{"file":"node3_matrix.dart","name":"ImageFilter 变换效果","desc":["通过 ImageFilter.matrix 构造,进行矩阵变换,但比较鸡肋。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_en-US.json b/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_en-US.json deleted file mode 100644 index b4cc0da2b..000000000 --- a/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ImageIcon","path":"/src/widgets/image_icon.dart","parents":["StatelessWidget","Widget"],"desc":" An icon that comes from an [ImageProvider], e.g. an [AssetImage].","fields":[{"name":"image","type":"ImageProvider?","desc":"The image to display as the icon."},{"name":"size","type":"double?","desc":"The size of the icon in logical pixels."},{"name":"color","type":"Color?","desc":"The color to use when drawing the icon."},{"name":"semanticLabel","type":"String?","desc":"Semantic label for the icon."}],"id":7,"lever":1,"family":0,"linkIds":[6,30,125],"nodes":[{"file":"node1_base.dart","name":"Used to display a solid color image","desc":["【Parameter】: Image resource 【ImageProvider】","【size】: Size 【double】","【color】: Badge color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_zh-CN.json deleted file mode 100644 index 3ef862676..000000000 --- a/modules/widget_system/widgets/doc/widgets/ImageIcon/ImageIcon_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ImageIcon","path":"/src/widgets/image_icon.dart","parents":["StatelessWidget","Widget"],"desc":"来自 [ImageProvider] 的图标,例如 [AssetImage]。","fields":[{"name":"image","type":"ImageProvider?","desc":"要显示为图标的图像。"},{"name":"size","type":"double?","desc":"图标的逻辑像素大小。"},{"name":"color","type":"Color?","desc":"绘制图标时使用的颜色。"},{"name":"semanticLabel","type":"String?","desc":"图标的语义标签。"}],"id":7,"localName":"容器","lever":1,"family":0,"linkIds":[6,30,125],"nodes":[{"file":"node1_base.dart","name":"用于显示一个纯色图片","desc":["【入参】 : 图片资源 【ImageProvider】","【size】 : 大小 【double】","【color】: 角标颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_en-US.json b/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_en-US.json deleted file mode 100644 index 49e3e588e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ImgElementPlatformView","path":"/src/widgets/_web_image_web.dart","parents":["StatelessWidget","Widget"],"desc":" Displays an `` element with `src` set to [src].","fields":[{"name":"src","type":"String?","desc":"The `src` URL for the `` tag."}],"id":429,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_zh-CN.json deleted file mode 100644 index ee9ed504a..000000000 --- a/modules/widget_system/widgets/doc/widgets/ImgElementPlatformView/ImgElementPlatformView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ImgElementPlatformView","path":"/src/widgets/_web_image_web.dart","parents":["StatelessWidget","Widget"],"desc":"显示 `src` 设置为 [src] 的 `` 元素。","fields":[{"name":"src","type":"String?","desc":"`` 标签的 `src` URL。"}],"id":429,"localName":"ImgElementPlatformView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_en-US.json deleted file mode 100644 index 8a3c8b6e0..000000000 --- a/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ImplicitlyAnimatedWidget","path":"/src/widgets/implicit_animations.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" An abstract class for building widgets that animate changes to their properties.","fields":[{"name":"curve","type":"Curve","required":true,"desc":"The curve to apply when animating the parameters of this container."},{"name":"duration","type":"Duration","required":true,"desc":"The duration over which to animate the parameters of this container."},{"name":"onEnd","type":"VoidCallback?","desc":"Called every time an animation completes."}],"id":430,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_zh-CN.json deleted file mode 100644 index dc627ee16..000000000 --- a/modules/widget_system/widgets/doc/widgets/ImplicitlyAnimatedWidget/ImplicitlyAnimatedWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ImplicitlyAnimatedWidget","path":"/src/widgets/implicit_animations.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"用于构建对其属性更改进行动画处理的小部件的抽象类。","fields":[{"name":"curve","type":"Curve","required":true,"desc":"对此容器的参数进行动画处理时应用的曲线。"},{"name":"duration","type":"Duration","required":true,"desc":"对此容器的参数进行动画处理的持续时间。"},{"name":"onEnd","type":"VoidCallback?","desc":"每次动画完成时调用。"}],"id":430,"localName":"ImplicitlyAnimatedWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_en-US.json b/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_en-US.json deleted file mode 100644 index 6ec67f65c..000000000 --- a/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IndexedSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that annotates the child semantics with an index.","fields":[{"name":"index","type":"int","required":true,"desc":"The index used to annotate the first child semantics node."}],"id":431,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_zh-CN.json deleted file mode 100644 index 56021e98b..000000000 --- a/modules/widget_system/widgets/doc/widgets/IndexedSemantics/IndexedSemantics_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IndexedSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使用索引注释子语义的小部件。","fields":[{"name":"index","type":"int","required":true,"desc":"用于注释第一个子语义节点的索引。"}],"id":431,"localName":"IndexedSemantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_en-US.json b/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_en-US.json deleted file mode 100644 index 4def35435..000000000 --- a/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IndexedStack","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":" A [Stack] that shows a single child from a list of children.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the non-positioned and partially-positioned children in the stack."},{"name":"textDirection","type":"TextDirection?","desc":"The text direction with which to resolve [alignment]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"sizing","type":"StackFit","required":true,"desc":"How to size the non-positioned children in the stack."},{"name":"index","type":"int?","desc":"The index of the child to show."},{"name":"children","type":"List","required":true,"desc":"The child widgets of the stack."}],"id":161,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of IndexedStack","desc":["【children】: List of child components 【List】","【alignment】: Alignment 【AlignmentGeometry】","【index】: Currently displayed component 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_zh-CN.json deleted file mode 100644 index e2e89905f..000000000 --- a/modules/widget_system/widgets/doc/widgets/IndexedStack/IndexedStack_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IndexedStack","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":"从子项列表中显示单个子项的 [Stack]。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在堆栈中对齐非定位和部分定位的子项。"},{"name":"textDirection","type":"TextDirection?","desc":"用于解析 [alignment] 的文本方向。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"sizing","type":"StackFit","required":true,"desc":"如何调整堆栈中非定位子项的大小。"},{"name":"index","type":"int?","desc":"要显示的子项的索引。"},{"name":"children","type":"List","required":true,"desc":"堆栈的子小部件。"}],"id":161,"localName":"索引堆叠","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IndexedStack基本使用","desc":["【children】 : 子组件列表 【Lis】","【alignment】 : 对齐方式 【AlignmentGeometry】","【index】 : 当前显示组件 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_en-US.json deleted file mode 100644 index 665d0fdb1..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedCupertinoTheme","path":"/src/cupertino/theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Provides a [CupertinoTheme] to all descendents.","fields":[{"name":"theme","type":"CupertinoTheme","required":true,"desc":"The [CupertinoTheme] that is provided to widgets lower in the tree."}],"id":432,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_zh-CN.json deleted file mode 100644 index 078ab0432..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedCupertinoTheme/InheritedCupertinoTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedCupertinoTheme","path":"/src/cupertino/theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为所有后代提供 [CupertinoTheme]。","fields":[{"name":"theme","type":"CupertinoTheme","required":true,"desc":"提供给树中较低小部件的 [CupertinoTheme]。"}],"id":432,"localName":"InheritedCupertinoTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_en-US.json b/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_en-US.json deleted file mode 100644 index 54b995787..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedModel","path":"/src/widgets/inherited_model.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An [InheritedWidget] that's intended to be used as the base class for models whose dependents may only depend on one part or \"aspect\" of the overall model.","fields":[],"id":336,"lever":4,"family":5,"linkIds":[346],"nodes":[{"file":"node1.dart","name":"InheritedModel Usage","desc":["【child】: child component 【Widget】","Below is a custom InheritedModel that implements subtree sharing of data; and defines two aspects, color and value, to control the granularity of dependency notifications."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_zh-CN.json deleted file mode 100644 index 5aa33fdd5..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedModel/InheritedModel_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedModel","path":"/src/widgets/inherited_model.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"旨在用作模型基类的 [InheritedWidget],其依赖项可能仅依赖于整个模型的一部分或\"方面\"。","fields":[],"id":336,"localName":"共享模型","lever":4,"family":5,"linkIds":[346],"nodes":[{"file":"node1.dart","name":"InheritedModel 使用","desc":["【child】 : 子组件 【Widget】","下面是一个自定义 InheritedModel,实现数据的子树共享;并且定义颜色和数值两个方面,控制依赖通知的粒度。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_en-US.json b/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_en-US.json deleted file mode 100644 index 0bac7054d..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedNotifier","path":"/src/widgets/inherited_notifier.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget for a [Listenable] [notifier], which updates its dependencies when the [notifier] is triggered.","fields":[{"name":"notifier","type":"T?","desc":"The [Listenable] object to which to listen."}],"id":433,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_zh-CN.json deleted file mode 100644 index f5a2737c8..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedNotifier/InheritedNotifier_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedNotifier","path":"/src/widgets/inherited_notifier.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"[Listenable] [notifier] 的继承小部件,当 [notifier] 被触发时更新其依赖项。","fields":[{"name":"notifier","type":"T?","desc":"要监听的 [Listenable] 对象。"}],"id":433,"localName":"InheritedNotifier","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_en-US.json deleted file mode 100644 index 72f3b22f8..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedTheme","path":"/src/widgets/inherited_theme.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An [InheritedWidget] that defines visual properties like colors and text styles, which the [child]'s subtree depends on.","fields":[],"id":345,"lever":1,"family":5,"linkIds":[324,326,328,329],"nodes":[{"file":"node1_base.dart","name":"Introduction to InheritedTheme","desc":["InheritedTheme.capture can capture the upper theme, obtain the CapturedThemes object, and use the captured theme across routes through the wrap method of this object."," ","","class InheritedThemeDemo extends StatelessWidget {"," const InheritedThemeDemo({Key? key) : super(key: key);","",""," @override"," Widget build(BuildContext context) {"," return const DefaultTextStyle("," style: TextStyle(fontSize: 24, color: Colors.blue),"," child: TestBody(),"," );"," ","","","class TestBody extends StatelessWidget {"," const TestBody({Key? key) : super(key: key);",""," @override"," Widget build(BuildContext context) {",""," return GestureDetector("," onTap: () => _toNextPage(context),"," child: Container("," height: 60,"," margin: const EdgeInsets.only(left: 40,right: 40),"," alignment: Alignment.center,"," color: Theme.of(context).primaryColor.withOpacity(0.1),"," child: const Text('InheritedTheme')));"," ",""," void _toNextPage(BuildContext context) {"," final NavigatorState navigator = Navigator.of(context);"," final CapturedThemes themes ="," InheritedTheme.capture(from: context, to: navigator.context);"," "," Navigator.of(context).push("," MaterialPageRoute("," builder: (BuildContext _) {"," return themes.wrap(Container("," alignment: Alignment.center,"," color: Colors.white,"," child: Text('Flutter Unit'),"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_zh-CN.json deleted file mode 100644 index 757bccb9a..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedTheme/InheritedTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedTheme","path":"/src/widgets/inherited_theme.dart","abstract":true,"parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"定义视觉属性(如颜色和文本样式)的 [InheritedWidget],[child] 的子树依赖于这些属性。","fields":[],"id":345,"localName":"传承主题","lever":1,"family":5,"linkIds":[324,326,328,329],"nodes":[{"file":"node1_base.dart","name":"InheritedTheme 介绍","desc":["InheritedTheme.capture 可以抓取上层主题,获取 CapturedThemes 对象,通过该对象 wrap 方法可以跨路由使用抓到的主题。"," ","","class InheritedThemeDemo extends StatelessWidget {"," const InheritedThemeDemo({Key? key) : super(key: key);","",""," @override"," Widget build(BuildContext context) {"," return const DefaultTextStyle("," style: TextStyle(fontSize: 24, color: Colors.blue),"," child: TestBody(),"," );"," ","","","class TestBody extends StatelessWidget {"," const TestBody({Key? key) : super(key: key);",""," @override"," Widget build(BuildContext context) {",""," return GestureDetector("," onTap: () => _toNextPage(context),"," child: Container("," height: 60,"," margin: const EdgeInsets.only(left: 40,right: 40),"," alignment: Alignment.center,"," color: Theme.of(context).primaryColor.withOpacity(0.1),"," child: const Text('InheritedTheme')));"," ",""," void _toNextPage(BuildContext context) {"," final NavigatorState navigator = Navigator.of(context);"," final CapturedThemes themes ="," InheritedTheme.capture(from: context, to: navigator.context);"," "," Navigator.of(context).push("," MaterialPageRoute("," builder: (BuildContext _) {"," return themes.wrap(Container("," alignment: Alignment.center,"," color: Colors.white,"," child: Text('Flutter Unit'),"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_en-US.json deleted file mode 100644 index 6265073cf..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["ProxyWidget","Widget"],"desc":" Base class for widgets that efficiently propagate information down the tree.","fields":[],"id":346,"lever":4,"family":5,"linkIds":[167,319,328,324,331],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Column","desc":["【children】: Component list 【List】","【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】","【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】","【textBaseline】: Text baseline 【TextBaseline】","【verticalDirection】: Vertical direction 【VerticalDirection】","【mainAxisSize】: Main axis size 【MainAxisSize】"]},{"file":"node2_use.dart","name":"InheritedWidget Example","desc":["Below is an example of using the InheritedWidget component through a color counter project."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_zh-CN.json deleted file mode 100644 index 184e25f85..000000000 --- a/modules/widget_system/widgets/doc/widgets/InheritedWidget/InheritedWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InheritedWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["ProxyWidget","Widget"],"desc":"高效地向下传播信息的小部件的基类。","fields":[],"id":346,"localName":"传承组件","lever":4,"family":5,"linkIds":[167,319,328,324,331],"nodes":[{"file":"node1_base.dart","name":"Column基本使用","desc":["【children】 : 组件列表 【List】","【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】","【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】","【textBaseline】 : 文字基线 【TextBaseline】","【verticalDirection】 : 竖直方向 【VerticalDirection】","【mainAxisSize】 : 主轴尺寸 【MainAxisSize】"]},{"file":"node2_use.dart","name":"InheritedWidget 案例","desc":["下面是通过一个颜色计数器项目展示 InheritedWidget 组件的使用。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Ink/Ink_en-US.json b/modules/widget_system/widgets/doc/widgets/Ink/Ink_en-US.json deleted file mode 100644 index 5480dfe94..000000000 --- a/modules/widget_system/widgets/doc/widgets/Ink/Ink_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Ink","path":"/src/material/ink_decoration.dart","parents":["StatefulWidget","Widget"],"desc":" A convenience widget for drawing images and other decorations on [Material] widgets, so that [InkWell] and [InkResponse] splashes will render over them.","fields":[{"name":"child","type":"Widget?","desc":"The [child] contained by the container."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Empty space to inscribe inside the [decoration]. The [child], if any, is placed inside this padding."},{"name":"decoration","type":"Decoration?","desc":"The decoration to paint on the nearest ancestor [Material] widget."},{"name":"width","type":"double?","desc":"A width to apply to the [decoration] and the [child]. The width includes any [padding]."},{"name":"height","type":"double?","desc":"A height to apply to the [decoration] and the [child]. The height includes any [padding]."}],"id":152,"lever":3,"family":1,"linkIds":[149,150],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Ink","desc":["【child】: Child component 【Widget】","【padding】: Padding 【EdgeInsetsGeometry】","【decoration】: Decoration 【Decoration】","【width】: Width 【double】","【height】: Height 【double】","【color】: Color 【Color】"]},{"file":"node2_image.dart","name":"Ink.image Ripple with Image","desc":["The properties are consistent with the Image component, see the Image component for details"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Ink/Ink_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Ink/Ink_zh-CN.json deleted file mode 100644 index d40f285d9..000000000 --- a/modules/widget_system/widgets/doc/widgets/Ink/Ink_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Ink","path":"/src/material/ink_decoration.dart","parents":["StatefulWidget","Widget"],"desc":"在 [Material] 小部件上绘制图像和其他装饰的便利小部件,以便 [InkWell] 和 [InkResponse] 飞溅将在它们上方渲染。","fields":[{"name":"child","type":"Widget?","desc":"容器包含的 [child]。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在 [decoration] 内刻画的空白空间。[child](如果有)放置在此内边距内。"},{"name":"decoration","type":"Decoration?","desc":"在最近的祖先 [Material] 小部件上绘制的装饰。"},{"name":"width","type":"double?","desc":"应用于 [decoration] 和 [child] 的宽度。宽度包括任何 [padding]。"},{"name":"height","type":"double?","desc":"应用于 [decoration] 和 [child] 的高度。高度包括任何 [padding]。"}],"id":152,"localName":"水波","lever":3,"family":1,"linkIds":[149,150],"nodes":[{"file":"node1_base.dart","name":"Ink基本使用","desc":["【child】 : 子组件 【Widget】","【padding】 : 内边距 【EdgeInsetsGeometry】","【decoration】 : 装饰 【Decoration】","【width】 : 宽 【double】","【height】 : 高 【double】","【color】 : 颜色 【Color】"]},{"file":"node2_image.dart","name":"Ink.image图片水波纹","desc":["其中属性与Image组件一致,详见Image组件"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_en-US.json b/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_en-US.json deleted file mode 100644 index 48120abad..000000000 --- a/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InkResponse","path":"/src/material/ink_well.dart","parents":["StatelessWidget","Widget"],"desc":" An area of a [Material] that responds to touch. Has a configurable shape and can be configured to clip splashes that extend outside its bounds or not.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"onTap","type":"GestureTapCallback?","desc":"Called when the user taps this part of the material."},{"name":"onTapDown","type":"GestureTapDownCallback?","desc":"Called when the user taps down this part of the material."},{"name":"onTapUp","type":"GestureTapUpCallback?","desc":"Called when the user releases a tap that was started on this part of the material. [onTap] is called immediately after."},{"name":"onTapCancel","type":"GestureTapCallback?","desc":"Called when the user cancels a tap that was started on this part of the material."},{"name":"onDoubleTap","type":"GestureTapCallback?","desc":"Called when the user double taps this part of the material."},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"Called when the user long-presses on this part of the material."},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"Called when the user taps this part of the material with a secondary button."},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"Called when the user taps down on this part of the material with a secondary button."},{"name":"onSecondaryTapUp","type":"GestureTapUpCallback?","desc":"Called when the user releases a secondary button tap that was started on this part of the material. [onSecondaryTap] is called immediately after."},{"name":"onSecondaryTapCancel","type":"GestureTapCallback?","desc":"Called when the user cancels a secondary button tap that was started on this part of the material."},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"Called when this part of the material either becomes highlighted or stops being highlighted."},{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the ink response area."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"containedInkWell","type":"bool","required":true,"desc":"Whether this ink response should be clipped its bounds."},{"name":"highlightShape","type":"BoxShape","required":true,"desc":"The shape (e.g., circle, rectangle) to use for the highlight drawn around this part of the material when pressed, hovered over, or focused."},{"name":"radius","type":"double?","desc":"The radius of the ink splash."},{"name":"borderRadius","type":"BorderRadius?","desc":"The border radius of the containing rectangle. This is effective only if [highlightShape] is [BoxShape.rectangle]."},{"name":"customBorder","type":"ShapeBorder?","desc":"The custom clip border."},{"name":"focusColor","type":"Color?","desc":"The color of the ink response when the parent widget is focused. If this property is null then the focus color of the theme, [ThemeData.focusColor], will be used."},{"name":"hoverColor","type":"Color?","desc":"The color of the ink response when a pointer is hovering over it. If this property is null then the hover color of the theme, [ThemeData.hoverColor], will be used."},{"name":"highlightColor","type":"Color?","desc":"The highlight color of the ink response when pressed. If this property is null then the highlight color of the theme, [ThemeData.highlightColor], will be used."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"Defines the ink response focus, hover, and splash colors."},{"name":"splashColor","type":"Color?","desc":"The splash color of the ink response. If this property is null then the splash color of the theme, [ThemeData.splashColor], will be used."},{"name":"splashFactory","type":"InteractiveInkFeatureFactory?","desc":"Defines the appearance of the splash."},{"name":"enableFeedback","type":"bool","required":true,"desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"Whether to exclude the gestures introduced by this widget from the semantics tree."},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@template flutter.material.inkwell.onFocusChange} Handler called when the focus changes."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"canRequestFocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.canRequestFocus}"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@template flutter.material.inkwell.statesController} Represents the interactive \"state\" of this widget in terms of a set of [WidgetState]s, like [WidgetState.pressed] and [WidgetState.focused]."},{"name":"hoverDuration","type":"Duration?","desc":"The duration of the animation that animates the hover effect."}],"id":149,"lever":1,"family":1,"linkIds":[150,152],"nodes":[{"file":"node1_base.dart","name":"Basic Events of InkResponse","desc":["【child】 : Child component 【Widget】","【onTap】 : Click event 【Function()】","【onDoubleTap】 : Double-click event 【Function()】","【onTapCancel】 : Click cancel 【Function()】","【onLongPress】 : Long press event 【Function()】"]},{"file":"node2_color.dart","name":"Other Properties of InkResponse","desc":["【child】 : Child component 【Widget】","【onHighlightChanged】 : Highlight change callback 【Function(bool)】","【highlightColor】 : Highlight color 【Color】","【splashColor】 : Ripple color 【Color】","【radius】 : Ripple radius 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_zh-CN.json deleted file mode 100644 index f71d48980..000000000 --- a/modules/widget_system/widgets/doc/widgets/InkResponse/InkResponse_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InkResponse","path":"/src/material/ink_well.dart","parents":["StatelessWidget","Widget"],"desc":"响应触摸的 [Material] 区域。具有可配置的形状,可以配置为裁剪延伸到其边界之外的飞溅或不裁剪。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"onTap","type":"GestureTapCallback?","desc":"用户点击 material 的此部分时调用。"},{"name":"onTapDown","type":"GestureTapDownCallback?","desc":"用户点击 material 的此部分时调用。"},{"name":"onTapUp","type":"GestureTapUpCallback?","desc":"用户释放在 material 的此部分开始的点击时调用。[onTap] 立即在之后调用。"},{"name":"onTapCancel","type":"GestureTapCallback?","desc":"用户取消在 material 的此部分开始的点击时调用。"},{"name":"onDoubleTap","type":"GestureTapCallback?","desc":"用户双击 material 的此部分时调用。"},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"用户长按 material 的此部分时调用。"},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"用户用辅助按钮点击 material 的此部分时调用。"},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"用户用辅助按钮点击 material 的此部分时调用。"},{"name":"onSecondaryTapUp","type":"GestureTapUpCallback?","desc":"用户释放在 material 的此部分开始的辅助按钮点击时调用。[onSecondaryTap] 立即在之后调用。"},{"name":"onSecondaryTapCancel","type":"GestureTapCallback?","desc":"用户取消在 material 的此部分开始的辅助按钮点击时调用。"},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"当 material 的此部分变为高亮或停止高亮时调用。"},{"name":"onHover","type":"ValueChanged?","desc":"指针进入或退出墨水响应区域时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"containedInkWell","type":"bool","required":true,"desc":"此墨水响应是否应裁剪其边界。"},{"name":"highlightShape","type":"BoxShape","required":true,"desc":"按下、悬停或聚焦时在 material 的此部分周围绘制的高亮的形状(例如,圆形、矩形)。"},{"name":"radius","type":"double?","desc":"墨水飞溅的半径。"},{"name":"borderRadius","type":"BorderRadius?","desc":"包含矩形的边框半径。仅当 [highlightShape] 为 [BoxShape.rectangle] 时有效。"},{"name":"customBorder","type":"ShapeBorder?","desc":"自定义裁剪边框。"},{"name":"focusColor","type":"Color?","desc":"父小部件聚焦时墨水响应的颜色。如果此属性为 null,则将使用主题的焦点颜色 [ThemeData.focusColor]。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在其上时墨水响应的颜色。如果此属性为 null,则将使用主题的悬停颜色 [ThemeData.hoverColor]。"},{"name":"highlightColor","type":"Color?","desc":"按下时墨水响应的高亮颜色。如果此属性为 null,则将使用主题的高亮颜色 [ThemeData.highlightColor]。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"定义墨水响应焦点、悬停和飞溅颜色。"},{"name":"splashColor","type":"Color?","desc":"墨水响应的飞溅颜色。如果此属性为 null,则将使用主题的飞溅颜色 [ThemeData.splashColor]。"},{"name":"splashFactory","type":"InteractiveInkFeatureFactory?","desc":"定义飞溅的外观。"},{"name":"enableFeedback","type":"bool","required":true,"desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"是否从语义树中排除此小部件引入的手势。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@template flutter.material.inkwell.onFocusChange} 焦点更改时调用的处理程序。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"canRequestFocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.canRequestFocus}"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@template flutter.material.inkwell.statesController} 表示此小部件在一组 [WidgetState] 方面的交互"},{"name":"hoverDuration","type":"Duration?","desc":"悬停效果动画的持续时间。"}],"id":149,"localName":"水波纹响应","lever":1,"family":1,"linkIds":[150,152],"nodes":[{"file":"node1_base.dart","name":"InkResponse基本事件","desc":["【child】 : 子组件 【Widget】","【onTap】 : 点击事件 【Function()】","【onDoubleTap】 : 双击事件 【Function()】","【onTapCancel】 : 点击取消 【Function()】","【onLongPress】 : 长按事件 【Function()】"]},{"file":"node2_color.dart","name":"InkResponse其他属性","desc":["【child】 : 子组件 【Widget】","【onHighlightChanged】 : 高亮变化回调 【Function(bool)】","【highlightColor】 : 高亮色 【Color】","【splashColor】 : 水波纹色 【Color】","【radius】 : 水波半径 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_en-US.json b/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_en-US.json deleted file mode 100644 index d21dd3b42..000000000 --- a/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InkWell","path":"/src/material/ink_well.dart","parents":["InkResponse","StatelessWidget","Widget"],"desc":" A rectangular area of a [Material] that responds to touch.","fields":[],"id":150,"lever":4,"family":1,"linkIds":[149,152],"nodes":[{"file":"node1_base.dart","name":"InkWell Basic Events","desc":["【child】: Child component 【Widget】","【onTap】: Tap event 【Function()】","【onDoubleTap】: Double tap event 【Function()】","【onTapCancel】: Tap cancel 【Function()】","【onLongPress】: Long press event 【Function()】"]},{"file":"node2_color.dart","name":"InkWell Other Properties","desc":["【child】: Child component 【Widget】","【onHighlightChanged】: Highlight change callback 【Function(bool)】","【highlightColor】: Highlight color 【Color】","【splashColor】: Ripple color 【Color】","【radius】: Ripple radius 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_zh-CN.json deleted file mode 100644 index 3fdfbdd42..000000000 --- a/modules/widget_system/widgets/doc/widgets/InkWell/InkWell_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InkWell","path":"/src/material/ink_well.dart","parents":["InkResponse","StatelessWidget","Widget"],"desc":"响应触摸的 [Material] 矩形区域。","fields":[],"id":150,"localName":"水波纹","lever":4,"family":1,"linkIds":[149,152],"nodes":[{"file":"node1_base.dart","name":"InkWell基本事件","desc":["【child】 : 子组件 【Widget】","【onTap】 : 点击事件 【Function()】","【onDoubleTap】 : 双击事件 【Function()】","【onTapCancel】 : 点击取消 【Function()】","【onLongPress】 : 长按事件 【Function()】"]},{"file":"node2_color.dart","name":"InkWell其他属性","desc":["【child】 : 子组件 【Widget】","【onHighlightChanged】 : 高亮变化回调 【Function(bool)】","【highlightColor】 : 高亮色 【Color】","【splashColor】 : 水波纹色 【Color】","【radius】 : 水波半径 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_en-US.json b/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_en-US.json deleted file mode 100644 index 81c98c69c..000000000 --- a/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InputChip","path":"/src/material/input_chip.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design input chip.","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"selected","type":"bool","required":true},{"name":"isEnabled","type":"bool","required":true},{"name":"onSelected","type":"ValueChanged?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":14,"lever":4,"family":0,"linkIds":[11,12,13,15,153],"nodes":[{"file":"node1_base.dart","name":"Can accept click and delete events","desc":["【onPressed】: Click event 【Function()】","【onDeleted】: Delete event 【Function()】"]},{"file":"node2_select.dart","name":"Can accept select event","desc":["【selected】: Whether selected 【bool】","【onSelected】: Select event 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_zh-CN.json deleted file mode 100644 index d7ccd906d..000000000 --- a/modules/widget_system/widgets/doc/widgets/InputChip/InputChip_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InputChip","path":"/src/material/input_chip.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 输入芯片。","fields":[{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"selected","type":"bool","required":true},{"name":"isEnabled","type":"bool","required":true},{"name":"onSelected","type":"ValueChanged?"},{"name":"deleteIcon","type":"Widget?"},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"MaterialStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"iconTheme","type":"IconThemeData?"},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"}],"id":14,"localName":"综合小条","lever":4,"family":0,"linkIds":[11,12,13,15,153],"nodes":[{"file":"node1_base.dart","name":"可以接受点击、删除事件","desc":["【onPressed】: 点击事件 【Function()】","【onDeleted】: 删除事件 【Function()】"]},{"file":"node2_select.dart","name":"可以接受选中事件","desc":["【selected】: 是否选中 【bool】","【onSelected】: 选中事件 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_en-US.json b/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_en-US.json deleted file mode 100644 index 24707acf2..000000000 --- a/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InputDatePickerFormField","path":"/src/material/input_date_picker_form_field.dart","parents":["StatefulWidget","Widget"],"desc":" A [TextFormField] configured to accept and validate a date entered by a user.","fields":[{"name":"initialDate","type":"DateTime?","desc":"If provided, it will be used as the default value of the field."},{"name":"firstDate","type":"DateTime","required":true,"desc":"The earliest allowable [DateTime] that the user can input."},{"name":"lastDate","type":"DateTime","required":true,"desc":"The latest allowable [DateTime] that the user can input."},{"name":"onDateSubmitted","type":"ValueChanged?","desc":"An optional method to call when the user indicates they are done editing the text in the field. Will only be called if the input represents a valid [DateTime]."},{"name":"onDateSaved","type":"ValueChanged?","desc":"An optional method to call with the final date when the form is saved via [FormState.save]. Will only be called if the input represents a valid [DateTime]."},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"Function to provide full control over which [DateTime] can be selected."},{"name":"errorFormatText","type":"String?","desc":"The error text displayed if the entered date is not in the correct format."},{"name":"errorInvalidText","type":"String?","desc":"The error text displayed if the date is not valid."},{"name":"fieldHintText","type":"String?","desc":"The hint text displayed in the [TextField]."},{"name":"fieldLabelText","type":"String?","desc":"The label text displayed in the [TextField]."},{"name":"keyboardType","type":"TextInputType?","desc":"The keyboard type of the [TextField]."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"acceptEmptyDate","type":"bool","required":true,"desc":"Determines if an empty date would show [errorFormatText] or not."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":434,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_zh-CN.json deleted file mode 100644 index 6d3757e0d..000000000 --- a/modules/widget_system/widgets/doc/widgets/InputDatePickerFormField/InputDatePickerFormField_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InputDatePickerFormField","path":"/src/material/input_date_picker_form_field.dart","parents":["StatefulWidget","Widget"],"desc":"配置为接受和验证用户输入日期的 [TextFormField]。","fields":[{"name":"initialDate","type":"DateTime?","desc":"如果提供,将用作字段的默认值。"},{"name":"firstDate","type":"DateTime","required":true,"desc":"用户可以输入的最早允许的 [DateTime]。"},{"name":"lastDate","type":"DateTime","required":true,"desc":"用户可以输入的最晚允许的 [DateTime]。"},{"name":"onDateSubmitted","type":"ValueChanged?","desc":"当用户指示他们已完成编辑字段中的文本时调用的可选方法。仅当输入表示有效的 [DateTime] 时才会调用。"},{"name":"onDateSaved","type":"ValueChanged?","desc":"通过 [FormState.save] 保存表单时使用最终日期调用的可选方法。仅当输入表示有效的 [DateTime] 时才会调用。"},{"name":"selectableDayPredicate","type":"SelectableDayPredicate?","desc":"提供对可选择哪个 [DateTime] 的完全控制的函数。"},{"name":"errorFormatText","type":"String?","desc":"如果输入的日期格式不正确,显示的错误文本。"},{"name":"errorInvalidText","type":"String?","desc":"如果日期无效,显示的错误文本。"},{"name":"fieldHintText","type":"String?","desc":"在 [TextField] 中显示的提示文本。"},{"name":"fieldLabelText","type":"String?","desc":"在 [TextField] 中显示的标签文本。"},{"name":"keyboardType","type":"TextInputType?","desc":"[TextField] 的键盘类型。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"acceptEmptyDate","type":"bool","required":true,"desc":"确定空日期是否会显示 [errorFormatText]。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":434,"localName":"InputDatePickerFormField","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_en-US.json b/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_en-US.json deleted file mode 100644 index 9668cc598..000000000 --- a/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InputDecorator","path":"/src/material/input_decorator.dart","parents":["StatefulWidget","Widget"],"desc":" Defines the appearance of a Material Design text field.","fields":[{"name":"decoration","type":"InputDecoration","required":true,"desc":"The text and styles to use when decorating the child."},{"name":"baseStyle","type":"TextStyle?","desc":"The style on which to base the label, hint, counter, and error styles if the [decoration] does not provide explicit styles."},{"name":"textAlign","type":"TextAlign?","desc":"How the text in the decoration should be aligned horizontally."},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@template flutter.material.InputDecorator.textAlignVertical} How the text should be aligned vertically."},{"name":"isFocused","type":"bool","required":true,"desc":"Whether the input field has focus."},{"name":"isHovering","type":"bool","required":true,"desc":"Whether the input field is being hovered over by a mouse pointer."},{"name":"expands","type":"bool","required":true,"desc":"If true, the height of the input field will be as large as possible."},{"name":"isEmpty","type":"bool","required":true,"desc":"Whether the input field is empty."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":231,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of InputDecorator","desc":["【decoration】: Decoration object 【InputDecoration】","【textAlign】: Text alignment 【TextAlign】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_zh-CN.json deleted file mode 100644 index fee4e3c8d..000000000 --- a/modules/widget_system/widgets/doc/widgets/InputDecorator/InputDecorator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InputDecorator","path":"/src/material/input_decorator.dart","parents":["StatefulWidget","Widget"],"desc":"定义 Material Design 文本字段的外观。","fields":[{"name":"decoration","type":"InputDecoration","required":true,"desc":"装饰子项时使用的文本和样式。"},{"name":"baseStyle","type":"TextStyle?","desc":"如果 [decoration] 不提供显式样式,则作为标签、提示、计数器和错误样式基础的样式。"},{"name":"textAlign","type":"TextAlign?","desc":"装饰中的文本应如何水平对齐。"},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@template flutter.material.InputDecorator.textAlignVertical} 文本应如何垂直对齐。"},{"name":"isFocused","type":"bool","required":true,"desc":"输入字段是否具有焦点。"},{"name":"isHovering","type":"bool","required":true,"desc":"输入字段是否被鼠标指针悬停。"},{"name":"expands","type":"bool","required":true,"desc":"如果为 true,输入字段的高度将尽可能大。"},{"name":"isEmpty","type":"bool","required":true,"desc":"输入字段是否为空。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":231,"localName":"输入装饰","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"InputDecorator基本使用","desc":["【decoration】 : 装饰对象 【InputDecoration】","【textAlign】 : 文字对齐方式 【TextAlign】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_en-US.json b/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_en-US.json deleted file mode 100644 index 8d98bd925..000000000 --- a/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InspectorButton","path":"/src/widgets/widget_inspector.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":" An abstract base class for creating Material or Cupertino-styled inspector buttons.","fields":[{"name":"onPressed","type":"VoidCallback","required":true,"desc":"The callback that is called when the button is tapped."},{"name":"semanticLabel","type":"String","required":true,"desc":"The semantic label for the button, used for accessibility."},{"name":"icon","type":"IconData","required":true,"desc":"The icon to display within the button."},{"name":"buttonKey","type":"GlobalKey?","desc":"An optional key to identify the button widget."},{"name":"variant","type":"InspectorButtonVariant","required":true,"desc":"The visual and behavioral variant of the button."},{"name":"toggledOn","type":"bool?","desc":"For [InspectorButtonVariant.toggle] buttons, this determines if the button is currently in the \"on\" (true) or \"off\" (false) state."}],"id":435,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_zh-CN.json deleted file mode 100644 index 2a9a49fc6..000000000 --- a/modules/widget_system/widgets/doc/widgets/InspectorButton/InspectorButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InspectorButton","path":"/src/widgets/widget_inspector.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":"用于创建 Material 或 Cupertino 样式检查器按钮的抽象基类。","fields":[{"name":"onPressed","type":"VoidCallback","required":true,"desc":"点击按钮时调用的回调。"},{"name":"semanticLabel","type":"String","required":true,"desc":"按钮的语义标签,用于辅助功能。"},{"name":"icon","type":"IconData","required":true,"desc":"在按钮内显示的图标。"},{"name":"buttonKey","type":"GlobalKey?","desc":"用于标识按钮小部件的可选键。"},{"name":"variant","type":"InspectorButtonVariant","required":true,"desc":"按钮的视觉和行为变体。"},{"name":"toggledOn","type":"bool?","desc":"对于 [InspectorButtonVariant.toggle] 按钮,这确定按钮当前是处于"}],"id":435,"localName":"InspectorButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_en-US.json b/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_en-US.json deleted file mode 100644 index 029b4829d..000000000 --- a/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InteractiveViewer","path":"/src/widgets/interactive_viewer.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that enables pan and zoom interactions with its child.","fields":[{"name":"alignment","type":"Alignment?","desc":"The alignment of the child's origin, relative to the size of the box."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"If set to [Clip.none], the child may extend beyond the size of the InteractiveViewer, but it will not receive gestures in these areas. Be sure that the InteractiveViewer is the desired size when using [Clip.none]."},{"name":"panAxis","type":"PanAxis","required":true,"desc":"When set to [PanAxis.aligned], panning is only allowed in the horizontal axis or the vertical axis, diagonal panning is not allowed."},{"name":"boundaryMargin","type":"EdgeInsets","required":true,"desc":"A margin for the visible boundaries of the child."},{"name":"builder","type":"InteractiveViewerWidgetBuilder?","desc":"Builds the child of this widget."},{"name":"child","type":"Widget?","desc":"The child [Widget] that is transformed by InteractiveViewer."},{"name":"constrained","type":"bool","required":true,"desc":"Whether the normal size constraints at this point in the widget tree are applied to the child."},{"name":"panEnabled","type":"bool","required":true,"desc":"If false, the user will be prevented from panning."},{"name":"scaleEnabled","type":"bool","required":true,"desc":"If false, the user will be prevented from scaling."},{"name":"trackpadScrollCausesScale","type":"bool","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollCausesScale}"},{"name":"scaleFactor","type":"double","required":true,"desc":"Determines the amount of scale to be performed per pointer scroll."},{"name":"maxScale","type":"double","required":true,"desc":"The maximum allowed scale."},{"name":"minScale","type":"double","required":true,"desc":"The minimum allowed scale."},{"name":"interactionEndFrictionCoefficient","type":"double","required":true,"desc":"Changes the deceleration behavior after a gesture."},{"name":"onInteractionEnd","type":"GestureScaleEndCallback?","desc":"Called when the user ends a pan or scale gesture on the widget."},{"name":"onInteractionStart","type":"GestureScaleStartCallback?","desc":"Called when the user begins a pan or scale gesture on the widget."},{"name":"onInteractionUpdate","type":"GestureScaleUpdateCallback?","desc":"Called when the user updates a pan or scale gesture on the widget."},{"name":"transformationController","type":"TransformationController?","desc":"A [TransformationController] for the transformation performed on the child."}],"id":351,"lever":4,"family":1,"linkIds":[147,146,78],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of InteractiveViewer","desc":["【alignPanAxis】: Drag along the axis 【bool】","【boundaryMargin】: Boundary margin 【EdgeInsets】","【panEnabled】: Whether panning is enabled 【bool】","【scaleEnabled】: Whether scaling is enabled 【bool】","【maxScale】: Maximum zoom scale 【double】","【minScale】: Minimum zoom scale 【double】","【onInteractionEnd】: Interaction end callback 【GestureScaleEndCallback】","【onInteractionStart】: Interaction start callback 【GestureScaleStartCallback】","【onInteractionUpdate】: Interaction update callback 【GestureScaleUpdateCallback】","【child】: Cursor color 【Widget】"]},{"file":"node2_constrained.dart","name":"Constrained Property Test","desc":["【constrained】: Constrained 【bool】"]},{"file":"node3_controller.dart","name":"Usage of Transformation Controller","desc":["【transformationController】: Transformation controller 【TransformationController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_zh-CN.json deleted file mode 100644 index 1b867f28b..000000000 --- a/modules/widget_system/widgets/doc/widgets/InteractiveViewer/InteractiveViewer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"InteractiveViewer","path":"/src/widgets/interactive_viewer.dart","parents":["StatefulWidget","Widget"],"desc":"启用与其子项的平移和缩放交互的小部件。","fields":[{"name":"alignment","type":"Alignment?","desc":"子项原点相对于框大小的对齐方式。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"如果设置为 [Clip.none],子项可能会超出 InteractiveViewer 的大小,但在这些区域中不会接收手势。使用 [Clip.none] 时确保 InteractiveViewer 是所需的大小。"},{"name":"panAxis","type":"PanAxis","required":true,"desc":"当设置为 [PanAxis.aligned] 时,平移仅允许在水平轴或垂直轴上,不允许对角线平移。"},{"name":"boundaryMargin","type":"EdgeInsets","required":true,"desc":"子项可见边界的边距。"},{"name":"builder","type":"InteractiveViewerWidgetBuilder?","desc":"构建此小部件的子项。"},{"name":"child","type":"Widget?","desc":"由 InteractiveViewer 变换的子 [Widget]。"},{"name":"constrained","type":"bool","required":true,"desc":"小部件树中此点的正常大小约束是否应用于子项。"},{"name":"panEnabled","type":"bool","required":true,"desc":"如果为 false,将阻止用户平移。"},{"name":"scaleEnabled","type":"bool","required":true,"desc":"如果为 false,将阻止用户缩放。"},{"name":"trackpadScrollCausesScale","type":"bool","required":true,"desc":"{@macro flutter.gestures.scale.trackpadScrollCausesScale}"},{"name":"scaleFactor","type":"double","required":true,"desc":"确定每次指针滚动要执行的缩放量。"},{"name":"maxScale","type":"double","required":true,"desc":"允许的最大缩放。"},{"name":"minScale","type":"double","required":true,"desc":"允许的最小缩放。"},{"name":"interactionEndFrictionCoefficient","type":"double","required":true,"desc":"更改手势后的减速行为。"},{"name":"onInteractionEnd","type":"GestureScaleEndCallback?","desc":"用户在小部件上结束平移或缩放手势时调用。"},{"name":"onInteractionStart","type":"GestureScaleStartCallback?","desc":"用户在小部件上开始平移或缩放手势时调用。"},{"name":"onInteractionUpdate","type":"GestureScaleUpdateCallback?","desc":"用户在小部件上更新平移或缩放手势时调用。"},{"name":"transformationController","type":"TransformationController?","desc":"对子项执行变换的 [TransformationController]。"}],"id":351,"localName":"交互视图","lever":4,"family":1,"linkIds":[147,146,78],"nodes":[{"file":"node1_base.dart","name":"InteractiveViewer基本使用","desc":["【alignPanAxis】 : 沿轴拖动 【bool】","【boundaryMargin】 : 边界边距 【EdgeInsets】","【panEnabled】 : 是否可平移 【bool】","【scaleEnabled】 : 是否可缩放 【bool】","【maxScale】 : 最大放大倍数 【double】","【minScale】 : 最小缩小倍数 【double】","【onInteractionEnd】 : 交互结束回调 【GestureScaleEndCallback】","【onInteractionStart】 : 交互开始回调 【GestureScaleStartCallback】","【onInteractionUpdate】 : 交互更新回调 【GestureScaleUpdateCallback】","【child】 : 游标颜色 【Widget】"]},{"file":"node2_constrained.dart","name":"constrained属性测试","desc":["【constrained】 : 受约束的 【bool】"]},{"file":"node3_controller.dart","name":"变换控制器的使用","desc":["【transformationController】 : 变换控制器 【TransformationController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_en-US.json b/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_en-US.json deleted file mode 100644 index 3d706cf08..000000000 --- a/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IntrinsicHeight","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that sizes its child to the child's intrinsic height.","fields":[],"id":298,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of IntrinsicHeight","desc":["【child】: Child component 【Widget】","As shown in the example: the height on the left can vary, the height in the middle is fixed, and the height on the right takes the highest value of the previous two."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_zh-CN.json deleted file mode 100644 index 36422bd4f..000000000 --- a/modules/widget_system/widgets/doc/widgets/IntrinsicHeight/IntrinsicHeight_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IntrinsicHeight","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项大小调整为子项固有高度的小部件。","fields":[],"id":298,"localName":"固有高","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IntrinsicHeight基本使用","desc":["【child】 : 子组件 【Widget】","如示例:左侧高可变动,中间高固定,右侧高取前两者的最高值。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_en-US.json b/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_en-US.json deleted file mode 100644 index a942b2377..000000000 --- a/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IntrinsicWidth","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that sizes its child to the child's maximum intrinsic width.","fields":[{"name":"stepWidth","type":"double?","desc":"If non-null, force the child's width to be a multiple of this value."},{"name":"stepHeight","type":"double?","desc":"If non-null, force the child's height to be a multiple of this value."}],"id":297,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of IntrinsicWidth","desc":["【child】: Child component 【Widget】","As shown in the example: the width above can be changed, the width in the middle is fixed, and the width below takes the highest value of the former two."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_zh-CN.json b/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_zh-CN.json deleted file mode 100644 index aa0f3c4b0..000000000 --- a/modules/widget_system/widgets/doc/widgets/IntrinsicWidth/IntrinsicWidth_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"IntrinsicWidth","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项大小调整为子项最大固有宽度的小部件。","fields":[{"name":"stepWidth","type":"double?","desc":"如果非空,强制子项的宽度为此值的倍数。"},{"name":"stepHeight","type":"double?","desc":"如果非空,强制子项的高度为此值的倍数。"}],"id":297,"localName":"固有宽","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"IntrinsicWidth基本使用","desc":["【child】 : 子组件 【Widget】","如示例:上面宽可变动,中间宽固定,下面宽取前两者的最高值。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_en-US.json b/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_en-US.json deleted file mode 100644 index 414ab5c1f..000000000 --- a/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"KeepAlive","path":"/src/widgets/sliver.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":" Mark a child as needing to stay alive even when it's in a lazy list that would otherwise remove it.","fields":[{"name":"keepAlive","type":"bool","required":true,"desc":"Whether to keep the child alive."}],"id":316,"lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to KeepAlive","desc":["【child】: *Child component 【Widget】","【keepAlive】: *Whether to keep alive 【bool】","In the Flutter framework layer, it is only used in AutomaticKeepAlive. The source code also mentions that it is rarely used alone. This example demonstrates the state keep-alive of ListView items."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_zh-CN.json b/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_zh-CN.json deleted file mode 100644 index 294c2f261..000000000 --- a/modules/widget_system/widgets/doc/widgets/KeepAlive/KeepAlive_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"KeepAlive","path":"/src/widgets/sliver.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":"将子项标记为需要保持活动状态,即使它在否则会删除它的惰性列表中。","fields":[{"name":"keepAlive","type":"bool","required":true,"desc":"是否保持子项活动。"}],"id":316,"localName":"保活","lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"KeepAlive 介绍","desc":["【child】 : *子组件 【Widget】","【keepAlive】 : *是否保活 【bool】","在 flutter 框架层中,只用于 AutomaticKeepAlive 中,源码中也说很少单独使用它。该示例展示出 ListView 条目的状态保活。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_en-US.json b/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_en-US.json deleted file mode 100644 index c82ba710f..000000000 --- a/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"KeyboardListener","path":"/src/widgets/keyboard_listener.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that calls a callback whenever the user presses or releases a key on a keyboard.","fields":[{"name":"focusNode","type":"FocusNode","required":true,"desc":"Controls whether this widget has keyboard focus."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"},{"name":"onKeyEvent","type":"ValueChanged?","desc":"Called whenever this widget receives a keyboard event."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":284,"lever":5,"family":1,"linkIds":[282,283],"nodes":[{"file":"node1.dart","name":"Listen to Keyboard Events","desc":["In the example, click the area to gain focus, and then press the keyboard to see the event trigger information.","【focusNode】 : Focus 【FocusNode】","【autofocus】 : Whether to auto-focus 【bool】","【includeSemantics】 : Include semantics 【bool】","【onKeyEvent】 : Key callback event 【ValueChanged?】","【child】 : Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_zh-CN.json deleted file mode 100644 index b54a38cc0..000000000 --- a/modules/widget_system/widgets/doc/widgets/KeyboardListener/KeyboardListener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"KeyboardListener","path":"/src/widgets/keyboard_listener.dart","parents":["StatelessWidget","Widget"],"desc":"每当用户在键盘上按下或释放键时调用回调的小部件。","fields":[{"name":"focusNode","type":"FocusNode","required":true,"desc":"控制此小部件是否具有键盘焦点。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"},{"name":"onKeyEvent","type":"ValueChanged?","desc":"每当此小部件接收到键盘事件时调用。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":284,"localName":"键盘监听器","lever":5,"family":1,"linkIds":[282,283],"nodes":[{"file":"node1.dart","name":"监听键盘事件","desc":["案例中区域点击获取焦点,然后敲击键盘可以看到事件触发信息。","【focusNode】 : 焦点 【FocusNode】","【autofocus】 : 是否自动聚焦 【bool】","【includeSemantics】 : 包含语义 【bool】","【onKeyEvent】 : 按键回调事件 【ValueChanged?】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_en-US.json b/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_en-US.json deleted file mode 100644 index d38e1b248..000000000 --- a/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"KeyedSubtree","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that builds its child.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":436,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_zh-CN.json b/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_zh-CN.json deleted file mode 100644 index e2b145a4d..000000000 --- a/modules/widget_system/widgets/doc/widgets/KeyedSubtree/KeyedSubtree_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"KeyedSubtree","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":"构建其子项的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":436,"localName":"KeyedSubtree","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_en-US.json deleted file mode 100644 index f56038d38..000000000 --- a/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LayoutBuilder","path":"/src/widgets/layout_builder.dart","parents":["ConstrainedLayoutBuilder","AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":" Builds a widget tree that can depend on the parent widget's size.","fields":[],"id":287,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Understanding of LayoutBuilder","desc":["【builder】: Layout Constructor 【LayoutWidgetBuilder】"]},{"file":"node2_fit.dart","name":"Adaptive Layout of LayoutBuilder","desc":["Can design component display based on the size of the area.","For example, displaying different layout structures in different width areas.","After all, it is not easy to obtain the parent component area in many places, and using LayoutBuilder will be very refreshing."]},{"file":"node3_expend.dart","name":"Expanded Use of LayoutBuilder","desc":["Use TextPainter to detect the number of lines of text to implement expand or collapse functionality."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_zh-CN.json deleted file mode 100644 index 96774189a..000000000 --- a/modules/widget_system/widgets/doc/widgets/LayoutBuilder/LayoutBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LayoutBuilder","path":"/src/widgets/layout_builder.dart","parents":["ConstrainedLayoutBuilder","AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":"构建可以依赖于父小部件大小的小部件树。","fields":[],"id":287,"localName":"布局构造器","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"LayoutBuilder基本认识","desc":["【builder】 : 布局构造器 【LayoutWidgetBuilder】"]},{"file":"node2_fit.dart","name":"LayoutBuilder的适应布局","desc":["可以根据区域的大小进行组件展示设计。\"","比如在不同的宽度区域显示不同的布局结构。\"","毕竟很多地方不容易获取父组件区域,使用LayoutBuilder就会非常爽口。"]},{"file":"node3_expend.dart","name":"LayoutBuilder的展开使用","desc":["使用TextPainter来检测文字的行数,实现展开或收起功能。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_en-US.json b/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_en-US.json deleted file mode 100644 index d407ba313..000000000 --- a/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LayoutId","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":" Metadata for identifying children in a [CustomMultiChildLayout].","fields":[{"name":"id","type":"Object","required":true,"desc":"An object representing the identity of this child."}],"id":315,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"LayoutId Usage Scenarios","desc":["【id】 : Identifier id 【Object】","【child】 : Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_zh-CN.json deleted file mode 100644 index 3e93ccd5a..000000000 --- a/modules/widget_system/widgets/doc/widgets/LayoutId/LayoutId_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LayoutId","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":"用于在 [CustomMultiChildLayout] 中标识子项的元数据。","fields":[{"name":"id","type":"Object","required":true,"desc":"表示此子项身份的对象。"}],"id":315,"localName":"布局Id","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"LayoutId使用场景","desc":["【id】 : 标识id 【Object】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_en-US.json deleted file mode 100644 index 95edcedf8..000000000 --- a/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LeafRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A superclass for [RenderObjectWidget]s that configure [RenderObject] subclasses that have no children.","fields":[],"id":437,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_zh-CN.json deleted file mode 100644 index ce03dba47..000000000 --- a/modules/widget_system/widgets/doc/widgets/LeafRenderObjectWidget/LeafRenderObjectWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LeafRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"配置没有子项的 [RenderObject] 子类的 [RenderObjectWidget] 的超类。","fields":[],"id":437,"localName":"LeafRenderObjectWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_en-US.json b/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_en-US.json deleted file mode 100644 index 3290afeb2..000000000 --- a/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LicensePage","path":"/src/material/about.dart","parents":["StatefulWidget","Widget"],"desc":" A page that shows licenses for software used by the application.","fields":[{"name":"applicationName","type":"String?","desc":"The name of the application."},{"name":"applicationVersion","type":"String?","desc":"The version of this build of the application."},{"name":"applicationIcon","type":"Widget?","desc":"The icon to show below the application name."},{"name":"applicationLegalese","type":"String?","desc":"A string to show in small print."}],"id":145,"lever":1,"family":1,"linkIds":[130,193],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of LicensePage","desc":["【applicationIcon】: Top-left icon 【Widget】","【applicationVersion】: Version number 【String】","【applicationName】: Application name 【String】","【applicationLegalese】: Application legalese 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_zh-CN.json deleted file mode 100644 index d26b89330..000000000 --- a/modules/widget_system/widgets/doc/widgets/LicensePage/LicensePage_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LicensePage","path":"/src/material/about.dart","parents":["StatefulWidget","Widget"],"desc":"显示应用程序使用的软件许可证的页面。","fields":[{"name":"applicationName","type":"String?","desc":"应用程序的名称。"},{"name":"applicationVersion","type":"String?","desc":"此应用程序构建的版本。"},{"name":"applicationIcon","type":"Widget?","desc":"在应用程序名称下方显示的图标。"},{"name":"applicationLegalese","type":"String?","desc":"以小字体显示的字符串。"}],"id":145,"localName":"证书页","lever":1,"family":1,"linkIds":[130,193],"nodes":[{"file":"node1_base.dart","name":"LicensePage基本使用","desc":["【applicationIcon】 : 左上图标 【Widget】","【applicationVersion】 : 版本号 【String】","【applicationName】 : 应用名 【String】","【applicationLegalese】 : 应用律术 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_en-US.json deleted file mode 100644 index 723574f5f..000000000 --- a/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LimitedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A box that limits its size only when it's unconstrained.","fields":[{"name":"maxWidth","type":"double","required":true,"desc":"The maximum width limit to apply in the absence of a [BoxConstraints.maxWidth] constraint."},{"name":"maxHeight","type":"double","required":true,"desc":"The maximum height limit to apply in the absence of a [BoxConstraints.maxHeight] constraint."}],"id":79,"lever":3,"family":2,"linkIds":[80],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of LimitedBox","desc":["【child】: Child component 【Widget】","【maxHeight】: Maximum height 【double】","【maxWidth】: Maximum width 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_zh-CN.json deleted file mode 100644 index 9aaedc3e6..000000000 --- a/modules/widget_system/widgets/doc/widgets/LimitedBox/LimitedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LimitedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"仅在无约束时限制其大小的框。","fields":[{"name":"maxWidth","type":"double","required":true,"desc":"在没有 [BoxConstraints.maxWidth] 约束时应用的最大宽度限制。"},{"name":"maxHeight","type":"double","required":true,"desc":"在没有 [BoxConstraints.maxHeight] 约束时应用的最大高度限制。"}],"id":79,"localName":"限制盒","lever":3,"family":2,"linkIds":[80],"nodes":[{"file":"node1_base.dart","name":"LimitedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【maxHeight】 : 最大高 【double】","【maxWidth】 : 最大宽 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_en-US.json deleted file mode 100644 index e600f5c2f..000000000 --- a/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LinearProgressIndicator","path":"/src/material/progress_indicator.dart","parents":["ProgressIndicator","StatefulWidget","Widget"],"desc":" A Material Design linear progress indicator, also known as a progress bar.","fields":[{"name":"minHeight","type":"double?","desc":"{@template flutter.material.LinearProgressIndicator.minHeight} The minimum height of the line used to draw the linear indicator."},{"name":"borderRadius","type":"BorderRadiusGeometry?","desc":"The border radius of both the indicator and the track."},{"name":"stopIndicatorColor","type":"Color?","desc":"The color of the stop indicator."},{"name":"stopIndicatorRadius","type":"double?","desc":"The radius of the stop indicator."},{"name":"trackGap","type":"double?","desc":"The gap between the indicator and the track."},{"name":"year2023","type":"bool?","desc":"When true, the [LinearProgressIndicator] will use the 2023 Material Design 3 appearance."}],"id":47,"lever":3,"family":1,"linkIds":[46,48],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of LinearProgressIndicator","desc":["【value】: Progress 【double】","【backgroundColor】: Background Color 【Color】","【valueColor】: Progress Color 【Animation】"," It will keep looping when the value is null"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_zh-CN.json deleted file mode 100644 index 2ebfa9ea7..000000000 --- a/modules/widget_system/widgets/doc/widgets/LinearProgressIndicator/LinearProgressIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LinearProgressIndicator","path":"/src/material/progress_indicator.dart","parents":["ProgressIndicator","StatefulWidget","Widget"],"desc":"Material Design 线性进度指示器,也称为进度条。","fields":[{"name":"minHeight","type":"double?","desc":"{@template flutter.material.LinearProgressIndicator.minHeight} 用于绘制线性指示器的线的最小高度。"},{"name":"borderRadius","type":"BorderRadiusGeometry?","desc":"指示器和轨道的边框半径。"},{"name":"stopIndicatorColor","type":"Color?","desc":"停止指示器的颜色。"},{"name":"stopIndicatorRadius","type":"double?","desc":"停止指示器的半径。"},{"name":"trackGap","type":"double?","desc":"指示器和轨道之间的间隙。"},{"name":"year2023","type":"bool?","desc":"当为 true 时,[LinearProgressIndicator] 将使用 2023 Material Design 3 外观。"}],"id":47,"localName":"水平进度","lever":3,"family":1,"linkIds":[46,48],"nodes":[{"file":"node1_base.dart","name":"LinearProgressIndicator基本使用","desc":["【value】 : 进度 【double】","【backgroundColor】 : 背景色 【Color】","【valueColor】 : 进度颜色 【Animation】"," value为null时会不停循环"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_en-US.json b/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_en-US.json deleted file mode 100644 index f6746c4a2..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListBody","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that arranges its children sequentially along a given axis, forcing them to the dimension of the parent in the other axis.","fields":[{"name":"mainAxis","type":"Axis","required":true,"desc":"The direction to use as the main axis."},{"name":"reverse","type":"bool","required":true,"desc":"Whether the list body positions children in the reading direction."}],"id":342,"lever":4,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ListView","desc":["【mainAxis】: Main axis direction 【Axis】","【reverse】: Whether to reverse 【bool】","【children】: Child component collection 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_zh-CN.json deleted file mode 100644 index 4c6d7ec4d..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListBody/ListBody_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListBody","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"沿给定轴顺序排列其子项的小部件,强制它们在另一个轴上符合父级的尺寸。","fields":[{"name":"mainAxis","type":"Axis","required":true,"desc":"用作主轴的方向。"},{"name":"reverse","type":"bool","required":true,"desc":"列表主体是否在阅读方向上定位子项。"}],"id":342,"localName":"列表体","lever":4,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ListView的基本使用","desc":["【mainAxis】 : 主轴方向 【Axis】","【reverse】: 是否反向 【bool】","【children】: 子组件集 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_en-US.json deleted file mode 100644 index bdb71dbc9..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListTile","path":"/src/material/list_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A single fixed-height row that typically contains some text as well as a leading or trailing icon.","fields":[{"name":"leading","type":"Widget?","desc":"A widget to display before the title."},{"name":"title","type":"Widget?","desc":"The primary content of the list tile."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"trailing","type":"Widget?","desc":"A widget to display after the title."},{"name":"isThreeLine","type":"bool?","desc":"Whether this list tile is intended to display three lines of text."},{"name":"dense","type":"bool?","desc":"{@template flutter.material.ListTile.dense} Whether this list tile is part of a vertically dense list."},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the list tile's layout will be."},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.ListTile.shape} Defines the tile's [InkWell.customBorder] and [Ink.decoration] shape. {@endtemplate}"},{"name":"selectedColor","type":"Color?","desc":"Defines the color used for icons and text when the list tile is selected."},{"name":"iconColor","type":"Color?","desc":"Defines the default color for [leading] and [trailing] icons."},{"name":"textColor","type":"Color?","desc":"Defines the text color for the [title], [subtitle], [leading], and [trailing]."},{"name":"titleTextStyle","type":"TextStyle?","desc":"The text style for ListTile's [title]."},{"name":"subtitleTextStyle","type":"TextStyle?","desc":"The text style for ListTile's [subtitle]."},{"name":"leadingAndTrailingTextStyle","type":"TextStyle?","desc":"The text style for ListTile's [leading] and [trailing]."},{"name":"style","type":"ListTileStyle?","desc":"Defines the font used for the [title]."},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"The tile's internal padding."},{"name":"enabled","type":"bool","required":true,"desc":"Whether this list tile is interactive."},{"name":"onTap","type":"GestureTapCallback?","desc":"Called when the user taps this list tile."},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"Called when the user long-presses on this list tile."},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.ListTile.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"selected","type":"bool","required":true,"desc":"If this tile is also [enabled] then icons and text are rendered with the same color."},{"name":"focusColor","type":"Color?","desc":"The color for the tile's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"The color for the tile's [Material] when a pointer is hovering over it."},{"name":"splashColor","type":"Color?","desc":"The color of splash for the tile's [Material]."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tileColor","type":"Color?","desc":"{@template flutter.material.ListTile.tileColor} Defines the background color of `ListTile` when [selected] is false."},{"name":"selectedTileColor","type":"Color?","desc":"Defines the background color of `ListTile` when [selected] is true."},{"name":"enableFeedback","type":"bool?","desc":"{@template flutter.material.ListTile.enableFeedback} Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"horizontalTitleGap","type":"double?","desc":"The horizontal gap between the titles and the leading/trailing widgets."},{"name":"minVerticalPadding","type":"double?","desc":"The minimum padding on the top and bottom of the title and subtitle widgets."},{"name":"minLeadingWidth","type":"double?","desc":"The minimum width allocated for the [ListTile.leading] widget."},{"name":"minTileHeight","type":"double?","desc":"{@template flutter.material.ListTile.minTileHeight} The minimum height allocated for the [ListTile] widget."},{"name":"titleAlignment","type":"ListTileTitleAlignment?","desc":"Defines how [ListTile.leading] and [ListTile.trailing] are vertically aligned relative to the [ListTile]'s titles ([ListTile.title] and [ListTile.subtitle])."},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"Whether to add button:true to the semantics if onTap is provided. This is a temporary flag to help changing the behavior of ListTile onTap semantics."}],"id":16,"lever":3,"family":0,"linkIds":[162,334],"nodes":[{"file":"node1_base.dart","name":"The basic representation of ListTile is as follows","desc":["【leading】: Left component 【Widget】","【title】: Top middle component 【Widget】","【subtitle】: Bottom middle component 【Widget】","【trailing】: Trailing component 【Widget】","【contentPadding】: Inner padding 【EdgeInsetsGeometry】","【onLongPress】: Click event 【Function()】"]},{"file":"node2_select.dart","name":"ListTile selection effect and long press event","desc":["【selected】: Whether selected 【bool】","【onTap】: Click event 【Function()】"]},{"file":"node3_dense.dart","name":"Dense property of ListTile","desc":["【dense】: Whether dense 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_zh-CN.json deleted file mode 100644 index d9776111b..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListTile/ListTile_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListTile","path":"/src/material/list_tile.dart","parents":["StatelessWidget","Widget"],"desc":"单个固定高度行,通常包含一些文本以及前导或尾随图标。","fields":[{"name":"leading","type":"Widget?","desc":"在标题前显示的小部件。"},{"name":"title","type":"Widget?","desc":"列表磁贴的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"trailing","type":"Widget?","desc":"在标题后显示的小部件。"},{"name":"isThreeLine","type":"bool?","desc":"此列表磁贴是否旨在显示三行文本。"},{"name":"dense","type":"bool?","desc":"{@template flutter.material.ListTile.dense} 此列表磁贴是否是垂直密集列表的一部分。"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义列表磁贴布局的紧凑程度。"},{"name":"shape","type":"ShapeBorder?","desc":"{@template flutter.material.ListTile.shape} 定义磁贴的 [InkWell.customBorder] 和 [Ink.decoration] 形状。{@endtemplate}"},{"name":"selectedColor","type":"Color?","desc":"定义选择列表磁贴时用于图标和文本的颜色。"},{"name":"iconColor","type":"Color?","desc":"定义 [leading] 和 [trailing] 图标的默认颜色。"},{"name":"textColor","type":"Color?","desc":"定义 [title]、[subtitle]、[leading] 和 [trailing] 的文本颜色。"},{"name":"titleTextStyle","type":"TextStyle?","desc":"ListTile 的 [title] 的文本样式。"},{"name":"subtitleTextStyle","type":"TextStyle?","desc":"ListTile 的 [subtitle] 的文本样式。"},{"name":"leadingAndTrailingTextStyle","type":"TextStyle?","desc":"ListTile 的 [leading] 和 [trailing] 的文本样式。"},{"name":"style","type":"ListTileStyle?","desc":"定义 [title] 使用的字体。"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"磁贴的内部内边距。"},{"name":"enabled","type":"bool","required":true,"desc":"此列表磁贴是否可交互。"},{"name":"onTap","type":"GestureTapCallback?","desc":"用户点击此列表磁贴时调用。"},{"name":"onLongPress","type":"GestureLongPressCallback?","desc":"用户长按此列表磁贴时调用。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.ListTile.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"selected","type":"bool","required":true,"desc":"如果此磁贴也是 [enabled],则图标和文本以相同颜色渲染。"},{"name":"focusColor","type":"Color?","desc":"磁贴具有输入焦点时其 [Material] 的颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在磁贴上时其 [Material] 的颜色。"},{"name":"splashColor","type":"Color?","desc":"磁贴的 [Material] 的飞溅颜色。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tileColor","type":"Color?","desc":"{@template flutter.material.ListTile.tileColor} 当 [selected] 为 false 时定义 `ListTile` 的背景颜色。"},{"name":"selectedTileColor","type":"Color?","desc":"当 [selected] 为 true 时定义 `ListTile` 的背景颜色。"},{"name":"enableFeedback","type":"bool?","desc":"{@template flutter.material.ListTile.enableFeedback} 检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"horizontalTitleGap","type":"double?","desc":"标题和前导/尾随小部件之间的水平间隙。"},{"name":"minVerticalPadding","type":"double?","desc":"标题和副标题小部件顶部和底部的最小内边距。"},{"name":"minLeadingWidth","type":"double?","desc":"为 [ListTile.leading] 小部件分配的最小宽度。"},{"name":"minTileHeight","type":"double?","desc":"{@template flutter.material.ListTile.minTileHeight} 为 [ListTile] 小部件分配的最小高度。"},{"name":"titleAlignment","type":"ListTileTitleAlignment?","desc":"定义 [ListTile.leading] 和 [ListTile.trailing] 相对于 [ListTile] 的标题([ListTile.title] 和 [ListTile.subtitle])如何垂直对齐。"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"如果提供了 onTap,是否向语义添加 button:true。这是一个临时标志,用于帮助更改 ListTile onTap 语义的行为。"}],"id":16,"localName":"列表瓦片","lever":3,"family":0,"linkIds":[162,334],"nodes":[{"file":"node1_base.dart","name":"ListTile的基本表现如下","desc":["【leading】: 左侧组件 【Widget】","【title】: 中间上组件 【Widget】","【subtitle】: 中间下组件 【Widget】","【trailing】: 尾组件 【Widget】","【contentPadding】: 内边距 【EdgeInsetsGeometry】","【onLongPress】: 点击事件 【Function()】"]},{"file":"node2_select.dart","name":"ListTile选中效果和长按事件","desc":["【selected】: 是否选中 【bool】","【onTap】: 点击事件 【Function()】"]},{"file":"node3_dense.dart","name":"ListTile的密排属性","desc":["【dense】: 是否密排 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_en-US.json deleted file mode 100644 index ee636e467..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListTileTheme","path":"/src/material/list_tile_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines color and style parameters for [ListTile]s in this widget's subtree.","fields":[],"id":334,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ListTileTheme","desc":["You can specify the ListTileThemeData properties to set default styles for descendant ListTile components, such as styles, colors, decorations, margins, etc. You can also use ListTileTheme.of to get the theme properties of ListTile."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_zh-CN.json deleted file mode 100644 index b0814aa12..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListTileTheme/ListTileTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListTileTheme","path":"/src/material/list_tile_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [ListTile] 定义颜色和样式参数的继承小部件。","fields":[],"id":334,"localName":"ListTile主题","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ListTileTheme基本使用","desc":["可指定ListTileThemeData数据属性为【后代】的ListTile组件设置默认样式,如样式、颜色、装饰、边距等。也可以用ListTileTheme.of获取ListTile的主题属性。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListView/ListView_en-US.json b/modules/widget_system/widgets/doc/widgets/ListView/ListView_en-US.json deleted file mode 100644 index 4e84ed65d..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListView/ListView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListView","path":"/src/widgets/scroll_view.dart","parents":["BoxScrollView","ScrollView","StatelessWidget","Widget"],"desc":" A scrollable list of widgets arranged linearly.","fields":[{"name":"itemExtent","type":"double?","desc":"{@template flutter.widgets.list_view.itemExtent} If non-null, forces the children to have the given extent in the scroll direction."},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@template flutter.widgets.list_view.itemExtentBuilder} If non-null, forces the children to have the corresponding extent returned by the builder."},{"name":"prototypeItem","type":"Widget?","desc":"{@template flutter.widgets.list_view.prototypeItem} If non-null, forces the children to have the same extent as the given widget in the scroll direction."},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"A delegate that provides the children for the [ListView]."}],"id":162,"lever":5,"family":0,"linkIds":[16,163],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ListView","desc":["【children】 : List of child components 【List】","【padding】 : Padding 【EdgeInsetsGeometry】"]},{"file":"node2_direction.dart","name":"Horizontal Scrolling of ListView","desc":["【scrollDirection】 : Scroll direction 【Axis】","【reverse】 : Whether to scroll in reverse 【bool】","【shrinkWrap】 : Whether to wrap when unbounded 【bool】"]},{"file":"node3_builder.dart","name":"ListView.builder Construction","desc":["【itemCount】 : Number of items 【int】","【itemBuilder】 : Item builder 【IndexedWidgetBuilder】"]},{"file":"node4_separated.dart","name":"ListView.separated Construction","desc":["【separatorBuilder】 : Item builder 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListView/ListView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListView/ListView_zh-CN.json deleted file mode 100644 index ea88e0865..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListView/ListView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListView","path":"/src/widgets/scroll_view.dart","parents":["BoxScrollView","ScrollView","StatelessWidget","Widget"],"desc":"线性排列的可滚动小部件列表。","fields":[{"name":"itemExtent","type":"double?","desc":"{@template flutter.widgets.list_view.itemExtent} 如果非空,强制子项在滚动方向上具有给定的范围。"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@template flutter.widgets.list_view.itemExtentBuilder} 如果非空,强制子项具有构建器返回的相应范围。"},{"name":"prototypeItem","type":"Widget?","desc":"{@template flutter.widgets.list_view.prototypeItem} 如果非空,强制子项在滚动方向上与给定小部件具有相同的范围。"},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"为 [ListView] 提供子项的委托。"}],"id":162,"localName":"列表组件","lever":5,"family":0,"linkIds":[16,163],"nodes":[{"file":"node1_base.dart","name":"ListView基本使用","desc":["【children】 : 子组件列表 【List】","【padding】 : 内边距 【EdgeInsetsGeometry】"]},{"file":"node2_direction.dart","name":"ListView横向滑动","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向滑动 【bool】","【shrinkWrap】 : 无边界时是否包裹 【bool】"]},{"file":"node3_builder.dart","name":"ListView.builder构造","desc":["【itemCount】 : 条目个数 【int】","【itemBuilder】 : 条目构造器 【IndexedWidgetBuilder】"]},{"file":"node4_separated.dart","name":"ListView.separated构造","desc":["【separatorBuilder】 : 条目构造器 【IndexedWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_en-US.json deleted file mode 100644 index b4da019f6..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListWheelScrollView","path":"/src/widgets/list_wheel_scroll_view.dart","parents":["StatefulWidget","Widget"],"desc":" A box in which children on a wheel can be scrolled.","fields":[{"name":"controller","type":"ScrollController?","desc":"Typically a [FixedExtentScrollController] used to control the current item."},{"name":"physics","type":"ScrollPhysics?","desc":"How the scroll view should respond to user input."},{"name":"diameterRatio","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.diameterRatio}"},{"name":"perspective","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.perspective}"},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"overAndUnderCenterOpacity","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.overAndUnderCenterOpacity}"},{"name":"itemExtent","type":"double","required":true,"desc":"Size of each child in the main axis."},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"onSelectedItemChanged","type":"ValueChanged?","desc":"On optional listener that's called when the centered item changes."},{"name":"renderChildrenOutsideViewport","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.renderChildrenOutsideViewport}"},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"A delegate that helps lazily instantiating child."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"}],"id":179,"lever":4,"family":1,"linkIds":[139,291],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ListWheelScrollView","desc":["【children】: List of child components 【List】","【perspective】: Perspective 【double】","【itemExtent】: Item height 【EdgeInsets】","【onSelectedItemChanged】: Selection callback 【ValueChanged】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_zh-CN.json deleted file mode 100644 index 454e131b5..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListWheelScrollView/ListWheelScrollView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListWheelScrollView","path":"/src/widgets/list_wheel_scroll_view.dart","parents":["StatefulWidget","Widget"],"desc":"可以滚动轮子上子项的框。","fields":[{"name":"controller","type":"ScrollController?","desc":"通常是用于控制当前项目的 [FixedExtentScrollController]。"},{"name":"physics","type":"ScrollPhysics?","desc":"滚动视图应如何响应用户输入。"},{"name":"diameterRatio","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.diameterRatio}"},{"name":"perspective","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.perspective}"},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"overAndUnderCenterOpacity","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.overAndUnderCenterOpacity}"},{"name":"itemExtent","type":"double","required":true,"desc":"主轴中每个子项的大小。"},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"onSelectedItemChanged","type":"ValueChanged?","desc":"当居中项目更改时调用的可选监听器。"},{"name":"renderChildrenOutsideViewport","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.renderChildrenOutsideViewport}"},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"帮助惰性实例化子项的委托。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"}],"id":179,"localName":"滚轮列表","lever":4,"family":1,"linkIds":[139,291],"nodes":[{"file":"node1_base.dart","name":"ListWheelScrollView基本使用","desc":["【children】 : 子组件列表 【List】","【perspective】 : 透视度 【double】","【itemExtent】 : item高 【EdgeInsets】","【onSelectedItemChanged】 : 选中回调 【ValueChanged 】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_en-US.json b/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_en-US.json deleted file mode 100644 index 814549756..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListWheelViewport","path":"/src/widgets/list_wheel_scroll_view.dart","parents":["RenderObjectWidget","Widget"],"desc":" A viewport showing a subset of children on a wheel.","fields":[{"name":"diameterRatio","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.diameterRatio}"},{"name":"perspective","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.perspective}"},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"overAndUnderCenterOpacity","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.overAndUnderCenterOpacity}"},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.itemExtent}"},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"renderChildrenOutsideViewport","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.renderChildrenOutsideViewport}"},{"name":"offset","type":"ViewportOffset","required":true,"desc":"[ViewportOffset] object describing the content that should be visible in the viewport."},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"A delegate that lazily instantiates children."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":291,"lever":4,"family":6,"linkIds":[179,139,137,253],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ListWheelViewport","desc":["【itemExtent】 : Axial item size 【double】","【offset】 : Viewport offset 【ViewportOffset】","【childDelegate】 : Child delegate constructor 【ListWheelChildDelegate】"]},{"file":"node2_perspective.dart","name":"Perspective Effect of ListWheelViewport","desc":["【perspective】 : Perspective parameter 【double】","【squeeze】 : Squeeze value 【double】","【diameterRatio】 : Diameter ratio 【double】"]},{"file":"node3_magnifier.dart","name":"Magnification of ListWheelViewport","desc":["【useMagnifier】 : Whether to magnify 【bool】","【magnification】 : Magnification ratio 【double】","【clipBehavior】 : Clip behavior 【Clip】","【renderChildrenOutsideViewport】 : Whether to render children outside the viewport 【bool】"]},{"file":"node4_opacity.dart","name":"Offset and Opacity","desc":["【offAxisFraction】 : Axis center offset ratio 【double】","【overAndUnderCenterOpacity】 : Opacity outside the magnifier 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_zh-CN.json deleted file mode 100644 index dddda210e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListWheelViewport/ListWheelViewport_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListWheelViewport","path":"/src/widgets/list_wheel_scroll_view.dart","parents":["RenderObjectWidget","Widget"],"desc":"显示轮子上子项子集的视口。","fields":[{"name":"diameterRatio","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.diameterRatio}"},{"name":"perspective","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.perspective}"},{"name":"offAxisFraction","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.offAxisFraction}"},{"name":"useMagnifier","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.useMagnifier}"},{"name":"magnification","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.magnification}"},{"name":"overAndUnderCenterOpacity","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.overAndUnderCenterOpacity}"},{"name":"itemExtent","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.itemExtent}"},{"name":"squeeze","type":"double","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.squeeze}"},{"name":"renderChildrenOutsideViewport","type":"bool","required":true,"desc":"{@macro flutter.rendering.RenderListWheelViewport.renderChildrenOutsideViewport}"},{"name":"offset","type":"ViewportOffset","required":true,"desc":"描述应在视口中可见的内容的 [ViewportOffset] 对象。"},{"name":"childDelegate","type":"ListWheelChildDelegate","required":true,"desc":"惰性实例化子项的委托。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":291,"localName":"列表滚轮视口","lever":4,"family":6,"linkIds":[179,139,137,253],"nodes":[{"file":"node1_base.dart","name":"ListWheelViewport 简单使用","desc":["【itemExtent】 : 轴向item尺寸 【double】","【offset】 : 视口偏移 【ViewportOffset】","【childDelegate】 : 孩子代理构造器 【ListWheelChildDelegate】"]},{"file":"node2_perspective.dart","name":"ListWheelViewport 透视效果","desc":["【perspective】 : 透视参数 【double】","【squeeze】 : 挤压值 【double】","【diameterRatio】 : 直径分率 【double】"]},{"file":"node3_magnifier.dart","name":"ListWheelViewport 放大","desc":["【useMagnifier】 : 是否放大 【bool】","【magnification】 : 放大比例 【double】","【clipBehavior】 : 剪裁行为 【Clip】","【renderChildrenOutsideViewport】 : 出视野是否渲染 【bool】"]},{"file":"node4_opacity.dart","name":"偏移和透明度","desc":["【offAxisFraction】 : 轴中心偏移比 【double】","【overAndUnderCenterOpacity】 : 放大器之外的透明度 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_en-US.json deleted file mode 100644 index a11ac82ef..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListenableBuilder","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" A general-purpose widget for building a widget subtree when a [Listenable] changes.","fields":[{"name":"builder","type":"TransitionBuilder","required":true,"desc":"Called every time the [listenable] notifies about a change."},{"name":"child","type":"Widget?","desc":"The child widget to pass to the [builder]."}],"id":438,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_zh-CN.json deleted file mode 100644 index fde9f320f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ListenableBuilder/ListenableBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ListenableBuilder","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"当 [Listenable] 更改时用于构建小部件子树的通用小部件。","fields":[{"name":"builder","type":"TransitionBuilder","required":true,"desc":"每次 [listenable] 通知更改时调用。"},{"name":"child","type":"Widget?","desc":"传递给 [builder] 的子小部件。"}],"id":438,"localName":"ListenableBuilder","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Listener/Listener_en-US.json b/modules/widget_system/widgets/doc/widgets/Listener/Listener_en-US.json deleted file mode 100644 index 1738bc5e0..000000000 --- a/modules/widget_system/widgets/doc/widgets/Listener/Listener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Listener","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that calls callbacks in response to common pointer events.","fields":[{"name":"onPointerDown","type":"PointerDownEventListener?","desc":"Called when a pointer comes into contact with the screen (for touch pointers), or has its button pressed (for mouse pointers) at this widget's location."},{"name":"onPointerMove","type":"PointerMoveEventListener?","desc":"Called when a pointer that triggered an [onPointerDown] changes position."},{"name":"onPointerUp","type":"PointerUpEventListener?","desc":"Called when a pointer that triggered an [onPointerDown] is no longer in contact with the screen."},{"name":"onPointerHover","type":"PointerHoverEventListener?","desc":"Called when a pointer that has not triggered an [onPointerDown] changes position."},{"name":"onPointerCancel","type":"PointerCancelEventListener?","desc":"Called when the input from a pointer that triggered an [onPointerDown] is no longer directed towards this receiver."},{"name":"onPointerPanZoomStart","type":"PointerPanZoomStartEventListener?","desc":"Called when a pan/zoom begins such as from a trackpad gesture."},{"name":"onPointerPanZoomUpdate","type":"PointerPanZoomUpdateEventListener?","desc":"Called when a pan/zoom is updated."},{"name":"onPointerPanZoomEnd","type":"PointerPanZoomEndEventListener?","desc":"Called when a pan/zoom finishes."},{"name":"onPointerSignal","type":"PointerSignalEventListener?","desc":"Called when a pointer signal occurs over this object."},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit testing."}],"id":147,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Events of Listener","desc":["【child】 : Child component 【Widget】","【onPointerDown】 : Press event 【Function(PointerDownEvent)】","【onPointerMove】 : Move event 【Function(PointerMoveEvent)】","【onPointerMove】 : Release event 【Function(PointerUpEvent)】","【onPointerCancel】 : Cancel event 【Function(PointerUpEvent)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Listener/Listener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Listener/Listener_zh-CN.json deleted file mode 100644 index fa8733546..000000000 --- a/modules/widget_system/widgets/doc/widgets/Listener/Listener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Listener","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"响应常见指针事件调用回调的小部件。","fields":[{"name":"onPointerDown","type":"PointerDownEventListener?","desc":"当指针与屏幕接触(对于触摸指针)或在此小部件位置按下按钮(对于鼠标指针)时调用。"},{"name":"onPointerMove","type":"PointerMoveEventListener?","desc":"当触发 [onPointerDown] 的指针改变位置时调用。"},{"name":"onPointerUp","type":"PointerUpEventListener?","desc":"当触发 [onPointerDown] 的指针不再与屏幕接触时调用。"},{"name":"onPointerHover","type":"PointerHoverEventListener?","desc":"当未触发 [onPointerDown] 的指针改变位置时调用。"},{"name":"onPointerCancel","type":"PointerCancelEventListener?","desc":"当触发 [onPointerDown] 的指针的输入不再指向此接收器时调用。"},{"name":"onPointerPanZoomStart","type":"PointerPanZoomStartEventListener?","desc":"当平移/缩放开始时调用,例如来自触控板手势。"},{"name":"onPointerPanZoomUpdate","type":"PointerPanZoomUpdateEventListener?","desc":"当平移/缩放更新时调用。"},{"name":"onPointerPanZoomEnd","type":"PointerPanZoomEndEventListener?","desc":"当平移/缩放完成时调用。"},{"name":"onPointerSignal","type":"PointerSignalEventListener?","desc":"当指针信号在此对象上发生时调用。"},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"命中测试期间的行为方式。"}],"id":147,"localName":"事件监听器","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Listener基本事件","desc":["【child】 : 子组件 【Widget】","【onPointerDown】 : 按下事件 【Function(PointerDownEvent)】","【onPointerMove】 : 移动事件 【Function(PointerMoveEvent)】","【onPointerMove】 : 抬起事件 【Function(PointerUpEvent)】","【onPointerCancel】 : 取消事件 【Function(PointerUpEvent)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_en-US.json b/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_en-US.json deleted file mode 100644 index ec44d5668..000000000 --- a/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Localizations","path":"/src/widgets/localizations.dart","parents":["StatefulWidget","Widget"],"desc":" Defines the [Locale] for its `child` and the localized resources that the child depends on.","fields":[{"name":"locale","type":"Locale","required":true,"desc":"The resources returned by [Localizations.of] will be specific to this locale."},{"name":"delegates","type":"List>","required":true,"desc":"This list collectively defines the localized resources objects that can be retrieved with [Localizations.of]."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":290,"lever":4,"family":1,"linkIds":[65,346],"nodes":[{"file":"node1.dart","name":"Get Current Language","desc":["Through Localizations.localeOf(context), you can retrieve the Locale data information stored in the nearest upper-level Localizations component based on the context."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_zh-CN.json deleted file mode 100644 index 0acb6f0f3..000000000 --- a/modules/widget_system/widgets/doc/widgets/Localizations/Localizations_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Localizations","path":"/src/widgets/localizations.dart","parents":["StatefulWidget","Widget"],"desc":"为其 `child` 定义 [Locale] 以及子项依赖的本地化资源。","fields":[{"name":"locale","type":"Locale","required":true,"desc":"[Localizations.of] 返回的资源将特定于此区域设置。"},{"name":"delegates","type":"List>","required":true,"desc":"此列表共同定义了可以使用 [Localizations.of] 检索的本地化资源对象。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":290,"localName":"国际化","lever":4,"family":1,"linkIds":[65,346],"nodes":[{"file":"node1.dart","name":"获取当前语言","desc":["通过 Localizations.localeOf(context) 可以根据上下文获取最近上层的 Localizations 组件存储的 Locale 数据信息。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_en-US.json b/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_en-US.json deleted file mode 100644 index c1160c098..000000000 --- a/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LongPressDraggable","path":"/src/widgets/drag_target.dart","parents":["Draggable","StatefulWidget","Widget"],"desc":" Makes its child draggable starting from long press.","fields":[{"name":"hapticFeedbackOnStart","type":"bool","required":true,"desc":"Whether haptic feedback should be triggered on drag start."},{"name":"delay","type":"Duration","required":true,"desc":"The duration that a user has to press down before a long press is registered."}],"id":105,"lever":4,"family":1,"linkIds":[103,104],"nodes":[{"file":"node1_base.dart","name":"LongPressDraggable used with DragTarget","desc":["【child】 : child 【Widget】","【feedback】 : child during drag 【Widget】","【axis】 : axis of drag 【Axis】","【data】 : data 【T】","【onDragStarted】 : start drag 【Function()】","【onDragEnd】 : end drag 【Function(DraggableDetails)】","【onDragCompleted】 : drag completed 【Function()】","【onDraggableCanceled】 : drag canceled 【Function(Velocity,Offset)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_zh-CN.json deleted file mode 100644 index 99846022f..000000000 --- a/modules/widget_system/widgets/doc/widgets/LongPressDraggable/LongPressDraggable_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LongPressDraggable","path":"/src/widgets/drag_target.dart","parents":["Draggable","StatefulWidget","Widget"],"desc":"使其子项从长按开始可拖动。","fields":[{"name":"hapticFeedbackOnStart","type":"bool","required":true,"desc":"拖动开始时是否应触发触觉反馈。"},{"name":"delay","type":"Duration","required":true,"desc":"用户必须按下才能注册长按的持续时间。"}],"id":105,"localName":"拖拽目标","lever":4,"family":1,"linkIds":[103,104],"nodes":[{"file":"node1_base.dart","name":"LongPressDraggable与DragTarget联用","desc":["【child】 : 孩子 【Widget】","【feedback】 : 拖拽时的孩子 【Widget】","【axis】 : 拖动的轴 【Axis】","【data】 : 数据 【T】","【onDragStarted】 : 开始拖拽 【Function()】","【onDragEnd】 : 结束拖拽 【Function(DraggableDetails)】","【onDragCompleted】 : 拖拽完成 【Function()】","【onDraggableCanceled】 : 拖拽取消 【Function(Velocity,Offset)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_en-US.json b/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_en-US.json deleted file mode 100644 index 882cd5130..000000000 --- a/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LookupBoundary","path":"/src/widgets/lookup_boundary.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" A lookup boundary controls what entities are visible to descendants of the boundary via the static lookup methods provided by the boundary.","fields":[],"id":439,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_zh-CN.json b/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_zh-CN.json deleted file mode 100644 index 453580e97..000000000 --- a/modules/widget_system/widgets/doc/widgets/LookupBoundary/LookupBoundary_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"LookupBoundary","path":"/src/widgets/lookup_boundary.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"查找边界控制通过边界提供的静态查找方法对边界后代可见的实体。","fields":[],"id":439,"localName":"LookupBoundary","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_en-US.json b/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_en-US.json deleted file mode 100644 index 407724ee6..000000000 --- a/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Magnifier","path":"/src/material/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":" A Material-styled magnifying glass.","fields":[{"name":"additionalFocalPointOffset","type":"Offset","required":true,"desc":"Any additional offset the focal point requires to \"point\" to the correct place."},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"The border radius for this magnifier."},{"name":"filmColor","type":"Color","required":true,"desc":"The color to tint the image in this [Magnifier]."},{"name":"shadows","type":"List","required":true,"desc":"A list of shadows cast by the [Magnifier]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"Whether and how to clip the [shadows] that render inside the loupe."},{"name":"size","type":"Size","required":true,"desc":"The [Size] of this [Magnifier]."}],"id":440,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_zh-CN.json deleted file mode 100644 index 96c8eea4c..000000000 --- a/modules/widget_system/widgets/doc/widgets/Magnifier/Magnifier_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Magnifier","path":"/src/material/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":"Material 样式的放大镜。","fields":[{"name":"additionalFocalPointOffset","type":"Offset","required":true,"desc":"焦点需要"},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"此放大镜的边框半径。"},{"name":"filmColor","type":"Color","required":true,"desc":"在此 [Magnifier] 中为图像着色的颜色。"},{"name":"shadows","type":"List","required":true,"desc":"[Magnifier] 投射的阴影列表。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"是否以及如何裁剪在放大镜内渲染的 [shadows]。"},{"name":"size","type":"Size","required":true,"desc":"此 [Magnifier] 的 [Size]。"}],"id":440,"localName":"Magnifier","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Material/Material_en-US.json b/modules/widget_system/widgets/doc/widgets/Material/Material_en-US.json deleted file mode 100644 index 8d144dd7a..000000000 --- a/modules/widget_system/widgets/doc/widgets/Material/Material_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Material","path":"/src/material/material.dart","parents":["StatefulWidget","Widget"],"desc":" A piece of material.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"type","type":"MaterialType","required":true,"desc":"The kind of material to show (e.g., card or canvas). This affects the shape of the widget, the roundness of its corners if the shape is rectangular, and the default color."},{"name":"elevation","type":"double","required":true,"desc":"{@template flutter.material.material.elevation} The z-coordinate at which to place this material relative to its parent."},{"name":"color","type":"Color?","desc":"The color to paint the material."},{"name":"shadowColor","type":"Color?","desc":"The color to paint the shadow below the material."},{"name":"surfaceTintColor","type":"Color?","desc":"The color of the surface tint overlay applied to the material color to indicate elevation."},{"name":"textStyle","type":"TextStyle?","desc":"The typographical style to use for text within this material."},{"name":"shape","type":"ShapeBorder?","desc":"Defines the material's shape as well its shadow."},{"name":"borderOnForeground","type":"bool","required":true,"desc":"Whether to paint the [shape] border in front of the [child]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@template flutter.material.Material.clipBehavior} The content will be clipped (or not) according to this option."},{"name":"animationDuration","type":"Duration","required":true,"desc":"Defines the duration of animated changes for [shape], [elevation], [shadowColor], [surfaceTintColor] and the elevation overlay if it is applied."},{"name":"borderRadius","type":"BorderRadiusGeometry?","desc":"If non-null, the corners of this box are rounded by this [BorderRadiusGeometry] value."}],"id":160,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Material","desc":["【child】 : Child Component 【Widget】","【type】 : Type 【MaterialType】","【elevation】 : Elevation 【double】","【shadowColor】 : Shadow Color 【Color】","【color】 : Color 【Color】"]},{"file":"node2_shape.dart","name":"Shape Property of Material","desc":["【shape】 : Shape 【ShapeBorder】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Material/Material_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Material/Material_zh-CN.json deleted file mode 100644 index c658ddce3..000000000 --- a/modules/widget_system/widgets/doc/widgets/Material/Material_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Material","path":"/src/material/material.dart","parents":["StatefulWidget","Widget"],"desc":"一块材料。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"type","type":"MaterialType","required":true,"desc":"要显示的材料类型(例如,卡片或画布)。这影响小部件的形状、如果形状是矩形则影响其角的圆度以及默认颜色。"},{"name":"elevation","type":"double","required":true,"desc":"{@template flutter.material.material.elevation} 相对于其父级放置此材料的 z 坐标。"},{"name":"color","type":"Color?","desc":"绘制材料的颜色。"},{"name":"shadowColor","type":"Color?","desc":"绘制材料下方阴影的颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"应用于材料颜色以指示高度的表面色调覆盖的颜色。"},{"name":"textStyle","type":"TextStyle?","desc":"用于此材料内文本的排版样式。"},{"name":"shape","type":"ShapeBorder?","desc":"定义材料的形状及其阴影。"},{"name":"borderOnForeground","type":"bool","required":true,"desc":"是否在 [child] 前面绘制 [shape] 边框。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@template flutter.material.Material.clipBehavior} 内容将根据此选项进行裁剪(或不裁剪)。"},{"name":"animationDuration","type":"Duration","required":true,"desc":"定义 [shape]、[elevation]、[shadowColor]、[surfaceTintColor] 和高度覆盖(如果应用)的动画更改持续时间。"},{"name":"borderRadius","type":"BorderRadiusGeometry?","desc":"如果非空,此框的角由此 [BorderRadiusGeometry] 值圆化。"}],"id":160,"localName":"材料组件","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Material基本使用","desc":["【child】 : 子组件 【Widget】","【type】 : 类型 【MaterialType】","【elevation】 : 影深 【double】","【shadowColor】 : 阴影颜色 【Color】","【color】 : 颜色 【Color】"]},{"file":"node2_shape.dart","name":"Material的shape属性","desc":["【shape】 : 形状 【ShapeBorder】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_en-US.json b/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_en-US.json deleted file mode 100644 index 5d0404693..000000000 --- a/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MaterialApp","path":"/src/material/app.dart","parents":["StatefulWidget","Widget"],"desc":" An application that uses Material Design.","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@macro flutter.widgets.widgetsApp.navigatorKey}"},{"name":"scaffoldMessengerKey","type":"GlobalKey?","desc":"A key to use when building the [ScaffoldMessenger]."},{"name":"home","type":"Widget?","desc":"{@macro flutter.widgets.widgetsApp.home}"},{"name":"routes","type":"Map?","desc":"The application's top-level routing table."},{"name":"initialRoute","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.initialRoute}"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateRoute}"},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateInitialRoutes}"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onUnknownRoute}"},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@macro flutter.widgets.widgetsApp.onNavigationNotification}"},{"name":"navigatorObservers","type":"List?","desc":"{@macro flutter.widgets.widgetsApp.navigatorObservers}"},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationProvider}"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationParser}"},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@macro flutter.widgets.widgetsApp.routerDelegate}"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@macro flutter.widgets.widgetsApp.backButtonDispatcher}"},{"name":"routerConfig","type":"RouterConfig?","desc":"{@macro flutter.widgets.widgetsApp.routerConfig}"},{"name":"builder","type":"TransitionBuilder?","desc":"{@macro flutter.widgets.widgetsApp.builder}"},{"name":"title","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.title}"},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateTitle}"},{"name":"theme","type":"ThemeData?","desc":"Default visual properties, like colors fonts and shapes, for this app's material widgets."},{"name":"darkTheme","type":"ThemeData?","desc":"The [ThemeData] to use when a 'dark mode' is requested by the system."},{"name":"highContrastTheme","type":"ThemeData?","desc":"The [ThemeData] to use when 'high contrast' is requested by the system."},{"name":"highContrastDarkTheme","type":"ThemeData?","desc":"The [ThemeData] to use when a 'dark mode' and 'high contrast' is requested by the system."},{"name":"themeMode","type":"ThemeMode?","desc":"Determines which theme will be used by the application if both [theme] and [darkTheme] are provided."},{"name":"themeAnimationDuration","type":"Duration","required":true,"desc":"The duration of animated theme changes."},{"name":"themeAnimationCurve","type":"Curve","required":true,"desc":"The curve to apply when animating theme changes."},{"name":"color","type":"Color?","desc":"{@macro flutter.widgets.widgetsApp.color}"},{"name":"locale","type":"Locale?","desc":"{@macro flutter.widgets.widgetsApp.locale}"},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@macro flutter.widgets.widgetsApp.localizationsDelegates}"},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.LocaleResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@macro flutter.widgets.widgetsApp.supportedLocales}"},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"Turns on a performance overlay."},{"name":"checkerboardRasterCacheImages","type":"bool","required":true,"desc":"Turns on checkerboarding of raster cache images."},{"name":"checkerboardOffscreenLayers","type":"bool","required":true,"desc":"Turns on checkerboarding of layers rendered to offscreen bitmaps."},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"Turns on an overlay that shows the accessibility information reported by the framework."},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.debugShowCheckedModeBanner}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.widgetsApp.shortcuts} {@tool snippet} This example shows how to add a single shortcut for [LogicalKeyboardKey.select] to the default shortcuts without needing to add your own [Shortcuts] widget."},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.widgetsApp.actions} {@tool snippet} This example shows how to add a single action handling an [ActivateAction] to the default actions without needing to add your own [Actions] widget."},{"name":"restorationScopeId","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.restorationScopeId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.material.materialApp.scrollBehavior} The default [ScrollBehavior] for the application."},{"name":"debugShowMaterialGrid","type":"bool","required":true,"desc":"Turns on a [GridPaper] overlay that paints a baseline grid Material apps."},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.useInheritedMediaQuery}"},{"name":"themeAnimationStyle","type":"AnimationStyle?","desc":"Used to override the theme animation curve and duration."}],"id":65,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of MaterialApp","desc":["【theme】 : Theme 【ThemeData】","【title】 : Taskbar Title 【String】","【debugShowCheckedModeBanner】 : Enable Badge 【bool】","【showPerformanceOverlay】 : Enable Performance Overlay 【bool】","【debugShowMaterialGrid】 : Enable Grid 【bool】","【onGenerateRoute】 : Route Generator 【RouteFactory】","【home】 : Home Page 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_zh-CN.json deleted file mode 100644 index 68cce7301..000000000 --- a/modules/widget_system/widgets/doc/widgets/MaterialApp/MaterialApp_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MaterialApp","path":"/src/material/app.dart","parents":["StatefulWidget","Widget"],"desc":"使用 Material Design 的应用程序。","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@macro flutter.widgets.widgetsApp.navigatorKey}"},{"name":"scaffoldMessengerKey","type":"GlobalKey?","desc":"构建 [ScaffoldMessenger] 时使用的键。"},{"name":"home","type":"Widget?","desc":"{@macro flutter.widgets.widgetsApp.home}"},{"name":"routes","type":"Map?","desc":"应用程序的顶级路由表。"},{"name":"initialRoute","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.initialRoute}"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateRoute}"},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateInitialRoutes}"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@macro flutter.widgets.widgetsApp.onUnknownRoute}"},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@macro flutter.widgets.widgetsApp.onNavigationNotification}"},{"name":"navigatorObservers","type":"List?","desc":"{@macro flutter.widgets.widgetsApp.navigatorObservers}"},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationProvider}"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@macro flutter.widgets.widgetsApp.routeInformationParser}"},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@macro flutter.widgets.widgetsApp.routerDelegate}"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@macro flutter.widgets.widgetsApp.backButtonDispatcher}"},{"name":"routerConfig","type":"RouterConfig?","desc":"{@macro flutter.widgets.widgetsApp.routerConfig}"},{"name":"builder","type":"TransitionBuilder?","desc":"{@macro flutter.widgets.widgetsApp.builder}"},{"name":"title","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.title}"},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@macro flutter.widgets.widgetsApp.onGenerateTitle}"},{"name":"theme","type":"ThemeData?","desc":"此应用程序的 material 小部件的默认视觉属性,如颜色字体和形状。"},{"name":"darkTheme","type":"ThemeData?","desc":"系统请求"},{"name":"highContrastTheme","type":"ThemeData?","desc":"系统请求"},{"name":"highContrastDarkTheme","type":"ThemeData?","desc":"系统请求"},{"name":"themeMode","type":"ThemeMode?","desc":"如果同时提供 [theme] 和 [darkTheme],确定应用程序将使用哪个主题。"},{"name":"themeAnimationDuration","type":"Duration","required":true,"desc":"动画主题更改的持续时间。"},{"name":"themeAnimationCurve","type":"Curve","required":true,"desc":"动画主题更改时应用的曲线。"},{"name":"color","type":"Color?","desc":"{@macro flutter.widgets.widgetsApp.color}"},{"name":"locale","type":"Locale?","desc":"{@macro flutter.widgets.widgetsApp.locale}"},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@macro flutter.widgets.widgetsApp.localizationsDelegates}"},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.LocaleResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@macro flutter.widgets.widgetsApp.supportedLocales}"},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"打开性能覆盖。"},{"name":"checkerboardRasterCacheImages","type":"bool","required":true,"desc":"打开光栅缓存图像的棋盘格。"},{"name":"checkerboardOffscreenLayers","type":"bool","required":true,"desc":"打开渲染到离屏位图的图层的棋盘格。"},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"打开显示框架报告的辅助功能信息的覆盖。"},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.debugShowCheckedModeBanner}"},{"name":"shortcuts","type":"Map?","desc":"{@macro flutter.widgets.widgetsApp.shortcuts} {@tool snippet} 此示例显示如何在不需要添加自己的 [Shortcuts] 小部件的情况下为 [LogicalKeyboardKey.select] 添加单个快捷方式到默认快捷方式。"},{"name":"actions","type":"Map>?","desc":"{@macro flutter.widgets.widgetsApp.actions} {@tool snippet} 此示例显示如何在不需要添加自己的 [Actions] 小部件的情况下添加处理 [ActivateAction] 的单个操作到默认操作。"},{"name":"restorationScopeId","type":"String?","desc":"{@macro flutter.widgets.widgetsApp.restorationScopeId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.material.materialApp.scrollBehavior} 应用程序的默认 [ScrollBehavior]。"},{"name":"debugShowMaterialGrid","type":"bool","required":true,"desc":"打开绘制基线网格 Material 应用程序的 [GridPaper] 覆盖。"},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@macro flutter.widgets.widgetsApp.useInheritedMediaQuery}"},{"name":"themeAnimationStyle","type":"AnimationStyle?","desc":"用于覆盖主题动画曲线和持续时间。"}],"id":65,"localName":"Material应用","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MaterialApp基本用法","desc":["【theme】 : 主题 【ThemeData】","【title】 : 任务栏标题 【String】","【debugShowCheckedModeBanner】 : 开启角标 【bool】","【showPerformanceOverlay】 : 开启性能浮层 【bool】","【debugShowMaterialGrid】 : 开启网格 【bool】","【onGenerateRoute】 : 路由生成器 【RouteFactory】","【home】 : 主页 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_en-US.json b/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_en-US.json deleted file mode 100644 index eb64c5460..000000000 --- a/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MaterialBanner","path":"/src/material/banner.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design banner.","fields":[{"name":"content","type":"Widget","required":true,"desc":"The content of the [MaterialBanner]."},{"name":"contentTextStyle","type":"TextStyle?","desc":"Style for the text in the [content] of the [MaterialBanner]."},{"name":"actions","type":"List","required":true,"desc":"The set of actions that are displayed at the bottom or trailing side of the [MaterialBanner]."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place the material banner."},{"name":"leading","type":"Widget?","desc":"The (optional) leading widget of the [MaterialBanner]."},{"name":"minActionBarHeight","type":"double","required":true,"desc":"The optional minimum action bar height."},{"name":"backgroundColor","type":"Color?","desc":"The color of the surface of this [MaterialBanner]."},{"name":"surfaceTintColor","type":"Color?","desc":"The color used as an overlay on [backgroundColor] to indicate elevation."},{"name":"shadowColor","type":"Color?","desc":"The color of the shadow below the [MaterialBanner]."},{"name":"dividerColor","type":"Color?","desc":"The color of the divider."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the [content]."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"Empty space to surround the [MaterialBanner]."},{"name":"leadingPadding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the [leading] widget."},{"name":"forceActionsBelow","type":"bool","required":true,"desc":"An override to force the [actions] to be below the [content] regardless of how many there are."},{"name":"overflowAlignment","type":"OverflowBarAlignment","required":true,"desc":"The horizontal alignment of the [actions] when the [actions] laid out in a column."},{"name":"animation","type":"Animation?","desc":"The animation driving the entrance and exit of the material banner when presented by the [ScaffoldMessenger]."},{"name":"onVisible","type":"VoidCallback?","desc":"Called the first time that the material banner is visible within a [Scaffold] when presented by the [ScaffoldMessenger]."}],"id":211,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_one_btn.dart","name":"Usage of MaterialBanner in a Single Line","desc":["【content】: Middle component 【Widget】","【leading】: Left component 【Widget】","【actions】: List of right components 【List】","【padding】: Padding 【EdgeInsetsGeometry】","【forceActionsBelow】: Whether buttons are below 【bool】","【backgroundColor】: Background color 【Color】"]},{"file":"node2_two_btn.dart","name":"Usage of MaterialBanner in Two Lines","desc":["【contentTextStyle】: Style for the middle position 【TextStyle】","【leadingPadding】: Padding for the left component 【EdgeInsetsGeometry】","When the number of trailing components is greater than 1, the component structure is left-center-bottom."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_zh-CN.json deleted file mode 100644 index 33a537f5d..000000000 --- a/modules/widget_system/widgets/doc/widgets/MaterialBanner/MaterialBanner_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MaterialBanner","path":"/src/material/banner.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 横幅。","fields":[{"name":"content","type":"Widget","required":true,"desc":"[MaterialBanner] 的内容。"},{"name":"contentTextStyle","type":"TextStyle?","desc":"[MaterialBanner] 的 [content] 中文本的样式。"},{"name":"actions","type":"List","required":true,"desc":"显示在 [MaterialBanner] 底部或尾随侧的操作集。"},{"name":"elevation","type":"double?","desc":"放置 material 横幅的 z 坐标。"},{"name":"leading","type":"Widget?","desc":"[MaterialBanner] 的(可选)前导小部件。"},{"name":"minActionBarHeight","type":"double","required":true,"desc":"可选的最小操作栏高度。"},{"name":"backgroundColor","type":"Color?","desc":"此 [MaterialBanner] 表面的颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"用作 [backgroundColor] 上的覆盖以指示高度的颜色。"},{"name":"shadowColor","type":"Color?","desc":"[MaterialBanner] 下方阴影的颜色。"},{"name":"dividerColor","type":"Color?","desc":"分隔符的颜色。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"插入 [content] 的空间量。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕 [MaterialBanner] 的空白空间。"},{"name":"leadingPadding","type":"EdgeInsetsGeometry?","desc":"插入 [leading] 小部件的空间量。"},{"name":"forceActionsBelow","type":"bool","required":true,"desc":"强制 [actions] 位于 [content] 下方的覆盖,无论有多少个。"},{"name":"overflowAlignment","type":"OverflowBarAlignment","required":true,"desc":"当 [actions] 在列中布局时的水平对齐。"},{"name":"animation","type":"Animation?","desc":"由 [ScaffoldMessenger] 呈现时驱动 material 横幅进入和退出的动画。"},{"name":"onVisible","type":"VoidCallback?","desc":"由 [ScaffoldMessenger] 呈现时,material 横幅在 [Scaffold] 内首次可见时调用。"}],"id":211,"localName":"横幅组件","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_one_btn.dart","name":"MaterialBanner一行的使用","desc":["【content】 : 中间组件 【Widget】","【leading】: 左侧组件 【Widget】","【actions】: 右侧组件列表 【List】","【padding】: 内边距 【EdgeInsetsGeometry】","【forceActionsBelow】: 是否按钮在下方 【bool】","【backgroundColor】: 背景色 【Color】"]},{"file":"node2_two_btn.dart","name":"MaterialBanner两行的使用","desc":["【contentTextStyle】: 中间位置样式 【TextStyle】","【leadingPadding】: 左侧组件边距 【EdgeInsetsGeometry】","当尾部组件数量大于1,该组件结构为左中下。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_en-US.json deleted file mode 100644 index bcf5e5af8..000000000 --- a/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MaterialBannerTheme","path":"/src/material/banner_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for [MaterialBanner]s in this widget's subtree.","fields":[{"name":"data","type":"MaterialBannerThemeData?","desc":"The properties for descendant [MaterialBanner] widgets."}],"id":327,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of MaterialBannerTheme","desc":["You can specify the MaterialBannerThemeData properties to set default styles for descendant MaterialBanner components, such as background color, margins, text styles, etc. You can also use MaterialBannerTheme.of to get the theme data of MaterialBanner."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_zh-CN.json deleted file mode 100644 index 3bba15d14..000000000 --- a/modules/widget_system/widgets/doc/widgets/MaterialBannerTheme/MaterialBannerTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MaterialBannerTheme","path":"/src/material/banner_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [MaterialBanner] 定义配置的继承小部件。","fields":[{"name":"data","type":"MaterialBannerThemeData?","desc":"后代 [MaterialBanner] 小部件的属性。"}],"id":327,"localName":"横幅样式","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MaterialBannerTheme基本使用","desc":["可指定MaterialBannerThemeData数据属性为【后代】的MaterialBanner组件设置默认样式,如背景色、边距、文字样式等。也可以用MaterialBannerTheme.of获取MaterialBanner的主题数据。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_en-US.json b/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_en-US.json deleted file mode 100644 index 97c7fa085..000000000 --- a/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MaterialButton","path":"/src/material/material_button.dart","parents":["StatelessWidget","Widget"],"desc":" A utility class for building Material buttons that depend on the ambient [ButtonTheme] and [Theme].","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when the button is tapped or otherwise activated."},{"name":"onLongPress","type":"VoidCallback?","desc":"The callback that is called when the button is long-pressed."},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"Called by the underlying [InkWell] widget's [InkWell.onHighlightChanged] callback."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"textTheme","type":"ButtonTextTheme?","desc":"Defines the button's base colors, and the defaults for the button's minimum size, internal padding, and shape."},{"name":"textColor","type":"Color?","desc":"The color to use for this button's text."},{"name":"disabledTextColor","type":"Color?","desc":"The color to use for this button's text when the button is disabled."},{"name":"color","type":"Color?","desc":"The button's fill color, displayed by its [Material], while it is in its default (unpressed, [enabled]) state."},{"name":"disabledColor","type":"Color?","desc":"The fill color of the button when the button is disabled."},{"name":"splashColor","type":"Color?","desc":"The splash color of the button's [InkWell]."},{"name":"focusColor","type":"Color?","desc":"The fill color of the button's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"The fill color of the button's [Material] when a pointer is hovering over it."},{"name":"highlightColor","type":"Color?","desc":"The highlight color of the button's [InkWell]."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place this button relative to its parent."},{"name":"hoverElevation","type":"double?","desc":"The elevation for the button's [Material] when the button is [enabled] and a pointer is hovering over it."},{"name":"focusElevation","type":"double?","desc":"The elevation for the button's [Material] when the button is [enabled] and has the input focus."},{"name":"highlightElevation","type":"double?","desc":"The elevation for the button's [Material] relative to its parent when the button is [enabled] and pressed."},{"name":"disabledElevation","type":"double?","desc":"The elevation for the button's [Material] relative to its parent when the button is not [enabled]."},{"name":"colorBrightness","type":"Brightness?","desc":"The theme brightness to use for this button."},{"name":"child","type":"Widget?","desc":"The button's label."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The internal padding for the button's [child]."},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the button's layout will be."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the button's [Material]."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"animationDuration","type":"Duration?","desc":"Defines the duration of animated changes for [shape] and [elevation]."},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"Configures the minimum size of the tap target."},{"name":"minWidth","type":"double?","desc":"The smallest horizontal extent that the button will occupy."},{"name":"height","type":"double?","desc":"The vertical extent of the button."},{"name":"enableFeedback","type":"bool","required":true,"desc":"Whether detected gestures should provide acoustic and/or haptic feedback."}],"id":23,"lever":4,"family":0,"linkIds":[25,26,27,326,175],"nodes":[{"file":"node1_base.dart","name":"MaterialButton Click Event","desc":["【color】: Color 【Color】","【splashColor】: Ripple Color 【Color】","【height】: Height 【double】","【elevation】: Elevation 【double】","【child】: Child Component 【Widget】","【textColor】: Child Component Text Color 【Color】","【highlightColor】: Long Press Highlight Color 【Color】","【padding】: Padding 【EdgeInsetsGeometry】","【onPressed】: Click Event 【Function】"]},{"file":"node2_onLongPress.dart","name":"MaterialButton Long Press Event","desc":["【highlightColor】: Long Press Highlight Color 【Color】","【onLongPress】: Long Press Event 【Function】"]},{"file":"node3_shape.dart","name":"MaterialButton Custom Shape","desc":["【shape】: Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_zh-CN.json deleted file mode 100644 index 6c3d3ccd1..000000000 --- a/modules/widget_system/widgets/doc/widgets/MaterialButton/MaterialButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MaterialButton","path":"/src/material/material_button.dart","parents":["StatelessWidget","Widget"],"desc":"用于构建依赖于环境 [ButtonTheme] 和 [Theme] 的 Material 按钮的实用类。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用的回调。"},{"name":"onLongPress","type":"VoidCallback?","desc":"长按按钮时调用的回调。"},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"由底层 [InkWell] 小部件的 [InkWell.onHighlightChanged] 回调调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"textTheme","type":"ButtonTextTheme?","desc":"定义按钮的基本颜色,以及按钮的最小大小、内部内边距和形状的默认值。"},{"name":"textColor","type":"Color?","desc":"用于此按钮文本的颜色。"},{"name":"disabledTextColor","type":"Color?","desc":"按钮禁用时用于此按钮文本的颜色。"},{"name":"color","type":"Color?","desc":"按钮处于默认(未按下、[enabled])状态时,由其 [Material] 显示的按钮填充颜色。"},{"name":"disabledColor","type":"Color?","desc":"按钮禁用时的填充颜色。"},{"name":"splashColor","type":"Color?","desc":"按钮的 [InkWell] 的飞溅颜色。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时其 [Material] 的填充颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在按钮上时其 [Material] 的填充颜色。"},{"name":"highlightColor","type":"Color?","desc":"按钮的 [InkWell] 的高亮颜色。"},{"name":"elevation","type":"double?","desc":"相对于其父级放置此按钮的 z 坐标。"},{"name":"hoverElevation","type":"double?","desc":"按钮 [enabled] 且指针悬停在其上时按钮的 [Material] 的高度。"},{"name":"focusElevation","type":"double?","desc":"按钮 [enabled] 且具有输入焦点时按钮的 [Material] 的高度。"},{"name":"highlightElevation","type":"double?","desc":"按钮 [enabled] 且被按下时按钮的 [Material] 相对于其父级的高度。"},{"name":"disabledElevation","type":"double?","desc":"按钮未 [enabled] 时按钮的 [Material] 相对于其父级的高度。"},{"name":"colorBrightness","type":"Brightness?","desc":"用于此按钮的主题亮度。"},{"name":"child","type":"Widget?","desc":"按钮的标签。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"按钮的 [child] 的内部内边距。"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义按钮布局的紧凑程度。"},{"name":"shape","type":"ShapeBorder?","desc":"按钮的 [Material] 的形状。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"animationDuration","type":"Duration?","desc":"定义 [shape] 和 [elevation] 动画更改的持续时间。"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"配置点击目标的最小大小。"},{"name":"minWidth","type":"double?","desc":"按钮将占用的最小水平范围。"},{"name":"height","type":"double?","desc":"按钮的垂直范围。"},{"name":"enableFeedback","type":"bool","required":true,"desc":"检测到的手势是否应提供声音和/或触觉反馈。"}],"id":23,"localName":"材料按钮","lever":4,"family":0,"linkIds":[25,26,27,326,175],"nodes":[{"file":"node1_base.dart","name":"MaterialButton点击事件","desc":["【color】: 颜色 【Color】","【splashColor】: 水波纹颜色 【Color】","【height】: 高 【double】","【elevation】: 影深 【double】","【child】: 子组件 【Widget】","【textColor】: 子组件文字颜色 【Color】","【highlightColor】: 长按高亮色 【Color】","【padding】: 内边距 【EdgeInsetsGeometry】","【onPressed】: 点击事件 【Function】"]},{"file":"node2_onLongPress.dart","name":"MaterialButton长按事件","desc":["【highlightColor】: 长按高亮色 【Color】","【onLongPress】: 长按事件 【Function】"]},{"file":"node3_shape.dart","name":"MaterialButton的自定义形状","desc":["【shape】: 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_en-US.json deleted file mode 100644 index 1d7623b75..000000000 --- a/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MatrixTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animates the [Matrix4] of a transformed widget.","fields":[{"name":"onTransform","type":"TransformCallback","required":true,"desc":"The callback to compute a [Matrix4] from the [animation]. It's called every time [animation] changes its value."},{"name":"alignment","type":"Alignment","required":true,"desc":"The alignment of the origin of the coordinate system in which the transform takes place, relative to the size of the box."},{"name":"filterQuality","type":"FilterQuality?","desc":"The filter quality with which to apply the transform as a bitmap operation."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":441,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_zh-CN.json deleted file mode 100644 index 09a1ec645..000000000 --- a/modules/widget_system/widgets/doc/widgets/MatrixTransition/MatrixTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MatrixTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"对变换小部件的 [Matrix4] 进行动画处理。","fields":[{"name":"onTransform","type":"TransformCallback","required":true,"desc":"从 [animation] 计算 [Matrix4] 的回调。每次 [animation] 更改其值时都会调用它。"},{"name":"alignment","type":"Alignment","required":true,"desc":"变换发生的坐标系原点相对于框大小的对齐方式。"},{"name":"filterQuality","type":"FilterQuality?","desc":"将变换作为位图操作应用的过滤质量。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":441,"localName":"MatrixTransition","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_en-US.json b/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_en-US.json deleted file mode 100644 index 76b09f5cf..000000000 --- a/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MediaQuery","path":"/src/widgets/media_query.dart","parents":["InheritedModel","InheritedWidget","ProxyWidget","Widget"],"desc":" Establishes a subtree in which media queries resolve to the given data.","fields":[{"name":"data","type":"MediaQueryData","required":true,"desc":"Contains information about the current media."}],"id":167,"lever":4,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MediaQuery Get Data Information","desc":["MediaQuery.of(context) can obtain MediaQueryData"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_zh-CN.json deleted file mode 100644 index 08a530876..000000000 --- a/modules/widget_system/widgets/doc/widgets/MediaQuery/MediaQuery_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MediaQuery","path":"/src/widgets/media_query.dart","parents":["InheritedModel","InheritedWidget","ProxyWidget","Widget"],"desc":"建立一个子树,其中媒体查询解析为给定数据。","fields":[{"name":"data","type":"MediaQueryData","required":true,"desc":"包含有关当前媒体的信息。"}],"id":167,"localName":"媒体查询","lever":4,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MediaQuery获取数据信息","desc":["MediaQuery.of(context)可以获取MediaQueryData"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_en-US.json deleted file mode 100644 index 0d23640af..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuAcceleratorCallbackBinding","path":"/src/material/menu_anchor.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An [InheritedWidget] that provides a descendant [MenuAcceleratorLabel] with the function to invoke when the accelerator is pressed.","fields":[{"name":"onInvoke","type":"VoidCallback?","desc":"The function that pressing the accelerator defined in a descendant [MenuAcceleratorLabel] will invoke."},{"name":"hasSubmenu","type":"bool","required":true,"desc":"Whether or not the associated label will host its own submenu or not."}],"id":442,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_zh-CN.json deleted file mode 100644 index 8ee542850..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorCallbackBinding/MenuAcceleratorCallbackBinding_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuAcceleratorCallbackBinding","path":"/src/material/menu_anchor.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为后代 [MenuAcceleratorLabel] 提供按下加速器时调用的函数的 [InheritedWidget]。","fields":[{"name":"onInvoke","type":"VoidCallback?","desc":"按下后代 [MenuAcceleratorLabel] 中定义的加速器将调用的函数。"},{"name":"hasSubmenu","type":"bool","required":true,"desc":"关联的标签是否将托管自己的子菜单。"}],"id":442,"localName":"MenuAcceleratorCallbackBinding","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_en-US.json deleted file mode 100644 index 2c39aa07a..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuAcceleratorLabel","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that draws the label text for a menu item (typically a [MenuItemButton] or [SubmenuButton]) and renders its child with information about the currently active keyboard accelerator.","fields":[{"name":"label","type":"String","required":true,"desc":"The label string that should be displayed."},{"name":"builder","type":"MenuAcceleratorChildBuilder","required":true,"desc":"The optional [MenuAcceleratorChildBuilder] which is used to build the widget that displays the label itself."}],"id":443,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_zh-CN.json deleted file mode 100644 index 15eea1c1f..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuAcceleratorLabel/MenuAcceleratorLabel_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuAcceleratorLabel","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"为菜单项(通常是 [MenuItemButton] 或 [SubmenuButton])绘制标签文本并使用有关当前活动键盘加速器的信息渲染其子项的小部件。","fields":[{"name":"label","type":"String","required":true,"desc":"应显示的标签字符串。"},{"name":"builder","type":"MenuAcceleratorChildBuilder","required":true,"desc":"用于构建显示标签本身的小部件的可选 [MenuAcceleratorChildBuilder]。"}],"id":443,"localName":"MenuAcceleratorLabel","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_en-US.json deleted file mode 100644 index 14f59d96a..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuAnchor","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A widget used to mark the \"anchor\" for a set of submenus, defining the rectangle used to position the menu, which can be done either with an explicit location, or with an alignment.","fields":[{"name":"controller","type":"MenuController?","desc":"An optional controller that allows opening and closing of the menu from other widgets."},{"name":"childFocusNode","type":"FocusNode?","desc":"The [childFocusNode] attribute is the optional [FocusNode] also associated to the [child] or [builder] widget that opens the menu."},{"name":"style","type":"MenuStyle?","desc":"The [MenuStyle] that defines the visual attributes of the menu bar."},{"name":"alignmentOffset","type":"Offset?","desc":"{@template flutter.material.MenuAnchor.alignmentOffset} The offset of the menu relative to the alignment origin determined by [MenuStyle.alignment] on the [style] attribute and the ambient [Directionality]."},{"name":"layerLink","type":"LayerLink?","desc":"An optional [LayerLink] to attach the menu to the widget that this [MenuAnchor] surrounds."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"anchorTapClosesMenu","type":"bool","required":true,"desc":"Whether the menus will be closed if the anchor area is tapped."},{"name":"consumeOutsideTap","type":"bool","required":true,"desc":"Whether or not a tap event that closes the menu will be permitted to continue on to the gesture arena."},{"name":"onOpen","type":"VoidCallback?","desc":"A callback that is invoked when the menu is opened."},{"name":"onClose","type":"VoidCallback?","desc":"A callback that is invoked when the menu is closed."},{"name":"crossAxisUnconstrained","type":"bool","required":true,"desc":"Determine if the menu panel can be wrapped by a [UnconstrainedBox] which allows the panel to render at its \"natural\" size."},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@macro flutter.widgets.RawMenuAnchor.useRootOverlay}"},{"name":"menuChildren","type":"List","required":true,"desc":"A list of children containing the menu items that are the contents of the menu surrounded by this [MenuAnchor]."},{"name":"builder","type":"MenuAnchorChildBuilder?","desc":"The widget that this [MenuAnchor] surrounds."},{"name":"child","type":"Widget?","desc":"The optional child to be passed to the [builder]."}],"id":444,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_zh-CN.json deleted file mode 100644 index a1b377078..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuAnchor/MenuAnchor_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuAnchor","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"用于标记一组子菜单的\"锚点\"的小部件,定义用于定位菜单的矩形,可以使用显式位置或对齐方式完成。","fields":[{"name":"controller","type":"MenuController?","desc":"允许从其他小部件打开和关闭菜单的可选控制器。"},{"name":"childFocusNode","type":"FocusNode?","desc":"[childFocusNode] 属性是与打开菜单的 [child] 或 [builder] 小部件关联的可选 [FocusNode]。"},{"name":"style","type":"MenuStyle?","desc":"定义菜单栏视觉属性的 [MenuStyle]。"},{"name":"alignmentOffset","type":"Offset?","desc":"{@template flutter.material.MenuAnchor.alignmentOffset} 菜单相对于由 [style] 属性上的 [MenuStyle.alignment] 和环境 [Directionality] 确定的对齐原点的偏移。"},{"name":"layerLink","type":"LayerLink?","desc":"将菜单附加到此 [MenuAnchor] 围绕的小部件的可选 [LayerLink]。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"anchorTapClosesMenu","type":"bool","required":true,"desc":"如果点击锚点区域,菜单是否会关闭。"},{"name":"consumeOutsideTap","type":"bool","required":true,"desc":"关闭菜单的点击事件是否被允许继续到手势竞技场。"},{"name":"onOpen","type":"VoidCallback?","desc":"菜单打开时调用的回调。"},{"name":"onClose","type":"VoidCallback?","desc":"菜单关闭时调用的回调。"},{"name":"crossAxisUnconstrained","type":"bool","required":true,"desc":"确定菜单面板是否可以被 [UnconstrainedBox] 包装,这允许面板以其"},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@macro flutter.widgets.RawMenuAnchor.useRootOverlay}"},{"name":"menuChildren","type":"List","required":true,"desc":"包含菜单项的子项列表,这些菜单项是此 [MenuAnchor] 围绕的菜单的内容。"},{"name":"builder","type":"MenuAnchorChildBuilder?","desc":"此 [MenuAnchor] 围绕的小部件。"},{"name":"child","type":"Widget?","desc":"传递给 [builder] 的可选子项。"}],"id":444,"localName":"MenuAnchor","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_en-US.json deleted file mode 100644 index 34e624a72..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuBar","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":" A menu bar that manages cascading child menus.","fields":[{"name":"style","type":"MenuStyle?","desc":"The [MenuStyle] that defines the visual attributes of the menu bar."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"controller","type":"MenuController?","desc":"The [MenuController] to use for this menu bar."},{"name":"children","type":"List","required":true,"desc":"The list of menu items that are the top level children of the [MenuBar]."}],"id":445,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_zh-CN.json deleted file mode 100644 index da40df364..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuBar/MenuBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuBar","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":"管理级联子菜单的菜单栏。","fields":[{"name":"style","type":"MenuStyle?","desc":"定义菜单栏视觉属性的 [MenuStyle]。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"controller","type":"MenuController?","desc":"用于此菜单栏的 [MenuController]。"},{"name":"children","type":"List","required":true,"desc":"作为 [MenuBar] 顶级子项的菜单项列表。"}],"id":445,"localName":"MenuBar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_en-US.json deleted file mode 100644 index a1552483f..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuBarTheme","path":"/src/material/menu_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for the [MenuBar] widgets in this widget's descendants.","fields":[{"name":"data","type":"MenuBarThemeData","required":true,"desc":"The properties to set for [MenuBar] in this widget's descendants."}],"id":446,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_zh-CN.json deleted file mode 100644 index ee9011166..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuBarTheme/MenuBarTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuBarTheme","path":"/src/material/menu_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件后代中的 [MenuBar] 小部件定义配置的继承小部件。","fields":[{"name":"data","type":"MenuBarThemeData","required":true,"desc":"为此小部件后代中的 [MenuBar] 设置的属性。"}],"id":446,"localName":"MenuBarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_en-US.json deleted file mode 100644 index ac2ae8de2..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuButtonTheme","path":"/src/material/menu_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [MenuItemButton] and [SubmenuButton] descendants.","fields":[{"name":"data","type":"MenuButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":447,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_zh-CN.json deleted file mode 100644 index cb9a256e1..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuButtonTheme/MenuButtonTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuButtonTheme","path":"/src/material/menu_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [MenuItemButton] 和 [SubmenuButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"MenuButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":447,"localName":"MenuButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_en-US.json deleted file mode 100644 index eff2b4244..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuItemButton","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A button for use in a [MenuBar], in a menu created with [MenuAnchor], or on its own, that can be activated by click or keyboard navigation.","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"Called when the button is tapped or otherwise activated."},{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the button response area."},{"name":"requestFocusOnHover","type":"bool","required":true,"desc":"Determine if hovering can request focus."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"The optional shortcut that selects this [MenuItemButton]."},{"name":"semanticsLabel","type":"String?","desc":"An optional Semantics label, applied to the entire [MenuItemButton]."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"leadingIcon","type":"Widget?","desc":"An optional icon to display before the [child] label."},{"name":"trailingIcon","type":"Widget?","desc":"An optional icon to display after the [child] label."},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@template flutter.material.menu_anchor.closeOnActivate} Determines if the menu will be closed when a [MenuItemButton] is pressed."},{"name":"overflowAxis","type":"Axis","required":true,"desc":"The direction in which the menu item expands."},{"name":"child","type":"Widget?","desc":"The widget displayed in the center of this button."}],"id":448,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_zh-CN.json deleted file mode 100644 index b2ba313ad..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuItemButton/MenuItemButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuItemButton","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"用于 [MenuBar]、使用 [MenuAnchor] 创建的菜单或单独使用的按钮,可以通过点击或键盘导航激活。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用。"},{"name":"onHover","type":"ValueChanged?","desc":"指针进入或退出按钮响应区域时调用。"},{"name":"requestFocusOnHover","type":"bool","required":true,"desc":"确定悬停是否可以请求焦点。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点更改时调用的处理程序。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"选择此 [MenuItemButton] 的可选快捷方式。"},{"name":"semanticsLabel","type":"String?","desc":"应用于整个 [MenuItemButton] 的可选语义标签。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"leadingIcon","type":"Widget?","desc":"在 [child] 标签前显示的可选图标。"},{"name":"trailingIcon","type":"Widget?","desc":"在 [child] 标签后显示的可选图标。"},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@template flutter.material.menu_anchor.closeOnActivate} 确定按下 [MenuItemButton] 时菜单是否会关闭。"},{"name":"overflowAxis","type":"Axis","required":true,"desc":"菜单项展开的方向。"},{"name":"child","type":"Widget?","desc":"显示在此按钮中心的小部件。"}],"id":448,"localName":"MenuItemButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_en-US.json deleted file mode 100644 index dd80645f1..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuTheme","path":"/src/material/menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration in this widget's descendants for menus created by the [SubmenuButton], [MenuBar], or [MenuAnchor] widgets.","fields":[{"name":"data","type":"MenuThemeData","required":true,"desc":"The properties for [MenuBar] and [MenuItemButton] in this widget's descendants."}],"id":449,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_zh-CN.json deleted file mode 100644 index bf8d1190c..000000000 --- a/modules/widget_system/widgets/doc/widgets/MenuTheme/MenuTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MenuTheme","path":"/src/material/menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件后代中由 [SubmenuButton]、[MenuBar] 或 [MenuAnchor] 小部件创建的菜单定义配置的继承小部件。","fields":[{"name":"data","type":"MenuThemeData","required":true,"desc":"此小部件后代中 [MenuBar] 和 [MenuItemButton] 的属性。"}],"id":449,"localName":"MenuTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_en-US.json b/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_en-US.json deleted file mode 100644 index 8aa4a7767..000000000 --- a/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MergeSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that merges the semantics of its descendants.","fields":[],"id":450,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_zh-CN.json deleted file mode 100644 index e0c3568bf..000000000 --- a/modules/widget_system/widgets/doc/widgets/MergeSemantics/MergeSemantics_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MergeSemantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"合并其后代语义的小部件。","fields":[],"id":450,"localName":"MergeSemantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_en-US.json b/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_en-US.json deleted file mode 100644 index 1083f89c3..000000000 --- a/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MergeableMaterial","path":"/src/material/mergeable_material.dart","parents":["StatefulWidget","Widget"],"desc":" Displays a list of [MergeableMaterialItem] children. The list contains [MaterialSlice] items whose boundaries are either \"merged\" with adjacent items or separated by a [MaterialGap]. The [children] are distributed along the given [mainAxis] in the same way as the children of a [ListBody]. When the list of children changes, gaps are automatically animated open or closed as needed.","fields":[{"name":"children","type":"List","required":true,"desc":"The children of the [MergeableMaterial]."},{"name":"mainAxis","type":"Axis","required":true,"desc":"The main layout axis."},{"name":"elevation","type":"double","required":true,"desc":"The z-coordinate at which to place all the [Material] slices."},{"name":"hasDividers","type":"bool","required":true,"desc":"Whether connected pieces of [MaterialSlice] have dividers between them."},{"name":"dividerColor","type":"Color?","desc":"Defines color used for dividers if [hasDividers] is true."}],"id":261,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of MergeableMaterial","desc":["【elevation】 : Shadow depth 【double】","【hasDividers】 : Whether there are dividers 【bool】","【dividerColor】 : Divider color 【Color】","【mainAxis】 : Axis direction 【Axis】","【children】 : Child components collection 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_zh-CN.json deleted file mode 100644 index 55b3822ca..000000000 --- a/modules/widget_system/widgets/doc/widgets/MergeableMaterial/MergeableMaterial_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MergeableMaterial","path":"/src/material/mergeable_material.dart","parents":["StatefulWidget","Widget"],"desc":"显示 [MergeableMaterialItem] 子项列表。该列表包含 [MaterialSlice] 项,其边界要么与相邻项\"合并\",要么由 [MaterialGap] 分隔。[children] 沿给定的 [mainAxis] 分布,方式与 [ListBody] 的子项相同。当子项列表更改时,间隙会根据需要自动动画打开或关闭。","fields":[{"name":"children","type":"List","required":true,"desc":"[MergeableMaterial] 的子项。"},{"name":"mainAxis","type":"Axis","required":true,"desc":"主要布局轴。"},{"name":"elevation","type":"double","required":true,"desc":"放置所有 [Material] 切片的 z 坐标。"},{"name":"hasDividers","type":"bool","required":true,"desc":"[MaterialSlice] 的连接片段之间是否有分隔符。"},{"name":"dividerColor","type":"Color?","desc":"如果 [hasDividers] 为 true,定义用于分隔符的颜色。"}],"id":261,"localName":"可合并材料","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MergeableMaterial基本使用","desc":["【elevation】 : 影深 【double】","【hasDividers】 : 是否有分隔线 【bool】","【dividerColor】 : 分隔线颜色 【Color】","【mainAxis】 : 轴向 【Axis】","【children】 : 子组件集 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_en-US.json b/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_en-US.json deleted file mode 100644 index 9526cccf6..000000000 --- a/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MetaData","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Holds opaque meta data in the render tree.","fields":[{"name":"metaData","type":"dynamic","required":true,"desc":"Opaque meta data ignored by the render tree."},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit testing."}],"id":451,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_zh-CN.json deleted file mode 100644 index c8d99ae03..000000000 --- a/modules/widget_system/widgets/doc/widgets/MetaData/MetaData_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MetaData","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在渲染树中保存不透明元数据。","fields":[{"name":"metaData","type":"dynamic","required":true,"desc":"被渲染树忽略的不透明元数据。"},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"命中测试期间的行为方式。"}],"id":451,"localName":"MetaData","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_en-US.json b/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_en-US.json deleted file mode 100644 index e5922184e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ModalBarrier","path":"/src/widgets/modal_barrier.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that prevents the user from interacting with widgets behind itself.","fields":[{"name":"color","type":"Color?","desc":"If non-null, fill the barrier with this color."},{"name":"dismissible","type":"bool","required":true,"desc":"Specifies if the barrier will be dismissed when the user taps on it."},{"name":"onDismiss","type":"VoidCallback?","desc":"{@template flutter.widgets.ModalBarrier.onDismiss} Called when the barrier is being dismissed."},{"name":"barrierSemanticsDismissible","type":"bool?","desc":"Whether the modal barrier semantics are included in the semantics tree."},{"name":"semanticsLabel","type":"String?","desc":"Semantics label used for the barrier if it is [dismissible]."},{"name":"clipDetailsNotifier","type":"ValueNotifier?","desc":"{@template flutter.widgets.ModalBarrier.clipDetailsNotifier} Contains a value of type [EdgeInsets] that specifies how the [SemanticsNode.rect] of the widget should be clipped."},{"name":"semanticsOnTapHint","type":"String?","desc":"{@macro flutter.material.ModalBottomSheetRoute.barrierOnTapHint}"}],"id":212,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to ModalBarrier","desc":["【dismissible】: Whether to return when clicked 【bool】","【color】: Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_zh-CN.json deleted file mode 100644 index c41bfb2af..000000000 --- a/modules/widget_system/widgets/doc/widgets/ModalBarrier/ModalBarrier_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ModalBarrier","path":"/src/widgets/modal_barrier.dart","parents":["StatelessWidget","Widget"],"desc":"阻止用户与其后面的小部件交互的小部件。","fields":[{"name":"color","type":"Color?","desc":"如果非空,用此颜色填充屏障。"},{"name":"dismissible","type":"bool","required":true,"desc":"指定用户点击屏障时是否会被关闭。"},{"name":"onDismiss","type":"VoidCallback?","desc":"{@template flutter.widgets.ModalBarrier.onDismiss} 屏障被关闭时调用。"},{"name":"barrierSemanticsDismissible","type":"bool?","desc":"模态屏障语义是否包含在语义树中。"},{"name":"semanticsLabel","type":"String?","desc":"如果屏障是 [dismissible],用于屏障的语义标签。"},{"name":"clipDetailsNotifier","type":"ValueNotifier?","desc":"{@template flutter.widgets.ModalBarrier.clipDetailsNotifier} 包含 [EdgeInsets] 类型的值,指定小部件的 [SemanticsNode.rect] 应如何裁剪。"},{"name":"semanticsOnTapHint","type":"String?","desc":"{@macro flutter.material.ModalBottomSheetRoute.barrierOnTapHint}"}],"id":212,"localName":"屏障模","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ModalBarrier 介绍","desc":["【dismissible】 : 点击是否返回 【bool】","【color】 : 颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_en-US.json b/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_en-US.json deleted file mode 100644 index b4d53c1a3..000000000 --- a/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MouseRegion","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that tracks the movement of mice.","fields":[{"name":"onEnter","type":"PointerEnterEventListener?","desc":"Triggered when a mouse pointer has entered this widget."},{"name":"onHover","type":"PointerHoverEventListener?","desc":"Triggered when a pointer moves into a position within this widget without buttons pressed."},{"name":"onExit","type":"PointerExitEventListener?","desc":"Triggered when a mouse pointer has exited this widget when the widget is still mounted."},{"name":"cursor","type":"MouseCursor","required":true,"desc":"The mouse cursor for mouse pointers that are hovering over the region."},{"name":"opaque","type":"bool","required":true,"desc":"Whether this widget should prevent other [MouseRegion]s visually behind it from detecting the pointer."},{"name":"hitTestBehavior","type":"HitTestBehavior?","desc":"How to behave during hit testing."}],"id":293,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of MouseRegion","desc":["【onEnter】: Enter event 【PointerEnterEventListener】","【onHover】: Move event 【PointerHoverEventListener】","【onExit】: Exit event 【PointerExitEventListener】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_zh-CN.json deleted file mode 100644 index 93297b82a..000000000 --- a/modules/widget_system/widgets/doc/widgets/MouseRegion/MouseRegion_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MouseRegion","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"跟踪鼠标移动的小部件。","fields":[{"name":"onEnter","type":"PointerEnterEventListener?","desc":"鼠标指针进入此小部件时触发。"},{"name":"onHover","type":"PointerHoverEventListener?","desc":"指针在未按下按钮的情况下移动到此小部件内的位置时触发。"},{"name":"onExit","type":"PointerExitEventListener?","desc":"当小部件仍然挂载时,鼠标指针退出此小部件时触发。"},{"name":"cursor","type":"MouseCursor","required":true,"desc":"悬停在区域上的鼠标指针的鼠标光标。"},{"name":"opaque","type":"bool","required":true,"desc":"此小部件是否应阻止视觉上位于其后面的其他 [MouseRegion] 检测指针。"},{"name":"hitTestBehavior","type":"HitTestBehavior?","desc":"命中测试期间的行为方式。"}],"id":293,"localName":"鼠标区域","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"MouseRegion基本使用","desc":["【onEnter】 : 移入事件 【PointerEnterEventListener】","【onHover】: 移动事件 【PointerHoverEventListener】","【onExit】: 移出事件 【PointerExitEventListener】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_en-US.json deleted file mode 100644 index f4f15aa8e..000000000 --- a/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MultiChildRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A superclass for [RenderObjectWidget]s that configure [RenderObject] subclasses that have a single list of children. (This superclass only provides the storage for that child list, it doesn't actually provide the updating logic.)","fields":[{"name":"children","type":"List","required":true,"desc":"The widgets below this widget in the tree."}],"id":452,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_zh-CN.json deleted file mode 100644 index 50356a76d..000000000 --- a/modules/widget_system/widgets/doc/widgets/MultiChildRenderObjectWidget/MultiChildRenderObjectWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"MultiChildRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"配置具有单个子项列表的 [RenderObject] 子类的 [RenderObjectWidget] 的超类。(此超类仅提供该子项列表的存储,实际上不提供更新逻辑。)","fields":[{"name":"children","type":"List","required":true,"desc":"树中此小部件下方的小部件。"}],"id":452,"localName":"MultiChildRenderObjectWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_en-US.json deleted file mode 100644 index 8a7af743b..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationBar","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":" Material 3 Navigation Bar component.","fields":[{"name":"animationDuration","type":"Duration?","desc":"Determines the transition time for each destination as it goes between selected and unselected."},{"name":"selectedIndex","type":"int","required":true,"desc":"Determines which one of the [destinations] is currently selected."},{"name":"destinations","type":"List","required":true,"desc":"The list of destinations (usually [NavigationDestination]s) in this [NavigationBar]."},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"Called when one of the [destinations] is selected."},{"name":"backgroundColor","type":"Color?","desc":"The color of the [NavigationBar] itself."},{"name":"elevation","type":"double?","desc":"The elevation of the [NavigationBar] itself."},{"name":"shadowColor","type":"Color?","desc":"The color used for the drop shadow to indicate elevation."},{"name":"surfaceTintColor","type":"Color?","desc":"The color used as an overlay on [backgroundColor] to indicate elevation."},{"name":"indicatorColor","type":"Color?","desc":"The color of the [indicatorShape] when this destination is selected."},{"name":"indicatorShape","type":"ShapeBorder?","desc":"The shape of the selected indicator."},{"name":"height","type":"double?","desc":"The height of the [NavigationBar] itself."},{"name":"labelBehavior","type":"NavigationDestinationLabelBehavior?","desc":"Defines how the [destinations]' labels will be laid out and when they'll be displayed."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The highlight color that's typically used to indicate that the [NavigationDestination] is focused, hovered, or pressed."},{"name":"labelTextStyle","type":"MaterialStateProperty?","desc":"/ The text style of the label."},{"name":"labelPadding","type":"EdgeInsetsGeometry?","desc":"The padding around the [NavigationDestination.label] widget."},{"name":"maintainBottomViewPadding","type":"bool","required":true,"desc":"Specifies whether the underlying [SafeArea] should maintain the bottom [MediaQueryData.viewPadding] instead of the bottom [MediaQueryData.padding]."}],"id":453,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_zh-CN.json deleted file mode 100644 index 22c80b38f..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationBar/NavigationBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationBar","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":"Material 3 导航栏组件。","fields":[{"name":"animationDuration","type":"Duration?","desc":"确定每个目标在选中和未选中之间转换的过渡时间。"},{"name":"selectedIndex","type":"int","required":true,"desc":"确定当前选择了 [destinations] 中的哪一个。"},{"name":"destinations","type":"List","required":true,"desc":"此 [NavigationBar] 中的目标列表(通常是 [NavigationDestination])。"},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"选择 [destinations] 之一时调用。"},{"name":"backgroundColor","type":"Color?","desc":"[NavigationBar] 本身的颜色。"},{"name":"elevation","type":"double?","desc":"[NavigationBar] 本身的高度。"},{"name":"shadowColor","type":"Color?","desc":"用于指示高度的投影颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"用作 [backgroundColor] 上的覆盖以指示高度的颜色。"},{"name":"indicatorColor","type":"Color?","desc":"选择此目标时 [indicatorShape] 的颜色。"},{"name":"indicatorShape","type":"ShapeBorder?","desc":"选中指示器的形状。"},{"name":"height","type":"double?","desc":"[NavigationBar] 本身的高度。"},{"name":"labelBehavior","type":"NavigationDestinationLabelBehavior?","desc":"定义 [destinations] 的标签如何布局以及何时显示。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"通常用于指示 [NavigationDestination] 被聚焦、悬停或按下的高亮颜色。"},{"name":"labelTextStyle","type":"MaterialStateProperty?","desc":"标签的文本样式。"},{"name":"labelPadding","type":"EdgeInsetsGeometry?","desc":"[NavigationDestination.label] 小部件周围的内边距。"},{"name":"maintainBottomViewPadding","type":"bool","required":true,"desc":"指定底层 [SafeArea] 是否应维护底部 [MediaQueryData.viewPadding] 而不是底部 [MediaQueryData.padding]。"}],"id":453,"localName":"NavigationBar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_en-US.json deleted file mode 100644 index 1c58c9af7..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationBarTheme","path":"/src/material/navigation_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines visual properties for [NavigationBar]s and [NavigationDestination]s in this widget's subtree.","fields":[{"name":"data","type":"NavigationBarThemeData","required":true,"desc":"Specifies the background color, label text style, icon theme, and label type values for descendant [NavigationBar] widgets."}],"id":454,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_zh-CN.json deleted file mode 100644 index c1ea99857..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationBarTheme/NavigationBarTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationBarTheme","path":"/src/material/navigation_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [NavigationBar] 和 [NavigationDestination] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"NavigationBarThemeData","required":true,"desc":"为后代 [NavigationBar] 小部件指定背景颜色、标签文本样式、图标主题和标签类型值。"}],"id":454,"localName":"NavigationBarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_en-US.json deleted file mode 100644 index 864bc46b0..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationDestination","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":" A Material 3 [NavigationBar] destination.","fields":[{"name":"icon","type":"Widget","required":true,"desc":"The [Widget] (usually an [Icon]) that's displayed for this [NavigationDestination]."},{"name":"selectedIcon","type":"Widget?","desc":"The optional [Widget] (usually an [Icon]) that's displayed when this [NavigationDestination] is selected."},{"name":"label","type":"String","required":true,"desc":"The text label that appears below the icon of this [NavigationDestination]."},{"name":"tooltip","type":"String?","desc":"The text to display in the tooltip for this [NavigationDestination], when the user long presses the destination."},{"name":"enabled","type":"bool","required":true,"desc":"Indicates that this destination is selectable."}],"id":455,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_zh-CN.json deleted file mode 100644 index 394deffc7..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationDestination/NavigationDestination_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationDestination","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":"Material 3 [NavigationBar] 目标。","fields":[{"name":"icon","type":"Widget","required":true,"desc":"为此 [NavigationDestination] 显示的 [Widget](通常是 [Icon])。"},{"name":"selectedIcon","type":"Widget?","desc":"选择此 [NavigationDestination] 时显示的可选 [Widget](通常是 [Icon])。"},{"name":"label","type":"String","required":true,"desc":"出现在此 [NavigationDestination] 图标下方的文本标签。"},{"name":"tooltip","type":"String?","desc":"当用户长按目标时,在此 [NavigationDestination] 的工具提示中显示的文本。"},{"name":"enabled","type":"bool","required":true,"desc":"指示此目标是否可选择。"}],"id":455,"localName":"NavigationDestination","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_en-US.json deleted file mode 100644 index 5676ab70d..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationDrawer","path":"/src/material/navigation_drawer.dart","parents":["StatelessWidget","Widget"],"desc":" Material Design Navigation Drawer component.","fields":[{"name":"backgroundColor","type":"Color?","desc":"The background color of the [Material] that holds the [NavigationDrawer]'s contents."},{"name":"shadowColor","type":"Color?","desc":"The color used for the drop shadow to indicate elevation."},{"name":"surfaceTintColor","type":"Color?","desc":"The surface tint of the [Material] that holds the [NavigationDrawer]'s contents."},{"name":"elevation","type":"double?","desc":"The elevation of the [NavigationDrawer] itself."},{"name":"indicatorColor","type":"Color?","desc":"The color of the [indicatorShape] when this destination is selected."},{"name":"indicatorShape","type":"ShapeBorder?","desc":"The shape of the selected indicator."},{"name":"children","type":"List","required":true,"desc":"Defines the appearance of the items within the navigation drawer."},{"name":"selectedIndex","type":"int?","desc":"The index into destinations for the current selected [NavigationDrawerDestination] or null if no destination is selected."},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"Called when one of the [NavigationDrawerDestination] children is selected."},{"name":"tilePadding","type":"EdgeInsetsGeometry","required":true,"desc":"Defines the padding for [NavigationDrawerDestination] widgets (Drawer items)."}],"id":456,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_zh-CN.json deleted file mode 100644 index d6337801c..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationDrawer/NavigationDrawer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationDrawer","path":"/src/material/navigation_drawer.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 导航抽屉组件。","fields":[{"name":"backgroundColor","type":"Color?","desc":"保存 [NavigationDrawer] 内容的 [Material] 的背景颜色。"},{"name":"shadowColor","type":"Color?","desc":"用于指示高度的投影颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"保存 [NavigationDrawer] 内容的 [Material] 的表面色调。"},{"name":"elevation","type":"double?","desc":"[NavigationDrawer] 本身的高度。"},{"name":"indicatorColor","type":"Color?","desc":"选择此目标时 [indicatorShape] 的颜色。"},{"name":"indicatorShape","type":"ShapeBorder?","desc":"选中指示器的形状。"},{"name":"children","type":"List","required":true,"desc":"定义导航抽屉内项目的外观。"},{"name":"selectedIndex","type":"int?","desc":"当前选择的 [NavigationDrawerDestination] 在目标中的索引,如果没有选择目标则为 null。"},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"选择 [NavigationDrawerDestination] 子项之一时调用。"},{"name":"tilePadding","type":"EdgeInsetsGeometry","required":true,"desc":"定义 [NavigationDrawerDestination] 小部件(抽屉项)的内边距。"}],"id":456,"localName":"NavigationDrawer","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_en-US.json deleted file mode 100644 index 82a68a261..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationDrawerDestination","path":"/src/material/navigation_drawer.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design [NavigationDrawer] destination.","fields":[{"name":"backgroundColor","type":"Color?","desc":"The background color of the destination."},{"name":"icon","type":"Widget","required":true,"desc":"The [Widget] (usually an [Icon]) that's displayed for this [NavigationDestination]."},{"name":"selectedIcon","type":"Widget?","desc":"The optional [Widget] (usually an [Icon]) that's displayed when this [NavigationDestination] is selected."},{"name":"label","type":"Widget","required":true,"desc":"The text label that appears on the right of the icon"},{"name":"enabled","type":"bool","required":true,"desc":"Indicates that this destination is selectable."}],"id":457,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_zh-CN.json deleted file mode 100644 index b51118076..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationDrawerDestination/NavigationDrawerDestination_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationDrawerDestination","path":"/src/material/navigation_drawer.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design [NavigationDrawer] 目标。","fields":[{"name":"backgroundColor","type":"Color?","desc":"目标的背景颜色。"},{"name":"icon","type":"Widget","required":true,"desc":"为此 [NavigationDestination] 显示的 [Widget](通常是 [Icon])。"},{"name":"selectedIcon","type":"Widget?","desc":"选择此 [NavigationDestination] 时显示的可选 [Widget](通常是 [Icon])。"},{"name":"label","type":"Widget","required":true,"desc":"出现在图标右侧的文本标签"},{"name":"enabled","type":"bool","required":true,"desc":"指示此目标是否可选择。"}],"id":457,"localName":"NavigationDrawerDestination","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_en-US.json deleted file mode 100644 index 3782b98d1..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationDrawerTheme","path":"/src/material/navigation_drawer_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines visual properties for [NavigationDrawer]s and [NavigationDestination]s in this widget's subtree.","fields":[{"name":"data","type":"NavigationDrawerThemeData","required":true,"desc":"Specifies the background color, label text style, icon theme, and label type values for descendant [NavigationDrawer] widgets."}],"id":458,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_zh-CN.json deleted file mode 100644 index c098b8675..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationDrawerTheme/NavigationDrawerTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationDrawerTheme","path":"/src/material/navigation_drawer_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [NavigationDrawer] 和 [NavigationDestination] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"NavigationDrawerThemeData","required":true,"desc":"为后代 [NavigationDrawer] 小部件指定背景颜色、标签文本样式、图标主题和标签类型值。"}],"id":458,"localName":"NavigationDrawerTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_en-US.json deleted file mode 100644 index 9d688f305..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationIndicator","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":" Selection Indicator for the Material 3 [NavigationBar] and [NavigationRail] components.","fields":[{"name":"animation","type":"Animation","required":true,"desc":"Determines the scale of the indicator."},{"name":"color","type":"Color?","desc":"The fill color of this indicator."},{"name":"width","type":"double","required":true,"desc":"The width of this indicator."},{"name":"height","type":"double","required":true,"desc":"The height of this indicator."},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"The border radius of the shape of the indicator."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the indicator."}],"id":459,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_zh-CN.json deleted file mode 100644 index 1c2143191..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationIndicator/NavigationIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationIndicator","path":"/src/material/navigation_bar.dart","parents":["StatelessWidget","Widget"],"desc":"Material 3 [NavigationBar] 和 [NavigationRail] 组件的选择指示器。","fields":[{"name":"animation","type":"Animation","required":true,"desc":"确定指示器的比例。"},{"name":"color","type":"Color?","desc":"此指示器的填充颜色。"},{"name":"width","type":"double","required":true,"desc":"此指示器的宽度。"},{"name":"height","type":"double","required":true,"desc":"此指示器的高度。"},{"name":"borderRadius","type":"BorderRadius","required":true,"desc":"指示器形状的边框半径。"},{"name":"shape","type":"ShapeBorder?","desc":"指示器的形状。"}],"id":459,"localName":"NavigationIndicator","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_en-US.json deleted file mode 100644 index f99294773..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationRail","path":"/src/material/navigation_rail.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design widget that is meant to be displayed at the left or right of an app to navigate between a small number of views, typically between three and five.","fields":[{"name":"backgroundColor","type":"Color?","desc":"Sets the color of the Container that holds all of the [NavigationRail]'s contents."},{"name":"extended","type":"bool","required":true,"desc":"Indicates that the [NavigationRail] should be in the extended state."},{"name":"leading","type":"Widget?","desc":"The leading widget in the rail that is placed above the destinations."},{"name":"trailing","type":"Widget?","desc":"The trailing widget in the rail that is placed below the destinations."},{"name":"destinations","type":"List","required":true,"desc":"Defines the appearance of the button items that are arrayed within the navigation rail."},{"name":"selectedIndex","type":"int?","desc":"The index into [destinations] for the current selected [NavigationRailDestination] or null if no destination is selected."},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"Called when one of the [destinations] is selected."},{"name":"elevation","type":"double?","desc":"The rail's elevation or z-coordinate."},{"name":"groupAlignment","type":"double?","desc":"The vertical alignment for the group of [destinations] within the rail."},{"name":"labelType","type":"NavigationRailLabelType?","desc":"Defines the layout and behavior of the labels for the default, unextended [NavigationRail]."},{"name":"unselectedLabelTextStyle","type":"TextStyle?","desc":"The [TextStyle] of a destination's label when it is unselected."},{"name":"selectedLabelTextStyle","type":"TextStyle?","desc":"The [TextStyle] of a destination's label when it is selected."},{"name":"unselectedIconTheme","type":"IconThemeData?","desc":"The visual properties of the icon in the unselected destination."},{"name":"selectedIconTheme","type":"IconThemeData?","desc":"The visual properties of the icon in the selected destination."},{"name":"minWidth","type":"double?","desc":"The smallest possible width for the rail regardless of the destination's icon or label size."},{"name":"minExtendedWidth","type":"double?","desc":"The final width when the animation is complete for setting [extended] to true."},{"name":"useIndicator","type":"bool?","desc":"If `true`, adds a rounded [NavigationIndicator] behind the selected destination's icon."},{"name":"indicatorColor","type":"Color?","desc":"Overrides the default value of [NavigationRail]'s selection indicator color, when [useIndicator] is true."},{"name":"indicatorShape","type":"ShapeBorder?","desc":"Overrides the default value of [NavigationRail]'s selection indicator shape, when [useIndicator] is true."}],"id":358,"lever":4,"family":1,"linkIds":[60,61],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of NavigationRail","desc":["【destinations】 : Menu data list 【List】","【selectedIndex】: Active index 【int】","【labelType】: Label style 【NavigationRailLabelType?】","【onDestinationSelected】: Menu click event 【ValueChanged?】"]},{"file":"node2_extend.dart","name":"Collapse Effect of NavigationRail","desc":["【elevation】 : Shadow depth 【double】","【leading】: Leading component 【Widget?】","【trailing】: Trailing component 【Widget?】","【extended】: Whether to expand 【bool】"]},{"file":"node3_dark.dart","name":"NavigationRail Style","desc":["【useIndicator】 : Whether to show the indicator 【bool】","【indicatorColor】: Indicator color 【Color?】","【backgroundColor】: Background color 【Color?】","【labelType】: Label style 【NavigationRailLabelType?】","【selectedIconTheme】: Selected icon style 【IconThemeData?】","【unselectedIconTheme】: Unselected icon style 【IconThemeData?】","【selectedLabelTextStyle】: Selected text style 【TextStyle?】","【unselectedLabelTextStyle】: Unselected text style 【TextStyle?】","【minExtendedWidth】: Expanded width 【double?】","【minWidth】: Unexpanded width 【double?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_zh-CN.json deleted file mode 100644 index cb8a95a5b..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationRail/NavigationRail_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationRail","path":"/src/material/navigation_rail.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 小部件,旨在显示在应用程序的左侧或右侧,用于在少数视图之间导航,通常在三到五个之间。","fields":[{"name":"backgroundColor","type":"Color?","desc":"设置包含所有 [NavigationRail] 内容的容器的颜色。"},{"name":"extended","type":"bool","required":true,"desc":"指示 [NavigationRail] 应处于扩展状态。"},{"name":"leading","type":"Widget?","desc":"导航栏中位于目标上方的前导小部件。"},{"name":"trailing","type":"Widget?","desc":"导航栏中位于目标下方的尾随小部件。"},{"name":"destinations","type":"List","required":true,"desc":"定义导航栏内排列的按钮项的外观。"},{"name":"selectedIndex","type":"int?","desc":"当前选择的 [NavigationRailDestination] 在 [destinations] 中的索引,如果没有选择目标则为 null。"},{"name":"onDestinationSelected","type":"ValueChanged?","desc":"选择 [destinations] 之一时调用。"},{"name":"elevation","type":"double?","desc":"导航栏的高度或 z 坐标。"},{"name":"groupAlignment","type":"double?","desc":"导航栏内 [destinations] 组的垂直对齐。"},{"name":"labelType","type":"NavigationRailLabelType?","desc":"定义默认、未扩展 [NavigationRail] 的标签布局和行为。"},{"name":"unselectedLabelTextStyle","type":"TextStyle?","desc":"目标未选择时其标签的 [TextStyle]。"},{"name":"selectedLabelTextStyle","type":"TextStyle?","desc":"目标选择时其标签的 [TextStyle]。"},{"name":"unselectedIconTheme","type":"IconThemeData?","desc":"未选择目标中图标的视觉属性。"},{"name":"selectedIconTheme","type":"IconThemeData?","desc":"选择目标中图标的视觉属性。"},{"name":"minWidth","type":"double?","desc":"无论目标的图标或标签大小如何,导航栏的最小可能宽度。"},{"name":"minExtendedWidth","type":"double?","desc":"将 [extended] 设置为 true 的动画完成时的最终宽度。"},{"name":"useIndicator","type":"bool?","desc":"如果为 `true`,在选定目标的图标后面添加圆形 [NavigationIndicator]。"},{"name":"indicatorColor","type":"Color?","desc":"当 [useIndicator] 为 true 时,覆盖 [NavigationRail] 选择指示器颜色的默认值。"},{"name":"indicatorShape","type":"ShapeBorder?","desc":"当 [useIndicator] 为 true 时,覆盖 [NavigationRail] 选择指示器形状的默认值。"}],"id":358,"localName":"侧栏导航","lever":4,"family":1,"linkIds":[60,61],"nodes":[{"file":"node1_base.dart","name":"NavigationRail 基本使用","desc":["【destinations】 : 菜单数据列表 【List】","【selectedIndex】: 激活索引 【int】","【labelType】: 标签样式 【NavigationRailLabelType?】","【onDestinationSelected】: 菜单点击事件 【ValueChanged?】"]},{"file":"node2_extend.dart","name":"NavigationRail 折叠效果","desc":["【elevation】 : 影深 【double】","【leading】: 首组件 【Widget?】","【trailing】: 尾组件 【Widget?】","【extended】: 是否展开 【bool】"]},{"file":"node3_dark.dart","name":"NavigationRail 样式","desc":["【useIndicator】 : 是否显示指示器 【bool】","【indicatorColor】: 指示器颜色 【Color?】","【backgroundColor】: 背景色 【Color?】","【labelType】: 标签样式 【NavigationRailLabelType?】","【selectedIconTheme】: 选中图标样式 【IconThemeData?】","【unselectedIconTheme】: 未选中图标样式 【IconThemeData?】","【selectedLabelTextStyle】: 选中文字样式 【TextStyle?】","【unselectedLabelTextStyle】: 未选中文字样式 【TextStyle?】","【minExtendedWidth】: 展开宽度 【double?】","【minWidth】: 未展开宽度 【double?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_en-US.json deleted file mode 100644 index 62f06a59e..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationRailTheme","path":"/src/material/navigation_rail_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines visual properties for [NavigationRail]s and [NavigationRailDestination]s in this widget's subtree.","fields":[{"name":"data","type":"NavigationRailThemeData","required":true,"desc":"Specifies the background color, elevation, label text style, icon theme, group alignment, and label type and border values for descendant [NavigationRail] widgets."}],"id":460,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_zh-CN.json deleted file mode 100644 index 81519f8f1..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationRailTheme/NavigationRailTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationRailTheme","path":"/src/material/navigation_rail_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [NavigationRail] 和 [NavigationRailDestination] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"NavigationRailThemeData","required":true,"desc":"为后代 [NavigationRail] 小部件指定背景颜色、高度、标签文本样式、图标主题、组对齐以及标签类型和边框值。"}],"id":460,"localName":"NavigationRailTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_en-US.json deleted file mode 100644 index 0b61d4088..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationToolbar","path":"/src/widgets/navigation_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" [NavigationToolbar] is a layout helper to position 3 widgets or groups of widgets along a horizontal axis that's sensible for an application's navigation bar such as in Material Design and in iOS.","fields":[{"name":"leading","type":"Widget?","desc":"Widget to place at the start of the horizontal toolbar."},{"name":"middle","type":"Widget?","desc":"Widget to place in the middle of the horizontal toolbar, occupying as much remaining space as possible."},{"name":"trailing","type":"Widget?","desc":"Widget to place at the end of the horizontal toolbar."},{"name":"centerMiddle","type":"bool","required":true,"desc":"Whether to align the [middle] widget to the center of this widget or next to the [leading] widget when false."},{"name":"middleSpacing","type":"double","required":true,"desc":"The spacing around the [middle] widget on horizontal axis."}],"id":214,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of NavigationToolbar","desc":["【leading】: Left component 【Widget】","【middle】: Middle component 【Widget】","【trailing】: Right component 【Widget】","【centerMiddle】: Whether the middle component is centered 【bool】","【middleSpacing】: Distance of the middle component from the left 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_zh-CN.json deleted file mode 100644 index 67356dbb2..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigationToolbar/NavigationToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigationToolbar","path":"/src/widgets/navigation_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"[NavigationToolbar] 是一个布局助手,用于沿水平轴定位 3 个小部件或小部件组,这对于应用程序的导航栏(如 Material Design 和 iOS 中)是合理的。","fields":[{"name":"leading","type":"Widget?","desc":"放置在水平工具栏开始处的小部件。"},{"name":"middle","type":"Widget?","desc":"放置在水平工具栏中间的小部件,占用尽可能多的剩余空间。"},{"name":"trailing","type":"Widget?","desc":"放置在水平工具栏末端的小部件。"},{"name":"centerMiddle","type":"bool","required":true,"desc":"是否将 [middle] 小部件对齐到此小部件的中心,或者当为 false 时对齐到 [leading] 小部件旁边。"},{"name":"middleSpacing","type":"double","required":true,"desc":"水平轴上 [middle] 小部件周围的间距。"}],"id":214,"localName":"导航工具条","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"NavigationToolbar基本使用","desc":["【leading】 : 左侧组件 【Widget】","【middle】: 中间组件 【Widget】","【trailing】: 右侧组件组件 【Widget】","【centerMiddle】: 中间组件是否居中 【bool】","【middleSpacing】: 中间组件距左距离 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_en-US.json b/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_en-US.json deleted file mode 100644 index 25eac2c66..000000000 --- a/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Navigator","path":"/src/widgets/navigator.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that manages a set of child widgets with a stack discipline.","fields":[{"name":"pages","type":"List>","required":true,"desc":"The list of pages with which to populate the history."},{"name":"onPopPage","type":"PopPageCallback?","desc":"This is deprecated and replaced by [onDidRemovePage]."},{"name":"onDidRemovePage","type":"DidRemovePageCallback?","desc":"Called when the [Route] associated with the given [Page] has been removed from the Navigator."},{"name":"transitionDelegate","type":"TransitionDelegate","required":true,"desc":"The delegate used for deciding how routes transition in or off the screen during the [pages] updates."},{"name":"initialRoute","type":"String?","desc":"The name of the first route to show."},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"Called to generate a route for a given [RouteSettings]."},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"Called when [onGenerateRoute] fails to generate a route."},{"name":"observers","type":"List","required":true,"desc":"A list of observers for this navigator."},{"name":"restorationScopeId","type":"String?","desc":"Restoration ID to save and restore the state of the navigator, including its history."},{"name":"routeTraversalEdgeBehavior","type":"TraversalEdgeBehavior","required":true,"desc":"Controls the transfer of focus beyond the first and the last items of a focus scope that defines focus traversal of widgets within a route."},{"name":"routeDirectionalTraversalEdgeBehavior","type":"TraversalEdgeBehavior","required":true,"desc":"Controls the directional transfer of focus beyond the first and the last items of a focus scope that defines focus traversal of widgets within a route."},{"name":"onGenerateInitialRoutes","type":"RouteListFactory","required":true,"desc":"Called when the widget is created to generate the initial list of [Route] objects if [initialRoute] is not null."},{"name":"reportsRouteUpdateToEngine","type":"bool","required":true,"desc":"Whether this navigator should report route update message back to the engine when the top-most route changes."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"requestFocus","type":"bool","required":true,"desc":"Whether or not the navigator and it's new topmost route should request focus when the new route is pushed onto the navigator."}],"id":232,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Navigator","desc":["【initialRoute】: Initial display route 【String】","【onGenerateRoute】: Route generator 【RouteFactory】","【observers】: Route observers 【List】","【onPopPage】: Pop page callback 【PopPageCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_zh-CN.json deleted file mode 100644 index 188ee00dc..000000000 --- a/modules/widget_system/widgets/doc/widgets/Navigator/Navigator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Navigator","path":"/src/widgets/navigator.dart","parents":["StatefulWidget","Widget"],"desc":"使用堆栈规则管理一组子小部件的小部件。","fields":[{"name":"pages","type":"List>","required":true,"desc":"用于填充历史记录的页面列表。"},{"name":"onPopPage","type":"PopPageCallback?","desc":"这已弃用并被 [onDidRemovePage] 替换。"},{"name":"onDidRemovePage","type":"DidRemovePageCallback?","desc":"当与给定 [Page] 关联的 [Route] 从 Navigator 中移除时调用。"},{"name":"transitionDelegate","type":"TransitionDelegate","required":true,"desc":"用于决定在 [pages] 更新期间路由如何进入或离开屏幕的委托。"},{"name":"initialRoute","type":"String?","desc":"要显示的第一个路由的名称。"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"调用以为给定的 [RouteSettings] 生成路由。"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"当 [onGenerateRoute] 无法生成路由时调用。"},{"name":"observers","type":"List","required":true,"desc":"此导航器的观察者列表。"},{"name":"restorationScopeId","type":"String?","desc":"保存和恢复导航器状态(包括其历史记录)的恢复 ID。"},{"name":"routeTraversalEdgeBehavior","type":"TraversalEdgeBehavior","required":true,"desc":"控制焦点在定义路由内小部件焦点遍历的焦点范围的第一个和最后一个项目之外的传递。"},{"name":"routeDirectionalTraversalEdgeBehavior","type":"TraversalEdgeBehavior","required":true,"desc":"控制焦点在定义路由内小部件焦点遍历的焦点范围的第一个和最后一个项目之外的方向传递。"},{"name":"onGenerateInitialRoutes","type":"RouteListFactory","required":true,"desc":"如果 [initialRoute] 不为 null,在创建小部件时调用以生成初始 [Route] 对象列表。"},{"name":"reportsRouteUpdateToEngine","type":"bool","required":true,"desc":"当最顶层路由更改时,此导航器是否应向引擎报告路由更新消息。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"requestFocus","type":"bool","required":true,"desc":"当新路由被推送到导航器上时,导航器及其新的最顶层路由是否应请求焦点。"}],"id":232,"localName":"导航器","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Navigator基本用法","desc":["【initialRoute】 : 最初显示路由 【String】","【onGenerateRoute】 : 路由生成器 【RouteFactory】","【observers】 : 路由监听器 【List】","【onPopPage】 : 出栈回调 【PopPageCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_en-US.json b/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_en-US.json deleted file mode 100644 index f6ca0c2a4..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigatorPopHandler","path":"/src/widgets/navigator_pop_handler.dart","parents":["StatefulWidget","Widget"],"desc":" Enables the handling of system back gestures.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget to place below this in the widget tree."},{"name":"enabled","type":"bool","required":true,"desc":"Whether this widget's ability to handle system back gestures is enabled or disabled."},{"name":"onPop","type":"VoidCallback?","desc":"Called when a handleable pop event happens."},{"name":"onPopWithResult","type":"PopResultCallback?","desc":"Called when a handleable pop event happens."}],"id":461,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_zh-CN.json deleted file mode 100644 index 7f7656d87..000000000 --- a/modules/widget_system/widgets/doc/widgets/NavigatorPopHandler/NavigatorPopHandler_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NavigatorPopHandler","path":"/src/widgets/navigator_pop_handler.dart","parents":["StatefulWidget","Widget"],"desc":"启用系统返回手势的处理。","fields":[{"name":"child","type":"Widget","required":true,"desc":"在小部件树中放置在此下方的小部件。"},{"name":"enabled","type":"bool","required":true,"desc":"此小部件处理系统返回手势的能力是启用还是禁用。"},{"name":"onPop","type":"VoidCallback?","desc":"发生可处理的弹出事件时调用。"},{"name":"onPopWithResult","type":"PopResultCallback?","desc":"发生可处理的弹出事件时调用。"}],"id":461,"localName":"NavigatorPopHandler","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_en-US.json deleted file mode 100644 index e3262f552..000000000 --- a/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NestedScrollView","path":"/src/widgets/nested_scroll_view.dart","parents":["StatefulWidget","Widget"],"desc":" A scrolling view inside of which can be nested other scrolling views, with their scroll positions being intrinsically linked.","fields":[{"name":"controller","type":"ScrollController?","desc":"An object that can be used to control the position to which the outer scroll view is scrolled."},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"Whether the scroll view scrolls in the reading direction."},{"name":"physics","type":"ScrollPhysics?","desc":"How the scroll view should respond to user input."},{"name":"headerSliverBuilder","type":"NestedScrollViewHeaderSliversBuilder","required":true,"desc":"A builder for any widgets that are to precede the inner scroll views (as given by [body])."},{"name":"body","type":"Widget","required":true,"desc":"The widget to show inside the [NestedScrollView]."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"floatHeaderSlivers","type":"bool","required":true,"desc":"Whether or not the [NestedScrollView]'s coordinator should prioritize the outer scrollable over the inner when scrolling back."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"}],"id":251,"lever":4,"family":4,"linkIds":[183,344],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of NestedScrollView","desc":["【controller】 : Scroll Controller 【ScrollController】","【scrollDirection】 : Scroll Direction 【Axis】","【reverse】 : Whether to Reverse 【bool】","【physics】 : Scroll Physics 【ScrollPhysics】","【dragStartBehavior】 : Drag Start Behavior 【DragStartBehavior】","【headerSliverBuilder】 : *Header Builder 【NestedScrollViewHeaderSliversBuilder】","【body】 : *Content 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_zh-CN.json deleted file mode 100644 index 986339e49..000000000 --- a/modules/widget_system/widgets/doc/widgets/NestedScrollView/NestedScrollView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NestedScrollView","path":"/src/widgets/nested_scroll_view.dart","parents":["StatefulWidget","Widget"],"desc":"一个滚动视图,其中可以嵌套其他滚动视图,它们的滚动位置本质上是链接的。","fields":[{"name":"controller","type":"ScrollController?","desc":"可用于控制外部滚动视图滚动到的位置的对象。"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"滚动视图是否在阅读方向上滚动。"},{"name":"physics","type":"ScrollPhysics?","desc":"滚动视图应如何响应用户输入。"},{"name":"headerSliverBuilder","type":"NestedScrollViewHeaderSliversBuilder","required":true,"desc":"用于构建在内部滚动视图(由 [body] 给出)之前的任何小部件的构建器。"},{"name":"body","type":"Widget","required":true,"desc":"在 [NestedScrollView] 内显示的小部件。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"floatHeaderSlivers","type":"bool","required":true,"desc":"[NestedScrollView] 的协调器在向后滚动时是否应优先考虑外部可滚动而不是内部。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"}],"id":251,"localName":"嵌套滑动视图","lever":4,"family":4,"linkIds":[183,344],"nodes":[{"file":"node1_base.dart","name":"NestedScrollView基本用法","desc":["【controller】 : 滑动控制器 【ScrollController】","【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向 【bool】","【physics】 : 滑顶样式 【ScrollPhysics】","【dragStartBehavior】 : 开始拖动行为 【DragStartBehavior】","【headerSliverBuilder】 : *头部构造器 【NestedScrollViewHeaderSliversBuilder】","【body】 : *内容 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_en-US.json b/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_en-US.json deleted file mode 100644 index 2829f5729..000000000 --- a/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NestedScrollViewViewport","path":"/src/widgets/nested_scroll_view.dart","parents":["Viewport","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" The [Viewport] variant used by [NestedScrollView].","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"The handle to the [SliverOverlapAbsorber] that is feeding this injector."}],"id":344,"lever":1,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to NestedScrollViewViewport","desc":["【offset】 : *Offset 【ViewportOffset】","【handle】 : *Handle 【SliverOverlapAbsorberHandle】","【axisDirection】 : Axis Direction 【AxisDirection】","【crossAxisDirection】 : Cross Axis Direction 【AxisDirection】","【slivers】 : Child Components 【List】","【clipBehavior】 : Clip Behavior 【Clip】","【anchor】 : Anchor 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_zh-CN.json deleted file mode 100644 index b6e6e2208..000000000 --- a/modules/widget_system/widgets/doc/widgets/NestedScrollViewViewport/NestedScrollViewViewport_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NestedScrollViewViewport","path":"/src/widgets/nested_scroll_view.dart","parents":["Viewport","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"[NestedScrollView] 使用的 [Viewport] 变体。","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"正在为此注入器提供数据的 [SliverOverlapAbsorber] 的句柄。"}],"id":344,"localName":"嵌套滑动视口","lever":1,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"NestedScrollViewViewport 介绍","desc":["【offset】 : *偏移 【ViewportOffset】","【handle】 : *处理器 【SliverOverlapAbsorberHandle】","【axisDirection】 : 轴向 【AxisDirection】","【crossAxisDirection】 : 交叉轴向 【AxisDirection】","【slivers】 : 子组件 【List】","【clipBehavior】 : 裁剪行为 【Clip】","【anchor】 : 锚点 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_en-US.json b/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_en-US.json deleted file mode 100644 index 983ef077c..000000000 --- a/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NotificationListener","path":"/src/widgets/notification_listener.dart","parents":["ProxyWidget","Widget"],"desc":" A widget that listens for [Notification]s bubbling up the tree.","fields":[{"name":"onNotification","type":"NotificationListenerCallback?","desc":"Called when a notification of the appropriate type arrives at this location in the tree."}],"id":220,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Listen to OverscrollIndicatorNotification","desc":["This notification is called back when sliding to the top and bottom, and it is judged whether it is the top or bottom by the leading property. In addition, you can remove the blue shadow at the top and bottom sliding through notification#disallowGlow()."]},{"file":"node2_update.dart","name":"Listen to ScrollUpdateNotification","desc":["During the sliding process, the sliding data is called back, and you can obtain a large amount of data to operate."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_zh-CN.json deleted file mode 100644 index aa445b5ea..000000000 --- a/modules/widget_system/widgets/doc/widgets/NotificationListener/NotificationListener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"NotificationListener","path":"/src/widgets/notification_listener.dart","parents":["ProxyWidget","Widget"],"desc":"监听树中冒泡的 [Notification] 的小部件。","fields":[{"name":"onNotification","type":"NotificationListenerCallback?","desc":"当适当类型的通知到达树中的此位置时调用。"}],"id":220,"localName":"通知监听器","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"监听OverscrollIndicatorNotification","desc":["该通知之后在滑动到最顶和最底是回调,通过leading属性判断是顶部还是底部。另外通过notification#disallowGlow(),可以去除顶底滑动蓝色阴影"]},{"file":"node2_update.dart","name":"监听ScrollUpdateNotification","desc":["在滑动过程中对滑动数据进行回调,你可以获取大量数据来进行操作。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_en-US.json deleted file mode 100644 index c4da0fe7f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ObstructingPreferredSizeWidget","path":"/src/cupertino/page_scaffold.dart","abstract":true,"parents":["Object","PreferredSizeWidget","Widget"],"desc":" Widget that has a preferred size and reports whether it fully obstructs widgets behind it.","fields":[],"id":462,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_zh-CN.json deleted file mode 100644 index b8894a60e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ObstructingPreferredSizeWidget/ObstructingPreferredSizeWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ObstructingPreferredSizeWidget","path":"/src/cupertino/page_scaffold.dart","abstract":true,"parents":["Object","PreferredSizeWidget","Widget"],"desc":"具有首选大小并报告是否完全阻挡其后面小部件的小部件。","fields":[],"id":462,"localName":"ObstructingPreferredSizeWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_en-US.json b/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_en-US.json deleted file mode 100644 index b7354b4e6..000000000 --- a/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Offstage","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that lays the child out as if it was in the tree, but without painting anything, without making the child available for hit testing, and without taking any room in the parent.","fields":[{"name":"offstage","type":"bool","required":true,"desc":"Whether the child is hidden from the rest of the tree."}],"id":71,"lever":3,"family":2,"linkIds":[10],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of LimitedBox","desc":["【child】: Child component 【Widget】","【offstage】: Whether to disappear 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_zh-CN.json deleted file mode 100644 index 9848c03fc..000000000 --- a/modules/widget_system/widgets/doc/widgets/Offstage/Offstage_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Offstage","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将子项布局为好像它在树中一样,但不绘制任何内容,不使子项可用于命中测试,也不在父项中占用任何空间的小部件。","fields":[{"name":"offstage","type":"bool","required":true,"desc":"子项是否从树的其余部分隐藏。"}],"id":71,"localName":"消失组件","lever":3,"family":2,"linkIds":[10],"nodes":[{"file":"node1_base.dart","name":"LimitedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【offstage】 : 是否消失 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_en-US.json b/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_en-US.json deleted file mode 100644 index b7ee467dc..000000000 --- a/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Opacity","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that makes its child partially transparent.","fields":[{"name":"opacity","type":"double","required":true,"desc":"The fraction to scale the child's alpha value."},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"Whether the semantic information of the children is always included."}],"id":73,"lever":3,"family":2,"linkIds":[89,118],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Opacity","desc":["【child】 : Child component 【Widget】","【opacity】 : Transparency 0~1 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_zh-CN.json deleted file mode 100644 index 00a4d91d3..000000000 --- a/modules/widget_system/widgets/doc/widgets/Opacity/Opacity_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Opacity","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使其子项部分透明的小部件。","fields":[{"name":"opacity","type":"double","required":true,"desc":"缩放子项 alpha 值的分数。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含子项的语义信息。"}],"id":73,"localName":"透明化","lever":3,"family":2,"linkIds":[89,118],"nodes":[{"file":"node1_base.dart","name":"Opacity基本使用","desc":["【child】 : 孩子组件 【Widget】","【opacity】 : 透明度0~1 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_en-US.json deleted file mode 100644 index fbfb57493..000000000 --- a/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OrientationBuilder","path":"/src/widgets/orientation_builder.dart","parents":["StatelessWidget","Widget"],"desc":" Builds a widget tree that can depend on the parent widget's orientation (distinct from the device orientation).","fields":[{"name":"builder","type":"OrientationWidgetBuilder","required":true,"desc":"Builds the widgets below this widget given this widget's orientation."}],"id":203,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of OrientationBuilder","desc":["【builder】: Orientation component builder 【OrientationWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_zh-CN.json deleted file mode 100644 index 81018041c..000000000 --- a/modules/widget_system/widgets/doc/widgets/OrientationBuilder/OrientationBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OrientationBuilder","path":"/src/widgets/orientation_builder.dart","parents":["StatelessWidget","Widget"],"desc":"构建可以依赖于父小部件方向(与设备方向不同)的小部件树。","fields":[{"name":"builder","type":"OrientationWidgetBuilder","required":true,"desc":"根据此小部件的方向构建此小部件下方的小部件。"}],"id":203,"localName":"方向构造器","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"OrientationBuilder基本使用","desc":["【builder】 : 方向组件构造器 【OrientationWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_en-US.json b/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_en-US.json deleted file mode 100644 index 83894a74e..000000000 --- a/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OutlinedButton","path":"/src/material/outlined_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":" A Material Design \"Outlined Button\"; essentially a [TextButton] with an outlined border.","fields":[],"id":355,"lever":3,"family":1,"linkIds":[353,27,354],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of OutlinedButton","desc":["【child】: Button content 【Widget】","【onPressed】: Click event 【VoidCallback】","【onLongPress】: Long press event 【VoidCallback】"]},{"file":"node2_style.dart","name":"OutlinedButton Style","desc":["【style】: Button style 【ButtonStyle】","【focusNode】: Focus 【FocusNode】","【clipBehavior】: Clip behavior 【Clip】","【autofocus】: Autofocus 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_zh-CN.json deleted file mode 100644 index e34f90293..000000000 --- a/modules/widget_system/widgets/doc/widgets/OutlinedButton/OutlinedButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OutlinedButton","path":"/src/material/outlined_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":"Material Design \"轮廓按钮\";本质上是带有轮廓边框的 [TextButton]。","fields":[],"id":355,"localName":"边框按钮","lever":3,"family":1,"linkIds":[353,27,354],"nodes":[{"file":"node1_base.dart","name":"OutlinedButton基本使用","desc":["【child】 : 按钮内容 【Widget】","【onPressed】 : 点击事件 【VoidCallback】","【onLongPress】 : 长按事件 【VoidCallback】"]},{"file":"node2_style.dart","name":"OutlinedButton样式","desc":["【style】 : 按钮样式 【ButtonStyle】","【focusNode】 : 焦点 【FocusNode】","【clipBehavior】 : 裁剪行为 【Clip】","【autofocus】 : 自动聚焦 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_en-US.json deleted file mode 100644 index 087a19b86..000000000 --- a/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OutlinedButtonTheme","path":"/src/material/outlined_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [OutlinedButton] descendants.","fields":[{"name":"data","type":"OutlinedButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":463,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_zh-CN.json deleted file mode 100644 index c3632eae8..000000000 --- a/modules/widget_system/widgets/doc/widgets/OutlinedButtonTheme/OutlinedButtonTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OutlinedButtonTheme","path":"/src/material/outlined_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [OutlinedButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"OutlinedButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":463,"localName":"OutlinedButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_en-US.json b/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_en-US.json deleted file mode 100644 index d211c8881..000000000 --- a/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OverflowBar","path":"/src/widgets/overflow_bar.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that lays out its [children] in a row unless they \"overflow\" the available horizontal space, in which case it lays them out in a column instead.","fields":[{"name":"spacing","type":"double","required":true,"desc":"The width of the gap between [children] for the default horizontal layout."},{"name":"alignment","type":"MainAxisAlignment?","desc":"Defines the [children]'s horizontal layout according to the same rules as for [Row.mainAxisAlignment]."},{"name":"overflowSpacing","type":"double","required":true,"desc":"The height of the gap between [children] in the vertical \"overflow\" layout."},{"name":"overflowAlignment","type":"OverflowBarAlignment","required":true,"desc":"The horizontal alignment of the [children] within the vertical \"overflow\" layout."},{"name":"overflowDirection","type":"VerticalDirection","required":true,"desc":"Defines the order that the [children] appear in, if the horizontal layout overflows."},{"name":"textDirection","type":"TextDirection?","desc":"Determines the order that the [children] appear in for the default horizontal layout, and the interpretation of [OverflowBarAlignment.start] and [OverflowBarAlignment.end] for the vertical overflow layout."}],"id":464,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_zh-CN.json deleted file mode 100644 index 3f469dc70..000000000 --- a/modules/widget_system/widgets/doc/widgets/OverflowBar/OverflowBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OverflowBar","path":"/src/widgets/overflow_bar.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其 [children] 布局在一行中的小部件,除非它们溢出可用的水平空间,在这种情况下,它会将它们布局在一列中。","fields":[{"name":"spacing","type":"double","required":true,"desc":"默认水平布局中 [children] 之间间隙的宽度。"},{"name":"alignment","type":"MainAxisAlignment?","desc":"根据与 [Row.mainAxisAlignment] 相同的规则定义 [children] 的水平布局。"},{"name":"overflowSpacing","type":"double","required":true,"desc":"垂直"},{"name":"overflowAlignment","type":"OverflowBarAlignment","required":true,"desc":"垂直"},{"name":"overflowDirection","type":"VerticalDirection","required":true,"desc":"如果水平布局溢出,定义 [children] 出现的顺序。"},{"name":"textDirection","type":"TextDirection?","desc":"确定默认水平布局中 [children] 出现的顺序,以及垂直溢出布局中 [OverflowBarAlignment.start] 和 [OverflowBarAlignment.end] 的解释。"}],"id":464,"localName":"OverflowBar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_en-US.json b/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_en-US.json deleted file mode 100644 index 6848a88f1..000000000 --- a/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OverflowBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that imposes different constraints on its child than it gets from its parent, possibly allowing the child to overflow the parent.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the child."},{"name":"minWidth","type":"double?","desc":"The minimum width constraint to give the child. Set this to null (the default) to use the constraint from the parent instead."},{"name":"maxWidth","type":"double?","desc":"The maximum width constraint to give the child. Set this to null (the default) to use the constraint from the parent instead."},{"name":"minHeight","type":"double?","desc":"The minimum height constraint to give the child. Set this to null (the default) to use the constraint from the parent instead."},{"name":"maxHeight","type":"double?","desc":"The maximum height constraint to give the child. Set this to null (the default) to use the constraint from the parent instead."},{"name":"fit","type":"OverflowBoxFit","required":true,"desc":"The way to size the render object."}],"id":83,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of OverflowBox","desc":["【child】: Child component 【Widget】","【minWidth】: Minimum width 【double】","【minHeight】: Minimum height 【double】","【maxHeight】: Maximum height 【double】","【maxWidth】: Maximum width 【double】","【alignment】: Alignment 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_zh-CN.json deleted file mode 100644 index 0410be0f3..000000000 --- a/modules/widget_system/widgets/doc/widgets/OverflowBox/OverflowBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OverflowBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对其子项施加与从其父项获得的约束不同的约束的小部件,可能允许子项溢出父项。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何对齐子项。"},{"name":"minWidth","type":"double?","desc":"给子项的最小宽度约束。将此设置为 null(默认值)以使用来自父项的约束。"},{"name":"maxWidth","type":"double?","desc":"给子项的最大宽度约束。将此设置为 null(默认值)以使用来自父项的约束。"},{"name":"minHeight","type":"double?","desc":"给子项的最小高度约束。将此设置为 null(默认值)以使用来自父项的约束。"},{"name":"maxHeight","type":"double?","desc":"给子项的最大高度约束。将此设置为 null(默认值)以使用来自父项的约束。"},{"name":"fit","type":"OverflowBoxFit","required":true,"desc":"调整渲染对象大小的方式。"}],"id":83,"localName":"溢出盒","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"OverflowBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【minWidth】 : 最小宽 【double】","【minHeight】 : 最小高 【double】","【maxHeight】 : 最大高 【double】","【maxWidth】 : 最大宽 【double】","【alignment】 : 对齐方式 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_en-US.json b/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_en-US.json deleted file mode 100644 index d37a8f9d7..000000000 --- a/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Overlay","path":"/src/widgets/overlay.dart","parents":["StatefulWidget","Widget"],"desc":" A stack of entries that can be managed independently.","fields":[{"name":"initialEntries","type":"List","required":true,"desc":"The entries to include in the overlay initially."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":182,"lever":5,"family":1,"linkIds":[265,266],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Overlay","desc":["Overlay.of(context).insert inserts a global component"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_zh-CN.json deleted file mode 100644 index 28d85c94f..000000000 --- a/modules/widget_system/widgets/doc/widgets/Overlay/Overlay_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Overlay","path":"/src/widgets/overlay.dart","parents":["StatefulWidget","Widget"],"desc":"可以独立管理的条目堆栈。","fields":[{"name":"initialEntries","type":"List","required":true,"desc":"最初包含在覆盖层中的条目。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":182,"localName":"悬浮组件","lever":5,"family":1,"linkIds":[265,266],"nodes":[{"file":"node1_base.dart","name":"Overlay基本使用","desc":["Overlay.of(context).insert插入全局组件"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_en-US.json b/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_en-US.json deleted file mode 100644 index f456006c4..000000000 --- a/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OverlayPortal","path":"/src/widgets/overlay.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that renders its overlay child on an [Overlay].","fields":[{"name":"controller","type":"OverlayPortalController","required":true,"desc":"The controller to show, hide and bring to top the overlay child."},{"name":"overlayChildBuilder","type":"WidgetBuilder","required":true,"desc":"A [WidgetBuilder] used to build a widget below this widget in the tree, that renders on the closest [Overlay]."},{"name":"child","type":"Widget?","desc":"A widget below this widget in the tree."}],"id":465,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_zh-CN.json b/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_zh-CN.json deleted file mode 100644 index b52bdf2cc..000000000 --- a/modules/widget_system/widgets/doc/widgets/OverlayPortal/OverlayPortal_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"OverlayPortal","path":"/src/widgets/overlay.dart","parents":["StatefulWidget","Widget"],"desc":"在 [Overlay] 上渲染其覆盖子项的小部件。","fields":[{"name":"controller","type":"OverlayPortalController","required":true,"desc":"显示、隐藏和置顶覆盖子项的控制器。"},{"name":"overlayChildBuilder","type":"WidgetBuilder","required":true,"desc":"用于在树中此小部件下方构建小部件的 [WidgetBuilder],该小部件在最近的 [Overlay] 上渲染。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":465,"localName":"OverlayPortal","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Padding/Padding_en-US.json b/modules/widget_system/widgets/doc/widgets/Padding/Padding_en-US.json deleted file mode 100644 index 76ff9bef5..000000000 --- a/modules/widget_system/widgets/doc/widgets/Padding/Padding_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Padding","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that insets its child by the given padding.","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the child."}],"id":74,"lever":4,"family":2,"linkIds":[1,191],"nodes":[{"file":"node1_all.dart","name":"Padding Equal Margin on All Sides","desc":["【child】: Child component 【Widget】","【padding】: Inner four-sided margin 【EdgeInsetsGeometry】","EdgeInsets.all is used to define the same margin on all four sides"]},{"file":"node2_only.dart","name":"Padding Individual Margin","desc":["EdgeInsets.only is used to define the same margin on all four sides"]},{"file":"node3_symmetric.dart","name":"Padding Directional Margin","desc":["EdgeInsets.symmetric is used to define horizontal and vertical margins"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Padding/Padding_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Padding/Padding_zh-CN.json deleted file mode 100644 index 1a6c23e98..000000000 --- a/modules/widget_system/widgets/doc/widgets/Padding/Padding_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Padding","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"通过给定的内边距插入其子项的小部件。","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"插入子项的空间量。"}],"id":74,"localName":"边距组件","lever":4,"family":2,"linkIds":[1,191],"nodes":[{"file":"node1_all.dart","name":"Padding四面等边距","desc":["【child】 : 孩子组件 【Widget】","【padding】 : 内四边距 【EdgeInsetsGeometry】\"","EdgeInsets.all用来限定相同的四边边距"]},{"file":"node2_only.dart","name":"Padding单独边距边距","desc":["EdgeInsets.only用来限定相同的四边边距"]},{"file":"node3_symmetric.dart","name":"Padding方向边距","desc":["EdgeInsets.symmetric用来限定水平和竖直方向的边距"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_en-US.json b/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_en-US.json deleted file mode 100644 index 03a4dc1e1..000000000 --- a/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PageStorage","path":"/src/widgets/page_storage.dart","parents":["StatelessWidget","Widget"],"desc":" Establish a subtree in which widgets can opt into persisting states after being destroyed.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"bucket","type":"PageStorageBucket","required":true,"desc":"The page storage bucket to use for this subtree."}],"id":210,"lever":3,"family":0,"linkIds":[52,165],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PageStorage","desc":["【bucket】: Storage Area 【PageStorageBucket】","【child】: Child Widget 【Widget】","When switching interfaces and initializing components, the state will not be reset. As in the CountWidget example, the child component needs to read the state from the storage during initialization and write the state to the storage when changing the state. Additionally, MaterialApp already has PageStorage built-in, but you can also create your own PageStorage."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_zh-CN.json deleted file mode 100644 index da56e4f7f..000000000 --- a/modules/widget_system/widgets/doc/widgets/PageStorage/PageStorage_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PageStorage","path":"/src/widgets/page_storage.dart","parents":["StatelessWidget","Widget"],"desc":"建立一个子树,其中小部件可以选择在被销毁后持久化状态。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"bucket","type":"PageStorageBucket","required":true,"desc":"用于此子树的页面存储桶。"}],"id":210,"localName":"页面存储器","lever":3,"family":0,"linkIds":[52,165],"nodes":[{"file":"node1_base.dart","name":"PageStorage基本使用","desc":["【bucket】 : 存储区 【PageStorageBucket】","【child】: 子组件 【Widget】","上面切换界面初始化组件时并不会将状态重置。如上CountWidget,子组件需要在初始化时从存储器中读取状态,在改变状态时将状态量写入存储器。另外,如果使用MaterialApp已经内置了PageStorage,不过你也可以创建PageStorage。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PageView/PageView_en-US.json b/modules/widget_system/widgets/doc/widgets/PageView/PageView_en-US.json deleted file mode 100644 index 2b5968560..000000000 --- a/modules/widget_system/widgets/doc/widgets/PageView/PageView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PageView","path":"/src/widgets/page_view.dart","parents":["StatefulWidget","Widget"],"desc":" A scrollable list that works page by page.","fields":[{"name":"allowImplicitScrolling","type":"bool","required":true,"desc":"Controls whether the widget's pages will respond to [RenderObject.showOnScreen], which will allow for implicit accessibility scrolling."},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"The [Axis] along which the scroll view's offset increases with each page."},{"name":"reverse","type":"bool","required":true,"desc":"Whether the page view scrolls in the reading direction."},{"name":"controller","type":"PageController?","desc":"An object that can be used to control the position to which this page view is scrolled."},{"name":"physics","type":"ScrollPhysics?","desc":"How the page view should respond to user input."},{"name":"pageSnapping","type":"bool","required":true,"desc":"Set to false to disable page snapping, useful for custom scroll behavior."},{"name":"onPageChanged","type":"ValueChanged?","desc":"Called whenever the page in the center of the viewport changes."},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"A delegate that provides the children for the [PageView]."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"padEnds","type":"bool","required":true,"desc":"Whether to add padding to both ends of the list."}],"id":165,"lever":5,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PageView","desc":["【children】 : List of child components 【List】","【onPageChanged】 : Click event 【ValueChanged】"]},{"file":"node2_direction.dart","name":"Swipe Direction of PageView","desc":["【scrollDirection】 : Swipe direction 【Axis】","【reverse】 : Whether to reverse 【bool】"]},{"file":"node3_controller.dart","name":"Simple Use of PageView Controller","desc":["【controller】 : Page controller 【PageController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PageView/PageView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PageView/PageView_zh-CN.json deleted file mode 100644 index d0b462757..000000000 --- a/modules/widget_system/widgets/doc/widgets/PageView/PageView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PageView","path":"/src/widgets/page_view.dart","parents":["StatefulWidget","Widget"],"desc":"逐页工作的可滚动列表。","fields":[{"name":"allowImplicitScrolling","type":"bool","required":true,"desc":"控制小部件的页面是否会响应 [RenderObject.showOnScreen],这将允许隐式辅助功能滚动。"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"滚动视图的偏移随每页增加的 [Axis]。"},{"name":"reverse","type":"bool","required":true,"desc":"页面视图是否在阅读方向上滚动。"},{"name":"controller","type":"PageController?","desc":"可用于控制此页面视图滚动到的位置的对象。"},{"name":"physics","type":"ScrollPhysics?","desc":"页面视图应如何响应用户输入。"},{"name":"pageSnapping","type":"bool","required":true,"desc":"设置为 false 以禁用页面捕捉,对自定义滚动行为很有用。"},{"name":"onPageChanged","type":"ValueChanged?","desc":"每当视口中心的页面更改时调用。"},{"name":"childrenDelegate","type":"SliverChildDelegate","required":true,"desc":"为 [PageView] 提供子项的委托。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"padEnds","type":"bool","required":true,"desc":"是否在列表的两端添加内边距。"}],"id":165,"localName":"滑页","lever":5,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PageView基本使用","desc":["【children】 : 子组件列表 【List】","【onPageChanged】 : 点击事件 【ValueChanged】"]},{"file":"node2_direction.dart","name":"PageView滑动方向","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向 【bool】"]},{"file":"node3_controller.dart","name":"PageView控制器简单实用","desc":["【controller】 : 页面控制器 【PageController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_en-US.json b/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_en-US.json deleted file mode 100644 index f260f82e7..000000000 --- a/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PaginatedDataTable","path":"/src/material/paginated_data_table.dart","parents":["StatefulWidget","Widget"],"desc":" A table that follows the [Material 2](https://material.io/go/design-data-tables) design specification, using multiple pages to display data.","fields":[{"name":"header","type":"Widget?","desc":"The table card's optional header."},{"name":"actions","type":"List?","desc":"Icon buttons to show at the top end side of the table. The [header] must not be null to show the actions."},{"name":"columns","type":"List","required":true,"desc":"The configuration and labels for the columns in the table."},{"name":"sortColumnIndex","type":"int?","desc":"The current primary sort key's column."},{"name":"sortAscending","type":"bool","required":true,"desc":"Whether the column mentioned in [sortColumnIndex], if any, is sorted in ascending order."},{"name":"onSelectAll","type":"ValueSetter?","desc":"Invoked when the user selects or unselects every row, using the checkbox in the heading row."},{"name":"dataRowMinHeight","type":"double?","desc":"The minimum height of each row (excluding the row that contains column headings)."},{"name":"dataRowMaxHeight","type":"double?","desc":"The maximum height of each row (excluding the row that contains column headings)."},{"name":"headingRowHeight","type":"double","required":true,"desc":"The height of the heading row."},{"name":"horizontalMargin","type":"double","required":true,"desc":"The horizontal margin between the edges of the table and the content in the first and last cells of each row."},{"name":"columnSpacing","type":"double","required":true,"desc":"The horizontal margin between the contents of each data column."},{"name":"showCheckboxColumn","type":"bool","required":true,"desc":"{@macro flutter.material.dataTable.showCheckboxColumn}"},{"name":"showFirstLastButtons","type":"bool","required":true,"desc":"Flag to display the pagination buttons to go to the first and last pages."},{"name":"initialFirstRowIndex","type":"int?","desc":"The index of the first row to display when the widget is first created."},{"name":"dividerThickness","type":"double?","desc":"{@macro flutter.material.dataTable.dividerThickness}"},{"name":"onPageChanged","type":"ValueChanged?","desc":"Invoked when the user switches to another page."},{"name":"rowsPerPage","type":"int","required":true,"desc":"The number of rows to show on each page."},{"name":"availableRowsPerPage","type":"List","required":true,"desc":"The options to offer for the rowsPerPage."},{"name":"onRowsPerPageChanged","type":"ValueChanged?","desc":"Invoked when the user selects a different number of rows per page."},{"name":"source","type":"DataTableSource","required":true,"desc":"The data source which provides data to show in each row."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"checkboxHorizontalMargin","type":"double?","desc":"Horizontal margin around the checkbox, if it is displayed."},{"name":"arrowHeadColor","type":"Color?","desc":"Defines the color of the arrow heads in the footer."},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"headingRowColor","type":"MaterialStateProperty?","desc":"{@macro flutter.material.dataTable.headingRowColor}"},{"name":"showEmptyRows","type":"bool","required":true,"desc":"Controls the visibility of empty rows on the last page of a [PaginatedDataTable]."}],"id":235,"lever":4,"family":1,"linkIds":[110,102],"nodes":[{"file":"node1_base.dart","name":"PaginatedDataTable Usage","desc":["【header】 : Table Name 【Widget】","【rowsPerPage】 : Number of records per page 【int】","【actions】 : Action components 【List】","【columns】 : Data columns 【List】","【sortColumnIndex】 : Sort column index 【int】","【sortAscending】 : Whether ascending 【bool】","【onSelectAll】 : Select all callback 【ValueSetter】","【onRowsPerPageChanged】 : Page change listener 【ValueChanged】","【availableRowsPerPage】 : Available page list 【List】","【source】 : Data source 【DataTableSource】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_zh-CN.json deleted file mode 100644 index a2ed88e6f..000000000 --- a/modules/widget_system/widgets/doc/widgets/PaginatedDataTable/PaginatedDataTable_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PaginatedDataTable","path":"/src/material/paginated_data_table.dart","parents":["StatefulWidget","Widget"],"desc":"遵循 [Material 2](https://material.io/go/design-data-tables) 设计规范的表格,使用多个页面显示数据。","fields":[{"name":"header","type":"Widget?","desc":"表格卡片的可选标题。"},{"name":"actions","type":"List?","desc":"在表格顶部末端显示的图标按钮。[header] 不能为 null 才能显示操作。"},{"name":"columns","type":"List","required":true,"desc":"表格中列的配置和标签。"},{"name":"sortColumnIndex","type":"int?","desc":"当前主要排序键的列。"},{"name":"sortAscending","type":"bool","required":true,"desc":"[sortColumnIndex] 中提到的列(如果有)是否按升序排序。"},{"name":"onSelectAll","type":"ValueSetter?","desc":"当用户使用标题行中的复选框选择或取消选择每一行时调用。"},{"name":"dataRowMinHeight","type":"double?","desc":"每行的最小高度(不包括包含列标题的行)。"},{"name":"dataRowMaxHeight","type":"double?","desc":"每行的最大高度(不包括包含列标题的行)。"},{"name":"headingRowHeight","type":"double","required":true,"desc":"标题行的高度。"},{"name":"horizontalMargin","type":"double","required":true,"desc":"表格边缘与每行第一个和最后一个单元格中内容之间的水平边距。"},{"name":"columnSpacing","type":"double","required":true,"desc":"每个数据列内容之间的水平边距。"},{"name":"showCheckboxColumn","type":"bool","required":true,"desc":"{@macro flutter.material.dataTable.showCheckboxColumn}"},{"name":"showFirstLastButtons","type":"bool","required":true,"desc":"显示转到第一页和最后一页的分页按钮的标志。"},{"name":"initialFirstRowIndex","type":"int?","desc":"首次创建小部件时要显示的第一行的索引。"},{"name":"dividerThickness","type":"double?","desc":"{@macro flutter.material.dataTable.dividerThickness}"},{"name":"onPageChanged","type":"ValueChanged?","desc":"用户切换到另一页时调用。"},{"name":"rowsPerPage","type":"int","required":true,"desc":"每页显示的行数。"},{"name":"availableRowsPerPage","type":"List","required":true,"desc":"为 rowsPerPage 提供的选项。"},{"name":"onRowsPerPageChanged","type":"ValueChanged?","desc":"用户选择不同的每页行数时调用。"},{"name":"source","type":"DataTableSource","required":true,"desc":"提供在每行中显示的数据的数据源。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"checkboxHorizontalMargin","type":"double?","desc":"复选框周围的水平边距(如果显示)。"},{"name":"arrowHeadColor","type":"Color?","desc":"定义页脚中箭头头的颜色。"},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"headingRowColor","type":"MaterialStateProperty?","desc":"{@macro flutter.material.dataTable.headingRowColor}"},{"name":"showEmptyRows","type":"bool","required":true,"desc":"控制 [PaginatedDataTable] 最后一页上空行的可见性。"}],"id":235,"localName":"可分页表格","lever":4,"family":1,"linkIds":[110,102],"nodes":[{"file":"node1_base.dart","name":"PaginatedDataTable 使用","desc":["【header】 : 表名 【Widget】","【rowsPerPage】 : 每页记录数 【int】","【actions】 : 操作组件 【List】","【columns】 : 数据列 【List】","【sortColumnIndex】 : 排序列索引 【int】","【sortAscending】 : 是否升序 【bool】","【onSelectAll】 : 全选回调 【ValueSetter】","【onRowsPerPageChanged】 : 分页改变监听 【ValueChanged】","【availableRowsPerPage】 : 可用分页列表 【List】","【source】 : 数据源 【DataTableSource】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_en-US.json deleted file mode 100644 index 13f9890ca..000000000 --- a/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ParentDataWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["ProxyWidget","Widget"],"desc":" Base class for widgets that hook [ParentData] information to children of [RenderObjectWidget]s.","fields":[],"id":347,"lever":1,"family":5,"linkIds":[106,109,108,315],"nodes":[{"file":"node1_base.dart","name":"Introduction to ParentDataWidget","desc":["【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_zh-CN.json deleted file mode 100644 index d899faa4e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ParentDataWidget/ParentDataWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ParentDataWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["ProxyWidget","Widget"],"desc":"将 [ParentData] 信息挂钩到 [RenderObjectWidget] 子项的小部件的基类。","fields":[],"id":347,"localName":"父数据组件","lever":1,"family":5,"linkIds":[106,109,108,315],"nodes":[{"file":"node1_base.dart","name":"ParentDataWidget 介绍","desc":["【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_en-US.json b/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_en-US.json deleted file mode 100644 index 0acc29275..000000000 --- a/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PerformanceOverlay","path":"/src/widgets/performance_overlay.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Displays performance statistics.","fields":[{"name":"optionsMask","type":"int","required":true,"desc":"The mask is created by shifting 1 by the index of the specific [PerformanceOverlayOption] to enable."}],"id":312,"lever":2,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PerformanceOverlay","desc":["Using PerformanceOverlay.allEnabled can start all monitoring items."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_zh-CN.json deleted file mode 100644 index 84cd78dd8..000000000 --- a/modules/widget_system/widgets/doc/widgets/PerformanceOverlay/PerformanceOverlay_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PerformanceOverlay","path":"/src/widgets/performance_overlay.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"显示性能统计信息。","fields":[{"name":"optionsMask","type":"int","required":true,"desc":"掩码是通过将 1 按要启用的特定 [PerformanceOverlayOption] 的索引移位创建的。"}],"id":312,"localName":"性能浮层","lever":2,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PerformanceOverlay基本使用","desc":["使用PerformanceOverlay.allEnabled可以开始所有的监测项。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_en-US.json b/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_en-US.json deleted file mode 100644 index d222fbf4f..000000000 --- a/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PhysicalModel","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget representing a physical layer that clips its children to a shape.","fields":[{"name":"shape","type":"BoxShape","required":true,"desc":"The type of shape."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"borderRadius","type":"BorderRadius?","desc":"The border radius of the rounded corners."},{"name":"elevation","type":"double","required":true,"desc":"The z-coordinate relative to the parent at which to place this physical object."},{"name":"color","type":"Color","required":true,"desc":"The background color."},{"name":"shadowColor","type":"Color","required":true,"desc":"The shadow color."}],"id":296,"lever":3,"family":2,"linkIds":[279,69],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PhysicalModel","desc":["【clipBehavior】: Clipping Behavior 【Clip】","【borderRadius】: Rounded Corners 【BorderRadius】","【child】: Child Component 【Widget】","【elevation】: Shadow Depth 【double】","【shadowColor】: Shadow Color 【Color】","【shape】: Shape 【BoxShape】","【color】: Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_zh-CN.json deleted file mode 100644 index 699d60ef8..000000000 --- a/modules/widget_system/widgets/doc/widgets/PhysicalModel/PhysicalModel_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PhysicalModel","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"表示将其子项裁剪为形状的物理层的小部件。","fields":[{"name":"shape","type":"BoxShape","required":true,"desc":"形状的类型。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"borderRadius","type":"BorderRadius?","desc":"圆角的边框半径。"},{"name":"elevation","type":"double","required":true,"desc":"相对于父级放置此物理对象的 z 坐标。"},{"name":"color","type":"Color","required":true,"desc":"背景颜色。"},{"name":"shadowColor","type":"Color","required":true,"desc":"阴影颜色。"}],"id":296,"localName":"物理模块","lever":3,"family":2,"linkIds":[279,69],"nodes":[{"file":"node1_base.dart","name":"PhysicalModel基本使用","desc":["【clipBehavior】 : 裁剪行为 【Clip】","【borderRadius】 : 圆角 【BorderRadius】","【child】 : 子组件 【Widget】","【elevation】 : 阴影深 【double】","【shadowColor】 : 阴影颜色 【Color】","【shape】 : 形状 【BoxShape】","【color】: 颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_en-US.json b/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_en-US.json deleted file mode 100644 index 3423ddb53..000000000 --- a/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PhysicalShape","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget representing a physical layer that clips its children to a path.","fields":[{"name":"clipper","type":"CustomClipper","required":true,"desc":"Determines which clip to use."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"elevation","type":"double","required":true,"desc":"The z-coordinate relative to the parent at which to place this physical object."},{"name":"color","type":"Color","required":true,"desc":"The background color."},{"name":"shadowColor","type":"Color","required":true,"desc":"When elevation is non zero the color to use for the shadow color."}],"id":279,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PhysicalShape","desc":["【clipper】: Clipper 【CustomClipper】","【clipBehavior】: Clipping Behavior 【Clip】","【child】: Child Component 【Widget】","【elevation】: Shadow Depth 【double】","【shadowColor】: Shadow Color 【Color】","【color】: Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_zh-CN.json deleted file mode 100644 index 3104ddb08..000000000 --- a/modules/widget_system/widgets/doc/widgets/PhysicalShape/PhysicalShape_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PhysicalShape","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"表示将其子项裁剪为路径的物理层的小部件。","fields":[{"name":"clipper","type":"CustomClipper","required":true,"desc":"确定使用哪个裁剪。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"elevation","type":"double","required":true,"desc":"相对于父级放置此物理对象的 z 坐标。"},{"name":"color","type":"Color","required":true,"desc":"背景颜色。"},{"name":"shadowColor","type":"Color","required":true,"desc":"当高度非零时用于阴影颜色的颜色。"}],"id":279,"localName":"物理形状","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PhysicalShape基本使用","desc":["【clipper】 : 裁剪器 【CustomClipper】","【clipBehavior】 : 裁剪行为 【Clip】","【child】 : 子组件 【Widget】","【elevation】 : 阴影深 【double】","【shadowColor】 : 阴影颜色 【Color】","【color】: 颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_en-US.json b/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_en-US.json deleted file mode 100644 index 3a48f49dc..000000000 --- a/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PinnedHeaderSliver","path":"/src/widgets/pinned_header_sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that keeps its Widget child at the top of the a [CustomScrollView].","fields":[],"id":309,"lever":4,"family":4,"linkIds":[190],"nodes":[{"file":"node_01.dart","name":"PinnedHeaderSliver Official Example","display":"new_page","desc":["【child】 : Child widget 【Widget?】","PinnedHeaderSliver can only be used in a scroll viewport, where the child widget will not move out of the viewport when scrolling to the top, thus staying above the viewport."]},{"file":"node_02.dart","name":"Sticky Header","display":"new_page","desc":["The sticky header effect implemented based on PinnedHeaderSliver, note that the divider below also has a sticky effect."]},{"file":"node_03.dart","name":"Sticky Header + Search","display":"new_page","desc":["The sticky header + search box effect implemented based on PinnedHeaderSliver."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_zh-CN.json deleted file mode 100644 index 20d3b62e8..000000000 --- a/modules/widget_system/widgets/doc/widgets/PinnedHeaderSliver/PinnedHeaderSliver_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PinnedHeaderSliver","path":"/src/widgets/pinned_header_sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其 Widget 子项保持在 [CustomScrollView] 顶部的 sliver。","fields":[],"id":309,"localName":"固定头部滑片","lever":4,"family":4,"linkIds":[190],"nodes":[{"file":"node_01.dart","name":"PinnedHeaderSliver 官方案例","display":"new_page","desc":["【child】 : 子组件 【Widget?】","PinnedHeaderSliver 只能用在滚动视口中,其中子组件在滑动到顶部时,不会移出视口,从而会停留在视口上方。"]},{"file":"node_02.dart","name":"标题吸顶","display":"new_page","desc":["基于 PinnedHeaderSliver 实现的标题吸顶效果,注意看下方的分隔线也有吸顶效果哦。"]},{"file":"node_03.dart","name":"标题+搜索吸顶","display":"new_page","desc":["基于 PinnedHeaderSliver 实现的标题+搜索框的吸顶效果。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_en-US.json b/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_en-US.json deleted file mode 100644 index 864ef6c16..000000000 --- a/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Placeholder","path":"/src/widgets/placeholder.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that draws a box that represents where other widgets will one day be added.","fields":[{"name":"color","type":"Color","required":true,"desc":"The color to draw the placeholder box."},{"name":"strokeWidth","type":"double","required":true,"desc":"The width of the lines in the placeholder box."},{"name":"fallbackWidth","type":"double","required":true,"desc":"The width to use when the placeholder is in a situation with an unbounded width."},{"name":"fallbackHeight","type":"double","required":true,"desc":"The height to use when the placeholder is in a situation with an unbounded height."},{"name":"child","type":"Widget?","desc":"The [child] contained by the placeholder box."}],"id":36,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Placeholder Basic Properties","desc":["【color】: Color 【Color】","【strokeWidth】: Stroke Width 【double】"]},{"file":"node2_fallback.dart","name":"Placeholder Fallback Properties","desc":["When there are no width and height constraints in the area, the width and height of the placeholder component.","【fallbackHeight】: Height 【double】","【fallbackWidth】: Width 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_zh-CN.json deleted file mode 100644 index 44a8c2818..000000000 --- a/modules/widget_system/widgets/doc/widgets/Placeholder/Placeholder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Placeholder","path":"/src/widgets/placeholder.dart","parents":["StatelessWidget","Widget"],"desc":"绘制一个框的小部件,该框表示将来某天会添加其他小部件的位置。","fields":[{"name":"color","type":"Color","required":true,"desc":"绘制占位符框的颜色。"},{"name":"strokeWidth","type":"double","required":true,"desc":"占位符框中线条的宽度。"},{"name":"fallbackWidth","type":"double","required":true,"desc":"当占位符处于无界宽度情况时使用的宽度。"},{"name":"fallbackHeight","type":"double","required":true,"desc":"当占位符处于无界高度情况时使用的高度。"},{"name":"child","type":"Widget?","desc":"占位符框包含的 [child]。"}],"id":36,"localName":"占位组件","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Placeholder基础属性","desc":["【color】: 颜色 【Color】","【strokeWidth】: 线粗 【double】"]},{"file":"node2_fallback.dart","name":"Placeholder的fallback属性","desc":["当所在区域无宽高约束时,占位组件的宽高。\"","【fallbackHeight】: 高 【double】","【fallbackWidth】: 宽 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_en-US.json b/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_en-US.json deleted file mode 100644 index 00aa117f7..000000000 --- a/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PlatformMenuBar","path":"/src/widgets/platform_menu_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A menu bar that uses the platform's native APIs to construct and render a menu described by a [PlatformMenu]/[PlatformMenuItem] hierarchy.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"menus","type":"List","required":true,"desc":"The list of menu items that are the top level children of the [PlatformMenuBar]."}],"id":466,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_zh-CN.json deleted file mode 100644 index 7aecd9bd4..000000000 --- a/modules/widget_system/widgets/doc/widgets/PlatformMenuBar/PlatformMenuBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PlatformMenuBar","path":"/src/widgets/platform_menu_bar.dart","parents":["StatefulWidget","Widget"],"desc":"使用平台的原生 API 构建和渲染由 [PlatformMenu]/[PlatformMenuItem] 层次结构描述的菜单的菜单栏。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"menus","type":"List","required":true,"desc":"作为 [PlatformMenuBar] 顶级子项的菜单项列表。"}],"id":466,"localName":"PlatformMenuBar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_en-US.json b/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_en-US.json deleted file mode 100644 index 62f4aa49c..000000000 --- a/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PlatformSelectableRegionContextMenu","path":"/src/widgets/_platform_selectable_region_context_menu_web.dart","parents":["StatelessWidget","Widget"],"desc":" See `_platform_selectable_region_context_menu_io.dart` for full documentation.","fields":[{"name":"child","type":"Widget","required":true,"desc":"See `_platform_selectable_region_context_menu_io.dart`."}],"id":467,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_zh-CN.json deleted file mode 100644 index 1fc3f8e04..000000000 --- a/modules/widget_system/widgets/doc/widgets/PlatformSelectableRegionContextMenu/PlatformSelectableRegionContextMenu_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PlatformSelectableRegionContextMenu","path":"/src/widgets/_platform_selectable_region_context_menu_web.dart","parents":["StatelessWidget","Widget"],"desc":"请参阅 `_platform_selectable_region_context_menu_io.dart` 获取完整文档。","fields":[{"name":"child","type":"Widget","required":true,"desc":"请参阅 `_platform_selectable_region_context_menu_io.dart`。"}],"id":467,"localName":"PlatformSelectableRegionContextMenu","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_en-US.json b/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_en-US.json deleted file mode 100644 index 71c7c7ac2..000000000 --- a/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PlatformViewLink","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":" Links a platform view with the Flutter framework.","fields":[{"name":"viewType","type":"String","required":true,"desc":"The unique identifier for the view type to be embedded."}],"id":468,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_zh-CN.json deleted file mode 100644 index 4ca7a99a6..000000000 --- a/modules/widget_system/widgets/doc/widgets/PlatformViewLink/PlatformViewLink_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PlatformViewLink","path":"/src/widgets/platform_view.dart","parents":["StatefulWidget","Widget"],"desc":"将平台视图与 Flutter 框架链接。","fields":[{"name":"viewType","type":"String","required":true,"desc":"要嵌入的视图类型的唯一标识符。"}],"id":468,"localName":"PlatformViewLink","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_en-US.json b/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_en-US.json deleted file mode 100644 index 3fdf281ab..000000000 --- a/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PlatformViewSurface","path":"/src/widgets/platform_view.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Integrates a platform view with Flutter's compositor, touch, and semantics subsystems.","fields":[{"name":"controller","type":"PlatformViewController","required":true,"desc":"The controller for the platform view integrated by this [PlatformViewSurface]."},{"name":"gestureRecognizers","type":"Set>","required":true,"desc":"Which gestures should be forwarded to the PlatformView."},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":469,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_zh-CN.json deleted file mode 100644 index babfb148a..000000000 --- a/modules/widget_system/widgets/doc/widgets/PlatformViewSurface/PlatformViewSurface_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PlatformViewSurface","path":"/src/widgets/platform_view.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将平台视图与 Flutter 的合成器、触摸和语义子系统集成。","fields":[{"name":"controller","type":"PlatformViewController","required":true,"desc":"此 [PlatformViewSurface] 集成的平台视图的控制器。"},{"name":"gestureRecognizers","type":"Set>","required":true,"desc":"哪些手势应转发到 PlatformView。"},{"name":"hitTestBehavior","type":"PlatformViewHitTestBehavior","required":true,"desc":"{@macro flutter.widgets.AndroidView.hitTestBehavior}"}],"id":469,"localName":"PlatformViewSurface","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_en-US.json b/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_en-US.json deleted file mode 100644 index 08da65c35..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopScope","path":"/src/widgets/pop_scope.dart","parents":["StatefulWidget","Widget"],"desc":" Manages back navigation gestures.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"onPopInvokedWithResult","type":"PopInvokedWithResultCallback?","desc":"{@template flutter.widgets.PopScope.onPopInvokedWithResult} Called after a route pop was handled. {@endtemplate}"},{"name":"onPopInvoked","type":"PopInvokedCallback?","desc":"Called after a route pop was handled."},{"name":"canPop","type":"bool","required":true,"desc":"{@template flutter.widgets.PopScope.canPop} When false, blocks the current route from being popped."}],"id":470,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_zh-CN.json deleted file mode 100644 index 06a5bd078..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopScope/PopScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopScope","path":"/src/widgets/pop_scope.dart","parents":["StatefulWidget","Widget"],"desc":"管理返回导航手势。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"onPopInvokedWithResult","type":"PopInvokedWithResultCallback?","desc":"{@template flutter.widgets.PopScope.onPopInvokedWithResult} 在处理路由弹出后调用。{@endtemplate}"},{"name":"onPopInvoked","type":"PopInvokedCallback?","desc":"在处理路由弹出后调用。"},{"name":"canPop","type":"bool","required":true,"desc":"{@template flutter.widgets.PopScope.canPop} 当为 false 时,阻止当前路由被弹出。"}],"id":470,"localName":"PopScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_en-US.json b/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_en-US.json deleted file mode 100644 index c3172fc3a..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuButton","path":"/src/material/popup_menu.dart","parents":["StatefulWidget","Widget"],"desc":" Displays a menu when pressed and calls [onSelected] when the menu is dismissed because an item was selected. The value passed to [onSelected] is the value of the selected menu item.","fields":[{"name":"itemBuilder","type":"PopupMenuItemBuilder","required":true,"desc":"Called when the button is pressed to create the items to show in the menu."},{"name":"initialValue","type":"T?","desc":"The value of the menu item, if any, that should be highlighted when the menu opens."},{"name":"onOpened","type":"VoidCallback?","desc":"Called when the popup menu is shown."},{"name":"onSelected","type":"PopupMenuItemSelected?","desc":"Called when the user selects a value from the popup menu created by this button."},{"name":"onCanceled","type":"PopupMenuCanceled?","desc":"Called when the user dismisses the popup menu without selecting an item."},{"name":"tooltip","type":"String?","desc":"Text that describes the action that will occur when the button is pressed."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place the menu when open. This controls the size of the shadow below the menu."},{"name":"shadowColor","type":"Color?","desc":"The color used to paint the shadow below the menu."},{"name":"surfaceTintColor","type":"Color?","desc":"The color used as an overlay on [color] to indicate elevation."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"Matches IconButton's 8 dps padding by default. In some cases, notably where this button appears as the trailing element of a list item, it's useful to be able to set the padding to zero."},{"name":"menuPadding","type":"EdgeInsetsGeometry?","desc":"If provided, menu padding is used for empty space around the outside of the popup menu."},{"name":"splashRadius","type":"double?","desc":"The splash radius."},{"name":"child","type":"Widget?","desc":"If provided, [child] is the widget used for this button and the button will utilize an [InkWell] for taps."},{"name":"borderRadius","type":"BorderRadius?","desc":"The border radius for the [InkWell] that wraps the [child]."},{"name":"icon","type":"Widget?","desc":"If provided, the [icon] is used for this button and the button will behave like an [IconButton]."},{"name":"offset","type":"Offset","required":true,"desc":"The offset is applied relative to the initial position set by the [position]."},{"name":"enabled","type":"bool","required":true,"desc":"Whether this popup menu button is interactive."},{"name":"shape","type":"ShapeBorder?","desc":"If provided, the shape used for the menu."},{"name":"color","type":"Color?","desc":"If provided, the background color used for the menu."},{"name":"iconColor","type":"Color?","desc":"If provided, this color is used for the button icon."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"iconSize","type":"double?","desc":"If provided, the size of the [Icon]."},{"name":"constraints","type":"BoxConstraints?","desc":"Optional size constraints for the menu."},{"name":"position","type":"PopupMenuPosition?","desc":"Whether the popup menu is positioned over or under the popup menu button."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"useRootNavigator","type":"bool","required":true,"desc":"Used to determine whether to push the menu to the [Navigator] furthest from or nearest to the given `context`."},{"name":"popUpAnimationStyle","type":"AnimationStyle?","desc":"Used to override the default animation curves and durations of the popup menu's open and close transitions."},{"name":"routeSettings","type":"RouteSettings?","desc":"Optional route settings for the menu."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this icon button's appearance."},{"name":"requestFocus","type":"bool?","desc":"Whether to request focus when the menu appears."}],"id":56,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PopupMenuButton","desc":["【itemBuilder】: Constructor 【PopupMenuItemBuilder】","【offset】: Offset 【Offset】","【color】: Background Color 【Color】","【shape】: Shape 【ShapeBorder】","【elevation】: Elevation 【double】","【onCanceled】: Cancel Event 【Function()】","【onSelected】: Selection Event 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_zh-CN.json deleted file mode 100644 index 7fe3362ec..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuButton/PopupMenuButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuButton","path":"/src/material/popup_menu.dart","parents":["StatefulWidget","Widget"],"desc":"按下时显示菜单,并在因选择项目而关闭菜单时调用 [onSelected]。传递给 [onSelected] 的值是所选菜单项的值。","fields":[{"name":"itemBuilder","type":"PopupMenuItemBuilder","required":true,"desc":"按下按钮时调用以创建要在菜单中显示的项目。"},{"name":"initialValue","type":"T?","desc":"菜单打开时应突出显示的菜单项的值(如果有)。"},{"name":"onOpened","type":"VoidCallback?","desc":"显示弹出菜单时调用。"},{"name":"onSelected","type":"PopupMenuItemSelected?","desc":"用户从此按钮创建的弹出菜单中选择值时调用。"},{"name":"onCanceled","type":"PopupMenuCanceled?","desc":"用户在不选择项目的情况下关闭弹出菜单时调用。"},{"name":"tooltip","type":"String?","desc":"描述按下按钮时将发生的操作的文本。"},{"name":"elevation","type":"double?","desc":"菜单打开时放置菜单的 z 坐标。这控制菜单下方阴影的大小。"},{"name":"shadowColor","type":"Color?","desc":"用于绘制菜单下方阴影的颜色。"},{"name":"surfaceTintColor","type":"Color?","desc":"用作 [color] 上的覆盖以指示高度的颜色。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"默认匹配 IconButton 的 8 dps 内边距。在某些情况下,特别是当此按钮作为列表项的尾随元素出现时,能够将内边距设置为零很有用。"},{"name":"menuPadding","type":"EdgeInsetsGeometry?","desc":"如果提供,菜单内边距用于弹出菜单外部的空白空间。"},{"name":"splashRadius","type":"double?","desc":"飞溅半径。"},{"name":"child","type":"Widget?","desc":"如果提供,[child] 是用于此按钮的小部件,按钮将利用 [InkWell] 进行点击。"},{"name":"borderRadius","type":"BorderRadius?","desc":"包装 [child] 的 [InkWell] 的边框半径。"},{"name":"icon","type":"Widget?","desc":"如果提供,[icon] 用于此按钮,按钮将表现得像 [IconButton]。"},{"name":"offset","type":"Offset","required":true,"desc":"偏移相对于由 [position] 设置的初始位置应用。"},{"name":"enabled","type":"bool","required":true,"desc":"此弹出菜单按钮是否可交互。"},{"name":"shape","type":"ShapeBorder?","desc":"如果提供,用于菜单的形状。"},{"name":"color","type":"Color?","desc":"如果提供,用于菜单的背景颜色。"},{"name":"iconColor","type":"Color?","desc":"如果提供,此颜色用于按钮图标。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"iconSize","type":"double?","desc":"如果提供,[Icon] 的大小。"},{"name":"constraints","type":"BoxConstraints?","desc":"菜单的可选大小约束。"},{"name":"position","type":"PopupMenuPosition?","desc":"弹出菜单是位于弹出菜单按钮上方还是下方。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"useRootNavigator","type":"bool","required":true,"desc":"用于确定是否将菜单推送到距离给定 `context` 最远或最近的 [Navigator]。"},{"name":"popUpAnimationStyle","type":"AnimationStyle?","desc":"用于覆盖弹出菜单打开和关闭过渡的默认动画曲线和持续时间。"},{"name":"routeSettings","type":"RouteSettings?","desc":"菜单的可选路由设置。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此图标按钮的外观。"},{"name":"requestFocus","type":"bool?","desc":"菜单出现时是否请求焦点。"}],"id":56,"localName":"菜单按钮","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PopupMenuButton基本使用","desc":["【itemBuilder】 : 构造器 【PopupMenuItemBuilder】","【offset】 : 偏移 【Offset】","【color】 : 背景颜色 【Color】","【shape】 : 形状 【ShapeBorder】","【elevation】 : 影深 【double】","【onCanceled】 : 取消事件 【Function()】","【onSelected】 : 选择事件 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_en-US.json b/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_en-US.json deleted file mode 100644 index 1a43d7dd1..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuDivider","path":"/src/material/popup_menu.dart","parents":["PopupMenuEntry","StatefulWidget","Widget"],"desc":" A horizontal divider in a Material Design popup menu.","fields":[{"name":"height","type":"double","required":true,"desc":"The height of the divider entry."},{"name":"thickness","type":"double?","desc":"The thickness of the line drawn within the [PopupMenuDivider]."},{"name":"indent","type":"double?","desc":"The amount of empty space to the leading edge of the [PopupMenuDivider]."},{"name":"endIndent","type":"double?","desc":"The amount of empty space to the trailing edge of the [PopupMenuDivider]."},{"name":"radius","type":"BorderRadiusGeometry?","desc":"The amount of radius for the border of the [PopupMenuDivider]."},{"name":"color","type":"Color?","desc":"{@macro flutter.material.Divider.color}"}],"id":174,"lever":1,"family":1,"linkIds":[56,34],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PopupMenuDivider","desc":["【height】 : height 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_zh-CN.json deleted file mode 100644 index aabcb55cb..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuDivider/PopupMenuDivider_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuDivider","path":"/src/material/popup_menu.dart","parents":["PopupMenuEntry","StatefulWidget","Widget"],"desc":"Material Design 弹出菜单中的水平分隔符。","fields":[{"name":"height","type":"double","required":true,"desc":"分隔符条目的高度。"},{"name":"thickness","type":"double?","desc":"在 [PopupMenuDivider] 内绘制的线的厚度。"},{"name":"indent","type":"double?","desc":"[PopupMenuDivider] 前导边缘的空白空间量。"},{"name":"endIndent","type":"double?","desc":"[PopupMenuDivider] 尾随边缘的空白空间量。"},{"name":"radius","type":"BorderRadiusGeometry?","desc":"[PopupMenuDivider] 边框的半径量。"},{"name":"color","type":"Color?","desc":"{@macro flutter.material.Divider.color}"}],"id":174,"localName":"弹出菜单分割线","lever":1,"family":1,"linkIds":[56,34],"nodes":[{"file":"node1_base.dart","name":"PopupMenuDivider基本使用","desc":["【height】 : 高度 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_en-US.json b/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_en-US.json deleted file mode 100644 index 0914ad0fa..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuEntry","path":"/src/material/popup_menu.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" A base class for entries in a Material Design popup menu.","fields":[],"id":471,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_zh-CN.json deleted file mode 100644 index 4e5a571f0..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuEntry/PopupMenuEntry_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuEntry","path":"/src/material/popup_menu.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"Material Design 弹出菜单中条目的基类。","fields":[],"id":471,"localName":"PopupMenuEntry","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_en-US.json b/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_en-US.json deleted file mode 100644 index 74061b9f8..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuItem","path":"/src/material/popup_menu.dart","parents":["PopupMenuEntry","StatefulWidget","Widget"],"desc":" An item in a Material Design popup menu.","fields":[{"name":"value","type":"T?","desc":"The value that will be returned by [showMenu] if this entry is selected."},{"name":"onTap","type":"VoidCallback?","desc":"Called when the menu item is tapped."},{"name":"enabled","type":"bool","required":true,"desc":"Whether the user is permitted to select this item."},{"name":"height","type":"double","required":true,"desc":"The minimum height of the menu item."},{"name":"padding","type":"EdgeInsets?","desc":"The padding of the menu item."},{"name":"textStyle","type":"TextStyle?","desc":"The text style of the popup menu item."},{"name":"labelTextStyle","type":"MaterialStateProperty?","desc":"The label style of the popup menu item."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.popupmenu.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":472,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_zh-CN.json deleted file mode 100644 index e326eac39..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuItem/PopupMenuItem_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuItem","path":"/src/material/popup_menu.dart","parents":["PopupMenuEntry","StatefulWidget","Widget"],"desc":"Material Design 弹出菜单中的项目。","fields":[{"name":"value","type":"T?","desc":"如果选择此条目,[showMenu] 将返回的值。"},{"name":"onTap","type":"VoidCallback?","desc":"点击菜单项时调用。"},{"name":"enabled","type":"bool","required":true,"desc":"是否允许用户选择此项目。"},{"name":"height","type":"double","required":true,"desc":"菜单项的最小高度。"},{"name":"padding","type":"EdgeInsets?","desc":"菜单项的内边距。"},{"name":"textStyle","type":"TextStyle?","desc":"弹出菜单项的文本样式。"},{"name":"labelTextStyle","type":"MaterialStateProperty?","desc":"弹出菜单项的标签样式。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.popupmenu.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":472,"localName":"PopupMenuItem","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_en-US.json deleted file mode 100644 index 25e4a8ad2..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuTheme","path":"/src/material/popup_menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for popup menus in this widget's subtree.","fields":[{"name":"data","type":"PopupMenuThemeData","required":true,"desc":"The properties for descendant popup menu widgets."}],"id":330,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PopupMenuTheme","desc":["You can specify the PopupMenuThemeData properties to set default styles for descendant PopupMenuButton components, such as shape, elevation, color, text style, etc. You can also use PopupMenuTheme.of to obtain the theme data of PopupMenu."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_zh-CN.json deleted file mode 100644 index 546444d1b..000000000 --- a/modules/widget_system/widgets/doc/widgets/PopupMenuTheme/PopupMenuTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PopupMenuTheme","path":"/src/material/popup_menu_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的弹出菜单定义配置的继承小部件。","fields":[{"name":"data","type":"PopupMenuThemeData","required":true,"desc":"后代弹出菜单小部件的属性。"}],"id":330,"localName":"弹出菜单样式","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PopupMenuTheme基本使用","desc":["可指定PopupMenuThemeData数据属性为【后代】的PopupMenuButton组件设置默认样式,如形状、影深、颜色、文字样式等。也可以用PopupMenuTheme.of获取PopupMenu的主题数据。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_en-US.json b/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_en-US.json deleted file mode 100644 index af6a0ea11..000000000 --- a/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Positioned","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":" A widget that controls where a child of a [Stack] is positioned.","fields":[{"name":"left","type":"double?","desc":"The distance that the child's left edge is inset from the left of the stack."},{"name":"top","type":"double?","desc":"The distance that the child's top edge is inset from the top of the stack."},{"name":"right","type":"double?","desc":"The distance that the child's right edge is inset from the right of the stack."},{"name":"bottom","type":"double?","desc":"The distance that the child's bottom edge is inset from the bottom of the stack."},{"name":"width","type":"double?","desc":"The child's width."},{"name":"height","type":"double?","desc":"The child's height."}],"id":108,"lever":3,"family":5,"linkIds":[97,159,121],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Positioned","desc":["【child】: Component 【Widget】","【top】: Distance to the top of the parent 【double】","【right】: Distance to the right of the parent 【double】","【left】: Distance to the left of the parent 【double】","【bottom】: Distance to the bottom of the parent 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_zh-CN.json deleted file mode 100644 index 557ee8183..000000000 --- a/modules/widget_system/widgets/doc/widgets/Positioned/Positioned_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Positioned","path":"/src/widgets/basic.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":"控制 [Stack] 子项位置的小部件。","fields":[{"name":"left","type":"double?","desc":"子项左边缘从堆栈左侧插入的距离。"},{"name":"top","type":"double?","desc":"子项顶边缘从堆栈顶部插入的距离。"},{"name":"right","type":"double?","desc":"子项右边缘从堆栈右侧插入的距离。"},{"name":"bottom","type":"double?","desc":"子项底边缘从堆栈底部插入的距离。"},{"name":"width","type":"double?","desc":"子项的宽度。"},{"name":"height","type":"double?","desc":"子项的高度。"}],"id":108,"localName":"定位组件","lever":3,"family":5,"linkIds":[97,159,121],"nodes":[{"file":"node1_base.dart","name":"Positioned基本使用","desc":["【child】 : 组件 【Widget】","【top】 : 到父顶距离 【double】","【right】 : 到父右距离 【double】","【left】 : 到父左距离 【double】","【bottom】 : 到父底距离 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_en-US.json b/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_en-US.json deleted file mode 100644 index c958b89de..000000000 --- a/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PositionedDirectional","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that controls where a child of a [Stack] is positioned without committing to a specific [TextDirection].","fields":[{"name":"start","type":"double?","desc":"The distance that the child's leading edge is inset from the leading edge of the stack."},{"name":"top","type":"double?","desc":"The distance that the child's top edge is inset from the top of the stack."},{"name":"end","type":"double?","desc":"The distance that the child's trailing edge is inset from the trailing edge of the stack."},{"name":"bottom","type":"double?","desc":"The distance that the child's bottom edge is inset from the bottom of the stack."},{"name":"width","type":"double?","desc":"The child's width."},{"name":"height","type":"double?","desc":"The child's height."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":159,"lever":3,"family":0,"linkIds":[108,122],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PositionedDirectional","desc":["【child】 : Component 【Widget】","【top】 : Distance to the top of the parent 【double】","【end】 : Distance to the right of the parent 【double】","【start】 : Distance to the left of the parent 【double】","【bottom】 : Distance to the bottom of the parent 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_zh-CN.json deleted file mode 100644 index 85f59a581..000000000 --- a/modules/widget_system/widgets/doc/widgets/PositionedDirectional/PositionedDirectional_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PositionedDirectional","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":"控制 [Stack] 子项位置的小部件,不提交特定的 [TextDirection]。","fields":[{"name":"start","type":"double?","desc":"子项前导边缘从堆栈前导边缘插入的距离。"},{"name":"top","type":"double?","desc":"子项顶边缘从堆栈顶部插入的距离。"},{"name":"end","type":"double?","desc":"子项尾随边缘从堆栈尾随边缘插入的距离。"},{"name":"bottom","type":"double?","desc":"子项底边缘从堆栈底部插入的距离。"},{"name":"width","type":"double?","desc":"子项的宽度。"},{"name":"height","type":"double?","desc":"子项的高度。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":159,"localName":"方向定位","lever":3,"family":0,"linkIds":[108,122],"nodes":[{"file":"node1_base.dart","name":"PositionedDirectional基本使用","desc":["【child】 : 组件 【Widget】","【top】 : 到父顶距离 【double】","【end】 : 到父右距离 【double】","【start】 : 到父左距离 【double】","【bottom】 : 到父底距离 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_en-US.json deleted file mode 100644 index 243717cb6..000000000 --- a/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PositionedTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Positioned] which takes a specific [Animation] to transition the child's position from a start position to an end position over the lifetime of the animation.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":93,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of PositionedTransition","desc":["【child】 : Child component 【Widget】","【rect】 : Animation 【Animation】"," The PositionedTransition component only works within a Stack"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_zh-CN.json deleted file mode 100644 index 493618dd2..000000000 --- a/modules/widget_system/widgets/doc/widgets/PositionedTransition/PositionedTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PositionedTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"[Positioned] 的动画版本,它接受特定的 [Animation] 在动画的生命周期内将子项的位置从开始位置过渡到结束位置。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":93,"localName":"位置变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"PositionedTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【rect】 : 动画 【Animation】"," PositionedTransition组件只能在Stack内起作用"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_en-US.json b/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_en-US.json deleted file mode 100644 index 3effceeaf..000000000 --- a/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PreferredSize","path":"/src/widgets/preferred_size.dart","parents":["StatelessWidget","Widget"],"desc":" A widget with a preferred size.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"preferredSize","type":"Size","required":true}],"id":204,"lever":2,"family":0,"linkIds":[57,64],"nodes":[{"file":"node1_base.dart","name":"Adjusting AppBar Height with PreferredSize","desc":["【preferredSize】 : size 【Size】"]},{"file":"node2_adapter.dart","name":"Conversion and Usage of PreferredSize","desc":["【PreferredSize converts a regular component into a PreferredSizeWidget"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_zh-CN.json deleted file mode 100644 index 25c7aa027..000000000 --- a/modules/widget_system/widgets/doc/widgets/PreferredSize/PreferredSize_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PreferredSize","path":"/src/widgets/preferred_size.dart","parents":["StatelessWidget","Widget"],"desc":"具有首选大小的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"preferredSize","type":"Size","required":true}],"id":204,"localName":"优先尺寸","lever":2,"family":0,"linkIds":[57,64],"nodes":[{"file":"node1_base.dart","name":"PreferredSize调整AppBar高度","desc":["【preferredSize】 : 尺寸 【Size】"]},{"file":"node2_adapter.dart","name":"PreferredSize的转化使用","desc":["【PreferredSize将普通组件转化为PreferredSizeWidget"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_en-US.json deleted file mode 100644 index 8871352e5..000000000 --- a/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PreferredSizeWidget","path":"/src/widgets/preferred_size.dart","abstract":true,"parents":["Object","Widget"],"desc":" An interface for widgets that can return the size this widget would prefer if it were otherwise unconstrained.","fields":[],"id":473,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_zh-CN.json deleted file mode 100644 index e91e001dd..000000000 --- a/modules/widget_system/widgets/doc/widgets/PreferredSizeWidget/PreferredSizeWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PreferredSizeWidget","path":"/src/widgets/preferred_size.dart","abstract":true,"parents":["Object","Widget"],"desc":"可以返回此小部件在其他情况下不受约束时首选大小的小部件接口。","fields":[],"id":473,"localName":"PreferredSizeWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_en-US.json b/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_en-US.json deleted file mode 100644 index fb6a3539a..000000000 --- a/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PrimaryScrollController","path":"/src/widgets/primary_scroll_controller.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Associates a [ScrollController] with a subtree.","fields":[{"name":"controller","type":"ScrollController?","desc":"The [ScrollController] associated with the subtree."},{"name":"scrollDirection","type":"Axis?","desc":"The [Axis] this controller is configured for [ScrollView]s to automatically inherit."},{"name":"automaticallyInheritForPlatforms","type":"Set","required":true,"desc":"The [TargetPlatform]s this controller is configured for [ScrollView]s to automatically inherit."}],"id":335,"lever":1,"family":5,"linkIds":[349,344,164],"nodes":[{"file":"node1_base.dart","name":"Introduction to PrimaryScrollController","desc":["【controller】: Scroll Controller 【ScrollController】","【child】: Child Widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_zh-CN.json b/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_zh-CN.json deleted file mode 100644 index 9158dc376..000000000 --- a/modules/widget_system/widgets/doc/widgets/PrimaryScrollController/PrimaryScrollController_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"PrimaryScrollController","path":"/src/widgets/primary_scroll_controller.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将 [ScrollController] 与子树关联。","fields":[{"name":"controller","type":"ScrollController?","desc":"与子树关联的 [ScrollController]。"},{"name":"scrollDirection","type":"Axis?","desc":"此控制器配置为 [ScrollView] 自动继承的 [Axis]。"},{"name":"automaticallyInheritForPlatforms","type":"Set","required":true,"desc":"此控制器配置为 [ScrollView] 自动继承的 [TargetPlatform]。"}],"id":335,"localName":"初始滑动控制器","lever":1,"family":5,"linkIds":[349,344,164],"nodes":[{"file":"node1_base.dart","name":"PrimaryScrollController 介绍","desc":["【controller】 : 滑动控制器 【ScrollController】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_en-US.json deleted file mode 100644 index cdd3e97ab..000000000 --- a/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ProgressIndicator","path":"/src/material/progress_indicator.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" A base class for Material Design progress indicators.","fields":[{"name":"value","type":"double?","desc":"If non-null, the value of this progress indicator."},{"name":"backgroundColor","type":"Color?","desc":"The progress indicator's background color."},{"name":"color","type":"Color?","desc":"{@template flutter.progress_indicator.ProgressIndicator.color} The progress indicator's color."},{"name":"valueColor","type":"Animation?","desc":"The progress indicator's color as an animated value."},{"name":"semanticsLabel","type":"String?","desc":"{@template flutter.progress_indicator.ProgressIndicator.semanticsLabel} The [SemanticsProperties.label] for this progress indicator."},{"name":"semanticsValue","type":"String?","desc":"{@template flutter.progress_indicator.ProgressIndicator.semanticsValue} The [SemanticsProperties.value] for this progress indicator."}],"id":474,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_zh-CN.json deleted file mode 100644 index b03634757..000000000 --- a/modules/widget_system/widgets/doc/widgets/ProgressIndicator/ProgressIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ProgressIndicator","path":"/src/material/progress_indicator.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"Material Design 进度指示器的基类。","fields":[{"name":"value","type":"double?","desc":"如果非空,此进度指示器的值。"},{"name":"backgroundColor","type":"Color?","desc":"进度指示器的背景颜色。"},{"name":"color","type":"Color?","desc":"{@template flutter.progress_indicator.ProgressIndicator.color} 进度指示器的颜色。"},{"name":"valueColor","type":"Animation?","desc":"进度指示器的颜色作为动画值。"},{"name":"semanticsLabel","type":"String?","desc":"{@template flutter.progress_indicator.ProgressIndicator.semanticsLabel} 此进度指示器的 [SemanticsProperties.label]。"},{"name":"semanticsValue","type":"String?","desc":"{@template flutter.progress_indicator.ProgressIndicator.semanticsValue} 此进度指示器的 [SemanticsProperties.value]。"}],"id":474,"localName":"ProgressIndicator","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_en-US.json deleted file mode 100644 index da8a5fdde..000000000 --- a/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ProgressIndicatorTheme","path":"/src/material/progress_indicator_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for [ProgressIndicator]s in this widget's subtree.","fields":[{"name":"data","type":"ProgressIndicatorThemeData","required":true,"desc":"The properties for descendant [ProgressIndicator] widgets."}],"id":475,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_zh-CN.json deleted file mode 100644 index d87bb022c..000000000 --- a/modules/widget_system/widgets/doc/widgets/ProgressIndicatorTheme/ProgressIndicatorTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ProgressIndicatorTheme","path":"/src/material/progress_indicator_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [ProgressIndicator] 定义配置的继承小部件。","fields":[{"name":"data","type":"ProgressIndicatorThemeData","required":true,"desc":"后代 [ProgressIndicator] 小部件的属性。"}],"id":475,"localName":"ProgressIndicatorTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_en-US.json deleted file mode 100644 index 12ffc5f31..000000000 --- a/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ProxyWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":" A widget that has a child widget provided to it, instead of building a new widget.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":476,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_zh-CN.json deleted file mode 100644 index 86e7daf42..000000000 --- a/modules/widget_system/widgets/doc/widgets/ProxyWidget/ProxyWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ProxyWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":"具有提供给它的子小部件的小部件,而不是构建新小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":476,"localName":"ProxyWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Radio/Radio_en-US.json b/modules/widget_system/widgets/doc/widgets/Radio/Radio_en-US.json deleted file mode 100644 index 099ac0471..000000000 --- a/modules/widget_system/widgets/doc/widgets/Radio/Radio_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Radio","path":"/src/material/radio.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design radio button.","fields":[{"name":"value","type":"T","required":true,"desc":"The value represented by this radio button."},{"name":"groupValue","type":"T?","desc":"The currently selected value for a group of radio buttons."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user selects this radio button."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.radio.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"toggleable","type":"bool","required":true,"desc":"Set to true if this radio button is allowed to be returned to an indeterminate state by selecting it again when selected."},{"name":"activeColor","type":"Color?","desc":"The color to use when this radio button is selected."},{"name":"fillColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.radio.fillColor} The color that fills the radio button, in all [WidgetState]s."},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.radio.materialTapTargetSize} Configures the minimum size of the tap target. {@endtemplate}"},{"name":"visualDensity","type":"VisualDensity?","desc":"{@template flutter.material.radio.visualDensity} Defines how compact the radio's layout will be. {@endtemplate}"},{"name":"focusColor","type":"Color?","desc":"The color for the radio's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"{@template flutter.material.radio.hoverColor} The color for the radio's [Material] when a pointer is hovering over it."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.radio.overlayColor} The color for the radio's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.radio.splashRadius} The splash radius of the circular [Material] ink response. {@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"useCupertinoCheckmarkStyle","type":"bool","required":true,"desc":"Controls whether the checkmark style is used in an iOS-style radio."}],"id":45,"lever":4,"family":1,"linkIds":[19,240],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Radio","desc":["【value】: Radio button value 【T】","【groupValue】: Current matching value 【T】","【activeColor】: Active color 【Color】","【onChanged】: Callback on change 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Radio/Radio_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Radio/Radio_zh-CN.json deleted file mode 100644 index f4d55ddc6..000000000 --- a/modules/widget_system/widgets/doc/widgets/Radio/Radio_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Radio","path":"/src/material/radio.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 单选按钮。","fields":[{"name":"value","type":"T","required":true,"desc":"此单选按钮表示的值。"},{"name":"groupValue","type":"T?","desc":"一组单选按钮的当前选定值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户选择此单选按钮时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.radio.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"toggleable","type":"bool","required":true,"desc":"如果此单选按钮在选中时再次选择可以返回到不确定状态,则设置为 true。"},{"name":"activeColor","type":"Color?","desc":"选择此单选按钮时使用的颜色。"},{"name":"fillColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.radio.fillColor} 在所有 [WidgetState] 中填充单选按钮的颜色。"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.radio.materialTapTargetSize} 配置点击目标的最小大小。{@endtemplate}"},{"name":"visualDensity","type":"VisualDensity?","desc":"{@template flutter.material.radio.visualDensity} 定义单选按钮布局的紧凑程度。{@endtemplate}"},{"name":"focusColor","type":"Color?","desc":"单选按钮具有输入焦点时其 [Material] 的颜色。"},{"name":"hoverColor","type":"Color?","desc":"{@template flutter.material.radio.hoverColor} 指针悬停在单选按钮上时其 [Material] 的颜色。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.radio.overlayColor} 单选按钮的 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.radio.splashRadius} 圆形 [Material] 墨水响应的飞溅半径。{@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"useCupertinoCheckmarkStyle","type":"bool","required":true,"desc":"控制是否在 iOS 风格的单选按钮中使用复选标记样式。"}],"id":45,"localName":"选钮","lever":4,"family":1,"linkIds":[19,240],"nodes":[{"file":"node1_base.dart","name":"Radio基本使用","desc":["【value】 : 选钮值 【T】","【groupValue】 : 当前匹配值 【T】","【activeColor】 : 激活颜色 【Color】","【onChanged】 : 改变时回调 【Function(T)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_en-US.json deleted file mode 100644 index 179e4e90a..000000000 --- a/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RadioListTile","path":"/src/material/radio_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A [ListTile] with a [Radio]. In other words, a radio button with a label.","fields":[{"name":"value","type":"T","required":true,"desc":"The value represented by this radio button."},{"name":"groupValue","type":"T?","desc":"The currently selected value for this group of radio buttons."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user selects this radio button."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"toggleable","type":"bool","required":true,"desc":"Set to true if this radio list tile is allowed to be returned to an indeterminate state by selecting it again when selected."},{"name":"activeColor","type":"Color?","desc":"The color to use when this radio button is selected."},{"name":"fillColor","type":"MaterialStateProperty?","desc":"The color that fills the radio button."},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.radio.materialTapTargetSize}"},{"name":"hoverColor","type":"Color?","desc":"{@macro flutter.material.radio.hoverColor}"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The color for the radio's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.radio.splashRadius}"},{"name":"title","type":"Widget?","desc":"The primary content of the list tile."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"secondary","type":"Widget?","desc":"A widget to display on the opposite side of the tile from the radio button."},{"name":"isThreeLine","type":"bool","required":true,"desc":"Whether this list tile is intended to display three lines of text."},{"name":"dense","type":"bool?","desc":"Whether this list tile is part of a vertically dense list."},{"name":"selected","type":"bool","required":true,"desc":"Whether to render icons and text in the [activeColor]."},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"Where to place the control relative to the text."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"Defines the insets surrounding the contents of the tile."},{"name":"shape","type":"ShapeBorder?","desc":"If specified, [shape] defines the shape of the [RadioListTile]'s [InkWell] border."},{"name":"tileColor","type":"Color?","desc":"If specified, defines the background color for `RadioListTile` when [RadioListTile.selected] is false."},{"name":"selectedTileColor","type":"Color?","desc":"If non-null, defines the background color when [RadioListTile.selected] is true."},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the list tile's layout will be."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"Whether to add button:true to the semantics if onTap is provided. This is a temporary flag to help changing the behavior of ListTile onTap semantics."},{"name":"useCupertinoCheckmarkStyle","type":"bool","required":true,"desc":"Whether to use the checkbox style for the [CupertinoRadio] control."},{"name":"radioScaleFactor","type":"double","required":true,"desc":"Controls the scaling factor applied to the [Radio] within the [RadioListTile]."}],"id":19,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RadioListTile requires a generic type T","desc":["【value】 : Item object 【T】","【groupValue】 : Selected object 【T】","【selected】: Whether selected 【bool】","【secondary】: Right component 【Widget】","【title】: Middle top component 【Widget】","【subtitle】: Middle bottom component 【Widget】","【onChanged】: Switch event 【Function(T)】"]},{"file":"node2_dense.dart","name":"RadioListTile selection color and dense layout","desc":["【activeColor】 : Color when selected 【Color】","【dense】: Whether dense layout 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_zh-CN.json deleted file mode 100644 index 246794c06..000000000 --- a/modules/widget_system/widgets/doc/widgets/RadioListTile/RadioListTile_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RadioListTile","path":"/src/material/radio_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":"带有 [Radio] 的 [ListTile]。换句话说,带有标签的单选按钮。","fields":[{"name":"value","type":"T","required":true,"desc":"此单选按钮表示的值。"},{"name":"groupValue","type":"T?","desc":"此单选按钮组当前选择的值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户选择此单选按钮时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"toggleable","type":"bool","required":true,"desc":"设置为 true 如果此单选列表磁贴允许通过在选中时再次选择它来返回到不确定状态。"},{"name":"activeColor","type":"Color?","desc":"选择此单选按钮时使用的颜色。"},{"name":"fillColor","type":"MaterialStateProperty?","desc":"填充单选按钮的颜色。"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.radio.materialTapTargetSize}"},{"name":"hoverColor","type":"Color?","desc":"{@macro flutter.material.radio.hoverColor}"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"单选按钮的 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.radio.splashRadius}"},{"name":"title","type":"Widget?","desc":"列表磁贴的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"secondary","type":"Widget?","desc":"在磁贴上与单选按钮相对侧显示的小部件。"},{"name":"isThreeLine","type":"bool","required":true,"desc":"此列表磁贴是否旨在显示三行文本。"},{"name":"dense","type":"bool?","desc":"此列表磁贴是否是垂直密集列表的一部分。"},{"name":"selected","type":"bool","required":true,"desc":"是否在 [activeColor] 中渲染图标和文本。"},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"控件相对于文本的放置位置。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"定义磁贴内容周围的插入。"},{"name":"shape","type":"ShapeBorder?","desc":"如果指定,[shape] 定义 [RadioListTile] 的 [InkWell] 边框的形状。"},{"name":"tileColor","type":"Color?","desc":"如果指定,当 [RadioListTile.selected] 为 false 时定义 `RadioListTile` 的背景颜色。"},{"name":"selectedTileColor","type":"Color?","desc":"如果非空,当 [RadioListTile.selected] 为 true 时定义背景颜色。"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义列表磁贴布局的紧凑程度。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"如果提供了 onTap,是否向语义添加 button:true。这是一个临时标志,用于帮助更改 ListTile onTap 语义的行为。"},{"name":"useCupertinoCheckmarkStyle","type":"bool","required":true,"desc":"是否为 [CupertinoRadio] 控件使用复选框样式。"},{"name":"radioScaleFactor","type":"double","required":true,"desc":"控制应用于 [RadioListTile] 内 [Radio] 的缩放因子。"}],"id":19,"localName":"选钮瓦片","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RadioListTile需要一个泛型T","desc":["【value】 : 条目对象 【T】","【groupValue】 : 选中对象 【T】","【selected】: 是否选中 【bool】","【secondary】: 右侧组件 【Widget】","【title】: 中间上组件 【Widget】","【subtitle】: 中间下组件 【Widget】","【onChanged】: 切换事件 【Function(T)】"]},{"file":"node2_dense.dart","name":"RadioListTile选中色和密排","desc":["【activeColor】 : 选中时颜色 【Color】","【dense】: 是否密排 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_en-US.json b/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_en-US.json deleted file mode 100644 index fb6fe0151..000000000 --- a/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RadioMenuButton","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":" A menu item that combines a [Radio] widget with a [MenuItemButton].","fields":[{"name":"value","type":"T","required":true,"desc":"The value represented by this radio button."},{"name":"groupValue","type":"T?","desc":"The currently selected value for a group of radio buttons."},{"name":"toggleable","type":"bool","required":true,"desc":"Set to true if this radio button is allowed to be returned to an indeterminate state by selecting it again when selected."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user selects this radio button."},{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the button response area."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"The optional shortcut that selects this [MenuItemButton]."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"trailingIcon","type":"Widget?","desc":"An optional icon to display after the [child] label."},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@macro flutter.material.menu_anchor.closeOnActivate}"},{"name":"child","type":"Widget?","desc":"The widget displayed in the center of this button."}],"id":477,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_zh-CN.json deleted file mode 100644 index 2456abb59..000000000 --- a/modules/widget_system/widgets/doc/widgets/RadioMenuButton/RadioMenuButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RadioMenuButton","path":"/src/material/menu_anchor.dart","parents":["StatelessWidget","Widget"],"desc":"将 [Radio] 小部件与 [MenuItemButton] 结合的菜单项。","fields":[{"name":"value","type":"T","required":true,"desc":"此单选按钮表示的值。"},{"name":"groupValue","type":"T?","desc":"一组单选按钮当前选择的值。"},{"name":"toggleable","type":"bool","required":true,"desc":"设置为 true 如果此单选按钮允许通过在选中时再次选择它来返回到不确定状态。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户选择此单选按钮时调用。"},{"name":"onHover","type":"ValueChanged?","desc":"指针进入或退出按钮响应区域时调用。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点更改时调用的处理程序。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"shortcut","type":"MenuSerializableShortcut?","desc":"选择此 [MenuItemButton] 的可选快捷方式。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"trailingIcon","type":"Widget?","desc":"在 [child] 标签后显示的可选图标。"},{"name":"closeOnActivate","type":"bool","required":true,"desc":"{@macro flutter.material.menu_anchor.closeOnActivate}"},{"name":"child","type":"Widget?","desc":"显示在此按钮中心的小部件。"}],"id":477,"localName":"RadioMenuButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_en-US.json deleted file mode 100644 index 3e6a5eb40..000000000 --- a/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RadioTheme","path":"/src/material/radio_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a radio theme to descendant [Radio] widgets.","fields":[{"name":"data","type":"RadioThemeData","required":true,"desc":"The properties used for all descendant [Radio] widgets."}],"id":478,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_zh-CN.json deleted file mode 100644 index 1df2cd892..000000000 --- a/modules/widget_system/widgets/doc/widgets/RadioTheme/RadioTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RadioTheme","path":"/src/material/radio_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将单选按钮主题应用于后代 [Radio] 小部件。","fields":[{"name":"data","type":"RadioThemeData","required":true,"desc":"用于所有后代 [Radio] 小部件的属性。"}],"id":478,"localName":"RadioTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_en-US.json b/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_en-US.json deleted file mode 100644 index 7b07873fb..000000000 --- a/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RangeSlider","path":"/src/material/range_slider.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design range slider.","fields":[{"name":"values","type":"RangeValues","required":true,"desc":"The currently selected values for this range slider."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user is selecting a new value for the slider by dragging."},{"name":"onChangeStart","type":"ValueChanged?","desc":"Called when the user starts selecting new values for the slider."},{"name":"onChangeEnd","type":"ValueChanged?","desc":"Called when the user is done selecting new values for the slider."},{"name":"min","type":"double","required":true,"desc":"The minimum value the user can select."},{"name":"max","type":"double","required":true,"desc":"The maximum value the user can select."},{"name":"divisions","type":"int?","desc":"The number of discrete divisions."},{"name":"labels","type":"RangeLabels?","desc":"Labels to show as text in the [SliderThemeData.rangeValueIndicatorShape] when the slider is active and [SliderThemeData.showValueIndicator] is satisfied."},{"name":"activeColor","type":"Color?","desc":"The color of the track's active segment, i.e. the span of track between the thumbs."},{"name":"inactiveColor","type":"Color?","desc":"The color of the track's inactive segments, i.e. the span of tracks between the min and the start thumb, and the end thumb and the max."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The highlight color that's typically used to indicate that the range slider thumb is hovered or dragged."},{"name":"mouseCursor","type":"MaterialStateProperty?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"semanticFormatterCallback","type":"SemanticFormatterCallback?","desc":"The callback used to create a semantic value from the slider's values."}],"id":44,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RangeSlider","desc":["【values】 : Values 【RangeValues】","【min】 : Minimum value 【double】","【max】 : Maximum value 【double】","【divisions】 : Number of divisions 【int】","【label】 : Tooltip text 【String】","【activeColor】 : Active color 【Color】","【inactiveColor】 : Inactive color 【Color】","【onChangeStart】 : Listener when sliding starts 【Function(RangeValues)】","【onChangeEnd】 : Listener when sliding ends 【Function(RangeValues)】","【onChanged】 : Callback when changed 【Function(RangeValues)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_zh-CN.json deleted file mode 100644 index acce0180b..000000000 --- a/modules/widget_system/widgets/doc/widgets/RangeSlider/RangeSlider_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RangeSlider","path":"/src/material/range_slider.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 范围滑块。","fields":[{"name":"values","type":"RangeValues","required":true,"desc":"此范围滑块当前选择的值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户通过拖动为滑块选择新值时调用。"},{"name":"onChangeStart","type":"ValueChanged?","desc":"用户开始为滑块选择新值时调用。"},{"name":"onChangeEnd","type":"ValueChanged?","desc":"用户完成为滑块选择新值时调用。"},{"name":"min","type":"double","required":true,"desc":"用户可以选择的最小值。"},{"name":"max","type":"double","required":true,"desc":"用户可以选择的最大值。"},{"name":"divisions","type":"int?","desc":"离散分割的数量。"},{"name":"labels","type":"RangeLabels?","desc":"当滑块处于活动状态且满足 [SliderThemeData.showValueIndicator] 时,在 [SliderThemeData.rangeValueIndicatorShape] 中显示为文本的标签。"},{"name":"activeColor","type":"Color?","desc":"轨道活动段的颜色,即拇指之间的轨道跨度。"},{"name":"inactiveColor","type":"Color?","desc":"轨道非活动段的颜色,即最小值和开始拇指之间以及结束拇指和最大值之间的轨道跨度。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"通常用于指示范围滑块拇指被悬停或拖动的高亮颜色。"},{"name":"mouseCursor","type":"MaterialStateProperty?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"semanticFormatterCallback","type":"SemanticFormatterCallback?","desc":"用于从滑块值创建语义值的回调。"}],"id":44,"localName":"范围滑块","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RangeSlider基本使用","desc":["【values】 : 数值 【RangeValues】","【min】 : 最小值 【double】","【max】 : 最大值 【double】","【divisions】 : 分段数 【int】","【label】 : 提示气泡文字 【String】","【activeColor】 : 激活颜色 【Color】","【inactiveColor】 : 非激活颜色 【Color】","【onChangeStart】 : 开始滑动时监听 【Function(RangeValues)】","【onChangeEnd】 : 滑动结束时监听 【Function(RangeValues)】","【onChanged】 : 改变时回调 【Function(RangeValues)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_en-US.json b/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_en-US.json deleted file mode 100644 index 68661bb15..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawAutocomplete","path":"/src/widgets/autocomplete.dart","parents":["StatefulWidget","Widget"],"desc":" {@template flutter.widgets.RawAutocomplete.RawAutocomplete} A widget for helping the user make a selection by entering some text and choosing from among a list of options.","fields":[{"name":"fieldViewBuilder","type":"AutocompleteFieldViewBuilder?","desc":"{@template flutter.widgets.RawAutocomplete.fieldViewBuilder} Builds the field whose input is used to get the options."},{"name":"focusNode","type":"FocusNode?","desc":"The [FocusNode] that is used for the text field."},{"name":"optionsViewBuilder","type":"AutocompleteOptionsViewBuilder","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsViewBuilder} Builds the selectable options widgets from a list of options objects."},{"name":"optionsViewOpenDirection","type":"OptionsViewOpenDirection","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsViewOpenDirection} The direction in which to open the options-view overlay."},{"name":"displayStringForOption","type":"AutocompleteOptionToString","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.displayStringForOption} Returns the string to display in the field when the option is selected."},{"name":"onSelected","type":"AutocompleteOnSelected?","desc":"{@template flutter.widgets.RawAutocomplete.onSelected} Called when an option is selected by the user. {@endtemplate}"},{"name":"optionsBuilder","type":"AutocompleteOptionsBuilder","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsBuilder} A function that returns the current selectable options objects given the current TextEditingValue. {@endtemplate}"},{"name":"textEditingController","type":"TextEditingController?","desc":"The [TextEditingController] that is used for the text field."},{"name":"initialValue","type":"TextEditingValue?","desc":"{@template flutter.widgets.RawAutocomplete.initialValue} The initial value to use for the text field. {@endtemplate}"}],"id":479,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_zh-CN.json deleted file mode 100644 index db96fcefd..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawAutocomplete/RawAutocomplete_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawAutocomplete","path":"/src/widgets/autocomplete.dart","parents":["StatefulWidget","Widget"],"desc":"{@template flutter.widgets.RawAutocomplete.RawAutocomplete} 通过输入一些文本并从选项列表中选择来帮助用户进行选择的小部件。","fields":[{"name":"fieldViewBuilder","type":"AutocompleteFieldViewBuilder?","desc":"{@template flutter.widgets.RawAutocomplete.fieldViewBuilder} 构建其输入用于获取选项的字段。"},{"name":"focusNode","type":"FocusNode?","desc":"用于文本字段的 [FocusNode]。"},{"name":"optionsViewBuilder","type":"AutocompleteOptionsViewBuilder","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsViewBuilder} 从选项对象列表构建可选择的选项小部件。"},{"name":"optionsViewOpenDirection","type":"OptionsViewOpenDirection","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsViewOpenDirection} 打开选项视图覆盖的方向。"},{"name":"displayStringForOption","type":"AutocompleteOptionToString","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.displayStringForOption} 返回选择选项时在字段中显示的字符串。"},{"name":"onSelected","type":"AutocompleteOnSelected?","desc":"{@template flutter.widgets.RawAutocomplete.onSelected} 用户选择选项时调用。{@endtemplate}"},{"name":"optionsBuilder","type":"AutocompleteOptionsBuilder","required":true,"desc":"{@template flutter.widgets.RawAutocomplete.optionsBuilder} 给定当前 TextEditingValue 返回当前可选择选项对象的函数。{@endtemplate}"},{"name":"textEditingController","type":"TextEditingController?","desc":"用于文本字段的 [TextEditingController]。"},{"name":"initialValue","type":"TextEditingValue?","desc":"{@template flutter.widgets.RawAutocomplete.initialValue} 用于文本字段的初始值。{@endtemplate}"}],"id":479,"localName":"RawAutocomplete","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_en-US.json b/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_en-US.json deleted file mode 100644 index f775f7f26..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawChip","path":"/src/material/chip.dart","parents":["StatefulWidget","Widget"],"desc":" A raw Material Design chip.","fields":[{"name":"defaultProperties","type":"ChipThemeData?","desc":"Defines the defaults for the chip properties if they are not specified elsewhere."},{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"deleteIcon","type":"Widget","required":true},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"onSelected","type":"ValueChanged?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"selected","type":"bool","required":true},{"name":"isEnabled","type":"bool","required":true},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"WidgetStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"},{"name":"tapEnabled","type":"bool","required":true,"desc":"If set, this indicates that the chip should be disabled if all of the tap callbacks ([onSelected], [onPressed]) are null."}],"id":153,"lever":5,"family":1,"linkIds":[11,12,13,14,15],"nodes":[{"file":"node1_press.dart","name":"RawChip Click Effect","desc":["【label】: Middle component 【Widget】","【padding】 : Padding 【EdgeInsetsGeometry】","【labelPadding】 : Label padding 【EdgeInsetsGeometry】","【shadowColor】: Shadow color 【Color】","【avatar】: Left component 【Widget】","【elevation】: Elevation 【double】","【pressElevation】: Elevation when pressed 【double】","【onPressed】 : Click event 【Function()】"]},{"file":"node2_select.dart","name":"RawChip Selection and Deletion Effect","desc":["【selected】: Whether selected 【bool】","【deleteIconColor】: Trailing icon color 【Color】","【selectedColor】: Selected color 【Color】","【deleteIcon】: Trailing component 【Widget】","【onSelected】: Selection event 【Function(bool)】","【onDeleted】 : Trailing event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_zh-CN.json deleted file mode 100644 index b30f7a6a1..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawChip/RawChip_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawChip","path":"/src/material/chip.dart","parents":["StatefulWidget","Widget"],"desc":"原始 Material Design 芯片。","fields":[{"name":"defaultProperties","type":"ChipThemeData?","desc":"如果芯片属性未在其他地方指定,则定义芯片属性的默认值。"},{"name":"avatar","type":"Widget?"},{"name":"label","type":"Widget","required":true},{"name":"labelStyle","type":"TextStyle?"},{"name":"labelPadding","type":"EdgeInsetsGeometry?"},{"name":"deleteIcon","type":"Widget","required":true},{"name":"onDeleted","type":"VoidCallback?"},{"name":"deleteIconColor","type":"Color?"},{"name":"deleteButtonTooltipMessage","type":"String?"},{"name":"onSelected","type":"ValueChanged?"},{"name":"onPressed","type":"VoidCallback?"},{"name":"pressElevation","type":"double?"},{"name":"selected","type":"bool","required":true},{"name":"isEnabled","type":"bool","required":true},{"name":"disabledColor","type":"Color?"},{"name":"selectedColor","type":"Color?"},{"name":"tooltip","type":"String?"},{"name":"side","type":"BorderSide?"},{"name":"shape","type":"OutlinedBorder?"},{"name":"clipBehavior","type":"Clip","required":true},{"name":"focusNode","type":"FocusNode?"},{"name":"autofocus","type":"bool","required":true},{"name":"color","type":"WidgetStateProperty?"},{"name":"backgroundColor","type":"Color?"},{"name":"padding","type":"EdgeInsetsGeometry?"},{"name":"visualDensity","type":"VisualDensity?"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?"},{"name":"elevation","type":"double?"},{"name":"shadowColor","type":"Color?"},{"name":"surfaceTintColor","type":"Color?"},{"name":"iconTheme","type":"IconThemeData?"},{"name":"selectedShadowColor","type":"Color?"},{"name":"showCheckmark","type":"bool?"},{"name":"checkmarkColor","type":"Color?"},{"name":"avatarBorder","type":"ShapeBorder","required":true},{"name":"avatarBoxConstraints","type":"BoxConstraints?"},{"name":"deleteIconBoxConstraints","type":"BoxConstraints?"},{"name":"chipAnimationStyle","type":"ChipAnimationStyle?"},{"name":"mouseCursor","type":"MouseCursor?"},{"name":"tapEnabled","type":"bool","required":true,"desc":"如果设置,这表示如果所有点击回调([onSelected]、[onPressed])都为 null,则应禁用芯片。"}],"id":153,"localName":"原生小条","lever":5,"family":1,"linkIds":[11,12,13,14,15],"nodes":[{"file":"node1_press.dart","name":"RawChip点击效果","desc":["【label】: 中间组件 【Widget】","【padding】 : 内边距 【EdgeInsetsGeometry】","【labelPadding】 : label边距 【EdgeInsetsGeometry】","【shadowColor】: 阴影色 【Color】","【avatar】: 左侧组件 【Widget】","【elevation】: 影深 【double】","【pressElevation】: 点击时影深 【double】","【onPressed】 : 点击事件 【Function()】"]},{"file":"node2_select.dart","name":"RawChip选中和删除效果","desc":["【selected】: 是否选中 【bool】","【deleteIconColor】: 尾部图标色 【Color】","【selectedColor】: 选中色 【Color】","【deleteIcon】: 尾部组件 【Widget】","【onSelected】: 选中事件 【Function(bool)】","【onDeleted】 : 尾部事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_en-US.json b/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_en-US.json deleted file mode 100644 index 536e711d8..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawGestureDetector","path":"/src/widgets/gesture_detector.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that detects gestures described by the given gesture factories.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"gestures","type":"Map","required":true,"desc":"The gestures that this widget will attempt to recognize."},{"name":"behavior","type":"HitTestBehavior?","desc":"How this gesture detector should behave during hit testing."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"Whether to exclude these gestures from the semantics tree. For example, the long-press gesture for showing a tooltip is excluded because the tooltip itself is included in the semantics tree directly and so having a gesture to show it would result in duplication of information."},{"name":"semantics","type":"SemanticsGestureDelegate?","desc":"Describes the semantics notations that should be added to the underlying render object [RenderSemanticsGestureHandler]."}],"id":248,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RawGestureDetector","desc":["【behavior】: Detection behavior 【HitTestBehavior】","【gestures】: Gesture mapping 【Map】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_zh-CN.json deleted file mode 100644 index f3c80b7fb..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawGestureDetector/RawGestureDetector_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawGestureDetector","path":"/src/widgets/gesture_detector.dart","parents":["StatefulWidget","Widget"],"desc":"检测由给定手势工厂描述的手势的小部件。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"gestures","type":"Map","required":true,"desc":"此小部件将尝试识别的手势。"},{"name":"behavior","type":"HitTestBehavior?","desc":"此手势检测器在命中测试期间应如何表现。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"是否从语义树中排除这些手势。例如,显示工具提示的长按手势被排除,因为工具提示本身直接包含在语义树中,因此具有显示它的手势会导致信息重复。"},{"name":"semantics","type":"SemanticsGestureDelegate?","desc":"描述应添加到底层渲染对象 [RenderSemanticsGestureHandler] 的语义符号。"}],"id":248,"localName":"原手势检测器","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RawGestureDetector基本使用","desc":["【behavior】 : 侦测行为 【HitTestBehavior】","【gestures】 : 手势映射 【Map】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_en-US.json b/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_en-US.json deleted file mode 100644 index 5a747b072..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawImage","path":"/src/widgets/basic.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that displays a [dart:ui.Image] directly.","fields":[{"name":"image","type":"ui.Image?","desc":"The image to display."},{"name":"debugImageLabel","type":"String?","desc":"A string identifying the source of the image."},{"name":"width","type":"double?","desc":"If non-null, require the image to have this width."},{"name":"height","type":"double?","desc":"If non-null, require the image to have this height."},{"name":"scale","type":"double","required":true,"desc":"The linear scale factor for drawing this image at its intended size."},{"name":"color","type":"Color?","desc":"If non-null, this color is blended with each image pixel using [colorBlendMode]."},{"name":"opacity","type":"Animation?","desc":"If non-null, the value from the [Animation] is multiplied with the opacity of each image pixel before painting onto the canvas."},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"Used to set the filterQuality of the image."},{"name":"colorBlendMode","type":"BlendMode?","desc":"Used to combine [color] with this image."},{"name":"fit","type":"BoxFit?","desc":"How to inscribe the image into the space allocated during layout."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the image within its bounds."},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"How to paint any portions of the layout bounds not covered by the image."},{"name":"centerSlice","type":"Rect?","desc":"The center slice for a nine-patch image."},{"name":"matchTextDirection","type":"bool","required":true,"desc":"Whether to paint the image in the direction of the [TextDirection]."},{"name":"invertColors","type":"bool","required":true,"desc":"Whether the colors of the image are inverted when drawn."},{"name":"isAntiAlias","type":"bool","required":true,"desc":"Whether to paint the image with anti-aliasing."}],"id":313,"lever":2,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RawImage","desc":["【image】: Image 【ui.Image】","【width】: Width 【int】","【height】: Height 【int】","【isAntiAlias】: Whether to anti-alias 【bool】","【filterQuality】: Filter quality 【FilterQuality】","Many properties are the same as Image, see details there."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_zh-CN.json deleted file mode 100644 index c491e9232..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawImage/RawImage_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawImage","path":"/src/widgets/basic.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"直接显示 [dart:ui.Image] 的小部件。","fields":[{"name":"image","type":"ui.Image?","desc":"要显示的图像。"},{"name":"debugImageLabel","type":"String?","desc":"标识图像来源的字符串。"},{"name":"width","type":"double?","desc":"如果非空,要求图像具有此宽度。"},{"name":"height","type":"double?","desc":"如果非空,要求图像具有此高度。"},{"name":"scale","type":"double","required":true,"desc":"以其预期大小绘制此图像的线性比例因子。"},{"name":"color","type":"Color?","desc":"如果非空,此颜色使用 [colorBlendMode] 与每个图像像素混合。"},{"name":"opacity","type":"Animation?","desc":"如果非空,在绘制到画布之前,[Animation] 的值与每个图像像素的不透明度相乘。"},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"用于设置图像的 filterQuality。"},{"name":"colorBlendMode","type":"BlendMode?","desc":"用于将 [color] 与此图像组合。"},{"name":"fit","type":"BoxFit?","desc":"如何将图像刻入布局期间分配的空间。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在其边界内对齐图像。"},{"name":"repeat","type":"ImageRepeat","required":true,"desc":"如何绘制图像未覆盖的布局边界的任何部分。"},{"name":"centerSlice","type":"Rect?","desc":"九宫格图像的中心切片。"},{"name":"matchTextDirection","type":"bool","required":true,"desc":"是否在 [TextDirection] 的方向上绘制图像。"},{"name":"invertColors","type":"bool","required":true,"desc":"绘制时是否反转图像的颜色。"},{"name":"isAntiAlias","type":"bool","required":true,"desc":"是否使用抗锯齿绘制图像。"}],"id":313,"localName":"原图片","lever":2,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RawImage基本使用","desc":["【image】 : 图片 【ui.Image】","【width】 : 宽 【int】","【height】: 高 【int】","【isAntiAlias】: 是否抗锯齿 【bool】","【filterQuality】: 过滤质量 【FilterQuality】","很多属性同Image,详见之."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_en-US.json b/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_en-US.json deleted file mode 100644 index 7fce1d266..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawKeyboardListener","path":"/src/widgets/raw_keyboard_listener.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that calls a callback whenever the user presses or releases a key on a keyboard.","fields":[{"name":"focusNode","type":"FocusNode","required":true,"desc":"Controls whether this widget has keyboard focus."},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"},{"name":"onKey","type":"ValueChanged?","desc":"Called whenever this widget receives a raw keyboard event."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":254,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RawGestureDetector","desc":["【onKey】 : Keyboard event 【ValueChanged】","【focusNode】 : Focus 【FocusNode】","【autofocus】 : Whether to auto focus 【bool】","【child】 : Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_zh-CN.json deleted file mode 100644 index 1844c76d9..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawKeyboardListener/RawKeyboardListener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawKeyboardListener","path":"/src/widgets/raw_keyboard_listener.dart","parents":["StatefulWidget","Widget"],"desc":"每当用户在键盘上按下或释放键时调用回调的小部件。","fields":[{"name":"focusNode","type":"FocusNode","required":true,"desc":"控制此小部件是否具有键盘焦点。"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"},{"name":"onKey","type":"ValueChanged?","desc":"每当此小部件接收到原始键盘事件时调用。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":254,"localName":"原键盘监听器","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RawGestureDetector基本使用","desc":["【onKey】 : 键盘事件 【ValueChanged】","【focusNode】 : 焦点 【FocusNode】","【autofocus】 : 是否自动聚焦 【bool】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_en-US.json b/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_en-US.json deleted file mode 100644 index f2b20c172..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawMagnifier","path":"/src/widgets/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":" A common base class for magnifiers.","fields":[{"name":"child","type":"Widget?","desc":"An optional widget to position inside the len of the [RawMagnifier]."},{"name":"decoration","type":"MagnifierDecoration","required":true,"desc":"This magnifier's decoration."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"Whether and how to clip the parts of [decoration] that render inside the loupe."},{"name":"focalPointOffset","type":"Offset","required":true,"desc":"The offset of the magnifier from [RawMagnifier]'s center."},{"name":"magnificationScale","type":"double","required":true,"desc":"How \"zoomed in\" the magnification subject is in the lens."},{"name":"size","type":"Size","required":true,"desc":"The size of the magnifier."}],"id":360,"lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Simple use of RawMagnifier","desc":["【size】: Size 【Size】","【magnificationScale】: Magnification 【double】","【focalPointOffset】: Magnification content offset 【Offset】","【decoration】: Decoration 【MagnifierDecoration】","【child】: Child component 【Widget?】"]},{"file":"node2_shape.dart","name":"Custom decoration shape for RawMagnifier","desc":["Customize the five-pointed star decoration shape here"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_zh-CN.json deleted file mode 100644 index 888c33b56..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawMagnifier/RawMagnifier_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawMagnifier","path":"/src/widgets/magnifier.dart","parents":["StatelessWidget","Widget"],"desc":"放大镜的通用基类。","fields":[{"name":"child","type":"Widget?","desc":"在 [RawMagnifier] 镜头内定位的可选小部件。"},{"name":"decoration","type":"MagnifierDecoration","required":true,"desc":"此放大镜的装饰。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"是否以及如何裁剪在放大镜内渲染的 [decoration] 部分。"},{"name":"focalPointOffset","type":"Offset","required":true,"desc":"放大镜从 [RawMagnifier] 中心的偏移。"},{"name":"magnificationScale","type":"double","required":true,"desc":"放大主体在镜头中的"},{"name":"size","type":"Size","required":true,"desc":"放大镜的大小。"}],"id":360,"localName":"原放大镜","lever":4,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RawMagnifier 的简单使用","desc":["【size】 : 尺寸 【Size】","【magnificationScale】 : 放大倍率 【double】","【focalPointOffset】: 放大内容偏移量 【Offset】","【decoration】: 发现装饰 【MagnifierDecoration】","【child】: 子组件 【Widget?】,"]},{"file":"node2_shape.dart","name":"RawMagnifier 自定义装饰形状","desc":["这里自定义五角星装饰形状"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_en-US.json b/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_en-US.json deleted file mode 100644 index 9363dfcd9..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawMaterialButton","path":"/src/material/button.dart","parents":["StatefulWidget","Widget"],"desc":" Creates a button based on [Semantics], [Material], and [InkWell] widgets.","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"Called when the button is tapped or otherwise activated."},{"name":"onLongPress","type":"VoidCallback?","desc":"Called when the button is long-pressed."},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"Called by the underlying [InkWell] widget's [InkWell.onHighlightChanged] callback."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.RawMaterialButton.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the button."},{"name":"textStyle","type":"TextStyle?","desc":"Defines the default text style, with [Material.textStyle], for the button's [child]."},{"name":"fillColor","type":"Color?","desc":"The color of the button's [Material]."},{"name":"focusColor","type":"Color?","desc":"The color for the button's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"The color for the button's [Material] when a pointer is hovering over it."},{"name":"highlightColor","type":"Color?","desc":"The highlight color for the button's [InkWell]."},{"name":"splashColor","type":"Color?","desc":"The splash color for the button's [InkWell]."},{"name":"elevation","type":"double","required":true,"desc":"The elevation for the button's [Material] when the button is [enabled] but not pressed."},{"name":"hoverElevation","type":"double","required":true,"desc":"The elevation for the button's [Material] when the button is [enabled] and a pointer is hovering over it."},{"name":"focusElevation","type":"double","required":true,"desc":"The elevation for the button's [Material] when the button is [enabled] and has the input focus."},{"name":"highlightElevation","type":"double","required":true,"desc":"The elevation for the button's [Material] when the button is [enabled] and pressed."},{"name":"disabledElevation","type":"double","required":true,"desc":"The elevation for the button's [Material] when the button is not [enabled]."},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The internal padding for the button's [child]."},{"name":"visualDensity","type":"VisualDensity","required":true,"desc":"Defines how compact the button's layout will be."},{"name":"constraints","type":"BoxConstraints","required":true,"desc":"Defines the button's size."},{"name":"shape","type":"ShapeBorder","required":true,"desc":"The shape of the button's [Material]."},{"name":"animationDuration","type":"Duration","required":true,"desc":"Defines the duration of animated changes for [shape] and [elevation]."},{"name":"child","type":"Widget?","desc":"Typically the button's label."},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize","required":true,"desc":"Configures the minimum size of the tap target."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"enableFeedback","type":"bool","required":true,"desc":"Whether detected gestures should provide acoustic and/or haptic feedback."}],"id":175,"lever":5,"family":1,"linkIds":[23,25,26,27],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RawMaterialButton","desc":["【child】: Child component 【Widget】","【elevation】: Shadow depth 【double】","【fillColor】: Fill color 【Color】","【splashColor】: Ripple color 【Color】","【textStyle】: Text style 【TextStyle】","【onLongPress】: Long press event 【Function()】","【onPressed】: Click event 【Function()】"]},{"file":"node2_shape.dart","name":"Highlight and Shape of RawMaterialButton","desc":["【highlightElevation】: Highlight shadow depth 【double】","【shape】: Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_zh-CN.json deleted file mode 100644 index d267ca02d..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawMaterialButton/RawMaterialButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawMaterialButton","path":"/src/material/button.dart","parents":["StatefulWidget","Widget"],"desc":"基于 [Semantics]、[Material] 和 [InkWell] 小部件创建按钮。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"点击或以其他方式激活按钮时调用。"},{"name":"onLongPress","type":"VoidCallback?","desc":"长按按钮时调用。"},{"name":"onHighlightChanged","type":"ValueChanged?","desc":"由底层 [InkWell] 小部件的 [InkWell.onHighlightChanged] 回调调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.RawMaterialButton.mouseCursor} 鼠标指针进入或悬停在按钮上时的光标。"},{"name":"textStyle","type":"TextStyle?","desc":"使用 [Material.textStyle] 为按钮的 [child] 定义默认文本样式。"},{"name":"fillColor","type":"Color?","desc":"按钮的 [Material] 的颜色。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时其 [Material] 的颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在按钮上时其 [Material] 的颜色。"},{"name":"highlightColor","type":"Color?","desc":"按钮的 [InkWell] 的高亮颜色。"},{"name":"splashColor","type":"Color?","desc":"按钮的 [InkWell] 的飞溅颜色。"},{"name":"elevation","type":"double","required":true,"desc":"按钮 [enabled] 但未按下时按钮的 [Material] 的高度。"},{"name":"hoverElevation","type":"double","required":true,"desc":"按钮 [enabled] 且指针悬停在其上时按钮的 [Material] 的高度。"},{"name":"focusElevation","type":"double","required":true,"desc":"按钮 [enabled] 且具有输入焦点时按钮的 [Material] 的高度。"},{"name":"highlightElevation","type":"double","required":true,"desc":"按钮 [enabled] 且被按下时按钮的 [Material] 的高度。"},{"name":"disabledElevation","type":"double","required":true,"desc":"按钮未 [enabled] 时按钮的 [Material] 的高度。"},{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"按钮的 [child] 的内部内边距。"},{"name":"visualDensity","type":"VisualDensity","required":true,"desc":"定义按钮布局的紧凑程度。"},{"name":"constraints","type":"BoxConstraints","required":true,"desc":"定义按钮的大小。"},{"name":"shape","type":"ShapeBorder","required":true,"desc":"按钮的 [Material] 的形状。"},{"name":"animationDuration","type":"Duration","required":true,"desc":"定义 [shape] 和 [elevation] 动画更改的持续时间。"},{"name":"child","type":"Widget?","desc":"通常是按钮的标签。"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize","required":true,"desc":"配置点击目标的最小大小。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"enableFeedback","type":"bool","required":true,"desc":"检测到的手势是否应提供声音和/或触觉反馈。"}],"id":175,"localName":"原始按钮","lever":5,"family":1,"linkIds":[23,25,26,27],"nodes":[{"file":"node1_base.dart","name":"RawMaterialButton基本使用","desc":["【child】 : 子组件 【Widget】","【elevation】 : 影深 【double】","【fillColor】 : 填充色 【Color】","【splashColor】 : 水波纹色 【Color】","【textStyle】 : 文字样式 【TextStyle】","【onLongPress】 : 长按事件 【Function()】","【onPressed】 : 点击事件 【Function()】"]},{"file":"node2_shape.dart","name":"RawMaterialButton高亮和形状","desc":["【highlightElevation】 : 高亮影深 【double】","【shape】 : 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_en-US.json b/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_en-US.json deleted file mode 100644 index 55b66cfbe..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawMenuAnchor","path":"/src/widgets/raw_menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that wraps a child and anchors a floating menu.","fields":[{"name":"onOpen","type":"VoidCallback?","desc":"A callback that is invoked when the menu is opened."},{"name":"onClose","type":"VoidCallback?","desc":"A callback that is invoked when the menu is closed."},{"name":"builder","type":"RawMenuAnchorChildBuilder?","desc":"A builder that builds the widget that this [RawMenuAnchor] surrounds."},{"name":"child","type":"Widget?","desc":"The optional child to be passed to the [builder]."},{"name":"overlayBuilder","type":"RawMenuAnchorOverlayBuilder","required":true,"desc":"The [overlayBuilder] function is passed a [RawMenuOverlayInfo] object that defines the anchor's [Rect], the [Size] of the overlay, the [TapRegion.groupId] for the menu system, and the position [Offset] passed to [MenuController.open]."},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@template flutter.widgets.RawMenuAnchor.useRootOverlay} Whether the menu panel should be rendered in the root [Overlay]."},{"name":"childFocusNode","type":"FocusNode?","desc":"The [FocusNode] attached to the widget that takes focus when the menu is opened or closed."},{"name":"consumeOutsideTaps","type":"bool","required":true,"desc":"Whether or not a tap event that closes the menu will be permitted to continue on to the gesture arena."},{"name":"controller","type":"MenuController","required":true,"desc":"A [MenuController] that allows opening and closing of the menu from other widgets."}],"id":480,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_zh-CN.json deleted file mode 100644 index 4e005c46e..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawMenuAnchor/RawMenuAnchor_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawMenuAnchor","path":"/src/widgets/raw_menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"包装子项并锚定浮动菜单的小部件。","fields":[{"name":"onOpen","type":"VoidCallback?","desc":"菜单打开时调用的回调。"},{"name":"onClose","type":"VoidCallback?","desc":"菜单关闭时调用的回调。"},{"name":"builder","type":"RawMenuAnchorChildBuilder?","desc":"构建此 [RawMenuAnchor] 围绕的小部件的构建器。"},{"name":"child","type":"Widget?","desc":"要传递给 [builder] 的可选子项。"},{"name":"overlayBuilder","type":"RawMenuAnchorOverlayBuilder","required":true,"desc":"[overlayBuilder] 函数传递一个 [RawMenuOverlayInfo] 对象,该对象定义锚点的 [Rect]、覆盖的 [Size]、菜单系统的 [TapRegion.groupId] 以及传递给 [MenuController.open] 的位置 [Offset]。"},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@template flutter.widgets.RawMenuAnchor.useRootOverlay} 菜单面板是否应在根 [Overlay] 中渲染。"},{"name":"childFocusNode","type":"FocusNode?","desc":"附加到在菜单打开或关闭时获得焦点的小部件的 [FocusNode]。"},{"name":"consumeOutsideTaps","type":"bool","required":true,"desc":"关闭菜单的点击事件是否被允许继续到手势竞技场。"},{"name":"controller","type":"MenuController","required":true,"desc":"允许从其他小部件打开和关闭菜单的 [MenuController]。"}],"id":480,"localName":"RawMenuAnchor","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_en-US.json deleted file mode 100644 index 77d60fe30..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawMenuAnchorGroup","path":"/src/widgets/raw_menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" Creates a menu anchor that is always visible and is not displayed in an [OverlayPortal].","fields":[{"name":"child","type":"Widget","required":true,"desc":"The child displayed by the [RawMenuAnchorGroup]."},{"name":"controller","type":"MenuController","required":true,"desc":"An [MenuController] that allows the closing of the menu from other widgets."}],"id":481,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_zh-CN.json deleted file mode 100644 index 9db05e2d7..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawMenuAnchorGroup/RawMenuAnchorGroup_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawMenuAnchorGroup","path":"/src/widgets/raw_menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"创建始终可见且不在 [OverlayPortal] 中显示的菜单锚点。","fields":[{"name":"child","type":"Widget","required":true,"desc":"[RawMenuAnchorGroup] 显示的子项。"},{"name":"controller","type":"MenuController","required":true,"desc":"允许从其他小部件关闭菜单的 [MenuController]。"}],"id":481,"localName":"RawMenuAnchorGroup","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_en-US.json b/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_en-US.json deleted file mode 100644 index 2086a24c3..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawScrollbar","path":"/src/widgets/scrollbar.dart","parents":["StatefulWidget","Widget"],"desc":" An extendable base class for building scrollbars that fade in and out.","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@template flutter.widgets.Scrollbar.child} The widget below this widget in the tree."},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.Scrollbar.controller} The [ScrollController] used to implement Scrollbar dragging."},{"name":"thumbVisibility","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.thumbVisibility} Indicates that the scrollbar thumb should be visible, even when a scroll is not underway."},{"name":"shape","type":"OutlinedBorder?","desc":"The [OutlinedBorder] of the scrollbar's thumb."},{"name":"radius","type":"Radius?","desc":"The [Radius] of the scrollbar thumb's rounded rectangle corners."},{"name":"thickness","type":"double?","desc":"The thickness of the scrollbar in the cross axis of the scrollable."},{"name":"thumbColor","type":"Color?","desc":"The color of the scrollbar thumb."},{"name":"minThumbLength","type":"double","required":true,"desc":"The preferred smallest size the scrollbar thumb can shrink to when the total scrollable extent is large, the current visible viewport is small, and the viewport is not overscrolled."},{"name":"minOverscrollLength","type":"double?","desc":"The preferred smallest size the scrollbar thumb can shrink to when viewport is overscrolled."},{"name":"trackVisibility","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.trackVisibility} Indicates that the scrollbar track should be visible."},{"name":"trackRadius","type":"Radius?","desc":"The [Radius] of the scrollbar track's rounded rectangle corners."},{"name":"trackColor","type":"Color?","desc":"The color of the scrollbar track."},{"name":"trackBorderColor","type":"Color?","desc":"The color of the scrollbar track's border."},{"name":"fadeDuration","type":"Duration","required":true,"desc":"The [Duration] of the fade animation."},{"name":"timeToFade","type":"Duration","required":true,"desc":"The [Duration] of time until the fade animation begins."},{"name":"pressDuration","type":"Duration","required":true,"desc":"The [Duration] of time that a LongPress will trigger the drag gesture of the scrollbar thumb."},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@template flutter.widgets.Scrollbar.notificationPredicate} A check that specifies whether a [ScrollNotification] should be handled by this widget."},{"name":"interactive","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.interactive} Whether the Scrollbar should be interactive and respond to dragging on the thumb, or tapping in the track area."},{"name":"scrollbarOrientation","type":"ScrollbarOrientation?","desc":"{@macro flutter.widgets.Scrollbar.scrollbarOrientation}"},{"name":"mainAxisMargin","type":"double","required":true,"desc":"Distance from the scrollbar thumb's start or end to the nearest edge of the viewport in logical pixels. It affects the amount of available paint area."},{"name":"crossAxisMargin","type":"double","required":true,"desc":"Distance from the scrollbar thumb's side to the nearest cross axis edge in logical pixels."},{"name":"padding","type":"EdgeInsets?","desc":"The insets by which the scrollbar thumb and track should be padded."}],"id":482,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_zh-CN.json deleted file mode 100644 index dc590b07f..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawScrollbar/RawScrollbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawScrollbar","path":"/src/widgets/scrollbar.dart","parents":["StatefulWidget","Widget"],"desc":"用于构建淡入淡出滚动条的可扩展基类。","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@template flutter.widgets.Scrollbar.child} 树中此小部件下方的小部件。"},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.Scrollbar.controller} 用于实现滚动条拖动的 [ScrollController]。"},{"name":"thumbVisibility","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.thumbVisibility} 指示滚动条拇指应该可见,即使没有进行滚动。"},{"name":"shape","type":"OutlinedBorder?","desc":"滚动条拇指的 [OutlinedBorder]。"},{"name":"radius","type":"Radius?","desc":"滚动条拇指圆角矩形角的 [Radius]。"},{"name":"thickness","type":"double?","desc":"滚动条在可滚动交叉轴上的厚度。"},{"name":"thumbColor","type":"Color?","desc":"滚动条拇指的颜色。"},{"name":"minThumbLength","type":"double","required":true,"desc":"当总可滚动范围很大、当前可见视口很小且视口未过度滚动时,滚动条拇指可以缩小到的首选最小大小。"},{"name":"minOverscrollLength","type":"double?","desc":"当视口过度滚动时,滚动条拇指可以缩小到的首选最小大小。"},{"name":"trackVisibility","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.trackVisibility} 指示滚动条轨道应该可见。"},{"name":"trackRadius","type":"Radius?","desc":"滚动条轨道圆角矩形角的 [Radius]。"},{"name":"trackColor","type":"Color?","desc":"滚动条轨道的颜色。"},{"name":"trackBorderColor","type":"Color?","desc":"滚动条轨道边框的颜色。"},{"name":"fadeDuration","type":"Duration","required":true,"desc":"淡入淡出动画的 [Duration]。"},{"name":"timeToFade","type":"Duration","required":true,"desc":"淡入淡出动画开始前的时间 [Duration]。"},{"name":"pressDuration","type":"Duration","required":true,"desc":"长按将触发滚动条拇指拖动手势的时间 [Duration]。"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@template flutter.widgets.Scrollbar.notificationPredicate} 指定 [ScrollNotification] 是否应由此小部件处理的检查。"},{"name":"interactive","type":"bool?","desc":"{@template flutter.widgets.Scrollbar.interactive} 滚动条是否应该是交互式的并响应拇指拖动或轨道区域点击。"},{"name":"scrollbarOrientation","type":"ScrollbarOrientation?","desc":"{@macro flutter.widgets.Scrollbar.scrollbarOrientation}"},{"name":"mainAxisMargin","type":"double","required":true,"desc":"滚动条拇指的开始或结束到视口最近边缘的距离(以逻辑像素为单位)。它影响可用绘制区域的数量。"},{"name":"crossAxisMargin","type":"double","required":true,"desc":"滚动条拇指侧面到最近交叉轴边缘的距离(以逻辑像素为单位)。"},{"name":"padding","type":"EdgeInsets?","desc":"滚动条拇指和轨道应填充的插入。"}],"id":482,"localName":"RawScrollbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawView/RawView_en-US.json b/modules/widget_system/widgets/doc/widgets/RawView/RawView_en-US.json deleted file mode 100644 index 8cfda5433..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawView/RawView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawView","path":"/src/widgets/view.dart","parents":["StatelessWidget","Widget"],"desc":" The lower level workhorse widget for [View] that bootstraps a render tree for a view.","fields":[{"name":"view","type":"FlutterView","required":true,"desc":"The [FlutterView] into which [child] is drawn."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree, which will be drawn into the [view]."}],"id":483,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawView/RawView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawView/RawView_zh-CN.json deleted file mode 100644 index b2630ef6b..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawView/RawView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawView","path":"/src/widgets/view.dart","parents":["StatelessWidget","Widget"],"desc":"为视图引导渲染树的 [View] 的较低级别工作小部件。","fields":[{"name":"view","type":"FlutterView","required":true,"desc":"绘制 [child] 的 [FlutterView]。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件,将绘制到 [view] 中。"}],"id":483,"localName":"RawView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_en-US.json b/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_en-US.json deleted file mode 100644 index 1d7c1ba2b..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawWebImage","path":"/src/widgets/_web_image_web.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget which displays and lays out an underlying HTML element in a platform view.","fields":[{"name":"image","type":"WebImageInfo","required":true,"desc":"The underlying HTML element to be displayed."},{"name":"debugImageLabel","type":"String?","desc":"A debug label explaining the image."},{"name":"width","type":"double?","desc":"The requested width for this widget."},{"name":"height","type":"double?","desc":"The requested height for this widget."},{"name":"fit","type":"BoxFit?","desc":"How the HTML element should be inscribed in the box constraining it."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How the image should be aligned in the box constraining it."},{"name":"matchTextDirection","type":"bool","required":true,"desc":"Whether or not the alignment of the image should match the text direction."}],"id":484,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_zh-CN.json deleted file mode 100644 index 9b256dd07..000000000 --- a/modules/widget_system/widgets/doc/widgets/RawWebImage/RawWebImage_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RawWebImage","path":"/src/widgets/_web_image_web.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在平台视图中显示和布局底层 HTML 元素的小部件。","fields":[{"name":"image","type":"WebImageInfo","required":true,"desc":"要显示的底层 HTML 元素。"},{"name":"debugImageLabel","type":"String?","desc":"解释图像的调试标签。"},{"name":"width","type":"double?","desc":"此小部件的请求宽度。"},{"name":"height","type":"double?","desc":"此小部件的请求高度。"},{"name":"fit","type":"BoxFit?","desc":"HTML 元素应如何刻入约束它的框中。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"图像应如何在约束它的框中对齐。"},{"name":"matchTextDirection","type":"bool","required":true,"desc":"图像的对齐是否应与文本方向匹配。"}],"id":484,"localName":"RawWebImage","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_en-US.json deleted file mode 100644 index 2f13cb152..000000000 --- a/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RefreshIndicator","path":"/src/material/refresh_indicator.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that supports the Material \"swipe to refresh\" idiom.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"displacement","type":"double","required":true,"desc":"The distance from the child's top or bottom [edgeOffset] where the refresh indicator will settle. During the drag that exposes the refresh indicator, its actual displacement may significantly exceed this value."},{"name":"edgeOffset","type":"double","required":true,"desc":"The offset where [RefreshProgressIndicator] starts to appear on drag start."},{"name":"onRefresh","type":"RefreshCallback","required":true,"desc":"A function that's called when the user has dragged the refresh indicator far enough to demonstrate that they want the app to refresh. The returned [Future] must complete when the refresh operation is finished."},{"name":"onStatusChange","type":"ValueChanged?","desc":"Called to get the current status of the [RefreshIndicator] to update the UI as needed. This is an optional parameter, used to fine tune app cases."},{"name":"color","type":"Color?","desc":"The progress indicator's foreground color. The current theme's [ColorScheme.primary] by default."},{"name":"backgroundColor","type":"Color?","desc":"The progress indicator's background color. The current theme's [ThemeData.canvasColor] by default."},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"A check that specifies whether a [ScrollNotification] should be handled by this widget."},{"name":"semanticsLabel","type":"String?","desc":"{@macro flutter.progress_indicator.ProgressIndicator.semanticsLabel}"},{"name":"semanticsValue","type":"String?","desc":"{@macro flutter.progress_indicator.ProgressIndicator.semanticsValue}"},{"name":"strokeWidth","type":"double","required":true,"desc":"Defines [strokeWidth] for `RefreshIndicator`."},{"name":"triggerMode","type":"RefreshIndicatorTriggerMode","required":true,"desc":"Defines how this [RefreshIndicator] can be triggered when users overscroll."},{"name":"elevation","type":"double","required":true,"desc":"Defines the elevation of the underlying [RefreshIndicator]."}],"id":49,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RefreshIndicator","desc":["【child】 : Child (scrollable) 【Widget】","【displacement】 : Indicator floating height 【double】","【color】 : Indicator color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_zh-CN.json deleted file mode 100644 index 4bc3bbf60..000000000 --- a/modules/widget_system/widgets/doc/widgets/RefreshIndicator/RefreshIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RefreshIndicator","path":"/src/material/refresh_indicator.dart","parents":["StatefulWidget","Widget"],"desc":"支持 Material 滑动刷新习语的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"displacement","type":"double","required":true,"desc":"从子项的顶部或底部 [edgeOffset] 到刷新指示器将停留的距离。在暴露刷新指示器的拖动过程中,其实际位移可能会显著超过此值。"},{"name":"edgeOffset","type":"double","required":true,"desc":"[RefreshProgressIndicator] 在拖动开始时开始出现的偏移。"},{"name":"onRefresh","type":"RefreshCallback","required":true,"desc":"当用户拖动刷新指示器足够远以表明他们希望应用程序刷新时调用的函数。返回的 [Future] 必须在刷新操作完成时完成。"},{"name":"onStatusChange","type":"ValueChanged?","desc":"调用以获取 [RefreshIndicator] 的当前状态以根据需要更新 UI。这是一个可选参数,用于微调应用程序案例。"},{"name":"color","type":"Color?","desc":"进度指示器的前景色。默认为当前主题的 [ColorScheme.primary]。"},{"name":"backgroundColor","type":"Color?","desc":"进度指示器的背景色。默认为当前主题的 [ThemeData.canvasColor]。"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"指定 [ScrollNotification] 是否应由此小部件处理的检查。"},{"name":"semanticsLabel","type":"String?","desc":"{@macro flutter.progress_indicator.ProgressIndicator.semanticsLabel}"},{"name":"semanticsValue","type":"String?","desc":"{@macro flutter.progress_indicator.ProgressIndicator.semanticsValue}"},{"name":"strokeWidth","type":"double","required":true,"desc":"为 `RefreshIndicator` 定义 [strokeWidth]。"},{"name":"triggerMode","type":"RefreshIndicatorTriggerMode","required":true,"desc":"定义当用户过度滚动时如何触发此 [RefreshIndicator]。"},{"name":"elevation","type":"double","required":true,"desc":"定义底层 [RefreshIndicator] 的高度。"}],"id":49,"localName":"刷新指示器","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RefreshIndicator基本使用","desc":["【child】 : 孩子(可滑动) 【Widget】","【displacement】 : 指示器悬浮高度 【double】","【color】 : 指示器颜色 【Color】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_en-US.json deleted file mode 100644 index 85aae322e..000000000 --- a/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RefreshProgressIndicator","path":"/src/material/progress_indicator.dart","parents":["CircularProgressIndicator","ProgressIndicator","StatefulWidget","Widget"],"desc":" An indicator for the progress of refreshing the contents of a widget.","fields":[{"name":"elevation","type":"double","required":true,"desc":"{@macro flutter.material.material.elevation}"},{"name":"indicatorMargin","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the whole indicator. It accommodates the [elevation] of the indicator."},{"name":"indicatorPadding","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the inner refresh indicator."}],"id":485,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_zh-CN.json deleted file mode 100644 index 8dd285c9f..000000000 --- a/modules/widget_system/widgets/doc/widgets/RefreshProgressIndicator/RefreshProgressIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RefreshProgressIndicator","path":"/src/material/progress_indicator.dart","parents":["CircularProgressIndicator","ProgressIndicator","StatefulWidget","Widget"],"desc":"刷新小部件内容进度的指示器。","fields":[{"name":"elevation","type":"double","required":true,"desc":"{@macro flutter.material.material.elevation}"},{"name":"indicatorMargin","type":"EdgeInsetsGeometry","required":true,"desc":"插入整个指示器的空间量。它适应指示器的 [elevation]。"},{"name":"indicatorPadding","type":"EdgeInsetsGeometry","required":true,"desc":"插入内部刷新指示器的空间量。"}],"id":485,"localName":"RefreshProgressIndicator","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_en-US.json deleted file mode 100644 index 7312f981d..000000000 --- a/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RelativePositionedTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [Positioned] which transitions the child's position based on the value of [rect] relative to a bounding box with the specified [size].","fields":[{"name":"size","type":"Size","required":true,"desc":"The [Positioned] widget's offsets are relative to a box of this size whose origin is 0,0."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":115,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RelativePositionedTransition","desc":["【child】: Child component 【Widget】","【size】: Left and top offset 【Size】","【rect】: Animation 【Animation】"," PositionedTransition component only works within a Stack"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_zh-CN.json deleted file mode 100644 index 363550b5a..000000000 --- a/modules/widget_system/widgets/doc/widgets/RelativePositionedTransition/RelativePositionedTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RelativePositionedTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"[Positioned] 的动画版本,根据相对于具有指定 [size] 的边界框的 [rect] 值转换子项的位置。","fields":[{"name":"size","type":"Size","required":true,"desc":"[Positioned] 小部件的偏移相对于原点为 0,0 的此大小的框。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":115,"localName":"矩形位置变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RelativePositionedTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【size】 : 左和上的偏移量 【Size】","【rect】 : 动画 【Animation】"," PositionedTransition组件只能在Stack内起作用"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_en-US.json b/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_en-US.json deleted file mode 100644 index 961a73030..000000000 --- a/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RenderObjectToWidgetAdapter","path":"/src/widgets/adapter.dart","parents":["RenderObjectWidget","Widget"],"desc":" A bridge from a [RenderObject] to an [Element] tree.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"container","type":"RenderObjectWithChildMixin","required":true,"desc":"The [RenderObject] that is the parent of the [Element] created by this widget."},{"name":"debugShortDescription","type":"String?","desc":"A short description of this widget used by debugging aids."}],"id":289,"lever":1,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to RenderObjectToWidgetAdapter","desc":["【container】 : Render object 【RenderObjectWithChildMixin】","【child】 : Child component 【Widget】","【debugShortDescription】 : Debugging introduction 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_zh-CN.json deleted file mode 100644 index 09c00729e..000000000 --- a/modules/widget_system/widgets/doc/widgets/RenderObjectToWidgetAdapter/RenderObjectToWidgetAdapter_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RenderObjectToWidgetAdapter","path":"/src/widgets/adapter.dart","parents":["RenderObjectWidget","Widget"],"desc":"从 [RenderObject] 到 [Element] 树的桥梁。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"container","type":"RenderObjectWithChildMixin","required":true,"desc":"作为此小部件创建的 [Element] 的父级的 [RenderObject]。"},{"name":"debugShortDescription","type":"String?","desc":"调试辅助工具使用的此小部件的简短描述。"}],"id":289,"localName":"根组件","lever":1,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RenderObjectToWidgetAdapter 介绍","desc":["【container】 : 渲染对象 【RenderObjectWithChildMixin】","【child】 : 子组件 【Widget】","【debugShortDescription】 : 调试简介 【String】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_en-US.json deleted file mode 100644 index 376cd5013..000000000 --- a/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":" [RenderObjectWidget]s provide the configuration for [RenderObjectElement]s, which wrap [RenderObject]s, which provide the actual rendering of the application.","fields":[],"id":486,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_zh-CN.json deleted file mode 100644 index b5eeaf5ce..000000000 --- a/modules/widget_system/widgets/doc/widgets/RenderObjectWidget/RenderObjectWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":"[RenderObjectWidget] 为 [RenderObjectElement] 提供配置,后者包装 [RenderObject],提供应用程序的实际渲染。","fields":[],"id":486,"localName":"RenderObjectWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_en-US.json b/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_en-US.json deleted file mode 100644 index c1fc3b3b6..000000000 --- a/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ReorderableDelayedDragStartListener","path":"/src/widgets/reorderable_list.dart","parents":["ReorderableDragStartListener","StatelessWidget","Widget"],"desc":" A wrapper widget that will recognize the start of a drag operation by looking for a long press event. Once it is recognized, it will start a drag operation on the wrapped item in the reorderable list.","fields":[],"id":487,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_zh-CN.json deleted file mode 100644 index 6f1b74208..000000000 --- a/modules/widget_system/widgets/doc/widgets/ReorderableDelayedDragStartListener/ReorderableDelayedDragStartListener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ReorderableDelayedDragStartListener","path":"/src/widgets/reorderable_list.dart","parents":["ReorderableDragStartListener","StatelessWidget","Widget"],"desc":"通过寻找长按事件来识别拖动操作开始的包装器小部件。一旦识别,它将在可重新排序列表中的包装项目上开始拖动操作。","fields":[],"id":487,"localName":"ReorderableDelayedDragStartListener","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_en-US.json b/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_en-US.json deleted file mode 100644 index 704516393..000000000 --- a/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ReorderableDragStartListener","path":"/src/widgets/reorderable_list.dart","parents":["StatelessWidget","Widget"],"desc":" A wrapper widget that will recognize the start of a drag on the wrapped widget by a [PointerDownEvent], and immediately initiate dragging the wrapped item to a new location in a reorderable list.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget for which the application would like to respond to a tap and drag gesture by starting a reordering drag on a reorderable list."},{"name":"index","type":"int","required":true,"desc":"The index of the associated item that will be dragged in the list."},{"name":"enabled","type":"bool","required":true,"desc":"Whether the [child] item can be dragged and moved in the list."}],"id":488,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_zh-CN.json deleted file mode 100644 index 48ed7dc42..000000000 --- a/modules/widget_system/widgets/doc/widgets/ReorderableDragStartListener/ReorderableDragStartListener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ReorderableDragStartListener","path":"/src/widgets/reorderable_list.dart","parents":["StatelessWidget","Widget"],"desc":"通过 [PointerDownEvent] 识别包装小部件上拖动开始的包装器小部件,并立即启动将包装项目拖动到可重新排序列表中新位置的操作。","fields":[{"name":"child","type":"Widget","required":true,"desc":"应用程序希望通过在可重新排序列表上开始重新排序拖动来响应点击和拖动手势的小部件。"},{"name":"index","type":"int","required":true,"desc":"将在列表中拖动的关联项目的索引。"},{"name":"enabled","type":"bool","required":true,"desc":"[child] 项目是否可以在列表中拖动和移动。"}],"id":488,"localName":"ReorderableDragStartListener","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_en-US.json b/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_en-US.json deleted file mode 100644 index 9fcaaafe7..000000000 --- a/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ReorderableList","path":"/src/widgets/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":" A scrolling container that allows the user to interactively reorder the list items.","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@template flutter.widgets.reorderable_list.itemBuilder} Called, as needed, to build list item widgets."},{"name":"itemCount","type":"int","required":true,"desc":"{@template flutter.widgets.reorderable_list.itemCount} The number of items in the list."},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@template flutter.widgets.reorderable_list.onReorder} A callback used by the list to report that a list item has been dragged to a new location in the list and the application should update the order of the items. {@endtemplate}"},{"name":"onReorderStart","type":"void Function(int index)?","desc":"{@template flutter.widgets.reorderable_list.onReorderStart} A callback that is called when an item drag has started."},{"name":"onReorderEnd","type":"void Function(int index)?","desc":"{@template flutter.widgets.reorderable_list.onReorderEnd} A callback that is called when the dragged item is dropped."},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@template flutter.widgets.reorderable_list.proxyDecorator} A callback that allows the app to add an animated decoration around an item when it is being dragged. {@endtemplate}"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"{@template flutter.widgets.reorderable_list.padding} The amount of space by which to inset the list contents."},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.reverse}"},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"physics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.scroll_view.physics}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.shrinkWrap}"},{"name":"anchor","type":"double","required":true,"desc":"{@macro flutter.widgets.scroll_view.anchor}"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double?","desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@template flutter.widgets.reorderable_list.dragBoundaryProvider} A callback used to provide drag boundaries during drag-and-drop reordering."}],"id":489,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_zh-CN.json deleted file mode 100644 index 54cdad7cb..000000000 --- a/modules/widget_system/widgets/doc/widgets/ReorderableList/ReorderableList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ReorderableList","path":"/src/widgets/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":"允许用户交互式重新排序列表项的滚动容器。","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@template flutter.widgets.reorderable_list.itemBuilder} 根据需要调用以构建列表项小部件。"},{"name":"itemCount","type":"int","required":true,"desc":"{@template flutter.widgets.reorderable_list.itemCount} 列表中的项目数。"},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@template flutter.widgets.reorderable_list.onReorder} 列表用于报告列表项已拖动到列表中新位置且应用程序应更新项目顺序的回调。{@endtemplate}"},{"name":"onReorderStart","type":"void Function(int index)?","desc":"{@template flutter.widgets.reorderable_list.onReorderStart} 项目拖动开始时调用的回调。"},{"name":"onReorderEnd","type":"void Function(int index)?","desc":"{@template flutter.widgets.reorderable_list.onReorderEnd} 拖动的项目被放下时调用的回调。"},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@template flutter.widgets.reorderable_list.proxyDecorator} 允许应用程序在拖动项目时在其周围添加动画装饰的回调。{@endtemplate}"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"{@template flutter.widgets.reorderable_list.padding} 插入列表内容的空间量。"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.reverse}"},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"physics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.scroll_view.physics}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.shrinkWrap}"},{"name":"anchor","type":"double","required":true,"desc":"{@macro flutter.widgets.scroll_view.anchor}"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double?","desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@template flutter.widgets.reorderable_list.dragBoundaryProvider} 在拖放重新排序期间用于提供拖动边界的回调。"}],"id":489,"localName":"ReorderableList","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_en-US.json b/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_en-US.json deleted file mode 100644 index 444aa6f8b..000000000 --- a/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ReorderableListView","path":"/src/material/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":" A list whose items the user can interactively reorder by dragging.","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemBuilder}"},{"name":"itemCount","type":"int","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemCount}"},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@macro flutter.widgets.reorderable_list.onReorder}"},{"name":"onReorderStart","type":"void Function(int index)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderStart}"},{"name":"onReorderEnd","type":"void Function(int index)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderEnd}"},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@macro flutter.widgets.reorderable_list.proxyDecorator}"},{"name":"buildDefaultDragHandles","type":"bool","required":true,"desc":"If true: on desktop platforms, a drag handle is stacked over the center of each item's trailing edge; on mobile platforms, a long press anywhere on the item starts a drag."},{"name":"padding","type":"EdgeInsets?","desc":"{@macro flutter.widgets.reorderable_list.padding}"},{"name":"header","type":"Widget?","desc":"A non-reorderable header item to show before the items of the list."},{"name":"footer","type":"Widget?","desc":"A non-reorderable footer item to show after the items of the list."},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.reverse}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary} Defaults to true when [scrollDirection] is [Axis.vertical] and [scrollController] is null."},{"name":"physics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.scroll_view.physics}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.shrinkWrap}"},{"name":"anchor","type":"double","required":true,"desc":"{@macro flutter.widgets.scroll_view.anchor}"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double?","desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@macro flutter.widgets.reorderable_list.dragBoundaryProvider}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the drag handle."}],"id":177,"lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ReorderableListView","desc":["【children】 : List of child components 【List】","【header】 : Header component 【Widget】","【padding】 : Padding 【EdgeInsets】","【onReorder】 : Callback when reordering 【ReorderCallback】"]},{"file":"node2_direction.dart","name":"Scroll Direction of ReorderableListView","desc":["【scrollDirection】 : Scroll direction 【Axis】","【reverse】 : Whether to reverse 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_zh-CN.json deleted file mode 100644 index 32572fe84..000000000 --- a/modules/widget_system/widgets/doc/widgets/ReorderableListView/ReorderableListView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ReorderableListView","path":"/src/material/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":"用户可以通过拖动交互式重新排序其项目的列表。","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemBuilder}"},{"name":"itemCount","type":"int","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemCount}"},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@macro flutter.widgets.reorderable_list.onReorder}"},{"name":"onReorderStart","type":"void Function(int index)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderStart}"},{"name":"onReorderEnd","type":"void Function(int index)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderEnd}"},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@macro flutter.widgets.reorderable_list.proxyDecorator}"},{"name":"buildDefaultDragHandles","type":"bool","required":true,"desc":"如果为 true:在桌面平台上,拖动手柄堆叠在每个项目尾随边缘的中心;在移动平台上,在项目上的任何地方长按都会开始拖动。"},{"name":"padding","type":"EdgeInsets?","desc":"{@macro flutter.widgets.reorderable_list.padding}"},{"name":"header","type":"Widget?","desc":"在列表项目之前显示的不可重新排序的标题项目。"},{"name":"footer","type":"Widget?","desc":"在列表项目之后显示的不可重新排序的页脚项目。"},{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.reverse}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.scroll_view.controller}"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary} 当 [scrollDirection] 为 [Axis.vertical] 且 [scrollController] 为 null 时默认为 true。"},{"name":"physics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.scroll_view.physics}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@macro flutter.widgets.scroll_view.shrinkWrap}"},{"name":"anchor","type":"double","required":true,"desc":"{@macro flutter.widgets.scroll_view.anchor}"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double?","desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@macro flutter.widgets.reorderable_list.dragBoundaryProvider}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在拖动手柄上时的光标。"}],"id":177,"localName":"可重排序列表","lever":4,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ReorderableListView基本使用","desc":["【children】 : 子组件列表 【List】","【header】 : 头部组件 【Widget】","【padding】 : 内边距 【EdgeInsets】","【onReorder】 : 调换时回调 【ReorderCallback】"]},{"file":"node2_direction.dart","name":"ReorderableListView滑动方向","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_en-US.json b/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_en-US.json deleted file mode 100644 index faab03734..000000000 --- a/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RepaintBoundary","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that creates a separate display list for its child.","fields":[],"id":264,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RepaintBoundary","desc":["【child】 : Child component 【Widget】","For example, in the above drawing view, even if shouldRepaint is false, the paint method will be continuously executed during scrolling. Using RepaintBoundary can avoid unnecessary drawing."]},{"file":"node2_save.dart","name":"Save Widget as Image","desc":["Through RenderRepaintBoundary, you can obtain the Image information of the child component, and then save the bytes as an image file."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_zh-CN.json deleted file mode 100644 index 99d80ef5e..000000000 --- a/modules/widget_system/widgets/doc/widgets/RepaintBoundary/RepaintBoundary_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RepaintBoundary","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"为其子项创建单独显示列表的小部件。","fields":[],"id":264,"localName":"重绘边界","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RepaintBoundary基本使用","desc":["【child】 : 子组件 【Widget】","比如上面的绘制视图,即使shouldRepaint为false,在滑动中会也会不断执行paint方法,使用RepaintBoundary可以避免不必要的绘制。"]},{"file":"node2_save.dart","name":"保存Widget成为图片","desc":["通过RenderRepaintBoundary可以获取子组件的Image信息,从而获取字节保存为图片文件。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_en-US.json b/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_en-US.json deleted file mode 100644 index ade1e78e2..000000000 --- a/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RestorationScope","path":"/src/widgets/restoration.dart","parents":["StatefulWidget","Widget"],"desc":" Creates a new scope for restoration IDs used by descendant widgets to claim [RestorationBucket]s.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"restorationId","type":"String?","desc":"The restoration ID used by this widget to obtain a child bucket from the surrounding [RestorationScope]."}],"id":490,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_zh-CN.json deleted file mode 100644 index 96f7271f6..000000000 --- a/modules/widget_system/widgets/doc/widgets/RestorationScope/RestorationScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RestorationScope","path":"/src/widgets/restoration.dart","parents":["StatefulWidget","Widget"],"desc":"为后代小部件用于声明 [RestorationBucket] 的恢复 ID 创建新范围。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"restorationId","type":"String?","desc":"此小部件用于从周围的 [RestorationScope] 获取子存储桶的恢复 ID。"}],"id":490,"localName":"RestorationScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RichText/RichText_en-US.json b/modules/widget_system/widgets/doc/widgets/RichText/RichText_en-US.json deleted file mode 100644 index 214927c08..000000000 --- a/modules/widget_system/widgets/doc/widgets/RichText/RichText_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RichText","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A paragraph of rich text.","fields":[{"name":"text","type":"InlineSpan","required":true,"desc":"The text to display in this widget."},{"name":"textAlign","type":"TextAlign","required":true,"desc":"How the text should be aligned horizontally."},{"name":"textDirection","type":"TextDirection?","desc":"The directionality of the text."},{"name":"softWrap","type":"bool","required":true,"desc":"Whether the text should break at soft line breaks."},{"name":"overflow","type":"TextOverflow","required":true,"desc":"How visual overflow should be handled."},{"name":"textScaler","type":"TextScaler","required":true,"desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"maxLines","type":"int?","desc":"An optional maximum number of lines for the text to span, wrapping if necessary. If the text exceeds the given number of lines, it will be truncated according to [overflow]."},{"name":"locale","type":"Locale?","desc":"Used to select a font when the same Unicode character can be rendered differently, depending on the locale."},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.painting.textPainter.strutStyle}"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"selectionRegistrar","type":"SelectionRegistrar?","desc":"The [SelectionRegistrar] this rich text is subscribed to."},{"name":"selectionColor","type":"Color?","desc":"The color to use when painting the selection."}],"id":101,"lever":5,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RichText","desc":["【text】: text 【TextSpan】"," Other properties are the same as Text, see it for details."]},{"file":"node2_widget.dart","name":"RichText Contains Other Components","desc":["Use WidgetSpan to carry ordinary components as the content of RichText"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RichText/RichText_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RichText/RichText_zh-CN.json deleted file mode 100644 index b0cead989..000000000 --- a/modules/widget_system/widgets/doc/widgets/RichText/RichText_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RichText","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"富文本段落。","fields":[{"name":"text","type":"InlineSpan","required":true,"desc":"在此小部件中显示的文本。"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"文本应如何水平对齐。"},{"name":"textDirection","type":"TextDirection?","desc":"文本的方向性。"},{"name":"softWrap","type":"bool","required":true,"desc":"文本是否应在软换行符处换行。"},{"name":"overflow","type":"TextOverflow","required":true,"desc":"应如何处理视觉溢出。"},{"name":"textScaler","type":"TextScaler","required":true,"desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"maxLines","type":"int?","desc":"文本跨越的可选最大行数,必要时换行。如果文本超过给定的行数,它将根据 [overflow] 被截断。"},{"name":"locale","type":"Locale?","desc":"当同一个 Unicode 字符可以根据区域设置以不同方式渲染时,用于选择字体。"},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.painting.textPainter.strutStyle}"},{"name":"textWidthBasis","type":"TextWidthBasis","required":true,"desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"selectionRegistrar","type":"SelectionRegistrar?","desc":"此富文本订阅的 [SelectionRegistrar]。"},{"name":"selectionColor","type":"Color?","desc":"绘制选择时使用的颜色。"}],"id":101,"localName":"富文本","lever":5,"family":3,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RichText基本使用","desc":["【text】 : 文字 【TextSpan】"," 其他属性与Text相同,详见之。"]},{"file":"node2_widget.dart","name":"RichText包含其他组件","desc":["使用WidgetSpan来承载普通组件,作为RichText的内容"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_en-US.json b/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_en-US.json deleted file mode 100644 index 4191d9e0d..000000000 --- a/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RootRestorationScope","path":"/src/widgets/restoration.dart","parents":["StatefulWidget","Widget"],"desc":" Inserts a child bucket of [RestorationManager.rootBucket] into the widget tree and makes it available to descendants via [RestorationScope.of].","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"restorationId","type":"String?","desc":"The restoration ID used to identify the child bucket that this widget will insert into the tree."}],"id":491,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_zh-CN.json deleted file mode 100644 index 93df7a4da..000000000 --- a/modules/widget_system/widgets/doc/widgets/RootRestorationScope/RootRestorationScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RootRestorationScope","path":"/src/widgets/restoration.dart","parents":["StatefulWidget","Widget"],"desc":"将 [RestorationManager.rootBucket] 的子存储桶插入小部件树并通过 [RestorationScope.of] 使其对后代可用。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"restorationId","type":"String?","desc":"用于标识此小部件将插入树中的子存储桶的恢复 ID。"}],"id":491,"localName":"RootRestorationScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_en-US.json deleted file mode 100644 index e14faac2b..000000000 --- a/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RootWidget","path":"/src/widgets/binding.dart","parents":["Widget"],"desc":" A widget for the root of the widget tree.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"debugShortDescription","type":"String?","desc":"A short description of this widget used by debugging aids."}],"id":492,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_zh-CN.json deleted file mode 100644 index 790462cdf..000000000 --- a/modules/widget_system/widgets/doc/widgets/RootWidget/RootWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RootWidget","path":"/src/widgets/binding.dart","parents":["Widget"],"desc":"小部件树根部的小部件。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"debugShortDescription","type":"String?","desc":"调试辅助工具使用的此小部件的简短描述。"}],"id":492,"localName":"RootWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_en-US.json deleted file mode 100644 index 5cca121c2..000000000 --- a/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RotatedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that rotates its child by a integral number of quarter turns.","fields":[{"name":"quarterTurns","type":"int","required":true,"desc":"The number of clockwise quarter turns the child should be rotated."}],"id":72,"lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RotatedBox","desc":["【child】 : Child widget 【Widget】","【quarterTurns】 : How many 90° to rotate 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_zh-CN.json deleted file mode 100644 index 23b977c91..000000000 --- a/modules/widget_system/widgets/doc/widgets/RotatedBox/RotatedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RotatedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项旋转整数个四分之一圈的小部件。","fields":[{"name":"quarterTurns","type":"int","required":true,"desc":"子项应顺时针旋转的四分之一圈数。"}],"id":72,"localName":"旋转盒","lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RotatedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【quarterTurns】 : 旋转多少个90° 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_en-US.json deleted file mode 100644 index 713ebe4f2..000000000 --- a/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RotationTransition","path":"/src/widgets/transitions.dart","parents":["MatrixTransition","AnimatedWidget","StatefulWidget","Widget"],"desc":" Animates the rotation of a widget.","fields":[],"id":90,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of RotationTransition","desc":["【child】 : Child component 【Widget】","【turns】 : Whether to disappear 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_zh-CN.json deleted file mode 100644 index 9bfe246f5..000000000 --- a/modules/widget_system/widgets/doc/widgets/RotationTransition/RotationTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"RotationTransition","path":"/src/widgets/transitions.dart","parents":["MatrixTransition","AnimatedWidget","StatefulWidget","Widget"],"desc":"对小部件的旋转进行动画处理。","fields":[],"id":90,"localName":"旋转变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"RotationTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【turns】 : 是否消失 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Router/Router_en-US.json b/modules/widget_system/widgets/doc/widgets/Router/Router_en-US.json deleted file mode 100644 index 9207e5896..000000000 --- a/modules/widget_system/widgets/doc/widgets/Router/Router_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Router","path":"/src/widgets/router.dart","parents":["StatefulWidget","Widget"],"desc":" The dispatcher for opening and closing pages of an application.","fields":[{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"The route information provider for the router."},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"The route information parser for the router."},{"name":"routerDelegate","type":"RouterDelegate","required":true,"desc":"The router delegate for the router."},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"The back button dispatcher for the router."},{"name":"restorationScopeId","type":"String?","desc":"Restoration ID to save and restore the state of the [Router]."}],"id":493,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Router/Router_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Router/Router_zh-CN.json deleted file mode 100644 index 40e0aeb9c..000000000 --- a/modules/widget_system/widgets/doc/widgets/Router/Router_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Router","path":"/src/widgets/router.dart","parents":["StatefulWidget","Widget"],"desc":"应用程序页面打开和关闭的调度器。","fields":[{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"路由器的路由信息提供者。"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"路由器的路由信息解析器。"},{"name":"routerDelegate","type":"RouterDelegate","required":true,"desc":"路由器的路由器委托。"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"路由器的返回按钮调度器。"},{"name":"restorationScopeId","type":"String?","desc":"保存和恢复 [Router] 状态的恢复 ID。"}],"id":493,"localName":"Router","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Row/Row_en-US.json b/modules/widget_system/widgets/doc/widgets/Row/Row_en-US.json deleted file mode 100644 index 86512c334..000000000 --- a/modules/widget_system/widgets/doc/widgets/Row/Row_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Row","path":"/src/widgets/basic.dart","parents":["Flex","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that displays its children in a horizontal array.","fields":[],"id":95,"lever":4,"family":3,"linkIds":[94,96],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Row","desc":["【children】: Component list 【List】","【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】","【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】","【textBaseline】: Text baseline 【TextBaseline】","【verticalDirection】: Vertical direction 【VerticalDirection】","【mainAxisSize】: Main axis size 【MainAxisSize】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Row/Row_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Row/Row_zh-CN.json deleted file mode 100644 index e88f056d4..000000000 --- a/modules/widget_system/widgets/doc/widgets/Row/Row_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Row","path":"/src/widgets/basic.dart","parents":["Flex","MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在水平数组中显示其子项的小部件。","fields":[],"id":95,"localName":"行布局","lever":4,"family":3,"linkIds":[94,96],"nodes":[{"file":"node1_base.dart","name":"Row基本使用","desc":["【children】 : 组件列表 【List】","【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】","【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】","【textBaseline】 : 文字基线 【TextBaseline】","【verticalDirection】 : 竖直方向 【VerticalDirection】","【mainAxisSize】 : 主轴尺寸 【MainAxisSize】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_en-US.json b/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_en-US.json deleted file mode 100644 index e0448e10b..000000000 --- a/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SafeArea","path":"/src/widgets/safe_area.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that insets its child with sufficient padding to avoid intrusions by the operating system.","fields":[{"name":"left","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the left."},{"name":"top","type":"bool","required":true,"desc":"Whether to avoid system intrusions at the top of the screen, typically the system status bar."},{"name":"right","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the right."},{"name":"bottom","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the bottom side of the screen."},{"name":"minimum","type":"EdgeInsets","required":true,"desc":"This minimum padding to apply."},{"name":"maintainBottomViewPadding","type":"bool","required":true,"desc":"Specifies whether the [SafeArea] should maintain the bottom [MediaQueryData.viewPadding] instead of the bottom [MediaQueryData.padding], defaults to false."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":207,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SafeArea Usage Test","desc":["【left】: Whether to enable the left side 【bool】","【top】: Whether to enable the top 【bool】","【bottom】: Whether to enable the bottom 【bool】","【right】: Whether to enable the right side 【bool】","【child】: Child widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_zh-CN.json deleted file mode 100644 index 0367dfe95..000000000 --- a/modules/widget_system/widgets/doc/widgets/SafeArea/SafeArea_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SafeArea","path":"/src/widgets/safe_area.dart","parents":["StatelessWidget","Widget"],"desc":"用足够的内边距插入其子项以避免操作系统入侵的小部件。","fields":[{"name":"left","type":"bool","required":true,"desc":"是否避免左侧的系统入侵。"},{"name":"top","type":"bool","required":true,"desc":"是否避免屏幕顶部的系统入侵,通常是系统状态栏。"},{"name":"right","type":"bool","required":true,"desc":"是否避免右侧的系统入侵。"},{"name":"bottom","type":"bool","required":true,"desc":"是否避免屏幕底部的系统入侵。"},{"name":"minimum","type":"EdgeInsets","required":true,"desc":"要应用的最小内边距。"},{"name":"maintainBottomViewPadding","type":"bool","required":true,"desc":"指定 [SafeArea] 是否应维护底部 [MediaQueryData.viewPadding] 而不是底部 [MediaQueryData.padding],默认为 false。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":207,"localName":"安全区","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SafeArea 使用测试","desc":["【left】 : 左侧是否启用 【bool】","【top】 : 上方是否启用 【bool】","【bottom】 : 下方是否启用 【bool】","【right】 : 右侧是否启用 【bool】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_en-US.json b/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_en-US.json deleted file mode 100644 index 2fc3afbf7..000000000 --- a/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Scaffold","path":"/src/material/scaffold.dart","parents":["StatefulWidget","Widget"],"desc":" Implements the basic Material Design visual layout structure.","fields":[{"name":"extendBody","type":"bool","required":true,"desc":"If true, and [bottomNavigationBar] or [persistentFooterButtons] is specified, then the [body] extends to the bottom of the Scaffold, instead of only extending to the top of the [bottomNavigationBar] or the [persistentFooterButtons]."},{"name":"extendBodyBehindAppBar","type":"bool","required":true,"desc":"If true, and an [appBar] is specified, then the height of the [body] is extended to include the height of the app bar and the top of the body is aligned with the top of the app bar."},{"name":"appBar","type":"PreferredSizeWidget?","desc":"An app bar to display at the top of the scaffold."},{"name":"body","type":"Widget?","desc":"The primary content of the scaffold."},{"name":"floatingActionButton","type":"Widget?","desc":"A button displayed floating above [body], in the bottom right corner."},{"name":"floatingActionButtonLocation","type":"FloatingActionButtonLocation?","desc":"Responsible for determining where the [floatingActionButton] should go."},{"name":"floatingActionButtonAnimator","type":"FloatingActionButtonAnimator?","desc":"Animator to move the [floatingActionButton] to a new [floatingActionButtonLocation]."},{"name":"persistentFooterButtons","type":"List?","desc":"A set of buttons that are displayed at the bottom of the scaffold."},{"name":"persistentFooterAlignment","type":"AlignmentDirectional","required":true,"desc":"The alignment of the [persistentFooterButtons] inside the [OverflowBar]."},{"name":"drawer","type":"Widget?","desc":"A panel displayed to the side of the [body], often hidden on mobile devices. Swipes in from either left-to-right ([TextDirection.ltr]) or right-to-left ([TextDirection.rtl])"},{"name":"onDrawerChanged","type":"DrawerCallback?","desc":"Optional callback that is called when the [Scaffold.drawer] is opened or closed."},{"name":"endDrawer","type":"Widget?","desc":"A panel displayed to the side of the [body], often hidden on mobile devices. Swipes in from right-to-left ([TextDirection.ltr]) or left-to-right ([TextDirection.rtl])"},{"name":"onEndDrawerChanged","type":"DrawerCallback?","desc":"Optional callback that is called when the [Scaffold.endDrawer] is opened or closed."},{"name":"drawerScrimColor","type":"Color?","desc":"The color to use for the scrim that obscures primary content while a drawer is open."},{"name":"backgroundColor","type":"Color?","desc":"The color of the [Material] widget that underlies the entire Scaffold."},{"name":"bottomNavigationBar","type":"Widget?","desc":"A bottom navigation bar to display at the bottom of the scaffold."},{"name":"bottomSheet","type":"Widget?","desc":"The persistent bottom sheet to display."},{"name":"resizeToAvoidBottomInset","type":"bool?","desc":"If true the [body] and the scaffold's floating widgets should size themselves to avoid the onscreen keyboard whose height is defined by the ambient [MediaQuery]'s [MediaQueryData.viewInsets] `bottom` property."},{"name":"primary","type":"bool","required":true,"desc":"Whether this scaffold is being displayed at the top of the screen."},{"name":"drawerDragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.material.DrawerController.dragStartBehavior}"},{"name":"drawerEdgeDragWidth","type":"double?","desc":"The width of the area within which a horizontal swipe will open the drawer."},{"name":"drawerEnableOpenDragGesture","type":"bool","required":true,"desc":"Determines if the [Scaffold.drawer] can be opened with a drag gesture on mobile."},{"name":"endDrawerEnableOpenDragGesture","type":"bool","required":true,"desc":"Determines if the [Scaffold.endDrawer] can be opened with a gesture on mobile."},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the [Scaffold]."}],"id":64,"lever":4,"family":1,"linkIds":[57,60,61],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Scaffold","desc":["【appBar】: Header component 【PreferredSizeWidget】","【bottomNavigationBar】: Bottom component 【Widget】","【drawer】: Left sliding component 【Widget】","【endDrawer】: Right sliding component 【Widget】","【body】: Content component 【Widget】","【backgroundColor】: Background color 【Color】","【floatingActionButton】: Floating button 【Widget】","【floatingActionButtonLocation】: Floating button position 【FloatingActionButtonLocation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_zh-CN.json deleted file mode 100644 index 5f1cf2e19..000000000 --- a/modules/widget_system/widgets/doc/widgets/Scaffold/Scaffold_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Scaffold","path":"/src/material/scaffold.dart","parents":["StatefulWidget","Widget"],"desc":"实现基本的 Material Design 视觉布局结构。","fields":[{"name":"extendBody","type":"bool","required":true,"desc":"如果为 true,并且指定了 [bottomNavigationBar] 或 [persistentFooterButtons],则 [body] 扩展到 Scaffold 的底部,而不是仅扩展到 [bottomNavigationBar] 或 [persistentFooterButtons] 的顶部。"},{"name":"extendBodyBehindAppBar","type":"bool","required":true,"desc":"如果为 true,并且指定了 [appBar],则 [body] 的高度扩展为包括应用栏的高度,并且主体的顶部与应用栏的顶部对齐。"},{"name":"appBar","type":"PreferredSizeWidget?","desc":"在脚手架顶部显示的应用栏。"},{"name":"body","type":"Widget?","desc":"脚手架的主要内容。"},{"name":"floatingActionButton","type":"Widget?","desc":"显示在 [body] 上方、右下角的浮动按钮。"},{"name":"floatingActionButtonLocation","type":"FloatingActionButtonLocation?","desc":"负责确定 [floatingActionButton] 应该放在哪里。"},{"name":"floatingActionButtonAnimator","type":"FloatingActionButtonAnimator?","desc":"将 [floatingActionButton] 移动到新 [floatingActionButtonLocation] 的动画器。"},{"name":"persistentFooterButtons","type":"List?","desc":"显示在脚手架底部的一组按钮。"},{"name":"persistentFooterAlignment","type":"AlignmentDirectional","required":true,"desc":"[OverflowBar] 内 [persistentFooterButtons] 的对齐。"},{"name":"drawer","type":"Widget?","desc":"显示在 [body] 侧面的面板,通常在移动设备上隐藏。从左到右 ([TextDirection.ltr]) 或从右到左 ([TextDirection.rtl]) 滑入"},{"name":"onDrawerChanged","type":"DrawerCallback?","desc":"打开或关闭 [Scaffold.drawer] 时调用的可选回调。"},{"name":"endDrawer","type":"Widget?","desc":"显示在 [body] 侧面的面板,通常在移动设备上隐藏。从右到左 ([TextDirection.ltr]) 或从左到右 ([TextDirection.rtl]) 滑入"},{"name":"onEndDrawerChanged","type":"DrawerCallback?","desc":"打开或关闭 [Scaffold.endDrawer] 时调用的可选回调。"},{"name":"drawerScrimColor","type":"Color?","desc":"抽屉打开时用于遮挡主要内容的纱幕颜色。"},{"name":"backgroundColor","type":"Color?","desc":"整个 Scaffold 下方的 [Material] 小部件的颜色。"},{"name":"bottomNavigationBar","type":"Widget?","desc":"在脚手架底部显示的底部导航栏。"},{"name":"bottomSheet","type":"Widget?","desc":"要显示的持久底部表单。"},{"name":"resizeToAvoidBottomInset","type":"bool?","desc":"如果为 true,[body] 和脚手架的浮动小部件应调整自身大小以避免屏幕键盘,其高度由环境 [MediaQuery] 的 [MediaQueryData.viewInsets] `bottom` 属性定义。"},{"name":"primary","type":"bool","required":true,"desc":"此脚手架是否显示在屏幕顶部。"},{"name":"drawerDragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.material.DrawerController.dragStartBehavior}"},{"name":"drawerEdgeDragWidth","type":"double?","desc":"水平滑动将打开抽屉的区域宽度。"},{"name":"drawerEnableOpenDragGesture","type":"bool","required":true,"desc":"确定 [Scaffold.drawer] 是否可以在移动设备上通过拖动手势打开。"},{"name":"endDrawerEnableOpenDragGesture","type":"bool","required":true,"desc":"确定 [Scaffold.endDrawer] 是否可以在移动设备上通过手势打开。"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [Scaffold] 状态的恢复 ID。"}],"id":64,"localName":"脚手架","lever":4,"family":1,"linkIds":[57,60,61],"nodes":[{"file":"node1_base.dart","name":"Scaffold基本用法","desc":["【appBar】 : 头部组件 【PreferredSizeWidget】","【bottomNavigationBar】 : 底部组件 【Widget】","【drawer】 : 左侧滑组件 【Widget】","【endDrawer】 : 右侧滑组件 【Widget】","【body】 : 内容组件 【Widget】","【backgroundColor】 : 背景色 【Color】","【floatingActionButton】 : 浮动按钮 【Widget】","【floatingActionButtonLocation】 : 浮动按钮位置 【FloatingActionButtonLocation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_en-US.json b/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_en-US.json deleted file mode 100644 index 62521aa9f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScaffoldMessenger","path":"/src/material/scaffold.dart","parents":["StatefulWidget","Widget"],"desc":" Manages [SnackBar]s and [MaterialBanner]s for descendant [Scaffold]s.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":494,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_zh-CN.json deleted file mode 100644 index 039392450..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScaffoldMessenger/ScaffoldMessenger_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScaffoldMessenger","path":"/src/material/scaffold.dart","parents":["StatefulWidget","Widget"],"desc":"为后代 [Scaffold] 管理 [SnackBar] 和 [MaterialBanner]。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":494,"localName":"ScaffoldMessenger","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_en-US.json deleted file mode 100644 index 44d57296e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScaleTransition","path":"/src/widgets/transitions.dart","parents":["MatrixTransition","AnimatedWidget","StatefulWidget","Widget"],"desc":" Animates the scale of a transformed widget.","fields":[],"id":91,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ScaleTransition","desc":["【child】: Child component 【Widget】","【scale】: Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_zh-CN.json deleted file mode 100644 index 26a455ce3..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScaleTransition/ScaleTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScaleTransition","path":"/src/widgets/transitions.dart","parents":["MatrixTransition","AnimatedWidget","StatefulWidget","Widget"],"desc":"对变换小部件的缩放进行动画处理。","fields":[],"id":91,"localName":"缩放变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ScaleTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【scale】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_en-US.json b/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_en-US.json deleted file mode 100644 index dcab68f0a..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScrollConfiguration","path":"/src/widgets/scroll_configuration.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Controls how [Scrollable] widgets behave in a subtree.","fields":[{"name":"behavior","type":"ScrollBehavior","required":true,"desc":"How [Scrollable] widgets that are descendants of [child] should behave."}],"id":180,"lever":3,"family":5,"linkIds":[162,163,164],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ScrollConfiguration","desc":["【child】: Child component 【Widget】","【behavior】: Scroll behavior 【ScrollBehavior】"," ScrollConfiguration can be used to remove the blue shadow of ListView"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_zh-CN.json deleted file mode 100644 index e6e004a46..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScrollConfiguration/ScrollConfiguration_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScrollConfiguration","path":"/src/widgets/scroll_configuration.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"控制子树中 [Scrollable] 小部件的行为方式。","fields":[{"name":"behavior","type":"ScrollBehavior","required":true,"desc":"作为 [child] 后代的 [Scrollable] 小部件应如何表现。"}],"id":180,"localName":"ios菜单按钮","lever":3,"family":5,"linkIds":[162,163,164],"nodes":[{"file":"node1_base.dart","name":"ScrollConfiguration基本使用","desc":["【child】 : 子组件 【Widget】","【behavior】 : 滑动行为 【ScrollBehavior】"," 可以使用ScrollConfiguration让ListView无蓝色阴影"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_en-US.json b/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_en-US.json deleted file mode 100644 index 98519c3ff..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScrollNotificationObserver","path":"/src/widgets/scroll_notification_observer.dart","parents":["StatefulWidget","Widget"],"desc":" Notifies its listeners when a descendant scrolls.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The subtree below this widget."}],"id":495,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_zh-CN.json deleted file mode 100644 index e951ec80f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScrollNotificationObserver/ScrollNotificationObserver_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScrollNotificationObserver","path":"/src/widgets/scroll_notification_observer.dart","parents":["StatefulWidget","Widget"],"desc":"当后代滚动时通知其监听器。","fields":[{"name":"child","type":"Widget","required":true,"desc":"此小部件下方的子树。"}],"id":495,"localName":"ScrollNotificationObserver","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_en-US.json deleted file mode 100644 index 57296d8e2..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScrollView","path":"/src/widgets/scroll_view.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":" A widget that combines a [Scrollable] and a [Viewport] to create an interactive scrolling pane of content in one dimension.","fields":[{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@template flutter.widgets.scroll_view.scrollDirection} The [Axis] along which the scroll view's offset increases."},{"name":"reverse","type":"bool","required":true,"desc":"{@template flutter.widgets.scroll_view.reverse} Whether the scroll view scrolls in the reading direction."},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.scroll_view.controller} An object that can be used to control the position to which this scroll view is scrolled."},{"name":"primary","type":"bool?","desc":"{@template flutter.widgets.scroll_view.primary} Whether this is the primary scroll view associated with the parent [PrimaryScrollController]."},{"name":"physics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.scroll_view.physics} How the scroll view should respond to user input."},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@template flutter.widgets.scroll_view.shrinkWrap} Whether the extent of the scroll view in the [scrollDirection] should be determined by the contents being viewed."},{"name":"center","type":"Key?","desc":"The first child in the [GrowthDirection.forward] growth direction."},{"name":"anchor","type":"double","required":true,"desc":"{@template flutter.widgets.scroll_view.anchor} The relative position of the zero scroll offset."},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"semanticChildCount","type":"int?","desc":"The number of children that will contribute semantic information."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@template flutter.widgets.scroll_view.keyboardDismissBehavior} The [ScrollViewKeyboardDismissBehavior] defines how this [ScrollView] will dismiss the keyboard automatically. {@endtemplate}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"}],"id":349,"lever":2,"family":0,"linkIds":[183,162,163,253,340],"nodes":[{"file":"node1_base.dart","name":"Introduction to ScrollView","desc":["【reverse】: Whether to reverse 【bool】","【scrollDirection】: Scroll direction 【Axis】","【cacheExtent】: Cache length 【double】","【dragStartBehavior】: Drag behavior 【DragStartBehavior】","【clipBehavior】: Clip behavior 【ClipBehavior】","【controller】: Controller 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_zh-CN.json deleted file mode 100644 index 2c76b54ce..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScrollView/ScrollView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScrollView","path":"/src/widgets/scroll_view.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":"结合 [Scrollable] 和 [Viewport] 在一个维度上创建交互式滚动内容窗格的小部件。","fields":[{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@template flutter.widgets.scroll_view.scrollDirection} 滚动视图偏移增加的 [Axis]。"},{"name":"reverse","type":"bool","required":true,"desc":"{@template flutter.widgets.scroll_view.reverse} 滚动视图是否在阅读方向上滚动。"},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.scroll_view.controller} 可用于控制此滚动视图滚动到的位置的对象。"},{"name":"primary","type":"bool?","desc":"{@template flutter.widgets.scroll_view.primary} 这是否是与父 [PrimaryScrollController] 关联的主要滚动视图。"},{"name":"physics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.scroll_view.physics} 滚动视图应如何响应用户输入。"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.scrollable.scrollBehavior}"},{"name":"shrinkWrap","type":"bool","required":true,"desc":"{@template flutter.widgets.scroll_view.shrinkWrap} 滚动视图在 [scrollDirection] 中的范围是否应由正在查看的内容确定。"},{"name":"center","type":"Key?","desc":"[GrowthDirection.forward] 增长方向中的第一个子项。"},{"name":"anchor","type":"double","required":true,"desc":"{@template flutter.widgets.scroll_view.anchor} 零滚动偏移的相对位置。"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"semanticChildCount","type":"int?","desc":"将贡献语义信息的子项数。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@template flutter.widgets.scroll_view.keyboardDismissBehavior} [ScrollViewKeyboardDismissBehavior] 定义此 [ScrollView] 如何自动关闭键盘。{@endtemplate}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"}],"id":349,"localName":"视滑动图","lever":2,"family":0,"linkIds":[183,162,163,253,340],"nodes":[{"file":"node1_base.dart","name":"ScrollView 介绍","desc":["【reverse】 : 是否反向 【bool】","【scrollDirection】 : 滑动方向 【Axis】","【cacheExtent】 : 缓存长 【double】","【dragStartBehavior】 : 拖动行为 【DragStartBehavior】","【clipBehavior】 : 裁剪行为 【ClipBehavior】","【controller】 : 控制器 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_en-US.json b/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_en-US.json deleted file mode 100644 index f40ba40f2..000000000 --- a/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Scrollable","path":"/src/widgets/scrollable.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that manages scrolling in one dimension and informs the [Viewport] through which the content is viewed.","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@template flutter.widgets.Scrollable.axisDirection} The direction in which this widget scrolls."},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.Scrollable.controller} An object that can be used to control the position to which this widget is scrolled."},{"name":"physics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.Scrollable.physics} How the widgets should respond to user input."},{"name":"viewportBuilder","type":"ViewportBuilder","required":true,"desc":"Builds the viewport through which the scrollable content is displayed."},{"name":"incrementCalculator","type":"ScrollIncrementCalculator?","desc":"{@template flutter.widgets.Scrollable.incrementCalculator} An optional function that will be called to calculate the distance to scroll when the scrollable is asked to scroll via the keyboard using a [ScrollAction]."},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"{@template flutter.widgets.scrollable.excludeFromSemantics} Whether the scroll actions introduced by this [Scrollable] are exposed in the semantics tree."},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@template flutter.widgets.scrollable.hitTestBehavior} Defines the behavior of gesture detector used in this [Scrollable]."},{"name":"semanticChildCount","type":"int?","desc":"The number of children that will contribute semantic information."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.widgets.scrollable.dragStartBehavior} Determines the way that drag start behavior is handled."},{"name":"restorationId","type":"String?","desc":"{@template flutter.widgets.scrollable.restorationId} Restoration ID to save and restore the scroll offset of the scrollable."},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.widgets.scrollable.scrollBehavior} A [ScrollBehavior] that will be applied to this widget individually."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":253,"lever":4,"family":1,"linkIds":[340,349],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Scrollable","desc":["【viewportBuilder】: Viewport Constructor 【ViewportBuilder】","【axisDirection】: Scroll Direction 【AxisDirection】","【controller】: Scroll Controller 【ScrollController】","【dragStartBehavior】: Drag Behavior 【DragStartBehavior】","【physics】: Scroll Physics 【ScrollPhysics】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_zh-CN.json deleted file mode 100644 index 86205f8f1..000000000 --- a/modules/widget_system/widgets/doc/widgets/Scrollable/Scrollable_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Scrollable","path":"/src/widgets/scrollable.dart","parents":["StatefulWidget","Widget"],"desc":"在一个维度上管理滚动并通过 [Viewport] 通知查看内容的小部件。","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@template flutter.widgets.Scrollable.axisDirection} 此小部件滚动的方向。"},{"name":"controller","type":"ScrollController?","desc":"{@template flutter.widgets.Scrollable.controller} 可用于控制此小部件滚动到的位置的对象。"},{"name":"physics","type":"ScrollPhysics?","desc":"{@template flutter.widgets.Scrollable.physics} 小部件应如何响应用户输入。"},{"name":"viewportBuilder","type":"ViewportBuilder","required":true,"desc":"构建显示可滚动内容的视口。"},{"name":"incrementCalculator","type":"ScrollIncrementCalculator?","desc":"{@template flutter.widgets.Scrollable.incrementCalculator} 当要求可滚动通过使用 [ScrollAction] 的键盘滚动时,将调用以计算滚动距离的可选函数。"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"{@template flutter.widgets.scrollable.excludeFromSemantics} 此 [Scrollable] 引入的滚动操作是否在语义树中公开。"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@template flutter.widgets.scrollable.hitTestBehavior} 定义此 [Scrollable] 中使用的手势检测器的行为。"},{"name":"semanticChildCount","type":"int?","desc":"将贡献语义信息的子项数。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@template flutter.widgets.scrollable.dragStartBehavior} 确定处理拖动开始行为的方式。"},{"name":"restorationId","type":"String?","desc":"{@template flutter.widgets.scrollable.restorationId} 保存和恢复可滚动滚动偏移的恢复 ID。"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@template flutter.widgets.scrollable.scrollBehavior} 将单独应用于此小部件的 [ScrollBehavior]。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":253,"localName":"可滑动组件","lever":4,"family":1,"linkIds":[340,349],"nodes":[{"file":"node1_base.dart","name":"Scrollable的基本使用","desc":["【viewportBuilder】 : 视口构造器 【ViewportBuilder】","【axisDirection】: 滑动方向 【AxisDirection】","【controller】: 滑动控制器 【ScrollController】","【dragStartBehavior】: t拖动行为 【DragStartBehavior】","【physics】: 滚动现象 【ScrollPhysics】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_en-US.json b/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_en-US.json deleted file mode 100644 index 85e66d283..000000000 --- a/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Scrollbar","path":"/src/material/scrollbar.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design scrollbar.","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.Scrollbar.child}"},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.Scrollbar.controller}"},{"name":"thumbVisibility","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.thumbVisibility}"},{"name":"trackVisibility","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.trackVisibility}"},{"name":"thickness","type":"double?","desc":"The thickness of the scrollbar in the cross axis of the scrollable."},{"name":"radius","type":"Radius?","desc":"The [Radius] of the scrollbar thumb's rounded rectangle corners."},{"name":"interactive","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.interactive}"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate?","desc":"{@macro flutter.widgets.Scrollbar.notificationPredicate}"},{"name":"scrollbarOrientation","type":"ScrollbarOrientation?","desc":"{@macro flutter.widgets.Scrollbar.scrollbarOrientation}"}],"id":194,"lever":3,"family":1,"linkIds":[195,164,162],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Scrollbar","desc":["【child】: Child widget 【Widget】","【controller】: Controller 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_zh-CN.json deleted file mode 100644 index d322a2299..000000000 --- a/modules/widget_system/widgets/doc/widgets/Scrollbar/Scrollbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Scrollbar","path":"/src/material/scrollbar.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 滚动条。","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.Scrollbar.child}"},{"name":"controller","type":"ScrollController?","desc":"{@macro flutter.widgets.Scrollbar.controller}"},{"name":"thumbVisibility","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.thumbVisibility}"},{"name":"trackVisibility","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.trackVisibility}"},{"name":"thickness","type":"double?","desc":"滚动条在可滚动交叉轴上的厚度。"},{"name":"radius","type":"Radius?","desc":"滚动条拇指圆角矩形角的 [Radius]。"},{"name":"interactive","type":"bool?","desc":"{@macro flutter.widgets.Scrollbar.interactive}"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate?","desc":"{@macro flutter.widgets.Scrollbar.notificationPredicate}"},{"name":"scrollbarOrientation","type":"ScrollbarOrientation?","desc":"{@macro flutter.widgets.Scrollbar.scrollbarOrientation}"}],"id":194,"localName":"滑动指示栏","lever":3,"family":1,"linkIds":[195,164,162],"nodes":[{"file":"node1_base.dart","name":"Scrollbar基本使用","desc":["【child】 : 子组件 【Widget】","【controller】 : 控制器 【ScrollController】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_en-US.json deleted file mode 100644 index ec987a075..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScrollbarTheme","path":"/src/material/scrollbar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a scrollbar theme to descendant [Scrollbar] widgets.","fields":[{"name":"data","type":"ScrollbarThemeData","required":true,"desc":"The properties used for all descendant [Scrollbar] widgets."}],"id":496,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_zh-CN.json deleted file mode 100644 index 9bf92e667..000000000 --- a/modules/widget_system/widgets/doc/widgets/ScrollbarTheme/ScrollbarTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ScrollbarTheme","path":"/src/material/scrollbar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"将滚动条主题应用于后代 [Scrollbar] 小部件。","fields":[{"name":"data","type":"ScrollbarThemeData","required":true,"desc":"用于所有后代 [Scrollbar] 小部件的属性。"}],"id":496,"localName":"ScrollbarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_en-US.json b/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_en-US.json deleted file mode 100644 index 0d17c246e..000000000 --- a/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SearchAnchor","path":"/src/material/search_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" Manages a \"search view\" route that allows the user to select one of the suggested completions for a search query.","fields":[{"name":"isFullScreen","type":"bool?","desc":"Whether the search view grows to fill the entire screen when the [SearchAnchor] is tapped."},{"name":"searchController","type":"SearchController?","desc":"An optional controller that allows opening and closing of the search view from other widgets."},{"name":"viewBuilder","type":"ViewBuilder?","desc":"Optional callback to obtain a widget to lay out the suggestion list of the search view."},{"name":"viewLeading","type":"Widget?","desc":"An optional widget to display before the text input field when the search view is open."},{"name":"viewTrailing","type":"Iterable?","desc":"An optional widget list to display after the text input field when the search view is open."},{"name":"viewHintText","type":"String?","desc":"Text that is displayed when the search bar's input field is empty."},{"name":"viewBackgroundColor","type":"Color?","desc":"The search view's background fill color."},{"name":"viewElevation","type":"double?","desc":"The elevation of the search view's [Material]."},{"name":"viewSurfaceTintColor","type":"Color?","desc":"The surface tint color of the search view's [Material]."},{"name":"viewSide","type":"BorderSide?","desc":"The color and weight of the search view's outline."},{"name":"viewShape","type":"OutlinedBorder?","desc":"The shape of the search view's underlying [Material]."},{"name":"viewBarPadding","type":"EdgeInsetsGeometry?","desc":"The padding to use for the search view's search bar."},{"name":"headerHeight","type":"double?","desc":"The height of the search field on the search view."},{"name":"headerTextStyle","type":"TextStyle?","desc":"The style to use for the text being edited on the search view."},{"name":"headerHintStyle","type":"TextStyle?","desc":"The style to use for the [viewHintText] on the search view."},{"name":"dividerColor","type":"Color?","desc":"The color of the divider on the search view."},{"name":"viewConstraints","type":"BoxConstraints?","desc":"Optional size constraints for the search view."},{"name":"viewPadding","type":"EdgeInsetsGeometry?","desc":"The padding to use for the search view."},{"name":"shrinkWrap","type":"bool?","desc":"Whether the search view should shrink-wrap its contents."},{"name":"textCapitalization","type":"TextCapitalization?","desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"viewOnChanged","type":"ValueChanged?","desc":"Called each time the user modifies the search view's text field."},{"name":"viewOnSubmitted","type":"ValueChanged?","desc":"Called when the user indicates that they are done editing the text in the text field of a search view. Typically this is called when the user presses the enter key."},{"name":"viewOnClose","type":"VoidCallback?","desc":"Called when the search view is closed."},{"name":"viewOnOpen","type":"VoidCallback?","desc":"Called when the search view is opened."},{"name":"builder","type":"SearchAnchorChildBuilder","required":true,"desc":"Called to create a widget which can open a search view route when it is tapped."},{"name":"suggestionsBuilder","type":"SuggestionsBuilder","required":true,"desc":"Called to get the suggestion list for the search view."},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"},{"name":"keyboardType","type":"TextInputType?","desc":"The type of action button to use for the keyboard."},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not this widget is currently interactive."}],"id":497,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_zh-CN.json deleted file mode 100644 index de191b4a5..000000000 --- a/modules/widget_system/widgets/doc/widgets/SearchAnchor/SearchAnchor_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SearchAnchor","path":"/src/material/search_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"管理搜索视图路由,允许用户为搜索查询选择建议的完成项之一。","fields":[{"name":"isFullScreen","type":"bool?","desc":"点击 [SearchAnchor] 时搜索视图是否增长以填充整个屏幕。"},{"name":"searchController","type":"SearchController?","desc":"允许从其他小部件打开和关闭搜索视图的可选控制器。"},{"name":"viewBuilder","type":"ViewBuilder?","desc":"获取小部件以布局搜索视图建议列表的可选回调。"},{"name":"viewLeading","type":"Widget?","desc":"搜索视图打开时在文本输入字段之前显示的可选小部件。"},{"name":"viewTrailing","type":"Iterable?","desc":"搜索视图打开时在文本输入字段之后显示的可选小部件列表。"},{"name":"viewHintText","type":"String?","desc":"搜索栏输入字段为空时显示的文本。"},{"name":"viewBackgroundColor","type":"Color?","desc":"搜索视图的背景填充颜色。"},{"name":"viewElevation","type":"double?","desc":"搜索视图的 [Material] 的高度。"},{"name":"viewSurfaceTintColor","type":"Color?","desc":"搜索视图的 [Material] 的表面色调颜色。"},{"name":"viewSide","type":"BorderSide?","desc":"搜索视图轮廓的颜色和权重。"},{"name":"viewShape","type":"OutlinedBorder?","desc":"搜索视图底层 [Material] 的形状。"},{"name":"viewBarPadding","type":"EdgeInsetsGeometry?","desc":"用于搜索视图搜索栏的内边距。"},{"name":"headerHeight","type":"double?","desc":"搜索视图上搜索字段的高度。"},{"name":"headerTextStyle","type":"TextStyle?","desc":"用于搜索视图上正在编辑的文本的样式。"},{"name":"headerHintStyle","type":"TextStyle?","desc":"用于搜索视图上 [viewHintText] 的样式。"},{"name":"dividerColor","type":"Color?","desc":"搜索视图上分隔符的颜色。"},{"name":"viewConstraints","type":"BoxConstraints?","desc":"搜索视图的可选大小约束。"},{"name":"viewPadding","type":"EdgeInsetsGeometry?","desc":"用于搜索视图的内边距。"},{"name":"shrinkWrap","type":"bool?","desc":"搜索视图是否应收缩包装其内容。"},{"name":"textCapitalization","type":"TextCapitalization?","desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"viewOnChanged","type":"ValueChanged?","desc":"每次用户修改搜索视图的文本字段时调用。"},{"name":"viewOnSubmitted","type":"ValueChanged?","desc":"当用户指示他们已完成编辑搜索视图文本字段中的文本时调用。通常在用户按下回车键时调用。"},{"name":"viewOnClose","type":"VoidCallback?","desc":"搜索视图关闭时调用。"},{"name":"viewOnOpen","type":"VoidCallback?","desc":"搜索视图打开时调用。"},{"name":"builder","type":"SearchAnchorChildBuilder","required":true,"desc":"调用以创建点击时可以打开搜索视图路由的小部件。"},{"name":"suggestionsBuilder","type":"SuggestionsBuilder","required":true,"desc":"调用以获取搜索视图的建议列表。"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"},{"name":"keyboardType","type":"TextInputType?","desc":"用于键盘的操作按钮类型。"},{"name":"enabled","type":"bool","required":true,"desc":"此小部件当前是否可交互。"}],"id":497,"localName":"SearchAnchor","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_en-US.json b/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_en-US.json deleted file mode 100644 index 2b66bd066..000000000 --- a/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SearchBar","path":"/src/material/search_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design search bar.","fields":[{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited in the search bar's text field."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"hintText","type":"String?","desc":"Text that suggests what sort of input the field accepts."},{"name":"leading","type":"Widget?","desc":"A widget to display before the text input field."},{"name":"trailing","type":"Iterable?","desc":"A list of Widgets to display in a row after the text field."},{"name":"onTap","type":"GestureTapCallback?","desc":"Called when the user taps this search bar."},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"Called when the user taps outside the search bar."},{"name":"onChanged","type":"ValueChanged?","desc":"Invoked upon user input."},{"name":"onSubmitted","type":"ValueChanged?","desc":"Called when the user indicates that they are done editing the text in the field."},{"name":"constraints","type":"BoxConstraints?","desc":"Optional size constraints for the search bar."},{"name":"elevation","type":"MaterialStateProperty?","desc":"The elevation of the search bar's [Material]."},{"name":"backgroundColor","type":"MaterialStateProperty?","desc":"The search bar's background fill color."},{"name":"shadowColor","type":"MaterialStateProperty?","desc":"The shadow color of the search bar's [Material]."},{"name":"surfaceTintColor","type":"MaterialStateProperty?","desc":"The surface tint color of the search bar's [Material]."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The highlight color that's typically used to indicate that the search bar is focused, hovered, or pressed."},{"name":"side","type":"MaterialStateProperty?","desc":"The color and weight of the search bar's outline."},{"name":"shape","type":"MaterialStateProperty?","desc":"The shape of the search bar's underlying [Material]."},{"name":"padding","type":"MaterialStateProperty?","desc":"The padding between the search bar's boundary and its contents."},{"name":"textStyle","type":"MaterialStateProperty?","desc":"The style to use for the text being edited."},{"name":"hintStyle","type":"MaterialStateProperty?","desc":"The style to use for the [hintText]."},{"name":"textCapitalization","type":"TextCapitalization?","desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"enabled","type":"bool","required":true,"desc":"Whether or not this widget is currently interactive."},{"name":"autoFocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"},{"name":"keyboardType","type":"TextInputType?","desc":"The type of action button to use for the keyboard."},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"}],"id":498,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_zh-CN.json deleted file mode 100644 index 34163d555..000000000 --- a/modules/widget_system/widgets/doc/widgets/SearchBar/SearchBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SearchBar","path":"/src/material/search_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 搜索栏。","fields":[{"name":"controller","type":"TextEditingController?","desc":"控制搜索栏文本字段中正在编辑的文本。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"hintText","type":"String?","desc":"建议字段接受何种输入的文本。"},{"name":"leading","type":"Widget?","desc":"在文本输入字段之前显示的小部件。"},{"name":"trailing","type":"Iterable?","desc":"在文本字段之后一行显示的小部件列表。"},{"name":"onTap","type":"GestureTapCallback?","desc":"用户点击此搜索栏时调用。"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"用户点击搜索栏外部时调用。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户输入时调用。"},{"name":"onSubmitted","type":"ValueChanged?","desc":"当用户指示他们已完成编辑字段中的文本时调用。"},{"name":"constraints","type":"BoxConstraints?","desc":"搜索栏的可选大小约束。"},{"name":"elevation","type":"MaterialStateProperty?","desc":"搜索栏的 [Material] 的高度。"},{"name":"backgroundColor","type":"MaterialStateProperty?","desc":"搜索栏的背景填充颜色。"},{"name":"shadowColor","type":"MaterialStateProperty?","desc":"搜索栏的 [Material] 的阴影颜色。"},{"name":"surfaceTintColor","type":"MaterialStateProperty?","desc":"搜索栏的 [Material] 的表面色调颜色。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"通常用于指示搜索栏被聚焦、悬停或按下的高亮颜色。"},{"name":"side","type":"MaterialStateProperty?","desc":"搜索栏轮廓的颜色和权重。"},{"name":"shape","type":"MaterialStateProperty?","desc":"搜索栏底层 [Material] 的形状。"},{"name":"padding","type":"MaterialStateProperty?","desc":"搜索栏边界与其内容之间的内边距。"},{"name":"textStyle","type":"MaterialStateProperty?","desc":"用于正在编辑的文本的样式。"},{"name":"hintStyle","type":"MaterialStateProperty?","desc":"用于 [hintText] 的样式。"},{"name":"textCapitalization","type":"TextCapitalization?","desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"enabled","type":"bool","required":true,"desc":"此小部件当前是否可交互。"},{"name":"autoFocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@macro flutter.widgets.TextField.textInputAction}"},{"name":"keyboardType","type":"TextInputType?","desc":"用于键盘的操作按钮类型。"},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"}],"id":498,"localName":"SearchBar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_en-US.json deleted file mode 100644 index f592ac1e4..000000000 --- a/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SearchBarTheme","path":"/src/material/search_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a search bar theme to descendant [SearchBar] widgets.","fields":[{"name":"data","type":"SearchBarThemeData","required":true,"desc":"The properties used for all descendant [SearchBar] widgets."}],"id":499,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_zh-CN.json deleted file mode 100644 index 2d252d98f..000000000 --- a/modules/widget_system/widgets/doc/widgets/SearchBarTheme/SearchBarTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SearchBarTheme","path":"/src/material/search_bar_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将搜索栏主题应用于后代 [SearchBar] 小部件。","fields":[{"name":"data","type":"SearchBarThemeData","required":true,"desc":"用于所有后代 [SearchBar] 小部件的属性。"}],"id":499,"localName":"SearchBarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_en-US.json deleted file mode 100644 index c38ffbc8e..000000000 --- a/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SearchViewTheme","path":"/src/material/search_view_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration in this widget's descendants for search view created by the [SearchAnchor] widget.","fields":[{"name":"data","type":"SearchViewThemeData","required":true,"desc":"The properties used for all descendant [SearchAnchor] widgets."}],"id":500,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_zh-CN.json deleted file mode 100644 index 8ef038a3a..000000000 --- a/modules/widget_system/widgets/doc/widgets/SearchViewTheme/SearchViewTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SearchViewTheme","path":"/src/material/search_view_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件后代中由 [SearchAnchor] 小部件创建的搜索视图定义配置的继承小部件。","fields":[{"name":"data","type":"SearchViewThemeData","required":true,"desc":"用于所有后代 [SearchAnchor] 小部件的属性。"}],"id":500,"localName":"SearchViewTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_en-US.json b/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_en-US.json deleted file mode 100644 index 35ccc7b74..000000000 --- a/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SegmentedButton","path":"/src/material/segmented_button.dart","parents":["StatefulWidget","Widget"],"desc":" A Material button that allows the user to select from limited set of options.","fields":[{"name":"segments","type":"List>","required":true,"desc":"Descriptions of the segments in the button."},{"name":"direction","type":"Axis","required":true,"desc":"The orientation of the button's [segments]."},{"name":"selected","type":"Set","required":true,"desc":"The set of [ButtonSegment.value]s that indicate which [segments] are selected."},{"name":"onSelectionChanged","type":"void Function(Set)?","desc":"The function that is called when the selection changes."},{"name":"multiSelectionEnabled","type":"bool","required":true,"desc":"Determines if multiple segments can be selected at one time."},{"name":"emptySelectionAllowed","type":"bool","required":true,"desc":"Determines if having no selected segments is allowed."},{"name":"expandedInsets","type":"EdgeInsets?","desc":"Determines the segmented button's size and padding based on [expandedInsets]."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"showSelectedIcon","type":"bool","required":true,"desc":"Determines if the [selectedIcon] (usually an icon using [Icons.check]) is displayed on the selected segments."},{"name":"selectedIcon","type":"Widget?","desc":"An icon that is used to indicate a segment is selected."}],"id":501,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_zh-CN.json deleted file mode 100644 index d36006ea3..000000000 --- a/modules/widget_system/widgets/doc/widgets/SegmentedButton/SegmentedButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SegmentedButton","path":"/src/material/segmented_button.dart","parents":["StatefulWidget","Widget"],"desc":"允许用户从有限选项集中选择的 Material 按钮。","fields":[{"name":"segments","type":"List>","required":true,"desc":"按钮中段的描述。"},{"name":"direction","type":"Axis","required":true,"desc":"按钮的 [segments] 的方向。"},{"name":"selected","type":"Set","required":true,"desc":"指示哪些 [segments] 被选中的 [ButtonSegment.value] 集合。"},{"name":"onSelectionChanged","type":"void Function(Set)?","desc":"选择更改时调用的函数。"},{"name":"multiSelectionEnabled","type":"bool","required":true,"desc":"确定是否可以同时选择多个段。"},{"name":"emptySelectionAllowed","type":"bool","required":true,"desc":"确定是否允许没有选中的段。"},{"name":"expandedInsets","type":"EdgeInsets?","desc":"根据 [expandedInsets] 确定分段按钮的大小和内边距。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"showSelectedIcon","type":"bool","required":true,"desc":"确定是否在选中的段上显示 [selectedIcon](通常是使用 [Icons.check] 的图标)。"},{"name":"selectedIcon","type":"Widget?","desc":"用于指示段被选中的图标。"}],"id":501,"localName":"SegmentedButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_en-US.json deleted file mode 100644 index 37d2c0fd1..000000000 --- a/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SegmentedButtonTheme","path":"/src/material/segmented_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the visual properties for [SegmentedButton]s in this widget's subtree.","fields":[{"name":"data","type":"SegmentedButtonThemeData","required":true,"desc":"Specifies the visual properties used by descendant [SegmentedButton] widgets."}],"id":502,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_zh-CN.json deleted file mode 100644 index e66744982..000000000 --- a/modules/widget_system/widgets/doc/widgets/SegmentedButtonTheme/SegmentedButtonTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SegmentedButtonTheme","path":"/src/material/segmented_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [SegmentedButton] 定义视觉属性的继承小部件。","fields":[{"name":"data","type":"SegmentedButtonThemeData","required":true,"desc":"指定后代 [SegmentedButton] 小部件使用的视觉属性。"}],"id":502,"localName":"SegmentedButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_en-US.json deleted file mode 100644 index 1a14266b9..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectableRegion","path":"/src/widgets/selectable_region.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that introduces an area for user selections.","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration","required":true,"desc":"The configuration for the magnifier used with selections in this region."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"child","type":"Widget","required":true,"desc":"The child widget this selection area applies to."},{"name":"contextMenuBuilder","type":"SelectableRegionContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"selectionControls","type":"TextSelectionControls","required":true,"desc":"The delegate to build the selection handles and toolbar for mobile devices."},{"name":"onSelectionChanged","type":"ValueChanged?","desc":"Called when the selected content changes."}],"id":503,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_zh-CN.json deleted file mode 100644 index cb07c21af..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectableRegion/SelectableRegion_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectableRegion","path":"/src/widgets/selectable_region.dart","parents":["StatefulWidget","Widget"],"desc":"引入用户选择区域的小部件。","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration","required":true,"desc":"此区域中选择使用的放大镜配置。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"child","type":"Widget","required":true,"desc":"此选择区域应用的子小部件。"},{"name":"contextMenuBuilder","type":"SelectableRegionContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"selectionControls","type":"TextSelectionControls","required":true,"desc":"为移动设备构建选择手柄和工具栏的委托。"},{"name":"onSelectionChanged","type":"ValueChanged?","desc":"选中内容更改时调用。"}],"id":503,"localName":"SelectableRegion","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_en-US.json deleted file mode 100644 index 936b3c270..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectableRegionSelectionStatusScope","path":"/src/widgets/selectable_region.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Notifies its listeners when the selection under a [SelectableRegion] or [SelectionArea] is being changed or finalized.","fields":[{"name":"selectionStatusNotifier","type":"ValueListenable","required":true,"desc":"Tracks updates to the [SelectableRegionSelectionStatus] of the owning [SelectableRegion]."}],"id":504,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_zh-CN.json deleted file mode 100644 index d7cabaafd..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectableRegionSelectionStatusScope/SelectableRegionSelectionStatusScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectableRegionSelectionStatusScope","path":"/src/widgets/selectable_region.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"当 [SelectableRegion] 或 [SelectionArea] 下的选择正在更改或完成时通知其监听器。","fields":[{"name":"selectionStatusNotifier","type":"ValueListenable","required":true,"desc":"跟踪拥有 [SelectableRegion] 的 [SelectableRegionSelectionStatus] 的更新。"}],"id":504,"localName":"SelectableRegionSelectionStatusScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_en-US.json deleted file mode 100644 index 0614bdbc7..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectableText","path":"/src/material/selectable_text.dart","parents":["StatefulWidget","Widget"],"desc":" A run of selectable text with a single style.","fields":[{"name":"data","type":"String?","desc":"The text to display."},{"name":"textSpan","type":"TextSpan?","desc":"The text to display as a [TextSpan]."},{"name":"focusNode","type":"FocusNode?","desc":"Defines the focus for this widget."},{"name":"style","type":"TextStyle?","desc":"The style to use for the text."},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign?","desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"textScaleFactor","type":"double?","desc":"{@macro flutter.widgets.editableText.textScaleFactor}"},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines}"},{"name":"showCursor","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius?","desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorColor","type":"Color?","desc":"The color of the cursor."},{"name":"selectionColor","type":"Color?","desc":"The color to use when painting the selection."},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"Controls how tall the selection highlight boxes are computed to be."},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"Controls how wide the selection highlight boxes are computed to be."},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"Configuration of toolbar options."},{"name":"onTap","type":"GestureTapCallback?","desc":"Called when the user taps on this selectable text."},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.editableText.scrollBehavior}"},{"name":"semanticsLabel","type":"String?","desc":"{@macro flutter.widgets.Text.semanticsLabel}"},{"name":"textHeightBehavior","type":"TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"textWidthBasis","type":"TextWidthBasis?","desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"onSelectionChanged","type":"SelectionChangedCallback?","desc":"{@macro flutter.widgets.editableText.onSelectionChanged}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"The configuration for the magnifier used when the text is selected."}],"id":53,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SelectableText","desc":["【Parameter】 : Display text 【String】","【style】 : Text style 【TextStyle】","【cursorRadius】 : Cursor radius 【Radius】","【cursorColor】 : Cursor color 【Color】","【cursorWidth】 : Cursor width 【double】","【showCursor】 : Whether to show the cursor 【bool】","【autofocus】 : Auto focus 【bool】"]},{"file":"node2_align.dart","name":"Alignment Properties of SelectableText","desc":["【textAlign】 : Alignment method*6 【textAlign】","【textDirection】 : Text direction*2 【TextDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_zh-CN.json deleted file mode 100644 index 26d8b0186..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectableText/SelectableText_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectableText","path":"/src/material/selectable_text.dart","parents":["StatefulWidget","Widget"],"desc":"具有单一样式的可选择文本运行。","fields":[{"name":"data","type":"String?","desc":"要显示的文本。"},{"name":"textSpan","type":"TextSpan?","desc":"要显示为 [TextSpan] 的文本。"},{"name":"focusNode","type":"FocusNode?","desc":"定义此小部件的焦点。"},{"name":"style","type":"TextStyle?","desc":"用于文本的样式。"},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign?","desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"textScaleFactor","type":"double?","desc":"{@macro flutter.widgets.editableText.textScaleFactor}"},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines}"},{"name":"showCursor","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius?","desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorColor","type":"Color?","desc":"光标的颜色。"},{"name":"selectionColor","type":"Color?","desc":"绘制选择时使用的颜色。"},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"控制选择高亮框的计算高度。"},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"控制选择高亮框的计算宽度。"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"工具栏选项的配置。"},{"name":"onTap","type":"GestureTapCallback?","desc":"用户点击此可选择文本时调用。"},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"scrollBehavior","type":"ScrollBehavior?","desc":"{@macro flutter.widgets.editableText.scrollBehavior}"},{"name":"semanticsLabel","type":"String?","desc":"{@macro flutter.widgets.Text.semanticsLabel}"},{"name":"textHeightBehavior","type":"TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"textWidthBasis","type":"TextWidthBasis?","desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"onSelectionChanged","type":"SelectionChangedCallback?","desc":"{@macro flutter.widgets.editableText.onSelectionChanged}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"选择文本时使用的放大镜配置。"}],"id":53,"localName":"可选择文字","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SelectableText基本使用","desc":["【入参】 : 显示文字 【String】","【style】 : 文字样式 【TextStyle】","【cursorRadius】 : 光标半径 【Radius】","【cursorColor】 : 光标颜色 【Color】","【cursorWidth】 : 光标宽度 【double】","【showCursor】 : 是否显示光标 【bool】","【autofocus】 : 自动聚焦 【bool】"]},{"file":"node2_align.dart","name":"SelectableText对齐属性","desc":["【textAlign】 : 对齐方式*6 【textAlign】","【textDirection】 : 文字方向*2 【TextDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_en-US.json deleted file mode 100644 index 75b2a60d5..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectionArea","path":"/src/material/selection_area.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that introduces an area for user selections with adaptive selection controls.","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"The configuration for the magnifier in the selection region."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"The delegate to build the selection handles and toolbar."},{"name":"contextMenuBuilder","type":"SelectableRegionContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"onSelectionChanged","type":"ValueChanged?","desc":"Called when the selected content changes."},{"name":"child","type":"Widget","required":true,"desc":"The child widget this selection area applies to."}],"id":505,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_zh-CN.json deleted file mode 100644 index de3d5080c..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectionArea/SelectionArea_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectionArea","path":"/src/material/selection_area.dart","parents":["StatefulWidget","Widget"],"desc":"引入具有自适应选择控件的用户选择区域的小部件。","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"选择区域中放大镜的配置。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"构建选择手柄和工具栏的委托。"},{"name":"contextMenuBuilder","type":"SelectableRegionContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"onSelectionChanged","type":"ValueChanged?","desc":"选中内容更改时调用。"},{"name":"child","type":"Widget","required":true,"desc":"此选择区域应用的子小部件。"}],"id":505,"localName":"SelectionArea","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_en-US.json deleted file mode 100644 index 09d801e6d..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectionContainer","path":"/src/widgets/selection_container.dart","parents":["StatefulWidget","Widget"],"desc":" A container that handles [SelectionEvent]s for the [Selectable]s in the subtree.","fields":[{"name":"registrar","type":"SelectionRegistrar?","desc":"The [SelectionRegistrar] this container is registered to."},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"},{"name":"delegate","type":"SelectionContainerDelegate?","desc":"The delegate for [SelectionEvent]s sent to this selection container."}],"id":506,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_zh-CN.json deleted file mode 100644 index 246994a6a..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectionContainer/SelectionContainer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectionContainer","path":"/src/widgets/selection_container.dart","parents":["StatefulWidget","Widget"],"desc":"为子树中的 [Selectable] 处理 [SelectionEvent] 的容器。","fields":[{"name":"registrar","type":"SelectionRegistrar?","desc":"此容器注册到的 [SelectionRegistrar]。"},{"name":"child","type":"Widget","required":true,"desc":"{@macro flutter.widgets.ProxyWidget.child}"},{"name":"delegate","type":"SelectionContainerDelegate?","desc":"发送到此选择容器的 [SelectionEvent] 的委托。"}],"id":506,"localName":"SelectionContainer","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_en-US.json deleted file mode 100644 index 3d602c828..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectionListener","path":"/src/widgets/selectable_region.dart","parents":["StatefulWidget","Widget"],"desc":" A [SelectionContainer] that allows the user to access the [SelectionDetails] and listen to selection changes for the child subtree it wraps under a [SelectionArea] or [SelectableRegion].","fields":[{"name":"selectionNotifier","type":"SelectionListenerNotifier","required":true,"desc":"Notifies listeners when the selection has changed."},{"name":"child","type":"Widget","required":true,"desc":"The child widget this selection listener applies to."}],"id":507,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_zh-CN.json deleted file mode 100644 index 9f322209c..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectionListener/SelectionListener_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectionListener","path":"/src/widgets/selectable_region.dart","parents":["StatefulWidget","Widget"],"desc":"允许用户访问 [SelectionDetails] 并监听在 [SelectionArea] 或 [SelectableRegion] 下包装的子子树的选择更改的 [SelectionContainer]。","fields":[{"name":"selectionNotifier","type":"SelectionListenerNotifier","required":true,"desc":"选择更改时通知监听器。"},{"name":"child","type":"Widget","required":true,"desc":"此选择监听器应用的子小部件。"}],"id":507,"localName":"SelectionListener","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_en-US.json b/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_en-US.json deleted file mode 100644 index 44a4a9c3e..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectionRegistrarScope","path":"/src/widgets/selection_container.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget to host a [SelectionRegistrar] for the subtree.","fields":[{"name":"registrar","type":"SelectionRegistrar?","desc":"The [SelectionRegistrar] hosted by this widget."}],"id":508,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_zh-CN.json deleted file mode 100644 index bf79d6a95..000000000 --- a/modules/widget_system/widgets/doc/widgets/SelectionRegistrarScope/SelectionRegistrarScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SelectionRegistrarScope","path":"/src/widgets/selection_container.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"为子树托管 [SelectionRegistrar] 的继承小部件。","fields":[{"name":"registrar","type":"SelectionRegistrar?","desc":"此小部件托管的 [SelectionRegistrar]。"}],"id":508,"localName":"SelectionRegistrarScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_en-US.json b/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_en-US.json deleted file mode 100644 index 7e3d38d62..000000000 --- a/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Semantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that annotates the widget tree with a description of the meaning of the widgets.","fields":[{"name":"properties","type":"SemanticsProperties","required":true,"desc":"Contains properties used by assistive technologies to make the application more accessible."},{"name":"container","type":"bool","required":true,"desc":"If [container] is true, this widget will introduce a new node in the semantics tree. Otherwise, the semantics will be merged with the semantics of any ancestors (if the ancestor allows that)."},{"name":"explicitChildNodes","type":"bool","required":true,"desc":"Whether descendants of this widget are allowed to add semantic information to the [SemanticsNode] annotated by this widget."},{"name":"excludeSemantics","type":"bool","required":true,"desc":"Whether to replace all child semantics with this node."},{"name":"blockUserActions","type":"bool","required":true,"desc":"Whether to block user interactions for the rendering subtree."}],"id":509,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_zh-CN.json deleted file mode 100644 index 48f87a588..000000000 --- a/modules/widget_system/widgets/doc/widgets/Semantics/Semantics_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Semantics","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"用小部件含义描述注释小部件树的小部件。","fields":[{"name":"properties","type":"SemanticsProperties","required":true,"desc":"包含辅助技术用于使应用程序更易于访问的属性。"},{"name":"container","type":"bool","required":true,"desc":"如果 [container] 为 true,此小部件将在语义树中引入新节点。否则,语义将与任何祖先的语义合并(如果祖先允许)。"},{"name":"explicitChildNodes","type":"bool","required":true,"desc":"此小部件的后代是否允许向此小部件注释的 [SemanticsNode] 添加语义信息。"},{"name":"excludeSemantics","type":"bool","required":true,"desc":"是否用此节点替换所有子语义。"},{"name":"blockUserActions","type":"bool","required":true,"desc":"是否阻止渲染子树的用户交互。"}],"id":509,"localName":"Semantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_en-US.json b/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_en-US.json deleted file mode 100644 index 180d13849..000000000 --- a/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SemanticsDebugger","path":"/src/widgets/semantics_debugger.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that visualizes the semantics for the child.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"labelStyle","type":"TextStyle","required":true,"desc":"The [TextStyle] to use when rendering semantics labels."}],"id":510,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_zh-CN.json deleted file mode 100644 index 562fb8b81..000000000 --- a/modules/widget_system/widgets/doc/widgets/SemanticsDebugger/SemanticsDebugger_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SemanticsDebugger","path":"/src/widgets/semantics_debugger.dart","parents":["StatefulWidget","Widget"],"desc":"可视化子项语义的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"labelStyle","type":"TextStyle","required":true,"desc":"渲染语义标签时使用的 [TextStyle]。"}],"id":510,"localName":"SemanticsDebugger","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_en-US.json b/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_en-US.json deleted file mode 100644 index ac8b1a602..000000000 --- a/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ShaderMask","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that applies a mask generated by a [Shader] to its child.","fields":[{"name":"shaderCallback","type":"ShaderCallback","required":true,"desc":"Called to create the [dart:ui.Shader] that generates the mask."},{"name":"blendMode","type":"BlendMode","required":true,"desc":"The [BlendMode] to use when applying the shader to the child."}],"id":277,"lever":4,"family":2,"linkIds":[88,38],"nodes":[{"file":"node1_radial.dart","name":"Radial Gradient Shading","desc":["【child】: Child component 【Widget】","【shaderCallback】: Shader callback 【ShaderCallback】","【blendMode】: Blending mode 【BlendMode】"," Create a radial gradient shader through RadialGradient#createShader."]},{"file":"node2_linear.dart","name":"Linear Gradient Shading","desc":["Create a linear gradient shader through LinearGradient#createShader","For more information on shaders, see 【Drawing Album】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_zh-CN.json deleted file mode 100644 index 8e52b4f5f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ShaderMask/ShaderMask_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ShaderMask","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将由 [Shader] 生成的蒙版应用于其子项的小部件。","fields":[{"name":"shaderCallback","type":"ShaderCallback","required":true,"desc":"调用以创建生成蒙版的 [dart:ui.Shader]。"},{"name":"blendMode","type":"BlendMode","required":true,"desc":"将着色器应用于子项时使用的 [BlendMode]。"}],"id":277,"localName":"着色器遮罩","lever":4,"family":2,"linkIds":[88,38],"nodes":[{"file":"node1_radial.dart","name":"径向渐变着色","desc":["【child】 : 孩子组件 【Widget】","【shaderCallback】 : 着色器回调 【ShaderCallback】","【blendMode】 : 混色模式 【BlendMode】"," 通过RadialGradient#createShader创建径向渐变着色器。"]},{"file":"node2_linear.dart","name":"线性渐变着色","desc":["通过LinearGradient#createShader创建线性渐变着色器","着色器相关知识详见【绘制专辑】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_en-US.json b/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_en-US.json deleted file mode 100644 index b3bf7fe4b..000000000 --- a/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SharedAppData","path":"/src/widgets/shared_app_data.dart","parents":["StatefulWidget","Widget"],"desc":" Enables sharing key/value data with its `child` and all of the child's descendants.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":511,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_zh-CN.json deleted file mode 100644 index ba17e0dfe..000000000 --- a/modules/widget_system/widgets/doc/widgets/SharedAppData/SharedAppData_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SharedAppData","path":"/src/widgets/shared_app_data.dart","parents":["StatefulWidget","Widget"],"desc":"允许与其 `child` 及所有子项的后代共享键/值数据。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":511,"localName":"SharedAppData","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_en-US.json b/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_en-US.json deleted file mode 100644 index 811d84c38..000000000 --- a/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ShortcutRegistrar","path":"/src/widgets/shortcuts.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that holds a [ShortcutRegistry] which allows descendants to add, remove, or replace shortcuts.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":512,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_zh-CN.json deleted file mode 100644 index 75f380f3d..000000000 --- a/modules/widget_system/widgets/doc/widgets/ShortcutRegistrar/ShortcutRegistrar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ShortcutRegistrar","path":"/src/widgets/shortcuts.dart","parents":["StatefulWidget","Widget"],"desc":"持有 [ShortcutRegistry] 的小部件,允许后代添加、删除或替换快捷方式。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":512,"localName":"ShortcutRegistrar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_en-US.json b/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_en-US.json deleted file mode 100644 index 803984103..000000000 --- a/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Shortcuts","path":"/src/widgets/shortcuts.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that creates key bindings to specific actions for its descendants.","fields":[{"name":"manager","type":"ShortcutManager?","desc":"The [ShortcutManager] that will manage the mapping between key combinations and [Action]s."},{"name":"child","type":"Widget","required":true,"desc":"The child widget for this [Shortcuts] widget."},{"name":"debugLabel","type":"String?","desc":"The debug label that is printed for this node when logged."},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"}],"id":513,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_zh-CN.json deleted file mode 100644 index fffb24ff1..000000000 --- a/modules/widget_system/widgets/doc/widgets/Shortcuts/Shortcuts_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Shortcuts","path":"/src/widgets/shortcuts.dart","parents":["StatefulWidget","Widget"],"desc":"为其后代创建特定操作的键绑定的小部件。","fields":[{"name":"manager","type":"ShortcutManager?","desc":"将管理键组合和 [Action] 之间映射的 [ShortcutManager]。"},{"name":"child","type":"Widget","required":true,"desc":"此 [Shortcuts] 小部件的子小部件。"},{"name":"debugLabel","type":"String?","desc":"记录时为此节点打印的调试标签。"},{"name":"includeSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.includeSemantics}"}],"id":513,"localName":"Shortcuts","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_en-US.json b/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_en-US.json deleted file mode 100644 index dce50e11c..000000000 --- a/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ShrinkWrappingViewport","path":"/src/widgets/viewport.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that is bigger on the inside and shrink wraps its children in the main axis.","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"The direction in which the [offset]'s [ViewportOffset.pixels] increases."},{"name":"crossAxisDirection","type":"AxisDirection?","desc":"The direction in which child should be laid out in the cross axis."},{"name":"offset","type":"ViewportOffset","required":true,"desc":"Which part of the content inside the viewport should be visible."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":343,"lever":1,"family":3,"linkIds":[349,162,163],"nodes":[{"file":"node1_base.dart","name":"Introduction to NestedScrollViewViewport","desc":["【offset】: *offset 【ViewportOffset】","【axisDirection】: Axis direction 【AxisDirection】","【crossAxisDirection】: Cross axis direction 【AxisDirection】","【slivers】: Child components 【List】","【clipBehavior】: Clip behavior 【Clip】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_zh-CN.json deleted file mode 100644 index c4cff1b89..000000000 --- a/modules/widget_system/widgets/doc/widgets/ShrinkWrappingViewport/ShrinkWrappingViewport_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ShrinkWrappingViewport","path":"/src/widgets/viewport.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"内部更大且在主轴上收缩包装其子项的小部件。","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"[offset] 的 [ViewportOffset.pixels] 增加的方向。"},{"name":"crossAxisDirection","type":"AxisDirection?","desc":"子项应在交叉轴上布局的方向。"},{"name":"offset","type":"ViewportOffset","required":true,"desc":"视口内容的哪一部分应该可见。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":343,"localName":"收缩包围视图","lever":1,"family":3,"linkIds":[349,162,163],"nodes":[{"file":"node1_base.dart","name":"NestedScrollViewViewport 介绍","desc":["【offset】 : *偏移 【ViewportOffset】","【axisDirection】 : 轴向 【AxisDirection】","【crossAxisDirection】 : 交叉轴向 【AxisDirection】","【slivers】 : 子组件 【List】","【clipBehavior】 : 裁剪行为 【Clip】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_en-US.json deleted file mode 100644 index 6ae6d1991..000000000 --- a/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SimpleDialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":" A simple Material Design dialog.","fields":[{"name":"title","type":"Widget?","desc":"The (optional) title of the dialog is displayed in a large font at the top of the dialog."},{"name":"titlePadding","type":"EdgeInsetsGeometry","required":true,"desc":"Padding around the title."},{"name":"titleTextStyle","type":"TextStyle?","desc":"Style for the text in the [title] of this [SimpleDialog]."},{"name":"children","type":"List?","desc":"The (optional) content of the dialog is displayed in a [SingleChildScrollView] underneath the title."},{"name":"contentPadding","type":"EdgeInsetsGeometry","required":true,"desc":"Padding around the content."},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.dialog.backgroundColor}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.dialog.elevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.dialog.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.dialog.surfaceTintColor}"},{"name":"semanticLabel","type":"String?","desc":"The semantic label of the dialog used by accessibility frameworks to announce screen transitions when the dialog is opened and closed."},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@macro flutter.material.dialog.insetPadding}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.dialog.clipBehavior}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.dialog.shape}"},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@macro flutter.material.dialog.shape}"}],"id":128,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SimpleDialog","desc":["【title】 : Top component 【Widget】","【children】 : List of child components 【List】","【titlePadding】 : Top padding 【EdgeInsetsGeometry】","【contentPadding】 : Content padding 【EdgeInsetsGeometry】","【backgroundColor】 : Background color 【Color】","【elevation】 : Shadow depth 【double】","【shape】 : Shape 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_zh-CN.json deleted file mode 100644 index 1ac4442fc..000000000 --- a/modules/widget_system/widgets/doc/widgets/SimpleDialog/SimpleDialog_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SimpleDialog","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":"简单的 Material Design 对话框。","fields":[{"name":"title","type":"Widget?","desc":"对话框的(可选)标题以大字体显示在对话框顶部。"},{"name":"titlePadding","type":"EdgeInsetsGeometry","required":true,"desc":"标题周围的内边距。"},{"name":"titleTextStyle","type":"TextStyle?","desc":"此 [SimpleDialog] 的 [title] 中文本的样式。"},{"name":"children","type":"List?","desc":"对话框的(可选)内容显示在标题下方的 [SingleChildScrollView] 中。"},{"name":"contentPadding","type":"EdgeInsetsGeometry","required":true,"desc":"内容周围的内边距。"},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.dialog.backgroundColor}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.dialog.elevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.dialog.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.dialog.surfaceTintColor}"},{"name":"semanticLabel","type":"String?","desc":"辅助功能框架用于在打开和关闭对话框时宣布屏幕转换的对话框语义标签。"},{"name":"insetPadding","type":"EdgeInsets?","desc":"{@macro flutter.material.dialog.insetPadding}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.dialog.clipBehavior}"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.dialog.shape}"},{"name":"alignment","type":"AlignmentGeometry?","desc":"{@macro flutter.material.dialog.shape}"}],"id":128,"localName":"简单对话框","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SimpleDialog基本使用","desc":["【title】 : 顶部组件 【Widget】","【children】 : 子组件列表 【List】","【titlePadding】 : 顶部内边距 【EdgeInsetsGeometry】","【contentPadding】 : 内容内边距 【EdgeInsetsGeometry】","【backgroundColor】 : 背景色 【Color】","【elevation】 : 影深 【double】","【shape】 : 形状 【ShapeBorder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_en-US.json b/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_en-US.json deleted file mode 100644 index 144559a93..000000000 --- a/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SimpleDialogOption","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":" An option used in a [SimpleDialog].","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"The callback that is called when this option is selected."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"padding","type":"EdgeInsets?","desc":"The amount of space to surround the [child] with."}],"id":133,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SimpleDialogOption","desc":["【child】 : Child widget 【Widget】","【onPressed】 : Click event 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_zh-CN.json deleted file mode 100644 index 40072e243..000000000 --- a/modules/widget_system/widgets/doc/widgets/SimpleDialogOption/SimpleDialogOption_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SimpleDialogOption","path":"/src/material/dialog.dart","parents":["StatelessWidget","Widget"],"desc":"[SimpleDialog] 中使用的选项。","fields":[{"name":"onPressed","type":"VoidCallback?","desc":"选择此选项时调用的回调。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"padding","type":"EdgeInsets?","desc":"围绕 [child] 的空间量。"}],"id":133,"localName":"简单对话框选项","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SimpleDialogOption基本使用","desc":["【child】 : 子组件 【Widget】","【onPressed】 : 点击事件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_en-US.json deleted file mode 100644 index 23ca594d2..000000000 --- a/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SingleChildRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A superclass for [RenderObjectWidget]s that configure [RenderObject] subclasses that have a single child slot.","fields":[{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":514,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_zh-CN.json deleted file mode 100644 index 4df33a258..000000000 --- a/modules/widget_system/widgets/doc/widgets/SingleChildRenderObjectWidget/SingleChildRenderObjectWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SingleChildRenderObjectWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"配置具有单个子插槽的 [RenderObject] 子类的 [RenderObjectWidget] 的超类。","fields":[{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":514,"localName":"SingleChildRenderObjectWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_en-US.json deleted file mode 100644 index 764101189..000000000 --- a/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SingleChildScrollView","path":"/src/widgets/single_child_scroll_view.dart","parents":["StatelessWidget","Widget"],"desc":" A box in which a single widget can be scrolled.","fields":[{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"Whether the scroll view scrolls in the reading direction."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the child."},{"name":"controller","type":"ScrollController?","desc":"An object that can be used to control the position to which this scroll view is scrolled."},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"physics","type":"ScrollPhysics?","desc":"How the scroll view should respond to user input."},{"name":"child","type":"Widget?","desc":"The widget that scrolls."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"}],"id":164,"lever":5,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SingleChildScrollView","desc":["【child】: Child widget 【Widget】","【padding】: Padding 【EdgeInsetsGeometry】"]},{"file":"node2_direction.dart","name":"Scroll Direction of SingleChildScrollView","desc":["【scrollDirection】: Scroll direction 【Axis】","【reverse】: Whether to reverse 【Axis】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_zh-CN.json deleted file mode 100644 index ad4496fef..000000000 --- a/modules/widget_system/widgets/doc/widgets/SingleChildScrollView/SingleChildScrollView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SingleChildScrollView","path":"/src/widgets/single_child_scroll_view.dart","parents":["StatelessWidget","Widget"],"desc":"可以滚动单个小部件的框。","fields":[{"name":"scrollDirection","type":"Axis","required":true,"desc":"{@macro flutter.widgets.scroll_view.scrollDirection}"},{"name":"reverse","type":"bool","required":true,"desc":"滚动视图是否在阅读方向上滚动。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"插入子项的空间量。"},{"name":"controller","type":"ScrollController?","desc":"可用于控制此滚动视图滚动到的位置的对象。"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"physics","type":"ScrollPhysics?","desc":"滚动视图应如何响应用户输入。"},{"name":"child","type":"Widget?","desc":"滚动的小部件。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"}],"id":164,"localName":"单子滑动","lever":5,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SingleChildScrollView基本使用","desc":["【child】 : 子组件 【Widget】","【padding】 : 内边距 【EdgeInsetsGeometry】"]},{"file":"node2_direction.dart","name":"SingleChildScrollView滑动方向","desc":["【scrollDirection】 : 滑动方向 【Axis】","【reverse】 : 是否反向 【Axis】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_en-US.json b/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_en-US.json deleted file mode 100644 index 9977fb473..000000000 --- a/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SizeChangedLayoutNotifier","path":"/src/widgets/size_changed_layout_notifier.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that automatically dispatches a [SizeChangedLayoutNotification] when the layout dimensions of its child change.","fields":[],"id":294,"lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage","desc":["【child】 : Component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_zh-CN.json deleted file mode 100644 index 140a24049..000000000 --- a/modules/widget_system/widgets/doc/widgets/SizeChangedLayoutNotifier/SizeChangedLayoutNotifier_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SizeChangedLayoutNotifier","path":"/src/widgets/size_changed_layout_notifier.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"当其子项的布局尺寸发生变化时自动分发 [SizeChangedLayoutNotification] 的小部件。","fields":[],"id":294,"localName":"尺寸变化通告","lever":2,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"基本使用","desc":["【child】 : 组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_en-US.json deleted file mode 100644 index 5997abe05..000000000 --- a/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SizeTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animates its own size and clips and aligns its child.","fields":[{"name":"axis","type":"Axis","required":true,"desc":"[Axis.horizontal] if [sizeFactor] modifies the width, otherwise [Axis.vertical]."},{"name":"axisAlignment","type":"double","required":true,"desc":"Describes how to align the child along the axis that [sizeFactor] is modifying."},{"name":"fixedCrossAxisSizeFactor","type":"double?","desc":"The factor by which to multiply the cross axis size of the child."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":92,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SizeTransition","desc":["【child】: Child component 【Widget】","【axis】: Axis*2 【Axis】","【sizeFactor】: Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_zh-CN.json deleted file mode 100644 index 562784e39..000000000 --- a/modules/widget_system/widgets/doc/widgets/SizeTransition/SizeTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SizeTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"对其自身大小进行动画处理并裁剪和对齐其子项。","fields":[{"name":"axis","type":"Axis","required":true,"desc":"如果 [sizeFactor] 修改宽度则为 [Axis.horizontal],否则为 [Axis.vertical]。"},{"name":"axisAlignment","type":"double","required":true,"desc":"描述如何沿着 [sizeFactor] 正在修改的轴对齐子项。"},{"name":"fixedCrossAxisSizeFactor","type":"double?","desc":"乘以子项交叉轴大小的因子。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":92,"localName":"尺寸变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SizeTransition基本使用","desc":["【child】 : 孩子组件 【Widget】","【axis】 : 轴向*2 【Axis】","【sizeFactor】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_en-US.json deleted file mode 100644 index c9a79ef03..000000000 --- a/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SizedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A box with a specified size.","fields":[{"name":"width","type":"double?","desc":"If non-null, requires the child to have exactly this width."},{"name":"height","type":"double?","desc":"If non-null, requires the child to have exactly this height."}],"id":76,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SizedBox","desc":["【child】 : Child component 【Widget】","【width】 : Width 【double】","【height】 : Height 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_zh-CN.json deleted file mode 100644 index e7941d7ff..000000000 --- a/modules/widget_system/widgets/doc/widgets/SizedBox/SizedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SizedBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"具有指定大小的框。","fields":[{"name":"width","type":"double?","desc":"如果非空,要求子项具有确切的此宽度。"},{"name":"height","type":"double?","desc":"如果非空,要求子项具有确切的此高度。"}],"id":76,"localName":"定尺寸盒","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SizedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【width】 : 宽 【double】","【height】 : 高 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_en-US.json b/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_en-US.json deleted file mode 100644 index e0468096c..000000000 --- a/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SizedOverflowBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that is a specific size but passes its original constraints through to its child, which may then overflow.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the child."},{"name":"size","type":"Size","required":true,"desc":"The size this widget should attempt to be."}],"id":84,"lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SizedOverflowBox","desc":["【child】: Child component 【Widget】","【size】: Size offset 【Size】","【alignment】: Alignment method 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_zh-CN.json deleted file mode 100644 index ae9a63018..000000000 --- a/modules/widget_system/widgets/doc/widgets/SizedOverflowBox/SizedOverflowBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SizedOverflowBox","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"具有特定大小但将其原始约束传递给其子项的小部件,然后子项可能会溢出。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何对齐子项。"},{"name":"size","type":"Size","required":true,"desc":"此小部件应尝试达到的大小。"}],"id":84,"localName":"尺寸溢出盒","lever":3,"family":2,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SizedOverflowBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【size】 : 尺寸偏移 【Size】","【alignment】 : 对齐方式 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_en-US.json deleted file mode 100644 index 2d89b8a45..000000000 --- a/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SlideTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":" Animates the position of a widget relative to its normal position.","fields":[{"name":"textDirection","type":"TextDirection?","desc":"The direction to use for the x offset described by the [position]."},{"name":"transformHitTests","type":"bool","required":true,"desc":"Whether hit testing should be affected by the slide animation."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":112,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SlideTransition","desc":["【child】: Child component 【Widget】","【textDirection】: X-axis direction 【TextDirection】","【position】: Animation 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_zh-CN.json deleted file mode 100644 index 8cafd2977..000000000 --- a/modules/widget_system/widgets/doc/widgets/SlideTransition/SlideTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SlideTransition","path":"/src/widgets/transitions.dart","parents":["AnimatedWidget","StatefulWidget","Widget"],"desc":"相对于其正常位置对小部件位置进行动画处理。","fields":[{"name":"textDirection","type":"TextDirection?","desc":"用于 [position] 描述的 x 偏移的方向。"},{"name":"transformHitTests","type":"bool","required":true,"desc":"命中测试是否应受滑动动画影响。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":112,"localName":"滑动变换","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SlideTransition 基本使用","desc":["【child】 : 孩子组件 【Widget】","【textDirection】 : x轴方向 【TextDirection】","【position】 : 动画 【Animation】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Slider/Slider_en-US.json b/modules/widget_system/widgets/doc/widgets/Slider/Slider_en-US.json deleted file mode 100644 index c7986489d..000000000 --- a/modules/widget_system/widgets/doc/widgets/Slider/Slider_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Slider","path":"/src/material/slider.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design slider.","fields":[{"name":"value","type":"double","required":true,"desc":"The currently selected value for this slider."},{"name":"secondaryTrackValue","type":"double?","desc":"The secondary track value for this slider."},{"name":"onChanged","type":"ValueChanged?","desc":"Called during a drag when the user is selecting a new value for the slider by dragging."},{"name":"onChangeStart","type":"ValueChanged?","desc":"Called when the user starts selecting a new value for the slider."},{"name":"onChangeEnd","type":"ValueChanged?","desc":"Called when the user is done selecting a new value for the slider."},{"name":"min","type":"double","required":true,"desc":"The minimum value the user can select."},{"name":"max","type":"double","required":true,"desc":"The maximum value the user can select."},{"name":"divisions","type":"int?","desc":"The number of discrete divisions."},{"name":"label","type":"String?","desc":"A label to show above the slider when the slider is active and [SliderThemeData.showValueIndicator] is satisfied."},{"name":"activeColor","type":"Color?","desc":"The color to use for the portion of the slider track that is active."},{"name":"inactiveColor","type":"Color?","desc":"The color for the inactive portion of the slider track."},{"name":"secondaryActiveColor","type":"Color?","desc":"The color to use for the portion of the slider track between the thumb and the [Slider.secondaryTrackValue]."},{"name":"thumbColor","type":"Color?","desc":"The color of the thumb."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The highlight color that's typically used to indicate that the slider thumb is focused, hovered, or dragged."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.slider.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"semanticFormatterCallback","type":"SemanticFormatterCallback?","desc":"The callback used to create a semantic value from a slider value."},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"allowedInteraction","type":"SliderInteraction?","desc":"Allowed way for the user to interact with the [Slider]."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"Determines the padding around the [Slider]."},{"name":"year2023","type":"bool?","desc":"When true, the [Slider] will use the 2023 Material Design 3 appearance. Defaults to true."}],"id":42,"lever":4,"family":1,"linkIds":[43,44,331],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Slider","desc":["【value】 : value 【double】","【min】 : minimum value 【double】","【max】 : maximum value 【double】","【activeColor】 : active color 【Color】","【inactiveColor】 : inactive color 【Color】","【onChanged】 : callback when changed 【Function(double)】"]},{"file":"node2_lable.dart","name":"Slider Segments and Labels","desc":["【divisions】 : number of segments 【int】","【label】 : tooltip text 【String】","【onChangeStart】 : listener when sliding starts 【Function(double)】","【onChangeEnd】 : listener when sliding ends 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Slider/Slider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Slider/Slider_zh-CN.json deleted file mode 100644 index a5593aea4..000000000 --- a/modules/widget_system/widgets/doc/widgets/Slider/Slider_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Slider","path":"/src/material/slider.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 滑块。","fields":[{"name":"value","type":"double","required":true,"desc":"此滑块当前选择的值。"},{"name":"secondaryTrackValue","type":"double?","desc":"此滑块的次要轨道值。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户通过拖动为滑块选择新值时在拖动期间调用。"},{"name":"onChangeStart","type":"ValueChanged?","desc":"用户开始为滑块选择新值时调用。"},{"name":"onChangeEnd","type":"ValueChanged?","desc":"用户完成为滑块选择新值时调用。"},{"name":"min","type":"double","required":true,"desc":"用户可以选择的最小值。"},{"name":"max","type":"double","required":true,"desc":"用户可以选择的最大值。"},{"name":"divisions","type":"int?","desc":"离散分割的数量。"},{"name":"label","type":"String?","desc":"当滑块处于活动状态且满足 [SliderThemeData.showValueIndicator] 时在滑块上方显示的标签。"},{"name":"activeColor","type":"Color?","desc":"用于滑块轨道活动部分的颜色。"},{"name":"inactiveColor","type":"Color?","desc":"滑块轨道非活动部分的颜色。"},{"name":"secondaryActiveColor","type":"Color?","desc":"用于拇指和 [Slider.secondaryTrackValue] 之间滑块轨道部分的颜色。"},{"name":"thumbColor","type":"Color?","desc":"拇指的颜色。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"通常用于指示滑块拇指被聚焦、悬停或拖动的高亮颜色。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.slider.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"semanticFormatterCallback","type":"SemanticFormatterCallback?","desc":"用于从滑块值创建语义值的回调。"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"allowedInteraction","type":"SliderInteraction?","desc":"用户与 [Slider] 交互的允许方式。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"确定 [Slider] 周围的内边距。"},{"name":"year2023","type":"bool?","desc":"当为 true 时,[Slider] 将使用 2023 Material Design 3 外观。默认为 true。"}],"id":42,"localName":"滑块","lever":4,"family":1,"linkIds":[43,44,331],"nodes":[{"file":"node1_base.dart","name":"Slider基本使用","desc":["【value】 : 数值 【double】","【min】 : 最小值 【double】","【max】 : 最大值 【double】","【activeColor】 : 激活颜色 【Color】","【inactiveColor】 : 非激活颜色 【Color】","【onChanged】 : 改变时回调 【Function(double)】"]},{"file":"node2_lable.dart","name":"Slider的分段与标签","desc":["【divisions】 : 分段数 【int】","【label】 : 提示气泡文字 【String】","【onChangeStart】 : 开始滑动时监听 【Function(double)】","【onChangeEnd】 : 滑动结束时监听 【Function(double)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_en-US.json deleted file mode 100644 index bfdfa8e08..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliderTheme","path":"/src/material/slider_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a slider theme to descendant [Slider] widgets.","fields":[{"name":"data","type":"SliderThemeData","required":true,"desc":"Specifies the color and shape values for descendant slider widgets."}],"id":331,"lever":3,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliderTheme Usage","desc":["You can obtain the Slider theme data object through SliderTheme.of, which contains a large number of properties for setting the Slider.","You can set the default style for the button components of ButtonTheme【descendants】, including color, shape, size, etc."]},{"file":"node2_diy.dart","name":"SliderTheme Customization for Slider","desc":["You can customize the style of the Slider through thumbShape and valueIndicatorShape.","Note: This example refers to the SlideDemo in flutter-gallery"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_zh-CN.json deleted file mode 100644 index 6f9cf02fb..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliderTheme/SliderTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliderTheme","path":"/src/material/slider_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"将滑块主题应用于后代 [Slider] 小部件。","fields":[{"name":"data","type":"SliderThemeData","required":true,"desc":"指定后代滑块小部件的颜色和形状值。"}],"id":331,"localName":"滑块样式","lever":3,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliderTheme使用","desc":["可通过SliderTheme.of获取Slider主题数据对象,其中包含大量属性用于对Slider的设定。\"","可以为ButtonTheme【后代】的按钮组件设置默认样式,包括颜色、形状、尺寸等。"]},{"file":"node2_diy.dart","name":"SliderTheme对Slider的样式定制","desc":["通过thumbShape和valueIndicatorShape可以对Slider进行样式定制。\"","注: 本例参考flutter-gallery中的SlideDemo"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_en-US.json deleted file mode 100644 index 81752abd1..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverAnimatedGrid","path":"/src/widgets/animated_scroll_view.dart","parents":["_SliverAnimatedMultiBoxAdaptor","StatefulWidget","Widget"],"desc":" A [SliverGrid] that animates items when they are inserted or removed.","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"{@macro flutter.widgets.AnimatedGrid.gridDelegate}"}],"id":515,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_zh-CN.json deleted file mode 100644 index 9568fe492..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverAnimatedGrid/SliverAnimatedGrid_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverAnimatedGrid","path":"/src/widgets/animated_scroll_view.dart","parents":["_SliverAnimatedMultiBoxAdaptor","StatefulWidget","Widget"],"desc":"在插入或删除项目时对其进行动画处理的 [SliverGrid]。","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"{@macro flutter.widgets.AnimatedGrid.gridDelegate}"}],"id":515,"localName":"SliverAnimatedGrid","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_en-US.json deleted file mode 100644 index 28ef9193c..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverAnimatedList","path":"/src/widgets/animated_scroll_view.dart","parents":["_SliverAnimatedMultiBoxAdaptor","StatefulWidget","Widget"],"desc":" A [SliverList] that animates items when they are inserted or removed.","fields":[],"id":301,"lever":3,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverAnimatedList","desc":["【itemBuilder】: Item builder 【AnimatedListItemBuilder】","【initialItemCount】: Initial item count 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_zh-CN.json deleted file mode 100644 index c9bc46a49..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverAnimatedList/SliverAnimatedList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverAnimatedList","path":"/src/widgets/animated_scroll_view.dart","parents":["_SliverAnimatedMultiBoxAdaptor","StatefulWidget","Widget"],"desc":"在插入或删除项目时对其进行动画处理的 [SliverList]。","fields":[],"id":301,"localName":"Sliver动画列表","lever":3,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"SliverAnimatedList基本使用","desc":["【itemBuilder】 : item构造器 【AnimatedListItemBuilder】","【initialItemCount】 : 初始item个数 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_en-US.json deleted file mode 100644 index 1b8eab9ec..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverAnimatedOpacity","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" Animated version of [SliverOpacity] which automatically transitions the sliver child's opacity over a given duration whenever the given opacity changes.","fields":[{"name":"sliver","type":"Widget?","desc":"The sliver below this widget in the tree."},{"name":"opacity","type":"double","required":true,"desc":"The target opacity."},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"Whether the semantic information of the children is always included."}],"id":516,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_zh-CN.json deleted file mode 100644 index 0780a70b7..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverAnimatedOpacity/SliverAnimatedOpacity_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverAnimatedOpacity","path":"/src/widgets/implicit_animations.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"[SliverOpacity] 的动画版本,每当给定的不透明度发生变化时,会在给定的持续时间内自动过渡 sliver 子项的不透明度。","fields":[{"name":"sliver","type":"Widget?","desc":"树中此小部件下方的 sliver。"},{"name":"opacity","type":"double","required":true,"desc":"目标不透明度。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含子项的语义信息。"}],"id":516,"localName":"SliverAnimatedOpacity","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_en-US.json deleted file mode 100644 index 00d1147d9..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverAppBar","path":"/src/material/app_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design app bar that integrates with a [CustomScrollView].","fields":[{"name":"leading","type":"Widget?","desc":"{@macro flutter.material.appbar.leading}"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.automaticallyImplyLeading}"},{"name":"title","type":"Widget?","desc":"{@macro flutter.material.appbar.title}"},{"name":"actions","type":"List?","desc":"{@macro flutter.material.appbar.actions}"},{"name":"flexibleSpace","type":"Widget?","desc":"{@macro flutter.material.appbar.flexibleSpace}"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"{@macro flutter.material.appbar.bottom}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.appbar.elevation}"},{"name":"scrolledUnderElevation","type":"double?","desc":"{@macro flutter.material.appbar.scrolledUnderElevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.appbar.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.appbar.surfaceTintColor}"},{"name":"forceElevated","type":"bool","required":true,"desc":"Whether to show the shadow appropriate for the [elevation] even if the content is not scrolled under the [AppBar]."},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.appbar.backgroundColor}"},{"name":"foregroundColor","type":"Color?","desc":"{@macro flutter.material.appbar.foregroundColor}"},{"name":"iconTheme","type":"IconThemeData?","desc":"{@macro flutter.material.appbar.iconTheme}"},{"name":"actionsIconTheme","type":"IconThemeData?","desc":"{@macro flutter.material.appbar.actionsIconTheme}"},{"name":"primary","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.primary}"},{"name":"centerTitle","type":"bool?","desc":"{@macro flutter.material.appbar.centerTitle}"},{"name":"excludeHeaderSemantics","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.excludeHeaderSemantics}"},{"name":"titleSpacing","type":"double?","desc":"{@macro flutter.material.appbar.titleSpacing}"},{"name":"collapsedHeight","type":"double?","desc":"Defines the height of the app bar when it is collapsed."},{"name":"expandedHeight","type":"double?","desc":"The size of the app bar when it is fully expanded."},{"name":"floating","type":"bool","required":true,"desc":"Whether the app bar should become visible as soon as the user scrolls towards the app bar."},{"name":"pinned","type":"bool","required":true,"desc":"Whether the app bar should remain visible at the start of the scroll view."},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.appbar.shape}"},{"name":"snap","type":"bool","required":true,"desc":"If [snap] and [floating] are true then the floating app bar will \"snap\" into view."},{"name":"stretch","type":"bool","required":true,"desc":"Whether the app bar should stretch to fill the over-scroll area."},{"name":"stretchTriggerOffset","type":"double","required":true,"desc":"The offset of overscroll required to activate [onStretchTrigger]."},{"name":"onStretchTrigger","type":"AsyncCallback?","desc":"The callback function to be executed when a user over-scrolls to the offset specified by [stretchTriggerOffset]."},{"name":"toolbarHeight","type":"double","required":true,"desc":"{@macro flutter.material.appbar.toolbarHeight}"},{"name":"leadingWidth","type":"double?","desc":"{@macro flutter.material.appbar.leadingWidth}"},{"name":"toolbarTextStyle","type":"TextStyle?","desc":"{@macro flutter.material.appbar.toolbarTextStyle}"},{"name":"titleTextStyle","type":"TextStyle?","desc":"{@macro flutter.material.appbar.titleTextStyle}"},{"name":"systemOverlayStyle","type":"SystemUiOverlayStyle?","desc":"{@macro flutter.material.appbar.systemOverlayStyle}"},{"name":"forceMaterialTransparency","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.forceMaterialTransparency}"},{"name":"useDefaultSemanticsOrder","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.useDefaultSemanticsOrder}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"{@macro flutter.material.appbar.actionsPadding}"}],"id":184,"lever":4,"family":4,"linkIds":[183,196],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverAppBar","desc":["【leading】: Left component 【Widget】","【title】: Center component 【Widget】","【actions】: List of trailing components 【List】","【floating】: Whether to float 【bool】","【pinned】: Whether to stay at the top 【bool】","【snap】: Whether to semi-collapse 【bool】","【bottom】: Bottom component 【PreferredSizeWidget】","【expandedHeight】: Expanded height 【double】","【elevation】: Shadow depth 【double】","【flexibleSpace】: Expanded space 【FlexibleSpaceBar】","【backgroundColor】: Background color 【Color】","【controller】: Controller 【ScrollController】"," When snap is true, floating must be true"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_zh-CN.json deleted file mode 100644 index 54f9b2075..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverAppBar/SliverAppBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverAppBar","path":"/src/material/app_bar.dart","parents":["StatefulWidget","Widget"],"desc":"与 [CustomScrollView] 集成的 Material Design 应用栏。","fields":[{"name":"leading","type":"Widget?","desc":"{@macro flutter.material.appbar.leading}"},{"name":"automaticallyImplyLeading","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.automaticallyImplyLeading}"},{"name":"title","type":"Widget?","desc":"{@macro flutter.material.appbar.title}"},{"name":"actions","type":"List?","desc":"{@macro flutter.material.appbar.actions}"},{"name":"flexibleSpace","type":"Widget?","desc":"{@macro flutter.material.appbar.flexibleSpace}"},{"name":"bottom","type":"PreferredSizeWidget?","desc":"{@macro flutter.material.appbar.bottom}"},{"name":"elevation","type":"double?","desc":"{@macro flutter.material.appbar.elevation}"},{"name":"scrolledUnderElevation","type":"double?","desc":"{@macro flutter.material.appbar.scrolledUnderElevation}"},{"name":"shadowColor","type":"Color?","desc":"{@macro flutter.material.appbar.shadowColor}"},{"name":"surfaceTintColor","type":"Color?","desc":"{@macro flutter.material.appbar.surfaceTintColor}"},{"name":"forceElevated","type":"bool","required":true,"desc":"即使内容未滚动到 [AppBar] 下方,是否显示适合 [elevation] 的阴影。"},{"name":"backgroundColor","type":"Color?","desc":"{@macro flutter.material.appbar.backgroundColor}"},{"name":"foregroundColor","type":"Color?","desc":"{@macro flutter.material.appbar.foregroundColor}"},{"name":"iconTheme","type":"IconThemeData?","desc":"{@macro flutter.material.appbar.iconTheme}"},{"name":"actionsIconTheme","type":"IconThemeData?","desc":"{@macro flutter.material.appbar.actionsIconTheme}"},{"name":"primary","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.primary}"},{"name":"centerTitle","type":"bool?","desc":"{@macro flutter.material.appbar.centerTitle}"},{"name":"excludeHeaderSemantics","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.excludeHeaderSemantics}"},{"name":"titleSpacing","type":"double?","desc":"{@macro flutter.material.appbar.titleSpacing}"},{"name":"collapsedHeight","type":"double?","desc":"定义应用栏折叠时的高度。"},{"name":"expandedHeight","type":"double?","desc":"应用栏完全展开时的大小。"},{"name":"floating","type":"bool","required":true,"desc":"用户向应用栏滚动时应用栏是否应立即变为可见。"},{"name":"pinned","type":"bool","required":true,"desc":"应用栏是否应在滚动视图的开始处保持可见。"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.appbar.shape}"},{"name":"snap","type":"bool","required":true,"desc":"如果 [snap] 和 [floating] 都为 true,则浮动应用栏将"},{"name":"stretch","type":"bool","required":true,"desc":"应用栏是否应拉伸以填充过度滚动区域。"},{"name":"stretchTriggerOffset","type":"double","required":true,"desc":"激活 [onStretchTrigger] 所需的过度滚动偏移。"},{"name":"onStretchTrigger","type":"AsyncCallback?","desc":"当用户过度滚动到 [stretchTriggerOffset] 指定的偏移时要执行的回调函数。"},{"name":"toolbarHeight","type":"double","required":true,"desc":"{@macro flutter.material.appbar.toolbarHeight}"},{"name":"leadingWidth","type":"double?","desc":"{@macro flutter.material.appbar.leadingWidth}"},{"name":"toolbarTextStyle","type":"TextStyle?","desc":"{@macro flutter.material.appbar.toolbarTextStyle}"},{"name":"titleTextStyle","type":"TextStyle?","desc":"{@macro flutter.material.appbar.titleTextStyle}"},{"name":"systemOverlayStyle","type":"SystemUiOverlayStyle?","desc":"{@macro flutter.material.appbar.systemOverlayStyle}"},{"name":"forceMaterialTransparency","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.forceMaterialTransparency}"},{"name":"useDefaultSemanticsOrder","type":"bool","required":true,"desc":"{@macro flutter.material.appbar.useDefaultSemanticsOrder}"},{"name":"clipBehavior","type":"Clip?","desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"actionsPadding","type":"EdgeInsetsGeometry?","desc":"{@macro flutter.material.appbar.actionsPadding}"}],"id":184,"localName":"Sliver头部栏","lever":4,"family":4,"linkIds":[183,196],"nodes":[{"file":"node1_base.dart","name":"SliverAppBar基本使用","desc":["【leading】 : 左侧组件 【Widget】","【title】 : 中间组件 【Widget】","【actions】 : 尾部组件列表 【List】","【floating】 : 是否浮动 【bool】","【pinned】 : 是否顶部停留 【bool】","【snap】 : 是否半收展 【bool】","【bottom】 : 底部组件 【PreferredSizeWidget】","【expandedHeight】 : 延展高度 【double】","【elevation】 : 影深 【double】","【flexibleSpace】 : 延展空间 【FlexibleSpaceBar】","【backgroundColor】 : 背景色 【Color】","【controller】 : 控制器 【ScrollController】"," snap为true时必需floating为true"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_en-US.json deleted file mode 100644 index 3955f9dbb..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverConstrainedCrossAxis","path":"/src/widgets/sliver.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver that constrains the cross axis extent of its sliver child.","fields":[{"name":"maxExtent","type":"double","required":true,"desc":"The cross axis extent to apply to the sliver child."},{"name":"sliver","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":270,"lever":3,"family":4,"linkIds":[269,271],"nodes":[{"file":"node1.dart","name":"Basic Usage of SliverConstrainedCrossAxis","desc":["【maxExtent】 : size 【double】","【sliver】 : child component 【Widget?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_zh-CN.json deleted file mode 100644 index 8312d9afd..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverConstrainedCrossAxis/SliverConstrainedCrossAxis_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverConstrainedCrossAxis","path":"/src/widgets/sliver.dart","parents":["StatelessWidget","Widget"],"desc":"约束其 sliver 子项交叉轴范围的 sliver。","fields":[{"name":"maxExtent","type":"double","required":true,"desc":"应用于 sliver 子项的交叉轴范围。"},{"name":"sliver","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":270,"localName":"交叉轴尺寸约束滑片","lever":3,"family":4,"linkIds":[269,271],"nodes":[{"file":"node1.dart","name":"SliverConstrainedCrossAxis 基本使用","desc":["【maxExtent】 : 大小 【double】","【sliver】 : 子组件 【Widget?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_en-US.json deleted file mode 100644 index 3503c7040..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverCrossAxisExpanded","path":"/src/widgets/sliver.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":" Set a flex factor for allocating space in the cross axis direction.","fields":[{"name":"flex","type":"int","required":true,"desc":"Flex value for allocating cross axis extent left after laying out the children with constrained cross axis. The children with flex values will have the remaining extent allocated proportionally to their flex value. This must an integer between 0 and infinity, exclusive."}],"id":271,"lever":3,"family":4,"linkIds":[269,270],"nodes":[{"file":"node1.dart","name":"Basic Usage of SliverCrossAxisExpanded","desc":["【flex】: Ratio 【int】","【sliver】: Child Component 【Widget?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_zh-CN.json deleted file mode 100644 index 906f36ccc..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisExpanded/SliverCrossAxisExpanded_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverCrossAxisExpanded","path":"/src/widgets/sliver.dart","parents":["ParentDataWidget","ProxyWidget","Widget"],"desc":"为在交叉轴方向分配空间设置弹性因子。","fields":[{"name":"flex","type":"int","required":true,"desc":"在布局具有约束交叉轴的子项后,用于分配剩余交叉轴范围的弹性值。具有弹性值的子项将按其弹性值的比例分配剩余范围。这必须是 0 和无穷大之间的整数,不包括边界。"}],"id":271,"localName":"交叉轴延展滑片","lever":3,"family":4,"linkIds":[269,270],"nodes":[{"file":"node1.dart","name":"SliverCrossAxisExpanded 基本使用","desc":["【flex】 : 占比 【int】","【sliver】 : 子组件 【Widget?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_en-US.json deleted file mode 100644 index ebc1142be..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverCrossAxisGroup","path":"/src/widgets/sliver.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places multiple sliver children in a linear array along the cross axis.","fields":[],"id":269,"lever":4,"family":4,"linkIds":[268,270,271],"nodes":[{"file":"node1.dart","name":"Basic Usage of SliverCrossAxisGroup","desc":["【slivers】 : List of child components 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_zh-CN.json deleted file mode 100644 index 65ef43c2d..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverCrossAxisGroup/SliverCrossAxisGroup_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverCrossAxisGroup","path":"/src/widgets/sliver.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"沿交叉轴将多个 sliver 子项放置在线性数组中的 sliver。","fields":[],"id":269,"localName":"交叉轴滑片组","lever":4,"family":4,"linkIds":[268,270,271],"nodes":[{"file":"node1.dart","name":"SliverCrossAxisGroup 基本使用","desc":["【slivers】 : 子组件列表 【List】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_en-US.json deleted file mode 100644 index b160b0c05..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverEnsureSemantics","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that ensures its sliver child is included in the semantics tree.","fields":[],"id":517,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_zh-CN.json deleted file mode 100644 index a37fd2e91..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverEnsureSemantics/SliverEnsureSemantics_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverEnsureSemantics","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"确保其 sliver 子项包含在语义树中的 sliver。","fields":[],"id":517,"localName":"SliverEnsureSemantics","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_en-US.json deleted file mode 100644 index 094d6a625..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFadeTransition","path":"/src/widgets/transitions.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" Animates the opacity of a sliver widget.","fields":[{"name":"opacity","type":"Animation","required":true,"desc":"The animation that controls the opacity of the sliver child."},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"Whether the semantic information of the sliver child is always included."}],"id":518,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_zh-CN.json deleted file mode 100644 index e9cb22cc6..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFadeTransition/SliverFadeTransition_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFadeTransition","path":"/src/widgets/transitions.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"对 sliver 小部件的不透明度进行动画处理。","fields":[{"name":"opacity","type":"Animation","required":true,"desc":"控制 sliver 子项不透明度的动画。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含 sliver 子项的语义信息。"}],"id":518,"localName":"SliverFadeTransition","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_en-US.json deleted file mode 100644 index c5d99260e..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFillRemaining","path":"/src/widgets/sliver_fill.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver that contains a single box child that fills the remaining space in the viewport.","fields":[{"name":"child","type":"Widget?","desc":"Box child widget that fills the remaining space in the viewport."},{"name":"hasScrollBody","type":"bool","required":true,"desc":"Indicates whether the child has a scrollable body, this value cannot be null."},{"name":"fillOverscroll","type":"bool","required":true,"desc":"Indicates whether the child should stretch to fill the overscroll area created by certain scroll physics, such as iOS' default scroll physics. This flag is only relevant when [hasScrollBody] is false."}],"id":306,"lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverFillRemaining","desc":["【hasScrollBody】: Whether it has a scroll body 【bool】","【fillOverscroll】: Whether it can fill the scroll area 【bool】","【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_zh-CN.json deleted file mode 100644 index b7279821a..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFillRemaining/SliverFillRemaining_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFillRemaining","path":"/src/widgets/sliver_fill.dart","parents":["StatelessWidget","Widget"],"desc":"包含单个框子项的 sliver,该子项填充视口中的剩余空间。","fields":[{"name":"child","type":"Widget?","desc":"填充视口中剩余空间的框子小部件。"},{"name":"hasScrollBody","type":"bool","required":true,"desc":"指示子项是否具有可滚动主体,此值不能为 null。"},{"name":"fillOverscroll","type":"bool","required":true,"desc":"指示子项是否应拉伸以填充由某些滚动物理(如 iOS 的默认滚动物理)创建的过度滚动区域。此标志仅在 [hasScrollBody] 为 false 时相关。"}],"id":306,"localName":"Sliver填补剩余","lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"SliverFillRemaining基本使用","desc":["【hasScrollBody】 : 是否具有滚动主体 【bool】","【fillOverscroll】 : 是否可填充滚动区域 【bool】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_en-US.json deleted file mode 100644 index efcc4c668..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFillViewport","path":"/src/widgets/sliver_fill.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver that contains multiple box children that each fills the viewport.","fields":[{"name":"viewportFraction","type":"double","required":true,"desc":"The fraction of the viewport that each child should fill in the main axis."},{"name":"padEnds","type":"bool","required":true,"desc":"Whether to add padding to both ends of the list."},{"name":"delegate","type":"SliverChildDelegate","required":true,"desc":"{@macro flutter.widgets.SliverMultiBoxAdaptorWidget.delegate}"}],"id":187,"lever":3,"family":4,"linkIds":[183,185,186],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverFillViewport","desc":["【viewportFraction】 : Viewport Fraction 【double】","【delegate】 : Child Delegate 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_zh-CN.json deleted file mode 100644 index 99c1c7c7a..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFillViewport/SliverFillViewport_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFillViewport","path":"/src/widgets/sliver_fill.dart","parents":["StatelessWidget","Widget"],"desc":"包含多个框子项的 sliver,每个子项都填充视口。","fields":[{"name":"viewportFraction","type":"double","required":true,"desc":"每个子项在主轴上应填充的视口分数。"},{"name":"padEnds","type":"bool","required":true,"desc":"是否在列表的两端添加内边距。"},{"name":"delegate","type":"SliverChildDelegate","required":true,"desc":"{@macro flutter.widgets.SliverMultiBoxAdaptorWidget.delegate}"}],"id":187,"localName":"Sliver填充视图列表","lever":3,"family":4,"linkIds":[183,185,186],"nodes":[{"file":"node1_base.dart","name":"SliverFillViewport基本使用","desc":["【viewportFraction】 : 视口分率 【double】","【delegate】 : 孩子代理 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_en-US.json deleted file mode 100644 index cdd0fd4a5..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFixedExtentList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places multiple box children with the same main axis extent in a linear array.","fields":[{"name":"itemExtent","type":"double","required":true,"desc":"The extent the children are forced to have in the main axis."}],"id":186,"lever":3,"family":4,"linkIds":[183,185,187],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverFixedExtentList","desc":["【itemExtent】: Forced length in the main axis 【double】","【delegate】: Child delegate 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_zh-CN.json deleted file mode 100644 index 8ed879c4c..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFixedExtentList/SliverFixedExtentList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFixedExtentList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"在线性数组中放置具有相同主轴范围的多个框子项的 sliver。","fields":[{"name":"itemExtent","type":"double","required":true,"desc":"子项在主轴上被强制具有的范围。"}],"id":186,"localName":"Sliver固定延展列表","lever":3,"family":4,"linkIds":[183,185,187],"nodes":[{"file":"node1_base.dart","name":"SliverFixedExtentList基本使用","desc":["【itemExtent】 : 主轴方向强迫长度 【double】","【delegate】 : 孩子代理 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_en-US.json deleted file mode 100644 index a2c4dc1e6..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFloatingHeader","path":"/src/widgets/sliver_floating_header.dart","parents":["StatefulWidget","Widget"],"desc":" A sliver that shows its [child] when the user scrolls forward and hides it when the user scrolls backwards.","fields":[{"name":"animationStyle","type":"AnimationStyle?","desc":"Non null properties override the default durations (300ms) and curves (Curves.easeInOut) for subsequent header animations."},{"name":"snapMode","type":"FloatingHeaderSnapMode?","desc":"Specifies how a partially visible [SliverFloatingHeader] animates into a view when a user scroll gesture ends."},{"name":"child","type":"Widget","required":true,"desc":"The widget contained by this sliver."}],"id":519,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_zh-CN.json deleted file mode 100644 index aaa6197f3..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverFloatingHeader/SliverFloatingHeader_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverFloatingHeader","path":"/src/widgets/sliver_floating_header.dart","parents":["StatefulWidget","Widget"],"desc":"当用户向前滚动时显示其 [child],当用户向后滚动时隐藏它的 sliver。","fields":[{"name":"animationStyle","type":"AnimationStyle?","desc":"非空属性覆盖后续标题动画的默认持续时间(300ms)和曲线(Curves.easeInOut)。"},{"name":"snapMode","type":"FloatingHeaderSnapMode?","desc":"指定当用户滚动手势结束时,部分可见的 [SliverFloatingHeader] 如何动画进入视图。"},{"name":"child","type":"Widget","required":true,"desc":"此 sliver 包含的小部件。"}],"id":519,"localName":"SliverFloatingHeader","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_en-US.json deleted file mode 100644 index 5b76afbba..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverGrid","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places multiple box children in a two dimensional arrangement.","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"The delegate that controls the size and position of the children."}],"id":188,"lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverList","desc":["SliverGrid.count constructs with specified axial count","SliverGrid.extent constructs with specified axial length","The attribute characteristics are the same as GridView, see it for details"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_zh-CN.json deleted file mode 100644 index a6e47ce8d..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverGrid/SliverGrid_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverGrid","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"在二维排列中放置多个框子项的 sliver。","fields":[{"name":"gridDelegate","type":"SliverGridDelegate","required":true,"desc":"控制子项大小和位置的委托。"}],"id":188,"localName":"Sliver网格","lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliverList基本使用","desc":["SliverGrid.count 指定轴向数量构造","SliverGrid.extent 指定轴向长度构造","属性特征同GridView,可详见之"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_en-US.json deleted file mode 100644 index 8ac528d78..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverIgnorePointer","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver widget that is invisible during hit testing.","fields":[{"name":"ignoring","type":"bool","required":true,"desc":"Whether this sliver is ignored during hit testing."},{"name":"ignoringSemantics","type":"bool?","desc":"Whether the semantics of this sliver is ignored when compiling the semantics tree."}],"id":305,"lever":3,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverIgnorePointer","desc":["【sliver】: sliver component 【Widget】","【ignoring】: whether to ignore events 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_zh-CN.json deleted file mode 100644 index 573292b3d..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverIgnorePointer/SliverIgnorePointer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverIgnorePointer","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在命中测试期间不可见的 sliver 小部件。","fields":[{"name":"ignoring","type":"bool","required":true,"desc":"此 sliver 在命中测试期间是否被忽略。"},{"name":"ignoringSemantics","type":"bool?","desc":"编译语义树时是否忽略此 sliver 的语义。"}],"id":305,"localName":"Sliver忽略事件","lever":3,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"SliverIgnorePointer基本使用","desc":["【sliver】 : sliver组件 【Widget】","【ignoring】 : 是否忽略事件 【bool】,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_en-US.json deleted file mode 100644 index c8db5c945..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverLayoutBuilder","path":"/src/widgets/sliver_layout_builder.dart","parents":["ConstrainedLayoutBuilder","AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":" Builds a sliver widget tree that can depend on its own [SliverConstraints].","fields":[],"id":304,"lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverLayoutBuilder","desc":["【builder】: Component Builder 【SliverLayoutWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_zh-CN.json deleted file mode 100644 index 12c9fdb40..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverLayoutBuilder/SliverLayoutBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverLayoutBuilder","path":"/src/widgets/sliver_layout_builder.dart","parents":["ConstrainedLayoutBuilder","AbstractLayoutBuilder","RenderObjectWidget","Widget"],"desc":"构建可以依赖于其自身 [SliverConstraints] 的 sliver 小部件树。","fields":[],"id":304,"localName":"Sliver布局构造器","lever":4,"family":4,"linkIds":[183,251],"nodes":[{"file":"node1_base.dart","name":"SliverLayoutBuilder基本使用","desc":["【builder】 : 组件构造器 【SliverLayoutWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_en-US.json deleted file mode 100644 index 2fe27d68a..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places multiple box children in a linear array along the main axis.","fields":[],"id":185,"lever":5,"family":4,"linkIds":[183,186,187],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverList","desc":["【delegate】: Child delegate 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_zh-CN.json deleted file mode 100644 index c0328a173..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverList/SliverList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"沿主轴在线性数组中放置多个框子项的 sliver。","fields":[],"id":185,"localName":"Sliver列表","lever":5,"family":4,"linkIds":[183,186,187],"nodes":[{"file":"node1_base.dart","name":"SliverList基本使用","desc":["【delegate】 : 孩子代理 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_en-US.json deleted file mode 100644 index eac1101f4..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverMainAxisGroup","path":"/src/widgets/sliver.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places multiple sliver children in a linear array along the main axis, one after another.","fields":[],"id":268,"lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1.dart","name":"Basic Usage of SliverMainAxisGroup","desc":["【slivers】: List of child components 【List】","Can be combined with SliverPersistentHeader to achieve grouping and sticky header effects."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_zh-CN.json deleted file mode 100644 index 21f28dd53..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverMainAxisGroup/SliverMainAxisGroup_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverMainAxisGroup","path":"/src/widgets/sliver.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"沿主轴在线性数组中一个接一个地放置多个 sliver 子项的 sliver。","fields":[],"id":268,"localName":"主轴滑片组","lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1.dart","name":"SliverMainAxisGroup 基本使用","desc":["【slivers】 : 子组件列表 【List】","可结合 SliverPersistentHeader 实现分组,标题吸顶效果。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_en-US.json deleted file mode 100644 index e0b658725..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverMultiBoxAdaptorWidget","path":"/src/widgets/sliver.dart","abstract":true,"parents":["SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A base class for slivers that have multiple box children.","fields":[{"name":"delegate","type":"SliverChildDelegate","required":true,"desc":"{@template flutter.widgets.SliverMultiBoxAdaptorWidget.delegate} The delegate that provides the children for this widget."}],"id":520,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_zh-CN.json deleted file mode 100644 index 8dfe5b07e..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverMultiBoxAdaptorWidget/SliverMultiBoxAdaptorWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverMultiBoxAdaptorWidget","path":"/src/widgets/sliver.dart","abstract":true,"parents":["SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"具有多个框子项的 sliver 的基类。","fields":[{"name":"delegate","type":"SliverChildDelegate","required":true,"desc":"{@template flutter.widgets.SliverMultiBoxAdaptorWidget.delegate} 为此小部件提供子项的委托。"}],"id":520,"localName":"SliverMultiBoxAdaptorWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_en-US.json deleted file mode 100644 index 6ad6554cb..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverOffstage","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that lays its sliver child out as if it was in the tree, but without painting anything, without making the sliver child available for hit testing, and without taking any room in the parent.","fields":[{"name":"offstage","type":"bool","required":true,"desc":"Whether the sliver child is hidden from the rest of the tree."}],"id":521,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_zh-CN.json deleted file mode 100644 index 0355edc39..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverOffstage/SliverOffstage_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverOffstage","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其 sliver 子项布局为好像它在树中,但不绘制任何内容,不使 sliver 子项可用于命中测试,并且不在父项中占用任何空间的 sliver。","fields":[{"name":"offstage","type":"bool","required":true,"desc":"sliver 子项是否从树的其余部分隐藏。"}],"id":521,"localName":"SliverOffstage","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_en-US.json deleted file mode 100644 index 10b997d9d..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverOpacity","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver widget that makes its sliver child partially transparent.","fields":[{"name":"opacity","type":"double","required":true,"desc":"The fraction to scale the sliver child's alpha value."},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"Whether the semantic information of the sliver child is always included."}],"id":192,"lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverOpacity","desc":["【opacity】: Opacity 【double】","【sliver】: Child Component 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_zh-CN.json deleted file mode 100644 index 718fb92d3..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverOpacity/SliverOpacity_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverOpacity","path":"/src/widgets/sliver.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"使其 sliver 子项部分透明的 sliver 小部件。","fields":[{"name":"opacity","type":"double","required":true,"desc":"缩放 sliver 子项 alpha 值的分数。"},{"name":"alwaysIncludeSemantics","type":"bool","required":true,"desc":"是否始终包含 sliver 子项的语义信息。"}],"id":192,"localName":"Sliver透明度","lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliverOpacity基本使用","desc":["【opacity】 : 透明度 【double】","【sliver】 : 子组件 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_en-US.json deleted file mode 100644 index 04c0faf4f..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverOverlapAbsorber","path":"/src/widgets/nested_scroll_view.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that wraps another, forcing its layout extent to be treated as overlap.","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"The object in which the absorbed overlap is recorded."}],"id":307,"lever":3,"family":4,"linkIds":[251,308],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverOverlapAbsorber","desc":["【sliver】 : Child component 【Widget】","【handle】 : *Handler 【SliverOverlapAbsorberHandle】","If the SliverOverlapAbsorber and SliverOverlapInjector components are not used, the content of the NestedScrollView will overlap with the header bar."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_zh-CN.json deleted file mode 100644 index fedbebee3..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverOverlapAbsorber/SliverOverlapAbsorber_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverOverlapAbsorber","path":"/src/widgets/nested_scroll_view.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"包装另一个 sliver 的 sliver,强制其布局范围被视为重叠。","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"记录吸收重叠的对象。"}],"id":307,"localName":"重叠吸收器","lever":3,"family":4,"linkIds":[251,308],"nodes":[{"file":"node1_base.dart","name":"SliverOverlapAbsorber基本使用","desc":["【sliver】 : 子组件 【Widget】","【handle】 : *处理器 【SliverOverlapAbsorberHandle】","如果不使用SliverOverlapAbsorber和SliverOverlapInjector组件,NestedScrollView的内容会和头部栏重叠。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_en-US.json deleted file mode 100644 index eac702756..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverOverlapInjector","path":"/src/widgets/nested_scroll_view.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that has a sliver geometry based on the values stored in a [SliverOverlapAbsorberHandle].","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"The handle to the [SliverOverlapAbsorber] that is feeding this injector."}],"id":308,"lever":3,"family":4,"linkIds":[251,307],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverOverlapInjector","desc":["【sliver】 : Child component 【Widget】","【handle】 : *Handler 【SliverOverlapAbsorberHandle】","If the SliverOverlapAbsorber and SliverOverlapInjector components are not used, the content of the NestedScrollView will overlap with the header bar."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_zh-CN.json deleted file mode 100644 index 4b31d62ca..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverOverlapInjector/SliverOverlapInjector_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverOverlapInjector","path":"/src/widgets/nested_scroll_view.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"具有基于存储在 [SliverOverlapAbsorberHandle] 中的值的 sliver 几何形状的 sliver。","fields":[{"name":"handle","type":"SliverOverlapAbsorberHandle","required":true,"desc":"正在为此注入器提供数据的 [SliverOverlapAbsorber] 的句柄。"}],"id":308,"localName":"重叠注射器","lever":3,"family":4,"linkIds":[251,307],"nodes":[{"file":"node1_base.dart","name":"SliverOverlapInjector基本使用","desc":["【sliver】 : 子组件 【Widget】","【handle】 : *处理器 【SliverOverlapAbsorberHandle】","如果不使用SliverOverlapAbsorber和SliverOverlapInjector组件,NestedScrollView的内容会和头部栏重叠。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_en-US.json deleted file mode 100644 index d3c7c11ec..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverPadding","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that applies padding on each side of another sliver.","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"The amount of space by which to inset the child sliver."}],"id":191,"lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverPadding","desc":["【sliver】: Child component 【Widget】","【padding】: Padding 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_zh-CN.json deleted file mode 100644 index 08606b41c..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverPadding/SliverPadding_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverPadding","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在另一个 sliver 的每一侧应用内边距的 sliver。","fields":[{"name":"padding","type":"EdgeInsetsGeometry","required":true,"desc":"插入子 sliver 的空间量。"}],"id":191,"localName":"Sliver内间距","lever":3,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliverPadding基本使用","desc":["【sliver】 : 子组件 【Widget】","【padding】 : 内边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_en-US.json deleted file mode 100644 index 1100aeff9..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverPersistentHeader","path":"/src/widgets/sliver_persistent_header.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver whose size varies when the sliver is scrolled to the edge of the viewport opposite the sliver's [GrowthDirection].","fields":[{"name":"delegate","type":"SliverPersistentHeaderDelegate","required":true,"desc":"Configuration for the sliver's layout."},{"name":"pinned","type":"bool","required":true,"desc":"Whether to stick the header to the start of the viewport once it has reached its minimum size."},{"name":"floating","type":"bool","required":true,"desc":"Whether the header should immediately grow again if the user reverses scroll direction."}],"id":190,"lever":5,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverPersistentHeader","desc":["【delegate】: Delegate 【SliverPersistentHeaderDelegate】","【floating】: Whether to float 【bool】","【pinned】: Whether to stay at the top 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_zh-CN.json deleted file mode 100644 index ee3ef1df8..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverPersistentHeader/SliverPersistentHeader_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverPersistentHeader","path":"/src/widgets/sliver_persistent_header.dart","parents":["StatelessWidget","Widget"],"desc":"当 sliver 滚动到与 sliver 的 [GrowthDirection] 相对的视口边缘时,其大小会发生变化的 sliver。","fields":[{"name":"delegate","type":"SliverPersistentHeaderDelegate","required":true,"desc":"sliver 布局的配置。"},{"name":"pinned","type":"bool","required":true,"desc":"标题达到最小大小后是否粘贴到视口的开始处。"},{"name":"floating","type":"bool","required":true,"desc":"如果用户反转滚动方向,标题是否应立即再次增长。"}],"id":190,"localName":"吸顶滑片","lever":5,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliverPersistentHeader基本使用","desc":["【delegate】 : 代理 【SliverPersistentHeaderDelegate】","【floating】 : 是否浮动 【bool】","【pinned】 : 是否顶部停留 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_en-US.json deleted file mode 100644 index 82caa0f14..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverPrototypeExtentList","path":"/src/widgets/sliver_prototype_extent_list.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places its box children in a linear array and constrains them to have the same extent as a prototype item along the main axis.","fields":[{"name":"prototypeItem","type":"Widget","required":true,"desc":"Defines the main axis extent of all of this sliver's children."}],"id":314,"lever":2,"family":4,"linkIds":[185,186],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverPrototypeExtentList","desc":["【prototypeItem】 : Main axis size component 【Widget】","【delegate】 : Child delegate 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_zh-CN.json deleted file mode 100644 index 242b525e9..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverPrototypeExtentList/SliverPrototypeExtentList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverPrototypeExtentList","path":"/src/widgets/sliver_prototype_extent_list.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"将其框子项放置在线性数组中并约束它们沿主轴具有与原型项目相同范围的 sliver。","fields":[{"name":"prototypeItem","type":"Widget","required":true,"desc":"定义此 sliver 所有子项的主轴范围。"}],"id":314,"localName":"Sliver原型延伸列表","lever":2,"family":4,"linkIds":[185,186],"nodes":[{"file":"node1_base.dart","name":"SliverPrototypeExtentList基本使用","desc":["【prototypeItem】 : 主轴方向尺寸组件 【Widget】","【delegate】 : 孩子代理 【SliverChildDelegate】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_en-US.json deleted file mode 100644 index bda82bcd6..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverReorderableList","path":"/src/widgets/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":" A sliver list that allows the user to interactively reorder the list items.","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemBuilder}"},{"name":"findChildIndexCallback","type":"ChildIndexGetter?","desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.findChildIndexCallback}"},{"name":"itemCount","type":"int","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemCount}"},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@macro flutter.widgets.reorderable_list.onReorder}"},{"name":"onReorderStart","type":"void Function(int)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderStart}"},{"name":"onReorderEnd","type":"void Function(int)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderEnd}"},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@macro flutter.widgets.reorderable_list.proxyDecorator}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double","required":true,"desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@macro flutter.widgets.reorderable_list.dragBoundaryProvider}"}],"id":522,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_zh-CN.json deleted file mode 100644 index 0c7b192d8..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverReorderableList/SliverReorderableList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverReorderableList","path":"/src/widgets/reorderable_list.dart","parents":["StatefulWidget","Widget"],"desc":"允许用户交互式重新排序列表项的 sliver 列表。","fields":[{"name":"itemBuilder","type":"IndexedWidgetBuilder","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemBuilder}"},{"name":"findChildIndexCallback","type":"ChildIndexGetter?","desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.findChildIndexCallback}"},{"name":"itemCount","type":"int","required":true,"desc":"{@macro flutter.widgets.reorderable_list.itemCount}"},{"name":"onReorder","type":"ReorderCallback","required":true,"desc":"{@macro flutter.widgets.reorderable_list.onReorder}"},{"name":"onReorderStart","type":"void Function(int)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderStart}"},{"name":"onReorderEnd","type":"void Function(int)?","desc":"{@macro flutter.widgets.reorderable_list.onReorderEnd}"},{"name":"proxyDecorator","type":"ReorderItemProxyDecorator?","desc":"{@macro flutter.widgets.reorderable_list.proxyDecorator}"},{"name":"itemExtent","type":"double?","desc":"{@macro flutter.widgets.list_view.itemExtent}"},{"name":"itemExtentBuilder","type":"ItemExtentBuilder?","desc":"{@macro flutter.widgets.list_view.itemExtentBuilder}"},{"name":"prototypeItem","type":"Widget?","desc":"{@macro flutter.widgets.list_view.prototypeItem}"},{"name":"autoScrollerVelocityScalar","type":"double","required":true,"desc":"{@macro flutter.widgets.EdgeDraggingAutoScroller.velocityScalar}"},{"name":"dragBoundaryProvider","type":"ReorderDragBoundaryProvider?","desc":"{@macro flutter.widgets.reorderable_list.dragBoundaryProvider}"}],"id":522,"localName":"SliverReorderableList","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_en-US.json deleted file mode 100644 index c0583a6ce..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverResizingHeader","path":"/src/widgets/sliver_resizing_header.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver that is pinned to the start of its [CustomScrollView] and reacts to scrolling by resizing between the intrinsic sizes of its min and max extent prototypes.","fields":[{"name":"minExtentPrototype","type":"Widget?","desc":"Laid out once to define the minimum size of this sliver along the [CustomScrollView.scrollDirection] axis."},{"name":"maxExtentPrototype","type":"Widget?","desc":"Laid out once to define the maximum size of this sliver along the [CustomScrollView.scrollDirection] axis."},{"name":"child","type":"Widget?","desc":"The widget contained by this sliver."}],"id":523,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_zh-CN.json deleted file mode 100644 index 4c033cae4..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverResizingHeader/SliverResizingHeader_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverResizingHeader","path":"/src/widgets/sliver_resizing_header.dart","parents":["StatelessWidget","Widget"],"desc":"固定到其 [CustomScrollView] 开始处并通过在其最小和最大范围原型的内在大小之间调整大小来响应滚动的 sliver。","fields":[{"name":"minExtentPrototype","type":"Widget?","desc":"布局一次以定义此 sliver 沿 [CustomScrollView.scrollDirection] 轴的最小大小。"},{"name":"maxExtentPrototype","type":"Widget?","desc":"布局一次以定义此 sliver 沿 [CustomScrollView.scrollDirection] 轴的最大大小。"},{"name":"child","type":"Widget?","desc":"此 sliver 包含的小部件。"}],"id":523,"localName":"SliverResizingHeader","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_en-US.json deleted file mode 100644 index 08d32794c..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverSafeArea","path":"/src/widgets/safe_area.dart","parents":["StatelessWidget","Widget"],"desc":" A sliver that insets another sliver by sufficient padding to avoid intrusions by the operating system.","fields":[{"name":"left","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the left."},{"name":"top","type":"bool","required":true,"desc":"Whether to avoid system intrusions at the top of the screen, typically the system status bar."},{"name":"right","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the right."},{"name":"bottom","type":"bool","required":true,"desc":"Whether to avoid system intrusions on the bottom side of the screen."},{"name":"minimum","type":"EdgeInsets","required":true,"desc":"This minimum padding to apply."},{"name":"sliver","type":"Widget","required":true,"desc":"The sliver below this sliver in the tree."}],"id":524,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_zh-CN.json deleted file mode 100644 index 7b371a125..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverSafeArea/SliverSafeArea_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverSafeArea","path":"/src/widgets/safe_area.dart","parents":["StatelessWidget","Widget"],"desc":"通过足够的内边距插入另一个 sliver 以避免操作系统入侵的 sliver。","fields":[{"name":"left","type":"bool","required":true,"desc":"是否避免左侧的系统入侵。"},{"name":"top","type":"bool","required":true,"desc":"是否避免屏幕顶部的系统入侵,通常是系统状态栏。"},{"name":"right","type":"bool","required":true,"desc":"是否避免右侧的系统入侵。"},{"name":"bottom","type":"bool","required":true,"desc":"是否避免屏幕底部的系统入侵。"},{"name":"minimum","type":"EdgeInsets","required":true,"desc":"要应用的最小内边距。"},{"name":"sliver","type":"Widget","required":true,"desc":"树中此 sliver 下方的 sliver。"}],"id":524,"localName":"SliverSafeArea","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_en-US.json deleted file mode 100644 index 4dc3b4e5a..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverToBoxAdapter","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A sliver that contains a single box widget.","fields":[],"id":189,"lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SliverToBoxAdapter","desc":["【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_zh-CN.json deleted file mode 100644 index e36440329..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverToBoxAdapter/SliverToBoxAdapter_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverToBoxAdapter","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"包含单个框小部件的 sliver。","fields":[],"id":189,"localName":"Sliver适配器","lever":4,"family":4,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SliverToBoxAdapter基本使用","desc":["【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_en-US.json deleted file mode 100644 index 25c38fe31..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverVariedExtentList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":" A sliver that places its box children in a linear array and constrains them to have the corresponding extent returned by [itemExtentBuilder].","fields":[{"name":"itemExtentBuilder","type":"ItemExtentBuilder","required":true,"desc":"The children extent builder."}],"id":525,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_zh-CN.json deleted file mode 100644 index cf2c42b44..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverVariedExtentList/SliverVariedExtentList_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverVariedExtentList","path":"/src/widgets/sliver.dart","parents":["SliverMultiBoxAdaptorWidget","SliverWithKeepAliveWidget","RenderObjectWidget","Widget"],"desc":"将其框子项放置在线性数组中并约束它们具有 [itemExtentBuilder] 返回的相应范围的 sliver。","fields":[{"name":"itemExtentBuilder","type":"ItemExtentBuilder","required":true,"desc":"子项范围构建器。"}],"id":525,"localName":"SliverVariedExtentList","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_en-US.json deleted file mode 100644 index 17816be98..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverVisibility","path":"/src/widgets/visibility.dart","parents":["StatelessWidget","Widget"],"desc":" Whether to show or hide a sliver child.","fields":[{"name":"sliver","type":"Widget","required":true,"desc":"The sliver to show or hide, as controlled by [visible]."},{"name":"replacementSliver","type":"Widget","required":true,"desc":"The widget to use when the sliver child is not [visible], assuming that none of the `maintain` flags (in particular, [maintainState]) are set."},{"name":"visible","type":"bool","required":true,"desc":"Switches between showing the [sliver] or hiding it."},{"name":"maintainState","type":"bool","required":true,"desc":"Whether to maintain the [State] objects of the [sliver] subtree when it is not [visible]."},{"name":"maintainAnimation","type":"bool","required":true,"desc":"Whether to maintain animations within the [sliver] subtree when it is not [visible]."},{"name":"maintainSize","type":"bool","required":true,"desc":"Whether to maintain space for where the sliver would have been."},{"name":"maintainSemantics","type":"bool","required":true,"desc":"Whether to maintain the semantics for the sliver when it is hidden (e.g. for accessibility)."},{"name":"maintainInteractivity","type":"bool","required":true,"desc":"Whether to allow the sliver to be interactive when hidden."}],"id":526,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_zh-CN.json deleted file mode 100644 index 24388be3f..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverVisibility/SliverVisibility_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverVisibility","path":"/src/widgets/visibility.dart","parents":["StatelessWidget","Widget"],"desc":"是否显示或隐藏 sliver 子项。","fields":[{"name":"sliver","type":"Widget","required":true,"desc":"要显示或隐藏的 sliver,由 [visible] 控制。"},{"name":"replacementSliver","type":"Widget","required":true,"desc":"当 sliver 子项不 [visible] 时使用的小部件,假设没有设置任何 `maintain` 标志(特别是 [maintainState])。"},{"name":"visible","type":"bool","required":true,"desc":"在显示 [sliver] 或隐藏它之间切换。"},{"name":"maintainState","type":"bool","required":true,"desc":"当 [sliver] 子树不 [visible] 时是否维护其 [State] 对象。"},{"name":"maintainAnimation","type":"bool","required":true,"desc":"当 [sliver] 子树不 [visible] 时是否维护其中的动画。"},{"name":"maintainSize","type":"bool","required":true,"desc":"是否为 sliver 本来所在的位置维护空间。"},{"name":"maintainSemantics","type":"bool","required":true,"desc":"当 sliver 隐藏时是否维护其语义(例如用于辅助功能)。"},{"name":"maintainInteractivity","type":"bool","required":true,"desc":"隐藏时是否允许 sliver 可交互。"}],"id":526,"localName":"SliverVisibility","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_en-US.json deleted file mode 100644 index 663296888..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverWithKeepAliveWidget","path":"/src/widgets/sliver.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A base class for slivers that have [KeepAlive] children.","fields":[],"id":348,"lever":1,"family":4,"linkIds":[316,239,188,185,314,186],"nodes":[{"file":"node1_base.dart","name":"Introduction to SliverWithKeepAliveWidget","desc":["【key】 : key 【Key】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_zh-CN.json deleted file mode 100644 index b05be0ed5..000000000 --- a/modules/widget_system/widgets/doc/widgets/SliverWithKeepAliveWidget/SliverWithKeepAliveWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SliverWithKeepAliveWidget","path":"/src/widgets/sliver.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"具有 [KeepAlive] 子项的 sliver 的基类。","fields":[],"id":348,"localName":"Sliver保活容器","lever":1,"family":4,"linkIds":[316,239,188,185,314,186],"nodes":[{"file":"node1_base.dart","name":"SliverWithKeepAliveWidget 介绍","desc":["【key】 : 键 【Key】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_en-US.json deleted file mode 100644 index ab6a865ff..000000000 --- a/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SlottedMultiChildRenderObjectWidget","path":"/src/widgets/slotted_render_object_widget.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A superclass for [RenderObjectWidget]s that configure [RenderObject] subclasses that organize their children in different slots.","fields":[],"id":527,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_zh-CN.json deleted file mode 100644 index 80f0f1fdd..000000000 --- a/modules/widget_system/widgets/doc/widgets/SlottedMultiChildRenderObjectWidget/SlottedMultiChildRenderObjectWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SlottedMultiChildRenderObjectWidget","path":"/src/widgets/slotted_render_object_widget.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"配置在不同插槽中组织其子项的 [RenderObject] 子类的 [RenderObjectWidget] 的超类。","fields":[],"id":527,"localName":"SlottedMultiChildRenderObjectWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_en-US.json b/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_en-US.json deleted file mode 100644 index 40e3ad7b4..000000000 --- a/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SnackBar","path":"/src/material/snack_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A lightweight message with an optional action which briefly displays at the bottom of the screen.","fields":[{"name":"content","type":"Widget","required":true,"desc":"The primary content of the snack bar."},{"name":"backgroundColor","type":"Color?","desc":"The snack bar's background color."},{"name":"elevation","type":"double?","desc":"The z-coordinate at which to place the snack bar. This controls the size of the shadow below the snack bar."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"Empty space to surround the snack bar."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of padding to apply to the snack bar's content and optional action."},{"name":"width","type":"double?","desc":"The width of the snack bar."},{"name":"shape","type":"ShapeBorder?","desc":"The shape of the snack bar's [Material]."},{"name":"hitTestBehavior","type":"HitTestBehavior?","desc":"Defines how the snack bar area, including margin, will behave during hit testing."},{"name":"behavior","type":"SnackBarBehavior?","desc":"This defines the behavior and location of the snack bar."},{"name":"action","type":"SnackBarAction?","desc":"(optional) An action that the user can take based on the snack bar."},{"name":"actionOverflowThreshold","type":"double?","desc":"(optional) The percentage threshold for action widget's width before it overflows to a new line."},{"name":"showCloseIcon","type":"bool?","desc":"(optional) Whether to include a \"close\" icon widget."},{"name":"closeIconColor","type":"Color?","desc":"An optional color for the close icon, if [showCloseIcon] is true."},{"name":"duration","type":"Duration","required":true,"desc":"The amount of time the snack bar should be displayed."},{"name":"animation","type":"Animation?","desc":"The animation driving the entrance and exit of the snack bar."},{"name":"onVisible","type":"VoidCallback?","desc":"Called the first time that the snackbar is visible within a [Scaffold]."},{"name":"dismissDirection","type":"DismissDirection?","desc":"The direction in which the SnackBar can be dismissed."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":140,"lever":4,"family":1,"linkIds":[141,142],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SnackBar","desc":["【content】: Middle content component 【Widget】","【action】: Right side button 【SnackBarAction】","【duration】: Duration 【Widget】","【backgroundColor】: Background color 【Color】","【elevation】: Shadow depth 【double】","【shape】: Shape 【ShapeBorder】","【onVisible】: Callback when shown 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_zh-CN.json deleted file mode 100644 index f114d899c..000000000 --- a/modules/widget_system/widgets/doc/widgets/SnackBar/SnackBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SnackBar","path":"/src/material/snack_bar.dart","parents":["StatefulWidget","Widget"],"desc":"带有可选操作的轻量级消息,在屏幕底部短暂显示。","fields":[{"name":"content","type":"Widget","required":true,"desc":"快餐栏的主要内容。"},{"name":"backgroundColor","type":"Color?","desc":"快餐栏的背景颜色。"},{"name":"elevation","type":"double?","desc":"放置快餐栏的 z 坐标。这控制快餐栏下方阴影的大小。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕快餐栏的空白空间。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"应用于快餐栏内容和可选操作的内边距量。"},{"name":"width","type":"double?","desc":"快餐栏的宽度。"},{"name":"shape","type":"ShapeBorder?","desc":"快餐栏的 [Material] 的形状。"},{"name":"hitTestBehavior","type":"HitTestBehavior?","desc":"定义快餐栏区域(包括边距)在命中测试期间的行为方式。"},{"name":"behavior","type":"SnackBarBehavior?","desc":"这定义了快餐栏的行为和位置。"},{"name":"action","type":"SnackBarAction?","desc":"(可选)用户可以基于快餐栏采取的操作。"},{"name":"actionOverflowThreshold","type":"double?","desc":"(可选)操作小部件宽度在溢出到新行之前的百分比阈值。"},{"name":"showCloseIcon","type":"bool?","desc":"(可选)是否包含"},{"name":"closeIconColor","type":"Color?","desc":"如果 [showCloseIcon] 为 true,关闭图标的可选颜色。"},{"name":"duration","type":"Duration","required":true,"desc":"快餐栏应显示的时间量。"},{"name":"animation","type":"Animation?","desc":"驱动快餐栏进入和退出的动画。"},{"name":"onVisible","type":"VoidCallback?","desc":"快餐栏在 [Scaffold] 中首次可见时调用。"},{"name":"dismissDirection","type":"DismissDirection?","desc":"SnackBar 可以被关闭的方向。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":140,"localName":"信息提示条","lever":4,"family":1,"linkIds":[141,142],"nodes":[{"file":"node1_base.dart","name":"SnackBar基本使用","desc":["【content】 : 中间内容组件 【Widget】","【action】 : 右侧按钮 【SnackBarAction】","【duration】 : 持续时长 【Widget】","【backgroundColor】 : 背景色 【Color】","【elevation】 : 影深 【double】","【shape】 : 形状 【ShapeBorder】","【onVisible】 : 显示时回调 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_en-US.json b/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_en-US.json deleted file mode 100644 index 837828e42..000000000 --- a/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SnackBarAction","path":"/src/material/snack_bar.dart","parents":["StatefulWidget","Widget"],"desc":" A button for a [SnackBar], known as an \"action\".","fields":[{"name":"textColor","type":"Color?","desc":"The button label color. If not provided, defaults to [SnackBarThemeData.actionTextColor]."},{"name":"backgroundColor","type":"Color?","desc":"The button background fill color. If not provided, defaults to [SnackBarThemeData.actionBackgroundColor]."},{"name":"disabledTextColor","type":"Color?","desc":"The button disabled label color. This color is shown after the [SnackBarAction] is dismissed."},{"name":"disabledBackgroundColor","type":"Color?","desc":"The button disabled background color. This color is shown after the [SnackBarAction] is dismissed."},{"name":"label","type":"String","required":true,"desc":"The button label."},{"name":"onPressed","type":"VoidCallback","required":true,"desc":"The callback to be called when the button is pressed."}],"id":141,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of SnackBarAction","desc":["【label】 : Label 【String】","【textColor】 : Text Color 【Color】","【disabledTextColor】 : Disabled Text Color 【Color】","【onPressed】 : Click Callback 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_zh-CN.json deleted file mode 100644 index 4a171fa04..000000000 --- a/modules/widget_system/widgets/doc/widgets/SnackBarAction/SnackBarAction_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SnackBarAction","path":"/src/material/snack_bar.dart","parents":["StatefulWidget","Widget"],"desc":"[SnackBar] 的按钮,称为操作。","fields":[{"name":"textColor","type":"Color?","desc":"按钮标签颜色。如果未提供,默认为 [SnackBarThemeData.actionTextColor]。"},{"name":"backgroundColor","type":"Color?","desc":"按钮背景填充颜色。如果未提供,默认为 [SnackBarThemeData.actionBackgroundColor]。"},{"name":"disabledTextColor","type":"Color?","desc":"按钮禁用标签颜色。此颜色在 [SnackBarAction] 被关闭后显示。"},{"name":"disabledBackgroundColor","type":"Color?","desc":"按钮禁用背景颜色。此颜色在 [SnackBarAction] 被关闭后显示。"},{"name":"label","type":"String","required":true,"desc":"按钮标签。"},{"name":"onPressed","type":"VoidCallback","required":true,"desc":"按下按钮时要调用的回调。"}],"id":141,"localName":"信息提示条按钮","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SnackBarAction基本使用","desc":["【label】 : 标签 【String】","【textColor】 : 文字颜色 【Color】","【disabledTextColor】 : 文字失效色 【Color】","【onPressed】 : 点击回调 【Function()】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_en-US.json deleted file mode 100644 index 1dd481ddb..000000000 --- a/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SnapshotWidget","path":"/src/widgets/snapshot_widget.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that can replace its child with a snapshotted version of the child.","fields":[{"name":"controller","type":"SnapshotController","required":true,"desc":"The controller that determines when to display the children as a snapshot."},{"name":"mode","type":"SnapshotMode","required":true,"desc":"Configuration that controls how the snapshot widget decides to paint its children."},{"name":"autoresize","type":"bool","required":true,"desc":"Whether or not changes in render object size should automatically re-create the snapshot."},{"name":"painter","type":"SnapshotPainter","required":true,"desc":"The painter used to paint the child snapshot or child widgets."}],"id":528,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_zh-CN.json deleted file mode 100644 index d79fc3193..000000000 --- a/modules/widget_system/widgets/doc/widgets/SnapshotWidget/SnapshotWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SnapshotWidget","path":"/src/widgets/snapshot_widget.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"可以用子项的快照版本替换其子项的小部件。","fields":[{"name":"controller","type":"SnapshotController","required":true,"desc":"确定何时将子项显示为快照的控制器。"},{"name":"mode","type":"SnapshotMode","required":true,"desc":"控制快照小部件如何决定绘制其子项的配置。"},{"name":"autoresize","type":"bool","required":true,"desc":"渲染对象大小的更改是否应自动重新创建快照。"},{"name":"painter","type":"SnapshotPainter","required":true,"desc":"用于绘制子快照或子小部件的绘制器。"}],"id":528,"localName":"SnapshotWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_en-US.json b/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_en-US.json deleted file mode 100644 index 6710229d2..000000000 --- a/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Spacer","path":"/src/widgets/spacer.dart","parents":["StatelessWidget","Widget"],"desc":" Spacer creates an adjustable, empty spacer that can be used to tune the spacing between widgets in a [Flex] container, like [Row] or [Column].","fields":[{"name":"flex","type":"int","required":true,"desc":"The flex factor to use in determining how much space to take up."}],"id":107,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Spacer","desc":["A Spacer will occupy the extendable area"]},{"file":"node2_flex.dart","name":"Space Allocation with Multiple Spacers","desc":["【flex】 : Proportion of remaining space allocation 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_zh-CN.json deleted file mode 100644 index 346b4dbd6..000000000 --- a/modules/widget_system/widgets/doc/widgets/Spacer/Spacer_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Spacer","path":"/src/widgets/spacer.dart","parents":["StatelessWidget","Widget"],"desc":"Spacer 创建一个可调整的空白间隔器,可用于调整 [Flex] 容器(如 [Row] 或 [Column])中小部件之间的间距。","fields":[{"name":"flex","type":"int","required":true,"desc":"用于确定占用多少空间的弹性因子。"}],"id":107,"localName":"空间组件","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Spacer基本使用","desc":["一个Spacer会占据可延伸区域"]},{"file":"node2_flex.dart","name":"多个Spacer空间分配","desc":["【flex】 : 剩余空间分配占比 【int】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_en-US.json deleted file mode 100644 index 5058bcfc1..000000000 --- a/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SpellCheckSuggestionsToolbar","path":"/src/material/spell_check_suggestions_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" The default spell check suggestions toolbar for Android.","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@template flutter.material.SpellCheckSuggestionsToolbar.anchor} The focal point below which the toolbar attempts to position itself. {@endtemplate}"},{"name":"buttonItems","type":"List","required":true,"desc":"The [ContextMenuButtonItem]s that will be turned into the correct button widgets and displayed in the spell check suggestions toolbar."}],"id":529,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_zh-CN.json deleted file mode 100644 index a6f794946..000000000 --- a/modules/widget_system/widgets/doc/widgets/SpellCheckSuggestionsToolbar/SpellCheckSuggestionsToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SpellCheckSuggestionsToolbar","path":"/src/material/spell_check_suggestions_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"Android 的默认拼写检查建议工具栏。","fields":[{"name":"anchor","type":"Offset","required":true,"desc":"{@template flutter.material.SpellCheckSuggestionsToolbar.anchor} 工具栏尝试定位自己的焦点下方。{@endtemplate}"},{"name":"buttonItems","type":"List","required":true,"desc":"将转换为正确按钮小部件并显示在拼写检查建议工具栏中的 [ContextMenuButtonItem]。"}],"id":529,"localName":"SpellCheckSuggestionsToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Stack/Stack_en-US.json b/modules/widget_system/widgets/doc/widgets/Stack/Stack_en-US.json deleted file mode 100644 index 6be6e7296..000000000 --- a/modules/widget_system/widgets/doc/widgets/Stack/Stack_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Stack","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that positions its children relative to the edges of its box.","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"How to align the non-positioned and partially-positioned children in the stack."},{"name":"textDirection","type":"TextDirection?","desc":"The text direction with which to resolve [alignment]."},{"name":"fit","type":"StackFit","required":true,"desc":"How to size the non-positioned children in the stack."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":97,"lever":5,"family":3,"linkIds":[94,95,161],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Stack","desc":["【children】: Component list 【List】","【textDirection】: Child arrangement direction 【MainAxisAlignment】","【alignment】: Alignment method 【AlignmentGeometry】","【overflow】: Overflow mode 【Overflow】","【fit】: Fit mode 【StackFit】"]},{"file":"node2_positioned.dart","name":"Combined Usage of Stack and Positioned","desc":["The Positioned component can only be used within a Stack, allowing precise placement of a component by specifying distances from the top, left, right, and bottom."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Stack/Stack_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Stack/Stack_zh-CN.json deleted file mode 100644 index f6c7f9c40..000000000 --- a/modules/widget_system/widgets/doc/widgets/Stack/Stack_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Stack","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"相对于其框边缘定位其子项的小部件。","fields":[{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"如何在堆栈中对齐非定位和部分定位的子项。"},{"name":"textDirection","type":"TextDirection?","desc":"用于解析 [alignment] 的文本方向。"},{"name":"fit","type":"StackFit","required":true,"desc":"如何调整堆栈中非定位子项的大小。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":97,"localName":"堆叠布局","lever":5,"family":3,"linkIds":[94,95,161],"nodes":[{"file":"node1_base.dart","name":"Stack基本使用","desc":["【children】 : 组件列表 【List】","【textDirection】 : 孩子排布方向 【MainAxisAlignment】","【alignment】 : 对齐方式 【AlignmentGeometry】","【overflow】 : 溢出模式 【Overflow】","【fit】 : 适应模式 【StackFit】"]},{"file":"node2_positioned.dart","name":"Stack和Positioned结合使用","desc":["Positioned组件只能用与Stack中,可以指定左上右下的距离对某个组件进行位置精确安放。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_en-US.json deleted file mode 100644 index 8b3559477..000000000 --- a/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StatefulBuilder","path":"/src/widgets/basic.dart","parents":["StatefulWidget","Widget"],"desc":" A platonic widget that both has state and calls a closure to obtain its child widget.","fields":[{"name":"builder","type":"StatefulWidgetBuilder","required":true,"desc":"Called to obtain the child widget."}],"id":242,"lever":3,"family":1,"linkIds":[202,203,280,255],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of StatefulBuilder","desc":["【builder】 : Component Constructor 【StatefulWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_zh-CN.json deleted file mode 100644 index a124fba26..000000000 --- a/modules/widget_system/widgets/doc/widgets/StatefulBuilder/StatefulBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StatefulBuilder","path":"/src/widgets/basic.dart","parents":["StatefulWidget","Widget"],"desc":"既有状态又调用闭包来获取其子小部件的柏拉图式小部件。","fields":[{"name":"builder","type":"StatefulWidgetBuilder","required":true,"desc":"调用以获取子小部件。"}],"id":242,"localName":"状态构造器","lever":3,"family":1,"linkIds":[202,203,280,255],"nodes":[{"file":"node1_base.dart","name":"StatefulBuilder基本使用","desc":["【builder】 : 组件构造器 【StatefulWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_en-US.json deleted file mode 100644 index 9a950914d..000000000 --- a/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StatefulWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":" A widget that has mutable state.","fields":[],"id":530,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_zh-CN.json deleted file mode 100644 index d0a923ffe..000000000 --- a/modules/widget_system/widgets/doc/widgets/StatefulWidget/StatefulWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StatefulWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":"具有可变状态的小部件。","fields":[],"id":530,"localName":"StatefulWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_en-US.json deleted file mode 100644 index e05c44681..000000000 --- a/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StatelessWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":" A widget that does not require mutable state.","fields":[],"id":531,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_zh-CN.json deleted file mode 100644 index 56d648d93..000000000 --- a/modules/widget_system/widgets/doc/widgets/StatelessWidget/StatelessWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StatelessWidget","path":"/src/widgets/framework.dart","abstract":true,"parents":["Widget"],"desc":"不需要可变状态的小部件。","fields":[],"id":531,"localName":"StatelessWidget","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_en-US.json deleted file mode 100644 index c5c677df4..000000000 --- a/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StatusTransitionWidget","path":"/src/widgets/status_transitions.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" A widget that rebuilds when the given animation changes status.","fields":[{"name":"animation","type":"Animation","required":true,"desc":"The animation to which this widget is listening."}],"id":233,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to StatusTransitionWidget","desc":["【animation】 : Child component 【Animation】","Here, a custom ColorStatusTransitionWidget is used to build different colors when the state of the animator changes."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_zh-CN.json deleted file mode 100644 index 3a8a3af1a..000000000 --- a/modules/widget_system/widgets/doc/widgets/StatusTransitionWidget/StatusTransitionWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StatusTransitionWidget","path":"/src/widgets/status_transitions.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"当给定动画更改状态时重建的小部件。","fields":[{"name":"animation","type":"Animation","required":true,"desc":"此小部件正在监听的动画。"}],"id":233,"localName":"状态转变组件","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"StatusTransitionWidget 介绍","desc":["【animation】 : 子组件 【Animation】","这里自定义 ColorStatusTransitionWidget 进行使用,在动画器的状态改变时构建不同的颜色。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_en-US.json b/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_en-US.json deleted file mode 100644 index 8111d1f6e..000000000 --- a/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Stepper","path":"/src/material/stepper.dart","parents":["StatefulWidget","Widget"],"desc":" A material stepper widget that displays progress through a sequence of steps. Steppers are particularly useful in the case of forms where one step requires the completion of another one, or where multiple steps need to be completed in order to submit the whole form.","fields":[{"name":"steps","type":"List","required":true,"desc":"The steps of the stepper whose titles, subtitles, icons always get shown."},{"name":"physics","type":"ScrollPhysics?","desc":"How the stepper's scroll view should respond to user input."},{"name":"controller","type":"ScrollController?","desc":"An object that can be used to control the position to which this scroll view is scrolled."},{"name":"type","type":"StepperType","required":true,"desc":"The type of stepper that determines the layout. In the case of [StepperType.horizontal], the content of the current step is displayed underneath as opposed to the [StepperType.vertical] case where it is displayed in-between."},{"name":"currentStep","type":"int","required":true,"desc":"The index into [steps] of the current step whose content is displayed."},{"name":"onStepTapped","type":"ValueChanged?","desc":"The callback called when a step is tapped, with its index passed as an argument."},{"name":"onStepContinue","type":"VoidCallback?","desc":"The callback called when the 'continue' button is tapped."},{"name":"onStepCancel","type":"VoidCallback?","desc":"The callback called when the 'cancel' button is tapped."},{"name":"controlsBuilder","type":"ControlsWidgetBuilder?","desc":"The callback for creating custom controls."},{"name":"elevation","type":"double?","desc":"The elevation of this stepper's [Material] when [type] is [StepperType.horizontal]."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"Custom margin on vertical stepper."},{"name":"connectorColor","type":"MaterialStateProperty?","desc":"Customize connected lines colors."},{"name":"connectorThickness","type":"double?","desc":"The thickness of the connecting lines."},{"name":"stepIconBuilder","type":"StepIconBuilder?","desc":"Callback for creating custom icons for the [steps]."},{"name":"stepIconHeight","type":"double?","desc":"Overrides the default step icon size height."},{"name":"stepIconWidth","type":"double?","desc":"Overrides the default step icon size width."},{"name":"stepIconMargin","type":"EdgeInsets?","desc":"Overrides the default step icon margin."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"The [Step.content] will be clipped to this Clip type."}],"id":200,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Stepper","desc":["【steps】: Step list 【List】","【currentStep】: Current step 【double】","【onStepTapped】: Click callback 【ValueChanged】","【onStepCancel】: Previous step callback 【VoidCallback】","【controlsBuilder】: Controller construction 【ControlsWidgetBuilder】"]},{"file":"node2_type.dart","name":"Direction of Stepper","desc":["【type】: Direction 【StepperType】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_zh-CN.json deleted file mode 100644 index bf5fab3a9..000000000 --- a/modules/widget_system/widgets/doc/widgets/Stepper/Stepper_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Stepper","path":"/src/material/stepper.dart","parents":["StatefulWidget","Widget"],"desc":"显示通过一系列步骤进度的 material 步进器小部件。步进器在表单中特别有用,其中一个步骤需要完成另一个步骤,或者需要按顺序完成多个步骤才能提交整个表单。","fields":[{"name":"steps","type":"List","required":true,"desc":"步进器的步骤,其标题、副标题、图标始终显示。"},{"name":"physics","type":"ScrollPhysics?","desc":"步进器的滚动视图应如何响应用户输入。"},{"name":"controller","type":"ScrollController?","desc":"可用于控制此滚动视图滚动到的位置的对象。"},{"name":"type","type":"StepperType","required":true,"desc":"确定布局的步进器类型。在 [StepperType.horizontal] 的情况下,当前步骤的内容显示在下方,而不是 [StepperType.vertical] 情况下显示在中间。"},{"name":"currentStep","type":"int","required":true,"desc":"显示其内容的当前步骤在 [steps] 中的索引。"},{"name":"onStepTapped","type":"ValueChanged?","desc":"点击步骤时调用的回调,将其索引作为参数传递。"},{"name":"onStepContinue","type":"VoidCallback?","desc":"点击"},{"name":"onStepCancel","type":"VoidCallback?","desc":"点击"},{"name":"controlsBuilder","type":"ControlsWidgetBuilder?","desc":"创建自定义控件的回调。"},{"name":"elevation","type":"double?","desc":"当 [type] 为 [StepperType.horizontal] 时此步进器的 [Material] 的高度。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"垂直步进器上的自定义边距。"},{"name":"connectorColor","type":"MaterialStateProperty?","desc":"自定义连接线颜色。"},{"name":"connectorThickness","type":"double?","desc":"连接线的厚度。"},{"name":"stepIconBuilder","type":"StepIconBuilder?","desc":"为 [steps] 创建自定义图标的回调。"},{"name":"stepIconHeight","type":"double?","desc":"覆盖默认步骤图标大小高度。"},{"name":"stepIconWidth","type":"double?","desc":"覆盖默认步骤图标大小宽度。"},{"name":"stepIconMargin","type":"EdgeInsets?","desc":"覆盖默认步骤图标边距。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"[Step.content] 将被裁剪到此 Clip 类型。"}],"id":200,"localName":"步骤组件","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Stepper基本使用","desc":["【steps】 : 步骤列表 【List】","【currentStep】 : 当前步骤 【double】","【onStepTapped】 : 点击回调 【ValueChanged】","【onStepCancel】 : 上一步回调 【VoidCallback】","【controlsBuilder】 : 控制器构造 【ControlsWidgetBuilder】"]},{"file":"node2_type.dart","name":"Stepper的方向","desc":["【type】 : 方向 【StepperType】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_en-US.json deleted file mode 100644 index 0150161d1..000000000 --- a/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StreamBuilder","path":"/src/widgets/async.dart","parents":["StreamBuilderBase","StatefulWidget","Widget"],"desc":" Widget that builds itself based on the latest snapshot of interaction with a [Stream].","fields":[{"name":"builder","type":"AsyncWidgetBuilder","required":true,"desc":"The build strategy currently used by this builder."},{"name":"initialData","type":"T?","desc":"The data that will be used to create the initial snapshot."}],"id":173,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of StreamBuilder","desc":["【stream】 : Child component 【Stream】","【initialData】 : Initial data 【T】","【builder】 : Click event 【AsyncWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_zh-CN.json deleted file mode 100644 index 31bbc1189..000000000 --- a/modules/widget_system/widgets/doc/widgets/StreamBuilder/StreamBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StreamBuilder","path":"/src/widgets/async.dart","parents":["StreamBuilderBase","StatefulWidget","Widget"],"desc":"基于与 [Stream] 交互的最新快照构建自身的小部件。","fields":[{"name":"builder","type":"AsyncWidgetBuilder","required":true,"desc":"此构建器当前使用的构建策略。"},{"name":"initialData","type":"T?","desc":"将用于创建初始快照的数据。"}],"id":173,"localName":"流构造器","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"StreamBuilder基本使用","desc":["【stream】 : 子组件 【Stream】","【initialData】 : 初始数据 【T】","【builder】 : 点击事件 【AsyncWidgetBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_en-US.json b/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_en-US.json deleted file mode 100644 index 98ee8900a..000000000 --- a/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StreamBuilderBase","path":"/src/widgets/async.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" Base class for widgets that build themselves based on interaction with a specified [Stream].","fields":[{"name":"stream","type":"Stream?","desc":"The asynchronous computation to which this builder is currently connected, possibly null. When changed, the current summary is updated using [afterDisconnected], if the previous stream was not null, followed by [afterConnected], if the new stream is not null."}],"id":532,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_zh-CN.json deleted file mode 100644 index 8ce8ee271..000000000 --- a/modules/widget_system/widgets/doc/widgets/StreamBuilderBase/StreamBuilderBase_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StreamBuilderBase","path":"/src/widgets/async.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"基于与指定 [Stream] 交互构建自身的小部件的基类。","fields":[{"name":"stream","type":"Stream?","desc":"此构建器当前连接的异步计算,可能为 null。更改时,如果先前的流不为 null,则使用 [afterDisconnected] 更新当前摘要,如果新流不为 null,则使用 [afterConnected]。"}],"id":532,"localName":"StreamBuilderBase","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_en-US.json deleted file mode 100644 index 88a0f7da3..000000000 --- a/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StretchingOverscrollIndicator","path":"/src/widgets/overscroll_indicator.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design visual indication that a scroll view has overscrolled.","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@macro flutter.overscroll.axisDirection}"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@macro flutter.overscroll.notificationPredicate}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":533,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_zh-CN.json deleted file mode 100644 index 538c02fd4..000000000 --- a/modules/widget_system/widgets/doc/widgets/StretchingOverscrollIndicator/StretchingOverscrollIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"StretchingOverscrollIndicator","path":"/src/widgets/overscroll_indicator.dart","parents":["StatefulWidget","Widget"],"desc":"滚动视图已过度滚动的 Material Design 视觉指示。","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"{@macro flutter.overscroll.axisDirection}"},{"name":"notificationPredicate","type":"ScrollNotificationPredicate","required":true,"desc":"{@macro flutter.overscroll.notificationPredicate}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":533,"localName":"StretchingOverscrollIndicator","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_en-US.json b/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_en-US.json deleted file mode 100644 index a2ddecdfd..000000000 --- a/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SubmenuButton","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":" A menu button that displays a cascading menu.","fields":[{"name":"onHover","type":"ValueChanged?","desc":"Called when a pointer enters or exits the button response area."},{"name":"onFocusChange","type":"ValueChanged?","desc":"Handler called when the focus changes."},{"name":"onOpen","type":"VoidCallback?","desc":"A callback that is invoked when the menu is opened."},{"name":"onClose","type":"VoidCallback?","desc":"A callback that is invoked when the menu is closed."},{"name":"controller","type":"MenuController?","desc":"An optional [MenuController] for this submenu."},{"name":"style","type":"ButtonStyle?","desc":"Customizes this button's appearance."},{"name":"menuStyle","type":"MenuStyle?","desc":"The [MenuStyle] of the menu specified by [menuChildren]."},{"name":"alignmentOffset","type":"Offset?","desc":"The offset of the menu relative to the alignment origin determined by [MenuStyle.alignment] on the [style] attribute."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"leadingIcon","type":"Widget?","desc":"An optional icon to display before the [child]."},{"name":"submenuIcon","type":"MaterialStateProperty?","desc":"If provided, the widget replaces the default [SubmenuButton] arrow icon."},{"name":"trailingIcon","type":"Widget?","desc":"An optional icon to display after the [child]."},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@macro flutter.widgets.RawMenuAnchor.useRootOverlay}"},{"name":"menuChildren","type":"List","required":true,"desc":"The list of widgets that appear in the menu when it is opened."},{"name":"child","type":"Widget?","desc":"The widget displayed in the middle portion of this button."}],"id":534,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_zh-CN.json deleted file mode 100644 index 36765be6d..000000000 --- a/modules/widget_system/widgets/doc/widgets/SubmenuButton/SubmenuButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SubmenuButton","path":"/src/material/menu_anchor.dart","parents":["StatefulWidget","Widget"],"desc":"显示级联菜单的菜单按钮。","fields":[{"name":"onHover","type":"ValueChanged?","desc":"指针进入或退出按钮响应区域时调用。"},{"name":"onFocusChange","type":"ValueChanged?","desc":"焦点更改时调用的处理程序。"},{"name":"onOpen","type":"VoidCallback?","desc":"菜单打开时调用的回调。"},{"name":"onClose","type":"VoidCallback?","desc":"菜单关闭时调用的回调。"},{"name":"controller","type":"MenuController?","desc":"此子菜单的可选 [MenuController]。"},{"name":"style","type":"ButtonStyle?","desc":"自定义此按钮的外观。"},{"name":"menuStyle","type":"MenuStyle?","desc":"由 [menuChildren] 指定的菜单的 [MenuStyle]。"},{"name":"alignmentOffset","type":"Offset?","desc":"菜单相对于由 [style] 属性上的 [MenuStyle.alignment] 确定的对齐原点的偏移。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"statesController","type":"MaterialStatesController?","desc":"{@macro flutter.material.inkwell.statesController}"},{"name":"leadingIcon","type":"Widget?","desc":"在 [child] 之前显示的可选图标。"},{"name":"submenuIcon","type":"MaterialStateProperty?","desc":"如果提供,小部件将替换默认的 [SubmenuButton] 箭头图标。"},{"name":"trailingIcon","type":"Widget?","desc":"在 [child] 之后显示的可选图标。"},{"name":"useRootOverlay","type":"bool","required":true,"desc":"{@macro flutter.widgets.RawMenuAnchor.useRootOverlay}"},{"name":"menuChildren","type":"List","required":true,"desc":"菜单打开时出现在菜单中的小部件列表。"},{"name":"child","type":"Widget?","desc":"显示在此按钮中间部分的小部件。"}],"id":534,"localName":"SubmenuButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Switch/Switch_en-US.json b/modules/widget_system/widgets/doc/widgets/Switch/Switch_en-US.json deleted file mode 100644 index 59e02ae4b..000000000 --- a/modules/widget_system/widgets/doc/widgets/Switch/Switch_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Switch","path":"/src/material/switch.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design switch.","fields":[{"name":"value","type":"bool","required":true,"desc":"Whether this switch is on or off."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user toggles the switch on or off."},{"name":"activeColor","type":"Color?","desc":"{@template flutter.material.switch.activeColor} The color to use when this switch is on. {@endtemplate}"},{"name":"activeTrackColor","type":"Color?","desc":"{@template flutter.material.switch.activeTrackColor} The color to use on the track when this switch is on. {@endtemplate}"},{"name":"inactiveThumbColor","type":"Color?","desc":"{@template flutter.material.switch.inactiveThumbColor} The color to use on the thumb when this switch is off. {@endtemplate}"},{"name":"inactiveTrackColor","type":"Color?","desc":"{@template flutter.material.switch.inactiveTrackColor} The color to use on the track when this switch is off. {@endtemplate}"},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@template flutter.material.switch.activeThumbImage} An image to use on the thumb of this switch when the switch is on. {@endtemplate}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@template flutter.material.switch.onActiveThumbImageError} An optional error callback for errors emitted when loading [activeThumbImage]. {@endtemplate}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@template flutter.material.switch.inactiveThumbImage} An image to use on the thumb of this switch when the switch is off. {@endtemplate}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@template flutter.material.switch.onInactiveThumbImageError} An optional error callback for errors emitted when loading [inactiveThumbImage]. {@endtemplate}"},{"name":"thumbColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.thumbColor} The color of this [Switch]'s thumb."},{"name":"trackColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackColor} The color of this [Switch]'s track."},{"name":"trackOutlineColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackOutlineColor} The outline color of this [Switch]'s track."},{"name":"trackOutlineWidth","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackOutlineWidth} The outline width of this [Switch]'s track."},{"name":"thumbIcon","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.thumbIcon} The icon to use on the thumb of this switch"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.switch.materialTapTargetSize} Configures the minimum size of the tap target. {@endtemplate}"},{"name":"applyCupertinoTheme","type":"bool?","desc":"{@macro flutter.cupertino.CupertinoSwitch.applyTheme}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.cupertino.CupertinoSwitch.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.switch.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"focusColor","type":"Color?","desc":"The color for the button's [Material] when it has the input focus."},{"name":"hoverColor","type":"Color?","desc":"The color for the button's [Material] when a pointer is hovering over it."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.overlayColor} The color for the switch's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.switch.splashRadius} The splash radius of the circular [Material] ink response. {@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space to surround the child inside the bounds of the [Switch]."}],"id":40,"lever":4,"family":1,"linkIds":[41,18],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Switch","desc":["【inactiveThumbColor】 : Unselected small circle color 【Color】","【inactiveTrackColor】 : Unselected track color 【Color】","【activeColor】 : Selected small circle color 【Color】","【activeTrackColor】 : Selected track color 【Color】","【onChanged】 : Toggle callback 【Function(double)】","When onChanged, callbacks for true, null, and false states"]},{"file":"node2_image.dart","name":"Switch Image","desc":["【inactiveThumbImage】 : Unselected small circle image 【ImageProvider】","【activeThumbImage】 : Selected small circle image 【ImageProvider】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Switch/Switch_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Switch/Switch_zh-CN.json deleted file mode 100644 index 24f63615c..000000000 --- a/modules/widget_system/widgets/doc/widgets/Switch/Switch_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Switch","path":"/src/material/switch.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design 开关。","fields":[{"name":"value","type":"bool","required":true,"desc":"此开关是打开还是关闭。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户打开或关闭开关时调用。"},{"name":"activeColor","type":"Color?","desc":"{@template flutter.material.switch.activeColor} 此开关打开时使用的颜色。{@endtemplate}"},{"name":"activeTrackColor","type":"Color?","desc":"{@template flutter.material.switch.activeTrackColor} 此开关打开时轨道上使用的颜色。{@endtemplate}"},{"name":"inactiveThumbColor","type":"Color?","desc":"{@template flutter.material.switch.inactiveThumbColor} 此开关关闭时拇指上使用的颜色。{@endtemplate}"},{"name":"inactiveTrackColor","type":"Color?","desc":"{@template flutter.material.switch.inactiveTrackColor} 此开关关闭时轨道上使用的颜色。{@endtemplate}"},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@template flutter.material.switch.activeThumbImage} 开关打开时在此开关拇指上使用的图像。{@endtemplate}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@template flutter.material.switch.onActiveThumbImageError} 加载 [activeThumbImage] 时发出错误的可选错误回调。{@endtemplate}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@template flutter.material.switch.inactiveThumbImage} 开关关闭时在此开关拇指上使用的图像。{@endtemplate}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@template flutter.material.switch.onInactiveThumbImageError} 加载 [inactiveThumbImage] 时发出错误的可选错误回调。{@endtemplate}"},{"name":"thumbColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.thumbColor} 此 [Switch] 拇指的颜色。"},{"name":"trackColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackColor} 此 [Switch] 轨道的颜色。"},{"name":"trackOutlineColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackOutlineColor} 此 [Switch] 轨道的轮廓颜色。"},{"name":"trackOutlineWidth","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.trackOutlineWidth} 此 [Switch] 轨道的轮廓宽度。"},{"name":"thumbIcon","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.thumbIcon} 在此开关拇指上使用的图标"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@template flutter.material.switch.materialTapTargetSize} 配置点击目标的最小大小。{@endtemplate}"},{"name":"applyCupertinoTheme","type":"bool?","desc":"{@macro flutter.cupertino.CupertinoSwitch.applyTheme}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.cupertino.CupertinoSwitch.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.switch.mouseCursor} 鼠标指针进入或悬停在小部件上时的光标。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时按钮的 [Material] 的颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在按钮上时按钮的 [Material] 的颜色。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"{@template flutter.material.switch.overlayColor} 开关的 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@template flutter.material.switch.splashRadius} 圆形 [Material] 墨水响应的飞溅半径。{@endtemplate}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"在 [Switch] 边界内围绕子项的空间量。"}],"id":40,"localName":"切钮","lever":4,"family":1,"linkIds":[41,18],"nodes":[{"file":"node1_base.dart","name":"Switch基础用法","desc":["【inactiveThumbColor】 : 未选中小圈颜色 【Color】","【inactiveTrackColor】 : 未选中滑槽颜色 【Color】","【activeColor】 : 选中时小圈颜色 【Color】","【activeTrackColor】 : 选中时滑槽颜色 【Color】","【onChanged】 : 切换回调 【Function(double)】\""," onChanged时,回调true、null、false三种状态"]},{"file":"node2_image.dart","name":"Switch图片","desc":["【inactiveThumbImage】 : 未选中小圈图片 【ImageProvider】","【activeThumbImage】 : 选中小圈图片 【ImageProvider】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_en-US.json b/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_en-US.json deleted file mode 100644 index 9bf64ba45..000000000 --- a/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SwitchListTile","path":"/src/material/switch_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":" A [ListTile] with a [Switch]. In other words, a switch with a label.","fields":[{"name":"value","type":"bool","required":true,"desc":"Whether this switch is checked."},{"name":"onChanged","type":"ValueChanged?","desc":"Called when the user toggles the switch on or off."},{"name":"activeColor","type":"Color?","desc":"{@macro flutter.material.switch.activeColor}"},{"name":"activeTrackColor","type":"Color?","desc":"{@macro flutter.material.switch.activeTrackColor}"},{"name":"inactiveThumbColor","type":"Color?","desc":"{@macro flutter.material.switch.inactiveThumbColor}"},{"name":"inactiveTrackColor","type":"Color?","desc":"{@macro flutter.material.switch.inactiveTrackColor}"},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.activeThumbImage}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onActiveThumbImageError}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.inactiveThumbImage}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onInactiveThumbImageError}"},{"name":"thumbColor","type":"MaterialStateProperty?","desc":"The color of this switch's thumb."},{"name":"trackColor","type":"MaterialStateProperty?","desc":"The color of this switch's track."},{"name":"trackOutlineColor","type":"MaterialStateProperty?","desc":"{@macro flutter.material.switch.trackOutlineColor}"},{"name":"thumbIcon","type":"MaterialStateProperty?","desc":"The icon to use on the thumb of this switch"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.switch.materialTapTargetSize}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.cupertino.CupertinoSwitch.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"The color for the switch's [Material]."},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.switch.splashRadius}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tileColor","type":"Color?","desc":"{@macro flutter.material.ListTile.tileColor}"},{"name":"title","type":"Widget?","desc":"The primary content of the list tile."},{"name":"subtitle","type":"Widget?","desc":"Additional content displayed below the title."},{"name":"secondary","type":"Widget?","desc":"A widget to display on the opposite side of the tile from the switch."},{"name":"isThreeLine","type":"bool","required":true,"desc":"Whether this list tile is intended to display three lines of text."},{"name":"dense","type":"bool?","desc":"Whether this list tile is part of a vertically dense list."},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"The tile's internal padding."},{"name":"selected","type":"bool","required":true,"desc":"Whether to render icons and text in the [activeColor]."},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"Defines the position of control and [secondary], relative to text."},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.ListTile.shape}"},{"name":"selectedTileColor","type":"Color?","desc":"If non-null, defines the background color when [SwitchListTile.selected] is true."},{"name":"visualDensity","type":"VisualDensity?","desc":"Defines how compact the list tile's layout will be."},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"hoverColor","type":"Color?","desc":"The color for the tile's [Material] when a pointer is hovering over it."},{"name":"applyCupertinoTheme","type":"bool?","desc":"{@macro flutter.cupertino.CupertinoSwitch.applyTheme}"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"Whether to add button:true to the semantics if onTap is provided. This is a temporary flag to help changing the behavior of ListTile onTap semantics."}],"id":18,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic representation of SwitchListTile","desc":["【secondary】: Left component 【Widget】","【title】: Top middle component 【Widget】","【subtitle】: Bottom middle component 【Widget】","【inactiveThumbColor】: Circle color when not selected 【Color】","【inactiveTrackColor】: Track color when not selected 【Color】","【activeColor】: Circle color when selected 【Color】","【activeTrackColor】: Track color when selected 【Color】","【onChanged】: Selection event 【Function(bool)】"]},{"file":"node2_select.dart","name":"Selection effect of SwitchListTile","desc":["【selected】: Whether selected 【bool】","【inactiveThumbImage】: Circle image when not selected 【ImageProvider】","【activeThumbImage】: Circle image when selected 【ImageProvider】"]},{"file":"node3_dense.dart","name":"Dense property of SwitchListTile","desc":["【dense】: Whether dense 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_zh-CN.json deleted file mode 100644 index 7b9c69549..000000000 --- a/modules/widget_system/widgets/doc/widgets/SwitchListTile/SwitchListTile_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SwitchListTile","path":"/src/material/switch_list_tile.dart","parents":["StatelessWidget","Widget"],"desc":"带有 [Switch] 的 [ListTile]。换句话说,带有标签的开关。","fields":[{"name":"value","type":"bool","required":true,"desc":"此开关是否被选中。"},{"name":"onChanged","type":"ValueChanged?","desc":"用户打开或关闭开关时调用。"},{"name":"activeColor","type":"Color?","desc":"{@macro flutter.material.switch.activeColor}"},{"name":"activeTrackColor","type":"Color?","desc":"{@macro flutter.material.switch.activeTrackColor}"},{"name":"inactiveThumbColor","type":"Color?","desc":"{@macro flutter.material.switch.inactiveThumbColor}"},{"name":"inactiveTrackColor","type":"Color?","desc":"{@macro flutter.material.switch.inactiveTrackColor}"},{"name":"activeThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.activeThumbImage}"},{"name":"onActiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onActiveThumbImageError}"},{"name":"inactiveThumbImage","type":"ImageProvider?","desc":"{@macro flutter.material.switch.inactiveThumbImage}"},{"name":"onInactiveThumbImageError","type":"ImageErrorListener?","desc":"{@macro flutter.material.switch.onInactiveThumbImageError}"},{"name":"thumbColor","type":"MaterialStateProperty?","desc":"此开关拇指的颜色。"},{"name":"trackColor","type":"MaterialStateProperty?","desc":"此开关轨道的颜色。"},{"name":"trackOutlineColor","type":"MaterialStateProperty?","desc":"{@macro flutter.material.switch.trackOutlineColor}"},{"name":"thumbIcon","type":"MaterialStateProperty?","desc":"在此开关拇指上使用的图标"},{"name":"materialTapTargetSize","type":"MaterialTapTargetSize?","desc":"{@macro flutter.material.switch.materialTapTargetSize}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.cupertino.CupertinoSwitch.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"开关的 [Material] 的颜色。"},{"name":"splashRadius","type":"double?","desc":"{@macro flutter.material.switch.splashRadius}"},{"name":"focusNode","type":"FocusNode?","desc":"{@macro flutter.widgets.Focus.focusNode}"},{"name":"onFocusChange","type":"ValueChanged?","desc":"{@macro flutter.material.inkwell.onFocusChange}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.Focus.autofocus}"},{"name":"tileColor","type":"Color?","desc":"{@macro flutter.material.ListTile.tileColor}"},{"name":"title","type":"Widget?","desc":"列表瓦片的主要内容。"},{"name":"subtitle","type":"Widget?","desc":"显示在标题下方的附加内容。"},{"name":"secondary","type":"Widget?","desc":"在瓦片与开关相对侧显示的小部件。"},{"name":"isThreeLine","type":"bool","required":true,"desc":"此列表瓦片是否旨在显示三行文本。"},{"name":"dense","type":"bool?","desc":"此列表瓦片是否是垂直密集列表的一部分。"},{"name":"contentPadding","type":"EdgeInsetsGeometry?","desc":"瓦片的内部内边距。"},{"name":"selected","type":"bool","required":true,"desc":"是否以 [activeColor] 渲染图标和文本。"},{"name":"controlAffinity","type":"ListTileControlAffinity?","desc":"定义控件和 [secondary] 相对于文本的位置。"},{"name":"shape","type":"ShapeBorder?","desc":"{@macro flutter.material.ListTile.shape}"},{"name":"selectedTileColor","type":"Color?","desc":"如果非空,定义 [SwitchListTile.selected] 为 true 时的背景颜色。"},{"name":"visualDensity","type":"VisualDensity?","desc":"定义列表瓦片布局的紧凑程度。"},{"name":"enableFeedback","type":"bool?","desc":"{@macro flutter.material.ListTile.enableFeedback}"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在瓦片上时瓦片的 [Material] 的颜色。"},{"name":"applyCupertinoTheme","type":"bool?","desc":"{@macro flutter.cupertino.CupertinoSwitch.applyTheme}"},{"name":"internalAddSemanticForOnTap","type":"bool","required":true,"desc":"如果提供了 onTap,是否向语义添加 button:true。这是一个临时标志,用于帮助更改 ListTile onTap 语义的行为。"}],"id":18,"localName":"切钮瓦片","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"SwitchListTile的基本表现如下","desc":["【secondary】: 左侧组件 【Widget】","【title】: 中间上组件 【Widget】","【subtitle】: 中间下组件 【Widget】","【inactiveThumbColor】: 未选中时圆圈颜色 【Color】","【inactiveTrackColor】: 未选中滑槽颜色 【Color】","【activeColor】: 选中时圆圈颜色 【Color】","【activeTrackColor】: 选中滑槽颜色 【Color】","【onChanged】: 选中事件 【Function(bool)】"]},{"file":"node2_select.dart","name":"SwitchListTile的选中效果","desc":["【selected】: 是否选中 【bool】","【inactiveThumbImage】: 未选中时圆圈图片 【ImageProvider】","【activeThumbImage】: 选中时圆圈图片 【ImageProvider】"]},{"file":"node3_dense.dart","name":"SwitchListTile的密排属性","desc":["【dense】: 是否密排 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_en-US.json deleted file mode 100644 index 5c164cec5..000000000 --- a/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SwitchTheme","path":"/src/material/switch_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a switch theme to descendant [Switch] widgets.","fields":[{"name":"data","type":"SwitchThemeData","required":true,"desc":"The properties used for all descendant [Switch] widgets."}],"id":535,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_zh-CN.json deleted file mode 100644 index 0395a89b8..000000000 --- a/modules/widget_system/widgets/doc/widgets/SwitchTheme/SwitchTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SwitchTheme","path":"/src/material/switch_theme.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将开关主题应用于后代 [Switch] 小部件。","fields":[{"name":"data","type":"SwitchThemeData","required":true,"desc":"用于所有后代 [Switch] 小部件的属性。"}],"id":535,"localName":"SwitchTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_en-US.json b/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_en-US.json deleted file mode 100644 index 8edee1a51..000000000 --- a/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SystemContextMenu","path":"/src/widgets/system_context_menu.dart","parents":["StatefulWidget","Widget"],"desc":" Displays the system context menu on top of the Flutter view.","fields":[{"name":"anchor","type":"Rect","required":true,"desc":"The [Rect] that the context menu should point to."},{"name":"items","type":"List","required":true,"desc":"A list of the items to be displayed in the system context menu."},{"name":"onSystemHide","type":"VoidCallback?","desc":"Called when the system hides this context menu."}],"id":536,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_zh-CN.json b/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_zh-CN.json deleted file mode 100644 index 59ec9cced..000000000 --- a/modules/widget_system/widgets/doc/widgets/SystemContextMenu/SystemContextMenu_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"SystemContextMenu","path":"/src/widgets/system_context_menu.dart","parents":["StatefulWidget","Widget"],"desc":"在 Flutter 视图顶部显示系统上下文菜单。","fields":[{"name":"anchor","type":"Rect","required":true,"desc":"上下文菜单应指向的 [Rect]。"},{"name":"items","type":"List","required":true,"desc":"要在系统上下文菜单中显示的项目列表。"},{"name":"onSystemHide","type":"VoidCallback?","desc":"系统隐藏此上下文菜单时调用。"}],"id":536,"localName":"SystemContextMenu","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Tab/Tab_en-US.json b/modules/widget_system/widgets/doc/widgets/Tab/Tab_en-US.json deleted file mode 100644 index 0813c5fd4..000000000 --- a/modules/widget_system/widgets/doc/widgets/Tab/Tab_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Tab","path":"/src/material/tabs.dart","parents":["StatelessWidget","Widget"],"desc":" A Material Design [TabBar] tab.","fields":[{"name":"text","type":"String?","desc":"The text to display as the tab's label."},{"name":"child","type":"Widget?","desc":"The widget to be used as the tab's label."},{"name":"icon","type":"Widget?","desc":"An icon to display as the tab's label."},{"name":"iconMargin","type":"EdgeInsetsGeometry?","desc":"The margin added around the tab's icon."},{"name":"height","type":"double?","desc":"The height of the [Tab]."}],"id":148,"lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Tab","desc":["【child】: Child component 【Widget】","【text】: Text 【String】","【icon】: Bottom component 【Widget】"," text and child cannot exist simultaneously"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Tab/Tab_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Tab/Tab_zh-CN.json deleted file mode 100644 index b932529ca..000000000 --- a/modules/widget_system/widgets/doc/widgets/Tab/Tab_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Tab","path":"/src/material/tabs.dart","parents":["StatelessWidget","Widget"],"desc":"Material Design [TabBar] 选项卡。","fields":[{"name":"text","type":"String?","desc":"作为选项卡标签显示的文本。"},{"name":"child","type":"Widget?","desc":"用作选项卡标签的小部件。"},{"name":"icon","type":"Widget?","desc":"作为选项卡标签显示的图标。"},{"name":"iconMargin","type":"EdgeInsetsGeometry?","desc":"选项卡图标周围添加的边距。"},{"name":"height","type":"double?","desc":"[Tab] 的高度。"}],"id":148,"localName":"标签","lever":1,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Tab基本使用","desc":["【child】 : 子组件 【Widget】","【text】 : 文字 【String】","【icon】 : 下方组件 【Widgit】"," text和child不能同时存在"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_en-US.json b/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_en-US.json deleted file mode 100644 index 1fbad7ec1..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabBar","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design primary tab bar.","fields":[{"name":"tabs","type":"List","required":true,"desc":"Typically a list of two or more [Tab] widgets."},{"name":"controller","type":"TabController?","desc":"This widget's selection and animation state."},{"name":"isScrollable","type":"bool","required":true,"desc":"Whether this tab bar can be scrolled horizontally."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the tab bar."},{"name":"indicatorColor","type":"Color?","desc":"The color of the line that appears below the selected tab."},{"name":"indicatorWeight","type":"double","required":true,"desc":"The thickness of the line that appears below the selected tab."},{"name":"indicatorPadding","type":"EdgeInsetsGeometry","required":true,"desc":"The padding for the indicator."},{"name":"indicator","type":"Decoration?","desc":"Defines the appearance of the selected tab indicator."},{"name":"automaticIndicatorColorAdjustment","type":"bool","required":true,"desc":"Whether this tab bar should automatically adjust the [indicatorColor]."},{"name":"indicatorSize","type":"TabBarIndicatorSize?","desc":"Defines how the selected tab indicator's size is computed."},{"name":"dividerColor","type":"Color?","desc":"The color of the divider."},{"name":"dividerHeight","type":"double?","desc":"The height of the divider."},{"name":"labelColor","type":"Color?","desc":"The color of selected tab labels."},{"name":"unselectedLabelColor","type":"Color?","desc":"The color of unselected tab labels."},{"name":"labelStyle","type":"TextStyle?","desc":"The text style of the selected tab labels."},{"name":"unselectedLabelStyle","type":"TextStyle?","desc":"The text style of the unselected tab labels."},{"name":"labelPadding","type":"EdgeInsetsGeometry?","desc":"The padding added to each of the tab labels."},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"Defines the ink response focus, hover, and splash colors."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.tabs.mouseCursor} The cursor for a mouse pointer when it enters or is hovering over the individual tab widgets."},{"name":"enableFeedback","type":"bool?","desc":"Whether detected gestures should provide acoustic and/or haptic feedback."},{"name":"onTap","type":"ValueChanged?","desc":"An optional callback that's called when the [TabBar] is tapped."},{"name":"onHover","type":"TabValueChanged?","desc":"An optional callback that's called when a [Tab]'s hover state in the [TabBar] changes."},{"name":"onFocusChange","type":"TabValueChanged?","desc":"An optional callback that's called when a [Tab]'s focus state in the [TabBar] changes."},{"name":"physics","type":"ScrollPhysics?","desc":"How the [TabBar]'s scroll view should respond to user input."},{"name":"splashFactory","type":"InteractiveInkFeatureFactory?","desc":"Creates the tab bar's [InkWell] splash factory, which defines the appearance of \"ink\" splashes that occur in response to taps."},{"name":"splashBorderRadius","type":"BorderRadius?","desc":"Defines the clipping radius of splashes that extend outside the bounds of the tab."},{"name":"tabAlignment","type":"TabAlignment?","desc":"Specifies the horizontal alignment of the tabs within a [TabBar]."},{"name":"textScaler","type":"TextScaler?","desc":"Specifies the text scaling behavior for the [Tab] label."},{"name":"indicatorAnimation","type":"TabIndicatorAnimation?","desc":"Specifies the animation behavior of the tab indicator."}],"id":58,"lever":3,"family":1,"linkIds":[57,59,148],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TabBar","desc":["【controller】 : Controller 【TabController】","【indicatorColor】 : Indicator Color 【Indicator Color】","【indicatorWeight】 : Indicator Height 【double】","【indicatorPadding】 : Indicator Margin 【EdgeInsetsGeometry】","【labelStyle】 : Tab Text Style 【TextStyle】","【unselectedLabelStyle】 : Unselected Text Style 【TextStyle】","【isScrollable】 : Whether Scrollable 【bool】","【onTap】 : Tab Click Callback 【Function(int)】","【tabs】 : Tab Components 【List】"]},{"file":"node2_noShadow.dart","name":"Achieve No Ripple Effect by Setting Theme","desc":["Set the ripple color in the Theme to transparent."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_zh-CN.json deleted file mode 100644 index ec378338f..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabBar/TabBar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabBar","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 主选项卡栏。","fields":[{"name":"tabs","type":"List","required":true,"desc":"通常是两个或更多 [Tab] 小部件的列表。"},{"name":"controller","type":"TabController?","desc":"此小部件的选择和动画状态。"},{"name":"isScrollable","type":"bool","required":true,"desc":"此选项卡栏是否可以水平滚动。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"插入选项卡栏的空间量。"},{"name":"indicatorColor","type":"Color?","desc":"出现在选定选项卡下方的线的颜色。"},{"name":"indicatorWeight","type":"double","required":true,"desc":"出现在选定选项卡下方的线的厚度。"},{"name":"indicatorPadding","type":"EdgeInsetsGeometry","required":true,"desc":"指示器的内边距。"},{"name":"indicator","type":"Decoration?","desc":"定义选定选项卡指示器的外观。"},{"name":"automaticIndicatorColorAdjustment","type":"bool","required":true,"desc":"此选项卡栏是否应自动调整 [indicatorColor]。"},{"name":"indicatorSize","type":"TabBarIndicatorSize?","desc":"定义如何计算选定选项卡指示器的大小。"},{"name":"dividerColor","type":"Color?","desc":"分隔符的颜色。"},{"name":"dividerHeight","type":"double?","desc":"分隔符的高度。"},{"name":"labelColor","type":"Color?","desc":"选定选项卡标签的颜色。"},{"name":"unselectedLabelColor","type":"Color?","desc":"未选定选项卡标签的颜色。"},{"name":"labelStyle","type":"TextStyle?","desc":"选定选项卡标签的文本样式。"},{"name":"unselectedLabelStyle","type":"TextStyle?","desc":"未选定选项卡标签的文本样式。"},{"name":"labelPadding","type":"EdgeInsetsGeometry?","desc":"添加到每个选项卡标签的内边距。"},{"name":"overlayColor","type":"MaterialStateProperty?","desc":"定义墨水响应焦点、悬停和飞溅颜色。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@template flutter.material.tabs.mouseCursor} 鼠标指针进入或悬停在各个选项卡小部件上时的光标。"},{"name":"enableFeedback","type":"bool?","desc":"检测到的手势是否应提供声音和/或触觉反馈。"},{"name":"onTap","type":"ValueChanged?","desc":"点击 [TabBar] 时调用的可选回调。"},{"name":"onHover","type":"TabValueChanged?","desc":"[TabBar] 中 [Tab] 的悬停状态发生变化时调用的可选回调。"},{"name":"onFocusChange","type":"TabValueChanged?","desc":"[TabBar] 中 [Tab] 的焦点状态发生变化时调用的可选回调。"},{"name":"physics","type":"ScrollPhysics?","desc":"[TabBar] 的滚动视图应如何响应用户输入。"},{"name":"splashFactory","type":"InteractiveInkFeatureFactory?","desc":"创建选项卡栏的 [InkWell] 飞溅工厂,定义响应点击而出现的"},{"name":"splashBorderRadius","type":"BorderRadius?","desc":"定义延伸到选项卡边界之外的飞溅的裁剪半径。"},{"name":"tabAlignment","type":"TabAlignment?","desc":"指定 [TabBar] 内选项卡的水平对齐。"},{"name":"textScaler","type":"TextScaler?","desc":"指定 [Tab] 标签的文本缩放行为。"},{"name":"indicatorAnimation","type":"TabIndicatorAnimation?","desc":"指定选项卡指示器的动画行为。"}],"id":58,"localName":"标签栏","lever":3,"family":1,"linkIds":[57,59,148],"nodes":[{"file":"node1_base.dart","name":"TabBar基本使用","desc":["【controller】 : 控制器 【TabController】","【indicatorColor】 : 指示器颜色 【指示器颜色】","【indicatorWeight】 : 指示器高 【double】","【indicatorPadding】 : 指示器边距 【EdgeInsetsGeometry】","【labelStyle】 : 页签文字样式 【TextStyle】","【unselectedLabelStyle】 : 未选中文字样式 【TextStyle】","【isScrollable】 : 是否可滑动 【bool】","【onTap】 : 页签点击回调 【Function(int)】","【tabs】 : 标签组件 【List】"]},{"file":"node2_noShadow.dart","name":"通过设置Theme可实现无水波纹","desc":["将Theme关于水波纹的颜色设置为透明即可。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_en-US.json deleted file mode 100644 index d3d0343e1..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabBarTheme","path":"/src/material/tab_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Defines a theme for [TabBar] widgets.","fields":[],"id":537,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_zh-CN.json deleted file mode 100644 index 3b92fec07..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabBarTheme/TabBarTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabBarTheme","path":"/src/material/tab_bar_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为 [TabBar] 小部件定义主题。","fields":[],"id":537,"localName":"TabBarTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_en-US.json b/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_en-US.json deleted file mode 100644 index e93a1e222..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabBarView","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":" A page view that displays the widget which corresponds to the currently selected tab.","fields":[{"name":"controller","type":"TabController?","desc":"This widget's selection and animation state."},{"name":"children","type":"List","required":true,"desc":"One widget per tab."},{"name":"physics","type":"ScrollPhysics?","desc":"How the page view should respond to user input."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"viewportFraction","type":"double","required":true,"desc":"{@macro flutter.widgets.pageview.viewportFraction}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":59,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TabBarView needs to be used in conjunction with TabBar","desc":["【controller】 : Controller 【TabController】","【children】 : Children 【Indicator Color】","【physics】 : Behavior 【ScrollPhysics】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_zh-CN.json deleted file mode 100644 index 143f3f73d..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabBarView/TabBarView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabBarView","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":"显示与当前选定选项卡对应的小部件的页面视图。","fields":[{"name":"controller","type":"TabController?","desc":"此小部件的选择和动画状态。"},{"name":"children","type":"List","required":true,"desc":"每个选项卡一个小部件。"},{"name":"physics","type":"ScrollPhysics?","desc":"页面视图应如何响应用户输入。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"viewportFraction","type":"double","required":true,"desc":"{@macro flutter.widgets.pageview.viewportFraction}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":59,"localName":"标签页","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TabBarView需要与TabBar联用","desc":["【controller】 : 控制器 【TabController】","【children】 : 孩子们 【指示器颜色】","【physics】 : 表现 【ScrollPhysics】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_en-US.json b/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_en-US.json deleted file mode 100644 index a4ab4ac40..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabPageSelector","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":" Uses [TabPageSelectorIndicator] to display a row of small circular indicators, one per tab.","fields":[{"name":"controller","type":"TabController?","desc":"This widget's selection and animation state."},{"name":"indicatorSize","type":"double","required":true,"desc":"The indicator circle's diameter (the default value is 12.0)."},{"name":"color","type":"Color?","desc":"The indicator circle's fill color for unselected pages."},{"name":"selectedColor","type":"Color?","desc":"The indicator circle's fill color for selected pages and border color for all indicator circles."},{"name":"borderStyle","type":"BorderStyle?","desc":"The indicator circle's border style."}],"id":205,"lever":2,"family":0,"linkIds":[206,59],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TabPageSelector","desc":["【controller】 : Controller 【TabController】","【indicatorSize】: Indicator Size 【double】","【selectedColor】: Selected Color 【Color】","【color】: Color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_zh-CN.json deleted file mode 100644 index af98d402d..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabPageSelector/TabPageSelector_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabPageSelector","path":"/src/material/tabs.dart","parents":["StatefulWidget","Widget"],"desc":"使用 [TabPageSelectorIndicator] 显示一行小圆形指示器,每个选项卡一个。","fields":[{"name":"controller","type":"TabController?","desc":"此小部件的选择和动画状态。"},{"name":"indicatorSize","type":"double","required":true,"desc":"指示器圆圈的直径(默认值为 12.0)。"},{"name":"color","type":"Color?","desc":"未选定页面的指示器圆圈的填充颜色。"},{"name":"selectedColor","type":"Color?","desc":"选定页面的指示器圆圈的填充颜色和所有指示器圆圈的边框颜色。"},{"name":"borderStyle","type":"BorderStyle?","desc":"指示器圆圈的边框样式。"}],"id":205,"localName":"页签滑动选择器","lever":2,"family":0,"linkIds":[206,59],"nodes":[{"file":"node1_base.dart","name":"TabPageSelector基本使用","desc":["【controller】 : 控制器 【TabController】","【indicatorSize】: 指示器大小 【double】","【selectedColor】: 选中色 【Color】","【color】: 颜色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_en-US.json b/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_en-US.json deleted file mode 100644 index 300d872f6..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabPageSelectorIndicator","path":"/src/material/tabs.dart","parents":["StatelessWidget","Widget"],"desc":" Displays a single circle with the specified size, border style, border color and background colors.","fields":[{"name":"backgroundColor","type":"Color","required":true,"desc":"The indicator circle's background color."},{"name":"borderColor","type":"Color","required":true,"desc":"The indicator circle's border color."},{"name":"size","type":"double","required":true,"desc":"The indicator circle's diameter."},{"name":"borderStyle","type":"BorderStyle","required":true,"desc":"The indicator circle's border style."}],"id":206,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TabPageSelectorIndicator","desc":["【size】: size 【double】","【backgroundColor】: background color 【Color】","【borderColor】: border color 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_zh-CN.json deleted file mode 100644 index 90761263a..000000000 --- a/modules/widget_system/widgets/doc/widgets/TabPageSelectorIndicator/TabPageSelectorIndicator_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TabPageSelectorIndicator","path":"/src/material/tabs.dart","parents":["StatelessWidget","Widget"],"desc":"显示具有指定大小、边框样式、边框颜色和背景颜色的单个圆圈。","fields":[{"name":"backgroundColor","type":"Color","required":true,"desc":"指示器圆圈的背景颜色。"},{"name":"borderColor","type":"Color","required":true,"desc":"指示器圆圈的边框颜色。"},{"name":"size","type":"double","required":true,"desc":"指示器圆圈的直径。"},{"name":"borderStyle","type":"BorderStyle","required":true,"desc":"指示器圆圈的边框样式。"}],"id":206,"localName":"页签指示器","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TabPageSelectorIndicator基本使用","desc":["【size】: 大小 【double】","【backgroundColor】: 背景色 【Color】","【borderColor】: 边线色 【Color】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Table/Table_en-US.json b/modules/widget_system/widgets/doc/widgets/Table/Table_en-US.json deleted file mode 100644 index 48e1b49aa..000000000 --- a/modules/widget_system/widgets/doc/widgets/Table/Table_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Table","path":"/src/widgets/table.dart","parents":["RenderObjectWidget","Widget"],"desc":" A widget that uses the table layout algorithm for its children.","fields":[{"name":"children","type":"List","required":true,"desc":"The rows of the table."},{"name":"columnWidths","type":"Map?","desc":"How the horizontal extents of the columns of this table should be determined."},{"name":"defaultColumnWidth","type":"TableColumnWidth","required":true,"desc":"How to determine with widths of columns that don't have an explicit sizing algorithm."},{"name":"textDirection","type":"TextDirection?","desc":"The direction in which the columns are ordered."},{"name":"border","type":"TableBorder?","desc":"The style to use when painting the boundary and interior divisions of the table."},{"name":"defaultVerticalAlignment","type":"TableCellVerticalAlignment","required":true,"desc":"How cells that do not explicitly specify a vertical alignment are aligned vertically."},{"name":"textBaseline","type":"TextBaseline?","desc":"The text baseline to use when aligning rows using [TableCellVerticalAlignment.baseline]."}],"id":110,"lever":4,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Table","desc":["【children】: Component list 【List】","【columnWidths】: Column widths 【Map】","【defaultColumnWidth】: Default column width 【TableColumnWidth】","【border】: Border 【TableBorder】","【textDirection】: Text direction 【TextDirection】","【defaultVerticalAlignment】: Vertical alignment mode of cells 【TableCellVerticalAlignment】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Table/Table_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Table/Table_zh-CN.json deleted file mode 100644 index 30eecaeba..000000000 --- a/modules/widget_system/widgets/doc/widgets/Table/Table_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Table","path":"/src/widgets/table.dart","parents":["RenderObjectWidget","Widget"],"desc":"为其子项使用表格布局算法的小部件。","fields":[{"name":"children","type":"List","required":true,"desc":"表格的行。"},{"name":"columnWidths","type":"Map?","desc":"如何确定此表格列的水平范围。"},{"name":"defaultColumnWidth","type":"TableColumnWidth","required":true,"desc":"如何确定没有显式大小算法的列的宽度。"},{"name":"textDirection","type":"TextDirection?","desc":"列的排序方向。"},{"name":"border","type":"TableBorder?","desc":"绘制表格边界和内部分割时使用的样式。"},{"name":"defaultVerticalAlignment","type":"TableCellVerticalAlignment","required":true,"desc":"未明确指定垂直对齐的单元格如何垂直对齐。"},{"name":"textBaseline","type":"TextBaseline?","desc":"使用 [TableCellVerticalAlignment.baseline] 对齐行时使用的文本基线。"}],"id":110,"localName":"表格组件","lever":4,"family":6,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Table基本使用","desc":["【children】 : 组件列表 【List】","【columnWidths】 : 列宽 【Map】","【defaultColumnWidth】 : 默认列宽 【TableColumnWidth】","【border】 : 边线 【TableBorder】","【textDirection】 : 文字方向 【TextDirection】","【defaultVerticalAlignment】 : 单元格竖直方向对齐模式 【TableCellVerticalAlignment】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_en-US.json b/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_en-US.json deleted file mode 100644 index afdadd1c9..000000000 --- a/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TableCell","path":"/src/widgets/table.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that controls how a child of a [Table] is aligned.","fields":[{"name":"verticalAlignment","type":"TableCellVerticalAlignment?","desc":"How this cell is aligned vertically."},{"name":"child","type":"Widget","required":true,"desc":"The child of this cell."}],"id":317,"lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TableCell","desc":["【child】: Component 【Widget】","【verticalAlignment】: Vertical Alignment 【TableCellVerticalAlignment】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_zh-CN.json deleted file mode 100644 index 26f3a9156..000000000 --- a/modules/widget_system/widgets/doc/widgets/TableCell/TableCell_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TableCell","path":"/src/widgets/table.dart","parents":["StatelessWidget","Widget"],"desc":"控制 [Table] 的子项如何对齐的小部件。","fields":[{"name":"verticalAlignment","type":"TableCellVerticalAlignment?","desc":"此单元格如何垂直对齐。"},{"name":"child","type":"Widget","required":true,"desc":"此单元格的子项。"}],"id":317,"localName":"表室","lever":1,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TableCell基本使用","desc":["【child】 : 组件 【Widget】","【verticalAlignment】 : 竖直对齐方式 【TableCellVerticalAlignment】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_en-US.json b/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_en-US.json deleted file mode 100644 index 09e3f2a97..000000000 --- a/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TableRowInkWell","path":"/src/material/data_table.dart","parents":["InkResponse","StatelessWidget","Widget"],"desc":" A rectangular area of a Material that responds to touch but clips its ink splashes to the current table row of the nearest table.","fields":[],"id":151,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TableRowInkWell Basic Events","desc":["【child】 : Child component 【Widget】","【onTap】 : Click event 【Function()】","【onDoubleTap】 : Double-click event 【Function()】","【onLongPress】 : Long-press event 【Function()】","【onHighlightChanged】 : Highlight change callback 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_zh-CN.json deleted file mode 100644 index 9afb9bb7f..000000000 --- a/modules/widget_system/widgets/doc/widgets/TableRowInkWell/TableRowInkWell_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TableRowInkWell","path":"/src/material/data_table.dart","parents":["InkResponse","StatelessWidget","Widget"],"desc":"Material 的矩形区域,响应触摸但将其墨水飞溅裁剪到最近表格的当前表格行。","fields":[],"id":151,"localName":"表格水波纹","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TableRowInkWell基本事件","desc":["【child】 : 子组件 【Widget】","【onTap】 : 点击事件 【Function()】","【onDoubleTap】 : 双击事件 【Function()】","【onLongPress】 : 长按事件 【Function()】","【onHighlightChanged】 : 高亮变化回调 【Function(bool)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_en-US.json b/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_en-US.json deleted file mode 100644 index dfd931210..000000000 --- a/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TapRegion","path":"/src/widgets/tap_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that defines a region that can detect taps inside or outside of itself and any group of regions it belongs to, without participating in the [gesture disambiguation](https://flutter.dev/to/gesture-disambiguation) system (other than to consume tap down events if [consumeOutsideTaps] is true).","fields":[{"name":"enabled","type":"bool","required":true,"desc":"Whether or not this [TapRegion] is enabled as part of the composite region."},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"How to behave during hit testing when deciding how the hit test propagates to children and whether to consider targets behind this [TapRegion]."},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"A callback to be invoked when a tap down is detected outside of this [TapRegion] and any other region with the same [groupId], if any."},{"name":"onTapInside","type":"TapRegionCallback?","desc":"A callback to be invoked when a tap down is detected inside of this [TapRegion], or any other tap region with the same [groupId], if any."},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"A callback to be invoked when a tap up is detected outside of this [TapRegion] and any other region with the same [groupId], if any."},{"name":"onTapUpInside","type":"TapRegionUpCallback?","desc":"A callback to be invoked when a tap up is detected inside of this [TapRegion], or any other tap region with the same [groupId], if any."},{"name":"groupId","type":"Object?","desc":"An optional group ID that groups [TapRegion]s together so that they operate as one region. If any member of a group is hit by a particular tap, then the [onTapOutside] / [onTapUpOutside] will not be called for any members of the group. If any member of the group is hit, then all members will have their [onTapInside] / [onTapUpInside] called."},{"name":"consumeOutsideTaps","type":"bool","required":true,"desc":"If true, then the group that this region belongs to will stop the propagation of all events in the gesture arena."},{"name":"debugLabel","type":"String?","desc":"An optional debug label to help with debugging in debug mode."}],"id":280,"lever":4,"family":2,"linkIds":[146,54],"nodes":[{"file":"node1.dart","name":"Listen to clicks inside and outside the component","desc":["【enabled】 : Whether it is available 【bool】","【onTapOutside】 : Listen to clicks outside 【TapRegionCallback?】","【onTapInside】 : Listen to clicks inside 【TapRegionCallback?】","【groupId】 : Click region group identifier 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_zh-CN.json deleted file mode 100644 index 7f9e74b7c..000000000 --- a/modules/widget_system/widgets/doc/widgets/TapRegion/TapRegion_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TapRegion","path":"/src/widgets/tap_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"定义一个区域的小部件,该区域可以检测其内部或外部以及它所属的任何区域组的点击,而不参与[手势消歧](https://flutter.dev/to/gesture-disambiguation)系统(除了在 [consumeOutsideTaps] 为 true 时消费点击向下事件)。","fields":[{"name":"enabled","type":"bool","required":true,"desc":"此 [TapRegion] 是否作为复合区域的一部分启用。"},{"name":"behavior","type":"HitTestBehavior","required":true,"desc":"在命中测试期间如何表现,决定命中测试如何传播到子项以及是否考虑此 [TapRegion] 后面的目标。"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"在此 [TapRegion] 和具有相同 [groupId] 的任何其他区域之外检测到点击向下时要调用的回调(如果有)。"},{"name":"onTapInside","type":"TapRegionCallback?","desc":"在此 [TapRegion] 内部或具有相同 [groupId] 的任何其他点击区域内检测到点击向下时要调用的回调(如果有)。"},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"在此 [TapRegion] 和具有相同 [groupId] 的任何其他区域之外检测到点击向上时要调用的回调(如果有)。"},{"name":"onTapUpInside","type":"TapRegionUpCallback?","desc":"在此 [TapRegion] 内部或具有相同 [groupId] 的任何其他点击区域内检测到点击向上时要调用的回调(如果有)。"},{"name":"groupId","type":"Object?","desc":"将 [TapRegion] 组合在一起以便它们作为一个区域操作的可选组 ID。如果组的任何成员被特定点击命中,则不会为组的任何成员调用 [onTapOutside] / [onTapUpOutside]。如果组的任何成员被命中,则所有成员都将调用其 [onTapInside] / [onTapUpInside]。"},{"name":"consumeOutsideTaps","type":"bool","required":true,"desc":"如果为 true,则此区域所属的组将停止手势竞技场中所有事件的传播。"},{"name":"debugLabel","type":"String?","desc":"在调试模式下帮助调试的可选调试标签。"}],"id":280,"localName":"点击范围","lever":4,"family":2,"linkIds":[146,54],"nodes":[{"file":"node1.dart","name":"监听点击组件内部和外部","desc":["【enabled】 : 是否可用 【bool】","【onTapOutside】 : 点击外界监听 【TapRegionCallback?】","【onTapInside】 : 点击内部监听 【TapRegionCallback?】","【groupId】 : 点击区域组标识 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_en-US.json b/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_en-US.json deleted file mode 100644 index a8d4b9b37..000000000 --- a/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TapRegionSurface","path":"/src/widgets/tap_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that provides notification of a tap inside or outside of a set of registered regions, without participating in the [gesture disambiguation](https://flutter.dev/to/gesture-disambiguation) system.","fields":[],"id":538,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_zh-CN.json deleted file mode 100644 index fba258821..000000000 --- a/modules/widget_system/widgets/doc/widgets/TapRegionSurface/TapRegionSurface_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TapRegionSurface","path":"/src/widgets/tap_region.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"提供一组注册区域内部或外部点击通知的小部件,而不参与[手势消歧](https://flutter.dev/to/gesture-disambiguation)系统。","fields":[],"id":538,"localName":"TapRegionSurface","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Text/Text_en-US.json b/modules/widget_system/widgets/doc/widgets/Text/Text_en-US.json deleted file mode 100644 index 5f9cfd591..000000000 --- a/modules/widget_system/widgets/doc/widgets/Text/Text_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Text","path":"/src/widgets/text.dart","parents":["StatelessWidget","Widget"],"desc":" A run of text with a single style.","fields":[{"name":"data","type":"String?","desc":"The text to display."},{"name":"textSpan","type":"InlineSpan?","desc":"The text to display as a [InlineSpan]."},{"name":"style","type":"TextStyle?","desc":"If non-null, the style to use for this text."},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.painting.textPainter.strutStyle}"},{"name":"textAlign","type":"TextAlign?","desc":"How the text should be aligned horizontally."},{"name":"textDirection","type":"TextDirection?","desc":"The directionality of the text."},{"name":"locale","type":"Locale?","desc":"Used to select a font when the same Unicode character can be rendered differently, depending on the locale."},{"name":"softWrap","type":"bool?","desc":"Whether the text should break at soft line breaks."},{"name":"overflow","type":"TextOverflow?","desc":"How visual overflow should be handled."},{"name":"textScaleFactor","type":"double?","desc":"Deprecated. Will be removed in a future version of Flutter. Use [textScaler] instead."},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"maxLines","type":"int?","desc":"An optional maximum number of lines for the text to span, wrapping if necessary. If the text exceeds the given number of lines, it will be truncated according to [overflow]."},{"name":"semanticsLabel","type":"String?","desc":"{@template flutter.widgets.Text.semanticsLabel} An alternative semantics label for this text."},{"name":"semanticsIdentifier","type":"String?","desc":"A unique identifier for the semantics node for this widget."},{"name":"textWidthBasis","type":"TextWidthBasis?","desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"selectionColor","type":"Color?","desc":"The color to use when painting the selection."}],"id":2,"lever":5,"family":0,"linkIds":[101,324],"nodes":[{"file":"node1.dart","name":"Basic Text Styles","desc":["【Parameter】 : Text 【String】","【style】: Text Style 【TextStyle】","【color】: Text Color 【Color】","【fontSize】: Font Size 【double】","【fontWeight】: Font Weight 【FontWeight】","【fontStyle】: Font Style 【fontStyle】","【letterSpacing】: Letter Spacing 【double】"]},{"file":"node2.dart","name":"Text Shadow","desc":["【shadows】 : Text Shadows 【List】","【backgroundColor】: Background Color 【Color】"]},{"file":"node3_decoration.dart","name":"Text Decoration","desc":["【fontFamily】 : Font Family 【String】","【decoration】: Decoration Line 【TextDecoration】","【decorationColor】: Decoration Line Color 【Color】","【decorationThickness】: Decoration Line Thickness 【double】","【decorationStyle】: Decoration Line Style 【TextDecorationStyle】"]},{"file":"node4_textAlign.dart","name":"Text Alignment","desc":["【textAlign】: Alignment 【TextAlign】","The following are: left, right, center, justify, start, end."]},{"file":"node5_textDirection.dart","name":"Text Direction and Maximum Lines","desc":["【maxLines】 : Maximum Lines 【int】","【textDirection】 : Text Direction 【TextDirection】","The following are: rtl, ltr."]},{"file":"node6_softWrap.dart","name":"Wrapping and Overflow Effects","desc":["【softWrap】 : Whether to Wrap 【bool】","【overflow】 : Overflow Effect 【TextOverflow】","When softWrap=false; overflow options are: clip, fade, ellipsis, visible."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Text/Text_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Text/Text_zh-CN.json deleted file mode 100644 index 70f64ff59..000000000 --- a/modules/widget_system/widgets/doc/widgets/Text/Text_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Text","path":"/src/widgets/text.dart","parents":["StatelessWidget","Widget"],"desc":"具有单一样式的文本运行。","fields":[{"name":"data","type":"String?","desc":"要显示的文本。"},{"name":"textSpan","type":"InlineSpan?","desc":"要显示为 [InlineSpan] 的文本。"},{"name":"style","type":"TextStyle?","desc":"如果非空,用于此文本的样式。"},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.painting.textPainter.strutStyle}"},{"name":"textAlign","type":"TextAlign?","desc":"文本应如何水平对齐。"},{"name":"textDirection","type":"TextDirection?","desc":"文本的方向性。"},{"name":"locale","type":"Locale?","desc":"当同一个 Unicode 字符可以根据区域设置以不同方式呈现时,用于选择字体。"},{"name":"softWrap","type":"bool?","desc":"文本是否应在软换行符处换行。"},{"name":"overflow","type":"TextOverflow?","desc":"应如何处理视觉溢出。"},{"name":"textScaleFactor","type":"double?","desc":"已弃用。将在 Flutter 的未来版本中删除。请改用 [textScaler]。"},{"name":"textScaler","type":"TextScaler?","desc":"{@macro flutter.painting.textPainter.textScaler}"},{"name":"maxLines","type":"int?","desc":"文本跨越的可选最大行数,必要时换行。如果文本超过给定的行数,将根据 [overflow] 截断。"},{"name":"semanticsLabel","type":"String?","desc":"{@template flutter.widgets.Text.semanticsLabel} 此文本的替代语义标签。"},{"name":"semanticsIdentifier","type":"String?","desc":"此小部件语义节点的唯一标识符。"},{"name":"textWidthBasis","type":"TextWidthBasis?","desc":"{@macro flutter.painting.textPainter.textWidthBasis}"},{"name":"textHeightBehavior","type":"ui.TextHeightBehavior?","desc":"{@macro dart.ui.textHeightBehavior}"},{"name":"selectionColor","type":"Color?","desc":"绘制选择时使用的颜色。"}],"id":2,"localName":"文字组件","lever":5,"family":0,"linkIds":[101,324],"nodes":[{"file":"node1.dart","name":"文字的基本样式","desc":["【入参】 : 文字 【String】","【style】: 文字样式 【TextStyle】","【color】: 文字样式 【Color】","【fontSize】: 文字大小 【double】","【fontWeight】: 字重 【FontWeight】","【fontStyle】: 字体样式 【fontStyle】","【letterSpacing】: 字距 【double】"]},{"file":"node2.dart","name":"文字阴影","desc":["【shadows】 : 文字 【List】","【backgroundColor】: 背景颜色 【Color】"]},{"file":"node3_decoration.dart","name":"文字装饰线","desc":["【fontFamily】 : 文字字体 【String】","【decoration】: 装饰线 【TextDecoration】","【decorationColor】: 装饰线颜色 【Color】","【decorationThickness】: 装饰线粗 【double】","【decorationStyle】: 装饰线样式 【TextDecorationStyle】"]},{"file":"node4_textAlign.dart","name":"文字对齐方式","desc":["【textAlign】: 对齐方式 【TextAlign】","下面依次是:left、right、center、justify、start、end,"]},{"file":"node5_textDirection.dart","name":"文字方向与最大行数","desc":["【maxLines】 : 最大行数 【int】","【textDirection】 : 文字方向 【TextDirection】","下面依次是:rtl、ltr,"]},{"file":"node6_softWrap.dart","name":"是否包裹与越界效果","desc":["【softWrap】 : 是否换行 【bool】","【overflow】 : 越界效果 【TextOverflow】","下面softWrap=false; overflow依次是:clip、fade、ellipsis、visible,"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_en-US.json b/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_en-US.json deleted file mode 100644 index 18a4ee1c5..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextButton","path":"/src/material/text_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":" A Material Design \"Text Button\".","fields":[],"id":353,"lever":3,"family":1,"linkIds":[354,355],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TextButton","desc":["【child】 : Whether it has a scrollable body 【Widget】","【onPressed】 : Click event 【VoidCallback】","【onLongPress】 : Long press event 【VoidCallback】"]},{"file":"node2_style.dart","name":"TextButton Style","desc":["【style】 : Button style 【ButtonStyle】","【focusNode】 : Focus 【FocusNode】","【clipBehavior】 : Clip behavior 【Clip】","【autofocus】 : Auto focus 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_zh-CN.json deleted file mode 100644 index 35652ce8b..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextButton/TextButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextButton","path":"/src/material/text_button.dart","parents":["ButtonStyleButton","StatefulWidget","Widget"],"desc":"Material Design 文本按钮。","fields":[],"id":353,"localName":"文字按钮","lever":3,"family":1,"linkIds":[354,355],"nodes":[{"file":"node1_base.dart","name":"TextButton基本使用","desc":["【child】 : 是否具有滚动主体 【Widget】","【onPressed】 : 点击事件 【VoidCallback】","【onLongPress】 : 长按事件 【VoidCallback】"]},{"file":"node2_style.dart","name":"TextButton样式","desc":["【style】 : 按钮样式 【ButtonStyle】","【focusNode】 : 焦点 【FocusNode】","【clipBehavior】 : 裁剪行为 【Clip】","【autofocus】 : 自动聚焦 【bool】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_en-US.json deleted file mode 100644 index f9cacb2d3..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextButtonTheme","path":"/src/material/text_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Overrides the default [ButtonStyle] of its [TextButton] descendants.","fields":[{"name":"data","type":"TextButtonThemeData","required":true,"desc":"The configuration of this theme."}],"id":539,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_zh-CN.json deleted file mode 100644 index 1b8fe6708..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextButtonTheme/TextButtonTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextButtonTheme","path":"/src/material/text_button_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"覆盖其 [TextButton] 后代的默认 [ButtonStyle]。","fields":[{"name":"data","type":"TextButtonThemeData","required":true,"desc":"此主题的配置。"}],"id":539,"localName":"TextButtonTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextField/TextField_en-US.json b/modules/widget_system/widgets/doc/widgets/TextField/TextField_en-US.json deleted file mode 100644 index 40c92423f..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextField/TextField_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextField","path":"/src/material/text_field.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design text field.","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"The configuration for the magnifier of this text field."},{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited."},{"name":"focusNode","type":"FocusNode?","desc":"Defines the keyboard focus for this widget."},{"name":"decoration","type":"InputDecoration?","desc":"The decoration to show around the text field."},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.widgets.editableText.keyboardType}"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@template flutter.widgets.TextField.textInputAction} The type of action button to use for the keyboard."},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"style","type":"TextStyle?","desc":"The style to use for the text being edited."},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@macro flutter.material.InputDecorator.textAlignVertical}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"statesController","type":"MaterialStatesController?","desc":"Represents the interactive \"state\" of this widget in terms of a set of [WidgetState]s, including [WidgetState.disabled], [WidgetState.hovered], [WidgetState.error], and [WidgetState.focused]."},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@macro flutter.widgets.editableText.obscuringCharacter}"},{"name":"obscureText","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.obscureText}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines} * [expands], which determines whether the field should fill the height of its parent."},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines} * [expands], which determines whether the field should fill the height of its parent."},{"name":"expands","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.expands}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.readOnly}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"Configuration of toolbar options."},{"name":"showCursor","type":"bool?","desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"maxLength","type":"int?","desc":"The maximum number of characters (Unicode grapheme clusters) to allow in the text field."},{"name":"maxLengthEnforcement","type":"MaxLengthEnforcement?","desc":"Determines how the [maxLength] limit should be enforced."},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onChanged}"},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@macro flutter.widgets.editableText.onEditingComplete}"},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onSubmitted}"},{"name":"onAppPrivateCommand","type":"AppPrivateCommandCallback?","desc":"{@macro flutter.widgets.editableText.onAppPrivateCommand}"},{"name":"inputFormatters","type":"List?","desc":"{@macro flutter.widgets.editableText.inputFormatters}"},{"name":"enabled","type":"bool?","desc":"If false the text field is \"disabled\": it ignores taps and its [decoration] is rendered in grey."},{"name":"ignorePointers","type":"bool?","desc":"Determines whether this widget ignores pointer events."},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius?","desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool?","desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"The color of the cursor."},{"name":"cursorErrorColor","type":"Color?","desc":"The color of the cursor when the [InputDecorator] is showing an error."},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"Controls how tall the selection highlight boxes are computed to be."},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"Controls how wide the selection highlight boxes are computed to be."},{"name":"keyboardAppearance","type":"Brightness?","desc":"The appearance of the keyboard."},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"onTap","type":"GestureTapCallback?","desc":"{@template flutter.material.textfield.onTap} Called for the first tap in a series of taps."},{"name":"onTapAlwaysCalled","type":"bool","required":true,"desc":"Whether [onTap] should be called for every tap."},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapOutside}"},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"{@macro flutter.widgets.editableText.onTapUpOutside}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"buildCounter","type":"InputCounterWidgetBuilder?","desc":"Callback that generates a custom [InputDecoration.counter] widget."},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.editableText.scrollController}"},{"name":"autofillHints","type":"Iterable?","desc":"{@macro flutter.widgets.editableText.autofillHints} {@macro flutter.services.AutofillConfiguration.autofillHints}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"{@template flutter.material.textfield.restorationId} Restoration ID to save and restore the state of the text field."},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.scribbleEnabled}"},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.stylusHandwritingEnabled}"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@macro flutter.widgets.editableText.contentInsertionConfiguration}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"canRequestFocus","type":"bool","required":true,"desc":"Determine whether this text field can request the primary focus."},{"name":"undoController","type":"UndoHistoryController?","desc":"{@macro flutter.widgets.undoHistory.controller}"},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@macro flutter.widgets.EditableText.spellCheckConfiguration}"}],"id":54,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TextField","desc":["【controller】 : Controller 【TextEditingController】","【style】 : Text Style 【TextStyle】","【decoration】 : Decoration 【InputDecoration】","【onEditingComplete】 : Input Completion Event 【Function()】","【onSubmitted】 : Submission Event 【Function(String)】","【onChanged】 : Input Event 【Function(String)】"]},{"file":"node2_cursor.dart","name":"Line Number and Cursor of TextField","desc":["【minLines】 : Minimum Lines 【int】","【maxLines】 : Maximum Lines 【int】","【cursorRadius】 : Cursor Radius 【Radius】","【cursorColor】 : Cursor Color 【Color】","【cursorWidth】 : Cursor Width 【double】","【showCursor】 : Whether to Show Cursor 【bool】","【autofocus】 : Auto Focus 【bool】"]},{"file":"node3_decoration.dart","name":"Complex Decoration of Decoration","desc":["InputDecoration has many decoration points, corresponding to the code:","border: Border related","helper: Bottom left corner related hints","counter: Bottom right corner related hints","prefix: Innermost left side of the input box","suffix: Innermost right side of the input box","label: Text when no focus","label: Text when no focus","hint: Hint text related","border: Border related"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextField/TextField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextField/TextField_zh-CN.json deleted file mode 100644 index adeb57e32..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextField/TextField_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextField","path":"/src/material/text_field.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 文本字段。","fields":[{"name":"magnifierConfiguration","type":"TextMagnifierConfiguration?","desc":"此文本字段放大镜的配置。"},{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"controller","type":"TextEditingController?","desc":"控制正在编辑的文本。"},{"name":"focusNode","type":"FocusNode?","desc":"定义此小部件的键盘焦点。"},{"name":"decoration","type":"InputDecoration?","desc":"在文本字段周围显示的装饰。"},{"name":"keyboardType","type":"TextInputType","required":true,"desc":"{@macro flutter.widgets.editableText.keyboardType}"},{"name":"textInputAction","type":"TextInputAction?","desc":"{@template flutter.widgets.TextField.textInputAction} 用于键盘的操作按钮类型。"},{"name":"textCapitalization","type":"TextCapitalization","required":true,"desc":"{@macro flutter.widgets.editableText.textCapitalization}"},{"name":"style","type":"TextStyle?","desc":"用于正在编辑的文本的样式。"},{"name":"strutStyle","type":"StrutStyle?","desc":"{@macro flutter.widgets.editableText.strutStyle}"},{"name":"textAlign","type":"TextAlign","required":true,"desc":"{@macro flutter.widgets.editableText.textAlign}"},{"name":"textAlignVertical","type":"TextAlignVertical?","desc":"{@macro flutter.material.InputDecorator.textAlignVertical}"},{"name":"textDirection","type":"TextDirection?","desc":"{@macro flutter.widgets.editableText.textDirection}"},{"name":"autofocus","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autofocus}"},{"name":"statesController","type":"MaterialStatesController?","desc":"表示此小部件在一组 [WidgetState] 方面的交互"},{"name":"obscuringCharacter","type":"String","required":true,"desc":"{@macro flutter.widgets.editableText.obscuringCharacter}"},{"name":"obscureText","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.obscureText}"},{"name":"autocorrect","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.autocorrect}"},{"name":"smartDashesType","type":"SmartDashesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartDashesType}"},{"name":"smartQuotesType","type":"SmartQuotesType","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.smartQuotesType}"},{"name":"enableSuggestions","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableSuggestions}"},{"name":"maxLines","type":"int?","desc":"{@macro flutter.widgets.editableText.maxLines} * [expands],确定字段是否应填充其父项的高度。"},{"name":"minLines","type":"int?","desc":"{@macro flutter.widgets.editableText.minLines} * [expands],确定字段是否应填充其父项的高度。"},{"name":"expands","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.expands}"},{"name":"readOnly","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.readOnly}"},{"name":"toolbarOptions","type":"ToolbarOptions?","desc":"工具栏选项的配置。"},{"name":"showCursor","type":"bool?","desc":"{@macro flutter.widgets.editableText.showCursor}"},{"name":"maxLength","type":"int?","desc":"文本字段中允许的最大字符数(Unicode 字素簇)。"},{"name":"maxLengthEnforcement","type":"MaxLengthEnforcement?","desc":"确定如何强制执行 [maxLength] 限制。"},{"name":"onChanged","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onChanged}"},{"name":"onEditingComplete","type":"VoidCallback?","desc":"{@macro flutter.widgets.editableText.onEditingComplete}"},{"name":"onSubmitted","type":"ValueChanged?","desc":"{@macro flutter.widgets.editableText.onSubmitted}"},{"name":"onAppPrivateCommand","type":"AppPrivateCommandCallback?","desc":"{@macro flutter.widgets.editableText.onAppPrivateCommand}"},{"name":"inputFormatters","type":"List?","desc":"{@macro flutter.widgets.editableText.inputFormatters}"},{"name":"enabled","type":"bool?","desc":"如果为 false,文本字段被"},{"name":"ignorePointers","type":"bool?","desc":"确定此小部件是否忽略指针事件。"},{"name":"cursorWidth","type":"double","required":true,"desc":"{@macro flutter.widgets.editableText.cursorWidth}"},{"name":"cursorHeight","type":"double?","desc":"{@macro flutter.widgets.editableText.cursorHeight}"},{"name":"cursorRadius","type":"Radius?","desc":"{@macro flutter.widgets.editableText.cursorRadius}"},{"name":"cursorOpacityAnimates","type":"bool?","desc":"{@macro flutter.widgets.editableText.cursorOpacityAnimates}"},{"name":"cursorColor","type":"Color?","desc":"光标的颜色。"},{"name":"cursorErrorColor","type":"Color?","desc":"[InputDecorator] 显示错误时光标的颜色。"},{"name":"selectionHeightStyle","type":"ui.BoxHeightStyle","required":true,"desc":"控制选择高亮框的计算高度。"},{"name":"selectionWidthStyle","type":"ui.BoxWidthStyle","required":true,"desc":"控制选择高亮框的计算宽度。"},{"name":"keyboardAppearance","type":"Brightness?","desc":"键盘的外观。"},{"name":"scrollPadding","type":"EdgeInsets","required":true,"desc":"{@macro flutter.widgets.editableText.scrollPadding}"},{"name":"enableInteractiveSelection","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.enableInteractiveSelection}"},{"name":"selectionControls","type":"TextSelectionControls?","desc":"{@macro flutter.widgets.editableText.selectionControls}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"onTap","type":"GestureTapCallback?","desc":"{@template flutter.material.textfield.onTap} 为一系列点击中的第一次点击调用。"},{"name":"onTapAlwaysCalled","type":"bool","required":true,"desc":"是否应为每次点击调用 [onTap]。"},{"name":"onTapOutside","type":"TapRegionCallback?","desc":"{@macro flutter.widgets.editableText.onTapOutside}"},{"name":"onTapUpOutside","type":"TapRegionUpCallback?","desc":"{@macro flutter.widgets.editableText.onTapUpOutside}"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"buildCounter","type":"InputCounterWidgetBuilder?","desc":"生成自定义 [InputDecoration.counter] 小部件的回调。"},{"name":"scrollPhysics","type":"ScrollPhysics?","desc":"{@macro flutter.widgets.editableText.scrollPhysics}"},{"name":"scrollController","type":"ScrollController?","desc":"{@macro flutter.widgets.editableText.scrollController}"},{"name":"autofillHints","type":"Iterable?","desc":"{@macro flutter.widgets.editableText.autofillHints} {@macro flutter.services.AutofillConfiguration.autofillHints}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"restorationId","type":"String?","desc":"{@template flutter.material.textfield.restorationId} 用于保存和恢复文本字段状态的恢复 ID。"},{"name":"scribbleEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.scribbleEnabled}"},{"name":"stylusHandwritingEnabled","type":"bool","required":true,"desc":"{@macro flutter.widgets.editableText.stylusHandwritingEnabled}"},{"name":"enableIMEPersonalizedLearning","type":"bool","required":true,"desc":"{@macro flutter.services.TextInputConfiguration.enableIMEPersonalizedLearning}"},{"name":"contentInsertionConfiguration","type":"ContentInsertionConfiguration?","desc":"{@macro flutter.widgets.editableText.contentInsertionConfiguration}"},{"name":"contextMenuBuilder","type":"EditableTextContextMenuBuilder?","desc":"{@macro flutter.widgets.EditableText.contextMenuBuilder}"},{"name":"canRequestFocus","type":"bool","required":true,"desc":"确定此文本字段是否可以请求主要焦点。"},{"name":"undoController","type":"UndoHistoryController?","desc":"{@macro flutter.widgets.undoHistory.controller}"},{"name":"spellCheckConfiguration","type":"SpellCheckConfiguration?","desc":"{@macro flutter.widgets.EditableText.spellCheckConfiguration}"}],"id":54,"localName":"输入框","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TextField基本用法","desc":["【controller】 : 控制器 【TextEditingController】","【style】 : 文字样式 【TextStyle】","【decoration】 : 装饰线 【InputDecoration】","【onEditingComplete】 : 输入完成事件 【Function()】","【onSubmitted】 : 提交事件 【Function(String)】","【onChanged】 : 输入事件 【Function(String)】"]},{"file":"node2_cursor.dart","name":"TextField行数和cursor","desc":["【minLines】 : 最小行数 【int】","【maxLines】 : 最大行数 【int】","【cursorRadius】 : 光标半径 【Radius】","【cursorColor】 : 光标颜色 【Color】","【cursorWidth】 : 光标宽度 【double】","【showCursor】 : 是否显示光标 【bool】","【autofocus】 : 自动聚焦 【bool】"]},{"file":"node3_decoration.dart","name":"decoration的复杂装饰","desc":["InputDecoration有非常多的装饰点,对应点缀见代码:","border: 边线相关","helper: 左下角相关提示","counter: 右下角相关提示","prefix: 输入框内部最左侧","suffix: 输入框内部最右侧","label: 无焦点时文字","label: 无焦点时文字","hint: 提示文字相关","border: 边线相关"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_en-US.json b/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_en-US.json deleted file mode 100644 index 4d4a3cc8c..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextFieldTapRegion","path":"/src/widgets/tap_region.dart","parents":["TapRegion","SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A [TapRegion] that adds its children to the tap region group for widgets based on the [EditableText] text editing widget, such as [TextField] and [CupertinoTextField].","fields":[],"id":281,"lever":3,"family":2,"linkIds":[280,54,245],"nodes":[{"file":"node1.dart","name":"Monitor Clicks Inside and Outside the Component","desc":["In the example, clicking the plus and minus signs does not cancel the focus of the input field, and the keyboard can still be used for input.","【enabled】 : Whether it is available 【bool】","【onTapOutside】 : External click listener 【TapRegionCallback?】","【onTapInside】 : Internal click listener 【TapRegionCallback?】","【groupId】 : Clickable area group identifier 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_zh-CN.json deleted file mode 100644 index 050575390..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextFieldTapRegion/TextFieldTapRegion_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextFieldTapRegion","path":"/src/widgets/tap_region.dart","parents":["TapRegion","SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"将其子项添加到基于 [EditableText] 文本编辑小部件(如 [TextField] 和 [CupertinoTextField])的小部件的点击区域组的 [TapRegion]。","fields":[],"id":281,"localName":"输入框点击范围","lever":3,"family":2,"linkIds":[280,54,245],"nodes":[{"file":"node1.dart","name":"监听点击组件内部和外部","desc":["案例中点击加号和减号,不会取消输入框的焦点,键盘仍然可以输入。","【enabled】 : 是否可用 【bool】","【onTapOutside】 : 点击外界监听 【TapRegionCallback?】","【onTapInside】 : 点击内部监听 【TapRegionCallback?】","【groupId】 : 点击区域组标识 【Object?】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_en-US.json b/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_en-US.json deleted file mode 100644 index 78f57b606..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextFormField","path":"/src/material/text_form_field.dart","parents":["FormField","StatefulWidget","Widget"],"desc":" A [FormField] that contains a [TextField].","fields":[{"name":"controller","type":"TextEditingController?","desc":"Controls the text being edited."},{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.material.TextFormField.onChanged} Called when the user initiates a change to the TextField's value: when they have inserted or deleted text or reset the form. {@endtemplate}"}],"id":199,"lever":4,"family":1,"linkIds":[54,198],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TextFormField","desc":["The basic properties are the same as TextField, see details there","【validator】: Validation function 【FormFieldValidator】","【onFieldSubmitted】: Submission callback 【ValueChanged】","【onSaved】: Callback when the form is saved 【FormFieldSetter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_zh-CN.json deleted file mode 100644 index efea97220..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextFormField/TextFormField_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextFormField","path":"/src/material/text_form_field.dart","parents":["FormField","StatefulWidget","Widget"],"desc":"包含 [TextField] 的 [FormField]。","fields":[{"name":"controller","type":"TextEditingController?","desc":"控制正在编辑的文本。"},{"name":"groupId","type":"Object","required":true,"desc":"{@macro flutter.widgets.editableText.groupId}"},{"name":"onChanged","type":"ValueChanged?","desc":"{@template flutter.material.TextFormField.onChanged} 当用户启动对 TextField 值的更改时调用:当他们插入或删除文本或重置表单时。{@endtemplate}"}],"id":199,"localName":"文字表单输入","lever":4,"family":1,"linkIds":[54,198],"nodes":[{"file":"node1_base.dart","name":"TextFormField基本使用","desc":["基本属性和TextField一致,详见之","【validator】 : 验证函数 【FormFieldValidator 】","【onFieldSubmitted】 : 提交回调 【ValueChanged】","【onSaved】 : 表单save时回调 【FormFieldSetter】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_en-US.json b/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_en-US.json deleted file mode 100644 index d4dd5e6a9..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextMagnifier","path":"/src/material/magnifier.dart","parents":["StatefulWidget","Widget"],"desc":" A [Magnifier] positioned by rules dictated by the native Android magnifier.","fields":[{"name":"magnifierInfo","type":"ValueNotifier","required":true,"desc":"The current status of the user's touch."}],"id":540,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_zh-CN.json deleted file mode 100644 index 64d79faee..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextMagnifier/TextMagnifier_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextMagnifier","path":"/src/material/magnifier.dart","parents":["StatefulWidget","Widget"],"desc":"由原生 Android 放大镜规则决定位置的 [Magnifier]。","fields":[{"name":"magnifierInfo","type":"ValueNotifier","required":true,"desc":"用户触摸的当前状态。"}],"id":540,"localName":"TextMagnifier","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_en-US.json b/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_en-US.json deleted file mode 100644 index 88b923e72..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextSelectionGestureDetector","path":"/src/widgets/text_selection.dart","parents":["StatefulWidget","Widget"],"desc":" A gesture detector to respond to non-exclusive event chains for a text field.","fields":[{"name":"onTapTrackStart","type":"VoidCallback?","desc":"{@template flutter.gestures.selectionrecognizers.TextSelectionGestureDetector.onTapTrackStart} Callback used to indicate that a tap tracking has started upon a [PointerDownEvent]. {@endtemplate}"},{"name":"onTapTrackReset","type":"VoidCallback?","desc":"{@template flutter.gestures.selectionrecognizers.TextSelectionGestureDetector.onTapTrackReset} Callback used to indicate that a tap tracking has been reset which happens on the next [PointerDownEvent] after the timer between two taps elapses, the recognizer loses the arena, the gesture is cancelled or the recognizer is disposed of. {@endtemplate}"},{"name":"onTapDown","type":"GestureTapDragDownCallback?","desc":"Called for every tap down including every tap down that's part of a double click or a long press, except touches that include enough movement to not qualify as taps (e.g. pans and flings)."},{"name":"onForcePressStart","type":"GestureForcePressStartCallback?","desc":"Called when a pointer has tapped down and the force of the pointer has just become greater than [ForcePressGestureRecognizer.startPressure]."},{"name":"onForcePressEnd","type":"GestureForcePressEndCallback?","desc":"Called when a pointer that had previously triggered [onForcePressStart] is lifted off the screen."},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"Called for a tap event with the secondary mouse button."},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"Called for a tap down event with the secondary mouse button."},{"name":"onSingleTapUp","type":"GestureTapDragUpCallback?","desc":"Called for the first tap in a series of taps, consecutive taps do not call this method."},{"name":"onSingleTapCancel","type":"GestureCancelCallback?","desc":"Called for each touch that becomes recognized as a gesture that is not a short tap, such as a long tap or drag. It is called at the moment when another gesture from the touch is recognized."},{"name":"onUserTap","type":"GestureTapCallback?","desc":"Called for the first tap in a series of taps when [onUserTapAlwaysCalled] is disabled, which is the default behavior."},{"name":"onSingleLongTapStart","type":"GestureLongPressStartCallback?","desc":"Called for a single long tap that's sustained for longer than [kLongPressTimeout] but not necessarily lifted. Not called for a double-tap-hold, which calls [onDoubleTapDown] instead."},{"name":"onSingleLongTapMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"Called after [onSingleLongTapStart] when the pointer is dragged."},{"name":"onSingleLongTapEnd","type":"GestureLongPressEndCallback?","desc":"Called after [onSingleLongTapStart] when the pointer is lifted."},{"name":"onDoubleTapDown","type":"GestureTapDragDownCallback?","desc":"Called after a momentary hold or a short tap that is close in space and time (within [kDoubleTapTimeout]) to a previous short tap."},{"name":"onTripleTapDown","type":"GestureTapDragDownCallback?","desc":"Called after a momentary hold or a short tap that is close in space and time (within [kDoubleTapTimeout]) to a previous double-tap."},{"name":"onDragSelectionStart","type":"GestureTapDragStartCallback?","desc":"Called when a mouse starts dragging to select text."},{"name":"onDragSelectionUpdate","type":"GestureTapDragUpdateCallback?","desc":"Called repeatedly as a mouse moves while dragging."},{"name":"onDragSelectionEnd","type":"GestureTapDragEndCallback?","desc":"Called when a mouse that was previously dragging is released."},{"name":"onUserTapAlwaysCalled","type":"bool","required":true,"desc":"Whether [onUserTap] will be called for all taps including consecutive taps."},{"name":"behavior","type":"HitTestBehavior?","desc":"How this gesture detector should behave during hit testing."},{"name":"child","type":"Widget","required":true,"desc":"Child below this widget."}],"id":541,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_zh-CN.json deleted file mode 100644 index cb13dfbbf..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextSelectionGestureDetector/TextSelectionGestureDetector_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextSelectionGestureDetector","path":"/src/widgets/text_selection.dart","parents":["StatefulWidget","Widget"],"desc":"响应文本字段的非独占事件链的手势检测器。","fields":[{"name":"onTapTrackStart","type":"VoidCallback?","desc":"{@template flutter.gestures.selectionrecognizers.TextSelectionGestureDetector.onTapTrackStart} 用于指示在 [PointerDownEvent] 上已开始点击跟踪的回调。{@endtemplate}"},{"name":"onTapTrackReset","type":"VoidCallback?","desc":"{@template flutter.gestures.selectionrecognizers.TextSelectionGestureDetector.onTapTrackReset} 用于指示点击跟踪已重置的回调,这发生在两次点击之间的计时器过期后的下一个 [PointerDownEvent] 上,识别器失去竞技场,手势被取消或识别器被处置。{@endtemplate}"},{"name":"onTapDown","type":"GestureTapDragDownCallback?","desc":"为每次点击向下调用,包括作为双击或长按一部分的每次点击向下,除了包含足够移动而不符合点击条件的触摸(例如平移和滑动)。"},{"name":"onForcePressStart","type":"GestureForcePressStartCallback?","desc":"当指针已点击向下且指针的力刚刚变得大于 [ForcePressGestureRecognizer.startPressure] 时调用。"},{"name":"onForcePressEnd","type":"GestureForcePressEndCallback?","desc":"当先前触发 [onForcePressStart] 的指针从屏幕上抬起时调用。"},{"name":"onSecondaryTap","type":"GestureTapCallback?","desc":"使用辅助鼠标按钮的点击事件调用。"},{"name":"onSecondaryTapDown","type":"GestureTapDownCallback?","desc":"使用辅助鼠标按钮的点击向下事件调用。"},{"name":"onSingleTapUp","type":"GestureTapDragUpCallback?","desc":"为一系列点击中的第一次点击调用,连续点击不调用此方法。"},{"name":"onSingleTapCancel","type":"GestureCancelCallback?","desc":"为每个被识别为非短点击手势(如长点击或拖动)的触摸调用。在触摸的另一个手势被识别的那一刻调用。"},{"name":"onUserTap","type":"GestureTapCallback?","desc":"当 [onUserTapAlwaysCalled] 被禁用时(这是默认行为),为一系列点击中的第一次点击调用。"},{"name":"onSingleLongTapStart","type":"GestureLongPressStartCallback?","desc":"为持续时间超过 [kLongPressTimeout] 但不一定抬起的单次长点击调用。不为双击保持调用,而是调用 [onDoubleTapDown]。"},{"name":"onSingleLongTapMoveUpdate","type":"GestureLongPressMoveUpdateCallback?","desc":"在 [onSingleLongTapStart] 之后当指针被拖动时调用。"},{"name":"onSingleLongTapEnd","type":"GestureLongPressEndCallback?","desc":"在 [onSingleLongTapStart] 之后当指针抬起时调用。"},{"name":"onDoubleTapDown","type":"GestureTapDragDownCallback?","desc":"在短暂保持或在空间和时间上接近(在 [kDoubleTapTimeout] 内)先前短点击的短点击之后调用。"},{"name":"onTripleTapDown","type":"GestureTapDragDownCallback?","desc":"在短暂保持或在空间和时间上接近(在 [kDoubleTapTimeout] 内)先前双击的短点击之后调用。"},{"name":"onDragSelectionStart","type":"GestureTapDragStartCallback?","desc":"当鼠标开始拖动以选择文本时调用。"},{"name":"onDragSelectionUpdate","type":"GestureTapDragUpdateCallback?","desc":"当鼠标在拖动时移动时重复调用。"},{"name":"onDragSelectionEnd","type":"GestureTapDragEndCallback?","desc":"当先前拖动的鼠标被释放时调用。"},{"name":"onUserTapAlwaysCalled","type":"bool","required":true,"desc":"是否为所有点击(包括连续点击)调用 [onUserTap]。"},{"name":"behavior","type":"HitTestBehavior?","desc":"此手势检测器在命中测试期间应如何表现。"},{"name":"child","type":"Widget","required":true,"desc":"此小部件下方的子项。"}],"id":541,"localName":"TextSelectionGestureDetector","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_en-US.json deleted file mode 100644 index fc0507e6f..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextSelectionTheme","path":"/src/material/text_selection_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the appearance of text selection in this widget's subtree.","fields":[{"name":"data","type":"TextSelectionThemeData","required":true,"desc":"The properties for descendant [TextField] and [SelectableText] widgets."}],"id":542,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_zh-CN.json deleted file mode 100644 index 0362e8687..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextSelectionTheme/TextSelectionTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextSelectionTheme","path":"/src/material/text_selection_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"定义此小部件子树中文本选择外观的继承小部件。","fields":[{"name":"data","type":"TextSelectionThemeData","required":true,"desc":"后代 [TextField] 和 [SelectableText] 小部件的属性。"}],"id":542,"localName":"TextSelectionTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_en-US.json b/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_en-US.json deleted file mode 100644 index 70d38ca24..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextSelectionToolbar","path":"/src/material/text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":" A fully-functional Material-style text selection toolbar.","fields":[{"name":"anchorAbove","type":"Offset","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.anchorAbove} The focal point above which the toolbar attempts to position itself."},{"name":"anchorBelow","type":"Offset","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.anchorBelow} The focal point below which the toolbar attempts to position itself, if it doesn't fit above [anchorAbove]. {@endtemplate}"},{"name":"children","type":"List","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.children} The children that will be displayed in the text selection toolbar."},{"name":"toolbarBuilder","type":"ToolbarBuilder","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.toolbarBuilder} Builds the toolbar container."}],"id":543,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_zh-CN.json deleted file mode 100644 index 2403b2071..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbar/TextSelectionToolbar_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextSelectionToolbar","path":"/src/material/text_selection_toolbar.dart","parents":["StatelessWidget","Widget"],"desc":"功能齐全的 Material 风格文本选择工具栏。","fields":[{"name":"anchorAbove","type":"Offset","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.anchorAbove} 工具栏尝试定位自己的上方焦点。"},{"name":"anchorBelow","type":"Offset","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.anchorBelow} 如果工具栏不适合在 [anchorAbove] 上方,则工具栏尝试定位自己的下方焦点。{@endtemplate}"},{"name":"children","type":"List","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.children} 将在文本选择工具栏中显示的子项。"},{"name":"toolbarBuilder","type":"ToolbarBuilder","required":true,"desc":"{@template flutter.material.TextSelectionToolbar.toolbarBuilder} 构建工具栏容器。"}],"id":543,"localName":"TextSelectionToolbar","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_en-US.json b/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_en-US.json deleted file mode 100644 index 9f907d4f1..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextSelectionToolbarTextButton","path":"/src/material/text_selection_toolbar_text_button.dart","parents":["StatelessWidget","Widget"],"desc":" A button styled like a Material native Android text selection menu button.","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@template flutter.material.TextSelectionToolbarTextButton.child} The child of this button."},{"name":"onPressed","type":"VoidCallback?","desc":"{@template flutter.material.TextSelectionToolbarTextButton.onPressed} Called when this button is pressed. {@endtemplate}"},{"name":"padding","type":"EdgeInsets","required":true,"desc":"The padding between the button's edge and its child."},{"name":"alignment","type":"AlignmentGeometry?","desc":"The alignment of the button's child."}],"id":544,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_zh-CN.json deleted file mode 100644 index ab63d380d..000000000 --- a/modules/widget_system/widgets/doc/widgets/TextSelectionToolbarTextButton/TextSelectionToolbarTextButton_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TextSelectionToolbarTextButton","path":"/src/material/text_selection_toolbar_text_button.dart","parents":["StatelessWidget","Widget"],"desc":"样式类似 Material 原生 Android 文本选择菜单按钮的按钮。","fields":[{"name":"child","type":"Widget","required":true,"desc":"{@template flutter.material.TextSelectionToolbarTextButton.child} 此按钮的子项。"},{"name":"onPressed","type":"VoidCallback?","desc":"{@template flutter.material.TextSelectionToolbarTextButton.onPressed} 按下此按钮时调用。{@endtemplate}"},{"name":"padding","type":"EdgeInsets","required":true,"desc":"按钮边缘与其子项之间的内边距。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"按钮子项的对齐。"}],"id":544,"localName":"TextSelectionToolbarTextButton","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Texture/Texture_en-US.json b/modules/widget_system/widgets/doc/widgets/Texture/Texture_en-US.json deleted file mode 100644 index 7724b90de..000000000 --- a/modules/widget_system/widgets/doc/widgets/Texture/Texture_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Texture","path":"/src/widgets/texture.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A rectangle upon which a backend texture is mapped.","fields":[{"name":"textureId","type":"int","required":true,"desc":"The identity of the backend texture."},{"name":"freeze","type":"bool","required":true,"desc":"When true the texture will not be updated with new frames."},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"{@template flutter.widgets.Texture.filterQuality} The quality of sampling the texture and rendering it on screen."}],"id":545,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Texture/Texture_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Texture/Texture_zh-CN.json deleted file mode 100644 index 9e722ae89..000000000 --- a/modules/widget_system/widgets/doc/widgets/Texture/Texture_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Texture","path":"/src/widgets/texture.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"映射后端纹理的矩形。","fields":[{"name":"textureId","type":"int","required":true,"desc":"后端纹理的标识。"},{"name":"freeze","type":"bool","required":true,"desc":"为 true 时,纹理不会用新帧更新。"},{"name":"filterQuality","type":"FilterQuality","required":true,"desc":"{@template flutter.widgets.Texture.filterQuality} 采样纹理并在屏幕上渲染的质量。"}],"id":545,"localName":"Texture","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Theme/Theme_en-US.json b/modules/widget_system/widgets/doc/widgets/Theme/Theme_en-US.json deleted file mode 100644 index 0e52979bf..000000000 --- a/modules/widget_system/widgets/doc/widgets/Theme/Theme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Theme","path":"/src/material/theme.dart","parents":["StatelessWidget","Widget"],"desc":" Applies a theme to descendant widgets.","fields":[{"name":"data","type":"ThemeData","required":true,"desc":"Specifies the color and typography values for descendant widgets."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":168,"lever":4,"family":0,"linkIds":[65,169,224],"nodes":[{"file":"node1_base.dart","name":"Text Style-ThemeData#TextTheme","desc":["Child components can use the theme data obtained through ThemeData.of."]},{"file":"node2_use.dart","name":"Usage of Theme","desc":["Using Theme, you can specify a wide range of properties as themes, which will be applied to all descendant components, such as specifying properties for fonts, sliders, cards, text, dividers, buttons, etc."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Theme/Theme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Theme/Theme_zh-CN.json deleted file mode 100644 index 929ef09e4..000000000 --- a/modules/widget_system/widgets/doc/widgets/Theme/Theme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Theme","path":"/src/material/theme.dart","parents":["StatelessWidget","Widget"],"desc":"将主题应用于后代小部件。","fields":[{"name":"data","type":"ThemeData","required":true,"desc":"指定后代小部件的颜色和排版值。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":168,"localName":"主题","lever":4,"family":0,"linkIds":[65,169,224],"nodes":[{"file":"node1_base.dart","name":"文字样式-ThemeData#TextTheme","desc":["子组件可以通过ThemeData.of获取主题的数据进行使用。"]},{"file":"node2_use.dart","name":"Theme的用法","desc":["使用Theme,可以指定非常多的属性作为主题,这些属性将应用于所有的后代组件,如指定字体、滑块、卡片、文字、分割线、按钮等属性。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_en-US.json b/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_en-US.json deleted file mode 100644 index 41888ddb0..000000000 --- a/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TickerMode","path":"/src/widgets/ticker_provider.dart","parents":["StatefulWidget","Widget"],"desc":" Enables or disables tickers (and thus animation controllers) in the widget subtree.","fields":[{"name":"enabled","type":"bool","required":true,"desc":"The requested ticker mode for this subtree."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":246,"lever":2,"family":1,"linkIds":[346],"nodes":[{"file":"node1.dart","name":"Unified Enable/Disable Animation","desc":["The enabled property of TickerMode can uniformly enable/disable the animation effects of the subtree."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_zh-CN.json deleted file mode 100644 index f9053a4f7..000000000 --- a/modules/widget_system/widgets/doc/widgets/TickerMode/TickerMode_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TickerMode","path":"/src/widgets/ticker_provider.dart","parents":["StatefulWidget","Widget"],"desc":"在小部件子树中启用或禁用计时器(以及动画控制器)。","fields":[{"name":"enabled","type":"bool","required":true,"desc":"此子树请求的计时器模式。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":246,"localName":"计时器模式","lever":2,"family":1,"linkIds":[346],"nodes":[{"file":"node1.dart","name":"统一禁用/启用动画","desc":["TickerMode 的 enabled 可以统一启用/禁用子树的动画效果。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_en-US.json b/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_en-US.json deleted file mode 100644 index bbdc4fc38..000000000 --- a/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TimePickerDialog","path":"/src/material/time_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design time picker designed to appear inside a popup dialog.","fields":[{"name":"initialTime","type":"TimeOfDay","required":true,"desc":"The time initially selected when the dialog is shown."},{"name":"cancelText","type":"String?","desc":"Optionally provide your own text for the cancel button."},{"name":"confirmText","type":"String?","desc":"Optionally provide your own text for the confirm button."},{"name":"helpText","type":"String?","desc":"Optionally provide your own help text to the header of the time picker."},{"name":"errorInvalidText","type":"String?","desc":"Optionally provide your own validation error text."},{"name":"hourLabelText","type":"String?","desc":"Optionally provide your own hour label text."},{"name":"minuteLabelText","type":"String?","desc":"Optionally provide your own minute label text."},{"name":"restorationId","type":"String?","desc":"Restoration ID to save and restore the state of the [TimePickerDialog]."},{"name":"initialEntryMode","type":"TimePickerEntryMode","required":true,"desc":"The entry mode for the picker. Whether it's text input or a dial."},{"name":"orientation","type":"Orientation?","desc":"The optional [orientation] parameter sets the [Orientation] to use when displaying the dialog."},{"name":"onEntryModeChanged","type":"EntryModeChangeCallback?","desc":"Callback called when the selected entry mode is changed."},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.time_picker.switchToInputEntryModeIcon}"},{"name":"switchToTimerEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.time_picker.switchToTimerEntryModeIcon}"}],"id":546,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_zh-CN.json deleted file mode 100644 index a5cabdf2b..000000000 --- a/modules/widget_system/widgets/doc/widgets/TimePickerDialog/TimePickerDialog_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TimePickerDialog","path":"/src/material/time_picker.dart","parents":["StatefulWidget","Widget"],"desc":"设计为出现在弹出对话框内的 Material Design 时间选择器。","fields":[{"name":"initialTime","type":"TimeOfDay","required":true,"desc":"显示对话框时最初选择的时间。"},{"name":"cancelText","type":"String?","desc":"可选择为取消按钮提供您自己的文本。"},{"name":"confirmText","type":"String?","desc":"可选择为确认按钮提供您自己的文本。"},{"name":"helpText","type":"String?","desc":"可选择为时间选择器标题提供您自己的帮助文本。"},{"name":"errorInvalidText","type":"String?","desc":"可选择提供您自己的验证错误文本。"},{"name":"hourLabelText","type":"String?","desc":"可选择提供您自己的小时标签文本。"},{"name":"minuteLabelText","type":"String?","desc":"可选择提供您自己的分钟标签文本。"},{"name":"restorationId","type":"String?","desc":"保存和恢复 [TimePickerDialog] 状态的恢复 ID。"},{"name":"initialEntryMode","type":"TimePickerEntryMode","required":true,"desc":"选择器的输入模式。是文本输入还是表盘。"},{"name":"orientation","type":"Orientation?","desc":"可选的 [orientation] 参数设置显示对话框时使用的 [Orientation]。"},{"name":"onEntryModeChanged","type":"EntryModeChangeCallback?","desc":"选定的输入模式更改时调用的回调。"},{"name":"switchToInputEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.time_picker.switchToInputEntryModeIcon}"},{"name":"switchToTimerEntryModeIcon","type":"Icon?","desc":"{@macro flutter.material.time_picker.switchToTimerEntryModeIcon}"}],"id":546,"localName":"TimePickerDialog","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_en-US.json deleted file mode 100644 index 974123189..000000000 --- a/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TimePickerTheme","path":"/src/material/time_picker_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines the configuration for time pickers displayed using [showTimePicker] in this widget's subtree.","fields":[{"name":"data","type":"TimePickerThemeData","required":true,"desc":"The properties for descendant time picker widgets."}],"id":547,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_zh-CN.json deleted file mode 100644 index 1a4d7996f..000000000 --- a/modules/widget_system/widgets/doc/widgets/TimePickerTheme/TimePickerTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TimePickerTheme","path":"/src/material/time_picker_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中使用 [showTimePicker] 显示的时间选择器定义配置的继承小部件。","fields":[{"name":"data","type":"TimePickerThemeData","required":true,"desc":"后代时间选择器小部件的属性。"}],"id":547,"localName":"TimePickerTheme","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Title/Title_en-US.json b/modules/widget_system/widgets/doc/widgets/Title/Title_en-US.json deleted file mode 100644 index 66b0b0894..000000000 --- a/modules/widget_system/widgets/doc/widgets/Title/Title_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Title","path":"/src/widgets/title.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that describes this app in the operating system.","fields":[{"name":"title","type":"String","required":true,"desc":"A one-line description of this app for use in the window manager."},{"name":"color","type":"Color","required":true,"desc":"A color that the window manager should use to identify this app. Must be an opaque color (i.e. color.alpha must be 255 (0xFF)), and must not be null."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":208,"lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Title","desc":["【title】: Name 【int】","【color】: Color 【Color】","【child】: Child Component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Title/Title_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Title/Title_zh-CN.json deleted file mode 100644 index 17302f6c5..000000000 --- a/modules/widget_system/widgets/doc/widgets/Title/Title_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Title","path":"/src/widgets/title.dart","parents":["StatelessWidget","Widget"],"desc":"在操作系统中描述此应用程序的小部件。","fields":[{"name":"title","type":"String","required":true,"desc":"在窗口管理器中使用的此应用程序的单行描述。"},{"name":"color","type":"Color","required":true,"desc":"窗口管理器应用于识别此应用程序的颜色。必须是不透明颜色(即 color.alpha 必须为 255 (0xFF)),且不能为 null。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":208,"localName":"应用标题","lever":2,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Title基本使用","desc":["【title】 : 名称 【int】","【color】: 颜色 【Color】","【child】: 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_en-US.json b/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_en-US.json deleted file mode 100644 index 8de947d6f..000000000 --- a/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ToggleButtons","path":"/src/material/toggle_buttons.dart","parents":["StatelessWidget","Widget"],"desc":" A set of toggle buttons.","fields":[{"name":"children","type":"List","required":true,"desc":"The toggle button widgets."},{"name":"isSelected","type":"List","required":true,"desc":"The corresponding selection state of each toggle button."},{"name":"onPressed","type":"void Function(int index)?","desc":"The callback that is called when a button is tapped."},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"tapTargetSize","type":"MaterialTapTargetSize?","desc":"Configures the minimum size of the area within which the buttons may be pressed."},{"name":"textStyle","type":"TextStyle?","desc":"The [TextStyle] to apply to any text in these toggle buttons."},{"name":"constraints","type":"BoxConstraints?","desc":"Defines the button's size."},{"name":"color","type":"Color?","desc":"The color for descendant [Text] and [Icon] widgets if the button is enabled and not selected."},{"name":"selectedColor","type":"Color?","desc":"The color for descendant [Text] and [Icon] widgets if the button is selected."},{"name":"disabledColor","type":"Color?","desc":"The color for descendant [Text] and [Icon] widgets if the button is disabled."},{"name":"fillColor","type":"Color?","desc":"The fill color for selected toggle buttons."},{"name":"focusColor","type":"Color?","desc":"The color to use for filling the button when the button has input focus."},{"name":"highlightColor","type":"Color?","desc":"The highlight color for the button's [InkWell]."},{"name":"splashColor","type":"Color?","desc":"The splash color for the button's [InkWell]."},{"name":"hoverColor","type":"Color?","desc":"The color to use for filling the button when the button has a pointer hovering over it."},{"name":"focusNodes","type":"List?","desc":"The list of [FocusNode]s, corresponding to each toggle button."},{"name":"renderBorder","type":"bool","required":true,"desc":"Whether or not to render a border around each toggle button."},{"name":"borderColor","type":"Color?","desc":"The border color to display when the toggle button is enabled and not selected."},{"name":"selectedBorderColor","type":"Color?","desc":"The border color to display when the toggle button is selected."},{"name":"disabledBorderColor","type":"Color?","desc":"The border color to display when the toggle button is disabled."},{"name":"borderWidth","type":"double?","desc":"The width of the border surrounding each toggle button."},{"name":"borderRadius","type":"BorderRadius?","desc":"The radii of the border's corners."},{"name":"direction","type":"Axis","required":true,"desc":"The direction along which the buttons are rendered."},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"If [direction] is [Axis.vertical], this parameter determines whether to lay out the buttons starting from the first or last child from top to bottom."}],"id":33,"lever":4,"family":0,"linkIds":[332,262],"nodes":[{"file":"node1_single.dart","name":"ToggleButtons Single Selection","desc":["【children】: Children components 【List】","【borderWidth】: Border width 【double】","【borderRadius】: Rounded corners 【BorderRadius】","【isSelected】: Selection status set 【List】","【onPressed】: Click event 【Function(int)】"]},{"file":"node2_color.dart","name":"ToggleButtons Color Properties","desc":["【borderColor】: Border color 【Color】","【selectedBorderColor】: Selected border color 【Color】","【selectedColor】: Component color when selected 【Color】","【fillColor】: Fill color when selected 【Color】","【splashColor】: Ripple color 【Color】"]},{"file":"node3_multi.dart","name":"ToggleButtons Multiple Selection","desc":["The logic of state transformation can be controlled to create different effects."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_zh-CN.json deleted file mode 100644 index 764b7038b..000000000 --- a/modules/widget_system/widgets/doc/widgets/ToggleButtons/ToggleButtons_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ToggleButtons","path":"/src/material/toggle_buttons.dart","parents":["StatelessWidget","Widget"],"desc":"一组切换按钮。","fields":[{"name":"children","type":"List","required":true,"desc":"切换按钮小部件。"},{"name":"isSelected","type":"List","required":true,"desc":"每个切换按钮对应的选择状态。"},{"name":"onPressed","type":"void Function(int index)?","desc":"点击按钮时调用的回调。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"{@macro flutter.material.RawMaterialButton.mouseCursor}"},{"name":"tapTargetSize","type":"MaterialTapTargetSize?","desc":"配置可以按下按钮的区域的最小大小。"},{"name":"textStyle","type":"TextStyle?","desc":"应用于这些切换按钮中任何文本的 [TextStyle]。"},{"name":"constraints","type":"BoxConstraints?","desc":"定义按钮的大小。"},{"name":"color","type":"Color?","desc":"如果按钮已启用且未选中,后代 [Text] 和 [Icon] 小部件的颜色。"},{"name":"selectedColor","type":"Color?","desc":"如果按钮被选中,后代 [Text] 和 [Icon] 小部件的颜色。"},{"name":"disabledColor","type":"Color?","desc":"如果按钮被禁用,后代 [Text] 和 [Icon] 小部件的颜色。"},{"name":"fillColor","type":"Color?","desc":"选中的切换按钮的填充颜色。"},{"name":"focusColor","type":"Color?","desc":"按钮具有输入焦点时用于填充按钮的颜色。"},{"name":"highlightColor","type":"Color?","desc":"按钮的 [InkWell] 的高亮颜色。"},{"name":"splashColor","type":"Color?","desc":"按钮的 [InkWell] 的飞溅颜色。"},{"name":"hoverColor","type":"Color?","desc":"指针悬停在按钮上时用于填充按钮的颜色。"},{"name":"focusNodes","type":"List?","desc":"对应于每个切换按钮的 [FocusNode] 列表。"},{"name":"renderBorder","type":"bool","required":true,"desc":"是否在每个切换按钮周围渲染边框。"},{"name":"borderColor","type":"Color?","desc":"切换按钮启用且未选中时显示的边框颜色。"},{"name":"selectedBorderColor","type":"Color?","desc":"切换按钮被选中时显示的边框颜色。"},{"name":"disabledBorderColor","type":"Color?","desc":"切换按钮被禁用时显示的边框颜色。"},{"name":"borderWidth","type":"double?","desc":"围绕每个切换按钮的边框宽度。"},{"name":"borderRadius","type":"BorderRadius?","desc":"边框角的半径。"},{"name":"direction","type":"Axis","required":true,"desc":"按钮渲染的方向。"},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"如果 [direction] 是 [Axis.vertical],此参数确定是否从上到下从第一个或最后一个子项开始布局按钮。"}],"id":33,"localName":"切换按钮组","lever":4,"family":0,"linkIds":[332,262],"nodes":[{"file":"node1_single.dart","name":"ToggleButtons单选切换","desc":["【children】: 子组件集 【List】","【borderWidth】: 边线宽 【double】","【borderRadius】: 圆角 【BorderRadius】","【isSelected】: 是否选中集 【List】","【onPressed】: 点击事件 【Function(int)】"]},{"file":"node2_color.dart","name":"ToggleButtons颜色属性","desc":["【borderColor】: 边线色 【Color】","【selectedBorderColor】: 选中边线色 【Color】","【selectedColor】: 选中时组件色 【Color】","【fillColor】: 选中时填充色 【Color】","【splashColor】: 水波纹色 【Color】"]},{"file":"node3_multi.dart","name":"ToggleButtons多选切换","desc":["可以控制状态转化的逻辑来形成不同的效果。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_en-US.json deleted file mode 100644 index eb3e02ef7..000000000 --- a/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ToggleButtonsTheme","path":"/src/material/toggle_buttons_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" An inherited widget that defines color and border parameters for [ToggleButtons] in this widget's subtree.","fields":[{"name":"data","type":"ToggleButtonsThemeData","required":true,"desc":"Specifies the color and border values for descendant [ToggleButtons] widgets."}],"id":332,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ToggleButtonsTheme","desc":["You can specify the ToggleButtonsThemeData properties to set default styles for descendant ToggleButtons components, such as border style, color, decoration, etc. You can also use ToggleButtonsTheme.of to get the theme data of ToggleButtons."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_zh-CN.json deleted file mode 100644 index d5976dadf..000000000 --- a/modules/widget_system/widgets/doc/widgets/ToggleButtonsTheme/ToggleButtonsTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ToggleButtonsTheme","path":"/src/material/toggle_buttons_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"为此小部件子树中的 [ToggleButtons] 定义颜色和边框参数的继承小部件。","fields":[{"name":"data","type":"ToggleButtonsThemeData","required":true,"desc":"指定后代 [ToggleButtons] 小部件的颜色和边框值。"}],"id":332,"localName":"滑块样式","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ToggleButtonsTheme基本使用","desc":["可指定ToggleButtonsThemeData数据属性为【后代】的ToggleButtons组件设置默认样式,如边框样式、颜色、装饰等。也可以用ToggleButtonsTheme.of获取ToggleButtons的主题数据。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_en-US.json b/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_en-US.json deleted file mode 100644 index 2bd75a943..000000000 --- a/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Tooltip","path":"/src/material/tooltip.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design tooltip.","fields":[{"name":"message","type":"String?","desc":"The text to display in the tooltip."},{"name":"richMessage","type":"InlineSpan?","desc":"The rich text to display in the tooltip."},{"name":"height","type":"double?","desc":"The minimum height of the [Tooltip]'s message."},{"name":"constraints","type":"BoxConstraints?","desc":"Constrains the size of the [Tooltip]'s message."},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"The amount of space by which to inset the [Tooltip]'s message."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"The empty space that surrounds the tooltip."},{"name":"verticalOffset","type":"double?","desc":"The vertical gap between the widget and the displayed tooltip."},{"name":"preferBelow","type":"bool?","desc":"Whether the tooltip defaults to being displayed below the widget."},{"name":"excludeFromSemantics","type":"bool?","desc":"Whether the tooltip's [message] or [richMessage] should be excluded from the semantics tree."},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."},{"name":"decoration","type":"Decoration?","desc":"Specifies the tooltip's shape and background color."},{"name":"textStyle","type":"TextStyle?","desc":"The style to use for the message of the tooltip."},{"name":"textAlign","type":"TextAlign?","desc":"How the message of the tooltip is aligned horizontally."},{"name":"waitDuration","type":"Duration?","desc":"The length of time that a pointer must hover over a tooltip's widget before the tooltip will be shown."},{"name":"showDuration","type":"Duration?","desc":"The length of time that the tooltip will be shown after a long press is released (if triggerMode is [TooltipTriggerMode.longPress]) or a tap is released (if triggerMode is [TooltipTriggerMode.tap]). This property does not affect mouse pointer devices."},{"name":"exitDuration","type":"Duration?","desc":"The length of time that a pointer must have stopped hovering over a tooltip's widget before the tooltip will be hidden."},{"name":"enableTapToDismiss","type":"bool","required":true,"desc":"Whether the tooltip can be dismissed by tap."},{"name":"triggerMode","type":"TooltipTriggerMode?","desc":"The [TooltipTriggerMode] that will show the tooltip."},{"name":"enableFeedback","type":"bool?","desc":"Whether the tooltip should provide acoustic and/or haptic feedback."},{"name":"onTriggered","type":"TooltipTriggeredCallback?","desc":"Called when the Tooltip is triggered."},{"name":"mouseCursor","type":"MouseCursor?","desc":"The cursor for a mouse pointer when it enters or is hovering over the widget."},{"name":"ignorePointer","type":"bool?","desc":"Whether this tooltip should be invisible to hit testing."}],"id":50,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Tooltip","desc":["【preferBelow】: Whether to prefer below 【bool】","【padding】: Padding 【EdgeInsetsGeometry】","【margin】: Margin 【EdgeInsetsGeometry】","【message】: Message content 【String】","【showDuration】: Display duration 【Duration】","【waitDuration】: Hover appearance time 【Duration】","【child】: Child 【Widget】"]},{"file":"node2_decoration.dart","name":"Decoration of Tooltip","desc":["【decoration】: Decoration object 【Decoration】","【textStyle】: Text style 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_zh-CN.json deleted file mode 100644 index 2eaf45bb6..000000000 --- a/modules/widget_system/widgets/doc/widgets/Tooltip/Tooltip_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Tooltip","path":"/src/material/tooltip.dart","parents":["StatefulWidget","Widget"],"desc":"Material Design 工具提示。","fields":[{"name":"message","type":"String?","desc":"在工具提示中显示的文本。"},{"name":"richMessage","type":"InlineSpan?","desc":"在工具提示中显示的富文本。"},{"name":"height","type":"double?","desc":"[Tooltip] 消息的最小高度。"},{"name":"constraints","type":"BoxConstraints?","desc":"约束 [Tooltip] 消息的大小。"},{"name":"padding","type":"EdgeInsetsGeometry?","desc":"插入 [Tooltip] 消息的空间量。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"围绕工具提示的空白空间。"},{"name":"verticalOffset","type":"double?","desc":"小部件与显示的工具提示之间的垂直间隙。"},{"name":"preferBelow","type":"bool?","desc":"工具提示是否默认显示在小部件下方。"},{"name":"excludeFromSemantics","type":"bool?","desc":"工具提示的 [message] 或 [richMessage] 是否应从语义树中排除。"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"},{"name":"decoration","type":"Decoration?","desc":"指定工具提示的形状和背景颜色。"},{"name":"textStyle","type":"TextStyle?","desc":"用于工具提示消息的样式。"},{"name":"textAlign","type":"TextAlign?","desc":"工具提示消息如何水平对齐。"},{"name":"waitDuration","type":"Duration?","desc":"指针必须悬停在工具提示小部件上多长时间才会显示工具提示。"},{"name":"showDuration","type":"Duration?","desc":"长按释放后(如果 triggerMode 是 [TooltipTriggerMode.longPress])或点击释放后(如果 triggerMode 是 [TooltipTriggerMode.tap])工具提示将显示的时间长度。此属性不影响鼠标指针设备。"},{"name":"exitDuration","type":"Duration?","desc":"指针必须停止悬停在工具提示小部件上多长时间才会隐藏工具提示。"},{"name":"enableTapToDismiss","type":"bool","required":true,"desc":"工具提示是否可以通过点击关闭。"},{"name":"triggerMode","type":"TooltipTriggerMode?","desc":"将显示工具提示的 [TooltipTriggerMode]。"},{"name":"enableFeedback","type":"bool?","desc":"工具提示是否应提供声音和/或触觉反馈。"},{"name":"onTriggered","type":"TooltipTriggeredCallback?","desc":"触发工具提示时调用。"},{"name":"mouseCursor","type":"MouseCursor?","desc":"鼠标指针进入或悬停在小部件上时的光标。"},{"name":"ignorePointer","type":"bool?","desc":"此工具提示是否应对命中测试不可见。"}],"id":50,"localName":"提示工具","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Tooltip基本使用","desc":["【preferBelow】 : 是否首选下方 【bool】","【padding】 : 内边距 【EdgeInsetsGeometry】","【margin】 : 外边距 【EdgeInsetsGeometry】","【message】 : 消息内容 【String】","【showDuration】 : 展示时间 【Duration】","【waitDuration】 : 悬浮出现时间 【Duration】","【child】 : 孩子 【Widget】"]},{"file":"node2_decoration.dart","name":"Tooltip的装饰","desc":["【decoration】 : 装饰对象 【Decoration】","【textStyle】 : 文字样式 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_en-US.json b/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_en-US.json deleted file mode 100644 index 1b569170e..000000000 --- a/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TooltipTheme","path":"/src/material/tooltip_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":" Applies a tooltip theme to descendant [Tooltip] widgets.","fields":[{"name":"data","type":"TooltipThemeData","required":true,"desc":"The properties for descendant [Tooltip] widgets."}],"id":333,"lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of TooltipTheme","desc":["You can specify the TooltipThemeData properties to set default styles for descendant Tooltip components, such as decoration, text style, display duration, margins, etc. You can also use TooltipTheme.of to get the theme properties of Tooltip."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_zh-CN.json deleted file mode 100644 index db7a17a64..000000000 --- a/modules/widget_system/widgets/doc/widgets/TooltipTheme/TooltipTheme_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TooltipTheme","path":"/src/material/tooltip_theme.dart","parents":["InheritedTheme","InheritedWidget","ProxyWidget","Widget"],"desc":"将工具提示主题应用于后代 [Tooltip] 小部件。","fields":[{"name":"data","type":"TooltipThemeData","required":true,"desc":"后代 [Tooltip] 小部件的属性。"}],"id":333,"localName":"提示主题","lever":2,"family":5,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TooltipTheme基本使用","desc":["可指定TooltipThemeData数据属性为【后代】的Tooltip组件设置默认样式,如装饰、文字样式、显示时长、边距等。也可以用TooltipTheme.of获取Tooltip的主题属性。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_en-US.json b/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_en-US.json deleted file mode 100644 index 8a94ff5b4..000000000 --- a/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TooltipVisibility","path":"/src/material/tooltip_visibility.dart","parents":["StatelessWidget","Widget"],"desc":" Overrides the visibility of descendant [Tooltip] widgets.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"visible","type":"bool","required":true,"desc":"Determines the visibility of [Tooltip] widgets that inherit from this widget."}],"id":548,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_zh-CN.json deleted file mode 100644 index c3bcb6db5..000000000 --- a/modules/widget_system/widgets/doc/widgets/TooltipVisibility/TooltipVisibility_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TooltipVisibility","path":"/src/material/tooltip_visibility.dart","parents":["StatelessWidget","Widget"],"desc":"覆盖后代 [Tooltip] 小部件的可见性。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"visible","type":"bool","required":true,"desc":"确定从此小部件继承的 [Tooltip] 小部件的可见性。"}],"id":548,"localName":"TooltipVisibility","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Transform/Transform_en-US.json b/modules/widget_system/widgets/doc/widgets/Transform/Transform_en-US.json deleted file mode 100644 index a5d1fd8f4..000000000 --- a/modules/widget_system/widgets/doc/widgets/Transform/Transform_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Transform","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that applies a transformation before painting its child.","fields":[{"name":"transform","type":"Matrix4","required":true,"desc":"The matrix to transform the child by during painting."},{"name":"origin","type":"Offset?","desc":"The origin of the coordinate system (relative to the upper left corner of this render object) in which to apply the matrix."},{"name":"alignment","type":"AlignmentGeometry?","desc":"The alignment of the origin, relative to the size of the box."},{"name":"transformHitTests","type":"bool","required":true,"desc":"Whether to apply the transformation when performing hit tests."},{"name":"filterQuality","type":"FilterQuality?","desc":"The filter quality with which to apply the transform as a bitmap operation."}],"id":78,"lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_skew.dart","name":"Skew Transform skew","desc":["Skew x is controlled by the R0C1 number, the input is in radians, representing the skew angle","Skew y is controlled by the R1C0 number, the input is in radians, representing the skew angle"]},{"file":"node2_translation.dart","name":"Translation Transform translationValues","desc":["Translation x is controlled by the R0C3 number, the input is a value, representing the translation length","Translation y is controlled by the R1C3 number, the input is a value, representing the translation length","Translation z is controlled by the R2C3 number, the input is a value, representing the translation length"]},{"file":"node3_scale.dart","name":"Scale Transform diagonal3Values","desc":["Scale x is controlled by the R0C0 number, the input is a value, representing the scaling factor","Scale y is controlled by the R1C2 number, the input is a value, representing the scaling factor","Scale z is controlled by the R2C2 number, the input is a value, representing the scaling factor"]},{"file":"node4_rotate.dart","name":"Rotation Transform rotation","desc":["x rotation is controlled by R1C1, R1C2, R2C1, R2C2, the input represents radians","y rotation is controlled by R0C0, R0C2, R2C0, R2C2, the input represents radians","z rotation is controlled by R0C0, R0C1, R1C0, R1C1"]},{"file":"node5_perspective.dart","name":"Perspective Transform rotation","desc":["Perspective is controlled by R3C1, R3C2, R3C3"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Transform/Transform_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Transform/Transform_zh-CN.json deleted file mode 100644 index eeab1fac2..000000000 --- a/modules/widget_system/widgets/doc/widgets/Transform/Transform_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Transform","path":"/src/widgets/basic.dart","parents":["SingleChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在绘制其子项之前应用变换的小部件。","fields":[{"name":"transform","type":"Matrix4","required":true,"desc":"绘制期间变换子项的矩阵。"},{"name":"origin","type":"Offset?","desc":"应用矩阵的坐标系原点(相对于此渲染对象的左上角)。"},{"name":"alignment","type":"AlignmentGeometry?","desc":"原点的对齐,相对于框的大小。"},{"name":"transformHitTests","type":"bool","required":true,"desc":"执行命中测试时是否应用变换。"},{"name":"filterQuality","type":"FilterQuality?","desc":"将变换作为位图操作应用时的过滤质量。"}],"id":78,"localName":"变换","lever":4,"family":2,"linkIds":[],"nodes":[{"file":"node1_skew.dart","name":"斜切变换skew","desc":["斜切x由R0C1数控制,入参为弧度值,表示斜切角度","斜切y由R1C0数控制,入参为弧度值,表示斜切角度"]},{"file":"node2_translation.dart","name":"平移变换translationValues","desc":["平移x由R0C3数控制,入参为数值,表示平移长度","平移y由R1C3数控制,入参为数值,表示平移长度","平移z由R2C3数控制,入参为数值,表示平移长度"]},{"file":"node3_scale.dart","name":"缩放变换diagonal3Values","desc":["缩放x由R0C0数控制,入参为数值,表示缩放分率","缩放y由R1C2数控制,入参为数值,表示缩放分率","缩放z由R2C2数控制,入参为数值,表示缩放分率"]},{"file":"node4_rotate.dart","name":"旋转变换rotation","desc":["x旋转由R1C1、R1C2、R2C1、R2C2控制,入参表示弧度","y旋转由R0C0、R0C2、R2C0、R2C2控制,入参表示弧度","z旋转由R0C0、R0C1、R1C0、R1C1控制,"]},{"file":"node5_perspective.dart","name":"透视变换rotation","desc":["由R3C1、R3C2、R3C3控制透视"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_en-US.json b/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_en-US.json deleted file mode 100644 index c147fb993..000000000 --- a/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TreeSliver","path":"/src/widgets/sliver_tree.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that displays [TreeSliverNode]s that expand and collapse in a vertically and horizontally scrolling [Viewport].","fields":[{"name":"tree","type":"List>","required":true,"desc":"The list of [TreeSliverNode]s that may be displayed in the [TreeSliver]."},{"name":"treeNodeBuilder","type":"TreeSliverNodeBuilder","required":true,"desc":"Called to build and entry of the [TreeSliver] for the given node."},{"name":"treeRowExtentBuilder","type":"TreeSliverRowExtentBuilder","required":true,"desc":"Called to calculate the extent of the widget built for the given [TreeSliverNode]."},{"name":"controller","type":"TreeSliverController?","desc":"If provided, the controller can be used to expand and collapse [TreeSliverNode]s, or lookup information about the current state of the [TreeSliver]."},{"name":"onNodeToggle","type":"TreeSliverNodeCallback?","desc":"Called when a [TreeSliverNode] expands or collapses."},{"name":"toggleAnimationStyle","type":"AnimationStyle?","desc":"The default [AnimationStyle] for expanding and collapsing nodes in the [TreeSliver]."},{"name":"indentation","type":"TreeSliverIndentationType","required":true,"desc":"The number of pixels children will be offset by in the cross axis based on their [TreeSliverNode.depth]."},{"name":"addAutomaticKeepAlives","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addAutomaticKeepAlives}"},{"name":"addRepaintBoundaries","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addRepaintBoundaries}"},{"name":"addSemanticIndexes","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addSemanticIndexes}"},{"name":"semanticIndexCallback","type":"SemanticIndexCallback","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.semanticIndexCallback}"},{"name":"semanticIndexOffset","type":"int","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.semanticIndexOffset}"},{"name":"findChildIndexCallback","type":"int? Function(Key)?","desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.findChildIndexCallback}"}],"id":549,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_zh-CN.json deleted file mode 100644 index 7abdfa23c..000000000 --- a/modules/widget_system/widgets/doc/widgets/TreeSliver/TreeSliver_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TreeSliver","path":"/src/widgets/sliver_tree.dart","parents":["StatefulWidget","Widget"],"desc":"在垂直和水平滚动的 [Viewport] 中显示展开和折叠的 [TreeSliverNode] 的小部件。","fields":[{"name":"tree","type":"List>","required":true,"desc":"可能在 [TreeSliver] 中显示的 [TreeSliverNode] 列表。"},{"name":"treeNodeBuilder","type":"TreeSliverNodeBuilder","required":true,"desc":"调用以为给定节点构建和输入 [TreeSliver]。"},{"name":"treeRowExtentBuilder","type":"TreeSliverRowExtentBuilder","required":true,"desc":"调用以计算为给定 [TreeSliverNode] 构建的小部件的范围。"},{"name":"controller","type":"TreeSliverController?","desc":"如果提供,控制器可用于展开和折叠 [TreeSliverNode],或查找有关 [TreeSliver] 当前状态的信息。"},{"name":"onNodeToggle","type":"TreeSliverNodeCallback?","desc":"[TreeSliverNode] 展开或折叠时调用。"},{"name":"toggleAnimationStyle","type":"AnimationStyle?","desc":"[TreeSliver] 中展开和折叠节点的默认 [AnimationStyle]。"},{"name":"indentation","type":"TreeSliverIndentationType","required":true,"desc":"子项将根据其 [TreeSliverNode.depth] 在交叉轴上偏移的像素数。"},{"name":"addAutomaticKeepAlives","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addAutomaticKeepAlives}"},{"name":"addRepaintBoundaries","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addRepaintBoundaries}"},{"name":"addSemanticIndexes","type":"bool","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.addSemanticIndexes}"},{"name":"semanticIndexCallback","type":"SemanticIndexCallback","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.semanticIndexCallback}"},{"name":"semanticIndexOffset","type":"int","required":true,"desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.semanticIndexOffset}"},{"name":"findChildIndexCallback","type":"int? Function(Key)?","desc":"{@macro flutter.widgets.SliverChildBuilderDelegate.findChildIndexCallback}"}],"id":549,"localName":"TreeSliver","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_en-US.json deleted file mode 100644 index 08716d298..000000000 --- a/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TweenAnimationBuilder","path":"/src/widgets/tween_animation_builder.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":" [Widget] builder that animates a property of a [Widget] to a target value whenever the target value changes.","fields":[{"name":"tween","type":"Tween","required":true,"desc":"Defines the target value for the animation."},{"name":"builder","type":"ValueWidgetBuilder","required":true,"desc":"Called every time the animation value changes."},{"name":"child","type":"Widget?","desc":"The child widget to pass to the builder."}],"id":226,"lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TweenAnimationBuilder Usage Example","desc":["【tween】 : *Tween 【Tween】","【duration】 : *Duration 【Duration】","【builder】 : *Builder 【ValueWidgetBuilder】","【curve】 : Animation Curve 【Curve】","【onEnd】 : End Callback 【VoidCallback】","【child】 : Child Widget 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_zh-CN.json deleted file mode 100644 index bd3ab8888..000000000 --- a/modules/widget_system/widgets/doc/widgets/TweenAnimationBuilder/TweenAnimationBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TweenAnimationBuilder","path":"/src/widgets/tween_animation_builder.dart","parents":["ImplicitlyAnimatedWidget","StatefulWidget","Widget"],"desc":"每当目标值更改时,将 [Widget] 的属性动画化到目标值的 [Widget] 构建器。","fields":[{"name":"tween","type":"Tween","required":true,"desc":"定义动画的目标值。"},{"name":"builder","type":"ValueWidgetBuilder","required":true,"desc":"每次动画值更改时调用。"},{"name":"child","type":"Widget?","desc":"传递给构建器的子小部件。"}],"id":226,"localName":"渐变动画构造器","lever":3,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"TweenAnimationBuilder 使用案例","desc":["【tween】 : *渐变器 【Tween】","【duration】 : *时长 【Duration】","【builder】 : *构造器 【ValueWidgetBuilder】","【curve】 : 动画曲线 【Curve】","【onEnd】 : 结束回调 【VoidCallback】","【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_en-US.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_en-US.json deleted file mode 100644 index 34a3aaf55..000000000 --- a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TwoDimensionalScrollView","path":"/src/widgets/two_dimensional_scroll_view.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":" A widget that combines a [TwoDimensionalScrollable] and a [TwoDimensionalViewport] to create an interactive scrolling pane of content in both vertical and horizontal dimensions.","fields":[{"name":"delegate","type":"TwoDimensionalChildDelegate","required":true,"desc":"A delegate that provides the children for the [TwoDimensionalScrollView]."},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"diagonalDragBehavior","type":"DiagonalDragBehavior","required":true,"desc":"Whether scrolling gestures should lock to one axes, allow free movement in both axes, or be evaluated on a weighted scale."},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"mainAxis","type":"Axis","required":true,"desc":"The main axis of the two."},{"name":"verticalDetails","type":"ScrollableDetails","required":true,"desc":"The configuration of the vertical Scrollable."},{"name":"horizontalDetails","type":"ScrollableDetails","required":true,"desc":"The configuration of the horizontal Scrollable."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":550,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_zh-CN.json deleted file mode 100644 index 947bc1693..000000000 --- a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollView/TwoDimensionalScrollView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TwoDimensionalScrollView","path":"/src/widgets/two_dimensional_scroll_view.dart","abstract":true,"parents":["StatelessWidget","Widget"],"desc":"结合 [TwoDimensionalScrollable] 和 [TwoDimensionalViewport] 创建垂直和水平两个维度的交互式滚动内容窗格的小部件。","fields":[{"name":"delegate","type":"TwoDimensionalChildDelegate","required":true,"desc":"为 [TwoDimensionalScrollView] 提供子项的委托。"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"diagonalDragBehavior","type":"DiagonalDragBehavior","required":true,"desc":"滚动手势是否应锁定到一个轴、允许在两个轴上自由移动,或在加权尺度上评估。"},{"name":"primary","type":"bool?","desc":"{@macro flutter.widgets.scroll_view.primary}"},{"name":"mainAxis","type":"Axis","required":true,"desc":"两者中的主轴。"},{"name":"verticalDetails","type":"ScrollableDetails","required":true,"desc":"垂直 Scrollable 的配置。"},{"name":"horizontalDetails","type":"ScrollableDetails","required":true,"desc":"水平 Scrollable 的配置。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"keyboardDismissBehavior","type":"ScrollViewKeyboardDismissBehavior?","desc":"{@macro flutter.widgets.scroll_view.keyboardDismissBehavior}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":550,"localName":"TwoDimensionalScrollView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_en-US.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_en-US.json deleted file mode 100644 index 8dc7efc89..000000000 --- a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TwoDimensionalScrollable","path":"/src/widgets/scrollable.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that manages scrolling in both the vertical and horizontal dimensions and informs the [TwoDimensionalViewport] through which the content is viewed.","fields":[{"name":"diagonalDragBehavior","type":"DiagonalDragBehavior","required":true,"desc":"How scrolling gestures should lock to one axis, or allow free movement in both axes."},{"name":"horizontalDetails","type":"ScrollableDetails","required":true,"desc":"The configuration of the horizontal [Scrollable]."},{"name":"verticalDetails","type":"ScrollableDetails","required":true,"desc":"The configuration of the vertical [Scrollable]."},{"name":"viewportBuilder","type":"TwoDimensionalViewportBuilder","required":true,"desc":"Builds the viewport through which the scrollable content is displayed."},{"name":"incrementCalculator","type":"ScrollIncrementCalculator?","desc":"{@macro flutter.widgets.Scrollable.incrementCalculator}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.scrollable.excludeFromSemantics}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"}],"id":551,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_zh-CN.json deleted file mode 100644 index 47af9e136..000000000 --- a/modules/widget_system/widgets/doc/widgets/TwoDimensionalScrollable/TwoDimensionalScrollable_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TwoDimensionalScrollable","path":"/src/widgets/scrollable.dart","parents":["StatefulWidget","Widget"],"desc":"管理垂直和水平两个维度滚动并通知查看内容的 [TwoDimensionalViewport] 的小部件。","fields":[{"name":"diagonalDragBehavior","type":"DiagonalDragBehavior","required":true,"desc":"滚动手势应如何锁定到一个轴,或允许在两个轴上自由移动。"},{"name":"horizontalDetails","type":"ScrollableDetails","required":true,"desc":"水平 [Scrollable] 的配置。"},{"name":"verticalDetails","type":"ScrollableDetails","required":true,"desc":"垂直 [Scrollable] 的配置。"},{"name":"viewportBuilder","type":"TwoDimensionalViewportBuilder","required":true,"desc":"构建显示可滚动内容的视口。"},{"name":"incrementCalculator","type":"ScrollIncrementCalculator?","desc":"{@macro flutter.widgets.Scrollable.incrementCalculator}"},{"name":"restorationId","type":"String?","desc":"{@macro flutter.widgets.scrollable.restorationId}"},{"name":"excludeFromSemantics","type":"bool","required":true,"desc":"{@macro flutter.widgets.scrollable.excludeFromSemantics}"},{"name":"hitTestBehavior","type":"HitTestBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.hitTestBehavior}"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"}],"id":551,"localName":"TwoDimensionalScrollable","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_en-US.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_en-US.json deleted file mode 100644 index 0fcbfab99..000000000 --- a/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TwoDimensionalViewport","path":"/src/widgets/two_dimensional_viewport.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":" A widget through which a portion of larger content can be viewed, typically in combination with a [TwoDimensionalScrollable].","fields":[{"name":"verticalOffset","type":"ViewportOffset","required":true,"desc":"Which part of the content inside the viewport should be visible in the vertical axis."},{"name":"verticalAxisDirection","type":"AxisDirection","required":true,"desc":"The direction in which the [verticalOffset]'s [ViewportOffset.pixels] increases."},{"name":"horizontalOffset","type":"ViewportOffset","required":true,"desc":"Which part of the content inside the viewport should be visible in the horizontal axis."},{"name":"horizontalAxisDirection","type":"AxisDirection","required":true,"desc":"The direction in which the [horizontalOffset]'s [ViewportOffset.pixels] increases."},{"name":"mainAxis","type":"Axis","required":true,"desc":"The main axis of the two."},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"delegate","type":"TwoDimensionalChildDelegate","required":true,"desc":"A delegate that provides the children for the [TwoDimensionalViewport]."}],"id":552,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_zh-CN.json deleted file mode 100644 index 3ef00f4af..000000000 --- a/modules/widget_system/widgets/doc/widgets/TwoDimensionalViewport/TwoDimensionalViewport_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"TwoDimensionalViewport","path":"/src/widgets/two_dimensional_viewport.dart","abstract":true,"parents":["RenderObjectWidget","Widget"],"desc":"可以查看较大内容的一部分的小部件,通常与 [TwoDimensionalScrollable] 结合使用。","fields":[{"name":"verticalOffset","type":"ViewportOffset","required":true,"desc":"视口内容的哪一部分应在垂直轴上可见。"},{"name":"verticalAxisDirection","type":"AxisDirection","required":true,"desc":"[verticalOffset] 的 [ViewportOffset.pixels] 增加的方向。"},{"name":"horizontalOffset","type":"ViewportOffset","required":true,"desc":"视口内容的哪一部分应在水平轴上可见。"},{"name":"horizontalAxisDirection","type":"AxisDirection","required":true,"desc":"[horizontalOffset] 的 [ViewportOffset.pixels] 增加的方向。"},{"name":"mainAxis","type":"Axis","required":true,"desc":"两者中的主轴。"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"delegate","type":"TwoDimensionalChildDelegate","required":true,"desc":"为 [TwoDimensionalViewport] 提供子项的委托。"}],"id":552,"localName":"TwoDimensionalViewport","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_en-US.json b/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_en-US.json deleted file mode 100644 index a786ad86c..000000000 --- a/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UiKitView","path":"/src/widgets/platform_view.dart","parents":["_DarwinView","StatefulWidget","Widget"],"desc":" Embeds an iOS view in the Widget hierarchy.","fields":[],"id":553,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_zh-CN.json deleted file mode 100644 index e5e98ced1..000000000 --- a/modules/widget_system/widgets/doc/widgets/UiKitView/UiKitView_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UiKitView","path":"/src/widgets/platform_view.dart","parents":["_DarwinView","StatefulWidget","Widget"],"desc":"在小部件层次结构中嵌入 iOS 视图。","fields":[],"id":553,"localName":"UiKitView","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_en-US.json b/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_en-US.json deleted file mode 100644 index 3bcb57025..000000000 --- a/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UnconstrainedBox","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":" A widget that imposes no constraints on its child, allowing it to render at its \"natural\" size.","fields":[{"name":"textDirection","type":"TextDirection?","desc":"The text direction to use when interpreting the [alignment] if it is an [AlignmentDirectional]."},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"The alignment to use when laying out the child."},{"name":"constrainedAxis","type":"Axis?","desc":"The axis to retain constraints on, if any."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"child","type":"Widget?","desc":"The widget below this widget in the tree."}],"id":81,"lever":3,"family":1,"linkIds":[80],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of UnconstrainedBox","desc":["【child】: Child component 【Widget】","【constrainedAxis】: Axes still constrained*2 【Axis】","【alignment】: Alignment method 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_zh-CN.json deleted file mode 100644 index f10c46e4b..000000000 --- a/modules/widget_system/widgets/doc/widgets/UnconstrainedBox/UnconstrainedBox_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UnconstrainedBox","path":"/src/widgets/basic.dart","parents":["StatelessWidget","Widget"],"desc":"对其子项不施加约束的小部件,允许它以其自然大小渲染。","fields":[{"name":"textDirection","type":"TextDirection?","desc":"如果 [alignment] 是 [AlignmentDirectional],解释 [alignment] 时使用的文本方向。"},{"name":"alignment","type":"AlignmentGeometry","required":true,"desc":"布局子项时使用的对齐。"},{"name":"constrainedAxis","type":"Axis?","desc":"要保留约束的轴(如果有)。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"},{"name":"child","type":"Widget?","desc":"树中此小部件下方的小部件。"}],"id":81,"localName":"无约束盒","lever":3,"family":1,"linkIds":[80],"nodes":[{"file":"node1_base.dart","name":"UnconstrainedBox基本使用","desc":["【child】 : 孩子组件 【Widget】","【constrainedAxis】 : 仍受约束的轴*2 【Axis】","【alignment】 : 对齐方式 【AlignmentGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_en-US.json b/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_en-US.json deleted file mode 100644 index cba40fb36..000000000 --- a/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UndoHistory","path":"/src/widgets/undo_history.dart","parents":["StatefulWidget","Widget"],"desc":" Provides undo/redo capabilities for a [ValueNotifier].","fields":[{"name":"value","type":"ValueNotifier","required":true,"desc":"The value to track over time."},{"name":"shouldChangeUndoStack","type":"bool Function(T? oldValue, T newValue)?","desc":"Called when checking whether a value change should be pushed onto the undo stack."},{"name":"undoStackModifier","type":"T Function(T value)?","desc":"Called right before a new entry is pushed to the undo stack."},{"name":"onTriggered","type":"void Function(T value)","required":true,"desc":"Called when an undo or redo causes a state change."},{"name":"focusNode","type":"FocusNode","required":true,"desc":"The [FocusNode] that will be used to listen for focus to set the initial undo state for the element."},{"name":"controller","type":"UndoHistoryController?","desc":"{@template flutter.widgets.undoHistory.controller} Controls the undo state."},{"name":"child","type":"Widget","required":true,"desc":"The child widget of [UndoHistory]."}],"id":241,"lever":2,"family":1,"linkIds":[54],"nodes":[{"file":"node1.dart","name":"Using UndoHistory in TextField","desc":["In this example, the undo/redo functionality of the TextField is controlled via an external button. The undoController parameter can be passed an UndoHistoryController object to control and influence the input text content."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_zh-CN.json deleted file mode 100644 index 72691ecb2..000000000 --- a/modules/widget_system/widgets/doc/widgets/UndoHistory/UndoHistory_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UndoHistory","path":"/src/widgets/undo_history.dart","parents":["StatefulWidget","Widget"],"desc":"为 [ValueNotifier] 提供撤销/重做功能。","fields":[{"name":"value","type":"ValueNotifier","required":true,"desc":"要随时间跟踪的值。"},{"name":"shouldChangeUndoStack","type":"bool Function(T? oldValue, T newValue)?","desc":"检查值更改是否应推送到撤销堆栈时调用。"},{"name":"undoStackModifier","type":"T Function(T value)?","desc":"在新条目推送到撤销堆栈之前调用。"},{"name":"onTriggered","type":"void Function(T value)","required":true,"desc":"撤销或重做导致状态更改时调用。"},{"name":"focusNode","type":"FocusNode","required":true,"desc":"将用于监听焦点以设置元素初始撤销状态的 [FocusNode]。"},{"name":"controller","type":"UndoHistoryController?","desc":"{@template flutter.widgets.undoHistory.controller} 控制撤销状态。"},{"name":"child","type":"Widget","required":true,"desc":"[UndoHistory] 的子小部件。"}],"id":241,"localName":"撤销历史","lever":2,"family":1,"linkIds":[54],"nodes":[{"file":"node1.dart","name":"TextField 中使用 UndoHistory","desc":["该案例中通过外界按钮,进行控制 TextField 的撤销/重做功能。其中 undoController 参数可以传入 UndoHistoryController 对象,用于控制并影响输入文本内容。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_en-US.json b/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_en-US.json deleted file mode 100644 index b6470b246..000000000 --- a/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UniqueWidget","path":"/src/widgets/unique_widget.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":" Base class for stateful widgets that have exactly one inflated instance in the tree.","fields":[],"id":243,"lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Introduction to UniqueWidget","desc":["【child】 : Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_zh-CN.json deleted file mode 100644 index 12f2cbdef..000000000 --- a/modules/widget_system/widgets/doc/widgets/UniqueWidget/UniqueWidget_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UniqueWidget","path":"/src/widgets/unique_widget.dart","abstract":true,"parents":["StatefulWidget","Widget"],"desc":"在树中恰好有一个膨胀实例的有状态小部件的基类。","fields":[],"id":243,"localName":"唯一组件","lever":1,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"UniqueWidget 介绍","desc":["【child】 : 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_en-US.json b/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_en-US.json deleted file mode 100644 index 4e75c259e..000000000 --- a/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UnmanagedRestorationScope","path":"/src/widgets/restoration.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":" Inserts a provided [RestorationBucket] into the widget tree and makes it available to descendants via [RestorationScope.of].","fields":[{"name":"bucket","type":"RestorationBucket?","desc":"The [RestorationBucket] that this widget will insert into the widget tree."}],"id":554,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_zh-CN.json deleted file mode 100644 index 7e0ddfae5..000000000 --- a/modules/widget_system/widgets/doc/widgets/UnmanagedRestorationScope/UnmanagedRestorationScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UnmanagedRestorationScope","path":"/src/widgets/restoration.dart","parents":["InheritedWidget","ProxyWidget","Widget"],"desc":"将提供的 [RestorationBucket] 插入小部件树并通过 [RestorationScope.of] 使其对后代可用。","fields":[{"name":"bucket","type":"RestorationBucket?","desc":"此小部件将插入小部件树的 [RestorationBucket]。"}],"id":554,"localName":"UnmanagedRestorationScope","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_en-US.json b/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_en-US.json deleted file mode 100644 index 2c7a08811..000000000 --- a/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UserAccountsDrawerHeader","path":"/src/material/user_accounts_drawer_header.dart","parents":["StatefulWidget","Widget"],"desc":" A Material Design [Drawer] header that identifies the app's user.","fields":[{"name":"decoration","type":"Decoration?","desc":"The header's background. If decoration is null then a [BoxDecoration] with its background color set to the current theme's primaryColor is used."},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"The margin around the drawer header."},{"name":"currentAccountPicture","type":"Widget?","desc":"A widget placed in the upper-left corner that represents the current user's account. Normally a [CircleAvatar]."},{"name":"otherAccountsPictures","type":"List?","desc":"A list of widgets that represent the current user's other accounts. Up to three of these widgets will be arranged in a row in the header's upper-right corner. Normally a list of [CircleAvatar] widgets."},{"name":"currentAccountPictureSize","type":"Size","required":true,"desc":"The size of the [currentAccountPicture]."},{"name":"otherAccountsPicturesSize","type":"Size","required":true,"desc":"The size of each widget in [otherAccountsPicturesSize]."},{"name":"accountName","type":"Widget?","desc":"A widget that represents the user's current account name. It is displayed on the left, below the [currentAccountPicture]."},{"name":"accountEmail","type":"Widget?","desc":"A widget that represents the email address of the user's current account. It is displayed on the left, below the [accountName]."},{"name":"onDetailsPressed","type":"VoidCallback?","desc":"A callback that is called when the horizontal area which contains the [accountName] and [accountEmail] is tapped."},{"name":"arrowColor","type":"Color","required":true,"desc":"The [Color] of the arrow icon."}],"id":22,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"The basic performance of this component is as follows","desc":["【currentAccountPicture】: Top component 【Widget】","【accountName】: Middle component 【Widget】","【accountEmail】: Bottom component 【Widget】","【decoration】: Decoration 【Decoration】"]},{"file":"node2_pro.dart","name":"Top right corner and bottom","desc":["【otherAccountsPictures】: Top right component 【List】","【onDetailsPressed】: Bottom right click event 【Function()】","【arrowColor】: Bottom right button color 【Color】","【margin】: Margin 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_zh-CN.json b/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_zh-CN.json deleted file mode 100644 index 5884084b1..000000000 --- a/modules/widget_system/widgets/doc/widgets/UserAccountsDrawerHeader/UserAccountsDrawerHeader_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"UserAccountsDrawerHeader","path":"/src/material/user_accounts_drawer_header.dart","parents":["StatefulWidget","Widget"],"desc":"标识应用程序用户的 Material Design [Drawer] 标题。","fields":[{"name":"decoration","type":"Decoration?","desc":"标题的背景。如果 decoration 为 null,则使用背景颜色设置为当前主题的 primaryColor 的 [BoxDecoration]。"},{"name":"margin","type":"EdgeInsetsGeometry?","desc":"抽屉标题周围的边距。"},{"name":"currentAccountPicture","type":"Widget?","desc":"放置在左上角代表当前用户帐户的小部件。通常是 [CircleAvatar]。"},{"name":"otherAccountsPictures","type":"List?","desc":"代表当前用户其他帐户的小部件列表。这些小部件中最多三个将在标题右上角排成一行。通常是 [CircleAvatar] 小部件列表。"},{"name":"currentAccountPictureSize","type":"Size","required":true,"desc":"[currentAccountPicture] 的大小。"},{"name":"otherAccountsPicturesSize","type":"Size","required":true,"desc":"[otherAccountsPicturesSize] 中每个小部件的大小。"},{"name":"accountName","type":"Widget?","desc":"代表用户当前帐户名称的小部件。它显示在左侧,[currentAccountPicture] 下方。"},{"name":"accountEmail","type":"Widget?","desc":"代表用户当前帐户电子邮件地址的小部件。它显示在左侧,[accountName] 下方。"},{"name":"onDetailsPressed","type":"VoidCallback?","desc":"点击包含 [accountName] 和 [accountEmail] 的水平区域时调用的回调。"},{"name":"arrowColor","type":"Color","required":true,"desc":"箭头图标的 [Color]。"}],"id":22,"localName":"展示头","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"该组件的基本表现如下","desc":["【currentAccountPicture】: 上组件 【Widget】","【accountName】: 中组件 【Widget】","【accountEmail】: 下组件 【Widget】","【decoration】: 装饰 【Decoration】"]},{"file":"node2_pro.dart","name":"右上角和底部","desc":["【otherAccountsPictures】: 右上组件 【List】","【onDetailsPressed】: 右下角点击事件 【Function()】","【arrowColor】: 右下角按钮颜色 【Color】","【margin】: 外边距 【EdgeInsetsGeometry】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_en-US.json b/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_en-US.json deleted file mode 100644 index 6628263ac..000000000 --- a/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ValueListenableBuilder","path":"/src/widgets/value_listenable_builder.dart","parents":["StatefulWidget","Widget"],"desc":" A widget whose content stays synced with a [ValueListenable].","fields":[{"name":"valueListenable","type":"ValueListenable","required":true,"desc":"The [ValueListenable] whose value you depend on in order to build."},{"name":"builder","type":"ValueWidgetBuilder","required":true,"desc":"A [ValueWidgetBuilder] which builds a widget depending on the [valueListenable]'s value."},{"name":"child","type":"Widget?","desc":"A [valueListenable]-independent widget which is passed back to the [builder]."}],"id":255,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of ValueListenableBuilder","desc":["【builder】: Component builder 【ValueWidgetBuilder】","【valueListenable】: Listened value 【ValueListenable】","【child】: Child component 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_zh-CN.json deleted file mode 100644 index 26c46de90..000000000 --- a/modules/widget_system/widgets/doc/widgets/ValueListenableBuilder/ValueListenableBuilder_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ValueListenableBuilder","path":"/src/widgets/value_listenable_builder.dart","parents":["StatefulWidget","Widget"],"desc":"内容与 [ValueListenable] 保持同步的小部件。","fields":[{"name":"valueListenable","type":"ValueListenable","required":true,"desc":"您依赖其值来构建的 [ValueListenable]。"},{"name":"builder","type":"ValueWidgetBuilder","required":true,"desc":"根据 [valueListenable] 的值构建小部件的 [ValueWidgetBuilder]。"},{"name":"child","type":"Widget?","desc":"与 [valueListenable] 无关的小部件,传递回 [builder]。"}],"id":255,"localName":"监听值构造器","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"ValueListenableBuilder基本使用","desc":["【builder】: 组件构造器 【ValueWidgetBuilder】","【valueListenable】: 监听值 【ValueListenable】","【child】: 子组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_en-US.json b/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_en-US.json deleted file mode 100644 index 86c826bc0..000000000 --- a/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"VerticalDivider","path":"/src/material/divider.dart","parents":["StatelessWidget","Widget"],"desc":" A thin vertical line, with padding on either side.","fields":[{"name":"width","type":"double?","desc":"The divider's width."},{"name":"thickness","type":"double?","desc":"The thickness of the line drawn within the divider."},{"name":"indent","type":"double?","desc":"The amount of empty space on top of the divider."},{"name":"endIndent","type":"double?","desc":"The amount of empty space under the divider."},{"name":"color","type":"Color?","desc":"The color to use when painting the line."},{"name":"radius","type":"BorderRadiusGeometry?","desc":"The amount of radius for the border of the divider."}],"id":35,"lever":2,"family":0,"linkIds":[34,329],"nodes":[{"file":"node1_base.dart","name":"VerticalDivider Color and Thickness","desc":["【color】: Color 【Color】","【thickness】: Line thickness 【double】"]},{"file":"node2_height.dart","name":"VerticalDivider Width and Indent","desc":["【indent】: Front indent length 【double】","【endIndent】: Back indent length 【double】","【width】: Placeholder width 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_zh-CN.json b/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_zh-CN.json deleted file mode 100644 index 5e312a012..000000000 --- a/modules/widget_system/widgets/doc/widgets/VerticalDivider/VerticalDivider_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"VerticalDivider","path":"/src/material/divider.dart","parents":["StatelessWidget","Widget"],"desc":"细垂直线,两侧有内边距。","fields":[{"name":"width","type":"double?","desc":"分隔符的宽度。"},{"name":"thickness","type":"double?","desc":"分隔符内绘制的线的厚度。"},{"name":"indent","type":"double?","desc":"分隔符顶部的空白空间量。"},{"name":"endIndent","type":"double?","desc":"分隔符底部的空白空间量。"},{"name":"color","type":"Color?","desc":"绘制线条时使用的颜色。"},{"name":"radius","type":"BorderRadiusGeometry?","desc":"分隔符边框的半径量。"}],"id":35,"localName":"竖直分割线","lever":2,"family":0,"linkIds":[34,329],"nodes":[{"file":"node1_base.dart","name":"VerticalDivider颜色和粗细","desc":["【color】: 颜色 【Color】","【thickness】: 线粗细 【double】"]},{"file":"node2_height.dart","name":"VerticalDivider宽度和空缺","desc":["【indent】: 前面空缺长度 【double】","【endIndent】: 后面空缺长度 【double】","【width】: 占位宽 【double】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/View/View_en-US.json b/modules/widget_system/widgets/doc/widgets/View/View_en-US.json deleted file mode 100644 index 8aa800daf..000000000 --- a/modules/widget_system/widgets/doc/widgets/View/View_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"View","path":"/src/widgets/view.dart","parents":["StatefulWidget","Widget"],"desc":" Bootstraps a render tree that is rendered into the provided [FlutterView].","fields":[{"name":"view","type":"FlutterView","required":true,"desc":"The [FlutterView] into which [child] is drawn."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree, which will be drawn into the [view]."}],"id":555,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/View/View_zh-CN.json b/modules/widget_system/widgets/doc/widgets/View/View_zh-CN.json deleted file mode 100644 index b86d34a44..000000000 --- a/modules/widget_system/widgets/doc/widgets/View/View_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"View","path":"/src/widgets/view.dart","parents":["StatefulWidget","Widget"],"desc":"引导渲染到提供的 [FlutterView] 中的渲染树。","fields":[{"name":"view","type":"FlutterView","required":true,"desc":"绘制 [child] 的 [FlutterView]。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件,将绘制到 [view] 中。"}],"id":555,"localName":"View","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_en-US.json b/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_en-US.json deleted file mode 100644 index 60cbf4b1e..000000000 --- a/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ViewAnchor","path":"/src/widgets/view.dart","parents":["StatelessWidget","Widget"],"desc":" Decorates a [child] widget with a side [View].","fields":[{"name":"view","type":"Widget?","desc":"The widget that defines the view anchored to this widget."},{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."}],"id":556,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_zh-CN.json deleted file mode 100644 index 655500ae3..000000000 --- a/modules/widget_system/widgets/doc/widgets/ViewAnchor/ViewAnchor_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ViewAnchor","path":"/src/widgets/view.dart","parents":["StatelessWidget","Widget"],"desc":"用侧边 [View] 装饰 [child] 小部件。","fields":[{"name":"view","type":"Widget?","desc":"定义锚定到此小部件的视图的小部件。"},{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"}],"id":556,"localName":"ViewAnchor","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_en-US.json b/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_en-US.json deleted file mode 100644 index eb954d7be..000000000 --- a/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ViewCollection","path":"/src/widgets/view.dart","parents":["_MultiChildComponentWidget","Widget"],"desc":" A collection of sibling [View]s.","fields":[],"id":557,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_zh-CN.json b/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_zh-CN.json deleted file mode 100644 index d7ebaf1a8..000000000 --- a/modules/widget_system/widgets/doc/widgets/ViewCollection/ViewCollection_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"ViewCollection","path":"/src/widgets/view.dart","parents":["_MultiChildComponentWidget","Widget"],"desc":"兄弟 [View] 的集合。","fields":[],"id":557,"localName":"ViewCollection","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_en-US.json b/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_en-US.json deleted file mode 100644 index 99f4e7ae9..000000000 --- a/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Viewport","path":"/src/widgets/viewport.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget through which a portion of larger content can be viewed, typically in combination with a [Scrollable].","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"The direction in which the [offset]'s [ViewportOffset.pixels] increases."},{"name":"crossAxisDirection","type":"AxisDirection?","desc":"The direction in which child should be laid out in the cross axis."},{"name":"anchor","type":"double","required":true,"desc":"The relative position of the zero scroll offset."},{"name":"offset","type":"ViewportOffset","required":true,"desc":"Which part of the content inside the viewport should be visible."},{"name":"center","type":"Key?","desc":"The first child in the [GrowthDirection.forward] growth direction."},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"cacheExtentStyle","type":"CacheExtentStyle","required":true,"desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtentStyle}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":340,"lever":1,"family":3,"linkIds":[253,349],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Viewport","desc":["【offset】: *Viewport offset 【ViewportOffset】","【cacheExtentStyle】: Preload type 【CacheExtentStyle】","【cacheExtent】: Preload amount 【double】","【axisDirection】: Scrolling direction 【AxisDirection】","【slivers】: Child Sliver component set 【List】","【anchor】: Anchor point 【double】","You can run this code to see how the ColorItem is constructed, the 128 color bars are not all constructed at once."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_zh-CN.json deleted file mode 100644 index 8dd6ec232..000000000 --- a/modules/widget_system/widgets/doc/widgets/Viewport/Viewport_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Viewport","path":"/src/widgets/viewport.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"可以查看较大内容的一部分的小部件,通常与 [Scrollable] 结合使用。","fields":[{"name":"axisDirection","type":"AxisDirection","required":true,"desc":"[offset] 的 [ViewportOffset.pixels] 增加的方向。"},{"name":"crossAxisDirection","type":"AxisDirection?","desc":"子项在交叉轴上应布局的方向。"},{"name":"anchor","type":"double","required":true,"desc":"零滚动偏移的相对位置。"},{"name":"offset","type":"ViewportOffset","required":true,"desc":"视口内容的哪一部分应该可见。"},{"name":"center","type":"Key?","desc":"[GrowthDirection.forward] 增长方向中的第一个子项。"},{"name":"cacheExtent","type":"double?","desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtent}"},{"name":"cacheExtentStyle","type":"CacheExtentStyle","required":true,"desc":"{@macro flutter.rendering.RenderViewportBase.cacheExtentStyle}"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":340,"localName":"视口组件","lever":1,"family":3,"linkIds":[253,349],"nodes":[{"file":"node1_base.dart","name":"Viewport的基本使用","desc":["【offset】 : *视口偏移量 【ViewportOffset】","【cacheExtentStyle】: 预加载类型 【CacheExtentStyle】","【cacheExtent】: 预加载量 【double】","【axisDirection】: 滑动方向 【AxisDirection】","【slivers】: 子Sliver组件集 【List】","【anchor】: 锚点 【double】","可以运行这些代码,查看ColorItem的构建情况,128个色条并非一次性全部构建。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_en-US.json b/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_en-US.json deleted file mode 100644 index 077cf82b1..000000000 --- a/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Visibility","path":"/src/widgets/visibility.dart","parents":["StatelessWidget","Widget"],"desc":" Whether to show or hide a child.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget to show or hide, as controlled by [visible]."},{"name":"replacement","type":"Widget","required":true,"desc":"The widget to use when the child is not [visible], assuming that none of the `maintain` flags (in particular, [maintainState]) are set."},{"name":"visible","type":"bool","required":true,"desc":"Switches between showing the [child] or hiding it."},{"name":"maintainState","type":"bool","required":true,"desc":"Whether to maintain the [State] objects of the [child] subtree when it is not [visible]."},{"name":"maintainAnimation","type":"bool","required":true,"desc":"Whether to maintain animations within the [child] subtree when it is not [visible]."},{"name":"maintainSize","type":"bool","required":true,"desc":"Whether to maintain space for where the widget would have been."},{"name":"maintainSemantics","type":"bool","required":true,"desc":"Whether to maintain the semantics for the widget when it is hidden (e.g. for accessibility)."},{"name":"maintainInteractivity","type":"bool","required":true,"desc":"Whether to allow the widget to be interactive when hidden."}],"id":10,"lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Control the visibility of internal child components based on visible","desc":["【visible】: Whether to display 【bool】","【child】: Child 【Widget】","By default, the child will lose its original area when hidden."]},{"file":"node2_replacement.dart","name":"replacement can be used as a placeholder when hidden","desc":["【replacement】: Placeholder component when hidden 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_zh-CN.json deleted file mode 100644 index ed7a9d050..000000000 --- a/modules/widget_system/widgets/doc/widgets/Visibility/Visibility_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Visibility","path":"/src/widgets/visibility.dart","parents":["StatelessWidget","Widget"],"desc":"是否显示或隐藏子项。","fields":[{"name":"child","type":"Widget","required":true,"desc":"要显示或隐藏的小部件,由 [visible] 控制。"},{"name":"replacement","type":"Widget","required":true,"desc":"当子项不 [visible] 时使用的小部件,假设没有设置任何 `maintain` 标志(特别是 [maintainState])。"},{"name":"visible","type":"bool","required":true,"desc":"在显示 [child] 或隐藏它之间切换。"},{"name":"maintainState","type":"bool","required":true,"desc":"当 [child] 子树不 [visible] 时是否维护其 [State] 对象。"},{"name":"maintainAnimation","type":"bool","required":true,"desc":"当 [child] 子树不 [visible] 时是否维护其中的动画。"},{"name":"maintainSize","type":"bool","required":true,"desc":"是否为小部件本来所在的位置维护空间。"},{"name":"maintainSemantics","type":"bool","required":true,"desc":"当小部件隐藏时是否维护其语义(例如用于辅助功能)。"},{"name":"maintainInteractivity","type":"bool","required":true,"desc":"隐藏时是否允许小部件可交互。"}],"id":10,"localName":"显隐组件","lever":3,"family":0,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"根据visible控制内部子组件的显隐情况","desc":["【visible】 : 是否显示 【bool】","【child】: 孩子 【Widget】","默认孩子隐藏时会失去原来所在区域。"]},{"file":"node2_replacement.dart","name":"replacement可在隐藏时进行占位","desc":["【replacement】 : 隐藏时的占位组件 【Widget】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_en-US.json b/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_en-US.json deleted file mode 100644 index ef7c490b1..000000000 --- a/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"WidgetInspector","path":"/src/widgets/widget_inspector.dart","parents":["StatefulWidget","Widget"],"desc":" A widget that enables inspecting the child widget's structure.","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget that is being inspected."},{"name":"exitWidgetSelectionButtonBuilder","type":"ExitWidgetSelectionButtonBuilder?","desc":"A builder that is called to create the exit select-mode button."},{"name":"moveExitWidgetSelectionButtonBuilder","type":"MoveExitWidgetSelectionButtonBuilder?","desc":"A builder that is called to create the button that moves the exit select- mode button to the right or left."},{"name":"tapBehaviorButtonBuilder","type":"TapBehaviorButtonBuilder?","desc":"A builder that is called to create the button that changes the default tap behavior when Select Widget mode is enabled."}],"id":234,"lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of WidgetInspector","desc":["【child】 : Child component 【Widget】","【selectButtonBuilder】: *Select button builder 【InspectorSelectButtonBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_zh-CN.json b/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_zh-CN.json deleted file mode 100644 index eb8a620d6..000000000 --- a/modules/widget_system/widgets/doc/widgets/WidgetInspector/WidgetInspector_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"WidgetInspector","path":"/src/widgets/widget_inspector.dart","parents":["StatefulWidget","Widget"],"desc":"启用检查子小部件结构的小部件。","fields":[{"name":"child","type":"Widget","required":true,"desc":"正在被检查的小部件。"},{"name":"exitWidgetSelectionButtonBuilder","type":"ExitWidgetSelectionButtonBuilder?","desc":"调用以创建退出选择模式按钮的构建器。"},{"name":"moveExitWidgetSelectionButtonBuilder","type":"MoveExitWidgetSelectionButtonBuilder?","desc":"调用以创建将退出选择模式按钮向右或向左移动的按钮的构建器。"},{"name":"tapBehaviorButtonBuilder","type":"TapBehaviorButtonBuilder?","desc":"调用以创建在启用选择小部件模式时更改默认点击行为的按钮的构建器。"}],"id":234,"localName":"组件检查器","lever":2,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"WidgetInspector基本使用","desc":["【child】 : 子组件 【Widget】","【selectButtonBuilder】: *选择按钮构造器 【InspectorSelectButtonBuilder】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_en-US.json b/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_en-US.json deleted file mode 100644 index 2e3987fa2..000000000 --- a/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"WidgetToRenderBoxAdapter","path":"/src/widgets/basic.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" An adapter for placing a specific [RenderBox] in the widget tree.","fields":[{"name":"renderBox","type":"RenderBox","required":true,"desc":"The render box to place in the widget tree."},{"name":"onBuild","type":"VoidCallback?","desc":"Called when it is safe to update the render box and its descendants. If you update the RenderObject subtree under this widget outside of invocations of this callback, features like hit-testing will fail as the tree will be dirty."},{"name":"onUnmount","type":"VoidCallback?","desc":"Called when it is safe to dispose of children that were manually added to the [renderBox]."}],"id":558,"lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_zh-CN.json b/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_zh-CN.json deleted file mode 100644 index 512b98c2b..000000000 --- a/modules/widget_system/widgets/doc/widgets/WidgetToRenderBoxAdapter/WidgetToRenderBoxAdapter_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"WidgetToRenderBoxAdapter","path":"/src/widgets/basic.dart","parents":["LeafRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在小部件树中放置特定 [RenderBox] 的适配器。","fields":[{"name":"renderBox","type":"RenderBox","required":true,"desc":"要放置在小部件树中的渲染框。"},{"name":"onBuild","type":"VoidCallback?","desc":"当可以安全地更新渲染框及其后代时调用。如果您在此回调的调用之外更新此小部件下的 RenderObject 子树,诸如命中测试之类的功能将失败,因为树将是脏的。"},{"name":"onUnmount","type":"VoidCallback?","desc":"当可以安全地处置手动添加到 [renderBox] 的子项时调用。"}],"id":558,"localName":"WidgetToRenderBoxAdapter","lever":3,"family":3,"linkIds":[],"nodes":[]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_en-US.json b/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_en-US.json deleted file mode 100644 index 33aea350d..000000000 --- a/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"WidgetsApp","path":"/src/widgets/app.dart","parents":["StatefulWidget","Widget"],"desc":" A convenience widget that wraps a number of widgets that are commonly required for an application.","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@template flutter.widgets.widgetsApp.navigatorKey} A key to use when building the [Navigator]."},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@template flutter.widgets.widgetsApp.onGenerateRoute} The route generator callback used when the app is navigated to a named route."},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@template flutter.widgets.widgetsApp.onGenerateInitialRoutes} The routes generator callback used for generating initial routes if [initialRoute] is provided."},{"name":"pageRouteBuilder","type":"PageRouteFactory?","desc":"The [PageRoute] generator callback used when the app is navigated to a named route."},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@template flutter.widgets.widgetsApp.routeInformationParser} A delegate to parse the route information from the [routeInformationProvider] into a generic data type to be processed by the [routerDelegate] at a later stage."},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@template flutter.widgets.widgetsApp.routerDelegate} A delegate that configures a widget, typically a [Navigator], with parsed result from the [routeInformationParser]."},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@template flutter.widgets.widgetsApp.backButtonDispatcher} A delegate that decide whether to handle the Android back button intent."},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@template flutter.widgets.widgetsApp.routeInformationProvider} A object that provides route information through the [RouteInformationProvider.value] and notifies its listener when its value changes."},{"name":"routerConfig","type":"RouterConfig?","desc":"{@template flutter.widgets.widgetsApp.routerConfig} An object to configure the underlying [Router]."},{"name":"home","type":"Widget?","desc":"{@template flutter.widgets.widgetsApp.home} The widget for the default route of the app ([Navigator.defaultRouteName], which is `/`)."},{"name":"routes","type":"Map?","desc":"The application's top-level routing table."},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@template flutter.widgets.widgetsApp.onUnknownRoute} Called when [onGenerateRoute] fails to generate a route, except for the [initialRoute]."},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@template flutter.widgets.widgetsApp.onNavigationNotification} The callback to use when receiving a [NavigationNotification]."},{"name":"initialRoute","type":"String?","desc":"{@template flutter.widgets.widgetsApp.initialRoute} The name of the first route to show, if a [Navigator] is built."},{"name":"navigatorObservers","type":"List?","desc":"{@template flutter.widgets.widgetsApp.navigatorObservers} The list of observers for the [Navigator] created for this app."},{"name":"builder","type":"TransitionBuilder?","desc":"{@template flutter.widgets.widgetsApp.builder} A builder for inserting widgets above the [Navigator] or - when the [WidgetsApp.router] constructor is used - above the [Router] but below the other widgets created by the [WidgetsApp] widget, or for replacing the [Navigator]/[Router] entirely."},{"name":"title","type":"String?","desc":"{@template flutter.widgets.widgetsApp.title} A one-line description used by the device to identify the app for the user."},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@template flutter.widgets.widgetsApp.onGenerateTitle} If non-null this callback function is called to produce the app's title string, otherwise [title] is used."},{"name":"textStyle","type":"TextStyle?","desc":"The default text style for [Text] in the application."},{"name":"color","type":"Color","required":true,"desc":"{@template flutter.widgets.widgetsApp.color} The primary color to use for the application in the operating system interface."},{"name":"locale","type":"Locale?","desc":"{@template flutter.widgets.widgetsApp.locale} The initial locale for this app's [Localizations] widget is based on this value."},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@template flutter.widgets.widgetsApp.localizationsDelegates} The delegates for this app's [Localizations] widget."},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@template flutter.widgets.widgetsApp.localeListResolutionCallback} This callback is responsible for choosing the app's locale when the app is started, and when the user changes the device's locale."},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@template flutter.widgets.widgetsApp.supportedLocales} The list of locales that this app has been localized for."},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"Turns on a performance overlay."},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"Turns on an overlay that shows the accessibility information reported by the framework."},{"name":"debugShowWidgetInspector","type":"bool","required":true,"desc":"Turns on an overlay that enables inspecting the widget tree."},{"name":"exitWidgetSelectionButtonBuilder","type":"ExitWidgetSelectionButtonBuilder?","desc":"Builds the widget the [WidgetInspector] uses to exit selection mode."},{"name":"moveExitWidgetSelectionButtonBuilder","type":"MoveExitWidgetSelectionButtonBuilder?","desc":"Builds the widget the [WidgetInspector] uses to move the exit selection mode button."},{"name":"tapBehaviorButtonBuilder","type":"TapBehaviorButtonBuilder?","desc":"Builds the widget the [WidgetInspector] uses to change the default behavior when tapping on widgets in the app."},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@template flutter.widgets.widgetsApp.debugShowCheckedModeBanner} Turns on a little \"DEBUG\" banner in debug mode to indicate that the app is in debug mode. This is on by default (in debug mode), to turn it off, set the constructor argument to false. In release mode this has no effect."},{"name":"shortcuts","type":"Map?","desc":"{@template flutter.widgets.widgetsApp.shortcuts} The default map of keyboard shortcuts to intents for the application."},{"name":"actions","type":"Map>?","desc":"{@template flutter.widgets.widgetsApp.actions} The default map of intent keys to actions for the application."},{"name":"restorationScopeId","type":"String?","desc":"{@template flutter.widgets.widgetsApp.restorationScopeId} The identifier to use for state restoration of this app."},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@template flutter.widgets.widgetsApp.useInheritedMediaQuery} Deprecated. This setting is now ignored."}],"id":236,"lever":2,"family":1,"linkIds":[65,156],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of WidgetsApp","desc":["【pageRouteBuilder】 : *Route Builder 【PageRouteFactory】","【color】: *Color 【Color】","【debugShowWidgetInspector】: Whether to display the widget inspector 【bool】","Other properties are basically the same as MaterialApp, see details there."]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_zh-CN.json b/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_zh-CN.json deleted file mode 100644 index 6ed80808a..000000000 --- a/modules/widget_system/widgets/doc/widgets/WidgetsApp/WidgetsApp_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"WidgetsApp","path":"/src/widgets/app.dart","parents":["StatefulWidget","Widget"],"desc":"包装应用程序通常需要的多个小部件的便利小部件。","fields":[{"name":"navigatorKey","type":"GlobalKey?","desc":"{@template flutter.widgets.widgetsApp.navigatorKey} 构建 [Navigator] 时使用的键。"},{"name":"onGenerateRoute","type":"RouteFactory?","desc":"{@template flutter.widgets.widgetsApp.onGenerateRoute} 应用程序导航到命名路由时使用的路由生成器回调。"},{"name":"onGenerateInitialRoutes","type":"InitialRouteListFactory?","desc":"{@template flutter.widgets.widgetsApp.onGenerateInitialRoutes} 如果提供了 [initialRoute],用于生成初始路由的路由生成器回调。"},{"name":"pageRouteBuilder","type":"PageRouteFactory?","desc":"应用程序导航到命名路由时使用的 [PageRoute] 生成器回调。"},{"name":"routeInformationParser","type":"RouteInformationParser?","desc":"{@template flutter.widgets.widgetsApp.routeInformationParser} 将来自 [routeInformationProvider] 的路由信息解析为通用数据类型的委托,以便稍后由 [routerDelegate] 处理。"},{"name":"routerDelegate","type":"RouterDelegate?","desc":"{@template flutter.widgets.widgetsApp.routerDelegate} 使用来自 [routeInformationParser] 的解析结果配置小部件(通常是 [Navigator])的委托。"},{"name":"backButtonDispatcher","type":"BackButtonDispatcher?","desc":"{@template flutter.widgets.widgetsApp.backButtonDispatcher} 决定是否处理 Android 返回按钮意图的委托。"},{"name":"routeInformationProvider","type":"RouteInformationProvider?","desc":"{@template flutter.widgets.widgetsApp.routeInformationProvider} 通过 [RouteInformationProvider.value] 提供路由信息并在其值更改时通知其监听器的对象。"},{"name":"routerConfig","type":"RouterConfig?","desc":"{@template flutter.widgets.widgetsApp.routerConfig} 配置底层 [Router] 的对象。"},{"name":"home","type":"Widget?","desc":"{@template flutter.widgets.widgetsApp.home} 应用程序默认路由的小部件([Navigator.defaultRouteName],即 `/`)。"},{"name":"routes","type":"Map?","desc":"应用程序的顶级路由表。"},{"name":"onUnknownRoute","type":"RouteFactory?","desc":"{@template flutter.widgets.widgetsApp.onUnknownRoute} 当 [onGenerateRoute] 无法生成路由时调用,除了 [initialRoute]。"},{"name":"onNavigationNotification","type":"NotificationListenerCallback?","desc":"{@template flutter.widgets.widgetsApp.onNavigationNotification} 接收 [NavigationNotification] 时使用的回调。"},{"name":"initialRoute","type":"String?","desc":"{@template flutter.widgets.widgetsApp.initialRoute} 如果构建了 [Navigator],要显示的第一个路由的名称。"},{"name":"navigatorObservers","type":"List?","desc":"{@template flutter.widgets.widgetsApp.navigatorObservers} 为此应用程序创建的 [Navigator] 的观察者列表。"},{"name":"builder","type":"TransitionBuilder?","desc":"{@template flutter.widgets.widgetsApp.builder} 用于在 [Navigator] 上方插入小部件的构建器,或者当使用 [WidgetsApp.router] 构造函数时在 [Router] 上方但在 [WidgetsApp] 小部件创建的其他小部件下方,或者完全替换 [Navigator]/[Router]。"},{"name":"title","type":"String?","desc":"{@template flutter.widgets.widgetsApp.title} 设备用于向用户标识应用程序的单行描述。"},{"name":"onGenerateTitle","type":"GenerateAppTitle?","desc":"{@template flutter.widgets.widgetsApp.onGenerateTitle} 如果非空,调用此回调函数来生成应用程序的标题字符串,否则使用 [title]。"},{"name":"textStyle","type":"TextStyle?","desc":"应用程序中 [Text] 的默认文本样式。"},{"name":"color","type":"Color","required":true,"desc":"{@template flutter.widgets.widgetsApp.color} 在操作系统界面中用于应用程序的主要颜色。"},{"name":"locale","type":"Locale?","desc":"{@template flutter.widgets.widgetsApp.locale} 此应用程序的 [Localizations] 小部件的初始区域设置基于此值。"},{"name":"localizationsDelegates","type":"Iterable>?","desc":"{@template flutter.widgets.widgetsApp.localizationsDelegates} 此应用程序的 [Localizations] 小部件的委托。"},{"name":"localeListResolutionCallback","type":"LocaleListResolutionCallback?","desc":"{@template flutter.widgets.widgetsApp.localeListResolutionCallback} 此回调负责在应用程序启动时以及用户更改设备区域设置时选择应用程序的区域设置。"},{"name":"localeResolutionCallback","type":"LocaleResolutionCallback?","desc":"{@macro flutter.widgets.widgetsApp.localeListResolutionCallback}"},{"name":"supportedLocales","type":"Iterable","required":true,"desc":"{@template flutter.widgets.widgetsApp.supportedLocales} 此应用程序已本地化的区域设置列表。"},{"name":"showPerformanceOverlay","type":"bool","required":true,"desc":"打开性能覆盖。"},{"name":"showSemanticsDebugger","type":"bool","required":true,"desc":"打开显示框架报告的辅助功能信息的覆盖。"},{"name":"debugShowWidgetInspector","type":"bool","required":true,"desc":"打开启用检查小部件树的覆盖。"},{"name":"exitWidgetSelectionButtonBuilder","type":"ExitWidgetSelectionButtonBuilder?","desc":"构建 [WidgetInspector] 用于退出选择模式的小部件。"},{"name":"moveExitWidgetSelectionButtonBuilder","type":"MoveExitWidgetSelectionButtonBuilder?","desc":"构建 [WidgetInspector] 用于移动退出选择模式按钮的小部件。"},{"name":"tapBehaviorButtonBuilder","type":"TapBehaviorButtonBuilder?","desc":"构建 [WidgetInspector] 用于更改在应用程序中点击小部件时的默认行为的小部件。"},{"name":"debugShowCheckedModeBanner","type":"bool","required":true,"desc":"{@template flutter.widgets.widgetsApp.debugShowCheckedModeBanner} 在调试模式下打开一个小的"},{"name":"shortcuts","type":"Map?","desc":"{@template flutter.widgets.widgetsApp.shortcuts} 应用程序的键盘快捷键到意图的默认映射。"},{"name":"actions","type":"Map>?","desc":"{@template flutter.widgets.widgetsApp.actions} 应用程序的意图键到操作的默认映射。"},{"name":"restorationScopeId","type":"String?","desc":"{@template flutter.widgets.widgetsApp.restorationScopeId} 用于此应用程序状态恢复的标识符。"},{"name":"useInheritedMediaQuery","type":"bool","required":true,"desc":"{@template flutter.widgets.widgetsApp.useInheritedMediaQuery} 已弃用。此设置现在被忽略。"}],"id":236,"localName":"组件应用","lever":2,"family":1,"linkIds":[65,156],"nodes":[{"file":"node1_base.dart","name":"WidgetsApp基本使用","desc":["【pageRouteBuilder】 : *路由构造器 【PageRouteFactory】","【color】: *颜色 【Color】","【debugShowWidgetInspector】: 是否显示z组件查看器 【bool】","其他属性基本上同MaterialApp,详见之。"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_en-US.json b/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_en-US.json deleted file mode 100644 index bd3bad234..000000000 --- a/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"WillPopScope","path":"/src/widgets/will_pop_scope.dart","parents":["StatefulWidget","Widget"],"desc":" Registers a callback to veto attempts by the user to dismiss the enclosing [ModalRoute].","fields":[{"name":"child","type":"Widget","required":true,"desc":"The widget below this widget in the tree."},{"name":"onWillPop","type":"WillPopCallback?","desc":"Called to veto attempts by the user to dismiss the enclosing [ModalRoute]."}],"id":170,"lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"WillPopScope Usage","desc":["【child】: Child component 【Widget】","【onWillPop】: Return callback 【WillPopCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_zh-CN.json b/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_zh-CN.json deleted file mode 100644 index b6c508d2c..000000000 --- a/modules/widget_system/widgets/doc/widgets/WillPopScope/WillPopScope_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"WillPopScope","path":"/src/widgets/will_pop_scope.dart","parents":["StatefulWidget","Widget"],"desc":"注册回调以否决用户关闭封闭 [ModalRoute] 的尝试。","fields":[{"name":"child","type":"Widget","required":true,"desc":"树中此小部件下方的小部件。"},{"name":"onWillPop","type":"WillPopCallback?","desc":"调用以否决用户关闭封闭 [ModalRoute] 的尝试。"}],"id":170,"localName":"返回拦截","lever":5,"family":1,"linkIds":[],"nodes":[{"file":"node1_base.dart","name":"WillPopScope使用","desc":["【child】 : 子组件 【Widget】","【onWillPop】 : 返回回调 【WillPopCallback】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_en-US.json b/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_en-US.json deleted file mode 100644 index a46bb3269..000000000 --- a/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Wrap","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":" A widget that displays its children in multiple horizontal or vertical runs.","fields":[{"name":"direction","type":"Axis","required":true,"desc":"The direction to use as the main axis."},{"name":"alignment","type":"WrapAlignment","required":true,"desc":"How the children within a run should be placed in the main axis."},{"name":"spacing","type":"double","required":true,"desc":"How much space to place between children in a run in the main axis."},{"name":"runAlignment","type":"WrapAlignment","required":true,"desc":"How the runs themselves should be placed in the cross axis."},{"name":"runSpacing","type":"double","required":true,"desc":"How much space to place between the runs themselves in the cross axis."},{"name":"crossAxisAlignment","type":"WrapCrossAlignment","required":true,"desc":"How the children within a run should be aligned relative to each other in the cross axis."},{"name":"textDirection","type":"TextDirection?","desc":"Determines the order to lay children out horizontally and how to interpret `start` and `end` in the horizontal direction."},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"Determines the order to lay children out vertically and how to interpret `start` and `end` in the vertical direction."},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":98,"lever":5,"family":3,"linkIds":[94,95],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of Wrap","desc":["【children】: Component list 【List】","【spacing】: Main axis spacing between items 【double】","【runSpacing】: Cross axis spacing between items 【double】","【direction】: Main axis alignment 【Axis】"]},{"file":"node2_alignment.dart","name":"Wrap's alignment Property","desc":["【alignment】: Main axis alignment 【WrapAlignment】"]},{"file":"node3_crossAxisAlignment.dart","name":"Wrap's crossAxisAlignment Property","desc":["【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】"]},{"file":"node4_textDirection.dart","name":"Wrap's textDirection Property","desc":["【textDirection】: Text direction 【TextDirection】"]},{"file":"node5_verticalDirection.dart","name":"Wrap's verticalDirection Property","desc":["【verticalDirection】: Vertical direction 【VerticalDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_zh-CN.json b/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_zh-CN.json deleted file mode 100644 index 25aa8ddc9..000000000 --- a/modules/widget_system/widgets/doc/widgets/Wrap/Wrap_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"Wrap","path":"/src/widgets/basic.dart","parents":["MultiChildRenderObjectWidget","RenderObjectWidget","Widget"],"desc":"在多个水平或垂直运行中显示其子项的小部件。","fields":[{"name":"direction","type":"Axis","required":true,"desc":"用作主轴的方向。"},{"name":"alignment","type":"WrapAlignment","required":true,"desc":"运行中的子项应如何在主轴上放置。"},{"name":"spacing","type":"double","required":true,"desc":"在主轴上的运行中子项之间放置多少空间。"},{"name":"runAlignment","type":"WrapAlignment","required":true,"desc":"运行本身应如何在交叉轴上放置。"},{"name":"runSpacing","type":"double","required":true,"desc":"在交叉轴上运行本身之间放置多少空间。"},{"name":"crossAxisAlignment","type":"WrapCrossAlignment","required":true,"desc":"运行中的子项应如何在交叉轴上相对于彼此对齐。"},{"name":"textDirection","type":"TextDirection?","desc":"确定水平布局子项的顺序以及如何解释水平方向上的 `start` 和 `end`。"},{"name":"verticalDirection","type":"VerticalDirection","required":true,"desc":"确定垂直布局子项的顺序以及如何解释垂直方向上的 `start` 和 `end`。"},{"name":"clipBehavior","type":"Clip","required":true,"desc":"{@macro flutter.material.Material.clipBehavior}"}],"id":98,"localName":"包裹布局","lever":5,"family":3,"linkIds":[94,95],"nodes":[{"file":"node1_base.dart","name":"Wrap的基础用法","desc":["【children】 : 组件列表 【List】","【spacing】 : 主轴条目间距 【double】","【runSpacing】 : 交叉轴条目间距 【double】","【direction】 : 主轴对齐 【Axis】"]},{"file":"node2_alignment.dart","name":"Wrap的alignment属性","desc":["【alignment】 : 主轴对齐 【WrapAlignment】"]},{"file":"node3_crossAxisAlignment.dart","name":"Wrap的crossAxisAlignment属性","desc":["【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】"]},{"file":"node4_textDirection.dart","name":"Wrap的textDirection属性","desc":["【textDirection】 : 文字方向 【TextDirection】"]},{"file":"node5_verticalDirection.dart","name":"Wrap的verticalDirection属性","desc":["【verticalDirection】 : 竖直方向 【VerticalDirection】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_en-US.json b/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_en-US.json deleted file mode 100644 index 3f8e7bfa5..000000000 --- a/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_en-US.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"YearPicker","path":"/src/material/calendar_date_picker.dart","parents":["StatefulWidget","Widget"],"desc":" A scrollable grid of years to allow picking a year.","fields":[{"name":"currentDate","type":"DateTime","required":true,"desc":"The current date."},{"name":"firstDate","type":"DateTime","required":true,"desc":"The earliest date the user is permitted to pick."},{"name":"lastDate","type":"DateTime","required":true,"desc":"The latest date the user is permitted to pick."},{"name":"selectedDate","type":"DateTime?","desc":"The currently selected date."},{"name":"onChanged","type":"ValueChanged","required":true,"desc":"Called when the user picks a year."},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":136,"lever":3,"family":1,"linkIds":[134,135],"nodes":[{"file":"node1_base.dart","name":"Basic Usage of YearPicker","desc":["【selectedDate】: Selected date 【DateTime】","【firstDate】: First date limit 【DateTime】","【lastDate】: Last date limit 【DateTime】","【onChanged】: Click callback 【Function(DateTime)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_zh-CN.json b/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_zh-CN.json deleted file mode 100644 index 552f8c5ee..000000000 --- a/modules/widget_system/widgets/doc/widgets/YearPicker/YearPicker_zh-CN.json +++ /dev/null @@ -1 +0,0 @@ -{"name":"YearPicker","path":"/src/material/calendar_date_picker.dart","parents":["StatefulWidget","Widget"],"desc":"允许选择年份的可滚动年份网格。","fields":[{"name":"currentDate","type":"DateTime","required":true,"desc":"当前日期。"},{"name":"firstDate","type":"DateTime","required":true,"desc":"用户被允许选择的最早日期。"},{"name":"lastDate","type":"DateTime","required":true,"desc":"用户被允许选择的最晚日期。"},{"name":"selectedDate","type":"DateTime?","desc":"当前选定的日期。"},{"name":"onChanged","type":"ValueChanged","required":true,"desc":"用户选择年份时调用。"},{"name":"dragStartBehavior","type":"DragStartBehavior","required":true,"desc":"{@macro flutter.widgets.scrollable.dragStartBehavior}"},{"name":"calendarDelegate","type":"CalendarDelegate","required":true,"desc":"{@macro flutter.material.calendar_date_picker.calendarDelegate}"}],"id":136,"localName":"年份选择器","lever":3,"family":1,"linkIds":[134,135],"nodes":[{"file":"node1_base.dart","name":"YearPicker基本使用","desc":["【selectedDate】 : 选中日期 【DateTime】","【firstDate】 : 最前日期限制 【DateTime】","【lastDate】 : 最后日期限制 【DateTime】","【onChanged】 : 点击回调 【Function(DateTime)】"]}]} \ No newline at end of file diff --git a/modules/widget_system/widgets/doc/widgets/translation_plan.md b/modules/widget_system/widgets/doc/widgets/translation_plan.md deleted file mode 100644 index 46caab293..000000000 --- a/modules/widget_system/widgets/doc/widgets/translation_plan.md +++ /dev/null @@ -1,8 +0,0 @@ -# 翻译计划 - -**待翻译组件数量**: 0 - -**生成时间**: 2025-07-28 06:31:35.321579 - -## 待翻译组件列表 - diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_de_DE.json deleted file mode 100644 index b00b56ff8..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "Spaltenlayout", - "info": "Flex-Layout mit vertikaler Ausrichtung, das mehrere Komponenten aufnehmen kann. Alle anderen Eigenschaften sind identisch, siehe Flex.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Grundlegende Verwendung von Column", - "desc": [ - "【children】 : Liste der Komponenten 【List】", - "【mainAxisAlignment】 : Hauptachsenausrichtung 【MainAxisAlignment】", - "【crossAxisAlignment】 : Kreuzachsenausrichtung 【CrossAxisAlignment】", - "【textBaseline】 : Textbaseline 【TextBaseline】", - "【verticalDirection】 : Vertikale Richtung 【VerticalDirection】", - "【mainAxisSize】 : Hauptachsengröße 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_en_US.json deleted file mode 100644 index f7250c415..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "Column Layout", - "info": "A Flex layout with a vertical arrangement direction, capable of accommodating multiple components. All other properties are the same, see Flex for details.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Basic Usage of Column", - "desc": [ - "【children】: Component list 【List】", - "【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】", - "【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】", - "【textBaseline】: Text baseline 【TextBaseline】", - "【verticalDirection】: Vertical direction 【VerticalDirection】", - "【mainAxisSize】: Main axis size 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_es_ES.json deleted file mode 100644 index 933b7ab56..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "Disposición de columna", - "info": "Disposición Flex con dirección vertical, puede contener múltiples componentes. Todas las demás propiedades son iguales, consulte Flex para más detalles.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Uso básico de Column", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【mainAxisAlignment】 : Alineación del eje principal 【MainAxisAlignment】", - "【crossAxisAlignment】 : Alineación del eje transversal 【CrossAxisAlignment】", - "【textBaseline】 : Línea base del texto 【TextBaseline】", - "【verticalDirection】 : Dirección vertical 【VerticalDirection】", - "【mainAxisSize】 : Tamaño del eje principal 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_fr_FR.json deleted file mode 100644 index 105e2a1d4..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "Disposition en colonne", - "info": "Une disposition Flex avec une orientation verticale, capable de contenir plusieurs composants. Toutes les autres propriétés sont identiques, voir Flex pour plus de détails.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Utilisation de base de Column", - "desc": [ - "【children】 : Liste des composants 【List】", - "【mainAxisAlignment】 : Alignement de l'axe principal 【MainAxisAlignment】", - "【crossAxisAlignment】 : Alignement de l'axe secondaire 【CrossAxisAlignment】", - "【textBaseline】 : Ligne de base du texte 【TextBaseline】", - "【verticalDirection】 : Direction verticale 【VerticalDirection】", - "【mainAxisSize】 : Taille de l'axe principal 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_it_IT.json deleted file mode 100644 index b8ca8dff4..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "Layout Colonna", - "info": "Un layout Flex con direzione di disposizione verticale, in grado di contenere più componenti. Tutte le altre proprietà sono le stesse, vedi Flex per maggiori dettagli.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Uso di base di Column", - "desc": [ - "【children】 : Lista di componenti 【List】", - "【mainAxisAlignment】 : Allineamento dell'asse principale 【MainAxisAlignment】", - "【crossAxisAlignment】 : Allineamento dell'asse trasversale 【CrossAxisAlignment】", - "【textBaseline】 : Linea di base del testo 【TextBaseline】", - "【verticalDirection】 : Direzione verticale 【VerticalDirection】", - "【mainAxisSize】 : Dimensione dell'asse principale 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ja_JP.json deleted file mode 100644 index a432e0544..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "列レイアウト", - "info": "縦方向に配置するFlexレイアウトで、複数のコンポーネントを収容できます。他の属性はすべて同じです。詳細はFlexを参照してください。", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Columnの基本的な使用法", - "desc": [ - "【children】 : コンポーネントリスト 【List】", - "【mainAxisAlignment】 : 主軸の整列 【MainAxisAlignment】", - "【crossAxisAlignment】 : 交差軸の整列 【CrossAxisAlignment】", - "【textBaseline】 : テキストベースライン 【TextBaseline】", - "【verticalDirection】 : 垂直方向 【VerticalDirection】", - "【mainAxisSize】 : 主軸サイズ 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ko_KR.json deleted file mode 100644 index 93f2ed269..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "열 레이아웃", - "info": "세로 방향으로 배열되는 Flex 레이아웃으로, 여러 컴포넌트를 수용할 수 있습니다. 다른 속성은 모두 동일하며, 자세한 내용은 Flex를 참조하십시오.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Column 기본 사용", - "desc": [ - "【children】 : 컴포넌트 목록 【List】", - "【mainAxisAlignment】 : 메인 축 정렬 【MainAxisAlignment】", - "【crossAxisAlignment】 : 교차 축 정렬 【CrossAxisAlignment】", - "【textBaseline】 : 텍스트 기준선 【TextBaseline】", - "【verticalDirection】 : 세로 방향 【VerticalDirection】", - "【mainAxisSize】 : 메인 축 크기 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_pt_PT.json deleted file mode 100644 index 937db6d0f..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "Layout de Coluna", - "info": "Layout Flex com direção de disposição vertical, pode acomodar vários componentes. Todas as outras propriedades são iguais, consulte Flex para mais detalhes.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Uso Básico do Column", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【mainAxisAlignment】 : Alinhamento do eixo principal 【MainAxisAlignment】", - "【crossAxisAlignment】 : Alinhamento do eixo transversal 【CrossAxisAlignment】", - "【textBaseline】 : Linha de base do texto 【TextBaseline】", - "【verticalDirection】 : Direção vertical 【VerticalDirection】", - "【mainAxisSize】 : Tamanho do eixo principal 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ru_RU.json deleted file mode 100644 index 82d8686c5..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "Колонка", - "info": "Гибкий макет с вертикальным направлением размещения, который может содержать несколько компонентов. Все остальные свойства идентичны, подробнее см. Flex.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Основное использование Column", - "desc": [ - "【children】 : Список компонентов 【List】", - "【mainAxisAlignment】 : Выравнивание по главной оси 【MainAxisAlignment】", - "【crossAxisAlignment】 : Выравнивание по поперечной оси 【CrossAxisAlignment】", - "【textBaseline】 : Базовая линия текста 【TextBaseline】", - "【verticalDirection】 : Вертикальное направление 【VerticalDirection】", - "【mainAxisSize】 : Размер главной оси 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_zh-CN.json deleted file mode 100644 index 5dc8af0c0..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 96, - "name": "Column", - "localName": "列布局", - "info": "排布方向为竖向的Flex布局,可容纳多个组件。其他属性全部一致,详见Flex。", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Column基本使用", - "desc": [ - "【children】 : 组件列表 【List】", - "【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】", - "【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】", - "【textBaseline】 : 文字基线 【TextBaseline】", - "【verticalDirection】 : 竖直方向 【VerticalDirection】", - "【mainAxisSize】 : 主轴尺寸 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/node_01.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/node_01.dart deleted file mode 100644 index b90694f27..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Column/node_01.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class ColumnNode1 extends StatelessWidget { - const ColumnNode1({super.key}); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildTitle(), - _buildContent(context), - ], - ); - } - - Widget _buildTitle() { - return Container( - height: 70, - color: const Color(0x4484FFFF), - child: Row( - children: const [ - Padding( - child: Icon( - Icons.add_location, - size: 30, - color: Colors.pink, - ), - padding: EdgeInsets.only(left: 25, right: 20), - ), - Expanded( - child: Text( - "附近", - style: TextStyle(fontSize: 18), - ), - ), - Padding( - child: Icon(Icons.keyboard_arrow_right, color: Colors.black38), - padding: EdgeInsets.only(right: 25), - ), - ], - )); - } - - Widget _buildContent(ctx) => Container( - width: MediaQuery.of(ctx).size.width, - color: Colors.orangeAccent, - height: 100, - child: const Icon( - Icons.android, - size: 50, - color: Colors.white, - ), - ); -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_de_DE.json deleted file mode 100644 index 0259fe268..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "Allgemeines Multi-Kind-Layout", - "info": "Verwenden Sie eine Proxy-Klasse, um das Layout einer Gruppe von Kinderkomponenten zu steuern. Die Kinderkomponenten müssen mit der LayoutId-Komponente gekennzeichnet werden.", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Grundlegende Verwendung von CustomMultiChildLayout", - "desc": [ - "【children】 : Kinderkomponentensammlung 【List】", - "【delegate】 : Layout-Proxy 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_en_US.json deleted file mode 100644 index b93a246d5..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "General Multi-Child Layout", - "info": "Use a delegate class to control the layout of a set of child components. Child components must be identified using the LayoutId component.", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Basic Usage of CustomMultiChildLayout", - "desc": [ - "【children】: Set of child components 【List】", - "【delegate】: Layout delegate 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_es_ES.json deleted file mode 100644 index ab14f34d6..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "Diseño de múltiples hijos genérico", - "info": "Utiliza una clase delegada para controlar el diseño de un conjunto de componentes hijos. Los componentes hijos deben identificarse utilizando el componente LayoutId.", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Uso básico de CustomMultiChildLayout", - "desc": [ - "【children】: Conjunto de componentes hijos 【List】", - "【delegate】: Delegado de diseño 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_fr_FR.json deleted file mode 100644 index 111364635..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "Disposition multi-enfants universelle", - "info": "Utilise une classe déléguée pour contrôler la disposition d'un ensemble de composants enfants. Les composants enfants doivent être identifiés à l'aide du composant LayoutId.", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Utilisation de base de CustomMultiChildLayout", - "desc": [ - "【children】 : Ensemble de composants enfants 【List】", - "【delegate】 : Délégué de disposition 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_it_IT.json deleted file mode 100644 index 8280c9815..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "Layout Multi-Figlio Generico", - "info": "Utilizza una classe delegata per controllare il layout di un insieme di componenti figli. I componenti figli devono essere identificati utilizzando il componente LayoutId.", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Uso di base di CustomMultiChildLayout", - "desc": [ - "【children】 : Insieme di componenti figli 【List】", - "【delegate】 : Delegato di layout 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ja_JP.json deleted file mode 100644 index fe9199dec..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "汎用マルチチャイルドレイアウト", - "info": "プロキシクラスを使用して子コンポーネントセットのレイアウトを制御します。子コンポーネントはLayoutIdコンポーネントで識別する必要があります。", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "CustomMultiChildLayoutの基本使用", - "desc": [ - "【children】 : 子コンポーネントセット 【List】", - "【delegate】 : レイアウトプロキシ 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ko_KR.json deleted file mode 100644 index c21b94969..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "일반 다중 자식 레이아웃", - "info": "프록시 클래스를 사용하여 자식 위젯 집합의 레이아웃을 제어하며, 자식 위젯은 LayoutId 위젯으로 식별되어야 합니다.", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "CustomMultiChildLayout 기본 사용", - "desc": [ - "【children】 : 자식 위젯 집합 【List】", - "【delegate】 : 레이아웃 프록시 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_pt_PT.json deleted file mode 100644 index 09a840f65..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "Layout Multi-Filho Personalizado", - "info": "Usa uma classe delegada para controlar o layout de um conjunto de componentes filhos, os componentes filhos devem ser identificados usando o componente LayoutId.", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Uso Básico do CustomMultiChildLayout", - "desc": [ - "【children】 : Conjunto de componentes filhos 【List】", - "【delegate】 : Delegado de layout 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ru_RU.json deleted file mode 100644 index ad443c2a6..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "Универсальная компоновка с несколькими дочерними элементами", - "info": "Использует класс-делегат для управления компоновкой набора дочерних элементов, дочерние элементы должны быть идентифицированы с помощью компонента LayoutId.", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Основное использование CustomMultiChildLayout", - "desc": [ - "【children】 : Набор дочерних элементов 【List】", - "【delegate】 : Делегат компоновки 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_zh-CN.json deleted file mode 100644 index 20f890552..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 341, - "name": "CustomMultiChildLayout", - "localName": "通用多子布局", - "info": "使用一个代理类对子组件集进行布局控制,子组件必须使用LayoutId组件进行标识。", - "lever": 4, - "family": 3, - "linkIds": [ - 315, - 285 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "CustomMultiChildLayout基本使用", - "desc": [ - "【children】 : 子组件集 【List】", - "【delegate】 : 布局代理 【MultiChildLayoutDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/node_01.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/node_01.dart deleted file mode 100644 index 136fdf647..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/CustomMultiChildLayout/node_01.dart +++ /dev/null @@ -1,85 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/6/6 -/// contact me by email 1981462002@qq.com - - - -class CustomMultiChildLayoutNode1 extends StatelessWidget { - const CustomMultiChildLayoutNode1({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - width: 300, - height: 150, - color: Colors.grey.withAlpha(33), - child: CustomMultiChildLayout( - delegate: CornerCustomMultiChildLayout( - padding:const EdgeInsets.only(left: 10,top: 5,right: 10,bottom: 5), - ), - children: [ - LayoutId(id: CornerType.topLeft, child: const Box50(Colors.red)), - LayoutId(id: CornerType.topRight, child: const Box50(Colors.yellow)), - LayoutId(id: CornerType.bottomLeft, child: const Box50(Colors.blue)), - LayoutId(id: CornerType.bottomRight, child: const Box50(Colors.green)), - ], - ), - ); - } -} - -// 50 颜色盒 -class Box50 extends StatelessWidget { - final Color color; - const Box50(this.color, {Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - width: 50, - height: 50, - color: color, - ); - } -} - - -enum CornerType{ - topLeft, - topRight, - bottomLeft, - bottomRight -} - - -class CornerCustomMultiChildLayout extends MultiChildLayoutDelegate{ - final EdgeInsets padding; - - CornerCustomMultiChildLayout({this.padding = EdgeInsets.zero}); - - @override - void performLayout(Size size) { - if (hasChild(CornerType.topLeft)) { - layoutChild(CornerType.topLeft, BoxConstraints.loose(size)); - positionChild(CornerType.topLeft, Offset.zero.translate(padding.left, padding.top)); - } - if (hasChild(CornerType.topRight)) { - var childSize = layoutChild(CornerType.topRight, BoxConstraints.loose(size)); - positionChild(CornerType.topRight, Offset(size.width-childSize.width,0).translate(-padding.right, padding.top)); - } - if (hasChild(CornerType.bottomLeft)) { - var childSize = layoutChild(CornerType.bottomLeft, BoxConstraints.loose(size)); - positionChild(CornerType.bottomLeft, Offset(0,size.height-childSize.height).translate(padding.left, -padding.bottom)); - } - if (hasChild(CornerType.bottomRight)) { - var childSize = layoutChild(CornerType.bottomRight, BoxConstraints.loose(size)); - positionChild(CornerType.bottomRight, Offset(size.width-childSize.width,size.height-childSize.height).translate(-padding.right, -padding.bottom)); - } - } - - @override - bool shouldRelayout(CornerCustomMultiChildLayout oldDelegate) => oldDelegate.padding!=padding; - -} - diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_de_DE.json deleted file mode 100644 index fa3418e5c..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_de_DE.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "Flexibles Layout", - "info": "Übergeordnete Klasse von Row und Column, die leistungsstärkste Layout-Methode in Flutter. Kann mehrere Komponenten aufnehmen und kann mit Spacer, Expended, Flexible Komponenten für flexibles Layout verwendet werden", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Ausrichtung von Flex", - "desc": [ - "【children】 : Komponentenliste 【List】", - "【direction】 : Richtung 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Hauptachsenausrichtung von Flex", - "desc": [ - "【mainAxisAlignment】 : Hauptachsenausrichtung 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Kreuzachsenausrichtung von Flex", - "desc": [ - "【crossAxisAlignment】 : Kreuzachsenausrichtung 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Vertikale Richtungsreihenfolge von Flex", - "desc": [ - "【verticalDirection】 : Vertikale Richtungsreihenfolge 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Horizontale Richtungsreihenfolge von Flex", - "desc": [ - "【textDirection】 : Horizontale Richtungsreihenfolge 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_en_US.json deleted file mode 100644 index 75a4dfa9a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_en_US.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "Flex Layout", - "info": "The parent class of Row and Column, the most powerful layout method in Flutter. It can accommodate multiple components and can be used in conjunction with Spacer, Expended, and Flexible components for flexible layout.", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Flex Direction", - "desc": [ - "【children】: Component list 【List】", - "【direction】: Direction 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Flex Main Axis Alignment", - "desc": [ - "【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Flex Cross Axis Alignment", - "desc": [ - "【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Flex Vertical Direction", - "desc": [ - "【verticalDirection】: Vertical direction 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Flex Horizontal Direction", - "desc": [ - "【textDirection】: Horizontal direction 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_es_ES.json deleted file mode 100644 index 1936f39c5..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_es_ES.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "Diseño Flexible", - "info": "Clase padre de Row y Column, el método de diseño más potente en Flutter. Puede contener múltiples componentes y se puede usar con los componentes Spacer, Expended y Flexible para un diseño flexible.", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Dirección de disposición de Flex", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【direction】 : Dirección 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Alineación del eje principal de Flex", - "desc": [ - "【mainAxisAlignment】 : Alineación del eje principal 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Alineación del eje transversal de Flex", - "desc": [ - "【crossAxisAlignment】 : Alineación del eje transversal 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Orden de dirección vertical de Flex", - "desc": [ - "【verticalDirection】 : Orden de dirección vertical 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Orden de dirección horizontal de Flex", - "desc": [ - "【textDirection】 : Orden de dirección horizontal 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_fr_FR.json deleted file mode 100644 index 0a6f6f78f..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_fr_FR.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "Disposition flexible", - "info": "Classe parente de Row et Column, la méthode de disposition la plus puissante dans Flutter. Peut contenir plusieurs composants, peut être utilisé avec les composants Spacer, Expended, Flexible pour une disposition flexible", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Direction de disposition de Flex", - "desc": [ - "【children】 : Liste des composants 【List】", - "【direction】 : Direction 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Alignement de l'axe principal de Flex", - "desc": [ - "【mainAxisAlignment】 : Alignement de l'axe principal 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Alignement de l'axe transversal de Flex", - "desc": [ - "【crossAxisAlignment】 : Alignement de l'axe transversal 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Ordre de direction vertical de Flex", - "desc": [ - "【verticalDirection】 : Ordre de direction vertical 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Ordre de direction horizontale de Flex", - "desc": [ - "【textDirection】 : Ordre de direction horizontale 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_it_IT.json deleted file mode 100644 index a38b40337..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_it_IT.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "Layout Flessibile", - "info": "Classe genitore di Row e Column, il metodo di layout più potente in Flutter. Può contenere più componenti e può essere utilizzato con i componenti Spacer, Expended e Flexible per un layout flessibile", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Direzione di disposizione di Flex", - "desc": [ - "【children】 : Lista dei componenti 【List】", - "【direction】 : Direzione 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Allineamento dell'asse principale di Flex", - "desc": [ - "【mainAxisAlignment】 : Allineamento dell'asse principale 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Allineamento dell'asse trasversale di Flex", - "desc": [ - "【crossAxisAlignment】 : Allineamento dell'asse trasversale 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Ordine della direzione verticale di Flex", - "desc": [ - "【verticalDirection】 : Ordine della direzione verticale 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Ordine della direzione orizzontale di Flex", - "desc": [ - "【textDirection】 : Ordine della direzione orizzontale 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ja_JP.json deleted file mode 100644 index 37e83a2ac..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ja_JP.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "フレックスレイアウト", - "info": "RowとColumnの親クラス、Flutterで最も強力なレイアウト方法。複数のコンポーネントを収容でき、Spacer、Expended、Flexibleコンポーネントと連携して柔軟なレイアウトを実現できます", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Flexの配置方向", - "desc": [ - "【children】 : コンポーネントリスト 【List】", - "【direction】 : 方向 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Flex主軸の整列方法", - "desc": [ - "【mainAxisAlignment】 : 主軸整列 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Flex交差軸の整列方法", - "desc": [ - "【crossAxisAlignment】 : 交差軸整列 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Flex垂直方向の順序", - "desc": [ - "【verticalDirection】 : 垂直方向の順序 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Flex水平方向の順序", - "desc": [ - "【textDirection】 : 水平方向の順序 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ko_KR.json deleted file mode 100644 index a0c898881..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ko_KR.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "유연한 레이아웃", - "info": "Row와 Column의 상위 클래스, Flutter에서 가장 강력한 레이아웃 방식. 여러 컴포넌트를 수용할 수 있으며, Spacer, Expended, Flexible 컴포넌트와 함께 사용하여 유연한 레이아웃을 구성할 수 있습니다.", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Flex의 배치 방향", - "desc": [ - "【children】 : 컴포넌트 리스트 【List】", - "【direction】 : 방향 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Flex 주축 정렬 방식", - "desc": [ - "【mainAxisAlignment】 : 주축 정렬 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Flex 교차축 정렬 방식", - "desc": [ - "【crossAxisAlignment】 : 교차축 정렬 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Flex 수직 방향 순서", - "desc": [ - "【verticalDirection】 : 수직 방향 순서 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Flex 수평 방향 순서", - "desc": [ - "【textDirection】 : 수평 방향 순서 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_pt_PT.json deleted file mode 100644 index 022b95f4b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_pt_PT.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "Layout Flexível", - "info": "Classe pai de Row e Column, o método de layout mais poderoso no Flutter. Pode conter vários componentes e pode ser usado em conjunto com os componentes Spacer, Expended e Flexible para um layout flexível", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Direção de disposição do Flex", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【direction】 : Direção 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Alinhamento do eixo principal do Flex", - "desc": [ - "【mainAxisAlignment】 : Alinhamento do eixo principal 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Alinhamento do eixo cruzado do Flex", - "desc": [ - "【crossAxisAlignment】 : Alinhamento do eixo cruzado 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Ordem vertical do Flex", - "desc": [ - "【verticalDirection】 : Ordem vertical 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Ordem horizontal do Flex", - "desc": [ - "【textDirection】 : Ordem horizontal 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ru_RU.json deleted file mode 100644 index 4eeff29db..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_ru_RU.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "Гибкий макет", - "info": "Родительский класс для Row и Column, самый мощный способ компоновки во Flutter. Может содержать несколько компонентов, может использоваться вместе с компонентами Spacer, Expended, Flexible для гибкой компоновки", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Направление расположения Flex", - "desc": [ - "【children】 : Список компонентов 【List】", - "【direction】 : Направление 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Выравнивание по главной оси Flex", - "desc": [ - "【mainAxisAlignment】 : Выравнивание по главной оси 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Выравнивание по поперечной оси Flex", - "desc": [ - "【crossAxisAlignment】 : Выравнивание по поперечной оси 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Порядок по вертикали Flex", - "desc": [ - "【verticalDirection】 : Порядок по вертикали 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Порядок по горизонтали Flex", - "desc": [ - "【textDirection】 : Порядок по горизонтали 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_zh-CN.json deleted file mode 100644 index f4dc48172..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/desc_zh-CN.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 94, - "name": "Flex", - "localName": "弹性布局", - "info": "Row和Column的父类,Flutter中最强大的布局方式。可容纳多个组件,可与Spacer、Expended、Flexible组件联用进行灵活布局", - "lever": 5, - "family": 3, - "linkIds": [ - 95, - 96, - 106, - 107, - 109 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Flex的排布方向", - "desc": [ - "【children】 : 组件列表 【List】", - "【direction】 : 方向 【Axis】" - ] - }, - { - "file": "node_02.dart", - "name": "Flex主轴对齐方式", - "desc": [ - "【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】" - ] - }, - { - "file": "node_03.dart", - "name": "Flex交叉轴对齐方式", - "desc": [ - "【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】" - ] - }, - { - "file": "node_04.dart", - "name": "Flex垂直方向顺序", - "desc": [ - "【verticalDirection】 : 垂直方向顺序 【VerticalDirection】" - ] - }, - { - "file": "node_05.dart", - "name": "Flex水平方向顺序", - "desc": [ - "【textDirection】 : 水平方向顺序 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_01.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_01.dart deleted file mode 100644 index 06c2d13f9..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_01.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class FlexNode1 extends StatelessWidget { - const FlexNode1({super.key}); - - static TextStyle textStyle = - const TextStyle(color: Colors.white, fontWeight: FontWeight.bold); - - Widget get blueBox => Container( - alignment: Alignment.center, - color: Colors.blue, - height: 20, - width: 30, - child: Text('1', style: textStyle), - ); - - Widget get redBox => Container( - alignment: Alignment.center, - color: Colors.red, - height: 30, - width: 40, - child: Text('2', style: textStyle), - ); - - Widget get greenBox => Container( - alignment: Alignment.center, - color: Colors.green, - height: 20, - width: 20, - child: Text('3', style: textStyle), - ); - - @override - Widget build(BuildContext context) { - return Wrap( - children: Axis.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 80, - color: Colors.grey.withAlpha(33), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget _buildItem(mode) => Flex( - direction: mode, - children: [ - blueBox, redBox, greenBox - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_02.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_02.dart deleted file mode 100644 index e5f0b0f0a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_02.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class FlexNode2 extends StatelessWidget { - const FlexNode2({super.key}); - - static TextStyle textStyle = - const TextStyle(color: Colors.white, fontWeight: FontWeight.bold); - - Widget get blueBox => Container( - alignment: Alignment.center, - color: Colors.blue, - height: 20, - width: 30, - child: Text('1', style: textStyle), - ); - - Widget get redBox => Container( - alignment: Alignment.center, - color: Colors.red, - height: 30, - width: 40, - child: Text('2', style: textStyle), - ); - - Widget get greenBox => Container( - alignment: Alignment.center, - color: Colors.green, - height: 20, - width: 20, - child: Text('3', style: textStyle), - ); - - @override - Widget build(BuildContext context) { - return Wrap( - runSpacing: 5, - children: MainAxisAlignment.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 80, - color: Colors.grey.withAlpha(33), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget _buildItem(mode) => Flex( - direction: Axis.horizontal, - mainAxisAlignment: mode, - children: [ - blueBox, redBox, greenBox - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_03.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_03.dart deleted file mode 100644 index 417772e26..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_03.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class FlexNode3 extends StatelessWidget { - const FlexNode3({super.key}); - - static TextStyle textStyle = - const TextStyle(color: Colors.white, fontWeight: FontWeight.bold); - - Widget get blueBox => Container( - alignment: Alignment.center, - color: Colors.blue, - height: 20, - width: 30, - child: Text('1', style: textStyle), - ); - - Widget get redBox => Container( - alignment: Alignment.center, - color: Colors.red, - height: 30, - width: 40, - child: Text('2', style: textStyle), - ); - - Widget get greenBox => Container( - alignment: Alignment.center, - color: Colors.green, - height: 20, - width: 20, - child: Text('3', style: textStyle), - ); - - - @override - Widget build(BuildContext context) { - return Wrap( - runSpacing: 5, - children: CrossAxisAlignment.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 80, - color: Colors.grey.withAlpha(33), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget _buildItem(mode) => Flex( - direction: Axis.horizontal, - crossAxisAlignment: mode, - textBaseline: TextBaseline.alphabetic, - children: [ - blueBox, redBox, greenBox - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_04.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_04.dart deleted file mode 100644 index 154f280f2..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_04.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class FlexNode4 extends StatelessWidget { - const FlexNode4({super.key}); - - static TextStyle textStyle = - const TextStyle(color: Colors.white, fontWeight: FontWeight.bold); - - Widget get blueBox => Container( - alignment: Alignment.center, - color: Colors.blue, - height: 20, - width: 30, - child: Text('1', style: textStyle), - ); - - Widget get redBox => Container( - alignment: Alignment.center, - color: Colors.red, - height: 30, - width: 40, - child: Text('2', style: textStyle), - ); - - Widget get greenBox => Container( - alignment: Alignment.center, - color: Colors.green, - height: 20, - width: 20, - child: Text('3', style: textStyle), - ); - - @override - Widget build(BuildContext context) { - return Wrap( - runSpacing: 5, - children: VerticalDirection.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 80, - color: Colors.grey.withAlpha(33), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget _buildItem(mode) => Flex( - direction: Axis.vertical, - verticalDirection: mode, - children: [blueBox, redBox, greenBox], - ); -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_05.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_05.dart deleted file mode 100644 index 39e35fc92..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flex/node_05.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class FlexNode5 extends StatelessWidget { - const FlexNode5({super.key}); - - static TextStyle textStyle = - const TextStyle(color: Colors.white, fontWeight: FontWeight.bold); - - Widget get blueBox => Container( - alignment: Alignment.center, - color: Colors.blue, - height: 20, - width: 30, - child: Text('1', style: textStyle), - ); - - Widget get redBox => Container( - alignment: Alignment.center, - color: Colors.red, - height: 30, - width: 40, - child: Text('2', style: textStyle), - ); - - Widget get greenBox => Container( - alignment: Alignment.center, - color: Colors.green, - height: 20, - width: 20, - child: Text('3', style: textStyle), - ); - - @override - Widget build(BuildContext context) { - return Wrap( - runSpacing: 5, - children: TextDirection.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 80, - color: Colors.grey.withAlpha(33), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget _buildItem(mode) => Flex( - direction: Axis.horizontal, - textDirection: mode, - children: [blueBox, redBox, greenBox], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_de_DE.json deleted file mode 100644 index 9b39ec33d..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "Fließendes Layout", - "info": "Kann mehrere Komponenten aufnehmen, erfordert die Festlegung eines Delegaten für die Anordnung, ermöglicht eine hochgradige Anpassung der Komponentenanordnung und erreicht Effekte, die mit normalen Layouts nicht möglich sind. Der König der Layouts, zu Recht.", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Runde Anordnung mit Flow", - "desc": [ - "【children】 : Komponentenliste 【List】", - "【delegate】 : Delegat 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Runde Anordnung mit Flow und Animation", - "desc": [ - "Erzielt Effekte durch die Änderung der Position umliegender Komponenten mittels Animation" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_en_US.json deleted file mode 100644 index 890475c63..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "Flow Layout", - "info": "Can accommodate multiple components, requires custom arrangement agents, allows high customization of component arrangement, achieving effects that ordinary layouts cannot. The king of layouts, well-deserved.", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Flow Circular Arrangement", - "desc": [ - "【children】: Component list 【List】", - "【delegate】: Agent 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Flow Circular with Animation", - "desc": [ - "Achieve effects by changing the position of surrounding components through animation" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_es_ES.json deleted file mode 100644 index aa0a65f42..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "Diseño de flujo", - "info": "Puede contener múltiples componentes, requiere que especifiques un delegado para la disposición, permite una alta personalización en la distribución de los componentes, logrando efectos que los diseños comunes no pueden alcanzar. El rey de los diseños, sin duda.", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Disposición circular de Flow", - "desc": [ - "【children】: Lista de componentes 【List】", - "【delegate】: Delegado 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Combinación de Flow circular con animación", - "desc": [ - "Logra el efecto cambiando la posición de los componentes circundantes a través de la animación" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_fr_FR.json deleted file mode 100644 index c7bbb2085..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "Disposition fluide", - "info": "Peut contenir plusieurs composants, nécessite de définir un délégué pour l'agencement, permet une personnalisation élevée de l'agencement des composants, atteignant des effets impossibles avec des dispositions ordinaires. Le roi des dispositions, sans aucun doute.", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Disposition circulaire Flow", - "desc": [ - "【children】 : Liste des composants 【List】", - "【delegate】 : Délégué 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Combinaison de Flow circulaire et animation", - "desc": [ - "Modifier la position des composants environnants via une animation pour obtenir l'effet" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_it_IT.json deleted file mode 100644 index 1bb53fc3a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "Layout di Flusso", - "info": "Può contenere più componenti, richiede la definizione di un delegato per la disposizione, permette un alto livello di personalizzazione della disposizione dei componenti, raggiungendo effetti che i layout comuni non possono ottenere. Il re dei layout, a pieno titolo.", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Disposizione Circolare di Flow", - "desc": [ - "【children】 : Lista dei componenti 【List】", - "【delegate】 : Delegato 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Combinazione di Flow Circolare e Animazione", - "desc": [ - "Modifica la posizione dei componenti circostanti attraverso l'animazione per ottenere l'effetto desiderato" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ja_JP.json deleted file mode 100644 index 37f10f4cb..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "フローレイアウト", - "info": "複数のコンポーネントを収容でき、自身で配置のプロキシを指定する必要があります。コンポーネントの配置を高度にカスタマイズでき、通常のレイアウトでは実現できない効果を実現します。レイアウトの王者、その名にふさわしい。", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Flow円形配置", - "desc": [ - "【children】 : コンポーネントリスト 【List】", - "【delegate】 : プロキシ 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Flow円形とアニメーションの組み合わせ", - "desc": [ - "アニメーションを使用して周囲のコンポーネントの位置を変更することで効果を実現" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ko_KR.json deleted file mode 100644 index ae91c33a8..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "플로우 레이아웃", - "info": "여러 컴포넌트를 수용할 수 있으며, 배치를 위한 대리자를 직접 지정해야 합니다. 컴포넌트 배치를 고도로 커스터마이징할 수 있어 일반 레이아웃으로는 달성할 수 없는 효과를 구현할 수 있습니다. 레이아웃의 왕, 그 이름에 걸맞습니다.", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Flow 원형 배치", - "desc": [ - "【children】 : 컴포넌트 리스트 【List】", - "【delegate】 : 대리자 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Flow 원형과 애니메이션 결합", - "desc": [ - "애니메이션을 통해 주변 컴포넌트의 위치를 변경하여 효과를 구현" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_pt_PT.json deleted file mode 100644 index c7149affd..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "Layout de Fluxo", - "info": "Pode acomodar vários componentes, é necessário definir um agente de disposição, permitindo uma alta personalização da disposição dos componentes, alcançando efeitos que layouts comuns não conseguem. O rei dos layouts, sem dúvida.", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Disposição Circular do Flow", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【delegate】 : Agente 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Combinação de Flow Circular com Animação", - "desc": [ - "Alterar a posição dos componentes ao redor através de animação para alcançar o efeito" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ru_RU.json deleted file mode 100644 index b280e78f1..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "Макет потока", - "info": "Может вмещать несколько компонентов, требует самостоятельного определения прокси для размещения, позволяет высоко настраивать расположение компонентов, достигая эффектов, недоступных для обычных макетов. Безусловный король макетов.", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Круговое расположение Flow", - "desc": [ - "【children】 : Список компонентов 【List】", - "【delegate】 : Прокси 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Круговое расположение Flow с анимацией", - "desc": [ - "Достижение эффекта путем изменения положения окружающих компонентов с помощью анимации" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_zh-CN.json deleted file mode 100644 index d448bc13d..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 99, - "name": "Flow", - "localName": "流动布局", - "info": "可容纳多个组件, 需要自己制定排布的代理,可以高强度自定义组件的排布,实现普通布局无法达到的效果。布局王者,当之无愧。", - "lever": 5, - "family": 3, - "linkIds": [ - 98, - 94 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Flow圆形排布", - "desc": [ - "【children】 : 组件列表 【List】", - "【delegate】 : 代理 【FlowDelegate】" - ] - }, - { - "file": "node_02.dart", - "name": "Flow圆形与动画结合", - "desc": [ - "通过动画来更改周围组件的位置实现效果" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/node_01.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/node_01.dart deleted file mode 100644 index dca7b68eb..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/node_01.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class FlowNode1 extends StatelessWidget { - const FlowNode1({super.key}); - - List get data => List.generate( - 16, - (index) => index.isEven - ? "assets/images/icon_head.webp" - : "assets/images/wy_300x200.webp"); - - @override - Widget build(BuildContext context) { - return Container( - width: 300, - height: 300, - alignment: Alignment.center, - child: Flow( - delegate: _CircleFlowDelegate(), - children: data - .map((e) => CircleAvatar(backgroundImage: AssetImage(e))) - .toList(), - ), - ); - } -} - -class _CircleFlowDelegate extends FlowDelegate { - - @override //绘制孩子的方法 - void paintChildren(FlowPaintingContext context) { - final double radius = context.size.shortestSide / 2; - final int count = context.childCount; - final double perRad = 2 * pi / count; - for (int i = 0; i < count; i++) { - final Size size = context.getChildSize(i) ?? Size.zero; - final double offsetX = - (radius - size.width / 2) * cos(i * perRad) + radius; - final double offsetY = - (radius - size.height / 2) * sin(i * perRad) + radius; - context.paintChild(i, - transform: Matrix4.translationValues( - offsetX - size.width / 2, offsetY - size.height / 2, 0.0)); - } - } - - @override - bool shouldRepaint(FlowDelegate oldDelegate) => false; -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/node_02.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/node_02.dart deleted file mode 100644 index 4dc644f9b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Flow/node_02.dart +++ /dev/null @@ -1,100 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class FlowNode02 extends StatefulWidget { - const FlowNode02({ - super.key, - }); - - @override - State createState() => _FlowNode02State(); -} - -class _FlowNode02State extends State - with SingleTickerProviderStateMixin { - late AnimationController _controller; - double _rad = 0.0; - bool _closed = true; - - List get data => List.generate( - 16, - (index) => index.isEven - ? "assets/images/icon_head.webp" - : "assets/images/wy_300x200.webp"); - - @override - void initState() { - _controller = AnimationController( - duration: const Duration(milliseconds: 1000), - vsync: this, - ) - ..addListener(() => setState( - () => _rad = (_closed ? (_controller.value) : 1 - _controller.value))) - ..addStatusListener((status) { - if (status == AnimationStatus.completed) { - _closed = !_closed; - } - }); - super.initState(); - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Flow( - delegate: _BurstFlowDelegate(_rad), - children: [ - ...data.map((e) => CircleAvatar(backgroundImage: AssetImage(e))), - InkWell( - onTap: () { - _controller.reset(); - _controller.forward(); - }, - child: const CircleAvatar( - backgroundImage: AssetImage('assets/images/icon_head.webp'), - )) - ], - ); - } -} - -class _BurstFlowDelegate extends FlowDelegate { - final double rad; - - _BurstFlowDelegate(this.rad); - - @override //绘制孩子的方法 - void paintChildren(FlowPaintingContext context) { - double radius = context.size.shortestSide / 2; - final int count = context.childCount - 1; - final double perRad = 2 * pi / count; - for (int i = 0; i < count; i++) { - Size size = context.getChildSize(i) ?? Size.zero; - final double offsetX = - rad * (radius - size.width / 2) * cos(i * perRad) + radius; - final double offsetY = - rad * (radius - size.height / 2) * sin(i * perRad) + radius; - context.paintChild(i, - transform: Matrix4.translationValues( - offsetX - size.width / 2, offsetY - size.height / 2, 0.0)); - } - - Size size = context.getChildSize(context.childCount - 1) ?? Size.zero; - - context.paintChild(context.childCount - 1, - transform: Matrix4.translationValues( - radius - size.width / 2, radius - size.height / 2, 0.0)); - } - - @override - bool shouldRepaint(_BurstFlowDelegate oldDelegate) => oldDelegate.rad != rad; -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_de_DE.json deleted file mode 100644 index f4efeef84..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "Indexierter Stapel", - "info": "Unterklasse der Stack-Komponente, kann mehrere Komponenten stapeln und durch den Index die anzuzeigende Komponente angeben, die anderen werden ausgeblendet.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von IndexedStack", - "desc": [ - "【children】 : Liste der Unterkomponenten 【Lis】", - "【alignment】 : Ausrichtung 【AlignmentGeometry】", - "【index】 : Aktuell angezeigte Komponente 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_en_US.json deleted file mode 100644 index e25fb5f7c..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "Indexed Stack", - "info": "A subclass of the Stack component that can stack multiple components and specify the index of the component to be displayed, while the rest are hidden.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of IndexedStack", - "desc": [ - "【children】: List of child components 【List】", - "【alignment】: Alignment 【AlignmentGeometry】", - "【index】: Currently displayed component 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_es_ES.json deleted file mode 100644 index 48b4714a5..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "Pila indexada", - "info": "Subclase del componente Stack, puede apilar múltiples componentes y especificar el índice del componente que se mostrará a través del índice, el resto se ocultará.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de IndexedStack", - "desc": [ - "【children】 : Lista de componentes hijos 【Lis】", - "【alignment】 : Alineación 【AlignmentGeometry】", - "【index】 : Componente actualmente visible 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_fr_FR.json deleted file mode 100644 index 8eb40e30a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "Empilement indexé", - "info": "Sous-classe du composant Stack, permet d'empiler plusieurs composants et de spécifier l'index du composant à afficher via l'index, les autres seront masqués.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'IndexedStack", - "desc": [ - "【children】 : Liste des composants enfants 【Lis】", - "【alignment】 : Alignement 【AlignmentGeometry】", - "【index】 : Composant actuellement affiché 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_it_IT.json deleted file mode 100644 index b153327d5..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "Pila indicizzata", - "info": "Sottoclasse del componente Stack, può impilare più componenti e specificare l'indice del componente da visualizzare tramite index, gli altri verranno nascosti.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di IndexedStack", - "desc": [ - "【children】 : Lista dei componenti figli 【Lis】", - "【alignment】 : Allineamento 【AlignmentGeometry】", - "【index】 : Componente attualmente visualizzato 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ja_JP.json deleted file mode 100644 index 74da171b2..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "インデックススタック", - "info": "Stackコンポーネントのサブクラスで、複数のコンポーネントをスタックし、indexを指定して表示するコンポーネントを指定できます。それ以外のコンポーネントは非表示になります。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IndexedStackの基本使用", - "desc": [ - "【children】 : 子コンポーネントリスト 【Lis】", - "【alignment】 : 配置方法 【AlignmentGeometry】", - "【index】 : 現在表示されているコンポーネント 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ko_KR.json deleted file mode 100644 index 6352262c7..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "인덱스 스택", - "info": "Stack 컴포넌트의 하위 클래스로, 여러 컴포넌트를 쌓아 놓고 index를 통해 표시할 컴포넌트의 인덱스를 지정할 수 있으며, 나머지는 숨겨집니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IndexedStack 기본 사용", - "desc": [ - "【children】 : 자식 컴포넌트 리스트 【Lis】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】", - "【index】 : 현재 표시되는 컴포넌트 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_pt_PT.json deleted file mode 100644 index f785b891d..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "Pilha Indexada", - "info": "Subclasse do componente Stack, pode empilhar vários componentes e especificar o índice do componente a ser exibido através do index, os restantes serão ocultados.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do IndexedStack", - "desc": [ - "【children】 : Lista de componentes filhos 【Lis】", - "【alignment】 : Alinhamento 【AlignmentGeometry】", - "【index】 : Componente atualmente exibido 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ru_RU.json deleted file mode 100644 index bb8625ec2..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "Индексированный стек", - "info": "Подкласс компонента Stack, который позволяет складывать несколько компонентов и указывать индекс отображаемого компонента через index, остальные будут скрыты.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование IndexedStack", - "desc": [ - "【children】 : Список дочерних компонентов 【Lis】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】", - "【index】 : Текущий отображаемый компонент 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_zh-CN.json deleted file mode 100644 index c3d9fe37e..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 161, - "name": "IndexedStack", - "localName": "索引堆叠", - "info": "Stack组件的子类,可以堆叠多个组件,并通过index来指定展示的组件索引,其余的会被隐藏。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IndexedStack基本使用", - "desc": [ - "【children】 : 子组件列表 【Lis】", - "【alignment】 : 对齐方式 【AlignmentGeometry】", - "【index】 : 当前显示组件 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/node1_base.dart deleted file mode 100644 index aa33f43ca..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/IndexedStack/node1_base.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class IndexedStackNode01 extends StatefulWidget { - const IndexedStackNode01({Key? key}) : super(key: key); - - @override - State createState() => _IndexedStackNode01State(); -} - -class _IndexedStackNode01State extends State { - int _index = 1; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSwitch(), - Container( - width: 200, - height: 100, - color: Colors.grey.withAlpha(33), - child: IndexedStack( - index: _index, - children: [ - Container( - color: Colors.red, - width: 80, - height: 80 - ), - Positioned( - bottom: 10, - right: 10, - child: Container( - color: Colors.blue, - width: 80, - height: 80, - ), - ) - ], - ), - ), - ], - ); - } - - Widget _buildSwitch() => Switch( - value: _index == 0, - onChanged: (v) => setState(() => _index = v ? 0 : 1), - ); -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_de_DE.json deleted file mode 100644 index 17a86062e..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "Listenkörper", - "info": "Ordnet mehrere Unterkomponenten entlang einer Achse an, hat wenige einstellbare Attribute und wird selten verwendet, stattdessen wird meist ListView bevorzugt.", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ListView", - "desc": [ - "【mainAxis】: Hauptachsenrichtung 【Axis】", - "【reverse】: Umgekehrt oder nicht 【bool】", - "【children】: Sammlung von Unterkomponenten 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_en_US.json deleted file mode 100644 index 33f49ae5a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "List Body", - "info": "Arranges several child components along the axis, with few properties that can be set. It is rarely used, and ListView is generally chosen instead.", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ListView", - "desc": [ - "【mainAxis】: Main axis direction 【Axis】", - "【reverse】: Whether to reverse 【bool】", - "【children】: Child component collection 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_es_ES.json deleted file mode 100644 index 11dc24b02..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "Cuerpo de la lista", - "info": "Organiza varios subcomponentes a lo largo de un eje, con pocas propiedades configurables, generalmente se usa poco y se prefiere usar ListView.", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ListView", - "desc": [ - "【mainAxis】 : Dirección del eje principal 【Axis】", - "【reverse】: Si es inverso 【bool】", - "【children】: Conjunto de subcomponentes 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_fr_FR.json deleted file mode 100644 index 8627f7319..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "Corps de liste", - "info": "Dispose plusieurs sous-composants selon un axe, avec peu de propriétés configurables, rarement utilisé, on préfère généralement utiliser ListView.", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ListView", - "desc": [ - "【mainAxis】 : Direction de l'axe principal 【Axis】", - "【reverse】: Inverser ou non 【bool】", - "【children】: Ensemble de sous-composants 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_it_IT.json deleted file mode 100644 index 0034881b6..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "Corpo della lista", - "info": "Dispone diversi componenti figli lungo un asse, con poche proprietà configurabili. Viene utilizzato raramente, preferendo invece l'uso di ListView.", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ListView", - "desc": [ - "【mainAxis】 : Direzione dell'asse principale 【Axis】", - "【reverse】: Inversione 【bool】", - "【children】: Insieme di componenti figli 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ja_JP.json deleted file mode 100644 index 988ec58bc..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "リストボディ", - "info": "複数の子コンポーネントを軸方向に並べ替えます。設定可能な属性は少なく、通常はあまり使用されず、代わりにListViewが選択されます。", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListViewの基本的な使用", - "desc": [ - "【mainAxis】 : 主軸方向 【Axis】", - "【reverse】: 逆方向かどうか 【bool】", - "【children】: 子コンポーネント集 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ko_KR.json deleted file mode 100644 index 53f44f103..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "리스트 바디", - "info": "여러 하위 컴포넌트를 축 방향으로 배열하며, 설정 가능한 속성이 적어 일반적으로 잘 사용되지 않고, 대신 ListView를 선택하여 사용합니다.", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListView의 기본 사용법", - "desc": [ - "【mainAxis】 : 주축 방향 【Axis】", - "【reverse】: 역방향 여부 【bool】", - "【children】: 하위 컴포넌트 집합 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_pt_PT.json deleted file mode 100644 index 0d9afb7f9..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "Corpo da Lista", - "info": "Organiza vários subcomponentes ao longo de um eixo, com poucas propriedades configuráveis, geralmente pouco utilizado, optando-se por usar ListView.", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ListView", - "desc": [ - "【mainAxis】 : Direção do eixo principal 【Axis】", - "【reverse】: Se é invertido 【bool】", - "【children】: Conjunto de subcomponentes 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ru_RU.json deleted file mode 100644 index 527c1623a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "Тело списка", - "info": "Располагает несколько дочерних компонентов по оси, имеет мало настраиваемых свойств, обычно редко используется, вместо этого выбирают ListView.", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ListView", - "desc": [ - "【mainAxis】 : Направление основной оси 【Axis】", - "【reverse】: Обратное направление 【bool】", - "【children】: Набор дочерних компонентов 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_zh-CN.json deleted file mode 100644 index f870d8fea..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 342, - "name": "ListBody", - "localName": "列表体", - "info": "将若干子组件按照轴向进行排列,可设置的属性很少,一般很少使用,而选择使用ListView。", - "lever": 4, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListView的基本使用", - "desc": [ - "【mainAxis】 : 主轴方向 【Axis】", - "【reverse】: 是否反向 【bool】", - "【children】: 子组件集 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/node1_base.dart deleted file mode 100644 index 1529b12a7..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ListBody/node1_base.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/8/2 -/// contact me by email 1981462002@qq.com - - -class ListBodyDemo extends StatelessWidget { - const ListBodyDemo({Key? key}) : super(key: key); - - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: ListView( - children: [ - ListBody( - mainAxis: Axis.vertical, - reverse: false, - children: [ - Container(color: Colors.red, height: 50.0,), - Container(color: Colors.orange, height: 50.0,), - Container(color: Colors.yellow, height: 50.0,), - ], - ), - Container(color: Colors.green, height: 80.0,), - ListBody( - mainAxis: Axis.vertical, - reverse: false, - children: [ - Container(color: Colors.blue, height: 50.0,), - Container(color: Colors.indigo, height: 50.0,), - Container(color: Colors.purple, height: 50.0,), - ], - ) - ] - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_de_DE.json deleted file mode 100644 index 1ac519046..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "Verschachtelter Scroll-Viewport", - "info": "Ein in NestedScrollView verwendeter Viewport, der ein SliverOverlapAbsorberHandle enthält und es benachrichtigt, wenn der Viewport sein Layout neu berechnen muss. Zum Beispiel, wenn es gescrollt wird.", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in NestedScrollViewViewport", - "desc": [ - "【offset】 : *Versatz 【ViewportOffset】", - "【handle】 : *Handler 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : Achsenrichtung 【AxisDirection】", - "【crossAxisDirection】 : Querachsenrichtung 【AxisDirection】", - "【slivers】 : Unterkomponenten 【List】", - "【clipBehavior】 : Abschneideverhalten 【Clip】", - "【anchor】 : Ankerpunkt 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_en_US.json deleted file mode 100644 index 6ee55a667..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "Nested Scroll Viewport", - "info": "A viewport used in NestedScrollView, which holds a SliverOverlapAbsorberHandle and notifies it when the viewport needs to recalculate its layout. For example, when scrolling it.", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to NestedScrollViewViewport", - "desc": [ - "【offset】 : *Offset 【ViewportOffset】", - "【handle】 : *Handle 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : Axis Direction 【AxisDirection】", - "【crossAxisDirection】 : Cross Axis Direction 【AxisDirection】", - "【slivers】 : Child Components 【List】", - "【clipBehavior】 : Clip Behavior 【Clip】", - "【anchor】 : Anchor 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_es_ES.json deleted file mode 100644 index 139e1c8ca..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "Ventana de desplazamiento anidado", - "info": "Ventana utilizada en NestedScrollView que contiene un SliverOverlapAbsorberHandle y lo notifica cuando la ventana necesita recalcular su diseño. Por ejemplo, cuando se desplaza.", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a NestedScrollViewViewport", - "desc": [ - "【offset】 : *desplazamiento 【ViewportOffset】", - "【handle】 : *manejador 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : dirección del eje 【AxisDirection】", - "【crossAxisDirection】 : dirección del eje cruzado 【AxisDirection】", - "【slivers】 : componentes hijos 【List】", - "【clipBehavior】 : comportamiento de recorte 【Clip】", - "【anchor】 : punto de anclaje 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_fr_FR.json deleted file mode 100644 index 89464bb17..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "Vue de défilement imbriquée", - "info": "Une vue utilisée dans NestedScrollView, qui détient un SliverOverlapAbsorberHandle et le notifie lorsque la vue a besoin de recalculer sa disposition. Par exemple, lors du défilement.", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à NestedScrollViewViewport", - "desc": [ - "【offset】 : *décalage 【ViewportOffset】", - "【handle】 : *gestionnaire 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : direction de l'axe 【AxisDirection】", - "【crossAxisDirection】 : direction de l'axe croisé 【AxisDirection】", - "【slivers】 : composants enfants 【List】", - "【clipBehavior】 : comportement de découpage 【Clip】", - "【anchor】 : point d'ancrage 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_it_IT.json deleted file mode 100644 index 8aebc1641..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "Vista scorrevole annidata", - "info": "Vista utilizzata in NestedScrollView, che detiene SliverOverlapAbsorberHandle e lo notifica quando la vista necessita di ricalcolare il layout. Ad esempio, quando viene scorsa.", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a NestedScrollViewViewport", - "desc": [ - "【offset】 : *offset 【ViewportOffset】", - "【handle】 : *gestore 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : direzione dell'asse 【AxisDirection】", - "【crossAxisDirection】 : direzione dell'asse incrociato 【AxisDirection】", - "【slivers】 : componenti figli 【List】", - "【clipBehavior】 : comportamento di ritaglio 【Clip】", - "【anchor】 : punto di ancoraggio 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ja_JP.json deleted file mode 100644 index 3d54dbd1c..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "ネストされたスクロールビューポート", - "info": "NestedScrollView で使用されるビューポートで、このビューポートは SliverOverlapAbsorberHandle を保持し、ビューポートがレイアウトを再計算する必要があるときに通知します。例えば、スクロールするときなどです。", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollViewViewport の紹介", - "desc": [ - "【offset】 : *オフセット 【ViewportOffset】", - "【handle】 : *ハンドル 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : 軸方向 【AxisDirection】", - "【crossAxisDirection】 : 交差軸方向 【AxisDirection】", - "【slivers】 : 子コンポーネント 【List】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【anchor】 : アンカー 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ko_KR.json deleted file mode 100644 index 832a8215b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "중첩 스크롤 뷰포트", - "info": "NestedScrollView에서 사용되는 뷰포트로, 이 뷰포트는 SliverOverlapAbsorberHandle을 보유하고 있으며, 뷰포트가 레이아웃을 다시 계산해야 할 때 이를 알립니다. 예를 들어, 스크롤할 때.", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollViewViewport 소개", - "desc": [ - "【offset】 : *오프셋 【ViewportOffset】", - "【handle】 : *핸들러 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : 축 방향 【AxisDirection】", - "【crossAxisDirection】 : 교차 축 방향 【AxisDirection】", - "【slivers】 : 자식 위젯 【List】", - "【clipBehavior】 : 클립 동작 【Clip】", - "【anchor】 : 앵커 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_pt_PT.json deleted file mode 100644 index 972d73045..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "Porto de Rolagem Aninhado", - "info": "Porto utilizado no NestedScrollView, que detém o SliverOverlapAbsorberHandle e notifica-o quando o porto precisa recalcular o layout. Por exemplo, quando é rolado.", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao NestedScrollViewViewport", - "desc": [ - "【offset】 : *deslocamento 【ViewportOffset】", - "【handle】 : *manipulador 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : direção do eixo 【AxisDirection】", - "【crossAxisDirection】 : direção do eixo cruzado 【AxisDirection】", - "【slivers】 : componentes filhos 【List】", - "【clipBehavior】 : comportamento de corte 【Clip】", - "【anchor】 : âncora 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ru_RU.json deleted file mode 100644 index c3d2ff600..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "Вложенный скроллируемый вид", - "info": "Вид, используемый в NestedScrollView, который содержит SliverOverlapAbsorberHandle и уведомляет его, когда вид требует пересчета макета. Например, при его прокрутке.", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Описание NestedScrollViewViewport", - "desc": [ - "【offset】 : *смещение 【ViewportOffset】", - "【handle】 : *обработчик 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : направление оси 【AxisDirection】", - "【crossAxisDirection】 : направление поперечной оси 【AxisDirection】", - "【slivers】 : дочерние компоненты 【List】", - "【clipBehavior】 : поведение обрезки 【Clip】", - "【anchor】 : якорь 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_zh-CN.json deleted file mode 100644 index ef14cc74a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 344, - "name": "NestedScrollViewViewport", - "localName": "嵌套滑动视口", - "info": "在 NestedScrollView 中使用的视口,该视口持有 SliverOverlapAbsorberHandle,会在视口需要重新计算布局时通知它。例如,当滚动它时。", - "lever": 1, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollViewViewport 介绍", - "desc": [ - "【offset】 : *偏移 【ViewportOffset】", - "【handle】 : *处理器 【SliverOverlapAbsorberHandle】", - "【axisDirection】 : 轴向 【AxisDirection】", - "【crossAxisDirection】 : 交叉轴向 【AxisDirection】", - "【slivers】 : 子组件 【List】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【anchor】 : 锚点 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/node1_base.dart deleted file mode 100644 index 5da8f860d..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/NestedScrollViewViewport/node1_base.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class NestedScrollViewViewportDemo extends StatelessWidget { - const NestedScrollViewViewportDemo({Key? key}) : super(key: key); - - final String info = - 'NestedScrollViewViewport 在源码中只有一处使用:' - '_NestedScrollViewCustomScrollView 继承自 CustomScrollView,复写了 buildViewport 方法,返回 NestedScrollViewViewport 。' - '而 NestedScrollView 构建时使用了 _NestedScrollViewCustomScrollView,也就是 NestedScrollView 的视口依赖于 NestedScrollViewViewport。' - 'NestedScrollViewViewport 的特点是持有 SliverOverlapAbsorberHandle 类对象 handle,源码中该 handle 在 NestedScrollViewState 中初始化。' - '可通过上下文获取,用于 SliverOverlapAbsorber/SliverOverlapInjector 组件,使用详见相关组件。'; - - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_de_DE.json deleted file mode 100644 index 2152ab6f9..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "RichText", - "info": "Eine RichText-Komponente, die verschiedene Textstile oder verschiedene Komponenten aufnehmen kann und weit verbreitet ist.", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RichText", - "desc": [ - "【text】: Text 【TextSpan】", - " Andere Eigenschaften sind identisch mit Text, siehe dazu." - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText enthält andere Komponenten", - "desc": [ - "Verwenden Sie WidgetSpan, um normale Komponenten zu tragen, als Inhalt von RichText" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_en_US.json deleted file mode 100644 index d8ed9ff92..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "Rich Text", - "info": "A rich text component that can accommodate various text styles or various components, widely used.", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RichText", - "desc": [ - "【text】: text 【TextSpan】", - " Other properties are the same as Text, see it for details." - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText Contains Other Components", - "desc": [ - "Use WidgetSpan to carry ordinary components as the content of RichText" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_es_ES.json deleted file mode 100644 index c0d3ccfd0..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "Texto enriquecido", - "info": "Componente de texto enriquecido que puede contener varios estilos de texto o varios componentes, ampliamente utilizado.", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RichText", - "desc": [ - "【text】 : texto 【TextSpan】", - " Otras propiedades son las mismas que Text, consulte para más detalles." - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText contiene otros componentes", - "desc": [ - "Usa WidgetSpan para contener componentes comunes como contenido de RichText" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_fr_FR.json deleted file mode 100644 index 7af0eae17..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "Texte enrichi", - "info": "Un composant de texte enrichi qui peut contenir divers styles de texte ou divers composants, largement utilisé.", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RichText", - "desc": [ - "【text】 : texte 【TextSpan】", - " Les autres propriétés sont les mêmes que Text, voir pour plus de détails." - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText contenant d'autres composants", - "desc": [ - "Utilisez WidgetSpan pour contenir des composants ordinaires, en tant que contenu de RichText" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_it_IT.json deleted file mode 100644 index ffcd03457..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "Testo Arricchito", - "info": "Un componente di testo arricchito che può contenere vari stili di testo o vari componenti, ampiamente utilizzato.", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di RichText", - "desc": [ - "【text】: testo 【TextSpan】", - " Altre proprietà sono le stesse di Text, vedi dettagli." - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText Contiene Altri Componenti", - "desc": [ - "Utilizza WidgetSpan per contenere componenti comuni, come contenuto di RichText" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ja_JP.json deleted file mode 100644 index 813973ee1..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "リッチテキスト", - "info": "さまざまなテキストスタイルやコンポーネントを包含できるリッチテキストコンポーネントで、広く使用されています。", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RichTextの基本的な使用", - "desc": [ - "【text】 : テキスト 【TextSpan】", - " 他のプロパティはTextと同じです。詳細はそちらを参照してください。" - ] - }, - { - "file": "node2_widget.dart", - "name": "RichTextに他のコンポーネントを含める", - "desc": [ - "WidgetSpanを使用して通常のコンポーネントをリッチテキストの内容として含める" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ko_KR.json deleted file mode 100644 index 834b5ad3e..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "리치 텍스트", - "info": "다양한 텍스트 스타일이나 다양한 컴포넌트를 포함할 수 있는 리치 텍스트 컴포넌트로, 널리 사용됩니다.", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RichText 기본 사용", - "desc": [ - "【text】 : 텍스트 【TextSpan】", - " 다른 속성은 Text와 동일하며, 자세한 내용은 해당 항목을 참조하세요." - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText에 다른 컴포넌트 포함", - "desc": [ - "WidgetSpan을 사용하여 일반 컴포넌트를 포함하고, 이를 RichText의 내용으로 사용합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_pt_PT.json deleted file mode 100644 index 018135f9d..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "Texto Rico", - "info": "Um componente de texto rico que pode acomodar vários estilos de texto ou vários componentes, amplamente utilizado.", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RichText", - "desc": [ - "【text】 : texto 【TextSpan】", - " Outras propriedades são as mesmas que Text, consulte para mais detalhes." - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText Contendo Outros Componentes", - "desc": [ - "Use WidgetSpan para suportar componentes comuns como conteúdo do RichText" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ru_RU.json deleted file mode 100644 index f9f078362..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "Форматированный текст", - "info": "Компонент форматированного текста, который может содержать различные стили текста или компоненты, широко применяется.", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RichText", - "desc": [ - "【text】 : текст 【TextSpan】", - " Другие свойства такие же, как у Text, подробнее см. там." - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText содержит другие компоненты", - "desc": [ - "Используйте WidgetSpan для размещения обычных компонентов в качестве содержимого RichText" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_zh-CN.json deleted file mode 100644 index 6f1447ba2..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 101, - "name": "RichText", - "localName": "富文本", - "info": "可以容纳多种文字样式或各种组件的富文本组件,应用较为广泛。", - "lever": 5, - "family": 3, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RichText基本使用", - "desc": [ - "【text】 : 文字 【TextSpan】", - " 其他属性与Text相同,详见之。" - ] - }, - { - "file": "node2_widget.dart", - "name": "RichText包含其他组件", - "desc": [ - "使用WidgetSpan来承载普通组件,作为RichText的内容" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/node1_base.dart deleted file mode 100644 index 7e24b821d..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/node1_base.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; - -import '../../utils/color_utils.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class CustomRichText extends StatelessWidget { - const CustomRichText({Key? key}) : super(key: key); - - final str = " 发光强度简称光强,国际单位是(坎德拉)简写cd。" - "1cd是指光源在指定方向的单位立体角内发出的光通量。" - "光源辐射是均匀时,则光强为I=F/Ω,Ω为立体角,单位为球面度(sr),F为光通量," - "单位是流明,对于点光源由I=F/4π 。光亮度是表示发光面明亮程度的," - "指发光表面在指定方向的发光强度与垂直且指定方向的发光面的面积之比," - "单位是坎德拉/平方米。对于一个漫散射面,尽管各个方向的光强和光通量不同," - "但各个方向的亮度都是相等的。电视机的荧光屏就是近似于这样的漫散射面," - "所以从各个方向上观看图像,都有相同的亮度感。"; - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.only( - left: 10.0, - right: 10, - ), - child: RichText( - text: TextSpan( - children: str - .split("") - .map((str) => TextSpan( - text: str, - style: TextStyle( - fontSize: 14, color: ColorUtils.randomColor()))) - .toList())), - ); - } -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/node2_widget.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/node2_widget.dart deleted file mode 100644 index dc9c93200..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/RichText/node2_widget.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class RichTextWithWidget extends StatelessWidget { - const RichTextWithWidget({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return RichText( - text: TextSpan( - text: 'hello ', - style: const TextStyle(color: Colors.black, fontSize: 18), - children: [ - WidgetSpan( - child: Image.asset( - 'assets/images/icon_head.webp', - width: 30, - ), - alignment: PlaceholderAlignment.baseline, - baseline: TextBaseline.ideographic), - const TextSpan( - text: ' , welcome to ', - style: TextStyle(color: Colors.blue, fontSize: 18), - ), - const WidgetSpan( - child: FlutterLogo(), - alignment: PlaceholderAlignment.baseline, - baseline: TextBaseline.ideographic), - const TextSpan( - text: ' .\n', - ), - const TextSpan( - text: 'focus me on ', - style: TextStyle(color: Colors.orange, fontSize: 16), - ), - const TextSpan( - text: 'https://github.com/toly1994328', - style: TextStyle( - color: Colors.blue, - fontSize: 18, - decoration: TextDecoration.underline), - ), - const TextSpan( - text: ' .\n', - ), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_de_DE.json deleted file mode 100644 index fbca374e1..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "Zeilenlayout", - "info": "Ein Flex-Layout mit horizontaler Ausrichtung, das mehrere Komponenten aufnehmen kann. Alle anderen Eigenschaften sind identisch, siehe Flex.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Row", - "desc": [ - "【children】: Komponentenliste 【List】", - "【mainAxisAlignment】: Hauptachsenausrichtung 【MainAxisAlignment】", - "【crossAxisAlignment】: Kreuzachsenausrichtung 【CrossAxisAlignment】", - "【textBaseline】: Textbaseline 【TextBaseline】", - "【verticalDirection】: Vertikale Richtung 【VerticalDirection】", - "【mainAxisSize】: Hauptachsengröße 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_en_US.json deleted file mode 100644 index 21e94e2ed..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "Row Layout", - "info": "A Flex layout with a horizontal arrangement direction that can accommodate multiple components. All other properties are the same, see Flex for details.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Row", - "desc": [ - "【children】: Component list 【List】", - "【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】", - "【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】", - "【textBaseline】: Text baseline 【TextBaseline】", - "【verticalDirection】: Vertical direction 【VerticalDirection】", - "【mainAxisSize】: Main axis size 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_es_ES.json deleted file mode 100644 index d52d04801..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "Disposición de fila", - "info": "Disposición Flex con dirección horizontal, puede contener múltiples componentes. Todas las demás propiedades son iguales, consulte Flex para más detalles.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Row", - "desc": [ - "【children】: Lista de componentes 【List】", - "【mainAxisAlignment】: Alineación del eje principal 【MainAxisAlignment】", - "【crossAxisAlignment】: Alineación del eje transversal 【CrossAxisAlignment】", - "【textBaseline】: Línea base del texto 【TextBaseline】", - "【verticalDirection】: Dirección vertical 【VerticalDirection】", - "【mainAxisSize】: Tamaño del eje principal 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_fr_FR.json deleted file mode 100644 index d663af768..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "Disposition en ligne", - "info": "Une disposition Flex avec une orientation horizontale, capable de contenir plusieurs composants. Toutes les autres propriétés sont identiques, voir Flex pour plus de détails.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Row", - "desc": [ - "【children】 : Liste des composants 【List】", - "【mainAxisAlignment】 : Alignement de l'axe principal 【MainAxisAlignment】", - "【crossAxisAlignment】 : Alignement de l'axe secondaire 【CrossAxisAlignment】", - "【textBaseline】 : Ligne de base du texte 【TextBaseline】", - "【verticalDirection】 : Direction verticale 【VerticalDirection】", - "【mainAxisSize】 : Taille de l'axe principal 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_it_IT.json deleted file mode 100644 index 1bcf1ed46..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "Layout a righe", - "info": "Layout Flex con direzione orizzontale, può contenere più componenti. Tutte le altre proprietà sono le stesse, vedi Flex per i dettagli.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Row", - "desc": [ - "【children】 : Lista di componenti 【List】", - "【mainAxisAlignment】 : Allineamento dell'asse principale 【MainAxisAlignment】", - "【crossAxisAlignment】 : Allineamento dell'asse trasversale 【CrossAxisAlignment】", - "【textBaseline】 : Linea di base del testo 【TextBaseline】", - "【verticalDirection】 : Direzione verticale 【VerticalDirection】", - "【mainAxisSize】 : Dimensione dell'asse principale 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ja_JP.json deleted file mode 100644 index 4330b8874..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "行レイアウト", - "info": "レイアウト方向が横向きのFlexレイアウトで、複数のコンポーネントを収容できます。他の属性はすべて同じです。詳細はFlexを参照してください。", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Rowの基本使用", - "desc": [ - "【children】 : コンポーネントリスト 【List】", - "【mainAxisAlignment】 : 主軸の整列 【MainAxisAlignment】", - "【crossAxisAlignment】 : 交差軸の整列 【CrossAxisAlignment】", - "【textBaseline】 : テキストベースライン 【TextBaseline】", - "【verticalDirection】 : 垂直方向 【VerticalDirection】", - "【mainAxisSize】 : 主軸のサイズ 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ko_KR.json deleted file mode 100644 index 6ee04586d..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "행 레이아웃", - "info": "배치 방향이 가로인 Flex 레이아웃으로, 여러 컴포넌트를 수용할 수 있습니다. 다른 속성은 모두 동일하며, 자세한 내용은 Flex를 참조하세요.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Row 기본 사용법", - "desc": [ - "【children】 : 컴포넌트 리스트 【List】", - "【mainAxisAlignment】 : 주축 정렬 【MainAxisAlignment】", - "【crossAxisAlignment】 : 교차축 정렬 【CrossAxisAlignment】", - "【textBaseline】 : 텍스트 기준선 【TextBaseline】", - "【verticalDirection】 : 수직 방향 【VerticalDirection】", - "【mainAxisSize】 : 주축 크기 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_pt_PT.json deleted file mode 100644 index 0dfd304b2..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "Layout de Linha", - "info": "Um layout Flex com direção de disposição horizontal, que pode acomodar vários componentes. Todas as outras propriedades são as mesmas, consulte Flex para mais detalhes.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Row", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【mainAxisAlignment】 : Alinhamento do eixo principal 【MainAxisAlignment】", - "【crossAxisAlignment】 : Alinhamento do eixo transversal 【CrossAxisAlignment】", - "【textBaseline】 : Linha de base do texto 【TextBaseline】", - "【verticalDirection】 : Direção vertical 【VerticalDirection】", - "【mainAxisSize】 : Tamanho do eixo principal 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ru_RU.json deleted file mode 100644 index 5f557d635..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "Строка", - "info": "Горизонтальная компоновка Flex, которая может содержать несколько компонентов. Все остальные свойства такие же, как у Flex. Подробнее см. Flex.", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Row", - "desc": [ - "【children】: Список компонентов 【List】", - "【mainAxisAlignment】: Выравнивание по главной оси 【MainAxisAlignment】", - "【crossAxisAlignment】: Выравнивание по поперечной оси 【CrossAxisAlignment】", - "【textBaseline】: Базовая линия текста 【TextBaseline】", - "【verticalDirection】: Вертикальное направление 【VerticalDirection】", - "【mainAxisSize】: Размер главной оси 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_zh-CN.json deleted file mode 100644 index 0221c6a7b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 95, - "name": "Row", - "localName": "行布局", - "info": "排布方向为横向的Flex布局,可容纳多个组件。其他属性全部一致,详见Flex。", - "lever": 4, - "family": 3, - "linkIds": [ - 94, - 96 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Row基本使用", - "desc": [ - "【children】 : 组件列表 【List】", - "【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】", - "【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】", - "【textBaseline】 : 文字基线 【TextBaseline】", - "【verticalDirection】 : 竖直方向 【VerticalDirection】", - "【mainAxisSize】 : 主轴尺寸 【MainAxisSize】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/node1_base.dart deleted file mode 100644 index dc090a771..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Row/node1_base.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - - -class CustomRow extends StatelessWidget { - const CustomRow({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - height: 70, - color: const Color(0x4484FFFF), - child: Row( - children: const [ - Padding( - child: Icon( - Icons.add_location, - size: 30, - color: Colors.pink, - ), - padding: EdgeInsets.only(left: 25, right: 20), - ), - Expanded( - child: Text( - "附近", - style: TextStyle(fontSize: 18), - ), - ), - Padding( - child: Icon(Icons.keyboard_arrow_right, color: Colors.black38), - padding: EdgeInsets.only(right: 25), - ), - ], - )); - } -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_de_DE.json deleted file mode 100644 index 2e5a4eec9..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "Schrumpfende Umhüllungsansicht", - "info": "Beziehung zur shrinkWrap-Eigenschaft von ScrollView. Die ShrinkWrappingViewport passt ihre Größe auf der Hauptachse an ihre untergeordneten Knoten an und wird verwendet, wenn keine Randbeschränkungen vorhanden sind.", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in NestedScrollViewViewport", - "desc": [ - "【offset】 : *Versatz 【ViewportOffset】", - "【axisDirection】 : Achsenrichtung 【AxisDirection】", - "【crossAxisDirection】 : Kreuzachsenrichtung 【AxisDirection】", - "【slivers】 : Untergeordnete Komponenten 【List】", - "【clipBehavior】 : Beschneidungsverhalten 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_en_US.json deleted file mode 100644 index ca49de6b8..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "Shrink Wrap Viewport", - "info": "Related to the shrinkWrap property of ScrollView. ShrinkWrappingViewport adjusts its size on the main axis to fit its children, used when there are no boundary constraints.", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to NestedScrollViewViewport", - "desc": [ - "【offset】: *offset 【ViewportOffset】", - "【axisDirection】: Axis direction 【AxisDirection】", - "【crossAxisDirection】: Cross axis direction 【AxisDirection】", - "【slivers】: Child components 【List】", - "【clipBehavior】: Clip behavior 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_es_ES.json deleted file mode 100644 index fae42a2a8..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "Vista de Envoltura Reducida", - "info": "Relación con la propiedad shrinkWrap de ScrollView. ShrinkWrappingViewport ajusta su tamaño en el eje principal para adaptarse a sus nodos hijos, utilizado en ausencia de restricciones de límites.", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a NestedScrollViewViewport", - "desc": [ - "【offset】 : *desplazamiento 【ViewportOffset】", - "【axisDirection】 : dirección del eje 【AxisDirection】", - "【crossAxisDirection】 : dirección del eje cruzado 【AxisDirection】", - "【slivers】 : componentes hijos 【List】", - "【clipBehavior】 : comportamiento de recorte 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_fr_FR.json deleted file mode 100644 index 3e91e0aad..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "Vue enveloppante rétrécissante", - "info": "Lié à la propriété shrinkWrap de ScrollView. ShrinkWrappingViewport ajuste sa taille sur l'axe principal pour s'adapter à ses enfants, utilisé en l'absence de contraintes de limites.", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à NestedScrollViewViewport", - "desc": [ - "【offset】 : *décalage 【ViewportOffset】", - "【axisDirection】 : direction de l'axe 【AxisDirection】", - "【crossAxisDirection】 : direction de l'axe croisé 【AxisDirection】", - "【slivers】 : composants enfants 【List】", - "【clipBehavior】 : comportement de découpage 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_it_IT.json deleted file mode 100644 index 51a691a68..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "Vista di avvolgimento a contrazione", - "info": "Relazione con la proprietà shrinkWrap di ScrollView. ShrinkWrappingViewport ridimensiona se stesso sull'asse principale per adattarsi ai suoi figli, utilizzato in assenza di vincoli di confine.", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a NestedScrollViewViewport", - "desc": [ - "【offset】 : *offset 【ViewportOffset】", - "【axisDirection】 : direzione dell'asse 【AxisDirection】", - "【crossAxisDirection】 : direzione dell'asse incrociato 【AxisDirection】", - "【slivers】 : componenti figli 【List】", - "【clipBehavior】 : comportamento di ritaglio 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ja_JP.json deleted file mode 100644 index a2ed4d80c..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "収縮ラッピングビューポート", - "info": "ScrollViewのshrinkWrap属性との関連性。ShrinkWrappingViewportは、主軸上で自身のサイズを子ノードに合わせて調整し、境界制約がない場合に使用されます。", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollViewViewport 紹介", - "desc": [ - "【offset】 : *オフセット 【ViewportOffset】", - "【axisDirection】 : 軸方向 【AxisDirection】", - "【crossAxisDirection】 : 交差軸方向 【AxisDirection】", - "【slivers】 : 子コンポーネント 【List】", - "【clipBehavior】 : クリップ動作 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ko_KR.json deleted file mode 100644 index f5992c13b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "축소 래핑 뷰포트", - "info": "ScrollView의 shrinkWrap 속성과의 관계. ShrinkWrappingViewport는 주축에서 자식 노드에 맞게 크기를 조정하며, 경계 제약이 없는 경우에 사용됩니다.", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollViewViewport 소개", - "desc": [ - "【offset】 : *오프셋 【ViewportOffset】", - "【axisDirection】 : 축 방향 【AxisDirection】", - "【crossAxisDirection】 : 교차 축 방향 【AxisDirection】", - "【slivers】 : 자식 위젯 【List】", - "【clipBehavior】 : 클립 동작 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_pt_PT.json deleted file mode 100644 index 6873fd27b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "Vista de Envolvimento de Redução", - "info": "Associado à propriedade shrinkWrap do ScrollView. O ShrinkWrappingViewport ajusta o seu tamanho no eixo principal para se adaptar aos seus filhos, usado em casos sem restrições de limite.", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao NestedScrollViewViewport", - "desc": [ - "【offset】 : *deslocamento 【ViewportOffset】", - "【axisDirection】 : direção do eixo 【AxisDirection】", - "【crossAxisDirection】 : direção do eixo cruzado 【AxisDirection】", - "【slivers】 : componentes filhos 【List】", - "【clipBehavior】 : comportamento de corte 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ru_RU.json deleted file mode 100644 index 71edc861f..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "Сжимающаяся оболочка Viewport", - "info": "Связь с атрибутом shrinkWrap ScrollView. ShrinkWrappingViewport регулирует свой размер по основной оси, чтобы соответствовать своим дочерним элементам, используется при отсутствии ограничений.", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в NestedScrollViewViewport", - "desc": [ - "【offset】 : *смещение 【ViewportOffset】", - "【axisDirection】 : направление оси 【AxisDirection】", - "【crossAxisDirection】 : направление поперечной оси 【AxisDirection】", - "【slivers】 : дочерние компоненты 【List】", - "【clipBehavior】 : поведение обрезки 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_zh-CN.json deleted file mode 100644 index 0939d13fc..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 343, - "name": "ShrinkWrappingViewport", - "localName": "收缩包围视图", - "info": "和 ScrollView 的 shrinkWrap 属性之间关联。ShrinkWrappingViewport 在主轴上调整自身的大小以适应它的子节点,在无边界约束的情况下使用。", - "lever": 1, - "family": 3, - "linkIds": [ - 349, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollViewViewport 介绍", - "desc": [ - "【offset】 : *偏移 【ViewportOffset】", - "【axisDirection】 : 轴向 【AxisDirection】", - "【crossAxisDirection】 : 交叉轴向 【AxisDirection】", - "【slivers】 : 子组件 【List】", - "【clipBehavior】 : 裁剪行为 【Clip】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/node1_base.dart deleted file mode 100644 index 152e603f4..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/ShrinkWrappingViewport/node1_base.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ShrinkWrappingViewportDemo extends StatelessWidget { - - const ShrinkWrappingViewportDemo({Key? key}) : super(key: key); - - final String info = - 'ShrinkWrappingViewport 在源码中只有一处使用:' - '在 ScrollView 中如果 shrinkWrap 为 true,会使用 ShrinkWrappingViewport,该属性在其子类 ListView、GridView、CustomScrollView 中可指定。' - '如果 shrinkWrap 为 false,视口会使用 Viewport,此时,视图区域将会沿滑动方向尽可能延伸。在无边界约束的情况下,shrinkWrap 需要是 true。' - '另外 ShrinkWrappingViewport 使用比较昂贵,因为滑动时需要重新计算滑动视图的尺寸。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_de_DE.json deleted file mode 100644 index 916acaba9..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_de_DE.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "Stapellayout", - "info": "Kann mehrere Komponenten aufnehmen, Unterkomponenten werden gestapelt platziert, wobei die letzte oben liegt. Verfügt über eine alignment-Eigenschaft, die in Kombination mit der Positioned-Komponente verwendet werden kann, um eine präzise Positionierung zu erreichen.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Stack", - "desc": [ - "【children】: Komponentenliste 【List】", - "【textDirection】: Ausrichtung der Kinder 【MainAxisAlignment】", - "【alignment】: Ausrichtungsmethode 【AlignmentGeometry】", - "【overflow】: Überlaufmodus 【Overflow】", - "【fit】: Anpassungsmodus 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Kombinierte Verwendung von Stack und Positioned", - "desc": [ - "Die Positioned-Komponente kann nur innerhalb eines Stacks verwendet werden und ermöglicht die präzise Platzierung einer Komponente durch Angabe der Abstände von oben, links, rechts und unten." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_en_US.json deleted file mode 100644 index 27bd446e2..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_en_US.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "Stack Layout", - "info": "Can accommodate multiple components, arranging child components in a stacked manner, with the latter on top. Has the alignment property, which can be used in conjunction with the Positioned component for precise positioning.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Stack", - "desc": [ - "【children】: Component list 【List】", - "【textDirection】: Child arrangement direction 【MainAxisAlignment】", - "【alignment】: Alignment method 【AlignmentGeometry】", - "【overflow】: Overflow mode 【Overflow】", - "【fit】: Fit mode 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Combined Usage of Stack and Positioned", - "desc": [ - "The Positioned component can only be used within a Stack, allowing precise placement of a component by specifying distances from the top, left, right, and bottom." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_es_ES.json deleted file mode 100644 index d3df90938..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_es_ES.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "Diseño apilado", - "info": "Puede contener múltiples componentes, colocando los componentes hijos de manera apilada, el último encima. Tiene la propiedad de alineación, que se puede usar junto con el componente Positioned para un posicionamiento preciso.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Stack", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【textDirection】 : Dirección de disposición de los hijos 【MainAxisAlignment】", - "【alignment】 : Modo de alineación 【AlignmentGeometry】", - "【overflow】 : Modo de desbordamiento 【Overflow】", - "【fit】 : Modo de ajuste 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Uso combinado de Stack y Positioned", - "desc": [ - "El componente Positioned solo se puede usar en Stack, y se puede especificar la distancia desde la parte superior, izquierda, derecha e inferior para colocar un componente con precisión." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_fr_FR.json deleted file mode 100644 index 90c39694b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_fr_FR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "Disposition en pile", - "info": "Peut contenir plusieurs composants, disposant les composants enfants de manière empilée, le dernier étant au-dessus. Possède une propriété d'alignement, pouvant être utilisée conjointement avec le composant Positioned pour un positionnement précis.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Stack", - "desc": [ - "【children】 : Liste des composants 【List】", - "【textDirection】 : Direction de disposition des enfants 【MainAxisAlignment】", - "【alignment】 : Mode d'alignement 【AlignmentGeometry】", - "【overflow】 : Mode de débordement 【Overflow】", - "【fit】 : Mode d'adaptation 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Utilisation combinée de Stack et Positioned", - "desc": [ - "Le composant Positioned ne peut être utilisé qu'avec Stack, permettant de positionner précisément un composant en spécifiant les distances en haut, bas, gauche et droite." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_it_IT.json deleted file mode 100644 index 06457d8f9..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_it_IT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "Layout a Pila", - "info": "Può contenere più componenti, disposti in modo sovrapposto, con il successivo sopra il precedente. Possiede la proprietà alignment, che può essere utilizzata in combinazione con il componente Positioned per un posizionamento preciso.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di Stack", - "desc": [ - "【children】: Lista di componenti 【List】", - "【textDirection】: Direzione di disposizione dei figli 【MainAxisAlignment】", - "【alignment】: Modalità di allineamento 【AlignmentGeometry】", - "【overflow】: Modalità di overflow 【Overflow】", - "【fit】: Modalità di adattamento 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Uso Combinato di Stack e Positioned", - "desc": [ - "Il componente Positioned può essere utilizzato solo con Stack, consentendo di specificare le distanze da sinistra, alto, destra e basso per posizionare con precisione un componente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ja_JP.json deleted file mode 100644 index f9d786559..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ja_JP.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "スタックレイアウト", - "info": "複数のコンポーネントを収容でき、子コンポーネントをスタック方式で配置し、後者が上に来ます。alignment属性を持ち、Positionedコンポーネントと組み合わせて使用することで、正確な位置指定が可能です。", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Stackの基本的な使用", - "desc": [ - "【children】 : コンポーネントリスト 【List】", - "【textDirection】 : 子要素の配置方向 【MainAxisAlignment】", - "【alignment】 : 配置方法 【AlignmentGeometry】", - "【overflow】 : オーバーフローモード 【Overflow】", - "【fit】 : フィットモード 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "StackとPositionedの組み合わせ使用", - "desc": [ - "PositionedコンポーネントはStack内でのみ使用でき、左上右下の距離を指定して特定のコンポーネントを正確に配置できます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ko_KR.json deleted file mode 100644 index a8299959c..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ko_KR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "스택 레이아웃", - "info": "여러 컴포넌트를 수용할 수 있으며, 자식 컴포넌트를 겹쳐서 배치합니다. 후자가 위에 위치합니다. alignment 속성을 가지고 있으며, Positioned 컴포넌트와 함께 사용하여 정확한 위치를 지정할 수 있습니다.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Stack 기본 사용법", - "desc": [ - "【children】 : 컴포넌트 리스트 【List】", - "【textDirection】 : 자식 배치 방향 【MainAxisAlignment】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】", - "【overflow】 : 오버플로우 모드 【Overflow】", - "【fit】 : 적응 모드 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Stack과 Positioned 함께 사용", - "desc": [ - "Positioned 컴포넌트는 Stack에서만 사용할 수 있으며, 특정 컴포넌트의 위치를 정확히 배치하기 위해 상하좌우 거리를 지정할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_pt_PT.json deleted file mode 100644 index c06bc8b58..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_pt_PT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "Layout Empilhado", - "info": "Pode acomodar vários componentes, dispondo os subcomponentes de forma empilhada, com o último ficando por cima. Possui a propriedade alignment, que pode ser usada em conjunto com o componente Positioned para um posicionamento preciso.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Stack", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【textDirection】 : Direção de disposição dos filhos 【MainAxisAlignment】", - "【alignment】 : Modo de alinhamento 【AlignmentGeometry】", - "【overflow】 : Modo de overflow 【Overflow】", - "【fit】 : Modo de ajuste 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Uso Combinado do Stack e Positioned", - "desc": [ - "O componente Positioned só pode ser usado dentro de um Stack, permitindo especificar as distâncias de topo, esquerda, direita e inferior para posicionar um componente com precisão." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ru_RU.json deleted file mode 100644 index 9edd87b3c..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_ru_RU.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "Стек", - "info": "Может содержать несколько компонентов, располагая дочерние компоненты в стеке, последний сверху. Имеет свойство alignment, которое можно использовать вместе с компонентом Positioned для точного позиционирования.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Stack", - "desc": [ - "【children】: Список компонентов 【List】", - "【textDirection】: Направление расположения детей 【MainAxisAlignment】", - "【alignment】: Способ выравнивания 【AlignmentGeometry】", - "【overflow】: Режим переполнения 【Overflow】", - "【fit】: Режим адаптации 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Использование Stack и Positioned вместе", - "desc": [ - "Компонент Positioned может использоваться только в Stack, позволяя точно размещать компонент, задавая расстояния сверху, слева, справа и снизу." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_zh-CN.json deleted file mode 100644 index db057f07b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/desc_zh-CN.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 97, - "name": "Stack", - "localName": "堆叠布局", - "info": "可容纳多个组件,以堆叠的方式摆放子组件,后者居上。拥有alignment属性,可与Positioned组件联合使用,精确定位。", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95, - 161 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Stack基本使用", - "desc": [ - "【children】 : 组件列表 【List】", - "【textDirection】 : 孩子排布方向 【MainAxisAlignment】", - "【alignment】 : 对齐方式 【AlignmentGeometry】", - "【overflow】 : 溢出模式 【Overflow】", - "【fit】 : 适应模式 【StackFit】" - ] - }, - { - "file": "node2_positioned.dart", - "name": "Stack和Positioned结合使用", - "desc": [ - "Positioned组件只能用与Stack中,可以指定左上右下的距离对某个组件进行位置精确安放。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/node1_base.dart deleted file mode 100644 index 8304e3090..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/node1_base.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class CustomStack extends StatelessWidget { - const CustomStack({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Widget yellowBox = Container( - color: Colors.yellow, - height: 100, - width: 100, - ); - - Widget redBox = Container( - color: Colors.red, - height: 90, - width: 90, - ); - - Widget greenBox = Container( - color: Colors.green, - height: 80, - width: 80, - ); - - Widget cyanBox = Container( - color: Colors.cyanAccent, - height: 70, - width: 70, - ); - - return Container( - width: 200, - height: 120, - color: Colors.grey.withAlpha(33), - child: Stack( - textDirection: TextDirection.rtl, - fit: StackFit.loose, - alignment: Alignment.topRight, - // overflow: Overflow.clip, // 1.22.0 被去除 - children: [yellowBox, redBox, greenBox, cyanBox], - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/node2_positioned.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/node2_positioned.dart deleted file mode 100644 index 6ed8b5f0a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Stack/node2_positioned.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class PositionedStack extends StatelessWidget { - const PositionedStack({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Widget yellowBox = Container( - color: Colors.yellow, - height: 100, - width: 100, - ); - - Widget redBox = Container( - color: Colors.red, - height: 90, - width: 90, - ); - - Widget greenBox = Container( - color: Colors.green, - height: 80, - width: 80, - ); - - Widget cyanBox = Container( - color: Colors.cyanAccent, - height: 70, - width: 70, - ); - - return Container( - width: 200, - height: 120, - color: Colors.grey.withAlpha(33), - child: Stack( - children: [yellowBox, redBox, greenBox, - Positioned( - child: cyanBox, - bottom: 10, - right: 10, - ) - ], - )); - } -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_de_DE.json deleted file mode 100644 index eda5bea82..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "Ansichtsfenster-Komponente", - "info": "Wird normalerweise verwendet, um ein Ansichtsfenster für eine Scroll-Ansicht bereitzustellen, wobei nur die angezeigten und vorab geladenen Teile erstellt werden. Es kann die Länge des Vorladens, die Scroll-Achse usw. angegeben werden. Es ist eine der Kernimplementationskomponenten von ScrollView und wird im Allgemeinen nicht direkt verwendet.", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Viewport", - "desc": [ - "【offset】: *Ansichtsfenster-Verschiebung 【ViewportOffset】", - "【cacheExtentStyle】: Vorladetyp 【CacheExtentStyle】", - "【cacheExtent】: Vorlademenge 【double】", - "【axisDirection】: Scrollrichtung 【AxisDirection】", - "【slivers】: Untergeordnete Sliver-Komponentensammlung 【List】", - "【anchor】: Ankerpunkt 【double】", - "Sie können diesen Code ausführen, um den Aufbau von ColorItem zu überprüfen, 128 Farbbalken werden nicht alle auf einmal erstellt." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_en_US.json deleted file mode 100644 index 4fa1c0a58..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "Viewport Component", - "info": "Typically used to provide a viewport for a scrolling view, only building the displayed and preloaded parts. The preload length, scrolling axis, etc., can be specified. It is one of the core implementation components of ScrollView and is generally not used directly.", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Viewport", - "desc": [ - "【offset】: *Viewport offset 【ViewportOffset】", - "【cacheExtentStyle】: Preload type 【CacheExtentStyle】", - "【cacheExtent】: Preload amount 【double】", - "【axisDirection】: Scrolling direction 【AxisDirection】", - "【slivers】: Child Sliver component set 【List】", - "【anchor】: Anchor point 【double】", - "You can run this code to see how the ColorItem is constructed, the 128 color bars are not all constructed at once." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_es_ES.json deleted file mode 100644 index d10d5ef93..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "Componente de ventana gráfica", - "info": "Normalmente se utiliza para proporcionar una ventana gráfica a las vistas deslizantes, construyendo solo las partes visibles y precargadas. Se puede especificar la longitud de precarga, la dirección de deslizamiento, etc. Es uno de los componentes centrales de la implementación de ScrollView y generalmente no se utiliza directamente.", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Viewport", - "desc": [ - "【offset】: *Desplazamiento de la ventana gráfica 【ViewportOffset】", - "【cacheExtentStyle】: Tipo de precarga 【CacheExtentStyle】", - "【cacheExtent】: Cantidad de precarga 【double】", - "【axisDirection】: Dirección de deslizamiento 【AxisDirection】", - "【slivers】: Conjunto de componentes Sliver hijos 【List】", - "【anchor】: Punto de anclaje 【double】", - "Puedes ejecutar este código para ver cómo se construye ColorItem, las 128 barras de color no se construyen todas a la vez." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_fr_FR.json deleted file mode 100644 index b78da72e4..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "Composant de fenêtre", - "info": "Généralement utilisé pour fournir une fenêtre à une vue défilante, ne construit que les parties affichées et préchargées. Peut spécifier la longueur de préchargement, l'axe de défilement, etc. Est l'un des composants de base de l'implémentation de ScrollView, généralement non utilisé directement.", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Viewport", - "desc": [ - "【offset】 : *Décalage de la fenêtre 【ViewportOffset】", - "【cacheExtentStyle】: Type de préchargement 【CacheExtentStyle】", - "【cacheExtent】: Quantité de préchargement 【double】", - "【axisDirection】: Direction de défilement 【AxisDirection】", - "【slivers】: Ensemble de composants Sliver enfants 【List】", - "【anchor】: Point d'ancrage 【double】", - "Vous pouvez exécuter ce code pour voir la construction de ColorItem, les 128 barres de couleur ne sont pas toutes construites en une seule fois." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_it_IT.json deleted file mode 100644 index 71dd37f34..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "Componente Viewport", - "info": "Utilizzato solitamente per fornire una finestra di visualizzazione per le viste scorrevoli, costruendo solo le parti visibili e precaricate. È possibile specificare la lunghezza del precaricamento, l'asse di scorrimento, ecc. È uno dei componenti di implementazione centrale di ScrollView e generalmente non viene utilizzato direttamente.", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Viewport", - "desc": [ - "【offset】 : *Offset della finestra di visualizzazione 【ViewportOffset】", - "【cacheExtentStyle】: Tipo di precaricamento 【CacheExtentStyle】", - "【cacheExtent】: Quantità di precaricamento 【double】", - "【axisDirection】: Direzione di scorrimento 【AxisDirection】", - "【slivers】: Insieme di componenti Sliver figli 【List】", - "【anchor】: Punto di ancoraggio 【double】", - "Puoi eseguire questi codici per vedere come viene costruito ColorItem, i 128 barre di colore non vengono costruiti tutti in una volta." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ja_JP.json deleted file mode 100644 index 99b72394a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "ビューポートコンポーネント", - "info": "通常、スライドビューのビューポートを提供するために使用され、表示およびプリロードされる部分のみを構築します。プリロードの長さ、スライド軸などを指定できます。ScrollViewのコア実装コンポーネントの1つであり、通常は直接使用しません。", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Viewportの基本的な使用法", - "desc": [ - "【offset】 : *ビューポートオフセット 【ViewportOffset】", - "【cacheExtentStyle】: プリロードタイプ 【CacheExtentStyle】", - "【cacheExtent】: プリロード量 【double】", - "【axisDirection】: スライド方向 【AxisDirection】", - "【slivers】: 子Sliverコンポーネントセット 【List】", - "【anchor】: アンカー 【double】", - "これらのコードを実行して、ColorItemの構築状況を確認できます。128のカラーバーは一度にすべて構築されません。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ko_KR.json deleted file mode 100644 index d480441a7..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "뷰포트 컴포넌트", - "info": "일반적으로 스크롤 뷰에 뷰포트를 제공하기 위해 사용되며, 표시 및 미리 로드할 부분만 구성합니다. 미리 로드할 길이, 스크롤 방향 등을 지정할 수 있습니다. ScrollView의 핵심 구현 컴포넌트 중 하나로, 일반적으로 직접 사용하지 않습니다.", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Viewport의 기본 사용", - "desc": [ - "【offset】 : *뷰포트 오프셋 【ViewportOffset】", - "【cacheExtentStyle】: 미리 로드 유형 【CacheExtentStyle】", - "【cacheExtent】: 미리 로드량 【double】", - "【axisDirection】: 스크롤 방향 【AxisDirection】", - "【slivers】: 하위 Sliver 컴포넌트 집합 【List】", - "【anchor】: 앵커 【double】", - "이 코드를 실행하여 ColorItem의 구성을 확인할 수 있으며, 128개의 색상 바가 한 번에 모두 구성되지는 않습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_pt_PT.json deleted file mode 100644 index 6ba04fed5..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "Componente de Viewport", - "info": "Normalmente usado para fornecer uma viewport para uma vista deslizante, construindo apenas as partes exibidas e pré-carregadas. Pode especificar o comprimento do pré-carregamento, o eixo de deslizamento, etc. É um dos componentes principais de implementação do ScrollView, geralmente não é usado diretamente.", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Viewport", - "desc": [ - "【offset】 : *Deslocamento da viewport 【ViewportOffset】", - "【cacheExtentStyle】: Tipo de pré-carregamento 【CacheExtentStyle】", - "【cacheExtent】: Quantidade de pré-carregamento 【double】", - "【axisDirection】: Direção de deslizamento 【AxisDirection】", - "【slivers】: Conjunto de componentes Sliver filhos 【List】", - "【anchor】: Ponto de ancoragem 【double】", - "Pode executar este código para verificar a construção do ColorItem, as 128 barras de cores não são construídas todas de uma vez." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ru_RU.json deleted file mode 100644 index 189f1014a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "Компонент Viewport", - "info": "Обычно используется для предоставления области просмотра для прокручиваемого вида, строя только отображаемые и предварительно загружаемые части. Можно указать длину предварительной загрузки, направление прокрутки и т.д. Это один из основных компонентов реализации ScrollView, обычно не используется напрямую.", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Viewport", - "desc": [ - "【offset】: *Смещение области просмотра 【ViewportOffset】", - "【cacheExtentStyle】: Тип предварительной загрузки 【CacheExtentStyle】", - "【cacheExtent】: Объем предварительной загрузки 【double】", - "【axisDirection】: Направление прокрутки 【AxisDirection】", - "【slivers】: Набор дочерних компонентов Sliver 【List】", - "【anchor】: Точка привязки 【double】", - "Можно запустить этот код, чтобы увидеть, как строится ColorItem, 128 цветных полос не строятся все сразу." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_zh-CN.json deleted file mode 100644 index 1837dac22..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 340, - "name": "Viewport", - "localName": "视口组件", - "info": "通常用于为滑动视图提供视口,仅构建显示和预加载的部位。可指定预加载的长度、滑动轴向等。是ScrollView的核心实现组件之一,一般不直接使用。", - "lever": 1, - "family": 3, - "linkIds": [ - 253, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Viewport的基本使用", - "desc": [ - "【offset】 : *视口偏移量 【ViewportOffset】", - "【cacheExtentStyle】: 预加载类型 【CacheExtentStyle】", - "【cacheExtent】: 预加载量 【double】", - "【axisDirection】: 滑动方向 【AxisDirection】", - "【slivers】: 子Sliver组件集 【List】", - "【anchor】: 锚点 【double】", - "可以运行这些代码,查看ColorItem的构建情况,128个色条并非一次性全部构建。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/node1_base.dart deleted file mode 100644 index 6895cf2f4..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Viewport/node1_base.dart +++ /dev/null @@ -1,79 +0,0 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; - -/// create by 张风捷特烈 on 2020/8/2 -/// contact me by email 1981462002@qq.com - - -class ViewportDemo extends StatelessWidget { - const ViewportDemo({super.key}); - - List get data => List.generate(128, (i) => Color(0xFF6600FF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 250, - child: Scrollable( - axisDirection: AxisDirection.down, - physics: const BouncingScrollPhysics(), - dragStartBehavior: DragStartBehavior.start, - viewportBuilder: (ctx, position) => Viewport( - axisDirection: AxisDirection.down, - cacheExtent: 200, - anchor: 0, - cacheExtentStyle: CacheExtentStyle.pixel, - offset: position, - slivers: [_buildSliverList()], - ), - ), - ); - } - - Widget _buildSliverList() => SliverList( - delegate: SliverChildBuilderDelegate( - (_, int index) =>ColorItem(color: data[index],), - childCount: data.length), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} - -class ColorItem extends StatefulWidget { - final Color color; - - const ColorItem({Key? key, required this.color}) : super(key: key); - - @override - _ColorItemState createState() => _ColorItemState(); -} - -class _ColorItemState extends State { - - @override - void initState() { - super.initState(); - print('-----initState----${colorString(widget.color)}-----------'); - } - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.only(top: 1), - alignment: Alignment.center, - width: 100, - height: 60, - color: widget.color, - child: Text( - colorString(widget.color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ]), - ), - ); - } - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_de_DE.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_de_DE.json deleted file mode 100644 index 1fa4ebc30..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_de_DE.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "Wrap-Layout", - "info": "Kann mehrere Komponenten aufnehmen und sie in einer bestimmten Richtung anordnen. Es kann den Abstand zwischen den Kindern leicht verarbeiten und automatisch umbrechen, wenn die Grenze überschritten wird. Es hat Ausrichtungsmethoden für die Haupt- und Querachse und ist relativ flexibel.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Wrap", - "desc": [ - "【children】 : Komponentenliste 【List】", - "【spacing】 : Abstand zwischen den Einträgen auf der Hauptachse 【double】", - "【runSpacing】 : Abstand zwischen den Einträgen auf der Querachse 【double】", - "【direction】 : Ausrichtung der Hauptachse 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Alignment-Eigenschaft von Wrap", - "desc": [ - "【alignment】 : Ausrichtung der Hauptachse 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "CrossAxisAlignment-Eigenschaft von Wrap", - "desc": [ - "【crossAxisAlignment】 : Ausrichtung der Querachse 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "TextDirection-Eigenschaft von Wrap", - "desc": [ - "【textDirection】 : Textrichtung 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "VerticalDirection-Eigenschaft von Wrap", - "desc": [ - "【verticalDirection】 : Vertikale Richtung 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_en_US.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_en_US.json deleted file mode 100644 index 65132c6bf..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_en_US.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "Wrap Layout", - "info": "Can accommodate multiple components, arranged in a specified direction, and can easily handle the spacing between children. It can automatically wrap when out of bounds. It has flexible alignment methods for the main axis and cross axis.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Wrap", - "desc": [ - "【children】: Component list 【List】", - "【spacing】: Main axis spacing between items 【double】", - "【runSpacing】: Cross axis spacing between items 【double】", - "【direction】: Main axis alignment 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Wrap's alignment Property", - "desc": [ - "【alignment】: Main axis alignment 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "Wrap's crossAxisAlignment Property", - "desc": [ - "【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "Wrap's textDirection Property", - "desc": [ - "【textDirection】: Text direction 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "Wrap's verticalDirection Property", - "desc": [ - "【verticalDirection】: Vertical direction 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_es_ES.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_es_ES.json deleted file mode 100644 index ab8d1052a..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_es_ES.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "Disposición de envoltura", - "info": "Puede contener múltiples componentes, que se organizan en la dirección especificada, y puede manejar fácilmente el espaciado entre los hijos. Cuando se excede el límite, puede envolver automáticamente. Tiene métodos de alineación en el eje principal y el eje cruzado, lo que lo hace bastante flexible.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Wrap", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【spacing】 : Espaciado entre elementos en el eje principal 【double】", - "【runSpacing】 : Espaciado entre elementos en el eje cruzado 【double】", - "【direction】 : Alineación del eje principal 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Propiedad alignment de Wrap", - "desc": [ - "【alignment】 : Alineación del eje principal 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "Propiedad crossAxisAlignment de Wrap", - "desc": [ - "【crossAxisAlignment】 : Alineación del eje cruzado 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "Propiedad textDirection de Wrap", - "desc": [ - "【textDirection】 : Dirección del texto 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "Propiedad verticalDirection de Wrap", - "desc": [ - "【verticalDirection】 : Dirección vertical 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_fr_FR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_fr_FR.json deleted file mode 100644 index 7b96706f5..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_fr_FR.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "Disposition enveloppante", - "info": "Peut contenir plusieurs composants, disposés séquentiellement dans une direction spécifiée, peut facilement gérer l'espacement des enfants, et peut automatiquement passer à la ligne suivante en cas de débordement. Possède des méthodes d'alignement pour l'axe principal et l'axe transversal, offrant une grande flexibilité.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Wrap", - "desc": [ - "【children】 : Liste des composants 【List】", - "【spacing】 : Espacement des éléments sur l'axe principal 【double】", - "【runSpacing】 : Espacement des éléments sur l'axe transversal 【double】", - "【direction】 : Alignement de l'axe principal 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Propriété alignment de Wrap", - "desc": [ - "【alignment】 : Alignement de l'axe principal 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "Propriété crossAxisAlignment de Wrap", - "desc": [ - "【crossAxisAlignment】 : Alignement de l'axe transversal 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "Propriété textDirection de Wrap", - "desc": [ - "【textDirection】 : Direction du texte 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "Propriété verticalDirection de Wrap", - "desc": [ - "【verticalDirection】 : Direction verticale 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_it_IT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_it_IT.json deleted file mode 100644 index d33ff5f45..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_it_IT.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "Layout a pacchetto", - "info": "Può contenere più componenti, disposti in sequenza secondo la direzione specificata, può gestire facilmente la spaziatura tra i figli e può andare a capo automaticamente quando si superano i limiti. Ha modalità di allineamento per l'asse principale e l'asse trasversale, è abbastanza flessibile.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Wrap", - "desc": [ - "【children】 : Lista dei componenti 【List】", - "【spacing】 : Spaziatura degli elementi sull'asse principale 【double】", - "【runSpacing】 : Spaziatura degli elementi sull'asse trasversale 【double】", - "【direction】 : Allineamento dell'asse principale 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Proprietà alignment di Wrap", - "desc": [ - "【alignment】 : Allineamento dell'asse principale 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "Proprietà crossAxisAlignment di Wrap", - "desc": [ - "【crossAxisAlignment】 : Allineamento dell'asse trasversale 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "Proprietà textDirection di Wrap", - "desc": [ - "【textDirection】 : Direzione del testo 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "Proprietà verticalDirection di Wrap", - "desc": [ - "【verticalDirection】 : Direzione verticale 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ja_JP.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ja_JP.json deleted file mode 100644 index 50d7a7443..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ja_JP.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "ラップレイアウト", - "info": "複数のコンポーネントを収容でき、指定された方向に順番に配置し、子要素の間隔を簡単に処理できます。オーバーフロー時に自動的に折り返すことができます。主軸と交差軸の配置方法を持ち、比較的柔軟です。", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Wrapの基本的な使い方", - "desc": [ - "【children】 : コンポーネントリスト 【List】", - "【spacing】 : 主軸アイテム間隔 【double】", - "【runSpacing】 : 交差軸アイテム間隔 【double】", - "【direction】 : 主軸整列 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Wrapのalignment属性", - "desc": [ - "【alignment】 : 主軸整列 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "WrapのcrossAxisAlignment属性", - "desc": [ - "【crossAxisAlignment】 : 交差軸整列 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "WrapのtextDirection属性", - "desc": [ - "【textDirection】 : テキスト方向 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "WrapのverticalDirection属性", - "desc": [ - "【verticalDirection】 : 垂直方向 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ko_KR.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ko_KR.json deleted file mode 100644 index 4765ca5d5..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ko_KR.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "래핑 레이아웃", - "info": "여러 컴포넌트를 수용할 수 있으며, 지정된 방향으로 순차적으로 배치할 수 있습니다. 자식 간의 간격을 쉽게 처리할 수 있으며, 경계를 벗어날 경우 자동으로 줄 바꿈이 가능합니다. 주축과 교차축 정렬 방식을 가지고 있어 유연성이 높습니다.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Wrap의 기본 사용법", - "desc": [ - "【children】 : 컴포넌트 리스트 【List】", - "【spacing】 : 주축 항목 간격 【double】", - "【runSpacing】 : 교차축 항목 간격 【double】", - "【direction】 : 주축 정렬 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Wrap의 alignment 속성", - "desc": [ - "【alignment】 : 주축 정렬 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "Wrap의 crossAxisAlignment 속성", - "desc": [ - "【crossAxisAlignment】 : 교차축 정렬 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "Wrap의 textDirection 속성", - "desc": [ - "【textDirection】 : 텍스트 방향 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "Wrap의 verticalDirection 속성", - "desc": [ - "【verticalDirection】 : 수직 방향 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_pt_PT.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_pt_PT.json deleted file mode 100644 index f02fcbf75..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_pt_PT.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "Layout de Embalagem", - "info": "Pode acomodar vários componentes, dispostos sequencialmente na direção especificada, e pode facilmente lidar com o espaçamento entre os filhos. Quando ultrapassa o limite, pode quebrar automaticamente a linha. Possui métodos de alinhamento para o eixo principal e o eixo cruzado, sendo bastante flexível.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Wrap", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【spacing】 : Espaçamento entre itens no eixo principal 【double】", - "【runSpacing】 : Espaçamento entre itens no eixo cruzado 【double】", - "【direction】 : Alinhamento do eixo principal 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Propriedade alignment do Wrap", - "desc": [ - "【alignment】 : Alinhamento do eixo principal 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "Propriedade crossAxisAlignment do Wrap", - "desc": [ - "【crossAxisAlignment】 : Alinhamento do eixo cruzado 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "Propriedade textDirection do Wrap", - "desc": [ - "【textDirection】 : Direção do texto 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "Propriedade verticalDirection do Wrap", - "desc": [ - "【verticalDirection】 : Direção vertical 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ru_RU.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ru_RU.json deleted file mode 100644 index 8422284aa..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_ru_RU.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "Обёртка", - "info": "Может содержать несколько компонентов, которые располагаются в указанном направлении, легко управляет расстоянием между дочерними элементами, автоматически переносит строку при выходе за пределы. Имеет гибкие настройки выравнивания по основной и поперечной оси.", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Wrap", - "desc": [ - "【children】 : Список компонентов 【List】", - "【spacing】 : Расстояние между элементами по основной оси 【double】", - "【runSpacing】 : Расстояние между элементами по поперечной оси 【double】", - "【direction】 : Выравнивание по основной оси 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Свойство alignment Wrap", - "desc": [ - "【alignment】 : Выравнивание по основной оси 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "Свойство crossAxisAlignment Wrap", - "desc": [ - "【crossAxisAlignment】 : Выравнивание по поперечной оси 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "Свойство textDirection Wrap", - "desc": [ - "【textDirection】 : Направление текста 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "Свойство verticalDirection Wrap", - "desc": [ - "【verticalDirection】 : Вертикальное направление 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_zh-CN.json b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_zh-CN.json deleted file mode 100644 index 98459ac5b..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/desc_zh-CN.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 98, - "name": "Wrap", - "localName": "包裹布局", - "info": "可容纳多个组件,按照指定方向依次排布,可以很方便处理孩子的间距,当越界时可以自动换行。拥有主轴和交叉轴的对齐方式,比较灵活。", - "lever": 5, - "family": 3, - "linkIds": [ - 94, - 95 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Wrap的基础用法", - "desc": [ - "【children】 : 组件列表 【List】", - "【spacing】 : 主轴条目间距 【double】", - "【runSpacing】 : 交叉轴条目间距 【double】", - "【direction】 : 主轴对齐 【Axis】" - ] - }, - { - "file": "node2_alignment.dart", - "name": "Wrap的alignment属性", - "desc": [ - "【alignment】 : 主轴对齐 【WrapAlignment】" - ] - }, - { - "file": "node3_crossAxisAlignment.dart", - "name": "Wrap的crossAxisAlignment属性", - "desc": [ - "【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】" - ] - }, - { - "file": "node4_textDirection.dart", - "name": "Wrap的textDirection属性", - "desc": [ - "【textDirection】 : 文字方向 【TextDirection】" - ] - }, - { - "file": "node5_verticalDirection.dart", - "name": "Wrap的verticalDirection属性", - "desc": [ - "【verticalDirection】 : 竖直方向 【VerticalDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node1_base.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node1_base.dart deleted file mode 100644 index 9c725298c..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node1_base.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class DirectionWrap extends StatelessWidget { - const DirectionWrap({super.key}); - - @override - Widget build(BuildContext context) { - return Wrap( - children: Axis.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 100, - color: Colors.grey.withAlpha(33), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - Widget get yellowBox => Container( - color: Colors.yellow, - height: 30, - width: 50, - ); - - Widget get redBox => Container( - color: Colors.red, - height: 40, - width: 40, - ); - Widget get greenBox => Container( - color: Colors.green, - height: 40, - width: 20, - ); - Widget get blackBox => Container( - color: Colors.black, - height: 10, - width: 10, - ); - Widget get purpleBox => Container( - color: Colors.purple, - height: 20, - width: 20, - ); - Widget get orangeBox => Container( - color: Colors.orange, - height: 80, - width: 20, - ); - Widget get cyanBox => Container( - color: Colors.cyanAccent, - height: 10, - width: 20, - ); - - Widget _buildItem(mode) => Wrap( - direction: mode, - runSpacing: 10, - spacing: 10, - children: [ - yellowBox, redBox, greenBox, cyanBox, - blackBox, purpleBox, orangeBox, - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node2_alignment.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node2_alignment.dart deleted file mode 100644 index 0ed715cc3..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node2_alignment.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class WrapAlignmentWrap extends StatelessWidget { - const WrapAlignmentWrap({super.key}); - - @override - Widget build(BuildContext context) { - return Wrap( - children: WrapAlignment.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 100, - color: Colors.grey.withAlpha(88), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget get yellowBox => Container( - color: Colors.yellow, - height: 30, - width: 50, - ); - - Widget get redBox => Container( - color: Colors.red, - height: 40, - width: 40, - ); - Widget get greenBox => Container( - color: Colors.green, - height: 40, - width: 20, - ); - Widget get blackBox => Container( - color: Colors.black, - height: 10, - width: 10, - ); - Widget get purpleBox => Container( - color: Colors.purple, - height: 20, - width: 20, - ); - Widget get orangeBox => Container( - color: Colors.orange, - height: 80, - width: 20, - ); - Widget get cyanBox => Container( - color: Colors.cyanAccent, - height: 10, - width: 20, - ); - - Widget _buildItem(mode) => Wrap( - alignment: mode, - runSpacing: 10, - spacing: 10, - children: [ - yellowBox, redBox, - greenBox, cyanBox, - blackBox, purpleBox, - orangeBox, - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node3_crossAxisAlignment.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node3_crossAxisAlignment.dart deleted file mode 100644 index 58774bf02..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node3_crossAxisAlignment.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CrossAxisAlignmentWrap extends StatelessWidget { - const CrossAxisAlignmentWrap({super.key}); - - @override - Widget build(BuildContext context) { - return Wrap( - children: WrapCrossAlignment.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 100, - color: Colors.grey.withAlpha(88), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget get yellowBox => Container( - color: Colors.yellow, - height: 30, - width: 50, - ); - - Widget get redBox => Container( - color: Colors.red, - height: 40, - width: 40, - ); - Widget get greenBox => Container( - color: Colors.green, - height: 40, - width: 20, - ); - Widget get blackBox => Container( - color: Colors.black, - height: 10, - width: 10, - ); - Widget get purpleBox => Container( - color: Colors.purple, - height: 20, - width: 20, - ); - Widget get orangeBox => Container( - color: Colors.orange, - height: 80, - width: 20, - ); - Widget get cyanBox => Container( - color: Colors.cyanAccent, - height: 10, - width: 20, - ); - - Widget _buildItem(mode) => Wrap( - crossAxisAlignment: mode, - runSpacing: 10, - spacing: 10, - children: [ - yellowBox, redBox, - greenBox, cyanBox, - blackBox, purpleBox, - orangeBox, - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node4_textDirection.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node4_textDirection.dart deleted file mode 100644 index 2aba4b945..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node4_textDirection.dart +++ /dev/null @@ -1,71 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class TextDirectionWrap extends StatelessWidget { - const TextDirectionWrap({super.key}); - - @override - Widget build(BuildContext context) { - return Wrap( - children: TextDirection.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 100, - color: Colors.grey.withAlpha(88), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget get yellowBox => Container( - color: Colors.yellow, - height: 30, - width: 50, - ); - - Widget get redBox => Container( - color: Colors.red, - height: 40, - width: 40, - ); - Widget get greenBox => Container( - color: Colors.green, - height: 40, - width: 20, - ); - Widget get blackBox => Container( - color: Colors.black, - height: 10, - width: 10, - ); - Widget get purpleBox => Container( - color: Colors.purple, - height: 20, - width: 20, - ); - Widget get orangeBox => Container( - color: Colors.orange, - height: 80, - width: 20, - ); - Widget get cyanBox => Container( - color: Colors.cyanAccent, - height: 10, - width: 20, - ); - - Widget _buildItem(mode) => Wrap( - textDirection: mode, - runSpacing: 10, - spacing: 10, - children: [ - yellowBox, redBox, greenBox, cyanBox, - blackBox, purpleBox, orangeBox, - ], - ); -} diff --git a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node5_verticalDirection.dart b/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node5_verticalDirection.dart deleted file mode 100644 index 9c981319e..000000000 --- a/modules/widget_system/widgets/lib/MultiChildRenderObjectWidget/Wrap/node5_verticalDirection.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class VerticalDirectionWrap extends StatelessWidget { - const VerticalDirectionWrap({super.key}); - - @override - Widget build(BuildContext context) { - return Wrap( - children: VerticalDirection.values - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 160, - height: 100, - color: Colors.grey.withAlpha(88), - child: _buildItem(mode)), - Text(mode.toString().split('.')[1]) - ])) - .toList()); - } - - Widget get yellowBox => Container( - color: Colors.yellow, - height: 30, - width: 50, - ); - - Widget get redBox => Container( - color: Colors.red, - height: 40, - width: 40, - ); - Widget get greenBox => Container( - color: Colors.green, - height: 40, - width: 20, - ); - Widget get blackBox => Container( - color: Colors.black, - height: 10, - width: 10, - ); - Widget get purpleBox => Container( - color: Colors.purple, - height: 20, - width: 20, - ); - Widget get orangeBox => Container( - color: Colors.orange, - height: 80, - width: 20, - ); - Widget get cyanBox => Container( - color: Colors.cyanAccent, - height: 10, - width: 20, - ); - - Widget _buildItem(mode) => Wrap( - verticalDirection: mode, - direction: Axis.vertical, - runSpacing: 10, - spacing: 10, - children: [ - yellowBox, redBox, greenBox, cyanBox, - blackBox, purpleBox, orangeBox, - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_de_DE.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_de_DE.json deleted file mode 100644 index 8571c8e0f..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "Fehler-Widget", - "info": "Ein Widget zur Anzeige einer Fehlermeldung, roter Hintergrund mit gelber Schrift, wird häufig während der Entwicklung gesehen, wird jedoch normalerweise nicht verwendet.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ErrorWidget", - "desc": [ - "Parameter: Angezeigte Nachricht 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_en_US.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_en_US.json deleted file mode 100644 index 6f7a4a4d5..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "Error Component", - "info": "A component used to display an error message, with a red background and yellow text, often seen during development, generally not used.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ErrorWidget", - "desc": [ - "Parameters: Display Message 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_es_ES.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_es_ES.json deleted file mode 100644 index d94a2a8d6..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "Widget de Error", - "info": "Un componente utilizado para mostrar un mensaje de error, con fondo rojo y letras amarillas, se ve con frecuencia durante el desarrollo y generalmente no se utiliza.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ErrorWidget", - "desc": [ - "Parámetro de entrada: mensaje a mostrar 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_fr_FR.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_fr_FR.json deleted file mode 100644 index 7ad1db599..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "Widget d'erreur", - "info": "Un widget utilisé pour afficher un message d'erreur, fond rouge avec texte jaune, souvent vu pendant le développement, généralement non utilisé.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'ErrorWidget", - "desc": [ - "Paramètre : message à afficher 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_it_IT.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_it_IT.json deleted file mode 100644 index cd33392c7..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "Widget di Errore", - "info": "Componente utilizzato per visualizzare un messaggio di errore, sfondo rosso con testo giallo, spesso visto durante lo sviluppo, generalmente non utilizzato.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di ErrorWidget", - "desc": [ - "Parametri : Messaggio da visualizzare 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ja_JP.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ja_JP.json deleted file mode 100644 index 08edc5075..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "エラーウィジェット", - "info": "エラーメッセージを表示するためのコンポーネントです。赤い背景に黄色い文字で表示され、開発中によく見かけますが、通常は使用しません。", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ErrorWidgetの基本使用", - "desc": [ - "引数 : 表示メッセージ 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ko_KR.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ko_KR.json deleted file mode 100644 index 0e7f2aad5..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "에러 위젯", - "info": "에러 메시지를 표시하는 위젯으로, 빨간 배경에 노란 글씨로 표시되며, 개발 과정에서 자주 보이지만 일반적으로 사용되지 않습니다.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ErrorWidget 기본 사용법", - "desc": [ - "입력 매개변수 : 표시할 정보 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_pt_PT.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_pt_PT.json deleted file mode 100644 index eabf63283..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "Componente de Erro", - "info": "Componente usado para exibir uma mensagem de erro, com fundo vermelho e texto amarelo, frequentemente visto durante o desenvolvimento, geralmente não é utilizado.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ErrorWidget", - "desc": [ - "Parâmetro: Mensagem a ser exibida 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ru_RU.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ru_RU.json deleted file mode 100644 index a17ca651d..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "Виджет ошибки", - "info": "Компонент для отображения сообщения об ошибке, красный фон с желтым текстом, часто встречается в процессе разработки, обычно не используется.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ErrorWidget", - "desc": [ - "Параметры: Отображаемое сообщение 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_zh-CN.json b/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_zh-CN.json deleted file mode 100644 index f96ff1acf..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 197, - "name": "ErrorWidget", - "localName": "错误组件", - "info": "用于显示一个错误信息的组件,红底黄字,在开发过程中经常看到,一般不使用。", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ErrorWidget基本使用", - "desc": [ - "入参 : 显示信息 【Object】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ErrorWidget/node1_base.dart b/modules/widget_system/widgets/lib/Other/ErrorWidget/node1_base.dart deleted file mode 100644 index 55c38f3f9..000000000 --- a/modules/widget_system/widgets/lib/Other/ErrorWidget/node1_base.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class ErrorWidgetDemo extends StatelessWidget { - const ErrorWidgetDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ErrorWidget( - 'I am Error ErrorWidget\n' - 'But now, there has no error.' - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_de_DE.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_de_DE.json deleted file mode 100644 index 106ca6ea6..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_de_DE.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "Listenradansicht", - "info": "Ein Ansichtsfenster, das eine Liste von Kindern in einem zylindrischen Rad anzeigt. Es ist die zugrunde liegende Abhängigkeit von ListWheelScrollView und CupertinoPicker", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einfache Verwendung von ListWheelViewport", - "desc": [ - "【itemExtent】 : Axiale Item-Größe 【double】", - "【offset】 : Ansichtsfenster-Versatz 【ViewportOffset】", - "【childDelegate】 : Kinderdelegat-Konstruktor 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "Perspektivische Effekte von ListWheelViewport", - "desc": [ - "【perspective】 : Perspektivparameter 【double】", - "【squeeze】 : Quetschwert 【double】", - "【diameterRatio】 : Durchmesserverhältnis 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "Vergrößerung von ListWheelViewport", - "desc": [ - "【useMagnifier】 : Ob vergrößert wird 【bool】", - "【magnification】 : Vergrößerungsverhältnis 【double】", - "【clipBehavior】 : Schneidverhalten 【Clip】", - "【renderChildrenOutsideViewport】 : Ob außerhalb des Sichtfelds gerendert wird 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "Versatz und Transparenz", - "desc": [ - "【offAxisFraction】 : Achsenzentrum-Versatzverhältnis 【double】", - "【overAndUnderCenterOpacity】 : Transparenz außerhalb des Vergrößerers 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_en_US.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_en_US.json deleted file mode 100644 index ce02c9fd0..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_en_US.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "List Wheel Viewport", - "info": "A viewport that displays a list of children on a cylindrical wheel, which is the underlying dependency of ListWheelScrollView and CupertinoPicker", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ListWheelViewport", - "desc": [ - "【itemExtent】 : Axial item size 【double】", - "【offset】 : Viewport offset 【ViewportOffset】", - "【childDelegate】 : Child delegate constructor 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "Perspective Effect of ListWheelViewport", - "desc": [ - "【perspective】 : Perspective parameter 【double】", - "【squeeze】 : Squeeze value 【double】", - "【diameterRatio】 : Diameter ratio 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "Magnification of ListWheelViewport", - "desc": [ - "【useMagnifier】 : Whether to magnify 【bool】", - "【magnification】 : Magnification ratio 【double】", - "【clipBehavior】 : Clip behavior 【Clip】", - "【renderChildrenOutsideViewport】 : Whether to render children outside the viewport 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "Offset and Opacity", - "desc": [ - "【offAxisFraction】 : Axis center offset ratio 【double】", - "【overAndUnderCenterOpacity】 : Opacity outside the magnifier 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_es_ES.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_es_ES.json deleted file mode 100644 index d90a4dcb6..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_es_ES.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "Vista de rueda de lista", - "info": "Una vista que muestra una lista de hijos en una rueda cilíndrica, es la dependencia subyacente de ListWheelScrollView y CupertinoPicker", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso simple de ListWheelViewport", - "desc": [ - "【itemExtent】 : Tamaño del ítem en el eje 【double】", - "【offset】 : Desplazamiento de la vista 【ViewportOffset】", - "【childDelegate】 : Delegado de construcción de hijos 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "Efecto de perspectiva en ListWheelViewport", - "desc": [ - "【perspective】 : Parámetro de perspectiva 【double】", - "【squeeze】 : Valor de compresión 【double】", - "【diameterRatio】 : Relación de diámetro 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "Ampliación en ListWheelViewport", - "desc": [ - "【useMagnifier】 : Si se amplía 【bool】", - "【magnification】 : Proporción de ampliación 【double】", - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【renderChildrenOutsideViewport】 : Si se renderiza fuera de la vista 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "Desplazamiento y opacidad", - "desc": [ - "【offAxisFraction】 : Relación de desplazamiento del centro del eje 【double】", - "【overAndUnderCenterOpacity】 : Opacidad fuera del amplificador 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_fr_FR.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_fr_FR.json deleted file mode 100644 index 21e6c37f6..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_fr_FR.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "Vue de roue de liste", - "info": "Une vue qui affiche une liste d'enfants sur une roue cylindrique, dépendance sous-jacente de ListWheelScrollView et CupertinoPicker", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation simple de ListWheelViewport", - "desc": [ - "【itemExtent】 : Taille de l'item axial 【double】", - "【offset】 : Décalage de la vue 【ViewportOffset】", - "【childDelegate】 : Constructeur de délégué enfant 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "Effet de perspective de ListWheelViewport", - "desc": [ - "【perspective】 : Paramètre de perspective 【double】", - "【squeeze】 : Valeur de compression 【double】", - "【diameterRatio】 : Ratio de diamètre 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "Agrandissement de ListWheelViewport", - "desc": [ - "【useMagnifier】 : Agrandir ou non 【bool】", - "【magnification】 : Taux d'agrandissement 【double】", - "【clipBehavior】 : Comportement de découpage 【Clip】", - "【renderChildrenOutsideViewport】 : Rendu hors de la vue 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "Décalage et opacité", - "desc": [ - "【offAxisFraction】 : Ratio de décalage du centre de l'axe 【double】", - "【overAndUnderCenterOpacity】 : Opacité en dehors de l'amplificateur 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_it_IT.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_it_IT.json deleted file mode 100644 index aebbbc3fb..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_it_IT.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "Vista della ruota di scorrimento", - "info": "Una vista che visualizza un elenco di elementi in una ruota cilindrica, è la dipendenza sottostante di ListWheelScrollView e CupertinoPicker", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso semplice di ListWheelViewport", - "desc": [ - "【itemExtent】 : Dimensione dell'elemento lungo l'asse 【double】", - "【offset】 : Offset della vista 【ViewportOffset】", - "【childDelegate】 : Delegato di costruzione dei figli 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "Effetto prospettico di ListWheelViewport", - "desc": [ - "【perspective】 : Parametro di prospettiva 【double】", - "【squeeze】 : Valore di compressione 【double】", - "【diameterRatio】 : Rapporto del diametro 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "Ingrandimento di ListWheelViewport", - "desc": [ - "【useMagnifier】 : Se ingrandire 【bool】", - "【magnification】 : Rapporto di ingrandimento 【double】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【renderChildrenOutsideViewport】 : Se renderizzare i figli fuori dalla vista 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "Offset e trasparenza", - "desc": [ - "【offAxisFraction】 : Rapporto di offset del centro dell'asse 【double】", - "【overAndUnderCenterOpacity】 : Trasparenza fuori dall'ingranditore 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ja_JP.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ja_JP.json deleted file mode 100644 index ac889c042..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ja_JP.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "リストホイールビューポート", - "info": "子リストを円柱状のホイール上に表示するビューポートで、ListWheelScrollView、CupertinoPickerの基盤となる依存関係です", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListWheelViewport の簡単な使用", - "desc": [ - "【itemExtent】 : 軸方向のアイテムサイズ 【double】", - "【offset】 : ビューポートのオフセット 【ViewportOffset】", - "【childDelegate】 : 子デリゲートコンストラクタ 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "ListWheelViewport の遠近効果", - "desc": [ - "【perspective】 : 遠近パラメータ 【double】", - "【squeeze】 : 圧縮値 【double】", - "【diameterRatio】 : 直径比率 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "ListWheelViewport の拡大", - "desc": [ - "【useMagnifier】 : 拡大するかどうか 【bool】", - "【magnification】 : 拡大比率 【double】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【renderChildrenOutsideViewport】 : 視野外の子をレンダリングするか 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "オフセットと透明度", - "desc": [ - "【offAxisFraction】 : 軸中心のオフセット比率 【double】", - "【overAndUnderCenterOpacity】 : 拡大器外の透明度 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ko_KR.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ko_KR.json deleted file mode 100644 index 8e74bc4c2..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ko_KR.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "리스트 휠 뷰포트", - "info": "자식 리스트를 원통형 휠에 표시하는 뷰포트로, ListWheelScrollView, CupertinoPicker의 기반이 됨", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListWheelViewport 기본 사용법", - "desc": [ - "【itemExtent】 : 축 방향 아이템 크기 【double】", - "【offset】 : 뷰포트 오프셋 【ViewportOffset】", - "【childDelegate】 : 자식 위임 생성자 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "ListWheelViewport 원근 효과", - "desc": [ - "【perspective】 : 원근 매개변수 【double】", - "【squeeze】 : 압축 값 【double】", - "【diameterRatio】 : 직경 비율 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "ListWheelViewport 확대", - "desc": [ - "【useMagnifier】 : 확대 여부 【bool】", - "【magnification】 : 확대 비율 【double】", - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【renderChildrenOutsideViewport】 : 시야 밖 렌더링 여부 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "오프셋과 투명도", - "desc": [ - "【offAxisFraction】 : 축 중심 오프셋 비율 【double】", - "【overAndUnderCenterOpacity】 : 확대기 외부 투명도 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_pt_PT.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_pt_PT.json deleted file mode 100644 index 5063eb01a..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_pt_PT.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "Porta de Roda de Lista", - "info": "Uma porta que exibe uma lista de filhos em uma roda cilíndrica, é a dependência subjacente de ListWheelScrollView e CupertinoPicker", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Simples de ListWheelViewport", - "desc": [ - "【itemExtent】 : Tamanho axial do item 【double】", - "【offset】 : Deslocamento da porta 【ViewportOffset】", - "【childDelegate】 : Construtor do delegado de filhos 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "Efeito de Perspectiva de ListWheelViewport", - "desc": [ - "【perspective】 : Parâmetro de perspectiva 【double】", - "【squeeze】 : Valor de compressão 【double】", - "【diameterRatio】 : Razão de diâmetro 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "Ampliação de ListWheelViewport", - "desc": [ - "【useMagnifier】 : Se amplia 【bool】", - "【magnification】 : Proporção de ampliação 【double】", - "【clipBehavior】 : Comportamento de corte 【Clip】", - "【renderChildrenOutsideViewport】 : Se renderiza fora do campo de visão 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "Deslocamento e Transparência", - "desc": [ - "【offAxisFraction】 : Razão de deslocamento do centro do eixo 【double】", - "【overAndUnderCenterOpacity】 : Transparência fora do ampliador 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ru_RU.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ru_RU.json deleted file mode 100644 index 8b6bb345b..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_ru_RU.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "Вид списка колеса прокрутки", - "info": "Вид, который отображает список детей в виде цилиндрического колеса прокрутки, является базовой зависимостью для ListWheelScrollView и CupertinoPicker", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Простое использование ListWheelViewport", - "desc": [ - "【itemExtent】 : Размер элемента по оси 【double】", - "【offset】 : Смещение вида 【ViewportOffset】", - "【childDelegate】 : Делегат для создания детей 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "Эффект перспективы ListWheelViewport", - "desc": [ - "【perspective】 : Параметр перспективы 【double】", - "【squeeze】 : Значение сжатия 【double】", - "【diameterRatio】 : Коэффициент диаметра 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "Увеличение ListWheelViewport", - "desc": [ - "【useMagnifier】 : Использовать ли увеличение 【bool】", - "【magnification】 : Коэффициент увеличения 【double】", - "【clipBehavior】 : Поведение обрезки 【Clip】", - "【renderChildrenOutsideViewport】 : Рендерить ли детей за пределами вида 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "Смещение и прозрачность", - "desc": [ - "【offAxisFraction】 : Отношение смещения от центра оси 【double】", - "【overAndUnderCenterOpacity】 : Прозрачность за пределами увеличителя 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_zh-CN.json b/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_zh-CN.json deleted file mode 100644 index fb86f4ea3..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/desc_zh-CN.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 291, - "name": "ListWheelViewport", - "localName": "列表滚轮视口", - "info": "一个将孩子列表显示在柱状滚轮上的视口,是 ListWheelScrollView、CupertinoPicker 的底层依赖", - "lever": 4, - "family": 6, - "linkIds": [ - 179, - 139, - 137, - 253 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListWheelViewport 简单使用", - "desc": [ - "【itemExtent】 : 轴向item尺寸 【double】", - "【offset】 : 视口偏移 【ViewportOffset】", - "【childDelegate】 : 孩子代理构造器 【ListWheelChildDelegate】" - ] - }, - { - "file": "node2_perspective.dart", - "name": "ListWheelViewport 透视效果", - "desc": [ - "【perspective】 : 透视参数 【double】", - "【squeeze】 : 挤压值 【double】", - "【diameterRatio】 : 直径分率 【double】" - ] - }, - { - "file": "node3_magnifier.dart", - "name": "ListWheelViewport 放大", - "desc": [ - "【useMagnifier】 : 是否放大 【bool】", - "【magnification】 : 放大比例 【double】", - "【clipBehavior】 : 剪裁行为 【Clip】", - "【renderChildrenOutsideViewport】 : 出视野是否渲染 【bool】" - ] - }, - { - "file": "node4_opacity.dart", - "name": "偏移和透明度", - "desc": [ - "【offAxisFraction】 : 轴中心偏移比 【double】", - "【overAndUnderCenterOpacity】 : 放大器之外的透明度 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/node1_base.dart b/modules/widget_system/widgets/lib/Other/ListWheelViewport/node1_base.dart deleted file mode 100644 index 1aeb4391f..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/node1_base.dart +++ /dev/null @@ -1,65 +0,0 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ListWheelViewportDemo extends StatelessWidget { - const ListWheelViewportDemo({super.key}); - - List get data => [ - Colors.blue[50]!, - Colors.blue[100]!, - Colors.blue[200]!, - Colors.blue[300]!, - Colors.blue[400]!, - Colors.blue[500]!, - Colors.blue[600]!, - Colors.blue[700]!, - Colors.blue[800]!, - Colors.blue[900]!, - Colors.blue[800]!, - Colors.blue[700]!, - Colors.blue[600]!, - Colors.blue[500]!, - Colors.blue[400]!, - Colors.blue[300]!, - Colors.blue[200]!, - Colors.blue[100]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 250, - width: 320, - child: Scrollable( - axisDirection: AxisDirection.down, - physics: const BouncingScrollPhysics(), - dragStartBehavior: DragStartBehavior.start, - viewportBuilder: (ctx, position) => ListWheelViewport( - itemExtent: 100, - offset: position, - childDelegate: ListWheelChildLoopingListDelegate( - children: data.map((e) => _buildItem(e)).toList()), - )), - ); - } - - Widget _buildItem(Color color) => Container( - alignment: Alignment.center, - color: color, - child: Text(colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ), - ])), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/node2_perspective.dart b/modules/widget_system/widgets/lib/Other/ListWheelViewport/node2_perspective.dart deleted file mode 100644 index ea8730168..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/node2_perspective.dart +++ /dev/null @@ -1,68 +0,0 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ListWheelViewportDemo2 extends StatelessWidget { - const ListWheelViewportDemo2({super.key}); - - List get data => [ - Colors.blue[50]!, - Colors.blue[100]!, - Colors.blue[200]!, - Colors.blue[300]!, - Colors.blue[400]!, - Colors.blue[500]!, - Colors.blue[600]!, - Colors.blue[700]!, - Colors.blue[800]!, - Colors.blue[900]!, - Colors.blue[800]!, - Colors.blue[700]!, - Colors.blue[600]!, - Colors.blue[500]!, - Colors.blue[400]!, - Colors.blue[300]!, - Colors.blue[200]!, - Colors.blue[100]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 250, - width: 320, - child: Scrollable( - axisDirection: AxisDirection.down, - physics: const BouncingScrollPhysics(), - dragStartBehavior: DragStartBehavior.start, - viewportBuilder: (ctx, position) => ListWheelViewport( - perspective: 0.008, - squeeze: 1, - diameterRatio: 2, - itemExtent: 50, - offset: position, - childDelegate: ListWheelChildLoopingListDelegate( - children: data.map((e) => _buildItem(e)).toList()), - )), - ); - } - - Widget _buildItem(Color color) => Container( - alignment: Alignment.center, - color: color, - child: Text(colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ])), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/node3_magnifier.dart b/modules/widget_system/widgets/lib/Other/ListWheelViewport/node3_magnifier.dart deleted file mode 100644 index 7b98d643b..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/node3_magnifier.dart +++ /dev/null @@ -1,70 +0,0 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ListWheelViewportDemo3 extends StatelessWidget { - const ListWheelViewportDemo3({super.key}); - - List get data => [ - Colors.blue[50]!, - Colors.blue[100]!, - Colors.blue[200]!, - Colors.blue[300]!, - Colors.blue[400]!, - Colors.blue[500]!, - Colors.blue[600]!, - Colors.blue[700]!, - Colors.blue[800]!, - Colors.blue[900]!, - Colors.blue[800]!, - Colors.blue[700]!, - Colors.blue[600]!, - Colors.blue[500]!, - Colors.blue[400]!, - Colors.blue[300]!, - Colors.blue[200]!, - Colors.blue[100]!, - ]; - - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 250, - width: 320, - // color: Colors.red, - child: Scrollable( - axisDirection: AxisDirection.down, - physics: const BouncingScrollPhysics(), - dragStartBehavior: DragStartBehavior.start, - viewportBuilder: (ctx, position) => ListWheelViewport( - perspective: 0.008, - squeeze: 1, - diameterRatio: 2, - itemExtent: 50, - useMagnifier: true, - magnification: 2, - renderChildrenOutsideViewport: true, - clipBehavior: Clip.none, - offset: position, - childDelegate: ListWheelChildLoopingListDelegate( - children: data.map((e) => _buildItem(e)).toList()), - )), - ); - } - - Widget _buildItem(Color color) => Container( - alignment: Alignment.center, - color: color, - child: Text(colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ])), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Other/ListWheelViewport/node4_opacity.dart b/modules/widget_system/widgets/lib/Other/ListWheelViewport/node4_opacity.dart deleted file mode 100644 index 098261a8a..000000000 --- a/modules/widget_system/widgets/lib/Other/ListWheelViewport/node4_opacity.dart +++ /dev/null @@ -1,71 +0,0 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ListWheelViewportDemo4 extends StatelessWidget { - const ListWheelViewportDemo4({super.key}); - - List get data => [ - Colors.blue[50]!, - Colors.blue[100]!, - Colors.blue[200]!, - Colors.blue[300]!, - Colors.blue[400]!, - Colors.blue[500]!, - Colors.blue[600]!, - Colors.blue[700]!, - Colors.blue[800]!, - Colors.blue[900]!, - Colors.blue[800]!, - Colors.blue[700]!, - Colors.blue[600]!, - Colors.blue[500]!, - Colors.blue[400]!, - Colors.blue[300]!, - Colors.blue[200]!, - Colors.blue[100]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 250, - width: 320, - // color: Colors.red, - child: Scrollable( - axisDirection: AxisDirection.down, - physics: const BouncingScrollPhysics(), - dragStartBehavior: DragStartBehavior.start, - viewportBuilder: (ctx, position) => ListWheelViewport( - perspective: 0.008, - squeeze: 1, - diameterRatio: 2, - offAxisFraction: 0.2, - overAndUnderCenterOpacity: 0.4, - itemExtent: 50, - offset: position, - childDelegate: ListWheelChildLoopingListDelegate( - children: data.map((e) => _buildItem(e)).toList()), - )), - ); - } - - Widget _buildItem(Color color) => Container( - alignment: Alignment.center, - color: color, - child: Text(colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ])), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_de_DE.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_de_DE.json deleted file mode 100644 index b54faf2e7..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "Leistungsüberlagerung", - "info": "Ermöglicht das einfache Aktivieren von zwei Leistungsüberwachungsdiagrammen, um die Änderungen der Bildrate beim Aktualisieren der Oberfläche zu verfolgen.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PerformanceOverlay", - "desc": [ - "Mit PerformanceOverlay.allEnabled können alle Überwachungsoptionen gestartet werden." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_en_US.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_en_US.json deleted file mode 100644 index 5c7aa36a1..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "Performance Overlay", - "info": "It is very convenient to enable two bar charts for performance monitoring, making it easy to see the changes in frame rate when refreshing the interface.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PerformanceOverlay", - "desc": [ - "Using PerformanceOverlay.allEnabled can start all monitoring items." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_es_ES.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_es_ES.json deleted file mode 100644 index 5af74d604..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "Superposición de Rendimiento", - "info": "Permite habilitar muy convenientemente dos gráficos de barras para monitorear el rendimiento, facilitando la visualización de los cambios en la tasa de cuadros al actualizar la interfaz.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de PerformanceOverlay", - "desc": [ - "Usar PerformanceOverlay.allEnabled permite iniciar todos los elementos de monitoreo." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_fr_FR.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_fr_FR.json deleted file mode 100644 index c60ad9270..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "Superposition de Performance", - "info": "Permet d'activer très facilement deux graphiques de surveillance des performances, facilitant la visualisation des variations de fréquence d'images lors du rafraîchissement de l'interface.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PerformanceOverlay", - "desc": [ - "Utiliser PerformanceOverlay.allEnabled pour démarrer tous les éléments de surveillance." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_it_IT.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_it_IT.json deleted file mode 100644 index f95c46843..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "Sovrapposizione delle Prestazioni", - "info": "Può attivare molto comodamente due grafici a barre per il monitoraggio delle prestazioni, facilitando la visualizzazione delle variazioni della frequenza dei fotogrammi durante l'aggiornamento dell'interfaccia.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di PerformanceOverlay", - "desc": [ - "Utilizzando PerformanceOverlay.allEnabled è possibile avviare tutti gli elementi di monitoraggio." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ja_JP.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ja_JP.json deleted file mode 100644 index 9523d59b6..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "パフォーマンスオーバーレイ", - "info": "パフォーマンスモニタリングの2つの柱グラフを非常に簡単に有効にでき、インターフェースのリフレッシュ時のフレームレートの変化を簡単に確認できます。", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PerformanceOverlayの基本使用", - "desc": [ - "PerformanceOverlay.allEnabledを使用してすべての監視項目を開始できます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ko_KR.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ko_KR.json deleted file mode 100644 index 6d4084ca3..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "성능 오버레이", - "info": "성능 모니터링을 매우 편리하게 시작할 수 있는 두 개의 막대 그래프로, 화면을 새로 고칠 때 프레임 속도 변화를 쉽게 확인할 수 있습니다.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PerformanceOverlay 기본 사용", - "desc": [ - "PerformanceOverlay.allEnabled를 사용하여 모든 모니터링 항목을 시작할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_pt_PT.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_pt_PT.json deleted file mode 100644 index e17a52366..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "Camada de Desempenho", - "info": "Permite ativar de forma muito conveniente dois gráficos de barras para monitorizar o desempenho, facilitando a visualização das mudanças na taxa de frames ao atualizar a interface.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do PerformanceOverlay", - "desc": [ - "Usar PerformanceOverlay.allEnabled permite iniciar todos os itens de monitorização." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ru_RU.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ru_RU.json deleted file mode 100644 index 85386e6a8..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "Наложение производительности", - "info": "Очень удобно включить два столбчатых графика для мониторинга производительности, чтобы легко отслеживать изменения частоты кадров при обновлении интерфейса.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PerformanceOverlay", - "desc": [ - "Использование PerformanceOverlay.allEnabled позволяет начать все элементы мониторинга." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_zh-CN.json b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_zh-CN.json deleted file mode 100644 index 8618b7b89..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 312, - "name": "PerformanceOverlay", - "localName": "性能浮层", - "info": "可以非常方便地开启性能监测的两个柱图,方便查看刷新界面时帧率的变化情况。", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PerformanceOverlay基本使用", - "desc": [ - "使用PerformanceOverlay.allEnabled可以开始所有的监测项。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/node1_base.dart b/modules/widget_system/widgets/lib/Other/PerformanceOverlay/node1_base.dart deleted file mode 100644 index 831fb7fad..000000000 --- a/modules/widget_system/widgets/lib/Other/PerformanceOverlay/node1_base.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class PerformanceOverlayDemo extends StatelessWidget { - const PerformanceOverlayDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return PerformanceOverlay.allEnabled( - - ); - } -} - diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_de_DE.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_de_DE.json deleted file mode 100644 index 2e357466f..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "Originalbild", - "info": "Ist die Kernkomponente zur Implementierung der Image-Komponente, kann das Image der UI anzeigen, die grundlegenden Eigenschaften sind identisch mit Image, wird selten allein verwendet.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RawImage", - "desc": [ - "【image】 : Bild 【ui.Image】", - "【width】 : Breite 【int】", - "【height】: Höhe 【int】", - "【isAntiAlias】: Anti-Aliasing 【bool】", - "【filterQuality】: Filterqualität 【FilterQuality】", - "Viele Eigenschaften sind identisch mit Image, siehe dort." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_en_US.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_en_US.json deleted file mode 100644 index 46bb1bf66..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "Original Image", - "info": "It is the core component that implements the Image component, can display the ui.Image, and has the same basic properties as Image. It is rarely used alone.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RawImage", - "desc": [ - "【image】: Image 【ui.Image】", - "【width】: Width 【int】", - "【height】: Height 【int】", - "【isAntiAlias】: Whether to anti-alias 【bool】", - "【filterQuality】: Filter quality 【FilterQuality】", - "Many properties are the same as Image, see details there." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_es_ES.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_es_ES.json deleted file mode 100644 index 8ea04832d..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "Imagen Original", - "info": "Es el componente central que implementa el componente Image, puede mostrar la Image de la interfaz de usuario, las propiedades básicas son las mismas que Image, rara vez se usa por separado.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RawImage", - "desc": [ - "【image】: Imagen 【ui.Image】", - "【width】: Ancho 【int】", - "【height】: Alto 【int】", - "【isAntiAlias】: Si es antialiasing 【bool】", - "【filterQuality】: Calidad de filtro 【FilterQuality】", - "Muchas propiedades son las mismas que Image, consulte para más detalles." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_fr_FR.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_fr_FR.json deleted file mode 100644 index 7db141988..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "Image originale", - "info": "C'est le composant central pour implémenter le composant Image, capable d'afficher une image UI. Ses propriétés de base sont similaires à celles de Image, et il est rarement utilisé seul.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RawImage", - "desc": [ - "【image】 : Image 【ui.Image】", - "【width】 : Largeur 【int】", - "【height】: Hauteur 【int】", - "【isAntiAlias】: Anti-crénelage 【bool】", - "【filterQuality】: Qualité de filtrage 【FilterQuality】", - "De nombreuses propriétés sont similaires à Image, voir les détails." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_it_IT.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_it_IT.json deleted file mode 100644 index 91c6ac671..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "Immagine originale", - "info": "È il componente principale per implementare il componente Image, può visualizzare l'Image dell'interfaccia utente, le proprietà di base sono le stesse di Image, generalmente raramente usato da solo.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di RawImage", - "desc": [ - "【image】 : Immagine 【ui.Image】", - "【width】 : Larghezza 【int】", - "【height】: Altezza 【int】", - "【isAntiAlias】: Anti-alias 【bool】", - "【filterQuality】: Qualità del filtro 【FilterQuality】", - "Molte proprietà sono le stesse di Image, vedi dettagli." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_ja_JP.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_ja_JP.json deleted file mode 100644 index aae1a631b..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "元画像", - "info": "Imageコンポーネントのコアコンポーネントであり、uiのImageを表示できます。基本的な属性はImageと同じで、単独で使用されることはほとんどありません。", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawImageの基本使用", - "desc": [ - "【image】 : 画像 【ui.Image】", - "【width】 : 幅 【int】", - "【height】: 高さ 【int】", - "【isAntiAlias】: アンチエイリアスかどうか 【bool】", - "【filterQuality】: フィルタ品質 【FilterQuality】", - "多くの属性はImageと同じです。詳細はそちらを参照してください。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_ko_KR.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_ko_KR.json deleted file mode 100644 index b4b0dd6c4..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "원본 이미지", - "info": "Image 컴포넌트를 구현하는 핵심 컴포넌트로, ui의 Image를 표시할 수 있으며, 기본 속성은 Image와 동일하며, 일반적으로 단독으로 사용되지 않습니다.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawImage 기본 사용", - "desc": [ - "【image】 : 이미지 【ui.Image】", - "【width】 : 너비 【int】", - "【height】: 높이 【int】", - "【isAntiAlias】: 안티앨리어싱 여부 【bool】", - "【filterQuality】: 필터 품질 【FilterQuality】", - "많은 속성이 Image와 동일하니, 자세한 내용은 해당 항목을 참조하세요." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_pt_PT.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_pt_PT.json deleted file mode 100644 index bb06bf432..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "Imagem Original", - "info": "É o componente central que implementa o componente Image, pode exibir a Image da ui, as propriedades básicas são as mesmas que a Image, raramente é usado sozinho.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RawImage", - "desc": [ - "【image】 : Imagem 【ui.Image】", - "【width】 : Largura 【int】", - "【height】: Altura 【int】", - "【isAntiAlias】: Anti-aliasing 【bool】", - "【filterQuality】: Qualidade do Filtro 【FilterQuality】", - "Muitas propriedades são as mesmas que a Image, consulte para mais detalhes." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_ru_RU.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_ru_RU.json deleted file mode 100644 index 062b9d798..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "Исходное изображение", - "info": "Это основной компонент, реализующий компонент Image, который может отображать изображение UI. Основные свойства такие же, как у Image, и он редко используется отдельно.", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RawImage", - "desc": [ - "【image】 : изображение 【ui.Image】", - "【width】 : ширина 【int】", - "【height】: высота 【int】", - "【isAntiAlias】: сглаживание 【bool】", - "【filterQuality】: качество фильтрации 【FilterQuality】", - "Многие свойства такие же, как у Image, подробнее см. в нем." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/desc_zh-CN.json b/modules/widget_system/widgets/lib/Other/RawImage/desc_zh-CN.json deleted file mode 100644 index b4b220896..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 313, - "name": "RawImage", - "localName": "原图片", - "info": "是实现Image组件的核心组件,可以显示ui的Image,基本属性同Image,一般很少单独使用。", - "lever": 2, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawImage基本使用", - "desc": [ - "【image】 : 图片 【ui.Image】", - "【width】 : 宽 【int】", - "【height】: 高 【int】", - "【isAntiAlias】: 是否抗锯齿 【bool】", - "【filterQuality】: 过滤质量 【FilterQuality】", - "很多属性同Image,详见之." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RawImage/node1_base.dart b/modules/widget_system/widgets/lib/Other/RawImage/node1_base.dart deleted file mode 100644 index 6c6512e6e..000000000 --- a/modules/widget_system/widgets/lib/Other/RawImage/node1_base.dart +++ /dev/null @@ -1,82 +0,0 @@ -import 'dart:async'; -import 'dart:typed_data'; -import 'dart:ui' as ui; - -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - -class RawImageDemo extends StatefulWidget { - const RawImageDemo({Key? key}) : super(key: key); - - @override - _RawImageDemoState createState() => _RawImageDemoState(); -} - -class _RawImageDemoState extends State { - ui.Image? _image; - - @override - void initState() { - super.initState(); - _loadImageFromAssets('assets/images/icon_head.webp'); - } - - @override - Widget build(BuildContext context) { - if (_image == null) { - return const SizedBox( - width: 80, - height: 80, - ); - } - - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Column( - mainAxisSize: MainAxisSize.min, - children: [ - RawImage( - image: _image, - width: 150, - height: 150, - isAntiAlias: true, - filterQuality: FilterQuality.high, - ), - const Text('isAntiAlias: true'), - const Text('FilterQuality.high') - ], - ), - Column( - mainAxisSize: MainAxisSize.min, - children: [ - RawImage( - image: _image, - width: 150, - height: 150, - isAntiAlias: false, - ), - const Text('isAntiAlias: false'), - const Text('FilterQuality.low') - ], - ), - ], - ); - } - - void _loadImageFromAssets(String name) async { - _image = await loadImageFromAssets(name); - setState(() {}); - } - - //读取 assets 中的图片 - Future loadImageFromAssets(String path) async { - ByteData data = await rootBundle.load(path); - List bytes = data.buffer.asUint8List(data.offsetInBytes, data.lengthInBytes); - return decodeImageFromList(Uint8List.fromList(bytes)); - } -} diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_de_DE.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_de_DE.json deleted file mode 100644 index 93d8f92c7..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "Stammkomponente", - "info": "Brücke zwischen RenderObject und Element-Baum.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in RenderObjectToWidgetAdapter", - "desc": [ - "【container】 : Rendering-Objekt 【RenderObjectWithChildMixin】", - "【child】 : Unterkomponente 【Widget】", - "【debugShortDescription】 : Debug-Kurzbeschreibung 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_en_US.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_en_US.json deleted file mode 100644 index ef938e9ea..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "Root Component", - "info": "The bridge between RenderObject and Element tree.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to RenderObjectToWidgetAdapter", - "desc": [ - "【container】 : Render object 【RenderObjectWithChildMixin】", - "【child】 : Child component 【Widget】", - "【debugShortDescription】 : Debugging introduction 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_es_ES.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_es_ES.json deleted file mode 100644 index 9120b7422..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "Componente raíz", - "info": "Puente entre RenderObject y el árbol de Element.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a RenderObjectToWidgetAdapter", - "desc": [ - "【container】 : Objeto de renderizado 【RenderObjectWithChildMixin】", - "【child】 : Componente hijo 【Widget】", - "【debugShortDescription】 : Descripción corta de depuración 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_fr_FR.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_fr_FR.json deleted file mode 100644 index ea95a3db6..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "Composant racine", - "info": "Pont entre RenderObject et l'arbre Element.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à RenderObjectToWidgetAdapter", - "desc": [ - "【container】 : objet de rendu 【RenderObjectWithChildMixin】", - "【child】 : composant enfant 【Widget】", - "【debugShortDescription】 : description de débogage 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_it_IT.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_it_IT.json deleted file mode 100644 index a0e27e510..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "Componente radice", - "info": "Ponte tra RenderObject e l'albero degli Element.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a RenderObjectToWidgetAdapter", - "desc": [ - "【container】 : Oggetto di rendering 【RenderObjectWithChildMixin】", - "【child】 : Componente figlio 【Widget】", - "【debugShortDescription】 : Breve descrizione di debug 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ja_JP.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ja_JP.json deleted file mode 100644 index 206fc9fc7..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "ルートコンポーネント", - "info": "RenderObject と Element ツリーの橋渡し。", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RenderObjectToWidgetAdapter 紹介", - "desc": [ - "【container】 : レンダリングオブジェクト 【RenderObjectWithChildMixin】", - "【child】 : 子コンポーネント 【Widget】", - "【debugShortDescription】 : デバッグ概要 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ko_KR.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ko_KR.json deleted file mode 100644 index 35c8289a4..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "루트 컴포넌트", - "info": "RenderObject와 Element 트리의 다리.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RenderObjectToWidgetAdapter 소개", - "desc": [ - "【container】 : 렌더링 객체 【RenderObjectWithChildMixin】", - "【child】 : 자식 컴포넌트 【Widget】", - "【debugShortDescription】 : 디버그 간략 설명 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_pt_PT.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_pt_PT.json deleted file mode 100644 index dbbcb4585..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "Componente Raiz", - "info": "Ponte entre RenderObject e a árvore de Element.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao RenderObjectToWidgetAdapter", - "desc": [ - "【container】 : Objeto de renderização 【RenderObjectWithChildMixin】", - "【child】 : Componente filho 【Widget】", - "【debugShortDescription】 : Breve descrição de depuração 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ru_RU.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ru_RU.json deleted file mode 100644 index 39198c7b0..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "Корневой компонент", - "info": "Мост между RenderObject и деревом Element.", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в RenderObjectToWidgetAdapter", - "desc": [ - "【container】 : Объект рендеринга 【RenderObjectWithChildMixin】", - "【child】 : Дочерний компонент 【Widget】", - "【debugShortDescription】 : Краткое описание для отладки 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_zh-CN.json b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_zh-CN.json deleted file mode 100644 index 4a6c2a0be..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 289, - "name": "RenderObjectToWidgetAdapter", - "localName": "根组件", - "info": "RenderObject 和 Element 树的桥梁。", - "lever": 1, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RenderObjectToWidgetAdapter 介绍", - "desc": [ - "【container】 : 渲染对象 【RenderObjectWithChildMixin】", - "【child】 : 子组件 【Widget】", - "【debugShortDescription】 : 调试简介 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/node1_base.dart b/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/node1_base.dart deleted file mode 100644 index fa1461921..000000000 --- a/modules/widget_system/widgets/lib/Other/RenderObjectToWidgetAdapter/node1_base.dart +++ /dev/null @@ -1,25 +0,0 @@ - -import 'package:flutter/material.dart'; - - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class RenderObjectToWidgetAdapterDemo extends StatelessWidget { - const RenderObjectToWidgetAdapterDemo({Key? key}) : super(key: key); - - final String info = - '该组件并没有什么太大的使用价值,但却非常有纪念意义。它是 Flutter 框架中最顶层的 Widget,它的 child 是 runApp 传入的组件,在 attachRootWidget 方法中被实例化。' - '它持有根渲染对象 RenderView ,负责创建根元素 RenderObjectToWidgetElement,是一个无名英雄,一个深藏功与名的组件。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_de_DE.json b/modules/widget_system/widgets/lib/Other/Table/desc_de_DE.json deleted file mode 100644 index f85552317..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "Tabellenkomponente", - "info": "Eine Komponente zur Anzeige von Tabellen, bei der Eigenschaften wie Rahmen, Spaltenbreite, Textrichtung usw. angegeben werden können. Der Kernobjekttyp ist TableRow.", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Table", - "desc": [ - "【children】: Widget-Liste 【List】", - "【columnWidths】: Spaltenbreite 【Map】", - "【defaultColumnWidth】: Standardspaltenbreite 【TableColumnWidth】", - "【border】: Rahmen 【TableBorder】", - "【textDirection】: Textrichtung 【TextDirection】", - "【defaultVerticalAlignment】: Vertikale Ausrichtung der Zellen 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_en_US.json b/modules/widget_system/widgets/lib/Other/Table/desc_en_US.json deleted file mode 100644 index 0e58923b8..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "Table Component", - "info": "A component for displaying tables, which can specify properties such as borders, column widths, text direction, etc. The core object type is TableRow.", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Table", - "desc": [ - "【children】: Component list 【List】", - "【columnWidths】: Column widths 【Map】", - "【defaultColumnWidth】: Default column width 【TableColumnWidth】", - "【border】: Border 【TableBorder】", - "【textDirection】: Text direction 【TextDirection】", - "【defaultVerticalAlignment】: Vertical alignment mode of cells 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_es_ES.json b/modules/widget_system/widgets/lib/Other/Table/desc_es_ES.json deleted file mode 100644 index 34ded9043..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "Componente de tabla", - "info": "Componente utilizado para mostrar tablas, se pueden especificar atributos como bordes, ancho de columna, dirección del texto, etc. El tipo de objeto principal es TableRow.", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Table", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【columnWidths】 : Ancho de columna 【Map】", - "【defaultColumnWidth】 : Ancho de columna predeterminado 【TableColumnWidth】", - "【border】 : Borde 【TableBorder】", - "【textDirection】 : Dirección del texto 【TextDirection】", - "【defaultVerticalAlignment】 : Modo de alineación vertical de la celda 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_fr_FR.json b/modules/widget_system/widgets/lib/Other/Table/desc_fr_FR.json deleted file mode 100644 index 790cee5c9..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "Composant de tableau", - "info": "Composant utilisé pour afficher des tableaux, permettant de spécifier des propriétés telles que les bordures, la largeur des colonnes, la direction du texte, etc. Le type d'objet principal est TableRow.", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Table", - "desc": [ - "【children】 : Liste des composants 【List】", - "【columnWidths】 : Largeur des colonnes 【Map】", - "【defaultColumnWidth】 : Largeur de colonne par défaut 【TableColumnWidth】", - "【border】 : Bordure 【TableBorder】", - "【textDirection】 : Direction du texte 【TextDirection】", - "【defaultVerticalAlignment】 : Mode d'alignement vertical des cellules 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_it_IT.json b/modules/widget_system/widgets/lib/Other/Table/desc_it_IT.json deleted file mode 100644 index f77e38ba2..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "Componente tabella", - "info": "Componente utilizzato per visualizzare tabelle, è possibile specificare attributi come bordi, larghezza delle colonne, direzione del testo, ecc. Il tipo di oggetto principale è TableRow.", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Table", - "desc": [ - "【children】 : Lista dei componenti 【List】", - "【columnWidths】 : Larghezza delle colonne 【Map】", - "【defaultColumnWidth】 : Larghezza predefinita delle colonne 【TableColumnWidth】", - "【border】 : Bordo 【TableBorder】", - "【textDirection】 : Direzione del testo 【TextDirection】", - "【defaultVerticalAlignment】 : Modalità di allineamento verticale delle celle 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_ja_JP.json b/modules/widget_system/widgets/lib/Other/Table/desc_ja_JP.json deleted file mode 100644 index 63bdadaed..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "テーブルコンポーネント", - "info": "テーブルを表示するためのコンポーネントで、境界線、列幅、テキストの方向などの属性を指定できます。コアオブジェクトタイプはTableRowです。", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "テーブルの基本使用", - "desc": [ - "【children】 : コンポーネントリスト 【List】", - "【columnWidths】 : 列幅 【Map】", - "【defaultColumnWidth】 : デフォルトの列幅 【TableColumnWidth】", - "【border】 : 境界線 【TableBorder】", - "【textDirection】 : テキストの方向 【TextDirection】", - "【defaultVerticalAlignment】 : セルの垂直方向の整列モード 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_ko_KR.json b/modules/widget_system/widgets/lib/Other/Table/desc_ko_KR.json deleted file mode 100644 index 1be344186..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "테이블 컴포넌트", - "info": "테이블을 표시하는 컴포넌트로, 테두리, 열 너비, 텍스트 방향 등의 속성을 지정할 수 있으며, 핵심 객체 유형은 TableRow입니다.", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Table 기본 사용법", - "desc": [ - "【children】 : 컴포넌트 리스트 【List】", - "【columnWidths】 : 열 너비 【Map】", - "【defaultColumnWidth】 : 기본 열 너비 【TableColumnWidth】", - "【border】 : 테두리 【TableBorder】", - "【textDirection】 : 텍스트 방향 【TextDirection】", - "【defaultVerticalAlignment】 : 셀 세로 정렬 모드 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_pt_PT.json b/modules/widget_system/widgets/lib/Other/Table/desc_pt_PT.json deleted file mode 100644 index c1a9f991e..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "Componente de Tabela", - "info": "Componente utilizado para exibir tabelas, pode especificar propriedades como bordas, largura das colunas, direção do texto, etc., o tipo de objeto principal é TableRow.", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico da Tabela", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【columnWidths】 : Largura das colunas 【Map】", - "【defaultColumnWidth】 : Largura padrão da coluna 【TableColumnWidth】", - "【border】 : Borda 【TableBorder】", - "【textDirection】 : Direção do texto 【TextDirection】", - "【defaultVerticalAlignment】 : Modo de alinhamento vertical das células 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_ru_RU.json b/modules/widget_system/widgets/lib/Other/Table/desc_ru_RU.json deleted file mode 100644 index c3045e214..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "Компонент таблицы", - "info": "Компонент для отображения таблиц, может задавать свойства границ, ширины столбцов, направления текста и т.д. Основной тип объекта - TableRow.", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Table", - "desc": [ - "【children】 : Список компонентов 【List】", - "【columnWidths】 : Ширина столбцов 【Map】", - "【defaultColumnWidth】 : Ширина столбца по умолчанию 【TableColumnWidth】", - "【border】 : Границы 【TableBorder】", - "【textDirection】 : Направление текста 【TextDirection】", - "【defaultVerticalAlignment】 : Режим выравнивания по вертикали в ячейке 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/desc_zh-CN.json b/modules/widget_system/widgets/lib/Other/Table/desc_zh-CN.json deleted file mode 100644 index 25a10b9d0..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 110, - "name": "Table", - "localName": "表格组件", - "info": "用于展示表格的组件,可指定边线、列宽、文字方向等属性,核心对象类型是TableRow。", - "lever": 4, - "family": 6, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Table基本使用", - "desc": [ - "【children】 : 组件列表 【List】", - "【columnWidths】 : 列宽 【Map】", - "【defaultColumnWidth】 : 默认列宽 【TableColumnWidth】", - "【border】 : 边线 【TableBorder】", - "【textDirection】 : 文字方向 【TextDirection】", - "【defaultVerticalAlignment】 : 单元格竖直方向对齐模式 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Other/Table/node1_base.dart b/modules/widget_system/widgets/lib/Other/Table/node1_base.dart deleted file mode 100644 index 6e12bbfb9..000000000 --- a/modules/widget_system/widgets/lib/Other/Table/node1_base.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomTable extends StatelessWidget { - const CustomTable({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - _ItemBean title = _ItemBean("单位称", "量纲", "单位", "单位名称", "单位符号"); - _ItemBean m = _ItemBean("长度", "L", "1m", "米", "m"); - _ItemBean kg = _ItemBean("质量", "M", "1Kg", "千克", "Kg"); - _ItemBean s = _ItemBean("时间", "T", "1s", "秒", "s"); - _ItemBean a = _ItemBean("安培", "Ι", "1A", "安培", "A"); - _ItemBean k = _ItemBean("热力学温度", "θ", "1K", "开尔文", "K"); - _ItemBean mol = _ItemBean("物质的量", "N", "1mol", "摩尔", "mol"); - _ItemBean cd = _ItemBean("发光强度", "J", "1cd", "坎德拉", "cd"); - - List<_ItemBean> data = [title, m, kg, s, a, k, mol, cd]; - - return SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: Table( - columnWidths: const { - 0: FixedColumnWidth(80.0), - 1: FixedColumnWidth(80.0), - 2: FixedColumnWidth(80.0), - 3: FixedColumnWidth(80.0), - 4: FixedColumnWidth(80.0), - }, - defaultVerticalAlignment: TableCellVerticalAlignment.middle, - border: TableBorder.all( - color: Colors.orangeAccent, width: 1.0, style: BorderStyle.solid), - children: data - .map((item) => TableRow(children: [ - Center( - child: Text( - item.name, - style: const TextStyle(color: Colors.blue), - )), - Padding( - padding: const EdgeInsets.all(8.0), - child: Center(child: Text(item.symbol)), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Center(child: Text(item.unitSymbol)), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Center(child: Text(item.unitName)), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Center(child: Text(item.unit)), - ), - ])) - .toList(), - ), - ); - } -} - -class _ItemBean { - String name; - String symbol; - String unit; - String unitName; - String unitSymbol; - - _ItemBean(this.name, this.symbol, this.unit, this.unitName, this.unitSymbol); -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_de_DE.json deleted file mode 100644 index 4d5f47cc7..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "Button-Leiste Thema", - "info": "Wird hauptsächlich verwendet, um Standardattribute für nachfolgende ButtonBar-Komponenten festzulegen. Es kann auch verwendet werden, um die Attribute des Standard-ButtonBarThemas zu erhalten.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ButtonBarTheme", - "desc": [ - "Kann die ButtonBarThemeData-Attribute festlegen, um Standardstile für nachfolgende ButtonBar-Komponenten zu setzen, wie Ausrichtung, Stil, Ränder usw. Es kann auch ButtonBarTheme.of verwendet werden, um die Theme-Attribute der ButtonBar zu erhalten." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_en_US.json deleted file mode 100644 index cb837bfe3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "Button Bar Theme", - "info": "Mainly used to set default properties for descendant ButtonBar components uniformly. It can also be used to obtain the properties of the default ButtonBarTheme.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ButtonBarTheme", - "desc": [ - "You can specify the ButtonBarThemeData properties to set default styles for descendant ButtonBar components, such as alignment, style, margins, etc. You can also use ButtonBarTheme.of to get the theme properties of ButtonBar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_es_ES.json deleted file mode 100644 index e249df4f1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "Tema de la barra de botones", - "info": "Principalmente se utiliza para establecer propiedades predeterminadas unificadas para los componentes ButtonBar descendientes, también se pueden obtener las propiedades del tema ButtonBarTheme predeterminado a través de este componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ButtonBarTheme", - "desc": [ - "Se puede especificar el atributo de datos ButtonBarThemeData para establecer el estilo predeterminado para los componentes ButtonBar descendientes, como la alineación, el estilo, los márgenes, etc. También se puede usar ButtonBarTheme.of para obtener las propiedades del tema ButtonBar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_fr_FR.json deleted file mode 100644 index f73070f19..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "Thème de la barre de boutons", - "info": "Principalement utilisé pour définir les propriétés par défaut des composants ButtonBar descendants. Il est également possible d'obtenir les propriétés du ButtonBarTheme par défaut via ce composant.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ButtonBarTheme", - "desc": [ - "Vous pouvez spécifier les propriétés de données de ButtonBarThemeData pour définir le style par défaut des composants ButtonBar descendants, tels que l'alignement, le style, les marges, etc. Vous pouvez également utiliser ButtonBarTheme.of pour obtenir les propriétés du thème ButtonBar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_it_IT.json deleted file mode 100644 index 9f3b9fa7a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "Tema della barra dei pulsanti", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti ButtonBar discendenti, oppure per ottenere le proprietà del tema ButtonBarTheme predefinito tramite questo componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ButtonBarTheme", - "desc": [ - "È possibile specificare le proprietà dei dati ButtonBarThemeData per impostare lo stile predefinito per i componenti ButtonBar discendenti, come allineamento, stile, margini, ecc. È anche possibile utilizzare ButtonBarTheme.of per ottenere le proprietà del tema ButtonBar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ja_JP.json deleted file mode 100644 index c74d681e7..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "ボタンバーテーマ", - "info": "主に子孫のButtonBarコンポーネントにデフォルトのプロパティを統一して設定するために使用されます。また、このコンポーネントを通じてデフォルトのButtonBarThemeのプロパティを取得することもできます。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonBarThemeの基本的な使用", - "desc": [ - "ButtonBarThemeDataデータ属性を指定して、子孫のButtonBarコンポーネントにデフォルトのスタイルを設定できます。例えば、配置、スタイル、余白などです。また、ButtonBarTheme.ofを使用してButtonBarのテーマプロパティを取得することもできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ko_KR.json deleted file mode 100644 index 50339341d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "버튼 바 테마", - "info": "주로 후손 ButtonBar 컴포넌트에 기본 속성을 통일적으로 설정하기 위해 사용되며, 이 컴포넌트를 통해 기본 ButtonBarTheme의 속성을 가져올 수도 있습니다.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonBarTheme 기본 사용법", - "desc": [ - "ButtonBarThemeData 데이터 속성을 지정하여 후손 ButtonBar 컴포넌트의 기본 스타일(예: 정렬 방식, 스타일, 여백 등)을 설정할 수 있습니다. 또한 ButtonBarTheme.of를 사용하여 ButtonBar의 테마 속성을 가져올 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_pt_PT.json deleted file mode 100644 index 058b46e08..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "Tema da Barra de Botões", - "info": "Principalmente usado para definir propriedades padrão para componentes ButtonBar descendentes, também pode ser usado para obter as propriedades do ButtonBarTheme padrão.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ButtonBarTheme", - "desc": [ - "Pode especificar as propriedades de dados do ButtonBarThemeData para definir o estilo padrão para componentes ButtonBar descendentes, como alinhamento, estilo, margens, etc. Também pode usar ButtonBarTheme.of para obter as propriedades do tema do ButtonBar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ru_RU.json deleted file mode 100644 index 5bdfa179a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "Тема панели кнопок", - "info": "В основном используется для установки стандартных свойств для компонентов ButtonBar у потомков, также можно получить свойства стандартной ButtonBarTheme через этот компонент.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ButtonBarTheme", - "desc": [ - "Можно указать свойства данных ButtonBarThemeData для установки стандартного стиля для компонентов ButtonBar у потомков, таких как выравнивание, стиль, отступы и т.д. Также можно использовать ButtonBarTheme.of для получения темы ButtonBar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_zh-CN.json deleted file mode 100644 index bcb82e0d5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 338, - "name": "ButtonBarTheme", - "localName": "按钮条主题", - "info": "主要用于为后代的ButtonBar组件统一设置默认属性,也可以通过该组件获取默认ButtonBarTheme的属性。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonBarTheme基本使用", - "desc": [ - "可指定ButtonBarThemeData数据属性为【后代】的ButtonBar组件设置默认样式,如对齐方式、样式、边距等。也可以用ButtonBarTheme.of获取ButtonBar的主题属性。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/node1_base.dart deleted file mode 100644 index a05838c26..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonBarTheme/node1_base.dart +++ /dev/null @@ -1,44 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class ButtonBarThemeDemo extends StatelessWidget { - const ButtonBarThemeDemo({super.key}); - - @override - Widget build(BuildContext context) { - return ButtonBarTheme( - data: ButtonBarTheme.of(context).copyWith( - alignment: MainAxisAlignment.center, - buttonPadding: const EdgeInsets.symmetric(horizontal: 6), - overflowDirection: VerticalDirection.up, - buttonMinWidth: 150, - buttonHeight: 30, - buttonTextTheme: ButtonTextTheme.primary), - child: const TempButtonBar()); - } -} - -class TempButtonBar extends StatelessWidget { - const TempButtonBar({super.key}); - - @override - Widget build(BuildContext context) { - return ButtonBar( - alignment: MainAxisAlignment.center, - children: [ - ElevatedButton( - style: ElevatedButton.styleFrom(backgroundColor: Colors.blue), - child: const Text("1.Elevated"), onPressed: () {}), - OutlinedButton(child: const Text("2.Outlined"), onPressed: () {}), - TextButton( - style: ElevatedButton.styleFrom(backgroundColor: Colors.blue), - onPressed: () {}, - child: const Text("3.Text"), - ) - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_de_DE.json deleted file mode 100644 index 6deddb8ec..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "Schaltflächendesign", - "info": "Wird hauptsächlich verwendet, um Standardattribute für nachfolgende Schaltflächenkomponenten festzulegen. Es kann auch verwendet werden, um die Standardattribute der Schaltfläche zu erhalten.", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Verwendung von ButtonTheme", - "desc": [ - "Die Attribute sind die gleichen wie bei MaterialButton. Die Schaltflächendesign-Daten können über ButtonTheme.of abgerufen werden.", - "Es kann auch das Standarddesign für Schaltflächenkomponenten, die Nachkommen von ButtonTheme sind, festgelegt werden, einschließlich Farbe, Form, Größe usw." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_en_US.json deleted file mode 100644 index 86283d7df..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "Button Style", - "info": "Mainly used to set default properties for descendant Button-type components uniformly, and also to obtain the default properties of a Button through this component.", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonTheme Usage", - "desc": [ - "The property parameters are the same as MaterialButton. You can obtain button theme data through ButtonTheme.of, \"", - "and also set default styles for button components that are descendants of ButtonTheme, including color, shape, size, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_es_ES.json deleted file mode 100644 index d3a22e41b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "Tema del botón", - "info": "Se utiliza principalmente para establecer propiedades predeterminadas unificadas para los componentes de tipo Button en los descendientes, también se pueden obtener las propiedades predeterminadas del Button a través de este componente.", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de ButtonTheme", - "desc": [ - "Los parámetros de las propiedades son los mismos que MaterialButton, se pueden obtener los datos del tema del botón a través de ButtonTheme.of, \"", - "también se pueden establecer estilos predeterminados para los componentes de botón descendientes de ButtonTheme, incluyendo color, forma, tamaño, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_fr_FR.json deleted file mode 100644 index 729454fa9..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "Thème de bouton", - "info": "Principalement utilisé pour définir les propriétés par défaut des composants de type Button pour les descendants, ou pour obtenir les propriétés par défaut d'un Button via ce composant.", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de ButtonTheme", - "desc": [ - "Les paramètres des propriétés sont les mêmes que MaterialButton, vous pouvez obtenir les données du thème du bouton via ButtonTheme.of, \"", - "ou définir le style par défaut pour les composants bouton descendants de ButtonTheme, y compris la couleur, la forme, la taille, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_it_IT.json deleted file mode 100644 index 6fc4a22df..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "Tema del pulsante", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti di tipo Button discendenti, o per ottenere le proprietà predefinite del Button attraverso questo componente.", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di ButtonTheme", - "desc": [ - "I parametri delle proprietà sono gli stessi di MaterialButton, è possibile ottenere i dati del tema del pulsante tramite ButtonTheme.of, \"", - "è anche possibile impostare lo stile predefinito per i componenti pulsante discendenti di ButtonTheme, inclusi colore, forma, dimensione, ecc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ja_JP.json deleted file mode 100644 index 3b65829dc..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "ボタンスタイル", - "info": "主に子孫のButtonタイプコンポーネントにデフォルトのプロパティを統一して設定するために使用されます。また、このコンポーネントを通じてデフォルトのButtonのプロパティを取得することもできます。", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonThemeの使用", - "desc": [ - "MaterialButtonと同じ属性パラメータで、ButtonTheme.ofを使用してボタンのテーマデータを取得できます。", - "また、ButtonThemeの【子孫】のボタンコンポーネントにデフォルトのスタイルを設定することもできます。これには色、形状、サイズなどが含まれます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ko_KR.json deleted file mode 100644 index ef5b7c412..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "버튼 스타일", - "info": "주로 후손 Button 유형의 컴포넌트에 기본 속성을 통일적으로 설정하기 위해 사용되며, 이 컴포넌트를 통해 기본 Button의 속성을 얻을 수도 있습니다.", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonTheme 사용", - "desc": [ - "속성 매개변수는 MaterialButton과 동일하며, ButtonTheme.of를 통해 버튼 테마 데이터를 얻을 수 있습니다.", - "또한 ButtonTheme의 【후손】 버튼 컴포넌트에 기본 스타일(색상, 모양, 크기 등)을 설정할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_pt_PT.json deleted file mode 100644 index c33815d6d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "Tema do Botão", - "info": "Principalmente usado para definir propriedades padrão uniformes para componentes do tipo Button descendentes, também pode ser usado para obter as propriedades padrão do Button através deste componente.", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do ButtonTheme", - "desc": [ - "Os parâmetros de propriedade são os mesmos que o MaterialButton, os dados do tema do botão podem ser obtidos através de ButtonTheme.of,", - "também pode definir estilos padrão para componentes de botão descendentes do ButtonTheme, incluindo cor, forma, tamanho, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ru_RU.json deleted file mode 100644 index 03a5a59bf..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "Тема кнопки", - "info": "В основном используется для установки стандартных свойств для компонентов типа Button у потомков, также можно получить свойства стандартной кнопки через этот компонент.", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование ButtonTheme", - "desc": [ - "Параметры свойств аналогичны MaterialButton, можно получить данные темы кнопки через ButtonTheme.of,", - "также можно установить стандартные стили для компонентов кнопок-потомков ButtonTheme, включая цвет, форму, размер и т.д." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_zh-CN.json deleted file mode 100644 index 57fc08cec..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 326, - "name": "ButtonTheme", - "localName": "按钮样式", - "info": "主要用于为后代的Button类型组件统一设置默认属性,也可以通过该组件获取默认Button的属性。", - "lever": 3, - "family": 5, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonTheme使用", - "desc": [ - "属性参数同MaterialButton,可以通过ButtonTheme.of获取按钮主题数据,\"", - "也可以为ButtonTheme【后代】的按钮组件设置默认样式,包括颜色、形状、尺寸等。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/node1_base.dart deleted file mode 100644 index 4adfd83c9..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ButtonTheme/node1_base.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-12 -/// contact me by email 1981462002@qq.com - - - -class ButtonThemeDemo extends StatelessWidget { - const ButtonThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ButtonTheme( - buttonColor: Colors.orange, - splashColor: Colors.blue, - minWidth: 40, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - child: Wrap( - spacing: 10, - children: [ - ElevatedButton(onPressed: (){},child: const Icon(Icons.add)), - TextButton(onPressed: (){},child: const Icon(Icons.add)), - OutlinedButton(onPressed: (){},child: const Icon(Icons.add)), - MaterialButton(onPressed: (){},child: const Icon(Icons.add)), - ], - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_de_DE.json deleted file mode 100644 index b875ae523..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "Chip-Stil", - "info": "Wird hauptsächlich verwendet, um Standardattribute für Chip-Typ-Komponenten für Nachkommen festzulegen. Es kann auch verwendet werden, um die Standardattribute des Chips abzurufen.", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ChipTheme", - "desc": [ - "Kann ChipThemeData-Datenattribute angeben, um Standardstile für Chip-Typ-Komponenten für Nachkommen festzulegen. Die Attribute ähneln denen des Chips, wie Schatten, Farbe, Abstand, Form, Textstil usw. ChipTheme.of kann auch verwendet werden, um die Themendaten des Chips abzurufen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_en_US.json deleted file mode 100644 index 8007a4be3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "Chip Style", - "info": "Mainly used to set default properties for Chip type components of descendants, and can also be used to obtain the default properties of Chip.", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ChipTheme", - "desc": [ - "You can specify the ChipThemeData properties to set default styles for Chip type components of descendants. The properties are similar to those of Chip, such as shadow, color, margin, shape, text style, etc. You can also use ChipTheme.of to get the theme data of Chip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_es_ES.json deleted file mode 100644 index 7621db9ad..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "Estilo de Chip", - "info": "Principalmente se utiliza para establecer propiedades predeterminadas unificadas para componentes de tipo Chip descendientes, también se puede utilizar este componente para obtener las propiedades predeterminadas de Chip.", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ChipTheme", - "desc": [ - "Se pueden especificar las propiedades de datos de ChipThemeData para establecer estilos predeterminados para componentes de tipo Chip descendientes, las propiedades son similares a las de Chip, como sombras, colores, márgenes, formas, estilos de texto, etc. También se puede usar ChipTheme.of para obtener los datos del tema de Chip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_fr_FR.json deleted file mode 100644 index aad67185c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "Style de la petite barre", - "info": "Principalement utilisé pour définir les propriétés par défaut des composants de type Chip pour les descendants, il est également possible d'obtenir les propriétés par défaut de Chip via ce composant.", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ChipTheme", - "desc": [ - "Il est possible de spécifier les propriétés de données ChipThemeData pour définir le style par défaut des composants de type Chip pour les descendants, les propriétés sont similaires à celles de Chip, telles que l'ombre, la couleur, la marge, la forme, le style de texte, etc. Il est également possible d'obtenir les données de thème de Chip en utilisant ChipTheme.of." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_it_IT.json deleted file mode 100644 index ec2f5d99a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "Stile della linguetta", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti di tipo Chip discendenti, è anche possibile ottenere le proprietà predefinite di Chip tramite questo componente.", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ChipTheme", - "desc": [ - "È possibile specificare le proprietà dei dati ChipThemeData per impostare lo stile predefinito per i componenti di tipo Chip discendenti, le proprietà sono simili a quelle di Chip, come ombre, colori, margini, forme, stili di testo, ecc. È anche possibile utilizzare ChipTheme.of per ottenere i dati del tema di Chip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ja_JP.json deleted file mode 100644 index 047f618ac..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "チップスタイル", - "info": "主に子孫のChipタイプコンポーネントにデフォルトのプロパティを統一して設定するために使用されます。また、このコンポーネントを通じてデフォルトのChipのプロパティを取得することもできます。", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ChipThemeの基本使用", - "desc": [ - "ChipThemeDataデータプロパティを指定して、【子孫】のChipタイプコンポーネントにデフォルトのスタイルを設定できます。プロパティはChipのプロパティと似ており、影、色、余白、形状、テキストスタイルなどがあります。また、ChipTheme.ofを使用してChipのテーマデータを取得することもできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ko_KR.json deleted file mode 100644 index 596a5bec2..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "칩 스타일", - "info": "주로 후손의 Chip 타입 컴포넌트에 기본 속성을 통일적으로 설정하기 위해 사용되며, 이 컴포넌트를 통해 기본 Chip의 속성을 가져올 수도 있습니다.", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ChipTheme 기본 사용", - "desc": [ - "ChipThemeData 데이터 속성을 지정하여 【후손】의 Chip 타입 컴포넌트에 기본 스타일을 설정할 수 있습니다. 속성은 Chip 속성과 유사하며, 그림자, 색상, 여백, 모양, 텍스트 스타일 등이 포함됩니다. 또한 ChipTheme.of를 사용하여 Chip의 테마 데이터를 가져올 수도 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_pt_PT.json deleted file mode 100644 index e2c9f4bd6..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "Estilo de Chip", - "info": "Principalmente usado para definir propriedades padrão para componentes do tipo Chip descendentes, também pode ser usado para obter as propriedades padrão do Chip.", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ChipTheme", - "desc": [ - "Pode especificar as propriedades de dados do ChipThemeData para definir o estilo padrão para componentes do tipo Chip descendentes, as propriedades são semelhantes às do Chip, como sombra, cor, margem, forma, estilo de texto, etc. Também pode usar ChipTheme.of para obter os dados do tema do Chip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ru_RU.json deleted file mode 100644 index 11fa7bbb6..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "Стиль чипа", - "info": "В основном используется для установки стандартных атрибутов для компонентов типа Chip у потомков, также можно получить атрибуты стандартного Chip через этот компонент.", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ChipTheme", - "desc": [ - "Можно указать атрибуты данных ChipThemeData для установки стандартного стиля для компонентов типа Chip у потомков, атрибуты аналогичны атрибутам Chip, такие как тень, цвет, отступы, форма, стиль текста и т.д. Также можно получить данные темы Chip с помощью ChipTheme.of." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_zh-CN.json deleted file mode 100644 index 6091b0132..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 328, - "name": "ChipTheme", - "localName": "小条样式", - "info": "主要用于为后代的Chip类型组件统一设置默认属性,也可以通过该组件获取默认Chip的属性。", - "lever": 3, - "family": 5, - "linkIds": [ - 11, - 153, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ChipTheme基本使用", - "desc": [ - "可指定ChipThemeData数据属性为【后代】的Chip类型组件设置默认样式,属性和Chip属性类似,如阴影、颜色、边距、形状、文字样式等。也可以用ChipTheme.of获取Chip的主题数据。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/node1_base.dart deleted file mode 100644 index 29e8f3851..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ChipTheme/node1_base.dart +++ /dev/null @@ -1,74 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/20 -/// contact me by email 1981462002@qq.com - -class ChipThemeDemo extends StatelessWidget { - const ChipThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ChipTheme( - data: ChipTheme.of(context).copyWith( - selectedColor: Colors.orange.withAlpha(55), - selectedShadowColor: Colors.blue, - shadowColor: Colors.orangeAccent, - pressElevation: 5, - elevation: 3, - ), - child: const CustomFilterChip(), - ); - } -} - -class CustomFilterChip extends StatefulWidget { - const CustomFilterChip({Key? key}) : super(key: key); - - @override - _CustomFilterChipState createState() => _CustomFilterChipState(); -} - -class _CustomFilterChipState extends State { - final Map map = { - 'A': 'Ant', - 'B': 'Bug', - 'C': 'Cat', - 'D': 'Dog', - }; - final List _selected = []; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Wrap( - children: map.keys.map((key) => _buildChild(key)).toList(), - ), - Container( - padding: const EdgeInsets.all(10), - child: Text('您已选择: ${_selected.join(', ')}')), - ], - ); - } - - Padding _buildChild(String key) { - return Padding( - padding: const EdgeInsets.all(4.0), - child: FilterChip( - avatar: CircleAvatar(child: Text(key)), - label: Text(map[key]!), - selected: _selected.contains(map[key]), - onSelected: (bool value) { - setState(() { - if (value) { - _selected.add(map[key]!); - } else { - _selected.removeWhere((name) => name == map[key]); - } - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_de_DE.json deleted file mode 100644 index 984b189a1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "Benutzeroberflächenebene", - "info": "Ein Konzept in iOS, die visuelle Ebene der Benutzeroberfläche UIUserInterfaceLevel, unterteilt in base und elevated. Als InheritedWidget dient es hauptsächlich dazu, diese Daten zu teilen.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in CupertinoUserInterfaceLevel", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) kann CupertinoUserInterfaceLevelData-Daten abrufen. Mit dieser Komponente können auch diese Daten eingerichtet und mit Unterbäumen geteilt werden. Weitere Informationen zur Datenquelle finden Sie unter: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_en_US.json deleted file mode 100644 index 608bb59bf..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "User Interface Level", - "info": "A concept in iOS, the content visibility level UIUserInterfaceLevel, divided into base and elevated. As an InheritedWidget, it mainly shares this data.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to CupertinoUserInterfaceLevel", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) can retrieve CupertinoUserInterfaceLevelData. This component can also be used to set and share this data with the subtree. For more information about the data source, see: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_es_ES.json deleted file mode 100644 index 7c2124b35..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "Nivel de Interfaz de Usuario", - "info": "Concepto en iOS, nivel de visibilidad del contenido UIUserInterfaceLevel, dividido en base y elevated. Como un InheritedWidget, su función principal es compartir estos datos.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a CupertinoUserInterfaceLevel", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) puede obtener los datos de CupertinoUserInterfaceLevelData. También se puede usar este componente para configurar y compartir estos datos con el subárbol. Para más detalles sobre el origen de los datos, consulte: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_fr_FR.json deleted file mode 100644 index 2c153d743..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "Niveau de l'interface utilisateur", - "info": "Concept dans iOS, niveau de visibilité du contenu UIUserInterfaceLevel, divisé en base et elevated. En tant que InheritedWidget, il partage principalement ces données.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à CupertinoUserInterfaceLevel", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) peut récupérer les données CupertinoUserInterfaceLevelData. Ce composant peut également être utilisé pour partager ces données avec le sous-arbre. Pour plus d'informations sur le diagramme des données, voir : https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_it_IT.json deleted file mode 100644 index 17e17a497..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "Livello dell'interfaccia utente", - "info": "Concetto in iOS, livello visivo del contenuto UIUserInterfaceLevel, diviso in base e elevated. Come InheritedWidget, principalmente condivide questi dati.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a CupertinoUserInterfaceLevel", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) può ottenere i dati di CupertinoUserInterfaceLevelData. Puoi anche utilizzare questo componente per impostare e condividere questi dati con il sottoalbero. Per ulteriori informazioni sui dati originali, consulta: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ja_JP.json deleted file mode 100644 index abbec8fb5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "ユーザーインターフェースレベル", - "info": "iOS の概念で、コンテンツの可視レベル UIUserInterfaceLevel で、base と elevated に分かれています。InheritedWidget として、主にこのデータを共有します。", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoUserInterfaceLevel 紹介", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) を使用して CupertinoUserInterfaceLevelData データを取得できます。また、このコンポーネントを使用してデータを設定し、サブツリーと共有することもできます。データの詳細については、以下を参照してください: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ko_KR.json deleted file mode 100644 index b4ab14be3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "사용자 인터페이스 레벨", - "info": "iOS의 개념으로, 콘텐츠 가시성 레벨인 UIUserInterfaceLevel을 의미하며, base와 elevated로 나뉩니다. InheritedWidget으로서, 주로 이 데이터를 공유하는 역할을 합니다.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoUserInterfaceLevel 소개", - "desc": [ - "CupertinoUserInterfaceLevel.of(context)를 통해 CupertinoUserInterfaceLevelData 데이터를 얻을 수 있습니다. 또한 이 컴포넌트를 사용하여 해당 데이터를 설정하고 서브트리와 공유할 수 있습니다. 데이터 원본에 대한 자세한 내용은 다음을 참조하세요: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_pt_PT.json deleted file mode 100644 index 7f712dbf4..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "Nível de Interface do Utilizador", - "info": "Conceito no iOS, nível de visibilidade do conteúdo UIUserInterfaceLevel, dividido em base e elevado. Como um InheritedWidget, o principal objetivo é compartilhar esses dados.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao CupertinoUserInterfaceLevel", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) pode obter os dados CupertinoUserInterfaceLevelData. Também pode usar este componente para definir e compartilhar esses dados com a subárvore. Para mais detalhes sobre o diagrama de dados, consulte: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ru_RU.json deleted file mode 100644 index de7b0577c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "Уровень пользовательского интерфейса", - "info": "Концепция в ios, уровень видимости контента UIUserInterfaceLevel, разделяется на base и elevated. Как InheritedWidget, в основном используется для обмена этими данными.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в CupertinoUserInterfaceLevel", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) может получить данные CupertinoUserInterfaceLevelData. Также можно использовать этот компонент для настройки и обмена этих данных с поддеревом. Подробнее о данных см.: https://developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_zh-CN.json deleted file mode 100644 index 361c27200..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 337, - "name": "CupertinoUserInterfaceLevel", - "localName": "用户接口等级", - "info": "ios 中的概念,内容可视级别 UIUserInterfaceLevel ,分为 base 和 elevated。作为一个 InheritedWidget ,主要就是共享该数据。", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoUserInterfaceLevel 介绍", - "desc": [ - "CupertinoUserInterfaceLevel.of(context) 可以获取 CupertinoUserInterfaceLevelData 数据。也可以使用该组件设置该数据与子树共享。关于数据原图详见: https:developer.apple.com/documentation/uikit/uiuserinterfacelevel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/node1_base.dart deleted file mode 100644 index f424aa654..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/CupertinoUserInterfaceLevel/node1_base.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - - -class CupertinoUserInterfaceLevelDemo extends StatelessWidget { - const CupertinoUserInterfaceLevelDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const CupertinoUserInterfaceLevel( - data: CupertinoUserInterfaceLevelData.elevated, - child: LevelShower() - ); - } - -} - -class LevelShower extends StatelessWidget { - const LevelShower({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - CupertinoUserInterfaceLevelData data = CupertinoUserInterfaceLevel.of(context); - return Container( - height: 150, - alignment: Alignment.center, - color: Theme.of(context).primaryColor.withOpacity(0.1), - child: Text(data.toString()), - ); - } -} - - diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_de_DE.json deleted file mode 100644 index d7b33549d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "Standard-Ressourcenpaket", - "info": "Ein InheritedWidget, das nach der Einstellung des AssetBundle-Objekts es den Knoten nach diesem Knoten ermöglicht, das AssetBundle-Objekt über DefaultAssetBundle.of(context) zu erhalten, um auf Ressourcendateien zuzugreifen.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in DefaultAssetBundle", - "desc": [ - "【bundle】 : *Ressourcenpaket 【AssetBundle】", - "【child】 : *Untergeordnete Komponente 【Widget】", - "Wir können unser eigenes DefaultAssetBundle definieren, das von nachfolgenden Knoten verwendet wird, oder direkt das Standardpaket verwenden. Dieses Beispiel zeigt, wie ein Ressourcenbild mithilfe des von Framework bereitgestellten DefaultAssetBundle geladen und angezeigt wird." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_en_US.json deleted file mode 100644 index 36677835a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "Default Asset Bundle", - "info": "An InheritedWidget that sets the AssetBundle object. After setting, the context of the nodes following this node can obtain the AssetBundle object through DefaultAssetBundle.of(context) for accessing resource files.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to DefaultAssetBundle", - "desc": [ - "【bundle】: *Resource Bundle 【AssetBundle】", - "【child】: *Child Widget 【Widget】", - "We can define our own DefaultAssetBundle for use by subsequent nodes, or we can directly use the default one. This case demonstrates loading and displaying a resource image using the DefaultAssetBundle provided by the framework." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_es_ES.json deleted file mode 100644 index 26058f6d0..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "Paquete de recursos predeterminado", - "info": "Un InheritedWidget que, después de configurar el objeto AssetBundle, permite que los nodos posteriores en el contexto obtengan el objeto AssetBundle a través de DefaultAssetBundle.of(context) para acceder a los archivos de recursos.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a DefaultAssetBundle", - "desc": [ - "【bundle】 : *Paquete de recursos 【AssetBundle】", - "【child】 : *Componente hijo 【Widget】", - "Podemos definir nuestro propio DefaultAssetBundle para que lo usen los nodos posteriores, o podemos usar el predeterminado directamente. Este caso demuestra cómo cargar y mostrar una imagen de recursos utilizando el DefaultAssetBundle proporcionado por el marco." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_fr_FR.json deleted file mode 100644 index 2e7110234..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "Paquet de ressources par défaut", - "info": "Un InheritedWidget, après avoir défini l'objet AssetBundle, les nœuds suivants dans le contexte peuvent obtenir l'objet AssetBundle via DefaultAssetBundle.of(context) pour accéder aux fichiers de ressources.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Présentation de DefaultAssetBundle", - "desc": [ - "【bundle】 : *Paquet de ressources 【AssetBundle】", - "【child】 : *Composant enfant 【Widget】", - "Nous pouvons définir notre propre DefaultAssetBundle pour une utilisation ultérieure par les nœuds suivants, ou utiliser directement celui par défaut. Ce cas montre comment charger et afficher une image de ressource en utilisant le DefaultAssetBundle fourni par le framework." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_it_IT.json deleted file mode 100644 index 150558b8d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "Pacchetto di risorse predefinito", - "info": "Un InheritedWidget che, una volta impostato l'oggetto AssetBundle, consente ai nodi successivi nel contesto di ottenere l'oggetto AssetBundle tramite DefaultAssetBundle.of(context) per accedere ai file delle risorse.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a DefaultAssetBundle", - "desc": [ - "【bundle】 : *Pacchetto di risorse 【AssetBundle】", - "【child】 : *Componente figlio 【Widget】", - "Possiamo definire il nostro DefaultAssetBundle per l'uso da parte dei nodi successivi, oppure possiamo utilizzare quello predefinito. Questo esempio dimostra come caricare e visualizzare un'immagine di risorsa utilizzando il DefaultAssetBundle fornito dal framework." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ja_JP.json deleted file mode 100644 index 000ac9ccf..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "デフォルトアセットバンドル", - "info": "InheritedWidget で、AssetBundle オブジェクトを設定した後、このノード以降のノードコンテキストは DefaultAssetBundle.of(context) を使用して AssetBundle オブジェクトを取得し、リソースファイルにアクセスできます。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultAssetBundle の紹介", - "desc": [ - "【bundle】 : *リソースバンドル 【AssetBundle】", - "【child】 : *子コンポーネント 【Widget】", - "独自の DefaultAssetBundle を定義して後続のノードで使用することも、デフォルトのものを直接使用することもできます。この例では、フレームワークが提供する DefaultAssetBundle を使用してリソース画像を読み込み、表示します。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ko_KR.json deleted file mode 100644 index 1b3dc4773..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "기본 리소스 번들", - "info": "InheritedWidget으로, AssetBundle 객체를 설정한 후, 해당 노드 이후의 노드 컨텍스트에서 DefaultAssetBundle.of(context)를 통해 AssetBundle 객체를 얻어 리소스 파일에 접근할 수 있습니다.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultAssetBundle 소개", - "desc": [ - "【bundle】 : *리소스 번들 【AssetBundle】", - "【child】 : *자식 위젯 【Widget】", - "우리는 후속 노드에서 사용할 수 있도록 자신만의 DefaultAssetBundle을 정의할 수도 있고, 기본값을 바로 사용할 수도 있습니다. 이 예제는 프레임워크에서 제공하는 DefaultAssetBundle을 통해 리소스 이미지를 로드하여 표시하는 방법을 보여줍니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_pt_PT.json deleted file mode 100644 index f124827cc..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "Pacote de Recursos Padrão", - "info": "Um InheritedWidget que, após configurar o objeto AssetBundle, permite que os nós subsequentes no contexto obtenham o objeto AssetBundle através de DefaultAssetBundle.of(context) para acessar arquivos de recursos.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao DefaultAssetBundle", - "desc": [ - "【bundle】 : *Pacote de recursos 【AssetBundle】", - "【child】 : *Componente filho 【Widget】", - "Podemos definir nosso próprio DefaultAssetBundle para uso por nós subsequentes ou usar o padrão diretamente. Este exemplo demonstra o carregamento e exibição de uma imagem de recurso usando o DefaultAssetBundle fornecido pela estrutura." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ru_RU.json deleted file mode 100644 index d4c86d0f2..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "Пакет ресурсов по умолчанию", - "info": "InheritedWidget, который устанавливает объект AssetBundle, после чего контекст узлов после этого узла может получить объект AssetBundle с помощью DefaultAssetBundle.of(context) для доступа к файлам ресурсов.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в DefaultAssetBundle", - "desc": [ - "【bundle】 : *Пакет ресурсов 【AssetBundle】", - "【child】 : *Дочерний компонент 【Widget】", - "Мы можем определить собственный DefaultAssetBundle для использования последующими узлами или использовать предоставленный по умолчанию. Этот пример демонстрирует загрузку и отображение изображения ресурса с помощью DefaultAssetBundle, предоставленного фреймворком." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_zh-CN.json deleted file mode 100644 index de0c341c7..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 320, - "name": "DefaultAssetBundle", - "localName": "默认资源包", - "info": "一个 InheritedWidget,设置 AssetBundle 对象后,该节点后的节点上下文可以通过 DefaultAssetBundle.of(context) 获取 AssetBundle 对象用于访问资源文件。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultAssetBundle 介绍", - "desc": [ - "【bundle】 : *资源包 【AssetBundle】", - "【child】 : *子组件 【Widget】", - "我们可以定义自己的 DefaultAssetBundle 来供后续节点使用,也可以直接使用默认的。该案例演示通过框架提供的 DefaultAssetBundle 加载一张资源图片进行显示。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/node1_base.dart deleted file mode 100644 index b9590d869..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultAssetBundle/node1_base.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'dart:ui' as ui; -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class DefaultAssetBundleDemo extends StatefulWidget { - const DefaultAssetBundleDemo({Key? key}) : super(key: key); - - @override - _DefaultAssetBundleDemoState createState() => _DefaultAssetBundleDemoState(); -} - -class _DefaultAssetBundleDemoState extends State { - ui.Image? _image; - @override - void initState() { - super.initState(); - _load(); - } - - @override - Widget build(BuildContext context) { - - return Container( - width: 150, - height: 150, - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: _image==null?Container():RawImage(image: _image,fit: BoxFit.cover,), - ); - } - - void _load() async{ - AssetBundle info = DefaultAssetBundle.of(context); - ByteData data = await info.load('assets/images/sabar.webp'); - _image = await decodeImageFromList(data.buffer.asUint8List()); - setState(() { - - }); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_de_DE.json deleted file mode 100644 index 6c804ee42..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "Standardtextstil", - "info": "Kann ein Kind enthalten und den Standardstil für den Text der Nachkommen festlegen. Wird häufig verwendet, um den Stil mehrerer identischer Texte zu vereinheitlichen und so die individuelle Einstellung zu vermeiden.", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Verwendung von DefaultTextStyle", - "desc": [ - "Die Eigenschaften sind die gleichen wie bei Text, siehe dort für Details.", - "Seine Funktion ist: Den Standardtextstil für [Nachkomponenten] festlegen, beachten Sie, dass Nachkomponenten auch ihren eigenen Stil festlegen können" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_en_US.json deleted file mode 100644 index c7a0ca763..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "Default Font Style", - "info": "Can contain a child, specifying the default style for descendant text. Commonly used to unify the style of multiple identical texts, avoiding setting them one by one.", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTextStyle Usage", - "desc": [ - "The properties are the same as Text, see details there.", - "Its function is: Set the default text style to be applied to [descendant widgets], note that descendant widgets can also specify their own styles." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_es_ES.json deleted file mode 100644 index e4df5bdb5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "Estilo de texto predeterminado", - "info": "Puede contener un hijo, especifica el estilo de texto predeterminado para los descendientes. Se usa comúnmente para unificar el estilo de múltiples textos iguales, evitando configurarlos uno por uno.", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de DefaultTextStyle", - "desc": [ - "Los atributos son los mismos que Text, consulte los detalles.", - "Su función es: establecer el estilo de texto predeterminado para los【componentes descendientes】, tenga en cuenta que los componentes descendientes también pueden especificar su propio estilo." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_fr_FR.json deleted file mode 100644 index 249b4231b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "Style de texte par défaut", - "info": "Peut contenir un enfant, spécifie le style de texte par défaut pour les descendants. Souvent utilisé pour unifier le style de plusieurs textes identiques, évitant de les définir un par un.", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de DefaultTextStyle", - "desc": [ - "Les propriétés sont les mêmes que Text, voir ci-dessus pour plus de détails.", - "Sa fonction est : définir le style de texte par défaut appliqué aux [composants descendants], notez que les composants descendants peuvent également spécifier leur propre style" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_it_IT.json deleted file mode 100644 index 6366506ba..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "Stile di testo predefinito", - "info": "Può contenere un figlio e specifica lo stile predefinito per il testo dei discendenti. Comunemente utilizzato per uniformare lo stile di più testi identici, evitando di impostarli uno per uno.", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di DefaultTextStyle", - "desc": [ - "Le proprietà sono le stesse di Text, per i dettagli vedere quello.", - "La sua funzione è: impostare lo stile di testo predefinito da applicare ai [componenti discendenti], notare che i componenti discendenti possono anche specificare il proprio stile." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ja_JP.json deleted file mode 100644 index 1f0901422..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "デフォルトフォントスタイル", - "info": "子要素を一つ持つことができ、子孫のテキストにデフォルトのスタイルを指定します。複数の同じテキストのスタイルを統一するためによく使用され、一つ一つ設定する手間を省きます。", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTextStyleの使用", - "desc": [ - "各属性はTextと同じです。詳細はそちらを参照してください。", - "その機能は: デフォルトのテキストスタイルを【子孫コンポーネント】に適用することです。子孫コンポーネントも自身のスタイルを指定できることに注意してください" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ko_KR.json deleted file mode 100644 index ff0265e4d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "기본 글꼴 스타일", - "info": "하나의 자식을 수용할 수 있으며, 후손 텍스트에 기본 스타일을 지정합니다. 여러 동일한 텍스트의 스타일을 통일하여 일일이 설정하는 것을 방지하기 위해 자주 사용됩니다.", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTextStyle 사용", - "desc": [ - "각 속성은 Text와 동일하며, 자세한 내용은 해당 문서를 참조하십시오.", - "기능은: 기본 텍스트 스타일을 설정하여 【후손 컴포넌트】에 적용하며, 후손 컴포넌트는 자신의 스타일을 지정할 수도 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_pt_PT.json deleted file mode 100644 index bd2458dc4..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "Estilo de Texto Padrão", - "info": "Pode conter um filho, especificando o estilo padrão para o texto dos descendentes. Frequentemente usado para unificar o estilo de múltiplos textos iguais, evitando a configuração individual.", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do DefaultTextStyle", - "desc": [ - "As propriedades são as mesmas que o Text, consulte-o para mais detalhes.", - "Sua função é: definir o estilo de texto padrão para [componentes descendentes], note que os componentes descendentes também podem especificar seus próprios estilos" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ru_RU.json deleted file mode 100644 index 4fe407c05..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "Стиль текста по умолчанию", - "info": "Может содержать одного ребенка, задает стиль текста по умолчанию для потомков. Часто используется для унификации стиля нескольких одинаковых текстов, чтобы избежать индивидуальной настройки.", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование DefaultTextStyle", - "desc": [ - "Атрибуты такие же, как у Text, подробнее см. там.", - "Его функция: установка стиля текста по умолчанию для [потомков], обратите внимание, что потомки также могут задавать свой собственный стиль" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_zh-CN.json deleted file mode 100644 index 4f51e037d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 324, - "name": "DefaultTextStyle", - "localName": "默认字体样式", - "info": "可容纳一个孩子,为后代的文字指定默认样式。常用于多个相同文字的样式统一,避免一一设置。", - "lever": 3, - "family": 5, - "linkIds": [ - 2, - 114, - 124 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTextStyle使用", - "desc": [ - "各属性同Text,详见之。", - "其功能是: 设置默认的文字样式应用于【后代组件】,注意后代组件也可以指定自身的样式" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/node1_base.dart deleted file mode 100644 index 47fc30a28..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DefaultTextStyle/node1_base.dart +++ /dev/null @@ -1,28 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-12 -/// contact me by email 1981462002@qq.com - -class DefaultTextStyleDemo extends StatelessWidget { - const DefaultTextStyleDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return DefaultTextStyle( - style: const TextStyle( - fontSize: 18, - color: Colors.blue, - decoration: TextDecoration.underline), - child: Wrap( - spacing: 5, - children: const[ - Text("Hello,",), - FlutterLogo(), - Text("Flutter",style: TextStyle(color: Colors.red),), - Text("Unit."), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_de_DE.json deleted file mode 100644 index 622b10f72..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "Richtungsabhängigkeit", - "info": "Ändert den Eigenschaftswert für Komponenten mit textDirection-Attribut einheitlich für Nachkommen. Der aktuelle Standardwert von textDirection kann auch über Directionality.of(context) abgerufen werden.", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Directionality", - "desc": [ - "【textDirection】: Textausrichtung 【TextDirection】", - "【child】: Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_en_US.json deleted file mode 100644 index 9c86d9598..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "Directionality", - "info": "Set the property value uniformly for components with the textDirection attribute for descendants, or get the default textDirection attribute through Directionality.of(context).", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Directionality", - "desc": [ - "【textDirection】: Text arrangement direction 【TextDirection】", - "【child】: Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_es_ES.json deleted file mode 100644 index 8e90e8b91..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "Direccionalidad", - "info": "Establece un valor de propiedad unificado para los componentes con el atributo textDirection para los descendientes, también se puede obtener el valor predeterminado del atributo textDirection actual a través de Directionality.of(context).", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Directionality", - "desc": [ - "【textDirection】: Dirección de alineación del texto 【TextDirection】", - "【child】: Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_fr_FR.json deleted file mode 100644 index ef429cb36..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "Directionnalité", - "info": "Modifie la valeur de l'attribut pour les composants ayant l'attribut textDirection pour les descendants, ou obtenez la valeur par défaut de textDirection via Directionality.of(context).", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Directionality", - "desc": [ - "【textDirection】 : Direction de l'arrangement du texte 【TextDirection】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_it_IT.json deleted file mode 100644 index 7e02c95a6..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "Direzionalità", - "info": "Imposta un valore di attributo uniforme per i componenti con l'attributo textDirection per i discendenti, oppure puoi ottenere l'attributo predefinito textDirection corrente tramite Directionality.of(context).", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Directionality", - "desc": [ - "【textDirection】: direzione di disposizione del testo 【TextDirection】", - "【child】: componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ja_JP.json deleted file mode 100644 index 85dae336a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "方向性", - "info": "textDirectionプロパティを持つコンポーネントのプロパティ値を一括設定して子孫に変更します。また、Directionality.of(context)を使用して現在のtextDirectionのデフォルトプロパティを取得することもできます。", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Directionalityの基本的な使用法", - "desc": [ - "【textDirection】: テキストの配置方向 【TextDirection】", - "【child】: 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ko_KR.json deleted file mode 100644 index a86f7d2cc..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "방향성", - "info": "후손을 위해 textDirection 속성이 있는 컴포넌트의 속성 값을 통일적으로 설정할 수 있으며, Directionality.of(context)를 통해 현재 textDirection의 기본 속성을 얻을 수 있습니다.", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Directionality 기본 사용", - "desc": [ - "【textDirection】 : 텍스트 배열 방향 【TextDirection】", - "【child】 : 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_pt_PT.json deleted file mode 100644 index 7bce778dc..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "Direcionalidade", - "info": "Define o valor do atributo uniformemente para componentes com o atributo textDirection para os descendentes, ou pode obter o valor padrão do textDirection atual através de Directionality.of(context).", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Directionality", - "desc": [ - "【textDirection】 : Direção de disposição do texto 【TextDirection】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ru_RU.json deleted file mode 100644 index a4da56a05..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "Направленность", - "info": "Устанавливает значение атрибута для компонентов с атрибутом textDirection для потомков, также можно получить текущее значение по умолчанию textDirection через Directionality.of(context).", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Directionality", - "desc": [ - "【textDirection】 : Направление текста 【TextDirection】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_zh-CN.json deleted file mode 100644 index a05c445f5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 319, - "name": "Directionality", - "localName": "定向性", - "info": "为后代改变有textDirection属性的组件统一设置属性值,也可以通过Directionality.of(context)获取当前textDirection默认属性。", - "lever": 2, - "family": 5, - "linkIds": [ - 2, - 94 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Directionality基本使用", - "desc": [ - "【textDirection】 : 文字排列方向 【TextDirection】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/Directionality/node1_base.dart deleted file mode 100644 index ad9e15ebf..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Directionality/node1_base.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class DirectionalityDemo extends StatefulWidget { - const DirectionalityDemo({Key? key}) : super(key: key); - - @override - _DirectionalityDemoState createState() => _DirectionalityDemoState(); -} - -class _DirectionalityDemoState extends State { - TextDirection _textDirection = TextDirection.rtl; - - @override - Widget build(BuildContext context) { - return Directionality( - textDirection: _textDirection, - child: Container( - padding: const EdgeInsets.all(8), - width: 250, - color: Colors.grey.withAlpha(33), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - const Text( - 'A widget that determines the ambient directionality of text and text direction sensitive render objects.'), - _buildSwitch(), - const Text( - 'The text direction from the closest instance of this class that encloses the given context.'), - ], - ), - ), - ); - } - - Widget _buildSwitch() => Row( - children: [ - Switch( - value: _textDirection == TextDirection.rtl, - onChanged: (v) { - setState(() { - _textDirection = - v ? TextDirection.rtl : TextDirection.ltr; - }); - }, - ), - Text( - _textDirection.toString(), - style: const TextStyle(color: Colors.blue, fontSize: 18), - ) - ], - ); -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_de_DE.json deleted file mode 100644 index 60cf42c2e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "Trennlinienstil", - "info": "Wird hauptsächlich verwendet, um standardmäßige Attribute für Divider-Typ-Komponenten für Nachkommen festzulegen. Es kann auch verwendet werden, um die Standardattribute des Divider zu erhalten.", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DividerTheme Verwendung", - "desc": [ - "Die Attributeparameter ähneln denen von Divider. Die Trennlinienthemendaten können über DividerTheme.of abgerufen werden.", - "Es kann auch der Standardstil für Trennlinien von DividerTheme [Nachkommen] festgelegt werden, einschließlich Farbe, Dicke, Höhe usw." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_en_US.json deleted file mode 100644 index 06f197ecf..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "Divider Style", - "info": "Mainly used to set default properties for descendant Divider type components uniformly, and it can also be used to obtain the default properties of Divider.", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Using DividerTheme", - "desc": [ - "The property parameters are similar to Divider. You can obtain the divider theme data through DividerTheme.of,", - "and you can also set default styles for the dividers of DividerTheme【descendants】, including color, thickness, height, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_es_ES.json deleted file mode 100644 index c70cc491e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "Estilo de la línea divisoria", - "info": "Se utiliza principalmente para establecer propiedades predeterminadas unificadas para los componentes de tipo Divider descendientes, también se pueden obtener las propiedades predeterminadas de Divider a través de este componente.", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de DividerTheme", - "desc": [ - "Los parámetros de atributos son similares a Divider, se pueden obtener los datos del tema de la línea divisoria a través de DividerTheme.of, \"", - "también se pueden establecer estilos predeterminados para las líneas divisorias de los 【descendientes】 de DividerTheme, incluyendo color, grosor, altura, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_fr_FR.json deleted file mode 100644 index 4b025c39f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "Thème de séparateur", - "info": "Principalement utilisé pour définir les propriétés par défaut des composants de type Divider pour les descendants, ou pour obtenir les propriétés par défaut du Divider via ce composant.", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de DividerTheme", - "desc": [ - "Les paramètres d'attributs sont similaires à ceux de Divider, vous pouvez obtenir les données du thème de séparateur via DividerTheme.of, \"", - "vous pouvez également définir le style par défaut pour les séparateurs des descendants de DividerTheme, y compris la couleur, l'épaisseur, la hauteur, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_it_IT.json deleted file mode 100644 index 3479698b0..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "Stile della linea divisoria", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti di tipo Divider discendenti, è anche possibile ottenere le proprietà predefinite di Divider attraverso questo componente.", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di DividerTheme", - "desc": [ - "I parametri delle proprietà sono simili a Divider, è possibile ottenere i dati del tema della linea divisoria tramite DividerTheme.of,\"", - "è anche possibile impostare uno stile predefinito per le linee divisorie dei [discendenti] di DividerTheme, inclusi colore, spessore, altezza, ecc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ja_JP.json deleted file mode 100644 index 314f585d9..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "分割線スタイル", - "info": "主に子孫のDividerタイプコンポーネントにデフォルトのプロパティを統一して設定するために使用されます。また、このコンポーネントを通じてデフォルトのDividerのプロパティを取得することもできます。", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DividerThemeの使用", - "desc": [ - "プロパティパラメータはDividerと類似しており、DividerTheme.ofを使用して分割線のテーマデータを取得できます。\"", - "また、DividerTheme【子孫】の分割線にデフォルトのスタイルを設定することもできます。これには色、太さ、高さなどが含まれます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ko_KR.json deleted file mode 100644 index 52bb21f3f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "구분선 스타일", - "info": "주로 후손 Divider 타입 컴포넌트에 기본 속성을 통일적으로 설정하기 위해 사용되며, 이 컴포넌트를 통해 기본 Divider의 속성을 가져올 수도 있습니다.", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DividerTheme 사용", - "desc": [ - "속성 매개변수는 Divider와 유사하며, DividerTheme.of를 통해 구분선 테마 데이터를 가져올 수 있습니다.", - "또한 DividerTheme【후손】의 구분선에 기본 스타일을 설정할 수 있으며, 색상, 두께, 높이 등을 포함합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_pt_PT.json deleted file mode 100644 index 7165907d1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "Estilo da Linha Divisória", - "info": "Principalmente utilizado para definir propriedades padrão para componentes do tipo Divider descendentes, também pode ser usado para obter as propriedades padrão do Divider.", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do DividerTheme", - "desc": [ - "Os parâmetros de propriedade são semelhantes ao Divider, os dados do tema da linha divisória podem ser obtidos através de DividerTheme.of, \"", - "também pode definir o estilo padrão para as linhas divisórias dos descendentes do DividerTheme, incluindo cor, espessura, altura, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ru_RU.json deleted file mode 100644 index efb2c0a42..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "Стиль разделителя", - "info": "В основном используется для установки стандартных свойств для компонентов типа Divider для потомков, также можно получить свойства стандартного Divider через этот компонент.", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование DividerTheme", - "desc": [ - "Параметры свойств аналогичны Divider, можно получить данные темы разделителя через DividerTheme.of, \"", - "также можно установить стандартный стиль для разделителей потомков DividerTheme, включая цвет, толщину, высоту и т.д." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_zh-CN.json deleted file mode 100644 index 14fdb4f64..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 329, - "name": "DividerTheme", - "localName": "分割线样式", - "info": "主要用于为后代的Divider类型组件统一设置默认属性,也可以通过该组件获取默认Divider的属性。", - "lever": 3, - "family": 5, - "linkIds": [ - 34, - 35 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DividerTheme使用", - "desc": [ - "属性参数与Divider类似,可以通过DividerTheme.of获取分割线主题数据,\"", - "也可以为DividerTheme【后代】的分割线设置默认样式,包括颜色、粗细、高度等。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/node1_base.dart deleted file mode 100644 index e7ebf6bc7..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DividerTheme/node1_base.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-12 -/// contact me by email 1981462002@qq.com - - - -class DividerThemeDemo extends StatelessWidget { - const DividerThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return DividerTheme( - data: const DividerThemeData( - color: Colors.orange, - thickness: 2, - space: 10, - indent: 10, - endIndent: 10, - ), - child: Wrap( - spacing: 10, - children: [ - const Divider(), - const Divider(), - const Divider(), - const Divider(), - const Divider(), - SizedBox( - height: 100, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: const [ - VerticalDivider(), - VerticalDivider(), - VerticalDivider(), - VerticalDivider(), - VerticalDivider(), - ], - ), - ) - ], - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_de_DE.json deleted file mode 100644 index 244d73751..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "Dropdown-Schaltfläche Unterstreichung ausblenden", - "info": "Wird verwendet, um die Unterstreichung der Dropdown-Schaltfläche zu entfernen, hat an sich keinen praktischen Nutzen.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DropDownButtonHideUnderline Verwendung", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_en_US.json deleted file mode 100644 index 282aa47e5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "Dropdown Button Hide Underline", - "info": "Used to remove the underline of the DropdownButton, it has little practical value.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DropDownButtonHideUnderline Usage", - "desc": [ - "【child】 : Child component 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_es_ES.json deleted file mode 100644 index df48e9dd5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "Botón desplegable ocultar subrayado", - "info": "Se utiliza para eliminar el subrayado de DropdownButton, en sí no tiene mucho valor práctico.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de DropDownButtonHideUnderline", - "desc": [ - "【child】 : Componente hijo 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_fr_FR.json deleted file mode 100644 index d285d5844..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "Bouton déroulant masquer le soulignement", - "info": "Utilisé pour supprimer le soulignement du DropdownButton, il n'a pas beaucoup de valeur pratique en soi.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de DropDownButtonHideUnderline", - "desc": [ - "【child】 : Composant enfant 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_it_IT.json deleted file mode 100644 index 1f43b0036..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "Pulsante a discesa nascondi sottolineatura", - "info": "Utilizzato per rimuovere la sottolineatura del DropdownButton, di per sé non ha un grande valore applicativo.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di DropDownButtonHideUnderline", - "desc": [ - "【child】 : componente figlio 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ja_JP.json deleted file mode 100644 index ede68d691..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "ドロップダウンボタンの下線を非表示", - "info": "DropdownButtonの下線を除去するために使用されますが、それ自体にはあまり実用的な価値はありません。", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DropDownButtonHideUnderlineの使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ko_KR.json deleted file mode 100644 index 9314420e2..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "드롭다운 버튼 숨김 선", - "info": "DropdownButton의 밑줄을 제거하는 데 사용되며, 그 자체로는 큰 활용 가치가 없습니다.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DropDownButtonHideUnderline 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_pt_PT.json deleted file mode 100644 index c46534b9b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "Botão de Dropdown Ocultar Sublinhado", - "info": "Usado para remover o sublinhado do DropdownButton, por si só não tem grande valor prático.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do DropDownButtonHideUnderline", - "desc": [ - "【child】 : Componente filho 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ru_RU.json deleted file mode 100644 index c38d09245..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "Кнопка выпадающего списка скрыть подчеркивание", - "info": "Используется для удаления подчеркивания у DropdownButton, само по себе не имеет практической ценности.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование DropDownButtonHideUnderline", - "desc": [ - "【child】 : Дочерний компонент 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_zh-CN.json deleted file mode 100644 index d1efe39bb..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 181, - "name": "DropdownButtonHideUnderline", - "localName": "下拉按钮隐藏线", - "info": "用于去除DropdownButton的下划线,本身没有什么应用价值。", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DropDownButtonHideUnderline使用", - "desc": [ - "【child】 : 子组件 【Widget】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/node1_base.dart deleted file mode 100644 index b650621f0..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/DropdownButtonHideUnderline/node1_base.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class CustomDropDownButtonHideUnderline extends StatefulWidget { - const CustomDropDownButtonHideUnderline({Key? key}) : super(key: key); - - @override - _CustomDropDownButtonHideUnderlineState createState() => - _CustomDropDownButtonHideUnderlineState(); -} - -class _CustomDropDownButtonHideUnderlineState - extends State { - Color _color = Colors.red; - final List _colors = const[ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - final List _info = const["红色", "黄色", "蓝色", "绿色"]; - - @override - Widget build(BuildContext context) { - return Wrap( - children: [ - Container( - margin: const EdgeInsets.symmetric(horizontal: 20), - width: 50, - height: 50, - color: _color, - ), - DropdownButtonHideUnderline( - child: DropdownButton( - value: _color, - elevation: 1, - icon: Icon( - Icons.expand_more, - size: 20, - color: _color, - ), - items: _buildItems(), - onChanged: (Color? color) => - setState(() => _color = color ?? _color)), - ), - ], - ); - } - - List> _buildItems() => _colors - .map((e) => DropdownMenuItem( - value: e, - child: Text( - _info[_colors.indexOf(e)], - style: TextStyle(color: e), - ))) - .toList(); -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_de_DE.json deleted file mode 100644 index 4376d143a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "Erweitertes Widget", - "info": "Die übergeordnete Klasse ist Flexible, entspricht einem Flexible-Widget mit dem Fit-Typ tight. Kann verschachtelte Kinder verwenden, um den verbleibenden Platz zu erweitern.", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Expanded", - "desc": [ - "【child】 : Kind 【Widget】", - "【flex】 : Verhältnis der verbleibenden Platzverteilung 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_en_US.json deleted file mode 100644 index 916e40444..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "Extended Component", - "info": "The parent class is Flexible, equivalent to a Flexible component with a fit type of tight. It can nest children to utilize the remaining space to extend the placeholder space.", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Expanded", - "desc": [ - "【child】: child 【Widget】", - "【flex】: Proportion of remaining space allocation 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_es_ES.json deleted file mode 100644 index d363072b8..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "Componente Expandido", - "info": "La clase padre es Flexible, equivalente a un componente Flexible con un tipo fit tight. Puede anidar hijos para expandir el espacio de marcador utilizando el espacio restante.", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Expanded", - "desc": [ - "【child】 : hijo 【Widget】", - "【flex】 : proporción de asignación de espacio restante 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_fr_FR.json deleted file mode 100644 index 03bfcd0a7..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "Composant Étendu", - "info": "La classe parente est Flexible, équivalente à un composant Flexible avec un fit de type tight. Peut imbriquer des enfants pour utiliser l'espace restant pour étendre l'espace de placement.", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'Expanded", - "desc": [ - "【child】 : Enfant 【Widget】", - "【flex】 : Proportion de distribution de l'espace restant 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_it_IT.json deleted file mode 100644 index b0272f3c9..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "Componente Esteso", - "info": "La classe genitore è Flexible, equivalente a un componente Flexible con tipo fit tight. Può annidare figli per espandere lo spazio occupato utilizzando lo spazio rimanente.", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di Expanded", - "desc": [ - "【child】 : figlio 【Widget】", - "【flex】 : percentuale di allocazione dello spazio rimanente 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ja_JP.json deleted file mode 100644 index 39719a02a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "拡張コンポーネント", - "info": "親クラスはFlexibleで、fitタイプがtightのFlexibleコンポーネントに相当します。ネストされた子要素が残りのスペースを使用して占有スペースを拡張します。", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Expandedの基本的な使用法", - "desc": [ - "【child】 : 子要素 【Widget】", - "【flex】 : 残りスペースの配分比率 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ko_KR.json deleted file mode 100644 index 5ae804d4f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "확장 컴포넌트", - "info": "부모 클래스는 Flexible이며, fit 타입이 tight인 Flexible 컴포넌트와 동일합니다. 자식을 중첩하여 남은 공간을 사용하여 공간을 확장할 수 있습니다.", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Expanded 기본 사용법", - "desc": [ - "【child】 : 자식 【Widget】", - "【flex】 : 남은 공간 배분 비율 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_pt_PT.json deleted file mode 100644 index 3831e4733..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "Componente Expandido", - "info": "A classe pai é Flexible, equivalente a um componente Flexible com o tipo fit como tight. Pode aninhar filhos para utilizar o espaço restante e expandir o espaço ocupado.", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Expanded", - "desc": [ - "【child】 : filho 【Widget】", - "【flex】 : proporção de distribuição do espaço restante 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ru_RU.json deleted file mode 100644 index 3873c103a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "Расширяемый компонент", - "info": "Родительский класс - Flexible, эквивалент компоненту Flexible с типом fit tight. Может вкладывать дочерние элементы для расширения занимаемого пространства.", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Expanded", - "desc": [ - "【child】 : Дочерний элемент 【Widget】", - "【flex】 : Доля распределения оставшегося пространства 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_zh-CN.json deleted file mode 100644 index c6ddf83a3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 106, - "name": "Expanded", - "localName": "延展组件", - "info": "父类是Flexible,相当于一个fit类型为tight的Flexible组件。可嵌套孩子利用剩余空间对占位空间进行延展。", - "lever": 4, - "family": 5, - "linkIds": [ - 94, - 109 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Expanded基本使用", - "desc": [ - "【child】 : 孩子 【Widget】", - "【flex】 : 剩余空间分配占比 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/Expanded/node1_base.dart deleted file mode 100644 index b642cf5b3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Expanded/node1_base.dart +++ /dev/null @@ -1,46 +0,0 @@ - import 'package:flutter/material.dart'; -import 'package:widgets/utils/color_utils.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class CustomExpended extends StatefulWidget { - const CustomExpended({Key? key}) : super(key: key); - - @override - _CustomExpendedState createState() => _CustomExpendedState(); -} - -class _CustomExpendedState extends State { - @override - Widget build(BuildContext context) { - return Column( - children: [ - buildRow([0, 0, 0]), - const SizedBox(height: 10,), - buildRow([0, 0, 1]), - const SizedBox(height: 10,), - buildRow([1, 1, 1]), - const SizedBox(height: 10,), - buildRow([2, 3, 3]), - ], - ); - } - - Widget buildRow(List num) { - return Row( - children: num.map((e) => Expanded( - flex: e, - child: Container( - alignment: Alignment.center, - width: 50, - height: 50, - color: ColorUtils.randomColor(), - child: Text( - 'flex=$e', - style: const TextStyle(color: Colors.white), - ), - ), - )).toList()); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_de_DE.json deleted file mode 100644 index faa0e1fff..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "Flexible Komponente", - "info": "Kann nur in Row-, Column- und Flex-Layouts verwendet werden, kann Kinder verschachteln, um den verbleibenden Platz zu nutzen und den Platzhalterbereich zu erweitern, kann auch den Anpassungstyp angeben.", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Flexible", - "desc": [ - "【child】 : Kind 【Widget】", - "【fit】 : Anpassungsmodus*2 【FlexFit】", - "【flex】 : Anteil der verbleibenden Platzverteilung 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_en_US.json deleted file mode 100644 index db2399ef3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "Flexible Component", - "info": "Can only be used in Row, Column, and Flex layouts. It can nest children to utilize the remaining space to extend the placeholder space, and the adaptation type can also be specified.", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Flexible", - "desc": [ - "【child】: child 【Widget】", - "【fit】: adaptation mode*2 【FlexFit】", - "【flex】: remaining space allocation ratio 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_es_ES.json deleted file mode 100644 index 39e613ca9..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "Componente Flexible", - "info": "Solo se puede usar en diseños Row, Column y Flex, puede anidar hijos para extender el espacio de marcador de posición utilizando el espacio restante, también se puede especificar el tipo de adaptación.", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Flexible", - "desc": [ - "【child】 : hijo 【Widget】", - "【fit】 : modo de adaptación*2 【FlexFit】", - "【flex】 : proporción de asignación de espacio restante 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_fr_FR.json deleted file mode 100644 index 0c271f947..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "Composant Flexible", - "info": "Peut uniquement être utilisé dans les dispositions Row, Column et Flex, peut imbriquer des enfants pour étendre l'espace résiduel, et peut également spécifier le type d'adaptation.", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Flexible", - "desc": [ - "【child】 : Enfant 【Widget】", - "【fit】 : Mode d'adaptation*2 【FlexFit】", - "【flex】 : Proportion de l'allocation de l'espace résiduel 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_it_IT.json deleted file mode 100644 index 25a628dbd..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "Componente Flessibile", - "info": "Può essere utilizzato solo nei layout Row, Column e Flex, può annidare figli per espandere lo spazio rimanente, e può anche specificare il tipo di adattamento.", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di Flexible", - "desc": [ - "【child】 : Figlio 【Widget】", - "【fit】 : Modalità di adattamento*2 【FlexFit】", - "【flex】 : Percentuale di allocazione dello spazio rimanente 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ja_JP.json deleted file mode 100644 index 3ed301db6..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "フレキシブルコンポーネント", - "info": "Row、Column、Flexレイアウトでのみ使用可能で、ネストされた子要素を使用して残りのスペースを拡張したり、適応タイプを指定したりできます。", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Flexibleの基本使用", - "desc": [ - "【child】 : 子要素 【Widget】", - "【fit】 : 適応モード*2 【FlexFit】", - "【flex】 : 残りスペースの分配比率 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ko_KR.json deleted file mode 100644 index d683f4c53..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "유연한 컴포넌트", - "info": "Row, Column 및 Flex 레이아웃에서만 사용할 수 있으며, 자식을 중첩하여 남은 공간을 확장하거나 적응 유형을 지정할 수 있습니다.", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Flexible 기본 사용법", - "desc": [ - "【child】 : 자식 【Widget】", - "【fit】 : 적응 모드*2 【FlexFit】", - "【flex】 : 남은 공간 할당 비율 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_pt_PT.json deleted file mode 100644 index acd61655d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexível", - "localName": "Componente Flexível", - "info": "Só pode ser usado em layouts Row, Column e Flex, pode aninhar filhos para estender o espaço de preenchimento utilizando o espaço restante, e também pode especificar o tipo de ajuste.", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Flexible", - "desc": [ - "【child】 : filho 【Widget】", - "【fit】 : modo de ajuste*2 【FlexFit】", - "【flex】 : proporção de distribuição do espaço restante 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ru_RU.json deleted file mode 100644 index 4a71dd915..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "Гибкий компонент", - "info": "Может использоваться только в макетах Row, Column и Flex, может вкладывать дочерние элементы для расширения занимаемого пространства с использованием оставшегося пространства, также можно указать тип адаптации.", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Flexible", - "desc": [ - "【child】 : Дочерний элемент 【Widget】", - "【fit】 : Режим адаптации*2 【FlexFit】", - "【flex】 : Доля распределения оставшегося пространства 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_zh-CN.json deleted file mode 100644 index 4c7ff0ada..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 109, - "name": "Flexible", - "localName": "灵活组件", - "info": "只能用于只能用于Row、Column和Flex布局中,可嵌套孩子利用剩余空间对占位空间进行延展,也可指定适应类型。", - "lever": 3, - "family": 5, - "linkIds": [ - 94, - 106 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Flexible基本使用", - "desc": [ - "【child】 : 孩子 【Widget】", - "【fit】 : 适应模式*2 【FlexFit】", - "【flex】 : 剩余空间分配占比 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/Flexible/node1_base.dart deleted file mode 100644 index 39fd82d79..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Flexible/node1_base.dart +++ /dev/null @@ -1,85 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class CustomFlexible extends StatefulWidget { - const CustomFlexible({Key? key}) : super(key: key); - - @override - _CustomFlexibleState createState() => _CustomFlexibleState(); -} - -class _CustomFlexibleState extends State { - double _width = 300.0; - bool _loose = false; - - @override - Widget build(BuildContext context) { - return Column(children: [ - Container( - color: Colors.grey.withAlpha(33), - width: _width, - padding: const EdgeInsets.all(8.0), - child: Row( - children: [ - Flexible( - flex: 2, - child: Container( - alignment: Alignment.center, - height: 50, - color: Colors.red, - child: const Text( - 'flex=2', - style: TextStyle(color: Colors.white), - ), - ), - ), - Flexible( - flex: 3, - child: Container( - alignment: Alignment.center, - height: 50, - color: Colors.blue, - child: const Text( - 'flex=3', - style: TextStyle(color: Colors.white), - ), - ), - ), - Flexible( - flex: 4, - fit: _loose?FlexFit.loose:FlexFit.tight, - child: Container( - constraints: const BoxConstraints(maxWidth: 60), - alignment: Alignment.center, - height: 50, - color: Colors.green, - child: Text( - 'flex=4 \nfit:${_loose?'loose':'tight'}', - style: const TextStyle(color: Colors.white), - ), - ), - ) - ], - )), - _buildOp() - ]); - } - - Widget _buildOp() => Row( - children: [ - Switch( - value: _loose, - onChanged: (v) => setState(() => _loose = v)), - Expanded( - child: Slider( - divisions: 10, - min: 100, - max: 350, - value: _width, - onChanged: (v) => setState(() => _width = v)), - ), - ], - ); -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_de_DE.json deleted file mode 100644 index 0e9d23ecd..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "Icon-Stil", - "info": "Kann ein Kind aufnehmen und den Standardstil für die Icons der Nachkommen festlegen. Wird häufig verwendet, um den Stil mehrerer gleicher Icons zu vereinheitlichen und die individuelle Einstellung zu vermeiden.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Verwendung von IconTheme", - "desc": [ - "Kann die Icon-Themen-Daten über IconTheme.of abrufen und den Standardstil für die Icon-Komponenten der Nachkommen von IconTheme festlegen, einschließlich Farbe, Transparenz und Größe." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_en_US.json deleted file mode 100644 index 5fbd6356e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "Icon Style", - "info": "Can accommodate one child, specifying the default style for the descendant icons. Commonly used to unify the styles of multiple identical icons, avoiding setting them one by one.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconTheme Usage", - "desc": [ - "You can obtain the icon theme data through IconTheme.of, or set the default style for the icon components of IconTheme【descendants】, including color, opacity, and size." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_es_ES.json deleted file mode 100644 index 74294a705..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "Tema de iconos", - "info": "Puede contener un hijo y especifica un estilo predeterminado para los iconos de los descendientes. Se usa comúnmente para unificar el estilo de múltiples iconos idénticos, evitando configurarlos uno por uno.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de IconTheme", - "desc": [ - "Puede obtener los datos del tema de iconos a través de IconTheme.of, y también puede establecer un estilo predeterminado para los componentes de iconos de los descendientes de IconTheme, incluyendo color, transparencia y tamaño." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_fr_FR.json deleted file mode 100644 index 1f050871f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "Thème d'icône", - "info": "Peut contenir un enfant, spécifie le style par défaut pour les icônes des descendants. Souvent utilisé pour unifier le style de plusieurs icônes identiques, évitant ainsi de les configurer une par une.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de IconTheme", - "desc": [ - "Vous pouvez obtenir les données du thème d'icône via IconTheme.of, ou définir un style par défaut pour les composants d'icône des descendants de IconTheme, y compris la couleur, la transparence et la taille." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_it_IT.json deleted file mode 100644 index 9a7ab28fd..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "Tema Icona", - "info": "Può contenere un figlio, specifica lo stile predefinito per le icone dei discendenti. Comunemente utilizzato per uniformare lo stile di più icone identiche, evitando di impostarle una per una.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di IconTheme", - "desc": [ - "È possibile ottenere i dati del tema dell'icona tramite IconTheme.of, oppure impostare lo stile predefinito per i componenti icona dei discendenti di IconTheme, inclusi colore, trasparenza e dimensione." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ja_JP.json deleted file mode 100644 index 9445365c5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "アイコンテーマ", - "info": "子要素を1つ持つことができ、子孫のアイコンのデフォルトスタイルを指定します。複数の同じアイコンのスタイルを統一し、個別に設定する手間を省くために使用されます。", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconThemeの使用", - "desc": [ - "IconTheme.ofを使用してアイコンテーマデータを取得できます。また、IconThemeの【子孫】のアイコンコンポーネントにデフォルトのスタイル(色、透明度、サイズ)を設定できます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ko_KR.json deleted file mode 100644 index 329848a2f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "아이콘 스타일", - "info": "하나의 자식을 포함할 수 있으며, 후손 아이콘의 기본 스타일을 지정합니다. 여러 동일한 아이콘의 스타일을 통일하고, 일일이 설정하는 것을 방지하는 데 자주 사용됩니다.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconTheme 사용", - "desc": [ - "IconTheme.of를 통해 아이콘 테마 데이터를 얻을 수 있으며, IconTheme의 후손 아이콘 컴포넌트에 기본 스타일(색상, 투명도, 크기 등)을 설정할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_pt_PT.json deleted file mode 100644 index 002df5edc..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "Tema de Ícones", - "info": "Pode conter um filho, especificando o estilo padrão para ícones descendentes. Frequentemente usado para unificar o estilo de vários ícones idênticos, evitando a configuração individual.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do IconTheme", - "desc": [ - "Pode obter os dados do tema do ícone através de IconTheme.of, e também pode definir o estilo padrão para componentes de ícone descendentes de IconTheme, incluindo cor, transparência e tamanho." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ru_RU.json deleted file mode 100644 index 971249255..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "Тема иконок", - "info": "Может содержать один дочерний элемент, задающий стиль по умолчанию для иконок потомков. Часто используется для унификации стиля нескольких одинаковых иконок, чтобы избежать индивидуальной настройки.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование IconTheme", - "desc": [ - "Можно получить данные темы иконок через IconTheme.of, а также установить стиль по умолчанию для иконок-потомков IconTheme, включая цвет, прозрачность и размер." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_zh-CN.json deleted file mode 100644 index 945968e02..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 325, - "name": "IconTheme", - "localName": "图标样式", - "info": "可容纳一个孩子,为后代的图标指定默认样式。常用于多个相同图标的样式统一,避免一一设置。", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconTheme使用", - "desc": [ - "可以通过IconTheme.of获取图标主题数据,也可以为IconTheme【后代】的图标组件设置默认样式,包括颜色、透明度、尺寸。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/node1_base.dart deleted file mode 100644 index 19a609761..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/IconTheme/node1_base.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-12 -/// contact me by email 1981462002@qq.com - -class IconThemeDemo extends StatelessWidget { - const IconThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return IconTheme( - data: const IconThemeData( - color: Colors.purple, - opacity: 1.0, - size: 30 - ), - child: Wrap( - spacing: 10, - children: const[ - Icon(Icons.add), - Icon(Icons.ac_unit), - Icon(Icons.g_translate), - Icon(Icons.remove) - ], - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_de_DE.json deleted file mode 100644 index 7001d6835..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "Gemeinsames Modell", - "info": "Es ist eine abstrakte Unterklasse von InheritedWidget, die Daten über den Kontext an den Unterbaum weiterleitet und die Granularität der Abhängigkeitsbenachrichtigung über den Aspekt Aspect steuert.", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "Verwendung von InheritedModel", - "desc": [ - "【child】: Unterkomponente 【Widget】", - "Unten ist ein benutzerdefiniertes InheritedModel, das die gemeinsame Nutzung von Daten im Unterbaum implementiert; und definiert zwei Aspekte, Farbe und Wert, um die Granularität der Abhängigkeitsbenachrichtigung zu steuern." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_en_US.json deleted file mode 100644 index 3f2d61643..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "Shared Model", - "info": "It is an abstract subclass of InheritedWidget, which passes data to the subtree through context and controls the granularity of dependency notifications through Aspect.", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "InheritedModel Usage", - "desc": [ - "【child】: child component 【Widget】", - "Below is a custom InheritedModel that implements subtree sharing of data; and defines two aspects, color and value, to control the granularity of dependency notifications." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_es_ES.json deleted file mode 100644 index b257f274e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "Modelo Compartido", - "info": "Es una subclase abstracta de InheritedWidget, que pasa datos al subárbol a través del contexto y controla la granularidad de las notificaciones de dependencia a través del aspecto Aspect.", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso de InheritedModel", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "A continuación se muestra un InheritedModel personalizado que implementa el intercambio de datos en el subárbol; y define dos aspectos, color y valor, para controlar la granularidad de las notificaciones de dependencia." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_fr_FR.json deleted file mode 100644 index 9d7d8fe97..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "Modèle partagé", - "info": "Il s'agit d'une sous-classe abstraite de InheritedWidget, qui transmet des données au sous-arbre via le contexte, et contrôle la granularité des notifications de dépendance via l'aspect Aspect.", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de InheritedModel", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "Voici un InheritedModel personnalisé, qui permet le partage de données dans le sous-arbre ; et définit deux aspects, la couleur et la valeur, pour contrôler la granularité des notifications de dépendance." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_it_IT.json deleted file mode 100644 index cf2406c80..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "Modello Condiviso", - "info": "È una sottoclasse astratta di InheritedWidget, che passa i dati al sottoalbero tramite il contesto e controlla la granularità delle notifiche di dipendenza attraverso l'aspetto Aspect.", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso di InheritedModel", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "Di seguito è riportato un InheritedModel personalizzato che implementa la condivisione dei dati nel sottoalbero; e definisce due aspetti, colore e valore, per controllare la granularità delle notifiche di dipendenza." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ja_JP.json deleted file mode 100644 index f90449e8c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "共有モデル", - "info": "これは InheritedWidget の抽象サブクラスで、context を介してサブツリーにデータを渡し、Aspect の側面を介して依存通知の粒度を制御します。", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "InheritedModel の使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "以下はカスタム InheritedModel で、データのサブツリー共有を実装し、色と数値の二つの側面を定義して、依存通知の粒度を制御します。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ko_KR.json deleted file mode 100644 index f2cf7ee43..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "공유 모델", - "info": "이것은 InheritedWidget 추상 서브클래스로, context를 통해 서브트리에 데이터를 전달하고 Aspect 측면을 통해 의존성 알림의 세분화를 제어합니다.", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "InheritedModel 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "다음은 사용자 정의 InheritedModel로, 데이터의 서브트리 공유를 구현하고 색상과 값 두 가지 측면을 정의하여 의존성 알림의 세분화를 제어합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_pt_PT.json deleted file mode 100644 index b5735a27b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "Modelo Compartilhado", - "info": "É uma subclasse abstrata de InheritedWidget, que transmite dados para a subárvore através do context e controla a granularidade das notificações de dependência através do Aspect.", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso do InheritedModel", - "desc": [ - "【child】 : Componente filho 【Widget】", - "Abaixo está um InheritedModel personalizado, que implementa o compartilhamento de dados na subárvore; e define dois aspectos, cor e valor, para controlar a granularidade das notificações de dependência." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ru_RU.json deleted file mode 100644 index cc19d1a5d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "Общая модель", - "info": "Это абстрактный подкласс InheritedWidget, который передает данные в поддерево через context и управляет гранулярностью уведомлений о зависимостях через аспект Aspect.", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "Использование InheritedModel", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "Ниже приведен пример пользовательского InheritedModel, который реализует обмен данными в поддереве; а также определяет два аспекта: цвет и значение, чтобы управлять гранулярностью уведомлений о зависимостях." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_zh-CN.json deleted file mode 100644 index cd3566fab..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 336, - "name": "InheritedModel", - "localName": "共享模型", - "info": "它是 InheritedWidget 抽象子类,通过 context 向子树传递数据,并通过 Aspect 方面控制依赖通知的粒度。", - "lever": 4, - "family": 5, - "linkIds": [346], - "nodes": [ - { - "file": "node1.dart", - "name": "InheritedModel 使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "下面是一个自定义 InheritedModel,实现数据的子树共享;并且定义颜色和数值两个方面,控制依赖通知的粒度。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/node1.dart b/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/node1.dart deleted file mode 100644 index 6516f3b61..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedModel/node1.dart +++ /dev/null @@ -1,251 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class InheritedModelDemo extends StatefulWidget { - const InheritedModelDemo({super.key}); - - @override - State createState() => _InheritedModelDemoState(); -} - -class _InheritedModelDemoState extends State { - int _counter = 0; - late Color _color = colors.first; - - final List colors = const [ - Colors.black, - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green, - Colors.orange, - Colors.indigo, - Colors.purple, - ]; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - _CircleIconButton( - color: Colors.green, - icon: Icons.remove, - onPressed: _decrease, - ), - CounterModel( - color: _color, - counter: _counter, - child: const _BoxDecorationWrap(), - ), - _CircleIconButton( - color: Colors.blue, - icon: Icons.add, - onPressed: _increase, - ), - ], - ), - const SizedBox(height: 20), - _ColorSelector( - colors: colors, - activeColor: _color, - onSelect: _onSelectColor, - ) - ], - ); - } - - void _increase() { - setState(() => _counter += 1); - } - - void _decrease() { - setState(() => _counter -= 1); - } - - void _onSelectColor(Color value) { - setState(() { - _color = value; - }); - } -} -enum CounterAspect { color, value } - -class CounterModel extends InheritedModel { - const CounterModel({ - super.key, - this.color, - this.counter, - required super.child, - }); - - final Color? color; - final int? counter; - - static CounterModel? of(BuildContext context,CounterAspect aspect){ - return InheritedModel.inheritFrom(context, aspect: aspect); - } - - @override - bool updateShouldNotify(CounterModel oldWidget) { - return color != oldWidget.color || counter != oldWidget.counter; - } - - @override - bool updateShouldNotifyDependent(CounterModel oldWidget, Set dependencies) { - if (color != oldWidget.color && dependencies.contains(CounterAspect.color)) { - return true; - } - if (counter != oldWidget.counter && dependencies.contains(CounterAspect.value)) { - return true; - } - return false; - } -} - -class _CircleIconButton extends StatelessWidget { - final Color color; - final IconData icon; - final VoidCallback onPressed; - - const _CircleIconButton( - {super.key, - required this.color, - required this.icon, - required this.onPressed}); - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: onPressed, - child: Container( - margin: const EdgeInsets.symmetric(horizontal: 20), - decoration: const BoxDecoration( - color: Color(0xFFDFDFDF), - shape: BoxShape.circle, - ), - child: Padding( - padding: const EdgeInsets.all(2.0), - child: Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: color, - shape: BoxShape.circle, - // border: Border.all(width: 14.0, color: Color(0xFFDFDFDF)) - ), - child: Icon( - icon, - color: Colors.white, - size: 16, - ), - ), - ), - ), - ); - } -} - -class _ColorSelector extends StatelessWidget { - final List colors; - final ValueChanged onSelect; - final Color activeColor; - - const _ColorSelector({ - super.key, - required this.colors, - required this.activeColor, - required this.onSelect, - }); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 6, - children: colors - .map((e) => GestureDetector( - onTap: () => onSelect(e), - child: _buildCircle(e), - )) - .toList(), - ); - } - - Widget _buildCircle(Color color) { - return CircleAvatar( - radius: 12, - child: color == activeColor - ? const Icon( - Icons.check, - color: Colors.white, - size: 16, - ) - : null, - backgroundColor: color, - ); - } -} - -class _BoxDecorationWrap extends StatefulWidget { - const _BoxDecorationWrap({super.key}); - - @override - State<_BoxDecorationWrap> createState() => _BoxDecorationWrapState(); -} - -class _BoxDecorationWrapState extends State<_BoxDecorationWrap> { - - @override - void didChangeDependencies() { - print("======BoxDecorationWrap#didChangeDependencies========="); - super.didChangeDependencies(); - } - - @override - Widget build(BuildContext context) { - final Color color = CounterModel.of(context,CounterAspect.color)?.color ?? Colors.black; - return Container( - padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), - child: const _CounterText(), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color: color), - borderRadius: BorderRadius.circular(8), - boxShadow: [ - BoxShadow( - color: color, - spreadRadius: 2, - blurRadius: 8, - offset: const Offset(0, 0)) - ]), - ); - } -} - -class _CounterText extends StatefulWidget { - const _CounterText({super.key}); - - @override - State<_CounterText> createState() => _CounterTextState(); -} - -class _CounterTextState extends State<_CounterText> { - @override - void didChangeDependencies() { - print("======CounterText#didChangeDependencies========="); - super.didChangeDependencies(); - } - @override - Widget build(BuildContext context) { - final Color color = CounterModel.of(context,CounterAspect.color)?.color ?? Colors.black; - final int counter = CounterModel.of(context,CounterAspect.value)?.counter ?? 0; - return Text( - "Counter = $counter", - style: TextStyle(color: color,fontWeight: FontWeight.bold), - ); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_de_DE.json deleted file mode 100644 index 201bc84a2..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_de_DE.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "Vererbungsthema", - "info": "Es ist eine abstrakte Klasse mit vielen XXXTheme-bezogenen Unterklassen, die verwendet werden, um Eigenschaften wie Farben und Textstile zu definieren und diese Eigenschaften in Unterbäumen gemeinsam zu nutzen.", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in InheritedTheme", - "desc": [ - "InheritedTheme.capture kann das übergeordnete Thema erfassen und ein CapturedThemes-Objekt erhalten, durch dessen wrap-Methode das erfasste Thema routenübergreifend verwendet werden kann.", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_en_US.json deleted file mode 100644 index 1dce38c51..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_en_US.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "Inherited Theme", - "info": "It is an abstract class with many XXXTheme related subclasses, used to define properties such as colors and text styles, and share these properties in the subtree.", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to InheritedTheme", - "desc": [ - "InheritedTheme.capture can capture the upper theme, obtain the CapturedThemes object, and use the captured theme across routes through the wrap method of this object.", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_es_ES.json deleted file mode 100644 index bd1c9c21a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_es_ES.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "Tema Heredado", - "info": "Es una clase abstracta con muchas subclases relacionadas con XXXTheme, utilizadas para definir propiedades como colores, estilos de texto, etc., y compartir estas propiedades en el subárbol.", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a InheritedTheme", - "desc": [ - "InheritedTheme.capture puede capturar el tema superior y obtener un objeto CapturedThemes, a través del cual el método wrap puede usar el tema capturado entre rutas.", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_fr_FR.json deleted file mode 100644 index d2511a090..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_fr_FR.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "Thème Hérité", - "info": "C'est une classe abstraite, avec de nombreuses sous-classes XXXTheme associées, utilisées pour définir des propriétés telles que les couleurs, les styles de texte, etc., et partager ces propriétés dans l'arbre de sous-éléments.", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à InheritedTheme", - "desc": [ - "InheritedTheme.capture peut capturer le thème supérieur, obtenir un objet CapturedThemes, et utiliser la méthode wrap de cet objet pour utiliser le thème capturé à travers les routes.", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_it_IT.json deleted file mode 100644 index b7d18dd1b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_it_IT.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "Tema Ereditato", - "info": "È una classe astratta, con molte sottoclassi correlate a XXXTheme, utilizzate per definire proprietà come colori, stili di testo, ecc., e condividere queste proprietà all'interno del sottoalbero.", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a InheritedTheme", - "desc": [ - "InheritedTheme.capture può catturare il tema superiore, ottenendo un oggetto CapturedThemes, attraverso il metodo wrap di questo oggetto è possibile utilizzare il tema catturato attraverso le rotte.", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ja_JP.json deleted file mode 100644 index 37d3da27f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ja_JP.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "継承テーマ", - "info": "これは抽象クラスで、非常に多くの XXXTheme 関連のサブクラスがあり、色やテキストスタイルなどの属性を定義し、サブツリー内でこれらの属性を共有するために使用されます。", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InheritedTheme 紹介", - "desc": [ - "InheritedTheme.capture を使用して上位のテーマをキャプチャし、CapturedThemes オブジェクトを取得できます。このオブジェクトの wrap メソッドを使用して、キャプチャしたテーマをルート間で使用できます。", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ko_KR.json deleted file mode 100644 index 8d0752a10..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ko_KR.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "전통 테마", - "info": "추상 클래스이며, 많은 XXXTheme 관련 하위 클래스가 있어 색상, 텍스트 스타일 등의 속성을 정의하고 하위 트리에서 이러한 속성을 공유합니다.", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InheritedTheme 소개", - "desc": [ - "InheritedTheme.capture는 상위 테마를 캡처하여 CapturedThemes 객체를 가져올 수 있으며, 이 객체의 wrap 메서드를 통해 캡처한 테마를 라우터 간에 사용할 수 있습니다.", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_pt_PT.json deleted file mode 100644 index 7976fa9fe..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_pt_PT.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "Tema de Herança", - "info": "É uma classe abstrata, com muitas subclasses relacionadas a XXXTheme, usadas para definir propriedades como cores, estilos de texto, etc., e compartilhar essas propriedades na subárvore.", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao InheritedTheme", - "desc": [ - "InheritedTheme.capture pode capturar o tema superior, obter o objeto CapturedThemes, e através do método wrap desse objeto, o tema capturado pode ser usado entre rotas.", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ru_RU.json deleted file mode 100644 index c8f3df049..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_ru_RU.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "Тема наследования", - "info": "Это абстрактный класс, имеющий множество связанных подклассов XXXTheme, используемых для определения таких свойств, как цвета, стили текста и т.д., которые затем используются в поддереве.", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в InheritedTheme", - "desc": [ - "InheritedTheme.capture может захватывать тему верхнего уровня, получая объект CapturedThemes, через метод wrap которого можно использовать захваченную тему между маршрутами.", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_zh-CN.json deleted file mode 100644 index c300aa9e4..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/desc_zh-CN.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "id": 345, - "name": "InheritedTheme", - "localName": "传承主题", - "info": "它是抽象类,有非常多的 XXXTheme 相关子类,用于定义颜色、文字样式等属性,在子树中共享这些属性。", - "lever": 1, - "family": 5, - "linkIds": [ - 324, - 326, - 328, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InheritedTheme 介绍", - "desc": [ - "InheritedTheme.capture 可以抓取上层主题,获取 CapturedThemes 对象,通过该对象 wrap 方法可以跨路由使用抓到的主题。", - " ", - "", - "class InheritedThemeDemo extends StatelessWidget {", - " const InheritedThemeDemo({Key? key) : super(key: key);", - "", - "", - " @override", - " Widget build(BuildContext context) {", - " return const DefaultTextStyle(", - " style: TextStyle(fontSize: 24, color: Colors.blue),", - " child: TestBody(),", - " );", - " ", - "", - "", - "class TestBody extends StatelessWidget {", - " const TestBody({Key? key) : super(key: key);", - "", - " @override", - " Widget build(BuildContext context) {", - "", - " return GestureDetector(", - " onTap: () => _toNextPage(context),", - " child: Container(", - " height: 60,", - " margin: const EdgeInsets.only(left: 40,right: 40),", - " alignment: Alignment.center,", - " color: Theme.of(context).primaryColor.withOpacity(0.1),", - " child: const Text('InheritedTheme')));", - " ", - "", - " void _toNextPage(BuildContext context) {", - " final NavigatorState navigator = Navigator.of(context);", - " final CapturedThemes themes =", - " InheritedTheme.capture(from: context, to: navigator.context);", - " ", - " Navigator.of(context).push(", - " MaterialPageRoute(", - " builder: (BuildContext _) {", - " return themes.wrap(Container(", - " alignment: Alignment.center,", - " color: Colors.white,", - " child: Text('Flutter Unit')," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/node1_base.dart deleted file mode 100644 index 3fd4a5eee..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedTheme/node1_base.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class InheritedThemeDemo extends StatelessWidget { - const InheritedThemeDemo({super.key}); - - - @override - Widget build(BuildContext context) { - return const DefaultTextStyle( - style: TextStyle(fontSize: 24, color: Colors.blue), - child: TestBody(), - ); - } -} - -class TestBody extends StatelessWidget { - const TestBody({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - - return GestureDetector( - onTap: () => _toNextPage(context), - child: Container( - height: 60, - margin: const EdgeInsets.only(left: 40,right: 40), - alignment: Alignment.center, - color: Theme.of(context).primaryColor.withOpacity(0.1), - child: const Text('InheritedTheme'))); - } - - void _toNextPage(BuildContext context) { - // final NavigatorState navigator = Navigator.of(context); - // final CapturedThemes themes = - // InheritedTheme.capture(from: context, to: navigator.context); - // - // Navigator.of(context).push( - // MaterialPageRoute( - // builder: (BuildContext _) { - // return themes.wrap(Container( - // alignment: Alignment.center, - // color: Colors.white, - // child: Text('Flutter Unit'), - // )); - // }, - // ), - // ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_de_DE.json deleted file mode 100644 index e23bcbe8b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_de_DE.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "Vererbte Komponente", - "info": "Diese Klasse ist eine abstrakte Klasse, deren Funktion darin besteht, Daten im aktuellen Kontext zu speichern und diese Daten in den Kontexten der nachfolgenden Knoten gemeinsam zu nutzen. Es gibt viele Implementierungsklassen, einschließlich verschiedener Themenkomponenten, MediaQuery usw.", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Column", - "desc": [ - "【children】 : Komponentenliste 【List】", - "【mainAxisAlignment】 : Hauptachsenausrichtung 【MainAxisAlignment】", - "【crossAxisAlignment】 : Kreuzachsenausrichtung 【CrossAxisAlignment】", - "【textBaseline】 : Textbaseline 【TextBaseline】", - "【verticalDirection】 : Vertikale Richtung 【VerticalDirection】", - "【mainAxisSize】 : Hauptachsengröße 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "InheritedWidget Beispiel", - "desc": [ - "Unten wird die Verwendung der InheritedWidget-Komponente anhand eines Farbzählerprojekts gezeigt." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_en_US.json deleted file mode 100644 index e3e3c0e94..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_en_US.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "Inherited Widget", - "info": "This class is an abstract class, which can store data in this context and share that data in the context of its subsequent nodes. There are many implementation classes, including various theme components, MediaQuery, etc.", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Column", - "desc": [ - "【children】: Component list 【List】", - "【mainAxisAlignment】: Main axis alignment 【MainAxisAlignment】", - "【crossAxisAlignment】: Cross axis alignment 【CrossAxisAlignment】", - "【textBaseline】: Text baseline 【TextBaseline】", - "【verticalDirection】: Vertical direction 【VerticalDirection】", - "【mainAxisSize】: Main axis size 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "InheritedWidget Example", - "desc": [ - "Below is an example of using the InheritedWidget component through a color counter project." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_es_ES.json deleted file mode 100644 index 2a335a4b7..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_es_ES.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "Componente Heredado", - "info": "Esta clase es una clase abstracta que permite almacenar datos en este contexto y compartirlos en los contextos de sus nodos subsiguientes. Tiene muchas clases de implementación, incluyendo varios componentes temáticos, MediaQuery, etc.", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Column", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【mainAxisAlignment】 : Alineación del eje principal 【MainAxisAlignment】", - "【crossAxisAlignment】 : Alineación del eje transversal 【CrossAxisAlignment】", - "【textBaseline】 : Línea base del texto 【TextBaseline】", - "【verticalDirection】 : Dirección vertical 【VerticalDirection】", - "【mainAxisSize】 : Tamaño del eje principal 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "Ejemplo de InheritedWidget", - "desc": [ - "A continuación se muestra un proyecto de contador de colores que demuestra el uso del componente InheritedWidget." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_fr_FR.json deleted file mode 100644 index 0cba5d15d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_fr_FR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "Widget Hérité", - "info": "Cette classe est une classe abstraite, dont le rôle est de stocker des données dans ce contexte et de partager ces données dans les contextes des nœuds suivants. Il existe de nombreuses classes d'implémentation, y compris divers composants de thème, MediaQuery, etc.", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Column", - "desc": [ - "【children】 : Liste de composants 【List】", - "【mainAxisAlignment】 : Alignement de l'axe principal 【MainAxisAlignment】", - "【crossAxisAlignment】 : Alignement de l'axe transversal 【CrossAxisAlignment】", - "【textBaseline】 : Ligne de base du texte 【TextBaseline】", - "【verticalDirection】 : Direction verticale 【VerticalDirection】", - "【mainAxisSize】 : Taille de l'axe principal 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "Exemple de InheritedWidget", - "desc": [ - "Ci-dessous, un projet de compteur de couleur illustre l'utilisation du composant InheritedWidget." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_it_IT.json deleted file mode 100644 index b8fa4f6c4..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_it_IT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "Componente Ereditato", - "info": "Questa classe è astratta e ha la funzione di memorizzare dati nel contesto corrente e condividerli nei contesti dei nodi successivi. Ci sono molte classi di implementazione, inclusi vari componenti tematici, MediaQuery, ecc.", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di Column", - "desc": [ - "【children】 : Lista di componenti 【List】", - "【mainAxisAlignment】 : Allineamento dell'asse principale 【MainAxisAlignment】", - "【crossAxisAlignment】 : Allineamento dell'asse trasversale 【CrossAxisAlignment】", - "【textBaseline】 : Linea di base del testo 【TextBaseline】", - "【verticalDirection】 : Direzione verticale 【VerticalDirection】", - "【mainAxisSize】 : Dimensione dell'asse principale 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "Esempio di InheritedWidget", - "desc": [ - "Di seguito è mostrato l'uso del componente InheritedWidget attraverso un progetto di contatore di colori." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ja_JP.json deleted file mode 100644 index bff24ebee..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ja_JP.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "継承ウィジェット", - "info": "このクラスは抽象クラスで、このコンテキストにデータを保存し、その後のノードのコンテキストでそのデータを共有する役割を果たします。多くの実装クラスがあり、さまざまなテーマウィジェットやMediaQueryなどが含まれます。", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Columnの基本使用", - "desc": [ - "【children】 : ウィジェットリスト 【List】", - "【mainAxisAlignment】 : 主軸の整列 【MainAxisAlignment】", - "【crossAxisAlignment】 : 交差軸の整列 【CrossAxisAlignment】", - "【textBaseline】 : テキストベースライン 【TextBaseline】", - "【verticalDirection】 : 垂直方向 【VerticalDirection】", - "【mainAxisSize】 : 主軸のサイズ 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "InheritedWidget の使用例", - "desc": [ - "以下は、色カウンタープロジェクトを通じてInheritedWidgetウィジェットの使用を展示しています。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ko_KR.json deleted file mode 100644 index 99daa4cc5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ko_KR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "상속 위젯", - "info": "이 클래스는 추상 클래스로, 본 컨텍스트에서 데이터를 저장하고, 그 후속 노드의 컨텍스트에서 해당 데이터를 공유할 수 있습니다. 다양한 구현 클래스가 있으며, 다양한 테마 위젯, MediaQuery 등이 포함됩니다.", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Column 기본 사용", - "desc": [ - "【children】 : 위젯 리스트 【List】", - "【mainAxisAlignment】 : 메인 축 정렬 【MainAxisAlignment】", - "【crossAxisAlignment】 : 교차 축 정렬 【CrossAxisAlignment】", - "【textBaseline】 : 텍스트 기준선 【TextBaseline】", - "【verticalDirection】 : 수직 방향 【VerticalDirection】", - "【mainAxisSize】 : 메인 축 크기 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "InheritedWidget 예제", - "desc": [ - "아래는 색상 카운터 프로젝트를 통해 InheritedWidget 위젯의 사용을 보여줍니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_pt_PT.json deleted file mode 100644 index e56e8e501..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_pt_PT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "Componente Herdado", - "info": "Esta classe é abstrata e tem a função de armazenar dados no contexto atual e compartilhar esses dados nos contextos dos nós subsequentes. Existem muitas classes de implementação, incluindo vários componentes temáticos, MediaQuery, etc.", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Column", - "desc": [ - "【children】 : Lista de componentes 【List】", - "【mainAxisAlignment】 : Alinhamento do eixo principal 【MainAxisAlignment】", - "【crossAxisAlignment】 : Alinhamento do eixo cruzado 【CrossAxisAlignment】", - "【textBaseline】 : Linha de base do texto 【TextBaseline】", - "【verticalDirection】 : Direção vertical 【VerticalDirection】", - "【mainAxisSize】 : Tamanho do eixo principal 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "Exemplo de InheritedWidget", - "desc": [ - "Abaixo está um projeto de contador de cores que demonstra o uso do componente InheritedWidget." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ru_RU.json deleted file mode 100644 index 6c76cdeb8..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_ru_RU.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "Наследуемый компонент", - "info": "Этот класс является абстрактным и используется для хранения данных в текущем контексте и совместного использования этих данных в контекстах последующих узлов. Существует множество реализаций этого класса, включая различные тематические компоненты, MediaQuery и другие.", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Column", - "desc": [ - "【children】 : Список компонентов 【List】", - "【mainAxisAlignment】 : Выравнивание по главной оси 【MainAxisAlignment】", - "【crossAxisAlignment】 : Выравнивание по поперечной оси 【CrossAxisAlignment】", - "【textBaseline】 : Базовая линия текста 【TextBaseline】", - "【verticalDirection】 : Вертикальное направление 【VerticalDirection】", - "【mainAxisSize】 : Размер главной оси 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "Пример использования InheritedWidget", - "desc": [ - "Ниже приведен пример использования компонента InheritedWidget в проекте счетчика цветов." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_zh-CN.json deleted file mode 100644 index 8b8f53f8c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/desc_zh-CN.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 346, - "name": "InheritedWidget", - "localName": "传承组件", - "info": "该类是抽象类,作用是可以在本上下文存储数据,在其后续节点的上下文中共享该数据。有很多实现类,包括各种主题组件、MediaQuery等。", - "lever": 4, - "family": 5, - "linkIds": [ - 167, - 319, - 328, - 324, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Column基本使用", - "desc": [ - "【children】 : 组件列表 【List】", - "【mainAxisAlignment】 : 主轴对齐 【MainAxisAlignment】", - "【crossAxisAlignment】 : 交叉轴对齐 【CrossAxisAlignment】", - "【textBaseline】 : 文字基线 【TextBaseline】", - "【verticalDirection】 : 竖直方向 【VerticalDirection】", - "【mainAxisSize】 : 主轴尺寸 【MainAxisSize】" - ] - }, - { - "file": "node2_use.dart", - "name": "InheritedWidget 案例", - "desc": [ - "下面是通过一个颜色计数器项目展示 InheritedWidget 组件的使用。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/node1_base.dart deleted file mode 100644 index 823cbb2cf..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/node1_base.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - - -class InheritedWidgetDemo extends StatelessWidget { - final String info = - 'InheritedWidget 是一个抽象类,不可以直接使用。可以自定义对应共享数据的子类,如这里的通过 InfoInheritedWidget 实现:当前这段话可以在任意子树节点上下文获取。' - '一般都会定义一个 XXX.of(context) 的方法来获取数据,如 MediaQuery.of,Theme.of 等。'; - - const InheritedWidgetDemo({super.key}); - - @override - Widget build(BuildContext context) { - return InfoInheritedWidget( - info: info, - child: const InfoWidget(), - ); - } -} - -class InfoWidget extends StatelessWidget { - const InfoWidget({super.key}); - - @override - Widget build(BuildContext context) { - String info = InfoInheritedWidget.of(context)?.info??''; - - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} - -class InfoInheritedWidget extends InheritedWidget { - final String info; - - const InfoInheritedWidget({super.key,required this.info, required super.child}); - - @override - bool updateShouldNotify(covariant InfoInheritedWidget oldWidget) => - info != oldWidget.info; - - static InfoInheritedWidget? of(BuildContext context) => - context.dependOnInheritedWidgetOfExactType(); -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/node2_use.dart b/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/node2_use.dart deleted file mode 100644 index 4e2ec7d52..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/InheritedWidget/node2_use.dart +++ /dev/null @@ -1,218 +0,0 @@ - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com -/// -class InheritedWidgetDemo2 extends StatefulWidget { - const InheritedWidgetDemo2({super.key}); - - @override - State createState() => _InheritedWidgetDemo2State(); -} - -class InheritedCounter extends InheritedWidget { - const InheritedCounter({ - super.key, - this.color, - this.counter, - required super.child, - }); - - final Color? color; - final int? counter; - - static InheritedCounter? of(BuildContext context) { - return context.dependOnInheritedWidgetOfExactType(); - } - - @override - bool updateShouldNotify(InheritedCounter oldWidget) { - return color != oldWidget.color || counter != oldWidget.counter; - } -} - -class _InheritedWidgetDemo2State extends State { - int _counter = 0; - late Color _color = colors.first; - - final List colors = const [ - Colors.black, - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green, - Colors.orange, - Colors.indigo, - Colors.purple, - ]; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - CircleIconButton( - color: Colors.green, - icon: Icons.remove, - onPressed: _decrease, - ), - InheritedCounter( - color: _color, - counter: _counter, - child: const BoxDecorationWrap(), - ), - CircleIconButton( - color: Colors.blue, - icon: Icons.add, - onPressed: _increase, - ), - ], - ), - const SizedBox(height: 20), - ColorSelector( - colors: colors, - activeColor: _color, - onSelect: _onSelectColor, - ) - ], - ); - } - - void _increase() { - setState(() => _counter += 1); - } - - void _decrease() { - setState(() => _counter -= 1); - } - - void _onSelectColor(Color value) { - setState(() { - _color = value; - }); - } -} - -class CircleIconButton extends StatelessWidget { - final Color color; - final IconData icon; - final VoidCallback onPressed; - - const CircleIconButton( - {super.key, - required this.color, - required this.icon, - required this.onPressed}); - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: onPressed, - child: Container( - margin: const EdgeInsets.symmetric(horizontal: 20), - decoration: const BoxDecoration( - color: Color(0xFFDFDFDF), - shape: BoxShape.circle, - // border: Border.all(width: 14.0, color: Color(0xFFDFDFDF)) - ), - child: Padding( - padding: const EdgeInsets.all(2.0), - child: Container( - padding: const EdgeInsets.all(8), - decoration: BoxDecoration( - color: color, - shape: BoxShape.circle, - // border: Border.all(width: 14.0, color: Color(0xFFDFDFDF)) - ), - child: Icon( - icon, - color: Colors.white, - size: 16, - ), - ), - ), - ), - ); - } -} - -class ColorSelector extends StatelessWidget { - final List colors; - final ValueChanged onSelect; - final Color activeColor; - - const ColorSelector({ - super.key, - required this.colors, - required this.activeColor, - required this.onSelect, - }); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 6, - children: colors - .map((e) => GestureDetector( - onTap: () => onSelect(e), - child: _buildCircle(e), - )) - .toList(), - ); - } - - Widget _buildCircle(Color color) { - return CircleAvatar( - radius: 12, - child: color == activeColor - ? const Icon( - Icons.check, - color: Colors.white, - size: 16, - ) - : null, - backgroundColor: color, - ); - } -} - -class BoxDecorationWrap extends StatelessWidget { - const BoxDecorationWrap({super.key}); - - @override - Widget build(BuildContext context) { - final Color color = InheritedCounter.of(context)?.color ?? Colors.black; - return Container( - padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), - child: const CounterText(), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color: color), - borderRadius: BorderRadius.circular(8), - boxShadow: [ - BoxShadow( - color: color, - spreadRadius: 2, - blurRadius: 8, - offset: const Offset(0, 0)) - ]), - ); - } -} - -class CounterText extends StatelessWidget { - const CounterText({super.key}); - - @override - Widget build(BuildContext context) { - final Color? color = InheritedCounter.of(context)?.color; - final int counter = InheritedCounter.of(context)?.counter??0; - return Text( - "Counter = $counter", - style: TextStyle(color: color,fontWeight: FontWeight.bold), - ); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_de_DE.json deleted file mode 100644 index e152f61ff..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "Lebendig halten", - "info": "Ob der Zustand der Kinder in einer faul geladenen Liste lebendig gehalten werden soll. Ist die zugrunde liegende Implementierung von AutomaticKeepAlive und wird normalerweise nicht alleine verwendet.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in KeepAlive", - "desc": [ - "【child】 : *Kindkomponente 【Widget】", - "【keepAlive】 : *Ob lebendig gehalten wird 【bool】", - "In der Flutter-Framework-Ebene wird es nur in AutomaticKeepAlive verwendet, und im Quellcode wird auch gesagt, dass es selten alleine verwendet wird. Dieses Beispiel zeigt die Zustandserhaltung der ListView-Einträge." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_en_US.json deleted file mode 100644 index 231bcbdb3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "Keep Alive", - "info": "Whether the state of the child needs to be kept alive in a lazy-loaded list. It is the underlying implementation of AutomaticKeepAlive and is generally not used alone.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to KeepAlive", - "desc": [ - "【child】: *Child component 【Widget】", - "【keepAlive】: *Whether to keep alive 【bool】", - "In the Flutter framework layer, it is only used in AutomaticKeepAlive. The source code also mentions that it is rarely used alone. This example demonstrates the state keep-alive of ListView items." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_es_ES.json deleted file mode 100644 index 077935c48..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "Mantener activo", - "info": "En listas de carga perezosa, si el estado de los hijos necesita mantenerse activo. Es la implementación subyacente de AutomaticKeepAlive, generalmente no se usa por separado.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a KeepAlive", - "desc": [ - "【child】 : *Componente hijo 【Widget】", - "【keepAlive】 : *Si se mantiene activo 【bool】", - "En la capa del framework de Flutter, solo se usa en AutomaticKeepAlive, y en el código fuente también se menciona que rara vez se usa por separado. Este ejemplo muestra cómo mantener activo el estado de los elementos de ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_fr_FR.json deleted file mode 100644 index 6ff230cc6..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "Maintenir en vie", - "info": "Dans une liste chargée de manière paresseuse, faut-il maintenir l'état de l'enfant en vie. C'est l'implémentation sous-jacente de AutomaticKeepAlive, généralement pas utilisé seul.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à KeepAlive", - "desc": [ - "【child】 : *composant enfant 【Widget】", - "【keepAlive】 : *maintenir en vie 【bool】", - "Dans la couche framework de Flutter, il est uniquement utilisé dans AutomaticKeepAlive, et le code source indique qu'il est rarement utilisé seul. Cet exemple montre la maintenance de l'état des éléments de ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_it_IT.json deleted file mode 100644 index b3ec17cba..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "Mantenimento Attivo", - "info": "In una lista caricata in modo lazy, lo stato del bambino deve essere mantenuto attivo. È l'implementazione sottostante di AutomaticKeepAlive e generalmente non viene utilizzato da solo.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a KeepAlive", - "desc": [ - "【child】 : *componente figlio 【Widget】", - "【keepAlive】 : *se mantenere attivo 【bool】", - "Nel livello del framework Flutter, viene utilizzato solo in AutomaticKeepAlive, e il codice sorgente dice che è raramente usato da solo. Questo esempio mostra il mantenimento dello stato degli elementi di ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ja_JP.json deleted file mode 100644 index 77fce8d50..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "キープアライブ", - "info": "レイジーロードのリストで、子の状態をキープアライブする必要があるかどうか。AutomaticKeepAliveの基盤実装であり、通常は単独で使用しません。", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "KeepAlive 紹介", - "desc": [ - "【child】 : *子コンポーネント 【Widget】", - "【keepAlive】 : *キープアライブするかどうか 【bool】", - "Flutterフレームワーク層では、AutomaticKeepAliveでのみ使用され、ソースコードでも単独で使用することはほとんどないとされています。この例は、ListViewアイテムの状態をキープアライブすることを示しています。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ko_KR.json deleted file mode 100644 index 86a59289e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "유지", - "info": "지연 로딩된 목록에서 자식의 상태를 유지할 필요가 있는지 여부. AutomaticKeepAlive의 기본 구현이며, 일반적으로 단독으로 사용되지 않습니다.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "KeepAlive 소개", - "desc": [ - "【child】 : *자식 위젯 【Widget】", - "【keepAlive】 : *유지 여부 【bool】", - "flutter 프레임워크 레이어에서는 AutomaticKeepAlive에서만 사용되며, 소스 코드에서도 단독으로 사용하는 경우가 드물다고 언급합니다. 이 예제는 ListView 항목의 상태 유지를 보여줍니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_pt_PT.json deleted file mode 100644 index 91c0dfb6a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "Manter Ativo", - "info": "Em listas de carregamento preguiçoso, se o estado da criança precisa ser mantido ativo. É a implementação subjacente do AutomaticKeepAlive, geralmente não usado separadamente.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao KeepAlive", - "desc": [ - "【child】 : *componente filho 【Widget】", - "【keepAlive】 : *se deve manter ativo 【bool】", - "Na camada de framework do flutter, é usado apenas no AutomaticKeepAlive, e o código-fonte também diz que raramente é usado separadamente. Este exemplo mostra a manutenção do estado dos itens da ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ru_RU.json deleted file mode 100644 index 79c4db41d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "Поддержание активности", - "info": "Нужно ли сохранять состояние дочерних элементов в лениво загружаемом списке. Это базовая реализация AutomaticKeepAlive, обычно не используется отдельно.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в KeepAlive", - "desc": [ - "【child】 : *Дочерний компонент 【Widget】", - "【keepAlive】 : *Сохранять ли активность 【bool】", - "На уровне фреймворка Flutter используется только в AutomaticKeepAlive, в исходном коде также сказано, что он редко используется отдельно. Этот пример демонстрирует поддержание состояния элементов ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_zh-CN.json deleted file mode 100644 index 09a06bbb1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 316, - "name": "KeepAlive", - "localName": "保活", - "info": "在懒加载的列表中,孩子的状态是否需要保活。是 AutomaticKeepAlive 的底层实现,一般不单独使用。", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "KeepAlive 介绍", - "desc": [ - "【child】 : *子组件 【Widget】", - "【keepAlive】 : *是否保活 【bool】", - "在 flutter 框架层中,只用于 AutomaticKeepAlive 中,源码中也说很少单独使用它。该示例展示出 ListView 条目的状态保活。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/node1_base.dart deleted file mode 100644 index d9b6a7a16..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/KeepAlive/node1_base.dart +++ /dev/null @@ -1,113 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class KeepAliveDemo extends StatelessWidget { - const KeepAliveDemo({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - Colors.red[50]!, - Colors.red[100]!, - Colors.red[200]!, - Colors.red[300]!, - Colors.red[400]!, - Colors.red[500]!, - Colors.red[600]!, - Colors.red[700]!, - Colors.red[800]!, - Colors.red[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: ListView.builder( - itemCount: data.length, - itemBuilder: (_, index) => ColorBox( - color: data[index], - index: index, - ), - ), - ); - } -} - -class ColorBox extends StatefulWidget { - final Color color; - final int index; - - const ColorBox({ - Key? key, - required this.color, - required this.index, - }) : super(key: key); - - @override - _ColorBoxState createState() => _ColorBoxState(); -} - -class _ColorBoxState extends State with AutomaticKeepAliveClientMixin { - bool _checked = false; - - @override - void initState() { - super.initState(); - _checked = false; - print('-----_ColorBoxState#initState---${widget.index}-------'); - } - - @override - void dispose() { - print('-----_ColorBoxState#dispose---${widget.index}-------'); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - super.build(context); - - return Container( - alignment: Alignment.center, - height: 50, - color: widget.color, - child: Row( - children: [ - const SizedBox(width: 60), - Checkbox( - value: _checked, - onChanged: (bool? v) { - setState(() { - _checked = v??false; - }); - }, - ), - Text( - "index ${widget.index}: ${colorString(widget.color)}", - style: const TextStyle(color: Colors.white, shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ]), - ), - ], - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - @override - bool get wantKeepAlive => true; -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_de_DE.json deleted file mode 100644 index a03631fa3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "LayoutId", - "info": "Kann nur in der CustomMultiChildLayout-Komponente verwendet werden, um die Identität ihrer Kindkomponenten zu kennzeichnen.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Anwendungsfall von LayoutId", - "desc": [ - "【id】 : Identifikations-ID 【Object】", - "【child】 : Kindkomponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_en_US.json deleted file mode 100644 index 8ea435703..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "Layout Id", - "info": "Can only be used in the CustomMultiChildLayout component to identify its child components.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LayoutId Usage Scenarios", - "desc": [ - "【id】 : Identifier id 【Object】", - "【child】 : Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_es_ES.json deleted file mode 100644 index 41bbd70e8..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "Id de diseño", - "info": "Solo se puede usar en el componente CustomMultiChildLayout para identificar a sus componentes hijos.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Escenarios de uso de LayoutId", - "desc": [ - "【id】 : Identificador de id 【Object】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_fr_FR.json deleted file mode 100644 index 15dc1be99..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "Id de mise en page", - "info": "Ne peut être utilisé que dans le composant CustomMultiChildLayout pour identifier ses enfants.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scénario d'utilisation de LayoutId", - "desc": [ - "【id】 : Identifiant 【Object】", - "【child】 : Enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_it_IT.json deleted file mode 100644 index ca5ca4441..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "Id Layout", - "info": "Può essere utilizzato solo nel componente CustomMultiChildLayout per identificare i suoi componenti figli.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scenario di utilizzo di LayoutId", - "desc": [ - "【id】 : ID identificativo 【Object】", - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ja_JP.json deleted file mode 100644 index 798aaf9cd..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "レイアウトId", - "info": "CustomMultiChildLayoutコンポーネント内でのみ使用でき、その子コンポーネントの識別に使用されます。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LayoutIdの使用シナリオ", - "desc": [ - "【id】 : 識別id 【Object】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ko_KR.json deleted file mode 100644 index b7de4fba0..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "레이아웃 Id", - "info": "CustomMultiChildLayout 컴포넌트에서만 사용할 수 있으며, 자식 컴포넌트의 신원을 식별하는 데 사용됩니다.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LayoutId 사용 사례", - "desc": [ - "【id】 : 식별 id 【Object】", - "【child】 : 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_pt_PT.json deleted file mode 100644 index 223157706..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "Id de Layout", - "info": "Só pode ser usado no componente CustomMultiChildLayout para identificar os seus componentes filhos.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Cenários de uso do LayoutId", - "desc": [ - "【id】 : Identificador de id 【Object】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ru_RU.json deleted file mode 100644 index 263741ae5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "Идентификатор макета", - "info": "Может использоваться только в компоненте CustomMultiChildLayout для идентификации его дочерних компонентов.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Сценарии использования LayoutId", - "desc": [ - "【id】 : Идентификатор 【Object】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_zh-CN.json deleted file mode 100644 index b9799fb8e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 315, - "name": "LayoutId", - "localName": "布局Id", - "info": "只能用于CustomMultiChildLayout组件中,为其子组件标识身份。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LayoutId使用场景", - "desc": [ - "【id】 : 标识id 【Object】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/node1_base.dart deleted file mode 100644 index ce6b3179b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/LayoutId/node1_base.dart +++ /dev/null @@ -1,84 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/6/6 -/// contact me by email 1981462002@qq.com - - - -class LayoutIdDemo extends StatelessWidget { - const LayoutIdDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - width: 300, - height: 150, - color: Colors.grey.withAlpha(33), - child: CustomMultiChildLayout( - delegate: CornerCustomMultiChildLayout( - padding:const EdgeInsets.only(left: 10,top: 5,right: 10,bottom: 5), - ), - children: [ - LayoutId(id: CornerType.topLeft, child: const Box50(Colors.red)), - LayoutId(id: CornerType.topRight, child: const Box50(Colors.yellow)), - LayoutId(id: CornerType.bottomLeft, child: const Box50(Colors.blue)), - LayoutId(id: CornerType.bottomRight, child: const Box50(Colors.green)), - ], - ), - ); - } -} - -// 50 颜色盒 -class Box50 extends StatelessWidget { - final Color color; - const Box50(this.color, {Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - width: 50, - height: 50, - color: color, - ); - } -} - - -enum CornerType{ - topLeft, - topRight, - bottomLeft, - bottomRight -} - - -class CornerCustomMultiChildLayout extends MultiChildLayoutDelegate{ - final EdgeInsets padding; - - CornerCustomMultiChildLayout({this.padding = EdgeInsets.zero}); - - @override - void performLayout(Size size) { - if (hasChild(CornerType.topLeft)) { - layoutChild(CornerType.topLeft, BoxConstraints.loose(size)); - positionChild(CornerType.topLeft, Offset.zero.translate(padding.left, padding.top)); - } - if (hasChild(CornerType.topRight)) { - var childSize = layoutChild(CornerType.topRight, BoxConstraints.loose(size)); - positionChild(CornerType.topRight, Offset(size.width-childSize.width,0).translate(-padding.right, padding.top)); - } - if (hasChild(CornerType.bottomLeft)) { - var childSize = layoutChild(CornerType.bottomLeft, BoxConstraints.loose(size)); - positionChild(CornerType.bottomLeft, Offset(0,size.height-childSize.height).translate(padding.left, -padding.bottom)); - } - if (hasChild(CornerType.bottomRight)) { - var childSize = layoutChild(CornerType.bottomRight, BoxConstraints.loose(size)); - positionChild(CornerType.bottomRight, Offset(size.width-childSize.width,size.height-childSize.height).translate(-padding.right, -padding.bottom)); - } - } - - @override - bool shouldRelayout(CornerCustomMultiChildLayout oldDelegate) => oldDelegate.padding!=padding; -} - diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_de_DE.json deleted file mode 100644 index 7b9bbe125..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "ListTile-Thema", - "info": "Wird hauptsächlich verwendet, um Standardeigenschaften für nachfolgende ListTile-Komponenten festzulegen. Es kann auch verwendet werden, um die Standardeigenschaften von ListTile abzurufen.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ListTileTheme", - "desc": [ - "Kann die ListTileThemeData-Dateneigenschaften angeben, um Standardstile für nachfolgende ListTile-Komponenten festzulegen, wie Stile, Farben, Dekorationen, Ränder usw. Es kann auch ListTileTheme.of verwendet werden, um die Theme-Eigenschaften von ListTile abzurufen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_en_US.json deleted file mode 100644 index 33c921b6f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "ListTile Theme", - "info": "Mainly used to set default properties for descendant ListTile components uniformly, and also to obtain the default properties of ListTile through this component.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ListTileTheme", - "desc": [ - "You can specify the ListTileThemeData properties to set default styles for descendant ListTile components, such as styles, colors, decorations, margins, etc. You can also use ListTileTheme.of to get the theme properties of ListTile." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_es_ES.json deleted file mode 100644 index 46b6a0d13..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "Tema de ListTile", - "info": "Principalmente se utiliza para establecer propiedades predeterminadas unificadas para los componentes ListTile descendientes, y también se puede utilizar este componente para obtener las propiedades predeterminadas de ListTile.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ListTileTheme", - "desc": [ - "Se puede especificar la propiedad de datos ListTileThemeData para establecer estilos predeterminados para los componentes ListTile descendientes, como estilos, colores, decoraciones, márgenes, etc. También se puede usar ListTileTheme.of para obtener las propiedades temáticas de ListTile." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_fr_FR.json deleted file mode 100644 index ecef75787..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "Thème de ListTile", - "info": "Principalement utilisé pour définir les propriétés par défaut des composants ListTile descendants de manière unifiée. Il est également possible d'obtenir les propriétés par défaut de ListTile via ce composant.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ListTileTheme", - "desc": [ - "Vous pouvez spécifier les propriétés de données de ListTileThemeData pour définir le style par défaut des composants ListTile descendants, tels que le style, la couleur, la décoration, la marge, etc. Vous pouvez également utiliser ListTileTheme.of pour obtenir les propriétés du thème de ListTile." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_it_IT.json deleted file mode 100644 index e55865545..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "Tema ListTile", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti ListTile discendenti in modo uniforme, oppure per ottenere le proprietà predefinite di ListTile tramite questo componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ListTileTheme", - "desc": [ - "È possibile specificare le proprietà dei dati di ListTileThemeData per impostare lo stile predefinito per i componenti ListTile discendenti, come stile, colore, decorazione, margine, ecc. Inoltre, è possibile utilizzare ListTileTheme.of per ottenere le proprietà del tema di ListTile." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ja_JP.json deleted file mode 100644 index f6fe0cfdd..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "ListTileテーマ", - "info": "主に子孫のListTileコンポーネントにデフォルトのプロパティを一括設定するために使用されます。また、このコンポーネントを通じてデフォルトのListTileのプロパティを取得することもできます。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListTileThemeの基本使用", - "desc": [ - "ListTileThemeDataデータプロパティを指定して、子孫のListTileコンポーネントにデフォルトのスタイル(スタイル、色、装飾、余白など)を設定できます。また、ListTileTheme.ofを使用してListTileのテーマプロパティを取得することもできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ko_KR.json deleted file mode 100644 index 00696efc6..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "ListTile 테마", - "info": "주로 후손 ListTile 컴포넌트에 대한 기본 속성을 통일적으로 설정하는 데 사용되며, 이 컴포넌트를 통해 기본 ListTile의 속성을 얻을 수도 있습니다.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListTileTheme 기본 사용", - "desc": [ - "ListTileThemeData 데이터 속성을 지정하여 【후손】 ListTile 컴포넌트에 대한 기본 스타일(스타일, 색상, 장식, 여백 등)을 설정할 수 있습니다. ListTileTheme.of를 사용하여 ListTile의 테마 속성을 얻을 수도 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_pt_PT.json deleted file mode 100644 index b638b2bd3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "Tema do ListTile", - "info": "Principalmente usado para definir propriedades padrão unificadas para componentes ListTile descendentes, também pode ser usado para obter as propriedades padrão do ListTile.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do ListTileTheme", - "desc": [ - "Pode especificar os atributos de dados do ListTileThemeData para definir o estilo padrão para componentes ListTile descendentes, como estilo, cor, decoração, margens, etc. Também pode usar ListTileTheme.of para obter as propriedades do tema do ListTile." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ru_RU.json deleted file mode 100644 index 38e1d8aed..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "Тема ListTile", - "info": "В основном используется для установки свойств по умолчанию для компонентов ListTile-потомков, также можно получить свойства по умолчанию ListTile через этот компонент.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ListTileTheme", - "desc": [ - "Можно указать свойства данных ListTileThemeData для установки стилей по умолчанию для компонентов ListTile-потомков, таких как стили, цвета, декорации, отступы и т.д. Также можно использовать ListTileTheme.of для получения тематических свойств ListTile." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_zh-CN.json deleted file mode 100644 index 644f3b48e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 334, - "name": "ListTileTheme", - "localName": "ListTile主题", - "info": "主要用于为后代的ListTile组件统一设置默认属性,也可以通过该组件获取默认ListTile的属性。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListTileTheme基本使用", - "desc": [ - "可指定ListTileThemeData数据属性为【后代】的ListTile组件设置默认样式,如样式、颜色、装饰、边距等。也可以用ListTileTheme.of获取ListTile的主题属性。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/node1_base.dart deleted file mode 100644 index a0537638c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ListTileTheme/node1_base.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class ListTileThemeDemo extends StatelessWidget { - const ListTileThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ListTileTheme( - dense: false, - style: ListTileStyle.list, - selectedColor: Colors.blue, - contentPadding: const EdgeInsets.only(left: 15,right: 15,top: 5,bottom: 5), - iconColor: Colors.purple, - textColor: Colors.orange, - child: _ListTileSimple(), - ); - } -} - -class _ListTileSimple extends StatefulWidget { - @override - _ListTileSimpleState createState() => _ListTileSimpleState(); -} - -class _ListTileSimpleState extends State<_ListTileSimple> { - bool _selected = false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: ListTile( - leading: Image.asset("assets/images/icon_head.webp"), - selected: _selected, - title: const Text("以梦为马"), - subtitle: const Text("海子"), - trailing: const Icon(Icons.more_vert), - onTap: () => setState(() => _selected = !_selected), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_de_DE.json deleted file mode 100644 index bca3d929b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "Banner-Stil", - "info": "Wird hauptsächlich verwendet, um Standardeigenschaften für nachfolgende MaterialBanner-Komponenten festzulegen. Es kann auch verwendet werden, um die Standardeigenschaften von MaterialBanner abzurufen.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von MaterialBannerTheme", - "desc": [ - "Kann die MaterialBannerThemeData-Dateneigenschaften verwenden, um Standardstile für nachfolgende MaterialBanner-Komponenten festzulegen, wie Hintergrundfarbe, Abstände, Textstile usw. Es kann auch MaterialBannerTheme.of verwenden, um die Themedaten von MaterialBanner abzurufen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_en_US.json deleted file mode 100644 index 2eb954a3a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "Banner Style", - "info": "Mainly used to set default properties for descendant MaterialBanner components uniformly, and it can also be used to obtain the default properties of MaterialBanner.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of MaterialBannerTheme", - "desc": [ - "You can specify the MaterialBannerThemeData properties to set default styles for descendant MaterialBanner components, such as background color, margins, text styles, etc. You can also use MaterialBannerTheme.of to get the theme data of MaterialBanner." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_es_ES.json deleted file mode 100644 index 2e9d4278c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "Tema de Banner", - "info": "Principalmente utilizado para establecer propiedades predeterminadas unificadas para los componentes MaterialBanner descendientes. También se puede utilizar este componente para obtener las propiedades predeterminadas de MaterialBanner.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de MaterialBannerTheme", - "desc": [ - "Se puede especificar la propiedad de datos MaterialBannerThemeData para establecer el estilo predeterminado de los componentes MaterialBanner descendientes, como el color de fondo, el margen, el estilo de texto, etc. También se puede usar MaterialBannerTheme.of para obtener los datos del tema de MaterialBanner." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_fr_FR.json deleted file mode 100644 index 03c958f4e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "Thème de bannière", - "info": "Principalement utilisé pour définir les propriétés par défaut des composants MaterialBanner descendants, ou pour obtenir les propriétés par défaut de MaterialBanner via ce composant.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de MaterialBannerTheme", - "desc": [ - "Vous pouvez spécifier les propriétés de MaterialBannerThemeData pour définir le style par défaut des composants MaterialBanner descendants, tels que la couleur de fond, les marges, le style du texte, etc. Vous pouvez également utiliser MaterialBannerTheme.of pour obtenir les données de thème de MaterialBanner." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_it_IT.json deleted file mode 100644 index c9fc9050e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "Tema del Banner", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti MaterialBanner discendenti, è anche possibile ottenere le proprietà predefinite di MaterialBanner attraverso questo componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di MaterialBannerTheme", - "desc": [ - "È possibile specificare le proprietà di MaterialBannerThemeData per impostare lo stile predefinito per i componenti MaterialBanner discendenti, come il colore di sfondo, i margini, lo stile del testo, ecc. È anche possibile utilizzare MaterialBannerTheme.of per ottenere i dati del tema di MaterialBanner." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ja_JP.json deleted file mode 100644 index e2b376eb1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "バナースタイル", - "info": "主に子孫のMaterialBannerコンポーネントにデフォルトのプロパティを統一して設定するために使用されます。また、このコンポーネントを通じてデフォルトのMaterialBannerのプロパティを取得することもできます。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialBannerThemeの基本使用", - "desc": [ - "MaterialBannerThemeDataデータプロパティを指定して、【子孫】のMaterialBannerコンポーネントにデフォルトのスタイル(背景色、余白、テキストスタイルなど)を設定できます。また、MaterialBannerTheme.ofを使用してMaterialBannerのテーマデータを取得することもできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ko_KR.json deleted file mode 100644 index efcbab088..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "배너 스타일", - "info": "주로 후손 MaterialBanner 컴포넌트에 기본 속성을 통일적으로 설정하기 위해 사용되며, 이 컴포넌트를 통해 기본 MaterialBanner의 속성을 가져올 수도 있습니다.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialBannerTheme 기본 사용법", - "desc": [ - "MaterialBannerThemeData 데이터 속성을 지정하여 후손 MaterialBanner 컴포넌트의 기본 스타일을 설정할 수 있습니다. 예를 들어 배경색, 여백, 텍스트 스타일 등. 또한 MaterialBannerTheme.of를 사용하여 MaterialBanner의 테마 데이터를 가져올 수도 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_pt_PT.json deleted file mode 100644 index 9824f516b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "Tema de Banner", - "info": "Principalmente utilizado para definir propriedades padrão unificadas para componentes MaterialBanner descendentes, também pode ser usado para obter as propriedades padrão do MaterialBanner através deste componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do MaterialBannerTheme", - "desc": [ - "Pode especificar as propriedades de dados do MaterialBannerThemeData para definir o estilo padrão para componentes MaterialBanner descendentes, como cor de fundo, margens, estilo de texto, etc. Também pode usar MaterialBannerTheme.of para obter os dados do tema do MaterialBanner." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ru_RU.json deleted file mode 100644 index 342ca9a03..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "Тема баннера", - "info": "Основное использование — установка стандартных свойств для компонентов MaterialBanner у потомков. Также можно получить стандартные свойства MaterialBanner через этот компонент.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование MaterialBannerTheme", - "desc": [ - "Можно указать свойства данных MaterialBannerThemeData для установки стандартных стилей для компонентов MaterialBanner у потомков, таких как цвет фона, отступы, стиль текста и т.д. Также можно использовать MaterialBannerTheme.of для получения данных темы MaterialBanner." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_zh-CN.json deleted file mode 100644 index 63929b449..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 327, - "name": "MaterialBannerTheme", - "localName": "横幅样式", - "info": "主要用于为后代的MaterialBanner组件统一设置默认属性,也可以通过该组件获取默认MaterialBanner的属性。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialBannerTheme基本使用", - "desc": [ - "可指定MaterialBannerThemeData数据属性为【后代】的MaterialBanner组件设置默认样式,如背景色、边距、文字样式等。也可以用MaterialBannerTheme.of获取MaterialBanner的主题数据。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/node1_base.dart deleted file mode 100644 index 1a4d83d9d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MaterialBannerTheme/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - -class MaterialBannerThemeDemo extends StatelessWidget { - const MaterialBannerThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return MaterialBannerTheme( - data: MaterialBannerTheme.of(context).copyWith( - backgroundColor: Colors.purple, - padding: const EdgeInsetsDirectional.only(start: 16.0, top: 2.0,end: 2), - leadingPadding:const EdgeInsetsDirectional.only(end: 16.0) , - contentTextStyle: const TextStyle(color: Colors.white), - ), - child: _MaterialBannerDemo(), - ); - } -} - - -class _MaterialBannerDemo extends StatelessWidget { - final info = - 'A banner displays an important, succinct message, and provides actions for users to address. ' - 'A user action is required for itto be dismissed.'; - - @override - Widget build(BuildContext context) { - return Column( - children: [MaterialBanner( - content: Text(info), - leading: const Icon(Icons.warning, color: Colors.yellow), - actions: [ - ElevatedButton( - style: ElevatedButton.styleFrom(backgroundColor: Colors.white), - onPressed: () {}, - child: const Text( - 'I KNOW', - style: TextStyle( - color: Colors.purple, - fontWeight: FontWeight.bold, - fontSize: 14), - ), - ), - ElevatedButton( - style: ElevatedButton.styleFrom(backgroundColor: Colors.white), - onPressed: () {}, - child: const Text( - 'I IGNORE', - style: TextStyle( - color: Colors.purple, - fontWeight: FontWeight.bold, - fontSize: 14), - ), - ), - ], - )], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_de_DE.json deleted file mode 100644 index 641c9d93f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "Medienabfrage", - "info": "Über MediaQuery.of können Informationen wie Bildschirmgröße, Gerätedichte, Textskalierungsfaktor, Ränder usw. abgerufen werden.", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MediaQuery Dateninformationen abrufen", - "desc": [ - "MediaQuery.of(context) kann MediaQueryData abrufen" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_en_US.json deleted file mode 100644 index 187f601e6..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "Media Query", - "info": "You can use MediaQuery.of to obtain information such as screen size, device density, text scaling ratio, margins, etc.", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MediaQuery Get Data Information", - "desc": [ - "MediaQuery.of(context) can obtain MediaQueryData" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_es_ES.json deleted file mode 100644 index b1ba389b1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "Consulta de Medios", - "info": "Se puede obtener información como el tamaño de la pantalla, la densidad del dispositivo, la escala de texto, los márgenes, etc., a través de MediaQuery.of.", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Obtener información de datos con MediaQuery", - "desc": [ - "MediaQuery.of(context) puede obtener MediaQueryData" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_fr_FR.json deleted file mode 100644 index 51afde9bf..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "Requête média", - "info": "Vous pouvez obtenir des informations telles que la taille de l'écran, la densité de l'appareil, le facteur de zoom du texte, les marges, etc. via MediaQuery.of.", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Obtenir des informations de données avec MediaQuery", - "desc": [ - "MediaQuery.of(context) peut obtenir MediaQueryData" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_it_IT.json deleted file mode 100644 index f9fa1d2ef..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "Query sui media", - "info": "È possibile ottenere informazioni come dimensioni dello schermo, densità del dispositivo, scala del testo, margini, ecc. tramite MediaQuery.of.", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Ottenere informazioni sui dati con MediaQuery", - "desc": [ - "MediaQuery.of(context) può ottenere MediaQueryData" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ja_JP.json deleted file mode 100644 index 1994ff13d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "メディアクエリ", - "info": "MediaQuery.ofを使用して、画面サイズ、デバイスの密度、テキストのスケーリング比率、マージンなどの情報を取得できます。", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MediaQueryでデータ情報を取得", - "desc": [ - "MediaQuery.of(context)を使用してMediaQueryDataを取得できます" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ko_KR.json deleted file mode 100644 index 0edde099e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "미디어 쿼리", - "info": "MediaQuery.of를 통해 화면 크기, 기기 밀도, 텍스트 확대 비율, 여백 등의 정보를 얻을 수 있습니다.", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MediaQuery 데이터 정보 가져오기", - "desc": [ - "MediaQuery.of(context)를 통해 MediaQueryData를 얻을 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_pt_PT.json deleted file mode 100644 index d67c756fb..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "Consulta de Mídia", - "info": "Pode usar MediaQuery.of para obter informações como o tamanho da tela, densidade do dispositivo, escala de texto, margens, etc.", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Obter informações de dados com MediaQuery", - "desc": [ - "MediaQuery.of(context) pode obter MediaQueryData" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ru_RU.json deleted file mode 100644 index ba9d4b477..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "Медиа-запросы", - "info": "С помощью MediaQuery.of можно получить информацию о размере экрана, плотности устройства, масштабе текста, отступах и т.д.", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Получение данных через MediaQuery", - "desc": [ - "MediaQuery.of(context) позволяет получить MediaQueryData" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_zh-CN.json deleted file mode 100644 index ffb9a6efe..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 167, - "name": "MediaQuery", - "localName": "媒体查询", - "info": "可通过MediaQuery.of来获取屏幕尺寸、设备密度、文字缩放比例、边距等信息。", - "lever": 4, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MediaQuery获取数据信息", - "desc": [ - "MediaQuery.of(context)可以获取MediaQueryData" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/node1_base.dart deleted file mode 100644 index 9bf69e27d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/MediaQuery/node1_base.dart +++ /dev/null @@ -1,65 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - - -class CustomMediaQuery extends StatelessWidget { - const CustomMediaQuery({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - MediaQueryData queryData = MediaQuery.of(context); - Map data = { - "size": queryData.size, - "devicePixelRatio": queryData.devicePixelRatio.toStringAsFixed(1), - "textScaleFactor": queryData.textScaleFactor.toStringAsFixed(1), - "platformBrightness": queryData.platformBrightness, - "padding": queryData.padding, - "viewInsets": queryData.viewInsets, - "systemGestureInsets": queryData.padding, - "viewPadding": queryData.padding, - "physicalDepth": queryData.padding, - "alwaysUse24HourFormat": queryData.padding, - "accessibleNavigation": queryData.alwaysUse24HourFormat, - "invertColors": queryData.invertColors, - "highContrast": queryData.highContrast, - "disableAnimations": queryData.disableAnimations, - "boldText": queryData.boldText, - }; - - return Container( - height: 200, - color: Colors.grey.withAlpha(11), - child:ListView( - children: data.keys.map((e) => buildItem(e, data)).toList(), - ), - ); - } - - Widget buildItem(String e, Map data) => Column( - children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - e, - style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold), - ), - Text( - data[e].toString(), - style: const TextStyle(fontSize: 16, color: Colors.orange), - ) - ], - ), - ), - const Divider( - height: 1, - ) - ], - ); -} - - diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_de_DE.json deleted file mode 100644 index 57f4d6383..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "Elterndaten-Widget", - "info": "Abstrakte Klasse, die verwendet wird, um ParentData-Informationen mit RenderObjectWidget-Kindkomponenten zu verbinden. Seine Unterklassen sind Positioned, Flexible, Expanded usw. Diese Komponenten können nur unter bestimmten Komponenten verwendet werden.", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in ParentDataWidget", - "desc": [ - "【child】 : Kindkomponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_en_US.json deleted file mode 100644 index fff9f56f3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "Parent Data Widget", - "info": "An abstract class used to hook ParentData information to RenderObjectWidget child components. Its subclasses include Positioned, Flexible, Expanded, etc. These components can only be used under specific components.", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to ParentDataWidget", - "desc": [ - "【child】: Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_es_ES.json deleted file mode 100644 index ae003e089..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "Widget de Datos Parentales", - "info": "Clase abstracta utilizada para conectar información de ParentData a los subcomponentes de RenderObjectWidget. Sus subclases incluyen Positioned, Flexible, Expanded, etc., y estos componentes solo se pueden utilizar bajo componentes específicos.", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a ParentDataWidget", - "desc": [ - "【child】 : Subcomponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_fr_FR.json deleted file mode 100644 index 1727f5c3d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "Widget de données parentales", - "info": "Classe abstraite utilisée pour associer des informations ParentData à des widgets enfants RenderObjectWidget. Ses sous-classes incluent Positioned, Flexible, Expanded, etc., ces widgets ne peuvent être utilisés que sous des composants spécifiques.", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à ParentDataWidget", - "desc": [ - "【child】 : widget enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_it_IT.json deleted file mode 100644 index 0fcb14e8e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "Widget dei dati genitore", - "info": "Classe astratta utilizzata per collegare le informazioni ParentData ai widget figli di RenderObjectWidget. Le sue sottoclassi includono Positioned, Flexible, Expanded, ecc., e questi widget possono essere utilizzati solo sotto componenti specifici.", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a ParentDataWidget", - "desc": [ - "【child】 : Widget figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ja_JP.json deleted file mode 100644 index dd0bd64c6..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "親データウィジェット", - "info": "抽象クラスで、ParentData情報をRenderObjectWidgetの子ウィジェットにフックするために使用されます。そのサブクラスにはPositioned、Flexible、Expandedなどがあり、これらのウィジェットは特定のコンポーネントの下でのみ使用できます。", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ParentDataWidget 紹介", - "desc": [ - "【child】 : 子ウィジェット 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ko_KR.json deleted file mode 100644 index da5b2a450..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "부모 데이터 위젯", - "info": "추상 클래스, ParentData 정보를 RenderObjectWidget 자식 위젯에 연결하는 데 사용됩니다. 하위 클래스로는 Positioned, Flexible, Expanded 등이 있으며, 이러한 위젯은 특정 위젯 아래에서만 사용할 수 있습니다.", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ParentDataWidget 소개", - "desc": [ - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_pt_PT.json deleted file mode 100644 index c44ff6d48..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "Componente de Dados Parentais", - "info": "Classe abstrata usada para conectar informações de ParentData a componentes filhos de RenderObjectWidget. Suas subclasses incluem Positioned, Flexible, Expanded, etc. Esses componentes só podem ser usados sob componentes específicos.", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao ParentDataWidget", - "desc": [ - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ru_RU.json deleted file mode 100644 index 41988d6b2..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "Родительский виджет данных", - "info": "Абстрактный класс, используемый для привязки информации ParentData к дочерним виджетам RenderObjectWidget. Его подклассы включают Positioned, Flexible, Expanded и другие, которые могут использоваться только под определенными компонентами.", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в ParentDataWidget", - "desc": [ - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_zh-CN.json deleted file mode 100644 index 486af92d5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 347, - "name": "ParentDataWidget", - "localName": "父数据组件", - "info": "抽象类,用于将 ParentData 信息挂钩到 RenderObjectWidget 子组件上。其子类有 Positioned、Flexible、Expanded等,这些组件只能用于特定的组件之下。", - "lever": 1, - "family": 5, - "linkIds": [ - 106, - 109, - 108, - 315 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ParentDataWidget 介绍", - "desc": [ - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/node1_base.dart deleted file mode 100644 index 04ff5a959..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ParentDataWidget/node1_base.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ParentDataWidgetDemo extends StatelessWidget { - const ParentDataWidgetDemo({Key? key}) : super(key: key); - - final String info = - 'ParentDataWidget 是一个抽象类,不能直接使用,它拥有 ParentData 子类型的泛型,该泛型会限定该组件的适应场景。' - '如 Positioned 组件继承自 ParentDataWidget,就说明 Positioned 的上层组件必须使用 Stack 族组件。' - '如 Flexible 组件继承自 ParentDataWidget,就说明 Flexible 的上层组件必须使用 Flex 族组件。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_de_DE.json deleted file mode 100644 index 4aded2149..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "Popup-Menü-Stil", - "info": "Wird hauptsächlich verwendet, um Standardeigenschaften für die nachfolgenden PopupMenuButton-Komponenten festzulegen. Es kann auch verwendet werden, um die Standardeigenschaften des PopupMenu zu erhalten.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PopupMenuTheme", - "desc": [ - "Kann die PopupMenuThemeData-Dateneigenschaften verwenden, um Standardstile für die nachfolgenden PopupMenuButton-Komponenten festzulegen, wie Form, Schattentiefe, Farbe, Textstil usw. Kann auch PopupMenuTheme.of verwenden, um die Themedaten des PopupMenu zu erhalten." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_en_US.json deleted file mode 100644 index 39033a47d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "Popup Menu Theme", - "info": "Mainly used to set default properties uniformly for descendant PopupMenuButton components, and also to obtain the default properties of PopupMenu through this component.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PopupMenuTheme", - "desc": [ - "You can specify the PopupMenuThemeData properties to set default styles for descendant PopupMenuButton components, such as shape, elevation, color, text style, etc. You can also use PopupMenuTheme.of to obtain the theme data of PopupMenu." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_es_ES.json deleted file mode 100644 index ec0d9a692..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "Tema del menú emergente", - "info": "Se utiliza principalmente para establecer propiedades predeterminadas unificadas para los componentes PopupMenuButton descendientes, también se puede obtener las propiedades predeterminadas de PopupMenu a través de este componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PopupMenuTheme", - "desc": [ - "Se pueden especificar las propiedades de datos de PopupMenuThemeData para establecer estilos predeterminados para los componentes PopupMenuButton descendientes, como forma, profundidad de sombra, color, estilo de texto, etc. También se puede usar PopupMenuTheme.of para obtener los datos del tema de PopupMenu." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_fr_FR.json deleted file mode 100644 index 383382574..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "Thème du menu contextuel", - "info": "Principalement utilisé pour définir des propriétés par défaut unifiées pour les composants PopupMenuButton descendants. Il est également possible d'obtenir les propriétés par défaut de PopupMenu via ce composant.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PopupMenuTheme", - "desc": [ - "Vous pouvez spécifier les propriétés de données de PopupMenuThemeData pour définir des styles par défaut pour les composants PopupMenuButton descendants, tels que la forme, la profondeur de l'ombre, la couleur, le style de texte, etc. Vous pouvez également utiliser PopupMenuTheme.of pour obtenir les données de thème de PopupMenu." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_it_IT.json deleted file mode 100644 index 07caa85b8..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "Tema del menu a comparsa", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti PopupMenuButton discendenti, oppure per ottenere le proprietà predefinite del PopupMenu attraverso questo componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di PopupMenuTheme", - "desc": [ - "È possibile specificare le proprietà dei dati di PopupMenuThemeData per impostare lo stile predefinito per i componenti PopupMenuButton discendenti, come forma, profondità dell'ombra, colore, stile del testo, ecc. È anche possibile utilizzare PopupMenuTheme.of per ottenere i dati del tema del PopupMenu." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ja_JP.json deleted file mode 100644 index 4bd5bfd2f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "ポップアップメニュースタイル", - "info": "主に子孫のPopupMenuButtonコンポーネントにデフォルトのプロパティを統一して設定するために使用されます。また、このコンポーネントを通じてデフォルトのPopupMenuのプロパティを取得することもできます。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuThemeの基本使用", - "desc": [ - "PopupMenuThemeDataデータ属性を指定して、【子孫】のPopupMenuButtonコンポーネントにデフォルトのスタイルを設定できます。形状、影の深さ、色、テキストスタイルなどです。また、PopupMenuTheme.ofを使用してPopupMenuのテーマデータを取得することもできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ko_KR.json deleted file mode 100644 index e6683a3ec..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "팝업 메뉴 스타일", - "info": "주로 후손의 PopupMenuButton 컴포넌트에 기본 속성을 통일적으로 설정하기 위해 사용되며, 이 컴포넌트를 통해 기본 PopupMenu의 속성을 얻을 수도 있습니다.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuTheme 기본 사용", - "desc": [ - "PopupMenuThemeData 데이터 속성을 지정하여 후손의 PopupMenuButton 컴포넌트에 기본 스타일(예: 모양, 그림자, 색상, 텍스트 스타일 등)을 설정할 수 있습니다. 또한 PopupMenuTheme.of를 사용하여 PopupMenu의 테마 데이터를 얻을 수도 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_pt_PT.json deleted file mode 100644 index 30af0da89..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "Tema do Menu Pop-up", - "info": "Principalmente utilizado para definir propriedades padrão uniformes para os componentes PopupMenuButton descendentes, também é possível obter as propriedades padrão do PopupMenu através deste componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do PopupMenuTheme", - "desc": [ - "Pode especificar as propriedades de dados do PopupMenuThemeData para definir o estilo padrão para os componentes PopupMenuButton descendentes, como forma, profundidade de sombra, cor, estilo de texto, etc. Também é possível usar PopupMenuTheme.of para obter os dados do tema do PopupMenu." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ru_RU.json deleted file mode 100644 index bd6d8ef6e..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "Тема всплывающего меню", - "info": "Основное использование для установки стандартных свойств для компонентов PopupMenuButton потомков, также можно получить свойства стандартного PopupMenu через этот компонент.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PopupMenuTheme", - "desc": [ - "Можно указать атрибуты данных PopupMenuThemeData для установки стандартных стилей для компонентов PopupMenuButton потомков, таких как форма, глубина тени, цвет, стиль текста и т.д. Также можно использовать PopupMenuTheme.of для получения данных темы PopupMenu." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_zh-CN.json deleted file mode 100644 index 9158c8eee..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 330, - "name": "PopupMenuTheme", - "localName": "弹出菜单样式", - "info": "主要用于为后代的PopupMenuButton组件统一设置默认属性,也可以通过该组件获取默认PopupMenu的属性。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuTheme基本使用", - "desc": [ - "可指定PopupMenuThemeData数据属性为【后代】的PopupMenuButton组件设置默认样式,如形状、影深、颜色、文字样式等。也可以用PopupMenuTheme.of获取PopupMenu的主题数据。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/node1_base.dart deleted file mode 100644 index 3006a6ec1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PopupMenuTheme/node1_base.dart +++ /dev/null @@ -1,67 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - -class PopupMenuThemeDemo extends StatelessWidget { - const PopupMenuThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return PopupMenuTheme( - data: PopupMenuTheme.of(context).copyWith( - color: Colors.orangeAccent, - elevation: 1, - textStyle: const TextStyle(color: Colors.white), - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(20), - bottomRight: Radius.circular(20), - topRight: Radius.circular(5), - bottomLeft: Radius.circular(5), - )), - ), - child: _PopupMenuButtonSimple(), - ); - } -} - -class _PopupMenuButtonSimple extends StatefulWidget { - @override - _PopupMenuButtonSimpleState createState() => _PopupMenuButtonSimpleState(); -} - -class _PopupMenuButtonSimpleState extends State<_PopupMenuButtonSimple> { - final Map map = { - "关于": Icons.info_outline, - "帮助": Icons.help_outline, - "反馈": Icons.add_comment, - }; - - @override - Widget build(BuildContext context) { - return PopupMenuButton( - itemBuilder: (context) => buildItems(), - offset: const Offset(0, 50), - onSelected: print, - onCanceled: () => print('onCanceled'), - ); - } - - List> buildItems() { - return map.keys - .toList() - .map((e) => PopupMenuItem( - value: e, - child: Wrap( - spacing: 6, - children: [ - Icon( - map[e], - ), - Text(e), - ], - ))) - .toList(); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_de_DE.json deleted file mode 100644 index c0fd65b73..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "Positionierungskomponente", - "info": "Kann nur in einem Stack verwendet werden, ermöglicht die präzise Platzierung einer Komponente durch Angabe der Abstände von oben, links, rechts und unten.", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Positioned", - "desc": [ - "【child】 : Komponente 【Widget】", - "【top】 : Abstand zum oberen Elternteil 【double】", - "【right】 : Abstand zum rechten Elternteil 【double】", - "【left】 : Abstand zum linken Elternteil 【double】", - "【bottom】 : Abstand zum unteren Elternteil 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_en_US.json deleted file mode 100644 index 6c4ade675..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "Positioning Component", - "info": "Can only be used in Stack, allowing precise placement of a component by specifying distances from the top, left, right, and bottom.", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Positioned", - "desc": [ - "【child】: Component 【Widget】", - "【top】: Distance to the top of the parent 【double】", - "【right】: Distance to the right of the parent 【double】", - "【left】: Distance to the left of the parent 【double】", - "【bottom】: Distance to the bottom of the parent 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_es_ES.json deleted file mode 100644 index 9e450347b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "Componente de posicionamiento", - "info": "Solo se puede usar en Stack, permite especificar las distancias superior, izquierda, derecha e inferior para colocar un componente con precisión.", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Positioned", - "desc": [ - "【child】 : Componente 【Widget】", - "【top】 : Distancia al borde superior del padre 【double】", - "【right】 : Distancia al borde derecho del padre 【double】", - "【left】 : Distancia al borde izquierdo del padre 【double】", - "【bottom】 : Distancia al borde inferior del padre 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_fr_FR.json deleted file mode 100644 index a263004da..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "Composant de positionnement", - "info": "Ne peut être utilisé que dans une Stack, permet de positionner précisément un composant en spécifiant les distances par rapport au haut, bas, gauche et droite.", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Positioned", - "desc": [ - "【child】 : Composant 【Widget】", - "【top】 : Distance par rapport au haut du parent 【double】", - "【right】 : Distance par rapport à la droite du parent 【double】", - "【left】 : Distance par rapport à la gauche du parent 【double】", - "【bottom】 : Distance par rapport au bas du parent 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_it_IT.json deleted file mode 100644 index 1093c29e0..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "Componente di posizionamento", - "info": "Può essere utilizzato solo in Stack, consente di posizionare con precisione un componente specificando le distanze da sinistra, destra, alto e basso.", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Positioned", - "desc": [ - "【child】 : Componente 【Widget】", - "【top】 : Distanza dal bordo superiore del genitore 【double】", - "【right】 : Distanza dal bordo destro del genitore 【double】", - "【left】 : Distanza dal bordo sinistro del genitore 【double】", - "【bottom】 : Distanza dal bordo inferiore del genitore 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ja_JP.json deleted file mode 100644 index 0aedbae01..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "位置指定コンポーネント", - "info": "Stack内でのみ使用可能で、上下左右の距離を指定してコンポーネントを正確に配置できます。", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Positionedの基本使用", - "desc": [ - "【child】 : コンポーネント 【Widget】", - "【top】 : 親の上端までの距離 【double】", - "【right】 : 親の右端までの距離 【double】", - "【left】 : 親の左端までの距離 【double】", - "【bottom】 : 親の下端までの距離 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ko_KR.json deleted file mode 100644 index c29eeb19a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "위치 지정 컴포넌트", - "info": "Stack에서만 사용할 수 있으며, 상하좌우 거리를 지정하여 특정 컴포넌트를 정확하게 배치할 수 있습니다.", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Positioned 기본 사용법", - "desc": [ - "【child】 : 컴포넌트 【Widget】", - "【top】 : 상단에서 부모까지의 거리 【double】", - "【right】 : 우측에서 부모까지의 거리 【double】", - "【left】 : 좌측에서 부모까지의 거리 【double】", - "【bottom】 : 하단에서 부모까지의 거리 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_pt_PT.json deleted file mode 100644 index 58cee8aec..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "Componente de Posicionamento", - "info": "Só pode ser usado em Stack, pode especificar as distâncias superior, inferior, esquerda e direita para posicionar um componente com precisão.", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Positioned", - "desc": [ - "【child】 : Componente 【Widget】", - "【top】 : Distância do topo do pai 【double】", - "【right】 : Distância da direita do pai 【double】", - "【left】 : Distância da esquerda do pai 【double】", - "【bottom】 : Distância da base do pai 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ru_RU.json deleted file mode 100644 index afa91ee11..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "Компонент позиционирования", - "info": "Может использоваться только в Stack, позволяет точно разместить компонент, указав расстояния сверху, слева, справа и снизу.", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Positioned", - "desc": [ - "【child】 : Компонент 【Widget】", - "【top】 : Расстояние до верха родителя 【double】", - "【right】 : Расстояние до правого края родителя 【double】", - "【left】 : Расстояние до левого края родителя 【double】", - "【bottom】 : Расстояние до низа родителя 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_zh-CN.json deleted file mode 100644 index 75ba8c782..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 108, - "name": "Positioned", - "localName": "定位组件", - "info": "只能用于Stack中,可以指定左上右下的距离对某个组件进行位置精确安放。", - "lever": 3, - "family": 5, - "linkIds": [ - 97, - 159, - 121 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Positioned基本使用", - "desc": [ - "【child】 : 组件 【Widget】", - "【top】 : 到父顶距离 【double】", - "【right】 : 到父右距离 【double】", - "【left】 : 到父左距离 【double】", - "【bottom】 : 到父底距离 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/Positioned/node1_base.dart deleted file mode 100644 index c59c04c4a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/Positioned/node1_base.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class CustomPositioned extends StatelessWidget { - const CustomPositioned({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Widget yellowBox = Container( - color: Colors.yellow, - height: 100, - width: 100, - ); - - Widget redBox = Container( - color: Colors.red, - height: 90, - width: 90, - ); - - Widget greenBox = Container( - color: Colors.green, - height: 80, - width: 80, - ); - - Widget cyanBox = Container( - color: Colors.cyanAccent, - height: 70, - width: 70, - ); - - return Container( - width: 200, - height: 120, - color: Colors.grey.withAlpha(33), - child: Stack( - children: [ - yellowBox, - redBox, - Positioned(top: 20, left: 20, child: greenBox), - Positioned( - child: cyanBox, - bottom: 10, - right: 10, - ) - ], - )); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_de_DE.json deleted file mode 100644 index e027a2c9f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "Primärer Scroll-Controller", - "info": "Es ist eine Unterklasse von InheritedWidget und stellt den standardmäßigen ScrollController-Objekt für scrollbare Ansichten im Unterbaum über den Kontext bereit.", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in den PrimaryScrollController", - "desc": [ - "【controller】 : Scroll-Controller 【ScrollController】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_en_US.json deleted file mode 100644 index 7595d787d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "Primary Scroll Controller", - "info": "It is a subclass of InheritedWidget, providing a default ScrollController object to scrollable views in the subtree through context.", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to PrimaryScrollController", - "desc": [ - "【controller】: Scroll Controller 【ScrollController】", - "【child】: Child Widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_es_ES.json deleted file mode 100644 index 1441d306b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "Controlador de Desplazamiento Primario", - "info": "Es una subclase de InheritedWidget que proporciona un objeto ScrollController predeterminado a las vistas desplazables en el subárbol a través del contexto.", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a PrimaryScrollController", - "desc": [ - "【controller】 : Controlador de desplazamiento 【ScrollController】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_fr_FR.json deleted file mode 100644 index c097b0c61..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "Contrôleur de défilement initial", - "info": "C'est une sous-classe d'InheritedWidget qui fournit un objet ScrollController par défaut aux vues défilables dans le sous-arbre via le contexte.", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction de PrimaryScrollController", - "desc": [ - "【controller】 : Contrôleur de défilement 【ScrollController】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_it_IT.json deleted file mode 100644 index 729e3e7fb..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "Controllore di scorrimento iniziale", - "info": "È una sottoclasse di InheritedWidget, che fornisce un oggetto ScrollController predefinito alle viste scorrevoli nel sottoalbero tramite il contesto.", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a PrimaryScrollController", - "desc": [ - "【controller】 : Controllore di scorrimento 【ScrollController】", - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ja_JP.json deleted file mode 100644 index 467879239..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "初期スクロールコントローラー", - "info": "これは InheritedWidget のサブクラスで、context を通じてサブツリー内のスクロール可能なビューにデフォルトの ScrollController オブジェクトを提供します。", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PrimaryScrollController 紹介", - "desc": [ - "【controller】 : スクロールコントローラー 【ScrollController】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ko_KR.json deleted file mode 100644 index 5897c1b03..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "기본 스크롤 컨트롤러", - "info": "이것은 InheritedWidget의 하위 클래스로, context를 통해 하위 트리의 스크롤 가능한 뷰에 기본 ScrollController 객체를 제공합니다.", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PrimaryScrollController 소개", - "desc": [ - "【controller】 : 스크롤 컨트롤러 【ScrollController】", - "【child】 : 하위 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_pt_PT.json deleted file mode 100644 index d071d0476..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "Controlador de Deslocamento Inicial", - "info": "É uma subclasse de InheritedWidget que fornece um objeto ScrollController padrão para vistas roláveis na subárvore através do contexto.", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao PrimaryScrollController", - "desc": [ - "【controller】 : Controlador de Deslocamento 【ScrollController】", - "【child】 : Componente Filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ru_RU.json deleted file mode 100644 index 4c828ad70..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "Основной контроллер прокрутки", - "info": "Это подкласс InheritedWidget, который предоставляет объект ScrollController по умолчанию для прокручиваемых представлений в поддереве через контекст.", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в PrimaryScrollController", - "desc": [ - "【controller】 : Контроллер прокрутки 【ScrollController】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_zh-CN.json deleted file mode 100644 index 1e77d574f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 335, - "name": "PrimaryScrollController", - "localName": "初始滑动控制器", - "info": "它是 InheritedWidget 子类,通过 context 向子树中的可滑动视图提供默认的 ScrollController 对象。", - "lever": 1, - "family": 5, - "linkIds": [ - 349, - 344, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PrimaryScrollController 介绍", - "desc": [ - "【controller】 : 滑动控制器 【ScrollController】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/node1_base.dart deleted file mode 100644 index 076ac8dbe..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/PrimaryScrollController/node1_base.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/3/31 -/// contact me by email 1981462002@qq.com -/// - -class PrimaryScrollControllerDemo extends StatelessWidget { - const PrimaryScrollControllerDemo({Key? key}) : super(key: key); - - final String info = - 'PrimaryScrollController 是 InheritedWidget 子类,也就说明它可以为子树组件提供某些默认数据,' - '子树可以通过 context 来获取上层该组件的提供 ScrollController 对象。\n' - '对于一些可滑动组件 ScrollView、SingleChildScrollView、NestedScrollView 等,' - '在使用者未提供 ScrollController 时,且 primary 属性为 true 时(默认true) ,' - '会使用上层 PrimaryScrollController 组件提供的滑动控制器。\n' - '使用 MaterialApp 组件,其已经内置 PrimaryScrollController,'; - - @override - Widget build(BuildContext context) { - ScrollController? label = PrimaryScrollController.of(context); - - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info+"当前其持有的滑动控制器对象: $label"), - ); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_de_DE.json deleted file mode 100644 index aba9b5c57..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "iOS-Menüschaltfläche", - "info": "Muss eine scrollbare Komponente umschließen und durch das Verhalten-Attribut den Scroll-Effekt steuern, kann den blauen Schatten beim Scrollen entfernen usw.", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ScrollConfiguration", - "desc": [ - "【child】: Untergeordnete Komponente 【Widget】", - "【behavior】: Scrollverhalten 【ScrollBehavior】", - " Kann ScrollConfiguration verwenden, um den blauen Schatten in ListView zu entfernen" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_en_US.json deleted file mode 100644 index 502a531fd..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "iOS Menu Button", - "info": "Needs to wrap a scrollable component and control the scrolling effect through the behavior property, which can remove the blue shadow of the scrolling, etc.", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ScrollConfiguration", - "desc": [ - "【child】: Child component 【Widget】", - "【behavior】: Scroll behavior 【ScrollBehavior】", - " ScrollConfiguration can be used to remove the blue shadow of ListView" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_es_ES.json deleted file mode 100644 index 446a72a97..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "Botón de menú de iOS", - "info": "Necesita envolver un componente deslizable y controlar el efecto de deslizamiento a través de la propiedad behavior, lo que puede eliminar la sombra azul del deslizamiento, etc.", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ScrollConfiguration", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【behavior】 : Comportamiento de deslizamiento 【ScrollBehavior】", - " Puedes usar ScrollConfiguration para eliminar la sombra azul de ListView" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_fr_FR.json deleted file mode 100644 index 9e750c532..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "Bouton de menu iOS", - "info": "Doit envelopper un composant défilable et contrôler l'effet de défilement via la propriété behavior, peut supprimer l'ombre bleue du défilement, etc.", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ScrollConfiguration", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【behavior】 : Comportement de défilement 【ScrollBehavior】", - " Peut utiliser ScrollConfiguration pour supprimer l'ombre bleue de ListView" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_it_IT.json deleted file mode 100644 index 627b4a436..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "Pulsante menu ios", - "info": "Deve avvolgere un componente scorrevole e controllare l'effetto dello scorrimento attraverso la proprietà behavior, rimuovendo ad esempio l'ombra blu dello scorrimento.", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ScrollConfiguration", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【behavior】 : Comportamento di scorrimento 【ScrollBehavior】", - " Puoi usare ScrollConfiguration per rimuovere l'ombra blu da ListView" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ja_JP.json deleted file mode 100644 index 36c5d1ecc..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "iosメニューボタン", - "info": "スクロール可能なコンポーネントをラップし、behaviorプロパティを通じてスクロール効果を制御します。これにより、スクロール時の青色の影などを取り除くことができます。", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScrollConfigurationの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【behavior】 : スクロール動作 【ScrollBehavior】", - " ScrollConfigurationを使用してListViewの青色の影をなくすことができます" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ko_KR.json deleted file mode 100644 index ae09e759d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "ios 메뉴 버튼", - "info": "스크롤 가능한 컴포넌트를 감싸고 behavior 속성을 통해 스크롤 효과를 제어할 수 있으며, 스크롤 시 파란색 그림자 등을 제거할 수 있습니다.", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScrollConfiguration 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【behavior】 : 스크롤 동작 【ScrollBehavior】", - " ScrollConfiguration을 사용하여 ListView의 파란색 그림자를 제거할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_pt_PT.json deleted file mode 100644 index a5dad2f8c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "Botão de menu ios", - "info": "Precisa envolver um componente deslizável e controlar o efeito de deslize através da propriedade behavior, podendo remover a sombra azul do deslize, entre outros.", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do ScrollConfiguration", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【behavior】 : Comportamento de deslize 【ScrollBehavior】", - " Pode usar o ScrollConfiguration para remover a sombra azul do ListView" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ru_RU.json deleted file mode 100644 index 189999662..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "кнопка меню ios", - "info": "Необходимо обернуть прокручиваемый компонент и управлять эффектом прокрутки через свойство behavior, можно убрать синюю тень при прокрутке и т.д.", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ScrollConfiguration", - "desc": [ - "【child】 : дочерний компонент 【Widget】", - "【behavior】 : поведение прокрутки 【ScrollBehavior】", - " Можно использовать ScrollConfiguration, чтобы убрать синюю тень у ListView" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_zh-CN.json deleted file mode 100644 index 17e990a43..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 180, - "name": "ScrollConfiguration", - "localName": "ios菜单按钮", - "info": "需要包裹一个可滑动的组件,并通过behavior属性控制滑动的效果,可以去除滑动的蓝色阴影等。", - "lever": 3, - "family": 5, - "linkIds": [ - 162, - 163, - 164 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScrollConfiguration基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【behavior】 : 滑动行为 【ScrollBehavior】", - " 可以使用ScrollConfiguration让ListView无蓝色阴影" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/node1_base.dart deleted file mode 100644 index 5c18f5ab3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ScrollConfiguration/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class CustomScrollConfiguration extends StatelessWidget { - const CustomScrollConfiguration({super.key}); - - List get data => [ - Colors.cyan[50]!, - Colors.cyan[100]!, - Colors.cyan[200]!, - Colors.cyan[300]!, - Colors.cyan[400]!, - Colors.cyan[500]!, - Colors.cyan[600]!, - Colors.cyan[700]!, - Colors.cyan[800]!, - Colors.cyan[900]!, - ]; - - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ScrollConfiguration( - behavior: NoScrollBehavior(), child: _buildListView()), - ); - } - - Widget _buildListView() => ListView( - padding: const EdgeInsets.symmetric(horizontal: 5), - children: data - .map((color) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: color, - child: Text( - colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - )) - .toList(), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} - -class NoScrollBehavior extends ScrollBehavior { - @override - Widget buildViewportChrome( - BuildContext context, Widget child, AxisDirection axisDirection) => - child; -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_de_DE.json deleted file mode 100644 index 919e8b311..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "Schieberegler-Stil", - "info": "Kann ein Kind enthalten und gibt den Standardstil für nachfolgende Schieberegler an. Wird häufig verwendet, um den Stil von Schiebereglern zu vereinheitlichen und die individuelle Einstellung zu vermeiden. Kann auch verwendet werden, um den Stil von Schiebereglern anzupassen.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliderTheme Verwendung", - "desc": [ - "Kann SliderTheme.of verwenden, um das Slider-Themen-Datenobjekt zu erhalten, das eine Vielzahl von Attributen für die Einstellung des Schiebereglers enthält.", - "Kann Standardstile für Schaltflächenkomponenten von ButtonTheme [Nachkommen] festlegen, einschließlich Farbe, Form, Größe usw." - ] - }, - { - "file": "node2_diy.dart", - "name": "SliderTheme Stilanpassung für Schieberegler", - "desc": [ - "Durch thumbShape und valueIndicatorShape kann der Stil des Schiebereglers angepasst werden.", - "Hinweis: Dieses Beispiel bezieht sich auf SlideDemo in flutter-gallery" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_en_US.json deleted file mode 100644 index 95df2de42..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "Slider Style", - "info": "Can contain a child, specifies the default style for descendant Sliders. Commonly used for unifying the style of Sliders to avoid setting them one by one, and can also customize the style of Sliders.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliderTheme Usage", - "desc": [ - "You can obtain the Slider theme data object through SliderTheme.of, which contains a large number of properties for setting the Slider.", - "You can set the default style for the button components of ButtonTheme【descendants】, including color, shape, size, etc." - ] - }, - { - "file": "node2_diy.dart", - "name": "SliderTheme Customization for Slider", - "desc": [ - "You can customize the style of the Slider through thumbShape and valueIndicatorShape.", - "Note: This example refers to the SlideDemo in flutter-gallery" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_es_ES.json deleted file mode 100644 index 0c19c2c3c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "Estilo del deslizador", - "info": "Puede contener un hijo y especifica el estilo predeterminado para los Slider descendientes. Se usa comúnmente para unificar el estilo de los Slider, evitando configuraciones individuales, y también permite personalizar el estilo del Slider.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de SliderTheme", - "desc": [ - "Se puede obtener el objeto de datos del tema Slider a través de SliderTheme.of, que contiene una gran cantidad de propiedades para configurar el Slider.", - "Puede establecer el estilo predeterminado para los componentes de botón [descendientes] de ButtonTheme, incluyendo color, forma, tamaño, etc." - ] - }, - { - "file": "node2_diy.dart", - "name": "Personalización del estilo del Slider con SliderTheme", - "desc": [ - "Se puede personalizar el estilo del Slider a través de thumbShape y valueIndicatorShape.", - "Nota: Este ejemplo se basa en SlideDemo de flutter-gallery" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_fr_FR.json deleted file mode 100644 index c9db739c5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "Style du curseur", - "info": "Peut contenir un enfant, spécifie le style par défaut pour les descendants Slider. Souvent utilisé pour unifier le style des Slider, évitant de les configurer un par un, et permet également de personnaliser le style du Slider.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de SliderTheme", - "desc": [ - "Peut obtenir l'objet de données de thème Slider via SliderTheme.of, qui contient de nombreuses propriétés pour la configuration du Slider.\"", - "Peut définir un style par défaut pour les composants boutons des descendants de ButtonTheme, y compris la couleur, la forme, la taille, etc." - ] - }, - { - "file": "node2_diy.dart", - "name": "Personnalisation du style du Slider avec SliderTheme", - "desc": [ - "Permet de personnaliser le style du Slider via thumbShape et valueIndicatorShape.\"", - "Note: Cet exemple est inspiré de SlideDemo dans flutter-gallery" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_it_IT.json deleted file mode 100644 index 0da8d57b3..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "Stile del cursore", - "info": "Può contenere un figlio e specifica lo stile predefinito per i cursori discendenti. Comunemente utilizzato per unificare lo stile dei cursori, evitando di impostarli uno per uno, e consente anche la personalizzazione dello stile del cursore.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di SliderTheme", - "desc": [ - "È possibile ottenere l'oggetto dati del tema del cursore tramite SliderTheme.of, che contiene numerose proprietà per la configurazione del cursore.", - "È possibile impostare uno stile predefinito per i componenti del pulsante [discendenti] di ButtonTheme, inclusi colore, forma, dimensioni, ecc." - ] - }, - { - "file": "node2_diy.dart", - "name": "Personalizzazione dello stile del cursore con SliderTheme", - "desc": [ - "È possibile personalizzare lo stile del cursore tramite thumbShape e valueIndicatorShape.", - "Nota: Questo esempio si riferisce a SlideDemo in flutter-gallery" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ja_JP.json deleted file mode 100644 index 46441db3f..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "スライダースタイル", - "info": "1つの子要素を収容し、子孫のSliderにデフォルトのスタイルを指定します。Sliderのスタイル統一に使用され、個別に設定する必要がなく、Sliderのスタイルをカスタマイズすることもできます。", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliderThemeの使用", - "desc": [ - "SliderTheme.ofを使用してSliderのテーマデータオブジェクトを取得できます。これには、Sliderの設定に使用される多くの属性が含まれています。\"", - "ButtonTheme【子孫】のボタンコンポーネントにデフォルトのスタイルを設定できます。これには、色、形状、サイズなどが含まれます。" - ] - }, - { - "file": "node2_diy.dart", - "name": "SliderThemeによるSliderのスタイルカスタマイズ", - "desc": [ - "thumbShapeとvalueIndicatorShapeを使用してSliderのスタイルをカスタマイズできます。\"", - "注: この例はflutter-galleryのSlideDemoを参考にしています" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ko_KR.json deleted file mode 100644 index 09d0c5273..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "슬라이더 스타일", - "info": "하나의 자식을 포함할 수 있으며, 후손 Slider에 기본 스타일을 지정합니다. 주로 Slider의 스타일 통일을 위해 사용되며, 일일이 설정하는 것을 방지하고, Slider의 스타일을 커스터마이징할 수도 있습니다.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliderTheme 사용", - "desc": [ - "SliderTheme.of를 통해 Slider 테마 데이터 객체를 얻을 수 있으며, 여기에는 Slider 설정을 위한 다양한 속성이 포함되어 있습니다.", - "ButtonTheme【후손】의 버튼 컴포넌트에 기본 스타일을 설정할 수 있으며, 색상, 모양, 크기 등을 포함합니다." - ] - }, - { - "file": "node2_diy.dart", - "name": "SliderTheme를 통한 Slider 스타일 커스터마이징", - "desc": [ - "thumbShape와 valueIndicatorShape를 통해 Slider의 스타일을 커스터마이징할 수 있습니다.", - "참고: 이 예제는 flutter-gallery의 SlideDemo를 참고했습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_pt_PT.json deleted file mode 100644 index 7e669c11b..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "Estilo do Controlo Deslizante", - "info": "Pode conter um filho, especificando o estilo padrão para o Controlo Deslizante descendente. Comumente usado para unificar o estilo do Controlo Deslizante, evitando a configuração individual, também pode personalizar o estilo do Controlo Deslizante.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do SliderTheme", - "desc": [ - "Pode obter o objeto de dados do tema do Controlo Deslizante através de SliderTheme.of, que contém uma grande quantidade de propriedades para configurar o Controlo Deslizante.", - "Pode definir o estilo padrão para os componentes de botão [descendentes] do ButtonTheme, incluindo cor, forma, tamanho, etc." - ] - }, - { - "file": "node2_diy.dart", - "name": "Personalização do estilo do Controlo Deslizante com SliderTheme", - "desc": [ - "Através de thumbShape e valueIndicatorShape, pode personalizar o estilo do Controlo Deslizante.", - "Nota: Este exemplo é baseado no SlideDemo do flutter-gallery" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ru_RU.json deleted file mode 100644 index 0f4ed94a7..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "Стиль слайдера", - "info": "Может содержать один дочерний элемент, задает стиль по умолчанию для потомков Slider. Часто используется для унификации стилей Slider, чтобы избежать индивидуальной настройки, также позволяет настраивать стиль Slider.", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование SliderTheme", - "desc": [ - "Можно получить объект данных темы Slider через SliderTheme.of, который содержит множество свойств для настройки Slider.", - "Можно задать стиль по умолчанию для компонентов кнопок, являющихся потомками ButtonTheme, включая цвет, форму, размер и т.д." - ] - }, - { - "file": "node2_diy.dart", - "name": "Настройка стиля Slider с помощью SliderTheme", - "desc": [ - "С помощью thumbShape и valueIndicatorShape можно настроить стиль Slider.", - "Примечание: этот пример взят из SlideDemo в flutter-gallery" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_zh-CN.json deleted file mode 100644 index b027fa96a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 331, - "name": "SliderTheme", - "localName": "滑块样式", - "info": "可容纳一个孩子,为后代的Slider指定默认样式。常用于Slider的样式统一,避免一一设置,也可以对Slider进行样式定制。", - "lever": 3, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliderTheme使用", - "desc": [ - "可通过SliderTheme.of获取Slider主题数据对象,其中包含大量属性用于对Slider的设定。\"", - "可以为ButtonTheme【后代】的按钮组件设置默认样式,包括颜色、形状、尺寸等。" - ] - }, - { - "file": "node2_diy.dart", - "name": "SliderTheme对Slider的样式定制", - "desc": [ - "通过thumbShape和valueIndicatorShape可以对Slider进行样式定制。\"", - "注: 本例参考flutter-gallery中的SlideDemo" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/node1_base.dart deleted file mode 100644 index ecf420931..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/node1_base.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-12 -/// contact me by email 1981462002@qq.com - - -class SliderThemeDemo extends StatefulWidget { - const SliderThemeDemo({Key? key}) : super(key: key); - - @override - _SliderThemeDemoState createState() => _SliderThemeDemoState(); -} - -class _SliderThemeDemoState extends State { - double _bliss = 0.5; - - @override - Widget build(BuildContext context) { - return SliderTheme( - data: SliderTheme.of(context).copyWith(activeTrackColor: Colors.orange), - child: Slider( - min: 0.0, - max: 200.0, - divisions: 10, - label: _bliss.toStringAsFixed(1), - onChanged: (double value) { - setState(() { - _bliss = value; - }); - }, - value: _bliss, - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/node2_diy.dart b/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/node2_diy.dart deleted file mode 100644 index 9681384c2..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/SliderTheme/node2_diy.dart +++ /dev/null @@ -1,173 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-12 -/// contact me by email 1981462002@qq.com - - -class DIYSliderTheme extends StatefulWidget { - const DIYSliderTheme({Key? key}) : super(key: key); - - @override - _DIYSliderThemeState createState() => _DIYSliderThemeState(); -} - -class _DIYSliderThemeState extends State { - double _bliss = 0.5; - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - return SliderTheme( - data: theme.sliderTheme.copyWith( - activeTrackColor: Colors.deepPurple, - inactiveTrackColor: Colors.blue.withAlpha(55), - activeTickMarkColor: theme.colorScheme.onSurface.withOpacity(0.7), - inactiveTickMarkColor: theme.colorScheme.surface.withOpacity(0.7), - overlayColor: theme.colorScheme.onSurface.withOpacity(0.12), - thumbColor: Colors.deepPurple, - valueIndicatorColor: Colors.deepPurpleAccent, - thumbShape: _CustomThumbShape(), - valueIndicatorShape: _CustomValueIndicatorShape(), - valueIndicatorTextStyle: theme.primaryTextTheme.bodyMedium?.copyWith(color: theme.colorScheme.onSurface), - ), - child: Slider( - min: 0.0, - max: 200.0, - divisions: 10, - label: _bliss.toStringAsFixed(1), - onChanged: (double value) { - setState(() { - _bliss = value; - }); - }, - value: _bliss, - ), - ); - } -} - -class _CustomThumbShape extends SliderComponentShape { - static const double _thumbSize = 4.0; - static const double _disabledThumbSize = 3.0; - - @override - Size getPreferredSize(bool isEnabled, bool isDiscrete) { - return isEnabled - ? const Size.fromRadius(_thumbSize) - : const Size.fromRadius(_disabledThumbSize); - } - - static final Animatable sizeTween = Tween( - begin: _disabledThumbSize, - end: _thumbSize, - ); - - @override - void paint( - PaintingContext context, - Offset center, { - required Animation activationAnimation, - required Animation enableAnimation, - required bool isDiscrete, - required TextPainter labelPainter, - required RenderBox parentBox, - required SliderThemeData sliderTheme, - required TextDirection textDirection, - required double value, - required double textScaleFactor, - required Size sizeWithOverflow, - }) { - final Canvas canvas = context.canvas; - final ColorTween colorTween = ColorTween( - begin: sliderTheme.disabledThumbColor, - end: sliderTheme.thumbColor, - ); - final double size = _thumbSize * sizeTween.evaluate(enableAnimation); - final Path thumbPath = _downTriangle(size, center); - canvas.drawPath(thumbPath, - Paint()..color = colorTween.evaluate(enableAnimation) ?? Colors.blue); - } -} - -Path _upTriangle(double size, Offset thumbCenter) => - _downTriangle(size, thumbCenter, invert: true); - -Path _downTriangle(double size, Offset thumbCenter, {bool invert = false}) { - final Path thumbPath = Path(); - final double height = sqrt(3.0) / 2.0; - final double centerHeight = size * height / 3.0; - final double halfSize = size / 2.0; - final double sign = invert ? -1.0 : 1.0; - thumbPath.moveTo( - thumbCenter.dx - halfSize, thumbCenter.dy + sign * centerHeight); - thumbPath.lineTo(thumbCenter.dx, thumbCenter.dy - 2.0 * sign * centerHeight); - thumbPath.lineTo( - thumbCenter.dx + halfSize, thumbCenter.dy + sign * centerHeight); - thumbPath.close(); - return thumbPath; -} - -class _CustomValueIndicatorShape extends SliderComponentShape { - static const double _indicatorSize = 4.0; - static const double _disabledIndicatorSize = 3.0; - static const double _slideUpHeight = 30.0; - - @override - Size getPreferredSize(bool isEnabled, bool isDiscrete) { - return Size.fromRadius(isEnabled ? _indicatorSize : _disabledIndicatorSize); - } - - static final Animatable sizeTween = Tween( - begin: _disabledIndicatorSize, - end: _indicatorSize, - ); - - @override - void paint(PaintingContext context, Offset center, - {required Animation activationAnimation, - required Animation enableAnimation, - required bool isDiscrete, - required TextPainter labelPainter, - required RenderBox parentBox, - required SliderThemeData sliderTheme, - required TextDirection textDirection, - required double value, - required double textScaleFactor, - required Size sizeWithOverflow}) { - final Canvas canvas = context.canvas; - final ColorTween enableColor = ColorTween( - begin: sliderTheme.disabledThumbColor, - end: sliderTheme.valueIndicatorColor, - ); - final Tween slideUpTween = Tween( - begin: 0.0, - end: _slideUpHeight, - ); - final double size = _indicatorSize * sizeTween.evaluate(enableAnimation); - final Offset slideUpOffset = - Offset(0.0, -slideUpTween.evaluate(activationAnimation)); - final Path thumbPath = _upTriangle(size, center + slideUpOffset); - final Color paintColor = enableColor - .evaluate(enableAnimation) - ?.withAlpha((255.0 * activationAnimation.value).round()) ?? - Colors.black; - canvas.drawPath( - thumbPath, - Paint()..color = paintColor, - ); - canvas.drawLine( - center, - center + slideUpOffset, - Paint() - ..color = paintColor - ..style = PaintingStyle.stroke - ..strokeWidth = 2.0); - labelPainter.paint( - canvas, - center + - slideUpOffset + - Offset(-labelPainter.width / 2.0, -labelPainter.height - 4.0)); - } -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_de_DE.json deleted file mode 100644 index 1a1cc3b50..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "Tabellenzelle", - "info": "Muss in den Nachkommen der Table-Komponente verwendet werden, um die vertikale Ausrichtung der Tabellenkinder zu steuern, und hat keine große Bedeutung.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von TableCell", - "desc": [ - "【child】 : Komponente 【Widget】", - "【verticalAlignment】 : Vertikale Ausrichtung 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_en_US.json deleted file mode 100644 index d1228b6fc..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "Table Cell", - "info": "Must be used within the descendants of a Table component to control the vertical alignment of table children, and it doesn't have much significant function.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of TableCell", - "desc": [ - "【child】: Component 【Widget】", - "【verticalAlignment】: Vertical Alignment 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_es_ES.json deleted file mode 100644 index 9166ac778..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "Celda de tabla", - "info": "Debe usarse en los descendientes del componente Table, para controlar la alineación vertical de los hijos de la tabla, y no tiene un gran efecto.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de TableCell", - "desc": [ - "【child】 : Componente 【Widget】", - "【verticalAlignment】 : Alineación vertical 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_fr_FR.json deleted file mode 100644 index db2ee9d81..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "Cellule de tableau", - "info": "Doit être utilisé dans la descendance du composant Table, pour contrôler l'alignement vertical des enfants du tableau, et n'a pas beaucoup d'effet.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de TableCell", - "desc": [ - "【child】 : Composant 【Widget】", - "【verticalAlignment】 : Alignement vertical 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_it_IT.json deleted file mode 100644 index 90ae875a1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "Cella della tabella", - "info": "Deve essere utilizzato all'interno dei discendenti del componente Table, per controllare l'allineamento verticale dei figli della tabella, e non ha un ruolo particolarmente significativo.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di TableCell", - "desc": [ - "【child】 : Componente 【Widget】", - "【verticalAlignment】 : Allineamento verticale 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ja_JP.json deleted file mode 100644 index cd93b7eaa..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "表室", - "info": "Tableコンポーネントの子孫で使用する必要があり、表の子の垂直方向の整列を制御するために使用されますが、大きな役割はありません。", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TableCellの基本的な使用法", - "desc": [ - "【child】 : コンポーネント 【Widget】", - "【verticalAlignment】 : 垂直方向の整列 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ko_KR.json deleted file mode 100644 index 2540d6fdd..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "테이블 셀", - "info": "Table 컴포넌트의 후손에서 사용해야 하며, 테이블 자식의 수직 정렬 방식을 제어하는 데 사용되며 큰 역할은 없습니다.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TableCell 기본 사용", - "desc": [ - "【child】 : 컴포넌트 【Widget】", - "【verticalAlignment】 : 수직 정렬 방식 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_pt_PT.json deleted file mode 100644 index df8c90a05..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "Célula da Tabela", - "info": "Deve ser usado nos descendentes do componente Table, para controlar o alinhamento vertical dos filhos da tabela, e não tem um grande impacto.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do TableCell", - "desc": [ - "【child】 : Componente 【Widget】", - "【verticalAlignment】 : Alinhamento Vertical 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ru_RU.json deleted file mode 100644 index 143246f06..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "Ячейка таблицы", - "info": "Должен использоваться в потомках компонента Table для управления вертикальным выравниванием дочерних элементов таблицы, но не имеет большого значения.", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование TableCell", - "desc": [ - "【child】 : Компонент 【Widget】", - "【verticalAlignment】 : Вертикальное выравнивание 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_zh-CN.json deleted file mode 100644 index ec9d663de..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 317, - "name": "TableCell", - "localName": "表室", - "info": "必须在 Table 组件的后代中使用,用于控制表孩子的竖直方向对齐方式,并没是什么太大的作用。", - "lever": 1, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TableCell基本使用", - "desc": [ - "【child】 : 组件 【Widget】", - "【verticalAlignment】 : 竖直对齐方式 【TableCellVerticalAlignment】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/TableCell/node1_base.dart deleted file mode 100644 index cd9dce2cc..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TableCell/node1_base.dart +++ /dev/null @@ -1,72 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class TableCellDemo extends StatelessWidget { - const TableCellDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - _ItemBean title = _ItemBean("单位称", "量纲", "单位", "单位名称", "单位符号"); - _ItemBean m = _ItemBean("长度", "L", "1m", "米", "m"); - _ItemBean kg = _ItemBean("质量", "M", "1Kg", "千克", "Kg"); - _ItemBean s = _ItemBean("时间", "T", "1s", "秒", "s"); - _ItemBean a = _ItemBean("安培", "Ι", "1A", "安培", "A"); - _ItemBean k = _ItemBean("热力学温度", "θ", "1K", "开尔文", "K"); - _ItemBean mol = _ItemBean("物质的量", "N", "1mol", "摩尔", "mol"); - _ItemBean cd = _ItemBean("发光强度", "J", "1cd", "坎德拉", "cd"); - - List<_ItemBean> data = [title, m, kg, s, a, k, mol, cd]; - - return SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: Table( - columnWidths: const { - 0: FixedColumnWidth(80.0), - 1: FixedColumnWidth(80.0), - 2: FixedColumnWidth(80.0), - 3: FixedColumnWidth(80.0), - 4: FixedColumnWidth(80.0), - }, - defaultVerticalAlignment: TableCellVerticalAlignment.middle, - border: TableBorder.all( - color: Colors.orangeAccent, width: 1.0, style: BorderStyle.solid), - children: data - .map((item) => TableRow(children: [ - TableCell( - verticalAlignment: TableCellVerticalAlignment.bottom, - child: Text( - item.name, - style: const TextStyle(color: Colors.blue), - )), - TableCell( - verticalAlignment: TableCellVerticalAlignment.baseline, - child: Text(item.symbol)), - TableCell( - verticalAlignment: TableCellVerticalAlignment.top, - child: Text(item.unitSymbol)), - TableCell( - verticalAlignment: TableCellVerticalAlignment.fill, - child: Text(item.unitName)), - TableCell( - verticalAlignment: TableCellVerticalAlignment.middle, - child: SizedBox(height: 30, child: Text(item.unit)), - ), - ])) - .toList(), - ), - ); - } -} - -class _ItemBean { - String name; - String symbol; - String unit; - String unitName; - String unitSymbol; - - _ItemBean(this.name, this.symbol, this.unit, this.unitName, this.unitSymbol); -} diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_de_DE.json deleted file mode 100644 index b03e2be3c..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "Schaltflächenstil", - "info": "Wird hauptsächlich verwendet, um Standardattribute für nachfolgende ToggleButtons-Komponenten festzulegen. Es kann auch verwendet werden, um die Standardattribute von ToggleButtons abzurufen.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ToggleButtonsTheme", - "desc": [ - "Mit ToggleButtonsThemeData können Standardstile wie Rahmenstil, Farbe, Dekoration usw. für nachfolgende ToggleButtons-Komponenten festgelegt werden. Mit ToggleButtonsTheme.of können auch die Themendaten von ToggleButtons abgerufen werden." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_en_US.json deleted file mode 100644 index 8b9d2017a..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "Slider Style", - "info": "Mainly used to set default properties for descendant ToggleButtons components uniformly. You can also get the default properties of ToggleButtons through this component.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ToggleButtonsTheme", - "desc": [ - "You can specify the ToggleButtonsThemeData properties to set default styles for descendant ToggleButtons components, such as border style, color, decoration, etc. You can also use ToggleButtonsTheme.of to get the theme data of ToggleButtons." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_es_ES.json deleted file mode 100644 index 0cfe28b17..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "Tema de botones de alternancia", - "info": "Se utiliza principalmente para establecer propiedades predeterminadas unificadas para los componentes ToggleButtons descendientes, también se puede obtener las propiedades predeterminadas de ToggleButtons a través de este componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ToggleButtonsTheme", - "desc": [ - "Se puede especificar la propiedad de datos ToggleButtonsThemeData para establecer estilos predeterminados para los componentes ToggleButtons descendientes, como estilos de borde, colores, decoraciones, etc. También se puede usar ToggleButtonsTheme.of para obtener los datos del tema de ToggleButtons." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_fr_FR.json deleted file mode 100644 index 34f273eeb..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "Thème des boutons bascule", - "info": "Principalement utilisé pour définir des propriétés par défaut unifiées pour les composants ToggleButtons descendants, ou pour obtenir les propriétés par défaut des ToggleButtons via ce composant.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ToggleButtonsTheme", - "desc": [ - "Vous pouvez spécifier les propriétés de données de ToggleButtonsThemeData pour définir le style par défaut des composants ToggleButtons descendants, tels que le style de bordure, la couleur, la décoration, etc. Vous pouvez également utiliser ToggleButtonsTheme.of pour obtenir les données de thème des ToggleButtons." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_it_IT.json deleted file mode 100644 index 2e7b70693..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "Tema dei pulsanti di commutazione", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti ToggleButtons dei discendenti. È anche possibile ottenere le proprietà predefinite dei ToggleButtons tramite questo componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ToggleButtonsTheme", - "desc": [ - "È possibile specificare le proprietà dei dati ToggleButtonsThemeData per impostare lo stile predefinito per i componenti ToggleButtons dei discendenti, come lo stile del bordo, il colore, la decorazione, ecc. È anche possibile utilizzare ToggleButtonsTheme.of per ottenere i dati del tema dei ToggleButtons." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ja_JP.json deleted file mode 100644 index dd837f1cb..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "スライダースタイル", - "info": "主に子孫のToggleButtonsコンポーネントにデフォルトのプロパティを統一して設定するために使用されます。また、このコンポーネントを通じてデフォルトのToggleButtonsのプロパティを取得することもできます。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ToggleButtonsThemeの基本使用", - "desc": [ - "ToggleButtonsThemeDataデータプロパティを指定して、子孫のToggleButtonsコンポーネントにデフォルトのスタイル(ボーダースタイル、色、装飾など)を設定できます。また、ToggleButtonsTheme.ofを使用してToggleButtonsのテーマデータを取得することもできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ko_KR.json deleted file mode 100644 index 6083acee5..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "토글 버튼 스타일", - "info": "주로 후손 ToggleButtons 컴포넌트에 기본 속성을 통일적으로 설정하기 위해 사용되며, 이 컴포넌트를 통해 기본 ToggleButtons의 속성을 얻을 수도 있습니다.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ToggleButtonsTheme 기본 사용법", - "desc": [ - "ToggleButtonsThemeData 데이터 속성을 지정하여 후손 ToggleButtons 컴포넌트에 기본 스타일(예: 테두리 스타일, 색상, 장식 등)을 설정할 수 있습니다. 또한 ToggleButtonsTheme.of를 사용하여 ToggleButtons의 테마 데이터를 얻을 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_pt_PT.json deleted file mode 100644 index b5f226318..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "Tema dos Botões de Alternância", - "info": "Principalmente utilizado para definir propriedades padrão unificadas para componentes ToggleButtons descendentes, também é possível obter as propriedades padrão do ToggleButtons através deste componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ToggleButtonsTheme", - "desc": [ - "Pode especificar as propriedades de dados do ToggleButtonsThemeData para definir o estilo padrão para componentes ToggleButtons descendentes, como estilo de borda, cor, decoração, etc. Também é possível usar ToggleButtonsTheme.of para obter os dados do tema do ToggleButtons." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ru_RU.json deleted file mode 100644 index c5789f622..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "Тема переключателей", - "info": "В основном используется для установки стандартных свойств для компонентов ToggleButtons у потомков, также можно получить свойства по умолчанию для ToggleButtons через этот компонент.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ToggleButtonsTheme", - "desc": [ - "Можно указать свойства данных ToggleButtonsThemeData для установки стандартных стилей для компонентов ToggleButtons у потомков, таких как стиль границы, цвет, оформление и т.д. Также можно использовать ToggleButtonsTheme.of для получения тематических данных ToggleButtons." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_zh-CN.json deleted file mode 100644 index 001beb487..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 332, - "name": "ToggleButtonsTheme", - "localName": "滑块样式", - "info": "主要用于为后代的ToggleButtons组件统一设置默认属性,也可以通过该组件获取默认ToggleButtons的属性。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ToggleButtonsTheme基本使用", - "desc": [ - "可指定ToggleButtonsThemeData数据属性为【后代】的ToggleButtons组件设置默认样式,如边框样式、颜色、装饰等。也可以用ToggleButtonsTheme.of获取ToggleButtons的主题数据。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/node1_base.dart deleted file mode 100644 index 715cea365..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/ToggleButtonsTheme/node1_base.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class ToggleButtonsThemeDemo extends StatelessWidget { - const ToggleButtonsThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ToggleButtonsTheme( - data: ToggleButtonsTheme.of(context).copyWith( - borderWidth: 1, - borderColor: Colors.orangeAccent, - selectedBorderColor: Colors.blue, - splashColor: Colors.purple.withAlpha(66), - borderRadius: BorderRadius.circular(10), - selectedColor: Colors.red, - fillColor: Colors.green.withAlpha(11), - ), - child: _ToggleButtonsSimple(), - ); - } -} - - -class _ToggleButtonsSimple extends StatefulWidget { - @override - _ToggleButtonsSimpleState createState() => _ToggleButtonsSimpleState(); -} - -class _ToggleButtonsSimpleState extends State<_ToggleButtonsSimple> { - var _isSelected = [true, false, false]; - - @override - Widget build(BuildContext context) { - return ToggleButtons( - children: const[ - Icon(Icons.skip_previous), - Icon(Icons.pause), - Icon(Icons.skip_next), - ], - isSelected: _isSelected, - onPressed: (value) => setState(() { - _isSelected = _isSelected.map((e) => false).toList(); - _isSelected[value] = true; - }), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_de_DE.json deleted file mode 100644 index 7c6030a5d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "Tooltip-Thema", - "info": "Wird hauptsächlich verwendet, um Standardattribute für nachfolgende Tooltip-Komponenten festzulegen. Es kann auch verwendet werden, um die Attribute des standardmäßigen Tooltip-Themas abzurufen.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von TooltipTheme", - "desc": [ - "Kann die TooltipThemeData-Datenattribute festlegen, um Standardstile für nachfolgende Tooltip-Komponenten zu definieren, wie Dekoration, Textstil, Anzeigedauer, Randabstand usw. Es kann auch TooltipTheme.of verwenden, um die Themenattribute des Tooltips abzurufen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_en_US.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_en_US.json deleted file mode 100644 index a51860c97..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "Tooltip Theme", - "info": "Mainly used to set default properties for descendant Tooltip components uniformly. You can also retrieve the properties of the default TooltipTheme through this component.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of TooltipTheme", - "desc": [ - "You can specify the TooltipThemeData properties to set default styles for descendant Tooltip components, such as decoration, text style, display duration, margins, etc. You can also use TooltipTheme.of to get the theme properties of Tooltip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_es_ES.json deleted file mode 100644 index f9f3e91d9..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "Tema de Tooltip", - "info": "Principalmente se utiliza para establecer propiedades predeterminadas unificadas para los componentes Tooltip descendientes. También se pueden obtener las propiedades predeterminadas de TooltipTheme a través de este componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de TooltipTheme", - "desc": [ - "Se pueden especificar las propiedades de TooltipThemeData para establecer estilos predeterminados para los componentes Tooltip descendientes, como decoración, estilo de texto, duración de visualización, márgenes, etc. También se puede usar TooltipTheme.of para obtener las propiedades del tema de Tooltip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_fr_FR.json deleted file mode 100644 index c8fc68cf9..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "Thème d'infobulle", - "info": "Principalement utilisé pour définir les propriétés par défaut des composants Tooltip pour les descendants. Il est également possible d'obtenir les propriétés du TooltipTheme par défaut via ce composant.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de TooltipTheme", - "desc": [ - "Vous pouvez spécifier les propriétés de TooltipThemeData pour définir le style par défaut des composants Tooltip pour les descendants, comme la décoration, le style du texte, la durée d'affichage, les marges, etc. Vous pouvez également utiliser TooltipTheme.of pour obtenir les propriétés du thème Tooltip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_it_IT.json deleted file mode 100644 index 6689bbad7..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "Tema del Tooltip", - "info": "Utilizzato principalmente per impostare le proprietà predefinite per i componenti Tooltip discendenti. È anche possibile ottenere le proprietà del TooltipTheme predefinito tramite questo componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di TooltipTheme", - "desc": [ - "È possibile specificare le proprietà dei dati di TooltipThemeData per impostare lo stile predefinito per i componenti Tooltip discendenti, come decorazioni, stili di testo, durata di visualizzazione, margini, ecc. È anche possibile utilizzare TooltipTheme.of per ottenere le proprietà del tema del Tooltip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ja_JP.json deleted file mode 100644 index a4b3839fb..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "ツールチップテーマ", - "info": "主に、子孫のTooltipコンポーネントにデフォルトのプロパティを統一して設定するために使用されます。また、このコンポーネントを通じてデフォルトのTooltipThemeのプロパティを取得することもできます。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TooltipThemeの基本使用", - "desc": [ - "TooltipThemeDataデータプロパティを指定して、【子孫】のTooltipコンポーネントにデフォルトのスタイルを設定できます。例えば、装飾、テキストスタイル、表示時間、余白など。また、TooltipTheme.ofを使用してTooltipのテーマプロパティを取得することもできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ko_KR.json deleted file mode 100644 index bb80ad7cd..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "툴팁 테마", - "info": "주로 후손의 Tooltip 컴포넌트에 기본 속성을 통일적으로 설정하기 위해 사용되며, 이 컴포넌트를 통해 기본 TooltipTheme의 속성을 가져올 수도 있습니다.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TooltipTheme 기본 사용", - "desc": [ - "TooltipThemeData 데이터 속성을 지정하여 【후손】의 Tooltip 컴포넌트에 기본 스타일을 설정할 수 있습니다. 예를 들어, 장식, 텍스트 스타일, 표시 시간, 여백 등이 있습니다. 또한 TooltipTheme.of를 사용하여 Tooltip의 테마 속성을 가져올 수도 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_pt_PT.json deleted file mode 100644 index e5fceabed..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "Tema de Dica", - "info": "Principalmente utilizado para definir propriedades padrão unificadas para componentes Tooltip descendentes, também é possível obter as propriedades do TooltipTheme padrão através deste componente.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do TooltipTheme", - "desc": [ - "Pode especificar as propriedades de dados do TooltipThemeData para definir o estilo padrão para componentes Tooltip descendentes, como decoração, estilo de texto, duração de exibição, margens, etc. Também é possível usar TooltipTheme.of para obter as propriedades temáticas do Tooltip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ru_RU.json deleted file mode 100644 index af7aa3ff1..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "Тема подсказки", - "info": "В основном используется для установки стандартных свойств для компонентов Tooltip потомков, также можно получить свойства стандартного TooltipTheme через этот компонент.", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование TooltipTheme", - "desc": [ - "Можно указать свойства данных TooltipThemeData для установки стандартного стиля для компонентов Tooltip потомков, таких как декор, стиль текста, продолжительность отображения, отступы и т.д. Также можно использовать TooltipTheme.of для получения тематических свойств Tooltip." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_zh-CN.json deleted file mode 100644 index ad727adeb..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 333, - "name": "TooltipTheme", - "localName": "提示主题", - "info": "主要用于为后代的Tooltip组件统一设置默认属性,也可以通过该组件获取默认TooltipTheme的属性。", - "lever": 2, - "family": 5, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TooltipTheme基本使用", - "desc": [ - "可指定TooltipThemeData数据属性为【后代】的Tooltip组件设置默认样式,如装饰、文字样式、显示时长、边距等。也可以用TooltipTheme.of获取Tooltip的主题属性。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/node1_base.dart b/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/node1_base.dart deleted file mode 100644 index 0ef30903d..000000000 --- a/modules/widget_system/widgets/lib/ProxyWidget/TooltipTheme/node1_base.dart +++ /dev/null @@ -1,44 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class TooltipThemeDemo extends StatelessWidget { - const TooltipThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return TooltipTheme( - child: const TempTooltip(), - data: TooltipTheme.of(context).copyWith( - preferBelow: false, - padding: const EdgeInsets.all(5), - verticalOffset: 20, - margin: const EdgeInsets.all(2), - textStyle: const TextStyle(color: Colors.red, shadows: [ - Shadow(color: Colors.white, offset: Offset(1, 1)), - ]), - decoration: const BoxDecoration(boxShadow: [ - BoxShadow( - color: Colors.orangeAccent, - offset: Offset(1, 1), - blurRadius: 8) - ]))); - } -} - -class TempTooltip extends StatelessWidget { - const TempTooltip({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: const [ - Tooltip(message: "天王盖地虎", child: Icon(Icons.info_outline)), - Tooltip(message: "宝塔镇河妖", child: Icon(Icons.info_outline)), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_de_DE.json deleted file mode 100644 index 6f468c5ba..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "Klicks absorbieren", - "info": "Enthält ein Kind-Widget und kann durch das Festlegen des Attributs ignoring entscheiden, ob das Kind Gestenereignisse ignoriert, während es selbst Ereignisse akzeptiert.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AbsorbPointer", - "desc": [ - "【child】 : Kind-Widget 【Widget】", - "【absorbing】 : Ob Ereignisse absorbiert werden 【bool】", - "Wie unten gezeigt, wenn der Switch ausgewählt ist, ist absorbing true, und die Schaltflächenereignisse werden absorbiert und können nicht geklickt werden." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_en_US.json deleted file mode 100644 index d8d6217b6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "Absorb Click", - "info": "Contains a child component, and it can decide whether the child ignores gesture events by specifying the ignoring attribute, while it itself accepts events.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AbsorbPointer", - "desc": [ - "【child】: Child component 【Widget】", - "【absorbing】: Whether to absorb events 【bool】", - "As shown below, when the Switch is selected, absorbing is true, and the button event will be absorbed and cannot be clicked." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_es_ES.json deleted file mode 100644 index 69fbccceb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "Absorber Clics", - "info": "Contiene un componente hijo y puede decidir si el hijo ignora los eventos de gestos especificando la propiedad ignoring, mientras que él mismo acepta los eventos.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AbsorbPointer", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【absorbing】 : Si absorbe eventos 【bool】", - "Como se muestra a continuación, cuando el Switch está seleccionado, absorbing es true y los eventos del botón serán absorbidos, no se podrá hacer clic." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_fr_FR.json deleted file mode 100644 index f4e3f32ee..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "Absorber les clics", - "info": "Contient un composant enfant et peut décider si l'enfant ignore les événements gestuels en spécifiant la propriété ignoring, tout en acceptant les événements lui-même.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AbsorbPointer", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【absorbing】 : Si les événements sont absorbés 【bool】", - "Comme ci-dessous, lorsque le Switch est sélectionné, absorbing est true, les événements du bouton seront absorbés et ne pourront pas être cliqués." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_it_IT.json deleted file mode 100644 index 3bd4e2e7b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "Assorbi Clic", - "info": "Contiene un componente figlio, è possibile decidere se il figlio ignora gli eventi del gesto specificando l'attributo ignoring, mentre esso stesso accetta gli eventi.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AbsorbPointer", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【absorbing】 : Se assorbire gli eventi 【bool】", - "Come mostrato di seguito, quando Switch è selezionato, absorbing è true, gli eventi del pulsante verranno assorbiti e non sarà possibile fare clic." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ja_JP.json deleted file mode 100644 index 87d7845dc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "クリックを吸収", - "info": "子コンポーネントを含み、ignoring属性を指定することで、子がジェスチャーイベントを無視するかどうかを決定し、それ自体がイベントを受け取ります。", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AbsorbPointerの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【absorbing】 : イベントを吸収するかどうか 【bool】", - "以下の例では、Switchが選択されている場合、absorbingがtrueになり、ボタンのイベントが吸収され、クリックできなくなります。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ko_KR.json deleted file mode 100644 index 5c8c55777..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "클릭 흡수", - "info": "자식 위젯을 포함하며, ignoring 속성을 지정하여 자식이 제스처 이벤트를 무시할지 여부를 결정할 수 있습니다. 그 자체는 이벤트를 받습니다.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AbsorbPointer 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【absorbing】 : 이벤트를 흡수할지 여부 【bool】", - "아래와 같이, Switch가 선택되면 absorbing이 true가 되어 버튼 이벤트가 흡수되어 클릭할 수 없게 됩니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_pt_PT.json deleted file mode 100644 index 8a4c7c7df..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "Absorver Clique", - "info": "Contém um componente filho e pode decidir se o filho ignora eventos de gestos especificando o atributo ignoring, enquanto ele próprio aceita eventos.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AbsorbPointer", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【absorbing】 : Se absorve eventos 【bool】", - "Como mostrado abaixo, quando o Switch está selecionado, absorbing é true e o evento do botão será absorvido, não podendo ser clicado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ru_RU.json deleted file mode 100644 index c5552f402..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "Поглощение кликов", - "info": "Содержит дочерний компонент, который может игнорировать жестовые события в зависимости от указанного свойства ignoring, при этом сам компонент принимает события.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AbsorbPointer", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【absorbing】 : Поглощать ли события 【bool】", - "Как показано ниже, когда Switch выбран, absorbing равно true, и событие кнопки будет поглощено, и нажатие будет невозможно." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_zh-CN.json deleted file mode 100644 index e17289d81..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 295, - "name": "AbsorbPointer", - "localName": "吸收点击", - "info": "容纳一个子组件,可以通过指定ignoring属性,来决定孩子是否忽略手势事件,其本身接受事件。", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 149, - 150, - 292 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AbsorbPointer基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【absorbing】 : 是否吸收事件 【bool】", - "如下,Switch选中时absorbing为true,按钮事件将被吸收,无法点击。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/node1_base.dart deleted file mode 100644 index efca1c01a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AbsorbPointer/node1_base.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - - -class CustomAbsorbPointer extends StatefulWidget { - const CustomAbsorbPointer({Key? key}) : super(key: key); - - @override - _CustomAbsorbPointerState createState() => _CustomAbsorbPointerState(); -} - -class _CustomAbsorbPointerState extends State { - bool _absorbing = false; - - @override - Widget build(BuildContext context) { - return Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - GestureDetector( - onTap: (){ - print('AbsorbPointer'); - }, - child: AbsorbPointer( - absorbing: _absorbing, - child: _buildButton(), - ), - ), - _buildSwitch(), - Text(!_absorbing ? '允许点击' : '事件已被吸收') - ], - ); - } - - Widget _buildButton() => ElevatedButton( - child: const Text( - 'To About', - style: TextStyle(color: Colors.white), - ), - onPressed: () => Navigator.of(context).pushNamed('AboutMePage')); - - Widget _buildSwitch() => Switch( - value: _absorbing, - onChanged: (v) { - setState(() { - _absorbing = v; - }); - }); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_de_DE.json deleted file mode 100644 index 2fe4515fb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_de_DE.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "Ausrichtungskomponente", - "info": "Kann ein Unterelement aufnehmen und kann das Unterelement durch Ausrichtung an jeder angegebenen Position der Breite und Höhe des übergeordneten Elements positionieren.", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Align", - "desc": [ - "【child】: Unterelement 【Widget】", - "【alignment】: Ausrichtung 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Andere Verwendungen von Align", - "desc": [ - "Da das Alignment-Objekt eine Position im Verhältnis zur Breite und Höhe des übergeordneten Containers angeben kann", - "kann Align verwendet werden, um komplexe Layoutanforderungen zu erfüllen, z.B. die Position nach einer bestimmten mathematischen Gleichung zu ändern" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_en_US.json deleted file mode 100644 index 713413e1f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_en_US.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "Align Component", - "info": "Can accommodate a child component, and the child component can be positioned at any specified fraction of the parent component's width and height through alignment.", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Align", - "desc": [ - "【child】 : Child component 【Widget】", - "【alignment】 : Alignment method 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Other Usages of Align", - "desc": [ - "Since the Alignment object can specify the fractional position of the width and height in the parent container", - "Align can be used to achieve some complex layout requirements, such as changing positions according to specified mathematical equations" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_es_ES.json deleted file mode 100644 index ca2eee774..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_es_ES.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "Componente de Alineación", - "info": "Puede contener un componente hijo, y se puede posicionar en cualquier fracción específica del ancho y alto del componente padre a través de alignment.", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Align", - "desc": [ - "【child】: Componente hijo 【Widget】", - "【alignment】: Método de alineación 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Otros usos de Align", - "desc": [ - "Dado que el objeto Alignment puede especificar la posición de la fracción del ancho y alto en el contenedor padre", - "Se puede usar Align para implementar algunas necesidades de disposición complejas, como cambiar la posición según ecuaciones matemáticas específicas" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_fr_FR.json deleted file mode 100644 index 0afdeb174..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_fr_FR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "Composant d'alignement", - "info": "Peut contenir un composant enfant, et permet de positionner le composant enfant à n'importe quelle fraction spécifiée de la largeur et de la hauteur du composant parent via l'alignement.", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'Align", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【alignment】 : Méthode d'alignement 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Autres utilisations d'Align", - "desc": [ - "Puisque l'objet Alignment peut spécifier une position fractionnaire dans la largeur et la hauteur du conteneur parent", - "Align peut être utilisé pour répondre à des besoins de mise en page complexes, tels que des changements de position selon des équations mathématiques spécifiées" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_it_IT.json deleted file mode 100644 index c9dec642a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_it_IT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "Componente Allineamento", - "info": "Può contenere un componente figlio, e può posizionare il componente figlio in qualsiasi frazione specificata della larghezza e altezza del componente genitore tramite l'allineamento.", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Align", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【alignment】 : Modalità di allineamento 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Altri usi di Align", - "desc": [ - "Poiché l'oggetto Alignment può specificare la posizione della frazione di larghezza e altezza nel contenitore genitore", - "è possibile utilizzare Align per soddisfare alcune esigenze di layout complesse, come cambiare posizione secondo equazioni matematiche specificate" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ja_JP.json deleted file mode 100644 index 1a06a3369..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ja_JP.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "整列コンポーネント", - "info": "1つの子コンポーネントを収容でき、alignmentを使用して子コンポーネントを親コンポーネントの幅と高さの任意の指定された比率に配置できます。", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Alignの基本的な使用法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【alignment】 : 整列方法 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Alignのその他の使用法", - "desc": [ - "Alignmentオブジェクトは、親コンテナ内の幅と高さの比率位置を指定できるため", - "Alignを使用して、指定された数学的方程式に従って位置を変化させるなど、複雑なレイアウト要件を実現できます" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ko_KR.json deleted file mode 100644 index d7c244cba..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ko_KR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "정렬 컴포넌트", - "info": "하나의 자식 컴포넌트를 수용할 수 있으며, alignment를 통해 자식 컴포넌트를 부모 컴포넌트의 너비와 높이의 지정된 비율 위치에 배치할 수 있습니다.", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Align 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Align 기타 사용법", - "desc": [ - "Alignment 객체는 부모 컨테이너에서 너비와 높이의 비율 위치를 지정할 수 있으므로", - "Align을 사용하여 복잡한 배치 요구 사항을 구현할 수 있습니다. 예를 들어 지정된 수학 방정식에 따라 위치를 변경하는 것과 같은 요구 사항을 구현할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_pt_PT.json deleted file mode 100644 index c3da9f49e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_pt_PT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "Componente de Alinhamento", - "info": "Pode conter um componente filho, e pode posicionar o componente filho em qualquer fração especificada da largura e altura do componente pai através do alinhamento.", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Align", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【alignment】 : Modo de alinhamento 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Outros Usos do Align", - "desc": [ - "Como o objeto Alignment pode especificar a posição da fração de largura e altura no contêiner pai", - "Pode-se usar o Align para implementar algumas necessidades complexas de layout, como mudar a posição de acordo com uma equação matemática especificada" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ru_RU.json deleted file mode 100644 index af7806c48..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_ru_RU.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "Компонент выравнивания", - "info": "Может содержать один дочерний компонент, который можно расположить в любом указанном месте ширины и высоты родительского компонента с помощью alignment.", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Align", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Другие способы использования Align", - "desc": [ - "Поскольку объект Alignment может указывать положение в долях ширины и высоты родительского контейнера", - "Можно использовать Align для реализации сложных требований к расположению, например, для изменения положения по указанному математическому уравнению" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_zh-CN.json deleted file mode 100644 index ba46195d3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/desc_zh-CN.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 85, - "name": "Align", - "localName": "对齐组件", - "info": "可容纳一个子组件,可以通过alignment让子组件,定位在父组件宽高的任何指定分率出。", - "lever": 5, - "family": 2, - "linkIds": [ - 1, - 86, - 111, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Align基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【alignment】 : 对齐方式 【AlignmentGeometry】" - ] - }, - { - "file": "node2_other.dart", - "name": "Align其他用法", - "desc": [ - "由于Alignment对象可指定在父容器中宽高的分率位置", - "可以使用Align实现一些复杂的排布需求,比如按指定的数学方程变化位置" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/node1_base.dart deleted file mode 100644 index 5e6ae234b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/node1_base.dart +++ /dev/null @@ -1,55 +0,0 @@ - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomAlign extends StatelessWidget { - const CustomAlign({Key? key}) : super(key: key); - - final List alignments = const [ - Alignment.topLeft, - Alignment.topCenter, - Alignment.topRight, - Alignment.centerLeft, - Alignment.center, - Alignment.centerRight, - Alignment.bottomLeft, - Alignment.bottomCenter, - Alignment.bottomRight, - ]; - - final List alignmentsInfo = const [ - "topLeft", - "topCenter", - "topRight", - "centerLeft", - "center", - "centerRight", - "bottomLeft", - "bottomCenter", - "bottomRight", - ]; - - @override - Widget build(BuildContext context) { - return Wrap( - children: alignments - .toList() - .map((mode) => Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 100, - height: 60, - color: Colors.grey.withAlpha(88), - child: Align( - child: Container( - width: 30, - height: 30, - color: Colors.cyanAccent, - ), - alignment: mode)), - Text(alignmentsInfo[alignments.indexOf(mode)]) - ])) - .toList()); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/node2_other.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/node2_other.dart deleted file mode 100644 index 3983e6fee..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Align/node2_other.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class Ball extends StatelessWidget { - const Ball({ - Key? key, - this.radius = 15, - this.color = Colors.blue, - }) : super(key: key); - final double radius; //半径 - final Color color; //颜色 - - @override - Widget build(BuildContext context) { - return Container( - width: radius * 2, - height: radius * 2, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: color, - ), - ); - } -} - -class SinLayout extends StatefulWidget { - const SinLayout({ - Key? key, - }) : super(key: key); - - @override - _SinLayoutState createState() => _SinLayoutState(); -} - -class _SinLayoutState extends State { - double _x = 0.0; //Alignment坐标系上的x坐标 - - @override - Widget build(BuildContext context) { - var item = Container( - width: 300, - height: 120, - color: Colors.black.withAlpha(10), - child: Align( - child: const Ball( - color: Colors.orangeAccent, - ), - alignment: Alignment(_x, f(_x * pi)), - ), - ); - - var slider = Slider( - max: 180, - min: -180, - divisions: 360, - label: "${_x.toStringAsFixed(2)}π", - value: _x * 180, - onChanged: (v) => setState(() => _x = v / 180)); - return Column( - mainAxisSize: MainAxisSize.min, - children: [slider, item], - ); - } - - double f(x) { - //映射函数 -- 可随意指定 - double y = sin(x); - return y; - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_de_DE.json deleted file mode 100644 index cef55e3bb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "Größenanimation", - "info": "Wenn sich die Größe der Unterkomponente ändert, erfolgt eine animierte Überblendung. Attribute wie Dauer, Ausrichtung, Kurve, vsync usw. können angegeben werden.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedSize", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【alignment】 : Ausrichtung 【AlignmentGeometry】", - "【curve】 : Animationskurve 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_en_US.json deleted file mode 100644 index 8c6d66b75..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "Size Animation", - "info": "When the size of the child component changes, it animates gradually. You can specify properties such as duration, alignment, curve, vsync, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedSize", - "desc": [ - "【child】 : Child component 【Widget】", - "【duration】 : Animation duration 【Duration】", - "【alignment】 : Alignment 【AlignmentGeometry】", - "【curve】 : Animation curve 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_es_ES.json deleted file mode 100644 index 0bd59a182..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "Animación de Tamaño", - "info": "Cuando el tamaño del componente hijo cambia, se realiza una transición animada. Se pueden especificar propiedades como la duración, la alineación, la curva, vsync, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de AnimatedSize", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【alignment】 : Alineación 【AlignmentGeometry】", - "【curve】 : Curva de la animación 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_fr_FR.json deleted file mode 100644 index 5acea2c76..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "Animation de taille", - "info": "Lorsque la taille du composant enfant change, une transition animée est effectuée. Vous pouvez spécifier des propriétés telles que la durée, l'alignement, la courbe, vsync, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedSize", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【alignment】 : Alignement 【AlignmentGeometry】", - "【curve】 : Courbe de l'animation 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_it_IT.json deleted file mode 100644 index 59207c7e7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "Animazione delle dimensioni", - "info": "Quando le dimensioni del componente figlio cambiano, viene eseguita una transizione animata. È possibile specificare proprietà come durata, allineamento, curva, vsync, ecc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedSize", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【alignment】 : Allineamento 【AlignmentGeometry】", - "【curve】 : Curva dell'animazione 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ja_JP.json deleted file mode 100644 index f427d6d09..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "サイズアニメーション", - "info": "子コンポーネントのサイズが変化する際に、アニメーションで滑らかに変化させます。持続時間、整列方法、曲線、vsyncなどの属性を指定できます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedSizeの基本的な使用法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーションの持続時間 【Duration】", - "【alignment】 : 整列方法 【AlignmentGeometry】", - "【curve】 : アニメーション曲線 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ko_KR.json deleted file mode 100644 index 2060ce8c4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "크기 애니메이션", - "info": "자식 컴포넌트의 크기가 변경될 때 애니메이션을 통해 점진적으로 변화시킵니다. 지속 시간, 정렬 방식, 곡선, vsync 등의 속성을 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedSize 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_pt_PT.json deleted file mode 100644 index b6bb9f9f4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "Animação de Tamanho", - "info": "Quando o tamanho do componente filho muda, ocorre uma transição animada, podendo especificar duração, alinhamento, curva, vsync, entre outros atributos.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedSize", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【alignment】 : Modo de alinhamento 【AlignmentGeometry】", - "【curve】 : Curva da animação 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ru_RU.json deleted file mode 100644 index 465dd96f3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "Анимация размера", - "info": "Когда размер дочернего компонента изменяется, происходит плавная анимация. Можно указать такие свойства, как продолжительность, способ выравнивания, кривая, vsync и другие.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedSize", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Продолжительность анимации 【Duration】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】", - "【curve】 : Кривая анимации 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_zh-CN.json deleted file mode 100644 index b5559c1f6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 201, - "name": "AnimatedSize", - "localName": "尺寸动画", - "info": "子组件大小发生变化时,进行动画渐变,可指定时长、对齐方式、曲线、vsync等属性。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedSize基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【alignment】 : 对齐方式 【AlignmentGeometry】", - "【curve】 : 动画曲线 【Duration】", - "【vsync】 : vsync 【TickerProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/node1_base.dart deleted file mode 100644 index deb0e60d3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnimatedSize/node1_base.dart +++ /dev/null @@ -1,64 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - - -class CustomAnimatedSize extends StatefulWidget { - const CustomAnimatedSize({Key? key}) : super(key: key); - - @override - _CustomAnimatedSizeState createState() => _CustomAnimatedSizeState(); -} - -class _CustomAnimatedSizeState extends State - with SingleTickerProviderStateMixin { - final double start = 100; - final double end = 200; - - late double _width; - - @override - void initState() { - _width = start; - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSwitch(), - Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 100, - alignment: Alignment.center, - child: AnimatedSize( - duration: const Duration(seconds: 1), - curve: Curves.fastOutSlowIn, - alignment: const Alignment(0, 0), - child: Container( - height: 40, - width: _width, - alignment: Alignment.center, - color: Colors.blue, - child: const Text( - '张风捷特烈', - style: TextStyle(color: Colors.white), - ), - ), - ), - ), - ], - ); - } - - Widget _buildSwitch() => Switch( - value: _width == end, - onChanged: (v) { - setState(() { - _width = v ? end : start; - }); - }); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_de_DE.json deleted file mode 100644 index 8b062ccc7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "Annotierter Bereich", - "info": "Es gibt einen generischen Typ, der im Quellcode nur in app_bar und nav_bar verwendet wird, um den Zustand und das Styling der Navigationsleiste zu ändern. Der generische Typ ist normalerweise SystemUiOverlayStyle.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion ändert Zustand und Stil", - "desc": [ - "【value】 : Wert 【T】", - "【sized】 : Gibt die Größe an 【bool】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_en_US.json deleted file mode 100644 index f99c679af..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "Annotation Area", - "info": "There is a generic type, which is only used in app_bar and nav_bar in the source code to change the state variables and navigation bar styles. The generic type is usually SystemUiOverlayStyle.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion Changes State Variables and Styles", - "desc": [ - "【value】 : value 【T】", - "【sized】 : whether to provide size 【bool】", - "【child】 : child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_es_ES.json deleted file mode 100644 index 459a57c91..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "Región Anotada", - "info": "Tiene un genérico, en el código fuente solo se usa este componente en app_bar, nav_bar para cambiar el estado y el estilo de la barra de navegación, el genérico suele ser SystemUiOverlayStyle.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion cambia el estilo del estado", - "desc": [ - "【value】 : valor 【T】", - "【sized】 : si proporciona tamaño 【bool】", - "【child】 : componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_fr_FR.json deleted file mode 100644 index 0f73321e9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "Région annotée", - "info": "Il y a un générique, dans le code source, il est uniquement utilisé dans app_bar, nav_bar pour modifier les variables d'état et le style de la barre de navigation, le générique est généralement SystemUiOverlayStyle.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion modifie le style des variables d'état", - "desc": [ - "【value】 : valeur 【T】", - "【sized】 : fournit-il une taille 【bool】", - "【child】 : composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_it_IT.json deleted file mode 100644 index 05a27dc24..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "Area Annotata", - "info": "Ha un generico, nel codice sorgente viene utilizzato solo in app_bar, nav_bar per modificare lo stato e lo stile della barra di navigazione, il generico è solitamente SystemUiOverlayStyle.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion cambia lo stile dello stato", - "desc": [ - "【value】 : valore 【T】", - "【sized】 : se fornisce dimensione 【bool】", - "【child】 : componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ja_JP.json deleted file mode 100644 index 4c1e0e954..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "注釈領域", - "info": "ジェネリックがあり、ソースコードでは app_bar と nav_bar でのみ使用され、状態量やナビゲーションバーのスタイルを変更するために使用されます。ジェネリックは通常 SystemUiOverlayStyle です。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegionが状態量のスタイルを変更", - "desc": [ - "【value】 : 値 【T】", - "【sized】 : サイズを提供するかどうか 【bool】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ko_KR.json deleted file mode 100644 index fc2a0df67..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "주석 영역", - "info": "제네릭이 있으며, 소스 코드에서는 app_bar, nav_bar에서만 이 컴포넌트를 사용하여 상태 변수와 네비게이션 바 스타일을 변경합니다. 제네릭은 일반적으로 SystemUiOverlayStyle입니다.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion 상태 변수 스타일 변경", - "desc": [ - "【value】 : 값 【T】", - "【sized】 : 크기 제공 여부 【bool】", - "【child】 : 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_pt_PT.json deleted file mode 100644 index 91c03b458..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "Região Anotada", - "info": "Tem um genérico, no código-fonte, este componente é usado apenas em app_bar e nav_bar para alterar variáveis de estado e o estilo da barra de navegação, o genérico geralmente é SystemUiOverlayStyle.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion altera o estilo da variável de estado", - "desc": [ - "【value】 : valor 【T】", - "【sized】 : se fornece tamanho 【bool】", - "【child】 : componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ru_RU.json deleted file mode 100644 index 8a65397db..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "Область аннотации", - "info": "Имеет обобщение, в исходном коде используется только в app_bar, nav_bar для изменения состояния и стиля навигационной панели, обобщение обычно SystemUiOverlayStyle.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion изменяет состояние и стиль", - "desc": [ - "【value】 : значение 【T】", - "【sized】 : предоставляет ли размер 【bool】", - "【child】 : дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_zh-CN.json deleted file mode 100644 index f8aee6e73..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 288, - "name": "AnnotatedRegion", - "localName": "标注区域", - "info": "有一个泛型,源码中仅在 app_bar, nav_bar 中使用该组件改变状态量、导航栏样式,泛型通常为 SystemUiOverlayStyle。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnnotatedRegion改变状态量样式", - "desc": [ - "【value】 : 值 【T】", - "【sized】 : 是否提供大小 【bool】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/node1_base.dart deleted file mode 100644 index 1b518dbfd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AnnotatedRegion/node1_base.dart +++ /dev/null @@ -1,76 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - - -class AnnotatedRegionDemo extends StatelessWidget { - const AnnotatedRegionDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.all(10), - child: ElevatedButton( - onPressed: (){ - Navigator.push(context, - MaterialPageRoute(builder: (context) => const AnnotatedRegionTestPage()), - ); - }, - child: const Text("进入 AnnotatedRegion 测试页"), - ), - ); - } -} - - -class AnnotatedRegionTestPage extends StatelessWidget{ - const AnnotatedRegionTestPage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - const SystemUiOverlayStyle overlayStyle = SystemUiOverlayStyle( - systemNavigationBarColor: Colors.green, - // 导航栏颜色 - systemNavigationBarDividerColor: Colors.red, - statusBarColor: Colors.blue, - systemNavigationBarIconBrightness: Brightness.light, - statusBarIconBrightness: Brightness.light, - statusBarBrightness: Brightness.light, - ); - - return AnnotatedRegion( - value: overlayStyle, - child: Scaffold( - body: Column( - children: [ - Container(height: 56+30.0,color: Colors.blue, - alignment: const Alignment(0,0.55), - child: Row( - children: const [ - BackButton(color: Colors.white,), - Text("AnnotatedRegion测试",style: TextStyle(color: Colors.white,fontSize: 18),) - ], - ), - ), - const SizedBox(height: 30,), - const Text( - "上面标题栏背景颜色为蓝色\n" - "上面标题栏图标为亮调", - - style: TextStyle(color: Colors.black,fontSize: 18),), - const Spacer(), - const Text( - "下面导航栏背景颜色为绿色\n" - "下面导航栏图标为亮调", - - style: TextStyle(color: Colors.black,fontSize: 18),), - const SizedBox(height: 30,), - ], - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_de_DE.json deleted file mode 100644 index 5c92c3eb2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "Proportion Box", - "info": "Kann ein Kindelement aufnehmen und durch die Angabe des Seitenverhältnisses aspectRatio den Bereich für das Kindelement begrenzen.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AspectRatio", - "desc": [ - "【child】: Kindelement 【Widget】", - "【aspectRatio】: Seitenverhältnis 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_en_US.json deleted file mode 100644 index b70c7005b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "Aspect Ratio Box", - "info": "Can contain a child component, and limit the area of the child component by specifying the aspectRatio.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AspectRatio", - "desc": [ - "【child】: Child component 【Widget】", - "【aspectRatio】: Aspect ratio 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_es_ES.json deleted file mode 100644 index 9965faeb2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "Caja de proporción", - "info": "Puede contener un componente hijo, limitando el área del componente hijo especificando la relación de aspecto aspectRatio.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AspectRatio", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【aspectRatio】 : Relación de aspecto 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_fr_FR.json deleted file mode 100644 index 77b231b4f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "Boîte de proportion", - "info": "Peut contenir un composant enfant, en spécifiant le rapport largeur/hauteur aspectRatio pour limiter la zone d'accueil du composant enfant.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AspectRatio", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【aspectRatio】 : Rapport largeur/hauteur 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_it_IT.json deleted file mode 100644 index 720e84a80..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "Scatola delle proporzioni", - "info": "Può contenere un componente figlio, limitando l'area del componente figlio specificando il rapporto larghezza-altezza aspectRatio.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AspectRatio", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【aspectRatio】 : Rapporto larghezza-altezza 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ja_JP.json deleted file mode 100644 index 489aa460b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "アスペクト比ボックス", - "info": "一つの子コンポーネントを収容し、aspectRatioを指定して子コンポーネントの収容領域を制限します。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AspectRatioの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【aspectRatio】 : アスペクト比 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ko_KR.json deleted file mode 100644 index edbafc88c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "비율 상자", - "info": "하위 컴포넌트를 포함할 수 있으며, aspectRatio를 지정하여 하위 컴포넌트의 영역을 제한합니다.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AspectRatio 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【aspectRatio】 : 너비 높이 비율 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_pt_PT.json deleted file mode 100644 index 510b16765..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "Caixa de Proporção", - "info": "Pode conter um componente filho, limitando a área do componente filho ao especificar a proporção de aspecto aspectRatio.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AspectRatio", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【aspectRatio】 : Proporção de largura e altura 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ru_RU.json deleted file mode 100644 index 17a1611ff..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "Пропорциональная коробка", - "info": "Может содержать один дочерний компонент, ограничивая область размещения дочернего компонента, задавая соотношение сторон aspectRatio.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AspectRatio", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【aspectRatio】 : Соотношение сторон 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_zh-CN.json deleted file mode 100644 index 89fffc05f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 77, - "name": "AspectRatio", - "localName": "比例盒", - "info": "可容纳一个子组件,通过指定宽高比aspectRatio,来限定子组件容身区域。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AspectRatio基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【aspectRatio】 : 宽高比例 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/node1_base.dart deleted file mode 100644 index eb74f52e6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/AspectRatio/node1_base.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomAspectRatio extends StatefulWidget { - const CustomAspectRatio({Key? key}) : super(key: key); - - @override - _CustomAspectRatioState createState() => _CustomAspectRatioState(); -} - -class _CustomAspectRatioState extends State { - double _ratio = 0.75; - - @override - Widget build(BuildContext context) { - Widget child = Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 50, - height: 50, - child: const Text("Static"), - ); - - Widget box = AspectRatio( - aspectRatio: _ratio, - child: Container( - color: Colors.orange, - child: const Icon( - Icons.android, - color: Colors.white, - )), - ); - - return Column( - children: [ - _buildSlider(), - Container( - color: Colors.grey.withAlpha(22), - width: 300, - height: 100, - child: Row( - children: [child, box, child], - ), - ), - ], - ); - } - - Widget _buildSlider() => Slider( - divisions: 20, - min: 0.1, - max: 2.0, - label: _ratio.toStringAsFixed(2), - value: _ratio, - onChanged: (v) => setState(() => _ratio = v), - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_de_DE.json deleted file mode 100644 index c9c76df77..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "Hintergrundfilter", - "info": "Kann ein Kind aufnehmen und den Hintergrund mit einem Unschärfefilter versehen. Durch Stack kann der Hintergrund unscharf gemacht werden, um den Unschärfeeffekt der Komponente zu erreichen.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von BackdropFilter", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【filter】 : Filter 【ImageFilter】", - "ImageFilter.blur kann eine Gaußsche Unschärfe erzeugen, indem die x- und y-Unschärfefaktoren angegeben werden." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_en_US.json deleted file mode 100644 index 1f60983e3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "Background Filter", - "info": "Can hold a child and apply a blur filter to the background. The background blur effect of the component can be achieved through Stack.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of BackdropFilter", - "desc": [ - "【child】: Child component 【Widget】", - "【filter】: Filter 【ImageFilter】", - "ImageFilter.blur can achieve Gaussian blur by specifying the x and y blur factors." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_es_ES.json deleted file mode 100644 index 742f80d5d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "Filtro de fondo", - "info": "Puede contener un hijo y aplicar un filtro de desenfoque al fondo. El efecto de desenfoque en los componentes se puede lograr utilizando Stack para desenfocar el fondo.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de BackdropFilter", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【filter】 : Filtro 【ImageFilter】", - "ImageFilter.blur puede implementar un desenfoque gaussiano, especificando los factores de desenfoque x e y." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_fr_FR.json deleted file mode 100644 index bf45ee80a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "Filtre d'arrière-plan", - "info": "Peut contenir un enfant et appliquer un filtre de flou à l'arrière-plan. Le flou de l'arrière-plan peut être réalisé via Stack pour obtenir l'effet de flou du composant.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de BackdropFilter", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【filter】 : Filtre 【ImageFilter】", - "ImageFilter.blur peut réaliser un flou gaussien en spécifiant les facteurs de flou x et y." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_it_IT.json deleted file mode 100644 index 6ec0f087e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "Filtro Sfondo", - "info": "Può contenere un figlio e applica un filtro di sfocatura allo sfondo. È possibile ottenere l'effetto di sfocatura del componente utilizzando Stack per sfocare lo sfondo.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di BackdropFilter", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【filter】 : Filtro 【ImageFilter】", - "ImageFilter.blur può realizzare una sfocatura gaussiana, specificando i fattori di sfocatura x e y." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ja_JP.json deleted file mode 100644 index 6e54a9aeb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "背景フィルター", - "info": "子を1つ収容し、背景にぼかしフィルターを適用します。Stackを使用して背景をぼかすことで、コンポーネントのぼかし効果を実現できます。", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackdropFilterの基本的な使用法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【filter】 : フィルター 【ImageFilter】", - "ImageFilter.blurはガウスぼかしを実現し、x、yのぼかし係数を指定できます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ko_KR.json deleted file mode 100644 index 30eb76554..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "배경 필터", - "info": "하나의 자식을 포함할 수 있고, 배경에 흐림 필터를 적용합니다. Stack을 통해 배경 흐림 효과를 구현할 수 있습니다.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackdropFilter 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【filter】 : 필터 【ImageFilter】", - "ImageFilter.blur를 통해 가우시안 흐림 효과를 구현할 수 있으며, x, y 흐림 인자를 지정할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_pt_PT.json deleted file mode 100644 index 6599ff51e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "Filtro de Fundo", - "info": "Pode conter uma criança e aplicar um filtro de desfoque ao fundo. O efeito de desfoque do componente pode ser alcançado através do Stack.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do BackdropFilter", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【filter】 : Filtro 【ImageFilter】", - "ImageFilter.blur pode realizar um desfoque gaussiano, especificando os fatores de desfoque x e y." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ru_RU.json deleted file mode 100644 index e08403236..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "Фоновый фильтр", - "info": "Может содержать один дочерний элемент и применять размытие к фону. Эффект размытия компонента можно реализовать с помощью Stack.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование BackdropFilter", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【filter】 : Фильтр 【ImageFilter】", - "ImageFilter.blur может реализовать гауссово размытие, задавая коэффициенты размытия по x и y." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_zh-CN.json deleted file mode 100644 index c3403a1d0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 278, - "name": "BackdropFilter", - "localName": "背景滤镜", - "info": "可容纳一个孩子,并将背景进行模糊滤镜。可以通过Stack将背景模糊实现组件的模糊效果。", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 97, - 67 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackdropFilter基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【filter】 : 过滤器 【ImageFilter】", - "ImageFilter.blur可以实现高斯模糊,指定x,y模糊因子。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/node1_base.dart deleted file mode 100644 index 3cddf48a2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/BackdropFilter/node1_base.dart +++ /dev/null @@ -1,94 +0,0 @@ -import 'dart:ui'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - - -class CustomBackdropFilter extends StatefulWidget { - const CustomBackdropFilter({Key? key}) : super(key: key); - - @override - _CustomBackdropFilterState createState() => _CustomBackdropFilterState(); -} - -class _CustomBackdropFilterState extends State { - double _sigmaX = 1.2; - double _sigmaY = 1.2; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Stack( - children: [ - _buildImage(), - Positioned.fill( - child: ClipRect( - child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: _sigmaX, sigmaY: _sigmaY), - child: Container( - color: Colors.black.withAlpha(0), - ), - ), - ), - ) - ], - ), - _buildSliders() - ], - ); - } - - Widget _buildImage() { - return Wrap( - spacing: 20, - children: [ - SizedBox( - height: 150, - width: 150, - child: Image.asset( - 'assets/images/sabar.webp', - fit: BoxFit.cover, - ), - ), - SizedBox( - height: 150, - width: 150, - child: Image.asset( - 'assets/images/wy_200x300.webp', - fit: BoxFit.cover, - ), - ), - ], - ); - } - - Widget _buildSliders() => Column( - children: [ - Slider( - min: 0, - max: 4, - value: _sigmaX, - divisions: 360, - label: 'x:' + _sigmaX.toStringAsFixed(1), - onChanged: (v) { - setState(() { - _sigmaX = v; - }); - }), - Slider( - min: 0, - max: 4, - value: _sigmaY, - divisions: 360, - label: 'beta:' + _sigmaY.toStringAsFixed(1), - onChanged: (v) { - setState(() { - _sigmaY = v; - }); - }) - ], - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_de_DE.json deleted file mode 100644 index 974fe1939..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "Baseline-Komponente", - "info": "Kann ein Unterelement aufnehmen und die Position des Unterelements durch die Kontrolle der Baseline-Höhe steuern. Wird normalerweise für Textkomponenten verwendet.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Baseline", - "desc": [ - "【child】 : Unterelement 【Widget】", - "【baseline】 : Baseline-Position 【double】", - "【baselineType】 : Baseline-Typ 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_en_US.json deleted file mode 100644 index f347bd8fe..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "Baseline Component", - "info": "Can contain a child component, and control the position of the child component by adjusting the baseline height. Generally used for text components.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Baseline", - "desc": [ - "【child】 : Child component 【Widget】", - "【baseline】 : Baseline position 【double】", - "【baselineType】 : Baseline type 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_es_ES.json deleted file mode 100644 index 9bf361d6c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "Componente de línea base", - "info": "Puede contener un componente hijo, controlando la posición del componente hijo mediante la altura de la línea base. Generalmente se utiliza para componentes de texto.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Baseline", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【baseline】 : Posición de la línea base 【double】", - "【baselineType】 : Tipo de línea base 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_fr_FR.json deleted file mode 100644 index d6b66c032..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "Composant de base", - "info": "Peut contenir un composant enfant, en contrôlant la hauteur de la ligne de base pour positionner le composant enfant. Généralement utilisé pour les composants de texte.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Baseline", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【baseline】 : Position de la ligne de base 【double】", - "【baselineType】 : Type de ligne de base 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_it_IT.json deleted file mode 100644 index 10f820e40..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "Componente di base", - "info": "Può contenere un componente figlio, controllando la posizione del componente figlio attraverso il controllo dell'altezza della linea di base. Generalmente utilizzato per i componenti di testo.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Baseline", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【baseline】 : Posizione della linea di base 【double】", - "【baselineType】 : Tipo di linea di base 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ja_JP.json deleted file mode 100644 index 9f1296d86..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "ベースラインコンポーネント", - "info": "1つの子コンポーネントを収容し、ベースラインの高さを制御して子コンポーネントの位置を制御します。一般的にテキストコンポーネントに使用されます。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Baselineの基本的な使用法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【baseline】 : ベースライン位置 【double】", - "【baselineType】 : ベースラインタイプ 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ko_KR.json deleted file mode 100644 index e55ad0e50..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "기준선 컴포넌트", - "info": "하나의 자식 컴포넌트를 수용할 수 있으며, 기준선 높이를 조절하여 자식 컴포넌트의 위치를 제어합니다. 일반적으로 텍스트 컴포넌트에 사용됩니다.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Baseline 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【baseline】 : 기준선 위치 【double】", - "【baselineType】 : 기준선 유형 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_pt_PT.json deleted file mode 100644 index b89e2c886..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "Componente de Linha de Base", - "info": "Pode acomodar um componente filho, controlando a posição do componente filho através da altura da linha de base. Geralmente usado para componentes de texto.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Baseline", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【baseline】 : Posição da linha de base 【double】", - "【baselineType】 : Tipo de linha de base 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ru_RU.json deleted file mode 100644 index a1b8ed3fd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "Базовый компонент", - "info": "Может содержать один дочерний компонент, контролируя положение дочернего компонента через управление высотой базовой линии. Обычно используется для текстовых компонентов.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Baseline", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【baseline】 : Позиция базовой линии 【double】", - "【baselineType】 : Тип базовой линии 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_zh-CN.json deleted file mode 100644 index 387bf89f7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 75, - "name": "Baseline", - "localName": "基线组件", - "info": "可容纳一个子组件,通过控制基线高度来控制子组件的位置。一般用于文字组件。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Baseline基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【baseline】 : 基线位置 【double】", - "【baselineType】 : 基线类型 【TextBaseline】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/node1_base.dart deleted file mode 100644 index f418a548a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Baseline/node1_base.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomBaseline extends StatefulWidget { - const CustomBaseline({Key? key}) : super(key: key); - - @override - _CustomBaselineState createState() => _CustomBaselineState(); -} - -class _CustomBaselineState extends State { - double _baseline=20; - - @override - Widget build(BuildContext context) { - Widget childBox = const Text( - '你好,Flutter', - style: TextStyle(fontSize: 20, fontFamily: "Menlo"), - ); - - - Widget baseline = Baseline( - child: childBox, - baseline: _baseline, - baselineType: TextBaseline.alphabetic); - - return Column( - children: [ - _buildSlider(), - Container( - width: 100/0.618, - height: 100, - color: Colors.grey.withAlpha(22), - child: baseline, - ), - ], - ); - } - - Widget _buildSlider() => Slider( - divisions: 20, - min: 0, - max: 60, - label: _baseline.toString(), - value: _baseline, - onChanged: (v) => setState(() => _baseline = v), - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_de_DE.json deleted file mode 100644 index b87f85898..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "Tastenkombinationen-Rückruf", - "info": "Kombinationen können als Tastenkombinationen festgelegt werden, die nach dem Erhalt des Fokus auf Tastenkombinationsereignisse reagieren.", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Verwendung von Tastenkombinationen", - "desc": [ - "Nach der Aktivierung des Fokus im Beispiel können die Kombinationen Strg+↑ und Strg+↓ die Zahl erhöhen oder verringern", - "【enabled】 : Ob verfügbar 【bool】", - "【onTapOutside】 : Außenklick-Listener 【TapRegionCallback?】", - "【onTapInside】 : Innenklick-Listener 【TapRegionCallback?】", - "【groupId】 : Kennung der Klickbereichsgruppe 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_en_US.json deleted file mode 100644 index 4b0b9a70a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "Shortcut Callback", - "info": "You can set combinations as shortcuts, and after gaining focus, respond to shortcut events.", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Shortcut Usage", - "desc": [ - "After activating focus in the example, the Ctrl+↑ and Ctrl+↓ key combinations can increase or decrease the number", - "【enabled】: Whether it is available 【bool】", - "【onTapOutside】: Click outside listener 【TapRegionCallback?】", - "【onTapInside】: Click inside listener 【TapRegionCallback?】", - "【groupId】: Click area group identifier 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_es_ES.json deleted file mode 100644 index 1d33d3037..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "Accesos directos de devolución de llamada", - "info": "Se pueden configurar combinaciones como accesos directos, que responderán a eventos de teclas rápidas después de obtener el foco.", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso de accesos directos", - "desc": [ - "En el caso, después de activar el foco, las combinaciones de teclas Ctrl+↑ y Ctrl+↓ pueden aumentar o disminuir el número", - "【enabled】: Si está disponible 【bool】", - "【onTapOutside】: Escucha de clic fuera 【TapRegionCallback?】", - "【onTapInside】: Escucha de clic dentro 【TapRegionCallback?】", - "【groupId】: Identificador del grupo de área de clic 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_fr_FR.json deleted file mode 100644 index b248d152d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "Raccourcis de rappel", - "info": "Vous pouvez définir des combinaisons comme raccourcis clavier, qui répondront aux événements de raccourci après avoir obtenu le focus.", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation des raccourcis", - "desc": [ - "Dans l'exemple, après activation du focus, les combinaisons Ctrl+↑ et Ctrl+↓ peuvent augmenter ou diminuer le nombre", - "【enabled】 : Disponible 【bool】", - "【onTapOutside】 : Écouteur de clic extérieur 【TapRegionCallback?】", - "【onTapInside】 : Écouteur de clic intérieur 【TapRegionCallback?】", - "【groupId】 : Identifiant du groupe de zone de clic 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_it_IT.json deleted file mode 100644 index 18986c20e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "Scorciatoie di callback", - "info": "È possibile impostare combinazioni come scorciatoie da tastiera, che rispondono agli eventi delle scorciatoie dopo aver ottenuto il focus.", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso delle scorciatoie", - "desc": [ - "Nel caso attivato, le combinazioni Ctrl+↑ e Ctrl+↓ possono aumentare o diminuire il numero", - "【enabled】 : Disponibile 【bool】", - "【onTapOutside】 : Ascolto del clic esterno 【TapRegionCallback?】", - "【onTapInside】 : Ascolto del clic interno 【TapRegionCallback?】", - "【groupId】 : Identificatore del gruppo di area di clic 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ja_JP.json deleted file mode 100644 index 7af909d02..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "ショートカットコールバック", - "info": "組み合わせをショートカットとして設定し、フォーカスを取得した後にショートカットイベントに応答できます。", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "ショートカットの使用", - "desc": [ - "ケースでフォーカスをアクティブにした後、Ctrl+↑ と Ctrl+↓ の組み合わせキーで数字を増減できます", - "【enabled】 : 使用可能かどうか 【bool】", - "【onTapOutside】 : 外部クリックリスナー 【TapRegionCallback?】", - "【onTapInside】 : 内部クリックリスナー 【TapRegionCallback?】", - "【groupId】 : クリック領域グループ識別子 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ko_KR.json deleted file mode 100644 index 1eb94cfcc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "단축키 콜백", - "info": "조합을 단축키로 설정할 수 있으며, 포커스를 얻은 후 단축키 이벤트에 응답합니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "단축키 사용", - "desc": [ - "예제에서 포커스를 활성화한 후, Ctrl+↑ 및 Ctrl+↓ 조합키로 숫자를 증가 또는 감소시킬 수 있습니다.", - "【enabled】 : 사용 가능 여부 【bool】", - "【onTapOutside】 : 외부 클릭 리스너 【TapRegionCallback?】", - "【onTapInside】 : 내부 클릭 리스너 【TapRegionCallback?】", - "【groupId】 : 클릭 영역 그룹 식별자 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_pt_PT.json deleted file mode 100644 index b9117fb84..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "Atalhos de Teclado", - "info": "Pode definir combinações como atalhos de teclado, que respondem a eventos de atalhos após obter o foco.", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso de Atalhos", - "desc": [ - "No exemplo, após ativar o foco, as combinações de teclas Ctrl+↑ e Ctrl+↓ podem aumentar ou diminuir o número", - "【enabled】 : Disponível 【bool】", - "【onTapOutside】 : Ouvinte de clique externo 【TapRegionCallback?】", - "【onTapInside】 : Ouvinte de clique interno 【TapRegionCallback?】", - "【groupId】 : Identificador do grupo de área de clique 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ru_RU.json deleted file mode 100644 index 124c280f8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "Горячие клавиши обратного вызова", - "info": "Можно настроить комбинации как горячие клавиши, которые будут реагировать на события горячих клавиш после получения фокуса.", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Использование горячих клавиш", - "desc": [ - "В примере после активации фокуса комбинации клавиш Ctrl+↑ и Ctrl+↓ могут увеличивать или уменьшать число", - "【enabled】 : Доступно ли 【bool】", - "【onTapOutside】 : Прослушивание клика снаружи 【TapRegionCallback?】", - "【onTapInside】 : Прослушивание клика внутри 【TapRegionCallback?】", - "【groupId】 : Идентификатор группы области клика 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_zh-CN.json deleted file mode 100644 index 260ccc34f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 283, - "name": "CallbackShortcuts", - "localName": "快捷键回调", - "info": "可以设置组合作为快捷键,在获取焦点后, 响应快捷键事件。", - "lever": 3, - "family": 2, - "linkIds": [ - 282, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "快捷键使用", - "desc": [ - "案例中激活焦点后,Ctrl+↑ 和 Ctrl+↓ 组合键可以增加或减少数字", - "【enabled】 : 是否可用 【bool】", - "【onTapOutside】 : 点击外界监听 【TapRegionCallback?】", - "【onTapInside】 : 点击内部监听 【TapRegionCallback?】", - "【groupId】 : 点击区域组标识 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/node1.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/node1.dart deleted file mode 100644 index 046532edd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CallbackShortcuts/node1.dart +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -class CallbackShortcutsDemo1 extends StatefulWidget { - const CallbackShortcutsDemo1({super.key}); - - @override - State createState() => _CallbackShortcutsDemo1State(); -} - -class _CallbackShortcutsDemo1State extends State { - FocusNode focusNode = FocusNode(); - - @override - void initState() { - focusNode.addListener(_onFocusChange); - _initActionBindings(); - super.initState(); - } - - @override - void dispose() { - focusNode.removeListener(_onFocusChange); - focusNode.dispose(); - - super.dispose(); - } - - void _onFocusChange() { - setState(() {}); - } - - int count = 0; - - @override - Widget build(BuildContext context) { - return Center( - child: TapRegion( - onTapInside: (_) => focusNode.requestFocus(), - onTapOutside: (_) => focusNode.unfocus(), - child: CallbackShortcuts( - bindings: _actionBindings, - child: Focus(autofocus: true, focusNode: focusNode, child: _display()), - ), - ), - ); - } - - Map _actionBindings = {}; - - void _initActionBindings() { - _actionBindings = { - LogicalKeySet(LogicalKeyboardKey.control, LogicalKeyboardKey.arrowUp): increase, - LogicalKeySet(LogicalKeyboardKey.control, LogicalKeyboardKey.arrowDown): decrease, - const SingleActivator(LogicalKeyboardKey.keyR, control: true): reset, - }; - } - - void increase() { - setState(() => count = count + 1); - } - - void decrease() { - setState(() => count = count - 1); - } - - void reset() { - setState(() => count = 0); - } - - Widget _display() { - Color color = focusNode.hasFocus ? Colors.blue : Colors.grey; - return Container( - decoration: BoxDecoration(border: Border.all(color: color)), - width: 460, - padding: const EdgeInsets.symmetric(horizontal: 12), - alignment: Alignment.center, - height: 60, - child: focusNode.hasFocus - ? _CounterDisplay(counter: count) - : Text( - focusNode.hasFocus ? '键盘输入点东西吧' : '点击我获取焦点', - style: TextStyle(color: color), - ), - ); - } -} - -class _CounterDisplay extends StatelessWidget { - final int counter; - - const _CounterDisplay({ - super.key, - required this.counter, - }); - - @override - Widget build(BuildContext context) { - TextStyle style = TextStyle(fontSize: 12, color: Colors.grey); - - return Wrap( - direction: Axis.vertical, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Text( - 'count: $counter', - style: TextStyle( - fontSize: 24, - fontWeight: FontWeight.bold, - color: Theme.of(context).primaryColor), - ), - Wrap( - spacing: 6, - children: [ - Text('【Ctrl+↑】:数字+1', style: style), - Text('【Ctrl+↓】:数字-1', style: style), - Text('【Ctrl+R】:归 0', style: style), - ], - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_de_DE.json deleted file mode 100644 index 9380e9a2f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "Zentrierungskomponente", - "info": "Kann ein Unterelement aufnehmen und es im übergeordneten Element zentrieren. Es ist eine vereinfachte Version der Align-Komponente.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Center", - "desc": [ - "【child】 : Unterelement 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_en_US.json deleted file mode 100644 index c69385b1d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "Center Component", - "info": "Can contain a child component and center it within the parent component, serving as a simplified mode of the Align component.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Center", - "desc": [ - "【child】: Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_es_ES.json deleted file mode 100644 index 88bed5545..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "Componente Centrado", - "info": "Puede contener un componente hijo y centrarlo en el componente padre, es un modo simplificado del componente Align.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Center", - "desc": [ - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_fr_FR.json deleted file mode 100644 index 89548fc7a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "Composant centré", - "info": "Peut contenir un composant enfant et le centrer dans le composant parent, c'est une version simplifiée du composant Align.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Center", - "desc": [ - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_it_IT.json deleted file mode 100644 index c09ac1916..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "Componente Centrato", - "info": "Può contenere un componente figlio e centrarlo rispetto al componente genitore, è una versione semplificata del componente Align.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di Center", - "desc": [ - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ja_JP.json deleted file mode 100644 index aa9c2c654..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "中央コンポーネント", - "info": "一つの子コンポーネントを収容し、それを親コンポーネントの中央に配置します。Alignコンポーネントの簡易版です。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Centerの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ko_KR.json deleted file mode 100644 index 0f48acb34..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "중앙 컴포넌트", - "info": "하나의 자식 컴포넌트를 수용하고 부모 컴포넌트의 중앙에 위치시킬 수 있습니다. Align 컴포넌트의 간소화된 모드입니다.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Center 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_pt_PT.json deleted file mode 100644 index 7c4a44ba9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "Componente Centralizado", - "info": "Pode conter um componente filho e centralizá-lo no componente pai, sendo uma versão simplificada do componente Align.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Center", - "desc": [ - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ru_RU.json deleted file mode 100644 index c9df7850c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "Центрирующий компонент", - "info": "Может содержать один дочерний компонент и центрировать его внутри родительского компонента. Это упрощенная версия компонента Align.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Center", - "desc": [ - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_zh-CN.json deleted file mode 100644 index b3e2a5488..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 86, - "name": "Center", - "localName": "居中组件", - "info": "可容纳一个子组件,并使其居中于父组件,是Align组件的一种精简模式。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Center基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/node1_base.dart deleted file mode 100644 index 7a753a4bb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Center/node1_base.dart +++ /dev/null @@ -1,23 +0,0 @@ - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomCenter extends StatelessWidget { - const CustomCenter({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(5), - width: 200, - height: 100, - color: Colors.grey.withAlpha(88), - child: Center( - child: Container( - width: 80, - height: 60, - color: Colors.cyanAccent, - ))); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_de_DE.json deleted file mode 100644 index 904c5f807..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "Ovale Zuschneidung", - "info": "Kann ein Unterelement aufnehmen und es entlang der Haupt- und Nebenachse der Breite und Höhe elliptisch zuschneiden.", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ClipOval", - "desc": [ - "【child】 : Unterelement 【Widget】", - "【clipBehavior】 : Zuschneideverhalten 【Clip】", - "【clipper】 : Zuschneider 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_en_US.json deleted file mode 100644 index dc93ef5e9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "Oval Clipping", - "info": "Can contain a child component and clip it into an ellipse with the width and height as the major and minor axes.", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ClipOval", - "desc": [ - "【child】: Child component 【Widget】", - "【clipBehavior】: Clipping behavior 【Clip】", - "【clipper】: Clipper 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_es_ES.json deleted file mode 100644 index 4904d9453..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "Recorte Ovalado", - "info": "Puede contener un componente hijo y lo recorta en forma de elipse utilizando el ancho y la altura como ejes mayor y menor.", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ClipOval", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【clipper】 : Recortador 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_fr_FR.json deleted file mode 100644 index 6d4bf5a91..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "Découpe ovale", - "info": "Peut contenir un composant enfant et le découper en forme ovale avec la largeur et la hauteur comme axes majeur et mineur.", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ClipOval", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【clipBehavior】 : Comportement de découpe 【Clip】", - "【clipper】 : Découpeur 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_it_IT.json deleted file mode 100644 index 22398369f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "Ritaglio ovale", - "info": "Può contenere un componente figlio e lo ritaglia in un'ellisse con larghezza e altezza come assi maggiore e minore.", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ClipOval", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【clipper】 : Ritagliatore 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ja_JP.json deleted file mode 100644 index bf02d466a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "楕円クリップ", - "info": "1つの子コンポーネントを収容し、幅と高さを長軸と短軸として楕円形にクリップします。", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipOvalの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【clipper】 : クリッパー 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ko_KR.json deleted file mode 100644 index 5d5c72fea..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "타원 자르기", - "info": "하위 컴포넌트를 포함할 수 있으며, 너비와 높이를 장축과 단축으로 하여 타원형으로 자릅니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipOval 기본 사용법", - "desc": [ - "【child】 : 하위 컴포넌트 【Widget】", - "【clipBehavior】 : 자르기 동작 【Clip】", - "【clipper】 : 자르기 도구 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_pt_PT.json deleted file mode 100644 index b0cee8870..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "Recorte Oval", - "info": "Pode conter um componente filho e cortá-lo em forma de elipse com os eixos maior e menor como largura e altura.", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ClipOval", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【clipBehavior】 : Comportamento de corte 【Clip】", - "【clipper】 : Cortador 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ru_RU.json deleted file mode 100644 index 237cf0e85..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "Эллиптическое обрезание", - "info": "Может содержать один дочерний компонент и обрезать его по эллипсу с большой и малой осями, равными ширине и высоте.", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ClipOval", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【clipBehavior】 : Поведение обрезания 【Clip】", - "【clipper】 : Обрезатель 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_zh-CN.json deleted file mode 100644 index ff1be8e3d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 66, - "name": "ClipOval", - "localName": "椭圆裁剪", - "info": "可容纳一个子组件,并将其以宽高为长轴和短轴进行椭圆裁切。", - "lever": 3, - "family": 2, - "linkIds": [ - 67, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipOval基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【clipper】 : 裁剪器 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/node1_base.dart deleted file mode 100644 index 710281252..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipOval/node1_base.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomClipOval extends StatelessWidget { - const CustomClipOval({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [ - ClipOval( - child: Image.asset( - "assets/images/wy_300x200.webp", - width: 150, - height: 100, - ), - ), - ClipOval( - child: Image.asset( - "assets/images/wy_300x200.webp", - width: 100, - height: 100, - fit: BoxFit.cover, - ), - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_de_DE.json deleted file mode 100644 index 7f30af8bd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "Pfadausschnitt", - "info": "Kann ein Kindelement aufnehmen und es entlang eines angegebenen Pfads zuschneiden. Ermöglicht die Anpassung der Pfadform und ist ein sehr flexibles Zuschneidelement.", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ClipPath", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【clipBehavior】 : Zuschneideverhalten 【Clip】", - "【clipper】 : Zuschneider 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_en_US.json deleted file mode 100644 index 658b062d7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "Path Clipping", - "info": "Can contain a child component and clip it according to the specified path. The path shape can be customized, making it a very flexible clipping component.", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ClipPath", - "desc": [ - "【child】 : Child component 【Widget】", - "【clipBehavior】 : Clipping behavior 【Clip】", - "【clipper】 : Clipper 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_es_ES.json deleted file mode 100644 index 81ad23f04..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "Recorte de ruta", - "info": "Puede contener un componente hijo y recortarlo según la ruta especificada. Se puede personalizar la forma de la ruta, es un componente de recorte muy flexible.", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ClipPath", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【clipper】 : Recortador 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_fr_FR.json deleted file mode 100644 index 2e55bb95f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "Découpage de chemin", - "info": "Peut contenir un composant enfant et le découper selon un chemin spécifié. Permet de personnaliser la forme du chemin, c'est un composant de découpage très flexible.", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ClipPath", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【clipBehavior】 : Comportement de découpage 【Clip】", - "【clipper】 : Découpeur 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_it_IT.json deleted file mode 100644 index bd535f5b1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "Ritaglio percorso", - "info": "Può contenere un componente figlio e ritagliarlo secondo un percorso specificato. È possibile personalizzare la forma del percorso, rendendolo un componente di ritaglio molto flessibile.", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di ClipPath", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【clipper】 : Ritagliatore 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ja_JP.json deleted file mode 100644 index ed0eeff19..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "パスクリップ", - "info": "子コンポーネントを1つ収容し、指定されたパスに従ってクリップします。パスの形状をカスタマイズでき、非常に柔軟なクリップコンポーネントです。", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipPathの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【clipper】 : クリッパー 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ko_KR.json deleted file mode 100644 index a5a7fadad..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "경로 클리핑", - "info": "하위 컴포넌트를 수용하고 지정된 경로에 따라 클리핑할 수 있습니다. 경로 모양을 사용자 정의할 수 있어 매우 유연한 클리핑 컴포넌트입니다.", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipPath 기본 사용", - "desc": [ - "【child】 : 하위 컴포넌트 【Widget】", - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【clipper】 : 클리퍼 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_pt_PT.json deleted file mode 100644 index 68b9446ab..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "Recorte de Caminho", - "info": "Pode conter um componente filho e recortá-lo de acordo com o caminho especificado. Permite personalizar a forma do caminho, sendo um componente de recorte muito flexível.", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ClipPath", - "desc": [ - "【child】 : Componente Filho 【Widget】", - "【clipBehavior】 : Comportamento de Recorte 【Clip】", - "【clipper】 : Recortador 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ru_RU.json deleted file mode 100644 index 709142123..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "Обрезка по пути", - "info": "Может содержать один дочерний компонент и обрезать его по указанному пути. Можно настроить форму пути, это очень гибкий компонент для обрезки.", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ClipPath", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【clipBehavior】 : Поведение обрезки 【Clip】", - "【clipper】 : Обрезчик 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_zh-CN.json deleted file mode 100644 index c913d4384..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 69, - "name": "ClipPath", - "localName": "路径裁剪", - "info": "可容纳一个子组件,并将其按指定路径进行裁剪。可以自定义路径形状,是一个很灵活的裁剪组件。", - "lever": 5, - "family": 2, - "linkIds": [ - 66, - 67, - 68 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipPath基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【clipper】 : 裁剪器 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/node1_base.dart deleted file mode 100644 index f2c5e67f5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipPath/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomClipPath extends StatelessWidget { - const CustomClipPath({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ClipPath( - clipper: ShapeBorderClipper(shape: _StarShapeBorder()), - child: Image.asset( - "assets/images/wy_300x200.webp", - width: 150, - height: 100, - fit: BoxFit.cover, - ), - ); - } -} - -class _StarShapeBorder extends ShapeBorder { - final Path _path = Path(); - - @override - EdgeInsetsGeometry get dimensions => EdgeInsets.zero; - - @override - Path getInnerPath(Rect rect, {TextDirection? textDirection}) { - return Path(); - } - - @override - Path getOuterPath(Rect rect, {TextDirection? textDirection}) => - nStarPath(20, rect.height / 2, rect.height / 2 * 0.85, - dx: rect.width / 2, dy: rect.height / 2); - - @override - void paint(Canvas canvas, Rect rect, {TextDirection? textDirection}) {} - - Path nStarPath(int num, double R, double r, {dx = 0, dy = 0}) { - double perRad = 2 * pi / num; - double radA = perRad / 2 / 2; - double radB = 2 * pi / (num - 1) / 2 - radA / 2 + radA; - _path.moveTo(cos(radA) * R + dx, -sin(radA) * R + dy); - for (int i = 0; i < num; i++) { - _path.lineTo( - cos(radA + perRad * i) * R + dx, -sin(radA + perRad * i) * R + dy); - _path.lineTo( - cos(radB + perRad * i) * r + dx, -sin(radB + perRad * i) * r + dy); - } - _path.close(); - return _path; - } - - @override - ShapeBorder scale(double t) { - return this; - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_de_DE.json deleted file mode 100644 index abddb8ae7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "Abgerundetes Rechteck zuschneiden", - "info": "Kann ein Kindelement aufnehmen und es mit abgerundeten Ecken zuschneiden. Geben Sie borderRadius als Eckradius an.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ClipRRect", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【borderRadius】 : Randradius 【BorderRadius】", - "【clipBehavior】 : Zuschneideverhalten 【Clip】", - "【clipper】 : Zuschneider 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_en_US.json deleted file mode 100644 index 46e2e47af..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "Rounded Rectangle Clipping", - "info": "Can contain a child component and perform rounded rectangle clipping on it. Specify borderRadius as the corner radius.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ClipRRect", - "desc": [ - "【child】: Child component 【Widget】", - "【borderRadius】: Border radius 【BorderRadius】", - "【clipBehavior】: Clipping behavior 【Clip】", - "【clipper】: Clipper 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_es_ES.json deleted file mode 100644 index 81bb5ffbb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "Recorte rectangular con esquinas redondeadas", - "info": "Puede contener un componente hijo y realizar un recorte rectangular con esquinas redondeadas. Especifica borderRadius como el radio de las esquinas.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ClipRRect", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【borderRadius】 : Radio del borde 【BorderRadius】", - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【clipper】 : Recortador 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_fr_FR.json deleted file mode 100644 index e7fcbc89b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "Rognage rectangulaire arrondi", - "info": "Peut contenir un composant enfant et le rogner en forme de rectangle arrondi. Spécifiez borderRadius comme rayon des coins.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ClipRRect", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【borderRadius】 : Rayon des bords 【BorderRadius】", - "【clipBehavior】 : Comportement de rognage 【Clip】", - "【clipper】 : Rogneur 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_it_IT.json deleted file mode 100644 index 032a195bb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "Ritaglio rettangolo arrotondato", - "info": "Può contenere un componente figlio e ritagliarlo in un rettangolo con angoli arrotondati. Specifica borderRadius come raggio degli angoli.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ClipRRect", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【borderRadius】 : Raggio del bordo 【BorderRadius】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【clipper】 : Ritagliatore 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ja_JP.json deleted file mode 100644 index 6b4c29dc1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "角丸矩形クリップ", - "info": "子コンポーネントを収容し、角丸矩形でクリップできます。borderRadiusを角の半径として指定します。", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipRRectの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【borderRadius】 : 角の半径 【BorderRadius】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【clipper】 : クリッパー 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ko_KR.json deleted file mode 100644 index a1786f7ad..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "둥근 사각형 클리핑", - "info": "하위 위젯을 포함하고 둥근 사각형으로 클리핑할 수 있습니다. borderRadius를 모서리 반지름으로 지정합니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipRRect 기본 사용법", - "desc": [ - "【child】 : 하위 위젯 【Widget】", - "【borderRadius】 : 모서리 반지름 【BorderRadius】", - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【clipper】 : 클리퍼 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_pt_PT.json deleted file mode 100644 index 2cd1570a1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "Recorte de Retângulo com Cantos Arredondados", - "info": "Pode conter um componente filho e aplica um recorte de retângulo com cantos arredondados. Especifique o borderRadius como o raio dos cantos.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ClipRRect", - "desc": [ - "【child】 : Componente Filho 【Widget】", - "【borderRadius】 : Raio da Borda 【BorderRadius】", - "【clipBehavior】 : Comportamento de Recorte 【Clip】", - "【clipper】 : Recortador 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ru_RU.json deleted file mode 100644 index 43ae1b60b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "Обрезка прямоугольника с закругленными углами", - "info": "Может содержать один дочерний компонент и обрезать его в форме прямоугольника с закругленными углами. Укажите borderRadius как радиус углов.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ClipRRect", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【borderRadius】 : Радиус границы 【BorderRadius】", - "【clipBehavior】 : Поведение обрезки 【Clip】", - "【clipper】 : Обрезчик 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_zh-CN.json deleted file mode 100644 index 79edf1a12..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 68, - "name": "ClipRRect", - "localName": "圆角矩形裁剪", - "info": "可容纳一个子组件,并将其进行圆角矩形裁剪。指定borderRadius作为边角半径。", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 67, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipRRect基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【borderRadius】 : 边线半径 【BorderRadius】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【clipper】 : 裁剪器 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/node1_base.dart deleted file mode 100644 index afd150968..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRRect/node1_base.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomClipRRect extends StatelessWidget { - const CustomClipRRect({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ClipRRect( - borderRadius: const BorderRadius.all(Radius.elliptical(35, 30)), - child: Image.asset( - "assets/images/wy_300x200.webp", - width: 150, - height: 100, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_de_DE.json deleted file mode 100644 index bfb91cc43..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "Rechteckiger Zuschnitt", - "info": "Kann ein Unterelement aufnehmen und es rechteckig zuschneiden. Kann mit SizedBox, Align, AspectRadio usw. eingeschränkt werden, um den Bereich zu begrenzen.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ClipRect", - "desc": [ - "【child】 : Unterelement 【Widget】", - "【clipBehavior】 : Zuschneideverhalten 【Clip】", - "【clipper】 : Zuschneider 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_en_US.json deleted file mode 100644 index 52b73167c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "Rectangular Clipping", - "info": "Can contain a child component and perform rectangular clipping. Can be localized using components such as SizedBox, Align, AspectRatio, etc.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ClipRect", - "desc": [ - "【child】: Child component 【Widget】", - "【clipBehavior】: Clipping behavior 【Clip】", - "【clipper】: Clipper 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_es_ES.json deleted file mode 100644 index 56331eb88..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "Recorte rectangular", - "info": "Puede contener un componente hijo y recortarlo en forma rectangular. Se puede delimitar utilizando componentes como SizedBox, Align, AspectRadio, etc.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ClipRect", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【clipper】 : Recortador 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_fr_FR.json deleted file mode 100644 index c01fb51da..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "Découpage rectangulaire", - "info": "Peut contenir un composant enfant et le découper en forme rectangulaire. Peut être limité à une zone spécifique en utilisant des composants tels que SizedBox, Align, AspectRatio, etc.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ClipRect", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【clipBehavior】 : Comportement de découpage 【Clip】", - "【clipper】 : Découpeur 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_it_IT.json deleted file mode 100644 index 8478d887a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "Ritaglio rettangolare", - "info": "Può contenere un componente figlio e ritagliarlo in forma rettangolare. Può essere delimitato utilizzando componenti come SizedBox, Align, AspectRadio, ecc.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di ClipRect", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【clipper】 : Ritagliatore 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ja_JP.json deleted file mode 100644 index cca703081..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "矩形クリップ", - "info": "子コンポーネントを収容し、それを矩形にクリップします。SizedBox、Align、AspectRadioなどの限定コンポーネントを使用して領域を指定できます。", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipRectの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【clipper】 : クリッパー 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ko_KR.json deleted file mode 100644 index 36c4a05cf..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "사각형 클리핑", - "info": "하위 위젯을 포함하고 사각형으로 클리핑할 수 있습니다. SizedBox, Align, AspectRadio 등을 사용하여 영역을 제한할 수 있습니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipRect 기본 사용", - "desc": [ - "【child】 : 하위 위젯 【Widget】", - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【clipper】 : 클리퍼 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_pt_PT.json deleted file mode 100644 index a2eaffb75..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "Recorte Retangular", - "info": "Pode conter um componente filho e cortá-lo em forma retangular. Pode ser delimitado com componentes como SizedBox, Align, AspectRadio, etc.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ClipRect", - "desc": [ - "【child】 : Componente Filho 【Widget】", - "【clipBehavior】 : Comportamento de Corte 【Clip】", - "【clipper】 : Cortador 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ru_RU.json deleted file mode 100644 index 535825d5d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "Прямоугольное обрезание", - "info": "Может содержать один дочерний компонент и обрезать его в прямоугольной форме. Может быть ограничен с помощью таких компонентов, как SizedBox, Align, AspectRatio и других.", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ClipRect", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【clipBehavior】 : Поведение обрезания 【Clip】", - "【clipper】 : Обрезатель 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_zh-CN.json deleted file mode 100644 index 6ed05fa3d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 67, - "name": "ClipRect", - "localName": "矩形裁剪", - "info": "可容纳一个子组件,并将其进行矩形裁切。可借助SizedBox、Align、AspectRadio等限定组件进行定域。", - "lever": 3, - "family": 2, - "linkIds": [ - 66, - 68, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ClipRect基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【clipper】 : 裁剪器 【CustomClipper】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/node1_base.dart deleted file mode 100644 index c0b4698d0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ClipRect/node1_base.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomClipRect extends StatelessWidget { - const CustomClipRect({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ClipRect( - child: SizedBox( - height: 100, - width: 100, - child: Image.asset( - "assets/images/wy_300x200.webp", - fit: BoxFit.cover, - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_de_DE.json deleted file mode 100644 index f68765313..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "Farbfilter", - "info": "Kann ein Kindelement aufnehmen und das Element mit 29 Überblendungsmodi und beliebigen Komponenten mischen, so leistungsstark, dass ich nicht weiß, was ich sagen soll. Erfahren Sie mehr über die App, die mit einem Klick alles grau macht.", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ColorFiltered", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【colorFilter】 : Farbfilter 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_en_US.json deleted file mode 100644 index 526d50cb5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "Color Filter", - "info": "Can accommodate a child component, and can mix the component with any other component using 29 blending modes, so powerful that I don't know what to say. Learn about the one-click grayscale app feature.", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ColorFiltered", - "desc": [ - "【child】: Child component 【Widget】", - "【colorFilter】: Color filter 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_es_ES.json deleted file mode 100644 index 0edca167b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "Filtro de color", - "info": "Puede contener un componente hijo y mezclar el componente con cualquier otro componente en 29 modos de superposición de colores, tan poderoso que no sé qué decir. Conoce la función de convertir toda la aplicación a gris con un solo clic.", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ColorFiltered", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【colorFilter】 : Filtro de color 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_fr_FR.json deleted file mode 100644 index 43ac7ce0c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "Filtre de couleur", - "info": "Peut contenir un composant enfant et peut mélanger le composant avec n'importe quel composant selon 29 modes de superposition de couleurs, si puissant que je ne sais pas quoi dire. Découvrez comment rendre toute l'application en niveaux de gris en un clic.", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ColorFiltered", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【colorFilter】 : Filtre de couleur 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_it_IT.json deleted file mode 100644 index 773bace4c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "Filtro colore", - "info": "Può contenere un componente figlio e può mescolare il componente con qualsiasi altro componente in 29 modalità di sovrapposizione del colore, così potente che non so cosa dire. Scopri come rendere tutto grigio con un solo clic nell'app.", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di ColorFiltered", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【colorFilter】 : Filtro colore 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ja_JP.json deleted file mode 100644 index 4de518189..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "カラーフィルター", - "info": "1つの子コンポーネントを収容でき、29種類のオーバーレイモードと任意のコンポーネントを混合できます。その強力さに言葉を失います。アプリのワンクリックで全体をグレーにする機能もご覧ください。", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ColorFilteredの基本的な使用法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【colorFilter】 : カラーフィルター 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ko_KR.json deleted file mode 100644 index dc8dd1999..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "색상 필터", - "info": "하위 컴포넌트를 포함할 수 있으며, 29가지 색상 혼합 모드와 임의의 컴포넌트를 혼합할 수 있습니다. 너무 강력해서 뭐라고 말해야 할지 모르겠습니다. 앱에서 한 번에 전체를 회색으로 만드는 기능을 확인해 보세요.", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ColorFiltered 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【colorFilter】 : 색상 필터 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_pt_PT.json deleted file mode 100644 index 49091b016..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "Filtro de Cor", - "info": "Pode conter um componente filho e pode misturar o componente com qualquer outro componente em 29 modos de sobreposição de cores, tão poderoso que não sei o que dizer. Saiba mais sobre o aplicativo que transforma tudo em cinza com um toque.", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ColorFiltered", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【colorFilter】 : Filtro de cor 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ru_RU.json deleted file mode 100644 index 382d73c1a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "Фильтр цвета", - "info": "Может содержать дочерний компонент, который можно смешивать с любым компонентом по 29 режимам наложения цветов. Настолько мощный, что я не знаю, что сказать. Узнайте, как сделать приложение полностью серым одним кликом.", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ColorFiltered", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【colorFilter】 : Фильтр цвета 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_zh-CN.json deleted file mode 100644 index 05a6ea0c7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 88, - "name": "ColorFiltered", - "localName": "滤色器", - "info": "可容纳一个子组件,可以并将组件按照29中叠色模式和任意组件混合,强大到我不知道该说什么好。app一键全灰了解一下。", - "lever": 5, - "family": 2, - "linkIds": [ - 277, - 38 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ColorFiltered基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【colorFilter】 : 滤色器 【ColorFilter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/node1_base.dart deleted file mode 100644 index 934aa5973..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColorFiltered/node1_base.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:widgets/utils/color_utils.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomColorFiltered extends StatefulWidget { - const CustomColorFiltered({Key? key}) : super(key: key); - - @override - _CustomColorFilteredState createState() => _CustomColorFilteredState(); -} - -class _CustomColorFilteredState extends State { - Color _color = Colors.blue.withAlpha(88); - - @override - Widget build(BuildContext context) { - _color = ColorUtils.randomColor(); - return Column( - children: [ - Wrap(spacing: 10, runSpacing: 10, children: [ - _buildRandomColor(), - ...BlendMode.values - .map((mode) => Column( - children: [ - _buildChild(mode), - const SizedBox(height: 10), - Text( - mode.toString().split('.')[1], - style: const TextStyle(fontSize: 10), - ) - ], - )) - .toList() - ]), - ], - ); - } - - Widget _buildChild(m) => SizedBox( - width: 58, - height: 58, - child: ColorFiltered( - child: - const Image(image: AssetImage("assets/images/icon_head.webp")), - colorFilter: ColorFilter.mode(_color, m)), - ); - - Widget _buildRandomColor() => GestureDetector( - onTap: () => setState(() {}), - child: Container( - alignment: Alignment.center, - width: 60, - height: 60, - decoration: BoxDecoration(color: _color, shape: BoxShape.circle), - child: const Text('点我'), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_de_DE.json deleted file mode 100644 index cca1d143f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "Farbbox", - "info": "Zeichnet die angegebene Farbe auf dem Layoutbereich des Unterelements und zeichnet dann das Unterelement auf dem Hintergrund.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ColoredBox", - "desc": [ - "【color】 : Komponente 【Color】", - "【child】 : Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_en_US.json deleted file mode 100644 index bc61c3b6a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "Color Box", - "info": "Draws a specified color on the layout area of the child component, then draws the child component on the background color.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ColoredBox", - "desc": [ - "【color】: Component 【Color】", - "【child】: Component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_es_ES.json deleted file mode 100644 index 664143d5b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "Caja de colores", - "info": "Dibuja un color especificado en el área de diseño del componente hijo, y luego dibuja el componente hijo sobre el color de fondo.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ColoredBox", - "desc": [ - "【color】 : componente 【Color】", - "【child】 : componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_fr_FR.json deleted file mode 100644 index 569999dc4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "Boîte de couleur", - "info": "Dessine une couleur spécifiée sur la zone de mise en page du composant enfant, puis dessine le composant enfant sur la couleur de fond.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ColoredBox", - "desc": [ - "【color】 : composant 【Color】", - "【child】 : composant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_it_IT.json deleted file mode 100644 index d610aeaf5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "Scatola dei colori", - "info": "Disegna un colore specifico nell'area di layout del componente figlio, quindi disegna il componente figlio sullo sfondo colorato.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di ColoredBox", - "desc": [ - "【color】 : componente 【Color】", - "【child】 : componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ja_JP.json deleted file mode 100644 index fbf34b6c9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "カラーボックス", - "info": "子コンポーネントのレイアウト領域に指定された色を描画し、その後、子コンポーネントを背景色の上に描画します。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ColoredBoxの基本使用", - "desc": [ - "【color】 : コンポーネント 【Color】", - "【child】 : コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ko_KR.json deleted file mode 100644 index 53d441632..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "색상 상자", - "info": "하위 구성 요소의 레이아웃 영역에 지정된 색상을 그린 다음 배경색 위에 하위 구성 요소를 그립니다.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ColoredBox 기본 사용", - "desc": [ - "【color】 : 구성 요소 【Color】", - "【child】 : 구성 요소 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_pt_PT.json deleted file mode 100644 index 51b8903d1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "Caixa de Cores", - "info": "Desenha uma cor especificada na área de layout do componente filho e, em seguida, desenha o componente filho sobre a cor de fundo.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do ColoredBox", - "desc": [ - "【color】 : componente 【Color】", - "【child】 : componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ru_RU.json deleted file mode 100644 index 308f27195..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "Цветная коробка", - "info": "Рисует указанный цвет на области макета дочернего компонента, а затем рисует дочерний компонент на фоновом цвете.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ColoredBox", - "desc": [ - "【color】 : компонент 【Color】", - "【child】 : компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_zh-CN.json deleted file mode 100644 index 590fc2ffe..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 267, - "name": "ColoredBox", - "localName": "颜色盒", - "info": "在子组件的布局区域上绘制指定颜色,然后将子组件绘制在背景色上。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ColoredBox基本使用", - "desc": [ - "【color】 : 组件 【Color】", - "【child】 : 组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/node1_base.dart deleted file mode 100644 index 714effeb0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ColoredBox/node1_base.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ColoredBoxDemo extends StatelessWidget { - const ColoredBoxDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ColoredBox( - color: Colors.red, - child: Container( - margin: const EdgeInsets.all(20), - padding: const EdgeInsets.all(20), - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(10)), - color: Colors.blue - ), - alignment: Alignment.center, - width: 250, - height: 100, - child: const Text( - "蓝色是加了 margin 和圆角的 Container,外层包裹红色的 ColoredBox,注意作用范围。", - style: TextStyle(color: Colors.white), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_de_DE.json deleted file mode 100644 index 8e4dcbfb6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "Synthetischer Transformationsfolger", - "info": "Wird in der Regel in Verbindung mit der Komponente CompositedTransformTarget verwendet, um das Overlay an die Zieltransformation anzupassen.", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Verwendung von CompositedTransformFollower", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【link】 : Verknüpfung 【LayerLink】", - "【offset】 : Versatz 【Offset】", - "【targetAnchor】 : Zielankerpunkt 【Alignment】", - "【followerAnchor】 : Ankerpunkt des Folgers 【Alignment】", - "【showWhenUnlinked】 : Anzeige bei Nichtverknüpfung 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_en_US.json deleted file mode 100644 index d4f070447..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "Composited Transform Follower", - "info": "Generally used in conjunction with the CompositedTransformTarget component to enable the Overlay to follow the target transformation.", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Usage of CompositedTransformFollower", - "desc": [ - "【child】 : Child widget 【Widget】", - "【link】 : Link 【LayerLink】", - "【offset】 : Offset 【Offset】", - "【targetAnchor】 : Target anchor 【Alignment】", - "【followerAnchor】 : Follower anchor 【Alignment】", - "【showWhenUnlinked】 : Whether to show when unlinked 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_es_ES.json deleted file mode 100644 index 7b7667b35..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "Seguidor de Transformación Compuesta", - "info": "Generalmente se usa junto con el componente CompositedTransformTarget, lo que permite que el Overlay siga la transformación del objetivo.", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de CompositedTransformFollower", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【link】 : Enlace 【LayerLink】", - "【offset】 : Desplazamiento 【Offset】", - "【targetAnchor】 : Punto de anclaje del objetivo 【Alignment】", - "【followerAnchor】 : Punto de anclaje del seguidor 【Alignment】", - "【showWhenUnlinked】 : Mostrar cuando no está enlazado 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_fr_FR.json deleted file mode 100644 index 4292fa567..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "Suiveur de transformation composite", - "info": "Généralement utilisé conjointement avec le composant CompositedTransformTarget, permet à l'Overlay de suivre la transformation de la cible.", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de CompositedTransformFollower", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【link】 : Lien 【LayerLink】", - "【offset】 : Décalage 【Offset】", - "【targetAnchor】 : Point d'ancrage de la cible 【Alignment】", - "【followerAnchor】 : Point d'ancrage du suiveur 【Alignment】", - "【showWhenUnlinked】 : Afficher si non lié 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_it_IT.json deleted file mode 100644 index cf13a2de8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "Seguace di Trasformazione Composta", - "info": "Generalmente utilizzato in combinazione con il componente CompositedTransformTarget, consente a Overlay di seguire le trasformazioni dell'obiettivo.", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di CompositedTransformFollower", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【link】 : Collegamento 【LayerLink】", - "【offset】 : Offset 【Offset】", - "【targetAnchor】 : Ancoraggio obiettivo 【Alignment】", - "【followerAnchor】 : Ancoraggio seguace 【Alignment】", - "【showWhenUnlinked】 : Mostra quando non collegato 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ja_JP.json deleted file mode 100644 index db21d1674..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "合成変換フォロワー", - "info": "通常、CompositedTransformTarget コンポーネントと組み合わせて使用され、Overlay をターゲットの変換に伴わせることができます。", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CompositedTransformFollower 使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【link】 : リンク 【LayerLink】", - "【offset】 : オフセット 【Offset】", - "【targetAnchor】 : ターゲットアンカー 【Alignment】", - "【followerAnchor】 : フォロワーアンカー 【Alignment】", - "【showWhenUnlinked】 : リンクされていない場合に表示するか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ko_KR.json deleted file mode 100644 index 6d54eabce..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "합성 변형 팔로워", - "info": "일반적으로 CompositedTransformTarget 컴포넌트와 함께 사용되어 Overlay가 대상 변형을 따라가도록 합니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CompositedTransformFollower 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【link】 : 링크 【LayerLink】", - "【offset】 : 오프셋 【Offset】", - "【targetAnchor】 : 타겟 앵커 【Alignment】", - "【followerAnchor】 : 팔로워 앵커 【Alignment】", - "【showWhenUnlinked】 : 링크되지 않을 때 표시 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_pt_PT.json deleted file mode 100644 index df81a3cec..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "Seguidor de Transformação Composta", - "info": "Geralmente usado em conjunto com o componente CompositedTransformTarget, permite que o Overlay acompanhe a transformação do alvo.", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do CompositedTransformFollower", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【link】 : Link 【LayerLink】", - "【offset】 : Deslocamento 【Offset】", - "【targetAnchor】 : Âncora do alvo 【Alignment】", - "【followerAnchor】 : Âncora do seguidor 【Alignment】", - "【showWhenUnlinked】 : Mostrar quando não estiver vinculado 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ru_RU.json deleted file mode 100644 index 2d7e6572e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "Следователь композитного преобразования", - "info": "Обычно используется совместно с компонентом CompositedTransformTarget, позволяя Overlay следовать за преобразованием цели.", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование CompositedTransformFollower", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【link】 : Ссылка 【LayerLink】", - "【offset】 : Смещение 【Offset】", - "【targetAnchor】 : Якорь цели 【Alignment】", - "【followerAnchor】 : Якорь следящего 【Alignment】", - "【showWhenUnlinked】 : Показывать при отсутствии связи 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_zh-CN.json deleted file mode 100644 index 174d72c50..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 265, - "name": "CompositedTransformFollower", - "localName": "合成变换跟随者", - "info": "一般与 CompositedTransformTarget 组件联合使用,可以使 Overlay 伴随目标变换。", - "lever": 3, - "family": 2, - "linkIds": [ - 266, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CompositedTransformFollower 使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【link】 : 链接 【LayerLink】", - "【offset】 : 偏移 【Offset】", - "【targetAnchor】 : 目标锚点 【Alignment】", - "【followerAnchor】 : 伴随者锚点 【Alignment】", - "【showWhenUnlinked】 : 为链接是否显示 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/node1_base.dart deleted file mode 100644 index e18ed3c27..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformFollower/node1_base.dart +++ /dev/null @@ -1,106 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/3/31 -/// contact me by email 1981462002@qq.com -/// - - -class CompositedTransformFollowerDemo extends StatelessWidget { - - const CompositedTransformFollowerDemo({Key? key}) : super(key: key); - - static const List colors =[Colors.red,Colors.yellow,Colors.blue,Colors.green]; - - - @override - Widget build(BuildContext context) { - return Container( - transform: Matrix4.rotationZ(-15/180*pi), - height: 250, - padding: const EdgeInsets.all(50.0), - child: ListView( - scrollDirection: Axis.horizontal, - children: [ - Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [_LogoTips(), const Text('点击图标\n显隐弹框')], - ), - ...colors.map((color) => Container(width: 80, color: color)) - ], - ), - ); - } - - -} - -class _LogoTips extends StatefulWidget { - @override - _LogoTipsState createState() => _LogoTipsState(); -} - -class _LogoTipsState extends State<_LogoTips> { - OverlayEntry? _overlayEntry; - - final LayerLink _layerLink = LayerLink(); - - bool show = false; - - OverlayEntry _createOverlayEntry() { - return OverlayEntry( - builder: (context) => Positioned( - width: 150, - child: CompositedTransformFollower( - link: _layerLink, - showWhenUnlinked: false, - offset: const Offset(0,-10), - targetAnchor: Alignment.topRight, - child: const Card( - child: Padding( - padding: EdgeInsets.all(8.0), - child: Text('我是一个 Overlay,目标组件为图标,当它变换时,我会伴随变换。'), - ), - ), - ), - )); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: _toggleOverlay, - child: CompositedTransformTarget( - link: _layerLink, - child: - const FlutterLogo( - size: 80, - ), - )); - } - - void _toggleOverlay() { - if (!show) { - _showOverlay(); - } else { - _hideOverlay(); - } - show = !show; - } - - void _showOverlay() { - _overlayEntry = _createOverlayEntry(); - Overlay.of(context)?.insert(_overlayEntry!); - } - - void _hideOverlay() { - _overlayEntry?.remove(); - } - - @override - void dispose() { - _hideOverlay(); - super.dispose(); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_de_DE.json deleted file mode 100644 index 9f212b549..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "Zusammengesetztes Transformationsziel", - "info": "Wird in der Regel in Verbindung mit der CompositedTransformFollower-Komponente verwendet, um das Overlay an die Zieltransformation anzupassen.", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Verwendung von CompositedTransformTarget", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【link】 : Verknüpfung 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_en_US.json deleted file mode 100644 index 25b5ad35f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "Composite Transform Target", - "info": "Generally used in conjunction with the CompositedTransformFollower component, it allows the Overlay to follow the target transformation.", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CompositedTransformTarget Usage", - "desc": [ - "【child】 : Child component 【Widget】", - "【link】 : Link 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_es_ES.json deleted file mode 100644 index 0fe0dd5dc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "Objetivo de transformación compuesta", - "info": "Generalmente se usa junto con el componente CompositedTransformFollower, lo que permite que el Overlay siga la transformación del objetivo.", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de CompositedTransformTarget", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【link】 : Enlace 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_fr_FR.json deleted file mode 100644 index 714f08cfa..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "Cible de transformation composite", - "info": "Généralement utilisé conjointement avec le composant CompositedTransformFollower, il permet à l'Overlay de suivre les transformations de la cible.", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de CompositedTransformTarget", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【link】 : Lien 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_it_IT.json deleted file mode 100644 index 0440bbafa..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "Obiettivo di trasformazione composita", - "info": "Generalmente utilizzato insieme al componente CompositedTransformFollower, consente all'Overlay di seguire le trasformazioni dell'obiettivo.", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di CompositedTransformTarget", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【link】 : Collegamento 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ja_JP.json deleted file mode 100644 index c6b8469c6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "合成変換ターゲット", - "info": "一般的に CompositedTransformFollower コンポーネントと組み合わせて使用され、Overlay をターゲットの変換に伴わせることができます。", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CompositedTransformTarget の使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【link】 : リンク 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ko_KR.json deleted file mode 100644 index a82981b35..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "합성 변환 대상", - "info": "일반적으로 CompositedTransformFollower 컴포넌트와 함께 사용되며, Overlay가 대상 변환을 따라가도록 할 수 있습니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CompositedTransformTarget 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【link】 : 링크 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_pt_PT.json deleted file mode 100644 index 56e64b598..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "Alvo de Transformação Composta", - "info": "Geralmente usado em conjunto com o componente CompositedTransformFollower, pode fazer com que o Overlay acompanhe a transformação do alvo.", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do CompositedTransformTarget", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【link】 : Link 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ru_RU.json deleted file mode 100644 index 291a2959f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "Цель составного преобразования", - "info": "Обычно используется совместно с компонентом CompositedTransformFollower, что позволяет Overlay следовать за преобразованием цели.", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование CompositedTransformTarget", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【link】 : Ссылка 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_zh-CN.json deleted file mode 100644 index 8bc37647f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 266, - "name": "CompositedTransformTarget", - "localName": "合成变换目标", - "info": "一般与 CompositedTransformFollower 组件联合使用,可以使 Overlay 伴随目标变换。", - "lever": 3, - "family": 2, - "linkIds": [ - 265, - 182 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CompositedTransformTarget 使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【link】 : 链接 【LayerLink】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/node1_base.dart deleted file mode 100644 index 57ef07e67..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CompositedTransformTarget/node1_base.dart +++ /dev/null @@ -1,103 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/3/31 -/// contact me by email 1981462002@qq.com -/// - - -class CompositedTransformTargetDemo extends StatelessWidget { - - const CompositedTransformTargetDemo({Key? key}) : super(key: key); - - static const List colors =[Colors.red,Colors.yellow,Colors.blue,Colors.green]; - - @override - Widget build(BuildContext context) { - return Container( - transform: Matrix4.rotationZ(-15/180*pi), - height: 250, - padding: const EdgeInsets.all(50.0), - child: ListView( - scrollDirection: Axis.horizontal, - children: [ - Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [_LogoTips(), const Text('点击图标\n显隐弹框')], - ), - ...colors.map((color) => Container(width: 80, color: color)) - ], - ), - ); - } - -} - -class _LogoTips extends StatefulWidget { - @override - _LogoTipsState createState() => _LogoTipsState(); -} - -class _LogoTipsState extends State<_LogoTips> { - OverlayEntry? _overlayEntry; - - final LayerLink _layerLink = LayerLink(); - - bool show = false; - - OverlayEntry _createOverlayEntry() { - return OverlayEntry( - builder: (context) => Positioned( - width: 150, - child: CompositedTransformFollower( - link: _layerLink, - showWhenUnlinked: false, - targetAnchor: Alignment.topRight, - child: const Card( - child: Padding( - padding: EdgeInsets.all(8.0), - child: Text('我是一个 Overlay,目标组件为图标,当它变换时,我会伴随变换。'), - ), - ), - ), - )); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: _toggleOverlay, - child: CompositedTransformTarget( - link: _layerLink, - child: - const FlutterLogo( - size: 80, - ), - )); - } - - void _toggleOverlay() { - if (!show) { - _showOverlay(); - } else { - _hideOverlay(); - } - show = !show; - } - - void _showOverlay() { - _overlayEntry = _createOverlayEntry(); - Overlay.of(context)?.insert(_overlayEntry!); - } - - void _hideOverlay() { - _overlayEntry?.remove(); - } - - @override - void dispose() { - _hideOverlay(); - super.dispose(); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_de_DE.json deleted file mode 100644 index 5f54b4743..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "Eingeschränkte Box", - "info": "Kann ein Unterelement aufnehmen und durch die Angabe von maximaler und minimaler Breite und Höhe den Bereich des Unterelements begrenzen.", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von BoxConstraints", - "desc": [ - "【child】 : Kind-Komponente 【Widget】", - "【minWidth】 : Minimale Breite 【double】", - "【minHeight】 : Minimale Höhe 【double】", - "【maxHeight】 : Maximale Höhe 【double】", - "【maxWidth】 : Maximale Breite 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_en_US.json deleted file mode 100644 index c1d16da09..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "Constrained Box", - "info": "Can contain a child component, and limit the area of the child component by specifying the maximum and minimum width and height.", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of BoxConstraints", - "desc": [ - "【child】 : Child component 【Widget】", - "【minWidth】 : Minimum width 【double】", - "【minHeight】 : Minimum height 【double】", - "【maxHeight】 : Maximum height 【double】", - "【maxWidth】 : Maximum width 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_es_ES.json deleted file mode 100644 index 5b3675abd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "Caja con restricciones", - "info": "Puede contener un componente hijo, limitando el área del componente hijo especificando el ancho y alto máximo y mínimo.", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de BoxConstraints", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【minWidth】 : Ancho mínimo 【double】", - "【minHeight】 : Altura mínima 【double】", - "【maxHeight】 : Altura máxima 【double】", - "【maxWidth】 : Ancho máximo 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_fr_FR.json deleted file mode 100644 index 857eb2d64..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "Boîte de contraintes", - "info": "Peut contenir un composant enfant, en spécifiant la largeur et la hauteur maximales et minimales pour limiter la zone du composant enfant.", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de BoxConstraints", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【minWidth】 : Largeur minimale 【double】", - "【minHeight】 : Hauteur minimale 【double】", - "【maxHeight】 : Hauteur maximale 【double】", - "【maxWidth】 : Largeur maximale 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_it_IT.json deleted file mode 100644 index 5147457f8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "Scatola Vincolata", - "info": "Può contenere un componente figlio, limitando l'area del componente figlio specificando larghezza e altezza massime e minime.", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di BoxConstraints", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【minWidth】 : Larghezza minima 【double】", - "【minHeight】 : Altezza minima 【double】", - "【maxHeight】 : Altezza massima 【double】", - "【maxWidth】 : Larghezza massima 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ja_JP.json deleted file mode 100644 index 57709223e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "制約ボックス", - "info": "子コンポーネントを収容でき、最大・最小の幅と高さを指定して、子コンポーネントの領域を制限します。", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BoxConstraintsの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【minWidth】 : 最小幅 【double】", - "【minHeight】 : 最小高さ 【double】", - "【maxHeight】 : 最大高さ 【double】", - "【maxWidth】 : 最大幅 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ko_KR.json deleted file mode 100644 index 02b077fb1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "제한 상자", - "info": "하위 위젯을 수용할 수 있으며, 최대 및 최소 너비와 높이를 지정하여 하위 위젯의 영역을 제한합니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BoxConstraints 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【minWidth】 : 최소 너비 【double】", - "【minHeight】 : 최소 높이 【double】", - "【maxHeight】 : 최대 높이 【double】", - "【maxWidth】 : 최대 너비 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_pt_PT.json deleted file mode 100644 index 585ab4eff..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "Caixa Restrita", - "info": "Pode conter um componente filho, limitando a área onde o componente filho pode estar, especificando a largura e altura mínima e máxima.", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de BoxConstraints", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【minWidth】 : Largura mínima 【double】", - "【minHeight】 : Altura mínima 【double】", - "【maxHeight】 : Altura máxima 【double】", - "【maxWidth】 : Largura máxima 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ru_RU.json deleted file mode 100644 index 65a5a04f3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "Ограниченный контейнер", - "info": "Может содержать один дочерний компонент, ограничивая область размещения дочернего компонента путем указания минимальной и максимальной ширины и высоты.", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование BoxConstraints", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【minWidth】 : Минимальная ширина 【double】", - "【minHeight】 : Минимальная высота 【double】", - "【maxHeight】 : Максимальная высота 【double】", - "【maxWidth】 : Максимальная ширина 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_zh-CN.json deleted file mode 100644 index 05755076e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 80, - "name": "ConstrainedBox", - "localName": "约束盒", - "info": "可容纳一个子组件,通过指定最大、最小宽高,来限定子组件容身区域。", - "lever": 3, - "family": 2, - "linkIds": [ - 1, - 79, - 81 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BoxConstraints基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【minWidth】 : 最小宽 【double】", - "【minHeight】 : 最小高 【double】", - "【maxHeight】 : 最大高 【double】", - "【maxWidth】 : 最大宽 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/node1_base.dart deleted file mode 100644 index 59a656e68..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ConstrainedBox/node1_base.dart +++ /dev/null @@ -1,65 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomConstrainedBox extends StatefulWidget { - const CustomConstrainedBox({Key? key}) : super(key: key); - - @override - _CustomConstrainedBoxState createState() => _CustomConstrainedBoxState(); -} - -class _CustomConstrainedBoxState extends State { - String _text = ''; - - @override - Widget build(BuildContext context) { - Widget child = Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 40, - height: 40, - child: const Text("Static"), - ); - - Widget box = ConstrainedBox( - constraints: const BoxConstraints( - minHeight: 50, - minWidth: 20, - maxHeight: 80, - maxWidth: 150, - ), - child: Container(color: Colors.orange, child: Text(_text)), - ); - return Column( - children: [ - Container( - color: Colors.grey.withAlpha(22), - width: 300, - height: 100, - child: Row( - children: [child, UnconstrainedBox(child: box), child], - ), - ), - _buildInput(), - ], - ); - } - - Widget _buildInput() { - return Padding( - padding: const EdgeInsets.all(18.0), - child: TextField( - decoration: const InputDecoration( - border: OutlineInputBorder(), - hintText: '请输入', - ), - onChanged: (v) { - setState(() { - _text = v; - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_de_DE.json deleted file mode 100644 index 924c857c8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "iOS-Textauswahl-Werkzeugleiste", - "info": "Eine iOS-stil Werkzeugleiste, die auf Textauswahl reagiert", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Diese Komponente kann nicht verwendet werden", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_en_US.json deleted file mode 100644 index 9b985784f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "iOS Text Selection Toolbar", - "info": "An iOS-style toolbar that responds to text selection", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "This component is not available", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_es_ES.json deleted file mode 100644 index 1fefc04f5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "Barra de herramientas de selección de texto iOS", - "info": "Barra de herramientas de estilo iOS que responde a la selección de texto", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Este componente no se puede usar", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_fr_FR.json deleted file mode 100644 index 39d455a98..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "Barre d'outils de sélection de texte iOS", - "info": "Barre d'outils de style iOS qui répond à la sélection de texte", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Ce composant ne peut pas être utilisé", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_it_IT.json deleted file mode 100644 index 0837589ca..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "Barra degli strumenti di selezione del testo per iOS", - "info": "Barra degli strumenti in stile iOS che risponde alla selezione del testo", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Questo componente non può essere utilizzato", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ja_JP.json deleted file mode 100644 index ffbb40289..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "iOSテキスト選択ツールバー", - "info": "テキスト選択に応答するiOSスタイルのツールバー", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "このコンポーネントは使用できません", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ko_KR.json deleted file mode 100644 index 2040ec188..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "ios 텍스트 선택 도구 모음", - "info": "텍스트 선택에 반응하는 ios 스타일의 도구 모음", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "이 컴포넌트는 사용할 수 없습니다", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_pt_PT.json deleted file mode 100644 index 531eaca34..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "Barra de ferramentas de seleção de texto iOS", - "info": "Barra de ferramentas no estilo iOS que responde à seleção de texto", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Este componente não pode ser usado", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ru_RU.json deleted file mode 100644 index 5c65d5a02..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "Панель инструментов для выбора текста iOS", - "info": "Панель инструментов в стиле iOS, реагирующая на выбор текста", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Этот компонент недоступен", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_zh-CN.json deleted file mode 100644 index c1cf49995..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 299, - "name": "CupertinoTextSelectionToolbar", - "localName": "ios文字选择工具条", - "info": "对文本选择做出响应的 ios 风格的工具栏", - "lever": 1, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "该组件无法使用", - "desc": [ - "【-】 : - 【-】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/node1_base.dart deleted file mode 100644 index aebf20b39..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/node1_base.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class CupertinoTextSelectionToolbarDemo extends StatelessWidget { - const CupertinoTextSelectionToolbarDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - padding: const EdgeInsets.all(10), - width: 300, - child: const Text( - "注:此组件私有构造器,外部无法使用,并没有使用价值。", - style: TextStyle(color: Colors.red, fontSize: 18), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_de_DE.json deleted file mode 100644 index c4e97d673..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "Zeichnungskomponente", - "info": "Durch CustomPainter können komplexe benutzerdefinierte Zeichnungskomponenten erstellt werden, was die Seele der benutzerdefinierten Komponenten in Flutter darstellt.", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "CustomPaint Linienzeichnung", - "desc": [ - "【painter】 : Zeichnungsgerät 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "CustomPaint Bézier-Kurven", - "desc": [ - "Flutter unterstützt auch komplexe Zeichnungen wie Bézier-Kurven." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_en_US.json deleted file mode 100644 index 6f1319301..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "Drawing Component", - "info": "Drawing through CustomPainter can achieve some complex custom drawing components, and it is the soul of custom components in Flutter.", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "CustomPaint Line Drawing", - "desc": [ - "【painter】: Painter 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "CustomPaint Bezier Curve", - "desc": [ - "Flutter also supports complex drawings such as Bezier curves." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_es_ES.json deleted file mode 100644 index ca8bd5f04..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "Componente de dibujo", - "info": "A través de CustomPainter, se pueden implementar algunos componentes de dibujo personalizados complejos, siendo el alma de los componentes personalizados en Flutter.", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "CustomPaint dibuja formas de línea", - "desc": [ - "【painter】: pintor 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "CustomPaint dibuja curvas de Bézier", - "desc": [ - "Flutter también admite dibujos complejos como curvas de Bézier." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_fr_FR.json deleted file mode 100644 index 7eaf8e7f0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "Composant de dessin", - "info": "En utilisant CustomPainter, il est possible de réaliser des composants de dessin personnalisés complexes, ce qui en fait une figure essentielle des composants personnalisés dans Flutter.", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "Dessin de lignes avec CustomPaint", - "desc": [ - "【painter】 : Peintre 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "Dessin de courbes de Bézier avec CustomPaint", - "desc": [ - "Flutter prend également en charge des dessins complexes comme les courbes de Bézier." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_it_IT.json deleted file mode 100644 index 698e0db3f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "Componente di disegno", - "info": "Attraverso CustomPainter, è possibile realizzare alcuni componenti di disegno personalizzati complessi, che rappresentano l'anima dei componenti personalizzati in Flutter.", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "Disegno di linee con CustomPaint", - "desc": [ - "【painter】 : strumento di disegno 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "Curva di Bézier con CustomPaint", - "desc": [ - "Flutter supporta anche disegni complessi come le curve di Bézier." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ja_JP.json deleted file mode 100644 index 98a0fa613..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "描画コンポーネント", - "info": "CustomPainterを使用して描画することで、複雑なカスタム描画コンポーネントを実現できます。これはFlutterのカスタムコンポーネントの中心的な存在です。", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "CustomPaintで線と図形を描画", - "desc": [ - "【painter】 : ペインター 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "CustomPaintでベジェ曲線を描画", - "desc": [ - "Flutterはベジェ曲線などの複雑な描画もサポートしています。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ko_KR.json deleted file mode 100644 index 7fd754bb0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "그리기 컴포넌트", - "info": "CustomPainter를 통해 그리기를 수행하며, 복잡한 사용자 정의 그리기 컴포넌트를 구현할 수 있습니다. Flutter에서 사용자 정의 컴포넌트의 핵심 요소입니다.", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "CustomPaint로 선 그리기", - "desc": [ - "【painter】 : 페인터 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "CustomPaint로 베지어 곡선 그리기", - "desc": [ - "Flutter는 베지어 곡선과 같은 복잡한 그리기도 지원합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_pt_PT.json deleted file mode 100644 index 4cdbd577c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "Componente de Desenho", - "info": "Através do CustomPainter, é possível realizar alguns componentes de desenho personalizados complexos, sendo uma figura central na criação de componentes personalizados no Flutter.", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "Desenho de Linhas com CustomPaint", - "desc": [ - "【painter】 : Pintor 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "Desenho de Curvas de Bézier com CustomPaint", - "desc": [ - "O Flutter também suporta desenhos complexos como curvas de Bézier." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ru_RU.json deleted file mode 100644 index 27456915b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "Компонент рисования", - "info": "Рисование с помощью CustomPainter позволяет реализовать сложные пользовательские компоненты рисования, являясь ключевым элементом пользовательских компонентов во Flutter.", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "Рисование линий с помощью CustomPaint", - "desc": [ - "【painter】 : рисовальщик 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "Рисование кривых Безье с помощью CustomPaint", - "desc": [ - "Flutter также поддерживает сложное рисование, такое как кривые Безье." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_zh-CN.json deleted file mode 100644 index c950ad8ee..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 166, - "name": "CustomPaint", - "localName": "绘制组件", - "info": "通过CustomPainter进行绘制,可实现一些复杂的自定义绘制组件,是Flutter中自定义组件的灵魂人物。", - "lever": 5, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_clock.dart", - "name": "CustomPaint绘线图形", - "desc": [ - "【painter】 : 绘画器 【CustomPainter】" - ] - }, - { - "file": "node2_bezier.dart", - "name": "CustomPaint绘线贝塞尔曲线", - "desc": [ - "Flutter也支持贝塞尔曲线等复杂绘制。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/node1_clock.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/node1_clock.dart deleted file mode 100644 index df2cdebf1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/node1_clock.dart +++ /dev/null @@ -1,198 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class ClockPage extends StatelessWidget { - const ClockPage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: 100, - child:RepaintBoundary( - child: CustomPaint(//使用CustomPaint盛放画布 - painter: ClockPainter(), - ), - ), - ) - ; - } -} - -class ClockPainter extends CustomPainter { - late Paint _paint; - final double _radius = 3.0; //小球半径 - final Path _path = Path(); //画笔对象 - ClockPainter () { - _paint = Paint()..color= const Color(0xff45d0fd)..isAntiAlias=true; - _path.addOval(Rect.fromCircle(radius: _radius, center: const Offset(0, 0))); //小球路径 - } - - @override - void paint(Canvas canvas, Size size) { - print(size); - canvas.clipRect(Offset.zero & size); - canvas.translate(size.width/2-65*2, 0); - renderDigit(1, canvas);//渲染数字 - canvas.translate(65, 0);//平移画布 - renderDigit(9, canvas); - canvas.translate(65, 0); renderDigit(9, canvas); - canvas.translate(65, 0); renderDigit(4, canvas); - } - //渲染数字 num :要显示的数字 canvas :画布 - void renderDigit(int num, Canvas canvas) { - if (num > 10) { return; } - for (int i = 0; i < digit[num].length; i++) { - for (int j = 0; j < digit[num][j].length; j++) { - if (digit[num][i][j] == 1) { - canvas.save(); - double rX = j * 2 * (_radius + 1) + (_radius + 1); //第(i,j)个点圆心横坐标 - double rY = i * 2 * (_radius + 1) + (_radius + 1); //第(i,j)个点圆心纵坐标 - canvas.translate(rX, rY); - canvas.drawPath(_path, _paint); - canvas.restore(); - } - } - } - } - @override - bool shouldRepaint(CustomPainter oldDelegate)=> false; -} - -const digit = [ - [ - [0, 0, 1, 1, 1, 0, 0], - [0, 1, 1, 0, 1, 1, 0], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [0, 1, 1, 0, 1, 1, 0], - [0, 0, 1, 1, 1, 0, 0] - ], //0 - - [ - [0, 0, 0, 1, 1, 0, 0], - [0, 1, 1, 1, 1, 0, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 0, 1, 1, 0, 0], - [1, 1, 1, 1, 1, 1, 1] - ], //1 - [ - [0, 1, 1, 1, 1, 1, 0], - [1, 1, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 1, 1, 0, 0, 0], - [0, 1, 1, 0, 0, 0, 0], - [1, 1, 0, 0, 0, 0, 0], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 1, 1, 1, 1, 1] - ], //2 - [ - [1, 1, 1, 1, 1, 1, 1], - [0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 1, 1, 1, 0, 0], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [0, 1, 1, 1, 1, 1, 0] - ], //3 - - [ - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 1, 1, 1, 0], - [0, 0, 1, 1, 1, 1, 0], - [0, 1, 1, 0, 1, 1, 0], - [1, 1, 0, 0, 1, 1, 0], - [1, 1, 1, 1, 1, 1, 1], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 1, 1, 1, 1] - ], //4 - [ - [1, 1, 1, 1, 1, 1, 1], - [1, 1, 0, 0, 0, 0, 0], - [1, 1, 0, 0, 0, 0, 0], - [1, 1, 1, 1, 1, 1, 0], - [0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [0, 1, 1, 1, 1, 1, 0] - ], //5 - [ - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 1, 1, 0, 0, 0], - [0, 1, 1, 0, 0, 0, 0], - [1, 1, 0, 0, 0, 0, 0], - [1, 1, 0, 1, 1, 1, 0], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [0, 1, 1, 1, 1, 1, 0] - ], //6 - [ - [1, 1, 1, 1, 1, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 0, 1, 1, 0, 0, 0], - [0, 0, 1, 1, 0, 0, 0], - [0, 0, 1, 1, 0, 0, 0], - [0, 0, 1, 1, 0, 0, 0] - ], //7 - [ - [0, 1, 1, 1, 1, 1, 0], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [0, 1, 1, 1, 1, 1, 0], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [0, 1, 1, 1, 1, 1, 0] - ], //8 - [ - [0, 1, 1, 1, 1, 1, 0], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [1, 1, 0, 0, 0, 1, 1], - [0, 1, 1, 1, 0, 1, 1], - [0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 0, 1, 1], - [0, 0, 0, 0, 1, 1, 0], - [0, 0, 0, 1, 1, 0, 0], - [0, 1, 1, 0, 0, 0, 0] - ], //9 - [ - [0, 0, 0, 0], - [0, 0, 0, 0], - [0, 1, 1, 0], - [0, 1, 1, 0], - [0, 0, 0, 0], - [0, 0, 0, 0], - [0, 1, 1, 0], - [0, 1, 1, 0], - [0, 0, 0, 0], - [0, 0, 0, 0] - ] //: -]; diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/node2_bezier.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/node2_bezier.dart deleted file mode 100644 index d59250e69..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomPaint/node2_bezier.dart +++ /dev/null @@ -1,168 +0,0 @@ -import 'dart:ui'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-28 -/// contact me by email 1981462002@qq.com - -class PlayBezier3Page extends StatefulWidget { - const PlayBezier3Page({Key? key}) : super(key: key); - - @override - _PlayBezier3PageState createState() => _PlayBezier3PageState(); -} - -class _PlayBezier3PageState extends State { - List _pos = []; - int selectPos=0; - - @override - void initState() { - _initPoints(); - super.initState(); - } - - void _initPoints() { - _pos = []; - _pos.add(const Offset(0, 0)); - _pos.add(const Offset(60, -60)); - _pos.add(const Offset(-90, -90)); - _pos.add(const Offset(-120, -40)); - } - - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - width: MediaQuery.of(context).size.width, - child: RepaintBoundary( - child: CustomPaint( - painter: BezierPainter(pos: _pos, selectPos: selectPos), - ), - ), - ); - } -} - -class BezierPainter extends CustomPainter { - late Paint _gridPaint; - late Path _gridPath; - - late Paint _mainPaint; - late Path _mainPath; - int? selectPos; - late Paint _helpPaint; - - List pos; - - BezierPainter({this.pos=const [], this.selectPos}) { - _gridPaint = Paint()..style = PaintingStyle.stroke; - _gridPath = Path(); - - _mainPaint = Paint() - ..color = Colors.orange - ..style = PaintingStyle.stroke - ..strokeWidth = 2; - _mainPath = Path(); - - _helpPaint = Paint() - ..color = Colors.purple - ..style = PaintingStyle.stroke - ..strokeWidth = 2 - ..strokeCap = StrokeCap.round; - } - - @override - void paint(Canvas canvas, Size size) { - canvas.clipRect(Offset.zero & size); - canvas.translate(size.width / 2, size.height / 2); - _drawGrid(canvas, size); //绘制格线 - _drawAxis(canvas, size); //绘制轴线 - - _mainPath.moveTo(pos[0].dx, pos[0].dy); - _mainPath.cubicTo( - pos[1].dx, pos[1].dy, pos[2].dx, pos[2].dy, pos[3].dx, pos[3].dy); - canvas.drawPath(_mainPath, _mainPaint); - _drawHelp(canvas); - _drawSelectPos(canvas); - } - - @override - bool shouldRepaint(CustomPainter oldDelegate) => false; - - void _drawGrid(Canvas canvas, Size size) { - _gridPaint - ..color = Colors.grey - ..strokeWidth = 0.5; - _gridPath = _buildGridPath(_gridPath, size); - canvas.drawPath(_buildGridPath(_gridPath, size), _gridPaint); - - canvas.save(); - canvas.scale(1, -1); //沿x轴镜像 - canvas.drawPath(_gridPath, _gridPaint); - canvas.restore(); - - canvas.save(); - canvas.scale(-1, 1); //沿y轴镜像 - canvas.drawPath(_gridPath, _gridPaint); - canvas.restore(); - - canvas.save(); - canvas.scale(-1, -1); //沿原点镜像 - canvas.drawPath(_gridPath, _gridPaint); - canvas.restore(); - } - - void _drawAxis(Canvas canvas, Size size) { - canvas.drawPoints( - PointMode.lines, - [ - Offset(-size.width / 2, 0), - Offset(size.width / 2, 0), - Offset(0, -size.height / 2), - Offset(0, size.height / 2), - Offset(0, size.height / 2), - Offset(0 - 7.0, size.height / 2 - 10), - Offset(0, size.height / 2), - Offset(0 + 7.0, size.height / 2 - 10), - Offset(size.width / 2, 0), - Offset(size.width / 2 - 10, 7), - Offset(size.width / 2, 0), - Offset(size.width / 2 - 10, -7), - ], - _gridPaint - ..color = Colors.blue - ..strokeWidth = 1.5); - } - - Path _buildGridPath(Path path, Size size, {step = 20.0}) { - for (int i = 0; i < size.height / 2 / step; i++) { - path.moveTo(0, step * i); - path.relativeLineTo(size.width / 2, 0); - } - for (int i = 0; i < size.width / 2 / step; i++) { - path.moveTo(step * i, 0); - path.relativeLineTo( - 0, - size.height / 2, - ); - } - return path; - } - - void _drawHelp(Canvas canvas) { - canvas.drawPoints(PointMode.lines, pos, _helpPaint..strokeWidth = 1); - canvas.drawPoints(PointMode.points, pos, _helpPaint..strokeWidth = 8); - } - - void _drawSelectPos(Canvas canvas) { - if (selectPos == null) return; - canvas.drawCircle( - pos[selectPos!], - 10, - _helpPaint - ..color = Colors.green - ..strokeWidth = 2); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_de_DE.json deleted file mode 100644 index e87b36dc9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "Allgemeines Einzelkind-Layout", - "info": "Kann ein Unterelement aufnehmen und eine Delegiertenklasse angeben, um das Unterelement anzuordnen. Die Delegiertenklasse kann den Bereich des übergeordneten Containers und die Bereichsgröße des Unterelements sowie die Bereichsbeschränkungen abrufen.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CustomSingleChildLayout", - "desc": [ - "【delegate】 : Delegat 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "Verschiebungsverwendung von CustomSingleChildLayout", - "desc": [ - "Kann die Verschiebungsfähigkeit des Delegaten nutzen, um das Unterelement zu positionieren." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_en_US.json deleted file mode 100644 index 377116b64..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "Universal Single Child Layout", - "info": "Can accommodate one child component and specify a delegate class to arrange the child component. The delegate class can obtain the parent container area, the child component's area size, and the area constraints.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CustomSingleChildLayout", - "desc": [ - "【delegate】 : delegate 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "Offset Usage of CustomSingleChildLayout", - "desc": [ - "The offset capability of the delegate can be used to position the child component with an offset." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_es_ES.json deleted file mode 100644 index f829cee32..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "Diseño de un solo hijo personalizado", - "info": "Puede contener un componente hijo y especificar una clase delegada para organizar el componente hijo. La clase delegada puede obtener el área del contenedor padre y el tamaño del área del componente hijo, así como las restricciones del área.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CustomSingleChildLayout", - "desc": [ - "【delegate】 : delegado 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "Uso de desplazamiento en CustomSingleChildLayout", - "desc": [ - "Se puede utilizar la capacidad de desplazamiento del delegado para posicionar el componente hijo." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_fr_FR.json deleted file mode 100644 index 819d6eaf4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "Disposition personnalisée à un seul enfant", - "info": "Peut contenir un seul composant enfant et spécifie une classe déléguée pour organiser le composant enfant. La classe déléguée peut obtenir la zone du conteneur parent et la taille de la zone du composant enfant, ainsi que les contraintes de zone.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CustomSingleChildLayout", - "desc": [ - "【delegate】 : délégué 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "Utilisation du décalage de CustomSingleChildLayout", - "desc": [ - "Peut utiliser la capacité de décalage du délégué pour positionner le composant enfant avec un décalage." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_it_IT.json deleted file mode 100644 index 43ddc5746..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "Layout Singolo Figlio Personalizzato", - "info": "Può contenere un componente figlio e specificare una classe delegata per disporre il componente figlio. La classe delegata può ottenere l'area del contenitore padre e le dimensioni dell'area del componente figlio, nonché i vincoli dell'area.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CustomSingleChildLayout", - "desc": [ - "【delegate】 : delegato 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "Uso dello spostamento in CustomSingleChildLayout", - "desc": [ - "È possibile utilizzare la capacità di spostamento del delegato per posizionare il componente figlio." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ja_JP.json deleted file mode 100644 index 5c5db389e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "汎用シングルチャイルドレイアウト", - "info": "1つの子コンポーネントを収容し、代理クラスを指定して子コンポーネントをレイアウトします。代理クラスは、親コンテナ領域と子コンポーネントの領域サイズ、および領域の制約状況を取得できます。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CustomSingleChildLayoutの基本使用", - "desc": [ - "【delegate】 : 代理 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "CustomSingleChildLayoutのオフセット使用", - "desc": [ - "代理のオフセット能力を利用して、子コンポーネントをオフセット位置に配置できます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ko_KR.json deleted file mode 100644 index 20753e7d9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "일반 단일 자식 레이아웃", - "info": "하나의 자식 위젯을 수용하고, 대리 클래스를 지정하여 자식 위젯을 배치합니다. 대리 클래스는 부모 컨테이너 영역과 자식 위젯의 영역 크기 및 영역 제약 조건을 얻을 수 있습니다.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CustomSingleChildLayout 기본 사용", - "desc": [ - "【delegate】 : 대리 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "CustomSingleChildLayout의 오프셋 사용", - "desc": [ - "대리의 오프셋 기능을 활용하여 자식 위젯을 오프셋 위치시킬 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_pt_PT.json deleted file mode 100644 index 6a3704d5b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "Layout de Filho Único Personalizado", - "info": "Pode acomodar um componente filho e especificar uma classe de proxy para organizar o componente filho. A classe de proxy pode obter a área do contêiner pai e o tamanho da área do componente filho, bem como as restrições da área.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CustomSingleChildLayout", - "desc": [ - "【delegate】 : proxy 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "Uso de Deslocamento do CustomSingleChildLayout", - "desc": [ - "Pode utilizar a capacidade de deslocamento do proxy para posicionar o componente filho com deslocamento." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ru_RU.json deleted file mode 100644 index d25be61c9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "Универсальный макет с одним дочерним элементом", - "info": "Может содержать один дочерний компонент и задавать класс-делегат для размещения дочернего компонента. Класс-делегат может получить область родительского контейнера и размер области дочернего компонента, а также ограничения области.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CustomSingleChildLayout", - "desc": [ - "【delegate】 : делегат 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "Использование смещения в CustomSingleChildLayout", - "desc": [ - "Можно использовать возможности смещения делегата для позиционирования дочернего компонента." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_zh-CN.json deleted file mode 100644 index d45b22026..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 285, - "name": "CustomSingleChildLayout", - "localName": "通用单子布局", - "info": "可容纳一个子组件,并指定代理类对子组件进行排布。代理类可获取父容器区域和子组件的区域大小,及区域约束情况。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CustomSingleChildLayout基本使用", - "desc": [ - "【delegate】 : 代理 【SingleChildLayoutDelegate】" - ] - }, - { - "file": "node2_offset.dart", - "name": "CustomSingleChildLayout的偏移使用", - "desc": [ - "可以利用代理的偏移能力,对子组件进行偏移定位。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart deleted file mode 100644 index 6295eac5d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/6/3 -/// contact me by email 1981462002@qq.com - - -class CustomSingleChildLayoutDemo extends StatelessWidget { - const CustomSingleChildLayoutDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - print('-------CustomSingleChildLayoutDemo------'); - return Container( - width: 300, - height: 200, - color: Colors.grey.withAlpha(11), - child: CustomSingleChildLayout( - delegate: _TolySingleChildLayoutDelegate(), - child: Container( - color: Colors.orange, - ), - ), - ); - } -} - -class _TolySingleChildLayoutDelegate extends SingleChildLayoutDelegate { - @override - bool shouldRelayout(SingleChildLayoutDelegate oldDelegate) { - return true; - } - - @override - Size getSize(BoxConstraints constraints) { - print('----getSize:----constraints:$constraints----'); - return super.getSize(constraints); - } - - @override - Offset getPositionForChild(Size size, Size childSize) { - print('----getPositionForChild: size:$size----childSize:$childSize----'); - return Offset(size.width / 2, 0); - } - - @override - BoxConstraints getConstraintsForChild(BoxConstraints constraints) { - print('----getConstraintsForChild:----constraints:$constraints----'); - return BoxConstraints( - maxWidth: constraints.maxWidth / 2, - maxHeight: constraints.maxHeight / 2, - minHeight: constraints.maxHeight / 4, - minWidth: constraints.maxWidth / 4, - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart deleted file mode 100644 index cfa45dbce..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart +++ /dev/null @@ -1,113 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/6/3 -/// contact me by email 1981462002@qq.com - - -class OffSetWidgetDemo extends StatelessWidget { - const OffSetWidgetDemo({Key? key}) : super(key: key); - - final List> data = const [ - { - 'offset': Offset(20, 20), - 'direction': Direction.topLeft, - }, - { - 'offset': Offset(20, -15), - 'direction': Direction.topRight, - }, - { - 'offset': Offset(-15, 20), - 'direction': Direction.bottomLeft, - }, - { - 'offset': Offset(-15, 20), - 'direction': Direction.bottomLeft, - }, - { - 'offset': Offset(15, 20), - 'direction': Direction.bottomLeft, - }, - { - 'offset': Offset(-15, -15), - 'direction': Direction.topRight, - }, - ]; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - runSpacing: 20, - children: data - .map((e) => Container( - width: 150, - height: 100, - alignment: Alignment.topRight, - color: Colors.grey.withAlpha(11), - child: OffSetWidget( - offset: e['offset'], - direction: e['direction'], - child: const Icon( - Icons.android, - size: 30, - color: Colors.green, - ), - ))) - .toList()); - } -} - -class OffSetWidget extends StatelessWidget { - final Offset offset; - final Widget child; - final Direction direction; - - const OffSetWidget( - {Key? key, this.offset = Offset.zero, - required this.child, - this.direction = Direction.topLeft}) : super(key: key); - - @override - Widget build(BuildContext context) { - return CustomSingleChildLayout( - delegate: _OffSetDelegate(offset: offset, direction: direction), - child: child, - ); - } -} - -enum Direction { topLeft, topRight, bottomLeft, bottomRight } - -class _OffSetDelegate extends SingleChildLayoutDelegate { - final Offset offset; - final Direction direction; - - _OffSetDelegate({ - this.offset = Offset.zero, - this.direction = Direction.topLeft, - }); - - @override - bool shouldRelayout(_OffSetDelegate oldDelegate) => - offset != oldDelegate.offset; - - @override - Offset getPositionForChild(Size size, Size childSize) { - double w = size.width; - double h = size.height; - double wc = childSize.width; - double hc = childSize.height; - - switch (direction) { - case Direction.topLeft: - return offset; - case Direction.topRight: - return offset.translate(w - wc - offset.dx * 2, 0); - case Direction.bottomLeft: - return offset.translate(0, h - hc - offset.dy * 2); - case Direction.bottomRight: - return offset.translate(w - wc - offset.dx * 2, h - hc - offset.dy * 2); - } - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_de_DE.json deleted file mode 100644 index 00a0aab86..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_de_DE.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "Dekorationsbox", - "info": "Kann ein Kindelement aufnehmen und es dekorieren. Die Kerneigenschaft ist decoration, mit der Rahmen, Verläufe, Schatten, Hintergrundbilder usw. festgelegt werden können.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DecoratedBox", - "desc": [ - "【decoration】 : Dekorationsobjekt 【Decoration】", - "【position】 : Vordergrundfarbe (links)/Hintergrundfarbe (rechts) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "Form und Bilddekoration von DecoratedBox", - "desc": [ - "【shape】 : Form 【BoxShape】", - "【image】 : Hintergrundbild 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "Rahmendekoration von DecoratedBox", - "desc": [ - "【border】 : Rahmen 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "Formdekoration von DecoratedBox", - "desc": [ - "Mit dem ShapeDecoration-Objekt kann die Rahmenform angegeben werden," - ] - }, - { - "file": "node5_line.dart", - "name": "Unterstreichungsdekoration von DecoratedBox", - "desc": [ - "Mit dem UnderlineTabIndicator-Objekt kann die Unterstreichung angegeben werden," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "FlutterLogoDecoration-Dekoration", - "desc": [ - "Mit dem FlutterLogoDecoration-Objekt kann die Flutter-Icon-Dekoration angegeben werden (hat keine große Bedeutung)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_en_US.json deleted file mode 100644 index 6fa9323ea..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_en_US.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "Decorated Box", - "info": "Can contain a child component and decorate it. The core property is decoration, which can set borders, gradients, shadows, background images, etc.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DecoratedBox", - "desc": [ - "【decoration】: Decoration object 【Decoration】", - "【position】: Foreground color (left)/Background color (right) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "Shape and Image Decoration of DecoratedBox", - "desc": [ - "【shape】: Shape 【BoxShape】", - "【image】: Background image 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "Border Decoration of DecoratedBox", - "desc": [ - "【border】: Border 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "Shape Decoration of DecoratedBox", - "desc": [ - "You can specify the border shape through the ShapeDecoration object," - ] - }, - { - "file": "node5_line.dart", - "name": "Bottom Line Decoration of DecoratedBox", - "desc": [ - "You can specify the bottom line through the UnderlineTabIndicator object," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "FlutterLogoDecoration Decoration", - "desc": [ - "You can specify Flutter icon decoration through the FlutterLogoDecoration object (not very useful)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_es_ES.json deleted file mode 100644 index c21db3db6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_es_ES.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "Caja Decorada", - "info": "Puede contener un componente hijo y decorarlo. La propiedad principal es decoration, que permite configurar bordes, degradados, sombras, imágenes de fondo, etc.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DecoratedBox", - "desc": [ - "【decoration】 : Objeto de decoración 【Decoration】", - "【position】 : Color de primer plano (izquierda)/Color de fondo (derecha) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "Decoración de forma e imagen en DecoratedBox", - "desc": [ - "【shape】 : Forma 【BoxShape】", - "【image】 : Imagen de fondo 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "Decoración de borde en DecoratedBox", - "desc": [ - "【border】 : Borde 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "Decoración de forma en DecoratedBox", - "desc": [ - "Se puede especificar la forma del borde mediante el objeto ShapeDecoration," - ] - }, - { - "file": "node5_line.dart", - "name": "Decoración de línea inferior en DecoratedBox", - "desc": [ - "Se puede especificar la línea inferior mediante el objeto UnderlineTabIndicator," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "Decoración con FlutterLogoDecoration", - "desc": [ - "Se puede especificar la decoración del ícono de Flutter mediante el objeto FlutterLogoDecoration (no tiene mucho uso)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_fr_FR.json deleted file mode 100644 index dc641c563..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_fr_FR.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "Boîte décorée", - "info": "Peut contenir un composant enfant et le décorer. La propriété principale est decoration, qui permet de définir des bordures, des dégradés, des ombres, des images de fond, etc.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DecoratedBox", - "desc": [ - "【decoration】 : Objet de décoration 【Decoration】", - "【position】 : Couleur de premier plan (gauche)/couleur d'arrière-plan (droite) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "Forme et image de décoration de DecoratedBox", - "desc": [ - "【shape】 : Forme 【BoxShape】", - "【image】 : Image de fond 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "Bordure de décoration de DecoratedBox", - "desc": [ - "【border】 : Bordure 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "Forme de décoration de DecoratedBox", - "desc": [ - "L'objet ShapeDecoration permet de spécifier la forme de la bordure," - ] - }, - { - "file": "node5_line.dart", - "name": "Ligne de décoration de DecoratedBox", - "desc": [ - "L'objet UnderlineTabIndicator permet de spécifier la ligne de fond," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "Décoration FlutterLogoDecoration", - "desc": [ - "L'objet FlutterLogoDecoration permet de spécifier la décoration de l'icône Flutter (sans grande utilité)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_it_IT.json deleted file mode 100644 index 9fbe10468..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_it_IT.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "Scatola decorata", - "info": "Può contenere un componente figlio e decorarlo. La proprietà principale è decoration, che può impostare bordi, gradienti, ombre, immagini di sfondo, ecc.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di DecoratedBox", - "desc": [ - "【decoration】 : oggetto decorativo 【Decoration】", - "【position】 : colore in primo piano (sinistra)/colore di sfondo (destra) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "Decorazione di forma e immagine di DecoratedBox", - "desc": [ - "【shape】 : forma 【BoxShape】", - "【image】 : immagine di sfondo 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "Decorazione del bordo di DecoratedBox", - "desc": [ - "【border】 : bordo 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "Decorazione della forma di DecoratedBox", - "desc": [ - "È possibile specificare la forma del bordo tramite l'oggetto ShapeDecoration," - ] - }, - { - "file": "node5_line.dart", - "name": "Decorazione della linea di base di DecoratedBox", - "desc": [ - "È possibile specificare la linea di base tramite l'oggetto UnderlineTabIndicator," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "Decorazione FlutterLogoDecoration", - "desc": [ - "È possibile specificare la decorazione dell'icona Flutter tramite l'oggetto FlutterLogoDecoration (non ha un grande utilità)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ja_JP.json deleted file mode 100644 index 21dabc4fc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ja_JP.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "装飾ボックス", - "info": "子コンポーネントを収容し、装飾することができます。コアプロパティはdecorationで、枠線、グラデーション、影、背景画像などを設定できます。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DecoratedBoxの基本使用", - "desc": [ - "【decoration】 : 装飾オブジェクト 【Decoration】", - "【position】 : 前景色(左)/背景色(右) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "DecoratedBoxの形状と画像装飾", - "desc": [ - "【shape】 : 形状 【BoxShape】", - "【image】 : 背景画像 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "DecoratedBoxの枠線装飾", - "desc": [ - "【border】 : 枠線 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "DecoratedBoxの形状装飾", - "desc": [ - "ShapeDecorationオブジェクトを使用して枠線の形状を指定できます," - ] - }, - { - "file": "node5_line.dart", - "name": "DecoratedBoxの下線装飾", - "desc": [ - "UnderlineTabIndicatorオブジェクトを使用して下線を指定できます," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "FlutterLogoDecoration装飾", - "desc": [ - "FlutterLogoDecorationオブジェクトを使用してFlutterアイコン装飾を指定できます(特に大きな効果はありません)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ko_KR.json deleted file mode 100644 index feff512fa..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ko_KR.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "장식 상자", - "info": "하위 컴포넌트를 포함할 수 있으며, 이를 장식할 수 있습니다. 핵심 속성은 decoration으로, 테두리, 그라데이션, 그림자, 배경 이미지 등을 설정할 수 있습니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DecoratedBox 기본 사용", - "desc": [ - "【decoration】 : 장식 객체 【Decoration】", - "【position】 : 전경색(왼쪽)/배경색(오른쪽) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "DecoratedBox 형태와 이미지 장식", - "desc": [ - "【shape】 : 형태 【BoxShape】", - "【image】 : 배경 이미지 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "DecoratedBox 테두리 장식", - "desc": [ - "【border】 : 테두리 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "DecoratedBox 형태 장식", - "desc": [ - "ShapeDecoration 객체를 통해 테두리 형태를 지정할 수 있습니다," - ] - }, - { - "file": "node5_line.dart", - "name": "DecoratedBox 밑줄 장식", - "desc": [ - "UnderlineTabIndicator 객체를 통해 밑줄을 지정할 수 있습니다," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "FlutterLogoDecoration 장식", - "desc": [ - "FlutterLogoDecoration 객체를 통해 Flutter 아이콘 장식을 지정할 수 있습니다(별다른 기능은 없습니다)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_pt_PT.json deleted file mode 100644 index c8a9195b2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_pt_PT.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "Caixa Decorada", - "info": "Pode conter um componente filho e decorá-lo. A propriedade principal é decoration, que pode definir bordas, gradientes, sombras, imagens de fundo, etc.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DecoratedBox", - "desc": [ - "【decoration】 : Objeto de decoração 【Decoration】", - "【position】 : Cor de primeiro plano (esquerda)/Cor de fundo (direita) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "Forma e Decoração de Imagem do DecoratedBox", - "desc": [ - "【shape】 : Forma 【BoxShape】", - "【image】 : Imagem de fundo 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "Decoração de Borda do DecoratedBox", - "desc": [ - "【border】 : Borda 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "Decoração de Forma do DecoratedBox", - "desc": [ - "O objeto ShapeDecoration pode especificar a forma da borda," - ] - }, - { - "file": "node5_line.dart", - "name": "Decoração de Linha de Base do DecoratedBox", - "desc": [ - "O objeto UnderlineTabIndicator pode especificar a linha de base," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "Decoração com FlutterLogoDecoration", - "desc": [ - "O objeto FlutterLogoDecoration pode especificar a decoração do ícone Flutter (não tem grande utilidade)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ru_RU.json deleted file mode 100644 index afd56ba99..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_ru_RU.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "Декорированный блок", - "info": "Может содержать один дочерний компонент и декорировать его. Основное свойство - decoration, которое позволяет настроить границы, градиенты, тени, фоновые изображения и т.д.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DecoratedBox", - "desc": [ - "【decoration】 : Объект декора 【Decoration】", - "【position】 : Передний план (слева)/Задний план (справа) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "Форма и изображение декора в DecoratedBox", - "desc": [ - "【shape】 : Форма 【BoxShape】", - "【image】 : Фоновое изображение 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "Декорирование границ в DecoratedBox", - "desc": [ - "【border】 : Граница 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "Декорирование формы в DecoratedBox", - "desc": [ - "С помощью объекта ShapeDecoration можно указать форму границы," - ] - }, - { - "file": "node5_line.dart", - "name": "Декорирование нижней линии в DecoratedBox", - "desc": [ - "С помощью объекта UnderlineTabIndicator можно указать нижнюю линию," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "Декорирование FlutterLogoDecoration", - "desc": [ - "С помощью объекта FlutterLogoDecoration можно указать декорирование иконкой Flutter (не имеет особого значения)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_zh-CN.json deleted file mode 100644 index 1a57df640..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/desc_zh-CN.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": 70, - "name": "DecoratedBox", - "localName": "装饰盒", - "info": "可容纳一个子组件,可将其进行装饰。核心属性为decoration,可设置边线、渐变、阴影、背景图等。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DecoratedBox基本使用", - "desc": [ - "【decoration】 : 装饰对象 【Decoration】", - "【position】 : 前景色(左)/后景色(右) 【DecorationPosition】" - ] - }, - { - "file": "node2_image.dart", - "name": "DecoratedBox形状和图片装饰", - "desc": [ - "【shape】 : 形状 【BoxShape】", - "【image】 : 背景图片 【DecorationImage】," - ] - }, - { - "file": "node3_border.dart", - "name": "DecoratedBox边线装饰", - "desc": [ - "【border】 : 边线 【BoxBorder】," - ] - }, - { - "file": "node4_shape.dart", - "name": "DecoratedBox形状装饰", - "desc": [ - "通过ShapeDecoration对象可指定边线形状," - ] - }, - { - "file": "node5_line.dart", - "name": "DecoratedBox底线装饰", - "desc": [ - "通过UnderlineTabIndicator对象可指定底线," - ] - }, - { - "file": "node6_flutterLogo.dart", - "name": "FlutterLogoDecoration装饰", - "desc": [ - "通过FlutterLogoDecoration对象可指定Flutter图标装饰(并没有什么太大的作用)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node1_base.dart deleted file mode 100644 index bfd90d69c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node1_base.dart +++ /dev/null @@ -1,44 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class BoxDecorationDemo extends StatelessWidget { - const BoxDecorationDemo({Key? key}) : super(key: key); - - final List rainbow = const [ - 0xffff0000, - 0xffFF7F00, - 0xffFFFF00, - 0xff00FF00, - 0xff00FFFF, - 0xff0000FF, - 0xff8B00FF - ]; - - @override - Widget build(BuildContext context) { - return DecoratedBox( - position: DecorationPosition.background, - decoration: BoxDecoration( - gradient: LinearGradient( - stops: const [0.0, 1 / 6, 2 / 6, 3 / 6, 4 / 6, 5 / 6, 1.0], - colors: rainbow.map((e) => Color(e)).toList()), - borderRadius: const BorderRadius.only( - topLeft: Radius.circular(20), - bottomRight: Radius.circular(20), - ), - boxShadow: const [ - BoxShadow( - color: Colors.orangeAccent, - offset: Offset(1, 1), - blurRadius: 10, - spreadRadius: 1), - ]), - child: Icon( - Icons.android, - size: 80, - color: Colors.black.withAlpha(123), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node2_image.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node2_image.dart deleted file mode 100644 index 850cfb049..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node2_image.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class ShapeImageDemo extends StatelessWidget { - const ShapeImageDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const DecoratedBox( - decoration: BoxDecoration( - shape: BoxShape.circle, - image: DecorationImage( - fit: BoxFit.cover, - image: AssetImage( - 'assets/images/wy_200x300.webp', - ))), - child: SizedBox( - height: 80, - width: 80, - child: Icon( - Icons.ac_unit, - color: Colors.white, - size: 40, - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node3_border.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node3_border.dart deleted file mode 100644 index a1aec5cd6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node3_border.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class BorderDemo extends StatelessWidget { - const BorderDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return DecoratedBox( - position: DecorationPosition.foreground, - decoration: const BoxDecoration( - border: Border( - bottom: BorderSide(color: Colors.orange, width: 2), - top: BorderSide(color: Colors.orange, width: 2)), - ), - child: SizedBox( - height: 80, - width: 100, - child: Image.asset( - 'assets/images/wy_200x300.webp', - fit: BoxFit.cover, - ), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node4_shape.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node4_shape.dart deleted file mode 100644 index 140000141..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node4_shape.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class ShapeDecorationDemo extends StatelessWidget { - const ShapeDecorationDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const DecoratedBox( - decoration: ShapeDecoration( - shadows: [ - BoxShadow( - color: Colors.orangeAccent, - offset: Offset(0, 0), - blurRadius: 2, - spreadRadius: 1), - ], - image: DecorationImage( - fit: BoxFit.cover, - image: AssetImage( - 'assets/images/wy_200x300.webp', - )), - shape: CircleBorder( - side: BorderSide(width: 1.0, color: Colors.orangeAccent), - )), - child: SizedBox( - height: 100, - width: 100, - child: Icon( - Icons.ac_unit, - color: Colors.white, - size: 40, - ), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node5_line.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node5_line.dart deleted file mode 100644 index 95ed6d9fa..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node5_line.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class UnderlineTabIndicatorDemo extends StatelessWidget { - const UnderlineTabIndicatorDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const DecoratedBox( - decoration: UnderlineTabIndicator( - insets: EdgeInsets.symmetric(horizontal: 5, vertical: -5), - borderSide: BorderSide(color: Colors.orange, width: 2)), - child: Icon( - Icons.ac_unit, - color: Colors.blue, - size: 40, - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node6_flutterLogo.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node6_flutterLogo.dart deleted file mode 100644 index 644f732a6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/DecoratedBox/node6_flutterLogo.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - - -class FlutterLogoDecorationDemo extends StatelessWidget { - const FlutterLogoDecorationDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const DecoratedBox( - decoration: FlutterLogoDecoration( -// darkColor: Colors.orange, -// lightColor: Colors.deepPurpleAccent, - margin: EdgeInsets.all(8), - style: FlutterLogoStyle.stacked), - child: SizedBox( - width: 100, - height: 100, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_de_DE.json deleted file mode 100644 index 72b9e13a9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "Transparenzübergang", - "info": "Kann ein Kindelement aufnehmen und eine Transparenzverlaufsanimation durchführen, wobei ein Animator opacity erforderlich ist.", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von FadeTransition", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【opacity】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_en_US.json deleted file mode 100644 index 782154386..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "Fade Transition", - "info": "Can contain a child component and make it perform a fade animation, requires an animator opacity.", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of FadeTransition", - "desc": [ - "【child】 : Child Component 【Widget】", - "【opacity】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_es_ES.json deleted file mode 100644 index b40ee1630..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "Transición de desvanecimiento", - "info": "Puede contener un componente hijo y hacer que realice una animación de cambio de opacidad, requiere un animador de opacidad.", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de FadeTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【opacity】 : Animación 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_fr_FR.json deleted file mode 100644 index a0336deec..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "Transition de transparence", - "info": "Peut contenir un composant enfant et lui appliquer une animation de transition d'opacité, nécessite un animateur opacity.", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de FadeTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【opacity】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_it_IT.json deleted file mode 100644 index 9ba5f4109..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "Transizione di trasparenza", - "info": "Può contenere un componente figlio e fargli eseguire un'animazione di dissolvenza della trasparenza, richiede un animatore opacity.", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di FadeTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【opacity】 : Animazione 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ja_JP.json deleted file mode 100644 index 5dbe65a08..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "フェードトランジション", - "info": "1つの子コンポーネントを収容し、透明度の変化アニメーションを行わせることができます。アニメーターopacityを提供する必要があります。", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeTransitionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【opacity】 : アニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ko_KR.json deleted file mode 100644 index 1bae8dc2c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "투명도 전환", - "info": "하나의 자식 위젯을 포함할 수 있으며, 투명도가 점진적으로 변하는 애니메이션을 수행합니다. 애니메이터 opacity를 제공해야 합니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeTransition 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【opacity】 : 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_pt_PT.json deleted file mode 100644 index 20a6bf530..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "Transição de Transparência", - "info": "Pode conter um componente filho e fazer com que ele realize uma animação de transição de transparência, é necessário fornecer o animador opacity.", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do FadeTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【opacity】 : Animação 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ru_RU.json deleted file mode 100644 index 3814c3646..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "Прозрачное преобразование", - "info": "Может содержать один дочерний компонент и выполнять анимацию изменения прозрачности, требует предоставления аниматора opacity.", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование FadeTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【opacity】 : Анимация 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_zh-CN.json deleted file mode 100644 index 540920f70..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 89, - "name": "FadeTransition", - "localName": "透明变换", - "info": "可容纳一个子组件,并使其进行透明度渐变动画,需要提供动画器opacity。", - "lever": 3, - "family": 2, - "linkIds": [ - 73, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【opacity】 : 动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/node1_base.dart deleted file mode 100644 index 83332841d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FadeTransition/node1_base.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomFadeTransition extends StatefulWidget { - const CustomFadeTransition({Key? key}) : super(key: key); - - @override - _CustomFadeTransitionState createState() => _CustomFadeTransitionState(); -} - -class _CustomFadeTransitionState extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 2), - ); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Container( - color: Colors.grey.withAlpha(22), - width: 100, - height: 100, - child: FadeTransition( - opacity: CurvedAnimation(parent: _ctrl, curve: Curves.linear), - child: const Icon(Icons.android, color: Colors.green, size: 60), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_de_DE.json deleted file mode 100644 index 3a4aa12fd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "Anpassungsbox", - "info": "Kann ein Kindelement aufnehmen, verwendet die fit-Eigenschaft, um den Anpassungsmodus des Kindelements im Verhältnis zum Elternelement zu bestimmen, und verfügt über die Ausrichtungseigenschaft alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von FittedBox", - "desc": [ - "【child】: Kindelement 【Widget】", - "【fit】: Anpassungsmodus 【BoxFit】", - "【alignment】: Ausrichtung 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_en_US.json deleted file mode 100644 index 8c894a017..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "Fitted Box", - "info": "Can accommodate a child component, using the fit property to determine the adaptation mode of the child component area relative to the parent component, and has the alignment property.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of FittedBox", - "desc": [ - "【child】: Child component 【Widget】", - "【fit】: Adaptation mode 【BoxFit】", - "【alignment】: Alignment method 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_es_ES.json deleted file mode 100644 index 144cf6a15..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "Caja ajustada", - "info": "Puede contener un componente hijo, utiliza la propiedad fit para determinar el modo de adaptación del área del componente hijo en relación con el componente padre, y tiene la propiedad de alineación alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de FittedBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【fit】 : Modo de adaptación 【BoxFit】", - "【alignment】 : Modo de alineación 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_fr_FR.json deleted file mode 100644 index 2e8ade464..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "Boîte ajustée", - "info": "Peut contenir un composant enfant, utilise la propriété fit pour déterminer le mode d'adaptation de la zone du composant enfant par rapport au composant parent, possède la propriété d'alignement alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de FittedBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【fit】 : Mode d'adaptation 【BoxFit】", - "【alignment】 : Mode d'alignement 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_it_IT.json deleted file mode 100644 index 2a64e52a2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "Scatola adattata", - "info": "Può contenere un componente figlio, utilizza la proprietà fit per determinare la modalità di adattamento dell'area del componente figlio rispetto al componente padre, ha la proprietà di allineamento alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di FittedBox", - "desc": [ - "【child】 : componente figlio 【Widget】", - "【fit】 : modalità di adattamento 【BoxFit】", - "【alignment】 : modalità di allineamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ja_JP.json deleted file mode 100644 index 0e7173ddc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "フィットボックス", - "info": "1つの子コンポーネントを収容でき、fitプロパティを使用して子コンポーネントの領域を親コンポーネントに対する適応モードを決定し、alignmentプロパティを持っています。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FittedBoxの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【fit】 : 適応モード 【BoxFit】", - "【alignment】 : 整列方法 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ko_KR.json deleted file mode 100644 index bfee7328f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "적응 박스", - "info": "하위 컴포넌트를 수용할 수 있으며, fit 속성을 사용하여 하위 컴포넌트 영역이 상위 컴포넌트에 대한 적응 모드를 결정합니다. alignment 속성을 가지고 있습니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FittedBox 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【fit】 : 적응 모드 【BoxFit】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_pt_PT.json deleted file mode 100644 index 4f31e07c5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "Caixa Ajustada", - "info": "Pode conter um componente filho, usando a propriedade fit para determinar o modo de ajuste da área do componente filho em relação ao componente pai, possui a propriedade de alinhamento alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do FittedBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【fit】 : Modo de ajuste 【BoxFit】", - "【alignment】 : Modo de alinhamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ru_RU.json deleted file mode 100644 index e8f902e0f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "Адаптивный бокс", - "info": "Может содержать один дочерний компонент, использует свойство fit для определения режима адаптации области дочернего компонента относительно родительского компонента, имеет свойство выравнивания alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование FittedBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【fit】 : Режим адаптации 【BoxFit】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_zh-CN.json deleted file mode 100644 index 3304f7748..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 87, - "name": "FittedBox", - "localName": "适应盒", - "info": "可容纳一个子组件,使用fit属性决定子组件区域相当于父组件的适应模式,拥有对齐属性alignment。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FittedBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【fit】 : 适应模式 【BoxFit】", - "【alignment】 : 对齐方式 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/node1_base.dart deleted file mode 100644 index 8eeabb96e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FittedBox/node1_base.dart +++ /dev/null @@ -1,87 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomFittedBox extends StatefulWidget { - const CustomFittedBox({Key? key}) : super(key: key); - - @override - _CustomFittedBoxState createState() => _CustomFittedBoxState(); -} - -class _CustomFittedBoxState extends State { - double _childW = 20; - double _childH = 30; - - final List rainbow = const [ - 0xffff0000, - 0xffFF7F00, - 0xffFFFF00, - 0xff00FF00, - 0xff00FFFF, - 0xff0000FF, - 0xff8B00FF - ]; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Wrap( - spacing: 10, - runSpacing: 10, - children: BoxFit.values - .map((mode) => Column( - children: [ - _buildChild(mode), - const SizedBox(height: 10), - Text(mode.toString().split('.')[1]) - ], - )) - .toList()), - _buildSlider() - ], - ); - } - - Widget _buildChild(BoxFit m) { - return Container( - color: Colors.grey.withAlpha(44), - width: 80, - height: 60, - child: FittedBox( - fit: m, - child: Container( - width: _childW, - height: _childH, - decoration: BoxDecoration( - //添加渐变色 - gradient: LinearGradient( - stops: const[0.0, 1 / 6, 2 / 6, 3 / 6, 4 / 6, 5 / 6, 1.0], - colors: rainbow.map((e) => Color(e)).toList()), - ), - ), - ), - ); - } - - Widget _buildSlider() => Column( - children: [ - Slider( - min: 10, - max: 150, - divisions: 100, - label: '子宽度:' + _childW.toStringAsFixed(1), - value: _childW, - onChanged: (v) => setState(() => _childW = v)), - Slider( - min: 10, - max: 150, - divisions: 100, - label: '子高度:' + _childH.toStringAsFixed(1), - value: _childH, - onChanged: (v) => setState(() => _childH = v)), - ], - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_de_DE.json deleted file mode 100644 index c0c0f1a53..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "Teilverschiebung", - "info": "Verschiebt das Kindelement durch die offset-Eigenschaft, die Verschiebung ist OffSet horizontal/vertikal * Größe des Kindelements.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von FractionalTranslation", - "desc": [ - "【translation】 : Verschiebungsteilungswert 【Offset】", - "【child】: Kindelement 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_en_US.json deleted file mode 100644 index aaad7c9a3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "Fractional Translation", - "info": "Offset the child component through the offset property, the offset is the horizontal and vertical OffSet * the size of the child component.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of FractionalTranslation", - "desc": [ - "【translation】: Offset fraction value 【Offset】", - "【child】: Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_es_ES.json deleted file mode 100644 index aab50acbb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "Desplazamiento fraccional", - "info": "Desplaza el componente hijo mediante la propiedad offset, la cantidad de desplazamiento es el tamaño del componente hijo multiplicado por el OffSet horizontal y vertical.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de FractionalTranslation", - "desc": [ - "【translation】: Valor de desplazamiento fraccional 【Offset】", - "【child】: Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_fr_FR.json deleted file mode 100644 index 34d54e5cd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "Translation fractionnaire", - "info": "Déplace le composant enfant via la propriété offset, le déplacement est égal à la taille du composant enfant multipliée par les valeurs horizontale et verticale de l'Offset.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de FractionalTranslation", - "desc": [ - "【translation】 : Valeur de déplacement fractionnaire 【Offset】", - "【child】: Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_it_IT.json deleted file mode 100644 index 38fac9c2c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "Traduzione Frazionaria", - "info": "Sposta il componente figlio tramite la proprietà offset, dove lo spostamento è determinato da OffSet orizzontale e verticale moltiplicato per la dimensione del componente figlio.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di FractionalTranslation", - "desc": [ - "【translation】 : Valore di spostamento frazionario 【Offset】", - "【child】: Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ja_JP.json deleted file mode 100644 index b74f4b4a3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "分度オフセット", - "info": "offsetプロパティを使用して子コンポーネントをオフセットします。オフセット量はOffSetの横縦×子コンポーネントのサイズです。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FractionalTranslationの基本使用", - "desc": [ - "【translation】 : オフセット分度値 【Offset】", - "【child】: 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ko_KR.json deleted file mode 100644 index 670b7fc3d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "분할 오프셋", - "info": "offset 속성을 통해 자식 컴포넌트를 오프셋하며, 오프셋량은 OffSet의 가로 및 세로 * 자식 컴포넌트 크기입니다.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FractionalTranslation 기본 사용", - "desc": [ - "【translation】 : 오프셋 분할 값 【Offset】", - "【child】: 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_pt_PT.json deleted file mode 100644 index b988006fc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "Deslocamento Fracionado", - "info": "Desloca o componente filho através da propriedade offset, onde o deslocamento é o tamanho do componente filho multiplicado pelo valor horizontal e vertical do Offset.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do FractionalTranslation", - "desc": [ - "【translation】 : Valor de deslocamento fracionado 【Offset】", - "【child】: Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ru_RU.json deleted file mode 100644 index a8e840894..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "Дробное смещение", - "info": "Смещение дочернего компонента с помощью свойства offset, величина смещения равна OffSet по горизонтали и вертикали * размер дочернего компонента.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование FractionalTranslation", - "desc": [ - "【translation】 : Значение дробного смещения 【Offset】", - "【child】: Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_zh-CN.json deleted file mode 100644 index e04c12b92..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 263, - "name": "FractionalTranslation", - "localName": "分度偏移", - "info": "通过offset属性将子组件进行偏移,偏移量为OffSet横纵*子组件大小。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FractionalTranslation基本使用", - "desc": [ - "【translation】 : 偏移分度值 【Offset】", - "【child】: 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/node1_base.dart deleted file mode 100644 index 767896812..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionalTranslation/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class FractionalTranslationDemo extends StatefulWidget { - const FractionalTranslationDemo({Key? key}) : super(key: key); - - @override - _FractionalTranslationDemoState createState() => - _FractionalTranslationDemoState(); -} - -class _FractionalTranslationDemoState extends State { - double dx = 0.0; - double dy = 0.0; - - @override - Widget build(BuildContext context) { - print(dx); - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - width: 200, - height: 100, - alignment: Alignment.topLeft, - color: Colors.grey.withAlpha(33), - child: FractionalTranslation( - translation: Offset(dx, dy), - child: const Icon( - Icons.android, - color: Colors.green, - ), - ), - ), - _buildSliderX(), - _buildSliderY() - ], - ); - } - - Widget _buildSliderX() => Slider( - min: -2.0, - max: 10.0, - value: dx, - divisions: 100, - label: 'dx:${dx.toStringAsFixed(1)}', - onChanged: (v) => setState(() => dx = v), - ); - - - Widget _buildSliderY() => Slider( - min: -2.0, - max: 6.0, - value: dy, - divisions: 100, - label: 'dy:${dy.toStringAsFixed(1)}', - onChanged: (v) => setState(() => dy = v), - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_de_DE.json deleted file mode 100644 index 6b1d6f63c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "Teilweise Größenbox", - "info": "Kann ein Kindelement aufnehmen, gibt die Breiten- und Höhenanteile an, begrenzt den Bereich des Kindelements auf die Breite und Höhe des Elterncontainers * die jeweiligen Anteile sowie die Ausrichtung alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von FractionallySizedBox", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【widthFactor】 : Breitenanteil 【double】", - "【heightFactor】 : Höhenanteil 【double】", - "【alignment】 : Ausrichtung 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_en_US.json deleted file mode 100644 index f2f27034b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "FractionallySizedBox", - "info": "Can contain a child component, specify width and height fractions, limit the child component area to the parent container's width and height * each fraction, and alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of FractionallySizedBox", - "desc": [ - "【child】 : Child component 【Widget】", - "【widthFactor】 : Width fraction 【double】", - "【heightFactor】 : Height fraction 【double】", - "【alignment】 : Alignment 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_es_ES.json deleted file mode 100644 index b78005e44..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "Caja de tamaño fraccional", - "info": "Puede contener un componente hijo, especifica la proporción de ancho y alto, limita el área del componente hijo al ancho y alto del contenedor padre multiplicado por cada proporción, y la alineación.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de FractionallySizedBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【widthFactor】 : Proporción de ancho 【double】", - "【heightFactor】 : Proporción de alto 【double】", - "【alignment】 : Alineación 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_fr_FR.json deleted file mode 100644 index 0dc0f2a24..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "Boîte à taille fractionnée", - "info": "Peut contenir un composant enfant, spécifie le taux de largeur et de hauteur, limite la zone du composant enfant à la largeur et à la hauteur du conteneur parent * chaque taux, ainsi que l'alignement.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de FractionallySizedBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【widthFactor】 : Taux de largeur 【double】", - "【heightFactor】 : Taux de hauteur 【double】", - "【alignment】 : Mode d'alignement 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_it_IT.json deleted file mode 100644 index dd2e681f2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "Scatola a Frazione", - "info": "Può contenere un componente figlio, specifica la frazione di larghezza e altezza, limita l'area del componente figlio alla larghezza e altezza del contenitore padre * ciascuna frazione, e il modo di allineamento alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di FractionallySizedBox", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【widthFactor】 : Frazione di larghezza 【double】", - "【heightFactor】 : Frazione di altezza 【double】", - "【alignment】 : Modo di allineamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ja_JP.json deleted file mode 100644 index ca0219d04..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "分率ボックス", - "info": "子コンポーネントを収容し、幅と高さの分率を指定し、子コンポーネントの領域を親コンテナの幅と高さ×各分率に制限し、および配置方法alignmentを指定します。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FractionallySizedBoxの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【widthFactor】 : 幅分率 【double】", - "【heightFactor】 : 高さ分率 【double】", - "【alignment】 : 配置方法 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ko_KR.json deleted file mode 100644 index a9b983294..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "분율 박스", - "info": "하위 컴포넌트를 수용할 수 있으며, 너비와 높이의 분율을 지정하여 하위 컴포넌트의 영역을 부모 컨테이너의 너비와 높이에 각 분율을 곱한 값으로 제한하고, 정렬 방식을 지정합니다.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FractionallySizedBox 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【widthFactor】 : 너비 분율 【double】", - "【heightFactor】 : 높이 분율 【double】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_pt_PT.json deleted file mode 100644 index 291294b90..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "Caixa de Tamanho Fracionado", - "info": "Pode conter um componente filho, especifica a taxa de largura e altura, limitando a área do componente filho à largura e altura do contêiner pai * cada taxa, e o alinhamento.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do FractionallySizedBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【widthFactor】 : Taxa de largura 【double】", - "【heightFactor】 : Taxa de altura 【double】", - "【alignment】 : Alinhamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ru_RU.json deleted file mode 100644 index 65d44be0f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "Дробный контейнер", - "info": "Может содержать один дочерний компонент, задает дробные значения ширины и высоты, ограничивая область дочернего компонента шириной и высотой родительского контейнера, умноженными на соответствующие дроби, а также способ выравнивания alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование FractionallySizedBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【widthFactor】 : Дробное значение ширины 【double】", - "【heightFactor】 : Дробное значение высоты 【double】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_zh-CN.json deleted file mode 100644 index fd62f8077..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 82, - "name": "FractionallySizedBox", - "localName": "分率盒", - "info": "可容纳一个子组件,指定宽高分率,限定子组件区域为父容器宽高*各分率,及对齐方式alignment。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FractionallySizedBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【widthFactor】 : 宽分率 【double】", - "【heightFactor】 : 高分率 【double】", - "【alignment】 : 对齐方式 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/node1_base.dart deleted file mode 100644 index 66b97ef32..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/FractionallySizedBox/node1_base.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomFractionallySizedBox extends StatefulWidget { - const CustomFractionallySizedBox({Key? key}) : super(key: key); - - @override - _CustomFractionallySizedBoxState createState() => - _CustomFractionallySizedBoxState(); -} - -class _CustomFractionallySizedBoxState - extends State { - double _hf = 0.5; - double _wf = 0.4; - - @override - Widget build(BuildContext context) { - Widget box = FractionallySizedBox( - widthFactor: _wf, - heightFactor: _hf, - alignment: Alignment.center, - child: Container(color: Colors.orange), - ); - return Column( - children: [ - Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 100, - child: box), - _buildSlider() - ], - ); - } - - Widget _buildSlider() => Column( - children: [ - Slider( - divisions: 20, - min: 0.0, - max: 2, - label: '宽分率:' + _wf.toStringAsFixed(1), - value: _wf, - onChanged: (v) => setState(() => _wf = v)), - Slider( - divisions: 20, - min: 0.0, - max: 2, - label: '高分率:' + _hf.toStringAsFixed(1), - value: _hf, - onChanged: (v) => setState(() => _hf = v)), - ], - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_de_DE.json deleted file mode 100644 index 05561221c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "Ignoriere Klicks", - "info": "Enthält ein Kind-Widget und kann durch Festlegen der Eigenschaft ignoring entscheiden, ob das Kind Gestenereignisse ignoriert. Es selbst empfängt keine Ereignisse.", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von IgnorePointer", - "desc": [ - "【child】 : Kind-Widget 【Widget】", - "【ignoring】 : Ob Ereignisse ignoriert werden sollen 【bool】", - "Wie unten gezeigt, wenn der Switch ausgewählt ist, ist ignoring true, und die Schaltflächenereignisse werden gesperrt und können nicht geklickt werden." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_en_US.json deleted file mode 100644 index 9c643e1ec..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "Ignore Click", - "info": "Contains a child component, and it can decide whether the child ignores gesture events by specifying the ignoring property. It does not accept events itself.", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of IgnorePointer", - "desc": [ - "【child】 : Child component 【Widget】", - "【ignoring】 : Whether to ignore events 【bool】", - "As shown below, when the Switch is selected, ignoring is true, and the button event will be locked and cannot be clicked." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_es_ES.json deleted file mode 100644 index 1c1c9c8f2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "Ignorar clic", - "info": "Contiene un componente hijo, y puede decidir si el hijo ignora los eventos de gestos especificando la propiedad ignoring, mientras que él mismo no acepta eventos.", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de IgnorePointer", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【ignoring】 : Si se ignoran los eventos 【bool】", - "A continuación, cuando el Switch está seleccionado, ignoring es true, y los eventos del botón se bloquearán, no se podrá hacer clic." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_fr_FR.json deleted file mode 100644 index 9cf81b6e0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "Ignorer les clics", - "info": "Contient un composant enfant, et peut décider si l'enfant ignore les événements de geste en spécifiant la propriété ignoring, lui-même n'accepte pas les événements.", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'IgnorePointer", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【ignoring】 : Ignorer les événements 【bool】", - "Comme ci-dessous, lorsque le Switch est sélectionné, ignoring est true, l'événement du bouton sera verrouillé et ne pourra pas être cliqué." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_it_IT.json deleted file mode 100644 index cae053ba8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "Ignora Clic", - "info": "Contiene un componente figlio e può decidere se il figlio ignora gli eventi del gesto specificando l'attributo ignoring, mentre esso stesso non accetta eventi.", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di IgnorePointer", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【ignoring】 : Se ignorare gli eventi 【bool】", - "Come mostrato di seguito, quando Switch è selezionato, ignoring è true e l'evento del pulsante sarà bloccato, non cliccabile." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ja_JP.json deleted file mode 100644 index 433c594c2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "クリックを無視", - "info": "子コンポーネントを含み、ignoring属性を指定することで、子がジェスチャーイベントを無視するかどうかを決定できます。それ自体はイベントを受け取りません。", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IgnorePointerの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【ignoring】 : イベントを無視するかどうか 【bool】", - "以下のように、Switchが選択されている場合、ignoringがtrueになり、ボタンイベントがロックされ、クリックできなくなります。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ko_KR.json deleted file mode 100644 index 15024f6dc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "클릭 무시", - "info": "하위 위젯을 포함하며, ignoring 속성을 지정하여 하위 위젯이 제스처 이벤트를 무시할지 여부를 결정할 수 있습니다. 그 자체는 이벤트를 받지 않습니다.", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IgnorePointer 기본 사용법", - "desc": [ - "【child】 : 하위 위젯 【Widget】", - "【ignoring】 : 이벤트 무시 여부 【bool】", - "아래 예시에서 Switch가 선택되면 ignoring이 true가 되어 버튼 이벤트가 잠기고 클릭할 수 없게 됩니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_pt_PT.json deleted file mode 100644 index 27dfa8467..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "Ignorar Cliques", - "info": "Contém um componente filho e pode decidir se o filho ignora eventos de gestos especificando o atributo ignoring, ele próprio não aceita eventos.", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do IgnorePointer", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【ignoring】 : Se deve ignorar eventos 【bool】", - "Abaixo, quando o Switch está selecionado, ignoring é true, e o evento do botão será bloqueado, não podendo ser clicado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ru_RU.json deleted file mode 100644 index 5acc73202..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "Игнорировать клик", - "info": "Содержит дочерний компонент, который может игнорировать жестовые события в зависимости от указанного свойства ignoring, сам по себе не принимает события.", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование IgnorePointer", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【ignoring】 : Игнорировать ли события 【bool】", - "Как показано ниже, когда Switch выбран, ignoring становится true, и события кнопки блокируются, делая её неактивной для кликов." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_zh-CN.json deleted file mode 100644 index 19964c2b7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 292, - "name": "IgnorePointer", - "localName": "忽视点击", - "info": "容纳一个子组件,可以通过指定ignoring属性,来决定孩子是否忽略手势事件,其本身不接受事件。", - "lever": 4, - "family": 2, - "linkIds": [ - 295, - 146, - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IgnorePointer基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【ignoring】 : 是否忽视事件 【bool】", - "如下,Switch选中时ignoring为true,按钮事件将被锁定,无法点击。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/node1_base.dart deleted file mode 100644 index 699d88a70..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IgnorePointer/node1_base.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - - -class CustomIgnorePointer extends StatefulWidget { - const CustomIgnorePointer({Key? key}) : super(key: key); - - @override - _CustomIgnorePointerState createState() => _CustomIgnorePointerState(); -} - -class _CustomIgnorePointerState extends State { - bool _ignore = false; - - @override - Widget build(BuildContext context) { - return Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - GestureDetector( - onTap: (){ - print('IgnorePointer'); - }, - child: IgnorePointer( - ignoring: _ignore, - child: _buildButton(), - ), - ), - _buildSwitch(), - Text(!_ignore ? '允许点击' : '点击已锁定') - ], - ); - } - - Widget _buildButton() => ElevatedButton( - child: const Text( - 'To About', - style: TextStyle(color: Colors.white), - ), - onPressed: () => Navigator.of(context).pushNamed('AboutMePage')); - - Widget _buildSwitch() => Switch( - value: _ignore, - onChanged: (v) { - setState(() { - _ignore = v; - }); - }); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_de_DE.json deleted file mode 100644 index 03f46e2ea..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_de_DE.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "Bildfilter", - "info": "Mit dem ImageFilter-Bildfilter können beliebige Komponenten mit Effekten wie Gaußscher Unschärfe, Farbfiltern, Transformationen usw. verarbeitet werden.", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "ImageFilter Gaußsche Unschärfe", - "desc": [ - "【imageFilter】 : Bildfilter 【ImageFilter】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "ImageFilter Farbeffekt", - "desc": [ - "Farbfilter wird durch das ColorFilter-Objekt implementiert." - ] - }, - { - "file": "node3_matrix.dart", - "name": "ImageFilter Transformationseffekt", - "desc": [ - "Matrix-Transformation durch ImageFilter.matrix-Konstruktion, aber eher unbrauchbar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_en_US.json deleted file mode 100644 index 3501a59e0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_en_US.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "Image Filter", - "info": "Through the ImageFilter image filter, any component can be processed with special effects, including but not limited to Gaussian blur, color filter, transformation, etc.", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "ImageFilter Gaussian Blur", - "desc": [ - "【imageFilter】 : Image filter 【ImageFilter】", - "【child】 : Child component 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "ImageFilter Color Effect", - "desc": [ - "Achieve color filter through the ColorFilter object." - ] - }, - { - "file": "node3_matrix.dart", - "name": "ImageFilter Transformation Effect", - "desc": [ - "Perform matrix transformation through the ImageFilter.matrix constructor, but it is relatively weak." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_es_ES.json deleted file mode 100644 index 66a8d1dda..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_es_ES.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "Filtro de imagen", - "info": "Con el filtro de imagen ImageFilter, se pueden aplicar efectos especiales a cualquier componente, incluyendo pero no limitado a desenfoque gaussiano, filtros de color, transformaciones, etc.", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "Desenfoque gaussiano ImageFilter", - "desc": [ - "【imageFilter】 : Filtro de imagen 【ImageFilter】", - "【child】 : Componente hijo 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "Efecto de filtro de color ImageFilter", - "desc": [ - "Se implementa un filtro de color a través del objeto ColorFilter." - ] - }, - { - "file": "node3_matrix.dart", - "name": "Efecto de transformación ImageFilter", - "desc": [ - "Se realiza una transformación de matriz a través de la construcción ImageFilter.matrix, pero es bastante limitado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_fr_FR.json deleted file mode 100644 index a9b78902b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_fr_FR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "Filtre d'image", - "info": "Avec le filtre d'image ImageFilter, vous pouvez appliquer des effets spéciaux à n'importe quel composant, y compris mais sans s'y limiter, le flou gaussien, les filtres de couleur, les transformations, etc.", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "ImageFilter Flou Gaussien", - "desc": [ - "【imageFilter】 : Filtre d'image 【ImageFilter】", - "【child】 : Composant enfant 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "ImageFilter Effet de Filtre de Couleur", - "desc": [ - "Réalisez un filtre de couleur via l'objet ColorFilter." - ] - }, - { - "file": "node3_matrix.dart", - "name": "ImageFilter Effet de Transformation", - "desc": [ - "Effectuez une transformation matricielle via la construction ImageFilter.matrix, mais c'est assez limité." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_it_IT.json deleted file mode 100644 index 496905097..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_it_IT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "Filtro Immagine", - "info": "Con il filtro immagine ImageFilter, è possibile applicare effetti speciali a qualsiasi componente, inclusi ma non limitati a sfocatura gaussiana, filtri colore, trasformazioni, ecc.", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "Sfocatura Gaussiana ImageFilter", - "desc": [ - "【imageFilter】 : Filtro immagine 【ImageFilter】", - "【child】 : Componente figlio 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "Effetto Filtro Colore ImageFilter", - "desc": [ - "Implementazione del filtro colore tramite l'oggetto ColorFilter." - ] - }, - { - "file": "node3_matrix.dart", - "name": "Effetto Trasformazione ImageFilter", - "desc": [ - "Trasformazione della matrice tramite la costruzione ImageFilter.matrix, ma è piuttosto limitata." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ja_JP.json deleted file mode 100644 index 53bdef98a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ja_JP.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "画像フィルター", - "info": "ImageFilter 画像フィルターを使用すると、任意のコンポーネントに特殊効果を適用できます。これには、ガウスぼかし、カラーフィルター、変形などが含まれます。", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "ImageFilter ガウスぼかし", - "desc": [ - "【imageFilter】 : 画像フィルター 【ImageFilter】", - "【child】 : 子コンポーネント 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "ImageFilter カラーフィルター効果", - "desc": [ - "ColorFilter オブジェクトを使用してカラーフィルターを実現します。" - ] - }, - { - "file": "node3_matrix.dart", - "name": "ImageFilter 変形効果", - "desc": [ - "ImageFilter.matrix コンストラクタを使用して行列変換を行いますが、あまり役に立ちません。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ko_KR.json deleted file mode 100644 index 7b4088e9a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ko_KR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "이미지 필터", - "info": "ImageFilter 이미지 필터를 통해 모든 컴포넌트에 효과를 적용할 수 있습니다. 이는 가우시안 블러, 색상 필터, 변환 등을 포함하지만 이에 국한되지 않습니다.", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "ImageFilter 가우시안 블러", - "desc": [ - "【imageFilter】 : 이미지 필터 【ImageFilter】", - "【child】 : 자식 컴포넌트 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "ImageFilter 색상 필터 효과", - "desc": [ - "ColorFilter 객체를 통해 색상 필터를 구현합니다." - ] - }, - { - "file": "node3_matrix.dart", - "name": "ImageFilter 변환 효과", - "desc": [ - "ImageFilter.matrix 생성자를 통해 매트릭스 변환을 수행하지만, 다소 실용성이 떨어집니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_pt_PT.json deleted file mode 100644 index da190d408..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_pt_PT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "Filtro de Imagem", - "info": "Com o filtro de imagem ImageFilter, você pode aplicar efeitos especiais a qualquer componente, incluindo, mas não se limitando a, desfoque gaussiano, filtros de cores, transformações, etc.", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "Desfoque Gaussiano ImageFilter", - "desc": [ - "【imageFilter】 : filtro de imagem 【ImageFilter】", - "【child】 : componente filho 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "Efeito de Filtro de Cor ImageFilter", - "desc": [ - "Implementa o filtro de cor através do objeto ColorFilter." - ] - }, - { - "file": "node3_matrix.dart", - "name": "Efeito de Transformação ImageFilter", - "desc": [ - "Realiza transformações de matriz através da construção ImageFilter.matrix, mas é um pouco limitado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ru_RU.json deleted file mode 100644 index 6a00e1475..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_ru_RU.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "Фильтр изображений", - "info": "С помощью фильтра изображений ImageFilter можно применять эффекты к любому компоненту, включая, но не ограничиваясь, размытием по Гауссу, цветовыми фильтрами, преобразованиями и т.д.", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "ImageFilter размытие по Гауссу", - "desc": [ - "【imageFilter】 : фильтр изображений 【ImageFilter】", - "【child】 : дочерний компонент 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "ImageFilter цветовой фильтр", - "desc": [ - "Реализация цветового фильтра через объект ColorFilter." - ] - }, - { - "file": "node3_matrix.dart", - "name": "ImageFilter эффект преобразования", - "desc": [ - "Преобразование матрицы через конструкцию ImageFilter.matrix, но это довольно неудобно." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_zh-CN.json deleted file mode 100644 index 8e82b4760..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/desc_zh-CN.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 357, - "name": "ImageFiltered", - "localName": "图像滤镜", - "info": "通过 ImageFilter 图像滤镜,可以对任意组件进行特效处理,包括但不限于高斯模糊、颜色滤镜、变换等。", - "lever": 4, - "family": 2, - "linkIds": [ - 278, - 88 - ], - "nodes": [ - { - "file": "node1_blur.dart", - "name": "ImageFilter 高斯模糊", - "desc": [ - "【imageFilter】 : 图像滤镜 【ImageFilter】", - "【child】 : 子组件 【Widget】" - ] - }, - { - "file": "node2_color.dart", - "name": "ImageFilter 滤色效果", - "desc": [ - "通过 ColorFilter 对象实现颜色滤镜。" - ] - }, - { - "file": "node3_matrix.dart", - "name": "ImageFilter 变换效果", - "desc": [ - "通过 ImageFilter.matrix 构造,进行矩阵变换,但比较鸡肋。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node1_blur.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node1_blur.dart deleted file mode 100644 index d6132adca..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node1_blur.dart +++ /dev/null @@ -1,117 +0,0 @@ -import 'dart:ui'; - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2022/04/23 -/// contact me by email 1981462002@qq.com - -class ImageFilteredBlur extends StatefulWidget { - const ImageFilteredBlur({Key? key}) : super(key: key); - - @override - State createState() => _ImageFilteredBlurState(); -} - -class _ImageFilteredBlurState extends State { - double _sigmaX = 1.2; - double _sigmaY = 1.2; - TileMode _tileMode = TileMode.decal; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - ImageFiltered( - imageFilter: ImageFilter.blur( - sigmaX: _sigmaX, - sigmaY: _sigmaY, - tileMode: _tileMode, - ), - child: const _TargetContent(), - ), - _buildTools(), - ], - ); - } - - Widget _buildTools() => Column( - children: [ - Row( - children: [ - Expanded( - child: Slider( - min: 0, - max: 4, - value: _sigmaX, - divisions: 360, - label: 'x:' + _sigmaX.toStringAsFixed(1), - onChanged: (v) => setState(() => _sigmaX = v)), - ), - Expanded( - child: Slider( - min: 0, - max: 4, - value: _sigmaY, - divisions: 360, - label: 'y:' + _sigmaY.toStringAsFixed(1), - onChanged: (v) => setState(() => _sigmaY = v)), - ), - ], - ), - buildTileModeCheck() - ], - ); - - Widget buildTileModeCheck() => Wrap( - spacing: 10, - children: TileMode.values.map((e) { - TextStyle style; - if (e == _tileMode) { - Color color = Theme.of(context).primaryColor; - style = TextStyle(fontWeight: FontWeight.bold, color: color); - } else { - style = const TextStyle( - fontWeight: FontWeight.bold, color: Colors.grey); - } - return GestureDetector( - onTap: () => setState(() => _tileMode = e), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 8), - child: Text( - e.toString().split('.')[1], - style: style, - ), - ), - ); - }).toList(), - ); -} - -class _TargetContent extends StatelessWidget { - const _TargetContent({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [ - SizedBox( - height: 150, - width: 150, - child: Image.asset( - 'assets/images/sabar.webp', - fit: BoxFit.cover, - ), - ), - SizedBox( - height: 150, - width: 150, - child: Image.asset( - 'assets/images/wy_200x300.webp', - fit: BoxFit.cover, - ), - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node2_color.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node2_color.dart deleted file mode 100644 index 0ac1d6534..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node2_color.dart +++ /dev/null @@ -1,138 +0,0 @@ -import 'dart:ui'; - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2022/04/23 -/// contact me by email 1981462002@qq.com - -class ImageFilteredColor extends StatefulWidget { - const ImageFilteredColor({Key? key}) : super(key: key); - - @override - State createState() => _ImageFilteredColorState(); -} - -class _ImageFilteredColorState extends State { - - String _currentFilter = 'srgbToLinear'; - - ColorFilter greyscale = const ColorFilter.matrix([ - 0.2126, 0.7152, 0.0722, 0, 0, - 0.2126, 0.7152, 0.0722, 0, 0, - 0.2126, 0.7152, 0.0722, 0, 0, - 0, 0, 0, 1, 0, - ]); - ColorFilter sepia = const ColorFilter.matrix([ - 0.393, 0.769, 0.189, 0, 0, - 0.349, 0.686, 0.168, 0, 0, - 0.272, 0.534, 0.131, 0, 0, - 0, 0, 0, 1, 0, - ]); - ColorFilter invert = const ColorFilter.matrix([ - -1, 0, 0, 0, 255, - 0, -1, 0, 0, 255, - 0, 0, -1, 0, 255, - 0, 0, 0, 1, 0, - ]); - ColorFilter identity = const ColorFilter.matrix([ - 1, 0, 0, 0, 0, - 0, 1, 0, 0, 0, - 0, 0, 1, 0, 0, - 0, 0, 0, 1, 0, - ]); - - - ColorFilter darken = const ColorFilter.matrix([ - 1,0,0,0,-126.0, - 0,1,0,0,-126.0, - 0,0,1,0,-126.0, - 0,0,0,1,0 - ]); - - ColorFilter light = const ColorFilter.matrix([ - 1,0,0,0,90, - 0,1,0,0,90, - 0,0,1,0,90, - 0,0,0,1,0 - ]); - - late Map filterMap={ - '原图': identity, - 'light': light, - 'darken': darken, - 'greyscale': greyscale, - 'sepia': sepia, - 'invert': invert, - 'srgbToLinear':const ColorFilter.srgbToLinearGamma(), - 'linearToSrgb':const ColorFilter.linearToSrgbGamma(), - }; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - ImageFiltered( - imageFilter: filterMap[_currentFilter]??identity, - child: const _TargetContent(), - ), - buildTileModeCheck() - ], - ); - } - - - Widget buildTileModeCheck() => Padding( - padding: const EdgeInsets.only(top: 8.0), - child: Wrap( - children: filterMap.keys.map((e) { - TextStyle style; - if (e == _currentFilter) { - Color color = Theme.of(context).primaryColor; - style = TextStyle(fontWeight: FontWeight.bold, color: color); - } else { - style = const TextStyle( - fontWeight: FontWeight.bold, color: Colors.grey); - } - return GestureDetector( - onTap: () => setState(() => _currentFilter = e), - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 8,vertical: 2), - child: Text( - e, - style: style, - ), - ), - ); - }).toList(), - ), - ); -} - -class _TargetContent extends StatelessWidget { - const _TargetContent({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [ - SizedBox( - height: 150, - width: 150, - child: Image.asset( - 'assets/images/sabar.webp', - fit: BoxFit.cover, - ), - ), - SizedBox( - height: 150, - width: 150, - child: Image.asset( - 'assets/images/wy_200x300.webp', - fit: BoxFit.cover, - ), - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node3_matrix.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node3_matrix.dart deleted file mode 100644 index 56d9ea891..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ImageFiltered/node3_matrix.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'dart:math'; -import 'dart:ui'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2022/04/23 -/// contact me by email 1981462002@qq.com - -class ImageFilteredMatrix extends StatefulWidget { - const ImageFilteredMatrix({Key? key}) : super(key: key); - - @override - State createState() => _ImageFilteredMatrixState(); -} - -class _ImageFilteredMatrixState extends State { - double _sigmaX = 0; - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - ImageFiltered( - imageFilter: ImageFilter.matrix( - Matrix4.rotationZ(_sigmaX/180*pi).storage - ), - child: const _TargetContent(), - ), - _buildTools(), - ], - ); - } - - Widget _buildTools() => Column( - children: [ - Row( - children: [ - const Text(' 旋转角度:'), - Expanded( - child: Slider( - min: 0, - max: 90, - value: _sigmaX, - divisions: 360, - label: 'x:' + _sigmaX.toStringAsFixed(1), - onChanged: (v) => setState(() => _sigmaX = v)), - ), - ], - ), - // buildTileModeCheck() - ], - ); -} - -class _TargetContent extends StatelessWidget { - const _TargetContent({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 150, - width: 150, - child: Image.asset( - 'assets/images/sabar.webp', - fit: BoxFit.cover, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_de_DE.json deleted file mode 100644 index 9a0619c98..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "Intrinsische Höhe", - "info": "Eine Komponente, die die Größe ihrer Kindelemente basierend auf deren intrinsischer Höhe anpasst. Sie kann viele Layoutprobleme lösen, ist aber relativ teuer.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von IntrinsicHeight", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "Wie im Beispiel: Die Höhe auf der linken Seite ist variabel, die Höhe in der Mitte ist fest, und die Höhe auf der rechten Seite nimmt den höchsten Wert der beiden vorherigen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_en_US.json deleted file mode 100644 index 427b01c66..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "Intrinsic Height", - "info": "A component that adjusts the size of its children based on their intrinsic height, which can solve many layout issues, but is relatively expensive.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of IntrinsicHeight", - "desc": [ - "【child】: Child component 【Widget】", - "As shown in the example: the height on the left can vary, the height in the middle is fixed, and the height on the right takes the highest value of the previous two." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_es_ES.json deleted file mode 100644 index 7bc26a1a0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "Altura intrínseca", - "info": "Un componente que ajusta el tamaño de sus hijos según la altura intrínseca de los elementos hijos, puede resolver muchos problemas de diseño, pero es relativamente costoso.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de IntrinsicHeight", - "desc": [ - "【child】 : Widget hijo 【Widget】", - "Como en el ejemplo: la altura del lado izquierdo puede variar, la altura del centro es fija, y la altura del lado derecho toma el valor más alto de los dos anteriores." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_fr_FR.json deleted file mode 100644 index e20b1c234..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "Hauteur intrinsèque", - "info": "Un composant qui ajuste la taille de ses enfants en fonction de leur hauteur intrinsèque, résout de nombreux problèmes de mise en page, mais est relativement coûteux.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'IntrinsicHeight", - "desc": [ - "【child】 : Enfant 【Widget】", - "Comme dans l'exemple : la hauteur de gauche est variable, la hauteur du milieu est fixe, la hauteur de droite prend la valeur maximale des deux premières." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_it_IT.json deleted file mode 100644 index 14ca5a635..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "Altezza intrinseca", - "info": "Un componente che regola le dimensioni dei suoi elementi figli in base all'altezza intrinseca degli elementi figli, risolve molti problemi di layout, ma è relativamente costoso.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di IntrinsicHeight", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "Come nell'esempio: l'altezza a sinistra è variabile, l'altezza al centro è fissa, l'altezza a destra prende il valore più alto dei due precedenti." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ja_JP.json deleted file mode 100644 index cbaaf8df7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "固有高", - "info": "子要素の固有の高さに基づいてその子要素のサイズを調整するコンポーネントで、多くのレイアウトの問題を解決できますが、比較的高価です。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IntrinsicHeightの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "例: 左側の高さは可変、中央の高さは固定、右側の高さは前2つの最大値を取ります。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ko_KR.json deleted file mode 100644 index de0dd7d9a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "고유 높이", - "info": "자식 요소의 고유 높이에 따라 자식 요소의 크기를 조정하는 컴포넌트로, 많은 레이아웃 문제를 해결할 수 있지만 상대적으로 비용이 많이 듭니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IntrinsicHeight 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "예시: 왼쪽 높이는 변동 가능, 중간 높이는 고정, 오른쪽 높이는 앞 두 개의 최대값을 취합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_pt_PT.json deleted file mode 100644 index b0ba32431..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "Altura Intrínseca", - "info": "Um componente que ajusta o tamanho dos seus filhos com base na altura intrínseca dos elementos filhos, pode resolver muitos problemas de layout, mas é relativamente caro.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do IntrinsicHeight", - "desc": [ - "【child】 : Componente filho 【Widget】", - "Como no exemplo: a altura à esquerda pode variar, a altura do meio é fixa, e a altura à direita assume o valor mais alto dos dois anteriores." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ru_RU.json deleted file mode 100644 index 560076bf8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "Встроенная высота", - "info": "Компонент, который регулирует размер своих дочерних элементов в зависимости от их собственной высоты, может решить множество проблем с макетом, но относительно дорог.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование IntrinsicHeight", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "Как в примере: высота слева может изменяться, высота в середине фиксирована, высота справа берет максимальное значение из первых двух." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_zh-CN.json deleted file mode 100644 index 71305b0a9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 298, - "name": "IntrinsicHeight", - "localName": "固有高", - "info": "根据子元素的固有高度调整其子元素大小的组件,可解决很多布局的疑难杂症,但相对昂贵。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IntrinsicHeight基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "如示例:左侧高可变动,中间高固定,右侧高取前两者的最高值。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/node1_base.dart deleted file mode 100644 index 68e9dbde0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicHeight/node1_base.dart +++ /dev/null @@ -1,66 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/21 -/// contact me by email 1981462002@qq.com - - -class IntrinsicHeightDemo extends StatefulWidget { - const IntrinsicHeightDemo({Key? key}) : super(key: key); - - @override - _IntrinsicHeightDemoState createState() => _IntrinsicHeightDemoState(); -} - -class _IntrinsicHeightDemoState extends State { - double _height =120.0; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - buildChild(_height), - const SizedBox(height: 10), - _buildSlider() - ], - ); - } - - Widget buildChild(double leftHeight) { - return IntrinsicHeight( - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - height: leftHeight, - width: 120, - color: Colors.yellow, - alignment: Alignment.center, - child: Text("height:${leftHeight.toStringAsFixed(1)}"), - ), - Container( - color: Colors.blue, - width: 150, - height: 80, - alignment: Alignment.center, - child: const Text("固定高"), - ), - Container( - color: Colors.red, - width: 60, - alignment: Alignment.center, - child: const Text("最高"), - ) - ], - ), - ); - } - - Widget _buildSlider() =>Slider( - value: _height, - max: 200.0, - min: 30.0, - divisions: 17, - onChanged: (v)=> setState(() => _height= v), - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_de_DE.json deleted file mode 100644 index 441cf9af8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "Intrinsische Breite", - "info": "Eine Komponente, die die Größe ihrer Kinder basierend auf deren intrinsischer Breite anpasst, kann viele Layoutprobleme lösen, ist jedoch relativ teuer.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von IntrinsicWidth", - "desc": [ - "【child】: Kindkomponente 【Widget】", - "Wie im Beispiel: Die Breite oben kann variieren, die Breite in der Mitte ist fest, und die Breite unten nimmt den höchsten Wert der beiden vorherigen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_en_US.json deleted file mode 100644 index 9b103bc32..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "Intrinsic Width", - "info": "A component that adjusts the size of its child elements based on their intrinsic width, which can solve many layout issues but is relatively expensive.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of IntrinsicWidth", - "desc": [ - "【child】: Child component 【Widget】", - "As shown in the example: the width above can be changed, the width in the middle is fixed, and the width below takes the highest value of the former two." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_es_ES.json deleted file mode 100644 index 4db7a69fc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "Ancho intrínseco", - "info": "Componente que ajusta el tamaño de sus elementos secundarios según el ancho intrínseco de los mismos, puede resolver muchos problemas de diseño, pero es relativamente costoso.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de IntrinsicWidth", - "desc": [ - "【child】 : Componente secundario 【Widget】", - "Como en el ejemplo: el ancho de arriba puede variar, el ancho del medio es fijo, el ancho de abajo toma el valor más alto de los dos anteriores." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_fr_FR.json deleted file mode 100644 index 1b96204ed..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "Largeur intrinsèque", - "info": "Un composant qui ajuste la taille de ses enfants en fonction de leur largeur intrinsèque, résout de nombreux problèmes de mise en page, mais est relativement coûteux.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'IntrinsicWidth", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "Comme dans l'exemple : la largeur du haut peut varier, celle du milieu est fixe, et celle du bas prend la valeur maximale des deux précédentes." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_it_IT.json deleted file mode 100644 index 91edb57c3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "Larghezza intrinseca", - "info": "Un componente che regola le dimensioni dei suoi elementi figli in base alla larghezza intrinseca degli elementi figli, risolve molti problemi di layout, ma è relativamente costoso.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di IntrinsicWidth", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "Come nell'esempio: la larghezza superiore è variabile, quella centrale è fissa, quella inferiore prende il valore più alto tra le prime due." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ja_JP.json deleted file mode 100644 index eecce94f7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "固有幅", - "info": "子要素の固有の幅に基づいて子要素のサイズを調整するコンポーネントで、多くのレイアウトの問題を解決できますが、比較的高コストです。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IntrinsicWidthの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "例: 上の幅は可変、中間の幅は固定、下の幅は前2つの最大値を取ります。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ko_KR.json deleted file mode 100644 index a0fd16f3f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "고유 너비", - "info": "자식 요소의 고유 너비에 따라 크기를 조정하는 컴포넌트로, 많은 레이아웃 문제를 해결할 수 있지만 상대적으로 비용이 많이 듭니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IntrinsicWidth 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "예시: 위쪽 너비는 변동 가능, 중간 너비는 고정, 아래쪽 너비는 앞 두 값 중 최대값을 취합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_pt_PT.json deleted file mode 100644 index 908e1280f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "Largura Intrínseca", - "info": "Componente que ajusta o tamanho dos seus elementos filhos com base na largura intrínseca dos mesmos, resolvendo muitos problemas de layout, mas relativamente caro.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do IntrinsicWidth", - "desc": [ - "【child】 : Componente filho 【Widget】", - "Como no exemplo: a largura acima pode variar, a largura do meio é fixa, e a largura abaixo assume o valor mais alto dos dois anteriores." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ru_RU.json deleted file mode 100644 index af6625d20..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "Встроенная ширина", - "info": "Компонент, который регулирует размер своих дочерних элементов в зависимости от их внутренней ширины, решает множество проблем с макетом, но относительно дорогостоящий.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование IntrinsicWidth", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "Как в примере: ширина сверху может изменяться, ширина в середине фиксирована, ширина снизу принимает максимальное значение из первых двух." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_zh-CN.json deleted file mode 100644 index 7bce55355..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 297, - "name": "IntrinsicWidth", - "localName": "固有宽", - "info": "根据子元素的固有宽度度调整其子元素大小的组件,可解决很多布局的疑难杂症,但相对昂贵。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IntrinsicWidth基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "如示例:上面宽可变动,中间宽固定,下面宽取前两者的最高值。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/node1_base.dart deleted file mode 100644 index 823cdb9d4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/IntrinsicWidth/node1_base.dart +++ /dev/null @@ -1,66 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/21 -/// contact me by email 1981462002@qq.com - - -class IntrinsicWidthDemo extends StatefulWidget { - const IntrinsicWidthDemo({Key? key}) : super(key: key); - - @override - _IntrinsicWidthDemoState createState() => _IntrinsicWidthDemoState(); -} - -class _IntrinsicWidthDemoState extends State { - double _height =120.0; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - buildChild(_height), - const SizedBox(height: 10), - _buildSlider() - ], - ); - } - - Widget buildChild(double leftWidth) { - return IntrinsicWidth( - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - height: 50, - width: leftWidth, - color: Colors.yellow, - alignment: Alignment.center, - child: Text("width:${leftWidth.toStringAsFixed(1)}"), - ), - Container( - color: Colors.blue, - width: 150, - height: 60, - alignment: Alignment.center, - child: const Text("固定宽"), - ), - Container( - color: Colors.red, - height: 40, - alignment: Alignment.center, - child: const Text("最宽"), - ) - ], - ), - ); - } - - Widget _buildSlider() =>Slider( - value: _height, - max: 200.0, - min: 80.0, - divisions: 17, - onChanged: (v)=> setState(() => _height= v), - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_de_DE.json deleted file mode 100644 index a084cd4ff..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_de_DE.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "Layout-Builder", - "info": "Kann die Größe des übergeordneten Containers erkennen und eine benutzerdefinierte Layout basierend auf den Abmessungen des übergeordneten Containers erstellen. Es ist ein sehr nützliches Layout-Komponente.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegendes Verständnis von LayoutBuilder", - "desc": [ - "【builder】: Layout-Builder 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "Anpassungsfähiges Layout von LayoutBuilder", - "desc": [ - "Kann das Design der Komponentenanzeige basierend auf der Größe des Bereichs durchführen.", - "Zum Beispiel können unterschiedliche Layout-Strukturen in verschiedenen Breitenbereichen angezeigt werden.", - "Schließlich ist es an vielen Stellen nicht einfach, den Bereich der übergeordneten Komponente zu erhalten, und die Verwendung von LayoutBuilder wird sehr angenehm sein." - ] - }, - { - "file": "node3_expend.dart", - "name": "Erweiterte Verwendung von LayoutBuilder", - "desc": [ - "Verwenden Sie TextPainter, um die Anzahl der Textzeilen zu überprüfen und die Funktion zum Erweitern oder Reduzieren zu implementieren." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_en_US.json deleted file mode 100644 index 266ade591..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_en_US.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "Layout Constructor", - "info": "Can detect the size of the parent container and complete custom layouts based on the size information of the parent container. It is a very practical layout component.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Understanding of LayoutBuilder", - "desc": [ - "【builder】: Layout Constructor 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "Adaptive Layout of LayoutBuilder", - "desc": [ - "Can design component display based on the size of the area.", - "For example, displaying different layout structures in different width areas.", - "After all, it is not easy to obtain the parent component area in many places, and using LayoutBuilder will be very refreshing." - ] - }, - { - "file": "node3_expend.dart", - "name": "Expanded Use of LayoutBuilder", - "desc": [ - "Use TextPainter to detect the number of lines of text to implement expand or collapse functionality." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_es_ES.json deleted file mode 100644 index e88b9cec5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_es_ES.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "Constructor de diseño", - "info": "Puede detectar el tamaño del área del contenedor padre y completar el diseño personalizado según la información de tamaño del contenedor padre. Es un componente de diseño muy práctico.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Conocimiento básico de LayoutBuilder", - "desc": [ - "【builder】: Constructor de diseño 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "Adaptación de diseño de LayoutBuilder", - "desc": [ - "Puede diseñar la presentación de componentes según el tamaño del área.", - "Por ejemplo, mostrar diferentes estructuras de diseño en áreas de diferentes anchos.", - "Después de todo, en muchos lugares no es fácil obtener el área del componente padre, y usar LayoutBuilder será muy útil." - ] - }, - { - "file": "node3_expend.dart", - "name": "Uso extendido de LayoutBuilder", - "desc": [ - "Usar TextPainter para detectar el número de líneas de texto y lograr la función de expandir o contraer." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_fr_FR.json deleted file mode 100644 index 24c1445f1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_fr_FR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "Constructeur de mise en page", - "info": "Peut détecter la taille de la zone du conteneur parent et compléter la mise en page personnalisée en fonction des informations de taille du conteneur parent. C'est un composant de mise en page très pratique.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Connaissance de base de LayoutBuilder", - "desc": [ - "【builder】 : Constructeur de mise en page 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "Adaptation de la mise en page de LayoutBuilder", - "desc": [ - "Peut concevoir l'affichage des composants en fonction de la taille de la zone.", - "Par exemple, afficher différentes structures de mise en page dans des zones de largeur différente.", - "Après tout, il n'est pas facile d'obtenir la zone du composant parent dans de nombreux endroits, l'utilisation de LayoutBuilder sera très agréable." - ] - }, - { - "file": "node3_expend.dart", - "name": "Utilisation étendue de LayoutBuilder", - "desc": [ - "Utilisez TextPainter pour détecter le nombre de lignes de texte et implémenter la fonction d'expansion ou de réduction." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_it_IT.json deleted file mode 100644 index c1ac0694d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_it_IT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "Costruttore di layout", - "info": "Può rilevare le dimensioni dell'area del contenitore padre e completare il layout personalizzato in base alle informazioni sulle dimensioni del contenitore padre. È un componente di layout molto pratico.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Conoscenza di base di LayoutBuilder", - "desc": [ - "【builder】: Costruttore di layout 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "Adattamento del layout di LayoutBuilder", - "desc": [ - "È possibile progettare la visualizzazione dei componenti in base alle dimensioni dell'area.", - "Ad esempio, mostrare diverse strutture di layout in aree di larghezza diversa.", - "Dopotutto, in molti posti non è facile ottenere l'area del componente padre, usare LayoutBuilder sarà molto utile." - ] - }, - { - "file": "node3_expend.dart", - "name": "Uso esteso di LayoutBuilder", - "desc": [ - "Usa TextPainter per rilevare il numero di righe del testo e implementare la funzione di espansione o di chiusura." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ja_JP.json deleted file mode 100644 index 2e7598ac9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ja_JP.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "レイアウトビルダー", - "info": "親コンテナの領域サイズを検出し、親コンテナのサイズ情報に基づいてカスタムレイアウトを完成させることができます。非常に実用的なレイアウトコンポーネントです。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LayoutBuilderの基本認識", - "desc": [ - "【builder】 : レイアウトビルダー 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "LayoutBuilderの適応レイアウト", - "desc": [ - "領域のサイズに基づいてコンポーネントの表示デザインを行うことができます。\"", - "たとえば、異なる幅の領域で異なるレイアウト構造を表示します。\"", - "結局のところ、多くの場所で親コンポーネントの領域を取得するのは容易ではなく、LayoutBuilderを使用すると非常に便利です。" - ] - }, - { - "file": "node3_expend.dart", - "name": "LayoutBuilderの展開使用", - "desc": [ - "TextPainterを使用してテキストの行数を検出し、展開または折りたたみ機能を実装します。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ko_KR.json deleted file mode 100644 index ace16c973..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ko_KR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "레이아웃 빌더", - "info": "부모 컨테이너의 영역 크기를 감지하고, 부모 컨테이너의 크기 정보를 기반으로 사용자 정의 레이아웃을 완성할 수 있습니다. 매우 실용적인 레이아웃 구성 요소입니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LayoutBuilder 기본 이해", - "desc": [ - "【builder】 : 레이아웃 빌더 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "LayoutBuilder의 적응형 레이아웃", - "desc": [ - "영역의 크기에 따라 컴포넌트 디스플레이를 설계할 수 있습니다.", - "예를 들어, 다른 너비 영역에서 다른 레이아웃 구조를 표시할 수 있습니다.", - "결국 많은 곳에서 부모 컴포넌트 영역을 쉽게 얻을 수 없기 때문에 LayoutBuilder를 사용하면 매우 편리합니다." - ] - }, - { - "file": "node3_expend.dart", - "name": "LayoutBuilder의 확장 사용", - "desc": [ - "TextPainter를 사용하여 텍스트의 줄 수를 감지하고, 확장 또는 축소 기능을 구현합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_pt_PT.json deleted file mode 100644 index 5c983efd0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_pt_PT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "Construtor de Layout", - "info": "Pode detectar o tamanho da área do contêiner pai e completar o layout personalizado de acordo com as informações de dimensão do contêiner pai. É um componente de layout muito útil.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Conhecimento Básico do LayoutBuilder", - "desc": [ - "【builder】 : Construtor de Layout 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "Adaptação de Layout do LayoutBuilder", - "desc": [ - "Pode projetar a exibição dos componentes de acordo com o tamanho da área.", - "Por exemplo, exibir diferentes estruturas de layout em áreas de diferentes larguras.", - "Afinal, em muitos lugares não é fácil obter a área do componente pai, usar o LayoutBuilder será muito conveniente." - ] - }, - { - "file": "node3_expend.dart", - "name": "Uso Expandido do LayoutBuilder", - "desc": [ - "Usar TextPainter para detectar o número de linhas de texto e implementar a função de expandir ou recolher." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ru_RU.json deleted file mode 100644 index a0fa492e9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_ru_RU.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "Конструктор макета", - "info": "Может обнаружить размер области родительского контейнера и выполнить пользовательский макет на основе информации о размере родительского контейнера. Это очень полезный компонент макета.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное понимание LayoutBuilder", - "desc": [ - "【builder】 : Конструктор макета 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "Адаптация макета LayoutBuilder", - "desc": [ - "Можно проектировать отображение компонентов в зависимости от размера области.", - "Например, отображать различные структуры макета в областях с разной шириной.", - "Ведь во многих местах нелегко получить область родительского компонента, и использование LayoutBuilder будет очень удобным." - ] - }, - { - "file": "node3_expend.dart", - "name": "Расширенное использование LayoutBuilder", - "desc": [ - "Использование TextPainter для обнаружения количества строк текста и реализации функции развертывания или сворачивания." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_zh-CN.json deleted file mode 100644 index 2763c28d7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/desc_zh-CN.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 287, - "name": "LayoutBuilder", - "localName": "布局构造器", - "info": "可以检测到父容器的区域大小,并根据父容器的尺寸信息可以完成自定义布局。是一个非常实用的布局组件。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LayoutBuilder基本认识", - "desc": [ - "【builder】 : 布局构造器 【LayoutWidgetBuilder】" - ] - }, - { - "file": "node2_fit.dart", - "name": "LayoutBuilder的适应布局", - "desc": [ - "可以根据区域的大小进行组件展示设计。\"", - "比如在不同的宽度区域显示不同的布局结构。\"", - "毕竟很多地方不容易获取父组件区域,使用LayoutBuilder就会非常爽口。" - ] - }, - { - "file": "node3_expend.dart", - "name": "LayoutBuilder的展开使用", - "desc": [ - "使用TextPainter来检测文字的行数,实现展开或收起功能。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node1_base.dart deleted file mode 100644 index 367af2cfc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node1_base.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomLayoutBuilder extends StatelessWidget { - const CustomLayoutBuilder({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - print('CustomLayoutBuild'); - return Container( - alignment: Alignment.center, - height: 80, - width: 150, - color: Colors.green, - child: LayoutBuilder( - builder: (_, zone) { - return Text( - '父容器宽:${zone.maxWidth}\n' - '父容器高:${zone.maxHeight}', - style: const TextStyle(color: Colors.white, fontSize: 16), - ); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node2_fit.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node2_fit.dart deleted file mode 100644 index 118b09eb2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node2_fit.dart +++ /dev/null @@ -1,100 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - - -class FitByLayoutBuilder extends StatefulWidget { - const FitByLayoutBuilder({Key? key}) : super(key: key); - - @override - _FitByLayoutBuilderState createState() => _FitByLayoutBuilderState(); -} - -class _FitByLayoutBuilderState extends State { - double _width = 100; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - SizedBox( - width: _width, - child: LayoutBuilder( - builder: (_, zone) { - if (zone.maxWidth <= 150) { - return _buildType1(); - } else { - return _buildType2(zone); - } - }, - ), - ), - _buildSlider(), - ], - ); - } - - Widget _buildSlider() => Slider( - min: 50, - max: 300, - label: "父宽:${_width.toStringAsFixed(1)}", - value: _width, - onChanged: (v) => setState(() { - _width = v; - })); - - Widget _buildType1() => Container( - color: Colors.blue, - child: Column( - children: [ - _buildTitle(), - Padding( - padding: const EdgeInsets.all(8.0), - child: _buildContent(), - ), - ], - ), - ); - - Widget _buildType2(BoxConstraints zone) => Container( - height: 100, - width: zone.maxWidth, - color: Colors.orange, - child: Row( - children: [ - Container( - margin: const EdgeInsets.all(10), - height: 80, - width: 30, - color: Colors.grey, - ), - Expanded(child: _buildContent()) - ], - ), - ); - - Widget _buildTitle() => Container( - margin: const EdgeInsets.only(left: 10, right: 10, top: 10), - color: Colors.grey, - height: 30, - ); - - Widget _buildContent() => Wrap( - runSpacing: 3, - children: [ - Container( - color: Colors.red, - height: 30, - ), - Container( - color: Colors.yellow, - height: 30, - ), - Container( - color: Colors.green, - height: 30, - ), - ], - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node3_expend.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node3_expend.dart deleted file mode 100644 index 33c13c01f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LayoutBuilder/node3_expend.dart +++ /dev/null @@ -1,84 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - - -class SimpleExpandableText extends StatefulWidget { - const SimpleExpandableText({Key? key}) : super(key: key); - - @override - createState() => _SimpleExpandableTextState(); -} - -class _SimpleExpandableTextState extends State { - - final String text = '桃树、杏树、梨树,你不让我,我不让你,都开满了花赶趟儿。' - '红的像火,粉的像霞,白的像雪。' - '花里带着甜味儿;闭了眼,树上仿佛已经满是桃儿、杏儿、梨儿。' - '花下成千成百的蜜蜂嗡嗡地闹着,大小的蝴蝶飞来飞去。' - '野花遍地是:杂样儿,有名字的,没名字的,散在草丛里,像眼睛,像星星,还眨呀眨的。'; - - bool expand = false; - int maxLines = 3; - - final TextStyle style = - const TextStyle(fontSize: 15, color: Colors.grey, shadows: [ - Shadow( - color: Colors.white, - offset: Offset(1, 1), - ), - ]); - - BoxDecoration get boxDecoration => BoxDecoration( - color: Colors.cyanAccent.withAlpha(8), - borderRadius: const BorderRadiusDirectional.all( - Radius.circular(20), - ), - ); - - late TextPainter painter; - - @override - void initState() { - super.initState(); - painter = TextPainter( - text: TextSpan(text: text, style: style), - maxLines: maxLines, - textDirection: TextDirection.ltr, - ); - } - - @override - build(context) => Container( - decoration: boxDecoration, - padding: const EdgeInsets.all(15), - child: LayoutBuilder(builder: (context, size) { - painter.layout(maxWidth: size.maxWidth); - if (!painter.didExceedMaxLines) { - return Text(text, style: style); - } - return Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(text, maxLines: expand ? null : 3, style: style), - GestureDetector( - onTap: toggle, - child: Text( - expand ? '<< 收起' : '展开 >>', - style: const TextStyle(color: Colors.blue), - ), - ), - ], - ); - }), - ); - - void toggle() { - setState(() { - expand = !expand; - }); - } -} - diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_de_DE.json deleted file mode 100644 index 658010b65..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "Begrenzungsbox", - "info": "Kann ein Unterelement aufnehmen und den Bereich des Unterelements durch Angabe der maximalen Breite und Höhe begrenzen.", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von LimitedBox", - "desc": [ - "【child】 : Unterelement 【Widget】", - "【maxHeight】 : Maximale Höhe 【double】", - "【maxWidth】 : Maximale Breite 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_en_US.json deleted file mode 100644 index 0fa695767..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "Limited Box", - "info": "Can contain one child component, limiting the area where the child component can reside by specifying the maximum width and height.", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of LimitedBox", - "desc": [ - "【child】: Child component 【Widget】", - "【maxHeight】: Maximum height 【double】", - "【maxWidth】: Maximum width 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_es_ES.json deleted file mode 100644 index 3558aa47d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "Caja Limitada", - "info": "Puede contener un componente hijo, limitando el área del componente hijo especificando el ancho y alto máximos.", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de LimitedBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【maxHeight】 : Altura máxima 【double】", - "【maxWidth】 : Ancho máximo 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_fr_FR.json deleted file mode 100644 index 99cb8f712..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "Boîte limitée", - "info": "Peut contenir un composant enfant, en limitant la zone de ce composant par une largeur et une hauteur maximales spécifiées.", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de LimitedBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【maxHeight】 : Hauteur maximale 【double】", - "【maxWidth】 : Largeur maximale 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_it_IT.json deleted file mode 100644 index 61900467c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "Scatola Limitata", - "info": "Può contenere un componente figlio, limitando l'area del componente figlio specificando l'altezza e la larghezza massime.", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di LimitedBox", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【maxHeight】 : Altezza massima 【double】", - "【maxWidth】 : Larghezza massima 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ja_JP.json deleted file mode 100644 index 2bb36c0bf..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "制限ボックス", - "info": "子コンポーネントを1つ収容でき、最大幅と高さを指定して子コンポーネントの収容領域を制限します。", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LimitedBoxの基本的な使用法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【maxHeight】 : 最大高さ 【double】", - "【maxWidth】 : 最大幅 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ko_KR.json deleted file mode 100644 index 6123b09ca..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "제한 상자", - "info": "하나의 하위 구성 요소를 수용할 수 있으며, 최대 너비와 높이를 지정하여 하위 구성 요소의 영역을 제한합니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LimitedBox 기본 사용", - "desc": [ - "【child】 : 자식 구성 요소 【Widget】", - "【maxHeight】 : 최대 높이 【double】", - "【maxWidth】 : 최대 너비 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_pt_PT.json deleted file mode 100644 index a84a02996..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "Caixa Limitada", - "info": "Pode conter um componente filho, limitando a área onde o componente filho pode residir, especificando a largura e altura máximas.", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do LimitedBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【maxHeight】 : Altura máxima 【double】", - "【maxWidth】 : Largura máxima 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ru_RU.json deleted file mode 100644 index 5ac51440a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "Ограничивающая коробка", - "info": "Может содержать один дочерний компонент, ограничивая область размещения дочернего компонента путем указания максимальной ширины и высоты.", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование LimitedBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【maxHeight】 : Максимальная высота 【double】", - "【maxWidth】 : Максимальная ширина 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_zh-CN.json deleted file mode 100644 index 0aa3bf62c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 79, - "name": "LimitedBox", - "localName": "限制盒", - "info": "可容纳一个子组件,通过指定最大宽高来限定子组件容身区域。", - "lever": 3, - "family": 2, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LimitedBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【maxHeight】 : 最大高 【double】", - "【maxWidth】 : 最大宽 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/node1_base.dart deleted file mode 100644 index 47173673c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/LimitedBox/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomLimitedBox extends StatefulWidget { - const CustomLimitedBox({Key? key}) : super(key: key); - - @override - _CustomLimitedBoxState createState() => _CustomLimitedBoxState(); -} - -class _CustomLimitedBoxState extends State { - String _text = ''; - - @override - Widget build(BuildContext context) { - Widget child = Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 50, - height: 50, - child: const Text("Static"), - ); - - Widget box = LimitedBox( - maxHeight: 60, - maxWidth: 100, - child: Container(color: Colors.orange, child: Text(_text)), - ); - - return Column( - children: [ - Container( - color: Colors.grey.withAlpha(22), - width: 300, - height: 100, - child: Row( - children: [child, UnconstrainedBox(child: box), child], - ), - ), - _buildInput() - ], - ); - } - - Widget _buildInput() { - return Padding( - padding: const EdgeInsets.all(18.0), - child: TextField( - decoration: const InputDecoration( - border: OutlineInputBorder(), - hintText: '请输入', - ), - onChanged: (v) { - setState(() { - _text = v; - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_de_DE.json deleted file mode 100644 index a4346c4e5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "Verschwindende Komponente", - "info": "Kann eine Unterkomponente aufnehmen und deren Verschwinden ändern. Das Attribut offstage auf true bedeutet versteckt.", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von LimitedBox", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【offstage】 : Ob verschwunden 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_en_US.json deleted file mode 100644 index 23e3c8ea4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "Disappearing Component", - "info": "Can contain a child component, and can change its visibility. The offstage property set to true means hidden.", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of LimitedBox", - "desc": [ - "【child】: Child component 【Widget】", - "【offstage】: Whether to disappear 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_es_ES.json deleted file mode 100644 index 7639fe92d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "Componente Desaparecido", - "info": "Puede contener un componente hijo y cambiar su visibilidad. Si la propiedad offstage es true, indica que está oculto.", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de LimitedBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【offstage】 : Si está desaparecido 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_fr_FR.json deleted file mode 100644 index 491cda0f4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "Composant disparu", - "info": "Peut contenir un composant enfant et peut modifier sa disparition ou non. L'attribut offstage à true signifie qu'il est caché.", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de LimitedBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【offstage】 : Disparaît ou non 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_it_IT.json deleted file mode 100644 index ab1d8569f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "Componente Scomparso", - "info": "Può contenere un componente figlio e può cambiarne la visibilità. L'attributo offstage è true per indicare che è nascosto.", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di LimitedBox", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【offstage】 : Se è nascosto 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ja_JP.json deleted file mode 100644 index 4dd62d857..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "非表示コンポーネント", - "info": "1つの子コンポーネントを収容でき、その表示・非表示を変更できます。offstage属性がtrueの場合、非表示になります。", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LimitedBoxの基本的な使用法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【offstage】 : 非表示かどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ko_KR.json deleted file mode 100644 index fb751e283..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "사라진 컴포넌트", - "info": "하나의 자식 컴포넌트를 수용할 수 있으며, 그 컴포넌트의 사라짐 여부를 변경할 수 있습니다. offstage 속성이 true이면 숨겨집니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LimitedBox 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【offstage】 : 사라짐 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_pt_PT.json deleted file mode 100644 index 475ec95a6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "Componente Desaparecido", - "info": "Pode conter um componente filho e alterar a sua visibilidade. A propriedade offstage é true para ocultar.", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do LimitedBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【offstage】 : Se desaparece 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ru_RU.json deleted file mode 100644 index 9f3af1b3e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "Исчезающий компонент", - "info": "Может содержать один дочерний компонент, можно изменить его видимость. Свойство offstage, равное true, означает скрытие.", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование LimitedBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【offstage】 : Видимость 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_zh-CN.json deleted file mode 100644 index 17c804f5f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 71, - "name": "Offstage", - "localName": "消失组件", - "info": "可容纳一个子组件,可更改其的消失与否。offstage属性为true表示隐藏。", - "lever": 3, - "family": 2, - "linkIds": [ - 10 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LimitedBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【offstage】 : 是否消失 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/node1_base.dart deleted file mode 100644 index ca83cc163..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OffStage/node1_base.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomOffstage extends StatefulWidget { - const CustomOffstage({Key? key}) : super(key: key); - - @override - _CustomOffstageState createState() => _CustomOffstageState(); -} - -class _CustomOffstageState extends State { - bool _off = false; - - @override - Widget build(BuildContext context) { - Widget radBox = Container( - height: 50, - width: 60, - color: Colors.red, - child: Switch( - value: _off, - onChanged: (v) => setState(() => _off = v)), - ); - - return SizedBox( - width: 250, - height: 200, - child: Row( - children: [radBox, _buildOffStage(), radBox], - ), - ); - } - - Widget _buildOffStage() => Offstage( - offstage: _off, - child: Container( - alignment: Alignment.center, - height: 100, - width: 100, - color: Colors.blue, - child: const Text( - "Offstage", - style: TextStyle(fontSize: 20), - ), - )); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_de_DE.json deleted file mode 100644 index ca1011dc5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "Transparenz", - "info": "Kann ein Kindelement aufnehmen und dessen Transparenz in den Opazitätswert ändern, Opazität liegt zwischen 0 und 1.", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Opacity", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【opacity】 : Transparenz 0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_en_US.json deleted file mode 100644 index 352c2e08d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "Transparency", - "info": "Can contain a child component, changing its transparency to the opacity value, where opacity is between 0 and 1.", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Opacity", - "desc": [ - "【child】 : Child component 【Widget】", - "【opacity】 : Transparency 0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_es_ES.json deleted file mode 100644 index f8028ecad..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "Transparencia", - "info": "Puede contener un componente hijo y cambiar su transparencia al valor de opacity, donde opacity está entre 0 y 1.", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Opacity", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【opacity】 : Transparencia 0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_fr_FR.json deleted file mode 100644 index 0a1e98d36..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "Opacité", - "info": "Peut contenir un composant enfant, transformant sa transparence en valeur d'opacité, l'opacité est comprise entre 0 et 1.", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'Opacity", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【opacity】 : Opacité 0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_it_IT.json deleted file mode 100644 index d51918992..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "Trasparenza", - "info": "Può contenere un componente figlio, trasformandone la trasparenza in un valore di opacità, dove l'opacità è compresa tra 0 e 1.", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di Opacity", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【opacity】 : Trasparenza 0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ja_JP.json deleted file mode 100644 index cf759bb5d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "不透明度", - "info": "子コンポーネントを1つ収容し、その不透明度をopacity値に変更できます。opacityは0〜1の間です。", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Opacityの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【opacity】 : 不透明度0〜1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ko_KR.json deleted file mode 100644 index 41a13f67b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "투명도", - "info": "하위 컴포넌트를 포함할 수 있으며, 그 투명도를 opacity 값으로 변경합니다. opacity는 0~1 사이입니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Opacity 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【opacity】 : 투명도 0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_pt_PT.json deleted file mode 100644 index faafe0279..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "Opacidade", - "info": "Pode conter um componente filho, alterando a sua opacidade para o valor de opacity, onde opacity está entre 0 e 1.", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Opacity", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【opacity】 : Opacidade 0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ru_RU.json deleted file mode 100644 index 19a9bc749..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "Прозрачность", - "info": "Может содержать один дочерний компонент, изменяя его прозрачность на значение opacity, где opacity находится в диапазоне от 0 до 1.", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Opacity", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【opacity】 : Прозрачность 0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_zh-CN.json deleted file mode 100644 index 9f558e9c4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 73, - "name": "Opacity", - "localName": "透明化", - "info": "可容纳一个子组件,将其透明度变为opacity值, opacity在0~1之间。", - "lever": 3, - "family": 2, - "linkIds": [ - 89, - 118 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Opacity基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【opacity】 : 透明度0~1 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/node1_base.dart deleted file mode 100644 index 798c891c5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Opacity/node1_base.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomOpacity extends StatefulWidget { - const CustomOpacity({Key? key}) : super(key: key); - - @override - _CustomOpacityState createState() => _CustomOpacityState(); -} - -class _CustomOpacityState extends State { - double _opacity = 0.2; - - @override - Widget build(BuildContext context) { - return Column( - children: [_buildSlider(), _buildOpacity()], - ); - } - - // 创建Opacity - Widget _buildOpacity() => Opacity( - opacity: _opacity, - child: Image.asset(// 图片 - 'assets/images/icon_head.webp', - width: 100, - ), - ); - Widget _buildSlider() => Slider( - divisions: 20, - label: _opacity.toString(), - value: _opacity, - onChanged: (v) => setState(() => _opacity = v)); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_de_DE.json deleted file mode 100644 index f8e35218a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "Überlaufbox", - "info": "Kann ein Kindelement aufnehmen, und das Kindelement darf den Bereich des Elternelements überlaufen. Es kann der maximale und minimale Bereich für Breite und Höhe festgelegt werden und verfügt über eine Ausrichtungseigenschaft alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von OverflowBox", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【minWidth】 : Minimale Breite 【double】", - "【minHeight】 : Minimale Höhe 【double】", - "【maxHeight】 : Maximale Höhe 【double】", - "【maxWidth】 : Maximale Breite 【double】", - "【alignment】 : Ausrichtung 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_en_US.json deleted file mode 100644 index decab995e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "Overflow Box", - "info": "Can contain a child component, and the child component is allowed to overflow the parent component area. The maximum and minimum width and height can be specified for constraints, and it has the alignment property.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of OverflowBox", - "desc": [ - "【child】: Child component 【Widget】", - "【minWidth】: Minimum width 【double】", - "【minHeight】: Minimum height 【double】", - "【maxHeight】: Maximum height 【double】", - "【maxWidth】: Maximum width 【double】", - "【alignment】: Alignment 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_es_ES.json deleted file mode 100644 index 109703b44..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "Caja de desbordamiento", - "info": "Puede contener un componente hijo, y el componente hijo puede desbordar el área del componente padre. Se pueden especificar áreas máximas y mínimas de ancho y alto para limitar, y tiene la propiedad de alineación alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de OverflowBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【minWidth】 : Ancho mínimo 【double】", - "【minHeight】 : Altura mínima 【double】", - "【maxHeight】 : Altura máxima 【double】", - "【maxWidth】 : Ancho máximo 【double】", - "【alignment】 : Modo de alineación 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_fr_FR.json deleted file mode 100644 index 25b955645..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "Boîte de débordement", - "info": "Peut contenir un composant enfant, et le composant enfant est autorisé à déborder de la zone du composant parent. Il est possible de spécifier les zones maximales et minimales de largeur et de hauteur pour les limiter, et il possède une propriété d'alignement.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de OverflowBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【minWidth】 : Largeur minimale 【double】", - "【minHeight】 : Hauteur minimale 【double】", - "【maxHeight】 : Hauteur maximale 【double】", - "【maxWidth】 : Largeur maximale 【double】", - "【alignment】 : Alignement 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_it_IT.json deleted file mode 100644 index ca94efd50..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "Scatola di overflow", - "info": "Può contenere un componente figlio e consente al componente figlio di fuoriuscire dall'area del componente padre. È possibile specificare le aree massime e minime di larghezza e altezza per i limiti e ha la proprietà di allineamento alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di OverflowBox", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【minWidth】 : Larghezza minima 【double】", - "【minHeight】 : Altezza minima 【double】", - "【maxHeight】 : Altezza massima 【double】", - "【maxWidth】 : Larghezza massima 【double】", - "【alignment】 : Modalità di allineamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ja_JP.json deleted file mode 100644 index 28db137c8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "オーバーフローボックス", - "info": "子コンポーネントを収容でき、子コンポーネントは親コンポーネントの領域をオーバーフローすることができます。幅と高さの最大最小領域を指定して制限することができ、アライメント属性alignmentを持っています。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OverflowBoxの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【minWidth】 : 最小幅 【double】", - "【minHeight】 : 最小高さ 【double】", - "【maxHeight】 : 最大高さ 【double】", - "【maxWidth】 : 最大幅 【double】", - "【alignment】 : アライメント方法 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ko_KR.json deleted file mode 100644 index 1d253a68e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "오버플로우 박스", - "info": "하위 컴포넌트를 수용할 수 있으며, 하위 컴포넌트가 상위 컴포넌트 영역을 벗어날 수 있습니다. 최소 및 최대 너비와 높이를 지정하여 제한할 수 있으며, 정렬 속성 alignment를 가지고 있습니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OverflowBox 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【minWidth】 : 최소 너비 【double】", - "【minHeight】 : 최소 높이 【double】", - "【maxHeight】 : 최대 높이 【double】", - "【maxWidth】 : 최대 너비 【double】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_pt_PT.json deleted file mode 100644 index 12e6d9b17..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "Caixa de Transbordamento", - "info": "Pode conter um componente filho, e o componente filho pode transbordar a área do componente pai. Pode especificar as áreas mínimas e máximas de largura e altura para restringir, e possui o atributo de alinhamento alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do OverflowBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【minWidth】 : Largura mínima 【double】", - "【minHeight】 : Altura mínima 【double】", - "【maxHeight】 : Altura máxima 【double】", - "【maxWidth】 : Largura máxima 【double】", - "【alignment】 : Modo de alinhamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ru_RU.json deleted file mode 100644 index 919e4dfeb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "Переполненная коробка", - "info": "Может содержать один дочерний компонент, и дочерний компонент может выходить за пределы области родительского компонента. Можно указать минимальные и максимальные области ширины и высоты для ограничения, имеет свойство выравнивания alignment.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование OverflowBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【minWidth】 : Минимальная ширина 【double】", - "【minHeight】 : Минимальная высота 【double】", - "【maxHeight】 : Максимальная высота 【double】", - "【maxWidth】 : Максимальная ширина 【double】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_zh-CN.json deleted file mode 100644 index c3c55dc80..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 83, - "name": "OverflowBox", - "localName": "溢出盒", - "info": "可容纳一个子组件,且子组件允许溢出父组件区域,可以指定宽高的最大最小区域进行限定,拥有对齐属性alignment。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OverflowBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【minWidth】 : 最小宽 【double】", - "【minHeight】 : 最小高 【double】", - "【maxHeight】 : 最大高 【double】", - "【maxWidth】 : 最大宽 【double】", - "【alignment】 : 对齐方式 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/node1_base.dart deleted file mode 100644 index cbca2deab..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/OverflowBox/node1_base.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomOverflowBox extends StatefulWidget { - const CustomOverflowBox({Key? key}) : super(key: key); - - @override - _CustomOverflowBoxState createState() => _CustomOverflowBoxState(); -} - -class _CustomOverflowBoxState extends State { - String _text = ''; - - @override - Widget build(BuildContext context) { - Widget box = OverflowBox( - alignment: Alignment.center, - minHeight: 50, - minWidth: 50, - maxWidth: 200, - maxHeight: 120, - child: Container( - color: Colors.orange, - child: Text(_text), - ), - ); - return Column( - children: [ - Container( - color: Colors.grey.withAlpha(33), - width: 100, - height: 100, - child: box), - _buildInput() - ], - ); - } - - Widget _buildInput() { - return Padding( - padding: const EdgeInsets.all(18.0), - child: TextField( - decoration: const InputDecoration( - border: OutlineInputBorder(), - hintText: '请输入', - ), - onChanged: (v) { - setState(() { - _text = v; - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_de_DE.json deleted file mode 100644 index 510451de1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_de_DE.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "Abstandskomponente", - "info": "Kann ein Kindelement aufnehmen und fügt seinen eigenen Innenabstand hinzu, um den Platz des Kindelements zu begrenzen. Die Kerneigenschaft ist padding.", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding gleicher Abstand auf allen Seiten", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【padding】 : Innenabstand auf allen vier Seiten 【EdgeInsetsGeometry】", - "EdgeInsets.all wird verwendet, um den gleichen Abstand auf allen vier Seiten festzulegen" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding einzelner Abstand", - "desc": [ - "EdgeInsets.only wird verwendet, um den gleichen Abstand auf allen vier Seiten festzulegen" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding Richtungsabstand", - "desc": [ - "EdgeInsets.symmetric wird verwendet, um den horizontalen und vertikalen Abstand festzulegen" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_en_US.json deleted file mode 100644 index e5dd8395b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_en_US.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "Margin Component", - "info": "Can accommodate a child component, adding its own padding to limit the child component's placement. The core property is padding.", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding Equal Margin on All Sides", - "desc": [ - "【child】: Child component 【Widget】", - "【padding】: Inner four-sided margin 【EdgeInsetsGeometry】", - "EdgeInsets.all is used to define the same margin on all four sides" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding Individual Margin", - "desc": [ - "EdgeInsets.only is used to define the same margin on all four sides" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding Directional Margin", - "desc": [ - "EdgeInsets.symmetric is used to define horizontal and vertical margins" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_es_ES.json deleted file mode 100644 index 754298f77..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_es_ES.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "Componente de margen", - "info": "Puede contener un componente hijo, agregando su propio relleno interno para limitar el espacio ocupado por el componente hijo, la propiedad principal es el padding.", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding con márgenes iguales en los cuatro lados", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【padding】 : Relleno interno en los cuatro lados 【EdgeInsetsGeometry】", - "EdgeInsets.all se utiliza para definir el mismo margen en los cuatro lados" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding con márgenes individuales", - "desc": [ - "EdgeInsets.only se utiliza para definir márgenes específicos en los cuatro lados" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding con márgenes direccionales", - "desc": [ - "EdgeInsets.symmetric se utiliza para definir márgenes en las direcciones horizontal y vertical" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_fr_FR.json deleted file mode 100644 index f840c12e4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_fr_FR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "Composant de marge", - "info": "Peut contenir un composant enfant, ajoute une marge intérieure pour limiter l'espace occupé par le composant enfant, la propriété principale est padding.", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding avec marge égale sur les quatre côtés", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【padding】 : Marge intérieure sur les quatre côtés 【EdgeInsetsGeometry】", - "EdgeInsets.all est utilisé pour définir une marge égale sur les quatre côtés" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding avec marge individuelle", - "desc": [ - "EdgeInsets.only est utilisé pour définir une marge individuelle sur les quatre côtés" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding avec marge directionnelle", - "desc": [ - "EdgeInsets.symmetric est utilisé pour définir une marge horizontale et verticale" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_it_IT.json deleted file mode 100644 index 4dc40d3a0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_it_IT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "Componente margine", - "info": "Può contenere un componente figlio, aggiungendo il proprio padding interno per limitare il posizionamento del componente figlio, la proprietà principale è padding.", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding margine uguale su tutti i lati", - "desc": [ - "【child】 : componente figlio 【Widget】", - "【padding】 : margine interno su tutti i lati 【EdgeInsetsGeometry】\"", - "EdgeInsets.all viene utilizzato per definire lo stesso margine su tutti i lati" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding margine singolo", - "desc": [ - "EdgeInsets.only viene utilizzato per definire lo stesso margine su tutti i lati" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding margine direzionale", - "desc": [ - "EdgeInsets.symmetric viene utilizzato per definire i margini orizzontali e verticali" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ja_JP.json deleted file mode 100644 index d4009c668..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ja_JP.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "余白コンポーネント", - "info": "一つの子コンポーネントを収容し、自身の内側の余白を追加して子コンポーネントの占めるスペースを制限します。コア属性はpaddingです。", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding四面等余白", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【padding】 : 内側の四辺の余白 【EdgeInsetsGeometry】", - "EdgeInsets.allは同じ四辺の余白を制限するために使用されます" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding単独余白", - "desc": [ - "EdgeInsets.onlyは同じ四辺の余白を制限するために使用されます" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding方向余白", - "desc": [ - "EdgeInsets.symmetricは水平方向と垂直方向の余白を制限するために使用されます" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ko_KR.json deleted file mode 100644 index bfa917b7f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ko_KR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "여백 컴포넌트", - "info": "하나의 자식 컴포넌트를 수용할 수 있으며, 자체 내부 여백을 추가하여 자식 컴포넌트의 공간을 제한합니다. 핵심 속성은 padding입니다.", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding 사면 동일 여백", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【padding】 : 내부 사면 여백 【EdgeInsetsGeometry】\"", - "EdgeInsets.all은 동일한 사면 여백을 지정하는 데 사용됩니다." - ] - }, - { - "file": "node2_only.dart", - "name": "Padding 개별 여백", - "desc": [ - "EdgeInsets.only는 동일한 사면 여백을 지정하는 데 사용됩니다." - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding 방향 여백", - "desc": [ - "EdgeInsets.symmetric는 수평 및 수직 방향의 여백을 지정하는 데 사용됩니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_pt_PT.json deleted file mode 100644 index 185dc4cf6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_pt_PT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "Componente de Margem", - "info": "Pode acomodar um componente filho, adicionando o seu próprio preenchimento interno para limitar o espaço ocupado pelo componente filho, a propriedade central é o padding.", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding com Margens Iguais em Todos os Lados", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【padding】 : Margens internas 【EdgeInsetsGeometry】\"", - "EdgeInsets.all é usado para definir margens iguais em todos os lados" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding com Margens Individuais", - "desc": [ - "EdgeInsets.only é usado para definir margens específicas" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding com Margens Direcionais", - "desc": [ - "EdgeInsets.symmetric é usado para definir margens horizontais e verticais" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ru_RU.json deleted file mode 100644 index 8cc5d92b3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_ru_RU.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "Компонент отступов", - "info": "Может содержать один дочерний компонент, добавляя собственные внутренние отступы для ограничения места, занимаемого дочерним компонентом. Основное свойство - padding.", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding равные отступы со всех сторон", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】", - "EdgeInsets.all используется для задания одинаковых отступов со всех сторон" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding отдельные отступы", - "desc": [ - "EdgeInsets.only используется для задания одинаковых отступов со всех сторон" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding направленные отступы", - "desc": [ - "EdgeInsets.symmetric используется для задания отступов по горизонтали и вертикали" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_zh-CN.json deleted file mode 100644 index 6c2cb52a2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/desc_zh-CN.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 74, - "name": "Padding", - "localName": "边距组件", - "info": "可容纳一个子组件,添加自身内边距来限制孩子组件的占位,核心属性为padding。", - "lever": 4, - "family": 2, - "linkIds": [ - 1, - 191 - ], - "nodes": [ - { - "file": "node1_all.dart", - "name": "Padding四面等边距", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【padding】 : 内四边距 【EdgeInsetsGeometry】\"", - "EdgeInsets.all用来限定相同的四边边距" - ] - }, - { - "file": "node2_only.dart", - "name": "Padding单独边距边距", - "desc": [ - "EdgeInsets.only用来限定相同的四边边距" - ] - }, - { - "file": "node3_symmetric.dart", - "name": "Padding方向边距", - "desc": [ - "EdgeInsets.symmetric用来限定水平和竖直方向的边距" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node1_all.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node1_all.dart deleted file mode 100644 index ee5f54a7a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node1_all.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/5/3 -/// contact me by email 1981462002@qq.com - -class PaddingAll extends StatelessWidget { - const PaddingAll({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 150, - child: Padding( - padding: const EdgeInsets.all(20), - child: _buildChild(), - ), - ); - } - - Widget _buildChild() => Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 100, - height: 100, - child: const Text("孩子"), - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node2_only.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node2_only.dart deleted file mode 100644 index 2ee74a2c1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node2_only.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/5/3 -/// contact me by email 1981462002@qq.com - -class PaddingOnly extends StatelessWidget { - const PaddingOnly({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 150, - child: Padding( - padding: const EdgeInsets.only(top:10,left: 10), - child: _buildChild(), - ), - ); - } - - Widget _buildChild() => Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 100, - height: 100, - child: const Text("孩子"), - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node3_symmetric.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node3_symmetric.dart deleted file mode 100644 index db66db531..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Padding/node3_symmetric.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/5/3 -/// contact me by email 1981462002@qq.com - -class PaddingSymmetric extends StatelessWidget { - const PaddingSymmetric({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 150, - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 30,horizontal: 10), - child: _buildChild(), - ), - ); - } - - Widget _buildChild() => Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 100, - height: 100, - child: const Text("孩子"), - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_de_DE.json deleted file mode 100644 index 68dd4911e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "Physikalisches Modul", - "info": "Ermöglicht das Zuschneiden von Unterkomponenten in runder oder quadratischer Form und ermöglicht die Angabe von Hintergrundfarbe, Rundung, Schattentiefe, Schattenfarbe und Zuschneideverhalten.", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PhysicalModel", - "desc": [ - "【clipBehavior】: Zuschneideverhalten 【Clip】", - "【borderRadius】: Rundung 【BorderRadius】", - "【child】: Unterkomponente 【Widget】", - "【elevation】: Schattentiefe 【double】", - "【shadowColor】: Schattenfarbe 【Color】", - "【shape】: Form 【BoxShape】", - "【color】: Farbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_en_US.json deleted file mode 100644 index b9351db83..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "Physical Module", - "info": "Allows child components to be clipped according to circles and squares, and can specify background color, rounded corners, shadow depth, shadow color, and clipping behavior.", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PhysicalModel", - "desc": [ - "【clipBehavior】: Clipping Behavior 【Clip】", - "【borderRadius】: Rounded Corners 【BorderRadius】", - "【child】: Child Component 【Widget】", - "【elevation】: Shadow Depth 【double】", - "【shadowColor】: Shadow Color 【Color】", - "【shape】: Shape 【BoxShape】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_es_ES.json deleted file mode 100644 index e00162d5e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "Módulo Físico", - "info": "Permite recortar los componentes secundarios en forma circular o cuadrada, y se puede especificar el color de fondo, el radio de las esquinas, la profundidad de la sombra, el color de la sombra y el comportamiento de recorte.", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PhysicalModel", - "desc": [ - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【borderRadius】 : Radio de las esquinas 【BorderRadius】", - "【child】 : Componente secundario 【Widget】", - "【elevation】 : Profundidad de la sombra 【double】", - "【shadowColor】 : Color de la sombra 【Color】", - "【shape】 : Forma 【BoxShape】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_fr_FR.json deleted file mode 100644 index 43674cf5d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "Module Physique", - "info": "Permet de découper les composants enfants selon une forme circulaire ou carrée, et de spécifier la couleur de fond, les coins arrondis, la profondeur de l'ombre, la couleur de l'ombre et le comportement de découpe.", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PhysicalModel", - "desc": [ - "【clipBehavior】 : Comportement de découpe 【Clip】", - "【borderRadius】 : Coins arrondis 【BorderRadius】", - "【child】 : Composant enfant 【Widget】", - "【elevation】 : Profondeur de l'ombre 【double】", - "【shadowColor】 : Couleur de l'ombre 【Color】", - "【shape】 : Forme 【BoxShape】", - "【color】: Couleur 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_it_IT.json deleted file mode 100644 index 971304862..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "Modulo Fisico", - "info": "Permette di ritagliare i componenti figli in base a forme circolari o quadrate, e di specificare il colore di sfondo, gli angoli arrotondati, la profondità dell'ombra, il colore dell'ombra e il comportamento di ritaglio.", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di PhysicalModel", - "desc": [ - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【borderRadius】 : Angoli arrotondati 【BorderRadius】", - "【child】 : Componente figlio 【Widget】", - "【elevation】 : Profondità dell'ombra 【double】", - "【shadowColor】 : Colore dell'ombra 【Color】", - "【shape】 : Forma 【BoxShape】", - "【color】: Colore 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ja_JP.json deleted file mode 100644 index 82ad3a43e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "物理モジュール", - "info": "子コンポーネントを円形や四角形でクリップし、背景色、角丸、影の深さ、影の色、クリップ動作を指定することができます。", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PhysicalModelの基本的な使用", - "desc": [ - "【clipBehavior】 : クリップ動作 【Clip】", - "【borderRadius】 : 角丸 【BorderRadius】", - "【child】 : 子コンポーネント 【Widget】", - "【elevation】 : 影の深さ 【double】", - "【shadowColor】 : 影の色 【Color】", - "【shape】 : 形状 【BoxShape】", - "【color】: 色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ko_KR.json deleted file mode 100644 index 8d153b759..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "물리 모듈", - "info": "자식 위젯을 원형 또는 사각형으로 자를 수 있으며, 배경색, 모서리 반경, 그림자 깊이, 그림자 색상, 클리핑 동작을 지정할 수 있습니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PhysicalModel 기본 사용", - "desc": [ - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【borderRadius】 : 모서리 반경 【BorderRadius】", - "【child】 : 자식 위젯 【Widget】", - "【elevation】 : 그림자 깊이 【double】", - "【shadowColor】 : 그림자 색상 【Color】", - "【shape】 : 모양 【BoxShape】", - "【color】: 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_pt_PT.json deleted file mode 100644 index 2ee84c80f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "Módulo Físico", - "info": "Permite que os subcomponentes sejam cortados de acordo com formas circulares ou quadradas, e pode especificar a cor de fundo, cantos arredondados, profundidade da sombra, cor da sombra e comportamento de corte.", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do PhysicalModel", - "desc": [ - "【clipBehavior】 : Comportamento de corte 【Clip】", - "【borderRadius】 : Cantos arredondados 【BorderRadius】", - "【child】 : Subcomponente 【Widget】", - "【elevation】 : Profundidade da sombra 【double】", - "【shadowColor】 : Cor da sombra 【Color】", - "【shape】 : Forma 【BoxShape】", - "【color】: Cor 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ru_RU.json deleted file mode 100644 index 2c6f69f07..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "Физический модуль", - "info": "Позволяет обрезать дочерние компоненты по кругу или квадрату, а также можно указать цвет фона, радиус скругления, глубину тени, цвет тени и поведение обрезки.", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PhysicalModel", - "desc": [ - "【clipBehavior】 : Поведение обрезки 【Clip】", - "【borderRadius】 : Радиус скругления 【BorderRadius】", - "【child】 : Дочерний компонент 【Widget】", - "【elevation】 : Глубина тени 【double】", - "【shadowColor】 : Цвет тени 【Color】", - "【shape】 : Форма 【BoxShape】", - "【color】: Цвет 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_zh-CN.json deleted file mode 100644 index 1b02584c8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 296, - "name": "PhysicalModel", - "localName": "物理模块", - "info": "可以让子组件按照圆形、方行进行剪裁,并且可以指定背景色、圆角、影深、阴影颜色、剪切行为。", - "lever": 3, - "family": 2, - "linkIds": [ - 279, - 69 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PhysicalModel基本使用", - "desc": [ - "【clipBehavior】 : 裁剪行为 【Clip】", - "【borderRadius】 : 圆角 【BorderRadius】", - "【child】 : 子组件 【Widget】", - "【elevation】 : 阴影深 【double】", - "【shadowColor】 : 阴影颜色 【Color】", - "【shape】 : 形状 【BoxShape】", - "【color】: 颜色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/node1_base.dart deleted file mode 100644 index 716ec9ff4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalModel/node1_base.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class PhysicalModelDemo extends StatelessWidget{ - const PhysicalModelDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - SizedBox( - width: 150, - height: 150, - child: PhysicalModel( - shadowColor: Colors.orange, - elevation: 3, - child: Image.asset( - 'assets/images/caver.webp', - fit: BoxFit.cover, - ), - clipBehavior: Clip.hardEdge, - shape: BoxShape.circle, - color: Colors.deepPurpleAccent), - ), - - SizedBox( - width: 150, - height: 150, - child: PhysicalModel( - shadowColor: Colors.orange, - elevation: 3, - child: Image.asset( - 'assets/images/caver.webp', - fit: BoxFit.cover, - ), - borderRadius: const BorderRadius.all(Radius.circular(20)), - clipBehavior: Clip.hardEdge, - shape: BoxShape.rectangle, - color: Colors.deepPurpleAccent), - ), - ], - ); - } - -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_de_DE.json deleted file mode 100644 index 73eed0969..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "Physikalische Form", - "info": "Ermöglicht es den Unterkomponenten, entlang eines Pfads beschnitten zu werden, und ermöglicht die Angabe von Hintergrundfarbe, Schattentiefe, Schattenfarbe und Schneidverhalten.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PhysicalShape", - "desc": [ - "【clipper】 : Clipper 【CustomClipper】", - "【clipBehavior】 : Schneidverhalten 【Clip】", - "【child】 : Unterkomponente 【Widget】", - "【elevation】 : Schattentiefe 【double】", - "【shadowColor】 : Schattenfarbe 【Color】", - "【color】: Farbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_en_US.json deleted file mode 100644 index 4ea4b73e4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "Physical Shape", - "info": "Allows child components to be clipped according to the path, and can specify background color, shadow depth, shadow color, and clipping behavior.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PhysicalShape", - "desc": [ - "【clipper】: Clipper 【CustomClipper】", - "【clipBehavior】: Clipping Behavior 【Clip】", - "【child】: Child Component 【Widget】", - "【elevation】: Shadow Depth 【double】", - "【shadowColor】: Shadow Color 【Color】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_es_ES.json deleted file mode 100644 index dcf2db89d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "Forma Física", - "info": "Permite que los componentes hijos se recorten según una ruta, y se puede especificar el color de fondo, la profundidad de la sombra, el color de la sombra y el comportamiento de recorte.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PhysicalShape", - "desc": [ - "【clipper】: Recortador 【CustomClipper】", - "【clipBehavior】: Comportamiento de recorte 【Clip】", - "【child】: Componente hijo 【Widget】", - "【elevation】: Profundidad de la sombra 【double】", - "【shadowColor】: Color de la sombra 【Color】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_fr_FR.json deleted file mode 100644 index 5eb0c9f1e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "Forme physique", - "info": "Permet de découper les composants enfants selon un chemin, et permet de spécifier la couleur de fond, la profondeur de l'ombre, la couleur de l'ombre et le comportement de découpage.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PhysicalShape", - "desc": [ - "【clipper】 : coupeur 【CustomClipper】", - "【clipBehavior】 : comportement de découpage 【Clip】", - "【child】 : composant enfant 【Widget】", - "【elevation】 : profondeur de l'ombre 【double】", - "【shadowColor】 : couleur de l'ombre 【Color】", - "【color】: couleur 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_it_IT.json deleted file mode 100644 index 6946db317..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "Forma Fisica", - "info": "Consente ai componenti figli di essere ritagliati secondo un percorso e può specificare il colore di sfondo, la profondità dell'ombra, il colore dell'ombra e il comportamento di ritaglio.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di PhysicalShape", - "desc": [ - "【clipper】 : Ritagliatore 【CustomClipper】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【child】 : Componente figlio 【Widget】", - "【elevation】 : Profondità dell'ombra 【double】", - "【shadowColor】 : Colore dell'ombra 【Color】", - "【color】: Colore 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ja_JP.json deleted file mode 100644 index 73e8f5f19..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "物理形状", - "info": "子コンポーネントをパスに沿ってクリップし、背景色、影の深さ、影の色、クリップ動作を指定できます。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PhysicalShapeの基本使用", - "desc": [ - "【clipper】 : クリッパー 【CustomClipper】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【child】 : 子コンポーネント 【Widget】", - "【elevation】 : 影の深さ 【double】", - "【shadowColor】 : 影の色 【Color】", - "【color】: 色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ko_KR.json deleted file mode 100644 index edbc87f7a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "물리적 모양", - "info": "자식 위젯이 경로에 따라 잘릴 수 있도록 하고, 배경색, 그림자 깊이, 그림자 색상, 클리핑 동작을 지정할 수 있습니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PhysicalShape 기본 사용", - "desc": [ - "【clipper】 : 클리퍼 【CustomClipper】", - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【child】 : 자식 위젯 【Widget】", - "【elevation】 : 그림자 깊이 【double】", - "【shadowColor】 : 그림자 색상 【Color】", - "【color】: 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_pt_PT.json deleted file mode 100644 index 293b4bd00..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "Forma Física", - "info": "Permite que os componentes filhos sejam cortados de acordo com o caminho, e pode especificar a cor de fundo, profundidade da sombra, cor da sombra, comportamento de corte.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do PhysicalShape", - "desc": [ - "【clipper】: Cortador 【CustomClipper】", - "【clipBehavior】: Comportamento de Corte 【Clip】", - "【child】: Componente Filho 【Widget】", - "【elevation】: Profundidade da Sombra 【double】", - "【shadowColor】: Cor da Sombra 【Color】", - "【color】: Cor 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ru_RU.json deleted file mode 100644 index e9ee52388..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "Физическая форма", - "info": "Позволяет обрезать дочерние компоненты по пути, а также можно указать цвет фона, глубину тени, цвет тени и поведение обрезки.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PhysicalShape", - "desc": [ - "【clipper】 : Обрезчик 【CustomClipper】", - "【clipBehavior】 : Поведение обрезки 【Clip】", - "【child】 : Дочерний компонент 【Widget】", - "【elevation】 : Глубина тени 【double】", - "【shadowColor】 : Цвет тени 【Color】", - "【color】: Цвет 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_zh-CN.json deleted file mode 100644 index d09a16837..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 279, - "name": "PhysicalShape", - "localName": "物理形状", - "info": "可以让子组件按照路径进行剪裁,并且可以指定背景色、影深、阴影颜色、剪切行为。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PhysicalShape基本使用", - "desc": [ - "【clipper】 : 裁剪器 【CustomClipper】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【child】 : 子组件 【Widget】", - "【elevation】 : 阴影深 【double】", - "【shadowColor】 : 阴影颜色 【Color】", - "【color】: 颜色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/node1_base.dart deleted file mode 100644 index e2f4e8727..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/PhysicalShape/node1_base.dart +++ /dev/null @@ -1,30 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class PhysicalShapeDemo extends StatelessWidget { - const PhysicalShapeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 200, - height: 200, - child: PhysicalShape( - shadowColor: Colors.orange, - elevation: 3, - child: Image.asset( - 'assets/images/caver.webp', - fit: BoxFit.cover, - ), - clipBehavior: Clip.hardEdge, - clipper: const ShapeBorderClipper( - shape: CircleBorder(side: BorderSide.none), - ), - color: Colors.deepPurpleAccent), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_de_DE.json deleted file mode 100644 index 3f21c3409..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "Neulackgrenze", - "info": "Erstellt eine separate Anzeigeliste für Unterkomponenten, um die Leistung zu verbessern. Im Quellcode wird es in Komponenten wie TextField, DrawerController, Scrollbar, Sliver usw. verwendet.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RepaintBoundary", - "desc": [ - "【child】 : Unterkomponente 【Widget】", - "Zum Beispiel wird in der obigen Zeichenansicht die paint-Methode auch dann kontinuierlich ausgeführt, wenn shouldRepaint false ist. Die Verwendung von RepaintBoundary kann unnötiges Zeichnen vermeiden." - ] - }, - { - "file": "node2_save.dart", - "name": "Speichern eines Widgets als Bild", - "desc": [ - "Mit RenderRepaintBoundary können Bildinformationen der Unterkomponente abgerufen werden, um sie als Bilddatei zu speichern." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_en_US.json deleted file mode 100644 index 420495baa..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "Repaint Boundary", - "info": "Creates a separate display list for child components to improve performance. It is used in components such as TextField, DrawerController, Scrollbar, and Sliver in the source code.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RepaintBoundary", - "desc": [ - "【child】 : Child component 【Widget】", - "For example, in the above drawing view, even if shouldRepaint is false, the paint method will be continuously executed during scrolling. Using RepaintBoundary can avoid unnecessary drawing." - ] - }, - { - "file": "node2_save.dart", - "name": "Save Widget as Image", - "desc": [ - "Through RenderRepaintBoundary, you can obtain the Image information of the child component, and then save the bytes as an image file." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_es_ES.json deleted file mode 100644 index 82831684e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "Límite de repintado", - "info": "Crea una lista de visualización separada para los componentes hijos, mejorando el rendimiento. Se utiliza en componentes como TextField, DrawerController, Scrollbar, Sliver, etc.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RepaintBoundary", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "Por ejemplo, en la vista de dibujo anterior, incluso si shouldRepaint es false, el método paint se ejecutará continuamente durante el desplazamiento. Usar RepaintBoundary puede evitar pinturas innecesarias." - ] - }, - { - "file": "node2_save.dart", - "name": "Guardar Widget como imagen", - "desc": [ - "A través de RenderRepaintBoundary se puede obtener la información de la imagen del componente hijo, y así guardar los bytes como un archivo de imagen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_fr_FR.json deleted file mode 100644 index 838e65f06..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "Limite de Repaint", - "info": "Crée une liste d'affichage séparée pour les composants enfants, améliorant ainsi les performances. Utilisé dans les composants tels que TextField, DrawerController, Scrollbar, Sliver, etc. dans le code source.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RepaintBoundary", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "Par exemple, dans la vue de dessin ci-dessus, même si shouldRepaint est false, la méthode paint sera constamment exécutée lors du défilement. L'utilisation de RepaintBoundary peut éviter les peintures inutiles." - ] - }, - { - "file": "node2_save.dart", - "name": "Sauvegarder un Widget en tant qu'image", - "desc": [ - "Grâce à RenderRepaintBoundary, il est possible d'obtenir les informations d'image du composant enfant, puis de les sauvegarder sous forme de fichier image." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_it_IT.json deleted file mode 100644 index 5ca398003..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "Confine di ridisegno", - "info": "Crea una lista di visualizzazione separata per i componenti figli, migliorando le prestazioni. Nel codice sorgente, viene utilizzato in componenti come TextField, DrawerController, Scrollbar, Sliver, ecc.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di RepaintBoundary", - "desc": [ - "【child】 : componente figlio 【Widget】", - "Ad esempio, nella vista di disegno sopra, anche se shouldRepaint è false, il metodo paint verrà eseguito continuamente durante lo scorrimento. L'uso di RepaintBoundary può evitare ridisegni non necessari." - ] - }, - { - "file": "node2_save.dart", - "name": "Salvare un Widget come immagine", - "desc": [ - "Attraverso RenderRepaintBoundary è possibile ottenere le informazioni sull'immagine del componente figlio, ottenendo così i byte per salvarli come file immagine." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ja_JP.json deleted file mode 100644 index ac0a67214..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "再描画境界", - "info": "子コンポーネントのための別個の表示リストを作成し、パフォーマンスを向上させます。ソースコードではTextField、DrawerController、Scrollbar、Sliverなどのコンポーネントに適用されています", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RepaintBoundaryの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "例えば、上記の描画ビューでは、shouldRepaintがfalseであっても、スクロール中にpaintメソッドが繰り返し実行されます。RepaintBoundaryを使用することで、不要な描画を避けることができます。" - ] - }, - { - "file": "node2_save.dart", - "name": "Widgetを画像として保存", - "desc": [ - "RenderRepaintBoundaryを使用して、子コンポーネントのImage情報を取得し、バイトとして画像ファイルに保存することができます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ko_KR.json deleted file mode 100644 index 79bd059f8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "리페인트 경계", - "info": "자식 위젯을 위한 별도의 디스플레이 리스트를 생성하여 성능을 향상시킵니다. 소스 코드에서 TextField, DrawerController, Scrollbar, Sliver 등 다양한 위젯에 적용되어 있습니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RepaintBoundary 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "예를 들어 위의 그리기 뷰는 shouldRepaint가 false인 경우에도 스크롤 중에 paint 메소드가 계속 실행됩니다. RepaintBoundary를 사용하면 불필요한 그리기를 방지할 수 있습니다." - ] - }, - { - "file": "node2_save.dart", - "name": "위젯을 이미지로 저장", - "desc": [ - "RenderRepaintBoundary를 통해 자식 위젯의 이미지 정보를 얻어 바이트로 저장하여 이미지 파일로 저장할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_pt_PT.json deleted file mode 100644 index 78089c63b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "Limite de Repintura", - "info": "Cria uma lista de exibição separada para componentes filhos, melhorando o desempenho. É utilizado em componentes como TextField, DrawerController, Scrollbar, Sliver, entre outros, no código-fonte.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RepaintBoundary", - "desc": [ - "【child】 : Componente filho 【Widget】", - "Por exemplo, na vista de desenho acima, mesmo que shouldRepaint seja falso, o método paint será executado continuamente durante o deslizamento. Usar RepaintBoundary pode evitar pinturas desnecessárias." - ] - }, - { - "file": "node2_save.dart", - "name": "Salvar Widget como Imagem", - "desc": [ - "Através do RenderRepaintBoundary, é possível obter informações de imagem do componente filho e, assim, salvar os bytes como um arquivo de imagem." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ru_RU.json deleted file mode 100644 index ef65d3e35..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "Граница перерисовки", - "info": "Создает отдельный список отображения для дочерних компонентов, повышая производительность. Используется в компонентах, таких как TextField, DrawerController, Scrollbar, Sliver и других в исходном коде.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RepaintBoundary", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "Например, в приведенном выше примере отображения, даже если shouldRepaint равен false, метод paint будет постоянно выполняться во время прокрутки. Использование RepaintBoundary позволяет избежать ненужной перерисовки." - ] - }, - { - "file": "node2_save.dart", - "name": "Сохранение Widget в виде изображения", - "desc": [ - "С помощью RenderRepaintBoundary можно получить информацию об изображении дочернего компонента и сохранить его в виде файла изображения." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_zh-CN.json deleted file mode 100644 index b2ee37a97..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 264, - "name": "RepaintBoundary", - "localName": "重绘边界", - "info": "为子组件创建一个单独的显示列表,提升性能。源码中在TextField、DrawerController、Scrollbar、Sliver等组件中均有应用", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RepaintBoundary基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "比如上面的绘制视图,即使shouldRepaint为false,在滑动中会也会不断执行paint方法,使用RepaintBoundary可以避免不必要的绘制。" - ] - }, - { - "file": "node2_save.dart", - "name": "保存Widget成为图片", - "desc": [ - "通过RenderRepaintBoundary可以获取子组件的Image信息,从而获取字节保存为图片文件。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/main.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/main.dart deleted file mode 100644 index 13fecd3ad..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/main.dart +++ /dev/null @@ -1,26 +0,0 @@ -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com -/// 说明: - -import 'package:flutter/material.dart'; -import 'node2_save.dart'; - - -void main() => runApp(const MyApp()); - -class MyApp extends StatelessWidget { - const MyApp({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return MaterialApp( - title: 'Flutter Demo', - theme: ThemeData( - primarySwatch: Colors.blue, - ), - home: Scaffold( - appBar: AppBar(), - body: Center(child: RepaintBoundarySave()), - )); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart deleted file mode 100644 index f26bf1f04..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart +++ /dev/null @@ -1,178 +0,0 @@ -import 'dart:ui'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class RepaintBoundaryDemo extends StatelessWidget{ - const RepaintBoundaryDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const RepaintBoundary( - child: TempPlayBezier3Page(), - ); - } -} - -class TempPlayBezier3Page extends StatefulWidget { - const TempPlayBezier3Page({Key? key}) : super(key: key); - - @override - _TempPlayBezier3PageState createState() => _TempPlayBezier3PageState(); -} - -class _TempPlayBezier3PageState extends State { - List _pos = []; - int? selectPos; - - @override - void initState() { - _initPoints(); - super.initState(); - } - - void _initPoints() { - _pos = []; - _pos.add(const Offset(0, 0)); - _pos.add(const Offset(60, -60)); - _pos.add(const Offset(-90, -90)); - _pos.add(const Offset(-120, -40)); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - width: MediaQuery.of(context).size.width, - child: CustomPaint( - painter: TempBezierPainter(pos: _pos, selectPos: selectPos), - ), - ); - } -} - -class TempBezierPainter extends CustomPainter { - late Paint _gridPaint; - late Path _gridPath; - - late Paint _mainPaint; - late Path _mainPath; - int? selectPos; - late Paint _helpPaint; - - List pos; - - TempBezierPainter({this.pos=const [], this.selectPos}) { - _gridPaint = Paint()..style = PaintingStyle.stroke; - _gridPath = Path(); - - _mainPaint = Paint() - ..color = Colors.orange - ..style = PaintingStyle.stroke - ..strokeWidth = 2; - _mainPath = Path(); - - _helpPaint = Paint() - ..color = Colors.purple - ..style = PaintingStyle.stroke - ..strokeWidth = 2 - ..strokeCap = StrokeCap.round; - } - - @override - void paint(Canvas canvas, Size size) { - print('----------Paint-------'); - canvas.clipRect(Offset.zero & size); - canvas.translate(size.width / 2, size.height / 2); - _drawGrid(canvas, size); //绘制格线 - _drawAxis(canvas, size); //绘制轴线 - - _mainPath.moveTo(pos[0].dx, pos[0].dy); - _mainPath.cubicTo( - pos[1].dx, pos[1].dy, pos[2].dx, pos[2].dy, pos[3].dx, pos[3].dy); - canvas.drawPath(_mainPath, _mainPaint); - _drawHelp(canvas); - _drawSelectPos(canvas); - } - - @override - bool shouldRepaint(CustomPainter oldDelegate) => false; - - void _drawGrid(Canvas canvas, Size size) { - _gridPaint - ..color = Colors.grey - ..strokeWidth = 0.5; - _gridPath = _buildGridPath(_gridPath, size); - canvas.drawPath(_buildGridPath(_gridPath, size), _gridPaint); - - canvas.save(); - canvas.scale(1, -1); //沿x轴镜像 - canvas.drawPath(_gridPath, _gridPaint); - canvas.restore(); - - canvas.save(); - canvas.scale(-1, 1); //沿y轴镜像 - canvas.drawPath(_gridPath, _gridPaint); - canvas.restore(); - - canvas.save(); - canvas.scale(-1, -1); //沿原点镜像 - canvas.drawPath(_gridPath, _gridPaint); - canvas.restore(); - } - - void _drawAxis(Canvas canvas, Size size) { - canvas.drawPoints( - PointMode.lines, - [ - Offset(-size.width / 2, 0), - Offset(size.width / 2, 0), - Offset(0, -size.height / 2), - Offset(0, size.height / 2), - Offset(0, size.height / 2), - Offset(0 - 7.0, size.height / 2 - 10), - Offset(0, size.height / 2), - Offset(0 + 7.0, size.height / 2 - 10), - Offset(size.width / 2, 0), - Offset(size.width / 2 - 10, 7), - Offset(size.width / 2, 0), - Offset(size.width / 2 - 10, -7), - ], - _gridPaint - ..color = Colors.blue - ..strokeWidth = 1.5); - } - - Path _buildGridPath(Path path, Size size, {step = 20.0}) { - for (int i = 0; i < size.height / 2 / step; i++) { - path.moveTo(0, step * i); - path.relativeLineTo(size.width / 2, 0); - } - for (int i = 0; i < size.width / 2 / step; i++) { - path.moveTo(step * i, 0); - path.relativeLineTo( - 0, - size.height / 2, - ); - } - return path; - } - - void _drawHelp(Canvas canvas) { - canvas.drawPoints(PointMode.lines, pos, _helpPaint..strokeWidth = 1); - canvas.drawPoints(PointMode.points, pos, _helpPaint..strokeWidth = 8); - } - - void _drawSelectPos(Canvas canvas) { - if (selectPos == null) return; - canvas.drawCircle( - pos[selectPos!], - 10, - _helpPaint - ..color = Colors.green - ..strokeWidth = 2); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/node2_save.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/node2_save.dart deleted file mode 100644 index a235ebd35..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RepaintBoundary/node2_save.dart +++ /dev/null @@ -1,70 +0,0 @@ -import 'dart:io'; -import 'dart:typed_data'; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:path_provider/path_provider.dart'; -import 'dart:ui' as ui; -import 'node1_base.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class RepaintBoundarySave extends StatefulWidget { - - const RepaintBoundarySave({super.key}); - - @override - State createState() => _RepaintBoundarySaveState(); -} - -class _RepaintBoundarySaveState extends State { - final GlobalKey _globalKey = GlobalKey(); - - @override - Widget build(BuildContext context) { - return Stack( - children: [ - RepaintBoundary( - key: _globalKey, - child: const TempPlayBezier3Page(), - ), - Positioned(right: -10, child: _buildButton3(context)) - ], - ); - } - - Widget _buildButton3(context) => MaterialButton( - child: const Icon( - Icons.save_alt, - size: 15, - color: Colors.white, - ), - color: Colors.green, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - onPressed: () async { - Uint8List? bits = await _widget2Image(_globalKey); - Directory dir = await getApplicationSupportDirectory(); - File file = File(dir.path + "/save_img.png"); - if(bits==null) return; - var f = await file.writeAsBytes(bits); - ScaffoldMessenger.of(context).showSnackBar(SnackBar( - backgroundColor: Theme.of(context).primaryColor, - content: Text('保存成功后! 路径为:${f.path}'), - )); - }); - - Future _widget2Image(GlobalKey key) async { - RenderObject? boundary = key.currentContext?.findRenderObject(); - if(boundary==null || boundary is! RenderRepaintBoundary) return null; - - //获得 ui.image - ui.Image img = await boundary.toImage(); - //获取图片字节 - var byteData = await img.toByteData(format: ui.ImageByteFormat.png); - Uint8List? bits = byteData?.buffer.asUint8List(); - return bits; - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_de_DE.json deleted file mode 100644 index 731df6159..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "Drehbox", - "info": "Kann ein Unterelement aufnehmen und es im Uhrzeigersinn um quarterTurns*90° drehen.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RotatedBox", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【quarterTurns】 : Um wie viele 90° gedreht werden soll 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_en_US.json deleted file mode 100644 index 7dcd5cb0c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "Rotated Box", - "info": "Can contain a child widget, rotating it clockwise by quarterTurns*90°.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RotatedBox", - "desc": [ - "【child】 : Child widget 【Widget】", - "【quarterTurns】 : How many 90° to rotate 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_es_ES.json deleted file mode 100644 index 1cb8f9ced..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "Caja Rotada", - "info": "Puede contener un componente hijo, girándolo en sentido horario en quarterTurns*90°.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RotatedBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【quarterTurns】 : Cuántos 90° girar 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_fr_FR.json deleted file mode 100644 index 6088e564e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "Boîte Rotée", - "info": "Peut contenir un composant enfant, le faisant pivoter dans le sens horaire de quarterTurns*90°.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RotatedBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【quarterTurns】 : Nombre de rotations de 90° 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_it_IT.json deleted file mode 100644 index e7323602a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "Scatola Ruotata", - "info": "Può contenere un componente figlio, ruotandolo in senso orario di quarterTurns*90°.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di RotatedBox", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【quarterTurns】 : Quanti 90° ruotare 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ja_JP.json deleted file mode 100644 index 9ab2b2334..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "回転ボックス", - "info": "1つの子コンポーネントを収容し、それを時計回りにquarterTurns*90°回転させます。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RotatedBoxの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【quarterTurns】 : 90°回転する回数 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ko_KR.json deleted file mode 100644 index 7b476c41f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "회전 상자", - "info": "하나의 자식 위젯을 포함할 수 있으며, 시계 방향으로 quarterTurns*90°만큼 회전시킵니다.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RotatedBox 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【quarterTurns】 : 90° 회전 횟수 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_pt_PT.json deleted file mode 100644 index cb67f1bfb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "Caixa Giratória", - "info": "Pode conter um componente filho, girando-o no sentido horário em quarterTurns*90°.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RotatedBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【quarterTurns】 : Quantos 90° para girar 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ru_RU.json deleted file mode 100644 index 7f6465f71..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "Повернутый ящик", - "info": "Может содержать один дочерний компонент, поворачивая его по часовой стрелке на quarterTurns*90°.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RotatedBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【quarterTurns】 : Сколько раз повернуть на 90° 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_zh-CN.json deleted file mode 100644 index 87b81cb2f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 72, - "name": "RotatedBox", - "localName": "旋转盒", - "info": "可容纳一个子组件,将其沿顺时针旋转quarterTurns*90°。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RotatedBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【quarterTurns】 : 旋转多少个90° 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/node1_base.dart deleted file mode 100644 index 622d17f58..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/RotatedBox/node1_base.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomRotatedBox extends StatefulWidget { - const CustomRotatedBox({Key? key}) : super(key: key); - - @override - _CustomRotatedBoxState createState() => _CustomRotatedBoxState(); -} - -class _CustomRotatedBoxState extends State { - int _quarterTurns = 0; - - @override - Widget build(BuildContext context) { - return RotatedBox( - quarterTurns: _quarterTurns, - child: GestureDetector( - onTap: () => setState(() => _quarterTurns++), - child: const Icon( - Icons.android, - size: 60, - color: Colors.blue, - )), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_de_DE.json deleted file mode 100644 index b630b69dd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_de_DE.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "Shader-Maske", - "info": "Kann ein Kind aufnehmen und das Kind durch einen Shader einfärben, wobei der Mischmodus angegeben werden kann. Wird häufig für die Farbverlaufsverarbeitung von Komponenten verwendet.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "Radialer Farbverlauf", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【shaderCallback】 : Shader-Rückruf 【ShaderCallback】", - "【blendMode】 : Mischmodus 【BlendMode】", - " Erstellt einen radialen Farbverlaufsshader durch RadialGradient#createShader." - ] - }, - { - "file": "node2_linear.dart", - "name": "Linearer Farbverlauf", - "desc": [ - "Erstellt einen linearen Farbverlaufsshader durch LinearGradient#createShader", - "Weitere Informationen zu Shadern finden Sie im 【Zeichnungsalbum】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_en_US.json deleted file mode 100644 index bf1fb1abb..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_en_US.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "Shader Mask", - "info": "Can accommodate a child and apply shading to the child through a shader, with the ability to specify blending modes. Commonly used for gradient processing of components.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "Radial Gradient Shading", - "desc": [ - "【child】: Child component 【Widget】", - "【shaderCallback】: Shader callback 【ShaderCallback】", - "【blendMode】: Blending mode 【BlendMode】", - " Create a radial gradient shader through RadialGradient#createShader." - ] - }, - { - "file": "node2_linear.dart", - "name": "Linear Gradient Shading", - "desc": [ - "Create a linear gradient shader through LinearGradient#createShader", - "For more information on shaders, see 【Drawing Album】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_es_ES.json deleted file mode 100644 index 7d568a3ca..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_es_ES.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "Máscara de sombreado", - "info": "Puede contener un hijo y aplicar sombreado al hijo a través de un sombreador, se puede especificar el modo de mezcla. Normalmente se utiliza para el procesamiento de gradientes de color en componentes.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "Sombreado de gradiente radial", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【shaderCallback】 : Callback del sombreador 【ShaderCallback】", - "【blendMode】 : Modo de mezcla 【BlendMode】", - " Crea un sombreador de gradiente radial a través de RadialGradient#createShader." - ] - }, - { - "file": "node2_linear.dart", - "name": "Sombreado de gradiente lineal", - "desc": [ - "Crea un sombreador de gradiente lineal a través de LinearGradient#createShader", - "Para más información sobre sombreadores, consulte el 【Álbum de dibujo】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_fr_FR.json deleted file mode 100644 index 4a4f8f299..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_fr_FR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "Masque de nuance", - "info": "Peut contenir un enfant et appliquer une teinte à l'enfant via un nuanceur, avec la possibilité de spécifier un mode de mélange. Couramment utilisé pour le traitement des dégradés de composants.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "Teinte de dégradé radial", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【shaderCallback】 : Rappel du nuanceur 【ShaderCallback】", - "【blendMode】 : Mode de mélange 【BlendMode】", - " Crée un nuanceur de dégradé radial via RadialGradient#createShader." - ] - }, - { - "file": "node2_linear.dart", - "name": "Teinte de dégradé linéaire", - "desc": [ - "Crée un nuanceur de dégradé linéaire via LinearGradient#createShader", - "Pour plus d'informations sur les nuanceurs, voir 【Album de dessin】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_it_IT.json deleted file mode 100644 index 14396a8ed..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_it_IT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "Maschera Shader", - "info": "Può contenere un figlio e colorare il figlio attraverso uno shader, specificando la modalità di fusione. Solitamente utilizzato per il trattamento della gradazione dei componenti.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "Sfumatura Radiale", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【shaderCallback】 : Callback dello shader 【ShaderCallback】", - "【blendMode】 : Modalità di fusione 【BlendMode】", - " Crea uno shader di sfumatura radiale attraverso RadialGradient#createShader." - ] - }, - { - "file": "node2_linear.dart", - "name": "Sfumatura Lineare", - "desc": [ - "Crea uno shader di sfumatura lineare attraverso LinearGradient#createShader", - "Per ulteriori informazioni sugli shader, consulta 【Album di disegno】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ja_JP.json deleted file mode 100644 index 5e543115f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ja_JP.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "シェーダーマスク", - "info": "1つの子要素を保持し、シェーダーを使用して子要素に色を付けることができます。ブレンドモードを指定できます。通常、コンポーネントのグラデーション処理に使用されます。", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "ラジアルグラデーションシェーダー", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【shaderCallback】 : シェーダーコールバック 【ShaderCallback】", - "【blendMode】 : ブレンドモード 【BlendMode】", - " RadialGradient#createShaderを使用してラジアルグラデーションシェーダーを作成します。" - ] - }, - { - "file": "node2_linear.dart", - "name": "リニアグラデーションシェーダー", - "desc": [ - "LinearGradient#createShaderを使用してリニアグラデーションシェーダーを作成します", - "シェーダーに関する詳細は【描画アルバム】を参照してください" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ko_KR.json deleted file mode 100644 index 093434188..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ko_KR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "셰이더 마스크", - "info": "하나의 자식을 포함할 수 있으며, 셰이더를 통해 자식에 색상을 입힐 수 있습니다. 혼합 모드를 지정할 수 있습니다. 일반적으로 컴포넌트 그라데이션 처리에 사용됩니다.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "방사형 그라데이션 색상", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【shaderCallback】 : 셰이더 콜백 【ShaderCallback】", - "【blendMode】 : 혼합 모드 【BlendMode】", - " RadialGradient#createShader를 통해 방사형 그라데이션 셰이더를 생성합니다." - ] - }, - { - "file": "node2_linear.dart", - "name": "선형 그라데이션 색상", - "desc": [ - "LinearGradient#createShader를 통해 선형 그라데이션 셰이더를 생성합니다", - "셰이더 관련 지식은 【그리기 앨범】을 참조하세요" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_pt_PT.json deleted file mode 100644 index a0bf5dd27..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_pt_PT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "Máscara de Shader", - "info": "Pode conter um filho e colorir o filho através de um shader, podendo especificar o modo de mistura. Geralmente usado para processamento de gradiente de componentes.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "Coloração de Gradiente Radial", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【shaderCallback】 : Callback do shader 【ShaderCallback】", - "【blendMode】 : Modo de mistura 【BlendMode】", - " Cria um shader de gradiente radial através de RadialGradient#createShader." - ] - }, - { - "file": "node2_linear.dart", - "name": "Coloração de Gradiente Linear", - "desc": [ - "Cria um shader de gradiente linear através de LinearGradient#createShader", - "Para mais informações sobre shaders, consulte o 【Álbum de Desenho】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ru_RU.json deleted file mode 100644 index 99c04db0b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_ru_RU.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "Маска шейдера", - "info": "Может содержать один дочерний элемент и применять к нему шейдер, можно указать режим смешивания. Обычно используется для градиентной обработки компонентов.", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "Радиальный градиент", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【shaderCallback】 : Коллбэк шейдера 【ShaderCallback】", - "【blendMode】 : Режим смешивания 【BlendMode】", - " Создание радиального градиентного шейдера через RadialGradient#createShader." - ] - }, - { - "file": "node2_linear.dart", - "name": "Линейный градиент", - "desc": [ - "Создание линейного градиентного шейдера через LinearGradient#createShader", - "Подробнее о шейдерах см. в 【Альбоме рисования】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_zh-CN.json deleted file mode 100644 index 357226820..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/desc_zh-CN.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 277, - "name": "ShaderMask", - "localName": "着色器遮罩", - "info": "可容纳一个孩子,并通过着色器来对孩子进行着色,可指定混色模式。通常用于组件渐变色处理。", - "lever": 4, - "family": 2, - "linkIds": [ - 88, - 38 - ], - "nodes": [ - { - "file": "node1_radial.dart", - "name": "径向渐变着色", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【shaderCallback】 : 着色器回调 【ShaderCallback】", - "【blendMode】 : 混色模式 【BlendMode】", - " 通过RadialGradient#createShader创建径向渐变着色器。" - ] - }, - { - "file": "node2_linear.dart", - "name": "线性渐变着色", - "desc": [ - "通过LinearGradient#createShader创建线性渐变着色器", - "着色器相关知识详见【绘制专辑】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/node1_radial.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/node1_radial.dart deleted file mode 100644 index 7f9bda4c0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/node1_radial.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-12 -/// contact me by email 1981462002@qq.com - -class RadialShaderMask extends StatelessWidget { - const RadialShaderMask({Key? key}) : super(key: key); - - final List colors = const [Colors.red, Colors.yellow, Colors.blue]; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - ShaderMask( - shaderCallback: _buildShader, - child: Image.asset( - 'assets/images/icon_head.webp', - height: 70, - width: 70, - ), - ), - ShaderMask( - shaderCallback: _buildShader, - child: const Text( - '张风捷特烈', - style: TextStyle(fontSize: 40, color: Colors.white), - ), - ), - ShaderMask( - shaderCallback: _buildShader, - child: Container( - height: 100, - color: Colors.white, - width: 50, - ), - ), - ], - ); - } - - - Shader _buildShader(Rect bounds) => RadialGradient( - center: Alignment.topLeft, - radius: 1.0, - tileMode: TileMode.mirror, - colors: colors) - .createShader(bounds); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/node2_linear.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/node2_linear.dart deleted file mode 100644 index 2a96d7b37..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/ShaderMask/node2_linear.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-12 -/// contact me by email 1981462002@qq.com - -class LinearShaderMask extends StatelessWidget { - const LinearShaderMask({Key? key}) : super(key: key); - - final List colors = const [Colors.red, Colors.yellow, Colors.blue]; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - ShaderMask( - shaderCallback: _buildShader, - child: Image.asset( - 'assets/images/icon_head.webp', - height: 70, - width: 70, - ), - ), - ShaderMask( - shaderCallback: _buildShader, - child: const Text( - '张风捷特烈', - style: TextStyle(fontSize: 40, color: Colors.white), - ), - ), - ShaderMask( - shaderCallback: _buildShader, - child: Container( - height: 100, - color: Colors.white, - width: 50, - ), - ), - ], - ); - } - - Shader _buildShader(Rect bounds) => LinearGradient( - begin: Alignment.centerLeft, - end: Alignment.centerRight, - tileMode: TileMode.mirror, - colors: colors) - .createShader(bounds); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_de_DE.json deleted file mode 100644 index 0dcba6cc5..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "Größenänderungsbenachrichtigung", - "info": "Mit SizeChangedLayoutNotifier kann eine Benachrichtigung gesendet werden, nachdem sich der Layoutbereich eines Kindelements ändert. Die Benachrichtigung kann mit NotificationListener überwacht werden.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung", - "desc": [ - "【child】 : Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_en_US.json deleted file mode 100644 index b67b9139e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "Size Change Notification", - "info": "Using SizeChangedLayoutNotifier can send a notification after the layout area of the child component changes. NotificationListener can be used to monitor it.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage", - "desc": [ - "【child】 : Component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_es_ES.json deleted file mode 100644 index 9f4a9aef1..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "Notificador de cambio de tamaño", - "info": "Usando SizeChangedLayoutNotifier, se puede emitir una notificación cuando cambia el área de diseño de un componente hijo. Se puede escuchar usando NotificationListener.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico", - "desc": [ - "【child】 : Componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_fr_FR.json deleted file mode 100644 index 4ba60dba9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "Notification de changement de taille", - "info": "Utiliser SizeChangedLayoutNotifier permet d'émettre une notification lorsque la zone de mise en page d'un composant enfant change. Utilisez NotificationListener pour écouter ces notifications.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base", - "desc": [ - "【child】 : Composant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_it_IT.json deleted file mode 100644 index ef73a668c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "Notifica di Cambio Dimensione", - "info": "Utilizzando SizeChangedLayoutNotifier, è possibile inviare una notifica quando l'area di layout di un componente figlio cambia. È possibile ascoltare questa notifica utilizzando NotificationListener.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di Base", - "desc": [ - "【child】 : Componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ja_JP.json deleted file mode 100644 index 75ee50c0a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "サイズ変更通知", - "info": "SizeChangedLayoutNotifierを使用すると、子コンポーネントのレイアウト領域が変更された後に通知を発行できます。NotificationListenerを使用して監視することができます。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "基本使用", - "desc": [ - "【child】 : コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ko_KR.json deleted file mode 100644 index 77ef19fc2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "크기 변경 알림", - "info": "SizeChangedLayoutNotifier를 사용하면 하위 구성 요소 레이아웃 영역이 변경된 후 알림을 보낼 수 있습니다. NotificationListener를 사용하여 이를 감지할 수 있습니다.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "기본 사용", - "desc": [ - "【child】 : 구성 요소 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_pt_PT.json deleted file mode 100644 index 928126c53..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "Notificador de Mudança de Tamanho", - "info": "Usando o SizeChangedLayoutNotifier, é possível emitir uma notificação após uma mudança na área de layout do componente filho. O NotificationListener pode ser usado para monitorar.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico", - "desc": [ - "【child】 : Componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ru_RU.json deleted file mode 100644 index 5380f36b2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "Уведомление об изменении размера", - "info": "Использование SizeChangedLayoutNotifier позволяет отправлять уведомления после изменения области макета дочернего компонента. Для прослушивания можно использовать NotificationListener.", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование", - "desc": [ - "【child】 : Компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_zh-CN.json deleted file mode 100644 index 8cc2e40ae..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 294, - "name": "SizeChangedLayoutNotifier", - "localName": "尺寸变化通告", - "info": "使用 SizeChangedLayoutNotifier 可以在子组件布局区域发生变化后,发出通知。使用NotificationListener可以进行监听。", - "lever": 2, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "基本使用", - "desc": [ - "【child】 : 组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/node1_base.dart deleted file mode 100644 index 4dd5fe89d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/node1_base.dart +++ /dev/null @@ -1,67 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class SizeChangedLayoutNotifierDemo extends StatefulWidget { - const SizeChangedLayoutNotifierDemo({Key? key}) : super(key: key); - - @override - _SizeChangedLayoutNotifierDemoState createState() => _SizeChangedLayoutNotifierDemoState(); -} - -class _SizeChangedLayoutNotifierDemoState extends State { - @override - Widget build(BuildContext context) { - return NotificationListener( - onNotification: _onNotification, - child: const ChangeableBox(), - ); - } - - bool _onNotification(SizeChangedLayoutNotification notification) { - print('---------SizeChangedLayoutNotification------'); - return false; - } -} - -class ChangeableBox extends StatefulWidget { - const ChangeableBox({Key? key}) : super(key: key); - - @override - _ChangeableBoxState createState() => _ChangeableBoxState(); -} - -class _ChangeableBoxState extends State { - double width = 40; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - SizeChangedLayoutNotifier( - child: Container( - width: width, - height: 100, - color: Colors.blue, - ), - ), - Slider( - max: 200, - min: 20, - divisions: 10, - value: width, - onChanged: _changeWidth, - ) - ], - ); - } - - void _changeWidth(double value) { - setState(() { - width = value; - }); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_de_DE.json deleted file mode 100644 index 5b1876fa2..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "Größenfestgelegte Box", - "info": "Kann ein Kindelement aufnehmen und den Bereich für das Kindelement durch Angabe von Breite und Höhe begrenzen.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SizedBox", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【width】 : Breite 【double】", - "【height】 : Höhe 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_en_US.json deleted file mode 100644 index ff26d6bd7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "SizedBox", - "info": "Can contain a child component, limiting the area of the child component by specifying width and height.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SizedBox", - "desc": [ - "【child】 : Child component 【Widget】", - "【width】 : Width 【double】", - "【height】 : Height 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_es_ES.json deleted file mode 100644 index ced0e87b8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "Caja de tamaño fijo", - "info": "Puede contener un componente hijo, limitando el área del componente hijo especificando el ancho y el alto.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SizedBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【width】 : Ancho 【double】", - "【height】 : Alto 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_fr_FR.json deleted file mode 100644 index 22607dbb7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "Boîte de taille fixe", - "info": "Peut contenir un composant enfant, en spécifiant la largeur et la hauteur pour limiter la zone du composant enfant.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SizedBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【width】 : Largeur 【double】", - "【height】 : Hauteur 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_it_IT.json deleted file mode 100644 index 0fd5d488a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "Scatola di dimensioni fisse", - "info": "Può contenere un componente figlio, limitando l'area del componente figlio specificando larghezza e altezza.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di SizedBox", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【width】 : Larghezza 【double】", - "【height】 : Altezza 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ja_JP.json deleted file mode 100644 index 396c2501a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "サイズ指定ボックス", - "info": "子コンポーネントを収容し、幅と高さを指定して子コンポーネントの領域を制限します。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizedBoxの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【width】 : 幅 【double】", - "【height】 : 高さ 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ko_KR.json deleted file mode 100644 index da76fdd21..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "고정 크기 상자", - "info": "하위 컴포넌트를 수용할 수 있으며, 너비와 높이를 지정하여 하위 컴포넌트의 영역을 제한합니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizedBox 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【width】 : 너비 【double】", - "【height】 : 높이 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_pt_PT.json deleted file mode 100644 index 20ca3e91b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "Caixa de Tamanho Fixo", - "info": "Pode conter um componente filho, limitando a área do componente filho especificando a largura e altura.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SizedBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【width】 : Largura 【double】", - "【height】 : Altura 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ru_RU.json deleted file mode 100644 index e201ebc60..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "Коробка с фиксированным размером", - "info": "Может содержать один дочерний компонент, ограничивая область размещения дочернего компонента указанием ширины и высоты.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SizedBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【width】 : Ширина 【double】", - "【height】 : Высота 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_zh-CN.json deleted file mode 100644 index 825a2c2a4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 76, - "name": "SizedBox", - "localName": "定尺寸盒", - "info": "可容纳一个子组件,通过指定宽高限定子组件容身区域。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizedBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【width】 : 宽 【double】", - "【height】 : 高 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/node1_base.dart deleted file mode 100644 index 3147a97fd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedBox/node1_base.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomSizedBox extends StatelessWidget { - const CustomSizedBox({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Widget child = Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 50, - height: 50, - child: const Text("Static"), - ); - - Widget box = SizedBox( - width: 80, - height: 40, - child: Container( - color: Colors.orange, - child: const Icon( - Icons.android, - color: Colors.white, - )), - ); - - return Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 100, - child: Row( - children: [child, box, child], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_de_DE.json deleted file mode 100644 index 27ce75d03..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "Größenüberlaufbox", - "info": "Kann ein Kindelement aufnehmen, und das Kindelement darf den Bereich des Elternelements überlaufen. Das Kindelement kann durch die size-Eigenschaft verschoben werden und verfügt über die Ausrichtungseigenschaft alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SizedOverflowBox", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【size】 : Größenverschiebung 【Size】", - "【alignment】 : Ausrichtung 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_en_US.json deleted file mode 100644 index 6f3ed70a4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "Sized Overflow Box", - "info": "Can contain a child component, and the child component is allowed to overflow the parent component area. The child component can be offset through the size property, and has the alignment property.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SizedOverflowBox", - "desc": [ - "【child】: Child component 【Widget】", - "【size】: Size offset 【Size】", - "【alignment】: Alignment method 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_es_ES.json deleted file mode 100644 index 774d3627a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "Caja de desbordamiento de tamaño", - "info": "Puede contener un componente hijo, y el componente hijo puede desbordar el área del componente padre. Se puede desplazar el componente hijo mediante la propiedad size y tiene la propiedad de alineación alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SizedOverflowBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【size】 : Desplazamiento de tamaño 【Size】", - "【alignment】 : Método de alineación 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_fr_FR.json deleted file mode 100644 index 38f12409a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "Boîte de débordement dimensionnée", - "info": "Peut contenir un composant enfant, et le composant enfant est autorisé à déborder de la zone du composant parent. Il est possible de décaler le composant enfant à l'aide de la propriété size, et il possède la propriété d'alignement alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SizedOverflowBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【size】 : Décalage de taille 【Size】", - "【alignment】 : Méthode d'alignement 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_it_IT.json deleted file mode 100644 index 2a4ebf9fe..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "Scatola di dimensioni eccessive", - "info": "Può contenere un componente figlio e il componente figlio può fuoriuscire dall'area del componente genitore. È possibile spostare il componente figlio tramite la proprietà size e ha la proprietà di allineamento alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SizedOverflowBox", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【size】 : Spostamento delle dimensioni 【Size】", - "【alignment】 : Modalità di allineamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ja_JP.json deleted file mode 100644 index 872a5e1b9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "サイズオーバーフローボックス", - "info": "子コンポーネントを収容でき、子コンポーネントは親コンポーネントの領域をオーバーフローすることが許可されています。size属性を使用して子コンポーネントをオフセットでき、alignment属性を持っています。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizedOverflowBoxの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【size】 : サイズオフセット 【Size】", - "【alignment】 : アラインメント 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ko_KR.json deleted file mode 100644 index db62b43bc..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "크기 오버플로우 박스", - "info": "하위 컴포넌트를 포함할 수 있으며, 하위 컴포넌트가 상위 컴포넌트 영역을 벗어날 수 있습니다. size 속성을 통해 하위 컴포넌트를 오프셋할 수 있으며, alignment 속성을 가지고 있습니다.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizedOverflowBox 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【size】 : 크기 오프셋 【Size】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_pt_PT.json deleted file mode 100644 index 0edaf0bc8..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "Caixa de Transbordamento Dimensionada", - "info": "Pode conter um componente filho, e o componente filho pode transbordar a área do componente pai. O componente filho pode ser deslocado através da propriedade size, e possui a propriedade de alinhamento alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SizedOverflowBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【size】 : Deslocamento de tamanho 【Size】", - "【alignment】 : Modo de alinhamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ru_RU.json deleted file mode 100644 index ded711d2c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "Размерный переполняющий ящик", - "info": "Может содержать один дочерний компонент, и дочерний компонент может выходить за пределы области родительского компонента. Можно смещать дочерний компонент с помощью свойства size, имеет свойство выравнивания alignment.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SizedOverflowBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【size】 : Смещение размера 【Size】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_zh-CN.json deleted file mode 100644 index e0bb02790..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 84, - "name": "SizedOverflowBox", - "localName": "尺寸溢出盒", - "info": "可容纳一个子组件,且子组件允许溢出父组件区域,可以通过size属性对子组件进行偏移,拥有对齐属性alignment。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizedOverflowBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【size】 : 尺寸偏移 【Size】", - "【alignment】 : 对齐方式 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/node1_base.dart deleted file mode 100644 index 8270a626e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/SizedOverflowBox/node1_base.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomSizedOverflowBox extends StatefulWidget { - const CustomSizedOverflowBox({Key? key}) : super(key: key); - - @override - _CustomSizedOverflowBoxState createState() => _CustomSizedOverflowBoxState(); -} - -class _CustomSizedOverflowBoxState extends State { - double _x = 50; - double _y = 44; - - @override - Widget build(BuildContext context) { - Widget box = SizedOverflowBox( - alignment: Alignment.bottomRight, - size: Size(_x, _y), - child: Container(width: 30, height: 50, color: Colors.orange), - ); - return Column( - children: [ - Container( - alignment: Alignment.topLeft, - color: Colors.grey.withAlpha(88), - width: 250, - height: 60, - child: box), - _buildSlider() - ], - ); - } - - Widget _buildSlider() => - Column( - children: [ - Slider( - divisions: 100, - min: 0, - max: 250, - label: 'x:' + _x.toStringAsFixed(1), - value: _x, - onChanged: (v) => setState(() => _x = v)), - Slider( - divisions: 100, - min: 0, - max: 100, - label: 'y:' + _y.toStringAsFixed(1), - value: _y, - onChanged: (v) => setState(() => _y = v)), - - ], - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_de_DE.json deleted file mode 100644 index fa94071a7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "Klickbereich", - "info": "Komponente, die interne oder externe Klickrückrufe erkennen kann. Durch die groupId können mehrere Bereiche als eine Einheit betrachtet werden.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Interne und externe Klicks überwachen", - "desc": [ - "【enabled】 : Verfügbar 【bool】", - "【onTapOutside】 : Externer Klick-Listener 【TapRegionCallback?】", - "【onTapInside】 : Interner Klick-Listener 【TapRegionCallback?】", - "【groupId】 : Klickbereichsgruppenkennung 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_en_US.json deleted file mode 100644 index bbe560abe..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "Tap Region", - "info": "A component that can detect internal or external click callbacks, and multiple regions can be treated as one through the groupId.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Listen to clicks inside and outside the component", - "desc": [ - "【enabled】 : Whether it is available 【bool】", - "【onTapOutside】 : Listen to clicks outside 【TapRegionCallback?】", - "【onTapInside】 : Listen to clicks inside 【TapRegionCallback?】", - "【groupId】 : Click region group identifier 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_es_ES.json deleted file mode 100644 index 5cf6a1b70..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "Área de toque", - "info": "Componente capaz de detectar devoluciones de llamada de toques internos o externos, mediante groupId varias áreas pueden considerarse como una sola.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Escuchar toques dentro y fuera del componente", - "desc": [ - "【enabled】 : ¿Está disponible? 【bool】", - "【onTapOutside】 : Escucha de toques externos 【TapRegionCallback?】", - "【onTapInside】 : Escucha de toques internos 【TapRegionCallback?】", - "【groupId】 : Identificador del grupo de área de toque 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_fr_FR.json deleted file mode 100644 index ca3ba3fe4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "Zone de clic", - "info": "Un composant capable de détecter les rappels de clic internes ou externes, plusieurs zones peuvent être considérées comme une seule via groupId.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Écouter les clics à l'intérieur et à l'extérieur du composant", - "desc": [ - "【enabled】 : Activé ou non 【bool】", - "【onTapOutside】 : Écouteur de clic externe 【TapRegionCallback?】", - "【onTapInside】 : Écouteur de clic interne 【TapRegionCallback?】", - "【groupId】 : Identifiant du groupe de zone de clic 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_it_IT.json deleted file mode 100644 index 6faac12ca..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "Area di tocco", - "info": "Componente in grado di rilevare i callback di clic interni o esterni, tramite groupId più aree possono essere considerate come una sola.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Ascolta i clic interni ed esterni del componente", - "desc": [ - "【enabled】 : Se è disponibile 【bool】", - "【onTapOutside】 : Ascolta i clic esterni 【TapRegionCallback?】", - "【onTapInside】 : Ascolta i clic interni 【TapRegionCallback?】", - "【groupId】 : Identificatore del gruppo dell'area di tocco 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ja_JP.json deleted file mode 100644 index e071c615b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "タップ範囲", - "info": "内部または外部のタップコールバックを検出できるコンポーネントで、groupId を使用して複数の領域を一体として扱うことができます。", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "コンポーネントの内部と外部のタップを監視", - "desc": [ - "【enabled】 : 有効かどうか 【bool】", - "【onTapOutside】 : 外部タップ監視 【TapRegionCallback?】", - "【onTapInside】 : 内部タップ監視 【TapRegionCallback?】", - "【groupId】 : タップ領域グループ識別子 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ko_KR.json deleted file mode 100644 index 403aeae29..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "탭 영역", - "info": "내부 또는 외부 탭 콜백을 감지할 수 있는 구성 요소로, groupId를 통해 여러 영역을 하나로 간주할 수 있습니다.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "내부 및 외부 탭 구성 요소 감시", - "desc": [ - "【enabled】 : 사용 가능 여부 【bool】", - "【onTapOutside】 : 외부 탭 감시 【TapRegionCallback?】", - "【onTapInside】 : 내부 탭 감시 【TapRegionCallback?】", - "【groupId】 : 탭 영역 그룹 식별자 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_pt_PT.json deleted file mode 100644 index 3402fa25a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "Área de Toque", - "info": "Componente capaz de detectar retornos de chamada de toque interno ou externo, através do groupId várias áreas podem ser consideradas como uma só.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Monitorizar toques internos e externos do componente", - "desc": [ - "【enabled】 : Se está disponível 【bool】", - "【onTapOutside】 : Monitorização de toque externo 【TapRegionCallback?】", - "【onTapInside】 : Monitorização de toque interno 【TapRegionCallback?】", - "【groupId】 : Identificador do grupo de área de toque 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ru_RU.json deleted file mode 100644 index f52b260a0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "Область нажатия", - "info": "Компонент, который может обнаруживать обратные вызовы при нажатии внутри или снаружи, с помощью groupId несколько областей могут рассматриваться как одно целое.", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Прослушивание нажатий внутри и снаружи компонента", - "desc": [ - "【enabled】 : Доступен ли 【bool】", - "【onTapOutside】 : Прослушивание нажатия снаружи 【TapRegionCallback?】", - "【onTapInside】 : Прослушивание нажатия внутри 【TapRegionCallback?】", - "【groupId】 : Идентификатор группы области нажатия 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_zh-CN.json deleted file mode 100644 index 240f2deef..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 280, - "name": "TapRegion", - "localName": "点击范围", - "info": "能够检测内部或外部点击回调的组件,通过 groupId 可以多个区域视为一体。", - "lever": 4, - "family": 2, - "linkIds": [ - 146, - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "监听点击组件内部和外部", - "desc": [ - "【enabled】 : 是否可用 【bool】", - "【onTapOutside】 : 点击外界监听 【TapRegionCallback?】", - "【onTapInside】 : 点击内部监听 【TapRegionCallback?】", - "【groupId】 : 点击区域组标识 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/node1.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/node1.dart deleted file mode 100644 index 57642455b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TapRegion/node1.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/material.dart'; - -class TapRegionDemo1 extends StatefulWidget { - const TapRegionDemo1({super.key}); - - @override - State createState() => _TapRegionDemo1State(); -} - -class _TapRegionDemo1State extends State { - String info = 'Tap any where'; - - @override - Widget build(BuildContext context) { - return TapRegion( - onTapOutside: _onTapOutside, - onTapInside: _onTapInside, - child: Container( - alignment: Alignment.center, - height: 64, - width: 160, - color: isOut ? Colors.grey : Colors.blue, - child: Text( - info, - textAlign: TextAlign.center, - style: const TextStyle(color: Colors.white), - ), - ), - ); - } - - bool get isOut => info.contains('TapOutside'); - - void _onTapOutside(PointerDownEvent event) { - setState(() { - info = "TapOutside:\n${event.position}"; - }); - } - - void _onTapInside(PointerDownEvent event) { - setState(() { - info = "TapInside:\n${event.position}"; - }); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_de_DE.json deleted file mode 100644 index 2a33f0260..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "Eingabefeld-Klickbereich", - "info": "TapRegion mit der groupId EditableText, der den Klickbereich anderer Komponenten als Teil des Eingabefelds behandelt.", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Klicks innerhalb und außerhalb der Komponente überwachen", - "desc": [ - "Im Beispiel wird der Fokus des Eingabefelds nicht aufgehoben, wenn auf das Plus- oder Minuszeichen geklickt wird, und die Tastatur kann weiterhin verwendet werden.", - "【enabled】 : Verfügbar 【bool】", - "【onTapOutside】 : Überwachung von Klicks außerhalb 【TapRegionCallback?】", - "【onTapInside】 : Überwachung von Klicks innerhalb 【TapRegionCallback?】", - "【groupId】 : Gruppenkennung des Klickbereichs 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_en_US.json deleted file mode 100644 index b42d276c6..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "TextField Tap Region", - "info": "The TapRegion with groupId as EditableText allows the clickable area of other components to be considered as one with the input field.", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Monitor Clicks Inside and Outside the Component", - "desc": [ - "In the example, clicking the plus and minus signs does not cancel the focus of the input field, and the keyboard can still be used for input.", - "【enabled】 : Whether it is available 【bool】", - "【onTapOutside】 : External click listener 【TapRegionCallback?】", - "【onTapInside】 : Internal click listener 【TapRegionCallback?】", - "【groupId】 : Clickable area group identifier 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_es_ES.json deleted file mode 100644 index 88bb35b5c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "Área de clic del campo de texto", - "info": "El TapRegion con groupId como EditableText permite que el área de clic de otros componentes se considere como parte del campo de texto.", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Escuchar clics dentro y fuera del componente", - "desc": [ - "En el ejemplo, al hacer clic en los botones de más y menos, no se cancela el enfoque del campo de texto, y el teclado aún puede escribir.", - "【enabled】 : ¿Está disponible? 【bool】", - "【onTapOutside】 : Escucha de clic fuera 【TapRegionCallback?】", - "【onTapInside】 : Escucha de clic dentro 【TapRegionCallback?】", - "【groupId】 : Identificador del grupo de área de clic 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_fr_FR.json deleted file mode 100644 index db182a21a..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "Zone de clic du champ de saisie", - "info": "Le TapRegion avec groupId pour EditableText permet de considérer la zone de clic d'autres composants comme faisant partie du champ de saisie.", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Écouter les clics à l'intérieur et à l'extérieur du composant", - "desc": [ - "Dans l'exemple, cliquer sur les boutons plus et moins ne supprime pas le focus du champ de saisie, le clavier reste actif pour la saisie.", - "【enabled】 : Actif ou non 【bool】", - "【onTapOutside】 : Écouteur de clic à l'extérieur 【TapRegionCallback?】", - "【onTapInside】 : Écouteur de clic à l'intérieur 【TapRegionCallback?】", - "【groupId】 : Identifiant du groupe de la zone de clic 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_it_IT.json deleted file mode 100644 index e1e9d93e9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "Area di clic del campo di testo", - "info": "Il TapRegion con groupId EditableText consente di considerare l'area di clic di altri componenti come parte integrante del campo di testo.", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Ascolta i clic all'interno e all'esterno del componente", - "desc": [ - "Nell'esempio, cliccando sui pulsanti più e meno, il focus del campo di testo non viene perso e la tastiera rimane attiva per l'input.", - "【enabled】 : Se è abilitato 【bool】", - "【onTapOutside】 : Ascolta i clic all'esterno 【TapRegionCallback?】", - "【onTapInside】 : Ascolta i clic all'interno 【TapRegionCallback?】", - "【groupId】 : Identificatore del gruppo dell'area di clic 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ja_JP.json deleted file mode 100644 index a4ea11251..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "テキストフィールドタップ範囲", - "info": "groupId が EditableText の TapRegion で、他のコンポーネントのタップ範囲をテキストフィールドと一体化させることができます。", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "クリックコンポーネントの内部と外部を監視", - "desc": [ - "ケースでプラスとマイナスをクリックしても、テキストフィールドのフォーカスは解除されず、キーボードで入力が可能です。", - "【enabled】 : 有効かどうか 【bool】", - "【onTapOutside】 : 外部クリック監視 【TapRegionCallback?】", - "【onTapInside】 : 内部クリック監視 【TapRegionCallback?】", - "【groupId】 : タップ領域グループ識別子 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ko_KR.json deleted file mode 100644 index a42cb79e0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "입력란 클릭 범위", - "info": "groupId가 EditableText인 TapRegion으로, 다른 컴포넌트의 클릭 범위를 입력란과 일체로 간주할 수 있습니다.", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "컴포넌트 내부 및 외부 클릭 감지", - "desc": [ - "예시에서 더하기 및 빼기 버튼을 클릭해도 입력란의 포커스가 해제되지 않으며, 키보드로 입력이 가능합니다.", - "【enabled】 : 사용 가능 여부 【bool】", - "【onTapOutside】 : 외부 클릭 감지 【TapRegionCallback?】", - "【onTapInside】 : 내부 클릭 감지 【TapRegionCallback?】", - "【groupId】 : 클릭 영역 그룹 식별자 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_pt_PT.json deleted file mode 100644 index 9561c633d..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "Área de Clique da Caixa de Texto", - "info": "O TapRegion com groupId como EditableText permite que a área de clique de outros componentes seja considerada como parte da caixa de texto.", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Monitorar Cliques Dentro e Fora do Componente", - "desc": [ - "No exemplo, clicar nos botões de adicionar e subtrair não cancela o foco da caixa de texto, e o teclado ainda pode ser usado para digitar.", - "【enabled】 : Disponível ou não 【bool】", - "【onTapOutside】 : Monitoramento de clique fora 【TapRegionCallback?】", - "【onTapInside】 : Monitoramento de clique dentro 【TapRegionCallback?】", - "【groupId】 : Identificador do grupo da área de clique 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ru_RU.json deleted file mode 100644 index aace9a55b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "Область нажатия текстового поля", - "info": "TapRegion с groupId EditableText позволяет рассматривать область нажатия других компонентов как единое целое с текстовым полем.", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Слушатель нажатий внутри и снаружи компонента", - "desc": [ - "В примере нажатие на плюс и минус не снимает фокус с текстового поля, и клавиатура все еще может вводить текст.", - "【enabled】 : Доступно ли 【bool】", - "【onTapOutside】 : Слушатель нажатий снаружи 【TapRegionCallback?】", - "【onTapInside】 : Слушатель нажатий внутри 【TapRegionCallback?】", - "【groupId】 : Идентификатор группы области нажатия 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_zh-CN.json deleted file mode 100644 index 2b4b488fd..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 281, - "name": "TextFieldTapRegion", - "localName": "输入框点击范围", - "info": "groupId 为 EditableText 的 TapRegion,可以让其他组件的点击范围与输入框视为一体。", - "lever": 3, - "family": 2, - "linkIds": [ - 280, - 54, - 245 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "监听点击组件内部和外部", - "desc": [ - "案例中点击加号和减号,不会取消输入框的焦点,键盘仍然可以输入。", - "【enabled】 : 是否可用 【bool】", - "【onTapOutside】 : 点击外界监听 【TapRegionCallback?】", - "【onTapInside】 : 点击内部监听 【TapRegionCallback?】", - "【groupId】 : 点击区域组标识 【Object?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/node1.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/node1.dart deleted file mode 100644 index 7ca7d1c02..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/TextFieldTapRegion/node1.dart +++ /dev/null @@ -1,85 +0,0 @@ -import 'package:flutter/material.dart'; - -class TextFieldTapRegionDemo1 extends StatefulWidget { - const TextFieldTapRegionDemo1({super.key}); - - @override - State createState() => _TextFieldTapRegionDemo1State(); -} - -class _TextFieldTapRegionDemo1State extends State { - TextEditingController controller = TextEditingController(text: '0'); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 160, - child: Row( - children: [ - Expanded(child: _buildInput()), - const SizedBox(width: 8), - TextFieldTapRegion(child: buildButtons()) - ], - ), - ); - } - - Widget _buildInput() { - return TextField( - autofocus: true, - decoration: const InputDecoration( - border: OutlineInputBorder(), - ), - onChanged: _onChange, - controller: controller, - textAlign: TextAlign.center, - ); - } - - void _onChange(String value) {} - - Widget buildButtons() { - ButtonStyle style = circleStyle; - return Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - OutlinedButton( - style: style, - onPressed: _increment, - child: const Icon(Icons.add, size: 16), - ), - const SizedBox(height: 2), - OutlinedButton( - onPressed: _decrement, - style: style, - child: const Icon(Icons.remove, size: 16), - ), - ], - ); - } - - ButtonStyle get circleStyle => OutlinedButton.styleFrom( - shape: const StadiumBorder(), - padding: EdgeInsets.zero, - minimumSize: const Size(32, 32), - maximumSize: const Size(32, 32), - ); - - void _increment() { - int value = int.tryParse(controller.text) ?? 0; - _updateText('${value + 1}', collapsed: true); - } - - void _decrement() { - int value = int.tryParse(controller.text) ?? 0; - _updateText('${value - 1}', collapsed: true); - } - - void _updateText(String text, {bool collapsed = true}) { - if (text != controller.text) { - controller.value = TextEditingValue( - text: text, - ); - } - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_de_DE.json deleted file mode 100644 index 4f6ecf63c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_de_DE.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "Transformation", - "info": "Kann ein Unterelement aufnehmen und kann das Unterelement über eine 4*4-Transformationsmatrix transformieren.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "Schieftransformation skew", - "desc": [ - "Die Schiefe x wird durch die Zahl R0C1 gesteuert, der Eingabeparameter ist ein Bogenmaßwert, der den Schiefewinkel darstellt", - "Die Schiefe y wird durch die Zahl R1C0 gesteuert, der Eingabeparameter ist ein Bogenmaßwert, der den Schiefewinkel darstellt" - ] - }, - { - "file": "node2_translation.dart", - "name": "Verschiebungstransformation translationValues", - "desc": [ - "Die Verschiebung x wird durch die Zahl R0C3 gesteuert, der Eingabeparameter ist ein numerischer Wert, der die Verschiebungslänge darstellt", - "Die Verschiebung y wird durch die Zahl R1C3 gesteuert, der Eingabeparameter ist ein numerischer Wert, der die Verschiebungslänge darstellt", - "Die Verschiebung z wird durch die Zahl R2C3 gesteuert, der Eingabeparameter ist ein numerischer Wert, der die Verschiebungslänge darstellt" - ] - }, - { - "file": "node3_scale.dart", - "name": "Skalierungstransformation diagonal3Values", - "desc": [ - "Die Skalierung x wird durch die Zahl R0C0 gesteuert, der Eingabeparameter ist ein numerischer Wert, der den Skalierungsfaktor darstellt", - "Die Skalierung y wird durch die Zahl R1C2 gesteuert, der Eingabeparameter ist ein numerischer Wert, der den Skalierungsfaktor darstellt", - "Die Skalierung z wird durch die Zahl R2C2 gesteuert, der Eingabeparameter ist ein numerischer Wert, der den Skalierungsfaktor darstellt" - ] - }, - { - "file": "node4_rotate.dart", - "name": "Rotationstransformation rotation", - "desc": [ - "Die x-Rotation wird durch R1C1, R1C2, R2C1, R2C2 gesteuert, der Eingabeparameter stellt ein Bogenmaß dar", - "Die y-Rotation wird durch R0C0, R0C2, R2C0, R2C2 gesteuert, der Eingabeparameter stellt ein Bogenmaß dar", - "Die z-Rotation wird durch R0C0, R0C1, R1C0, R1C1 gesteuert" - ] - }, - { - "file": "node5_perspective.dart", - "name": "Perspektivtransformation rotation", - "desc": [ - "Die Perspektive wird durch R3C1, R3C2, R3C3 gesteuert" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_en_US.json deleted file mode 100644 index 789280b53..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_en_US.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "Transform", - "info": "Can accommodate a child component, and can transform the child component through a 4*4 transformation matrix.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "Skew Transform skew", - "desc": [ - "Skew x is controlled by the R0C1 number, the input is in radians, representing the skew angle", - "Skew y is controlled by the R1C0 number, the input is in radians, representing the skew angle" - ] - }, - { - "file": "node2_translation.dart", - "name": "Translation Transform translationValues", - "desc": [ - "Translation x is controlled by the R0C3 number, the input is a value, representing the translation length", - "Translation y is controlled by the R1C3 number, the input is a value, representing the translation length", - "Translation z is controlled by the R2C3 number, the input is a value, representing the translation length" - ] - }, - { - "file": "node3_scale.dart", - "name": "Scale Transform diagonal3Values", - "desc": [ - "Scale x is controlled by the R0C0 number, the input is a value, representing the scaling factor", - "Scale y is controlled by the R1C2 number, the input is a value, representing the scaling factor", - "Scale z is controlled by the R2C2 number, the input is a value, representing the scaling factor" - ] - }, - { - "file": "node4_rotate.dart", - "name": "Rotation Transform rotation", - "desc": [ - "x rotation is controlled by R1C1, R1C2, R2C1, R2C2, the input represents radians", - "y rotation is controlled by R0C0, R0C2, R2C0, R2C2, the input represents radians", - "z rotation is controlled by R0C0, R0C1, R1C0, R1C1" - ] - }, - { - "file": "node5_perspective.dart", - "name": "Perspective Transform rotation", - "desc": [ - "Perspective is controlled by R3C1, R3C2, R3C3" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_es_ES.json deleted file mode 100644 index 079d402e9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_es_ES.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "Transformación", - "info": "Puede contener un subcomponente, y se puede transformar el subcomponente mediante una matriz de transformación 4*4.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "Transformación de sesgo skew", - "desc": [ - "El sesgo x está controlado por el número R0C1, el parámetro de entrada es un valor en radianes, que representa el ángulo de sesgo.", - "El sesgo y está controlado por el número R1C0, el parámetro de entrada es un valor en radianes, que representa el ángulo de sesgo." - ] - }, - { - "file": "node2_translation.dart", - "name": "Transformación de traslación translationValues", - "desc": [ - "La traslación x está controlada por el número R0C3, el parámetro de entrada es un valor numérico, que representa la longitud de la traslación.", - "La traslación y está controlada por el número R1C3, el parámetro de entrada es un valor numérico, que representa la longitud de la traslación.", - "La traslación z está controlada por el número R2C3, el parámetro de entrada es un valor numérico, que representa la longitud de la traslación." - ] - }, - { - "file": "node3_scale.dart", - "name": "Transformación de escala diagonal3Values", - "desc": [ - "La escala x está controlada por el número R0C0, el parámetro de entrada es un valor numérico, que representa la tasa de escala.", - "La escala y está controlada por el número R1C2, el parámetro de entrada es un valor numérico, que representa la tasa de escala.", - "La escala z está controlada por el número R2C2, el parámetro de entrada es un valor numérico, que representa la tasa de escala." - ] - }, - { - "file": "node4_rotate.dart", - "name": "Transformación de rotación rotation", - "desc": [ - "La rotación x está controlada por R1C1, R1C2, R2C1, R2C2, el parámetro de entrada representa radianes.", - "La rotación y está controlada por R0C0, R0C2, R2C0, R2C2, el parámetro de entrada representa radianes.", - "La rotación z está controlada por R0C0, R0C1, R1C0, R1C1." - ] - }, - { - "file": "node5_perspective.dart", - "name": "Transformación de perspectiva rotation", - "desc": [ - "La perspectiva está controlada por R3C1, R3C2, R3C3." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_fr_FR.json deleted file mode 100644 index 3057ac291..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_fr_FR.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "Transformation", - "info": "Peut contenir un composant enfant, et peut transformer le composant enfant via une matrice de transformation 4*4.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "Transformation en biais skew", - "desc": [ - "Le biais x est contrôlé par le nombre R0C1, l'entrée est une valeur en radians, représentant l'angle de biais", - "Le biais y est contrôlé par le nombre R1C0, l'entrée est une valeur en radians, représentant l'angle de biais" - ] - }, - { - "file": "node2_translation.dart", - "name": "Transformation de translation translationValues", - "desc": [ - "La translation x est contrôlée par le nombre R0C3, l'entrée est une valeur numérique, représentant la longueur de la translation", - "La translation y est contrôlée par le nombre R1C3, l'entrée est une valeur numérique, représentant la longueur de la translation", - "La translation z est contrôlée par le nombre R2C3, l'entrée est une valeur numérique, représentant la longueur de la translation" - ] - }, - { - "file": "node3_scale.dart", - "name": "Transformation de mise à l'échelle diagonal3Values", - "desc": [ - "La mise à l'échelle x est contrôlée par le nombre R0C0, l'entrée est une valeur numérique, représentant le facteur de mise à l'échelle", - "La mise à l'échelle y est contrôlée par le nombre R1C2, l'entrée est une valeur numérique, représentant le facteur de mise à l'échelle", - "La mise à l'échelle z est contrôlée par le nombre R2C2, l'entrée est une valeur numérique, représentant le facteur de mise à l'échelle" - ] - }, - { - "file": "node4_rotate.dart", - "name": "Transformation de rotation rotation", - "desc": [ - "La rotation x est contrôlée par R1C1, R1C2, R2C1, R2C2, l'entrée représente des radians", - "La rotation y est contrôlée par R0C0, R0C2, R2C0, R2C2, l'entrée représente des radians", - "La rotation z est contrôlée par R0C0, R0C1, R1C0, R1C1" - ] - }, - { - "file": "node5_perspective.dart", - "name": "Transformation de perspective rotation", - "desc": [ - "La perspective est contrôlée par R3C1, R3C2, R3C3" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_it_IT.json deleted file mode 100644 index 7c069639c..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_it_IT.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "Trasformazione", - "info": "Può contenere un componente figlio e può trasformare il componente figlio tramite una matrice di trasformazione 4*4.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "Trasformazione inclinata skew", - "desc": [ - "L'inclinazione x è controllata dal numero R0C1, il parametro è un valore in radianti, che rappresenta l'angolo di inclinazione", - "L'inclinazione y è controllata dal numero R1C0, il parametro è un valore in radianti, che rappresenta l'angolo di inclinazione" - ] - }, - { - "file": "node2_translation.dart", - "name": "Trasformazione di traslazione translationValues", - "desc": [ - "La traslazione x è controllata dal numero R0C3, il parametro è un valore numerico, che rappresenta la lunghezza della traslazione", - "La traslazione y è controllata dal numero R1C3, il parametro è un valore numerico, che rappresenta la lunghezza della traslazione", - "La traslazione z è controllata dal numero R2C3, il parametro è un valore numerico, che rappresenta la lunghezza della traslazione" - ] - }, - { - "file": "node3_scale.dart", - "name": "Trasformazione di scala diagonal3Values", - "desc": [ - "La scala x è controllata dal numero R0C0, il parametro è un valore numerico, che rappresenta il fattore di scala", - "La scala y è controllata dal numero R1C2, il parametro è un valore numerico, che rappresenta il fattore di scala", - "La scala z è controllata dal numero R2C2, il parametro è un valore numerico, che rappresenta il fattore di scala" - ] - }, - { - "file": "node4_rotate.dart", - "name": "Trasformazione di rotazione rotation", - "desc": [ - "La rotazione x è controllata da R1C1, R1C2, R2C1, R2C2, il parametro rappresenta i radianti", - "La rotazione y è controllata da R0C0, R0C2, R2C0, R2C2, il parametro rappresenta i radianti", - "La rotazione z è controllata da R0C0, R0C1, R1C0, R1C1" - ] - }, - { - "file": "node5_perspective.dart", - "name": "Trasformazione prospettica rotation", - "desc": [ - "La prospettiva è controllata da R3C1, R3C2, R3C3" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ja_JP.json deleted file mode 100644 index 9b4225857..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ja_JP.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "変換", - "info": "子コンポーネントを収容でき、4*4の変換マトリックスを使用して子コンポーネントを変換できます。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "スキュー変換skew", - "desc": [ - "スキューxはR0C1の数値で制御され、入力はラジアン値で、スキュー角度を表します", - "スキューyはR1C0の数値で制御され、入力はラジアン値で、スキュー角度を表します" - ] - }, - { - "file": "node2_translation.dart", - "name": "平行移動変換translationValues", - "desc": [ - "平行移動xはR0C3の数値で制御され、入力は数値で、平行移動の長さを表します", - "平行移動yはR1C3の数値で制御され、入力は数値で、平行移動の長さを表します", - "平行移動zはR2C3の数値で制御され、入力は数値で、平行移動の長さを表します" - ] - }, - { - "file": "node3_scale.dart", - "name": "スケール変換diagonal3Values", - "desc": [ - "スケールxはR0C0の数値で制御され、入力は数値で、スケールの比率を表します", - "スケールyはR1C2の数値で制御され、入力は数値で、スケールの比率を表します", - "スケールzはR2C2の数値で制御され、入力は数値で、スケールの比率を表します" - ] - }, - { - "file": "node4_rotate.dart", - "name": "回転変換rotation", - "desc": [ - "x回転はR1C1、R1C2、R2C1、R2C2で制御され、入力はラジアンを表します", - "y回転はR0C0、R0C2、R2C0、R2C2で制御され、入力はラジアンを表します", - "z回転はR0C0、R0C1、R1C0、R1C1で制御されます" - ] - }, - { - "file": "node5_perspective.dart", - "name": "遠近法変換rotation", - "desc": [ - "遠近法はR3C1、R3C2、R3C3で制御されます" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ko_KR.json deleted file mode 100644 index efe554675..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ko_KR.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "변환", - "info": "하위 컴포넌트를 수용할 수 있으며, 4*4 변환 행렬을 통해 하위 컴포넌트를 변환할 수 있습니다.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "기울임 변환 skew", - "desc": [ - "x 기울임은 R0C1 숫자로 제어되며, 입력은 라디안 값으로 기울임 각도를 나타냅니다.", - "y 기울임은 R1C0 숫자로 제어되며, 입력은 라디안 값으로 기울임 각도를 나타냅니다." - ] - }, - { - "file": "node2_translation.dart", - "name": "이동 변환 translationValues", - "desc": [ - "x 이동은 R0C3 숫자로 제어되며, 입력은 숫자 값으로 이동 길이를 나타냅니다.", - "y 이동은 R1C3 숫자로 제어되며, 입력은 숫자 값으로 이동 길이를 나타냅니다.", - "z 이동은 R2C3 숫자로 제어되며, 입력은 숫자 값으로 이동 길이를 나타냅니다." - ] - }, - { - "file": "node3_scale.dart", - "name": "크기 조절 변환 diagonal3Values", - "desc": [ - "x 크기 조절은 R0C0 숫자로 제어되며, 입력은 숫자 값으로 크기 비율을 나타냅니다.", - "y 크기 조절은 R1C2 숫자로 제어되며, 입력은 숫자 값으로 크기 비율을 나타냅니다.", - "z 크기 조절은 R2C2 숫자로 제어되며, 입력은 숫자 값으로 크기 비율을 나타냅니다." - ] - }, - { - "file": "node4_rotate.dart", - "name": "회전 변환 rotation", - "desc": [ - "x 회전은 R1C1, R1C2, R2C1, R2C2로 제어되며, 입력은 라디안 값을 나타냅니다.", - "y 회전은 R0C0, R0C2, R2C0, R2C2로 제어되며, 입력은 라디안 값을 나타냅니다.", - "z 회전은 R0C0, R0C1, R1C0, R1C1로 제어됩니다." - ] - }, - { - "file": "node5_perspective.dart", - "name": "원근 변환 rotation", - "desc": [ - "R3C1, R3C2, R3C3로 원근을 제어합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_pt_PT.json deleted file mode 100644 index 368179eb7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_pt_PT.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "Transformação", - "info": "Pode acomodar um subcomponente, pode transformar o subcomponente através de uma matriz de transformação 4*4.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "Transformação de inclinação skew", - "desc": [ - "A inclinação x é controlada pelo número R0C1, o parâmetro de entrada é o valor em radianos, indicando o ângulo de inclinação", - "A inclinação y é controlada pelo número R1C0, o parâmetro de entrada é o valor em radianos, indicando o ângulo de inclinação" - ] - }, - { - "file": "node2_translation.dart", - "name": "Transformação de translação translationValues", - "desc": [ - "A translação x é controlada pelo número R0C3, o parâmetro de entrada é um valor numérico, indicando o comprimento da translação", - "A translação y é controlada pelo número R1C3, o parâmetro de entrada é um valor numérico, indicando o comprimento da translação", - "A translação z é controlada pelo número R2C3, o parâmetro de entrada é um valor numérico, indicando o comprimento da translação" - ] - }, - { - "file": "node3_scale.dart", - "name": "Transformação de escala diagonal3Values", - "desc": [ - "A escala x é controlada pelo número R0C0, o parâmetro de entrada é um valor numérico, indicando a taxa de escala", - "A escala y é controlada pelo número R1C2, o parâmetro de entrada é um valor numérico, indicando a taxa de escala", - "A escala z é controlada pelo número R2C2, o parâmetro de entrada é um valor numérico, indicando a taxa de escala" - ] - }, - { - "file": "node4_rotate.dart", - "name": "Transformação de rotação rotation", - "desc": [ - "A rotação x é controlada por R1C1, R1C2, R2C1, R2C2, o parâmetro de entrada representa radianos", - "A rotação y é controlada por R0C0, R0C2, R2C0, R2C2, o parâmetro de entrada representa radianos", - "A rotação z é controlada por R0C0, R0C1, R1C0, R1C1" - ] - }, - { - "file": "node5_perspective.dart", - "name": "Transformação de perspetiva rotation", - "desc": [ - "A perspetiva é controlada por R3C1, R3C2, R3C3" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ru_RU.json deleted file mode 100644 index a77e34e21..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_ru_RU.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "Преобразование", - "info": "Может содержать один дочерний компонент, который может быть преобразован с использованием матрицы преобразования 4*4.", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "Наклонное преобразование skew", - "desc": [ - "Наклон по x управляется числом R0C1, входной параметр - значение в радианах, обозначающее угол наклона", - "Наклон по y управляется числом R1C0, входной параметр - значение в радианах, обозначающее угол наклона" - ] - }, - { - "file": "node2_translation.dart", - "name": "Преобразование перемещения translationValues", - "desc": [ - "Перемещение по x управляется числом R0C3, входной параметр - числовое значение, обозначающее длину перемещения", - "Перемещение по y управляется числом R1C3, входной параметр - числовое значение, обозначающее длину перемещения", - "Перемещение по z управляется числом R2C3, входной параметр - числовое значение, обозначающее длину перемещения" - ] - }, - { - "file": "node3_scale.dart", - "name": "Преобразование масштабирования diagonal3Values", - "desc": [ - "Масштабирование по x управляется числом R0C0, входной параметр - числовое значение, обозначающее коэффициент масштабирования", - "Масштабирование по y управляется числом R1C2, входной параметр - числовое значение, обозначающее коэффициент масштабирования", - "Масштабирование по z управляется числом R2C2, входной параметр - числовое значение, обозначающее коэффициент масштабирования" - ] - }, - { - "file": "node4_rotate.dart", - "name": "Преобразование вращения rotation", - "desc": [ - "Вращение по x управляется числами R1C1, R1C2, R2C1, R2C2, входной параметр - значение в радианах", - "Вращение по y управляется числами R0C0, R0C2, R2C0, R2C2, входной параметр - значение в радианах", - "Вращение по z управляется числами R0C0, R0C1, R1C0, R1C1" - ] - }, - { - "file": "node5_perspective.dart", - "name": "Преобразование перспективы rotation", - "desc": [ - "Перспектива управляется числами R3C1, R3C2, R3C3" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_zh-CN.json deleted file mode 100644 index 74a4da8c7..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/desc_zh-CN.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 78, - "name": "Transform", - "localName": "变换", - "info": "可容纳一个子组件,可以通过一个4*4的变换矩阵对子组件进行变换。", - "lever": 4, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_skew.dart", - "name": "斜切变换skew", - "desc": [ - "斜切x由R0C1数控制,入参为弧度值,表示斜切角度", - "斜切y由R1C0数控制,入参为弧度值,表示斜切角度" - ] - }, - { - "file": "node2_translation.dart", - "name": "平移变换translationValues", - "desc": [ - "平移x由R0C3数控制,入参为数值,表示平移长度", - "平移y由R1C3数控制,入参为数值,表示平移长度", - "平移z由R2C3数控制,入参为数值,表示平移长度" - ] - }, - { - "file": "node3_scale.dart", - "name": "缩放变换diagonal3Values", - "desc": [ - "缩放x由R0C0数控制,入参为数值,表示缩放分率", - "缩放y由R1C2数控制,入参为数值,表示缩放分率", - "缩放z由R2C2数控制,入参为数值,表示缩放分率" - ] - }, - { - "file": "node4_rotate.dart", - "name": "旋转变换rotation", - "desc": [ - "x旋转由R1C1、R1C2、R2C1、R2C2控制,入参表示弧度", - "y旋转由R0C0、R0C2、R2C0、R2C2控制,入参表示弧度", - "z旋转由R0C0、R0C1、R1C0、R1C1控制," - ] - }, - { - "file": "node5_perspective.dart", - "name": "透视变换rotation", - "desc": [ - "由R3C1、R3C2、R3C3控制透视" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/matrix4_shower.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/matrix4_shower.dart deleted file mode 100644 index f5dbadef0..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/matrix4_shower.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com -/// 说明: - -class Matrix4Shower extends StatelessWidget { - final Matrix4 matrix4; - - const Matrix4Shower(this.matrix4, {Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Text( - '${matrix4.entry(0, 0).toStringAsFixed(1)},${matrix4.entry(0, 1).toStringAsFixed(1)},${matrix4.entry(0, 2).toStringAsFixed(1)},${matrix4.entry(0, 3).toStringAsFixed(1)},\n' - '${matrix4.entry(1, 0).toStringAsFixed(1)},${matrix4.entry(1, 1).toStringAsFixed(1)},${matrix4.entry(1, 2).toStringAsFixed(1)},${matrix4.entry(1, 3).toStringAsFixed(1)},\n' - '${matrix4.entry(2, 0).toStringAsFixed(1)},${matrix4.entry(2, 1).toStringAsFixed(1)},${matrix4.entry(2, 2).toStringAsFixed(1)},${matrix4.entry(2, 3).toStringAsFixed(1)},\n' - '${matrix4.entry(3, 0).toStringAsFixed(1)},${matrix4.entry(3, 1).toStringAsFixed(1)},${matrix4.entry(3, 2).toStringAsFixed(1)},${matrix4.entry(3, 3).toStringAsFixed(1)}', - style: const TextStyle(fontSize: 20, color: Colors.blue), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node1_skew.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node1_skew.dart deleted file mode 100644 index 6fd4a91f4..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node1_skew.dart +++ /dev/null @@ -1,81 +0,0 @@ -import 'dart:math'; -import 'package:flutter/material.dart'; - -import 'matrix4_shower.dart'; - -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class SkewTransform extends StatefulWidget { - const SkewTransform({Key? key}) : super(key: key); - - @override - _SkewTransformState createState() => _SkewTransformState(); -} - -class _SkewTransformState extends State { - late Matrix4 _m4; - double _alpha = 0; - double _beta = 0; - - @override - void initState() { - _m4 = Matrix4.identity(); - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [_buildTransform(), Matrix4Shower(_m4)], - ), - _buildSliders() - ], - ); - } - - Widget _buildTransform() { - _m4 = Matrix4.skew(_alpha, _beta); - return Transform( - transform: _m4, - child: Container( - color: Colors.cyanAccent, - width: 100, - height: 100, - child: Image.asset( - 'assets/images/wy_300x200.webp', - fit: BoxFit.cover, - )), - ); - } - - Widget _buildSliders() => Column( - children: [ - Slider( - min: -pi, - max: pi, - value: _alpha, - divisions: 360, - label: 'alpha:' + (_alpha * 180 / pi).toStringAsFixed(1) + "°", - onChanged: (v) { - setState(() { - _alpha = v; - }); - }), - Slider( - min: -pi, - max: pi, - value: _beta, - divisions: 360, - label: 'beta:' + (_beta * 180 / pi).toStringAsFixed(1) + "°", - onChanged: (v) { - setState(() { - _beta = v; - }); - }) - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node2_translation.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node2_translation.dart deleted file mode 100644 index 0c67ffa13..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node2_translation.dart +++ /dev/null @@ -1,92 +0,0 @@ -import 'package:flutter/material.dart'; - -import 'matrix4_shower.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class TranslationTransform extends StatefulWidget { - const TranslationTransform({Key? key}) : super(key: key); - - @override - _TranslationTransformState createState() => _TranslationTransformState(); -} - -class _TranslationTransformState extends State { - late Matrix4 _m4; - double _x = 0; - double _y = 0; - double _z = 0; - - @override - void initState() { - _m4 = Matrix4.identity(); - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [_buildTransform(), Matrix4Shower(_m4)], - ), - _buildSliders() - ], - ); - } - - Widget _buildTransform() { - _m4 = Matrix4.translationValues(_x, _y, _z); - return Transform( - transform: _m4, - child: Container( - color: Colors.cyanAccent, - width: 100, - height: 100, - child: Image.asset( - 'assets/images/wy_300x200.webp', - fit: BoxFit.cover, - )), - ); - } - - Widget _buildSliders() => Column( - children: [ - Slider( - min: -100, - max: 100, - value: _x, - divisions: 360, - label: 'x:${_x.toStringAsFixed(1)}', - onChanged: (v) { - setState(() { - _x = v; - }); - }), - Slider( - min: -100, - max: 100, - value: _y, - divisions: 360, - label: 'y:${_y.toStringAsFixed(1)}', - onChanged: (v) { - setState(() { - _y = v; - }); - }), - Slider( - min: -100, - max: 100, - value: _z, - divisions: 360, - label: 'z:${_z.toStringAsFixed(1)}', - onChanged: (v) { - setState(() { - _z = v; - }); - }) - ], - ); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node3_scale.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node3_scale.dart deleted file mode 100644 index 9d0e9a0c3..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node3_scale.dart +++ /dev/null @@ -1,91 +0,0 @@ -import 'package:flutter/material.dart'; -import 'matrix4_shower.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class ScaleTransform extends StatefulWidget { - const ScaleTransform({Key? key}) : super(key: key); - - @override - _ScaleTransformState createState() => _ScaleTransformState(); -} - -class _ScaleTransformState extends State { - late Matrix4 _m4; - double _x = 1.0; - double _y = 1.0; - double _z = 1.0; - - @override - void initState() { - _m4 = Matrix4.identity(); - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [_buildTransform(), Matrix4Shower(_m4)], - ), - _buildSliders() - ], - ); - } - - Widget _buildTransform() { - _m4 = Matrix4.diagonal3Values(_x, _y, _z); - return Transform( - transform: _m4, - child: Container( - color: Colors.cyanAccent, - width: 100, - height: 100, - child: Image.asset( - 'assets/images/wy_300x200.webp', - fit: BoxFit.cover, - )), - ); - } - - Widget _buildSliders() => Column( - children: [ - Slider( - min: -2, - max: 2, - value: _x, - divisions: 360, - label: 'x:${_x.toStringAsFixed(1)}', - onChanged: (v) { - setState(() { - _x = v; - }); - }), - Slider( - min: -2, - max: 2, - value: _y, - divisions: 360, - label: 'y:${_y.toStringAsFixed(1)}', - onChanged: (v) { - setState(() { - _y = v; - }); - }), - Slider( - min: -2, - max: 2, - value: _z, - divisions: 360, - label: 'z:${_z.toStringAsFixed(1)}', - onChanged: (v) { - setState(() { - _z = v; - }); - }) - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node4_rotate.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node4_rotate.dart deleted file mode 100644 index 569d2d28b..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node4_rotate.dart +++ /dev/null @@ -1,112 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -import 'matrix4_shower.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class RotateTransform extends StatefulWidget { - const RotateTransform({Key? key}) : super(key: key); - - @override - _RotateTransformState createState() => _RotateTransformState(); -} - -class _RotateTransformState extends State { - late Matrix4 _m4; - double _x = 0; - int _rotateFlag = 1; - - @override - void initState() { - _m4 = Matrix4.identity(); - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [_buildTransform(), Matrix4Shower(_m4)], - ), - _buildSliders() - ], - ); - } - - Widget _buildTransform() { - if (_rotateFlag == 1) { - _m4 = Matrix4.rotationX(_x); - } else if (_rotateFlag == 2) { - _m4 = Matrix4.rotationY(_x); - } else { - _m4 = Matrix4.rotationZ(_x); - } - - return Transform( - transform: _m4, - child: Container( - color: Colors.cyanAccent, - width: 100, - height: 100, - child: Image.asset( - 'assets/images/wy_300x200.webp', - fit: BoxFit.cover, - )), - ); - } - - final Map map = { - 1: 'rotationX', - 2: 'rotationY', - 3: 'rotationZ', - }; - - Widget _buildSliders() => Column( - children: [ - Wrap( - children: map.keys.map((key) => _buildChild(key)).toList(), - ), - Slider( - min: -pi, - max: pi, - value: _x, - divisions: 360, - label: 'x:${_x.toStringAsFixed(1)}', - onChanged: (v) { - setState(() { - _x = v; - }); - }), - ], - ); - - Padding _buildChild(int key) { - return Padding( - padding: const EdgeInsets.all(4.0), - child: FilterChip( - selectedColor: Colors.orange.withAlpha(55), - selectedShadowColor: Colors.blue, - shadowColor: Colors.orangeAccent, - pressElevation: 5, - elevation: 3, - avatar: CircleAvatar(child: Text(key.toString())), - label: Text(map[key]!), - selected: _rotateFlag == key, - onSelected: (bool value) { - print(map[key]); - setState(() { - _x = 0; - if (value) { - _rotateFlag = key; - } - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node5_perspective.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node5_perspective.dart deleted file mode 100644 index 09890b826..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/node5_perspective.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class R3C2 extends StatefulWidget { - const R3C2({Key? key}) : super(key: key); - - @override - _R3C2State createState() => _R3C2State(); -} - -class _R3C2State extends State { - late Matrix4 _m4; - double _value = 0; - double _rad = 0; - - @override - Widget build(BuildContext context) { - _m4 = Matrix4.identity() -// ..setEntry(3, 0, _value) // x -// ..setEntry(3, 1, _value)// y - ..setEntry(3, 2, _value) // z - ..rotateY(_rad) -// ..rotateX(_rad) - ; - return Column( - children: [ - Transform( - transform: _m4, - child: Container( - color: Colors.cyanAccent, - width: 100, - height: 100, - child: Image.asset( - 'assets/images/wy_300x200.webp', - fit: BoxFit.cover, - )), - ), - _buildSliders() - ], - ); - } - - Widget _buildSliders() => Column( - children: [ - Slider( - min: -0.01, - max: 0.01, - value: _value, - divisions: 360, - label: 'x:${_value.toStringAsFixed(5)}', - onChanged: (v) { - setState(() { - _value = v; - }); - }), - Slider( - min: -pi, - max: pi, - value: _rad, - divisions: 360, - label: '角度:' + (_rad * 180 / pi).toStringAsFixed(1) + "°", - onChanged: (v) { - setState(() { - _rad = v; - }); - }), - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/zz_node_op.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/zz_node_op.dart deleted file mode 100644 index 67770279e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/Transform/zz_node_op.dart +++ /dev/null @@ -1,98 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com -/// 说明: - -class CustomTransform extends StatefulWidget { - const CustomTransform({Key? key}) : super(key: key); - - @override - _CustomTransformState createState() => _CustomTransformState(); -} - -class _CustomTransformState extends State { - double angle = 0.0; - List m = [ - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 0.1, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 1.0, - ]; - - @override - Widget build(BuildContext context) { - var transform = Transform( - transform: Matrix4(m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7], m[8], - m[9], m[10], m[11], m[12], m[13], m[14], m[15]), - child: Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 100, - height: 100, - child: Image.asset( - 'assets/images/wy_300x200.webp', - fit: BoxFit.cover, - )), - ); - - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Container( - alignment: Alignment.topLeft, - color: Colors.grey.withAlpha(22), - width: 200, - height: 150, - child: transform, - ), - Text( - '${m[0]},${m[1]},${m[2]},${m[3]},\n' - '${m[4]},${m[5]},${m[6]},${m[7]},\n' - '${m[8]},${m[9]},${m[10]},${m[11]},\n' - '${m[12]},${m[13]},${m[14]},${m[15]}\n', - style: const TextStyle(fontSize: 20), - ) - ], - ), - SizedBox( - width: MediaQuery.of(context).size.width, - height: 200, - child: _buildSliders()) - ], - ); - } - - Widget _buildSliders() => GridView.count( - crossAxisCount: 2, - childAspectRatio: 8, - children: m - .asMap() - .keys - .map((i) => Slider( - value: m[i], - max: 0.01, - min: 0.0, - divisions: 10, - onChanged: (v) { - setState(() { - m[i] = v; - }); - })) - .toList()); -} diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_de_DE.json deleted file mode 100644 index c53fc137f..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "Unbegrenzte Box", - "info": "Kann ein Unterelement aufnehmen und hebt alle Bereichsbeschränkungen dieses Elements auf, um seine eigene Größe zu zeigen.", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von UnconstrainedBox", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【constrainedAxis】 : Noch eingeschränkte Achse*2 【Axis】", - "【alignment】 : Ausrichtung 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_en_US.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_en_US.json deleted file mode 100644 index 0173f7695..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "Unconstrained Box", - "info": "Can contain a child component and remove all area constraints of the component, displaying its own size.", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of UnconstrainedBox", - "desc": [ - "【child】: Child component 【Widget】", - "【constrainedAxis】: Axes still constrained*2 【Axis】", - "【alignment】: Alignment method 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_es_ES.json deleted file mode 100644 index d66a2aa26..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "Caja sin restricciones", - "info": "Puede contener un componente hijo y elimina todas las restricciones de área de ese componente, mostrando su tamaño propio.", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de UnconstrainedBox", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【constrainedAxis】 : Eje aún restringido*2 【Axis】", - "【alignment】 : Modo de alineación 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_fr_FR.json deleted file mode 100644 index 2062709c9..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "Boîte sans contrainte", - "info": "Peut contenir un composant enfant et libère toutes les contraintes de zone de ce composant, montrant sa taille réelle.", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'UnconstrainedBox", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【constrainedAxis】 : Axe toujours contraint*2 【Axis】", - "【alignment】 : Mode d'alignement 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_it_IT.json deleted file mode 100644 index 399a45484..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "Scatola senza vincoli", - "info": "Può contenere un componente figlio e rimuove tutti i vincoli di area di quel componente, mostrando le proprie dimensioni.", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di UnconstrainedBox", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【constrainedAxis】 : Asse ancora vincolato*2 【Axis】", - "【alignment】 : Allineamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ja_JP.json deleted file mode 100644 index 5d6038833..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "無制約ボックス", - "info": "子コンポーネントを収容し、そのコンポーネントのすべての領域制約を解除し、自己サイズを表示します。", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "UnconstrainedBoxの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【constrainedAxis】 : 制約を受ける軸*2 【Axis】", - "【alignment】 : 整列方式 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ko_KR.json deleted file mode 100644 index 334a6f720..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "제약 없는 상자", - "info": "하위 컴포넌트를 수용하고 해당 컴포넌트의 모든 영역 제약을 해제하여 자체 크기를 표시합니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "UnconstrainedBox 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【constrainedAxis】 : 여전히 제약을 받는 축*2 【Axis】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_pt_PT.json deleted file mode 100644 index 37b03da3e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "Caixa sem Restrições", - "info": "Pode conter um componente filho e remove todas as restrições de área desse componente, exibindo o seu próprio tamanho.", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do UnconstrainedBox", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【constrainedAxis】 : Eixo ainda restrito*2 【Axis】", - "【alignment】 : Modo de alinhamento 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ru_RU.json deleted file mode 100644 index b9a740d18..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "Неограниченный контейнер", - "info": "Может содержать один дочерний компонент и снимает все ограничения области для этого компонента, позволяя ему отображать свои собственные размеры.", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование UnconstrainedBox", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【constrainedAxis】 : Ось, которая остается ограниченной*2 【Axis】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_zh-CN.json deleted file mode 100644 index 77714ac35..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 81, - "name": "UnconstrainedBox", - "localName": "无约束盒", - "info": "可容纳一个子组件,并解除该组件的所有区域约束,展现自我尺寸。", - "lever": 3, - "family": 1, - "linkIds": [ - 80 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "UnconstrainedBox基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【constrainedAxis】 : 仍受约束的轴*2 【Axis】", - "【alignment】 : 对齐方式 【AlignmentGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/node1_base.dart b/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/node1_base.dart deleted file mode 100644 index e2d622f1e..000000000 --- a/modules/widget_system/widgets/lib/SingleChildRenderObjectWidget/UnConstrainedBox/node1_base.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-19 -/// contact me by email 1981462002@qq.com - -class CustomUnConstrainedBox extends StatefulWidget { - const CustomUnConstrainedBox({Key? key}) : super(key: key); - - @override - _CustomUnConstrainedBoxState createState() => _CustomUnConstrainedBoxState(); -} - -class _CustomUnConstrainedBoxState extends State { - bool _value = false; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [_buildUnconstrainedBox(), _buildConstrainedAxis()], - ); - } - - Widget _buildUnconstrainedBox() { - Widget child = Container( - color: Colors.cyanAccent, - width: 60, - height: 60, - child: Switch( - value: _value, - onChanged: (v) { - setState(() { - _value = v; - }); - }, - ), - ); - - return Column( - children: [ - Container( - color: Colors.grey.withAlpha(22), - width: 150, - height: 100, - child: _value - ? UnconstrainedBox(alignment: Alignment.center, child: child) - : child, - ), - Text(_value ? "已解除约束" : "子组件受约束") - ], - ); - } - - Widget _buildConstrainedAxis() { - return Column( - children: [ - Container( - color: Colors.grey.withAlpha(22), - width: 150, - height: 100, - child: UnconstrainedBox( - alignment: Alignment.center, - constrainedAxis: Axis.vertical, - child: Container( - color: Colors.cyanAccent, - width: 60, - height: 60, - )), - ), - const Text("竖直方向仍约束") - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_de_DE.json deleted file mode 100644 index f93798a08..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Sliver-Navigationsleiste", - "info": "Navigationsleisten-Effekt in iOS11, der largeTitle beim Ausklappen anzeigt, beim Hochscrollen der Liste jedoch nicht. Wenn middle leer ist, wird der largeTitle in kleiner Schriftgröße als middle angezeigt.", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung der Navigationsleiste", - "desc": [ - "【leading】 : Linke Komponente 【Widget】", - "【middle】 : Mittlere Komponente 【Widget】", - "【trailing】 : Rechte Komponente 【Widget】", - "【largeTitle】 : Untere ausklappbare Komponente 【Widget】", - "【border】 : Randlinie 【Border】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【padding】 : Innenabstand 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_en_US.json deleted file mode 100644 index d639ce44a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Sliver Navigation Bar", - "info": "The navigation bar effect in iOS11, the largeTitle is displayed when expanded, and it is not displayed when the list is scrolled up. If the middle is empty, the largeTitle will be displayed as the middle in a smaller font size.", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Navigation Bar", - "desc": [ - "【leading】: Left component 【Widget】", - "【middle】: Middle component 【Widget】", - "【trailing】: Trailing component 【Widget】", - "【largeTitle】: Bottom expandable component 【Widget】", - "【border】: Border 【Border】", - "【backgroundColor】: Background color 【Color】", - "【padding】: Padding 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_es_ES.json deleted file mode 100644 index 2442c5d6a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Barra de navegación Sliver", - "info": "Efecto de la barra de navegación en iOS11, el largeTitle se muestra cuando se expande, no se muestra cuando la lista se desliza hacia arriba. Si el middle está vacío, el largeTitle se mostrará como middle con un tamaño de fuente pequeño.", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de la barra de navegación", - "desc": [ - "【leading】 : Componente izquierdo 【Widget】", - "【middle】 : Componente central 【Widget】", - "【trailing】 : Componente derecho 【Widget】", - "【largeTitle】 : Componente de expansión inferior 【Widget】", - "【border】 : Borde 【Border】", - "【backgroundColor】 : Color de fondo 【Color】", - "【padding】 : Relleno interno 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_fr_FR.json deleted file mode 100644 index 125aec02d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Barre de navigation Sliver", - "info": "Effet de la barre de navigation dans iOS11, le largeTitle s'affiche lors du déploiement, disparaît lors du défilement vers le haut de la liste. Si le middle est vide, le largeTitle sera affiché en petite taille comme middle.", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de la barre de navigation", - "desc": [ - "【leading】 : Composant de gauche 【Widget】", - "【middle】 : Composant du milieu 【Widget】", - "【trailing】 : Composant de droite 【Widget】", - "【largeTitle】 : Composant de déploiement en bas 【Widget】", - "【border】 : Bordure 【Border】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【padding】 : Marge intérieure 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_it_IT.json deleted file mode 100644 index 07b5f9450..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Barra di navigazione Sliver", - "info": "Effetto della barra di navigazione in iOS11, il largeTitle viene visualizzato quando espanso, non viene visualizzato quando la lista scorre verso l'alto, se il middle è vuoto, il largeTitle verrà visualizzato come middle con un carattere più piccolo.", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base della barra di navigazione", - "desc": [ - "【leading】 : Componente sinistro 【Widget】", - "【middle】 : Componente centrale 【Widget】", - "【trailing】 : Componente finale 【Widget】", - "【largeTitle】 : Componente di espansione inferiore 【Widget】", - "【border】 : Bordo 【Border】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【padding】 : Spaziatura interna 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ja_JP.json deleted file mode 100644 index 1f1abc56b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Sliverナビゲーションバー", - "info": "iOS11のナビゲーションバー効果で、展開時にlargeTitleが表示され、リストを上にスクロールすると表示されなくなります。もしmiddleが空の場合、largeTitleは小さいフォントサイズでmiddleとして表示されます。", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ナビゲーションバーの基本使用", - "desc": [ - "【leading】 : 左側のコンポーネント 【Widget】", - "【middle】 : 中間のコンポーネント 【Widget】", - "【trailing】 : 末尾のコンポーネント 【Widget】", - "【largeTitle】 : 下部折りたたみコンポーネント 【Widget】", - "【border】 : ボーダー 【Border】", - "【backgroundColor】 : 背景色 【Color】", - "【padding】 : 内側の余白 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ko_KR.json deleted file mode 100644 index d0388828f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Sliver 네비게이션 바", - "info": "iOS11에서의 네비게이션 바 효과, 펼칠 때 largeTitle이 표시되며, 리스트를 위로 스크롤하면 표시되지 않습니다. middle이 비어 있으면 largeTitle이 작은 글자 크기로 middle로 표시됩니다.", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "네비게이션 바 기본 사용법", - "desc": [ - "【leading】 : 왼쪽 컴포넌트 【Widget】", - "【middle】 : 중간 컴포넌트 【Widget】", - "【trailing】 : 오른쪽 컴포넌트 【Widget】", - "【largeTitle】 : 하단 확장 컴포넌트 【Widget】", - "【border】 : 테두리 【Border】", - "【backgroundColor】 : 배경색 【Color】", - "【padding】 : 안쪽 여백 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_pt_PT.json deleted file mode 100644 index e363bc47f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Barra de navegação Sliver", - "info": "Efeito da barra de navegação no iOS11, o largeTitle é exibido quando expandido, não é exibido quando a lista é deslizada para cima, se o middle estiver vazio, o largeTitle será exibido como middle com um tamanho de fonte menor.", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico da barra de navegação", - "desc": [ - "【leading】 : Componente esquerdo 【Widget】", - "【middle】 : Componente do meio 【Widget】", - "【trailing】 : Componente da cauda 【Widget】", - "【largeTitle】 : Componente de expansão inferior 【Widget】", - "【border】 : Borda 【Border】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【padding】 : Preenchimento interno 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ru_RU.json deleted file mode 100644 index a51f90df4..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Sliver навигационная панель", - "info": "Эффект навигационной панели в iOS11, largeTitle отображается при раскрытии, не отображается при прокрутке списка вверх. Если middle пуст, largeTitle будет отображаться как middle с меньшим размером шрифта.", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование навигационной панели", - "desc": [ - "【leading】 : Левый компонент 【Widget】", - "【middle】 : Средний компонент 【Widget】", - "【trailing】 : Хвостовой компонент 【Widget】", - "【largeTitle】 : Нижний раскрывающийся компонент 【Widget】", - "【border】 : Граница 【Border】", - "【backgroundColor】 : Цвет фона 【Color】", - "【padding】 : Внутренний отступ 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_zh-CN.json deleted file mode 100644 index 4182f3024..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 302, - "name": "CupertinoSliverNavigationBar", - "localName": "Sliver导航条", - "info": "iOS11中导航条效果,展开时largeTitle显示,列表上滑后不显示,如果middle为空,largeTitle会以小字号作为middle。", - "lever": 2, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "导航条基本使用", - "desc": [ - "【leading】 : 左侧组件 【Widget】", - "【middle】 : 中间组件 【Widget】", - "【trailing】 : 尾部组件 【Widget】", - "【largeTitle】 : 底部折展组件 【Widget】", - "【border】 : 边线 【Border】", - "【backgroundColor】 : 背景色 【Color】", - "【padding】 : 内边距 【EdgeInsetsDirectional】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/node1_base.dart deleted file mode 100644 index 00c448f7f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverNavigationBar/node1_base.dart +++ /dev/null @@ -1,88 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class CupertinoSliverNavigationBarDemo extends StatelessWidget { - const CupertinoSliverNavigationBarDemo({super.key}); - - List get data => [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - CupertinoSliverNavigationBar( - trailing: const Icon( - CupertinoIcons.share, - size: 25, - ), - leading: _buildLeading(), - backgroundColor: Colors.white, - // middle: Text('张风捷特烈'), - largeTitle: Row( - mainAxisSize: MainAxisSize.min, - children: const [ - Icon( - Icons.ac_unit, - size: 20, - ), - Padding( - padding: EdgeInsets.symmetric(horizontal: 8), - child: Text('张风捷特烈'), - ), - Icon(Icons.ac_unit, size: 20), - ], - ), - ), - _buildSliverList() - ], - ), - ); - } - - Widget _buildSliverList() => SliverPrototypeExtentList( - prototypeItem: Container( - height: 40, - ), - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_de_DE.json deleted file mode 100644 index 3e180a103..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Sliver Aktualisierungssteuerung", - "info": "iOS-Stil Pull-to-Refresh-Steuerung, die asynchrone Aktualisierungsmethoden, benutzerdefinierte Steuerungskomponenten, die Höhe des Indikators und die Höhe des Auslösens des Ladens durchziehen kann.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung der Aktualisierungssteuerung", - "desc": [ - "【refreshIndicatorExtent】 : Höhe des Ladeindikators 【double】", - "【refreshTriggerPullDistance】 : Höhe des Auslösens des Ladens durchziehen 【double】", - "【onRefresh】 : Pull-to-Refresh-Ereignis 【RefreshCallback】", - "【builder】 : Indikator-Builder 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_en_US.json deleted file mode 100644 index 759043abf..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Sliver Refresh Controller", - "info": "iOS-style pull-to-refresh controller that can execute asynchronous refresh methods, customize controller components, set the height at which the indicator stays, and the scroll height that triggers loading.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Refresh Controller", - "desc": [ - "【refreshIndicatorExtent】: Height of the loading indicator 【double】", - "【refreshTriggerPullDistance】: Scroll height that triggers loading 【double】", - "【onRefresh】: Pull-down event 【RefreshCallback】", - "【builder】: Indicator builder 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_es_ES.json deleted file mode 100644 index b3bbc36db..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Controlador de actualización Sliver", - "info": "Controlador de actualización de estilo iOS que puede ejecutar métodos de actualización asíncronos, personalizar componentes del controlador, altura de permanencia del indicador y altura de deslizamiento para activar la carga.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico del controlador de actualización", - "desc": [ - "【refreshIndicatorExtent】 : Altura del indicador de carga 【double】", - "【refreshTriggerPullDistance】 : Altura de deslizamiento para activar la carga 【double】", - "【onRefresh】 : Evento de deslizamiento hacia abajo 【RefreshCallback】", - "【builder】 : Constructor del indicador 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_fr_FR.json deleted file mode 100644 index 97e8293dd..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Contrôleur de rafraîchissement Sliver", - "info": "Contrôleur de rafraîchissement de style iOS, capable d'exécuter des méthodes de rafraîchissement asynchrones, de personnaliser les composants du contrôleur, la hauteur de séjour de l'indicateur et la hauteur de glissement pour déclencher le chargement.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base du contrôleur de rafraîchissement", - "desc": [ - "【refreshIndicatorExtent】 : Hauteur de l'indicateur de chargement 【double】", - "【refreshTriggerPullDistance】 : Hauteur de glissement pour déclencher le chargement 【double】", - "【onRefresh】 : Événement de glissement vers le bas 【RefreshCallback】", - "【builder】 : Constructeur de l'indicateur 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_it_IT.json deleted file mode 100644 index 657a18472..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Controller di aggiornamento Sliver", - "info": "Controller di aggiornamento a stile iOS, esegue metodi di aggiornamento asincroni, personalizza i componenti del controller, l'altezza di sosta dell'indicatore e l'altezza di scorrimento per attivare il caricamento.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base del controller di aggiornamento", - "desc": [ - "【refreshIndicatorExtent】 : Altezza dell'indicatore di caricamento 【double】", - "【refreshTriggerPullDistance】 : Altezza di scorrimento per attivare il caricamento 【double】", - "【onRefresh】 : Evento di trascinamento verso il basso 【RefreshCallback】", - "【builder】 : Costruttore dell'indicatore 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ja_JP.json deleted file mode 100644 index 2ef32644f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Sliverリフレッシュコントローラー", - "info": "iOSスタイルのプルダウンリフレッシュコントローラーで、非同期リフレッシュメソッドの実行、カスタムコントローラーコンポーネント、インジケーターの停留高さ、およびロードをトリガーするスワイプ高さを設定できます。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "リフレッシュコントローラーの基本使用", - "desc": [ - "【refreshIndicatorExtent】 : ロード中インジケーターの高さ 【double】", - "【refreshTriggerPullDistance】 : ロードをトリガーするスワイプ高さ 【double】", - "【onRefresh】 : プルダウンイベント 【RefreshCallback】", - "【builder】 : インジケーターコンストラクター 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ko_KR.json deleted file mode 100644 index dc59fef10..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Sliver 새로고침 컨트롤러", - "info": "iOS 스타일의 풀다운 새로고침 컨트롤러로, 비동기 새로고침 메소드 실행, 사용자 정의 컨트롤러 컴포넌트, 인디케이터 고정 높이 및 로딩을 트리거하는 스와이프 높이를 설정할 수 있습니다.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "새로고침 컨트롤러 기본 사용", - "desc": [ - "【refreshIndicatorExtent】 : 로딩 중 인디케이터 높이 【double】", - "【refreshTriggerPullDistance】 : 로딩을 트리거하는 스와이프 높이 【double】", - "【onRefresh】 : 풀다운 이벤트 【RefreshCallback】", - "【builder】 : 인디케이터 빌더 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_pt_PT.json deleted file mode 100644 index dfcb13913..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Controlador de Atualização Sliver", - "info": "Controlador de atualização de deslizar para baixo no estilo iOS, capaz de executar métodos de atualização assíncronos, personalizar componentes do controlador, altura de permanência do indicador e altura de deslize para acionar o carregamento.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Controlador de Atualização", - "desc": [ - "【refreshIndicatorExtent】 : Altura do indicador de carregamento 【double】", - "【refreshTriggerPullDistance】 : Altura de deslize para acionar o carregamento 【double】", - "【onRefresh】 : Evento de deslizar para baixo 【RefreshCallback】", - "【builder】 : Construtor do indicador 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ru_RU.json deleted file mode 100644 index ba7d2b0ee..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Sliver контроллер обновления", - "info": "Контроллер обновления в стиле iOS, который может выполнять асинхронные методы обновления, настраивать компоненты контроллера, высоту остановки индикатора и высоту скольжения для запуска загрузки.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование контроллера обновления", - "desc": [ - "【refreshIndicatorExtent】 : Высота индикатора загрузки 【double】", - "【refreshTriggerPullDistance】 : Высота скольжения для запуска загрузки 【double】", - "【onRefresh】 : Событие прокрутки вниз 【RefreshCallback】", - "【builder】 : Конструктор индикатора 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_zh-CN.json deleted file mode 100644 index c8ba82c01..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 303, - "name": "CupertinoSliverRefreshControl", - "localName": "Sliver刷新控制器", - "info": "iOS风格的下拉刷新控制器,可执行异步刷新方法、自定义控制器组件、指示器停留高度和触发加载的滑动高度。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "刷新控制器基本使用", - "desc": [ - "【refreshIndicatorExtent】 : 加载中指示器高度 【double】", - "【refreshTriggerPullDistance】 : 触发加载的滑动高度 【double】", - "【onRefresh】 : 下拉事件 【RefreshCallback】", - "【builder】 : 指示器构造器 【RefreshControlIndicatorBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/node1_base.dart deleted file mode 100644 index 47975d7c5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CupertinoSliverRefreshControl/node1_base.dart +++ /dev/null @@ -1,120 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class CupertinoSliverRefreshControlDemo extends StatefulWidget { - const CupertinoSliverRefreshControlDemo({Key? key}) : super(key: key); - - @override - _CupertinoSliverRefreshControlDemoState createState() => - _CupertinoSliverRefreshControlDemoState(); -} - -class _CupertinoSliverRefreshControlDemoState - extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - final Random r = Random(); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - physics: const BouncingScrollPhysics( - parent: AlwaysScrollableScrollPhysics()), - slivers: [ - _buildSliverAppBar(), - CupertinoSliverRefreshControl( - refreshIndicatorExtent: 60, - refreshTriggerPullDistance: 80, - onRefresh: _doRefresh, - ), - _buildSliverList() - ], - ), - ); - } - - Widget _buildSliverList() => SliverFixedExtentList( - itemExtent: 50, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 120.0, - leading: Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - Color randomColor() => Color.fromARGB( - r.nextInt(255), r.nextInt(255), r.nextInt(255), r.nextInt(255)); - - Future _doRefresh() async { - await Future.delayed(const Duration(seconds: 2)); - setState(() { - data.insertAll(0, [randomColor()]); - }); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_de_DE.json deleted file mode 100644 index 65808d073..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "Allgemeine Scroll-Ansicht", - "info": "Eine allgemeine Scroll-Struktur, die Eigenschaften wie Scroll-Richtung, ob umgekehrt, Scroll-Controller usw. festlegen kann. Die darin enthaltenen Unterkomponenten müssen zur Sliver-Familie gehören.", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CustomScrollView", - "desc": [ - "【slivers】 : Liste der Unterkomponenten 【List】", - "【reverse】 : Ob umgekehrt 【bool】", - "【scrollDirection】 : Scroll-Richtung 【Axis】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_en_US.json deleted file mode 100644 index 5eb90c191..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "General Scroll View", - "info": "A general scroll structure that can specify properties such as scroll direction, whether to reverse, scroll controller, etc. The child components it contains must be from the Sliver family.", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CustomScrollView", - "desc": [ - "【slivers】 : Child component list 【List】", - "【reverse】 : Whether to reverse 【bool】", - "【scrollDirection】 : Scroll direction 【Axis】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_es_ES.json deleted file mode 100644 index 8544d1758..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "Vista de desplazamiento universal", - "info": "Una estructura de desplazamiento universal que puede especificar la dirección de desplazamiento, si es inverso, el controlador de desplazamiento y otras propiedades. Los componentes secundarios que contiene deben ser de la familia Sliver.", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CustomScrollView", - "desc": [ - "【slivers】 : Lista de componentes secundarios 【List】", - "【reverse】 : Si es inverso 【bool】", - "【scrollDirection】 : Dirección de desplazamiento 【Axis】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_fr_FR.json deleted file mode 100644 index 3491884b8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "Vue de défilement universelle", - "info": "Une structure de défilement universelle qui permet de spécifier la direction du défilement, l'inversion, le contrôleur de défilement, etc. Les composants enfants inclus doivent être de la famille Sliver.", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CustomScrollView", - "desc": [ - "【slivers】 : Liste des composants enfants 【List】", - "【reverse】 : Inversion 【bool】", - "【scrollDirection】 : Direction du défilement 【Axis】", - "【controller】 : Contrôleur 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_it_IT.json deleted file mode 100644 index ef4f3b179..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "Visualizzazione a scorrimento universale", - "info": "Una struttura di scorrimento universale che consente di specificare la direzione di scorrimento, se invertire, il controller di scorrimento e altre proprietà. I componenti figli inclusi devono appartenere alla famiglia Sliver.", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CustomScrollView", - "desc": [ - "【slivers】 : Lista dei componenti figli 【List】", - "【reverse】 : Se invertire 【bool】", - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ja_JP.json deleted file mode 100644 index 610f11f58..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "汎用スクロールビュー", - "info": "汎用的なスクロール構造で、スクロール方向、逆方向かどうか、スクロールコントローラーなどの属性を指定できます。含まれる子コンポーネントはSliverファミリーでなければなりません。", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CustomScrollViewの基本使用", - "desc": [ - "【slivers】 : 子コンポーネントリスト 【List】", - "【reverse】 : 逆方向かどうか 【bool】", - "【scrollDirection】 : スクロール方向 【Axis】", - "【controller】 : コントローラー 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ko_KR.json deleted file mode 100644 index 5ce0e4b48..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "일반 스크롤 뷰", - "info": "일반적인 스크롤 구조로, 스크롤 방향, 역방향 여부, 스크롤 컨트롤러 등의 속성을 지정할 수 있습니다. 포함된 하위 컴포넌트들은 반드시 Sliver 패밀리여야 합니다.", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CustomScrollView 기본 사용법", - "desc": [ - "【slivers】 : 하위 컴포넌트 목록 【List】", - "【reverse】 : 역방향 여부 【bool】", - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【controller】 : 컨트롤러 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_pt_PT.json deleted file mode 100644 index 3195984f3..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "Visão de Rolagem Universal", - "info": "Uma estrutura de rolagem universal que pode especificar a direção de rolagem, se é reversa, o controlador de rolagem e outras propriedades. Os componentes filhos incluídos devem ser da família Sliver.", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CustomScrollView", - "desc": [ - "【slivers】 : Lista de componentes filhos 【List】", - "【reverse】 : Se é reverso 【bool】", - "【scrollDirection】 : Direção de rolagem 【Axis】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ru_RU.json deleted file mode 100644 index 1d1e586bf..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "Универсальная прокрутка", - "info": "Универсальная структура прокрутки, которая позволяет задать направление прокрутки, обратное ли оно, контроллер прокрутки и другие свойства. Вложенные компоненты должны принадлежать семейству Sliver.", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CustomScrollView", - "desc": [ - "【slivers】 : Список дочерних компонентов 【List】", - "【reverse】 : Обратная ли прокрутка 【bool】", - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【controller】 : Контроллер 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_zh-CN.json deleted file mode 100644 index 5bbfabdb4..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 183, - "name": "CustomScrollView", - "localName": "通用滑动视图", - "info": "一个通用的滑动结构,可以指定滑动方向、是否反向、滑动控制器等属性。其中包含的子组件们必须是Sliver家族。", - "lever": 5, - "family": 4, - "linkIds": [ - 184, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CustomScrollView基本使用", - "desc": [ - "【slivers】 : 子组件列表 【List】", - "【reverse】 : 是否反向 【bool】", - "【scrollDirection】 : 滑动方向 【Axis】", - "【controller】 : 控制器 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/CustomScrollView/node1_base.dart deleted file mode 100644 index 9e482f0f2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/CustomScrollView/node1_base.dart +++ /dev/null @@ -1,90 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class CustomScrollViewDemo extends StatelessWidget { - const CustomScrollViewDemo({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - anchor: 0, - scrollDirection: Axis.vertical, - reverse: false, - slivers: [_buildSliverAppBar(), _buildSliverFixedExtentList()], - ), - ); - } - - TextStyle get textStyle => const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]); - - Widget _buildSliverFixedExtentList() => SliverFixedExtentList( - itemExtent: 60, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: data[index], - child: Text( - colorString(data[index]), - style: textStyle, - ), - ), - childCount: data.length), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')), - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - title: const Text( - '张风捷特烈', - style: TextStyle(color: Colors.black, //标题 - shadows: [ - Shadow( - color: Colors.blue, - offset: Offset(1, 1), - blurRadius: 2, - ) - ]), - ), - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_de_DE.json deleted file mode 100644 index c5891b0d6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "Dekorierte Gleitfläche", - "info": "Diese Komponente wird in einem Scroll-Viewport verwendet und kann ein untergeordnetes Sliver-Element umhüllen, um ihm einen Dekorationseffekt hinzuzufügen.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Grundlegende Verwendung von DecoratedSliver", - "desc": [ - "【sliver】 : Kindkomponente 【Widget?】", - "【decoration】 : Dekorationsobjekt 【Decoration】", - "【position】 : Dekorationsposition 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_en_US.json deleted file mode 100644 index 8a4de0b9f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "Decorated Sliver", - "info": "This component is used in sliding viewports and can wrap a child Sliver component to add Decoration effects.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Basic Usage of DecoratedSliver", - "desc": [ - "【sliver】: Child component 【Widget?】", - "【decoration】: Decoration object 【Decoration】", - "【position】: Decoration position 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_es_ES.json deleted file mode 100644 index 78ade3b80..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "Panel deslizante decorado", - "info": "Este componente se aplica en ventanas deslizantes y puede envolver un componente Sliver hijo para agregar efectos de decoración Decoration.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso básico de DecoratedSliver", - "desc": [ - "【sliver】 : Componente hijo 【Widget?】", - "【decoration】 : Objeto de decoración 【Decoration】", - "【position】 : Posición de la decoración 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_fr_FR.json deleted file mode 100644 index 2a9b5860a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "Glissière décorée", - "info": "Ce composant est utilisé dans une vue défilante et peut envelopper un composant Sliver enfant pour ajouter un effet de décoration.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de base de DecoratedSliver", - "desc": [ - "【sliver】 : Composant enfant 【Widget?】", - "【decoration】 : Objet de décoration 【Decoration】", - "【position】 : Position de la décoration 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_it_IT.json deleted file mode 100644 index b9b45c95d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "Decorazione Sliver", - "info": "Questo componente viene utilizzato in una vista scorrevole e può avvolgere un componente Sliver figlio, aggiungendo un effetto decorativo Decoration.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso di base di DecoratedSliver", - "desc": [ - "【sliver】 : Componente figlio 【Widget?】", - "【decoration】 : Oggetto decorativo 【Decoration】", - "【position】 : Posizione della decorazione 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ja_JP.json deleted file mode 100644 index 4bff3278a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "装飾スライバー", - "info": "このコンポーネントはスクロールビューで使用され、子スライバーコンポーネントをラップして、装飾効果を追加します。", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "DecoratedSliver の基本使用", - "desc": [ - "【sliver】 : 子コンポーネント 【Widget?】", - "【decoration】 : 装飾オブジェクト 【Decoration】", - "【position】 : 装飾位置 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ko_KR.json deleted file mode 100644 index 8ea23507a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "장식 슬라이더", - "info": "이 컴포넌트는 슬라이딩 뷰포트에 적용되며, 자식 Sliver 컴포넌트를 감싸서 Decoration 장식 효과를 추가할 수 있습니다.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "DecoratedSliver 기본 사용법", - "desc": [ - "【sliver】 : 자식 컴포넌트 【Widget?】", - "【decoration】 : 장식 객체 【Decoration】", - "【position】 : 장식 위치 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_pt_PT.json deleted file mode 100644 index d55a26683..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "Slider Decorado", - "info": "Este componente é aplicado em portas de visualização deslizantes, pode envolver um componente Sliver filho, adicionando um efeito de decoração Decoration.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso Básico do DecoratedSliver", - "desc": [ - "【sliver】 : Componente filho 【Widget?】", - "【decoration】 : Objeto de decoração 【Decoration】", - "【position】 : Posição da decoração 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ru_RU.json deleted file mode 100644 index 633b7d756..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "Декорированный слайдер", - "info": "Этот компонент используется в прокручиваемых окнах и может обернуть дочерний компонент Sliver, добавляя эффекты декорации Decoration.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Основное использование DecoratedSliver", - "desc": [ - "【sliver】 : Дочерний компонент 【Widget?】", - "【decoration】 : Объект декорации 【Decoration】", - "【position】 : Позиция декорации 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_zh-CN.json deleted file mode 100644 index ea9dfa29c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 209, - "name": "DecoratedSliver", - "localName": "装饰滑片", - "info": "该组件应用于滑动视口中,可以包裹一个子 Sliver 组件,为其添加 Decoration 装饰效果。", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "DecoratedSliver 基本使用", - "desc": [ - "【sliver】 : 孩子组件 【Widget?】", - "【decoration】 : 装饰对象 【Decoration】", - "【position】 : 装饰位置 【DecorationPosition】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/node1.dart b/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/node1.dart deleted file mode 100644 index 85379eae6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/DecoratedSliver/node1.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/8/18 -/// contact me by email 1981462002@qq.com - -class DecorationSliverDemo extends StatelessWidget { - const DecorationSliverDemo({super.key}); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - SliverPadding( - padding: const EdgeInsets.all(8), - sliver: DecoratedSliver( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(20), - boxShadow: const [ - BoxShadow( - color: Color(0xFF111133), - blurRadius: 2, - offset: Offset(-2, -1)) - ], - gradient: LinearGradient( - colors: const [ - Color(0xFFEEEEEE), - Color(0xFF111133), - ], - stops: const [0.1, 1.0], - ), - ), - sliver: SliverList( - delegate: SliverChildBuilderDelegate( - (_, index) => Padding( - padding: const EdgeInsets.all(8.0), - child: Center( - child: Text( - '张风捷特烈-$index', - style: TextStyle(fontSize: 24, color: Colors.white), - )), - ), - childCount: 128), - ), - ), - ), - ], - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_de_DE.json deleted file mode 100644 index 36a9e492c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "Dehnbarer Raumleiste", - "info": "Wird normalerweise im dehnbaren Bereich von SliverAppBar verwendet und kann Titel, Titelabstand, Hintergrund, Faltmodus usw. angeben.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von FlexibleSpaceBar", - "desc": [ - "【title】 : Titelkomponente 【Widget】", - "【titlePadding】 : Titelabstand 【EdgeInsetsGeometry】", - "【collapseMode】 : Faltmodus 【CollapseMode】", - "【stretchModes】 : Dehnmodi 【List】", - "【background】 : Hintergrundkomponente 【Widget】", - "【centerTitle】 : Zentralisiert 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_en_US.json deleted file mode 100644 index fee8b71a2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "Stretch Space Bar", - "info": "Typically used in the stretchable area of SliverAppBar, it can specify the title, title spacing, background, collapse mode, etc.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of FlexibleSpaceBar", - "desc": [ - "【title】 : Title component 【Widget】", - "【titlePadding】 : Title spacing 【EdgeInsetsGeometry】", - "【collapseMode】 : Collapse mode 【CollapseMode】", - "【stretchModes】 : Stretch modes 【List】", - "【background】 : Background component 【Widget】", - "【centerTitle】 : Whether to center 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_es_ES.json deleted file mode 100644 index 04bd8a77a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "Barra de espacio flexible", - "info": "Normalmente se utiliza en la región extensible de SliverAppBar, donde se pueden especificar el título, el espaciado del título, el fondo, el modo de plegado, etc.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de FlexibleSpaceBar", - "desc": [ - "【title】 : Componente de título 【Widget】", - "【titlePadding】 : Espaciado del título 【EdgeInsetsGeometry】", - "【collapseMode】 : Modo de plegado 【CollapseMode】", - "【stretchModes】 : Modos de extensión 【List】", - "【background】 : Componente de fondo 【Widget】", - "【centerTitle】 : Centrado o no 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_fr_FR.json deleted file mode 100644 index 7af61bbff..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "Barre d'espace flexible", - "info": "Utilisé généralement dans la zone extensible de SliverAppBar, permet de spécifier le titre, l'espacement du titre, l'arrière-plan, le mode de repli, etc.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de FlexibleSpaceBar", - "desc": [ - "【title】 : Composant de titre 【Widget】", - "【titlePadding】 : Espacement du titre 【EdgeInsetsGeometry】", - "【collapseMode】 : Mode de repli 【CollapseMode】", - "【stretchModes】 : Modes d'extension 【List】", - "【background】 : Composant d'arrière-plan 【Widget】", - "【centerTitle】 : Centré ou non 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_it_IT.json deleted file mode 100644 index 0fbf71be0..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "Barra spaziale flessibile", - "info": "Utilizzata solitamente nell'area estensibile di SliverAppBar, può specificare titolo, spaziatura del titolo, sfondo, modalità di collasso, ecc.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di FlexibleSpaceBar", - "desc": [ - "【title】 : Componente del titolo 【Widget】", - "【titlePadding】 : Spaziatura del titolo 【EdgeInsetsGeometry】", - "【collapseMode】 : Modalità di collasso 【CollapseMode】", - "【stretchModes】 : Modalità di estensione 【List】", - "【background】 : Componente di sfondo 【Widget】", - "【centerTitle】 : Centrato o meno 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ja_JP.json deleted file mode 100644 index b0b59ec16..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "伸縮スペースバー", - "info": "通常、SliverAppBar内の伸縮可能な領域に使用され、タイトル、タイトルの間隔、背景、折りたたみモードなどを指定できます。", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlexibleSpaceBarの基本使用", - "desc": [ - "【title】 : タイトルコンポーネント 【Widget】", - "【titlePadding】 : タイトルの間隔 【EdgeInsetsGeometry】", - "【collapseMode】 : 折りたたみモード 【CollapseMode】", - "【stretchModes】 : 伸縮モード 【List】", - "【background】 : 背景コンポーネント 【Widget】", - "【centerTitle】 : 中央揃えかどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ko_KR.json deleted file mode 100644 index 503086182..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "확장 가능한 공간 바", - "info": "일반적으로 SliverAppBar에서 확장 가능한 영역으로 사용되며, 제목, 제목 간격, 배경, 접기 모드 등을 지정할 수 있습니다.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlexibleSpaceBar 기본 사용법", - "desc": [ - "【title】 : 제목 컴포넌트 【Widget】", - "【titlePadding】 : 제목 간격 【EdgeInsetsGeometry】", - "【collapseMode】 : 접기 모드 【CollapseMode】", - "【stretchModes】 : 확장 모드 【List】", - "【background】 : 배경 컴포넌트 【Widget】", - "【centerTitle】 : 중앙 정렬 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_pt_PT.json deleted file mode 100644 index 16985132b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "Barra de Espaço Flexível", - "info": "Normalmente usado na área expansível de um SliverAppBar, pode especificar o título, espaçamento do título, fundo, modo de recolhimento, etc.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do FlexibleSpaceBar", - "desc": [ - "【title】 : Componente do título 【Widget】", - "【titlePadding】 : Espaçamento do título 【EdgeInsetsGeometry】", - "【collapseMode】 : Modo de recolhimento 【CollapseMode】", - "【stretchModes】 : Modos de extensão 【List】", - "【background】 : Componente de fundo 【Widget】", - "【centerTitle】 : Centralizar 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ru_RU.json deleted file mode 100644 index a0a1a9fef..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "Растягивающееся пространство", - "info": "Обычно используется в растягиваемой области SliverAppBar, можно указать заголовок, отступы заголовка, фон, режим сворачивания и т.д.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование FlexibleSpaceBar", - "desc": [ - "【title】 : Заголовок 【Widget】", - "【titlePadding】 : Отступ заголовка 【EdgeInsetsGeometry】", - "【collapseMode】 : Режим сворачивания 【CollapseMode】", - "【stretchModes】 : Режимы растяжения 【List】", - "【background】 : Фон 【Widget】", - "【centerTitle】 : Центрировать заголовок 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_zh-CN.json deleted file mode 100644 index af842005c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 196, - "name": "FlexibleSpaceBar", - "localName": "伸展空间栏", - "info": "通常用于SliverAppBar中的可伸展区域,可指定标题、标题间距、背景、折叠模式等。", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlexibleSpaceBar基本使用", - "desc": [ - "【title】 : 标题组件 【Widget】", - "【titlePadding】 : 标题间距 【EdgeInsetsGeometry】", - "【collapseMode】 : 折叠模式 【CollapseMode】", - "【stretchModes】 : 延伸模式 【List】", - "【background】 : 背景组件 【Widget】", - "【centerTitle】 : 是否居中 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/node1_base.dart deleted file mode 100644 index ba132525e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/FlexibleSpaceBar/node1_base.dart +++ /dev/null @@ -1,98 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - - -class FlexibleSpaceBarDemo extends StatelessWidget { - const FlexibleSpaceBarDemo({super.key}); - - List get data => [ - Colors.blue[50]!, - Colors.blue[100]!, - Colors.blue[200]!, - Colors.blue[300]!, - Colors.blue[400]!, - Colors.blue[500]!, - Colors.blue[600]!, - Colors.blue[700]!, - Colors.blue[800]!, - Colors.blue[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [_buildSliverAppBar(), _buildSliverFixedExtentList()], - ), - ); - } - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - actions: _buildActions(), - pinned: true, - backgroundColor: Colors.blue, - flexibleSpace: FlexibleSpaceBar(//伸展处布局 - centerTitle: false, - title: const Text( - '张风捷特烈', - style: TextStyle(shadows: [ - Shadow(color: Colors.blue, offset: Offset(1, 1), blurRadius: 2) - ]), - ), - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), - //标题边距 - collapseMode: CollapseMode.parallax, - //视差效果 - stretchModes: const [StretchMode.blurBackground, StretchMode.zoomBackground], - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - Widget _buildSliverFixedExtentList() => SliverFixedExtentList( - itemExtent: 60, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_de_DE.json deleted file mode 100644 index a7a8130b2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_de_DE.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "Fixierter Header-Sliver", - "info": "Ein Sliver, der am oberen Rand des Viewports verbleiben kann und den Effekt des Festklebens einfach erreicht.", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "PinnedHeaderSliver offizielles Beispiel", - "display": "new_page", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget?】", - "PinnedHeaderSliver kann nur in Scroll-Viewports verwendet werden, wobei die untergeordnete Komponente beim Scrollen nach oben nicht aus dem Viewport verschwindet, sondern am oberen Rand des Viewports verbleibt." - ] - }, - { - "file": "node_02.dart", - "name": "Titel festkleben", - "display": "new_page", - "desc": [ - "Ein auf PinnedHeaderSliver basierender Effekt, bei dem der Titel festklebt. Beachten Sie, dass auch die Trennlinie unten den Effekt des Festklebens hat." - ] - }, - { - "file": "node_03.dart", - "name": "Titel+Suche festkleben", - "display": "new_page", - "desc": [ - "Ein auf PinnedHeaderSliver basierender Effekt, bei dem der Titel und das Suchfeld festkleben." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_en_US.json deleted file mode 100644 index cd8ac1f4a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_en_US.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "Pinned Header Sliver", - "info": "A sliver that can stay at the top of the viewport, easily achieving a sticky header effect.", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "PinnedHeaderSliver Official Example", - "display": "new_page", - "desc": [ - "【child】 : Child widget 【Widget?】", - "PinnedHeaderSliver can only be used in a scroll viewport, where the child widget will not move out of the viewport when scrolling to the top, thus staying above the viewport." - ] - }, - { - "file": "node_02.dart", - "name": "Sticky Header", - "display": "new_page", - "desc": [ - "The sticky header effect implemented based on PinnedHeaderSliver, note that the divider below also has a sticky effect." - ] - }, - { - "file": "node_03.dart", - "name": "Sticky Header + Search", - "display": "new_page", - "desc": [ - "The sticky header + search box effect implemented based on PinnedHeaderSliver." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_es_ES.json deleted file mode 100644 index 520a0506a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_es_ES.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "Cabecera Fija Deslizante", - "info": "Un panel deslizante que puede permanecer en la parte superior de la ventana gráfica, logrando fácilmente el efecto de fijación en la parte superior.", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Ejemplo oficial de PinnedHeaderSliver", - "display": "new_page", - "desc": [ - "【child】 : Componente hijo 【Widget?】", - "PinnedHeaderSliver solo se puede usar en ventanas gráficas desplazables, donde el componente hijo no sale de la ventana gráfica cuando se desliza hacia la parte superior, permaneciendo así en la parte superior de la ventana gráfica." - ] - }, - { - "file": "node_02.dart", - "name": "Título fijado en la parte superior", - "display": "new_page", - "desc": [ - "Efecto de título fijado en la parte superior basado en PinnedHeaderSliver, observe que la línea divisoria inferior también tiene el efecto de fijación en la parte superior." - ] - }, - { - "file": "node_03.dart", - "name": "Título + Búsqueda fijada en la parte superior", - "display": "new_page", - "desc": [ - "Efecto de título + cuadro de búsqueda fijado en la parte superior basado en PinnedHeaderSliver." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_fr_FR.json deleted file mode 100644 index 0e1a5c816..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_fr_FR.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "Glissière d'en-tête fixe", - "info": "Une glissière qui peut rester en haut de la vue, permettant de réaliser facilement un effet de fixation en haut.", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Exemple officiel de PinnedHeaderSliver", - "display": "new_page", - "desc": [ - "【child】 : Composant enfant 【Widget?】", - "PinnedHeaderSliver ne peut être utilisé que dans une vue défilante, où le composant enfant ne sort pas de la vue lorsqu'il est glissé vers le haut, restant ainsi en haut de la vue." - ] - }, - { - "file": "node_02.dart", - "name": "Titre fixé en haut", - "display": "new_page", - "desc": [ - "Effet de titre fixé en haut basé sur PinnedHeaderSliver, notez que la ligne de séparation en dessous a également un effet de fixation en haut." - ] - }, - { - "file": "node_03.dart", - "name": "Titre + recherche fixés en haut", - "display": "new_page", - "desc": [ - "Effet de titre + boîte de recherche fixés en haut basé sur PinnedHeaderSliver." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_it_IT.json deleted file mode 100644 index 29a97b670..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_it_IT.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "Sliver con intestazione fissa", - "info": "Uno sliver che può rimanere nella parte superiore della viewport, per ottenere facilmente l'effetto di adesione in cima.", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Esempio ufficiale di PinnedHeaderSliver", - "display": "new_page", - "desc": [ - "【child】 : Componente figlio 【Widget?】", - "PinnedHeaderSliver può essere utilizzato solo in una viewport scorrevole, dove il componente figlio, quando scorre verso l'alto, non esce dalla viewport, rimanendo così nella parte superiore della viewport." - ] - }, - { - "file": "node_02.dart", - "name": "Intestazione adesiva", - "display": "new_page", - "desc": [ - "Effetto di intestazione adesiva realizzato con PinnedHeaderSliver, nota che anche la linea di separazione sotto ha un effetto adesivo." - ] - }, - { - "file": "node_03.dart", - "name": "Intestazione + ricerca adesiva", - "display": "new_page", - "desc": [ - "Effetto di intestazione e casella di ricerca adesiva realizzato con PinnedHeaderSliver." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ja_JP.json deleted file mode 100644 index dd19b43d7..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ja_JP.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "固定ヘッダースライバー", - "info": "ビューポート上部に留まるスライバーで、簡単に吸着効果を実現できます。", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "PinnedHeaderSliver 公式サンプル", - "display": "new_page", - "desc": [ - "【child】 : 子コンポーネント 【Widget?】", - "PinnedHeaderSliver はスクロールビューポートでのみ使用でき、子コンポーネントはトップにスクロールしてもビューポートから出ず、ビューポート上部に留まります。" - ] - }, - { - "file": "node_02.dart", - "name": "タイトル吸着", - "display": "new_page", - "desc": [ - "PinnedHeaderSliver に基づいて実装されたタイトル吸着効果です。下の分割線にも吸着効果があることに注意してください。" - ] - }, - { - "file": "node_03.dart", - "name": "タイトル+検索吸着", - "display": "new_page", - "desc": [ - "PinnedHeaderSliver に基づいて実装されたタイトル+検索ボックスの吸着効果です。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ko_KR.json deleted file mode 100644 index 2b05b0221..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ko_KR.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "고정 헤더 슬라이버", - "info": "뷰포트 상단에 고정될 수 있는 슬라이버로, 쉽게 상단 고정 효과를 구현할 수 있습니다.", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "PinnedHeaderSliver 공식 예제", - "display": "new_page", - "desc": [ - "【child】 : 자식 위젯 【Widget?】", - "PinnedHeaderSliver는 스크롤 뷰포트에서만 사용할 수 있으며, 자식 위젯이 상단으로 스크롤될 때 뷰포트에서 벗어나지 않고 상단에 고정됩니다." - ] - }, - { - "file": "node_02.dart", - "name": "제목 상단 고정", - "display": "new_page", - "desc": [ - "PinnedHeaderSliver를 기반으로 구현한 제목 상단 고정 효과, 아래 구분선도 상단 고정 효과가 적용된 것을 확인할 수 있습니다." - ] - }, - { - "file": "node_03.dart", - "name": "제목+검색 상단 고정", - "display": "new_page", - "desc": [ - "PinnedHeaderSliver를 기반으로 구현한 제목과 검색창의 상단 고정 효과." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_pt_PT.json deleted file mode 100644 index 126b966fc..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_pt_PT.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "Cabeçalho Fixo Deslizante", - "info": "Um painel deslizante que pode permanecer na parte superior da viewport, facilitando o efeito de fixação no topo.", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Exemplo Oficial do PinnedHeaderSliver", - "display": "new_page", - "desc": [ - "【child】 : Componente filho 【Widget?】", - "O PinnedHeaderSliver só pode ser usado em viewports de rolagem, onde o componente filho não sai da viewport ao rolar para o topo, permanecendo assim na parte superior da viewport." - ] - }, - { - "file": "node_02.dart", - "name": "Título Fixo no Topo", - "display": "new_page", - "desc": [ - "Efeito de título fixo no topo baseado no PinnedHeaderSliver, observe que a linha divisória abaixo também tem o efeito de fixação no topo." - ] - }, - { - "file": "node_03.dart", - "name": "Título + Barra de Pesquisa Fixa no Topo", - "display": "new_page", - "desc": [ - "Efeito de título + barra de pesquisa fixa no topo baseado no PinnedHeaderSliver." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ru_RU.json deleted file mode 100644 index 00291bfaa..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_ru_RU.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "Фиксированный верхний слайдер", - "info": "Слайдер, который может оставаться в верхней части окна просмотра, легко достигая эффекта прилипания к верху.", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "Официальный пример PinnedHeaderSliver", - "display": "new_page", - "desc": [ - "【child】 : Дочерний компонент 【Widget?】", - "PinnedHeaderSliver может использоваться только в прокручиваемом окне просмотра, где дочерний компонент при прокрутке до верха не выходит из окна просмотра, а остается в его верхней части." - ] - }, - { - "file": "node_02.dart", - "name": "Прилипание заголовка к верху", - "display": "new_page", - "desc": [ - "Эффект прилипания заголовка к верху, реализованный на основе PinnedHeaderSliver. Обратите внимание, что разделительная линия внизу также имеет эффект прилипания к верху." - ] - }, - { - "file": "node_03.dart", - "name": "Прилипание заголовка и поиска к верху", - "display": "new_page", - "desc": [ - "Эффект прилипания заголовка и поля поиска к верху, реализованный на основе PinnedHeaderSliver." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_zh-CN.json deleted file mode 100644 index 86f2cae4e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/desc_zh-CN.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 309, - "name": "PinnedHeaderSliver", - "localName": "固定头部滑片", - "info": "一个可以停留在视口上部的滑片, 可轻松完成吸顶效果。", - "lever": 4, - "family": 4, - "linkIds": [ - 190 - ], - "nodes": [ - { - "file": "node_01.dart", - "name": "PinnedHeaderSliver 官方案例", - "display": "new_page", - "desc": [ - "【child】 : 子组件 【Widget?】", - "PinnedHeaderSliver 只能用在滚动视口中,其中子组件在滑动到顶部时,不会移出视口,从而会停留在视口上方。" - ] - }, - { - "file": "node_02.dart", - "name": "标题吸顶", - "display": "new_page", - "desc": [ - "基于 PinnedHeaderSliver 实现的标题吸顶效果,注意看下方的分隔线也有吸顶效果哦。" - ] - }, - { - "file": "node_03.dart", - "name": "标题+搜索吸顶", - "display": "new_page", - "desc": [ - "基于 PinnedHeaderSliver 实现的标题+搜索框的吸顶效果。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_01.dart b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_01.dart deleted file mode 100644 index ec0180625..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_01.dart +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - - - -class PinnedHeaderSliverNode1 extends StatefulWidget { - const PinnedHeaderSliverNode1({ super.key }); - - @override - State createState() => _PinnedHeaderSliverNode1State(); -} - -class _PinnedHeaderSliverNode1State extends State { - int count = 0; - late final ScrollController scrollController; - - @override - void initState() { - super.initState(); - scrollController = ScrollController(); - } - - @override - void dispose() { - scrollController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; - - final Widget header = Container( - color: colorScheme.surface, - padding: const EdgeInsets.all(4), - child: Material( - color: colorScheme.primaryContainer, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - side: BorderSide( - width: 7, - color: colorScheme.outline, - ), - ), - child: Container( - alignment: Alignment.center, - padding: const EdgeInsets.symmetric(vertical: 48), - child: Text( - count.isOdd ? 'Alternative Title\nWith Two Lines' : 'PinnedHeaderSliver', - style: theme.textTheme.headlineMedium!.copyWith( - color: colorScheme.onPrimaryContainer, - ), - ), - ), - ), - ); - - return Scaffold( - body: SafeArea( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 4), - child: - CustomScrollView( - controller: scrollController, - slivers: [ - PinnedHeaderSliver(child: header), - const _ItemList(), - ], - ), - ), - ), - floatingActionButton: FloatingActionButton( - onPressed: () { - setState(() { - count += 1; - }); - }, - child: const Icon(Icons.add), - ), - ); - } -} - -// A placeholder SliverList of 25 items. -class _ItemList extends StatelessWidget { - const _ItemList({ - super.key, - this.itemCount = 50, - }); - - final int itemCount; - - @override - Widget build(BuildContext context) { - final ColorScheme colorScheme = Theme.of(context).colorScheme; - return SliverList( - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) { - return Card( - color: colorScheme.onSecondary, - child: ListTile( - textColor: colorScheme.secondary, - title: Text('Item $index'), - ), - ); - }, - childCount: itemCount, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_02.dart b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_02.dart deleted file mode 100644 index a3c26c8a3..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_02.dart +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:ui'; - -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -class PinnedHeaderSliverNode2 extends StatefulWidget { - const PinnedHeaderSliverNode2({super.key}); - - @override - State createState() => _PinnedHeaderSliverNode2State(); -} - -class _PinnedHeaderSliverNode2State extends State { - int count = 0; - late final ScrollController scrollController; - - @override - void initState() { - super.initState(); - scrollController = ScrollController(); - } - - @override - void dispose() { - scrollController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; - return Scaffold( - backgroundColor: Colors.white, - body: - CustomScrollView( - controller: scrollController, - slivers: [ - _buildSliverBar(), - _buildTitleText(), - const PinnedHeaderSliver(child: Divider()), - const _ItemList(), - ], - ), - ); - } - - Widget _buildSliverBar() { - const Icon icon = Icon(CupertinoIcons.settings, color: Colors.blue); - const TextStyle style = TextStyle(fontSize: 16, fontWeight: FontWeight.bold); - const Text text = Text('Settings', style: style); - Widget action = IconButton(onPressed: () {}, icon: icon ); - return SliverLayoutBuilder(builder: (_, scs) { - double factor = (scs.scrollOffset / kToolbarHeight).clamp(0, 1); - factor = factor < 0.2 ? 0 : factor; - AppBar header = AppBar( - backgroundColor: Colors.white, - surfaceTintColor: Colors.transparent, - actions: [action], - centerTitle: true, - title: Opacity(opacity: factor, child: text), - ); - return PinnedHeaderSliver(child: header); - }); - } - - Widget _buildTitleText() { - const TextStyle style = TextStyle(fontSize: 20, fontWeight: FontWeight.bold); - const Text text = Text('Settings', style: style); - return const SliverToBoxAdapter( - child: Padding( - padding: EdgeInsets.only(left: 12.0, bottom: 8), - child: text, - ), - ); - } -} - -class _ItemList extends StatelessWidget { - const _ItemList({ - super.key, - this.itemCount = 50, - }); - - final int itemCount; - - @override - Widget build(BuildContext context) { - final ColorScheme colorScheme = Theme.of(context).colorScheme; - return SliverList( - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) { - return ListTile( - dense: true, - textColor: colorScheme.secondary, - title: Text('#$index title'), - subtitle: Text('Subtitle in line $index'), - ); - }, - childCount: itemCount, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_03.dart b/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_03.dart deleted file mode 100644 index 6028b1f22..000000000 --- a/modules/widget_system/widgets/lib/Sliver/PinnedHeaderSliver/node_03.dart +++ /dev/null @@ -1,161 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:ui'; - -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -class PinnedHeaderSliverNode3 extends StatefulWidget { - const PinnedHeaderSliverNode3({super.key}); - - @override - State createState() => _PinnedHeaderSliverNode3State(); -} - -class _PinnedHeaderSliverNode3State extends State { - int count = 0; - late final ScrollController scrollController; - - @override - void initState() { - super.initState(); - scrollController = ScrollController(); - } - - @override - void dispose() { - scrollController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; - - return Scaffold( - backgroundColor: Colors.white, - body: CustomScrollView( - controller: scrollController, - slivers: [ - _buildSliverBar(), - _buildTitleText(), - _buildSliverSearch(), - -// PinnedHeaderSliver(child: Padding( -// padding: const EdgeInsets.symmetric(horizontal: 12.0), -// child: TextField( -// decoration: InputDecoration( -// filled: true, -// fillColor: Colors.white, -// border: InputBorder.none -// ), -// ), -// )), - - const _ItemList(), - ], - ), - ); - } - - Widget _buildSliverBar() { - const Icon icon = Icon(CupertinoIcons.settings, color: Colors.blue); - const TextStyle style = TextStyle(fontSize: 16, fontWeight: FontWeight.bold); - const Text text = Text('Settings', style: style); - Widget action = IconButton(onPressed: () {}, icon: icon); - return SliverLayoutBuilder(builder: (_, scs) { - double factor = (scs.scrollOffset / kToolbarHeight).clamp(0, 1); - factor = factor < 0.2 ? 0 : factor; - AppBar header = AppBar( - backgroundColor: Colors.white, - surfaceTintColor: Colors.transparent, - actions: [action], - centerTitle: true, - title: Opacity(opacity: factor, child: text), - ); - return PinnedHeaderSliver(child: header); - }); - } - - Widget _buildTitleText() { - const TextStyle style = TextStyle(fontSize: 20, fontWeight: FontWeight.bold); - const Text text = Text('Settings', style: style); - return const SliverToBoxAdapter( - child: Padding( - padding: EdgeInsets.only(left: 12.0, bottom: 8), - child: text, - ), - ); - } - - Widget _buildSliverSearch() { - BoxDecoration decoration = BoxDecoration( - color: const Color(0xffefeff1), borderRadius: BorderRadius.circular(6)); - Widget prefix = const Padding( - padding: EdgeInsets.only(left: 8.0), - child: Icon(CupertinoIcons.search, size: 20, color: Color(0xff808082)) - ); - return PinnedHeaderSliver( - child: ColoredBox( - color: Colors.white, - child: Column( - children: [ - Padding( - padding: const EdgeInsets.only(bottom: 8.0, right: 12, left: 12), - child: CupertinoTextField( - readOnly: true, - placeholder: '搜索', - onTap: _toSearchPage, - decoration: decoration, - prefix:prefix, - style: const TextStyle(fontSize: 14), - placeholderStyle: const TextStyle(color: Color(0xff808082)), - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 8), - ), - ), - const Divider(), - ], - ), - )); - } - - void _toSearchPage() { - Navigator.of(context).push( - MaterialPageRoute(builder: (_) => Scaffold(appBar: AppBar(title: const Text('SearchPage')))), - ); - } -} - -// A placeholder SliverList of 25 items. -class _ItemList extends StatelessWidget { - const _ItemList({ - super.key, - this.itemCount = 50, - }); - - final int itemCount; - - @override - Widget build(BuildContext context) { - final ColorScheme colorScheme = Theme - .of(context) - .colorScheme; - return SliverList( - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) { - return ListTile( - dense: true, - textColor: colorScheme.secondary, - title: Text('#$index title'), - subtitle: Text('Subtitle in line $index'), - ); - }, - childCount: itemCount, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_de_DE.json deleted file mode 100644 index 3b1fdbf43..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Sliver animierte Liste", - "info": "Eine Sliver-Komponente, die beim Einfügen oder Entfernen von Elementen Animationseffekte erzeugt.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverAnimatedList", - "desc": [ - "【itemBuilder】 : Item-Konstruktor 【AnimatedListItemBuilder】", - "【initialItemCount】 : Anfangszahl der Items 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_en_US.json deleted file mode 100644 index aebb2f927..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Sliver Animated List", - "info": "A sliver component that animates items when they are inserted or removed.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverAnimatedList", - "desc": [ - "【itemBuilder】: Item builder 【AnimatedListItemBuilder】", - "【initialItemCount】: Initial item count 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_es_ES.json deleted file mode 100644 index d25e85a8a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Lista animada Sliver", - "info": "Componente sliver que anima los elementos al insertar o eliminar.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverAnimatedList", - "desc": [ - "【itemBuilder】: Constructor de elementos 【AnimatedListItemBuilder】", - "【initialItemCount】: Número inicial de elementos 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_fr_FR.json deleted file mode 100644 index 5286a69e5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Liste animée Sliver", - "info": "Un composant sliver qui anime les éléments lors de leur insertion ou suppression.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverAnimatedList", - "desc": [ - "【itemBuilder】 : constructeur d'item 【AnimatedListItemBuilder】", - "【initialItemCount】 : nombre initial d'items 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_it_IT.json deleted file mode 100644 index 10b79a1dc..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Lista animata Sliver", - "info": "Componente sliver che aggiunge effetti animati quando si inseriscono o rimuovono elementi.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverAnimatedList", - "desc": [ - "【itemBuilder】: costruttore di item 【AnimatedListItemBuilder】", - "【initialItemCount】: numero iniziale di item 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ja_JP.json deleted file mode 100644 index c161c7a02..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Sliverアニメーションリスト", - "info": "アイテムを挿入または削除する際にアニメーション効果を持つsliverコンポーネント。", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverAnimatedList基本使用", - "desc": [ - "【itemBuilder】 : アイテムビルダー 【AnimatedListItemBuilder】", - "【initialItemCount】 : 初期アイテム数 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ko_KR.json deleted file mode 100644 index 623980fdf..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Sliver 애니메이션 리스트", - "info": "항목을 삽입하거나 삭제할 때 애니메이션 효과를 주는 sliver 컴포넌트입니다.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverAnimatedList 기본 사용", - "desc": [ - "【itemBuilder】 : 아이템 생성기 【AnimatedListItemBuilder】", - "【initialItemCount】 : 초기 아이템 개수 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_pt_PT.json deleted file mode 100644 index f05bec086..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Lista Animada Sliver", - "info": "Componente sliver que anima itens ao inserir ou remover.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SliverAnimatedList", - "desc": [ - "【itemBuilder】: construtor de itens 【AnimatedListItemBuilder】", - "【initialItemCount】: número inicial de itens 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ru_RU.json deleted file mode 100644 index f18977292..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Анимированный список Sliver", - "info": "Компонент Sliver, который анимирует элементы при их вставке или удалении.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverAnimatedList", - "desc": [ - "【itemBuilder】: конструктор элемента 【AnimatedListItemBuilder】", - "【initialItemCount】: начальное количество элементов 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_zh-CN.json deleted file mode 100644 index 3e96db1ff..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 301, - "name": "SliverAnimatedList", - "localName": "Sliver动画列表", - "info": "在插入或删除项目时使其有动画效果的sliver组件。", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverAnimatedList基本使用", - "desc": [ - "【itemBuilder】 : item构造器 【AnimatedListItemBuilder】", - "【initialItemCount】 : 初始item个数 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/node1_base.dart deleted file mode 100644 index 033918cb3..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAnimatedList/node1_base.dart +++ /dev/null @@ -1,192 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class SliverAnimatedListDemo extends StatefulWidget { - const SliverAnimatedListDemo({Key? key}) : super(key: key); - - @override - _SliverAnimatedListDemoState createState() => - _SliverAnimatedListDemoState(); -} - -class _SliverAnimatedListDemoState extends State { - - final GlobalKey _listKey = GlobalKey(); - late ListModel _list; - int? _selectedItem; - int _nextItem=0; - - @override - void initState() { - super.initState(); - _list = ListModel( - listKey: _listKey, - initialItems: [0, 1, 2], - removedItemBuilder: _buildRemovedItem, - ); - _nextItem = 3; - } - - Widget _buildItem(BuildContext context, int index, Animation animation) { - return CardItem( - animation: animation, - item: _list[index], - selected: _selectedItem == _list[index], - onTap: () { - setState(() { - _selectedItem = _selectedItem == _list[index] ? null : _list[index]; - }); - }, - ); - } - - Widget _buildRemovedItem(int item, BuildContext context, Animation animation) { - return CardItem( - animation: animation, - item: item, - selected: false, - ); - } - - void _insert() { - final int index = _selectedItem == null ? _list.length : _list.indexOf(_selectedItem!); - _list.insert(index, _nextItem++); - } - - void _remove() { - if (_selectedItem != null) { - _list.removeAt(_list.indexOf(_selectedItem!)); - setState(() { - _selectedItem = null; - }); - } else { - if(_list.length>0){ - _list.removeAt(0); - setState(() { - _selectedItem = null; - }); - } - } - } - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - SliverAppBar( - title: const Text( - 'SliverAnimatedList', - style: TextStyle(fontSize: 20), - ), - expandedHeight: 60, - centerTitle: true, - leading: IconButton( - icon: const Icon(Icons.add_circle), - onPressed: _insert, - tooltip: '插入一个item', - iconSize: 32, - ), - actions: [ - IconButton( - icon: const Icon(Icons.remove_circle), - onPressed: _remove, - tooltip: '删除选中的item', - iconSize: 32, - ), - ], - ), - SliverAnimatedList( - key: _listKey, - initialItemCount: _list.length, - itemBuilder: _buildItem, - ), - ], - ), - ); - } - - -} - -class ListModel { - ListModel({ - required this.listKey, - required this.removedItemBuilder, - required Iterable? initialItems, - }) : assert(removedItemBuilder != null), - _items = List.from(initialItems ?? []); - final GlobalKey listKey; - final dynamic removedItemBuilder; - final List _items; - SliverAnimatedListState? get _animatedList => listKey.currentState; - void insert(int index, E item) { - _items.insert(index, item); - _animatedList?.insertItem(index); - } - E removeAt(int index) { - final E removedItem = _items.removeAt(index); - if (removedItem != null) { - _animatedList?.removeItem( - index, - (BuildContext context, Animation animation) => removedItemBuilder(removedItem, context, animation), - ); - } - return removedItem; - } - int get length => _items.length; - E operator [](int index) => _items[index]; - int indexOf(E item) => _items.indexOf(item); -} - - -class CardItem extends StatelessWidget { - const CardItem({ - Key? key, - required this.animation, - required this.item, - this.onTap, - this.selected = false, - }) :super(key: key); - final Animation animation; - final VoidCallback? onTap; - final int item; - final bool selected; - @override - Widget build(BuildContext context) { - return Padding( - padding: - const EdgeInsets.only( - left: 2.0, - right: 2.0, - top: 2.0, - bottom: 0.0, - ), - child: SizeTransition( - axis: Axis.vertical, - sizeFactor: animation, - child: GestureDetector( - onTap: onTap, - child: SizedBox( - height: 60.0, - child: Card( - color: selected - ? Colors.black12 - : Colors.primaries[item % Colors.primaries.length], - child: Center( - child: Text( - 'Item $item', - style: const TextStyle(color: Colors.white,fontSize: 16), - ), - ), - ), - ), - ), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_de_DE.json deleted file mode 100644 index ed587190f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_de_DE.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Sliver-Kopfleiste", - "info": "Die allgemeine Struktur der oberen Leiste der Sliver-Familie, die linke, mittlere und rechte Komponenten, Schrumpfraum, Schattentiefe, Festmodus, Hintergrundfarbe usw. angeben kann.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverAppBar", - "desc": [ - "【leading】 : Linke Komponente 【Widget】", - "【title】 : Mittlere Komponente 【Widget】", - "【actions】 : Liste der rechten Komponenten 【List】", - "【floating】 : Ob schwebend 【bool】", - "【pinned】 : Ob oben verbleibend 【bool】", - "【snap】 : Ob halb zusammengeklappt 【bool】", - "【bottom】 : Untere Komponente 【PreferredSizeWidget】", - "【expandedHeight】 : Erweiterungshöhe 【double】", - "【elevation】 : Schattentiefe 【double】", - "【flexibleSpace】 : Erweiterungsraum 【FlexibleSpaceBar】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【controller】 : Controller 【ScrollController】", - " Wenn snap true ist, muss floating true sein" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_en_US.json deleted file mode 100644 index d149c4ecd..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_en_US.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Sliver Header Bar", - "info": "A common structure for the top bar of the Sliver family, which can specify left, center, and right components, collapse space, shadow depth, fixed mode, background color, and other properties.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverAppBar", - "desc": [ - "【leading】: Left component 【Widget】", - "【title】: Center component 【Widget】", - "【actions】: List of trailing components 【List】", - "【floating】: Whether to float 【bool】", - "【pinned】: Whether to stay at the top 【bool】", - "【snap】: Whether to semi-collapse 【bool】", - "【bottom】: Bottom component 【PreferredSizeWidget】", - "【expandedHeight】: Expanded height 【double】", - "【elevation】: Shadow depth 【double】", - "【flexibleSpace】: Expanded space 【FlexibleSpaceBar】", - "【backgroundColor】: Background color 【Color】", - "【controller】: Controller 【ScrollController】", - " When snap is true, floating must be true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_es_ES.json deleted file mode 100644 index 561d9e08b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_es_ES.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Barra superior Sliver", - "info": "Estructura común de la barra superior de la familia Sliver, que puede especificar componentes izquierdos, centrales y derechos, espacio de contracción, profundidad de sombra, modo fijo, color de fondo, etc.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverAppBar", - "desc": [ - "【leading】 : Componente izquierdo 【Widget】", - "【title】 : Componente central 【Widget】", - "【actions】 : Lista de componentes finales 【List】", - "【floating】 : Si flota 【bool】", - "【pinned】 : Si se queda en la parte superior 【bool】", - "【snap】 : Si se contrae parcialmente 【bool】", - "【bottom】 : Componente inferior 【PreferredSizeWidget】", - "【expandedHeight】 : Altura extendida 【double】", - "【elevation】 : Profundidad de sombra 【double】", - "【flexibleSpace】 : Espacio extendido 【FlexibleSpaceBar】", - "【backgroundColor】 : Color de fondo 【Color】", - "【controller】 : Controlador 【ScrollController】", - " snap debe ser true cuando floating es true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_fr_FR.json deleted file mode 100644 index 875a641f1..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_fr_FR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Barre d'en-tête Sliver", - "info": "Structure générique de la barre supérieure de la famille Sliver, qui peut spécifier des composants gauche, centre et droit, un espace de rétrécissement, une profondeur d'ombre, un mode fixe, une couleur d'arrière-plan, etc.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverAppBar", - "desc": [ - "【leading】 : Composant gauche 【Widget】", - "【title】 : Composant central 【Widget】", - "【actions】 : Liste des composants de fin 【List】", - "【floating】 : Flottant ou non 【bool】", - "【pinned】 : Reste en haut ou non 【bool】", - "【snap】 : Semi-déployé ou non 【bool】", - "【bottom】 : Composant inférieur 【PreferredSizeWidget】", - "【expandedHeight】 : Hauteur étendue 【double】", - "【elevation】 : Profondeur d'ombre 【double】", - "【flexibleSpace】 : Espace étendu 【FlexibleSpaceBar】", - "【backgroundColor】 : Couleur d'arrière-plan 【Color】", - "【controller】 : Contrôleur 【ScrollController】", - " snap doit être true lorsque floating est true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_it_IT.json deleted file mode 100644 index 3e967d78a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_it_IT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Barra superiore Sliver", - "info": "Struttura generica della barra superiore della famiglia Sliver, che consente di specificare componenti sinistra, centro e destra, spazio di contrazione, profondità dell'ombra, modalità fissa, colore di sfondo e altre proprietà.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverAppBar", - "desc": [ - "【leading】 : Componente sinistro 【Widget】", - "【title】 : Componente centrale 【Widget】", - "【actions】 : Lista dei componenti finali 【List】", - "【floating】 : Se fluttuante 【bool】", - "【pinned】 : Se rimane in cima 【bool】", - "【snap】 : Se semi-collassato 【bool】", - "【bottom】 : Componente inferiore 【PreferredSizeWidget】", - "【expandedHeight】 : Altezza estesa 【double】", - "【elevation】 : Profondità dell'ombra 【double】", - "【flexibleSpace】 : Spazio esteso 【FlexibleSpaceBar】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【controller】 : Controller 【ScrollController】", - " Quando snap è true, floating deve essere true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ja_JP.json deleted file mode 100644 index 1ccc855ef..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ja_JP.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Sliverヘッダーバー", - "info": "Sliverファミリーのトップバー共通構造。左中右のコンポーネント、収縮スペース、影の深さ、固定モード、背景色などの属性を指定できます。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverAppBar基本使用", - "desc": [ - "【leading】 : 左側コンポーネント 【Widget】", - "【title】 : 中央コンポーネント 【Widget】", - "【actions】 : 末尾コンポーネントリスト 【List】", - "【floating】 : フローティングするか 【bool】", - "【pinned】 : トップに留まるか 【bool】", - "【snap】 : 半収展するか 【bool】", - "【bottom】 : 底部コンポーネント 【PreferredSizeWidget】", - "【expandedHeight】 : 拡張高さ 【double】", - "【elevation】 : 影の深さ 【double】", - "【flexibleSpace】 : 拡張スペース 【FlexibleSpaceBar】", - "【backgroundColor】 : 背景色 【Color】", - "【controller】 : コントローラー 【ScrollController】", - " snapがtrueの場合、floatingはtrueである必要があります" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ko_KR.json deleted file mode 100644 index 89628f4e8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ko_KR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Sliver 헤더 바", - "info": "Sliver 패밀리의 상단 바 공통 구조로, 좌중우 컴포넌트, 축소 공간, 그림자 깊이, 고정 모드, 배경색 등 속성을 지정할 수 있습니다.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverAppBar 기본 사용", - "desc": [ - "【leading】 : 왼쪽 컴포넌트 【Widget】", - "【title】 : 중앙 컴포넌트 【Widget】", - "【actions】 : 오른쪽 컴포넌트 리스트 【List】", - "【floating】 : 플로팅 여부 【bool】", - "【pinned】 : 상단 고정 여부 【bool】", - "【snap】 : 반 접힘 여부 【bool】", - "【bottom】 : 하단 컴포넌트 【PreferredSizeWidget】", - "【expandedHeight】 : 확장 높이 【double】", - "【elevation】 : 그림자 깊이 【double】", - "【flexibleSpace】 : 확장 공간 【FlexibleSpaceBar】", - "【backgroundColor】 : 배경색 【Color】", - "【controller】 : 컨트롤러 【ScrollController】", - " snap이 true일 경우 floating은 반드시 true여야 함" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_pt_PT.json deleted file mode 100644 index 7c2ce2225..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_pt_PT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Barra de Cabeçalho Sliver", - "info": "Estrutura comum da barra superior da família Sliver, pode especificar componentes esquerdo, central e direito, espaço de recolhimento, profundidade de sombra, modo fixo, cor de fundo, etc.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SliverAppBar", - "desc": [ - "【leading】 : Componente esquerdo 【Widget】", - "【title】 : Componente central 【Widget】", - "【actions】 : Lista de componentes da cauda 【List】", - "【floating】 : Se flutua 【bool】", - "【pinned】 : Se fica no topo 【bool】", - "【snap】 : Se recolhe parcialmente 【bool】", - "【bottom】 : Componente inferior 【PreferredSizeWidget】", - "【expandedHeight】 : Altura estendida 【double】", - "【elevation】 : Profundidade da sombra 【double】", - "【flexibleSpace】 : Espaço flexível 【FlexibleSpaceBar】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【controller】 : Controlador 【ScrollController】", - " Quando snap é true, floating deve ser true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ru_RU.json deleted file mode 100644 index 9cf0712a9..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_ru_RU.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Sliver заголовок", - "info": "Общая структура верхней панели семейства Sliver, которая может указывать левый, центральный и правый компоненты, пространство сжатия, глубину тени, фиксированный режим, цвет фона и другие атрибуты.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverAppBar", - "desc": [ - "【leading】 : Левый компонент 【Widget】", - "【title】 : Центральный компонент 【Widget】", - "【actions】 : Список конечных компонентов 【List】", - "【floating】 : Плавающий ли 【bool】", - "【pinned】 : Остается ли наверху 【bool】", - "【snap】 : Полузакрытый ли 【bool】", - "【bottom】 : Нижний компонент 【PreferredSizeWidget】", - "【expandedHeight】 : Высота расширения 【double】", - "【elevation】 : Глубина тени 【double】", - "【flexibleSpace】 : Пространство расширения 【FlexibleSpaceBar】", - "【backgroundColor】 : Цвет фона 【Color】", - "【controller】 : Контроллер 【ScrollController】", - " snap true, необходимо floating true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_zh-CN.json deleted file mode 100644 index 04ea3ea57..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/desc_zh-CN.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 184, - "name": "SliverAppBar", - "localName": "Sliver头部栏", - "info": "Sliver家族的顶部栏通用结构,可以指定左中右组件、收缩空间、影深、固定模式、背景色等属性。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 196 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverAppBar基本使用", - "desc": [ - "【leading】 : 左侧组件 【Widget】", - "【title】 : 中间组件 【Widget】", - "【actions】 : 尾部组件列表 【List】", - "【floating】 : 是否浮动 【bool】", - "【pinned】 : 是否顶部停留 【bool】", - "【snap】 : 是否半收展 【bool】", - "【bottom】 : 底部组件 【PreferredSizeWidget】", - "【expandedHeight】 : 延展高度 【double】", - "【elevation】 : 影深 【double】", - "【flexibleSpace】 : 延展空间 【FlexibleSpaceBar】", - "【backgroundColor】 : 背景色 【Color】", - "【controller】 : 控制器 【ScrollController】", - " snap为true时必需floating为true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverAppBar/node1_base.dart deleted file mode 100644 index 12cff8d39..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverAppBar/node1_base.dart +++ /dev/null @@ -1,155 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class SliverAppBarDemo extends StatefulWidget { - const SliverAppBarDemo({Key? key}) : super(key: key); - - @override - _SliverAppBarDemoState createState() => _SliverAppBarDemoState(); -} - -class _SliverAppBarDemoState extends State { - bool _floating = false; - bool _pinned = false; - bool _snap = false; - - final List data = [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildTool(), - SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - _buildSliverAppBar(), - _buildSliverFixedExtentList() - ], - ), - ), - ], - ); - } - - Widget _buildSliverAppBar() { - print(_floating); - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - floating: _floating, - pinned: _pinned, - snap: _snap, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar(//伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - Widget _buildSliverFixedExtentList() => SliverFixedExtentList( - itemExtent: 60, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - Widget _buildTool() { - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Wrap( - direction: Axis.vertical, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - const Text('floating'), - Switch( - value: _floating, - onChanged: (v) { - if(_snap&&!v){ - _snap =false; - } - setState(() => _floating = v); - }), - ], - ), - Wrap( - direction: Axis.vertical, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - const Text('pinned'), - Switch( - value: _pinned, - onChanged: (v) => setState(() => _pinned = v)), - ], - ) ,Wrap( - direction: Axis.vertical, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - const Text('snap'), - Switch( - value: _snap, - onChanged: (v) { - if(_floating){ - setState(() => _snap = v); - } - }), - ], - ) - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_de_DE.json deleted file mode 100644 index 713fe6189..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "Kreuzachsen-Größenbeschränkung für Sliver", - "info": "Legt die Größe für eine Sliver-Komponente in der Kreuzachsenrichtung fest, um die Größe des Slivers zu begrenzen.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Grundlegende Verwendung von SliverConstrainedCrossAxis", - "desc": [ - "【maxExtent】 : Größe 【double】", - "【sliver】 : Untergeordnete Komponente 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_en_US.json deleted file mode 100644 index bf34df040..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "Cross Axis Size Constrained Sliver", - "info": "Specifies the size in the cross-axis direction for a Sliver component to constrain the sliver size.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Basic Usage of SliverConstrainedCrossAxis", - "desc": [ - "【maxExtent】 : size 【double】", - "【sliver】 : child component 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_es_ES.json deleted file mode 100644 index d22b986c1..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "Restricción de tamaño en el eje cruzado para Sliver", - "info": "Especifica un tamaño en la dirección del eje cruzado para limitar el tamaño de un componente Sliver.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso básico de SliverConstrainedCrossAxis", - "desc": [ - "【maxExtent】 : tamaño 【double】", - "【sliver】 : componente hijo 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_fr_FR.json deleted file mode 100644 index 7888ed003..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "Contrainte de taille de l'axe transversal pour Sliver", - "info": "Spécifie une taille pour contraindre la dimension d'un composant Sliver dans la direction de l'axe transversal.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de base de SliverConstrainedCrossAxis", - "desc": [ - "【maxExtent】 : taille 【double】", - "【sliver】 : composant enfant 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_it_IT.json deleted file mode 100644 index 1d305ce8e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "Vincolo dimensionale dell'asse trasversale per Sliver", - "info": "Specifica una dimensione per limitare la dimensione di un componente Sliver nella direzione dell'asse trasversale.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso di base di SliverConstrainedCrossAxis", - "desc": [ - "【maxExtent】 : dimensione 【double】", - "【sliver】 : componente figlio 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ja_JP.json deleted file mode 100644 index 5557edd0c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "クロス軸サイズ制約スライバー", - "info": "Sliverコンポーネントに対して、クロス軸方向にサイズを指定してスライバーのサイズを制限します。", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverConstrainedCrossAxis 基本使用", - "desc": [ - "【maxExtent】 : サイズ 【double】", - "【sliver】 : 子コンポーネント 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ko_KR.json deleted file mode 100644 index 858179326..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "교차축 크기 제약 슬라이버", - "info": "Sliver 컴포넌트의 교차축 방향에서 크기를 지정하여 슬라이버 크기를 제한합니다.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverConstrainedCrossAxis 기본 사용", - "desc": [ - "【maxExtent】 : 크기 【double】", - "【sliver】 : 자식 컴포넌트 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_pt_PT.json deleted file mode 100644 index e6080d010..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "Folha de deslizamento com restrição de tamanho do eixo cruzado", - "info": "Especifica o tamanho na direção do eixo cruzado para limitar o tamanho da folha de deslizamento para um componente Sliver.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso básico de SliverConstrainedCrossAxis", - "desc": [ - "【maxExtent】 : Tamanho 【double】", - "【sliver】 : Componente filho 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ru_RU.json deleted file mode 100644 index 7029456c2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "Ограничение размера слайдера по поперечной оси", - "info": "Задает размер для компонента Sliver в направлении поперечной оси, чтобы ограничить размер слайдера.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Основное использование SliverConstrainedCrossAxis", - "desc": [ - "【maxExtent】 : размер 【double】", - "【sliver】 : дочерний компонент 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_zh-CN.json deleted file mode 100644 index 1e66edb0b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 270, - "name": "SliverConstrainedCrossAxis", - "localName": "交叉轴尺寸约束滑片", - "info": "为一个 Sliver 组件在交叉轴方向上,指定尺寸大小来限制滑片尺寸。", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverConstrainedCrossAxis 基本使用", - "desc": [ - "【maxExtent】 : 大小 【double】", - "【sliver】 : 子组件 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/node1.dart b/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/node1.dart deleted file mode 100644 index b591d991b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverConstrainedCrossAxis/node1.dart +++ /dev/null @@ -1,86 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/8/18 -/// contact me by email 1981462002@qq.com - -class SliverConstrainedCrossAxisDemo extends StatelessWidget { - const SliverConstrainedCrossAxisDemo({super.key}); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - SliverCrossAxisGroup( - slivers: [ - SliverConstrainedCrossAxis( - maxExtent: 100, - sliver: _SliverColorList( - height: 100.0, - fontSize: 24, - count: 8, - color1: Colors.amber[300], - color2: Colors.blue[300], - ), - ), - SliverCrossAxisExpanded( - flex: 1, - sliver: _SliverColorList( - height: 80.0, - fontSize: 18, - count: 15, - color1: Colors.green[300], - color2: Colors.red[300], - ), - ), - SliverCrossAxisExpanded( - flex: 1, - sliver: _SliverColorList( - height: 50.0, - fontSize: 20, - count: 6, - color1: Colors.purple[300], - color2: Colors.orange[300], - )), - ], - ), - ], - ), - ); - } -} - -class _SliverColorList extends StatelessWidget { - final double height; - final double fontSize; - final Color? color1; - final Color? color2; - final int count; - const _SliverColorList( - {super.key, - required this.height, - required this.fontSize, - required this.count, - this.color1, - this.color2}); - - @override - Widget build(BuildContext context) { - return SliverList.builder( - itemBuilder: (BuildContext context, int index) { - return Container( - color: index.isEven ? color1 : color2, - height: height, - child: Center( - child: Text( - 'Item ${index}', - style: TextStyle(fontSize: fontSize), - ), - ), - ); - }, - itemCount: count, - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_de_DE.json deleted file mode 100644 index 7a6e31d6f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "Cross-Axis-Erweiterungsschieber", - "info": "Gibt für eine Sliver-Komponente in der Richtung der Querachse einen Flex-Anteil an, um die Größe des Schiebers zu begrenzen.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Grundlegende Verwendung von SliverCrossAxisExpanded", - "desc": [ - "【flex】 : Anteil 【int】", - "【sliver】 : Untergeordnete Komponente 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_en_US.json deleted file mode 100644 index 9bf13408d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "Cross Axis Expanded Sliver", - "info": "Specifies the flex ratio in the cross-axis direction for a Sliver component to constrain the size of the sliver.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Basic Usage of SliverCrossAxisExpanded", - "desc": [ - "【flex】: Ratio 【int】", - "【sliver】: Child Component 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_es_ES.json deleted file mode 100644 index 15f422ad8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "Deslizador Expandido en Eje Cruzado", - "info": "Para un componente Sliver, especifica la proporción flex en la dirección del eje cruzado para limitar el tamaño del deslizador.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso básico de SliverCrossAxisExpanded", - "desc": [ - "【flex】 : proporción 【int】", - "【sliver】 : componente hijo 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_fr_FR.json deleted file mode 100644 index d0a99dffb..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "Glissière d'expansion de l'axe croisé", - "info": "Pour un composant Sliver, spécifie la proportion de flex dans la direction de l'axe croisé pour limiter la taille de la glissière.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de base de SliverCrossAxisExpanded", - "desc": [ - "【flex】 : proportion 【int】", - "【sliver】 : composant enfant 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_it_IT.json deleted file mode 100644 index 0538e9fb8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "Cursore Espanso sull'Asse Incrociato", - "info": "Specifica la proporzione flex per limitare le dimensioni del cursore in direzione dell'asse incrociato per un componente Sliver.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso di base di SliverCrossAxisExpanded", - "desc": [ - "【flex】 : proporzione 【int】", - "【sliver】 : componente figlio 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ja_JP.json deleted file mode 100644 index b8ce18cd6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "クロス軸拡張スライバー", - "info": "スライバーコンポーネントのクロス軸方向に、flex比率を指定してスライバーのサイズを制限します。", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverCrossAxisExpanded 基本使用", - "desc": [ - "【flex】 : 比率 【int】", - "【sliver】 : 子コンポーネント 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ko_KR.json deleted file mode 100644 index 33dd18a18..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "교차축 확장 슬라이스", - "info": "Sliver 컴포넌트의 교차축 방향에서 flex 비율을 지정하여 슬라이스 크기를 제한합니다.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverCrossAxisExpanded 기본 사용", - "desc": [ - "【flex】 : 비율 【int】", - "【sliver】 : 하위 컴포넌트 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_pt_PT.json deleted file mode 100644 index 52a4b46cf..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "Slider de Expansão do Eixo Cruzado", - "info": "Para um componente Sliver, especifica a proporção flex na direção do eixo cruzado para limitar o tamanho do slider.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso Básico do SliverCrossAxisExpanded", - "desc": [ - "【flex】 : Proporção 【int】", - "【sliver】 : Componente Filho 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ru_RU.json deleted file mode 100644 index 5982223ea..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "Расширенный слайвер по поперечной оси", - "info": "Для компонента Sliver указывает долю flex в направлении поперечной оси, чтобы ограничить размер слайвера.", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Основное использование SliverCrossAxisExpanded", - "desc": [ - "【flex】 : доля 【int】", - "【sliver】 : дочерний компонент 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_zh-CN.json deleted file mode 100644 index be048a2e6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 271, - "name": "SliverCrossAxisExpanded", - "localName": "交叉轴延展滑片", - "info": "为一个 Sliver 组件在交叉轴方向上,指定 flex 占比来限制滑片尺寸。", - "lever": 3, - "family": 4, - "linkIds": [ - 269, - 270 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverCrossAxisExpanded 基本使用", - "desc": [ - "【flex】 : 占比 【int】", - "【sliver】 : 子组件 【Widget?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/node1.dart b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/node1.dart deleted file mode 100644 index 419af803e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisExpanded/node1.dart +++ /dev/null @@ -1,76 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/8/18 -/// contact me by email 1981462002@qq.com - -class SliverCrossAxisExpandedDemo extends StatelessWidget { - const SliverCrossAxisExpandedDemo({super.key}); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - SliverCrossAxisGroup( - slivers: [ - SliverCrossAxisExpanded( - flex: 1, - sliver: _SliverColorList( - height: 80.0, - fontSize: 18, - count: 15, - color1: Colors.green[300], - color2: Colors.red[300], - ), - ), - SliverCrossAxisExpanded( - flex: 1, - sliver: _SliverColorList( - height: 50.0, - fontSize: 20, - count: 6, - color1: Colors.purple[300], - color2: Colors.orange[300], - )), - ], - ), - ], - ), - ); - } -} - -class _SliverColorList extends StatelessWidget { - final double height; - final double fontSize; - final Color? color1; - final Color? color2; - final int count; - const _SliverColorList( - {super.key, - required this.height, - required this.fontSize, - required this.count, - this.color1, - this.color2}); - - @override - Widget build(BuildContext context) { - return SliverList.builder( - itemBuilder: (BuildContext context, int index) { - return Container( - color: index.isEven ? color1 : color2, - height: height, - child: Center( - child: Text( - 'Item ${index}', - style: TextStyle(fontSize: fontSize), - ), - ), - ); - }, - itemCount: count, - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_de_DE.json deleted file mode 100644 index c9882cb00..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "Kreuzachsen-Gruppe", - "info": "Kann mehrere Sliver-Komponenten aufnehmen und sie in der gleitenden Querhauptachse als Gruppe behandeln.", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Grundlegende Verwendung von SliverCrossAxisGroup", - "desc": [ - "【slivers】 : Liste der Unterkomponenten 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_en_US.json deleted file mode 100644 index 0a942bf2b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "Cross Axis Sliver Group", - "info": "Can contain multiple Sliver components, treating them as a group in the cross main axis direction of scrolling.", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Basic Usage of SliverCrossAxisGroup", - "desc": [ - "【slivers】 : List of child components 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_es_ES.json deleted file mode 100644 index 19cfce97c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "Grupo de deslizadores en eje cruzado", - "info": "Puede contener múltiples componentes Sliver, tratándolos como un grupo en la dirección del eje principal cruzado durante el desplazamiento.", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso básico de SliverCrossAxisGroup", - "desc": [ - "【slivers】 : Lista de componentes hijos 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_fr_FR.json deleted file mode 100644 index 7bb641370..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "Groupe de glissières d'axe croisé", - "info": "Peut contenir plusieurs composants Sliver, les traitant comme un groupe dans la direction de l'axe principal de défilement.", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de base de SliverCrossAxisGroup", - "desc": [ - "【slivers】 : Liste des composants enfants 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_it_IT.json deleted file mode 100644 index ae753b3e6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "Gruppo di scorrimento dell'asse trasversale", - "info": "Può contenere più componenti Sliver, considerandoli come un gruppo nella direzione dell'asse trasversale durante lo scorrimento.", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso di base di SliverCrossAxisGroup", - "desc": [ - "【slivers】 : Lista dei componenti figli 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ja_JP.json deleted file mode 100644 index 1d063bba8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "クロス軸スライドグループ", - "info": "複数のSliverコンポーネントを収容し、それらをスクロールのクロスメイン軸方向でグループとして扱うことができます。", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverCrossAxisGroup 基本使用", - "desc": [ - "【slivers】 : 子コンポーネントリスト 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ko_KR.json deleted file mode 100644 index 1c50ba546..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "교차축 슬라이더 그룹", - "info": "여러 개의 Sliver 컴포넌트를 수용할 수 있으며, 스크롤 교차 주축 방향에서 하나의 그룹으로 간주되도록 합니다.", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverCrossAxisGroup 기본 사용법", - "desc": [ - "【slivers】 : 자식 컴포넌트 목록 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_pt_PT.json deleted file mode 100644 index 576fa851e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "Grupo de Slides do Eixo Cruzado", - "info": "Pode acomodar vários componentes Sliver, tratando-os como um grupo na direção do eixo principal cruzado durante o deslizamento.", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso Básico do SliverCrossAxisGroup", - "desc": [ - "【slivers】 : Lista de componentes filhos 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ru_RU.json deleted file mode 100644 index 752077fb2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "Группа слайдов по поперечной оси", - "info": "Может содержать несколько компонентов Sliver, позволяя рассматривать их как группу в направлении главной оси скольжения.", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Основное использование SliverCrossAxisGroup", - "desc": [ - "【slivers】 : Список дочерних компонентов 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_zh-CN.json deleted file mode 100644 index a6d2cc9f7..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 269, - "name": "SliverCrossAxisGroup", - "localName": "交叉轴滑片组", - "info": "可以容纳多个 Sliver 组件,让它们在滑动的交叉主轴方向上视为一组。", - "lever": 4, - "family": 4, - "linkIds": [ - 268, - 270, - 271 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverCrossAxisGroup 基本使用", - "desc": [ - "【slivers】 : 子组件列表 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/node1.dart b/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/node1.dart deleted file mode 100644 index 3533f0f66..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverCrossAxisGroup/node1.dart +++ /dev/null @@ -1,79 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/8/18 -/// contact me by email 1981462002@qq.com - -class SliverCrossAxisGroupDemo extends StatelessWidget { - const SliverCrossAxisGroupDemo({super.key}); - - @override - Widget build(BuildContext context) { - double width = MediaQuery.of(context).size.width; - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - SliverCrossAxisGroup( - slivers: [ - SliverConstrainedCrossAxis( - maxExtent: 100, - sliver: _SliverColorList( - height: 100.0, - fontSize: 24, - count: 8, - color1: Colors.amber[300], - color2: Colors.blue[300], - ), - ), - SliverConstrainedCrossAxis( - maxExtent: width - 100, - sliver: _SliverColorList( - height: 80.0, - fontSize: 18, - count: 15, - color1: Colors.green[300], - color2: Colors.red[300], - ), - ), - ], - ), - ], - ), - ); - - } -} - -class _SliverColorList extends StatelessWidget { - final double height; - final double fontSize; - final Color? color1; - final Color? color2; - final int count; - const _SliverColorList( - {super.key, - required this.height, - required this.fontSize, - required this.count, - this.color1, - this.color2}); - - @override - Widget build(BuildContext context) { - return SliverList.builder( - itemBuilder: (BuildContext context, int index) { - return Container( - color: index.isEven ? color1 : color2, - height: height, - child: Center( - child: Text( - 'Item ${index}', - style: TextStyle(fontSize: fontSize), - ), - ), - ); - }, - itemCount: count, - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_de_DE.json deleted file mode 100644 index 5c9d5f77c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver füllt den Rest", - "info": "Ein Sliver, das ein einzelnes Box-Kind enthält und den verbleibenden Platz im Viewport ausfüllt. Es können zwei boolesche Werte angegeben werden, um den Scroll-Effekt zu steuern, wie im folgenden Beispiel gezeigt, um es selbst zu erleben.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverFillRemaining", - "desc": [ - "【hasScrollBody】 : Ob es einen Scroll-Body hat 【bool】", - "【fillOverscroll】 : Ob der Scroll-Bereich gefüllt werden kann 【bool】", - "【child】 : Kindkomponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_en_US.json deleted file mode 100644 index 0b8149b34..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver Fill Remaining", - "info": "A sliver that contains a single box child element, which fills the remaining space in the viewport. Two boolean values can be specified to control the scrolling effect, as shown in the example below, experience it yourself.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverFillRemaining", - "desc": [ - "【hasScrollBody】: Whether it has a scroll body 【bool】", - "【fillOverscroll】: Whether it can fill the scroll area 【bool】", - "【child】: Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_es_ES.json deleted file mode 100644 index 871bd2035..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver llenar el espacio restante", - "info": "Un sliver que contiene un solo elemento hijo de tipo box, que llena el espacio restante en la ventana gráfica. Se pueden especificar dos valores booleanos para controlar el efecto de desplazamiento, como en el siguiente ejemplo, para que lo experimentes por ti mismo.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverFillRemaining", - "desc": [ - "【hasScrollBody】 : Si tiene un cuerpo de desplazamiento 【bool】", - "【fillOverscroll】 : Si se puede llenar el área de desplazamiento 【bool】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_fr_FR.json deleted file mode 100644 index 0601452fa..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver remplir le reste", - "info": "Un sliver qui contient un seul élément box, il remplit l'espace restant dans la fenêtre. Deux valeurs booléennes peuvent être spécifiées pour contrôler l'effet de défilement, comme dans l'exemple suivant, à expérimenter par vous-même.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverFillRemaining", - "desc": [ - "【hasScrollBody】 : Si le corps a un défilement 【bool】", - "【fillOverscroll】 : Si la zone de défilement peut être remplie 【bool】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_it_IT.json deleted file mode 100644 index 4d90f7450..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver riempie il rimanente", - "info": "Un sliver che contiene un singolo elemento figlio box, che riempie lo spazio rimanente nella finestra. È possibile specificare due valori bool per controllare l'effetto di scorrimento, come nell'esempio seguente, da provare personalmente.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverFillRemaining", - "desc": [ - "【hasScrollBody】 : Se ha un corpo di scorrimento 【bool】", - "【fillOverscroll】 : Se può riempire l'area di scorrimento 【bool】", - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ja_JP.json deleted file mode 100644 index 76b57533a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver残りを埋める", - "info": "ビューポート内の残りのスペースを埋める単一のbox子要素を含むsliverです。以下の例のように、スライド効果を制御するために2つのbool値を指定できます。自分で体験してください。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFillRemaining基本使用", - "desc": [ - "【hasScrollBody】 : スクロール本体を持つかどうか 【bool】", - "【fillOverscroll】 : スクロール領域を埋めることができるかどうか 【bool】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ko_KR.json deleted file mode 100644 index 22432e3e5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver 남은 공간 채우기", - "info": "단일 box 자식을 포함하는 sliver로, 뷰포트의 남은 공간을 채웁니다. 아래 예시와 같이 두 개의 bool 값을 지정하여 스크롤 효과를 제어할 수 있습니다. 직접 경험해 보세요.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFillRemaining 기본 사용법", - "desc": [ - "【hasScrollBody】 : 스크롤 본체 여부 【bool】", - "【fillOverscroll】 : 스크롤 영역 채우기 여부 【bool】", - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_pt_PT.json deleted file mode 100644 index e9c9a50e3..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver preencher restante", - "info": "Um sliver que contém um único elemento box, que preenche o espaço restante na janela de visualização. Dois valores bool podem ser especificados para controlar o efeito de deslizamento, como no exemplo a seguir, experimente você mesmo.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do SliverFillRemaining", - "desc": [ - "【hasScrollBody】 : Se tem um corpo de rolagem 【bool】", - "【fillOverscroll】 : Se pode preencher a área de rolagem 【bool】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ru_RU.json deleted file mode 100644 index 913a2816f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver заполняет оставшееся", - "info": "Sliver, содержащий один дочерний элемент box, который заполняет оставшееся пространство в окне просмотра. Можно указать два логических значения для управления эффектом прокрутки, как показано в следующем примере, попробуйте сами.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverFillRemaining", - "desc": [ - "【hasScrollBody】 : Имеет ли прокручиваемую основу 【bool】", - "【fillOverscroll】 : Можно ли заполнить область прокрутки 【bool】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_zh-CN.json deleted file mode 100644 index 19bbb6681..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 306, - "name": "SliverFillRemaining", - "localName": "Sliver填补剩余", - "info": "一个包含单个box子元素的sliver,它填充了视窗中的剩余空间。可指定两个bool值控制滑动效果,如下示例,自己体会。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFillRemaining基本使用", - "desc": [ - "【hasScrollBody】 : 是否具有滚动主体 【bool】", - "【fillOverscroll】 : 是否可填充滚动区域 【bool】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/node1_base.dart deleted file mode 100644 index e3a0edf58..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillRemaining/node1_base.dart +++ /dev/null @@ -1,150 +0,0 @@ -import 'dart:math'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class SliverFillRemainingDemo extends StatefulWidget { - const SliverFillRemainingDemo({Key? key}) : super(key: key); - - @override - _SliverFillRemainingDemoState createState() => - _SliverFillRemainingDemoState(); -} - -class _SliverFillRemainingDemoState extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - final Random r = Random(); - - bool hasScrollBody = false; - bool fillOverscroll = true; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - physics: const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()), - slivers: [ - _buildSliverAppBar(), - _buildSliverList(), - SliverFillRemaining( - hasScrollBody: hasScrollBody, - fillOverscroll: fillOverscroll, - child: Container( - decoration: const BoxDecoration( - image: DecorationImage( - fit: BoxFit.cover, - image: AssetImage("assets/images/sabar_bar.webp"))), - // // color: Colors.teal[100], - child: _buildBottomChild(), - ), - ), - ], - ), - ); - } - - Widget _buildBottomChild() => Align( - alignment: Alignment.bottomCenter, - child: Padding( - padding: const EdgeInsets.all(16.0), - child: Wrap( - spacing: 10, - children: [ - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - ), - onPressed: () { - setState(() { - hasScrollBody = !hasScrollBody; - }); - }, - child: Text('hasScrollBody:$hasScrollBody',style: const TextStyle(color: Colors.white),), - ), - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - ), - onPressed: () { - setState(() { - fillOverscroll = !fillOverscroll; - }); - }, - child: Text('fillOverscroll:$fillOverscroll',style: const TextStyle(color: Colors.white)), - ), - ], - ), - ), - ); - - Widget _buildSliverList() => SliverFixedExtentList( - itemExtent: 50, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 120.0, - leading: Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_de_DE.json deleted file mode 100644 index cd900f243..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Sliver-Füllansichtsliste", - "info": "Eine Listenkomponente der Sliver-Familie, die über einen Delegate Unterkomponenten erstellt. Die Höhe der Elemente füllt den Ansichtsbereich, und es kann angegeben werden, ob ein Bruchteil verwendet wird.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverFillViewport", - "desc": [ - "【viewportFraction】 : Ansichtsbruchteil 【double】", - "【delegate】 : Kind-Delegate 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_en_US.json deleted file mode 100644 index 70abeab97..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Sliver Fill Viewport", - "info": "A list component of the Sliver family, which constructs child components through a delegate. The height of the item will fill the viewport, and you can specify the fraction.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverFillViewport", - "desc": [ - "【viewportFraction】 : Viewport Fraction 【double】", - "【delegate】 : Child Delegate 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_es_ES.json deleted file mode 100644 index 99a48b3fe..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Lista de vista de relleno Sliver", - "info": "Componente de lista de la familia Sliver, construye subcomponentes a través de delegate, la altura del elemento llenará la ventana gráfica, se puede especificar si es una fracción.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverFillViewport", - "desc": [ - "【viewportFraction】 : Fracción de la ventana gráfica 【double】", - "【delegate】 : Delegado de hijos 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_fr_FR.json deleted file mode 100644 index 2b7683231..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Liste de vue de remplissage Sliver", - "info": "Composant de liste de la famille Sliver, qui construit des sous-composants via un délégué, la hauteur de l'élément remplira la vue, et il est possible de spécifier si la fraction est divisée.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverFillViewport", - "desc": [ - "【viewportFraction】 : Fraction de la vue 【double】", - "【delegate】 : Délégué des enfants 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_it_IT.json deleted file mode 100644 index b6e42baee..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Sliver riempie la vista", - "info": "Componente della lista della famiglia Sliver, costruisce i componenti figli tramite il delegate, l'altezza dell'elemento riempirà la vista, è possibile specificare la frazione.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverFillViewport", - "desc": [ - "【viewportFraction】 : Frazione della vista 【double】", - "【delegate】 : Delegato dei figli 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ja_JP.json deleted file mode 100644 index 8d2507f92..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Sliverビューポートを埋めるリスト", - "info": "Sliverファミリーのリストコンポーネントで、delegateを通じて子コンポーネントを構築し、アイテムの高さがビューポートを埋めます。分率を指定することもできます。", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFillViewportの基本使用", - "desc": [ - "【viewportFraction】 : ビューポート分率 【double】", - "【delegate】 : 子デリゲート 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ko_KR.json deleted file mode 100644 index fbeb3ab5e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Sliver 뷰포트 채우기", - "info": "Sliver 패밀리의 리스트 컴포넌트로, delegate를 통해 자식 컴포넌트를 구성하며, 아이템의 높이가 뷰포트를 채웁니다. 분율을 지정할 수 있습니다.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFillViewport 기본 사용법", - "desc": [ - "【viewportFraction】 : 뷰포트 분율 【double】", - "【delegate】 : 자식 대리자 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_pt_PT.json deleted file mode 100644 index a40a323aa..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Lista de visualização de preenchimento Sliver", - "info": "Componente de lista da família Sliver, que constrói subcomponentes através de um delegate. A altura do item preencherá a viewport, e pode-se especificar a fração de preenchimento.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do SliverFillViewport", - "desc": [ - "【viewportFraction】 : Fração da viewport 【double】", - "【delegate】 : Delegado dos filhos 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ru_RU.json deleted file mode 100644 index 934b45691..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Sliver заполнение списка представлений", - "info": "Компонент списка семейства Sliver, который создает дочерние компоненты через делегат, высота элемента заполняет видимую область, можно указать долю.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverFillViewport", - "desc": [ - "【viewportFraction】 : Доля видимой области 【double】", - "【delegate】 : Делегат дочерних элементов 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_zh-CN.json deleted file mode 100644 index f10797754..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 187, - "name": "SliverFillViewport", - "localName": "Sliver填充视图列表", - "info": "Sliver家族的列表组件,通过delegate构造子组件,item的高度会填空视口,可以指定是否的分率。", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFillViewport基本使用", - "desc": [ - "【viewportFraction】 : 视口分率 【double】", - "【delegate】 : 孩子代理 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/node1_base.dart deleted file mode 100644 index f8ce2d42d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFillViewport/node1_base.dart +++ /dev/null @@ -1,112 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class SliverFillViewportDemo extends StatefulWidget { - const SliverFillViewportDemo({Key? key}) : super(key: key); - - @override - _SliverFillViewportDemoState createState() => _SliverFillViewportDemoState(); -} - -class _SliverFillViewportDemoState extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - double _viewportFraction = 0.5; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildTool(), - SizedBox( - height: 300, - child: CustomScrollView( - slivers: [_buildSliverAppBar(), _buildSliverList()], - ), - ), - ], - ); - } - - Widget _buildSliverList() => SliverFillViewport( - viewportFraction: _viewportFraction, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - _buildTool() { - return Slider( - value: _viewportFraction, - min: 0.01, - divisions: 20, - label: _viewportFraction.toStringAsFixed(1), - max: 2.0, - onChanged: (v) => setState(() => _viewportFraction = v)); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_de_DE.json deleted file mode 100644 index 229d8972b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Sliver feste erweiterte Liste", - "info": "Eine Listenkomponente der Sliver-Familie, die über einen Delegate Unterkomponenten konstruiert und die Höhe der Elemente festlegen kann. Wird häufig in CustomScrollView verwendet.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverFixedExtentList", - "desc": [ - "【itemExtent】 : Erzwungene Länge in Hauptachsenrichtung 【double】", - "【delegate】 : Kinderdelegat 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_en_US.json deleted file mode 100644 index 157222576..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Sliver Fixed Extent List", - "info": "A list component of the Sliver family, which constructs child components through a delegate and can specify the height of the item. It is commonly used in CustomScrollView.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverFixedExtentList", - "desc": [ - "【itemExtent】: Forced length in the main axis 【double】", - "【delegate】: Child delegate 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_es_ES.json deleted file mode 100644 index cefbb2aff..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Lista de extensión fija de Sliver", - "info": "Componente de lista de la familia Sliver, que construye subcomponentes a través de un delegado y puede especificar la altura de los elementos. Normalmente se utiliza en CustomScrollView.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverFixedExtentList", - "desc": [ - "【itemExtent】 : Longitud forzada en la dirección del eje principal 【double】", - "【delegate】 : Delegado de hijos 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_fr_FR.json deleted file mode 100644 index 35b9e914f..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Liste d'extension fixe Sliver", - "info": "Composant de liste de la famille Sliver, qui construit les sous-composants via un délégué et permet de spécifier la hauteur des éléments. Généralement utilisé dans CustomScrollView.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverFixedExtentList", - "desc": [ - "【itemExtent】 : Longueur forcée dans la direction principale 【double】", - "【delegate】 : Délégué des enfants 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_it_IT.json deleted file mode 100644 index 655ceb5af..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Lista estensibile fissa Sliver", - "info": "Componente della lista della famiglia Sliver, che costruisce i componenti figli tramite il delegate, consente di specificare l'altezza dell'elemento. Solitamente utilizzato in CustomScrollView.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverFixedExtentList", - "desc": [ - "【itemExtent】 : Lunghezza forzata nella direzione dell'asse principale 【double】", - "【delegate】 : Delegato dei figli 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ja_JP.json deleted file mode 100644 index 430e43830..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Sliver固定延展リスト", - "info": "Sliverファミリーのリストコンポーネントで、delegateを使用して子コンポーネントを構築し、アイテムの高さを指定できます。通常、CustomScrollViewで使用されます。", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFixedExtentList基本使用", - "desc": [ - "【itemExtent】 : 主軸方向の強制長さ 【double】", - "【delegate】 : 子要素の代理 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ko_KR.json deleted file mode 100644 index a2579c185..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Sliver 고정 확장 리스트", - "info": "Sliver 패밀리의 리스트 컴포넌트로, delegate를 통해 자식 컴포넌트를 구성하고, 아이템의 높이를 지정할 수 있습니다. 일반적으로 CustomScrollView에서 사용됩니다.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFixedExtentList 기본 사용", - "desc": [ - "【itemExtent】 : 주축 방향 강제 길이 【double】", - "【delegate】 : 자식 대리자 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_pt_PT.json deleted file mode 100644 index 21fa98fd1..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Lista de Extensão Fixa Sliver", - "info": "Componente de lista da família Sliver, que constrói subcomponentes através de um delegate, permitindo especificar a altura do item. Geralmente usado em CustomScrollView.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SliverFixedExtentList", - "desc": [ - "【itemExtent】 : Comprimento forçado na direção do eixo principal 【double】", - "【delegate】 : Delegate dos filhos 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ru_RU.json deleted file mode 100644 index b2e677eb5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Sliver фиксированный расширяемый список", - "info": "Компонент списка семейства Sliver, который создает дочерние компоненты через делегат и позволяет указать высоту элемента. Обычно используется в CustomScrollView.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverFixedExtentList", - "desc": [ - "【itemExtent】 : Принудительная длина по главной оси 【double】", - "【delegate】 : Делегат дочерних элементов 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_zh-CN.json deleted file mode 100644 index cc974701a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 186, - "name": "SliverFixedExtentList", - "localName": "Sliver固定延展列表", - "info": "Sliver家族的列表组件,通过delegate构造子组件,可以指定item的高度。通常用于CustomScrollView中。", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 185, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverFixedExtentList基本使用", - "desc": [ - "【itemExtent】 : 主轴方向强迫长度 【double】", - "【delegate】 : 孩子代理 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/node1_base.dart deleted file mode 100644 index 11efccb23..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverFixedExtentList/node1_base.dart +++ /dev/null @@ -1,96 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class SliverFixedExtentListDemo extends StatefulWidget { - const SliverFixedExtentListDemo({Key? key}) : super(key: key); - - @override - _SliverFixedExtentListDemoState createState() => _SliverFixedExtentListDemoState(); -} - -class _SliverFixedExtentListDemoState extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [_buildSliverAppBar(), _buildSliverList()], - ), - ); - } - - Widget _buildSliverList() => SliverFixedExtentList( - itemExtent: 50, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_de_DE.json deleted file mode 100644 index af3048152..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Sliver-Gitter", - "info": "Ein Gitterlisten-Widget der Sliver-Familie, ähnlich wie GirdView, das durch count und extent konstruiert wird. Wird normalerweise in CustomScrollView verwendet.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverList", - "desc": [ - "SliverGrid.count Konstruktion mit spezifizierter axialer Anzahl", - "SliverGrid.extent Konstruktion mit spezifizierter axialer Länge", - "Attributeigenschaften sind ähnlich wie bei GridView, siehe dazu" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_en_US.json deleted file mode 100644 index 89980569a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Sliver Grid", - "info": "A grid list component of the Sliver family, similar to GridView, constructed with count and extent. Usually used in CustomScrollView.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverList", - "desc": [ - "SliverGrid.count constructs with specified axial count", - "SliverGrid.extent constructs with specified axial length", - "The attribute characteristics are the same as GridView, see it for details" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_es_ES.json deleted file mode 100644 index f0ccd1a73..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Cuadrícula Sliver", - "info": "Componente de lista de cuadrícula de la familia Sliver, similar a GirdView, construido a través de count y extent. Normalmente se utiliza en CustomScrollView.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverList", - "desc": [ - "SliverGrid.count construye especificando la cantidad axial", - "SliverGrid.extent construye especificando la longitud axial", - "Las características de los atributos son las mismas que GridView, se pueden ver en detalle" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_fr_FR.json deleted file mode 100644 index feac18d1b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Grille Sliver", - "info": "Composant de liste de grille de la famille Sliver, similaire à GirdView, construit via count et extent. Généralement utilisé dans CustomScrollView.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverList", - "desc": [ - "SliverGrid.count construction avec un nombre spécifié dans l'axe", - "SliverGrid.extent construction avec une longueur spécifiée dans l'axe", - "Les caractéristiques des propriétés sont similaires à GridView, voir les détails" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_it_IT.json deleted file mode 100644 index 1fa0db2f8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Griglia Sliver", - "info": "Componente della lista a griglia della famiglia Sliver, simile a GirdView, costruito tramite count e extent. Solitamente utilizzato in CustomScrollView.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverList", - "desc": [ - "SliverGrid.count costruisce specificando il numero di assi", - "SliverGrid.extent costruisce specificando la lunghezza dell'asse", - "Le caratteristiche degli attributi sono le stesse di GridView, si può fare riferimento a quello per i dettagli" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ja_JP.json deleted file mode 100644 index f453572b3..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Sliverグリッド", - "info": "Sliverファミリーのグリッドリストコンポーネントで、GirdViewと類似しており、countとextentで構築されます。通常はCustomScrollViewで使用されます。", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverListの基本的な使用", - "desc": [ - "SliverGrid.count 軸方向の数を指定して構築", - "SliverGrid.extent 軸方向の長さを指定して構築", - "属性特性はGridViewと同じで、詳細はそちらを参照してください" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ko_KR.json deleted file mode 100644 index 9495f1c04..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Sliver 그리드", - "info": "Sliver 패밀리의 그리드 리스트 컴포넌트로, GirdView와 유사하며 count와 extent로 구성됩니다. 주로 CustomScrollView에서 사용됩니다.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverList 기본 사용", - "desc": [ - "SliverGrid.count는 축 방향 수량으로 구성", - "SliverGrid.extent는 축 방향 길이로 구성", - "속성 특성은 GridView와 동일하며, 자세한 내용은 해당 문서 참조" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_pt_PT.json deleted file mode 100644 index 68b0edae6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Grelha Sliver", - "info": "Componente de lista de grelha da família Sliver, semelhante ao GirdView, construído através de count e extent. Geralmente usado em CustomScrollView.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverList", - "desc": [ - "SliverGrid.count especifica a construção do número axial", - "SliverGrid.extent especifica a construção do comprimento axial", - "As características dos atributos são semelhantes ao GridView, consulte para mais detalhes" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ru_RU.json deleted file mode 100644 index 9bb25afd9..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Sliver сетка", - "info": "Компонент списка сетки семейства Sliver, аналогичный GirdView, создается с помощью count и extent. Обычно используется в CustomScrollView.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverList", - "desc": [ - "SliverGrid.count создается с указанием количества по оси", - "SliverGrid.extent создается с указанием длины по оси", - "Характеристики атрибутов такие же, как у GridView, подробности см. в нем" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_zh-CN.json deleted file mode 100644 index 0a409789d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 188, - "name": "SliverGrid", - "localName": "Sliver网格", - "info": "Sliver家族的网格列表组件,和GirdView类似,通过count和extent构造。通常用于CustomScrollView中。", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverList基本使用", - "desc": [ - "SliverGrid.count 指定轴向数量构造", - "SliverGrid.extent 指定轴向长度构造", - "属性特征同GridView,可详见之" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverGrid/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverGrid/node1_base.dart deleted file mode 100644 index eef958f66..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverGrid/node1_base.dart +++ /dev/null @@ -1,82 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class SliverGirdDemo extends StatelessWidget { - const SliverGirdDemo({super.key}); - - List get data => List.generate(128, (i) => Color(0xFF6600FF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [_buildSliverAppBar(), _buildSliverList()], - ), - ); - } - - Widget _buildSliverList() => SliverGrid.extent( - childAspectRatio: 1 / 0.618, - maxCrossAxisExtent: 180, - crossAxisSpacing: 5, - mainAxisSpacing: 5, - children: data - .map((e) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: e, - child: Text( - colorString(e), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - )) - .toList(), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_de_DE.json deleted file mode 100644 index 27f63ad39..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver ignorieren Ereignisse", - "info": "Kann ein Sliver-Widget umhüllen und durch ignoring steuern, ob dieses Sliver-Widget auf Ereignisse reagieren kann.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverIgnorePointer", - "desc": [ - "【sliver】: Sliver-Widget 【Widget】", - "【ignoring】: Ereignisse ignorieren 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_en_US.json deleted file mode 100644 index ca7fcfdba..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver Ignore Events", - "info": "Can wrap a sliver component, and control whether the sliver component can respond to events through ignoring.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverIgnorePointer", - "desc": [ - "【sliver】: sliver component 【Widget】", - "【ignoring】: whether to ignore events 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_es_ES.json deleted file mode 100644 index f838f0f7b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver ignorar eventos", - "info": "Puede envolver un componente sliver, y controlar si este componente sliver puede responder a eventos a través de ignoring.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverIgnorePointer", - "desc": [ - "【sliver】: componente sliver 【Widget】", - "【ignoring】: si se ignoran los eventos 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_fr_FR.json deleted file mode 100644 index 5e97cdb64..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver Ignorer les Événements", - "info": "Peut envelopper un composant sliver, en contrôlant via 'ignoring' si ce composant sliver peut répondre aux événements.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverIgnorePointer", - "desc": [ - "【sliver】 : composant sliver 【Widget】", - "【ignoring】 : ignorer les événements 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_it_IT.json deleted file mode 100644 index a66bb9ddb..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver ignora eventi", - "info": "Può avvolgere un componente sliver, controllando se il componente sliver può rispondere agli eventi tramite ignoring.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverIgnorePointer", - "desc": [ - "【sliver】: componente sliver 【Widget】", - "【ignoring】: ignora eventi 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ja_JP.json deleted file mode 100644 index be0974556..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliverイベント無視", - "info": "sliverコンポーネントをラップし、ignoringを使用してそのsliverコンポーネントがイベントに応答するかどうかを制御できます。", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverIgnorePointerの基本使用", - "desc": [ - "【sliver】 : sliverコンポーネント 【Widget】", - "【ignoring】 : イベントを無視するかどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ko_KR.json deleted file mode 100644 index 44933a44e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver 이벤트 무시", - "info": "sliver 컴포넌트를 감싸고, ignoring을 통해 해당 sliver 컴포넌트가 이벤트에 반응할지 여부를 제어할 수 있습니다.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverIgnorePointer 기본 사용", - "desc": [ - "【sliver】 : sliver 컴포넌트 【Widget】", - "【ignoring】 : 이벤트 무시 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_pt_PT.json deleted file mode 100644 index 8aba19ebe..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver Ignorar Eventos", - "info": "Pode envolver um componente sliver, controlando através de ignoring se este componente sliver pode responder a eventos.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SliverIgnorePointer", - "desc": [ - "【sliver】: componente sliver 【Widget】", - "【ignoring】: ignorar eventos 【bool】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ru_RU.json deleted file mode 100644 index cbe4f7b47..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver игнорировать события", - "info": "Может обернуть sliver-компонент, и с помощью ignoring контролировать, может ли этот sliver-компонент реагировать на события.", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverIgnorePointer", - "desc": [ - "【sliver】 : sliver-компонент 【Widget】", - "【ignoring】 : игнорировать ли события 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_zh-CN.json deleted file mode 100644 index b3273228a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 305, - "name": "SliverIgnorePointer", - "localName": "Sliver忽略事件", - "info": "可以包裹一个sliver组件,通过ignoring来控制该sliver组件是否可以响应事件。", - "lever": 3, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverIgnorePointer基本使用", - "desc": [ - "【sliver】 : sliver组件 【Widget】", - "【ignoring】 : 是否忽略事件 【bool】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/node1_base.dart deleted file mode 100644 index 28123a777..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverIgnorePointer/node1_base.dart +++ /dev/null @@ -1,151 +0,0 @@ -import 'dart:math'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class SliverIgnorePointerDemo extends StatefulWidget { - const SliverIgnorePointerDemo({Key? key}) : super(key: key); - - @override - _SliverIgnorePointerDemoState createState() => - _SliverIgnorePointerDemoState(); -} - -class _SliverIgnorePointerDemoState extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - final Random r = Random(); - bool hasScrollBody = false; - bool fillOverscroll = true; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - physics: const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()), - slivers: [ - _buildSliverAppBar(), - _buildSliverList(), - SliverIgnorePointer( - ignoring: true, - sliver: SliverFillRemaining( - hasScrollBody: hasScrollBody, - fillOverscroll: fillOverscroll, - child: Container( - decoration: const BoxDecoration( - image: DecorationImage( - fit: BoxFit.cover, - image: AssetImage("assets/images/sabar_bar.webp"))), - // // color: Colors.teal[100], - child: _buildBottomChild(), - ), - ), - ), - ], - ), - ); - } - - Widget _buildBottomChild() => Align( - alignment: Alignment.bottomCenter, - child: Padding( - padding: const EdgeInsets.all(16.0), - child: Wrap( - spacing: 10, - children: [ - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - ), - onPressed: () { - setState(() { - hasScrollBody = !hasScrollBody; - }); - }, - child: Text('hasScrollBody:$hasScrollBody',style: const TextStyle(color: Colors.white),), - ), - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - ), - onPressed: () { - setState(() { - fillOverscroll = !fillOverscroll; - }); - }, - child: Text('fillOverscroll:$fillOverscroll',style: const TextStyle(color: Colors.white)), - ), - ], - ), - ), - ); - - Widget _buildSliverList() => SliverFixedExtentList( - itemExtent: 50, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 120.0, - leading: Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_de_DE.json deleted file mode 100644 index 77965bcf6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Sliver-Layout-Builder", - "info": "Ein Mitglied der Sliver-Familie, das während des Scrollvorgangs durch das zurückgegebene SliverConstraints-Objekt die Konstruktion von Unterkomponenten ermöglicht.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverLayoutBuilder", - "desc": [ - "【builder】 : Komponentenkonstruktor 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_en_US.json deleted file mode 100644 index 92c87ab49..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Sliver Layout Builder", - "info": "A member of the Sliver family, which allows the construction of child components through the SliverConstraints object during the scrolling process.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverLayoutBuilder", - "desc": [ - "【builder】: Component Builder 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_es_ES.json deleted file mode 100644 index 9983b1ea1..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Constructor de diseño Sliver", - "info": "Miembro de la familia Sliver, que permite la construcción de componentes secundarios a través del objeto SliverConstraints devuelto durante el desplazamiento.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverLayoutBuilder", - "desc": [ - "【builder】: Constructor de componentes 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_fr_FR.json deleted file mode 100644 index eca65d512..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Constructeur de mise en page Sliver", - "info": "Membre de la famille Sliver, il permet de construire des composants enfants via l'objet SliverConstraints rappelé pendant le défilement.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverLayoutBuilder", - "desc": [ - "【builder】 : Constructeur de composant 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_it_IT.json deleted file mode 100644 index a2d547f6d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Costruttore di layout Sliver", - "info": "Membro della famiglia Sliver, durante lo scorrimento è possibile costruire i componenti figli utilizzando l'oggetto SliverConstraints restituito dalla callback.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverLayoutBuilder", - "desc": [ - "【builder】 : Costruttore di componenti 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ja_JP.json deleted file mode 100644 index 26a99a1fa..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Sliverレイアウトビルダー", - "info": "Sliverファミリーの一員で、スライド中にコールバックされるSliverConstraintsオブジェクトを使用して子コンポーネントを構築できます。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverLayoutBuilderの基本使用", - "desc": [ - "【builder】 : コンポーネントビルダー 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ko_KR.json deleted file mode 100644 index 84a48d73c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Sliver 레이아웃 빌더", - "info": "Sliver 패밀리의 일원으로, 스크롤 중에 콜백된 SliverConstraints 객체를 통해 하위 컴포넌트를 구성할 수 있습니다.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverLayoutBuilder 기본 사용", - "desc": [ - "【builder】 : 컴포넌트 빌더 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_pt_PT.json deleted file mode 100644 index 46c083b23..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Construtor de Layout Sliver", - "info": "Membro da família Sliver, que permite a construção de componentes filhos através do objeto SliverConstraints retornado durante o deslizamento.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do SliverLayoutBuilder", - "desc": [ - "【builder】 : Construtor de componentes 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ru_RU.json deleted file mode 100644 index 0daadcdd5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Конструктор макета Sliver", - "info": "Член семейства Sliver, который позволяет создавать дочерние компоненты через объект SliverConstraints, возвращаемый в процессе прокрутки.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverLayoutBuilder", - "desc": [ - "【builder】 : Конструктор компонентов 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_zh-CN.json deleted file mode 100644 index 4e8ad40a2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 304, - "name": "SliverLayoutBuilder", - "localName": "Sliver布局构造器", - "info": "Sliver家族一员,在滑动过程中可以通过回调出的 SliverConstraints 对象进行子组件的构造。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 251 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverLayoutBuilder基本使用", - "desc": [ - "【builder】 : 组件构造器 【SliverLayoutWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/node1_base.dart deleted file mode 100644 index 88ec65aa6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverLayoutBuilder/node1_base.dart +++ /dev/null @@ -1,117 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; - - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class SliverLayoutBuilderDemo extends StatefulWidget { - const SliverLayoutBuilderDemo({Key? key}) : super(key: key); - - @override - _SliverLayoutBuilderDemoState createState() => - _SliverLayoutBuilderDemoState(); -} - -class _SliverLayoutBuilderDemoState extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - physics: const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()), - slivers: [ - _buildSliverAppBar(), - SliverLayoutBuilder( - builder: _buildSliver, - ), - _buildSliverList(), - ], - ), - ); - } - - Widget _buildSliverList() => SliverFixedExtentList( - itemExtent: 50, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 120.0, - leading: Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - Widget _buildSliver(BuildContext context, SliverConstraints constraints) { - return SliverToBoxAdapter( - child: Container( - alignment: Alignment.center, - height: constraints.remainingPaintExtent / 3, - color: Colors.red, - child: const Text( - "SliverLayoutBuilder", - style: TextStyle(color: Colors.white, fontSize: 20), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_de_DE.json deleted file mode 100644 index e55576cb8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Sliver-Liste", - "info": "Eine Listenkomponente der Sliver-Familie, die durch die Angabe eines Delegaten Unterkomponenten erstellt. Wird normalerweise in CustomScrollView verwendet.", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverList", - "desc": [ - "【delegate】 : Kinderdelegierter 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_en_US.json deleted file mode 100644 index 74c968487..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Sliver List", - "info": "A list component of the Sliver family, which constructs child components by specifying a delegate. It is commonly used in CustomScrollView.", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverList", - "desc": [ - "【delegate】: Child delegate 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_es_ES.json deleted file mode 100644 index 4be4dda9c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Lista Sliver", - "info": "Componente de lista de la familia Sliver, que construye subcomponentes especificando un delegate. Normalmente se utiliza en CustomScrollView.", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverList", - "desc": [ - "【delegate】 : Delegado de hijos 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_fr_FR.json deleted file mode 100644 index 81be999c3..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Liste Sliver", - "info": "Composant de liste de la famille Sliver, qui construit des sous-composants en spécifiant un délégué. Généralement utilisé dans CustomScrollView.", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverList", - "desc": [ - "【delegate】 : délégué des enfants 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_it_IT.json deleted file mode 100644 index d5cda55ea..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Lista Sliver", - "info": "Componente lista della famiglia Sliver, che costruisce i componenti figli specificando un delegate. Comunemente utilizzato in CustomScrollView.", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverList", - "desc": [ - "【delegate】 : delegato dei figli 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ja_JP.json deleted file mode 100644 index 952207b9a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Sliverリスト", - "info": "Sliverファミリーのリストコンポーネントで、delegateを指定して子コンポーネントを構築します。通常、CustomScrollViewで使用されます。", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverListの基本使用", - "desc": [ - "【delegate】 : 子デリゲート 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ko_KR.json deleted file mode 100644 index ab539a54b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Sliver 리스트", - "info": "Sliver 패밀리의 리스트 컴포넌트로, delegate를 지정하여 자식 컴포넌트를 구성합니다. 주로 CustomScrollView에서 사용됩니다.", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverList 기본 사용", - "desc": [ - "【delegate】 : 자식 대리 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_pt_PT.json deleted file mode 100644 index e5dbe650e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Lista Sliver", - "info": "Componente de lista da família Sliver, que constrói subcomponentes especificando um delegate. Normalmente usado em CustomScrollView.", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do SliverList", - "desc": [ - "【delegate】 : Delegado de filhos 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ru_RU.json deleted file mode 100644 index 0aed51200..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Список Sliver", - "info": "Компонент списка семейства Sliver, который создает дочерние элементы через указанный делегат. Обычно используется в CustomScrollView.", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverList", - "desc": [ - "【delegate】 : Дочерний делегат 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverList/desc_zh-CN.json deleted file mode 100644 index 6b776f337..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 185, - "name": "SliverList", - "localName": "Sliver列表", - "info": "Sliver家族的列表组件,通过指定delegate构造子组件。通常用于CustomScrollView中。", - "lever": 5, - "family": 4, - "linkIds": [ - 183, - 186, - 187 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverList基本使用", - "desc": [ - "【delegate】 : 孩子代理 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverList/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverList/node1_base.dart deleted file mode 100644 index ea903dca2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverList/node1_base.dart +++ /dev/null @@ -1,89 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class SliverListDemo extends StatelessWidget { - const SliverListDemo({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [_buildSliverAppBar(), _buildSliverList()], - ), - ); - } - - Widget _buildSliverList() => SliverList( - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_de_DE.json deleted file mode 100644 index b7417fa72..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "Hauptachsen-Sliver-Gruppe", - "info": "Kann mehrere Sliver-Komponenten aufnehmen, die in der gleitenden Hauptachsenrichtung als Gruppe behandelt werden.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Grundlegende Verwendung von SliverMainAxisGroup", - "desc": [ - "【slivers】 : Liste der Unterkomponenten 【List】", - "Kann mit SliverPersistentHeader kombiniert werden, um Gruppierungen und den Effekt von fixierten Überschriften zu erzielen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_en_US.json deleted file mode 100644 index 8478aa50b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "Main Axis Sliver Group", - "info": "Can accommodate multiple Sliver components, treating them as a group in the sliding main axis direction.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Basic Usage of SliverMainAxisGroup", - "desc": [ - "【slivers】: List of child components 【List】", - "Can be combined with SliverPersistentHeader to achieve grouping and sticky header effects." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_es_ES.json deleted file mode 100644 index 8665856fa..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "Grupo de deslizamiento del eje principal", - "info": "Puede contener múltiples componentes Sliver, permitiendo que se consideren como un grupo en la dirección del eje principal de desplazamiento.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso básico de SliverMainAxisGroup", - "desc": [ - "【slivers】 : Lista de componentes hijos 【List】", - "Se puede combinar con SliverPersistentHeader para lograr un efecto de agrupación y fijación de títulos en la parte superior." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_fr_FR.json deleted file mode 100644 index 7a5206ece..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "Groupe d'axe principal glissant", - "info": "Peut contenir plusieurs composants Sliver, les considérant comme un groupe dans la direction de l'axe principal de défilement.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de base de SliverMainAxisGroup", - "desc": [ - "【slivers】 : Liste des composants enfants 【List】", - "Peut être combiné avec SliverPersistentHeader pour réaliser un effet de regroupement et de fixation du titre en haut." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_it_IT.json deleted file mode 100644 index 776ae341b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "Gruppo di Sliver sull'Asse Principale", - "info": "Può contenere più componenti Sliver, trattandoli come un gruppo nella direzione di scorrimento dell'asse principale.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso di base di SliverMainAxisGroup", - "desc": [ - "【slivers】 : Lista dei componenti figli 【List】", - "Può essere combinato con SliverPersistentHeader per realizzare raggruppamenti e l'effetto di titolo fisso in cima." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ja_JP.json deleted file mode 100644 index 046878ed1..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "主軸スライダーグループ", - "info": "複数のSliverコンポーネントを収容し、それらをスクロールする主軸方向で一つのグループとして扱うことができます。", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverMainAxisGroup 基本使用", - "desc": [ - "【slivers】 : 子コンポーネントリスト 【List】", - "SliverPersistentHeaderと組み合わせて、グループ化やタイトルの吸着効果を実現できます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ko_KR.json deleted file mode 100644 index 590367abe..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "주축 슬라이더 그룹", - "info": "여러 개의 Sliver 컴포넌트를 수용할 수 있으며, 스크롤하는 주축 방향에서 하나의 그룹으로 간주됩니다.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverMainAxisGroup 기본 사용법", - "desc": [ - "【slivers】 : 자식 컴포넌트 리스트 【List】", - "SliverPersistentHeader와 결합하여 그룹화 및 제목 고정 효과를 구현할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_pt_PT.json deleted file mode 100644 index ba26253b6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "Grupo de Slides do Eixo Principal", - "info": "Pode conter vários componentes Sliver, permitindo que sejam tratados como um grupo na direção do eixo de deslizamento.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso Básico do SliverMainAxisGroup", - "desc": [ - "【slivers】 : Lista de componentes filhos 【List】", - "Pode ser combinado com SliverPersistentHeader para alcançar efeitos de agrupamento e fixação de títulos no topo." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ru_RU.json deleted file mode 100644 index 5b8092840..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "Группа слайдеров главной оси", - "info": "Может содержать несколько компонентов Sliver, позволяя рассматривать их как группу в направлении скольжения главной оси.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Основное использование SliverMainAxisGroup", - "desc": [ - "【slivers】 : Список дочерних компонентов 【List】", - "Может использоваться в сочетании с SliverPersistentHeader для реализации группировки и эффекта прилипания заголовка." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_zh-CN.json deleted file mode 100644 index 7abcc8f92..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 268, - "name": "SliverMainAxisGroup", - "localName": "主轴滑片组", - "info": "可以容纳多个 Sliver 组件,让它们在滑动的主轴方向上视为一组。", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "SliverMainAxisGroup 基本使用", - "desc": [ - "【slivers】 : 子组件列表 【List】", - "可结合 SliverPersistentHeader 实现分组,标题吸顶效果。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/node1.dart b/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/node1.dart deleted file mode 100644 index 5675f9e07..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverMainAxisGroup/node1.dart +++ /dev/null @@ -1,95 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/8/18 -/// contact me by email 1981462002@qq.com - -class ItemData { - final String groupName; - final List users; - - ItemData({required this.groupName, this.users = const []}); - - static List get testData => [ - ItemData(groupName: '幻将术士', users: ['梦小梦', '梦千']), - ItemData( - groupName: '幻将剑客', users: ['捷特', '龙少', '莫向阳', '何解连', '浪封', '梦飞烟']), - ItemData(groupName: '幻将弓者', users: ['巫缨', '巫妻孋', '摄王', '裔王', '梦童']), - ItemData( - groupName: '其他', users: List.generate(20, (index) => '小兵$index')), - ]; -} - -class SliverMainAxisGroupDemo extends StatelessWidget{ - const SliverMainAxisGroupDemo({super.key}); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: ItemData.testData.map(_buildGroup).toList(), - ), - ); - } - - Widget _buildGroup(ItemData itemData) { - return SliverMainAxisGroup(slivers: [ - SliverPersistentHeader( - pinned: true, - delegate: _HeaderDelegate(itemData.groupName), - ), - SliverList( - // tag2 - delegate: SliverChildBuilderDelegate( - (_, index) => _buildItemByUser(itemData.users[index]), - childCount: itemData.users.length, - ), - ), - ]); - } - - Widget _buildItemByUser(String user) { - return Container( - alignment: Alignment.center, - height: 56, - child: Row( - children: [ - const Padding( - padding: EdgeInsets.only(left: 20, right: 10.0), - child: FlutterLogo(size: 30), - ), - Text( - user, - style: const TextStyle(fontSize: 16), - ), - ], - ), - ); - } -} - -class _HeaderDelegate extends SliverPersistentHeaderDelegate { - const _HeaderDelegate(this.title); - - final String title; - - @override - Widget build( - BuildContext context, double shrinkOffset, bool overlapsContent) { - return Container( - alignment: Alignment.centerLeft, - color: const Color(0xffF6F6F6), - padding: const EdgeInsets.only(left: 20), - height: 40, - child: Text(title)); - } - - @override - double get maxExtent => minExtent; - - @override - double get minExtent => 40; - - @override - bool shouldRebuild(covariant _HeaderDelegate oldDelegate) => title!=oldDelegate.title; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_de_DE.json deleted file mode 100644 index 50b283d3b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Sliver Transparenz", - "info": "Kann ein Kindelement der Sliver-Familie aufnehmen und die Transparenz des Kindelements durch opacity angeben.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverOpacity", - "desc": [ - "【opacity】 : Transparenz 【double】", - "【sliver】 : Kindelement 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_en_US.json deleted file mode 100644 index a3d1e34e7..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Sliver Opacity", - "info": "Can accommodate a child component of the Sliver family and specify the opacity of the child component through opacity.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverOpacity", - "desc": [ - "【opacity】: Opacity 【double】", - "【sliver】: Child Component 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_es_ES.json deleted file mode 100644 index 1a4aac8d1..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Opacidad de Sliver", - "info": "Puede contener un componente hijo de la familia Sliver y especificar la opacidad del componente hijo a través de opacity.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverOpacity", - "desc": [ - "【opacity】 : Opacidad 【double】", - "【sliver】 : Componente hijo 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_fr_FR.json deleted file mode 100644 index 626274032..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Opacité de Sliver", - "info": "Peut contenir un composant enfant de la famille Sliver et spécifier l'opacité du composant enfant via opacity.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverOpacity", - "desc": [ - "【opacity】 : opacité 【double】", - "【sliver】 : composant enfant 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_it_IT.json deleted file mode 100644 index 25668b4c4..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Opacità Sliver", - "info": "Può contenere un componente figlio della famiglia Sliver e specificare l'opacità del componente figlio tramite opacity.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverOpacity", - "desc": [ - "【opacity】 : opacità 【double】", - "【sliver】 : componente figlio 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ja_JP.json deleted file mode 100644 index ff4b4bcb1..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Sliver透明度", - "info": "Sliverファミリーの子コンポーネントを収容でき、opacityを通じて子コンポーネントの透明度を指定できます。", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOpacityの基本使用", - "desc": [ - "【opacity】 : 透明度 【double】", - "【sliver】 : 子コンポーネント 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ko_KR.json deleted file mode 100644 index 09c331943..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Sliver 투명도", - "info": "Sliver 계열의 자식 위젯을 포함할 수 있으며, opacity를 통해 자식 위젯의 투명도를 지정할 수 있습니다.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOpacity 기본 사용", - "desc": [ - "【opacity】 : 투명도 【double】", - "【sliver】 : 자식 위젯 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_pt_PT.json deleted file mode 100644 index 4f9e76ef5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Opacidade Sliver", - "info": "Pode acomodar um componente filho da família Sliver e especificar a opacidade do componente filho através de opacity.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do SliverOpacity", - "desc": [ - "【opacity】 : opacidade 【double】", - "【sliver】 : componente filho 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ru_RU.json deleted file mode 100644 index ca602737c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Прозрачность Sliver", - "info": "Может содержать дочерний компонент из семейства Sliver и указывать прозрачность дочернего компонента через opacity.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverOpacity", - "desc": [ - "【opacity】 : прозрачность 【double】", - "【sliver】 : дочерний компонент 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_zh-CN.json deleted file mode 100644 index 7aa31a0b9..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 192, - "name": "SliverOpacity", - "localName": "Sliver透明度", - "info": "可容纳一个Sliver家族的子组件,并通过opacity来指定子组件的透明度。", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOpacity基本使用", - "desc": [ - "【opacity】 : 透明度 【double】", - "【sliver】 : 子组件 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverOpacity/node1_base.dart deleted file mode 100644 index 209d76299..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOpacity/node1_base.dart +++ /dev/null @@ -1,87 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class SliverOpacityDemo extends StatelessWidget { - const SliverOpacityDemo({super.key}); - - List get data => List.generate(128, (i) => Color(0xFF6600FF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - _buildSliverAppBar(), - SliverPadding( - padding: const EdgeInsets.only(top: 10), - sliver: SliverOpacity(opacity: 0.2, sliver: _buildSliverGrid())) - ], - ), - ); - } - - Widget _buildSliverGrid() => SliverGrid.extent( - childAspectRatio: 1 / 0.618, - maxCrossAxisExtent: 180, - crossAxisSpacing: 5, - mainAxisSpacing: 5, - children: data - .map((e) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: e, - child: Text( - colorString(e), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - )) - .toList(), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_de_DE.json deleted file mode 100644 index 8067bd074..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "Überlappungsabsorber", - "info": "Wickelt einen anderen Sliver ein und zwingt ihn, seinen Layoutbereich als überlappend zu betrachten. Muss in Verbindung mit SliverOverlapInjector verwendet werden.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverOverlapAbsorber", - "desc": [ - "【sliver】 : Untergeordnete Komponente 【Widget】", - "【handle】 : *Handler 【SliverOverlapAbsorberHandle】", - "Wenn die Komponenten SliverOverlapAbsorber und SliverOverlapInjector nicht verwendet werden, überlappt der Inhalt von NestedScrollView die Kopfleiste." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_en_US.json deleted file mode 100644 index b582af345..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "Overlap Absorber", - "info": "Wraps another sliver and forces its layout extent to be treated as overlapping. Needs to be used in conjunction with SliverOverlapInjector.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverOverlapAbsorber", - "desc": [ - "【sliver】 : Child component 【Widget】", - "【handle】 : *Handler 【SliverOverlapAbsorberHandle】", - "If the SliverOverlapAbsorber and SliverOverlapInjector components are not used, the content of the NestedScrollView will overlap with the header bar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_es_ES.json deleted file mode 100644 index b04a0462e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "Absorbedor de superposición", - "info": "Envuelve otro sliver y fuerza a que su rango de diseño sea considerado como superposición. Debe usarse junto con SliverOverlapInjector.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverOverlapAbsorber", - "desc": [ - "【sliver】 : Componente hijo 【Widget】", - "【handle】 : *Manejador 【SliverOverlapAbsorberHandle】", - "Si no se utilizan los componentes SliverOverlapAbsorber y SliverOverlapInjector, el contenido de NestedScrollView se superpondrá con la barra de encabezado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_fr_FR.json deleted file mode 100644 index 11f241768..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "Absorbeur de chevauchement", - "info": "Enveloppe un autre sliver et force sa plage de disposition à être considérée comme un chevauchement. Doit être utilisé avec SliverOverlapInjector.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverOverlapAbsorber", - "desc": [ - "【sliver】 : Composant enfant 【Widget】", - "【handle】 : *Gestionnaire 【SliverOverlapAbsorberHandle】", - "Si vous n'utilisez pas les composants SliverOverlapAbsorber et SliverOverlapInjector, le contenu de NestedScrollView se chevauchera avec la barre d'en-tête." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_it_IT.json deleted file mode 100644 index 621213c43..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "Assorbitore di Sovrapposizione", - "info": "Avvolge un altro sliver e costringe la sua area di layout a essere considerata sovrapposta. Deve essere utilizzato insieme a SliverOverlapInjector.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di SliverOverlapAbsorber", - "desc": [ - "【sliver】 : Componente figlio 【Widget】", - "【handle】 : *Gestore 【SliverOverlapAbsorberHandle】", - "Se non si utilizzano i componenti SliverOverlapAbsorber e SliverOverlapInjector, il contenuto di NestedScrollView si sovrapporrà alla barra dell'intestazione." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ja_JP.json deleted file mode 100644 index 698bb492a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "オーバーラップアブソーバー", - "info": "別のsliverをラップし、そのレイアウト範囲をオーバーラップとして扱うように強制します。SliverOverlapInjectorと一緒に使用する必要があります。", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOverlapAbsorberの基本的な使用法", - "desc": [ - "【sliver】 : 子コンポーネント 【Widget】", - "【handle】 : *ハンドラ 【SliverOverlapAbsorberHandle】", - "SliverOverlapAbsorberとSliverOverlapInjectorコンポーネントを使用しない場合、NestedScrollViewの内容がヘッダーバーと重なります。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ko_KR.json deleted file mode 100644 index 7181ed393..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "겹침 흡수기", - "info": "다른 sliver를 감싸고, 그 레이아웃 범위가 겹치는 것으로 간주되도록 강제합니다. SliverOverlapInjector와 함께 사용해야 합니다.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOverlapAbsorber 기본 사용", - "desc": [ - "【sliver】 : 자식 위젯 【Widget】", - "【handle】 *핸들러 【SliverOverlapAbsorberHandle】", - "SliverOverlapAbsorber와 SliverOverlapInjector 컴포넌트를 사용하지 않으면, NestedScrollView의 내용이 헤더 바와 겹치게 됩니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_pt_PT.json deleted file mode 100644 index 2fd274d6b..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "Absorvedor de Sobreposição", - "info": "Envolve outro sliver e força que o seu alcance de layout seja considerado sobreposto. Precisa ser usado em conjunto com o SliverOverlapInjector.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SliverOverlapAbsorber", - "desc": [ - "【sliver】 : Componente filho 【Widget】", - "【handle】 : *Manipulador 【SliverOverlapAbsorberHandle】", - "Se os componentes SliverOverlapAbsorber e SliverOverlapInjector não forem usados, o conteúdo do NestedScrollView sobreporá a barra de cabeçalho." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ru_RU.json deleted file mode 100644 index c7b565f77..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "Поглотитель перекрытия", - "info": "Обертывает другой sliver и заставляет его область макета считаться перекрывающейся. Необходимо использовать вместе с SliverOverlapInjector.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverOverlapAbsorber", - "desc": [ - "【sliver】 : Дочерний компонент 【Widget】", - "【handle】 : *Обработчик 【SliverOverlapAbsorberHandle】", - "Если не использовать компоненты SliverOverlapAbsorber и SliverOverlapInjector, содержимое NestedScrollView будет перекрываться с заголовком." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_zh-CN.json deleted file mode 100644 index 7ced33556..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 307, - "name": "SliverOverlapAbsorber", - "localName": "重叠吸收器", - "info": "包裹另一个的sliver,并迫使其布局范围被视为重叠。需要和SliverOverlapInjector联用。", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 308 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOverlapAbsorber基本使用", - "desc": [ - "【sliver】 : 子组件 【Widget】", - "【handle】 : *处理器 【SliverOverlapAbsorberHandle】", - "如果不使用SliverOverlapAbsorber和SliverOverlapInjector组件,NestedScrollView的内容会和头部栏重叠。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/node1_base.dart deleted file mode 100644 index 5373277fd..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapAbsorber/node1_base.dart +++ /dev/null @@ -1,92 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/6/16 -/// contact me by email 1981462002@qq.com - - -class SliverOverlapAbsorberDemo extends StatelessWidget { - const SliverOverlapAbsorberDemo({Key? key}) : super(key: key); - - final List _tabs = const ['风神传', '封妖志', "幻将录", "永恒传说"]; - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height - 200, - child: Scaffold( - body: DefaultTabController( - length: _tabs.length, - child: NestedScrollView( - headerSliverBuilder: - (BuildContext context, bool innerBoxIsScrolled) { - return [ - SliverOverlapAbsorber( - handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), - sliver: SliverAppBar( - title: const Text('旷古奇书'), - pinned: true, - elevation: 6, //影深 - expandedHeight: 220.0, - forceElevated: innerBoxIsScrolled, //为true时展开有阴影 - flexibleSpace: FlexibleSpaceBar( - background: Image.asset( - "assets/images/wy_300x200_filter.webp", - fit: BoxFit.cover, - ), - ), - bottom: TabBar( - tabs: _tabs - .map((String name) => Tab(text: name,)) - .toList(), - ), - ), - ), - ]; - }, - body: _buildTabBarView(), - ), - ), - )); - } - - Widget _buildTabBarView() { - return TabBarView( - children: _tabs.map((String name) { - return SafeArea( - top: false, - bottom: false, - child: Builder( - builder: (BuildContext context) { - return CustomScrollView( - key: PageStorageKey(name), - slivers: [ - SliverOverlapInjector( - handle: NestedScrollView.sliverOverlapAbsorberHandleFor( - context), - ), - buildContent(name), - ], - ); - }, - ), - ); - }).toList(), - ); - } - - Widget buildContent(String name) => SliverPadding( - padding: const EdgeInsets.all(8.0), - sliver: SliverFixedExtentList( - itemExtent: 48.0, - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) { - return ListTile( - title: Text('《$name》 第 $index章'), - ); - }, - childCount: 50, - ), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_de_DE.json deleted file mode 100644 index 50ef4e3fb..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "Überlappungsinjektor", - "info": "Ein Sliver, der in Verbindung mit SliverOverlapAbsorber verwendet werden muss, um Überlappungsprobleme in der Ansicht zu behandeln.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverOverlapInjector", - "desc": [ - "【sliver】 : Untergeordnete Komponente 【Widget】", - "【handle】 : *Handler 【SliverOverlapAbsorberHandle】", - "Wenn die Komponenten SliverOverlapAbsorber und SliverOverlapInjector nicht verwendet werden, überlappt der Inhalt von NestedScrollView die Kopfleiste." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_en_US.json deleted file mode 100644 index f942f82a6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "Overlap Injector", - "info": "A sliver that needs to be used with SliverOverlapAbsorber to handle view overlap issues.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverOverlapInjector", - "desc": [ - "【sliver】 : Child component 【Widget】", - "【handle】 : *Handler 【SliverOverlapAbsorberHandle】", - "If the SliverOverlapAbsorber and SliverOverlapInjector components are not used, the content of the NestedScrollView will overlap with the header bar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_es_ES.json deleted file mode 100644 index e8189dc5c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "Inyector de superposición", - "info": "Un sliver que debe usarse junto con SliverOverlapAbsorber para manejar problemas de superposición de vistas.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverOverlapInjector", - "desc": [ - "【sliver】 : componente hijo 【Widget】", - "【handle】 : *manejador 【SliverOverlapAbsorberHandle】", - "Si no se utilizan los componentes SliverOverlapAbsorber y SliverOverlapInjector, el contenido de NestedScrollView se superpondrá con la barra de encabezado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_fr_FR.json deleted file mode 100644 index 49fdcb177..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "Injecteur de chevauchement", - "info": "Un sliver, doit être utilisé conjointement avec SliverOverlapAbsorber pour gérer les problèmes de chevauchement de vues.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverOverlapInjector", - "desc": [ - "【sliver】 : Composant enfant 【Widget】", - "【handle】 : *Gestionnaire 【SliverOverlapAbsorberHandle】", - "Si les composants SliverOverlapAbsorber et SliverOverlapInjector ne sont pas utilisés, le contenu de NestedScrollView chevauchera la barre d'en-tête." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_it_IT.json deleted file mode 100644 index 88185fd05..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "Iniettore di sovrapposizione", - "info": "Uno sliver, deve essere utilizzato insieme a SliverOverlapAbsorber per gestire il problema della sovrapposizione delle viste.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverOverlapInjector", - "desc": [ - "【sliver】 : Componente figlio 【Widget】", - "【handle】 : *Processore 【SliverOverlapAbsorberHandle】", - "Se non si utilizzano i componenti SliverOverlapAbsorber e SliverOverlapInjector, il contenuto di NestedScrollView si sovrapporrà alla barra dell'intestazione." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ja_JP.json deleted file mode 100644 index 5a2a19af5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "オーバーラップインジェクター", - "info": "Sliverで、SliverOverlapAbsorberと一緒に使用する必要があり、ビューのオーバーラップ問題を処理します。", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOverlapInjectorの基本使用", - "desc": [ - "【sliver】 : 子コンポーネント 【Widget】", - "【handle】 : *プロセッサ 【SliverOverlapAbsorberHandle】", - "SliverOverlapAbsorberとSliverOverlapInjectorコンポーネントを使用しない場合、NestedScrollViewの内容はヘッダーバーと重なります。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ko_KR.json deleted file mode 100644 index 8154e4107..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "겹침 인젝터", - "info": "SliverOverlapAbsorber와 함께 사용해야 하는 sliver로, 뷰 겹침 문제를 처리합니다.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOverlapInjector 기본 사용법", - "desc": [ - "【sliver】 : 자식 컴포넌트 【Widget】", - "【handle】 : *처리기 【SliverOverlapAbsorberHandle】", - "SliverOverlapAbsorber와 SliverOverlapInjector 컴포넌트를 사용하지 않으면, NestedScrollView의 내용이 헤더 바와 겹칩니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_pt_PT.json deleted file mode 100644 index 2aad85e08..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "Injector de Sobreposição", - "info": "Um sliver que precisa ser usado em conjunto com o SliverOverlapAbsorber para lidar com problemas de sobreposição de visualizações.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SliverOverlapInjector", - "desc": [ - "【sliver】 : Componente Filho 【Widget】", - "【handle】 : *Manipulador 【SliverOverlapAbsorberHandle】", - "Se os componentes SliverOverlapAbsorber e SliverOverlapInjector não forem usados, o conteúdo do NestedScrollView irá sobrepor-se à barra do cabeçalho." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ru_RU.json deleted file mode 100644 index 7becb227d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "Инжектор перекрытия", - "info": "Sliver, который необходимо использовать вместе с SliverOverlapAbsorber для решения проблемы перекрытия представлений.", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverOverlapInjector", - "desc": [ - "【sliver】 : Дочерний компонент 【Widget】", - "【handle】 : *Обработчик 【SliverOverlapAbsorberHandle】", - "Если не использовать компоненты SliverOverlapAbsorber и SliverOverlapInjector, содержимое NestedScrollView будет перекрываться с заголовком." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_zh-CN.json deleted file mode 100644 index 519e019d5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 308, - "name": "SliverOverlapInjector", - "localName": "重叠注射器", - "info": "一个sliver,需要和SliverOverlapAbsorber联用,处理视图重叠问题。", - "lever": 3, - "family": 4, - "linkIds": [ - 251, - 307 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverOverlapInjector基本使用", - "desc": [ - "【sliver】 : 子组件 【Widget】", - "【handle】 : *处理器 【SliverOverlapAbsorberHandle】", - "如果不使用SliverOverlapAbsorber和SliverOverlapInjector组件,NestedScrollView的内容会和头部栏重叠。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/node1_base.dart deleted file mode 100644 index 51daa157a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverOverlapInjector/node1_base.dart +++ /dev/null @@ -1,92 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/6/16 -/// contact me by email 1981462002@qq.com - - -class SliverOverlapInjectorDemo extends StatelessWidget { - const SliverOverlapInjectorDemo({Key? key}) : super(key: key); - - final List _tabs = const ['风神传', '封妖志', "幻将录", "永恒传说"]; - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height - 200, - child: Scaffold( - body: DefaultTabController( - length: _tabs.length, - child: NestedScrollView( - headerSliverBuilder: - (BuildContext context, bool innerBoxIsScrolled) { - return [ - SliverOverlapAbsorber( - handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), - sliver: SliverAppBar( - title: const Text('旷古奇书'), - pinned: true, - elevation: 6, //影深 - expandedHeight: 220.0, - forceElevated: innerBoxIsScrolled, //为true时展开有阴影 - flexibleSpace: FlexibleSpaceBar( - background: Image.asset( - "assets/images/wy_300x200_filter.webp", - fit: BoxFit.cover, - ), - ), - bottom: TabBar( - tabs: _tabs - .map((String name) => Tab(text: name,)) - .toList(), - ), - ), - ), - ]; - }, - body: _buildTabBarView(), - ), - ), - )); - } - - Widget _buildTabBarView() { - return TabBarView( - children: _tabs.map((String name) { - return SafeArea( - top: false, - bottom: false, - child: Builder( - builder: (BuildContext context) { - return CustomScrollView( - key: PageStorageKey(name), - slivers: [ - SliverOverlapInjector( - handle: NestedScrollView.sliverOverlapAbsorberHandleFor( - context), - ), - buildContent(name), - ], - ); - }, - ), - ); - }).toList(), - ); - } - - Widget buildContent(String name) => SliverPadding( - padding: const EdgeInsets.all(8.0), - sliver: SliverFixedExtentList( - itemExtent: 48.0, - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) { - return ListTile( - title: Text('《$name》 第 $index章'), - ); - }, - childCount: 50, - ), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_de_DE.json deleted file mode 100644 index 0baed1144..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Sliver Innenabstand", - "info": "Kann ein untergeordnetes Element der Sliver-Familie aufnehmen, fügt einen eigenen Innenabstand hinzu, um die Platzierung des untergeordneten Elements zu begrenzen, wobei padding die Kern-Eigenschaft ist.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverPadding", - "desc": [ - "【sliver】 : Untergeordnetes Element 【Widget】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_en_US.json deleted file mode 100644 index 0907c91a8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Sliver Padding", - "info": "Can accommodate a child component of the Sliver family, adding its own padding to limit the placement of the child component, with the core property being padding.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverPadding", - "desc": [ - "【sliver】: Child component 【Widget】", - "【padding】: Padding 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_es_ES.json deleted file mode 100644 index f30d98971..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Relleno interno de Sliver", - "info": "Puede contener un componente hijo de la familia Sliver, añadiendo su propio relleno interno para limitar el espacio ocupado por el componente hijo, la propiedad principal es padding.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverPadding", - "desc": [ - "【sliver】 : Componente hijo 【Widget】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_fr_FR.json deleted file mode 100644 index 801d55e6c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Espacement intérieur de Sliver", - "info": "Peut contenir un composant enfant de la famille Sliver, ajoute sa propre marge intérieure pour limiter l'emplacement du composant enfant, la propriété principale étant padding.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverPadding", - "desc": [ - "【sliver】 : Composant enfant 【Widget】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_it_IT.json deleted file mode 100644 index 2e02d440a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Spaziatura interna Sliver", - "info": "Può contenere un componente figlio della famiglia Sliver, aggiungendo il proprio padding interno per limitare il posizionamento del componente figlio, la proprietà principale è padding.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di SliverPadding", - "desc": [ - "【sliver】 : Componente figlio 【Widget】", - "【padding】 : Padding interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ja_JP.json deleted file mode 100644 index ce93600bd..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Sliver内間隔", - "info": "Sliverファミリーの子コンポーネントを収容し、自身の内側の余白を追加して子コンポーネントの占める位置を制限します。コア属性はpaddingです。", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPaddingの基本使用", - "desc": [ - "【sliver】 : 子コンポーネント 【Widget】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ko_KR.json deleted file mode 100644 index fa541f023..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Sliver 내부 여백", - "info": "Sliver 가족의 하위 구성 요소를 수용할 수 있으며, 자체 내부 여백을 추가하여 자식 구성 요소의 위치를 제한합니다. 핵심 속성은 padding입니다.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPadding 기본 사용", - "desc": [ - "【sliver】 : 하위 구성 요소 【Widget】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_pt_PT.json deleted file mode 100644 index 840c02b56..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Espaçamento interno do Sliver", - "info": "Pode acomodar um componente filho da família Sliver, adicionando o próprio preenchimento interno para limitar o espaço ocupado pelo componente filho, sendo o atributo principal o padding.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do SliverPadding", - "desc": [ - "【sliver】 : Componente filho 【Widget】", - "【padding】 : Preenchimento interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ru_RU.json deleted file mode 100644 index 6fb97bea5..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Отступ внутри Sliver", - "info": "Может содержать дочерний компонент из семейства Sliver, добавляя собственные внутренние отступы для ограничения места, занимаемого дочерним компонентом. Основное свойство - padding.", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverPadding", - "desc": [ - "【sliver】 : Дочерний компонент 【Widget】", - "【padding】 : Внутренний отступ 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_zh-CN.json deleted file mode 100644 index e4bd9cbc9..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 191, - "name": "SliverPadding", - "localName": "Sliver内间距", - "info": "可容纳一个Sliver家族的子组件,添加自身内边距来限制孩子组件的占位,核心属性为padding。", - "lever": 3, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPadding基本使用", - "desc": [ - "【sliver】 : 子组件 【Widget】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPadding/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverPadding/node1_base.dart deleted file mode 100644 index 26b707ba8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPadding/node1_base.dart +++ /dev/null @@ -1,87 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class SliverPaddingDemo extends StatelessWidget { - const SliverPaddingDemo({super.key}); - - List get data => List.generate(128, (i) => Color(0xFF6600FF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - _buildSliverAppBar(), - SliverPadding( - padding: const EdgeInsets.only(top: 10), - sliver: _buildSliverGrid()) - ], - ), - ); - } - - Widget _buildSliverGrid() => SliverGrid.extent( - childAspectRatio: 1 / 0.618, - maxCrossAxisExtent: 180, - crossAxisSpacing: 5, - mainAxisSpacing: 5, - children: data - .map((e) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: e, - child: Text( - colorString(e), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - )) - .toList(), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_de_DE.json deleted file mode 100644 index 3ab0ea209..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "Fixierter Header", - "info": "Wird normalerweise in CustomScrollView verwendet, um eine Komponente beim Scrollen oben zu fixieren, damit sie nicht verschwindet.", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverPersistentHeader", - "desc": [ - "【delegate】 : Delegat 【SliverPersistentHeaderDelegate】", - "【floating】 : Ob schwebend 【bool】", - "【pinned】 : Ob oben fixiert 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_en_US.json deleted file mode 100644 index ef494ee2a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "Sticky Slider", - "info": "Usually used in CustomScrollView, it allows a component to stay at the top during scrolling and not disappear.", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverPersistentHeader", - "desc": [ - "【delegate】: Delegate 【SliverPersistentHeaderDelegate】", - "【floating】: Whether to float 【bool】", - "【pinned】: Whether to stay at the top 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_es_ES.json deleted file mode 100644 index c0373b7db..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "Cabecera persistente", - "info": "Se utiliza normalmente en CustomScrollView para permitir que un componente permanezca en la parte superior durante el desplazamiento y no desaparezca.", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverPersistentHeader", - "desc": [ - "【delegate】 : delegado 【SliverPersistentHeaderDelegate】", - "【floating】 : si flota 【bool】", - "【pinned】 : si se queda en la parte superior 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_fr_FR.json deleted file mode 100644 index 1f02f849d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "En-tête persistant", - "info": "Utilisé généralement dans CustomScrollView, il permet à un composant de rester en haut lors du défilement sans disparaître.", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverPersistentHeader", - "desc": [ - "【delegate】 : Délégué 【SliverPersistentHeaderDelegate】", - "【floating】 : Flottant 【bool】", - "【pinned】 : Reste en haut 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_it_IT.json deleted file mode 100644 index 8a3505c6a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "Intestazione persistente", - "info": "Utilizzato solitamente in CustomScrollView, consente a un componente di rimanere in cima durante lo scorrimento, senza scomparire.", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverPersistentHeader", - "desc": [ - "【delegate】 : delegato 【SliverPersistentHeaderDelegate】", - "【floating】 : se galleggiante 【bool】", - "【pinned】 : se rimane in cima 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ja_JP.json deleted file mode 100644 index 5e4734e4a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "吸頂スライド", - "info": "通常、CustomScrollViewで使用され、コンポーネントがスクロール中に上部に留まり、スクロールして消えないようにします。", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPersistentHeaderの基本的な使用法", - "desc": [ - "【delegate】 : デリゲート 【SliverPersistentHeaderDelegate】", - "【floating】 : フローティングするかどうか 【bool】", - "【pinned】 : 上部に留まるかどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ko_KR.json deleted file mode 100644 index 020f82322..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "스티커 슬라이드", - "info": "일반적으로 CustomScrollView에서 사용되며, 스크롤 중에 상단에 고정되어 사라지지 않도록 하는 컴포넌트입니다.", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPersistentHeader 기본 사용법", - "desc": [ - "【delegate】 : 대리자 【SliverPersistentHeaderDelegate】", - "【floating】 : 플로팅 여부 【bool】", - "【pinned】 : 상단 고정 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_pt_PT.json deleted file mode 100644 index 2c485a8a0..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "Cabeçalho Fixo Deslizante", - "info": "Geralmente usado em CustomScrollView, permite que um componente permaneça no topo durante a rolagem, sem desaparecer.", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SliverPersistentHeader", - "desc": [ - "【delegate】 : Delegado 【SliverPersistentHeaderDelegate】", - "【floating】 : Se flutua 【bool】", - "【pinned】 : Se fica no topo 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ru_RU.json deleted file mode 100644 index d5baa3db1..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "Прилипающий заголовок", - "info": "Обычно используется в CustomScrollView, позволяет компоненту оставаться вверху при прокрутке и не исчезать.", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverPersistentHeader", - "desc": [ - "【delegate】 : делегат 【SliverPersistentHeaderDelegate】", - "【floating】 : плавающий 【bool】", - "【pinned】 : закреплённый вверху 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_zh-CN.json deleted file mode 100644 index a72aae229..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 190, - "name": "SliverPersistentHeader", - "localName": "吸顶滑片", - "info": "通常用于 CustomScrollView 中,可以让一个组件在滑动中停留在顶部,不会滑动消失。", - "lever": 5, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPersistentHeader基本使用", - "desc": [ - "【delegate】 : 代理 【SliverPersistentHeaderDelegate】", - "【floating】 : 是否浮动 【bool】", - "【pinned】 : 是否顶部停留 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/node1_base.dart deleted file mode 100644 index 7ea9109c7..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPersistentHeader/node1_base.dart +++ /dev/null @@ -1,158 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class SliverPersistentHeaderDemo extends StatelessWidget { - const SliverPersistentHeaderDemo({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 500, - child: CustomScrollView( - slivers: [ - _buildSliverAppBar(), - _buildPersistentHeader('袅缈岁月,青丝银发',const Color(0xffe7fcc9)), - _buildCommonWidget(), - _buildPersistentHeader('以梦为马,不负韶华',const Color(0xffcca4ff)), - _buildSliverList() - ], - ), - ); - } - - Widget _buildCommonWidget() => SliverToBoxAdapter( - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 10), - color: Colors.grey.withAlpha(22), - child: ListTile( - leading: Image.asset("assets/images/icon_head.webp"), - title: const Text("以梦为马"), - subtitle: const Text("海子"), - selected: true, - contentPadding: const EdgeInsets.all(5), - trailing: const Icon(Icons.more_vert), - ), - ), - ); - Widget _buildPersistentHeader(String text,Color color) => SliverPersistentHeader( - pinned: true, - delegate: _SliverDelegate( - minHeight: 40.0, - maxHeight: 100.0, - child: Container( - color: color, - child: Center( - child: Text(text, style: const TextStyle( - fontSize: 18, - shadows: [Shadow(color: Colors.white, offset: Offset(1, 1))]), - ), - )), - )); - - Widget _buildSliverList() => SliverList( - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 2, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} - - -class _SliverDelegate extends SliverPersistentHeaderDelegate { - _SliverDelegate({ - required this.minHeight, - required this.maxHeight, - required this.child, - }); - - final double minHeight; //最小高度 - final double maxHeight; //最大高度 - final Widget child; //孩子 - - @override - double get minExtent => minHeight; - - @override - double get maxExtent => max(maxHeight, minHeight); - - @override - Widget build( - BuildContext context, double shrinkOffset, bool overlapsContent) { - return SizedBox.expand(child: child); - } - - @override //是否需要重建 - bool shouldRebuild(_SliverDelegate oldDelegate) { - return maxHeight != oldDelegate.maxHeight || - minHeight != oldDelegate.minHeight || - child != oldDelegate.child; - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_de_DE.json deleted file mode 100644 index 6274480b2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Sliver-Prototyp-Erweiterungsliste", - "info": "Die Eigenschaft prototypeItem ist ein Widget, das die Größe der Elemente in der Hauptachsenrichtung einschränkt, aber nicht angezeigt wird. Der delegate akzeptiert einen SliverChildDelegate, um die Erstellung der Elemente abzuschließen.", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverPrototypeExtentList", - "desc": [ - "【prototypeItem】 : Hauptachsenrichtungsgrößenkomponente 【Widget】", - "【delegate】 : Kind-Delegate 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_en_US.json deleted file mode 100644 index 471973dbe..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Sliver Prototype Extent List", - "info": "The prototypeItem property is a Widget, which is responsible for constraining the size of the item in the main axis direction, but it will not be displayed. The delegate accepts a SliverChildDelegate to complete the creation of the item.", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverPrototypeExtentList", - "desc": [ - "【prototypeItem】 : Main axis size component 【Widget】", - "【delegate】 : Child delegate 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_es_ES.json deleted file mode 100644 index 6755cc3c2..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Lista de Extensión de Prototipo Sliver", - "info": "La propiedad prototypeItem es un Widget, que se encarga de restringir el tamaño del ítem en la dirección del eje principal, pero no se mostrará. El delegate acepta un SliverChildDelegate para completar la creación del ítem.", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverPrototypeExtentList", - "desc": [ - "【prototypeItem】 : Componente de tamaño en la dirección del eje principal 【Widget】", - "【delegate】 : Delegado de hijos 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_fr_FR.json deleted file mode 100644 index 0642cc05a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Liste d'extension de prototype Sliver", - "info": "La propriété prototypeItem est un Widget, elle est responsable de contraindre la taille de l'item dans la direction de l'axe principal, mais ne sera pas affichée. Le delegate accepte un SliverChildDelegate pour créer l'item.", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverPrototypeExtentList", - "desc": [ - "【prototypeItem】 : Composant de taille dans la direction de l'axe principal 【Widget】", - "【delegate】 : Délégué des enfants 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_it_IT.json deleted file mode 100644 index b0130d179..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Lista di estensione del prototipo Sliver", - "info": "La proprietà prototypeItem è un Widget, che si occupa di vincolare le dimensioni dell'elemento nella direzione dell'asse principale, ma non viene visualizzato. Il delegate accetta un SliverChildDelegate per completare la creazione dell'elemento.", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverPrototypeExtentList", - "desc": [ - "【prototypeItem】 : Componente di dimensioni nella direzione dell'asse principale 【Widget】", - "【delegate】 : Delegato per i figli 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ja_JP.json deleted file mode 100644 index 5b31fd936..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Sliverプロトタイプ拡張リスト", - "info": "prototypeItemプロパティはWidgetで、主軸方向のitemのサイズを制約しますが、表示されません。delegateはSliverChildDelegateを受け取り、itemの作成を完了します。", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPrototypeExtentListの基本使用", - "desc": [ - "【prototypeItem】 : 主軸方向サイズコンポーネント 【Widget】", - "【delegate】 : 子デリゲート 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ko_KR.json deleted file mode 100644 index 033af1774..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Sliver 프로토타입 확장 리스트", - "info": "prototypeItem 속성은 Widget이며, 주축 방향의 item 크기를 제한하지만 표시되지는 않습니다. delegate는 SliverChildDelegate를 받아 item 생성을 완료합니다.", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPrototypeExtentList 기본 사용", - "desc": [ - "【prototypeItem】 : 주축 방향 크기 컴포넌트 【Widget】", - "【delegate】 : 자식 대리자 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_pt_PT.json deleted file mode 100644 index daa4feea8..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Lista de Extensão de Protótipo Sliver", - "info": "A propriedade prototypeItem é um Widget, que é responsável por restringir o tamanho do item na direção do eixo principal, mas não será exibido. O delegate aceita um SliverChildDelegate para criar o item.", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SliverPrototypeExtentList", - "desc": [ - "【prototypeItem】 : Componente de tamanho na direção do eixo principal 【Widget】", - "【delegate】 : Delegado de criança 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ru_RU.json deleted file mode 100644 index 6ce33abfd..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Список расширений прототипа Sliver", - "info": "Свойство prototypeItem является Widget, оно отвечает за ограничение размера элемента в направлении основной оси, но не отображается. Delegate принимает SliverChildDelegate для создания элементов.", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverPrototypeExtentList", - "desc": [ - "【prototypeItem】 : Компонент размера в направлении основной оси 【Widget】", - "【delegate】 : Делегат детей 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_zh-CN.json deleted file mode 100644 index 4a5ffaf18..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 314, - "name": "SliverPrototypeExtentList", - "localName": "Sliver原型延伸列表", - "info": "其中prototypeItem属性是Widget,它负责约束主轴方向上item尺寸,但不会显示出来。delegate接受一个SliverChildDelegate完成item的创建。", - "lever": 2, - "family": 4, - "linkIds": [ - 185, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverPrototypeExtentList基本使用", - "desc": [ - "【prototypeItem】 : 主轴方向尺寸组件 【Widget】", - "【delegate】 : 孩子代理 【SliverChildDelegate】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/node1_base.dart deleted file mode 100644 index 04deb5571..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverPrototypeExtentList/node1_base.dart +++ /dev/null @@ -1,99 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class SliverPrototypeExtentListDemo extends StatefulWidget { - const SliverPrototypeExtentListDemo({Key? key}) : super(key: key); - - @override - _SliverPrototypeExtentListDemoState createState() => - _SliverPrototypeExtentListDemoState(); -} - -class _SliverPrototypeExtentListDemoState - extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [_buildSliverAppBar(), _buildSliverList()], - ), - ); - } - - Widget _buildSliverList() => SliverPrototypeExtentList( - prototypeItem: Container( - height: 80, - ), - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 150.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 5, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_de_DE.json deleted file mode 100644 index e2848f0a0..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Sliver-Adapter", - "info": "Kann ein normales Widget aufnehmen und in ein Sliver-Widget umwandeln.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SliverToBoxAdapter", - "desc": [ - "【child】 : Untergeordnetes Widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_en_US.json deleted file mode 100644 index efcf4521c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Sliver Adapter", - "info": "An adapter that can accommodate a common component and convert it into a component of the Sliver family.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SliverToBoxAdapter", - "desc": [ - "【child】: Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_es_ES.json deleted file mode 100644 index fc7ad225a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Adaptador Sliver", - "info": "Puede contener un componente común y convertirlo en un adaptador para los componentes de la familia Sliver.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SliverToBoxAdapter", - "desc": [ - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_fr_FR.json deleted file mode 100644 index 0d6c369dd..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Adaptateur Sliver", - "info": "Un adaptateur qui peut contenir un composant ordinaire et le transformer en un composant de la famille Sliver.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SliverToBoxAdapter", - "desc": [ - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_it_IT.json deleted file mode 100644 index 684fd564e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Adattatore Sliver", - "info": "Un adattatore che può contenere un componente normale e trasformarlo in un componente della famiglia Sliver.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SliverToBoxAdapter", - "desc": [ - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ja_JP.json deleted file mode 100644 index 30979cf2a..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Sliverアダプター", - "info": "通常のコンポーネントを収容し、それをSliverファミリーのコンポーネントに変換するアダプターです。", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverToBoxAdapterの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ko_KR.json deleted file mode 100644 index 89baca35e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Sliver 어댑터", - "info": "일반 컴포넌트를 수용하고 Sliver 패밀리 컴포넌트로 변환할 수 있는 어댑터입니다.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverToBoxAdapter 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_pt_PT.json deleted file mode 100644 index cd7812119..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Adaptador Sliver", - "info": "Pode acomodar um componente comum e transformá-lo num adaptador para componentes da família Sliver.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do SliverToBoxAdapter", - "desc": [ - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ru_RU.json deleted file mode 100644 index 5912820d4..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Sliver адаптер", - "info": "Адаптер, который может вместить обычный компонент и преобразовать его в компонент семейства Sliver.", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SliverToBoxAdapter", - "desc": [ - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_zh-CN.json deleted file mode 100644 index 10aef0b95..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 189, - "name": "SliverToBoxAdapter", - "localName": "Sliver适配器", - "info": "可以容纳一个普通的组件,并将其转化成Sliver家族组件的适配器。", - "lever": 4, - "family": 4, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverToBoxAdapter基本使用", - "desc": [ - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/node1_base.dart deleted file mode 100644 index 31d23053e..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverToBoxAdapter/node1_base.dart +++ /dev/null @@ -1,108 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class SliverToBoxAdapterDemo extends StatelessWidget { - const SliverToBoxAdapterDemo({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CustomScrollView( - slivers: [ - _buildSliverAppBar(), - _buildCommonWidget(), - _buildSliverList() - ], - ), - ); - } - - Widget _buildCommonWidget() => SliverToBoxAdapter( - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 10), - color: Colors.grey.withAlpha(22), - child: ListTile( - leading: Image.asset("assets/images/icon_head.webp"), - title: const Text("以梦为马"), - subtitle: const Text("海子"), - selected: true, - contentPadding: const EdgeInsets.all(5), - trailing: const Icon(Icons.more_vert), - ), - ), - ); - - Widget _buildSliverList() => SliverList( - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - Widget _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: _buildLeading(), - title: const Text('张风捷特烈'), - actions: _buildActions(), - elevation: 2, - pinned: true, - backgroundColor: Colors.orange, - flexibleSpace: FlexibleSpaceBar( - //伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildLeading() => Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')); - - List _buildActions() => [ - IconButton( - onPressed: () {}, - icon: const Icon( - Icons.star_border, - color: Colors.white, - ), - ) - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_de_DE.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_de_DE.json deleted file mode 100644 index 7e133c118..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Sliver Keep-Alive-Container", - "info": "Es ist eine abstrakte Klasse und kann nicht alleine verwendet werden. Nur seine Unterklassen können Keep-Alive-Kinder aufnehmen.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in SliverWithKeepAliveWidget", - "desc": [ - "【key】 : Schlüssel 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_en_US.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_en_US.json deleted file mode 100644 index fd21e244d..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Sliver Keep-Alive Container", - "info": "It is an abstract class and cannot be used alone. Only its subclasses can accommodate KeepAlive children.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to SliverWithKeepAliveWidget", - "desc": [ - "【key】 : key 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_es_ES.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_es_ES.json deleted file mode 100644 index f71c82068..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Contenedor Sliver con KeepAlive", - "info": "Es una clase abstracta y no se puede usar por sí sola. Solo sus subclases pueden contener hijos con KeepAlive.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a SliverWithKeepAliveWidget", - "desc": [ - "【key】 : clave 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_fr_FR.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_fr_FR.json deleted file mode 100644 index 30bc843a6..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Conteneur Sliver avec KeepAlive", - "info": "C'est une classe abstraite et ne peut pas être utilisée seule. Seules ses sous-classes peuvent contenir des enfants KeepAlive.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à SliverWithKeepAliveWidget", - "desc": [ - "【key】 : clé 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_it_IT.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_it_IT.json deleted file mode 100644 index 2679e37d9..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Contenitore Sliver con KeepAlive", - "info": "È una classe astratta e non può essere utilizzata da sola. Solo le sue sottoclassi possono contenere figli KeepAlive.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a SliverWithKeepAliveWidget", - "desc": [ - "【key】 : chiave 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ja_JP.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ja_JP.json deleted file mode 100644 index 7871fae73..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Sliver保活コンテナ", - "info": "これは抽象クラスであり、単独で使用することはできません。そのサブクラスのみがKeepAliveの子を保持できます。", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverWithKeepAliveWidget 紹介", - "desc": [ - "【key】 : キー 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ko_KR.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ko_KR.json deleted file mode 100644 index ce057802c..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Sliver 생존 유지 컨테이너", - "info": "이것은 추상 클래스로, 단독으로 사용할 수 없습니다. 오직 그 하위 클래스만이 KeepAlive 자식을 포함할 수 있습니다.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverWithKeepAliveWidget 소개", - "desc": [ - "【key】 : 키 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_pt_PT.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_pt_PT.json deleted file mode 100644 index 6ad1ecdb9..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Recipiente Sliver com KeepAlive", - "info": "É uma classe abstrata e não pode ser usada sozinha. Apenas suas subclasses podem conter filhos KeepAlive.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao SliverWithKeepAliveWidget", - "desc": [ - "【key】 : chave 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ru_RU.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ru_RU.json deleted file mode 100644 index 42890b043..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Sliver контейнер с поддержкой активности", - "info": "Это абстрактный класс, который нельзя использовать отдельно. Только его подклассы могут содержать дочерние элементы KeepAlive.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в SliverWithKeepAliveWidget", - "desc": [ - "【key】 : ключ 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_zh-CN.json b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_zh-CN.json deleted file mode 100644 index 801ceb7f7..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 348, - "name": "SliverWithKeepAliveWidget", - "localName": "Sliver保活容器", - "info": "它是抽象类,不能单独使用。只有其子类才可以容纳 KeepAlive 的孩子.", - "lever": 1, - "family": 4, - "linkIds": [ - 316, - 239, - 188, - 185, - 314, - 186 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SliverWithKeepAliveWidget 介绍", - "desc": [ - "【key】 : 键 【Key】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/node1_base.dart b/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/node1_base.dart deleted file mode 100644 index e079ddc33..000000000 --- a/modules/widget_system/widgets/lib/Sliver/SliverWithKeepAliveWidget/node1_base.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - - -class SliverWithKeepAliveWidgetDemo extends StatelessWidget { - const SliverWithKeepAliveWidgetDemo({Key? key}) : super(key: key); - - final String info = - '只有 SliverWithKeepAliveWidget 之下才可以包含 KeepAlive 组件, 由于其为抽象类,不能直接使用。其子类 SliverMultiBoxAdaptorWidget 也说抽象类,' - '用于容纳多个孩子,帮助它的子类使用 SliverChildDelegate 构建懒加载 children。' - '最终实现类为 SliverGrid、SliverList、SliverPrototypeExtentList、SliverFixedExtentList,表示他们都可以支持 item 的状态保持。' - '除此之外还有 _SliverFillViewportRenderObjectWidget 的私有实现类,这是 PageView 的底层实现,这也是为什么 PageView 也支持保活的原因。'; - - @override - Widget build(BuildContext context) { - - return Container( - color: Theme.of(context).primaryColor.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_de_DE.json deleted file mode 100644 index 5ab06a883..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "Ausrichtungsübergang", - "info": "Eine Unterklasse von AnimatedWidget, die einen Animator vom Typ Alignment verwendet, um eine Übergangsanimation zwischen zwei Alignment-Objekten für das untergeordnete Widget zu ermöglichen.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AlignTransition", - "desc": [ - "【child】 : Kind-Widget 【Widget】", - "【alignment】 : Ausrichtungsanimation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_en_US.json deleted file mode 100644 index cb576d3cb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "Alignment Transition", - "info": "A subclass of AnimatedWidget, using an animator of type Alignment to allow child components to transition between two Alignment objects.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AlignTransition", - "desc": [ - "【child】: Child component 【Widget】", - "【alignment】: Alignment animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_es_ES.json deleted file mode 100644 index 969c3b2c8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "Transición de alineación", - "info": "Subclase de AnimatedWidget, utiliza un animador de tipo Alignment para permitir que los componentes hijos realicen una animación de transición entre dos objetos Alignment.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AlignTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【alignment】 : Animación de alineación 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_fr_FR.json deleted file mode 100644 index afe4f3009..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "Transition d'alignement", - "info": "Sous-classe de AnimatedWidget, utilisant un animateur de type Alignment pour permettre à un composant enfant de faire une transition animée entre deux objets Alignment.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AlignTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【alignment】 : Animation d'alignement 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_it_IT.json deleted file mode 100644 index 252739a65..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "Transizione di allineamento", - "info": "Una sottoclasse di AnimatedWidget, utilizza un animatore di tipo Alignment per far sì che i componenti figli effettuino una transizione animata tra due oggetti Alignment.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AlignTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【alignment】 : Animazione di allineamento 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ja_JP.json deleted file mode 100644 index 9d05b5949..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "整列遷移", - "info": "AnimatedWidgetのサブクラスで、Alignmentタイプのアニメーターを使用して子コンポーネントを2つのAlignmentオブジェクト間で遷移アニメーションさせます。", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AlignTransition基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【alignment】 : 整列アニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ko_KR.json deleted file mode 100644 index 4af24abf5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "정렬 변환", - "info": "AnimatedWidget의 하위 클래스, Alignment 타입의 애니메이터를 사용하여 자식 위젯이 두 Alignment 객체 사이에서 전환 애니메이션을 수행합니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AlignTransition 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【alignment】 : 정렬 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_pt_PT.json deleted file mode 100644 index a7abb56e4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "Transição de Alinhamento", - "info": "Subclasse de AnimatedWidget, usa um animador do tipo Alignment para permitir que um componente filho faça uma animação de transição entre dois objetos Alignment.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AlignTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【alignment】 : Animação de alinhamento 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ru_RU.json deleted file mode 100644 index 5ef6388f3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "Анимация выравнивания", - "info": "Подкласс AnimatedWidget, использующий аниматор типа Alignment для создания переходной анимации между двумя объектами Alignment для дочернего компонента.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AlignTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【alignment】 : Анимация выравнивания 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_zh-CN.json deleted file mode 100644 index 8d6d6db0d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 111, - "name": "AlignTransition", - "localName": "对齐变换", - "info": "AnimatedWidget的子类,使用Alignment类型的动画器让子组件在两个Alignment对象之间进行过渡动画。", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 120 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AlignTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【alignment】 : 对齐动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/node1_base.dart deleted file mode 100644 index daf4201f6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AlignTransition/node1_base.dart +++ /dev/null @@ -1,54 +0,0 @@ - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomAlignTransition extends StatefulWidget { - const CustomAlignTransition({Key? key}) : super(key: key); - - @override - _CustomAlignTransitionState createState() => _CustomAlignTransitionState(); -} - -class _CustomAlignTransitionState extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 1), - ); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Container( - width: MediaQuery.of(context).size.width, - color: Colors.grey.withAlpha(33), - height: 100, - child: AlignTransition( - alignment: AlignmentTween( - begin: Alignment.topLeft, - end: Alignment.bottomRight, - ).animate(_ctrl), - child: const Icon( - Icons.android, - color: Colors.green, - size: 60, - ), - ), - )); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_de_DE.json deleted file mode 100644 index 553c66f3d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "Ausrichtungsanimation", - "info": "Ermöglicht die Ausrichtungsanimation von Unterkomponenten, ermöglicht die Angabe von Dauer und Kurve und verfügt über ein Ereignis für das Ende der Animation.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedAlign", - "desc": [ - "【child】: Untergeordnete Komponente 【Widget】", - "【duration】: Animationsdauer 【Duration】", - "【onEnd】: Rückruf bei Ende der Animation 【Function()】", - "【alignment】: Ausrichtungsart 【AlignmentGeometry】", - "【curve】: Animationskurve 【Duration】", - "【padding】: Innenabstand 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_en_US.json deleted file mode 100644 index d3e7481ba..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "Alignment Animation", - "info": "Allows child components to perform Align (alignment) animations, with specified duration and curve, and includes an animation end event.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedAlign", - "desc": [ - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【alignment】: Alignment method 【AlignmentGeometry】", - "【curve】: Animation curve 【Duration】", - "【padding】: Padding 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_es_ES.json deleted file mode 100644 index af8b46dc7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "Animación de alineación", - "info": "Permite que los componentes hijos realicen una animación de Align (alineación), se puede especificar la duración y la curva, y tiene un evento de finalización de la animación.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedAlign", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Callback de finalización de la animación 【Function()】", - "【alignment】 : Modo de alineación 【AlignmentGeometry】", - "【curve】 : Curva de la animación 【Duration】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_fr_FR.json deleted file mode 100644 index 38d3c4a7a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "Animation d'alignement", - "info": "Permet à un composant enfant de réaliser une animation d'alignement (Align), avec la possibilité de spécifier la durée et la courbe, et un événement de fin d'animation.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de AnimatedAlign", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【alignment】 : Mode d'alignement 【AlignmentGeometry】", - "【curve】 : Courbe de l'animation 【Duration】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_it_IT.json deleted file mode 100644 index 0c6ea987a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "Allineamento Animato", - "info": "Consente ai componenti figli di eseguire animazioni di allineamento (Align), con la possibilità di specificare la durata e la curva, e con un evento di fine animazione.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedAlign", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【alignment】 : Modalità di allineamento 【AlignmentGeometry】", - "【curve】 : Curva dell'animazione 【Duration】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ja_JP.json deleted file mode 100644 index f14ebc2fd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "アニメーションアライメント", - "info": "子コンポーネントにAlign(アライメント)アニメーションを行わせることができます。時間と曲線を指定でき、アニメーション終了イベントがあります。", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedAlignの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【alignment】 : アライメント方法 【AlignmentGeometry】", - "【curve】 : アニメーション曲線 【Duration】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ko_KR.json deleted file mode 100644 index 1dcd679e1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "정렬 애니메이션", - "info": "자식 위젯이 Align(정렬) 애니메이션을 수행할 수 있게 하며, 지속 시간과 곡선을 지정할 수 있고, 애니메이션 종료 이벤트가 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedAlign 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_pt_PT.json deleted file mode 100644 index 2a9dfac3d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "Animação de Alinhamento", - "info": "Permite que os componentes filhos realizem animações de Alinhamento (Align), podendo especificar a duração e a curva, com evento de término da animação.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do AnimatedAlign", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【alignment】 : Modo de alinhamento 【AlignmentGeometry】", - "【curve】 : Curva da animação 【Duration】", - "【padding】 : Margem interna 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ru_RU.json deleted file mode 100644 index 782ec832c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "Анимация выравнивания", - "info": "Позволяет дочернему компоненту выполнять анимацию выравнивания (Align), можно указать продолжительность и кривую, есть событие завершения анимации.", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedAlign", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Продолжительность анимации 【Duration】", - "【onEnd】 : Обратный вызов завершения анимации 【Function()】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】", - "【curve】 : Кривая анимации 【Duration】", - "【padding】 : Внутренний отступ 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_zh-CN.json deleted file mode 100644 index f5ff49466..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 120, - "name": "AnimatedAlign", - "localName": "对齐动画", - "info": "能让子组件进行Align(对齐)动画,可指定时长和曲线,有动画结束事件。", - "lever": 3, - "family": 1, - "linkIds": [ - 85, - 111 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedAlign基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【alignment】 : 对齐方式 【AlignmentGeometry】", - "【curve】 : 动画曲线 【Duration】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/node1_base.dart deleted file mode 100644 index 6005ec16c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedAlign/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedAlign extends StatefulWidget { - const CustomAnimatedAlign({Key? key}) : super(key: key); - - @override - _CustomAnimatedAlignState createState() => _CustomAnimatedAlignState(); -} - -class _CustomAnimatedAlignState extends State { - final Alignment start = const Alignment(0, 0); - final Alignment end = Alignment.bottomRight; - - late Alignment _alignment; - - @override - void initState() { - _alignment = start; - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSwitch(), - Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 100, - child: AnimatedAlign( - duration: const Duration(seconds: 1), - curve: Curves.fastOutSlowIn, - alignment: _alignment, - onEnd: () => print('End'), - child: Container( - height: 40, - width: 80, - alignment: Alignment.center, - color: Colors.blue, - child: const Text( - '张风捷特烈', - style: TextStyle(color: Colors.white), - ), - ), - ), - ), - ], - ); - } - - Widget _buildSwitch() => Switch( - value: _alignment == end, - onChanged: (v) { - setState(() { - _alignment = v ? end : start; - }); - }); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_de_DE.json deleted file mode 100644 index 57e1754fe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "Animations-Builder", - "info": "Durch den Builder werden die entsprechenden Knoten der Animation lokal aktualisiert, und es wird vermieden, dass untergeordnete Komponenten aktualisiert werden, wodurch die Bauzeit reduziert und die Animationsleistung verbessert wird.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Anwendungsbeispiel für AnimatedBuilder", - "desc": [ - "【animation】 : *beobachtbares Objekt 【Listenable】", - "【builder】 : *Komponenten-Builder 【TransitionBuilder】", - "【child】 : untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_en_US.json deleted file mode 100644 index 700c5563f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "Animated Builder", - "info": "By using the builder, the corresponding node of the animation can be updated locally, and the refresh of child components can be avoided, reducing the build time and improving animation performance.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedBuilder Usage Example", - "desc": [ - "【animation】: *Listenable object 【Listenable】", - "【builder】: *Component builder 【TransitionBuilder】", - "【child】: Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_es_ES.json deleted file mode 100644 index 4c55c51ff..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "Constructor de Animación", - "info": "A través del builder, hace que los nodos correspondientes a la animación se actualicen parcialmente, y evita la actualización de los componentes hijos, reduciendo el tiempo de construcción y mejorando el rendimiento de la animación.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Caso de uso de AnimatedBuilder", - "desc": [ - "【animation】 : *Objeto observable 【Listenable】", - "【builder】 : *Constructor de componentes 【TransitionBuilder】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_fr_FR.json deleted file mode 100644 index 5f566be46..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "Constructeur d'animation", - "info": "Rend les nœuds correspondant à l'animation mis à jour localement via le builder, évite le rafraîchissement des composants enfants, réduit le temps de construction et améliore les performances de l'animation.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Exemple d'utilisation d'AnimatedBuilder", - "desc": [ - "【animation】 : *Objet observable 【Listenable】", - "【builder】 : *Constructeur de composant 【TransitionBuilder】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_it_IT.json deleted file mode 100644 index 24f5dc3b4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "Costruttore di animazioni", - "info": "Attraverso il builder, il nodo corrispondente all'animazione viene aggiornato localmente, evitando l'aggiornamento dei componenti figli, riducendo il tempo di costruzione e migliorando le prestazioni dell'animazione.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Esempio di utilizzo di AnimatedBuilder", - "desc": [ - "【animation】 : *oggetto ascoltabile 【Listenable】", - "【builder】 : *costruttore di componenti 【TransitionBuilder】", - "【child】 : componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ja_JP.json deleted file mode 100644 index bb283ed60..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "アニメーションビルダー", - "info": "ビルダーを通じてアニメーションに対応するノードを部分的に更新し、子コンポーネントのリフレッシュを避け、ビルド時間を短縮し、アニメーションのパフォーマンスを向上させます。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedBuilder 使用例", - "desc": [ - "【animation】 : *リスナブルオブジェクト 【Listenable】", - "【builder】 : *コンポーネントビルダー 【TransitionBuilder】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ko_KR.json deleted file mode 100644 index 8f79a9c08..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "애니메이션 빌더", - "info": "빌더를 통해 애니메이션에 해당하는 노드를 부분적으로 업데이트하고, 하위 컴포넌트의 새로고침을 방지하여 빌드 시간을 줄이고 애니메이션 성능을 향상시킵니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedBuilder 사용 예제", - "desc": [ - "【animation】 : *리스너 가능 객체 【Listenable】", - "【builder】 : *컴포넌트 빌더 【TransitionBuilder】", - "【child】 : 하위 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_pt_PT.json deleted file mode 100644 index 6fa9c0de1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "Construtor de Animação", - "info": "Através do builder, o nó correspondente à animação é atualizado localmente, evitando a atualização de componentes filhos, reduzindo o tempo de construção e melhorando o desempenho da animação.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Exemplo de uso do AnimatedBuilder", - "desc": [ - "【animation】 : *objeto observável 【Listenable】", - "【builder】 : *construtor de componente 【TransitionBuilder】", - "【child】 : componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ru_RU.json deleted file mode 100644 index 1eac5f1fe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "Анимационный конструктор", - "info": "С помощью builder делает узел, соответствующий анимации, частично обновляемым, а также позволяет избежать обновления дочерних компонентов, сократить время сборки и повысить производительность анимации.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Пример использования AnimatedBuilder", - "desc": [ - "【animation】 : *Объект, который можно прослушивать 【Listenable】", - "【builder】 : *Конструктор компонентов 【TransitionBuilder】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_zh-CN.json deleted file mode 100644 index afc38032e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 228, - "name": "AnimatedBuilder", - "localName": "动画构造器", - "info": "通过 builder 使动画对应的节点变为局部更新,并且可避免子组件刷新,减少构建的时间,提高动画性能。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedBuilder 使用案例", - "desc": [ - "【animation】 : *可监听对象 【Listenable】", - "【builder】 : *组件构造器 【TransitionBuilder】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/node1_base.dart deleted file mode 100644 index ea7fe5670..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedBuilder/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ - -import 'package:flutter/material.dart'; - - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class AnimatedBuilderDemo extends StatefulWidget { - const AnimatedBuilderDemo({Key? key}) : super(key: key); - - @override - _AnimatedBuilderDemoState createState() => _AnimatedBuilderDemoState(); -} - -class _AnimatedBuilderDemoState extends State - with SingleTickerProviderStateMixin { - late AnimationController controller; - - @override - void initState() { - super.initState(); - controller = AnimationController( - vsync: this, - lowerBound: 0.3, - upperBound: 1.0, - duration: const Duration(milliseconds: 500)) - ..forward(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () { - controller.forward(from: 0); - }, - child: AnimatedBuilder( - animation: controller, - builder: (ctx, child) { - return Transform.scale( - scale: controller.value, - child: Opacity(opacity: controller.value, child: child), - ); - }, - child: buildChild()), - ); - } - - Widget buildChild() => Container( - height: 100, - width: 100, - decoration: const BoxDecoration( - color: Colors.orange, - shape: BoxShape.circle, - ), - alignment: Alignment.center, - child: const Text( - 'Toly', - style: TextStyle(fontSize: 40, color: Colors.white), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_de_DE.json deleted file mode 100644 index 3c9dd45ce..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_de_DE.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "Animierter Container", - "info": "Vereint alignment, padding, color, decoration, width, height, constraints, margin, transform in einem. Alle diese Eigenschaften können animiert werden, können Dauer und Kurve angeben und haben ein Ereignis am Ende der Animation.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedContainer", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf am Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【color】 : Farbe 【Color】", - "【width】 : Breite 【double】", - "【height】 : Höhe 【double】", - "【alignment】 : Ausrichtung 【AlignmentGeometry】", - "【decoration】 : Dekoration 【Decoration】", - "【constraints】 : Einschränkungen 【BoxConstraints】", - "【transform】 : Transformation 【Matrix4】", - "【margin】 : Außenabstand 【EdgeInsetsGeometry】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_en_US.json deleted file mode 100644 index f9f0462c1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_en_US.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "Container Animation", - "info": "Combines alignment, padding, color, decoration, width, height, constraints, margin, and transform, all of which can be animated. You can specify the duration and curve, and there is an animation end event.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedContainer", - "desc": [ - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【color】: Color 【Color】", - "【width】: Width 【double】", - "【height】: Height 【double】", - "【alignment】: Alignment 【AlignmentGeometry】", - "【decoration】: Decoration 【Decoration】", - "【constraints】: Constraints 【BoxConstraints】", - "【transform】: Transformation 【Matrix4】", - "【margin】: Margin 【EdgeInsetsGeometry】", - "【padding】: Padding 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_es_ES.json deleted file mode 100644 index c8284b888..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_es_ES.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "Contenedor Animado", - "info": "Combina alignment, padding, color, decoration, width, height, constraints, margin, transform en uno solo. Todas estas propiedades pueden animarse, se pueden especificar la duración y la curva, y tiene un evento de finalización de animación.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedContainer", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Callback al finalizar la animación 【Function()】", - "【curve】 : Curva de la animación 【Duration】", - "【color】 : Color 【Color】", - "【width】 : Ancho 【double】", - "【height】 : Alto 【double】", - "【alignment】 : Alineación 【AlignmentGeometry】", - "【decoration】 : Decoración 【Decoration】", - "【constraints】 : Restricciones 【BoxConstraints】", - "【transform】 : Transformación 【Matrix4】", - "【margin】 : Margen exterior 【EdgeInsetsGeometry】", - "【padding】 : Margen interior 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_fr_FR.json deleted file mode 100644 index 430220dea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_fr_FR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "Animation de conteneur", - "info": "Combine alignment, padding, color, decoration, width, height, constraints, margin, transform en un seul, toutes ces propriétés peuvent être animées, la durée et la courbe peuvent être spécifiées, et il y a un événement de fin d'animation.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedContainer", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe d'animation 【Duration】", - "【color】 : Couleur 【Color】", - "【width】 : Largeur 【double】", - "【height】 : Hauteur 【double】", - "【alignment】 : Alignement 【AlignmentGeometry】", - "【decoration】 : Décoration 【Decoration】", - "【constraints】 : Contraintes 【BoxConstraints】", - "【transform】 : Transformation 【Matrix4】", - "【margin】 : Marge extérieure 【EdgeInsetsGeometry】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_it_IT.json deleted file mode 100644 index fcb17f57d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_it_IT.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "Animazione del contenitore", - "info": "Raccoglie alignment, padding, color, decoration, width, height, constraints, margin, transform in un unico componente. Tutti questi attributi possono essere animati, è possibile specificare la durata e la curva, e c'è un evento di fine animazione.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedContainer", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【color】 : Colore 【Color】", - "【width】 : Larghezza 【double】", - "【height】 : Altezza 【double】", - "【alignment】 : Allineamento 【AlignmentGeometry】", - "【decoration】 : Decorazione 【Decoration】", - "【constraints】 : Vincoli 【BoxConstraints】", - "【transform】 : Trasformazione 【Matrix4】", - "【margin】 : Margine esterno 【EdgeInsetsGeometry】", - "【padding】 : Margine interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ja_JP.json deleted file mode 100644 index 85d41bc01..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ja_JP.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "コンテナアニメーション", - "info": "alignment、padding、color、decoration、width、height、constraints、margin、transformを集約し、これらのプロパティはすべてアニメーション可能で、時間と曲線を指定でき、アニメーション終了イベントがあります。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedContainerの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【curve】 : アニメーション曲線 【Duration】", - "【color】 : 色 【Color】", - "【width】 : 幅 【double】", - "【height】 : 高さ 【double】", - "【alignment】 : 配置 【AlignmentGeometry】", - "【decoration】 : 装飾 【Decoration】", - "【constraints】 : 制約 【BoxConstraints】", - "【transform】 : 変換 【Matrix4】", - "【margin】 : 外側の余白 【EdgeInsetsGeometry】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ko_KR.json deleted file mode 100644 index 0e4e5f8a6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ko_KR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "애니메이션 컨테이너", - "info": "alignment, padding, color, decoration, width, height, constraints, margin, transform을 모두 포함하며, 이러한 속성들은 모두 애니메이션 가능하며, 지속 시간과 곡선을 지정할 수 있고, 애니메이션 종료 이벤트가 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedContainer 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【color】 : 색상 【Color】", - "【width】 : 너비 【double】", - "【height】 : 높이 【double】", - "【alignment】 : 정렬 【AlignmentGeometry】", - "【decoration】 : 장식 【Decoration】", - "【constraints】 : 제약 【BoxConstraints】", - "【transform】 : 변환 【Matrix4】", - "【margin】 : 외부 여백 【EdgeInsetsGeometry】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_pt_PT.json deleted file mode 100644 index f13eb49f4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_pt_PT.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "Animação de Contêiner", - "info": "Combina alignment, padding, color, decoration, width, height, constraints, margin, transform em um único lugar, todas essas propriedades podem ser animadas, é possível especificar a duração e a curva, e há um evento de término da animação.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedContainer", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【curve】 : Curva da animação 【Duration】", - "【color】 : Cor 【Color】", - "【width】 : Largura 【double】", - "【height】 : Altura 【double】", - "【alignment】 : Alinhamento 【AlignmentGeometry】", - "【decoration】 : Decoração 【Decoration】", - "【constraints】 : Restrições 【BoxConstraints】", - "【transform】 : Transformação 【Matrix4】", - "【margin】 : Margem externa 【EdgeInsetsGeometry】", - "【padding】 : Margem interna 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ru_RU.json deleted file mode 100644 index d0a51b159..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_ru_RU.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "Анимация контейнера", - "info": "Объединяет alignment, padding, color, decoration, width, height, constraints, margin, transform. Все эти свойства могут быть анимированы, можно указать длительность и кривую, есть событие завершения анимации.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedContainer", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Длительность анимации 【Duration】", - "【onEnd】 : Обратный вызов завершения анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【color】 : Цвет 【Color】", - "【width】 : Ширина 【double】", - "【height】 : Высота 【double】", - "【alignment】 : Выравнивание 【AlignmentGeometry】", - "【decoration】 : Декорация 【Decoration】", - "【constraints】 : Ограничения 【BoxConstraints】", - "【transform】 : Преобразование 【Matrix4】", - "【margin】 : Внешний отступ 【EdgeInsetsGeometry】", - "【padding】 : Внутренний отступ 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_zh-CN.json deleted file mode 100644 index dbec27ada..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/desc_zh-CN.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 123, - "name": "AnimatedContainer", - "localName": "容器动画", - "info": "集合alignment、padding、color、decoration、width、height、constraints、margin、transform于一身,这些属性皆可动画,可指定时长和曲线,有动画结束事件。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedContainer基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【color】 : 颜色 【Color】", - "【width】 : 宽 【double】", - "【height】 : 高 【double】", - "【alignment】 : 对齐 【AlignmentGeometry】", - "【decoration】 : 装饰 【Decoration】", - "【constraints】 : 约束 【BoxConstraints】", - "【transform】 : 变化 【Matrix4】", - "【margin】 : 外边距 【EdgeInsetsGeometry】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/node1_base.dart deleted file mode 100644 index e65689a2c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedContainer/node1_base.dart +++ /dev/null @@ -1,94 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedContainer extends StatefulWidget { - const CustomAnimatedContainer({Key? key}) : super(key: key); - - @override - _CustomAnimatedContainerState createState() => - _CustomAnimatedContainerState(); -} - -class _CustomAnimatedContainerState extends State { - final Decoration startDecoration = const BoxDecoration( - color: Colors.deepPurple, - borderRadius: BorderRadius.all(Radius.circular(30)), - boxShadow: [ - BoxShadow( - offset: Offset(1, 1), - color: Colors.purple, - blurRadius: 5, - spreadRadius: 2) - ]); - final Decoration endDecoration = const BoxDecoration( - color: Colors.blue, - borderRadius: BorderRadius.all(Radius.circular(10)), - boxShadow: [ - BoxShadow( - offset: Offset(1, 1), - color: Colors.blue, - blurRadius: 10, - spreadRadius: 0) - ]); - - final Alignment startAlignment = Alignment.topLeft + const Alignment(0.2, 0.2); - final Alignment endAlignment = Alignment.center; - - final double startHeight = 150.0; - final double endHeight = 100.0; - - late Decoration _decoration; - late double _height; - late Alignment _alignment; - - @override - void initState() { - super.initState(); - _decoration = startDecoration; - _height = startHeight; - _alignment = startAlignment; - } - - bool get selected => _height == endHeight; - @override - Widget build(BuildContext context) { - return Wrap( - direction: Axis.vertical, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Switch( - value: selected, - onChanged: onChanged, - ), - buildAnim() - ], - ); - } - Widget _buildChild() => const Icon( - Icons.camera_outlined, - size: 30, - color: Colors.white, - ); - Widget buildAnim() => AnimatedContainer( - duration: const Duration(seconds: 1), - curve: Curves.fastOutSlowIn, - decoration: _decoration, - alignment: _alignment, - onEnd: onEnd, - height: _height, - width: _height, - child: _buildChild(), - ); - void onChanged(bool value) { - setState(() { - _height = value ? endHeight : startHeight; - _decoration = value ? endDecoration : startDecoration; - _alignment = value ? endAlignment : startAlignment; - }); - } - void onEnd() { - print('End'); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_de_DE.json deleted file mode 100644 index f98e50550..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_de_DE.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "Komponentenwechsel", - "info": "Zeigt Animationseffekte beim Wechsel zwischen zwei Komponenten an. Eigenschaften wie Animationskurve, Dauer, Ausrichtung usw. können angegeben werden. Es ist eine sehr nützliche Komponente.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedCrossFade", - "desc": [ - "【firstChild】 : Erstes Kind 【Widget】", - "【secondChild】 : Zweites Kind 【Widget】", - "【crossFadeState】 : Welches anzeigen 【CrossFadeState】", - "【duration】 : Dauer 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "Animationskurve von AnimatedCrossFade", - "desc": [ - "【firstCurve】 : Erste Kurve 【Curve】", - "【secondCurve】 : Zweite Kurve 【Curve】", - "【sizeCurve】 : Größenänderungskurve 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_en_US.json deleted file mode 100644 index 047e68db6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_en_US.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "Component Switch", - "info": "Presents animation effects when switching between two components, allowing you to specify properties such as animation curves, duration, alignment, etc. It is a very useful component.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedCrossFade", - "desc": [ - "【firstChild】 : First Child 【Widget】", - "【secondChild】 : Second Child 【Widget】", - "【crossFadeState】 : Which to Display 【CrossFadeState】", - "【duration】 : Duration 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "Animation Curves of AnimatedCrossFade", - "desc": [ - "【firstCurve】 : First Curve 【Curve】", - "【secondCurve】 : Second Curve 【Curve】", - "【sizeCurve】 : Size Change Curve 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_es_ES.json deleted file mode 100644 index f743f5441..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_es_ES.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "Transición de componentes", - "info": "Muestra un efecto de animación al cambiar entre dos componentes, se pueden especificar propiedades como la curva de animación, la duración, la alineación, etc. Es un componente muy útil.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedCrossFade", - "desc": [ - "【firstChild】 : Primer hijo 【Widget】", - "【secondChild】 : Segundo hijo 【Widget】", - "【crossFadeState】 : Mostrar cuál 【CrossFadeState】", - "【duration】 : Duración 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "Curva de animación de AnimatedCrossFade", - "desc": [ - "【firstCurve】 : Primera curva 【Curve】", - "【secondCurve】 : Segunda curva 【Curve】", - "【sizeCurve】 : Curva de cambio de tamaño 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_fr_FR.json deleted file mode 100644 index 530d0ad95..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_fr_FR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "Transition de composants", - "info": "Anime la transition entre deux composants avec des effets, en spécifiant des propriétés telles que la courbe d'animation, la durée, l'alignement, etc. C'est un composant très utile.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedCrossFade", - "desc": [ - "【firstChild】 : Premier enfant 【Widget】", - "【secondChild】 : Deuxième enfant 【Widget】", - "【crossFadeState】 : Afficher lequel 【CrossFadeState】", - "【duration】 : Durée 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "Courbe d'animation d'AnimatedCrossFade", - "desc": [ - "【firstCurve】 : Première courbe 【Curve】", - "【secondCurve】 : Deuxième courbe 【Curve】", - "【sizeCurve】 : Courbe de changement de taille 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_it_IT.json deleted file mode 100644 index 9795e9a9e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_it_IT.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "Transizione Componenti", - "info": "Presenta un effetto animato quando si passa da un componente all'altro, è possibile specificare proprietà come la curva di animazione, la durata, l'allineamento, ecc. È un componente molto utile.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di AnimatedCrossFade", - "desc": [ - "【firstChild】 : Primo figlio 【Widget】", - "【secondChild】 : Secondo figlio 【Widget】", - "【crossFadeState】 : Mostra quale 【CrossFadeState】", - "【duration】 : Durata 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "Curva di Animazione di AnimatedCrossFade", - "desc": [ - "【firstCurve】 : Prima curva 【Curve】", - "【secondCurve】 : Seconda curva 【Curve】", - "【sizeCurve】 : Curva di variazione dimensionale 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ja_JP.json deleted file mode 100644 index 338813187..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ja_JP.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "コンポーネント切り替え", - "info": "2つのコンポーネントを切り替える際にアニメーション効果を表示し、アニメーションカーブ、時間、配置方法などの属性を指定できます。非常に便利なコンポーネントです。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedCrossFadeの基本使用", - "desc": [ - "【firstChild】 : 最初の子 【Widget】", - "【secondChild】 : 2番目の子 【Widget】", - "【crossFadeState】 : 表示する番号 【CrossFadeState】", - "【duration】 : 時間 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "AnimatedCrossFadeのアニメーションカーブ", - "desc": [ - "【firstCurve】 : 最初のカーブ 【Curve】", - "【secondCurve】 : 2番目のカーブ 【Curve】", - "【sizeCurve】 : サイズ変化カーブ 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ko_KR.json deleted file mode 100644 index 6531263ea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ko_KR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "컴포넌트 전환", - "info": "두 컴포넌트를 전환할 때 애니메이션 효과를 나타내며, 애니메이션 곡선, 지속 시간, 정렬 방식 등의 속성을 지정할 수 있습니다. 매우 유용한 컴포넌트입니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedCrossFade 기본 사용", - "desc": [ - "【firstChild】 : 첫 번째 자식 【Widget】", - "【secondChild】 : 두 번째 자식 【Widget】", - "【crossFadeState】 : 몇 번째를 표시할지 【CrossFadeState】", - "【duration】 : 지속 시간 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "AnimatedCrossFade 애니메이션 곡선", - "desc": [ - "【firstCurve】 : 첫 번째 곡선 【Curve】", - "【secondCurve】 : 두 번째 곡선 【Curve】", - "【sizeCurve】 : 크기 변화 곡선 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_pt_PT.json deleted file mode 100644 index 1537e8a37..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_pt_PT.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "Transição de Componentes", - "info": "Apresenta um efeito de animação ao alternar entre dois componentes, podendo especificar propriedades como a curva de animação, duração, alinhamento, etc. É um componente muito útil.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedCrossFade", - "desc": [ - "【firstChild】 : Primeiro filho 【Widget】", - "【secondChild】 : Segundo filho 【Widget】", - "【crossFadeState】 : Mostrar qual 【CrossFadeState】", - "【duration】 : Duração 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "Curva de Animação do AnimatedCrossFade", - "desc": [ - "【firstCurve】 : Primeira curva 【Curve】", - "【secondCurve】 : Segunda curva 【Curve】", - "【sizeCurve】 : Curva de mudança de tamanho 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ru_RU.json deleted file mode 100644 index 2ab52f739..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_ru_RU.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "Переключение компонентов", - "info": "При переключении двух компонентов отображается анимация, можно указать такие свойства, как кривая анимации, продолжительность, выравнивание и т.д. Это очень полезный компонент.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedCrossFade", - "desc": [ - "【firstChild】 : Первый ребенок 【Widget】", - "【secondChild】 : Второй ребенок 【Widget】", - "【crossFadeState】 : Показать какой 【CrossFadeState】", - "【duration】 : Продолжительность 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "Кривая анимации AnimatedCrossFade", - "desc": [ - "【firstCurve】 : Первая кривая 【Curve】", - "【secondCurve】 : Вторая кривая 【Curve】", - "【sizeCurve】 : Кривая изменения размера 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_zh-CN.json deleted file mode 100644 index 1c0695851..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/desc_zh-CN.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 100, - "name": "AnimatedCrossFade", - "localName": "组件切换", - "info": "将两个组件切换时呈现动画效果,可指定动画曲线、时长、对齐方式等属性。是一个非常有用的组件。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedCrossFade基本使用", - "desc": [ - "【firstChild】 : 第一孩子 【Widget】", - "【secondChild】 : 第二孩子 【Widget】", - "【crossFadeState】 : 显示第几个 【CrossFadeState】", - "【duration】 : 时长 【Duration】" - ] - }, - { - "file": "node2_curve.dart", - "name": "AnimatedCrossFade动画曲线", - "desc": [ - "【firstCurve】 : 第一曲线 【Curve】", - "【secondCurve】 : 第二曲线 【Curve】", - "【sizeCurve】 : 尺寸变化曲线 【CrossFadeState】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/node1_base.dart deleted file mode 100644 index 627d7861c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/node1_base.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-20 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedCrossFade extends StatefulWidget { - const CustomAnimatedCrossFade({Key? key}) : super(key: key); - - @override - _CustomAnimatedCrossFadeState createState() => - _CustomAnimatedCrossFadeState(); -} - -class _CustomAnimatedCrossFadeState extends State { - CrossFadeState _crossFadeState = CrossFadeState.showFirst; - - bool get isFirst => _crossFadeState == CrossFadeState.showFirst; - - @override - Widget build(BuildContext context) { - return Wrap( - children: [ - AnimatedCrossFade( - firstChild: Container( - alignment: Alignment.center, - width: 200, - height: 150, - color: Colors.orange, - child: const FlutterLogo(textColor: Colors.blue, size: 100,), - ), - secondChild: Container( - width: 200, - height: 150, - alignment: Alignment.center, - color: Colors.blue, - child: const FlutterLogo( - textColor: Colors.white, -// colors: Colors.orange, - size: 100, - style: FlutterLogoStyle.stacked,), - ), - duration: const Duration(milliseconds: 600), - crossFadeState: _crossFadeState, - ), - _buildSwitch(), - ], - - ); - } - - Widget _buildSwitch() => - Switch(value: isFirst, onChanged: (v) { - setState(() { - _crossFadeState = - v ? CrossFadeState.showFirst : CrossFadeState.showSecond; - }); - }); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/node2_curve.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/node2_curve.dart deleted file mode 100644 index 946798ae2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedCrossFade/node2_curve.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-20 -/// contact me by email 1981462002@qq.com - -class CurveAnimatedCrossFade extends StatefulWidget { - const CurveAnimatedCrossFade({Key? key}) : super(key: key); - - @override - _CurveAnimatedCrossFadeState createState() => _CurveAnimatedCrossFadeState(); -} - -class _CurveAnimatedCrossFadeState extends State { - var _crossFadeState = CrossFadeState.showFirst; - - bool get isFirst=> _crossFadeState == CrossFadeState.showFirst; - - @override - Widget build(BuildContext context) { - return Wrap( - children: [ - AnimatedCrossFade( - firstCurve: Curves.easeInCirc, - secondCurve: Curves.easeInToLinear, - sizeCurve: Curves.bounceOut, - firstChild: Container( - alignment: Alignment.center, - width: 200, - height: 80, - color: Colors.orange , - child: const FlutterLogo(textColor: Colors.blue,size: 50,), - ), - secondChild: Container( - width: 200, - height: 150, - alignment: Alignment.center, - color: Colors.blue, - child: const FlutterLogo( - textColor: Colors.white, -// colors: Colors.orange, - size: 100,style: FlutterLogoStyle.stacked,), - ), - duration: const Duration(milliseconds: 1000), - crossFadeState: _crossFadeState, - ), - _buildSwitch(), - ], - ); - } - - Widget _buildSwitch() => Switch(value: isFirst, onChanged: (v){ - setState(() { - _crossFadeState= v?CrossFadeState.showFirst:CrossFadeState.showSecond; - }); - }); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_de_DE.json deleted file mode 100644 index 100cc0663..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "Container-Animation", - "info": "Ermöglicht die Animation von TextStyle (Textstil) für untergeordnete Textkomponenten, gibt Dauer und Kurve an und verfügt über ein Ereignis zum Ende der Animation.", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedDefaultTextStyle", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf bei Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【textAlign】 : Textausrichtung 【TextAlign】", - "【softWrap】 : Umhüllung 【bool】", - "【maxLines】 : Maximale Zeilenanzahl 【int】", - "【overflow】 : Überlaufmodus 【TextOverflow】", - "【style】 : Textstil 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_en_US.json deleted file mode 100644 index 59279303e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "Container Animation", - "info": "Allows child text components to perform TextStyle (text style) animations, with specified duration and curve, and has an animation end event.", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedDefaultTextStyle", - "desc": [ - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【textAlign】: Text alignment 【TextAlign】", - "【softWrap】: Whether to wrap 【bool】", - "【maxLines】: Maximum number of lines 【int】", - "【overflow】: Overflow mode 【TextOverflow】", - "【style】: Text style 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_es_ES.json deleted file mode 100644 index c54a2bd4d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "Animación de contenedor", - "info": "Permite que los componentes de texto hijos realicen una animación de TextStyle (estilo de texto), se puede especificar la duración y la curva, y tiene un evento de finalización de la animación.", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedDefaultTextStyle", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Callback de finalización de la animación 【Function()】", - "【curve】 : Curva de la animación 【Duration】", - "【textAlign】 : Alineación del texto 【TextAlign】", - "【softWrap】 : Si se envuelve 【bool】", - "【maxLines】 : Número máximo de líneas 【int】", - "【overflow】 : Modo de desbordamiento 【TextOverflow】", - "【style】 : Estilo de texto 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_fr_FR.json deleted file mode 100644 index 939dd0774..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "Animation de conteneur", - "info": "Permet aux composants texte enfants d'effectuer une animation TextStyle (style de texte), peut spécifier la durée et la courbe, et dispose d'un événement de fin d'animation.", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedDefaultTextStyle", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe d'animation 【Duration】", - "【textAlign】 : Alignement du texte 【TextAlign】", - "【softWrap】 : Encapsulage 【bool】", - "【maxLines】 : Nombre maximum de lignes 【int】", - "【overflow】 : Mode de débordement 【TextOverflow】", - "【style】 : Style de texte 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_it_IT.json deleted file mode 100644 index 058c9f6a9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "Animazione del contenitore", - "info": "Consente ai componenti di testo figlio di animare lo stile del testo (TextStyle), con la possibilità di specificare durata e curva, e un evento di fine animazione.", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedDefaultTextStyle", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【textAlign】 : Allineamento del testo 【TextAlign】", - "【softWrap】 : Avvolgimento del testo 【bool】", - "【maxLines】 : Numero massimo di righe 【int】", - "【overflow】 : Modalità di overflow 【TextOverflow】", - "【style】 : Stile del testo 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ja_JP.json deleted file mode 100644 index 77d50c449..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "コンテナアニメーション", - "info": "子テキストコンポーネントにTextStyle(テキストスタイル)アニメーションを適用できます。時間と曲線を指定でき、アニメーション終了イベントがあります。", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedDefaultTextStyleの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【curve】 : アニメーション曲線 【Duration】", - "【textAlign】 : テキストの配置 【TextAlign】", - "【softWrap】 : ラップするかどうか 【bool】", - "【maxLines】 : 最大行数 【int】", - "【overflow】 : オーバーフローモード 【TextOverflow】", - "【style】 : テキストスタイル 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ko_KR.json deleted file mode 100644 index b68b4dce5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "컨테이너 애니메이션", - "info": "자식 텍스트 컴포넌트에 TextStyle(텍스트 스타일) 애니메이션을 적용할 수 있으며, 지속 시간과 곡선을 지정할 수 있고 애니메이션 종료 이벤트가 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedDefaultTextStyle 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【textAlign】 : 텍스트 정렬 방식 【TextAlign】", - "【softWrap】 : 감싸기 여부 【bool】", - "【maxLines】 : 최대 줄 수 【int】", - "【overflow】 : 오버플로우 모드 【TextOverflow】", - "【style】 : 텍스트 스타일 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_pt_PT.json deleted file mode 100644 index d95c63a4f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "Animação de Contêiner", - "info": "Permite que componentes de texto filhos realizem animações de TextStyle (estilo de texto), pode especificar duração e curva, e possui evento de término de animação.", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedDefaultTextStyle", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【curve】 : Curva da animação 【Duration】", - "【textAlign】 : Alinhamento do texto 【TextAlign】", - "【softWrap】 : Se deve envolver 【bool】", - "【maxLines】 : Número máximo de linhas 【int】", - "【overflow】 : Modo de overflow 【TextOverflow】", - "【style】 : Estilo de texto 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ru_RU.json deleted file mode 100644 index 83117ad5c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "Анимация контейнера", - "info": "Позволяет дочерним текстовым компонентам анимировать TextStyle (стиль текста), можно указать продолжительность и кривую, есть событие завершения анимации.", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedDefaultTextStyle", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Продолжительность анимации 【Duration】", - "【onEnd】 : Обратный вызов завершения анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【textAlign】 : Выравнивание текста 【TextAlign】", - "【softWrap】 : Обёртка 【bool】", - "【maxLines】 : Максимальное количество строк 【int】", - "【overflow】 : Режим переполнения 【TextOverflow】", - "【style】 : Стиль текста 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_zh-CN.json deleted file mode 100644 index 0f48f68e3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 124, - "name": "AnimatedDefaultTextStyle", - "localName": "容器动画", - "info": "能让子文字组件进行TextStyle(文字样式)动画,可指定时长和曲线,有动画结束事件。", - "lever": 3, - "family": 1, - "linkIds": [ - 114, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedDefaultTextStyle基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【textAlign】 : 文字对齐方式 【TextAlign】", - "【softWrap】 : 是否包裹 【bool】", - "【maxLines】 : 最大行数 【int】", - "【overflow】 : 溢出模式 【TextOverflow】", - "【style】 : 文字样式 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/node1_base.dart deleted file mode 100644 index 5923a1f9d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedDefaultTextStyle/node1_base.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedDefaultTextStyle extends StatefulWidget { - const CustomAnimatedDefaultTextStyle({Key? key}) : super(key: key); - - @override - _CustomAnimatedDefaultTextStyleState createState() => - _CustomAnimatedDefaultTextStyleState(); -} - -class _CustomAnimatedDefaultTextStyleState - extends State { - final TextStyle start = const TextStyle( - color: Colors.blue, - fontSize: 50, - shadows: [ - Shadow(offset: Offset(1, 1), color: Colors.black, blurRadius: 3) - ]); - final TextStyle end = const TextStyle( - color: Colors.white, - fontSize: 20, - shadows: [ - Shadow(offset: Offset(1, 1), color: Colors.purple, blurRadius: 3) - ]); - - late TextStyle _style; - - @override - void initState() { - _style = start; - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSwitch(), - Container( - alignment: Alignment.center, - color: Colors.grey.withAlpha(22), - width: 300, - height: 100, - child: AnimatedDefaultTextStyle( - textAlign: TextAlign.start, - softWrap: true, - maxLines: 1, - overflow: TextOverflow.ellipsis, - duration: const Duration(seconds: 1), - curve: Curves.fastOutSlowIn, - style: _style, - onEnd: () => print('End'), - child: const Text( - '张风捷特烈', - style: TextStyle(color: Colors.white), - ), - ), - ), - ], - ); - } - - Widget _buildSwitch() => Switch( - value: _style == end, - onChanged: (v) { - setState(() { - _style = v ? end : start; - }); - }); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_de_DE.json deleted file mode 100644 index df9f04640..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "Animierte Bruchteilbox", - "info": "Animierte Version von FractionallySizedBox, die sich automatisch und sanft innerhalb der angegebenen Dauer zur Zielgröße und Position des Kindelements übergeht, wenn sich widthFactor oder heightFactor ändern sowie wenn sich die Ausrichtung ändert.", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Animationsübergangseffekt", - "desc": [ - "In diesem Fall werden die Parameter heightFactor, widthFactor und alignment beim Klicken geändert, um den Animationseffekt zu sehen.", - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf bei Animationsende 【Function()】", - "【alignment】 : Animationszentrum 【Alignment】", - "【curve】 : Animationskurve 【Duration】", - "【heightFactor】 : Höhenfaktor 【double?】", - "【widthFactor】 : Breitenfaktor 【double?】", - "【turns】 : Drehungsmenge 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_en_US.json deleted file mode 100644 index 5edb98fd8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "Animated Fractionally Sized Box", - "info": "An animated version of FractionallySizedBox, which automatically and smoothly transitions to the target size and position of the child component within the specified duration when the widthFactor or heightFactor changes, or when the alignment changes.", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Animation Transition Effect", - "desc": [ - "In this case, the heightFactor, widthFactor, and alignment parameters are modified when clicked to view the animation effect.", - "【child】 : Child component 【Widget】", - "【duration】 : Animation duration 【Duration】", - "【onEnd】 : Animation end callback 【Function()】", - "【alignment】 : Animation transformation center 【Alignment】", - "【curve】 : Animation curve 【Duration】", - "【heightFactor】 : Height factor 【double?】", - "【widthFactor】 : Width factor 【double?】", - "【turns】 : Rotation amount 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_es_ES.json deleted file mode 100644 index a05b4fdc7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "Caja de tamaño fraccional animada", - "info": "Versión animada de FractionallySizedBox, cuando cambia el widthFactor o el heightFactor, así como cuando cambia el alignment, se realizará una transición suave automática a las dimensiones y posición objetivo del componente hijo en la duración especificada.", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Efecto de transición animada", - "desc": [ - "En este caso, al hacer clic se modifican los parámetros heightFactor, widthFactor, alignment para ver el efecto de movimiento animado.", - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Devolución de llamada al finalizar la animación 【Function()】", - "【alignment】 : Centro de transformación de la animación 【Alignment】", - "【curve】 : Curva de la animación 【Duration】", - "【heightFactor】 : Factor de altura 【double?】", - "【widthFactor】 : Factor de ancho 【double?】", - "【turns】 : Cantidad de rotación 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_fr_FR.json deleted file mode 100644 index 9662b770c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "Boîte fractionnée animée", - "info": "Version animée de FractionallySizedBox, lorsque widthFactor ou heightFactor change, ainsi que lorsque l'alignement change, elle transite automatiquement et en douceur vers la taille et la position cible du composant enfant dans la durée spécifiée.", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Effet de transition animée", - "desc": [ - "Dans ce cas, en cliquant, les paramètres heightFactor, widthFactor et alignment sont modifiés pour observer l'effet de mouvement animé.", - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【alignment】 : Centre de transformation de l'animation 【Alignment】", - "【curve】 : Courbe de l'animation 【Duration】", - "【heightFactor】 : Facteur de hauteur 【double?】", - "【widthFactor】 : Facteur de largeur 【double?】", - "【turns】 : Quantité de rotation 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_it_IT.json deleted file mode 100644 index 96dd4486f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "Scatola animata frazionata", - "info": "Versione animata di FractionallySizedBox, quando widthFactor o heightFactor cambiano, così come quando alignment cambia, si transiziona automaticamente e dolcemente alle dimensioni e posizioni target del componente figlio entro la durata specificata.", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Effetto di transizione animata", - "desc": [ - "In questo caso, cliccando si modificano i parametri heightFactor, widthFactor, alignment, per osservare l'effetto del movimento animato.", - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【alignment】 : Centro di trasformazione dell'animazione 【Alignment】", - "【curve】 : Curva dell'animazione 【Duration】", - "【heightFactor】 : Fattore di altezza 【double?】", - "【widthFactor】 : Fattore di larghezza 【double?】", - "【turns】 : Quantità di rotazione 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ja_JP.json deleted file mode 100644 index 70b690cb8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "アニメーションフラクショナリーボックス", - "info": "FractionallySizedBox のアニメーションバージョンで、widthFactor または heightFactor が変化したとき、および alignment が変更されたときに、指定された期間内で子コンポーネントの目標サイズと位置に自動的にスムーズに遷移します。", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "アニメーション遷移効果", - "desc": [ - "このケースでは、クリックすると heightFactor、widthFactor、alignment パラメータが変更され、アニメーションの動きを確認できます。", - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【alignment】 : アニメーション変換中心 【Alignment】", - "【curve】 : アニメーションカーブ 【Duration】", - "【heightFactor】 : 高さ分率 【double?】", - "【widthFactor】 : 幅分率 【double?】", - "【turns】 : 回転量 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ko_KR.json deleted file mode 100644 index 036dd40f1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "애니메이션 분율 박스", - "info": "FractionallySizedBox의 애니메이션 버전으로, widthFactor 또는 heightFactor가 변경될 때, 그리고 alignment가 변경될 때 지정된 지속 시간 동안 자동으로 부드럽게 자식 위젯의 목표 크기와 위치로 전환됩니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "애니메이션 전환 효과", - "desc": [ - "이 예제에서는 클릭 시 heightFactor, widthFactor, alignment 매개변수를 수정하여 애니메이션 동작 효과를 확인합니다.", - "【child】 : 자식 위젯 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【alignment】 : 애니메이션 변환 중심 【Alignment】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【heightFactor】 : 높이 분율 【double?】", - "【widthFactor】 : 너비 분율 【double?】", - "【turns】 : 회전량 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_pt_PT.json deleted file mode 100644 index 1b3855532..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "Caixa de Fração Animada", - "info": "Versão animada do FractionallySizedBox, quando o widthFactor ou heightFactor muda, assim como a alignment, ele faz automaticamente uma transição suave para o tamanho e posição desejados do componente filho dentro da duração especificada.", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Efeito de Transição Animada", - "desc": [ - "Neste caso, ao clicar, os parâmetros heightFactor, widthFactor e alignment são modificados para visualizar o efeito de movimento da animação.", - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de fim da animação 【Function()】", - "【alignment】 : Centro de transformação da animação 【Alignment】", - "【curve】 : Curva da animação 【Duration】", - "【heightFactor】 : Fator de altura 【double?】", - "【widthFactor】 : Fator de largura 【double?】", - "【turns】 : Quantidade de rotação 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ru_RU.json deleted file mode 100644 index 8efe05d52..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "Анимированный FractionallySizedBox", - "info": "Анимированная версия FractionallySizedBox, которая автоматически плавно переходит к целевому размеру и положению дочернего компонента в течение указанной продолжительности при изменении widthFactor или heightFactor, а также при изменении alignment.", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Анимационный переход", - "desc": [ - "В этом примере при нажатии изменяются параметры heightFactor, widthFactor и alignment, чтобы увидеть эффект анимации.", - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Длительность анимации 【Duration】", - "【onEnd】 : Обратный вызов по завершении анимации 【Function()】", - "【alignment】 : Центр анимационного преобразования 【Alignment】", - "【curve】 : Кривая анимации 【Duration】", - "【heightFactor】 : Коэффициент высоты 【double?】", - "【widthFactor】 : Коэффициент ширины 【double?】", - "【turns】 : Количество поворотов 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_zh-CN.json deleted file mode 100644 index 5408f22fc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 260, - "name": "AnimatedFractionallySizedBox", - "localName": "动画分率盒", - "info": "FractionallySizedBox 的动画版本,当 widthFactor 或 heightFactor 变化时, 以及 alignment 改变时,都会在指定的持续时间内自动平滑过渡到子组件的目标尺寸和位置。", - "lever": 3, - "family": 1, - "linkIds": [ - 82, - 120, - 123, - 121 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "动画过渡效果", - "desc": [ - "该案例中,点击时会修改 heightFactor、widthFactor、alignment 参数,查看动画运动效果。", - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【alignment】 : 动画变换中心 【Alignment】", - "【curve】 : 动画曲线 【Duration】", - "【heightFactor】 : 高度分率 【double?】", - "【widthFactor】 : 宽度分率 【double?】", - "【turns】 : 旋转量 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/node1.dart deleted file mode 100644 index c870a4555..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedFractionallySizedBox/node1.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -class AnimatedFractionallySizedBoxDemo extends StatefulWidget { - const AnimatedFractionallySizedBoxDemo({super.key}); - - @override - State createState() => _AnimatedFractionallySizedBoxDemoState(); -} - -class _AnimatedFractionallySizedBoxDemoState - extends State { - bool selected = false; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 240, - child: Center( - child: GestureDetector( - onTap: () { - setState(() { - selected = !selected; - }); - }, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - _buildCell(), - const SizedBox(height: 4), - const Text('点击面板') - ], - ), - ), - ), - ); - } - - Widget _buildCell() { - return SizedBox( - width: 200, - height: 200, - child: ColoredBox( - color: Colors.red, - child: AnimatedFractionallySizedBox( - widthFactor: selected ? 0.25 : 0.75, - heightFactor: selected ? 0.75 : 0.25, - alignment: selected ? Alignment.topLeft : Alignment.bottomRight, - duration: const Duration(seconds: 1), - curve: Curves.fastOutSlowIn, - child: const ColoredBox( - color: Colors.blue, - child: FlutterLogo(size: 75), - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_de_DE.json deleted file mode 100644 index 4b077f164..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "Animierte Liste", - "info": "Erweiterte Version von ListView, die Animationen für Elemente ermöglicht. Zum Beispiel Animationen beim Hinzufügen oder Entfernen von Elementen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedList", - "desc": [ - "【itemBuilder】 : Komponentenkonstruktor 【AnimatedListItemBuilder】", - "【initialItemCount】 : Anzahl der Unterkomponenten 【int】", - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【controller】 : Scroll-Controller 【ScrollController】", - "【reverse】 : Daten umgekehrt 【bool】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_en_US.json deleted file mode 100644 index ffc8e3359..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "Animated List", - "info": "An enhanced version of ListView, which can animate items. For example, animations for adding or deleting items.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedList", - "desc": [ - "【itemBuilder】: Component builder 【AnimatedListItemBuilder】", - "【initialItemCount】: Number of child components 【int】", - "【scrollDirection】: Scroll direction 【Axis】", - "【controller】: Scroll controller 【ScrollController】", - "【reverse】: Whether the data is reversed 【bool】", - "【padding】: Padding 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_es_ES.json deleted file mode 100644 index e4b800f47..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "Lista animada", - "info": "Versión mejorada de ListView, permite animar los ítems. Por ejemplo, animaciones al añadir o eliminar ítems.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedList", - "desc": [ - "【itemBuilder】: Constructor de componentes 【AnimatedListItemBuilder】", - "【initialItemCount】: Número de componentes hijos 【int】", - "【scrollDirection】: Dirección de desplazamiento 【Axis】", - "【controller】: Controlador de desplazamiento 【ScrollController】", - "【reverse】: Si los datos están invertidos 【bool】", - "【padding】: Relleno interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_fr_FR.json deleted file mode 100644 index 085b8bb7f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "Liste animée", - "info": "Une version améliorée de ListView, permettant d'animer les éléments. Par exemple, des animations lors de l'ajout ou de la suppression d'éléments.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedList", - "desc": [ - "【itemBuilder】 : Constructeur de composants 【AnimatedListItemBuilder】", - "【initialItemCount】 : Nombre de composants enfants 【int】", - "【scrollDirection】 : Direction de défilement 【Axis】", - "【controller】 : Contrôleur de défilement 【ScrollController】", - "【reverse】 : Inversion des données 【bool】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_it_IT.json deleted file mode 100644 index d31874c9e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "Lista Animata", - "info": "Versione potenziata di ListView, consente di animare gli item. Ad esempio, animazioni degli item durante l'aggiunta o la rimozione.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedList", - "desc": [ - "【itemBuilder】 : Costruttore di componenti 【AnimatedListItemBuilder】", - "【initialItemCount】 : Numero di componenti figli 【int】", - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【controller】 : Controllore di scorrimento 【ScrollController】", - "【reverse】 : Se i dati sono invertiti 【bool】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ja_JP.json deleted file mode 100644 index 3a73e79fc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "アニメーションリスト", - "info": "強化版のListViewで、アイテムにアニメーションを適用できます。例えば、追加や削除時のアイテムのアニメーションなど。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedListの基本使用", - "desc": [ - "【itemBuilder】 : コンポーネントビルダー 【AnimatedListItemBuilder】", - "【initialItemCount】 : サブコンポーネントの数 【int】", - "【scrollDirection】 : スライド方向 【Axis】", - "【controller】 : スライドコントローラー 【ScrollController】", - "【reverse】 : データが逆順かどうか 【bool】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ko_KR.json deleted file mode 100644 index 6e1f1c136..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "애니메이션 리스트", - "info": "강화된 ListView, 아이템에 애니메이션을 적용할 수 있습니다. 예를 들어 추가, 삭제 시 아이템의 애니메이션.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedList 기본 사용", - "desc": [ - "【itemBuilder】 : 컴포넌트 생성기 【AnimatedListItemBuilder】", - "【initialItemCount】 : 하위 컴포넌트 수 【int】", - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【controller】 : 스크롤 컨트롤러 【ScrollController】", - "【reverse】 : 데이터 반전 여부 【bool】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_pt_PT.json deleted file mode 100644 index 5b981ca1c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "Lista Animada", - "info": "Versão aprimorada do ListView, que permite animar os itens. Por exemplo, animações ao adicionar ou remover itens.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedList", - "desc": [ - "【itemBuilder】: Construtor de componentes 【AnimatedListItemBuilder】", - "【initialItemCount】: Número de subcomponentes 【int】", - "【scrollDirection】: Direção de deslizamento 【Axis】", - "【controller】: Controlador de deslizamento 【ScrollController】", - "【reverse】: Se os dados estão invertidos 【bool】", - "【padding】: Preenchimento interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ru_RU.json deleted file mode 100644 index 7aade432b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "Анимированный список", - "info": "Улучшенная версия ListView, которая позволяет анимировать элементы. Например, анимация при добавлении или удалении элементов.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedList", - "desc": [ - "【itemBuilder】 : Конструктор компонента 【AnimatedListItemBuilder】", - "【initialItemCount】 : Количество дочерних компонентов 【int】", - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【controller】 : Контроллер прокрутки 【ScrollController】", - "【reverse】 : Обратный порядок данных 【bool】", - "【padding】 : Внутренний отступ 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_zh-CN.json deleted file mode 100644 index 0553e92f5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 117, - "name": "AnimatedList", - "localName": "动画列表", - "info": "强化版的ListView,可以对item进行动画处理。比如在添加、删除是item的动画。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedList基本使用", - "desc": [ - "【itemBuilder】 : 组件构造器 【AnimatedListItemBuilder】", - "【initialItemCount】 : 子组件数量 【int】", - "【scrollDirection】 : 滑动方向 【Axis】", - "【controller】 : 滑动控制器 【ScrollController】", - "【reverse】 : 数据是否反向 【bool】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/node1_base.dart deleted file mode 100644 index 9f5ded80a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedList/node1_base.dart +++ /dev/null @@ -1,179 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedList extends StatefulWidget { - const CustomAnimatedList({super.key}); - - @override - State createState() => _CustomAnimatedListState(); -} - -class _CustomAnimatedListState extends State { - final GlobalKey _listKey = GlobalKey(); - late ListModel _list; - int? _selectedItem; - int _nextItem = 0; - - @override - void initState() { - super.initState(); - _list = ListModel( - listKey: _listKey, - initialItems: [0, 1, 2, 3], - removedItemBuilder: _buildRemovedItem, - ); - _nextItem = 4; - } - - Widget _buildItem( - BuildContext context, int index, Animation animation) { - return _CardItem( - animation: animation, - item: _list[index], - selected: _selectedItem == _list[index], - onTap: () { - setState(() { - _selectedItem = _selectedItem == _list[index] ? null : _list[index]; - }); - }, - ); - } - - Widget _buildRemovedItem( - int item, BuildContext context, Animation animation) { - return _CardItem( - animation: animation, - item: item, - selected: false, - ); - } - - void _insert() { - final int index = - _selectedItem == null ? _list.length : _list.indexOf(_selectedItem!); - _list.insert(index, _nextItem++); - } - - void _remove() { - if (_selectedItem != null) { - _list.removeAt(_list.indexOf(_selectedItem!)); - setState(() { - _selectedItem = null; - }); - } - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.grey.withAlpha(33), - width: MediaQuery.of(context).size.width/2, - child: Column( - children: [ - _buildBtn(), - SizedBox( - width: MediaQuery.of(context).size.width/2, - height: 300, - child: AnimatedList( - padding: const EdgeInsets.all(10.0), - key: _listKey, - initialItemCount: _list.length, - itemBuilder: _buildItem, - ), - ) - ], - )); - } - - Widget _buildBtn() => Row( - children: [ - IconButton( - icon: const Icon( - Icons.add_circle, - color: Colors.blue, - ), - onPressed: _insert, - ), - IconButton( - icon: const Icon(Icons.remove_circle, color: Colors.blue), - onPressed: _remove, - ), - ], - ); -} - -class ListModel { - ListModel({ - required this.listKey, - required this.removedItemBuilder, - required Iterable initialItems, - }) : assert(removedItemBuilder != null), - _items = List.from(initialItems); - final GlobalKey listKey; - final dynamic removedItemBuilder; - final List _items; - - AnimatedListState? get _animatedList => listKey.currentState; - - void insert(int index, E item) { - _items.insert(index, item); - _animatedList?.insertItem(index); - } - - E removeAt(int index) { - final E removedItem = _items.removeAt(index); - if (removedItem != null) { - _animatedList?.removeItem( - index, - (BuildContext context, Animation animation) => - removedItemBuilder(removedItem, context, animation), - ); - } - return removedItem; - } - - int get length => _items.length; - - E operator [](int index) => _items[index]; - - int indexOf(E item) => _items.indexOf(item); -} - -class _CardItem extends StatelessWidget { - const _CardItem( - {super.key, - required this.animation, - this.onTap, - required this.item, - this.selected = false}) - : assert(item >= 0); - final Animation animation; - final VoidCallback? onTap; - final int item; - final bool selected; - - @override - Widget build(BuildContext context) { - return SizeTransition( - axis: Axis.vertical, - sizeFactor: animation, - child: Card( - child: Container( - color: Colors.primaries[item % Colors.primaries.length], - child: CheckboxListTile( - dense: true, - title: Text( - 'Item $item', - style: const TextStyle(color: Colors.white, fontSize: 18), - ), - value: selected, - onChanged: (v) { - onTap?.call(); - }), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_de_DE.json deleted file mode 100644 index 1b4de5738..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "Animierte Modalschranke", - "info": "Intern basiert es auf ModalBarrier und bietet die gleiche Funktionalität, jedoch kann dieser Komponente eine Farbanimation übergeben werden, um einen Übergangseffekt zu erzielen.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in AnimatedModalBarrier", - "desc": [ - "【dismissible】 : Gibt an, ob ein Klick zurückkehrt 【bool】", - "【color】 : Farbe 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_en_US.json deleted file mode 100644 index e412ca897..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "Animated Barrier Module", - "info": "Internally relies on ModalBarrier for implementation, with the same functionality, except that this component can accept a color animation for transition display.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to AnimatedModalBarrier", - "desc": [ - "【dismissible】: Whether to return on click 【bool】", - "【color】: Color 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_es_ES.json deleted file mode 100644 index 18c13fdb4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "Barrera Modal Animada", - "info": "Implementado internamente con ModalBarrier, con la misma funcionalidad, pero este componente puede recibir una animación de color para una transición suave.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a AnimatedModalBarrier", - "desc": [ - "【dismissible】: Si se puede volver al hacer clic 【bool】", - "【color】: Color 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_fr_FR.json deleted file mode 100644 index e9ed5dea5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "Barrière Modale Animée", - "info": "Implémenté en interne avec ModalBarrier, fonctionne de la même manière, mais ce composant peut recevoir une animation de couleur pour une transition visuelle.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à AnimatedModalBarrier", - "desc": [ - "【dismissible】 : Retour au clic 【bool】", - "【color】 : Couleur 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_it_IT.json deleted file mode 100644 index c127583cd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "Barriera Modale Animata", - "info": "Implementato internamente con ModalBarrier, le funzionalità sono le stesse, ma questo componente può ricevere un'animazione di colore per una transizione graduale.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a AnimatedModalBarrier", - "desc": [ - "【dismissible】 : Se cliccato, ritorna 【bool】", - "【color】 : Colore 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ja_JP.json deleted file mode 100644 index 8bf23aef5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "アニメーションバリアモジュール", - "info": "内部的にModalBarrierに依存して実装されており、機能は同じですが、このコンポーネントにはカラーアニメーションを渡して、トランジションを表示することができます。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedModalBarrier 紹介", - "desc": [ - "【dismissible】 : クリックで戻るかどうか 【bool】", - "【color】 : 色 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ko_KR.json deleted file mode 100644 index 041ab445d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "애니메이션 배리어 모드", - "info": "내부적으로 ModalBarrier를 기반으로 구현되었으며, 기능은 동일합니다. 다만 이 컴포넌트는 색상 애니메이션을 전달하여 전환 효과를 나타낼 수 있습니다.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedModalBarrier 소개", - "desc": [ - "【dismissible】 : 클릭 시 반환 여부 【bool】", - "【color】 : 색상 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_pt_PT.json deleted file mode 100644 index 8614f706f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "Barreira Modal Animada", - "info": "Implementado internamente com ModalBarrier, com funcionalidades idênticas, exceto que este componente pode receber uma animação de cor para transição.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao AnimatedModalBarrier", - "desc": [ - "【dismissible】: Clicar para retornar 【bool】", - "【color】: Cor 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ru_RU.json deleted file mode 100644 index a4d6fdce9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "Анимированный барьер", - "info": "Внутренняя реализация зависит от ModalBarrier, функциональность идентична, за исключением того, что этот компонент может принимать анимацию цвета для плавного отображения.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в AnimatedModalBarrier", - "desc": [ - "【dismissible】 : Возврат при клике 【bool】", - "【color】 : Цвет 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_zh-CN.json deleted file mode 100644 index 7697738b0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 227, - "name": "AnimatedModalBarrier", - "localName": "动画屏障模", - "info": "内部依赖 ModalBarrier 实现,功能一致,只不过该组件可以传入一个颜色动画,进行过渡展现。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedModalBarrier 介绍", - "desc": [ - "【dismissible】 : 点击是否返回 【bool】", - "【color】 : 颜色 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/node1_base.dart deleted file mode 100644 index a01d1d7bf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedModalBarrier/node1_base.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class AnimatedModalBarrierDemo extends StatefulWidget { - const AnimatedModalBarrierDemo({Key? key}) : super(key: key); - - @override - _AnimatedModalBarrierDemoState createState() => - _AnimatedModalBarrierDemoState(); -} - -class _AnimatedModalBarrierDemoState extends State - with SingleTickerProviderStateMixin { - late AnimationController _controller; - late Animation _color; - - @override - void initState() { - super.initState(); - _controller = AnimationController( - vsync: this, - duration: const Duration(seconds: 2), - )..forward(); - _color = ColorTween( - begin: Colors.blue, - end: Colors.purple, - ).animate(_controller); - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 200, - height: 100, - child: Stack(alignment: Alignment.center, children: [ - AnimatedModalBarrier( - dismissible: true, - color: _color, - ), - const Text( - '点击背景返回', - style: TextStyle(color: Colors.white), - ) - ]), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_de_DE.json deleted file mode 100644 index 37fe54b46..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "Transparenz-Animation", - "info": "Ermöglicht die Animation der Opazität (Transparenz) von Kindkomponenten, ermöglicht die Angabe von Dauer und Kurve und verfügt über ein Ereignis zum Ende der Animation.", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedOpacity", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf am Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【opacity】 : Transparenz 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_en_US.json deleted file mode 100644 index bbfbc733a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "Opacity Animation", - "info": "Allows child components to perform opacity animations, with specified duration and curve, and has an animation end event.", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedOpacity", - "desc": [ - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【opacity】: Opacity 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_es_ES.json deleted file mode 100644 index 3b874d14f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "Animación de Opacidad", - "info": "Permite animar la opacidad de los componentes hijos, se puede especificar la duración y la curva, y tiene un evento de finalización de la animación.", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedOpacity", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Callback al finalizar la animación 【Function()】", - "【curve】 : Curva de la animación 【Duration】", - "【opacity】 : Opacidad 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_fr_FR.json deleted file mode 100644 index 2217fa08f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "Animation de transparence", - "info": "Permet à un composant enfant de réaliser une animation d'opacité, avec une durée et une courbe spécifiables, et un événement de fin d'animation.", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedOpacity", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Callback de fin d'animation 【Function()】", - "【curve】 : Courbe de l'animation 【Duration】", - "【opacity】 : Opacité 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_it_IT.json deleted file mode 100644 index f2ad7713c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "Animazione di opacità", - "info": "Consente ai componenti figli di eseguire un'animazione di Opacity (opacità), può specificare la durata e la curva, e ha un evento di fine animazione.", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedOpacity", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【opacity】 : Opacità 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ja_JP.json deleted file mode 100644 index b36dddf6e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "透明度アニメーション", - "info": "子コンポーネントにOpacity(透明度)アニメーションを適用でき、時間と曲線を指定でき、アニメーション終了イベントがあります。", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedOpacityの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【curve】 : アニメーション曲線 【Duration】", - "【opacity】 : 透明度 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ko_KR.json deleted file mode 100644 index 7305222cd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "투명도 애니메이션", - "info": "자식 위젯에 Opacity(투명도) 애니메이션을 적용할 수 있으며, 지속 시간과 곡선을 지정할 수 있고 애니메이션 종료 이벤트가 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedOpacity 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【opacity】 : 투명도 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_pt_PT.json deleted file mode 100644 index 0c8f16020..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "Animação de Opacidade", - "info": "Permite que os componentes filhos realizem animações de Opacidade, podendo especificar a duração e a curva, com eventos de término da animação.", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedOpacity", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【curve】 : Curva da animação 【Duration】", - "【opacity】 : Opacidade 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ru_RU.json deleted file mode 100644 index 1320b3bfa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "Анимация прозрачности", - "info": "Позволяет дочерним компонентам выполнять анимацию Opacity (прозрачности), можно указать продолжительность и кривую, есть событие завершения анимации.", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedOpacity", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Продолжительность анимации 【Duration】", - "【onEnd】 : Обратный вызов завершения анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【opacity】 : Прозрачность 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_zh-CN.json deleted file mode 100644 index 4939396b5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 118, - "name": "AnimatedOpacity", - "localName": "透明动画", - "info": "能让子组件进行Opacity(透明度)动画,可指定时长和曲线,有动画结束事件。", - "lever": 3, - "family": 1, - "linkIds": [ - 89, - 73 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedOpacity基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【opacity】 : 透明度 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/node1_base.dart deleted file mode 100644 index 8bc2cba6e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedOpacity/node1_base.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedOpacity extends StatefulWidget { - const CustomAnimatedOpacity({Key? key}) : super(key: key); - - @override - _CustomAnimatedOpacityState createState() => _CustomAnimatedOpacityState(); -} - -class _CustomAnimatedOpacityState extends State { - double _opacity = 1.0; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Switch( - value: _opacity == 0, - onChanged: (v) { - setState(() { - _opacity = v ? 0 : 1.0; - }); - }), - Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 100, - child: AnimatedOpacity( - duration: const Duration(seconds: 1), - curve: Curves.fastOutSlowIn, - opacity: _opacity, - onEnd: () => print('End'), - child: const Icon(Icons.android, color: Colors.green, size: 60), - ), - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_de_DE.json deleted file mode 100644 index b87470c96..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "Animierter Abstand", - "info": "Ermöglicht Padding (Innenabstand) Animationen für Kind-Komponenten, kann Dauer und Kurve angeben, hat ein Ereignis für das Ende der Animation.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedPadding", - "desc": [ - "【child】 : Kind-Komponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf am Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_en_US.json deleted file mode 100644 index ab9b53fd0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "Padding Animation", - "info": "Allows child components to perform padding animation, with specified duration and curve, and has an animation end event.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedPadding", - "desc": [ - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【padding】: Padding 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_es_ES.json deleted file mode 100644 index 1b6f61137..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "Animación de margen", - "info": "Permite que los componentes hijos realicen una animación de Padding (margen interior), se puede especificar la duración y la curva, y tiene un evento de finalización de la animación.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedPadding", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Callback al finalizar la animación 【Function()】", - "【curve】 : Curva de la animación 【Duration】", - "【padding】 : Margen interior 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_fr_FR.json deleted file mode 100644 index f0cd004b4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "Animation de marge", - "info": "Permet à un composant enfant d'animer le Padding (marge intérieure), avec la possibilité de spécifier la durée et la courbe, et un événement de fin d'animation.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedPadding", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe de l'animation 【Duration】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_it_IT.json deleted file mode 100644 index ec6ac5f79..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "Animazione del margine", - "info": "Consente ai componenti figli di eseguire animazioni di Padding (margine interno), con la possibilità di specificare durata e curva, e con un evento di fine animazione.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedPadding", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【padding】 : Margine interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ja_JP.json deleted file mode 100644 index 319764422..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "パディングアニメーション", - "info": "子コンポーネントにPadding(パディング)アニメーションを行わせることができ、時間と曲線を指定でき、アニメーション終了イベントがあります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPaddingの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【curve】 : アニメーション曲線 【Duration】", - "【padding】 : パディング 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ko_KR.json deleted file mode 100644 index 6d5c3d4b6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "패딩 애니메이션", - "info": "자식 위젯에 패딩(내부 여백) 애니메이션을 적용할 수 있으며, 지속 시간과 곡선을 지정할 수 있고, 애니메이션 종료 이벤트가 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPadding 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_pt_PT.json deleted file mode 100644 index bf6ac0b7a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "Animação de Margem", - "info": "Permite que os componentes filhos realizem animações de Padding (margem interna), pode especificar a duração e a curva, e tem um evento de término da animação.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedPadding", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【curve】 : Curva da animação 【Duration】", - "【padding】 : Margem interna 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ru_RU.json deleted file mode 100644 index 7b2c17d70..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "Анимация отступов", - "info": "Позволяет дочерним компонентам анимировать отступы (Padding), можно указать длительность и кривую, есть событие завершения анимации.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedPadding", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Длительность анимации 【Duration】", - "【onEnd】 : Обратный вызов завершения анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_zh-CN.json deleted file mode 100644 index 0b7eafc48..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 119, - "name": "AnimatedPadding", - "localName": "边距动画", - "info": "能让子组件进行Padding(内边距)动画,可指定时长和曲线,有动画结束事件。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPadding基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/node1_base.dart deleted file mode 100644 index 000ae15e2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPadding/node1_base.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedPadding extends StatefulWidget { - const CustomAnimatedPadding({Key? key}) : super(key: key); - - @override - _CustomAnimatedPaddingState createState() => _CustomAnimatedPaddingState(); -} - -class _CustomAnimatedPaddingState extends State { - final EdgeInsets startPadding = const EdgeInsets.all(10); - final EdgeInsets endPadding = const EdgeInsets.all(30); - - late EdgeInsets _padding; - - @override - void initState() { - _padding = startPadding; - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Switch( - value: _padding == endPadding, - onChanged: (v) { - setState(() { - _padding = v ? endPadding : startPadding; - }); - }), - Container( - color: Colors.grey.withAlpha(22), - width: 200, - height: 100, - child: AnimatedPadding( - duration: const Duration(seconds: 1), - curve: Curves.fastOutSlowIn, - padding: _padding, - onEnd: () => print('End'), - child: Container( - alignment: Alignment.center, - color: Colors.blue, - child: const Text( - '张风捷特烈', - style: TextStyle(color: Colors.white), - ), - ), - ), - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_de_DE.json deleted file mode 100644 index 12cbe3188..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "Animiertes Physikalisches Modell", - "info": "Eine PhysicalModel-Komponente mit Animationseffekten bei Änderungen der relevanten Eigenschaften, im Wesentlichen eine Kombination aus PhysicalModel und Animation. Es können Eigenschaften wie Schatten, Schattentiefe, abgerundete Ecken, Animationsdauer, Endrückruf usw. angegeben werden.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedPhysicalModel", - "desc": [ - "【color】 : Hintergrundfarbe 【Color】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf nach Abschluss der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【shape】 : Form 【BoxShape】", - "【elevation】 : Schattentiefe 【double】", - "【borderRadius】 : Abgerundete Ecken 【BorderRadius】", - "【shadowColor】 : Schattenfarbe 【Color】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_en_US.json deleted file mode 100644 index 70d62f756..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "Animated Physical Model", - "info": "A PhysicalModel component with animation effects when related properties change, essentially a combination of PhysicalModel and animation. Properties such as shadow, elevation, borderRadius, animation duration, and end callback can be specified.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedPhysicalModel", - "desc": [ - "【color】: Background color 【Color】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【shape】: Shape 【BoxShape】", - "【elevation】: Elevation 【double】", - "【borderRadius】: Border radius 【BorderRadius】", - "【shadowColor】: Shadow color 【Color】", - "【child】: Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_es_ES.json deleted file mode 100644 index d7df7f575..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "Modelo Físico Animado", - "info": "Un componente PhysicalModel con efectos de animación cuando cambian las propiedades relacionadas, esencialmente es una combinación de PhysicalModel y animación. Se pueden especificar propiedades como sombra, profundidad de sombra, esquinas redondeadas, duración de la animación, devolución de llamada al finalizar, etc.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedPhysicalModel", - "desc": [ - "【color】 : Color de fondo 【Color】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Devolución de llamada al finalizar la animación 【Function()】", - "【curve】 : Curva de animación 【Duration】", - "【shape】 : Forma 【BoxShape】", - "【elevation】 : Profundidad de sombra 【double】", - "【borderRadius】 : Esquinas redondeadas 【BorderRadius】", - "【shadowColor】 : Color de la sombra 【Color】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_fr_FR.json deleted file mode 100644 index 53c14c051..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "Animation de module physique", - "info": "Un composant PhysicalModel avec des effets d'animation lorsque les propriétés associées changent, essentiellement une combinaison de PhysicalModel et d'animation. Vous pouvez spécifier des propriétés telles que l'ombre, la profondeur de l'ombre, le rayon de bordure, la durée de l'animation, le rappel de fin, etc.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedPhysicalModel", - "desc": [ - "【color】 : Couleur de fond 【Color】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe d'animation 【Duration】", - "【shape】 : Forme 【BoxShape】", - "【elevation】 : Profondeur de l'ombre 【double】", - "【borderRadius】 : Rayon de bordure 【BorderRadius】", - "【shadowColor】 : Couleur de l'ombre 【Color】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_it_IT.json deleted file mode 100644 index 8ffe12ecc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "Modello Fisico Animato", - "info": "Componente PhysicalModel con effetti di animazione quando cambiano le proprietà relative, essenzialmente una combinazione di PhysicalModel e animazione. È possibile specificare proprietà come ombre, profondità dell'ombra, angoli arrotondati, durata dell'animazione, callback di fine, ecc.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedPhysicalModel", - "desc": [ - "【color】 : Colore di sfondo 【Color】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【shape】 : Forma 【BoxShape】", - "【elevation】 : Profondità dell'ombra 【double】", - "【borderRadius】 : Angoli arrotondati 【BorderRadius】", - "【shadowColor】 : Colore dell'ombra 【Color】", - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ja_JP.json deleted file mode 100644 index ef1334122..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "物理モジュールアニメーション", - "info": "関連する属性が変化する際にアニメーション効果を持つPhysicalModelコンポーネントで、本質的にはPhysicalModelとアニメーションの組み合わせです。影、影の深さ、角の丸み、アニメーションの長さ、終了コールバックなどの属性を指定できます。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPhysicalModelの基本使用", - "desc": [ - "【color】 : 背景色 【Color】", - "【duration】 : アニメーションの長さ 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【curve】 : アニメーションカーブ 【Duration】", - "【shape】 : 形状 【BoxShape】", - "【elevation】 : 影の深さ 【double】", - "【borderRadius】 : 角の丸み 【BorderRadius】", - "【shadowColor】 : 影の色 【Color】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ko_KR.json deleted file mode 100644 index a5814d3b7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "물리 모듈 애니메이션", - "info": "관련 속성이 변경될 때 애니메이션 효과가 있는 PhysicalModel 컴포넌트로, 본질적으로 PhysicalModel과 애니메이션의 결합체입니다. 그림자, 그림자 깊이, 둥근 모서리, 애니메이션 지속 시간, 종료 콜백 등의 속성을 지정할 수 있습니다.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPhysicalModel 기본 사용", - "desc": [ - "【color】 : 배경색 【Color】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【shape】 : 모양 【BoxShape】", - "【elevation】 : 그림자 깊이 【double】", - "【borderRadius】 : 둥근 모서리 【BorderRadius】", - "【shadowColor】 : 그림자 색상 【Color】", - "【child】 : 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_pt_PT.json deleted file mode 100644 index 1157fca62..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "Modelo Físico Animado", - "info": "Componente PhysicalModel com efeitos de animação quando as propriedades relacionadas mudam, essencialmente uma combinação de PhysicalModel e animação. Pode especificar propriedades como sombra, profundidade de sombra, cantos arredondados, duração da animação, callback de término, etc.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedPhysicalModel", - "desc": [ - "【color】 : Cor de fundo 【Color】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【curve】 : Curva de animação 【Duration】", - "【shape】 : Forma 【BoxShape】", - "【elevation】 : Profundidade de sombra 【double】", - "【borderRadius】 : Cantos arredondados 【BorderRadius】", - "【shadowColor】 : Cor da sombra 【Color】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ru_RU.json deleted file mode 100644 index 4f04e95f3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "Анимация физического модуля", - "info": "Компонент PhysicalModel с анимацией при изменении связанных свойств, по сути, представляет собой комбинацию PhysicalModel и анимации. Можно указать такие свойства, как тень, глубина тени, скругление углов, длительность анимации, обратный вызов по завершении и другие.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedPhysicalModel", - "desc": [ - "【color】 : Цвет фона 【Color】", - "【duration】 : Длительность анимации 【Duration】", - "【onEnd】 : Обратный вызов по завершении анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【shape】 : Форма 【BoxShape】", - "【elevation】 : Глубина тени 【double】", - "【borderRadius】 : Скругление углов 【BorderRadius】", - "【shadowColor】 : Цвет тени 【Color】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_zh-CN.json deleted file mode 100644 index 12cf35945..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 225, - "name": "AnimatedPhysicalModel", - "localName": "物理模块动画", - "info": "相关属性变化时具有动画效果的PhysicalModel组件,本质是PhysicalModel和动画结合的产物。可指定阴影、影深、圆角、动画时长、结束回调等属性。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPhysicalModel基本使用", - "desc": [ - "【color】 : 背景色 【Color】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【shape】 : 形状 【BoxShape】", - "【elevation】 : 影深 【double】", - "【borderRadius】 : 圆角 【BorderRadius】", - "【shadowColor】 : 阴影色 【Color】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/node1_base.dart deleted file mode 100644 index c96a4f6ef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPhysicalModel/node1_base.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class AnimatedPhysicalModelDemo extends StatefulWidget { - const AnimatedPhysicalModelDemo({Key? key}) : super(key: key); - - @override - _AnimatedPhysicalModelDemoState createState() => - _AnimatedPhysicalModelDemoState(); -} - -class _AnimatedPhysicalModelDemoState extends State { - bool flag = false; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSwitch(), - SizedBox( - width: 150, - height: 150, - child: AnimatedPhysicalModel( - duration: const Duration(seconds: 2), - curve: Curves.fastOutSlowIn, - shadowColor: flag?Colors.orange:Colors.purple, - elevation: flag?10:5, - child: Image.asset( - 'assets/images/caver.webp', - fit: BoxFit.cover, - ), - borderRadius: BorderRadius.all(Radius.circular(flag? 10:75)), - clipBehavior: Clip.hardEdge, - shape: BoxShape.rectangle, - color: Colors.deepPurpleAccent, - onEnd: () => print('----onEnd---'), - ), - ), - ], - ); - } - - Widget _buildSwitch() => Switch( - value: flag, - onChanged: (v) { - setState(() { - flag = v; - }); - }); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_de_DE.json deleted file mode 100644 index c1da6abed..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "Positionierte Animation", - "info": "Ermöglicht die Positionierungsanimation von Unterkomponenten, kann Dauer und Kurve angeben und hat ein Ereignis zum Ende der Animation. Kann nur in einem Stack verwendet werden.", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedPositioned", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf am Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【top】 : Abstand zum oberen Rand des Elternteils 【double】", - "【right】 : Abstand zum rechten Rand des Elternteils 【double】", - "【left】 : Abstand zum linken Rand des Elternteils 【double】", - "【bottom】 : Abstand zum unteren Rand des Elternteils 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_en_US.json deleted file mode 100644 index a27ec8804..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "Positioning Animation", - "info": "Allows child components to perform Positioned (positioning) animations, with specified duration and curves, and has an animation end event. Can only be used within a Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedPositioned", - "desc": [ - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【top】: Distance to parent top 【double】", - "【right】: Distance to parent right 【double】", - "【left】: Distance to parent left 【double】", - "【bottom】: Distance to parent bottom 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_es_ES.json deleted file mode 100644 index 5128fa97a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "Animación de Posicionamiento", - "info": "Permite que los componentes hijos realicen animaciones de Positioned (posicionamiento), se pueden especificar la duración y la curva, y hay un evento de finalización de la animación. Solo se puede usar dentro de Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedPositioned", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Callback de finalización de la animación 【Function()】", - "【curve】 : Curva de la animación 【Duration】", - "【top】 : Distancia a la parte superior del padre 【double】", - "【right】 : Distancia a la derecha del padre 【double】", - "【left】 : Distancia a la izquierda del padre 【double】", - "【bottom】 : Distancia a la parte inferior del padre 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_fr_FR.json deleted file mode 100644 index fb1343801..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "Animation de positionnement", - "info": "Permet à un composant enfant d'effectuer une animation Positioned (positionnement), avec une durée et une courbe spécifiables, et un événement de fin d'animation. Ne peut être utilisé que dans un Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedPositioned", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe de l'animation 【Duration】", - "【top】 : Distance par rapport au haut du parent 【double】", - "【right】 : Distance par rapport à la droite du parent 【double】", - "【left】 : Distance par rapport à la gauche du parent 【double】", - "【bottom】 : Distance par rapport au bas du parent 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_it_IT.json deleted file mode 100644 index 2e5cb4dd3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "Animazione di Posizionamento", - "info": "Consente ai componenti figli di eseguire animazioni di posizionamento (Positioned), con durata e curva specificabili, e un evento di fine animazione. Può essere utilizzato solo all'interno di uno Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedPositioned", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【top】 : Distanza dal bordo superiore del genitore 【double】", - "【right】 : Distanza dal bordo destro del genitore 【double】", - "【left】 : Distanza dal bordo sinistro del genitore 【double】", - "【bottom】 : Distanza dal bordo inferiore del genitore 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ja_JP.json deleted file mode 100644 index 2ed82519e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "位置アニメーション", - "info": "子コンポーネントをPositioned(位置)アニメーションさせることができ、時間と曲線を指定でき、アニメーション終了イベントがあります。Stack内でのみ使用できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPositionedの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【curve】 : アニメーション曲線 【Duration】", - "【top】 : 親の上端までの距離 【double】", - "【right】 : 親の右端までの距離 【double】", - "【left】 : 親の左端までの距離 【double】", - "【bottom】 : 親の下端までの距離 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ko_KR.json deleted file mode 100644 index 0bbbb46b4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "위치 애니메이션", - "info": "자식 컴포넌트를 Positioned(위치) 애니메이션으로 이동시킬 수 있으며, 지속 시간과 곡선을 지정할 수 있고 애니메이션 종료 이벤트가 있습니다. Stack 내에서만 사용할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPositioned 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【top】 : 부모 상단까지의 거리 【double】", - "【right】 : 부모 오른쪽까지의 거리 【double】", - "【left】 : 부모 왼쪽까지의 거리 【double】", - "【bottom】 : 부모 하단까지의 거리 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_pt_PT.json deleted file mode 100644 index 117e6a50b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "Animação de Posicionamento", - "info": "Permite que os componentes filhos realizem animações de Positioned (posicionamento), podendo especificar a duração e a curva, com evento de término da animação. Só pode ser usado dentro de uma Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedPositioned", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【curve】 : Curva da animação 【Duration】", - "【top】 : Distância até o topo do pai 【double】", - "【right】 : Distância até a direita do pai 【double】", - "【left】 : Distância até a esquerda do pai 【double】", - "【bottom】 : Distância até a base do pai 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ru_RU.json deleted file mode 100644 index 577fb6360..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "Анимация позиционирования", - "info": "Позволяет дочерним компонентам выполнять анимацию Positioned (позиционирования), можно указать продолжительность и кривую, есть событие завершения анимации. Может использоваться только в Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedPositioned", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Продолжительность анимации 【Duration】", - "【onEnd】 : Обратный вызов завершения анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【top】 : Расстояние до верхнего края родителя 【double】", - "【right】 : Расстояние до правого края родителя 【double】", - "【left】 : Расстояние до левого края родителя 【double】", - "【bottom】 : Расстояние до нижнего края родителя 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_zh-CN.json deleted file mode 100644 index 4fe0c26f9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 121, - "name": "AnimatedPositioned", - "localName": "定位动画", - "info": "能让子组件进行Positioned(定位)动画,可指定时长和曲线,有动画结束事件。只能用于Stack之中。", - "lever": 3, - "family": 1, - "linkIds": [ - 108, - 93, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPositioned基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【top】 : 到父顶距离 【double】", - "【right】 : 到父右距离 【double】", - "【left】 : 到父左距离 【double】", - "【bottom】 : 到父底距离 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/node1_base.dart deleted file mode 100644 index 65885b9e1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositioned/node1_base.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedPositioned extends StatefulWidget { - const CustomAnimatedPositioned({Key? key}) : super(key: key); - - @override - _CustomAnimatedPositionedState createState() => - _CustomAnimatedPositionedState(); -} - -class _CustomAnimatedPositionedState extends State { - final double startTop = 0.0; - final double endTop = 30.0; - - double _top = 0.0; - - @override - void initState() { - _top = startTop; - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSwitch(), - Container( - color: Colors.grey.withAlpha(33), - width: 200, - height: 100, - child: Stack( - children: _buildChildren(), - ), - ), - ], - ); - } - - List _buildChildren() => [ - AnimatedPositioned( - duration: const Duration(seconds: 1), - top: _top, - left: _top * 4, - child: const Icon( - Icons.android, - color: Colors.green, - size: 50, - ), - ), - AnimatedPositioned( - duration: const Duration(seconds: 1), - top: 50 - _top, - left: 150 - _top * 4, - child: const Icon( - Icons.android, - color: Colors.red, - size: 50, - ), - ) - ]; - - Widget _buildSwitch() => Switch( - value: _top == endTop, - onChanged: (v) { - setState(() { - _top = v ? endTop : startTop; - }); - }); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_de_DE.json deleted file mode 100644 index 2ef2b7153..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_de_DE.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "Richtungsbasierte Positionierungsanimation", - "info": "Ermöglicht es Kindkomponenten, eine PositionedDirectional (richtungsbasierte Positionierung) Animation durchzuführen, wobei Dauer und Kurve angegeben werden können und ein Ereignis am Ende der Animation vorhanden ist. Kann nur innerhalb eines Stacks verwendet werden.", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedPositionedDirectional", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf am Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【top】 : Abstand zum oberen Rand des Elternteils 【double】", - "【end】 : Abstand zum rechten Rand des Elternteils 【double】", - "【start】 : Abstand zum linken Rand des Elternteils 【double】", - "【bottom】 : Abstand zum unteren Rand des Elternteils 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_en_US.json deleted file mode 100644 index b4f69a916..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_en_US.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "Directional Positioning Animation", - "info": "Allows child components to perform PositionedDirectional (directional positioning) animations, with specified duration and curve, and has an animation end event. Can only be used within Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedPositionedDirectional", - "desc": [ - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【top】: Distance to parent top 【double】", - "【end】: Distance to parent right 【double】", - "【start】: Distance to parent left 【double】", - "【bottom】: Distance to parent bottom 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_es_ES.json deleted file mode 100644 index dfd55b246..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_es_ES.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "Animación de Posicionamiento Direccional", - "info": "Permite que los componentes hijos realicen animaciones de PositionedDirectional (posicionamiento direccional), se pueden especificar la duración y la curva, y tiene un evento de finalización de la animación. Solo se puede usar dentro de un Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedPositionedDirectional", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Callback de finalización de la animación 【Function()】", - "【curve】 : Curva de la animación 【Duration】", - "【top】 : Distancia desde la parte superior del padre 【double】", - "【end】 : Distancia desde la derecha del padre 【double】", - "【start】 : Distancia desde la izquierda del padre 【double】", - "【bottom】 : Distancia desde la parte inferior del padre 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_fr_FR.json deleted file mode 100644 index 0bab7f7d0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_fr_FR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "Animation de positionnement directionnel", - "info": "Permet à un composant enfant d'effectuer une animation de PositionedDirectional (positionnement directionnel), avec une durée et une courbe spécifiables, et un événement de fin d'animation. Ne peut être utilisé que dans un Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedPositionedDirectional", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe de l'animation 【Duration】", - "【top】 : Distance du haut du parent 【double】", - "【end】 : Distance de la droite du parent 【double】", - "【start】 : Distance de la gauche du parent 【double】", - "【bottom】 : Distance du bas du parent 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_it_IT.json deleted file mode 100644 index c435d24ca..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_it_IT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "Animazione di posizionamento direzionale", - "info": "Consente ai componenti figli di eseguire un'animazione PositionedDirectional (posizionamento direzionale), con durata e curva specificabili, e un evento di fine animazione. Può essere utilizzato solo all'interno di uno Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedPositionedDirectional", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【top】 : Distanza dal bordo superiore del genitore 【double】", - "【end】 : Distanza dal bordo destro del genitore 【double】", - "【start】 : Distanza dal bordo sinistro del genitore 【double】", - "【bottom】 : Distanza dal bordo inferiore del genitore 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ja_JP.json deleted file mode 100644 index f4ccfa9b7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ja_JP.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "方向定位アニメーション", - "info": "子コンポーネントをPositionedDirectional(方向定位)アニメーションさせることができ、時間と曲線を指定でき、アニメーション終了イベントがあります。Stack内でのみ使用できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPositionedDirectional基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【curve】 : アニメーション曲線 【Duration】", - "【top】 : 親の上端までの距離 【double】", - "【end】 : 親の右端までの距離 【double】", - "【start】 : 親の左端までの距離 【double】", - "【bottom】 : 親の下端までの距離 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ko_KR.json deleted file mode 100644 index 7fb293765..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ko_KR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "방향 위치 애니메이션", - "info": "자식 구성 요소를 PositionedDirectional(방향 위치) 애니메이션으로 만들 수 있으며, 지속 시간과 곡선을 지정할 수 있고, 애니메이션 종료 이벤트가 있습니다. Stack 내에서만 사용할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPositionedDirectional 기본 사용", - "desc": [ - "【child】 : 자식 구성 요소 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【top】 : 부모 상단까지의 거리 【double】", - "【end】 : 부모 오른쪽까지의 거리 【double】", - "【start】 : 부모 왼쪽까지의 거리 【double】", - "【bottom】 : 부모 하단까지의 거리 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_pt_PT.json deleted file mode 100644 index 2bc583d15..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_pt_PT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "Animação de Posicionamento Direcional", - "info": "Permite que os componentes filhos realizem animações de PositionedDirectional (Posicionamento Direcional), podendo especificar a duração e a curva, com eventos de término da animação. Só pode ser usado dentro de uma Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do AnimatedPositionedDirectional", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【curve】 : Curva da animação 【Duration】", - "【top】 : Distância até o topo do pai 【double】", - "【end】 : Distância até a direita do pai 【double】", - "【start】 : Distância até a esquerda do pai 【double】", - "【bottom】 : Distância até a base do pai 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ru_RU.json deleted file mode 100644 index e68ad6229..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_ru_RU.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "Анимация направленного позиционирования", - "info": "Позволяет дочерним компонентам выполнять анимацию PositionedDirectional (направленное позиционирование), можно указать продолжительность и кривую, есть событие окончания анимации. Может использоваться только внутри Stack.", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedPositionedDirectional", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Продолжительность анимации 【Duration】", - "【onEnd】 : Обратный вызов окончания анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【top】 : Расстояние до верха родителя 【double】", - "【end】 : Расстояние до правой стороны родителя 【double】", - "【start】 : Расстояние до левой стороны родителя 【double】", - "【bottom】 : Расстояние до низа родителя 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_zh-CN.json deleted file mode 100644 index 585f8084f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/desc_zh-CN.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 122, - "name": "AnimatedPositionedDirectional", - "localName": "方向定位动画", - "info": "能让子组件进行PositionedDirectional(方向定位)动画,可指定时长和曲线,有动画结束事件。只能用于Stack之中。", - "lever": 3, - "family": 1, - "linkIds": [ - 121, - 159 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedPositionedDirectional基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【top】 : 到父顶距离 【double】", - "【end】 : 到父右距离 【double】", - "【start】 : 到父左距离 【double】", - "【bottom】 : 到父底距离 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/node1_base.dart deleted file mode 100644 index 558c62ceb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedPositionedDirectional/node1_base.dart +++ /dev/null @@ -1,74 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedPositionedDirectional extends StatefulWidget { - const CustomAnimatedPositionedDirectional({Key? key}) : super(key: key); - - @override - _CustomAnimatedPositionedDirectionalState createState() => - _CustomAnimatedPositionedDirectionalState(); -} - -class _CustomAnimatedPositionedDirectionalState - extends State { - final double startTop = 0.0; - final double endTop = 30.0; - - double _top = 0.0; - - @override - void initState() { - _top = startTop; - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSwitch(), - Container( - color: Colors.grey.withAlpha(33), - width: 200, - height: 100, - child: Stack( - children: _buildChildren(), - ), - ), - ], - ); - } - - List _buildChildren() => [ - AnimatedPositionedDirectional( - duration: const Duration(seconds: 1), - top: _top, - start: _top * 4, - child: const Icon( - Icons.android, - color: Colors.green, - size: 50, - ), - ), - AnimatedPositionedDirectional( - duration: const Duration(seconds: 1), - top: 50 - _top, - start: 150 - _top * 4, - child: const Icon( - Icons.android, - color: Colors.red, - size: 50, - ), - ) - ]; - - Widget _buildSwitch() => Switch( - value: _top == endTop, - onChanged: (v) { - setState(() { - _top = v ? endTop : startTop; - }); - }); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_de_DE.json deleted file mode 100644 index 31511c6ba..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_de_DE.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "Rotationsanimation", - "info": "Wenn sich die gegebene Rotationsmenge ändert, kann die Unterkomponente automatisch den relativen Rotationswert anpassen, und es gibt eine animierte Änderung zwischen den vorherigen und nachfolgenden Werten.", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Rotationsanimationseffekt", - "desc": [ - "In diesem Beispiel wird der Parameter turns durch Ziehen angepasst, um den animierten Bewegungseffekt zu sehen. Der Rotationswinkel beträgt: turns*2*pi", - "【child】 : Kinderkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf bei Animationsende 【Function()】", - "【alignment】 : Zentrum der Animationstransformation 【Alignment】", - "【curve】 : Animationskurve 【Duration】", - "【filterQuality】 : Filterqualität 【FilterQuality】", - "【turns】 : Rotationsmenge 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_en_US.json deleted file mode 100644 index f11797f26..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_en_US.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "Rotation Animation", - "info": "When the given rotation amount changes, the child component can automatically adjust relative to the rotation value, and there is an animated transition between the previous and new values.", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Rotation Animation Effect", - "desc": [ - "In this case, drag to adjust the turns parameter to see the animation effect. The rotation angle is: turns*2*pi", - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【alignment】: Animation transformation center 【Alignment】", - "【curve】: Animation curve 【Duration】", - "【filterQuality】: Filter quality 【FilterQuality】", - "【turns】: Rotation amount 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_es_ES.json deleted file mode 100644 index 15e01c402..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_es_ES.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "Animación de rotación", - "info": "Cuando cambia la cantidad de rotación dada, el componente hijo puede ajustarse automáticamente en relación con el valor de rotación, y hay un cambio animado entre los valores anteriores y posteriores.", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Efecto de animación de rotación", - "desc": [ - "En este caso, arrastra para ajustar el parámetro turns y observa el efecto de movimiento de la animación. El ángulo de rotación es: turns*2*pi", - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Callback al finalizar la animación 【Function()】", - "【alignment】 : Centro de transformación de la animación 【Alignment】", - "【curve】 : Curva de la animación 【Duration】", - "【filterQuality】 : Calidad del filtro 【FilterQuality】", - "【turns】 : Cantidad de rotación 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_fr_FR.json deleted file mode 100644 index 970fae798..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_fr_FR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "Animation de rotation", - "info": "Lorsque la quantité de rotation donnée change, le composant enfant peut s'ajuster automatiquement par rapport à la valeur de rotation, avec une animation entre les valeurs précédentes et suivantes.", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Effet d'animation de rotation", - "desc": [ - "Dans cet exemple, faites glisser pour ajuster le paramètre turns et observez l'effet de l'animation. L'angle de rotation est : turns*2*pi", - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel à la fin de l'animation 【Function()】", - "【alignment】 : Centre de transformation de l'animation 【Alignment】", - "【curve】 : Courbe de l'animation 【Duration】", - "【filterQuality】 : Qualité du filtre 【FilterQuality】", - "【turns】 : Quantité de rotation 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_it_IT.json deleted file mode 100644 index 5fdc73855..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_it_IT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "Animazione di rotazione", - "info": "Quando la quantità di rotazione specificata cambia, il componente figlio può regolarsi automaticamente rispetto al valore di rotazione, con un'animazione che mostra la transizione tra i valori precedenti e successivi.", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Effetto di animazione di rotazione", - "desc": [ - "In questo esempio, trascina per regolare il parametro turns e osserva l'effetto dell'animazione. L'angolo di rotazione è: turns*2*pi", - "【child】 : componente figlio 【Widget】", - "【duration】 : durata dell'animazione 【Duration】", - "【onEnd】 : callback alla fine dell'animazione 【Function()】", - "【alignment】 : centro di trasformazione dell'animazione 【Alignment】", - "【curve】 : curva dell'animazione 【Duration】", - "【filterQuality】 : qualità del filtro 【FilterQuality】", - "【turns】 : quantità di rotazione 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ja_JP.json deleted file mode 100644 index 1e813b8eb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ja_JP.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "回転アニメーション", - "info": "指定された回転量が変化した場合、子コンポーネントは回転値に応じて自動的に調整され、前後の値にアニメーションの変化があります。", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "回転アニメーション効果", - "desc": [ - "このケースでは、turns パラメータをドラッグして調整し、アニメーションの動きを確認します。回転角度は: turns*2*pi", - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーションの時間 【Duration】", - "【onEnd】 : アニメーション終了時のコールバック 【Function()】", - "【alignment】 : アニメーションの変換中心 【Alignment】", - "【curve】 : アニメーション曲線 【Duration】", - "【filterQuality】 : フィルター品質 【FilterQuality】", - "【turns】 : 回転量 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ko_KR.json deleted file mode 100644 index 4f3ac69c2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ko_KR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "회전 애니메이션", - "info": "주어진 회전량이 변경될 때, 자식 구성 요소가 회전 값에 따라 자동으로 조정되며, 이전 값과 이후 값 사이에 애니메이션 변화가 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "회전 애니메이션 효과", - "desc": [ - "이 예제에서는 turns 매개변수를 드래그하여 조정하고 애니메이션 효과를 확인합니다. 회전 각도는: turns*2*pi", - "【child】 : 자식 구성 요소 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【alignment】 : 애니메이션 변환 중심 【Alignment】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【filterQuality】 : 필터 품질 【FilterQuality】", - "【turns】 : 회전량 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_pt_PT.json deleted file mode 100644 index 10bc8835f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_pt_PT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "Animação de Rotação", - "info": "Quando a quantidade de rotação dada muda, o componente filho pode ajustar automaticamente o valor relativo à rotação, e há uma animação entre os valores anteriores e posteriores.", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Efeito de Animação de Rotação", - "desc": [ - "Neste exemplo, arraste para ajustar o parâmetro turns e observe o efeito da animação. O ângulo de rotação é: turns*2*pi", - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de fim de animação 【Function()】", - "【alignment】 : Centro de transformação da animação 【Alignment】", - "【curve】 : Curva da animação 【Duration】", - "【filterQuality】 : Qualidade do filtro 【FilterQuality】", - "【turns】 : Quantidade de rotação 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ru_RU.json deleted file mode 100644 index 78487046a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_ru_RU.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "Анимация вращения", - "info": "Когда заданное количество вращения изменяется, дочерний компонент может автоматически настраиваться относительно значения вращения, и есть анимационные изменения между предыдущим и текущим значениями.", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Эффект анимации вращения", - "desc": [ - "В этом примере, перетащите для регулировки параметра turns, чтобы увидеть эффект анимации. Угол вращения: turns*2*pi", - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Длительность анимации 【Duration】", - "【onEnd】 : Обратный вызов по завершении анимации 【Function()】", - "【alignment】 : Центр преобразования анимации 【Alignment】", - "【curve】 : Кривая анимации 【Duration】", - "【filterQuality】 : Качество фильтра 【FilterQuality】", - "【turns】 : Количество вращения 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_zh-CN.json deleted file mode 100644 index b36954d50..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/desc_zh-CN.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 259, - "name": "AnimatedRotation", - "localName": "旋转动画", - "info": "给定的旋转量发生变化时,子组件可以自动调整相对于旋转值,且前后值有动画变化。", - "lever": 3, - "family": 1, - "linkIds": [ - 247, - 249 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "旋转动画效果", - "desc": [ - "该案例中,拖拽调节 turns 参数,查看动画运动效果。旋转角度为: turns*2*pi", - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【alignment】 : 动画变换中心 【Alignment】", - "【curve】 : 动画曲线 【Duration】", - "【filterQuality】 : 滤镜质量 【FilterQuality】", - "【turns】 : 旋转量 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/node1.dart deleted file mode 100644 index beff715fd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedRotation/node1.dart +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:math'; - -import 'package:flutter/material.dart'; - -class AnimatedRotationDemo extends StatefulWidget { - const AnimatedRotationDemo({super.key}); - - @override - State createState() => _AnimatedRotationDemoState(); -} - -class _AnimatedRotationDemoState extends State { - double _turns = 0; - - @override - Widget build(BuildContext context) { - final TextTheme textTheme = Theme.of(context).textTheme; - - return Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Row( - children: [ - Expanded( - child: GridPaper( - color: Colors.blue.withOpacity(0.1), - child: SizedBox( - height: 200, - child: Center( - child: AnimatedRotation( - turns: _turns, - duration: const Duration(milliseconds: 500), - curve: Curves.easeInOut, - child: Container( - color: Colors.red, - height: 40, - width: 40, - ), - ), - ), - ), - ), - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Text('scale:${_turns.toStringAsFixed(2)}', - style: textTheme.bodyMedium), - Expanded( - child: Slider( - min: 0, - max: 1, - value: _turns, - onChanged: (double value) { - setState(() { - _turns = value; - }); - }, - ), - ), - const SizedBox(width: 48.0), - ], - ), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_de_DE.json deleted file mode 100644 index 1d2dc66d6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "Skalierungsanimation", - "info": "Wenn sich die gegebene Skalierung ändert, kann die Unterkomponente automatisch relativ zum Skalierungswert angepasst werden, und die vorherigen und nachfolgenden Werte haben eine animierte Änderung.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Skalierungsanimationseffekt", - "desc": [ - "In diesem Beispiel ziehen Sie den scale-Parameter, um den Animationsbewegungseffekt zu sehen.", - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf beim Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【alignment】 : Animationszentrum 【Alignment】", - "【filterQuality】 : Filterqualität 【FilterQuality】", - "【scale】 : Skalierungsmenge 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_en_US.json deleted file mode 100644 index 7bacac754..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "Scaling Animation", - "info": "When the given scaling amount changes, the child component can automatically adjust relative to the scaling value, and there is an animation change between the previous and next values.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Scaling Animation Effect", - "desc": [ - "In this case, drag to adjust the scale parameter to view the animation effect.", - "【child】: Child component 【Widget】", - "【duration】: Animation duration 【Duration】", - "【onEnd】: Animation end callback 【Function()】", - "【curve】: Animation curve 【Duration】", - "【alignment】: Animation transformation center 【Alignment】", - "【filterQuality】: Filter quality 【FilterQuality】", - "【scale】: Scaling amount 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_es_ES.json deleted file mode 100644 index ccab272e3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "Animación de escala", - "info": "Cuando cambia la cantidad de escala dada, el componente hijo puede ajustarse automáticamente en relación con el valor de escala, y hay una animación entre los valores anteriores y posteriores.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Efecto de animación de escala", - "desc": [ - "En este caso, arrastre para ajustar el parámetro scale y observe el efecto de movimiento de la animación.", - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Devolución de llamada al finalizar la animación 【Function()】", - "【curve】 : Curva de animación 【Duration】", - "【alignment】 : Centro de transformación de la animación 【Alignment】", - "【filterQuality】 : Calidad del filtro 【FilterQuality】", - "【scale】 : Cantidad de escala 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_fr_FR.json deleted file mode 100644 index f5116c216..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "Animation de mise à l'échelle", - "info": "Lorsque la quantité de mise à l'échelle donnée change, le composant enfant peut s'ajuster automatiquement par rapport à la valeur de mise à l'échelle, et les valeurs avant et après ont une animation.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Effet d'animation de mise à l'échelle", - "desc": [ - "Dans ce cas, faites glisser pour ajuster le paramètre scale et observez l'effet de l'animation.", - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe d'animation 【Duration】", - "【alignment】 : Centre de transformation de l'animation 【Alignment】", - "【filterQuality】 : Qualité du filtre 【FilterQuality】", - "【scale】 : Quantité de mise à l'échelle 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_it_IT.json deleted file mode 100644 index 43bd19501..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "Animazione di Scala", - "info": "Quando la quantità di scala data cambia, il componente figlio può regolarsi automaticamente rispetto al valore di scala, con un'animazione tra i valori precedenti e successivi.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Effetto di Animazione di Scala", - "desc": [ - "In questo caso, trascina per regolare il parametro scale e osserva l'effetto di movimento dell'animazione.", - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback alla fine dell'animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【alignment】 : Centro di trasformazione dell'animazione 【Alignment】", - "【filterQuality】 : Qualità del filtro 【FilterQuality】", - "【scale】 : Quantità di scala 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ja_JP.json deleted file mode 100644 index 99a8ee38c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "スケーリングアニメーション", - "info": "指定されたスケーリング量が変化すると、子コンポーネントは自動的にスケーリング値に応じて調整され、前後の値にアニメーションの変化があります。", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "スケーリングアニメーション効果", - "desc": [ - "このケースでは、scaleパラメータをドラッグして調整し、アニメーションの動き効果を確認します。", - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーションの持続時間 【Duration】", - "【onEnd】 : アニメーション終了時のコールバック 【Function()】", - "【curve】 : アニメーション曲線 【Duration】", - "【alignment】 : アニメーションの変形中心 【Alignment】", - "【filterQuality】 : フィルター品質 【FilterQuality】", - "【scale】 : スケーリング量 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ko_KR.json deleted file mode 100644 index c18e6510e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "스케일 애니메이션", - "info": "주어진 스케일 양이 변경될 때, 자식 구성 요소가 스케일 값에 따라 자동으로 조정되며, 이전 값과 이후 값 간에 애니메이션 변화가 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "스케일 애니메이션 효과", - "desc": [ - "이 예제에서는 scale 매개변수를 드래그하여 조정하고 애니메이션 효과를 확인합니다.", - "【child】 : 자식 구성 요소 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【alignment】 : 애니메이션 변환 중심 【Alignment】", - "【filterQuality】 : 필터 품질 【FilterQuality】", - "【scale】 : 스케일 양 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_pt_PT.json deleted file mode 100644 index 3d30020af..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "Animação de Escala", - "info": "Quando a quantidade de escala fornecida muda, o componente filho pode ajustar automaticamente em relação ao valor de escala, e há uma animação entre os valores anteriores e posteriores.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Efeito de Animação de Escala", - "desc": [ - "Neste exemplo, arraste para ajustar o parâmetro de escala e observe o efeito da animação.", - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de fim de animação 【Function()】", - "【curve】 : Curva de animação 【Duration】", - "【alignment】 : Centro de transformação da animação 【Alignment】", - "【filterQuality】 : Qualidade do filtro 【FilterQuality】", - "【scale】 : Quantidade de escala 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ru_RU.json deleted file mode 100644 index fe5c15586..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "Анимация масштабирования", - "info": "Когда заданный масштаб изменяется, дочерний компонент может автоматически регулироваться относительно значения масштабирования, и значения до и после имеют анимационные изменения.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Эффект анимации масштабирования", - "desc": [ - "В этом примере перетащите для настройки параметра scale и посмотрите эффект анимации.", - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Продолжительность анимации 【Duration】", - "【onEnd】 : Обратный вызов по окончании анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【alignment】 : Центр преобразования анимации 【Alignment】", - "【filterQuality】 : Качество фильтра 【FilterQuality】", - "【scale】 : Масштаб 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_zh-CN.json deleted file mode 100644 index 845ded529..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 249, - "name": "AnimatedScale", - "localName": "缩放动画", - "info": "给定的缩放量发生变化时,子组件可以自动调整相对于缩放值,且前后值有动画变化。", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 247, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "缩放动画效果", - "desc": [ - "该案例中,拖拽调节 scale 参数,查看动画运动效果。", - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【alignment】 : 动画变换中心 【Alignment】", - "【filterQuality】 : 滤镜质量 【FilterQuality】", - "【scale】 : 缩放量 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/node1.dart deleted file mode 100644 index 5f02a5984..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedScale/node1.dart +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - - -class AnimatedScaleDemo extends StatefulWidget { - const AnimatedScaleDemo({super.key}); - - @override - State createState() => _AnimatedScaleDemoState(); -} - -class _AnimatedScaleDemoState extends State { - double _scale = 1; - - @override - Widget build(BuildContext context) { - final TextTheme textTheme = Theme.of(context).textTheme; - - return Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Row( - children: [ - Expanded( - child: GridPaper( - color: Colors.blue.withOpacity(0.1), - child: SizedBox( - height: 200, - child: Center( - child: AnimatedScale( - scale: _scale, - duration: const Duration(milliseconds: 500), - curve: Curves.easeInOut, - child: Container(color: Colors.red,height: 40,width: 40,), - ), - ), - ), - ), - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Text('scale:${_scale.toStringAsFixed(1)}', style: textTheme.bodyMedium), - Expanded( - child: Slider( - min: 0, - max: 5.0, - value: _scale, - onChanged: (double value) { - setState(() { - _scale = value; - }); - }, - ), - ), - const SizedBox(width: 48.0), - ], - ), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_de_DE.json deleted file mode 100644 index 5d979ecd3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "Gleitende Animation", - "info": "Wenn sich der gegebene Versatz ändert, kann die Unterkomponente den relativen Versatz automatisch anpassen, und die vorherigen und nachfolgenden Werte haben eine animierte Veränderung.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Gleitende Animationseffekt", - "desc": [ - "In diesem Fall ziehen Sie die x,y-Parameter, um den Animationseffekt zu sehen. Dabei ist der Versatz = x,y * Breite und Höhe des Rahmens", - "【child】 : Kindkomponente 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf beim Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【offset】 : Versatz 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_en_US.json deleted file mode 100644 index bac59c4d8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "Slide Animation", - "info": "When the given offset changes, the child component can automatically adjust the relative offset, and there is an animated change between the previous and current values.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Slide Animation Effect", - "desc": [ - "In this case, drag to adjust the x, y parameters to view the animation effect. The offset = x, y * the width and height of the box.", - "【child】: child component 【Widget】", - "【duration】: animation duration 【Duration】", - "【onEnd】: animation end callback 【Function()】", - "【curve】: animation curve 【Duration】", - "【offset】: offset 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_es_ES.json deleted file mode 100644 index 70971c09d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "Animación de deslizamiento", - "info": "Cuando el desplazamiento dado cambia, los componentes hijos pueden ajustar automáticamente el desplazamiento relativo, y los valores anteriores y posteriores tienen una animación de cambio.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Efecto de animación de deslizamiento", - "desc": [ - "En este caso, arrastre para ajustar los parámetros x, y y observe el efecto de movimiento de la animación. Donde el desplazamiento = x, y * ancho y alto del cuadro", - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Devolución de llamada al final de la animación 【Function()】", - "【curve】 : Curva de animación 【Duration】", - "【offset】 : Desplazamiento 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_fr_FR.json deleted file mode 100644 index 30064c4b6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "Animation de glissement", - "info": "Lorsque l'offset donné change, le composant enfant peut ajuster automatiquement l'offset relatif, et les valeurs avant et après ont une animation.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Effet d'animation de glissement", - "desc": [ - "Dans ce cas, faites glisser pour ajuster les paramètres x, y et observez l'effet de l'animation. Où l'offset = x, y * largeur et hauteur de la boîte", - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe d'animation 【Duration】", - "【offset】 : Offset 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_it_IT.json deleted file mode 100644 index 1b46a47bd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "Animazione di scorrimento", - "info": "Quando l'offset dato cambia, i componenti figli possono regolare automaticamente l'offset relativo e i valori precedenti e successivi hanno un'animazione.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Effetto animazione di scorrimento", - "desc": [ - "In questo caso, trascina per regolare i parametri x,y e osserva l'effetto di movimento dell'animazione. Dove offset = x,y * larghezza e altezza del riquadro", - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【offset】 : Offset 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ja_JP.json deleted file mode 100644 index c70d021ae..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "スライドアニメーション", - "info": "指定されたオフセットが変化するとき、子コンポーネントは自動的に相対的なオフセットを調整し、前後の値にアニメーションの変化があります。", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "スライドアニメーション効果", - "desc": [ - "このケースでは、x、yパラメータをドラッグして調整し、アニメーションの動き効果を確認します。オフセット = x、y * ボックスの幅と高さ", - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーションの時間 【Duration】", - "【onEnd】 : アニメーション終了時のコールバック 【Function()】", - "【curve】 : アニメーションカーブ 【Duration】", - "【offset】 : オフセット 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ko_KR.json deleted file mode 100644 index ae881562a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "슬라이드 애니메이션", - "info": "주어진 오프셋이 변경될 때, 자식 컴포넌트가 자동으로 상대 오프셋을 조정할 수 있으며, 이전과 이후 값에 애니메이션 변화가 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "슬라이드 애니메이션 효과", - "desc": [ - "이 예제에서 x, y 매개변수를 드래그하여 조정하고 애니메이션 효과를 확인하세요. 여기서 오프셋 = x, y * 상자 너비 및 높이", - "【child】 : 자식 컴포넌트 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【offset】 : 오프셋 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_pt_PT.json deleted file mode 100644 index 728d47cb1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "Animação de Deslize", - "info": "Quando o deslocamento fornecido muda, o componente filho pode ajustar automaticamente o deslocamento relativo, e os valores anteriores e posteriores têm uma mudança animada.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Efeito de Animação de Deslize", - "desc": [ - "Neste caso, arraste para ajustar os parâmetros x, y e observe o efeito do movimento da animação. Onde o deslocamento = x, y * largura e altura da caixa", - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de fim de animação 【Function()】", - "【curve】 : Curva de animação 【Duration】", - "【offset】 : Deslocamento 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ru_RU.json deleted file mode 100644 index 102c86d7c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "Анимация скольжения", - "info": "Когда заданное смещение изменяется, дочерний компонент может автоматически регулировать относительное смещение, и значения до и после имеют анимационные изменения.", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Эффект анимации скольжения", - "desc": [ - "В этом примере перетащите параметры x, y, чтобы увидеть эффект анимации. Смещение = x, y * ширина и высота рамки", - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Длительность анимации 【Duration】", - "【onEnd】 : Обратный вызов по завершении анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【offset】 : Смещение 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_zh-CN.json deleted file mode 100644 index 611a28798..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 247, - "name": "AnimatedSlide", - "localName": "滑动动画", - "info": "给定的偏移量发生变化时,子组件可以自动调整相对偏移量,且前后值有动画变化。", - "lever": 3, - "family": 1, - "linkIds": [ - 120, - 201 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "滑动动画效果", - "desc": [ - "该案例中,拖拽调节 x,y 参数,查看动画运动效果。其中偏移量 = x,y * 方框宽高", - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【offset】 : 偏移量 【Offset】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/node1.dart deleted file mode 100644 index 10da0649f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSlide/node1.dart +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - - -class AnimatedSlideDemo extends StatefulWidget { - const AnimatedSlideDemo({super.key}); - - @override - State createState() => _AnimatedSlideDemoState(); -} - -class _AnimatedSlideDemoState extends State { - Offset offset = Offset.zero; - - @override - Widget build(BuildContext context) { - final TextTheme textTheme = Theme.of(context).textTheme; - - return Padding( - padding: const EdgeInsets.all(16.0), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Row( - children: [ - Expanded( - child: GridPaper( - color: Colors.blue.withOpacity(0.1), - // alignment: Alignment.center, - child: SizedBox( - height: 200, - child: Center( - child: AnimatedSlide( - offset: offset, - duration: const Duration(milliseconds: 500), - curve: Curves.easeInOut, - child: Container(color: Colors.red,height: 40,width: 40,), - ), - ), - ), - ), - ), - SizedBox( - height: 200, - child: Column( - children: [ - Text('Y:${offset.dy.toStringAsFixed(1)}', style: textTheme.bodyMedium), - Expanded( - child: RotatedBox( - quarterTurns: 1, - child: Slider( - min: -2.0, - max: 2.0, - value: offset.dy, - onChanged: (double value) { - setState(() { - offset = Offset(offset.dx, value); - }); - }, - ), - ), - ), - ], - ), - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Text('X:${offset.dx.toStringAsFixed(1)}', style: textTheme.bodyMedium), - Expanded( - child: Slider( - min: -4.0, - max: 4.0, - value: offset.dx, - onChanged: (double value) { - setState(() { - offset = Offset(value, offset.dy); - }); - }, - ), - ), - const SizedBox(width: 48.0), - ], - ), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_de_DE.json deleted file mode 100644 index 11a1f9c05..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "Animierter Wechsel", - "info": "Führt eine Animation aus, wenn sich das Kind-Widget ändert. Der Schlüssel des Kind-Widgets muss angegeben werden. Die Animationsart kann angepasst werden, und Eigenschaften wie Animationsdauer und Animationskurve können festgelegt werden.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedSwitcher", - "desc": [ - "【child】 : Kind-Widget 【Widget】", - "【duration】 : Animationsdauer 【Duration】", - "【switchOutCurve】 : Ausblendkurve 【Curves】", - "【switchInCurve】 : Einblendkurve 【Curves】", - "【switchInCurve】 : Einblendkurve 【Curves】", - "【transitionBuilder】 : Animationsgenerator 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_en_US.json deleted file mode 100644 index 1efd5c64e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "Animated Switcher", - "info": "Executes animations when child components change. The key of the child components needs to be specified for identification. The animation method can be customized, and properties such as animation duration and animation curve can be specified.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedSwitcher", - "desc": [ - "【child】 : Child component 【Widget】", - "【duration】 : Animation duration 【Duration】", - "【switchOutCurve】 : Switch out curve 【Curves】", - "【switchInCurve】 : Switch in curve 【Curves】", - "【switchInCurve】 : Switch in curve 【Curves】", - "【transitionBuilder】 : Animation builder 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_es_ES.json deleted file mode 100644 index e6686707b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "Cambio animado", - "info": "Ejecuta una animación cuando cambia el componente hijo, es necesario especificar la clave del componente hijo para identificarlo. La forma de la animación se puede personalizar, se pueden especificar propiedades como la duración de la animación, la curva de la animación, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedSwitcher", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【duration】 : Duración de la animación 【Duration】", - "【switchOutCurve】 : Curva de salida 【Curves】", - "【switchInCurve】 : Curva de entrada 【Curves】", - "【switchInCurve】 : Curva de entrada 【Curves】", - "【transitionBuilder】 : Constructor de animación 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_fr_FR.json deleted file mode 100644 index b7002d431..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "Changement animé", - "info": "Exécute une animation lorsque les composants enfants changent, nécessite de spécifier une clé pour identifier les composants enfants. Le style d'animation peut être personnalisé, permettant de spécifier la durée de l'animation, la courbe d'animation, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de AnimatedSwitcher", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【duration】 : Durée de l'animation 【Duration】", - "【switchOutCurve】 : Courbe de sortie 【Curves】", - "【switchInCurve】 : Courbe d'entrée 【Curves】", - "【switchInCurve】 : Courbe d'entrée 【Curves】", - "【transitionBuilder】 : Constructeur d'animation 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_it_IT.json deleted file mode 100644 index f82759ee0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "Cambio Animato", - "info": "Esegue un'animazione quando il componente figlio cambia, è necessario specificare la chiave del componente figlio per l'identificazione. Il metodo di animazione può essere personalizzato, è possibile specificare la durata dell'animazione, la curva dell'animazione e altre proprietà.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedSwitcher", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【duration】 : Durata dell'animazione 【Duration】", - "【switchOutCurve】 : Curva di uscita 【Curves】", - "【switchInCurve】 : Curva di ingresso 【Curves】", - "【switchInCurve】 : Curva di ingresso 【Curves】", - "【transitionBuilder】 : Costruttore di animazione 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ja_JP.json deleted file mode 100644 index 343dac5b5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "アニメーション切り替え", - "info": "子コンポーネントが変更されたときにアニメーションを実行します。子コンポーネントのkeyを指定して識別する必要があります。アニメーションの方法はカスタマイズ可能で、アニメーションの時間やアニメーションカーブなどの属性を指定できます。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedSwitcherの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【duration】 : アニメーション時間 【Duration】", - "【switchOutCurve】 : 切り出しカーブ 【Curves】", - "【switchInCurve】 : 切り込みカーブ 【Curves】", - "【switchInCurve】 : 切り込みカーブ 【Curves】", - "【transitionBuilder】 : アニメーションビルダー 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ko_KR.json deleted file mode 100644 index 127b5bb02..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "애니메이션 전환", - "info": "자식 컴포넌트가 변경될 때 애니메이션을 실행하며, 자식 컴포넌트의 key를 지정하여 식별해야 합니다. 애니메이션 방식은 사용자 정의가 가능하며, 애니메이션 지속 시간, 애니메이션 곡선 등의 속성을 지정할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedSwitcher 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【switchOutCurve】 : 전환 아웃 곡선 【Curves】", - "【switchInCurve】 : 전환 인 곡선 【Curves】", - "【switchInCurve】 : 전환 인 곡선 【Curves】", - "【transitionBuilder】 : 애니메이션 빌더 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_pt_PT.json deleted file mode 100644 index bcb3ab6fa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "Alternância Animada", - "info": "Executa uma animação quando o componente filho muda, é necessário especificar a chave do componente filho para identificação. O modo de animação pode ser personalizado, podendo especificar a duração da animação, a curva da animação, entre outros atributos.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedSwitcher", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【duration】 : Duração da animação 【Duration】", - "【switchOutCurve】 : Curva de saída 【Curves】", - "【switchInCurve】 : Curva de entrada 【Curves】", - "【switchInCurve】 : Curva de entrada 【Curves】", - "【transitionBuilder】 : Construtor de animação 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ru_RU.json deleted file mode 100644 index 8b2cf9cc3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "Анимированный переключатель", - "info": "Выполняет анимацию при изменении дочернего компонента, необходимо указать ключ дочернего компонента для идентификации. Способ анимации может быть настроен, можно указать продолжительность анимации, кривую анимации и другие свойства.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedSwitcher", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【duration】 : Продолжительность анимации 【Duration】", - "【switchOutCurve】 : Кривая выхода 【Curves】", - "【switchInCurve】 : Кривая входа 【Curves】", - "【switchInCurve】 : Кривая входа 【Curves】", - "【transitionBuilder】 : Конструктор анимации 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_zh-CN.json deleted file mode 100644 index 6b783f19e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 116, - "name": "AnimatedSwitcher", - "localName": "动画切换", - "info": "当子组件变化时执行动画,需要指定子组件的key进行标识。动画方式可以自定义,能指定动画时长、动画曲线等属性。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedSwitcher基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【duration】 : 动画时长 【Duration】", - "【switchOutCurve】 : 切出曲线 【Curves】", - "【switchInCurve】 : 切入曲线 【Curves】", - "【switchInCurve】 : 切入曲线 【Curves】", - "【transitionBuilder】 : 动画构造器 【Widget Function(Widget, Animation)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/node1_base.dart deleted file mode 100644 index dd7f8164c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedSwitcher/node1_base.dart +++ /dev/null @@ -1,76 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - - -class CustomAnimatedSwitcher extends StatefulWidget { - const CustomAnimatedSwitcher({Key? key}) : super(key: key); - - @override - _CustomAnimatedSwitcherState createState() => _CustomAnimatedSwitcherState(); -} - -class _CustomAnimatedSwitcherState extends State { - int _count = 0; - - @override - Widget build(BuildContext context) { - return Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - _buildMinusBtn(), - SizedBox(width:80,child: _buildAnimatedSwitcher(context)), - _buildAddBtn() - ], - ); - } - - Widget _buildAnimatedSwitcher(BuildContext context) => - AnimatedSwitcher( - duration: const Duration(milliseconds: 400), - transitionBuilder: (Widget child, Animation animation) => - ScaleTransition( - child: RotationTransition(turns: animation, child: child), - scale: animation), - child: Text( - '$_count', - key: ValueKey(_count), - style: Theme.of(context).textTheme.headlineSmall, - ), - ); - - Widget _buildMinusBtn() { - return MaterialButton( - padding: const EdgeInsets.all(0), - textColor: const Color(0xffFfffff), - elevation: 3, - color: Colors.red, - highlightColor: const Color(0xffF88B0A), - splashColor: Colors.red, - child: const Icon( - Icons.remove, - color: Colors.white, - ), - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - onPressed: () => setState(() => _count -= 1)); - } - - Widget _buildAddBtn() => MaterialButton( - padding: const EdgeInsets.all(0), - textColor: const Color(0xffFfffff), - elevation: 3, - color: Colors.blue, - highlightColor: const Color(0xffF88B0A), - splashColor: Colors.red, - child: const Icon( - Icons.add, - color: Colors.white, - ), - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - onPressed: () => setState(() => _count += 1)); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_de_DE.json deleted file mode 100644 index 3800fd0a4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "Animiertes Thema", - "info": "Eine Komponente mit animierten Effekten bei Themenänderungen, im Wesentlichen eine Kombination aus der Theme-Komponente und Animationen. Kann ThemeData, Animationsdauer, Kurve, Endrückruf usw. angeben. Entspricht einer erweiterten Version der Theme-Komponente.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedTheme", - "desc": [ - "【data】 : Themen-Daten 【ThemeData】", - "【duration】 : Animationsdauer 【Duration】", - "【onEnd】 : Rückruf bei Ende der Animation 【Function()】", - "【curve】 : Animationskurve 【Duration】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_en_US.json deleted file mode 100644 index 922c7eec1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "Animated Theme", - "info": "A component with animation effects when the theme changes, essentially a combination of the Theme component and animation. You can specify ThemeData, animation duration, curve, end callback, etc. It is equivalent to an enhanced version of the Theme component.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedTheme", - "desc": [ - "【data】 : Theme data 【ThemeData】", - "【duration】 : Animation duration 【Duration】", - "【onEnd】 : Animation end callback 【Function()】", - "【curve】 : Animation curve 【Duration】", - "【child】 : Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_es_ES.json deleted file mode 100644 index 75c8c2b2b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "Tema Animado", - "info": "Componente con efectos de animación cuando cambia el tema, esencialmente es una combinación del componente Theme y animaciones. Se puede especificar ThemeData, duración de la animación, curva, devolución de llamada al finalizar, etc. Equivale a una versión mejorada del componente Theme.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedTheme", - "desc": [ - "【data】 : Datos del tema 【ThemeData】", - "【duration】 : Duración de la animación 【Duration】", - "【onEnd】 : Devolución de llamada al finalizar la animación 【Function()】", - "【curve】 : Curva de la animación 【Duration】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_fr_FR.json deleted file mode 100644 index f0926763a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "Thème animé", - "info": "Un composant avec des effets d'animation lors du changement de thème, essentiellement une combinaison du composant Theme et d'animations. Peut spécifier ThemeData, la durée de l'animation, la courbe, le rappel de fin, etc. Équivalent à une version améliorée du composant Theme.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedTheme", - "desc": [ - "【data】 : Données du thème 【ThemeData】", - "【duration】 : Durée de l'animation 【Duration】", - "【onEnd】 : Rappel de fin d'animation 【Function()】", - "【curve】 : Courbe de l'animation 【Duration】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_it_IT.json deleted file mode 100644 index ec4dc6e8d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "Tema Animato", - "info": "Componente con effetti animati quando il tema cambia, essenzialmente una combinazione del componente Theme e delle animazioni. È possibile specificare ThemeData, durata dell'animazione, curva, callback di fine, ecc. Equivale a una versione potenziata del componente Theme.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedTheme", - "desc": [ - "【data】 : Dati del tema 【ThemeData】", - "【duration】 : Durata dell'animazione 【Duration】", - "【onEnd】 : Callback di fine animazione 【Function()】", - "【curve】 : Curva dell'animazione 【Duration】", - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ja_JP.json deleted file mode 100644 index 35034028c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "アニメーションテーマ", - "info": "テーマ変更時にアニメーション効果を持つコンポーネントで、本質的にはThemeコンポーネントとアニメーションを組み合わせたものです。ThemeData、アニメーション時間、曲線、終了コールバックなどを指定できます。強化版のThemeコンポーネントと言えます。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedThemeの基本使用", - "desc": [ - "【data】 : テーマデータ 【ThemeData】", - "【duration】 : アニメーション時間 【Duration】", - "【onEnd】 : アニメーション終了コールバック 【Function()】", - "【curve】 : アニメーション曲線 【Duration】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ko_KR.json deleted file mode 100644 index 8081edd6d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "애니메이션 테마", - "info": "테마 변경 시 애니메이션 효과가 있는 컴포넌트로, 본질적으로 Theme 컴포넌트와 애니메이션의 결합물입니다. ThemeData, 애니메이션 지속 시간, 곡선, 종료 콜백 등을 지정할 수 있습니다. 강화된 버전의 Theme 컴포넌트에 해당합니다.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedTheme 기본 사용", - "desc": [ - "【data】 : 테마 데이터 【ThemeData】", - "【duration】 : 애니메이션 지속 시간 【Duration】", - "【onEnd】 : 애니메이션 종료 콜백 【Function()】", - "【curve】 : 애니메이션 곡선 【Duration】", - "【child】 : 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_pt_PT.json deleted file mode 100644 index 978ace025..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "Tema Animado", - "info": "Componente com efeitos de animação durante a mudança de tema, essencialmente uma combinação do componente Theme com animação. Pode especificar ThemeData, duração da animação, curva, callback de término, etc. Equivalente a uma versão aprimorada do componente Theme.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AnimatedTheme", - "desc": [ - "【data】 : Dados do tema 【ThemeData】", - "【duration】 : Duração da animação 【Duration】", - "【onEnd】 : Callback de término da animação 【Function()】", - "【curve】 : Curva da animação 【Duration】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ru_RU.json deleted file mode 100644 index fb343373f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "Анимированная тема", - "info": "Компонент с анимацией при изменении темы, по сути, является комбинацией компонента Theme и анимации. Можно указать ThemeData, продолжительность анимации, кривую, обратный вызов завершения и т.д. Это улучшенная версия компонента Theme.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedTheme", - "desc": [ - "【data】 : Данные темы 【ThemeData】", - "【duration】 : Продолжительность анимации 【Duration】", - "【onEnd】 : Обратный вызов завершения анимации 【Function()】", - "【curve】 : Кривая анимации 【Duration】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_zh-CN.json deleted file mode 100644 index 65224b215..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 224, - "name": "AnimatedTheme", - "localName": "动画主题", - "info": "主题变化时具有动画效果的组件,本质是Theme组件和动画结合的产物。可指定ThemeData、动画时长、曲线、结束回调等。相当于增强版的Theme组件。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedTheme基本使用", - "desc": [ - "【data】 : 主题数据 【ThemeData】", - "【duration】 : 动画时长 【Duration】", - "【onEnd】 : 动画结束回调 【Function()】", - "【curve】 : 动画曲线 【Duration】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/node1_base.dart deleted file mode 100644 index eda0d045d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AnimatedTheme/node1_base.dart +++ /dev/null @@ -1,91 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class AnimatedThemeDemo extends StatefulWidget { - const AnimatedThemeDemo({Key? key}) : super(key: key); - - @override - _AnimatedThemeDemoState createState() => _AnimatedThemeDemoState(); -} - -class _AnimatedThemeDemoState extends State { - ThemeData startThem = ThemeData( - primaryColor: Colors.blue, - textTheme: const TextTheme( - headlineMedium: TextStyle( - color: Colors.white, - fontSize: 24, - fontWeight: FontWeight.bold, - ), - )); - - ThemeData endThem = ThemeData( - primaryColor: Colors.red, - textTheme: const TextTheme( - headlineMedium: TextStyle( - color: Colors.black, - fontSize: 16, - fontWeight: FontWeight.normal, - ))); - - late ThemeData them; - - @override - void initState() { - super.initState(); - them = startThem; - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSwitch(), - AnimatedTheme( - data: them, - duration: const Duration(seconds: 2), - curve: Curves.fastOutSlowIn, - onEnd: () { - print('----onEnd---'); - }, - child: const ChildContent(), - ), - ], - ); - } - - Widget _buildSwitch() { - print(them == endThem); - return Switch( - value: them == endThem, - onChanged: (v) { - setState(() { - them = v ? endThem : startThem; - }); - }); - } -} - -class ChildContent extends StatelessWidget { - const ChildContent({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - width: 250, - height: 60, - alignment: Alignment.center, - decoration: BoxDecoration( - borderRadius: const BorderRadius.all(Radius.circular(5)), - color: Theme.of(context).primaryColor, - ), - padding: const EdgeInsets.all(10), - child: Text( - 'Flutter Unit', - style: Theme.of(context).textTheme.headlineMedium, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_de_DE.json deleted file mode 100644 index cf8888ccc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "Anwendungsleiste", - "info": "Eine allgemeine Struktur für die obere Leiste einer Anwendung, in der entsprechende Komponenten an bestimmten Stellen platziert werden können. Wird häufig in Scaffold-Komponenten verwendet.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AppBar", - "desc": [ - "【leading】 : Linke Komponente 【Widget】", - "【title】 : Mittlere Komponente 【Widget】", - "【actions】 : Rechte Komponente 【List】", - "【elevation】 : Schattentiefe 【double】", - "【shape】 : Form 【ShapeBorder】", - "【backgroundColor】 : Hintergrundfarbe 【Hintergrundfarbe】", - "【centerTitle】 : Zentrierung in der Mitte 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "Verwendung von AppBar mit TabBar und TabBarView", - "desc": [ - "【bottom】 : Untere Komponente 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_en_US.json deleted file mode 100644 index 0a73cc160..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "App Header", - "info": "A common structure for the top bar of an application, where corresponding components can be placed in specified areas, often used in the Scaffold component.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AppBar", - "desc": [ - "【leading】 : Left component 【Widget】", - "【title】 : Middle component 【Widget】", - "【actions】 : Right component 【List】", - "【elevation】 : Shadow depth 【double】", - "【shape】 : Shape 【ShapeBorder】", - "【backgroundColor】 : Background color 【Color】", - "【centerTitle】 : Whether the title is centered 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "Using AppBar with TabBar and TabBarView", - "desc": [ - "【bottom】 : Bottom component 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_es_ES.json deleted file mode 100644 index b055e3b14..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "Barra de aplicación", - "info": "Una estructura común para la barra superior de una aplicación, que permite colocar componentes correspondientes en áreas específicas, comúnmente utilizada en el componente Scaffold.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AppBar", - "desc": [ - "【leading】 : Componente izquierdo 【Widget】", - "【title】 : Componente central 【Widget】", - "【actions】 : Componente derecho 【List】", - "【elevation】 : Profundidad de sombra 【double】", - "【shape】 : Forma 【ShapeBorder】", - "【backgroundColor】 : Profundidad de sombra 【Color de fondo】", - "【centerTitle】 : Centrar el título 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "Uso combinado de AppBar con TabBar y TabBarView", - "desc": [ - "【bottom】 : Componente inferior 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_fr_FR.json deleted file mode 100644 index 99b7c29c9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "Barre d'application", - "info": "Une structure commune pour une barre en haut de l'application, où des composants peuvent être placés dans des zones spécifiées, souvent utilisée dans le composant Scaffold.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de l'AppBar", - "desc": [ - "【leading】 : Composant gauche 【Widget】", - "【title】 : Composant central 【Widget】", - "【actions】 : Composant droit 【List】", - "【elevation】 : Profondeur de l'ombre 【double】", - "【shape】 : Forme 【ShapeBorder】", - "【backgroundColor】 : Profondeur de l'ombre 【Couleur de fond】", - "【centerTitle】 : Centrage du titre 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "Utilisation combinée de l'AppBar avec TabBar et TabBarView", - "desc": [ - "【bottom】 : Composant inférieur 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_it_IT.json deleted file mode 100644 index 67ffa34d5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "Barra dell'applicazione", - "info": "Una struttura comune per la barra superiore di un'applicazione, che consente di posizionare componenti specifici in aree designate, spesso utilizzata nel componente Scaffold.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AppBar", - "desc": [ - "【leading】 : Componente sinistro 【Widget】", - "【title】 : Componente centrale 【Widget】", - "【actions】 : Componente destro 【List】", - "【elevation】 : Profondità dell'ombra 【double】", - "【shape】 : Forma 【ShapeBorder】", - "【backgroundColor】 : Colore di sfondo 【Colore】", - "【centerTitle】 : Centratura del titolo 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "Uso combinato di AppBar con TabBar e TabBarView", - "desc": [ - "【bottom】 : Componente inferiore 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ja_JP.json deleted file mode 100644 index 55bc8d2a7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "アプリケーションバー", - "info": "アプリの上部バーの一般的な構造で、指定された部分に適切なコンポーネントを配置できます。Scaffoldコンポーネントでよく使用されます。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AppBarの基本使用", - "desc": [ - "【leading】 : 左側コンポーネント 【Widget】", - "【title】 : 中央コンポーネント 【Widget】", - "【actions】 : 右側コンポーネント 【List】", - "【elevation】 : 影の深さ 【double】", - "【shape】 : 形状 【ShapeBorder】", - "【backgroundColor】 : 背景色 【背景色】", - "【centerTitle】 : 中央を中央揃えにするか 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "AppBarとTabBar、TabBarViewの連携使用", - "desc": [ - "【bottom】 : 下部コンポーネント 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ko_KR.json deleted file mode 100644 index 09bbd0c3e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "앱 상단 바", - "info": "앱 상단 바의 일반적인 구조로, 지정된 위치에 해당 컴포넌트를 배치할 수 있으며, 주로 Scaffold 컴포넌트에서 사용됩니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AppBar 기본 사용법", - "desc": [ - "【leading】 : 왼쪽 컴포넌트 【Widget】", - "【title】 : 중앙 컴포넌트 【Widget】", - "【actions】 : 오른쪽 컴포넌트 【List】", - "【elevation】 : 그림자 깊이 【double】", - "【shape】 : 모양 【ShapeBorder】", - "【backgroundColor】 : 배경색 【Color】", - "【centerTitle】 : 중앙 제목 정렬 여부 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "AppBar와 TabBar, TabBarView 함께 사용", - "desc": [ - "【bottom】 : 하단 컴포넌트 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_pt_PT.json deleted file mode 100644 index 2f139cc1e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "Barra de Aplicação", - "info": "Uma estrutura comum para a barra superior de uma aplicação, onde componentes correspondentes podem ser colocados em áreas específicas, frequentemente utilizada no componente Scaffold.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AppBar", - "desc": [ - "【leading】 : Componente do lado esquerdo 【Widget】", - "【title】 : Componente do meio 【Widget】", - "【actions】 : Componente do lado direito 【List】", - "【elevation】 : Profundidade da sombra 【double】", - "【shape】 : Forma 【ShapeBorder】", - "【backgroundColor】 : Cor de fundo 【Cor de fundo】", - "【centerTitle】 : Centralizar no meio 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "Uso do AppBar com TabBar e TabBarView", - "desc": [ - "【bottom】 : Componente inferior 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ru_RU.json deleted file mode 100644 index b3d5c22a2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "Верхняя панель приложения", - "info": "Общая структура верхней панели приложения, в которой можно разместить соответствующие компоненты в указанных местах, часто используется в компоненте Scaffold.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AppBar", - "desc": [ - "【leading】 : Левый компонент 【Widget】", - "【title】 : Центральный компонент 【Widget】", - "【actions】 : Правый компонент 【List】", - "【elevation】 : Глубина тени 【double】", - "【shape】 : Форма 【ShapeBorder】", - "【backgroundColor】 : Цвет фона 【Цвет】", - "【centerTitle】 : Центрирование заголовка 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "Использование AppBar с TabBar и TabBarView", - "desc": [ - "【bottom】 : Нижний компонент 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_zh-CN.json deleted file mode 100644 index 1ab0dc10b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 57, - "name": "AppBar", - "localName": "应用头栏", - "info": "一个应用顶部栏的通用结构,可在指定的部位放置相应的组件,常用于Scaffold组件中。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AppBar基本使用", - "desc": [ - "【leading】 : 左侧组件 【Widget】", - "【title】 : 中间组件 【Widget】", - "【actions】 : 右侧组件 【List】", - "【elevation】 : 影深 【double】", - "【shape】 : 形状 【ShapeBorder】", - "【backgroundColor】 : 影深 【背景色】", - "【centerTitle】 : 中间是否居中 【bool】" - ] - }, - { - "file": "node2_tab.dart", - "name": "AppBar与TabBar、TabBarView联用", - "desc": [ - "【bottom】 : 底部组件 【PreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/node1_base.dart deleted file mode 100644 index 1b86573eb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/node1_base.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; - -import '../PopupMenuButton/node1_base.dart'; - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - - -class CustomAppBar extends StatelessWidget { - const CustomAppBar({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return AppBar( - title: const Text('风雅六社'), - leading: const BackButton(), - backgroundColor: Colors.amber[500], - elevation: 2, - centerTitle: true, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(20), - bottomRight: Radius.circular(20), - topRight: Radius.circular(5), - bottomLeft: Radius.circular(5), - )), - actions: [ - IconButton( - icon: const Icon(Icons.star), - tooltip: 'liked_widget_bloc', - onPressed: () { - // do nothing - }), - const CustomPopupMenuButton() - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/node2_tab.dart b/modules/widget_system/widgets/lib/StatefulWidget/AppBar/node2_tab.dart deleted file mode 100644 index 5eaf703fe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AppBar/node2_tab.dart +++ /dev/null @@ -1,81 +0,0 @@ -import 'package:flutter/material.dart'; - -import '../PopupMenuButton/node1_base.dart'; -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class TabAppBar extends StatefulWidget { - const TabAppBar({Key? key}) : super(key: key); - - @override - _TabAppBarState createState() => _TabAppBarState(); -} - -class _TabAppBarState extends State - with SingleTickerProviderStateMixin { - final List tabs = ['风画庭', '雨韵舍', '雷鸣殿', '电疾堂', '霜寒阁', '雪月楼']; - late TabController _tabController; - - @override - void initState() { - super.initState(); - _tabController = TabController(vsync: this, length: tabs.length); - } - - @override - void dispose() { - _tabController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 220, - child: Scaffold( - appBar: _buildAppBar(), - body: _buildTableBarView(), - ), - ); - } - - PreferredSizeWidget _buildAppBar() => AppBar( - title: const Text('风雅六社'), - elevation: 1, - leading: const BackButton(), - centerTitle: true, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(20), - topRight: Radius.circular(20), - )), - actions: [ - IconButton( - icon: const Icon(Icons.star), - tooltip: 'liked_widget_bloc', - onPressed: () { - // do nothing - }), - const CustomPopupMenuButton() - ], - bottom: TabBar( - isScrollable: true, - controller: _tabController, - indicatorColor: Colors.orangeAccent, - tabs: tabs.map((e) => Tab(text: e)).toList(), - ), - ); - - Widget _buildTableBarView() => TabBarView( - controller: _tabController, - children: tabs - .map((e) => ColoredBox( - color: Colors.purple, - child:Center( - child: Text( - e, - style: const TextStyle(color: Colors.white, fontSize: 20), - ), - ))) - .toList()); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_de_DE.json deleted file mode 100644 index 926bc240b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "Automatische Lebenserhaltung", - "info": "In einer Liste mit verzögerter Ladung ermöglicht es den Unterbäumen, den Zustand beizubehalten. Allein verwendet hat es keine Wirkung und muss in Verbindung mit KeepAliveNotification verwendet werden.", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in AutomaticKeepAlive", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "In den Quellcodes von Listen- und Seitenwechselkomponenten wie ListView, SliverList, GridView, SliverGrid, PageView, TabBarView wird die AutomaticKeepAlive-Komponente verwendet. Um den Zustand eines States zu erhalten, kann AutomaticKeepAliveClientMixin verwendet werden, das eine einfache Kapselung der Verwendung von KeepAliveNotification darstellt. Dieses Beispiel zeigt die Zustandserhaltung der ListView-Einträge." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_en_US.json deleted file mode 100644 index 721b09ba5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "Automatic Keep Alive", - "info": "In lazy-loaded lists, allows subtrees to request to maintain state. It has no effect when used alone and needs to be used in conjunction with KeepAliveNotification.", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to AutomaticKeepAlive", - "desc": [ - "【child】: Child component 【Widget】", - "The AutomaticKeepAlive component is used in the source code of list and page-switching components such as ListView, SliverList, GridView, SliverGrid, PageView, and TabBarView. When keeping a State alive, you can use AutomaticKeepAliveClientMixin, which is a simple encapsulation of the use of KeepAliveNotification. This example demonstrates the state preservation of ListView items." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_es_ES.json deleted file mode 100644 index ab29b9ec8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "Mantenimiento automático", - "info": "En listas de carga perezosa, permite que los subárboles soliciten mantener el estado. No tiene efecto si se usa solo, debe usarse junto con KeepAliveNotification.", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a AutomaticKeepAlive", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "El componente AutomaticKeepAlive se utiliza en el código fuente de componentes de lista y cambio de página como ListView, SliverList, GridView, SliverGrid, PageView, TabBarView, etc. Para mantener vivo un State, se puede usar AutomaticKeepAliveClientMixin, que es una encapsulación simple del uso de KeepAliveNotification. Este ejemplo muestra cómo mantener vivo el estado de un elemento en ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_fr_FR.json deleted file mode 100644 index e4380b34b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "Maintien automatique en vie", - "info": "Dans les listes chargées de manière paresseuse, permet aux sous-arbres de demander à maintenir leur état. Utilisé seul, il n'a aucun effet. Doit être utilisé avec KeepAliveNotification.", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à AutomaticKeepAlive", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "Le composant AutomaticKeepAlive est utilisé dans les composants de liste et de pagination tels que ListView, SliverList, GridView, SliverGrid, PageView, TabBarView, etc. Pour maintenir en vie un certain State, on peut utiliser AutomaticKeepAliveClientMixin, qui est un enrobage simplifié de l'utilisation de KeepAliveNotification. Cet exemple montre le maintien en vie de l'état des entrées de ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_it_IT.json deleted file mode 100644 index 8a34fd8fe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "Mantenimento Automatico", - "info": "Nelle liste a caricamento lento, consente ai sottoalberi di richiedere il mantenimento dello stato. Non ha effetto se usato da solo, deve essere utilizzato insieme a KeepAliveNotification.", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a AutomaticKeepAlive", - "desc": [ - "【child】 : componente figlio 【Widget】", - "Nei componenti come ListView, SliverList, GridView, SliverGrid, PageView, TabBarView, il componente AutomaticKeepAlive è ampiamente utilizzato. Per mantenere attivo uno stato, è possibile utilizzare AutomaticKeepAliveClientMixin, che è un'implementazione semplificata dell'uso di KeepAliveNotification. Questo esempio mostra il mantenimento dello stato degli elementi in ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ja_JP.json deleted file mode 100644 index ec58d18d8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "自動キープアライブ", - "info": "遅延読み込みのリストで、サブツリーが状態を維持することを許可します。単独で使用しても効果はなく、KeepAliveNotification と併用する必要があります。", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AutomaticKeepAlive 紹介", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "ListView、SliverList、GridView、SliverGrid、PageView、TabBarView などのリストやページ切り替えコンポーネントのソースコードでは、AutomaticKeepAlive コンポーネントが使用されています。特定の State をキープアライブする場合、AutomaticKeepAliveClientMixin を使用して操作できます。これは KeepAliveNotification を使用するための簡易なラッパーです。この例では、ListView の項目の状態をキープアライブする方法を示しています。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ko_KR.json deleted file mode 100644 index a1b74b317..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "자동 생존 유지", - "info": "지연 로드 목록에서 하위 트리가 상태를 유지하도록 요청할 수 있으며, 단독으로 사용할 경우 효과가 없으며 KeepAliveNotification과 함께 사용해야 합니다.", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AutomaticKeepAlive 소개", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "ListView, SliverList, GridView, SliverGrid, PageView, TabBarView 등의 목록 및 페이지 전환 위젯 소스 코드에는 AutomaticKeepAlive 위젯이 사용됩니다. 특정 State를 생존 유지할 때 AutomaticKeepAliveClientMixin을 사용하여 작업할 수 있으며, 이는 KeepAliveNotification 사용을 간단하게 캡슐화한 것입니다. 이 예제는 ListView 항목의 상태 생존 유지를 보여줍니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_pt_PT.json deleted file mode 100644 index c234a4e04..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "Manutenção automática", - "info": "Em listas de carregamento preguiçoso, permite que as subárvores solicitem a manutenção do estado. O uso isolado não tem efeito e deve ser usado em conjunto com o KeepAliveNotification.", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao AutomaticKeepAlive", - "desc": [ - "【child】 : componente filho 【Widget】", - "O componente AutomaticKeepAlive é utilizado em ListView, SliverList, GridView, SliverGrid, PageView, TabBarView e outros componentes de lista e de mudança de página. Para manter o estado de um State, pode-se usar o AutomaticKeepAliveClientMixin, que é um encapsulamento simplificado do uso do KeepAliveNotification. Este exemplo mostra a manutenção do estado de um item da ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ru_RU.json deleted file mode 100644 index 6b757e2b6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "Автоматическое поддержание активности", - "info": "В лениво загружаемых списках позволяет поддеревьям запрашивать сохранение состояния. Само по себе не имеет эффекта, необходимо использовать вместе с KeepAliveNotification.", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в AutomaticKeepAlive", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "Компонент AutomaticKeepAlive используется в исходном коде списков и страничных компонентов, таких как ListView, SliverList, GridView, SliverGrid, PageView, TabBarView и других. Для поддержания активности определенного State можно использовать AutomaticKeepAliveClientMixin, который представляет собой простую обертку для использования KeepAliveNotification. Этот пример демонстрирует поддержание состояния элементов ListView." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_zh-CN.json deleted file mode 100644 index 630f8742c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 239, - "name": "AutomaticKeepAlive", - "localName": "自动保活", - "info": "在懒加载的列表中,允许子树请求保持状态,单独使用无效果,需要配合 KeepAliveNotification 使用。", - "lever": 1, - "family": 1, - "linkIds": [ - 59, - 162, - 163, - 165, - 185, - 188 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AutomaticKeepAlive 介绍", - "desc": [ - "【child】 : 子组件 【Widget】", - "在 ListView、SliverList、GridView、SliverGrid、PageView、TabBarView 等列表、切页组件源码中都有使用到 AutomaticKeepAlive 组件。在保活某个 State 时,可以使用 AutomaticKeepAliveClientMixin 进行操作,它是对 KeepAliveNotification 使用的一个简易封装。该示例展示出 ListView 条目的状态保活。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/node1_base.dart deleted file mode 100644 index 0416dbc2f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/AutomaticKeepAlive/node1_base.dart +++ /dev/null @@ -1,114 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class AutomaticKeepAliveDemo extends StatelessWidget { - const AutomaticKeepAliveDemo({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - Colors.red[50]!, - Colors.red[100]!, - Colors.red[200]!, - Colors.red[300]!, - Colors.red[400]!, - Colors.red[500]!, - Colors.red[600]!, - Colors.red[700]!, - Colors.red[800]!, - Colors.red[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: ListView.builder( - itemCount: data.length, - itemBuilder: (_, index) => _ColorBox( - color: data[index], - index: index, - ), - ), - ); - } -} - -class _ColorBox extends StatefulWidget { - final Color color; - final int index; - - const _ColorBox({super.key, required this.color, required this.index}); - - @override - _ColorBoxState createState() => _ColorBoxState(); -} - -class _ColorBoxState extends State<_ColorBox> with AutomaticKeepAliveClientMixin { - bool _checked = false; - - @override - void initState() { - super.initState(); - _checked = false; - print('-----_ColorBoxState#initState---${widget.index}-------'); - } - - @override - void dispose() { - print('-----_ColorBoxState#dispose---${widget.index}-------'); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - super.build(context); - return Container( - alignment: Alignment.center, - height: 50, - color: widget.color, - child: Row( - children: [ - const SizedBox( - width: 60, - ), - Checkbox( - value: _checked, - onChanged: (bool? v) { - setState(() { - _checked = v ?? false; - }); - }, - ), - Text( - "index ${widget.index}: ${colorString(widget.color)}", - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]), - ), - ], - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - @override - bool get wantKeepAlive => true; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_de_DE.json deleted file mode 100644 index 5659293cd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "Untere Navigationsleiste", - "info": "Eine einbettbare untere Navigationsleiste, die normalerweise am unteren Ende des Scaffold-Widgets verwendet wird. Kann Eigenschaften wie Farbe, Schattentiefe, Form usw. angeben und kann mit PageView einen Seitenwechsel-Effekt erzielen.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von BottomAppBar", - "desc": [ - "【elevation】 : Schattentiefe 【double】", - "【shape】 : Form 【NotchedShape】", - "【notchMargin】 : Abstand 【double】", - "【color】 : Farbe 【Color】", - "【child】 : Kind 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_en_US.json deleted file mode 100644 index c4bb3f05a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "Bottom Navigation", - "info": "A recessed bottom navigation bar, typically used at the bottom of a Scaffold component, can specify properties such as color, elevation, shape, etc., and can achieve page-switching effects with PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of BottomAppBar", - "desc": [ - "【elevation】: Elevation 【double】", - "【shape】: Shape 【NotchedShape】", - "【notchMargin】: Notch Margin 【double】", - "【color】: Color 【Color】", - "【child】: Child 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_es_ES.json deleted file mode 100644 index ac76510df..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "Barra de navegación inferior", - "info": "Una barra de navegación inferior que se puede incrustar, generalmente se usa en la parte inferior del componente Scaffold, se pueden especificar propiedades como color, profundidad de sombra, forma, etc., y se puede implementar un efecto de cambio de página con PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de BottomAppBar", - "desc": [ - "【elevation】 : Profundidad de sombra 【double】", - "【shape】 : Forma 【NotchedShape】", - "【notchMargin】 : Distancia de separación 【double】", - "【color】 : Color 【Color】", - "【child】 : Hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_fr_FR.json deleted file mode 100644 index bcfc5fb68..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "Barre de navigation inférieure", - "info": "Une barre de navigation inférieure encastrable, généralement utilisée au bas du composant Scaffold, peut spécifier des propriétés telles que la couleur, la profondeur de l'ombre, la forme, etc., et peut réaliser un effet de changement de page avec PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de BottomAppBar", - "desc": [ - "【elevation】 : Profondeur de l'ombre 【double】", - "【shape】 : Forme 【NotchedShape】", - "【notchMargin】 : Distance d'intervalle 【double】", - "【color】 : Couleur 【Color】", - "【child】 : Enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_it_IT.json deleted file mode 100644 index ccdb358bc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "Barra di navigazione inferiore", - "info": "Una barra di navigazione inferiore incassabile, solitamente utilizzata nella parte inferiore del componente Scaffold, può specificare proprietà come colore, profondità dell'ombra, forma, ecc., e può realizzare l'effetto di cambio pagina con PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di BottomAppBar", - "desc": [ - "【elevation】 : profondità dell'ombra 【double】", - "【shape】 : forma 【NotchedShape】", - "【notchMargin】 : distanza di intervallo 【double】", - "【color】 : colore 【Color】", - "【child】 : figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ja_JP.json deleted file mode 100644 index de775395f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "ボトムナビゲーション", - "info": "凹型のボトムナビゲーションバーで、通常Scaffoldコンポーネントの下部に使用され、色、影の深さ、形状などの属性を指定できます。PageViewと組み合わせてページ切り替え効果を実現できます。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomAppBarの基本使用法", - "desc": [ - "【elevation】 : 影の深さ 【double】", - "【shape】 : 形状 【NotchedShape】", - "【notchMargin】 : 間隔距離 【double】", - "【color】 : 色 【Color】", - "【child】 : 子 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ko_KR.json deleted file mode 100644 index c91f6fa04..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "하단 네비게이션", - "info": "들여쓰기 가능한 하단 네비게이션 바로, 일반적으로 Scaffold 컴포넌트의 하단에 사용되며, 색상, 그림자 깊이, 모양 등 속성을 지정할 수 있으며, PageView와 함께 페이지 전환 효과를 구현할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomAppBar 기본 사용법", - "desc": [ - "【elevation】 : 그림자 깊이 【double】", - "【shape】 : 모양 【NotchedShape】", - "【notchMargin】 : 간격 거리 【double】", - "【color】 : 색상 【Color】", - "【child】 : 자식 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_pt_PT.json deleted file mode 100644 index 33969f6bc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "Barra de Navegação Inferior", - "info": "Uma barra de navegação inferior recortável, geralmente usada na parte inferior do componente Scaffold, pode especificar propriedades como cor, profundidade de sombra, forma, etc., e pode ser usada com PageView para implementar efeitos de mudança de página.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do BottomAppBar", - "desc": [ - "【elevation】 : Profundidade de Sombra 【double】", - "【shape】 : Forma 【NotchedShape】", - "【notchMargin】 : Distância de Espaçamento 【double】", - "【color】 : Cor 【Color】", - "【child】 : Filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ru_RU.json deleted file mode 100644 index 105a260a8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "Нижняя навигация", - "info": "Встраиваемая нижняя панель навигации, обычно используемая в нижней части компонента Scaffold, может быть указана с такими свойствами, как цвет, глубина тени, форма и может быть реализована с эффектом перелистывания страниц с помощью PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование BottomAppBar", - "desc": [ - "【elevation】 : Глубина тени 【double】", - "【shape】 : Форма 【NotchedShape】", - "【notchMargin】 : Расстояние между элементами 【double】", - "【color】 : Цвет 【Color】", - "【child】 : Дочерний элемент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_zh-CN.json deleted file mode 100644 index e367a9f14..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 61, - "name": "BottomAppBar", - "localName": "底部导航", - "info": "一个可凹嵌的底部导航栏,通常用于Scaffold组件的底部,可指定颜色、影深、形状等属性,可与PageView实现切页效果。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomAppBar基本用法", - "desc": [ - "【elevation】 : 影深 【double】", - "【shape】 : 形状 【NotchedShape】", - "【notchMargin】 : 间隔距离 【double】", - "【color】 : 颜色 【Color】", - "【child】 : 孩子 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/node1_base.dart deleted file mode 100644 index f0478b4e1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomAppBar/node1_base.dart +++ /dev/null @@ -1,108 +0,0 @@ -import 'package:flutter/material.dart'; - - -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomBottomAppBar extends StatefulWidget { - const CustomBottomAppBar({Key? key}) : super(key: key); - - @override - _CustomBottomAppBarState createState() => _CustomBottomAppBarState(); -} - -class _CustomBottomAppBarState extends State { - int _position = 0; - FloatingActionButtonLocation _location = - FloatingActionButtonLocation.centerDocked; - final Map iconsMap = { - "图鉴": Icons.home, - "动态": Icons.toys, - "喜欢": Icons.favorite, - "手册": Icons.class_, - }; - Color activeColor = Colors.blue.withAlpha(240); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: 180, - child: Scaffold( - backgroundColor: Colors.purple.withAlpha(22), - floatingActionButton: FloatingActionButton( - onPressed: () => Navigator.of(context).pushNamed('AboutMePage'), - child: const Icon(Icons.add), - ), - bottomNavigationBar: _buildBottomAppBar(), - floatingActionButtonLocation: _location, - body: _buildContent(), - ), - ); - } - - Widget _buildBottomAppBar() { - return BottomAppBar( - elevation: 1, - shape: const CircularNotchedRectangle(), - notchMargin: 5, - color: Colors.red, - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: info.asMap().keys.map((i) => _buildChild(i)).toList() - ..insertAll(isCenter ? 2 : 4, [const SizedBox(width: 30)])), - ); - } - - Container _buildContent() { - return Container( - alignment: Alignment.center, - child: Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Text( - '当前页索引:$_position', - style: const TextStyle(color: Colors.blue, fontSize: 18), - ), - Switch( - value: isCenter, - onChanged: (v) { - setState(() { - _location = v - ? FloatingActionButtonLocation.centerDocked - : FloatingActionButtonLocation.endDocked; - }); - }), - ], - ), - ); - } - - List get info => iconsMap.keys.toList(); - - bool get isCenter => _location == FloatingActionButtonLocation.centerDocked; - - Widget _buildChild(int i) { - bool active = i == _position; - return Padding( - padding: const EdgeInsets.all(8.0), - child: GestureDetector( - onTap: () => setState(() => _position = i), - child: Wrap( - direction: Axis.vertical, - alignment: WrapAlignment.center, - children: [ - Icon( - iconsMap[info[i]], - color: active ? activeColor : Colors.white, - size: 30, - ), - Text(info[i], - style: TextStyle( - color: active ? activeColor : Colors.white, fontSize: 14)), - ], - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_de_DE.json deleted file mode 100644 index 768c23712..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_de_DE.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "Untere Navigationsleiste", - "info": "Eine untere Navigationsleiste, die normalerweise am unteren Rand des Scaffold-Widgets verwendet wird. Kann Farben und Modi angeben, akzeptiert Klick-Rückrufe und kann mit PageView Seiteneffekte erzielen.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von BottomNavigationBar", - "desc": [ - "【currentIndex】 : Aktueller Index 【int】", - "【elevation】 : Schattentiefe 【double】", - "【type】 : Typ*2 【BottomNavigationBarType】", - "【fixedColor】 : Farbe, wenn type fix ist 【Color】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【iconSize】 : Symbolgröße 【double】", - "【selectedLabelStyle】 : Stil des ausgewählten Textes 【TextStyle】", - "【unselectedLabelStyle】 : Stil des nicht ausgewählten Textes 【TextStyle】", - "【showUnselectedLabels】 : Nicht ausgewählte Labels anzeigen 【bool】", - "【showSelectedLabels】 : Ausgewählte Labels anzeigen 【bool】", - "【items】 : Elemente 【List】", - "【onTap】 : Klick-Ereignis 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "Kann mit PageView für Seitenwechsel kombiniert werden", - "desc": [ - "Verwenden Sie den Controller beim onTap für den Seitenwechsel" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_en_US.json deleted file mode 100644 index 1c7aba5bb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_en_US.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "Bottom Navigation", - "info": "A bottom navigation bar, usually used at the bottom of the Scaffold component, can specify colors and modes, accepts click callbacks, and can achieve page switching effects with PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of BottomNavigationBar", - "desc": [ - "【currentIndex】 : Current index 【int】", - "【elevation】 : Shadow depth 【double】", - "【type】 : Type*2 【BottomNavigationBarType】", - "【fixedColor】 : Color when type is fix 【Color】", - "【backgroundColor】 : Background color 【Color】", - "【iconSize】 : Icon size 【double】", - "【selectedLabelStyle】 : Selected text style 【TextStyle】", - "【unselectedLabelStyle】 : Unselected text style 【TextStyle】", - "【showUnselectedLabels】 : Show unselected labels 【bool】", - "【showSelectedLabels】 : Show selected labels 【bool】", - "【items】 : Items 【List】", - "【onTap】 : Click event 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "Page Switching with PageView", - "desc": [ - "Use the controller for page switching during onTap" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_es_ES.json deleted file mode 100644 index 181161124..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_es_ES.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "Barra de navegación inferior", - "info": "Una barra de navegación inferior, generalmente utilizada en la parte inferior del componente Scaffold, puede especificar colores y modos, acepta devoluciones de llamada de clics y puede lograr efectos de cambio de página con PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de BottomNavigationBar", - "desc": [ - "【currentIndex】 : Índice actual 【int】", - "【elevation】 : Profundidad de sombra 【double】", - "【type】 : Tipo*2 【BottomNavigationBarType】", - "【fixedColor】 : Color cuando el tipo es fix 【Color】", - "【backgroundColor】 : Color de fondo 【Color】", - "【iconSize】 : Tamaño del ícono 【double】", - "【selectedLabelStyle】 : Estilo del texto seleccionado 【TextStyle】", - "【unselectedLabelStyle】 : Estilo del texto no seleccionado 【TextStyle】", - "【showUnselectedLabels】 : Mostrar etiquetas no seleccionadas 【bool】", - "【showSelectedLabels】 : Mostrar etiquetas seleccionadas 【bool】", - "【items】 : Elementos 【List】", - "【onTap】 : Evento de clic 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "Se puede combinar con PageView para cambiar de página", - "desc": [ - "Usar el controlador para cambiar de página durante onTap" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_fr_FR.json deleted file mode 100644 index db97216bf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_fr_FR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "Navigation inférieure", - "info": "Une barre de navigation inférieure, généralement utilisée au bas du composant Scaffold, peut spécifier la couleur et le mode, accepte un rappel de clic et peut réaliser un effet de changement de page avec PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de BottomNavigationBar", - "desc": [ - "【currentIndex】 : Index actuel 【int】", - "【elevation】 : Profondeur de l'ombre 【double】", - "【type】 : Type*2 【BottomNavigationBarType】", - "【fixedColor】 : Couleur lorsque le type est fixe 【Color】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【iconSize】 : Taille de l'icône 【double】", - "【selectedLabelStyle】 : Style du texte sélectionné 【TextStyle】", - "【unselectedLabelStyle】 : Style du texte non sélectionné 【TextStyle】", - "【showUnselectedLabels】 : Afficher les étiquettes non sélectionnées 【bool】", - "【showSelectedLabels】 : Afficher les étiquettes sélectionnées 【bool】", - "【items】 : Éléments 【List】", - "【onTap】 : Événement de clic 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "Peut être combiné avec PageView pour changer de page", - "desc": [ - "Utiliser le contrôleur pour changer de page lors de onTap" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_it_IT.json deleted file mode 100644 index d7cc293f3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_it_IT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "Barra di navigazione inferiore", - "info": "Una barra di navigazione inferiore, solitamente utilizzata nella parte inferiore del componente Scaffold, può specificare colore e modalità, accetta callback di clic e può realizzare l'effetto di cambio pagina con PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di BottomNavigationBar", - "desc": [ - "【currentIndex】 : Indice corrente 【int】", - "【elevation】 : Profondità dell'ombra 【double】", - "【type】 : Tipo*2 【BottomNavigationBarType】", - "【fixedColor】 : Colore quando il tipo è fix 【Color】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【iconSize】 : Dimensione dell'icona 【double】", - "【selectedLabelStyle】 : Stile del testo selezionato 【TextStyle】", - "【unselectedLabelStyle】 : Stile del testo non selezionato 【TextStyle】", - "【showUnselectedLabels】 : Mostra etichette non selezionate 【bool】", - "【showSelectedLabels】 : Mostra etichette selezionate 【bool】", - "【items】 : Voci 【List】", - "【onTap】 : Evento di clic 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "Può essere combinato con PageView per il cambio pagina", - "desc": [ - "Utilizza il controller per il cambio pagina durante onTap" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ja_JP.json deleted file mode 100644 index c9b5e9469..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ja_JP.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "ボトムナビゲーション", - "info": "ボトムナビゲーションバーは、通常Scaffoldコンポーネントの下部に使用され、色やモードを指定でき、クリックコールバックを受け取り、PageViewと組み合わせてページ切り替え効果を実現できます。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomNavigationBarの基本使用", - "desc": [ - "【currentIndex】 : 現在のインデックス 【int】", - "【elevation】 : 影の深さ 【double】", - "【type】 : タイプ*2 【BottomNavigationBarType】", - "【fixedColor】 : typeがfixの場合の色 【Color】", - "【backgroundColor】 : 背景色 【Color】", - "【iconSize】 : アイコンサイズ 【double】", - "【selectedLabelStyle】 : 選択されたテキストスタイル 【TextStyle】", - "【unselectedLabelStyle】 : 選択されていないテキストスタイル 【TextStyle】", - "【showUnselectedLabels】 : 選択されていないラベルを表示 【bool】", - "【showSelectedLabels】 : 選択されたラベルを表示 【bool】", - "【items】 : アイテム 【List】", - "【onTap】 : クリックイベント 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "PageViewと組み合わせてページ切り替え", - "desc": [ - "onTap時にコントローラーを使用してページ切り替えを行う" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ko_KR.json deleted file mode 100644 index 40574e58f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ko_KR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "하단 네비게이션", - "info": "하단 네비게이션 바는 일반적으로 Scaffold 컴포넌트의 하단에 사용되며, 색상과 모드를 지정할 수 있고, 클릭 콜백을 받으며, PageView와 함께 페이지 전환 효과를 구현할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomNavigationBar 기본 사용", - "desc": [ - "【currentIndex】 : 현재 인덱스 【int】", - "【elevation】 : 그림자 깊이 【double】", - "【type】 : 타입*2 【BottomNavigationBarType】", - "【fixedColor】 : type이 fix일 때의 색상 【Color】", - "【backgroundColor】 : 배경색 【Color】", - "【iconSize】 : 아이콘 크기 【double】", - "【selectedLabelStyle】 : 선택된 텍스트 스타일 【TextStyle】", - "【unselectedLabelStyle】 : 선택되지 않은 텍스트 스타일 【TextStyle】", - "【showUnselectedLabels】 : 선택되지 않은 라벨 표시 【bool】", - "【showSelectedLabels】 : 선택된 라벨 표시 【bool】", - "【items】 : 항목 【List】", - "【onTap】 : 클릭 이벤트 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "PageView와 함께 페이지 전환", - "desc": [ - "onTap 시 컨트롤러를 사용하여 페이지 전환" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_pt_PT.json deleted file mode 100644 index 5a815723d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_pt_PT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "Navegação Inferior", - "info": "Uma barra de navegação inferior, normalmente usada na parte inferior de um componente Scaffold, pode especificar cores e modos, aceita callbacks de clique e pode ser usada com PageView para efeitos de mudança de página.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do BottomNavigationBar", - "desc": [ - "【currentIndex】 : Índice atual 【int】", - "【elevation】 : Profundidade da sombra 【double】", - "【type】 : Tipo*2 【BottomNavigationBarType】", - "【fixedColor】 : Cor quando o tipo é fixo 【Color】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【iconSize】 : Tamanho do ícone 【double】", - "【selectedLabelStyle】 : Estilo do texto selecionado 【TextStyle】", - "【unselectedLabelStyle】 : Estilo do texto não selecionado 【TextStyle】", - "【showUnselectedLabels】 : Mostrar etiquetas não selecionadas 【bool】", - "【showSelectedLabels】 : Mostrar etiquetas selecionadas 【bool】", - "【items】 : Itens 【List】", - "【onTap】 : Evento de clique 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "Pode ser combinado com PageView para mudar de página", - "desc": [ - "Usar o controlador para mudar de página durante o onTap" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ru_RU.json deleted file mode 100644 index 86f960935..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_ru_RU.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "Нижняя навигация", - "info": "Нижняя панель навигации, обычно используется внизу компонента Scaffold, может задавать цвет и режим, принимает обратный вызов при нажатии, может реализовать эффект переключения страниц с PageView.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование BottomNavigationBar", - "desc": [ - "【currentIndex】 : текущий индекс 【int】", - "【elevation】 : глубина тени 【double】", - "【type】 : тип*2 【BottomNavigationBarType】", - "【fixedColor】 : цвет для типа fix 【Color】", - "【backgroundColor】 : цвет фона 【Color】", - "【iconSize】 : размер иконки 【double】", - "【selectedLabelStyle】 : стиль выбранного текста 【TextStyle】", - "【unselectedLabelStyle】 : стиль невыбранного текста 【TextStyle】", - "【showUnselectedLabels】 : показывать невыбранные метки 【bool】", - "【showSelectedLabels】 : показывать выбранные метки 【bool】", - "【items】 : элементы 【List】", - "【onTap】 : событие нажатия 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "Можно использовать с PageView для переключения страниц", - "desc": [ - "Использовать контроллер для переключения страниц при onTap" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_zh-CN.json deleted file mode 100644 index 2582fb6da..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/desc_zh-CN.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 60, - "name": "BottomNavigationBar", - "localName": "底部导航", - "info": "一个底部导航栏,通常用于Scaffold组件的底部,可指定颜色和模式,接受点击回调,可与PageView实现切页效果。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomNavigationBar基本使用", - "desc": [ - "【currentIndex】 : 当前索引 【int】", - "【elevation】 : 影深 【double】", - "【type】 : 类型*2 【BottomNavigationBarType】", - "【fixedColor】 : type为fix的颜色 【Color】", - "【backgroundColor】 : 背景色 【Color】", - "【iconSize】 : 图标大小 【double】", - "【selectedLabelStyle】 : 选中文字样式 【TextStyle】", - "【unselectedLabelStyle】 : 未选中文字样式 【TextStyle】", - "【showUnselectedLabels】 : 显示未选中标签 【bool】", - "【showSelectedLabels】 : 显示选中标签 【bool】", - "【items】 : 条目 【List】", - "【onTap】 : 点击事件 【Function(int)】" - ] - }, - { - "file": "node2_page.dart", - "name": "可结合PageView进行切页", - "desc": [ - "在onTap时进行使用控制器进行切页" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/node1_base.dart deleted file mode 100644 index ca5caa22c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/node1_base.dart +++ /dev/null @@ -1,81 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class CustomBottomNavigationBar extends StatefulWidget { - const CustomBottomNavigationBar({Key? key}) : super(key: key); - - @override - _CustomBottomNavigationBarState createState() => - _CustomBottomNavigationBarState(); -} - -class _CustomBottomNavigationBarState extends State { - int _position = 0; - BottomNavigationBarType _type = BottomNavigationBarType.shifting; - final Map iconsMap = { //底栏图标 - "图鉴": Icons.home, "动态": Icons.toys, - "喜欢": Icons.favorite, "手册": Icons.class_, - "我的": Icons.account_circle, - }; - final List _colors = [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green, - Colors.purple, - ]; - - @override - Widget build(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - _buildOp(), - _buildBottomNavigationBar(), - ], - ); - } - - bool get isShifting => _type == BottomNavigationBarType.shifting; - - BottomNavigationBar _buildBottomNavigationBar() { - return BottomNavigationBar( - onTap: (position) => setState(() => _position = position), - currentIndex: _position, - elevation: 1, - type: _type, - fixedColor: isShifting ? Colors.white : _colors[_position], - backgroundColor: Colors.white, - iconSize: 25, - selectedLabelStyle: const TextStyle(fontWeight: FontWeight.bold), - showUnselectedLabels: false, - showSelectedLabels: true, - items: iconsMap.keys - .map((key) => BottomNavigationBarItem( - label:key, - icon: Icon(iconsMap[key]), - backgroundColor: _colors[_position])) - .toList(), - ); - } - - Widget _buildOp() { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Text( - _type.toString(), - style: const TextStyle(fontWeight: FontWeight.bold, color: Colors.blue), - ), - Switch( - value: _type == BottomNavigationBarType.shifting, - onChanged: (b) { - setState(() => _type = b - ? BottomNavigationBarType.shifting - : BottomNavigationBarType.fixed); - }), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/node2_page.dart b/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/node2_page.dart deleted file mode 100644 index e3b0ba15d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/BottomNavigationBar/node2_page.dart +++ /dev/null @@ -1,95 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-23 -/// contact me by email 1981462002@qq.com - -class BottomNavigationBarWithPageView extends StatefulWidget { - const BottomNavigationBarWithPageView({Key? key}) : super(key: key); - - @override - _BottomNavigationBarWithPageViewState createState() => - _BottomNavigationBarWithPageViewState(); -} - -class _BottomNavigationBarWithPageViewState - extends State { - int _position = 0; - final Map iconsMap = { - //底栏图标 - "图鉴": Icons.home, "动态": Icons.toys, - "喜欢": Icons.favorite, "手册": Icons.class_, - "我的": Icons.account_circle, - }; - final List _colors = [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green, - Colors.purple, - ]; - late PageController _controller; //页面控制器,初始0 - - @override - void initState() { - _controller = PageController( - initialPage: _position, - ); - super.initState(); - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Container( - color: Colors.orange.withAlpha(88), - width: MediaQuery.of(context).size.width, - height: 150, - child: PageView( - controller: _controller, - children: iconsMap.keys - .map((e) => Center( - child: Text( - e, - style: const TextStyle( - color: Colors.white, - fontSize: 20, - ), - ), - )) - .toList(), - ), - ), - _buildBottomNavigationBar() - ], - ); - } - - BottomNavigationBar _buildBottomNavigationBar() { - return BottomNavigationBar( - onTap: (position) { - _controller.jumpToPage(position); - setState(() => _position = position); - }, - currentIndex: _position, - elevation: 1, - type: BottomNavigationBarType.shifting, - fixedColor: Colors.white, - iconSize: 25, - selectedLabelStyle: const TextStyle(fontWeight: FontWeight.bold), - showUnselectedLabels: false, - showSelectedLabels: true, - items: iconsMap.keys - .map((key) => BottomNavigationBarItem( - label: key, - icon: Icon(iconsMap[key]), - backgroundColor: _colors[_position])) - .toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_de_DE.json deleted file mode 100644 index 05061a64b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_de_DE.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "Karussellansicht", - "info": "Eine Karussell-Komponente, die den Material Design-Richtlinien entspricht. Zeigt eine scrollbare Liste von Elementen an, wobei jedes Element basierend auf dem ausgewählten Layout dynamisch angepasst werden kann.", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CarouselView", - "desc": [ - "【itemExtent】 : Erzwungene Größe in der Hauptachse 【double】", - "【shrinkExtent】: Minimale Größe des Elements in der Hauptachse während des Scrollens 【double】", - "【scrollDirection】 : Scrollrichtung 【Axis?】", - "【children】: Liste der Unterkomponenten 【List】" - ] - }, - { - "file": "node2.dart", - "name": "Stilkonfiguration von CarouselView", - "desc": [ - "【padding】 : Innenabstand 【EdgeInsets? 】", - "【backgroundColor】 : Hintergrundfarbe 【Color? 】", - "【elevation】 : Schattentiefe 【double?】", - "【shape】 : Form 【ShapeBorder?】", - "【controller】 : Controller 【CarouselController?】", - "【reverse】 : Umgekehrtes Scrollen 【bool】", - "【onTap】 : Klick-Ereignis 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_en_US.json deleted file mode 100644 index 714743fca..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_en_US.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "Carousel View", - "info": "A carousel component that conforms to Material Design specifications. Displays a scrollable list of items, each of which can dynamically resize based on the selected layout.", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CarouselView Basic Usage", - "desc": [ - "【itemExtent】 : Forced size in the main axis direction 【double】", - "【shrinkExtent】: Minimum size of the item in the main axis direction during scrolling 【double】", - "【scrollDirection】 : Scroll axis direction 【Axis?】", - "【children】: List of child components 【List】" - ] - }, - { - "file": "node2.dart", - "name": "CarouselView Style Configuration", - "desc": [ - "【padding】 : Padding 【EdgeInsets? 】", - "【backgroundColor】 : Background color 【Color? 】", - "【elevation】 : Shadow depth 【double?】", - "【shape】 : Shape 【ShapeBorder?】", - "【controller】 : Controller 【CarouselController?】", - "【reverse】 : Whether to scroll in reverse 【bool】", - "【onTap】 : Click event 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_es_ES.json deleted file mode 100644 index 8d303b7c4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_es_ES.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "Vista de Carrusel", - "info": "Un componente de carrusel que cumple con las especificaciones de Material Design. Muestra una lista de elementos desplazables, donde cada elemento puede ajustar dinámicamente su tamaño según el diseño seleccionado.", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CarouselView", - "desc": [ - "【itemExtent】 : Tamaño forzado en la dirección del eje principal 【double】", - "【shrinkExtent】: Tamaño mínimo de los elementos en la dirección del eje principal durante el desplazamiento 【double】", - "【scrollDirection】 : Dirección del desplazamiento 【Axis?】", - "【children】: Lista de componentes hijos 【List】" - ] - }, - { - "file": "node2.dart", - "name": "Configuración de estilo de CarouselView", - "desc": [ - "【padding】 : Relleno interno 【EdgeInsets? 】", - "【backgroundColor】 : Color de fondo 【Color? 】", - "【elevation】 : Profundidad de la sombra 【double?】", - "【shape】 : Forma 【ShapeBorder?】", - "【controller】 : Controlador 【CarouselController?】", - "【reverse】 : Desplazamiento inverso 【bool】", - "【onTap】 : Evento de clic 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_fr_FR.json deleted file mode 100644 index f780de403..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_fr_FR.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "Vue Carrousel", - "info": "Un composant de carrousel conforme aux normes Material Design. Affiche une liste d'éléments défilables, chaque élément pouvant être redimensionné dynamiquement en fonction de la mise en page sélectionnée.", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CarouselView", - "desc": [ - "【itemExtent】 : Taille forcée dans la direction de l'axe principal 【double】", - "【shrinkExtent】: Taille minimale des éléments dans la direction de l'axe principal pendant le défilement 【double】", - "【scrollDirection】 : Direction de défilement 【Axis?】", - "【children】: Liste des composants enfants 【List】" - ] - }, - { - "file": "node2.dart", - "name": "Configuration du style de CarouselView", - "desc": [ - "【padding】 : Marge intérieure 【EdgeInsets? 】", - "【backgroundColor】 : Couleur de fond 【Color? 】", - "【elevation】 : Profondeur de l'ombre 【double?】", - "【shape】 : Forme 【ShapeBorder?】", - "【controller】 : Contrôleur 【CarouselController?】", - "【reverse】 : Défilement inversé 【bool】", - "【onTap】 : Événement de clic 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_it_IT.json deleted file mode 100644 index 554e03260..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_it_IT.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "Vista Carosello", - "info": "Un componente carosello conforme alle specifiche di Material Design. Visualizza un elenco di elementi scorrevoli, ciascuno dei quali può ridimensionarsi dinamicamente in base al layout selezionato.", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di CarouselView", - "desc": [ - "【itemExtent】 : Dimensione forzata nella direzione principale 【double】", - "【shrinkExtent】: Dimensione minima dell'elemento nella direzione principale durante lo scorrimento 【double】", - "【scrollDirection】 : Direzione di scorrimento 【Axis?】", - "【children】: Lista dei componenti figli 【List】" - ] - }, - { - "file": "node2.dart", - "name": "Configurazione dello stile di CarouselView", - "desc": [ - "【padding】 : Spaziatura interna 【EdgeInsets? 】", - "【backgroundColor】 : Colore di sfondo 【Color? 】", - "【elevation】 : Profondità dell'ombra 【double?】", - "【shape】 : Forma 【ShapeBorder?】", - "【controller】 : Controller 【CarouselController?】", - "【reverse】 : Scorrimento inverso 【bool】", - "【onTap】 : Evento di clic 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ja_JP.json deleted file mode 100644 index 12f3963b5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ja_JP.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "カルーセルビュー", - "info": "Material Design 仕様に準拠したカルーセルコンポーネント。スクロール可能な項目リストを表示し、各項目は選択されたレイアウトに基づいて動的にサイズを調整できます。", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CarouselView 基本の使い方", - "desc": [ - "【itemExtent】 : 主軸方向の強制サイズ 【double】", - "【shrinkExtent】: スクロール中、主軸方向の項目の最小サイズ 【double】", - "【scrollDirection】 : スクロール軸方向 【Axis?】", - "【children】: 子コンポーネントリスト 【List】" - ] - }, - { - "file": "node2.dart", - "name": "CarouselView スタイル設定", - "desc": [ - "【padding】 : パディング 【EdgeInsets? 】", - "【backgroundColor】 : 背景色 【Color? 】", - "【elevation】 : 影の深さ 【double?】", - "【shape】 : 形状 【ShapeBorder?】", - "【controller】 : コントローラー 【CarouselController?】", - "【reverse】 : 逆方向にスクロールするかどうか 【bool】", - "【onTap】 : クリックイベント 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ko_KR.json deleted file mode 100644 index cb49905c6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ko_KR.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "캐러셀 뷰", - "info": "Material Design 규격에 부합하는 캐러셀 컴포넌트입니다. 스크롤 가능한 항목 목록을 표시하며, 각 항목은 선택된 레이아웃에 따라 동적으로 크기를 조정할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CarouselView 기본 사용법", - "desc": [ - "【itemExtent】 : 주축 방향 강제 크기 【double】", - "【shrinkExtent】: 스크롤 중, 주축 방향 항목 최소 크기 【double】", - "【scrollDirection】 : 스크롤 방향 【Axis?】", - "【children】: 하위 컴포넌트 목록 【List】" - ] - }, - { - "file": "node2.dart", - "name": "CarouselView 스타일 설정", - "desc": [ - "【padding】 : 안쪽 여백 【EdgeInsets? 】", - "【backgroundColor】 : 배경색 【Color? 】", - "【elevation】 : 그림자 깊이 【double?】", - "【shape】 : 모양 【ShapeBorder?】", - "【controller】 : 컨트롤러 【CarouselController?】", - "【reverse】 : 역방향 스크롤 여부 【bool】", - "【onTap】 : 클릭 이벤트 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_pt_PT.json deleted file mode 100644 index 23c1508ec..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_pt_PT.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "Visualização de Carrossel", - "info": "Um componente de carrossel que segue as especificações do Material Design. Exibe uma lista de itens roláveis, onde cada item pode ser redimensionado dinamicamente com base no layout selecionado.", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CarouselView", - "desc": [ - "【itemExtent】 : Tamanho fixo na direção do eixo principal 【double】", - "【shrinkExtent】: Tamanho mínimo do item na direção do eixo principal durante o deslize 【double】", - "【scrollDirection】 : Direção do deslize 【Axis?】", - "【children】: Lista de componentes filhos 【List】" - ] - }, - { - "file": "node2.dart", - "name": "Configuração de Estilo do CarouselView", - "desc": [ - "【padding】 : Preenchimento interno 【EdgeInsets? 】", - "【backgroundColor】 : Cor de fundo 【Color? 】", - "【elevation】 : Profundidade da sombra 【double?】", - "【shape】 : Forma 【ShapeBorder?】", - "【controller】 : Controlador 【CarouselController?】", - "【reverse】 : Deslize reverso 【bool】", - "【onTap】 : Evento de clique 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ru_RU.json deleted file mode 100644 index d42e01009..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_ru_RU.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "Карусель", - "info": "Карусельный компонент, соответствующий спецификациям Material Design. Отображает прокручиваемый список элементов, каждый из которых может динамически изменять размер в зависимости от выбранного макета.", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CarouselView", - "desc": [ - "【itemExtent】 : Фиксированный размер по главной оси 【double】", - "【shrinkExtent】: Минимальный размер элемента по главной оси при прокрутке 【double】", - "【scrollDirection】 : Направление прокрутки 【Axis?】", - "【children】: Список дочерних элементов 【List】" - ] - }, - { - "file": "node2.dart", - "name": "Настройка стиля CarouselView", - "desc": [ - "【padding】 : Внутренний отступ 【EdgeInsets? 】", - "【backgroundColor】 : Цвет фона 【Color? 】", - "【elevation】 : Глубина тени 【double?】", - "【shape】 : Форма 【ShapeBorder?】", - "【controller】 : Контроллер 【CarouselController?】", - "【reverse】 : Прокрутка в обратном направлении 【bool】", - "【onTap】 : Событие нажатия 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_zh-CN.json deleted file mode 100644 index f75e987c7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/desc_zh-CN.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 237, - "name": "CarouselView", - "localName": "轮播视图", - "info": "一个符合 Material Design 规范的轮播组件。显示一个可滚动的项目列表,每条目都可以根据选定的布局动态调整大小。", - "lever": 4, - "family": 1, - "linkIds": [ - 253, - 340, - 160 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CarouselView 基础用法", - "desc": [ - "【itemExtent】 : 主轴方向强制尺寸 【double】", - "【shrinkExtent】: 滑动中,主轴方向条目最小尺寸 【double】", - "【scrollDirection】 : 滑动轴向 【Axis?】", - "【children】: 子组件列表 【List】" - ] - }, - { - "file": "node2.dart", - "name": "CarouselView 样式配置", - "desc": [ - "【padding】 : 内边距 【EdgeInsets? 】", - "【backgroundColor】 : 背景色 【Color? 】", - "【elevation】 : 阴影深 【double?】", - "【shape】 : 形状 【ShapeBorder?】", - "【controller】 : 控制器 【CarouselController?】", - "【reverse】 : 是否反向滑动 【bool】", - "【onTap】 : 点击事件 【ValueChanged? 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/node1_base.dart deleted file mode 100644 index 158a34146..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/node1_base.dart +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - -class CarouselNode1 extends StatefulWidget { - const CarouselNode1({super.key}); - - @override - State createState() => _CarouselNode1State(); -} - -class _CarouselNode1State extends State { - @override - Widget build(BuildContext context) { - return ConstrainedBox( - constraints: const BoxConstraints(maxHeight: 160), - child: CarouselView( - itemExtent: 260, - shrinkExtent: 160, - children: List.generate(20, (int index) { - return UncontainedLayoutCard(index: index, label: 'Item $index'); - }), - ), - ); - } -} - -class UncontainedLayoutCard extends StatelessWidget { - const UncontainedLayoutCard({ - super.key, - required this.index, - required this.label, - }); - - final int index; - final String label; - - @override - Widget build(BuildContext context) { - return ColoredBox( - color: Colors.primaries[index % Colors.primaries.length].withOpacity(0.5), - child: Center( - child: Text( - label, - style: const TextStyle(color: Colors.white, fontSize: 20), - overflow: TextOverflow.clip, - softWrap: false, - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/node2.dart b/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/node2.dart deleted file mode 100644 index 6caabcbf8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CarouselView/node2.dart +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - -class CarouselNode2 extends StatefulWidget { - const CarouselNode2({super.key}); - - @override - State createState() => _CarouselNode2State(); -} - -class _WidgetMeta { - final String name; - final String desc; - - _WidgetMeta(this.name, this.desc); -} - -class _CarouselNode2State extends State { - final List<_WidgetMeta> widgets = [ - _WidgetMeta('Container 容器组件', '用于容纳单个子组件的容器组件。集成了若干个单子组件的功能,如内外边距、形变、装饰、约束等...'), - _WidgetMeta('Text 文字组件', '用于显示文字的组件。拥有的属性非常多,足够满足你的使用需求,核心样式由style属性控制。'), - _WidgetMeta('Card 卡片组件', '基于Material组件实现,用于将单个组件卡片化。并使其具有投影效果,可加外边距,也可以自定义卡片形状。'), - _WidgetMeta('FlutterLogo Flutter图标', '用于展示Flutter图标组件。可定义颜色、尺寸、展示模式等信息,是一个非常简单的组件。'), - _WidgetMeta('Banner 角标组件', '用于角标显示的组件。可容纳一个子组件,可选择方位添加角标及信息文字,可设置颜色。'), - _WidgetMeta('Icon 图标组件', '用于图标显示的组件。可指定图标资源、大小、颜色。非常简单,但非常实用。'), - _WidgetMeta('ImageIcon 图形图标', '用于将一个图片变为纯色的组件。可指定大小、颜色。'), - _WidgetMeta('FadeInImage 淡入图片', '透明渐变地加载一张图片。可指定占位图片、进退的动画曲线、时间、宽高、fit类型、对齐方式、重复方式等。'), - _WidgetMeta('CircleAvatar 圆形组件', '可将一张图片变成圆形,并且中间可以放置一个组件。可指定半径、前景色、背景色等。'), - _WidgetMeta('Visibility 显隐组件', '控制一个组件显示或隐藏,可设置隐藏后的占位组件。与其功能相似的由OffStage组件。'), - ]; - - @override - Widget build(BuildContext context) { - return ConstrainedBox( - constraints: const BoxConstraints(maxHeight: 64), - child: CarouselView( - backgroundColor: const Color(0xfff7f8fa), - itemExtent: 240, - // elevation: 1, - shrinkExtent: 240, - itemSnapping: true, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(6)), - children: widgets.map((e) => _WidgetDisplay(widget: e)).toList(), - ), - ); - } -} - -class _WidgetDisplay extends StatelessWidget { - const _WidgetDisplay({ - super.key, - required this.widget, - }); - - final _WidgetMeta widget; - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - children: [ - Container( - width: 16, - height: 16, - margin: EdgeInsets.only(right: 6), - alignment: Alignment.center, - decoration: - BoxDecoration(color: Colors.red, borderRadius: BorderRadius.circular(4)), - child: Text( - '热', - style: TextStyle(fontSize: 8, color: Colors.white, height: 1), - ), - ), - Text( - widget.name, - style: - const TextStyle(color: Colors.black, fontSize: 14, fontWeight: FontWeight.bold), - overflow: TextOverflow.clip, - softWrap: false, - ), - ], - ), - Text( - widget.desc, - style: const TextStyle(color: Colors.grey, fontSize: 12), - overflow: TextOverflow.clip, - softWrap: false, - ), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_de_DE.json deleted file mode 100644 index e2ca253cf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "Checkbox", - "info": "Checkbox-Komponente, häufig für Konfigurationswechsel verwendet, kann Farben angeben, empfängt Statusänderungsrückrufe und kann auch einen dreistufigen Zustand angeben.", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung der Checkbox", - "desc": [ - "【value】 : Ob ausgewählt 【double】", - "【checkColor】: Farbe des Häkchens ✔️, wenn ausgewählt 【Color】", - "【activeColor】: Farbe innerhalb des Rahmens, wenn ausgewählt 【Color】", - "【onChanged】: Ereignis bei Zustandsänderung 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "Dreistufige Checkbox", - "desc": [ - "【tristate】 : Ob dreistufig 【double】", - " bei onChanged," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_en_US.json deleted file mode 100644 index c2413a9cd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "Checkbox", - "info": "Checkbox component, commonly used for toggling configurations, can specify colors, receive state change callbacks, and can also specify tristate.", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Checkbox", - "desc": [ - "【value】 : Whether it is selected 【double】", - "【checkColor】: Color of ✔️ when selected 【Color】", - "【activeColor】: Color inside the box when selected 【Color】", - "【onChanged】: State change event 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "Tristate of Checkbox", - "desc": [ - "【tristate】 : Whether it is tristate 【double】", - " when onChanged," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_es_ES.json deleted file mode 100644 index 5b500e892..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "Casilla de verificación", - "info": "Componente de casilla de verificación, comúnmente utilizado para alternar configuraciones, puede especificar colores, recibir devoluciones de llamada de cambios de estado, y también puede especificar tres estados.", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Checkbox", - "desc": [ - "【value】 : Si está seleccionado 【double】", - "【checkColor】: Color de la marca ✔️ cuando está seleccionado 【Color】", - "【activeColor】: Color dentro del cuadro cuando está seleccionado 【Color】", - "【onChanged】: Evento de cambio de estado 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "Tres estados de Checkbox", - "desc": [ - "【tristate】 : Si tiene tres estados 【double】", - " en onChanged," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_fr_FR.json deleted file mode 100644 index 5f9960596..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "Case à cocher", - "info": "Composant de case à cocher, souvent utilisé pour basculer les configurations, peut spécifier la couleur, recevoir un rappel de changement d'état, et peut également spécifier un état ternaire.", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Checkbox", - "desc": [ - "【value】 : Est-ce sélectionné 【double】", - "【checkColor】: Couleur du ✔️gou lorsque sélectionné 【Color】", - "【activeColor】: Couleur à l'intérieur de la case lorsque sélectionné 【Color】", - "【onChanged】: Événement de changement d'état 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "État ternaire de Checkbox", - "desc": [ - "【tristate】 : Est-ce un état ternaire 【double】", - " lors de onChanged," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_it_IT.json deleted file mode 100644 index 26f3c698c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "Casella di controllo", - "info": "Componente casella di controllo, comunemente utilizzato per l'alternanza delle configurazioni, può specificare il colore, ricevere callback di cambio di stato e può anche specificare tre stati.", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base della casella di controllo", - "desc": [ - "【value】 : Se è selezionato 【double】", - "【checkColor】: Colore del segno di spunta quando selezionato 【Color】", - "【activeColor】: Colore all'interno del riquadro quando selezionato 【Color】", - "【onChanged】: Evento di cambio di stato 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "Tre stati della casella di controllo", - "desc": [ - "【tristate】 : Se è a tre stati 【double】", - " Quando onChanged," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ja_JP.json deleted file mode 100644 index 87d867397..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "チェックボックス", - "info": "チェックボックスコンポーネントは、設定の切り替えによく使用され、色を指定でき、状態変化のコールバックを受け取り、三状態も指定できます。", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "チェックボックスの基本使用法", - "desc": [ - "【value】 : 選択されているかどうか 【double】", - "【checkColor】: 選択時の✔️チェックマークの色 【Color】", - "【activeColor】: 選択時のボックス内の色 【Color】", - "【onChanged】: 状態変更イベント 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "チェックボックスの三状態", - "desc": [ - "【tristate】 : 三状態かどうか 【double】", - " onChanged時," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ko_KR.json deleted file mode 100644 index e6a3927b1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "체크박스", - "info": "체크박스 컴포넌트는 설정 전환에 자주 사용되며, 색상을 지정할 수 있고, 상태 변경 콜백을 받을 수 있으며, 삼중 상태를 지정할 수도 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Checkbox 기본 사용법", - "desc": [ - "【value】 : 선택 여부 【double】", - "【checkColor】: 선택 시 ✔️ 체크 색상 【Color】", - "【activeColor】: 선택 시 상자 내부 색상 【Color】", - "【onChanged】: 상태 변경 이벤트 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "Checkbox의 삼중 상태", - "desc": [ - "【tristate】 : 삼중 상태 여부 【double】", - " onChanged 시," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_pt_PT.json deleted file mode 100644 index 4a7be7554..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "Caixa de verificação", - "info": "Componente de caixa de verificação, frequentemente usado para alternar configurações, pode especificar cores, receber retorno de chamada de alteração de estado e também pode especificar três estados.", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Checkbox", - "desc": [ - "【value】 : se está selecionado 【double】", - "【checkColor】: cor do ✔️gou quando selecionado 【Color】", - "【activeColor】: cor dentro da caixa quando selecionado 【Color】", - "【onChanged】: evento de mudança de estado 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "Três estados do Checkbox", - "desc": [ - "【tristate】 : se é de três estados 【double】", - " onChanged," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ru_RU.json deleted file mode 100644 index f20275f56..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "Флажок", - "info": "Компонент флажка, часто используется для переключения настроек, может быть указан цвет, принимает обратный вызов изменения состояния, также может быть указан трехсостояний.", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Checkbox", - "desc": [ - "【value】 : Выбрано ли 【double】", - "【checkColor】: Цвет галочки при выборе 【Color】", - "【activeColor】: Цвет внутри рамки при выборе 【Color】", - "【onChanged】: Событие изменения состояния 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "Трехсостояний Checkbox", - "desc": [ - "【tristate】 : Является ли трехсостояний 【double】", - " onChanged," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_zh-CN.json deleted file mode 100644 index 7e0c96b8f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 39, - "name": "Checkbox", - "localName": "复选框", - "info": "复选框组件,常用于配置的切换,可指定颜色,接收状态变化回调,也可指定三态。", - "lever": 4, - "family": 1, - "linkIds": [326,17], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Checkbox基础用法", - "desc": [ - "【value】 : 是否选中 【double】", - "【checkColor】: 选中时✔️gou颜色 【Color】", - "【activeColor】: 选中时框内颜色 【Color】", - "【onChanged】: 状态改变事件 【Function(bool)】," - ] - }, - { - "file": "node2_tristate.dart", - "name": "Checkbox的三态", - "desc": [ - "【tristate】 : 是否是三态 【double】", - " onChanged时," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/node1_base.dart deleted file mode 100644 index 70988aea8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/node1_base.dart +++ /dev/null @@ -1,39 +0,0 @@ - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - - -class CustomCheckbox extends StatefulWidget { - const CustomCheckbox({Key? key}) : super(key: key); - - @override - _CustomCheckboxState createState() => _CustomCheckboxState(); -} - -class _CustomCheckboxState extends State { - bool _checked = false; - final List colors = [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: colors - .map((e) => Checkbox( - value: _checked, - checkColor: Colors.white, - activeColor: e, - onChanged: (bool? value) => - setState(() => _checked = value??false))) - .toList(), - ); - } -} - - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/node2_tristate.dart b/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/node2_tristate.dart deleted file mode 100644 index e0d55bd0c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Checkbox/node2_tristate.dart +++ /dev/null @@ -1,35 +0,0 @@ - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class TristateCheckBok extends StatefulWidget { - const TristateCheckBok({Key? key}) : super(key: key); - - @override - _TristateCheckBokState createState() => _TristateCheckBokState(); -} - -class _TristateCheckBokState extends State { - bool _checked = false; - final colors = [Colors.red, Colors.yellow, Colors.blue, Colors.green]; - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: colors - .map((e) => - Checkbox( - value: _checked, - tristate: true, - checkColor: Colors.white, - activeColor: e, - onChanged: (bool? value) { - print(value); - setState(() => _checked = value??false); - })) - .toList(), - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_de_DE.json deleted file mode 100644 index 1e2eaed9f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "Rundes Fortschrittsanzeige", - "info": "Runde Fortschrittsanzeige, bei der Eigenschaften wie Farbe, Linienstärke, Fortschritt usw. angegeben werden können. Wenn der Wert null ist, dreht sie sich ununterbrochen.", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CircularProgressIndicator", - "desc": [ - "【value】 : Fortschritt 【double】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【valueColor】 : Fortschrittsfarbe 【Animation】", - "【strokeWidth】 : Linienstärke 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_en_US.json deleted file mode 100644 index 69d3e60ce..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "Circular Progress", - "info": "A circular progress display that can specify properties such as color, line width, and progress. It will keep rotating when value is null.", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CircularProgressIndicator", - "desc": [ - "【value】 : Progress 【double】", - "【backgroundColor】 : Background Color 【Color】", - "【valueColor】 : Progress Color 【Animation】", - "【strokeWidth】 : Line Width 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_es_ES.json deleted file mode 100644 index 028316bd8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "Indicador de progreso circular", - "info": "Muestra de progreso circular, se pueden especificar propiedades como color, ancho de línea, progreso, etc. Si el valor es nulo, girará continuamente.", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CircularProgressIndicator", - "desc": [ - "【value】 : progreso 【double】", - "【backgroundColor】 : color de fondo 【Color】", - "【valueColor】 : color de progreso 【Animation】", - "【strokeWidth】 : ancho de línea 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_fr_FR.json deleted file mode 100644 index e2b75ebdb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "Progrès circulaire", - "info": "Affichage de progression circulaire, permettant de spécifier des propriétés telles que la couleur, l'épaisseur de la ligne, la progression, etc. Lorsque la valeur est null, il tourne en continu.", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CircularProgressIndicator", - "desc": [ - "【value】 : Progression 【double】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【valueColor】 : Couleur de progression 【Animation】", - "【strokeWidth】 : Épaisseur de la ligne 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_it_IT.json deleted file mode 100644 index 521191029..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "Indicatore di progresso circolare", - "info": "Visualizzazione del progresso circolare, con possibilità di specificare colore, larghezza della linea, progresso, ecc. Ruota continuamente quando il valore è null.", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CircularProgressIndicator", - "desc": [ - "【value】 : Progresso 【double】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【valueColor】 : Colore del progresso 【Animation】", - "【strokeWidth】 : Larghezza della linea 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ja_JP.json deleted file mode 100644 index 5da057873..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "円形の進捗", - "info": "円形の進捗表示、色、線幅、進捗などの属性を指定できます。valueがnullの場合、回転し続けます。", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CircularProgressIndicatorの基本使用", - "desc": [ - "【value】 : 進捗 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【valueColor】 : 進捗色 【Animation】", - "【strokeWidth】 : 線幅 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ko_KR.json deleted file mode 100644 index 130e986bf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "원형 진행률", - "info": "원형 진행률 표시, 색상, 선 두께, 진행률 등 속성을 지정할 수 있습니다. value가 null일 경우 계속 회전합니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CircularProgressIndicator 기본 사용", - "desc": [ - "【value】 : 진행률 【double】", - "【backgroundColor】 : 배경색 【Color】", - "【valueColor】 : 진행률 색상 【Animation】", - "【strokeWidth】 : 선 두께 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_pt_PT.json deleted file mode 100644 index 9f3c2822d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "Indicador de Progresso Circular", - "info": "Exibição de progresso circular, pode especificar atributos como cor, largura da linha, progresso, etc. Quando o valor é nulo, ele gira continuamente.", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CircularProgressIndicator", - "desc": [ - "【value】 : Progresso 【double】", - "【backgroundColor】 : Cor de Fundo 【Color】", - "【valueColor】 : Cor do Progresso 【Animation】", - "【strokeWidth】 : Largura da Linha 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ru_RU.json deleted file mode 100644 index 2ce4fce90..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "Круговой индикатор прогресса", - "info": "Круговой индикатор прогресса, можно указать цвет, ширину линии, прогресс и другие свойства. Если значение value равно null, индикатор будет вращаться бесконечно.", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CircularProgressIndicator", - "desc": [ - "【value】 : Прогресс 【double】", - "【backgroundColor】 : Цвет фона 【Color】", - "【valueColor】 : Цвет прогресса 【Animation】", - "【strokeWidth】 : Ширина линии 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_zh-CN.json deleted file mode 100644 index eb7776e50..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 46, - "name": "CircularProgressIndicator", - "localName": "圆形进度", - "info": "圆形的进度显示,可指定颜色、线宽、进度等属性。value为null时会不停旋转。", - "lever": 3, - "family": 1, - "linkIds": [ - 47, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CircularProgressIndicator基本使用", - "desc": [ - "【value】 : 进度 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【valueColor】 : 进度颜色 【Animation】", - "【strokeWidth】 : 线宽 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/node1_base.dart deleted file mode 100644 index 9a462969f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CircularProgressIndicator/node1_base.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomCircularProgressIndicator extends StatefulWidget { - const CustomCircularProgressIndicator({Key? key}) : super(key: key); - - @override - _CustomCircularProgressIndicatorState createState() => - _CustomCircularProgressIndicatorState(); -} - -class _CustomCircularProgressIndicatorState - extends State { - - List data = [0.2,0.4,0.6,0.8,null]; - - @override - Widget build(BuildContext context) { - - return Wrap( - spacing: 10, - children:data.map((e)=>SizedBox( - width: 50, - height: 50, - child: CircularProgressIndicator( - value: e, - backgroundColor: Colors.grey.withAlpha(33), - valueColor: const AlwaysStoppedAnimation(Colors.orange), - strokeWidth: 5, - ), - )).toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_de_DE.json deleted file mode 100644 index 6830a1709..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "iOS-Indikator", - "info": "iOS-stilisiertes Ladeanzeige-Widget, kann Radius und Drehung angeben.", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoActivityIndicator", - "desc": [ - "【animating】 : Ob Ladeanimation aktiviert ist 【bool】", - "【radius】 : Radius 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_en_US.json deleted file mode 100644 index f126511f7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "iOS Indicator", - "info": "iOS style loading display component, can specify radius and whether to rotate.", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoActivityIndicator", - "desc": [ - "【animating】 : Whether the loading animation is active 【bool】", - "【radius】 : Radius 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_es_ES.json deleted file mode 100644 index 4ddefe723..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "Indicador de iOS", - "info": "Componente de visualización de carga con estilo iOS, que permite especificar el radio y si gira.", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoActivityIndicator", - "desc": [ - "【animating】 : Si la animación está cargando 【bool】", - "【radius】 : Radio 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_fr_FR.json deleted file mode 100644 index 4528f85e9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "Indicateur iOS", - "info": "Composant d'affichage de chargement de style iOS, peut spécifier le rayon et s'il tourne.", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoActivityIndicator", - "desc": [ - "【animating】 : Si l'animation de chargement est active 【bool】", - "【radius】 : Rayon 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_it_IT.json deleted file mode 100644 index 510c2e874..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "Indicatore iOS", - "info": "Componente di caricamento in stile iOS, può specificare il raggio e se ruotare.", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoActivityIndicator", - "desc": [ - "【animating】 : Se l'animazione di caricamento è attiva 【bool】", - "【radius】 : Raggio 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ja_JP.json deleted file mode 100644 index 762661b55..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "iOSインジケーター", - "info": "iOSスタイルのローディング表示コンポーネントで、半径と回転の有無を指定できます。", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActivityIndicatorの基本的な使用", - "desc": [ - "【animating】 : ローディングアニメーションの有無 【bool】", - "【radius】 : 半径 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ko_KR.json deleted file mode 100644 index 2dadbffef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "iOS 인디케이터", - "info": "iOS 스타일의 로딩 표시 컴포넌트, 반지름 및 회전 여부를 지정할 수 있습니다.", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActivityIndicator 기본 사용", - "desc": [ - "【animating】 : 로딩 애니메이션 여부 【bool】", - "【radius】 : 반지름 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_pt_PT.json deleted file mode 100644 index 38480d9fa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "Indicador iOS", - "info": "Componente de exibição de carregamento no estilo iOS, pode especificar o raio e se deve girar.", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoActivityIndicator", - "desc": [ - "【animating】 : Se a animação de carregamento está ativa 【bool】", - "【radius】 : Raio 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ru_RU.json deleted file mode 100644 index 5105df86f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "Индикатор iOS", - "info": "Компонент отображения загрузки в стиле iOS, можно указать радиус и вращение.", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoActivityIndicator", - "desc": [ - "【animating】 : Анимация загрузки 【bool】", - "【radius】 : Радиус 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_zh-CN.json deleted file mode 100644 index afbc40be5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 48, - "name": "CupertinoActivityIndicator", - "localName": "iOS指示器", - "info": "iOS样式的loading显示组件,可指定半径和是否旋转。", - "lever": 2, - "family": 1, - "linkIds": [ - 46, - 47 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActivityIndicator基本使用", - "desc": [ - "【animating】 : 是否loading动画 【bool】", - "【radius】 : 半径 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/node1_base.dart deleted file mode 100644 index 29ccfb864..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoActivityIndicator/node1_base.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/cupertino.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoActivityIndicator extends StatelessWidget { - const CustomCupertinoActivityIndicator({Key? key}) : super(key: key); - - - @override - Widget build(BuildContext context) { - - return Wrap( - spacing: 20, - children: const [ - CupertinoActivityIndicator( - animating: true, - radius: 25, - ), - CupertinoActivityIndicator( - animating: false, - radius: 25, - ) - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_de_DE.json deleted file mode 100644 index f342ac7bf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "iOS-App", - "info": "Top-Level-Komponente für iOS-stil-Apps, enthält Eigenschaften wie Routen-Generator, Thema, Sprache, Startseite usw.", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoApp", - "desc": [ - "【theme】 : Thema 【ThemeData】", - "【title】 : Taskleisten-Titel 【String】", - "【onGenerateRoute】 : Routen-Generator 【RouteFactory】", - "【home】 : Startseite 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_en_US.json deleted file mode 100644 index a3a5f4232..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "iOS App", - "info": "Top-level component for iOS-style apps, including route generator, theme, language, home page, and other attributes.", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoApp", - "desc": [ - "【theme】 : Theme 【ThemeData】", - "【title】 : Taskbar Title 【String】", - "【onGenerateRoute】 : Route Generator 【RouteFactory】", - "【home】 : Home Page 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_es_ES.json deleted file mode 100644 index 761bbe64a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "Aplicación iOS", - "info": "Componente de nivel superior para aplicaciones con estilo iOS, que incluye generador de rutas, tema, idioma, página de inicio, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoApp", - "desc": [ - "【theme】 : Tema 【ThemeData】", - "【title】 : Título de la barra de tareas 【String】", - "【onGenerateRoute】 : Generador de rutas 【RouteFactory】", - "【home】 : Página de inicio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_fr_FR.json deleted file mode 100644 index 85ce4672d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "Application iOS", - "info": "Composant de haut niveau pour les applications de style iOS, incluant un générateur de routes, un thème, une langue, une page d'accueil, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoApp", - "desc": [ - "【theme】 : Thème 【ThemeData】", - "【title】 : Titre de la barre des tâches 【String】", - "【onGenerateRoute】 : Générateur de routes 【RouteFactory】", - "【home】 : Page d'accueil 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_it_IT.json deleted file mode 100644 index 76516eeb4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "App iOS", - "info": "Componente di alto livello per applicazioni in stile iOS, include generatore di rotte, tema, lingua, home page e altre proprietà.", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di CupertinoApp", - "desc": [ - "【theme】 : Tema 【ThemeData】", - "【title】 : Titolo della barra delle applicazioni 【String】", - "【onGenerateRoute】 : Generatore di rotte 【RouteFactory】", - "【home】 : Home page 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ja_JP.json deleted file mode 100644 index 38fec145c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "iOSアプリ", - "info": "iOSスタイルのアプリのトップレベルコンポーネントで、ルートジェネレーター、テーマ、言語、ホームなどの属性を含みます。", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoAppの基本使用法", - "desc": [ - "【theme】 : テーマ 【ThemeData】", - "【title】 : タスクバータイトル 【String】", - "【onGenerateRoute】 : ルートジェネレーター 【RouteFactory】", - "【home】 : ホーム 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ko_KR.json deleted file mode 100644 index aaa445e69..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "iOS 앱", - "info": "iOS 스타일 앱의 최상위 컴포넌트로, 라우트 생성기, 테마, 언어, 홈페이지 등의 속성을 포함합니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoApp 기본 사용법", - "desc": [ - "【theme】 : 테마 【ThemeData】", - "【title】 : 작업 표시줄 제목 【String】", - "【onGenerateRoute】 : 라우트 생성기 【RouteFactory】", - "【home】 : 홈페이지 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_pt_PT.json deleted file mode 100644 index 145e285f1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "Aplicação iOS", - "info": "Componente de topo para aplicações de estilo iOS, incluindo gerador de rotas, tema, idioma, página inicial, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoApp", - "desc": [ - "【theme】 : Tema 【ThemeData】", - "【title】 : Título da barra de tarefas 【String】", - "【onGenerateRoute】 : Gerador de rotas 【RouteFactory】", - "【home】 : Página inicial 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ru_RU.json deleted file mode 100644 index 96c62ada9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "iOS приложение", - "info": "Верхнеуровневый компонент для приложений в стиле iOS, включающий генератор маршрутов, темы, язык, домашнюю страницу и другие атрибуты.", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoApp", - "desc": [ - "【theme】 : Тема 【ThemeData】", - "【title】 : Заголовок в панели задач 【String】", - "【onGenerateRoute】 : Генератор маршрутов 【RouteFactory】", - "【home】 : Домашняя страница 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_zh-CN.json deleted file mode 100644 index 7cff756f5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 156, - "name": "CupertinoApp", - "localName": "iOS应用", - "info": "iOS风格应用的顶级组件,包含路由生成器、主题、语言、主页等属性。", - "lever": 4, - "family": 1, - "linkIds": [ - 157, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoApp基本用法", - "desc": [ - "【theme】 : 主题 【ThemeData】", - "【title】 : 任务栏标题 【String】", - "【onGenerateRoute】 : 路由生成器 【RouteFactory】", - "【home】 : 主页 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/node1_base.dart deleted file mode 100644 index cf3ffb9c2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoApp/node1_base.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -/// create by 张风捷特烈 on 2020-03-17 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoApp extends StatelessWidget { - const CustomCupertinoApp({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height - 200, - child: const CupertinoApp( - title: 'Flutter Demo', - theme: CupertinoThemeData( - primaryColor: CupertinoColors.white, - ), - home: CupertinoPageScaffold( - navigationBar: CupertinoNavigationBar( - leading: Icon( - CupertinoIcons.reply, - color: CupertinoColors.black, - ), - trailing: Icon( - CupertinoIcons.share, - color: CupertinoColors.black, - ), - middle: Text('Flutter Unit'), - ), - backgroundColor: CupertinoColors.systemBackground, - child: Center( - child: Text('Hello, World!'), - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_de_DE.json deleted file mode 100644 index b5c3e3e72..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "iOS-Schaltfläche", - "info": "iOS-stilige Schaltfläche. Kann Farbe, Transparenz beim Klicken, Innenabstand, abgerundete Ecken usw. festlegen. Kann Klickereignisse empfangen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoButton Klickereignis", - "desc": [ - "【color】: Farbe 【Color】", - "【pressedOpacity】: Transparenz beim Drücken 【double】", - "【child】: Kind-Widget 【Widget】", - "【padding】: Innenabstand 【EdgeInsetsGeometry】", - "【borderRadius】: Radius der abgerundeten Ecken 【BorderRadius】", - "【onPressed】: Klickereignis 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_en_US.json deleted file mode 100644 index 7641c4712..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "iOS Button", - "info": "A button with iOS style. You can specify color, opacity when pressed, padding, border radius, etc. It can receive click events.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoButton Click Event", - "desc": [ - "【color】: Color 【Color】", - "【pressedOpacity】: Opacity when pressed 【double】", - "【child】: Child widget 【Widget】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【borderRadius】: Border radius 【BorderRadius】", - "【onPressed】: Click event 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_es_ES.json deleted file mode 100644 index 1299f825b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "Botón de iOS", - "info": "Botón con estilo iOS. Se puede especificar el color, la opacidad al hacer clic, el relleno interno, el radio de las esquinas, etc. Puede recibir eventos de clic.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clic de CupertinoButton", - "desc": [ - "【color】: Color 【Color】", - "【pressedOpacity】: Opacidad al presionar 【double】", - "【child】: Componente hijo 【Widget】", - "【padding】: Relleno interno 【EdgeInsetsGeometry】", - "【borderRadius】: Radio de las esquinas 【BorderRadius】", - "【onPressed】: Evento de clic 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_fr_FR.json deleted file mode 100644 index 27faffb5e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "Bouton iOS", - "info": "Bouton de style iOS. Peut spécifier la couleur, l'opacité lors du clic, le remplissage interne, les coins arrondis, etc. Peut recevoir des événements de clic.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événement de clic CupertinoButton", - "desc": [ - "【color】: Couleur 【Color】", - "【pressedOpacity】: Opacité lors de la pression 【double】", - "【child】: Composant enfant 【Widget】", - "【padding】: Remplissage interne 【EdgeInsetsGeometry】", - "【borderRadius】: Rayon des coins arrondis 【BorderRadius】", - "【onPressed】: Événement de clic 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_it_IT.json deleted file mode 100644 index dc95032a8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "Pulsante iOS", - "info": "Pulsante in stile iOS. Puoi specificare colore, opacità al click, padding, bordi arrotondati, ecc. Può ricevere eventi di click.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento di click di CupertinoButton", - "desc": [ - "【color】: Colore 【Color】", - "【pressedOpacity】: Opacità quando premuto 【double】", - "【child】: Componente figlio 【Widget】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【borderRadius】: Raggio del bordo arrotondato 【BorderRadius】", - "【onPressed】: Evento di click 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ja_JP.json deleted file mode 100644 index 567eccc1d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "iOSボタン", - "info": "iOSスタイルのボタン。色、クリック時の透明度、パディング、角丸などを指定できます。クリックイベントを受け取ることができます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoButtonクリックイベント", - "desc": [ - "【color】: 色 【Color】", - "【pressedOpacity】: 押下時の透明度 【double】", - "【child】: 子コンポーネント 【Widget】", - "【padding】: パディング 【EdgeInsetsGeometry】", - "【borderRadius】: 角丸半径 【BorderRadius】", - "【onPressed】: クリックイベント 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ko_KR.json deleted file mode 100644 index 7d48b7601..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "iOS 버튼", - "info": "iOS 스타일의 버튼. 색상, 클릭 시 투명도, 내부 여백, 모서리 반경 등을 지정할 수 있습니다. 클릭 이벤트를 수신할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoButton 클릭 이벤트", - "desc": [ - "【color】: 색상 【Color】", - "【pressedOpacity】: 눌렀을 때 투명도 【double】", - "【child】: 자식 위젯 【Widget】", - "【padding】: 내부 여백 【EdgeInsetsGeometry】", - "【borderRadius】: 모서리 반경 【BorderRadius】", - "【onPressed】: 클릭 이벤트 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_pt_PT.json deleted file mode 100644 index 636a87011..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "Botão iOS", - "info": "Botão de estilo iOS. Pode especificar cor, opacidade ao clicar, preenchimento interno, bordas arredondadas, etc. Pode receber eventos de clique.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clique do CupertinoButton", - "desc": [ - "【color】: Cor 【Color】", - "【pressedOpacity】: Opacidade ao pressionar 【double】", - "【child】: Componente filho 【Widget】", - "【padding】: Preenchimento interno 【EdgeInsetsGeometry】", - "【borderRadius】: Raio da borda arredondada 【BorderRadius】", - "【onPressed】: Evento de clique 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ru_RU.json deleted file mode 100644 index 80bdb35f5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "Кнопка iOS", - "info": "Кнопка в стиле iOS. Можно указать цвет, прозрачность при нажатии, внутренние отступы, радиус скругления и т.д. Может принимать события нажатия.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Событие нажатия CupertinoButton", - "desc": [ - "【color】: Цвет 【Color】", - "【pressedOpacity】: Прозрачность при нажатии 【double】", - "【child】: Дочерний виджет 【Widget】", - "【padding】: Внутренние отступы 【EdgeInsetsGeometry】", - "【borderRadius】: Радиус скругления 【BorderRadius】", - "【onPressed】: Событие нажатия 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_zh-CN.json deleted file mode 100644 index 97b0cf664..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 24, - "name": "CupertinoButton", - "localName": "iOS按钮", - "info": "iOS风格的按钮。可指定颜色、点击时透明度、内边距、圆角等。可接收点击事件。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoButton点击事件", - "desc": [ - "【color】: 颜色 【Color】", - "【pressedOpacity】: 按下时透明度 【double】", - "【child】: 子组件 【Widget】", - "【padding】: 内边距 【EdgeInsetsGeometry】", - "【borderRadius】: 圆角半径 【BorderRadius】", - "【onPressed】: 点击事件 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/node1_base.dart deleted file mode 100644 index 7ddf6689f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoButton/node1_base.dart +++ /dev/null @@ -1,32 +0,0 @@ -/// create by 张风捷特烈 on 2020-03-24 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class CustomCupertinoButton extends StatelessWidget { - const CustomCupertinoButton({super.key}); - - Map get data => { - CupertinoColors.activeBlue:4.0, - Colors.blue:6.0, - CupertinoColors.activeOrange:8.0, - }; - - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children:data.keys.map((e)=> CupertinoButton( - padding: EdgeInsets.zero, - onPressed: () => Navigator.of(context).pushNamed('AboutMePage'), - color: e, - pressedOpacity: 0.4, - borderRadius: BorderRadius.all(Radius.circular(data[e]!)), - child: const Text("iOS"), - )).toList() - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_de_DE.json deleted file mode 100644 index f9da14bea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_de_DE.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "Checkbox·macOS-Stil", - "info": "Ein macOS-stilisiertes Checkbox, das drei Zustände unterstützt; bei der Verwendung müssen der Wert und die onChanged-Rückruffunktion bereitgestellt werden.", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoCheckbox Verwendung", - "desc": [ - "【value】 : Ob ausgewählt 【bool?】", - "【onChanged】 : Änderungsrückruf 【ValueChanged?】", - "【checkColor】 : Farbe des Häkchens bei Auswahl 【Color?】", - "【activeColor】 : Hintergrundfarbe bei Auswahl 【Color?】", - "【activeColor】 : Hintergrundfarbe bei Auswahl 【Color?】", - "【inactiveColor】 : Randfarbe/Hintergrundfarbe bei Inaktivität 【Color?】", - "Wenn onChanged null ist, bedeutet dies, dass es nicht verfügbar ist." - ] - }, - { - "file": "node2.dart", - "name": "CupertinoCheckbox Drei Zustände", - "desc": [ - "【tristate】 : Ob der Dreizustand aktiviert ist 【bool】", - "Im Dreizustand ist der Wert null als -" - ] - }, - { - "file": "node3.dart", - "name": "CupertinoCheckbox Randlinie und Form", - "desc": [ - "【shape】 : Form 【OutlinedBorder?】", - "【side】 : Randlinie 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_en_US.json deleted file mode 100644 index 945515951..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_en_US.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "Checkbox·macOS Style", - "info": "A macOS-style checkbox that supports three states; requires providing a value and an onChanged callback function when used.", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoCheckbox Usage", - "desc": [ - "【value】: Whether it is selected 【bool?】", - "【onChanged】: Change callback 【ValueChanged?】", - "【checkColor】: Checkmark color when selected 【Color?】", - "【activeColor】: Background color when selected 【Color?】", - "【activeColor】: Background color when selected 【Color?】", - "【inactiveColor】: Border color when inactive/background color when disabled 【Color?】", - "When onChanged is null, it means it is disabled." - ] - }, - { - "file": "node2.dart", - "name": "CupertinoCheckbox Three States", - "desc": [ - "【tristate】: Whether to enable three states 【bool】", - "In three states, the value is null for -" - ] - }, - { - "file": "node3.dart", - "name": "CupertinoCheckbox Border and Shape", - "desc": [ - "【shape】: Shape 【OutlinedBorder?】", - "【side】: Border 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_es_ES.json deleted file mode 100644 index 453a09955..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_es_ES.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "Casilla de verificación·Estilo macOS", - "info": "Una casilla de verificación con estilo macOS, compatible con tres estados; se debe proporcionar un valor value y una función de devolución de llamada onChanged al usarla.", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso de CupertinoCheckbox", - "desc": [ - "【value】 : Si está seleccionado 【bool?】", - "【onChanged】 : Función de devolución de llamada para cambios 【ValueChanged?】", - "【checkColor】 : Color de la marca de verificación cuando está seleccionado 【Color?】", - "【activeColor】 : Color de fondo cuando está seleccionado 【Color?】", - "【activeColor】 : Color de fondo cuando está seleccionado 【Color?】", - "【inactiveColor】 : Color de borde cuando no está activo/Color de fondo cuando no está disponible 【Color?】", - "Cuando onChanged es null, significa que no está disponible." - ] - }, - { - "file": "node2.dart", - "name": "Tres estados de CupertinoCheckbox", - "desc": [ - "【tristate】 : Si está habilitado el estado tristate 【bool】", - "En el estado tristate, el valor null representa -" - ] - }, - { - "file": "node3.dart", - "name": "Borde y forma de CupertinoCheckbox", - "desc": [ - "【shape】 : Forma 【OutlinedBorder?】", - "【side】 : Borde 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_fr_FR.json deleted file mode 100644 index a94227ac8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_fr_FR.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "Case à cocher·Style macOS", - "info": "Une case à cocher de style macOS, prenant en charge trois états ; nécessite de fournir une valeur value et une fonction de rappel onChanged lors de l'utilisation.", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de CupertinoCheckbox", - "desc": [ - "【value】 : Est-ce sélectionné 【bool?】", - "【onChanged】 : Rappel de changement 【ValueChanged?】", - "【checkColor】 : Couleur de la coche √ lorsqu'elle est sélectionnée 【Color?】", - "【activeColor】 : Couleur de fond lorsqu'elle est sélectionnée 【Color?】", - "【activeColor】 : Couleur de fond lorsqu'elle est sélectionnée 【Color?】", - "【inactiveColor】 : Couleur de bordure/arrière-plan non activé 【Color?】", - "Lorsque onChanged est null, cela signifie qu'il est désactivé." - ] - }, - { - "file": "node2.dart", - "name": "Trois états de CupertinoCheckbox", - "desc": [ - "【tristate】 : Activer trois états 【bool】", - "En mode tristate, la valeur null représente -" - ] - }, - { - "file": "node3.dart", - "name": "Bordure et forme de CupertinoCheckbox", - "desc": [ - "【shape】 : Forme 【OutlinedBorder?】", - "【side】 : Bordure 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_it_IT.json deleted file mode 100644 index 9999264ec..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_it_IT.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "Casella di controllo·Stile macOS", - "info": "Una casella di controllo in stile macOS, supporta tre stati; richiede un valore value e una funzione di callback onChanged.", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso di CupertinoCheckbox", - "desc": [ - "【value】 : Se selezionato 【bool?】", - "【onChanged】 : Callback di modifica 【ValueChanged?】", - "【checkColor】 : Colore del segno di spunta quando selezionato 【Color?】", - "【activeColor】 : Colore di sfondo quando selezionato 【Color?】", - "【activeColor】 : Colore di sfondo quando selezionato 【Color?】", - "【inactiveColor】 : Colore del bordo/colore di sfondo non attivo 【Color?】", - "Quando onChanged è null, indica che non è utilizzabile." - ] - }, - { - "file": "node2.dart", - "name": "CupertinoCheckbox a tre stati", - "desc": [ - "【tristate】 : Se abilitare i tre stati 【bool】", - "In modalità tristate, il valore null rappresenta -" - ] - }, - { - "file": "node3.dart", - "name": "Bordo e forma di CupertinoCheckbox", - "desc": [ - "【shape】 : Forma 【OutlinedBorder?】", - "【side】 : Bordo 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ja_JP.json deleted file mode 100644 index 3f66dfdfa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ja_JP.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "チェックボックス・macOSスタイル", - "info": "macOSスタイルのチェックボックスで、三態をサポートしています。使用時にはvalue値とonChangedコールバック関数を提供する必要があります。", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoCheckbox 使用", - "desc": [ - "【value】 : 選択されているかどうか 【bool?】", - "【onChanged】 : 変更コールバック 【ValueChanged?】", - "【checkColor】 : 選択時の√色 【Color?】", - "【activeColor】 : 選択時の背景色 【Color?】", - "【activeColor】 : 選択時の背景色 【Color?】", - "【inactiveColor】 : 非アクティブ時の枠線色/無効な背景色 【Color?】", - "onChangedがnullの場合、無効であることを示します。" - ] - }, - { - "file": "node2.dart", - "name": "CupertinoCheckbox 三態", - "desc": [ - "【tristate】 : 三態を有効にするかどうか 【bool】", - "三態の場合、値がnullの場合は - です" - ] - }, - { - "file": "node3.dart", - "name": "CupertinoCheckbox 枠線と形状", - "desc": [ - "【shape】 : 形状 【OutlinedBorder?】", - "【side】 : 枠線 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ko_KR.json deleted file mode 100644 index 8d70a6a70..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ko_KR.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "체크박스·macOS 스타일", - "info": "macOS 스타일의 체크박스로, 3가지 상태를 지원합니다. 사용 시 value 값과 onChanged 콜백 함수를 제공해야 합니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoCheckbox 사용", - "desc": [ - "【value】 : 선택 여부 【bool?】", - "【onChanged】 : 변경 콜백 【ValueChanged?】", - "【checkColor】 : 선택 시 √ 색상 【Color?】", - "【activeColor】 : 선택 배경 색상 【Color?】", - "【activeColor】 : 선택 배경 색상 【Color?】", - "【inactiveColor】 : 비활성 시 테두리 색상/사용 불가 배경 색상 【Color?】", - "onChanged이 null일 경우, 사용 불가를 나타냅니다." - ] - }, - { - "file": "node2.dart", - "name": "CupertinoCheckbox 3가지 상태", - "desc": [ - "【tristate】 : 3가지 상태 활성화 여부 【bool】", - "3가지 상태일 때, 값이 null이면 -로 표시됩니다." - ] - }, - { - "file": "node3.dart", - "name": "CupertinoCheckbox 테두리와 모양", - "desc": [ - "【shape】 : 모양 【OutlinedBorder?】", - "【side】 : 테두리 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_pt_PT.json deleted file mode 100644 index 28c444674..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_pt_PT.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "Caixa de verificação - Estilo macOS", - "info": "Uma caixa de verificação no estilo macOS, suporta três estados; ao usar, é necessário fornecer o valor 'value' e a função de retorno 'onChanged'.", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso do CupertinoCheckbox", - "desc": [ - "【value】 : Se está selecionado 【bool?】", - "【onChanged】 : Retorno de chamada de mudança 【ValueChanged?】", - "【checkColor】 : Cor do √ quando selecionado 【Color?】", - "【activeColor】 : Cor de fundo quando selecionado 【Color?】", - "【activeColor】 : Cor de fundo quando selecionado 【Color?】", - "【inactiveColor】 : Cor da borda/Cor de fundo inativa 【Color?】", - "Quando onChanged é null, indica que está inativo." - ] - }, - { - "file": "node2.dart", - "name": "CupertinoCheckbox Três Estados", - "desc": [ - "【tristate】 : Se ativa três estados 【bool】", - "Em três estados, o valor null representa -" - ] - }, - { - "file": "node3.dart", - "name": "Borda e Forma do CupertinoCheckbox", - "desc": [ - "【shape】 : Forma 【OutlinedBorder?】", - "【side】 : Borda 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ru_RU.json deleted file mode 100644 index f8374ba4a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_ru_RU.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "Флажок·стиль macOS", - "info": "Флажок в стиле macOS, поддерживающий три состояния; при использовании необходимо предоставить значение value и функцию обратного вызова onChanged.", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Использование CupertinoCheckbox", - "desc": [ - "【value】 : Выбрано ли 【bool?】", - "【onChanged】 : Обратный вызов при изменении 【ValueChanged?】", - "【checkColor】 : Цвет галочки при выборе 【Color?】", - "【activeColor】 : Цвет фона при выборе 【Color?】", - "【activeColor】 : Цвет фона при выборе 【Color?】", - "【inactiveColor】 : Цвет границы/фона при неактивности 【Color?】", - "Когда onChanged равен null, это означает, что элемент недоступен." - ] - }, - { - "file": "node2.dart", - "name": "Три состояния CupertinoCheckbox", - "desc": [ - "【tristate】 : Включены ли три состояния 【bool】", - "В режиме три состояния значение null означает -" - ] - }, - { - "file": "node3.dart", - "name": "Границы и форма CupertinoCheckbox", - "desc": [ - "【shape】 : Форма 【OutlinedBorder?】", - "【side】 : Граница 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_zh-CN.json deleted file mode 100644 index 205ecbe6c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/desc_zh-CN.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 238, - "name": "CupertinoCheckbox", - "localName": "复选框·macOS风格", - "info": "一个 macOS 风格的复选框,支持三态;使用时需要提供 value 值和 onChanged 回调函数。", - "lever": 4, - "family": 1, - "linkIds": [ - 39, - 17 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoCheckbox 使用", - "desc": [ - "【value】 : 是否选中 【bool?】", - "【onChanged】 : 变化回调 【ValueChanged?】", - "【checkColor】 : 选中时√颜色 【Color?】", - "【activeColor】 : 选中背景颜色 【Color?】", - "【activeColor】 : 选中背景颜色 【Color?】", - "【inactiveColor】 : 非激活是边线色/不可用背景色 【Color?】", - "onChanged 为 null 时,表示不可用。" - ] - }, - { - "file": "node2.dart", - "name": "CupertinoCheckbox 三态", - "desc": [ - "【tristate】 : 是否启用三态 【bool】", - "三态时,值为 null 为 - " - ] - }, - { - "file": "node3.dart", - "name": "CupertinoCheckbox 边线与形状", - "desc": [ - "【shape】 : 形状 【OutlinedBorder?】", - "【side】 : 边线 【BorderSide?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node1.dart deleted file mode 100644 index fedab6fd7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node1.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class CupertinoCheckboxDemo1 extends StatefulWidget { - const CupertinoCheckboxDemo1({super.key}); - - @override - State createState() => _CupertinoCheckboxDemo1State(); -} - -class _CupertinoCheckboxDemo1State extends State { - bool? _active = false; - - @override - Widget build(BuildContext context) { - return Wrap( - children: [ - CupertinoCheckbox( - value: _active, - onChanged: (bool? value) { - setState(() { - _active = value; - }); - }, - ), - - CupertinoCheckbox( - value: _active, - checkColor: Colors.yellow, - activeColor: Colors.purple, - onChanged: (bool? value) { - setState(() { - _active = value; - }); - }, - ), - CupertinoCheckbox( - value: true, - inactiveColor: Colors.black.withOpacity(0.2), - onChanged: null, - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node2.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node2.dart deleted file mode 100644 index 1f1167a7c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node2.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class CupertinoCheckboxDemo2 extends StatefulWidget { - const CupertinoCheckboxDemo2({super.key}); - - @override - State createState() => _CupertinoCheckboxDemo2State(); -} - -class _CupertinoCheckboxDemo2State extends State { - bool? _active = false; - - @override - Widget build(BuildContext context) { - return - CupertinoCheckbox( - value: _active, - tristate: true, - onChanged: (bool? value) { - setState(() { - _active = value; - }); - }, - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node3.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node3.dart deleted file mode 100644 index 7253583f7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoCheckbox/node3.dart +++ /dev/null @@ -1,48 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class CupertinoCheckboxDemo3 extends StatefulWidget { - const CupertinoCheckboxDemo3({super.key}); - - @override - State createState() => _CupertinoCheckboxDemo3State(); -} - -class _CupertinoCheckboxDemo3State extends State { - bool? _active = false; - @override - Widget build(BuildContext context) { - return Wrap( - children: [ - CupertinoCheckbox( - value: _active, - onChanged: (bool? value) { - setState(() { - _active = value; - }); - }, - ), - CupertinoCheckbox( - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(6)), - side: const BorderSide(color: Colors.black12), - value: _active, - onChanged: (bool? value) { - setState(() { - _active = value; - }); - }, - ), - CupertinoCheckbox( - shape: const StadiumBorder(), - side: const BorderSide(color: Colors.black12), - value: _active, - onChanged: (bool? value) { - setState(() { - _active = value; - }); - }, - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_de_DE.json deleted file mode 100644 index 8f7ce5486..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "iOS-Popup-Menü", - "info": "Ein beeindruckendes iOS-stilisiertes Popup-Menü, das bei langem Drücken animiert erscheint. Wird oft in Verbindung mit CupertinoContextMenuAction verwendet.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoContextMenu", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【actions】 : Aktionen-Komponentensammlung 【List】", - "【previewBuilder】 : Animationskonstruktor 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_en_US.json deleted file mode 100644 index cd760b19a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "iOS Pop-up Menu", - "info": "A gorgeous iOS-style button pop-up box. When long-pressed, a menu panel will pop up in an animated form. It is usually used in conjunction with CupertinoContextMenuAction.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoContextMenu", - "desc": [ - "【child】 : Child Component 【Widget】", - "【actions】 : Action Components Set 【List】", - "【previewBuilder】 : Animation Builder 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_es_ES.json deleted file mode 100644 index 714108532..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "Menú emergente de iOS", - "info": "Un impresionante botón de estilo iOS que muestra un panel de menú emergente con animación cuando se mantiene presionado, generalmente se usa junto con CupertinoContextMenuAction.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoContextMenu", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【actions】 : Conjunto de componentes de acción 【List】", - "【previewBuilder】 : Constructor de animación 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_fr_FR.json deleted file mode 100644 index 5a4a4e820..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "Menu contextuel iOS", - "info": "Un magnifique bouton contextuel de style iOS, qui affiche un panneau de menu animé lors d'un appui long, généralement utilisé avec CupertinoContextMenuAction.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoContextMenu", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【actions】 : Ensemble de composants d'action 【List】", - "【previewBuilder】 : Constructeur d'animation 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_it_IT.json deleted file mode 100644 index e89db3c3a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "Menu a comparsa iOS", - "info": "Un elegante menu a comparsa in stile iOS che appare con un'animazione quando viene premuto a lungo, solitamente utilizzato insieme a CupertinoContextMenuAction.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di CupertinoContextMenu", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【actions】 : Insieme di componenti di azione 【List】", - "【previewBuilder】 : Costruttore di animazione 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ja_JP.json deleted file mode 100644 index ea29dae50..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "iosポップアップメニュー", - "info": "華やかなiOSスタイルのボタンポップアップです。長押しするとアニメーションでメニューパネルが表示され、通常はCupertinoContextMenuActionと一緒に使用されます。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoContextMenuの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【actions】 : アクションコンポーネント集 【List】", - "【previewBuilder】 : アニメーションビルダー 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ko_KR.json deleted file mode 100644 index 34c13947c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "ios 팝업 메뉴", - "info": "화려한 iOS 스타일 버튼 팝업 상자로, 길게 누르면 애니메이션 형태로 메뉴 패널이 팝업됩니다. 일반적으로 CupertinoContextMenuAction와 함께 사용됩니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoContextMenu 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【actions】 : 액션 위젯 집합 【List】", - "【previewBuilder】 : 애니메이션 빌더 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_pt_PT.json deleted file mode 100644 index f69a99785..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "Menu pop-up iOS", - "info": "Um botão de estilo iOS elegante que exibe um painel de menu com animação ao ser pressionado por um longo tempo, geralmente usado em conjunto com CupertinoContextMenuAction.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoContextMenu", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【actions】 : Conjunto de componentes de ação 【List】", - "【previewBuilder】 : Construtor de animação 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ru_RU.json deleted file mode 100644 index e12d61c62..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "ios всплывающее меню", - "info": "Эффективное всплывающее меню в стиле iOS, которое появляется с анимацией при длительном нажатии, обычно используется вместе с CupertinoContextMenuAction.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoContextMenu", - "desc": [ - "【child】 : дочерний компонент 【Widget】", - "【actions】 : набор компонентов действий 【List】", - "【previewBuilder】 : конструктор анимации 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_zh-CN.json deleted file mode 100644 index ead54490c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 143, - "name": "CupertinoContextMenu", - "localName": "ios弹出菜单", - "info": "一个华丽的iOS风格按钮弹出框,长按时会以动画的形式弹出菜单面板,通常和CupertinoContextMenuAction联用。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoContextMenu基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【actions】 : 行为组件集 【List】", - "【previewBuilder】 : 动画构造器 【ContextMenuPreviewBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/node1_base.dart deleted file mode 100644 index 2c1325b27..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenu/node1_base.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoContextMenu extends StatelessWidget { - const CustomCupertinoContextMenu({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 100, - height: 100, - child: DecoratedBox( - decoration: const BoxDecoration( - image: DecorationImage( - image: AssetImage('assets/images/sabar_bar.webp'), - fit: BoxFit.cover), - borderRadius: BorderRadius.all(Radius.circular(50))), - child: _buildCupertinoContextMenu(context)), - ); - } - - final List info = const ['保存图片', '立刻呼叫', '添加到收藏夹']; - - Widget _buildCupertinoContextMenu(context) => CupertinoContextMenu( - child: Container( - decoration: const BoxDecoration( - image: DecorationImage( - image: AssetImage('assets/images/sabar_bar.webp'), - fit: BoxFit.cover), - borderRadius: BorderRadius.all(Radius.circular(50))), - ), - actions: info - .map((e) => CupertinoContextMenuAction( - child: Center(child: Text(e)), - onPressed: () => Navigator.pop(context), - )) - .toList()); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_de_DE.json deleted file mode 100644 index 5de2763d4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "iOS-Popup-Menü-Schaltfläche", - "info": "Wird im Allgemeinen nur für die Klick-Schaltfläche in CupertinoContextMenu verwendet. Kann Kind- und Endsymbole angeben und empfängt Klick-Ereignisse.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoContextMenuAction", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【isDefaultAction】 : Standardmäßig ausgewählt 【bool】", - "【trailingIcon】 : Ende 【bool】", - "【onPressed】 : Klick-Ereignis 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_en_US.json deleted file mode 100644 index 4f631c365..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "iOS Popup Menu Button", - "info": "Generally used only for click buttons in CupertinoContextMenu. Can specify child and trailing icons, and receives click events.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoContextMenuAction", - "desc": [ - "【child】 : Child Component 【Widget】", - "【isDefaultAction】 : Whether it is the default action 【bool】", - "【trailingIcon】 : Trailing Icon 【bool】", - "【onPressed】 : Click Event 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_es_ES.json deleted file mode 100644 index f2d62182c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "Botón de menú emergente de iOS", - "info": "Generalmente se usa solo para el botón de clic en CupertinoContextMenu. Se puede especificar el icono del hijo y el icono de la cola, y recibe el evento de clic.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoContextMenuAction", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【isDefaultAction】 : Si está seleccionado por defecto 【bool】", - "【trailingIcon】 : Icono de cola 【bool】", - "【onPressed】 : Evento de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_fr_FR.json deleted file mode 100644 index 61ca09a93..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "Bouton de menu contextuel iOS", - "info": "Généralement utilisé uniquement pour les boutons cliquables dans CupertinoContextMenu. Peut spécifier un enfant et une icône de fin, et reçoit les événements de clic.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoContextMenuAction", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【isDefaultAction】 : Est-ce sélectionné par défaut 【bool】", - "【trailingIcon】 : Icône de fin 【bool】", - "【onPressed】 : Événement de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_it_IT.json deleted file mode 100644 index e08ede5fb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "Pulsante del menu a comparsa iOS", - "info": "Generalmente utilizzato solo per i pulsanti di clic in CupertinoContextMenu. È possibile specificare l'icona del figlio e della coda, ricevere eventi di clic.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di CupertinoContextMenuAction", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【isDefaultAction】 : Se selezionato per default 【bool】", - "【trailingIcon】 : Coda 【bool】", - "【onPressed】 : Evento di clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ja_JP.json deleted file mode 100644 index 5a6c599a8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "iosポップアップメニューボタン", - "info": "通常、CupertinoContextMenu内のクリックボタンにのみ使用されます。子要素と末尾アイコンを指定でき、クリックイベントを受け取ります。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoContextMenuActionの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【isDefaultAction】 : デフォルトで選択されているかどうか 【bool】", - "【trailingIcon】 : 末尾アイコン 【bool】", - "【onPressed】 : クリックイベント 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ko_KR.json deleted file mode 100644 index 9999b5231..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "ios 팝업 메뉴 버튼", - "info": "일반적으로 CupertinoContextMenu 내의 클릭 버튼에만 사용됩니다. 자식 및 꼬리 아이콘을 지정하고 클릭 이벤트를 수신할 수 있습니다.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoContextMenuAction 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【isDefaultAction】 : 기본 선택 여부 【bool】", - "【trailingIcon】 : 꼬리 아이콘 【bool】", - "【onPressed】 : 클릭 이벤트 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_pt_PT.json deleted file mode 100644 index 89f34b48f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "Botão de menu pop-up iOS", - "info": "Geralmente usado apenas para botões de clique em CupertinoContextMenu. Pode especificar ícones de criança e cauda, e receber eventos de clique.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoContextMenuAction", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【isDefaultAction】 : Selecionado por padrão 【bool】", - "【trailingIcon】 : Ícone de cauda 【bool】", - "【onPressed】 : Evento de clique 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ru_RU.json deleted file mode 100644 index 6fc6d61ee..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "ios всплывающее меню кнопка", - "info": "Обычно используется только для кнопки нажатия в CupertinoContextMenu. Можно указать дочерний элемент и значок в конце, принимает событие нажатия.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoContextMenuAction", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【isDefaultAction】 : Выбрано ли по умолчанию 【bool】", - "【trailingIcon】 : Конечный значок 【bool】", - "【onPressed】 : Событие нажатия 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_zh-CN.json deleted file mode 100644 index a510198ed..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 144, - "name": "CupertinoContextMenuAction", - "localName": "ios弹出菜单按钮", - "info": "一般只用于CupertinoContextMenu中的点击按钮。可指定孩子和尾部图标,接收点击事件。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoContextMenuAction基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【isDefaultAction】 : 是否默认选中 【bool】", - "【trailingIcon】 : 尾部 【bool】", - "【onPressed】 : 点击事件 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/node1_base.dart deleted file mode 100644 index b20882734..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoContextMenuAction/node1_base.dart +++ /dev/null @@ -1,34 +0,0 @@ -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/cupertino.dart'; - -class CustomCupertinoContextMenuAction extends StatelessWidget { - const CustomCupertinoContextMenuAction({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Container( - width: 200, - margin: const EdgeInsets.all(5), - child: CupertinoContextMenuAction( - trailingIcon: CupertinoIcons.settings, - isDefaultAction: true, - onPressed: () => Navigator.of(context).pushNamed('AboutMePage'), - child: const Text('张风捷特烈')), - ), - Container( - width: 200, - margin: const EdgeInsets.all(5), - child: CupertinoContextMenuAction( - trailingIcon: CupertinoIcons.home, - isDefaultAction: false, - onPressed: () => Navigator.of(context).pushNamed('AboutMePage'), - child: const Text('百里·巫缨')), - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_de_DE.json deleted file mode 100644 index 89d30b76a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "iOS-Datumsauswahl", - "info": "Hochwertige Roll-Datumsauswahl, die den Auswahltyp, Datumsbereich usw. angeben kann und Datumsauswahlereignisse empfängt.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoDatePicker", - "desc": [ - "【initialDateTime】 : Anfangsdatum 【DateTime】", - "【minimumYear】 : Mindestjahr 【int】", - "【maximumYear】 : Höchstjahr 【int】", - "【onDateTimeChanged】 : Klick-Rückruf 【Function(DateTime)】", - "【minuteInterval】 : Minutenintervall 【int】", - "【use24hFormat】 : Ist 24-Stunden-Format 【bool】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【mode】 : Modus*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_en_US.json deleted file mode 100644 index eea93649c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "iOS Date Picker", - "info": "A high-end rolling date picker that allows you to specify the type of selection, date range, etc., and receive date selection events.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoDatePicker", - "desc": [ - "【initialDateTime】 : Initial date 【DateTime】", - "【minimumYear】 : Minimum year 【int】", - "【maximumYear】 : Maximum year 【int】", - "【onDateTimeChanged】 : Click callback 【Function(DateTime)】", - "【minuteInterval】 : Minute interval 【int】", - "【use24hFormat】 : Whether it is 24-hour format 【bool】", - "【backgroundColor】 : Background color 【Color】", - "【mode】 : Mode*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_es_ES.json deleted file mode 100644 index b6cb9f307..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "Selector de fecha de iOS", - "info": "Selector de fecha de desplazamiento de alta gama, que puede especificar el tipo de selección, el rango de fechas, etc., y recibir eventos de selección de fecha.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoDatePicker", - "desc": [ - "【initialDateTime】 : Fecha inicial 【DateTime】", - "【minimumYear】 : Año mínimo 【int】", - "【maximumYear】 : Año máximo 【int】", - "【onDateTimeChanged】 : Devolución de llamada al hacer clic 【Function(DateTime)】", - "【minuteInterval】 : Intervalo de minutos 【int】", - "【use24hFormat】 : Si es formato de 24 horas 【bool】", - "【backgroundColor】 : Color de fondo 【Color】", - "【mode】 : Modo*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_fr_FR.json deleted file mode 100644 index cfca4dd1d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "Sélecteur de date iOS", - "info": "Sélecteur de date élégant à défilement, permettant de spécifier le type de sélection, la plage de dates, etc., et de recevoir des événements de sélection de date.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoDatePicker", - "desc": [ - "【initialDateTime】 : Date initiale 【DateTime】", - "【minimumYear】 : Année minimale 【int】", - "【maximumYear】 : Année maximale 【int】", - "【onDateTimeChanged】 : Rappel au clic 【Function(DateTime)】", - "【minuteInterval】 : Intervalle des minutes 【int】", - "【use24hFormat】 : Format 24 heures 【bool】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【mode】 : Mode*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_it_IT.json deleted file mode 100644 index 02fdf7302..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "Selettore di data iOS", - "info": "Un selettore di data di alta qualità con scorrimento, che consente di specificare il tipo di selezione, l'intervallo di date, ecc., e riceve eventi di selezione della data.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoDatePicker", - "desc": [ - "【initialDateTime】 : Data iniziale 【DateTime】", - "【minimumYear】 : Anno minimo 【int】", - "【maximumYear】 : Anno massimo 【int】", - "【onDateTimeChanged】 : Callback al click 【Function(DateTime)】", - "【minuteInterval】 : Intervallo di minuti 【int】", - "【use24hFormat】 : Se è in formato 24 ore 【bool】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【mode】 : Modalità*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ja_JP.json deleted file mode 100644 index 6e5aedcf0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "iOS日付ピッカー", - "info": "高級感のあるスクロール日付ピッカーで、選択するタイプや日付範囲などを指定でき、日付選択イベントを受け取ります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoDatePickerの基本使用", - "desc": [ - "【initialDateTime】 : 初期日付 【DateTime】", - "【minimumYear】 : 最小年 【int】", - "【maximumYear】 : 最大年 【int】", - "【onDateTimeChanged】 : クリックコールバック 【Function(DateTime)】", - "【minuteInterval】 : 分間隔 【int】", - "【use24hFormat】 : 24時間制かどうか 【bool】", - "【backgroundColor】 : 背景色 【Color】", - "【mode】 : モード*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ko_KR.json deleted file mode 100644 index a0b820e88..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "iOS 날짜 선택기", - "info": "고급스러운 스크롤 날짜 선택기로, 선택 유형, 날짜 범위 등을 지정할 수 있으며, 날짜 선택 이벤트를 수신합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoDatePicker 기본 사용", - "desc": [ - "【initialDateTime】 : 초기 날짜 【DateTime】", - "【minimumYear】 : 최소 연도 【int】", - "【maximumYear】 : 최대 연도 【int】", - "【onDateTimeChanged】 : 클릭 콜백 【Function(DateTime)】", - "【minuteInterval】 : 분 간격 【int】", - "【use24hFormat】 : 24시간 형식 여부 【bool】", - "【backgroundColor】 : 배경색 【Color】", - "【mode】 : 모드*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_pt_PT.json deleted file mode 100644 index 761e0003f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "Seletor de Data iOS", - "info": "Um seletor de data sofisticado com rolagem, que permite especificar o tipo de seleção, intervalo de datas, etc., e recebe eventos de seleção de data.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CupertinoDatePicker", - "desc": [ - "【initialDateTime】 : Data inicial 【DateTime】", - "【minimumYear】 : Ano mínimo 【int】", - "【maximumYear】 : Ano máximo 【int】", - "【onDateTimeChanged】 : Callback de clique 【Function(DateTime)】", - "【minuteInterval】 : Intervalo de minutos 【int】", - "【use24hFormat】 : Se é formato de 24 horas 【bool】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【mode】 : Modo*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ru_RU.json deleted file mode 100644 index 8dea1b310..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "iOS-выбор даты", - "info": "Стильный колесный выбор даты, который позволяет указать тип выбора, диапазон дат и т.д., получает событие выбора даты.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoDatePicker", - "desc": [ - "【initialDateTime】 : Начальная дата 【DateTime】", - "【minimumYear】 : Минимальный год 【int】", - "【maximumYear】 : Максимальный год 【int】", - "【onDateTimeChanged】 : Обратный вызов при нажатии 【Function(DateTime)】", - "【minuteInterval】 : Интервал минут 【int】", - "【use24hFormat】 : Используется ли 24-часовой формат 【bool】", - "【backgroundColor】 : Цвет фона 【Color】", - "【mode】 : Режим*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_zh-CN.json deleted file mode 100644 index fee41db04..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 137, - "name": "CupertinoDatePicker", - "localName": "iOS日期选择器", - "info": "高大上的滑滚日期选择器,可指定选择的类型、日期范围等,接收日期选中事件。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoDatePicker基本使用", - "desc": [ - "【initialDateTime】 : 初始日期 【DateTime】", - "【minimumYear】 : 最小年份 【int】", - "【maximumYear】 : 最大年份 【int】", - "【onDateTimeChanged】 : 点击回调 【Function(DateTime)】", - "【minuteInterval】 : 分钟间隔 【int】", - "【use24hFormat】 : 是否是24小时制 【bool】", - "【backgroundColor】 : 背景色 【Color】", - "【mode】 : 模式*3 【CupertinoDatePickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/node1_base.dart deleted file mode 100644 index 60cbd0cda..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoDatePicker/node1_base.dart +++ /dev/null @@ -1,67 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoDatePicker extends StatefulWidget { - const CustomCupertinoDatePicker({Key? key}) : super(key: key); - - @override - _CustomCupertinoDatePickerState createState() => - _CustomCupertinoDatePickerState(); -} - -class _CustomCupertinoDatePickerState extends State { - DateTime _date = DateTime.now(); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Text( - '当前日期:${_date.toIso8601String()}', - style: const TextStyle(color: Colors.grey, fontSize: 16), - ), - _buildInfoTitle('CupertinoDatePickerMode.dateAndTime'), - buildPicker(CupertinoDatePickerMode.dateAndTime), - _buildInfoTitle('CupertinoDatePickerMode.date'), - buildPicker(CupertinoDatePickerMode.date), - _buildInfoTitle('CupertinoDatePickerMode.time'), - buildPicker(CupertinoDatePickerMode.time), - ], - ); - } - - Container buildPicker(CupertinoDatePickerMode mode) { - return Container( - margin: const EdgeInsets.all(10), - height: 150, - child: CupertinoDatePicker( - mode: mode, - initialDateTime: DateTime.now(), -// maximumDate: DateTime(2018,8,8), -// minimumDate: DateTime(2030,8,8), - minimumYear: 2018, - maximumYear: 2030, - use24hFormat: false, - minuteInterval: 1, - backgroundColor: CupertinoColors.white, - onDateTimeChanged: (date) { - print(date); - setState(() => _date = date); - }, - ), - ); - } - - Widget _buildInfoTitle(info){ - return Padding( - padding: const EdgeInsets.only(left: 20,top: 20,bottom: 5), - child: Text( - info, - style: const TextStyle(color: Colors.blue, fontSize: 16,fontWeight: FontWeight.bold), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_de_DE.json deleted file mode 100644 index 11528d25f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "iOS-Navigation", - "info": "Eine allgemeine Struktur für eine iOS-ähnliche Anwendungsleiste oben, die es ermöglicht, entsprechende Komponenten an bestimmten Stellen zu platzieren. Attribute wie Hintergrundfarbe, Abstände und Rahmen können angegeben werden.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoNavigationBar", - "desc": [ - "【leading】: Linke Komponente 【Widget】", - "【middle】: Mittlere Komponente 【Widget】", - "【trailing】: Rechte Komponente 【Widget】", - "【backgroundColor】: Hintergrundfarbe 【Color】", - "【padding】: Innenabstand 【EdgeInsetsDirectional】", - "【border】: Rahmen 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_en_US.json deleted file mode 100644 index 67150e6b2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "iOS Navigation", - "info": "A general structure for an iOS-style app top bar, where corresponding components can be placed in specified areas. Attributes such as background color, spacing, and border can be specified.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoNavigationBar", - "desc": [ - "【leading】: Left component 【Widget】", - "【middle】: Middle component 【Widget】", - "【trailing】: Trailing component 【Widget】", - "【backgroundColor】: Background color 【Color】", - "【padding】: Padding 【EdgeInsetsDirectional】", - "【border】: Border 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_es_ES.json deleted file mode 100644 index 7e03967dc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "Navegación iOS", - "info": "Una estructura común para la barra superior de aplicaciones con estilo iOS, donde se pueden colocar componentes correspondientes en las partes especificadas. Se pueden especificar propiedades como el color de fondo, el espaciado, el borde, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoNavigationBar", - "desc": [ - "【leading】 : Componente izquierdo 【Widget】", - "【middle】 : Componente central 【Widget】", - "【trailing】 : Componente derecho 【Widget】", - "【backgroundColor】 : Color de fondo 【Color】", - "【padding】 : Relleno interno 【EdgeInsetsDirectional】", - "【border】 : Borde 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_fr_FR.json deleted file mode 100644 index 18ffb31e8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "Navigation iOS", - "info": "Une structure générique pour une barre supérieure d'application de style iOS, permettant de placer des composants correspondants dans des parties spécifiées. Peut spécifier des propriétés telles que la couleur de fond, l'espacement, la bordure, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoNavigationBar", - "desc": [ - "【leading】 : Composant gauche 【Widget】", - "【middle】 : Composant central 【Widget】", - "【trailing】 : Composant de fin 【Widget】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【padding】 : Marge intérieure 【EdgeInsetsDirectional】", - "【border】 : Bordure 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_it_IT.json deleted file mode 100644 index d99005b7f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "Navigazione iOS", - "info": "Una struttura generica per una barra superiore di un'app in stile iOS, che consente di posizionare i componenti corrispondenti nelle aree specificate. È possibile specificare proprietà come il colore di sfondo, la spaziatura, il bordo, ecc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di CupertinoNavigationBar", - "desc": [ - "【leading】 : Componente sinistro 【Widget】", - "【middle】 : Componente centrale 【Widget】", - "【trailing】 : Componente destro 【Widget】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【padding】 : Spaziatura interna 【EdgeInsetsDirectional】", - "【border】 : Bordo 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ja_JP.json deleted file mode 100644 index c6b20cf54..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "iOSナビゲーション", - "info": "iOSスタイルのアプリトップバーの一般的な構造で、指定された部分に適切なコンポーネントを配置できます。背景色、間隔、ボーダーなどの属性を指定できます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoNavigationBar基本使用法", - "desc": [ - "【leading】 : 左側のコンポーネント 【Widget】", - "【middle】 : 中央のコンポーネント 【Widget】", - "【trailing】 : 右側のコンポーネント 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【padding】 : パディング 【EdgeInsetsDirectional】", - "【border】 : ボーダー 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ko_KR.json deleted file mode 100644 index a51e27689..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "iOS 네비게이션", - "info": "iOS 스타일의 앱 상단 바의 일반적인 구조로, 지정된 부분에 해당하는 컴포넌트를 배치할 수 있습니다. 배경색, 간격, 테두리 등 속성을 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoNavigationBar 기본 사용법", - "desc": [ - "【leading】 : 왼쪽 컴포넌트 【Widget】", - "【middle】 : 중간 컴포넌트 【Widget】", - "【trailing】 : 오른쪽 컴포넌트 【Widget】", - "【backgroundColor】 : 배경색 【Color】", - "【padding】 : 내부 여백 【EdgeInsetsDirectional】", - "【border】 : 테두리 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_pt_PT.json deleted file mode 100644 index c7ccb9110..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "Navegação iOS", - "info": "Uma estrutura genérica para uma barra superior de aplicativos no estilo iOS, onde é possível colocar componentes correspondentes em áreas especificadas. Pode-se especificar atributos como cor de fundo, espaçamento, borda, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoNavigationBar", - "desc": [ - "【leading】 : Componente esquerdo 【Widget】", - "【middle】 : Componente central 【Widget】", - "【trailing】 : Componente direito 【Widget】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【padding】 : Margem interna 【EdgeInsetsDirectional】", - "【border】 : Borda 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ru_RU.json deleted file mode 100644 index 4b9574764..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "iOS навигация", - "info": "Универсальная структура для верхней панели приложения в стиле iOS, позволяющая размещать соответствующие компоненты в указанных местах. Можно указать такие свойства, как цвет фона, отступы, границы и т.д.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoNavigationBar", - "desc": [ - "【leading】 : Левый компонент 【Widget】", - "【middle】 : Центральный компонент 【Widget】", - "【trailing】 : Правый компонент 【Widget】", - "【backgroundColor】 : Цвет фона 【Color】", - "【padding】 : Внутренние отступы 【EdgeInsetsDirectional】", - "【border】 : Граница 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_zh-CN.json deleted file mode 100644 index a4c3cf064..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 62, - "name": "CupertinoNavigationBar", - "localName": "iOS导航", - "info": "一个iOS风格的应用顶部栏的通用结构,可在指定的部位放置相应的组件。可指定背景色、间距、边线等属性。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoNavigationBar基本用法", - "desc": [ - "【leading】 : 左侧组件 【Widget】", - "【middle】 : 中间组件 【Widget】", - "【trailing】 : 尾部组件 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【padding】 : 内边距 【EdgeInsetsDirectional】", - "【border】 : 边线 【Border】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/node1_base.dart deleted file mode 100644 index d0abec839..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoNavigationBar/node1_base.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoNavigationBar extends StatelessWidget { - const CustomCupertinoNavigationBar({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return CupertinoNavigationBar( - leading: const Icon( - CupertinoIcons.back, - size: 25, - color: Colors.blue, - ), - middle: const Text("风雪雅舍"), - trailing: Image.asset( - "assets/images/icon_head.webp", - width: 25.0, - height: 25.0, - ), - backgroundColor: const Color(0xfff1f1f1), - padding: const EdgeInsetsDirectional.only(start: 10,end: 20), - border: Border.all(color: Colors.transparent), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_de_DE.json deleted file mode 100644 index 99bcfa1c2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "iOS-Seitengerüst", - "info": "iOS-stilisiertes Seitenlayout-Gerüst, das die Navigationsleiste oben und die Hintergrundfarbe der Seite festlegen kann.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoPageScaffold", - "desc": [ - "【child】 : Inhalt 【Widget】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【navigationBar】 : Kopf 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_en_US.json deleted file mode 100644 index 13b13ee49..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "iOS Page Scaffold", - "info": "iOS style page layout scaffold structure, can specify the top navigation bar and page background color.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoPageScaffold", - "desc": [ - "【child】 : Content 【Widget】", - "【backgroundColor】 : Background Color 【Color】", - "【navigationBar】 : Header 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_es_ES.json deleted file mode 100644 index 9cd2fb31c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "Estructura de andamio de página iOS", - "info": "Estructura de andamio de diseño de página estilo iOS, puede especificar la barra de navegación superior y el color de fondo de la página.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoPageScaffold", - "desc": [ - "【child】 : contenido 【Widget】", - "【backgroundColor】 : color de fondo 【Color】", - "【navigationBar】 : cabecera 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_fr_FR.json deleted file mode 100644 index 919cd6c10..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "Structure de base de page iOS", - "info": "Structure de base de mise en page de page de style iOS, permettant de spécifier la barre de navigation supérieure et la couleur de fond de la page.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoPageScaffold", - "desc": [ - "【child】 : contenu 【Widget】", - "【backgroundColor】 : couleur de fond 【Color】", - "【navigationBar】 : en-tête 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_it_IT.json deleted file mode 100644 index 41ade4739..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "Impalcatura della pagina iOS", - "info": "Struttura di impalcatura per layout di pagine in stile iOS, consente di specificare la barra di navigazione superiore e il colore di sfondo della pagina.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di CupertinoPageScaffold", - "desc": [ - "【child】 : Contenuto 【Widget】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【navigationBar】 : Testa 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ja_JP.json deleted file mode 100644 index 2c9c1ec71..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "iOSページスキャフォールド", - "info": "iOSスタイルのページレイアウトスキャフォールド構造で、上部のナビゲーションバーとページの背景色を指定できます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPageScaffold基本使用法", - "desc": [ - "【child】 : コンテンツ 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【navigationBar】 : ヘッダー 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ko_KR.json deleted file mode 100644 index c20f63728..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "iOS 페이지 스캐폴드", - "info": "iOS 스타일의 페이지 레이아웃 스캐폴드 구조로, 상단의 내비게이션 바와 페이지 배경색을 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPageScaffold 기본 사용법", - "desc": [ - "【child】 : 내용 【Widget】", - "【backgroundColor】 : 배경색 【Color】", - "【navigationBar】 : 헤더 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_pt_PT.json deleted file mode 100644 index bcae30240..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "Estrutura de Scaffold de Página iOS", - "info": "Estrutura de scaffold de layout de página no estilo iOS, que pode especificar a barra de navegação superior e a cor de fundo da página.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CupertinoPageScaffold", - "desc": [ - "【child】 : Conteúdo 【Widget】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【navigationBar】 : Cabeçalho 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ru_RU.json deleted file mode 100644 index 4efe59963..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "iOS страница каркас", - "info": "iOS-стиль макета страницы каркасной структуры, можно указать верхнюю навигационную панель и цвет фона страницы.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPageScaffold базовое использование", - "desc": [ - "【child】 : содержимое 【Widget】", - "【backgroundColor】 : цвет фона 【Color】", - "【navigationBar】 : верхняя часть 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_zh-CN.json deleted file mode 100644 index 1636363b8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 157, - "name": "CupertinoPageScaffold", - "localName": "iOS页面脚手架", - "info": "iOS风格的页面布局脚手架结构,可指定顶部的导航栏和页面背景色。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPageScaffold基本用法", - "desc": [ - "【child】 : 内容 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【navigationBar】 : 头部 【ObstructingPreferredSizeWidget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/node1_base.dart deleted file mode 100644 index d0950a299..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPageScaffold/node1_base.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoPageScaffold extends StatelessWidget { - const CustomCupertinoPageScaffold({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height - 300, - child: const CupertinoPageScaffold( - navigationBar: CupertinoNavigationBar( - leading: Icon(CupertinoIcons.reply), - trailing: Icon(CupertinoIcons.share), - middle: Text('Flutter Unit'), - ), - backgroundColor: CupertinoColors.systemBackground, - child: Center( - child: Text('Hello, World!'), - ), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_de_DE.json deleted file mode 100644 index 2cde8206c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "iOS-Auswahl", - "info": "Hochwertiger zylindrischer Schieberegler, äußerst raffiniert, kann viele Konfigurationsattribute angeben und empfängt ausgewählte Ereignisse beim Schieben.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPicker Grundlegende Verwendung", - "desc": [ - "【children】 : Liste der Unterkomponenten 【List】", - "【offAxisFraction】 : Achsversatzrate 【double】", - "【squeeze】 : Quetschrate 【double】", - "【diameterRatio】 : Verhältnis von Höhe zu Zylinderdurchmesser 【double】", - "【itemExtent】 : Abstand 【double】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【onSelectedItemChanged】 : Ausgewähltes Ereignis 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_en_US.json deleted file mode 100644 index 440bae87a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "iOS Picker", - "info": "A high-end cylindrical sliding picker, very sophisticated, with many configurable attributes, and it receives the selected event when sliding.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoPicker", - "desc": [ - "【children】 : List of child components 【List】", - "【offAxisFraction】 : Axis offset rate 【double】", - "【squeeze】 : Squeeze rate 【double】", - "【diameterRatio】 : Ratio of height to cylinder diameter 【double】", - "【itemExtent】 : Spacing 【double】", - "【backgroundColor】 : Background color 【Color】", - "【onSelectedItemChanged】 : Selected event 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_es_ES.json deleted file mode 100644 index 245844479..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "Selector iOS", - "info": "Selector de deslizamiento cilíndrico de alta gama, muy ingenioso, con muchas propiedades de configuración, recibe eventos de selección al deslizar.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoPicker", - "desc": [ - "【children】 : Lista de componentes hijos 【List】", - "【offAxisFraction】 : Tasa de desplazamiento del eje 【double】", - "【squeeze】 : Tasa de compresión 【double】", - "【diameterRatio】 : Relación entre la altura y el diámetro del cilindro 【double】", - "【itemExtent】 : Espaciado 【double】", - "【backgroundColor】 : Color de fondo 【Color】", - "【onSelectedItemChanged】 : Evento de selección 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_fr_FR.json deleted file mode 100644 index fb1445e37..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "Sélecteur iOS", - "info": "Un sélecteur cylindrique haut de gamme, très sophistiqué, avec de nombreuses propriétés configurables, recevant des événements de sélection lors du glissement.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoPicker", - "desc": [ - "【children】 : Liste des composants enfants 【List】", - "【offAxisFraction】 : Taux de décalage de l'axe 【double】", - "【squeeze】 : Taux de compression 【double】", - "【diameterRatio】 : Rapport hauteur/diamètre du cylindre 【double】", - "【itemExtent】 : Espacement 【double】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【onSelectedItemChanged】 : Événement de sélection 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_it_IT.json deleted file mode 100644 index 436b0ec2e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "Selettore iOS", - "info": "Un selettore a scorrimento cilindrico di alta gamma, estremamente sofisticato, con molte proprietà configurabili e in grado di ricevere eventi di selezione durante lo scorrimento.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoPicker", - "desc": [ - "【children】 : Lista dei componenti figli 【List】", - "【offAxisFraction】 : Frazione di offset dell'asse 【double】", - "【squeeze】 : Frazione di compressione 【double】", - "【diameterRatio】 : Rapporto tra altezza e diametro del cilindro 【double】", - "【itemExtent】 : Spaziatura 【double】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【onSelectedItemChanged】 : Evento di selezione 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ja_JP.json deleted file mode 100644 index c348d5fe5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "iOSピッカー", - "info": "高級感あふれる円柱スライドピッカーで、精巧で、多くの設定属性を指定でき、スライド時の選択イベントを受け取ります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPickerの基本使用", - "desc": [ - "【children】 : 子コンポーネントリスト 【List】", - "【offAxisFraction】 : 軸オフセット率 【double】", - "【squeeze】 : 圧縮率 【double】", - "【diameterRatio】 : 高さと円柱直径の比率 【double】", - "【itemExtent】 : 間隔 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【onSelectedItemChanged】 : 選択イベント 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ko_KR.json deleted file mode 100644 index 64c6fc06b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "iOS 선택기", - "info": "고급스러운 원통형 슬라이드 선택기로, 정교하며 많은 설정 속성을 지정할 수 있고 슬라이드 시 선택 이벤트를 수신합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPicker 기본 사용법", - "desc": [ - "【children】 : 자식 위젯 리스트 【List】", - "【offAxisFraction】 : 축 오프셋 비율 【double】", - "【squeeze】 : 압축 비율 【double】", - "【diameterRatio】 : 높이와 원통 직경 비율 【double】", - "【itemExtent】 : 간격 【double】", - "【backgroundColor】 : 배경색 【Color】", - "【onSelectedItemChanged】 : 선택 이벤트 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_pt_PT.json deleted file mode 100644 index 0d17c373b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "Seletor iOS", - "info": "Um seletor deslizante cilíndrico de alta classe, extremamente sofisticado, que permite especificar muitos atributos de configuração e recebe eventos de seleção ao deslizar.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoPicker", - "desc": [ - "【children】 : Lista de componentes filhos 【List】", - "【offAxisFraction】 : Taxa de desvio do eixo 【double】", - "【squeeze】 : Taxa de compressão 【double】", - "【diameterRatio】 : Razão entre altura e diâmetro do cilindro 【double】", - "【itemExtent】 : Espaçamento 【double】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【onSelectedItemChanged】 : Evento de seleção 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ru_RU.json deleted file mode 100644 index 9cd80dc48..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "iOS селектор", - "info": "Высококлассный цилиндрический слайдер-селектор, очень изысканный, может быть настроен с множеством свойств, принимает события при выборе во время скольжения.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoPicker", - "desc": [ - "【children】 : Список дочерних компонентов 【List】", - "【offAxisFraction】 : Коэффициент смещения оси 【double】", - "【squeeze】 : Коэффициент сжатия 【double】", - "【diameterRatio】 : Соотношение высоты к диаметру цилиндра 【double】", - "【itemExtent】 : Расстояние между элементами 【double】", - "【backgroundColor】 : Цвет фона 【Color】", - "【onSelectedItemChanged】 : Событие выбора 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_zh-CN.json deleted file mode 100644 index f04bba123..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 139, - "name": "CupertinoPicker", - "localName": "iOS选择器", - "info": "高大上的柱面滑动选择器,精妙十足,可指定很多配置属性,接收滑动时选中事件。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPicker基本使用", - "desc": [ - "【children】 : 子组件列表 【List】", - "【offAxisFraction】 : 轴偏移率 【double】", - "【squeeze】 : 挤压率 【double】", - "【diameterRatio】 : 高与圆柱直径比率 【double】", - "【itemExtent】 : 间距 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【onSelectedItemChanged】 : 选中事件 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/node1_base.dart deleted file mode 100644 index e00bb7583..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoPicker/node1_base.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoPicker extends StatelessWidget { - const CustomCupertinoPicker({Key? key}) : super(key: key); - - final List names = const[ - 'Java', - 'Kotlin', - 'Dart', - 'Swift', - 'C++', - 'Python', - "JavaScript", - "PHP", - "Go", - "Object-c" - ]; - - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 150, - child: CupertinoPicker( - backgroundColor: CupertinoColors.systemGrey.withAlpha(33), - diameterRatio: 1, - offAxisFraction: 0.4, - squeeze: 1.5, - itemExtent: 40, - onSelectedItemChanged: (position) { - print('当前条目 ${names[position]}'); - }, - children: names.map((e) => Center(child: Text(e))).toList()), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_de_DE.json deleted file mode 100644 index 2dbe2c6f2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_de_DE.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "Radio-Button im macOS-Stil", - "info": "Ein Radio-Button im macOS-Stil, dessen Auswahlstatus durch value und groupValue bestimmt wird; onChanged ist der Callback für Klickereignisse.", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Verwendung von CupertinoRadio", - "desc": [ - "【value】 : Wert des Radio-Buttons 【T】", - "【groupValue】 : Aktueller übereinstimmender Wert 【T】", - "【onChanged】 : Callback bei Änderung 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "Farben von CupertinoRadio", - "desc": [ - "【activeColor】 : Hintergrundfarbe im aktiven Zustand 【Color?】", - "【fillColor】 : Füllfarbe 【Color?】", - "【inactiveColor】 : Hintergrundfarbe im inaktiven Zustand 【Color?】", - "【focusColor】 : Fokusfarbe 【Color?】", - "【mouseCursor】 : Mauszeigerstil 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "Umschaltbarkeit", - "desc": [ - "【toggleable】 : Ist Umschaltbarkeit unterstützt 【bool】", - "toggleable ist standardmäßig false. Wenn es true ist, wird bei einem Klick auf den aktiven Radio-Button ein null-Wert zurückgegeben, um die Anforderungen für die Auswahl und Nichtauswahl zu unterstützen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_en_US.json deleted file mode 100644 index 118f86351..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_en_US.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "Radio Button·macOS Style", - "info": "A macOS-style radio button, where the value and groupValue together determine whether the radio button is selected; the onChanged callback handles click events.", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoRadio Usage", - "desc": [ - "【value】: Radio button value 【T】", - "【groupValue】: Current matching value 【T】", - "【onChanged】: Callback when changed 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "CupertinoRadio Colors", - "desc": [ - "【activeColor】: Active background color 【Color?】", - "【fillColor】: Fill color 【Color?】", - "【inactiveColor】: Inactive background color 【Color?】", - "【focusColor】: Focus color 【Color?】", - "【mouseCursor】: Mouse cursor style 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "Toggle Support", - "desc": [ - "【toggleable】: Whether toggle is supported 【bool】", - "toggleable defaults to false. When set to true, clicking an active radio button will call back null data, supporting the need for toggling between selected and unselected states." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_es_ES.json deleted file mode 100644 index fa288631f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_es_ES.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "Botón de opción estilo macOS", - "info": "Un botón de opción con estilo macOS, donde value y groupValue determinan si este botón de opción está seleccionado; onChanged es la devolución de llamada para el evento de clic.", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso de CupertinoRadio", - "desc": [ - "【value】: Valor del botón de opción 【T】", - "【groupValue】: Valor actual coincidente 【T】", - "【onChanged】: Devolución de llamada al cambiar 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "Colores de CupertinoRadio", - "desc": [ - "【activeColor】: Color de fondo activo 【Color?】", - "【fillColor】: Relleno 【Color?】", - "【inactiveColor】: Color de fondo inactivo 【Color?】", - "【focusColor】: Color de enfoque 【Color?】", - "【mouseCursor】: Estilo del cursor del ratón 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "Soporte de alternancia", - "desc": [ - "【toggleable】: Soporta alternancia 【bool】", - "toggleable es false por defecto, cuando es true, al hacer clic en un botón de opción activo, se devuelve un valor null, lo que permite satisfacer la necesidad de alternar entre seleccionado y no seleccionado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_fr_FR.json deleted file mode 100644 index f9705e372..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_fr_FR.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "Bouton radio·style macOS", - "info": "Un bouton radio de style macOS, la valeur et groupValue déterminent ensemble si ce bouton radio est sélectionné; onChanged rappelle l'événement de clic.", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de CupertinoRadio", - "desc": [ - "【value】 : Valeur du bouton radio 【T】", - "【groupValue】 : Valeur de correspondance actuelle 【T】", - "【onChanged】 : Rappel lors du changement 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "Couleur de CupertinoRadio", - "desc": [ - "【activeColor】 : Couleur de fond active 【Color?】", - "【fillColor】 : Remplissage 【Color?】", - "【inactiveColor】 : Couleur de fond inactive 【Color?】", - "【focusColor】 : Couleur de focus 【Color?】", - "【mouseCursor】 : Style du curseur de la souris 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "Prise en charge du basculement", - "desc": [ - "【toggleable】 : Prise en charge du basculement 【bool】", - "toggleable est par défaut false, lorsqu'il est true, cliquer sur le bouton radio actif rappellera des données null, répondant ainsi aux besoins de basculement entre sélection et non-sélection." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_it_IT.json deleted file mode 100644 index dcccf7ed9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_it_IT.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "Pulsante di scelta·Stile macOS", - "info": "Un pulsante di scelta in stile macOS, value e groupValue determinano insieme se questo pulsante di scelta è selezionato; onChanged richiama l'evento di clic.", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilizzo di CupertinoRadio", - "desc": [ - "【value】 : Valore del pulsante di scelta 【T】", - "【groupValue】 : Valore corrente corrispondente 【T】", - "【onChanged】 : Richiama quando cambia 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "Colori di CupertinoRadio", - "desc": [ - "【activeColor】 : Colore di sfondo attivo 【Color?】", - "【fillColor】 : Riempimento 【Color?】", - "【inactiveColor】 : Colore di sfondo inattivo 【Color?】", - "【focusColor】 : Colore di messa a fuoco 【Color?】", - "【mouseCursor】 : Stile del puntatore del mouse 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "Supporto per il passaggio", - "desc": [ - "【toggleable】 : Supporto per il passaggio 【bool】", - "toggleable è impostato su false per impostazione predefinita, quando è true, cliccando sul pulsante di scelta attivo, richiamerà i dati null, supportando così la necessità di passare tra selezionato e non selezionato." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ja_JP.json deleted file mode 100644 index 42f6cf60e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ja_JP.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "ラジオボタン·macOSスタイル", - "info": "macOSスタイルのラジオボタンで、valueとgroupValueによってこのラジオボタンが選択されているかどうかが決まります;onChangedはクリックイベントのコールバックです。", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoRadio 使用", - "desc": [ - "【value】 : ラジオボタンの値 【T】", - "【groupValue】 : 現在のマッチ値 【T】", - "【onChanged】 : 変更時のコールバック 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "CupertinoRadio 色", - "desc": [ - "【activeColor】 : アクティブな背景色 【Color?】", - "【fillColor】 : 塗りつぶし 【Color?】", - "【inactiveColor】 : 非アクティブな背景色 【Color?】", - "【focusColor】 : フォーカス色 【Color?】", - "【mouseCursor】 : マウスポインタのスタイル 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "切り替えサポート", - "desc": [ - "【toggleable】 : 切り替えサポート 【bool】", - "toggleableはデフォルトでfalseで、trueの場合、アクティブなラジオボタンをクリックするとnullデータがコールバックされ、選択と非選択の切り替えニーズをサポートします。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ko_KR.json deleted file mode 100644 index ce96904d1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ko_KR.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "라디오 버튼·macOS 스타일", - "info": "macOS 스타일의 라디오 버튼, value와 groupValue가 함께 이 라디오 버튼이 선택되었는지 여부를 결정합니다; onChanged는 클릭 이벤트를 콜백합니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoRadio 사용", - "desc": [ - "【value】 : 라디오 버튼 값 【T】", - "【groupValue】 : 현재 매칭 값 【T】", - "【onChanged】 : 변경 시 콜백 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "CupertinoRadio 색상", - "desc": [ - "【activeColor】 : 활성 배경 색상 【Color?】", - "【fillColor】 : 채우기 【Color?】", - "【inactiveColor】 : 비활성 배경 색상 【Color?】", - "【focusColor】 : 포커스 색상 【Color?】", - "【mouseCursor】 : 마우스 커서 스타일 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "토글 지원 여부", - "desc": [ - "【toggleable】 : 토글 지원 여부 【bool】", - "toggleable은 기본적으로 false이며, true일 때 활성화된 라디오 버튼을 클릭하면 null 데이터를 콜백하여 선택 및 비선택 전환 요구를 지원합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_pt_PT.json deleted file mode 100644 index 1e16f0768..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_pt_PT.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "Botão de Rádio·Estilo macOS", - "info": "Um botão de rádio no estilo macOS, onde value e groupValue determinam se o botão de rádio está selecionado; onChanged é o callback para o evento de clique.", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso do CupertinoRadio", - "desc": [ - "【value】 : Valor do botão de rádio 【T】", - "【groupValue】 : Valor correspondente atual 【T】", - "【onChanged】 : Callback de mudança 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "Cores do CupertinoRadio", - "desc": [ - "【activeColor】 : Cor de fundo ativa 【Color?】", - "【fillColor】 : Preenchimento 【Color?】", - "【inactiveColor】 : Cor de fundo inativa 【Color?】", - "【focusColor】 : Cor de foco 【Color?】", - "【mouseCursor】 : Estilo do cursor do mouse 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "Suporte a Alternância", - "desc": [ - "【toggleable】 : Suporta alternância 【bool】", - "toggleable é false por padrão, quando true, clicar no botão de rádio ativo retorna dados nulos, suportando a necessidade de alternar entre selecionado e não selecionado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ru_RU.json deleted file mode 100644 index 66cab929e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_ru_RU.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "Радиокнопка·macOS стиль", - "info": "Радиокнопка в стиле macOS, value и groupValue вместе определяют, выбрана ли эта радиокнопка; onChanged обратный вызов события клика.", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Использование CupertinoRadio", - "desc": [ - "【value】 : Значение радиокнопки 【T】", - "【groupValue】 : Текущее совпадающее значение 【T】", - "【onChanged】 : Обратный вызов при изменении 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "Цвета CupertinoRadio", - "desc": [ - "【activeColor】 : Цвет активного фона 【Color?】", - "【fillColor】 : Заполнение 【Color?】", - "【inactiveColor】 : Цвет неактивного фона 【Color?】", - "【focusColor】 : Цвет фокуса 【Color?】", - "【mouseCursor】 : Стиль указателя мыши 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "Поддержка переключения", - "desc": [ - "【toggleable】 : Поддержка переключения 【bool】", - "toggleable по умолчанию false, если true, при нажатии на активную радиокнопку будет возвращаться null, чтобы поддерживать переключение между выбором и отменой выбора." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_zh-CN.json deleted file mode 100644 index 89fe1e0fe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/desc_zh-CN.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 240, - "name": "CupertinoRadio", - "localName": "单选钮·macOS风格", - "info": "一个 macOS 风格的选钮,value 和 groupValue 一起决定该单选按钮是否被选中; onChanged 回调点击事件。", - "lever": 4, - "family": 1, - "linkIds": [ - 19, - 45 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "CupertinoRadio 使用", - "desc": [ - "【value】 : 选钮值 【T】", - "【groupValue】 : 当前匹配值 【T】", - "【onChanged】 : 改变时回调 【Function(T)】" - ] - }, - { - "file": "node2.dart", - "name": "CupertinoRadio 颜色", - "desc": [ - "【activeColor】 : 激活背景颜色 【Color?】", - "【fillColor】 : 填充 【Color?】", - "【inactiveColor】 : 未激活背景颜色 【Color?】", - "【focusColor】 : 聚焦色 【Color?】", - "【mouseCursor】 : 鼠标指针样式 【MouseCursor?】" - ] - }, - { - "file": "node3.dart", - "name": "是否支持切换", - "desc": [ - "【toggleable】 : 是否支持切换 【bool】", - "toggleable 默认为 false, 为 true 时,点击激活的选钮,会回调 null 数据,以此支持选中和非选择切换需求。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node1.dart deleted file mode 100644 index bfe2b26c8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node1.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class CupertinoRadioDemo1 extends StatefulWidget { - const CupertinoRadioDemo1({super.key}); - - @override - State createState() => _CupertinoRadioDemo1State(); -} - -class _CupertinoRadioDemo1State extends State { - List data = [0, 1, 2, 3, 4, 5]; - int _value = 1; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 6, - children: data - .map((int value) => CupertinoRadio( - value: value, - groupValue: _value, - onChanged: _onChange, - )) - .toList(), - ); - } - - void _onChange(int? value) { - setState(() => _value = value ?? 0); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node2.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node2.dart deleted file mode 100644 index d2925e4a5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node2.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class CupertinoRadioDemo2 extends StatefulWidget { - const CupertinoRadioDemo2({super.key}); - - @override - State createState() => _CupertinoRadioDemo2State(); -} - -class _CupertinoRadioDemo2State extends State { - List data = [0, 1, 2, 3, 4, 5]; - int _value = 1; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 6, - children: data - .map((int value) => CupertinoRadio( - mouseCursor: SystemMouseCursors.click, - activeColor: Colors.purple, - fillColor: Colors.cyanAccent, - inactiveColor: Colors.cyanAccent.withOpacity(0.05), - focusColor: Colors.yellow.withOpacity(0.2), - value: value, - groupValue: _value, - onChanged: _onChange)) - .toList(), - ); - } - - void _onChange(int? value) { - setState(() => _value = value ?? 0); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node3.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node3.dart deleted file mode 100644 index cc01444a5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoRadio/node3.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -class CupertinoRadioDemo3 extends StatefulWidget { - const CupertinoRadioDemo3({super.key}); - - @override - State createState() => _CupertinoRadioDemo3State(); -} - -class _CupertinoRadioDemo3State extends State { - List data = [0, 1, 2, 3, 4, 5]; - int? _value = 1; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 6, - children: data - .map((int value) => CupertinoRadio( - mouseCursor: SystemMouseCursors.click, - toggleable: true, - value: value, - groupValue: _value, - onChanged: _onChange)) - .toList(), - ); - } - - void _onChange(int? value) { - setState(() => _value = value); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_de_DE.json deleted file mode 100644 index db0a648aa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "iOS-Scrollbalken", - "info": "Ein iOS-stil Scrollbalken, der einen scrollbaren Bereich umschließen muss. Wenn der Bereich scrollbar ist, wird ein Scrollbalken angezeigt, um die Position anzuzeigen.", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoScrollbar", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_en_US.json deleted file mode 100644 index 0ed9921ff..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "iOS Scroll Indicator", - "info": "An iOS-style scroll indicator that needs to wrap a scrollable area. When scrollable, it displays a scroll bar for indication.", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoScrollbar", - "desc": [ - "【child】 : Child widget 【Widget】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_es_ES.json deleted file mode 100644 index eca87f9d0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "Barra de desplazamiento de iOS", - "info": "Barra de desplazamiento al estilo de iOS, necesita envolver un área desplazable. Cuando es desplazable, muestra una barra de desplazamiento para indicar.", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoScrollbar", - "desc": [ - "【child】 : Widget hijo 【Widget】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_fr_FR.json deleted file mode 100644 index b608b3806..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "Barre de défilement iOS", - "info": "Barre de défilement de style iOS, nécessite d'être enveloppée dans une zone défilable. Lorsque la zone est défilable, une barre de défilement est affichée pour l'indication.", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoScrollbar", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【controller】 : Contrôleur 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_it_IT.json deleted file mode 100644 index 27fca5422..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "Barra di scorrimento iOS", - "info": "Barra di scorrimento in stile iOS, deve avvolgere un'area scorrevole. Quando è possibile scorrere, viene visualizzata una barra di scorrimento per indicare.", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoScrollbar", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ja_JP.json deleted file mode 100644 index 792fad381..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "iOSスクロールバー", - "info": "iOSスタイルのスクロールバーで、スクロール可能な領域をラップする必要があります。スクロール可能な場合、スクロールバーが表示されて指示します。", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoScrollbarの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【controller】 : コントローラー 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ko_KR.json deleted file mode 100644 index 9cef34b09..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "iOS 스크롤바", - "info": "iOS 스타일의 스크롤바로, 스크롤 가능한 영역을 감싸야 하며, 스크롤이 가능할 때 스크롤을 나타내는 바가 표시됩니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoScrollbar 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【controller】 : 컨트롤러 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_pt_PT.json deleted file mode 100644 index 47a54f6c9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "Barra de rolagem iOS", - "info": "Barra de rolagem no estilo iOS, precisa envolver uma área rolável. Quando a área é rolável, uma barra de rolagem é exibida para indicar.", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoScrollbar", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ru_RU.json deleted file mode 100644 index 0200f9c4c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "Ползунок прокрутки iOS", - "info": "Ползунок прокрутки в стиле iOS, который должен оборачивать прокручиваемую область. Когда прокрутка возможна, отображается ползунок для индикации.", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoScrollbar", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【controller】 : Контроллер 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_zh-CN.json deleted file mode 100644 index 861998d77..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 195, - "name": "CupertinoScrollbar", - "localName": "iOS滑动指示栏", - "info": "iOS风格的滑动指示栏,需要包裹一个可滑动区域,当可滑动时,会显示滑动的bar用于指示。", - "lever": 3, - "family": 1, - "linkIds": [ - 194, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoScrollbar基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【controller】 : 控制器 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/node1_base.dart deleted file mode 100644 index 77436718a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoScrollbar/node1_base.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoScrollbar extends StatelessWidget { - const CustomCupertinoScrollbar({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - TextStyle get textStyle => const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: CupertinoScrollbar( - child: ListView( - padding: const EdgeInsets.symmetric(horizontal: 5), - children: data - .map((color) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - )) - .toList(), - ), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_de_DE.json deleted file mode 100644 index 0aee025ec..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_de_DE.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "iOS-Tab-Umschaltung", - "info": "iOS-Stil mehrerer Schaltflächenleiste, ähnlich wie ToggleButtons, kann Attribute wie Innenabstand, ausgewählte Farbe, Randfarbe usw. angeben.", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von iOS-Tabs", - "desc": [ - "【children】 : Widget-Map 【Map】", - "【onValueChanged】 : Rückruf bei Wertänderung 【ValueChanged】", - "【groupValue】 : Ausgewählter Wert 【T】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Farbe von CupertinoSegmentedControl", - "desc": [ - "【unselectedColor】 : Nicht ausgewählte Farbe 【Color】", - "【selectedColor】 : Ausgewählte Farbe 【Color】", - "【pressedColor】 : Gedrückte Farbe 【Color】", - "【borderColor】 : Randfarbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_en_US.json deleted file mode 100644 index 852b8e80d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_en_US.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "iOS Multi-Tab Switch", - "info": "iOS-style multi-button bar, similar in behavior to ToggleButtons, with customizable properties such as padding, selected color, border color, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of iOS Tabs", - "desc": [ - "【children】: Component Map 【Map】", - "【onValueChanged】: Value Change Callback 【ValueChanged】", - "【groupValue】: Selected Value 【T】", - "【padding】: Padding 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Colors of CupertinoSegmentedControl", - "desc": [ - "【unselectedColor】: Unselected Color 【Color】", - "【selectedColor】: Selected Color 【Color】", - "【pressedColor】: Pressed Color 【Color】", - "【borderColor】: Border Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_es_ES.json deleted file mode 100644 index e0d08d209..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_es_ES.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "Control de segmentos iOS", - "info": "Barra de múltiples botones al estilo iOS, similar a ToggleButtons, se pueden especificar propiedades como el relleno interno, el color seleccionado, el color del borde, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de pestañas iOS", - "desc": [ - "【children】 : Mapa de componentes 【Map】", - "【onValueChanged】 : Callback de cambio de valor 【ValueChanged】", - "【groupValue】 : Valor seleccionado 【T】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Colores de CupertinoSegmentedControl", - "desc": [ - "【unselectedColor】 : Color no seleccionado 【Color】", - "【selectedColor】 : Color seleccionado 【Color】", - "【pressedColor】 : Color al presionar 【Color】", - "【borderColor】 : Color del borde 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_fr_FR.json deleted file mode 100644 index da8eda6d8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_fr_FR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "Commutateur à onglets iOS", - "info": "Barre à boutons multiples de style iOS, similaire à ToggleButtons, avec des propriétés telles que le padding, la couleur sélectionnée, la couleur de la bordure, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base des onglets iOS", - "desc": [ - "【children】 : Map de composants 【Map】", - "【onValueChanged】 : Callback de changement de valeur 【ValueChanged】", - "【groupValue】 : Valeur sélectionnée 【T】", - "【padding】 : Padding 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Couleurs de CupertinoSegmentedControl", - "desc": [ - "【unselectedColor】 : Couleur non sélectionnée 【Color】", - "【selectedColor】 : Couleur sélectionnée 【Color】", - "【pressedColor】 : Couleur pressée 【Color】", - "【borderColor】 : Couleur de la bordure 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_it_IT.json deleted file mode 100644 index 409ec6e53..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_it_IT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "Interruttore a segmenti iOS", - "info": "Barra a pulsanti multipli in stile iOS, simile a ToggleButtons, con proprietà come padding, colore selezionato, colore del bordo, ecc.", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base delle schede iOS", - "desc": [ - "【children】 : Mappa dei componenti 【Map】", - "【onValueChanged】 : Callback per il cambio di valore 【ValueChanged】", - "【groupValue】 : Valore selezionato 【T】", - "【padding】 : Padding interno 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Colori di CupertinoSegmentedControl", - "desc": [ - "【unselectedColor】 : Colore non selezionato 【Color】", - "【selectedColor】 : Colore selezionato 【Color】", - "【pressedColor】 : Colore premuto 【Color】", - "【borderColor】 : Colore del bordo 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ja_JP.json deleted file mode 100644 index 16d592054..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ja_JP.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "iOSタブ切り替え", - "info": "iOSスタイルのマルチボタンバー、ToggleButtonsと同様の動作をします。内側の余白、選択色、枠線色などの属性を指定できます。", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "iOSタブの基本使用", - "desc": [ - "【children】 : コンポーネントマップ 【Map】", - "【onValueChanged】 : 値変更コールバック 【ValueChanged】", - "【groupValue】 : 選択値 【T】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "CupertinoSegmentedControlの色", - "desc": [ - "【unselectedColor】 : 未選択色 【Color】", - "【selectedColor】 : 選択色 【Color】", - "【pressedColor】 : 押下色 【Color】", - "【borderColor】 : 枠線色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ko_KR.json deleted file mode 100644 index c3c3a8be4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ko_KR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "iOS 다중 탭 전환", - "info": "iOS 스타일의 다중 버튼 바로, ToggleButtons와 유사하게 동작하며 내부 여백, 선택 색상, 테두리 색상 등의 속성을 지정할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "iOS 탭 기본 사용", - "desc": [ - "【children】 : 컴포넌트 맵 【Map】", - "【onValueChanged】 : 값 변경 콜백 【ValueChanged】", - "【groupValue】 : 선택된 값 【T】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "CupertinoSegmentedControl의 색상", - "desc": [ - "【unselectedColor】 : 선택되지 않은 색상 【Color】", - "【selectedColor】 : 선택된 색상 【Color】", - "【pressedColor】 : 눌린 색상 【Color】", - "【borderColor】 : 테두리 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_pt_PT.json deleted file mode 100644 index d9a5caca5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_pt_PT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "Alternância de múltiplas abas iOS", - "info": "Barra de múltiplos botões no estilo iOS, semelhante ao ToggleButtons, pode especificar atributos como preenchimento interno, cor selecionada, cor da borda, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de abas iOS", - "desc": [ - "【children】 : Mapa de componentes 【Map】", - "【onValueChanged】 : Callback de mudança de valor 【ValueChanged】", - "【groupValue】 : Valor selecionado 【T】", - "【padding】 : Preenchimento interno 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Cores do CupertinoSegmentedControl", - "desc": [ - "【unselectedColor】 : Cor não selecionada 【Color】", - "【selectedColor】 : Cor selecionada 【Color】", - "【pressedColor】 : Cor pressionada 【Color】", - "【borderColor】 : Cor da borda 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ru_RU.json deleted file mode 100644 index c78e5cabf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_ru_RU.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "iOS многоколоночный переключатель", - "info": "iOS-стиль многокнопочной панели, поведение аналогично ToggleButtons, можно указать такие свойства, как внутренние отступы, цвет выделения, цвет границы и т.д.", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование вкладок iOS", - "desc": [ - "【children】 : Карта компонентов 【Map】", - "【onValueChanged】 : Обратный вызов изменения значения 【ValueChanged】", - "【groupValue】 : Выбранное значение 【T】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Цвета CupertinoSegmentedControl", - "desc": [ - "【unselectedColor】 : Цвет невыделенного 【Color】", - "【selectedColor】 : Цвет выделенного 【Color】", - "【pressedColor】 : Цвет нажатия 【Color】", - "【borderColor】 : Цвет границы 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_zh-CN.json deleted file mode 100644 index ae97e64e5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/desc_zh-CN.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 262, - "name": "CupertinoSegmentedControl", - "localName": "iOS多栏切换", - "info": "iOS风格的多按钮栏,表现和ToggleButtons类似,可指定内边距、选中色、边线色等属性。", - "lever": 4, - "family": 1, - "linkIds": [ - 33, - 256 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "iOS页签基本使用", - "desc": [ - "【children】 : 组件Map 【Map】", - "【onValueChanged】 : 值改变回调 【ValueChanged】", - "【groupValue】 : 选中值 【T】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "CupertinoSegmentedControl的颜色", - "desc": [ - "【unselectedColor】 : 未选中色 【Color】", - "【selectedColor】 : 选中色 【Color】", - "【pressedColor】 : 按下色 【Color】", - "【borderColor】 : 边线色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/node1_base.dart deleted file mode 100644 index 357ecb5ef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/node1_base.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/cupertino.dart'; - -/// create by 张风捷特烈 on 2020/6/30 -/// contact me by email 1981462002@qq.com - -class CupertinoSegmentedControlDemo extends StatefulWidget { - const CupertinoSegmentedControlDemo({Key? key}) : super(key: key); - - @override - _CupertinoSegmentedControlDemoState createState() => - _CupertinoSegmentedControlDemoState(); -} - -class _CupertinoSegmentedControlDemoState - extends State { - int _value = 1; - - @override - Widget build(BuildContext context) { - return CupertinoSegmentedControl( - groupValue: _value, - onValueChanged: _onValueChanged, - padding: const EdgeInsets.only(top: 20), - children: const { - 1: Padding( - padding: EdgeInsets.only(left: 20, right: 20), - child: Text("混沌战士"), - ), - 2: Text("青眼白龙"), - 3: Text("黑魔术士"), - }, - ); - } - - void _onValueChanged(int value) { - setState(() { - _value=value; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/node2_color.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/node2_color.dart deleted file mode 100644 index 1a5098ed1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSegmentedControl/node2_color.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/6/30 -/// contact me by email 1981462002@qq.com - -class CupertinoSegmentedControlColor extends StatefulWidget { - const CupertinoSegmentedControlColor({Key? key}) : super(key: key); - - @override - _CupertinoSegmentedControlColorState createState() => - _CupertinoSegmentedControlColorState(); -} - -class _CupertinoSegmentedControlColorState - extends State { - int _value = 1; - - @override - Widget build(BuildContext context) { - return CupertinoSegmentedControl( - unselectedColor: Colors.yellow, - selectedColor: Colors.green, - pressedColor: Colors.blue, - borderColor: Colors.red, - groupValue: _value, - onValueChanged: _onValueChanged, - padding: const EdgeInsets.only(top: 20), - children: const { - 1: Padding( - padding: EdgeInsets.only(left: 20, right: 20), - child: Text("混沌战士"), - ), - 2: Text("青眼白龙"), - 3: Text("黑魔术士"), - }, - ); - } - - void _onValueChanged(int value) { - setState(() { - _value=value; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_de_DE.json deleted file mode 100644 index c44512a7b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "iOS-Schieberegler", - "info": "iOS-stilisiertes Schieberegler-Widget, das zwischen einem festgelegten Minimum und Maximum verschoben werden kann. Ermöglicht die Angabe von Farben und empfängt Rückrufe bei Fortschrittsänderungen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoSlider", - "desc": [ - "【value】 : Wert 【double】", - "【min】 : Mindestwert 【double】", - "【max】 : Höchstwert 【double】", - "【activeColor】 : Aktive Farbe 【Color】", - "【thumbColor】 : Farbe des Reglers 【Color】", - "【divisions】 : Anzahl der Abschnitte 【int】", - "【onChangeStart】 : Rückruf beim Start des Verschiebens 【Function(double)】", - "【onChangeEnd】 : Rückruf beim Ende des Verschiebens 【Function(double)】", - "【onChanged】 : Rückruf bei Änderung 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_en_US.json deleted file mode 100644 index d8ca6668d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "iOS Slider", - "info": "An iOS-style slider component that allows dragging to select between a specified maximum and minimum value. You can specify colors and receive callbacks for progress changes.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoSlider", - "desc": [ - "【value】: value 【double】", - "【min】: minimum value 【double】", - "【max】: maximum value 【double】", - "【activeColor】: active color 【Color】", - "【thumbColor】: thumb color 【Color】", - "【divisions】: number of divisions 【int】", - "【onChangeStart】: callback when sliding starts 【Function(double)】", - "【onChangeEnd】: callback when sliding ends 【Function(double)】", - "【onChanged】: callback when value changes 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_es_ES.json deleted file mode 100644 index c14cbf8bd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "Control deslizante de iOS", - "info": "Componente de control deslizante al estilo de iOS, que permite seleccionar arrastrando entre un valor máximo y mínimo especificados. Se puede especificar el color y recibir una devolución de llamada para los cambios de progreso.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoSlider", - "desc": [ - "【value】 : valor 【double】", - "【min】 : valor mínimo 【double】", - "【max】 : valor máximo 【double】", - "【activeColor】 : color activo 【Color】", - "【thumbColor】 : color del círculo 【Color】", - "【divisions】 : número de divisiones 【int】", - "【onChangeStart】 : devolución de llamada al comenzar a deslizar 【Function(double)】", - "【onChangeEnd】 : devolución de llamada al finalizar el deslizamiento 【Function(double)】", - "【onChanged】 : devolución de llamada al cambiar 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_fr_FR.json deleted file mode 100644 index 09d1ddd2d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "Curseur iOS", - "info": "Composant curseur de style iOS, permettant de faire glisser et sélectionner entre une valeur minimale et maximale spécifiées. Peut spécifier la couleur et recevoir un rappel de changement de progression.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoSlider", - "desc": [ - "【value】 : valeur 【double】", - "【min】 : valeur minimale 【double】", - "【max】 : valeur maximale 【double】", - "【activeColor】 : couleur active 【Color】", - "【thumbColor】 : couleur du curseur 【Color】", - "【divisions】 : nombre de divisions 【int】", - "【onChangeStart】 : rappel de début de glissement 【Function(double)】", - "【onChangeEnd】 : rappel de fin de glissement 【Function(double)】", - "【onChanged】 : rappel de changement 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_it_IT.json deleted file mode 100644 index 6d3a68f24..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "Cursore iOS", - "info": "Componente cursore in stile iOS, che consente di selezionare trascinando tra un valore massimo e minimo specificato. È possibile specificare il colore e ricevere un callback per le modifiche di avanzamento.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoSlider", - "desc": [ - "【value】 : valore 【double】", - "【min】 : valore minimo 【double】", - "【max】 : valore massimo 【double】", - "【activeColor】 : colore attivo 【Color】", - "【thumbColor】 : colore del cerchio 【Color】", - "【divisions】 : numero di divisioni 【int】", - "【onChangeStart】 : callback di inizio scorrimento 【Function(double)】", - "【onChangeEnd】 : callback di fine scorrimento 【Function(double)】", - "【onChanged】 : callback di modifica 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ja_JP.json deleted file mode 100644 index e0265be8b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "iOSスライダー", - "info": "iOSスタイルのスライダーコンポーネントで、指定された最大値と最小値の間でドラッグして選択できます。色を指定でき、進捗変化のコールバックを受け取ります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoSliderの基本使用", - "desc": [ - "【value】 : 数値 【double】", - "【min】 : 最小値 【double】", - "【max】 : 最大値 【double】", - "【activeColor】 : アクティブカラー 【Color】", - "【thumbColor】 : サークルカラー 【Color】", - "【divisions】 : セグメント数 【int】", - "【onChangeStart】 : スライド開始コールバック 【Function(double)】", - "【onChangeEnd】 : スライド終了コールバック 【Function(double)】", - "【onChanged】 : 変更時コールバック 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ko_KR.json deleted file mode 100644 index 7ec7d2484..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "iOS 슬라이더", - "info": "iOS 스타일의 슬라이더 컴포넌트로, 지정된 최대값과 최소값 사이에서 드래그하여 선택할 수 있습니다. 색상을 지정할 수 있으며, 진행 상황 변화 콜백을 받을 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoSlider 기본 사용", - "desc": [ - "【value】 : 값 【double】", - "【min】 : 최소값 【double】", - "【max】 : 최대값 【double】", - "【activeColor】 : 활성 색상 【Color】", - "【thumbColor】 : 원형 색상 【Color】", - "【divisions】 : 분할 수 【int】", - "【onChangeStart】 : 슬라이드 시작 콜백 【Function(double)】", - "【onChangeEnd】 : 슬라이드 종료 콜백 【Function(double)】", - "【onChanged】 : 변경 시 콜백 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_pt_PT.json deleted file mode 100644 index dc6d97aef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "Controlo Deslizante iOS", - "info": "Componente de controlo deslizante no estilo iOS, que permite selecionar arrastando entre um valor máximo e mínimo especificados. Pode-se especificar cores e receber callbacks de mudança de progresso.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CupertinoSlider", - "desc": [ - "【value】 : valor 【double】", - "【min】 : valor mínimo 【double】", - "【max】 : valor máximo 【double】", - "【activeColor】 : cor ativa 【Color】", - "【thumbColor】 : cor do círculo 【Color】", - "【divisions】 : número de divisões 【int】", - "【onChangeStart】 : callback de início de deslize 【Function(double)】", - "【onChangeEnd】 : callback de fim de deslize 【Function(double)】", - "【onChanged】 : callback de mudança 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ru_RU.json deleted file mode 100644 index 4c3511136..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "iOS слайдер", - "info": "Компонент слайдера в стиле iOS, который позволяет выбирать значения путем перетаскивания между указанными минимальным и максимальным значениями. Можно указать цвет и получать обратные вызовы при изменении прогресса.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoSlider", - "desc": [ - "【value】 : значение 【double】", - "【min】 : минимальное значение 【double】", - "【max】 : максимальное значение 【double】", - "【activeColor】 : активный цвет 【Color】", - "【thumbColor】 : цвет круга 【Color】", - "【divisions】 : количество делений 【int】", - "【onChangeStart】 : обратный вызов при начале перетаскивания 【Function(double)】", - "【onChangeEnd】 : обратный вызов при завершении перетаскивания 【Function(double)】", - "【onChanged】 : обратный вызов при изменении 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_zh-CN.json deleted file mode 100644 index 09a46305e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 43, - "name": "CupertinoSlider", - "localName": "iOS滑块", - "info": "iOS风格的滑块组件,可以在指定的最大值和最小值之间拖动选择。可指定颜色,接收进度变化回调。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoSlider基本使用", - "desc": [ - "【value】 : 数值 【double】", - "【min】 : 最小值 【double】", - "【max】 : 最大值 【double】", - "【activeColor】 : 激活颜色 【Color】", - "【thumbColor】 : 圆形颜色 【Color】", - "【divisions】 : 分段数 【int】", - "【onChangeStart】 : 开始滑动回调 【Function(double)】", - "【onChangeEnd】 : 滑动结束回调 【Function(double)】", - "【onChanged】 : 改变时回调 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/node1_base.dart deleted file mode 100644 index b115de460..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlider/node1_base.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoSlider extends StatefulWidget { - const CustomCupertinoSlider({Key? key}) : super(key: key); - - @override - _CustomCupertinoSliderState createState() => _CustomCupertinoSliderState(); -} - -class _CustomCupertinoSliderState extends State { - double _value = 0.0; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text('当前值:${_value.toStringAsFixed(1)}'), - CupertinoSlider( - value: _value, - divisions: 180, - min: 0.0, - max: 360.0, - activeColor: Colors.green, - thumbColor: Colors.white, - onChangeStart: (value) => print('开始滑动:$value'), - onChangeEnd: (value) => print('滑动结束:$value'), - onChanged: (value) { - setState(() { - _value = value; - }); - }), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_de_DE.json deleted file mode 100644 index a6e5aa82e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "iOS-Schieberegister", - "info": "iOS-stilisiertes Schieberegister, unterstützt Klicken und Schieben zum Wechseln. Ermöglicht die Angabe von Registerfarben, Hintergrundfarben, Rändern und anderen Eigenschaften.", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung des iOS-Schieberegisters", - "desc": [ - "【children】 : Komponenten-Map 【Map】", - "【onValueChanged】 : Rückruf bei Wertänderung 【ValueChanged】", - "【groupValue】 : Ausgewählter Wert 【T】", - "【thumbColor】 : Ausgewählte Farbe 【Color】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_en_US.json deleted file mode 100644 index a00cd8a8d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "iOS Sliding Tabs", - "info": "iOS-style sliding tabs, supporting click and slide to switch. You can specify tab color, background color, margin and other properties.", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of iOS Sliding Tabs", - "desc": [ - "【children】: Component Map 【Map】", - "【onValueChanged】: Value Change Callback 【ValueChanged】", - "【groupValue】: Selected Value 【T】", - "【thumbColor】: Selected Color 【Color】", - "【backgroundColor】: Background Color 【Color】", - "【padding】: Padding 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_es_ES.json deleted file mode 100644 index 31cb1f686..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "Pestañas deslizantes de iOS", - "info": "Pestañas deslizantes al estilo de iOS, que admiten el cambio mediante clics y deslizamientos. Se pueden especificar propiedades como el color de la pestaña, el color de fondo, los márgenes, etc.", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de pestañas deslizantes de iOS", - "desc": [ - "【children】: Mapa de componentes 【Map】", - "【onValueChanged】: Callback de cambio de valor 【ValueChanged】", - "【groupValue】: Valor seleccionado 【T】", - "【thumbColor】: Color de selección 【Color】", - "【backgroundColor】: Color de fondo 【Color】", - "【padding】: Relleno interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_fr_FR.json deleted file mode 100644 index 3948c259a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "Onglets coulissants iOS", - "info": "Onglets coulissants de style iOS, prenant en charge le changement par clic ou glissement. Vous pouvez spécifier des propriétés telles que la couleur des onglets, la couleur de fond, les marges, etc.", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base des onglets coulissants iOS", - "desc": [ - "【children】 : Map des composants 【Map】", - "【onValueChanged】 : Rappel de changement de valeur 【ValueChanged】", - "【groupValue】 : Valeur sélectionnée 【T】", - "【thumbColor】 : Couleur de sélection 【Color】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_it_IT.json deleted file mode 100644 index f1e82bead..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "Schede scorrevoli iOS", - "info": "Schede scorrevoli in stile iOS, supportano il passaggio tramite clic e scorrimento. È possibile specificare proprietà come il colore delle schede, il colore di sfondo, i margini, ecc.", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base delle schede scorrevoli iOS", - "desc": [ - "【children】 : Mappa dei componenti 【Map】", - "【onValueChanged】 : Callback per il cambio di valore 【ValueChanged】", - "【groupValue】 : Valore selezionato 【T】", - "【thumbColor】 : Colore selezionato 【Color】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ja_JP.json deleted file mode 100644 index 451a966e9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "iOSスライドタブ", - "info": "iOSスタイルのスライドタブで、クリックやスライドでの切り替えをサポートします。タブの色、背景色、余白などの属性を指定できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "iOSスライドタブの基本使用", - "desc": [ - "【children】 : コンポーネントMap 【Map】", - "【onValueChanged】 : 値変更コールバック 【ValueChanged】", - "【groupValue】 : 選択値 【T】", - "【thumbColor】 : 選択色 【Color】", - "【backgroundColor】 : 背景色 【Color】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ko_KR.json deleted file mode 100644 index 480697947..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "iOS 슬라이딩 탭", - "info": "iOS 스타일의 슬라이딩 탭으로, 클릭 및 슬라이드 전환을 지원합니다. 탭 색상, 배경색, 여백 등 속성을 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "iOS 슬라이딩 탭 기본 사용", - "desc": [ - "【children】 : 컴포넌트 맵 【Map】", - "【onValueChanged】 : 값 변경 콜백 【ValueChanged】", - "【groupValue】 : 선택된 값 【T】", - "【thumbColor】 : 선택된 색상 【Color】", - "【backgroundColor】 : 배경색 【Color】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_pt_PT.json deleted file mode 100644 index 7f6034f8f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "Separador deslizante iOS", - "info": "Separador deslizante ao estilo iOS, suporta alternância por toque e deslize. Permite especificar propriedades como cor do separador, cor de fundo, margens, etc.", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do separador deslizante iOS", - "desc": [ - "【children】 : Mapa de componentes 【Map】", - "【onValueChanged】 : Callback de mudança de valor 【ValueChanged】", - "【groupValue】 : Valor selecionado 【T】", - "【thumbColor】 : Cor de seleção 【Color】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【padding】 : Preenchimento interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ru_RU.json deleted file mode 100644 index c8696f4cf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "iOS слайдер вкладок", - "info": "Слайдер вкладок в стиле iOS, поддерживает переключение по клику и скольжению. Можно указать цвет вкладок, цвет фона, отступы и другие свойства.", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование iOS слайдера вкладок", - "desc": [ - "【children】 : Карта компонентов 【Map】", - "【onValueChanged】 : Обратный вызов при изменении значения 【ValueChanged】", - "【groupValue】 : Выбранное значение 【T】", - "【thumbColor】 : Цвет выбранного элемента 【Color】", - "【backgroundColor】 : Цвет фона 【Color】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_zh-CN.json deleted file mode 100644 index cac065fcc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 256, - "name": "CupertinoSlidingSegmentedControl", - "localName": "iOS滑动页签", - "info": "iOS风格的滑动页签,支持点击、滑动切换。可指定页签颜色、背景色、边距等属性。", - "lever": 3, - "family": 1, - "linkIds": [ - 33, - 262 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "iOS滑动页签基本使用", - "desc": [ - "【children】 : 组件Map 【Map】", - "【onValueChanged】 : 值改变回调 【ValueChanged】", - "【groupValue】 : 选中值 【T】", - "【thumbColor】 : 选中色 【Color】", - "【backgroundColor】 : 背景色 【Color】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/node1_base.dart deleted file mode 100644 index 088ae395e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSlidingSegmentedControl/node1_base.dart +++ /dev/null @@ -1,44 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - -class CupertinoSlidingSegmentedControlDemo extends StatefulWidget { - const CupertinoSlidingSegmentedControlDemo({Key? key}) : super(key: key); - - @override - _CupertinoSlidingSegmentedControlDemoState createState() => - _CupertinoSlidingSegmentedControlDemoState(); -} - -class _CupertinoSlidingSegmentedControlDemoState - extends State { - int _value = 1; - - @override - Widget build(BuildContext context) { - return CupertinoSlidingSegmentedControl( - groupValue: _value, - onValueChanged: _onValueChanged, - thumbColor: Colors.amberAccent, - backgroundColor: Colors.green.withAlpha(99), - padding: const EdgeInsets.all(5), - children: const { - 1: Padding( - padding: EdgeInsets.only(left: 20, right: 20), - child: Text("混沌战士"), - ), - 2: Text("青眼白龙"), - 3: Text("黑魔导"), - }, - ); - } - - void _onValueChanged(int? value) { - if(value==null) return; - setState(() { - _value=value; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_de_DE.json deleted file mode 100644 index 56853543c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "iOS-Schalter", - "info": "Ein iOS-stilbasierter Umschalter, der häufig für die Konfigurationsumschaltung verwendet wird, kann Farben angeben und empfängt Rückrufe für Zustandsänderungen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoSwitch", - "desc": [ - "【value】 : Ob ausgewählt 【double】", - "【activeColor】 : Farbe im aktivierten Zustand 【Color】", - "【onChanged】 : Umschalt-Rückruf 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_en_US.json deleted file mode 100644 index c4226620d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "iOS Switch", - "info": "An iOS-style toggle switch, commonly used for configuration toggles, can specify colors, and receives state change callbacks.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoSwitch", - "desc": [ - "【value】: Whether it is selected 【double】", - "【activeColor】: Active state color 【Color】", - "【onChanged】: Toggle callback 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_es_ES.json deleted file mode 100644 index 060362991..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "Interruptor iOS", - "info": "Interruptor de estilo iOS, comúnmente utilizado para cambiar configuraciones, se puede especificar el color y recibe una devolución de llamada para cambios de estado.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoSwitch", - "desc": [ - "【value】 : si está seleccionado 【double】", - "【activeColor】 : color del estado activo 【Color】", - "【onChanged】 : devolución de llamada de cambio 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_fr_FR.json deleted file mode 100644 index a3f017956..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "Bouton de commutation iOS", - "info": "Bouton de commutation de style iOS, souvent utilisé pour la commutation de configuration, peut spécifier la couleur et recevoir un rappel de changement d'état.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoSwitch", - "desc": [ - "【value】 : Est-ce sélectionné 【double】", - "【activeColor】 : Couleur de l'état actif 【Color】", - "【onChanged】 : Rappel de commutation 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_it_IT.json deleted file mode 100644 index 18d6fe7c1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "Interruttore iOS", - "info": "Interruttore in stile iOS, comunemente utilizzato per il cambio di configurazione, può specificare il colore e riceve un callback per i cambiamenti di stato.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoSwitch", - "desc": [ - "【value】 : Se è selezionato 【double】", - "【activeColor】 : Colore dello stato attivo 【Color】", - "【onChanged】 : Callback di cambio 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ja_JP.json deleted file mode 100644 index 7d8343e99..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "iOSスイッチ", - "info": "iOSスタイルのトグルスイッチ。設定の切り替えに頻繁に使用され、色を指定でき、状態変化のコールバックを受け取ります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoSwitchの基本使用", - "desc": [ - "【value】 : 選択されているかどうか 【double】", - "【activeColor】 : アクティブ状態の色 【Color】", - "【onChanged】 : 切り替えコールバック 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ko_KR.json deleted file mode 100644 index de3ac1587..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "iOS 스위치", - "info": "iOS 스타일의 토글 스위치로, 설정 전환에 자주 사용되며 색상을 지정할 수 있고 상태 변화 콜백을 받습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoSwitch 기본 사용법", - "desc": [ - "【value】 : 선택 여부 【double】", - "【activeColor】 : 활성 상태 색상 【Color】", - "【onChanged】 : 전환 콜백 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_pt_PT.json deleted file mode 100644 index cbc0fa543..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "Interruptor iOS", - "info": "Interruptor de estilo iOS, frequentemente usado para alternar configurações, pode especificar cores e receber callbacks de mudança de estado.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoSwitch", - "desc": [ - "【value】 : Se está selecionado 【double】", - "【activeColor】 : Cor do estado ativo 【Color】", - "【onChanged】 : Callback de alternância 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ru_RU.json deleted file mode 100644 index f8f139a53..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "iOS переключатель", - "info": "Переключатель в стиле iOS, часто используется для переключения настроек, может быть указан цвет, получает обратный вызов при изменении состояния.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoSwitch", - "desc": [ - "【value】 : выбрано ли 【double】", - "【activeColor】 : цвет активного состояния 【Color】", - "【onChanged】 : обратный вызов переключения 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_zh-CN.json deleted file mode 100644 index b07fe449b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 41, - "name": "CupertinoSwitch", - "localName": "iOS切钮", - "info": "iOS风格的切换选钮,常用于配置的切换,可指定颜色,接收状态变化回调。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoSwitch基本使用", - "desc": [ - "【value】 : 是否选中 【double】", - "【activeColor】 : 激活态颜色 【Color】", - "【onChanged】 : 切换回调 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/node1_base.dart deleted file mode 100644 index db405538d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoSwitch/node1_base.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoSwitch extends StatefulWidget { - const CustomCupertinoSwitch({Key? key}) : super(key: key); - - @override - _CustomCupertinoSwitchState createState() => _CustomCupertinoSwitchState(); -} - -class _CustomCupertinoSwitchState extends State { - final List colors = [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - - bool _checked = false; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: colors - .map((e) => CupertinoSwitch( - value: _checked, - activeColor: e, - onChanged: (v) { - setState(() => _checked = v); - })).toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_de_DE.json deleted file mode 100644 index 43f67a679..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "iOS-Tab", - "info": "Ein iOS-stilvoller TabBar, der normalerweise für CupertinoTabScaffold verwendet wird. Kann Farben, Symbolgrößen, Ränder usw. angeben. Empfängt Klickereignisse für Elemente.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoTabBar", - "desc": [ - "【currentIndex】 : Aktueller aktivierter Index 【Widget】", - "【items】 : Elementkomponenten 【Widget】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【inactiveColor】 : Inaktive Farbe 【Color】", - "【activeColor】 : Aktive Farbe 【Color】", - "【iconSize】 : Symbolgröße 【double】", - "【border】 : Rand 【Border】", - "【onTap】 : Klickereignis 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_en_US.json deleted file mode 100644 index dd8e27711..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "iOS Tab", - "info": "An iOS-style TabBar, typically used in CupertinoTabScaffold. Can specify color, icon size, border, and other data. Receives item click events.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoTabBar", - "desc": [ - "【currentIndex】 : Current active index 【Widget】", - "【items】 : Item components 【Widget】", - "【backgroundColor】 : Background color 【Color】", - "【inactiveColor】 : Inactive color 【Color】", - "【activeColor】 : Active color 【Color】", - "【iconSize】 : Icon size 【double】", - "【border】 : Border 【Border】", - "【onTap】 : Click event 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_es_ES.json deleted file mode 100644 index bb3d70228..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "Pestañas iOS", - "info": "Un TabBar de estilo iOS, generalmente utilizado en CupertinoTabScaffold. Se pueden especificar datos como el color, el tamaño del icono, el borde, etc. Recibe eventos de clic en los elementos.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoTabBar", - "desc": [ - "【currentIndex】 : Índice activo actual 【Widget】", - "【items】 : Componentes de elementos 【Widget】", - "【backgroundColor】 : Color de fondo 【Color】", - "【inactiveColor】 : Color inactivo 【Color】", - "【activeColor】 : Color activo 【Color】", - "【iconSize】 : Tamaño del icono 【double】", - "【border】 : Borde 【Border】", - "【onTap】 : Evento de clic 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_fr_FR.json deleted file mode 100644 index 6ff1d38ab..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "Onglets iOS", - "info": "Une barre d'onglets de style iOS, généralement utilisée dans CupertinoTabScaffold. Peut spécifier des données telles que la couleur, la taille des icônes, les bordures, etc. Reçoit les événements de clic sur les éléments.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoTabBar", - "desc": [ - "【currentIndex】 : Index actif actuel 【Widget】", - "【items】 : Composants des éléments 【Widget】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【inactiveColor】 : Couleur inactive 【Color】", - "【activeColor】 : Couleur active 【Color】", - "【iconSize】 : Taille de l'icône 【double】", - "【border】 : Bordure 【Border】", - "【onTap】 : Événement de clic 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_it_IT.json deleted file mode 100644 index a84652e00..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "Schede iOS", - "info": "Una TabBar in stile iOS, solitamente utilizzata in CupertinoTabScaffold. È possibile specificare colore, dimensione delle icone, bordi, ecc. Riceve gli eventi di click sugli item.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di CupertinoTabBar", - "desc": [ - "【currentIndex】 : Indice attualmente attivo 【Widget】", - "【items】 : Componenti degli elementi 【Widget】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【inactiveColor】 : Colore inattivo 【Color】", - "【activeColor】 : Colore attivo 【Color】", - "【iconSize】 : Dimensione dell'icona 【double】", - "【border】 : Bordo 【Border】", - "【onTap】 : Evento di click 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ja_JP.json deleted file mode 100644 index 1a0143453..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "iOSタブ", - "info": "iOSスタイルのTabBarで、通常CupertinoTabScaffoldで使用されます。色、アイコンサイズ、ボーダーなどのデータを指定できます。アイテムのクリックイベントを受け取ります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabBarの基本使い方", - "desc": [ - "【currentIndex】 : 現在のアクティブインデックス 【Widget】", - "【items】 : アイテムコンポーネント 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【inactiveColor】 : 非アクティブ色 【Color】", - "【activeColor】 : アクティブ色 【Color】", - "【iconSize】 : アイコンサイズ 【double】", - "【border】 : ボーダー 【Border】", - "【onTap】 : クリックイベント 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ko_KR.json deleted file mode 100644 index d97ac75a7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "iOS 탭", - "info": "iOS 스타일의 TabBar로, 일반적으로 CupertinoTabScaffold에서 사용됩니다. 색상, 아이콘 크기, 테두리 등을 지정할 수 있습니다. 아이템의 클릭 이벤트를 수신합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabBar 기본 사용법", - "desc": [ - "【currentIndex】 : 현재 활성화된 인덱스 【Widget】", - "【items】 : 항목 위젯 【Widget】", - "【backgroundColor】 : 배경색 【Color】", - "【inactiveColor】 : 비활성화 색상 【Color】", - "【activeColor】 : 활성화 색상 【Color】", - "【iconSize】 : 아이콘 크기 【double】", - "【border】 : 테두리 【Border】", - "【onTap】 : 클릭 이벤트 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_pt_PT.json deleted file mode 100644 index 9b9feb286..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "Separador de Páginas iOS", - "info": "Um TabBar de estilo iOS, geralmente usado em CupertinoTabScaffold. Pode especificar dados como cor, tamanho do ícone, borda, etc. Recebe eventos de clique nos itens.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CupertinoTabBar", - "desc": [ - "【currentIndex】 : Índice ativo atual 【Widget】", - "【items】 : Componentes dos itens 【Widget】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【inactiveColor】 : Cor inativa 【Color】", - "【activeColor】 : Cor ativa 【Color】", - "【iconSize】 : Tamanho do ícone 【double】", - "【border】 : Borda 【Border】", - "【onTap】 : Evento de clique 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ru_RU.json deleted file mode 100644 index 3f1d18321..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "iOS вкладки", - "info": "TabBar в стиле iOS, обычно используется в CupertinoTabScaffold. Можно указать цвет, размер иконок, границы и другие данные. Получает события кликов по элементам.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoTabBar", - "desc": [ - "【currentIndex】 : текущий активный индекс 【Widget】", - "【items】 : компоненты элементов 【Widget】", - "【backgroundColor】 : цвет фона 【Color】", - "【inactiveColor】 : цвет неактивного элемента 【Color】", - "【activeColor】 : цвет активного элемента 【Color】", - "【iconSize】 : размер иконки 【double】", - "【border】 : граница 【Border】", - "【onTap】 : событие клика 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_zh-CN.json deleted file mode 100644 index 323d78bd8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 63, - "name": "CupertinoTabBar", - "localName": "iOS页签", - "info": "一个iOS风格的TabBar,通常用于CupertinoTabScaffold。可指定颜色、图标大小、边线等数据。接收item的点击事件。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabBar基本用法", - "desc": [ - "【currentIndex】 : 当前激活索引 【Widget】", - "【items】 : 条目组件 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【inactiveColor】 : 非激活色 【Color】", - "【activeColor】 : 激活色 【Color】", - "【iconSize】 : 图标大小 【double】", - "【border】 : 边线 【Border】", - "【onTap】 : 点击事件 【Function(int)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/node1_base.dart deleted file mode 100644 index 523ee6171..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabBar/node1_base.dart +++ /dev/null @@ -1,63 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoTabBar extends StatefulWidget { - const CustomCupertinoTabBar({Key? key}) : super(key: key); - - @override - _CustomCupertinoTabBarState createState() => _CustomCupertinoTabBarState(); -} - -class _CustomCupertinoTabBarState extends State { - int _position = 0; - final Map iconsMap = { - //底栏图标 - "图鉴": Icons.home, "动态": Icons.toys, - "喜欢": Icons.favorite, "手册": Icons.class_, - "我的": Icons.account_circle, - }; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildContent(context), - _buildTabBar(), - ], - ); - } - - Widget _buildTabBar() { - return CupertinoTabBar( - currentIndex: _position, - onTap: (value) => setState(() => _position = value), - items: iconsMap.keys - .map((e) => BottomNavigationBarItem( - icon: Icon( - iconsMap[e], - ), - label: e, - )) - .toList(), - activeColor: Colors.blue, - inactiveColor: const Color(0xff333333), - backgroundColor: const Color(0xfff1f1f1), - iconSize: 25.0, - ); - } - - Widget _buildContent(BuildContext context) { - return Container( - alignment: Alignment.center, - width: MediaQuery.of(context).size.width, - height: 150, - color: const Color(0xffE7F3FC), - child: Text( - iconsMap.keys.toList()[_position], - style: const TextStyle(color: Colors.blue, fontSize: 24), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_de_DE.json deleted file mode 100644 index b87197045..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "iOS-Tab-Scaffold", - "info": "iOS-stilisiertes Seitenlayout-Scaffold, das eine Navigationsleiste am unteren Rand und eine Hauptinhaltseite festlegen kann.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoTabScaffold", - "desc": [ - "【tabBar】 : Tab-Leiste 【CupertinoTabBar】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【controller】 : Controller 【CupertinoTabController】", - "【tabBuilder】 : Seitenkonstruktor 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_en_US.json deleted file mode 100644 index 1ab677a42..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "iOS Tab Scaffold", - "info": "iOS style page layout scaffold structure, which can specify the bottom navigation bar and the main content page.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoTabScaffold", - "desc": [ - "【tabBar】: Tab bar 【CupertinoTabBar】", - "【backgroundColor】: Background color 【Color】", - "【controller】: Controller 【CupertinoTabController】", - "【tabBuilder】: Page builder 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_es_ES.json deleted file mode 100644 index 2b2cfcd9c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "Andamio de pestañas iOS", - "info": "Estructura de andamio de diseño de página al estilo iOS, que permite especificar la barra de navegación inferior y la página de contenido principal.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoTabScaffold", - "desc": [ - "【tabBar】 : Barra de pestañas 【CupertinoTabBar】", - "【backgroundColor】 : Color de fondo 【Color】", - "【controller】 : Controlador 【CupertinoTabController】", - "【tabBuilder】 : Constructor de página 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_fr_FR.json deleted file mode 100644 index f0c9844e2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "Échafaudage d'onglets iOS", - "info": "Structure d'échafaudage de mise en page de style iOS, permettant de spécifier la barre de navigation en bas et la page de contenu principal.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoTabScaffold", - "desc": [ - "【tabBar】 : Barre d'onglets 【CupertinoTabBar】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【controller】 : Contrôleur 【CupertinoTabController】", - "【tabBuilder】 : Constructeur de page 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_it_IT.json deleted file mode 100644 index 66dcdb499..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "Impalcatura a schede iOS", - "info": "Struttura di impalcatura per layout di pagine in stile iOS, con barra di navigazione inferiore e pagina principale specificabili.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di CupertinoTabScaffold", - "desc": [ - "【tabBar】 : Barra delle schede 【CupertinoTabBar】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【controller】 : Controllore 【CupertinoTabController】", - "【tabBuilder】 : Costruttore di pagine 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ja_JP.json deleted file mode 100644 index 5dc3ca23b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "iOSタブスキャフォールド", - "info": "iOSスタイルのページレイアウトスキャフォールド構造で、最下部のナビゲーションバーとメインコンテンツページを指定できます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabScaffold基本使用法", - "desc": [ - "【tabBar】 : タブバー 【CupertinoTabBar】", - "【backgroundColor】 : 背景色 【Color】", - "【controller】 : コントローラー 【CupertinoTabController】", - "【tabBuilder】 : ページビルダー 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ko_KR.json deleted file mode 100644 index fc87a3502..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "iOS 탭 스캐폴드", - "info": "iOS 스타일의 페이지 레이아웃 스캐폴드 구조, 최하단의 네비게이션 전환 바와 주 내용 페이지를 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabScaffold 기본 사용법", - "desc": [ - "【tabBar】 : 탭 바 【CupertinoTabBar】", - "【backgroundColor】 : 배경색 【Color】", - "【controller】 : 컨트롤러 【CupertinoTabController】", - "【tabBuilder】 : 페이지 빌더 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_pt_PT.json deleted file mode 100644 index e08956199..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "Estrutura de Scaffold de Abas iOS", - "info": "Estrutura de scaffold de layout de página no estilo iOS, que permite especificar a barra de navegação no fundo e a página de conteúdo principal.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CupertinoTabScaffold", - "desc": [ - "【tabBar】 : Barra de Abas 【CupertinoTabBar】", - "【backgroundColor】 : Cor de Fundo 【Color】", - "【controller】 : Controlador 【CupertinoTabController】", - "【tabBuilder】 : Construtor de Páginas 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ru_RU.json deleted file mode 100644 index 448d9d93a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "iOS каркас вкладок", - "info": "iOS-стиль каркаса макета страницы, который позволяет указать нижнюю панель навигации и основную страницу контента.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoTabScaffold", - "desc": [ - "【tabBar】 : Панель вкладок 【CupertinoTabBar】", - "【backgroundColor】 : Цвет фона 【Color】", - "【controller】 : Контроллер 【CupertinoTabController】", - "【tabBuilder】 : Конструктор страницы 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_zh-CN.json deleted file mode 100644 index 3f8ee2fff..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 158, - "name": "CupertinoTabScaffold", - "localName": "iOS页签脚手架", - "info": "iOS风格的页面布局脚手架结构,可指定最底部的导航切换栏可主体内容页。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabScaffold基本用法", - "desc": [ - "【tabBar】 : 页签条 【CupertinoTabBar】", - "【backgroundColor】 : 背景色 【Color】", - "【controller】 : 控制器 【CupertinoTabController】", - "【tabBuilder】 : 页面构造器 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/node1_base.dart deleted file mode 100644 index 8092538f4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabScaffold/node1_base.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoTabScaffold extends StatefulWidget { - const CustomCupertinoTabScaffold({Key? key}) : super(key: key); - - @override - _CustomCupertinoTabScaffoldState createState() => - _CustomCupertinoTabScaffoldState(); -} - -class _CustomCupertinoTabScaffoldState - extends State { - int _position = 0; - final Map iconsMap = { - //底栏图标 - "图鉴": Icons.home, "动态": Icons.toys, - "喜欢": Icons.favorite, "手册": Icons.class_, - "我的": Icons.account_circle, - }; - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height - 300, - child: CupertinoTabScaffold( - backgroundColor: Colors.grey.withAlpha(11), - tabBar: _buildTabBar(), - tabBuilder: (_, index) => _buildContent(index)), - ); - } - - CupertinoTabBar _buildTabBar() => CupertinoTabBar( - currentIndex: _position, - onTap: (value) => setState(() => _position = value), - items: iconsMap.keys - .map((e) => BottomNavigationBarItem( - icon: Icon( - iconsMap[e], - ), - label: e, - )) - .toList(), - activeColor: Colors.blue, - inactiveColor: const Color(0xff333333), - backgroundColor: const Color(0xfff1f1f1), - iconSize: 25.0, - ); - - _buildContent(int index) => Container( - alignment: Alignment.center, - child: Text(iconsMap.keys.toList()[index]), - ); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_de_DE.json deleted file mode 100644 index d3da3a862..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Cupertino-Seite", - "info": "Kann wie MaterialApp einen Navigationsstapel verwalten. Routen werden über routes und onGenerateRoute erstellt, und die Navigation kann über navigatorObservers überwacht werden.", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoTabView", - "desc": [ - "【builder】: Hauptseitenkonstruktor 【WidgetBuilder】", - "【navigatorObservers】: Routenbeobachter 【List】", - "【routes】: Routenzuordnung 【Map】", - "【onGenerateRoute】: Routenfabrik 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_en_US.json deleted file mode 100644 index 821498eba..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Cupertino Page", - "info": "Can maintain a routing stack like MaterialApp. Build routes through routes and onGenerateRoute, and listen to routes through navigatorObservers.", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoTabView", - "desc": [ - "【builder】 : Homepage builder 【WidgetBuilder】", - "【navigatorObservers】 : Route observers 【List】", - "【routes】 : Route mapping 【Map】", - "【onGenerateRoute】 : Route factory 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_es_ES.json deleted file mode 100644 index 21f797ff8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Página de Cupertino", - "info": "Puede mantener una pila de rutas como MaterialApp. Construye rutas a través de routes y onGenerateRoute, y puede escuchar rutas a través de navigatorObservers.", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoTabView", - "desc": [ - "【builder】 : Constructor de la página principal 【WidgetBuilder】", - "【navigatorObservers】 : Observador de rutas 【List】", - "【routes】 : Mapeo de rutas 【Map】", - "【onGenerateRoute】 : Fábrica de rutas 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_fr_FR.json deleted file mode 100644 index e6c226862..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Page Cupertino", - "info": "Peut maintenir une pile de routes comme MaterialApp. Construit les routes via routes et onGenerateRoute, et peut écouter les routes via navigatorObservers.", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoTabView", - "desc": [ - "【builder】 : Constructeur de la page d'accueil 【WidgetBuilder】", - "【navigatorObservers】 : Observateur de routes 【List】", - "【routes】 : Mappage des routes 【Map】", - "【onGenerateRoute】 : Usine de routes 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_it_IT.json deleted file mode 100644 index 33b5f2322..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Pagina Cupertino", - "info": "Può mantenere uno stack di routing come MaterialApp. Costruisce il routing tramite routes e onGenerateRoute, e può monitorare il routing tramite navigatorObservers.", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoTabView", - "desc": [ - "【builder】: Costruttore della pagina principale 【WidgetBuilder】", - "【navigatorObservers】: Osservatore di routing 【List】", - "【routes】: Mappatura del routing 【Map】", - "【onGenerateRoute】: Fabbrica di routing 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ja_JP.json deleted file mode 100644 index c47c93fd7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Cupertinoページ", - "info": "MaterialAppのようにルートスタックを維持できます。routes、onGenerateRouteを使用してルートを構築し、navigatorObserversでルートを監視できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabViewの基本使用", - "desc": [ - "【builder】 : ホームページビルダー 【WidgetBuilder】", - "【navigatorObservers】 : ルート監視者 【List】", - "【routes】 : ルートマッピング 【Map】", - "【onGenerateRoute】 : ルートファクトリ 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ko_KR.json deleted file mode 100644 index fd8f866aa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Cupertino 페이지", - "info": "MaterialApp과 같이 라우팅 스택을 유지할 수 있습니다. routes, onGenerateRoute를 통해 라우팅을 구성하고, navigatorObservers를 통해 라우팅을 모니터링할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabView 기본 사용법", - "desc": [ - "【builder】 : 홈페이지 빌더 【WidgetBuilder】", - "【navigatorObservers】 : 라우팅 리스너 【List】", - "【routes】 : 라우팅 매핑 【Map】", - "【onGenerateRoute】 : 라우팅 팩토리 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_pt_PT.json deleted file mode 100644 index 84eab5e5e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Página Cupertino", - "info": "Pode manter uma pilha de rotas como o MaterialApp. Constrói rotas através de routes e onGenerateRoute, e pode monitorar rotas com navigatorObservers.", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoTabView", - "desc": [ - "【builder】 : Construtor da página inicial 【WidgetBuilder】", - "【navigatorObservers】 : Observador de rotas 【List】", - "【routes】 : Mapeamento de rotas 【Map】", - "【onGenerateRoute】 : Fábrica de rotas 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ru_RU.json deleted file mode 100644 index 868182b68..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Cupertino страница", - "info": "Может поддерживать стек маршрутов, как MaterialApp. Маршруты строятся через routes и onGenerateRoute, можно отслеживать маршруты через navigatorObservers.", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoTabView", - "desc": [ - "【builder】 : Конструктор главной страницы 【WidgetBuilder】", - "【navigatorObservers】 : Наблюдатель маршрутов 【List】", - "【routes】 : Карта маршрутов 【Map】", - "【onGenerateRoute】 : Фабрика маршрутов 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_zh-CN.json deleted file mode 100644 index 927e90f0b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 229, - "name": "CupertinoTabView", - "localName": "Cupertino页面", - "info": "可以像 MaterialApp 一样维护一个路由栈。通过 routes 、onGenerateRoute 来构建路由,可以通过 navigatorObservers 监听路由。", - "lever": 3, - "family": 1, - "linkIds": [ - 65, - 158 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTabView基本使用", - "desc": [ - "【builder】 : 主页构造器 【WidgetBuilder】", - "【navigatorObservers】 : 路由监听器 【List】", - "【routes】 : 路由映射 【Map】", - "【onGenerateRoute】 : 路由工厂 【RouteFactory】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/node1_base.dart deleted file mode 100644 index 511a70d70..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTabView/node1_base.dart +++ /dev/null @@ -1,103 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class CupertinoTabViewDemo extends StatelessWidget { - const CupertinoTabViewDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.all(10), - child: ElevatedButton( - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => const CupertinoTabViewPage()), - ); - }, - child: const Text("进入 CupertinoTabView 测试页"), - ), - ); - } -} - - -class CupertinoTabViewPage extends StatelessWidget { - const CupertinoTabViewPage({Key? key}) : super(key: key); - - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: CupertinoTabView( - routes: { - '/': (context) => _HomePage(), - '/test_detail': (context) => const DetailPage(), - }, - ), - ); - } -} - -class DetailPage extends StatelessWidget { - const DetailPage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return CupertinoPageScaffold( - navigationBar: const CupertinoNavigationBar( - middle: Text('我是详情页'), - ), - child: Center( - child: Container( - width: 200, - height: 200, - color: Colors.blue, - ), - ), - ); - } -} - -class _HomePage extends StatelessWidget { - - final String info = "CupertinoTabView 可以像 MaterialApp 一样维护一个路由栈。" - "通过 routes 、onGenerateRoute 来构建路由,可以通过 navigatorObservers 监听路由。" - "在这个路由栈中可以进行指定名称跳转,如下通过 /test_detail 跳到详情页。"; - - @override - Widget build(BuildContext context) { - return CupertinoPageScaffold( - navigationBar: const CupertinoNavigationBar( - middle: Text('我是主页'), - ), - child: Center(child: Column( - - children: [ - const Spacer(), - Material(child: Padding( - padding: const EdgeInsets.only(left:18.0,right: 18,bottom: 20), - child: Text(info), - )), - CupertinoButton( - padding: const EdgeInsets.only(left: 10,right: 10), - color: Colors.blue, - onPressed: () { - Navigator.pushNamed( - context, "/test_detail" - ); - }, - child: const Text("进入详情页"), - ), - const Spacer(), - ], - )), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_de_DE.json deleted file mode 100644 index 4a8ec787d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_de_DE.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "iOS-Stil Eingabefeld", - "info": "Cupertino-stilisiertes Eingabefeld, ähnliche Eigenschaften wie TextField, kann Controller, Textstil, Dekorationslinien, Zeilenbegrenzung, Cursor-Stil usw. angeben. Empfängt Ereignisse wie Eingabeänderungen und Eingabeabschluss.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoTextField", - "desc": [ - "【placeholder】 : Hinweistext 【String】", - "【showCursor】 : Cursor anzeigen 【bool】", - "【minLines】 : Mindestanzahl von Zeilen 【int】", - "【maxLines】 : Maximale Anzahl von Zeilen 【int】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】", - "【onChanged】 : Änderungsüberwachung 【ValueChanged】", - "【onTap】: Klicküberwachung 【GestureTapCallback】", - "【onSubmitted】: Übermittlungsüberwachung 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "Häufig verwendete Stileigenschaften von CupertinoTextField", - "desc": [ - "【style】 : Eingabetextstil 【TextStyle】", - "【prefix】: Präfix-Komponente 【Widget】", - "【prefixMode】: Präfix-Modus 【OverlayVisibilityMode】", - "【suffix】: Suffix-Komponente 【Widget】", - "【suffixMode】: Suffix-Modus 【OverlayVisibilityMode】", - "【cursorColor】: Cursor-Farbe 【Color】", - "【cursorWidth】: Cursor-Breite 【double】", - "【cursorRadius】: Cursor-Radius 【Radius】", - "【readOnly】: Nur lesen 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_en_US.json deleted file mode 100644 index 68079c3d0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_en_US.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "iOS Style Input Box", - "info": "Cupertino style input box, properties are similar to TextField, can specify controller, text style, decoration line, line limit, cursor style, etc. Receives input change, input completion and other events.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoTextField", - "desc": [ - "【placeholder】 : Hint text 【String】", - "【showCursor】 : Whether to show cursor 【bool】", - "【minLines】 : Minimum number of lines 【int】", - "【maxLines】 : Maximum number of lines 【int】", - "【padding】 : Padding 【EdgeInsetsGeometry】", - "【onChanged】 : Change listener 【ValueChanged】", - "【onTap】: Tap listener 【GestureTapCallback】", - "【onSubmitted】: Submit listener 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "Common Style Properties of CupertinoTextField", - "desc": [ - "【style】 : Input text style 【TextStyle】", - "【prefix】: Prefix component 【Widget】", - "【prefixMode】: Prefix mode 【OverlayVisibilityMode】", - "【suffix】: Suffix component 【Widget】", - "【suffixMode】: Suffix mode 【OverlayVisibilityMode】", - "【cursorColor】: Cursor color 【Color】", - "【cursorWidth】: Cursor width 【double】", - "【cursorRadius】: Cursor radius 【Radius】", - "【readOnly】: Whether read-only 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_es_ES.json deleted file mode 100644 index 5e587a02f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_es_ES.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "Campo de texto estilo iOS", - "info": "Campo de texto de estilo Cupertino, con propiedades similares a TextField, se puede especificar controlador, estilo de texto, línea de decoración, límite de líneas, estilo de cursor, etc. Recibe eventos de cambio de entrada, finalización de entrada, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoTextField", - "desc": [ - "【placeholder】 : Texto de sugerencia 【String】", - "【showCursor】 : Mostrar cursor 【bool】", - "【minLines】 : Número mínimo de líneas 【int】", - "【maxLines】 : Número máximo de líneas 【int】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】", - "【onChanged】 : Escucha de cambios 【ValueChanged】", - "【onTap】: Escucha de clics 【GestureTapCallback】", - "【onSubmitted】: Escucha de envío 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "Propiedades de estilo comunes de CupertinoTextField", - "desc": [ - "【style】 : Estilo del texto de entrada 【TextStyle】", - "【prefix】: Componente de prefijo 【Widget】", - "【prefixMode】: Modo de prefijo 【OverlayVisibilityMode】", - "【suffix】: Componente de sufijo 【Widget】", - "【suffixMode】: Modo de sufijo 【OverlayVisibilityMode】", - "【cursorColor】: Color del cursor 【Color】", - "【cursorWidth】: Ancho del cursor 【double】", - "【cursorRadius】: Radio del cursor 【Radius】", - "【readOnly】: Solo lectura 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_fr_FR.json deleted file mode 100644 index 69274be14..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_fr_FR.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "Champ de saisie de style iOS", - "info": "Champ de saisie de style Cupertino, les propriétés sont similaires à TextField, peut spécifier un contrôleur, le style du texte, la décoration, la limite de lignes, le style du curseur, etc. Reçoit des événements tels que les changements d'entrée, la fin de la saisie, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoTextField", - "desc": [ - "【placeholder】 : Texte d'indication 【String】", - "【showCursor】 : Afficher le curseur 【bool】", - "【minLines】 : Nombre minimum de lignes 【int】", - "【maxLines】 : Nombre maximum de lignes 【int】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】", - "【onChanged】 : Écouteur de changement 【ValueChanged】", - "【onTap】: Écouteur de clic 【GestureTapCallback】", - "【onSubmitted】: Écouteur de soumission 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "Propriétés de style courantes de CupertinoTextField", - "desc": [ - "【style】 : Style du texte saisi 【TextStyle】", - "【prefix】: Composant de préfixe 【Widget】", - "【prefixMode】: Mode de préfixe 【OverlayVisibilityMode】", - "【suffix】: Composant de suffixe 【Widget】", - "【suffixMode】: Mode de suffixe 【OverlayVisibilityMode】", - "【cursorColor】: Couleur du curseur 【Color】", - "【cursorWidth】: Largeur du curseur 【double】", - "【cursorRadius】: Rayon du curseur 【Radius】", - "【readOnly】: Lecture seule 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_it_IT.json deleted file mode 100644 index b6ea2672a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_it_IT.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "Campo di testo in stile iOS", - "info": "Campo di testo in stile Cupertino, le proprietà sono simili a TextField, è possibile specificare il controller, lo stile del testo, la decorazione, il limite di righe, lo stile del cursore, ecc. Riceve eventi come cambiamenti di input, completamento dell'input, ecc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoTextField", - "desc": [ - "【placeholder】 : Testo suggerito 【String】", - "【showCursor】 : Mostra il cursore 【bool】", - "【minLines】 : Numero minimo di righe 【int】", - "【maxLines】 : Numero massimo di righe 【int】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】", - "【onChanged】 : Ascolta i cambiamenti 【ValueChanged】", - "【onTap】: Ascolta i clic 【GestureTapCallback】", - "【onSubmitted】: Ascolta l'invio 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "Proprietà di stile comuni di CupertinoTextField", - "desc": [ - "【style】 : Stile del testo di input 【TextStyle】", - "【prefix】: Componente prefisso 【Widget】", - "【prefixMode】: Modalità prefisso 【OverlayVisibilityMode】", - "【suffix】: Componente suffisso 【Widget】", - "【suffixMode】: Modalità suffisso 【OverlayVisibilityMode】", - "【cursorColor】: Colore del cursore 【Color】", - "【cursorWidth】: Larghezza del cursore 【double】", - "【cursorRadius】: Raggio del cursore 【Radius】", - "【readOnly】: Solo lettura 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ja_JP.json deleted file mode 100644 index f465bfe96..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ja_JP.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "iOSスタイルの入力ボックス", - "info": "Cupertinoスタイルの入力ボックス。プロパティはTextFieldと類似しており、コントローラー、テキストスタイル、デコレーションライン、行数制限、カーソルスタイルなどを指定できます。入力変更や入力完了などのイベントを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTextFieldの基本使用", - "desc": [ - "【placeholder】 : ヒントテキスト 【String】", - "【showCursor】 : カーソルを表示するかどうか 【bool】", - "【minLines】 : 最小行数 【int】", - "【maxLines】 : 最大行数 【int】", - "【padding】 : パディング 【EdgeInsetsGeometry】", - "【onChanged】 : 変更リスナー 【ValueChanged】", - "【onTap】: クリックリスナー 【GestureTapCallback】", - "【onSubmitted】: 送信リスナー 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "CupertinoTextFieldの一般的なスタイルプロパティ", - "desc": [ - "【style】 : 入力テキストスタイル 【TextStyle】", - "【prefix】: プレフィックスコンポーネント 【Widget】", - "【prefixMode】: プレフィックスモード 【OverlayVisibilityMode】", - "【suffix】: サフィックスコンポーネント 【Widget】", - "【suffixMode】: サフィックスモード 【OverlayVisibilityMode】", - "【cursorColor】: カーソルカラー 【Color】", - "【cursorWidth】: カーソル幅 【double】", - "【cursorRadius】: カーソルの角丸 【Radius】", - "【readOnly】: 読み取り専用かどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ko_KR.json deleted file mode 100644 index 0b2a5e1e6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ko_KR.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "iOS 스타일 입력 필드", - "info": "Cupertino 스타일의 입력 필드, 속성은 TextField와 유사하며, 컨트롤러, 텍스트 스타일, 장식선, 줄 수 제한, 커서 스타일 등을 지정할 수 있습니다. 입력 변화, 입력 완료 등의 이벤트를 수신합니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTextField 기본 사용", - "desc": [ - "【placeholder】 : 힌트 텍스트 【String】", - "【showCursor】 : 커서 표시 여부 【bool】", - "【minLines】 : 최소 줄 수 【int】", - "【maxLines】 : 최대 줄 수 【int】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】", - "【onChanged】 : 변경 감지 【ValueChanged】", - "【onTap】: 클릭 감지 【GestureTapCallback】", - "【onSubmitted】: 제출 감지 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "CupertinoTextField 일반 스타일 속성", - "desc": [ - "【style】 : 입력 텍스트 스타일 【TextStyle】", - "【prefix】: 접두사 컴포넌트 【Widget】", - "【prefixMode】: 접두사 모드 【OverlayVisibilityMode】", - "【suffix】: 접미사 컴포넌트 【Widget】", - "【suffixMode】: 접미사 모드 【OverlayVisibilityMode】", - "【cursorColor】: 커서 색상 【Color】", - "【cursorWidth】: 커서 너비 【double】", - "【cursorRadius】: 커서 모서리 반경 【Radius】", - "【readOnly】: 읽기 전용 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_pt_PT.json deleted file mode 100644 index aea2caf0c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_pt_PT.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "Campo de entrada estilo iOS", - "info": "Campo de entrada no estilo Cupertino, com propriedades semelhantes ao TextField, pode especificar controlador, estilo de texto, decoração de linha, limite de linhas, estilo do cursor, etc. Recebe eventos de mudança de entrada, conclusão de entrada, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoTextField", - "desc": [ - "【placeholder】 : Texto de dica 【String】", - "【showCursor】 : Mostrar cursor 【bool】", - "【minLines】 : Número mínimo de linhas 【int】", - "【maxLines】 : Número máximo de linhas 【int】", - "【padding】 : Preenchimento interno 【EdgeInsetsGeometry】", - "【onChanged】 : Monitoramento de mudanças 【ValueChanged】", - "【onTap】: Monitoramento de clique 【GestureTapCallback】", - "【onSubmitted】: Monitoramento de submissão 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "Propriedades de estilo comuns do CupertinoTextField", - "desc": [ - "【style】 : Estilo do texto de entrada 【TextStyle】", - "【prefix】: Componente de prefixo 【Widget】", - "【prefixMode】: Modo de prefixo 【OverlayVisibilityMode】", - "【suffix】: Componente de sufixo 【Widget】", - "【suffixMode】: Modo de sufixo 【OverlayVisibilityMode】", - "【cursorColor】: Cor do cursor 【Color】", - "【cursorWidth】: Largura do cursor 【double】", - "【cursorRadius】: Raio do cursor 【Radius】", - "【readOnly】: Somente leitura 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ru_RU.json deleted file mode 100644 index 4e5937626..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_ru_RU.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "Текстовое поле в стиле iOS", - "info": "Текстовое поле в стиле Cupertino, свойства аналогичны TextField, можно указать контроллер, стиль текста, декоративные линии, ограничение на количество строк, стиль курсора и т.д. Получает события изменения ввода, завершения ввода и другие.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoTextField", - "desc": [ - "【placeholder】 : Подсказка 【String】", - "【showCursor】 : Показывать ли курсор 【bool】", - "【minLines】 : Минимальное количество строк 【int】", - "【maxLines】 : Максимальное количество строк 【int】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】", - "【onChanged】 : Слушатель изменений 【ValueChanged】", - "【onTap】: Слушатель нажатия 【GestureTapCallback】", - "【onSubmitted】: Слушатель отправки 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "Общие стилевые свойства CupertinoTextField", - "desc": [ - "【style】 : Стиль текста ввода 【TextStyle】", - "【prefix】: Префиксный компонент 【Widget】", - "【prefixMode】: Режим префикса 【OverlayVisibilityMode】", - "【suffix】: Суффиксный компонент 【Widget】", - "【suffixMode】: Режим суффикса 【OverlayVisibilityMode】", - "【cursorColor】: Цвет курсора 【Color】", - "【cursorWidth】: Ширина курсора 【double】", - "【cursorRadius】: Радиус закругления курсора 【Radius】", - "【readOnly】: Только для чтения 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_zh-CN.json deleted file mode 100644 index a7141373a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/desc_zh-CN.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 245, - "name": "CupertinoTextField", - "localName": "iOS风格输入框", - "info": "Cupertino风格的输入框,属性和TextField类似,可指定控制器、文字样式、装饰线、行数限制、游标样式等。接收输入变化、完成输入等事件。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTextField基础使用", - "desc": [ - "【placeholder】 : 提示文字 【String】", - "【showCursor】 : 是否显示游标 【bool】", - "【minLines】 : 最小行数 【int】", - "【maxLines】 : 最大行数 【int】", - "【padding】 : 内边距 【EdgeInsetsGeometry】", - "【onChanged】 : 变化监听 【ValueChanged】", - "【onTap】: 点击监听 【GestureTapCallback】", - "【onSubmitted】: 提交监听 【ValueChanged】" - ] - }, - { - "file": "node2_style.dart", - "name": "CupertinoTextField常用样式属性", - "desc": [ - "【style】 : 输入文字样式 【TextStyle】", - "【prefix】: 前缀组件 【Widget】", - "【prefixMode】: 前缀模式 【OverlayVisibilityMode】", - "【suffix】: 后缀组件 【Widget】", - "【suffixMode】: 后缀模式 【OverlayVisibilityMode】", - "【cursorColor】: 游标颜色 【Color】", - "【cursorWidth】: 游标宽度 【double】", - "【cursorRadius】: 游标圆角 【Radius】", - "【readOnly】: 是否只读 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/node1_base.dart deleted file mode 100644 index 085ec04e2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/node1_base.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - -class CupertinoTextFieldDemo extends StatefulWidget { - const CupertinoTextFieldDemo({Key? key}) : super(key: key); - - @override - _CupertinoTextFieldDemoState createState() => _CupertinoTextFieldDemoState(); -} - -class _CupertinoTextFieldDemoState extends State { - String _value = ''; - Color _color =Colors.black; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Text('输入了:$_value',style: TextStyle(color: _color),), - CupertinoTextField( - placeholder: 'Input Name', - showCursor: true, - minLines: 1, - maxLines: 4, - padding: const EdgeInsets.all(8), - onChanged: _onChanged, - onTap: _onTap, - onSubmitted: _onSubmitted, - ), - ], - ); - } - - void _onChanged(String value) { - setState(() { - _value = value; - }); - } - - void _onTap() { - print('----_onTap----'); - setState(() { - _color=Colors.blue; - }); - } - - void _onSubmitted(String value) { - print('----_onSubmitted:$value}----'); - setState(() { - _color=Colors.black; - }); - } - -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/node2_style.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/node2_style.dart deleted file mode 100644 index d1fb7c1d4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTextField/node2_style.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - -class CupertinoTextFieldStyle extends StatelessWidget { - const CupertinoTextFieldStyle({Key? key}) : super(key: key); - - - @override - Widget build(BuildContext context) { - return const CupertinoTextField( - style: TextStyle(color: Colors.blue), - prefix: Icon(CupertinoIcons.add), - prefixMode: OverlayVisibilityMode.notEditing, - suffix: Icon(CupertinoIcons.clear), - suffixMode: OverlayVisibilityMode.editing, - cursorColor: Colors.purple, - cursorWidth: 4, - cursorRadius: Radius.circular(2), - readOnly: false, - placeholder: '输入用户名', - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_de_DE.json deleted file mode 100644 index c475d3a13..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "iOS-Zeitauswahl", - "info": "Hochwertiger Zeitauswahl-Schieberegler, der den ausgewählten Typ, die Anfangszeit, die Hintergrundfarbe usw. angeben kann und Zeitauswahlereignisse empfängt.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoTimerPicker", - "desc": [ - "【initialTimerDuration】 : Anfangszeit 【Duration】", - "【minuteInterval】 : Minutenintervall 【double】", - "【secondInterval】 : Sekundenintervall 【double】", - "【alignment】 : Ausrichtung 【AlignmentGeometry】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【mode】 : Modus*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_en_US.json deleted file mode 100644 index 820b4f2fa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "iOS Time Picker", - "info": "A high-end rolling time picker that allows you to specify the type of selection, initial time, background color, etc., and receives time selection events.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoTimerPicker", - "desc": [ - "【initialTimerDuration】: Initial time 【Duration】", - "【minuteInterval】: Minute interval 【double】", - "【secondInterval】: Second interval 【double】", - "【alignment】: Alignment 【AlignmentGeometry】", - "【backgroundColor】: Background color 【Color】", - "【mode】: Mode*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_es_ES.json deleted file mode 100644 index 7c6a97eaf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "Selector de tiempo de iOS", - "info": "Selector de tiempo de desplazamiento de alta gama, que puede especificar el tipo de selección, la hora inicial, el color de fondo, etc., y recibe eventos de selección de tiempo.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoTimerPicker", - "desc": [ - "【initialTimerDuration】 : Hora inicial 【Duration】", - "【minuteInterval】 : Intervalo de minutos 【double】", - "【secondInterval】 : Intervalo de segundos 【double】", - "【alignment】 : Alineación 【AlignmentGeometry】", - "【backgroundColor】 : Color de fondo 【Color】", - "【mode】 : Modo*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_fr_FR.json deleted file mode 100644 index 368b68945..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "Sélecteur de temps iOS", - "info": "Sélecteur de temps haut de gamme avec défilement, permet de spécifier le type de sélection, l'heure initiale, la couleur de fond, etc., et reçoit les événements de sélection de temps.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoTimerPicker", - "desc": [ - "【initialTimerDuration】 : Durée initiale 【Duration】", - "【minuteInterval】 : Intervalle de minutes 【double】", - "【secondInterval】 : Intervalle de secondes 【double】", - "【alignment】 : Alignement 【AlignmentGeometry】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【mode】 : Mode*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_it_IT.json deleted file mode 100644 index 517390259..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "Selettore di tempo iOS", - "info": "Un selettore di tempo di scorrimento di alta gamma, che consente di specificare il tipo di selezione, l'ora iniziale, il colore di sfondo, ecc., e riceve l'evento di selezione del tempo.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoTimerPicker", - "desc": [ - "【initialTimerDuration】 : Ora iniziale 【Duration】", - "【minuteInterval】 : Intervallo di minuti 【double】", - "【secondInterval】 : Intervallo di secondi 【double】", - "【alignment】 : Allineamento 【AlignmentGeometry】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【mode】 : Modalità*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ja_JP.json deleted file mode 100644 index 9ff54547a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "iOSタイムピッカー", - "info": "高級感のあるスクロールタイムピッカーで、選択するタイプ、初期時間、背景色などを指定でき、時間選択イベントを受け取ります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTimerPickerの基本使用", - "desc": [ - "【initialTimerDuration】 : 初期時間 【Duration】", - "【minuteInterval】 : 分間隔数 【double】", - "【secondInterval】 : 秒間隔数 【double】", - "【alignment】 : 配置方法 【AlignmentGeometry】", - "【backgroundColor】 : 背景色 【Color】", - "【mode】 : モード*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ko_KR.json deleted file mode 100644 index 391b966db..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "iOS 시간 선택기", - "info": "고급스러운 스크롤 시간 선택기로, 선택 유형, 초기 시간, 배경색 등을 지정할 수 있으며, 시간 선택 이벤트를 수신합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTimerPicker 기본 사용법", - "desc": [ - "【initialTimerDuration】 : 초기 시간 【Duration】", - "【minuteInterval】 : 분 간격 수 【double】", - "【secondInterval】 : 초 간격 수 【double】", - "【alignment】 : 정렬 방식 【AlignmentGeometry】", - "【backgroundColor】 : 배경색 【Color】", - "【mode】 : 모드*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_pt_PT.json deleted file mode 100644 index cb65335fd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "Seletor de Tempo iOS", - "info": "Um seletor de tempo sofisticado com rolagem, que permite especificar o tipo de seleção, hora inicial, cor de fundo, etc., e recebe eventos de seleção de tempo.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoTimerPicker", - "desc": [ - "【initialTimerDuration】 : Hora inicial 【Duration】", - "【minuteInterval】 : Intervalo de minutos 【double】", - "【secondInterval】 : Intervalo de segundos 【double】", - "【alignment】 : Alinhamento 【AlignmentGeometry】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【mode】 : Modo*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ru_RU.json deleted file mode 100644 index 9c784f5f1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "iOS-таймер выбора времени", - "info": "Стильный скроллинг-таймер выбора времени, позволяющий указать тип выбора, начальное время, цвет фона и т.д., а также получать события выбора времени.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoTimerPicker", - "desc": [ - "【initialTimerDuration】 : Начальное время 【Duration】", - "【minuteInterval】 : Интервал минут 【double】", - "【secondInterval】 : Интервал секунд 【double】", - "【alignment】 : Способ выравнивания 【AlignmentGeometry】", - "【backgroundColor】 : Цвет фона 【Color】", - "【mode】 : Режим*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_zh-CN.json deleted file mode 100644 index 68f83bcad..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 138, - "name": "CupertinoTimerPicker", - "localName": "iOS时间选择器", - "info": "高大上的滑滚时间选择器,可指定选择的类型、初始时间、背景色等,接收时间选中事件。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoTimerPicker基本使用", - "desc": [ - "【initialTimerDuration】 : 初始时间 【Duration】", - "【minuteInterval】 : 分钟间隔数 【double】", - "【secondInterval】 : 秒间隔数 【double】", - "【alignment】 : 对齐方式 【AlignmentGeometry】", - "【backgroundColor】 : 背景色 【Color】", - "【mode】 : 模式*3 【CupertinoTimerPickerMode】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/node1_base.dart deleted file mode 100644 index 7c159ab8b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/CupertinoTimerPicker/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoTimerPicker extends StatefulWidget { - const CustomCupertinoTimerPicker({Key? key}) : super(key: key); - - @override - _CustomCupertinoTimerPickerState createState() => - _CustomCupertinoTimerPickerState(); -} - -class _CustomCupertinoTimerPickerState - extends State { - Duration _date = const Duration(seconds: 30); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Text( - '当前时间:${_date.toString()}', - style: const TextStyle(color: Colors.grey, fontSize: 16), - ), - _buildInfoTitle('CupertinoTimerPickerMode.hms'), - buildPicker(CupertinoTimerPickerMode.hms), - _buildInfoTitle('CupertinoTimerPickerMode.hm'), - buildPicker(CupertinoTimerPickerMode.hm), - _buildInfoTitle('CupertinoTimerPickerMode.ms'), - buildPicker(CupertinoTimerPickerMode.ms), - ], - ); - } - - Widget _buildInfoTitle(info) { - return Padding( - padding: const EdgeInsets.only(left: 20, top: 20, bottom: 5), - child: Text( - info, - style: const TextStyle( - color: Colors.blue, fontSize: 16, fontWeight: FontWeight.bold), - ), - ); - } - - Widget buildPicker(CupertinoTimerPickerMode mode) { - return Container( - margin: const EdgeInsets.all(10), - height: 150, - child: CupertinoTimerPicker( - mode: mode, - initialTimerDuration: const Duration(seconds: 30), - onTimerDurationChanged: (date) { - print(date); - setState(() => _date = date); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_de_DE.json deleted file mode 100644 index 316f60470..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_de_DE.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "Datumsbereich", - "info": "Material-stil Datumsbereichsauswahl, unterstützt Kalenderauswahl und Eingabeauswahl.", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DateRangePickerDialog grundlegende Verwendung", - "desc": [ - "【firstDate】 : Frühestes Datum 【DateTime】", - "【lastDate】 : Spätestes Datum 【DateTime】", - "【initialDateRange】 : Anfangsbereich 【DateTimeRange?】", - "【saveText】 : Speichern Text 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "DateRangePickerDialog anpassen", - "desc": [ - "Ändern Sie den Quellcode von DateRangePickerDialog, sodass Monatseinträge numerische Hintergründe anzeigen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_en_US.json deleted file mode 100644 index 0107b9c9d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_en_US.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "Date Range", - "info": "Material style date range picker, supports calendar selection and input selection.", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DateRangePickerDialog", - "desc": [ - "【firstDate】 : Earliest date 【DateTime】", - "【lastDate】 : Latest date 【DateTime】", - "【initialDateRange】 : Initial range 【DateTimeRange?】", - "【saveText】 : Save text 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Customize DateRangePickerDialog", - "desc": [ - "Modify the source code of DateRangePickerDialog to display a numerical background for month entries." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_es_ES.json deleted file mode 100644 index fb92b40b6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_es_ES.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "Selector de rango de fechas", - "info": "Selector de rango de fechas al estilo Material, compatible con selección de calendario y selección de entrada.", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DateRangePickerDialog", - "desc": [ - "【firstDate】 : Fecha más temprana 【DateTime】", - "【lastDate】 : Fecha más tardía 【DateTime】", - "【initialDateRange】 : Rango inicial 【DateTimeRange?】", - "【saveText】 : Texto de guardar 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Modificación de DateRangePickerDialog", - "desc": [ - "Modifica el código fuente de DateRangePickerDialog para que los elementos del mes muestren un fondo numérico." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_fr_FR.json deleted file mode 100644 index 0ef412655..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_fr_FR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "Plage de dates", - "info": "Sélecteur de plage de dates de style Material, prenant en charge la sélection par calendrier et par saisie.", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DateRangePickerDialog", - "desc": [ - "【firstDate】 : Date la plus ancienne 【DateTime】", - "【lastDate】 : Date la plus récente 【DateTime】", - "【initialDateRange】 : Plage initiale 【DateTimeRange?】", - "【saveText】 : Texte de sauvegarde 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Personnalisation de DateRangePickerDialog", - "desc": [ - "Modifiez le code source de DateRangePickerDialog pour afficher un arrière-plan numérique sur les entrées de mois." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_it_IT.json deleted file mode 100644 index 3aa6595d3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_it_IT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "Intervallo di date", - "info": "Selettore di intervalli di date in stile Material, supporta la selezione tramite calendario e input.", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di DateRangePickerDialog", - "desc": [ - "【firstDate】 : Data più antica 【DateTime】", - "【lastDate】 : Data più recente 【DateTime】", - "【initialDateRange】 : Intervallo iniziale 【DateTimeRange?】", - "【saveText】 : Testo di salvataggio 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Modifica di DateRangePickerDialog", - "desc": [ - "Modifica il codice sorgente di DateRangePickerDialog per mostrare uno sfondo numerico per le voci dei mesi." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ja_JP.json deleted file mode 100644 index caf3a1d32..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ja_JP.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "日付範囲", - "info": "Materialスタイルの日付範囲ピッカーで、カレンダー選択と入力選択をサポートしています。", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DateRangePickerDialog 基本使用", - "desc": [ - "【firstDate】 : 最も早い日付 【DateTime】", - "【lastDate】 : 最も遅い日付 【DateTime】", - "【initialDateRange】 : 初期範囲 【DateTimeRange?】", - "【saveText】 : 保存テキスト 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "DateRangePickerDialog のカスタマイズ", - "desc": [ - "DateRangePickerDialog のソースコードを変更して、月の項目に数値の背景を表示するようにします。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ko_KR.json deleted file mode 100644 index 0a6e2d476..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ko_KR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "날짜 범위", - "info": "Material 스타일의 날짜 범위 선택기로, 캘린더 선택 및 입력 선택을 지원합니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DateRangePickerDialog 기본 사용", - "desc": [ - "【firstDate】 : 가장 이른 날짜 【DateTime】", - "【lastDate】 : 가장 늦은 날짜 【DateTime】", - "【initialDateRange】 : 초기 범위 【DateTimeRange?】", - "【saveText】 : 저장 텍스트 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "DateRangePickerDialog 커스터마이징", - "desc": [ - "DateRangePickerDialog 소스 코드를 수정하여 월 항목에 숫자 배경을 표시합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_pt_PT.json deleted file mode 100644 index 370c61c07..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_pt_PT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "Intervalo de Datas", - "info": "Seletor de intervalo de datas no estilo Material, suporta seleção de calendário e seleção de entrada.", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DateRangePickerDialog", - "desc": [ - "【firstDate】 : Data mais antiga 【DateTime】", - "【lastDate】 : Data mais recente 【DateTime】", - "【initialDateRange】 : Intervalo inicial 【DateTimeRange?】", - "【saveText】 : Texto de salvamento 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Modificar o DateRangePickerDialog", - "desc": [ - "Modifique o código-fonte do DateRangePickerDialog para exibir o fundo numérico nos itens do mês." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ru_RU.json deleted file mode 100644 index 81ddd3820..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_ru_RU.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "Диапазон дат", - "info": "Селектор диапазона дат в стиле Material, поддерживает выбор через календарь и ввод.", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DateRangePickerDialog", - "desc": [ - "【firstDate】 : Самая ранняя дата 【DateTime】", - "【lastDate】 : Самая поздняя дата 【DateTime】", - "【initialDateRange】 : Начальный диапазон 【DateTimeRange?】", - "【saveText】 : Текст сохранения 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Модификация DateRangePickerDialog", - "desc": [ - "Изменение исходного кода DateRangePickerDialog для отображения числового фона для элементов месяца." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_zh-CN.json deleted file mode 100644 index 369c54cbd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/desc_zh-CN.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 339, - "name": "DateRangePickerDialog", - "localName": "日期范围", - "info": "Material 风格的日期范围选择器,支持日历选择和输入选择。", - "lever": 4, - "family": 1, - "linkIds": [ - 135, - 136, - 137 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DateRangePickerDialog 基本使用", - "desc": [ - "【firstDate】 : 最早日期 【DateTime】", - "【lastDate】 : 最晚日期 【DateTime】", - "【initialDateRange】 : 初始范围 【DateTimeRange?】", - "【saveText】 : 保存文字 【String?】" - ] - }, - { - "file": "node2_diy.dart", - "name": "魔改 DateRangePickerDialog", - "desc": [ - "修改 DateRangePickerDialog 源码,使得月份条目显示数值背景。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/node1_base.dart deleted file mode 100644 index 7ebc070e7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/node1_base.dart +++ /dev/null @@ -1,68 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class DateRangePickerDialogDemo extends StatefulWidget { - const DateRangePickerDialogDemo({Key? key}) : super(key: key); - - @override - _DateRangePickerDialogDemoState createState() => - _DateRangePickerDialogDemoState(); -} - -class _DateRangePickerDialogDemoState - extends State { - String _dateRange = ''; - - // 需要 intl 包 - final DateFormat format = DateFormat('yyyy-MM-dd'); - - @override - Widget build(BuildContext context) { - String info = _dateRange.isEmpty ? '选择日期范围' : _dateRange; - - return Center( - child: Wrap( - alignment: WrapAlignment.center, - direction: Axis.vertical, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - ElevatedButton( - onPressed: _show, - child: const Text('选择'), - ), - Text( - info, - style: const TextStyle(color: Colors.grey), - ) - ], - ), - ); - } - - void _show() async { - DateTime firstDate = DateTime(2021, 1, 1); - DateTime lastDate = DateTime.now(); - DateTime start = lastDate.add(const Duration(days: -8)); - DateTime end = lastDate.add(const Duration(days: -2)); - DateTimeRange? range = await showDateRangePicker( - context: context, - firstDate: firstDate, - lastDate: lastDate, - initialDateRange: DateTimeRange( - start: start, - end: end, - ), - saveText: "确定", - ); - if (range != null) { - setState(() { - _dateRange = - "${format.format(range.start)} ~ ${format.format(range.end)}"; - }); - } - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/node2_diy.dart b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/node2_diy.dart deleted file mode 100644 index ddd5be205..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/node2_diy.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:intl/intl.dart'; -import 'toly_date_picker.dart' as toly; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class DiyDateRangePickerDialogDemo extends StatefulWidget { - const DiyDateRangePickerDialogDemo({Key? key}) : super(key: key); - - @override - _DiyDateRangePickerDialogDemoState createState() => - _DiyDateRangePickerDialogDemoState(); -} - -class _DiyDateRangePickerDialogDemoState - extends State { - String _dateRange = ''; - - // 需要 intl 包 - final DateFormat format = DateFormat('yyyy-MM-dd'); - - @override - Widget build(BuildContext context) { - String info = _dateRange.isEmpty ? '选择日期范围' : _dateRange; - - return Center( - child: Wrap( - alignment: WrapAlignment.center, - direction: Axis.vertical, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - ElevatedButton( - onPressed: _show, - child: const Text('选择'), - ), - Text( - info, - style: const TextStyle(color: Colors.grey), - ) - ], - ), - ); - } - - void _show() async { - DateTime firstDate = DateTime(2021, 1, 1); - DateTime lastDate = DateTime.now(); - DateTime start = lastDate.add(const Duration(days: -8)); - DateTime end = lastDate.add(const Duration(days: -2)); - DateTimeRange? range = await toly.showDateRangePicker( - context: context, - firstDate: firstDate, - lastDate: lastDate, - initialDateRange: DateTimeRange( - start: start, - end: end, - ), - saveText: "确定", - ); - if (range != null) { - setState(() { - _dateRange = - "${format.format(range.start)} ~ ${format.format(range.end)}"; - }); - } - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/toly_date_picker.dart b/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/toly_date_picker.dart deleted file mode 100644 index e2c3a9f88..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DateRangePickerDialog/toly_date_picker.dart +++ /dev/null @@ -1,3041 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'dart:math' as math; - -import 'package:flutter/gestures.dart' show DragStartBehavior; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter/services.dart'; -import 'package:flutter/widgets.dart'; - -const Size _calendarPortraitDialogSize = Size(330.0, 518.0); -const Size _calendarLandscapeDialogSize = Size(496.0, 346.0); -const Size _inputPortraitDialogSize = Size(330.0, 270.0); -const Size _inputLandscapeDialogSize = Size(496, 160.0); -const Size _inputRangeLandscapeDialogSize = Size(496, 164.0); -const Duration _dialogSizeAnimationDuration = Duration(milliseconds: 200); -const double _inputFormPortraitHeight = 98.0; -const double _inputFormLandscapeHeight = 108.0; - -/// Shows a dialog containing a Material Design date picker. -/// -/// The returned [Future] resolves to the date selected by the user when the -/// user confirms the dialog. If the user cancels the dialog, null is returned. -/// -/// When the date picker is first displayed, it will show the month of -/// [initialDate], with [initialDate] selected. -/// -/// The [firstDate] is the earliest allowable date. The [lastDate] is the latest -/// allowable date. [initialDate] must either fall between these dates, -/// or be equal to one of them. For each of these [DateTime] parameters, only -/// their dates are considered. Their time fields are ignored. They must all -/// be non-null. -/// -/// The [currentDate] represents the current day (i.e. today). This -/// date will be highlighted in the day grid. If null, the date of -/// `DateTime.now()` will be used. -/// -/// An optional [initialEntryMode] argument can be used to display the date -/// picker in the [DatePickerEntryMode.calendar] (a calendar month grid) -/// or [DatePickerEntryMode.input] (a text input field) mode. -/// It defaults to [DatePickerEntryMode.calendar] and must be non-null. -/// -/// An optional [selectableDayPredicate] function can be passed in to only allow -/// certain days for selection. If provided, only the days that -/// [selectableDayPredicate] returns true for will be selectable. For example, -/// this can be used to only allow weekdays for selection. If provided, it must -/// return true for [initialDate]. -/// -/// The following optional string parameters allow you to override the default -/// text used for various parts of the dialog: -/// -/// * [helpText], label displayed at the top of the dialog. -/// * [cancelText], label on the cancel button. -/// * [confirmText], label on the ok button. -/// * [errorFormatText], message used when the input text isn't in a proper date format. -/// * [errorInvalidText], message used when the input text isn't a selectable date. -/// * [fieldHintText], text used to prompt the user when no text has been entered in the field. -/// * [fieldLabelText], label for the date text input field. -/// -/// An optional [locale] argument can be used to set the locale for the date -/// picker. It defaults to the ambient locale provided by [Localizations]. -/// -/// An optional [textDirection] argument can be used to set the text direction -/// ([TextDirection.ltr] or [TextDirection.rtl]) for the date picker. It -/// defaults to the ambient text direction provided by [Directionality]. If both -/// [locale] and [textDirection] are non-null, [textDirection] overrides the -/// direction chosen for the [locale]. -/// -/// The [context], [useRootNavigator] and [routeSettings] arguments are passed to -/// [showDialog], the documentation for which discusses how it is used. [context] -/// and [useRootNavigator] must be non-null. -/// -/// The [builder] parameter can be used to wrap the dialog widget -/// to add inherited widgets like [Theme]. -/// -/// An optional [initialDatePickerMode] argument can be used to have the -/// calendar date picker initially appear in the [DatePickerMode.year] or -/// [DatePickerMode.day] mode. It defaults to [DatePickerMode.day], and -/// must be non-null. -/// -/// {@macro flutter.widgets.RawDialogRoute} -/// -/// ### State Restoration -/// -/// Using this method will not enable state restoration for the date picker. -/// In order to enable state restoration for a date picker, use -/// [Navigator.restorablePush] or [Navigator.restorablePushNamed] with -/// [DatePickerDialog]. -/// -/// For more information about state restoration, see [RestorationManager]. -/// -/// {@macro flutter.widgets.RestorationManager} -/// -/// {@tool dartpad} -/// This sample demonstrates how to create a restorable Material date picker. -/// This is accomplished by enabling state restoration by specifying -/// [MaterialApp.restorationScopeId] and using [Navigator.restorablePush] to -/// push [DatePickerDialog] when the button is tapped. -/// -/// ** See code in examples/api/lib/material/date_picker/show_date_picker.0.dart ** -/// {@end-tool} -/// -/// See also: -/// -/// * [showDateRangePicker], which shows a Material Design date range picker -/// used to select a range of dates. -/// * [CalendarDatePicker], which provides the calendar grid used by the date picker dialog. -/// * [InputDatePickerFormField], which provides a text input field for entering dates. -/// * [DisplayFeatureSubScreen], which documents the specifics of how -/// [DisplayFeature]s can split the screen into sub-screens. -/// * [showTimePicker], which shows a dialog that contains a Material Design time picker. -/// -Future showDatePicker({ - required BuildContext context, - required DateTime initialDate, - required DateTime firstDate, - required DateTime lastDate, - DateTime? currentDate, - DatePickerEntryMode initialEntryMode = DatePickerEntryMode.calendar, - SelectableDayPredicate? selectableDayPredicate, - String? helpText, - String? cancelText, - String? confirmText, - Locale? locale, - bool useRootNavigator = true, - RouteSettings? routeSettings, - TextDirection? textDirection, - TransitionBuilder? builder, - DatePickerMode initialDatePickerMode = DatePickerMode.day, - String? errorFormatText, - String? errorInvalidText, - String? fieldHintText, - String? fieldLabelText, - TextInputType? keyboardType, - Offset? anchorPoint, -}) async { - assert(context != null); - assert(initialDate != null); - assert(firstDate != null); - assert(lastDate != null); - initialDate = DateUtils.dateOnly(initialDate); - firstDate = DateUtils.dateOnly(firstDate); - lastDate = DateUtils.dateOnly(lastDate); - assert( - !lastDate.isBefore(firstDate), - 'lastDate $lastDate must be on or after firstDate $firstDate.', - ); - assert( - !initialDate.isBefore(firstDate), - 'initialDate $initialDate must be on or after firstDate $firstDate.', - ); - assert( - !initialDate.isAfter(lastDate), - 'initialDate $initialDate must be on or before lastDate $lastDate.', - ); - assert( - selectableDayPredicate == null || selectableDayPredicate(initialDate), - 'Provided initialDate $initialDate must satisfy provided selectableDayPredicate.', - ); - assert(initialEntryMode != null); - assert(useRootNavigator != null); - assert(initialDatePickerMode != null); - assert(debugCheckHasMaterialLocalizations(context)); - - Widget dialog = DatePickerDialog( - initialDate: initialDate, - firstDate: firstDate, - lastDate: lastDate, - currentDate: currentDate, - initialEntryMode: initialEntryMode, - selectableDayPredicate: selectableDayPredicate, - helpText: helpText, - cancelText: cancelText, - confirmText: confirmText, - initialCalendarMode: initialDatePickerMode, - errorFormatText: errorFormatText, - errorInvalidText: errorInvalidText, - fieldHintText: fieldHintText, - fieldLabelText: fieldLabelText, - keyboardType: keyboardType, - ); - - if (textDirection != null) { - dialog = Directionality( - textDirection: textDirection, - child: dialog, - ); - } - - if (locale != null) { - dialog = Localizations.override( - context: context, - locale: locale, - child: dialog, - ); - } - - return showDialog( - context: context, - useRootNavigator: useRootNavigator, - routeSettings: routeSettings, - builder: (BuildContext context) { - return builder == null ? dialog : builder(context, dialog); - }, - anchorPoint: anchorPoint, - ); -} - -/// A Material-style date picker dialog. -/// -/// It is used internally by [showDatePicker] or can be directly pushed -/// onto the [Navigator] stack to enable state restoration. See -/// [showDatePicker] for a state restoration app example. -/// -/// See also: -/// -/// * [showDatePicker], which is a way to display the date picker. -class DatePickerDialog extends StatefulWidget { - /// A Material-style date picker dialog. - DatePickerDialog({ - super.key, - required DateTime initialDate, - required DateTime firstDate, - required DateTime lastDate, - DateTime? currentDate, - this.initialEntryMode = DatePickerEntryMode.calendar, - this.selectableDayPredicate, - this.cancelText, - this.confirmText, - this.helpText, - this.initialCalendarMode = DatePickerMode.day, - this.errorFormatText, - this.errorInvalidText, - this.fieldHintText, - this.fieldLabelText, - this.keyboardType, - this.restorationId, - }) : assert(initialDate != null), - assert(firstDate != null), - assert(lastDate != null), - initialDate = DateUtils.dateOnly(initialDate), - firstDate = DateUtils.dateOnly(firstDate), - lastDate = DateUtils.dateOnly(lastDate), - currentDate = DateUtils.dateOnly(currentDate ?? DateTime.now()), - assert(initialEntryMode != null), - assert(initialCalendarMode != null) { - assert( - !this.lastDate.isBefore(this.firstDate), - 'lastDate ${this.lastDate} must be on or after firstDate ${this.firstDate}.', - ); - assert( - !this.initialDate.isBefore(this.firstDate), - 'initialDate ${this.initialDate} must be on or after firstDate ${this.firstDate}.', - ); - assert( - !this.initialDate.isAfter(this.lastDate), - 'initialDate ${this.initialDate} must be on or before lastDate ${this.lastDate}.', - ); - assert( - selectableDayPredicate == null || - selectableDayPredicate!(this.initialDate), - 'Provided initialDate ${this.initialDate} must satisfy provided selectableDayPredicate', - ); - } - - /// The initially selected [DateTime] that the picker should display. - final DateTime initialDate; - - /// The earliest allowable [DateTime] that the user can select. - final DateTime firstDate; - - /// The latest allowable [DateTime] that the user can select. - final DateTime lastDate; - - /// The [DateTime] representing today. It will be highlighted in the day grid. - final DateTime currentDate; - - /// The initial mode of date entry method for the date picker dialog. - /// - /// See [DatePickerEntryMode] for more details on the different data entry - /// modes available. - final DatePickerEntryMode initialEntryMode; - - /// Function to provide full control over which [DateTime] can be selected. - final SelectableDayPredicate? selectableDayPredicate; - - /// The text that is displayed on the cancel button. - final String? cancelText; - - /// The text that is displayed on the confirm button. - final String? confirmText; - - /// The text that is displayed at the top of the header. - /// - /// This is used to indicate to the user what they are selecting a date for. - final String? helpText; - - /// The initial display of the calendar picker. - final DatePickerMode initialCalendarMode; - - /// The error text displayed if the entered date is not in the correct format. - final String? errorFormatText; - - /// The error text displayed if the date is not valid. - /// - /// A date is not valid if it is earlier than [firstDate], later than - /// [lastDate], or doesn't pass the [selectableDayPredicate]. - final String? errorInvalidText; - - /// The hint text displayed in the [TextField]. - /// - /// If this is null, it will default to the date format string. For example, - /// 'mm/dd/yyyy' for en_US. - final String? fieldHintText; - - /// The label text displayed in the [TextField]. - /// - /// If this is null, it will default to the words representing the date format - /// string. For example, 'Month, Day, Year' for en_US. - final String? fieldLabelText; - - /// The keyboard type of the [TextField]. - /// - /// If this is null, it will default to [TextInputType.datetime] - final TextInputType? keyboardType; - - /// Restoration ID to save and restore the state of the [DatePickerDialog]. - /// - /// If it is non-null, the date picker will persist and restore the - /// date selected on the dialog. - /// - /// The state of this widget is persisted in a [RestorationBucket] claimed - /// from the surrounding [RestorationScope] using the provided restoration ID. - /// - /// See also: - /// - /// * [RestorationManager], which explains how state restoration works in - /// Flutter. - final String? restorationId; - - @override - State createState() => _DatePickerDialogState(); -} - -class _DatePickerDialogState extends State - with RestorationMixin { - late final RestorableDateTime _selectedDate = - RestorableDateTime(widget.initialDate); - late final _RestorableDatePickerEntryMode _entryMode = - _RestorableDatePickerEntryMode(widget.initialEntryMode); - final _RestorableAutovalidateMode _autovalidateMode = - _RestorableAutovalidateMode(AutovalidateMode.disabled); - - @override - String? get restorationId => widget.restorationId; - - @override - void restoreState(RestorationBucket? oldBucket, bool initialRestore) { - registerForRestoration(_selectedDate, 'selected_date'); - registerForRestoration(_autovalidateMode, 'autovalidateMode'); - registerForRestoration(_entryMode, 'calendar_entry_mode'); - } - - final GlobalKey _calendarPickerKey = GlobalKey(); - final GlobalKey _formKey = GlobalKey(); - - void _handleOk() { - if (_entryMode.value == DatePickerEntryMode.input || - _entryMode.value == DatePickerEntryMode.inputOnly) { - final FormState form = _formKey.currentState!; - if (!form.validate()) { - setState(() => _autovalidateMode.value = AutovalidateMode.always); - return; - } - form.save(); - } - Navigator.pop(context, _selectedDate.value); - } - - void _handleCancel() { - Navigator.pop(context); - } - - void _handleEntryModeToggle() { - setState(() { - switch (_entryMode.value) { - case DatePickerEntryMode.calendar: - _autovalidateMode.value = AutovalidateMode.disabled; - _entryMode.value = DatePickerEntryMode.input; - break; - case DatePickerEntryMode.input: - _formKey.currentState!.save(); - _entryMode.value = DatePickerEntryMode.calendar; - break; - case DatePickerEntryMode.calendarOnly: - case DatePickerEntryMode.inputOnly: - assert(false, 'Can not change entry mode from _entryMode'); - break; - } - }); - } - - void _handleDateChanged(DateTime date) { - setState(() { - _selectedDate.value = date; - }); - } - - Size _dialogSize(BuildContext context) { - final Orientation orientation = MediaQuery.of(context).orientation; - switch (_entryMode.value) { - case DatePickerEntryMode.calendar: - case DatePickerEntryMode.calendarOnly: - switch (orientation) { - case Orientation.portrait: - return _calendarPortraitDialogSize; - case Orientation.landscape: - return _calendarLandscapeDialogSize; - } - case DatePickerEntryMode.input: - case DatePickerEntryMode.inputOnly: - switch (orientation) { - case Orientation.portrait: - return _inputPortraitDialogSize; - case Orientation.landscape: - return _inputLandscapeDialogSize; - } - } - } - - static const Map _formShortcutMap = - { - // Pressing enter on the field will move focus to the next field or control. - SingleActivator(LogicalKeyboardKey.enter): NextFocusIntent(), - }; - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final Orientation orientation = MediaQuery.of(context).orientation; - final TextTheme textTheme = theme.textTheme; - // Constrain the textScaleFactor to the largest supported value to prevent - // layout issues. - final double textScaleFactor = - math.min(MediaQuery.of(context).textScaleFactor, 1.3); - - final String dateText = localizations.formatMediumDate(_selectedDate.value); - final Color onPrimarySurface = colorScheme.brightness == Brightness.light - ? colorScheme.onPrimary - : colorScheme.onSurface; - final TextStyle? dateStyle = orientation == Orientation.landscape - ? textTheme.bodyMedium?.copyWith(color: onPrimarySurface) - : textTheme.bodySmall?.copyWith(color: onPrimarySurface); - - final Widget actions = Container( - alignment: AlignmentDirectional.centerEnd, - constraints: const BoxConstraints(minHeight: 52.0), - padding: const EdgeInsets.symmetric(horizontal: 8), - child: OverflowBar( - spacing: 8, - children: [ - TextButton( - onPressed: _handleCancel, - child: Text(widget.cancelText ?? localizations.cancelButtonLabel), - ), - TextButton( - onPressed: _handleOk, - child: Text(widget.confirmText ?? localizations.okButtonLabel), - ), - ], - ), - ); - - CalendarDatePicker calendarDatePicker() { - return CalendarDatePicker( - key: _calendarPickerKey, - initialDate: _selectedDate.value, - firstDate: widget.firstDate, - lastDate: widget.lastDate, - currentDate: widget.currentDate, - onDateChanged: _handleDateChanged, - selectableDayPredicate: widget.selectableDayPredicate, - initialCalendarMode: widget.initialCalendarMode, - ); - } - - Form inputDatePicker() { - return Form( - key: _formKey, - autovalidateMode: _autovalidateMode.value, - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 24), - height: orientation == Orientation.portrait - ? _inputFormPortraitHeight - : _inputFormLandscapeHeight, - child: Shortcuts( - shortcuts: _formShortcutMap, - child: Column( - children: [ - const Spacer(), - InputDatePickerFormField( - initialDate: _selectedDate.value, - firstDate: widget.firstDate, - lastDate: widget.lastDate, - onDateSubmitted: _handleDateChanged, - onDateSaved: _handleDateChanged, - selectableDayPredicate: widget.selectableDayPredicate, - errorFormatText: widget.errorFormatText, - errorInvalidText: widget.errorInvalidText, - fieldHintText: widget.fieldHintText, - fieldLabelText: widget.fieldLabelText, - keyboardType: widget.keyboardType, - autofocus: true, - ), - const Spacer(), - ], - ), - ), - ), - ); - } - - final Widget picker; - final Widget? entryModeButton; - switch (_entryMode.value) { - case DatePickerEntryMode.calendar: - picker = calendarDatePicker(); - entryModeButton = IconButton( - icon: const Icon(Icons.edit), - color: onPrimarySurface, - tooltip: localizations.inputDateModeButtonLabel, - onPressed: _handleEntryModeToggle, - ); - break; - - case DatePickerEntryMode.calendarOnly: - picker = calendarDatePicker(); - entryModeButton = null; - break; - - case DatePickerEntryMode.input: - picker = inputDatePicker(); - entryModeButton = IconButton( - icon: const Icon(Icons.calendar_today), - color: onPrimarySurface, - tooltip: localizations.calendarModeButtonLabel, - onPressed: _handleEntryModeToggle, - ); - break; - - case DatePickerEntryMode.inputOnly: - picker = inputDatePicker(); - entryModeButton = null; - break; - } - - final Widget header = _DatePickerHeader( - helpText: widget.helpText ?? localizations.datePickerHelpText, - titleText: dateText, - titleStyle: dateStyle, - orientation: orientation, - isShort: orientation == Orientation.landscape, - entryModeButton: entryModeButton, - ); - - final Size dialogSize = _dialogSize(context) * textScaleFactor; - return Dialog( - insetPadding: - const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0), - clipBehavior: Clip.antiAlias, - child: AnimatedContainer( - width: dialogSize.width, - height: dialogSize.height, - duration: _dialogSizeAnimationDuration, - curve: Curves.easeIn, - child: MediaQuery( - data: MediaQuery.of(context).copyWith( - textScaleFactor: textScaleFactor, - ), - child: Builder(builder: (BuildContext context) { - switch (orientation) { - case Orientation.portrait: - return Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - header, - Expanded(child: picker), - actions, - ], - ); - case Orientation.landscape: - return Row( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - header, - Flexible( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Expanded(child: picker), - actions, - ], - ), - ), - ], - ); - } - }), - ), - ), - ); - } -} - -// A restorable [DatePickerEntryMode] value. -// -// This serializes each entry as a unique `int` value. -class _RestorableDatePickerEntryMode - extends RestorableValue { - _RestorableDatePickerEntryMode( - DatePickerEntryMode defaultValue, - ) : _defaultValue = defaultValue; - - final DatePickerEntryMode _defaultValue; - - @override - DatePickerEntryMode createDefaultValue() => _defaultValue; - - @override - void didUpdateValue(DatePickerEntryMode? oldValue) { - assert(debugIsSerializableForRestoration(value.index)); - notifyListeners(); - } - - @override - DatePickerEntryMode fromPrimitives(Object? data) => - DatePickerEntryMode.values[data! as int]; - - @override - Object? toPrimitives() => value.index; -} - -// A restorable [AutovalidateMode] value. -// -// This serializes each entry as a unique `int` value. -class _RestorableAutovalidateMode extends RestorableValue { - _RestorableAutovalidateMode( - AutovalidateMode defaultValue, - ) : _defaultValue = defaultValue; - - final AutovalidateMode _defaultValue; - - @override - AutovalidateMode createDefaultValue() => _defaultValue; - - @override - void didUpdateValue(AutovalidateMode? oldValue) { - assert(debugIsSerializableForRestoration(value.index)); - notifyListeners(); - } - - @override - AutovalidateMode fromPrimitives(Object? data) => - AutovalidateMode.values[data! as int]; - - @override - Object? toPrimitives() => value.index; -} - -/// Re-usable widget that displays the selected date (in large font) and the -/// help text above it. -/// -/// These types include: -/// -/// * Single Date picker with calendar mode. -/// * Single Date picker with text input mode. -/// * Date Range picker with text input mode. -/// -/// [helpText], [orientation], [icon], [onIconPressed] are required and must be -/// non-null. -class _DatePickerHeader extends StatelessWidget { - /// Creates a header for use in a date picker dialog. - const _DatePickerHeader({ - required this.helpText, - required this.titleText, - this.titleSemanticsLabel, - required this.titleStyle, - required this.orientation, - this.isShort = false, - this.entryModeButton, - }) : assert(helpText != null), - assert(orientation != null), - assert(isShort != null); - - static const double _datePickerHeaderLandscapeWidth = 152.0; - static const double _datePickerHeaderPortraitHeight = 120.0; - static const double _headerPaddingLandscape = 16.0; - - /// The text that is displayed at the top of the header. - /// - /// This is used to indicate to the user what they are selecting a date for. - final String helpText; - - /// The text that is displayed at the center of the header. - final String titleText; - - /// The semantic label associated with the [titleText]. - final String? titleSemanticsLabel; - - /// The [TextStyle] that the title text is displayed with. - final TextStyle? titleStyle; - - /// The orientation is used to decide how to layout its children. - final Orientation orientation; - - /// Indicates the header is being displayed in a shorter/narrower context. - /// - /// This will be used to tighten up the space between the help text and date - /// text if `true`. Additionally, it will use a smaller typography style if - /// `true`. - /// - /// This is necessary for displaying the manual input mode in - /// landscape orientation, in order to account for the keyboard height. - final bool isShort; - - final Widget? entryModeButton; - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; - final TextTheme textTheme = theme.textTheme; - - // The header should use the primary color in light themes and surface color in dark - final bool isDark = colorScheme.brightness == Brightness.dark; - final Color primarySurfaceColor = - isDark ? colorScheme.surface : colorScheme.primary; - final Color onPrimarySurfaceColor = - isDark ? colorScheme.onSurface : colorScheme.onPrimary; - - final TextStyle? helpStyle = textTheme.bodyMedium?.copyWith( - color: onPrimarySurfaceColor, - ); - - final Text help = Text( - helpText, - style: helpStyle, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ); - final Text title = Text( - titleText, - semanticsLabel: titleSemanticsLabel ?? titleText, - style: titleStyle, - maxLines: orientation == Orientation.portrait ? 1 : 2, - overflow: TextOverflow.ellipsis, - ); - - switch (orientation) { - case Orientation.portrait: - return SizedBox( - height: _datePickerHeaderPortraitHeight, - child: Material( - color: primarySurfaceColor, - child: Padding( - padding: const EdgeInsetsDirectional.only( - start: 24, - end: 12, - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const SizedBox(height: 16), - help, - const Flexible(child: SizedBox(height: 38)), - Row( - children: [ - Expanded(child: title), - if (entryModeButton != null) entryModeButton!, - ], - ), - ], - ), - ), - ), - ); - case Orientation.landscape: - return SizedBox( - width: _datePickerHeaderLandscapeWidth, - child: Material( - color: primarySurfaceColor, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const SizedBox(height: 16), - Padding( - padding: const EdgeInsets.symmetric( - horizontal: _headerPaddingLandscape, - ), - child: help, - ), - SizedBox(height: isShort ? 16 : 56), - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: _headerPaddingLandscape, - ), - child: title, - ), - ), - if (entryModeButton != null) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 4), - child: entryModeButton, - ), - ], - ), - ), - ); - } - } -} - -/// Shows a full screen modal dialog containing a Material Design date range -/// picker. -/// -/// The returned [Future] resolves to the [DateTimeRange] selected by the user -/// when the user saves their selection. If the user cancels the dialog, null is -/// returned. -/// -/// If [initialDateRange] is non-null, then it will be used as the initially -/// selected date range. If it is provided, `initialDateRange.start` must be -/// before or on `initialDateRange.end`. -/// -/// The [firstDate] is the earliest allowable date. The [lastDate] is the latest -/// allowable date. Both must be non-null. -/// -/// If an initial date range is provided, `initialDateRange.start` -/// and `initialDateRange.end` must both fall between or on [firstDate] and -/// [lastDate]. For all of these [DateTime] values, only their dates are -/// considered. Their time fields are ignored. -/// -/// The [currentDate] represents the current day (i.e. today). This -/// date will be highlighted in the day grid. If null, the date of -/// `DateTime.now()` will be used. -/// -/// An optional [initialEntryMode] argument can be used to display the date -/// picker in the [DatePickerEntryMode.calendar] (a scrollable calendar month -/// grid) or [DatePickerEntryMode.input] (two text input fields) mode. -/// It defaults to [DatePickerEntryMode.calendar] and must be non-null. -/// -/// The following optional string parameters allow you to override the default -/// text used for various parts of the dialog: -/// -/// * [helpText], the label displayed at the top of the dialog. -/// * [cancelText], the label on the cancel button for the text input mode. -/// * [confirmText],the label on the ok button for the text input mode. -/// * [saveText], the label on the save button for the fullscreen calendar -/// mode. -/// * [errorFormatText], the message used when an input text isn't in a proper -/// date format. -/// * [errorInvalidText], the message used when an input text isn't a -/// selectable date. -/// * [errorInvalidRangeText], the message used when the date range is -/// invalid (e.g. start date is after end date). -/// * [fieldStartHintText], the text used to prompt the user when no text has -/// been entered in the start field. -/// * [fieldEndHintText], the text used to prompt the user when no text has -/// been entered in the end field. -/// * [fieldStartLabelText], the label for the start date text input field. -/// * [fieldEndLabelText], the label for the end date text input field. -/// -/// An optional [locale] argument can be used to set the locale for the date -/// picker. It defaults to the ambient locale provided by [Localizations]. -/// -/// An optional [textDirection] argument can be used to set the text direction -/// ([TextDirection.ltr] or [TextDirection.rtl]) for the date picker. It -/// defaults to the ambient text direction provided by [Directionality]. If both -/// [locale] and [textDirection] are non-null, [textDirection] overrides the -/// direction chosen for the [locale]. -/// -/// The [context], [useRootNavigator] and [routeSettings] arguments are passed -/// to [showDialog], the documentation for which discusses how it is used. -/// [context] and [useRootNavigator] must be non-null. -/// -/// The [builder] parameter can be used to wrap the dialog widget -/// to add inherited widgets like [Theme]. -/// -/// {@macro flutter.widgets.RawDialogRoute} -/// -/// ### State Restoration -/// -/// Using this method will not enable state restoration for the date range picker. -/// In order to enable state restoration for a date range picker, use -/// [Navigator.restorablePush] or [Navigator.restorablePushNamed] with -/// [DateRangePickerDialog]. -/// -/// For more information about state restoration, see [RestorationManager]. -/// -/// {@macro flutter.widgets.RestorationManager} -/// -/// {@tool sample} -/// This sample demonstrates how to create a restorable Material date range picker. -/// This is accomplished by enabling state restoration by specifying -/// [MaterialApp.restorationScopeId] and using [Navigator.restorablePush] to -/// push [DateRangePickerDialog] when the button is tapped. -/// -/// ** See code in examples/api/lib/material/date_picker/show_date_range_picker.0.dart ** -/// {@end-tool} -/// -/// See also: -/// -/// * [showDatePicker], which shows a Material Design date picker used to -/// select a single date. -/// * [DateTimeRange], which is used to describe a date range. -/// * [DisplayFeatureSubScreen], which documents the specifics of how -/// [DisplayFeature]s can split the screen into sub-screens. -Future showDateRangePicker({ - required BuildContext context, - DateTimeRange? initialDateRange, - required DateTime firstDate, - required DateTime lastDate, - DateTime? currentDate, - DatePickerEntryMode initialEntryMode = DatePickerEntryMode.calendar, - String? helpText, - String? cancelText, - String? confirmText, - String? saveText, - String? errorFormatText, - String? errorInvalidText, - String? errorInvalidRangeText, - String? fieldStartHintText, - String? fieldEndHintText, - String? fieldStartLabelText, - String? fieldEndLabelText, - Locale? locale, - bool useRootNavigator = true, - RouteSettings? routeSettings, - TextDirection? textDirection, - TransitionBuilder? builder, - Offset? anchorPoint, -}) async { - assert(context != null); - assert( - initialDateRange == null || - (initialDateRange.start != null && initialDateRange.end != null), - 'initialDateRange must be null or have non-null start and end dates.', - ); - assert( - initialDateRange == null || - !initialDateRange.start.isAfter(initialDateRange.end), - "initialDateRange's start date must not be after it's end date.", - ); - initialDateRange = - initialDateRange == null ? null : DateUtils.datesOnly(initialDateRange); - assert(firstDate != null); - firstDate = DateUtils.dateOnly(firstDate); - assert(lastDate != null); - lastDate = DateUtils.dateOnly(lastDate); - assert( - !lastDate.isBefore(firstDate), - 'lastDate $lastDate must be on or after firstDate $firstDate.', - ); - assert( - initialDateRange == null || !initialDateRange.start.isBefore(firstDate), - "initialDateRange's start date must be on or after firstDate $firstDate.", - ); - assert( - initialDateRange == null || !initialDateRange.end.isBefore(firstDate), - "initialDateRange's end date must be on or after firstDate $firstDate.", - ); - assert( - initialDateRange == null || !initialDateRange.start.isAfter(lastDate), - "initialDateRange's start date must be on or before lastDate $lastDate.", - ); - assert( - initialDateRange == null || !initialDateRange.end.isAfter(lastDate), - "initialDateRange's end date must be on or before lastDate $lastDate.", - ); - currentDate = DateUtils.dateOnly(currentDate ?? DateTime.now()); - assert(initialEntryMode != null); - assert(useRootNavigator != null); - assert(debugCheckHasMaterialLocalizations(context)); - - Widget dialog = DateRangePickerDialog( - initialDateRange: initialDateRange, - firstDate: firstDate, - lastDate: lastDate, - currentDate: currentDate, - initialEntryMode: initialEntryMode, - helpText: helpText, - cancelText: cancelText, - confirmText: confirmText, - saveText: saveText, - errorFormatText: errorFormatText, - errorInvalidText: errorInvalidText, - errorInvalidRangeText: errorInvalidRangeText, - fieldStartHintText: fieldStartHintText, - fieldEndHintText: fieldEndHintText, - fieldStartLabelText: fieldStartLabelText, - fieldEndLabelText: fieldEndLabelText, - ); - - if (textDirection != null) { - dialog = Directionality( - textDirection: textDirection, - child: dialog, - ); - } - - if (locale != null) { - dialog = Localizations.override( - context: context, - locale: locale, - child: dialog, - ); - } - - return showDialog( - context: context, - useRootNavigator: useRootNavigator, - routeSettings: routeSettings, - useSafeArea: false, - builder: (BuildContext context) { - return builder == null ? dialog : builder(context, dialog); - }, - anchorPoint: anchorPoint, - ); -} - -/// Returns a locale-appropriate string to describe the start of a date range. -/// -/// If `startDate` is null, then it defaults to 'Start Date', otherwise if it -/// is in the same year as the `endDate` then it will use the short month -/// day format (i.e. 'Jan 21'). Otherwise it will return the short date format -/// (i.e. 'Jan 21, 2020'). -String _formatRangeStartDate(MaterialLocalizations localizations, - DateTime? startDate, DateTime? endDate) { - return startDate == null - ? localizations.dateRangeStartLabel - : (endDate == null || startDate.year == endDate.year) - ? localizations.formatShortMonthDay(startDate) - : localizations.formatShortDate(startDate); -} - -/// Returns an locale-appropriate string to describe the end of a date range. -/// -/// If `endDate` is null, then it defaults to 'End Date', otherwise if it -/// is in the same year as the `startDate` and the `currentDate` then it will -/// just use the short month day format (i.e. 'Jan 21'), otherwise it will -/// include the year (i.e. 'Jan 21, 2020'). -String _formatRangeEndDate(MaterialLocalizations localizations, - DateTime? startDate, DateTime? endDate, DateTime currentDate) { - return endDate == null - ? localizations.dateRangeEndLabel - : (startDate != null && - startDate.year == endDate.year && - startDate.year == currentDate.year) - ? localizations.formatShortMonthDay(endDate) - : localizations.formatShortDate(endDate); -} - -/// A Material-style date range picker dialog. -/// -/// It is used internally by [showDateRangePicker] or can be directly pushed -/// onto the [Navigator] stack to enable state restoration. See -/// [showDateRangePicker] for a state restoration app example. -/// -/// See also: -/// -/// * [showDateRangePicker], which is a way to display the date picker. -class DateRangePickerDialog extends StatefulWidget { - /// A Material-style date range picker dialog. - const DateRangePickerDialog({ - super.key, - this.initialDateRange, - required this.firstDate, - required this.lastDate, - this.currentDate, - this.initialEntryMode = DatePickerEntryMode.calendar, - this.helpText, - this.cancelText, - this.confirmText, - this.saveText, - this.errorInvalidRangeText, - this.errorFormatText, - this.errorInvalidText, - this.fieldStartHintText, - this.fieldEndHintText, - this.fieldStartLabelText, - this.fieldEndLabelText, - this.restorationId, - }); - - /// The date range that the date range picker starts with when it opens. - /// - /// If an initial date range is provided, `initialDateRange.start` - /// and `initialDateRange.end` must both fall between or on [firstDate] and - /// [lastDate]. For all of these [DateTime] values, only their dates are - /// considered. Their time fields are ignored. - /// - /// If [initialDateRange] is non-null, then it will be used as the initially - /// selected date range. If it is provided, `initialDateRange.start` must be - /// before or on `initialDateRange.end`. - final DateTimeRange? initialDateRange; - - /// The earliest allowable date on the date range. - final DateTime firstDate; - - /// The latest allowable date on the date range. - final DateTime lastDate; - - /// The [currentDate] represents the current day (i.e. today). - /// - /// This date will be highlighted in the day grid. - /// - /// If `null`, the date of `DateTime.now()` will be used. - final DateTime? currentDate; - - /// The initial date range picker entry mode. - /// - /// The date range has two main modes: [DatePickerEntryMode.calendar] (a - /// scrollable calendar month grid) or [DatePickerEntryMode.input] (two text - /// input fields) mode. - /// - /// It defaults to [DatePickerEntryMode.calendar] and must be non-null. - final DatePickerEntryMode initialEntryMode; - - /// The label on the cancel button for the text input mode. - /// - /// If null, the localized value of - /// [MaterialLocalizations.cancelButtonLabel] is used. - final String? cancelText; - - /// The label on the "OK" button for the text input mode. - /// - /// If null, the localized value of - /// [MaterialLocalizations.okButtonLabel] is used. - final String? confirmText; - - /// The label on the save button for the fullscreen calendar mode. - /// - /// If null, the localized value of - /// [MaterialLocalizations.saveButtonLabel] is used. - final String? saveText; - - /// The label displayed at the top of the dialog. - /// - /// If null, the localized value of - /// [MaterialLocalizations.dateRangePickerHelpText] is used. - final String? helpText; - - /// The message used when the date range is invalid (e.g. start date is after - /// end date). - /// - /// If null, the localized value of - /// [MaterialLocalizations.invalidDateRangeLabel] is used. - final String? errorInvalidRangeText; - - /// The message used when an input text isn't in a proper date format. - /// - /// If null, the localized value of - /// [MaterialLocalizations.invalidDateFormatLabel] is used. - final String? errorFormatText; - - /// The message used when an input text isn't a selectable date. - /// - /// If null, the localized value of - /// [MaterialLocalizations.dateOutOfRangeLabel] is used. - final String? errorInvalidText; - - /// The text used to prompt the user when no text has been entered in the - /// start field. - /// - /// If null, the localized value of - /// [MaterialLocalizations.dateHelpText] is used. - final String? fieldStartHintText; - - /// The text used to prompt the user when no text has been entered in the - /// end field. - /// - /// If null, the localized value of [MaterialLocalizations.dateHelpText] is - /// used. - final String? fieldEndHintText; - - /// The label for the start date text input field. - /// - /// If null, the localized value of [MaterialLocalizations.dateRangeStartLabel] - /// is used. - final String? fieldStartLabelText; - - /// The label for the end date text input field. - /// - /// If null, the localized value of [MaterialLocalizations.dateRangeEndLabel] - /// is used. - final String? fieldEndLabelText; - - /// Restoration ID to save and restore the state of the [DateRangePickerDialog]. - /// - /// If it is non-null, the date range picker will persist and restore the - /// date range selected on the dialog. - /// - /// The state of this widget is persisted in a [RestorationBucket] claimed - /// from the surrounding [RestorationScope] using the provided restoration ID. - /// - /// See also: - /// - /// * [RestorationManager], which explains how state restoration works in - /// Flutter. - final String? restorationId; - - @override - State createState() => _DateRangePickerDialogState(); -} - -class _DateRangePickerDialogState extends State - with RestorationMixin { - late final _RestorableDatePickerEntryMode _entryMode = - _RestorableDatePickerEntryMode(widget.initialEntryMode); - late final RestorableDateTimeN _selectedStart = - RestorableDateTimeN(widget.initialDateRange?.start); - late final RestorableDateTimeN _selectedEnd = - RestorableDateTimeN(widget.initialDateRange?.end); - final RestorableBool _autoValidate = RestorableBool(false); - final GlobalKey _calendarPickerKey = GlobalKey(); - final GlobalKey<_InputDateRangePickerState> _inputPickerKey = - GlobalKey<_InputDateRangePickerState>(); - - @override - String? get restorationId => widget.restorationId; - - @override - void restoreState(RestorationBucket? oldBucket, bool initialRestore) { - registerForRestoration(_entryMode, 'entry_mode'); - registerForRestoration(_selectedStart, 'selected_start'); - registerForRestoration(_selectedEnd, 'selected_end'); - registerForRestoration(_autoValidate, 'autovalidate'); - } - - void _handleOk() { - if (_entryMode.value == DatePickerEntryMode.input || - _entryMode.value == DatePickerEntryMode.inputOnly) { - final _InputDateRangePickerState picker = _inputPickerKey.currentState!; - if (!picker.validate()) { - setState(() { - _autoValidate.value = true; - }); - return; - } - } - final DateTimeRange? selectedRange = _hasSelectedDateRange - ? DateTimeRange(start: _selectedStart.value!, end: _selectedEnd.value!) - : null; - - Navigator.pop(context, selectedRange); - } - - void _handleCancel() { - Navigator.pop(context); - } - - void _handleEntryModeToggle() { - setState(() { - switch (_entryMode.value) { - case DatePickerEntryMode.calendar: - _autoValidate.value = false; - _entryMode.value = DatePickerEntryMode.input; - break; - - case DatePickerEntryMode.input: - // Validate the range dates - if (_selectedStart.value != null && - (_selectedStart.value!.isBefore(widget.firstDate) || - _selectedStart.value!.isAfter(widget.lastDate))) { - _selectedStart.value = null; - // With no valid start date, having an end date makes no sense for the UI. - _selectedEnd.value = null; - } - if (_selectedEnd.value != null && - (_selectedEnd.value!.isBefore(widget.firstDate) || - _selectedEnd.value!.isAfter(widget.lastDate))) { - _selectedEnd.value = null; - } - // If invalid range (start after end), then just use the start date - if (_selectedStart.value != null && - _selectedEnd.value != null && - _selectedStart.value!.isAfter(_selectedEnd.value!)) { - _selectedEnd.value = null; - } - _entryMode.value = DatePickerEntryMode.calendar; - break; - - case DatePickerEntryMode.calendarOnly: - case DatePickerEntryMode.inputOnly: - assert(false, 'Can not change entry mode from $_entryMode'); - break; - } - }); - } - - void _handleStartDateChanged(DateTime? date) { - setState(() => _selectedStart.value = date); - } - - void _handleEndDateChanged(DateTime? date) { - setState(() => _selectedEnd.value = date); - } - - bool get _hasSelectedDateRange => - _selectedStart.value != null && _selectedEnd.value != null; - - @override - Widget build(BuildContext context) { - final MediaQueryData mediaQuery = MediaQuery.of(context); - final Orientation orientation = mediaQuery.orientation; - final double textScaleFactor = math.min(mediaQuery.textScaleFactor, 1.3); - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final ColorScheme colors = Theme.of(context).colorScheme; - final Color onPrimarySurface = colors.brightness == Brightness.light - ? colors.onPrimary - : colors.onSurface; - - final Widget contents; - final Size size; - ShapeBorder? shape; - final double elevation; - final EdgeInsets insetPadding; - final bool showEntryModeButton = - _entryMode.value == DatePickerEntryMode.calendar || - _entryMode.value == DatePickerEntryMode.input; - switch (_entryMode.value) { - case DatePickerEntryMode.calendar: - case DatePickerEntryMode.calendarOnly: - contents = _CalendarRangePickerDialog( - key: _calendarPickerKey, - selectedStartDate: _selectedStart.value, - selectedEndDate: _selectedEnd.value, - firstDate: widget.firstDate, - lastDate: widget.lastDate, - currentDate: widget.currentDate, - onStartDateChanged: _handleStartDateChanged, - onEndDateChanged: _handleEndDateChanged, - onConfirm: _hasSelectedDateRange ? _handleOk : null, - onCancel: _handleCancel, - entryModeButton: showEntryModeButton - ? IconButton( - icon: const Icon(Icons.edit), - padding: EdgeInsets.zero, - color: onPrimarySurface, - tooltip: localizations.inputDateModeButtonLabel, - onPressed: _handleEntryModeToggle, - ) - : null, - confirmText: widget.saveText ?? localizations.saveButtonLabel, - helpText: widget.helpText ?? localizations.dateRangePickerHelpText, - ); - size = mediaQuery.size; - insetPadding = EdgeInsets.zero; - shape = const RoundedRectangleBorder(); - elevation = 0; - break; - - case DatePickerEntryMode.input: - case DatePickerEntryMode.inputOnly: - contents = _InputDateRangePickerDialog( - selectedStartDate: _selectedStart.value, - selectedEndDate: _selectedEnd.value, - currentDate: widget.currentDate, - picker: Container( - padding: const EdgeInsets.symmetric(horizontal: 24), - height: orientation == Orientation.portrait - ? _inputFormPortraitHeight - : _inputFormLandscapeHeight, - child: Column( - children: [ - const Spacer(), - _InputDateRangePicker( - key: _inputPickerKey, - initialStartDate: _selectedStart.value, - initialEndDate: _selectedEnd.value, - firstDate: widget.firstDate, - lastDate: widget.lastDate, - onStartDateChanged: _handleStartDateChanged, - onEndDateChanged: _handleEndDateChanged, - autofocus: true, - autovalidate: _autoValidate.value, - helpText: widget.helpText, - errorInvalidRangeText: widget.errorInvalidRangeText, - errorFormatText: widget.errorFormatText, - errorInvalidText: widget.errorInvalidText, - fieldStartHintText: widget.fieldStartHintText, - fieldEndHintText: widget.fieldEndHintText, - fieldStartLabelText: widget.fieldStartLabelText, - fieldEndLabelText: widget.fieldEndLabelText, - ), - const Spacer(), - ], - ), - ), - onConfirm: _handleOk, - onCancel: _handleCancel, - entryModeButton: showEntryModeButton - ? IconButton( - icon: const Icon(Icons.calendar_today), - padding: EdgeInsets.zero, - color: onPrimarySurface, - tooltip: localizations.calendarModeButtonLabel, - onPressed: _handleEntryModeToggle, - ) - : null, - confirmText: widget.confirmText ?? localizations.okButtonLabel, - cancelText: widget.cancelText ?? localizations.cancelButtonLabel, - helpText: widget.helpText ?? localizations.dateRangePickerHelpText, - ); - final DialogThemeData dialogTheme = Theme.of(context).dialogTheme; - size = orientation == Orientation.portrait - ? _inputPortraitDialogSize - : _inputRangeLandscapeDialogSize; - insetPadding = - const EdgeInsets.symmetric(horizontal: 16.0, vertical: 24.0); - shape = dialogTheme.shape; - elevation = dialogTheme.elevation ?? 24; - break; - } - - return Dialog( - insetPadding: insetPadding, - shape: shape, - elevation: elevation, - clipBehavior: Clip.antiAlias, - child: AnimatedContainer( - width: size.width, - height: size.height, - duration: _dialogSizeAnimationDuration, - curve: Curves.easeIn, - child: MediaQuery( - data: MediaQuery.of(context).copyWith( - textScaleFactor: textScaleFactor, - ), - child: Builder(builder: (BuildContext context) { - return contents; - }), - ), - ), - ); - } -} - -class _CalendarRangePickerDialog extends StatelessWidget { - const _CalendarRangePickerDialog({ - super.key, - required this.selectedStartDate, - required this.selectedEndDate, - required this.firstDate, - required this.lastDate, - required this.currentDate, - required this.onStartDateChanged, - required this.onEndDateChanged, - required this.onConfirm, - required this.onCancel, - required this.confirmText, - required this.helpText, - this.entryModeButton, - }); - - final DateTime? selectedStartDate; - final DateTime? selectedEndDate; - final DateTime firstDate; - final DateTime lastDate; - final DateTime? currentDate; - final ValueChanged onStartDateChanged; - final ValueChanged onEndDateChanged; - final VoidCallback? onConfirm; - final VoidCallback? onCancel; - final String confirmText; - final String helpText; - final Widget? entryModeButton; - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final Orientation orientation = MediaQuery.of(context).orientation; - final TextTheme textTheme = theme.textTheme; - final Color headerForeground = colorScheme.brightness == Brightness.light - ? colorScheme.onPrimary - : colorScheme.onSurface; - final Color headerDisabledForeground = headerForeground.withOpacity(0.38); - final String startDateText = _formatRangeStartDate( - localizations, selectedStartDate, selectedEndDate); - final String endDateText = _formatRangeEndDate( - localizations, selectedStartDate, selectedEndDate, DateTime.now()); - final TextStyle? headlineStyle = textTheme.headlineSmall; - final TextStyle? startDateStyle = headlineStyle?.apply( - color: selectedStartDate != null - ? headerForeground - : headerDisabledForeground, - ); - final TextStyle? endDateStyle = headlineStyle?.apply( - color: - selectedEndDate != null ? headerForeground : headerDisabledForeground, - ); - final TextStyle saveButtonStyle = textTheme.titleMedium!.apply( - color: onConfirm != null ? headerForeground : headerDisabledForeground, - ); - - return SafeArea( - top: false, - left: false, - right: false, - child: Scaffold( - appBar: AppBar( - leading: CloseButton( - onPressed: onCancel, - ), - actions: [ - if (orientation == Orientation.landscape && entryModeButton != null) - entryModeButton!, - TextButton( - onPressed: onConfirm, - child: Text(confirmText, style: saveButtonStyle), - ), - const SizedBox(width: 8), - ], - bottom: PreferredSize( - preferredSize: const Size(double.infinity, 64), - child: Row(children: [ - SizedBox( - width: MediaQuery.of(context).size.width < 360 ? 42 : 72), - Expanded( - child: Semantics( - label: '$helpText $startDateText to $endDateText', - excludeSemantics: true, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - helpText, - style: textTheme.bodyMedium!.apply( - color: headerForeground, - ), - ), - const SizedBox(height: 8), - Row( - children: [ - Text( - startDateText, - style: startDateStyle, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - Text( - ' – ', - style: startDateStyle, - ), - Flexible( - child: Text( - endDateText, - style: endDateStyle, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ), - ], - ), - const SizedBox(height: 16), - ], - ), - ), - ), - if (orientation == Orientation.portrait && - entryModeButton != null) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0), - child: entryModeButton, - ), - ]), - ), - ), - body: _CalendarDateRangePicker( - initialStartDate: selectedStartDate, - initialEndDate: selectedEndDate, - firstDate: firstDate, - lastDate: lastDate, - currentDate: currentDate, - onStartDateChanged: onStartDateChanged, - onEndDateChanged: onEndDateChanged, - ), - ), - ); - } -} - -const Duration _monthScrollDuration = Duration(milliseconds: 200); - -const double _monthItemHeaderHeight = 58.0; -const double _monthItemFooterHeight = 12.0; -const double _monthItemRowHeight = 42.0; -const double _monthItemSpaceBetweenRows = 8.0; -const double _horizontalPadding = 8.0; -const double _maxCalendarWidthLandscape = 384.0; -const double _maxCalendarWidthPortrait = 480.0; - -/// Displays a scrollable calendar grid that allows a user to select a range -/// of dates. -class _CalendarDateRangePicker extends StatefulWidget { - /// Creates a scrollable calendar grid for picking date ranges. - _CalendarDateRangePicker({ - DateTime? initialStartDate, - DateTime? initialEndDate, - required DateTime firstDate, - required DateTime lastDate, - DateTime? currentDate, - required this.onStartDateChanged, - required this.onEndDateChanged, - }) : initialStartDate = initialStartDate != null - ? DateUtils.dateOnly(initialStartDate) - : null, - initialEndDate = - initialEndDate != null ? DateUtils.dateOnly(initialEndDate) : null, - assert(firstDate != null), - assert(lastDate != null), - firstDate = DateUtils.dateOnly(firstDate), - lastDate = DateUtils.dateOnly(lastDate), - currentDate = DateUtils.dateOnly(currentDate ?? DateTime.now()) { - assert( - this.initialStartDate == null || - this.initialEndDate == null || - !this.initialStartDate!.isAfter(initialEndDate!), - 'initialStartDate must be on or before initialEndDate.', - ); - assert( - !this.lastDate.isBefore(this.firstDate), - 'firstDate must be on or before lastDate.', - ); - } - - /// The [DateTime] that represents the start of the initial date range selection. - final DateTime? initialStartDate; - - /// The [DateTime] that represents the end of the initial date range selection. - final DateTime? initialEndDate; - - /// The earliest allowable [DateTime] that the user can select. - final DateTime firstDate; - - /// The latest allowable [DateTime] that the user can select. - final DateTime lastDate; - - /// The [DateTime] representing today. It will be highlighted in the day grid. - final DateTime currentDate; - - /// Called when the user changes the start date of the selected range. - final ValueChanged? onStartDateChanged; - - /// Called when the user changes the end date of the selected range. - final ValueChanged? onEndDateChanged; - - @override - _CalendarDateRangePickerState createState() => - _CalendarDateRangePickerState(); -} - -class _CalendarDateRangePickerState extends State<_CalendarDateRangePicker> { - final GlobalKey _scrollViewKey = GlobalKey(); - DateTime? _startDate; - DateTime? _endDate; - int _initialMonthIndex = 0; - late ScrollController _controller; - late bool _showWeekBottomDivider; - - @override - void initState() { - super.initState(); - _controller = ScrollController(); - _controller.addListener(_scrollListener); - - _startDate = widget.initialStartDate; - _endDate = widget.initialEndDate; - - // Calculate the index for the initially displayed month. This is needed to - // divide the list of months into two `SliverList`s. - final DateTime initialDate = widget.initialStartDate ?? widget.currentDate; - if (!initialDate.isBefore(widget.firstDate) && - !initialDate.isAfter(widget.lastDate)) { - _initialMonthIndex = DateUtils.monthDelta(widget.firstDate, initialDate); - } - - _showWeekBottomDivider = _initialMonthIndex != 0; - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - - void _scrollListener() { - if (_controller.offset <= _controller.position.minScrollExtent) { - setState(() { - _showWeekBottomDivider = false; - }); - } else if (!_showWeekBottomDivider) { - setState(() { - _showWeekBottomDivider = true; - }); - } - } - - int get _numberOfMonths => - DateUtils.monthDelta(widget.firstDate, widget.lastDate) + 1; - - void _vibrate() { - switch (Theme.of(context).platform) { - case TargetPlatform.android: - case TargetPlatform.fuchsia: - HapticFeedback.vibrate(); - break; - case TargetPlatform.iOS: - case TargetPlatform.linux: - case TargetPlatform.macOS: - case TargetPlatform.windows: - break; - } - } - - // This updates the selected date range using this logic: - // - // * From the unselected state, selecting one date creates the start date. - // * If the next selection is before the start date, reset date range and - // set the start date to that selection. - // * If the next selection is on or after the start date, set the end date - // to that selection. - // * After both start and end dates are selected, any subsequent selection - // resets the date range and sets start date to that selection. - void _updateSelection(DateTime date) { - _vibrate(); - setState(() { - if (_startDate != null && - _endDate == null && - !date.isBefore(_startDate!)) { - _endDate = date; - widget.onEndDateChanged?.call(_endDate); - } else { - _startDate = date; - widget.onStartDateChanged?.call(_startDate!); - if (_endDate != null) { - _endDate = null; - widget.onEndDateChanged?.call(_endDate); - } - } - }); - } - - Widget _buildMonthItem( - BuildContext context, int index, bool beforeInitialMonth) { - final int monthIndex = beforeInitialMonth - ? _initialMonthIndex - index - 1 - : _initialMonthIndex + index; - final DateTime month = - DateUtils.addMonthsToMonthDate(widget.firstDate, monthIndex); - return Stack( - alignment: Alignment.center, - children: [ - Text( - "${month.month}", - style: TextStyle(fontSize: 200, color: Colors.grey.withOpacity(0.1)), - ), - _MonthItem( - selectedDateStart: _startDate, - selectedDateEnd: _endDate, - currentDate: widget.currentDate, - firstDate: widget.firstDate, - lastDate: widget.lastDate, - displayedMonth: month, - onChanged: _updateSelection, - ), - ], - ); - } - - @override - Widget build(BuildContext context) { - const Key sliverAfterKey = Key('sliverAfterKey'); - - return Column( - children: [ - const _DayHeaders(), - if (_showWeekBottomDivider) const Divider(height: 0), - Expanded( - child: _CalendarKeyboardNavigator( - firstDate: widget.firstDate, - lastDate: widget.lastDate, - initialFocusedDay: - _startDate ?? widget.initialStartDate ?? widget.currentDate, - // In order to prevent performance issues when displaying the - // correct initial month, 2 `SliverList`s are used to split the - // months. The first item in the second SliverList is the initial - // month to be displayed. - child: CustomScrollView( - key: _scrollViewKey, - controller: _controller, - center: sliverAfterKey, - slivers: [ - SliverList( - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) => - _buildMonthItem(context, index, true), - childCount: _initialMonthIndex, - ), - ), - SliverList( - key: sliverAfterKey, - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) => - _buildMonthItem(context, index, false), - childCount: _numberOfMonths - _initialMonthIndex, - ), - ), - ], - ), - ), - ), - ], - ); - } -} - -class _CalendarKeyboardNavigator extends StatefulWidget { - const _CalendarKeyboardNavigator({ - required this.child, - required this.firstDate, - required this.lastDate, - required this.initialFocusedDay, - }); - - final Widget child; - final DateTime firstDate; - final DateTime lastDate; - final DateTime initialFocusedDay; - - @override - _CalendarKeyboardNavigatorState createState() => - _CalendarKeyboardNavigatorState(); -} - -class _CalendarKeyboardNavigatorState - extends State<_CalendarKeyboardNavigator> { - final Map _shortcutMap = - const { - SingleActivator(LogicalKeyboardKey.arrowLeft): - DirectionalFocusIntent(TraversalDirection.left), - SingleActivator(LogicalKeyboardKey.arrowRight): - DirectionalFocusIntent(TraversalDirection.right), - SingleActivator(LogicalKeyboardKey.arrowDown): - DirectionalFocusIntent(TraversalDirection.down), - SingleActivator(LogicalKeyboardKey.arrowUp): - DirectionalFocusIntent(TraversalDirection.up), - }; - late Map> _actionMap; - late FocusNode _dayGridFocus; - TraversalDirection? _dayTraversalDirection; - DateTime? _focusedDay; - - @override - void initState() { - super.initState(); - - _actionMap = >{ - NextFocusIntent: - CallbackAction(onInvoke: _handleGridNextFocus), - PreviousFocusIntent: CallbackAction( - onInvoke: _handleGridPreviousFocus), - DirectionalFocusIntent: CallbackAction( - onInvoke: _handleDirectionFocus), - }; - _dayGridFocus = FocusNode(debugLabel: 'Day Grid'); - } - - @override - void dispose() { - _dayGridFocus.dispose(); - super.dispose(); - } - - void _handleGridFocusChange(bool focused) { - setState(() { - if (focused) { - _focusedDay ??= widget.initialFocusedDay; - } - }); - } - - /// Move focus to the next element after the day grid. - void _handleGridNextFocus(NextFocusIntent intent) { - _dayGridFocus.requestFocus(); - _dayGridFocus.nextFocus(); - } - - /// Move focus to the previous element before the day grid. - void _handleGridPreviousFocus(PreviousFocusIntent intent) { - _dayGridFocus.requestFocus(); - _dayGridFocus.previousFocus(); - } - - /// Move the internal focus date in the direction of the given intent. - /// - /// This will attempt to move the focused day to the next selectable day in - /// the given direction. If the new date is not in the current month, then - /// the page view will be scrolled to show the new date's month. - /// - /// For horizontal directions, it will move forward or backward a day (depending - /// on the current [TextDirection]). For vertical directions it will move up and - /// down a week at a time. - void _handleDirectionFocus(DirectionalFocusIntent intent) { - assert(_focusedDay != null); - setState(() { - final DateTime? nextDate = - _nextDateInDirection(_focusedDay!, intent.direction); - if (nextDate != null) { - _focusedDay = nextDate; - _dayTraversalDirection = intent.direction; - } - }); - } - - static const Map _directionOffset = - { - TraversalDirection.up: -DateTime.daysPerWeek, - TraversalDirection.right: 1, - TraversalDirection.down: DateTime.daysPerWeek, - TraversalDirection.left: -1, - }; - - int _dayDirectionOffset( - TraversalDirection traversalDirection, TextDirection textDirection) { - // Swap left and right if the text direction if RTL - if (textDirection == TextDirection.rtl) { - if (traversalDirection == TraversalDirection.left) { - traversalDirection = TraversalDirection.right; - } else if (traversalDirection == TraversalDirection.right) { - traversalDirection = TraversalDirection.left; - } - } - return _directionOffset[traversalDirection]!; - } - - DateTime? _nextDateInDirection(DateTime date, TraversalDirection direction) { - final TextDirection textDirection = Directionality.of(context); - final DateTime nextDate = DateUtils.addDaysToDate( - date, _dayDirectionOffset(direction, textDirection)); - if (!nextDate.isBefore(widget.firstDate) && - !nextDate.isAfter(widget.lastDate)) { - return nextDate; - } - return null; - } - - @override - Widget build(BuildContext context) { - return FocusableActionDetector( - shortcuts: _shortcutMap, - actions: _actionMap, - focusNode: _dayGridFocus, - onFocusChange: _handleGridFocusChange, - child: _FocusedDate( - date: _dayGridFocus.hasFocus ? _focusedDay : null, - scrollDirection: _dayGridFocus.hasFocus ? _dayTraversalDirection : null, - child: widget.child, - ), - ); - } -} - -/// InheritedWidget indicating what the current focused date is for its children. -/// -/// This is used by the [_MonthPicker] to let its children [_DayPicker]s know -/// what the currently focused date (if any) should be. -class _FocusedDate extends InheritedWidget { - const _FocusedDate({ - required super.child, - this.date, - this.scrollDirection, - }); - - final DateTime? date; - final TraversalDirection? scrollDirection; - - @override - bool updateShouldNotify(_FocusedDate oldWidget) { - return !DateUtils.isSameDay(date, oldWidget.date) || - scrollDirection != oldWidget.scrollDirection; - } - - static _FocusedDate? of(BuildContext context) { - return context.dependOnInheritedWidgetOfExactType<_FocusedDate>(); - } -} - -class _DayHeaders extends StatelessWidget { - const _DayHeaders(); - - /// Builds widgets showing abbreviated days of week. The first widget in the - /// returned list corresponds to the first day of week for the current locale. - /// - /// Examples: - /// - /// ``` - /// ┌ Sunday is the first day of week in the US (en_US) - /// | - /// S M T W T F S <-- the returned list contains these widgets - /// _ _ _ _ _ 1 2 - /// 3 4 5 6 7 8 9 - /// - /// ┌ But it's Monday in the UK (en_GB) - /// | - /// M T W T F S S <-- the returned list contains these widgets - /// _ _ _ _ 1 2 3 - /// 4 5 6 7 8 9 10 - /// ``` - List _getDayHeaders( - TextStyle headerStyle, MaterialLocalizations localizations) { - final List result = []; - for (int i = localizations.firstDayOfWeekIndex; true; i = (i + 1) % 7) { - final String weekday = localizations.narrowWeekdays[i]; - result.add(ExcludeSemantics( - child: Center(child: Text(weekday, style: headerStyle)), - )); - if (i == (localizations.firstDayOfWeekIndex - 1) % 7) { - break; - } - } - return result; - } - - @override - Widget build(BuildContext context) { - final ThemeData themeData = Theme.of(context); - final ColorScheme colorScheme = themeData.colorScheme; - final TextStyle textStyle = - themeData.textTheme.bodyMedium!.apply(color: colorScheme.onSurface); - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final List labels = _getDayHeaders(textStyle, localizations); - - // Add leading and trailing containers for edges of the custom grid layout. - labels.insert(0, Container()); - labels.add(Container()); - - return Container( - constraints: BoxConstraints( - maxWidth: MediaQuery.of(context).orientation == Orientation.landscape - ? _maxCalendarWidthLandscape - : _maxCalendarWidthPortrait, - maxHeight: _monthItemRowHeight, - ), - child: GridView.custom( - shrinkWrap: true, - gridDelegate: _monthItemGridDelegate, - childrenDelegate: SliverChildListDelegate( - labels, - addRepaintBoundaries: false, - ), - ), - ); - } -} - -class _MonthItemGridDelegate extends SliverGridDelegate { - const _MonthItemGridDelegate(); - - @override - SliverGridLayout getLayout(SliverConstraints constraints) { - final double tileWidth = - (constraints.crossAxisExtent - 2 * _horizontalPadding) / - DateTime.daysPerWeek; - return _MonthSliverGridLayout( - crossAxisCount: DateTime.daysPerWeek + 2, - dayChildWidth: tileWidth, - edgeChildWidth: _horizontalPadding, - reverseCrossAxis: axisDirectionIsReversed(constraints.crossAxisDirection), - ); - } - - @override - bool shouldRelayout(_MonthItemGridDelegate oldDelegate) => false; -} - -const _MonthItemGridDelegate _monthItemGridDelegate = _MonthItemGridDelegate(); - -class _MonthSliverGridLayout extends SliverGridLayout { - /// Creates a layout that uses equally sized and spaced tiles for each day of - /// the week and an additional edge tile for padding at the start and end of - /// each row. - /// - /// This is necessary to facilitate the painting of the range highlight - /// correctly. - const _MonthSliverGridLayout({ - required this.crossAxisCount, - required this.dayChildWidth, - required this.edgeChildWidth, - required this.reverseCrossAxis, - }) : assert(crossAxisCount != null && crossAxisCount > 0), - assert(dayChildWidth != null && dayChildWidth >= 0), - assert(edgeChildWidth != null && edgeChildWidth >= 0), - assert(reverseCrossAxis != null); - - /// The number of children in the cross axis. - final int crossAxisCount; - - /// The width in logical pixels of the day child widgets. - final double dayChildWidth; - - /// The width in logical pixels of the edge child widgets. - final double edgeChildWidth; - - /// Whether the children should be placed in the opposite order of increasing - /// coordinates in the cross axis. - /// - /// For example, if the cross axis is horizontal, the children are placed from - /// left to right when [reverseCrossAxis] is false and from right to left when - /// [reverseCrossAxis] is true. - /// - /// Typically set to the return value of [axisDirectionIsReversed] applied to - /// the [SliverConstraints.crossAxisDirection]. - final bool reverseCrossAxis; - - /// The number of logical pixels from the leading edge of one row to the - /// leading edge of the next row. - double get _rowHeight { - return _monthItemRowHeight + _monthItemSpaceBetweenRows; - } - - /// The height in logical pixels of the children widgets. - double get _childHeight { - return _monthItemRowHeight; - } - - @override - int getMinChildIndexForScrollOffset(double scrollOffset) { - return crossAxisCount * (scrollOffset ~/ _rowHeight); - } - - @override - int getMaxChildIndexForScrollOffset(double scrollOffset) { - final int mainAxisCount = (scrollOffset / _rowHeight).ceil(); - return math.max(0, crossAxisCount * mainAxisCount - 1); - } - - double _getCrossAxisOffset(double crossAxisStart, bool isPadding) { - if (reverseCrossAxis) { - return ((crossAxisCount - 2) * dayChildWidth + 2 * edgeChildWidth) - - crossAxisStart - - (isPadding ? edgeChildWidth : dayChildWidth); - } - return crossAxisStart; - } - - @override - SliverGridGeometry getGeometryForChildIndex(int index) { - final int adjustedIndex = index % crossAxisCount; - final bool isEdge = - adjustedIndex == 0 || adjustedIndex == crossAxisCount - 1; - final double crossAxisStart = - math.max(0, (adjustedIndex - 1) * dayChildWidth + edgeChildWidth); - - return SliverGridGeometry( - scrollOffset: (index ~/ crossAxisCount) * _rowHeight, - crossAxisOffset: _getCrossAxisOffset(crossAxisStart, isEdge), - mainAxisExtent: _childHeight, - crossAxisExtent: isEdge ? edgeChildWidth : dayChildWidth, - ); - } - - @override - double computeMaxScrollOffset(int childCount) { - assert(childCount >= 0); - final int mainAxisCount = ((childCount - 1) ~/ crossAxisCount) + 1; - final double mainAxisSpacing = _rowHeight - _childHeight; - return _rowHeight * mainAxisCount - mainAxisSpacing; - } -} - -/// Displays the days of a given month and allows choosing a date range. -/// -/// The days are arranged in a rectangular grid with one column for each day of -/// the week. -class _MonthItem extends StatefulWidget { - /// Creates a month item. - _MonthItem({ - required this.selectedDateStart, - required this.selectedDateEnd, - required this.currentDate, - required this.onChanged, - required this.firstDate, - required this.lastDate, - required this.displayedMonth, - this.dragStartBehavior = DragStartBehavior.start, - }) : assert(firstDate != null), - assert(lastDate != null), - assert(!firstDate.isAfter(lastDate)), - assert(selectedDateStart == null || - !selectedDateStart.isBefore(firstDate)), - assert(selectedDateEnd == null || !selectedDateEnd.isBefore(firstDate)), - assert( - selectedDateStart == null || !selectedDateStart.isAfter(lastDate)), - assert(selectedDateEnd == null || !selectedDateEnd.isAfter(lastDate)), - assert(selectedDateStart == null || - selectedDateEnd == null || - !selectedDateStart.isAfter(selectedDateEnd)), - assert(currentDate != null), - assert(onChanged != null), - assert(displayedMonth != null), - assert(dragStartBehavior != null); - - /// The currently selected start date. - /// - /// This date is highlighted in the picker. - final DateTime? selectedDateStart; - - /// The currently selected end date. - /// - /// This date is highlighted in the picker. - final DateTime? selectedDateEnd; - - /// The current date at the time the picker is displayed. - final DateTime currentDate; - - /// Called when the user picks a day. - final ValueChanged onChanged; - - /// The earliest date the user is permitted to pick. - final DateTime firstDate; - - /// The latest date the user is permitted to pick. - final DateTime lastDate; - - /// The month whose days are displayed by this picker. - final DateTime displayedMonth; - - /// Determines the way that drag start behavior is handled. - /// - /// If set to [DragStartBehavior.start], the drag gesture used to scroll a - /// date picker wheel will begin at the position where the drag gesture won - /// the arena. If set to [DragStartBehavior.down] it will begin at the position - /// where a down event is first detected. - /// - /// In general, setting this to [DragStartBehavior.start] will make drag - /// animation smoother and setting it to [DragStartBehavior.down] will make - /// drag behavior feel slightly more reactive. - /// - /// By default, the drag start behavior is [DragStartBehavior.start]. - /// - /// See also: - /// - /// * [DragGestureRecognizer.dragStartBehavior], which gives an example for - /// the different behaviors. - final DragStartBehavior dragStartBehavior; - - @override - _MonthItemState createState() => _MonthItemState(); -} - -class _MonthItemState extends State<_MonthItem> { - /// List of [FocusNode]s, one for each day of the month. - late List _dayFocusNodes; - - @override - void initState() { - super.initState(); - final int daysInMonth = DateUtils.getDaysInMonth( - widget.displayedMonth.year, widget.displayedMonth.month); - _dayFocusNodes = List.generate( - daysInMonth, - (int index) => - FocusNode(skipTraversal: true, debugLabel: 'Day ${index + 1}'), - ); - } - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - // Check to see if the focused date is in this month, if so focus it. - final DateTime? focusedDate = _FocusedDate.of(context)?.date; - if (focusedDate != null && - DateUtils.isSameMonth(widget.displayedMonth, focusedDate)) { - _dayFocusNodes[focusedDate.day - 1].requestFocus(); - } - } - - @override - void dispose() { - for (final FocusNode node in _dayFocusNodes) { - node.dispose(); - } - super.dispose(); - } - - Color _highlightColor(BuildContext context) { - return Theme.of(context).colorScheme.primary.withOpacity(0.12); - } - - void _dayFocusChanged(bool focused) { - if (focused) { - final TraversalDirection? focusDirection = - _FocusedDate.of(context)?.scrollDirection; - if (focusDirection != null) { - ScrollPositionAlignmentPolicy policy = - ScrollPositionAlignmentPolicy.explicit; - switch (focusDirection) { - case TraversalDirection.up: - case TraversalDirection.left: - policy = ScrollPositionAlignmentPolicy.keepVisibleAtStart; - break; - case TraversalDirection.right: - case TraversalDirection.down: - policy = ScrollPositionAlignmentPolicy.keepVisibleAtEnd; - break; - } - Scrollable.ensureVisible( - primaryFocus!.context!, - duration: _monthScrollDuration, - alignmentPolicy: policy, - ); - } - } - } - - Widget _buildDayItem(BuildContext context, DateTime dayToBuild, - int firstDayOffset, int daysInMonth) { - final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; - final TextTheme textTheme = theme.textTheme; - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final TextDirection textDirection = Directionality.of(context); - final Color highlightColor = _highlightColor(context); - final int day = dayToBuild.day; - - final bool isDisabled = dayToBuild.isAfter(widget.lastDate) || - dayToBuild.isBefore(widget.firstDate); - - BoxDecoration? decoration; - TextStyle? itemStyle = textTheme.bodyMedium; - - final bool isRangeSelected = - widget.selectedDateStart != null && widget.selectedDateEnd != null; - final bool isSelectedDayStart = widget.selectedDateStart != null && - dayToBuild.isAtSameMomentAs(widget.selectedDateStart!); - final bool isSelectedDayEnd = widget.selectedDateEnd != null && - dayToBuild.isAtSameMomentAs(widget.selectedDateEnd!); - final bool isInRange = isRangeSelected && - dayToBuild.isAfter(widget.selectedDateStart!) && - dayToBuild.isBefore(widget.selectedDateEnd!); - - _HighlightPainter? highlightPainter; - - if (isSelectedDayStart || isSelectedDayEnd) { - // The selected start and end dates gets a circle background - // highlight, and a contrasting text color. - itemStyle = textTheme.bodyMedium?.apply(color: colorScheme.onPrimary); - decoration = BoxDecoration( - color: colorScheme.primary, - shape: BoxShape.circle, - ); - - if (isRangeSelected && - widget.selectedDateStart != widget.selectedDateEnd) { - final _HighlightPainterStyle style = isSelectedDayStart - ? _HighlightPainterStyle.highlightTrailing - : _HighlightPainterStyle.highlightLeading; - highlightPainter = _HighlightPainter( - color: highlightColor, - style: style, - textDirection: textDirection, - ); - } - } else if (isInRange) { - // The days within the range get a light background highlight. - highlightPainter = _HighlightPainter( - color: highlightColor, - style: _HighlightPainterStyle.highlightAll, - textDirection: textDirection, - ); - } else if (isDisabled) { - itemStyle = textTheme.bodyMedium - ?.apply(color: colorScheme.onSurface.withOpacity(0.38)); - } else if (DateUtils.isSameDay(widget.currentDate, dayToBuild)) { - // The current day gets a different text color and a circle stroke - // border. - itemStyle = textTheme.bodyMedium?.apply(color: colorScheme.primary); - decoration = BoxDecoration( - border: Border.all(color: colorScheme.primary), - shape: BoxShape.circle, - ); - } - - // We want the day of month to be spoken first irrespective of the - // locale-specific preferences or TextDirection. This is because - // an accessibility user is more likely to be interested in the - // day of month before the rest of the date, as they are looking - // for the day of month. To do that we prepend day of month to the - // formatted full date. - String semanticLabel = - '${localizations.formatDecimal(day)}, ${localizations.formatFullDate(dayToBuild)}'; - if (isSelectedDayStart) { - semanticLabel = - localizations.dateRangeStartDateSemanticLabel(semanticLabel); - } else if (isSelectedDayEnd) { - semanticLabel = - localizations.dateRangeEndDateSemanticLabel(semanticLabel); - } - - Widget dayWidget = Container( - decoration: decoration, - child: Center( - child: Semantics( - label: semanticLabel, - selected: isSelectedDayStart || isSelectedDayEnd, - child: ExcludeSemantics( - child: Text(localizations.formatDecimal(day), style: itemStyle), - ), - ), - ), - ); - - if (highlightPainter != null) { - dayWidget = CustomPaint( - painter: highlightPainter, - child: dayWidget, - ); - } - - if (!isDisabled) { - dayWidget = InkResponse( - focusNode: _dayFocusNodes[day - 1], - onTap: () => widget.onChanged(dayToBuild), - radius: _monthItemRowHeight / 2 + 4, - splashColor: colorScheme.primary.withOpacity(0.38), - onFocusChange: _dayFocusChanged, - child: dayWidget, - ); - } - - return dayWidget; - } - - Widget _buildEdgeContainer(BuildContext context, bool isHighlighted) { - return Container(color: isHighlighted ? _highlightColor(context) : null); - } - - @override - Widget build(BuildContext context) { - final ThemeData themeData = Theme.of(context); - final TextTheme textTheme = themeData.textTheme; - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final int year = widget.displayedMonth.year; - final int month = widget.displayedMonth.month; - final int daysInMonth = DateUtils.getDaysInMonth(year, month); - final int dayOffset = DateUtils.firstDayOffset(year, month, localizations); - final int weeks = ((daysInMonth + dayOffset) / DateTime.daysPerWeek).ceil(); - final double gridHeight = - weeks * _monthItemRowHeight + (weeks - 1) * _monthItemSpaceBetweenRows; - final List dayItems = []; - - for (int i = 0; true; i += 1) { - // 1-based day of month, e.g. 1-31 for January, and 1-29 for February on - // a leap year. - final int day = i - dayOffset + 1; - if (day > daysInMonth) { - break; - } - if (day < 1) { - dayItems.add(Container()); - } else { - final DateTime dayToBuild = DateTime(year, month, day); - final Widget dayItem = _buildDayItem( - context, - dayToBuild, - dayOffset, - daysInMonth, - ); - dayItems.add(dayItem); - } - } - - // Add the leading/trailing edge containers to each week in order to - // correctly extend the range highlight. - final List paddedDayItems = []; - for (int i = 0; i < weeks; i++) { - final int start = i * DateTime.daysPerWeek; - final int end = math.min( - start + DateTime.daysPerWeek, - dayItems.length, - ); - final List weekList = dayItems.sublist(start, end); - - final DateTime dateAfterLeadingPadding = - DateTime(year, month, start - dayOffset + 1); - // Only color the edge container if it is after the start date and - // on/before the end date. - final bool isLeadingInRange = !(dayOffset > 0 && i == 0) && - widget.selectedDateStart != null && - widget.selectedDateEnd != null && - dateAfterLeadingPadding.isAfter(widget.selectedDateStart!) && - !dateAfterLeadingPadding.isAfter(widget.selectedDateEnd!); - weekList.insert(0, _buildEdgeContainer(context, isLeadingInRange)); - - // Only add a trailing edge container if it is for a full week and not a - // partial week. - if (end < dayItems.length || - (end == dayItems.length && - dayItems.length % DateTime.daysPerWeek == 0)) { - final DateTime dateBeforeTrailingPadding = - DateTime(year, month, end - dayOffset); - // Only color the edge container if it is on/after the start date and - // before the end date. - final bool isTrailingInRange = widget.selectedDateStart != null && - widget.selectedDateEnd != null && - !dateBeforeTrailingPadding.isBefore(widget.selectedDateStart!) && - dateBeforeTrailingPadding.isBefore(widget.selectedDateEnd!); - weekList.add(_buildEdgeContainer(context, isTrailingInRange)); - } - - paddedDayItems.addAll(weekList); - } - - final double maxWidth = - MediaQuery.of(context).orientation == Orientation.landscape - ? _maxCalendarWidthLandscape - : _maxCalendarWidthPortrait; - return Column( - children: [ - Container( - constraints: BoxConstraints(maxWidth: maxWidth), - height: _monthItemHeaderHeight, - padding: const EdgeInsets.symmetric(horizontal: 16), - alignment: AlignmentDirectional.centerStart, - child: ExcludeSemantics( - child: Text( - localizations.formatMonthYear(widget.displayedMonth), - style: textTheme.bodyMedium! - .apply(color: themeData.colorScheme.onSurface), - ), - ), - ), - Container( - constraints: BoxConstraints( - maxWidth: maxWidth, - maxHeight: gridHeight, - ), - child: GridView.custom( - physics: const NeverScrollableScrollPhysics(), - gridDelegate: _monthItemGridDelegate, - childrenDelegate: SliverChildListDelegate( - paddedDayItems, - addRepaintBoundaries: false, - ), - ), - ), - const SizedBox(height: _monthItemFooterHeight), - ], - ); - } -} - -/// Determines which style to use to paint the highlight. -enum _HighlightPainterStyle { - /// Paints nothing. - none, - - /// Paints a rectangle that occupies the leading half of the space. - highlightLeading, - - /// Paints a rectangle that occupies the trailing half of the space. - highlightTrailing, - - /// Paints a rectangle that occupies all available space. - highlightAll, -} - -/// This custom painter will add a background highlight to its child. -/// -/// This highlight will be drawn depending on the [style], [color], and -/// [textDirection] supplied. It will either paint a rectangle on the -/// left/right, a full rectangle, or nothing at all. This logic is determined by -/// a combination of the [style] and [textDirection]. -class _HighlightPainter extends CustomPainter { - _HighlightPainter({ - required this.color, - this.style = _HighlightPainterStyle.none, - this.textDirection, - }); - - final Color color; - final _HighlightPainterStyle style; - final TextDirection? textDirection; - - @override - void paint(Canvas canvas, Size size) { - if (style == _HighlightPainterStyle.none) { - return; - } - - final Paint paint = Paint() - ..color = color - ..style = PaintingStyle.fill; - - final Rect rectLeft = Rect.fromLTWH(0, 0, size.width / 2, size.height); - final Rect rectRight = - Rect.fromLTWH(size.width / 2, 0, size.width / 2, size.height); - - switch (style) { - case _HighlightPainterStyle.highlightTrailing: - canvas.drawRect( - textDirection == TextDirection.ltr ? rectRight : rectLeft, - paint, - ); - break; - case _HighlightPainterStyle.highlightLeading: - canvas.drawRect( - textDirection == TextDirection.ltr ? rectLeft : rectRight, - paint, - ); - break; - case _HighlightPainterStyle.highlightAll: - canvas.drawRect( - Rect.fromLTWH(0, 0, size.width, size.height), - paint, - ); - break; - case _HighlightPainterStyle.none: - break; - } - } - - @override - bool shouldRepaint(CustomPainter oldDelegate) => false; -} - -class _InputDateRangePickerDialog extends StatelessWidget { - const _InputDateRangePickerDialog({ - required this.selectedStartDate, - required this.selectedEndDate, - required this.currentDate, - required this.picker, - required this.onConfirm, - required this.onCancel, - required this.confirmText, - required this.cancelText, - required this.helpText, - required this.entryModeButton, - }); - - final DateTime? selectedStartDate; - final DateTime? selectedEndDate; - final DateTime? currentDate; - final Widget picker; - final VoidCallback onConfirm; - final VoidCallback onCancel; - final String? confirmText; - final String? cancelText; - final String? helpText; - final Widget? entryModeButton; - - String _formatDateRange( - BuildContext context, DateTime? start, DateTime? end, DateTime now) { - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final String startText = _formatRangeStartDate(localizations, start, end); - final String endText = _formatRangeEndDate(localizations, start, end, now); - if (start == null || end == null) { - return localizations.unspecifiedDateRange; - } - if (Directionality.of(context) == TextDirection.ltr) { - return '$startText – $endText'; - } else { - return '$endText – $startText'; - } - } - - @override - Widget build(BuildContext context) { - final ThemeData theme = Theme.of(context); - final ColorScheme colorScheme = theme.colorScheme; - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final Orientation orientation = MediaQuery.of(context).orientation; - final TextTheme textTheme = theme.textTheme; - - final Color onPrimarySurfaceColor = - colorScheme.brightness == Brightness.light - ? colorScheme.onPrimary - : colorScheme.onSurface; - final TextStyle? dateStyle = orientation == Orientation.landscape - ? textTheme.bodySmall?.apply(color: onPrimarySurfaceColor) - : textTheme.bodyMedium?.apply(color: onPrimarySurfaceColor); - final String dateText = _formatDateRange( - context, selectedStartDate, selectedEndDate, currentDate!); - final String semanticDateText = selectedStartDate != null && - selectedEndDate != null - ? '${localizations.formatMediumDate(selectedStartDate!)} – ${localizations.formatMediumDate(selectedEndDate!)}' - : ''; - - final Widget header = _DatePickerHeader( - helpText: helpText ?? localizations.dateRangePickerHelpText, - titleText: dateText, - titleSemanticsLabel: semanticDateText, - titleStyle: dateStyle, - orientation: orientation, - isShort: orientation == Orientation.landscape, - entryModeButton: entryModeButton, - ); - - final Widget actions = Container( - alignment: AlignmentDirectional.centerEnd, - constraints: const BoxConstraints(minHeight: 52.0), - padding: const EdgeInsets.symmetric(horizontal: 8), - child: OverflowBar( - spacing: 8, - children: [ - TextButton( - onPressed: onCancel, - child: Text(cancelText ?? localizations.cancelButtonLabel), - ), - TextButton( - onPressed: onConfirm, - child: Text(confirmText ?? localizations.okButtonLabel), - ), - ], - ), - ); - - switch (orientation) { - case Orientation.portrait: - return Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - header, - Expanded(child: picker), - actions, - ], - ); - - case Orientation.landscape: - return Row( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - header, - Flexible( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Expanded(child: picker), - actions, - ], - ), - ), - ], - ); - } - } -} - -/// Provides a pair of text fields that allow the user to enter the start and -/// end dates that represent a range of dates. -class _InputDateRangePicker extends StatefulWidget { - /// Creates a row with two text fields configured to accept the start and end dates - /// of a date range. - _InputDateRangePicker({ - super.key, - DateTime? initialStartDate, - DateTime? initialEndDate, - required DateTime firstDate, - required DateTime lastDate, - required this.onStartDateChanged, - required this.onEndDateChanged, - this.helpText, - this.errorFormatText, - this.errorInvalidText, - this.errorInvalidRangeText, - this.fieldStartHintText, - this.fieldEndHintText, - this.fieldStartLabelText, - this.fieldEndLabelText, - this.autofocus = false, - this.autovalidate = false, - }) : initialStartDate = initialStartDate == null - ? null - : DateUtils.dateOnly(initialStartDate), - initialEndDate = - initialEndDate == null ? null : DateUtils.dateOnly(initialEndDate), - assert(firstDate != null), - firstDate = DateUtils.dateOnly(firstDate), - assert(lastDate != null), - lastDate = DateUtils.dateOnly(lastDate), - assert(firstDate != null), - assert(lastDate != null), - assert(autofocus != null), - assert(autovalidate != null); - - /// The [DateTime] that represents the start of the initial date range selection. - final DateTime? initialStartDate; - - /// The [DateTime] that represents the end of the initial date range selection. - final DateTime? initialEndDate; - - /// The earliest allowable [DateTime] that the user can select. - final DateTime firstDate; - - /// The latest allowable [DateTime] that the user can select. - final DateTime lastDate; - - /// Called when the user changes the start date of the selected range. - final ValueChanged? onStartDateChanged; - - /// Called when the user changes the end date of the selected range. - final ValueChanged? onEndDateChanged; - - /// The text that is displayed at the top of the header. - /// - /// This is used to indicate to the user what they are selecting a date for. - final String? helpText; - - /// Error text used to indicate the text in a field is not a valid date. - final String? errorFormatText; - - /// Error text used to indicate the date in a field is not in the valid range - /// of [firstDate] - [lastDate]. - final String? errorInvalidText; - - /// Error text used to indicate the dates given don't form a valid date - /// range (i.e. the start date is after the end date). - final String? errorInvalidRangeText; - - /// Hint text shown when the start date field is empty. - final String? fieldStartHintText; - - /// Hint text shown when the end date field is empty. - final String? fieldEndHintText; - - /// Label used for the start date field. - final String? fieldStartLabelText; - - /// Label used for the end date field. - final String? fieldEndLabelText; - - /// {@macro flutter.widgets.editableText.autofocus} - final bool autofocus; - - /// If true, this the date fields will validate and update their error text - /// immediately after every change. Otherwise, you must call - /// [_InputDateRangePickerState.validate] to validate. - final bool autovalidate; - - @override - _InputDateRangePickerState createState() => _InputDateRangePickerState(); -} - -/// The current state of an [_InputDateRangePicker]. Can be used to -/// [validate] the date field entries. -class _InputDateRangePickerState extends State<_InputDateRangePicker> { - late String _startInputText; - late String _endInputText; - DateTime? _startDate; - DateTime? _endDate; - late TextEditingController _startController; - late TextEditingController _endController; - String? _startErrorText; - String? _endErrorText; - bool _autoSelected = false; - - @override - void initState() { - super.initState(); - _startDate = widget.initialStartDate; - _startController = TextEditingController(); - _endDate = widget.initialEndDate; - _endController = TextEditingController(); - } - - @override - void dispose() { - _startController.dispose(); - _endController.dispose(); - super.dispose(); - } - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - if (_startDate != null) { - _startInputText = localizations.formatCompactDate(_startDate!); - final bool selectText = widget.autofocus && !_autoSelected; - _updateController(_startController, _startInputText, selectText); - _autoSelected = selectText; - } - - if (_endDate != null) { - _endInputText = localizations.formatCompactDate(_endDate!); - _updateController(_endController, _endInputText, false); - } - } - - /// Validates that the text in the start and end fields represent a valid - /// date range. - /// - /// Will return true if the range is valid. If not, it will - /// return false and display an appropriate error message under one of the - /// text fields. - bool validate() { - String? startError = _validateDate(_startDate); - final String? endError = _validateDate(_endDate); - if (startError == null && endError == null) { - if (_startDate!.isAfter(_endDate!)) { - startError = widget.errorInvalidRangeText ?? - MaterialLocalizations.of(context).invalidDateRangeLabel; - } - } - setState(() { - _startErrorText = startError; - _endErrorText = endError; - }); - return startError == null && endError == null; - } - - DateTime? _parseDate(String? text) { - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - return localizations.parseCompactDate(text); - } - - String? _validateDate(DateTime? date) { - if (date == null) { - return widget.errorFormatText ?? - MaterialLocalizations.of(context).invalidDateFormatLabel; - } else if (date.isBefore(widget.firstDate) || - date.isAfter(widget.lastDate)) { - return widget.errorInvalidText ?? - MaterialLocalizations.of(context).dateOutOfRangeLabel; - } - return null; - } - - void _updateController( - TextEditingController controller, String text, bool selectText) { - TextEditingValue textEditingValue = controller.value.copyWith(text: text); - if (selectText) { - textEditingValue = textEditingValue.copyWith( - selection: TextSelection( - baseOffset: 0, - extentOffset: text.length, - )); - } - controller.value = textEditingValue; - } - - void _handleStartChanged(String text) { - setState(() { - _startInputText = text; - _startDate = _parseDate(text); - widget.onStartDateChanged?.call(_startDate); - }); - if (widget.autovalidate) { - validate(); - } - } - - void _handleEndChanged(String text) { - setState(() { - _endInputText = text; - _endDate = _parseDate(text); - widget.onEndDateChanged?.call(_endDate); - }); - if (widget.autovalidate) { - validate(); - } - } - - @override - Widget build(BuildContext context) { - final MaterialLocalizations localizations = - MaterialLocalizations.of(context); - final InputDecorationThemeData inputTheme = - Theme.of(context).inputDecorationTheme; - return Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - child: TextField( - controller: _startController, - decoration: InputDecoration( - border: inputTheme.border ?? const UnderlineInputBorder(), - filled: inputTheme.filled, - hintText: widget.fieldStartHintText ?? localizations.dateHelpText, - labelText: widget.fieldStartLabelText ?? - localizations.dateRangeStartLabel, - errorText: _startErrorText, - ), - keyboardType: TextInputType.datetime, - onChanged: _handleStartChanged, - autofocus: widget.autofocus, - ), - ), - const SizedBox(width: 8), - Expanded( - child: TextField( - controller: _endController, - decoration: InputDecoration( - border: inputTheme.border ?? const UnderlineInputBorder(), - filled: inputTheme.filled, - hintText: widget.fieldEndHintText ?? localizations.dateHelpText, - labelText: - widget.fieldEndLabelText ?? localizations.dateRangeEndLabel, - errorText: _endErrorText, - ), - keyboardType: TextInputType.datetime, - onChanged: _handleEndChanged, - ), - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_de_DE.json deleted file mode 100644 index dd5215012..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "Dekorierte Box-Übergang", - "info": "Eine Unterklasse von AnimatedWidget, die einen Animator vom Typ Decorated verwendet, um eine Übergangsanimation zwischen zwei Decorated-Objekten für die Kindkomponente durchzuführen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DecoratedBoxTransition", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【position】 : Vordergrund-/Hintergrundfarbe 【DecorationPosition】", - "【decoration】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_en_US.json deleted file mode 100644 index 49466d8c5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "Decoration Transition", - "info": "A subclass of AnimatedWidget that uses a Decorated type animator to allow child components to transition between two Decorated objects.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DecoratedBoxTransition", - "desc": [ - "【child】: Child component 【Widget】", - "【position】: Foreground/Background color 【DecorationPosition】", - "【decoration】: Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_es_ES.json deleted file mode 100644 index a8cbf440a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "Transición de caja decorada", - "info": "Subclase de AnimatedWidget, utiliza un animador de tipo Decorated para permitir que los componentes secundarios realicen una animación de transición entre dos objetos Decorated.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DecoratedBoxTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【position】 : Color de primer plano/fondo 【DecorationPosition】", - "【decoration】 : Animación 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_fr_FR.json deleted file mode 100644 index 20bd975fd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "Transition de boîte décorée", - "info": "Sous-classe de AnimatedWidget, utilise un animateur de type Decorated pour permettre à un composant enfant de faire une transition animée entre deux objets Decorated.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DecoratedBoxTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【position】 : Couleur de premier plan/arrière-plan 【DecorationPosition】", - "【decoration】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_it_IT.json deleted file mode 100644 index bad2bb5ee..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "Transizione Decorata", - "info": "Sottoclasse di AnimatedWidget, utilizza un animatore di tipo Decorated per far sì che i componenti figli eseguano un'animazione di transizione tra due oggetti Decorated.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di DecoratedBoxTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【position】 : Colore di primo piano/sfondo 【DecorationPosition】", - "【decoration】 : Animazione 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ja_JP.json deleted file mode 100644 index 7b3d731a5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "装飾変換", - "info": "AnimatedWidgetのサブクラスで、Decoratedタイプのアニメーターを使用して、子コンポーネントが2つのDecoratedオブジェクト間で遷移アニメーションを行うようにします。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DecoratedBoxTransitionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【position】 : 前景/背景色 【DecorationPosition】", - "【decoration】 : アニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ko_KR.json deleted file mode 100644 index 856874152..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "장식 변환", - "info": "AnimatedWidget의 하위 클래스, Decorated 타입의 애니메이터를 사용하여 자식 위젯이 두 Decorated 객체 간에 전환 애니메이션을 수행합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DecoratedBoxTransition 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【position】 : 전경/배경색 【DecorationPosition】", - "【decoration】 : 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_pt_PT.json deleted file mode 100644 index 1cd6907fb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "Transição Decorada", - "info": "Subclasse de AnimatedWidget, usa um animador do tipo Decorated para permitir que os componentes filhos realizem uma animação de transição entre dois objetos Decorated.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do DecoratedBoxTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【position】 : Cor de frente/fundo 【DecorationPosition】", - "【decoration】 : Animação 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ru_RU.json deleted file mode 100644 index 665d61b51..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "Декорированный переход", - "info": "Подкласс AnimatedWidget, использует аниматор типа Decorated для создания переходной анимации между двумя объектами Decorated для дочерних компонентов.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DecoratedBoxTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【position】 : Передний/фоновый цвет 【DecorationPosition】", - "【decoration】 : Анимация 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_zh-CN.json deleted file mode 100644 index 6731cee6c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 113, - "name": "DecoratedBoxTransition", - "localName": "装饰变换", - "info": "AnimatedWidget的子类,使用Decorated类型的动画器让子组件在两个Decorated对象之间进行过渡动画。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DecoratedBoxTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【position】 : 前/背景色 【DecorationPosition】", - "【decoration】 : 动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/node1_base.dart deleted file mode 100644 index 1eced4434..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DecoratedBoxTransition/node1_base.dart +++ /dev/null @@ -1,68 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomDecoratedBoxTransition extends StatefulWidget { - const CustomDecoratedBoxTransition({Key? key}) : super(key: key); - - @override - _CustomDecoratedBoxTransitionState createState() => - _CustomDecoratedBoxTransitionState(); -} - -class _CustomDecoratedBoxTransitionState - extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 1), - ); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: SizedBox( - width: 200, - height: 100, - child: DecoratedBoxTransition( - position: DecorationPosition.background, - decoration: DecorationTween( - begin: const BoxDecoration( - color: Colors.greenAccent, - borderRadius: BorderRadius.all(Radius.circular(50)), - boxShadow: [ - BoxShadow( - offset: Offset(1, 1), - color: Colors.purple, - blurRadius: 3, - spreadRadius: 1) - ]), - end: const BoxDecoration( - color: Colors.orange, - borderRadius: BorderRadius.all(Radius.circular(10)), - boxShadow: [ - BoxShadow( - offset: Offset(1, 1), - color: Colors.blue, - blurRadius: 1, - spreadRadius: 0) - ])).animate(_ctrl), - child: const Icon(Icons.android, color: Colors.white, size: 60), - ), - )); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_de_DE.json deleted file mode 100644 index c4196581d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "Standard-Tab-Controller", - "info": "Bei der Verwendung von TabBar und TabBarView ist ein gemeinsamer Controller erforderlich, um die Steuerung der Tabs und Seiten zu implementieren. DefaultTabController bietet einen Standard-Controller, wenn kein Controller angegeben ist, und vereinfacht die Verwendung.", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DefaultTabController", - "desc": [ - "【length】 : Anzahl der Tabs 【int】", - "【initialIndex】 : Anfänglicher Tab-Index 【int】", - "【child】 : Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_en_US.json deleted file mode 100644 index 29fa51ca6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "Default Tab Controller", - "info": "When using TabBar and TabBarView, the same controller is needed to control both the tabs and the pages. DefaultTabController provides a default controller when no controller is specified, simplifying usage.", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DefaultTabController", - "desc": [ - "【length】: Number of tabs 【int】", - "【initialIndex】: Initial tab index 【int】", - "【child】: Component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_es_ES.json deleted file mode 100644 index b21625e15..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "Controlador de pestañas predeterminado", - "info": "Al usar TabBar y TabBarView, se necesita el mismo controlador para controlar las pestañas y las páginas. DefaultTabController proporciona un controlador predeterminado cuando no se especifica uno, simplificando su uso.", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DefaultTabController", - "desc": [ - "【length】 : Número de pestañas 【int】", - "【initialIndex】 : Índice inicial de la pestaña 【int】", - "【child】 : Componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_fr_FR.json deleted file mode 100644 index 6429435c9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "Contrôleur d'onglets par défaut", - "info": "Lors de l'utilisation de TabBar et TabBarView, il est nécessaire qu'un même contrôleur gère à la fois les onglets et les pages. DefaultTabController fournit un contrôleur par défaut lorsqu'aucun contrôleur n'est spécifié, simplifiant ainsi son utilisation.", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DefaultTabController", - "desc": [ - "【length】 : Nombre d'onglets 【int】", - "【initialIndex】 : Index de l'onglet initial 【int】", - "【child】 : Composant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_it_IT.json deleted file mode 100644 index 53653e081..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "Controllore di schede predefinito", - "info": "Quando si utilizza TabBar e TabBarView, è necessario che lo stesso controllore gestisca sia le schede che le pagine. DefaultTabController fornisce un controllore predefinito quando non ne viene specificato uno, semplificando l'uso.", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di DefaultTabController", - "desc": [ - "【length】 : Numero di schede 【int】", - "【initialIndex】 : Indice della scheda iniziale 【int】", - "【child】 : Componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ja_JP.json deleted file mode 100644 index a78257bad..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "デフォルトタブコントローラー", - "info": "TabBarとTabBarViewを使用する場合、同じコントローラーでタブとページの制御を実現する必要があります。DefaultTabControllerは、コントローラーが指定されていない場合にデフォルトのコントローラーを提供し、使用を簡素化します。", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTabControllerの基本的な使用法", - "desc": [ - "【length】 : タブの数 【int】", - "【initialIndex】 : 初期タブインデックス 【int】", - "【child】 : コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ko_KR.json deleted file mode 100644 index 5608a9a3f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "기본 탭 컨트롤러", - "info": "TabBar와 TabBarView를 사용할 때, 동일한 컨트롤러가 탭과 페이지를 제어해야 합니다. DefaultTabController는 컨트롤러가 지정되지 않았을 때 기본 컨트롤러를 제공하여 사용을 단순화합니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTabController 기본 사용", - "desc": [ - "【length】 : 탭 수 【int】", - "【initialIndex】 : 초기 탭 인덱스 【int】", - "【child】 : 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_pt_PT.json deleted file mode 100644 index 010a806d5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "Controlador de Abas Padrão", - "info": "Ao usar TabBar e TabBarView, é necessário que o mesmo controlador implemente o controle das abas e das páginas. O DefaultTabController fornece um controlador padrão quando nenhum controlador é especificado, simplificando o uso.", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DefaultTabController", - "desc": [ - "【length】 : Número de abas 【int】", - "【initialIndex】 : Índice inicial da aba 【int】", - "【child】 : Componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ru_RU.json deleted file mode 100644 index 09e795e21..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "Контроллер вкладок по умолчанию", - "info": "При использовании TabBar и TabBarView требуется один и тот же контроллер для управления вкладками и страницами. DefaultTabController предоставляет контроллер по умолчанию, если он не указан, что упрощает использование.", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DefaultTabController", - "desc": [ - "【length】 : Количество вкладок 【int】", - "【initialIndex】 : Начальный индекс вкладки 【int】", - "【child】 : Компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_zh-CN.json deleted file mode 100644 index 51d6dc7e1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 230, - "name": "DefaultTabController", - "localName": "默认页签控制器", - "info": "在使用 TabBar 和 TabBarView 时,需要同一个控制器实现页签和页面的控制。DefaultTabController 会在未指定控制器时提供默认控制器,简化使用。", - "lever": 3, - "family": 1, - "linkIds": [ - 148, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTabController基本使用", - "desc": [ - "【length】 : 页签数量 【int】", - "【initialIndex】 : 初始页签索引 【int】", - "【child】 : 组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/node1_base.dart deleted file mode 100644 index 3e04b5156..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTabController/node1_base.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class DefaultTabControllerDemo extends StatelessWidget { - final List tabs = const [ - Tab(text: '青眼白龙'), - Tab(text: '黑魔术师'), - Tab(text: '混沌战士'), - ]; - - const DefaultTabControllerDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: DefaultTabController( - length: tabs.length, - child: Scaffold( - appBar: AppBar( - title: const Text("DefaultTabController"), - bottom: TabBar( - tabs: tabs, - ), - ), - body: TabBarView( - children: tabs.map((Tab tab) { - return Center( - child: Text( - '${tab.text}', - style: const TextStyle(fontSize: 20), - ), - ); - }).toList(), - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_de_DE.json deleted file mode 100644 index 34d04c2b0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "Textstilübergang", - "info": "Eine Unterklasse von AnimatedWidget, die einen Animator vom Typ TextStyle verwendet, um Textkomponenten zwischen zwei TextStyle-Objekten zu animieren.", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DefaultTextStyleTransition", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【textAlign】 : Textausrichtung 【TextAlign】", - "【softWrap】 : Umbrüche aktivieren 【bool】", - "【maxLines】 : Maximale Zeilenanzahl 【int】", - "【overflow】 : Überlaufmodus 【TextOverflow】", - "【style】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_en_US.json deleted file mode 100644 index 2225e1be8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "Text Style Transition", - "info": "A subclass of AnimatedWidget, using a TextStyle type animator to transition text components between two TextStyle objects.", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DefaultTextStyleTransition", - "desc": [ - "【child】 : Child component 【Widget】", - "【textAlign】 : Text alignment 【TextAlign】", - "【softWrap】 : Whether to wrap 【bool】", - "【maxLines】 : Maximum number of lines 【int】", - "【overflow】 : Overflow mode 【TextOverflow】", - "【style】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_es_ES.json deleted file mode 100644 index 2e865c013..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "Transición de Estilo de Texto", - "info": "Subclase de AnimatedWidget, utiliza un animador de tipo TextStyle para permitir que los componentes de texto realicen una transición animada entre dos objetos TextStyle.", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DefaultTextStyleTransition", - "desc": [ - "【child】 : Widget hijo 【Widget】", - "【textAlign】 : Alineación del texto 【TextAlign】", - "【softWrap】 : Si debe envolver 【bool】", - "【maxLines】 : Número máximo de líneas 【int】", - "【overflow】 : Modo de desbordamiento 【TextOverflow】", - "【style】 : Animación 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_fr_FR.json deleted file mode 100644 index 42a88a161..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "Transition de style de texte", - "info": "Sous-classe de AnimatedWidget, utilise un animateur de type TextStyle pour permettre à un composant de texte de faire une transition animée entre deux objets TextStyle.", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DefaultTextStyleTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【textAlign】 : Alignement du texte 【TextAlign】", - "【softWrap】 : Enveloppement 【bool】", - "【maxLines】 : Nombre maximum de lignes 【int】", - "【overflow】 : Mode de débordement 【TextOverflow】", - "【style】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_it_IT.json deleted file mode 100644 index 5e229f8ff..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "Transizione dello stile del testo", - "info": "Sottoclasse di AnimatedWidget, utilizza un animatore di tipo TextStyle per far sì che i componenti di testo eseguano un'animazione di transizione tra due oggetti TextStyle.", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di DefaultTextStyleTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【textAlign】 : Allineamento del testo 【TextAlign】", - "【softWrap】 : Se avvolgere 【bool】", - "【maxLines】 : Numero massimo di righe 【int】", - "【overflow】 : Modalità di overflow 【TextOverflow】", - "【style】 : Animazione 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ja_JP.json deleted file mode 100644 index 3eb5d7259..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "テキストスタイルの切り替え", - "info": "AnimatedWidgetのサブクラスで、TextStyleタイプのアニメーターを使用して、テキストコンポーネントが2つのTextStyleオブジェクト間でトランジションアニメーションを行います。", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTextStyleTransitionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【textAlign】 : テキストの配置 【TextAlign】", - "【softWrap】 : ラップするかどうか 【bool】", - "【maxLines】 : 最大行数 【int】", - "【overflow】 : オーバーフローモード 【TextOverflow】", - "【style】 : アニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ko_KR.json deleted file mode 100644 index 2e3f8d7f9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "텍스트 스타일 전환", - "info": "AnimatedWidget의 하위 클래스로, TextStyle 타입의 애니메이터를 사용하여 텍스트 컴포넌트가 두 TextStyle 객체 사이에서 전환 애니메이션을 수행합니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTextStyleTransition 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【textAlign】 : 텍스트 정렬 방식 【TextAlign】", - "【softWrap】 : 감싸기 여부 【bool】", - "【maxLines】 : 최대 줄 수 【int】", - "【overflow】 : 오버플로우 모드 【TextOverflow】", - "【style】 : 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_pt_PT.json deleted file mode 100644 index 32515881a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "Transição de Estilo de Texto", - "info": "Subclasse de AnimatedWidget, utiliza um animador do tipo TextStyle para permitir que componentes de texto façam uma transição animada entre dois objetos TextStyle.", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de DefaultTextStyleTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【textAlign】 : Alinhamento do texto 【TextAlign】", - "【softWrap】 : Se deve envolver 【bool】", - "【maxLines】 : Número máximo de linhas 【int】", - "【overflow】 : Modo de overflow 【TextOverflow】", - "【style】 : Animação 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ru_RU.json deleted file mode 100644 index 06190b7e8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "Анимация стиля текста", - "info": "Подкласс AnimatedWidget, использует аниматор типа TextStyle для создания анимации перехода между двумя объектами TextStyle в текстовых компонентах.", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DefaultTextStyleTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【textAlign】 : Выравнивание текста 【TextAlign】", - "【softWrap】 : Обернуть ли текст 【bool】", - "【maxLines】 : Максимальное количество строк 【int】", - "【overflow】 : Режим переполнения 【TextOverflow】", - "【style】 : Анимация 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_zh-CN.json deleted file mode 100644 index bd6649d12..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 114, - "name": "DefaultTextStyleTransition", - "localName": "文字样式变换", - "info": "AnimatedWidget的子类,使用TextStyle类型的动画器让文字组件在两个TextStyle对象之间进行过渡动画。", - "lever": 3, - "family": 1, - "linkIds": [ - 124, - 324 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DefaultTextStyleTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【textAlign】 : 文字对齐方式 【TextAlign】", - "【softWrap】 : 是否包裹 【bool】", - "【maxLines】 : 最大行数 【int】", - "【overflow】 : 溢出模式 【TextOverflow】", - "【style】 : 动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/node1_base.dart deleted file mode 100644 index da7853e0f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DefaultTextStyleTransition/node1_base.dart +++ /dev/null @@ -1,75 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomDefaultTextStyleTransition extends StatefulWidget { - const CustomDefaultTextStyleTransition({Key? key}) : super(key: key); - - @override - _CustomDefaultTextStyleTransitionState createState() => - _CustomDefaultTextStyleTransitionState(); -} - -class _CustomDefaultTextStyleTransitionState - extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 1), - ); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () { - setState(() { - _ctrl.reset(); - _ctrl.forward(); - }); - }, - child: Container( - alignment: Alignment.center, - width: 300, - height: 100, - child: DefaultTextStyleTransition( - textAlign: TextAlign.start, - softWrap: true, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyleTween( - begin: const TextStyle( - color: Colors.blue, - fontSize: 50, - shadows: [ - Shadow( - offset: Offset(1, 1), - color: Colors.black, - blurRadius: 3) - ]), - end: const TextStyle( - color: Colors.white, - fontSize: 20, - shadows: [ - Shadow( - offset: Offset(1, 1), - color: Colors.purple, - blurRadius: 3) - ])).animate(_ctrl), - child: const Text('张风捷特烈'), - ), - )); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_de_DE.json deleted file mode 100644 index cb6cb1f98..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "Wischbar", - "info": "Beim Wischen kann die untere Komponente angezeigt werden, die Wischrichtung und die seitliche Verschiebung können angegeben werden. Empfängt Rückrufe bei Bestätigung des Verschwindens und beim Verschwinden.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Dismissible", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【background】 : Linke Unterseite 【Widget】", - "【secondaryBackground】 : Rechte Unterseite 【Widget】", - "【key】 : Schlüssel 【Key】", - "【confirmDismiss】 : Bestätigungsrückruf 【DismissDirectionCallback】", - "【onDismissed】 : Rückruf beim Verschwinden 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Grundlegende Verwendung von Dismissible", - "desc": [ - "【direction】 : Richtung 【DismissDirection】", - "【crossAxisEndOffset】 : Verschiebung 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_en_US.json deleted file mode 100644 index 647ec0b09..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "Swipe to Dismiss", - "info": "When swiping, the bottom component can be displayed, and the direction of the swipe and the offset of the cross axis can be specified. Receives callbacks for confirming dismissal and when dismissed.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Dismissible", - "desc": [ - "【child】: Child component 【Widget】", - "【background】: Left bottom 【Widget】", - "【secondaryBackground】: Right bottom 【Widget】", - "【key】: Key 【Key】", - "【confirmDismiss】: Confirmation callback 【DismissDirectionCallback】", - "【onDismissed】: Dismissal callback 【DismissDirectionCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Basic Usage of Dismissible", - "desc": [ - "【direction】: Direction 【DismissDirection】", - "【crossAxisEndOffset】: Offset 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_es_ES.json deleted file mode 100644 index d128f79e1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "Deslizar para desaparecer", - "info": "Al deslizar, se puede mostrar el componente inferior. Se puede especificar la dirección del deslizamiento y el desplazamiento del eje cruzado. Recibe devoluciones de llamada de confirmación de desaparición y desaparición.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Dismissible", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【background】 : Fondo izquierdo 【Widget】", - "【secondaryBackground】 : Fondo derecho 【Widget】", - "【key】 : Clave 【Key】", - "【confirmDismiss】 : Devolución de llamada de confirmación 【DismissDirectionCallback】", - "【onDismissed】 : Devolución de llamada de desaparición 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Uso básico de Dismissible", - "desc": [ - "【direction】 : Dirección 【DismissDirection】", - "【crossAxisEndOffset】 : Desplazamiento 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_fr_FR.json deleted file mode 100644 index 03d61cd7b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "Glissement pour disparaître", - "info": "Lors du glissement, le composant inférieur peut être affiché. Il est possible de spécifier la direction du glissement et le décalage de l'axe croisé. Reçoit des rappels de confirmation de disparition et de disparition.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Dismissible", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【background】 : Fond gauche 【Widget】", - "【secondaryBackground】 : Fond droit 【Widget】", - "【key】 : Clé 【Key】", - "【confirmDismiss】 : Rappel de confirmation 【DismissDirectionCallback】", - "【onDismissed】 : Rappel de disparition 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Utilisation de base de Dismissible", - "desc": [ - "【direction】 : Direction 【DismissDirection】", - "【crossAxisEndOffset】 : Décalage 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_it_IT.json deleted file mode 100644 index 96b274752..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "Scorrimento per eliminare", - "info": "Durante lo scorrimento è possibile visualizzare il componente sottostante, è possibile specificare la direzione dello scorrimento e l'offset dell'asse trasversale. Riceve callback di conferma eliminazione e di eliminazione.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Dismissible", - "desc": [ - "【child】 : componente figlio 【Widget】", - "【background】 : fondo sinistro 【Widget】", - "【secondaryBackground】 : fondo destro 【Widget】", - "【key】 : chiave 【Key】", - "【confirmDismiss】 : callback di conferma 【DismissDirectionCallback】", - "【onDismissed】 : callback di eliminazione 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Uso di base di Dismissible", - "desc": [ - "【direction】 : direzione 【DismissDirection】", - "【crossAxisEndOffset】 : offset 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ja_JP.json deleted file mode 100644 index 4f656b32b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "スワイプで消える", - "info": "スワイプ時に下部コンポーネントを表示でき、スワイプの方向と交差軸のオフセットを指定できます。確認消失と消失時のコールバックを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Dismissibleの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【background】 : 左底 【Widget】", - "【secondaryBackground】 : 右底 【Widget】", - "【key】 : キー 【Key】", - "【confirmDismiss】 : 確認コールバック 【DismissDirectionCallback】", - "【onDismissed】 : 消失コールバック 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Dismissibleの基本使用", - "desc": [ - "【direction】 : 方向 【DismissDirection】", - "【crossAxisEndOffset】 : オフセット 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ko_KR.json deleted file mode 100644 index 9d03c0280..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "슬라이드로 사라짐", - "info": "슬라이드 시 하위 컴포넌트를 표시할 수 있으며, 슬라이드 방향과 교차 축의 오프셋을 지정할 수 있습니다. 사라짐 확인 및 사라짐 시 콜백을 받습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Dismissible 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【background】 : 왼쪽 하단 【Widget】", - "【secondaryBackground】 : 오른쪽 하단 【Widget】", - "【key】 : 키 【Key】", - "【confirmDismiss】 : 확인 콜백 【DismissDirectionCallback】", - "【onDismissed】 : 사라짐 콜백 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Dismissible 기본 사용", - "desc": [ - "【direction】 : 방향 【DismissDirection】", - "【crossAxisEndOffset】 : 오프셋 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_pt_PT.json deleted file mode 100644 index 0a9c30ace..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "Deslizar para desaparecer", - "info": "Ao deslizar, o componente inferior pode ser exibido, e a direção do deslize e o deslocamento do eixo cruzado podem ser especificados. Recebe retornos de chamada para confirmação de desaparecimento e desaparecimento.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Dismissible", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【background】 : Fundo esquerdo 【Widget】", - "【secondaryBackground】 : Fundo direito 【Widget】", - "【key】 : Chave 【Key】", - "【confirmDismiss】 : Retorno de chamada de confirmação 【DismissDirectionCallback】", - "【onDismissed】 : Retorno de chamada de desaparecimento 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Uso básico do Dismissible", - "desc": [ - "【direction】 : Direção 【DismissDirection】", - "【crossAxisEndOffset】 : Deslocamento 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ru_RU.json deleted file mode 100644 index 128c3c9f2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "Скользящее исчезновение", - "info": "При скольжении можно отобразить компонент внизу, можно указать направление скольжения и смещение по поперечной оси. Получает обратные вызовы при подтверждении исчезновения и исчезновении.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Dismissible", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【background】 : Левый низ 【Widget】", - "【secondaryBackground】 : Правый низ 【Widget】", - "【key】 : Ключ 【Key】", - "【confirmDismiss】 : Обратный вызов подтверждения 【DismissDirectionCallback】", - "【onDismissed】 : Обратный вызов исчезновения 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Основное использование Dismissible", - "desc": [ - "【direction】 : Направление 【DismissDirection】", - "【crossAxisEndOffset】 : Смещение 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_zh-CN.json deleted file mode 100644 index f4f9ae05c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 176, - "name": "Dismissible", - "localName": "滑动消失", - "info": "滑动时可显示底部组件,可指定滑动的方向和交叉轴的偏移量。接收确认消失和消失时的回调。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Dismissible基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【background】 : 左底 【Widget】", - "【secondaryBackground】 : 右底 【Widget】", - "【key】 : 键 【Key】", - "【confirmDismiss】 : 确认回调 【DismissDirectionCallback】", - "【onDismissed】 : 消失回调 【DismissDirectionCallback】," - ] - }, - { - "file": "node2_direction.dart", - "name": "Dismissible基本使用", - "desc": [ - "【direction】 : 方向 【DismissDirection】", - "【crossAxisEndOffset】 : 偏移 【double】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/node1_base.dart deleted file mode 100644 index 06622dddb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/node1_base.dart +++ /dev/null @@ -1,87 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomDismissible extends StatefulWidget { - const CustomDismissible({Key? key}) : super(key: key); - - @override - _CustomDismissibleState createState() => _CustomDismissibleState(); -} - -class _CustomDismissibleState extends State { - final List data = [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ListView( - padding: const EdgeInsets.symmetric(horizontal: 5), - children: data.map((color) => _buildItem(color)).toList(), - ), - ); - } - - Widget _buildItem(Color color) { - return Dismissible( - background: Container( - color: Colors.green, - alignment: const Alignment(-0.9, 0), - child: const Icon( - Icons.check, - color: Colors.white, - ), - ), - secondaryBackground: Container( - alignment: const Alignment(0.9, 0), - child: const Icon( - Icons.close, - color: Colors.white, - ), - color: Colors.red, - ), - key: ValueKey(color), - onDismissed: (d) { - data.remove(color); - }, - confirmDismiss: (e) async { - if (e == DismissDirection.endToStart) { - return true; - } else { - return false; - } - }, - child: Container( - alignment: Alignment.center, - height: 50, - color: color, - child: Text( - colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]), - ), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/node2_direction.dart b/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/node2_direction.dart deleted file mode 100644 index 66ee53a01..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Dismissible/node2_direction.dart +++ /dev/null @@ -1,99 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class DirectionDismissible extends StatefulWidget { - const DirectionDismissible({Key? key}) : super(key: key); - - @override - _CustomDirectionDismissibleState createState() => - _CustomDirectionDismissibleState(); -} - -class _CustomDirectionDismissibleState extends State { - final List data = [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ListView( - scrollDirection: Axis.horizontal, - padding: const EdgeInsets.symmetric(horizontal: 5), - children: data.map((color) => _buildItem(color)).toList(), - ), - ); - } - - Widget _buildItem(Color color) { - return Dismissible( - direction: DismissDirection.vertical, - background: Container( - color: Colors.green, - alignment: const Alignment( - 0, - -0.9, - ), - child: const Icon( - Icons.check, - color: Colors.white, - ), - ), - crossAxisEndOffset: 0.5, - secondaryBackground: Container( - alignment: const Alignment( - 0, - 0.9, - ), - child: const Icon( - Icons.close, - color: Colors.white, - ), - color: Colors.red, - ), - key: ValueKey(color), - onDismissed: (d) { - data.remove(color); - }, - confirmDismiss: (e) async { - print(e); - if (e == DismissDirection.up) { - return true; - } else { - return false; - } - }, - child: Container( - alignment: Alignment.center, - width: 80, - color: color, - child: Text( - colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]), - ), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_de_DE.json deleted file mode 100644 index 81b99c4f7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "Ziel zum Ziehen", - "info": "Ein Zielbereich zum Ziehen, der Informationen von der Draggable-Komponente empfangen kann. Kann Rückrufe beim Ziehen erhalten.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DragTarget", - "desc": [ - "【builder】 : Komponentenkonstruktor 【DragTargetBuilder】", - "【onWillAccept】 : Beim Ziehen 【Function(T)】", - "【onAccept】 : Ziehen erfolgreich 【Function(T)】", - "【onLeave】 : Ziehen und Loslassen 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_en_US.json deleted file mode 100644 index c78436447..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "Drag Target", - "info": "A target area for dragging, which can receive information from the Draggable component. It can get callbacks during dragging.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DragTarget", - "desc": [ - "【builder】: Component builder 【DragTargetBuilder】", - "【onWillAccept】: When dragging in 【Function(T)】", - "【onAccept】: Drag success 【Function(T)】", - "【onLeave】: Drag in and then out 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_es_ES.json deleted file mode 100644 index 859043849..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "Objetivo de Arrastrar", - "info": "Un área objetivo para arrastrar, que puede recibir información del componente Draggable. Puede obtener devoluciones de llamada durante el arrastre.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de DragTarget", - "desc": [ - "【builder】 : Constructor del componente 【DragTargetBuilder】", - "【onWillAccept】 : Al arrastrar hacia adentro 【Function(T)】", - "【onAccept】 : Arrastre exitoso 【Function(T)】", - "【onLeave】 : Arrastrar hacia adentro y luego hacia afuera 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_fr_FR.json deleted file mode 100644 index 6d06cb8a8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "Cible de glisser-déposer", - "info": "Une zone cible pour le glisser-déposer, capable de recevoir des informations du composant Draggable. Peut obtenir des rappels lors du glisser-déposer.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DragTarget", - "desc": [ - "【builder】 : Constructeur de composant 【DragTargetBuilder】", - "【onWillAccept】 : Lors du glissement 【Function(T)】", - "【onAccept】 : Glisser-déposer réussi 【Function(T)】", - "【onLeave】 : Glisser-déposer puis sortir 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_it_IT.json deleted file mode 100644 index 04c0e0083..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "Obiettivo di trascinamento", - "info": "Un'area di destinazione per il trascinamento, in grado di ricevere informazioni dal componente Draggable. È possibile ottenere callback durante il trascinamento.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di DragTarget", - "desc": [ - "【builder】 : Costruttore del componente 【DragTargetBuilder】", - "【onWillAccept】 : Durante il trascinamento 【Function(T)】", - "【onAccept】 : Trascinamento riuscito 【Function(T)】", - "【onLeave】 : Trascinato e poi rilasciato 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ja_JP.json deleted file mode 100644 index 60747d786..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "ドラッグターゲット", - "info": "ドラッグ可能なコンポーネントの情報を受け取るためのドラッグターゲットエリアです。ドラッグ時のコールバックを取得できます。", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DragTargetの基本使用", - "desc": [ - "【builder】 : コンポーネントビルダー 【DragTargetBuilder】", - "【onWillAccept】 : ドラッグイン時 【Function(T)】", - "【onAccept】 : ドラッグ成功時 【Function(T)】", - "【onLeave】 : ドラッグイン後ドラッグアウト時 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ko_KR.json deleted file mode 100644 index c7822b57e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "드래그 대상", - "info": "드래그 가능한 영역으로, Draggable 컴포넌트의 정보를 받을 수 있습니다. 드래그 시 콜백을 얻을 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DragTarget 기본 사용", - "desc": [ - "【builder】 : 컴포넌트 빌더 【DragTargetBuilder】", - "【onWillAccept】 : 드래그 시 【Function(T)】", - "【onAccept】 : 드래그 성공 【Function(T)】", - "【onLeave】 : 드래그 후 떼기 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_pt_PT.json deleted file mode 100644 index e83591672..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "Alvo de Arrastar", - "info": "Uma área de destino para arrastar, que pode receber informações do componente Draggable. Pode obter retornos de chamada durante o arrasto.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DragTarget", - "desc": [ - "【builder】 : Construtor de componentes 【DragTargetBuilder】", - "【onWillAccept】 : Ao arrastar para dentro 【Function(T)】", - "【onAccept】 : Arrasto bem-sucedido 【Function(T)】", - "【onLeave】 : Arrastar para dentro e depois para fora 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ru_RU.json deleted file mode 100644 index 6355c56c3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "Цель перетаскивания", - "info": "Область цели для перетаскивания, которая может принимать информацию от компонента Draggable. Можно получить обратные вызовы при перетаскивании.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DragTarget", - "desc": [ - "【builder】 : Конструктор компонента 【DragTargetBuilder】", - "【onWillAccept】 : При перетаскивании 【Function(T)】", - "【onAccept】 : Успешное перетаскивание 【Function(T)】", - "【onLeave】 : Перетаскивание и выход 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_zh-CN.json deleted file mode 100644 index 6f1036ba8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 104, - "name": "DragTarget", - "localName": "拖拽目标", - "info": "一个拖拽的目标区域,可接收Draggable组件的信息。可以获取拖拽时的回调。", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DragTarget基本使用", - "desc": [ - "【builder】 : 组件构造器 【DragTargetBuilder】", - "【onWillAccept】 : 拖入时 【Function(T)】", - "【onAccept】 : 拖拽成功 【Function(T)】", - "【onLeave】 : 拖入再脱出 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/node1_base.dart deleted file mode 100644 index 756160220..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DragTarget/node1_base.dart +++ /dev/null @@ -1,86 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - - -class CustomDragTarget extends StatefulWidget { - const CustomDragTarget({Key? key}) : super(key: key); - - @override - _CustomDragTargetState createState() => _CustomDragTargetState(); -} - -class _CustomDragTargetState extends State { - Color _color = Colors.grey; - String _info = 'DragTarget'; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Wrap(children: _buildColors(), spacing: 10), - const SizedBox(height: 20), - _buildDragTarget() - ], - ); - } - - final List colors = const [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green, - Colors.orange, - Colors.purple, - Colors.cyanAccent - ]; - - List _buildColors() => colors - .map( - (e) => Draggable( - child: Container( - width: 30, - height: 30, - alignment: Alignment.center, - child: Text( - colors.indexOf(e).toString(), - style: const TextStyle( - color: Colors.white, fontWeight: FontWeight.bold), - ), - decoration: BoxDecoration(color: e, shape: BoxShape.circle), - ), - data: e, - feedback: Container( - width: 25, - height: 25, - decoration: BoxDecoration(color: e, shape: BoxShape.circle), - )), - ).toList(); - - Widget _buildDragTarget() { - return DragTarget( - onLeave: (data) => setState(() => _info='onLeave'), - onAccept: (data) => setState(() { - _info='onAccept'; - _color = data; - }), - onWillAccept: (data) { - setState(() { - _info='onWillAccept'; - }); - print("onWillAccept: data = $data "); - return data != null; - }, - builder: (context, candidateData, rejectedData) => Container( - width: 150.0, - height: 50.0, - color: _color, - child: Center( - child: Text( - _info, - style: const TextStyle(color: Colors.white), - ), - ))); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_de_DE.json deleted file mode 100644 index 9d4157287..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_de_DE.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "Verschiebbare Komponente", - "info": "Ermöglicht das Verschieben der Komponente auf der Benutzeroberfläche und kann Daten eines generischen Typs T speichern. Wird normalerweise in Kombination mit DragTarget verwendet, um den Drag-and-Drop-Effekt zu erzielen.", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Draggable", - "desc": [ - "【child】 : Kind 【Widget】", - "【feedback】 : Kind während des Ziehens 【Widget】", - "【axis】 : Achse des Ziehens 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Kombinierte Verwendung von Draggable und DragTarget", - "desc": [ - "【data】 : Daten 【T】", - "【onDragStarted】 : Ziehen gestartet 【Function()】", - "【onDragEnd】 : Ziehen beendet 【Function(DraggableDetails)】", - "【onDragCompleted】 : Ziehen abgeschlossen 【Function()】", - "【onDraggableCanceled】 : Ziehen abgebrochen 【Function(Velocity,Offset)】", - "【onChanged】 : Rückruf bei Änderung 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Andere Verwendungen von Draggable", - "desc": [ - "Kann verwendet werden, um einige Ereignisse basierend auf dem Ziehen zu verarbeiten, wie z.B. Löschen, Abfragen, Pop-up-Fenster usw." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_en_US.json deleted file mode 100644 index 28afb401e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_en_US.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "Draggable Component", - "info": "Allows the component to be dragged anywhere on the interface, and can store data of a generic type T. It is usually used in combination with DragTarget to achieve the drag effect.", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Draggable", - "desc": [ - "【child】 : child 【Widget】", - "【feedback】 : child during dragging 【Widget】", - "【axis】 : axis of dragging 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Combined Usage of Draggable and DragTarget", - "desc": [ - "【data】 : data 【T】", - "【onDragStarted】 : start dragging 【Function()】", - "【onDragEnd】 : end dragging 【Function(DraggableDetails)】", - "【onDragCompleted】 : drag completed 【Function()】", - "【onDraggableCanceled】 : drag canceled 【Function(Velocity,Offset)】", - "【onChanged】 : callback when changed 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Other Usages of Draggable", - "desc": [ - "Some events can be handled based on dragging, such as deletion, querying, pop-ups, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_es_ES.json deleted file mode 100644 index e36c39ffd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_es_ES.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "Componente Arrastrable", - "info": "Permite arrastrar el componente en la interfaz, puede almacenar datos de un tipo genérico T. Normalmente se usa en combinación con DragTarget para lograr el efecto de arrastre.", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Draggable", - "desc": [ - "【child】 : hijo 【Widget】", - "【feedback】 : hijo durante el arrastre 【Widget】", - "【axis】 : eje de arrastre 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Uso combinado de Draggable y DragTarget", - "desc": [ - "【data】 : datos 【T】", - "【onDragStarted】 : inicio del arrastre 【Function()】", - "【onDragEnd】 : fin del arrastre 【Function(DraggableDetails)】", - "【onDragCompleted】 : arrastre completado 【Function()】", - "【onDraggableCanceled】 : arrastre cancelado 【Function(Velocity,Offset)】", - "【onChanged】 : devolución de llamada al cambiar 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Otros usos de Draggable", - "desc": [ - "Puede manejar algunos eventos según el arrastre. Como eliminar, consultar, mostrar cuadros de diálogo, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_fr_FR.json deleted file mode 100644 index 9087a3703..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_fr_FR.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "Composant déplaçable", - "info": "Permet de déplacer un composant librement sur l'interface, peut contenir des données de type générique T. Généralement utilisé en combinaison avec DragTarget pour réaliser des effets de glisser-déposer.", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Draggable", - "desc": [ - "【child】 : enfant 【Widget】", - "【feedback】 : enfant pendant le glissement 【Widget】", - "【axis】 : axe de glissement 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Utilisation combinée de Draggable et DragTarget", - "desc": [ - "【data】 : données 【T】", - "【onDragStarted】 : début du glissement 【Function()】", - "【onDragEnd】 : fin du glissement 【Function(DraggableDetails)】", - "【onDragCompleted】 : glissement terminé 【Function()】", - "【onDraggableCanceled】 : glissement annulé 【Function(Velocity,Offset)】", - "【onChanged】 : rappel lors du changement 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Autres utilisations de Draggable", - "desc": [ - "Peut traiter certains événements en fonction du glissement. Comme la suppression, la recherche, les boîtes de dialogue, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_it_IT.json deleted file mode 100644 index 6a8e0ecc4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_it_IT.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "Componente Trascinabile", - "info": "Permette di trascinare il componente sull'interfaccia e può contenere un dato di tipo generico T. Solitamente utilizzato in combinazione con DragTarget per completare l'effetto di trascinamento.", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di Draggable", - "desc": [ - "【child】 : figlio 【Widget】", - "【feedback】 : figlio durante il trascinamento 【Widget】", - "【axis】 : asse di trascinamento 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Utilizzo combinato di Draggable e DragTarget", - "desc": [ - "【data】 : dati 【T】", - "【onDragStarted】 : inizio del trascinamento 【Function()】", - "【onDragEnd】 : fine del trascinamento 【Function(DraggableDetails)】", - "【onDragCompleted】 : trascinamento completato 【Function()】", - "【onDraggableCanceled】 : trascinamento annullato 【Function(Velocity,Offset)】", - "【onChanged】 : callback al cambiamento 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Altri utilizzi di Draggable", - "desc": [ - "È possibile gestire alcuni eventi in base al trascinamento. Ad esempio, eliminazione, ricerca, finestra pop-up, ecc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ja_JP.json deleted file mode 100644 index 39b751802..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ja_JP.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "ドラッグ可能なコンポーネント", - "info": "コンポーネントをインターフェース上で自由にドラッグできるようにし、ジェネリック型Tのデータを格納できます。通常、DragTargetと組み合わせて使用し、ドラッグ効果を実現します。", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Draggableの基本使用", - "desc": [ - "【child】 : 子 【Widget】", - "【feedback】 : ドラッグ時の子 【Widget】", - "【axis】 : ドラッグ軸 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "DraggableとDragTargetの連携使用", - "desc": [ - "【data】 : データ 【T】", - "【onDragStarted】 : ドラッグ開始 【Function()】", - "【onDragEnd】 : ドラッグ終了 【Function(DraggableDetails)】", - "【onDragCompleted】 : ドラッグ完了 【Function()】", - "【onDraggableCanceled】 : ドラッグキャンセル 【Function(Velocity,Offset)】", - "【onChanged】 : 変更時のコールバック 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Draggableのその他の使用", - "desc": [ - "ドラッグに基づいていくつかのイベントを処理できます。例えば、削除、検索、ポップアップなど" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ko_KR.json deleted file mode 100644 index 1d9a29c48..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ko_KR.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "드래그 가능한 컴포넌트", - "info": "컴포넌트를 인터페이스 상에서 자유롭게 드래그할 수 있으며, 제네릭 T 데이터를 저장할 수 있습니다. 일반적으로 DragTarget과 함께 사용되어 드래그 효과를 완성합니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Draggable 기본 사용", - "desc": [ - "【child】 : 자식 【Widget】", - "【feedback】 : 드래그 시의 자식 【Widget】", - "【axis】 : 드래그 축 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Draggable과 DragTarget 연동", - "desc": [ - "【data】 : 데이터 【T】", - "【onDragStarted】 : 드래그 시작 【Function()】", - "【onDragEnd】 : 드래그 종료 【Function(DraggableDetails)】", - "【onDragCompleted】 : 드래그 완료 【Function()】", - "【onDraggableCanceled】 : 드래그 취소 【Function(Velocity,Offset)】", - "【onChanged】 : 변경 시 콜백 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Draggable 기타 사용", - "desc": [ - "드래그를 통해 일부 이벤트를 처리할 수 있습니다. 예를 들어 삭제, 조회, 팝업 등" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_pt_PT.json deleted file mode 100644 index b6b3af3b8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_pt_PT.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "Componente Arrastável", - "info": "Permite que o componente seja arrastado livremente na interface, podendo armazenar dados de um tipo genérico T. Normalmente usado em combinação com DragTarget para alcançar o efeito de arrastar e soltar.", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Draggable", - "desc": [ - "【child】 : Filho 【Widget】", - "【feedback】 : Filho durante o arrasto 【Widget】", - "【axis】 : Eixo de arrasto 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Uso Conjunto de Draggable e DragTarget", - "desc": [ - "【data】 : Dados 【T】", - "【onDragStarted】 : Início do arrasto 【Function()】", - "【onDragEnd】 : Fim do arrasto 【Function(DraggableDetails)】", - "【onDragCompleted】 : Arrasto concluído 【Function()】", - "【onDraggableCanceled】 : Arrasto cancelado 【Function(Velocity,Offset)】", - "【onChanged】 : Callback de mudança 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Outros Usos do Draggable", - "desc": [ - "Pode processar alguns eventos com base no arrasto, como exclusão, consulta, exibição de diálogos, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ru_RU.json deleted file mode 100644 index 00ffd0c16..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_ru_RU.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "Перетаскиваемый компонент", - "info": "Позволяет компоненту перетаскиваться на интерфейсе, может хранить данные типа T. Обычно используется в сочетании с DragTarget для достижения эффекта перетаскивания.", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Draggable", - "desc": [ - "【child】 : Дочерний элемент 【Widget】", - "【feedback】 : Дочерний элемент при перетаскивании 【Widget】", - "【axis】 : Ось перетаскивания 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Использование Draggable с DragTarget", - "desc": [ - "【data】 : Данные 【T】", - "【onDragStarted】 : Начало перетаскивания 【Function()】", - "【onDragEnd】 : Конец перетаскивания 【Function(DraggableDetails)】", - "【onDragCompleted】 : Завершение перетаскивания 【Function()】", - "【onDraggableCanceled】 : Отмена перетаскивания 【Function(Velocity,Offset)】", - "【onChanged】 : Обратный вызов при изменении 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Другое использование Draggable", - "desc": [ - "Можно обрабатывать некоторые события на основе перетаскивания. Например, удаление, поиск, всплывающие окна и т.д." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_zh-CN.json deleted file mode 100644 index 4ab0f12df..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/desc_zh-CN.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "id": 103, - "name": "Draggable", - "localName": "可拖拽组件", - "info": "可以让组件在界面上任意拖拽,可存放一个泛型T的数据。通常和DragTarget组合使用,来完成拖拽效果。", - "lever": 4, - "family": 1, - "linkIds": [ - 104, - 105 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Draggable基本使用", - "desc": [ - "【child】 : 孩子 【Widget】", - "【feedback】 : 拖拽时的孩子 【Widget】", - "【axis】 : 拖动的轴 【Axis】" - ] - }, - { - "file": "node2_data.dart", - "name": "Draggable与DragTarget联用", - "desc": [ - "【data】 : 数据 【T】", - "【onDragStarted】 : 开始拖拽 【Function()】", - "【onDragEnd】 : 结束拖拽 【Function(DraggableDetails)】", - "【onDragCompleted】 : 拖拽完成 【Function()】", - "【onDraggableCanceled】 : 拖拽取消 【Function(Velocity,Offset)】", - "【onChanged】 : 改变时回调 【Function(T)】" - ] - }, - { - "file": "node3_use.dart", - "name": "Draggable其他使用", - "desc": [ - "可以根据拖拽来处理一些事件。如删除、查询、弹框等" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node1_base.dart deleted file mode 100644 index 0f74ab705..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node1_base.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class CustomDraggable extends StatelessWidget { - const CustomDraggable({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - List axis = [null, Axis.vertical, Axis.horizontal]; - return Wrap( - spacing: 30, - children: axis - .map((e) => Draggable( - axis: e, - child: Container( - width: 30, - height: 30, - alignment: Alignment.center, - decoration: const BoxDecoration( - color: Colors.blue, - shape: BoxShape.circle, - ), - ), - feedback: Container( - width: 30, - height: 30, - decoration: const BoxDecoration( - color: Colors.red, - shape: BoxShape.circle, - ), - ), - )) - .toList()); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node2_data.dart b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node2_data.dart deleted file mode 100644 index d8bfd4d4b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node2_data.dart +++ /dev/null @@ -1,95 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - - -class DraggablePage extends StatefulWidget { - const DraggablePage({Key? key}) : super(key: key); - - @override - _DraggablePageState createState() => _DraggablePageState(); -} - -class _DraggablePageState extends State { - Color _color = Colors.grey; - String _info = 'DragTarget'; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Wrap( - children: _buildColors(), - spacing: 10, - ), - const SizedBox( - height: 20, - ), - _buildDragTarget() - ], - ); - } - - List colors = [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green, - Colors.orange, - Colors.purple, - Colors.cyanAccent - ]; - - List _buildColors() => colors - .map( - (e) => Draggable( - onDragStarted: () => setState(() => _info = '开始拖拽'), - onDragEnd: (d) => setState(() => _info = '结束拖拽'), - onDragCompleted: () => _info = '拖拽完成', - onDraggableCanceled: (v, o) => _info = '拖拽取消', - child: Container( - width: 30, - height: 30, - alignment: Alignment.center, - child: Text( - colors.indexOf(e).toString(), - style: const TextStyle( - color: Colors.white, fontWeight: FontWeight.bold,), - ), - decoration: BoxDecoration(color: e, shape: BoxShape.circle), - ), - data: e, - feedback: Container( - width: 25, - height: 25, - decoration: BoxDecoration(color: e, shape: BoxShape.circle), - )), - ) - .toList(); - - Widget _buildDragTarget() { - return DragTarget( - onLeave: (data) => print("onLeave: data = $data "), - onAccept: (data) { - print("onAccept: data = $data "); - setState(() { - _color = data; - }); - }, - onWillAccept: (data) { - print("onWillAccept: data = $data "); - return data != null; - }, - builder: (context, candidateData, rejectedData) => Container( - width: 150.0, - height: 50.0, - color: _color, - child: Center( - child: Text( - _info, - style: const TextStyle(color: Colors.white), - ), - ))); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node3_use.dart b/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node3_use.dart deleted file mode 100644 index 6f2a09f60..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Draggable/node3_use.dart +++ /dev/null @@ -1,77 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/28 -/// contact me by email 1981462002@qq.com - - -class DeleteDraggable extends StatefulWidget { - const DeleteDraggable({Key? key}) : super(key: key); - - @override - _DeleteDraggableState createState() => _DeleteDraggableState(); -} - -class _DeleteDraggableState extends State { - List colors = [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green, - Colors.orange, - Colors.purple, - Colors.cyanAccent - ]; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Wrap(children: _buildColors(), spacing: 10), - const SizedBox(height: 20), - _buildDragTarget() - ], - ); - } - - Widget _buildDragTarget() { - return DragTarget( - onAccept: (data) { - setState(() { - colors.removeAt(data); - }); - }, - onWillAccept: (data) => data != null, - builder: (context, candidateData, rejectedData) => Container( - width: 50.0, - height: 50.0, - decoration: - const BoxDecoration(color: Colors.red, shape: BoxShape.circle), - child: const Center( - child: Icon(Icons.delete_sweep, color: Colors.white), - ))); - } - - List _buildColors() => colors - .map( - (e) => Draggable( - child: Container( - width: 30, - height: 30, - alignment: Alignment.center, - child: Text( - colors.indexOf(e).toString(), - style: const TextStyle( - color: Colors.white, fontWeight: FontWeight.bold), - ), - decoration: BoxDecoration(color: e, shape: BoxShape.circle), - ), - data: colors.indexOf(e), - feedback: Container( - width: 25, - height: 25, - decoration: BoxDecoration( - color: e.withAlpha(100), shape: BoxShape.circle), - )), - ) - .toList(); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_de_DE.json deleted file mode 100644 index 8186a9543..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "Zieh- und schiebbares Blatt", - "info": "Ein Blatt, das gezogen und geschoben werden kann, mit der Möglichkeit, den maximalen, minimalen und anfänglichen Teilungsbereich festzulegen. Der Konstruktor builder muss eine schiebbare Komponente zurückgeben.", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DraggableScrollableSheet", - "desc": [ - "【initialChildSize】 : Anfänglicher Teilungsgrad 【double】", - "【minChildSize】 : Minimaler Teilungsgrad 【double】", - "【maxChildSize】 : Maximaler Teilungsgrad 【double】", - "【builder】 : Schiebbare Komponentenkonstruktor 【ScrollableWidgetBuilder】", - "【expand】 : Ob erweitert 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_en_US.json deleted file mode 100644 index 3a4f380ac..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "Draggable Sheet", - "info": "A sheet that can be dragged and scrolled, with the ability to specify the maximum, minimum, and initial fractions within the scroll range. The builder constructor needs to return a scrollable component.", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DraggableScrollableSheet", - "desc": [ - "【initialChildSize】: Initial fraction 【double】", - "【minChildSize】: Minimum fraction 【double】", - "【maxChildSize】: Maximum fraction 【double】", - "【builder】: Scrollable component builder 【ScrollableWidgetBuilder】", - "【expand】: Whether to expand 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_es_ES.json deleted file mode 100644 index bf72d3647..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "Hoja deslizante", - "info": "Hoja que se puede arrastrar y deslizar, se puede especificar el tamaño máximo, mínimo e inicial dentro del rango de deslizamiento. El constructor builder debe devolver un componente deslizable.", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DraggableScrollableSheet", - "desc": [ - "【initialChildSize】 : Tamaño inicial 【double】", - "【minChildSize】 : Tamaño mínimo 【double】", - "【maxChildSize】 : Tamaño máximo 【double】", - "【builder】 : Constructor de componente deslizable 【ScrollableWidgetBuilder】", - "【expand】 : Si se expande 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_fr_FR.json deleted file mode 100644 index 61897ae32..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "Feuille glissable et déplaçable", - "info": "Feuille déplaçable et glissable, permettant de spécifier les divisions maximales, minimales et initiales dans la plage de glissement. Le constructeur builder doit retourner un composant glissant.", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DraggableScrollableSheet", - "desc": [ - "【initialChildSize】 : Division initiale 【double】", - "【minChildSize】 : Division minimale 【double】", - "【maxChildSize】 : Division maximale 【double】", - "【builder】 : Constructeur de composant glissant 【ScrollableWidgetBuilder】", - "【expand】 : S'étend ou non 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_it_IT.json deleted file mode 100644 index e1873bd0b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "Foglio trascinabile e scorrevole", - "info": "Un foglio trascinabile e scorrevole che può specificare la dimensione massima, minima e iniziale all'interno dell'intervallo di scorrimento. Il costruttore builder deve restituire un componente scorrevole.", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di DraggableScrollableSheet", - "desc": [ - "【initialChildSize】 : Dimensione iniziale 【double】", - "【minChildSize】 : Dimensione minima 【double】", - "【maxChildSize】 : Dimensione massima 【double】", - "【builder】 : Costruttore del componente scorrevole 【ScrollableWidgetBuilder】", - "【expand】 : Se espandere 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ja_JP.json deleted file mode 100644 index 9dbe32fe8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "ドラッグ可能なシート", - "info": "ドラッグおよびスクロール可能なシートで、最大、最小、および初期の分割位置を指定できます。ビルダーはスクロール可能なコンポーネントを返す必要があります。", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DraggableScrollableSheetの基本使用", - "desc": [ - "【initialChildSize】 : 初期分割位置 【double】", - "【minChildSize】 : 最小分割位置 【double】", - "【maxChildSize】 : 最大分割位置 【double】", - "【builder】 : スクロールコンポーネントビルダー 【ScrollableWidgetBuilder】", - "【expand】 : 拡張するかどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ko_KR.json deleted file mode 100644 index be2920e46..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "드래그 가능한 시트", - "info": "드래그 및 스크롤 가능한 시트로, 최대, 최소, 초기 분할 위치를 지정할 수 있습니다. 생성자 builder는 스크롤 가능한 컴포넌트를 반환해야 합니다.", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DraggableScrollableSheet 기본 사용법", - "desc": [ - "【initialChildSize】 : 초기 분할 위치 【double】", - "【minChildSize】 : 최소 분할 위치 【double】", - "【maxChildSize】 : 최대 분할 위치 【double】", - "【builder】 : 스크롤 컴포넌트 생성자 【ScrollableWidgetBuilder】", - "【expand】 : 확장 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_pt_PT.json deleted file mode 100644 index b9b9a40ea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "Folha Deslizável e Arrastável", - "info": "Uma folha que pode ser arrastada e deslizada, permitindo especificar a divisão máxima, mínima e inicial dentro da faixa de deslizamento. O construtor builder precisa retornar um componente deslizável.", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DraggableScrollableSheet", - "desc": [ - "【initialChildSize】: Divisão inicial 【double】", - "【minChildSize】: Divisão mínima 【double】", - "【maxChildSize】: Divisão máxima 【double】", - "【builder】: Construtor do componente deslizável 【ScrollableWidgetBuilder】", - "【expand】: Estender 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ru_RU.json deleted file mode 100644 index 6df183a31..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "Перетаскиваемый и прокручиваемый лист", - "info": "Перетаскиваемый и прокручиваемый лист, который может указывать максимальное, минимальное и начальное деление в текущем диапазоне прокрутки. Конструктор builder должен возвращать прокручиваемый компонент.", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DraggableScrollableSheet", - "desc": [ - "【initialChildSize】 : Начальное деление 【double】", - "【minChildSize】 : Минимальное деление 【double】", - "【maxChildSize】 : Максимальное деление 【double】", - "【builder】 : Конструктор прокручиваемого компонента 【ScrollableWidgetBuilder】", - "【expand】 : Расширять ли 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_zh-CN.json deleted file mode 100644 index a49c47d77..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 252, - "name": "DraggableScrollableSheet", - "localName": "拖滑页", - "info": "可拖动和滑动的Sheet,可指定最大、最小、最初的分度现在滑动范围。构造器builder需要返回一个可滑动组件。", - "lever": 2, - "family": 1, - "linkIds": [ - 221, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DraggableScrollableSheet基本使用", - "desc": [ - "【initialChildSize】 : 初始分度 【double】", - "【minChildSize】 : 最小分度 【double】", - "【maxChildSize】 : 最大分度 【double】", - "【builder】 : 滑动组件构造器 【ScrollableWidgetBuilder】", - "【expand】 : 是否延展 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/node1_base.dart deleted file mode 100644 index 6a93804ec..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DraggableScrollableSheet/node1_base.dart +++ /dev/null @@ -1,96 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class DraggableScrollableSheetDemo extends StatelessWidget { - const DraggableScrollableSheetDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(10), - child: ElevatedButton( - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => DraggableScrollableSheetPage()), - ); - }, - child: const Text("进入 DraggableScrollableSheet 测试页"), - ), - ); - } -} - -class DraggableScrollableSheetPage extends StatelessWidget { - DraggableScrollableSheetPage({Key? key}) : super(key: key); - - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - Colors.red[50]!, - Colors.red[100]!, - Colors.red[200]!, - Colors.red[300]!, - Colors.red[400]!, - Colors.red[500]!, - Colors.red[600]!, - Colors.red[700]!, - Colors.red[800]!, - Colors.red[900]!, - ]; - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text("DraggableScrollableSheet"), - ), - body: SizedBox.expand( - child: DraggableScrollableSheet( - initialChildSize: 0.3, - minChildSize: 0.2, - maxChildSize: 0.5, - expand: true, - builder: (BuildContext context, ScrollController scrollController)=> - ListView.builder( - controller: scrollController, - itemCount: data.length, - itemBuilder: buildColorItem, - ), - )), - ); - } - - Widget buildColorItem(BuildContext context, int index) { - return Container( - alignment: Alignment.center, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_de_DE.json deleted file mode 100644 index a2c8d3469..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "iOS-Schiebe-Tab", - "info": "Bietet Interaktionsverhalten für die Drawer-Komponente und wird selten verwendet. Es gibt Anwendungsfälle im Quellcode der Scaffold-Komponente.", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DrawerController", - "desc": [ - "【drawerCallback】 : Ereignisrückruf 【DrawerCallback】", - "【enableOpenDragGesture】 : Ob seitliches Aufziehen aktiviert ist 【bool】", - "【alignment】 : Ausrichtung 【DrawerAlignment】", - "【scrimColor】 : Hintergrundfarbe 【Color】", - "【child】 : Drawer-Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_en_US.json deleted file mode 100644 index e49012f23..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "iOS Sliding Tabs", - "info": "Provides interactive behavior for the Drawer component, which is rarely used. It is used in the source code of the Scaffold component.", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DrawerController", - "desc": [ - "【drawerCallback】: Event callback 【DrawerCallback】", - "【enableOpenDragGesture】: Whether to slide open from the side 【bool】", - "【alignment】: Alignment 【DrawerAlignment】", - "【scrimColor】: Background color 【Color】", - "【child】: Drawer component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_es_ES.json deleted file mode 100644 index 7afc8a3db..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "Pestañas deslizantes de iOS", - "info": "Proporciona comportamiento interactivo para el componente Drawer, generalmente se usa poco. Tiene un caso de uso en el código fuente del componente Scaffold.", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DrawerController", - "desc": [ - "【drawerCallback】 : devolución de llamada de evento 【DrawerCallback】", - "【enableOpenDragGesture】 : si se puede deslizar hacia un lado 【bool】", - "【alignment】 : alineación 【DrawerAlignment】", - "【scrimColor】 : color de fondo 【Color】", - "【child】 : componente Drawer 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_fr_FR.json deleted file mode 100644 index bbf96da0c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "Onglets glissants iOS", - "info": "Fournit des comportements interactifs pour le composant Drawer, généralement peu utilisé. Utilisé dans le code source du composant Scaffold.", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DrawerController", - "desc": [ - "【drawerCallback】 : Rappel d'événement 【DrawerCallback】", - "【enableOpenDragGesture】 : Glissement latéral activé 【bool】", - "【alignment】 : Mode d'alignement 【DrawerAlignment】", - "【scrimColor】 : Couleur de fond 【Color】", - "【child】 : Composant Drawer 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_it_IT.json deleted file mode 100644 index 0a51c96e9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "Schede scorrevoli iOS", - "info": "Fornisce comportamenti interattivi per il componente Drawer, generalmente usato raramente. Ci sono scenari di utilizzo nel codice sorgente del componente Scaffold.", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di DrawerController", - "desc": [ - "【drawerCallback】 : callback dell'evento 【DrawerCallback】", - "【enableOpenDragGesture】 : se scorrere lateralmente per aprire 【bool】", - "【alignment】 : allineamento 【DrawerAlignment】", - "【scrimColor】 : colore di sfondo 【Color】", - "【child】 : componente Drawer 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ja_JP.json deleted file mode 100644 index 07b6f06d7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "iOSスライドタブ", - "info": "Drawerコンポーネントにインタラクションを提供しますが、一般的にはあまり使用されません。Scaffoldコンポーネントのソースコードで使用されることがあります。", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerControllerの基本的な使用法", - "desc": [ - "【drawerCallback】 : イベントコールバック 【DrawerCallback】", - "【enableOpenDragGesture】 : サイドスワイプを有効にするか 【bool】", - "【alignment】 : 配置方法 【DrawerAlignment】", - "【scrimColor】 : 背景色 【Color】", - "【child】 : Drawerコンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ko_KR.json deleted file mode 100644 index bc6be0dd1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "iOS 슬라이드 탭", - "info": "Drawer 컴포넌트에 상호 작용을 제공하며, 일반적으로 잘 사용되지 않습니다. Scaffold 컴포넌트 소스 코드에서 사용 사례가 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerController 기본 사용", - "desc": [ - "【drawerCallback】 : 이벤트 콜백 【DrawerCallback】", - "【enableOpenDragGesture】 : 측면 슬라이드 열기 【bool】", - "【alignment】 : 정렬 방식 【DrawerAlignment】", - "【scrimColor】 : 배경 색상 【Color】", - "【child】 : Drawer 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_pt_PT.json deleted file mode 100644 index 25c9c0e11..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "Separador deslizante iOS", - "info": "Fornece comportamento interativo para o componente Drawer, geralmente raramente usado. Há cenários de uso no código-fonte do componente Scaffold.", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do DrawerController", - "desc": [ - "【drawerCallback】 : Callback de evento 【DrawerCallback】", - "【enableOpenDragGesture】 : Se o deslizar lateral está ativado 【bool】", - "【alignment】 : Alinhamento 【DrawerAlignment】", - "【scrimColor】 : Cor de fundo 【Color】", - "【child】 : Componente Drawer 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ru_RU.json deleted file mode 100644 index e2ae2d8f7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "iOS слайдер вкладок", - "info": "Обеспечивает интерактивное поведение для компонента Drawer, обычно используется редко. Используется в исходном коде компонента Scaffold.", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DrawerController", - "desc": [ - "【drawerCallback】 : Обратный вызов события 【DrawerCallback】", - "【enableOpenDragGesture】 : Возможность открытия смахиванием 【bool】", - "【alignment】 : Способ выравнивания 【DrawerAlignment】", - "【scrimColor】 : Цвет фона 【Color】", - "【child】 : Компонент Drawer 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_zh-CN.json deleted file mode 100644 index 2f3c9a12d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 257, - "name": "DrawerController", - "localName": "iOS滑动页签", - "info": "为 Drawer 组件提供交互行为,一般很少使用。在 Scaffold 组件源码中有使用场景。", - "lever": 3, - "family": 1, - "linkIds": [ - 154, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerController基本使用", - "desc": [ - "【drawerCallback】 : 事件回调 【DrawerCallback】", - "【enableOpenDragGesture】 : 是否侧边滑开 【bool】", - "【alignment】 : 对齐方式 【DrawerAlignment】", - "【scrimColor】 : 背景颜色 【Color】", - "【child】 : Drawer组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/node1_base.dart deleted file mode 100644 index f29d10cab..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DrawerController/node1_base.dart +++ /dev/null @@ -1,63 +0,0 @@ -import 'package:flutter/material.dart'; - - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class DrawerControllerDemo extends StatefulWidget { - const DrawerControllerDemo({Key? key}) : super(key: key); - - @override - _DrawerControllerDemoState createState() => _DrawerControllerDemoState(); -} - -class _DrawerControllerDemoState extends State { - final GlobalKey _drawerKey = - GlobalKey(); - - bool _open = false; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - ElevatedButton( - onPressed: toggleDrawer, - child: const Text("显隐 Drawer"), - ), - SizedBox( - height: 200, - child: DrawerController( - scrimColor: Colors.blue.withAlpha(88), - enableOpenDragGesture: true, - key: _drawerKey, - alignment: DrawerAlignment.start, - drawerCallback: (value) { - _open = value; - }, - child: Drawer( - child: Container( - alignment: Alignment.center, - color: Colors.red, - child: const Text( - "I am Drawer!", - style: TextStyle(color: Colors.white, fontSize: 18), - ), - ), - ), - ), - ), - ], - ); - } - - void toggleDrawer() { - if (_open) { - _drawerKey.currentState?.close(); - } else { - print('---open--$_open-------'); - _drawerKey.currentState?.open(); - } - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_de_DE.json deleted file mode 100644 index 6bb9d991f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_de_DE.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "Dropdown-Schaltfläche", - "info": "Eine Schaltfläche für Dropdown-Auswahl, die Eigenschaften wie Symbol, Schattentiefe, Hinweis usw. angeben kann und Ereignisse bei Änderungen der Auswahl empfängt.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DropdownButton", - "desc": [ - "【value】 : Aktueller Wert 【T】", - "【items】 : Dropdown-Auswahlbox 【List>】", - "【icon】 : Symbol 【Widget】", - "【elevation】 : Schattentiefe 【double】", - "【onChanged】 : Ereignis bei Auswahl eines Elements 【Function(T)】", - "【backgroundColor】 : Hintergrundfarbe 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "Stilangabe für DropdownButton", - "desc": [ - "【isDense】 : Ob kompakt angeordnet 【bool】", - "【iconSize】 : Symbolgröße 【double】", - "【hint】 : Hinweis-Komponente 【Widget】", - "【iconEnabledColor】 : Symbolfarbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_en_US.json deleted file mode 100644 index 67516d470..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_en_US.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "Dropdown Button", - "info": "A button for dropdown selection, which can specify attributes such as icon, elevation, hint, etc., and receives events for selection changes.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DropdownButton", - "desc": [ - "【value】 : Current value 【T】", - "【items】 : Dropdown items 【List>】", - "【icon】 : Icon 【Widget】", - "【elevation】 : Elevation 【double】", - "【onChanged】 : Selection change event 【Function(T)】", - "【backgroundColor】 : Background color 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "Styling of DropdownButton", - "desc": [ - "【isDense】 : Whether to be dense 【bool】", - "【iconSize】 : Icon size 【double】", - "【hint】 : Hint widget 【Widget】", - "【iconEnabledColor】 : Icon color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_es_ES.json deleted file mode 100644 index 720853692..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_es_ES.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "Botón desplegable", - "info": "Botón para selección desplegable, se pueden especificar propiedades como icono, profundidad de sombra, sugerencias, etc., y recibe eventos de cambio de selección.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DropdownButton", - "desc": [ - "【value】 : Valor actual 【T】", - "【items】 : Opciones desplegables 【List>】", - "【icon】 : Icono 【Widget】", - "【elevation】 : Profundidad de sombra 【double】", - "【onChanged】 : Evento de cambio de selección 【Function(T)】", - "【backgroundColor】 : Color de fondo 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "Especificación de estilo de DropdownButton", - "desc": [ - "【isDense】 : Si está compacto 【bool】", - "【iconSize】 : Tamaño del icono 【double】", - "【hint】 : Componente de sugerencia 【Widget】", - "【iconEnabledColor】 : Color del icono 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_fr_FR.json deleted file mode 100644 index 7116ccf50..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_fr_FR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "Bouton déroulant", - "info": "Bouton pour la sélection déroulante, pouvant spécifier des attributs tels que l'icône, la profondeur d'ombre, l'indice, etc., et recevoir des événements de changement de sélection.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DropdownButton", - "desc": [ - "【value】 : Valeur actuelle 【T】", - "【items】 : Liste déroulante 【List>】", - "【icon】 : Icône 【Widget】", - "【elevation】 : Profondeur d'ombre 【double】", - "【onChanged】 : Événement de sélection d'élément 【Function(T)】", - "【backgroundColor】 : Couleur de fond 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "Spécification du style de DropdownButton", - "desc": [ - "【isDense】 : Si compact 【bool】", - "【iconSize】 : Taille de l'icône 【double】", - "【hint】 : Composant d'indice 【Widget】", - "【iconEnabledColor】 : Couleur de l'icône 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_it_IT.json deleted file mode 100644 index f6ff0ac0d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_it_IT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "Pulsante a discesa", - "info": "Pulsante per la selezione a discesa, può specificare attributi come icona, profondità dell'ombra, suggerimento, ecc., e riceve eventi di cambiamento di selezione.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di DropdownButton", - "desc": [ - "【value】 : Valore corrente 【T】", - "【items】 : Casella di selezione a discesa 【List>】", - "【icon】 : Icona 【Widget】", - "【elevation】 : Profondità dell'ombra 【double】", - "【onChanged】 : Evento di selezione dell'elemento 【Function(T)】", - "【backgroundColor】 : Colore di sfondo 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "Specifica dello stile di DropdownButton", - "desc": [ - "【isDense】 : Se è compatto 【bool】", - "【iconSize】 : Dimensione dell'icona 【double】", - "【hint】 : Componente di suggerimento 【Widget】", - "【iconEnabledColor】 : Colore dell'icona 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ja_JP.json deleted file mode 100644 index 17cebf26d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ja_JP.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "ドロップダウンボタン", - "info": "ドロップダウン選択用のボタンで、アイコン、影の深さ、ヒントなどの属性を指定でき、選択変更イベントを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DropdownButtonの基本的な使い方", - "desc": [ - "【value】 : 現在の値 【T】", - "【items】 : ドロップダウンリスト 【List>】", - "【icon】 : アイコン 【Widget】", - "【elevation】 : 影の深さ 【double】", - "【onChanged】 : 項目選択イベント 【Function(T)】", - "【backgroundColor】 : 背景色 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "DropdownButtonのスタイル指定", - "desc": [ - "【isDense】 : コンパクト表示かどうか 【bool】", - "【iconSize】 : アイコンのサイズ 【double】", - "【hint】 : ヒントコンポーネント 【Widget】", - "【iconEnabledColor】 : アイコンの色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ko_KR.json deleted file mode 100644 index fcf3fdafc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ko_KR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "드롭다운 버튼", - "info": "드롭다운 선택을 위한 버튼으로, 아이콘, 그림자 깊이, 힌트 등의 속성을 지정할 수 있으며, 선택 변경 이벤트를 수신합니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DropdownButton 기본 사용법", - "desc": [ - "【value】 : 현재 값 【T】", - "【items】 : 드롭다운 목록 【List>】", - "【icon】 : 아이콘 【Widget】", - "【elevation】 : 그림자 깊이 【double】", - "【onChanged】 : 항목 선택 이벤트 【Function(T)】", - "【backgroundColor】 : 배경색 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "DropdownButton 스타일 지정", - "desc": [ - "【isDense】 : 간격 축소 여부 【bool】", - "【iconSize】 : 아이콘 크기 【double】", - "【hint】 : 힌트 위젯 【Widget】", - "【iconEnabledColor】 : 아이콘 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_pt_PT.json deleted file mode 100644 index dc801566e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_pt_PT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "Botão de dropdown", - "info": "Botão para seleção de dropdown, pode especificar ícone, profundidade de sombra, dica e outros atributos, recebe eventos de mudança de seleção.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do DropdownButton", - "desc": [ - "【value】 : Valor atual 【T】", - "【items】 : Caixa de seleção de dropdown 【List>】", - "【icon】 : Ícone 【Widget】", - "【elevation】 : Profundidade de sombra 【double】", - "【onChanged】 : Evento de seleção de item 【Function(T)】", - "【backgroundColor】 : Cor de fundo 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "Especificação de estilo do DropdownButton", - "desc": [ - "【isDense】 : Se deve ser compacto 【bool】", - "【iconSize】 : Tamanho do ícone 【double】", - "【hint】 : Componente de dica 【Widget】", - "【iconEnabledColor】 : Cor do ícone 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ru_RU.json deleted file mode 100644 index a9a8965b0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_ru_RU.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "Выпадающая кнопка", - "info": "Кнопка для выбора из выпадающего списка, может иметь указанные иконки, тени, подсказки и другие свойства, принимает события изменения выбора.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DropdownButton", - "desc": [ - "【value】 : Текущее значение 【T】", - "【items】 : Выпадающий список 【List>】", - "【icon】 : Иконка 【Widget】", - "【elevation】 : Тень 【double】", - "【onChanged】 : Событие выбора элемента 【Function(T)】", - "【backgroundColor】 : Цвет фона 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "Указание стиля DropdownButton", - "desc": [ - "【isDense】 : Компактное расположение 【bool】", - "【iconSize】 : Размер иконки 【double】", - "【hint】 : Компонент подсказки 【Widget】", - "【iconEnabledColor】 : Цвет иконки 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_zh-CN.json deleted file mode 100644 index 3acb5df22..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/desc_zh-CN.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 55, - "name": "DropdownButton", - "localName": "下拉按钮", - "info": "用于下拉选择的按钮,可指定图标、影深、提示等属性,接收选中变化的事件。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DropdownButton基本用法", - "desc": [ - "【value】 : 当前值 【T】", - "【items】 : 下拉选框 【List>】", - "【icon】 : 图标 【Widget】", - "【elevation】 : 影深 【double】", - "【onChanged】 : 选择条目事件 【Function(T)】", - "【backgroundColor】 : 背景色 【Color】" - ] - }, - { - "file": "node2_style.dart", - "name": "DropdownButton的样式指定", - "desc": [ - "【isDense】 : 是否紧排 【bool】", - "【iconSize】 : 图标大小 【double】", - "【hint】 : 提示组件 【Widget】", - "【iconEnabledColor】 : 图标颜色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/node1_base.dart deleted file mode 100644 index 7126a49ce..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/node1_base.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-16 -/// contact me by email 1981462002@qq.com - -class CustomDropDownButton extends StatefulWidget { - const CustomDropDownButton({Key? key}) : super(key: key); - - @override - _CustomDropDownButtonState createState() => _CustomDropDownButtonState(); -} - -class _CustomDropDownButtonState extends State { - Color _color = Colors.red; - final List _colors = const [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - final List _info = const ["红色", "黄色", "蓝色", "绿色"]; - - @override - Widget build(BuildContext context) { - return Wrap( - children: [ - Container( - margin: const EdgeInsets.symmetric(horizontal: 20), - width: 50, - height: 50, - color: _color, - ), - DropdownButton( - value: _color, - elevation: 1, - icon: Icon( - Icons.expand_more, - size: 20, - color: _color, - ), - items: _buildItems(), - onChanged: (v) => setState(() => _color = v??Colors.blue)), - ], - ); - } - - List> _buildItems() => _colors - .map((e) => DropdownMenuItem( - value: e, - child: Text( - _info[_colors.indexOf(e)], - style: TextStyle(color: e), - ))) - .toList(); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/node2_style.dart b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/node2_style.dart deleted file mode 100644 index a5ce7c1fd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButton/node2_style.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-16 -/// contact me by email 1981462002@qq.com - - -class StyleDropDownButton extends StatefulWidget { - const StyleDropDownButton({Key? key}) : super(key: key); - - @override - _StyleDropDownButtonState createState() => _StyleDropDownButtonState(); -} - -class _StyleDropDownButtonState extends State { - Color _color = Colors.red; - - final List _colors = const [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - final List _info = const ["红色", "黄色", "蓝色", "绿色"]; - - @override - Widget build(BuildContext context) { - return Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Container( - margin: const EdgeInsets.symmetric(horizontal: 20), - width: 50, - height: 50, - color: _color, - ), - DropdownButton( - hint: const Text('请选择'), - isDense: true, - iconSize:20, - iconEnabledColor:_color, - value: _color, - items: _buildItems(), - onChanged: (v) => setState(() => _color = v??Colors.blue)), - ], - ); - } - - List> _buildItems() => _colors - .map((e) => DropdownMenuItem( - value: e, - child: Text( - _info[_colors.indexOf(e)], - style: TextStyle(color: e), - ))) - .toList(); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_de_DE.json deleted file mode 100644 index 4ae73458b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "Formular Dropdown", - "info": "Basiert auf der DropdownButton-Implementierung, daher sind die grundlegenden Eigenschaften ähnlich. Verfügt jedoch über die Funktionen von FormField und kann die Methoden onSaved und validator zurückrufen.", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einfache Verwendung des Formular Dropdowns", - "desc": [ - "【items】 : Liste der Unterkomponenten 【List>】", - "【validator】 : Rückruf für Formularvalidierung 【FormFieldValidator】", - "【onSaved】 : Rückruf für Formularspeicherung 【FormFieldSetter】", - "Weitere Eigenschaften finden Sie unter DropdownButton, Formularvalidierungsfunktionen finden Sie unter FormField." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_en_US.json deleted file mode 100644 index 0ac6e2cfa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "Form Dropdown", - "info": "It is implemented based on DropdownButton, so it has similar basic properties. However, it has the characteristics of FormField and can call back the onSaved and validator methods.", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Simple Usage of Form Dropdown", - "desc": [ - "【items】: List of child components 【List>】", - "【validator】: Form validation callback 【FormFieldValidator】", - "【onSaved】: Form save callback 【FormFieldSetter】", - "For other properties, refer to DropdownButton. For form validation features, refer to FormField." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_es_ES.json deleted file mode 100644 index 79188e35a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "Campo de selección de formulario", - "info": "Depende de DropdownButton en su implementación subyacente, por lo que las propiedades básicas son similares. Sin embargo, tiene características de FormField, lo que permite devolver los métodos onSaved y validator.", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso simple del campo de selección de formulario", - "desc": [ - "【items】: Lista de componentes secundarios 【List>】", - "【validator】: Devolución de llamada de validación de formulario 【FormFieldValidator】", - "【onSaved】: Devolución de llamada de guardado de formulario 【FormFieldSetter】", - "Para otras propiedades, consulte DropdownButton, y para las características de validación de formularios, consulte FormField." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_fr_FR.json deleted file mode 100644 index 6f9970d33..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "Champ de formulaire déroulant", - "info": "Basé sur DropdownButton, donc les propriétés de base sont similaires. Mais il possède les caractéristiques de FormField, permettant de rappeler les méthodes onSaved et validator.", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation simple du champ de formulaire déroulant", - "desc": [ - "【items】 : Liste des composants enfants 【List>】", - "【validator】 : Rappel de validation du formulaire 【FormFieldValidator】", - "【onSaved】 : Rappel de sauvegarde du formulaire 【FormFieldSetter】", - "Pour les autres propriétés, voir DropdownButton. Pour les caractéristiques de validation du formulaire, voir FormField." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_it_IT.json deleted file mode 100644 index 985a7f29d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "Campo a discesa del modulo", - "info": "Si basa sull'implementazione di DropdownButton, quindi le proprietà di base sono simili. Tuttavia, ha le caratteristiche di FormField, può richiamare i metodi onSaved e validator.", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso semplice del campo a discesa del modulo", - "desc": [ - "【items】 : Lista dei componenti figli 【List>】", - "【validator】 : Callback di convalida del modulo 【FormFieldValidator】", - "【onSaved】 : Callback di salvataggio del modulo 【FormFieldSetter】", - "Per altre proprietà, vedere DropdownButton, per le caratteristiche di convalida del modulo, vedere FormField." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ja_JP.json deleted file mode 100644 index a2c486230..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "フォームドロップダウン", - "info": "基盤は DropdownButton に依存して実装されているため、基本的な属性は似ています。ただし、FormField の特性を持っており、onSaved や validator メソッドをコールバックできます。", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "フォームドロップダウンの簡単な使用", - "desc": [ - "【items】 : 子コンポーネントリスト 【List>】", - "【validator】 : フォーム検証コールバック 【FormFieldValidator】", - "【onSaved】 : フォーム保存コールバック 【FormFieldSetter】", - "その他の属性については DropdownButton を参照し、フォーム検証の特性については FormField を参照してください。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ko_KR.json deleted file mode 100644 index 88832c689..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "폼 드롭다운", - "info": "기본적으로 DropdownButton에 의존하여 구현되었으므로 기본 속성이 유사합니다. 그러나 FormField의 특성을 가지고 있어 onSaved, validator 메서드를 콜백할 수 있습니다.", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "폼 드롭다운 간단 사용", - "desc": [ - "【items】 : 하위 컴포넌트 리스트 【List>】", - "【validator】 : 폼 검증 콜백 【FormFieldValidator】", - "【onSaved】 : 폼 저장 콜백 【FormFieldSetter】", - "기타 속성은 DropdownButton을 참조하고, 폼 검증 특성은 FormField를 참조하세요." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_pt_PT.json deleted file mode 100644 index 2eff5ad62..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "Campo de seleção de formulário", - "info": "Implementado com base no DropdownButton, portanto, possui propriedades semelhantes. No entanto, possui características do FormField, podendo chamar os métodos onSaved e validator.", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso simples do campo de seleção de formulário", - "desc": [ - "【items】: Lista de componentes filhos 【List>】", - "【validator】: Callback de validação do formulário 【FormFieldValidator】", - "【onSaved】: Callback de salvamento do formulário 【FormFieldSetter】", - "Para outras propriedades, consulte DropdownButton. Para características de validação de formulário, consulte FormField." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ru_RU.json deleted file mode 100644 index f7450f3e1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "Выпадающее поле формы", - "info": "Базовая реализация зависит от DropdownButton, поэтому основные свойства схожи. Однако обладает функциями FormField, может вызывать методы onSaved и validator.", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Простое использование выпадающего поля формы", - "desc": [ - "【items】 : Список дочерних компонентов 【List>】", - "【validator】 : Обратный вызов проверки формы 【FormFieldValidator】", - "【onSaved】 : Обратный вызов сохранения формы 【FormFieldSetter】", - "Другие свойства см. в DropdownButton, функции проверки формы см. в FormField." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_zh-CN.json deleted file mode 100644 index 9b42b54bd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 223, - "name": "DropdownButtonFormField", - "localName": "表单下拉框", - "info": "底层依赖 DropdownButton 实现,所以基本属性类似。但拥有 FormField 的特性,可以回调 onSaved、validator 方法。", - "lever": 2, - "family": 1, - "linkIds": [ - 55, - 222 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "表单下拉框简单使用", - "desc": [ - "【items】 : 子组件列表 【List>】", - "【validator】 : 表单验证回调 【FormFieldValidator】", - "【onSaved】 : 表单保存回调 【FormFieldSetter】", - "其他属性详见 DropdownButton,表单校验特性详见 FormField。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/node1_base.dart deleted file mode 100644 index 63014bca2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownButtonFormField/node1_base.dart +++ /dev/null @@ -1,63 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class DropdownButtonFormFieldDemo extends StatefulWidget { - const DropdownButtonFormFieldDemo({Key? key}) : super(key: key); - - @override - _DropdownButtonFormFieldDemoState createState() => - _DropdownButtonFormFieldDemoState(); -} - -class _DropdownButtonFormFieldDemoState extends State { - Color _color = Colors.blue; - final List _colors = const [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - final List _info = const ["红色", "黄色", "蓝色", "绿色"]; - - @override - Widget build(BuildContext context) { - return Wrap( - children: [ - Container( - margin: const EdgeInsets.symmetric(horizontal: 20), - width: 50, - height: 50, - color: _color, - ), - - SizedBox( - width: 80, - child: DropdownButtonFormField( - value: _color, - elevation: 1, - hint: const Text('选择颜色',style: TextStyle(fontSize: 12),), - icon: Icon( - Icons.expand_more, - size: 20, - color: _color, - ), - items: _buildItems(), - onChanged: (v) => setState(() => _color = v ?? Colors.blue)), - ) - - ], - ); - } - - List> _buildItems() => _colors - .map((e) => DropdownMenuItem( - value: e, - child: Text( - _info[_colors.indexOf(e)], - style: TextStyle(color: e), - ))) - .toList(); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_de_DE.json deleted file mode 100644 index 73673fe84..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_de_DE.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "Dropdown-Menü", - "info": "Dropdown-Auswahlkomponente, unterstützt Textfilterung und kann Menüelemente anpassen. Basierend auf MenuAnchor und TextFiled.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Einfache Verwendung des Dropdown-Menüs", - "desc": [ - "【dropdownMenuEntries】 : Liste der Menüeinträge 【List>】", - "【initialSelection】 : Rückruf zur Formularvalidierung 【T?】", - "【onSelected】 : Rückruf zur Formularspeicherung 【ValueChanged?】", - "【menuHeight】 : Menühöhe 【double】", - "【width】 : Breite des Eingabefelds 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Stil des Dropdown-Menüs", - "desc": [ - "【controller】 : Text-Eingabe-Controller 【TextEditingController?】", - "【label】 : Label des Eingabefelds 【Widget?】", - "【textStyle】 : Textstil des Eingabefelds 【TextStyle?】", - "【inputDecorationTheme】 : Dekorationsthema des Eingabefelds 【InputDecorationTheme?】", - "【leadingIcon】 : Linkes Symbol 【Widget?】", - "【trailingIcon】 : Rechtes Symbol, wenn das Menü erweitert ist 【Widget?】", - "【selectedTrailingIcon】 : Rechtes Symbol, wenn das Menü erweitert ist 【Widget?】", - "【hintText】 : Hinweistext des Eingabefelds 【String?】", - "【helperText】 : Hilfstext des Eingabefelds 【String?】", - "【errorText】 : Fehlertext des Eingabefelds 【String?】", - "【menuStyle】 : Stil des Popup-Menüs 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "Benutzerdefinierte Menüelemente im Dropdown-Menü", - "desc": [ - "Menüelemente können über das labelWidget von DropdownMenuEntry angepasst werden." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_en_US.json deleted file mode 100644 index e15e900bc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_en_US.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "Dropdown Menu", - "info": "Dropdown selection component, supports text input filtering, and allows custom menu items. It mainly relies on MenuAnchor and TextField for implementation.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Simple Usage of Dropdown Menu", - "desc": [ - "【dropdownMenuEntries】 : Menu item list 【List>】", - "【initialSelection】 : Form validation callback 【T?】", - "【onSelected】 : Form save callback 【ValueChanged?】", - "【menuHeight】 : Menu height 【double】", - "【width】 : Input box width 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Dropdown Menu Style Settings", - "desc": [ - "【controller】 : Text input controller 【TextEditingController?】", - "【label】 : Input box label 【Widget?】", - "【textStyle】 : Input box text style 【TextStyle?】", - "【inputDecorationTheme】 : Input box decoration theme 【InputDecorationTheme?】", - "【leadingIcon】 : Left icon 【Widget?】", - "【trailingIcon】 : Right icon when menu is expanded 【Widget?】", - "【selectedTrailingIcon】 : Right icon when menu is expanded 【Widget?】", - "【hintText】 : Input box hint text 【String?】", - "【helperText】 : Input box helper text 【String?】", - "【errorText】 : Input box error text 【String?】", - "【menuStyle】 : Popup menu style 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "Custom Menu Items for Dropdown Menu", - "desc": [ - "You can customize the menu items by using the labelWidget of DropdownMenuEntry." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_es_ES.json deleted file mode 100644 index aba441edf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_es_ES.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "Menú desplegable", - "info": "Componente de selección desplegable, admite filtrado de entrada de texto y permite personalizar los elementos del menú. Depende principalmente de MenuAnchor y TextFiled para su implementación.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso básico del menú desplegable", - "desc": [ - "【dropdownMenuEntries】 : Lista de entradas del menú 【List>】", - "【initialSelection】 : Callback de validación del formulario 【T?】", - "【onSelected】 : Callback de guardado del formulario 【ValueChanged?】", - "【menuHeight】 : Altura del menú 【double】", - "【width】 : Ancho del campo de entrada 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Configuración de estilo del menú desplegable", - "desc": [ - "【controller】 : Controlador de entrada de texto 【TextEditingController?】", - "【label】 : Etiqueta del campo de entrada 【Widget?】", - "【textStyle】 : Estilo del texto del campo de entrada 【TextStyle?】", - "【inputDecorationTheme】 : Tema de decoración del campo de entrada 【InputDecorationTheme?】", - "【leadingIcon】 : Icono izquierdo 【Widget?】", - "【trailingIcon】 : Icono derecho cuando el menú está colapsado 【Widget?】", - "【selectedTrailingIcon】 : Icono derecho cuando el menú está expandido 【Widget?】", - "【hintText】 : Texto de sugerencia del campo de entrada 【String?】", - "【helperText】 : Texto auxiliar del campo de entrada 【String?】", - "【errorText】 : Texto de error del campo de entrada 【String?】", - "【menuStyle】 : Estilo del menú emergente 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "Personalización de elementos del menú desplegable", - "desc": [ - "Puede personalizar la construcción de los elementos del menú utilizando labelWidget de DropdownMenuEntry." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_fr_FR.json deleted file mode 100644 index 5af1271f6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_fr_FR.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "Menu déroulant", - "info": "Composant de sélection déroulante, prend en charge le filtrage par saisie de texte, et permet de personnaliser les éléments du menu. Il repose principalement sur MenuAnchor et TextFiled pour son implémentation.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation simple du menu déroulant", - "desc": [ - "【dropdownMenuEntries】 : Liste des entrées du menu 【List>】", - "【initialSelection】 : Rappel de validation du formulaire 【T?】", - "【onSelected】 : Rappel de sauvegarde du formulaire 【ValueChanged?】", - "【menuHeight】 : Hauteur du menu 【double】", - "【width】 : Largeur du champ de saisie 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Configuration du style du menu déroulant", - "desc": [ - "【controller】 : Contrôleur de saisie de texte 【TextEditingController?】", - "【label】 : Étiquette du champ de saisie 【Widget?】", - "【textStyle】 : Style du texte du champ de saisie 【TextStyle?】", - "【inputDecorationTheme】 : Thème de décoration du champ de saisie 【InputDecorationTheme?】", - "【leadingIcon】 : Icône de gauche 【Widget?】", - "【trailingIcon】 : Icône de droite lorsque le menu est déployé 【Widget?】", - "【selectedTrailingIcon】 : Icône de droite lorsque le menu est déployé 【Widget?】", - "【hintText】 : Texte d'indication du champ de saisie 【String?】", - "【helperText】 : Texte d'aide du champ de saisie 【String?】", - "【errorText】 : Texte d'erreur du champ de saisie 【String?】", - "【menuStyle】 : Style du menu contextuel 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "Personnalisation des éléments du menu déroulant", - "desc": [ - "Il est possible de personnaliser la construction des éléments du menu via le labelWidget de DropdownMenuEntry." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_it_IT.json deleted file mode 100644 index 074fcd7db..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_it_IT.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "Menu a tendina", - "info": "Componente di selezione a tendina, supporta il filtraggio tramite input di testo e consente la personalizzazione delle voci del menu. Si basa principalmente su MenuAnchor e TextFiled per l'implementazione.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso semplice del menu a tendina", - "desc": [ - "【dropdownMenuEntries】 : Lista delle voci del menu 【List>】", - "【initialSelection】 : Callback di convalida del modulo 【T?】", - "【onSelected】 : Callback di salvataggio del modulo 【ValueChanged?】", - "【menuHeight】 : Altezza del menu 【double】", - "【width】 : Larghezza del campo di input 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Impostazione dello stile del menu a tendina", - "desc": [ - "【controller】 : Controller di input del testo 【TextEditingController?】", - "【label】 : Etichetta del campo di input 【Widget?】", - "【textStyle】 : Stile del testo del campo di input 【TextStyle?】", - "【inputDecorationTheme】 : Tema di decorazione del campo di input 【InputDecorationTheme?】", - "【leadingIcon】 : Icona a sinistra 【Widget?】", - "【trailingIcon】 : Icona a destra quando il menu è espanso 【Widget?】", - "【selectedTrailingIcon】 : Icona a destra quando il menu è espanso 【Widget?】", - "【hintText】 : Testo di suggerimento del campo di input 【String?】", - "【helperText】 : Testo di supporto del campo di input 【String?】", - "【errorText】 : Testo di errore del campo di input 【String?】", - "【menuStyle】 : Stile del menu a comparsa 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "Personalizzazione delle voci del menu a tendina", - "desc": [ - "È possibile personalizzare la costruzione delle voci del menu utilizzando il labelWidget di DropdownMenuEntry." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ja_JP.json deleted file mode 100644 index cab24c05e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ja_JP.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "ドロップダウンメニュー", - "info": "ドロップダウン選択コンポーネント、テキスト入力フィルタリングをサポートし、メニュー項目をカスタマイズ可能。主にMenuAnchorとTextFiledに依存して実装されています。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "ドロップダウンメニューの簡単な使用", - "desc": [ - "【dropdownMenuEntries】 : メニューエントリリスト 【List>】", - "【initialSelection】 : フォーム検証コールバック 【T?】", - "【onSelected】 : フォーム保存コールバック 【ValueChanged?】", - "【menuHeight】 : メニューの高さ 【double】", - "【width】 : 入力ボックスの幅 【double】" - ] - }, - { - "file": "node2.dart", - "name": "ドロップダウンメニューのスタイル設定", - "desc": [ - "【controller】 : テキスト入力コントローラー 【TextEditingController?】", - "【label】 : 入力ボックスのラベル 【Widget?】", - "【textStyle】 : 入力ボックスのテキストスタイル 【TextStyle?】", - "【inputDecorationTheme】 : 入力ボックスの装飾テーマ 【InputDecorationTheme?】", - "【leadingIcon】 : 左側のアイコン 【Widget?】", - "【trailingIcon】 : 右側のメニュー展開時のアイコン 【Widget?】", - "【selectedTrailingIcon】 : 右側のメニュー展開時のアイコン 【Widget?】", - "【hintText】 : 入力ボックスのヒントテキスト 【String?】", - "【helperText】 : 入力ボックスの補助テキスト 【String?】", - "【errorText】 : 入力ボックスのエラーテキスト 【String?】", - "【menuStyle】 : ポップアップメニューのスタイル 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "ドロップダウンメニューのカスタムメニュー項目", - "desc": [ - "DropdownMenuEntryのlabelWidgetを使用してメニュー項目をカスタマイズできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ko_KR.json deleted file mode 100644 index ad6961567..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ko_KR.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "드롭다운 메뉴", - "info": "드롭다운 선택 컴포넌트로, 텍스트 입력 필터링을 지원하며 메뉴 항목을 사용자 정의할 수 있습니다. 기본적으로 MenuAnchor와 TextFiled에 의존하여 구현됩니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "드롭다운 메뉴의 간단한 사용", - "desc": [ - "【dropdownMenuEntries】 : 메뉴 항목 리스트 【List>】", - "【initialSelection】 : 폼 검증 콜백 【T?】", - "【onSelected】 : 폼 저장 콜백 【ValueChanged?】", - "【menuHeight】 : 메뉴 높이 【double】", - "【width】 : 입력 필드 너비 【double】" - ] - }, - { - "file": "node2.dart", - "name": "드롭다운 메뉴 스타일 설정", - "desc": [ - "【controller】 : 텍스트 입력 컨트롤러 【TextEditingController?】", - "【label】 : 입력 필드 라벨 【Widget?】", - "【textStyle】 : 입력 필드 텍스트 스타일 【TextStyle?】", - "【inputDecorationTheme】 : 입력 필드 장식 테마 【InputDecorationTheme?】", - "【leadingIcon】 : 왼쪽 아이콘 【Widget?】", - "【trailingIcon】 : 오른쪽 메뉴 확장 아이콘 【Widget?】", - "【selectedTrailingIcon】 : 오른쪽 메뉴 확장 아이콘 【Widget?】", - "【hintText】 : 입력 필드 힌트 텍스트 【String?】", - "【helperText】 : 입력 필드 보조 텍스트 【String?】", - "【errorText】 : 입력 필드 오류 텍스트 【String?】", - "【menuStyle】 : 팝업 메뉴 스타일 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "드롭다운 메뉴 사용자 정의 메뉴 항목", - "desc": [ - "DropdownMenuEntry의 labelWidget을 통해 메뉴 항목을 사용자 정의할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_pt_PT.json deleted file mode 100644 index 4442f7fcc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_pt_PT.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "Menu Suspenso", - "info": "Componente de seleção suspensa, suporta filtragem de entrada de texto, e permite personalizar os itens do menu. Depende principalmente de MenuAnchor e TextFiled para implementação.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso Simples do Menu Suspenso", - "desc": [ - "【dropdownMenuEntries】 : Lista de entradas do menu 【List>】", - "【initialSelection】 : Callback de validação do formulário 【T?】", - "【onSelected】 : Callback de salvamento do formulário 【ValueChanged?】", - "【menuHeight】 : Altura do menu 【double】", - "【width】 : Largura da caixa de entrada 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Configuração de Estilo do Menu Suspenso", - "desc": [ - "【controller】 : Controlador de entrada de texto 【TextEditingController?】", - "【label】 : Etiqueta da caixa de entrada 【Widget?】", - "【textStyle】 : Estilo do texto da caixa de entrada 【TextStyle?】", - "【inputDecorationTheme】 : Tema de decoração da caixa de entrada 【InputDecorationTheme?】", - "【leadingIcon】 : Ícone à esquerda 【Widget?】", - "【trailingIcon】 : Ícone à direita quando o menu está expandido 【Widget?】", - "【selectedTrailingIcon】 : Ícone à direita quando o menu está expandido 【Widget?】", - "【hintText】 : Texto de dica da caixa de entrada 【String?】", - "【helperText】 : Texto auxiliar da caixa de entrada 【String?】", - "【errorText】 : Texto de erro da caixa de entrada 【String?】", - "【menuStyle】 : Estilo do menu suspenso 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "Personalização de Itens do Menu Suspenso", - "desc": [ - "É possível personalizar a construção de itens do menu através do labelWidget do DropdownMenuEntry." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ru_RU.json deleted file mode 100644 index e04a851f5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_ru_RU.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "Выпадающее меню", - "info": "Компонент выбора из выпадающего списка, поддерживает фильтрацию по текстовому вводу, позволяет настраивать пункты меню. Основная реализация зависит от MenuAnchor и TextFiled.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "Простое использование выпадающего меню", - "desc": [ - "【dropdownMenuEntries】 : Список пунктов меню 【List>】", - "【initialSelection】 : Обратный вызов проверки формы 【T?】", - "【onSelected】 : Обратный вызов сохранения формы 【ValueChanged?】", - "【menuHeight】 : Высота меню 【double】", - "【width】 : Ширина поля ввода 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Настройка стиля выпадающего меню", - "desc": [ - "【controller】 : Контроллер текстового ввода 【TextEditingController?】", - "【label】 : Метка поля ввода 【Widget?】", - "【textStyle】 : Стиль текста поля ввода 【TextStyle?】", - "【inputDecorationTheme】 : Тема оформления поля ввода 【InputDecorationTheme?】", - "【leadingIcon】 : Иконка слева 【Widget?】", - "【trailingIcon】 : Иконка справа при развернутом меню 【Widget?】", - "【selectedTrailingIcon】 : Иконка справа при развернутом меню 【Widget?】", - "【hintText】 : Подсказка в поле ввода 【String?】", - "【helperText】 : Вспомогательный текст в поле ввода 【String?】", - "【errorText】 : Текст ошибки в поле ввода 【String?】", - "【menuStyle】 : Стиль всплывающего меню 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "Настройка пунктов меню выпадающего меню", - "desc": [ - "Можно настроить пункты меню с помощью labelWidget в DropdownMenuEntry." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_zh-CN.json deleted file mode 100644 index 047ff7ab2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/desc_zh-CN.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 370, - "name": "DropdownMenu", - "localName": "下拉菜单", - "info": "下拉选择组件,支持文本输入过滤,可自定义菜单项。底层主要依赖 MenuAnchor 和 TextFiled 实现。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1.dart", - "name": "下拉菜单的简单使用", - "desc": [ - "【dropdownMenuEntries】 : 菜单条目列表 【List>】", - "【initialSelection】 : 表单验证回调 【T?】", - "【onSelected】 : 表单保存回调 【ValueChanged?】", - "【menuHeight】 : 菜单高度 【double】", - "【width】 : 输入框宽度 【double】" - ] - }, - { - "file": "node2.dart", - "name": "下拉菜单样式设置", - "desc": [ - "【controller】 : 文字输入控制器 【TextEditingController?】", - "【label】 : 输入框标签 【Widget?】", - "【textStyle】 : 输入框文字样式 【TextStyle?】", - "【inputDecorationTheme】 : 输入框装饰主题 【InputDecorationTheme?】", - "【leadingIcon】 : 左侧图标 【Widget?】", - "【trailingIcon】 : 右侧为展开菜单时图标 【Widget?】", - "【selectedTrailingIcon】 : 右侧展开菜单时图标 【Widget?】", - "【hintText】 : 输入框提示文字 【String?】", - "【helperText】 : 输入框辅助文字 【String?】", - "【errorText】 : 输入框错误文字 【String?】", - "【menuStyle】 : 弹出菜单样式 【MenuStyle?】" - ] - }, - { - "file": "node3.dart", - "name": "下拉菜单自定义菜单项", - "desc": [ - "可以通过 DropdownMenuEntry 的 labelWidget 定制构建菜单项。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node1.dart deleted file mode 100644 index a2dc6ebfe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node1.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class DropdownMenuNode1 extends StatefulWidget { - const DropdownMenuNode1({super.key}); - - @override - State createState() => _DropdownMenuNode1State(); -} - -class _DropdownMenuNode1State extends State { - final List data = ['语文', '数学', '英语', '物理', '化学', '生物', '地理']; - late String _dropdownValue = data.first; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - DropdownMenu( - menuHeight: 200, - initialSelection: data.first, - onSelected: _onSelect, - dropdownMenuEntries: _buildMenuList(data), - ), - const SizedBox(height: 8,), - Text('你选择的学科是: $_dropdownValue') - ], - ); - } - - void _onSelect(String? value) { - setState(() { - _dropdownValue = value!; - }); - } - - List> _buildMenuList(List data) { - return data.map((String value) { - return DropdownMenuEntry(value: value, label: value); - }).toList(); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node2.dart b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node2.dart deleted file mode 100644 index cf4f5eaad..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node2.dart +++ /dev/null @@ -1,148 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -enum ColorLabel { - blue('Blue', Colors.blue), - pink('Pink', Colors.pink), - green('Green', Colors.green), - yellow('Orange', Colors.orange), - grey('Grey', Colors.grey); - - const ColorLabel(this.label, this.color); - - final String label; - final Color color; -} - - -enum IconLabel { - smile('Smile', Icons.sentiment_satisfied_outlined), - cloud('Cloud', Icons.cloud_outlined), - brush('Brush', Icons.brush_outlined), - heart('Heart', Icons.favorite); - - const IconLabel(this.label, this.icon); - - final String label; - final IconData icon; -} - -class DropdownMenuNode2 extends StatefulWidget { - const DropdownMenuNode2({super.key}); - - @override - State createState() => _DropdownMenuNode2State(); -} - -class _DropdownMenuNode2State extends State { - final TextEditingController colorController = TextEditingController(); - final TextEditingController iconController = TextEditingController(); - ColorLabel? selectedColor; - IconLabel? selectedIcon; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.symmetric(vertical: 20,horizontal: 20), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - _buildColorMenu(), - const SizedBox(height: 16), - _buildLabelMenu(), - ], - ), - ), - const SizedBox(height: 8), - _buildInfo() - ], - ); - } - - Widget _buildColorMenu(){ - return DropdownMenu( - initialSelection: ColorLabel.green, - controller: colorController, - requestFocusOnTap: true, - label: const Text('Color'), - width: 160, - menuHeight: 150, - menuStyle: const MenuStyle( - backgroundColor: MaterialStatePropertyAll(Colors.white), - surfaceTintColor: MaterialStatePropertyAll(Colors.white), - padding: MaterialStatePropertyAll(EdgeInsets.symmetric(vertical: 20,horizontal: 8)), - ), - onSelected: (ColorLabel? color) { - setState(() { - selectedColor = color; - }); - }, - dropdownMenuEntries: ColorLabel.values.map((ColorLabel color) { - return DropdownMenuEntry( - value: color, - label: color.label, - enabled: color.label != 'Grey', - style: MenuItemButton.styleFrom( - foregroundColor: color.color, - ), - ); - } - ).toList(), - ); - } - - Widget _buildInfo() { - if (selectedColor != null && selectedIcon != null) { - return Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text('You selected a ${selectedColor?.label} ${selectedIcon?.label}'), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 5), - child: Icon( - selectedIcon?.icon, - color: selectedColor?.color, - ), - ) - ], - ); - } - return const Text('Please select a color and an icon.'); - } - - Widget _buildLabelMenu() { - return DropdownMenu( - controller: iconController, - enableFilter: false, - requestFocusOnTap: false, - width: 160, - leadingIcon: const Icon(Icons.search), - label: const Text('Icon'), - inputDecorationTheme: const InputDecorationTheme( - filled: true, - contentPadding: EdgeInsets.symmetric(vertical: 5.0), - ), - onSelected: (IconLabel? icon) { - setState(() { - selectedIcon = icon; - }); - }, - dropdownMenuEntries: IconLabel.values.map((IconLabel icon) { - return DropdownMenuEntry( - value: icon, - label: icon.label, - leadingIcon: Icon(icon.icon), - ); - }, - ).toList(), - ); - } -} - - - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node3.dart b/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node3.dart deleted file mode 100644 index f401df201..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/DropdownMenu/node3.dart +++ /dev/null @@ -1,128 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - -class User { - final String name; - final bool man; - final String image; - - const User(this.name, this.man, this.image); - - @override - String toString() { - return 'User{name: $name, man: $man, image: $image}'; - } -} - -class DropdownMenuNode3 extends StatefulWidget { - const DropdownMenuNode3({ super.key }); - - @override - State createState() => _DropdownMenuNode3State(); -} - -class _DropdownMenuNode3State extends State { - late final TextEditingController controller; - - List data = const [ - User('toly', true, 'icon_5.webp'), - User('toly49', false, 'icon_6.webp'), - User('toly42', true, 'icon_7.webp'), - User('toly56', false, 'icon_8.webp'), - User('card', true, 'icon_5.webp'), - User('ls', true, 'icon_6.webp'), - User('alex', true, 'icon_7.webp'), - User('fan sha', false, 'icon_8.webp'), - ]; - - User? _selectUser; - - @override - void initState() { - super.initState(); - controller = TextEditingController(); - } - - @override - void dispose() { - controller.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return DropdownMenu( - width: 300, - menuHeight: 250, - controller: controller, - leadingIcon: _selectUser!=null?SizedBox( - width: 26, - height: 26, - child: Center( - child: CircleAvatar( - radius: 14, - foregroundColor: Colors.transparent, - backgroundImage: - AssetImage('assets/images/head_icon/${_selectUser!.image}'), - ), - ), - ):null, - label: const Text('选择用户'), - onSelected: (User? user) { - print('Selected $user'); - setState(() { - _selectUser = user; - - }); - }, - dropdownMenuEntries: data.map>((User user) { - return DropdownMenuEntry( - value: user, - label: user.name, - // Try commenting the labelWidget out or changing - // the labelWidget's Text parameters. - labelWidget: _UserItem(user: user), - ); - }).toList(), - ); - } -} -class _UserItem extends StatelessWidget { - final User user; - - const _UserItem({ - Key? key, - required this.user, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 6), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - CircleAvatar( - foregroundColor: Colors.transparent, - backgroundImage: - AssetImage('assets/images/head_icon/${user.image}'), - ), - const SizedBox(width: 20), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text(user.name), - Text( - '性别:'+ (user.man ? '男' : '女'), - style: const TextStyle(color: Colors.grey), - ), - ], - ), - ], - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_de_DE.json deleted file mode 100644 index c74d1d999..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "Bearbarer Text", - "info": "Bearbarer Text ist die grundlegendste Komponente von TextField und wird in der Regel nicht allein verwendet.", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von EditableText", - "desc": [ - "【controller】 : Controller 【TextEditingController】", - "【focusNode】 : Fokus 【FocusNode】", - "【style】 : Textstil 【TextStyle】", - "【backgroundCursorColor】 : Hintergrundcursorfarbe 【Color】", - "【cursorColor】 : Cursorfarbe 【Color】", - "Die oben genannten fünf Attribute sind für EditableText obligatorisch, andere sind identisch mit TextField und werden hier nicht aufgeführt." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_en_US.json deleted file mode 100644 index 54b54a0e4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "Editable Text", - "info": "Editable text is the core component at the bottom layer of TextField and is generally not used alone.", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of EditableText", - "desc": [ - "【controller】: Controller 【TextEditingController】", - "【focusNode】: Focus Node 【FocusNode】", - "【style】: Text Style 【TextStyle】", - "【backgroundCursorColor】: Background Cursor Color 【Color】", - "【cursorColor】: Cursor Color 【Color】", - "The above five are the essential properties of EditableText. Others are the same as TextField and will not be listed here." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_es_ES.json deleted file mode 100644 index 54869ba9f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "Texto editable", - "info": "Texto que se puede editar, es el componente central subyacente de TextField, generalmente no se usa solo.", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de EditableText", - "desc": [ - "【controller】: Controlador 【TextEditingController】", - "【focusNode】: Foco 【FocusNode】", - "【style】: Estilo de texto 【TextStyle】", - "【backgroundCursorColor】: Color del cursor de fondo 【Color】", - "【cursorColor】: Color del cursor 【Color】", - "Los cinco anteriores son atributos obligatorios de EditableText, otros son iguales a TextField, no se enumeran aquí." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_fr_FR.json deleted file mode 100644 index 8c42e91cd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "Texte modifiable", - "info": "Texte qui peut être édité, c'est le composant central sous-jacent de TextField, généralement non utilisé seul.", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de EditableText", - "desc": [ - "【controller】 : Contrôleur 【TextEditingController】", - "【focusNode】 : Nœud de focus 【FocusNode】", - "【style】 : Style de texte 【TextStyle】", - "【backgroundCursorColor】 : Couleur du curseur de fond 【Color】", - "【cursorColor】 : Couleur du curseur 【Color】", - "Les cinq propriétés ci-dessus sont obligatoires pour EditableText, les autres sont similaires à TextField et ne sont pas listées ici." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_it_IT.json deleted file mode 100644 index c3ec0779e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "Testo modificabile", - "info": "Testo che può essere modificato, è il componente più fondamentale di TextField, generalmente non utilizzato da solo.", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di EditableText", - "desc": [ - "【controller】 : Controller 【TextEditingController】", - "【focusNode】 : Focus 【FocusNode】", - "【style】 : Stile del testo 【TextStyle】", - "【backgroundCursorColor】 : Colore del cursore di sfondo 【Color】", - "【cursorColor】 : Colore del cursore 【Color】", - "I cinque attributi sopra sono obbligatori per EditableText, gli altri sono simili a TextField e non verranno elencati qui." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ja_JP.json deleted file mode 100644 index 4098e3865..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "編集可能なテキスト", - "info": "編集可能なテキストで、TextFieldの最もコアなコンポーネントです。通常は単独で使用しません。", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EditableTextの基本使用", - "desc": [ - "【controller】 : コントローラー 【TextEditingController】", - "【focusNode】 : フォーカス 【FocusNode】", - "【style】 : テキストスタイル 【TextStyle】", - "【backgroundCursorColor】 : 背景カーソルカラー 【Color】", - "【cursorColor】 : カーソルカラー 【Color】", - "上記の5つはEditableTextの必須属性です。その他はTextFieldと同じで、ここでは列挙しません。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ko_KR.json deleted file mode 100644 index b3865d545..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "편집 가능한 텍스트", - "info": "편집 가능한 텍스트는 TextField의 가장 핵심적인 구성 요소로, 일반적으로 단독으로 사용되지 않습니다.", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EditableText 기본 사용법", - "desc": [ - "【controller】 : 컨트롤러 【TextEditingController】", - "【focusNode】 : 포커스 【FocusNode】", - "【style】 : 텍스트 스타일 【TextStyle】", - "【backgroundCursorColor】 : 배경 커서 색상 【Color】", - "【cursorColor】 : 커서 색상 【Color】", - "위 다섯 가지는 EditableText의 필수 속성이며, 나머지는 TextField와 동일하므로 여기서는 더 이상 열거하지 않습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_pt_PT.json deleted file mode 100644 index e558d5412..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "Texto Editável", - "info": "Texto que pode ser editado, é o componente central mais básico do TextField, geralmente não é usado sozinho.", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do EditableText", - "desc": [ - "【controller】 : Controlador 【TextEditingController】", - "【focusNode】 : Foco 【FocusNode】", - "【style】 : Estilo de Texto 【TextStyle】", - "【backgroundCursorColor】 : Cor do Cursor de Fundo 【Color】", - "【cursorColor】 : Cor do Cursor 【Color】", - "Os cinco acima são atributos obrigatórios do EditableText, outros são semelhantes ao TextField, não serão listados aqui." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ru_RU.json deleted file mode 100644 index b0182f626..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "Редактируемый текст", - "info": "Редактируемый текст, это основной компонент TextField, обычно не используется отдельно.", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование EditableText", - "desc": [ - "【controller】 : Контроллер 【TextEditingController】", - "【focusNode】 : Фокус 【FocusNode】", - "【style】 : Стиль текста 【TextStyle】", - "【backgroundCursorColor】 : Цвет фонового курсора 【Color】", - "【cursorColor】 : Цвет курсора 【Color】", - "Эти пять свойств являются обязательными для EditableText, остальные аналогичны TextField и здесь не перечисляются." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_zh-CN.json deleted file mode 100644 index 010756602..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 244, - "name": "EditableText", - "localName": "可编辑文字", - "info": "可以编辑的文字,是TextField的底层最核心组件,一般不单独使用。", - "lever": 2, - "family": 1, - "linkIds": [ - 2, - 54 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EditableText基本使用", - "desc": [ - "【controller】 : 控制器 【TextEditingController】", - "【focusNode】 : 焦点 【FocusNode】", - "【style】 : 文字样式 【TextStyle】", - "【backgroundCursorColor】 : 背景游标颜色 【Color】", - "【cursorColor】 : 游标颜色 【Color】", - "上面五个是EditableText必须的属性,其他同TextField,此处不再列举。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/EditableText/node1_base.dart deleted file mode 100644 index 951baf837..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/EditableText/node1_base.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class EditableTextDemo extends StatefulWidget { - const EditableTextDemo({Key? key}) : super(key: key); - - @override - _EditableTextDemoState createState() => _EditableTextDemoState(); -} - -class _EditableTextDemoState extends State { - final TextEditingController _ctrl = - TextEditingController(text: 'Hello Flutter Unit!'); - final FocusNode _node = FocusNode(); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(8.0), - child: EditableText( - controller: _ctrl, - focusNode: _node, - style: const TextStyle(fontSize: 16, color: Colors.blue), - cursorColor: Colors.blue, - backgroundCursorColor: Colors.orange, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_de_DE.json deleted file mode 100644 index 35e6a1b8d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_de_DE.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "Erhobener Button", - "info": "Material-stil erhobener Button, ähnlich wie RaisedButton. Eigenschaften wie Rahmen, Farbe, Schatten können durch Stile geändert werden.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ElevatedButton", - "desc": [ - "【child】 : Hat es ein scrollendes Hauptelement 【Widget】", - "【onPressed】 : Klickereignis 【VoidCallback】", - "【onLongPress】 : Langer Druckereignis 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Stil von ElevatedButton", - "desc": [ - "【style】 : Button-Stil 【ButtonStyle】", - "【focusNode】 : Fokus 【FocusNode】", - "【clipBehavior】 : Zuschneideverhalten 【Clip】", - "【autofocus】 : Autofokus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_en_US.json deleted file mode 100644 index ece99fa06..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_en_US.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "Raised Button", - "info": "A Material-styled raised button, similar in behavior to RaisedButton. Properties such as border, color, and shadow can be changed through styling.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ElevatedButton", - "desc": [ - "【child】: Whether it has a scrollable body 【Widget】", - "【onPressed】: Click event 【VoidCallback】", - "【onLongPress】: Long press event 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "ElevatedButton Style", - "desc": [ - "【style】: Button style 【ButtonStyle】", - "【focusNode】: Focus 【FocusNode】", - "【clipBehavior】: Clip behavior 【Clip】", - "【autofocus】: Auto focus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_es_ES.json deleted file mode 100644 index 4381dd4d7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_es_ES.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "Botón elevado", - "info": "Botón elevado de estilo Material, similar en comportamiento a RaisedButton. Se pueden cambiar propiedades como el borde, el color, la sombra, etc., mediante estilos.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ElevatedButton", - "desc": [ - "【child】 : Si tiene un cuerpo desplazable 【Widget】", - "【onPressed】 : Evento de clic 【VoidCallback】", - "【onLongPress】 : Evento de pulsación prolongada 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Estilo de ElevatedButton", - "desc": [ - "【style】 : Estilo del botón 【ButtonStyle】", - "【focusNode】 : Foco 【FocusNode】", - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【autofocus】 : Enfoque automático 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_fr_FR.json deleted file mode 100644 index 3768217e9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_fr_FR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "Bouton surélevé", - "info": "Bouton de style Material, similaire à RaisedButton. Les propriétés telles que la bordure, la couleur, l'ombre peuvent être modifiées via le style.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'ElevatedButton", - "desc": [ - "【child】 : Si le bouton a un corps défilant 【Widget】", - "【onPressed】 : Événement de clic 【VoidCallback】", - "【onLongPress】 : Événement de pression longue 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Style d'ElevatedButton", - "desc": [ - "【style】 : Style du bouton 【ButtonStyle】", - "【focusNode】 : Focus 【FocusNode】", - "【clipBehavior】 : Comportement de découpage 【Clip】", - "【autofocus】 : Autofocus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_it_IT.json deleted file mode 100644 index c58874075..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_it_IT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "Pulsante sollevato", - "info": "Pulsante in stile Material, simile a RaisedButton. È possibile modificare proprietà come bordo, colore, ombra, ecc. attraverso lo stile.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ElevatedButton", - "desc": [ - "【child】 : Se ha un corpo scorrevole 【Widget】", - "【onPressed】 : Evento di clic 【VoidCallback】", - "【onLongPress】 : Evento di pressione lunga 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Stile di ElevatedButton", - "desc": [ - "【style】 : Stile del pulsante 【ButtonStyle】", - "【focusNode】 : Fuoco 【FocusNode】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【autofocus】 : Autofocus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ja_JP.json deleted file mode 100644 index f094a53f1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ja_JP.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "昇格ボタン", - "info": "Materialスタイルの昇格ボタンで、RaisedButtonと似たような動作をします。スタイルを変更して、ボーダー、色、影などのプロパティを変更できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ElevatedButtonの基本使用", - "desc": [ - "【child】 : スクロール主体を持つかどうか 【Widget】", - "【onPressed】 : クリックイベント 【VoidCallback】", - "【onLongPress】 : 長押しイベント 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "ElevatedButtonのスタイル", - "desc": [ - "【style】 : ボタンのスタイル 【ButtonStyle】", - "【focusNode】 : フォーカス 【FocusNode】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【autofocus】 : 自動フォーカス 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ko_KR.json deleted file mode 100644 index af9be9331..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ko_KR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "올라간 버튼", - "info": "Material 스타일의 올라간 버튼으로, RaisedButton과 유사하게 동작합니다. 스타일을 통해 테두리, 색상, 그림자 등의 속성을 변경할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ElevatedButton 기본 사용법", - "desc": [ - "【child】 : 스크롤 가능한 본체 여부 【Widget】", - "【onPressed】 : 클릭 이벤트 【VoidCallback】", - "【onLongPress】 : 길게 누르기 이벤트 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "ElevatedButton 스타일", - "desc": [ - "【style】 : 버튼 스타일 【ButtonStyle】", - "【focusNode】 : 포커스 【FocusNode】", - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【autofocus】 : 자동 포커스 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_pt_PT.json deleted file mode 100644 index 91c7f259b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_pt_PT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "Botão Elevado", - "info": "Botão elevado no estilo Material, semelhante ao RaisedButton. Pode alterar propriedades como borda, cor, sombra, etc., através de estilos.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ElevatedButton", - "desc": [ - "【child】 : Se tem um corpo rolável 【Widget】", - "【onPressed】 : Evento de clique 【VoidCallback】", - "【onLongPress】 : Evento de pressão longa 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Estilo do ElevatedButton", - "desc": [ - "【style】 : Estilo do botão 【ButtonStyle】", - "【focusNode】 : Foco 【FocusNode】", - "【clipBehavior】 : Comportamento de corte 【Clip】", - "【autofocus】 : Foco automático 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ru_RU.json deleted file mode 100644 index 91c2bfe13..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_ru_RU.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "Поднятая кнопка", - "info": "Кнопка в стиле Material, похожая на RaisedButton. Можно изменить свойства, такие как граница, цвет, тень и т.д., через стили.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ElevatedButton", - "desc": [ - "【child】 : Имеет ли прокручиваемое содержимое 【Widget】", - "【onPressed】 : Событие нажатия 【VoidCallback】", - "【onLongPress】 : Событие долгого нажатия 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Стиль ElevatedButton", - "desc": [ - "【style】 : Стиль кнопки 【ButtonStyle】", - "【focusNode】 : Фокус 【FocusNode】", - "【clipBehavior】 : Поведение обрезки 【Clip】", - "【autofocus】 : Автофокус 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_zh-CN.json deleted file mode 100644 index a4f8675db..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/desc_zh-CN.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 354, - "name": "ElevatedButton", - "localName": "升起按钮", - "info": "Material风格的升起按钮,表现和RaisedButton类似。可通过样式更改边框、颜色、阴影等属性。", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 26, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ElevatedButton基本使用", - "desc": [ - "【child】 : 是否具有滚动主体 【Widget】", - "【onPressed】 : 点击事件 【VoidCallback】", - "【onLongPress】 : 长按事件 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "ElevatedButton样式", - "desc": [ - "【style】 : 按钮样式 【ButtonStyle】", - "【focusNode】 : 焦点 【FocusNode】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【autofocus】 : 自动聚焦 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/node1_base.dart deleted file mode 100644 index 68ce3de16..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/node1_base.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ElevatedButtonDemo extends StatelessWidget { - const ElevatedButtonDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - height: 60, - child: Wrap( - spacing: 20, - children: [ - ElevatedButton( - child: const Text('ElevatedButton'), - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - const ElevatedButton( - child: Text('禁用按钮'), - onPressed: null, - onLongPress: null, - ), - ], - )); - } - - void _onPressed() {} - - void _onLongPress() {} -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/node2_style.dart b/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/node2_style.dart deleted file mode 100644 index afe9bf65d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ElevatedButton/node2_style.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ElevatedButtonStyleDemo extends StatelessWidget { - const ElevatedButtonStyleDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - child: Wrap( - spacing: 10, - children: [ - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.orange, - foregroundColor: Colors.white, - elevation: 2, - shadowColor: Colors.orangeAccent), - child: const Text('ElevatedButton样式'), - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.white, - foregroundColor: Colors.black, - side: const BorderSide(color: Colors.blue,width: 1), - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)) - ), - // elevation: 2, - shadowColor: Colors.orangeAccent), - child: const Text('ElevatedButton边线'), - autofocus: false, - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - ], - ), - ); - } - - void _onPressed() {} - - void _onLongPress() {} -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_de_DE.json deleted file mode 100644 index adafa04d2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "Erweitern-Symbol", - "info": "Ein Erweitern-Button, der beim Klicken eine 180-Grad-Drehanimation ausführt. Kann Farbe, Größe, Rand angeben und Klickereignisse empfangen.", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ExpandIcon", - "desc": [ - "【isExpanded】 : Ob erweitert 【bool】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】", - "【size】 : Symbolgröße 【double】", - "【color】 : Farbe wenn nicht erweitert 【Color】", - "【expandedColor】 : Farbe wenn erweitert 【Color】", - "【onPressed】 : Klickereignis 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_en_US.json deleted file mode 100644 index 09a290c9d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "Expand Icon", - "info": "An expand button that performs a 180-degree rotation animation when clicked. Can specify color, size, margin, and receive click events.", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ExpandIcon", - "desc": [ - "【isExpanded】 : Whether expanded 【bool】", - "【padding】 : Padding 【EdgeInsetsGeometry】,", - "【size】 : Icon size 【double】", - "【color】 : Color when not expanded 【Color】", - "【expandedColor】 : Color when expanded 【Color】", - "【onPressed】 : Click event 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_es_ES.json deleted file mode 100644 index 3b1b28a23..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "Icono de expansión", - "info": "Un botón de expansión que, al hacer clic, realiza una animación de rotación de 180 grados. Se puede especificar el color, el tamaño, el margen y recibir eventos de clic.", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ExpandIcon", - "desc": [ - "【isExpanded】 : Si está expandido 【bool】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】,", - "【size】 : Tamaño del icono 【double】", - "【color】 : Color cuando no está expandido 【Color】", - "【expandedColor】 : Color cuando está expandido 【Color】", - "【onPressed】 : Evento de clic 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_fr_FR.json deleted file mode 100644 index 31b6694f2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "Icône de déploiement", - "info": "Un bouton de déploiement qui exécute une animation de rotation de 180 degrés lorsqu'il est cliqué. Peut spécifier la couleur, la taille, la marge et recevoir des événements de clic.", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ExpandIcon", - "desc": [ - "【isExpanded】 : Déployé ou non 【bool】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】,", - "【size】 : Taille de l'icône 【double】", - "【color】 : Couleur lorsqu'il n'est pas déployé 【Color】", - "【expandedColor】 : Couleur lorsqu'il est déployé 【Color】", - "【onPressed】 : Événement de clic 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_it_IT.json deleted file mode 100644 index a166b8118..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "Icona Espandi", - "info": "Un pulsante di espansione che esegue un'animazione di rotazione di 180 gradi quando viene cliccato. È possibile specificare colore, dimensione, margine e ricevere eventi di clic.", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di ExpandIcon", - "desc": [ - "【isExpanded】 : Se è espanso 【bool】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】,", - "【size】 : Dimensione dell'icona 【double】", - "【color】 : Colore quando non è espanso 【Color】", - "【expandedColor】 : Colore quando è espanso 【Color】", - "【onPressed】 : Evento di clic 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ja_JP.json deleted file mode 100644 index 561d97c77..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "展開アイコン", - "info": "展開ボタンで、クリックすると180度回転するアニメーションを自動的に実行します。色、サイズ、マージンを指定でき、クリックイベントを受け取ります。", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpandIconの基本的な使用", - "desc": [ - "【isExpanded】 : 展開されているかどうか 【bool】", - "【padding】 : パディング 【EdgeInsetsGeometry】,", - "【size】 : アイコンのサイズ 【double】", - "【color】 : 展開されていないときの色 【Color】", - "【expandedColor】 : 展開されているときの色 【Color】", - "【onPressed】 : クリックイベント 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ko_KR.json deleted file mode 100644 index 86696afd7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "펼치기 아이콘", - "info": "펼치기 버튼으로, 클릭 시 180도 회전 애니메이션을 자동으로 실행합니다. 색상, 크기, 여백을 지정할 수 있으며 클릭 이벤트를 받습니다.", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpandIcon 기본 사용", - "desc": [ - "【isExpanded】 : 펼쳐져 있는지 여부 【bool】", - "【padding】 : 안쪽 여백 【EdgeInsetsGeometry】,", - "【size】 : 아이콘 크기 【double】", - "【color】 : 펼쳐지지 않았을 때 색상 【Color】", - "【expandedColor】 : 펼쳐졌을 때 색상 【Color】", - "【onPressed】 : 클릭 이벤트 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_pt_PT.json deleted file mode 100644 index 61a792889..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "Ícone de Expansão", - "info": "Um botão de expansão que executa uma animação de rotação de 180 graus ao ser clicado. Pode especificar cor, tamanho, margem e receber eventos de clique.", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ExpandIcon", - "desc": [ - "【isExpanded】 : Se está expandido 【bool】", - "【padding】 : Margem interna 【EdgeInsetsGeometry】,", - "【size】 : Tamanho do ícone 【double】", - "【color】 : Cor quando não expandido 【Color】", - "【expandedColor】 : Cor quando expandido 【Color】", - "【onPressed】 : Evento de clique 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ru_RU.json deleted file mode 100644 index f642cbde0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "Иконка раскрытия", - "info": "Кнопка раскрытия, которая при нажатии выполняет анимацию поворота на 180 градусов. Можно указать цвет, размер, отступы и обрабатывать события нажатия.", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ExpandIcon", - "desc": [ - "【isExpanded】 : Раскрыто ли 【bool】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】", - "【size】 : Размер иконки 【double】", - "【color】 : Цвет в нераскрытом состоянии 【Color】", - "【expandedColor】 : Цвет в раскрытом состоянии 【Color】", - "【onPressed】 : Событие нажатия 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_zh-CN.json deleted file mode 100644 index 0e38b4cbe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 51, - "name": "ExpandIcon", - "localName": "展开图标", - "info": "一个展开按钮,点击时会自己执行旋转180的动画。可指定颜色、大小、边距,接收点击事件。", - "lever": 1, - "family": 1, - "linkIds": [ - 66, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpandIcon基本使用", - "desc": [ - "【isExpanded】 : 是否展开 【bool】", - "【padding】 : 内边距 【EdgeInsetsGeometry】,", - "【size】 : 图标大小 【double】", - "【color】 : 不展开时颜色 【Color】", - "【expandedColor】 : 展开时颜色 【Color】", - "【onPressed】 : 点击事件 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/node1_base.dart deleted file mode 100644 index f3c3ae024..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpandIcon/node1_base.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-16 -/// contact me by email 1981462002@qq.com - -class CustomExpandIcon extends StatefulWidget { - const CustomExpandIcon({Key? key}) : super(key: key); - - @override - _CustomExpandIconState createState() => _CustomExpandIconState(); -} - -class _CustomExpandIconState extends State { - bool _closed = true; - - @override - Widget build(BuildContext context) { - return ExpandIcon( - isExpanded: _closed, - padding: const EdgeInsets.all(5), - size: 30, - color: Colors.blue, - expandedColor: Colors.orangeAccent, - onPressed: (value) => setState(() => _closed = !_closed), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_de_DE.json deleted file mode 100644 index 1fa12fbc1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "Erweiterungsliste", - "info": "Erweiterbare Listenkomponente, die logisch für einfache oder mehrfache Erweiterungen implementiert werden kann. Kann die Animationsdauer für die Erweiterung festlegen und empfängt einen Rückruf bei der Erweiterung", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ExpansionPanelList", - "desc": [ - "【children】 : Liste der Unterkomponenten 【List】", - "【animationDuration】 : Animationsdauer 【Duration】", - "【expansionCallback】 : Rückruf bei Erweiterung 【List】", - "【onPressed】 : Klickereignis 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_en_US.json deleted file mode 100644 index 2c2c9e002..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "Expandable List", - "info": "A list component that can be expanded, which can implement single or multiple expansions based on logic. You can specify the duration of the expansion animation and receive expansion callbacks.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ExpansionPanelList", - "desc": [ - "【children】: List of child components 【List】", - "【animationDuration】: Animation duration 【Duration】", - "【expansionCallback】: Expansion callback 【List】", - "【onPressed】: Click event 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_es_ES.json deleted file mode 100644 index 7ad00b1f8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "Lista Expandible", - "info": "Componente de lista expandible que puede implementar expansión única o múltiple según la lógica. Puede especificar la duración de la animación de expansión y recibir una devolución de llamada de expansión.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ExpansionPanelList", - "desc": [ - "【children】 : Lista de componentes hijos 【List】", - "【animationDuration】 : Duración de la animación 【Duration】", - "【expansionCallback】 : Devolución de llamada de expansión 【List】", - "【onPressed】 : Evento de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_fr_FR.json deleted file mode 100644 index 80df8e542..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "Liste de déploiement", - "info": "Composant de liste extensible, pouvant être implémenté pour un déploiement unique ou multiple selon la logique. Permet de spécifier la durée de l'animation de déploiement et reçoit un rappel de déploiement.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ExpansionPanelList", - "desc": [ - "【children】 : Liste des composants enfants 【List】", - "【animationDuration】 : Durée de l'animation 【Duration】", - "【expansionCallback】 : Rappel de déploiement 【List】", - "【onPressed】 : Événement de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_it_IT.json deleted file mode 100644 index eef556546..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "Lista Espandibile", - "info": "Componente lista espandibile, può essere implementato per espansione singola o multipla in base alla logica. È possibile specificare la durata dell'animazione di espansione e ricevere un callback di espansione", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di ExpansionPanelList", - "desc": [ - "【children】 : Lista dei componenti figli 【List】", - "【animationDuration】 : Durata dell'animazione 【Duration】", - "【expansionCallback】 : Callback di espansione 【List】", - "【onPressed】 : Evento di click 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ja_JP.json deleted file mode 100644 index 4d590b2ad..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "展開リスト", - "info": "展開可能なリストコンポーネントで、ロジックに応じて単一展開または複数展開を実現できます。展開アニメーションの持続時間を指定でき、展開コールバックを受け取ります", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpansionPanelList基本使用", - "desc": [ - "【children】 : 子コンポーネントリスト 【List】", - "【animationDuration】 : アニメーションの持続時間 【Duration】", - "【expansionCallback】 : 展開コールバック 【List】", - "【onPressed】 : クリックイベント 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ko_KR.json deleted file mode 100644 index 21d91c6f7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "확장 목록", - "info": "확장 가능한 목록 컴포넌트로, 로직에 따라 단일 확장 또는 다중 확장을 구현할 수 있습니다. 확장 애니메이션 지속 시간을 지정할 수 있으며, 확장 콜백을 받습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpansionPanelList 기본 사용", - "desc": [ - "【children】 : 자식 컴포넌트 목록 【List】", - "【animationDuration】 : 애니메이션 지속 시간 【Duration】", - "【expansionCallback】 : 확장 콜백 【List】", - "【onPressed】 : 클릭 이벤트 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_pt_PT.json deleted file mode 100644 index 4432a0195..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "Lista Expansível", - "info": "Componente de lista expansível, pode implementar expansão única ou múltipla de acordo com a lógica. Pode especificar a duração da animação de expansão e receber um callback de expansão.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do ExpansionPanelList", - "desc": [ - "【children】 : Lista de componentes filhos 【List】", - "【animationDuration】 : Duração da animação 【Duration】", - "【expansionCallback】 : Callback de expansão 【List】", - "【onPressed】 : Evento de clique 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ru_RU.json deleted file mode 100644 index 6ab3ff8e8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "Раскрывающийся список", - "info": "Раскрывающийся компонент списка, который может быть реализован для одиночного или множественного раскрытия в зависимости от логики. Можно указать продолжительность анимации раскрытия, принимает обратный вызов при раскрытии", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ExpansionPanelList", - "desc": [ - "【children】 : Список дочерних компонентов 【List】", - "【animationDuration】 : Продолжительность анимации 【Duration】", - "【expansionCallback】 : Обратный вызов при раскрытии 【List】", - "【onPressed】 : Событие нажатия 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_zh-CN.json deleted file mode 100644 index 25d51a59d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 178, - "name": "ExpansionPanelList", - "localName": "展开列表", - "info": "可展开的列表组件,可根据逻辑来实现单展开或多展开。可指定展开动画时长,接收展开回调", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpansionPanelList基本使用", - "desc": [ - "【children】 : 子组件列表 【List】", - "【animationDuration】 : 动画时长 【Duration】", - "【expansionCallback】 : 展开回调 【List】", - "【onPressed】 : 点击事件 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/node1_base.dart deleted file mode 100644 index 2576dc4a9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionPanelList/node1_base.dart +++ /dev/null @@ -1,88 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class CustomExpansionPanelList extends StatefulWidget { - const CustomExpansionPanelList({Key? key}) : super(key: key); - - @override - _CustomExpansionPanelListState createState() => - _CustomExpansionPanelListState(); -} - -class _CustomExpansionPanelListState extends State { - final List data = [ - Colors.red[50]!, - Colors.red[100]!, - Colors.red[200]!, - Colors.red[300]!, - Colors.red[400]!, - Colors.red[500]!, - Colors.red[600]!, - Colors.red[700]!, - Colors.red[800]!, - Colors.red[900]!, - ]; - int _position = 0; - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 300, - child: ExpansionPanelList( - children: data.map((color) => _buildItem(color)).toList(), - animationDuration: const Duration(milliseconds: 200), - expansionCallback: (index, open) { - setState(() => _position = open ? -1 : index); - }, - ), - ); - } - - ExpansionPanel _buildItem(Color color) { - return ExpansionPanel( - isExpanded: data.indexOf(color) == _position, - canTapOnHeader: true, - headerBuilder: (ctx, index) => Center( - child: Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Container( - height: 30, - width: 30, - decoration: - BoxDecoration(color: color, shape: BoxShape.circle), - ), - Container( - width: 120, - alignment: Alignment.center, - height: 50, - child: Text( - colorString(color), - style: const TextStyle(color: Colors.black), - ), - ), - ], - ), - ), - body: Container( - alignment: Alignment.center, - height: 50, - color: color, - child: Text( - colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]), - ), - )); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_de_DE.json deleted file mode 100644 index e0286cecc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "Erweiterungs-Kachel", - "info": "Ein allgemeines Erweiterungsfeld, das Komponenten an einer bestimmten Stelle platzieren kann. Beim Klicken werden die darunter liegenden Komponenten ein- und ausgeklappt. Empfängt Ereignisse beim Einklappen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ExpansionTile", - "desc": [ - "【children】 : Erweiterungsinhalt 【List】", - "【leading】 : Linke Kopfkomponente 【Widget】", - "【title】 : Mittlere Kopfkomponente 【Widget】", - "【trailing】 : Rechte Kopfkomponente 【Widget】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【onExpansionChanged】 : Einklapp-Ereignis 【Function(bool)】", - "【initiallyExpanded】 : Beim Start erweitert 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_en_US.json deleted file mode 100644 index 26aadb370..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "Expand Tile", - "info": "A general-purpose expansion panel that can place components in specified locations. Clicking it will collapse or expand the components below. Receives events upon collapsing.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ExpansionTile", - "desc": [ - "【children】: Expanded content 【List】", - "【leading】: Leading component 【Widget】", - "【title】: Title component 【Widget】", - "【trailing】: Trailing component 【Widget】", - "【backgroundColor】: Background color 【Color】", - "【onExpansionChanged】: Collapse event 【Function(bool)】", - "【initiallyExpanded】: Whether initially expanded 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_es_ES.json deleted file mode 100644 index bcd411268..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "Panel Expandible", - "info": "Un panel expandible genérico que permite colocar componentes en áreas específicas. Al hacer clic, se pliega o despliega para mostrar u ocultar los componentes inferiores. Recibe eventos al plegarse.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ExpansionTile", - "desc": [ - "【children】: Contenido expandido 【List】", - "【leading】: Componente izquierdo del encabezado 【Widget】", - "【title】: Componente central del encabezado 【Widget】", - "【trailing】: Componente derecho del encabezado 【Widget】", - "【backgroundColor】: Color de fondo 【Color】", - "【onExpansionChanged】: Evento de plegado 【Function(bool)】", - "【initiallyExpanded】: Si está inicialmente expandido 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_fr_FR.json deleted file mode 100644 index 53c7262c8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "Tuile d'expansion", - "info": "Un panneau d'expansion générique qui peut placer des composants dans une partie spécifiée. Cliquez pour plier ou déplier les composants ci-dessous. Reçoit un événement lors du pliage.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'ExpansionTile", - "desc": [ - "【children】 : Contenu déplié 【List】", - "【leading】 : Composant gauche de la tête 【Widget】", - "【title】 : Composant central de la tête 【Widget】", - "【trailing】 : Composant droit de la tête 【Widget】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【onExpansionChanged】 : Événement de pliage 【Function(bool)】", - "【initiallyExpanded】 : Déplié initialement 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_it_IT.json deleted file mode 100644 index 7c14f9bec..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "Piastrella Espandibile", - "info": "Un pannello espandibile generico, che può posizionare componenti in aree specifiche. Cliccando, si espande o collassa per mostrare o nascondere i componenti sottostanti. Riceve eventi quando viene collassato.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di ExpansionTile", - "desc": [ - "【children】 : Contenuto espanso 【List】", - "【leading】 : Componente sinistro dell'intestazione 【Widget】", - "【title】 : Componente centrale dell'intestazione 【Widget】", - "【trailing】 : Componente destro dell'intestazione 【Widget】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【onExpansionChanged】 : Evento di collassamento 【Function(bool)】", - "【initiallyExpanded】 : Se espanso inizialmente 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ja_JP.json deleted file mode 100644 index 9dd2b3c30..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "展開タイル", - "info": "一般的な展開バーで、指定された部分にコンポーネントを配置でき、クリックすると下のコンポーネントを折りたたんで表示/非表示にします。折りたたみ時のイベントを受け取ります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpansionTileの基本的な使用", - "desc": [ - "【children】 : 展開内容 【List】", - "【leading】 : ヘッダー左コンポーネント 【Widget】", - "【title】 : ヘッダー中央コンポーネント 【Widget】", - "【trailing】 : ヘッダー右コンポーネント 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【onExpansionChanged】 : 折りたたみイベント 【Function(bool)】", - "【initiallyExpanded】 : 初期状態で展開されているか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ko_KR.json deleted file mode 100644 index ab1bf3326..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "확장 타일", - "info": "일반적인 확장 바, 지정된 부분에 컴포넌트를 배치할 수 있으며, 클릭 시 아래 컴포넌트를 접거나 펼칠 수 있습니다. 접힐 때 이벤트를 수신합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpansionTile 기본 사용", - "desc": [ - "【children】 : 확장 내용 【List】", - "【leading】 : 헤더 왼쪽 컴포넌트 【Widget】", - "【title】 : 헤더 중앙 컴포넌트 【Widget】", - "【trailing】 : 헤더 오른쪽 컴포넌트 【Widget】", - "【backgroundColor】 : 배경색 【Color】", - "【onExpansionChanged】 : 접힘 이벤트 【Function(bool)】", - "【initiallyExpanded】 : 초기 상태에서 펼쳐져 있는지 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_pt_PT.json deleted file mode 100644 index 5ad3db3c0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "Azulejo de Expansão", - "info": "Uma barra de expansão genérica que pode ser usada para colocar componentes em uma área especificada. Clicar nela irá expandir ou recolher os componentes abaixo. Recebe eventos quando recolhida.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ExpansionTile", - "desc": [ - "【children】: Conteúdo expandido 【List】", - "【leading】: Componente à esquerda do cabeçalho 【Widget】", - "【title】: Componente no centro do cabeçalho 【Widget】", - "【trailing】: Componente à direita do cabeçalho 【Widget】", - "【backgroundColor】: Cor de fundo 【Color】", - "【onExpansionChanged】: Evento de recolhimento 【Function(bool)】", - "【initiallyExpanded】: Expandido inicialmente 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ru_RU.json deleted file mode 100644 index 92d07803f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "Раскрывающаяся плитка", - "info": "Универсальная раскрывающаяся панель, в которой можно разместить компоненты в указанной области. При нажатии сворачивает или раскрывает компоненты снизу. Получает события при сворачивании.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ExpansionTile", - "desc": [ - "【children】 : Раскрываемое содержимое 【List】", - "【leading】 : Компонент слева в заголовке 【Widget】", - "【title】 : Компонент в центре заголовка 【Widget】", - "【trailing】 : Компонент справа в заголовке 【Widget】", - "【backgroundColor】 : Цвет фона 【Color】", - "【onExpansionChanged】 : Событие сворачивания 【Function(bool)】", - "【initiallyExpanded】 : Раскрыт ли изначально 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_zh-CN.json deleted file mode 100644 index 8eca010f4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 52, - "name": "ExpansionTile", - "localName": "展开瓦片", - "info": "一个通用的展开栏,可在指定的部位安放组件,点击时会折叠显隐下方组件。接收折叠时事件。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ExpansionTile基本使用", - "desc": [ - "【children】 : 展开内容 【List】", - "【leading】 : 头左组件 【Widget】", - "【title】 : 头中组件 【Widget】", - "【trailing】 : 头尾组件 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【onExpansionChanged】 : 折叠事件 【Function(bool)】", - "【initiallyExpanded】 : 是否初始时展开 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/node1_base.dart deleted file mode 100644 index d3f0f8163..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ExpansionTile/node1_base.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/material.dart'; -import '../../StatelessWidget/RadioListTile/node1_base.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomExpansionTile extends StatefulWidget { - const CustomExpansionTile({Key? key}) : super(key: key); - - @override - _CustomExpansionTileState createState() => _CustomExpansionTileState(); -} - -class _CustomExpansionTileState extends State { - @override - Widget build(BuildContext context) { - return ExpansionTile( - leading: const Icon(Icons.star), - title: const Text("选择语言"), - backgroundColor: Colors.grey.withAlpha(6), - onExpansionChanged: (value) { - print('$value'); - }, - initiallyExpanded: false, - children: const[CustomRadioListTile()], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_de_DE.json deleted file mode 100644 index 54c851112..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_de_DE.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "Gefüllter Button", - "info": "Ein gefüllter Button, der den Material Design-Richtlinien entspricht, dessen Stil durch FilledButtonTheme festgelegt wird.", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Grundlegende Verwendung", - "desc": [ - "【child】 : Buttoninhalt 【Widget】", - "【onPressed】 : Klick-Ereignis 【VoidCallback】", - "【onHover】 : Hover-Ereignis 【ValueChanged? 】", - "【onLongPress】 : Langdruck-Ereignis 【VoidCallback?】", - "Der gefüllte Button ist visuell nur dem [FloatingActionButton] unterlegen und wird für wichtige, abschließende Aktionen wie Speichern, Sofort beitreten oder Bestätigen verwendet." - ] - }, - { - "file": "node2.dart", - "name": "Farbtonvariante", - "desc": [ - "FilledButton.tonal ist ein tonal gefüllter Button, der visuell zwischen [FilledButton] und [OutlinedButton] liegt und für Szenarien geeignet ist, die eine etwas stärkere Betonung als ein Konturbutton erfordern, aber eine niedrigere Priorität haben. Zum Beispiel der [Weiter] Button." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_en_US.json deleted file mode 100644 index 45d61d7b4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_en_US.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "Filled Button", - "info": "A filled button that conforms to Material Design, with styles set via FilledButtonTheme.", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Basic Usage", - "desc": [ - "【child】: Button content 【Widget】", - "【onPressed】: Click event 【VoidCallback】", - "【onHover】: Long press event 【ValueChanged? 】", - "【onLongPress】: Long press event 【VoidCallback?】", - "The filled button is visually second only to [FloatingActionButton] and is used for important, finalizing actions such as save, join now, or confirm." - ] - }, - { - "file": "node2.dart", - "name": "Tonal Variant", - "desc": [ - "FilledButton.tonal is a tonal filled button, visually between [FilledButton] and [OutlinedButton], suitable for scenarios requiring slightly stronger emphasis than an outlined button but with lower priority. For example, a [Next] button." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_es_ES.json deleted file mode 100644 index 969b6c361..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_es_ES.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "Botón Relleno", - "info": "Un botón relleno que cumple con Material Design, configurado a través de FilledButtonTheme.", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso Básico", - "desc": [ - "【child】 : Contenido del botón 【Widget】", - "【onPressed】 : Evento de clic 【VoidCallback】", - "【onHover】 : Evento de mantener presionado 【ValueChanged? 】", - "【onLongPress】 : Evento de mantener presionado 【VoidCallback?】", - "El botón relleno es visualmente inferior al [FloatingActionButton], y se utiliza para acciones importantes y finales, como: guardar, unirse ahora o confirmar." - ] - }, - { - "file": "node2.dart", - "name": "Variante Tonal", - "desc": [ - "FilledButton.tonal es un botón relleno tonal, visualmente entre [FilledButton] y [OutlinedButton], adecuado para escenarios que requieren un énfasis ligeramente mayor que el botón de contorno pero con menor prioridad. Por ejemplo, el botón [Siguiente]" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_fr_FR.json deleted file mode 100644 index e5cf563c1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_fr_FR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "Bouton rempli", - "info": "Un bouton rempli conforme au Material Design, configurable via FilledButtonTheme.", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation de base", - "desc": [ - "【child】 : Contenu du bouton 【Widget】", - "【onPressed】 : Événement de clic 【VoidCallback】", - "【onHover】 : Événement de survol 【ValueChanged? 】", - "【onLongPress】 : Événement de pression longue 【VoidCallback?】", - "Le bouton rempli est visuellement secondaire au [FloatingActionButton], utilisé pour des actions importantes et finales, comme : sauvegarder, rejoindre immédiatement ou confirmer." - ] - }, - { - "file": "node2.dart", - "name": "Variante tonale", - "desc": [ - "FilledButton.tonal est un bouton rempli tonal, visuellement entre [FilledButton] et [OutlinedButton], adapté pour des scénarios nécessitant une emphase légèrement plus forte que le bouton contour mais avec une priorité moindre. Par exemple, le bouton [Suivant]" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_it_IT.json deleted file mode 100644 index 065eda6b4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_it_IT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "Pulsante Riempito", - "info": "Un pulsante conforme a Material Design che utilizza FilledButtonTheme per impostare lo stile del pulsante.", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso di Base", - "desc": [ - "【child】 : Contenuto del pulsante 【Widget】", - "【onPressed】 : Evento di clic 【VoidCallback】", - "【onHover】 : Evento di pressione prolungata 【ValueChanged? 】", - "【onLongPress】 : Evento di pressione prolungata 【VoidCallback?】", - "Il pulsante riempito è visivamente secondario solo a [FloatingActionButton] e viene utilizzato per operazioni importanti e finali del flusso, come: salvare, unirsi immediatamente o confermare." - ] - }, - { - "file": "node2.dart", - "name": "Variante Tonale", - "desc": [ - "FilledButton.tonal è un pulsante riempito tonale, visivamente intermedio tra [FilledButton] e [OutlinedButton], adatto per scenari che richiedono un'enfasi leggermente maggiore rispetto ai pulsanti contornati ma con priorità inferiore. Ad esempio il pulsante [Avanti]" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ja_JP.json deleted file mode 100644 index cc03a205a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ja_JP.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "塗りつぶしボタン", - "info": "Material Designに準拠した塗りつぶしボタンで、FilledButtonThemeを使用してボタンのスタイルを設定します。", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "基本使用", - "desc": [ - "【child】 : ボタンの内容 【Widget】", - "【onPressed】 : クリックイベント 【VoidCallback】", - "【onHover】 : 長押しイベント 【ValueChanged? 】", - "【onLongPress】 : 長押しイベント 【VoidCallback?】", - "塗りつぶしボタンは視覚的に [FloatingActionButton] に次ぐもので、重要な、最終的なプロセスを完了する操作に使用されます。例えば、保存、即時参加、確認などです。" - ] - }, - { - "file": "node2.dart", - "name": "トーンバリアント", - "desc": [ - "FilledButton.tonal はトーン塗りつぶしボタンで、視覚的に [FilledButton] と [OutlinedButton] の中間に位置し、輪郭ボタンよりもやや強い強調が必要だが優先度が低いシナリオに適しています。例えば [次へ] ボタン" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ko_KR.json deleted file mode 100644 index ac83fa5ac..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ko_KR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "채움 버튼", - "info": "Material Design을 준수하는 채움 버튼으로, FilledButtonTheme을 통해 버튼 스타일을 설정합니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "기본 사용", - "desc": [ - "【child】 : 버튼 내용 【Widget】", - "【onPressed】 : 클릭 이벤트 【VoidCallback】", - "【onHover】 : 롱프레스 이벤트 【ValueChanged? 】", - "【onLongPress】 : 롱프레스 이벤트 【VoidCallback?】", - "채움 버튼은 시각적으로 [FloatingActionButton] 다음으로 중요하며, 중요한 최종 프로세스 작업에 사용됩니다. 예: 저장, 즉시 가입 또는 확인." - ] - }, - { - "file": "node2.dart", - "name": "톤 변형", - "desc": [ - "FilledButton.tonal은 톤 채움 버튼으로, 시각적으로 [FilledButton]과 [OutlinedButton] 사이에 위치하며, 윤곽 버튼보다 약간 강조가 필요하지만 우선순위가 낮은 시나리오에 적합합니다. 예: [다음] 버튼" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_pt_PT.json deleted file mode 100644 index 845de8195..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_pt_PT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "Botão Preenchido", - "info": "Um botão preenchido que segue o Material Design, com o estilo definido pelo FilledButtonTheme.", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso Básico", - "desc": [ - "【child】 : Conteúdo do botão 【Widget】", - "【onPressed】 : Evento de clique 【VoidCallback】", - "【onHover】 : Evento de passar o mouse 【ValueChanged? 】", - "【onLongPress】 : Evento de pressionar e segurar 【VoidCallback?】", - "O botão preenchido é visualmente inferior apenas ao [FloatingActionButton], sendo usado para ações importantes e finais do processo, como: salvar, juntar-se imediatamente ou confirmar." - ] - }, - { - "file": "node2.dart", - "name": "Variante de Tom", - "desc": [ - "FilledButton.tonal é um botão preenchido com tom, visualmente entre [FilledButton] e [OutlinedButton], adequado para cenários que precisam de um pouco mais de ênfase do que um botão de contorno, mas com menor prioridade. Por exemplo, o botão [Próximo]" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ru_RU.json deleted file mode 100644 index ef07de342..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_ru_RU.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "Заполненная кнопка", - "info": "Кнопка, соответствующая Material Design, стиль которой задается через FilledButtonTheme.", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Основное использование", - "desc": [ - "【child】 : Содержимое кнопки 【Widget】", - "【onPressed】 : Событие нажатия 【VoidCallback】", - "【onHover】 : Событие наведения 【ValueChanged? 】", - "【onLongPress】 : Событие долгого нажатия 【VoidCallback?】", - "Заполненная кнопка визуально уступает только [FloatingActionButton] и используется для важных, завершающих действий, таких как: сохранение, немедленное присоединение или подтверждение." - ] - }, - { - "file": "node2.dart", - "name": "Тональный вариант", - "desc": [ - "FilledButton.tonal - это тональная заполненная кнопка, визуально находящаяся между [FilledButton] и [OutlinedButton], подходит для сценариев, где требуется немного больше акцента, чем у контурной кнопки, но с более низким приоритетом. Например, кнопка [Далее]." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_zh-CN.json deleted file mode 100644 index ececec5a3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/desc_zh-CN.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 359, - "name": "FilledButton", - "localName": "填充按钮", - "info": "一个符合 Material Design 的填充按钮,通过 FilledButtonTheme 设置按钮样式。", - "lever": 4, - "family": 1, - "linkIds": [ - 354, - 355, - 353 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "基本使用", - "desc": [ - "【child】 : 按钮内容 【Widget】", - "【onPressed】 : 点击事件 【VoidCallback】", - "【onHover】 : 长按事件 【ValueChanged? 】", - "【onLongPress】 : 长按事件 【VoidCallback?】", - "填充按钮在视觉上仅次于 [FloatingActionButton],应用于重要的、最终完成流程的操作,例如: 保存、立即加入 或 确认。" - ] - }, - { - "file": "node2.dart", - "name": "色调变体", - "desc": [ - "FilledButton.tonal 是色调填充按钮,视觉上介于 [FilledButton] 和 [OutlinedButton] 之间,适用于需要比轮廓按钮稍强一些的强调但优先级较低的场景。例如 [下一步] 按钮 " - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/node1.dart deleted file mode 100644 index d083f55d9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/node1.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter/material.dart'; - -class FilledButtonDemo1 extends StatelessWidget { - const FilledButtonDemo1({super.key}); - - @override - Widget build(BuildContext context) { - return Wrap(spacing: 10, children: [ - FilledButton( - onPressed: () {}, - child: const Text('FilledButton'), - ), - const FilledButton( - onPressed: null, - child: Text('Disabled'), - ), - ]); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/node2.dart b/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/node2.dart deleted file mode 100644 index 2d8d078c9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FilledButton/node2.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; - -class FilledButtonDemo2 extends StatelessWidget { - const FilledButtonDemo2({super.key}); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: [ - FilledButton.tonal( - onPressed: () {}, - child: const Text('FilledButton'), - ), - const FilledButton.tonal( - onPressed: null, - child: Text('Disabled'), - ), - ]); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_de_DE.json deleted file mode 100644 index 60ccb4690..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_de_DE.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "Fokus-Komponente", - "info": "Eine Komponente zur Verwaltung von [FocusNode], die es ermöglicht, den Tastaturfokus auf dieses Widget und seine Unterbaumknoten zu setzen.", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "FocusNode Fokussierung und Defokussierung", - "desc": [ - "【focusNode】 : Fokus 【FocusNode?】", - "【onFocusChange】 : Fokusänderungsüberwachung 【ValueChanged?】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "Automatische Fokussierung", - "desc": [ - "【autofocus】 : Automatische Fokussierung 【bool】", - "Das Flutter-Framework verfügt über integrierte Tastenkombinationen für den Fokuswechsel, z. B. ← und → für die horizontale Bildlaufleiste, um den Fokus auf das vorherige bzw. nächste Element zu setzen. Die Tab-Taste kann den Fokus auf den nächsten Focus-Knoten setzen." - ] - }, - { - "file": "node3.dart", - "name": "Tastaturereignis-Rückruf", - "desc": [ - "【onKeyEvent】 : Tastaturereignis-Rückruf 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_en_US.json deleted file mode 100644 index ba989bf85..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_en_US.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "Focus Component", - "info": "A component that manages [FocusNode], used to allow keyboard focus to be assigned to this widget and its subtree nodes.", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "FocusNode Focus and Blur", - "desc": [ - "【focusNode】 : Focus 【FocusNode?】", - "【onFocusChange】 : Focus change listener 【ValueChanged?】", - "【child】 : Child widget 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "Auto Focus", - "desc": [ - "【autofocus】 : Whether to auto focus 【bool】", - "The Flutter framework has built-in shortcuts for focus switching, such as ← and → for horizontal sliding lists to focus on the previous and next items respectively. The Tab key can focus on the next Focus node." - ] - }, - { - "file": "node3.dart", - "name": "Keyboard Event Callback", - "desc": [ - "【onKeyEvent】 : Keyboard event callback 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_es_ES.json deleted file mode 100644 index cddd075db..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_es_ES.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "Componente de enfoque", - "info": "Un componente que gestiona [FocusNode], utilizado para permitir que el enfoque del teclado se asigne a este widget y a los nodos de su subárbol.", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Enfoque y desenfoque de FocusNode", - "desc": [ - "【focusNode】 : enfoque 【FocusNode?】", - "【onFocusChange】 : escucha de cambios de enfoque 【ValueChanged?】", - "【child】 : componente hijo 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "Enfoque automático", - "desc": [ - "【autofocus】 : si se enfoca automáticamente 【bool】", - "El marco de Flutter incluye atajos de teclado para cambiar el enfoque, como deslizar horizontalmente la lista ←, → para enfocar el elemento anterior y posterior respectivamente. La tecla Tab puede enfocar el siguiente nodo Focus." - ] - }, - { - "file": "node3.dart", - "name": "Devolución de llamada de eventos de teclado", - "desc": [ - "【onKeyEvent】 : devolución de llamada de eventos de teclado 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_fr_FR.json deleted file mode 100644 index 4e14496c3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_fr_FR.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "Composant de mise au point", - "info": "Un composant qui gère [FocusNode], utilisé pour permettre au focus clavier d'être attribué à ce widget et à ses nœuds enfants.", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Mise au point et perte de focus de FocusNode", - "desc": [ - "【focusNode】 : focus 【FocusNode?】", - "【onFocusChange】 : écouteur de changement de focus 【ValueChanged?】", - "【child】 : composant enfant 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "Mise au point automatique", - "desc": [ - "【autofocus】 : mise au point automatique 【bool】", - "Le framework Flutter intègre des raccourcis clavier pour changer le focus, par exemple, dans une liste défilable horizontalement, ← et → permettent de se concentrer respectivement sur l'élément précédent et suivant. La touche Tab permet de se concentrer sur le nœud Focus suivant" - ] - }, - { - "file": "node3.dart", - "name": "Rappel d'événement clavier", - "desc": [ - "【onKeyEvent】 : rappel d'événement clavier 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_it_IT.json deleted file mode 100644 index f44e45b2d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_it_IT.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "Componente Focus", - "info": "Un componente che gestisce [FocusNode], utilizzato per consentire che il focus della tastiera venga assegnato a questo widget e ai suoi nodi secondari.", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "FocusNode messa a fuoco e perdita di fuoco", - "desc": [ - "【focusNode】 : focus 【FocusNode?】", - "【onFocusChange】 : listener per il cambio di focus 【ValueChanged?】", - "【child】 : componente figlio 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "Autofocus", - "desc": [ - "【autofocus】 : se mettere a fuoco automaticamente 【bool】", - "Il framework Flutter ha scorciatoie integrate per il cambio di focus, ad esempio in una lista scorrevole orizzontalmente ← e → mettono a fuoco rispettivamente l'elemento precedente e successivo. Il tasto Tab può mettere a fuoco il prossimo nodo Focus." - ] - }, - { - "file": "node3.dart", - "name": "Callback per eventi della tastiera", - "desc": [ - "【onKeyEvent】 : callback per eventi della tastiera 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ja_JP.json deleted file mode 100644 index 223fd4495..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ja_JP.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "フォーカスコンポーネント", - "info": "[FocusNode]を管理するコンポーネントで、キーボードフォーカスをこのウィジェットとそのサブツリーノードに与えることを可能にします。", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "FocusNode フォーカスとフォーカス解除", - "desc": [ - "【focusNode】 : フォーカス 【FocusNode?】", - "【onFocusChange】 : フォーカス変更リスナー 【ValueChanged?】", - "【child】 : 子コンポーネント 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "自動フォーカス", - "desc": [ - "【autofocus】 : 自動フォーカスするかどうか 【bool】", - "Flutterフレームワークには、フォーカス切り替えのショートカットキーが組み込まれており、例えば横方向にスクロールするリストでは ←、→ で前後の項目にフォーカスが移動します。Tabキーで次のFocusノードにフォーカスを移動できます" - ] - }, - { - "file": "node3.dart", - "name": "キーボードイベントコールバック", - "desc": [ - "【onKeyEvent】 : キーボードイベントコールバック 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ko_KR.json deleted file mode 100644 index e78e6542d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ko_KR.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "포커스 컴포넌트", - "info": "[FocusNode]를 관리하는 컴포넌트로, 키보드 포커스가 해당 위젯 및 하위 트리 노드에 부여될 수 있도록 합니다.", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "FocusNode 포커스와 포커스 해제", - "desc": [ - "【focusNode】 : 포커스 【FocusNode?】", - "【onFocusChange】 : 포커스 변화 리스너 【ValueChanged?】", - "【child】 : 자식 컴포넌트 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "자동 포커스", - "desc": [ - "【autofocus】 : 자동 포커스 여부 【bool】", - "Flutter 프레임워크는 포커스 전환을 위한 단축키를 내장하고 있습니다. 예를 들어, 가로 스크롤 목록에서 ←, →는 각각 이전 항목과 다음 항목에 포커스를 줍니다. Tab 키는 다음 Focus 노드에 포커스를 줄 수 있습니다." - ] - }, - { - "file": "node3.dart", - "name": "키보드 이벤트 콜백", - "desc": [ - "【onKeyEvent】 : 키보드 이벤트 콜백 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_pt_PT.json deleted file mode 100644 index 840780c0c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_pt_PT.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "Componente de Foco", - "info": "Um componente que gerencia [FocusNode], usado para permitir que o foco do teclado seja atribuído a este widget e aos nós da sua subárvore.", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Foco e Desfoco do FocusNode", - "desc": [ - "【focusNode】 : Foco 【FocusNode?】", - "【onFocusChange】 : Monitoramento de mudança de foco 【ValueChanged?】", - "【child】 : Componente filho 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "Foco Automático", - "desc": [ - "【autofocus】 : Foco automático 【bool】", - "O framework Flutter possui atalhos de teclado embutidos para alternar o foco, como ← e → em listas de deslizamento horizontal para focar o item anterior e o próximo. A tecla Tab pode focar o próximo nó Focus." - ] - }, - { - "file": "node3.dart", - "name": "Callback de Evento de Teclado", - "desc": [ - "【onKeyEvent】 : Callback de evento de teclado 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ru_RU.json deleted file mode 100644 index 00506af53..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_ru_RU.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "Компонент фокуса", - "info": "Компонент, управляющий [FocusNode], который позволяет клавиатурному фокусу быть назначенным на этот виджет и его дочерние узлы.", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Фокусировка и потер фокуса FocusNode", - "desc": [ - "【focusNode】 : фокус 【FocusNode?】", - "【onFocusChange】 : отслеживание изменений фокуса 【ValueChanged?】", - "【child】 : дочерний компонент 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "Автоматическая фокусировка", - "desc": [ - "【autofocus】 : автоматическая фокусировка 【bool】", - "Фреймворк Flutter имеет встроенные сочетания клавиш для переключения фокуса, например, ← и → для горизонтального списка позволяют фокусироваться на предыдущем и следующем элементе. Клавиша Tab позволяет фокусироваться на следующем узле Focus." - ] - }, - { - "file": "node3.dart", - "name": "Обратный вызов событий клавиатуры", - "desc": [ - "【onKeyEvent】 : обратный вызов событий клавиатуры 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_zh-CN.json deleted file mode 100644 index accac2338..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/desc_zh-CN.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "id": 282, - "name": "Focus", - "localName": "焦点组件", - "info": "一个管理 [FocusNode] 的组件,用于允许键盘焦点被赋予该小部件及其子树节点。", - "lever": 5, - "family": 1, - "linkIds": [ - 283, - 284 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "FocusNode 聚焦与失焦", - "desc": [ - "【focusNode】 : 焦点 【FocusNode?】", - "【onFocusChange】 : 焦点变化监听 【ValueChanged?】", - "【child】 : 子组件 【Widget】" - ] - }, - { - "file": "node2.dart", - "name": "自动聚焦", - "desc": [ - "【autofocus】 : 是否自动聚焦 【bool】", - "Flutter 框架内置了焦点切换的快捷键,比如横向滑动的列表 ←、→ 分别让前项和后项聚焦。Tab 键可以让下一个 Focus 节点聚焦" - ] - }, - { - "file": "node3.dart", - "name": "键盘事件回调", - "desc": [ - "【onKeyEvent】 : 键盘事件回调 【FocusOnKeyEventCallback?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/Focus/node1.dart deleted file mode 100644 index f78147801..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/node1.dart +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -class FocusDemo1 extends StatefulWidget { - const FocusDemo1({super.key}); - - @override - State createState() => _FocusDemo1State(); -} - -class _FocusDemo1State extends State { - final FocusNode _focusNode = FocusNode(); - - @override - void dispose() { - super.dispose(); - _focusNode.dispose(); - } - - @override - Widget build(BuildContext context) { - return Focus( - focusNode: _focusNode, - onFocusChange: _onFocusChange, - child: GestureDetector( - onTap: _toggleFocus, - child: _FocusBox(active: _focusNode.hasFocus), - ), - ); - } - - void _onFocusChange(bool value) { - setState(() {}); - } - - void _toggleFocus() { - if (_focusNode.hasFocus) { - _focusNode.unfocus(); - } else { - _focusNode.requestFocus(); - } - } -} - -class _FocusBox extends StatelessWidget { - final bool active; - - const _FocusBox({super.key, required this.active}); - - @override - Widget build(BuildContext context) { - Color color = active ? Colors.blue : Colors.white; - Color borderColor = active ? Colors.lightBlue : Colors.grey; - Color? textColor = active ? Colors.white : null; - String text = active ? "点击失去焦点" : '点击获取焦点'; - return Container( - width: 120, - height: 60, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - border: Border.all(color: borderColor), - color: color, - ), - alignment: Alignment.center, - child: Text(text, style: TextStyle(color: textColor)), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/node2.dart b/modules/widget_system/widgets/lib/StatefulWidget/Focus/node2.dart deleted file mode 100644 index da663acc5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/node2.dart +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -import 'package:flutter/material.dart'; - -/// Flutter code sample for [Focus]. - -void main() => runApp(const FocusExampleApp()); - -class FocusExampleApp extends StatelessWidget { - const FocusExampleApp({super.key}); - - @override - Widget build(BuildContext context) { - return const MaterialApp( - home: FocusDemo2(), - ); - } -} - -class _FocusTiled extends StatelessWidget { - const _FocusTiled( - this.data, { - super.key, - required this.autofocus, - }); - - final String data; - final bool autofocus; - - @override - Widget build(BuildContext context) { - return Focus( - autofocus: autofocus, - child: Builder(builder: _buildTiled), - ); - } - - Widget _buildTiled(BuildContext context) { - FocusNode node = Focus.of(context); - bool focus = node.hasFocus; - Color color = focus ? Colors.blue : Colors.white; - Color? textColor = focus ? Colors.white : null; - return GestureDetector( - onTap: node.requestFocus, - child: Container( - padding: const EdgeInsets.all(8.0), - alignment: Alignment.center, - color: color, - child: Text(data, style: TextStyle(color: textColor)), - ), - ); - } -} - -class FocusDemo2 extends StatelessWidget { - const FocusDemo2({super.key}); - - @override - Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.symmetric(horizontal: 24), - height: 56, - child: ListView.builder( - scrollDirection: Axis.horizontal, - itemBuilder: (_, int index) => _FocusTiled( - 'Item $index', - autofocus: index == 0, - ), - itemCount: 50, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Focus/node3.dart b/modules/widget_system/widgets/lib/StatefulWidget/Focus/node3.dart deleted file mode 100644 index bbba3bef2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Focus/node3.dart +++ /dev/null @@ -1,129 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -class FocusDemo3 extends StatefulWidget { - const FocusDemo3({super.key}); - - @override - State createState() => _FocusDemo3State(); -} - -class _FocusDemo3State extends State { - FocusNode focusNode = FocusNode(); - List events = []; - ScrollController _ctrl = ScrollController(); - - @override - void initState() { - focusNode.addListener(_onFocusChange); - super.initState(); - } - - @override - void dispose() { - focusNode.removeListener(_onFocusChange); - focusNode.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Center( - child: TapRegion( - onTapInside: (_) => focusNode.requestFocus(), - onTapOutside: (_) => focusNode.unfocus(), - child: Focus( - autofocus: true, - focusNode: focusNode, - onKeyEvent: _onKeyEvent, - child: _buildDisplay(), - ), - ), - ); - } - - KeyEventResult _onKeyEvent(FocusNode node,KeyEvent value) { - events.add(value); - setState(() {}); - _scrollToEnd(); - print('${value.runtimeType}:${value.logicalKey.keyLabel}'); - return KeyEventResult.ignored; - } - - void _onFocusChange() { - if (!focusNode.hasFocus) { - events.clear(); - } - setState(() {}); - } - - void _scrollToEnd() async { - if (_ctrl.hasClients) { - await Future.delayed(Duration(milliseconds: 200)); - _ctrl.animateTo(_ctrl.position.maxScrollExtent, - duration: Duration(milliseconds: 100), curve: Curves.ease); - } - } - - Widget _buildDisplay() { - Color color = focusNode.hasFocus ? Colors.blue : Colors.grey; - - return Container( - decoration: BoxDecoration(border: Border.all(color: color)), - width: 460, - padding: EdgeInsets.symmetric(horizontal: 12), - alignment: Alignment.center, - height: 60, - child: events.isNotEmpty - ? SizedBox( - width: 460, - height: 60, - child: ListView.builder( - controller: _ctrl, - itemCount: events.length, - scrollDirection: Axis.horizontal, - itemBuilder: (_, index) => _KeyBoardBox( - event: events[index], - )), - ) - : Text( - focusNode.hasFocus ? '键盘输入点东西吧' : '点击我获取焦点', - style: TextStyle(color: color), - ), - ); - } -} - -class _KeyBoardBox extends StatelessWidget { - final KeyEvent event; - - const _KeyBoardBox({super.key, required this.event}); - - @override - Widget build(BuildContext context) { - Color? color; - if (event is KeyDownEvent) { - color = Colors.blue; - } - if (event is KeyRepeatEvent) { - color = Colors.green; - } - if (event is KeyUpEvent) { - color = Colors.grey; - } - return Center( - child: Container( - margin: EdgeInsets.only(right: 4), - width: 32, - height: 32, - decoration: BoxDecoration(color: color), - alignment: Alignment.center, - child: Text( - event.logicalKey.keyLabel, - textAlign: TextAlign.center, - style: TextStyle(color: Colors.white, fontSize: 8, height: 1), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_de_DE.json deleted file mode 100644 index 73eda55ce..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "Formular-Komponente", - "info": "Die Formular-Komponente kann Rückrufe für Änderungen der darunter liegenden FormField-Komponenten empfangen, den Seitenrückruf über onWillPop abfangen und Formularfelder über FormState speichern oder validieren.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Form", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onChanged】 : Rückruf bei Formularänderungen 【VoidCallback】", - "【onWillPop】 : Rückruf bei Rückkehr 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_en_US.json deleted file mode 100644 index f2e847d1d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "Form Component", - "info": "Form component, which can receive change callbacks from FormField components below it, intercept page returns through onWillPop, and save or validate form fields through FormState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Form", - "desc": [ - "【child】 : Child component 【Widget】", - "【onChanged】 : Form change callback 【VoidCallback】", - "【onWillPop】 : Return callback 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_es_ES.json deleted file mode 100644 index dfcab4d01..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "Componente de formulario", - "info": "Componente de formulario que puede recibir devoluciones de llamada de cambios de los componentes FormField debajo de él, interceptar el retorno de la página a través de onWillPop, y guardar o validar los campos del formulario a través de FormState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Form", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onChanged】 : Devolución de llamada de cambio de formulario 【VoidCallback】", - "【onWillPop】 : Devolución de llamada de retorno 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_fr_FR.json deleted file mode 100644 index 0ac4e0dbc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "Composant de formulaire", - "info": "Le composant de formulaire peut recevoir les rappels de changement des composants FormField qui lui sont associés, intercepter le retour de la page via onWillPop, et enregistrer ou valider les champs du formulaire via FormState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Form", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onChanged】 : Rappel de changement de formulaire 【VoidCallback】", - "【onWillPop】 : Rappel de retour 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_it_IT.json deleted file mode 100644 index cdc73cfe4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "Componente modulo", - "info": "Il componente modulo può ricevere callback di modifica dai componenti FormField sottostanti, intercetta il ritorno alla pagina tramite onWillPop e consente di salvare o convalidare i campi del modulo tramite FormState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Form", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onChanged】 : Callback per le modifiche del modulo 【VoidCallback】", - "【onWillPop】 : Callback di ritorno 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ja_JP.json deleted file mode 100644 index f7190629a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "フォームコンポーネント", - "info": "フォームコンポーネントは、その下のFormFieldコンポーネントの変更コールバックを受け取ることができ、onWillPopでページの戻りをインターセプトし、FormStateでフォームフィールドを保存または検証することができます。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Formの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onChanged】 : フォーム変更コールバック 【VoidCallback】", - "【onWillPop】 : 戻りコールバック 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ko_KR.json deleted file mode 100644 index dd14d454a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "폼 컴포넌트", - "info": "폼 컴포넌트는 하위 FormField 컴포넌트의 변경 콜백을 받을 수 있으며, onWillPop을 통해 페이지 반환을 가로채고, FormState를 통해 폼 필드를 저장하거나 검증할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Form 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【onChanged】 : 폼 변경 콜백 【VoidCallback】", - "【onWillPop】 : 반환 콜백 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_pt_PT.json deleted file mode 100644 index 679d3393c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "Componente de Formulário", - "info": "Componente de formulário, pode receber retornos de chamada de alterações dos componentes FormField abaixo dele, interceptar o retorno da página através de onWillPop, e salvar ou validar os campos do formulário através de FormState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Form", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onChanged】 : Retorno de chamada de alteração do formulário 【VoidCallback】", - "【onWillPop】 : Retorno de chamada de retorno 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ru_RU.json deleted file mode 100644 index 58c176a6c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "Компонент формы", - "info": "Компонент формы, который может получать обратные вызовы изменений от компонентов FormField, перехватывать возврат на страницу через onWillPop, а также сохранять или проверять поля формы через FormState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Form", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onChanged】 : Обратный вызов изменения формы 【VoidCallback】", - "【onWillPop】 : Обратный вызов возврата 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_zh-CN.json deleted file mode 100644 index 18d129e66..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 198, - "name": "Form", - "localName": "表单组件", - "info": "表单组件,可以接收其下的FormField组件的变化回调,通过onWillPop拦截页面返回,通过FormState可对表单字段进行保存或校验。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Form基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onChanged】 : 表单变化回调 【VoidCallback】", - "【onWillPop】 : 返回回调 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Form/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Form/node1_base.dart deleted file mode 100644 index 22d56bd80..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Form/node1_base.dart +++ /dev/null @@ -1,105 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomForm extends StatefulWidget { - const CustomForm({Key? key}) : super(key: key); - - @override - _CustomFormState createState() => _CustomFormState(); -} - -class _CustomFormState extends State { - final GlobalKey _formKey = GlobalKey(); - - @override - Widget build(BuildContext context) { - return Form( - onWillPop: () => _willPop(context), - key: _formKey, - onChanged: () { - print('Form---onChanged'); - }, - child: - Stack( - alignment: Alignment.centerRight, - children: [ - SizedBox( - width: 350, - child: UnconstrainedBox( - child: SizedBox( - width: 200, - height: 70, - child: TextFormField( - style: const TextStyle(textBaseline: TextBaseline.alphabetic), - decoration: const InputDecoration( - border: OutlineInputBorder(), - labelText: 'username', - ), - validator: _validateUsername, - ), - ), - ), - ), - Positioned( - top: 0, right: 0, child: _buildSubmitButton(context)), - ], - ), - ); - } - - String? _validateUsername(value) { - if (value.isEmpty) { - return '用户名不能为空'; - } - return null; - } - - Widget _buildSubmitButton(BuildContext context) { - return ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - ), - onPressed: _onSubmit, - child: const Icon( - Icons.check, - color: Colors.white, - ), - ); - } - - void _onSubmit(){ - if(_formKey.currentState==null) return; - if (_formKey.currentState!.validate()) { - FocusScope.of(context).requestFocus(FocusNode()); - Navigator.of(context).pop(); - } - } - - Future _willPop(context) async { - return await showDialog( - context: context, - builder: (context) => AlertDialog( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10))), - title: const Text('提示'), - content: const Text('你确定要离开此页吗?'), - actions: [ - ElevatedButton( - onPressed: () => Navigator.of(context).pop(true), - child: const Text('确定'), - ), - ElevatedButton( - onPressed: () => Navigator.of(context).pop(false), - child: const Text('取消'), - ), - ], - ), - ) ?? - false; - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_de_DE.json deleted file mode 100644 index 40fa20bc3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "Formularfeld", - "info": "Ein Formularfeld, das in der Form-Komponente verwendet werden muss, enthält ein Feld des generischen Typs T als Zustandsvariable. Aktualisierungen und Validierungen des Felds lösen entsprechende Rückrufe aus.", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in FormField", - "desc": [ - "【builder】 : Inhaltsersteller 【FormFieldBuilder】", - "【initialValue】 : Anfangswert 【T】", - "【validator】 : Validierungsfunktion 【FormFieldValidator 】", - "【enabled】 : Ist aktiviert 【bool】", - "【onSaved】 : Rückruf beim Speichern des Formulars 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_en_US.json deleted file mode 100644 index c4b8578a3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "Form Field", - "info": "A form field that needs to be used within the Form component, containing a field of generic type T as the state. Updates and validations of the field will trigger corresponding callbacks.", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FormField Introduction", - "desc": [ - "【builder】 : Content builder 【FormFieldBuilder】", - "【initialValue】 : Initial value 【T】", - "【validator】 : Validation function 【FormFieldValidator】", - "【enabled】 : Whether it is enabled 【bool】", - "【onSaved】 : Callback when the form is saved 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_es_ES.json deleted file mode 100644 index b5f3f7847..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "Campo de formulario", - "info": "Un campo de formulario que debe usarse en el componente Form, contiene un campo de tipo genérico T como estado, y las actualizaciones y validaciones del campo activarán las devoluciones de llamada correspondientes.", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a FormField", - "desc": [ - "【builder】 : Constructor de contenido 【FormFieldBuilder】", - "【initialValue】 : Valor inicial 【T】", - "【validator】 : Función de validación 【FormFieldValidator 】", - "【enabled】 : Si está habilitado 【bool】", - "【onSaved】 : Devolución de llamada al guardar el formulario 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_fr_FR.json deleted file mode 100644 index 849cbfd55..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "Champ de formulaire", - "info": "Un champ de formulaire, à utiliser dans le composant Form, contenant un champ de type générique T comme état, les mises à jour et les validations du champ déclenchent des rappels correspondants.", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à FormField", - "desc": [ - "【builder】 : Constructeur de contenu 【FormFieldBuilder】", - "【initialValue】 : Valeur initiale 【T】", - "【validator】 : Fonction de validation 【FormFieldValidator 】", - "【enabled】 : Est activé 【bool】", - "【onSaved】 : Rappel lors de la sauvegarde du formulaire 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_it_IT.json deleted file mode 100644 index 83bb81b49..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "Campo del modulo", - "info": "Un campo del modulo, deve essere utilizzato nel componente Form, contiene un campo di tipo generico T come stato, gli aggiornamenti e le validazioni del campo attivano i rispettivi callback.", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a FormField", - "desc": [ - "【builder】 : Costruttore del contenuto 【FormFieldBuilder】", - "【initialValue】 : Valore iniziale 【T】", - "【validator】 : Funzione di validazione 【FormFieldValidator 】", - "【enabled】 : Se è abilitato 【bool】", - "【onSaved】 : Callback quando il modulo viene salvato 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ja_JP.json deleted file mode 100644 index cf65e35fa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "フォームフィールド", - "info": "フォームフィールドは、Formコンポーネント内で使用する必要があり、ジェネリック型Tのフィールドを状態量として含みます。フィールドの更新と検証に応じて、対応するコールバックがトリガーされます。", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FormField 紹介", - "desc": [ - "【builder】 : 内容ビルダー 【FormFieldBuilder】", - "【initialValue】 : 初期値 【T】", - "【validator】 : 検証関数 【FormFieldValidator 】", - "【enabled】 : 有効かどうか 【bool】", - "【onSaved】 : フォーム保存時のコールバック 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ko_KR.json deleted file mode 100644 index 28777a151..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "폼 필드", - "info": "폼 필드는 Form 컴포넌트 내에서 사용되며, 상태량으로 제네릭 T의 필드를 포함합니다. 필드의 업데이트 및 검증에 따라 해당 콜백이 트리거됩니다.", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FormField 소개", - "desc": [ - "【builder】 : 콘텐츠 빌더 【FormFieldBuilder】", - "【initialValue】 : 초기값 【T】", - "【validator】 : 검증 함수 【FormFieldValidator 】", - "【enabled】 : 유효 여부 【bool】", - "【onSaved】 : 폼 저장 시 콜백 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_pt_PT.json deleted file mode 100644 index cf1bcc27b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "Campo de Formulário", - "info": "Um campo de formulário, que precisa ser usado no componente Form, contém um campo do tipo genérico T como estado, e as atualizações e validações do campo acionam callbacks correspondentes.", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao FormField", - "desc": [ - "【builder】 : Construtor de conteúdo 【FormFieldBuilder】", - "【initialValue】 : Valor inicial 【T】", - "【validator】 : Função de validação 【FormFieldValidator 】", - "【enabled】 : Se está ativo 【bool】", - "【onSaved】 : Callback ao salvar o formulário 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ru_RU.json deleted file mode 100644 index 95155cf13..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "Поле формы", - "info": "Поле формы, которое должно использоваться в компоненте Form, содержит поле типа T в качестве состояния. Обновление и проверка поля вызывают соответствующие обратные вызовы.", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в FormField", - "desc": [ - "【builder】 : Конструктор содержимого 【FormFieldBuilder】", - "【initialValue】 : Начальное значение 【T】", - "【validator】 : Функция проверки 【FormFieldValidator 】", - "【enabled】 : Активно ли поле 【bool】", - "【onSaved】 : Обратный вызов при сохранении формы 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_zh-CN.json deleted file mode 100644 index f1925f244..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 222, - "name": "FormField", - "localName": "表单字段", - "info": "一个表单字段,需要在 Form 组件中使用,内含泛型 T 的字段作为状态量,对根据字段的更新和验证会触发相应回调。", - "lever": 2, - "family": 1, - "linkIds": [ - 198, - 199, - 223 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FormField 介绍", - "desc": [ - "【builder】 : 内容构造器 【FormFieldBuilder】", - "【initialValue】 : 初始值 【T】", - "【validator】 : 验证函数 【FormFieldValidator 】", - "【enabled】 : 是否有效 【bool】", - "【onSaved】 : 表单save时回调 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FormField/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/FormField/node1_base.dart deleted file mode 100644 index 690432bef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FormField/node1_base.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class FormFieldDemo extends StatelessWidget { - const FormFieldDemo({Key? key}) : super(key: key); - - final String info = - 'FormField 代表表单中的一个字段,对于字符串类型的字段,框架中封装了 TextFormField 以便使用;下拉选择的字段,用 DropdownButtonFormField。' - '目前框架中 FormField 的子类也只有这两个。既然是表单字段,必然是要和 Form 组件一起使用。通过对 Form 添加 GlobalKey ,来获取 FormState 对象。' - '当 FormState 调用 save 方法时,所有的 FormField 都会触发 onSave 方法,当 FormState 调用 validate 方法时,所有的 FormField 都会触发 validate 方法。'; - - - @override - Widget build(BuildContext context) { - - - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_de_DE.json deleted file mode 100644 index 8e76619d8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "Asynchroner Konstruktor", - "info": "Kann ein Future-Objekt angeben, das den Status der asynchronen Ausführung überwachen kann und im Konstruktor unterschiedliche Schnittstellen basierend auf dem Status erstellt. Beachten Sie, dass das Future-Objekt nicht gleichzeitig mit dem FutureBuilder erstellt werden kann, da dies zu übermäßigen Aktualisierungen führen kann.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von FutureBuilder", - "desc": [ - "【builder】 : Unterkomponente 【AsyncWidgetBuilder】", - "【initialData】 : Initialdaten 【T】", - "【future】 : Asynchrone Aufgabe 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_en_US.json deleted file mode 100644 index ee2173e00..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "Asynchronous Constructor", - "info": "You can specify a Future object, which can monitor the status of asynchronous execution and build different interfaces in the constructor based on the status. Note that the Future object cannot be created simultaneously with the FutureBuilder, otherwise it may cause excessive refreshing.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of FutureBuilder", - "desc": [ - "【builder】 : Subcomponent 【AsyncWidgetBuilder】", - "【initialData】 : Initial Data 【T】", - "【future】 : Asynchronous Task 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_es_ES.json deleted file mode 100644 index 0d5746113..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "Constructor Asíncrono", - "info": "Puede especificar un objeto Future, que puede monitorear el estado de la ejecución asíncrona y construir diferentes interfaces en el constructor según el estado. Tenga en cuenta que este objeto Future no se puede crear simultáneamente con FutureBuilder, de lo contrario podría provocar una actualización excesiva.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de FutureBuilder", - "desc": [ - "【builder】 : Componente hijo 【AsyncWidgetBuilder】", - "【initialData】 : Datos iniciales 【T】", - "【future】 : Tarea asíncrona 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_fr_FR.json deleted file mode 100644 index b3e474445..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "Constructeur asynchrone", - "info": "Peut spécifier un objet Future, capable d'écouter l'état de l'exécution asynchrone et de construire des interfaces différentes dans le constructeur en fonction de l'état. Notez que cet objet Future ne peut pas être créé en même temps que FutureBuilder, sinon il pourrait y avoir un rafraîchissement excessif.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de FutureBuilder", - "desc": [ - "【builder】 : Composant enfant 【AsyncWidgetBuilder】", - "【initialData】 : Données initiales 【T】", - "【future】 : Tâche asynchrone 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_it_IT.json deleted file mode 100644 index f1f0e4533..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "Costruttore Asincrono", - "info": "Puoi specificare un oggetto Future, che può monitorare lo stato dell'esecuzione asincrona e costruire interfacce diverse nel costruttore in base allo stato. Nota che l'oggetto Future non può essere creato contemporaneamente al FutureBuilder, altrimenti potrebbe causare un aggiornamento eccessivo.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di FutureBuilder", - "desc": [ - "【builder】 : Componente Figlio 【AsyncWidgetBuilder】", - "【initialData】 : Dati Iniziali 【T】", - "【future】 : Attività Asincrona 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ja_JP.json deleted file mode 100644 index 80034fe85..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "非同期ビルダー", - "info": "Futureオブジェクトを指定することができ、非同期実行の状態を監視し、ビルダー内で状態に応じて異なるインターフェースを構築できます。このFutureオブジェクトはFutureBuilderと同時に作成しないでください。そうしないと、過剰なリフレッシュが発生する可能性があります。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FutureBuilderの基本使用", - "desc": [ - "【builder】 : 子コンポーネント 【AsyncWidgetBuilder】", - "【initialData】 : 初期データ 【T】", - "【future】 : 非同期タスク 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ko_KR.json deleted file mode 100644 index 0079d8979..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "비동기 빌더", - "info": "Future 객체를 지정할 수 있으며, 비동기 실행 상태를 모니터링하고 빌더에서 상태에 따라 다른 인터페이스를 구성할 수 있습니다. 주의할 점은 해당 Future 객체가 FutureBuilder와 동시에 생성되면 과도한 새로고침이 발생할 수 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FutureBuilder 기본 사용", - "desc": [ - "【builder】 : 자식 컴포넌트 【AsyncWidgetBuilder】", - "【initialData】 : 초기 데이터 【T】", - "【future】 : 비동기 작업 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_pt_PT.json deleted file mode 100644 index 3d3ae9636..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "Construtor Assíncrono", - "info": "Pode especificar um objeto Future, que pode monitorar o estado da execução assíncrona e construir diferentes interfaces no construtor com base no estado. Observe que o objeto Future não pode ser criado ao mesmo tempo que o FutureBuilder, caso contrário, pode ocorrer uma atualização excessiva.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do FutureBuilder", - "desc": [ - "【builder】 : Componente Filho 【AsyncWidgetBuilder】", - "【initialData】 : Dados Iniciais 【T】", - "【future】 : Tarefa Assíncrona 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ru_RU.json deleted file mode 100644 index b841a64e2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "Асинхронный конструктор", - "info": "Можно указать объект Future, который может отслеживать состояние асинхронного выполнения и строить различные интерфейсы в конструкторе в зависимости от состояния. Обратите внимание, что объект Future не может быть создан одновременно с FutureBuilder, иначе может произойти чрезмерное обновление.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование FutureBuilder", - "desc": [ - "【builder】 : Дочерний компонент 【AsyncWidgetBuilder】", - "【initialData】 : Начальные данные 【T】", - "【future】 : Асинхронная задача 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_zh-CN.json deleted file mode 100644 index 7e59a1726..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 172, - "name": "FutureBuilder", - "localName": "异步构造器", - "info": "可指定一个Future对象,能够监听异步执行的状态,并在构造器中根据状态构建不同的界面。注意该Future对象不能和FutureBuilder同时创建,否则可能过渡刷新。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FutureBuilder基本使用", - "desc": [ - "【builder】 : 子组件 【AsyncWidgetBuilder】", - "【initialData】 : 初始数据 【T】", - "【future】 : 异步任务 【Future】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/node1_base.dart deleted file mode 100644 index 8a5afea76..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/FutureBuilder/node1_base.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomFutureBuilder extends StatefulWidget { - const CustomFutureBuilder({Key? key}) : super(key: key); - - @override - _CustomFutureBuilderState createState() => _CustomFutureBuilderState(); -} - -class _CustomFutureBuilderState extends State { - late Future _future; - - @override - void initState() { - _future = loadData(); - super.initState(); - } - - @override - Widget build(BuildContext context) { - return FutureBuilder( - initialData: 'Load', - future: _future, - builder: (ctx, snap) { - if (snap.connectionState == ConnectionState.done) { - return Text('${snap.data}'); - } - if (snap.connectionState == ConnectionState.waiting) { - return const CircularProgressIndicator(); - } - if (snap.hasError) { - return const Text('Error'); - } - return Container(); - }); - } - - Future loadData() async { - await Future.delayed(const Duration(seconds: 2)); - return 'LoadeSuccess'; - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_de_DE.json deleted file mode 100644 index 61cd130da..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "Überlaufindikator", - "info": "Das Kind ist eine scrollbare Liste, die einen Indikatoreffekt anzeigt, wenn man oben und unten scrollt. Die Farbe kann angegeben werden, hat aber keine große Bedeutung. Es ist der Standard-Scrolleffekt für Android- und Fuchsia-Systeme.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung", - "desc": [ - "【showLeading】 : Ob der Kopf aktiv ist 【bool】", - "【showTrailing】 : Ob das Ende aktiv ist 【bool】", - "【axisDirection】 : Achsenrichtung 【AxisDirection】", - "【color】 : Farbe 【Color】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_en_US.json deleted file mode 100644 index f11284013..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "Scroll Boundary Indicator", - "info": "A child is a scrollable list, with an indicator effect when scrolling to the top and bottom. The color can be specified, but it is not very useful. It is the default scrolling effect for Android and Fuchsia systems.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage", - "desc": [ - "【showLeading】: Whether the header is active 【bool】", - "【showTrailing】: Whether the footer is active 【bool】", - "【axisDirection】: Axis direction 【AxisDirection】", - "【color】: Color 【Color】", - "【child】: Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_es_ES.json deleted file mode 100644 index 24fa19227..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "Indicador de desplazamiento fuera de límites", - "info": "El niño es una lista deslizable, el efecto indicador cuando se desliza hacia la parte superior e inferior, se puede especificar el color, no es muy útil. Es el efecto de deslizamiento predeterminado del sistema Android y Fuchsia.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico", - "desc": [ - "【showLeading】 : Si la cabeza es efectiva 【bool】", - "【showTrailing】 : Si la parte inferior es efectiva 【bool】", - "【axisDirection】 : Dirección del eje 【AxisDirection】", - "【color】 : Color 【Color】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_fr_FR.json deleted file mode 100644 index 3c75e0de2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "Indicateur de dépassement de défilement", - "info": "L'enfant est une liste déroulante, l'effet indicateur lorsqu'on fait défiler vers le haut et le bas, la couleur peut être spécifiée, mais ce n'est pas très utile. C'est l'effet de défilement par défaut des systèmes Android et Fuchsia.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base", - "desc": [ - "【showLeading】 : Si la tête est active 【bool】", - "【showTrailing】 : Si le bas est actif 【bool】", - "【axisDirection】 : Direction de l'axe 【AxisDirection】", - "【color】 : Couleur 【Color】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_it_IT.json deleted file mode 100644 index 2a9d76dd7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "Indicatore di scorrimento oltre i limiti", - "info": "Il bambino è una lista scorrevole, con un effetto indicatore quando si scorre verso l'alto e verso il basso, è possibile specificare il colore, ma non è molto utile. È l'effetto di scorrimento predefinito per i sistemi Android e Fuchsia.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base", - "desc": [ - "【showLeading】 : Se la parte superiore è attiva 【bool】", - "【showTrailing】 : Se la parte inferiore è attiva 【bool】", - "【axisDirection】 : Direzione dell'asse 【AxisDirection】", - "【color】 : Colore 【Color】", - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ja_JP.json deleted file mode 100644 index 1623f5e65..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "スクロールオーバーインジケーター", - "info": "子要素がスクロール可能なリストで、上部または下部にスクロールした際のインジケーター効果です。色を指定できますが、あまり役に立ちません。AndroidとFuchsiaシステムのデフォルトのスクロール効果です。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "基本使用", - "desc": [ - "【showLeading】 : ヘッダーが有効かどうか 【bool】", - "【showTrailing】 : フッターが有効かどうか 【bool】", - "【axisDirection】 : 軸方向 【AxisDirection】", - "【color】 : 色 【Color】", - "【child】 : 子ウィジェット 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ko_KR.json deleted file mode 100644 index 66a187c62..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "스크롤 오버스크롤 표시기", - "info": "자식이 스크롤 가능한 리스트일 때, 상단과 하단으로 스크롤할 때의 표시 효과. 색상을 지정할 수 있지만 큰 의미는 없습니다. Android와 Fuchsia 시스템의 기본 스크롤 효과입니다.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "기본 사용", - "desc": [ - "【showLeading】 : 헤더가 활성화되는지 여부 【bool】", - "【showTrailing】 : 하단이 활성화되는지 여부 【bool】", - "【axisDirection】 : 축 방향 【AxisDirection】", - "【color】 : 색상 【Color】", - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_pt_PT.json deleted file mode 100644 index c74b8ea24..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "Indicador de deslizamento fora dos limites", - "info": "A criança é uma lista deslizante, o efeito indicador quando desliza para o topo e para a base, pode especificar a cor, não tem muita utilidade. É o efeito de deslizamento padrão do sistema Android e Fuchsia.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico", - "desc": [ - "【showLeading】 : Se o cabeçalho está ativo 【bool】", - "【showTrailing】 : Se a base está ativa 【bool】", - "【axisDirection】 : Direção do eixo 【AxisDirection】", - "【color】 : Cor 【Color】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ru_RU.json deleted file mode 100644 index 62a47392d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "Индикатор прокрутки за пределы", - "info": "Дети - это прокручиваемый список, индикаторный эффект при прокрутке до верха и низа, можно указать цвет, не имеет большого значения. Это эффект прокрутки по умолчанию для систем Android и Fuchsia.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование", - "desc": [ - "【showLeading】 : Действует ли на голову 【bool】", - "【showTrailing】 : Действует ли на дно 【bool】", - "【axisDirection】 : Направление оси 【AxisDirection】", - "【color】 : Цвет 【Color】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_zh-CN.json deleted file mode 100644 index 57ad2ccce..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 250, - "name": "GlowingOverscrollIndicator", - "localName": "滑动越域指示器", - "info": "孩子为可滑动列表,当滑动到顶部和底部时的指示效果,可指定颜色,没什么太大卵用。是Android和fuchsia系统默认滑动效果。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "基本使用", - "desc": [ - "【showLeading】 : 头部是否生效 【bool】", - "【showTrailing】 : 底部是否生效 【bool】", - "【axisDirection】 : 轴向 【AxisDirection】", - "【color】 : 颜色 【Color】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/node1_base.dart deleted file mode 100644 index aa2632398..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/GlowingOverscrollIndicator/node1_base.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class GlowingOverscrollIndicatorDemo extends StatelessWidget { - const GlowingOverscrollIndicatorDemo({super.key}); - - List get data => [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - Colors.red[50]!, - Colors.red[100]!, - Colors.red[200]!, - Colors.red[300]!, - Colors.red[400]!, - Colors.red[500]!, - Colors.red[600]!, - Colors.red[700]!, - Colors.red[800]!, - Colors.red[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: GlowingOverscrollIndicator( - color: Colors.purple, - // showLeading: false, - // showTrailing: false, - axisDirection: AxisDirection.down, - child: ListView.builder( - itemBuilder: (_, index) => Container( - margin: const EdgeInsets.all(10), - height: 60, - color: data[index], - ), - itemCount: data.length, - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_de_DE.json deleted file mode 100644 index 0ab7c519b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "Geteilter Animationseffekt", - "info": "Es kann ein Labelname angegeben werden. Wenn zwei Schnittstellen umgeschaltet werden, führen Komponenten mit demselben Label einen gemeinsamen Animationseffekt aus. In einer Schnittstelle können nicht zwei Hero-Labels mit demselben Namen existieren.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Hero", - "desc": [ - "【tag】 : Label 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_en_US.json deleted file mode 100644 index b6a0e7337..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "Shared Animation", - "info": "You can specify a tag name, and components with the same tag will perform a shared animation when transitioning between two interfaces. There cannot be two Hero tags with the same name in one interface.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Hero", - "desc": [ - "【tag】 : tag 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_es_ES.json deleted file mode 100644 index 72665027f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "Animación compartida", - "info": "Se puede especificar un nombre de etiqueta, los componentes con la misma etiqueta realizarán una animación compartida al saltar entre dos interfaces. No pueden existir dos etiquetas Hero con el mismo nombre en una misma interfaz.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Hero", - "desc": [ - "【tag】 : etiqueta 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_fr_FR.json deleted file mode 100644 index efe22337e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "Animation partagée", - "info": "Vous pouvez spécifier un nom de tag, les composants avec le même tag effectueront une animation partagée lors du changement d'interface. Il ne peut pas y avoir deux tags Hero avec le même nom dans une même interface.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Hero", - "desc": [ - "【tag】 : étiquette 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_it_IT.json deleted file mode 100644 index 4003710e3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "Animazione condivisa", - "info": "È possibile specificare un nome di tag. Quando si passa da un'interfaccia all'altra, i componenti con lo stesso tag eseguiranno un'animazione condivisa. Non possono esistere due tag Hero con lo stesso nome in un'interfaccia.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Hero", - "desc": [ - "【tag】 : etichetta 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ja_JP.json deleted file mode 100644 index da433da69..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "共有アニメーション", - "info": "タグ名を指定でき、2つの画面間で同じタグを持つコンポーネントが共有アニメーションを行います。1つの画面に同じ名前のHeroタグを2つ存在させることはできません。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Heroの基本的な使用", - "desc": [ - "【tag】 : タグ 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ko_KR.json deleted file mode 100644 index 3a36cd465..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "공유 애니메이션", - "info": "태그 이름을 지정할 수 있으며, 두 인터페이스 간 전환 시 동일한 태그를 가진 구성 요소가 공유 애니메이션을 수행합니다. 하나의 인터페이스에는 동일한 이름의 Hero 태그가 두 개 존재할 수 없습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Hero 기본 사용법", - "desc": [ - "【tag】 : 태그 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_pt_PT.json deleted file mode 100644 index d8eb837e1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "Animação Compartilhada", - "info": "Pode especificar o nome da etiqueta, os componentes com a mesma etiqueta realizarão uma animação compartilhada ao saltar entre duas interfaces. Não pode haver duas etiquetas Hero com o mesmo nome numa interface.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Hero", - "desc": [ - "【tag】 : etiqueta 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ru_RU.json deleted file mode 100644 index b88d92a6a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "Общая анимация", - "info": "Можно указать имя тега, при переходе между двумя интерфейсами компоненты с одинаковым тегом будут выполнять общую анимацию. В одном интерфейсе не может быть двух тегов Hero с одинаковым именем.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Hero", - "desc": [ - "【tag】 : тег 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_zh-CN.json deleted file mode 100644 index 6cd3ba9ec..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 171, - "name": "Hero", - "localName": "共享动画", - "info": "可指定标签名,两个界面跳转时具有相同标签的组件会进行共享动画。一个界面中不能存在两个同名的Hero标签", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Hero基本使用", - "desc": [ - "【tag】 : 标签 【String】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Hero/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Hero/node1_base.dart deleted file mode 100644 index c0224bf1a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Hero/node1_base.dart +++ /dev/null @@ -1,120 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomHero extends StatelessWidget { - const CustomHero({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Hero hero = Hero( - //----定义一个Hero,并添加tag标签,此中组件共享 - tag: 'user-head', - child: ClipRRect( - borderRadius: const BorderRadius.all(Radius.circular(30)), - child: Image.asset( - "assets/images/icon_head.webp", - width: 60, - height: 60, - fit: BoxFit.cover, - ), - ), - ); - - Widget container = Container( - alignment: const Alignment(-0.8, -0.8), - child: hero, - width: 250, - height: 250 * 0.618, - decoration: BoxDecoration( - gradient: LinearGradient(colors: [ - Colors.red.withAlpha(99), - Colors.yellow.withAlpha(189), - Colors.green.withAlpha(88), - Colors.blue.withAlpha(230) - ])), - ); - - return GestureDetector( - child: Card(elevation: 5, child: container), - onTap: () => Navigator.push( - context, - Bottom2TopRouter(child: const TargetPage(), duration: 1000), - ), - ); - } - -} - -class TargetPage extends StatelessWidget { - const TargetPage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Hero hero = const Hero( - //----定义一个Hero,为其添加标签,两个标签相同,则可以共享 - tag: 'user-head', - child: Padding( - padding: EdgeInsets.all(6.0), - child: CircleAvatar( - backgroundColor: Colors.transparent, - backgroundImage: AssetImage( - "assets/images/icon_head.webp", - ), - ), - ), - ); - - Widget touch = InkWell( - onTap: () { - Navigator.of(context).pop(); - }, - child: hero, - ); - - return Scaffold( - appBar: AppBar( - actions: [touch], - ), - body: Container( - decoration: BoxDecoration( - gradient: LinearGradient(colors: [ - Colors.red.withAlpha(99), - Colors.yellow.withAlpha(189), - Colors.green.withAlpha(88), - Colors.blue.withAlpha(230) - ])), - ), - ); - } -} - -//下--->上 -class Bottom2TopRouter extends PageRouteBuilder { - final Widget child; - final int duration; - final Curve curve; - - Bottom2TopRouter({ - required this.child, - this.duration = 500, - this.curve = Curves.fastOutSlowIn, - }) : super( - transitionDuration: Duration(milliseconds: duration), - pageBuilder: (ctx, a1, a2) { - return child; - }, - transitionsBuilder: ( - ctx, - a1, - a2, - Widget child, - ) => SlideTransition( - position: Tween( - begin: const Offset(0.0, 1.0), - end: const Offset(0.0, 0.0), - ).animate(CurvedAnimation(parent: a1, curve: curve)), - child: child)); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_de_DE.json deleted file mode 100644 index b34fed387..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_de_DE.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "Bildkomponente", - "info": "Wird verwendet, um ein Bild anzuzeigen, das aus einer Datei, dem Speicher, dem Netzwerk oder Ressourcen geladen werden kann. Kann Anpassungsmodus, Stil, Farbmischmodus, Wiederholungsmodus usw. angeben.", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Kann Bilder aus Ressourcendateien und dem Netzwerk laden", - "desc": [ - "Image.asset lädt Ressourcenbilder." - ] - }, - { - "file": "node2_fit.dart", - "name": "Anpassungsmodus des Bildes", - "desc": [ - "【fit】 : Anpassungsmodus*7 【BoxFit】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Ausrichtungsmodus des Bildes", - "desc": [ - "【alignment】 : Farbe 【AlignmentGeometry】", - " Neun statische Konstanten der Alignment-Klasse werden häufig verwendet, aber die Position kann auch angepasst werden." - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "Farbe und Mischmodus des Bildes", - "desc": [ - "【color】 : Farbe 【Color】", - "【colorBlendMode】: Mischmodus*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "Wiederholungsmodus des Bildes", - "desc": [ - "【repeat】 : Wiederholungsmodus*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "Lokale Vergrößerung des Bildes", - "desc": [ - "【centerSlice】 : Beibehaltener Bereich 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_en_US.json deleted file mode 100644 index d3d10de9e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_en_US.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "Image Component", - "info": "Used to display an image, which can be loaded from a file, memory, network, or resources. You can specify the adaptation method, style, color blending mode, repeat mode, etc.", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Load images from resource files and the network", - "desc": [ - "Image.asset loads resource images," - ] - }, - { - "file": "node2_fit.dart", - "name": "Image adaptation mode", - "desc": [ - "【fit】 : Adaptation mode*7 【BoxFit】," - ] - }, - { - "file": "node3_alignment.dart", - "name": "Image alignment mode", - "desc": [ - "【alignment】 : Color 【AlignmentGeometry】", - " Common nine static constants of the Alignment class, but custom positions are also possible" - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "Image color and blending mode", - "desc": [ - "【color】 : Color 【Color】", - "【colorBlendMode】: Blending mode*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "Image repeat mode", - "desc": [ - "【repeat】 : Repeat mode*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "Image partial zoom implementation", - "desc": [ - "【centerSlice】 : Reserved area 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_es_ES.json deleted file mode 100644 index c259bd7fa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_es_ES.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "Componente de imagen", - "info": "Se utiliza para mostrar una imagen, que se puede cargar desde un archivo, memoria, red o recursos. Se puede especificar el modo de ajuste, estilo, modo de mezcla de colores, modo de repetición, etc.", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Cargar imágenes desde archivos de recursos y la red", - "desc": [ - "Image.asset carga imágenes de recursos." - ] - }, - { - "file": "node2_fit.dart", - "name": "Modo de ajuste de la imagen", - "desc": [ - "【fit】 : Modo de ajuste*7 【BoxFit】." - ] - }, - { - "file": "node3_alignment.dart", - "name": "Modo de alineación de la imagen", - "desc": [ - "【alignment】 : Color 【AlignmentGeometry】", - " Nueve constantes estáticas comunes de la clase Alignment, pero también se puede personalizar la posición." - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "Color y modo de mezcla de la imagen", - "desc": [ - "【color】 : Color 【Color】", - "【colorBlendMode】: Modo de mezcla*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "Modo de repetición de la imagen", - "desc": [ - "【repeat】 : Modo de repetición*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "Ampliación local de la imagen", - "desc": [ - "【centerSlice】 : Área conservada 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_fr_FR.json deleted file mode 100644 index c618d6d8b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_fr_FR.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "Composant d'image", - "info": "Utilisé pour afficher une image, qui peut être chargée à partir d'un fichier, de la mémoire, du réseau ou des ressources. Vous pouvez spécifier le mode d'adaptation, le style, le mode de mélange des couleurs, le mode de répétition, etc.", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Peut charger des images à partir de fichiers de ressources et du réseau", - "desc": [ - "Image.asset charge les images de ressources." - ] - }, - { - "file": "node2_fit.dart", - "name": "Mode d'adaptation de l'image", - "desc": [ - "【fit】 : Mode d'adaptation*7 【BoxFit】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Mode d'alignement de l'image", - "desc": [ - "【alignment】 : Couleur 【AlignmentGeometry】", - " Neuf constantes statiques couramment utilisées de la classe Alignment, mais il est également possible de personnaliser la position" - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "Couleur et mode de mélange de l'image", - "desc": [ - "【color】 : Couleur 【Color】", - "【colorBlendMode】: Mode de mélange*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "Mode de répétition de l'image", - "desc": [ - "【repeat】 : Mode de répétition*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "Agrandissement local de l'image", - "desc": [ - "【centerSlice】 : Zone conservée 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_it_IT.json deleted file mode 100644 index 3b43a1fa8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_it_IT.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "Componente immagine", - "info": "Utilizzato per visualizzare un'immagine, può essere caricata da file, memoria, rete o risorse. È possibile specificare modalità di adattamento, stile, modalità di fusione del colore, modalità di ripetizione, ecc.", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Può caricare immagini da file di risorse e dalla rete", - "desc": [ - "Image.asset carica immagini da risorse," - ] - }, - { - "file": "node2_fit.dart", - "name": "Modalità di adattamento dell'immagine", - "desc": [ - "【fit】 : modalità di adattamento*7 【BoxFit】," - ] - }, - { - "file": "node3_alignment.dart", - "name": "Modalità di allineamento dell'immagine", - "desc": [ - "【alignment】 : colore 【AlignmentGeometry】", - " Nove costanti statiche della classe Alignment, ma è anche possibile personalizzare la posizione" - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "Colore e modalità di fusione dell'immagine", - "desc": [ - "【color】 : colore 【Color】", - "【colorBlendMode】: modalità di fusione*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "Modalità di ripetizione dell'immagine", - "desc": [ - "【repeat】 : modalità di ripetizione*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "Ingrandimento locale dell'immagine", - "desc": [ - "【centerSlice】 : area conservata 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ja_JP.json deleted file mode 100644 index 608ca9add..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ja_JP.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "画像コンポーネント", - "info": "画像を表示するために使用され、ファイル、メモリ、ネットワーク、リソースからロードできます。適応モード、スタイル、カラーブレンドモード、リピートモードなどを指定できます", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "リソースファイルとネットワークから画像をロードできます", - "desc": [ - "Image.assetでリソース画像をロードします" - ] - }, - { - "file": "node2_fit.dart", - "name": "画像の適応モード", - "desc": [ - "【fit】 : 適応モード*7 【BoxFit】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "画像の整列モード", - "desc": [ - "【alignment】 : カラー 【AlignmentGeometry】", - " 一般的にAlignmentクラスの9つの静的定数を使用しますが、位置をカスタマイズすることもできます" - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "画像のカラー及びブレンドモード", - "desc": [ - "【color】 : カラー 【Color】", - "【colorBlendMode】: ブレンドモード*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "画像のリピートモード", - "desc": [ - "【repeat】 : リピートモード*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "画像の一部を拡大", - "desc": [ - "【centerSlice】 : 保持する領域 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ko_KR.json deleted file mode 100644 index ac7e3d2ea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ko_KR.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "이미지 컴포넌트", - "info": "이미지를 표시하는 데 사용되며, 파일, 메모리, 네트워크, 리소스에서 로드할 수 있습니다. 적응 방식, 스타일, 색상 혼합 모드, 반복 모드 등을 지정할 수 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "리소스 파일 및 네트워크에서 이미지 로드", - "desc": [ - "Image.asset로 리소스 이미지 로드" - ] - }, - { - "file": "node2_fit.dart", - "name": "이미지 적응 모드", - "desc": [ - "【fit】 : 적응 모드*7 【BoxFit】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "이미지 정렬 모드", - "desc": [ - "【alignment】 : 색상 【AlignmentGeometry】", - " 일반적으로 Alignment 클래스의 9개 정적 상수를 사용하지만, 위치를 사용자 정의할 수도 있음" - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "이미지 색상 및 혼합 모드", - "desc": [ - "【color】 : 색상 【Color】", - "【colorBlendMode】: 혼합 모드*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "이미지 반복 모드", - "desc": [ - "【repeat】 : 반복 모드*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "이미지 부분 확대", - "desc": [ - "【centerSlice】 : 보존 영역 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_pt_PT.json deleted file mode 100644 index 6b510140f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_pt_PT.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "Componente de Imagem", - "info": "Usado para exibir uma imagem, pode ser carregada a partir de arquivos, memória, rede ou recursos. Pode especificar o modo de ajuste, estilo, modo de mistura de cores, modo de repetição, etc.", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Pode carregar imagens de arquivos de recursos e da rede", - "desc": [ - "Image.asset carrega imagens de recursos," - ] - }, - { - "file": "node2_fit.dart", - "name": "Modo de ajuste da imagem", - "desc": [ - "【fit】 : modo de ajuste*7 【BoxFit】," - ] - }, - { - "file": "node3_alignment.dart", - "name": "Modo de alinhamento da imagem", - "desc": [ - "【alignment】 : cor 【AlignmentGeometry】", - " Nove constantes estáticas comuns da classe Alignment, mas também pode personalizar a posição" - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "Cor e modo de mistura da imagem", - "desc": [ - "【color】 : cor 【Color】", - "【colorBlendMode】: modo de mistura*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "Modo de repetição da imagem", - "desc": [ - "【repeat】 : modo de repetição*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "Ampliação local da imagem", - "desc": [ - "【centerSlice】 : área retida 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ru_RU.json deleted file mode 100644 index 5c26b2c46..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_ru_RU.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "Компонент изображения", - "info": "Используется для отображения изображения, которое можно загрузить из файла, памяти, сети или ресурсов. Можно указать режим адаптации, стиль, режим смешивания цветов, режим повторения и т.д.", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Загрузка изображений из ресурсов и сети", - "desc": [ - "Image.asset загружает изображения из ресурсов," - ] - }, - { - "file": "node2_fit.dart", - "name": "Режим адаптации изображения", - "desc": [ - "【fit】 : режим адаптации*7 【BoxFit】," - ] - }, - { - "file": "node3_alignment.dart", - "name": "Режим выравнивания изображения", - "desc": [ - "【alignment】 : цвет 【AlignmentGeometry】", - " Девять статических констант класса Alignment, но также можно настроить положение" - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "Цвет и режим смешивания изображения", - "desc": [ - "【color】 : цвет 【Color】", - "【colorBlendMode】: режим смешивания*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "Режим повторения изображения", - "desc": [ - "【repeat】 : режим повторения*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "Локальное увеличение изображения", - "desc": [ - "【centerSlice】 : сохраняемая область 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_zh-CN.json deleted file mode 100644 index 1b2434ac4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/desc_zh-CN.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 38, - "name": "Image", - "localName": "图片组件", - "info": "用于显示一张图片,可以从文件、内存、网络、资源里加载。可以指定适应方式、样式、颜色混合模式、重复模式等", - "lever": 5, - "family": 1, - "linkIds": [ - 8, - 87 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "可从资源文件和网络加载图片", - "desc": [ - "Image.asset加载资源图片," - ] - }, - { - "file": "node2_fit.dart", - "name": "图片的适应模式", - "desc": [ - "【fit】 : 适应模式*7 【BoxFit】," - ] - }, - { - "file": "node3_alignment.dart", - "name": "图片对齐模式", - "desc": [ - "【alignment】 : 颜色 【AlignmentGeometry】", - " 常用Alignment类的九个静态常量,但也可定制位置" - ] - }, - { - "file": "node4_colorBlendMode.dart", - "name": "图片颜色及混合模式", - "desc": [ - "【color】 : 颜色 【Color】", - "【colorBlendMode】: 混合模式*29 【BlendMode】" - ] - }, - { - "file": "node5_repeat.dart", - "name": "图片重复模式", - "desc": [ - "【repeat】 : 重复模式*4 【ImageRepeat】" - ] - }, - { - "file": "node6_centerSlice.dart", - "name": "图片实现局部放大", - "desc": [ - "【centerSlice】 : 保留的区域 【Rect】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Image/node1_base.dart deleted file mode 100644 index 71530c45c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/node1_base.dart +++ /dev/null @@ -1,27 +0,0 @@ - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - - -class LoadImage extends StatelessWidget { - const LoadImage({Key? key}) : super(key: key); - - final String assetsImagePath = "assets/images/icon_head.webp"; - final String netImageUrl = "https://p9-juejin.byteimg.com" - "/tos-cn-i-k3u1fbpfcp/36dee4e4dceb4c41a93df4a3603439fe~" - "tplv-k3u1fbpfcp-zoom-crop-mark:1304:1304:1304:734.awebp"; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: [ - Image.asset(assetsImagePath, height: 80, width: 80), - _loadFromNet(), - ], - ); - } - - Widget _loadFromNet() => Image.network(netImageUrl, height: 80); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/node2_fit.dart b/modules/widget_system/widgets/lib/StatefulWidget/Image/node2_fit.dart deleted file mode 100644 index b61fb6375..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/node2_fit.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class FitImage extends StatefulWidget { - const FitImage({Key? key}) : super(key: key); - - @override - _FitImageState createState() => _FitImageState(); -} - -class _FitImageState extends State { - bool _smallImage = false; - - @override - Widget build(BuildContext context) { - List imageLi = BoxFit.values - .toList() - .map((mode) => Column(children:[ - Container( - margin: const EdgeInsets.all(5), - width: 100, - height: 80, - color: Colors.grey.withAlpha(88), - child: Image( - image: AssetImage(!_smallImage - ? "assets/images/wy_300x200.webp" - : "assets/images/wy_30x20.webp"), - fit: mode)), - Text(mode.toString().split(".")[1]) - ])).toList(); - - return Wrap( - children: [...imageLi, _buildSwitch()], - ); - } - - Widget _buildSwitch() { - return Container( - alignment: Alignment.center, - width: 200, - height: 100, - child: Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - const Text("使用小图"), - Switch( - value: _smallImage, - onChanged: (b) => setState(() => _smallImage = b)), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/node3_alignment.dart b/modules/widget_system/widgets/lib/StatefulWidget/Image/node3_alignment.dart deleted file mode 100644 index a7885cee2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/node3_alignment.dart +++ /dev/null @@ -1,49 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -enum AlignmentType { - center(Alignment.center, 'center'), - centerLeft(Alignment.centerLeft, 'centerLeft'), - centerRight(Alignment.centerRight, 'centerRight'), - topCenter(Alignment.topCenter, 'topCenter'), - topLeft(Alignment.topLeft, 'topLeft'), - topRight(Alignment.topRight, 'topRight'), - bottomCenter(Alignment.bottomCenter, 'bottomCenter'), - bottomLeft(Alignment.bottomLeft, 'bottomLeft'), - bottomRight(Alignment.bottomRight, 'bottomRight'), - ; - - const AlignmentType(this.alignment, this.title); - - final Alignment alignment; - final String title; -} - -class AlignmentImage extends StatelessWidget { - const AlignmentImage({Key? key}) : super(key: key); - - //测试数组 - - @override - Widget build(BuildContext context) { - List imgLi = AlignmentType.values - .map((v) => //生成子Widget列表 - Column(children: [ - Container( - margin: const EdgeInsets.all(5), - width: 90, - height: 60, - color: Colors.grey.withAlpha(88), - child: Image( - image: const AssetImage("assets/images/wy_30x20.webp"), - alignment: v.alignment, - )), - Text(v.title), - ])) - .toList(); - var imageAlignment = Wrap(children: imgLi); - return imageAlignment; - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/node4_colorBlendMode.dart b/modules/widget_system/widgets/lib/StatefulWidget/Image/node4_colorBlendMode.dart deleted file mode 100644 index 8c2510295..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/node4_colorBlendMode.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - - -class BlendModeImage extends StatelessWidget { - const BlendModeImage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - children: BlendMode.values - .toList() - .map((mode) => Column(children:[ - Container( - margin: const EdgeInsets.all(5), - width: 60, - height: 60, - color: Colors.red, - child: Image( - image: const AssetImage("assets/images/icon_head.webp"), - color: Colors.blue.withAlpha(88), - colorBlendMode: mode)), - Text(mode.toString().split(".")[1]) - ])) - .toList(), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/node5_repeat.dart b/modules/widget_system/widgets/lib/StatefulWidget/Image/node5_repeat.dart deleted file mode 100644 index 2048dc2e9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/node5_repeat.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class RepeatImage extends StatelessWidget { - const RepeatImage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - children: ImageRepeat.values - .toList() - .map((mode) => Column(children:[ - Container( - margin: const EdgeInsets.all(5), - width: 150, - height: 60, - color: Colors.red, - child: Image( - image: const AssetImage("assets/images/wy_30x20.webp"), - repeat: mode)), - Text(mode.toString().split(".")[1]) - ])) - .toList(), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Image/node6_centerSlice.dart b/modules/widget_system/widgets/lib/StatefulWidget/Image/node6_centerSlice.dart deleted file mode 100644 index d4f4364ff..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Image/node6_centerSlice.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - - -class CenterSliceImage extends StatelessWidget { - const CenterSliceImage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 300, - height: 80, - child: Image.asset( - "assets/images/right_chat.png", - centerSlice: const Rect.fromLTRB(9, 27, 60, 27 + 1.0), - fit: BoxFit.fill, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_de_DE.json deleted file mode 100644 index 86515655a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_de_DE.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "Wasserwelle", - "info": "Macht die Wasserwellen von InkWell und InkResponse effektiv, verwendet für das Zeichnen von Bildern oder anderen dekorativen Materialkomponenten.", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Ink", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】", - "【decoration】 : Dekoration 【Decoration】", - "【width】 : Breite 【double】", - "【height】 : Höhe 【double】", - "【color】 : Farbe 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Ink.image Bildwasserwelle", - "desc": [ - "Die Eigenschaften sind identisch mit der Image-Komponente, siehe Image-Komponente für Details" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_en_US.json deleted file mode 100644 index 36b89e1f8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_en_US.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "Ripple", - "info": "Enables the ripple effect for InkWell and InkResponse, a Material component used to draw images or other decorations.", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Ink", - "desc": [ - "【child】: Child component 【Widget】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【decoration】: Decoration 【Decoration】", - "【width】: Width 【double】", - "【height】: Height 【double】", - "【color】: Color 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Ink.image Ripple with Image", - "desc": [ - "The properties are consistent with the Image component, see the Image component for details" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_es_ES.json deleted file mode 100644 index 9572e4f68..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_es_ES.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "Onda de agua", - "info": "Hace que las ondas de agua de InkWell e InkResponse sean efectivas, utilizadas para dibujar imágenes u otros componentes decorativos de Material.", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Ink", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】", - "【decoration】 : Decoración 【Decoration】", - "【width】 : Ancho 【double】", - "【height】 : Alto 【double】", - "【color】 : Color 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Onda de agua con Ink.image", - "desc": [ - "Los atributos son consistentes con el componente Image, consulte el componente Image para más detalles" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_fr_FR.json deleted file mode 100644 index 4a7cd29dd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_fr_FR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "Onde", - "info": "Active les ondulations d'eau pour InkWell et InkResponse, utilisé pour dessiner des images ou d'autres composants de décoration Material.", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'Ink", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】", - "【decoration】 : Décoration 【Decoration】", - "【width】 : Largeur 【double】", - "【height】 : Hauteur 【double】", - "【color】 : Couleur 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Onde d'image avec Ink.image", - "desc": [ - "Les propriétés sont identiques à celles du composant Image, voir le composant Image pour plus de détails" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_it_IT.json deleted file mode 100644 index 918d13deb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_it_IT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "Onda d'acqua", - "info": "Rende efficace l'effetto ondulato dell'acqua di InkWell e InkResponse, utilizzato per disegnare immagini o altri componenti decorativi di Material.", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Ink", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】", - "【decoration】 : Decorazione 【Decoration】", - "【width】 : Larghezza 【double】", - "【height】 : Altezza 【double】", - "【color】 : Colore 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Ink.image effetto ondulato dell'immagine", - "desc": [ - "Le proprietà sono coerenti con il componente Image, vedi il componente Image per i dettagli" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ja_JP.json deleted file mode 100644 index 95241704b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ja_JP.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "水波", - "info": "InkWellとInkResponseの水の波紋を有効にし、画像やその他の装飾を描画するためのMaterialコンポーネントです。", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Inkの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【padding】 : パディング 【EdgeInsetsGeometry】", - "【decoration】 : 装飾 【Decoration】", - "【width】 : 幅 【double】", - "【height】 : 高さ 【double】", - "【color】 : 色 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Ink.image画像の水波", - "desc": [ - "その属性はImageコンポーネントと一致し、詳細はImageコンポーネントを参照してください" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ko_KR.json deleted file mode 100644 index c8d9d18fc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ko_KR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "물결", - "info": "InkWell 및 InkResponse의 물결 효과를 활성화하고, 이미지 또는 기타 장식을 그리기 위한 Material 컴포넌트입니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Ink 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【padding】 : 안쪽 여백 【EdgeInsetsGeometry】", - "【decoration】 : 장식 【Decoration】", - "【width】 : 너비 【double】", - "【height】 : 높이 【double】", - "【color】 : 색상 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Ink.image 이미지 물결", - "desc": [ - "속성은 Image 컴포넌트와 동일하며, 자세한 내용은 Image 컴포넌트를 참조하세요" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_pt_PT.json deleted file mode 100644 index aeb564476..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_pt_PT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "Onda", - "info": "Torna as ondulações de água do InkWell e InkResponse eficazes, usadas para desenhar imagens ou outros componentes decorativos do Material.", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Ink", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【padding】 : Preenchimento interno 【EdgeInsetsGeometry】", - "【decoration】 : Decoração 【Decoration】", - "【width】 : Largura 【double】", - "【height】 : Altura 【double】", - "【color】 : Cor 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Ondulação de água do Ink.image", - "desc": [ - "Os atributos são consistentes com o componente Image, consulte o componente Image para mais detalhes" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ru_RU.json deleted file mode 100644 index 0f674edcf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_ru_RU.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "Волна", - "info": "Делает водяные волны InkWell и InkResponse активными, используется для рисования изображений или других декоративных компонентов Material.", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Ink", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【padding】 : Внутренний отступ 【EdgeInsetsGeometry】", - "【decoration】 : Декорация 【Decoration】", - "【width】 : Ширина 【double】", - "【height】 : Высота 【double】", - "【color】 : Цвет 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Водяные волны Ink.image", - "desc": [ - "Свойства совпадают с компонентом Image, подробнее см. компонент Image" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_zh-CN.json deleted file mode 100644 index 961f0dc92..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/desc_zh-CN.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 152, - "name": "Ink", - "localName": "水波", - "info": "使InkWell和InkResponse的水波纹有效,用于绘制图像或其他装饰的Material组件。", - "lever": 3, - "family": 1, - "linkIds": [ - 149, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Ink基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【padding】 : 内边距 【EdgeInsetsGeometry】", - "【decoration】 : 装饰 【Decoration】", - "【width】 : 宽 【double】", - "【height】 : 高 【double】", - "【color】 : 颜色 【Color】" - ] - }, - { - "file": "node2_image.dart", - "name": "Ink.image图片水波纹", - "desc": [ - "其中属性与Image组件一致,详见Image组件" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Ink/node1_base.dart deleted file mode 100644 index fdc0a1d71..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/node1_base.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class CustomInk extends StatelessWidget { - const CustomInk({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Material( - color: Colors.orangeAccent, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Center( - child: Ink( - padding: const EdgeInsets.all(10), - decoration: const BoxDecoration( - color: Colors.yellow, - borderRadius: BorderRadius.all(Radius.circular(20))), - width: 200.0, - height: 100.0, - child: InkWell( - onTap: () {}, - child: const Center(child: Text('Hello')), - ), - ), - ), - ), - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Ink/node2_image.dart b/modules/widget_system/widgets/lib/StatefulWidget/Ink/node2_image.dart deleted file mode 100644 index aceedd2d6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Ink/node2_image.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - - -class InkImage extends StatelessWidget { - const InkImage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Material( - color: Colors.grey[800], - child: Center( - child: Ink.image( - image: const AssetImage('assets/images/sabar.webp'), - fit: BoxFit.cover, - width: 300.0, - height: 200.0, - child: InkWell( - onTap: () {}, - child: const Align( - alignment: Alignment.topLeft, - child: Padding( - padding: EdgeInsets.all(10.0), - child: Text('Chaos', - style: TextStyle( - fontWeight: FontWeight.w900, color: Colors.black)), - ), - )), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_de_DE.json deleted file mode 100644 index aca10f03e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_de_DE.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "Wasserwellen-Reaktion", - "info": "Klickeffekt mit Wasserwellen, empfängt Ereignisse wie Klicken, Doppelklicken, Langdrücken, Abbrechen und Hervorhebungsänderungen. Kann Eigenschaften wie Wasserwellenfarbe, Radius, Hervorhebungsform usw. angeben.", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InkResponse grundlegende Ereignisse", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onTap】 : Klickereignis 【Function()】", - "【onDoubleTap】 : Doppelklickereignis 【Function()】", - "【onTapCancel】 : Klick abbrechen 【Function()】", - "【onLongPress】 : Langdrückereignis 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "InkResponse andere Eigenschaften", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onHighlightChanged】 : Hervorhebungsänderungsrückruf 【Function(bool)】", - "【highlightColor】 : Hervorhebungsfarbe 【Color】", - "【splashColor】 : Wasserwellenfarbe 【Color】", - "【radius】 : Wasserwellenradius 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_en_US.json deleted file mode 100644 index b550baae5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_en_US.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "Ripple Response", - "info": "Ripple click effect, receiving click, double-click, long press, cancel, highlight change events, and can specify ripple color, radius, highlight shape and other properties.", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Events of InkResponse", - "desc": [ - "【child】 : Child component 【Widget】", - "【onTap】 : Click event 【Function()】", - "【onDoubleTap】 : Double-click event 【Function()】", - "【onTapCancel】 : Click cancel 【Function()】", - "【onLongPress】 : Long press event 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Other Properties of InkResponse", - "desc": [ - "【child】 : Child component 【Widget】", - "【onHighlightChanged】 : Highlight change callback 【Function(bool)】", - "【highlightColor】 : Highlight color 【Color】", - "【splashColor】 : Ripple color 【Color】", - "【radius】 : Ripple radius 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_es_ES.json deleted file mode 100644 index 6301b0fb5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_es_ES.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "Respuesta de ondas", - "info": "Efecto de clic de ondas, recibe eventos de clic, doble clic, pulsación larga, cancelación y cambio de resaltado. Se pueden especificar propiedades como el color de las ondas, el radio, la forma de resaltado, etc.", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos básicos de InkResponse", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onTap】 : Evento de clic 【Function()】", - "【onDoubleTap】 : Evento de doble clic 【Function()】", - "【onTapCancel】 : Cancelación de clic 【Function()】", - "【onLongPress】 : Evento de pulsación larga 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Otras propiedades de InkResponse", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onHighlightChanged】 : Callback de cambio de resaltado 【Function(bool)】", - "【highlightColor】 : Color de resaltado 【Color】", - "【splashColor】 : Color de las ondas 【Color】", - "【radius】 : Radio de las ondas 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_fr_FR.json deleted file mode 100644 index 7da358ce7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_fr_FR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "Réponse d'ondulation", - "info": "Effet de clic d'ondulation, reçoit les événements de clic, double-clic, appui long, annulation et changement de surbrillance. Peut spécifier la couleur de l'ondulation, le rayon, la forme de la surbrillance et d'autres propriétés.", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événements de base d'InkResponse", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onTap】 : Événement de clic 【Function()】", - "【onDoubleTap】 : Événement de double-clic 【Function()】", - "【onTapCancel】 : Annulation de clic 【Function()】", - "【onLongPress】 : Événement d'appui long 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Autres propriétés d'InkResponse", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onHighlightChanged】 : Rappel de changement de surbrillance 【Function(bool)】", - "【highlightColor】 : Couleur de surbrillance 【Color】", - "【splashColor】 : Couleur de l'ondulation 【Color】", - "【radius】 : Rayon de l'ondulation 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_it_IT.json deleted file mode 100644 index 9b01d305c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_it_IT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "Effetto Ripple", - "info": "Effetto di clic a ripple, riceve eventi di clic, doppio clic, pressione prolungata, annullamento e cambiamento di evidenziazione. È possibile specificare proprietà come il colore del ripple, il raggio e la forma dell'evidenziazione.", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventi di base di InkResponse", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onTap】 : Evento di clic 【Function()】", - "【onDoubleTap】 : Evento di doppio clic 【Function()】", - "【onTapCancel】 : Annullamento clic 【Function()】", - "【onLongPress】 : Evento di pressione prolungata 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Altre proprietà di InkResponse", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onHighlightChanged】 : Callback di cambiamento di evidenziazione 【Function(bool)】", - "【highlightColor】 : Colore di evidenziazione 【Color】", - "【splashColor】 : Colore del ripple 【Color】", - "【radius】 : Raggio del ripple 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ja_JP.json deleted file mode 100644 index fa3339000..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ja_JP.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "リップルレスポンス", - "info": "リップルのクリック効果。クリック、ダブルクリック、長押し、キャンセル、ハイライト変更イベントを受け取り、リップルの色、半径、ハイライト形状などの属性を指定できます。", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InkResponse基本イベント", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onTap】 : クリックイベント 【Function()】", - "【onDoubleTap】 : ダブルクリックイベント 【Function()】", - "【onTapCancel】 : クリックキャンセル 【Function()】", - "【onLongPress】 : 長押しイベント 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "InkResponseその他の属性", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onHighlightChanged】 : ハイライト変更コールバック 【Function(bool)】", - "【highlightColor】 : ハイライト色 【Color】", - "【splashColor】 : リップル色 【Color】", - "【radius】 : リップル半径 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ko_KR.json deleted file mode 100644 index 1b4ca2a7a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ko_KR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "물결 반응", - "info": "물결 클릭 효과, 클릭, 더블 클릭, 길게 누르기, 취소, 하이라이트 변경 이벤트를 수신하며, 물결 색상, 반경, 하이라이트 모양 등의 속성을 지정할 수 있습니다.", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InkResponse 기본 이벤트", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【onTap】 : 클릭 이벤트 【Function()】", - "【onDoubleTap】 : 더블 클릭 이벤트 【Function()】", - "【onTapCancel】 : 클릭 취소 【Function()】", - "【onLongPress】 : 길게 누르기 이벤트 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "InkResponse 기타 속성", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【onHighlightChanged】 : 하이라이트 변경 콜백 【Function(bool)】", - "【highlightColor】 : 하이라이트 색상 【Color】", - "【splashColor】 : 물결 색상 【Color】", - "【radius】 : 물결 반경 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_pt_PT.json deleted file mode 100644 index 7f36fcd83..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_pt_PT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "Resposta de Ondulação", - "info": "Efeito de clique de ondulação, recebe eventos de clique, duplo clique, pressionamento longo, cancelamento e mudança de destaque, podendo especificar a cor da ondulação, raio, forma de destaque, entre outros atributos.", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos Básicos do InkResponse", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onTap】 : Evento de clique 【Function()】", - "【onDoubleTap】 : Evento de duplo clique 【Function()】", - "【onTapCancel】 : Cancelamento de clique 【Function()】", - "【onLongPress】 : Evento de pressionamento longo 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Outras Propriedades do InkResponse", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onHighlightChanged】 : Callback de mudança de destaque 【Function(bool)】", - "【highlightColor】 : Cor de destaque 【Color】", - "【splashColor】 : Cor da ondulação 【Color】", - "【radius】 : Raio da ondulação 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ru_RU.json deleted file mode 100644 index 255ee434f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_ru_RU.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "Эффект ряби", - "info": "Эффект нажатия с рябью, принимает события нажатия, двойного нажатия, долгого нажатия, отмены и изменения выделения. Можно указать цвет ряби, радиус, форму выделения и другие свойства.", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основные события InkResponse", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onTap】 : Событие нажатия 【Function()】", - "【onDoubleTap】 : Событие двойного нажатия 【Function()】", - "【onTapCancel】 : Отмена нажатия 【Function()】", - "【onLongPress】 : Событие долгого нажатия 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Другие свойства InkResponse", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onHighlightChanged】 : Обратный вызов изменения выделения 【Function(bool)】", - "【highlightColor】 : Цвет выделения 【Color】", - "【splashColor】 : Цвет ряби 【Color】", - "【radius】 : Радиус ряби 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_zh-CN.json deleted file mode 100644 index 900fa0b28..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/desc_zh-CN.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 149, - "name": "InkResponse", - "localName": "水波纹响应", - "info": "水波纹的点击效果,接收点击、双击、长按、取消、高亮变化事件,可指定水波纹颜色、半径、高亮形状等属性。", - "lever": 1, - "family": 1, - "linkIds": [ - 150, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InkResponse基本事件", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onTap】 : 点击事件 【Function()】", - "【onDoubleTap】 : 双击事件 【Function()】", - "【onTapCancel】 : 点击取消 【Function()】", - "【onLongPress】 : 长按事件 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "InkResponse其他属性", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onHighlightChanged】 : 高亮变化回调 【Function(bool)】", - "【highlightColor】 : 高亮色 【Color】", - "【splashColor】 : 水波纹色 【Color】", - "【radius】 : 水波半径 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/node1_base.dart deleted file mode 100644 index da42a370e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/node1_base.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class CustomInkResponse extends StatefulWidget { - const CustomInkResponse({Key? key}) : super(key: key); - - @override - _CustomInkResponseState createState() => _CustomInkResponseState(); -} - -class _CustomInkResponseState extends State { - String _info = 'Push'; - - @override - Widget build(BuildContext context) { - return InkResponse( - onTap: () => setState(() => _info = 'onTap'), - onDoubleTap: () => setState(() => _info = 'onDoubleTap'), - onLongPress: () => setState(() => _info = 'onLongPress'), - onTapCancel: () => setState(() => _info = 'onTapCancel'), - child: Container( - alignment: Alignment.center, - width: 200, - height: 100, - child: Text(_info), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/node2_color.dart b/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/node2_color.dart deleted file mode 100644 index b9f452696..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkResponse/node2_color.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class ColorInkResponse extends StatefulWidget { - const ColorInkResponse({Key? key}) : super(key: key); - - @override - _ColorInkResponseState createState() => _ColorInkResponseState(); -} - -class _ColorInkResponseState extends State { - String _info = 'Push'; - - @override - Widget build(BuildContext context) { - return InkResponse( - onTap: () => {}, - splashColor: Colors.blueAccent, - highlightColor: Colors.orange, - onHighlightChanged: (v) => - setState(() => _info = 'onHighlightChanged:$v'), - radius: 50, - child: Container( - alignment: Alignment.center, - width: 200, - height: 100, - child: Text(_info), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_de_DE.json deleted file mode 100644 index d68bb899c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_de_DE.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "Wasserwelle", - "info": "Unterklasse von InkResponse, grundlegende Eigenschaften wie InkResponse. Eine rechteckige Wasserwelle, die den Radius der abgerundeten Ecken, die Form der Umrandung usw. kennt.", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Ereignisse von InkWell", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onTap】 : Klickereignis 【Function()】", - "【onDoubleTap】 : Doppelklickereignis 【Function()】", - "【onTapCancel】 : Klick abbrechen 【Function()】", - "【onLongPress】 : Langdrücken 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Weitere Eigenschaften von InkWell", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onHighlightChanged】 : Rückruf bei Hervorhebungsänderung 【Function(bool)】", - "【highlightColor】 : Hervorhebungsfarbe 【Color】", - "【splashColor】 : Wasserwellenfarbe 【Color】", - "【radius】 : Wasserwellenradius 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_en_US.json deleted file mode 100644 index 4de7cf5d4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_en_US.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "Ripple", - "info": "A subclass of InkResponse, with basic properties similar to InkResponse. A rectangular area with ripple effects, allowing customization of corner radius, border shape, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InkWell Basic Events", - "desc": [ - "【child】: Child component 【Widget】", - "【onTap】: Tap event 【Function()】", - "【onDoubleTap】: Double tap event 【Function()】", - "【onTapCancel】: Tap cancel 【Function()】", - "【onLongPress】: Long press event 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "InkWell Other Properties", - "desc": [ - "【child】: Child component 【Widget】", - "【onHighlightChanged】: Highlight change callback 【Function(bool)】", - "【highlightColor】: Highlight color 【Color】", - "【splashColor】: Ripple color 【Color】", - "【radius】: Ripple radius 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_es_ES.json deleted file mode 100644 index 8862b4a31..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_es_ES.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "Ondulación", - "info": "Subclase de InkResponse, con propiedades básicas similares a InkResponse. Una región rectangular de ondulación, que puede conocer el radio de las esquinas redondeadas, la forma del borde, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos básicos de InkWell", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onTap】 : Evento de clic 【Function()】", - "【onDoubleTap】 : Evento de doble clic 【Function()】", - "【onTapCancel】 : Cancelación de clic 【Function()】", - "【onLongPress】 : Evento de pulsación larga 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Otras propiedades de InkWell", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onHighlightChanged】 : Callback de cambio de resaltado 【Function(bool)】", - "【highlightColor】 : Color de resaltado 【Color】", - "【splashColor】 : Color de la ondulación 【Color】", - "【radius】 : Radio de la ondulación 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_fr_FR.json deleted file mode 100644 index 8f623f9ac..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_fr_FR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "Effet de vague", - "info": "Sous-classe de InkResponse, les propriétés de base sont les mêmes que InkResponse. Une zone rectangulaire avec un effet de vague, permet de connaître le rayon des coins arrondis, la forme de la bordure, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événements de base d'InkWell", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onTap】 : Événement de clic 【Function()】", - "【onDoubleTap】 : Événement de double clic 【Function()】", - "【onTapCancel】 : Annulation de clic 【Function()】", - "【onLongPress】 : Événement de pression longue 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Autres propriétés d'InkWell", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onHighlightChanged】 : Rappel de changement de surbrillance 【Function(bool)】", - "【highlightColor】 : Couleur de surbrillance 【Color】", - "【splashColor】 : Couleur de l'effet de vague 【Color】", - "【radius】 : Rayon de l'effet de vague 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_it_IT.json deleted file mode 100644 index 19456853c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_it_IT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "Onda d'acqua", - "info": "Sottoclasse di InkResponse, le proprietà di base sono le stesse di InkResponse. Un'area rettangolare con un'effetto onda d'acqua, può conoscere il raggio degli angoli, la forma del bordo, ecc.", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventi di base di InkWell", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onTap】 : Evento di clic 【Function()】", - "【onDoubleTap】 : Evento di doppio clic 【Function()】", - "【onTapCancel】 : Annullamento del clic 【Function()】", - "【onLongPress】 : Evento di pressione prolungata 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Altre proprietà di InkWell", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onHighlightChanged】 : Callback di cambiamento dell'evidenziazione 【Function(bool)】", - "【highlightColor】 : Colore di evidenziazione 【Color】", - "【splashColor】 : Colore dell'onda d'acqua 【Color】", - "【radius】 : Raggio dell'onda 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ja_JP.json deleted file mode 100644 index 32ba38c79..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ja_JP.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "波紋", - "info": "InkResponseのサブクラスで、基本属性はInkResponseと同じです。矩形領域の波紋で、角丸半径や辺の形状などを知ることができます。", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InkWell基本イベント", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onTap】 : タップイベント 【Function()】", - "【onDoubleTap】 : ダブルタップイベント 【Function()】", - "【onTapCancel】 : タップキャンセル 【Function()】", - "【onLongPress】 : 長押しイベント 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "InkWellその他の属性", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onHighlightChanged】 : ハイライト変更コールバック 【Function(bool)】", - "【highlightColor】 : ハイライト色 【Color】", - "【splashColor】 : 波紋色 【Color】", - "【radius】 : 波紋半径 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ko_KR.json deleted file mode 100644 index 7f5b712ca..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ko_KR.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "물결무늬", - "info": "InkResponse의 하위 클래스로, 기본 속성은 InkResponse와 동일합니다. 둥근 모서리 반경, 테두리 모양 등을 알 수 있는 직사각형 영역의 물결무늬입니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InkWell 기본 이벤트", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【onTap】 : 탭 이벤트 【Function()】", - "【onDoubleTap】 : 더블 탭 이벤트 【Function()】", - "【onTapCancel】 : 탭 취소 【Function()】", - "【onLongPress】 : 롱 프레스 이벤트 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "InkWell 기타 속성", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【onHighlightChanged】 : 하이라이트 변경 콜백 【Function(bool)】", - "【highlightColor】 : 하이라이트 색상 【Color】", - "【splashColor】 : 물결무늬 색상 【Color】", - "【radius】 : 물결 반경 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_pt_PT.json deleted file mode 100644 index 2bc5f24a0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_pt_PT.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "Onda de Água", - "info": "Subclasse de InkResponse, com propriedades básicas semelhantes ao InkResponse. Uma área retangular de onda de água, que pode conhecer o raio de curvatura, a forma da borda, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos Básicos do InkWell", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onTap】 : Evento de clique 【Function()】", - "【onDoubleTap】 : Evento de duplo clique 【Function()】", - "【onTapCancel】 : Cancelamento de clique 【Function()】", - "【onLongPress】 : Evento de pressionar longo 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Outras Propriedades do InkWell", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onHighlightChanged】 : Callback de mudança de destaque 【Function(bool)】", - "【highlightColor】 : Cor de destaque 【Color】", - "【splashColor】 : Cor da onda de água 【Color】", - "【radius】 : Raio da onda 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ru_RU.json deleted file mode 100644 index bf0b487df..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_ru_RU.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "Водяные волны", - "info": "Подкласс InkResponse, основные свойства такие же, как у InkResponse. Прямоугольная область с водяными волнами, можно узнать радиус скругления, форму границы и т.д.", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основные события InkWell", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onTap】 : Событие нажатия 【Function()】", - "【onDoubleTap】 : Событие двойного нажатия 【Function()】", - "【onTapCancel】 : Отмена нажатия 【Function()】", - "【onLongPress】 : Событие длительного нажатия 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "Другие свойства InkWell", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onHighlightChanged】 : Обратный вызов изменения подсветки 【Function(bool)】", - "【highlightColor】 : Цвет подсветки 【Color】", - "【splashColor】 : Цвет водяных волн 【Color】", - "【radius】 : Радиус волны 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_zh-CN.json deleted file mode 100644 index 46a7480fb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/desc_zh-CN.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "id": 150, - "name": "InkWell", - "localName": "水波纹", - "info": "InkResponse的子类,基本属性同InkResponse。一个矩形区域的水波纹,可以知道圆角半径,边线形状等。", - "lever": 4, - "family": 1, - "linkIds": [ - 149, - 152 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InkWell基本事件", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onTap】 : 点击事件 【Function()】", - "【onDoubleTap】 : 双击事件 【Function()】", - "【onTapCancel】 : 点击取消 【Function()】", - "【onLongPress】 : 长按事件 【Function()】" - ] - }, - { - "file": "node2_color.dart", - "name": "InkWell其他属性", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onHighlightChanged】 : 高亮变化回调 【Function(bool)】", - "【highlightColor】 : 高亮色 【Color】", - "【splashColor】 : 水波纹色 【Color】", - "【radius】 : 水波半径 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/node1_base.dart deleted file mode 100644 index 11d053a5d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/node1_base.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class CustomInkWell extends StatefulWidget { - const CustomInkWell({Key? key}) : super(key: key); - - @override - _CustomInkWellState createState() => _CustomInkWellState(); -} - -class _CustomInkWellState extends State { - String _info = 'Push'; - - @override - Widget build(BuildContext context) { - return InkWell( - onTap: () => setState(() => _info = 'onTap'), - onDoubleTap: () => setState(() => _info = 'onDoubleTap'), - onLongPress: () => setState(() => _info = 'onLongPress'), - onTapCancel: () => setState(() => _info = 'onTapCancel'), - child: Container( - alignment: Alignment.center, - width: 120, - height: 50, - child: Text(_info), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/node2_color.dart b/modules/widget_system/widgets/lib/StatefulWidget/InkWell/node2_color.dart deleted file mode 100644 index f10b47a16..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InkWell/node2_color.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class ColorInkWell extends StatefulWidget { - const ColorInkWell({Key? key}) : super(key: key); - - @override - _ColorInkWellState createState() => _ColorInkWellState(); -} - -class _ColorInkWellState extends State { - String _info = 'Push'; - - @override - Widget build(BuildContext context) { - return InkWell( - onTap: () => {}, - splashColor: Colors.blueAccent, - highlightColor: Colors.orange, - onHighlightChanged: (v) => - setState(() => _info = 'onHighlightChanged:$v'), - radius: 50, - child: Container( - alignment: Alignment.center, - width: 180, - height: 50, - child: Text(_info), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_de_DE.json deleted file mode 100644 index 37aa2970d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "Eingabedekor", - "info": "Eine Dekoration, die die Eingabe umhüllt, ist eine der Kernkomponenten von TextField und wird normalerweise nicht alleine verwendet.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von InputDecorator", - "desc": [ - "【decoration】: Dekorationsobjekt 【InputDecoration】", - "【textAlign】: Textausrichtung 【TextAlign】", - "【child】: Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_en_US.json deleted file mode 100644 index b627a301a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "Input Decorator", - "info": "A decorator that wraps around the input, one of the core components of TextField, generally not used alone.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of InputDecorator", - "desc": [ - "【decoration】: Decoration object 【InputDecoration】", - "【textAlign】: Text alignment 【TextAlign】", - "【child】: Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_es_ES.json deleted file mode 100644 index e00e64b7e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "Decorador de entrada", - "info": "Un decorador que envuelve la entrada, es uno de los componentes centrales subyacentes de TextField, generalmente no se usa por separado.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de InputDecorator", - "desc": [ - "【decoration】 : Objeto de decoración 【InputDecoration】", - "【textAlign】 : Alineación del texto 【TextAlign】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_fr_FR.json deleted file mode 100644 index 389496841..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "Décorateur d'entrée", - "info": "Un décorateur qui enveloppe l'entrée, est l'un des composants de base de TextField, généralement pas utilisé seul.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'InputDecorator", - "desc": [ - "【decoration】 : Objet de décoration 【InputDecoration】", - "【textAlign】 : Alignement du texte 【TextAlign】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_it_IT.json deleted file mode 100644 index 34a56a088..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "Decorazione di Input", - "info": "Una decorazione che avvolge l'input all'esterno, è uno dei componenti principali di TextField, generalmente non utilizzato da solo.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di Base di InputDecorator", - "desc": [ - "【decoration】 : Oggetto di decorazione 【InputDecoration】", - "【textAlign】 : Allineamento del testo 【TextAlign】", - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ja_JP.json deleted file mode 100644 index 4e26de07a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "入力デコレータ", - "info": "入力の外側を包むデコレーションで、TextFieldのコアコンポーネントの一つです。通常は単独で使用しません。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InputDecoratorの基本使用", - "desc": [ - "【decoration】 : デコレーションオブジェクト 【InputDecoration】", - "【textAlign】 : テキストの配置 【TextAlign】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ko_KR.json deleted file mode 100644 index 94d452bf4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "입력 장식", - "info": "입력을 감싸는 외부 장식으로, TextField의 핵심 구성 요소 중 하나이며 일반적으로 단독으로 사용되지 않습니다.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InputDecorator 기본 사용", - "desc": [ - "【decoration】 : 장식 객체 【InputDecoration】", - "【textAlign】 : 텍스트 정렬 방식 【TextAlign】", - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_pt_PT.json deleted file mode 100644 index f5f0cfcff..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "Decoração de Entrada", - "info": "Decoração que envolve a entrada, é um dos componentes principais do TextField, geralmente não é usado sozinho.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do InputDecorator", - "desc": [ - "【decoration】 : Objeto de decoração 【InputDecoration】", - "【textAlign】 : Alinhamento do texto 【TextAlign】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ru_RU.json deleted file mode 100644 index ce8ef0995..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "Декоратор ввода", - "info": "Декоратор, оборачивающий ввод, является одним из основных компонентов TextField и обычно не используется отдельно.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование InputDecorator", - "desc": [ - "【decoration】 : Объект декорации 【InputDecoration】", - "【textAlign】 : Выравнивание текста 【TextAlign】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_zh-CN.json deleted file mode 100644 index 629ece4a0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 231, - "name": "InputDecorator", - "localName": "输入装饰", - "info": "在外层包裹输入的装饰,是TextField的底层核心组件之一,一般不单独使用。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InputDecorator基本使用", - "desc": [ - "【decoration】 : 装饰对象 【InputDecoration】", - "【textAlign】 : 文字对齐方式 【TextAlign】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/node1_base.dart deleted file mode 100644 index 8bac27f06..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InputDecorator/node1_base.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class InputDecoratorDemo extends StatelessWidget { - const InputDecoratorDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(8.0), - child: InputDecorator( - decoration: const InputDecoration(), - child: EditableText( - controller: TextEditingController(text:'hello'), - focusNode: FocusNode(), - style: const TextStyle(fontSize: 12,color: Colors.black), - cursorColor: Colors.blue, - backgroundCursorColor: Colors.orange, - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_de_DE.json deleted file mode 100644 index 90c0b174f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_de_DE.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "Interaktiver Viewer", - "info": "Kapselt hauptsächlich Gesteninteraktionen wie Verschieben und Zoomen, vereinfacht die Verwendung und ermöglicht die Angabe von Verschiebegrenzen, Zoomverhältnissen, Gestenerkennung usw.", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von InteractiveViewer", - "desc": [ - "【alignPanAxis】 : Entlang der Achse ziehen 【bool】", - "【boundaryMargin】 : Randabstand 【EdgeInsets】", - "【panEnabled】 : Verschiebung aktiviert 【bool】", - "【scaleEnabled】 : Skalierung aktiviert 【bool】", - "【maxScale】 : Maximale Vergrößerung 【double】", - "【minScale】 : Minimale Verkleinerung 【double】", - "【onInteractionEnd】 : Rückruf bei Interaktionsende 【GestureScaleEndCallback】", - "【onInteractionStart】 : Rückruf bei Interaktionsstart 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : Rückruf bei Interaktionsaktualisierung 【GestureScaleUpdateCallback】", - "【child】 : Cursorfarbe 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "Test der constrained-Eigenschaft", - "desc": [ - "【constrained】 : Eingeschränkt 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Verwendung des Transformationscontrollers", - "desc": [ - "【transformationController】 : Transformationscontroller 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_en_US.json deleted file mode 100644 index d02fcc098..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_en_US.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "Interactive Viewer", - "info": "Mainly encapsulates gesture interactions such as moving and zooming, simplifies usage, and allows specifying movement boundaries, zoom ratios, gesture monitoring, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of InteractiveViewer", - "desc": [ - "【alignPanAxis】: Drag along the axis 【bool】", - "【boundaryMargin】: Boundary margin 【EdgeInsets】", - "【panEnabled】: Whether panning is enabled 【bool】", - "【scaleEnabled】: Whether scaling is enabled 【bool】", - "【maxScale】: Maximum zoom scale 【double】", - "【minScale】: Minimum zoom scale 【double】", - "【onInteractionEnd】: Interaction end callback 【GestureScaleEndCallback】", - "【onInteractionStart】: Interaction start callback 【GestureScaleStartCallback】", - "【onInteractionUpdate】: Interaction update callback 【GestureScaleUpdateCallback】", - "【child】: Cursor color 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "Constrained Property Test", - "desc": [ - "【constrained】: Constrained 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Usage of Transformation Controller", - "desc": [ - "【transformationController】: Transformation controller 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_es_ES.json deleted file mode 100644 index 4c309f36c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_es_ES.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "Visor Interactivo", - "info": "Principalmente encapsula interacciones gestuales como mover y hacer zoom, simplificando su uso. Puede especificar límites de movimiento, proporciones de zoom, escucha de gestos, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de InteractiveViewer", - "desc": [ - "【alignPanAxis】 : Arrastrar a lo largo del eje 【bool】", - "【boundaryMargin】 : Margen del borde 【EdgeInsets】", - "【panEnabled】 : Si se puede desplazar 【bool】", - "【scaleEnabled】 : Si se puede hacer zoom 【bool】", - "【maxScale】 : Máximo aumento 【double】", - "【minScale】 : Mínima reducción 【double】", - "【onInteractionEnd】 : Callback al finalizar la interacción 【GestureScaleEndCallback】", - "【onInteractionStart】 : Callback al iniciar la interacción 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : Callback al actualizar la interacción 【GestureScaleUpdateCallback】", - "【child】 : Color del cursor 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "Prueba de la propiedad constrained", - "desc": [ - "【constrained】 : Restringido 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Uso del controlador de transformación", - "desc": [ - "【transformationController】 : Controlador de transformación 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_fr_FR.json deleted file mode 100644 index eb4de3052..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_fr_FR.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "Vue interactive", - "info": "Principalement pour encapsuler les interactions gestuelles telles que le déplacement et le zoom, simplifier l'utilisation, et permettre de spécifier les limites de déplacement, les ratios de zoom, l'écoute des gestes, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'InteractiveViewer", - "desc": [ - "【alignPanAxis】 : Glisser le long de l'axe 【bool】", - "【boundaryMargin】 : Marge de la limite 【EdgeInsets】", - "【panEnabled】 : Peut être déplacé 【bool】", - "【scaleEnabled】 : Peut être zoomé 【bool】", - "【maxScale】 : Facteur de zoom maximum 【double】", - "【minScale】 : Facteur de zoom minimum 【double】", - "【onInteractionEnd】 : Rappel de fin d'interaction 【GestureScaleEndCallback】", - "【onInteractionStart】 : Rappel de début d'interaction 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : Rappel de mise à jour d'interaction 【GestureScaleUpdateCallback】", - "【child】 : Couleur du curseur 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "Test de la propriété constrained", - "desc": [ - "【constrained】 : Contraint 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Utilisation du contrôleur de transformation", - "desc": [ - "【transformationController】 : Contrôleur de transformation 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_it_IT.json deleted file mode 100644 index b182913ef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_it_IT.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "Visualizzatore Interattivo", - "info": "Principalmente incapsula le interazioni gestuali come lo spostamento e lo zoom, semplificando l'uso, è possibile specificare i limiti di movimento, la scala di zoom, il monitoraggio dei gesti, ecc.", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di InteractiveViewer", - "desc": [ - "【alignPanAxis】 : Trascina lungo l'asse 【bool】", - "【boundaryMargin】 : Margine del bordo 【EdgeInsets】", - "【panEnabled】 : Se è possibile traslare 【bool】", - "【scaleEnabled】 : Se è possibile ridimensionare 【bool】", - "【maxScale】 : Fattore di ingrandimento massimo 【double】", - "【minScale】 : Fattore di riduzione minimo 【double】", - "【onInteractionEnd】 : Callback di fine interazione 【GestureScaleEndCallback】", - "【onInteractionStart】 : Callback di inizio interazione 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : Callback di aggiornamento interazione 【GestureScaleUpdateCallback】", - "【child】 : Colore del cursore 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "Test della proprietà constrained", - "desc": [ - "【constrained】 : Vincolato 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Uso del controller di trasformazione", - "desc": [ - "【transformationController】 : Controller di trasformazione 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ja_JP.json deleted file mode 100644 index 3028d848e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ja_JP.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "インタラクティブビュー", - "info": "主に移動、ズームなどのジェスチャー操作をカプセル化し、使用を簡素化します。移動の境界、ズーム比率、ジェスチャーリスナーなどを指定できます。", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InteractiveViewerの基本使用", - "desc": [ - "【alignPanAxis】 : 軸に沿ってドラッグ 【bool】", - "【boundaryMargin】 : 境界マージン 【EdgeInsets】", - "【panEnabled】 : 平行移動可能かどうか 【bool】", - "【scaleEnabled】 : ズーム可能かどうか 【bool】", - "【maxScale】 : 最大ズーム倍率 【double】", - "【minScale】 : 最小ズーム倍率 【double】", - "【onInteractionEnd】 : インタラクション終了コールバック 【GestureScaleEndCallback】", - "【onInteractionStart】 : インタラクション開始コールバック 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : インタラクション更新コールバック 【GestureScaleUpdateCallback】", - "【child】 : カーソルカラー 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "constrained属性のテスト", - "desc": [ - "【constrained】 : 制約付き 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "変換コントローラーの使用", - "desc": [ - "【transformationController】 : 変換コントローラー 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ko_KR.json deleted file mode 100644 index 76bf8581e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ko_KR.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "인터랙티브 뷰어", - "info": "주로 이동, 확대/축소 등의 제스처 인터랙션을 캡슐화하여 사용을 단순화하며, 이동 경계, 확대/축소 비율, 제스처 리스너 등을 지정할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InteractiveViewer 기본 사용", - "desc": [ - "【alignPanAxis】 : 축을 따라 드래그 【bool】", - "【boundaryMargin】 : 경계 여백 【EdgeInsets】", - "【panEnabled】 : 이동 가능 여부 【bool】", - "【scaleEnabled】 : 확대/축소 가능 여부 【bool】", - "【maxScale】 : 최대 확대 배율 【double】", - "【minScale】 : 최소 축소 배율 【double】", - "【onInteractionEnd】 : 인터랙션 종료 콜백 【GestureScaleEndCallback】", - "【onInteractionStart】 : 인터랙션 시작 콜백 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : 인터랙션 업데이트 콜백 【GestureScaleUpdateCallback】", - "【child】 : 커서 색상 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "constrained 속성 테스트", - "desc": [ - "【constrained】 : 제약이 있는 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "변환 컨트롤러 사용", - "desc": [ - "【transformationController】 : 변환 컨트롤러 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_pt_PT.json deleted file mode 100644 index be7b44f3e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_pt_PT.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "Visualizador Interativo", - "info": "Principalmente encapsula interações gestuais como movimento e zoom, simplificando o uso. Pode especificar limites de movimento, proporção de zoom, monitorização de gestos, etc.", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do InteractiveViewer", - "desc": [ - "【alignPanAxis】 : Arrastar ao longo do eixo 【bool】", - "【boundaryMargin】 : Margem da fronteira 【EdgeInsets】", - "【panEnabled】 : Se pode ser movido 【bool】", - "【scaleEnabled】 : Se pode ser ampliado 【bool】", - "【maxScale】 : Fator de ampliação máximo 【double】", - "【minScale】 : Fator de redução mínimo 【double】", - "【onInteractionEnd】 : Callback de fim de interação 【GestureScaleEndCallback】", - "【onInteractionStart】 : Callback de início de interação 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : Callback de atualização de interação 【GestureScaleUpdateCallback】", - "【child】 : Cor do cursor 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "Teste da Propriedade Constrained", - "desc": [ - "【constrained】 : Restrito 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Uso do Controlador de Transformação", - "desc": [ - "【transformationController】 : Controlador de transformação 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ru_RU.json deleted file mode 100644 index cf059b7b0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_ru_RU.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "Интерактивное представление", - "info": "Основная цель - инкапсуляция жестов, таких как перемещение и масштабирование, упрощение использования, возможность указания границ перемещения, масштабирования, прослушивания жестов и т.д.", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование InteractiveViewer", - "desc": [ - "【alignPanAxis】 : Перетаскивание по оси 【bool】", - "【boundaryMargin】 : Отступ границы 【EdgeInsets】", - "【panEnabled】 : Возможность панорамирования 【bool】", - "【scaleEnabled】 : Возможность масштабирования 【bool】", - "【maxScale】 : Максимальный коэффициент увеличения 【double】", - "【minScale】 : Минимальный коэффициент уменьшения 【double】", - "【onInteractionEnd】 : Обратный вызов завершения взаимодействия 【GestureScaleEndCallback】", - "【onInteractionStart】 : Обратный вызов начала взаимодействия 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : Обратный вызов обновления взаимодействия 【GestureScaleUpdateCallback】", - "【child】 : Цвет курсора 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "Тестирование свойства constrained", - "desc": [ - "【constrained】 : Ограниченный 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Использование контроллера преобразования", - "desc": [ - "【transformationController】 : Контроллер преобразования 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_zh-CN.json deleted file mode 100644 index 13775de26..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/desc_zh-CN.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 351, - "name": "InteractiveViewer", - "localName": "交互视图", - "info": "主要对移动、缩放等手势交互进行封装,简化使用,可指定移动边界、缩放比例、手势监听等。", - "lever": 4, - "family": 1, - "linkIds": [ - 147, - 146, - 78 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "InteractiveViewer基本使用", - "desc": [ - "【alignPanAxis】 : 沿轴拖动 【bool】", - "【boundaryMargin】 : 边界边距 【EdgeInsets】", - "【panEnabled】 : 是否可平移 【bool】", - "【scaleEnabled】 : 是否可缩放 【bool】", - "【maxScale】 : 最大放大倍数 【double】", - "【minScale】 : 最小缩小倍数 【double】", - "【onInteractionEnd】 : 交互结束回调 【GestureScaleEndCallback】", - "【onInteractionStart】 : 交互开始回调 【GestureScaleStartCallback】", - "【onInteractionUpdate】 : 交互更新回调 【GestureScaleUpdateCallback】", - "【child】 : 游标颜色 【Widget】" - ] - }, - { - "file": "node2_constrained.dart", - "name": "constrained属性测试", - "desc": [ - "【constrained】 : 受约束的 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "变换控制器的使用", - "desc": [ - "【transformationController】 : 变换控制器 【TransformationController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node1_base.dart deleted file mode 100644 index 1a2bb7955..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node1_base.dart +++ /dev/null @@ -1,41 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class InteractiveViewerDemo extends StatelessWidget { - const InteractiveViewerDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - height: 150, - color: Colors.grey.withAlpha(33), - child: InteractiveViewer( - boundaryMargin: const EdgeInsets.all(40.0), - maxScale: 2.5, - minScale: 0.3, - panEnabled: true, - scaleEnabled: true, - child: Image.asset('assets/images/caver.webp'), - onInteractionStart: _onInteractionStart, - onInteractionUpdate: _onInteractionUpdate, - onInteractionEnd: _onInteractionEnd, - ), - ); - } - - void _onInteractionStart(ScaleStartDetails details) { - print('onInteractionStart----' + details.toString()); - } - - void _onInteractionUpdate(ScaleUpdateDetails details) { - print('onInteractionUpdate----' + details.toString()); - } - - void _onInteractionEnd(ScaleEndDetails details) { - print('onInteractionEnd----' + details.toString()); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node2_constrained.dart b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node2_constrained.dart deleted file mode 100644 index 75c856055..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node2_constrained.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class InteractiveViewerDemo2 extends StatelessWidget { - const InteractiveViewerDemo2({Key? key}) : super(key: key); - - final List colors = const [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - - final List colors2 = const [ - Colors.yellow, - Colors.blue, - Colors.green, - Colors.red - ]; - - @override - Widget build(BuildContext context) { - int _rowCount = 20; - int _columnCount = 4; - - return SizedBox( - width: 300, - height: 200, - child: InteractiveViewer( - constrained: false, - scaleEnabled: false, - child: Table( - columnWidths: { - for (int column = 0; column < _columnCount; column += 1) - column: const FixedColumnWidth(150.0), - }, - children: buildRows(_rowCount, _columnCount), - ), - ), - ); - } - - List buildRows(int rowCount, int columnCount) { - return [ - for (int row = 0; row < rowCount; row += 1) - TableRow( - children: [ - for (int column = 0; column < columnCount; column += 1) - Container( - margin: const EdgeInsets.all(2), - height: 50, - alignment: Alignment.center, - color: _colorful(row, column), - child: Text( - '($row,$column)', - style: const TextStyle(fontSize: 20, color: Colors.white), - ), - ), - ], - ), - ]; - } - - Color _colorful(int row, int column) => - row % 2 == 0 ? colors[column] : colors2[column]; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node3_controller.dart b/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node3_controller.dart deleted file mode 100644 index b6631fac6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/InteractiveViewer/node3_controller.dart +++ /dev/null @@ -1,146 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class InteractiveViewerDemo3 extends StatefulWidget { - const InteractiveViewerDemo3({Key? key}) : super(key: key); - - @override - _InteractiveViewerDemo3State createState() => _InteractiveViewerDemo3State(); -} - -class _InteractiveViewerDemo3State extends State - with SingleTickerProviderStateMixin { - final TransformationController _transformationController = - TransformationController(); - late Animation _animationReset; - late AnimationController _controllerReset; - - void _onAnimateReset() { - _transformationController.value = _animationReset.value; - if (!_controllerReset.isAnimating) { - _animationReset.removeListener(_onAnimateReset); - _controllerReset.reset(); - } - } - - void _animateResetInitialize() { - _controllerReset.reset(); - _animationReset = Matrix4Tween( - begin: _transformationController.value, - end: Matrix4.identity(), - ).animate(_controllerReset); - _animationReset.addListener(_onAnimateReset); - _controllerReset.forward(); - } - - void _animateResetStop() { - _controllerReset.stop(); - _animationReset.removeListener(_onAnimateReset); - _controllerReset.reset(); - } - - void _onInteractionStart(ScaleStartDetails details) { - if (_controllerReset.status == AnimationStatus.forward) { - _animateResetStop(); - } - } - - @override - void initState() { - super.initState(); - _controllerReset = AnimationController( - vsync: this, - duration: const Duration(milliseconds: 400), - ); - } - - @override - void dispose() { - _controllerReset.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Wrap( - direction: Axis.vertical, - spacing: 10, - crossAxisAlignment: WrapCrossAlignment.center, - alignment: WrapAlignment.center, - children: [ - Container( - height: 150, - color: Colors.grey.withAlpha(33), - child: InteractiveViewer( - boundaryMargin: const EdgeInsets.all(40), - transformationController: _transformationController, - minScale: 0.1, - maxScale: 1.8, - onInteractionStart: _onInteractionStart, - child: Image.asset('assets/images/caver.webp'), - ), - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - _buildButton(), - _buildButton2(), - _buildButton3(), - ], - ) - ], - ); - } - - Widget _buildButton() { - return MaterialButton( - child: const Icon( - Icons.refresh, - color: Colors.white, - ), - color: Colors.green, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - onPressed: _animateResetInitialize); - } - - final double _x = 0.0; - - Widget _buildButton2() { - return MaterialButton( - child: const Icon( - Icons.navigate_before, - color: Colors.white, - ), - color: Colors.green, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - onPressed: () { - var temp = _transformationController.value.clone(); - temp.translate(_x - 4); - _transformationController.value = temp; - }); - } - - Widget _buildButton3() { - return MaterialButton( - child: const Icon( - Icons.navigate_next, - color: Colors.white, - ), - color: Colors.green, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - onPressed: () { - var temp = _transformationController.value.clone(); - temp.translate(_x + 4); - _transformationController.value = temp; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_de_DE.json deleted file mode 100644 index dd140ea9d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "Tastatur-Listener", - "info": "Nachdem der Fokus erhalten wurde, wird über onKeyEvent das Tastaturereignis überwacht.", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Tastaturereignisse überwachen", - "desc": [ - "Im Beispiel erhält der Bereich durch Klicken den Fokus, und durch Drücken der Tastatur können die ausgelösten Ereignisse angezeigt werden.", - "【focusNode】 : Fokus 【FocusNode】", - "【autofocus】 : Automatischer Fokus 【bool】", - "【includeSemantics】 : Semantik einschließen 【bool】", - "【onKeyEvent】 : Tastaturrückrufereignis 【ValueChanged?】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_en_US.json deleted file mode 100644 index 7edfce716..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "Keyboard Listener", - "info": "After gaining focus, listen to keyboard key events through onKeyEvent.", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Listen to Keyboard Events", - "desc": [ - "In the example, click the area to gain focus, and then press the keyboard to see the event trigger information.", - "【focusNode】 : Focus 【FocusNode】", - "【autofocus】 : Whether to auto-focus 【bool】", - "【includeSemantics】 : Include semantics 【bool】", - "【onKeyEvent】 : Key callback event 【ValueChanged?】", - "【child】 : Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_es_ES.json deleted file mode 100644 index 4a4e92502..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "Escuchador de teclado", - "info": "Después de obtener el foco, escucha los eventos de teclado a través de onKeyEvent.", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Escuchar eventos de teclado", - "desc": [ - "En el ejemplo, al hacer clic en el área se obtiene el foco, y luego al presionar el teclado se pueden ver los mensajes de eventos activados.", - "【focusNode】 : Foco 【FocusNode】", - "【autofocus】 : Si se enfoca automáticamente 【bool】", - "【includeSemantics】 : Incluir semántica 【bool】", - "【onKeyEvent】 : Evento de devolución de llamada de tecla 【ValueChanged?】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_fr_FR.json deleted file mode 100644 index 02089c3c6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "Écouteur de clavier", - "info": "Après avoir obtenu le focus, écoute les événements de touche du clavier via onKeyEvent.", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Écouter les événements du clavier", - "desc": [ - "Dans l'exemple, cliquez sur la zone pour obtenir le focus, puis tapez sur le clavier pour voir les informations de déclenchement de l'événement.", - "【focusNode】 : Focus 【FocusNode】", - "【autofocus】 : Mise au point automatique 【bool】", - "【includeSemantics】 : Inclure la sémantique 【bool】", - "【onKeyEvent】 : Événement de rappel de touche 【ValueChanged?】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_it_IT.json deleted file mode 100644 index b8fa6f8fd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "Ascoltatore Tastiera", - "info": "Dopo aver ottenuto il focus, ascolta gli eventi dei tasti della tastiera tramite onKeyEvent.", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Ascolta Eventi Tastiera", - "desc": [ - "Nell'esempio, clicca sull'area per ottenere il focus, quindi premi un tasto per vedere le informazioni sull'evento attivato.", - "【focusNode】 : Focus 【FocusNode】", - "【autofocus】 : Autofocus 【bool】", - "【includeSemantics】 : Includi Semantica 【bool】", - "【onKeyEvent】 : Evento di Richiamata Tasto 【ValueChanged?】", - "【child】 : Componente Figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ja_JP.json deleted file mode 100644 index 3b3fe5431..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "キーボードリスナー", - "info": "フォーカスを取得した後、onKeyEventを通じてキーボードのキーイベントを監視します。", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "キーボードイベントの監視", - "desc": [ - "例では、領域をクリックしてフォーカスを取得し、キーボードを叩くとイベントのトリガー情報が表示されます。", - "【focusNode】 : フォーカス 【FocusNode】", - "【autofocus】 : 自動フォーカス 【bool】", - "【includeSemantics】 : セマンティクスを含む 【bool】", - "【onKeyEvent】 : キーコールバックイベント 【ValueChanged?】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ko_KR.json deleted file mode 100644 index b385c9172..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "키보드 리스너", - "info": "포커스를 얻은 후, onKeyEvent를 통해 키보드의 키 이벤트를 감지합니다.", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "키보드 이벤트 감지", - "desc": [ - "예제에서 영역을 클릭하여 포커스를 얻은 후, 키보드를 누르면 이벤트 트리거 정보를 볼 수 있습니다.", - "【focusNode】 : 포커스 【FocusNode】", - "【autofocus】 : 자동 포커스 여부 【bool】", - "【includeSemantics】 : 의미 포함 여부 【bool】", - "【onKeyEvent】 : 키 이벤트 콜백 【ValueChanged?】", - "【child】 : 하위 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_pt_PT.json deleted file mode 100644 index b063905cf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "Ouvinte de Teclado", - "info": "Após obter o foco, monitora os eventos de teclas através de onKeyEvent.", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Monitorar Eventos de Teclado", - "desc": [ - "No exemplo, clique na área para obter o foco e, em seguida, pressione as teclas para ver as informações de acionamento do evento.", - "【focusNode】 : Foco 【FocusNode】", - "【autofocus】 : Foco automático 【bool】", - "【includeSemantics】 : Incluir semântica 【bool】", - "【onKeyEvent】 : Evento de retorno de tecla 【ValueChanged?】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ru_RU.json deleted file mode 100644 index a64b76936..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "Слушатель клавиатуры", - "info": "После получения фокуса, прослушивает события нажатия клавиш через onKeyEvent.", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Прослушивание событий клавиатуры", - "desc": [ - "В примере область получает фокус при нажатии, затем при нажатии клавиш можно увидеть информацию о срабатывании события.", - "【focusNode】 : Фокус 【FocusNode】", - "【autofocus】 : Автоматический фокус 【bool】", - "【includeSemantics】 : Включать семантику 【bool】", - "【onKeyEvent】 : Событие обратного вызова нажатия клавиши 【ValueChanged?】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_zh-CN.json deleted file mode 100644 index 85ed93521..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 284, - "name": "KeyboardListener", - "localName": "键盘监听器", - "info": "在获取焦点后, 通过 onKeyEvent 监听键盘的按键事件。 ", - "lever": 5, - "family": 1, - "linkIds": [ - 282, - 283 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "监听键盘事件", - "desc": [ - "案例中区域点击获取焦点,然后敲击键盘可以看到事件触发信息。", - "【focusNode】 : 焦点 【FocusNode】", - "【autofocus】 : 是否自动聚焦 【bool】", - "【includeSemantics】 : 包含语义 【bool】", - "【onKeyEvent】 : 按键回调事件 【ValueChanged?】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/node1.dart deleted file mode 100644 index 602cf0bee..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/KeyboardListener/node1.dart +++ /dev/null @@ -1,133 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -class KeyboardListenerDemo1 extends StatefulWidget { - const KeyboardListenerDemo1({super.key}); - - @override - State createState() => _KeyboardListenerDemo1State(); -} - -class _KeyboardListenerDemo1State extends State { - FocusNode focusNode = FocusNode(); - List events = []; - ScrollController _ctrl = ScrollController(); - - @override - void initState() { - focusNode.addListener(_onFocusChange); - super.initState(); - } - - @override - void dispose() { - focusNode.removeListener(_onFocusChange); - focusNode.dispose(); - - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Center( - child: TapRegion( - onTapInside: (_) { - focusNode.requestFocus(); - }, - onTapOutside: (_) { - focusNode.unfocus(); - }, - child: KeyboardListener( - autofocus: true, - focusNode: focusNode, - onKeyEvent: _onKeyEvent, - child: _buildDisplay(), - ), - ), - ); - } - - void _onKeyEvent(KeyEvent value) { - events.add(value); - setState(() {}); - _scrollToEnd(); - print('${value.runtimeType}:${value.logicalKey.keyLabel}'); - } - - void _onFocusChange() { - if (!focusNode.hasFocus) { - events.clear(); - } - setState(() {}); - } - - void _scrollToEnd() async { - if (_ctrl.hasClients) { - await Future.delayed(Duration(milliseconds: 200)); - _ctrl.animateTo(_ctrl.position.maxScrollExtent, - duration: Duration(milliseconds: 100), curve: Curves.ease); - } - } - - Widget _buildDisplay() { - Color color = focusNode.hasFocus ? Colors.blue : Colors.grey; - - return Container( - decoration: BoxDecoration(border: Border.all(color: color)), - width: 460, - padding: EdgeInsets.symmetric(horizontal: 12), - alignment: Alignment.center, - height: 60, - child: events.isNotEmpty - ? SizedBox( - width: 460, - height: 60, - child: ListView.builder( - controller: _ctrl, - itemCount: events.length, - scrollDirection: Axis.horizontal, - itemBuilder: (_, index) => KeyBoardBox( - event: events[index], - )), - ) - : Text( - focusNode.hasFocus ? '键盘输入点东西吧' : '点击我获取焦点', - style: TextStyle(color: color), - ), - ); - } -} - -class KeyBoardBox extends StatelessWidget { - final KeyEvent event; - - const KeyBoardBox({super.key, required this.event}); - - @override - Widget build(BuildContext context) { - Color? color; - if (event is KeyDownEvent) { - color = Colors.blue; - } - if (event is KeyRepeatEvent) { - color = Colors.green; - } - if (event is KeyUpEvent) { - color = Colors.grey; - } - return Center( - child: Container( - margin: EdgeInsets.only(right: 4), - width: 32, - height: 32, - decoration: BoxDecoration(color: color), - alignment: Alignment.center, - child: Text( - event.logicalKey.keyLabel, - textAlign: TextAlign.center, - style: TextStyle(color: Colors.white, fontSize: 8, height: 1), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_de_DE.json deleted file mode 100644 index f002e2948..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "Lizenzseite", - "info": "Die Lizenzseite der Anwendung, auf der Anwendungssymbol, Anwendungsname, Anwendungsversionsnummer usw. angegeben werden können, der Rest wird automatisch von Flutter generiert.", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung der LicensePage", - "desc": [ - "【applicationIcon】 : Symbol oben links 【Widget】", - "【applicationVersion】 : Versionsnummer 【String】", - "【applicationName】 : Anwendungsname 【String】", - "【applicationLegalese】 : Rechtliche Hinweise der Anwendung 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_en_US.json deleted file mode 100644 index 7eb9f3d3c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "License Page", - "info": "The license page of the application, where you can specify information such as the application icon, application name, application version number, etc. Other details are automatically generated by Flutter.", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of LicensePage", - "desc": [ - "【applicationIcon】: Top-left icon 【Widget】", - "【applicationVersion】: Version number 【String】", - "【applicationName】: Application name 【String】", - "【applicationLegalese】: Application legalese 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_es_ES.json deleted file mode 100644 index eedee8dea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "Página de Licencia", - "info": "La página de licencia de la aplicación, donde se pueden especificar el icono de la aplicación, el nombre de la aplicación, el número de versión, etc., el resto es generado automáticamente por Flutter.", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de LicensePage", - "desc": [ - "【applicationIcon】 : Icono en la esquina superior izquierda 【Widget】", - "【applicationVersion】 : Número de versión 【String】", - "【applicationName】 : Nombre de la aplicación 【String】", - "【applicationLegalese】 : Aspectos legales de la aplicación 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_fr_FR.json deleted file mode 100644 index 47101fb52..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "Page de licence", - "info": "Page de licence de l'application, permettant de spécifier l'icône de l'application, le nom de l'application, le numéro de version, etc. Le reste est généré automatiquement par Flutter.", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de LicensePage", - "desc": [ - "【applicationIcon】 : Icône en haut à gauche 【Widget】", - "【applicationVersion】 : Numéro de version 【String】", - "【applicationName】 : Nom de l'application 【String】", - "【applicationLegalese】 : Législation de l'application 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_it_IT.json deleted file mode 100644 index e0c737bbb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "Pagina della Licenza", - "info": "Pagina della licenza dell'applicazione, dove è possibile specificare l'icona dell'applicazione, il nome dell'applicazione, il numero di versione dell'applicazione, ecc., il resto è generato automaticamente da Flutter.", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di LicensePage", - "desc": [ - "【applicationIcon】 : Icona in alto a sinistra 【Widget】", - "【applicationVersion】 : Numero di versione 【String】", - "【applicationName】 : Nome dell'applicazione 【String】", - "【applicationLegalese】 : Legale dell'applicazione 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ja_JP.json deleted file mode 100644 index 16e66bc6a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "ライセンスページ", - "info": "アプリのライセンスページ。アプリのアイコン、アプリ名、アプリのバージョン番号などを指定できます。その他はFlutterによって自動生成されます。", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LicensePageの基本的な使用法", - "desc": [ - "【applicationIcon】 : 左上のアイコン 【Widget】", - "【applicationVersion】 : バージョン番号 【String】", - "【applicationName】 : アプリ名 【String】", - "【applicationLegalese】 : アプリの法律文 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ko_KR.json deleted file mode 100644 index 1fb4a7426..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "라이센스 페이지", - "info": "앱의 라이센스 페이지, 앱 아이콘, 앱 이름, 앱 버전 번호 등을 지정할 수 있으며, 나머지는 Flutter에서 자동으로 생성됩니다.", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LicensePage 기본 사용", - "desc": [ - "【applicationIcon】 : 왼쪽 상단 아이콘 【Widget】", - "【applicationVersion】 : 버전 번호 【String】", - "【applicationName】 : 앱 이름 【String】", - "【applicationLegalese】 : 앱 법률 문구 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_pt_PT.json deleted file mode 100644 index fcdce6a90..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "Página de Licença", - "info": "Página de licença da aplicação, onde pode especificar o ícone da aplicação, o nome da aplicação, o número da versão da aplicação, entre outras informações, geradas automaticamente pelo Flutter.", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico da LicensePage", - "desc": [ - "【applicationIcon】 : Ícone no canto superior esquerdo 【Widget】", - "【applicationVersion】 : Número da versão 【String】", - "【applicationName】 : Nome da aplicação 【String】", - "【applicationLegalese】 : Legalidade da aplicação 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ru_RU.json deleted file mode 100644 index 069c22b45..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "Страница лицензии", - "info": "Страница лицензии приложения, где можно указать значок приложения, имя приложения, версию приложения и другую информацию, остальное автоматически генерируется Flutter.", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование LicensePage", - "desc": [ - "【applicationIcon】 : Иконка в верхнем левом углу 【Widget】", - "【applicationVersion】 : Версия 【String】", - "【applicationName】 : Имя приложения 【String】", - "【applicationLegalese】 : Юридическая информация приложения 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_zh-CN.json deleted file mode 100644 index 56434b383..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 145, - "name": "LicensePage", - "localName": "证书页", - "info": "应用的证书页,可指定应用图标、应用名、应用版本号等信息,其他由Flutter自动生成。", - "lever": 1, - "family": 1, - "linkIds": [ - 130, - 193 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LicensePage基本使用", - "desc": [ - "【applicationIcon】 : 左上图标 【Widget】", - "【applicationVersion】 : 版本号 【String】", - "【applicationName】 : 应用名 【String】", - "【applicationLegalese】 : 应用律术 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/node1_base.dart deleted file mode 100644 index 90c27cc41..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LicensePage/node1_base.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomLicensePage extends StatelessWidget { - const CustomLicensePage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: 400, - child: const LicensePage( - applicationIcon: FlutterLogo(), - applicationVersion: 'v0.0.1', - applicationName: 'Flutter Unit', - applicationLegalese: 'Copyright© 2018-2024 张风捷特烈', - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_de_DE.json deleted file mode 100644 index be736cf93..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "Horizontaler Fortschritt", - "info": "Eine lineare Fortschrittsanzeige, bei der Eigenschaften wie Farbe und Fortschritt angegeben werden können. Wenn der Wert null ist, dreht sie sich ununterbrochen.", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von LinearProgressIndicator", - "desc": [ - "【value】 : Fortschritt 【double】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【valueColor】 : Fortschrittsfarbe 【Animation】", - " Wenn der Wert null ist, wird er kontinuierlich wiederholt" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_en_US.json deleted file mode 100644 index a8b734250..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "Horizontal Progress", - "info": "A linear progress display that can specify properties such as color and progress. It will keep spinning when the value is null.", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of LinearProgressIndicator", - "desc": [ - "【value】: Progress 【double】", - "【backgroundColor】: Background Color 【Color】", - "【valueColor】: Progress Color 【Animation】", - " It will keep looping when the value is null" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_es_ES.json deleted file mode 100644 index b1dc370c8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "Progreso horizontal", - "info": "Indicador de progreso lineal, se pueden especificar propiedades como el color, el progreso, etc. Si el valor es nulo, girará continuamente.", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de LinearProgressIndicator", - "desc": [ - "【value】 : Progreso 【double】", - "【backgroundColor】 : Color de fondo 【Color】", - "【valueColor】 : Color del progreso 【Animation】", - " Si el valor es nulo, girará continuamente" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_fr_FR.json deleted file mode 100644 index 931656eac..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "Progression horizontale", - "info": "Affichage de progression linéaire, peut spécifier des propriétés telles que la couleur, la progression, etc. Tourne en continu lorsque la valeur est nulle.", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de LinearProgressIndicator", - "desc": [ - "【value】 : Progression 【double】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【valueColor】 : Couleur de progression 【Animation】", - " Tourne en continu lorsque la valeur est nulle" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_it_IT.json deleted file mode 100644 index 49eb97e2a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "Progresso Orizzontale", - "info": "Visualizzazione del progresso in linea retta, è possibile specificare attributi come colore e progresso. Quando il valore è null, continua a ruotare.", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di LinearProgressIndicator", - "desc": [ - "【value】 : Progresso 【double】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【valueColor】 : Colore del progresso 【Animation】", - " Quando il valore è null, continua a ciclare" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ja_JP.json deleted file mode 100644 index 18b7db38d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "水平プログレス", - "info": "直線型の進捗表示で、色や進捗などの属性を指定できます。valueがnullの場合は回転し続けます。", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LinearProgressIndicatorの基本使用", - "desc": [ - "【value】 : 進捗 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【valueColor】 : 進捗色 【Animation】", - " valueがnullの場合はループし続けます" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ko_KR.json deleted file mode 100644 index 51efe73c6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "수평 진행률", - "info": "직선형 진행률 표시, 색상, 진행률 등 속성을 지정할 수 있습니다. value가 null일 경우 계속 회전합니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LinearProgressIndicator 기본 사용", - "desc": [ - "【value】 : 진행률 【double】", - "【backgroundColor】 : 배경색 【Color】", - "【valueColor】 : 진행률 색상 【Animation】", - " value가 null일 경우 계속 반복" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_pt_PT.json deleted file mode 100644 index bebd5b714..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "Progresso Horizontal", - "info": "Exibição de progresso em linha reta, pode especificar atributos como cor, progresso, etc. Quando o valor for null, ele girará continuamente.", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do LinearProgressIndicator", - "desc": [ - "【value】 : Progresso 【double】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【valueColor】 : Cor do progresso 【Animation】", - " Quando o valor for null, ele girará continuamente" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ru_RU.json deleted file mode 100644 index 8adec3c3f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "Горизонтальный прогресс", - "info": "Линейный индикатор прогресса, можно указать цвет, прогресс и другие свойства. Если значение value равно null, индикатор будет вращаться бесконечно.", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Базовое использование LinearProgressIndicator", - "desc": [ - "【value】 : Прогресс 【double】", - "【backgroundColor】 : Цвет фона 【Color】", - "【valueColor】 : Цвет прогресса 【Animation】", - " Если значение value равно null, индикатор будет вращаться бесконечно" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_zh-CN.json deleted file mode 100644 index 110a08782..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 47, - "name": "LinearProgressIndicator", - "localName": "水平进度", - "info": "直线型的进度显示,可指定颜色、进度等属性。value为null时会不停旋转。", - "lever": 3, - "family": 1, - "linkIds": [ - 46, - 48 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LinearProgressIndicator基本使用", - "desc": [ - "【value】 : 进度 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【valueColor】 : 进度颜色 【Animation】", - " value为null时会不停循环" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/node1_base.dart deleted file mode 100644 index c7d770f96..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LinearProgressIndicator/node1_base.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomLinearProgressIndicator extends StatefulWidget { - const CustomLinearProgressIndicator({Key? key}) : super(key: key); - - @override - _CustomLinearProgressIndicatorState createState() => - _CustomLinearProgressIndicatorState(); -} - -class _CustomLinearProgressIndicatorState - extends State { - List data = [0.2, 0.4, 0.6, 0.8, null]; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: data - .map((e) => SizedBox( - width: 50, - height: 3, - child:LinearProgressIndicator( - value: e, - backgroundColor: Colors.grey.withAlpha(33), - valueColor: const AlwaysStoppedAnimation(Colors.orange), - ), - )) - .toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_de_DE.json deleted file mode 100644 index 3f8c2dd18..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "Radliste", - "info": "Hochwertige zylindrische Scroll-Liste, äußerst raffiniert, ermöglicht die Angabe von Eigenschaften wie Höhe, Perspektive, Kompression usw. und empfängt Ereignisse bei der Auswahl während des Scrollens.", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ListWheelScrollView", - "desc": [ - "【children】 : Liste der Unterkomponenten 【List】", - "【perspective】 : Perspektive 【double】", - "【itemExtent】 : Höhe des Elements 【EdgeInsets】", - "【onSelectedItemChanged】 : Rückruf bei Auswahl 【ValueChanged 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_en_US.json deleted file mode 100644 index f9958d8d2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "Wheel List", - "info": "A high-end cylindrical sliding list, exquisitely designed, allowing you to specify properties such as item height, perspective, and extrusion, and receive selection events during scrolling.", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ListWheelScrollView", - "desc": [ - "【children】: List of child components 【List】", - "【perspective】: Perspective 【double】", - "【itemExtent】: Item height 【EdgeInsets】", - "【onSelectedItemChanged】: Selection callback 【ValueChanged】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_es_ES.json deleted file mode 100644 index 740eaf9ae..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "Lista de rueda de desplazamiento", - "info": "Una lista de desplazamiento cilíndrica de alta gama, muy ingeniosa, permite especificar propiedades como la altura del ítem, la perspectiva, la compresión, etc., y recibe eventos de selección al deslizar.", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ListWheelScrollView", - "desc": [ - "【children】 : Lista de componentes hijos 【List】", - "【perspective】 : Grado de perspectiva 【double】", - "【itemExtent】 : Altura del ítem 【EdgeInsets】", - "【onSelectedItemChanged】 : Callback de selección 【ValueChanged 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_fr_FR.json deleted file mode 100644 index db5f6631e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "Liste à roulette", - "info": "Une liste de défilement cylindrique haut de gamme, très ingénieuse, permettant de spécifier des propriétés telles que la hauteur des éléments, la perspective, la compression, etc., et recevant des événements de sélection lors du défilement.", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ListWheelScrollView", - "desc": [ - "【children】 : Liste des composants enfants 【List】", - "【perspective】 : Degré de perspective 【double】", - "【itemExtent】 : Hauteur de l'élément 【EdgeInsets】", - "【onSelectedItemChanged】 : Rappel de sélection 【ValueChanged】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_it_IT.json deleted file mode 100644 index 4ba379f00..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "Lista a rotella", - "info": "Una lista di scorrimento cilindrica di alto livello, molto raffinata, con la possibilità di specificare proprietà come l'altezza degli item, la prospettiva, la compressione, e di ricevere eventi di selezione durante lo scorrimento.", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ListWheelScrollView", - "desc": [ - "【children】 : Lista dei componenti figli 【List】", - "【perspective】 : Prospettiva 【double】", - "【itemExtent】 : Altezza dell'item 【EdgeInsets】", - "【onSelectedItemChanged】 : Callback di selezione 【ValueChanged 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ja_JP.json deleted file mode 100644 index 225fb0424..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "ホイールリスト", - "info": "高級感あふれる円柱状のスライドリストで、精巧な仕様です。アイテムの高さ、パースペクティブ、圧縮などの属性を指定でき、スライド時の選択イベントを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListWheelScrollViewの基本使用", - "desc": [ - "【children】 : 子コンポーネントリスト 【List】", - "【perspective】 : パースペクティブ 【double】", - "【itemExtent】 : アイテムの高さ 【EdgeInsets】", - "【onSelectedItemChanged】 : 選択コールバック 【ValueChanged 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ko_KR.json deleted file mode 100644 index 48a86a827..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "휠 리스트", - "info": "고급스러운 원통형 슬라이드 리스트, 정교함이 가득하며, 아이템 높이, 원근감, 압축 등 속성을 지정할 수 있고, 슬라이드 시 선택 이벤트를 받습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListWheelScrollView 기본 사용", - "desc": [ - "【children】 : 자식 위젯 리스트 【List】", - "【perspective】 : 원근감 【double】", - "【itemExtent】 : 아이템 높이 【EdgeInsets】", - "【onSelectedItemChanged】 : 선택 콜백 【ValueChanged 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_pt_PT.json deleted file mode 100644 index 7755454f7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "Lista de Rolagem de Roda", - "info": "Uma lista de rolagem cilíndrica de alta classe, cheia de sofisticação, permite especificar propriedades como altura do item, perspetiva, esmagamento, e recebe eventos de seleção durante a rolagem.", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ListWheelScrollView", - "desc": [ - "【children】 : Lista de componentes filhos 【List】", - "【perspective】 : Grau de perspetiva 【double】", - "【itemExtent】 : Altura do item 【EdgeInsets】", - "【onSelectedItemChanged】 : Callback de seleção 【ValueChanged 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ru_RU.json deleted file mode 100644 index 204c580c4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "Колесо списка", - "info": "Высококлассный цилиндрический список с прокруткой, изысканный и утонченный, позволяет задавать такие свойства, как высота элемента, перспектива, сжатие и т.д., принимает события выбора при прокрутке.", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ListWheelScrollView", - "desc": [ - "【children】 : Список дочерних компонентов 【List】", - "【perspective】 : Перспектива 【double】", - "【itemExtent】 : Высота элемента 【EdgeInsets】", - "【onSelectedItemChanged】 : Обратный вызов при выборе 【ValueChanged 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_zh-CN.json deleted file mode 100644 index 7b9117dc3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 179, - "name": "ListWheelScrollView", - "localName": "滚轮列表", - "info": "高大上的柱面滑动列表,精妙十足,可指定item高度、透视、挤压等属性,接收滑动时选中事件。", - "lever": 4, - "family": 1, - "linkIds": [ - 139, - 291 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListWheelScrollView基本使用", - "desc": [ - "【children】 : 子组件列表 【List】", - "【perspective】 : 透视度 【double】", - "【itemExtent】 : item高 【EdgeInsets】", - "【onSelectedItemChanged】 : 选中回调 【ValueChanged 】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/node1_base.dart deleted file mode 100644 index d3c253db7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ListWheelScrollView/node1_base.dart +++ /dev/null @@ -1,80 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class CustomListWheelScrollView extends StatefulWidget { - const CustomListWheelScrollView({Key? key}) : super(key: key); - - @override - _CustomListWheelScrollViewState createState() => - _CustomListWheelScrollViewState(); -} - -class _CustomListWheelScrollViewState extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - Color _color = Colors.blue; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildCircle(), - SizedBox( - height: 150, - width: 300, - child: ListWheelScrollView( - perspective: 0.006, - itemExtent: 50, - onSelectedItemChanged: (index) { - print('onSelectedItemChanged:$index'); - setState(() => _color = data[index]); - }, - children: data.map((color) => _buildItem(color)).toList(), - ), - ), - ], - ); - } - - Widget _buildCircle() => Container( - margin: const EdgeInsets.only(bottom: 5), - width: 30, - height: 30, - decoration: BoxDecoration(color: _color, shape: BoxShape.circle), - ); - - Widget _buildItem(Color color) { - return Container( - key: ValueKey(color) , - alignment: Alignment.center, - height: 50, - color: color, - child: Text( - colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_de_DE.json deleted file mode 100644 index e76332fe8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "Internationalisierung", - "info": "Stellt internationalisierte Ressourcen für Teilbaumknoten bereit, basierend auf der Implementierung von InheritedWidget. MaterialApp integriert diese Komponente intern, deren locale- und delegates-Parameter letztendlich für diese Komponente verwendet werden.", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Aktuelle Sprache abrufen", - "desc": [ - "Mit Localizations.localeOf(context) können die Locale-Dateninformationen der nächstgelegenen übergeordneten Localizations-Komponente basierend auf dem Kontext abgerufen werden." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_en_US.json deleted file mode 100644 index 6836b4789..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "Internationalization", - "info": "Provides internationalization resources for subtree nodes, implemented with the underlying dependency on InheritedWidget. The MaterialApp internally integrates this component, and its locale and delegates parameters are ultimately used for this component.", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Get Current Language", - "desc": [ - "Through Localizations.localeOf(context), you can retrieve the Locale data information stored in the nearest upper-level Localizations component based on the context." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_es_ES.json deleted file mode 100644 index 60f1de634..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "Internacionalización", - "info": "Proporciona recursos de internacionalización para los nodos del subárbol, implementado en el fondo con InheritedWidget. MaterialApp ya integra este componente internamente, y sus parámetros locale y delegates se utilizan finalmente en este componente.", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Obtener el idioma actual", - "desc": [ - "A través de Localizations.localeOf(context) se puede obtener la información de Locale almacenada en el componente Localizations más cercano en el contexto." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_fr_FR.json deleted file mode 100644 index ede448266..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "Internationalisation", - "info": "Fournit des ressources d'internationalisation pour les nœuds de sous-arbre, implémenté en s'appuyant sur InheritedWidget. MaterialApp intègre déjà ce composant en interne, ses paramètres locale et delegates sont finalement utilisés pour ce composant.", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Obtenir la langue actuelle", - "desc": [ - "Avec Localizations.localeOf(context), vous pouvez obtenir les informations de Locale stockées dans le composant Localizations le plus proche en fonction du contexte." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_it_IT.json deleted file mode 100644 index 753b5da43..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "Internazionalizzazione", - "info": "Fornisce risorse di internazionalizzazione per i nodi del sottoalbero, implementato tramite InheritedWidget. Questo componente è già integrato all'interno di MaterialApp, e i parametri locale e delegates vengono utilizzati per questo componente.", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Ottieni la lingua corrente", - "desc": [ - "Utilizzando Localizations.localeOf(context), è possibile ottenere le informazioni di Locale memorizzate nel componente Localizations più vicino in base al contesto." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ja_JP.json deleted file mode 100644 index ab2dee74d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "国際化", - "info": "サブツリーノードに国際化リソースを提供し、内部では InheritedWidget に依存して実装されています。MaterialApp 内部ではこのコンポーネントが統合されており、その locale と delegates パラメータは最終的にこのコンポーネントに使用されます。", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "現在の言語を取得", - "desc": [ - "Localizations.localeOf(context) を使用して、コンテキストに基づいて最も近い上位の Localizations コンポーネントに保存されている Locale データ情報を取得できます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ko_KR.json deleted file mode 100644 index 046365c4d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "국제화", - "info": "하위 트리 노드에 국제화 리소스를 제공하며, 내부적으로 InheritedWidget에 의존하여 구현됩니다. MaterialApp 내부에 이 컴포넌트가 통합되어 있으며, locale 및 delegates 매개변수는 최종적으로 이 컴포넌트에 사용됩니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "현재 언어 가져오기", - "desc": [ - "Localizations.localeOf(context)를 통해 컨텍스트에서 가장 가까운 상위 Localizations 컴포넌트에 저장된 Locale 데이터 정보를 가져올 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_pt_PT.json deleted file mode 100644 index dc911f179..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "Internacionalização", - "info": "Fornece recursos de internacionalização para os nós da subárvore, dependendo da implementação do InheritedWidget. O MaterialApp já integra este componente internamente, e os parâmetros locale e delegates são usados ​​finalmente para este componente.", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Obter idioma atual", - "desc": [ - "Através de Localizations.localeOf(context), é possível obter as informações de Locale armazenadas no componente Localizations mais próximo com base no contexto." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ru_RU.json deleted file mode 100644 index 2f1d22dba..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "Интернационализация", - "info": "Предоставляет ресурсы интернационализации для поддеревьев, реализовано на основе InheritedWidget. MaterialApp уже интегрирует этот компонент, его параметры locale и delegates в конечном итоге используются этим компонентом.", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Получить текущий язык", - "desc": [ - "С помощью Localizations.localeOf(context) можно получить данные Locale, хранящиеся в ближайшем верхнем компоненте Localizations, на основе контекста." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_zh-CN.json deleted file mode 100644 index c61848f0e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 290, - "name": "Localizations", - "localName": "国际化", - "info": "为子树节点提供国际化资源,底层依赖 InheritedWidget 实现。 MaterialApp 内部已集成该组件,其 locale 和 delegates 参数最终用于该组件。", - "lever": 4, - "family": 1, - "linkIds": [ - 65, - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "获取当前语言", - "desc": [ - "通过 Localizations.localeOf(context) 可以根据上下文获取最近上层的 Localizations 组件存储的 Locale 数据信息。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/Localizations/node1.dart deleted file mode 100644 index 16c98c8c9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Localizations/node1.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:flutter/material.dart'; - -class LocalizationsDemo1 extends StatelessWidget { - const LocalizationsDemo1({super.key}); - - @override - Widget build(BuildContext context) { - Locale locale = Localizations.localeOf(context); - return Text('Locale: ${locale.toString()}'); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_de_DE.json deleted file mode 100644 index a20e742e0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_de_DE.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "Ziel ziehen", - "info": "Lassen Sie die Komponente bei langem Drücken auf der Oberfläche frei ziehen, und speichern Sie Daten eines generischen Typs T. Wird normalerweise in Kombination mit DragTarget verwendet, um den Zieheffekt zu erzielen.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LongPressDraggable mit DragTarget kombinieren", - "desc": [ - "【child】 : Kind 【Widget】", - "【feedback】 : Kind beim Ziehen 【Widget】", - "【axis】 : Achse ziehen 【Axis】", - "【data】 : Daten 【T】", - "【onDragStarted】 : Ziehen beginnen 【Function()】", - "【onDragEnd】 : Ziehen beenden 【Function(DraggableDetails)】", - "【onDragCompleted】 : Ziehen abgeschlossen 【Function()】", - "【onDraggableCanceled】 : Ziehen abbrechen 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_en_US.json deleted file mode 100644 index 7119db040..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_en_US.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "Drag Target", - "info": "Allows the component to be dragged anywhere on the interface when long-pressed, and can store data of a generic type T. It is usually used in combination with DragTarget to achieve the drag effect.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LongPressDraggable used with DragTarget", - "desc": [ - "【child】 : child 【Widget】", - "【feedback】 : child during drag 【Widget】", - "【axis】 : axis of drag 【Axis】", - "【data】 : data 【T】", - "【onDragStarted】 : start drag 【Function()】", - "【onDragEnd】 : end drag 【Function(DraggableDetails)】", - "【onDragCompleted】 : drag completed 【Function()】", - "【onDraggableCanceled】 : drag canceled 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_es_ES.json deleted file mode 100644 index b1d47365d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_es_ES.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "Objetivo de arrastre", - "info": "Permite que el componente se arrastre libremente en la interfaz cuando se mantiene presionado, y puede almacenar datos de un tipo genérico T. Generalmente se usa en combinación con DragTarget para completar el efecto de arrastre.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso combinado de LongPressDraggable y DragTarget", - "desc": [ - "【child】 : Hijo 【Widget】", - "【feedback】 : Hijo durante el arrastre 【Widget】", - "【axis】 : Eje de arrastre 【Axis】", - "【data】 : Datos 【T】", - "【onDragStarted】 : Inicio del arrastre 【Function()】", - "【onDragEnd】 : Fin del arrastre 【Function(DraggableDetails)】", - "【onDragCompleted】 : Arrastre completado 【Function()】", - "【onDraggableCanceled】 : Arrastre cancelado 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_fr_FR.json deleted file mode 100644 index 4a4e46ad9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_fr_FR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "Cible de glissement", - "info": "Permet à un composant d'être glissé n'importe où sur l'interface lorsqu'il est pressé longuement, peut contenir une donnée de type générique T. Généralement utilisé en combinaison avec DragTarget pour réaliser l'effet de glissement.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation conjointe de LongPressDraggable et DragTarget", - "desc": [ - "【child】 : Enfant 【Widget】", - "【feedback】 : Enfant pendant le glissement 【Widget】", - "【axis】 : Axe de glissement 【Axis】", - "【data】 : Données 【T】", - "【onDragStarted】 : Début du glissement 【Function()】", - "【onDragEnd】 : Fin du glissement 【Function(DraggableDetails)】", - "【onDragCompleted】 : Glissement terminé 【Function()】", - "【onDraggableCanceled】 : Glissement annulé 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_it_IT.json deleted file mode 100644 index a8a08abf9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_it_IT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "Obiettivo trascinabile", - "info": "Permette di trascinare il componente sull'interfaccia quando viene premuto a lungo, può contenere un dato di tipo generico T. Solitamente utilizzato in combinazione con DragTarget per completare l'effetto di trascinamento.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso combinato di LongPressDraggable e DragTarget", - "desc": [ - "【child】 : figlio 【Widget】", - "【feedback】 : figlio durante il trascinamento 【Widget】", - "【axis】 : asse di trascinamento 【Axis】", - "【data】 : dati 【T】", - "【onDragStarted】 : inizio trascinamento 【Function()】", - "【onDragEnd】 : fine trascinamento 【Function(DraggableDetails)】", - "【onDragCompleted】 : trascinamento completato 【Function()】", - "【onDraggableCanceled】 : trascinamento annullato 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ja_JP.json deleted file mode 100644 index facd28a22..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ja_JP.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "ドラッグターゲット", - "info": "長押しでコンポーネントをインターフェース上で自由にドラッグできるようにし、ジェネリック型Tのデータを格納できます。通常、DragTargetと組み合わせてドラッグ効果を実現します。", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LongPressDraggableとDragTargetの連携", - "desc": [ - "【child】 : 子 【Widget】", - "【feedback】 : ドラッグ時の子 【Widget】", - "【axis】 : ドラッグ軸 【Axis】", - "【data】 : データ 【T】", - "【onDragStarted】 : ドラッグ開始 【Function()】", - "【onDragEnd】 : ドラッグ終了 【Function(DraggableDetails)】", - "【onDragCompleted】 : ドラッグ完了 【Function()】", - "【onDraggableCanceled】 : ドラッグキャンセル 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ko_KR.json deleted file mode 100644 index 4294fc42e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ko_KR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "드래그 대상", - "info": "길게 누르면 컴포넌트를 화면에서 자유롭게 드래그할 수 있으며, 제네릭 T 타입의 데이터를 저장할 수 있습니다. 일반적으로 DragTarget과 조합하여 드래그 효과를 완성합니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LongPressDraggable과 DragTarget 함께 사용", - "desc": [ - "【child】 : 자식 【Widget】", - "【feedback】 : 드래그 시 자식 【Widget】", - "【axis】 : 드래그 축 【Axis】", - "【data】 : 데이터 【T】", - "【onDragStarted】 : 드래그 시작 【Function()】", - "【onDragEnd】 : 드래그 종료 【Function(DraggableDetails)】", - "【onDragCompleted】 : 드래그 완료 【Function()】", - "【onDraggableCanceled】 : 드래그 취소 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_pt_PT.json deleted file mode 100644 index 818aee013..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_pt_PT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "Alvo de Arrastar", - "info": "Permite que um componente seja arrastado livremente na interface quando pressionado por um longo tempo, podendo armazenar um dado do tipo genérico T. Geralmente usado em combinação com DragTarget para completar o efeito de arrastar.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Conjunto de LongPressDraggable e DragTarget", - "desc": [ - "【child】 : Filho 【Widget】", - "【feedback】 : Filho durante o arrasto 【Widget】", - "【axis】 : Eixo de arrasto 【Axis】", - "【data】 : Dados 【T】", - "【onDragStarted】 : Início do arrasto 【Function()】", - "【onDragEnd】 : Fim do arrasto 【Function(DraggableDetails)】", - "【onDragCompleted】 : Arrasto concluído 【Function()】", - "【onDraggableCanceled】 : Arrasto cancelado 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ru_RU.json deleted file mode 100644 index 611d49af9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_ru_RU.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "Цель для перетаскивания", - "info": "Позволяет компоненту перетаскиваться по интерфейсу при длительном нажатии, может хранить данные типа T. Обычно используется в сочетании с DragTarget для достижения эффекта перетаскивания.", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование LongPressDraggable с DragTarget", - "desc": [ - "【child】 : Дочерний элемент 【Widget】", - "【feedback】 : Дочерний элемент при перетаскивании 【Widget】", - "【axis】 : Ось перетаскивания 【Axis】", - "【data】 : Данные 【T】", - "【onDragStarted】 : Начало перетаскивания 【Function()】", - "【onDragEnd】 : Конец перетаскивания 【Function(DraggableDetails)】", - "【onDragCompleted】 : Перетаскивание завершено 【Function()】", - "【onDraggableCanceled】 : Перетаскивание отменено 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_zh-CN.json deleted file mode 100644 index 8f9210bab..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/desc_zh-CN.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 105, - "name": "LongPressDraggable", - "localName": "拖拽目标", - "info": "长按时让组件在界面上任意拖拽,可存放一个泛型T的数据。通常和DragTarget组合使用,来完成拖拽效果。", - "lever": 4, - "family": 1, - "linkIds": [ - 103, - 104 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "LongPressDraggable与DragTarget联用", - "desc": [ - "【child】 : 孩子 【Widget】", - "【feedback】 : 拖拽时的孩子 【Widget】", - "【axis】 : 拖动的轴 【Axis】", - "【data】 : 数据 【T】", - "【onDragStarted】 : 开始拖拽 【Function()】", - "【onDragEnd】 : 结束拖拽 【Function(DraggableDetails)】", - "【onDragCompleted】 : 拖拽完成 【Function()】", - "【onDraggableCanceled】 : 拖拽取消 【Function(Velocity,Offset)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/node1_base.dart deleted file mode 100644 index c969744ab..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/LongPressDraggable/node1_base.dart +++ /dev/null @@ -1,86 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class CustomLongPressDraggable extends StatefulWidget { - const CustomLongPressDraggable({Key? key}) : super(key: key); - - @override - _CustomLongPressDraggableState createState() => - _CustomLongPressDraggableState(); -} - -class _CustomLongPressDraggableState extends State { - Color _color = Colors.grey; - String _info = 'DragTarget'; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Wrap( - children: _buildColors(), - spacing: 10, - ), - const SizedBox(height: 20), - _buildDragTarget() - ], - ); - } - - final List colors = const [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green, - Colors.orange, - Colors.purple, - Colors.cyanAccent - ]; - - List _buildColors() => colors - .map( - (e) => LongPressDraggable( - onDragStarted: () => setState(() => _info = '开始拖拽'), - onDragEnd: (d) => setState(() => _info = '结束拖拽'), - onDragCompleted: () => _info = '拖拽完成', - onDraggableCanceled: (v, o) => _info = '拖拽取消', - child: Container( - width: 30, - height: 30, - alignment: Alignment.center, - child: Text( - colors.indexOf(e).toString(), - style: const TextStyle( - color: Colors.white, fontWeight: FontWeight.bold), - ), - decoration: BoxDecoration(color: e, shape: BoxShape.circle), - ), - data: e, - feedback: Container( - width: 25, - height: 25, - decoration: BoxDecoration(color: e, shape: BoxShape.circle), - )), - ) - .toList(); - - Widget _buildDragTarget() { - return DragTarget( - onAccept: (data) => setState(() { - _info='onAccept'; - _color = data; - }), - builder: (context, candidateData, rejectedData) => Container( - width: 150.0, - height: 50.0, - color: _color, - child: Center( - child: Text( - _info, - style: const TextStyle(color: Colors.white), - ), - ))); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_de_DE.json deleted file mode 100644 index c6036f689..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "Materialkomponente", - "info": "Der führende Vertreter von Material-Stil-Komponenten, das Herzstück. Kann Attribute wie Farbe, Schattentiefe, Typ, Schattenfarbe, Form usw. festlegen.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Material", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【type】 : Typ 【MaterialType】", - "【elevation】 : Schattentiefe 【double】", - "【shadowColor】 : Schattenfarbe 【Color】", - "【color】 : Farbe 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Shape-Attribut von Material", - "desc": [ - "【shape】 : Form 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_en_US.json deleted file mode 100644 index 13bbe4f29..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "Material Component", - "info": "The leader and core of Material style components. You can specify properties such as color, elevation, type, shadow color, shape, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Material", - "desc": [ - "【child】 : Child Component 【Widget】", - "【type】 : Type 【MaterialType】", - "【elevation】 : Elevation 【double】", - "【shadowColor】 : Shadow Color 【Color】", - "【color】 : Color 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Shape Property of Material", - "desc": [ - "【shape】 : Shape 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_es_ES.json deleted file mode 100644 index 06f9ae7f9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "Componente de Material", - "info": "El líder y núcleo espiritual de los componentes de estilo Material. Puede especificar atributos como color, profundidad de sombra, tipo, color de sombra, forma, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Material", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【type】 : Tipo 【MaterialType】", - "【elevation】 : Profundidad de sombra 【double】", - "【shadowColor】 : Color de sombra 【Color】", - "【color】 : Color 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Propiedad shape de Material", - "desc": [ - "【shape】 : Forma 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_fr_FR.json deleted file mode 100644 index b5694ce2e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "Composant Matériel", - "info": "Le leader des composants de style Material, l'âme centrale. Peut spécifier des attributs tels que la couleur, la profondeur de l'ombre, le type, la couleur de l'ombre, la forme, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Material", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【type】 : Type 【MaterialType】", - "【elevation】 : Profondeur de l'ombre 【double】", - "【shadowColor】 : Couleur de l'ombre 【Color】", - "【color】 : Couleur 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Attribut de forme de Material", - "desc": [ - "【shape】 : Forme 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_it_IT.json deleted file mode 100644 index 695b1f790..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "Componente Material", - "info": "Leader dei componenti in stile Material, cuore e anima. Puoi specificare attributi come colore, profondità dell'ombra, tipo, colore dell'ombra, forma, ecc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di Material", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【type】 : Tipo 【MaterialType】", - "【elevation】 : Profondità dell'ombra 【double】", - "【shadowColor】 : Colore dell'ombra 【Color】", - "【color】 : Colore 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Attributo shape di Material", - "desc": [ - "【shape】 : Forma 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ja_JP.json deleted file mode 100644 index 1e988e452..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "材料コンポーネント", - "info": "Materialスタイルコンポーネントのリーダー、コアとなる存在。色、影の深さ、タイプ、影の色、形状などの属性を指定できます。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Materialの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【type】 : タイプ 【MaterialType】", - "【elevation】 : 影の深さ 【double】", - "【shadowColor】 : 影の色 【Color】", - "【color】 : 色 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Materialのshape属性", - "desc": [ - "【shape】 : 形状 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ko_KR.json deleted file mode 100644 index 9b9337d4f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "재료 컴포넌트", - "info": "Material 스타일 컴포넌트의 선두주자, 핵심 요소. 색상, 그림자 깊이, 유형, 그림자 색상, 모양 등 속성을 지정할 수 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Material 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【type】 : 유형 【MaterialType】", - "【elevation】 : 그림자 깊이 【double】", - "【shadowColor】 : 그림자 색상 【Color】", - "【color】 : 색상 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Material의 shape 속성", - "desc": [ - "【shape】 : 모양 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_pt_PT.json deleted file mode 100644 index d4379be64..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "Componente de Material", - "info": "O líder e núcleo espiritual dos componentes de estilo Material. Pode especificar atributos como cor, profundidade de sombra, tipo, cor da sombra, forma, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Material", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【type】 : Tipo 【MaterialType】", - "【elevation】 : Profundidade de sombra 【double】", - "【shadowColor】 : Cor da sombra 【Color】", - "【color】 : Cor 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Propriedade shape do Material", - "desc": [ - "【shape】 : Forma 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ru_RU.json deleted file mode 100644 index c047f3f2f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "Компонент материала", - "info": "Лидер компонентов в стиле Material, ядро и душа. Можно указать такие атрибуты, как цвет, глубина тени, тип, цвет тени, форма и другие.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Material", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【type】 : Тип 【MaterialType】", - "【elevation】 : Глубина тени 【double】", - "【shadowColor】 : Цвет тени 【Color】", - "【color】 : Цвет 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Атрибут shape Material", - "desc": [ - "【shape】 : Форма 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_zh-CN.json deleted file mode 100644 index 9c232cab1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 160, - "name": "Material", - "localName": "材料组件", - "info": "Material风格组件的领军人物,灵魂核心。可指定颜色、影深、类型、阴影颜色、形状等属性。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Material基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【type】 : 类型 【MaterialType】", - "【elevation】 : 影深 【double】", - "【shadowColor】 : 阴影颜色 【Color】", - "【color】 : 颜色 【Color】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Material的shape属性", - "desc": [ - "【shape】 : 形状 【ShapeBorder】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Material/node1_base.dart deleted file mode 100644 index 3dec9b671..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/node1_base.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class CustomMaterial extends StatelessWidget { - const CustomMaterial({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - runSpacing: 10, - children: MaterialType.values.map((e) => _buildMaterial(e)).toList()); - } - - Material _buildMaterial(MaterialType type) => Material( - shadowColor: Colors.blue, - type: type, - color: Colors.orange, - elevation: 3, - child: Container( - alignment: Alignment.center, - width: 100, - height: 60, - child: Text( - type.toString().split('.')[1], - style: const TextStyle(color: Colors.black), - ), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Material/node2_shape.dart b/modules/widget_system/widgets/lib/StatefulWidget/Material/node2_shape.dart deleted file mode 100644 index d31d3c2cb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Material/node2_shape.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class ShapeMaterial extends StatelessWidget { - const ShapeMaterial({Key? key}) : super(key: key); - - final Map shapeMap = const { - 'BorderDirectional': BorderDirectional( - top: BorderSide( - color: Colors.white, - ), - start: BorderSide(color: Colors.black, width: 15), - bottom: BorderSide( - color: Colors.white, - )), - 'Border': Border( - top: BorderSide(width: 5.0, color: Color(0xFFDFDFDF)), - left: BorderSide(width: 5.0, color: Color(0xFFDFDFDF)), - right: BorderSide(width: 5.0, color: Color(0xFF7F7F7F)), - bottom: BorderSide(width: 5.0, color: Color(0xFF7F7F7F)), - ), - 'Circle': CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - 'RoundedRectangleBorder': RoundedRectangleBorder( - side: BorderSide(width: 1.0, color: Colors.black), - borderRadius: BorderRadius.all(Radius.circular(15))), - 'ContinuousRectangleBorder': ContinuousRectangleBorder( - side: BorderSide.none, - borderRadius: BorderRadius.all(Radius.circular(40.0)), - ) - }; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - runSpacing: 10, - children: shapeMap.keys.map((e) => _buildMaterial(e)).toList(), - ); - } - - Material _buildMaterial(String type) => Material( - shadowColor: Colors.blue, - shape: shapeMap[type], - color: Colors.orange, - elevation: 3, - textStyle: const TextStyle(color: Colors.white), - child: Container( - alignment: Alignment.center, - width: 300, - height: 60, - child: Text( - type, - ), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_de_DE.json deleted file mode 100644 index 54c459134..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Material-Anwendung", - "info": "Die oberste Komponente der Material-Anwendung, enthält Eigenschaften wie Routengenerator, Thema, Sprache, Startseite usw.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von MaterialApp", - "desc": [ - "【theme】 : Thema 【ThemeData】", - "【title】 : Titel in der Taskleiste 【String】", - "【debugShowCheckedModeBanner】 : Badge aktivieren 【bool】", - "【showPerformanceOverlay】 : Leistungsüberlagerung aktivieren 【bool】", - "【debugShowMaterialGrid】 : Raster aktivieren 【bool】", - "【onGenerateRoute】 : Routengenerator 【RouteFactory】", - "【home】 : Startseite 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_en_US.json deleted file mode 100644 index 94a88732b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Material Application", - "info": "The top-level component of a Material application, including properties such as route generator, theme, language, home page, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of MaterialApp", - "desc": [ - "【theme】 : Theme 【ThemeData】", - "【title】 : Taskbar Title 【String】", - "【debugShowCheckedModeBanner】 : Enable Badge 【bool】", - "【showPerformanceOverlay】 : Enable Performance Overlay 【bool】", - "【debugShowMaterialGrid】 : Enable Grid 【bool】", - "【onGenerateRoute】 : Route Generator 【RouteFactory】", - "【home】 : Home Page 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_es_ES.json deleted file mode 100644 index b994d6c27..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Aplicación Material", - "info": "Componente de nivel superior de la aplicación Material, que incluye propiedades como el generador de rutas, tema, idioma, página de inicio, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de MaterialApp", - "desc": [ - "【theme】 : Tema 【ThemeData】", - "【title】 : Título de la barra de tareas 【String】", - "【debugShowCheckedModeBanner】 : Activar insignia 【bool】", - "【showPerformanceOverlay】 : Activar superposición de rendimiento 【bool】", - "【debugShowMaterialGrid】 : Activar cuadrícula 【bool】", - "【onGenerateRoute】 : Generador de rutas 【RouteFactory】", - "【home】 : Página de inicio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_fr_FR.json deleted file mode 100644 index dae6e1a30..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Application Material", - "info": "Le composant de niveau supérieur de l'application Material, incluant des propriétés telles que le générateur de routes, le thème, la langue, la page d'accueil, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de MaterialApp", - "desc": [ - "【theme】 : Thème 【ThemeData】", - "【title】 : Titre de la barre des tâches 【String】", - "【debugShowCheckedModeBanner】 : Activer le badge 【bool】", - "【showPerformanceOverlay】 : Activer la superposition de performance 【bool】", - "【debugShowMaterialGrid】 : Activer la grille 【bool】", - "【onGenerateRoute】 : Générateur de routes 【RouteFactory】", - "【home】 : Page d'accueil 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_it_IT.json deleted file mode 100644 index 0c824a8c8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Applicazione Material", - "info": "Componente di primo livello per applicazioni Material, include proprietà come generatore di route, tema, lingua, homepage, ecc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di MaterialApp", - "desc": [ - "【theme】 : Tema 【ThemeData】", - "【title】 : Titolo della barra delle applicazioni 【String】", - "【debugShowCheckedModeBanner】 : Attiva badge 【bool】", - "【showPerformanceOverlay】 : Attiva overlay delle prestazioni 【bool】", - "【debugShowMaterialGrid】 : Attiva griglia 【bool】", - "【onGenerateRoute】 : Generatore di route 【RouteFactory】", - "【home】 : Homepage 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ja_JP.json deleted file mode 100644 index 207e1de51..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Materialアプリ", - "info": "Materialアプリのトップレベルのコンポーネントで、ルートジェネレータ、テーマ、言語、ホームページなどの属性を含みます。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialAppの基本使い方", - "desc": [ - "【theme】 : テーマ 【ThemeData】", - "【title】 : タスクバーのタイトル 【String】", - "【debugShowCheckedModeBanner】 : バッジを表示する 【bool】", - "【showPerformanceOverlay】 : パフォーマンスオーバーレイを表示する 【bool】", - "【debugShowMaterialGrid】 : グリッドを表示する 【bool】", - "【onGenerateRoute】 : ルートジェネレータ 【RouteFactory】", - "【home】 : ホームページ 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ko_KR.json deleted file mode 100644 index 420abe91d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Material 앱", - "info": "Material 앱의 최상위 컴포넌트로, 라우트 생성기, 테마, 언어, 홈페이지 등의 속성을 포함합니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialApp 기본 사용법", - "desc": [ - "【theme】 : 테마 【ThemeData】", - "【title】 : 작업 표시줄 제목 【String】", - "【debugShowCheckedModeBanner】 : 배지 활성화 【bool】", - "【showPerformanceOverlay】 : 성능 오버레이 활성화 【bool】", - "【debugShowMaterialGrid】 : 그리드 활성화 【bool】", - "【onGenerateRoute】 : 라우트 생성기 【RouteFactory】", - "【home】 : 홈페이지 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_pt_PT.json deleted file mode 100644 index faa156503..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Aplicação Material", - "info": "Componente de topo da aplicação Material, que inclui gerador de rotas, tema, idioma, página inicial, entre outros atributos.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do MaterialApp", - "desc": [ - "【theme】 : Tema 【ThemeData】", - "【title】 : Título da barra de tarefas 【String】", - "【debugShowCheckedModeBanner】 : Ativar insígnia 【bool】", - "【showPerformanceOverlay】 : Ativar sobreposição de desempenho 【bool】", - "【debugShowMaterialGrid】 : Ativar grelha 【bool】", - "【onGenerateRoute】 : Gerador de rotas 【RouteFactory】", - "【home】 : Página inicial 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ru_RU.json deleted file mode 100644 index 43e5975c1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Material приложение", - "info": "Верхний компонент Material приложения, включающий генератор маршрутов, тему, язык, домашнюю страницу и другие атрибуты.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование MaterialApp", - "desc": [ - "【theme】 : Тема 【ThemeData】", - "【title】 : Заголовок в панели задач 【String】", - "【debugShowCheckedModeBanner】 : Включить значок 【bool】", - "【showPerformanceOverlay】 : Включить наложение производительности 【bool】", - "【debugShowMaterialGrid】 : Включить сетку 【bool】", - "【onGenerateRoute】 : Генератор маршрутов 【RouteFactory】", - "【home】 : Домашняя страница 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_zh-CN.json deleted file mode 100644 index 57ba7ea55..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 65, - "name": "MaterialApp", - "localName": "Material应用", - "info": "Material应用的顶级组件,包含路由生成器、主题、语言、主页等属性。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialApp基本用法", - "desc": [ - "【theme】 : 主题 【ThemeData】", - "【title】 : 任务栏标题 【String】", - "【debugShowCheckedModeBanner】 : 开启角标 【bool】", - "【showPerformanceOverlay】 : 开启性能浮层 【bool】", - "【debugShowMaterialGrid】 : 开启网格 【bool】", - "【onGenerateRoute】 : 路由生成器 【RouteFactory】", - "【home】 : 主页 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/node1_base.dart deleted file mode 100644 index c7c61e555..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MaterialApp/node1_base.dart +++ /dev/null @@ -1,118 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-17 -/// contact me by email 1981462002@qq.com - -class MaterialAppDemo extends StatefulWidget { - const MaterialAppDemo({Key? key}) : super(key: key); - - @override - _WidgetsAppDemoState createState() => _WidgetsAppDemoState(); -} - -class _WidgetsAppDemoState extends State { - bool _debugShowCheckedModeBanner = false; - bool _showPerformanceOverlay = false; - bool _debugShowMaterialGrid = false; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - _buildSwitchers(), - SizedBox( - height: 250, - child: MaterialApp( - debugShowCheckedModeBanner: _debugShowCheckedModeBanner, - showPerformanceOverlay: _showPerformanceOverlay, - debugShowMaterialGrid: _debugShowMaterialGrid, - home: const HomePage(), - ), - ), - ], - ); - } - - Widget _buildSwitchers() { - return DefaultTextStyle( - style: const TextStyle(color: Colors.blue), - child: Wrap( - spacing: 10, - children: [ - Column( - children: [ - Switch( - value: _showPerformanceOverlay, - onChanged: (v) { - setState(() { - _showPerformanceOverlay = v; - }); - }, - ), - const Text('性能浮层') - ], - ), - Column( - children: [ - Switch( - value: _debugShowCheckedModeBanner, - onChanged: (v) { - setState(() { - _debugShowCheckedModeBanner = v; - }); - }, - ), - const Text('开启角标') - ], - ), - Column( - children: [ - Switch( - value: _debugShowMaterialGrid, - onChanged: (v) { - setState(() { - _debugShowMaterialGrid = v; - }); - }, - ), - const Text('开启网格') - ], - ) - ], - ), - ); - } -} - -class HomePage extends StatefulWidget { - const HomePage({Key? key}) : super(key: key); - - @override - _HomePageState createState() => _HomePageState(); -} - -class _HomePageState extends State { - var _count = 0; - - @override - Widget build(BuildContext context) { - return Scaffold( - body: Container( - alignment: const Alignment(0, 0.7), - child: Text( - '你点击了$_count次', - style: const TextStyle(fontSize: 18, color: Colors.blue), - ), - ), - floatingActionButton: FloatingActionButton( - child: const Icon(Icons.add), - onPressed: () { - setState(() { - _count++; - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_de_DE.json deleted file mode 100644 index c6265925a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "Kombinierbares Material", - "info": "Wird verwendet, um eine Liste von MergeableMaterialItem anzuzeigen, einschließlich MaterialSlice (Hauptteil) und MaterialGap (Trennlinie).", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von MergeableMaterial", - "desc": [ - "【elevation】 : Schattentiefe 【double】", - "【hasDividers】 : Gibt es Trennlinien 【bool】", - "【dividerColor】 : Farbe der Trennlinie 【Color】", - "【mainAxis】 : Achse 【Axis】", - "【children】 : Sammlung von Unterkomponenten 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_en_US.json deleted file mode 100644 index 8c6e9e0e2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "Mergeable Material", - "info": "Used to display a list of MergeableMaterialItem, including MaterialSlice (main body) and MaterialGap (separator).", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of MergeableMaterial", - "desc": [ - "【elevation】 : Shadow depth 【double】", - "【hasDividers】 : Whether there are dividers 【bool】", - "【dividerColor】 : Divider color 【Color】", - "【mainAxis】 : Axis direction 【Axis】", - "【children】 : Child components collection 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_es_ES.json deleted file mode 100644 index 871630a11..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "Material Fusionable", - "info": "Utilizado para mostrar una lista de MergeableMaterialItem, incluyendo MaterialSlice (cuerpo) y MaterialGap (separador).", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de MergeableMaterial", - "desc": [ - "【elevation】 : Profundidad de la sombra 【double】", - "【hasDividers】 : Si tiene líneas divisorias 【bool】", - "【dividerColor】 : Color de la línea divisoria 【Color】", - "【mainAxis】 : Eje principal 【Axis】", - "【children】 : Conjunto de componentes hijos 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_fr_FR.json deleted file mode 100644 index 005e06aea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "Matériau Fusionnable", - "info": "Utilisé pour afficher une liste de MergeableMaterialItem, comprenant MaterialSlice (corps principal) et MaterialGap (séparateur).", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de MergeableMaterial", - "desc": [ - "【elevation】 : Profondeur d'ombre 【double】", - "【hasDividers】 : Présence de lignes de séparation 【bool】", - "【dividerColor】 : Couleur de la ligne de séparation 【Color】", - "【mainAxis】 : Axe principal 【Axis】", - "【children】 : Ensemble de composants enfants 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_it_IT.json deleted file mode 100644 index 32e9b9d1d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "Materiale Unificabile", - "info": "Utilizzato per visualizzare una lista di MergeableMaterialItem, inclusi MaterialSlice (corpo) e MaterialGap (separazione).", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di MergeableMaterial", - "desc": [ - "【elevation】 : Profondità dell'ombra 【double】", - "【hasDividers】 : Presenza di linee divisorie 【bool】", - "【dividerColor】 : Colore della linea divisoria 【Color】", - "【mainAxis】 : Asse principale 【Axis】", - "【children】 : Insieme di componenti figli 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ja_JP.json deleted file mode 100644 index d62c71e38..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "マージ可能な材料", - "info": "MergeableMaterialItemのリストを表示するために使用され、MaterialSlice(本体)とMaterialGap(区切り)を含みます。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MergeableMaterialの基本使用", - "desc": [ - "【elevation】 : 影の深さ 【double】", - "【hasDividers】 : 区切り線があるかどうか 【bool】", - "【dividerColor】 : 区切り線の色 【Color】", - "【mainAxis】 : 軸方向 【Axis】", - "【children】 : 子コンポーネントセット 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ko_KR.json deleted file mode 100644 index 3a511350e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "병합 가능한 재료", - "info": "MergeableMaterialItem의 목록을 표시하는 데 사용되며, MaterialSlice(본체)와 MaterialGap(구분자)를 포함합니다.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MergeableMaterial 기본 사용법", - "desc": [ - "【elevation】 : 그림자 깊이 【double】", - "【hasDividers】 : 구분선 여부 【bool】", - "【dividerColor】 : 구분선 색상 【Color】", - "【mainAxis】 : 축 방향 【Axis】", - "【children】 : 하위 컴포넌트 집합 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_pt_PT.json deleted file mode 100644 index a0f50e44d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "Material Fundível", - "info": "Usado para exibir uma lista de MergeableMaterialItem, incluindo MaterialSlice (corpo) e MaterialGap (separador).", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do MergeableMaterial", - "desc": [ - "【elevation】 : Profundidade da sombra 【double】", - "【hasDividers】 : Se tem linhas divisórias 【bool】", - "【dividerColor】 : Cor da linha divisória 【Color】", - "【mainAxis】 : Eixo 【Axis】", - "【children】 : Conjunto de componentes filhos 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ru_RU.json deleted file mode 100644 index 6190e65dd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "Объединяемый материал", - "info": "Используется для отображения списка MergeableMaterialItem, включая MaterialSlice (основная часть) и MaterialGap (разделитель).", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование MergeableMaterial", - "desc": [ - "【elevation】 : Глубина тени 【double】", - "【hasDividers】 : Наличие разделителей 【bool】", - "【dividerColor】 : Цвет разделителя 【Color】", - "【mainAxis】 : Ось 【Axis】", - "【children】 : Набор дочерних компонентов 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_zh-CN.json deleted file mode 100644 index 67f725fee..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 261, - "name": "MergeableMaterial", - "localName": "可合并材料", - "info": "用于展示 MergeableMaterialItem 的列表,包括 MaterialSlice(主体) 和 MaterialGap(分隔) 。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MergeableMaterial基本使用", - "desc": [ - "【elevation】 : 影深 【double】", - "【hasDividers】 : 是否有分隔线 【bool】", - "【dividerColor】 : 分隔线颜色 【Color】", - "【mainAxis】 : 轴向 【Axis】", - "【children】 : 子组件集 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/node1_base.dart deleted file mode 100644 index 8c51e0757..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MergeableMaterial/node1_base.dart +++ /dev/null @@ -1,72 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class MergeableMaterialDemo extends StatefulWidget { - const MergeableMaterialDemo({Key? key}) : super(key: key); - - @override - _MergeableMaterialDemoState createState() => _MergeableMaterialDemoState(); -} - -class _MergeableMaterialDemoState extends State { - List items=[]; - - @override - void initState() { - super.initState(); - _init(20); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: SingleChildScrollView( - child: MergeableMaterial( - elevation: 1, - hasDividers: true, - dividerColor: Colors.red, - children: items, - ), - ), - ); - } - - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]! - ]; - - void _init(int count) { - for (int i = 0; i < count; i++) { - items.add(MaterialSlice( - key: ValueKey(i), - child: Container( - alignment: Alignment.center, - height: 60, - color: data[i % data.length], - child: Text(colorString(data[i % data.length])), - ))); - if(i!=count-1){ - items.add(MaterialGap( - key: ValueKey(i), - size: 5)); - } - } - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_de_DE.json deleted file mode 100644 index a98eb3c6c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_de_DE.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "Monatsauswahl", - "info": "Komponente zur Auswahl eines Monats mit integrierter Überwachung für den Wechsel zwischen den Monaten. Ermöglicht die Angabe des auszuwählenden Datumsbereichs, des ausgewählten Datums usw. und empfängt Ereignisse bei der Datumsauswahl.", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von MonthPicker", - "desc": [ - "【selectedDate】 : Ausgewähltes Datum 【DateTime】", - "【firstDate】 : Frühestes Datum 【DateTime】", - "【lastDate】 : Spätestes Datum 【DateTime】", - "【onChanged】 : Rückruf bei Klick 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker, die Monatsauswahl, wurde mit Flutter 3.0 aus dem Verkehr gezogen. Der Ersatz ist der CalendarDatePicker, der Kalenderauswahl.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_en_US.json deleted file mode 100644 index ef72e4a6d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_en_US.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "Month Picker", - "info": "A component for selecting months, with built-in listeners for switching between previous and next months. Allows specifying the date range, selected date, and receives date selection events.", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of MonthPicker", - "desc": [ - "【selectedDate】: Selected date 【DateTime】", - "【firstDate】: Earliest date limit 【DateTime】", - "【lastDate】: Latest date limit 【DateTime】", - "【onChanged】: Click callback 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker, the month selector, has been phased out in Flutter 3.0. It is replaced by the CalendarDatePicker, the calendar selector.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_es_ES.json deleted file mode 100644 index 0c2e6c0e8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_es_ES.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "Selector de Mes", - "info": "Componente de selección de mes con escucha incorporada para cambiar entre meses. Permite especificar rangos de fechas seleccionables, fechas seleccionadas, y recibe eventos de selección de fecha.", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de MonthPicker", - "desc": [ - "【selectedDate】 : Fecha seleccionada 【DateTime】", - "【firstDate】 : Límite de la primera fecha 【DateTime】", - "【lastDate】 : Límite de la última fecha 【DateTime】", - "【onChanged】 : Callback al hacer clic 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker, el selector de mes, dejó de usarse en Flutter 3.0. Fue reemplazado por CalendarDatePicker, el selector de calendario.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_fr_FR.json deleted file mode 100644 index 02ed61229..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_fr_FR.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "Sélecteur de mois", - "info": "Composant de sélection de mois avec écouteur intégré pour passer au mois précédent ou suivant. Peut spécifier la plage de dates sélectionnables, la date sélectionnée, etc., et reçoit les événements de sélection de date.", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de MonthPicker", - "desc": [ - "【selectedDate】 : Date sélectionnée 【DateTime】", - "【firstDate】 : Limite de la première date 【DateTime】", - "【lastDate】 : Limite de la dernière date 【DateTime】", - "【onChanged】 : Rappel au clic 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker, le sélecteur de mois, a quitté la scène historique avec Flutter 3.0. Il est remplacé par CalendarDatePicker, le sélecteur de calendrier.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_it_IT.json deleted file mode 100644 index c5d648dce..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_it_IT.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "Selettore del mese", - "info": "Componente di selezione del mese, con monitoraggio integrato per il passaggio al mese precedente o successivo. È possibile specificare l'intervallo di date selezionabile, la data selezionata, ecc., e ricevere eventi di selezione della data.", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di MonthPicker", - "desc": [ - "【selectedDate】 : Data selezionata 【DateTime】", - "【firstDate】 : Limite della data più recente 【DateTime】", - "【lastDate】 : Limite della data più lontana 【DateTime】", - "【onChanged】 : Callback al click 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker, il selettore del mese, è stato ritirato in Flutter 3.0. Il suo sostituto è il CalendarDatePicker, il selettore del calendario.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ja_JP.json deleted file mode 100644 index 46d812124..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ja_JP.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "月選択器", - "info": "月の選択コンポーネントで、前後の月への切り替えを監視します。選択可能な日付範囲や選択された日付を指定でき、日付選択イベントを受け取ります。", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MonthPickerの基本使用", - "desc": [ - "【selectedDate】 : 選択された日付 【DateTime】", - "【firstDate】 : 最初の日付制限 【DateTime】", - "【lastDate】 : 最後の日付制限 【DateTime】", - "【onChanged】 : クリックコールバック 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker 月選択器は Flutter3.0 で歴史の舞台から退場しました。代替として CalendarDatePicker カレンダー選択器が登場しました。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ko_KR.json deleted file mode 100644 index 9299152b3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ko_KR.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "월 선택기", - "info": "월을 선택하는 컴포넌트로, 상하월 전환을 자동으로 감지합니다. 선택 가능한 날짜 범위, 선택된 날짜 등을 지정할 수 있으며, 날짜 선택 이벤트를 수신합니다.", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MonthPicker 기본 사용법", - "desc": [ - "【selectedDate】 : 선택된 날짜 【DateTime】", - "【firstDate】 : 최초 날짜 제한 【DateTime】", - "【lastDate】 : 마지막 날짜 제한 【DateTime】", - "【onChanged】 : 클릭 콜백 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker 월 선택기는 Flutter3.0에서 역사 속으로 사라졌습니다. 이를 대체하는 것은 CalendarDatePicker 달력 선택기입니다.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_pt_PT.json deleted file mode 100644 index 0ff589c00..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_pt_PT.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "Seletor de Mês", - "info": "Componente de seleção de mês, com monitoramento integrado para mudança de mês. Pode especificar o intervalo de datas selecionado, a data selecionada, etc., e recebe eventos de seleção de data.", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do MonthPicker", - "desc": [ - "【selectedDate】 : Data selecionada 【DateTime】", - "【firstDate】 : Limite da data mais antiga 【DateTime】", - "【lastDate】 : Limite da data mais recente 【DateTime】", - "【onChanged】 : Callback de clique 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'O MonthPicker, o seletor de mês, foi retirado do palco histórico no Flutter 3.0. O substituto é o CalendarDatePicker, o seletor de calendário.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ru_RU.json deleted file mode 100644 index baa157397..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_ru_RU.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "Выбор месяца", - "info": "Компонент выбора месяца с встроенным прослушиванием переключения на предыдущий и следующий месяц. Можно указать диапазон выбора дат, выбранную дату и т.д., принимает событие выбора даты.", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование MonthPicker", - "desc": [ - "【selectedDate】 : Выбранная дата 【DateTime】", - "【firstDate】 : Ограничение на самую раннюю дату 【DateTime】", - "【lastDate】 : Ограничение на самую позднюю дату 【DateTime】", - "【onChanged】 : Обратный вызов при клике 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker, компонент выбора месяца, ушел в историю с выходом Flutter 3.0. Его заменил CalendarDatePicker, компонент выбора даты.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_zh-CN.json deleted file mode 100644 index 816c09a77..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/desc_zh-CN.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "id": 135, - "name": "MonthPicker", - "localName": "月份选择器", - "info": "月份的选择组件,自带上下月切换的监听。可指定选择的日期范围、选中日期等,接收日期选中事件。", - "lever": 3, - "family": 1, - "deprecated": -1, - "linkIds": [ - 134, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MonthPicker基本使用", - "desc": [ - "【selectedDate】 : 选中日期 【DateTime】", - "【firstDate】 : 最前日期限制 【DateTime】", - "【lastDate】 : 最后日期限制 【DateTime】", - "【onChanged】 : 点击回调 【Function(DateTime)】", - " ", - "class CustomMonthPicker extends StatelessWidget{", - " const CustomMonthPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'MonthPicker 月份期选择器于 Flutter3.0 退出历史舞台。取代者为 CalendarDatePicker 日历选择器。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: MonthPicker(", - " selectedDate: _date,", - " onChanged: (date) => setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/node1_base.dart deleted file mode 100644 index b7f9668b1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MonthPicker/node1_base.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomMonthPicker extends StatelessWidget{ - const CustomMonthPicker({Key? key}) : super(key: key); - - final String info = - 'MonthPicker 月份期选择器于 Flutter3.0 退出历史舞台。取代者为 CalendarDatePicker 日历选择器。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_de_DE.json deleted file mode 100644 index 246a4c828..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "Mausbereich", - "info": "Eine Komponente zur Überwachung von Mausereignissen, wird normalerweise für Desktop- und Webplattformen verwendet und kann Mausbewegungen, Eintritts- und Austrittsereignisse überwachen.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von MouseRegion", - "desc": [ - "【onEnter】: Eintrittsereignis 【PointerEnterEventListener】", - "【onHover】: Bewegungsereignis 【PointerHoverEventListener】", - "【onExit】: Austrittsereignis 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_en_US.json deleted file mode 100644 index 858d30015..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "Mouse Region", - "info": "A component for mouse event listening, typically used on desktop and web platforms, can listen to mouse enter, exit, and move events.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of MouseRegion", - "desc": [ - "【onEnter】: Enter event 【PointerEnterEventListener】", - "【onHover】: Move event 【PointerHoverEventListener】", - "【onExit】: Exit event 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_es_ES.json deleted file mode 100644 index 8aaf2d68a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "Región del Ratón", - "info": "Componente utilizado para la escucha de eventos del ratón, comúnmente utilizado en plataformas de escritorio y web, puede escuchar eventos de entrada, salida y movimiento del ratón.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de MouseRegion", - "desc": [ - "【onEnter】 : Evento de entrada 【PointerEnterEventListener】", - "【onHover】: Evento de movimiento 【PointerHoverEventListener】", - "【onExit】: Evento de salida 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_fr_FR.json deleted file mode 100644 index e58a9d8f0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "Région de souris", - "info": "Composant utilisé pour la surveillance des événements de souris, généralement utilisé sur les plateformes de bureau et Web, peut surveiller les événements d'entrée, de sortie et de déplacement de la souris.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de MouseRegion", - "desc": [ - "【onEnter】 : Événement d'entrée 【PointerEnterEventListener】", - "【onHover】: Événement de déplacement 【PointerHoverEventListener】", - "【onExit】: Événement de sortie 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_it_IT.json deleted file mode 100644 index 820627991..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "Area del Mouse", - "info": "Componente per il monitoraggio degli eventi del mouse, comunemente utilizzato su piattaforme desktop e web, in grado di monitorare eventi di entrata, uscita e movimento del mouse.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di MouseRegion", - "desc": [ - "【onEnter】: Evento di entrata 【PointerEnterEventListener】", - "【onHover】: Evento di movimento 【PointerHoverEventListener】", - "【onExit】: Evento di uscita 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ja_JP.json deleted file mode 100644 index 8984d5dbc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "マウス領域", - "info": "マウスイベントを監視するためのコンポーネントで、通常はデスクトップおよびWebプラットフォームで使用され、マウスの入場、退出、移動イベントを監視できます。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MouseRegionの基本使用", - "desc": [ - "【onEnter】 : 入場イベント 【PointerEnterEventListener】", - "【onHover】: 移動イベント 【PointerHoverEventListener】", - "【onExit】: 退出イベント 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ko_KR.json deleted file mode 100644 index 56709993b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "마우스 영역", - "info": "마우스 이벤트를 감지하는 컴포넌트로, 주로 데스크톱 및 웹 플랫폼에서 사용되며, 마우스 진입, 이동, 이탈 이벤트를 감지할 수 있습니다.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MouseRegion 기본 사용", - "desc": [ - "【onEnter】 : 진입 이벤트 【PointerEnterEventListener】", - "【onHover】: 이동 이벤트 【PointerHoverEventListener】", - "【onExit】: 이탈 이벤트 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_pt_PT.json deleted file mode 100644 index cf3097e9e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "Região do Rato", - "info": "Componente para monitorização de eventos do rato, geralmente utilizado em plataformas de desktop e web, pode monitorizar eventos de entrada, saída e movimento do rato.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do MouseRegion", - "desc": [ - "【onEnter】 : Evento de entrada 【PointerEnterEventListener】", - "【onHover】: Evento de movimento 【PointerHoverEventListener】", - "【onExit】: Evento de saída 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ru_RU.json deleted file mode 100644 index fbde4efeb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "Область мыши", - "info": "Компонент для отслеживания событий мыши, обычно используется на платформах для настольных компьютеров и веб-платформах, может отслеживать события входа, выхода и перемещения мыши.", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование MouseRegion", - "desc": [ - "【onEnter】: Событие входа 【PointerEnterEventListener】", - "【onHover】: Событие перемещения 【PointerHoverEventListener】", - "【onExit】: Событие выхода 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_zh-CN.json deleted file mode 100644 index 194a6654e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 293, - "name": "MouseRegion", - "localName": "鼠标区域", - "info": "用于鼠标事件监听的组件,通常用于桌面和Web平台,可监听鼠标的移入、移除、移动事件。", - "lever": 3, - "family": 2, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MouseRegion基本使用", - "desc": [ - "【onEnter】 : 移入事件 【PointerEnterEventListener】", - "【onHover】: 移动事件 【PointerHoverEventListener】", - "【onExit】: 移出事件 【PointerExitEventListener】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/node1_base.dart deleted file mode 100644 index 2d77a327f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/MouseRegion/node1_base.dart +++ /dev/null @@ -1,63 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class MouseRegionDemo extends StatefulWidget { - const MouseRegionDemo({Key? key}) : super(key: key); - - @override - _MouseRegionDemoState createState() => _MouseRegionDemoState(); -} - -class _MouseRegionDemoState extends State { - int _enterCounter = 0; - int _exitCounter = 0; - double x = 0.0; - double y = 0.0; - void _incrementEnter(PointerEvent details) { - setState(() { - _enterCounter++; - }); - } - void _incrementExit(PointerEvent details) { - setState(() { - _exitCounter++; - }); - } - void _updateLocation(PointerEvent details) { - setState(() { - x = details.position.dx; - y = details.position.dy; - }); - } - @override - Widget build(BuildContext context) { - return ConstrainedBox( - constraints: BoxConstraints.tight(const Size(300.0, 200.0)), - child: MouseRegion( - onEnter: _incrementEnter, - onHover: _updateLocation, - onExit: _incrementExit, - child: Container( - color: Colors.lightBlueAccent, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Text('你的鼠标移入移除信息:'), - Text( - '$_enterCounter Entries\n$_exitCounter Exits', - style: Theme.of(context).textTheme.headlineMedium, - ), - Text( - 'The cursor is here: (${x.toStringAsFixed(2)}, ${y.toStringAsFixed(2)})', - ), - ], - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_de_DE.json deleted file mode 100644 index 74f4b8e8d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_de_DE.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "Seitennavigation", - "info": "Seitennavigationsleiste, wird im Allgemeinen für Desktop-Navigationsmenüs verwendet. Unterstützt erweiterbare und reduzierbare Bereiche, kann Komponenten für die Anfangsposition und Endposition angeben.", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NavigationRail Grundlegende Verwendung", - "desc": [ - "【destinations】 : Menüdatenliste 【List】", - "【selectedIndex】: Aktivierter Index 【int】", - "【labelType】: Label-Stil 【NavigationRailLabelType?】", - "【onDestinationSelected】: Menü-Klick-Ereignis 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "NavigationRail Falt-Effekt", - "desc": [ - "【elevation】 : Schattentiefe 【double】", - "【leading】: Startkomponente 【Widget?】", - "【trailing】: Endkomponente 【Widget?】", - "【extended】: Ob erweitert 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "NavigationRail Stil", - "desc": [ - "【useIndicator】 : Ob Indikator angezeigt wird 【bool】", - "【indicatorColor】: Indikatorfarbe 【Color?】", - "【backgroundColor】: Hintergrundfarbe 【Color?】", - "【labelType】: Label-Stil 【NavigationRailLabelType?】", - "【selectedIconTheme】: Ausgewähltes Icon-Thema 【IconThemeData?】", - "【unselectedIconTheme】: Nicht ausgewähltes Icon-Thema 【IconThemeData?】", - "【selectedLabelTextStyle】: Ausgewählter Textstil 【TextStyle?】", - "【unselectedLabelTextStyle】: Nicht ausgewählter Textstil 【TextStyle?】", - "【minExtendedWidth】: Erweiterte Breite 【double?】", - "【minWidth】: Nicht erweiterte Breite 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_en_US.json deleted file mode 100644 index e98539271..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_en_US.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "Side Navigation Bar", - "info": "Side navigation bar, generally used for desktop navigation menus. Supports expanding and collapsing areas, and can specify components at the beginning and end positions.", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of NavigationRail", - "desc": [ - "【destinations】 : Menu data list 【List】", - "【selectedIndex】: Active index 【int】", - "【labelType】: Label style 【NavigationRailLabelType?】", - "【onDestinationSelected】: Menu click event 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "Collapse Effect of NavigationRail", - "desc": [ - "【elevation】 : Shadow depth 【double】", - "【leading】: Leading component 【Widget?】", - "【trailing】: Trailing component 【Widget?】", - "【extended】: Whether to expand 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "NavigationRail Style", - "desc": [ - "【useIndicator】 : Whether to show the indicator 【bool】", - "【indicatorColor】: Indicator color 【Color?】", - "【backgroundColor】: Background color 【Color?】", - "【labelType】: Label style 【NavigationRailLabelType?】", - "【selectedIconTheme】: Selected icon style 【IconThemeData?】", - "【unselectedIconTheme】: Unselected icon style 【IconThemeData?】", - "【selectedLabelTextStyle】: Selected text style 【TextStyle?】", - "【unselectedLabelTextStyle】: Unselected text style 【TextStyle?】", - "【minExtendedWidth】: Expanded width 【double?】", - "【minWidth】: Unexpanded width 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_es_ES.json deleted file mode 100644 index ed04f6691..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_es_ES.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "Navegación lateral", - "info": "Barra de navegación lateral, generalmente utilizada para menús de navegación de escritorio. Admite áreas expandibles y contraíbles, y permite especificar componentes en la posición inicial y final.", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de NavigationRail", - "desc": [ - "【destinations】 : Lista de datos del menú 【List】", - "【selectedIndex】: Índice activo 【int】", - "【labelType】: Estilo de la etiqueta 【NavigationRailLabelType?】", - "【onDestinationSelected】: Evento de clic en el menú 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "Efecto de plegado de NavigationRail", - "desc": [ - "【elevation】 : Profundidad de la sombra 【double】", - "【leading】: Componente inicial 【Widget?】", - "【trailing】: Componente final 【Widget?】", - "【extended】: Si está expandido 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "Estilo de NavigationRail", - "desc": [ - "【useIndicator】 : Si se muestra el indicador 【bool】", - "【indicatorColor】: Color del indicador 【Color?】", - "【backgroundColor】: Color de fondo 【Color?】", - "【labelType】: Estilo de la etiqueta 【NavigationRailLabelType?】", - "【selectedIconTheme】: Estilo del icono seleccionado 【IconThemeData?】", - "【unselectedIconTheme】: Estilo del icono no seleccionado 【IconThemeData?】", - "【selectedLabelTextStyle】: Estilo del texto seleccionado 【TextStyle?】", - "【unselectedLabelTextStyle】: Estilo del texto no seleccionado 【TextStyle?】", - "【minExtendedWidth】: Ancho expandido 【double?】", - "【minWidth】: Ancho no expandido 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_fr_FR.json deleted file mode 100644 index 8203bb856..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_fr_FR.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "Barre de navigation latérale", - "info": "Barre de navigation latérale, généralement utilisée pour les menus de navigation sur ordinateur. Prend en charge l'expansion et la contraction des zones, et permet de spécifier les composants en position de début et de fin.", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de NavigationRail", - "desc": [ - "【destinations】 : Liste des données du menu 【List】", - "【selectedIndex】: Index actif 【int】", - "【labelType】: Style de l'étiquette 【NavigationRailLabelType?】", - "【onDestinationSelected】: Événement de clic sur le menu 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "Effet de pliage de NavigationRail", - "desc": [ - "【elevation】 : Profondeur de l'ombre 【double】", - "【leading】: Composant de début 【Widget?】", - "【trailing】: Composant de fin 【Widget?】", - "【extended】: Est-ce étendu 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "Style de NavigationRail", - "desc": [ - "【useIndicator】 : Afficher l'indicateur 【bool】", - "【indicatorColor】: Couleur de l'indicateur 【Color?】", - "【backgroundColor】: Couleur de fond 【Color?】", - "【labelType】: Style de l'étiquette 【NavigationRailLabelType?】", - "【selectedIconTheme】: Style de l'icône sélectionnée 【IconThemeData?】", - "【unselectedIconTheme】: Style de l'icône non sélectionnée 【IconThemeData?】", - "【selectedLabelTextStyle】: Style du texte sélectionné 【TextStyle?】", - "【unselectedLabelTextStyle】: Style du texte non sélectionné 【TextStyle?】", - "【minExtendedWidth】: Largeur étendue 【double?】", - "【minWidth】: Largeur non étendue 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_it_IT.json deleted file mode 100644 index 6e44bddfa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_it_IT.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "Navigazione laterale", - "info": "Barra di navigazione laterale, generalmente utilizzata per il menu di navigazione desktop. Supporta l'espansione e la contrazione delle aree, e consente di specificare i componenti nelle posizioni iniziali e finali.", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di NavigationRail", - "desc": [ - "【destinations】 : Lista dei dati del menu 【List】", - "【selectedIndex】: Indice attivo 【int】", - "【labelType】: Stile dell'etichetta 【NavigationRailLabelType?】", - "【onDestinationSelected】: Evento di clic sul menu 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "Effetto di collasso di NavigationRail", - "desc": [ - "【elevation】 : Profondità dell'ombra 【double】", - "【leading】: Componente iniziale 【Widget?】", - "【trailing】: Componente finale 【Widget?】", - "【extended】: Se espanso 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "Stile di NavigationRail", - "desc": [ - "【useIndicator】 : Se mostrare l'indicatore 【bool】", - "【indicatorColor】: Colore dell'indicatore 【Color?】", - "【backgroundColor】: Colore di sfondo 【Color?】", - "【labelType】: Stile dell'etichetta 【NavigationRailLabelType?】", - "【selectedIconTheme】: Stile dell'icona selezionata 【IconThemeData?】", - "【unselectedIconTheme】: Stile dell'icona non selezionata 【IconThemeData?】", - "【selectedLabelTextStyle】: Stile del testo selezionato 【TextStyle?】", - "【unselectedLabelTextStyle】: Stile del testo non selezionato 【TextStyle?】", - "【minExtendedWidth】: Larghezza espansa 【double?】", - "【minWidth】: Larghezza non espansa 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ja_JP.json deleted file mode 100644 index 81addefbf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ja_JP.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "サイドバーナビゲーション", - "info": "サイドナビゲーションバーは、通常デスクトップのナビゲーションメニューに使用されます。展開と収縮の領域をサポートし、最初と最後の位置のコンポーネントを指定できます。", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NavigationRail 基本使用", - "desc": [ - "【destinations】 : メニューデータリスト 【List】", - "【selectedIndex】: アクティブインデックス 【int】", - "【labelType】: ラベルスタイル 【NavigationRailLabelType?】", - "【onDestinationSelected】: メニュークリックイベント 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "NavigationRail 折りたたみ効果", - "desc": [ - "【elevation】 : 影の深さ 【double】", - "【leading】: 最初のコンポーネント 【Widget?】", - "【trailing】: 最後のコンポーネント 【Widget?】", - "【extended】: 展開するかどうか 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "NavigationRail スタイル", - "desc": [ - "【useIndicator】 : インジケーターを表示するかどうか 【bool】", - "【indicatorColor】: インジケーターの色 【Color?】", - "【backgroundColor】: 背景色 【Color?】", - "【labelType】: ラベルスタイル 【NavigationRailLabelType?】", - "【selectedIconTheme】: 選択されたアイコンのスタイル 【IconThemeData?】", - "【unselectedIconTheme】: 選択されていないアイコンのスタイル 【IconThemeData?】", - "【selectedLabelTextStyle】: 選択されたテキストのスタイル 【TextStyle?】", - "【unselectedLabelTextStyle】: 選択されていないテキストのスタイル 【TextStyle?】", - "【minExtendedWidth】: 展開幅 【double?】", - "【minWidth】: 未展開幅 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ko_KR.json deleted file mode 100644 index 351ea2c04..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ko_KR.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "사이드바 내비게이션", - "info": "사이드 내비게이션 바, 일반적으로 데스크톱 내비게이션 메뉴에 사용됩니다. 확장 및 축소 영역을 지원하며, 처음과 끝 위치 컴포넌트를 지정할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NavigationRail 기본 사용법", - "desc": [ - "【destinations】 : 메뉴 데이터 리스트 【List】", - "【selectedIndex】: 활성화 인덱스 【int】", - "【labelType】: 라벨 스타일 【NavigationRailLabelType?】", - "【onDestinationSelected】: 메뉴 클릭 이벤트 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "NavigationRail 접힘 효과", - "desc": [ - "【elevation】 : 그림자 깊이 【double】", - "【leading】: 처음 컴포넌트 【Widget?】", - "【trailing】: 끝 컴포넌트 【Widget?】", - "【extended】: 확장 여부 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "NavigationRail 스타일", - "desc": [ - "【useIndicator】 : 인디케이터 표시 여부 【bool】", - "【indicatorColor】: 인디케이터 색상 【Color?】", - "【backgroundColor】: 배경색 【Color?】", - "【labelType】: 라벨 스타일 【NavigationRailLabelType?】", - "【selectedIconTheme】: 선택된 아이콘 스타일 【IconThemeData?】", - "【unselectedIconTheme】: 선택되지 않은 아이콘 스타일 【IconThemeData?】", - "【selectedLabelTextStyle】: 선택된 텍스트 스타일 【TextStyle?】", - "【unselectedLabelTextStyle】: 선택되지 않은 텍스트 스타일 【TextStyle?】", - "【minExtendedWidth】: 확장된 너비 【double?】", - "【minWidth】: 확장되지 않은 너비 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_pt_PT.json deleted file mode 100644 index ae772d91b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_pt_PT.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "Barra de Navegação Lateral", - "info": "Barra de navegação lateral, geralmente usada para menus de navegação em desktop. Suporta áreas expansíveis e retráteis, com componentes especificáveis nas posições inicial e final.", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do NavigationRail", - "desc": [ - "【destinations】 : Lista de dados do menu 【List】", - "【selectedIndex】: Índice ativo 【int】", - "【labelType】: Estilo da etiqueta 【NavigationRailLabelType?】", - "【onDestinationSelected】: Evento de clique no menu 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "Efeito de Recolhimento do NavigationRail", - "desc": [ - "【elevation】 : Profundidade da sombra 【double】", - "【leading】: Componente inicial 【Widget?】", - "【trailing】: Componente final 【Widget?】", - "【extended】: Expandido 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "Estilo do NavigationRail", - "desc": [ - "【useIndicator】 : Mostrar indicador 【bool】", - "【indicatorColor】: Cor do indicador 【Color?】", - "【backgroundColor】: Cor de fundo 【Color?】", - "【labelType】: Estilo da etiqueta 【NavigationRailLabelType?】", - "【selectedIconTheme】: Estilo do ícone selecionado 【IconThemeData?】", - "【unselectedIconTheme】: Estilo do ícone não selecionado 【IconThemeData?】", - "【selectedLabelTextStyle】: Estilo do texto selecionado 【TextStyle?】", - "【unselectedLabelTextStyle】: Estilo do texto não selecionado 【TextStyle?】", - "【minExtendedWidth】: Largura expandida 【double?】", - "【minWidth】: Largura não expandida 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ru_RU.json deleted file mode 100644 index e9889ecd9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_ru_RU.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "Боковая навигация", - "info": "Боковая панель навигации, обычно используется для навигационного меню на рабочем столе. Поддерживает расширение и сворачивание области, можно указать компоненты в начале и конце.", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование NavigationRail", - "desc": [ - "【destinations】 : Список данных меню 【List】", - "【selectedIndex】: Активный индекс 【int】", - "【labelType】: Стиль метки 【NavigationRailLabelType?】", - "【onDestinationSelected】: Событие клика по меню 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "Эффект сворачивания NavigationRail", - "desc": [ - "【elevation】 : Глубина тени 【double】", - "【leading】: Начальный компонент 【Widget?】", - "【trailing】: Конечный компонент 【Widget?】", - "【extended】: Развернуто ли 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "Стиль NavigationRail", - "desc": [ - "【useIndicator】 : Показывать ли индикатор 【bool】", - "【indicatorColor】: Цвет индикатора 【Color?】", - "【backgroundColor】: Цвет фона 【Color?】", - "【labelType】: Стиль метки 【NavigationRailLabelType?】", - "【selectedIconTheme】: Стиль выбранной иконки 【IconThemeData?】", - "【unselectedIconTheme】: Стиль невыбранной иконки 【IconThemeData?】", - "【selectedLabelTextStyle】: Стиль выбранного текста 【TextStyle?】", - "【unselectedLabelTextStyle】: Стиль невыбранного текста 【TextStyle?】", - "【minExtendedWidth】: Ширина в развернутом состоянии 【double?】", - "【minWidth】: Ширина в свернутом состоянии 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_zh-CN.json deleted file mode 100644 index 92520a94e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/desc_zh-CN.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "id": 358, - "name": "NavigationRail", - "localName": "侧栏导航", - "info": "侧导航栏,一般用于桌面导航菜单。支持展开和收缩区域,可指定首尾位置组件。", - "lever": 4, - "family": 1, - "linkIds": [ - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NavigationRail 基本使用", - "desc": [ - "【destinations】 : 菜单数据列表 【List】", - "【selectedIndex】: 激活索引 【int】", - "【labelType】: 标签样式 【NavigationRailLabelType?】", - "【onDestinationSelected】: 菜单点击事件 【ValueChanged?】" - ] - }, - { - "file": "node2_extend.dart", - "name": "NavigationRail 折叠效果", - "desc": [ - "【elevation】 : 影深 【double】", - "【leading】: 首组件 【Widget?】", - "【trailing】: 尾组件 【Widget?】", - "【extended】: 是否展开 【bool】" - ] - }, - { - "file": "node3_dark.dart", - "name": "NavigationRail 样式", - "desc": [ - "【useIndicator】 : 是否显示指示器 【bool】", - "【indicatorColor】: 指示器颜色 【Color?】", - "【backgroundColor】: 背景色 【Color?】", - "【labelType】: 标签样式 【NavigationRailLabelType?】", - "【selectedIconTheme】: 选中图标样式 【IconThemeData?】", - "【unselectedIconTheme】: 未选中图标样式 【IconThemeData?】", - "【selectedLabelTextStyle】: 选中文字样式 【TextStyle?】", - "【unselectedLabelTextStyle】: 未选中文字样式 【TextStyle?】", - "【minExtendedWidth】: 展开宽度 【double?】", - "【minWidth】: 未展开宽度 【double?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node1_base.dart deleted file mode 100644 index b5c732600..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node1_base.dart +++ /dev/null @@ -1,111 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2022/7/23 -/// contact me by email 1981462002@qq.com - -class CustomNavigationRail extends StatefulWidget { - const CustomNavigationRail({Key? key}) : super(key: key); - - @override - State createState() => _CustomNavigationRailState(); -} - -class _CustomNavigationRailState extends State { - final PageController _controller = PageController(); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(), - body: Row( - children: [ - _NavigationRailDemo( - onDestinationSelected: _onDestinationSelected, - ), - Expanded( - child: PageView( - controller: _controller, - children: const [ - _TestContent(content: '消息'), - _TestContent(content: '视频会议'), - _TestContent(content: '通讯录'), - _TestContent(content: '云文档'), - _TestContent(content: '工作台'), - _TestContent(content: '日历'), - ], - )) - ], - ), - ); - } - - void _onDestinationSelected(int value) { - _controller.jumpToPage(value); - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } -} - -class _TestContent extends StatelessWidget { - final String content; - - const _TestContent({Key? key, required this.content}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Center( - child: Text( - content, - style: const TextStyle(fontSize: 26), - )); - } -} - -class _NavigationRailDemo extends StatefulWidget { - final ValueChanged? onDestinationSelected; - - const _NavigationRailDemo({Key? key, this.onDestinationSelected}) - : super(key: key); - - @override - State<_NavigationRailDemo> createState() => _NavigationRailDemoState(); -} - -class _NavigationRailDemoState extends State<_NavigationRailDemo> { - int _selectIndex = 0; - - final List destinations = const [ - NavigationRailDestination( - icon: Icon(Icons.message_outlined), label: Text("消息")), - NavigationRailDestination( - icon: Icon(Icons.video_camera_back_outlined), label: Text("视频会议")), - NavigationRailDestination( - icon: Icon(Icons.book_outlined), label: Text("通讯录")), - NavigationRailDestination( - icon: Icon(Icons.cloud_upload_outlined), label: Text("云文档")), - NavigationRailDestination( - icon: Icon(Icons.games_sharp), label: Text("工作台")), - NavigationRailDestination( - icon: Icon(Icons.calendar_month), label: Text("日历")) - ]; - - @override - Widget build(BuildContext context) { - return NavigationRail( - onDestinationSelected: _onDestinationSelected, - labelType: NavigationRailLabelType.all, - destinations: destinations, - selectedIndex: _selectIndex, - ); - } - - void _onDestinationSelected(int value) { - _selectIndex = value; - setState(() {}); - widget.onDestinationSelected?.call(value); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node2_extend.dart b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node2_extend.dart deleted file mode 100644 index 0f3d350f9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node2_extend.dart +++ /dev/null @@ -1,139 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2022/7/23 -/// contact me by email 1981462002@qq.com - -class ExtendableNavigationRail extends StatefulWidget { - const ExtendableNavigationRail({Key? key}) : super(key: key); - - @override - State createState() => - _ExtendableNavigationRailState(); -} - -class _ExtendableNavigationRailState extends State { - final PageController _controller = PageController(); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(), - body: Row( - children: [ - ExtendableNavigation( - onDestinationSelected: _onDestinationSelected, - ), - Expanded( - child: PageView( - controller: _controller, - children: const [ - _TestContent(content: '消息'), - _TestContent(content: '视频会议'), - _TestContent(content: '通讯录'), - _TestContent(content: '云文档'), - _TestContent(content: '工作台'), - _TestContent(content: '日历'), - ], - )) - ], - ), - ); - } - - void _onDestinationSelected(int value) { - _controller.jumpToPage(value); - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } -} - -class _TestContent extends StatelessWidget { - final String content; - - const _TestContent({Key? key, required this.content}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Center( - child: Text( - content, - style: const TextStyle(fontSize: 26), - )); - } -} - -class ExtendableNavigation extends StatefulWidget { - final ValueChanged? onDestinationSelected; - - const ExtendableNavigation({Key? key, this.onDestinationSelected}) - : super(key: key); - - @override - State createState() => _ExtendableNavigationState(); -} - -class _ExtendableNavigationState extends State { - int _selectIndex = 0; - bool _extended = false; - - final List destinations = const [ - NavigationRailDestination( - icon: Icon(Icons.message_outlined), label: Text("消息")), - NavigationRailDestination( - icon: Icon(Icons.video_camera_back_outlined), label: Text("视频会议")), - NavigationRailDestination( - icon: Icon(Icons.book_outlined), label: Text("通讯录")), - NavigationRailDestination( - icon: Icon(Icons.cloud_upload_outlined), label: Text("云文档")), - NavigationRailDestination( - icon: Icon(Icons.games_sharp), label: Text("工作台")), - NavigationRailDestination( - icon: Icon(Icons.calendar_month), label: Text("日历")) - ]; - - Widget buildLeading() { - return GestureDetector( - onTap: _toggleExtended, - child: const Icon( - Icons.menu_open, - color: Colors.grey, - )); - } - - @override - Widget build(BuildContext context) { - return NavigationRail( - leading: buildLeading(), - extended: _extended, - elevation: 1, - trailing: const Expanded( - child: Align( - alignment: Alignment.bottomCenter, - child: Padding( - padding: EdgeInsets.only(bottom: 20.0), - child: FlutterLogo(), - ), - ), - ), - onDestinationSelected: _onDestinationSelected, - destinations: destinations, - selectedIndex: _selectIndex, - ); - } - - void _onDestinationSelected(int value) { - _selectIndex = value; - setState(() {}); - widget.onDestinationSelected?.call(value); - } - - void _toggleExtended() { - setState(() { - _extended = !_extended; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node3_dark.dart b/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node3_dark.dart deleted file mode 100644 index fe234ed5d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NavigationRail/node3_dark.dart +++ /dev/null @@ -1,160 +0,0 @@ -import 'package:flutter/material.dart'; - -// minWidth: 72, -// minExtendedWidth: 200 , -// unselectedIconTheme: const IconThemeData(color: textColor) , -// selectedIconTheme: const IconThemeData(color: activeColor) , -// unselectedLabelTextStyle: labelStyle, -// selectedLabelTextStyle: labelStyle, - -/// create by 张风捷特烈 on 2022/7/23 -/// contact me by email 1981462002@qq.com - -class DarkNavigationRail extends StatefulWidget { - const DarkNavigationRail({Key? key}) : super(key: key); - - @override - State createState() => _DarkNavigationRailState(); -} - -class _DarkNavigationRailState extends State { - final PageController _controller = PageController(); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(), - body: Row( - children: [ - DarkExtendableNavigation( - onDestinationSelected: _onDestinationSelected, - ), - Expanded( - child: PageView( - controller: _controller, - children: const [ - _TestContent(content: '消息'), - _TestContent(content: '视频会议'), - _TestContent(content: '通讯录'), - _TestContent(content: '云文档'), - _TestContent(content: '工作台'), - _TestContent(content: '日历'), - ], - )) - ], - ), - ); - } - - void _onDestinationSelected(int value) { - _controller.jumpToPage(value); - } - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } -} - -class _TestContent extends StatelessWidget { - final String content; - - const _TestContent({Key? key, required this.content}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Center( - child: Text( - content, - style: const TextStyle(fontSize: 26), - )); - } -} - -class DarkExtendableNavigation extends StatefulWidget { - final ValueChanged? onDestinationSelected; - - const DarkExtendableNavigation({Key? key, this.onDestinationSelected}) - : super(key: key); - - @override - State createState() => - _DarkExtendableNavigationState(); -} - -class _DarkExtendableNavigationState extends State { - int _selectIndex = 0; - bool _extended = false; - - final List destinations = const [ - NavigationRailDestination( - icon: Icon(Icons.message_outlined), label: Text("消息")), - NavigationRailDestination( - icon: Icon(Icons.video_camera_back_outlined), label: Text("视频会议")), - NavigationRailDestination( - icon: Icon(Icons.book_outlined), label: Text("通讯录")), - NavigationRailDestination( - icon: Icon(Icons.cloud_upload_outlined), label: Text("云文档")), - NavigationRailDestination( - icon: Icon(Icons.games_sharp), label: Text("工作台")), - NavigationRailDestination( - icon: Icon(Icons.calendar_month), label: Text("日历")) - ]; - - Widget buildLeading() { - return GestureDetector( - onTap: _toggleExtended, - child: const Icon( - Icons.menu_open, - color: Colors.grey, - )); - } - - @override - Widget build(BuildContext context) { - const Color textColor = Color(0xffcfd1d7); - const Color activeColor = Colors.white; - const TextStyle labelStyle = TextStyle(color: textColor, fontSize: 11); - - return NavigationRail( - leading: buildLeading(), - extended: _extended, - labelType: NavigationRailLabelType.none, - useIndicator: true, - indicatorColor: Colors.blue, - elevation: 1, - backgroundColor: const Color(0xff324465), - minWidth: 72, - minExtendedWidth: 200, - unselectedIconTheme: const IconThemeData(color: textColor), - selectedIconTheme: const IconThemeData(color: activeColor), - unselectedLabelTextStyle: labelStyle, - selectedLabelTextStyle: labelStyle, - trailing: const Expanded( - child: Align( - alignment: Alignment.bottomCenter, - child: Padding( - padding: EdgeInsets.only(bottom: 20.0), - child: FlutterLogo(), - ), - ), - ), - onDestinationSelected: _onDestinationSelected, - destinations: destinations, - selectedIndex: _selectIndex, - ); - } - - void _onDestinationSelected(int value) { - _selectIndex = value; - setState(() {}); - widget.onDestinationSelected?.call(value); - } - - void _toggleExtended() { - setState(() { - _extended = !_extended; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_de_DE.json deleted file mode 100644 index 3f97142a7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "Navigator", - "info": "Der Navigator verwaltet eine Gruppe von Unterkomponenten nach Stack-Regeln, kann Unterkomponenten ein- und ausblenden und Ereignisse beim Ein- und Ausstapeln überwachen. Die Routenverwaltung von MaterialApp basiert auf dem Navigator.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung des Navigators", - "desc": [ - "【initialRoute】: Anfangsroute 【String】", - "【onGenerateRoute】: Routengenerator 【RouteFactory】", - "【observers】: Routenbeobachter 【List】", - "【onPopPage】: Rückruf beim Entfernen aus dem Stack 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_en_US.json deleted file mode 100644 index b36e3220f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "Navigator", - "info": "The Navigator manages a group of child components using stack rules, allowing child components to be pushed and popped, and listening to stack events. The origin of MaterialApp's route management is the use of Navigator.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Navigator", - "desc": [ - "【initialRoute】: Initial display route 【String】", - "【onGenerateRoute】: Route generator 【RouteFactory】", - "【observers】: Route observers 【List】", - "【onPopPage】: Pop page callback 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_es_ES.json deleted file mode 100644 index d3006b1b6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "Navegador", - "info": "Navigator gestiona un grupo de componentes secundarios utilizando reglas de pila, permitiendo empujar y sacar componentes secundarios, así como escuchar eventos de entrada y salida de la pila. La gestión de rutas de MaterialApp se basa en el uso de Navigator.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Navigator", - "desc": [ - "【initialRoute】 : Ruta inicial 【String】", - "【onGenerateRoute】 : Generador de rutas 【RouteFactory】", - "【observers】 : Observador de rutas 【List】", - "【onPopPage】 : Callback de salida de pila 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_fr_FR.json deleted file mode 100644 index 867043566..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "Navigateur", - "info": "Navigator gère un ensemble de composants enfants en utilisant des règles de pile, permettant de pousser et de retirer des composants enfants ainsi que d'écouter les événements d'entrée et de sortie de la pile. La gestion des routes de MaterialApp est fondamentalement basée sur l'utilisation de Navigator.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Navigator", - "desc": [ - "【initialRoute】 : Route initiale 【String】", - "【onGenerateRoute】 : Générateur de route 【RouteFactory】", - "【observers】 : Observateur de route 【List】", - "【onPopPage】 : Rappel de sortie de pile 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_it_IT.json deleted file mode 100644 index 713fe080b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "Navigatore", - "info": "Navigator gestisce un gruppo di componenti figli utilizzando regole di stack, può spingere e rimuovere componenti figli e monitorare gli eventi di entrata e uscita dallo stack. La gestione delle route di MaterialApp si basa sull'uso di Navigator.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Navigator", - "desc": [ - "【initialRoute】 : Route iniziale 【String】", - "【onGenerateRoute】 : Generatore di route 【RouteFactory】", - "【observers】 : Osservatori di route 【List】", - "【onPopPage】 : Callback di rimozione dallo stack 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ja_JP.json deleted file mode 100644 index 8d9747e23..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "ナビゲーター", - "info": "Navigatorはスタックルールを使用して一連の子コンポーネントを管理し、子コンポーネントを切り替えたり、スタックの出入りイベントを監視したりすることができます。MaterialAppのルート管理の根源はNavigatorを使用しています。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Navigatorの基本使用方法", - "desc": [ - "【initialRoute】 : 最初に表示されるルート 【String】", - "【onGenerateRoute】 : ルートジェネレーター 【RouteFactory】", - "【observers】 : ルートオブザーバー 【List】", - "【onPopPage】 : スタックから出るコールバック 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ko_KR.json deleted file mode 100644 index b84707bec..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "네비게이터", - "info": "Navigator는 스택 규칙을 사용하여 자식 위젯 그룹을 관리하며, 자식 위젯을 푸시하고 팝하며 스택 이벤트를 수신할 수 있습니다. MaterialApp의 라우팅 관리의 근원은 Navigator를 사용한 것입니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Navigator 기본 사용법", - "desc": [ - "【initialRoute】 : 초기 표시 라우트 【String】", - "【onGenerateRoute】 : 라우트 생성기 【RouteFactory】", - "【observers】 : 라우트 리스너 【List】", - "【onPopPage】 : 팝 콜백 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_pt_PT.json deleted file mode 100644 index 16934999a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "Navegador", - "info": "O Navigator gere um grupo de componentes filhos usando regras de pilha, podendo empurrar e retirar componentes filhos, bem como monitorar eventos de entrada e saída da pilha. A gestão de rotas do MaterialApp baseia-se no uso do Navigator.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Navigator", - "desc": [ - "【initialRoute】 : Rota inicial 【String】", - "【onGenerateRoute】 : Gerador de rotas 【RouteFactory】", - "【observers】 : Observador de rotas 【List】", - "【onPopPage】 : Callback de saída da pilha 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ru_RU.json deleted file mode 100644 index fcf4be64d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "Навигатор", - "info": "Navigator управляет группой дочерних компонентов по правилам стека, может добавлять и удалять дочерние компоненты, а также отслеживать события входа и выхода из стека. Источник управления маршрутами MaterialApp использует Navigator.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Navigator", - "desc": [ - "【initialRoute】 : Первоначальный маршрут отображения 【String】", - "【onGenerateRoute】 : Генератор маршрутов 【RouteFactory】", - "【observers】 : Наблюдатели маршрутов 【List】", - "【onPopPage】 : Обратный вызов выхода из стека 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_zh-CN.json deleted file mode 100644 index f350eeb22..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 232, - "name": "Navigator", - "localName": "导航器", - "info": "Navigator用堆栈规则管理一组子组件,可以将子组件切入弹出及监听出入栈事件。MaterialApp路由管理的本源就是使用了Navigator。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Navigator基本用法", - "desc": [ - "【initialRoute】 : 最初显示路由 【String】", - "【onGenerateRoute】 : 路由生成器 【RouteFactory】", - "【observers】 : 路由监听器 【List】", - "【onPopPage】 : 出栈回调 【PopPageCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Navigator/node1_base.dart deleted file mode 100644 index eb000b4a0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Navigator/node1_base.dart +++ /dev/null @@ -1,185 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/19 -/// contact me by email 1981462002@qq.com - -class NavigatorDemo extends StatelessWidget { - const NavigatorDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - width: 300, - child: Navigator( - onPopPage: _onPopPage, - initialRoute: '/home-content', - onGenerateRoute: _onGenerateRoute, - observers: [TolyNavigatorObservers()], - ), - ); - } - - Route _onGenerateRoute(RouteSettings settings) { - switch (settings.name) { - case '/home-content': - return MaterialPageRoute( - builder: (_) => const HomeContent(), settings: settings); - case "/red": - return MaterialPageRoute(builder: (_) => const RedPage(), settings: settings); - case "/yellow": - return MaterialPageRoute( - builder: (_) => const YellowPage(), settings: settings); - case "/green": - return MaterialPageRoute( - builder: (_) => const GreenPage(), settings: settings); - default: - return MaterialPageRoute( - builder: (_) => const HomeContent(), settings: settings); - } - } - - bool _onPopPage(Route route, result) { - print('----_onPopPage-----'); - return true; - } -} - -//路由监听器 -class TolyNavigatorObservers extends NavigatorObserver { - @override - void didPush(Route route, Route? previousRoute) { - print( - '--didPush:--route:--${route.settings}--previousRoute:--${previousRoute?.settings}'); - } - - @override - void didStopUserGesture() { - print('--didStopUserGesture:--'); - } - - @override - void didStartUserGesture(Route route, Route? previousRoute) { - print( - '--didStartUserGesture:--route:--${route.settings}--previousRoute:--${previousRoute?.settings}'); - } - - @override - void didReplace({Route? newRoute, Route? oldRoute}) { - print( - '--didReplace:--newRoute:--${newRoute?.settings}--oldRoute:--${oldRoute?.settings}'); - } - - @override - void didRemove(Route? route, Route? previousRoute) { - print( - '--didRemove:--route:--${route?.settings}--previousRoute:--${previousRoute?.settings}'); - } - - @override - void didPop(Route route, Route? previousRoute) { - print( - '--didPop:--route:--${route.settings}--previousRoute:--${previousRoute?.settings}'); - } -} - -class HomeContent extends StatelessWidget { - const HomeContent({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.red, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - ), - child: const Text('to red'), - onPressed: () { - Navigator.pushNamed(context, '/red'); - }, - ), - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.yellow, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - ), - child: const Text('to yellow'), - onPressed: () { - Navigator.pushNamed(context, '/yellow'); - }, - ), - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.green, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - ), - child: const Text('to yellow'), - onPressed: () { - Navigator.pushNamed(context, '/green'); - }, - ) - ], - ), - ], - ); - } -} - -class RedPage extends StatelessWidget { - const RedPage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text("RedPage"), - ), - body: Container( - color: Colors.red, - ), - ); - } -} - -class YellowPage extends StatelessWidget { - const YellowPage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text("YellowPage"), - ), - body: Container( - color: Colors.yellow, - ), - ); - } -} - -class GreenPage extends StatelessWidget { - const GreenPage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text("GreenPage"), - ), - body: Container( - color: Colors.green, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_de_DE.json deleted file mode 100644 index d0a10392b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "Verschachtelte Scrollansicht", - "info": "Wird zur Behandlung des verschachtelten Scrollens mehrerer Ansichten verwendet. Es können Kopf, Scroll-Controller, Scrollrichtung usw. angegeben werden. Dabei muss der Körper eine scrollbare Komponente sein.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von NestedScrollView", - "desc": [ - "【controller】 : Scroll-Controller 【ScrollController】", - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【reverse】 : Umgekehrt 【bool】", - "【physics】 : Scrollstil 【ScrollPhysics】", - "【dragStartBehavior】 : Startverhalten beim Ziehen 【DragStartBehavior】", - "【headerSliverBuilder】 : *Kopfkonstruktor 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *Inhalt 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_en_US.json deleted file mode 100644 index e2f92a4bf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "Nested Scroll View", - "info": "Used for handling nested scrolling of multiple views, can specify the header, scroll controller, scroll direction, etc., where the body must be a scrollable type of component.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of NestedScrollView", - "desc": [ - "【controller】 : Scroll Controller 【ScrollController】", - "【scrollDirection】 : Scroll Direction 【Axis】", - "【reverse】 : Whether to Reverse 【bool】", - "【physics】 : Scroll Physics 【ScrollPhysics】", - "【dragStartBehavior】 : Drag Start Behavior 【DragStartBehavior】", - "【headerSliverBuilder】 : *Header Builder 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *Content 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_es_ES.json deleted file mode 100644 index 3650d9638..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "Vista de desplazamiento anidada", - "info": "Utilizado para manejar el desplazamiento anidado de múltiples vistas, se puede especificar la cabecera, el controlador de desplazamiento, la dirección de desplazamiento, etc., donde el cuerpo debe ser un componente de tipo desplazable.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de NestedScrollView", - "desc": [ - "【controller】 : Controlador de desplazamiento 【ScrollController】", - "【scrollDirection】 : Dirección de desplazamiento 【Axis】", - "【reverse】 : Invertir 【bool】", - "【physics】 : Estilo de desplazamiento 【ScrollPhysics】", - "【dragStartBehavior】 : Comportamiento de inicio de arrastre 【DragStartBehavior】", - "【headerSliverBuilder】 : *Constructor de cabecera 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *Contenido 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_fr_FR.json deleted file mode 100644 index b2956b13a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "Vue de défilement imbriquée", - "info": "Utilisé pour gérer le défilement imbriqué de plusieurs vues, peut spécifier l'en-tête, le contrôleur de défilement, la direction de défilement, etc., où le corps doit être un composant de type défilable.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de NestedScrollView", - "desc": [ - "【controller】 : Contrôleur de défilement 【ScrollController】", - "【scrollDirection】 : Direction de défilement 【Axis】", - "【reverse】 : Inverser 【bool】", - "【physics】 : Style de défilement 【ScrollPhysics】", - "【dragStartBehavior】 : Comportement de début de glissement 【DragStartBehavior】", - "【headerSliverBuilder】 : *Constructeur d'en-tête 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *Contenu 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_it_IT.json deleted file mode 100644 index ad1bc771b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "Vista di scorrimento annidata", - "info": "Utilizzato per gestire lo scorrimento annidato di più viste, è possibile specificare l'intestazione, il controller di scorrimento, la direzione di scorrimento, ecc., dove il corpo deve essere un componente di tipo scorrevole.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di NestedScrollView", - "desc": [ - "【controller】 : Controller di scorrimento 【ScrollController】", - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【reverse】 : Se invertire 【bool】", - "【physics】 : Stile di scorrimento 【ScrollPhysics】", - "【dragStartBehavior】 : Comportamento di inizio trascinamento 【DragStartBehavior】", - "【headerSliverBuilder】 : *Costruttore di intestazione 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *Contenuto 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ja_JP.json deleted file mode 100644 index 73f25d989..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "ネストされたスクロールビュー", - "info": "複数のビューのスクロールネスト処理に使用されます。ヘッダー、スクロールコントローラー、スクロール方向などを指定できます。bodyはスクロール可能なタイプのコンポーネントでなければなりません。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollViewの基本使い方", - "desc": [ - "【controller】 : スクロールコントローラー 【ScrollController】", - "【scrollDirection】 : スクロール方向 【Axis】", - "【reverse】 : 逆方向かどうか 【bool】", - "【physics】 : スクロールスタイル 【ScrollPhysics】", - "【dragStartBehavior】 : ドラッグ開始動作 【DragStartBehavior】", - "【headerSliverBuilder】 : *ヘッダービルダー 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *コンテンツ 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ko_KR.json deleted file mode 100644 index de4bdc44a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "중첩 스크롤 뷰", - "info": "여러 뷰의 스크롤 중첩 처리를 위해 사용되며, 헤더, 스크롤 컨트롤러, 스크롤 방향 등을 지정할 수 있습니다. 이때 body는 반드시 스크롤 가능한 타입의 컴포넌트여야 합니다.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollView 기본 사용법", - "desc": [ - "【controller】 : 스크롤 컨트롤러 【ScrollController】", - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【reverse】 : 역방향 여부 【bool】", - "【physics】 : 스크롤 스타일 【ScrollPhysics】", - "【dragStartBehavior】 : 드래그 시작 동작 【DragStartBehavior】", - "【headerSliverBuilder】 : *헤더 빌더 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *내용 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_pt_PT.json deleted file mode 100644 index 183b33074..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "Visão de Rolagem Aninhada", - "info": "Usado para o tratamento de rolagem aninhada de várias visualizações, pode especificar o cabeçalho, controlador de rolagem, direção de rolagem, etc., onde o corpo deve ser um componente do tipo rolável.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do NestedScrollView", - "desc": [ - "【controller】 : Controlador de Rolagem 【ScrollController】", - "【scrollDirection】 : Direção de Rolagem 【Axis】", - "【reverse】 : Inverter 【bool】", - "【physics】 : Estilo de Rolagem 【ScrollPhysics】", - "【dragStartBehavior】 : Comportamento de Início de Arrasto 【DragStartBehavior】", - "【headerSliverBuilder】 : *Construtor de Cabeçalho 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *Conteúdo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ru_RU.json deleted file mode 100644 index 10f3aa2ed..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "Вложенное прокручиваемое представление", - "info": "Используется для обработки вложенной прокрутки нескольких представлений, можно указать заголовок, контроллер прокрутки, направление прокрутки и т.д., где тело должно быть компонентом с возможностью прокрутки.", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование NestedScrollView", - "desc": [ - "【controller】 : Контроллер прокрутки 【ScrollController】", - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【reverse】 : Обратное направление 【bool】", - "【physics】 : Стиль прокрутки 【ScrollPhysics】", - "【dragStartBehavior】 : Поведение начала перетаскивания 【DragStartBehavior】", - "【headerSliverBuilder】 : *Конструктор заголовка 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *Содержимое 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_zh-CN.json deleted file mode 100644 index 30e70e894..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 251, - "name": "NestedScrollView", - "localName": "嵌套滑动视图", - "info": "用于多个视图滑动嵌套处理,可以指定头部、滑动控制器、滑动方向等,其中body必须是可滑动类型的组件。", - "lever": 4, - "family": 4, - "linkIds": [ - 183, - 344 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NestedScrollView基本用法", - "desc": [ - "【controller】 : 滑动控制器 【ScrollController】", - "【scrollDirection】 : 滑动方向 【Axis】", - "【reverse】 : 是否反向 【bool】", - "【physics】 : 滑顶样式 【ScrollPhysics】", - "【dragStartBehavior】 : 开始拖动行为 【DragStartBehavior】", - "【headerSliverBuilder】 : *头部构造器 【NestedScrollViewHeaderSliversBuilder】", - "【body】 : *内容 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/node1_base.dart deleted file mode 100644 index d49d94cae..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/NestedScrollView/node1_base.dart +++ /dev/null @@ -1,89 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/6/16 -/// contact me by email 1981462002@qq.com - - -class NestedScrollViewDemo extends StatelessWidget { - final List _tabs = const ['风神传', '封妖志', "幻将录", "永恒传说"]; - - const NestedScrollViewDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height - 200, - child: Scaffold( - body: DefaultTabController( - length: _tabs.length, - child: NestedScrollView( - headerSliverBuilder: - (BuildContext context, bool innerBoxIsScrolled) { - return [ - SliverOverlapAbsorber( - handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), - sliver: SliverAppBar( - title: const Text('旷古奇书'), - pinned: true, - elevation: 6, //影深 - expandedHeight: 220.0, - forceElevated: innerBoxIsScrolled, //为true时展开有阴影 - flexibleSpace: FlexibleSpaceBar( - background: Image.asset( - "assets/images/wy_300x200_filter.webp", - fit: BoxFit.cover, - ), - ), - bottom: TabBar( - tabs: _tabs - .map((String name) => Tab(text: name,)) - .toList(), - ), - ), - ), - ]; - }, - body: _buildTabBarView(), - ), - ), - )); - } - - Widget _buildTabBarView() { - return TabBarView( - children: _tabs.map((String name) { - return SafeArea( - top: false, - bottom: false, - child: Builder( - builder: (BuildContext context) { - return CustomScrollView( - key: PageStorageKey(name), - slivers: [ - SliverOverlapInjector( - handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), - ), - SliverPadding( - padding: const EdgeInsets.all(8.0), - sliver: SliverFixedExtentList( - itemExtent: 48.0, - delegate: SliverChildBuilderDelegate( - (BuildContext context, int index) { - return ListTile( - title: Text('《$name》 第 $index章'), - ); - }, - childCount: 50, - ), - ), - ), - ], - ); - }, - ), - ); - }).toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_de_DE.json deleted file mode 100644 index 26c0e4a63..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_de_DE.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "Umrandeter Button", - "info": "Material-stilisiertes Schaltflächenelement mit Rahmen, ähnlich wie OutlineButton. Attribute wie Rahmen, Farbe, Schatten usw. können über Stile geändert werden.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von OutlinedButton", - "desc": [ - "【child】 : Schaltflächeninhalt 【Widget】", - "【onPressed】 : Klickereignis 【VoidCallback】", - "【onLongPress】 : Langdrückereignis 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Stil von OutlinedButton", - "desc": [ - "【style】 : Schaltflächenstil 【ButtonStyle】", - "【focusNode】 : Fokus 【FocusNode】", - "【clipBehavior】 : Zuschneideverhalten 【Clip】", - "【autofocus】 : Autofokus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_en_US.json deleted file mode 100644 index 01a2b1ec7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_en_US.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "Outlined Button", - "info": "A Material-style outlined button, similar in behavior to OutlineButton. Properties such as border, color, and shadow can be changed through styling.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of OutlinedButton", - "desc": [ - "【child】: Button content 【Widget】", - "【onPressed】: Click event 【VoidCallback】", - "【onLongPress】: Long press event 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "OutlinedButton Style", - "desc": [ - "【style】: Button style 【ButtonStyle】", - "【focusNode】: Focus 【FocusNode】", - "【clipBehavior】: Clip behavior 【Clip】", - "【autofocus】: Autofocus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_es_ES.json deleted file mode 100644 index 567b7f319..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_es_ES.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "Botón con borde", - "info": "Botón de estilo Material con borde, similar a OutlineButton. Se pueden cambiar propiedades como el borde, el color, la sombra, etc., mediante estilos.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de OutlinedButton", - "desc": [ - "【child】 : Contenido del botón 【Widget】", - "【onPressed】 : Evento de clic 【VoidCallback】", - "【onLongPress】 : Evento de pulsación prolongada 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Estilo de OutlinedButton", - "desc": [ - "【style】 : Estilo del botón 【ButtonStyle】", - "【focusNode】 : Foco 【FocusNode】", - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【autofocus】 : Enfoque automático 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_fr_FR.json deleted file mode 100644 index 143ee767f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_fr_FR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "Bouton bordé", - "info": "Bouton de style Material avec bordure, similaire à OutlineButton. Les propriétés telles que la bordure, la couleur, l'ombre, etc., peuvent être modifiées via le style.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de OutlinedButton", - "desc": [ - "【child】 : Contenu du bouton 【Widget】", - "【onPressed】 : Événement de clic 【VoidCallback】", - "【onLongPress】 : Événement de pression longue 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Style de OutlinedButton", - "desc": [ - "【style】 : Style du bouton 【ButtonStyle】", - "【focusNode】 : Focus 【FocusNode】", - "【clipBehavior】 : Comportement de découpage 【Clip】", - "【autofocus】 : Mise au point automatique 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_it_IT.json deleted file mode 100644 index e0e9e9751..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_it_IT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "Pulsante con bordo", - "info": "Pulsante in stile Material con bordo, simile a OutlineButton. È possibile modificare proprietà come il bordo, il colore, l'ombra, ecc. tramite lo stile.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di OutlinedButton", - "desc": [ - "【child】 : Contenuto del pulsante 【Widget】", - "【onPressed】 : Evento di clic 【VoidCallback】", - "【onLongPress】 : Evento di pressione prolungata 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Stile di OutlinedButton", - "desc": [ - "【style】 : Stile del pulsante 【ButtonStyle】", - "【focusNode】 : Fuoco 【FocusNode】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【autofocus】 : Autofocus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ja_JP.json deleted file mode 100644 index 04a4e01da..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ja_JP.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "枠線ボタン", - "info": "Materialスタイルの枠線ボタンで、OutlineButtonと同様の動作をします。スタイルを変更して、枠線、色、影などのプロパティを変更できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OutlinedButtonの基本使用", - "desc": [ - "【child】 : ボタンの内容 【Widget】", - "【onPressed】 : クリックイベント 【VoidCallback】", - "【onLongPress】 : 長押しイベント 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "OutlinedButtonのスタイル", - "desc": [ - "【style】 : ボタンのスタイル 【ButtonStyle】", - "【focusNode】 : フォーカス 【FocusNode】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【autofocus】 : 自動フォーカス 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ko_KR.json deleted file mode 100644 index 08ef6379e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ko_KR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "테두리 버튼", - "info": "Material 스타일의 테두리 버튼으로, OutlineButton과 유사하게 동작합니다. 스타일을 통해 테두리, 색상, 그림자 등의 속성을 변경할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OutlinedButton 기본 사용법", - "desc": [ - "【child】 : 버튼 내용 【Widget】", - "【onPressed】 : 클릭 이벤트 【VoidCallback】", - "【onLongPress】 : 길게 누르기 이벤트 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "OutlinedButton 스타일", - "desc": [ - "【style】 : 버튼 스타일 【ButtonStyle】", - "【focusNode】 : 포커스 【FocusNode】", - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【autofocus】 : 자동 포커스 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_pt_PT.json deleted file mode 100644 index c744c26f2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_pt_PT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "Botão com Contorno", - "info": "Botão com contorno no estilo Material, semelhante ao OutlineButton. Pode alterar propriedades como contorno, cor, sombra, etc., através de estilos.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do OutlinedButton", - "desc": [ - "【child】 : Conteúdo do botão 【Widget】", - "【onPressed】 : Evento de clique 【VoidCallback】", - "【onLongPress】 : Evento de pressionar longo 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Estilo do OutlinedButton", - "desc": [ - "【style】 : Estilo do botão 【ButtonStyle】", - "【focusNode】 : Foco 【FocusNode】", - "【clipBehavior】 : Comportamento de corte 【Clip】", - "【autofocus】 : Foco automático 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ru_RU.json deleted file mode 100644 index c6dbfa19c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_ru_RU.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "Кнопка с контуром", - "info": "Кнопка в стиле Material с контуром, аналогичная OutlineButton. Свойства, такие как контур, цвет, тень, могут быть изменены через стили.", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование OutlinedButton", - "desc": [ - "【child】 : Содержимое кнопки 【Widget】", - "【onPressed】 : Событие нажатия 【VoidCallback】", - "【onLongPress】 : Событие длительного нажатия 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Стиль OutlinedButton", - "desc": [ - "【style】 : Стиль кнопки 【ButtonStyle】", - "【focusNode】 : Фокус 【FocusNode】", - "【clipBehavior】 : Поведение обрезки 【Clip】", - "【autofocus】 : Автофокус 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_zh-CN.json deleted file mode 100644 index 6c10b7c3c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/desc_zh-CN.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 355, - "name": "OutlinedButton", - "localName": "边框按钮", - "info": "Material风格的边线按钮,表现和 OutlineButton 类似。可通过样式更改边框、颜色、阴影等属性。", - "lever": 3, - "family": 1, - "linkIds": [ - 353, - 27, - 354 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OutlinedButton基本使用", - "desc": [ - "【child】 : 按钮内容 【Widget】", - "【onPressed】 : 点击事件 【VoidCallback】", - "【onLongPress】 : 长按事件 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "OutlinedButton样式", - "desc": [ - "【style】 : 按钮样式 【ButtonStyle】", - "【focusNode】 : 焦点 【FocusNode】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【autofocus】 : 自动聚焦 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/node1_base.dart deleted file mode 100644 index 01e46cec0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/node1_base.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class OutlinedButtonDemo extends StatelessWidget { - const OutlinedButtonDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - height: 60, - child: Wrap( - spacing: 20, - children: [ - OutlinedButton( - child: const Text('OutlinedButton'), - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - const OutlinedButton( - child: Text('禁用按钮'), - onPressed: null, - onLongPress: null, - ), - ], - )); - } - - void _onPressed() {} - - void _onLongPress() {} -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/node2_style.dart b/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/node2_style.dart deleted file mode 100644 index 3564a741f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/OutlinedButton/node2_style.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class OutlinedButtonStyleDemo extends StatelessWidget { - const OutlinedButtonStyleDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - child: Wrap( - spacing: 10, - children: [ - OutlinedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.orange, - foregroundColor: Colors.white, - elevation: 2, - shadowColor: Colors.orangeAccent), - child: const Text('ElevatedButton样式'), - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - OutlinedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.white, - foregroundColor: Colors.black, - side: const BorderSide(color: Colors.blue,width: 1), - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)) - ), - // elevation: 2, - shadowColor: Colors.orangeAccent), - child: const Text('ElevatedButton边线'), - autofocus: false, - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - ], - ), - ); - } - - void _onPressed() {} - - void _onLongPress() {} -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_de_DE.json deleted file mode 100644 index 4a34c1f33..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "Schwebende Komponente", - "info": "Ermöglicht die schwebende Anzeige von Komponenten in der gesamten Anwendung, Komponenten können hinzugefügt oder entfernt werden, sie haben einen unabhängig verwalteten Stack.", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Overlay", - "desc": [ - "Overlay.of(context).insert fügt eine globale Komponente ein" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_en_US.json deleted file mode 100644 index 57430ba3c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "Floating Component", - "info": "Can display components in a floating manner across the entire application, allowing components to be added or removed, with an independently managed stack.", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Overlay", - "desc": [ - "Overlay.of(context).insert inserts a global component" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_es_ES.json deleted file mode 100644 index 61645ccc9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "Componente Flotante", - "info": "Permite mostrar componentes de forma flotante en toda la aplicación, se pueden agregar o eliminar componentes, tienen una pila gestionada de forma independiente.", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de Overlay", - "desc": [ - "Overlay.of(context).insert inserta un componente global" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_fr_FR.json deleted file mode 100644 index 811e9797f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "Composant flottant", - "info": "Permet d'afficher un composant en mode flottant dans toute l'application, peut ajouter ou supprimer des composants, ils ont une pile gérée indépendamment.", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'Overlay", - "desc": [ - "Overlay.of(context).insert insère un composant global" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_it_IT.json deleted file mode 100644 index 8cd793adc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "Componente Sovrapposto", - "info": "Consente di visualizzare i componenti in sovrapposizione su tutta l'applicazione, aggiungere o rimuovere componenti, che hanno una pila gestita in modo indipendente.", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di Overlay", - "desc": [ - "Overlay.of(context).insert inserisce un componente globale" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ja_JP.json deleted file mode 100644 index 8aa728b4a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "フローティングコンポーネント", - "info": "コンポーネントをアプリ全体でフローティング表示することができ、コンポーネントを追加または削除することができます。これらは独立して管理されるスタックを持っています。", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Overlayの基本使用", - "desc": [ - "Overlay.of(context).insertでグローバルコンポーネントを挿入" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ko_KR.json deleted file mode 100644 index 9fd065af9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "플로팅 컴포넌트", - "info": "컴포넌트를 전체 애플리케이션에서 플로팅으로 표시할 수 있으며, 컴포넌트를 추가하거나 제거할 수 있고, 독립적으로 관리되는 스택을 가집니다.", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Overlay 기본 사용법", - "desc": [ - "Overlay.of(context).insert로 전역 컴포넌트 삽입" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_pt_PT.json deleted file mode 100644 index 0c59436be..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "Componente Flutuante", - "info": "Permite exibir componentes de forma flutuante em toda a aplicação, podendo adicionar ou remover componentes, eles têm uma pilha de gerenciamento independente.", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Overlay", - "desc": [ - "Overlay.of(context).insert insere um componente global" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ru_RU.json deleted file mode 100644 index 6e3895e9d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "Плавающий компонент", - "info": "Позволяет отображать компоненты поверх всего приложения, добавлять или удалять компоненты, они имеют независимо управляемый стек.", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Overlay", - "desc": [ - "Overlay.of(context).insert вставляет глобальный компонент" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_zh-CN.json deleted file mode 100644 index a582e71e3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 182, - "name": "Overlay", - "localName": "悬浮组件", - "info": "可以将组件在全应用中进行悬浮显示,能够添加或移除组件,它们有独立管理的栈。", - "lever": 5, - "family": 1, - "linkIds": [ - 265, - 266 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Overlay基本使用", - "desc": [ - "Overlay.of(context).insert插入全局组件" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Overlay/node1_base.dart deleted file mode 100644 index 54d8d481d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Overlay/node1_base.dart +++ /dev/null @@ -1,100 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - - -class CustomOverlay extends StatelessWidget { - const CustomOverlay({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - children: [ - SizedBox( - height: 50, - child: RawMaterialButton( - elevation: 2, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - fillColor: Colors.blue, - splashColor: Colors.orange, - textStyle: const TextStyle(color: Colors.white), - child: const Icon(Icons.add), - onPressed: ()=>showFloating(context), - ), - ), - const SizedBox( - height: 50, - child: RawMaterialButton( - elevation: 2, - shape: CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - fillColor: Colors.red, - splashColor: Colors.orange, - textStyle: TextStyle(color: Colors.white), - child: Icon(Icons.remove), - onPressed: hideFloating, - ), - ), - ], - ); - } -} - -bool show = false; -Offset offset = const Offset(200, 200); - -const double radius = 60; - -var entry = OverlayEntry( - builder: (context) => Stack( - children: [ - Positioned( - left: offset.dx, - top: offset.dy, - child: _buildFloating(), - ), - ], - )); - -///绘制悬浮控件 -_buildFloating() => GestureDetector( - onPanDown: (details) { - offset = details.globalPosition - const Offset(radius / 2, radius / 2); - entry.markNeedsBuild(); - }, - onPanUpdate: (DragUpdateDetails details) { - offset = offset + details.delta; - entry.markNeedsBuild(); - }, - onLongPress: hideFloating, - child: Material( - color: Colors.transparent, - child: Container( - height: radius, - width: radius, - alignment: Alignment.center, - decoration: const BoxDecoration( - shape: BoxShape.circle, - image: DecorationImage( - image: AssetImage('assets/images/icon_head.webp')), - ), - ), - )); - -showFloating(BuildContext context) { - if (!show) { - Overlay.of(context)?.insert(entry); - show = true; - } -} - -hideFloating() { - if (show) { - entry.remove(); - show = false; - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_de_DE.json deleted file mode 100644 index 3199650a8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_de_DE.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "Swipe-Seite", - "info": "Enthält mehrere Komponentenseiten, zwischen denen durch Wischen gewechselt werden kann. Es können Attribute wie Wischrichtung, ob umgekehrt, Wischcontroller usw. angegeben werden.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PageView", - "desc": [ - "【children】 : Liste der Unterkomponenten 【List】", - "【onPageChanged】 : Klickereignis 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Wischrichtung von PageView", - "desc": [ - "【scrollDirection】 : Wischrichtung 【Axis】", - "【reverse】 : Ob umgekehrt 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Einfache Verwendung des PageView-Controllers", - "desc": [ - "【controller】 : Seitencontroller 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_en_US.json deleted file mode 100644 index f886e9db1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_en_US.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "Swipe Page", - "info": "It can accommodate multiple component pages, and you can swipe to switch between them. You can specify properties such as the direction of the swipe, whether it is reversed, and the swipe controller.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PageView", - "desc": [ - "【children】 : List of child components 【List】", - "【onPageChanged】 : Click event 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Swipe Direction of PageView", - "desc": [ - "【scrollDirection】 : Swipe direction 【Axis】", - "【reverse】 : Whether to reverse 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Simple Use of PageView Controller", - "desc": [ - "【controller】 : Page controller 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_es_ES.json deleted file mode 100644 index a1c218402..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_es_ES.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "Deslizar página", - "info": "Contiene múltiples páginas de componentes, permite cambiar entre ellas deslizando, y se pueden especificar propiedades como la dirección del deslizamiento, si es inverso, el controlador de deslizamiento, etc.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PageView", - "desc": [ - "【children】 : Lista de componentes hijos 【List】", - "【onPageChanged】 : Evento de clic 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Dirección de deslizamiento de PageView", - "desc": [ - "【scrollDirection】 : Dirección de deslizamiento 【Axis】", - "【reverse】 : Si es inverso 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Uso simple del controlador de PageView", - "desc": [ - "【controller】 : Controlador de página 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_fr_FR.json deleted file mode 100644 index 3463d157f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_fr_FR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "Glissement de page", - "info": "Contient plusieurs pages de composants, permet de les faire glisser pour les changer, et permet de spécifier la direction du glissement, l'inversion, le contrôleur de glissement, etc.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PageView", - "desc": [ - "【children】 : Liste des composants enfants 【List】", - "【onPageChanged】 : Événement de clic 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direction de glissement de PageView", - "desc": [ - "【scrollDirection】 : Direction de glissement 【Axis】", - "【reverse】 : Inversion 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Utilisation simple du contrôleur de PageView", - "desc": [ - "【controller】 : Contrôleur de page 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_it_IT.json deleted file mode 100644 index 385a3183e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_it_IT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "Scorrimento Pagina", - "info": "Contiene più componenti di pagina, consente di scorrere tra di essi, è possibile specificare la direzione di scorrimento, se invertire, il controller di scorrimento e altre proprietà.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di PageView", - "desc": [ - "【children】 : Lista dei componenti figli 【List】", - "【onPageChanged】 : Evento di clic 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direzione di scorrimento di PageView", - "desc": [ - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【reverse】 : Se invertire 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Uso semplice del controller di PageView", - "desc": [ - "【controller】 : Controller della pagina 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ja_JP.json deleted file mode 100644 index 7741210a4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ja_JP.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "スワイプページ", - "info": "複数のコンポーネントページを収容し、それらをスワイプして切り替えることができます。スワイプの方向、逆方向にするかどうか、スワイプコントローラーなどの属性を指定できます。", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PageViewの基本使用", - "desc": [ - "【children】 : 子コンポーネントリスト 【List】", - "【onPageChanged】 : クリックイベント 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "PageViewのスワイプ方向", - "desc": [ - "【scrollDirection】 : スワイプ方向 【Axis】", - "【reverse】 : 逆方向にするかどうか 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "PageViewコントローラーの簡単な使用", - "desc": [ - "【controller】 : ページコントローラー 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ko_KR.json deleted file mode 100644 index 345c08edd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ko_KR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "스와이프 페이지", - "info": "여러 컴포넌트 페이지를 수용하며, 슬라이딩 전환을 할 수 있습니다. 슬라이딩 방향, 역방향 여부, 슬라이딩 컨트롤러 등의 속성을 지정할 수 있습니다.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PageView 기본 사용법", - "desc": [ - "【children】 : 자식 컴포넌트 리스트 【List】", - "【onPageChanged】 : 클릭 이벤트 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "PageView 슬라이딩 방향", - "desc": [ - "【scrollDirection】 : 슬라이딩 방향 【Axis】", - "【reverse】 : 역방향 여부 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "PageView 컨트롤러 간단 사용법", - "desc": [ - "【controller】 : 페이지 컨트롤러 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_pt_PT.json deleted file mode 100644 index e9da0fde7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_pt_PT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "Deslizar Página", - "info": "Acomoda várias páginas de componentes, permite alternar entre elas deslizando, pode especificar a direção do deslize, se é reverso, controlador de deslize e outras propriedades.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do PageView", - "desc": [ - "【children】 : Lista de componentes filhos 【List】", - "【onPageChanged】 : Evento de clique 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direção de deslize do PageView", - "desc": [ - "【scrollDirection】 : Direção de deslize 【Axis】", - "【reverse】 : Se é reverso 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Uso simples do controlador do PageView", - "desc": [ - "【controller】 : Controlador de página 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ru_RU.json deleted file mode 100644 index 521e3d14e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_ru_RU.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "Скользящая страница", - "info": "Содержит несколько компонентов страниц, позволяет переключаться между ними с помощью скольжения, можно указать направление скольжения, обратное направление, контроллер скольжения и другие свойства.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PageView", - "desc": [ - "【children】 : Список дочерних компонентов 【List】", - "【onPageChanged】 : Событие клика 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Направление скольжения PageView", - "desc": [ - "【scrollDirection】 : Направление скольжения 【Axis】", - "【reverse】 : Обратное направление 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "Простое использование контроллера PageView", - "desc": [ - "【controller】 : Контроллер страницы 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_zh-CN.json deleted file mode 100644 index de89d037a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/desc_zh-CN.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 165, - "name": "PageView", - "localName": "滑页", - "info": "容纳多个组件页面,可对它们进行滑动切换,可指定滑动的方向、是否反向、滑动控制器等属性。", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PageView基本使用", - "desc": [ - "【children】 : 子组件列表 【List】", - "【onPageChanged】 : 点击事件 【ValueChanged】" - ] - }, - { - "file": "node2_direction.dart", - "name": "PageView滑动方向", - "desc": [ - "【scrollDirection】 : 滑动方向 【Axis】", - "【reverse】 : 是否反向 【bool】" - ] - }, - { - "file": "node3_controller.dart", - "name": "PageView控制器简单实用", - "desc": [ - "【controller】 : 页面控制器 【PageController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/PageView/node1_base.dart deleted file mode 100644 index 8d046efa1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/node1_base.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-28 -/// contact me by email 1981462002@qq.com - -class CustomPageView extends StatelessWidget { - const CustomPageView({super.key}); - - List get data => [ - Colors.green[50]!, - Colors.green[100]!, - Colors.green[200]!, - Colors.green[300]!, - Colors.green[400]!, - Colors.green[500]!, - Colors.green[600]!, - Colors.green[700]!, - Colors.green[800]!, - Colors.green[900]!, - ]; - - TextStyle get textStyle => - const TextStyle(color: Colors.white, fontSize: 24, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ), - ]); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 150, - child: PageView( - onPageChanged: (position) => print(position), - children: data - .map((color) => Container( - alignment: Alignment.center, - width: 90, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - )) - .toList(), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/node2_direction.dart b/modules/widget_system/widgets/lib/StatefulWidget/PageView/node2_direction.dart deleted file mode 100644 index 95139a7dd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/node2_direction.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-28 -/// contact me by email 1981462002@qq.com - -class DirectionPageView extends StatelessWidget { - const DirectionPageView({super.key}); - - List get data => [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - TextStyle get textStyle => - const TextStyle(color: Colors.white, fontSize: 24, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ), - ]); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 150, - child: PageView( - scrollDirection: Axis.vertical, - reverse: true, - onPageChanged: (position) { - print(position); - }, - children: data - .map((color) => Container( - alignment: Alignment.center, - width: 90, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - )) - .toList(), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PageView/node3_controller.dart b/modules/widget_system/widgets/lib/StatefulWidget/PageView/node3_controller.dart deleted file mode 100644 index c7e0d62a0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PageView/node3_controller.dart +++ /dev/null @@ -1,78 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-28 -/// contact me by email 1981462002@qq.com - -class CtrlPageView extends StatefulWidget { - const CtrlPageView({Key? key}) : super(key: key); - - @override - _CtrlPageViewState createState() => _CtrlPageViewState(); -} - -class _CtrlPageViewState extends State { - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - ]; - - late PageController _controller; - - @override - void dispose() { - _controller.dispose(); - super.dispose(); - } - - @override - void initState() { - super.initState(); - _controller=PageController( - viewportFraction: 0.8, - initialPage: (data.length/2).round() - ); - } - TextStyle get textStyle => - const TextStyle(color: Colors.white, fontSize: 24, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ), - ]); - @override - Widget build(BuildContext context) { - return SizedBox( - height: 150, - child: PageView( - controller: _controller, - onPageChanged: (position) { - print(position); - }, - children: data - .map((color) => - Container( - alignment: Alignment.center, - width: 90, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - )) - .toList(), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_de_DE.json deleted file mode 100644 index 9f7f1ee81..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_de_DE.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "Seitenweise Tabelle", - "info": "Eine funktionsreiche, seitenweise Tabellenkomponente, die die Seitenzahl, Sortierung und das Wechseln zwischen den Seiten ermöglicht.", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Verwendung von PaginatedDataTable", - "desc": [ - "【header】 : Tabellenname 【Widget】", - "【rowsPerPage】 : Anzahl der Datensätze pro Seite 【int】", - "【actions】 : Aktionskomponenten 【List】", - "【columns】 : Datenspalten 【List】", - "【sortColumnIndex】 : Index der Sortierspalte 【int】", - "【sortAscending】 : Aufsteigend sortieren 【bool】", - "【onSelectAll】 : Rückruf für Alle auswählen 【ValueSetter】", - "【onRowsPerPageChanged】 : Listener für Seitenänderungen 【ValueChanged】", - "【availableRowsPerPage】 : Verfügbare Seitenlisten 【List】", - "【source】 : Datenquelle 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_en_US.json deleted file mode 100644 index add383634..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_en_US.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "Paginated Table", - "info": "A feature-rich paginated table component that allows specifying the number of pages, sorting, and switching between pages.", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PaginatedDataTable Usage", - "desc": [ - "【header】 : Table Name 【Widget】", - "【rowsPerPage】 : Number of records per page 【int】", - "【actions】 : Action components 【List】", - "【columns】 : Data columns 【List】", - "【sortColumnIndex】 : Sort column index 【int】", - "【sortAscending】 : Whether ascending 【bool】", - "【onSelectAll】 : Select all callback 【ValueSetter】", - "【onRowsPerPageChanged】 : Page change listener 【ValueChanged】", - "【availableRowsPerPage】 : Available page list 【List】", - "【source】 : Data source 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_es_ES.json deleted file mode 100644 index 96607e25f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_es_ES.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "Tabla Paginada", - "info": "Un componente de tabla paginada rico en funciones, que permite especificar el número de páginas, el orden, y la navegación entre páginas.", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de PaginatedDataTable", - "desc": [ - "【header】 : Nombre de la tabla 【Widget】", - "【rowsPerPage】 : Número de registros por página 【int】", - "【actions】 : Componentes de acción 【List】", - "【columns】 : Columnas de datos 【List】", - "【sortColumnIndex】 : Índice de la columna de ordenación 【int】", - "【sortAscending】 : Orden ascendente 【bool】", - "【onSelectAll】 : Callback de selección total 【ValueSetter】", - "【onRowsPerPageChanged】 : Listener de cambio de paginación 【ValueChanged】", - "【availableRowsPerPage】 : Lista de paginación disponible 【List】", - "【source】 : Fuente de datos 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_fr_FR.json deleted file mode 100644 index 43e77c18d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_fr_FR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "Tableau paginé", - "info": "Un composant de tableau paginé riche en fonctionnalités, permettant de spécifier le nombre de pages, le tri, et la navigation entre les pages.", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de PaginatedDataTable", - "desc": [ - "【header】 : Nom du tableau 【Widget】", - "【rowsPerPage】 : Nombre d'enregistrements par page 【int】", - "【actions】 : Composants d'action 【List】", - "【columns】 : Colonnes de données 【List】", - "【sortColumnIndex】 : Index de la colonne de tri 【int】", - "【sortAscending】 : Ordre croissant 【bool】", - "【onSelectAll】 : Rappel de sélection totale 【ValueSetter】", - "【onRowsPerPageChanged】 : Écouteur de changement de pagination 【ValueChanged】", - "【availableRowsPerPage】 : Liste des paginations disponibles 【List】", - "【source】 : Source de données 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_it_IT.json deleted file mode 100644 index 47a368e5e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_it_IT.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "Tabella Paginabile", - "info": "Un componente di tabella ricco di funzionalità, con paginazione, ordinamento e navigazione tra le pagine.", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di PaginatedDataTable", - "desc": [ - "【header】 : Nome della tabella 【Widget】", - "【rowsPerPage】 : Numero di record per pagina 【int】", - "【actions】 : Componenti di azione 【List】", - "【columns】 : Colonne dei dati 【List】", - "【sortColumnIndex】 : Indice della colonna di ordinamento 【int】", - "【sortAscending】 : Ordinamento crescente 【bool】", - "【onSelectAll】 : Callback per la selezione di tutti 【ValueSetter】", - "【onRowsPerPageChanged】 : Listener per il cambio della paginazione 【ValueChanged】", - "【availableRowsPerPage】 : Lista delle paginazioni disponibili 【List】", - "【source】 : Fonte dei dati 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ja_JP.json deleted file mode 100644 index 4485ba4d4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ja_JP.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "ページネーション可能なテーブル", - "info": "ページネーション数、並び替え、ページの前後切り替えを指定できる機能豊富なページネーション可能なテーブルコンポーネント。", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PaginatedDataTable の使用", - "desc": [ - "【header】 : テーブル名 【Widget】", - "【rowsPerPage】 : 1ページあたりのレコード数 【int】", - "【actions】 : 操作コンポーネント 【List】", - "【columns】 : データ列 【List】", - "【sortColumnIndex】 : 並び替え列のインデックス 【int】", - "【sortAscending】 : 昇順かどうか 【bool】", - "【onSelectAll】 : 全選択コールバック 【ValueSetter】", - "【onRowsPerPageChanged】 : ページネーション変更リスナー 【ValueChanged】", - "【availableRowsPerPage】 : 利用可能なページネーションリスト 【List】", - "【source】 : データソース 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ko_KR.json deleted file mode 100644 index ce3edafc4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ko_KR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "페이지네이션 테이블", - "info": "기능이 풍부한 페이지네이션 테이블 컴포넌트로, 페이지 수, 정렬, 페이지 전환 등을 지정할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PaginatedDataTable 사용", - "desc": [ - "【header】 : 테이블 이름 【Widget】", - "【rowsPerPage】 : 페이지당 레코드 수 【int】", - "【actions】 : 액션 컴포넌트 【List】", - "【columns】 : 데이터 열 【List】", - "【sortColumnIndex】 : 정렬 열 인덱스 【int】", - "【sortAscending】 : 오름차순 여부 【bool】", - "【onSelectAll】 : 전체 선택 콜백 【ValueSetter】", - "【onRowsPerPageChanged】 : 페이지 변경 리스너 【ValueChanged】", - "【availableRowsPerPage】 : 사용 가능한 페이지 목록 【List】", - "【source】 : 데이터 소스 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_pt_PT.json deleted file mode 100644 index a3d105d80..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_pt_PT.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "Tabela Paginada", - "info": "Um componente de tabela paginada rico em funcionalidades, que permite especificar o número de páginas, ordenação, e navegação entre páginas.", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do PaginatedDataTable", - "desc": [ - "【header】 : Nome da tabela 【Widget】", - "【rowsPerPage】 : Número de registros por página 【int】", - "【actions】 : Componentes de ação 【List】", - "【columns】 : Colunas de dados 【List】", - "【sortColumnIndex】 : Índice da coluna de ordenação 【int】", - "【sortAscending】 : Ordenação ascendente 【bool】", - "【onSelectAll】 : Callback de seleção total 【ValueSetter】", - "【onRowsPerPageChanged】 : Listener de mudança de paginação 【ValueChanged】", - "【availableRowsPerPage】 : Lista de paginação disponível 【List】", - "【source】 : Fonte de dados 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ru_RU.json deleted file mode 100644 index c64937f4c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_ru_RU.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "Таблица с постраничной навигацией", - "info": "Многофункциональный компонент таблицы с постраничной навигацией, позволяющий указать количество страниц, сортировку и переключение между страницами.", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование PaginatedDataTable", - "desc": [ - "【header】 : Название таблицы 【Widget】", - "【rowsPerPage】 : Количество записей на странице 【int】", - "【actions】 : Компоненты действий 【List】", - "【columns】 : Столбцы данных 【List】", - "【sortColumnIndex】 : Индекс столбца сортировки 【int】", - "【sortAscending】 : Сортировка по возрастанию 【bool】", - "【onSelectAll】 : Обратный вызов для выбора всех 【ValueSetter】", - "【onRowsPerPageChanged】 : Слушатель изменения страницы 【ValueChanged】", - "【availableRowsPerPage】 : Список доступных страниц 【List】", - "【source】 : Источник данных 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_zh-CN.json deleted file mode 100644 index 2eeb0cf84..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/desc_zh-CN.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 235, - "name": "PaginatedDataTable", - "localName": "可分页表格", - "info": "一个功能丰富的可分页表格组件,可指定分页数、排列、页码前后切换。", - "lever": 4, - "family": 1, - "linkIds": [ - 110, - 102 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PaginatedDataTable 使用", - "desc": [ - "【header】 : 表名 【Widget】", - "【rowsPerPage】 : 每页记录数 【int】", - "【actions】 : 操作组件 【List】", - "【columns】 : 数据列 【List】", - "【sortColumnIndex】 : 排序列索引 【int】", - "【sortAscending】 : 是否升序 【bool】", - "【onSelectAll】 : 全选回调 【ValueSetter】", - "【onRowsPerPageChanged】 : 分页改变监听 【ValueChanged】", - "【availableRowsPerPage】 : 可用分页列表 【List】", - "【source】 : 数据源 【DataTableSource】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/node1_base.dart deleted file mode 100644 index 622c38e35..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PaginatedDataTable/node1_base.dart +++ /dev/null @@ -1,207 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class PaginatedDataTableDemo extends StatefulWidget { - const PaginatedDataTableDemo({Key? key}) : super(key: key); - - @override - State createState() => _PaginatedDataTableDemoState(); -} - -class _PaginatedDataTableDemoState extends State { - int _rowsPerPage = 5; - - int _sortColumnIndex = 0; - bool _sortAscending = true; - - final DessertDataSource _dessertsDataSource = DessertDataSource(); - - void sort( - Comparable Function(HeroInfo d) getField, - int columnIndex, - bool ascending, - ) { - _dessertsDataSource.sort(getField, ascending); - setState(() { - _sortColumnIndex = columnIndex; - _sortAscending = ascending; - }); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - width: 350, - child: SingleChildScrollView( - child: PaginatedDataTable( - actions: const [ - IconButton(icon: Icon(Icons.add), onPressed: null), - ], - header: const Text( - '《旷古奇书》-角色预设', - style: TextStyle(color: Colors.blue), - ), - rowsPerPage: _rowsPerPage, - availableRowsPerPage: const [5, 8, 10, 15], - onRowsPerPageChanged: (int? value) { - setState(() { - _rowsPerPage = value ?? 0; - }); - }, - sortColumnIndex: _sortColumnIndex, - sortAscending: _sortAscending, - onSelectAll: _dessertsDataSource._selectAll, - columns: [ - DataColumn( - label: const Text('角色名称'), - onSort: (int columnIndex, bool ascending) => sort( - (HeroInfo d) => d.name, columnIndex, ascending)), - DataColumn( - label: const Text('主场卷部'), - tooltip: '人物主要出场的作品.', - numeric: true, - onSort: (int columnIndex, bool ascending) => sort( - (HeroInfo d) => d.calories, columnIndex, ascending)), - DataColumn( - label: const Text('种族'), - numeric: true, - onSort: (int columnIndex, bool ascending) => sort( - (HeroInfo d) => d.fat, columnIndex, ascending)), - DataColumn( - label: const Text('性别'), - numeric: true, - onSort: (int columnIndex, bool ascending) => sort( - (HeroInfo d) => d.carbs, columnIndex, ascending)), - ], - source: _dessertsDataSource), - )); - } -} - -class HeroInfo { - HeroInfo(this.name, this.calories, this.fat, this.carbs); - - final String name; - final String calories; - final String fat; - final String carbs; - bool selected = false; -} - -class DessertDataSource extends DataTableSource { - final List _desserts = [ - HeroInfo('捷特', '《幻将录》', "人族", "男"), - HeroInfo('龙少', '《幻将录》', "人族", "男"), - HeroInfo('巫缨', '《幻将录》', "人族", "女"), - HeroInfo('林兮', '《幻将录》', "人族", "男"), - HeroInfo('九方玄玉', '《风神传》', "神族", "男"), - HeroInfo('七日洪荒', '《风神传》', "魔族", "男"), - HeroInfo('林昔瑶', '《封妖志》', "鬼族", "女"), - HeroInfo('林兮鬼帝', '《封妖志》', "鬼族", "男"), - HeroInfo('艾隆', '《封妖志》', "鬼族", "男"), - HeroInfo('语熙华', '《风神传》', "道族", "男"), - HeroInfo('雪玉宛如', '《幻将录》', "人族", "女"), - HeroInfo('破千', '《幻将录》', "人族", "男"), - HeroInfo('浪封', '《幻将录》', "人族", "男"), - HeroInfo('虎翼穷奇', '《封妖志》', "妖族", "男"), - HeroInfo('凯', '《幻将录》', "人族", "男"), - HeroInfo('荆棘', '《幻将录》', "人族", "女"), - HeroInfo('龙右', '《幻将录》', "人族", "男"), - HeroInfo('梦千', '《幻将录》', "人族", "男"), - HeroInfo('梦小梦', '《幻将录》', "人族", "女"), - HeroInfo('梦瞳', '《幻将录》', "人族", "男"), - HeroInfo('十戈', '《幻将录》', "人族", "男"), - HeroInfo('计画天', '《幻将录》', "人族", "女"), - HeroInfo('士方', '《幻将录》', "人族", "男"), - HeroInfo('巫妻孋', '《幻将录》', "人族", "女"), - HeroInfo('木时黎', '《永恒传说》', "人族", "男"), - HeroInfo('木艾奇', '《永恒传说》', "人族", "男"), - HeroInfo('张风', '《永恒传说》', "人族", "男"), - HeroInfo('薛剑儿', '《永恒传说》', "人族", "男"), - HeroInfo('李月', '《永恒传说》', "人族", "女"), - HeroInfo('刘雪', '《永恒传说》', "人族", "女"), - HeroInfo('葛心', '《永恒传说》', "人族", "女"), - HeroInfo('步映容', '《幻将录》', "人族", "女"), - HeroInfo('莫慈良', '《幻将录》', "人族", "男"), - HeroInfo('莫向阳', '《幻将录》', "人族", "男"), - HeroInfo('莫子薇', '《永恒传说》', "人族", "女"), - HeroInfo('藏凯阳', '《永恒传说》', "人族", "男"), - HeroInfo('奇雨歆', '《永恒传说》', "人族", "女"), - HeroInfo('林天蕊', '《永恒传说》', "人族", "女"), - HeroInfo('吴灏然', '《永恒传说》', "人族", "男"), - HeroInfo('何解连', '《永恒传说》', "人族", "男"), - HeroInfo('步络尘', '《幻将录》', "人族", "男"), - HeroInfo('拓雷', '《幻将录》', "人族", "男"), - HeroInfo('炽阳骑', '《幻将录》', "人族", "男"), - HeroInfo('正构', '《幻将录》', "人族", "男"), - HeroInfo('烈', '《幻将录》', "人族", "男"), - HeroInfo('梦华君', '《幻将录》', "人族", "男"), - HeroInfo('初星', '《幻将录》', "人族", "男"), - HeroInfo('梦飞烟', '《幻将录》', "人族", "男"), - HeroInfo('武落英', '《幻将录》', "人族", "女"), - HeroInfo('古千缘', '《幻将录》', "人族", "男"), - ]; - - void sort( - Comparable Function(HeroInfo d) getField, - bool ascending, - ) { - _desserts.sort((HeroInfo a, HeroInfo b) { - if (!ascending) { - final HeroInfo c = a; - a = b; - b = c; - } - final Comparable aValue = getField(a); - final Comparable bValue = getField(b); - return Comparable.compare(aValue, bValue); - }); - notifyListeners(); - } - - int _selectedCount = 0; - - @override - DataRow? getRow(int index) { - if (index >= _desserts.length) return null; - final HeroInfo dessert = _desserts[index]; - return DataRow.byIndex( - index: index, - selected: dessert.selected, - onSelectChanged: (bool? value) { - if (dessert.selected != value && value != null) { - _selectedCount += value ? 1 : -1; - assert(_selectedCount >= 0); - dessert.selected = value; - notifyListeners(); - } - }, - cells: [ - DataCell(Center(child: Text(dessert.name))), - DataCell(Center(child: Text(dessert.calories))), - DataCell(Center(child: Text(dessert.fat))), - DataCell(Center(child: Text(dessert.carbs))), - ]); - } - - @override - bool get isRowCountApproximate => false; - - @override - int get rowCount => _desserts.length; - - @override - int get selectedRowCount => _selectedCount; - - void _selectAll(bool? checked) { - if (checked == null) return; - for (HeroInfo dessert in _desserts) { - dessert.selected = checked; - } - _selectedCount = checked ? _desserts.length : 0; - notifyListeners(); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_de_DE.json deleted file mode 100644 index 27b13dcce..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "Menüschaltfläche", - "info": "Zeigt ein Popup-Menü an, kann Attribute wie Versatz, Farbe, Schattentiefe, Form usw. angeben. Empfängt Ereignisse für die Auswahl von Elementen und die Abwahl.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PopupMenuButton", - "desc": [ - "【itemBuilder】 : Builder 【PopupMenuItemBuilder】", - "【offset】 : Versatz 【Offset】", - "【color】 : Hintergrundfarbe 【Color】", - "【shape】 : Form 【ShapeBorder】", - "【elevation】 : Schattentiefe 【double】", - "【onCanceled】 : Abwahlereignis 【Function()】", - "【onSelected】 : Auswahlereignis 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_en_US.json deleted file mode 100644 index 9946a4c75..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "Menu Button", - "info": "A pop-up menu bar that can specify attributes such as offset, color, elevation, and shape. Receives item selection and deselection events.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PopupMenuButton", - "desc": [ - "【itemBuilder】: Constructor 【PopupMenuItemBuilder】", - "【offset】: Offset 【Offset】", - "【color】: Background Color 【Color】", - "【shape】: Shape 【ShapeBorder】", - "【elevation】: Elevation 【double】", - "【onCanceled】: Cancel Event 【Function()】", - "【onSelected】: Selection Event 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_es_ES.json deleted file mode 100644 index 4ea4d72da..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "Botón de menú", - "info": "Menú emergente, se pueden especificar propiedades como desplazamiento, color, profundidad de sombra, forma, etc. Recibe eventos de selección de ítem y eventos de cancelación.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PopupMenuButton", - "desc": [ - "【itemBuilder】 : Constructor 【PopupMenuItemBuilder】", - "【offset】 : Desplazamiento 【Offset】", - "【color】 : Color de fondo 【Color】", - "【shape】 : Forma 【ShapeBorder】", - "【elevation】 : Profundidad de sombra 【double】", - "【onCanceled】 : Evento de cancelación 【Function()】", - "【onSelected】 : Evento de selección 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_fr_FR.json deleted file mode 100644 index b7aac68c0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "Bouton de menu", - "info": "Affiche un menu contextuel, permettant de spécifier des propriétés telles que le décalage, la couleur, la profondeur d'ombre, la forme, etc. Reçoit les événements de sélection et de désélection des éléments.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PopupMenuButton", - "desc": [ - "【itemBuilder】 : Constructeur 【PopupMenuItemBuilder】", - "【offset】 : Décalage 【Offset】", - "【color】 : Couleur de fond 【Color】", - "【shape】 : Forme 【ShapeBorder】", - "【elevation】 : Profondeur d'ombre 【double】", - "【onCanceled】 : Événement d'annulation 【Function()】", - "【onSelected】 : Événement de sélection 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_it_IT.json deleted file mode 100644 index 3f7896f37..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "Pulsante del menu", - "info": "Apre un menu a comparsa, con la possibilità di specificare proprietà come offset, colore, profondità dell'ombra, forma, ecc. Riceve eventi di selezione e annullamento degli elementi.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di PopupMenuButton", - "desc": [ - "【itemBuilder】 : Costruttore 【PopupMenuItemBuilder】", - "【offset】 : Offset 【Offset】", - "【color】 : Colore di sfondo 【Color】", - "【shape】 : Forma 【ShapeBorder】", - "【elevation】 : Profondità dell'ombra 【double】", - "【onCanceled】 : Evento di annullamento 【Function()】", - "【onSelected】 : Evento di selezione 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ja_JP.json deleted file mode 100644 index 66ccb8300..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "メニューボタン", - "info": "ポップアップメニューバーを表示し、オフセット、色、影の深さ、形状などの属性を指定できます。アイテムの選択イベントと選択解除イベントを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuButtonの基本使用", - "desc": [ - "【itemBuilder】 : ビルダー 【PopupMenuItemBuilder】", - "【offset】 : オフセット 【Offset】", - "【color】 : 背景色 【Color】", - "【shape】 : 形状 【ShapeBorder】", - "【elevation】 : 影の深さ 【double】", - "【onCanceled】 : キャンセルイベント 【Function()】", - "【onSelected】 : 選択イベント 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ko_KR.json deleted file mode 100644 index 77a05c34a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "메뉴 버튼", - "info": "팝업 메뉴 바를 표시하며, 오프셋, 색상, 그림자 깊이, 모양 등의 속성을 지정할 수 있습니다. 아이템 선택 이벤트와 선택 취소 이벤트를 수신합니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuButton 기본 사용", - "desc": [ - "【itemBuilder】 : 생성자 【PopupMenuItemBuilder】", - "【offset】 : 오프셋 【Offset】", - "【color】 : 배경색 【Color】", - "【shape】 : 모양 【ShapeBorder】", - "【elevation】 : 그림자 깊이 【double】", - "【onCanceled】 : 취소 이벤트 【Function()】", - "【onSelected】 : 선택 이벤트 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_pt_PT.json deleted file mode 100644 index 946e108f8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "Botão de Menu", - "info": "Exibe um menu pop-up, podendo especificar atributos como deslocamento, cor, profundidade de sombra, forma, etc. Recebe eventos de seleção e cancelamento de itens.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do PopupMenuButton", - "desc": [ - "【itemBuilder】 : Construtor 【PopupMenuItemBuilder】", - "【offset】 : Deslocamento 【Offset】", - "【color】 : Cor de fundo 【Color】", - "【shape】 : Forma 【ShapeBorder】", - "【elevation】 : Profundidade de sombra 【double】", - "【onCanceled】 : Evento de cancelamento 【Function()】", - "【onSelected】 : Evento de seleção 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ru_RU.json deleted file mode 100644 index 58a6e396f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "Кнопка меню", - "info": "Всплывающее меню, можно указать смещение, цвет, глубину тени, форму и другие атрибуты. Принимает события выбора элемента и отмены выбора.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PopupMenuButton", - "desc": [ - "【itemBuilder】 : Конструктор 【PopupMenuItemBuilder】", - "【offset】 : Смещение 【Offset】", - "【color】 : Цвет фона 【Color】", - "【shape】 : Форма 【ShapeBorder】", - "【elevation】 : Глубина тени 【double】", - "【onCanceled】 : Событие отмены 【Function()】", - "【onSelected】 : Событие выбора 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_zh-CN.json deleted file mode 100644 index d25591057..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 56, - "name": "PopupMenuButton", - "localName": "菜单按钮", - "info": "弹出菜单栏,可指定偏移、颜色、影深、形状等属性。接收item选中的事件和取消选择事件。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuButton基本使用", - "desc": [ - "【itemBuilder】 : 构造器 【PopupMenuItemBuilder】", - "【offset】 : 偏移 【Offset】", - "【color】 : 背景颜色 【Color】", - "【shape】 : 形状 【ShapeBorder】", - "【elevation】 : 影深 【double】", - "【onCanceled】 : 取消事件 【Function()】", - "【onSelected】 : 选择事件 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/node1_base.dart deleted file mode 100644 index 03fe4f20d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuButton/node1_base.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:widgets/utils/dialog_about.dart'; - - -/// create by 张风捷特烈 on 2020-03-16 -/// contact me by email 1981462002@qq.com - -class CustomPopupMenuButton extends StatefulWidget { - const CustomPopupMenuButton({Key? key}) : super(key: key); - - @override - _CustomPopupMenuButtonState createState() => _CustomPopupMenuButtonState(); -} - -class _CustomPopupMenuButtonState extends State { - final Map map = const { - "关于": Icons.info_outline, - "帮助": Icons.help_outline, - "问题反馈": Icons.add_comment, - }; - - @override - Widget build(BuildContext context) { - return PopupMenuButton( - itemBuilder: (context) => buildItems(), - offset: const Offset(0, 50), - color: const Color(0xffF4FFFA), - elevation: 1, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(20), - bottomRight: Radius.circular(20), - topRight: Radius.circular(5), - bottomLeft: Radius.circular(5), - )), - onSelected: (e) { - print(e); - if (e == '关于') { - DialogAbout.show(context); - } - }, - onCanceled: () => print('onCanceled'), - ); - } - - List> buildItems() { - return map.keys - .toList() - .map((e) => PopupMenuItem( - value: e, - child: Wrap( - spacing: 10, - children: [ - Icon(map[e], color: Colors.blue), - Text(e), - ], - ))) - .toList(); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_de_DE.json deleted file mode 100644 index 7a5dba891..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "Popup-Menü-Trennlinie", - "info": "Die Trennlinie des PopupMenuButton, wird normalerweise nicht allein verwendet und kann in der Höhe angegeben werden.", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PopupMenuDivider", - "desc": [ - "【height】 : Höhe 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_en_US.json deleted file mode 100644 index 728542b5f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "Popup Menu Divider", - "info": "The divider of PopupMenuButton, generally not used alone, the height can be specified.", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PopupMenuDivider", - "desc": [ - "【height】 : height 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_es_ES.json deleted file mode 100644 index 9c1269225..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "Divisor de menú emergente", - "info": "Divisor de PopupMenuButton, generalmente no se usa por separado, se puede especificar la altura.", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PopupMenuDivider", - "desc": [ - "【height】 : altura 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_fr_FR.json deleted file mode 100644 index f928156a4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "Ligne de séparation du menu contextuel", - "info": "Ligne de séparation pour PopupMenuButton, généralement pas utilisée seule, peut spécifier la hauteur.", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PopupMenuDivider", - "desc": [ - "【height】 : hauteur 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_it_IT.json deleted file mode 100644 index 925e2b303..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "Linea di divisione del menu a comparsa", - "info": "Linea di divisione per PopupMenuButton, generalmente non utilizzata da sola, può essere specificata l'altezza.", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di PopupMenuDivider", - "desc": [ - "【height】 : Altezza 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ja_JP.json deleted file mode 100644 index 1de2e6aea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "ポップアップメニュー区切り線", - "info": "PopupMenuButtonの区切り線で、通常は単独で使用されず、高さを指定できます。", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuDividerの基本使用", - "desc": [ - "【height】 : 高さ 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ko_KR.json deleted file mode 100644 index 831ee3807..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "팝업 메뉴 구분선", - "info": "PopupMenuButton의 구분선, 일반적으로 단독으로 사용되지 않으며, 높이를 지정할 수 있습니다.", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuDivider 기본 사용", - "desc": [ - "【height】 : 높이 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_pt_PT.json deleted file mode 100644 index 2b66764a7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "Divisor de Menu Pop-up", - "info": "Divisor do PopupMenuButton, geralmente não é usado sozinho, pode ser especificada a altura.", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do PopupMenuDivider", - "desc": [ - "【height】 : altura 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ru_RU.json deleted file mode 100644 index 3a81af8ed..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "Разделитель всплывающего меню", - "info": "Разделитель для PopupMenuButton, обычно не используется отдельно, можно указать высоту.", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PopupMenuDivider", - "desc": [ - "【height】 : Высота 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_zh-CN.json deleted file mode 100644 index 40ed06d79..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 174, - "name": "PopupMenuDivider", - "localName": "弹出菜单分割线", - "info": "PopupMenuButton的分割线,一般不单独使用,可指定高度。", - "lever": 1, - "family": 1, - "linkIds": [ - 56, - 34 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PopupMenuDivider基本使用", - "desc": [ - "【height】 : 高度 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/node1_base.dart deleted file mode 100644 index b72d5538d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PopupMenuDivider/node1_base.dart +++ /dev/null @@ -1,68 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:widgets/utils/dialog_about.dart'; - - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomPopupMenuDivider extends StatelessWidget { - const CustomPopupMenuDivider({Key? key}) : super(key: key); - - final Map map = const { - "关于": Icons.info_outline, - "帮助": Icons.help_outline, - "问题反馈": Icons.add_comment, - }; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildPopupMenuButton(context), - const PopupMenuDivider(), - ], - ); - } - - PopupMenuButton _buildPopupMenuButton(BuildContext context) { - return PopupMenuButton( - itemBuilder: (context) => [ - ...buildItems().sublist(0, 2), - const PopupMenuDivider(), - ...buildItems().sublist(2, 3) - ], - offset: const Offset(0, 50), - color: const Color(0xffF4FFFA), - elevation: 1, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(20), - bottomRight: Radius.circular(20), - topRight: Radius.circular(5), - bottomLeft: Radius.circular(5), - )), - onSelected: (e) { - print(e); - if (e == '关于') { - DialogAbout.show(context); - } - }, - onCanceled: () => print('onCanceled'), - ); - } - - List> buildItems() { - return map.keys - .toList() - .map((e) => PopupMenuItem( - value: e, - child: Wrap( - spacing: 10, - children: [ - Icon(map[e], color: Colors.blue), - Text(e), - ], - ))) - .toList(); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_de_DE.json deleted file mode 100644 index 190ea2229..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "Positionsübergang", - "info": "Kann nur in einem Stack verwendet werden, kann ein Kindelement enthalten und lässt es eine Positionsanimation zwischen zwei Rechtecken durchführen, erfordert einen Animator rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PositionedTransition", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【rect】 : Animation 【Animation】", - " PositionedTransition-Komponente kann nur innerhalb eines Stacks funktionieren" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_en_US.json deleted file mode 100644 index c9b298bf7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "Position Transition", - "info": "Can only be used in a Stack, can contain one child component, allowing it to animate between two rectangles, requires an animator rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PositionedTransition", - "desc": [ - "【child】 : Child component 【Widget】", - "【rect】 : Animation 【Animation】", - " The PositionedTransition component only works within a Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_es_ES.json deleted file mode 100644 index af3c0d420..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "Transición de Posición", - "info": "Solo se puede usar en Stack, puede contener un componente hijo y permite que realice una animación de posición entre dos rectángulos, se requiere proporcionar un animador rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PositionedTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【rect】 : Animación 【Animation】", - " El componente PositionedTransition solo funciona dentro de Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_fr_FR.json deleted file mode 100644 index aa494ce66..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "Transition de position", - "info": "Ne peut être utilisé que dans une Stack, peut contenir un seul composant enfant, permettant une animation de position entre deux rectangles, nécessite un animateur rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PositionedTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【rect】 : Animation 【Animation】", - " Le composant PositionedTransition ne fonctionne que dans une Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_it_IT.json deleted file mode 100644 index d503ee471..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "Transizione di posizione", - "info": "Può essere utilizzato solo in uno Stack, può contenere un componente figlio e permette di animare la posizione tra due rettangoli, è necessario fornire un animatore rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di PositionedTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【rect】 : Animazione 【Animation】", - " Il componente PositionedTransition funziona solo all'interno di uno Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ja_JP.json deleted file mode 100644 index a7eb3d4cf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "位置変換", - "info": "Stack内でのみ使用可能で、1つの子コンポーネントを収容し、2つの矩形間で位置アニメーションを行わせることができます。アニメーターrectを提供する必要があります。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PositionedTransitionの基本的な使用法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【rect】 : アニメーション 【Animation】", - " PositionedTransitionコンポーネントはStack内でのみ機能します" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ko_KR.json deleted file mode 100644 index 1b7674db7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "위치 변환", - "info": "Stack에서만 사용 가능하며, 하나의 자식 위젯을 포함할 수 있고, 두 사각형 사이에서 위치 애니메이션을 수행할 수 있습니다. 애니메이션 rect를 제공해야 합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PositionedTransition 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【rect】 : 애니메이션 【Animation】", - " PositionedTransition 위젯은 Stack 내에서만 작동합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_pt_PT.json deleted file mode 100644 index 9c65910dc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "Transição de Posição", - "info": "Só pode ser usado em uma Stack, pode conter um componente filho, permitindo que ele faça uma animação de posição entre dois retângulos, é necessário fornecer um animador rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do PositionedTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【rect】 : Animação 【Animation】", - " O componente PositionedTransition só funciona dentro de uma Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ru_RU.json deleted file mode 100644 index bd5e2aa96..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "Позиционный переход", - "info": "Может использоваться только в Stack, может содержать один дочерний компонент, позволяющий ему выполнять анимацию между двумя прямоугольниками, требуется предоставить аниматор rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PositionedTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【rect】 : Анимация 【Animation】", - " Компонент PositionedTransition может работать только внутри Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_zh-CN.json deleted file mode 100644 index 5999b455f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 93, - "name": "PositionedTransition", - "localName": "位置变换", - "info": "只能用于Stack中,可容纳一个子组件,让其在两个矩形间进行位置动画,需要提供动画器rect。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PositionedTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【rect】 : 动画 【Animation】", - " PositionedTransition组件只能在Stack内起作用" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/node1_base.dart deleted file mode 100644 index 6485185c5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/PositionedTransition/node1_base.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomPositionedTransition extends StatefulWidget { - const CustomPositionedTransition({Key? key}) : super(key: key); - - @override - _CustomPositionedTransitionState createState() => - _CustomPositionedTransitionState(); -} - -class _CustomPositionedTransitionState extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 2), - ); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Container( - color: Colors.grey.withAlpha(33), - width: 200, - height: 100, - child: Stack( - children: [ - PositionedTransition( - rect: RelativeRectTween( - begin: const RelativeRect.fromLTRB(0, 50, 150, 100), - end: const RelativeRect.fromLTRB(60, 0, 150, -50), - ).animate(_ctrl), - child: const Icon( - Icons.android, - color: Colors.green, - size: 50, - ), - ) - ], - ), - )); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_de_DE.json deleted file mode 100644 index d7c3a2b24..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "Auswahlknopf", - "info": "Aufgrund der runden Knöpfe für ausgewählte und nicht ausgewählte Zustände können mehrere Radios je nach Logik Einzel- oder Mehrfachauswahl ermöglichen. Farbe kann angegeben werden, und Statusänderungsrückrufe werden empfangen.", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Radio", - "desc": [ - "【value】 : Auswahlknopfwert 【T】", - "【groupValue】 : Aktueller Übereinstimmungswert 【T】", - "【activeColor】 : Aktivierungsfarbe 【Color】", - "【onChanged】 : Rückruf bei Änderung 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_en_US.json deleted file mode 100644 index 9cba63c94..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "Radio Button", - "info": "Due to the selected and unselected states of the circular button, multiple Radios can implement single or multiple selection requirements based on logic. The color can be specified, and a callback for state changes is supported.", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Radio", - "desc": [ - "【value】: Radio button value 【T】", - "【groupValue】: Current matching value 【T】", - "【activeColor】: Active color 【Color】", - "【onChanged】: Callback on change 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_es_ES.json deleted file mode 100644 index 1b0024bfc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "Botón de selección", - "info": "Debido a los botones circulares en estados seleccionados y no seleccionados, múltiples Radio pueden satisfacer necesidades de selección única o múltiple según la lógica. Se puede especificar el color y recibir una devolución de llamada para cambios de estado.", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Radio", - "desc": [ - "【value】 : Valor del botón de selección 【T】", - "【groupValue】 : Valor de coincidencia actual 【T】", - "【activeColor】 : Color activo 【Color】", - "【onChanged】 : Devolución de llamada al cambiar 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_fr_FR.json deleted file mode 100644 index c4853c7c2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "Bouton de sélection", - "info": "En raison des boutons ronds pour les états sélectionnés et non sélectionnés, plusieurs Radio peuvent répondre aux besoins de sélection unique ou multiple selon la logique. La couleur peut être spécifiée et un rappel de changement d'état peut être reçu.", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Radio", - "desc": [ - "【value】 : Valeur du bouton de sélection 【T】", - "【groupValue】 : Valeur de correspondance actuelle 【T】", - "【activeColor】 : Couleur active 【Color】", - "【onChanged】 : Rappel lors du changement 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_it_IT.json deleted file mode 100644 index f1786d8da..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "Pulsante di selezione", - "info": "A causa dei pulsanti rotondi per lo stato selezionato e non selezionato, più Radio possono realizzare la necessità di selezione singola o multipla secondo la logica. È possibile specificare il colore e ricevere un callback per i cambiamenti di stato.", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Radio", - "desc": [ - "【value】 : Valore del pulsante di selezione 【T】", - "【groupValue】 : Valore di corrispondenza corrente 【T】", - "【activeColor】 : Colore attivo 【Color】", - "【onChanged】 : Callback al cambiamento 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ja_JP.json deleted file mode 100644 index 587b57670..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "ラジオボタン", - "info": "選択状態と未選択状態の円形ボタンであり、複数のRadioを論理的に使用することで、単一選択または複数選択の要件を実現できます。色を指定でき、状態変化のコールバックを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Radioの基本的な使用法", - "desc": [ - "【value】 : ラジオボタンの値 【T】", - "【groupValue】 : 現在のマッチ値 【T】", - "【activeColor】 : アクティブな色 【Color】", - "【onChanged】 : 変更時のコールバック 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ko_KR.json deleted file mode 100644 index f28f41ce1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "라디오 버튼", - "info": "선택 및 미선택 상태의 원형 버튼으로, 여러 개의 라디오 버튼을 통해 논리에 따라 단일 선택 또는 다중 선택이 가능합니다. 색상을 지정할 수 있으며, 상태 변화 콜백을 받을 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "라디오 버튼 기본 사용법", - "desc": [ - "【value】 : 라디오 버튼 값 【T】", - "【groupValue】 : 현재 일치 값 【T】", - "【activeColor】 : 활성화 색상 【Color】", - "【onChanged】 : 변경 시 콜백 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_pt_PT.json deleted file mode 100644 index 03a9593d0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "Botão de seleção", - "info": "Devido aos botões circulares para estados selecionados e não selecionados, vários Radios podem atender às necessidades de seleção única ou múltipla com base na lógica. Pode-se especificar a cor e receber um retorno de chamada para mudanças de estado.", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Radio", - "desc": [ - "【value】 : Valor do botão de seleção 【T】", - "【groupValue】 : Valor correspondente atual 【T】", - "【activeColor】 : Cor ativa 【Color】", - "【onChanged】 : Retorno de chamada ao mudar 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ru_RU.json deleted file mode 100644 index 1859bd1e5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "Кнопка выбора", - "info": "Из-за круглых кнопок в выбранном и невыбранном состоянии, несколько Radio могут реализовать потребности в выборе одного или нескольких вариантов в зависимости от логики. Можно указать цвет, получать обратные вызовы при изменении состояния.", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Radio", - "desc": [ - "【value】 : Значение кнопки выбора 【T】", - "【groupValue】 : Текущее совпадающее значение 【T】", - "【activeColor】 : Активный цвет 【Color】", - "【onChanged】 : Обратный вызов при изменении 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_zh-CN.json deleted file mode 100644 index 05943372d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 45, - "name": "Radio", - "localName": "选钮", - "info": "由于选中和未选择状态的圆钮,多个Radio根据逻辑可以实现单选或多选的需求。可指定颜色,接收状态变化回调。", - "lever": 4, - "family": 1, - "linkIds": [19,240], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Radio基本使用", - "desc": [ - "【value】 : 选钮值 【T】", - "【groupValue】 : 当前匹配值 【T】", - "【activeColor】 : 激活颜色 【Color】", - "【onChanged】 : 改变时回调 【Function(T)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Radio/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Radio/node1_base.dart deleted file mode 100644 index 363a7ece5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Radio/node1_base.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomRadio extends StatefulWidget { - const CustomRadio({Key? key}) : super(key: key); - - @override - _CustomRadioState createState() => _CustomRadioState(); -} - -class _CustomRadioState extends State { - List data = [1, 2, 3, 4, 5]; - double _value = 1; - - @override - Widget build(BuildContext context) { - return Row( - mainAxisSize: MainAxisSize.min, - children: data - .map((e) => Radio( - activeColor: Colors.orangeAccent, - value: e, - groupValue: _value, - onChanged: (v) => setState(() => _value = v??0))) - .toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_de_DE.json deleted file mode 100644 index b64765646..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "Bereichs-Schieberegler", - "info": "Bereichs-Schieberegler-Komponente, unterstützt das Ziehen von zwei Punkten, um den Bereich dazwischen zu erhalten. Ermöglicht die Angabe von Farbe, Anzahl der Abschnitte und angezeigte Labels, empfängt Rückrufe bei Fortschrittsänderungen.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RangeSlider", - "desc": [ - "【values】 : Werte 【RangeValues】", - "【min】 : Mindestwert 【double】", - "【max】 : Höchstwert 【double】", - "【divisions】 : Anzahl der Abschnitte 【int】", - "【label】 : Text der Hinweisblase 【String】", - "【activeColor】 : Aktive Farbe 【Color】", - "【inactiveColor】 : Inaktive Farbe 【Color】", - "【onChangeStart】 : Listener beim Start des Ziehens 【Function(RangeValues)】", - "【onChangeEnd】 : Listener beim Ende des Ziehens 【Function(RangeValues)】", - "【onChanged】 : Rückruf bei Änderung 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_en_US.json deleted file mode 100644 index ac404002a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "Range Slider", - "info": "The Range Slider component supports two-point dragging to get the range between them. You can specify the color, number of segments, and displayed labels, and receive progress change callbacks.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RangeSlider", - "desc": [ - "【values】 : Values 【RangeValues】", - "【min】 : Minimum value 【double】", - "【max】 : Maximum value 【double】", - "【divisions】 : Number of divisions 【int】", - "【label】 : Tooltip text 【String】", - "【activeColor】 : Active color 【Color】", - "【inactiveColor】 : Inactive color 【Color】", - "【onChangeStart】 : Listener when sliding starts 【Function(RangeValues)】", - "【onChangeEnd】 : Listener when sliding ends 【Function(RangeValues)】", - "【onChanged】 : Callback when changed 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_es_ES.json deleted file mode 100644 index 60d9003b5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "Control deslizante de rango", - "info": "Componente de control deslizante de rango, compatible con arrastre de dos puntos para obtener el rango entre ellos. Permite especificar colores, número de segmentos y etiquetas mostradas, y recibe una devolución de llamada para cambios de progreso.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RangeSlider", - "desc": [ - "【values】 : valores 【RangeValues】", - "【min】 : valor mínimo 【double】", - "【max】 : valor máximo 【double】", - "【divisions】 : número de divisiones 【int】", - "【label】 : texto de la burbuja de sugerencia 【String】", - "【activeColor】 : color activo 【Color】", - "【inactiveColor】 : color inactivo 【Color】", - "【onChangeStart】 : escucha al comenzar a deslizar 【Function(RangeValues)】", - "【onChangeEnd】 : escucha al finalizar el deslizamiento 【Function(RangeValues)】", - "【onChanged】 : devolución de llamada al cambiar 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_fr_FR.json deleted file mode 100644 index ee1de5b21..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "Curseur de plage", - "info": "Composant de curseur de plage, prend en charge le glissement à deux points pour obtenir la plage entre eux. Peut spécifier la couleur, le nombre de segments et les étiquettes affichées, reçoit un rappel de changement de progression.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RangeSlider", - "desc": [ - "【values】 : valeurs 【RangeValues】", - "【min】 : valeur minimale 【double】", - "【max】 : valeur maximale 【double】", - "【divisions】 : nombre de segments 【int】", - "【label】 : texte de la bulle d'information 【String】", - "【activeColor】 : couleur active 【Color】", - "【inactiveColor】 : couleur inactive 【Color】", - "【onChangeStart】 : écouteur au début du glissement 【Function(RangeValues)】", - "【onChangeEnd】 : écouteur à la fin du glissement 【Function(RangeValues)】", - "【onChanged】 : rappel lors du changement 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_it_IT.json deleted file mode 100644 index fdf083528..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "Cursore di intervallo", - "info": "Componente cursore di intervallo, supporta il trascinamento di due punti per ottenere l'intervallo tra di essi. Può specificare il colore, il numero di segmenti e le etichette visualizzate, riceve un callback per le modifiche di avanzamento.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di RangeSlider", - "desc": [ - "【values】 : Valori 【RangeValues】", - "【min】 : Valore minimo 【double】", - "【max】 : Valore massimo 【double】", - "【divisions】 : Numero di segmenti 【int】", - "【label】 : Testo del tooltip 【String】", - "【activeColor】 : Colore attivo 【Color】", - "【inactiveColor】 : Colore inattivo 【Color】", - "【onChangeStart】 : Ascolta quando inizia lo scorrimento 【Function(RangeValues)】", - "【onChangeEnd】 : Ascolta quando finisce lo scorrimento 【Function(RangeValues)】", - "【onChanged】 : Callback al cambiamento 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ja_JP.json deleted file mode 100644 index d62e6d3fa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "範囲スライダー", - "info": "範囲スライダーコンポーネントは、2点のドラッグをサポートし、その間の範囲を取得します。色、セグメント数、表示されるラベルを指定でき、進捗変化のコールバックを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RangeSlider基本使用", - "desc": [ - "【values】 : 数値 【RangeValues】", - "【min】 : 最小値 【double】", - "【max】 : 最大値 【double】", - "【divisions】 : セグメント数 【int】", - "【label】 : ヒントバブルテキスト 【String】", - "【activeColor】 : アクティブカラー 【Color】", - "【inactiveColor】 : 非アクティブカラー 【Color】", - "【onChangeStart】 : スライド開始時のリスナー 【Function(RangeValues)】", - "【onChangeEnd】 : スライド終了時のリスナー 【Function(RangeValues)】", - "【onChanged】 : 変更時のコールバック 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ko_KR.json deleted file mode 100644 index c95744b34..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "범위 슬라이더", - "info": "범위 슬라이더 컴포넌트, 두 점 드래그를 지원하여 그 사이의 범위를 얻을 수 있습니다. 색상, 분할 수 및 표시된 라벨을 지정할 수 있으며, 진행 변화 콜백을 받습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RangeSlider 기본 사용", - "desc": [ - "【values】 : 값 【RangeValues】", - "【min】 : 최소값 【double】", - "【max】 : 최대값 【double】", - "【divisions】 : 분할 수 【int】", - "【label】 : 툴팁 텍스트 【String】", - "【activeColor】 : 활성화 색상 【Color】", - "【inactiveColor】 : 비활성화 색상 【Color】", - "【onChangeStart】 : 슬라이드 시작 시 리스너 【Function(RangeValues)】", - "【onChangeEnd】 : 슬라이드 종료 시 리스너 【Function(RangeValues)】", - "【onChanged】 : 변경 시 콜백 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_pt_PT.json deleted file mode 100644 index 6158ffede..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "Controlo deslizante de intervalo", - "info": "Componente de controlo deslizante de intervalo, suporta arrasto de dois pontos para obter o intervalo entre eles. Pode especificar a cor, o número de segmentos e as etiquetas exibidas, e recebe uma chamada de retorno para alterações no progresso.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do RangeSlider", - "desc": [ - "【values】 : valores 【RangeValues】", - "【min】 : valor mínimo 【double】", - "【max】 : valor máximo 【double】", - "【divisions】 : número de segmentos 【int】", - "【label】 : texto da bolha de dica 【String】", - "【activeColor】 : cor ativa 【Color】", - "【inactiveColor】 : cor inativa 【Color】", - "【onChangeStart】 : ouvinte ao iniciar o deslize 【Function(RangeValues)】", - "【onChangeEnd】 : ouvinte ao terminar o deslize 【Function(RangeValues)】", - "【onChanged】 : chamada de retorno ao alterar 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ru_RU.json deleted file mode 100644 index 7475fa488..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "Ползунок диапазона", - "info": "Компонент ползунка диапазона, поддерживает перетаскивание двух точек для получения диапазона между ними. Можно указать цвет, количество сегментов и отображаемые метки, а также получать обратные вызовы при изменении прогресса.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RangeSlider", - "desc": [ - "【values】 : Значения 【RangeValues】", - "【min】 : Минимальное значение 【double】", - "【max】 : Максимальное значение 【double】", - "【divisions】 : Количество сегментов 【int】", - "【label】 : Текст подсказки 【String】", - "【activeColor】 : Активный цвет 【Color】", - "【inactiveColor】 : Неактивный цвет 【Color】", - "【onChangeStart】 : Слушатель начала перетаскивания 【Function(RangeValues)】", - "【onChangeEnd】 : Слушатель окончания перетаскивания 【Function(RangeValues)】", - "【onChanged】 : Обратный вызов при изменении 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_zh-CN.json deleted file mode 100644 index 815e725eb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 44, - "name": "RangeSlider", - "localName": "范围滑块", - "info": "范围滑块组件,支持两点拖动,获取之间的范围。可指定颜色、分段数及显示的标签,接收进度变化回调。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RangeSlider基本使用", - "desc": [ - "【values】 : 数值 【RangeValues】", - "【min】 : 最小值 【double】", - "【max】 : 最大值 【double】", - "【divisions】 : 分段数 【int】", - "【label】 : 提示气泡文字 【String】", - "【activeColor】 : 激活颜色 【Color】", - "【inactiveColor】 : 非激活颜色 【Color】", - "【onChangeStart】 : 开始滑动时监听 【Function(RangeValues)】", - "【onChangeEnd】 : 滑动结束时监听 【Function(RangeValues)】", - "【onChanged】 : 改变时回调 【Function(RangeValues)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/node1_base.dart deleted file mode 100644 index bb9ab74e9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RangeSlider/node1_base.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomRangeSlider extends StatefulWidget { - const CustomRangeSlider({Key? key}) : super(key: key); - - @override - _CustomRangeSliderState createState() => _CustomRangeSliderState(); -} - -class _CustomRangeSliderState extends State { - RangeValues _rangeValues = const RangeValues(90, 270); - - @override - Widget build(BuildContext context) { - return RangeSlider( - values: _rangeValues, - divisions: 180, - min: 0.0, - max: 360.0, - labels: RangeLabels(_rangeValues.start.toStringAsFixed(1), - _rangeValues.end.toStringAsFixed(1)), - activeColor: Colors.orangeAccent, - inactiveColor: Colors.green.withAlpha(99), - onChangeStart: (value) { - print('开始滑动:$value'); - }, - onChangeEnd: (value) { - print('滑动结束:$value'); - }, - onChanged: (value) { - setState(() { - _rangeValues = value; - }); - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_de_DE.json deleted file mode 100644 index 36e4d9cd8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_de_DE.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "Native Chip", - "info": "Der Vorfahr aller Chip-Komponenten, der die Fähigkeit besitzt, das Verhalten jedes Chips zu zeigen, unterstützt Ereignisse wie Auswählen, Klicken und Löschen. Weitere Informationen finden Sie unter Chip, FilterChip, ActionChip, InputChip und ChoiceChip.", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "RawChip Klickeffekt", - "desc": [ - "【label】: Mittlere Komponente 【Widget】", - "【padding】: Innenabstand 【EdgeInsetsGeometry】", - "【labelPadding】: Label-Abstand 【EdgeInsetsGeometry】", - "【shadowColor】: Schattenfarbe 【Color】", - "【avatar】: Linke Komponente 【Widget】", - "【elevation】: Schattentiefe 【double】", - "【pressElevation】: Schattentiefe beim Klicken 【double】", - "【onPressed】: Klickereignis 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "RawChip Auswahl- und Lösch-Effekt", - "desc": [ - "【selected】: Ist ausgewählt 【bool】", - "【deleteIconColor】: Farbe des Endsymbols 【Color】", - "【selectedColor】: Auswahlfarbe 【Color】", - "【deleteIcon】: Endkomponente 【Widget】", - "【onSelected】: Auswahlereignis 【Function(bool)】", - "【onDeleted】: Endereignis 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_en_US.json deleted file mode 100644 index cc299aa39..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_en_US.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "RawChip", - "info": "The ancestor of each Chip component, possessing the ability to exhibit each Chip's behavior, supporting events such as selection, click, and deletion. For details, see Chip, FilterChip, ActionChip, InputChip, ChoiceChip.", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "RawChip Click Effect", - "desc": [ - "【label】: Middle component 【Widget】", - "【padding】 : Padding 【EdgeInsetsGeometry】", - "【labelPadding】 : Label padding 【EdgeInsetsGeometry】", - "【shadowColor】: Shadow color 【Color】", - "【avatar】: Left component 【Widget】", - "【elevation】: Elevation 【double】", - "【pressElevation】: Elevation when pressed 【double】", - "【onPressed】 : Click event 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "RawChip Selection and Deletion Effect", - "desc": [ - "【selected】: Whether selected 【bool】", - "【deleteIconColor】: Trailing icon color 【Color】", - "【selectedColor】: Selected color 【Color】", - "【deleteIcon】: Trailing component 【Widget】", - "【onSelected】: Selection event 【Function(bool)】", - "【onDeleted】 : Trailing event 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_es_ES.json deleted file mode 100644 index 48e0eb6db..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_es_ES.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "Chip Nativo", - "info": "El antepasado de cada componente Chip, con la capacidad de representar cada comportamiento de Chip, soporta eventos como selección, clic, eliminación, etc. Para más detalles, consulta Chip, FilterChip, ActionChip, InputChip, ChoiceChip.", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "Efecto de clic en RawChip", - "desc": [ - "【label】: Componente central 【Widget】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】", - "【labelPadding】 : Relleno de la etiqueta 【EdgeInsetsGeometry】", - "【shadowColor】: Color de la sombra 【Color】", - "【avatar】: Componente izquierdo 【Widget】", - "【elevation】: Profundidad de la sombra 【double】", - "【pressElevation】: Profundidad de la sombra al hacer clic 【double】", - "【onPressed】 : Evento de clic 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Efecto de selección y eliminación en RawChip", - "desc": [ - "【selected】: Si está seleccionado 【bool】", - "【deleteIconColor】: Color del icono de eliminación 【Color】", - "【selectedColor】: Color de selección 【Color】", - "【deleteIcon】: Componente de eliminación 【Widget】", - "【onSelected】: Evento de selección 【Function(bool)】", - "【onDeleted】 : Evento de eliminación 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_fr_FR.json deleted file mode 100644 index 7c9461bc1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_fr_FR.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "Petite barre native", - "info": "L'ancêtre de chaque composant Chip, possédant la capacité de représenter chaque Chip, prend en charge des événements tels que la sélection, le clic, la suppression, etc. Voir Chip, FilterChip, ActionChip, InputChip, ChoiceChip pour plus de détails.", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "Effet de clic de RawChip", - "desc": [ - "【label】: Composant central 【Widget】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】", - "【labelPadding】 : Marge du label 【EdgeInsetsGeometry】", - "【shadowColor】: Couleur de l'ombre 【Color】", - "【avatar】: Composant gauche 【Widget】", - "【elevation】: Profondeur de l'ombre 【double】", - "【pressElevation】: Profondeur de l'ombre lors du clic 【double】", - "【onPressed】 : Événement de clic 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Effet de sélection et de suppression de RawChip", - "desc": [ - "【selected】: Est sélectionné 【bool】", - "【deleteIconColor】: Couleur de l'icône de fin 【Color】", - "【selectedColor】: Couleur de sélection 【Color】", - "【deleteIcon】: Composant de fin 【Widget】", - "【onSelected】: Événement de sélection 【Function(bool)】", - "【onDeleted】 : Événement de fin 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_it_IT.json deleted file mode 100644 index 9469f54d3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_it_IT.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "Chip Nativo", - "info": "L'antenato di tutti i componenti Chip, con la capacità di rappresentare ogni Chip, supporta eventi come selezione, clic, eliminazione, ecc. Vedi Chip, FilterChip, ActionChip, InputChip, ChoiceChip per maggiori dettagli.", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "Effetto Clic di RawChip", - "desc": [ - "【label】: Componente centrale 【Widget】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】", - "【labelPadding】 : Spaziatura del label 【EdgeInsetsGeometry】", - "【shadowColor】: Colore dell'ombra 【Color】", - "【avatar】: Componente sinistro 【Widget】", - "【elevation】: Profondità dell'ombra 【double】", - "【pressElevation】: Profondità dell'ombra al clic 【double】", - "【onPressed】 : Evento di clic 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Effetto Selezione ed Eliminazione di RawChip", - "desc": [ - "【selected】: Se selezionato 【bool】", - "【deleteIconColor】: Colore dell'icona di coda 【Color】", - "【selectedColor】: Colore selezionato 【Color】", - "【deleteIcon】: Componente di coda 【Widget】", - "【onSelected】: Evento di selezione 【Function(bool)】", - "【onDeleted】 : Evento di coda 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ja_JP.json deleted file mode 100644 index 7c53a5b74..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ja_JP.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "ネイティブチップ", - "info": "各Chipコンポーネントの始祖であり、各Chipの表現能力を持ち、選択、クリック、削除などのイベントをサポートします。詳細はChip、FilterChip、ActionChip、InputChip、ChoiceChipを参照してください。", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "RawChipクリック効果", - "desc": [ - "【label】: 中間コンポーネント 【Widget】", - "【padding】 : パディング 【EdgeInsetsGeometry】", - "【labelPadding】 : ラベルパディング 【EdgeInsetsGeometry】", - "【shadowColor】: シャドウカラー 【Color】", - "【avatar】: 左側コンポーネント 【Widget】", - "【elevation】: 影の深さ 【double】", - "【pressElevation】: クリック時の影の深さ 【double】", - "【onPressed】 : クリックイベント 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "RawChip選択と削除効果", - "desc": [ - "【selected】: 選択されているか 【bool】", - "【deleteIconColor】: 末尾アイコンカラー 【Color】", - "【selectedColor】: 選択色 【Color】", - "【deleteIcon】: 末尾コンポーネント 【Widget】", - "【onSelected】: 選択イベント 【Function(bool)】", - "【onDeleted】 : 末尾イベント 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ko_KR.json deleted file mode 100644 index 5ee7e501a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ko_KR.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "원본 칩", - "info": "각 Chip 컴포넌트의 조상으로, 각 Chip의 표현 능력을 가지고 있으며, 선택, 클릭, 삭제 등의 이벤트를 지원합니다. 자세한 내용은 Chip, FilterChip, ActionChip, InputChip, ChoiceChip을 참조하세요.", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "RawChip 클릭 효과", - "desc": [ - "【label】: 중간 컴포넌트 【Widget】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】", - "【labelPadding】 : 라벨 여백 【EdgeInsetsGeometry】", - "【shadowColor】: 그림자 색상 【Color】", - "【avatar】: 왼쪽 컴포넌트 【Widget】", - "【elevation】: 그림자 깊이 【double】", - "【pressElevation】: 클릭 시 그림자 깊이 【double】", - "【onPressed】 : 클릭 이벤트 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "RawChip 선택 및 삭제 효과", - "desc": [ - "【selected】: 선택 여부 【bool】", - "【deleteIconColor】: 끝 아이콘 색상 【Color】", - "【selectedColor】: 선택 색상 【Color】", - "【deleteIcon】: 끝 컴포넌트 【Widget】", - "【onSelected】: 선택 이벤트 【Function(bool)】", - "【onDeleted】 : 끝 이벤트 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_pt_PT.json deleted file mode 100644 index 972d20a3f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_pt_PT.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "Chip Nativo", - "info": "O ancestral de cada componente Chip, possui a capacidade de exibir cada comportamento de Chip, suportando eventos como seleção, clique, exclusão, etc. Consulte Chip, FilterChip, ActionChip, InputChip, ChoiceChip para mais detalhes.", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "Efeito de Clique do RawChip", - "desc": [ - "【label】: Componente central 【Widget】", - "【padding】 : Preenchimento interno 【EdgeInsetsGeometry】", - "【labelPadding】 : Preenchimento do label 【EdgeInsetsGeometry】", - "【shadowColor】: Cor da sombra 【Color】", - "【avatar】: Componente esquerdo 【Widget】", - "【elevation】: Profundidade da sombra 【double】", - "【pressElevation】: Profundidade da sombra ao clicar 【double】", - "【onPressed】 : Evento de clique 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Efeito de Seleção e Exclusão do RawChip", - "desc": [ - "【selected】: Selecionado ou não 【bool】", - "【deleteIconColor】: Cor do ícone de exclusão 【Color】", - "【selectedColor】: Cor de seleção 【Color】", - "【deleteIcon】: Componente de ícone de exclusão 【Widget】", - "【onSelected】: Evento de seleção 【Function(bool)】", - "【onDeleted】 : Evento de exclusão 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ru_RU.json deleted file mode 100644 index 852e4ae38..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_ru_RU.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "Нативный чип", - "info": "Прародитель всех компонентов Chip, обладает способностью отображать различные чипы, поддерживает события выбора, клика, удаления и другие. Подробнее см. Chip, FilterChip, ActionChip, InputChip, ChoiceChip.", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "Эффект нажатия RawChip", - "desc": [ - "【label】: Центральный компонент 【Widget】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】", - "【labelPadding】 : Отступы для label 【EdgeInsetsGeometry】", - "【shadowColor】: Цвет тени 【Color】", - "【avatar】: Левый компонент 【Widget】", - "【elevation】: Глубина тени 【double】", - "【pressElevation】: Глубина тени при нажатии 【double】", - "【onPressed】 : Событие нажатия 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Эффект выбора и удаления RawChip", - "desc": [ - "【selected】: Выбрано ли 【bool】", - "【deleteIconColor】: Цвет иконки удаления 【Color】", - "【selectedColor】: Цвет выбора 【Color】", - "【deleteIcon】: Компонент в конце 【Widget】", - "【onSelected】: Событие выбора 【Function(bool)】", - "【onDeleted】 : Событие в конце 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_zh-CN.json deleted file mode 100644 index c70fd51df..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/desc_zh-CN.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 153, - "name": "RawChip", - "localName": "原生小条", - "info": "各自Chip组件的始祖,拥有各自Chip表现的能力,支持选中、点击、删除等事件。详见Chip、FilterChip、ActionChip、InputChip、ChoiceChip。", - "lever": 5, - "family": 1, - "linkIds": [ - 11, - 12, - 13, - 14, - 15 - ], - "nodes": [ - { - "file": "node1_press.dart", - "name": "RawChip点击效果", - "desc": [ - "【label】: 中间组件 【Widget】", - "【padding】 : 内边距 【EdgeInsetsGeometry】", - "【labelPadding】 : label边距 【EdgeInsetsGeometry】", - "【shadowColor】: 阴影色 【Color】", - "【avatar】: 左侧组件 【Widget】", - "【elevation】: 影深 【double】", - "【pressElevation】: 点击时影深 【double】", - "【onPressed】 : 点击事件 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "RawChip选中和删除效果", - "desc": [ - "【selected】: 是否选中 【bool】", - "【deleteIconColor】: 尾部图标色 【Color】", - "【selectedColor】: 选中色 【Color】", - "【deleteIcon】: 尾部组件 【Widget】", - "【onSelected】: 选中事件 【Function(bool)】", - "【onDeleted】 : 尾部事件 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/node1_press.dart b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/node1_press.dart deleted file mode 100644 index 39140106c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/node1_press.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class PressRawChip extends StatelessWidget { - const PressRawChip({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return RawChip( - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(3), - label: const Text('张风捷特烈'), - avatar: Image.asset("assets/images/icon_head.webp"), - elevation: 3, - pressElevation: 5, - shadowColor: Colors.orangeAccent, - onPressed: () => Navigator.of(context).pushNamed('AboutMePage'), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/node2_select.dart b/modules/widget_system/widgets/lib/StatefulWidget/RawChip/node2_select.dart deleted file mode 100644 index 2165a0d24..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawChip/node2_select.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class SelectRawChip extends StatefulWidget { - const SelectRawChip({Key? key}) : super(key: key); - - @override - _SelectRawChipState createState() => _SelectRawChipState(); -} - -class _SelectRawChipState extends State { - bool _selected = false; - @override - Widget build(BuildContext context) { - return RawChip( - selected: _selected, - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(3), - deleteIconColor: Colors.red, - selectedColor: Colors.orangeAccent.withAlpha(44), - label: const Text('张风捷特烈'), - avatar: Image.asset("assets/images/icon_head.webp"), - elevation: 3, - pressElevation: 5, - shadowColor: Colors.orangeAccent, - onSelected: (v)=> setState(() => _selected=v), - onDeleted: () => Navigator.of(context).pushNamed('AboutMePage'), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_de_DE.json deleted file mode 100644 index a9931825e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "Rohgestenerkennung", - "info": "Kann verwendet werden, um die durch eine gegebene Gestenfabrik beschriebenen Gesten zu erkennen, was bei der Entwicklung eigener Gestenerkenner sehr nützlich ist. Für gängige Gesten verwenden Sie GestureRecognizer.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RawGestureDetector", - "desc": [ - "【behavior】 : Erkennungsverhalten 【HitTestBehavior】", - "【gestures】 : Gestenzuordnung 【Map】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_en_US.json deleted file mode 100644 index 68828d2b9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "Raw Gesture Detector", - "info": "Can be used to detect gestures described by a given gesture factory, which is very useful when developing your own gesture recognizer. For common gestures, use GestureRecognizer.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RawGestureDetector", - "desc": [ - "【behavior】: Detection behavior 【HitTestBehavior】", - "【gestures】: Gesture mapping 【Map】", - "【child】: Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_es_ES.json deleted file mode 100644 index ac69bfcaa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "Detector de gestos en bruto", - "info": "Se puede utilizar para detectar gestos descritos por una fábrica de gestos dada, es muy útil al desarrollar su propio reconocedor de gestos. Para gestos comunes, use GestureRecognizer.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RawGestureDetector", - "desc": [ - "【behavior】 : Comportamiento de detección 【HitTestBehavior】", - "【gestures】 : Mapeo de gestos 【Map】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_fr_FR.json deleted file mode 100644 index 109a3ad2a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "Détecteur de gestes bruts", - "info": "Peut être utilisé pour détecter les gestes décrits par une usine de gestes donnée, très utile lors du développement de son propre détecteur de gestes. Pour les gestes courants, utilisez GestureRecognizer.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RawGestureDetector", - "desc": [ - "【behavior】 : Comportement de détection 【HitTestBehavior】", - "【gestures】 : Mappage des gestes 【Map】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_it_IT.json deleted file mode 100644 index 5607345e2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "Rilevatore di gesti grezzi", - "info": "Può essere utilizzato per rilevare i gesti descritti da una determinata fabbrica di gesti, molto utile nello sviluppo del proprio riconoscitore di gesti. Per i gesti comuni, utilizzare GestureRecognizer.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di RawGestureDetector", - "desc": [ - "【behavior】 : Comportamento di rilevamento 【HitTestBehavior】", - "【gestures】 : Mappatura dei gesti 【Map】", - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ja_JP.json deleted file mode 100644 index 11076bb36..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "生のジェスチャー検出器", - "info": "指定されたジェスチャーファクトリの記述に基づいてジェスチャーを検出するために使用できます。独自のジェスチャー認識器を開発する際に非常に便利です。一般的なジェスチャーには、GestureRecognizerを使用してください。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawGestureDetectorの基本的な使用法", - "desc": [ - "【behavior】 : 検出動作 【HitTestBehavior】", - "【gestures】 : ジェスチャーマッピング 【Map】", - "【child】 : 子ウィジェット 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ko_KR.json deleted file mode 100644 index 35c0c4e75..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "원 제스처 감지기", - "info": "주어진 제스처 팩토리 설명에 따라 제스처를 감지하는 데 사용할 수 있으며, 자신만의 제스처 인식기를 개발할 때 매우 유용합니다. 일반적인 제스처의 경우 GestureRecognizer를 사용하세요.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawGestureDetector 기본 사용법", - "desc": [ - "【behavior】 : 감지 행동 【HitTestBehavior】", - "【gestures】 : 제스처 매핑 【Map】", - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_pt_PT.json deleted file mode 100644 index cc83464e4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "Detetor de Gestos Bruto", - "info": "Pode ser usado para detetar gestos descritos por uma fábrica de gestos fornecida, sendo muito útil ao desenvolver o seu próprio reconhecedor de gestos. Para gestos comuns, use o GestureRecognizer.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RawGestureDetector", - "desc": [ - "【behavior】 : Comportamento de deteção 【HitTestBehavior】", - "【gestures】 : Mapeamento de gestos 【Map】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ru_RU.json deleted file mode 100644 index 1b1570ad6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "Детектор жестов", - "info": "Может использоваться для обнаружения жестов, описанных заданной фабрикой жестов. Очень полезен при разработке собственного распознавателя жестов. Для распространенных жестов используйте GestureRecognizer.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RawGestureDetector", - "desc": [ - "【behavior】 : Поведение обнаружения 【HitTestBehavior】", - "【gestures】 : Сопоставление жестов 【Map】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_zh-CN.json deleted file mode 100644 index f061068ae..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 248, - "name": "RawGestureDetector", - "localName": "原手势检测器", - "info": "可以用来检测给定手势工厂描述的手势,在开发自己的手势识别器时非常有用。对于常见的手势,使用 GestureRecognizer。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawGestureDetector基本使用", - "desc": [ - "【behavior】 : 侦测行为 【HitTestBehavior】", - "【gestures】 : 手势映射 【Map】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/node1_base.dart deleted file mode 100644 index 505f019a8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawGestureDetector/node1_base.dart +++ /dev/null @@ -1,61 +0,0 @@ - -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class RawGestureDetectorDemo extends StatefulWidget { - const RawGestureDetectorDemo({Key? key}) : super(key: key); - - @override - _RawGestureDetectorDemoState createState() => _RawGestureDetectorDemoState(); -} - -class _RawGestureDetectorDemoState extends State { - String _last = ""; - - @override - Widget build(BuildContext context) { - return RawGestureDetector( - gestures: { - TapGestureRecognizer: - GestureRecognizerFactoryWithHandlers( - () => TapGestureRecognizer(), - init, - ), - }, - child: Container( - width: 300.0, - height: 100.0, - alignment: Alignment.center, - color: Colors.yellow, - child: Text(_last)), - ); - } - - void init(TapGestureRecognizer instance) { - instance..onTapDown = (TapDownDetails details) { - setState(() { - _last = 'down'; - }); - } - ..onTapUp = (TapUpDetails details) { - setState(() { - _last = 'up'; - }); - } - ..onTap = () { - setState(() { - _last = 'tap'; - }); - } - ..onTapCancel = () { - setState(() { - _last = 'cancel'; - }); - } - ; - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_de_DE.json deleted file mode 100644 index b8923e6fc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "Roh-Tastatur-Listener", - "info": "Kann verwendet werden, um Tastendruck- und Tastenloslass-Ereignisse zu erkennen. Derzeit können nur physische Tastaturen erkannt werden und kann auf Desktop-Plattformen verwendet werden.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RawGestureDetector", - "desc": [ - "【onKey】 : Tastaturereignis 【ValueChanged】", - "【focusNode】 : Fokus 【FocusNode】", - "【autofocus】 : Automatischer Fokus 【bool】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_en_US.json deleted file mode 100644 index d1dc21295..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "Raw Keyboard Listener", - "info": "Can be used to detect keyboard key press and release events, currently only physical keyboards can be detected, and can be used on desktop.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RawGestureDetector", - "desc": [ - "【onKey】 : Keyboard event 【ValueChanged】", - "【focusNode】 : Focus 【FocusNode】", - "【autofocus】 : Whether to auto focus 【bool】", - "【child】 : Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_es_ES.json deleted file mode 100644 index a759ad93f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "Escuchador de teclado en bruto", - "info": "Se puede utilizar para detectar eventos de pulsación y liberación de teclas del teclado. Actualmente solo puede detectar teclados físicos y se puede utilizar en aplicaciones de escritorio.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RawGestureDetector", - "desc": [ - "【onKey】 : Evento de teclado 【ValueChanged】", - "【focusNode】 : Nodo de enfoque 【FocusNode】", - "【autofocus】 : Enfoque automático 【bool】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_fr_FR.json deleted file mode 100644 index 6b46447fb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "Écouteur de clavier brut", - "info": "Peut être utilisé pour détecter les événements de pression et de relâchement des touches du clavier. Actuellement, il ne peut détecter que les claviers physiques et peut être utilisé sur les plateformes de bureau.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RawGestureDetector", - "desc": [ - "【onKey】 : Événement de clavier 【ValueChanged】", - "【focusNode】 : Point focal 【FocusNode】", - "【autofocus】 : Mise au point automatique 【bool】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_it_IT.json deleted file mode 100644 index 114bda061..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "Ascoltatore Tastiera Originale", - "info": "Può essere utilizzato per rilevare eventi di pressione e rilascio dei tasti della tastiera, attualmente può rilevare solo tastiere fisiche, può essere utilizzato su desktop.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di RawGestureDetector", - "desc": [ - "【onKey】 : Evento Tastiera 【ValueChanged】", - "【focusNode】 : Nodo Focus 【FocusNode】", - "【autofocus】 : Autofocus 【bool】", - "【child】 : Componente Figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ja_JP.json deleted file mode 100644 index 0811d9ead..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "生キーボードリスナー", - "info": "キーボードのキー押下とキーリリースのイベントを検出するために使用できます。現在は物理キーボードのみ検出可能で、デスクトップで使用できます。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawGestureDetectorの基本使用", - "desc": [ - "【onKey】 : キーボードイベント 【ValueChanged】", - "【focusNode】 : フォーカス 【FocusNode】", - "【autofocus】 : 自動フォーカス 【bool】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ko_KR.json deleted file mode 100644 index ff8c7f9c9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "원시 키보드 리스너", - "info": "키보드 키 누름 및 해제 이벤트를 감지하는 데 사용할 수 있으며, 현재는 물리적 키보드만 감지할 수 있으며 데스크톱에서 사용할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawGestureDetector 기본 사용", - "desc": [ - "【onKey】 : 키보드 이벤트 【ValueChanged】", - "【focusNode】 : 포커스 【FocusNode】", - "【autofocus】 : 자동 포커스 여부 【bool】", - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_pt_PT.json deleted file mode 100644 index 2bdb176e0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "Ouvinte de Teclado Bruto", - "info": "Pode ser usado para detectar eventos de pressionamento e liberação de teclas do teclado, atualmente só pode detectar teclados físicos e pode ser usado em desktop.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RawGestureDetector", - "desc": [ - "【onKey】 : Evento de teclado 【ValueChanged】", - "【focusNode】 : Foco 【FocusNode】", - "【autofocus】 : Foco automático 【bool】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ru_RU.json deleted file mode 100644 index 8e4770dc8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "Слушатель клавиатуры", - "info": "Может использоваться для обнаружения событий нажатия и отпускания клавиш на клавиатуре. В настоящее время может обнаруживать только физические клавиатуры и может использоваться на настольных устройствах.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RawGestureDetector", - "desc": [ - "【onKey】 : Событие клавиатуры 【ValueChanged】", - "【focusNode】 : Фокус 【FocusNode】", - "【autofocus】 : Автоматическая фокусировка 【bool】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_zh-CN.json deleted file mode 100644 index 44a4de06d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 254, - "name": "RawKeyboardListener", - "localName": "原键盘监听器", - "info": "可以用来检测键盘按键和松键的事件,目前只能检测到物理键盘,可在桌面端使用。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawGestureDetector基本使用", - "desc": [ - "【onKey】 : 键盘事件 【ValueChanged】", - "【focusNode】 : 焦点 【FocusNode】", - "【autofocus】 : 是否自动聚焦 【bool】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/node1_base.dart deleted file mode 100644 index 45a43cdf2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawKeyboardListener/node1_base.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class RawKeyboardListenerDemo extends StatefulWidget { - const RawKeyboardListenerDemo({Key? key}) : super(key: key); - - @override - _RawKeyboardListenerDemoState createState() => _RawKeyboardListenerDemoState(); -} - -class _RawKeyboardListenerDemoState extends State { - String _info = ""; - - final FocusNode node = FocusNode(); - - @override - Widget build(BuildContext context) { - return RawKeyboardListener( - focusNode: node, - onKey: _onKey, - child: SizedBox( - width: 300, - child: Row( - children: [ - const Expanded( - child: TextField( - decoration: InputDecoration( - border: OutlineInputBorder() - ), - ), - ), - const SizedBox(width: 20,), - Text(_info) - ], - ), - ), - ); - } - - void _onKey(RawKeyEvent value) { - print(value); - if(value is RawKeyDownEvent){ - _info = "按下: ${value.logicalKey.debugName}\nid: 0x${value.logicalKey.keyId.toRadixString(16).padLeft(9,"0")}"; - } - if(value is RawKeyUpEvent){ - _info = "抬起: ${value.logicalKey.debugName}\nid: 0x${value.logicalKey.keyId.toRadixString(16).padLeft(9,"0")}"; - } - setState(() { - - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_de_DE.json deleted file mode 100644 index c3e73fef5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_de_DE.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "Rohmaterialknopf", - "info": "Der ursprüngliche Material-Knopf, der große Meister hinter den Kulissen der Knopfwelt, kann Klick-, Langdruck-, Hervorhebungsänderungsereignisse akzeptieren und Farbe, Form, Schattentiefe, Innenabstand usw. angeben.", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RawMaterialButton", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【elevation】 : Schattentiefe 【double】", - "【fillColor】 : Füllfarbe 【Color】", - "【splashColor】 : Wasserwellenfarbe 【Color】", - "【textStyle】 : Textstil 【TextStyle】", - "【onLongPress】 : Langdruckereignis 【Function()】", - "【onPressed】 : Klickereignis 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Hervorhebung und Form von RawMaterialButton", - "desc": [ - "【highlightElevation】 : Hervorhebungs-Schattentiefe 【double】", - "【shape】 : Form 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_en_US.json deleted file mode 100644 index fd8cfeae3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_en_US.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "Raw Button", - "info": "The original Material button, the behind-the-scenes boss of the button world, can accept click, long press, and highlight change events, and can specify color, shape, shadow depth, padding, and other properties.", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RawMaterialButton", - "desc": [ - "【child】: Child component 【Widget】", - "【elevation】: Shadow depth 【double】", - "【fillColor】: Fill color 【Color】", - "【splashColor】: Ripple color 【Color】", - "【textStyle】: Text style 【TextStyle】", - "【onLongPress】: Long press event 【Function()】", - "【onPressed】: Click event 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Highlight and Shape of RawMaterialButton", - "desc": [ - "【highlightElevation】: Highlight shadow depth 【double】", - "【shape】: Shape 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_es_ES.json deleted file mode 100644 index 738ddebc6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_es_ES.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "Botón Original", - "info": "El botón original de Material, el gran jefe detrás de los botones, puede aceptar eventos de clic, pulsación larga, cambios de resaltado, y puede especificar color, forma, profundidad de sombra, relleno interno y otros atributos.", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RawMaterialButton", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【elevation】 : Profundidad de sombra 【double】", - "【fillColor】 : Color de relleno 【Color】", - "【splashColor】 : Color de efecto de ondas 【Color】", - "【textStyle】 : Estilo de texto 【TextStyle】", - "【onLongPress】 : Evento de pulsación larga 【Function()】", - "【onPressed】 : Evento de clic 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Resaltado y forma de RawMaterialButton", - "desc": [ - "【highlightElevation】 : Profundidad de sombra resaltada 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_fr_FR.json deleted file mode 100644 index ec2bbbca9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_fr_FR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "Bouton Brut", - "info": "Le bouton Material original, le grand maître derrière les boutons, peut accepter des événements de clic, de pression longue et de changement de surbrillance, et peut spécifier la couleur, la forme, l'ombre, la marge intérieure et d'autres attributs.", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RawMaterialButton", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【elevation】 : Profondeur de l'ombre 【double】", - "【fillColor】 : Couleur de remplissage 【Color】", - "【splashColor】 : Couleur de l'effet de vague 【Color】", - "【textStyle】 : Style du texte 【TextStyle】", - "【onLongPress】 : Événement de pression longue 【Function()】", - "【onPressed】 : Événement de clic 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Surbrillance et forme de RawMaterialButton", - "desc": [ - "【highlightElevation】 : Profondeur de l'ombre en surbrillance 【double】", - "【shape】 : Forme 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_it_IT.json deleted file mode 100644 index 5a618dcb0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_it_IT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "Pulsante Originale", - "info": "Il pulsante Material originale, il grande capo dietro le quinte dei pulsanti, può accettare eventi di clic, pressione prolungata, cambiamenti di evidenziazione, e può specificare colore, forma, profondità dell'ombra, spaziatura interna e altre proprietà.", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di RawMaterialButton", - "desc": [ - "【child】 : Componente Figlio 【Widget】", - "【elevation】 : Profondità dell'Ombra 【double】", - "【fillColor】 : Colore di Riempimento 【Color】", - "【splashColor】 : Colore dell'Onda 【Color】", - "【textStyle】 : Stile del Testo 【TextStyle】", - "【onLongPress】 : Evento di Pressione Prolungata 【Function()】", - "【onPressed】 : Evento di Clic 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Evidenziazione e Forma di RawMaterialButton", - "desc": [ - "【highlightElevation】 : Profondità dell'Ombra in Evidenza 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ja_JP.json deleted file mode 100644 index 3dae08ab8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ja_JP.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "オリジナルボタン", - "info": "オリジナルのMaterialボタン、ボタン界の裏の大物、クリック、長押し、ハイライト変更イベントを受け入れ、色、形状、影の深さ、内側の余白などの属性を指定できます。", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawMaterialButtonの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【elevation】 : 影の深さ 【double】", - "【fillColor】 : 塗りつぶし色 【Color】", - "【splashColor】 : 波紋色 【Color】", - "【textStyle】 : テキストスタイル 【TextStyle】", - "【onLongPress】 : 長押しイベント 【Function()】", - "【onPressed】 : クリックイベント 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "RawMaterialButtonのハイライトと形状", - "desc": [ - "【highlightElevation】 : ハイライトの影の深さ 【double】", - "【shape】 : 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ko_KR.json deleted file mode 100644 index 3836fa29d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ko_KR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "원시 버튼", - "info": "원시 Material 버튼, 버튼계의 숨은 거물, 클릭, 길게 누르기, 강조 변화 이벤트를 받아들일 수 있으며, 색상, 모양, 그림자 깊이, 안쪽 여백 등의 속성을 지정할 수 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawMaterialButton 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【elevation】 : 그림자 깊이 【double】", - "【fillColor】 : 채우기 색상 【Color】", - "【splashColor】 : 물결 색상 【Color】", - "【textStyle】 : 텍스트 스타일 【TextStyle】", - "【onLongPress】 : 길게 누르기 이벤트 【Function()】", - "【onPressed】 : 클릭 이벤트 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "RawMaterialButton 강조 및 모양", - "desc": [ - "【highlightElevation】 : 강조 그림자 깊이 【double】", - "【shape】 : 모양 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_pt_PT.json deleted file mode 100644 index 1cf0df63a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_pt_PT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "Botão Original", - "info": "O botão Material original, o grande mestre nos bastidores dos botões, pode aceitar eventos de clique, pressão longa e mudanças de destaque, e pode especificar cor, forma, profundidade de sombra, preenchimento interno e outros atributos.", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RawMaterialButton", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【elevation】 : Profundidade de sombra 【double】", - "【fillColor】 : Cor de preenchimento 【Color】", - "【splashColor】 : Cor do efeito de ondulação 【Color】", - "【textStyle】 : Estilo de texto 【TextStyle】", - "【onLongPress】 : Evento de pressão longa 【Function()】", - "【onPressed】 : Evento de clique 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Destaque e Forma do RawMaterialButton", - "desc": [ - "【highlightElevation】 : Profundidade de sombra em destaque 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ru_RU.json deleted file mode 100644 index 728b9baaa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_ru_RU.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "Исходная кнопка", - "info": "Исходная кнопка Material, скрытый лидер среди кнопок, поддерживает события нажатия, долгого нажатия, изменения выделения. Можно указать цвет, форму, тень, внутренние отступы и другие атрибуты.", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RawMaterialButton", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【elevation】 : Глубина тени 【double】", - "【fillColor】 : Цвет заливки 【Color】", - "【splashColor】 : Цвол эффекта ряби 【Color】", - "【textStyle】 : Стиль текста 【TextStyle】", - "【onLongPress】 : Событие долгого нажатия 【Function()】", - "【onPressed】 : Событие нажатия 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Выделение и форма RawMaterialButton", - "desc": [ - "【highlightElevation】 : Глубина тени при выделении 【double】", - "【shape】 : Форма 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_zh-CN.json deleted file mode 100644 index 756285b84..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/desc_zh-CN.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 175, - "name": "RawMaterialButton", - "localName": "原始按钮", - "info": "原始的Material按钮,按钮界的幕后大佬,可接受点击、长按、高亮变化事件,可指定颜色、形状。影深、内边距等属性。", - "lever": 5, - "family": 1, - "linkIds": [ - 23, - 25, - 26, - 27 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawMaterialButton基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【elevation】 : 影深 【double】", - "【fillColor】 : 填充色 【Color】", - "【splashColor】 : 水波纹色 【Color】", - "【textStyle】 : 文字样式 【TextStyle】", - "【onLongPress】 : 长按事件 【Function()】", - "【onPressed】 : 点击事件 【Function()】" - ] - }, - { - "file": "node2_shape.dart", - "name": "RawMaterialButton高亮和形状", - "desc": [ - "【highlightElevation】 : 高亮影深 【double】", - "【shape】 : 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/node1_base.dart deleted file mode 100644 index 18e720465..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/node1_base.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'package:flutter/material.dart'; - - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomRawMaterialButton extends StatelessWidget { - const CustomRawMaterialButton({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [ - RawMaterialButton( - elevation: 2, - fillColor: Colors.green, - splashColor: Colors.orange, - textStyle: const TextStyle(color: Colors.white), - onLongPress: ()=>print('onLongPress'), - child: const Icon(Icons.remove), - onPressed: ()=>print('onPressed'), - ), - RawMaterialButton( - elevation: 2, - fillColor: Colors.blue, - splashColor: Colors.orange, - textStyle: const TextStyle(color: Colors.white), - onLongPress: ()=>print('onLongPress'), - child: const Text('Push'), - onPressed: ()=>print('onPressed'), - ), - RawMaterialButton( - elevation: 2, - fillColor: Colors.red, - splashColor: Colors.orange, - textStyle: const TextStyle(color: Colors.white), - onLongPress: ()=>print('onLongPress'), - child: const Icon(Icons.add), - onPressed: ()=>print('onPressed'), - ), - - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/node2_shape.dart b/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/node2_shape.dart deleted file mode 100644 index b38ded03d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RawMaterialButton/node2_shape.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class ShapeRawMaterialButton extends StatelessWidget { - const ShapeRawMaterialButton({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [ - RawMaterialButton( - elevation: 2, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - fillColor: Colors.green, - splashColor: Colors.orange, - textStyle: const TextStyle(color: Colors.white), - onLongPress: () => print('onLongPress'), - child: const Icon(Icons.remove), - onPressed: () => print('onPressed'), - ), - RawMaterialButton( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(15))), - elevation: 0, - highlightElevation: 0, - fillColor: Colors.blue, - splashColor: Colors.orange, - textStyle: const TextStyle(color: Colors.white), - onLongPress: () => print('onLongPress'), - child: const Text('Push'), - onPressed: () => print('onPressed'), - ), - RawMaterialButton( - elevation: 2, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - fillColor: Colors.red, - splashColor: Colors.orange, - textStyle: const TextStyle(color: Colors.white), - onLongPress: () => print('onLongPress'), - child: const Icon(Icons.add), - onPressed: () => print('onPressed'), - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_de_DE.json deleted file mode 100644 index c415b0c64..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "Aktualisierungsanzeige", - "info": "Enthält einen verschachtelten, scrollbaren Bereich, der beim Herunterziehen ein Aktualisierungssymbol anzeigt und beim Loslassen eine spezifizierte asynchrone Methode ausführt. Eigenschaften wie Farbe und Abstand zur Oberseite können angegeben werden.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RefreshIndicator", - "desc": [ - "【child】 : Kind (scrollbar) 【Widget】", - "【displacement】 : Höhe des schwebenden Indikators 【double】", - "【color】 : Farbe des Indikators 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_en_US.json deleted file mode 100644 index 614a45716..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "Refresh Indicator", - "info": "Internally nested scrollable area, displaying a refresh icon when pulled down, and executing a specified asynchronous method upon release. Properties such as color and distance to the top can be specified.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RefreshIndicator", - "desc": [ - "【child】 : Child (scrollable) 【Widget】", - "【displacement】 : Indicator floating height 【double】", - "【color】 : Indicator color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_es_ES.json deleted file mode 100644 index 7c6b90900..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "Indicador de actualización", - "info": "Área deslizante anidada internamente, muestra un ícono de actualización al deslizar hacia abajo y ejecuta un método asíncrono especificado al soltar. Se pueden especificar propiedades como el color y la distancia desde la parte superior.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RefreshIndicator", - "desc": [ - "【child】 : Hijo (deslizable) 【Widget】", - "【displacement】 : Altura flotante del indicador 【double】", - "【color】 : Color del indicador 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_fr_FR.json deleted file mode 100644 index 0259f3b70..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "Indicateur de rafraîchissement", - "info": "Zone coulissante interne, l'icône de rafraîchissement s'affiche lors du glissement vers le bas, et une méthode asynchrone spécifiée peut être exécutée après le relâchement. Vous pouvez spécifier des propriétés telles que la couleur, la distance par rapport au sommet, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RefreshIndicator", - "desc": [ - "【child】 : Enfant (coulissant) 【Widget】", - "【displacement】 : Hauteur de flottement de l'indicateur 【double】", - "【color】 : Couleur de l'indicateur 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_it_IT.json deleted file mode 100644 index 9107a0d5c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "Indicatore di Aggiornamento", - "info": "Area scorrevole interna nidificata, che mostra un'icona di aggiornamento quando si scorre verso il basso e può eseguire un metodo asincrono specificato dopo il rilascio. È possibile specificare attributi come il colore e la distanza dalla parte superiore.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di RefreshIndicator", - "desc": [ - "【child】 : Figlio (scorrevole) 【Widget】", - "【displacement】 : Altezza di sospensione dell'indicatore 【double】", - "【color】 : Colore dell'indicatore 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ja_JP.json deleted file mode 100644 index 1f504c15c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "リフレッシュインジケーター", - "info": "内部にスライド可能な領域をネストし、下にスライドするとリフレッシュアイコンが表示され、手を離すと指定された非同期メソッドを実行できます。色やトップまでの距離などの属性を指定できます。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RefreshIndicatorの基本使用", - "desc": [ - "【child】 : 子(スライド可能) 【Widget】", - "【displacement】 : インジケーターの浮遊高さ 【double】", - "【color】 : インジケーターの色 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ko_KR.json deleted file mode 100644 index eb369bccb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "새로고침 표시기", - "info": "내부에 스크롤 가능한 영역을 포함하고 있으며, 아래로 스크롤할 때 새로고침 아이콘이 표시되고, 손을 떼면 지정된 비동기 메서드를 실행할 수 있습니다. 색상, 상단까지의 거리 등의 속성을 지정할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RefreshIndicator 기본 사용법", - "desc": [ - "【child】 : 자식(스크롤 가능) 【Widget】", - "【displacement】 : 표시기 부유 높이 【double】", - "【color】 : 표시기 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_pt_PT.json deleted file mode 100644 index 4853223d1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "Indicador de Atualização", - "info": "Área deslizante aninhada internamente, que exibe um ícone de atualização ao deslizar para baixo e executa um método assíncrono especificado ao soltar. Pode especificar atributos como cor, distância até o topo, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RefreshIndicator", - "desc": [ - "【child】 : Filho (deslizante) 【Widget】", - "【displacement】 : Altura de suspensão do indicador 【double】", - "【color】 : Cor do indicador 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ru_RU.json deleted file mode 100644 index c6c4707ba..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "Индикатор обновления", - "info": "Внутренняя вложенная область с возможностью прокрутки, при прокрутке вниз отображается значок обновления, после отпускания можно выполнить указанный асинхронный метод. Можно указать такие свойства, как цвет, расстояние до верхнего края и т.д.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RefreshIndicator", - "desc": [ - "【child】 : Дочерний элемент (с возможностью прокрутки) 【Widget】", - "【displacement】 : Высота индикатора 【double】", - "【color】 : Цвет индикатора 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_zh-CN.json deleted file mode 100644 index f9b529a5e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 49, - "name": "RefreshIndicator", - "localName": "刷新指示器", - "info": "内部嵌套可滑动区域,下滑时会显示刷新图标,松手后可以执行指定的异步方法。可指定颜色、到顶端距离等属性。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RefreshIndicator基本使用", - "desc": [ - "【child】 : 孩子(可滑动) 【Widget】", - "【displacement】 : 指示器悬浮高度 【double】", - "【color】 : 指示器颜色 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/node1_base.dart deleted file mode 100644 index 3b0b1745d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RefreshIndicator/node1_base.dart +++ /dev/null @@ -1,44 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomRefreshIndicator extends StatefulWidget { - const CustomRefreshIndicator({Key? key}) : super(key: key); - - @override - _CustomRefreshIndicatorState createState() => _CustomRefreshIndicatorState(); -} - -class _CustomRefreshIndicatorState extends State { - int _count = 0; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - width: 200, - child: RefreshIndicator( - onRefresh: _increment, - displacement: 20, - color: Colors.orange, - backgroundColor: Colors.white, - child: SingleChildScrollView( - child: Container( - alignment: Alignment.center, - width: 200, - height: 300, - color: Colors.blue, - child: Text('$_count',style: const TextStyle(color: Colors.white,fontSize: 40)), - ), - ), - ), - ); - } - - Future _increment() async { - await Future.delayed(const Duration(seconds: 2)); - setState(() { - _count++; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_de_DE.json deleted file mode 100644 index dca63683c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "Rechteckpositionsübergang", - "info": "Eine Unterklasse von AnimatedWidget, die einen Animator vom Typ Rect verwendet, um Übergangsanimationen zwischen zwei Rect-Objekten für die Kindkomponente zu ermöglichen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RelativePositionedTransition", - "desc": [ - "【child】 : Kindkomponente 【Widget】", - "【size】 : Versatz von links und oben 【Size】", - "【rect】 : Animation 【Animation】", - " Die PositionedTransition-Komponente funktioniert nur innerhalb eines Stacks" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_en_US.json deleted file mode 100644 index abb6f78ef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "Rectangle Position Transition", - "info": "A subclass of AnimatedWidget, using a Rect type animator to allow child components to transition between two Rect objects.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RelativePositionedTransition", - "desc": [ - "【child】: Child component 【Widget】", - "【size】: Left and top offset 【Size】", - "【rect】: Animation 【Animation】", - " PositionedTransition component only works within a Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_es_ES.json deleted file mode 100644 index a9cee0881..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "Transición de posición rectangular", - "info": "Subclase de AnimatedWidget, utiliza un animador de tipo Rect para realizar una animación de transición entre dos objetos Rect en los componentes hijos.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RelativePositionedTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【size】 : Desplazamiento izquierdo y superior 【Size】", - "【rect】 : Animación 【Animation】", - " El componente PositionedTransition solo funciona dentro de un Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_fr_FR.json deleted file mode 100644 index f9cadaae5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "Transition de position rectangulaire", - "info": "Sous-classe de AnimatedWidget, utilise un animateur de type Rect pour permettre à un composant enfant de faire une transition animée entre deux objets Rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RelativePositionedTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【size】 : Décalage gauche et haut 【Size】", - "【rect】 : Animation 【Animation】", - " Le composant PositionedTransition ne fonctionne que dans une Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_it_IT.json deleted file mode 100644 index 930bfdc68..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "Transizione Posizione Rettangolo", - "info": "Sottoclasse di AnimatedWidget, utilizza un animatore di tipo Rect per far eseguire un'animazione di transizione tra due oggetti Rect ai componenti figli.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di RelativePositionedTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【size】 : Offset sinistro e superiore 【Size】", - "【rect】 : Animazione 【Animation】", - " Il componente PositionedTransition funziona solo all'interno di uno Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ja_JP.json deleted file mode 100644 index 87051af50..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "矩形位置変換", - "info": "AnimatedWidgetのサブクラスで、Rectタイプのアニメーターを使用して子コンポーネントを2つのRectオブジェクト間でトランジションアニメーションさせます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RelativePositionedTransitionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【size】 : 左と上のオフセット 【Size】", - "【rect】 : アニメーション 【Animation】", - " PositionedTransitionコンポーネントはStack内でのみ機能します" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ko_KR.json deleted file mode 100644 index 94672c446..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "사각형 위치 변환", - "info": "AnimatedWidget의 하위 클래스, Rect 타입의 애니메이터를 사용하여 자식 위젯이 두 Rect 객체 간에 전환 애니메이션을 수행하도록 합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RelativePositionedTransition 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【size】 : 왼쪽과 위쪽의 오프셋 【Size】", - "【rect】 : 애니메이션 【Animation】", - " PositionedTransition 위젯은 Stack 내에서만 작동합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_pt_PT.json deleted file mode 100644 index da3db99f3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "Transição de Posição Retangular", - "info": "Subclasse de AnimatedWidget, usa um animador do tipo Rect para permitir que os componentes filhos façam uma animação de transição entre dois objetos Rect.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de RelativePositionedTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【size】 : Deslocamento esquerdo e superior 【Size】", - "【rect】 : Animação 【Animation】", - " O componente PositionedTransition só funciona dentro de uma Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ru_RU.json deleted file mode 100644 index ead4f390a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "Прямоугольное позиционное преобразование", - "info": "Подкласс AnimatedWidget, использующий аниматор типа Rect для создания переходной анимации между двумя объектами Rect для дочернего компонента.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RelativePositionedTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【size】 : Смещение по левому и верхнему краю 【Size】", - "【rect】 : Анимация 【Animation】", - " Компонент PositionedTransition может работать только внутри Stack" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_zh-CN.json deleted file mode 100644 index b8b19f596..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 115, - "name": "RelativePositionedTransition", - "localName": "矩形位置变换", - "info": "AnimatedWidget的子类,使用Rect类型的动画器让子组件在两个Rect对象之间进行过渡动画。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RelativePositionedTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【size】 : 左和上的偏移量 【Size】", - "【rect】 : 动画 【Animation】", - " PositionedTransition组件只能在Stack内起作用" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/node1_base.dart deleted file mode 100644 index 2fc8df004..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RelativePositionedTransition/node1_base.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomRelativePositionedTransition extends StatefulWidget { - const CustomRelativePositionedTransition({Key? key}) : super(key: key); - - @override - _CustomRelativePositionedTransitionState createState() => - _CustomRelativePositionedTransitionState(); -} - -class _CustomRelativePositionedTransitionState - extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - late Animation rectAnimation; - - @override - void initState() { - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 2), - ); - rectAnimation = RectTween( - begin: const Rect.fromLTRB(0, 0, 50, 50), - end: const Rect.fromLTRB(0, 0, 50, 50).translate(100, 50), - ).animate(_ctrl); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Container( - color: Colors.grey.withAlpha(33), - width: 200, - height: 100, - child: Stack( - children: [ - RelativePositionedTransition( - size: const Size(200, 100), - rect: rectAnimation as Animation, - child: const Icon( - Icons.android, - color: Colors.green, - size: 50, - ), - ) - ], - ), - )); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_de_DE.json deleted file mode 100644 index 50fda898a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "Sortierbare Liste", - "info": "Eine ListView, die durch langes Drücken sortiert werden kann. Es können Eigenschaften wie die Scrollrichtung, ob umgekehrt, Scroll-Controller usw. angegeben werden.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ReorderableListView", - "desc": [ - "【children】 : Liste der Unterkomponenten 【List】", - "【header】 : Kopfkomponente 【Widget】", - "【padding】 : Innenabstand 【EdgeInsets】", - "【onReorder】 : Rückruf beim Austauschen 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Scrollrichtung von ReorderableListView", - "desc": [ - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【reverse】 : Ob umgekehrt 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_en_US.json deleted file mode 100644 index a1b043f95..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "Reorderable List", - "info": "A ListView that can be reordered by long-pressing, with properties such as scroll direction, reverse, and scroll controller.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ReorderableListView", - "desc": [ - "【children】 : List of child components 【List】", - "【header】 : Header component 【Widget】", - "【padding】 : Padding 【EdgeInsets】", - "【onReorder】 : Callback when reordering 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Scroll Direction of ReorderableListView", - "desc": [ - "【scrollDirection】 : Scroll direction 【Axis】", - "【reverse】 : Whether to reverse 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_es_ES.json deleted file mode 100644 index 6a3fb8142..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "Lista reordenable", - "info": "ListView que permite reordenar mediante pulsación larga, se pueden especificar propiedades como la dirección de deslizamiento, si es inversa, el controlador de deslizamiento, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ReorderableListView", - "desc": [ - "【children】 : Lista de componentes hijos 【List】", - "【header】 : Componente de cabecera 【Widget】", - "【padding】 : Relleno interno 【EdgeInsets】", - "【onReorder】 : Callback al reordenar 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Dirección de deslizamiento de ReorderableListView", - "desc": [ - "【scrollDirection】 : Dirección de deslizamiento 【Axis】", - "【reverse】 : Si es inverso 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_fr_FR.json deleted file mode 100644 index 0f1b257b0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "Liste réorganisable", - "info": "ListView qui permet de réorganiser les éléments par un appui long. Peut spécifier la direction de défilement, l'inversion, le contrôleur de défilement, etc.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ReorderableListView", - "desc": [ - "【children】 : Liste des composants enfants 【List】", - "【header】 : Composant d'en-tête 【Widget】", - "【padding】 : Marge intérieure 【EdgeInsets】", - "【onReorder】 : Rappel lors de la réorganisation 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direction de défilement de ReorderableListView", - "desc": [ - "【scrollDirection】 : Direction de défilement 【Axis】", - "【reverse】 : Inversion 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_it_IT.json deleted file mode 100644 index 49a293d63..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "Lista riordinabile", - "info": "Una ListView che può essere riordinata con un lungo tocco, con la possibilità di specificare la direzione di scorrimento, se invertire, il controller di scorrimento e altre proprietà.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ReorderableListView", - "desc": [ - "【children】 : Lista dei componenti figli 【List】", - "【header】 : Componente di intestazione 【Widget】", - "【padding】 : Spaziatura interna 【EdgeInsets】", - "【onReorder】 : Callback per lo scambio 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direzione di scorrimento di ReorderableListView", - "desc": [ - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【reverse】 : Se invertire 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ja_JP.json deleted file mode 100644 index bc86df7ef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "並べ替え可能なリスト", - "info": "長押しで並べ替え可能なListViewで、スワイプ方向、逆方向かどうか、スワイプコントローラーなどの属性を指定できます。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ReorderableListViewの基本使用", - "desc": [ - "【children】 : 子コンポーネントリスト 【List】", - "【header】 : ヘッダーコンポーネント 【Widget】", - "【padding】 : 内側の余白 【EdgeInsets】", - "【onReorder】 : 並べ替え時のコールバック 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "ReorderableListViewのスワイプ方向", - "desc": [ - "【scrollDirection】 : スワイプ方向 【Axis】", - "【reverse】 : 逆方向かどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ko_KR.json deleted file mode 100644 index 526d329be..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "재정렬 가능한 리스트", - "info": "길게 눌러 정렬할 수 있는 ListView, 스크롤 방향, 반대 방향 여부, 스크롤 컨트롤러 등의 속성을 지정할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ReorderableListView 기본 사용법", - "desc": [ - "【children】 : 자식 위젯 리스트 【List】", - "【header】 : 헤더 위젯 【Widget】", - "【padding】 : 내부 여백 【EdgeInsets】", - "【onReorder】 : 재정렬 시 콜백 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "ReorderableListView 스크롤 방향", - "desc": [ - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【reverse】 : 반대 방향 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_pt_PT.json deleted file mode 100644 index 098c74865..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "Lista Reordenável", - "info": "Uma ListView que permite reordenar com um toque longo, podendo especificar a direção de deslize, se é reverso, controlador de deslize, entre outros atributos.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ReorderableListView", - "desc": [ - "【children】 : Lista de componentes filhos 【List】", - "【header】 : Componente de cabeçalho 【Widget】", - "【padding】 : Preenchimento interno 【EdgeInsets】", - "【onReorder】 : Callback ao reordenar 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direção de Deslize do ReorderableListView", - "desc": [ - "【scrollDirection】 : Direção de deslize 【Axis】", - "【reverse】 : Se é reverso 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ru_RU.json deleted file mode 100644 index 09d81f1cf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "Переупорядочиваемый список", - "info": "ListView, который можно упорядочивать с помощью длительного нажатия, можно указать направление прокрутки, обратное направление, контроллер прокрутки и другие свойства.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ReorderableListView", - "desc": [ - "【children】 : Список дочерних компонентов 【List】", - "【header】 : Верхний компонент 【Widget】", - "【padding】 : Внутренний отступ 【EdgeInsets】", - "【onReorder】 : Обратный вызов при переупорядочивании 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Направление прокрутки ReorderableListView", - "desc": [ - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【reverse】 : Обратное направление 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_zh-CN.json deleted file mode 100644 index b67b345a5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 177, - "name": "ReorderableListView", - "localName": "可重排序列表", - "info": "可以进行长按排序的ListView,可指定滑动方向、是否反向、滑动控制器等属性。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ReorderableListView基本使用", - "desc": [ - "【children】 : 子组件列表 【List】", - "【header】 : 头部组件 【Widget】", - "【padding】 : 内边距 【EdgeInsets】", - "【onReorder】 : 调换时回调 【ReorderCallback】" - ] - }, - { - "file": "node2_direction.dart", - "name": "ReorderableListView滑动方向", - "desc": [ - "【scrollDirection】 : 滑动方向 【Axis】", - "【reverse】 : 是否反向 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/node1_base.dart deleted file mode 100644 index 153fe66ea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/node1_base.dart +++ /dev/null @@ -1,74 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class CustomReorderableListView extends StatefulWidget { - const CustomReorderableListView({Key? key}) : super(key: key); - - @override - _CustomReorderableListViewState createState() => _CustomReorderableListViewState(); -} - -class _CustomReorderableListViewState extends State { - -final List data = [ - Colors.yellow[50]!, - Colors.yellow[100]!, - Colors.yellow[200]!, - Colors.yellow[300]!, - Colors.yellow[400]!, - Colors.yellow[500]!, - Colors.yellow[600]!, - Colors.yellow[700]!, - Colors.yellow[800]!, - Colors.yellow[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 250, - child: ReorderableListView( - padding: const EdgeInsets.all(10), - header: Container( - color: Colors.blue, - alignment: Alignment.center, - height: 50, - child: const Text('长按拖拽进行换位',style: TextStyle(color: Colors.white),)), - onReorder: _handleReorder, - children: data.map((color) => _buildItem(color)).toList(), - ), - ); - } - - void _handleReorder(int oldIndex, int newIndex) { - if (oldIndex < newIndex) { - newIndex -= 1; - } - - setState(() { - final element = data.removeAt(oldIndex); - data.insert(newIndex, element); - }); - - } - - Widget _buildItem(Color color) { - return Container( - key: ValueKey(color) , - alignment: Alignment.center, - height: 50, - color: color, - child: Text( - colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ]), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/node2_direction.dart b/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/node2_direction.dart deleted file mode 100644 index 906ba9bbd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ReorderableListView/node2_direction.dart +++ /dev/null @@ -1,74 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-30 -/// contact me by email 1981462002@qq.com - -class DirectionReorderableListView extends StatefulWidget { - const DirectionReorderableListView({Key? key}) : super(key: key); - - @override - _DirectionReorderableListViewState createState() => - _DirectionReorderableListViewState(); -} - -class _DirectionReorderableListViewState extends State { - final List data = [ - Colors.yellow[50]!, - Colors.yellow[100]!, - Colors.yellow[200]!, - Colors.yellow[300]!, - Colors.yellow[400]!, - Colors.yellow[500]!, - Colors.yellow[600]!, - Colors.yellow[700]!, - Colors.yellow[800]!, - Colors.yellow[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ReorderableListView( - scrollDirection: Axis.horizontal, - reverse: false, - onReorder: _handleReorder, - children: data.map((color) => _buildItem(color)).toList(), - ), - ); - } - - void _handleReorder(int oldIndex, int newIndex) { - if (oldIndex < newIndex) { - newIndex -= 1; - } - - setState(() { - final element = data.removeAt(oldIndex); - data.insert(newIndex, element); - }); - - } - - Widget _buildItem(Color color) { - return Container( - key: ValueKey(color) , - alignment: Alignment.center, - width: 80, - color: color, - child: Text( - colorString(color), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ]), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_de_DE.json deleted file mode 100644 index 5d4f0f0c0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "Drehübergang", - "info": "Kann ein Kind-Widget aufnehmen und es mit einer Drehanimation versehen, erfordert einen Animator turns und verfügt über die Eigenschaft alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von RotationTransition", - "desc": [ - "【child】 : Kind-Widget 【Widget】", - "【turns】 : Ob verschwinden 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_en_US.json deleted file mode 100644 index 42eaf2aa6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "Rotation Transition", - "info": "Can accommodate a child component and make it perform a rotation animation. Requires an animator turns and has an alignment property.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of RotationTransition", - "desc": [ - "【child】 : Child component 【Widget】", - "【turns】 : Whether to disappear 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_es_ES.json deleted file mode 100644 index 2e2b439c9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "Transición de Rotación", - "info": "Puede contener un componente hijo y hacer que realice una animación de rotación. Requiere un animador turns y tiene la propiedad alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RotationTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【turns】 : ¿Desaparece? 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_fr_FR.json deleted file mode 100644 index 83817b99e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "Transition de rotation", - "info": "Peut contenir un composant enfant et lui faire effectuer une animation de rotation, nécessite un animateur turns, possède une propriété alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de RotationTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【turns】 : Disparaît ou non 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_it_IT.json deleted file mode 100644 index 4eb81129c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "Transizione di rotazione", - "info": "Può contenere un componente figlio e farlo ruotare con un'animazione, richiede un animatore turns, possiede l'attributo alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di RotationTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【turns】 : Scompare 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ja_JP.json deleted file mode 100644 index 6c2f878f0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "回転変換", - "info": "子コンポーネントを収容し、回転アニメーションを行わせることができます。アニメーターturnsを提供する必要があり、alignment属性を持っています。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RotationTransitionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【turns】 : 消えるかどうか 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ko_KR.json deleted file mode 100644 index fcacc7f8d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "회전 변환", - "info": "하나의 자식 위젯을 포함하고 회전 애니메이션을 적용할 수 있습니다. 애니메이터 turns를 제공해야 하며, alignment 속성을 가지고 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RotationTransition 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【turns】 : 사라짐 여부 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_pt_PT.json deleted file mode 100644 index a19b0f636..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "Transição de Rotação", - "info": "Pode conter um componente filho e fazê-lo realizar uma animação de rotação, requer um animador turns e possui a propriedade alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do RotationTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【turns】 : Desaparece ou não 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ru_RU.json deleted file mode 100644 index 7fcc81619..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "Вращательный переход", - "info": "Может содержать один дочерний компонент и анимировать его вращение. Требуется предоставить аниматор turns, имеет свойство alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование RotationTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【turns】 : Исчезнет ли 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_zh-CN.json deleted file mode 100644 index 77a2fb32b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 90, - "name": "RotationTransition", - "localName": "旋转变换", - "info": "可容纳一个子组件,并使其进行旋转动画,需要提供动画器turns,拥有alignment属性。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RotationTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【turns】 : 是否消失 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/node1_base.dart deleted file mode 100644 index 761491f04..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/RotationTransition/node1_base.dart +++ /dev/null @@ -1,55 +0,0 @@ - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomRotationTransition extends StatefulWidget { - const CustomRotationTransition({Key? key}) : super(key: key); - - @override - _CustomRotationTransitionState createState() => _CustomRotationTransitionState(); -} - -class _CustomRotationTransitionState extends State with SingleTickerProviderStateMixin{ - - late AnimationController _ctrl; - - @override - void initState() { - super.initState(); - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 2), - ); - _ctrl.forward(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Container( - color: Colors.grey.withAlpha(22), - width: 100, - height: 100, - child: RotationTransition( - turns: CurvedAnimation( - parent: _ctrl, - curve: Curves.linear, - ), - child: const Icon( - Icons.camera_outlined, - color: Colors.green, - size: 60, - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_de_DE.json deleted file mode 100644 index 96eec136f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "Gerüst", - "info": "Eine allgemeine App-Struktur, die obere, untere, linke, rechte, mittlere und schwebende Button-Bereiche umfasst, in denen Komponenten platziert werden können.", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Scaffold", - "desc": [ - "【appBar】 : Kopfkomponente 【PreferredSizeWidget】", - "【bottomNavigationBar】 : Fußkomponente 【Widget】", - "【drawer】 : Linke Schiebekomponente 【Widget】", - "【endDrawer】 : Rechte Schiebekomponente 【Widget】", - "【body】 : Inhaltkomponente 【Widget】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【floatingActionButton】 : Schwebender Button 【Widget】", - "【floatingActionButtonLocation】 : Position des schwebenden Buttons 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_en_US.json deleted file mode 100644 index 2964c3817..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "Scaffold", - "info": "A general app structure, including top, bottom, left, right, middle, and floating button parts, where components can be placed in corresponding positions.", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Scaffold", - "desc": [ - "【appBar】: Header component 【PreferredSizeWidget】", - "【bottomNavigationBar】: Bottom component 【Widget】", - "【drawer】: Left sliding component 【Widget】", - "【endDrawer】: Right sliding component 【Widget】", - "【body】: Content component 【Widget】", - "【backgroundColor】: Background color 【Color】", - "【floatingActionButton】: Floating button 【Widget】", - "【floatingActionButtonLocation】: Floating button position 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_es_ES.json deleted file mode 100644 index 3fbddd852..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "Andamio", - "info": "Una estructura de aplicación genérica que incluye partes superior, inferior, izquierda, derecha, central y botón flotante, donde se pueden colocar componentes en las posiciones correspondientes.", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Scaffold", - "desc": [ - "【appBar】 : Componente de la cabecera 【PreferredSizeWidget】", - "【bottomNavigationBar】 : Componente inferior 【Widget】", - "【drawer】 : Componente deslizante izquierdo 【Widget】", - "【endDrawer】 : Componente deslizante derecho 【Widget】", - "【body】 : Componente de contenido 【Widget】", - "【backgroundColor】 : Color de fondo 【Color】", - "【floatingActionButton】 : Botón flotante 【Widget】", - "【floatingActionButtonLocation】 : Ubicación del botón flotante 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_fr_FR.json deleted file mode 100644 index 156168ecf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "Échafaudage", - "info": "Une structure d'application générique comprenant des parties supérieure, inférieure, gauche, droite, centrale et un bouton flottant, où des composants peuvent être placés aux positions correspondantes.", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Scaffold", - "desc": [ - "【appBar】 : Composant de tête 【PreferredSizeWidget】", - "【bottomNavigationBar】 : Composant de bas 【Widget】", - "【drawer】 : Composant de glissement gauche 【Widget】", - "【endDrawer】 : Composant de glissement droit 【Widget】", - "【body】 : Composant de contenu 【Widget】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【floatingActionButton】 : Bouton flottant 【Widget】", - "【floatingActionButtonLocation】 : Position du bouton flottant 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_it_IT.json deleted file mode 100644 index 3d6852f77..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "Impalcatura", - "info": "Una struttura generica per app, che include parti superiore, inferiore, sinistra, destra, centrale e un pulsante fluttuante, dove è possibile posizionare componenti nelle posizioni corrispondenti.", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di Scaffold", - "desc": [ - "【appBar】 : Componente superiore 【PreferredSizeWidget】", - "【bottomNavigationBar】 : Componente inferiore 【Widget】", - "【drawer】 : Componente scorrevole a sinistra 【Widget】", - "【endDrawer】 : Componente scorrevole a destra 【Widget】", - "【body】 : Componente principale 【Widget】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【floatingActionButton】 : Pulsante fluttuante 【Widget】", - "【floatingActionButtonLocation】 : Posizione del pulsante fluttuante 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ja_JP.json deleted file mode 100644 index 966ee658b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "足場", - "info": "一般的なアプリの構造で、上部、下部、左側、右側、中央、フローティングボタンの部分を含み、対応する位置にコンポーネントを配置できます。", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scaffoldの基本的な使い方", - "desc": [ - "【appBar】 : ヘッダーコンポーネント 【PreferredSizeWidget】", - "【bottomNavigationBar】 : フッターコンポーネント 【Widget】", - "【drawer】 : 左スライドコンポーネント 【Widget】", - "【endDrawer】 : 右スライドコンポーネント 【Widget】", - "【body】 : コンテンツコンポーネント 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【floatingActionButton】 : フローティングボタン 【Widget】", - "【floatingActionButtonLocation】 : フローティングボタンの位置 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ko_KR.json deleted file mode 100644 index a5ac3c4c6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "스캐폴드", - "info": "일반적인 앱 구조로, 상단, 하단, 좌측, 우측, 중앙, 플로팅 버튼 부분을 포함하며, 해당 위치에 컴포넌트를 배치할 수 있습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scaffold 기본 사용법", - "desc": [ - "【appBar】 : 헤더 컴포넌트 【PreferredSizeWidget】", - "【bottomNavigationBar】 : 하단 컴포넌트 【Widget】", - "【drawer】 : 좌측 슬라이드 컴포넌트 【Widget】", - "【endDrawer】 : 우측 슬라이드 컴포넌트 【Widget】", - "【body】 : 내용 컴포넌트 【Widget】", - "【backgroundColor】 : 배경색 【Color】", - "【floatingActionButton】 : 플로팅 버튼 【Widget】", - "【floatingActionButtonLocation】 : 플로팅 버튼 위치 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_pt_PT.json deleted file mode 100644 index 9dd00eea9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "Andaime", - "info": "Uma estrutura de aplicativo genérica, incluindo partes superior, inferior, esquerda, direita, central e botão flutuante, onde os componentes podem ser colocados nas posições correspondentes.", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Scaffold", - "desc": [ - "【appBar】 : Componente do cabeçalho 【PreferredSizeWidget】", - "【bottomNavigationBar】 : Componente inferior 【Widget】", - "【drawer】 : Componente deslizante esquerdo 【Widget】", - "【endDrawer】 : Componente deslizante direito 【Widget】", - "【body】 : Componente de conteúdo 【Widget】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【floatingActionButton】 : Botão flutuante 【Widget】", - "【floatingActionButtonLocation】 : Localização do botão flutuante 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ru_RU.json deleted file mode 100644 index 8d59eb995..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "Леса", - "info": "Универсальная структура приложения, включающая верхнюю, нижнюю, левую, правую, центральную части и плавающую кнопку, в соответствующих местах могут размещаться компоненты.", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Scaffold", - "desc": [ - "【appBar】 : Верхний компонент 【PreferredSizeWidget】", - "【bottomNavigationBar】 : Нижний компонент 【Widget】", - "【drawer】 : Левый выдвижной компонент 【Widget】", - "【endDrawer】 : Правый выдвижной компонент 【Widget】", - "【body】 : Основной компонент 【Widget】", - "【backgroundColor】 : Цвет фона 【Color】", - "【floatingActionButton】 : Плавающая кнопка 【Widget】", - "【floatingActionButtonLocation】 : Расположение плавающей кнопки 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_zh-CN.json deleted file mode 100644 index 72cb719e4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 64, - "name": "Scaffold", - "localName": "脚手架", - "info": "一个通用app结构,包括上、下、左、右、中、浮动按钮部位,对应位置可盛放组件。", - "lever": 4, - "family": 1, - "linkIds": [ - 57, - 60, - 61 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scaffold基本用法", - "desc": [ - "【appBar】 : 头部组件 【PreferredSizeWidget】", - "【bottomNavigationBar】 : 底部组件 【Widget】", - "【drawer】 : 左侧滑组件 【Widget】", - "【endDrawer】 : 右侧滑组件 【Widget】", - "【body】 : 内容组件 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【floatingActionButton】 : 浮动按钮 【Widget】", - "【floatingActionButtonLocation】 : 浮动按钮位置 【FloatingActionButtonLocation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/node1_base.dart deleted file mode 100644 index 5c18db228..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scaffold/node1_base.dart +++ /dev/null @@ -1,113 +0,0 @@ -import 'package:flutter/material.dart'; -import '../PopupMenuButton/node1_base.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomScaffold extends StatefulWidget { - const CustomScaffold({Key? key}) : super(key: key); - - @override - State createState() => _CustomScaffoldState(); -} - -// AppBar 默认的实例,有状态 -class _CustomScaffoldState extends State with SingleTickerProviderStateMixin { - final List tabs = const ['风画庭', '雨韵舍', '雷鸣殿', '电疾堂', '霜寒阁', '雪月楼']; - int _position = 0; - final Map iconsMap = { - "图鉴": Icons.home, - "动态": Icons.toys, - "喜欢": Icons.favorite, - "手册": Icons.class_, - "我的": Icons.account_circle, - }; - final List _colors = [ - Colors.blue, - Colors.red, - Colors.yellow, - Colors.green, - Colors.purple, - ]; - - late TabController _tabController; - - @override - void initState() { - super.initState(); - _tabController = TabController(vsync: this, length: tabs.length); - } - - @override - void dispose() { - _tabController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.height - 300, - child: Scaffold( - floatingActionButtonLocation: FloatingActionButtonLocation.endFloat, - floatingActionButton: FloatingActionButton( - child: const Icon(Icons.add), - onPressed: () {}, - ), - drawer: _buildLeftDrawer(), - endDrawer: _buildLeftDrawer(), - appBar: AppBar( - title: const Text('风雅六社'), - backgroundColor: Colors.blue, - centerTitle: true, - actions: const [Icon(Icons.star), CustomPopupMenuButton()], - bottom: _buildTabBar(), - ), - body: _buildTableBarView(), - bottomNavigationBar: _buildBottomNavigationBar(), - ), - ); - } - - Drawer _buildLeftDrawer() => Drawer( - elevation: 1, - child: Image.asset( - 'assets/images/sabar.webp', - fit: BoxFit.cover, - ), - ); - - PreferredSizeWidget _buildTabBar() => TabBar( - isScrollable: true, - controller: _tabController, - indicatorColor: Colors.orangeAccent, - tabs: tabs.map((e) => Tab(text: e)).toList(), - ); - - Widget _buildBottomNavigationBar() => BottomNavigationBar( - onTap: (position) => setState(() => _position = position), - currentIndex: _position, - elevation: 1, - backgroundColor: Colors.white, - iconSize: 25, - selectedLabelStyle: const TextStyle(fontWeight: FontWeight.bold), - showUnselectedLabels: false, - showSelectedLabels: true, - items: iconsMap.keys - .map((key) => BottomNavigationBarItem( - label: key, - icon: Icon(iconsMap[key]), - backgroundColor: _colors[_position])) - .toList(), - ); - - Widget _buildTableBarView() => TabBarView( - controller: _tabController, - children: tabs - .map((e) => Center( - child: Text( - e, - style: const TextStyle(color: Colors.blue, fontSize: 20), - ))) - .toList()); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_de_DE.json deleted file mode 100644 index 6153ce835..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "Skalierungstransformation", - "info": "Kann ein Kindelement aufnehmen und es mit einer Skalierungsanimation versehen. Erfordert einen Animator 'scale' und besitzt das Attribut 'alignment'.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ScaleTransition", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【scale】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_en_US.json deleted file mode 100644 index 1486f2425..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "Scale Transition", - "info": "Can contain a child component and make it perform a scaling animation. Requires providing an animator scale and has the alignment property.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ScaleTransition", - "desc": [ - "【child】: Child component 【Widget】", - "【scale】: Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_es_ES.json deleted file mode 100644 index 6bb870aea..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "Transición de Escala", - "info": "Puede contener un componente hijo y realizar una animación de escala, requiere un animador scale, tiene la propiedad alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ScaleTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【scale】 : Animación 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_fr_FR.json deleted file mode 100644 index 9a59a7918..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "Transition de mise à l'échelle", - "info": "Peut contenir un composant enfant et lui appliquer une animation de mise à l'échelle. Nécessite un animateur scale et possède l'attribut alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ScaleTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【scale】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_it_IT.json deleted file mode 100644 index 2614f2878..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "Transizione di Scala", - "info": "Può contenere un componente figlio e farlo animare con una transizione di scala, richiede un animatore scale, ha la proprietà alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di ScaleTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【scale】 : Animazione 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ja_JP.json deleted file mode 100644 index 1d61966a1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "スケールトランジション", - "info": "子コンポーネントを収容し、スケールアニメーションを行わせることができます。アニメーターscaleを提供する必要があり、alignment属性を持っています。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScaleTransitionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【scale】 : アニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ko_KR.json deleted file mode 100644 index a902e389b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "스케일 변환", - "info": "하나의 자식 위젯을 포함하고, 스케일 애니메이션을 수행할 수 있습니다. 애니메이션 스케일을 제공해야 하며, alignment 속성을 가지고 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScaleTransition 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【scale】 : 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_pt_PT.json deleted file mode 100644 index 67ce554da..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "Transição de Escala", - "info": "Pode conter um componente filho e fazer com que ele realize uma animação de escala, requer um animador scale, possui o atributo alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do ScaleTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【scale】 : Animação 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ru_RU.json deleted file mode 100644 index a3d008386..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "Масштабирование", - "info": "Может содержать один дочерний компонент и выполнять анимацию масштабирования. Требуется предоставить аниматор scale, имеет свойство alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ScaleTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【scale】 : Анимация 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_zh-CN.json deleted file mode 100644 index de5eae99c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 91, - "name": "ScaleTransition", - "localName": "缩放变换", - "info": "可容纳一个子组件,并使其进行缩放动画,需要提供动画器scale,拥有alignment属性。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScaleTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【scale】 : 动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/node1_base.dart deleted file mode 100644 index 524dbdb7e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ScaleTransition/node1_base.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomScaleTransition extends StatefulWidget { - const CustomScaleTransition({Key? key}) : super(key: key); - - @override - _CustomScaleTransitionState createState() => _CustomScaleTransitionState(); -} - -class _CustomScaleTransitionState extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - _ctrl = AnimationController(vsync: this, duration: const Duration(seconds: 2)); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Container( - color: Colors.grey.withAlpha(22), - width: 100, - height: 100, - child: ScaleTransition( - scale: CurvedAnimation(parent: _ctrl, curve: Curves.linear), - child: const Icon(Icons.android, color: Colors.green, size: 60), - ), - )); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_de_DE.json deleted file mode 100644 index ec33e7447..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "Scrollbare Komponente", - "info": "Implementiert ein Interaktionsmodell für eine scrollbare Komponente, das die Konstruktion des Viewports durch den viewportBuilder erfordert. Es ist eine der Kernkomponenten der ScrollView-Implementierung und wird in der Regel nicht direkt verwendet.", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Scrollable", - "desc": [ - "【viewportBuilder】: Viewport-Konstruktor 【ViewportBuilder】", - "【axisDirection】: Scrollrichtung 【AxisDirection】", - "【controller】: Scroll-Controller 【ScrollController】", - "【dragStartBehavior】: Drag-Verhalten 【DragStartBehavior】", - "【physics】: Scroll-Physik 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_en_US.json deleted file mode 100644 index eb851f1c9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "Scrollable Component", - "info": "Implements an interactive model for a scrollable component, requiring the construction of a viewport via viewportBuilder. It is one of the core implementation components of ScrollView and is generally not used directly.", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Scrollable", - "desc": [ - "【viewportBuilder】: Viewport Constructor 【ViewportBuilder】", - "【axisDirection】: Scroll Direction 【AxisDirection】", - "【controller】: Scroll Controller 【ScrollController】", - "【dragStartBehavior】: Drag Behavior 【DragStartBehavior】", - "【physics】: Scroll Physics 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_es_ES.json deleted file mode 100644 index 04ba09ed5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "Componente Deslizable", - "info": "Implementa un modelo de interacción para un componente desplazable, requiere la construcción del viewport a través del viewportBuilder. Es uno de los componentes centrales de ScrollView, generalmente no se usa directamente.", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Scrollable", - "desc": [ - "【viewportBuilder】: Constructor del viewport 【ViewportBuilder】", - "【axisDirection】: Dirección de desplazamiento 【AxisDirection】", - "【controller】: Controlador de desplazamiento 【ScrollController】", - "【dragStartBehavior】: Comportamiento de arrastre 【DragStartBehavior】", - "【physics】: Fenómeno de desplazamiento 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_fr_FR.json deleted file mode 100644 index 5ead61272..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "Composant défilable", - "info": "Implémente un modèle d'interaction pour un composant défilable, nécessitant la construction d'une fenêtre d'affichage via viewportBuilder. C'est l'un des composants de base de ScrollView, généralement pas utilisé directement.", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Scrollable", - "desc": [ - "【viewportBuilder】 : Constructeur de fenêtre d'affichage 【ViewportBuilder】", - "【axisDirection】: Direction de défilement 【AxisDirection】", - "【controller】: Contrôleur de défilement 【ScrollController】", - "【dragStartBehavior】: Comportement de glissement 【DragStartBehavior】", - "【physics】: Physique de défilement 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_it_IT.json deleted file mode 100644 index d2c6a6e2f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "Componente Scorrevole", - "info": "Implementa un modello di interazione per un componente scorrevole, richiede la costruzione di un viewport tramite viewportBuilder. È uno dei componenti principali di ScrollView e generalmente non viene utilizzato direttamente.", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Scrollable", - "desc": [ - "【viewportBuilder】 : Costruttore del viewport 【ViewportBuilder】", - "【axisDirection】: Direzione di scorrimento 【AxisDirection】", - "【controller】: Controller di scorrimento 【ScrollController】", - "【dragStartBehavior】: Comportamento di trascinamento 【DragStartBehavior】", - "【physics】: Fisica dello scorrimento 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ja_JP.json deleted file mode 100644 index f653f3c3d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "スクロール可能コンポーネント", - "info": "スクロール可能なコンポーネントのインタラクションモデルを実装し、viewportBuilderを使用してビューポートを構築する必要があります。ScrollViewのコア実装コンポーネントの一つで、通常直接使用されません。", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scrollableの基本的な使用法", - "desc": [ - "【viewportBuilder】 : ビューポートビルダー 【ViewportBuilder】", - "【axisDirection】: スクロール方向 【AxisDirection】", - "【controller】: スクロールコントローラー 【ScrollController】", - "【dragStartBehavior】: ドラッグ開始動作 【DragStartBehavior】", - "【physics】: スクロール物理現象 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ko_KR.json deleted file mode 100644 index cd7375312..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "스크롤 가능한 컴포넌트", - "info": "스크롤 가능한 컴포넌트의 상호작용 모델을 구현하며, viewportBuilder를 통해 viewport를 구성해야 합니다. ScrollView의 핵심 구현 컴포넌트 중 하나로, 일반적으로 직접 사용되지 않습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scrollable 기본 사용법", - "desc": [ - "【viewportBuilder】 : 뷰포트 빌더 【ViewportBuilder】", - "【axisDirection】: 스크롤 방향 【AxisDirection】", - "【controller】: 스크롤 컨트롤러 【ScrollController】", - "【dragStartBehavior】: 드래그 시작 동작 【DragStartBehavior】", - "【physics】: 스크롤 물리 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_pt_PT.json deleted file mode 100644 index dfded8887..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "Componente Deslizável", - "info": "Implementa um modelo de interação para um componente deslizável, necessitando da construção de um viewport através do viewportBuilder. É um dos componentes principais da implementação do ScrollView, geralmente não utilizado diretamente.", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Scrollable", - "desc": [ - "【viewportBuilder】 : Construtor do viewport 【ViewportBuilder】", - "【axisDirection】: Direção do deslize 【AxisDirection】", - "【controller】: Controlador de deslize 【ScrollController】", - "【dragStartBehavior】: Comportamento de arrasto 【DragStartBehavior】", - "【physics】: Fenómeno de rolagem 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ru_RU.json deleted file mode 100644 index 7bc209fe1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "Прокручиваемый компонент", - "info": "Реализует модель взаимодействия прокручиваемого компонента, требуется viewportBuilder для построения viewport. Это один из основных компонентов реализации ScrollView, обычно не используется напрямую.", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Scrollable", - "desc": [ - "【viewportBuilder】 : Конструктор viewport 【ViewportBuilder】", - "【axisDirection】: Направление прокрутки 【AxisDirection】", - "【controller】: Контроллер прокрутки 【ScrollController】", - "【dragStartBehavior】: Поведение при перетаскивании 【DragStartBehavior】", - "【physics】: Физика прокрутки 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_zh-CN.json deleted file mode 100644 index f726ea80e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 253, - "name": "Scrollable", - "localName": "可滑动组件", - "info": "实现了一个可滚动组件的交互模型,需要viewportBuilder进的viewport的构造。是ScrollView的核心实现组件之一,一般不直接使用。", - "lever": 4, - "family": 1, - "linkIds": [ - 340, - 349 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scrollable的基本使用", - "desc": [ - "【viewportBuilder】 : 视口构造器 【ViewportBuilder】", - "【axisDirection】: 滑动方向 【AxisDirection】", - "【controller】: 滑动控制器 【ScrollController】", - "【dragStartBehavior】: t拖动行为 【DragStartBehavior】", - "【physics】: 滚动现象 【ScrollPhysics】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/node1_base.dart deleted file mode 100644 index f32df2c33..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollable/node1_base.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/gestures.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; - -/// create by 张风捷特烈 on 2020/8/2 -/// contact me by email 1981462002@qq.com - - -class ScrollableDemo extends StatelessWidget { - const ScrollableDemo({super.key}); - - List get data => List.generate(32, (i) => Color(0xFF6600FF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 250, - child: Scrollable( - axisDirection: AxisDirection.down, - physics: const BouncingScrollPhysics(), - dragStartBehavior: DragStartBehavior.start, - viewportBuilder: (ctx, position) => Viewport( - cacheExtent: 200, - cacheExtentStyle: CacheExtentStyle.pixel, - offset: position, - slivers: [_buildSliverList()], - ), - ), - ); - } - - Widget _buildSliverList() => SliverList( - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - margin: const EdgeInsets.only(top: 1), - alignment: Alignment.center, - width: 100, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle( - color: Colors.white, - shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ], - ), - ), - ), - childCount: data.length), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_de_DE.json deleted file mode 100644 index d452345bb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "Scrollleiste", - "info": "Muss einen scrollbaren Bereich umschließen. Wenn scrollbar, wird eine Scrollleiste zur Anzeige angezeigt.", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Scrollbar", - "desc": [ - "【child】: Untergeordnete Komponente 【Widget】", - "【controller】: Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_en_US.json deleted file mode 100644 index 875f30bf9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "Scrollbar", - "info": "It needs to wrap a scrollable area. When it is scrollable, a scroll bar will be displayed for indication.", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Scrollbar", - "desc": [ - "【child】: Child widget 【Widget】", - "【controller】: Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_es_ES.json deleted file mode 100644 index cbaf503aa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "Barra de desplazamiento", - "info": "Debe envolver un área desplazable. Cuando es desplazable, se mostrará una barra de desplazamiento para indicar.", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Scrollbar", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_fr_FR.json deleted file mode 100644 index c94a78d5b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "Barre de défilement", - "info": "Doit envelopper une zone défilable. Lorsqu'elle est défilable, une barre de défilement est affichée pour l'indication.", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Scrollbar", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【controller】 : Contrôleur 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_it_IT.json deleted file mode 100644 index d06c80c1d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "Barra di scorrimento", - "info": "Deve avvolgere un'area scorrevole. Quando è scorrevole, verrà visualizzata una barra di scorrimento per indicare.", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Scrollbar", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【controller】 : Controllore 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ja_JP.json deleted file mode 100644 index c2831c338..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "スクロールバー", - "info": "スクロール可能な領域をラップする必要があります。スクロール可能な場合、スクロールのバーが表示されて指示します。", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scrollbarの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【controller】 : コントローラー 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ko_KR.json deleted file mode 100644 index c4a018f38..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "스크롤바", - "info": "스크롤 가능한 영역을 감싸야 하며, 스크롤이 가능할 때 스크롤 바가 표시되어 위치를 표시합니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scrollbar 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【controller】 : 컨트롤러 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_pt_PT.json deleted file mode 100644 index 4724067d9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "Barra de Rolagem", - "info": "Precisa envolver uma área rolável. Quando rolável, exibirá uma barra de rolagem para indicar.", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Scrollbar", - "desc": [ - "【child】 : Componente Filho 【Widget】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ru_RU.json deleted file mode 100644 index 3f8d4a3df..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "Ползунок прокрутки", - "info": "Необходимо обернуть прокручиваемую область, при прокрутке будет отображаться ползунок для индикации.", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Scrollbar", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【controller】 : Контроллер 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_zh-CN.json deleted file mode 100644 index 7e6d02ea7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 194, - "name": "Scrollbar", - "localName": "滑动指示栏", - "info": "需要包裹一个可滑动区域,当可滑动时,会显示滑动的bar用于指示。", - "lever": 3, - "family": 1, - "linkIds": [ - 195, - 164, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Scrollbar基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【controller】 : 控制器 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/node1_base.dart deleted file mode 100644 index da07c5b34..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Scrollbar/node1_base.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomScrollbar extends StatelessWidget { - const CustomScrollbar({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Scrollbar( - child: ListView( - padding: const EdgeInsets.symmetric(horizontal: 5), - children: data - .map((color) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: color, - child: Text( - colorString(color), - style: const TextStyle( - color: Colors.white, - shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ], - ), - ), - )) - .toList(), - ), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_de_DE.json deleted file mode 100644 index 9d384d43b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_de_DE.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "Auswählbarer Text", - "info": "Auswählbarer Text, der ausgewählt und kopiert werden kann. Die Farbe, Größe, Textstil, Ausrichtung usw. des Cursors können angegeben werden.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SelectableText", - "desc": [ - "【Parameter】 : Angezeigter Text 【String】", - "【style】 : Textstil 【TextStyle】", - "【cursorRadius】 : Cursorradius 【Radius】", - "【cursorColor】 : Cursorfarbe 【Color】", - "【cursorWidth】 : Cursorbreite 【double】", - "【showCursor】 : Cursor anzeigen 【bool】", - "【autofocus】 : Autofokus 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "Ausrichtungseigenschaften von SelectableText", - "desc": [ - "【textAlign】 : Ausrichtung*6 【textAlign】", - "【textDirection】 : Textrichtung*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_en_US.json deleted file mode 100644 index ac2e706d1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_en_US.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "Selectable Text", - "info": "Selectable text that can be selected and copied. You can specify the color, size, text style, alignment, etc. of the cursor.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SelectableText", - "desc": [ - "【Parameter】 : Display text 【String】", - "【style】 : Text style 【TextStyle】", - "【cursorRadius】 : Cursor radius 【Radius】", - "【cursorColor】 : Cursor color 【Color】", - "【cursorWidth】 : Cursor width 【double】", - "【showCursor】 : Whether to show the cursor 【bool】", - "【autofocus】 : Auto focus 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "Alignment Properties of SelectableText", - "desc": [ - "【textAlign】 : Alignment method*6 【textAlign】", - "【textDirection】 : Text direction*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_es_ES.json deleted file mode 100644 index ef1aee65c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_es_ES.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "Texto Seleccionable", - "info": "Texto seleccionable que se puede seleccionar y copiar. Se puede especificar el color, tamaño, estilo de texto, alineación, etc., del cursor.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SelectableText", - "desc": [ - "【Parámetro】 : Texto mostrado 【String】", - "【style】 : Estilo de texto 【TextStyle】", - "【cursorRadius】 : Radio del cursor 【Radius】", - "【cursorColor】 : Color del cursor 【Color】", - "【cursorWidth】 : Ancho del cursor 【double】", - "【showCursor】 : Mostrar cursor 【bool】", - "【autofocus】 : Enfoque automático 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "Propiedades de alineación de SelectableText", - "desc": [ - "【textAlign】 : Alineación*6 【textAlign】", - "【textDirection】 : Dirección del texto*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_fr_FR.json deleted file mode 100644 index 99181eb37..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_fr_FR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "Texte sélectionnable", - "info": "Texte sélectionnable, peut être sélectionné et copié. Permet de spécifier la couleur du curseur, la taille, le style du texte, l'alignement, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SelectableText", - "desc": [ - "【Paramètre】 : Texte affiché 【String】", - "【style】 : Style du texte 【TextStyle】", - "【cursorRadius】 : Rayon du curseur 【Radius】", - "【cursorColor】 : Couleur du curseur 【Color】", - "【cursorWidth】 : Largeur du curseur 【double】", - "【showCursor】 : Afficher le curseur 【bool】", - "【autofocus】 : Mise au point automatique 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "Propriétés d'alignement de SelectableText", - "desc": [ - "【textAlign】 : Mode d'alignement*6 【textAlign】", - "【textDirection】 : Direction du texte*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_it_IT.json deleted file mode 100644 index 10e6cc53d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_it_IT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "Testo selezionabile", - "info": "Testo selezionabile che può essere selezionato e copiato. È possibile specificare il colore, la dimensione, lo stile del testo, l'allineamento, ecc. del cursore.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SelectableText", - "desc": [ - "【Parametro】 : Testo da visualizzare 【String】", - "【style】 : Stile del testo 【TextStyle】", - "【cursorRadius】 : Raggio del cursore 【Radius】", - "【cursorColor】 : Colore del cursore 【Color】", - "【cursorWidth】 : Larghezza del cursore 【double】", - "【showCursor】 : Mostra il cursore 【bool】", - "【autofocus】 : Autofocus 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "Proprietà di allineamento di SelectableText", - "desc": [ - "【textAlign】 : Allineamento*6 【textAlign】", - "【textDirection】 : Direzione del testo*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ja_JP.json deleted file mode 100644 index b669bbeac..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ja_JP.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "選択可能なテキスト", - "info": "選択可能なテキストで、選択やコピーが可能です。カーソルの色、サイズ、テキストスタイル、配置などを指定できます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SelectableTextの基本使用", - "desc": [ - "【入参】 : 表示テキスト 【String】", - "【style】 : テキストスタイル 【TextStyle】", - "【cursorRadius】 : カーソル半径 【Radius】", - "【cursorColor】 : カーソル色 【Color】", - "【cursorWidth】 : カーソル幅 【double】", - "【showCursor】 : カーソル表示の有無 【bool】", - "【autofocus】 : 自動フォーカス 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "SelectableTextの配置属性", - "desc": [ - "【textAlign】 : 配置方法*6 【textAlign】", - "【textDirection】 : テキスト方向*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ko_KR.json deleted file mode 100644 index 75baa2b45..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ko_KR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "선택 가능한 텍스트", - "info": "선택 가능한 텍스트로, 선택 및 복사가 가능합니다. 커서의 색상, 크기, 텍스트 스타일, 정렬 방식 등을 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SelectableText 기본 사용법", - "desc": [ - "【입력 매개변수】 : 표시할 텍스트 【String】", - "【style】 : 텍스트 스타일 【TextStyle】", - "【cursorRadius】 : 커서 반지름 【Radius】", - "【cursorColor】 : 커서 색상 【Color】", - "【cursorWidth】 : 커서 너비 【double】", - "【showCursor】 : 커서 표시 여부 【bool】", - "【autofocus】 : 자동 포커스 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "SelectableText 정렬 속성", - "desc": [ - "【textAlign】 : 정렬 방식*6 【textAlign】", - "【textDirection】 : 텍스트 방향*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_pt_PT.json deleted file mode 100644 index 571375f5d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_pt_PT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "Texto Selecionável", - "info": "Texto que pode ser selecionado e copiado. Pode especificar a cor do cursor, tamanho, estilo de texto, alinhamento, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SelectableText", - "desc": [ - "【Parâmetro】 : Texto a ser exibido 【String】", - "【style】 : Estilo do texto 【TextStyle】", - "【cursorRadius】 : Raio do cursor 【Radius】", - "【cursorColor】 : Cor do cursor 【Color】", - "【cursorWidth】 : Largura do cursor 【double】", - "【showCursor】 : Mostrar cursor 【bool】", - "【autofocus】 : Foco automático 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "Propriedades de Alinhamento do SelectableText", - "desc": [ - "【textAlign】 : Método de alinhamento*6 【textAlign】", - "【textDirection】 : Direção do texto*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ru_RU.json deleted file mode 100644 index 6b26264f8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_ru_RU.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "Выбираемый текст", - "info": "Текст, который можно выбирать и копировать. Можно указать цвет курсора, размер, стиль текста, выравнивание и т.д.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SelectableText", - "desc": [ - "【Параметр】 : Отображаемый текст 【String】", - "【style】 : Стиль текста 【TextStyle】", - "【cursorRadius】 : Радиус курсора 【Radius】", - "【cursorColor】 : Цвет курсора 【Color】", - "【cursorWidth】 : Ширина курсора 【double】", - "【showCursor】 : Показывать ли курсор 【bool】", - "【autofocus】 : Автофокус 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "Свойства выравнивания SelectableText", - "desc": [ - "【textAlign】 : Способ выравнивания*6 【textAlign】", - "【textDirection】 : Направление текста*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_zh-CN.json deleted file mode 100644 index 0459ab60d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/desc_zh-CN.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 53, - "name": "SelectableText", - "localName": "可选择文字", - "info": "可选择的文字,可以选择、复制。可指定浮标的颜色、大小、文字样式、对齐方式等。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SelectableText基本使用", - "desc": [ - "【入参】 : 显示文字 【String】", - "【style】 : 文字样式 【TextStyle】", - "【cursorRadius】 : 光标半径 【Radius】", - "【cursorColor】 : 光标颜色 【Color】", - "【cursorWidth】 : 光标宽度 【double】", - "【showCursor】 : 是否显示光标 【bool】", - "【autofocus】 : 自动聚焦 【bool】" - ] - }, - { - "file": "node2_align.dart", - "name": "SelectableText对齐属性", - "desc": [ - "【textAlign】 : 对齐方式*6 【textAlign】", - "【textDirection】 : 文字方向*2 【TextDirection】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/node1_base.dart deleted file mode 100644 index a20dcd5a8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/node1_base.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomSelectableText extends StatelessWidget { - const CustomSelectableText({Key? key}) : super(key: key); - - final String text = " 始臣之解牛之时,所见无非牛者。三年之后,未尝见全牛也。方今之时," - "臣以神遇而不以目视,官知止而神欲行。依乎天理,批大郤,导大窾,因其固然," - "技经肯綮之未尝,而况大軱乎!良庖岁更刀,割也;族庖月更刀,折也。" - "今臣之刀十九年矣,所解数千牛矣,而刀刃若新发于硎。彼节者有间,而刀刃者无厚;" - "以无厚入有间,恢恢乎其于游刃必有余地矣,是以十九年而刀刃若新发于硎。" - "虽然,每至于族,吾见其难为,怵然为戒,视为止,行为迟。动刀甚微,謋然已解,如土委地。" - "提刀而立,为之四顾,为之踌躇满志,善刀而藏之."; - - @override - Widget build(BuildContext context) { - return SelectableText( - text, - style: const TextStyle(fontSize: 18, color: Colors.orange), - cursorColor: Colors.green, - cursorRadius: const Radius.circular(3), - cursorWidth: 5, - showCursor: true, - autofocus: false, - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/node2_align.dart b/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/node2_align.dart deleted file mode 100644 index 53bf6c37a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SelectableText/node2_align.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class AlignSelectableText extends StatefulWidget { - const AlignSelectableText({Key? key}) : super(key: key); - - @override - _AlignSelectableTextState createState() => _AlignSelectableTextState(); -} - -class _AlignSelectableTextState extends State { - final String text = - "The [SelectableText] widget displays a string of text with a single style." - "The string might break across multiple lines or might all be displayed on" - "the same line depending on the layout constraints."; - TextAlign _textAlign = TextAlign.left; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSelector(), - SelectableText( - text, - style: const TextStyle(fontSize: 18, color: Colors.red), - cursorColor: Colors.green, - cursorRadius: const Radius.circular(3), - cursorWidth: 5, - showCursor: true, - textAlign: _textAlign, - textDirection: TextDirection.ltr, - autofocus: false, - ), - ], - ); - } - - Widget _buildSelector() { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - const Text( - "textAlign属性选择:", - style: TextStyle( - fontSize: 16, - color: Colors.blue, - fontWeight: FontWeight.bold, - ), - ), - DropdownButton( - underline: Container(), - value: _textAlign, - items: TextAlign.values - .map((e) => DropdownMenuItem( - value: e, - child: Text(e.toString()), - )) - .toList(), - onChanged: (e) { - setState(() { - _textAlign = e??_textAlign; - }); - }), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_de_DE.json deleted file mode 100644 index d6ac3b941..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "Größenübergang", - "info": "Kann ein Kindelement aufnehmen und eine Größenanimation durchführen. Es erfordert einen Animator sizeFactor und kann die Achse und die Achsenausrichtung der Größenänderung angeben.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SizeTransition", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【axis】 : Achse*2 【Axis】", - "【sizeFactor】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_en_US.json deleted file mode 100644 index 35fe02fd9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "Size Transition", - "info": "Can accommodate a child component and animate its size. Requires an animator sizeFactor, and can specify the axis of size change and the axis alignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SizeTransition", - "desc": [ - "【child】: Child component 【Widget】", - "【axis】: Axis*2 【Axis】", - "【sizeFactor】: Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_es_ES.json deleted file mode 100644 index 7c346567e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "Transición de Tamaño", - "info": "Puede contener un componente hijo y realizar una animación de tamaño, requiere un animador sizeFactor, y se puede especificar el eje de cambio de tamaño y la alineación del eje.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SizeTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【axis】 : Eje*2 【Axis】", - "【sizeFactor】 : Animación 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_fr_FR.json deleted file mode 100644 index cc72ace55..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "Transition de taille", - "info": "Peut contenir un composant enfant et lui faire subir une animation de taille. Nécessite un animateur sizeFactor, peut spécifier l'axe de changement de taille et l'alignement axial axisAlignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SizeTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【axis】 : Axe*2 【Axis】", - "【sizeFactor】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_it_IT.json deleted file mode 100644 index f4cd22911..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "Transizione Dimensionale", - "info": "Può contenere un componente figlio e fargli eseguire un'animazione di dimensione, richiede un animatore sizeFactor, è possibile specificare l'asse di cambiamento delle dimensioni e l'allineamento assiale.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di SizeTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【axis】 : Asse*2 【Axis】", - "【sizeFactor】 : Animazione 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ja_JP.json deleted file mode 100644 index 9e63d9144..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "サイズ変更", - "info": "子コンポーネントを収容し、そのサイズアニメーションを実行します。アニメーターsizeFactorを提供する必要があり、サイズ変化の軸と軸方向のaxisAlignmentを指定できます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizeTransitionの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【axis】 : 軸方向*2 【Axis】", - "【sizeFactor】 : アニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ko_KR.json deleted file mode 100644 index 4ea1cccb3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "크기 변환", - "info": "하위 컴포넌트를 수용하고 크기 애니메이션을 수행할 수 있습니다. 애니메이션 sizeFactor를 제공해야 하며, 크기 변화 축 및 축 정렬을 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizeTransition 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【axis】 : 축*2 【Axis】", - "【sizeFactor】 : 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_pt_PT.json deleted file mode 100644 index 849222156..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "Transição de Tamanho", - "info": "Pode conter um componente filho e fazê-lo realizar uma animação de tamanho, requer um animador sizeFactor, pode especificar o eixo de mudança de tamanho e o alinhamento axial do eixo.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SizeTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【axis】 : Eixo*2 【Axis】", - "【sizeFactor】 : Animação 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ru_RU.json deleted file mode 100644 index 7b4cef6d8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "Изменение размера", - "info": "Может содержать один дочерний компонент и анимировать его размер. Требуется предоставить аниматор sizeFactor, можно указать ось изменения размера и выравнивание оси axisAlignment.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SizeTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【axis】 : Ось*2 【Axis】", - "【sizeFactor】 : Анимация 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_zh-CN.json deleted file mode 100644 index 8cb4f26b3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 92, - "name": "SizeTransition", - "localName": "尺寸变换", - "info": "可容纳一个子组件,并使其进行尺寸动画,需要提供动画器sizeFactor,可指定尺寸变化轴及轴向的axisAlignment。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SizeTransition基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【axis】 : 轴向*2 【Axis】", - "【sizeFactor】 : 动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/node1_base.dart deleted file mode 100644 index 733e9c49d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SizeTransition/node1_base.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomSizeTransition extends StatefulWidget { - const CustomSizeTransition({Key? key}) : super(key: key); - - @override - _CustomSizeTransitionState createState() => _CustomSizeTransitionState(); -} - -class _CustomSizeTransitionState extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - _ctrl = - AnimationController(vsync: this, duration: const Duration(seconds: 1)); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Wrap( - runSpacing: 20, - children: [ - SizeTransition( - axis: Axis.horizontal, - sizeFactor: CurvedAnimation(parent: _ctrl, curve: Curves.linear), - child: Container( - width: MediaQuery.of(context).size.width, - color: Colors.orange, - child: - const Icon(Icons.android, color: Colors.green, size: 80)), - ), - SizeTransition( - axis: Axis.vertical, - sizeFactor: CurvedAnimation(parent: _ctrl, curve: Curves.linear), - child: Container( - width: MediaQuery.of(context).size.width, - color: Colors.orange, - child: - const Icon(Icons.android, color: Colors.green, size: 80)), - ), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_de_DE.json deleted file mode 100644 index a3835b8c4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "Schiebeübergang", - "info": "Eine Unterklasse von AnimatedWidget, die einen Animator vom Typ Offset verwendet, um eine Übergangsanimation zwischen zwei Offset-Objekten für das Kind-Widget zu ermöglichen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SlideTransition", - "desc": [ - "【child】 : Kind-Widget 【Widget】", - "【textDirection】 : X-Achsenrichtung 【TextDirection】", - "【position】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_en_US.json deleted file mode 100644 index b808bde8a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "Slide Transition", - "info": "A subclass of AnimatedWidget, using an animator of type Offset to allow child components to transition between two Offset objects.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SlideTransition", - "desc": [ - "【child】: Child component 【Widget】", - "【textDirection】: X-axis direction 【TextDirection】", - "【position】: Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_es_ES.json deleted file mode 100644 index da6678e9c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "Transición de deslizamiento", - "info": "Subclase de AnimatedWidget, utiliza un animador de tipo Offset para realizar una animación de transición entre dos objetos Offset en el componente hijo.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SlideTransition", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【textDirection】 : Dirección del eje x 【TextDirection】", - "【position】 : Animación 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_fr_FR.json deleted file mode 100644 index 3e24c65a6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "Transition par glissement", - "info": "Sous-classe de AnimatedWidget, utilise un animateur de type Offset pour permettre à un composant enfant de faire une animation de transition entre deux objets Offset.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SlideTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【textDirection】 : Direction de l'axe x 【TextDirection】", - "【position】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_it_IT.json deleted file mode 100644 index 067c33256..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "Transizione scorrevole", - "info": "Sottoclasse di AnimatedWidget, utilizza un animatore di tipo Offset per far sì che i componenti figli eseguano un'animazione di transizione tra due oggetti Offset.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di SlideTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【textDirection】 : Direzione dell'asse x 【TextDirection】", - "【position】 : Animazione 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ja_JP.json deleted file mode 100644 index 06eef3ac4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "スライド遷移", - "info": "AnimatedWidgetのサブクラスで、Offsetタイプのアニメーターを使用して子コンポーネントを2つのOffsetオブジェクト間で遷移させるアニメーションを行います。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SlideTransition 基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【textDirection】 : x軸方向 【TextDirection】", - "【position】 : アニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ko_KR.json deleted file mode 100644 index fece4f899..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "슬라이드 전환", - "info": "AnimatedWidget의 하위 클래스로, Offset 타입의 애니메이터를 사용하여 자식 위젯이 두 Offset 객체 간의 전환 애니메이션을 수행하도록 합니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SlideTransition 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【textDirection】 : x축 방향 【TextDirection】", - "【position】 : 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_pt_PT.json deleted file mode 100644 index 62082d061..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "Transição de Deslizamento", - "info": "Subclasse de AnimatedWidget, usa um animador do tipo Offset para fazer com que os componentes filhos realizem uma animação de transição entre dois objetos Offset.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SlideTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【textDirection】 : Direção do eixo x 【TextDirection】", - "【position】 : Animação 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ru_RU.json deleted file mode 100644 index 70208440c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "Скользящий переход", - "info": "Подкласс AnimatedWidget, использует аниматор типа Offset для создания анимации перехода между двумя объектами Offset для дочернего компонента.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SlideTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【textDirection】 : Направление оси x 【TextDirection】", - "【position】 : Анимация 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_zh-CN.json deleted file mode 100644 index 8007c60a1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 112, - "name": "SlideTransition", - "localName": "滑动变换", - "info": "AnimatedWidget的子类,使用Offset类型的动画器让子组件在两个Offset对象之间进行过渡动画。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SlideTransition 基本使用", - "desc": [ - "【child】 : 孩子组件 【Widget】", - "【textDirection】 : x轴方向 【TextDirection】", - "【position】 : 动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/node1_base.dart deleted file mode 100644 index 19569425d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/SlideTransition/node1_base.dart +++ /dev/null @@ -1,67 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomSlideTransition extends StatefulWidget { - const CustomSlideTransition({Key? key}) : super(key: key); - - @override - _CustomSlideTransitionState createState() => _CustomSlideTransitionState(); -} - -class _CustomSlideTransitionState extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - late Animation animation; - - @override - void initState() { - super.initState(); - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 2), - )..forward(); - - animation = Tween( - begin: Offset.zero, - end: const Offset(0.5, 0.5), - ).animate(_ctrl); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Container( - width: 200, - color: Colors.grey.withAlpha(33), - height: 100, - child: Stack( - fit: StackFit.expand, - children: [ - SlideTransition( - textDirection: TextDirection.ltr, - position: animation, - child: _buildChild(), - ), - SlideTransition( - textDirection: TextDirection.rtl, - position: animation, - child: _buildChild(), - ), - ], - ), - )); - } - Widget _buildChild() => const Icon( - Icons.accessible_forward_sharp, - color: Colors.green, - size: 25, - ); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_de_DE.json deleted file mode 100644 index 96f03fab1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_de_DE.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "Schieberegler", - "info": "Schieberegler-Komponente, die es ermöglicht, zwischen einem festgelegten Minimum und Maximum zu wählen. Kann Farbe, Anzahl der Segmente und angezeigte Labels angeben und erhält einen Rückruf bei Fortschrittsänderungen.", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung des Sliders", - "desc": [ - "【value】 : Wert 【double】", - "【min】 : Mindestwert 【double】", - "【max】 : Höchstwert 【double】", - "【activeColor】 : Aktive Farbe 【Color】", - "【inactiveColor】 : Inaktive Farbe 【Color】", - "【onChanged】 : Rückruf bei Änderung 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Segmente und Labels des Sliders", - "desc": [ - "【divisions】 : Anzahl der Segmente 【int】", - "【label】 : Text des Hinweisblasens 【String】", - "【onChangeStart】 : Überwachung beim Start des Schiebens 【Function(double)】", - "【onChangeEnd】 : Überwachung beim Ende des Schiebens 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_en_US.json deleted file mode 100644 index 91e1a8e2b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_en_US.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "Slider", - "info": "Slider component, allows dragging to select between a specified maximum and minimum value. Can specify color, number of segments, and displayed labels, and receives progress change callbacks.", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Slider", - "desc": [ - "【value】 : value 【double】", - "【min】 : minimum value 【double】", - "【max】 : maximum value 【double】", - "【activeColor】 : active color 【Color】", - "【inactiveColor】 : inactive color 【Color】", - "【onChanged】 : callback when changed 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Slider Segments and Labels", - "desc": [ - "【divisions】 : number of segments 【int】", - "【label】 : tooltip text 【String】", - "【onChangeStart】 : listener when sliding starts 【Function(double)】", - "【onChangeEnd】 : listener when sliding ends 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_es_ES.json deleted file mode 100644 index 3f9140447..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_es_ES.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "Control deslizante", - "info": "Componente de control deslizante que permite seleccionar arrastrando entre un valor máximo y mínimo especificados. Se puede especificar el color, el número de segmentos y las etiquetas mostradas, y recibe una devolución de llamada para los cambios de progreso.", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico del Slider", - "desc": [ - "【value】 : valor 【double】", - "【min】 : valor mínimo 【double】", - "【max】 : valor máximo 【double】", - "【activeColor】 : color activo 【Color】", - "【inactiveColor】 : color inactivo 【Color】", - "【onChanged】 : devolución de llamada al cambiar 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Segmentos y etiquetas del Slider", - "desc": [ - "【divisions】 : número de segmentos 【int】", - "【label】 : texto de la burbuja de información 【String】", - "【onChangeStart】 : escucha al comenzar a deslizar 【Function(double)】", - "【onChangeEnd】 : escucha al finalizar el deslizamiento 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_fr_FR.json deleted file mode 100644 index 737792618..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_fr_FR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "Curseur", - "info": "Composant curseur, permet de faire glisser pour sélectionner entre une valeur maximale et minimale spécifiées. Peut spécifier la couleur, le nombre de segments et les étiquettes affichées, reçoit un rappel de changement de progression.", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base du Slider", - "desc": [ - "【value】 : valeur 【double】", - "【min】 : valeur minimale 【double】", - "【max】 : valeur maximale 【double】", - "【activeColor】 : couleur active 【Color】", - "【inactiveColor】 : couleur inactive 【Color】", - "【onChanged】 : rappel lors du changement 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Segmentation et étiquettes du Slider", - "desc": [ - "【divisions】 : nombre de segments 【int】", - "【label】 : texte de la bulle d'info 【String】", - "【onChangeStart】 : écoute au début du glissement 【Function(double)】", - "【onChangeEnd】 : écoute à la fin du glissement 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_it_IT.json deleted file mode 100644 index 35fb80343..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_it_IT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "Cursore", - "info": "Componente cursore, consente di selezionare trascinando tra un valore massimo e minimo specificato. È possibile specificare il colore, il numero di segmenti e le etichette visualizzate, e ricevere un callback per le variazioni di avanzamento.", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base del cursore", - "desc": [ - "【value】 : valore 【double】", - "【min】 : valore minimo 【double】", - "【max】 : valore massimo 【double】", - "【activeColor】 : colore attivo 【Color】", - "【inactiveColor】 : colore inattivo 【Color】", - "【onChanged】 : callback al cambiamento 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Segmentazione ed etichette del cursore", - "desc": [ - "【divisions】 : numero di segmenti 【int】", - "【label】 : testo della bolla di suggerimento 【String】", - "【onChangeStart】 : ascolto all'inizio dello scorrimento 【Function(double)】", - "【onChangeEnd】 : ascolto alla fine dello scorrimento 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ja_JP.json deleted file mode 100644 index 626b39242..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ja_JP.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "スライダー", - "info": "スライダーコンポーネントは、指定された最大値と最小値の間でドラッグして選択することができます。色、分割数、表示されるラベルを指定でき、進捗変化のコールバックを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "スライダーの基本使用", - "desc": [ - "【value】 : 数値 【double】", - "【min】 : 最小値 【double】", - "【max】 : 最大値 【double】", - "【activeColor】 : アクティブカラー 【Color】", - "【inactiveColor】 : 非アクティブカラー 【Color】", - "【onChanged】 : 変更時のコールバック 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "スライダーの分割とラベル", - "desc": [ - "【divisions】 : 分割数 【int】", - "【label】 : ヒントバブルテキスト 【String】", - "【onChangeStart】 : スライド開始時のリスナー 【Function(double)】", - "【onChangeEnd】 : スライド終了時のリスナー 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ko_KR.json deleted file mode 100644 index 4a82878cb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ko_KR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "슬라이더", - "info": "슬라이더 컴포넌트는 지정된 최대값과 최소값 사이에서 드래그하여 선택할 수 있습니다. 색상, 분할 수 및 표시된 라벨을 지정할 수 있으며, 진행률 변경 콜백을 받습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Slider 기본 사용", - "desc": [ - "【value】 : 값 【double】", - "【min】 : 최소값 【double】", - "【max】 : 최대값 【double】", - "【activeColor】 : 활성화 색상 【Color】", - "【inactiveColor】 : 비활성화 색상 【Color】", - "【onChanged】 : 변경 시 콜백 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Slider의 분할과 라벨", - "desc": [ - "【divisions】 : 분할 수 【int】", - "【label】 : 툴팁 텍스트 【String】", - "【onChangeStart】 : 슬라이드 시작 시 리스너 【Function(double)】", - "【onChangeEnd】 : 슬라이드 종료 시 리스너 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_pt_PT.json deleted file mode 100644 index e4a68925f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_pt_PT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "Deslizador", - "info": "Componente deslizante que permite selecionar arrastando entre um valor máximo e mínimo especificados. Pode especificar a cor, o número de segmentos e as etiquetas exibidas, e recebe uma chamada de retorno para alterações de progresso.", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Slider", - "desc": [ - "【value】 : valor 【double】", - "【min】 : valor mínimo 【double】", - "【max】 : valor máximo 【double】", - "【activeColor】 : cor ativa 【Color】", - "【inactiveColor】 : cor inativa 【Color】", - "【onChanged】 : chamada de retorno ao alterar 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Segmentação e etiquetas do Slider", - "desc": [ - "【divisions】 : número de segmentos 【int】", - "【label】 : texto da bolha de dica 【String】", - "【onChangeStart】 : ouvinte ao iniciar o deslize 【Function(double)】", - "【onChangeEnd】 : ouvinte ao terminar o deslize 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ru_RU.json deleted file mode 100644 index 64bbb857f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_ru_RU.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "Ползунок", - "info": "Компонент ползунка, который позволяет выбирать значение, перетаскивая между указанными минимальным и максимальным значениями. Можно указать цвет, количество сегментов и отображаемые метки, а также получить обратный вызов при изменении прогресса.", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Slider", - "desc": [ - "【value】 : значение 【double】", - "【min】 : минимальное значение 【double】", - "【max】 : максимальное значение 【double】", - "【activeColor】 : активный цвет 【Color】", - "【inactiveColor】 : неактивный цвет 【Color】", - "【onChanged】 : обратный вызов при изменении 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Сегменты и метки Slider", - "desc": [ - "【divisions】 : количество сегментов 【int】", - "【label】 : текст подсказки 【String】", - "【onChangeStart】 : слушатель начала перетаскивания 【Function(double)】", - "【onChangeEnd】 : слушатель окончания перетаскивания 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_zh-CN.json deleted file mode 100644 index d8164d8fa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/desc_zh-CN.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 42, - "name": "Slider", - "localName": "滑块", - "info": "滑块组件,可以在指定的最大值和最小值之间拖动选择。可指定颜色、分段数及显示的标签,接收进度变化回调。", - "lever": 4, - "family": 1, - "linkIds": [ - 43, - 44, - 331 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Slider基本使用", - "desc": [ - "【value】 : 数值 【double】", - "【min】 : 最小值 【double】", - "【max】 : 最大值 【double】", - "【activeColor】 : 激活颜色 【Color】", - "【inactiveColor】 : 非激活颜色 【Color】", - "【onChanged】 : 改变时回调 【Function(double)】" - ] - }, - { - "file": "node2_lable.dart", - "name": "Slider的分段与标签", - "desc": [ - "【divisions】 : 分段数 【int】", - "【label】 : 提示气泡文字 【String】", - "【onChangeStart】 : 开始滑动时监听 【Function(double)】", - "【onChangeEnd】 : 滑动结束时监听 【Function(double)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Slider/node1_base.dart deleted file mode 100644 index 102802e02..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/node1_base.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class CustomSlider extends StatefulWidget { - const CustomSlider({Key? key}) : super(key: key); - - @override - _CustomSliderState createState() => _CustomSliderState(); -} - -class _CustomSliderState extends State { - double _value = 0.0; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Text('当前值:${_value.toStringAsFixed(1)}'), - Slider( - value: _value, - min: 0.0, - max: 360.0, - activeColor: Colors.orangeAccent, - inactiveColor: Colors.green.withAlpha(99), - onChanged: _onChange), - ], - ); - } - - void _onChange(value) { - setState(() { - _value = value; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Slider/node2_lable.dart b/modules/widget_system/widgets/lib/StatefulWidget/Slider/node2_lable.dart deleted file mode 100644 index 268f5e8fe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Slider/node2_lable.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-31 -/// contact me by email 1981462002@qq.com - -class DivisionsSlider extends StatefulWidget { - const DivisionsSlider({Key? key}) : super(key: key); - - @override - _DivisionsSliderState createState() => _DivisionsSliderState(); -} - -class _DivisionsSliderState extends State { - double _value = 0.0; - - @override - Widget build(BuildContext context) { - return Slider( - value: _value, - min: 0.0, - max: 360.0, - divisions: 10, - label: _value.toStringAsFixed(1), - activeColor: Colors.orangeAccent, - inactiveColor: Colors.green.withAlpha(99), - onChangeStart: (value) { - print('开始滑动:$value'); - }, - onChangeEnd: (value) { - print('滑动结束:$value'); - }, - onChanged: (value) { - setState(() { - _value = value; - }); - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_de_DE.json deleted file mode 100644 index d4526d874..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "Statuskonstruktor", - "info": "Es muss das builder-Attribut übergeben werden, um die Komponente zu konstruieren. Im builder kann StateSetter verwendet werden, um den Zustand der Unterkomponenten zu ändern, d.h. es ist möglich, eine lokal aktualisierte Komponente zu erstellen, ohne eine Klasse zu erstellen.", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von StatefulBuilder", - "desc": [ - "【builder】 : Komponentenkonstruktor 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_en_US.json deleted file mode 100644 index 7b339f1e6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "State Constructor", - "info": "The builder property needs to be passed to construct the component. In the builder, StateSetter can be used to change the state of the child component, which means a locally refreshed component can be implemented without creating a class.", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of StatefulBuilder", - "desc": [ - "【builder】 : Component Constructor 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_es_ES.json deleted file mode 100644 index f4ab980b7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "Constructor de Estado", - "info": "Requiere que se pase la propiedad builder para construir el componente. En el builder, se puede usar StateSetter para cambiar el estado del subcomponente, lo que permite implementar un componente con actualización local sin necesidad de crear una clase.", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de StatefulBuilder", - "desc": [ - "【builder】 : Constructor del componente 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_fr_FR.json deleted file mode 100644 index 56c80e8fc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "Constructeur d'état", - "info": "Nécessite de passer la propriété builder pour construire le composant. Dans le builder, vous pouvez utiliser StateSetter pour modifier l'état du sous-composant, ce qui permet de créer un composant à rafraîchissement local sans avoir à créer une classe.", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de StatefulBuilder", - "desc": [ - "【builder】 : Constructeur de composant 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_it_IT.json deleted file mode 100644 index 656f0161b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "Costruttore di Stato", - "info": "È necessario passare la proprietà builder per costruire il componente. Nel builder, è possibile utilizzare StateSetter per cambiare lo stato del componente figlio, il che consente di implementare un componente con aggiornamento locale senza dover creare una classe.", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di StatefulBuilder", - "desc": [ - "【builder】: Costruttore del componente 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ja_JP.json deleted file mode 100644 index 8a72f81a9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "ステートフルビルダー", - "info": "builderプロパティを渡してコンポーネントを構築する必要があります。builder内でStateSetterを使用して子コンポーネントの状態を変更できます。つまり、クラスを作成せずに局所的な更新を行うコンポーネントを実現できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StatefulBuilderの基本使用", - "desc": [ - "【builder】 : コンポーネントビルダー 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ko_KR.json deleted file mode 100644 index 12ea565a6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "상태 생성기", - "info": "builder 속성을 전달하여 컴포넌트를 구성해야 합니다. builder 내에서 StateSetter를 사용하여 하위 컴포넌트의 상태를 변경할 수 있습니다. 즉, 클래스를 생성하지 않고도 부분적으로 새로 고치는 컴포넌트를 구현할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StatefulBuilder 기본 사용법", - "desc": [ - "【builder】 : 컴포넌트 생성기 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_pt_PT.json deleted file mode 100644 index c09e9ade2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "Construtor de Estado", - "info": "É necessário passar a propriedade builder para construir o componente. No builder, pode-se usar o StateSetter para alterar o estado do subcomponente, o que permite implementar um componente com atualização local sem a necessidade de criar uma classe.", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do StatefulBuilder", - "desc": [ - "【builder】: Construtor de Componentes 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ru_RU.json deleted file mode 100644 index f6dd4db8e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "Конструктор состояния", - "info": "Необходимо передать свойство builder для создания компонента. В builder можно использовать StateSetter для изменения состояния дочернего компонента, что позволяет реализовать локальное обновление компонента без создания класса.", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование StatefulBuilder", - "desc": [ - "【builder】 : Конструктор компонента 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_zh-CN.json deleted file mode 100644 index 4105126d1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 242, - "name": "StatefulBuilder", - "localName": "状态构造器", - "info": "需要传入 builder 属性进行构造组件,在 builder 中可以使用 StateSetter 改变构造子组件的状态,即可以不用创建类而实现一个局部刷新的组件。", - "lever": 3, - "family": 1, - "linkIds": [ - 202, - 203, - 280, - 255 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StatefulBuilder基本使用", - "desc": [ - "【builder】 : 组件构造器 【StatefulWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/node1_base.dart deleted file mode 100644 index 6cc0f4654..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatefulBuilder/node1_base.dart +++ /dev/null @@ -1,26 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class StatefulBuilderDemo extends StatelessWidget { - const StatefulBuilderDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - int count = 0; - - return StatefulBuilder( - builder: (ctx, setState) => ElevatedButton( - child: Text("当前数字: $count"), - onPressed: () { - setState(() { - count++; - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_de_DE.json deleted file mode 100644 index d00db6457..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "Statusübergangskomponente", - "info": "Abstrakte Klasse, die Aktualisierungen basierend auf den bereitgestellten Animatorstatusänderungen auslösen kann. Es gibt keine implementierten Unterklassen auf der Flutter-Framework-Ebene und keine Anwendungsfälle, daher scheint sie nicht sehr nützlich zu sein.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in StatusTransitionWidget", - "desc": [ - "【animation】 : Unterkomponente 【Animation】", - "Hier wird ein benutzerdefiniertes ColorStatusTransitionWidget verwendet, das beim Zustandswechsel des Animators verschiedene Farben erstellt." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_en_US.json deleted file mode 100644 index de7e4f032..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "Status Transition Widget", - "info": "Abstract class that can trigger refresh based on the state changes of the provided animator. There are no implemented subclasses in the Flutter framework layer, nor any usage scenarios, so it doesn't seem very useful.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to StatusTransitionWidget", - "desc": [ - "【animation】 : Child component 【Animation】", - "Here, a custom ColorStatusTransitionWidget is used to build different colors when the state of the animator changes." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_es_ES.json deleted file mode 100644 index 26137220d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "Componente de Transición de Estado", - "info": "Clase abstracta que puede desencadenar una actualización basada en los cambios de estado del animador proporcionado. No hay subclases implementadas en el nivel del framework Flutter, ni escenarios de uso, parece no ser muy útil.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a StatusTransitionWidget", - "desc": [ - "【animation】 : Componente hijo 【Animation】", - "Aquí se personaliza ColorStatusTransitionWidget para su uso, construyendo diferentes colores cuando cambia el estado del animador." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_fr_FR.json deleted file mode 100644 index 837becf1d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "Widget de transition d'état", - "info": "Classe abstraite qui peut déclencher un rafraîchissement en fonction des changements d'état de l'animateur fourni. Il n'y a pas de sous-classes implémentées au niveau du framework Flutter, ni de scénarios d'utilisation, ce qui semble peu utile.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction de StatusTransitionWidget", - "desc": [ - "【animation】 : Sous-composant 【Animation】", - "Ici, ColorStatusTransitionWidget est personnalisé pour être utilisé, construisant différentes couleurs lorsque l'état de l'animateur change." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_it_IT.json deleted file mode 100644 index 33ca6c76f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "Widget di transizione di stato", - "info": "Classe astratta che può attivare un aggiornamento in base ai cambiamenti di stato dell'animatore fornito. Non ci sono sottoclassi implementate a livello di framework Flutter, né scenari di utilizzo, sembra non essere molto utile.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a StatusTransitionWidget", - "desc": [ - "【animation】 : componente figlio 【Animation】", - "Qui viene utilizzato il ColorStatusTransitionWidget personalizzato, che costruisce colori diversi quando lo stato dell'animatore cambia." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ja_JP.json deleted file mode 100644 index ecf6183b3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "ステータス遷移コンポーネント", - "info": "抽象クラスで、提供されたアニメーターの状態変化に基づいて更新をトリガーできます。Flutterフレームワーク層には実装されたサブクラスも使用シナリオもなく、あまり役に立たないと感じます。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StatusTransitionWidget 紹介", - "desc": [ - "【animation】 : サブコンポーネント 【Animation】", - "ここでカスタムColorStatusTransitionWidgetを使用し、アニメーターの状態が変化したときに異なる色を構築します。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ko_KR.json deleted file mode 100644 index d81411783..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "상태 전환 위젯", - "info": "추상 클래스로, 제공된 애니메이터 상태 변화에 따라 새로고침을 트리거할 수 있습니다. Flutter 프레임워크 레벨에서 구현된 하위 클래스도 없고, 사용 사례도 없어서 유용성이 크지 않아 보입니다.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StatusTransitionWidget 소개", - "desc": [ - "【animation】 : 자식 위젯 【Animation】", - "여기서 사용자 정의 ColorStatusTransitionWidget을 사용하여 애니메이터의 상태가 변경될 때 다른 색상을 구성합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_pt_PT.json deleted file mode 100644 index ee2ef811c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "Componente de Transição de Estado", - "info": "Classe abstrata que pode acionar atualizações com base nas mudanças de estado do animador fornecido. Não há subclasses implementadas na camada do framework Flutter, nem cenários de uso, parece não ser muito útil.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao StatusTransitionWidget", - "desc": [ - "【animation】 : Subcomponente 【Animation】", - "Aqui, o ColorStatusTransitionWidget é personalizado para uso, construindo cores diferentes quando o estado do animador muda." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ru_RU.json deleted file mode 100644 index 441f8cd4c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "Виджет перехода состояний", - "info": "Абстрактный класс, который может вызывать обновление при изменении состояния предоставленного аниматора. На уровне фреймворка Flutter нет реализованных подклассов, а также сценариев использования, что делает его не очень полезным.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в StatusTransitionWidget", - "desc": [ - "【animation】 : Дочерний компонент 【Animation】", - "Здесь используется пользовательский ColorStatusTransitionWidget, который строит различные цвета при изменении состояния аниматора." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_zh-CN.json deleted file mode 100644 index 523c58f62..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 233, - "name": "StatusTransitionWidget", - "localName": "状态转变组件", - "info": "抽象类,可以根据提供的动画器状态变化触发刷新。在 Flutter 框架层没有实现的子类,也没有使用的场景,感觉用处不是很大。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StatusTransitionWidget 介绍", - "desc": [ - "【animation】 : 子组件 【Animation】", - "这里自定义 ColorStatusTransitionWidget 进行使用,在动画器的状态改变时构建不同的颜色。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/node1_base.dart deleted file mode 100644 index c431fb386..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StatusTransitionWidget/node1_base.dart +++ /dev/null @@ -1,74 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - - -class StatusTransitionWidgetDemo extends StatefulWidget { - const StatusTransitionWidgetDemo({Key? key}) : super(key: key); - - @override - _StatusTransitionWidgetDemoState createState() => - _StatusTransitionWidgetDemoState(); -} - -class _StatusTransitionWidgetDemoState extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - super.initState(); - _ctrl = AnimationController( - vsync: this, - duration: const Duration(seconds: 1), - )..forward(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: (){ - _ctrl.forward(from: 0); - }, - child: ColorStatusTransitionWidget( - anim: _ctrl, - ), - ); - } -} - -class ColorStatusTransitionWidget extends StatusTransitionWidget { - final Animation anim; - - const ColorStatusTransitionWidget({Key? key,required this.anim}) - : super(key: key, animation: anim); - - @override - Widget build(BuildContext context) { - Color color = Colors.blue; - switch (animation.status) { - case AnimationStatus.dismissed: - color = Colors.black; - break; - case AnimationStatus.forward: - color = Colors.blue; - break; - case AnimationStatus.reverse: - color = Colors.red; - break; - case AnimationStatus.completed: - color = Colors.green; - break; - } - - return Container( - alignment: Alignment.center, - width: 80, - height: 80, - decoration: BoxDecoration(color: color, shape: BoxShape.circle), - child: Text('${animation.status}'.split('.')[1],style: const TextStyle(color: Colors.white),), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_de_DE.json deleted file mode 100644 index 78dd51b74..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "Schrittkomponente", - "info": "Schrittkomponente, die schrittweise Operationen festlegen kann, kann den Inhalt der Schritte, die Bestätigungs- und Rückgängig-Buttons sowie die Ausrichtung der Schritte anpassen.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Stepper", - "desc": [ - "【steps】 : Schrittliste 【List】", - "【currentStep】 : Aktueller Schritt 【double】", - "【onStepTapped】 : Klick-Rückruf 【ValueChanged】", - "【onStepCancel】 : Rückgängig-Rückruf 【VoidCallback】", - "【controlsBuilder】 : Controller-Konstruktion 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Ausrichtung des Steppers", - "desc": [ - "【type】 : Ausrichtung 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_en_US.json deleted file mode 100644 index a769d9019..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "Step Component", - "info": "Step component, which can specify step-by-step operations, customize the content of the steps, the buttons for confirmation and return, and the direction of the step arrangement.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Stepper", - "desc": [ - "【steps】: Step list 【List】", - "【currentStep】: Current step 【double】", - "【onStepTapped】: Click callback 【ValueChanged】", - "【onStepCancel】: Previous step callback 【VoidCallback】", - "【controlsBuilder】: Controller construction 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Direction of Stepper", - "desc": [ - "【type】: Direction 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_es_ES.json deleted file mode 100644 index 9e71ee58c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "Componente de pasos", - "info": "Componente de pasos, permite especificar operaciones paso a paso, se puede personalizar el contenido de los pasos, los botones de confirmación y retroceso, así como la dirección de la secuencia de pasos.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Stepper", - "desc": [ - "【steps】 : Lista de pasos 【List】", - "【currentStep】 : Paso actual 【double】", - "【onStepTapped】 : Callback de clic 【ValueChanged】", - "【onStepCancel】 : Callback de retroceso 【VoidCallback】", - "【controlsBuilder】 : Constructor del controlador 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Dirección de Stepper", - "desc": [ - "【type】 : Dirección 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_fr_FR.json deleted file mode 100644 index 88f480104..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "Composant d'étapes", - "info": "Composant d'étapes, permet de spécifier des opérations étape par étape, peut personnaliser le contenu des étapes, les boutons de confirmation et de retour ainsi que la direction de l'arrangement des étapes.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Stepper", - "desc": [ - "【steps】 : Liste des étapes 【List】", - "【currentStep】 : Étape actuelle 【double】", - "【onStepTapped】 : Rappel de clic 【ValueChanged】", - "【onStepCancel】 : Rappel de l'étape précédente 【VoidCallback】", - "【controlsBuilder】 : Constructeur de contrôleur 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Direction de Stepper", - "desc": [ - "【type】 : Direction 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_it_IT.json deleted file mode 100644 index 064e5653f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "Componente Passaggi", - "info": "Componente passaggi, consente di specificare operazioni passo-passo, personalizzare il contenuto dei passaggi, i pulsanti di conferma e ritorno, e la direzione dell'ordinamento dei passaggi.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di Stepper", - "desc": [ - "【steps】 : Lista dei passaggi 【List】", - "【currentStep】 : Passaggio corrente 【double】", - "【onStepTapped】 : Callback al click 【ValueChanged】", - "【onStepCancel】 : Callback del passaggio precedente 【VoidCallback】", - "【controlsBuilder】 : Costruttore del controller 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Direzione di Stepper", - "desc": [ - "【type】 : Direzione 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ja_JP.json deleted file mode 100644 index 9e7687943..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "ステップコンポーネント", - "info": "ステップコンポーネントは、ステップごとの操作を指定でき、ステップの内容、確認と戻るボタン、およびステップの並び方向をカスタマイズできます。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Stepperの基本使用", - "desc": [ - "【steps】 : ステップリスト 【List】", - "【currentStep】 : 現在のステップ 【double】", - "【onStepTapped】 : クリックコールバック 【ValueChanged】", - "【onStepCancel】 : 前のステップコールバック 【VoidCallback】", - "【controlsBuilder】 : コントローラー構築 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Stepperの方向", - "desc": [ - "【type】 : 方向 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ko_KR.json deleted file mode 100644 index ea94ac5bb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "스텝 컴포넌트", - "info": "스텝 컴포넌트는 단계별 작업을 지정할 수 있으며, 스텝의 내용, 확인 및 뒤로 가기 버튼, 스텝 배열 방향을 사용자 정의할 수 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Stepper 기본 사용", - "desc": [ - "【steps】 : 스텝 리스트 【List】", - "【currentStep】 : 현재 스텝 【double】", - "【onStepTapped】 : 클릭 콜백 【ValueChanged】", - "【onStepCancel】 : 이전 스텝 콜백 【VoidCallback】", - "【controlsBuilder】 : 컨트롤러 생성 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Stepper의 방향", - "desc": [ - "【type】 : 방향 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_pt_PT.json deleted file mode 100644 index 9b918a77c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "Componente de Passos", - "info": "Componente de passos, que permite especificar operações passo a passo, pode personalizar o conteúdo dos passos, os botões de confirmação e retorno, bem como a direção do arranjo dos passos.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Stepper", - "desc": [ - "【steps】 : Lista de passos 【List】", - "【currentStep】 : Passo atual 【double】", - "【onStepTapped】 : Callback de clique 【ValueChanged】", - "【onStepCancel】 : Callback de passo anterior 【VoidCallback】", - "【controlsBuilder】 : Construtor de controlador 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Direção do Stepper", - "desc": [ - "【type】 : Direção 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ru_RU.json deleted file mode 100644 index ec410f0c1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "Компонент шагов", - "info": "Компонент шагов, который позволяет указать шаги выполнения операций, можно настроить содержимое шагов, кнопки подтверждения и возврата, а также направление расположения шагов.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Stepper", - "desc": [ - "【steps】 : Список шагов 【List】", - "【currentStep】 : Текущий шаг 【double】", - "【onStepTapped】 : Обратный вызов при нажатии 【ValueChanged】", - "【onStepCancel】 : Обратный вызов для предыдущего шага 【VoidCallback】", - "【controlsBuilder】 : Конструктор контроллера 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Направление Stepper", - "desc": [ - "【type】 : Направление 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_zh-CN.json deleted file mode 100644 index 23576b382..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 200, - "name": "Stepper", - "localName": "步骤组件", - "info": "步骤组件,可指定一步步的操作,可以自定义步骤的内容,确认和返回的按钮以及步骤排列的方向。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Stepper基本使用", - "desc": [ - "【steps】 : 步骤列表 【List】", - "【currentStep】 : 当前步骤 【double】", - "【onStepTapped】 : 点击回调 【ValueChanged】", - "【onStepCancel】 : 上一步回调 【VoidCallback】", - "【controlsBuilder】 : 控制器构造 【ControlsWidgetBuilder】" - ] - }, - { - "file": "node2_type.dart", - "name": "Stepper的方向", - "desc": [ - "【type】 : 方向 【StepperType】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/node1_base.dart deleted file mode 100644 index 6b2b2cfd1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/node1_base.dart +++ /dev/null @@ -1,104 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class StepperDemo extends StatefulWidget { - const StepperDemo({Key? key}) : super(key: key); - - @override - _StepperDemoState createState() => _StepperDemoState(); -} - -class _StepperDemoState extends State { - int _position = 0; - - final Map stepsData = { - "填写表单": '请按表单填写个人信息。', - "邮箱校验": '已将邮件发送至您的邮箱,请按照相关指示对您的账号进行邮箱校验。', - "注册完成": '恭喜您,注册完成!', - }; - - final List steps = const [ - Step( - title: Text("填写表单"), - content: SizedBox(height: 60, child: Text("请按表单填写个人信息")), - ), - Step(title: Text("邮箱校验"), content: Text("请对您的账号进行邮箱校验")), - Step(title: Text("注册完成"), content: Text("恭喜您,注册完成")), - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Stepper( - type: StepperType.horizontal, - currentStep: _position, - onStepTapped: (index) { - setState(() { - _position = index; - }); - }, - onStepContinue: () { - setState(() { - if (_position < 2) { - _position++; - } - }); - }, - onStepCancel: () { - if (_position > 0) { - setState(() { - _position--; - }); - } - }, - controlsBuilder: (_, ControlsDetails details) { - return Row( - children: [ - ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.blue, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - )), - onPressed: details.onStepContinue, - child: const Icon( - Icons.check, - color: Colors.white, - ), - ), - ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.red, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - )), - onPressed: details.onStepCancel, - child: const Icon( - Icons.keyboard_backspace, - color: Colors.white, - ), - ), - ], - ); - }, - steps: stepsData.keys.map((e){ - bool isActive = stepsData.keys.toList().indexOf(e) ==_position; - return Step( - title: Text(e,style: TextStyle(color: isActive?Colors.blue:Colors.black),), - isActive: isActive, - state: _getState(stepsData.keys.toList().indexOf(e)), - content: SizedBox(height: 60, child: Text(stepsData[e]!)), - ); - }).toList()), - ); - } - - StepState _getState(index){ - if(_position==index) return StepState.editing; - if(_position>index) return StepState.complete; - return StepState.indexed; - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/node2_type.dart b/modules/widget_system/widgets/lib/StatefulWidget/Stepper/node2_type.dart deleted file mode 100644 index 0b42e6238..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Stepper/node2_type.dart +++ /dev/null @@ -1,104 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class VerticalStepper extends StatefulWidget { - const VerticalStepper({Key? key}) : super(key: key); - - @override - _VerticalStepperState createState() => _VerticalStepperState(); -} - -class _VerticalStepperState extends State { - int _position = 0; - - final Map stepsData = { - "填写表单": '请按表单填写个人信息。', - "邮箱校验": '已将邮件发送至您的邮箱,请按照相关指示对您的账号进行邮箱校验。', - "注册完成": '恭喜您,注册完成!', - }; - - final List steps = const[ - Step( - title: Text("填写表单"), - content: SizedBox(height: 60, child: Text("请按表单填写个人信息")), - ), - Step(title: Text("邮箱校验"), content: Text("请对您的账号进行邮箱校验")), - Step(title: Text("注册完成"), content: Text("恭喜您,注册完成")), - ]; - - @override - Widget build(BuildContext context) { - return Stepper( - type: StepperType.vertical, - currentStep: _position, - onStepTapped: (index) { - setState(() { - _position = index; - }); - }, - onStepContinue: () { - setState(() { - if (_position < 2) { - _position++; - } - }); - }, - onStepCancel: () { - if (_position > 0) { - setState(() { - _position--; - }); - } - }, - controlsBuilder: (_,ControlsDetails details) { - return Row( - children: [ - ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.blue, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - )), - onPressed: details.onStepContinue, - child: const Icon( - Icons.check, - color: Colors.white, - ), - ), - ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.red, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - )), - onPressed: details.onStepCancel, - child: const Icon( - Icons.keyboard_backspace, - color: Colors.white, - ), - ), - ], - ); - }, - steps: stepsData.keys.map((e) { - bool isActive = stepsData.keys.toList().indexOf(e) == _position; - return Step( - title: Text( - e, - style: TextStyle(color: isActive ? Colors.blue : Colors.black), - ), - isActive: isActive, - state: _getState(stepsData.keys.toList().indexOf(e)), - content: SizedBox(height: 60, child: Text(stepsData[e]!)), - ); - }).toList()); - } - - StepState _getState(index) { - if (_position == index) return StepState.editing; - if (_position > index) return StepState.complete; - return StepState.indexed; - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_de_DE.json deleted file mode 100644 index b344ba789..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "Stream-Builder", - "info": "Kann ein Stream-Objekt angeben, kann den Status der asynchronen Ausführung überwachen und im Builder verschiedene Benutzeroberflächen basierend auf dem Status erstellen.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von StreamBuilder", - "desc": [ - "【stream】 : Unterkomponente 【Stream】", - "【initialData】 : Initiale Daten 【T】", - "【builder】 : Klickereignis 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_en_US.json deleted file mode 100644 index 7a9c86d23..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "Stream Builder", - "info": "Can specify a stream object, able to listen to the state of asynchronous execution, and build different interfaces in the constructor based on the state.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of StreamBuilder", - "desc": [ - "【stream】 : Child component 【Stream】", - "【initialData】 : Initial data 【T】", - "【builder】 : Click event 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_es_ES.json deleted file mode 100644 index 6720b0f5e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "Constructor de Flujo", - "info": "Puede especificar un objeto stream, capaz de escuchar el estado de ejecución asíncrona y construir diferentes interfaces en el constructor según el estado.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de StreamBuilder", - "desc": [ - "【stream】 : componente hijo 【Stream】", - "【initialData】 : datos iniciales 【T】", - "【builder】 : evento de clic 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_fr_FR.json deleted file mode 100644 index f61d970bc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "Constructeur de flux", - "info": "Peut spécifier un objet stream, capable de surveiller l'état d'exécution asynchrone et de construire différentes interfaces dans le constructeur en fonction de l'état.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de StreamBuilder", - "desc": [ - "【stream】 : composant enfant 【Stream】", - "【initialData】 : données initiales 【T】", - "【builder】 : événement de clic 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_it_IT.json deleted file mode 100644 index 3d550c1de..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "Costruttore di Flusso", - "info": "Può specificare un oggetto stream, in grado di monitorare lo stato dell'esecuzione asincrona e costruire diverse interfacce nel costruttore in base allo stato.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di StreamBuilder", - "desc": [ - "【stream】 : Componente figlio 【Stream】", - "【initialData】 : Dati iniziali 【T】", - "【builder】 : Evento di clic 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ja_JP.json deleted file mode 100644 index bc75ba75d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "ストリームビルダー", - "info": "ストリームオブジェクトを指定でき、非同期実行の状態を監視し、ビルダー内で状態に応じて異なるインターフェースを構築できます。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StreamBuilderの基本使用", - "desc": [ - "【stream】 : 子コンポーネント 【Stream】", - "【initialData】 : 初期データ 【T】", - "【builder】 : クリックイベント 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ko_KR.json deleted file mode 100644 index 9731100a4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "스트림 빌더", - "info": "스트림 객체를 지정할 수 있으며, 비동기 실행 상태를 감시하고, 빌더에서 상태에 따라 다른 인터페이스를 구성할 수 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StreamBuilder 기본 사용", - "desc": [ - "【stream】 : 자식 컴포넌트 【Stream】", - "【initialData】 : 초기 데이터 【T】", - "【builder】 : 클릭 이벤트 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_pt_PT.json deleted file mode 100644 index e56a75c6e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "Construtor de Fluxo", - "info": "Pode especificar um objeto stream, capaz de monitorar o estado da execução assíncrona e construir diferentes interfaces no construtor com base no estado.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do StreamBuilder", - "desc": [ - "【stream】 : Componente Filho 【Stream】", - "【initialData】 : Dados Iniciais 【T】", - "【builder】 : Evento de Clique 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ru_RU.json deleted file mode 100644 index 03020df17..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "Потоковый конструктор", - "info": "Можно указать объект stream, который может отслеживать состояние асинхронного выполнения и строить различные интерфейсы в конструкторе в зависимости от состояния.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование StreamBuilder", - "desc": [ - "【stream】 : Дочерний компонент 【Stream】", - "【initialData】 : Начальные данные 【T】", - "【builder】 : Событие клика 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_zh-CN.json deleted file mode 100644 index f6be1cc3d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 173, - "name": "StreamBuilder", - "localName": "流构造器", - "info": "可指定一个stream对象,能够监听异步执行的状态,并在构造器中根据状态构建不同的界面。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "StreamBuilder基本使用", - "desc": [ - "【stream】 : 子组件 【Stream】", - "【initialData】 : 初始数据 【T】", - "【builder】 : 点击事件 【AsyncWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/node1_base.dart deleted file mode 100644 index 2abad5656..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/StreamBuilder/node1_base.dart +++ /dev/null @@ -1,101 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomStreamBuilder extends StatefulWidget { - const CustomStreamBuilder({Key? key}) : super(key: key); - - @override - _CustomStreamBuilderState createState() => _CustomStreamBuilderState(); -} - -class _CustomStreamBuilderState extends State { - final CountGenerator _generator = CountGenerator()..increment(); - - @override - void dispose() { - _generator.dispose(); //关闭控制器 - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Row( - mainAxisSize: MainAxisSize.min, - children: [ - ElevatedButton( - style: ElevatedButton.styleFrom( - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - )), - child: const Icon( - Icons.add, - color: Colors.white, - ), - onPressed: () async { - await _generator.increment(); - }, - ), - _buildStreamBuilder(), - ElevatedButton( - style: ElevatedButton.styleFrom( - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - )), - child: const Icon( - Icons.remove, - color: Colors.white, - ), - onPressed: () async { - await _generator.minus(); - }, - ), - ], - ); - } - - Widget _buildStreamBuilder() => StreamBuilder( - stream: _generator.state, - builder: (BuildContext context, AsyncSnapshot snap) { - print(snap); - if (snap.connectionState == ConnectionState.done) { - return const Text('Done'); - } - if (snap.connectionState == ConnectionState.active) { - return Text( - snap.data.toString(), - style: Theme.of(context).textTheme.bodyMedium, - ); - } - if (snap.connectionState == ConnectionState.waiting) { - return const CircularProgressIndicator(); - } - if (snap.hasError) { - return const Text('Error'); - } - return Container(); - }); -} - -class CountGenerator { - int _count = 0; //计数器数据 - final StreamController _controller = StreamController(); //控制器 - - Stream get state => _controller.stream; //获取状态流 - int get count => _count; //获取计数器数据 - - void dispose() {//关闭控制器 - _controller.close(); - } - - Future increment() async {//增加记数方法 - _controller.add(++_count); - } - - Future minus() async {//增加记数方法 - _controller.add(--_count); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_de_DE.json deleted file mode 100644 index a11d67fa5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_de_DE.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "Schalter", - "info": "Umschaltknopf, häufig für Konfigurationswechsel verwendet, kann die Farbe des kleinen Kreises, Bilder, Farbe der Gleitschiene usw. angeben, empfängt Rückrufe bei Zustandsänderungen.", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Switch", - "desc": [ - "【inactiveThumbColor】 : Farbe des nicht ausgewählten kleinen Kreises 【Color】", - "【inactiveTrackColor】 : Farbe der nicht ausgewählten Gleitschiene 【Color】", - "【activeColor】 : Farbe des ausgewählten kleinen Kreises 【Color】", - "【activeTrackColor】 : Farbe der ausgewählten Gleitschiene 【Color】", - "【onChanged】 : Umschalt-Rückruf 【Function(double)】", - "Bei onChanged werden drei Zustände zurückgerufen: true, null, false" - ] - }, - { - "file": "node2_image.dart", - "name": "Switch Bild", - "desc": [ - "【inactiveThumbImage】 : Bild des nicht ausgewählten kleinen Kreises 【ImageProvider】", - "【activeThumbImage】 : Bild des ausgewählten kleinen Kreises 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_en_US.json deleted file mode 100644 index 224367a63..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_en_US.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "Toggle Button", - "info": "Toggle button, commonly used for configuration switching, can specify small circle color, image, track color, etc., and receives state change callbacks.", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Switch", - "desc": [ - "【inactiveThumbColor】 : Unselected small circle color 【Color】", - "【inactiveTrackColor】 : Unselected track color 【Color】", - "【activeColor】 : Selected small circle color 【Color】", - "【activeTrackColor】 : Selected track color 【Color】", - "【onChanged】 : Toggle callback 【Function(double)】", - "When onChanged, callbacks for true, null, and false states" - ] - }, - { - "file": "node2_image.dart", - "name": "Switch Image", - "desc": [ - "【inactiveThumbImage】 : Unselected small circle image 【ImageProvider】", - "【activeThumbImage】 : Selected small circle image 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_es_ES.json deleted file mode 100644 index f05a37f03..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_es_ES.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "Interruptor", - "info": "Interruptor de selección, comúnmente utilizado para cambiar configuraciones, puede especificar el color del círculo pequeño, la imagen, el color de la ranura, etc., y recibe una devolución de llamada para cambios de estado.", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Switch", - "desc": [ - "【inactiveThumbColor】 : Color del círculo pequeño no seleccionado 【Color】", - "【inactiveTrackColor】 : Color de la ranura no seleccionada 【Color】", - "【activeColor】 : Color del círculo pequeño seleccionado 【Color】", - "【activeTrackColor】 : Color de la ranura seleccionada 【Color】", - "【onChanged】 : Devolución de llamada de cambio 【Function(double)】", - " En onChanged, devuelve tres estados: true, null, false" - ] - }, - { - "file": "node2_image.dart", - "name": "Imagen de Switch", - "desc": [ - "【inactiveThumbImage】 : Imagen del círculo pequeño no seleccionado 【ImageProvider】", - "【activeThumbImage】 : Imagen del círculo pequeño seleccionado 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_fr_FR.json deleted file mode 100644 index dd1fa7bcf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_fr_FR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "Bouton de commutation", - "info": "Bouton de commutation, souvent utilisé pour changer les configurations, peut spécifier la couleur du petit cercle, l'image, la couleur de la glissière, etc., et reçoit un rappel de changement d'état.", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Switch", - "desc": [ - "【inactiveThumbColor】 : Couleur du petit cercle non sélectionné 【Color】", - "【inactiveTrackColor】 : Couleur de la glissière non sélectionnée 【Color】", - "【activeColor】 : Couleur du petit cercle sélectionné 【Color】", - "【activeTrackColor】 : Couleur de la glissière sélectionnée 【Color】", - "【onChanged】 : Rappel de commutation 【Function(double)】", - " Lors de onChanged, rappelle trois états : true, null, false" - ] - }, - { - "file": "node2_image.dart", - "name": "Image de Switch", - "desc": [ - "【inactiveThumbImage】 : Image du petit cercle non sélectionné 【ImageProvider】", - "【activeThumbImage】 : Image du petit cercle sélectionné 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_it_IT.json deleted file mode 100644 index 70dedac9a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_it_IT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "Interruttore", - "info": "Interruttore per la commutazione, spesso utilizzato per il cambio di configurazione, può specificare il colore del cerchio, l'immagine, il colore della scanalatura, ecc., riceve un callback per i cambiamenti di stato.", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Switch", - "desc": [ - "【inactiveThumbColor】 : Colore del cerchio non selezionato 【Color】", - "【inactiveTrackColor】 : Colore della scanalatura non selezionata 【Color】", - "【activeColor】 : Colore del cerchio selezionato 【Color】", - "【activeTrackColor】 : Colore della scanalatura selezionata 【Color】", - "【onChanged】 : Callback di commutazione 【Function(double)】\"", - " Durante onChanged, il callback restituisce tre stati: true, null, false" - ] - }, - { - "file": "node2_image.dart", - "name": "Immagine di Switch", - "desc": [ - "【inactiveThumbImage】 : Immagine del cerchio non selezionato 【ImageProvider】", - "【activeThumbImage】 : Immagine del cerchio selezionato 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ja_JP.json deleted file mode 100644 index 0955a1a6e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ja_JP.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "スイッチ", - "info": "トグルボタンを切り替えます。設定の切り替えによく使用され、小さな円の色や画像、スライドトラックの色などを指定できます。状態変化のコールバックを受け取ります。", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Switchの基本的な使い方", - "desc": [ - "【inactiveThumbColor】 : 未選択時の小さな円の色 【Color】", - "【inactiveTrackColor】 : 未選択時のスライドトラックの色 【Color】", - "【activeColor】 : 選択時の小さな円の色 【Color】", - "【activeTrackColor】 : 選択時のスライドトラックの色 【Color】", - "【onChanged】 : 切り替えコールバック 【Function(double)】", - " onChanged時、true、null、falseの3つの状態をコールバックします" - ] - }, - { - "file": "node2_image.dart", - "name": "Switchの画像", - "desc": [ - "【inactiveThumbImage】 : 未選択時の小さな円の画像 【ImageProvider】", - "【activeThumbImage】 : 選択時の小さな円の画像 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ko_KR.json deleted file mode 100644 index ebaf48ab6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ko_KR.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "스위치", - "info": "선택 버튼 전환, 주로 설정 전환에 사용되며, 작은 원의 색상, 이미지, 슬롯 색상 등을 지정할 수 있으며, 상태 변화 콜백을 받습니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Switch 기본 사용법", - "desc": [ - "【inactiveThumbColor】 : 선택되지 않은 작은 원 색상 【Color】", - "【inactiveTrackColor】 : 선택되지 않은 슬롯 색상 【Color】", - "【activeColor】 : 선택된 작은 원 색상 【Color】", - "【activeTrackColor】 : 선택된 슬롯 색상 【Color】", - "【onChanged】 : 전환 콜백 【Function(double)】\"", - " onChanged 시, true, null, false 세 가지 상태를 콜백합니다." - ] - }, - { - "file": "node2_image.dart", - "name": "Switch 이미지", - "desc": [ - "【inactiveThumbImage】 : 선택되지 않은 작은 원 이미지 【ImageProvider】", - "【activeThumbImage】 : 선택된 작은 원 이미지 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_pt_PT.json deleted file mode 100644 index 922b3f170..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_pt_PT.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "Botão de Alternar", - "info": "Botão de alternar, frequentemente usado para alternar configurações, pode especificar a cor do círculo pequeno, imagem, cor da faixa deslizante, etc., e recebe uma chamada de retorno para mudanças de estado.", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Switch", - "desc": [ - "【inactiveThumbColor】 : Cor do círculo pequeno quando não selecionado 【Color】", - "【inactiveTrackColor】 : Cor da faixa deslizante quando não selecionada 【Color】", - "【activeColor】 : Cor do círculo pequeno quando selecionado 【Color】", - "【activeTrackColor】 : Cor da faixa deslizante quando selecionada 【Color】", - "【onChanged】 : Chamada de retorno para alternar 【Function(double)】\"", - " Quando onChanged, retorna três estados: true, null, false" - ] - }, - { - "file": "node2_image.dart", - "name": "Imagem do Switch", - "desc": [ - "【inactiveThumbImage】 : Imagem do círculo pequeno quando não selecionado 【ImageProvider】", - "【activeThumbImage】 : Imagem do círculo pequeno quando selecionado 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ru_RU.json deleted file mode 100644 index b4c01d161..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_ru_RU.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "Переключатель", - "info": "Переключатель, часто используется для изменения настроек, можно указать цвет маленького круга, изображение, цвет дорожки и т.д., принимает обратный вызов при изменении состояния.", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Базовое использование Switch", - "desc": [ - "【inactiveThumbColor】 : Цвет маленького круга в неактивном состоянии 【Color】", - "【inactiveTrackColor】 : Цвет дорожки в неактивном состоянии 【Color】", - "【activeColor】 : Цвет маленького круга в активном состоянии 【Color】", - "【activeTrackColor】 : Цвет дорожки в активном состоянии 【Color】", - "【onChanged】 : Обратный вызов при переключении 【Function(double)】", - " При onChanged, обратный вызов возвращает три состояния: true, null, false" - ] - }, - { - "file": "node2_image.dart", - "name": "Изображение Switch", - "desc": [ - "【inactiveThumbImage】 : Изображение маленького круга в неактивном состоянии 【ImageProvider】", - "【activeThumbImage】 : Изображение маленького круга в активном состоянии 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_zh-CN.json deleted file mode 100644 index c034cac0c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/desc_zh-CN.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "id": 40, - "name": "Switch", - "localName": "切钮", - "info": "切换选钮,常用于配置的切换,可指定小圆颜色、图片,滑槽颜色等,接收状态变化回调。", - "lever": 4, - "family": 1, - "linkIds": [ - 41, - 18 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Switch基础用法", - "desc": [ - "【inactiveThumbColor】 : 未选中小圈颜色 【Color】", - "【inactiveTrackColor】 : 未选中滑槽颜色 【Color】", - "【activeColor】 : 选中时小圈颜色 【Color】", - "【activeTrackColor】 : 选中时滑槽颜色 【Color】", - "【onChanged】 : 切换回调 【Function(double)】\"", - " onChanged时,回调true、null、false三种状态" - ] - }, - { - "file": "node2_image.dart", - "name": "Switch图片", - "desc": [ - "【inactiveThumbImage】 : 未选中小圈图片 【ImageProvider】", - "【activeThumbImage】 : 选中小圈图片 【ImageProvider】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Switch/node1_base.dart deleted file mode 100644 index 7ba534a7d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/node1_base.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-14 -/// contact me by email 1981462002@qq.com - -class CustomSwitch extends StatefulWidget { - const CustomSwitch({Key? key}) : super(key: key); - - @override - _CustomSwitchState createState() => _CustomSwitchState(); -} - -class _CustomSwitchState extends State { - final List colors = const[ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - bool _checked = false; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: colors - .map((e) => Switch( - value: _checked, - inactiveThumbColor: e, - inactiveTrackColor: Colors.grey.withAlpha(88), - activeColor: Colors.green, - activeTrackColor: Colors.orange, - onChanged: (v) { - setState(() => _checked = v); - })) - .toList(), - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Switch/node2_image.dart b/modules/widget_system/widgets/lib/StatefulWidget/Switch/node2_image.dart deleted file mode 100644 index 5487e25fe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Switch/node2_image.dart +++ /dev/null @@ -1,39 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-14 -/// contact me by email 1981462002@qq.com - -class ImageSwitch extends StatefulWidget { - const ImageSwitch({Key? key}) : super(key: key); - - @override - _ImageSwitchState createState() => _ImageSwitchState(); -} - -class _ImageSwitchState extends State { - final List imgs = const [ - "assets/images/head_icon/icon_5.webp", - "assets/images/head_icon/icon_6.webp", - "assets/images/head_icon/icon_7.webp", - "assets/images/head_icon/icon_8.webp" - ]; - bool _checked = false; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: imgs - .map((e) => - Switch( - value: _checked, - inactiveThumbImage: AssetImage(e), - activeThumbImage: const AssetImage('assets/images/icon_head.webp'), - onChanged: (v) { - setState(() => _checked = v); - })) - .toList(), - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_de_DE.json deleted file mode 100644 index d3a0a2e48..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "Tab", - "info": "Wird normalerweise mit TabBar verwendet, um den Slide-Effekt zu erzielen. Wird normalerweise nicht allein verwendet.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView muss mit TabBar verwendet werden", - "desc": [ - "【controller】 : Controller 【TabController】", - "【children】 : Kinder 【Indikatorfarbe】", - "【physics】 : Verhalten 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_en_US.json deleted file mode 100644 index 3d8755bf0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "Tab Page", - "info": "Usually used in conjunction with TabBar to achieve the effect of sliding pages. It is generally not used alone.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView needs to be used in conjunction with TabBar", - "desc": [ - "【controller】 : Controller 【TabController】", - "【children】 : Children 【Indicator Color】", - "【physics】 : Behavior 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_es_ES.json deleted file mode 100644 index 4038a99d9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "Pestañas", - "info": "Normalmente se usa junto con TabBar para lograr un efecto de deslizamiento de páginas. Generalmente no se usa por separado.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView debe usarse junto con TabBar", - "desc": [ - "【controller】 : Controlador 【TabController】", - "【children】 : Hijos 【Color del indicador】", - "【physics】 : Comportamiento 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_fr_FR.json deleted file mode 100644 index 5749b4580..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "Onglets", - "info": "Généralement utilisé avec TabBar pour réaliser un effet de glissement de pages. Il n'est généralement pas utilisé seul.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView doit être utilisé avec TabBar", - "desc": [ - "【controller】 : Contrôleur 【TabController】", - "【children】 : Enfants 【Couleur de l'indicateur】", - "【physics】 : Comportement 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_it_IT.json deleted file mode 100644 index d9855ddbe..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "Schede", - "info": "Generalmente utilizzato insieme a TabBar per ottenere un effetto di scorrimento delle pagine. Di solito non viene utilizzato da solo.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView deve essere utilizzato insieme a TabBar", - "desc": [ - "【controller】 : Controller 【TabController】", - "【children】 : Figli 【Colore dell'indicatore】", - "【physics】 : Comportamento 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ja_JP.json deleted file mode 100644 index 747d2d1ee..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "タブビュー", - "info": "通常はTabBarと一緒に使用し、スライドページの効果を実現します。通常は単独で使用しません。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarViewはTabBarと一緒に使用する必要があります", - "desc": [ - "【controller】 : コントローラー 【TabController】", - "【children】 : 子供たち 【インジケーターカラー】", - "【physics】 : パフォーマンス 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ko_KR.json deleted file mode 100644 index 1202916c6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "탭 뷰", - "info": "일반적으로 TabBar와 함께 사용되어 페이지 슬라이딩 효과를 구현합니다. 일반적으로 단독으로 사용되지 않습니다.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView는 TabBar와 함께 사용해야 합니다", - "desc": [ - "【controller】 : 컨트롤러 【TabController】", - "【children】 : 자식들 【인디케이터 색상】", - "【physics】 : 동작 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_pt_PT.json deleted file mode 100644 index 53848ce7c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "Separador de Páginas", - "info": "Geralmente usado em conjunto com o TabBar para alcançar o efeito de deslizar páginas. Normalmente não é usado sozinho.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView precisa ser usado em conjunto com o TabBar", - "desc": [ - "【controller】 : Controlador 【TabController】", - "【children】 : Crianças 【Cor do indicador】", - "【physics】 : Comportamento 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ru_RU.json deleted file mode 100644 index 542c10f83..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "Вкладки", - "info": "Обычно используется вместе с TabBar для реализации эффекта скольжения страниц. Обычно не используется отдельно.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView должен использоваться вместе с TabBar", - "desc": [ - "【controller】 : Контроллер 【TabController】", - "【children】 : Дети 【Цвет индикатора】", - "【physics】 : Поведение 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_zh-CN.json deleted file mode 100644 index 8e7388e92..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 59, - "name": "TabBarView", - "localName": "标签页", - "info": "通常与TabBar联用,实现滑页的效果。一般不单独使用。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarView需要与TabBar联用", - "desc": [ - "【controller】 : 控制器 【TabController】", - "【children】 : 孩子们 【指示器颜色】", - "【physics】 : 表现 【ScrollPhysics】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/node1_base.dart deleted file mode 100644 index 9e5a3e7c8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TabBarView/node1_base.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomTabBarView extends StatefulWidget { - const CustomTabBarView({Key? key}) : super(key: key); - - @override - _CustomTabBarViewState createState() => _CustomTabBarViewState(); -} - -class _CustomTabBarViewState extends State with SingleTickerProviderStateMixin { - final List tabs = const [ - '风画庭', - '雨韵舍', - '雷鸣殿', - '电疾堂', - '霜寒阁', - '雪月楼', - ]; - late TabController _tabController; - - @override - void initState() { - super.initState(); - _tabController = TabController(vsync: this, length: tabs.length); - } - - @override - void dispose() { - _tabController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildTabBar(), - Container( - color: Colors.purple, - width: MediaQuery.of(context).size.width, - height: 200, - child: _buildTableBarView()) - ], - ); - } - - Widget _buildTabBar() => TabBar( - onTap: (tab) => print(tab), - labelStyle: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold), - unselectedLabelStyle: const TextStyle(fontSize: 16), - isScrollable: true, - controller: _tabController, - labelColor: Colors.blue, - indicatorWeight: 3, - indicatorPadding: const EdgeInsets.symmetric(horizontal: 10), - unselectedLabelColor: Colors.grey, - indicatorColor: Colors.orangeAccent, - tabs: tabs.map((e) => Tab(text: e)).toList(), - ); - - Widget _buildTableBarView() => TabBarView( - controller: _tabController, - children: tabs.map((e) => Center( - child: Text( - e, - style: const TextStyle( - color: Colors.white, - fontSize: 20, - ), - ))).toList()); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_de_DE.json deleted file mode 100644 index 7391d0cc0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "Tabellen-Wasserwellen", - "info": "Kann nur für Tabellen-Wasserwellen verwendet werden, empfängt Klick-, Doppelklick-, Langklick- und Hervorhebungsänderungsereignisse. Die Wasserwellen wirken auf eine Tabellenzeile.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TableRowInkWell grundlegende Ereignisse", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onTap】 : Klickereignis 【Function()】", - "【onDoubleTap】 : Doppelklickereignis 【Function()】", - "【onLongPress】 : Langklickereignis 【Function()】", - "【onHighlightChanged】 : Hervorhebungsänderungsrückruf 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_en_US.json deleted file mode 100644 index e2d8c29c4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "Table Ripple", - "info": "Can only be used for Table's ripple, receives click, double-click, long-press, and highlight change events, the ripple will be applied to a row of the table.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TableRowInkWell Basic Events", - "desc": [ - "【child】 : Child component 【Widget】", - "【onTap】 : Click event 【Function()】", - "【onDoubleTap】 : Double-click event 【Function()】", - "【onLongPress】 : Long-press event 【Function()】", - "【onHighlightChanged】 : Highlight change callback 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_es_ES.json deleted file mode 100644 index cbdd77c48..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "Onda de tabla", - "info": "Solo se puede usar para la onda de la tabla, recibe eventos de clic, doble clic, pulsación larga y cambios de resaltado, la onda actuará en una fila de la tabla.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos básicos de TableRowInkWell", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onTap】 : Evento de clic 【Function()】", - "【onDoubleTap】 : Evento de doble clic 【Function()】", - "【onLongPress】 : Evento de pulsación larga 【Function()】", - "【onHighlightChanged】 : Callback de cambio de resaltado 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_fr_FR.json deleted file mode 100644 index 184c25082..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "Ondulation de Tableau", - "info": "Utilisé uniquement pour les ondulations dans un Tableau, reçoit les événements de clic, double-clic, appui long et changement de surbrillance, l'ondulation s'applique à une ligne du tableau.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événements de base de TableRowInkWell", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onTap】 : Événement de clic 【Function()】", - "【onDoubleTap】 : Événement de double-clic 【Function()】", - "【onLongPress】 : Événement d'appui long 【Function()】", - "【onHighlightChanged】 : Rappel de changement de surbrillance 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_it_IT.json deleted file mode 100644 index 63bc0fdac..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "Effetto Riga Tabella", - "info": "Può essere utilizzato solo per l'effetto ondulato nelle tabelle, riceve eventi di clic, doppio clic, pressione prolungata e cambiamenti di evidenziazione, l'effetto ondulato agirà su una riga della tabella.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventi Base di TableRowInkWell", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onTap】 : Evento di clic 【Function()】", - "【onDoubleTap】 : Evento di doppio clic 【Function()】", - "【onLongPress】 : Evento di pressione prolungata 【Function()】", - "【onHighlightChanged】 : Callback di cambiamento di evidenziazione 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ja_JP.json deleted file mode 100644 index 0c36282fd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "テーブル波紋", - "info": "Table専用の波紋で、クリック、ダブルクリック、長押し、ハイライト変更イベントを受け取り、波紋はテーブルの一行に作用します。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TableRowInkWell基本イベント", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onTap】 : クリックイベント 【Function()】", - "【onDoubleTap】 : ダブルクリックイベント 【Function()】", - "【onLongPress】 : 長押しイベント 【Function()】", - "【onHighlightChanged】 : ハイライト変更コールバック 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ko_KR.json deleted file mode 100644 index 236a4c40c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "테이블 물결 효과", - "info": "Table에서만 사용 가능한 물결 효과로, 클릭, 더블 클릭, 롱 프레스, 하이라이트 변경 이벤트를 받습니다. 물결 효과는 테이블의 한 행에 적용됩니다.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TableRowInkWell 기본 이벤트", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【onTap】 : 클릭 이벤트 【Function()】", - "【onDoubleTap】 : 더블 클릭 이벤트 【Function()】", - "【onLongPress】 : 롱 프레스 이벤트 【Function()】", - "【onHighlightChanged】 : 하이라이트 변경 콜백 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_pt_PT.json deleted file mode 100644 index d107384fa..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "Onda de tinta da tabela", - "info": "Só pode ser usado para a onda de tinta da tabela, recebe eventos de clique, duplo clique, pressão longa e mudança de destaque, a onda de tinta será aplicada a uma linha da tabela.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos básicos do TableRowInkWell", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onTap】 : Evento de clique 【Function()】", - "【onDoubleTap】 : Evento de duplo clique 【Function()】", - "【onLongPress】 : Evento de pressão longa 【Function()】", - "【onHighlightChanged】 : Callback de mudança de destaque 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ru_RU.json deleted file mode 100644 index 0cd39d75d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "Табличная волна", - "info": "Может использоваться только для волны в таблице, принимает события нажатия, двойного нажатия, длительного нажатия и изменения подсветки, волна будет применяться к строке таблицы.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основные события TableRowInkWell", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onTap】 : Событие нажатия 【Function()】", - "【onDoubleTap】 : Событие двойного нажатия 【Function()】", - "【onLongPress】 : Событие длительного нажатия 【Function()】", - "【onHighlightChanged】 : Обратный вызов изменения подсветки 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_zh-CN.json deleted file mode 100644 index 47f41a158..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 151, - "name": "TableRowInkWell", - "localName": "表格水波纹", - "info": "只能用于Table的水波纹,接收点击、双击、长按、高亮变化事件,水波纹会作用于表格的一行。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TableRowInkWell基本事件", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onTap】 : 点击事件 【Function()】", - "【onDoubleTap】 : 双击事件 【Function()】", - "【onLongPress】 : 长按事件 【Function()】", - "【onHighlightChanged】 : 高亮变化回调 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/node1_base.dart deleted file mode 100644 index ef2758b67..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TableRowInkWell/node1_base.dart +++ /dev/null @@ -1,80 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class CustomTableRowInkWell extends StatelessWidget { - const CustomTableRowInkWell({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - _ItemBean title = _ItemBean("单位称", "量纲", "单位", "单位名称", "单位符号"); - _ItemBean m = _ItemBean("长度", "L", "1m", "米", "m"); - _ItemBean kg = _ItemBean("质量", "M", "1Kg", "千克", "Kg"); - _ItemBean s = _ItemBean("时间", "T", "1s", "秒", "s"); - _ItemBean a = _ItemBean("安培", "Ι", "1A", "安培", "A"); - _ItemBean k = _ItemBean("热力学温度", "θ", "1K", "开尔文", "K"); - _ItemBean mol = _ItemBean("物质的量", "N", "1mol", "摩尔", "mol"); - _ItemBean cd = _ItemBean("发光强度", "J", "1cd", "坎德拉", "cd"); - - List<_ItemBean> data = [title, m, kg, s, a, k, mol, cd]; - - return SingleChildScrollView( - scrollDirection: Axis.horizontal, - child: Table( - columnWidths: const { - 0: FixedColumnWidth(80.0), - 1: FixedColumnWidth(80.0), - 2: FixedColumnWidth(80.0), - 3: FixedColumnWidth(80.0), - 4: FixedColumnWidth(80.0), - }, - defaultVerticalAlignment: TableCellVerticalAlignment.middle, - border: TableBorder.all( - color: Colors.orangeAccent, width: 1.0, style: BorderStyle.solid), - children: data - .map((item) => TableRow(children: [ - TableRowInkWell( - onTap: () => print('onTap'), - onDoubleTap: () => print('onDoubleTap'), - onLongPress: () => print('onLongPress'), - onHighlightChanged: (v) => print('onHighlightChanged:$v'), - child: Center( - child: Text( - item.name, - style: const TextStyle(color: Colors.blue), - )), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Center(child: Text(item.symbol)), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Center(child: Text(item.unitSymbol)), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Center(child: Text(item.unitName)), - ), - Padding( - padding: const EdgeInsets.all(8.0), - child: Center(child: Text(item.unit)), - ), - ])) - .toList(), - ), - ); - } -} - -class _ItemBean { - String name; - String symbol; - String unit; - String unitName; - String unitSymbol; - - _ItemBean(this.name, this.symbol, this.unit, this.unitName, this.unitSymbol); -} - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_de_DE.json deleted file mode 100644 index b7714bb06..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_de_DE.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "Textschaltfläche", - "info": "Materialstil-Textschaltfläche, standardmäßig nur mit Text, bei Klick mit Wasserwelleneffekt. Eigenschaften wie Rahmen, Farbe, Schatten können durch Stile geändert werden.", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von TextButton", - "desc": [ - "【child】 : Hat es ein scrollbares Hauptelement 【Widget】", - "【onPressed】 : Klickereignis 【VoidCallback】", - "【onLongPress】 : Langklickereignis 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "TextButton-Stil", - "desc": [ - "【style】 : Schaltflächenstil 【ButtonStyle】", - "【focusNode】 : Fokus 【FocusNode】", - "【clipBehavior】 : Beschneidungsverhalten 【Clip】", - "【autofocus】 : Autofokus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_en_US.json deleted file mode 100644 index 779529c74..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_en_US.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "Text Button", - "info": "A Material-style text button, which only has text by default, and has a ripple effect when clicked. The border, color, shadow and other properties can be changed through styles.", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of TextButton", - "desc": [ - "【child】 : Whether it has a scrollable body 【Widget】", - "【onPressed】 : Click event 【VoidCallback】", - "【onLongPress】 : Long press event 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "TextButton Style", - "desc": [ - "【style】 : Button style 【ButtonStyle】", - "【focusNode】 : Focus 【FocusNode】", - "【clipBehavior】 : Clip behavior 【Clip】", - "【autofocus】 : Auto focus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_es_ES.json deleted file mode 100644 index b78784bb0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_es_ES.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "Botón de texto", - "info": "Botón de texto con estilo Material, por defecto solo tiene texto y tiene un efecto de onda al hacer clic. Se pueden cambiar propiedades como el borde, el color, la sombra, etc., a través del estilo.", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de TextButton", - "desc": [ - "【child】 : ¿Tiene un cuerpo de desplazamiento? 【Widget】", - "【onPressed】 : Evento de clic 【VoidCallback】", - "【onLongPress】 : Evento de pulsación larga 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Estilo de TextButton", - "desc": [ - "【style】 : Estilo del botón 【ButtonStyle】", - "【focusNode】 : Foco 【FocusNode】", - "【clipBehavior】 : Comportamiento de recorte 【Clip】", - "【autofocus】 : Enfoque automático 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_fr_FR.json deleted file mode 100644 index 7d96e6a73..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_fr_FR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "Bouton texte", - "info": "Bouton texte de style Material, par défaut uniquement du texte, avec un effet de vague lors du clic. Les propriétés telles que la bordure, la couleur, l'ombre, etc., peuvent être modifiées via le style.", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de TextButton", - "desc": [ - "【child】 : Si le corps peut défiler 【Widget】", - "【onPressed】 : Événement de clic 【VoidCallback】", - "【onLongPress】 : Événement de maintien 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Style de TextButton", - "desc": [ - "【style】 : Style du bouton 【ButtonStyle】", - "【focusNode】 : Focus 【FocusNode】", - "【clipBehavior】 : Comportement de découpage 【Clip】", - "【autofocus】 : Mise au point automatique 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_it_IT.json deleted file mode 100644 index 241b16dd7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_it_IT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "Pulsante di testo", - "info": "Pulsante di testo in stile Material, di default ha solo testo e un effetto onda al clic. È possibile modificare bordi, colori, ombre e altre proprietà attraverso lo stile.", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di TextButton", - "desc": [ - "【child】 : Se ha un corpo scorrevole 【Widget】", - "【onPressed】 : Evento di clic 【VoidCallback】", - "【onLongPress】 : Evento di pressione prolungata 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Stile di TextButton", - "desc": [ - "【style】 : Stile del pulsante 【ButtonStyle】", - "【focusNode】 : Fuoco 【FocusNode】", - "【clipBehavior】 : Comportamento di ritaglio 【Clip】", - "【autofocus】 : Autofocus 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ja_JP.json deleted file mode 100644 index 70633f0db..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ja_JP.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "テキストボタン", - "info": "Materialスタイルのテキストボタンで、デフォルトではテキストのみが表示され、クリック時に波紋効果があります。スタイルを変更することで、枠線、色、影などのプロパティを変更できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextButtonの基本的な使用", - "desc": [ - "【child】 : スクロール主体を持つかどうか 【Widget】", - "【onPressed】 : クリックイベント 【VoidCallback】", - "【onLongPress】 : 長押しイベント 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "TextButtonのスタイル", - "desc": [ - "【style】 : ボタンのスタイル 【ButtonStyle】", - "【focusNode】 : フォーカス 【FocusNode】", - "【clipBehavior】 : クリップ動作 【Clip】", - "【autofocus】 : 自動フォーカス 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ko_KR.json deleted file mode 100644 index ccb144974..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ko_KR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "텍스트 버튼", - "info": "Material 스타일의 텍스트 버튼으로, 기본적으로 텍스트만 있으며 클릭 시 물결 효과가 있습니다. 스타일을 통해 테두리, 색상, 그림자 등의 속성을 변경할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextButton 기본 사용법", - "desc": [ - "【child】 : 스크롤 가능한 주체 여부 【Widget】", - "【onPressed】 : 클릭 이벤트 【VoidCallback】", - "【onLongPress】 : 길게 누르기 이벤트 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "TextButton 스타일", - "desc": [ - "【style】 : 버튼 스타일 【ButtonStyle】", - "【focusNode】 : 포커스 【FocusNode】", - "【clipBehavior】 : 클리핑 동작 【Clip】", - "【autofocus】 : 자동 포커스 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_pt_PT.json deleted file mode 100644 index 17a48bce5..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_pt_PT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "Botão de texto", - "info": "Botão de texto no estilo Material, por padrão só tem texto, com efeito de ondulação ao clicar. Pode alterar propriedades como borda, cor, sombra, etc., através de estilos.", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do TextButton", - "desc": [ - "【child】 : Se tem um corpo de rolagem 【Widget】", - "【onPressed】 : Evento de clique 【VoidCallback】", - "【onLongPress】 : Evento de pressionar longo 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Estilo do TextButton", - "desc": [ - "【style】 : Estilo do botão 【ButtonStyle】", - "【focusNode】 : Foco 【FocusNode】", - "【clipBehavior】 : Comportamento de corte 【Clip】", - "【autofocus】 : Foco automático 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ru_RU.json deleted file mode 100644 index b2ae2d6ab..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_ru_RU.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "Текстовая кнопка", - "info": "Текстовая кнопка в стиле Material, по умолчанию имеет только текст, при нажатии появляется эффект волны. Можно изменить свойства границы, цвета, тени и другие через стили.", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование TextButton", - "desc": [ - "【child】 : Имеет ли прокручиваемое содержимое 【Widget】", - "【onPressed】 : Событие нажатия 【VoidCallback】", - "【onLongPress】 : Событие долгого нажатия 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "Стиль TextButton", - "desc": [ - "【style】 : Стиль кнопки 【ButtonStyle】", - "【focusNode】 : Фокус 【FocusNode】", - "【clipBehavior】 : Поведение обрезки 【Clip】", - "【autofocus】 : Автофокус 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_zh-CN.json deleted file mode 100644 index 73589c97a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/desc_zh-CN.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 353, - "name": "TextButton", - "localName": "文字按钮", - "info": "Material风格的文字按钮,默认只有文字,点击时有水波纹。可通过样式更改边框、颜色、阴影等属性。", - "lever": 3, - "family": 1, - "linkIds": [ - 354, - 355 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextButton基本使用", - "desc": [ - "【child】 : 是否具有滚动主体 【Widget】", - "【onPressed】 : 点击事件 【VoidCallback】", - "【onLongPress】 : 长按事件 【VoidCallback】" - ] - }, - { - "file": "node2_style.dart", - "name": "TextButton样式", - "desc": [ - "【style】 : 按钮样式 【ButtonStyle】", - "【focusNode】 : 焦点 【FocusNode】", - "【clipBehavior】 : 裁剪行为 【Clip】", - "【autofocus】 : 自动聚焦 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/node1_base.dart deleted file mode 100644 index 0b8383a5d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/node1_base.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; - - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class TextButtonDemo extends StatelessWidget { - const TextButtonDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - height: 60, - child: Wrap( - spacing: 20, - children: [ - TextButton( - child: const Text('TextButton 文字'), - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - const TextButton( - child: Text('TextButton 禁用'), - onPressed: null, - onLongPress: null, - ), - ], - )); - } - - void _onPressed() {} - - void _onLongPress() {} -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/node2_style.dart b/modules/widget_system/widgets/lib/StatefulWidget/TextButton/node2_style.dart deleted file mode 100644 index d5a620047..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextButton/node2_style.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class TextButtonStyleDemo extends StatelessWidget { - const TextButtonStyleDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - child: Wrap( - spacing: 10, - children: [ - TextButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - padding: const EdgeInsets.symmetric(horizontal: 8), - foregroundColor: Colors.white, - elevation: 2, - shadowColor: Colors.orangeAccent), - child: const Text('TextButton 样式'), - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - TextButton( - style: TextButton.styleFrom( - backgroundColor: Colors.white, - foregroundColor: Colors.black, - side: const BorderSide(color: Colors.blue, width: 1), - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10))), - // elevation: 2, - shadowColor: Colors.orangeAccent), - child: const Text('TextButton 边线'), - autofocus: false, - onPressed: _onPressed, - onLongPress: _onLongPress, - ), - ], - ), - ); - } - - void _onPressed() {} - - void _onLongPress() {} -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_de_DE.json deleted file mode 100644 index a5be0cb36..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_de_DE.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "Eingabefeld", - "info": "Eine Komponente zur Eingabe mit komplexen Eigenschaften. Kann Controller, Textstil, Dekorationslinien, Zeilenbeschränkungen, Cursor-Stil usw. angeben. Empfängt Ereignisse wie Eingabeänderungen und Eingabeabschluss.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von TextField", - "desc": [ - "【controller】 : Controller 【TextEditingController】", - "【style】 : Textstil 【TextStyle】", - "【decoration】 : Dekorationslinie 【InputDecoration】", - "【onEditingComplete】 : Ereignis bei Eingabeabschluss 【Function()】", - "【onSubmitted】 : Ereignis bei Übermittlung 【Function(String)】", - "【onChanged】 : Ereignis bei Eingabe 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "Zeilenanzahl und Cursor von TextField", - "desc": [ - "【minLines】 : Minimale Zeilenanzahl 【int】", - "【maxLines】 : Maximale Zeilenanzahl 【int】", - "【cursorRadius】 : Cursor-Radius 【Radius】", - "【cursorColor】 : Cursor-Farbe 【Color】", - "【cursorWidth】 : Cursor-Breite 【double】", - "【showCursor】 : Cursor anzeigen 【bool】", - "【autofocus】 : Automatischer Fokus 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Komplexe Dekoration von InputDecoration", - "desc": [ - "InputDecoration hat viele Dekorationspunkte, siehe Code für Details:", - "border: Bezogen auf den Rand", - "helper: Bezogen auf die Hinweise unten links", - "counter: Bezogen auf die Hinweise unten rechts", - "prefix: Ganz links innerhalb des Eingabefelds", - "suffix: Ganz rechts innerhalb des Eingabefelds", - "label: Text ohne Fokus", - "label: Text ohne Fokus", - "hint: Bezogen auf Hinweistext", - "border: Bezogen auf den Rand" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_en_US.json deleted file mode 100644 index f84e35c80..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_en_US.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "Input Box", - "info": "A component for input, with complex properties. Can specify controller, text style, decoration, line limit, cursor style, etc. Receives input change, input completion, and other events.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of TextField", - "desc": [ - "【controller】 : Controller 【TextEditingController】", - "【style】 : Text Style 【TextStyle】", - "【decoration】 : Decoration 【InputDecoration】", - "【onEditingComplete】 : Input Completion Event 【Function()】", - "【onSubmitted】 : Submission Event 【Function(String)】", - "【onChanged】 : Input Event 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "Line Number and Cursor of TextField", - "desc": [ - "【minLines】 : Minimum Lines 【int】", - "【maxLines】 : Maximum Lines 【int】", - "【cursorRadius】 : Cursor Radius 【Radius】", - "【cursorColor】 : Cursor Color 【Color】", - "【cursorWidth】 : Cursor Width 【double】", - "【showCursor】 : Whether to Show Cursor 【bool】", - "【autofocus】 : Auto Focus 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Complex Decoration of Decoration", - "desc": [ - "InputDecoration has many decoration points, corresponding to the code:", - "border: Border related", - "helper: Bottom left corner related hints", - "counter: Bottom right corner related hints", - "prefix: Innermost left side of the input box", - "suffix: Innermost right side of the input box", - "label: Text when no focus", - "label: Text when no focus", - "hint: Hint text related", - "border: Border related" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_es_ES.json deleted file mode 100644 index 90168ca13..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_es_ES.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "Campo de texto", - "info": "Componente de entrada con propiedades complejas. Puede especificar controladores, estilos de texto, decoraciones de línea, límites de líneas, estilos de cursor, etc. Recibe eventos de cambio de entrada, finalización de entrada, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de TextField", - "desc": [ - "【controller】 : Controlador 【TextEditingController】", - "【style】 : Estilo de texto 【TextStyle】", - "【decoration】 : Decoración de línea 【InputDecoration】", - "【onEditingComplete】 : Evento de finalización de entrada 【Function()】", - "【onSubmitted】 : Evento de envío 【Function(String)】", - "【onChanged】 : Evento de entrada 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "Número de líneas y cursor de TextField", - "desc": [ - "【minLines】 : Número mínimo de líneas 【int】", - "【maxLines】 : Número máximo de líneas 【int】", - "【cursorRadius】 : Radio del cursor 【Radius】", - "【cursorColor】 : Color del cursor 【Color】", - "【cursorWidth】 : Ancho del cursor 【double】", - "【showCursor】 : Mostrar cursor 【bool】", - "【autofocus】 : Enfoque automático 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Decoración compleja de decoration", - "desc": [ - "InputDecoration tiene muchos puntos de decoración, consulte el código para los detalles:", - "border: Relacionado con el borde", - "helper: Sugerencia en la esquina inferior izquierda", - "counter: Sugerencia en la esquina inferior derecha", - "prefix: Interior del campo de texto, extremo izquierdo", - "suffix: Interior del campo de texto, extremo derecho", - "label: Texto sin foco", - "label: Texto sin foco", - "hint: Relacionado con el texto de sugerencia", - "border: Relacionado con el borde" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_fr_FR.json deleted file mode 100644 index f612657ed..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_fr_FR.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "Champ de saisie", - "info": "Composant pour la saisie, possédant des propriétés complexes. Peut spécifier un contrôleur, un style de texte, une décoration de ligne, une limite de lignes, un style de curseur, etc. Reçoit des événements de changement de saisie, de saisie terminée, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de TextField", - "desc": [ - "【controller】 : Contrôleur 【TextEditingController】", - "【style】 : Style de texte 【TextStyle】", - "【decoration】 : Décoration de ligne 【InputDecoration】", - "【onEditingComplete】 : Événement de saisie terminée 【Function()】", - "【onSubmitted】 : Événement de soumission 【Function(String)】", - "【onChanged】 : Événement de saisie 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "Nombre de lignes et curseur de TextField", - "desc": [ - "【minLines】 : Nombre minimal de lignes 【int】", - "【maxLines】 : Nombre maximal de lignes 【int】", - "【cursorRadius】 : Rayon du curseur 【Radius】", - "【cursorColor】 : Couleur du curseur 【Color】", - "【cursorWidth】 : Largeur du curseur 【double】", - "【showCursor】 : Afficher le curseur 【bool】", - "【autofocus】 : Mise au point automatique 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Décoration complexe de InputDecoration", - "desc": [ - "InputDecoration a de nombreux points de décoration, voir le code pour les détails:", - "border: Relatif à la bordure", - "helper: Indication en bas à gauche", - "counter: Indication en bas à droite", - "prefix: Partie la plus à gauche à l'intérieur du champ de saisie", - "suffix: Partie la plus à droite à l'intérieur du champ de saisie", - "label: Texte sans focus", - "label: Texte sans focus", - "hint: Relatif au texte d'indication", - "border: Relatif à la bordure" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_it_IT.json deleted file mode 100644 index 87050f769..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_it_IT.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "Campo di testo", - "info": "Componente per l'input, con proprietà complesse. Puoi specificare il controller, lo stile del testo, la decorazione della linea, il limite di righe, lo stile del cursore, ecc. Riceve eventi di cambiamento dell'input, completamento dell'input, ecc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di TextField", - "desc": [ - "【controller】 : Controller 【TextEditingController】", - "【style】 : Stile del testo 【TextStyle】", - "【decoration】 : Decorazione della linea 【InputDecoration】", - "【onEditingComplete】 : Evento di completamento dell'input 【Function()】", - "【onSubmitted】 : Evento di invio 【Function(String)】", - "【onChanged】 : Evento di input 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "Numero di righe e cursore di TextField", - "desc": [ - "【minLines】 : Numero minimo di righe 【int】", - "【maxLines】 : Numero massimo di righe 【int】", - "【cursorRadius】 : Raggio del cursore 【Radius】", - "【cursorColor】 : Colore del cursore 【Color】", - "【cursorWidth】 : Larghezza del cursore 【double】", - "【showCursor】 : Mostrare il cursore 【bool】", - "【autofocus】 : Autofocus 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Decorazione complessa di decoration", - "desc": [ - "InputDecoration ha molti punti di decorazione, i dettagli sono nel codice:", - "border: Relativo al bordo", - "helper: Suggerimento nell'angolo inferiore sinistro", - "counter: Suggerimento nell'angolo inferiore destro", - "prefix: Parte più interna a sinistra del campo di input", - "suffix: Parte più interna a destra del campo di input", - "label: Testo senza focus", - "label: Testo senza focus", - "hint: Relativo al testo di suggerimento", - "border: Relativo al bordo" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ja_JP.json deleted file mode 100644 index a77554dfc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ja_JP.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "入力欄", - "info": "入力用のコンポーネントで、複雑な属性を持っています。コントローラー、テキストスタイル、装飾線、行数制限、カーソルスタイルなどを指定できます。入力の変化、入力完了などのイベントを受け取ります。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextFieldの基本使用法", - "desc": [ - "【controller】 : コントローラー 【TextEditingController】", - "【style】 : テキストスタイル 【TextStyle】", - "【decoration】 : 装飾線 【InputDecoration】", - "【onEditingComplete】 : 入力完了イベント 【Function()】", - "【onSubmitted】 : 送信イベント 【Function(String)】", - "【onChanged】 : 入力イベント 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "TextFieldの行数とカーソル", - "desc": [ - "【minLines】 : 最小行数 【int】", - "【maxLines】 : 最大行数 【int】", - "【cursorRadius】 : カーソルの半径 【Radius】", - "【cursorColor】 : カーソルの色 【Color】", - "【cursorWidth】 : カーソルの幅 【double】", - "【showCursor】 : カーソルを表示するかどうか 【bool】", - "【autofocus】 : 自動フォーカス 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "decorationの複雑な装飾", - "desc": [ - "InputDecorationには非常に多くの装飾ポイントがあり、コードに対応する装飾があります:", - "border: ボーダー関連", - "helper: 左下のヒント関連", - "counter: 右下のヒント関連", - "prefix: 入力欄の内部最左側", - "suffix: 入力欄の内部最右側", - "label: フォーカスがない時のテキスト", - "label: フォーカスがない時のテキスト", - "hint: ヒントテキスト関連", - "border: ボーダー関連" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ko_KR.json deleted file mode 100644 index 0f27e08eb..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ko_KR.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "입력 필드", - "info": "입력을 위한 컴포넌트로, 복잡한 속성을 가지고 있습니다. 컨트롤러, 텍스트 스타일, 장식선, 줄 수 제한, 커서 스타일 등을 지정할 수 있습니다. 입력 변경, 입력 완료 등의 이벤트를 받습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextField 기본 사용법", - "desc": [ - "【controller】 : 컨트롤러 【TextEditingController】", - "【style】 : 텍스트 스타일 【TextStyle】", - "【decoration】 : 장식선 【InputDecoration】", - "【onEditingComplete】 : 입력 완료 이벤트 【Function()】", - "【onSubmitted】 : 제출 이벤트 【Function(String)】", - "【onChanged】 : 입력 이벤트 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "TextField 줄 수와 커서", - "desc": [ - "【minLines】 : 최소 줄 수 【int】", - "【maxLines】 : 최대 줄 수 【int】", - "【cursorRadius】 : 커서 반지름 【Radius】", - "【cursorColor】 : 커서 색상 【Color】", - "【cursorWidth】 : 커서 너비 【double】", - "【showCursor】 : 커서 표시 여부 【bool】", - "【autofocus】 : 자동 포커스 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "decoration의 복잡한 장식", - "desc": [ - "InputDecoration에는 매우 많은 장식점이 있으며, 해당 장식점은 코드를 참조하세요:", - "border: 테두리 관련", - "helper: 왼쪽 하단 관련 힌트", - "counter: 오른쪽 하단 관련 힌트", - "prefix: 입력 필드 내부 가장 왼쪽", - "suffix: 입력 필드 내부 가장 오른쪽", - "label: 포커스 없을 때의 텍스트", - "label: 포커스 없을 때의 텍스트", - "hint: 힌트 텍스트 관련", - "border: 테두리 관련" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_pt_PT.json deleted file mode 100644 index 76c04b016..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_pt_PT.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "Campo de entrada", - "info": "Componente para entrada de dados, possui propriedades complexas. Pode especificar controlador, estilo de texto, decoração de linha, limite de linhas, estilo do cursor, etc. Recebe eventos de mudança de entrada, conclusão de entrada, etc.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do TextField", - "desc": [ - "【controller】 : Controlador 【TextEditingController】", - "【style】 : Estilo de texto 【TextStyle】", - "【decoration】 : Decoração de linha 【InputDecoration】", - "【onEditingComplete】 : Evento de conclusão de entrada 【Function()】", - "【onSubmitted】 : Evento de submissão 【Function(String)】", - "【onChanged】 : Evento de entrada 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "Número de linhas e cursor do TextField", - "desc": [ - "【minLines】 : Número mínimo de linhas 【int】", - "【maxLines】 : Número máximo de linhas 【int】", - "【cursorRadius】 : Raio do cursor 【Radius】", - "【cursorColor】 : Cor do cursor 【Color】", - "【cursorWidth】 : Largura do cursor 【double】", - "【showCursor】 : Mostrar cursor 【bool】", - "【autofocus】 : Foco automático 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Decoração complexa do decoration", - "desc": [ - "InputDecoration tem muitos pontos de decoração, correspondentes ao código:", - "border: Relacionado à borda", - "helper: Dica relacionada ao canto inferior esquerdo", - "counter: Dica relacionada ao canto inferior direito", - "prefix: Extremidade esquerda interna do campo de entrada", - "suffix: Extremidade direita interna do campo de entrada", - "label: Texto sem foco", - "label: Texto sem foco", - "hint: Texto de dica relacionado", - "border: Relacionado à borda" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ru_RU.json deleted file mode 100644 index fc395008c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_ru_RU.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "Поле ввода", - "info": "Компонент для ввода, обладающий сложными свойствами. Можно указать контроллер, стиль текста, декоративные линии, ограничение на количество строк, стиль курсора и т.д. Получает события изменения ввода, завершения ввода и т.д.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование TextField", - "desc": [ - "【controller】 : Контроллер 【TextEditingController】", - "【style】 : Стиль текста 【TextStyle】", - "【decoration】 : Декоративные линии 【InputDecoration】", - "【onEditingComplete】 : Событие завершения ввода 【Function()】", - "【onSubmitted】 : Событие отправки 【Function(String)】", - "【onChanged】 : Событие ввода 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "Количество строк и курсор в TextField", - "desc": [ - "【minLines】 : Минимальное количество строк 【int】", - "【maxLines】 : Максимальное количество строк 【int】", - "【cursorRadius】 : Радиус курсора 【Radius】", - "【cursorColor】 : Цвет курсора 【Color】", - "【cursorWidth】 : Ширина курсора 【double】", - "【showCursor】 : Показывать ли курсор 【bool】", - "【autofocus】 : Автоматическая фокусировка 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Сложные декорации в decoration", - "desc": [ - "InputDecoration имеет множество точек декорации, соответствующие элементы см. в коде:", - "border: Связано с границами", - "helper: Подсказка в нижнем левом углу", - "counter: Подсказка в нижнем правом углу", - "prefix: Самая левая часть внутри поля ввода", - "suffix: Самая правая часть внутри поля ввода", - "label: Текст без фокуса", - "label: Текст без фокуса", - "hint: Связано с подсказкой", - "border: Связано с границами" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_zh-CN.json deleted file mode 100644 index cf7ea31a3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/desc_zh-CN.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": 54, - "name": "TextField", - "localName": "输入框", - "info": "由于输入的组件,拥有复杂的属性。可指定控制器、文字样式、装饰线、行数限制、游标样式等。接收输入变化、完成输入等事件。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextField基本用法", - "desc": [ - "【controller】 : 控制器 【TextEditingController】", - "【style】 : 文字样式 【TextStyle】", - "【decoration】 : 装饰线 【InputDecoration】", - "【onEditingComplete】 : 输入完成事件 【Function()】", - "【onSubmitted】 : 提交事件 【Function(String)】", - "【onChanged】 : 输入事件 【Function(String)】" - ] - }, - { - "file": "node2_cursor.dart", - "name": "TextField行数和cursor", - "desc": [ - "【minLines】 : 最小行数 【int】", - "【maxLines】 : 最大行数 【int】", - "【cursorRadius】 : 光标半径 【Radius】", - "【cursorColor】 : 光标颜色 【Color】", - "【cursorWidth】 : 光标宽度 【double】", - "【showCursor】 : 是否显示光标 【bool】", - "【autofocus】 : 自动聚焦 【bool】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "decoration的复杂装饰", - "desc": [ - "InputDecoration有非常多的装饰点,对应点缀见代码:", - "border: 边线相关", - "helper: 左下角相关提示", - "counter: 右下角相关提示", - "prefix: 输入框内部最左侧", - "suffix: 输入框内部最右侧", - "label: 无焦点时文字", - "label: 无焦点时文字", - "hint: 提示文字相关", - "border: 边线相关" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/TextField/node1_base.dart deleted file mode 100644 index 64a59be92..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/node1_base.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - -class CustomTextField extends StatefulWidget { - const CustomTextField({Key? key}) : super(key: key); - - @override - _CustomTextFieldState createState() => _CustomTextFieldState(); -} - -class _CustomTextFieldState extends State { - final FocusNode _focusNode = FocusNode(); - late TextEditingController _controller; - - @override - void initState() { - super.initState(); - _controller = TextEditingController(); - } - - @override - void dispose() { - _controller.dispose(); - _focusNode.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 300, - child: TextField( - controller: _controller, - style: const TextStyle(color: Colors.blue), - decoration: const InputDecoration( - border: OutlineInputBorder(), - labelText: 'username', - ), - onEditingComplete: () { - print('onEditingComplete'); - }, - onChanged: (v) { - print('onChanged:' + v); - }, - onSubmitted: (v) { - FocusScope.of(context).requestFocus(_focusNode); - print('onSubmitted:' + v); - _controller.clear(); - }, - )); - } -} - diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/node2_cursor.dart b/modules/widget_system/widgets/lib/StatefulWidget/TextField/node2_cursor.dart deleted file mode 100644 index 5efaa0cc6..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/node2_cursor.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CursorTextField extends StatefulWidget { - const CursorTextField({Key? key}) : super(key: key); - - @override - _CursorTextFieldState createState() => _CursorTextFieldState(); -} - -class _CursorTextFieldState extends State { - final FocusNode _focusNode = FocusNode(); - - @override - void dispose() { - _focusNode.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - _buildSubmitBtn(), - _buildTextField(context), - ], - ); - } - - Widget _buildTextField(BuildContext context) { - return SizedBox( - width: 300, - child: TextField( - style: const TextStyle(color: Colors.blue), - minLines: 3, - maxLines: 5, - cursorColor: Colors.green, - cursorRadius: const Radius.circular(3), - cursorWidth: 5, - showCursor: true, - decoration: const InputDecoration( - contentPadding: EdgeInsets.all(10), - hintText: "请输入...", - border: OutlineInputBorder(), - ), - onChanged: (v) {}, - ), - ); - } - - Widget _buildSubmitBtn() => ElevatedButton( - child: const Text( - "提交", - style: TextStyle(color: Colors.white, fontSize: 16), - ), - onPressed: () => FocusScope.of(context).requestFocus(_focusNode)); -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextField/node3_decoration.dart b/modules/widget_system/widgets/lib/StatefulWidget/TextField/node3_decoration.dart deleted file mode 100644 index 0a8aeb3d3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextField/node3_decoration.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class ComplexTextField extends StatelessWidget { - const ComplexTextField({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const TextField( - decoration: InputDecoration( - border: OutlineInputBorder(), - focusedBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.blue), - borderRadius: BorderRadius.only( - topLeft: Radius.circular(10), bottomLeft: Radius.circular(10))), - enabledBorder: OutlineInputBorder( - borderSide: BorderSide(color: Colors.deepPurpleAccent), - borderRadius: BorderRadius.only( - topLeft: Radius.circular(10), bottomLeft: Radius.circular(10))), - labelText: 'username', - labelStyle: TextStyle(color: Colors.purple), - helperText: "help me", - helperStyle: TextStyle(color: Colors.blue), - - suffixText: "suffix", - suffixIcon: Icon(Icons.done), - suffixStyle: TextStyle(color: Colors.green), - - counterText: "counter", - counterStyle: TextStyle(color: Colors.orange), - - prefixText: "ID ", - prefixStyle: TextStyle(color: Colors.blue), - prefixIcon: Icon(Icons.language), - - fillColor: Color(0x110099ee), - filled: true, - - // errorText: "error", - // errorMaxLines: 1, - // errorStyle: TextStyle(color: Colors.red), - // errorBorder: UnderlineInputBorder(), - - hintText: "请输入用户名", - hintMaxLines: 1, - hintStyle: TextStyle(color: Colors.black38), - icon: Icon(Icons.assignment_ind), - )); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_de_DE.json deleted file mode 100644 index a44d1a43f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "Textformularfeld", - "info": "Die Eigenschaften sind im Wesentlichen dieselben wie bei TextField, zusätzlich gibt es Validierungs- und Rückruffunktionen für die Felder. Der FormState-save löst den onSaved-Rückruf aus.", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von TextFormField", - "desc": [ - "Die grundlegenden Eigenschaften sind identisch mit TextField, siehe dort für Details", - "【validator】: Validierungsfunktion 【FormFieldValidator】", - "【onFieldSubmitted】: Einreichungsrückruf 【ValueChanged】", - "【onSaved】: Rückruf beim Speichern des Formulars 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_en_US.json deleted file mode 100644 index caa91b5f2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "Text Form Input", - "info": "The properties are basically the same as TextField, with the addition of field validation and submission callbacks. The save of FormState will trigger the onSaved callback.", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of TextFormField", - "desc": [ - "The basic properties are the same as TextField, see details there", - "【validator】: Validation function 【FormFieldValidator】", - "【onFieldSubmitted】: Submission callback 【ValueChanged】", - "【onSaved】: Callback when the form is saved 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_es_ES.json deleted file mode 100644 index d7d1c29dd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "Campo de entrada de texto", - "info": "Básicamente es igual a las propiedades de TextField, con la adición de validación de campo y devolución de llamada de envío. El save de FormState activará la devolución de llamada onSaved.", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de TextFormField", - "desc": [ - "Las propiedades básicas son las mismas que las de TextField, consulte los detalles", - "【validator】 : Función de validación 【FormFieldValidator 】", - "【onFieldSubmitted】 : Devolución de llamada de envío 【ValueChanged】", - "【onSaved】 : Devolución de llamada cuando se guarda el formulario 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_fr_FR.json deleted file mode 100644 index 100a2351b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "Champ de formulaire de texte", - "info": "Les propriétés sont fondamentalement les mêmes que celles de TextField, avec en plus des validations de champ et des rappels de soumission. Le save de FormState déclenche le rappel onSaved.", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de TextFormField", - "desc": [ - "Les propriétés de base sont les mêmes que celles de TextField, voir les détails", - "【validator】 : Fonction de validation 【FormFieldValidator 】", - "【onFieldSubmitted】 : Rappel de soumission 【ValueChanged】", - "【onSaved】 : Rappel lors de la sauvegarde du formulaire 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_it_IT.json deleted file mode 100644 index 3c20c0b81..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "Campo di input di testo", - "info": "Le proprietà sono fondamentalmente le stesse di TextField, con l'aggiunta di callback per la validazione e l'invio dei campi. Il save di FormState attiverà la callback onSaved.", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di TextFormField", - "desc": [ - "Le proprietà di base sono le stesse di TextField, vedi dettagli", - "【validator】 : funzione di validazione 【FormFieldValidator 】", - "【onFieldSubmitted】 : callback di invio 【ValueChanged】", - "【onSaved】 : callback quando il modulo viene salvato 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ja_JP.json deleted file mode 100644 index d1909f133..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "テキストフォーム入力", - "info": "TextFieldの属性と基本的に同じで、それに基づいてフィールドの検証と送信のコールバックが追加されています。FormStateのsaveはonSavedコールバックをトリガーします。", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextFormFieldの基本使用", - "desc": [ - "基本属性はTextFieldと一致します。詳細はそちらをご覧ください", - "【validator】 : 検証関数 【FormFieldValidator 】", - "【onFieldSubmitted】 : 送信コールバック 【ValueChanged】", - "【onSaved】 : フォームsave時のコールバック 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ko_KR.json deleted file mode 100644 index 01894f41d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "텍스트 폼 입력", - "info": "TextField 속성과 기본적으로 동일하며, 여기에 필드 검증 및 제출 콜백이 추가되었습니다. FormState의 save는 onSaved 콜백을 트리거합니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextFormField 기본 사용", - "desc": [ - "기본 속성은 TextField와 동일하며, 자세한 내용은 해당 항목을 참조하세요", - "【validator】 : 검증 함수 【FormFieldValidator 】", - "【onFieldSubmitted】 : 제출 콜백 【ValueChanged】", - "【onSaved】 : 폼 save 시 콜백 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_pt_PT.json deleted file mode 100644 index b70a87a65..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "Campo de Entrada de Texto", - "info": "As propriedades são basicamente as mesmas que o TextField, com a adição de validação de campo e callbacks de envio. O save do FormState irá acionar o callback onSaved.", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do TextFormField", - "desc": [ - "As propriedades básicas são as mesmas que o TextField, consulte-o para mais detalhes", - "【validator】: Função de validação 【FormFieldValidator】", - "【onFieldSubmitted】: Callback de envio 【ValueChanged】", - "【onSaved】: Callback quando o formulário é salvo 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ru_RU.json deleted file mode 100644 index 47b202b2c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "Текстовое поле формы", - "info": "Свойства аналогичны TextField, с добавлением проверки поля и обратного вызова отправки. Сохранение FormState вызовет обратный вызов onSaved.", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование TextFormField", - "desc": [ - "Основные свойства аналогичны TextField, подробнее см. там", - "【validator】 : Функция проверки 【FormFieldValidator 】", - "【onFieldSubmitted】 : Обратный вызов отправки 【ValueChanged】", - "【onSaved】 : Обратный вызов при сохранении формы 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_zh-CN.json deleted file mode 100644 index 26a01201e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 199, - "name": "TextFormField", - "localName": "文字表单输入", - "info": "和TextField属性基本一致,在其基础上增加字段的校验和提交的回调,FormState的save会触发onSaved回调。", - "lever": 4, - "family": 1, - "linkIds": [ - 54, - 198 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TextFormField基本使用", - "desc": [ - "基本属性和TextField一致,详见之", - "【validator】 : 验证函数 【FormFieldValidator 】", - "【onFieldSubmitted】 : 提交回调 【ValueChanged】", - "【onSaved】 : 表单save时回调 【FormFieldSetter】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/node1_base.dart deleted file mode 100644 index 0e8dc1731..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TextFormField/node1_base.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class CustomTextFormField extends StatefulWidget { - const CustomTextFormField({Key? key}) : super(key: key); - - @override - _CustomTextFormFieldState createState() => _CustomTextFormFieldState(); -} - -class _CustomTextFormFieldState extends State { - final GlobalKey _formKey = GlobalKey(); - - @override - Widget build(BuildContext context) { - return Row( - children: [ - const SizedBox(width: 40), - Expanded( - child: TextFormField( - style: const TextStyle(textBaseline: TextBaseline.alphabetic), - decoration: const InputDecoration( - border: OutlineInputBorder(), - labelText: 'username', - ), - validator: _validateUsername, - onFieldSubmitted: _onFieldSubmitted, - onSaved: _onSaved, - ), - ), - _buildSubmitButton(context), - ], - ); - } - - String? _validateUsername(value) { - if (value.isEmpty) { - return '用户名不能为空'; - } - return null; - } - - void _onSaved(value) { - print('onSaved:' + value); - } - - void _onFieldSubmitted(value) { - print('onFieldSubmitted:' + value); - } - - Widget _buildSubmitButton(BuildContext context) => ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Colors.blue, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - )), - onPressed: _onSubmit, - child: const Icon( - Icons.check, - color: Colors.white, - ), - ); - - void _onSubmit() { - if (_formKey.currentState == null) return; - _formKey.currentState!.save(); - if (_formKey.currentState!.validate()) { - FocusScope.of(context).requestFocus(FocusNode()); - } - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_de_DE.json deleted file mode 100644 index 36f681f19..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "Timer-Modus", - "info": "Deaktiviert/Aktiviert den Timer (Ticker) des Unterbaums, der Animationscontroller basiert auf Ticker.", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Animation einheitlich deaktivieren/aktivieren", - "desc": [ - "Das enabled von TickerMode kann die Animationseffekte des Unterbaums einheitlich aktivieren/deaktivieren." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_en_US.json deleted file mode 100644 index a1a0961e8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "Timer Mode", - "info": "Enable/disable the timer (Ticker) for the subtree, the animation controller is implemented based on Ticker.", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Unified Enable/Disable Animation", - "desc": [ - "The enabled property of TickerMode can uniformly enable/disable the animation effects of the subtree." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_es_ES.json deleted file mode 100644 index d5b3baf4f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "Modo Ticker", - "info": "Deshabilitar/habilitar el Ticker del subárbol, el controlador de animación se basa en Ticker.", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Deshabilitar/Habilitar Animación Unificada", - "desc": [ - "El enabled de TickerMode puede habilitar/deshabilitar uniformemente los efectos de animación del subárbol." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_fr_FR.json deleted file mode 100644 index 04167417d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "Mode Ticker", - "info": "Activer/Désactiver le Ticker du sous-arbre, le contrôleur d'animation est basé sur Ticker.", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Activer/Désactiver l'animation de manière uniforme", - "desc": [ - "Le paramètre enabled de TickerMode peut activer/désactiver de manière uniforme les effets d'animation du sous-arbre." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_it_IT.json deleted file mode 100644 index 1c5b23230..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "Modalità Timer", - "info": "Disabilita/abilita il timer (Ticker) del sottoalbero, il controller di animazione è basato su Ticker.", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Disabilita/Abilita Animazione Unificata", - "desc": [ - "L'attributo enabled di TickerMode può abilitare/disabilitare in modo unificato gli effetti di animazione del sottoalbero." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ja_JP.json deleted file mode 100644 index 2cd5ca731..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "タイカーモード", - "info": "サブツリーのタイマー(Ticker)を無効/有効にします。アニメーションコントローラーは Ticker に基づいて実装されています。", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "アニメーションの一括無効/有効", - "desc": [ - "TickerMode の enabled は、サブツリーのアニメーション効果を一括して有効/無効にすることができます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ko_KR.json deleted file mode 100644 index f65208410..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "타이머 모드", - "info": "서브트리의 타이머(Ticker)를 비활성화/활성화합니다. 애니메이션 컨트롤러는 Ticker를 기반으로 구현됩니다.", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "통합 비활성화/활성화 애니메이션", - "desc": [ - "TickerMode의 enabled는 서브트리의 애니메이션 효과를 통합적으로 활성화/비활성화할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_pt_PT.json deleted file mode 100644 index 4eae56896..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "Modo de Temporizador", - "info": "Desativar/ativar o temporizador (Ticker) da subárvore, o controlador de animação é implementado com base no Ticker.", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Desativar/Ativar Animação Uniformemente", - "desc": [ - "O enabled do TickerMode pode ativar/desativar uniformemente os efeitos de animação da subárvore." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ru_RU.json deleted file mode 100644 index 25a8a650d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "Режим таймера", - "info": "Отключить/включить таймер (Ticker) для поддерева, контроллер анимации реализован на основе Ticker.", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Единое отключение/включение анимации", - "desc": [ - "Свойство enabled TickerMode позволяет единообразно включить/отключить анимацию для поддерева." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_zh-CN.json deleted file mode 100644 index 4cd210d03..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 246, - "name": "TickerMode", - "localName": "计时器模式", - "info": "禁用/启用子树的计时器(Ticker),动画控制器基于 Ticker 实现。", - "lever": 2, - "family": 1, - "linkIds": [ - 346 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "统一禁用/启用动画", - "desc": [ - "TickerMode 的 enabled 可以统一启用/禁用子树的动画效果。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/node1.dart deleted file mode 100644 index f602baac1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TickerMode/node1.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -class TickerModeDemo1 extends StatefulWidget { - const TickerModeDemo1({super.key}); - - @override - State createState() => _TickerModeDemo1State(); -} - -class _TickerModeDemo1State extends State { - bool _disable = false; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - buildOutSwitch(), - const SizedBox(height: 4), - TickerMode(enabled: !_disable, child: buildTestContent()), - ], - ); - } - - Widget buildOutSwitch() => Wrap( - alignment: WrapAlignment.center, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - const Text('TickerMode外的Switch:'), - Switch(value: _disable, onChanged: _onChanged) - ], - ); - - Widget buildTestContent() => Wrap( - alignment: WrapAlignment.center, - crossAxisAlignment: WrapCrossAlignment.center, - spacing: 20, - children: [ - Switch(value: _disable, onChanged: _onChanged), - const CupertinoActivityIndicator(), - const CircularProgressIndicator(), - ], - ); - - void _onChanged(bool value) { - setState(() { - _disable = value; - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_de_DE.json deleted file mode 100644 index 47c9c3c93..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_de_DE.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "Hinweiswerkzeug", - "info": "Eine Komponente zur Anzeige von Hinweistexten, die bei längerem Drücken Informationen anzeigt. Kann Rand, Anzeigedauer, Textstil und Dekorationseigenschaften festlegen.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Tooltip", - "desc": [ - "【preferBelow】 : Bevorzugt unten 【bool】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】", - "【margin】 : Außenabstand 【EdgeInsetsGeometry】", - "【message】 : Nachrichteninhalt 【String】", - "【showDuration】 : Anzeigedauer 【Duration】", - "【waitDuration】 : Schwebeerscheinungszeit 【Duration】", - "【child】 : Kind 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Dekoration von Tooltip", - "desc": [ - "【decoration】 : Dekorationsobjekt 【Decoration】", - "【textStyle】 : Textstil 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_en_US.json deleted file mode 100644 index 1d33e3c3d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_en_US.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "Tooltip", - "info": "A component that displays tooltip information, showing the information when long-pressed. You can specify margins, display duration, text style, and decoration properties.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Tooltip", - "desc": [ - "【preferBelow】: Whether to prefer below 【bool】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【margin】: Margin 【EdgeInsetsGeometry】", - "【message】: Message content 【String】", - "【showDuration】: Display duration 【Duration】", - "【waitDuration】: Hover appearance time 【Duration】", - "【child】: Child 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Decoration of Tooltip", - "desc": [ - "【decoration】: Decoration object 【Decoration】", - "【textStyle】: Text style 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_es_ES.json deleted file mode 100644 index c631b3861..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_es_ES.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "Herramienta de sugerencia", - "info": "Componente para mostrar información de sugerencia, muestra información al mantener presionado. Se pueden especificar márgenes, duración de visualización, estilo de texto, propiedades de decoración.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Tooltip", - "desc": [ - "【preferBelow】 : ¿Prefiere abajo? 【bool】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】", - "【margin】 : Margen externo 【EdgeInsetsGeometry】", - "【message】 : Contenido del mensaje 【String】", - "【showDuration】 : Duración de la visualización 【Duration】", - "【waitDuration】 : Tiempo de aparición al flotar 【Duration】", - "【child】 : Hijo 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Decoración de Tooltip", - "desc": [ - "【decoration】 : Objeto de decoración 【Decoration】", - "【textStyle】 : Estilo de texto 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_fr_FR.json deleted file mode 100644 index 6eb37d216..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_fr_FR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "Info-bulle", - "info": "Composant pour afficher des informations d'aide, affiche les informations lors d'un appui long. Peut spécifier les marges, la durée d'affichage, le style du texte, les propriétés de décoration, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Tooltip", - "desc": [ - "【preferBelow】 : Préfère en dessous 【bool】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】", - "【margin】 : Marge extérieure 【EdgeInsetsGeometry】", - "【message】 : Contenu du message 【String】", - "【showDuration】 : Durée d'affichage 【Duration】", - "【waitDuration】 : Temps d'apparition au survol 【Duration】", - "【child】 : Enfant 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Décoration de Tooltip", - "desc": [ - "【decoration】 : Objet de décoration 【Decoration】", - "【textStyle】 : Style du texte 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_it_IT.json deleted file mode 100644 index 6467bfe4c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_it_IT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "Strumento di suggerimento", - "info": "Componente per visualizzare informazioni di suggerimento, mostra le informazioni quando viene premuto a lungo. È possibile specificare margini, durata di visualizzazione, stile del testo, proprietà delle luci decorative.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Tooltip", - "desc": [ - "【preferBelow】 : Preferenza per la posizione inferiore 【bool】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】", - "【margin】 : Spaziatura esterna 【EdgeInsetsGeometry】", - "【message】 : Contenuto del messaggio 【String】", - "【showDuration】 : Durata della visualizzazione 【Duration】", - "【waitDuration】 : Tempo di comparsa al passaggio del mouse 【Duration】", - "【child】 : Figlio 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Decorazione di Tooltip", - "desc": [ - "【decoration】 : Oggetto di decorazione 【Decoration】", - "【textStyle】 : Stile del testo 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ja_JP.json deleted file mode 100644 index 4e0713fed..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ja_JP.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "ツールチップ", - "info": "ヒント情報を表示するためのコンポーネントで、長押しすると情報が表示されます。余白、表示時間、テキストスタイル、装飾などの属性を指定できます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Tooltipの基本使用", - "desc": [ - "【preferBelow】 : 下方を優先するか 【bool】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】", - "【margin】 : 外側の余白 【EdgeInsetsGeometry】", - "【message】 : メッセージ内容 【String】", - "【showDuration】 : 表示時間 【Duration】", - "【waitDuration】 : ホバーして表示されるまでの時間 【Duration】", - "【child】 : 子 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Tooltipの装飾", - "desc": [ - "【decoration】 : 装飾オブジェクト 【Decoration】", - "【textStyle】 : テキストスタイル 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ko_KR.json deleted file mode 100644 index 8b98ca5f0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ko_KR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "툴팁", - "info": "툴팁 정보를 표시하는 컴포넌트로, 길게 누를 때 정보를 표시합니다. 여백, 표시 시간, 텍스트 스타일, 장식 속성 등을 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Tooltip 기본 사용", - "desc": [ - "【preferBelow】 : 아래쪽을 우선할지 여부 【bool】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】", - "【margin】 : 외부 여백 【EdgeInsetsGeometry】", - "【message】 : 메시지 내용 【String】", - "【showDuration】 : 표시 시간 【Duration】", - "【waitDuration】 : 나타나는 시간 【Duration】", - "【child】 : 자식 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Tooltip의 장식", - "desc": [ - "【decoration】 : 장식 객체 【Decoration】", - "【textStyle】 : 텍스트 스타일 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_pt_PT.json deleted file mode 100644 index f2239a7b8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_pt_PT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "Ferramenta de Dica", - "info": "Componente que exibe informações de dica, exibindo informações ao pressionar e segurar. Pode especificar margens, duração de exibição, estilo de texto, propriedades de decoração, etc.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Tooltip", - "desc": [ - "【preferBelow】 : Preferir abaixo 【bool】", - "【padding】 : Preenchimento interno 【EdgeInsetsGeometry】", - "【margin】 : Margem externa 【EdgeInsetsGeometry】", - "【message】 : Conteúdo da mensagem 【String】", - "【showDuration】 : Duração da exibição 【Duration】", - "【waitDuration】 : Tempo de aparecimento ao pairar 【Duration】", - "【child】 : Filho 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Decoração do Tooltip", - "desc": [ - "【decoration】 : Objeto de decoração 【Decoration】", - "【textStyle】 : Estilo de texto 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ru_RU.json deleted file mode 100644 index e535f7edd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_ru_RU.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "Всплывающая подсказка", - "info": "Компонент для отображения всплывающих подсказок, информация отображается при длительном нажатии. Можно указать отступы, время отображения, стиль текста, свойства декорации.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Tooltip", - "desc": [ - "【preferBelow】 : Предпочтительно снизу 【bool】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】", - "【margin】 : Внешние отступы 【EdgeInsetsGeometry】", - "【message】 : Содержание сообщения 【String】", - "【showDuration】 : Время отображения 【Duration】", - "【waitDuration】 : Время появления при наведении 【Duration】", - "【child】 : Дочерний элемент 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Декорация Tooltip", - "desc": [ - "【decoration】 : Объект декорации 【Decoration】", - "【textStyle】 : Стиль текста 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_zh-CN.json deleted file mode 100644 index 570a1548a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/desc_zh-CN.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 50, - "name": "Tooltip", - "localName": "提示工具", - "info": "由于显示提示信息的组件,长按时显示信息。可指定边距、显示时长、文字样式、装饰灯属性。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Tooltip基本使用", - "desc": [ - "【preferBelow】 : 是否首选下方 【bool】", - "【padding】 : 内边距 【EdgeInsetsGeometry】", - "【margin】 : 外边距 【EdgeInsetsGeometry】", - "【message】 : 消息内容 【String】", - "【showDuration】 : 展示时间 【Duration】", - "【waitDuration】 : 悬浮出现时间 【Duration】", - "【child】 : 孩子 【Widget】" - ] - }, - { - "file": "node2_decoration.dart", - "name": "Tooltip的装饰", - "desc": [ - "【decoration】 : 装饰对象 【Decoration】", - "【textStyle】 : 文字样式 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/node1_base.dart deleted file mode 100644 index 29953fdb9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/node1_base.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class CustomTooltip extends StatelessWidget { - const CustomTooltip({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const Tooltip( - preferBelow: true, - padding: EdgeInsets.all(5), - margin: EdgeInsets.all(5), - message: "天王盖地虎", - showDuration: Duration(seconds: 3), - waitDuration: Duration(milliseconds: 200), - child: Icon(Icons.info_outline), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/node2_decoration.dart b/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/node2_decoration.dart deleted file mode 100644 index c850cb18d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/Tooltip/node2_decoration.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class DecorationTooltip extends StatelessWidget { - const DecorationTooltip({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const Tooltip( - preferBelow: false, - padding: EdgeInsets.all(5), - margin: EdgeInsets.all(2), - message: "宝塔镇河妖", - textStyle: TextStyle( - color: Colors.red, - shadows: [Shadow(color: Colors.white, - offset: Offset(1, 1))]), - decoration: BoxDecoration(boxShadow: [ - BoxShadow( - color: Colors.orangeAccent, - offset: Offset(1, 1), blurRadius: 8) - ]), - child: Icon(Icons.info_outline)); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_de_DE.json deleted file mode 100644 index 8e819173a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "Tween-Animation Builder", - "info": "Verwendet den Tween-Interpolator, um Animationen für verwandte Eigenschaften zu erstellen, und führt über den Builder lokale Builds durch, um den Aktualisierungsbereich zu reduzieren. Benötigt keinen benutzerdefinierten Animator, kann Animationsdauer, Kurve und Endrückruf angeben.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TweenAnimationBuilder Anwendungsbeispiel", - "desc": [ - "【tween】 : *Interpolator 【Tween】", - "【duration】 : *Dauer 【Duration】", - "【builder】 : *Builder 【ValueWidgetBuilder】", - "【curve】 : Animationskurve 【Curve】", - "【onEnd】 : Endrückruf 【VoidCallback】", - "【child】 : Kindkomponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_en_US.json deleted file mode 100644 index 0a142ac15..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "Tween Animation Builder", - "info": "Animates related properties through the Tween, and performs partial builds through the builder to reduce the refresh scope. No need for custom animators, you can specify animation duration, curve, and end callback.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TweenAnimationBuilder Usage Example", - "desc": [ - "【tween】 : *Tween 【Tween】", - "【duration】 : *Duration 【Duration】", - "【builder】 : *Builder 【ValueWidgetBuilder】", - "【curve】 : Animation Curve 【Curve】", - "【onEnd】 : End Callback 【VoidCallback】", - "【child】 : Child Widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_es_ES.json deleted file mode 100644 index ea4cb852d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "Constructor de animación de interpolación", - "info": "Realiza una animación de interpolación en las propiedades relacionadas a través del interpolador Tween, y construye parcialmente a través del builder para reducir el alcance de la actualización. No es necesario un animador personalizado, se puede especificar la duración de la animación, la curva y la devolución de llamada al finalizar.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Ejemplo de uso de TweenAnimationBuilder", - "desc": [ - "【tween】 : *interpolador 【Tween】", - "【duration】 : *duración 【Duration】", - "【builder】 : *constructor 【ValueWidgetBuilder】", - "【curve】 : curva de animación 【Curve】", - "【onEnd】 : devolución de llamada al finalizar 【VoidCallback】", - "【child】 : componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_fr_FR.json deleted file mode 100644 index 4fb052634..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "Constructeur d'animation par interpolation", - "info": "Utilise un interpolateur Tween pour animer les propriétés associées, et utilise un builder pour une construction partielle, réduisant ainsi la portée du rafraîchissement. Ne nécessite pas de personnalisation de l'animateur, permet de spécifier la durée de l'animation, la courbe, et le rappel de fin.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Exemple d'utilisation de TweenAnimationBuilder", - "desc": [ - "【tween】 : *interpolateur 【Tween】", - "【duration】 : *durée 【Duration】", - "【builder】 : *constructeur 【ValueWidgetBuilder】", - "【curve】 : courbe d'animation 【Curve】", - "【onEnd】 : rappel de fin 【VoidCallback】", - "【child】 : composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_it_IT.json deleted file mode 100644 index cefd525af..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "Costruttore di animazione a interpolazione", - "info": "Esegue un'animazione a interpolazione sulle proprietà correlate tramite l'interpolatore Tween, costruendo localmente tramite il builder per ridurre l'ambito di aggiornamento. Non è necessario un animatore personalizzato, è possibile specificare la durata dell'animazione, la curva e il callback di fine.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Esempio di utilizzo di TweenAnimationBuilder", - "desc": [ - "【tween】 : *interpolatore 【Tween】", - "【duration】 : *durata 【Duration】", - "【builder】 : *costruttore 【ValueWidgetBuilder】", - "【curve】 : curva di animazione 【Curve】", - "【onEnd】 : callback di fine 【VoidCallback】", - "【child】 : componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ja_JP.json deleted file mode 100644 index 487e035dc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "トゥイーンアニメーションビルダー", - "info": "トゥイーンを使用して関連するプロパティのアニメーションを行い、ビルダーを使用して部分的な構築を行い、更新範囲を減らします。カスタムアニメーターは不要で、アニメーションの時間、曲線、終了コールバックを指定できます。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TweenAnimationBuilder 使用例", - "desc": [ - "【tween】 : *トゥイーン 【Tween】", - "【duration】 : *時間 【Duration】", - "【builder】 : *ビルダー 【ValueWidgetBuilder】", - "【curve】 : アニメーション曲線 【Curve】", - "【onEnd】 : 終了コールバック 【VoidCallback】", - "【child】 : 子ウィジェット 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ko_KR.json deleted file mode 100644 index 29440f4a7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "트윈 애니메이션 빌더", - "info": "트윈을 사용하여 관련 속성에 대한 애니메이션을 생성하고, 빌더를 통해 부분적으로 빌드하여 새로고침 범위를 줄입니다. 사용자 정의 애니메이터가 필요 없으며, 애니메이션 지속 시간, 곡선, 종료 콜백을 지정할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TweenAnimationBuilder 사용 예제", - "desc": [ - "【tween】 : *트윈 【Tween】", - "【duration】 : *지속 시간 【Duration】", - "【builder】 : *빌더 【ValueWidgetBuilder】", - "【curve】 : 애니메이션 곡선 【Curve】", - "【onEnd】 : 종료 콜백 【VoidCallback】", - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_pt_PT.json deleted file mode 100644 index a459fbfdf..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "Construtor de Animação de Interpolação", - "info": "Realiza animações de interpolação nas propriedades relacionadas através do interpolador Tween, utilizando o builder para construir localmente e reduzir o escopo de atualização. Não é necessário personalizar o animador, podendo especificar a duração da animação, a curva e o callback de término.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Exemplo de uso do TweenAnimationBuilder", - "desc": [ - "【tween】 : *Interpolador 【Tween】", - "【duration】 : *Duração 【Duration】", - "【builder】 : *Construtor 【ValueWidgetBuilder】", - "【curve】 : Curva de animação 【Curve】", - "【onEnd】 : Callback de término 【VoidCallback】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ru_RU.json deleted file mode 100644 index f9fac07e9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "Построитель анимации с интерполяцией", - "info": "Анимация свойств через интерполятор Tween, локальное построение через builder для уменьшения области обновления. Не требует пользовательского аниматора, позволяет указать длительность анимации, кривую и обратный вызов по завершению.", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Пример использования TweenAnimationBuilder", - "desc": [ - "【tween】 : *интерполятор 【Tween】", - "【duration】 : *длительность 【Duration】", - "【builder】 : *построитель 【ValueWidgetBuilder】", - "【curve】 : кривая анимации 【Curve】", - "【onEnd】 : обратный вызов по завершению 【VoidCallback】", - "【child】 : дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_zh-CN.json deleted file mode 100644 index 9631b0ae4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 226, - "name": "TweenAnimationBuilder", - "localName": "渐变动画构造器", - "info": "通过渐变器 Tween 对相关属性进行渐变动画,通过 builder 进行局部构建,减少刷新范围。不需要自定义动画器,可指定动画时长、曲线、结束回调。", - "lever": 3, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TweenAnimationBuilder 使用案例", - "desc": [ - "【tween】 : *渐变器 【Tween】", - "【duration】 : *时长 【Duration】", - "【builder】 : *构造器 【ValueWidgetBuilder】", - "【curve】 : 动画曲线 【Curve】", - "【onEnd】 : 结束回调 【VoidCallback】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/node1_base.dart deleted file mode 100644 index 384ed3cd7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/TweenAnimationBuilder/node1_base.dart +++ /dev/null @@ -1,58 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class TweenAnimationBuilderDemo extends StatefulWidget { - const TweenAnimationBuilderDemo({Key? key}) : super(key: key); - - @override - State createState() => - _TweenAnimationBuilderDemoState(); -} - -class _TweenAnimationBuilderDemoState extends State { - List get colors => const [ - Colors.red, - Colors.orange, - Colors.yellow, - Colors.green, - Colors.blue, - Colors.indigo, - Colors.purple - ]; - - int _activeIndex = 0; - - Color get begin => colors[_activeIndex % colors.length]; - - Color get end => colors[(_activeIndex + 1) % colors.length]; - - void nextColor(){ - _activeIndex++; - setState(() {}); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: nextColor, - child: TweenAnimationBuilder( - tween: ColorTween(begin: begin, end: end), - duration: const Duration(milliseconds: 800), - builder: (BuildContext context, Color? color, Widget? child) { - return Container( - width: 40, - height: 40, - decoration: BoxDecoration( - color: color, borderRadius: BorderRadius.circular(5)), - child: child, - ); - }, - child: const Icon(Icons.android_outlined, color: Colors.white), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_de_DE.json deleted file mode 100644 index 545a79734..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "Verlauf rückgängig machen", - "info": "Empfängt einen ValueNotifier, um den Wert zu überwachen und bietet die Funktionen Rückgängig/Wiederholen für diesen Wert; wird in der Quellcode der TextField-Komponente verwendet.", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Verwendung von UndoHistory in TextField", - "desc": [ - "In diesem Beispiel wird die Rückgängig/Wiederholen-Funktion von TextField über eine externe Schaltfläche gesteuert. Der Parameter undoController kann ein UndoHistoryController-Objekt übernehmen, um den eingegebenen Textinhalt zu steuern und zu beeinflussen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_en_US.json deleted file mode 100644 index c50f8921c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "Undo History", - "info": "Receives ValueNotifier to listen to the value, providing undo/redo functionality for that value; used in the source code of the TextField component.", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Using UndoHistory in TextField", - "desc": [ - "In this example, the undo/redo functionality of the TextField is controlled via an external button. The undoController parameter can be passed an UndoHistoryController object to control and influence the input text content." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_es_ES.json deleted file mode 100644 index f3138ef02..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "Historial de Deshacer", - "info": "Recibe un ValueNotifier para escuchar valores, proporcionando funcionalidad de deshacer/rehacer para ese valor; utilizado en el código fuente del componente TextField.", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Uso de UndoHistory en TextField", - "desc": [ - "En este caso, se controla la funcionalidad de deshacer/rehacer del TextField mediante un botón externo. El parámetro undoController puede recibir un objeto UndoHistoryController, utilizado para controlar y afectar el contenido del texto ingresado." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_fr_FR.json deleted file mode 100644 index a20fcbcad..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "Historique d'annulation", - "info": "Reçoit une valeur observable ValueNotifier et fournit des fonctionnalités d'annulation/réexécution pour cette valeur ; utilisé dans le code source du composant TextField.", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilisation d'UndoHistory dans TextField", - "desc": [ - "Dans cet exemple, un bouton externe est utilisé pour contrôler les fonctionnalités d'annulation/réexécution de TextField. Le paramètre undoController peut recevoir un objet UndoHistoryController pour contrôler et influencer le contenu du texte saisi." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_it_IT.json deleted file mode 100644 index 563747f8d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "Cronologia Annulla", - "info": "Riceve un ValueNotifier per valori osservabili, fornendo funzionalità di annullamento/ripetizione per tale valore; utilizzato nel codice sorgente del componente TextField.", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Utilizzo di UndoHistory in TextField", - "desc": [ - "In questo caso, attraverso un pulsante esterno, si controlla la funzione di annullamento/ripetizione di TextField. Il parametro undoController può essere passato come oggetto UndoHistoryController, utilizzato per controllare e influenzare il contenuto del testo inserito." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ja_JP.json deleted file mode 100644 index 628a2393a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "取り消し履歴", - "info": "ValueNotifierの監視可能な値を受け取り、その値に取り消し/やり直し機能を提供します;TextFieldコンポーネントのソースコードで使用されています。", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "TextFieldでのUndoHistoryの使用", - "desc": [ - "このケースでは、外部ボタンを使用してTextFieldの取り消し/やり直し機能を制御します。undoControllerパラメータにUndoHistoryControllerオブジェクトを渡すことができ、入力テキストの内容を制御および影響を与えるために使用されます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ko_KR.json deleted file mode 100644 index f85244782..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "실행 취소 기록", - "info": "ValueNotifier를 통해 값을 감지하고, 해당 값에 대해 실행 취소/다시 실행 기능을 제공합니다; TextField 컴포넌트 소스 코드에서 사용됩니다.", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "TextField에서 UndoHistory 사용", - "desc": [ - "이 예제에서는 외부 버튼을 통해 TextField의 실행 취소/다시 실행 기능을 제어합니다. undoController 매개변수에 UndoHistoryController 객체를 전달하여 입력 텍스트 내용을 제어하고 영향을 줄 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_pt_PT.json deleted file mode 100644 index c1ee62f1d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "Histórico de Desfazer", - "info": "Recebe um ValueNotifier para monitorar valores, fornecendo funcionalidades de desfazer/refazer para esse valor; utilizado no código-fonte do componente TextField.", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Usando UndoHistory no TextField", - "desc": [ - "Neste exemplo, um botão externo é usado para controlar as funcionalidades de desfazer/refazer do TextField. O parâmetro undoController pode receber um objeto UndoHistoryController, que é usado para controlar e influenciar o conteúdo do texto inserido." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ru_RU.json deleted file mode 100644 index e1aeecc19..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "История отмены", - "info": "Принимает ValueNotifier для отслеживания значений и предоставляет функциональность отмены/повтора для этого значения; используется в исходном коде компонента TextField.", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Использование UndoHistory в TextField", - "desc": [ - "В этом примере с помощью внешней кнопки управляется функциональность отмены/повтора в TextField. Параметр undoController может принимать объект UndoHistoryController для управления и влияния на вводимый текст." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_zh-CN.json deleted file mode 100644 index c2ae9df96..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 241, - "name": "UndoHistory", - "localName": "撤销历史", - "info": "接收 ValueNotifier 可监听值,为该值提供撤销/重做功能;被用于 TextField 组件源码中。", - "lever": 2, - "family": 1, - "linkIds": [ - 54 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "TextField 中使用 UndoHistory", - "desc": [ - "该案例中通过外界按钮,进行控制 TextField 的撤销/重做功能。其中 undoController 参数可以传入 UndoHistoryController 对象,用于控制并影响输入文本内容。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/node1.dart b/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/node1.dart deleted file mode 100644 index 85a654a46..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UndoHistory/node1.dart +++ /dev/null @@ -1,108 +0,0 @@ -import 'package:flutter/material.dart'; - -class UndoHistoryDemo1 extends StatefulWidget { - const UndoHistoryDemo1({super.key}); - - @override - State createState() => _UndoHistoryDemo1State(); -} - -class _UndoHistoryDemo1State extends State { - final UndoHistoryController _undoController = UndoHistoryController(); - - @override - void dispose() { - _undoController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - _buildToolBar(), - const Divider(height: 0.5), - Expanded( - child: TextField( - undoController: _undoController, - expands: true, - maxLines: null, - minLines: null, - decoration: InputDecoration( - filled: true, - hintText: '请输入...', - fillColor: Colors.white, - hoverColor: Colors.transparent, - border: InputBorder.none, - ), - )) - ], - ), - ); - } - - Widget _buildToolBar() { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4), - child: ValueListenableBuilder( - valueListenable: _undoController, - builder: (BuildContext context, UndoHistoryValue value, Widget? child) { - return Wrap( - spacing: 4, - children: [ - _IconAction( - icon: Icons.undo, - onTap: value.canUndo ? _undoController.undo : null), - _IconAction( - icon: Icons.redo, - onTap: value.canRedo ? _undoController.redo : null), - ], - ); - }, - ), - ); - } -} - -class _IconAction extends StatefulWidget { - final IconData icon; - final VoidCallback? onTap; - - const _IconAction({super.key, required this.icon, this.onTap}); - - @override - State<_IconAction> createState() => _IconActionState(); -} - -class _IconActionState extends State<_IconAction> { - bool _hover = false; - - bool get enable => widget.onTap != null; - - Color? get color => (_hover && enable) ? Colors.grey.withOpacity(0.2) : null; - - @override - Widget build(BuildContext context) { - MouseCursor cursor = (_hover && enable) ? SystemMouseCursors.click : SystemMouseCursors.basic; - return MouseRegion( - cursor: cursor , - onExit: (_) => setState(() => _hover = false), - onEnter: (_) => setState(() => _hover = true), - child: GestureDetector( - onTap: widget.onTap, - child: Container( - decoration: BoxDecoration( - color: color, borderRadius: BorderRadius.circular(4)), - padding: const EdgeInsets.all(4.0), - child: Icon( - widget.icon, - size: 20, - color: enable ? null : Colors.grey, - )), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_de_DE.json deleted file mode 100644 index fd18752fc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "Einzigartige Komponente", - "info": "Abstrakte Klasse, muss einen GlobalKey zur Identifikation bereitstellen. Diese Art von Komponente wird nur als eine Instanz inflated und hat zu jedem Zeitpunkt nur einen Zustand, der über die currentState-Eigenschaft abgerufen werden kann.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in UniqueWidget", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_en_US.json deleted file mode 100644 index 4e81b96f8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "Unique Component", - "info": "Abstract class, must provide a GlobalKey for identification. This type of component will only inflate one instance and will only have one state at any given time. The state can be obtained through the currentState property.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to UniqueWidget", - "desc": [ - "【child】 : Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_es_ES.json deleted file mode 100644 index 9a4178f9c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "Componente Único", - "info": "Clase abstracta, debe proporcionar una GlobalKey para la identificación. Este tipo de componente solo se inflará en una instancia y solo tendrá un estado en un momento dado. El estado se puede obtener a través de la propiedad currentState.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a UniqueWidget", - "desc": [ - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_fr_FR.json deleted file mode 100644 index 276b12f71..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "Widget Unique", - "info": "Classe abstraite, doit fournir une GlobalKey pour l'identification. Ce type de widget ne sera instancié qu'une seule fois et aura un seul état à la fois. L'état peut être obtenu via la propriété currentState.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à UniqueWidget", - "desc": [ - "【child】 : Widget enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_it_IT.json deleted file mode 100644 index 705120b6c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "Componente Unico", - "info": "Classe astratta, deve fornire una GlobalKey per l'identificazione. Questo tipo di componente verrà inflato solo una volta e avrà solo uno stato alla volta. Lo stato può essere ottenuto tramite la proprietà currentState.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a UniqueWidget", - "desc": [ - "【child】 : Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ja_JP.json deleted file mode 100644 index 956984b07..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "ユニークウィジェット", - "info": "抽象クラス、GlobalKeyを提供して識別する必要があります。このタイプのウィジェットは1つのインスタンスのみがinflatedされ、同時に1つの状態のみを持ちます。currentStateプロパティを通じて状態を取得できます。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "UniqueWidget 紹介", - "desc": [ - "【child】 : 子ウィジェット 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ko_KR.json deleted file mode 100644 index 5b57d4630..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "유니크 위젯", - "info": "추상 클래스, GlobalKey를 제공하여 식별해야 합니다. 이 유형의 위젯은 하나의 인스턴스만 inflated되며, 동시에 하나의 상태만 가질 수 있습니다. currentState 속성을 통해 상태를 가져올 수 있습니다.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "UniqueWidget 소개", - "desc": [ - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_pt_PT.json deleted file mode 100644 index 1e73e8cbc..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "Componente Único", - "info": "Classe abstrata, deve fornecer uma GlobalKey para identificação, este tipo de componente só será inflated uma instância, e terá apenas um estado de cada vez, o estado pode ser obtido através da propriedade currentState.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao UniqueWidget", - "desc": [ - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ru_RU.json deleted file mode 100644 index 77b6eb84e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "Уникальный компонент", - "info": "Абстрактный класс, должен предоставлять GlobalKey для идентификации. Этот тип компонента будет inflated только один экземпляр, и в любой момент времени будет только одно состояние, которое можно получить через свойство currentState.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в UniqueWidget", - "desc": [ - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_zh-CN.json deleted file mode 100644 index 362d6b536..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 243, - "name": "UniqueWidget", - "localName": "唯一组件", - "info": "抽象类,必须提供一个 GlobalKey 进行身份标识,该类型组件只会 inflated 一个实例,同一时刻也只会有一个状态,可以通过 currentState 属性获取状态。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "UniqueWidget 介绍", - "desc": [ - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/node1_base.dart deleted file mode 100644 index e31fce224..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/UniqueWidget/node1_base.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class UniqueWidgetDemo extends StatelessWidget { - const UniqueWidgetDemo({Key? key}) : super(key: key); - - final String info = - '该类是抽象类,在 Flutter 框架层没有实现类,也没有其他源码使用到它,说明它基本上没啥用。' - '本质上它也非常简单,就是为组件添加一个 GlobalKey,在 Element#inflateWidget 时,会校验组件是否有 GlobalKey ,' - '如果有,则根据 key 找到之前的对应的 Element,就不会触发 Widget#createElement。为了方便获取 State,该类暴露 currentState 属性。' - '你瞄一下源码,就能看到这个组件是多么简单,简单到可以自己完成,以至于没什么大用。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_de_DE.json deleted file mode 100644 index 98e606980..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "Wertüberwachungs-Builder", - "info": "Kann einen Wert überwachen und bei Änderungen die Benutzeroberfläche über den Builder-Callback neu aufbauen, wodurch die Verwendung von setState zur Aktualisierung vermieden wird.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ValueListenableBuilder", - "desc": [ - "【builder】: Komponenten-Builder 【ValueWidgetBuilder】", - "【valueListenable】: Überwachungswert 【ValueListenable】", - "【child】: Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_en_US.json deleted file mode 100644 index 8230410da..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "Value Listener Builder", - "info": "Can listen to a value, and when it changes, the interface can be rebuilt through the builder callback, avoiding the use of setState for refreshing.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ValueListenableBuilder", - "desc": [ - "【builder】: Component builder 【ValueWidgetBuilder】", - "【valueListenable】: Listened value 【ValueListenable】", - "【child】: Child component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_es_ES.json deleted file mode 100644 index 6597d7f72..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "Constructor de Escucha de Valor", - "info": "Puede escuchar un valor y, cuando cambia, reconstruir la interfaz a través de la devolución de llamada del constructor, evitando el uso de setState para actualizar.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de ValueListenableBuilder", - "desc": [ - "【builder】: Constructor de componentes 【ValueWidgetBuilder】", - "【valueListenable】: Valor de escucha 【ValueListenable】", - "【child】: Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_fr_FR.json deleted file mode 100644 index 44726e9b9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "Constructeur de valeur écoutable", - "info": "Peut écouter une valeur, et lorsque celle-ci change, il peut reconstruire l'interface via un rappel builder, évitant ainsi l'utilisation de setState pour rafraîchir.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ValueListenableBuilder", - "desc": [ - "【builder】: Constructeur de composant 【ValueWidgetBuilder】", - "【valueListenable】: Valeur écoutée 【ValueListenable】", - "【child】: Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_it_IT.json deleted file mode 100644 index 4a4785b78..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "Costruttore di ascolto del valore", - "info": "Può ascoltare un valore e, quando cambia, ricostruire l'interfaccia attraverso il callback del builder, evitando l'uso di setState per aggiornare.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di ValueListenableBuilder", - "desc": [ - "【builder】: Costruttore del componente 【ValueWidgetBuilder】", - "【valueListenable】: Valore di ascolto 【ValueListenable】", - "【child】: Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ja_JP.json deleted file mode 100644 index 21e7ccf6a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "値リスナービルダー", - "info": "値を監視し、その値が変化したときにbuilderコールバックを通じてUIを再構築し、setStateを使用せずに更新を避けることができます。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ValueListenableBuilderの基本使用", - "desc": [ - "【builder】: コンポーネントビルダー 【ValueWidgetBuilder】", - "【valueListenable】: 監視値 【ValueListenable】", - "【child】: 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ko_KR.json deleted file mode 100644 index b8e33579a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "값 리스너 빌더", - "info": "값을 리스닝하고, 값이 변경될 때 builder 콜백을 통해 UI를 재구성할 수 있으며, setState를 사용하지 않고도 화면을 갱신할 수 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ValueListenableBuilder 기본 사용법", - "desc": [ - "【builder】: 컴포넌트 빌더 【ValueWidgetBuilder】", - "【valueListenable】: 리스닝 값 【ValueListenable】", - "【child】: 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_pt_PT.json deleted file mode 100644 index 2dfd9ab6a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "Construtor de Valor Escutável", - "info": "Pode escutar um valor e, quando ele muda, reconstruir a interface através do callback do builder, evitando o uso de setState para atualizar.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do ValueListenableBuilder", - "desc": [ - "【builder】: Construtor de Componentes 【ValueWidgetBuilder】", - "【valueListenable】: Valor Escutável 【ValueListenable】", - "【child】: Componente Filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ru_RU.json deleted file mode 100644 index f014ac90d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "Слушатель значений", - "info": "Может отслеживать значение и перестраивать интерфейс через обратный вызов builder при его изменении, избегая использования setState для обновления.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ValueListenableBuilder", - "desc": [ - "【builder】: Конструктор компонента 【ValueWidgetBuilder】", - "【valueListenable】: Отслеживаемое значение 【ValueListenable】", - "【child】: Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_zh-CN.json deleted file mode 100644 index 190489a8f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 255, - "name": "ValueListenableBuilder", - "localName": "监听值构造器", - "info": "可以监听一个值,当其变化时通过builder回调能重建界面,避免使用setState刷新。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ValueListenableBuilder基本使用", - "desc": [ - "【builder】: 组件构造器 【ValueWidgetBuilder】", - "【valueListenable】: 监听值 【ValueListenable】", - "【child】: 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/node1_base.dart deleted file mode 100644 index 0d81ba906..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/ValueListenableBuilder/node1_base.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/21 -/// contact me by email 1981462002@qq.com - -final ValueNotifier _counter = ValueNotifier(0); - -class ValueListenableBuilderDemo extends StatelessWidget { - const ValueListenableBuilderDemo({super.key}); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Scaffold( - appBar: AppBar(title: const Text("ValueListenableBuilder")), - body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Text('You have pushed the button this many times:'), - ValueListenableBuilder( - builder: _buildWithValue, - valueListenable: _counter, - child: const Text('I am Child!'), - ) - ], - ), - ), - floatingActionButton: FloatingActionButton( - child: const Icon(Icons.plus_one), - onPressed: () => _counter.value += 1, - ), - ), - ); - } - - Widget _buildWithValue(BuildContext context, int value, Widget? child) { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Text('$value'), - child ?? const SizedBox.shrink(), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_de_DE.json deleted file mode 100644 index a428050a4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "Widget-Inspektor", - "info": "Diese Komponente ermöglicht es Ihnen, die Hierarchie der Unterkomponenten bequem anzuzeigen und ist eine der Funktionen des Flutter Inspector-Plugins.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung des WidgetInspectors", - "desc": [ - "【child】 : Unterkomponente 【Widget】", - "【selectButtonBuilder】: *Auswahlschalter-Builder 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_en_US.json deleted file mode 100644 index d060acd53..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "Widget Inspector", - "info": "This component allows you to easily view the hierarchy of child components and is one of the features of the Flutter Inspector plugin.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of WidgetInspector", - "desc": [ - "【child】 : Child component 【Widget】", - "【selectButtonBuilder】: *Select button builder 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_es_ES.json deleted file mode 100644 index 9995d77f7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "Inspector de Componentes", - "info": "Este componente te permite ver fácilmente la jerarquía de los componentes hijos, es una de las funciones del plugin Flutter Inspector.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de WidgetInspector", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【selectButtonBuilder】: *Constructor del botón de selección 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_fr_FR.json deleted file mode 100644 index 16bdc06f0..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "Inspecteur de widgets", - "info": "Ce composant vous permet de visualiser facilement la structure hiérarchique des composants enfants, c'est l'une des fonctionnalités de l'extension Flutter Inspector.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de WidgetInspector", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【selectButtonBuilder】: *Constructeur de bouton de sélection 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_it_IT.json deleted file mode 100644 index 267ae04e7..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "Ispezione dei componenti", - "info": "Questo componente ti permette di visualizzare facilmente la struttura gerarchica dei componenti figli, è una delle funzionalità del plugin Flutter Inspector.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di WidgetInspector", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【selectButtonBuilder】: *Costruttore del pulsante di selezione 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ja_JP.json deleted file mode 100644 index 90ee326d8..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "ウィジェットインスペクター", - "info": "このコンポーネントは、子コンポーネントの階層構造を簡単に確認できるようにするもので、Flutter Inspectorプラグインの機能の一つです。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WidgetInspectorの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【selectButtonBuilder】: *選択ボタンビルダー 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ko_KR.json deleted file mode 100644 index d11114b2f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "위젯 인스펙터", - "info": "이 컴포넌트는 하위 컴포넌트 계층 구조를 쉽게 확인할 수 있게 해주며, Flutter Inspector 플러그인의 기능 중 하나입니다.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WidgetInspector 기본 사용법", - "desc": [ - "【child】 : 하위 컴포넌트 【Widget】", - "【selectButtonBuilder】: *선택 버튼 생성기 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_pt_PT.json deleted file mode 100644 index ec01c1fe2..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "Inspetor de Componentes", - "info": "Este componente permite visualizar facilmente a estrutura hierárquica dos componentes filhos, sendo uma das funcionalidades do plugin Flutter Inspector.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do WidgetInspector", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【selectButtonBuilder】: *Construtor do botão de seleção 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ru_RU.json deleted file mode 100644 index e4fce6368..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "Инспектор виджетов", - "info": "Этот компонент позволяет вам легко просматривать иерархию дочерних компонентов, что является одной из функций плагина Flutter Inspector.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование WidgetInspector", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【selectButtonBuilder】: *Конструктор кнопки выбора 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_zh-CN.json deleted file mode 100644 index 2a829b298..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 234, - "name": "WidgetInspector", - "localName": "组件检查器", - "info": "该组件可以让你很方便地查看子组件层级结构,是Flutter Inspector插件的功能之一。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WidgetInspector基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【selectButtonBuilder】: *选择按钮构造器 【InspectorSelectButtonBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/node1_base.dart deleted file mode 100644 index afb2ff41e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetInspector/node1_base.dart +++ /dev/null @@ -1,69 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/8/16 -/// contact me by email 1981462002@qq.com - -class WidgetInspectorDemo extends StatelessWidget { - const WidgetInspectorDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: WidgetInspector( - child: const HomePage(), - tapBehaviorButtonBuilder: _tapBehaviorButtonBuilder, - exitWidgetSelectionButtonBuilder: null, - moveExitWidgetSelectionButtonBuilder: _selectButtonBuilder, - ), - ); - } - - Widget _tapBehaviorButtonBuilder( - BuildContext context, { - required VoidCallback onPressed, - required bool selectionOnTapEnabled, - required String semanticsLabel, - }) { - return Container(); - } - - Widget _selectButtonBuilder(BuildContext context, - {required VoidCallback onPressed, - required String semanticsLabel, - bool? usesDefaultAlignment}) { - return Container(); - } -} - -class HomePage extends StatefulWidget { - const HomePage({Key? key}) : super(key: key); - - @override - _HomePageState createState() => _HomePageState(); -} - -class _HomePageState extends State { - int _count = 0; - - @override - Widget build(BuildContext context) { - return Scaffold( - body: Container( - alignment: const Alignment(0, 0.7), - child: Text( - '你点击了$_count次', - style: const TextStyle(fontSize: 18, color: Colors.blue), - ), - ), - floatingActionButton: FloatingActionButton( - child: const Icon(Icons.add), - onPressed: () { - setState(() { - _count++; - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_de_DE.json deleted file mode 100644 index 0386443e1..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "Widget-Anwendung", - "info": "Sammelt die Komponenten, die eine Anwendung benötigt, wie Routing, Sprache, einige Debug-Schalter usw. Es ist auch die Kernkomponente zur Implementierung von MaterialApp und CupertinoApp.", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von WidgetsApp", - "desc": [ - "【pageRouteBuilder】 : *Routing-Konstruktor 【PageRouteFactory】", - "【color】: *Farbe 【Color】", - "【debugShowWidgetInspector】: Ob der Widget-Inspektor angezeigt werden soll 【bool】", - "Andere Eigenschaften sind im Wesentlichen dieselben wie bei MaterialApp, siehe dort für weitere Details." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_en_US.json deleted file mode 100644 index 66c99748a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "Widget Application", - "info": "Collects the components needed for an application, such as routing, language, some debugging switches, etc. It is also the core component for implementing MaterialApp and CupertinoApp.", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of WidgetsApp", - "desc": [ - "【pageRouteBuilder】 : *Route Builder 【PageRouteFactory】", - "【color】: *Color 【Color】", - "【debugShowWidgetInspector】: Whether to display the widget inspector 【bool】", - "Other properties are basically the same as MaterialApp, see details there." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_es_ES.json deleted file mode 100644 index cd9836e8e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "Aplicación de Componentes", - "info": "Agrupa los componentes necesarios para una aplicación, como el enrutamiento, el idioma, algunos interruptores de depuración, etc. También es el componente central para implementar MaterialApp y CupertinoApp.", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de WidgetsApp", - "desc": [ - "【pageRouteBuilder】 : *Constructor de rutas 【PageRouteFactory】", - "【color】: *Color 【Color】", - "【debugShowWidgetInspector】: Mostrar el inspector de componentes z 【bool】", - "Otras propiedades son básicamente las mismas que MaterialApp, consulte allí para más detalles." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_fr_FR.json deleted file mode 100644 index 408c12203..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "Application de widgets", - "info": "Rassemble les composants nécessaires pour une application, tels que le routage, la langue, certains commutateurs de débogage, etc. C'est également le composant central pour la mise en œuvre de MaterialApp et CupertinoApp.", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de WidgetsApp", - "desc": [ - "【pageRouteBuilder】 : *constructeur de route 【PageRouteFactory】", - "【color】: *couleur 【Color】", - "【debugShowWidgetInspector】: afficher l'inspecteur de widgets 【bool】", - "Les autres propriétés sont essentiellement les mêmes que MaterialApp, voir cela pour plus de détails." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_it_IT.json deleted file mode 100644 index f5bc7c8f3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "Applicazione Componenti", - "info": "Raccoglie i componenti necessari per un'applicazione, come il routing, la lingua, alcuni interruttori di debug, ecc. È anche il componente centrale per implementare MaterialApp e CupertinoApp.", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di WidgetsApp", - "desc": [ - "【pageRouteBuilder】 : *Costruttore di routing 【PageRouteFactory】", - "【color】: *Colore 【Color】", - "【debugShowWidgetInspector】: Mostra l'ispettore dei componenti 【bool】", - "Le altre proprietà sono fondamentalmente le stesse di MaterialApp, vedi dettagli." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ja_JP.json deleted file mode 100644 index dca35af44..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "ウィジェットアプリ", - "info": "アプリケーションに必要な部品、例えばルーティング、言語、いくつかのデバッグスイッチなどを集めたものです。また、MaterialAppとCupertinoAppを実現するためのコアコンポーネントでもあります。", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WidgetsApp基本使用", - "desc": [ - "【pageRouteBuilder】 : *ルーティングビルダー 【PageRouteFactory】", - "【color】: *色 【Color】", - "【debugShowWidgetInspector】: ウィジェットインスペクターを表示するかどうか 【bool】", - "その他の属性は基本的にMaterialAppと同じです。詳細はそちらをご覧ください。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ko_KR.json deleted file mode 100644 index 709d0d738..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "위젯 앱", - "info": "앱에 필요한 구성 요소, 예를 들어 라우팅, 언어, 일부 디버그 스위치 등을 모아놓은 것입니다. 또한 MaterialApp과 CupertinoApp을 구현하는 핵심 구성 요소입니다.", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WidgetsApp 기본 사용법", - "desc": [ - "【pageRouteBuilder】 : *라우트 빌더 【PageRouteFactory】", - "【color】: *색상 【Color】", - "【debugShowWidgetInspector】: 위젯 인스펙터 표시 여부 【bool】", - "기타 속성은 기본적으로 MaterialApp과 동일하므로 자세한 내용은 해당 문서를 참조하세요." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_pt_PT.json deleted file mode 100644 index 0d9c10318..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "Aplicação de Componentes", - "info": "Agrega os componentes necessários para uma aplicação, como roteamento, idioma, alguns interruptores de depuração, etc. Também é o componente central para implementar MaterialApp e CupertinoApp.", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do WidgetsApp", - "desc": [ - "【pageRouteBuilder】 : *Construtor de Rota 【PageRouteFactory】", - "【color】: *Cor 【Color】", - "【debugShowWidgetInspector】: Mostrar o inspetor de componentes 【bool】", - "Outras propriedades são basicamente as mesmas que MaterialApp, consulte para mais detalhes." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ru_RU.json deleted file mode 100644 index b72df5d01..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "Приложение виджетов", - "info": "Собирает компоненты, необходимые для приложения, такие как маршрутизация, язык, некоторые отладочные переключатели и т.д. Также является основным компонентом для реализации MaterialApp и CupertinoApp.", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование WidgetsApp", - "desc": [ - "【pageRouteBuilder】 : *Конструктор маршрутов 【PageRouteFactory】", - "【color】: *Цвет 【Color】", - "【debugShowWidgetInspector】: Показывать ли инспектор виджетов 【bool】", - "Другие свойства в основном совпадают с MaterialApp, подробнее см. там." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_zh-CN.json deleted file mode 100644 index 6c4c0011a..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 236, - "name": "WidgetsApp", - "localName": "组件应用", - "info": "集合一个应用程序需要的部件,如路由、语言、一些调试开关等。也是实现MaterialApp和CupertinoApp的核心组件。", - "lever": 2, - "family": 1, - "linkIds": [ - 65, - 156 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WidgetsApp基本使用", - "desc": [ - "【pageRouteBuilder】 : *路由构造器 【PageRouteFactory】", - "【color】: *颜色 【Color】", - "【debugShowWidgetInspector】: 是否显示z组件查看器 【bool】", - "其他属性基本上同MaterialApp,详见之。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/node1_base.dart deleted file mode 100644 index 608948c7b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WidgetsApp/node1_base.dart +++ /dev/null @@ -1,123 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/8/16 -/// contact me by email 1981462002@qq.com - -class WidgetsAppDemo extends StatefulWidget { - const WidgetsAppDemo({Key? key}) : super(key: key); - - @override - _WidgetsAppDemoState createState() => _WidgetsAppDemoState(); -} - -class _WidgetsAppDemoState extends State { - bool _debugShowCheckedModeBanner = false; - bool _debugShowWidgetInspector = false; - bool _showPerformanceOverlay = false; - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - _buildSwitchers(), - SizedBox( - height: 250, - child: WidgetsApp( - color: Colors.blue, - debugShowCheckedModeBanner: _debugShowCheckedModeBanner, - showPerformanceOverlay: _showPerformanceOverlay, - debugShowWidgetInspector: _debugShowWidgetInspector, - pageRouteBuilder: - (RouteSettings settings, WidgetBuilder builder) { - return MaterialPageRoute(settings: settings, builder: builder); - }, - home: const HomePage(), - ), - ), - ], - ); - } - - Widget _buildSwitchers() { - return DefaultTextStyle( - style: const TextStyle(color: Colors.blue), - child: Wrap( - spacing: 10, - children: [ - Column( - children: [ - Switch( - value: _showPerformanceOverlay, - onChanged: (v) { - setState(() { - _showPerformanceOverlay = v; - }); - }, - ), - const Text('性能浮层') - ], - ), - Column( - children: [ - Switch( - value: _debugShowCheckedModeBanner, - onChanged: (v) { - setState(() { - _debugShowCheckedModeBanner = v; - }); - }, - ), - const Text('开启角标') - ], - ), - Column( - children: [ - Switch( - value: _debugShowWidgetInspector, - onChanged: (v) { - setState(() { - _debugShowWidgetInspector = v; - }); - }, - ), - const Text('检查器') - ], - ) - ], - ), - ); - } -} - -class HomePage extends StatefulWidget { - const HomePage({Key? key}) : super(key: key); - - @override - _HomePageState createState() => _HomePageState(); -} - -class _HomePageState extends State { - int _count = 0; - - @override - Widget build(BuildContext context) { - return Scaffold( - body: Container( - alignment: const Alignment(0, 0.7), - child: Text( - '你点击了$_count次', - style: const TextStyle(fontSize: 18, color: Colors.blue), - ), - ), - floatingActionButton: FloatingActionButton( - child: const Icon(Icons.add), - onPressed: () { - setState(() { - _count++; - }); - }, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_de_DE.json deleted file mode 100644 index 90b0bf148..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "Rückkehrblockierung", - "info": "Wenn eine Oberfläche eine WillPopScope-Komponente enthält, wird beim Zurückkehren der Seite ein Callback ausgelöst, um zu entscheiden, ob zurückgekehrt werden soll. Kann für Szenarien verwendet werden, in denen ein erneutes Bestätigen des Verlassens erforderlich ist.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WillPopScope Verwendung", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onWillPop】 : Rückkehr-Callback 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_en_US.json deleted file mode 100644 index f1db277ef..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "Return Intercept", - "info": "When a WillPopScope component is present in an interface, a callback is triggered when the page returns, determining whether to return. It can be used for scenarios requiring secondary confirmation before exiting.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WillPopScope Usage", - "desc": [ - "【child】: Child component 【Widget】", - "【onWillPop】: Return callback 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_es_ES.json deleted file mode 100644 index 64fbbb6fd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "Intercepción de retorno", - "info": "Cuando hay un componente WillPopScope en una interfaz, se activará una devolución de llamada al regresar de la página para decidir si se debe regresar. Se puede utilizar en escenarios de confirmación secundaria para salir.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de WillPopScope", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onWillPop】 : Devolución de llamada 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_fr_FR.json deleted file mode 100644 index 539be6bf9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "Interception de retour", - "info": "Lorsqu'un composant WillPopScope est présent dans une interface, un rappel est déclenché lors du retour à la page pour décider si le retour doit être effectué. Peut être utilisé pour des scénarios de confirmation de sortie.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de WillPopScope", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onWillPop】 : Rappel de retour 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_it_IT.json deleted file mode 100644 index 2ab9a79c4..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "Intercettazione di ritorno", - "info": "Quando un'interfaccia contiene il componente WillPopScope, viene attivato un callback al momento del ritorno alla pagina, decidendo se tornare indietro. Può essere utilizzato per scenari di conferma di uscita secondaria.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di WillPopScope", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onWillPop】 : Callback di ritorno 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ja_JP.json deleted file mode 100644 index 9044470ae..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "戻り防止", - "info": "インターフェースにWillPopScopeコンポーネントがある場合、ページが戻るときにコールバックがトリガーされ、戻るかどうかを決定します。二次確認して退出するシナリオに使用できます。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WillPopScopeの使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onWillPop】 : 戻りコールバック 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ko_KR.json deleted file mode 100644 index 66971d92f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "뒤로 가기 차단", - "info": "인터페이스에 WillPopScope 컴포넌트가 있을 때, 페이지에서 뒤로 가기를 시도하면 콜백이 트리거되어 뒤로 갈지 여부를 결정합니다. 이는 두 번째로 종료를 확인하는 시나리오에 사용할 수 있습니다.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WillPopScope 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【onWillPop】 : 뒤로 가기 콜백 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_pt_PT.json deleted file mode 100644 index e99f89658..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "Interceptar Retorno", - "info": "Quando há um componente WillPopScope numa interface, o callback é acionado ao retornar à página, decidindo se deve retornar. Pode ser usado em cenários de confirmação secundária de saída.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do WillPopScope", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onWillPop】 : Callback de retorno 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ru_RU.json deleted file mode 100644 index cf2110dfd..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "Перехват возврата", - "info": "Когда на интерфейсе присутствует компонент WillPopScope, при возврате на страницу срабатывает обратный вызов, который определяет, следует ли возвращаться. Может использоваться для сценариев повторного подтверждения выхода.", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование WillPopScope", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onWillPop】 : Обратный вызов возврата 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_zh-CN.json deleted file mode 100644 index bc4572ff9..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 170, - "name": "WillPopScope", - "localName": "返回拦截", - "info": "当一个界面中有WillPopScope组件时,在页面返回时会触发回调,决定是否返回。可用于二次确认退出的场景。", - "lever": 5, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "WillPopScope使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onWillPop】 : 返回回调 【WillPopCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/node1_base.dart deleted file mode 100644 index 46b0e8270..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/WillPopScope/node1_base.dart +++ /dev/null @@ -1,41 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class CustomWillPopScope extends StatelessWidget { - const CustomWillPopScope({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return WillPopScope( - child: const BackButton(), - onWillPop: () => _willPop(context), - ); - } - - Future _willPop(context) async { - bool? exit = await showDialog( - context: context, - builder: (ctx) => AlertDialog( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10))), - title: const Text('提示'), - content: const Text('你确定要离开此页吗?'), - actions: [ - ElevatedButton( - onPressed: () => Navigator.of(ctx).pop(true), - child: const Text('确定'), - ), - ElevatedButton( - onPressed: () => Navigator.of(ctx).pop(false), - child: const Text('取消'), - ), - ], - ), - ); - print('====_willPop==:$exit========'); - - return exit??false; - } -} diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_de_DE.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_de_DE.json deleted file mode 100644 index 6503e5cb3..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "Jahresauswahl", - "info": "Komponente zur Auswahl des Jahres, sieht etwas bescheiden aus. Kann den auszuwählenden Datumsbereich, das ausgewählte Datum usw. festlegen und empfängt jedes Auswahlereignis", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von YearPicker", - "desc": [ - "【selectedDate】 : Ausgewähltes Datum 【DateTime】", - "【firstDate】 : Frühestes Datum 【DateTime】", - "【lastDate】 : Spätestes Datum 【DateTime】", - "【onChanged】 : Klick-Rückruf 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_en_US.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_en_US.json deleted file mode 100644 index 429a28280..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "Year Picker", - "info": "A component for selecting years, with a rather modest appearance. It allows specifying the date range for selection, selected dates, etc., and receives each selection event.", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of YearPicker", - "desc": [ - "【selectedDate】: Selected date 【DateTime】", - "【firstDate】: First date limit 【DateTime】", - "【lastDate】: Last date limit 【DateTime】", - "【onChanged】: Click callback 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_es_ES.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_es_ES.json deleted file mode 100644 index 119ce9427..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "Selector de año", - "info": "Componente de selección de año, de apariencia modesta. Permite especificar el rango de fechas seleccionables, la fecha seleccionada, etc., y recibe cada evento de selección.", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de YearPicker", - "desc": [ - "【selectedDate】 : Fecha seleccionada 【DateTime】", - "【firstDate】 : Límite de la primera fecha 【DateTime】", - "【lastDate】 : Límite de la última fecha 【DateTime】", - "【onChanged】 : Callback al hacer clic 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_fr_FR.json deleted file mode 100644 index a4c3fa06c..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "Sélecteur d'année", - "info": "Composant de sélection d'année, d'apparence modeste. Permet de spécifier la plage de dates sélectionnables, la date sélectionnée, etc., et reçoit chaque événement de sélection.", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de YearPicker", - "desc": [ - "【selectedDate】 : Date sélectionnée 【DateTime】", - "【firstDate】 : Limite de la première date 【DateTime】", - "【lastDate】 : Limite de la dernière date 【DateTime】", - "【onChanged】 : Rappel au clic 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_it_IT.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_it_IT.json deleted file mode 100644 index 40602596b..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "Selettore Anno", - "info": "Componente per la selezione dell'anno, dall'aspetto modesto. Consente di specificare l'intervallo di date selezionabili, la data selezionata, ecc., e riceve ogni evento di selezione.", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo Base di YearPicker", - "desc": [ - "【selectedDate】 : Data selezionata 【DateTime】", - "【firstDate】 : Limite data iniziale 【DateTime】", - "【lastDate】 : Limite data finale 【DateTime】", - "【onChanged】 : Callback al click 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ja_JP.json deleted file mode 100644 index e7ea91c28..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "年ピッカー", - "info": "年の選択コンポーネントで、見た目はやや地味です。選択可能な日付範囲や選択された日付などを指定でき、選択イベントを受け取ります。", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "YearPickerの基本使用", - "desc": [ - "【selectedDate】 : 選択された日付 【DateTime】", - "【firstDate】 : 最初の日付制限 【DateTime】", - "【lastDate】 : 最後の日付制限 【DateTime】", - "【onChanged】 : クリックコールバック 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ko_KR.json deleted file mode 100644 index 5c0dadd5e..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "연도 선택기", - "info": "연도를 선택하는 컴포넌트로, 외관이 다소 허술합니다. 선택 가능한 날짜 범위, 선택된 날짜 등을 지정할 수 있으며, 선택 이벤트를 수신합니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "YearPicker 기본 사용법", - "desc": [ - "【selectedDate】 : 선택된 날짜 【DateTime】", - "【firstDate】 : 최초 날짜 제한 【DateTime】", - "【lastDate】 : 최종 날짜 제한 【DateTime】", - "【onChanged】 : 클릭 콜백 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_pt_PT.json deleted file mode 100644 index 939488739..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "Seletor de Ano", - "info": "Componente de seleção de ano, com uma aparência bastante simples. Permite especificar o intervalo de datas, a data selecionada, entre outros, e recebe eventos de seleção.", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do YearPicker", - "desc": [ - "【selectedDate】 : Data selecionada 【DateTime】", - "【firstDate】 : Limite da data mais antiga 【DateTime】", - "【lastDate】 : Limite da data mais recente 【DateTime】", - "【onChanged】 : Callback de clique 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ru_RU.json deleted file mode 100644 index 3b713079f..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "Выбор года", - "info": "Компонент для выбора года, выглядит довольно скромно. Можно указать диапазон дат, выбранную дату и т.д., принимает каждое событие выбора", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование YearPicker", - "desc": [ - "【selectedDate】 : Выбранная дата 【DateTime】", - "【firstDate】 : Ограничение на самую раннюю дату 【DateTime】", - "【lastDate】 : Ограничение на самую позднюю дату 【DateTime】", - "【onChanged】 : Обратный вызов при нажатии 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_zh-CN.json deleted file mode 100644 index d83324632..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 136, - "name": "YearPicker", - "localName": "年份选择器", - "info": "年份的选择组件,长相比较寒酸。可指定选择的日期范围、选中日期等,接收每份选中事件", - "lever": 3, - "family": 1, - "linkIds": [ - 134, - 135 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "YearPicker基本使用", - "desc": [ - "【selectedDate】 : 选中日期 【DateTime】", - "【firstDate】 : 最前日期限制 【DateTime】", - "【lastDate】 : 最后日期限制 【DateTime】", - "【onChanged】 : 点击回调 【Function(DateTime)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/node1_base.dart b/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/node1_base.dart deleted file mode 100644 index a3e83334d..000000000 --- a/modules/widget_system/widgets/lib/StatefulWidget/YearPicker/node1_base.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomYearPicker extends StatefulWidget { - const CustomYearPicker({Key? key}) : super(key: key); - - @override - _CustomYearPickerState createState() => _CustomYearPickerState(); -} - -class _CustomYearPickerState extends State { - DateTime _date = DateTime.now(); - - @override - Widget build(BuildContext context) { - return SizedBox( - height:150, - child: YearPicker( - selectedDate: _date, - onChanged: (date) => setState(() => _date = date), - firstDate: DateTime(2018), - lastDate: DateTime(2030), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_de_DE.json deleted file mode 100644 index 9bd458ba8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "Über Dialog", - "info": "Ein Dialogfeld zur Anwendungsbeschreibung, in dem das Anwendungssymbol, der Anwendungsname, die Anwendungsversionsnummer und andere Informationen sowie eine Liste von internen Unterkomponenten angegeben werden können. Durch Klicken auf die Schaltfläche auf der linken Seite gelangen Sie zur Zertifikatsseite.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AboutDialog", - "desc": [ - "【applicationIcon】 : Symbol oben links 【Widget】", - "【applicationVersion】 : Versionsnummer 【String】", - "【applicationName】 : Anwendungsname 【String】", - "【applicationLegalese】 : Anwendungsrecht 【String】", - "【children】 : Liste der Unterkomponenten 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_en_US.json deleted file mode 100644 index f21a172c2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "About Dialog", - "info": "The application's introduction dialog, which can specify the application icon, application name, application version number, and other information, as well as the internal sub-component list. Clicking the button on the left can navigate to the certificate page.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AboutDialog", - "desc": [ - "【applicationIcon】: Top-left icon 【Widget】", - "【applicationVersion】: Version number 【String】", - "【applicationName】: Application name 【String】", - "【applicationLegalese】: Application legal terms 【String】", - "【children】: Sub-component list 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_es_ES.json deleted file mode 100644 index ba17fb88a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "Diálogo Acerca de", - "info": "Diálogo de introducción de la aplicación, donde se pueden especificar el icono de la aplicación, el nombre de la aplicación, el número de versión de la aplicación y otra información, así como una lista de subcomponentes internos. Al hacer clic en el botón de la izquierda, se puede acceder a la página de certificados.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AboutDialog", - "desc": [ - "【applicationIcon】 : Icono superior izquierdo 【Widget】", - "【applicationVersion】 : Número de versión 【String】", - "【applicationName】 : Nombre de la aplicación 【String】", - "【applicationLegalese】 : Legalidad de la aplicación 【String】", - "【children】 : Lista de subcomponentes 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_fr_FR.json deleted file mode 100644 index d249dda31..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "Dialogue À Propos", - "info": "La boîte de dialogue de présentation de l'application, qui peut spécifier l'icône de l'application, le nom de l'application, le numéro de version de l'application et d'autres informations ainsi que la liste des sous-composants internes. Cliquer sur le bouton de gauche permet de naviguer vers la page des licences.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AboutDialog", - "desc": [ - "【applicationIcon】 : Icône en haut à gauche 【Widget】", - "【applicationVersion】 : Numéro de version 【String】", - "【applicationName】 : Nom de l'application 【String】", - "【applicationLegalese】 : Mentions légales de l'application 【String】", - "【children】 : Liste des sous-composants 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_it_IT.json deleted file mode 100644 index cbae88eac..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "Finestra Informazioni", - "info": "La finestra di dialogo delle informazioni sull'applicazione, che consente di specificare l'icona dell'applicazione, il nome dell'applicazione, il numero di versione dell'applicazione e altre informazioni, nonché l'elenco dei componenti interni. Cliccando sul pulsante a sinistra è possibile accedere alla pagina delle licenze.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AboutDialog", - "desc": [ - "【applicationIcon】 : Icona in alto a sinistra 【Widget】", - "【applicationVersion】 : Numero di versione 【String】", - "【applicationName】 : Nome dell'applicazione 【String】", - "【applicationLegalese】 : Informazioni legali dell'applicazione 【String】", - "【children】 : Lista dei componenti figli 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ja_JP.json deleted file mode 100644 index b0ca35053..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "ダイアログについて", - "info": "アプリケーションの概要ダイアログで、アプリケーションのアイコン、アプリケーション名、アプリケーションのバージョン番号などの情報と内部のサブコンポーネントリストを指定できます。左側のボタンをクリックすると、証明書ページにジャンプします。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AboutDialogの基本使用", - "desc": [ - "【applicationIcon】 : 左上アイコン 【Widget】", - "【applicationVersion】 : バージョン番号 【String】", - "【applicationName】 : アプリケーション名 【String】", - "【applicationLegalese】 : アプリケーションの法律 【String】", - "【children】 : サブコンポーネントリスト 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ko_KR.json deleted file mode 100644 index 453ec3396..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "정보 대화 상자", - "info": "애플리케이션의 정보 대화 상자로, 애플리케이션 아이콘, 애플리케이션 이름, 애플리케이션 버전 번호 등의 정보와 내부의 하위 구성 요소 목록을 지정할 수 있습니다. 왼쪽 버튼을 클릭하면 인증서 페이지로 이동할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AboutDialog 기본 사용", - "desc": [ - "【applicationIcon】 : 왼쪽 상단 아이콘 【Widget】", - "【applicationVersion】 : 버전 번호 【String】", - "【applicationName】 : 애플리케이션 이름 【String】", - "【applicationLegalese】 : 애플리케이션 법률 정보 【String】", - "【children】 : 하위 구성 요소 목록 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_pt_PT.json deleted file mode 100644 index 996e65a65..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "Diálogo Sobre", - "info": "Diálogo de introdução da aplicação, que pode especificar o ícone da aplicação, nome da aplicação, número da versão da aplicação e outras informações, bem como a lista de subcomponentes internos. Clicar no botão esquerdo pode saltar para a página de licenças.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do AboutDialog", - "desc": [ - "【applicationIcon】 : Ícone superior esquerdo 【Widget】", - "【applicationVersion】 : Número da versão 【String】", - "【applicationName】 : Nome da aplicação 【String】", - "【applicationLegalese】 : Legislação da aplicação 【String】", - "【children】 : Lista de subcomponentes 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ru_RU.json deleted file mode 100644 index d1fda7b5c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "О диалоговом окне", - "info": "Диалоговое окно с описанием приложения, в котором можно указать значок приложения, название приложения, версию приложения и другие данные, а также список внутренних дочерних компонентов. Нажатие на кнопку слева позволяет перейти на страницу лицензии.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AboutDialog", - "desc": [ - "【applicationIcon】 : Иконка в верхнем левом углу 【Widget】", - "【applicationVersion】 : Номер версии 【String】", - "【applicationName】 : Название приложения 【String】", - "【applicationLegalese】 : Юридическая информация приложения 【String】", - "【children】 : Список дочерних компонентов 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_zh-CN.json deleted file mode 100644 index 8dd6cffe7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 130, - "name": "AboutDialog", - "localName": "关于对话框", - "info": "应用的简介对话框,可指定应用图标、应用名、应用版本号等信息和内部的子组件列表,点击左侧按钮可以跳转到证书页。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AboutDialog基本使用", - "desc": [ - "【applicationIcon】 : 左上图标 【Widget】", - "【applicationVersion】 : 版本号 【String】", - "【applicationName】 : 应用名 【String】", - "【applicationLegalese】 : 应用律术 【String】", - "【children】 : 子组件列表 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/node1_base.dart deleted file mode 100644 index 2a1cb9023..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutDialog/node1_base.dart +++ /dev/null @@ -1,65 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -class CustomAboutDialog extends StatelessWidget { - const CustomAboutDialog({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Stack( - children: [ - _buildAboutDialog(), - Positioned(top: 50, right: 20, child: _buildRaisedButton(context)), - ], - ); - } - - Widget _buildRaisedButton(BuildContext context) => ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)), - ), - ), - onPressed: () { - showDialog(context: context, builder: (ctx) => _buildAboutDialog()); - }, - child: const Text( - 'Just Show It', - style: TextStyle(color: Colors.white), - ), - ); - - AboutDialog _buildAboutDialog() { - return AboutDialog( - applicationIcon: const FlutterLogo(), - applicationVersion: 'v0.0.1', - applicationName: 'Flutter Unit', - applicationLegalese: 'Copyright© 2018-2024 张风捷特烈', - children: [ - Container( - margin: const EdgeInsets.only(top: 20), - width: 80, - height: 80, - child: Image.asset('assets/images/icon_head.webp')), - Container( - margin: const EdgeInsets.only(top: 10), - alignment: Alignment.center, - child: const Text( - 'The King Of Coder.', - style: TextStyle( - color: Colors.white, - fontSize: 20, - shadows: [ - Shadow( - color: Colors.blue, offset: Offset(.5, .5), blurRadius: 3) - ], - ), - )) - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_de_DE.json deleted file mode 100644 index 2b309c554..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "Über App-Eintrag", - "info": "Ein Klickelement, das beim Klicken Anwendungsinformationen anzeigen kann. Es können Anwendungssymbole, Anwendungsname, Anwendungsversionsnummer und andere Informationen sowie die interne Liste der Unterkomponenten angegeben werden.", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AboutListTile", - "desc": [ - "【icon】 : Linkes Symbol 【Widget】", - "【applicationIcon】 : Symbol oben links 【Widget】", - "【applicationVersion】 : Versionsnummer 【String】", - "【applicationName】 : Anwendungsname 【String】", - "【applicationLegalese】 : Anwendungsrecht 【String】", - "【aboutBoxChildren】 : Inhaltskomponenten des Popup-Fensters 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_en_US.json deleted file mode 100644 index 2897d0091..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "About App Entry", - "info": "A clickable entry that can pop up application-related information when clicked. It can specify the application icon, application name, application version number, and other information, as well as a list of internal child components.", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AboutListTile", - "desc": [ - "【icon】 : Left icon 【Widget】", - "【applicationIcon】 : Top-left icon 【Widget】", - "【applicationVersion】 : Version number 【String】", - "【applicationName】 : Application name 【String】", - "【applicationLegalese】 : Application legalese 【String】", - "【aboutBoxChildren】 : Dialog content components 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_es_ES.json deleted file mode 100644 index 7a964f251..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "Entrada sobre la aplicación", - "info": "Una entrada en la que se puede hacer clic para mostrar información relacionada con la aplicación. Se pueden especificar el icono de la aplicación, el nombre de la aplicación, el número de versión y otros detalles, así como una lista de componentes internos.", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AboutListTile", - "desc": [ - "【icon】 : Icono izquierdo 【Widget】", - "【applicationIcon】 : Icono superior izquierdo 【Widget】", - "【applicationVersion】 : Número de versión 【String】", - "【applicationName】 : Nombre de la aplicación 【String】", - "【applicationLegalese】 : Legal de la aplicación 【String】", - "【aboutBoxChildren】 : Componentes del contenido del cuadro emergente 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_fr_FR.json deleted file mode 100644 index 579c45e74..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "Élément À Propos de l'Application", - "info": "Un élément cliquable qui peut afficher des informations sur l'application lorsqu'il est cliqué. Peut spécifier l'icône de l'application, le nom de l'application, le numéro de version de l'application et d'autres informations ainsi qu'une liste de composants internes.", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de AboutListTile", - "desc": [ - "【icon】 : Icône gauche 【Widget】", - "【applicationIcon】 : Icône en haut à gauche 【Widget】", - "【applicationVersion】 : Numéro de version 【String】", - "【applicationName】 : Nom de l'application 【String】", - "【applicationLegalese】 : Législation de l'application 【String】", - "【aboutBoxChildren】 : Composants du contenu de la boîte de dialogue 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_it_IT.json deleted file mode 100644 index 79a4be64a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "Voce di menu Informazioni", - "info": "Una voce cliccabile che, quando viene cliccata, può visualizzare informazioni relative all'applicazione, specificando icone dell'applicazione, nome dell'applicazione, numero di versione e un elenco di componenti interni.", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AboutListTile", - "desc": [ - "【icon】 : Icona a sinistra 【Widget】", - "【applicationIcon】 : Icona in alto a sinistra 【Widget】", - "【applicationVersion】 : Numero di versione 【String】", - "【applicationName】 : Nome dell'applicazione 【String】", - "【applicationLegalese】 : Legale dell'applicazione 【String】", - "【aboutBoxChildren】 : Componenti del contenuto della finestra 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ja_JP.json deleted file mode 100644 index f1a378468..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "アプリについてのリストアイテム", - "info": "クリックするとアプリの関連情報をポップアップ表示するアイテムで、アプリアイコン、アプリ名、アプリバージョン番号などの情報と内部のサブコンポーネントリストを指定できます。", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AboutListTileの基本的な使用", - "desc": [ - "【icon】 : 左アイコン 【Widget】", - "【applicationIcon】 : 左上アイコン 【Widget】", - "【applicationVersion】 : バージョン番号 【String】", - "【applicationName】 : アプリ名 【String】", - "【applicationLegalese】 : アプリの法律情報 【String】", - "【aboutBoxChildren】 : ポップアップボックスの内容コンポーネント 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ko_KR.json deleted file mode 100644 index 1d3800ee3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "앱 정보 항목", - "info": "클릭 시 앱 관련 정보를 팝업할 수 있는 클릭 항목으로, 앱 아이콘, 앱 이름, 앱 버전 번호 등의 정보와 내부 하위 컴포넌트 목록을 지정할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AboutListTile 기본 사용법", - "desc": [ - "【icon】 : 왼쪽 아이콘 【Widget】", - "【applicationIcon】 : 왼쪽 상단 아이콘 【Widget】", - "【applicationVersion】 : 버전 번호 【String】", - "【applicationName】 : 앱 이름 【String】", - "【applicationLegalese】 : 앱 법률 정보 【String】", - "【aboutBoxChildren】 : 팝업 내용 컴포넌트 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_pt_PT.json deleted file mode 100644 index 28794038e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "Item sobre a aplicação", - "info": "Um item clicável que, ao ser clicado, exibe informações sobre a aplicação, podendo especificar ícone da aplicação, nome da aplicação, número da versão e uma lista de componentes internos.", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do AboutListTile", - "desc": [ - "【icon】 : Ícone esquerdo 【Widget】", - "【applicationIcon】 : Ícone superior esquerdo 【Widget】", - "【applicationVersion】 : Número da versão 【String】", - "【applicationName】 : Nome da aplicação 【String】", - "【applicationLegalese】 : Legislação da aplicação 【String】", - "【aboutBoxChildren】 : Componentes do conteúdo da caixa de diálogo 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ru_RU.json deleted file mode 100644 index ad830b435..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "О приложении", - "info": "Элемент, при нажатии на который отображается информация о приложении, можно указать значок приложения, имя приложения, версию приложения и другие данные, а также список внутренних компонентов.", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AboutListTile", - "desc": [ - "【icon】 : Левый значок 【Widget】", - "【applicationIcon】 : Левый верхний значок 【Widget】", - "【applicationVersion】 : Номер версии 【String】", - "【applicationName】 : Имя приложения 【String】", - "【applicationLegalese】 : Юридическая информация приложения 【String】", - "【aboutBoxChildren】 : Компоненты содержимого всплывающего окна 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_zh-CN.json deleted file mode 100644 index 5fe2f3b31..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 193, - "name": "AboutListTile", - "localName": "关于应用条目", - "info": "一个点击条目,点击时可以弹出应用相关信息,可指定应用图标、应用名、应用版本号等信息和内部的子组件列表。", - "lever": 3, - "family": 0, - "linkIds": [ - 130, - 145 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AboutListTile基本使用", - "desc": [ - "【icon】 : 左图标 【Widget】", - "【applicationIcon】 : 左上图标 【Widget】", - "【applicationVersion】 : 版本号 【String】", - "【applicationName】 : 应用名 【String】", - "【applicationLegalese】 : 应用律术 【String】", - "【aboutBoxChildren】 : 弹框内容组件 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/node1_base.dart deleted file mode 100644 index 292665452..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AboutListTile/node1_base.dart +++ /dev/null @@ -1,34 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -class AboutListTileDemo extends StatelessWidget { - const AboutListTileDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const AboutListTile( - icon: Icon(Icons.info), - applicationIcon: FlutterLogo(), - applicationName: 'Flutter Unit', - applicationVersion: 'v0.0.1', - applicationLegalese: 'Copyright© 2018-2024 张风捷特烈', - aboutBoxChildren: [ - Padding( - padding: EdgeInsets.all(10.0), - child: Text( - ' FlutterUnit是【张风捷特烈】的开源项目,' - '收录Flutter的300+组件,并附加详细介绍以及操作交互,' - '希望帮助广大编程爱好者入门Flutter。' - '更多知识可以关注掘金账号、公众号【编程之王】。', - style: TextStyle(color: Color(0xff999999), fontSize: 16), - textAlign: TextAlign.justify, - ), - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_de_DE.json deleted file mode 100644 index 696855538..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_de_DE.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "Ereignis-Chip", - "info": "Ähnlich wie die Chip-Komponente, aber mit einigen Klick-Eigenschaften. Kann die Schattentiefe beim Klicken und das Klick-Ereignis festlegen.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Normale Darstellung des ActionChip", - "desc": [ - "【onPressed】: Klick-Ereignis 【Function】", - "【pressElevation】: Schattentiefe beim Drücken 【double】", - "Andere Eigenschaften sind identisch mit der Chip-Komponente, keine rechte Komponente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_en_US.json deleted file mode 100644 index 245828d9c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_en_US.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "Action Chip", - "info": "Similar style to the Chip component, with some clickable properties. You can specify the shadow depth and click event when pressed.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "The normal performance of ActionChip is as follows", - "desc": [ - "【onPressed】: Click event 【Function】", - "【pressElevation】: Shadow depth when pressed 【double】", - "Other properties are the same as the Chip component, no right component." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_es_ES.json deleted file mode 100644 index c78651623..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_es_ES.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "Chip de Acción", - "info": "Estilo similar al componente Chip, con algunas propiedades de clic. Puede especificar la profundidad de la sombra al hacer clic y el evento de clic.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "El comportamiento normal de ActionChip es el siguiente", - "desc": [ - "【onPressed】: Evento de clic 【Function】", - "【pressElevation】: Profundidad de la sombra al presionar 【double】", - "Otras propiedades son iguales al componente Chip, sin componente derecho." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_fr_FR.json deleted file mode 100644 index 6dc10d3b4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_fr_FR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "Chip d'action", - "info": "Un style similaire au composant Chip, avec des propriétés de clic. Vous pouvez spécifier la profondeur de l'ombre lors du clic et l'événement de clic.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La représentation normale de l'ActionChip est la suivante", - "desc": [ - "【onPressed】: Événement de clic 【Function】", - "【pressElevation】: Profondeur de l'ombre lors de la pression 【double】", - "Les autres propriétés sont identiques au composant Chip, sans composant à droite." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_it_IT.json deleted file mode 100644 index 02508a485..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_it_IT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "Chip di Azione", - "info": "Uno stile simile al componente Chip, con alcune proprietà di clic. È possibile specificare la profondità dell'ombra al clic e l'evento di clic.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La rappresentazione normale di ActionChip è la seguente", - "desc": [ - "【onPressed】: Evento di clic 【Function】", - "【pressElevation】: Profondità dell'ombra al clic 【double】", - "Altre proprietà sono simili al componente Chip, senza componente a destra." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ja_JP.json deleted file mode 100644 index cd38faba7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ja_JP.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "アクションチップ", - "info": "Chipコンポーネントに似たスタイルで、いくつかのクリック属性があります。クリック時の影の深さやクリックイベントを指定できます。", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ActionChipの通常の表現は以下の通りです", - "desc": [ - "【onPressed】: クリックイベント 【Function】", - "【pressElevation】: 押下時の影の深さ 【double】", - "その他の属性はChipコンポーネントと同じで、右側のコンポーネントはありません。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ko_KR.json deleted file mode 100644 index de66f0737..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ko_KR.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "이벤트 칩", - "info": "Chip 컴포넌트와 유사한 스타일로, 클릭 속성이 있습니다. 클릭 시 그림자 깊이와 클릭 이벤트를 지정할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ActionChip의 일반적인 표현은 다음과 같습니다", - "desc": [ - "【onPressed】: 클릭 이벤트 【Function】", - "【pressElevation】: 눌렀을 때 그림자 깊이 【double】", - "기타 속성은 Chip 컴포넌트와 동일하며, 오른쪽 컴포넌트가 없습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_pt_PT.json deleted file mode 100644 index b11af7dc6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_pt_PT.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "Chip de Ação", - "info": "Estilo semelhante ao componente Chip, com algumas propriedades de clique. Pode especificar a profundidade da sombra ao clicar e o evento de clique.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "A aparência normal do ActionChip é a seguinte", - "desc": [ - "【onPressed】: Evento de clique 【Function】", - "【pressElevation】: Profundidade da sombra ao pressionar 【double】", - "Outras propriedades são iguais ao componente Chip, sem componente à direita." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ru_RU.json deleted file mode 100644 index 5c34b9fdd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_ru_RU.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "Чип действия", - "info": "Стиль, похожий на компонент Chip, с некоторыми свойствами для нажатия. Можно указать глубину тени при нажатии и событие нажатия.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Обычное поведение ActionChip выглядит следующим образом", - "desc": [ - "【onPressed】: Событие нажатия 【Function】", - "【pressElevation】: Глубина тени при нажатии 【double】", - "Другие свойства такие же, как у компонента Chip, без правого компонента." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_zh-CN.json deleted file mode 100644 index 64440ef30..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/desc_zh-CN.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "id": 13, - "name": "ActionChip", - "localName": "事件小条", - "info": "和Chip组件类似的样式,有一些点击的属性。可以指定点击时的阴影深、点击事件。", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 12, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ActionChip的普通表现如下", - "desc": [ - "【onPressed】: 点击事件 【Function】", - "【pressElevation】: 按下时影深 【double】", - "其他属性同Chip组件,无右侧组件。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/node1_base.dart deleted file mode 100644 index b384b8901..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ActionChip/node1_base.dart +++ /dev/null @@ -1,29 +0,0 @@ - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -/// - - -import 'package:flutter/material.dart'; -import 'package:widgets/utils/dialog_about.dart'; - - -class CustomActionChip extends StatelessWidget { - const CustomActionChip({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ActionChip( - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(3), - label: const Text("This is a ActionChip."), - backgroundColor: Colors.grey.withAlpha(66), - avatar: Image.asset("assets/images/icon_head.webp"), - shadowColor: Colors.orangeAccent, - elevation: 3, - pressElevation: 5, - onPressed: ()=> DialogAbout.show(context), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_de_DE.json deleted file mode 100644 index 2cf8152a8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "Dialogfeld", - "info": "Eine allgemeine Dialogstruktur, die Komponenten im Kopf-, Mittel- und Fußbereich angeben kann. Verfügt über Textstile und Ränder für Titel und Inhalt, Schattentiefe, Form und andere Attribute.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AlertDialog", - "desc": [ - "【title】 : Oberste Komponente 【Widget】", - "【content】 : Inhaltskomponente 【Widget】", - "【titleTextStyle】 : Textstil für den Titel 【TextStyle】", - "【contentTextStyle】 : Textstil für den Inhalt 【TextStyle】", - "【titlePadding】 : Innenabstand für den Titel 【EdgeInsetsGeometry】", - "【contentPadding】 : Innenabstand für den Inhalt 【EdgeInsetsGeometry】", - "【actions】 : Liste der Komponenten in der unteren rechten Ecke 【List】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【elevation】 : Schattentiefe 【double】", - "【shape】 : Form 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_en_US.json deleted file mode 100644 index fbfa30c26..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "Popup Dialog", - "info": "A general dialog structure that can specify components at the head, middle, and tail. It has text styles and margins for the title and content, as well as properties such as elevation and shape.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AlertDialog", - "desc": [ - "【title】 : Top component 【Widget】", - "【content】 : Content component 【Widget】", - "【titleTextStyle】 : Top text style 【TextStyle】", - "【contentTextStyle】 : Content text style 【TextStyle】", - "【titlePadding】 : Top padding 【EdgeInsetsGeometry】", - "【contentPadding】 : Content padding 【EdgeInsetsGeometry】", - "【actions】 : Bottom right component list 【List】", - "【backgroundColor】 : Background color 【Color】", - "【elevation】 : Elevation 【double】", - "【shape】 : Shape 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_es_ES.json deleted file mode 100644 index b41ad91d8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "Cuadro de diálogo emergente", - "info": "Una estructura de diálogo genérica que permite especificar componentes en la parte superior, media e inferior. Tiene propiedades como el estilo de texto y los márgenes del título y el contenido, la profundidad de la sombra, la forma, etc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AlertDialog", - "desc": [ - "【title】 : Componente superior 【Widget】", - "【content】 : Componente de contenido 【Widget】", - "【titleTextStyle】 : Estilo de texto del título 【TextStyle】", - "【contentTextStyle】 : Estilo de texto del contenido 【TextStyle】", - "【titlePadding】 : Relleno superior 【EdgeInsetsGeometry】", - "【contentPadding】 : Relleno del contenido 【EdgeInsetsGeometry】", - "【actions】 : Lista de componentes en la esquina inferior derecha 【List】", - "【backgroundColor】 : Color de fondo 【Color】", - "【elevation】 : Profundidad de la sombra 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_fr_FR.json deleted file mode 100644 index fa306c880..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "Boîte de dialogue contextuelle", - "info": "Une structure de dialogue générique qui permet de spécifier des composants en haut, au milieu et en bas. Possède des styles de texte et des marges pour le titre et le contenu, ainsi que des propriétés telles que la profondeur d'ombre, la forme, etc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AlertDialog", - "desc": [ - "【title】 : Composant du haut 【Widget】", - "【content】 : Composant du contenu 【Widget】", - "【titleTextStyle】 : Style de texte du titre 【TextStyle】", - "【contentTextStyle】 : Style de texte du contenu 【TextStyle】", - "【titlePadding】 : Marge intérieure du titre 【EdgeInsetsGeometry】", - "【contentPadding】 : Marge intérieure du contenu 【EdgeInsetsGeometry】", - "【actions】 : Liste des composants en bas à droite 【List】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【elevation】 : Profondeur d'ombre 【double】", - "【shape】 : Forme 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_it_IT.json deleted file mode 100644 index 8566bdcdf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "Finestra di dialogo pop-up", - "info": "Una struttura di dialogo generica che consente di specificare componenti nella parte superiore, centrale e inferiore. Possiede stili di testo e margini per il titolo e il contenuto, oltre a proprietà come profondità dell'ombra, forma, ecc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di AlertDialog", - "desc": [ - "【title】 : Componente superiore 【Widget】", - "【content】 : Componente del contenuto 【Widget】", - "【titleTextStyle】 : Stile del testo superiore 【TextStyle】", - "【contentTextStyle】 : Stile del testo del contenuto 【TextStyle】", - "【titlePadding】 : Spaziatura interna superiore 【EdgeInsetsGeometry】", - "【contentPadding】 : Spaziatura interna del contenuto 【EdgeInsetsGeometry】", - "【actions】 : Lista dei componenti nell'angolo inferiore destro 【List】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【elevation】 : Profondità dell'ombra 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ja_JP.json deleted file mode 100644 index 188f972fc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "ポップアップダイアログ", - "info": "一般的なダイアログ構造で、上部、中央、下部にコンポーネントを指定できます。タイトル、内容のテキストスタイルと余白、影の深さ、形状などの属性を持っています。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AlertDialogの基本使用", - "desc": [ - "【title】 : 上部コンポーネント 【Widget】", - "【content】 : 内容コンポーネント 【Widget】", - "【titleTextStyle】 : 上部テキストスタイル 【TextStyle】", - "【contentTextStyle】 : 内容テキストスタイル 【TextStyle】", - "【titlePadding】 : 上部内側余白 【EdgeInsetsGeometry】", - "【contentPadding】 : 内容内側余白 【EdgeInsetsGeometry】", - "【actions】 : 右下コンポーネントリスト 【List】", - "【backgroundColor】 : 背景色 【Color】", - "【elevation】 : 影の深さ 【double】", - "【shape】 : 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ko_KR.json deleted file mode 100644 index 0d50477a4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "팝업 대화 상자", - "info": "일반적인 대화 상자 구조로, 상단, 중간, 하단의 구성 요소를 지정할 수 있습니다. 제목, 내용의 텍스트 스타일과 여백, 그림자 깊이, 모양 등의 속성을 가지고 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AlertDialog 기본 사용", - "desc": [ - "【title】 : 상단 구성 요소 【Widget】", - "【content】 : 내용 구성 요소 【Widget】", - "【titleTextStyle】 : 상단 텍스트 스타일 【TextStyle】", - "【contentTextStyle】 : 내용 텍스트 스타일 【TextStyle】", - "【titlePadding】 : 상단 내부 여백 【EdgeInsetsGeometry】", - "【contentPadding】 : 내용 내부 여백 【EdgeInsetsGeometry】", - "【actions】 : 오른쪽 하단 구성 요소 목록 【List】", - "【backgroundColor】 : 배경색 【Color】", - "【elevation】 : 그림자 깊이 【double】", - "【shape】 : 모양 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_pt_PT.json deleted file mode 100644 index b8a726c07..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "Diálogo de Alerta", - "info": "Uma estrutura de diálogo genérica que permite especificar componentes no topo, meio e fim. Possui estilos de texto e margens para o título e conteúdo, além de propriedades como profundidade de sombra, forma, etc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do AlertDialog", - "desc": [ - "【title】 : Componente do topo 【Widget】", - "【content】 : Componente de conteúdo 【Widget】", - "【titleTextStyle】 : Estilo de texto do topo 【TextStyle】", - "【contentTextStyle】 : Estilo de texto do conteúdo 【TextStyle】", - "【titlePadding】 : Margem interna do topo 【EdgeInsetsGeometry】", - "【contentPadding】 : Margem interna do conteúdo 【EdgeInsetsGeometry】", - "【actions】 : Lista de componentes no canto inferior direito 【List】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【elevation】 : Profundidade de sombra 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ru_RU.json deleted file mode 100644 index f9cbc251f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "Всплывающее диалоговое окно", - "info": "Универсальная структура диалогового окна, позволяющая указать компоненты в верхней, средней и нижней частях. Имеет стили текста и отступы для заголовка и содержимого, а также свойства, такие как тень, форма и другие.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AlertDialog", - "desc": [ - "【title】 : Верхний компонент 【Widget】", - "【content】 : Компонент содержимого 【Widget】", - "【titleTextStyle】 : Стиль текста заголовка 【TextStyle】", - "【contentTextStyle】 : Стиль текста содержимого 【TextStyle】", - "【titlePadding】 : Внутренний отступ заголовка 【EdgeInsetsGeometry】", - "【contentPadding】 : Внутренний отступ содержимого 【EdgeInsetsGeometry】", - "【actions】 : Список компонентов в правом нижнем углу 【List】", - "【backgroundColor】 : Цвет фона 【Color】", - "【elevation】 : Тень 【double】", - "【shape】 : Форма 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_zh-CN.json deleted file mode 100644 index 6d8bb8d8d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 127, - "name": "AlertDialog", - "localName": "弹出对话框", - "info": "一个通用的对话框结构,可指定头、中、尾处的组件。拥有标题、内容的文字样式和边距,影深、形状等属性。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AlertDialog基本使用", - "desc": [ - "【title】 : 顶部组件 【Widget】", - "【content】 : 内容组件 【Widget】", - "【titleTextStyle】 : 顶部文字样式 【TextStyle】", - "【contentTextStyle】 : 内容文字样式 【TextStyle】", - "【titlePadding】 : 顶部内边距 【EdgeInsetsGeometry】", - "【contentPadding】 : 内容内边距 【EdgeInsetsGeometry】", - "【actions】 : 右下角组件列表 【List】", - "【backgroundColor】 : 背景色 【Color】", - "【elevation】 : 影深 【double】", - "【shape】 : 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/node1_base.dart deleted file mode 100644 index ada7cf5c9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AlertDialog/node1_base.dart +++ /dev/null @@ -1,99 +0,0 @@ - - -/// create by 张风捷特烈 on 2020-03-24 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; - -class CustomAlertDialog extends StatelessWidget { - const CustomAlertDialog({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildRaisedButton(context), - _buildAlertDialog(), - ], - ); - } - - Widget _buildRaisedButton(BuildContext context) => ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)), - ), - ), - onPressed: () { - showDialog(context: context, builder: (ctx) => _buildAlertDialog()); - }, - child: const Text( - 'Just Show It !', - style: TextStyle(color: Colors.white), - ), - ); - - Widget _buildAlertDialog() { - return AlertDialog( - title: _buildTitle(), - titleTextStyle: const TextStyle(fontSize: 20, color: Colors.black), - titlePadding: const EdgeInsets.only( - top: 5, - left: 20, - ), - contentPadding: const EdgeInsets.symmetric(horizontal: 5), - backgroundColor: Colors.white, - content: _buildContent(), - actions: const [ - Icon(Icons.android, color: Colors.blue,), - Icon(Icons.add, color: Colors.blue,), - Icon(Icons.g_translate, color: Colors.blue,), - Icon(Icons.games, color: Colors.blue,), - ], - elevation: 4, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10))), - ); - } - - Widget _buildTitle() { - return Row( - //标题 - children: [ - Image.asset( - "assets/images/icon_head.webp", - width: 30, - height: 30, - ), - const SizedBox(width: 10,), - const Expanded( - child: Text( - "关于", - style: TextStyle(fontSize: 18), - )), - const CloseButton() - ], - ); - } - - Widget _buildContent() { - return Column( - mainAxisSize: MainAxisSize.min, - children: const [ - Padding( - padding: EdgeInsets.all(10.0), - child: Text( - ' FlutterUnit是【张风捷特烈】的开源项目,' - '收录Flutter的200+组件,并附加详细介绍以及操作交互,' - '希望帮助广大编程爱好者入门Flutter。' - '更多知识可以关注掘金账号、公众号【编程之王】。', - style: TextStyle(color: Color(0xff999999), fontSize: 16), - textAlign: TextAlign.justify, - ), - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_de_DE.json deleted file mode 100644 index bd93fd190..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "Animiertes Symbol", - "info": "Verwenden Sie die Symboldaten von AnimatedIcons, um Symbole mit einem Animationscontroller zu animieren. Größe, Farbe usw. können angegeben werden.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von AnimatedIcon", - "desc": [ - "【icon】 : Animationssymboldaten 【AnimatedIcons】", - "【size】 : Größe 【double】", - "【color】 : Farbe 【Color】", - "【progress】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_en_US.json deleted file mode 100644 index beed34141..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "Icon Animation", - "info": "Using the icon data of AnimatedIcons, you can animate the icon based on an animation controller. The icon size, color, etc., can be specified.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of AnimatedIcon", - "desc": [ - "【icon】: Animation icon data 【AnimatedIcons】", - "【size】: Size 【double】", - "【color】: Color 【Color】", - "【progress】: Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_es_ES.json deleted file mode 100644 index d9cada141..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "Icono animado", - "info": "Utiliza los datos de iconos de AnimatedIcons para crear efectos de animación en los iconos basados en un controlador de animación. Se puede especificar el tamaño del icono, el color, etc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedIcon", - "desc": [ - "【icon】: Datos del icono animado 【AnimatedIcons】", - "【size】: Tamaño 【double】", - "【color】: Color 【Color】", - "【progress】: Animación 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_fr_FR.json deleted file mode 100644 index 583ef6c4c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "Icône animée", - "info": "Utilisez les données d'icône d'AnimatedIcons pour animer une icône en fonction d'un contrôleur d'animation. Vous pouvez spécifier la taille, la couleur, etc. de l'icône.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'AnimatedIcon", - "desc": [ - "【icon】 : Données de l'icône animée 【AnimatedIcons】", - "【size】 : Taille 【double】", - "【color】 : Couleur 【Color】", - "【progress】 : Animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_it_IT.json deleted file mode 100644 index 60a5bc1dc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "Icona Animata", - "info": "Utilizza i dati delle icone di AnimatedIcons per creare effetti di animazione delle icone basati su un controller di animazione. È possibile specificare dimensioni, colore, ecc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di AnimatedIcon", - "desc": [ - "【icon】 : Dati dell'icona animata 【AnimatedIcons】", - "【size】 : Dimensione 【double】", - "【color】 : Colore 【Color】", - "【progress】 : Animazione 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ja_JP.json deleted file mode 100644 index 49b64808d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "アイコンアニメーション", - "info": "AnimatedIconsのアイコンデータを使用して、アニメーションコントローラーに基づいてアイコンにアニメーション効果を与えることができます。アイコンのサイズや色などを指定できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedIconの基本使用", - "desc": [ - "【icon】 : アニメーションアイコンデータ 【AnimatedIcons】", - "【size】 : サイズ 【double】", - "【color】 : 色 【Color】", - "【progress】 : アニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ko_KR.json deleted file mode 100644 index 25b5ed60e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "아이콘 애니메이션", - "info": "AnimatedIcons의 아이콘 데이터를 사용하여 애니메이션 컨트롤러에 따라 아이콘에 애니메이션 효과를 적용할 수 있습니다. 아이콘 크기, 색상 등을 지정할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedIcon 기본 사용", - "desc": [ - "【icon】 : 애니메이션 아이콘 데이터 【AnimatedIcons】", - "【size】 : 크기 【double】", - "【color】 : 색상 【Color】", - "【progress】 : 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_pt_PT.json deleted file mode 100644 index fad0bab61..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "Ícone Animado", - "info": "Utiliza os dados de ícones de AnimatedIcons para criar efeitos de animação com base em um controlador de animação. Permite especificar o tamanho, cor e outros atributos do ícone.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de AnimatedIcon", - "desc": [ - "【icon】 : Dados do ícone animado 【AnimatedIcons】", - "【size】 : Tamanho 【double】", - "【color】 : Cor 【Color】", - "【progress】 : Animação 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ru_RU.json deleted file mode 100644 index 414e42a76..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "Анимированная иконка", - "info": "Используйте данные иконки AnimatedIcons для создания анимации иконки с помощью контроллера анимации. Можно указать размер и цвет иконки.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование AnimatedIcon", - "desc": [ - "【icon】 : Данные анимированной иконки 【AnimatedIcons】", - "【size】 : Размер 【double】", - "【color】 : Цвет 【Color】", - "【progress】 : Анимация 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_zh-CN.json deleted file mode 100644 index d9f9c3aaf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 125, - "name": "AnimatedIcon", - "localName": "图标动画", - "info": "使用AnimatedIcons的图标数据,可以根据一个动画控制器来使图标进行动画效果。可指定图标大小、颜色等。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "AnimatedIcon基本使用", - "desc": [ - "【icon】 : 动画图标数据 【AnimatedIcons】", - "【size】 : 大小 【double】", - "【color】 : 颜色 【Color】", - "【progress】 : 动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/node1_base.dart deleted file mode 100644 index 4e96eb8d4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/AnimatedIcon/node1_base.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class CustomAnimatedIcon extends StatefulWidget { - const CustomAnimatedIcon({Key? key}) : super(key: key); - - @override - _CustomAnimatedIconState createState() => _CustomAnimatedIconState(); -} - -class _CustomAnimatedIconState extends State - with SingleTickerProviderStateMixin { - late AnimationController _ctrl; - - @override - void initState() { - _ctrl = AnimationController(vsync: this, duration: const Duration(seconds: 1)); - _ctrl.forward(); - super.initState(); - } - - @override - void dispose() { - _ctrl.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => _ctrl.forward(from: 0), - child: Wrap( - runSpacing: 30, - children: _buildChildren(), - ), - ); - } - - final Map data = { - Colors.orange: AnimatedIcons.menu_arrow, - Colors.blue: AnimatedIcons.ellipsis_search, - Colors.red: AnimatedIcons.close_menu, - Colors.green: AnimatedIcons.arrow_menu, - Colors.cyanAccent: AnimatedIcons.play_pause, - Colors.purple: AnimatedIcons.pause_play, - }; - - List _buildChildren() => - data.keys - .map((Color color) => AnimatedIcon( - size: 50, - color: color, - icon: data[color]!, - progress: _ctrl, - )) - .toList(); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_de_DE.json deleted file mode 100644 index aa565405f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "Automatische Vervollständigung", - "info": "Bietet während der Eingabe eine Überlagerung mit Vorschlägen an, damit Benutzer auswählen können, und bietet ein hohes Maß an Anpassbarkeit.", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Autocomplete", - "desc": [ - "【optionsBuilder】: Optionen-Builder 【AutocompleteOptionsBuilder】", - "【onSelected】: Rückruf bei Auswahl 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Generika von Autocomplete", - "desc": [ - "【optionsViewBuilder】: Panel-Builder 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】: Eingabe-Builder 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】: Textanzeige 【AutocompleteOptionToString】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_en_US.json deleted file mode 100644 index 221f824b7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "Autocomplete", - "info": "During input, provides a suggestion overlay for users to select from, with a high degree of customization.", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Autocomplete", - "desc": [ - "【optionsBuilder】: Option builder 【AutocompleteOptionsBuilder】", - "【onSelected】: Callback when selected 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Generics of Autocomplete", - "desc": [ - "【optionsViewBuilder】: Panel builder 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】: Input builder 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】: Text display 【AutocompleteOptionToString】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_es_ES.json deleted file mode 100644 index 8e9cdf044..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "Autocompletado", - "info": "Proporciona una capa de sugerencias durante la entrada para que el usuario pueda seleccionar, con un alto grado de personalización.", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Autocomplete", - "desc": [ - "【optionsBuilder】: Constructor de opciones 【AutocompleteOptionsBuilder】", - "【onSelected】: Devolución de llamada al seleccionar 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Genéricos de Autocomplete", - "desc": [ - "【optionsViewBuilder】: Constructor del panel 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】: Constructor de entrada 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】: Visualización de texto 【AutocompleteOptionToString】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_fr_FR.json deleted file mode 100644 index 1c2b6d1d5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "Remplissage automatique", - "info": "Pendant la saisie, fournit une superposition de suggestions pour que l'utilisateur puisse choisir, avec un haut degré de personnalisation.", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'Autocomplete", - "desc": [ - "【optionsBuilder】 : Constructeur d'options 【AutocompleteOptionsBuilder】", - "【onSelected】 : Rappel lors de la sélection 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Génériques d'Autocomplete", - "desc": [ - "【optionsViewBuilder】 : Constructeur de panneau 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】 : Constructeur de saisie 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】 : Affichage de texte 【AutocompleteOptionToString】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_it_IT.json deleted file mode 100644 index 921cc9f24..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "Completamento automatico", - "info": "Durante l'immissione, fornisce un overlay di suggerimenti per la selezione dell'utente, con un alto grado di personalizzazione.", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Autocomplete", - "desc": [ - "【optionsBuilder】 : Costruttore di opzioni 【AutocompleteOptionsBuilder】", - "【onSelected】 : Callback alla selezione 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Generics di Autocomplete", - "desc": [ - "【optionsViewBuilder】 : Costruttore del pannello 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】 : Costruttore di input 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】 : Visualizzazione del testo 【AutocompleteOptionToString】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ja_JP.json deleted file mode 100644 index 74cbbfed7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "オートコンプリート", - "info": "入力中に、ユーザーが選択できるように連想語をフローティングレイヤーで表示し、高いカスタマイズ性を持っています。", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Autocompleteの基本使用", - "desc": [ - "【optionsBuilder】 : オプション構築器 【AutocompleteOptionsBuilder】", - "【onSelected】 : 選択時のコールバック 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Autocompleteのジェネリック", - "desc": [ - "【optionsViewBuilder】 : パネル構築器 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】 : 入力構築器 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】 : テキスト表示 【AutocompleteOptionToString】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ko_KR.json deleted file mode 100644 index b86cad62c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "자동 완성", - "info": "입력 중에, 사용자가 선택할 수 있도록 연관어를 보여주는 레이어를 제공하며, 높은 수준의 커스터마이징이 가능합니다.", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Autocomplete 기본 사용", - "desc": [ - "【optionsBuilder】 : 옵션 빌더 【AutocompleteOptionsBuilder】", - "【onSelected】 : 선택 시 콜백 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Autocomplete의 제네릭", - "desc": [ - "【optionsViewBuilder】 : 패널 빌더 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】 : 입력 빌더 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】 : 텍스트 표시 【AutocompleteOptionToString】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_pt_PT.json deleted file mode 100644 index cf85c6971..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "Preenchimento automático", - "info": "Durante a entrada, fornece uma sobreposição de sugestões para o usuário escolher, com alto grau de personalização.", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Autocomplete", - "desc": [ - "【optionsBuilder】: Construtor de opções 【AutocompleteOptionsBuilder】", - "【onSelected】: Callback de seleção 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Genéricos do Autocomplete", - "desc": [ - "【optionsViewBuilder】: Construtor de painel 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】: Construtor de entrada 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】: Exibição de texto 【AutocompleteOptionToString】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ru_RU.json deleted file mode 100644 index 7d6e34258..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "Автозаполнение", - "info": "Во время ввода предоставляет всплывающий слой с подсказками для выбора пользователем, обладает высокой степенью настройки.", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Autocomplete", - "desc": [ - "【optionsBuilder】 : конструктор опций 【AutocompleteOptionsBuilder】", - "【onSelected】 : обратный вызов при выборе 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Обобщение Autocomplete", - "desc": [ - "【optionsViewBuilder】 : конструктор панели 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】 : конструктор ввода 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】 : отображение текста 【AutocompleteOptionToString】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_zh-CN.json deleted file mode 100644 index 3f7fe0139..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 356, - "name": "Autocomplete", - "localName": "自动填充", - "info": "在输入期间,提供联想词浮层展示,以便用户选择,拥有高度的可定制性。", - "lever": 4, - "family": 0, - "linkIds": [ - 54, - 199 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Autocomplete基本使用", - "desc": [ - "【optionsBuilder】 : 选项构造器 【AutocompleteOptionsBuilder】", - "【onSelected】 : 选择时回调 【AutocompleteOnSelected】" - ] - }, - { - "file": "node2_type.dart", - "name": "Autocomplete的泛型", - "desc": [ - "【optionsViewBuilder】 : 面板构造器 【AutocompleteOptionsViewBuilder】", - "【fieldViewBuilder】 : 输入构造器 【AutocompleteFieldViewBuilder】", - "【displayStringForOption】 : 文字展示 【AutocompleteOptionToString】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/node1_base.dart deleted file mode 100644 index b9abae503..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/node1_base.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2022-04-18 -/// contact me by email 1981462002@qq.com - -class AutocompleteDemo extends StatelessWidget { - const AutocompleteDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Autocomplete( - optionsBuilder: buildOptions, - onSelected: onSelected, - ); - } - - void onSelected(String selection) { - debugPrint('当前选择了 $selection'); - } - - Future> buildOptions( - TextEditingValue textEditingValue, - ) async { - if (textEditingValue.text == '') { - return const Iterable.empty(); - } - return searchByArgs(textEditingValue.text); - } - - Future> searchByArgs(String args) async{ - // 模拟网络请求 - await Future.delayed(const Duration(milliseconds: 200)); - const List data = [ - 'toly', 'toly49', 'toly42', 'toly56', - 'card', 'ls', 'alex', 'fan sha', - ]; - return data.where((String name) => name.contains(args)); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/node2_type.dart b/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/node2_type.dart deleted file mode 100644 index d48fe1bd0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Autocomplete/node2_type.dart +++ /dev/null @@ -1,219 +0,0 @@ -import 'dart:async'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2022-04-18 -/// contact me by email 1981462002@qq.com - -class AutocompleteType extends StatefulWidget { - const AutocompleteType({Key? key}) : super(key: key); - - @override - State createState() => _AutocompleteTypeState(); -} - -class _AutocompleteTypeState extends State { - late TextEditingController _controller; - _User? user; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: Scaffold( - appBar: AppBar( - automaticallyImplyLeading: false, - title: buildAutocomplete(), - ), - body: Center( - child: Text( - user != null ? user!.name : '未选择', - style: const TextStyle(fontSize: 40), - )), - ), - ); - } - - Widget buildAutocomplete() { - return Autocomplete<_User>( - optionsBuilder: buildOptions, - onSelected: onSelected, - optionsViewBuilder: _buildOptionsView, - fieldViewBuilder: _buildFieldView, - displayStringForOption: (user) => user.name, - ); - } - - @override - void dispose() { - // _controller.dispose(); - super.dispose(); - } - - void onSelected(_User selection) { - debugPrint('当前选择了 $selection'); - setState(() { - user = selection; - }); - } - - Future> buildOptions( - TextEditingValue textEditingValue, - ) async { - if (textEditingValue.text == '') { - return const Iterable<_User>.empty(); - } - return searchByArgs(textEditingValue.text); - } - - Future> searchByArgs(String args) async { - // 模拟网络请求 - await Future.delayed(const Duration(milliseconds: 200)); - const List<_User> data = [ - _User('toly', true, 'icon_5.webp'), - _User('toly49', false, 'icon_6.webp'), - _User('toly42', true, 'icon_7.webp'), - _User('toly56', false, 'icon_8.webp'), - _User('card', true, 'icon_5.webp'), - _User('ls', true, 'icon_6.webp'), - _User('alex', true, 'icon_7.webp'), - _User('fan sha', false, 'icon_8.webp'), - ]; - return data.where((_User user) => user.name.contains(args)); - } - - Widget _buildFieldView( - BuildContext context, - TextEditingController textEditingController, - FocusNode focusNode, - VoidCallback onFieldSubmitted) { - _controller = textEditingController; - return SizedBox( - height: 34, - child: TextFormField( - controller: textEditingController, - decoration: const InputDecoration( - filled: true, - fillColor: Color(0xffF7F8FA), - prefixIcon: Icon(Icons.search), - contentPadding: EdgeInsets.only(top: 1), - border: UnderlineInputBorder( - borderSide: BorderSide.none, - borderRadius: BorderRadius.all(Radius.circular(19)), - ), - hintText: "输入用户名 (toly)", - hintStyle: TextStyle(fontSize: 13)), - focusNode: focusNode, - onFieldSubmitted: (String value) { - onFieldSubmitted(); - }, - ), - ); - } - - Widget _buildOptionsView(BuildContext context, - AutocompleteOnSelected<_User> onSelected, Iterable<_User> options) { - return Align( - alignment: Alignment.topCenter, - child: Padding( - padding: const EdgeInsets.only(top: 20), - child: Material( - child: ConstrainedBox( - constraints: BoxConstraints(maxHeight: 150), - child: ListView.builder( - padding: EdgeInsets.zero, - itemBuilder: (_, index) { - final _User option = options.elementAt(index); - return _UserItem( - onSelected: onSelected, - user: option, - args: _controller.text, - ); - }, - itemCount: options.length, - ), - ), - ), - ), - ); - } -} - -class _UserItem extends StatelessWidget { - final AutocompleteOnSelected<_User>? onSelected; - final String args; - final _User user; - - const _UserItem({ - Key? key, - this.onSelected, - required this.user, - required this.args, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - return InkWell( - onTap: () => onSelected?.call(user), - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 6), - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - CircleAvatar( - foregroundColor: Colors.transparent, - backgroundImage: - AssetImage('assets/images/head_icon/${user.image}'), - ), - const SizedBox(width: 20), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text.rich(formSpan(user.name, args)), - Text( - '性别: ${user.man ? '男' : '女'}', - style: const TextStyle(color: Colors.grey), - ), - ], - ), - ], - ), - ), - ); - } - - final TextStyle lightTextStyle = const TextStyle( - color: Colors.blue, - fontWeight: FontWeight.bold, - ); - - InlineSpan formSpan(String src, String pattern) { - List span = []; - List parts = src.split(pattern); - if (parts.length > 1) { - for (int i = 0; i < parts.length; i++) { - span.add(TextSpan(text: parts[i])); - if (i != parts.length - 1) { - span.add(TextSpan(text: pattern, style: lightTextStyle)); - } - } - } else { - span.add(TextSpan(text: src)); - } - return TextSpan(children: span); - } -} - -class _User { - final String name; - final bool man; - final String image; - - const _User(this.name, this.man, this.image); - - @override - String toString() { - return '_User{name: $name, man: $man, image: $image}'; - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_de_DE.json deleted file mode 100644 index 2110748f9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "Zurück-Button", - "info": "Ein IconButton mit Rückkehrfunktion, das Rückkehrsymbol kann nicht geändert werden. Verhält sich in iOS und Android unterschiedlich.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButton Attribute", - "desc": [ - "【color】: Farbe 【Color】", - "【style】: Button-Stil 【ButtonStyle?】", - "【onPressed】: Klick-Ereignis 【Function】", - " Wenn onPressed leer ist, wird der aktuelle Stack verlassen" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_en_US.json deleted file mode 100644 index 5827f1c25..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "Back Button", - "info": "An IconButton with a back function, the back icon cannot be changed. It behaves differently in iOS and Android.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButton Properties", - "desc": [ - "【color】: Color 【Color】", - "【style】: Button Style 【ButtonStyle?】", - "【onPressed】: Click Event 【Function】", - " If onPressed is empty, it will exit the current stack." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_es_ES.json deleted file mode 100644 index d776911ee..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "Botón de retroceso", - "info": "Un IconButton con función de retroceso, el icono de retroceso no se puede cambiar. Se comporta de manera diferente en iOS y Android.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propiedades de BackButton", - "desc": [ - "【color】: Color 【Color】", - "【style】: Estilo del botón 【ButtonStyle?】", - "【onPressed】: Evento de clic 【Function】", - "Si onPressed está vacío, saldrá de la pila actual." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_fr_FR.json deleted file mode 100644 index 67ab49af4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "Bouton Retour", - "info": "Un IconButton avec une fonction de retour, l'icône de retour ne peut pas être modifiée. Se comporte différemment sur iOS et Android.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propriétés du BackButton", - "desc": [ - "【color】: Couleur 【Color】", - "【style】: Style du bouton 【ButtonStyle?】", - "【onPressed】: Événement de clic 【Function】", - " Si onPressed est vide, la pile actuelle sera quittée" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_it_IT.json deleted file mode 100644 index 15d82d523..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "Pulsante Indietro", - "info": "Un IconButton con funzionalità di ritorno, l'icona di ritorno non può essere modificata. Si comporta diversamente in iOS e Android.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Proprietà del BackButton", - "desc": [ - "【color】: Colore 【Color】", - "【style】: Stile del pulsante 【ButtonStyle?】", - "【onPressed】: Evento di clic 【Function】", - " Se onPressed è vuoto, uscirà dallo stack corrente" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ja_JP.json deleted file mode 100644 index 12bbc9f55..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "戻るボタン", - "info": "戻る機能を持つIconButtonで、戻るアイコンは変更できません。iOSとAndroidでは異なる動作をします。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButton属性", - "desc": [ - "【color】: 色 【Color】", - "【style】: ボタンスタイル 【ButtonStyle?】", - "【onPressed】: クリックイベント 【Function】", - " onPressedが空の場合、現在のスタックを終了します" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ko_KR.json deleted file mode 100644 index 52da81318..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "뒤로 가기 버튼", - "info": "뒤로 가기 기능을 가진 IconButton, 뒤로 가기 아이콘은 변경할 수 없습니다. iOS와 Android에서 다르게 동작합니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButton 속성", - "desc": [ - "【color】: 색상 【Color】", - "【style】: 버튼 스타일 【ButtonStyle?】", - "【onPressed】: 클릭 이벤트 【Function】", - "onPressed가 비어 있으면 현재 스택에서 빠져나옵니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_pt_PT.json deleted file mode 100644 index 17115929c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "Botão de Voltar", - "info": "Um IconButton com função de voltar, o ícone de voltar não pode ser alterado. Comporta-se de forma diferente no iOS e no Android.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propriedades do BackButton", - "desc": [ - "【color】: Cor 【Color】", - "【style】: Estilo do botão 【ButtonStyle?】", - "【onPressed】: Evento de clique 【Function】", - "Se onPressed estiver vazio, a pilha atual será encerrada" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ru_RU.json deleted file mode 100644 index 310f813db..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "Кнопка возврата", - "info": "IconButton с функцией возврата, значок возврата нельзя изменить. По-разному ведет себя в iOS и Android", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Свойства BackButton", - "desc": [ - "【color】: Цвет 【Color】", - "【style】: Стиль кнопки 【ButtonStyle?】", - "【onPressed】: Событие нажатия 【Function】", - "Если onPressed пуст, текущий стек будет завершен" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_zh-CN.json deleted file mode 100644 index 4806e8bc3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 31, - "name": "BackButton", - "localName": "返回按钮", - "info": "一个具有返回功能的IconButton,返回图标不可更改。在iOS和Android中表现不同", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButton属性", - "desc": [ - "【color】: 颜色 【Color】", - "【style】: 按钮样式 【ButtonStyle?】", - "【onPressed】: 点击事件 【Function】", - " onPressed为空会退出当前栈" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/BackButton/node1_base.dart deleted file mode 100644 index e51f70a73..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButton/node1_base.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class CustomBackButton extends StatelessWidget { - const CustomBackButton({super.key}); - - List get data => [ - Colors.red, - Colors.yellow, - Colors.blue, - Colors.green - ]; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: data - .map((e) => BackButton( - color: e, - )) - .toList()); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_de_DE.json deleted file mode 100644 index cfce90a8a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "Zurück-Button-Icon", - "info": "Ein Rück-Icon, das je nach Plattform das entsprechende Icon anzeigt. Das Thema kann über ActionIconTheme angepasst werden.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButtonIcon-Effekt", - "desc": [ - "Das _ActionIcon-Widget passt das Rück-Button-Icon basierend auf dem ActionIconTheme an die jeweilige Plattform an." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_en_US.json deleted file mode 100644 index 013efdd99..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "Back Button Icon", - "info": "A return Icon icon, displaying the corresponding icon according to the platform, and the theme can be customized through ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButtonIcon Effect", - "desc": [ - "The _ActionIcon component adapts the back button icon for different platforms according to the ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_es_ES.json deleted file mode 100644 index b4dcc7b7c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "Icono de botón de retroceso", - "info": "Un icono de retroceso, muestra el icono correspondiente según la plataforma, se puede personalizar el tema a través de ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Efecto de BackButtonIcon", - "desc": [ - "El componente _ActionIcon adapta el icono del botón de retroceso para diferentes plataformas según el tema de ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_fr_FR.json deleted file mode 100644 index 2448d2894..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "Icône de bouton de retour", - "info": "Une icône de retour, affichant l'icône correspondante selon la plateforme, qui peut être personnalisée via ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Effet de BackButtonIcon", - "desc": [ - "Le composant _ActionIcon adapte l'icône de bouton de retour à différentes plateformes selon le thème ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_it_IT.json deleted file mode 100644 index 9754d6102..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "Icona del pulsante Indietro", - "info": "Un'icona di ritorno, che mostra l'icona corrispondente in base alla piattaforma, può essere personalizzata tramite ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Effetto BackButtonIcon", - "desc": [ - "Attraverso il componente _ActionIcon, adatta l'icona del pulsante Indietro per diverse piattaforme in base al tema ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ja_JP.json deleted file mode 100644 index 71e0b52ae..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "戻るボタンアイコン", - "info": "戻るアイコンで、プラットフォームに応じたアイコンを表示し、ActionIconThemeでテーマをカスタマイズできます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButtonIcon 効果", - "desc": [ - "_ActionIconコンポーネントを使用して、ActionIconThemeテーマに基づいて、異なるプラットフォームの戻るボタンアイコンを適応させます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ko_KR.json deleted file mode 100644 index 64ea426a3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "뒤로 가기 버튼 아이콘", - "info": "플랫폼에 따라 해당 아이콘을 표시하는 뒤로 가기 Icon 아이콘입니다. ActionIconTheme을 통해 테마를 사용자 정의할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButtonIcon 효과", - "desc": [ - "ActionIconTheme 테마에 따라 _ActionIcon 컴포넌트를 사용하여 다른 플랫폼의 뒤로 가기 버튼 아이콘을 적응시킵니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_pt_PT.json deleted file mode 100644 index 598f57cd4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "Ícone do botão de voltar", - "info": "Um ícone de retorno, que exibe o ícone correspondente de acordo com a plataforma, pode ser personalizado com o tema ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Efeito do BackButtonIcon", - "desc": [ - "O componente _ActionIcon adapta o ícone do botão de voltar para diferentes plataformas com base no tema ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ru_RU.json deleted file mode 100644 index 2d572f030..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "Иконка кнопки возврата", - "info": "Иконка возврата, которая отображает соответствующую иконку в зависимости от платформы. Можно настроить тему через ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Эффект BackButtonIcon", - "desc": [ - "Компонент _ActionIcon адаптирует иконку кнопки возврата для разных платформ в соответствии с темой ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_zh-CN.json deleted file mode 100644 index 1a3a42731..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 272, - "name": "BackButtonIcon", - "localName": "返回按钮图标", - "info": "一个返回 Icon 图标, 根据平台展示对应的图标,可以通过 ActionIconTheme 定制主题。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BackButtonIcon 效果", - "desc": [ - "通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的返回按钮图标。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/node1_base.dart deleted file mode 100644 index 1f39e5634..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BackButtonIcon/node1_base.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/11/28 -/// contact me by email 1981462002@qq.com - -class BackButtonIconDemo extends StatelessWidget { - const BackButtonIconDemo({super.key}); - - @override - Widget build(BuildContext context) { - return const BackButtonIcon(); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_de_DE.json deleted file mode 100644 index a3f266228..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_de_DE.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "Kennzeichnungskomponente", - "info": "Badge ist eine Komponente im Material-Stil, die eine Markierung über einem Kindelement hinzufügen kann. Beim Aufbau wird die Stack-Komponente für die Überlagerung verwendet.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Verwendung von Badge-Punktmarkierungen", - "desc": [ - "【backgroundColor】 : Hintergrundfarbe 【Color?】", - "【isLabelVisible】 : Sichtbarkeit der Markierung 【bool】", - "【smallSize】 : Durchmesser ohne Label 【double?】", - "【child】 : Kindelement 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Badge-Label-Markierung", - "desc": [ - "【label】 : Titelkomponente 【Widget?】", - "【textStyle】 : Titeltextstil 【TextStyle?】", - "【textColor】 : Titeltextfarbe 【Color?】", - "【padding】 : Titelabstand 【EdgeInsetsGeometry?】", - "【largeSize】 : Höhe mit Label 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Versatz von Badge", - "desc": [ - "【offset】 : Versatz der Markierung 【Offset?】", - "【alignment】 : Titelversatz 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_en_US.json deleted file mode 100644 index 662c3bc9e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_en_US.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "Badge Component", - "info": "Badge is a Material-style component that can add markers on top of the child. It relies on the Stack component for layering during construction.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Usage of Badge Dot Marker", - "desc": [ - "【backgroundColor】: Background color 【Color?】", - "【isLabelVisible】: Whether to display the marker 【bool】", - "【smallSize】: Diameter when there is no label 【double?】", - "【child】: Child component 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Badge Label Marker", - "desc": [ - "【label】: Title component 【Widget?】", - "【textStyle】: Title color 【TextStyle?】", - "【textColor】: Title style 【Color?】", - "【padding】: Title margin 【EdgeInsetsGeometry?】", - "【largeSize】: Height when there is a label 【double?】" - ] - }, - { - "file": "node_3.dart", - "name": "Badge Offset", - "desc": [ - "【offset】: Marker offset 【Offset?】", - "【alignment】: Title offset 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_es_ES.json deleted file mode 100644 index 54ab567e3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_es_ES.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "Componente de marcador", - "info": "Badge es un componente de estilo Material que puede agregar un marcador sobre el child, dependiendo del componente Stack para la superposición durante la construcción.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Uso del marcador de punto Badge", - "desc": [ - "【backgroundColor】 : Color de fondo 【Color?】", - "【isLabelVisible】 : Si se muestra el marcador 【bool】", - "【smallSize】 : Diámetro sin etiqueta 【double?】", - "【child】 : Componente hijo 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Marcador de etiqueta Badge", - "desc": [ - "【label】 : Componente de título 【Widget?】", - "【textStyle】 : Color del título 【TextStyle?】", - "【textColor】 : Estilo del título 【Color?】", - "【padding】 : Márgenes del título 【EdgeInsetsGeometry?】", - "【largeSize】 : Altura con etiqueta 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Desplazamiento del Badge", - "desc": [ - "【offset】 : Desplazamiento del marcador 【Offset?】", - "【alignment】 : Desplazamiento del título 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_fr_FR.json deleted file mode 100644 index 081f19815..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_fr_FR.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "Composant de marquage", - "info": "Badge est un composant de style Material qui peut ajouter des marqueurs au-dessus d'un enfant, dépendant du composant Stack pour l'empilement lors de la construction.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Utilisation du badge en point", - "desc": [ - "【backgroundColor】 : Couleur de fond 【Color?】", - "【isLabelVisible】 : Afficher le marqueur 【bool】", - "【smallSize】 : Diamètre sans étiquette 【double?】", - "【child】 : Composant enfant 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Badge avec étiquette", - "desc": [ - "【label】 : Composant de titre 【Widget?】", - "【textStyle】 : Couleur du titre 【TextStyle?】", - "【textColor】 : Style du titre 【Color?】", - "【padding】 : Marge du titre 【EdgeInsetsGeometry?】", - "【largeSize】 : Hauteur avec étiquette 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Décalage du badge", - "desc": [ - "【offset】 : Décalage du marqueur 【Offset?】", - "【alignment】 : Décalage du titre 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_it_IT.json deleted file mode 100644 index ad52a654f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_it_IT.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "Componente Badge", - "info": "Badge è un componente in stile Material che aggiunge un segnalino sopra il child, dipendendo dal componente Stack per la sovrapposizione durante la costruzione.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Uso del Badge con punto", - "desc": [ - "【backgroundColor】 : Colore di sfondo 【Color?】", - "【isLabelVisible】 : Visibilità del segnalino 【bool】", - "【smallSize】 : Diametro senza etichetta 【double?】", - "【child】 : Componente figlio 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Badge con etichetta", - "desc": [ - "【label】 : Componente del titolo 【Widget?】", - "【textStyle】 : Colore del titolo 【TextStyle?】", - "【textColor】 : Stile del titolo 【Color?】", - "【padding】 : Margine del titolo 【EdgeInsetsGeometry?】", - "【largeSize】 : Altezza con etichetta 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Offset del Badge", - "desc": [ - "【offset】 : Offset del segnalino 【Offset?】", - "【alignment】 : Offset del titolo 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ja_JP.json deleted file mode 100644 index 5a80853c3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ja_JP.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "バッジコンポーネント", - "info": "Badge は Material スタイルのコンポーネントで、child の上にマーカーを追加できます。構築時には Stack コンポーネントに依存して重ねられます。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Badge ドットマーカーの使用", - "desc": [ - "【backgroundColor】 : 背景色 【Color?】", - "【isLabelVisible】 : マーカーを表示するかどうか 【bool】", - "【smallSize】 : ラベルがない場合の直径 【double?】", - "【child】 : 子コンポーネント 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Badge ラベルマーカー", - "desc": [ - "【label】 : タイトルコンポーネント 【Widget?】", - "【textStyle】 : タイトルの色 【TextStyle?】", - "【textColor】 : タイトルのスタイル 【Color?】", - "【padding】 : タイトルの余白 【EdgeInsetsGeometry?】", - "【largeSize】 : ラベルがある場合の高さ 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Badge のオフセット", - "desc": [ - "【offset】 : マーカーのオフセット 【Offset?】", - "【alignment】 : タイトルのオフセット 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ko_KR.json deleted file mode 100644 index 56527a315..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ko_KR.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "배지 컴포넌트", - "info": "Badge는 Material 스타일의 컴포넌트로, child 위에 배지를 추가할 수 있으며, Stack 컴포넌트를 사용하여 겹쳐서 구성됩니다.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Badge 점 표시 사용", - "desc": [ - "【backgroundColor】 : 배경색 【Color?】", - "【isLabelVisible】 : 표시 여부 【bool】", - "【smallSize】 : 라벨 없을 때 직경 【double?】", - "【child】 : 하위 컴포넌트 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Badge 라벨 표시", - "desc": [ - "【label】 : 제목 컴포넌트 【Widget?】", - "【textStyle】 : 제목 색상 【TextStyle?】", - "【textColor】 : 제목 스타일 【Color?】", - "【padding】 : 제목 여백 【EdgeInsetsGeometry?】", - "【largeSize】 : 라벨 있을 때 높이 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Badge의 오프셋", - "desc": [ - "【offset】 : 배지 오프셋 【Offset?】", - "【alignment】 : 제목 오프셋 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_pt_PT.json deleted file mode 100644 index e53be402f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_pt_PT.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "Componente de Marcação", - "info": "O Badge é um componente de estilo Material que pode adicionar uma marcação sobreposta a um filho, dependendo do componente Stack para sobreposição durante a construção.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Uso do Badge com Marcação de Ponto", - "desc": [ - "【backgroundColor】 : Cor de fundo 【Color?】", - "【isLabelVisible】 : Se a marcação é visível 【bool】", - "【smallSize】 : Diâmetro sem etiqueta 【double?】", - "【child】 : Componente filho 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Badge com Marcação de Etiqueta", - "desc": [ - "【label】 : Componente de título 【Widget?】", - "【textStyle】 : Cor do título 【TextStyle?】", - "【textColor】 : Estilo do título 【Color?】", - "【padding】 : Margem do título 【EdgeInsetsGeometry?】", - "【largeSize】 : Altura com etiqueta 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Deslocamento do Badge", - "desc": [ - "【offset】 : Deslocamento da marcação 【Offset?】", - "【alignment】 : Deslocamento do título 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ru_RU.json deleted file mode 100644 index 8e577d2eb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_ru_RU.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "Компонент метки", - "info": "Badge — это компонент в стиле Material, который может добавлять маркеры поверх дочернего элемента, при построении он зависит от компонента Stack для наложения.", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Использование круглой метки Badge", - "desc": [ - "【backgroundColor】 : Цвет фона 【Color?】", - "【isLabelVisible】 : Видимость метки 【bool】", - "【smallSize】 : Диаметр без метки 【double?】", - "【child】 : Дочерний компонент 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Метка Badge с текстом", - "desc": [ - "【label】 : Компонент заголовка 【Widget?】", - "【textStyle】 : Цвет заголовка 【TextStyle?】", - "【textColor】 : Стиль заголовка 【Color?】", - "【padding】 : Отступы заголовка 【EdgeInsetsGeometry?】", - "【largeSize】 : Высота с меткой 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Смещение Badge", - "desc": [ - "【offset】 : Смещение метки 【Offset?】", - "【alignment】 : Смещение заголовка 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_zh-CN.json deleted file mode 100644 index c14d74fd2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/desc_zh-CN.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "id": 258, - "name": "Badge", - "localName": "标记组件", - "info": "Badge 是一种 Material 风格的组件,可以在 child 上层添加标记物,构建时依赖 Stack 组件进行叠放。", - "lever": 2, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node_1.dart", - "name": "Badge 圆点标记的使用", - "desc": [ - "【backgroundColor】 : 背景色 【Color?】", - "【isLabelVisible】 : 是否显示标记 【bool】", - "【smallSize】 : 无标签时直径 【double?】", - "【child】 : 子组件 【Widget?】" - ] - }, - { - "file": "node_2.dart", - "name": "Badge 标签标记", - "desc": [ - "【label】 : 标题组件 【Widget?】", - "【textStyle】 : 标题颜色 【TextStyle?】", - "【textColor】 : 标题样式 【Color?】", - "【padding】 : 标题边距 【EdgeInsetsGeometry?】", - "【largeSize】 : 有标签时高度 【double?】," - ] - }, - { - "file": "node_3.dart", - "name": "Badge 的偏移量", - "desc": [ - "【offset】 : 标记偏移量 【Offset?】", - "【alignment】 : 标题偏移 【AlignmentDirectional?】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_1.dart b/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_1.dart deleted file mode 100644 index f5173c384..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_1.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/01/27 -/// contact me by email 1981462002@qq.com - - -class BadgeDemo extends StatelessWidget { - const BadgeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const Wrap( - spacing: 20, - children: [ - Badge( - backgroundColor: Colors.redAccent, - smallSize: 10, - child: Icon(Icons.update,size: 36,color: Colors.green,), - ), - Badge( - backgroundColor: Colors.redAccent, - smallSize: 10, - isLabelVisible: false, - child: Icon(Icons.update,size: 36,color: Colors.green,), - ), - ], - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_2.dart b/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_2.dart deleted file mode 100644 index 73cf887d8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_2.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/01/27 -/// contact me by email 1981462002@qq.com - - -class BadgeLabelDemo extends StatelessWidget { - const BadgeLabelDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const Badge( - backgroundColor: Colors.red, - label: Text('99'), - textStyle: TextStyle(fontSize: 8,color: Colors.red), - padding: EdgeInsets.symmetric(horizontal: 8,vertical: 2), - largeSize: 14, - child: Icon(Icons.message,size: 36,color: Colors.indigo,), - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_3.dart b/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_3.dart deleted file mode 100644 index e815b2398..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Badge/node_3.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/01/27 -/// contact me by email 1981462002@qq.com - - -class BadgeAlignOffsetDemo extends StatelessWidget { - const BadgeAlignOffsetDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - final List info = ['默认偏移和对齐', '偏移-4,-4', '偏移-2,-2;右下角']; - final List offsets = [ - null, - const Offset(-4, -4), - const Offset(-2, -2) - ]; - final List alignments = [null, null, Alignment.bottomRight]; - - return Wrap( - spacing: 40, - children: info - .asMap() - .keys - .map((int i) => _buildShowItem(info[i], offsets[i], alignments[i])) - .toList(), - ); - } - - Widget _buildShowItem(String info, Offset? offset, Alignment? alignment) { - return Wrap( - spacing: 8, - direction: Axis.vertical, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Badge( - backgroundColor: Colors.red, - label: const Text('99'), - textStyle: const TextStyle(fontSize: 8, color: Colors.red), - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 2), - largeSize: 14, - offset: offset, - alignment: alignment, - child: const Icon(Icons.message, size: 36, color: Colors.indigo), - ), - Text( - info, - style: const TextStyle(fontSize: 10, color: Colors.grey), - ) - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_de_DE.json deleted file mode 100644 index dac9cc9b7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "Banner-Komponente", - "info": "Komponente zur Anzeige von Bannern. Kann eine Unterkomponente aufnehmen, ermöglicht die Auswahl der Position für das Banner und den Text sowie die Einstellung der Farbe.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Zur Anzeige eines Banners", - "desc": [ - "【message】 : Angezeigte Textnachricht 【String】", - "【location】 : Position*4 【BannerLocation】", - "【color】: Bannerfarbe 【Color】", - "【child】: Kind 【Widget】", - "【textStyle】: Textstil 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_en_US.json deleted file mode 100644 index a51113065..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "Badge Component", - "info": "A component for displaying badges. It can accommodate one child component, allows for the selection of orientation to add badges and informational text, and can set colors.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Used to display a badge", - "desc": [ - "【message】: The text message to display 【String】", - "【location】: Position*4 【BannerLocation】", - "【color】: Badge color 【Color】", - "【child】: Child 【Widget】", - "【textStyle】: Text style 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_es_ES.json deleted file mode 100644 index 237d2e60c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "Componente de insignia", - "info": "Componente para mostrar insignias. Puede contener un subcomponente, permite elegir la ubicación para agregar la insignia y el texto informativo, y permite configurar el color.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Para mostrar una insignia", - "desc": [ - "【message】 : Información de texto a mostrar 【String】", - "【location】 : Ubicación*4 【BannerLocation】", - "【color】: Color de la insignia 【Color】", - "【child】: Hijo 【Widget】", - "【textStyle】: Estilo del texto 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_fr_FR.json deleted file mode 100644 index 90aa4a5c7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "Composant de badge", - "info": "Composant pour l'affichage de badges. Peut contenir un composant enfant, permet de choisir l'emplacement pour ajouter un badge et du texte d'information, et de définir la couleur.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisé pour afficher un badge", - "desc": [ - "【message】 : Informations textuelles affichées 【String】", - "【location】 : Position*4 【BannerLocation】", - "【color】: Couleur du badge 【Color】", - "【child】: Enfant 【Widget】", - "【textStyle】: Style de texte 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_it_IT.json deleted file mode 100644 index c31554082..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "Componente Banner", - "info": "Componente per la visualizzazione di banner. Può contenere un componente figlio, permette di scegliere la posizione del banner e il testo informativo, e di impostare il colore.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzato per visualizzare un banner", - "desc": [ - "【message】 : Informazioni di testo visualizzate 【String】", - "【location】 : Posizione*4 【BannerLocation】", - "【color】: Colore del banner 【Color】", - "【child】: Figlio 【Widget】", - "【textStyle】: Stile del testo 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ja_JP.json deleted file mode 100644 index c36e9bd49..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "バナーコンポーネント", - "info": "バナー表示用のコンポーネントです。1つの子コンポーネントを収容でき、バナーと情報テキストを追加する位置を選択し、色を設定できます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "バナーを表示するために使用されます", - "desc": [ - "【message】 : 表示するテキスト情報 【String】", - "【location】 : 位置*4 【BannerLocation】", - "【color】: バナー色 【Color】", - "【child】: 子 【Widget】", - "【textStyle】: テキストスタイル 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ko_KR.json deleted file mode 100644 index e264df6fb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "배너 컴포넌트", - "info": "배너 표시를 위한 컴포넌트입니다. 하나의 자식 컴포넌트를 포함할 수 있으며, 배너 및 정보 텍스트를 추가할 위치를 선택할 수 있고, 색상을 설정할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "배너를 표시하는 데 사용", - "desc": [ - "【message】 : 표시할 텍스트 정보 【String】", - "【location】 : 위치*4 【BannerLocation】", - "【color】: 배너 색상 【Color】", - "【child】: 자식 【Widget】", - "【textStyle】: 텍스트 스타일 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_pt_PT.json deleted file mode 100644 index ed6402585..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "Componente de Banner", - "info": "Componente para exibição de banner. Pode conter um componente filho, permite escolher a posição para adicionar o banner e o texto informativo, e permite definir a cor.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Usado para exibir um banner", - "desc": [ - "【message】 : Informação de texto exibida 【String】", - "【location】 : Posição*4 【BannerLocation】", - "【color】: Cor do banner 【Color】", - "【child】: Filho 【Widget】", - "【textStyle】: Estilo de texto 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ru_RU.json deleted file mode 100644 index cbdc79154..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "Компонент для отображения уголка", - "info": "Компонент для отображения уголка. Может содержать один дочерний компонент, позволяет выбрать место для добавления уголка и текстовой информации, можно настроить цвет.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Для отображения уголка", - "desc": [ - "【message】 : Отображаемое текстовое сообщение 【String】", - "【location】 : Позиция*4 【BannerLocation】", - "【color】: Цвет уголка 【Color】", - "【child】: Дочерний элемент 【Widget】", - "【textStyle】: Стиль текста 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_zh-CN.json deleted file mode 100644 index 7b2765d2e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 5, - "name": "Banner", - "localName": "角标组件", - "info": "用于角标显示的组件。可容纳一个子组件,可选择方位添加角标及信息文字,可设置颜色。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "用于显示一个角标", - "desc": [ - "【message】 : 显示的文字信息 【String】", - "【location】 : 位置*4 【BannerLocation】", - "【color】: 角标颜色 【Color】", - "【child】: 孩子 【Widget】", - "【textStyle】: 文字样式 【TextStyle】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Banner/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Banner/node1_base.dart deleted file mode 100644 index 884b61031..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Banner/node1_base.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/30 -/// contact me by email 1981462002@qq.com - - -class CustomBanner extends StatelessWidget { - const CustomBanner({super.key}); - - Map get data => { - BannerLocation.topStart: Colors.red, - BannerLocation.bottomStart: Colors.green, - BannerLocation.bottomEnd: Colors.orange, - BannerLocation.topEnd: Colors.blue, - - }; - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - runSpacing: 10, - children: data.keys - .map((BannerLocation location) => Container( - color: const Color(0xffD8F5FF), - width: 150, - height: 150 * 0.618, - child: Banner( - message: "Flutter 3.29.0 发布", - location: location, - textStyle: TextStyle(fontSize: 8,height: 1), - color: data[location]!, - child: const Padding( - padding: EdgeInsets.all(20), - child: FlutterLogo( - textColor: Colors.blue, - style: FlutterLogoStyle.horizontal, - )), - ), - )).toList()); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_de_DE.json deleted file mode 100644 index 24a1898bf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "Unterer Schublade", - "info": "Als Komponente ist es eine einfache Strukturkomponente, die Form, Schattentiefe, Hintergrundfarbe und interne Komponentenkonstruktoren angeben kann. Es wird normalerweise durch die showBottomSheet-Methode von ScaffoldState von unten eingeblendet.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von BottomSheet", - "desc": [ - "【builder】 : Komponentenkonstruktor 【WidgetBuilder】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【elevation】 : Schattentiefe 【double】", - "【shape】 : Form 【ShapeBorder】", - "【onClosing】 : Schließrückruf 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_en_US.json deleted file mode 100644 index 6c7e7bb96..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "Bottom Drawer", - "info": "As a component, it is a simple structural component that can specify shape, shadow depth, background color, and internal component constructors. It generally pops up from the bottom through the showBottomSheet method of ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of BottomSheet", - "desc": [ - "【builder】: Component constructor 【WidgetBuilder】", - "【backgroundColor】: Background color 【Color】", - "【elevation】: Shadow depth 【double】", - "【shape】: Shape 【ShapeBorder】", - "【onClosing】: Closing callback 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_es_ES.json deleted file mode 100644 index d919c8110..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "Cajón Inferior", - "info": "Como componente, es una estructura simple que puede especificar forma, profundidad de sombra, color de fondo y constructor de componentes internos. Generalmente se despliega desde la parte inferior mediante el método showBottomSheet de ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de BottomSheet", - "desc": [ - "【builder】 : Constructor de componentes 【WidgetBuilder】", - "【backgroundColor】 : Color de fondo 【Color】", - "【elevation】 : Profundidad de sombra 【double】", - "【shape】 : Forma 【ShapeBorder】", - "【onClosing】 : Callback de cierre 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_fr_FR.json deleted file mode 100644 index 05e874ce6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "Tiroir inférieur", - "info": "En tant que composant, il s'agit d'un composant structurel simple qui peut spécifier la forme, la profondeur de l'ombre, la couleur de fond, le constructeur de composants internes, etc. Il est généralement affiché à partir du bas via la méthode showBottomSheet de ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de BottomSheet", - "desc": [ - "【builder】 : Constructeur de composant 【WidgetBuilder】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【elevation】 : Profondeur de l'ombre 【double】", - "【shape】 : Forme 【ShapeBorder】", - "【onClosing】 : Rappel de fermeture 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_it_IT.json deleted file mode 100644 index 9bf4f91d0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "Cassetto inferiore", - "info": "Come componente, è una struttura semplice che può specificare forma, profondità dell'ombra, colore di sfondo, costruttore di componenti interni. Di solito viene visualizzato dal basso tramite il metodo showBottomSheet di ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di BottomSheet", - "desc": [ - "【builder】 : Costruttore del componente 【WidgetBuilder】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【elevation】 : Profondità dell'ombra 【double】", - "【shape】 : Forma 【ShapeBorder】", - "【onClosing】 : Callback di chiusura 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ja_JP.json deleted file mode 100644 index 1bf8340af..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "ボトムシート", - "info": "コンポーネントとして、シンプルな構造コンポーネントであり、形状、影の深さ、背景色、内部コンポーネントのビルダーなどを指定できます。一般的にはScaffoldStateのshowBottomSheetメソッドを使用して下部からポップアップします。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomSheetの基本使用", - "desc": [ - "【builder】 : コンポーネントビルダー 【WidgetBuilder】", - "【backgroundColor】 : 背景色 【Color】", - "【elevation】 : 影の深さ 【double】", - "【shape】 : 形状 【ShapeBorder】", - "【onClosing】 : 閉じるコールバック 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ko_KR.json deleted file mode 100644 index d6ea73ed1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "하단 서랍", - "info": "컴포넌트로서는 간단한 구조 컴포넌트이며, 모양, 그림자 깊이, 배경색, 내부 컴포넌트 빌더 등을 지정할 수 있습니다. 일반적으로 ScaffoldState의 showBottomSheet 메소드를 통해 하단에서 팝업됩니다.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomSheet 기본 사용", - "desc": [ - "【builder】 : 컴포넌트 빌더 【WidgetBuilder】", - "【backgroundColor】 : 배경색 【Color】", - "【elevation】 : 그림자 깊이 【double】", - "【shape】 : 모양 【ShapeBorder】", - "【onClosing】 : 닫기 콜백 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_pt_PT.json deleted file mode 100644 index 252fc7b06..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "Gaveta Inferior", - "info": "Como componente, é uma estrutura simples que pode especificar forma, profundidade de sombra, cor de fundo, construtor de componentes internos, etc. Geralmente é exibido a partir da parte inferior através do método showBottomSheet do ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do BottomSheet", - "desc": [ - "【builder】: Construtor de Componentes 【WidgetBuilder】", - "【backgroundColor】: Cor de Fundo 【Color】", - "【elevation】: Profundidade de Sombra 【double】", - "【shape】: Forma 【ShapeBorder】", - "【onClosing】: Callback de Fechamento 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ru_RU.json deleted file mode 100644 index 777a625a3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "Нижний ящик", - "info": "Как компонент, это простая структурная компонента, которая может быть настроена по форме, глубине тени, цвету фона и конструктору внутренних компонентов. Обычно появляется снизу с помощью метода showBottomSheet ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование BottomSheet", - "desc": [ - "【builder】 : Конструктор компонентов 【WidgetBuilder】", - "【backgroundColor】 : Цвет фона 【Color】", - "【elevation】 : Глубина тени 【double】", - "【shape】 : Форма 【ShapeBorder】", - "【onClosing】 : Обратный вызов при закрытии 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_zh-CN.json deleted file mode 100644 index afe4e4994..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 142, - "name": "BottomSheet", - "localName": "底部抽屉", - "info": "作为组件来说是一个简单的结构组件,可指定形状、影深、背景色、内部组件构造器等。一般通过ScaffoldState的showBottomSheet方法从底部弹出。", - "lever": 4, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BottomSheet基本使用", - "desc": [ - "【builder】 : 组件构造器 【WidgetBuilder】", - "【backgroundColor】 : 背景色 【Color】", - "【elevation】 : 影深 【double】", - "【shape】 : 形状 【ShapeBorder】", - "【onClosing】 : 关闭回调 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/node1_base.dart deleted file mode 100644 index 36364e8ac..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BottomSheet/node1_base.dart +++ /dev/null @@ -1,53 +0,0 @@ -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; - -class CustomBottomSheet extends StatefulWidget { - const CustomBottomSheet({Key? key}) : super(key: key); - - @override - _CustomBottomSheetState createState() => _CustomBottomSheetState(); -} - -class _CustomBottomSheetState extends State { - bool opened = false; - - @override - Widget build(BuildContext context) { - return ElevatedButton( - onPressed: () { - opened = !opened; - opened - ? Scaffold.of(context).showBottomSheet((_) => _buildBottomSheet()) - : Navigator.of(context).pop(); - }, - child: const Text( - '点我显隐BottomSheet', - style: TextStyle(color: Colors.white), - )); - } - - Widget _buildBottomSheet() => BottomSheet( - enableDrag: true, - elevation: 4, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topRight: Radius.circular(60), - topLeft: Radius.circular(60), - )), - backgroundColor: Colors.transparent, - onClosing: () => print('onClosing'), - builder: (_) => (Container( - height: 250, - decoration: const BoxDecoration( - image: DecorationImage( - image: AssetImage('assets/images/sabar_bar.webp'), - fit: BoxFit.cover), - borderRadius: BorderRadius.only( - topRight: Radius.circular(60), - topLeft: Radius.circular(60), - )), - ))); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_de_DE.json deleted file mode 100644 index 5d5b14ba1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "BoxScrollView", - "info": "BoxScrollView ist eine abstrakte Klasse, die von ScrollView erbt und daher nicht direkt verwendet werden kann. Seine Unterklassen sind ListView und GridView. Normalerweise wird keine eigene Unterklasse implementiert, um es zu verwenden.", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BoxScrollView Einführung", - "desc": [ - "【reverse】 : Ob umgekehrt 【bool】", - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【cacheExtent】 : Cache-Länge 【double】", - "【dragStartBehavior】 : Ziehverhalten 【DragStartBehavior】", - "【clipBehavior】 : Beschneidungsverhalten 【ClipBehavior】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_en_US.json deleted file mode 100644 index b1f438571..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "Box Scroll View", - "info": "BoxScrollView is an abstract class that inherits from ScrollView, so it cannot be used directly. Its subclasses include ListView and GridView. Generally, you do not implement subclasses to use it.", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to BoxScrollView", - "desc": [ - "【reverse】 : Whether to reverse 【bool】", - "【scrollDirection】 : Scroll direction 【Axis】", - "【cacheExtent】 : Cache length 【double】", - "【dragStartBehavior】 : Drag start behavior 【DragStartBehavior】", - "【clipBehavior】 : Clip behavior 【ClipBehavior】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_es_ES.json deleted file mode 100644 index a121e0ac0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "Vista de desplazamiento de caja", - "info": "BoxScrollView es una clase abstracta que hereda de ScrollView, por lo que no se puede usar directamente. Sus subclases son ListView y GridView. Generalmente no se implementa una subclase para usarla", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a BoxScrollView", - "desc": [ - "【reverse】 : ¿Invertido? 【bool】", - "【scrollDirection】 : Dirección de desplazamiento 【Axis】", - "【cacheExtent】 : Longitud de caché 【double】", - "【dragStartBehavior】 : Comportamiento de arrastre 【DragStartBehavior】", - "【clipBehavior】 : Comportamiento de recorte 【ClipBehavior】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_fr_FR.json deleted file mode 100644 index 3e5554276..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "Vue de défilement de boîte", - "info": "BoxScrollView est une classe abstraite héritée de ScrollView, donc elle ne peut pas être utilisée directement. Ses sous-classes incluent ListView et GridView. Généralement, on ne l'utilise pas en implémentant une sous-classe soi-même.", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à BoxScrollView", - "desc": [ - "【reverse】 : Inverser ou non 【bool】", - "【scrollDirection】 : Direction de défilement 【Axis】", - "【cacheExtent】 : Longueur du cache 【double】", - "【dragStartBehavior】 : Comportement de glissement 【DragStartBehavior】", - "【clipBehavior】 : Comportement de découpage 【ClipBehavior】", - "【controller】 : Contrôleur 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_it_IT.json deleted file mode 100644 index 72c02fbe7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "Vista a scorrimento a scatola", - "info": "BoxScrollView è una classe astratta che eredita da ScrollView, quindi non può essere utilizzata direttamente. Le sue sottoclassi includono ListView e GridView. Generalmente non si implementa una sottoclasse per utilizzarla", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a BoxScrollView", - "desc": [ - "【reverse】 : Se invertire 【bool】", - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【cacheExtent】 : Estensione della cache 【double】", - "【dragStartBehavior】 : Comportamento di trascinamento 【DragStartBehavior】", - "【clipBehavior】 : Comportamento di ritaglio 【ClipBehavior】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ja_JP.json deleted file mode 100644 index 7c974d575..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "ボックススクロールビュー", - "info": "BoxScrollView は ScrollView を継承した抽象クラスであるため、直接使用することはできません。そのサブクラスには ListView や GridView があります。通常、自分でサブクラスを実装して使用することはありません。", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BoxScrollView 紹介", - "desc": [ - "【reverse】 : 逆方向かどうか 【bool】", - "【scrollDirection】 : スクロール方向 【Axis】", - "【cacheExtent】 : キャッシュの長さ 【double】", - "【dragStartBehavior】 : ドラッグ開始の動作 【DragStartBehavior】", - "【clipBehavior】 : クリップ動作 【ClipBehavior】", - "【controller】 : コントローラー 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ko_KR.json deleted file mode 100644 index 116839dd6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "박스 스크롤 뷰", - "info": "BoxScrollView는 ScrollView에서 상속된 추상 클래스이므로 직접 사용할 수 없습니다. 그 하위 클래스로는 ListView, GridView가 있습니다. 일반적으로 직접 하위 클래스를 구현하여 사용하지 않습니다.", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BoxScrollView 소개", - "desc": [ - "【reverse】 : 역방향 여부 【bool】", - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【cacheExtent】 : 캐시 길이 【double】", - "【dragStartBehavior】 : 드래그 시작 동작 【DragStartBehavior】", - "【clipBehavior】 : 클리핑 동작 【ClipBehavior】", - "【controller】 : 컨트롤러 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_pt_PT.json deleted file mode 100644 index 7f91210a1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "Visualização de Rolagem de Caixa", - "info": "BoxScrollView é uma classe abstrata que herda de ScrollView, portanto, não pode ser usada diretamente. Suas subclasses incluem ListView e GridView. Geralmente, não se implementa subclasses para usá-la.", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao BoxScrollView", - "desc": [ - "【reverse】 : Se é reverso 【bool】", - "【scrollDirection】 : Direção de rolagem 【Axis】", - "【cacheExtent】 : Extensão do cache 【double】", - "【dragStartBehavior】 : Comportamento de arrasto 【DragStartBehavior】", - "【clipBehavior】 : Comportamento de recorte 【ClipBehavior】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ru_RU.json deleted file mode 100644 index e0fd153b6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "Прокручиваемое представление коробки", - "info": "BoxScrollView — это абстрактный класс, который наследуется от ScrollView, поэтому его нельзя использовать напрямую. Его подклассы включают ListView и GridView. Обычно не рекомендуется самостоятельно реализовывать подклассы для его использования.", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в BoxScrollView", - "desc": [ - "【reverse】 : Обратный порядок 【bool】", - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【cacheExtent】 : Размер кэша 【double】", - "【dragStartBehavior】 : Поведение при перетаскивании 【DragStartBehavior】", - "【clipBehavior】 : Поведение обрезки 【ClipBehavior】", - "【controller】 : Контроллер 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_zh-CN.json deleted file mode 100644 index 398232fe2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 350, - "name": "BoxScrollView", - "localName": "盒滑动视图", - "info": "BoxScrollView 是一个继承自 ScrollView 的抽象类,所以无法直接使用,它的子类有 ListView、GridView。一般不自己实现子类使用它", - "lever": 1, - "family": 0, - "linkIds": [ - 183, - 162, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "BoxScrollView 介绍", - "desc": [ - "【reverse】 : 是否反向 【bool】", - "【scrollDirection】 : 滑动方向 【Axis】", - "【cacheExtent】 : 缓存长 【double】", - "【dragStartBehavior】 : 拖动行为 【DragStartBehavior】", - "【clipBehavior】 : 裁剪行为 【ClipBehavior】", - "【controller】 : 控制器 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/node1_base.dart deleted file mode 100644 index af29d47ad..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/BoxScrollView/node1_base.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class BoxScrollViewDemo extends StatelessWidget { - const BoxScrollViewDemo({Key? key}) : super(key: key); - - final String info = - 'BoxScrollView 是 ScrollView 的子类,实现了它的抽象方法,且暴露出另一个抽象方法 buildChildLayout,返回 Sliver 家族 Widget,' - '其子类有 ListView 和 GridView,分别使用 Sliver 家族相关List、Gird列表组件实现的。'; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: Column( - children: [ - Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ), - Expanded(child: MyBoxScrollView()), - ], - ), - ); - } -} - -class MyBoxScrollView extends BoxScrollView { - MyBoxScrollView({Key? key}) : super(key: key); - - final List data = [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - @override - Widget buildChildLayout(BuildContext context)=> SliverFixedExtentList( - itemExtent: 60, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_de_DE.json deleted file mode 100644 index 19ad0ac4d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "Konstruktor", - "info": "Eine Komponente, die den Platzbedarf von Unterkomponenten nicht beeinflusst und keine Anzeigeeigenschaften hat. Ihr einziger Wert besteht darin, den Kontext für das entsprechende Element der aktuellen Komponente bereitzustellen.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Verwendung von Builder", - "desc": [ - "【builder】 : Komponentenkonstruktor 【WidgetBuilder】", - "Die Verwendung der Methode `XXX.of(context)` in derselben Klasse, um ein Zustandsobjekt einer bestimmten Klasse zu erhalten, kann zu einem `Kontextverzögerungsfehler` führen. Verwenden Sie Builder, um dies zu beheben." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_en_US.json deleted file mode 100644 index 71fff4135..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "Constructor", - "info": "A component that does not affect the space occupied by child components and has no display properties. Its sole value is to provide the context for the corresponding element of the current component.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Usage of Builder", - "desc": [ - "【builder】: Component Constructor 【WidgetBuilder】", - "Using `XXX.of(context)` to obtain a state object of a certain class within the same class may result in a 'context lag' error, which can be resolved using Builder." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_es_ES.json deleted file mode 100644 index 899c3ee31..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "Constructor", - "info": "Un componente que no afecta el espacio ocupado por los componentes secundarios y no tiene visibilidad, cuyo único valor es proporcionar el contexto del elemento correspondiente al componente actual.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de Builder", - "desc": [ - "【builder】: Constructor de componentes 【WidgetBuilder】", - "El uso del método `XXX.of(context)` para obtener un objeto de estado de una clase en la misma clase puede resultar en un error de `contexto desfasado`, que se resuelve utilizando Builder." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_fr_FR.json deleted file mode 100644 index 8db8b9203..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "Constructeur", - "info": "Un composant qui n'affecte pas l'espace occupé par les composants enfants et n'a pas de visibilité, dont la seule valeur est de fournir le contexte de l'élément correspondant au composant actuel.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de Builder", - "desc": [ - "【builder】 : Constructeur de composant 【WidgetBuilder】", - "L'utilisation de la méthode `XXX.of(context)` pour obtenir un objet d'état dans la même classe peut entraîner une erreur de `contexte en retard`, résolue en utilisant Builder." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_it_IT.json deleted file mode 100644 index dd8f1a8b6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "Costruttore", - "info": "Un componente che non influisce sullo spazio occupato dai componenti figli e non ha una visualizzazione, il cui unico scopo è fornire il contesto per l'elemento corrispondente del componente corrente.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso del Builder", - "desc": [ - "【builder】 : Costruttore del componente 【WidgetBuilder】", - "L'uso del metodo `XXX.of(context)` per ottenere un oggetto di stato di un certo tipo nella stessa classe può causare un errore di `contesto in ritardo`, che viene risolto utilizzando Builder." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ja_JP.json deleted file mode 100644 index 5483ea42c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "ビルダー", - "info": "子コンポーネントのスペースに影響を与えず、表示性を持たないコンポーネントで、唯一の価値は現在のコンポーネントに対応する要素のコンテキストを提供することです。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Builderの使用", - "desc": [ - "【builder】 : コンポーネントビルダー 【WidgetBuilder】", - "同じクラス内で`XXX.of(context)`を使用して特定の状態オブジェクトを取得する方法には`コンテキストの遅延`というエラーが存在し、Builderを使用して解決します。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ko_KR.json deleted file mode 100644 index 4a7d18780..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "빌더", - "info": "하위 컴포넌트의 공간을 차지하지 않고, 시각적으로 표시되지 않는 컴포넌트로, 현재 컴포넌트에 해당하는 요소의 컨텍스트를 제공하는 유일한 가치가 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Builder 사용법", - "desc": [ - "【builder】 : 컴포넌트 빌더 【WidgetBuilder】", - "동일한 클래스에서 `XXX.of(context)`를 사용하여 특정 상태 객체를 가져오는 방법은 `컨텍스트 지연` 오류가 발생할 수 있으며, 이를 해결하기 위해 Builder를 사용합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_pt_PT.json deleted file mode 100644 index 90fa2ca1c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "Construtor", - "info": "Um componente que não afeta o espaço ocupado pelos componentes filhos e não tem visibilidade, cujo único valor é fornecer o contexto do elemento correspondente ao componente atual.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do Builder", - "desc": [ - "【builder】 : Construtor de componentes 【WidgetBuilder】", - "O uso do método `XXX.of(context)` para obter o objeto de estado de uma classe dentro da mesma classe pode resultar em um erro de `contexto atrasado`, que é resolvido usando o Builder." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ru_RU.json deleted file mode 100644 index e08118e1f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "Конструктор", - "info": "Компонент, который не влияет на занимаемое пространство дочерних компонентов и не имеет визуального отображения. Его единственная цель - предоставить контекст для соответствующего элемента текущего компонента.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование Builder", - "desc": [ - "【builder】 : Конструктор компонента 【WidgetBuilder】", - "Использование метода `XXX.of(context)` для получения объекта состояния определенного класса в одном и том же классе может привести к ошибке `задержки контекста`. Используйте Builder для решения этой проблемы." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_zh-CN.json deleted file mode 100644 index 93bbb25f4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 202, - "name": "Builder", - "localName": "构造器", - "info": "一个不影响子组件占位空间,不具有显示性的组件,存在的唯一价值是提供当前组件对应元素的上下文。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Builder的使用", - "desc": [ - "【builder】 : 组件构造器 【WidgetBuilder】", - "同一个类中使用`XXX.of(context)`获取某类状态对象方法会存在`上下文滞后`的错误,使用Builder解决。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Builder/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Builder/node1_base.dart deleted file mode 100644 index 83e7e8ace..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Builder/node1_base.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/5/3 -/// contact me by email 1981462002@qq.com - - -class BuilderDemo extends StatelessWidget { - const BuilderDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Scaffold( - appBar: AppBar( - title: const Text('Builder'), - ), - floatingActionButton: Builder( - builder: (ctx) => FloatingActionButton( - onPressed: () { - ScaffoldMessenger.of(ctx).showSnackBar(const SnackBar(content: Text('hello builder'))); - }, - child: const Icon(Icons.add), - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_de_DE.json deleted file mode 100644 index a4ab2fa3a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "Schaltflächenleiste", - "info": "Empfängt eine Liste von Komponenten, die häufig verwendet wird, um mehrere Schaltflächen zu enthalten. Kann Ausrichtung, Ränder usw. angeben.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonBar-Ausrichtung", - "desc": [ - "【alignment】: Ausrichtung 【MainAxisAlignment】", - "【children】: Untergeordnete Komponenten 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "ButtonBar-Ränder und Höhe", - "desc": [ - "【buttonPadding】: Innenabstand 【EdgeInsetsGeometry】", - "【buttonHeight】: Höhe 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_en_US.json deleted file mode 100644 index 5a3eddd89..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "Button Bar", - "info": "Receives a list of components, often used to hold several buttons. You can specify alignment, margins, and other information.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonBar Alignment", - "desc": [ - "【alignment】: Alignment 【MainAxisAlignment】", - "【children】: Child components 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "ButtonBar Margin and Height", - "desc": [ - "【buttonPadding】: Padding 【EdgeInsetsGeometry】", - "【buttonHeight】: Height 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_es_ES.json deleted file mode 100644 index c2ddb366a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "Barra de botones", - "info": "Recibe una lista de componentes, comúnmente utilizada para contener varios botones. Se pueden especificar la alineación, los márgenes, etc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Alineación de la Barra de botones", - "desc": [ - "【alignment】: Alineación 【MainAxisAlignment】", - "【children】: Conjunto de componentes hijos 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "Márgenes y altura de la Barra de botones", - "desc": [ - "【buttonPadding】: Relleno interno 【EdgeInsetsGeometry】", - "【buttonHeight】: Altura 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_fr_FR.json deleted file mode 100644 index 329762a4d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "Barre de boutons", - "info": "Reçoit une liste de composants, souvent utilisée pour contenir plusieurs boutons. Peut spécifier l'alignement, les marges, etc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Alignement de la barre de boutons", - "desc": [ - "【alignment】: Alignement 【MainAxisAlignment】", - "【children】: Ensemble de composants enfants 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "Marge et hauteur de la barre de boutons", - "desc": [ - "【buttonPadding】: Marge intérieure 【EdgeInsetsGeometry】", - "【buttonHeight】: Hauteur 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_it_IT.json deleted file mode 100644 index f976469f7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "Barra dei pulsanti", - "info": "Riceve un elenco di componenti, spesso utilizzato per contenere diversi pulsanti. È possibile specificare l'allineamento, i margini, ecc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Allineamento della ButtonBar", - "desc": [ - "【alignment】: Allineamento 【MainAxisAlignment】", - "【children】: Insieme di componenti figli 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "Margini e altezza della ButtonBar", - "desc": [ - "【buttonPadding】: Margine interno 【EdgeInsetsGeometry】", - "【buttonHeight】: Altezza 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ja_JP.json deleted file mode 100644 index e2a5b021c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "ボタンバー", - "info": "コンポーネントリストを受け取り、通常はいくつかのボタンを配置するために使用されます。配置方法や余白などを指定できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonBarの配置方法", - "desc": [ - "【alignment】: 配置方法 【MainAxisAlignment】", - "【children】: 子コンポーネントセット 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "ButtonBarの余白と高さ", - "desc": [ - "【buttonPadding】: 内側の余白 【EdgeInsetsGeometry】", - "【buttonHeight】: 高さ 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ko_KR.json deleted file mode 100644 index cc7d57b3c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "버튼 바", - "info": "컴포넌트 리스트를 받아들이며, 주로 여러 버튼을 담는 데 사용됩니다. 정렬 방식, 여백 등을 지정할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonBar 정렬 방식", - "desc": [ - "【alignment】: 정렬 방식 【MainAxisAlignment】", - "【children】: 자식 컴포넌트 집합 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "ButtonBar 여백과 높이", - "desc": [ - "【buttonPadding】: 안쪽 여백 【EdgeInsetsGeometry】", - "【buttonHeight】: 높이 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_pt_PT.json deleted file mode 100644 index 31ef2efce..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "Barra de Botões", - "info": "Recebe uma lista de componentes, frequentemente usada para conter vários botões. Pode especificar alinhamento, margens, etc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Alinhamento da Barra de Botões", - "desc": [ - "【alignment】: Alinhamento 【MainAxisAlignment】", - "【children】: Conjunto de componentes filhos 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "Margens e Altura da Barra de Botões", - "desc": [ - "【buttonPadding】: Margem interna 【EdgeInsetsGeometry】", - "【buttonHeight】: Altura 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ru_RU.json deleted file mode 100644 index 7a57b239c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "Панель кнопок", - "info": "Принимает список компонентов, часто используется для размещения нескольких кнопок. Можно указать выравнивание, отступы и другую информацию.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Выравнивание ButtonBar", - "desc": [ - "【alignment】: Выравнивание 【MainAxisAlignment】", - "【children】: Набор дочерних компонентов 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "Отступы и высота ButtonBar", - "desc": [ - "【buttonPadding】: Внутренние отступы 【EdgeInsetsGeometry】", - "【buttonHeight】: Высота 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_zh-CN.json deleted file mode 100644 index afbc84717..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 29, - "name": "ButtonBar", - "localName": "按钮栏", - "info": "接收组件列表,常用于盛放若干个按钮。可指定对齐方式、边距等信息。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ButtonBar对齐方式", - "desc": [ - "【alignment】: 对齐方式 【MainAxisAlignment】", - "【children】: 子组件集 【List】" - ] - }, - { - "file": "node2_padding.dart", - "name": "ButtonBar边距和高", - "desc": [ - "【buttonPadding】: 内边距 【EdgeInsetsGeometry】", - "【buttonHeight】: 高 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/node1_base.dart deleted file mode 100644 index 12c2f4ce0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/node1_base.dart +++ /dev/null @@ -1,31 +0,0 @@ -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; -import 'package:widgets/utils/dialog_about.dart'; - - -class CustomButtonBar extends StatelessWidget { - const CustomButtonBar({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ButtonBar( - alignment: MainAxisAlignment.center, - children: [ - ElevatedButton( - child: const Text("ElevatedButton"), - onPressed: () => DialogAbout.show(context)), - OutlinedButton( - child: const Text("Outlined"), - onPressed: () => DialogAbout.show(context)), - TextButton( - onPressed: () => DialogAbout.show(context), - child: const Text("TextButton"), - ) - ], - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/node2_padding.dart b/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/node2_padding.dart deleted file mode 100644 index 7c35a8dbd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ButtonBar/node2_padding.dart +++ /dev/null @@ -1,32 +0,0 @@ - -import 'package:flutter/material.dart'; -import 'package:widgets/utils/dialog_about.dart'; - - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class PaddingButtonBar extends StatelessWidget { - const PaddingButtonBar({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return ButtonBar( - alignment: MainAxisAlignment.center, - buttonHeight: 40, - buttonPadding: const EdgeInsets.only(left: 15,right: 15), - children: [ - ElevatedButton( - child: const Text("ElevatedButton"), - onPressed: () => DialogAbout.show(context)), - OutlinedButton( - child: const Text("Outlined"), - onPressed: () => DialogAbout.show(context)), - TextButton( - onPressed: () => DialogAbout.show(context), - child: const Text("TextButton"), - ) - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_de_DE.json deleted file mode 100644 index 350077f30..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "Kartenkomponente", - "info": " Basierend auf Material-Komponenten implementiert, wird verwendet, um eine einzelne Komponente zu karten. Es verleiht ihr einen Schatteneffekt, kann Außenabstände hinzufügen und die Form der Karte anpassen.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Card kann eine Komponente karten", - "desc": [ - "【elevation】 : Schattentiefe 【double】", - "【margin】: Außenabstand 【double】", - "【color】: Farbe 【Color】", - "【child】: Kind 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Kann durch die shape-Eigenschaft einen Zuschneideeffekt erzielen", - "desc": [ - "【shape】 : Form 【ShapeBorder】", - "【margin】: Außenabstand 【double】", - "【color】: Farbe 【Color】", - "【child】: Kind 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_en_US.json deleted file mode 100644 index 0e2687aaa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "Card Component", - "info": "Implemented based on Material components, used to cardify a single component. It has a shadow effect, can add margin, and can customize the shape of the card.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Card can cardify a component", - "desc": [ - "【elevation】: Shadow depth 【double】", - "【margin】: Margin 【double】", - "【color】: Color 【Color】", - "【child】: Child 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Can achieve clipping effect through the shape property", - "desc": [ - "【shape】: Shape 【ShapeBorder】", - "【margin】: Margin 【double】", - "【color】: Color 【Color】", - "【child】: Child 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_es_ES.json deleted file mode 100644 index 1306be48f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "Componente de tarjeta", - "info": "Implementado basado en componentes Material, utilizado para convertir un solo componente en una tarjeta. Y hacer que tenga un efecto de sombra, se puede agregar margen exterior y también se puede personalizar la forma de la tarjeta.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Card puede convertir un componente en una tarjeta", - "desc": [ - "【elevation】 : profundidad de la sombra 【double】", - "【margin】: margen exterior 【double】", - "【color】: color 【Color】", - "【child】: hijo 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Se puede lograr un efecto de recorte a través de la propiedad shape", - "desc": [ - "【shape】 : forma 【ShapeBorder】", - "【margin】: margen exterior 【double】", - "【color】: color 【Color】", - "【child】: hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_fr_FR.json deleted file mode 100644 index 4430a0d32..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "Composant Carte", - "info": " Basé sur les composants Material, utilisé pour transformer un composant unique en carte. Il peut avoir un effet d'ombre, peut ajouter des marges extérieures, et peut également personnaliser la forme de la carte.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Card peut transformer un composant en carte", - "desc": [ - "【elevation】 : profondeur de l'ombre 【double】", - "【margin】: marge extérieure 【double】", - "【color】: couleur 【Color】", - "【child】: enfant 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Peut réaliser un effet de découpe via la propriété shape", - "desc": [ - "【shape】 : forme 【ShapeBorder】", - "【margin】: marge extérieure 【double】", - "【color】: couleur 【Color】", - "【child】: enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_it_IT.json deleted file mode 100644 index d1c82e199..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "Componente Carta", - "info": "Implementato basandosi sui componenti Material, utilizzato per trasformare un singolo componente in una carta. Con effetti di ombreggiatura, può includere margini esterni e consente la personalizzazione della forma della carta.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Card può trasformare un componente in una carta", - "desc": [ - "【elevation】 : profondità dell'ombra 【double】", - "【margin】: margine esterno 【double】", - "【color】: colore 【Color】", - "【child】: figlio 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "È possibile ottenere effetti di ritaglio attraverso la proprietà shape", - "desc": [ - "【shape】 : forma 【ShapeBorder】", - "【margin】: margine esterno 【double】", - "【color】: colore 【Color】", - "【child】: figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ja_JP.json deleted file mode 100644 index f3c87b5a5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "カードコンポーネント", - "info": "Materialコンポーネントに基づいて実装され、単一のコンポーネントをカード化するために使用されます。また、投影効果を持たせることができ、外側の余白を追加したり、カードの形状をカスタマイズすることもできます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Cardはコンポーネントをカード化することができます", - "desc": [ - "【elevation】 : 影の深さ 【double】", - "【margin】: 外側の余満 【double】", - "【color】: 色 【Color】", - "【child】: 子 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "shapeプロパティを使用して切り取り効果を実現できます", - "desc": [ - "【shape】 : 形状 【ShapeBorder】", - "【margin】: 外側の余満 【double】", - "【color】: 色 【Color】", - "【child】: 子 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ko_KR.json deleted file mode 100644 index 3bd5e7962..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "카드 컴포넌트", - "info": "Material 컴포넌트를 기반으로 구현되었으며, 단일 컴포넌트를 카드화하는 데 사용됩니다. 그림자 효과를 가지며, 외부 여백을 추가할 수 있고, 카드 모양을 사용자 정의할 수도 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Card는 컴포넌트를 카드화할 수 있습니다", - "desc": [ - "【elevation】 : 그림자 깊이 【double】", - "【margin】: 외부 여백 【double】", - "【color】: 색상 【Color】", - "【child】: 자식 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "shape 속성을 통해 잘라내기 효과를 구현할 수 있습니다", - "desc": [ - "【shape】 : 모양 【ShapeBorder】", - "【margin】: 외부 여백 【double】", - "【color】: 색상 【Color】", - "【child】: 자식 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_pt_PT.json deleted file mode 100644 index 5dd17b24e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "Componente de Cartão", - "info": "Implementado com base em componentes Material, usado para transformar um único componente em um cartão. E fazê-lo ter um efeito de sombra, pode adicionar margem externa e também pode personalizar a forma do cartão.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "O Card pode transformar um componente em um cartão", - "desc": [ - "【elevation】 : Profundidade da sombra 【double】", - "【margin】: Margem externa 【double】", - "【color】: Cor 【Color】", - "【child】: Filho 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Pode-se alcançar o efeito de corte através da propriedade shape", - "desc": [ - "【shape】 : Forma 【ShapeBorder】", - "【margin】: Margem externa 【double】", - "【color】: Cor 【Color】", - "【child】: Filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ru_RU.json deleted file mode 100644 index 7b304d073..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "Карточка", - "info": "Реализовано на основе компонентов Material, используется для карточного оформления отдельного компонента. Имеет эффект тени, можно добавить внешние отступы, также можно настроить форму карточки.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Card может сделать компонент карточным", - "desc": [ - "【elevation】 : Глубина тени 【double】", - "【margin】: Внешний отступ 【double】", - "【color】: Цвет 【Color】", - "【child】: Дочерний элемент 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Можно реализовать эффект обрезки с помощью свойства shape", - "desc": [ - "【shape】 : Форма 【ShapeBorder】", - "【margin】: Внешний отступ 【double】", - "【color】: Цвет 【Color】", - "【child】: Дочерний элемент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_zh-CN.json deleted file mode 100644 index f0de12b03..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 3, - "name": "Card", - "localName": "卡片组件", - "info": " 基于Material组件实现,用于将单个组件卡片化。并使其具有投影效果,可加外边距,也可以自定义卡片形状。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Card可以让一个组件卡片化", - "desc": [ - "【elevation】 : 影深 【double】", - "【margin】: 外边距 【double】", - "【color】: 颜色 【Color】", - "【child】: 孩子 【Widget】" - ] - }, - { - "file": "node2_shape.dart", - "name": "可以通过shape属性实现裁切效果", - "desc": [ - "【shape】 : 形状 【ShapeBorder】", - "【margin】: 外边距 【double】", - "【color】: 颜色 【Color】", - "【child】: 孩子 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Card/node1_base.dart deleted file mode 100644 index eb27e7f4b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/node1_base.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class CustomCard extends StatelessWidget { - const CustomCard({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Card( - color: const Color(0xffB3FE65), - elevation: 4, - margin: const EdgeInsets.all(10), - child: Container( - alignment: Alignment.topLeft, - width: 200, - height: 0.618 * 200, - margin: const EdgeInsets.all(10), - child: const Text("Card", style: TextStyle(fontSize: 20)), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Card/node2_shape.dart b/modules/widget_system/widgets/lib/StatelessWidget/Card/node2_shape.dart deleted file mode 100644 index a58450184..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Card/node2_shape.dart +++ /dev/null @@ -1,50 +0,0 @@ - - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; -import 'package:widgets/utils/pather.dart'; - -class ShapeCard extends StatelessWidget { - const ShapeCard({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Card( - color: const Color(0xffB3FE65), - elevation: 6, - shape: StarShapeBorder(), - child: Container( - alignment: Alignment.center, - width: 100, - height: 100, - child: const Text("Card", style: TextStyle(fontSize: 20)), - ), - ); - } -} - -class StarShapeBorder extends ShapeBorder { - @override - EdgeInsetsGeometry get dimensions => EdgeInsets.zero; - - @override - Path getInnerPath(Rect rect, {TextDirection? textDirection}) { - return Path(); - } - - @override - Path getOuterPath(Rect rect, {TextDirection? textDirection}) => - Pather.create.nStarPath(9, 50, 40, dx: 50, dy: 50); - - @override - void paint(Canvas canvas, Rect rect, {TextDirection? textDirection}) { - } - - @override - ShapeBorder scale(double t) { - return this; - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_de_DE.json deleted file mode 100644 index 327dfa245..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_de_DE.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "Kachel mit Kontrollkästchen", - "info": "Eine allgemeine Listenstruktur, die von Flutter bereitgestellt wird, hat eine linke und mittlere Struktur, wobei sich am Ende ein CheckBox befindet. An den entsprechenden Positionen können Komponenten eingefügt werden, was eine einfache Anpassung an spezifische Einträge ermöglicht.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Darstellung der CheckBoxListTile", - "desc": [ - "【secondary】: Linke Komponente 【Widget】", - "【checkColor】: Farbe des Häkchens 【Color】", - "【activeColor】: Farbe des Rahmens bei Auswahl 【Color】", - "【title】: Obere mittlere Komponente 【Widget】", - "【subtitle】: Untere mittlere Komponente 【Widget】", - "【onChanged】: Auswahlereignis 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Auswahleffekt der CheckBoxListTile", - "desc": [ - "【selected】: Ob ausgewählt 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Dichte Eigenschaft der CheckBoxListTile", - "desc": [ - "【dense】: Ob dicht angeordnet 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_en_US.json deleted file mode 100644 index 0c257dc62..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_en_US.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "Checkbox Tile", - "info": "A common list item structure provided by Flutter, featuring a left-middle structure with a CheckBox at the end. Components can be inserted at the corresponding positions, making it easy to handle specific items.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic representation of CheckBoxListTile", - "desc": [ - "【secondary】: Left component 【Widget】", - "【checkColor】: ✔️ color 【Color】", - "【activeColor】: Frame color when selected 【Color】", - "【title】: Top middle component 【Widget】", - "【subtitle】: Bottom middle component 【Widget】", - "【onChanged】: Selection event 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Selection effect of CheckBoxListTile", - "desc": [ - "【selected】: Whether selected 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Dense property of CheckBoxListTile", - "desc": [ - "【dense】: Whether dense 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_es_ES.json deleted file mode 100644 index 076a7263d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_es_ES.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "Casilla de verificación", - "info": "Una estructura de lista genérica proporcionada por Flutter, con una estructura de izquierda a centro, y un CheckBox al final. Se pueden insertar componentes en las posiciones correspondientes, lo que permite manejar fácilmente elementos específicos.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "El comportamiento básico de CheckBoxListTile es el siguiente", - "desc": [ - "【secondary】: Componente izquierdo 【Widget】", - "【checkColor】: Color del ✔️ 【Color】", - "【activeColor】: Color del borde cuando está seleccionado 【Color】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【onChanged】: Evento de selección 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Efecto de selección de CheckBoxListTile", - "desc": [ - "【selected】: Si está seleccionado 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propiedad de densidad de CheckBoxListTile", - "desc": [ - "【dense】: Si está en modo denso 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_fr_FR.json deleted file mode 100644 index 616d472e8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_fr_FR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "Tuile de case à cocher", - "info": "Une structure de liste générique fournie par Flutter, de structure gauche-centre, avec une case à cocher à la fin. Des composants peuvent être insérés aux positions correspondantes, ce qui permet de répondre facilement à des entrées spécifiques.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La performance de base de CheckBoxListTile est la suivante", - "desc": [ - "【secondary】: Composant gauche 【Widget】", - "【checkColor】: Couleur de la coche 【Color】", - "【activeColor】: Couleur de la bordure lors de la sélection 【Color】", - "【title】: Composant supérieur central 【Widget】", - "【subtitle】: Composant inférieur central 【Widget】", - "【onChanged】: Événement de sélection 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Effet de sélection de CheckBoxListTile", - "desc": [ - "【selected】: Est sélectionné 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propriété de densité de CheckBoxListTile", - "desc": [ - "【dense】: Est dense 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_it_IT.json deleted file mode 100644 index c3891f1bd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_it_IT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "Piastrella di selezione", - "info": "Una struttura di elenco generica fornita da Flutter, con una struttura sinistra-centro, e una casella di controllo alla fine. I componenti possono essere inseriti nelle posizioni corrispondenti, rendendo facile affrontare voci specifiche.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La rappresentazione di base di CheckBoxListTile è la seguente", - "desc": [ - "【secondary】: Componente sinistro 【Widget】", - "【checkColor】: Colore del segno di spunta 【Color】", - "【activeColor】: Colore del bordo quando selezionato 【Color】", - "【title】: Componente superiore centrale 【Widget】", - "【subtitle】: Componente inferiore centrale 【Widget】", - "【onChanged】: Evento di selezione 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Effetto di selezione di CheckBoxListTile", - "desc": [ - "【selected】: Se selezionato 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Proprietà di disposizione compatta di CheckBoxListTile", - "desc": [ - "【dense】: Se disposto in modo compatto 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ja_JP.json deleted file mode 100644 index 969448a1e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ja_JP.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "チェックボックスリストタイル", - "info": "Flutterが提供する汎用リストアイテム構造で、左中構造で、末尾にCheckBoxがあります。適切な位置にコンポーネントを挿入でき、特定のアイテムに簡単に対応できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CheckBoxListTileの基本表現は以下の通りです", - "desc": [ - "【secondary】: 左側コンポーネント 【Widget】", - "【checkColor】: ✔️色 【Color】", - "【activeColor】: 選択時の外枠色 【Color】", - "【title】: 中央上部コンポーネント 【Widget】", - "【subtitle】: 中央下部コンポーネント 【Widget】", - "【onChanged】: 選択イベント 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "CheckBoxListTileの選択効果", - "desc": [ - "【selected】: 選択されているかどうか 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "CheckBoxListTileの密排属性", - "desc": [ - "【dense】: 密排かどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ko_KR.json deleted file mode 100644 index 06ab1886f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ko_KR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "체크박스 타일", - "info": "Flutter에서 제공하는 일반적인 목록 항목 구조로, 왼쪽과 중앙 구조이며, 끝에는 CheckBox가 있습니다. 해당 위치에 컴포넌트를 삽입할 수 있어 특정 항목에 쉽게 대응할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CheckBoxListTile의 기본적인 표현은 다음과 같습니다", - "desc": [ - "【secondary】: 왼쪽 컴포넌트 【Widget】", - "【checkColor】: ✔️ 색상 【Color】", - "【activeColor】: 선택 시 외곽선 색상 【Color】", - "【title】: 중앙 상단 컴포넌트 【Widget】", - "【subtitle】: 중앙 하단 컴포넌트 【Widget】", - "【onChanged】: 선택 이벤트 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "CheckBoxListTile의 선택 효과", - "desc": [ - "【selected】: 선택 여부 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "CheckBoxListTile의 밀집 속성", - "desc": [ - "【dense】: 밀집 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_pt_PT.json deleted file mode 100644 index fe70e8627..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_pt_PT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "Azulejo de Seleção", - "info": "Uma estrutura de item de lista genérica fornecida pelo Flutter, com uma estrutura esquerda-central, e uma CheckBox na extremidade. Componentes podem ser inseridos nas posições correspondentes, permitindo uma fácil adaptação a itens específicos.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "A apresentação básica do CheckBoxListTile é a seguinte", - "desc": [ - "【secondary】: Componente do lado esquerdo 【Widget】", - "【checkColor】: Cor do ✔️ 【Color】", - "【activeColor】: Cor da moldura quando selecionado 【Color】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【onChanged】: Evento de seleção 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Efeito de seleção do CheckBoxListTile", - "desc": [ - "【selected】: Se está selecionado 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propriedade de densidade do CheckBoxListTile", - "desc": [ - "【dense】: Se está em alta densidade 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ru_RU.json deleted file mode 100644 index e21dca7eb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_ru_RU.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "Флажок плитки", - "info": "Универсальная структура элемента списка, предоставляемая Flutter, имеет лево-центральную структуру, а в конце находится CheckBox. Компоненты могут быть вставлены в соответствующие позиции, что позволяет легко адаптироваться к конкретным элементам.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное представление CheckBoxListTile выглядит следующим образом", - "desc": [ - "【secondary】: Левый компонент 【Widget】", - "【checkColor】: Цвет ✔️ 【Color】", - "【activeColor】: Цвет рамки при выборе 【Color】", - "【title】: Верхний центральный компонент 【Widget】", - "【subtitle】: Нижний центральный компонент 【Widget】", - "【onChanged】: Событие выбора 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Эффект выбора CheckBoxListTile", - "desc": [ - "【selected】: Выбрано ли 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Свойство плотного расположения CheckBoxListTile", - "desc": [ - "【dense】: Плотное ли расположение 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_zh-CN.json deleted file mode 100644 index 02ac59622..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/desc_zh-CN.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 17, - "name": "CheckboxListTile", - "localName": "复选瓦片", - "info": "Flutter提供的一个通用列表条目结构,为左中结构,尾部是一个CheckBox。相应位置可插入组件,可以很方便地应对特定的条目。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CheckBoxListTile的基本表现如下", - "desc": [ - "【secondary】: 左侧组件 【Widget】", - "【checkColor】: ✔️颜色 【Color】", - "【activeColor】: 选中时外框颜色 【Color】", - "【title】: 中间上组件 【Widget】", - "【subtitle】: 中间下组件 【Widget】", - "【onChanged】: 选中事件 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "CheckBoxListTile的选中效果", - "desc": [ - "【selected】: 是否选中 【bool】" - ] - }, - { - "file": "node3_dense.dart", - "name": "CheckBoxListTile的密排属性", - "desc": [ - "【dense】: 是否密排 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node1_base.dart deleted file mode 100644 index 9d0a9b4bf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node1_base.dart +++ /dev/null @@ -1,33 +0,0 @@ - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; - -class CustomCheckBoxListTile extends StatefulWidget { - const CustomCheckBoxListTile({Key? key}) : super(key: key); - - @override - _CustomCheckBoxListTileState createState() => _CustomCheckBoxListTileState(); -} - -class _CustomCheckBoxListTileState extends State { - bool _selected = false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: CheckboxListTile( - value: _selected, - checkColor: Colors.yellow, - activeColor: Colors.orangeAccent, - secondary: Image.asset("assets/images/icon_head.webp"), - title: const Text("张风捷特烈"), - subtitle: const Text("@万花过尽知无物"), - onChanged: (v) => setState(() => _selected = !_selected), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node2_select.dart b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node2_select.dart deleted file mode 100644 index f6fd5c804..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node2_select.dart +++ /dev/null @@ -1,34 +0,0 @@ - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; - -class SelectCheckBoxListTile extends StatefulWidget { - const SelectCheckBoxListTile({Key? key}) : super(key: key); - - @override - _SelectCheckBoxListTileState createState() => _SelectCheckBoxListTileState(); -} - -class _SelectCheckBoxListTileState extends State { - bool _selected = false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: CheckboxListTile( - value: _selected, - selected: _selected, - checkColor: Colors.yellow, - activeColor: Colors.orangeAccent, - secondary: Image.asset("assets/images/icon_head.webp"), - title: const Text("张风捷特烈"), - subtitle: const Text("@万花过尽知无物"), - onChanged: (v) => setState(() => _selected = !_selected), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node3_dense.dart b/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node3_dense.dart deleted file mode 100644 index e65566b78..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckboxListTile/node3_dense.dart +++ /dev/null @@ -1,34 +0,0 @@ -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; - -class DenseCheckBoxListTile extends StatefulWidget { - const DenseCheckBoxListTile({Key? key}) : super(key: key); - - @override - _DenseCheckBoxListTileState createState() => _DenseCheckBoxListTileState(); -} - -class _DenseCheckBoxListTileState extends State { - bool _selected = false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: CheckboxListTile( - value: _selected, - dense: true, - checkColor: Colors.yellow, - activeColor: Colors.orangeAccent, - secondary: Image.asset("assets/images/icon_head.webp"), - title: const Text("张风捷特烈"), - subtitle: const Text("@万花过尽知无物"), - onChanged: (v) => setState(() => _selected = !_selected), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_de_DE.json deleted file mode 100644 index 16eb1fdd3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "Debug-Label", - "info": "Wird nur im Debug-Modus in der oberen rechten Ecke angezeigt und hat keine große Bedeutung. Wird im MaterialApp-Komponenten-Quellcode verwendet.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CheckedModeBanner", - "desc": [ - "【child】 : Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_en_US.json deleted file mode 100644 index bcff1cf43..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "debug label", - "info": "Only shows the corner mark in the upper right corner in debug mode, which is not very useful. There are usage scenarios in the MaterialApp component source code.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic usage of CheckedModeBanner", - "desc": [ - "【child】 : Component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_es_ES.json deleted file mode 100644 index 69cdea9a5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "etiqueta de depuración", - "info": "Solo muestra la esquina superior derecha en el modo de ejecución debug, no tiene mucha utilidad. Tiene un caso de uso en el código fuente del componente MaterialApp.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CheckedModeBanner", - "desc": [ - "【child】 : componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_fr_FR.json deleted file mode 100644 index cdce1d8c3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "étiquette de débogage", - "info": "Affiche uniquement le badge en haut à droite en mode de débogage, ce qui n'est pas très utile. Utilisé dans le code source du composant MaterialApp.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CheckedModeBanner", - "desc": [ - "【child】 : composant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_it_IT.json deleted file mode 100644 index 970ea5b0e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "etichetta di debug", - "info": "Mostra l'etichetta nell'angolo superiore destro solo in modalità debug, non ha molto uso. È utilizzato nel codice sorgente del componente MaterialApp.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CheckedModeBanner", - "desc": [ - "【child】 : componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ja_JP.json deleted file mode 100644 index ef3ea16d5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "デバッグタグ", - "info": "デバッグ実行モードでのみ右上の角に表示されるバッジで、あまり役に立ちません。MaterialAppコンポーネントのソースコードで使用例があります。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CheckedModeBannerの基本的な使用", - "desc": [ - "【child】 : コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ko_KR.json deleted file mode 100644 index 7b034ecf2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "디버그 라벨", - "info": "디버그 실행 모드에서만 오른쪽 상단 코너에 표시되며, 특별히 큰 의미는 없습니다. MaterialApp 컴포넌트 소스 코드에서 사용 사례가 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CheckedModeBanner 기본 사용", - "desc": [ - "【child】 : 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_pt_PT.json deleted file mode 100644 index 6f44c1075..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "etiqueta de depuração", - "info": "Exibe o ícone no canto superior direito apenas no modo de execução de depuração, não tem muita utilidade. Há cenários de uso no código-fonte do componente MaterialApp.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CheckedModeBanner", - "desc": [ - "【child】 : componente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ru_RU.json deleted file mode 100644 index b11b14015..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "отладочная метка", - "info": "Отображает значок в правом верхнем углу только в режиме отладки, не имеет особого значения. Используется в исходном коде компонента MaterialApp.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CheckedModeBanner", - "desc": [ - "【child】 : компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_zh-CN.json deleted file mode 100644 index 72c0cd98d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 215, - "name": "CheckedModeBanner", - "localName": "debug标签", - "info": "仅在debug运行模式中显示右上角角标,没什么太大卵用。在 MaterialApp 组件源码中有使用场景。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CheckedModeBanner基本使用", - "desc": [ - "【child】 : 组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/node1_base.dart deleted file mode 100644 index 6cf083097..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CheckedModeBanner/node1_base.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class CheckedModeBannerDemo extends StatelessWidget { - const CheckedModeBannerDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return CheckedModeBanner( - child: Container( - alignment: Alignment.center, - width: 250, - height: 150, - color: Theme.of(context).primaryColor, - child: const Text( - "CheckedModeBanner", - style: TextStyle(color: Colors.white, fontSize: 20), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_de_DE.json deleted file mode 100644 index 222ba57f1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_de_DE.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "Kleine Leiste Komponente", - "info": "Eine horizontale, abgerundete kleine Leiste, die links, mittig und rechts Komponenten enthalten kann. Kann Farbe, Schattenfarbe und Klick-Ereignisse angeben.", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Normale Darstellung des Chips wie folgt", - "desc": [ - "【avatar】: Linke Komponente 【Widget】", - "【label】: Mittlere Komponente 【Widget】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】", - "【labelPadding】: Label-Abstand 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Farbe und Schatten können eingestellt werden", - "desc": [ - "【backgroundColor】: Hintergrundfarbe 【Color】", - "【shadowColor】: Schattenfarbe 【Color】", - "【elevation】: Schattentiefe 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "Rechte Klick-Schaltfläche kann eingestellt werden", - "desc": [ - "【deleteIcon】: Rechte Komponente (normalerweise ein Icon) 【Widget】", - "【deleteIconColor】: Farbe der rechten Komponente 【Color】", - "【onDeleted】: Klick-Ereignis der rechten Komponente 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_en_US.json deleted file mode 100644 index 6318c42a6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_en_US.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "Chip Component", - "info": "A horizontal rounded bar that can contain left, middle, and right components. You can specify colors, shadow colors, and click events.", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "The normal appearance of Chip is as follows", - "desc": [ - "【avatar】: Left component 【Widget】", - "【label】: Middle component 【Widget】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【labelPadding】: Label padding 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "You can set colors and shadows", - "desc": [ - "【backgroundColor】: Background color 【Color】", - "【shadowColor】: Shadow color 【Color】", - "【elevation】: Shadow depth 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "You can set the right click button", - "desc": [ - "【deleteIcon】: Right component (usually an Icon) 【Widget】", - "【deleteIconColor】: Right component color 【Color】", - "【onDeleted】: Right component click event 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_es_ES.json deleted file mode 100644 index 0b116b3b4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_es_ES.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "Componente de barra pequeña", - "info": "Una barra pequeña con bordes redondeados en horizontal, puede contener tres componentes: izquierdo, central y derecho. Se puede especificar el color, el color de la sombra y el evento de clic.", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "El comportamiento normal de Chip es el siguiente", - "desc": [ - "【avatar】: Componente izquierdo 【Widget】", - "【label】: Componente central 【Widget】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】", - "【labelPadding】: Relleno del label 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Se puede configurar el color y la sombra", - "desc": [ - "【backgroundColor】: Color de fondo 【Color】", - "【shadowColor】: Color de la sombra 【Color】", - "【elevation】: Profundidad de la sombra 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "Se puede configurar el botón de clic derecho", - "desc": [ - "【deleteIcon】: Componente derecho (normalmente un Icono) 【Widget】", - "【deleteIconColor】: Color del componente derecho 【Color】", - "【onDeleted】: Evento de clic del componente derecho 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_fr_FR.json deleted file mode 100644 index dd86d847d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_fr_FR.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "Composant Petite Barre", - "info": "Une petite barre horizontale aux bords arrondis, pouvant contenir trois composants à gauche, au centre et à droite. Peut spécifier la couleur, la couleur de l'ombre et l'événement de clic.", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La performance normale de Chip est la suivante", - "desc": [ - "【avatar】: Composant gauche 【Widget】", - "【label】: Composant central 【Widget】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】", - "【labelPadding】: Marge du label 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Peut définir la couleur et l'ombre", - "desc": [ - "【backgroundColor】: Couleur de fond 【Color】", - "【shadowColor】: Couleur de l'ombre 【Color】", - "【elevation】: Profondeur de l'ombre 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "Peut définir un bouton de clic à droite", - "desc": [ - "【deleteIcon】: Composant droit (généralement une icône) 【Widget】", - "【deleteIconColor】: Couleur du composant droit 【Color】", - "【onDeleted】: Événement de clic du composant droit 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_it_IT.json deleted file mode 100644 index e8f386586..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_it_IT.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "Componente Piccolo", - "info": "Una piccola barra orizzontale con bordi arrotondati, può contenere tre componenti: sinistro, centrale e destro. È possibile specificare il colore, il colore dell'ombra e l'evento di clic.", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Il comportamento normale di Chip è il seguente", - "desc": [ - "【avatar】: Componente sinistro 【Widget】", - "【label】: Componente centrale 【Widget】", - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】", - "【labelPadding】: Spaziatura del label 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "È possibile impostare il colore e l'ombra", - "desc": [ - "【backgroundColor】: Colore di sfondo 【Color】", - "【shadowColor】: Colore dell'ombra 【Color】", - "【elevation】: Profondità dell'ombra 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "È possibile impostare il pulsante di clic destro", - "desc": [ - "【deleteIcon】: Componente destro (solitamente Icon) 【Widget】", - "【deleteIconColor】: Colore del componente destro 【Color】", - "【onDeleted】: Evento di clic del componente destro 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ja_JP.json deleted file mode 100644 index 1da3165ea..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ja_JP.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "チップコンポーネント", - "info": "横方向の丸いエッジを持つ小さなバーで、左、中央、右の3つのコンポーネントを含むことができます。色、影の色、クリックイベントを指定できます。", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Chipの通常の表現は以下の通りです", - "desc": [ - "【avatar】: 左側のコンポーネント 【Widget】", - "【label】: 中央のコンポーネント 【Widget】", - "【padding】 : パディング 【EdgeInsetsGeometry】", - "【labelPadding】: ラベルのパディング 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "色と影を設定できます", - "desc": [ - "【backgroundColor】: 背景色 【Color】", - "【shadowColor】: 影の色 【Color】", - "【elevation】: 影の深さ 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "右側のクリックボタンを設定できます", - "desc": [ - "【deleteIcon】: 右側のコンポーネント(通常はアイコン) 【Widget】", - "【deleteIconColor】: 右側のコンポーネントの色 【Color】", - "【onDeleted】: 右側のコンポーネントのクリックイベント 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ko_KR.json deleted file mode 100644 index 01ab4fb6c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ko_KR.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "작은 막대 컴포넌트", - "info": "가로로 된 둥근 모서리의 작은 막대로, 왼쪽, 중앙, 오른쪽 세 개의 컴포넌트를 포함할 수 있습니다. 색상, 그림자 색상 및 클릭 이벤트를 지정할 수 있습니다.", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Chip의 일반적인 모습은 다음과 같습니다", - "desc": [ - "【avatar】: 왼쪽 컴포넌트 【Widget】", - "【label】: 중앙 컴포넌트 【Widget】", - "【padding】 : 안쪽 여백 【EdgeInsetsGeometry】", - "【labelPadding】: label 여백 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "색상과 그림자를 설정할 수 있습니다", - "desc": [ - "【backgroundColor】: 배경색 【Color】", - "【shadowColor】: 그림자 색상 【Color】", - "【elevation】: 그림자 깊이 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "오른쪽 클릭 버튼을 설정할 수 있습니다", - "desc": [ - "【deleteIcon】: 오른쪽 컴포넌트(일반적으로 Icon) 【Widget】", - "【deleteIconColor】: 오른쪽 컴포넌트 색상 【Color】", - "【onDeleted】: 오른쪽 컴포넌트 클릭 이벤트 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_pt_PT.json deleted file mode 100644 index eddf2b10d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_pt_PT.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "Componente de Barra Pequena", - "info": "Uma pequena barra horizontal com bordas arredondadas que pode conter três componentes: esquerdo, central e direito. Pode especificar a cor, a cor da sombra e o evento de clique.", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "O comportamento normal do Chip é o seguinte", - "desc": [ - "【avatar】: Componente esquerdo 【Widget】", - "【label】: Componente central 【Widget】", - "【padding】 : Espaçamento interno 【EdgeInsetsGeometry】", - "【labelPadding】: Espaçamento do label 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Pode definir cor e sombra", - "desc": [ - "【backgroundColor】: Cor de fundo 【Color】", - "【shadowColor】: Cor da sombra 【Color】", - "【elevation】: Profundidade da sombra 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "Pode definir um botão de clique à direita", - "desc": [ - "【deleteIcon】: Componente direito (normalmente um ícone) 【Widget】", - "【deleteIconColor】: Cor do componente direito 【Color】", - "【onDeleted】: Evento de clique do componente direito 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ru_RU.json deleted file mode 100644 index b540b89ce..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_ru_RU.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "Маленький компонент", - "info": "Горизонтальная полоска с закругленными краями, которая может содержать три компонента: левый, центральный и правый. Можно указать цвет, цвет тени и событие клика.", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Обычное отображение Chip", - "desc": [ - "【avatar】: Левый компонент 【Widget】", - "【label】: Центральный компонент 【Widget】", - "【padding】: Внутренние отступы 【EdgeInsetsGeometry】", - "【labelPadding】: Отступы для label 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "Можно задать цвет и тень", - "desc": [ - "【backgroundColor】: Цвет фона 【Color】", - "【shadowColor】: Цвет тени 【Color】", - "【elevation】: Глубина тени 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "Можно задать кнопку клика справа", - "desc": [ - "【deleteIcon】: Правый компонент (обычно Icon) 【Widget】", - "【deleteIconColor】: Цвет правого компонента 【Color】", - "【onDeleted】: Событие клика правого компонента 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_zh-CN.json deleted file mode 100644 index a7f5a6491..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/desc_zh-CN.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "id": 11, - "name": "Chip", - "localName": "小条组件", - "info": "一个横向的圆边小条,可以包含左中右三个组件。可以指定颜色、阴影色和点击事件。", - "lever": 4, - "family": 0, - "linkIds": [ - 12, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Chip的普通表现如下", - "desc": [ - "【avatar】: 左侧组件 【Widget】", - "【label】: 中间组件 【Widget】", - "【padding】 : 内边距 【EdgeInsetsGeometry】", - "【labelPadding】: label边距 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_color.dart", - "name": "可以设置颜色和阴影", - "desc": [ - "【backgroundColor】: 背景色 【Color】", - "【shadowColor】: 阴影色 【Color】", - "【elevation】: 影深 【double】" - ] - }, - { - "file": "node3_delete.dart", - "name": "可以设置右侧点击按钮", - "desc": [ - "【deleteIcon】: 右侧组件(通常为Icon) 【Widget】", - "【deleteIconColor】: 右侧组件颜色 【Color】", - "【onDeleted】: 右侧组件点击事件 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Chip/node1_base.dart deleted file mode 100644 index 59f80507b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/node1_base.dart +++ /dev/null @@ -1,33 +0,0 @@ - - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; -class CustomChip extends StatelessWidget { - const CustomChip({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [ - Chip( - avatar: Image.asset("assets/images/icon_head.webp"), - label: const Text("张风捷特烈"), - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(5), - ), - const Chip( - avatar: CircleAvatar( - backgroundImage: - AssetImage("assets/images/wy_200x300.webp")), - label: Text("百里巫缨"), - padding: EdgeInsets.all(8), - labelPadding: EdgeInsets.all(6), - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/node2_color.dart b/modules/widget_system/widgets/lib/StatelessWidget/Chip/node2_color.dart deleted file mode 100644 index 0a1af3df4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/node2_color.dart +++ /dev/null @@ -1,36 +0,0 @@ - - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; -class ColorOfChip extends StatelessWidget { - const ColorOfChip({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [ - Chip( - avatar: Image.asset("assets/images/icon_head.webp"), - label: const Text("张风捷特烈"), - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(5), - backgroundColor: Colors.grey.withAlpha(66), - shadowColor: Colors.orangeAccent, - elevation: 3, - ), - Chip( - avatar: Image.asset("assets/images/icon_head.webp"), - label: const Text("张风捷特烈"), - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(5), - backgroundColor: Colors.cyanAccent.withAlpha(11), - shadowColor: Colors.blue.withAlpha(88), - elevation: 4, - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Chip/node3_delete.dart b/modules/widget_system/widgets/lib/StatelessWidget/Chip/node3_delete.dart deleted file mode 100644 index e9eae1998..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Chip/node3_delete.dart +++ /dev/null @@ -1,27 +0,0 @@ - - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; -import 'package:widgets/utils/dialog_about.dart'; - -class DeleteOfChip extends StatelessWidget { - const DeleteOfChip({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Chip( - avatar: Image.asset("assets/images/icon_head.webp"), - label: const Text("张风捷特烈"), - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(3), - backgroundColor: Colors.grey.withAlpha(66), - shadowColor: Colors.orangeAccent, -// deleteIcon: Icon(Icons.close,size: 18), - deleteIconColor: Colors.red, - onDeleted: () => DialogAbout.show(context), - elevation: 3, - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_de_DE.json deleted file mode 100644 index 4d334bfc6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "Auswahl-Chip", - "info": "Ähnlich wie die Chip-Komponente, aber mit einigen Auswahlattributen. Sie können die Farbe, die Schattenfarbe und das Auswahlereignis angeben, wenn sie ausgewählt ist.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Die normale Darstellung des ChoiceChip ist wie folgt", - "desc": [ - "【selectedColor】: Farbe bei Auswahl 【Color】", - "【selectedShadowColor】: Schattenfarbe bei Auswahl 【Color】", - "【onSelected】: Auswahlereignis 【Fuction(bool)】", - " Andere Attribute sind identisch mit der Chip-Komponente, ohne rechte Komponente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_en_US.json deleted file mode 100644 index ff345510f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "Choice Strip", - "info": "Similar in style to the Chip component, with some selectable properties. You can specify the color when selected, the shadow color, and the selection event.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "The normal performance of ChoiceChip is as follows", - "desc": [ - "【selectedColor】: Color when selected 【Color】", - "【selectedShadowColor】: Shadow color when selected 【Color】", - "【onSelected】: Selection event 【Fuction(bool)】", - " Other properties are the same as the Chip component, with no right component." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_es_ES.json deleted file mode 100644 index 09e2d306d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "Pestaña de selección", - "info": "Estilo similar al componente Chip, con algunas propiedades de selección. Puede especificar el color cuando está seleccionado, el color de la sombra y el evento de selección.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "El comportamiento normal de ChoiceChip es el siguiente", - "desc": [ - "【selectedColor】: Color cuando está seleccionado 【Color】", - "【selectedShadowColor】: Color de la sombra cuando está seleccionado 【Color】", - "【onSelected】: Evento de selección 【Fuction(bool)】", - " Otras propiedades son las mismas que el componente Chip, sin componente a la derecha." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_fr_FR.json deleted file mode 100644 index 5b7a40db5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "Petite barre de sélection", - "info": "Un style similaire au composant Chip, avec quelques propriétés de sélection. Vous pouvez spécifier la couleur lorsqu'il est sélectionné, la couleur de l'ombre et l'événement de sélection.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La performance normale de ChoiceChip est la suivante", - "desc": [ - "【selectedColor】: Couleur lorsqu'il est sélectionné 【Color】", - "【selectedShadowColor】: Couleur de l'ombre lorsqu'il est sélectionné 【Color】", - "【onSelected】: Événement de sélection 【Fuction(bool)】", - " Les autres propriétés sont les mêmes que le composant Chip, sans composant à droite." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_it_IT.json deleted file mode 100644 index 281199d10..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "Selezione Piccola Barra", - "info": "Uno stile simile al componente Chip, con alcune proprietà di selezione. È possibile specificare il colore selezionato, il colore dell'ombra e l'evento di selezione.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La performance normale di ChoiceChip è la seguente", - "desc": [ - "【selectedColor】: Colore selezionato 【Color】", - "【selectedShadowColor】: Colore dell'ombra selezionato 【Color】", - "【onSelected】: Evento di selezione 【Fuction(bool)】", - " Altre proprietà sono le stesse del componente Chip, senza componente a destra." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ja_JP.json deleted file mode 100644 index 5276900af..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "選択チップ", - "info": "Chipコンポーネントと似たスタイルで、いくつかの選択属性があります。選択時の色、影の色、および選択イベントを指定できます。", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ChoiceChipの通常の表現は以下の通りです", - "desc": [ - "【selectedColor】: 選択時の色 【Color】", - "【selectedShadowColor】: 選択時の影の色 【Color】", - "【onSelected】: 選択イベント 【Fuction(bool)】", - " 他の属性はChipコンポーネントと同じで、右側のコンポーネントはありません。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ko_KR.json deleted file mode 100644 index 492a2aef8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "선택 칩", - "info": "Chip 컴포넌트와 유사한 스타일로, 몇 가지 선택 속성이 있습니다. 선택 시 색상, 그림자 색상 및 선택 이벤트를 지정할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ChoiceChip의 일반적인 표현은 다음과 같습니다", - "desc": [ - "【selectedColor】: 선택 시 색상 【Color】", - "【selectedShadowColor】: 선택 시 그림자 색상 【Color】", - "【onSelected】: 선택 이벤트 【Fuction(bool)】", - " 다른 속성은 Chip 컴포넌트와 동일하며, 오른쪽 컴포넌트는 없습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_pt_PT.json deleted file mode 100644 index 3098e281d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "Barra de Seleção", - "info": "Estilo semelhante ao componente Chip, com algumas propriedades de seleção. Pode especificar a cor quando selecionado, a cor da sombra e o evento de seleção.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "O comportamento normal do ChoiceChip é o seguinte", - "desc": [ - "【selectedColor】: Cor quando selecionado 【Color】", - "【selectedShadowColor】: Cor da sombra quando selecionado 【Color】", - "【onSelected】: Evento de seleção 【Fuction(bool)】", - " Outras propriedades são iguais ao componente Chip, sem componente à direita." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ru_RU.json deleted file mode 100644 index 8078651ad..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "Выбор полоски", - "info": "Стиль, похожий на компонент Chip, с некоторыми свойствами выбора. Можно указать цвет при выборе, цвет тени и событие выбора.", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Обычное поведение ChoiceChip следующее", - "desc": [ - "【selectedColor】: Цвет при выборе 【Color】", - "【selectedShadowColor】: Цвет тени при выборе 【Color】", - "【onSelected】: Событие выбора 【Fuction(bool)】", - " Остальные свойства такие же, как у компонента Chip, без правого компонента." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_zh-CN.json deleted file mode 100644 index 000e49a01..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 12, - "name": "ChoiceChip", - "localName": "选择小条", - "info": "和Chip组件类似的样式,有一些选择的属性。可以指定选中时的颜色、阴影色和选择事件。", - "lever": 3, - "family": 0, - "linkIds": [ - 11, - 13, - 14, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ChoiceChip的普通表现如下", - "desc": [ - "【selectedColor】: 选中时颜色 【Color】", - "【selectedShadowColor】: 选中时阴影颜色 【Color】", - "【onSelected】: 选中事件 【Fuction(bool)】", - " 其他属性同Chip组件,无右侧组件。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/node1_base.dart deleted file mode 100644 index 973d090fc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ChoiceChip/node1_base.dart +++ /dev/null @@ -1,39 +0,0 @@ - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; - -class CustomChoiceChip extends StatefulWidget { - const CustomChoiceChip({Key? key}) : super(key: key); - - @override - _CustomChoiceChipState createState() => _CustomChoiceChipState(); -} - -class _CustomChoiceChipState extends State { - bool _select = false; - - @override - Widget build(BuildContext context) { - return ChoiceChip( - selected: _select, - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(5), - label: Text( - _select ? - "You are selected it." : - "This is a ChoiceChip.", - style: const TextStyle(fontSize: 16), - ), - backgroundColor: Colors.grey.withAlpha(66), - avatar: Image.asset("assets/images/icon_head.webp"), - selectedColor: Colors.orangeAccent.withAlpha(44), - selectedShadowColor: Colors.blue, - shadowColor: Colors.orangeAccent, - elevation: 3, - onSelected: (value) => setState(() => _select = value), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_de_DE.json deleted file mode 100644 index ce5e95ac5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "Rundes Widget", - "info": "Kann ein Bild in einen Kreis verwandeln und in der Mitte ein Widget platzieren. Es können Radius, Vordergrundfarbe, Hintergrundfarbe usw. angegeben werden.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Darstellung von CircleAvatar", - "desc": [ - "【radius】 : Radius 【double】", - "【backgroundImage】 : Bildressource 【ImageProvider】", - "【foregroundColor】: Vordergrundfarbe 【Color】", - "【backgroundColor】: Hintergrundfarbe 【Color】", - "【minRadius】: Minimaler Radius 【double】", - "【maxRadius】: Maximaler Radius 【double】", - "【child】: Kind-Widget 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_en_US.json deleted file mode 100644 index d121b9386..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "Circular Component", - "info": "Can turn an image into a circle, and a component can be placed in the center. You can specify the radius, foreground color, background color, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CircleAvatar Performance", - "desc": [ - "【radius】: radius 【double】", - "【backgroundImage】: image resource 【ImageProvider】", - "【foregroundColor】: foreground color 【Color】", - "【backgroundColor】: background color 【Color】", - "【minRadius】: minimum radius 【double】", - "【maxRadius】: maximum radius 【double】", - "【child】: child component 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_es_ES.json deleted file mode 100644 index d1bfae5da..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "Componente Circular", - "info": "Puede convertir una imagen en un círculo y colocar un componente en el centro. Puede especificar el radio, el color de primer plano, el color de fondo, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Comportamiento de CircleAvatar", - "desc": [ - "【radius】 : radio 【double】", - "【backgroundImage】 : recurso de imagen 【ImageProvider】", - "【foregroundColor】: color de primer plano 【Color】", - "【backgroundColor】: color de fondo 【Color】", - "【minRadius】: radio mínimo 【double】", - "【maxRadius】: radio máximo 【double】", - "【child】: componente hijo 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_fr_FR.json deleted file mode 100644 index bdbef6fa0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "Composant Circulaire", - "info": "Permet de transformer une image en cercle et de placer un composant au centre. Peut spécifier le rayon, la couleur de premier plan, la couleur d'arrière-plan, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Comportement de CircleAvatar", - "desc": [ - "【radius】 : rayon 【double】", - "【backgroundImage】 : ressource d'image 【ImageProvider】", - "【foregroundColor】: couleur de premier plan 【Color】", - "【backgroundColor】: couleur d'arrière-plan 【Color】", - "【minRadius】: rayon minimum 【double】", - "【maxRadius】: rayon maximum 【double】", - "【child】: composant enfant 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_it_IT.json deleted file mode 100644 index a225eb75e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "Componente circolare", - "info": "Trasforma un'immagine in un cerchio e può posizionare un componente al centro. È possibile specificare il raggio, il colore di primo piano, il colore di sfondo, ecc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Comportamento di CircleAvatar", - "desc": [ - "【radius】 : raggio 【double】", - "【backgroundImage】 : risorsa immagine 【ImageProvider】", - "【foregroundColor】: colore di primo piano 【Color】", - "【backgroundColor】: colore di sfondo 【Color】", - "【minRadius】: raggio minimo 【double】", - "【maxRadius】: raggio massimo 【double】", - "【child】: componente figlio 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ja_JP.json deleted file mode 100644 index 4b8adfced..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "円形コンポーネント", - "info": "画像を円形にし、中央にコンポーネントを配置できます。半径、前景色、背景色などを指定できます。", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CircleAvatarの表現", - "desc": [ - "【radius】 : 半径 【double】", - "【backgroundImage】 : 画像リソース 【ImageProvider】", - "【foregroundColor】: 前景色 【Color】", - "【backgroundColor】: 背景色 【Color】", - "【minRadius】: 最小半径 【double】", - "【maxRadius】: 最大半径 【double】", - "【child】: 子コンポーネント 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ko_KR.json deleted file mode 100644 index 91fabafcd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "원형 컴포넌트", - "info": "이미지를 원형으로 만들고 중앙에 컴포넌트를 배치할 수 있습니다. 반지름, 전경색, 배경색 등을 지정할 수 있습니다.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CircleAvatar의 표현", - "desc": [ - "【radius】 : 반지름 【double】", - "【backgroundImage】 : 이미지 리소스 【ImageProvider】", - "【foregroundColor】: 전경색 【Color】", - "【backgroundColor】: 배경색 【Color】", - "【minRadius】: 최소 반지름 【double】", - "【maxRadius】: 최대 반지름 【double】", - "【child】: 자식 컴포넌트 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_pt_PT.json deleted file mode 100644 index 7ac327c8f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "Componente Circular", - "info": "Pode transformar uma imagem em um círculo e colocar um componente no meio. Pode especificar raio, cor de primeiro plano, cor de fundo, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Comportamento do CircleAvatar", - "desc": [ - "【radius】 : raio 【double】", - "【backgroundImage】 : recurso de imagem 【ImageProvider】", - "【foregroundColor】: cor de primeiro plano 【Color】", - "【backgroundColor】: cor de fundo 【Color】", - "【minRadius】: raio mínimo 【double】", - "【maxRadius】: raio máximo 【double】", - "【child】: componente filho 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ru_RU.json deleted file mode 100644 index c76175ff0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "Круглый компонент", - "info": "Может превратить изображение в круг и разместить компонент в центре. Можно указать радиус, цвет переднего плана, цвет фона и т.д.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Поведение CircleAvatar", - "desc": [ - "【radius】 : радиус 【double】", - "【backgroundImage】 : ресурс изображения 【ImageProvider】", - "【foregroundColor】: цвет переднего плана 【Color】", - "【backgroundColor】: цвет фона 【Color】", - "【minRadius】: минимальный радиус 【double】", - "【maxRadius】: максимальный радиус 【double】", - "【child】: дочерний компонент 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_zh-CN.json deleted file mode 100644 index 53f64fbe9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 9, - "name": "CircleAvatar", - "localName": "圆形组件", - "info": "可将一张图片变成圆形,并且中间可以放置一个组件。可指定半径、前景色、背景色等。", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CircleAvatar的表现", - "desc": [ - "【radius】 : 半径 【double】", - "【backgroundImage】 : 图片资源 【ImageProvider】", - "【foregroundColor】: 前景色 【Color】", - "【backgroundColor】: 背景色 【Color】", - "【minRadius】: 最小半径 【double】", - "【maxRadius】: 最大半径 【double】", - "【child】: 孩子组件 【Child】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/node1_base.dart deleted file mode 100644 index 796785f26..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CircleAvatar/node1_base.dart +++ /dev/null @@ -1,22 +0,0 @@ -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; - -class CustomCircleAvatar extends StatelessWidget { - const CustomCircleAvatar({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const CircleAvatar( - radius: 50, - backgroundImage: AssetImage("assets/images/wy_200x300.webp"), - foregroundColor: Colors.white, - child: Icon( - Icons.check, - size: 50, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_de_DE.json deleted file mode 100644 index eabc3b828..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "Schließen-Button", - "info": "Ein IconButton mit Schließfunktion, das Schließsymbol kann nicht geändert werden.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButton-Klickereignis", - "desc": [ - "【onPressed】 : Klickereignis 【VoidCallback?】", - "【style】: Button-Stil 【ButtonStyle?】", - "【color】: Farbe 【Color】", - "Wenn onPressed leer ist, wird beim Klicken die aktuelle Oberfläche verlassen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_en_US.json deleted file mode 100644 index 14e86541c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "Close Button", - "info": "An IconButton with close functionality, the close icon cannot be changed.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButton Click Event", - "desc": [ - "【onPressed】: Click event 【VoidCallback?】", - "【style】: Button style 【ButtonStyle?】", - "【color】: Color 【Color】", - "When onPressed is null, clicking will exit the current interface." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_es_ES.json deleted file mode 100644 index 9384aac01..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "Botón de cerrar", - "info": "Un IconButton con función de cerrar, el ícono de cerrar no se puede cambiar.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clic de CloseButton", - "desc": [ - "【onPressed】: Evento de clic 【VoidCallback?】", - "【style】: Estilo del botón 【ButtonStyle?】", - "【color】: Color 【Color】", - "Cuando onPressed es nulo, al hacer clic se cerrará la interfaz actual." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_fr_FR.json deleted file mode 100644 index d05f99e50..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "Bouton de fermeture", - "info": "Un IconButton avec une fonction de fermeture, l'icône de fermeture ne peut pas être modifiée.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événement de clic du CloseButton", - "desc": [ - "【onPressed】 : Événement de clic 【VoidCallback?】", - "【style】: Style du bouton 【ButtonStyle?】", - "【color】: Couleur 【Color】", - "Lorsque onPressed est vide, un clic quitte l'interface actuelle." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_it_IT.json deleted file mode 100644 index 8282b27e9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "Pulsante di chiusura", - "info": "Un IconButton con funzionalità di chiusura, l'icona di chiusura non può essere modificata.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento di clic del Pulsante di chiusura", - "desc": [ - "【onPressed】: Evento di clic 【VoidCallback?】", - "【style】: Stile del pulsante 【ButtonStyle?】", - "【color】: Colore 【Color】", - "Quando onPressed è vuoto, il clic chiude l'interfaccia corrente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ja_JP.json deleted file mode 100644 index 452d7464f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "閉じるボタン", - "info": "閉じる機能を持つIconButtonで、閉じるアイコンは変更できません。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButtonクリックイベント", - "desc": [ - "【onPressed】 : クリックイベント 【VoidCallback?】", - "【style】: ボタンスタイル 【ButtonStyle?】", - "【color】: 色 【Color】", - "onPressedが空の場合、クリックすると現在の画面が閉じます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ko_KR.json deleted file mode 100644 index dde13e43e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "닫기 버튼", - "info": "닫기 기능이 있는 IconButton, 닫기 아이콘은 변경할 수 없습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButton 클릭 이벤트", - "desc": [ - "【onPressed】 : 클릭 이벤트 【VoidCallback?】", - "【style】: 버튼 스타일 【ButtonStyle?】", - "【color】: 색상 【Color】", - "onPressed가 비어 있을 때, 클릭하면 현재 화면을 종료합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_pt_PT.json deleted file mode 100644 index 1b9c91684..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "Botão de Fechar", - "info": "Um IconButton com função de fechar, o ícone de fechar não pode ser alterado.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de Clique do CloseButton", - "desc": [ - "【onPressed】 : Evento de clique 【VoidCallback?】", - "【style】: Estilo do botão 【ButtonStyle?】", - "【color】: Cor 【Color】", - "Quando onPressed estiver vazio, ao clicar, a interface atual será fechada." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ru_RU.json deleted file mode 100644 index ce22d866d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "Кнопка закрытия", - "info": "IconButton с функцией закрытия, значок закрытия нельзя изменить.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Событие нажатия кнопки CloseButton", - "desc": [ - "【onPressed】 : Событие нажатия 【VoidCallback?】", - "【style】: Стиль кнопки 【ButtonStyle?】", - "【color】: Цвет 【Color】", - "Когда onPressed пуст, нажатие закрывает текущий интерфейс." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_zh-CN.json deleted file mode 100644 index 844ed1b3d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 32, - "name": "CloseButton", - "localName": "关闭按钮", - "info": "一个具有关闭功能的IconButton,关闭图标不可更改。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButton点击事件", - "desc": [ - "【onPressed】 : 点击事件 【VoidCallback?】", - "【style】: 按钮样式 【ButtonStyle?】", - "【color】: 颜色 【Color】", - "onPressed 为空时,点击时会退出当前界面。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/node1_base.dart deleted file mode 100644 index 973db918c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButton/node1_base.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -class CustomCloseButton extends StatelessWidget { - const CustomCloseButton({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const CloseButton(); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_de_DE.json deleted file mode 100644 index 89f22fb29..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "Schaltfläche zum Schließen Symbol", - "info": "Ein Close Icon-Symbol, das je nach Plattform das entsprechende Symbol anzeigt und über ActionIconTheme angepasst werden kann.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButtonIcon Effekt", - "desc": [ - "Passt das Symbol der Schaltfläche zum Schließen für verschiedene Plattformen über die _ActionIcon-Komponente gemäß dem ActionIconTheme an." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_en_US.json deleted file mode 100644 index f2a5aaa08..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "Close Button Icon", - "info": "A close Icon that displays the corresponding icon based on the platform, and can be customized with ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButtonIcon Effect", - "desc": [ - "The _ActionIcon component adapts the close button icon for different platforms based on the ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_es_ES.json deleted file mode 100644 index 9df7ee0a7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "Icono de botón de cierre", - "info": "Un icono de cierre, muestra el icono correspondiente según la plataforma, se puede personalizar el tema a través de ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Efecto de CloseButtonIcon", - "desc": [ - "A través del componente _ActionIcon, se adapta el icono del botón de cierre a diferentes plataformas según el tema de ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_fr_FR.json deleted file mode 100644 index 4237a4ea4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "Icône de bouton de fermeture", - "info": "Une icône de fermeture, affichant l'icône correspondante selon la plateforme, peut être personnalisée via ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Effet de CloseButtonIcon", - "desc": [ - "Le composant _ActionIcon adapte l'icône de bouton de fermeture à différentes plateformes selon le thème ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_it_IT.json deleted file mode 100644 index 4a687a0b0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "Icona del pulsante di chiusura", - "info": "Un'icona di chiusura, che mostra l'icona corrispondente in base alla piattaforma, può essere personalizzata con il tema ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Effetto CloseButtonIcon", - "desc": [ - "Attraverso il componente _ActionIcon, adatta l'icona del pulsante di chiusura a diverse piattaforme in base al tema ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ja_JP.json deleted file mode 100644 index 5993f2784..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "閉じるボタンアイコン", - "info": "閉じるアイコンで、プラットフォームに応じて対応するアイコンを表示します。ActionIconThemeでテーマをカスタマイズできます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButtonIcon 効果", - "desc": [ - "_ActionIconコンポーネントを使用して、ActionIconThemeテーマに基づいて、異なるプラットフォームの閉じるボタンアイコンを適応させます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ko_KR.json deleted file mode 100644 index 1e02127e6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "닫기 버튼 아이콘", - "info": "닫기 아이콘, 플랫폼에 따라 해당 아이콘을 표시하며, ActionIconTheme을 통해 테마를 사용자 정의할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButtonIcon 효과", - "desc": [ - "_ActionIcon 컴포넌트를 통해 ActionIconTheme 테마에 따라 다른 플랫폼의 닫기 버튼 아이콘을 적용합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_pt_PT.json deleted file mode 100644 index 26d0adbb2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "Ícone do Botão de Fechar", - "info": "Um ícone de fechar que exibe o ícone correspondente de acordo com a plataforma, podendo ser personalizado com o tema ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Efeito do CloseButtonIcon", - "desc": [ - "O componente _ActionIcon adapta o ícone do botão de fechar de acordo com o tema ActionIconTheme para diferentes plataformas." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ru_RU.json deleted file mode 100644 index 95657f89d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "Иконка кнопки закрытия", - "info": "Иконка закрытия, которая отображает соответствующую иконку в зависимости от платформы. Можно настроить тему через ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Эффект CloseButtonIcon", - "desc": [ - "Компонент _ActionIcon адаптирует иконку кнопки закрытия для разных платформ в зависимости от темы ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_zh-CN.json deleted file mode 100644 index 0eb431175..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 274, - "name": "CloseButtonIcon", - "localName": "关闭按钮图标", - "info": "一个关闭 Icon 图标, 根据平台展示对应的图标,可以通过 ActionIconTheme 定制主题。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CloseButtonIcon 效果", - "desc": [ - "通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的关闭按钮图标。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/node1_base.dart deleted file mode 100644 index c18bfd496..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CloseButtonIcon/node1_base.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/11/28 -/// contact me by email 1981462002@qq.com - -class CloseButtonIconDemo extends StatelessWidget { - const CloseButtonIconDemo({super.key}); - - @override - Widget build(BuildContext context) { - return const CloseButtonIcon(); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_de_DE.json deleted file mode 100644 index aac7c4dbb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_de_DE.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "Container-Komponente", - "info": "Eine Container-Komponente, die ein einzelnes Unterelement aufnehmen kann. Integriert mehrere Funktionen von Unterelementen wie Innen- und Außenabstände, Transformationen, Dekorationen, Einschränkungen usw...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Kann verwendet werden, um einen Bereich mit einer bestimmten Breite und Höhe anzuzeigen", - "desc": [ - "【width】 : Breite 【int】", - "【height】: Höhe 【int】", - "【color】: Farbe 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "Kann ein Unterelement in den Bereich einfügen", - "desc": [ - "【padding】 : Innenabstand 【EdgeInsetsGeometry】", - "【margin】: Außenabstand 【EdgeInsetsGeometry】", - "【child】: Unterelement 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Kann das Unterelement ausrichten und positionieren", - "desc": [ - "【alignment】 : Ausrichtung und Positionierung 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "Kann das Unterelement dekorieren", - "desc": [ - "【decoration】 : Dekoration 【Decoration】", - "Kann dekorieren: Rahmen, abgerundete Ecken, Farbe, Verlauf, Schatten, Bilder usw." - ] - }, - { - "file": "node5_transform.dart", - "name": "Container hat auch Transformationsfähigkeiten", - "desc": [ - "【transform】 : Transformationsmatrix 【Matrix4】", - "Matrix-Transformation basierend auf Matrix4, Details siehe lineare Algebra" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Einschränkungen des Containers", - "desc": [ - "【constraints】 : Einschränkungen 【BoxConstraints】", - "Schränkt die Größe des Bereichs ein, nicht kleiner als die angegebene minimale Breite und Höhe, und nicht größer als die angegebene maximale Breite und Höhe." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_en_US.json deleted file mode 100644 index 3e1ce07f1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_en_US.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "Container Component", - "info": "A container component used to hold a single child component. It integrates several functionalities of single child components, such as padding, margin, transformation, decoration, constraints, etc...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Can be used to display an area with specified width and height", - "desc": [ - "【width】 : width 【int】", - "【height】: height 【int】", - "【color】: color 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "Can place a child component within the area", - "desc": [ - "【padding】 : padding 【EdgeInsetsGeometry】", - "【margin】: margin 【EdgeInsetsGeometry】", - "【child】: child component 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Can align and position the child component", - "desc": [ - "【alignment】 : alignment 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "Can decorate the child component", - "desc": [ - "【decoration】 : decoration 【Decoration】", - "Can decorate: borders, rounded corners, colors, gradients, shadows, images, etc." - ] - }, - { - "file": "node5_transform.dart", - "name": "Container also has transformation capabilities", - "desc": [ - "【transform】 : transformation matrix 【Matrix4】", - "Matrix transformation based on Matrix4, see linear algebra for details" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Constraints of the Container", - "desc": [ - "【constraints】 : constraints 【BoxConstraints】", - "Will constrain the size of the area, it will not be smaller than the specified minimum width and height, nor larger than the specified maximum width and height." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_es_ES.json deleted file mode 100644 index 2fe57f969..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_es_ES.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "Componente Contenedor", - "info": "Componente contenedor utilizado para albergar un único componente hijo. Integra varias funciones de componentes hijos únicos, como márgenes internos y externos, transformaciones, decoraciones, restricciones, etc...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Puede usarse para mostrar un área con un ancho y alto especificados", - "desc": [ - "【width】 : Ancho 【int】", - "【height】: Alto 【int】", - "【color】: Color 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "Puede colocar un componente hijo dentro del área", - "desc": [ - "【padding】 : Relleno interno 【EdgeInsetsGeometry】", - "【margin】: Margen externo 【EdgeInsetsGeometry】", - "【child】: Componente hijo 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Puede alinear y posicionar el componente hijo", - "desc": [ - "【alignment】 : Alineación y posicionamiento 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "Puede decorar el componente hijo", - "desc": [ - "【decoration】 : Decoración 【Decoration】", - "Se puede decorar: bordes, esquinas redondeadas, colores, degradados, sombras, imágenes, etc." - ] - }, - { - "file": "node5_transform.dart", - "name": "Container también tiene capacidad de transformación", - "desc": [ - "【transform】 : Matriz de transformación 【Matrix4】", - "Transformación basada en la matriz Matrix4, los detalles de la transformación se pueden ver en álgebra lineal" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Restricciones de Container", - "desc": [ - "【constraints】 : Restricciones 【BoxConstraints】", - "Restringirá el tamaño del área, no será menor que el ancho y alto mínimo especificados, ni mayor que el ancho y alto máximo especificados." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_fr_FR.json deleted file mode 100644 index 50c57bbe0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_fr_FR.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "Composant conteneur", - "info": "Composant conteneur utilisé pour contenir un seul composant enfant. Intègre plusieurs fonctionnalités de composants enfants uniques, telles que les marges intérieures et extérieures, la transformation, la décoration, les contraintes, etc...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Peut être utilisé pour afficher une zone de largeur et de hauteur spécifiées", - "desc": [ - "【width】 : Largeur 【int】", - "【height】: Hauteur 【int】", - "【color】: Couleur 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "Peut contenir un composant enfant dans la zone", - "desc": [ - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】", - "【margin】: Marge extérieure 【EdgeInsetsGeometry】", - "【child】: Composant enfant 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Peut aligner et positionner le composant enfant", - "desc": [ - "【alignment】 : Alignement et positionnement 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "Peut décorer le composant enfant", - "desc": [ - "【decoration】 : Décoration 【Decoration】", - "Peut décorer : bordures, coins arrondis, couleurs, dégradés, ombres, images, etc." - ] - }, - { - "file": "node5_transform.dart", - "name": "Le Container a également des propriétés de transformation", - "desc": [ - "【transform】 : Matrice de transformation 【Matrix4】", - "Transformation matricielle basée sur Matrix4, voir l'algèbre linéaire pour plus de détails sur les transformations" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Les contraintes du Container", - "desc": [ - "【constraints】 : Contraintes 【BoxConstraints】", - "Contraint la taille de la zone, ne sera pas plus petite que la largeur et la hauteur minimales spécifiées, ni plus grande que la largeur et la hauteur maximales spécifiées." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_it_IT.json deleted file mode 100644 index 1ffcac6cd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_it_IT.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "Componente contenitore", - "info": "Un componente contenitore utilizzato per contenere un singolo componente figlio. Integra diverse funzionalità per i componenti figli singoli, come margini interni ed esterni, trasformazioni, decorazioni, vincoli, ecc...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Può essere utilizzato per visualizzare un'area con larghezza e altezza specificate", - "desc": [ - "【width】 : Larghezza 【int】", - "【height】: Altezza 【int】", - "【color】: Colore 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "Può contenere un componente figlio all'interno dell'area", - "desc": [ - "【padding】 : Spaziatura interna 【EdgeInsetsGeometry】", - "【margin】: Spaziatura esterna 【EdgeInsetsGeometry】", - "【child】: Componente figlio 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Può allineare e posizionare il componente figlio", - "desc": [ - "【alignment】 : Allineamento e posizionamento 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "Può decorare il componente figlio", - "desc": [ - "【decoration】 : Decorazione 【Decoration】", - "Può decorare: bordi, angoli arrotondati, colori, gradienti, ombre, immagini, ecc." - ] - }, - { - "file": "node5_transform.dart", - "name": "Container ha anche capacità di trasformazione", - "desc": [ - "【transform】 : Matrice di trasformazione 【Matrix4】", - "Trasformazione basata sulla matrice Matrix4, per i dettagli vedere l'algebra lineare" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Vincoli del Container", - "desc": [ - "【constraints】 : Vincoli 【BoxConstraints】", - "Vincolerà le dimensioni dell'area, non sarà inferiore alla larghezza e altezza minima specificata, né superiore alla larghezza e altezza massima specificata." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ja_JP.json deleted file mode 100644 index 1dfc93af3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ja_JP.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "コンテナコンポーネント", - "info": "単一の子コンポーネントを収容するためのコンテナコンポーネントです。内部および外部の余白、変形、装飾、制約など、複数の単一子コンポーネントの機能を統合しています...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "指定された幅と高さの領域を表示するために使用できます", - "desc": [ - "【width】 : 幅 【int】", - "【height】: 高さ 【int】", - "【color】: 色 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "領域内に子コンポーネントを配置できます", - "desc": [ - "【padding】 : 内側の余白 【EdgeInsetsGeometry】", - "【margin】: 外側の余白 【EdgeInsetsGeometry】", - "【child】: 子コンポーネント 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "子コンポーネントを整列および配置できます", - "desc": [ - "【alignment】 : 整列および配置 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "子コンポーネントを装飾できます", - "desc": [ - "【decoration】 : 装飾 【Decoration】", - "装飾可能: ボーダー、角丸、色、グラデーション、シャドウ、画像など" - ] - }, - { - "file": "node5_transform.dart", - "name": "Containerは変形性も持っています", - "desc": [ - "【transform】 : 変換行列 【Matrix4】", - "Matrix4に基づく行列変換、変換の詳細は線形代数を参照してください" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Containerの制約性", - "desc": [ - "【constraints】 : 制約 【BoxConstraints】", - "この領域のサイズを制約し、指定された最小幅と高さより小さくならないようにし、指定された最大幅と高さより大きくならないようにします。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ko_KR.json deleted file mode 100644 index 183d80268..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ko_KR.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "컨테이너 컴포넌트", - "info": "단일 자식 컴포넌트를 수용하는 컨테이너 컴포넌트입니다. 내부 및 외부 여백, 변형, 장식, 제약 등 여러 단일 자식 컴포넌트의 기능을 통합했습니다...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "지정된 너비와 높이의 영역을 표시할 수 있습니다", - "desc": [ - "【width】 : 너비 【int】", - "【height】: 높이 【int】", - "【color】: 색상 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "영역에 자식 컴포넌트를 넣을 수 있습니다", - "desc": [ - "【padding】 : 내부 여백 【EdgeInsetsGeometry】", - "【margin】: 외부 여백 【EdgeInsetsGeometry】", - "【child】: 자식 컴포넌트 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "자식 컴포넌트를 정렬 및 위치 지정할 수 있습니다", - "desc": [ - "【alignment】 : 정렬 및 위치 지정 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "자식 컴포넌트를 장식할 수 있습니다", - "desc": [ - "【decoration】 : 장식 【Decoration】", - "장식 가능: 테두리, 둥근 모서리, 색상, 그라데이션, 그림자, 이미지 등" - ] - }, - { - "file": "node5_transform.dart", - "name": "Container는 변환 기능도 가지고 있습니다", - "desc": [ - "【transform】 : 변환 행렬 【Matrix4】", - "Matrix4 기반의 행렬 변환, 변환 상세는 선형 대수 참조" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Container의 제약성", - "desc": [ - "【constraints】 : 제약 【BoxConstraints】", - "이 영역의 크기를 제한하며, 지정된 최소 너비와 높이보다 작지 않고, 지정된 최대 너비와 높이보다 크지 않습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_pt_PT.json deleted file mode 100644 index a4a4af6a9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_pt_PT.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "Componente de Contêiner", - "info": "Componente de contêiner usado para acomodar um único componente filho. Integra várias funcionalidades de componentes filhos únicos, como margens internas e externas, transformações, decorações, restrições, etc...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Pode ser usado para exibir uma área com largura e altura especificadas", - "desc": [ - "【width】 : Largura 【int】", - "【height】: Altura 【int】", - "【color】: Cor 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "Pode colocar um componente filho na área", - "desc": [ - "【padding】 : Margem interna 【EdgeInsetsGeometry】", - "【margin】: Margem externa 【EdgeInsetsGeometry】", - "【child】: Componente filho 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Pode alinhar e posicionar o componente filho", - "desc": [ - "【alignment】 : Alinhamento e posicionamento 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "Pode decorar o componente filho", - "desc": [ - "【decoration】 : Decoração 【Decoration】", - "Pode decorar: bordas, arcos, cores, gradientes, sombras, imagens, etc." - ] - }, - { - "file": "node5_transform.dart", - "name": "Container também possui transformações", - "desc": [ - "【transform】 : Matriz de transformação 【Matrix4】", - "Transformação de matriz baseada em Matrix4, detalhes da transformação veja álgebra linear" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Restrições do Container", - "desc": [ - "【constraints】 : Restrições 【BoxConstraints】", - "Irá restringir o tamanho da área, não será menor que a largura e altura mínima especificada, nem maior que a largura e altura máxima especificada." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ru_RU.json deleted file mode 100644 index 5ee7cd290..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_ru_RU.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "Контейнерный компонент", - "info": "Контейнерный компонент для размещения одного дочернего компонента. Интегрирует несколько функций для одного дочернего компонента, таких как внутренние и внешние отступы, трансформации, декорации, ограничения и т.д...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Может использоваться для отображения области с заданной шириной и высотой", - "desc": [ - "【width】 : Ширина 【int】", - "【height】: Высота 【int】", - "【color】: Цвет 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "Можно поместить один дочерний компонент в область", - "desc": [ - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】", - "【margin】: Внешние отступы 【EdgeInsetsGeometry】", - "【child】: Дочерний компонент 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "Можно выровнять и позиционировать дочерний компонент", - "desc": [ - "【alignment】 : Выравнивание и позиционирование 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "Можно украсить дочерний компонент", - "desc": [ - "【decoration】 : Декорация 【Decoration】", - "Можно украсить: границы, скругления, цвет, градиент, тени, изображения и т.д." - ] - }, - { - "file": "node5_transform.dart", - "name": "Container также обладает трансформационными свойствами", - "desc": [ - "【transform】 : Матрица трансформации 【Matrix4】", - "Матричные преобразования на основе Matrix4, подробности см. в линейной алгебре" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Ограничения Container", - "desc": [ - "【constraints】 : Ограничения 【BoxConstraints】", - "Ограничивает размер области, не позволяя ей быть меньше указанной минимальной ширины и высоты, а также больше указанной максимальной ширины и высоты." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_zh-CN.json deleted file mode 100644 index cb27642aa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/desc_zh-CN.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "id": 1, - "name": "Container", - "localName": "容器组件", - "info": "用于容纳单个子组件的容器组件。集成了若干个单子组件的功能,如内外边距、形变、装饰、约束等...", - "lever": 5, - "family": 0, - "linkIds": [ - 74, - 85, - 80, - 78, - 70, - 123 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "可用于显示一个指定宽高的区域", - "desc": [ - "【width】 : 宽 【int】", - "【height】: 高 【int】", - "【color】: 颜色 【Color】" - ] - }, - { - "file": "node2_child.dart", - "name": "可以在区域中放入一个子组件", - "desc": [ - "【padding】 : 内边距 【EdgeInsetsGeometry】", - "【margin】: 外边距 【EdgeInsetsGeometry】", - "【child】: 子组件 【Widget】" - ] - }, - { - "file": "node3_alignment.dart", - "name": "可对子组件进行对齐定位", - "desc": [ - "【alignment】 : 对齐定位 【AlignmentGeometry】" - ] - }, - { - "file": "node4_decoration.dart", - "name": "可对子组件进行装饰", - "desc": [ - "【decoration】 : 装饰 【Decoration】", - "可装饰: 边线、圆弧、颜色、渐变色、阴影、图片等内容" - ] - }, - { - "file": "node5_transform.dart", - "name": "Container还具有变换性", - "desc": [ - "【transform】 : 变换矩阵 【Matrix4】", - "基于Matrix4的矩阵变换,变换详情见线性代数" - ] - }, - { - "file": "node6_constraints.dart", - "name": "Container的约束性", - "desc": [ - "【constraints】 : 约束 【BoxConstraints】", - "会约束该区域的尺寸,不会小于指定的最小宽高,也不会大于指定的最大宽高。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Container/node1_base.dart deleted file mode 100644 index b4cb2c7ff..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/node1_base.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class CustomContainer extends StatelessWidget { - const CustomContainer({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.topLeft, - width: 200, - height: 200 * 0.618, - color: Colors.red.withAlpha(88), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/node2_child.dart b/modules/widget_system/widgets/lib/StatelessWidget/Container/node2_child.dart deleted file mode 100644 index 592513f39..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/node2_child.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class ContainerWithChild extends StatelessWidget { - const ContainerWithChild({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.topLeft, - padding: const EdgeInsets.all(20), - margin: const EdgeInsets.all(10), - width: 200, - height: 200 * 0.618, - color: Colors.grey.withAlpha(88), - child: const Icon(Icons.android), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/node3_alignment.dart b/modules/widget_system/widgets/lib/StatelessWidget/Container/node3_alignment.dart deleted file mode 100644 index 069ed3c88..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/node3_alignment.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class ContainerAlignment extends StatelessWidget { - const ContainerAlignment({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.bottomRight, - width: 200, - height: 200 * 0.618, - color: Colors.grey.withAlpha(88), - child: const Icon( - Icons.android, - color: Colors.green, - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/node4_decoration.dart b/modules/widget_system/widgets/lib/StatelessWidget/Container/node4_decoration.dart deleted file mode 100644 index 7d35f39ce..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/node4_decoration.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class ContainerDecoration extends StatelessWidget { - const ContainerDecoration({super.key}); - - List get rainbow => [ - 0xffff0000, - 0xffFF7F00, - 0xffFFFF00, - 0xff00FF00, - 0xff00FFFF, - 0xff0000FF, - 0xff8B00FF - ]; - - List get stops => [0.0, 1 / 6, 2 / 6, 3 / 6, 4 / 6, 5 / 6, 1.0]; - - @override - Widget build(BuildContext context) { - - return Container( - alignment: Alignment.center, - width: 200, - height: 200 * 0.618, - margin: const EdgeInsets.all(20), - padding: const EdgeInsets.all(20), - decoration: BoxDecoration(//添加渐变色 - gradient: LinearGradient( - stops: stops, - colors: rainbow.map((e) => Color(e)).toList()), - borderRadius: const BorderRadius.only( - topLeft: Radius.circular(50), - bottomRight: Radius.circular(50)), - boxShadow: const [ - BoxShadow( - color: Colors.grey, - offset: Offset(1, 1), - blurRadius: 10, - spreadRadius: 1), - ]), - child: const Text( - "Container", - style: TextStyle(fontSize: 20), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/node5_transform.dart b/modules/widget_system/widgets/lib/StatelessWidget/Container/node5_transform.dart deleted file mode 100644 index f2598d30d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/node5_transform.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class ContainerTransform extends StatelessWidget { - const ContainerTransform({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - color: Colors.cyanAccent, - width: 150, - height: 150 * 0.618, - transform: Matrix4.skew(-pi / 10, 0), - child: const Text( - "Container", - style: TextStyle(fontSize: 20), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Container/node6_constraints.dart b/modules/widget_system/widgets/lib/StatelessWidget/Container/node6_constraints.dart deleted file mode 100644 index c67937c16..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Container/node6_constraints.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - -class ContainerConstraints extends StatelessWidget { - const ContainerConstraints({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue, - width: 200, - height: 200 * 0.618, - constraints: const BoxConstraints( - minWidth: 100, - maxWidth: 150, - minHeight: 20, - maxHeight: 100, - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_de_DE.json deleted file mode 100644 index 65402c8dd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "iOS-Aktionsblatt", - "info": "Ein iOS-stiliges Popup-Auswahlmenü, das mehrere Schaltflächen enthalten kann und normalerweise mit CupertinoActionSheetAction verwendet wird.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoActionSheet", - "desc": [ - "【title】 : Erstes Zeilenelement 【Widget】", - "【message】 : Zweites Zeilenelement 【Widget】", - "【cancelButton】 : Abbrechen-Schaltflächenelement 【Widget】", - "【actions】 : Liste der mittleren Elemente 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_en_US.json deleted file mode 100644 index 26edfc6cb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "iOS Action Sheet", - "info": "A pop-up selection structure in iOS style that can hold multiple buttons, generally used in conjunction with CupertinoActionSheetAction.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoActionSheet", - "desc": [ - "【title】: First row component 【Widget】", - "【message】: Second row component 【Widget】", - "【cancelButton】: Component at the cancel button 【Widget】", - "【actions】: List of middle components 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_es_ES.json deleted file mode 100644 index 58157eace..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "Hoja de acciones de iOS", - "info": "Estructura de selección emergente al estilo de iOS, que puede contener múltiples botones, generalmente se usa junto con CupertinoActionSheetAction.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoActionSheet", - "desc": [ - "【title】 : Componente de la primera línea 【Widget】", - "【message】 : Componente de la segunda línea 【Widget】", - "【cancelButton】 : Componente del botón de cancelar 【Widget】", - "【actions】 : Lista de componentes intermedios 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_fr_FR.json deleted file mode 100644 index 049a82aa5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "Feuille d'action iOS", - "info": "Une structure de sélection contextuelle de style iOS, pouvant contenir plusieurs boutons, généralement utilisée avec CupertinoActionSheetAction.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoActionSheet", - "desc": [ - "【title】 : Composant de la première ligne 【Widget】", - "【message】 : Composant de la deuxième ligne 【Widget】", - "【cancelButton】 : Composant du bouton d'annulation 【Widget】", - "【actions】 : Liste des composants du milieu 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_it_IT.json deleted file mode 100644 index 80b958601..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "Foglio di azione iOS", - "info": "Struttura di selezione pop-up in stile iOS, può contenere molti pulsanti, generalmente utilizzato insieme a CupertinoActionSheetAction.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoActionSheet", - "desc": [ - "【title】 : Componente della prima riga 【Widget】", - "【message】 : Componente della seconda riga 【Widget】", - "【cancelButton】 : Componente del pulsante di annullamento 【Widget】", - "【actions】 : Lista dei componenti centrali 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ja_JP.json deleted file mode 100644 index 79b13d240..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "iOSアクションシート", - "info": "iOSスタイルのポップアップ選択構造で、多くのボタンを配置でき、通常はCupertinoActionSheetActionと併用されます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheetの基本的な使用", - "desc": [ - "【title】 : 最初の行のコンポーネント 【Widget】", - "【message】 : 2行目のコンポーネント 【Widget】", - "【cancelButton】 : キャンセルボタンのコンポーネント 【Widget】", - "【actions】 : 中間のコンポーネントリスト 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ko_KR.json deleted file mode 100644 index ee43433d6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "iOS 행동 시트", - "info": "iOS 스타일의 팝업 선택 구조로, 여러 버튼을 넣을 수 있으며 일반적으로 CupertinoActionSheetAction과 함께 사용됩니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheet 기본 사용", - "desc": [ - "【title】 : 첫 번째 줄 컴포넌트 【Widget】", - "【message】 : 두 번째 줄 컴포넌트 【Widget】", - "【cancelButton】 : 취소 버튼 컴포넌트 【Widget】", - "【actions】 : 중간 컴포넌트 목록 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_pt_PT.json deleted file mode 100644 index 8b648e9c2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "Folha de Ação iOS", - "info": "Estrutura de seleção pop-up no estilo iOS, que pode conter vários botões, geralmente usada em conjunto com CupertinoActionSheetAction.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoActionSheet", - "desc": [ - "【title】 : Componente da primeira linha 【Widget】", - "【message】 : Componente da segunda linha 【Widget】", - "【cancelButton】 : Componente do botão de cancelamento 【Widget】", - "【actions】 : Lista de componentes do meio 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ru_RU.json deleted file mode 100644 index 9c74cbe5f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "iOS лист действий", - "info": "Всплывающая структура выбора в стиле iOS, которая может содержать несколько кнопок, обычно используется вместе с CupertinoActionSheetAction.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoActionSheet", - "desc": [ - "【title】 : Компонент первой строки 【Widget】", - "【message】 : Компонент второй строки 【Widget】", - "【cancelButton】 : Компонент кнопки отмены 【Widget】", - "【actions】 : Список компонентов в середине 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_zh-CN.json deleted file mode 100644 index c716d2990..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 131, - "name": "CupertinoActionSheet", - "localName": "iOS行为单", - "info": "iOS风格的弹出选择结构,可放多的按钮,一般与CupertinoActionSheetAction联用。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheet基本使用", - "desc": [ - "【title】 : 第一行组件 【Widget】", - "【message】 : 第二行组件 【Widget】", - "【cancelButton】 : 取消按钮处组件 【Widget】", - "【actions】 : 中间组件列表 【List】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/node1_base.dart deleted file mode 100644 index e7c1c58fc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheet/node1_base.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoActionSheet extends StatelessWidget { - const CustomCupertinoActionSheet({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - _buildRaisedButton(context), - _buildCupertinoActionSheet(context), - ], - ); - } - - Widget _buildCupertinoActionSheet(BuildContext context) => - Container( - alignment: Alignment.bottomCenter, - child: CupertinoActionSheet( - title: const Text("Please chose a language"), - message: const Text('the language you use in this application.'), - cancelButton: CupertinoActionSheetAction( - onPressed: () => Navigator.pop(context), child: const Text("Cancel")), - actions: [ - CupertinoActionSheetAction( - onPressed: () => Navigator.pop(context), - child: const Text('Dart')), - CupertinoActionSheetAction( - onPressed: () => Navigator.pop(context), - child: const Text('Java')), - CupertinoActionSheetAction( - onPressed: () => Navigator.pop(context), - child: const Text('Kotlin')), - ], - ), - ); - - Widget _buildRaisedButton(BuildContext context) => ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)), - ), - ), - onPressed: () => showDialog( - context: context, - builder: (ctx) => _buildCupertinoActionSheet(context)), - child: const Text( - 'Just Show It !', - style: TextStyle(color: Colors.white), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_de_DE.json deleted file mode 100644 index 804e501d5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "iOS-Aktionsblatt-Schaltfläche", - "info": "Eine Schaltfläche, die selten verwendet wird und normalerweise in CupertinoActionSheet verwendet wird, um Klickereignisse zu empfangen.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoActionSheetAction", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【isDefaultAction】 : Standardmäßig ausgewählt 【bool】", - "【onPressed】 : Klickereignis 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_en_US.json deleted file mode 100644 index 022777a4b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "iOS Action Sheet Button", - "info": "A button with limited use cases, typically used in CupertinoActionSheet to receive click events.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoActionSheetAction", - "desc": [ - "【child】: Child widget 【Widget】", - "【isDefaultAction】: Whether it is the default action 【bool】", - "【onPressed】: Click event 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_es_ES.json deleted file mode 100644 index d5cef1aa3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "Botón de hoja de acción de iOS", - "info": "Un botón con pocos escenarios de aplicación, generalmente utilizado en CupertinoActionSheet, que recibe eventos de clic.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoActionSheetAction", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【isDefaultAction】 : Si está seleccionado por defecto 【bool】", - "【onPressed】 : Evento de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_fr_FR.json deleted file mode 100644 index a0f631bb0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "Bouton iOS Action Sheet", - "info": "Un bouton, rarement utilisé, généralement utilisé dans CupertinoActionSheet, qui reçoit les événements de clic.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoActionSheetAction", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【isDefaultAction】 : Est-ce l'action par défaut 【bool】", - "【onPressed】 : Événement de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_it_IT.json deleted file mode 100644 index 521cf337d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "Pulsante iOS Action Sheet", - "info": "Un pulsante, utilizzato raramente, solitamente all'interno di CupertinoActionSheet, che riceve eventi di clic.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoActionSheetAction", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【isDefaultAction】 : Selezionato per impostazione predefinita 【bool】", - "【onPressed】 : Evento di clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ja_JP.json deleted file mode 100644 index 1637d285c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "iOSアクションシートボタン", - "info": "ボタンで、使用シーンが少なく、通常はCupertinoActionSheetで使用され、クリックイベントを受け取ります。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheetActionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【isDefaultAction】 : デフォルトで選択されているかどうか 【bool】", - "【onPressed】 : クリックイベント 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ko_KR.json deleted file mode 100644 index 07806fb68..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "iOS 액션 시트 버튼", - "info": "버튼으로, 사용되는 경우가 드물며 주로 CupertinoActionSheet에서 사용되며 클릭 이벤트를 수신합니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheetAction 기본 사용법", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【isDefaultAction】 : 기본 선택 여부 【bool】", - "【onPressed】 : 클릭 이벤트 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_pt_PT.json deleted file mode 100644 index 14acf26b8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "Botão de ação iOS", - "info": "Um botão, usado raramente, normalmente usado em CupertinoActionSheet, que recebe eventos de clique.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do CupertinoActionSheetAction", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【isDefaultAction】 : Se selecionado por padrão 【bool】", - "【onPressed】 : Evento de clique 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ru_RU.json deleted file mode 100644 index 67f4b00b4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "Кнопка iOS Action Sheet", - "info": "Кнопка, которая редко используется, обычно применяется в CupertinoActionSheet, принимает события нажатия.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoActionSheetAction", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【isDefaultAction】 : Выбрано по умолчанию 【bool】", - "【onPressed】 : Событие нажатия 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_zh-CN.json deleted file mode 100644 index 1cbe10e8b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 132, - "name": "CupertinoActionSheetAction", - "localName": "iOS行为单按键", - "info": "一个按钮,应用场景很少,通常用于CupertinoActionSheet中,接收点击事件。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheetAction基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【isDefaultAction】 : 是否默认选中 【bool】", - "【onPressed】 : 点击事件 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/node1_base.dart deleted file mode 100644 index 73053e521..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoActionSheetAction/node1_base.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:widgets/utils/dialog_about.dart'; - - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomCupertinoActionSheetAction extends StatelessWidget { - const CustomCupertinoActionSheetAction({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Container( - margin: const EdgeInsets.all(5), - color: Colors.grey.withAlpha(33), - child: CupertinoActionSheetAction( - isDefaultAction: true, - onPressed: () => DialogAbout.show(context), - child: const Text('张风捷特烈')), - ), - Container( - color: Colors.grey.withAlpha(33), - margin: const EdgeInsets.all(5), - child: CupertinoActionSheetAction( - isDefaultAction: false, - onPressed: () => DialogAbout.show(context), - child: const Text('百里·巫缨')), - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_de_DE.json deleted file mode 100644 index c1f1085a0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "iOS-Dialog", - "info": "Ein universelles Dialogfeld im iOS-Stil, das Komponenten für Kopf, Mitte und Ende angeben kann.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoActionSheetAction", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【isDefaultAction】 : Standardmäßig ausgewählt 【bool】", - "【onPressed】 : Klickereignis 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_en_US.json deleted file mode 100644 index 69536a55c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "iOS Dialog", - "info": "A general dialog structure in iOS style, which can specify components at the head, middle, and tail.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoActionSheetAction", - "desc": [ - "【child】 : Child component 【Widget】", - "【isDefaultAction】 : Whether it is selected by default 【bool】", - "【onPressed】 : Click event 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_es_ES.json deleted file mode 100644 index 5c240104d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "Cuadro de diálogo de iOS", - "info": "Estructura de cuadro de diálogo genérico al estilo de iOS, que permite especificar componentes en la parte superior, media e inferior.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoActionSheetAction", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【isDefaultAction】 : Si está seleccionado por defecto 【bool】", - "【onPressed】 : Evento de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_fr_FR.json deleted file mode 100644 index db43bdf75..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "Boîte de dialogue iOS", - "info": "Structure de boîte de dialogue générique de style iOS, permettant de spécifier des composants dans les sections d'en-tête, de corps et de pied.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoActionSheetAction", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【isDefaultAction】 : Est-ce que c'est l'action par défaut 【bool】", - "【onPressed】 : Événement de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_it_IT.json deleted file mode 100644 index 989b952ca..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "Finestra di dialogo iOS", - "info": "Struttura di dialogo generica in stile iOS, che consente di specificare i componenti nella parte superiore, centrale e inferiore.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoActionSheetAction", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【isDefaultAction】 : Selezionato per impostazione predefinita 【bool】", - "【onPressed】 : Evento di clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ja_JP.json deleted file mode 100644 index d9c5d2d75..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "iOSダイアログ", - "info": "iOSスタイルの汎用ダイアログ構造で、ヘッダー、中央、フッターのコンポーネントを指定できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheetActionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【isDefaultAction】 : デフォルトで選択されているかどうか 【bool】", - "【onPressed】 : クリックイベント 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ko_KR.json deleted file mode 100644 index 0b82317cd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "iOS 대화 상자", - "info": "iOS 스타일의 일반적인 대화 상자 구조로, 머리, 중간, 꼬리 부분의 컴포넌트를 지정할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheetAction 기본 사용", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【isDefaultAction】 : 기본 선택 여부 【bool】", - "【onPressed】 : 클릭 이벤트 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_pt_PT.json deleted file mode 100644 index 72870d68d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "Diálogo iOS", - "info": "Estrutura de diálogo genérica no estilo iOS, que permite especificar componentes no cabeçalho, corpo e rodapé.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoActionSheetAction", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【isDefaultAction】 : Selecionado por padrão 【bool】", - "【onPressed】 : Evento de clique 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ru_RU.json deleted file mode 100644 index 83a1cb23b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "Диалоговое окно iOS", - "info": "Универсальная структура диалогового окна в стиле iOS, позволяющая указать компоненты в верхней, средней и нижней частях.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoActionSheetAction", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【isDefaultAction】 : Выбрано ли по умолчанию 【bool】", - "【onPressed】 : Событие нажатия 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_zh-CN.json deleted file mode 100644 index 8e5764718..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 129, - "name": "CupertinoAlertDialog", - "localName": "iOS对话框", - "info": "iOS风格的通用的对话框结构,可指定头、中、尾处的组件。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoActionSheetAction基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【isDefaultAction】 : 是否默认选中 【bool】", - "【onPressed】 : 点击事件 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/node1_base.dart deleted file mode 100644 index 2c4a6fc62..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoAlertDialog/node1_base.dart +++ /dev/null @@ -1,94 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class CustomCupertinoAlertDialog extends StatelessWidget { - const CustomCupertinoAlertDialog({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildRaisedButton(context), - _buildCupertinoAlertDialog(context), - ], - ); - } - - Widget _buildRaisedButton(BuildContext context) => - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)), - ), - ), - onPressed: () { - showDialog( - context: context, - builder: (ctx) => _buildCupertinoAlertDialog(context)); - }, - child: const Text( - 'Just Show It !', - style: TextStyle(color: Colors.white), - ), - ); - - Widget _buildCupertinoAlertDialog(BuildContext context) { - return Material( - color: Colors.transparent, - child: CupertinoAlertDialog( - title: _buildTitle(context), - content: _buildContent(), - actions: [ - CupertinoButton( - child: const Text("Yes, Delete"), - onPressed: () => Navigator.pop(context), - ), - CupertinoButton( - child: const Text("Cancle"), - onPressed: () => Navigator.pop(context), - ), - ]), - ); - } - - Widget _buildTitle(context) { - return Row( - //标题 - children: [ - const Icon( - CupertinoIcons.delete_solid, - color: Colors.red, - ), - const Expanded( - child: Text( - 'Delete File', - style: TextStyle(color: Colors.red, fontSize: 20), - )), - InkWell( - child: const Icon(CupertinoIcons.clear_thick), - onTap: () => Navigator.pop(context), - ) - ]); - } - - Widget _buildContent() { - return Padding( - padding: const EdgeInsets.only(top: 18.0), - child: Column( - children: const[ - Text( - ' Hi toly! If you push the conform buttom ,' - ' You will lose this file. Are you sure wand to do that?', - style: TextStyle(color: Color(0xff999999), fontSize: 16), - textAlign: TextAlign.justify, - ), - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_de_DE.json deleted file mode 100644 index ec6a67397..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "Interaktive Ansicht", - "info": "Ein einfacher Button, der normalerweise in CupertinoAlertDialog verwendet wird und im Allgemeinen nicht allein verwendet wird.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von CupertinoDialogAction", - "desc": [ - "【isDefaultAction】 : Ist es die Standardaktion? 【bool】", - "【isDestructiveAction】 : Ist es eine zerstörerische Aktion? 【bool】", - "【textStyle】: Textstil 【TextStyle】", - "【onPressed】: Klickereignis 【VoidCallback】", - "【child】: Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_en_US.json deleted file mode 100644 index 9f7bad2ba..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "Interactive View", - "info": "A simple button, usually used in CupertinoAlertDialog, and generally not used alone.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of CupertinoDialogAction", - "desc": [ - "【isDefaultAction】: Whether it is a default action 【bool】", - "【isDestructiveAction】: Whether it is a destructive action 【bool】", - "【textStyle】: Text style 【TextStyle】", - "【onPressed】: Click event 【VoidCallback】", - "【child】: Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_es_ES.json deleted file mode 100644 index 26e29ae5a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "Vista de interacción", - "info": "Un botón simple, generalmente utilizado en CupertinoAlertDialog, generalmente no se usa solo.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de CupertinoDialogAction", - "desc": [ - "【isDefaultAction】: ¿Es una acción predeterminada? 【bool】", - "【isDestructiveAction】: ¿Es una acción destructiva? 【bool】", - "【textStyle】: Estilo de texto 【TextStyle】", - "【onPressed】: Evento de clic 【VoidCallback】", - "【child】: Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_fr_FR.json deleted file mode 100644 index d053bb52d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "Vue d'interaction", - "info": "Un bouton simple, généralement utilisé dans CupertinoAlertDialog, généralement pas utilisé seul.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de CupertinoDialogAction", - "desc": [ - "【isDefaultAction】 : Est-ce une action par défaut 【bool】", - "【isDestructiveAction】 : Est-ce une action destructive 【bool】", - "【textStyle】: Style de texte 【TextStyle】", - "【onPressed】: Événement de clic 【VoidCallback】", - "【child】: Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_it_IT.json deleted file mode 100644 index aeb2063c8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "Vista interattiva", - "info": "Un semplice pulsante, solitamente utilizzato in CupertinoAlertDialog, generalmente non utilizzato da solo.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di CupertinoDialogAction", - "desc": [ - "【isDefaultAction】 : Se è un'operazione predefinita 【bool】", - "【isDestructiveAction】 : Se è un'operazione distruttiva 【bool】", - "【textStyle】: Stile del testo 【TextStyle】", - "【onPressed】: Evento di clic 【VoidCallback】", - "【child】: Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ja_JP.json deleted file mode 100644 index fe4126ca6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "インタラクティブビュー", - "info": "シンプルなボタンで、通常はCupertinoAlertDialogで使用され、単独で使用されることはあまりありません。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoDialogActionの基本的な使用", - "desc": [ - "【isDefaultAction】 : デフォルトの操作かどうか 【bool】", - "【isDestructiveAction】 : 破壊的な操作かどうか 【bool】", - "【textStyle】: テキストスタイル 【TextStyle】", - "【onPressed】: クリックイベント 【VoidCallback】", - "【child】: 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ko_KR.json deleted file mode 100644 index 103cd0011..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "상호 작용 뷰", - "info": " 간단한 버튼으로, 일반적으로 CupertinoAlertDialog에서 사용되며, 일반적으로 단독으로 사용되지 않습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoDialogAction 기본 사용", - "desc": [ - "【isDefaultAction】 : 기본 작업인지 여부 【bool】", - "【isDestructiveAction】 : 파괴적인 작업인지 여부 【bool】", - "【textStyle】: 텍스트 스타일 【TextStyle】", - "【onPressed】: 클릭 이벤트 【VoidCallback】", - "【child】: 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_pt_PT.json deleted file mode 100644 index 51d9d1613..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "Vista Interativa", - "info": "Um botão simples, geralmente usado em CupertinoAlertDialog, geralmente não é usado sozinho.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do CupertinoDialogAction", - "desc": [ - "【isDefaultAction】 : Se é uma ação padrão 【bool】", - "【isDestructiveAction】 : Se é uma ação destrutiva 【bool】", - "【textStyle】: Estilo de texto 【TextStyle】", - "【onPressed】: Evento de clique 【VoidCallback】", - "【child】: Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ru_RU.json deleted file mode 100644 index 920dca0de..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "Интерактивное представление", - "info": "Простая кнопка, обычно используется в CupertinoAlertDialog, как правило, не используется отдельно.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование CupertinoDialogAction", - "desc": [ - "【isDefaultAction】: Является ли действие по умолчанию 【bool】", - "【isDestructiveAction】: Является ли действие разрушительным 【bool】", - "【textStyle】: Стиль текста 【TextStyle】", - "【onPressed】: Событие нажатия 【VoidCallback】", - "【child】: Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_zh-CN.json deleted file mode 100644 index 246eacf32..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 352, - "name": "CupertinoDialogAction", - "localName": "交互视图", - "info": " 一个简单的按钮,通常用于CupertinoAlertDialog中,一般不单独使用。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoDialogAction基本使用", - "desc": [ - "【isDefaultAction】 : 是否是默认性操作 【bool】", - "【isDestructiveAction】 : 是否是毁灭性操作 【bool】", - "【textStyle】: 文字样式 【TextStyle】", - "【onPressed】: 点击事件 【VoidCallback】", - "【child】: 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/no_node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/no_node1_base.dart deleted file mode 100644 index 8e0f866e3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/no_node1_base.dart +++ /dev/null @@ -1,130 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com -/// 说明: - -class CustomDialog extends StatelessWidget { - const CustomDialog({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildRaisedButton(context), - _buildDialog(), - ], - ); - } - - Widget _buildDialog() => CupertinoDialogAction( - onPressed: (){ - - }, - child: const SizedBox( - width: 50, - child: DeleteDialog(), - ), - ); - - Widget _buildRaisedButton(BuildContext context) => ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)), - ), - ), - onPressed: () { - showDialog(context: context, builder: (ctx) => _buildDialog()); - }, - child: const Text( - 'Just Show It !', - style: TextStyle(color: Colors.white), - ), - - ); -} - -class DeleteDialog extends StatelessWidget { - const DeleteDialog({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - _buildBar(context), - _buildTitle(), - _buildContent(), - _buildFooter(context), - ], - ); - } - - Widget _buildTitle() { - return const Text( - 'Delete Doucument', - style: TextStyle(color: Color(0xff5CC5E9), fontSize: 24), - ); - } - - Widget _buildContent() { - return const Padding( - padding: EdgeInsets.all(10.0), - child: Text( - ' Hi toly! If you push the conform buttom ,' - ' You will lose this file. Are you sure wand to do that?', - style: TextStyle(color: Color(0xffCFCFCF), fontSize: 16), - textAlign: TextAlign.justify, - ), - ); - } - - Widget _buildFooter(context) { - return Padding( - padding: const EdgeInsets.only(bottom: 15.0, top: 10), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Container( - alignment: Alignment.center, - height: 40, - width: 120, - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(30)), - color: Color(0xff73D1EE)), - child: const Text('Yes, Delete', - style: TextStyle(color: Colors.white, fontSize: 16)), - ), - InkWell( - onTap: ()=>Navigator.of(context).pop(), - child: Container( - alignment: Alignment.center, - height: 40, - width: 120, - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(30)), - color: Colors.orangeAccent), - child: const Text('Cancle', - style: TextStyle(color: Colors.white, fontSize: 16)), - ), - ) - ], - ), - ); - } - - _buildBar(context) => Container( - height: 30, - alignment: Alignment.centerRight, - margin: const EdgeInsets.only(right: 10, top: 5), - child: InkWell( - onTap: ()=>Navigator.of(context).pop(), - child: const Icon( - Icons.close, - color: Color(0xff82CAE3), - ), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/node1_base.dart deleted file mode 100644 index 2f6e6c1b3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoDialogAction/node1_base.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - -class CupertinoDialogActionDemo extends StatelessWidget { - const CupertinoDialogActionDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - CupertinoDialogAction( - isDestructiveAction: false, - onPressed: () => _toast(context), - child: const Text('CupertinoDialogAction'), - ), - CupertinoDialogAction( - isDestructiveAction: true, - onPressed: () => _toast(context), - child: const Text('CupertinoDialogAction'), - ), - ], - ); - } - - void _toast(BuildContext context) { - SnackBar snackBar = SnackBar( - backgroundColor: Theme.of(context).primaryColor, - content: const Text('CupertinoDialogAction'), - ); - - ScaffoldMessenger.of(context).showSnackBar(snackBar); - - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_de_DE.json deleted file mode 100644 index 3dcd6104b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "Vollbild-Dialog-Übergang", - "info": "Erstellt einen iOS-stilisierten Übergang für das Aufrufen eines Vollbild-Dialogs.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Komponenteneinführung", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【linearTransition】 : Lineare Übergang 【bool】", - "【primaryRouteAnimation】 : Anfängliche Routenanimation 【Animation】", - "【secondaryRouteAnimation】 : Zweite Routenanimation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_en_US.json deleted file mode 100644 index fd77e8308..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "Full Page Transition", - "info": "Create an iOS-style transition for invoking a full-screen dialog.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Component Introduction", - "desc": [ - "【child】 : Child component 【Widget】", - "【linearTransition】 : Whether to use linear transition 【bool】", - "【primaryRouteAnimation】 : Initial route animation 【Animation】", - "【secondaryRouteAnimation】 : Secondary route animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_es_ES.json deleted file mode 100644 index 9683edf08..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "Transición de diálogo de pantalla completa", - "info": "Crea una transición al estilo de iOS para invocar un diálogo de pantalla completa.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción del componente", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【linearTransition】 : ¿Transición lineal? 【bool】", - "【primaryRouteAnimation】 : Animación de ruta inicial 【Animation】", - "【secondaryRouteAnimation】 : Animación de ruta secundaria 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_fr_FR.json deleted file mode 100644 index 1cb272101..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "Transition de dialogue plein écran", - "info": "Crée une transition de style iOS pour afficher une boîte de dialogue en plein écran.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction du composant", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【linearTransition】 : Transition linéaire 【bool】", - "【primaryRouteAnimation】 : Animation de route initiale 【Animation】", - "【secondaryRouteAnimation】 : Animation de route secondaire 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_it_IT.json deleted file mode 100644 index a0040840e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "Transizione a schermo intero", - "info": "Crea una transizione in stile iOS per richiamare una finestra di dialogo a schermo intero.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione al componente", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【linearTransition】 : Transizione lineare 【bool】", - "【primaryRouteAnimation】 : Animazione della rotta iniziale 【Animation】", - "【secondaryRouteAnimation】 : Animazione della seconda rotta 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ja_JP.json deleted file mode 100644 index e74986fbf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "全ページ遷移変換", - "info": "iOSスタイルの全画面ダイアログを呼び出すための遷移を作成します。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "コンポーネント紹介", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【linearTransition】 : 線形変換かどうか 【bool】", - "【primaryRouteAnimation】 : 初期ルートアニメーション 【Animation】", - "【secondaryRouteAnimation】 : 第二ルートアニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ko_KR.json deleted file mode 100644 index becc2777c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "전체 페이지 전환", - "info": "전체 화면 대화 상자를 불러오기 위한 iOS 스타일의 전환을 생성합니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "컴포넌트 소개", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【linearTransition】 : 선형 전환 여부 【bool】", - "【primaryRouteAnimation】 : 초기 라우트 애니메이션 【Animation】", - "【secondaryRouteAnimation】 : 두 번째 라우트 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_pt_PT.json deleted file mode 100644 index 9d275362f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "Transição de Diálogo em Tela Cheia", - "info": "Cria uma transição no estilo iOS para exibir um diálogo em tela cheia.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao Componente", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【linearTransition】 : Transição linear 【bool】", - "【primaryRouteAnimation】 : Animação de rota inicial 【Animation】", - "【secondaryRouteAnimation】 : Animação de rota secundária 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ru_RU.json deleted file mode 100644 index 3d0cd07ea..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "Переход на полный экран", - "info": "Создает переход в стиле iOS для вызова диалогового окна на весь экран.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в компонент", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【linearTransition】 : Линейный переход 【bool】", - "【primaryRouteAnimation】 : Анимация начального маршрута 【Animation】", - "【secondaryRouteAnimation】 : Анимация второго маршрута 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_zh-CN.json deleted file mode 100644 index ab421eed5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 219, - "name": "CupertinoFullscreenDialogTransition", - "localName": "全页面过渡变换", - "info": "创建一个 iOS 风格的转换,用于唤出全屏对话框。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "组件介绍", - "desc": [ - "【child】 : 子组件 【Widget】", - "【linearTransition】 : 是否线性转换 【bool】", - "【primaryRouteAnimation】 : 初始路由动画 【Animation】", - "【secondaryRouteAnimation】 : 第二路由动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/node1_base.dart deleted file mode 100644 index 94a27961d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoFullscreenDialogTransition/node1_base.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/11 -/// contact me by email 1981462002@qq.com -/// - - -class CupertinoFullscreenDialogTransitionDemo extends StatelessWidget { - const CupertinoFullscreenDialogTransitionDemo({Key? key}) : super(key: key); - - final String info = - '和 CupertinoPageTransition 一样,该组件底层基于 SlideTransition 组件实现,' - '主要用途是模仿 iOS 风格,用于唤出全屏对话框动画过渡效果。' - '源码中唯一的使用处是 CupertinoPageRoute 处理路由跳转动画时,一般不会单独使用。' - '当【route.fullscreenDialog】为 true 时,会使用 CupertinoFullscreenDialogTransition 组件,否则使用 CupertinoPageTransition 组件。' - '其中个属性信息和 CupertinoPageTransition 组件一致,详见之。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_de_DE.json deleted file mode 100644 index 341bea2d9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "iOS-Stil Zurück-Button", - "info": "Cupertino-Stil Navigationsleiste Zurück-Button, kann Farbe und Klick-Ereignis angeben, wird normalerweise nicht allein verwendet.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung des Zurück-Buttons", - "desc": [ - "【onPressed】 : Klick-Ereignis 【VoidCallback】", - "【color】: Farbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_en_US.json deleted file mode 100644 index 2c1954384..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "iOS Style Back Button", - "info": "A Cupertino-style navigation bar back button, which can specify color and click events, and is generally not used alone.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Back Button", - "desc": [ - "【onPressed】: Click event 【VoidCallback】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_es_ES.json deleted file mode 100644 index 4c7ecd854..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "Botón de retroceso de estilo iOS", - "info": "Botón de retroceso de la barra de navegación de estilo Cupertino, se puede especificar el color y el evento de clic, generalmente no se usa solo.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico del botón de retroceso", - "desc": [ - "【onPressed】 : Evento de clic 【VoidCallback】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_fr_FR.json deleted file mode 100644 index e43bfcc9d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "Bouton de retour de style iOS", - "info": "Bouton de retour de barre de navigation de style Cupertino, peut spécifier la couleur et l'événement de clic, généralement pas utilisé seul.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base du bouton de retour", - "desc": [ - "【onPressed】 : Événement de clic 【VoidCallback】", - "【color】: Couleur 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_it_IT.json deleted file mode 100644 index 5e70e8c33..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "Pulsante Indietro in stile iOS", - "info": "Pulsante Indietro per barra di navigazione in stile Cupertino, può specificare colore ed evento di clic, generalmente non utilizzato da solo.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base del pulsante Indietro", - "desc": [ - "【onPressed】 : Evento di clic 【VoidCallback】", - "【color】: Colore 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ja_JP.json deleted file mode 100644 index 490051d1c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "iOSスタイルの戻るボタン", - "info": "Cupertinoスタイルのナビゲーションバーの戻るボタンで、色とクリックイベントを指定できます。通常は単独で使用されません。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "戻るボタンの基本的な使用", - "desc": [ - "【onPressed】 : クリックイベント 【VoidCallback】", - "【color】: 色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ko_KR.json deleted file mode 100644 index b96301a71..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "iOS 스타일 뒤로 가기 버튼", - "info": "Cupertino 스타일의 네비게이션 바 뒤로 가기 버튼, 색상과 클릭 이벤트를 지정할 수 있으며, 일반적으로 단독으로 사용되지 않습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "뒤로 가기 버튼 기본 사용", - "desc": [ - "【onPressed】 : 클릭 이벤트 【VoidCallback】", - "【color】: 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_pt_PT.json deleted file mode 100644 index 4b820f15b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "Botão de Voltar no Estilo iOS", - "info": "Botão de voltar da barra de navegação no estilo Cupertino, pode especificar a cor e o evento de clique, geralmente não é usado sozinho.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Botão de Voltar", - "desc": [ - "【onPressed】 : Evento de clique 【VoidCallback】", - "【color】: Cor 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ru_RU.json deleted file mode 100644 index fbf254105..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "Кнопка возврата в стиле iOS", - "info": "Кнопка возврата в стиле Cupertino для навигационной панели, можно указать цвет и событие нажатия, обычно не используется отдельно.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование кнопки возврата", - "desc": [ - "【onPressed】 : Событие нажатия 【VoidCallback】", - "【color】: Цвет 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_zh-CN.json deleted file mode 100644 index 0312f63e7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 218, - "name": "CupertinoNavigationBarBackButton", - "localName": "iOS风格返回按钮", - "info": "Cupertino风格的导航栏返回按钮,可指定颜色和点击事件,一般不单独使用。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "返回按钮基本使用", - "desc": [ - "【onPressed】 : 点击事件 【VoidCallback】", - "【color】: 颜色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/node1_base.dart deleted file mode 100644 index e9ae28f75..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoNavigationBarBackButton/node1_base.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class CupertinoNavigationBarBackButtonDemo extends StatelessWidget { - const CupertinoNavigationBarBackButtonDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return CupertinoNavigationBarBackButton( - color: Colors.deepPurpleAccent, - onPressed: () => Navigator.of(context).pop(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_de_DE.json deleted file mode 100644 index e4153eef0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "Seitenübergangsanimation", - "info": "Bietet eine iOS-ähnliche Seitenübergangsanimation.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in CupertinoPageTransition", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【linearTransition】 : Lineare Transformation 【bool】", - "【primaryRouteAnimation】 : Anfängliche Routenanimation 【Animation】", - "【secondaryRouteAnimation】 : Zweite Routenanimation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_en_US.json deleted file mode 100644 index fc18cdc1d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "Page Transition Animation", - "info": "Provides an iOS-style page transition animation.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to CupertinoPageTransition", - "desc": [ - "【child】 : Child widget 【Widget】", - "【linearTransition】 : Whether to use linear transition 【bool】", - "【primaryRouteAnimation】 : Primary route animation 【Animation】", - "【secondaryRouteAnimation】 : Secondary route animation 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_es_ES.json deleted file mode 100644 index f17094600..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "Transición de página", - "info": "Proporciona una animación de transición de página al estilo de iOS.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a CupertinoPageTransition", - "desc": [ - "【child】 : Widget hijo 【Widget】", - "【linearTransition】 : ¿Transición lineal? 【bool】", - "【primaryRouteAnimation】 : Animación de ruta inicial 【Animation】", - "【secondaryRouteAnimation】 : Animación de ruta secundaria 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_fr_FR.json deleted file mode 100644 index fb75a3d0d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "Transition de page", - "info": "Fournit une animation de transition de page de style iOS.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à CupertinoPageTransition", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【linearTransition】 : Transition linéaire 【bool】", - "【primaryRouteAnimation】 : Animation de route initiale 【Animation】", - "【secondaryRouteAnimation】 : Animation de route secondaire 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_it_IT.json deleted file mode 100644 index fb35028b4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "Transizione di pagina", - "info": "Fornisce un'animazione di transizione di pagina in stile iOS.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a CupertinoPageTransition", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【linearTransition】 : Transizione lineare 【bool】", - "【primaryRouteAnimation】 : Animazione della rotta iniziale 【Animation】", - "【secondaryRouteAnimation】 : Animazione della seconda rotta 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ja_JP.json deleted file mode 100644 index 0c5ec262d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "ページ遷移変換", - "info": "iOSスタイルのページ遷移アニメーション変換を提供します。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPageTransition 紹介", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【linearTransition】 : 線形変換かどうか 【bool】", - "【primaryRouteAnimation】 : 初期ルートアニメーション 【Animation】", - "【secondaryRouteAnimation】 : 第二ルートアニメーション 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ko_KR.json deleted file mode 100644 index fd8ae1e15..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "페이지 전환 효과", - "info": "iOS 스타일의 페이지 전환 애니메이션 효과를 제공합니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPageTransition 소개", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【linearTransition】 : 선형 변환 여부 【bool】", - "【primaryRouteAnimation】 : 초기 라우트 애니메이션 【Animation】", - "【secondaryRouteAnimation】 : 두 번째 라우트 애니메이션 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_pt_PT.json deleted file mode 100644 index bcd91b938..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "Transição de Página", - "info": "Fornece uma animação de transição de página no estilo iOS.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução à CupertinoPageTransition", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【linearTransition】 : Transição linear 【bool】", - "【primaryRouteAnimation】 : Animação de rota inicial 【Animation】", - "【secondaryRouteAnimation】 : Animação de segunda rota 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ru_RU.json deleted file mode 100644 index f4ec74543..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "Переход страницы", - "info": "Предоставляет анимацию перехода страницы в стиле iOS.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в CupertinoPageTransition", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【linearTransition】 : Линейное преобразование 【bool】", - "【primaryRouteAnimation】 : Начальная анимация маршрута 【Animation】", - "【secondaryRouteAnimation】 : Вторичная анимация маршрута 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_zh-CN.json deleted file mode 100644 index c2fbb0a04..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 216, - "name": "CupertinoPageTransition", - "localName": "页面过渡变换", - "info": "提供一个 iOS 风格的页面过渡动画变换。 ", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPageTransition 介绍", - "desc": [ - "【child】 : 子组件 【Widget】", - "【linearTransition】 : 是否线性转换 【bool】", - "【primaryRouteAnimation】 : 初始路由动画 【Animation】", - "【secondaryRouteAnimation】 : 第二路由动画 【Animation】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/node1_base.dart deleted file mode 100644 index d3b9c9ae2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPageTransition/node1_base.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/11 -/// contact me by email 1981462002@qq.com -/// - -class CupertinoPageTransitionDemo extends StatelessWidget { - const CupertinoPageTransitionDemo({Key? key}) : super(key: key); - - final String info = - '该组件底层基于 SlideTransition 组件实现,主要用途是模仿 iOS 风格,处理页面间跳转的过渡动画。' - '源码中唯一的使用处是 CupertinoPageRoute 处理路由跳转动画时,一般不会单独使用。' - '如 A 跳转到 B, primaryRouteAnimation 和 secondaryRouteAnimation 都是一个 0.0->1.0 的动画,' - '前者用于处理 B 界面进入过渡动画;后者用于处理 A 界面被覆盖的过渡动画。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_de_DE.json deleted file mode 100644 index 46dd442cb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "Verschwommene Popup-Ebene", - "info": "Runde, rechteckige, verschwommene Hintergründe für iOS-Popups, die in Cupertino-stilisierten Dialogen verwendet werden.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPopupSurface Verwendung", - "desc": [ - "【isSurfacePainted】 : Ob Weiß gemalt wird 【bool】", - "【child】 : Untergeordnete Komponente 【Widget】", - "Testeffekt links isSurfacePainted = false, rechts isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_en_US.json deleted file mode 100644 index 44cc50177..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "Blur Popup Layer", - "info": "The rounded rectangle blur background of the ios popup box, applied in the source code to the dialog box of the Cupertino style.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPopupSurface Usage", - "desc": [ - "【isSurfacePainted】: Whether to paint white 【bool】", - "【child】: Child component 【Widget】", - "Test effect: left isSurfacePainted = false, right isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_es_ES.json deleted file mode 100644 index ca8be8bfc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "Capa emergente difuminada", - "info": "Fondo difuminado rectangular con bordes redondeados para cuadros emergentes de iOS, utilizado en diálogos de estilo Cupertino en el código fuente.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso de CupertinoPopupSurface", - "desc": [ - "【isSurfacePainted】 : Si se pinta en blanco 【bool】", - "【child】 : Componente hijo 【Widget】", - "Efecto de prueba: izquierda isSurfacePainted = false, derecha isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_fr_FR.json deleted file mode 100644 index 8b78d066b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "Fond flou de la fenêtre contextuelle", - "info": "Fond flou rectangulaire avec coins arrondis pour les boîtes de dialogue de style Cupertino, utilisé dans les dialogues de style Cupertino dans le code source.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de CupertinoPopupSurface", - "desc": [ - "【isSurfacePainted】 : Si le blanc est dessiné 【bool】", - "【child】 : Composant enfant 【Widget】", - "Effet de test : isSurfacePainted = false à gauche, isSurfacePainted = true à droite" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_it_IT.json deleted file mode 100644 index 111084168..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "Livello popup sfocato", - "info": "Sfondo sfocato rettangolare con angoli arrotondati per le finestre popup iOS, utilizzato nei dialoghi in stile Cupertino nel codice sorgente.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di CupertinoPopupSurface", - "desc": [ - "【isSurfacePainted】 : Se disegnare in bianco 【bool】", - "【child】 : Componente figlio 【Widget】", - "Testare l'effetto: a sinistra isSurfacePainted = false, a destra isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ja_JP.json deleted file mode 100644 index 8119b53f8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "ぼかしポップアップレイヤー", - "info": "iOSポップアップボックスの角丸長方形のぼかし背景で、ソースコードではCupertinoスタイルのダイアログに適用されています。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPopupSurface の使用", - "desc": [ - "【isSurfacePainted】 : 白を描画するかどうか 【bool】", - "【child】 : 子コンポーネント 【Widget】", - "テスト効果の左側は isSurfacePainted = false、右側は isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ko_KR.json deleted file mode 100644 index 33c52196e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "블러 팝업 레이어", - "info": "ios 팝업 상자의 둥근 모서리 사각형 블러 배경, 소스 코드에서 Cupertino 스타일의 대화 상자에 적용됩니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPopupSurface 사용", - "desc": [ - "【isSurfacePainted】 : 흰색으로 그릴지 여부 【bool】", - "【child】 : 하위 위젯 【Widget】", - "테스트 효과 왼쪽 isSurfacePainted = false, 오른쪽 isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_pt_PT.json deleted file mode 100644 index c1856d16f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "Camada de Pop-up Desfocada", - "info": "Fundo desfocado retangular com cantos arredondados para caixas de diálogo no estilo iOS, usado em caixas de diálogo de estilo Cupertino no código-fonte.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso do CupertinoPopupSurface", - "desc": [ - "【isSurfacePainted】 : Se a superfície é pintada de branco 【bool】", - "【child】 : Componente filho 【Widget】", - "Efeito de teste: à esquerda isSurfacePainted = false, à direita isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ru_RU.json deleted file mode 100644 index c9279fbbe..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "Размытый всплывающий слой", - "info": "Фон с закругленными углами и размытием для всплывающего окна iOS, используется в диалогах в стиле Cupertino в исходном коде.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Использование CupertinoPopupSurface", - "desc": [ - "【isSurfacePainted】 : Рисовать ли белый цвет 【bool】", - "【child】 : Дочерний компонент 【Widget】", - "Тестовый эффект: слева isSurfacePainted = false, справа isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_zh-CN.json deleted file mode 100644 index 10e0dc73d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 217, - "name": "CupertinoPopupSurface", - "localName": "模糊弹出层", - "info": "ios 弹出框的圆角矩形模糊背景,源码中应用于 Cupertino 风格的对话框中。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "CupertinoPopupSurface 使用", - "desc": [ - "【isSurfacePainted】 : 是否绘白 【bool】", - "【child】 : 子组件 【Widget】", - "测试效果左侧 isSurfacePainted = false,右侧 isSurfacePainted = true" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/node1_base.dart deleted file mode 100644 index b755874d6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoPopupSurface/node1_base.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class CupertinoPopupSurfaceDemo extends StatelessWidget { - const CupertinoPopupSurfaceDemo({super.key}); - - List get rainbow => [ - 0xffff0000, - 0xffFF7F00, - 0xffFFFF00, - 0xff00FF00, - 0xff00FFFF, - 0xff0000FF, - 0xff8B00FF - ]; - - List get stops => [0.0, 1 / 6, 2 / 6, 3 / 6, 4 / 6, 5 / 6, 1.0]; - - - @override - Widget build(BuildContext context) { - return Container( - decoration: BoxDecoration( - gradient: RadialGradient( - radius: 1.8, - stops: stops, - colors: rainbow.map((e) => Color(e)).toList())), - padding: const EdgeInsets.all(10), - child: Wrap( - spacing: 10, - children: [ - buildCupertinoPopupSurface(false), - buildCupertinoPopupSurface(true), - ], - ), - ); - } - - Widget buildCupertinoPopupSurface(bool isSurfacePainted) { - return CupertinoPopupSurface( - isSurfacePainted: isSurfacePainted, - child: Container( - width: 150, - height: 100, - color: Colors.white.withOpacity(0.3), - alignment: Alignment.center, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_de_DE.json deleted file mode 100644 index 89d27cd12..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_de_DE.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "iOS-Thema", - "info": "Das CupertinoThemeData-Objekt kann über CupertinoTheme.of abgerufen werden. Es kann auch ein Thema angegeben werden, das auf die Nachkommenkomponenten von CupertinoTheme angewendet wird.", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Textstil-TextTheme", - "desc": [ - "Nachkommenkomponenten können die Daten des Themas über CupertinoTheme.of abrufen und verwenden." - ] - }, - { - "file": "node2_use.dart", - "name": "Verwendung von CupertinoThemeData", - "desc": [ - "Wie bei Theme können bestimmte Attribute angegeben werden, damit sie in den Nachkommen gemeinsam genutzt werden, allerdings gibt es weniger Attribute. Beachten Sie, dass Sie das Thema nicht im aktuellen Kontext abrufen können, wenn Sie es verwenden möchten." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_en_US.json deleted file mode 100644 index 4cff035ce..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_en_US.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "iOS Theme", - "info": "You can obtain the CupertinoThemeData object through CupertinoTheme.of. You can also specify the theme to be applied to the descendant components of CupertinoTheme.", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Text Style-TextTheme", - "desc": [ - "Descendant components can obtain and use the theme data through CupertinoTheme.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Usage of CupertinoThemeData", - "desc": [ - "Like Theme, you can share specified properties among descendants, but there are fewer properties. Note that if you need to use the theme, you cannot obtain it in the current context." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_es_ES.json deleted file mode 100644 index 59b37c1ba..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_es_ES.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "Tema de iOS", - "info": "Puedes obtener el objeto CupertinoThemeData a través de CupertinoTheme.of. También puedes especificar que el tema se aplique a los componentes descendientes de CupertinoTheme.", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Estilo de texto-TextTheme", - "desc": [ - "Los componentes descendientes pueden obtener y utilizar los datos del tema a través de CupertinoTheme.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Uso de CupertinoThemeData", - "desc": [ - "Al igual que con Theme, puedes compartir ciertos atributos en los descendientes, aunque hay menos atributos. Ten en cuenta que si necesitas usar el tema, no puedes obtenerlo en el contexto actual." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_fr_FR.json deleted file mode 100644 index db0b5859d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_fr_FR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "Thème iOS", - "info": "Vous pouvez obtenir l'objet CupertinoThemeData via CupertinoTheme.of. Vous pouvez également spécifier un thème à appliquer aux composants descendants de CupertinoTheme.", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Style de texte-TextTheme", - "desc": [ - "Les composants descendants peuvent utiliser les données du thème obtenues via CupertinoTheme.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Utilisation de CupertinoThemeData", - "desc": [ - "Comme avec Theme, vous pouvez partager des attributs spécifiés avec les descendants, bien qu'il y ait moins d'attributs. Notez que si vous avez besoin d'utiliser le thème, vous ne pouvez pas l'obtenir dans le contexte actuel." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_it_IT.json deleted file mode 100644 index 34539eafe..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_it_IT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "Tema iOS", - "info": "È possibile ottenere l'oggetto CupertinoThemeData tramite CupertinoTheme.of. È anche possibile specificare un tema da applicare ai componenti discendenti di CupertinoTheme.", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Stile di testo-TextTheme", - "desc": [ - "I componenti discendenti possono ottenere e utilizzare i dati del tema tramite CupertinoTheme.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Uso di CupertinoThemeData", - "desc": [ - "Come con Theme, è possibile condividere attributi specifici tra i discendenti, anche se gli attributi sono meno numerosi. Nota: se è necessario utilizzare un tema, non è possibile ottenerlo nel contesto corrente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ja_JP.json deleted file mode 100644 index 2529887fe..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ja_JP.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "iOSテーマ", - "info": "CupertinoTheme.ofを使用してCupertinoThemeDataオブジェクトを取得できます。また、テーマを指定してCupertinoThemeの子孫コンポーネントに適用することもできます。", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "テキストスタイル-TextTheme", - "desc": [ - "子孫コンポーネントはCupertinoTheme.ofを使用してテーマのデータを取得して使用できます。" - ] - }, - { - "file": "node2_use.dart", - "name": "CupertinoThemeDataの使用", - "desc": [ - "Themeと同様に、指定されたプロパティを使用して子孫で共有できますが、プロパティは少ないです。テーマを使用する必要がある場合、現在のcontextで取得できないことに注意してください。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ko_KR.json deleted file mode 100644 index 3e11e8402..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ko_KR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "iOS 테마", - "info": "CupertinoTheme.of를 통해 CupertinoThemeData 객체를 가져올 수 있습니다. 또한 테마를 지정하여 CupertinoTheme의 하위 구성 요소에 적용할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "텍스트 스타일-TextTheme", - "desc": [ - "하위 구성 요소는 CupertinoTheme.of를 통해 테마 데이터를 가져와 사용할 수 있습니다." - ] - }, - { - "file": "node2_use.dart", - "name": "CupertinoThemeData 사용", - "desc": [ - "Theme와 마찬가지로 지정된 속성을 통해 하위 구성 요소에서 공유할 수 있지만 속성이 적습니다. 테마를 사용해야 하는 경우 현재 context에서 가져올 수 없습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_pt_PT.json deleted file mode 100644 index e80783356..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_pt_PT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "Tema iOS", - "info": "Pode obter o objeto CupertinoThemeData através de CupertinoTheme.of. Também pode especificar o tema para ser aplicado aos componentes descendentes de CupertinoTheme.", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Estilo de texto-TextTheme", - "desc": [ - "Os componentes descendentes podem obter os dados do tema através de CupertinoTheme.of para uso." - ] - }, - { - "file": "node2_use.dart", - "name": "Uso de CupertinoThemeData", - "desc": [ - "Assim como o Theme, pode compartilhar atributos especificados entre os descendentes, embora os atributos sejam menos. Note que, se precisar usar o tema, não pode obtê-lo no contexto atual." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ru_RU.json deleted file mode 100644 index 4cd4e908f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_ru_RU.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "iOS тема", - "info": "Можно получить объект CupertinoThemeData через CupertinoTheme.of. Также можно указать тему для применения к дочерним компонентам CupertinoTheme.", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Стиль текста-TextTheme", - "desc": [ - "Дочерние компоненты могут использовать данные темы, полученные через CupertinoTheme.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Использование CupertinoThemeData", - "desc": [ - "Как и в случае с Theme, можно указать свойства, чтобы они были общими для дочерних элементов, но их меньше. Обратите внимание, что если нужно использовать тему, её нельзя получить в текущем контексте." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_zh-CN.json deleted file mode 100644 index 917562453..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/desc_zh-CN.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 169, - "name": "CupertinoTheme", - "localName": "iOS主题", - "info": "可通过CupertinoTheme.of获取CupertinoThemeData对象。也可以指定主题应用于CupertinoTheme的后代组件。", - "lever": 3, - "family": 0, - "linkIds": [ - 156, - 168 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "文字样式-TextTheme", - "desc": [ - "后代组件可以通过CupertinoTheme.of获取主题的数据进行使用。" - ] - }, - { - "file": "node2_use.dart", - "name": "CupertinoThemeData的使用", - "desc": [ - "和Theme一样可以通过指定的属性,让它们在后代中共享,不过属性较少。注意如果需要使用主题,不能在当前的context中获取。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/node1_base.dart deleted file mode 100644 index 64ccfd50c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/node1_base.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class TextCupertinoTheme extends StatelessWidget { - const TextCupertinoTheme({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - CupertinoTextThemeData queryData = CupertinoTheme.of(context).textTheme; - Map styles = { - "tabLabelTextStyle: ": queryData.tabLabelTextStyle, - "actionTextStyle: ": queryData.actionTextStyle, - "navActionTextStyle: ": queryData.navActionTextStyle, - "textStyle: ": queryData.textStyle, - "navTitleTextStyle: ": queryData.navTitleTextStyle, - "pickerTextStyle: ": queryData.pickerTextStyle, - "dateTimePickerTextStyle: ": queryData.dateTimePickerTextStyle, - "navLargeTitleTextStyle: ": queryData.navLargeTitleTextStyle, - }; - TextStyle style = - const TextStyle(fontSize: 16, fontWeight: FontWeight.bold); - return Column( - children: - styles.keys.map((e) => buildItem(e, style, styles[e]!)).toList(), - ); - } - - Widget buildItem(String label, TextStyle labelStyle, TextStyle style) => - Column( - children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text(label, style: labelStyle), - Text("@toly", style: style) - ], - ), - ), - const Divider(height: 1) - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/node2_use.dart b/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/node2_use.dart deleted file mode 100644 index 61cad7ac3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/CupertinoTheme/node2_use.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - - -class CustomCupertinoTheme extends StatelessWidget { - const CustomCupertinoTheme({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const CupertinoTheme( - data: CupertinoThemeData( - primaryColor: Colors.blue, primaryContrastingColor: Colors.green), - child: _ChildUseTheme()); - } -} - -class _ChildUseTheme extends StatelessWidget { - const _ChildUseTheme({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Container( - width: 50, - height: 50, - color: CupertinoTheme.of(context).primaryContrastingColor, - ), - SizedBox(width: 150, child: Slider(value: 0.8, onChanged: (v) => {})), - SizedBox( - width: 150, - child: Divider( - color: CupertinoTheme.of(context).primaryContrastingColor, - thickness: 1, - )) - ]); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_de_DE.json deleted file mode 100644 index 436313dde..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_de_DE.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "Datentabelle", - "info": "Eine Tabellenkomponente, die Logik für Klicken, Ändern, Sortieren usw. festlegen kann.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DataTable", - "desc": [ - "【columns】 : Spalten 【List】", - "【rows】 : Zeilen 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "Sortierung von DataTable", - "desc": [ - "【sortColumnIndex】 : Spaltennummer 【int】", - "【columnSpacing】 : Spaltenabstand 【double】", - "【sortAscending】 : Aufsteigend sortieren 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_en_US.json deleted file mode 100644 index 9178f352d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_en_US.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "Data Table", - "info": "A table component that can be customized with logic for clicking, editing, sorting, etc.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DataTable", - "desc": [ - "【columns】 : columns 【List】", - "【rows】 : rows 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "Sorting in DataTable", - "desc": [ - "【sortColumnIndex】 : column index 【int】", - "【columnSpacing】 : column spacing 【double】", - "【sortAscending】 : ascending order 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_es_ES.json deleted file mode 100644 index 16ed9cd67..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_es_ES.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "Tabla de datos", - "info": "Un componente de tabla que permite realizar operaciones como hacer clic, modificar, ordenar, etc., con lógica personalizada.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DataTable", - "desc": [ - "【columns】 : columnas 【List】", - "【rows】 : filas 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "Ordenación de DataTable", - "desc": [ - "【sortColumnIndex】 : índice de columna 【int】", - "【columnSpacing】 : espaciado de columnas 【double】", - "【sortAscending】 : orden ascendente 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_fr_FR.json deleted file mode 100644 index 76f390ce6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_fr_FR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "Tableau de données", - "info": "Un composant de tableau qui permet de cliquer, modifier, trier, etc. en fonction de la logique définie.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DataTable", - "desc": [ - "【columns】 : colonnes 【List】", - "【rows】 : lignes 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "Tri de DataTable", - "desc": [ - "【sortColumnIndex】 : numéro de colonne 【int】", - "【columnSpacing】 : espacement des colonnes 【double】", - "【sortAscending】 : ordre ascendant 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_it_IT.json deleted file mode 100644 index b8cf7229a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_it_IT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "Tabella dati", - "info": "Un componente tabella che può essere personalizzato con logiche per clic, modifiche, ordinamento e altre operazioni.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di DataTable", - "desc": [ - "【columns】 : colonne 【List】", - "【rows】 : righe 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "Ordinamento di DataTable", - "desc": [ - "【sortColumnIndex】 : indice della colonna 【int】", - "【columnSpacing】 : spaziatura tra le colonne 【double】", - "【sortAscending】 : ordine crescente 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ja_JP.json deleted file mode 100644 index 4b3a32dcf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ja_JP.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "データテーブル", - "info": "テーブルコンポーネントで、クリック、編集、ソートなどの操作を論理的に設定できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DataTableの基本使用", - "desc": [ - "【columns】 : 列 【List】", - "【rows】 : 行 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "DataTableのsort", - "desc": [ - "【sortColumnIndex】 : 列番号 【int】", - "【columnSpacing】 : 列間隔 【double】", - "【sortAscending】 : 順序かどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ko_KR.json deleted file mode 100644 index dfd1ec90d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ko_KR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "데이터 테이블", - "info": "테이블 컴포넌트로, 클릭, 수정, 정렬 등의 작업을 위한 로직을 지정할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DataTable 기본 사용", - "desc": [ - "【columns】 : 열 【List】", - "【rows】 : 행 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "DataTable의 정렬", - "desc": [ - "【sortColumnIndex】 : 열 번호 【int】", - "【columnSpacing】 : 열 간격 【double】", - "【sortAscending】 : 순서 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_pt_PT.json deleted file mode 100644 index 3ab4fccc6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_pt_PT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "Tabela de Dados", - "info": "Um componente de tabela que pode definir lógicas para cliques, modificações, ordenação e outras operações.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DataTable", - "desc": [ - "【columns】 : Colunas 【List】", - "【rows】 : Linhas 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "Ordenação do DataTable", - "desc": [ - "【sortColumnIndex】 : Índice da Coluna 【int】", - "【columnSpacing】 : Espaçamento entre Colunas 【double】", - "【sortAscending】 : Ordem Ascendente 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ru_RU.json deleted file mode 100644 index 49b4af781..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_ru_RU.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "Таблица данных", - "info": "Компонент таблицы, который позволяет настраивать логику для кликов, редактирования, сортировки и других операций.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DataTable", - "desc": [ - "【columns】 : Столбцы 【List】", - "【rows】 : Строки 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "Сортировка DataTable", - "desc": [ - "【sortColumnIndex】 : Номер столбца 【int】", - "【columnSpacing】 : Расстояние между столбцами 【double】", - "【sortAscending】 : По возрастанию 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_zh-CN.json deleted file mode 100644 index be8ceb7dd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/desc_zh-CN.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 102, - "name": "DataTable", - "localName": "数据表格", - "info": "一个表格组件,可以制订逻辑进行点击、修改、排序等操作。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DataTable基本使用", - "desc": [ - "【columns】 : 列 【List】", - "【rows】 : 行 【List】" - ] - }, - { - "file": "node2_operation.dart", - "name": "DataTable的sort", - "desc": [ - "【sortColumnIndex】 : 列号 【int】", - "【columnSpacing】 : 列间距 【double】", - "【sortAscending】 : 是否顺序 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/node1_base.dart deleted file mode 100644 index 9ead9206a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/node1_base.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-21 -/// contact me by email 1981462002@qq.com - - -class _Bean { - final int id; - final String name; - final String type; - - _Bean(this.id, this.name, this.type); -} - -class CustomDataTable extends StatelessWidget { - const CustomDataTable({super.key}); - - List<_Bean> get data => [ - _Bean(101, 'DataTable', 'StatelessWidget'), - _Bean(44, 'RangeSlider', 'StatefulWidget'), - _Bean(2, 'Text', 'StatelessWidget'), - _Bean(1, 'Image', 'StatefulWidget'), - ]; - List get columns => ['id', '名称', '类型']; - - @override - Widget build(BuildContext context) { - return DataTable( - columns: columns - .map((String title) => DataColumn(label: Text(title))) - .toList(), - rows: data - .map((_Bean bean) => DataRow(cells: [ - DataCell(Text('${bean.id}')), - DataCell(Text(bean.name)), - DataCell(Text(bean.type)), - ])) - .toList()); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/node2_operation.dart b/modules/widget_system/widgets/lib/StatelessWidget/DataTable/node2_operation.dart deleted file mode 100644 index 5895e621c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DataTable/node2_operation.dart +++ /dev/null @@ -1,108 +0,0 @@ - - -/// create by 张风捷特烈 on 2020/4/25 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; - -class _BeanOp { - final int id; - final String name; - final String type; - bool select; - - _BeanOp(this.id, this.name, this.type, this.select); - - @override - String toString() { - return '_BeanOp{id: $id, name: $name, type: $type, select: $select}'; - } -} - -class SortDataTable extends StatefulWidget { - const SortDataTable({Key? key}) : super(key: key); - - @override - _SortDataTableState createState() => _SortDataTableState(); -} - -class _SortDataTableState extends State { - List<_BeanOp> data = [ - _BeanOp(101, 'DataTable', 'StatelessWidget', false), - _BeanOp(44, 'RangeSlider', 'StatefulWidget', false), - _BeanOp(2, 'Text', 'StatelessWidget', false), - _BeanOp(1, 'Image', 'StatefulWidget', false), - ]; - - bool _sortAscending = false; - List<_BeanOp> selectData = <_BeanOp>[]; - - @override - Widget build(BuildContext context) { - return DataTable( - columnSpacing: 20, - sortColumnIndex: 1, - sortAscending: _sortAscending, - columns: [ - DataColumn( - label: Checkbox( - value: selectData.length == data.length, - onChanged: _onSelectAll, - ), - ), - DataColumn(label: const Text('id'), numeric: false, onSort: _onSortId), - const DataColumn(label: Text('名称')), - const DataColumn(label: Text('类型')), - ], - rows: data - .map((e) => DataRow(selected: false, cells: [ - DataCell(Checkbox( - value: e.select, - onChanged: (v) => _onSelectOne(v, e), - )), - DataCell(Text('${e.id}')), - DataCell(Text(e.name), - showEditIcon: true, onTap: () {}), - DataCell(Text(e.type)), - ])) - .toList()); - } - - _onSortId(int index, bool ascending) { - setState(() { - _sortAscending = ascending; - data.sort( - (a, b) => ascending ? a.id.compareTo(b.id) : b.id.compareTo(a.id)); - }); - } - - void _onSelectOne(bool? selected, _BeanOp e) { - if(selected==null) return; - setState(() { - if (selected) { - selectData.add(e); - } else { - selectData.remove(e); - } - e.select = selected; - }); - } - - void _onSelectAll(bool? select) { - if(select==null) return; - setState(() { - if (select) { - for (_BeanOp e in data) { - e.select = true; - } - selectData = data.map((e) => e).toList(); - } else { - for (_BeanOp e in data) { - e.select = false; - } - selectData = []; - } - }); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_de_DE.json deleted file mode 100644 index 8c78b48cd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_de_DE.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "Datumsauswahl", - "info": "Komponente zur Auswahl von Datumsangaben, die das aktuelle Datum, das ausgewählte Datum, den angezeigten Monat usw. festlegen kann und Datumsauswahlereignisse empfängt.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DayPicker", - "desc": [ - "【selectedDate】 : Ausgewähltes Datum 【DateTime】", - "【currentDate】 : Aktuelles Datum 【DateTime】", - "【firstDate】 : Frühestes Datum 【DateTime】", - "【lastDate】 : Spätestes Datum 【DateTime】", - "【displayedMonth】 : Aktuell angezeigter Monat 【DateTime】", - "【onChanged】 : Klick-Rückruf 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'DayPicker Datumsauswahl ist mit Flutter3.0 ausgelaufen. Der Ersatz ist der CalendarDatePicker Kalenderauswahl.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_en_US.json deleted file mode 100644 index 3e27118a1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_en_US.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "Date Picker", - "info": "A component for selecting dates, which can specify the current date, selected date, displayed month, etc., and receives date selection events.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DayPicker", - "desc": [ - "【selectedDate】 : Selected date 【DateTime】", - "【currentDate】 : Current date 【DateTime】", - "【firstDate】 : Earliest date limit 【DateTime】", - "【lastDate】 : Latest date limit 【DateTime】", - "【displayedMonth】 : Currently displayed month 【DateTime】", - "【onChanged】 : Click callback 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'DayPicker date picker has exited the stage of history in Flutter 3.0. It is replaced by the CalendarDatePicker calendar picker.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_es_ES.json deleted file mode 100644 index 5ff44e943..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_es_ES.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "Selector de Fecha", - "info": "Componente de selección de fecha, puede especificar la fecha actual, la fecha seleccionada, el mes mostrado, etc., y recibe eventos de selección de fecha.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DayPicker", - "desc": [ - "【selectedDate】 : Fecha seleccionada 【DateTime】", - "【currentDate】 : Fecha actual 【DateTime】", - "【firstDate】 : Límite de la fecha más temprana 【DateTime】", - "【lastDate】 : Límite de la fecha más tardía 【DateTime】", - "【displayedMonth】 : Mes actualmente mostrado 【DateTime】", - "【onChanged】 : Retroalimentación al hacer clic 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'DayPicker, el selector de fecha, dejó de usarse en Flutter 3.0. Su reemplazo es CalendarDatePicker, el selector de calendario.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_fr_FR.json deleted file mode 100644 index 83f9d1992..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_fr_FR.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "Sélecteur de date", - "info": "Composant de sélection de date, permet de spécifier la date actuelle, la date sélectionnée, le mois affiché, etc., et reçoit les événements de sélection de date.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DayPicker", - "desc": [ - "【selectedDate】 : Date sélectionnée 【DateTime】", - "【currentDate】 : Date actuelle 【DateTime】", - "【firstDate】 : Limite de la première date 【DateTime】", - "【lastDate】 : Limite de la dernière date 【DateTime】", - "【displayedMonth】 : Mois actuellement affiché 【DateTime】", - "【onChanged】 : Rappel de clic 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'Le sélecteur de date DayPicker a quitté la scène historique avec Flutter 3.0. Il est remplacé par le sélecteur de calendrier CalendarDatePicker.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_it_IT.json deleted file mode 100644 index f757f8ee0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_it_IT.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "Selettore di data", - "info": "Componente per la selezione della data, consente di specificare la data corrente, la data selezionata, il mese visualizzato, ecc., e riceve l'evento di selezione della data.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzo di base di DayPicker", - "desc": [ - "【selectedDate】 : Data selezionata 【DateTime】", - "【currentDate】 : Data corrente 【DateTime】", - "【firstDate】 : Limite della data più antica 【DateTime】", - "【lastDate】 : Limite della data più recente 【DateTime】", - "【displayedMonth】 : Mese attualmente visualizzato 【DateTime】", - "【onChanged】 : Callback al click 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'DayPicker, il selettore di date, è stato ritirato da Flutter 3.0. Il suo sostituto è CalendarDatePicker, il selettore di calendario.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ja_JP.json deleted file mode 100644 index d6b678017..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ja_JP.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "日付ピッカー", - "info": "日付を選択するコンポーネントで、現在の日付、選択された日付、表示する月などを指定できます。日付が選択されたイベントを受け取ります。", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DayPickerの基本的な使用法", - "desc": [ - "【selectedDate】 : 選択された日付 【DateTime】", - "【currentDate】 : 現在の日付 【DateTime】", - "【firstDate】 : 最初の日付制限 【DateTime】", - "【lastDate】 : 最後の日付制限 【DateTime】", - "【displayedMonth】 : 現在表示されている月 【DateTime】", - "【onChanged】 : クリックコールバック 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'DayPicker 日付ピッカーは Flutter3.0 で歴史の舞台から退場しました。代替として CalendarDatePicker カレンダーピッカーがあります。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ko_KR.json deleted file mode 100644 index addf834e2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ko_KR.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "날짜 선택기", - "info": "날짜 선택 컴포넌트로, 현재 날짜, 선택된 날짜, 표시할 월 등을 지정할 수 있으며, 날짜 선택 이벤트를 수신합니다.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DayPicker 기본 사용", - "desc": [ - "【selectedDate】 : 선택된 날짜 【DateTime】", - "【currentDate】 : 현재 날짜 【DateTime】", - "【firstDate】 : 가장 이른 날짜 제한 【DateTime】", - "【lastDate】 : 가장 늦은 날짜 제한 【DateTime】", - "【displayedMonth】 : 현재 표시되는 월 【DateTime】", - "【onChanged】 : 클릭 콜백 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'DayPicker 날짜 선택기는 Flutter3.0에서 역사의 뒤안길로 사라졌습니다. 이를 대체하는 것은 CalendarDatePicker 캘린더 선택기입니다.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_pt_PT.json deleted file mode 100644 index 26c935660..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_pt_PT.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "Seletor de Data", - "info": "Componente de seleção de data, pode especificar a data atual, a data selecionada, o mês exibido, etc., e recebe eventos de seleção de data.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DayPicker", - "desc": [ - "【selectedDate】 : Data selecionada 【DateTime】", - "【currentDate】 : Data atual 【DateTime】", - "【firstDate】 : Limite da data mais antiga 【DateTime】", - "【lastDate】 : Limite da data mais recente 【DateTime】", - "【displayedMonth】 : Mês atualmente exibido 【DateTime】", - "【onChanged】 : Callback de clique 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'O DayPicker, o seletor de data, saiu de cena no Flutter 3.0. O substituto é o CalendarDatePicker, o seletor de calendário.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ru_RU.json deleted file mode 100644 index d0b916f13..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_ru_RU.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "Выбор даты", - "info": "Компонент для выбора даты, который позволяет указать текущую дату, выбранную дату, отображаемый месяц и т.д., а также получать события выбора даты.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DayPicker", - "desc": [ - "【selectedDate】 : Выбранная дата 【DateTime】", - "【currentDate】 : Текущая дата 【DateTime】", - "【firstDate】 : Ограничение на самую раннюю дату 【DateTime】", - "【lastDate】 : Ограничение на самую позднюю дату 【DateTime】", - "【displayedMonth】 : Отображаемый месяц 【DateTime】", - "【onChanged】 : Обратный вызов при клике 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'DayPicker, компонент выбора даты, ушел в историю с выходом Flutter 3.0. Его заменил CalendarDatePicker, компонент выбора даты из календаря.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_zh-CN.json deleted file mode 100644 index be05cf4bc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/desc_zh-CN.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": 134, - "name": "DayPicker", - "localName": "日期选择器", - "info": "日期的选择组件,可指定当前日期、选中日期、展示月份等,接收日期选中事件。", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 135, - 136 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DayPicker基本使用", - "desc": [ - "【selectedDate】 : 选中日期 【DateTime】", - "【currentDate】 : 当前日期 【DateTime】", - "【firstDate】 : 最前日期限制 【DateTime】", - "【lastDate】 : 最后日期限制 【DateTime】", - "【displayedMonth】 : 当前展示的月份 【DateTime】", - "【onChanged】 : 点击回调 【Function(DateTime)】", - " ", - "import 'package:flutter/material.dart';", - "", - "class CustomDayPicker extends StatelessWidget{", - "", - " const CustomDayPicker({Key? key) : super(key: key);", - "", - " final String info =", - " 'DayPicker 日期选择器于 Flutter3.0 退出历史舞台。取代者为 CalendarDatePicker 日历选择器。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " final DateTime _date = DateTime.now();", - " ", - " @override", - " Widget build(BuildContext context) {", - " return SizedBox(", - " height: 350,", - " child: DayPicker(", - " selectedDate: _date,", - " currentDate: DateTime.now(),", - " onChanged: (date)=> setState(() => _date = date),", - " firstDate: DateTime(2018),", - " lastDate: DateTime(2030),", - " displayedMonth: DateTime.now()", - " )," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/node1_base.dart deleted file mode 100644 index 9938f6036..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DayPicker/node1_base.dart +++ /dev/null @@ -1,24 +0,0 @@ - - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; - -class CustomDayPicker extends StatelessWidget { - - const CustomDayPicker({Key? key}) : super(key: key); - - final String info = - 'DayPicker 日期选择器于 Flutter3.0 退出历史舞台。取代者为 CalendarDatePicker 日历选择器。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_de_DE.json deleted file mode 100644 index b27282e35..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "Dialogfeld", - "info": "Das einfachste Dialogfeld-Panel, das eine Inhaltskomponente enthält und Eigenschaften wie Schattentiefe, Hintergrundfarbe, Form usw. angeben kann.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung des Dialogs", - "desc": [ - "【child】: Animationssymboldaten 【Widget】", - "【elevation】: Schattentiefe 【double】", - "【backgroundColor】: Hintergrundfarbe 【Color】", - "【shape】: Form 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_en_US.json deleted file mode 100644 index 97d42177d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "Dialog Box", - "info": "The simplest dialog panel, containing a content component, with properties such as shadow depth, background color, shape, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Dialog", - "desc": [ - "【child】: Animation icon data 【Widget】", - "【elevation】: Shadow depth 【double】", - "【backgroundColor】: Background color 【Color】", - "【shape】: Shape 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_es_ES.json deleted file mode 100644 index f3ca155d6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "Cuadro de diálogo", - "info": "El panel de cuadro de diálogo más simple, que incluye un componente de contenido, puede especificar propiedades como la profundidad de la sombra, el color de fondo, la forma, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Dialog", - "desc": [ - "【child】 : Datos del ícono de animación 【Widget】", - "【elevation】 : Profundidad de la sombra 【double】", - "【backgroundColor】 : Color de fondo 【Color】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_fr_FR.json deleted file mode 100644 index 89e47cc68..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "Boîte de dialogue", - "info": "Le panneau de boîte de dialogue le plus simple, contenant un composant de contenu, peut spécifier des propriétés telles que la profondeur d'ombre, la couleur de fond, la forme, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de la boîte de dialogue", - "desc": [ - "【child】 : Données de l'icône animée 【Widget】", - "【elevation】 : Profondeur d'ombre 【double】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【shape】 : Forme 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_it_IT.json deleted file mode 100644 index 45c1c1862..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "Finestra di dialogo", - "info": "Il pannello di dialogo più semplice, contiene un componente di contenuto, può specificare proprietà come profondità dell'ombra, colore di sfondo, forma, ecc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di Dialog", - "desc": [ - "【child】 : Dati dell'icona animata 【Widget】", - "【elevation】 : Profondità dell'ombra 【double】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ja_JP.json deleted file mode 100644 index 509250c2a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "ダイアログ", - "info": "最もシンプルなダイアログパネルで、コンテンツコンポーネントを含み、影の深さ、背景色、形状などの属性を指定できます。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Dialog基本使用", - "desc": [ - "【child】 : アニメーションアイコンデータ 【Widget】", - "【elevation】 : 影の深さ 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【shape】 : 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ko_KR.json deleted file mode 100644 index bbbda1320..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "대화 상자", - "info": "가장 간단한 대화 상자 패널로, 내용 컴포넌트를 포함하며, 그림자 깊이, 배경색, 모양 등의 속성을 지정할 수 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Dialog 기본 사용", - "desc": [ - "【child】 : 애니메이션 아이콘 데이터 【Widget】", - "【elevation】 : 그림자 깊이 【double】", - "【backgroundColor】 : 배경색 【Color】", - "【shape】 : 모양 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_pt_PT.json deleted file mode 100644 index d2f524b3e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "Caixa de Diálogo", - "info": "O painel de diálogo mais simples, contendo um componente de conteúdo, pode especificar propriedades como profundidade de sombra, cor de fundo, forma, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Dialog", - "desc": [ - "【child】 : Dados do ícone de animação 【Widget】", - "【elevation】 : Profundidade de sombra 【double】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ru_RU.json deleted file mode 100644 index 560ec3a96..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "Диалоговое окно", - "info": "Самая простая панель диалогового окна, содержащая компонент содержимого, можно указать такие свойства, как глубина тени, цвет фона, форма и т.д.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Dialog", - "desc": [ - "【child】 : Данные анимационного иконка 【Widget】", - "【elevation】 : Глубина тени 【double】", - "【backgroundColor】 : Цвет фона 【Color】", - "【shape】 : Форма 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_zh-CN.json deleted file mode 100644 index b12763d41..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 126, - "name": "Dialog", - "localName": "对话框", - "info": "最简易的对话框面板,包含一个内容组件,可指定影深、背景色、形状等属性。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Dialog基本使用", - "desc": [ - "【child】 : 动画图标数据 【Widget】", - "【elevation】 : 影深 【double】", - "【backgroundColor】 : 背景色 【Color】", - "【shape】 : 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Dialog/node1_base.dart deleted file mode 100644 index 59d39bd6c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Dialog/node1_base.dart +++ /dev/null @@ -1,128 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-24 -/// contact me by email 1981462002@qq.com - -class CustomDialog extends StatelessWidget { - const CustomDialog({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildRaisedButton(context), - _buildDialog(), - ], - ); - } - - Widget _buildDialog() => const Dialog( - backgroundColor: Colors.white, - elevation: 5, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10))), - child: SizedBox( - width: 50, - child: DeleteDialog(), - ), - ); - - Widget _buildRaisedButton(BuildContext context) => ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)), - ), - ), - onPressed: () { - showDialog(context: context, builder: (ctx) => _buildDialog()); - }, - child: const Text( - 'Just Show It !', - style: TextStyle(color: Colors.white), - ), - ); - -} - -class DeleteDialog extends StatelessWidget { - const DeleteDialog({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - _buildBar(context), - _buildTitle(), - _buildContent(), - _buildFooter(context), - ], - ); - } - - Widget _buildTitle() { - return const Text( - 'Delete Doucument', - style: TextStyle(color: Color(0xff5CC5E9), fontSize: 24), - ); - } - - Widget _buildContent() { - return const Padding( - padding: EdgeInsets.all(15.0), - child: Text( - ' Hi toly! If you push the conform buttom ,' - ' You will lose this file. Are you sure wand to do that?', - style: TextStyle(color: Color(0xffCFCFCF), fontSize: 16), - textAlign: TextAlign.justify, - ), - ); - } - - Widget _buildFooter(context) { - return Padding( - padding: const EdgeInsets.only(bottom: 15.0, top: 10,left: 10,right: 10), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Container( - alignment: Alignment.center, - height: 40, - width: 100, - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(30)), - color: Color(0xff73D1EE)), - child: const Text('Yes', - style: TextStyle(color: Colors.white, fontSize: 16)), - ), - InkWell( - onTap: ()=>Navigator.of(context).pop(), - child: Container( - alignment: Alignment.center, - height: 40, - width: 100, - decoration: const BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(30)), - color: Colors.orangeAccent), - child: const Text('Cancle', - style: TextStyle(color: Colors.white, fontSize: 16)), - ), - ) - ], - ), - ); - } - - Widget _buildBar(context) => Container( - height: 30, - alignment: Alignment.centerRight, - margin: const EdgeInsets.only(right: 10, top: 5), - child: InkWell( - onTap: ()=>Navigator.of(context).pop(), - child: const Icon( - Icons.close, - color: Color(0xff82CAE3), - ), - ), - ); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_de_DE.json deleted file mode 100644 index 0ec5efd92..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "Horizontale Trennlinie", - "info": "Horizontale Trennlinie, bei der Farbe, Höhe, Dicke und seitliche Abstände angegeben werden können. Wird häufig als Trennlinie für Listenelemente verwendet.", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Divider Farbe und Dicke", - "desc": [ - "【color】: Farbe 【Color】", - "【thickness】: Linienstärke 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Divider Höhe und Lücke", - "desc": [ - "【indent】: Länge der vorderen Lücke 【double】", - "【endIndent】: Länge der hinteren Lücke 【double】", - "【height】: Platzhalterhöhe 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_en_US.json deleted file mode 100644 index 71ed3d1b9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "Horizontal Divider", - "info": "A horizontal divider that can specify color, height, thickness, and left and right margin information, commonly used as a divider for list items.", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Divider Color and Thickness", - "desc": [ - "【color】: Color 【Color】", - "【thickness】: Line thickness 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Divider Height and Indent", - "desc": [ - "【indent】: Front indent length 【double】", - "【endIndent】: Rear indent length 【double】", - "【height】: Placeholder height 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_es_ES.json deleted file mode 100644 index 2b91b1bee..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "Línea divisoria horizontal", - "info": "Línea divisoria horizontal, se puede especificar el color, la altura, el grosor, la información de los márgenes izquierdo y derecho, comúnmente utilizada como línea divisoria de elementos de la lista.", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Color y grosor de Divider", - "desc": [ - "【color】: color 【Color】", - "【thickness】: grosor de la línea 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Altura y espacio de Divider", - "desc": [ - "【indent】: longitud del espacio frontal 【double】", - "【endIndent】: longitud del espacio posterior 【double】", - "【height】: altura del espacio ocupado 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_fr_FR.json deleted file mode 100644 index d6d3201c9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "Ligne de séparation horizontale", - "info": "Ligne de séparation horizontale, peut spécifier la couleur, la hauteur, l'épaisseur et les marges gauche et droite, couramment utilisée pour les lignes de séparation des éléments de liste.", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Couleur et épaisseur du Divider", - "desc": [ - "【color】: Couleur 【Color】", - "【thickness】: Épaisseur de la ligne 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Hauteur et espacement du Divider", - "desc": [ - "【indent】: Longueur de l'espacement avant 【double】", - "【endIndent】: Longueur de l'espacement arrière 【double】", - "【height】: Hauteur de l'élément 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_it_IT.json deleted file mode 100644 index c69a2bca8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "Linea di divisione orizzontale", - "info": "Linea di divisione orizzontale, è possibile specificare colore, altezza, spessore, margini sinistro e destro, comunemente utilizzata come linea di divisione tra gli elementi di una lista.", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Colore e spessore del Divider", - "desc": [ - "【color】: Colore 【Color】", - "【thickness】: Spessore della linea 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Altezza e spazio vuoto del Divider", - "desc": [ - "【indent】: Lunghezza dello spazio vuoto anteriore 【double】", - "【endIndent】: Lunghezza dello spazio vuoto posteriore 【double】", - "【height】: Altezza occupata 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ja_JP.json deleted file mode 100644 index 6319c3823..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "水平分割線", - "info": "水平分割線、色、高さ、太さ、左右の余白情報を指定できます。リストのアイテム分割線としてよく使用されます。", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Dividerの色と太さ", - "desc": [ - "【color】: 色 【Color】", - "【thickness】: 線の太さ 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Dividerの高さと空白", - "desc": [ - "【indent】: 前の空白の長さ 【double】", - "【endIndent】: 後の空白の長さ 【double】", - "【height】: 占める高さ 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ko_KR.json deleted file mode 100644 index 819480d46..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "수평 구분선", - "info": "수평 구분선으로, 색상, 높이, 두께, 좌우 여백 정보를 지정할 수 있으며, 주로 리스트의 항목 구분선으로 사용됩니다.", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Divider 색상과 두께", - "desc": [ - "【color】: 색상 【Color】", - "【thickness】: 선 두께 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Divider 높이와 여백", - "desc": [ - "【indent】: 앞쪽 여백 길이 【double】", - "【endIndent】: 뒤쪽 여백 길이 【double】", - "【height】: 높이 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_pt_PT.json deleted file mode 100644 index c2f0d239d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "Linha divisória horizontal", - "info": "Linha divisória horizontal, pode especificar cor, altura, espessura, margens esquerda e direita, comumente usada como linha divisória de itens de lista.", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Cor e espessura do Divider", - "desc": [ - "【color】: Cor 【Color】", - "【thickness】: Espessura da linha 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Altura e lacuna do Divider", - "desc": [ - "【indent】: Comprimento da lacuna frontal 【double】", - "【endIndent】: Comprimento da lacuna traseira 【double】", - "【height】: Altura do espaço ocupado 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ru_RU.json deleted file mode 100644 index fa945ba44..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "Горизонтальная разделительная линия", - "info": "Горизонтальная разделительная линия, можно указать цвет, высоту, толщину, отступы слева и справа. Обычно используется как разделитель элементов списка.", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Цвет и толщина Divider", - "desc": [ - "【color】: Цвет 【Color】", - "【thickness】: Толщина линии 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Высота и отступы Divider", - "desc": [ - "【indent】: Длина отступа спереди 【double】", - "【endIndent】: Длина отступа сзади 【double】", - "【height】: Высота занимаемого места 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_zh-CN.json deleted file mode 100644 index 1c2926855..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 34, - "name": "Divider", - "localName": "水平分割线", - "info": "水平分割线,可指定颜色、高度、粗细、左右边距信息,常用与列表的item分割线。", - "lever": 2, - "family": 0, - "linkIds": [ - 35, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Divider颜色和粗细", - "desc": [ - "【color】: 颜色 【Color】", - "【thickness】: 线粗细 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Divider高度和空缺", - "desc": [ - "【indent】: 前面空缺长度 【double】", - "【endIndent】: 后面空缺长度 【double】", - "【height】: 占位高 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Divider/node1_base.dart deleted file mode 100644 index c17f923fb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/node1_base.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-24 -/// contact me by email 1981462002@qq.com - - -class CustomDivider extends StatelessWidget { - const CustomDivider({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - List dataColor = [ - Colors.red, Colors.yellow, - Colors.blue, Colors.green]; - List dataThickness = [1.0, 2.0, 4.0, 6.0]; - Map data = Map.fromIterables(dataColor, dataThickness); - return Column( - children: dataColor - .map((e) => Divider( - color: e, - thickness: data[e], - )).toList(), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Divider/node2_height.dart b/modules/widget_system/widgets/lib/StatelessWidget/Divider/node2_height.dart deleted file mode 100644 index 5c4a8531c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Divider/node2_height.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-24 -/// contact me by email 1981462002@qq.com - - - -class HeightDivider extends StatelessWidget { - const HeightDivider({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - List dataThickness = [10.0, 20.0, 30.0, 40.0]; - List dataColor = [ - Colors.red, Colors.yellow, - Colors.blue, Colors.green]; - Map data = Map.fromIterables(dataColor, dataThickness); - - return Column( - children: dataColor - .map((Color color) => Divider( - color: color, - indent:data[color], - endIndent: data[color]!*2, - height: data[color], - thickness: data[color]!/10, - )) - .toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_de_DE.json deleted file mode 100644 index ec56bf294..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "Zieh- und Schieb-Rücksetzer", - "info": "Es kann die nachfolgenden DraggableScrollableSheet benachrichtigen, um ihre Position auf den Ausgangszustand zurückzusetzen.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "Verwenden Sie DraggableScrollableActuator.reset(context), um die Position der nachfolgenden DraggableScrollableSheet auf die Ausgangsposition zurückzusetzen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_en_US.json deleted file mode 100644 index 5c9afd686..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "Drag and Slide Resetter", - "info": "It can notify the descendant DraggableScrollableSheet to reset its position to the initial state.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage", - "desc": [ - "【child】: Child component 【Widget】", - "Use DraggableScrollableActuator.reset(context) to reset the position of the descendant DraggableScrollableSheet to the initial position." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_es_ES.json deleted file mode 100644 index c6229f577..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "Restablecedor de arrastre y desplazamiento", - "info": "Puede notificar a la hoja DraggableScrollableSheet descendiente para restablecer su posición al estado inicial.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "Usa DraggableScrollableActuator.reset(context) para restablecer la posición inicial de la hoja DraggableScrollableSheet descendiente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_fr_FR.json deleted file mode 100644 index 928a6385c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "Réinitialisateur de glissement", - "info": "Il peut informer les descendants DraggableScrollableSheet de réinitialiser leur position à l'état initial.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "Utilisez DraggableScrollableActuator.reset(context) pour réinitialiser la position initiale du descendant DraggableScrollableSheet." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_it_IT.json deleted file mode 100644 index a13ffb466..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "Trascinabile scorrevole reset", - "info": "Può notificare ai discendenti DraggableScrollableSheet di ripristinare la loro posizione allo stato iniziale.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Metodo di utilizzo di base", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "Utilizza DraggableScrollableActuator.reset(context) per ripristinare la posizione iniziale del discendente DraggableScrollableSheet." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ja_JP.json deleted file mode 100644 index 4935f4bca..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "ドラッグスクロールリセッター", - "info": "これは子孫の DraggableScrollableSheet に通知して、その位置を初期状態にリセットすることができます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "基本的な使用方法", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "DraggableScrollableActuator.reset(context) を使用して、子孫の DraggableScrollableSheet を初期位置にリセットします。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ko_KR.json deleted file mode 100644 index 57c5481df..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "드래그 스크롤 재설정기", - "info": "이것은 후손 DraggableScrollableSheet에게 초기 상태로 위치를 재설정하도록 알릴 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "기본 사용 방법", - "desc": [ - "【child】 : 자식 구성 요소 【Widget】", - "DraggableScrollableActuator.reset(context)를 사용하여 후손 DraggableScrollableSheet를 초기 위치로 재설정합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_pt_PT.json deleted file mode 100644 index 06f3310bf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "Reposicionador de Arrasto e Deslize", - "info": "Ele pode notificar o DraggableScrollableSheet descendente para redefinir sua posição para o estado inicial.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Método de Uso Básico", - "desc": [ - "【child】 : Componente filho 【Widget】", - "Use DraggableScrollableActuator.reset(context) para redefinir a posição inicial do DraggableScrollableSheet descendente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ru_RU.json deleted file mode 100644 index 912c56347..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "Перетаскиваемый сбрасыватель", - "info": "Он может уведомить дочерние DraggableScrollableSheet о необходимости сбросить их положение в исходное состояние.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "Используйте DraggableScrollableActuator.reset(context) для сброса положения дочернего DraggableScrollableSheet в исходное положение." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_zh-CN.json deleted file mode 100644 index 77c96c876..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 221, - "name": "DraggableScrollableActuator", - "localName": "拖滑重置器", - "info": "它可以通知后代的 DraggableScrollableSheet,将其位置重置为初始状态。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "基本使用方法", - "desc": [ - "【child】 : 子组件 【Widget】", - "使用 DraggableScrollableActuator.reset(context) 重置后代 DraggableScrollableSheet 位初始位置。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/node1_base.dart deleted file mode 100644 index 16f720053..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DraggableScrollableActuator/node1_base.dart +++ /dev/null @@ -1,110 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class DraggableScrollableActuatorDemo extends StatelessWidget { - const DraggableScrollableActuatorDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.all(10), - child: ElevatedButton( - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => DraggableScrollableActuatorPage()), - ); - }, - child: const Text("进入 DraggableScrollableActuator 测试页"), - ), - ); - } -} - -class DraggableScrollableActuatorPage extends StatelessWidget { - DraggableScrollableActuatorPage({Key? key}) : super(key: key); - - final List data = [ - Colors.orange[50]!, - Colors.orange[100]!, - Colors.orange[200]!, - Colors.orange[300]!, - Colors.orange[400]!, - Colors.orange[500]!, - Colors.orange[600]!, - Colors.orange[700]!, - Colors.orange[800]!, - Colors.orange[900]!, - Colors.red[50]!, - Colors.red[100]!, - Colors.red[200]!, - Colors.red[300]!, - Colors.red[400]!, - Colors.red[500]!, - Colors.red[600]!, - Colors.red[700]!, - Colors.red[800]!, - Colors.red[900]!, - ]; - - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: const Text("DraggableScrollableActuator"), - ), - body: DraggableScrollableActuator( - child: Builder( - builder: (ctx) => Column( - children: [ - ElevatedButton( - onPressed: () { - DraggableScrollableActuator.reset(ctx); - }, - child: const Text("重置位置"), - ), - Expanded( - child: buildSheet(), - ), - ], - ), - ), - ), - ); - } - - Widget buildSheet() => DraggableScrollableSheet( - initialChildSize: 0.3, - minChildSize: 0.2, - maxChildSize: 1, - expand: true, - builder: (BuildContext context, ScrollController scrollController) => - ListView.builder( - controller: scrollController, - itemCount: data.length, - itemBuilder: buildColorItem, - ), - ); - - Widget buildColorItem(BuildContext context, int index) { - return Container( - alignment: Alignment.center, - height: 60, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ]), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_de_DE.json deleted file mode 100644 index 2a2df0ec7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "Seitenleiste", - "info": "Wird im Allgemeinen für die draw- und endDraw-Eigenschaften in Scaffold als linke und rechte Seitenleiste verwendet. Kann ein Kindelement aufnehmen und die Schattentiefe angeben.", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Drawer", - "desc": [ - "【child】 : Kindelement 【Widget】", - "【elevation】 : Schattentiefe 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_en_US.json deleted file mode 100644 index 7f1cbcd2d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "Drawer", - "info": "Generally used as the left and right sliding panels in the Scaffold's draw and endDraw properties. It can contain a child component and can specify the elevation.", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Drawer", - "desc": [ - "【child】 : Child component 【Widget】", - "【elevation】 : Elevation 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_es_ES.json deleted file mode 100644 index 12dc49f46..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "Barra deslizante", - "info": "Generalmente se utiliza en los atributos draw y endDraw de Scaffold como barras deslizantes izquierda y derecha, puede contener un componente hijo y permite especificar la profundidad de la sombra.", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Drawer", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【elevation】 : Profundidad de la sombra 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_fr_FR.json deleted file mode 100644 index c85c7ed57..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "Barre de glissement", - "info": "Généralement utilisé pour les propriétés draw et endDraw dans Scaffold comme barres de glissement gauche et droite, peut contenir un composant enfant, peut spécifier la profondeur de l'ombre.", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Drawer", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【elevation】 : Profondeur de l'ombre 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_it_IT.json deleted file mode 100644 index b28e89eb8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "Barra di scorrimento", - "info": "Generalmente utilizzato per gli attributi draw e endDraw in Scaffold come barre di scorrimento laterali, può contenere un componente figlio e specificare la profondità dell'ombra.", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Drawer", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【elevation】 : Profondità dell'ombra 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ja_JP.json deleted file mode 100644 index e1366ece3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "スライドバー", - "info": "一般的にScaffoldのdrawおよびendDrawプロパティで左右のスライドバーとして使用され、1つの子コンポーネントを収容でき、影の深さを指定できます。", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Drawerの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【elevation】 : 影の深さ 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ko_KR.json deleted file mode 100644 index b7eb4ada1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "슬라이드 바", - "info": "일반적으로 Scaffold의 draw 및 endDraw 속성으로 좌우 슬라이드 바로 사용되며, 하나의 자식 위젯을 수용할 수 있고, 그림자 깊이를 지정할 수 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Drawer 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【elevation】 : 그림자 깊이 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_pt_PT.json deleted file mode 100644 index 7dfd72b68..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "Barra de deslizamento", - "info": "Geralmente usado para os atributos draw e endDraw no Scaffold como barras de deslizamento esquerda e direita, pode conter um componente filho e especificar a profundidade da sombra.", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Drawer", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【elevation】 : Profundidade da sombra 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ru_RU.json deleted file mode 100644 index 09836344c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "Скользящая панель", - "info": "Обычно используется в свойствах draw и endDraw Scaffold в качестве левой и правой скользящей панели, может содержать один дочерний компонент, можно указать глубину тени.", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Drawer", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【elevation】 : Глубина тени 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_zh-CN.json deleted file mode 100644 index 35284bfad..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 154, - "name": "Drawer", - "localName": "滑页栏", - "info": "一般用于Scaffold中的draw和endDraw属性作为左右的滑页栏,可以容纳一个子组件,能指定影深。", - "lever": 2, - "family": 0, - "linkIds": [ - 64, - 155 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Drawer基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【elevation】 : 影深 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Drawer/node1_base.dart deleted file mode 100644 index 9248e9a52..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Drawer/node1_base.dart +++ /dev/null @@ -1,65 +0,0 @@ - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; - -class CustomDrawer extends StatelessWidget { - const CustomDrawer({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 400, - child: Scaffold( - appBar: AppBar( - title: const Text('Flutter Unit'), - ), - drawer: Drawer( - elevation: 3, - child: _buildChild(), - ), - ), - ); - } - - Widget _buildChild() => ListView( - padding: EdgeInsets.zero, - children: const [ - DrawerHeader( - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage('assets/images/caver.webp'), - fit: BoxFit.cover), - ), - child: Text( - '张风捷特烈', - style: TextStyle(fontSize: 24, color: Colors.white, shadows: [ - Shadow(color: Colors.black, offset: Offset(1, 1), blurRadius: 3) - ]), - ), - ), - ListTile( - leading: Icon( - Icons.star, - color: Colors.blue, - ), - title: Text('我的收藏'), - ), - ListTile( - leading: Icon( - Icons.palette, - color: Colors.orangeAccent, - ), - title: Text('我的绘画'), - ), - ListTile( - leading: Icon( - Icons.insert_drive_file, - color: Colors.green, - ), - title: Text('我的文件'), - ), - ], - ); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_de_DE.json deleted file mode 100644 index 4ee3ddcb0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "Schubladenknopf", - "info": "Ein linker Schubladensymbolknopf, der das Symbol mit DrawerButtonIcon anzeigt. Das Standardklickereignis kann die linke Schublade öffnen.", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DrawerButton", - "desc": [ - "【onPressed】: Klickereignis 【VoidCallback?】", - "【style】: Schaltflächenstil 【ButtonStyle?】", - "Wenn onPressed leer ist, wird beim Klicken die linke Schublade geöffnet." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_en_US.json deleted file mode 100644 index efd56389d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "Drawer Button", - "info": "A left drawer icon button, using DrawerButtonIcon to display the icon. The default click event can open the left drawer.", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DrawerButton", - "desc": [ - "【onPressed】: Click event 【VoidCallback?】", - "【style】: Button style 【ButtonStyle?】", - "When onPressed is empty, clicking will open the left drawer." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_es_ES.json deleted file mode 100644 index d8466e59e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "Botón de cajón", - "info": "Un botón de icono de cajón izquierdo, utiliza DrawerButtonIcon para mostrar el icono, el evento de clic predeterminado puede abrir el cajón izquierdo.", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DrawerButton", - "desc": [ - "【onPressed】: Evento de clic 【VoidCallback?】", - "【style】: Estilo del botón 【ButtonStyle?】", - "Cuando onPressed está vacío, al hacer clic se abrirá el cajón izquierdo." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_fr_FR.json deleted file mode 100644 index 12c175fbe..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "Bouton de tiroir", - "info": "Un bouton d'icône de tiroir gauche, utilise DrawerButtonIcon pour afficher l'icône. L'événement de clic par défaut peut ouvrir le tiroir gauche.", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DrawerButton", - "desc": [ - "【onPressed】 : Événement de clic 【VoidCallback?】", - "【style】: Style du bouton 【ButtonStyle?】", - "Lorsque onPressed est vide, un clic ouvrira le tiroir gauche." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_it_IT.json deleted file mode 100644 index 8a7da810f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "Pulsante Cassetto", - "info": "Un pulsante con icona del cassetto sinistro, utilizza DrawerButtonIcon per mostrare l'icona, l'evento di clic predefinito può aprire il cassetto sinistro.", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di DrawerButton", - "desc": [ - "【onPressed】 : Evento di clic 【VoidCallback?】", - "【style】: Stile del pulsante 【ButtonStyle?】", - "Quando onPressed è vuoto, il clic aprirà il cassetto sinistro." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ja_JP.json deleted file mode 100644 index 8710f35dd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "ドロワーボタン", - "info": "左ドロワーアイコンボタンで、DrawerButtonIconを使用してアイコンを表示します。デフォルトのクリックイベントで左ドロワーを開きます。", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerButton 基本使用", - "desc": [ - "【onPressed】 : クリックイベント 【VoidCallback?】", - "【style】: ボタンスタイル 【ButtonStyle?】", - "onPressedが空の場合、クリックすると左ドロワーが開きます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ko_KR.json deleted file mode 100644 index 2065716b9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "서랍 버튼", - "info": "왼쪽 서랍 아이콘 버튼, DrawerButtonIcon을 사용하여 아이콘을 표시하며, 기본 클릭 이벤트는 왼쪽 서랍을 엽니다.", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerButton 기본 사용", - "desc": [ - "【onPressed】 : 클릭 이벤트 【VoidCallback?】", - "【style】: 버튼 스타일 【ButtonStyle?】", - "onPressed가 비어 있을 때, 클릭하면 왼쪽 서랍이 열립니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_pt_PT.json deleted file mode 100644 index 3ea74e2bd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "Botão de Gaveta", - "info": "Um botão de ícone de gaveta esquerda, usando DrawerButtonIcon para exibir o ícone, o evento de clique padrão pode abrir a gaveta esquerda.", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DrawerButton", - "desc": [ - "【onPressed】 : Evento de clique 【VoidCallback?】", - "【style】: Estilo do botão 【ButtonStyle?】", - "Quando onPressed estiver vazio, ao clicar, a gaveta esquerda será aberta." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ru_RU.json deleted file mode 100644 index 8a62d7b9b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "Кнопка ящика", - "info": "Кнопка с иконкой левого ящика, использует DrawerButtonIcon для отображения иконки, по умолчанию при нажатии открывает левый ящик.", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DrawerButton", - "desc": [ - "【onPressed】: Событие нажатия 【VoidCallback?】", - "【style】: Стиль кнопки 【ButtonStyle?】", - "Если onPressed пуст, при нажатии открывается левый ящик." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_zh-CN.json deleted file mode 100644 index 6cf4fc4bc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 276, - "name": "DrawerButton", - "localName": "抽屉按钮", - "info": "一个左抽屉图标按钮, 使用 DrawerButtonIcon 展示图标,默认点击事件可以打开左抽屉。", - "lever": 1, - "family": 0, - "linkIds": [ - 273, - 361 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerButton 基本使用", - "desc": [ - "【onPressed】 : 点击事件 【VoidCallback?】", - "【style】: 按钮样式 【ButtonStyle?】", - "onPressed 为空时,点击时会打开左抽屉。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/node1_base.dart deleted file mode 100644 index 8803ccdb9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButton/node1_base.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/11/28 -/// contact me by email 1981462002@qq.com - - -class DrawerButtonDemo extends StatelessWidget { - const DrawerButtonDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return DrawerButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - iconColor: Colors.white, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_de_DE.json deleted file mode 100644 index 6d7a5fde0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "Schubladen-Schaltflächensymbol", - "info": "Ein Schubladen-Icon-Symbol, das je nach Plattform das entsprechende Symbol anzeigt und über ActionIconTheme angepasst werden kann.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerButtonIcon-Effekt", - "desc": [ - "Passt das Symbol der Schubladenschaltfläche für verschiedene Plattformen über die _ActionIcon-Komponente gemäß dem ActionIconTheme an." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_en_US.json deleted file mode 100644 index 3b9628df1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "Drawer Button Icon", - "info": "A drawer Icon, which displays the corresponding icon according to the platform, and can be customized with ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerButtonIcon Effect", - "desc": [ - "The _ActionIcon component adapts the drawer button icon for different platforms based on the ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_es_ES.json deleted file mode 100644 index 1be7aee19..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "Icono del botón del cajón", - "info": "Un icono de cajón, muestra el icono correspondiente según la plataforma, se puede personalizar el tema a través de ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Efecto de DrawerButtonIcon", - "desc": [ - "A través del componente _ActionIcon, se adapta el icono del botón del cajón para diferentes plataformas según el tema de ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_fr_FR.json deleted file mode 100644 index 9143ef42d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "Icône de bouton de tiroir", - "info": "Une icône de tiroir, affichant l'icône correspondante selon la plateforme, peut être personnalisée avec ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Effet de DrawerButtonIcon", - "desc": [ - "Le composant _ActionIcon adapte l'icône du bouton de tiroir à différentes plateformes selon le thème ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_it_IT.json deleted file mode 100644 index 6da1a0b42..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "Icona del pulsante del cassetto", - "info": "Un'icona del cassetto, che mostra l'icona corrispondente in base alla piattaforma, può essere personalizzata tramite ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Effetto DrawerButtonIcon", - "desc": [ - "Utilizzando il componente _ActionIcon in base al tema ActionIconTheme, per adattare l'icona del pulsante del cassetto a diverse piattaforme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ja_JP.json deleted file mode 100644 index 7c10cefc6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "ドロワーボタンアイコン", - "info": "ドロワー Icon アイコンで、プラットフォームに応じたアイコンを表示し、ActionIconTheme でテーマをカスタマイズできます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerButtonIcon 効果", - "desc": [ - "_ActionIcon コンポーネントを使用して、ActionIconTheme テーマに基づいて、異なるプラットフォームのドロワーボタンアイコンを適応させます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ko_KR.json deleted file mode 100644 index 003120801..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "서랍 버튼 아이콘", - "info": "서랍 아이콘, 플랫폼에 따라 해당 아이콘을 표시하며, ActionIconTheme을 통해 테마를 사용자 정의할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerButtonIcon 효과", - "desc": [ - "_ActionIcon 컴포넌트를 통해 ActionIconTheme 테마에 따라 다른 플랫폼의 서랍 버튼 아이콘을 조정합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_pt_PT.json deleted file mode 100644 index 5daebcdfa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "Ícone do botão da gaveta", - "info": "Um ícone de gaveta, exibe o ícone correspondente de acordo com a plataforma, pode ser personalizado com o tema ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Efeito do DrawerButtonIcon", - "desc": [ - "Através do componente _ActionIcon, adapta o ícone do botão da gaveta para diferentes plataformas de acordo com o tema ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ru_RU.json deleted file mode 100644 index 5d97ec8ac..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "Иконка кнопки ящика", - "info": "Иконка ящика, которая отображает соответствующую иконку в зависимости от платформы. Можно настроить тему через ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Эффект DrawerButtonIcon", - "desc": [ - "Компонент _ActionIcon адаптирует иконку кнопки ящика для разных платформ в соответствии с темой ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_zh-CN.json deleted file mode 100644 index 1397b3c20..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 273, - "name": "DrawerButtonIcon", - "localName": "抽屉按钮图标", - "info": "一个抽屉 Icon 图标, 根据平台展示对应的图标,可以通过 ActionIconTheme 定制主题。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerButtonIcon 效果", - "desc": [ - "通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的抽屉按钮图标。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/node1_base.dart deleted file mode 100644 index a60b8b70e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerButtonIcon/node1_base.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/11/28 -/// contact me by email 1981462002@qq.com - -class DrawerButtonIconDemo extends StatelessWidget { - const DrawerButtonIconDemo({super.key}); - - @override - Widget build(BuildContext context) { - return const DrawerButtonIcon(); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_de_DE.json deleted file mode 100644 index 309a66241..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "Drawer-Header", - "info": "Wird normalerweise in Drawer verwendet, als Kopf des Drawers. Kann Attribute wie Innen- und Außenabstand, Dekoration, Unterkomponenten usw. festlegen.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von DrawerHeader", - "desc": [ - "【child】 : Unterkomponente 【Widget】", - "【decoration】 : Dekoration 【Decoration】", - "【margin】 : Außenabstand 【EdgeInsetsGeometry】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_en_US.json deleted file mode 100644 index 1c719c261..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "Drawer Header", - "info": "Generally used in Drawer, as the header of the drawer. You can specify properties such as padding, decoration, child components, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of DrawerHeader", - "desc": [ - "【child】 : Child Component 【Widget】", - "【decoration】 : Decoration 【Decoration】", - "【margin】 : Margin 【EdgeInsetsGeometry】", - "【padding】 : Padding 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_es_ES.json deleted file mode 100644 index 3deee37bf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "Encabezado del cajón", - "info": "Generalmente se utiliza en Drawer, como encabezado del cajón. Se pueden especificar propiedades como márgenes internos y externos, decoración, componentes secundarios, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de DrawerHeader", - "desc": [ - "【child】 : Componente secundario 【Widget】", - "【decoration】 : Decoración 【Decoration】", - "【margin】 : Margen externo 【EdgeInsetsGeometry】", - "【padding】 : Margen interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_fr_FR.json deleted file mode 100644 index 95784358b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "En-tête de tiroir", - "info": "Généralement utilisé dans Drawer, comme en-tête du tiroir. Peut spécifier des propriétés telles que les marges intérieures et extérieures, la décoration, les composants enfants, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de DrawerHeader", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【decoration】 : Décoration 【Decoration】", - "【margin】 : Marge extérieure 【EdgeInsetsGeometry】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_it_IT.json deleted file mode 100644 index 54fc9e885..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "Intestazione del cassetto", - "info": "Generalmente utilizzato in Drawer, come intestazione del cassetto. È possibile specificare proprietà come margini interni ed esterni, decorazioni, componenti figli, ecc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di DrawerHeader", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【decoration】 : Decorazione 【Decoration】", - "【margin】 : Margine esterno 【EdgeInsetsGeometry】", - "【padding】 : Margine interno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ja_JP.json deleted file mode 100644 index c917a0602..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "ドロワーヘッダー", - "info": "一般的にDrawer内で使用され、ドロワーのヘッダーとして機能します。内外の余白、装飾、子コンポーネントなどのプロパティを指定できます。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerHeaderの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【decoration】 : 装飾 【Decoration】", - "【margin】 : 外側の余白 【EdgeInsetsGeometry】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ko_KR.json deleted file mode 100644 index b796014dc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "슬라이드 페이지 헤더", - "info": "일반적으로 Drawer에서 사용되며, 슬라이드 페이지의 헤더로 사용됩니다. 내부 및 외부 여백, 장식, 하위 구성 요소 등의 속성을 지정할 수 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerHeader 기본 사용", - "desc": [ - "【child】 : 하위 구성 요소 【Widget】", - "【decoration】 : 장식 【Decoration】", - "【margin】 : 외부 여백 【EdgeInsetsGeometry】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_pt_PT.json deleted file mode 100644 index 209efa1e3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "Cabeçalho do Painel Deslizante", - "info": "Geralmente utilizado no Drawer, como cabeçalho do painel deslizante. Pode especificar atributos como margens internas e externas, decoração, componentes filhos, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do DrawerHeader", - "desc": [ - "【child】 : Componente Filho 【Widget】", - "【decoration】 : Decoração 【Decoration】", - "【margin】 : Margem Externa 【EdgeInsetsGeometry】", - "【padding】 : Margem Interna 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ru_RU.json deleted file mode 100644 index 77940ee30..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "Заголовок выдвижной панели", - "info": "Обычно используется в Drawer в качестве заголовка выдвижной панели. Можно указать свойства, такие как отступы, декор, дочерние компоненты и т.д.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование DrawerHeader", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【decoration】 : Декор 【Decoration】", - "【margin】 : Внешний отступ 【EdgeInsetsGeometry】", - "【padding】 : Внутренний отступ 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_zh-CN.json deleted file mode 100644 index 7ebf64d04..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 155, - "name": "DrawerHeader", - "localName": "滑页栏标题", - "info": "一般用于Drawer中,作为滑页栏的头部。可以指定内外边距、装饰、子组件等属性。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "DrawerHeader基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【decoration】 : 装饰 【Decoration】", - "【margin】 : 外边距 【EdgeInsetsGeometry】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/node1_base.dart deleted file mode 100644 index 76e761a9e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/DrawerHeader/node1_base.dart +++ /dev/null @@ -1,73 +0,0 @@ - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; -class CustomDrawerHeader extends StatelessWidget { - const CustomDrawerHeader({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 400, - child: Scaffold( - appBar: AppBar( - title: const Text('Flutter Unit'), - ), - drawer: Drawer( - elevation: 3, - child: _buildChild(), - ), - ), - ); - } - - Widget _buildChild() => ListView( - padding: EdgeInsets.zero, - children: [ - _buildHeader(), - const ListTile( - leading: Icon( - Icons.star, - color: Colors.blue, - ), - title: Text('我的收藏'), - ), - const ListTile( - leading: Icon( - Icons.palette, - color: Colors.orangeAccent, - ), - title: Text('我的绘画'), - ), - const ListTile( - leading: Icon( - Icons.insert_drive_file, - color: Colors.green, - ), - title: Text('我的文件'), - ), - ], - ); - - Widget _buildHeader() => const DrawerHeader( - margin: EdgeInsets.all(10), - padding: EdgeInsets.only(left: 20,top: 15), - decoration: BoxDecoration( - borderRadius: BorderRadius.only( - topLeft:Radius.circular(40), - topRight:Radius.circular(40) - ), - image: DecorationImage( - image: AssetImage('assets/images/caver.webp'), - fit: BoxFit.cover), - ), - child: Text( - '张风捷特烈', - style: TextStyle(fontSize: 24, color: Colors.white, shadows: [ - Shadow(color: Colors.black, offset: Offset(1, 1), blurRadius: 3) - ]), - ), - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_de_DE.json deleted file mode 100644 index 9b37050e6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "Rechte Schubladen-Schaltfläche", - "info": "Eine rechte Schubladen-Icon-Schaltfläche, die das EndDrawerButtonIcon verwendet, um das Icon anzuzeigen. Standardmäßig öffnet ein Klick die rechte Schublade.", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von EndDrawerButton", - "desc": [ - "【onPressed】 : Klick-Ereignis 【VoidCallback?】", - "【style】: Schaltflächenstil 【ButtonStyle?】", - "Wenn onPressed leer ist, wird beim Klicken die rechte Schublade geöffnet." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_en_US.json deleted file mode 100644 index 807315a6f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "Right Drawer Button", - "info": "A right drawer icon button, using EndDrawerButtonIcon to display the icon, the default click event can open the right drawer.", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of EndDrawerButton", - "desc": [ - "【onPressed】: Click event 【VoidCallback?】", - "【style】: Button style 【ButtonStyle?】", - "When onPressed is empty, clicking will open the right drawer." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_es_ES.json deleted file mode 100644 index 9166032a5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "Botón de cajón derecho", - "info": "Un botón de icono de cajón derecho, que utiliza EndDrawerButtonIcon para mostrar el icono. El evento de clic predeterminado puede abrir el cajón derecho.", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de EndDrawerButton", - "desc": [ - "【onPressed】 : Evento de clic 【VoidCallback?】", - "【style】: Estilo del botón 【ButtonStyle?】", - "Cuando onPressed está vacío, al hacer clic se abrirá el cajón derecho." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_fr_FR.json deleted file mode 100644 index 8e80d8281..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "Bouton de tiroir droit", - "info": "Un bouton d'icône de tiroir droit, utilisant EndDrawerButtonIcon pour afficher l'icône, l'événement de clic par défaut peut ouvrir le tiroir droit.", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de EndDrawerButton", - "desc": [ - "【onPressed】 : Événement de clic 【VoidCallback?】", - "【style】: Style du bouton 【ButtonStyle?】", - "Lorsque onPressed est vide, un clic ouvrira le tiroir droit." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_it_IT.json deleted file mode 100644 index bc4fca22a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "Pulsante cassetto destro", - "info": "Un pulsante icona per il cassetto destro, utilizza EndDrawerButtonIcon per visualizzare l'icona. L'evento di clic predefinito apre il cassetto destro.", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di EndDrawerButton", - "desc": [ - "【onPressed】 : Evento di clic 【VoidCallback?】", - "【style】: Stile del pulsante 【ButtonStyle?】", - "Quando onPressed è vuoto, cliccando si apre il cassetto destro." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ja_JP.json deleted file mode 100644 index 23fcf703b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "右ドロワーボタン", - "info": "右ドロワーアイコンボタンで、EndDrawerButtonIconを使用してアイコンを表示し、デフォルトのクリックイベントで右ドロワーを開くことができます。", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EndDrawerButton 基本使用", - "desc": [ - "【onPressed】 : クリックイベント 【VoidCallback?】", - "【style】: ボタンスタイル 【ButtonStyle?】", - "onPressedが空の場合、クリックすると右ドロワーが開きます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ko_KR.json deleted file mode 100644 index 74f43710b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "오른쪽 서랍 버튼", - "info": "오른쪽 서랍 아이콘 버튼, EndDrawerButtonIcon을 사용하여 아이콘을 표시하며, 기본 클릭 이벤트는 오른쪽 서랍을 열 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EndDrawerButton 기본 사용", - "desc": [ - "【onPressed】 : 클릭 이벤트 【VoidCallback?】", - "【style】: 버튼 스타일 【ButtonStyle?】", - "onPressed가 비어 있을 때, 클릭하면 오른쪽 서랍이 열립니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_pt_PT.json deleted file mode 100644 index 77bcd2109..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "Botão de gaveta direita", - "info": "Um botão de ícone de gaveta direita, usando EndDrawerButtonIcon para exibir o ícone, o evento de clique padrão pode abrir a gaveta direita.", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do EndDrawerButton", - "desc": [ - "【onPressed】 : Evento de clique 【VoidCallback?】", - "【style】: Estilo do botão 【ButtonStyle?】", - "Quando onPressed estiver vazio, ao clicar, a gaveta direita será aberta." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ru_RU.json deleted file mode 100644 index 9ee1ce2d8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "Кнопка правого ящика", - "info": "Кнопка с иконкой правого ящика, использующая EndDrawerButtonIcon для отображения иконки. По умолчанию при нажатии открывает правый ящик.", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование EndDrawerButton", - "desc": [ - "【onPressed】: Событие нажатия 【VoidCallback?】", - "【style】: Стиль кнопки 【ButtonStyle?】", - "Если onPressed пуст, при нажатии открывается правый ящик." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_zh-CN.json deleted file mode 100644 index 6d40c8cbd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 361, - "name": "EndDrawerButton", - "localName": "右抽屉按钮", - "info": "一个右抽屉图标按钮, 使用 EndDrawerButtonIcon 展示图标,默认点击事件可以打开右抽屉。", - "lever": 1, - "family": 0, - "linkIds": [ - 275, - 276 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EndDrawerButton 基本使用", - "desc": [ - "【onPressed】 : 点击事件 【VoidCallback?】", - "【style】: 按钮样式 【ButtonStyle?】", - "onPressed 为空时,点击时会打开右抽屉。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/node1_base.dart deleted file mode 100644 index bbce197e0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButton/node1_base.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/11/28 -/// contact me by email 1981462002@qq.com - - -class EndDrawerButtonDemo extends StatelessWidget { - const EndDrawerButtonDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return EndDrawerButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - iconColor: Colors.white, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_de_DE.json deleted file mode 100644 index 3e564d5f9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "Rechte Schubladen-Schaltfläche Symbol", - "info": "Ein Symbol für die rechte Schubladen-Schaltfläche, das je nach Plattform das entsprechende Symbol anzeigt. Das Thema kann über ActionIconTheme angepasst werden.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EndDrawerButtonIcon Effekt", - "desc": [ - "Durch die _ActionIcon-Komponente wird das Symbol für die rechte Schubladen-Schaltfläche entsprechend dem ActionIconTheme-Theme an verschiedene Plattformen angepasst." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_en_US.json deleted file mode 100644 index 3afb85737..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "Right Drawer Button Icon", - "info": "A right drawer Icon that displays the corresponding icon based on the platform. It can be customized with the ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EndDrawerButtonIcon Effect", - "desc": [ - "The _ActionIcon component adapts the right drawer button icon for different platforms based on the ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_es_ES.json deleted file mode 100644 index 47c9524b4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "Icono del botón del cajón derecho", - "info": "Un icono de cajón derecho que muestra el icono correspondiente según la plataforma, y se puede personalizar el tema a través de ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Efecto de EndDrawerButtonIcon", - "desc": [ - "El componente _ActionIcon adapta el icono del botón del cajón derecho para diferentes plataformas según el tema de ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_fr_FR.json deleted file mode 100644 index c1be227cc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "Icône de bouton de tiroir droit", - "info": "Une icône de tiroir droit, affichant l'icône correspondante selon la plateforme, peut être personnalisée avec ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Effet de l'icône EndDrawerButtonIcon", - "desc": [ - "Le composant _ActionIcon adapte l'icône du bouton de tiroir droit pour différentes plateformes selon le thème ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_it_IT.json deleted file mode 100644 index 679a54690..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "Icona del pulsante del cassetto destro", - "info": "Un'icona del cassetto destro, mostra l'icona corrispondente in base alla piattaforma, può essere personalizzata tramite ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Effetto di EndDrawerButtonIcon", - "desc": [ - "Adatta l'icona del pulsante del cassetto destro per diverse piattaforme tramite il componente _ActionIcon in base al tema ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ja_JP.json deleted file mode 100644 index 0bdd2df7b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "右ドロワーボタンアイコン", - "info": "右ドロワーのアイコンで、プラットフォームに応じて対応するアイコンを表示します。ActionIconTheme を使用してテーマをカスタマイズできます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EndDrawerButtonIcon 効果", - "desc": [ - "_ActionIcon コンポーネントを使用して、ActionIconTheme テーマに基づいて、異なるプラットフォームの右ドロワーボタンアイコンを適応させます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ko_KR.json deleted file mode 100644 index feb4b6525..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "오른쪽 서랍 버튼 아이콘", - "info": "오른쪽 서랍 Icon 아이콘, 플랫폼에 따라 해당 아이콘을 표시하며, ActionIconTheme을 통해 테마를 커스터마이징할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EndDrawerButtonIcon 효과", - "desc": [ - "_ActionIcon 컴포넌트를 통해 ActionIconTheme 테마에 따라 다른 플랫폼의 오른쪽 서랍 버튼 아이콘을 적용합니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_pt_PT.json deleted file mode 100644 index 769b41677..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "Ícone do botão da gaveta direita", - "info": "Um ícone de gaveta direita, que exibe o ícone correspondente de acordo com a plataforma, podendo ser personalizado com o tema ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Efeito do EndDrawerButtonIcon", - "desc": [ - "O componente _ActionIcon adapta o ícone do botão da gaveta direita para diferentes plataformas de acordo com o tema ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ru_RU.json deleted file mode 100644 index 7e3fa0783..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "Иконка кнопки правого выдвижного ящика", - "info": "Иконка правого выдвижного ящика, отображающая соответствующую иконку в зависимости от платформы, может быть настроена с помощью ActionIconTheme.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Эффект EndDrawerButtonIcon", - "desc": [ - "Компонент _ActionIcon адаптирует иконку кнопки правого выдвижного ящика для разных платформ в зависимости от темы ActionIconTheme." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_zh-CN.json deleted file mode 100644 index 07e601ffa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 275, - "name": "EndDrawerButtonIcon", - "localName": "右抽屉按钮图标", - "info": "一个右抽屉 Icon 图标, 根据平台展示对应的图标,可以通过 ActionIconTheme 定制主题。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "EndDrawerButtonIcon 效果", - "desc": [ - "通过 _ActionIcon 组件根据 ActionIconTheme 主题,来适配不同平台的右抽屉按钮图标。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/node1_base.dart deleted file mode 100644 index a2957fcd9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/EndDrawerButtonIcon/node1_base.dart +++ /dev/null @@ -1,13 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2023/11/28 -/// contact me by email 1981462002@qq.com - -class EndDrawerButtonIconDemo extends StatelessWidget { - const EndDrawerButtonIconDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const EndDrawerButtonIcon(); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_de_DE.json deleted file mode 100644 index f508855f2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_de_DE.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "Einblendendes Bild", - "info": "Lädt ein Bild mit transparentem Übergang. Kann Platzhalterbild, Animationskurven für Ein- und Ausblenden, Zeit, Breite, Höhe, Fit-Typ, Ausrichtung, Wiederholungsmodus usw. angeben.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork lädt Netzwerkbild", - "desc": [ - "【placeholder】 : Platzhalterbild-Adresse 【String】", - "【image】 : Anzeigebild-Adresse 【String】", - "【width】: Breite 【double】", - "【height】: Höhe 【double】", - "【fadeInDuration】: Einblenddauer 【Duration】", - "【fadeOutDuration】: Ausblenddauer 【Duration】", - "【fadeInCurve】: Einblendkurve 【Cubic】", - "【fadeOutCurve】: Ausblendkurve 【Cubic】", - "【fit】: Anpassungsmodus 【BoxFit】", - "【alignment】: Ausrichtungsmodus 【Alignment】", - "【repeat】: Wiederholungsmodus 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_en_US.json deleted file mode 100644 index 6d20fb528..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_en_US.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "Fade-in Image", - "info": "Load an image with a transparent gradient. You can specify a placeholder image, animation curves for fade in and out, duration, width, height, fit type, alignment, repeat mode, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork Load Network Image", - "desc": [ - "【placeholder】 : Placeholder image address 【String】", - "【image】 : Display image address 【String】", - "【width】: Width 【double】", - "【height】: Height 【double】", - "【fadeInDuration】: Fade-in duration 【Duration】", - "【fadeOutDuration】: Fade-out duration 【Duration】", - "【fadeInCurve】: Fade-in curve 【Cubic】", - "【fadeOutCurve】: Fade-out curve 【Cubic】", - "【fit】: Fit mode 【BoxFit】", - "【alignment】: Alignment mode 【Alignment】", - "【repeat】: Repeat mode 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_es_ES.json deleted file mode 100644 index fbb31cee9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_es_ES.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "Imagen de fundido", - "info": "Carga una imagen con un gradiente transparente. Se puede especificar una imagen de marcador de posición, curvas de animación de entrada y salida, tiempo, ancho y alto, tipo de ajuste, alineación, modo de repetición, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork cargar imagen de red", - "desc": [ - "【placeholder】 : dirección de la imagen de marcador de posición 【String】", - "【image】 : dirección de la imagen a mostrar 【String】", - "【width】: ancho 【double】", - "【height】: alto 【double】", - "【fadeInDuration】: duración del fundido de entrada 【Duration】", - "【fadeOutDuration】: duración del fundido de salida 【Duration】", - "【fadeInCurve】: curva de fundido de entrada 【Cubic】", - "【fadeOutCurve】: curva de fundido de salida 【Cubic】", - "【fit】: modo de ajuste 【BoxFit】", - "【alignment】: modo de alineación 【Alignment】", - "【repeat】: modo de repetición 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_fr_FR.json deleted file mode 100644 index 9433dd845..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_fr_FR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "Image en fondu", - "info": "Charge une image avec un dégradé transparent. Vous pouvez spécifier une image de remplacement, les courbes d'animation d'entrée et de sortie, la durée, la largeur, la hauteur, le type de fit, l'alignement, le mode de répétition, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork charger une image réseau", - "desc": [ - "【placeholder】 : adresse de l'image de remplacement 【String】", - "【image】 : adresse de l'image à afficher 【String】", - "【width】: largeur 【double】", - "【height】: hauteur 【double】", - "【fadeInDuration】: durée du fondu entrant 【Duration】", - "【fadeOutDuration】: durée du fondu sortant 【Duration】", - "【fadeInCurve】: courbe du fondu entrant 【Cubic】", - "【fadeOutCurve】: courbe du fondu sortant 【Cubic】", - "【fit】: mode d'ajustement 【BoxFit】", - "【alignment】: mode d'alignement 【Alignment】", - "【repeat】: mode de répétition 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_it_IT.json deleted file mode 100644 index 3b135d11e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_it_IT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "Immagine dissolvenza", - "info": "Carica un'immagine con una dissolvenza trasparente. È possibile specificare un'immagine segnaposto, curve di animazione per l'entrata e l'uscita, durata, larghezza, altezza, tipo di adattamento, allineamento, modalità di ripetizione, ecc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork carica immagini dalla rete", - "desc": [ - "【placeholder】 : Indirizzo dell'immagine segnaposto 【String】", - "【image】 : Indirizzo dell'immagine da visualizzare 【String】", - "【width】: Larghezza 【double】", - "【height】: Altezza 【double】", - "【fadeInDuration】: Durata della dissolvenza in entrata 【Duration】", - "【fadeOutDuration】: Durata della dissolvenza in uscita 【Duration】", - "【fadeInCurve】: Curva della dissolvenza in entrata 【Cubic】", - "【fadeOutCurve】: Curva della dissolvenza in uscita 【Cubic】", - "【fit】: Modalità di adattamento 【BoxFit】", - "【alignment】: Modalità di allineamento 【Alignment】", - "【repeat】: Modalità di ripetizione 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ja_JP.json deleted file mode 100644 index ff0eb9c45..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ja_JP.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "フェードイン画像", - "info": "画像を透明にグラデーションしてロードします。プレースホルダー画像、進退のアニメーションカーブ、時間、幅と高さ、fitタイプ、配置方法、繰り返し方法などを指定できます。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetworkでネットワーク画像をロード", - "desc": [ - "【placeholder】 : プレースホルダー画像のアドレス 【String】", - "【image】 : 表示画像のアドレス 【String】", - "【width】: 幅 【double】", - "【height】: 高さ 【double】", - "【fadeInDuration】: フェードイン時間 【Duration】", - "【fadeOutDuration】: フェードアウト時間 【Duration】", - "【fadeInCurve】: フェードインカーブ 【Cubic】", - "【fadeOutCurve】: フェードアウトカーブ 【Cubic】", - "【fit】: フィットモード 【BoxFit】", - "【alignment】: 配置モード 【Alignment】", - "【repeat】: 繰り返しモード 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ko_KR.json deleted file mode 100644 index 268d935ca..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ko_KR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "페이드 인 이미지", - "info": "이미지를 투명하게 페이드 인하여 로드합니다. 플레이스홀더 이미지, 애니메이션 곡선, 시간, 너비, 높이, fit 유형, 정렬 방식, 반복 방식 등을 지정할 수 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork 네트워크 이미지 로드", - "desc": [ - "【placeholder】 : 플레이스홀더 이미지 주소 【String】", - "【image】 : 표시할 이미지 주소 【String】", - "【width】: 너비 【double】", - "【height】: 높이 【double】", - "【fadeInDuration】: 페이드 인 시간 【Duration】", - "【fadeOutDuration】: 페이드 아웃 시간 【Duration】", - "【fadeInCurve】: 페이드 인 곡선 【Cubic】", - "【fadeOutCurve】: 페이드 아웃 곡선 【Cubic】", - "【fit】: 적합 모드 【BoxFit】", - "【alignment】: 정렬 모드 【Alignment】", - "【repeat】: 반복 모드 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_pt_PT.json deleted file mode 100644 index 734af47d1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_pt_PT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "Imagem de Desvanecimento", - "info": "Carrega uma imagem com um gradiente transparente. Pode especificar uma imagem de placeholder, curvas de animação de entrada e saída, duração, largura, altura, tipo de ajuste, alinhamento, modo de repetição, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork carregar imagem da rede", - "desc": [ - "【placeholder】 : endereço da imagem de placeholder 【String】", - "【image】 : endereço da imagem a ser exibida 【String】", - "【width】: largura 【double】", - "【height】: altura 【double】", - "【fadeInDuration】: duração do desvanecimento de entrada 【Duration】", - "【fadeOutDuration】: duração do desvanecimento de saída 【Duration】", - "【fadeInCurve】: curva de desvanecimento de entrada 【Cubic】", - "【fadeOutCurve】: curva de desvanecimento de saída 【Cubic】", - "【fit】: modo de ajuste 【BoxFit】", - "【alignment】: modo de alinhamento 【Alignment】", - "【repeat】: modo de repetição 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ru_RU.json deleted file mode 100644 index f2ed4160f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_ru_RU.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "Изображение с плавным появлением", - "info": "Загрузка изображения с плавным появлением. Можно указать изображение-заполнитель, кривые анимации появления и исчезновения, время, ширину, высоту, тип подгонки, выравнивание, режим повторения и т.д.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork загрузка изображения из сети", - "desc": [ - "【placeholder】 : Адрес изображения-заполнителя 【String】", - "【image】 : Адрес отображаемого изображения 【String】", - "【width】: Ширина 【double】", - "【height】: Высота 【double】", - "【fadeInDuration】: Длительность появления 【Duration】", - "【fadeOutDuration】: Длительность исчезновения 【Duration】", - "【fadeInCurve】: Кривая появления 【Cubic】", - "【fadeOutCurve】: Кривая исчезновения 【Cubic】", - "【fit】: Режим подгонки 【BoxFit】", - "【alignment】: Режим выравнивания 【Alignment】", - "【repeat】: Режим повторения 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_zh-CN.json deleted file mode 100644 index 4c4d01c56..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/desc_zh-CN.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 8, - "name": "FadeInImage", - "localName": "淡入图片", - "info": "透明渐变地加载一张图片。可指定占位图片、进退的动画曲线、时间、宽高、fit类型、对齐方式、重复方式等。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FadeInImage.assetNetwork加载网络图片", - "desc": [ - "【placeholder】 : 展位图地址 【String】", - "【image】 : 显示图地址 【String】", - "【width】: 宽 【double】", - "【height】: 高 【double】", - "【fadeInDuration】: 淡入时长 【Duration】", - "【fadeOutDuration】: 淡出时长 【Duration】", - "【fadeInCurve】: 淡入曲线 【Cubic】", - "【fadeOutCurve】: 淡出曲线 【Cubic】", - "【fit】: 适应模式 【BoxFit】", - "【alignment】: 对齐模式 【Alignment】", - "【repeat】: 重复模式 【ImageRepeat】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/node1_base.dart deleted file mode 100644 index 0e6e88aca..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FadeInImage/node1_base.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - - -class CustomFadeInImage extends StatelessWidget { - const CustomFadeInImage({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - String placeholder = "assets/images/icon_head.webp"; - String img = - "https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/" - "15739960c2da4de3a263eeabcb60057f~tplv-k3u1fbpfcp-zoom-crop-mark" - ":1304:1304:1304:734.awebp"; - return FadeInImage.assetNetwork( - placeholder: placeholder, - image: img, - width: 100, - height: 100, - fit: BoxFit.cover, - repeat:ImageRepeat.noRepeat, - alignment: Alignment.center, - fadeInDuration:const Duration(seconds: 5), - fadeInCurve: Curves.easeInCubic, - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_de_DE.json deleted file mode 100644 index 526328334..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "Filterstreifen", - "info": "Ähnlich wie die Chip-Komponente, hat Eigenschaften für ausgewählt oder nicht und ein Auswahlereignis. Wenn ausgewählt, wird die obere Ebene der linken Komponente mit einem ✔️ überlagert.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip kann Auswahlereignisse akzeptieren", - "desc": [ - "【selected】: Ob ausgewählt 【bool】", - "【onSelected】: Auswahlereignis 【Function(bool)】", - "【selectedColor】: Farbe nach der Auswahl 【Color】", - "【selectedShadowColor】: Schattenfarbe nach der Auswahl 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_en_US.json deleted file mode 100644 index b5d60b4ee..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "Filter Chip", - "info": "Similar in style to the Chip component, with properties for selection and selection events. When selected, the upper layer of the left component will be masked by a ✔️.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip can accept selection events", - "desc": [ - "【selected】: Whether selected 【bool】", - "【onSelected】: Selection event 【Function(bool)】", - "【selectedColor】: Color after selection 【Color】", - "【selectedShadowColor】: Shadow color after selection 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_es_ES.json deleted file mode 100644 index 4380e5b48..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "Chip de Filtro", - "info": "Estilo similar al componente Chip, con propiedades de selección y eventos de selección. Cuando está seleccionado, la capa superior del componente izquierdo estará cubierta por ✔️.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip puede aceptar eventos de selección", - "desc": [ - "【selected】: Si está seleccionado 【bool】", - "【onSelected】: Evento de selección 【Function(bool)】", - "【selectedColor】: Color después de la selección 【Color】", - "【selectedShadowColor】: Color de sombra después de la selección 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_fr_FR.json deleted file mode 100644 index bca9e2e67..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "Filtre puce", - "info": "Un style similaire au composant Chip, avec des propriétés de sélection et des événements de sélection. Lorsqu'il est sélectionné, une superposition de ✔️ apparaît sur le composant de gauche.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip peut accepter des événements de sélection", - "desc": [ - "【selected】: Sélectionné ou non 【bool】", - "【onSelected】: Événement de sélection 【Function(bool)】", - "【selectedColor】: Couleur après sélection 【Color】", - "【selectedShadowColor】: Couleur de l'ombre après sélection 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_it_IT.json deleted file mode 100644 index 7d643b69a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "Filtro Chip", - "info": "Stile simile al componente Chip, con proprietà di selezione e evento di selezione. Quando selezionato, il livello superiore del componente a sinistra sarà coperto da ✔️.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip accetta eventi di selezione", - "desc": [ - "【selected】: Se selezionato 【bool】", - "【onSelected】: Evento di selezione 【Function(bool)】", - "【selectedColor】: Colore dopo la selezione 【Color】", - "【selectedShadowColor】: Colore dell'ombra dopo la selezione 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ja_JP.json deleted file mode 100644 index 5bfbfd28b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "フィルターチップ", - "info": "Chipコンポーネントと似たスタイルで、選択状態の属性と選択イベントを持ちます。選択時には左側のコンポーネントの上層に✔️が表示されます。", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChipが選択イベントを受け入れる", - "desc": [ - "【selected】: 選択されているかどうか 【bool】", - "【onSelected】: 選択イベント 【Function(bool)】", - "【selectedColor】: 選択後の色 【Color】", - "【selectedShadowColor】: 選択後の影の色 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ko_KR.json deleted file mode 100644 index 54b96de4a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "필터 칩", - "info": "Chip 컴포넌트와 유사한 스타일로, 선택 여부 속성과 선택 이벤트를 가지고 있습니다. 선택 시 왼쪽 컴포넌트 상단에 ✔️ 마스크가 적용됩니다.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip 선택 이벤트 수신 가능", - "desc": [ - "【selected】: 선택 여부 【bool】", - "【onSelected】: 선택 이벤트 【Function(bool)】", - "【selectedColor】: 선택 후 색상 【Color】", - "【selectedShadowColor】: 선택 후 그림자 색상 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_pt_PT.json deleted file mode 100644 index 99a05f151..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "Filtro de Chip", - "info": "Estilo semelhante ao componente Chip, com propriedades de seleção e eventos de seleção. Quando selecionado, a camada superior do componente à esquerda será coberta por um ✔️.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip pode aceitar eventos de seleção", - "desc": [ - "【selected】: Se selecionado 【bool】", - "【onSelected】: Evento de seleção 【Function(bool)】", - "【selectedColor】: Cor após seleção 【Color】", - "【selectedShadowColor】: Cor da sombra após seleção 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ru_RU.json deleted file mode 100644 index e6904c931..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "Фильтр-чип", - "info": "Стиль, аналогичный компоненту Chip, с атрибутом выбора и событием выбора. При выборе верхний слой левого компонента будет затенен ✔️.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip может принимать события выбора", - "desc": [ - "【selected】: Выбрано ли 【bool】", - "【onSelected】: Событие выбора 【Function(bool)】", - "【selectedColor】: Цвет после выбора 【Color】", - "【selectedShadowColor】: Цвет тени после выбора 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_zh-CN.json deleted file mode 100644 index 3c4aaf75d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 15, - "name": "FilterChip", - "localName": "过滤小条", - "info": "和Chip组件类似的样式,具有选中与否的属性和选中事件。当选中时左侧组件上层会被✔️遮罩。", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 14, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FilterChip可接受选择事件", - "desc": [ - "【selected】: 是否选择 【bool】", - "【onSelected】: 选择事件 【Function(bool)】", - "【selectedColor】: 选择后的颜色 【Color】", - "【selectedShadowColor】: 选择后的阴影颜色 【Color】," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/node1_base.dart deleted file mode 100644 index ff56da994..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FilterChip/node1_base.dart +++ /dev/null @@ -1,72 +0,0 @@ -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; - -class CustomFilterChip extends StatefulWidget { - const CustomFilterChip({Key? key}) : super(key: key); - - @override - _CustomFilterChipState createState() => _CustomFilterChipState(); -} - -class _CustomFilterChipState extends State { - final Map map = { - 'A': 'Ant', - 'B': 'Bug', - 'C': 'Cat', - 'D': 'Dog', - }; - final List _selected = []; - - @override - Widget build(BuildContext context) { - Color themeColor = Theme.of(context).primaryColor; - return Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Wrap( - children: map.keys.map((key) => _buildChild(themeColor,key)).toList(), - ), - Container( - padding: const EdgeInsets.all(10), - child: Text('您已选择: ${_selected.join(', ')}')), - ], - ); - } - - Padding _buildChild( Color themeColor,String key) { - bool select = _selected.contains(map[key]); - return Padding( - padding: const EdgeInsets.all(4.0), - child: FilterChip( - selectedColor: themeColor, - selectedShadowColor: Colors.blue, - side: BorderSide.none, - shadowColor: themeColor, - pressElevation: 5, - elevation: 2, - avatarBoxConstraints: BoxConstraints( - maxWidth: 22,maxHeight: 22 - ), - checkmarkColor: select?Colors.white:null, - avatar: CircleAvatar( - backgroundColor: select?Colors.blueAccent:null, - child: Text(key,style: TextStyle(fontSize: 12,color: select?Colors.transparent:null),)), - label: Text(map[key]!,style: TextStyle(color: select?Colors.white:null),), - selected: select, - onSelected: (bool value) => _onSelected(value, key), - ), - ); - } - - void _onSelected(bool value, String key) { - setState(() { - if (value) { - _selected.add(map[key]!); - } else { - _selected.removeWhere((name) => name == map[key]); - } - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_de_DE.json deleted file mode 100644 index 5d8b76852..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_de_DE.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "Flacher Button", - "info": "Ein flacher Button ohne Schatten, basierend auf MaterialButton. Alle Eigenschaften ähneln denen von MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlatButton-Klickereignis", - "desc": [ - "【color】: Farbe 【Color】", - "【splashColor】: Wasserwellenfarbe 【Color】", - "【child】: Untergeordnete Komponente 【Widget】", - "【textColor】: Textfarbe der untergeordneten Komponente 【Color】", - "【highlightColor】: Hervorhebungsfarbe beim Langdrücken 【Color】", - "【padding】: Innenabstand 【EdgeInsetsGeometry】", - "【onPressed】: Klickereignis 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'FlatButton wurde in Flutter 3.3 ausgemustert. Der Ersatz ist der ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_en_US.json deleted file mode 100644 index b342c431f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_en_US.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "Flat Button", - "info": "A flat button without shadows, implemented based on MaterialButton, with all properties similar to MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlatButton Click Event", - "desc": [ - "【color】: Color 【Color】", - "【splashColor】: Splash Color 【Color】", - "【child】: Child Widget 【Widget】", - "【textColor】: Text Color of Child Widget 【Color】", - "【highlightColor】: Long Press Highlight Color 【Color】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【onPressed】: Click Event 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'FlatButton was phased out in Flutter 3.3. Its successor is the ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_es_ES.json deleted file mode 100644 index 94f2a9daf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_es_ES.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "Botón Plano", - "info": "Botón plano sin sombra, implementado basado en MaterialButton, todas las propiedades son similares a MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clic de FlatButton", - "desc": [ - "【color】: Color 【Color】", - "【splashColor】: Color de la onda 【Color】", - "【child】: Widget hijo 【Widget】", - "【textColor】: Color del texto del widget hijo 【Color】", - "【highlightColor】: Color de resaltado al mantener presionado 【Color】", - "【padding】: Relleno interno 【EdgeInsetsGeometry】", - "【onPressed】: Evento de clic 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'El botón FlatButton dejó de estar disponible en Flutter 3.3. Su reemplazo es el botón ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_fr_FR.json deleted file mode 100644 index b185806c7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_fr_FR.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "Bouton plat", - "info": "Bouton plat sans ombre, basé sur MaterialButton, toutes les propriétés sont similaires à MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événement de clic de FlatButton", - "desc": [ - "【color】: Couleur 【Color】", - "【splashColor】: Couleur de l'effet de vague 【Color】", - "【child】: Composant enfant 【Widget】", - "【textColor】: Couleur du texte du composant enfant 【Color】", - "【highlightColor】: Couleur de surbrillance lors d'un appui long 【Color】", - "【padding】: Marge intérieure 【EdgeInsetsGeometry】", - "【onPressed】: Événement de clic 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Le bouton FlatButton a quitté la scène historique avec Flutter 3.3. Il est remplacé par le bouton ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_it_IT.json deleted file mode 100644 index 5b0b62b69..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_it_IT.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "Pulsante piatto", - "info": "Pulsante piatto senza ombre, implementato basandosi su MaterialButton, tutte le proprietà sono simili a MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento di clic FlatButton", - "desc": [ - "【color】: Colore 【Color】", - "【splashColor】: Colore effetto ondulazione 【Color】", - "【child】: Componente figlio 【Widget】", - "【textColor】: Colore testo componente figlio 【Color】", - "【highlightColor】: Colore evidenziazione pressione prolungata 【Color】", - "【padding】: Spaziatura interna 【EdgeInsetsGeometry】", - "【onPressed】: Evento clic 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Il pulsante FlatButton è uscito di scena con Flutter 3.3. Il suo sostituto è il pulsante ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ja_JP.json deleted file mode 100644 index 438bf3a76..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ja_JP.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "フラットボタン", - "info": "影のないフラットボタンで、MaterialButtonを基に実装されており、すべてのプロパティはMaterialButtonと類似しています。", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlatButtonクリックイベント", - "desc": [ - "【color】: 色 【Color】", - "【splashColor】: 波紋色 【Color】", - "【child】: 子コンポーネント 【Widget】", - "【textColor】: 子コンポーネントの文字色 【Color】", - "【highlightColor】: 長押しハイライト色 【Color】", - "【padding】: 内側の余白 【EdgeInsetsGeometry】", - "【onPressed】: クリックイベント 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'FlatButton ボタンは Flutter3.3 で歴史の舞台から退きました。代替は ElevatedButton ボタンです。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ko_KR.json deleted file mode 100644 index b862cd0d4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ko_KR.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "평평한 버튼", - "info": "그림자가 없는 평평한 버튼으로, MaterialButton을 기반으로 구현되었으며 모든 속성이 MaterialButton과 유사합니다.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlatButton 클릭 이벤트", - "desc": [ - "【color】: 색상 【Color】", - "【splashColor】: 물결 효과 색상 【Color】", - "【child】: 자식 위젯 【Widget】", - "【textColor】: 자식 위젯 텍스트 색상 【Color】", - "【highlightColor】: 길게 누를 때 강조 색상 【Color】", - "【padding】: 내부 여백 【EdgeInsetsGeometry】", - "【onPressed】: 클릭 이벤트 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'FlatButton 버튼은 Flutter3.3에서 더 이상 사용되지 않습니다. 대체 버튼은 ElevatedButton입니다.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_pt_PT.json deleted file mode 100644 index 2177fd125..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_pt_PT.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "Botão Plano", - "info": "Botão plano sem sombra, implementado com base no MaterialButton, todas as propriedades são semelhantes ao MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de Clique do FlatButton", - "desc": [ - "【color】: Cor 【Color】", - "【splashColor】: Cor do efeito de ondulação 【Color】", - "【child】: Componente filho 【Widget】", - "【textColor】: Cor do texto do componente filho 【Color】", - "【highlightColor】: Cor de destaque ao pressionar 【Color】", - "【padding】: Preenchimento interno 【EdgeInsetsGeometry】", - "【onPressed】: Evento de clique 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'O botão FlatButton foi descontinuado no Flutter 3.3. O substituto é o botão ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ru_RU.json deleted file mode 100644 index 1fd459f24..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_ru_RU.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "Плоская кнопка", - "info": "Плоская кнопка без тени, реализованная на основе MaterialButton, все свойства аналогичны MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Событие нажатия FlatButton", - "desc": [ - "【color】: Цвет 【Color】", - "【splashColor】: Цвол водной ряби 【Color】", - "【child】: Дочерний компонент 【Widget】", - "【textColor】: Цвет текста дочернего компонента 【Color】", - "【highlightColor】: Цвет подсветки при длительном нажатии 【Color】", - "【padding】: Внутренний отступ 【EdgeInsetsGeometry】", - "【onPressed】: Событие нажатия 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Кнопка FlatButton ушла с исторической сцены в Flutter3.3. Ее заменила кнопка ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_zh-CN.json deleted file mode 100644 index acf03901c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/desc_zh-CN.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "id": 25, - "name": "FlatButton", - "localName": "平按钮", - "info": "无阴影的平按钮,基于MaterialButton实现,所有属性和MaterialButton类似。", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 26, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlatButton点击事件", - "desc": [ - "【color】: 颜色 【Color】", - "【splashColor】: 水波纹颜色 【Color】", - "【child】: 子组件 【Widget】", - "【textColor】: 子组件文字颜色 【Color】", - "【highlightColor】: 长按高亮色 【Color】", - "【padding】: 内边距 【EdgeInsetsGeometry】", - "【onPressed】: 点击事件 【Function】", - " ", - "", - "class CustomFlatButton extends StatelessWidget {", - " const CustomFlatButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'FlatButton 按钮于 Flutter3.3 退出历史舞台。取代者为 ElevatedButton 按钮。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return FlatButton(", - " onPressed: ()=>{,", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " child: const Text(\"FlatButton\"),", - " textColor: const Color(0xffFfffff),", - " color: Colors.blue,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/node1_base.dart deleted file mode 100644 index 096d961d4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlatButton/node1_base.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class CustomFlatButton extends StatelessWidget { - const CustomFlatButton({Key? key}) : super(key: key); - - final String info = - 'FlatButton 按钮于 Flutter3.3 退出历史舞台。取代者为 ElevatedButton 按钮。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_de_DE.json deleted file mode 100644 index c88bf31ef..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_de_DE.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "Schwebende Schaltfläche", - "info": "Schwebende Schaltfläche, die normalerweise in Scaffold verwendet wird und an einer bestimmten Position platziert werden kann. Kann ein Unterelement enthalten, empfängt Klicks, und kann Farbe, Form usw. definieren.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FloatingActionButton Klickereignis", - "desc": [ - "【child】: Unterelement 【Widget】", - "【tooltip】: Tooltip-Text bei langem Drücken 【String】", - "【backgroundColor】: Hintergrundfarbe 【Color】", - "【foregroundColor】: Vordergrundfarbe 【Color】", - "【elevation】: Schattentiefe 【double】", - "【onPressed】: Klickereignis 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "mini Eigenschaft", - "desc": [ - "【mini】: Ist es mini 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "shape Eigenschaft", - "desc": [ - "【shape】: Form 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_en_US.json deleted file mode 100644 index 2da1d5461..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_en_US.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "Floating Button", - "info": "Floating button, generally used in Scaffold, can be placed in a specific position. It can contain a child widget, receive clicks, and define colors, shapes, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FloatingActionButton Click Event", - "desc": [ - "【child】: Child widget 【Widget】", - "【tooltip】: Tooltip text when long pressed 【String】", - "【backgroundColor】: Background color 【Color】", - "【foregroundColor】: Foreground color 【Color】", - "【elevation】: Elevation 【double】", - "【onPressed】: Click event 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "mini Property", - "desc": [ - "【mini】: Whether it is mini 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "shape Property", - "desc": [ - "【shape】: Shape 【ShapeBorder】" - ] -} - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_es_ES.json deleted file mode 100644 index 4b951eaba..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_es_ES.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "Botón flotante", - "info": "Botón flotante, generalmente utilizado en Scaffold, se puede colocar en una posición específica. Puede contener un componente secundario, recibir clics, definir colores, formas, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clic de FloatingActionButton", - "desc": [ - "【child】: Componente secundario 【Widget】", - "【tooltip】: Texto de sugerencia al mantener presionado 【String】", - "【backgroundColor】: Color de fondo 【Color】", - "【foregroundColor】: Color de primer plano 【Color】", - "【elevation】: Profundidad de sombra 【double】", - "【onPressed】: Evento de clic 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "Propiedad mini", - "desc": [ - "【mini】: Si es mini 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Propiedad shape", - "desc": [ - "【shape】: Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_fr_FR.json deleted file mode 100644 index b24c5798d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_fr_FR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "Bouton flottant", - "info": "Le bouton flottant, généralement utilisé dans Scaffold, peut être placé à un endroit spécifique. Il peut contenir un composant enfant, recevoir des clics, et définir des couleurs, des formes, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événement de clic du FloatingActionButton", - "desc": [ - "【child】: Composant enfant 【Widget】", - "【tooltip】: Texte d'aide lors d'un appui long 【String】", - "【backgroundColor】: Couleur de fond 【Color】", - "【foregroundColor】: Couleur de premier plan 【Color】", - "【elevation】: Profondeur de l'ombre 【double】", - "【onPressed】: Événement de clic 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "Propriété mini", - "desc": [ - "【mini】: Est-ce un mini bouton 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Propriété de forme", - "desc": [ - "【shape】: Forme 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_it_IT.json deleted file mode 100644 index 8df3b178a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_it_IT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "Pulsante galleggiante", - "info": "Il pulsante galleggiante, generalmente utilizzato in Scaffold, può essere posizionato in una posizione specifica. Può contenere un componente figlio, ricevere clic, definire colori, forme, ecc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento di clic di FloatingActionButton", - "desc": [ - "【child】: Componente figlio 【Widget】", - "【tooltip】: Testo di suggerimento durante la pressione prolungata 【String】", - "【backgroundColor】: Colore di sfondo 【Color】", - "【foregroundColor】: Colore di primo piano 【Color】", - "【elevation】: Profondità dell'ombra 【double】", - "【onPressed】: Evento di clic 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "Proprietà mini", - "desc": [ - "【mini】: Se è mini 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Proprietà shape", - "desc": [ - "【shape】: Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ja_JP.json deleted file mode 100644 index 8155c5657..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ja_JP.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "フローティングボタン", - "info": "フローティングボタンは、一般にScaffold内で使用され、特定の位置に配置できます。子コンポーネントを収容し、クリックを受け取り、色や形状などを定義できます。", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FloatingActionButtonクリックイベント", - "desc": [ - "【child】: 子コンポーネント 【Widget】", - "【tooltip】: 長押し時のヒントテキスト 【String】", - "【backgroundColor】: 背景色 【Color】", - "【foregroundColor】: 前景色 【Color】", - "【elevation】: 影の深さ 【double】", - "【onPressed】: クリックイベント 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "miniプロパティ", - "desc": [ - "【mini】: ミニかどうか 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "shapeプロパティ", - "desc": [ - "【shape】: 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ko_KR.json deleted file mode 100644 index 4626b1fdd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ko_KR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "플로팅 버튼", - "info": "플로팅 버튼은 일반적으로 Scaffold에서 사용되며 특정 위치에 배치할 수 있습니다. 하나의 자식 위젯을 포함할 수 있으며, 클릭 이벤트를 받고 색상, 모양 등을 정의할 수 있습니다.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FloatingActionButton 클릭 이벤트", - "desc": [ - "【child】: 자식 위젯 【Widget】", - "【tooltip】: 길게 누를 때 표시되는 텍스트 【String】", - "【backgroundColor】: 배경색 【Color】", - "【foregroundColor】: 전경색 【Color】", - "【elevation】: 그림자 깊이 【double】", - "【onPressed】: 클릭 이벤트 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "mini 속성", - "desc": [ - "【mini】: 미니 여부 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "shape 속성", - "desc": [ - "【shape】: 모양 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_pt_PT.json deleted file mode 100644 index c49411f06..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_pt_PT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "Botão Flutuante", - "info": "Botão flutuante, geralmente usado em Scaffold, pode ser colocado em uma posição específica. Pode conter um componente filho, receber cliques, e definir cor, forma, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clique do FloatingActionButton", - "desc": [ - "【child】: Componente filho 【Widget】", - "【tooltip】: Texto de dica ao pressionar 【String】", - "【backgroundColor】: Cor de fundo 【Color】", - "【foregroundColor】: Cor de frente 【Color】", - "【elevation】: Profundidade da sombra 【double】", - "【onPressed】: Evento de clique 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "Propriedade mini", - "desc": [ - "【mini】: É mini 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Propriedade shape", - "desc": [ - "【shape】: Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ru_RU.json deleted file mode 100644 index e60f0cb23..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_ru_RU.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "Плавающая кнопка", - "info": "Плавающая кнопка, обычно используется в Scaffold, может быть размещена в определенном месте. Может содержать один дочерний компонент, принимает клики, может определять цвет, форму и т.д.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Событие нажатия FloatingActionButton", - "desc": [ - "【child】: Дочерний компонент 【Widget】", - "【tooltip】: Текст подсказки при долгом нажатии 【String】", - "【backgroundColor】: Цвет фона 【Color】", - "【foregroundColor】: Цвет переднего плана 【Color】", - "【elevation】: Глубина тени 【double】", - "【onPressed】: Событие нажатия 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "Свойство mini", - "desc": [ - "【mini】: Является ли мини 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Свойство shape", - "desc": [ - "【shape】: Форма 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_zh-CN.json deleted file mode 100644 index 71c3705ec..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/desc_zh-CN.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 28, - "name": "FloatingActionButton", - "localName": "浮动按钮", - "info": "浮动按钮,一般用于Scaffold中,可摆放在特定位置。可盛放一个子组件,接收点击、可定义颜色、形状等。", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FloatingActionButton点击事件", - "desc": [ - "【child】: 子组件 【Widget】", - "【tooltip】: 长按时提示文字 【String】", - "【backgroundColor】: 背景色 【Color】", - "【foregroundColor】: 前景色 【Color】", - "【elevation】: 影深 【double】", - "【onPressed】: 点击事件 【Function】" - ] - }, - { - "file": "node2_mini.dart", - "name": "mini属性", - "desc": [ - "【mini】: 是否是迷你 【bool】" - ] - }, - { - "file": "node3_shape.dart", - "name": "shape属性", - "desc": [ - "【shape】: 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node1_base.dart deleted file mode 100644 index e55a46787..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node1_base.dart +++ /dev/null @@ -1,29 +0,0 @@ -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; - -class CustomFAB extends StatelessWidget { - const CustomFAB({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Map data = { - Colors.red: Icons.add, - Colors.blue: Icons.bluetooth, - Colors.green: Icons.android, - }; - return Wrap( - spacing: 20, - children: data.keys - .map((e) => FloatingActionButton( - heroTag: e.toString()+"a", - onPressed: () {}, - backgroundColor: e, - foregroundColor: Colors.white, - child: Icon(data[e]), - tooltip: "android", - elevation: 5, //z-阴影盖度 - )).toList()); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node2_mini.dart b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node2_mini.dart deleted file mode 100644 index 0478fa291..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node2_mini.dart +++ /dev/null @@ -1,31 +0,0 @@ -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - - -import 'package:flutter/material.dart'; - -class MiniFAB extends StatelessWidget { - const MiniFAB({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Map data = { - Colors.red: Icons.add, - Colors.blue: Icons.bluetooth, - Colors.green: Icons.android, - }; - return Wrap( - spacing: 20, - children: data.keys - .map((e) => FloatingActionButton( - heroTag: e.toString()+"b", - onPressed: () {}, - backgroundColor: e, - mini: true, - foregroundColor: Colors.white, - child: Icon(data[e]), - tooltip: "android", - elevation: 5, //z-阴影盖度 - )).toList()); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node3_shape.dart b/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node3_shape.dart deleted file mode 100644 index 4aa0083cf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FloatingActionButton/node3_shape.dart +++ /dev/null @@ -1,57 +0,0 @@ - - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - - -import 'dart:math'; - -import 'package:flutter/material.dart'; -import 'package:widgets/utils/pather.dart'; - -class ShapeFAB extends StatelessWidget { - const ShapeFAB({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Map data = { - Colors.red: Icons.add, - Colors.blue: Icons.bluetooth, - Colors.green: Icons.android, - }; - return Wrap( - spacing: 20, - children: data.keys - .map((e) => FloatingActionButton( - heroTag: e.toString()+"c", - onPressed: () {}, - backgroundColor: e, - shape: StarBorder(), - foregroundColor: Colors.white, - child: Icon(data[e]), - tooltip: "android", - elevation: 5, - )).toList()); - } -} - -/// 边线形状类 -class StarBorder extends ShapeBorder { - @override - EdgeInsetsGeometry get dimensions => EdgeInsets.zero; - - @override - Path getInnerPath(Rect rect, {TextDirection? textDirection}) => Path(); - - @override - Path getOuterPath(Rect rect, {TextDirection? textDirection}) { - return Pather.create.nStarPath(20, 25, 25 * cos((360 / 9 / 2) * pi / 180), - dx: rect.height / 2, dy: rect.width / 2); - } - - @override - void paint(Canvas canvas, Rect rect, {TextDirection? textDirection}) {} - - @override - ShapeBorder scale(double t) => this; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_de_DE.json deleted file mode 100644 index b16aa1cdb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Flutter-Logo", - "info": "Wird verwendet, um die Flutter-Logo-Komponente anzuzeigen. Kann Farbe, Größe, Anzeigemodus usw. definieren. Es ist eine sehr einfache Komponente.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Wird verwendet, um ein FlutterLogo anzuzeigen", - "desc": [ - "【size】 : Größe 【double】", - "【colors】: Farbe 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "Stil wird verwendet, um Text anzuzeigen", - "desc": [ - "【style】 : Stil-3 Arten von Aufzählungen 【FlutterLogoStyle】", - "【textColor】: Textfarbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_en_US.json deleted file mode 100644 index df16eb502..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Flutter Icon", - "info": "Used to display the Flutter icon component. You can define color, size, display mode, and other information. It is a very simple component.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Used to display a FlutterLogo", - "desc": [ - "【size】 : Size 【double】", - "【colors】: Color 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "Style used to display text", - "desc": [ - "【style】 : Style - 3 types of enumeration 【FlutterLogoStyle】", - "【textColor】: Text color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_es_ES.json deleted file mode 100644 index eeb38b9f1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Logotipo de Flutter", - "info": "Se utiliza para mostrar el componente del logotipo de Flutter. Puede definir información como el color, el tamaño, el modo de visualización, etc. Es un componente muy simple.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Se utiliza para mostrar un logotipo de Flutter", - "desc": [ - "【size】 : Tamaño 【double】", - "【colors】: Color 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "Estilo utilizado para mostrar texto", - "desc": [ - "【style】 : Estilo - 3 tipos de enumeración 【FlutterLogoStyle】", - "【textColor】: Color del texto 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_fr_FR.json deleted file mode 100644 index 2f5331ac3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Icône Flutter", - "info": "Utilisé pour afficher le composant d'icône Flutter. Permet de définir des informations telles que la couleur, la taille, le mode d'affichage, etc. C'est un composant très simple.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisé pour afficher un FlutterLogo", - "desc": [ - "【size】 : Taille 【double】", - "【colors】: Couleur 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "Style utilisé pour afficher du texte", - "desc": [ - "【style】 : Style - 3 types d'énumération 【FlutterLogoStyle】", - "【textColor】: Couleur du texte 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_it_IT.json deleted file mode 100644 index 808ae853b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Icona Flutter", - "info": "Utilizzato per mostrare il componente dell'icona Flutter. È possibile definire colore, dimensioni, modalità di visualizzazione, ecc. È un componente molto semplice.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzato per visualizzare un FlutterLogo", - "desc": [ - "【size】 : Dimensione 【double】", - "【colors】: Colore 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "Stile utilizzato per visualizzare il testo", - "desc": [ - "【style】 : Stile - 3 tipi di enumerazione 【FlutterLogoStyle】", - "【textColor】: Colore del testo 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ja_JP.json deleted file mode 100644 index 742935419..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Flutterアイコン", - "info": "Flutterアイコンコンポーネントを表示するために使用されます。色、サイズ、表示モードなどの情報を定義でき、非常にシンプルなコンポーネントです。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlutterLogoを表示するために使用", - "desc": [ - "【size】 : サイズ 【double】", - "【colors】: 色 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "テキストを表示するためのスタイル", - "desc": [ - "【style】 : スタイル-3種類の列挙 【FlutterLogoStyle】", - "【textColor】: テキストの色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ko_KR.json deleted file mode 100644 index b9b2f8db2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Flutter 로고", - "info": "Flutter 로고 컴포넌트를 표시하는 데 사용됩니다. 색상, 크기, 표시 모드 등을 정의할 수 있는 매우 간단한 컴포넌트입니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "FlutterLogo를 표시하는 데 사용", - "desc": [ - "【size】 : 크기 【double】", - "【colors】: 색상 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "텍스트 표시를 위한 스타일", - "desc": [ - "【style】 : 스타일-3가지 열거 【FlutterLogoStyle】", - "【textColor】: 텍스트 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_pt_PT.json deleted file mode 100644 index 74bd56ece..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Ícone do Flutter", - "info": "Usado para exibir o componente de ícone do Flutter. Pode definir cor, tamanho, modo de exibição e outras informações, é um componente muito simples.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Usado para exibir um FlutterLogo", - "desc": [ - "【size】 : Tamanho 【double】", - "【colors】: Cor 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "Estilo usado para exibir texto", - "desc": [ - "【style】 : Estilo - 3 tipos de enumeração 【FlutterLogoStyle】", - "【textColor】: Cor do texto 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ru_RU.json deleted file mode 100644 index d40a8818f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Логотип Flutter", - "info": "Используется для отображения компонента логотипа Flutter. Можно определить цвет, размер, режим отображения и другую информацию. Это очень простой компонент.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Используется для отображения логотипа Flutter", - "desc": [ - "【size】 : Размер 【double】", - "【colors】: Цвет 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "Стиль для отображения текста", - "desc": [ - "【style】 : Стиль-3 типа перечисления 【FlutterLogoStyle】", - "【textColor】: Цвет текста 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_zh-CN.json deleted file mode 100644 index 10eea5bb0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 4, - "name": "FlutterLogo", - "localName": "Flutter图标", - "info": "用于展示Flutter图标组件。可定义颜色、尺寸、展示模式等信息,是一个非常简单的组件。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "用于显示一个FlutterLogo", - "desc": [ - "【size】 : 大小 【double】", - "【colors】: 颜色 【MaterialColor】" - ] - }, - { - "file": "node2_style.dart", - "name": "样式用于显示文字", - "desc": [ - "【style】 : 样式-3种枚举 【FlutterLogoStyle】", - "【textColor】: 文字颜色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/node1_base.dart deleted file mode 100644 index aa5bec8da..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/node1_base.dart +++ /dev/null @@ -1,28 +0,0 @@ - - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -import 'package:flutter/material.dart'; - -class CustomFlutterLogo extends StatelessWidget { - const CustomFlutterLogo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - - Map data = { - Colors.blue:50.0, - Colors.red:60.0, - Colors.green:70.0, - Colors.yellow:80.0, - }; - return Wrap( - children: data.keys - .map((e) => FlutterLogo( - size: data[e], - textColor: e, - )).toList(), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/node2_style.dart b/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/node2_style.dart deleted file mode 100644 index ace614eb5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/FlutterLogo/node2_style.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-26 -/// contact me by email 1981462002@qq.com - -class FlutterLogoWithText extends StatelessWidget { - const FlutterLogoWithText({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - final Map data = { - FlutterLogoStyle.horizontal: Colors.blue, - FlutterLogoStyle.markOnly: Colors.red, - FlutterLogoStyle.stacked: Colors.green, - }; - - return Wrap( - spacing: 20, - children: data.keys - .map((FlutterLogoStyle style) => FlutterLogo( - size: 80, - style: style, - textColor: data[style]!, - )) - .toList(), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_de_DE.json deleted file mode 100644 index 40f67dd96..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_de_DE.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "Gesten-Erkenner", - "info": "Komponente zur Erkennung von Gestenereignissen, kann Klicks, lange Drücke, Doppelklicks, Drücken, Loslassen, Bewegen usw. erkennen und kann Informationen über die Berührungspunkte abrufen. Ein unverzichtbares Werkzeug für zu Hause und unterwegs.", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Ereignisse von GestureDetector", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onTap】 : Klick-Ereignis 【Function()】", - "【onDoubleTap】 : Doppelklick-Ereignis 【GestureTapCallback】", - "【onLongPress】 : Langer Druck-Ereignis 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "Details von GestureDetector", - "desc": [ - "【onTapDown】 : Rückruf beim Drücken 【GestureTapDownCallback】", - "【onTapUp】 : Rückruf beim Loslassen 【GestureTapUpCallback】", - "【onTapCancel】 : Klick abbrechen 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "Pan-Ereignisse von GestureDetector", - "desc": [ - "【onPanDown】 : Rückruf beim Drücken 【GestureDragDownCallback】", - "【onPanEnd】 : Ende des Ziehens 【GestureDragEndCallback】", - "【onPanStart】 : Beginn des Ziehens 【GestureDragStartCallback】", - "【onPanUpdate】 : Aktualisierung des Ziehens 【GestureDragUpdateCallback】", - "【onPanCancel】 : Ziehen abbrechen 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_en_US.json deleted file mode 100644 index 33b508da1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_en_US.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "Gesture Detector", - "info": "A detector for component gesture events, capable of accepting events such as tap, long press, double tap, press, release, move, etc., and can obtain touch information. An essential component for home and travel.", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Events of GestureDetector", - "desc": [ - "【child】 : Child component 【Widget】", - "【onTap】 : Tap event 【Function()】", - "【onDoubleTap】 : Double tap event 【GestureTapCallback】", - "【onLongPress】 : Long press event 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "Details of GestureDetector", - "desc": [ - "【onTapDown】 : Press down callback 【GestureTapDownCallback】", - "【onTapUp】 : Tap release callback 【GestureTapUpCallback】", - "【onTapCancel】 : Tap cancel 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "Pan Events of GestureDetector", - "desc": [ - "【onPanDown】 : Press down callback 【GestureDragDownCallback】", - "【onPanEnd】 : Drag end 【GestureDragEndCallback】", - "【onPanStart】 : Drag start 【GestureDragStartCallback】", - "【onPanUpdate】 : Drag update 【GestureDragUpdateCallback】", - "【onPanCancel】 : Drag cancel 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_es_ES.json deleted file mode 100644 index 25e66c3af..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_es_ES.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "Detector de gestos", - "info": "Detector de eventos de gestos del componente, puede aceptar eventos como clics, pulsaciones largas, doble clic, presionar, soltar, mover, etc., y puede obtener información de los puntos de contacto, un componente esencial para viajes y hogar.", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos básicos de GestureDetector", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onTap】 : Evento de clic 【Function()】", - "【onDoubleTap】 : Evento de doble clic 【GestureTapCallback】", - "【onLongPress】 : Evento de pulsación larga 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "Información detallada de GestureDetector", - "desc": [ - "【onTapDown】 : Callback de presionar 【GestureTapDownCallback】", - "【onTapUp】 : Callback de levantar el clic 【GestureTapUpCallback】", - "【onTapCancel】 : Cancelar clic 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "Eventos Pan de GestureDetector", - "desc": [ - "【onPanDown】 : Callback de presionar 【GestureDragDownCallback】", - "【onPanEnd】 : Fin de arrastre 【GestureDragEndCallback】", - "【onPanStart】 : Inicio de arrastre 【GestureDragStartCallback】", - "【onPanUpdate】 : Actualización de arrastre 【GestureDragUpdateCallback】", - "【onPanCancel】 : Cancelar arrastre 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_fr_FR.json deleted file mode 100644 index 1d3b40aba..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_fr_FR.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "Détecteur de gestes", - "info": "Détecteur d'événements gestuels pour les composants, peut accepter des événements tels que le clic, le maintien, le double-clic, l'appui, le relâchement, le déplacement, et peut obtenir des informations sur les points de contact, un composant essentiel pour les voyages à domicile.", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événements de base de GestureDetector", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onTap】 : Événement de clic 【Function()】", - "【onDoubleTap】 : Événement de double-clic 【GestureTapCallback】", - "【onLongPress】 : Événement de maintien 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "Informations détaillées de GestureDetector", - "desc": [ - "【onTapDown】 : Rappel d'appui 【GestureTapDownCallback】", - "【onTapUp】 : Rappel de relâchement 【GestureTapUpCallback】", - "【onTapCancel】 : Annulation de clic 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "Événements Pan de GestureDetector", - "desc": [ - "【onPanDown】 : Rappel d'appui 【GestureDragDownCallback】", - "【onPanEnd】 : Fin de glissement 【GestureDragEndCallback】", - "【onPanStart】 : Début de glissement 【GestureDragStartCallback】", - "【onPanUpdate】 : Mise à jour de glissement 【GestureDragUpdateCallback】", - "【onPanCancel】 : Annulation de glissement 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_it_IT.json deleted file mode 100644 index 2b481e789..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_it_IT.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "Rilevatore di gesti", - "info": "Rilevatore di eventi gestuali del componente, può accettare eventi come clic, pressione lunga, doppio clic, premuto, rilasciato, spostamento, ecc., e può ottenere informazioni sui punti di contatto, un componente essenziale per viaggi e casa.", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventi di base di GestureDetector", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onTap】 : Evento di clic 【Function()】", - "【onDoubleTap】 : Evento di doppio clic 【GestureTapCallback】", - "【onLongPress】 : Evento di pressione lunga 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "Dettagli di GestureDetector", - "desc": [ - "【onTapDown】 : Callback di pressione 【GestureTapDownCallback】", - "【onTapUp】 : Callback di rilascio del clic 【GestureTapUpCallback】", - "【onTapCancel】 : Annullamento del clic 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "Eventi Pan di GestureDetector", - "desc": [ - "【onPanDown】 : Callback di pressione 【GestureDragDownCallback】", - "【onPanEnd】 : Fine del trascinamento 【GestureDragEndCallback】", - "【onPanStart】 : Inizio del trascinamento 【GestureDragStartCallback】", - "【onPanUpdate】 : Aggiornamento del trascinamento 【GestureDragUpdateCallback】", - "【onPanCancel】 : Annullamento del trascinamento 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ja_JP.json deleted file mode 100644 index 4f3f9f408..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ja_JP.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "ジェスチャー検出器", - "info": "コンポーネントのジェスチャーイベントを検出するデテクターで、クリック、長押し、ダブルクリック、押下、解放、移動などのイベントを受け取り、タッチポイントの情報を取得できます。家庭や旅行に必須のコンポーネントです。", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GestureDetector基本イベント", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onTap】 : クリックイベント 【Function()】", - "【onDoubleTap】 : ダブルクリックイベント 【GestureTapCallback】", - "【onLongPress】 : 長押しイベント 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "GestureDetector詳細情報", - "desc": [ - "【onTapDown】 : 押下コールバック 【GestureTapDownCallback】", - "【onTapUp】 : クリック解放コールバック 【GestureTapUpCallback】", - "【onTapCancel】 : クリックキャンセル 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "GestureDetectorのPanイベント", - "desc": [ - "【onPanDown】 : 押下コールバック 【GestureDragDownCallback】", - "【onPanEnd】 : ドラッグ終了 【GestureDragEndCallback】", - "【onPanStart】 : ドラッグ開始 【GestureDragStartCallback】", - "【onPanUpdate】 : ドラッグ更新 【GestureDragUpdateCallback】", - "【onPanCancel】 : ドラッグキャンセル 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ko_KR.json deleted file mode 100644 index 520768ecd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ko_KR.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "제스처 감지기", - "info": "컴포넌트 제스처 이벤트를 감지하는 장치로, 클릭, 길게 누르기, 더블 클릭, 누르기, 떼기, 이동 등의 이벤트를 받아들일 수 있으며, 접촉점 정보를 얻을 수 있습니다. 집에서 여행할 때 필수 컴포넌트입니다.", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GestureDetector 기본 이벤트", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【onTap】 : 클릭 이벤트 【Function()】", - "【onDoubleTap】 : 더블 클릭 이벤트 【GestureTapCallback】", - "【onLongPress】 : 길게 누르기 이벤트 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "GestureDetector 상세 정보", - "desc": [ - "【onTapDown】 : 누르기 콜백 【GestureTapDownCallback】", - "【onTapUp】 : 클릭 떼기 콜백 【GestureTapUpCallback】", - "【onTapCancel】 : 클릭 취소 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "GestureDetector의 Pan 이벤트", - "desc": [ - "【onPanDown】 : 누르기 콜백 【GestureDragDownCallback】", - "【onPanEnd】 : 드래그 종료 【GestureDragEndCallback】", - "【onPanStart】 : 드래그 시작 【GestureDragStartCallback】", - "【onPanUpdate】 : 드래그 업데이트 【GestureDragUpdateCallback】", - "【onPanCancel】 : 드래그 취소 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_pt_PT.json deleted file mode 100644 index f53b6704f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_pt_PT.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "Detector de Gestos", - "info": "Detector de eventos de gestos do componente, pode aceitar eventos como clique, pressionamento longo, duplo clique, pressionar, soltar, mover, etc., e pode obter informações de toque, um componente essencial para viagens e uso doméstico.", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos Básicos do GestureDetector", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onTap】 : Evento de clique 【Function()】", - "【onDoubleTap】 : Evento de duplo clique 【GestureTapCallback】", - "【onLongPress】 : Evento de pressionamento longo 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "Detalhes do GestureDetector", - "desc": [ - "【onTapDown】 : Callback de pressionar 【GestureTapDownCallback】", - "【onTapUp】 : Callback de soltar o clique 【GestureTapUpCallback】", - "【onTapCancel】 : Cancelamento do clique 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "Eventos de Pan do GestureDetector", - "desc": [ - "【onPanDown】 : Callback de pressionar 【GestureDragDownCallback】", - "【onPanEnd】 : Fim do arrasto 【GestureDragEndCallback】", - "【onPanStart】 : Início do arrasto 【GestureDragStartCallback】", - "【onPanUpdate】 : Atualização do arrasto 【GestureDragUpdateCallback】", - "【onPanCancel】 : Cancelamento do arrasto 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ru_RU.json deleted file mode 100644 index 0ee8016d3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_ru_RU.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "Детектор жестов", - "info": "Детектор событий жестов компонента, который может принимать события, такие как нажатие, долгое нажатие, двойное нажатие, нажатие, отпускание, перемещение и т.д., а также может получать информацию о точках касания. Незаменимый компонент для домашнего использования и путешествий.", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основные события GestureDetector", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onTap】 : Событие нажатия 【Function()】", - "【onDoubleTap】 : Событие двойного нажатия 【GestureTapCallback】", - "【onLongPress】 : Событие долгого нажатия 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "Детальная информация GestureDetector", - "desc": [ - "【onTapDown】 : Обратный вызов нажатия 【GestureTapDownCallback】", - "【onTapUp】 : Обратный вызов отпускания нажатия 【GestureTapUpCallback】", - "【onTapCancel】 : Отмена нажатия 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "События Pan GestureDetector", - "desc": [ - "【onPanDown】 : Обратный вызов нажатия 【GestureDragDownCallback】", - "【onPanEnd】 : Завершение перетаскивания 【GestureDragEndCallback】", - "【onPanStart】 : Начало перетаскивания 【GestureDragStartCallback】", - "【onPanUpdate】 : Обновление перетаскивания 【GestureDragUpdateCallback】", - "【onPanCancel】 : Отмена перетаскивания 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_zh-CN.json deleted file mode 100644 index 483a6bd6b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/desc_zh-CN.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": 146, - "name": "GestureDetector", - "localName": "手势监听器", - "info": "组件手势事件的检测器,可接受点击、长按、双击,按下、松开、移动等事件,并可以获取触点信息,居家旅行必备组件。", - "lever": 5, - "family": 0, - "linkIds": [ - 147, - 150 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GestureDetector基本事件", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onTap】 : 点击事件 【Function()】", - "【onDoubleTap】 : 双击事件 【GestureTapCallback】", - "【onLongPress】 : 长按事件 【GestureLongPressCallback】" - ] - }, - { - "file": "node2_tap.dart", - "name": "GestureDetector详情信息", - "desc": [ - "【onTapDown】 : 按下回调 【GestureTapDownCallback】", - "【onTapUp】 : 点击抬起回调 【GestureTapUpCallback】", - "【onTapCancel】 : 点击取消 【GestureTapCancelCallback】" - ] - }, - { - "file": "node3_pan.dart", - "name": "GestureDetector的Pan事件", - "desc": [ - "【onPanDown】 : 按下回调 【GestureDragDownCallback】", - "【onPanEnd】 : 拖动结束 【GestureDragEndCallback】", - "【onPanStart】 : 开始拖动 【GestureDragStartCallback】", - "【onPanUpdate】 : 拖动更新 【GestureDragUpdateCallback】", - "【onPanCancel】 : 拖动取消 【GestureDragCancelCallback】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node1_base.dart deleted file mode 100644 index b9f20e61b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node1_base.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - -class CustomGestureDetector extends StatefulWidget { - const CustomGestureDetector({Key? key}) : super(key: key); - - @override - _CustomGestureDetectorState createState() => _CustomGestureDetectorState(); -} - -class _CustomGestureDetectorState extends State { - String _info = ''; - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTap: () => setState(() => _info = 'onTap'), - onDoubleTap: () => setState(() => _info = 'onDoubleTap'), - onLongPress: () => setState(() => _info = 'onLongPress'), - child: Container( - alignment: Alignment.center, - width: 300, - height: 300 * 0.4, - color: Colors.grey.withAlpha(33), - child: Text( - _info, - style: const TextStyle(fontSize: 18, color: Colors.blue), - ), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node2_tap.dart b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node2_tap.dart deleted file mode 100644 index c9d42241b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node2_tap.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class TapGestureDetector extends StatefulWidget { - const TapGestureDetector({Key? key}) : super(key: key); - - @override - _TapGestureDetectorState createState() => _TapGestureDetectorState(); -} - -class _TapGestureDetectorState extends State { - String _info = ''; - - @override - Widget build(BuildContext context) { - return GestureDetector( - onTapDown: (detail) => setState(() => _info = - 'onTapDown:\n相对落点:${detail.localPosition}\n绝对落点:${detail.globalPosition}'), - onTapUp: (detail) => setState(() => _info = - 'onTapUp:\n相对落点:${detail.localPosition}\n绝对落点:${detail.globalPosition}'), - onTapCancel: () => setState(() => _info = 'onTapCancel'), - child: Container( - alignment: Alignment.center, - width: 300, - height: 300 * 0.618, - color: Colors.grey.withAlpha(33), - child: Text( - _info, - style: const TextStyle(fontSize: 18, color: Colors.blue), - ), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node3_pan.dart b/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node3_pan.dart deleted file mode 100644 index 34558bb37..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GestureDetector/node3_pan.dart +++ /dev/null @@ -1,42 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class PanGestureDetector extends StatefulWidget { - const PanGestureDetector({Key? key}) : super(key: key); - - @override - _PanGestureDetectorState createState() => _PanGestureDetectorState(); -} - -class _PanGestureDetectorState extends State { - String _info = ''; - - @override - Widget build(BuildContext context) { - return GestureDetector( - onPanDown: (detail) => setState(() => _info = - 'onPanDown:\n相对落点:${detail.localPosition}\n绝对落点:${detail.globalPosition}'), - onPanEnd: (detail) => setState(() => _info = - 'onPanEnd:\n初速度:${detail.primaryVelocity}\n最终速度:${detail.velocity}'), - onPanUpdate: (detail) => setState(() => _info = - 'onPanUpdate:\n相对落点:${detail.localPosition}\n绝对落点:${detail.globalPosition}'), - onPanStart: (detail) => setState(() => _info = - 'onPanStart:\n相对落点:${detail.localPosition}\n绝对落点:${detail.globalPosition}'), - onPanCancel: () => setState(() => _info = 'onTapCancel'), - child: SingleChildScrollView( - child: Container( - alignment: Alignment.center, - width: 300, - height: 300 * 0.618, - color: Colors.grey.withAlpha(33), - child: Text( - _info, - style: const TextStyle(fontSize: 18, color: Colors.blue), - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_de_DE.json deleted file mode 100644 index 5bc18b0ff..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_de_DE.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "Rasterlinien-Komponente", - "info": "Kann eine Komponente aufnehmen und ein Raster darauf zeichnen. Eigenschaften wie Farbe, Linienstärke, Abstand usw. können angegeben werden.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridPager Grundlegende Eigenschaften", - "desc": [ - "【child】: Untergeordnete Komponente 【Widget】", - "【color】: Farbe 【Color】", - "【interval】: Seitenlänge des kleinen Blocks 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "GridPager Unterteilung", - "desc": [ - "【child】: Untergeordnete Komponente 【Widget】", - "【color】: Farbe 【Color】", - "【subdivisions】: Anzahl der Unterblöcke im kleinen Block 【int】", - "【divisions】: Anzahl der Unterteilungen der Unterblöcke im kleinen Block 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_en_US.json deleted file mode 100644 index 6b1cffeec..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_en_US.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "Grid Line Component", - "info": "Can contain a component and draw a grid on it. Properties such as color, line width, spacing, etc., can be specified.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridPager Basic Properties", - "desc": [ - "【child】: Child component 【Widget】", - "【color】: Color 【Color】", - "【interval】: Small block side length 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "GridPager Subdivision", - "desc": [ - "【child】: Child component 【Widget】", - "【color】: Color 【Color】", - "【subdivisions】: Number of sub-blocks in a small block 【int】", - "【divisions】: Number of subdivisions of sub-blocks in a small block 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_es_ES.json deleted file mode 100644 index 82a72db59..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_es_ES.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "Componente de líneas de cuadrícula", - "info": "Puede contener un componente y dibujar una cuadrícula en él. Se pueden especificar propiedades como el color, el ancho de la línea, el espaciado, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propiedades básicas de GridPager", - "desc": [ - "【child】: Componente hijo 【Widget】", - "【color】: Color 【Color】", - "【interval】: Longitud del lado del bloque pequeño 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "Subdivisión de GridPager", - "desc": [ - "【child】: Componente hijo 【Widget】", - "【color】: Color 【Color】", - "【subdivisions】: Número de subbloques en el bloque pequeño 【int】", - "【divisions】: Número de divisiones de los subbloques en el bloque pequeño 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_fr_FR.json deleted file mode 100644 index 04f0e9f20..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_fr_FR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "Composant de grille", - "info": "Peut contenir un composant et dessiner une grille dessus. Peut spécifier des propriétés telles que la couleur, l'épaisseur de la ligne, l'espacement, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propriétés de base de GridPager", - "desc": [ - "【child】: Composant enfant 【Widget】", - "【color】: Couleur 【Color】", - "【interval】: Longueur du côté d'un petit bloc 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "Subdivision de GridPager", - "desc": [ - "【child】: Composant enfant 【Widget】", - "【color】: Couleur 【Color】", - "【subdivisions】: Nombre de sous-blocs dans un petit bloc 【int】", - "【divisions】: Nombre de subdivisions des sous-blocs dans un petit bloc 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_it_IT.json deleted file mode 100644 index 34edfbc1c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_it_IT.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "Componente Griglia", - "info": "Può contenere un componente e disegnare una griglia su di esso. È possibile specificare proprietà come colore, spessore della linea, spaziatura, ecc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Proprietà Base di GridPager", - "desc": [ - "【child】: Componente Figlio 【Widget】", - "【color】: Colore 【Color】", - "【interval】: Lunghezza del lato del blocco 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "Suddivisione di GridPager", - "desc": [ - "【child】: Componente Figlio 【Widget】", - "【color】: Colore 【Color】", - "【subdivisions】: Numero di sotto-blocchi in un blocco 【int】", - "【divisions】: Numero di suddivisioni dei sotto-blocchi in un blocco 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ja_JP.json deleted file mode 100644 index 24f5b37d7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ja_JP.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "グリッド線コンポーネント", - "info": "1つのコンポーネントを収容し、その上にグリッドを描画します。色、線幅、間隔などの属性を指定できます。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridPager 基本属性", - "desc": [ - "【child】: 子コンポーネント 【Widget】", - "【color】: 色 【Color】", - "【interval】: 小片の辺の長さ 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "GridPager 再分割", - "desc": [ - "【child】: 子コンポーネント 【Widget】", - "【color】: 色 【Color】", - "【subdivisions】: 小片中の中片の数 【int】", - "【divisions】: 小片中の中片の分割数 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ko_KR.json deleted file mode 100644 index a961488c0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ko_KR.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "그리드 라인 컴포넌트", - "info": "하나의 컴포넌트를 수용할 수 있으며, 그 위에 그리드를 그립니다. 색상, 선 두께, 간격 등의 속성을 지정할 수 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridPager 기본 속성", - "desc": [ - "【child】: 자식 컴포넌트 【Widget】", - "【color】: 색상 【Color】", - "【interval】: 작은 블록의 변 길이 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "GridPager 재분할", - "desc": [ - "【child】: 자식 컴포넌트 【Widget】", - "【color】: 색상 【Color】", - "【subdivisions】: 작은 블록 내의 하위 블록 개수 【int】", - "【divisions】: 작은 블록 내의 하위 블록 분할 수 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_pt_PT.json deleted file mode 100644 index dfdbfcf8e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_pt_PT.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "Componente de Linhas de Grelha", - "info": "Pode conter um componente, desenhando uma grelha sobre ele. Pode especificar propriedades como cor, largura da linha, espaçamento, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propriedades Básicas do GridPager", - "desc": [ - "【child】: Componente filho 【Widget】", - "【color】: Cor 【Color】", - "【interval】: Comprimento do lado do pequeno bloco 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "Subdivisão do GridPager", - "desc": [ - "【child】: Componente filho 【Widget】", - "【color】: Cor 【Color】", - "【subdivisions】: Número de sub-blocos no pequeno bloco 【int】", - "【divisions】: Número de divisões dos sub-blocos no pequeno bloco 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ru_RU.json deleted file mode 100644 index 39087b7b1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_ru_RU.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "Компонент с сеткой", - "info": "Может содержать один компонент, на котором рисуется сетка. Можно указать такие свойства, как цвет, толщина линий, расстояние и т.д.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основные свойства GridPager", - "desc": [ - "【child】: Дочерний компонент 【Widget】", - "【color】: Цвет 【Color】", - "【interval】: Длина стороны квадрата 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "Разделение GridPager", - "desc": [ - "【child】: Дочерний компонент 【Widget】", - "【color】: Цвет 【Color】", - "【subdivisions】: Количество подблоков в квадрате 【int】", - "【divisions】: Количество разделений подблоков в квадрате 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_zh-CN.json deleted file mode 100644 index 154fe340b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/desc_zh-CN.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "id": 37, - "name": "GridPaper", - "localName": "网格线组件", - "info": "可容纳一个组件,在其上绘制网格。可指定颜色、线宽、间距等属性。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridPager 基础属性", - "desc": [ - "【child】: 子组件 【Widget】", - "【color】: 颜色 【Color】", - "【interval】: 小块边长 【double】" - ] - }, - { - "file": "node2_divisions.dart", - "name": "GridPager 再分割", - "desc": [ - "【child】: 子组件 【Widget】", - "【color】: 颜色 【Color】", - "【subdivisions】: 小块中子块个数 【int】", - "【divisions】: 小块中子块的分割数 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/node1_base.dart deleted file mode 100644 index 173bc587a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/node1_base.dart +++ /dev/null @@ -1,22 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class CustomGridPaper extends StatelessWidget { - const CustomGridPaper({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 200, - height: 100, - child: GridPaper( - color: Colors.red, - interval: 50, - child: Image.asset( - "assets/images/wy_300x200.webp", - fit: BoxFit.cover, - ))); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/node2_divisions.dart b/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/node2_divisions.dart deleted file mode 100644 index 3c7ee0077..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridPaper/node2_divisions.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class DivisionsGridPaper extends StatelessWidget { - const DivisionsGridPaper({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 200, - height: 100, - child: GridPaper( - color: Colors.red, - interval: 50, - divisions: 4, - subdivisions: 4, - child: Image.asset( - "assets/images/wy_300x200.webp", - fit: BoxFit.cover, - ))); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_de_DE.json deleted file mode 100644 index 08ad2e816..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "Rasterkachel", - "info": "Eine allgemeine Listenstruktur, die von Flutter bereitgestellt wird, kann Kopf-, Fuß- und Unterkomponenten angeben und wird häufig in Rasterlisten verwendet.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Die grundlegende Darstellung von GridTile ist wie folgt", - "desc": [ - "【header】: Kopfkomponente 【Widget】", - "【child】: Unterkomponente 【Widget】", - "【footer】: Fußkomponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_en_US.json deleted file mode 100644 index a26935828..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "Grid Tile", - "info": "A general list item structure provided by Flutter, which can specify header, footer, and child components, commonly used in grid lists.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "The basic representation of GridTile is as follows", - "desc": [ - "【header】: Header component 【Widget】", - "【child】: Child component 【Widget】", - "【footer】: Footer component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_es_ES.json deleted file mode 100644 index 80ba2b89b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "Mosaico de cuadrícula", - "info": "Una estructura de lista genérica proporcionada por Flutter que permite especificar componentes de cabecera, pie y secundarios, comúnmente utilizada en listas de cuadrícula.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La representación básica de GridTile es la siguiente", - "desc": [ - "【header】: Componente de cabecera 【Widget】", - "【child】: Componente secundario 【Widget】", - "【footer】: Componente de pie 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_fr_FR.json deleted file mode 100644 index 1cc76759c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "Tuile de grille", - "info": "Une structure d'élément de liste générique fournie par Flutter, permettant de spécifier des composants de tête, de queue et enfants, souvent utilisée dans les listes en grille.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La représentation de base de GridTile est la suivante", - "desc": [ - "【header】: Composant de tête 【Widget】", - "【child】: Composant enfant 【Widget】", - "【footer】: Composant de pied 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_it_IT.json deleted file mode 100644 index 5d5022afa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "Piastrella a griglia", - "info": "Una struttura di voci di lista generica fornita da Flutter, che consente di specificare componenti di testa, coda e figlio, comunemente utilizzata nelle liste a griglia.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La rappresentazione di base di GridTile è la seguente", - "desc": [ - "【header】: componente di testa 【Widget】", - "【child】: componente figlio 【Widget】", - "【footer】: componente di coda 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ja_JP.json deleted file mode 100644 index 9124ce39e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "グリッドタイル", - "info": "Flutterが提供する汎用リストエントリ構造で、ヘッダー、フッター、子コンポーネントを指定でき、グリッドリストでよく使用されます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridTileの基本的な表現は以下の通りです", - "desc": [ - "【header】: ヘッダーコンポーネント 【Widget】", - "【child】: 子コンポーネント 【Widget】", - "【footer】: フッターコンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ko_KR.json deleted file mode 100644 index 9cf8a7905..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "그리드 타일", - "info": "Flutter에서 제공하는 일반적인 목록 항목 구조로, 헤더, 푸터, 자식 컴포넌트를 지정할 수 있으며, 주로 그리드 목록에 사용됩니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridTile의 기본 표현은 다음과 같습니다", - "desc": [ - "【header】: 헤더 컴포넌트 【Widget】", - "【child】: 자식 컴포넌트 【Widget】", - "【footer】: 푸터 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_pt_PT.json deleted file mode 100644 index 06300e45d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "Azulejo de Grade", - "info": "Uma estrutura de item de lista genérica fornecida pelo Flutter, que permite especificar componentes de cabeçalho, rodapé e filhos, comumente usada em listas de grade.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "A apresentação básica do GridTile é a seguinte", - "desc": [ - "【header】: Componente de cabeçalho 【Widget】", - "【child】: Componente filho 【Widget】", - "【footer】: Componente de rodapé 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ru_RU.json deleted file mode 100644 index 6355dbdc7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "Сетка плитки", - "info": "Универсальная структура элемента списка, предоставляемая Flutter, которая позволяет указать компоненты заголовка, нижнего колонтитула и дочерние компоненты, часто используется в списках сеток.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное представление GridTile выглядит следующим образом", - "desc": [ - "【header】: Компонент заголовка 【Widget】", - "【child】: Дочерний компонент 【Widget】", - "【footer】: Компонент нижнего колонтитула 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_zh-CN.json deleted file mode 100644 index b55b947ba..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 21, - "name": "GridTile", - "localName": "网格瓦片", - "info": "Flutter提供的一个通用列表条目结构,可指定头、尾、子组件,常用于网格列表。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridTile的基本表现如下", - "desc": [ - "【header】: 头组件 【Widget】", - "【child】: 子组件 【Widget】", - "【footer】: 脚组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/GridTile/node1_base.dart deleted file mode 100644 index 3d9e7e261..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTile/node1_base.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - -class CustomGridTile extends StatelessWidget { - const CustomGridTile({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 200, - height: 200, - child: GridTile( - header: GridTileBar( - backgroundColor: Colors.blue.withAlpha(120), - trailing: const Icon(Icons.star, color: Colors.red), - leading: const CircleAvatar( - backgroundImage: AssetImage("assets/images/wy_200x300.webp"), - ), - title: const Text("百里·巫缨"), - subtitle: const Text("倾国必倾城"), - ), - child: Opacity( - opacity: 0.5, - child: Image.asset("assets/images/sabar.webp", fit: BoxFit.cover), - ), - footer: const Padding( - padding: EdgeInsets.all(8.0), - child: Text( - "ID:z\$ySX32&29", - style: TextStyle( - shadows: [ - Shadow( - color: Colors.blue, offset: Offset(.1, .1), blurRadius: 2), - ], - ), - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_de_DE.json deleted file mode 100644 index 5948a8547..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "Gitterfliesenkopf", - "info": "Eine allgemeine Kopfstruktur, die von Flutter bereitgestellt wird, mit einer Struktur von links, Mitte und rechts. Komponenten können an den entsprechenden Positionen eingefügt werden, was eine einfache Handhabung spezifischer Einträge ermöglicht. Im Vergleich zu ListTile gibt es weniger Attribute.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Die grundlegende Darstellung von GridTileBar ist wie folgt", - "desc": [ - "【leading】: Linke Komponente 【Widget】", - "【trailing】: Rechte Komponente 【Widget】", - "【title】: Obere mittlere Komponente 【Widget】", - "【subtitle】: Untere mittlere Komponente 【Widget】", - "【backgroundColor】: Hintergrundfarbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_en_US.json deleted file mode 100644 index e9db776e0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "Grid Tile Header", - "info": "A common header structure provided by Flutter, with a left-center-right layout. Components can be inserted into the corresponding positions, making it easy to handle specific items. Compared to ListTile, it has fewer properties.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "The basic representation of GridTileBar is as follows", - "desc": [ - "【leading】: Left component 【Widget】", - "【trailing】: Trailing component 【Widget】", - "【title】: Top middle component 【Widget】", - "【subtitle】: Bottom middle component 【Widget】", - "【backgroundColor】: Background color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_es_ES.json deleted file mode 100644 index 28d06ccef..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "Barra de mosaico de cuadrícula", - "info": "Flutter proporciona una estructura de encabezado común, con una estructura de izquierda, centro y derecha. Se pueden insertar componentes en las posiciones correspondientes, lo que permite manejar elementos específicos de manera conveniente. En comparación con ListTile, tiene menos atributos.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La representación básica de GridTileBar es la siguiente", - "desc": [ - "【leading】: Componente izquierdo 【Widget】", - "【trailing】: Componente derecho 【Widget】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【backgroundColor】: Color de fondo 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_fr_FR.json deleted file mode 100644 index 0cd457192..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "Barre de tuile de grille", - "info": "Une structure de tête générique fournie par Flutter, avec une structure gauche-centre-droite. Des composants peuvent être insérés aux positions correspondantes, ce qui permet de répondre facilement à des entrées spécifiques, avec moins d'attributs que ListTile.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La performance de base de GridTileBar est la suivante", - "desc": [ - "【leading】: Composant gauche 【Widget】", - "【trailing】: Composant de queue 【Widget】", - "【title】: Composant supérieur central 【Widget】", - "【subtitle】: Composant inférieur central 【Widget】", - "【backgroundColor】: Couleur de fond 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_it_IT.json deleted file mode 100644 index c43d5fb52..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "Barra della piastrella della griglia", - "info": "Una struttura di intestazione generica fornita da Flutter, con una struttura sinistra-centro-destra. I componenti possono essere inseriti nelle posizioni corrispondenti, rendendolo molto conveniente per gestire voci specifiche, con meno attributi rispetto a ListTile.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La rappresentazione di base di GridTileBar è la seguente", - "desc": [ - "【leading】: Componente sinistro 【Widget】", - "【trailing】: Componente destro 【Widget】", - "【title】: Componente superiore centrale 【Widget】", - "【subtitle】: Componente inferiore centrale 【Widget】", - "【backgroundColor】: Colore di sfondo 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ja_JP.json deleted file mode 100644 index 334e2d47d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "グリッドタイルバー", - "info": "Flutterが提供する一般的なヘッダー構造で、左中右の構造です。対応する位置にコンポーネントを挿入でき、特定の項目に簡単に対応できます。ListTileと比較して、属性が少ないです。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridTileBarの基本的な表現は以下の通りです", - "desc": [ - "【leading】: 左側のコンポーネント 【Widget】", - "【trailing】: 右側のコンポーネント 【Widget】", - "【title】: 中央上部のコンポーネント 【Widget】", - "【subtitle】: 中央下部のコンポーネント 【Widget】", - "【backgroundColor】: 背景色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ko_KR.json deleted file mode 100644 index 239ae9286..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "그리드 타일 헤더", - "info": "Flutter에서 제공하는 일반적인 헤더 구조로, 왼쪽, 중앙, 오른쪽 구조를 가지고 있습니다. 해당 위치에 컴포넌트를 삽입할 수 있어 특정 항목에 쉽게 대응할 수 있으며, ListTile에 비해 속성이 적습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridTileBar의 기본적인 표현은 다음과 같습니다", - "desc": [ - "【leading】: 왼쪽 컴포넌트 【Widget】", - "【trailing】: 오른쪽 컴포넌트 【Widget】", - "【title】: 중앙 상단 컴포넌트 【Widget】", - "【subtitle】: 중앙 하단 컴포넌트 【Widget】", - "【backgroundColor】: 배경색 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_pt_PT.json deleted file mode 100644 index c130ca60f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "Barra de Azulejo de Grade", - "info": "Uma estrutura de cabeçalho genérica fornecida pelo Flutter, com uma estrutura de esquerda, centro e direita. Componentes podem ser inseridos nas posições correspondentes, o que facilita a adaptação a itens específicos, com menos atributos em comparação com o ListTile.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "A representação básica do GridTileBar é a seguinte", - "desc": [ - "【leading】: Componente esquerdo 【Widget】", - "【trailing】: Componente direito 【Widget】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【backgroundColor】: Cor de fundo 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ru_RU.json deleted file mode 100644 index 39586e3b0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "Сетка плитки", - "info": "Flutter предоставляет универсальную структуру заголовка, которая имеет структуру слева, по центру и справа. В соответствующие позиции можно вставлять компоненты, что позволяет легко адаптироваться к конкретным элементам, по сравнению с ListTile, атрибутов меньше.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное представление GridTileBar выглядит следующим образом", - "desc": [ - "【leading】: Левый компонент 【Widget】", - "【trailing】: Правый компонент 【Widget】", - "【title】: Верхний центральный компонент 【Widget】", - "【subtitle】: Нижний центральный компонент 【Widget】", - "【backgroundColor】: Цвет фона 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_zh-CN.json deleted file mode 100644 index 799a543b2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 20, - "name": "GridTileBar", - "localName": "网格瓦片头", - "info": "Flutter提供的一个通用头结构,为左中右结构。相应位置可插入组件,可以很方便地应对特定的条目,相比ListTile而言,属性较少。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridTileBar的基本表现如下", - "desc": [ - "【leading】: 左侧组件 【Widget】", - "【trailing】: 尾组件 【Widget】", - "【title】: 中间上组件 【Widget】", - "【subtitle】: 中间下组件 【Widget】", - "【backgroundColor】: 背景色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/node1_base.dart deleted file mode 100644 index b5960402e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridTileBar/node1_base.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - - -class CustomGridTileBar extends StatelessWidget { - const CustomGridTileBar({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return GridTileBar( - backgroundColor: Colors.blue.withAlpha(120), - trailing: const Icon(Icons.star, color: Colors.red), - leading: const CircleAvatar( - backgroundImage: AssetImage("assets/images/wy_200x300.webp"), - ), - title: const Text("百里·巫缨"), - subtitle: const Text("倾国必倾城"), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_de_DE.json deleted file mode 100644 index 26249c9a4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_de_DE.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "Rasterkomponente", - "info": "Enthält mehrere Komponenten und organisiert sie in einem Raster. Kann über count, extent, custom, builder usw. konstruiert werden. Hat Eigenschaften wie Innenabstand, ob umgekehrt, Scroll-Controller usw.", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridView.count Konstruktion", - "desc": [ - "【children】 : Liste der Unterkomponenten 【List】", - "【crossAxisCount】 : Anzahl der Boxen pro Zeile in der Hauptachse 【int】", - "【mainAxisSpacing】 : Abstand zwischen den Zeilen in der Hauptachse 【double】", - "【crossAxisSpacing】 : Abstand zwischen den Zeilen in der Querachse 【double】", - "【childAspectRatio】 : Verhältnis von Hauptlänge zu Querlänge der Box 【double】", - "【crossAxisCount】 : Anzahl der Boxen pro Zeile in der Hauptachse 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "GridView Scrollrichtung", - "desc": [ - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【reverse】 : Ob umgekehrt gescrollt wird 【bool】", - "【shrinkWrap】 : Ob bei fehlenden Grenzen umwickelt wird 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "GridView Scrollrichtung", - "desc": [ - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【reverse】 : Ob umgekehrt gescrollt wird 【bool】", - "【shrinkWrap】 : Ob bei fehlenden Grenzen umwickelt wird 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "GridView.builder Konstruktion", - "desc": [ - "【itemCount】 : Anzahl der Einträge 【int】", - "【gridDelegate】 : Rasterdelegat 【SliverGridDelegate】", - "【itemBuilder】 : Eintragskonstruktor 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_en_US.json deleted file mode 100644 index a99d2fdc1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_en_US.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "Grid Component", - "info": "Accommodates multiple components in a grid manner. Can be constructed via count, extent, custom, builder, etc. Has properties such as padding, whether to reverse, scroll controller, etc.", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridView.count Construction", - "desc": [ - "【children】 : List of child components 【List】", - "【crossAxisCount】 : Number of boxes per row on the main axis 【int】", - "【mainAxisSpacing】 : Spacing between rows on the main axis 【double】", - "【crossAxisSpacing】 : Spacing between rows on the cross axis 【double】", - "【childAspectRatio】 : Main length/cross length of the box 【double】", - "【crossAxisCount】 : Number of boxes per row on the main axis 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "GridView Scroll Direction", - "desc": [ - "【scrollDirection】 : Scroll direction 【Axis】", - "【reverse】 : Whether to scroll in reverse 【bool】", - "【shrinkWrap】 : Whether to wrap when there is no boundary 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "GridView Scroll Direction", - "desc": [ - "【scrollDirection】 : Scroll direction 【Axis】", - "【reverse】 : Whether to scroll in reverse 【bool】", - "【shrinkWrap】 : Whether to wrap when there is no boundary 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "GridView.builder Construction", - "desc": [ - "【itemCount】 : Number of items 【int】", - "【gridDelegate】 : Grid delegate 【SliverGridDelegate】", - "【itemBuilder】 : Item builder 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_es_ES.json deleted file mode 100644 index 62b7abda8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_es_ES.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "Componente de cuadrícula", - "info": "Contiene múltiples componentes y los organiza en forma de cuadrícula. Se puede construir mediante count, extent, custom, builder, etc. Tiene propiedades como el relleno interno, si es inverso, el controlador de desplazamiento, etc.", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Construcción de GridView.count", - "desc": [ - "【children】 : Lista de componentes hijos 【List】", - "【crossAxisCount】 : Número de cajas por fila en el eje principal 【int】", - "【mainAxisSpacing】 : Espaciado entre filas en el eje principal 【double】", - "【crossAxisSpacing】 : Espaciado entre filas en el eje transversal 【double】", - "【childAspectRatio】 : Relación entre la longitud principal y la longitud transversal de la caja 【double】", - "【crossAxisCount】 : Número de cajas por fila en el eje principal 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Dirección de desplazamiento de GridView", - "desc": [ - "【scrollDirection】 : Dirección de desplazamiento 【Axis】", - "【reverse】 : Si el desplazamiento es inverso 【bool】", - "【shrinkWrap】 : Si se envuelve cuando no hay límites 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "Dirección de desplazamiento de GridView", - "desc": [ - "【scrollDirection】 : Dirección de desplazamiento 【Axis】", - "【reverse】 : Si el desplazamiento es inverso 【bool】", - "【shrinkWrap】 : Si se envuelve cuando no hay límites 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "Construcción de GridView.builder", - "desc": [ - "【itemCount】 : Número de elementos 【int】", - "【gridDelegate】 : Delegado de cuadrícula 【SliverGridDelegate】", - "【itemBuilder】 : Constructor de elementos 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_fr_FR.json deleted file mode 100644 index 56ed3d5d6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_fr_FR.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "Composant de grille", - "info": "Contient plusieurs composants et les organise en grille. Peut être construit via count, extent, custom, builder, etc. Possède des propriétés telles que la marge intérieure, la direction inverse, le contrôleur de défilement, etc.", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Construction de GridView.count", - "desc": [ - "【children】 : Liste des composants enfants 【List】", - "【crossAxisCount】 : Nombre de boîtes par ligne sur l'axe principal 【int】", - "【mainAxisSpacing】 : Espacement entre les lignes sur l'axe principal 【double】", - "【crossAxisSpacing】 : Espacement entre les lignes sur l'axe transversal 【double】", - "【childAspectRatio】 : Rapport longueur principale/longueur transversale de la boîte 【double】", - "【crossAxisCount】 : Nombre de boîtes par ligne sur l'axe principal 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direction de défilement de GridView", - "desc": [ - "【scrollDirection】 : Direction de défilement 【Axis】", - "【reverse】 : Défilement inversé 【bool】", - "【shrinkWrap】 : Encapsulation lorsque sans limites 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "Direction de défilement de GridView", - "desc": [ - "【scrollDirection】 : Direction de défilement 【Axis】", - "【reverse】 : Défilement inversé 【bool】", - "【shrinkWrap】 : Encapsulation lorsque sans limites 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "Construction de GridView.builder", - "desc": [ - "【itemCount】 : Nombre d'éléments 【int】", - "【gridDelegate】 : Délégué de grille 【SliverGridDelegate】", - "【itemBuilder】 : Constructeur d'éléments 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_it_IT.json deleted file mode 100644 index c3b9b94fa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_it_IT.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "Componente griglia", - "info": "Contiene più componenti e li organizza in una griglia. Può essere costruito utilizzando count, extent, custom, builder, ecc. Ha proprietà come padding, reverse, controller di scorrimento, ecc.", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Costruzione GridView.count", - "desc": [ - "【children】 : Lista di componenti figli 【List】", - "【crossAxisCount】 : Numero di box per riga nell'asse principale 【int】", - "【mainAxisSpacing】 : Spaziatura tra le righe nell'asse principale 【double】", - "【crossAxisSpacing】 : Spaziatura tra le righe nell'asse trasversale 【double】", - "【childAspectRatio】 : Rapporto lunghezza principale/lunghezza trasversale del box 【double】", - "【crossAxisCount】 : Numero di elementi per riga nell'asse principale 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direzione di scorrimento GridView", - "desc": [ - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【reverse】 : Scorrimento inverso 【bool】", - "【shrinkWrap】 : Avvolgere quando non ci sono confini 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "Direzione di scorrimento GridView", - "desc": [ - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【reverse】 : Scorrimento inverso 【bool】", - "【shrinkWrap】 : Avvolgere quando non ci sono confini 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "Costruzione GridView.builder", - "desc": [ - "【itemCount】 : Numero di elementi 【int】", - "【gridDelegate】 : Delegato della griglia 【SliverGridDelegate】", - "【itemBuilder】 : Costruttore di elementi 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ja_JP.json deleted file mode 100644 index c3a5a7a48..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ja_JP.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "グリッドコンポーネント", - "info": "複数のコンポーネントを収容し、グリッド方式で表示します。count、extent、custom、builderなどを使用して構築できます。内側の余白、逆方向かどうか、スクロールコントローラーなどの属性があります。", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridView.count構築", - "desc": [ - "【children】 : 子コンポーネントリスト 【List】", - "【crossAxisCount】 : 主軸一行のボックス数 【int】", - "【mainAxisSpacing】 : 主軸各行の間隔 【double】", - "【crossAxisSpacing】 : 交差軸各行の間隔 【double】", - "【childAspectRatio】 : ボックスの主軸長/交差軸長 【double】", - "【crossAxisCount】 : 主軸一行の数 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "GridViewスクロール方向", - "desc": [ - "【scrollDirection】 : スクロール方向 【Axis】", - "【reverse】 : 逆方向にスクロールするかどうか 【bool】", - "【shrinkWrap】 : 境界がない場合にラップするかどうか 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "GridViewスクロール方向", - "desc": [ - "【scrollDirection】 : スクロール方向 【Axis】", - "【reverse】 : 逆方向にスクロールするかどうか 【bool】", - "【shrinkWrap】 : 境界がない場合にラップするかどうか 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "GridView.builder構築", - "desc": [ - "【itemCount】 : 項目数 【int】", - "【gridDelegate】 : グリッドデリゲート 【SliverGridDelegate】", - "【itemBuilder】 : 項目ビルダー 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ko_KR.json deleted file mode 100644 index 68a10541c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ko_KR.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "그리드 컴포넌트", - "info": "여러 컴포넌트를 포함하고 그리드 방식으로 배치합니다. count, extent, custom, builder 등을 통해 구성할 수 있습니다. 내부 여백, 반대 방향 여부, 스크롤 컨트롤러 등의 속성이 있습니다.", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridView.count 구성", - "desc": [ - "【children】 : 자식 컴포넌트 리스트 【List】", - "【crossAxisCount】 : 주축 한 줄의 box 수 【int】", - "【mainAxisSpacing】 : 주축 각 줄 간격 【double】", - "【crossAxisSpacing】 : 교차축 각 줄 간격 【double】", - "【childAspectRatio】 : box 주 길이/교차축 길이 【double】", - "【crossAxisCount】 : 주축 한 줄 수 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "GridView 스크롤 방향", - "desc": [ - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【reverse】 : 반대 방향 스크롤 여부 【bool】", - "【shrinkWrap】 : 경계 없을 때 감싸기 여부 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "GridView 스크롤 방향", - "desc": [ - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【reverse】 : 반대 방향 스크롤 여부 【bool】", - "【shrinkWrap】 : 경계 없을 때 감싸기 여부 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "GridView.builder 구성", - "desc": [ - "【itemCount】 : 항목 수 【int】", - "【gridDelegate】 : 그리드 대리자 【SliverGridDelegate】", - "【itemBuilder】 : 항목 빌더 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_pt_PT.json deleted file mode 100644 index 21b7bcc52..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_pt_PT.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "Componente de Grade", - "info": "Acomoda vários componentes em formato de grade. Pode ser construído através de count, extent, custom, builder, etc. Possui propriedades como padding, reversão, controlador de deslize, etc.", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Construção de GridView.count", - "desc": [ - "【children】 : Lista de componentes filhos 【List】", - "【crossAxisCount】 : Número de caixas por linha no eixo principal 【int】", - "【mainAxisSpacing】 : Espaçamento entre linhas no eixo principal 【double】", - "【crossAxisSpacing】 : Espaçamento entre linhas no eixo cruzado 【double】", - "【childAspectRatio】 : Proporção do comprimento principal/comprimento do eixo cruzado da caixa 【double】", - "【crossAxisCount】 : Número de caixas por linha no eixo principal 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direção de Deslize do GridView", - "desc": [ - "【scrollDirection】 : Direção de deslize 【Axis】", - "【reverse】 : Se desliza na direção inversa 【bool】", - "【shrinkWrap】 : Se envolve quando não há limites 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "Direção de Deslize do GridView", - "desc": [ - "【scrollDirection】 : Direção de deslize 【Axis】", - "【reverse】 : Se desliza na direção inversa 【bool】", - "【shrinkWrap】 : Se envolve quando não há limites 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "Construção de GridView.builder", - "desc": [ - "【itemCount】 : Número de itens 【int】", - "【gridDelegate】 : Delegado de grade 【SliverGridDelegate】", - "【itemBuilder】 : Construtor de itens 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ru_RU.json deleted file mode 100644 index 4dc330ef2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_ru_RU.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "Сетка", - "info": "Содержит несколько компонентов и отображает их в виде сетки. Может быть создан с использованием count, extent, custom, builder и других методов. Имеет свойства, такие как внутренние отступы, обратное направление, контроллер прокрутки и другие.", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Конструктор GridView.count", - "desc": [ - "【children】 : Список дочерних компонентов 【List】", - "【crossAxisCount】 : Количество элементов в строке по главной оси 【int】", - "【mainAxisSpacing】 : Расстояние между строками по главной оси 【double】", - "【crossAxisSpacing】 : Расстояние между строками по поперечной оси 【double】", - "【childAspectRatio】 : Соотношение длины по главной оси к длине по поперечной оси 【double】", - "【crossAxisCount】 : Количество элементов в строке по главной оси 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Направление прокрутки GridView", - "desc": [ - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【reverse】 : Обратное направление прокрутки 【bool】", - "【shrinkWrap】 : Обертывание при отсутствии границ 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "Направление прокрутки GridView", - "desc": [ - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【reverse】 : Обратное направление прокрутки 【bool】", - "【shrinkWrap】 : Обертывание при отсутствии границ 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "Конструктор GridView.builder", - "desc": [ - "【itemCount】 : Количество элементов 【int】", - "【gridDelegate】 : Делегат сетки 【SliverGridDelegate】", - "【itemBuilder】 : Конструктор элементов 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_zh-CN.json deleted file mode 100644 index 226589b73..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/desc_zh-CN.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "id": 163, - "name": "GridView", - "localName": "网格组件", - "info": "容纳多个组件,并以网格的方式。可以通过count、extent、custom、builder等构造。有内边距、是否反向、滑动控制器等属性。", - "lever": 5, - "family": 0, - "linkIds": [ - 21, - 162 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "GridView.count构造", - "desc": [ - "【children】 : 子组件列表 【List】", - "【crossAxisCount】 : 主轴一行box数量 【int】", - "【mainAxisSpacing】 : 主轴每行间距 【double】", - "【crossAxisSpacing】 : 交叉轴每行间距 【double】", - "【childAspectRatio】 : box主长/交叉轴长 【double】", - "【crossAxisCount】 : 主轴一行数量 【int】" - ] - }, - { - "file": "node2_direction.dart", - "name": "GridView滑动方向", - "desc": [ - "【scrollDirection】 : 滑动方向 【Axis】", - "【reverse】 : 是否反向滑动 【bool】", - "【shrinkWrap】 : 无边界时是否包裹 【bool】" - ] - }, - { - "file": "node3_extend.dart", - "name": "GridView滑动方向", - "desc": [ - "【scrollDirection】 : 滑动方向 【Axis】", - "【reverse】 : 是否反向滑动 【bool】", - "【shrinkWrap】 : 无边界时是否包裹 【bool】" - ] - }, - { - "file": "node4_builder.dart", - "name": "GridView.builder构造", - "desc": [ - "【itemCount】 : 条目数量 【int】", - "【gridDelegate】 : 网格代理 【SliverGridDelegate】", - "【itemBuilder】 : 条目构造器 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/GridView/node1_base.dart deleted file mode 100644 index 475b961f7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/node1_base.dart +++ /dev/null @@ -1,56 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-27 -/// contact me by email 1981462002@qq.com -/// 说明: -// { -// "widgetId": 163, -// "name": 'GridView.count构造', -// "priority": 1, -// "subtitle": -// "【children】 : 子组件列表 【List】\n" -// "【crossAxisCount】 : 主轴一行box数量 【int】\n" -// "【mainAxisSpacing】 : 主轴每行间距 【double】\n" -// "【crossAxisSpacing】 : 交叉轴每行间距 【double】\n" -// "【childAspectRatio】 : box主长/交叉轴长 【double】\n" -// "【crossAxisCount】 : 主轴一行数量 【int】", -// } -class CustomGridView extends StatelessWidget { - const CustomGridView({super.key}); - - List get data => List.generate(128, (i) => Color(0xFFFF00FF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: GridView.count( - crossAxisCount: 4, - mainAxisSpacing: 2, - crossAxisSpacing: 2, - childAspectRatio: 1 / 0.618, - children: data.map((color) => _buildItem(color)).toList(), - ), - ); - } - - Container _buildItem(Color color) => Container( - alignment: Alignment.center, - width: 100, - height: 30, - color: color, - child: Text( - colorString(color), - style: const TextStyle( - color: Colors.white, - shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ], - ), - ), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/node2_direction.dart b/modules/widget_system/widgets/lib/StatelessWidget/GridView/node2_direction.dart deleted file mode 100644 index 32281c038..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/node2_direction.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-27 -/// contact me by email 1981462002@qq.com -/// 说明: - -// { -// "widgetId": 163, -// "name": 'GridView滑动方向', -// "priority": 2, -// "subtitle": -// "【scrollDirection】 : 滑动方向 【Axis】\n" -// "【reverse】 : 是否反向滑动 【bool】\n" -// "【shrinkWrap】 : 无边界时是否包裹 【bool】", -// } -class HorizontalGridView extends StatelessWidget { - const HorizontalGridView({super.key}); - - List get data => List.generate(128, (i) => Color(0xFF00FFFF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: GridView.count( - scrollDirection: Axis.horizontal, - reverse: true, - crossAxisCount: 4, - mainAxisSpacing: 2, - crossAxisSpacing: 2, - childAspectRatio: 0.618, - children: data.map((color) => _buildItem(color)).toList(), - ), - ); - } - - Container _buildItem(Color color) => Container( - alignment: Alignment.center, - width: 100, - height: 30, - color: color, - child: Text( - colorString(color), - style: const TextStyle( - color: Colors.white, - shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ], - ), - ), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/node3_extend.dart b/modules/widget_system/widgets/lib/StatelessWidget/GridView/node3_extend.dart deleted file mode 100644 index c42658dd0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/node3_extend.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-27 -/// contact me by email 1981462002@qq.com -/// 说明: - -// { -// "widgetId": 163, -// "name": 'GridView滑动方向', -// "priority": 2, -// "subtitle": -// "【scrollDirection】 : 滑动方向 【Axis】\n" -// "【reverse】 : 是否反向滑动 【bool】\n" -// "【shrinkWrap】 : 无边界时是否包裹 【bool】", -// } -class ExtentGridView extends StatelessWidget { - const ExtentGridView({super.key}); - - List get data => List.generate(128, (i) => Color(0xFF00FFFF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: GridView.extent( - scrollDirection: Axis.horizontal, - maxCrossAxisExtent: 80.0, - mainAxisSpacing: 2, - crossAxisSpacing: 2, - childAspectRatio: 0.618, - children: data.map((color) => _buildItem(color)).toList(), - ), - ); - } - - Container _buildItem(Color color) => Container( - alignment: Alignment.center, - width: 100, - height: 30, - color: color, - child: Text( - colorString(color), - style: const TextStyle( - color: Colors.white, - shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ], - ), - ), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/GridView/node4_builder.dart b/modules/widget_system/widgets/lib/StatelessWidget/GridView/node4_builder.dart deleted file mode 100644 index a0b2ca75e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/GridView/node4_builder.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-27 -/// contact me by email 1981462002@qq.com -/// 说明: - -// { -// "widgetId": 163, -// "name": 'GridView.builder构造', -// "priority": 4, -// "subtitle": -// "【itemCount】 : 条目数量 【int】\n" -// "【gridDelegate】 : 网格代理 【SliverGridDelegate】\n" -// "【itemBuilder】 : 条目构造器 【IndexedWidgetBuilder】", -// } -class BuilderGridView extends StatelessWidget { - const BuilderGridView({super.key}); - - List get data => List.generate(128, (i) => Color(0xFF33FFF - 2 * i)); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: GridView.builder( - itemCount: data.length, - scrollDirection: Axis.vertical, - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - //网格代理:定交叉轴数目 - crossAxisCount: 4, //条目个数 - mainAxisSpacing: 5, //主轴间距 - crossAxisSpacing: 5, //交叉轴间距 - childAspectRatio: 1 / 0.618), - itemBuilder: (_, int position) => _buildItem(data[position])), - ); - } - - Widget _buildItem(Color color) => Container( - alignment: Alignment.center, - width: 100, - height: 30, - color: color, - child: Text( - colorString(color), - style: const TextStyle( - color: Colors.white, - shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ], - ), - ), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_de_DE.json deleted file mode 100644 index a7e5179a6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "html-Elementansicht", - "info": "Einbetten eines HTML-Elements in die Widget-Hierarchie von Flutter Web.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einführung in HtmlElementView", - "desc": [ - "【child】 : Untergeordnete Komponente 【child】", - "【viewType】 : Eindeutige Kennung des HTML-Elements 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_en_US.json deleted file mode 100644 index 5c1a76ba4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "html element view", - "info": "Embeds an HTML element within the Widget hierarchy of Flutter Web.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to HtmlElementView", - "desc": [ - "【child】 : Child widget 【child】", - "【viewType】 : Unique identifier for the HTML element 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_es_ES.json deleted file mode 100644 index 7411690d0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "vista de elemento html", - "info": "Incrusta un elemento HTML en la jerarquía de Widgets de Flutter Web.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a HtmlElementView", - "desc": [ - "【child】 : componente hijo 【child】", - "【viewType】 : identificador único del elemento html 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_fr_FR.json deleted file mode 100644 index a597b30af..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "vue d'élément html", - "info": "Intégrer un élément HTML dans la hiérarchie des Widgets de Flutter Web.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à HtmlElementView", - "desc": [ - "【child】 : composant enfant 【child】", - "【viewType】 : identifiant unique de l'élément html 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_it_IT.json deleted file mode 100644 index 03d1b1469..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "vista elemento html", - "info": "Incorpora un elemento HTML nella gerarchia dei widget di Flutter Web.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a HtmlElementView", - "desc": [ - "【child】 : componente figlio 【child】", - "【viewType】 : identificatore unico dell'elemento html 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ja_JP.json deleted file mode 100644 index ee3c57dac..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "html エレメントビュー", - "info": "Flutter Web の Widget 階層に HTML エレメントを埋め込みます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "HtmlElementView 紹介", - "desc": [ - "【child】 : 子コンポーネント 【child】", - "【viewType】 : htmlエレメントのユニーク識別子 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ko_KR.json deleted file mode 100644 index 16031534f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "html 요소 뷰", - "info": "Flutter Web의 위젯 계층 구조에 HTML 요소를 삽입합니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "HtmlElementView 소개", - "desc": [ - "【child】 : 자식 위젯 【child】", - "【viewType】 : html 요소 고유 식별자 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_pt_PT.json deleted file mode 100644 index 5b0863d0b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "vista de elemento html", - "info": "Incorpora um elemento HTML na hierarquia de Widgets do Flutter Web.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao HtmlElementView", - "desc": [ - "【child】 : componente filho 【child】", - "【viewType】 : identificador único do elemento html 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ru_RU.json deleted file mode 100644 index 3a7aea921..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "html элемент представления", - "info": "Встраивает HTML-элемент в иерархию виджетов Flutter Web.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в HtmlElementView", - "desc": [ - "【child】 : дочерний компонент 【child】", - "【viewType】 : уникальный идентификатор HTML-элемента 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_zh-CN.json deleted file mode 100644 index 899721db8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 213, - "name": "HtmlElementView", - "localName": "html 元素视图", - "info": "在 Flutter Web 的 Widget 层次结构中嵌入一个 HTML 元素。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "HtmlElementView 介绍", - "desc": [ - "【child】 : 子组件 【child】", - "【viewType】 : html元素唯一表识 【String】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/node1_base.dart deleted file mode 100644 index edbf1324d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/HtmlElementView/node1_base.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/11 -/// contact me by email 1981462002@qq.com -/// - -class HtmlElementViewDemo extends StatelessWidget { - const HtmlElementViewDemo({Key? key}) : super(key: key); - - final String info = - '该组件只能用于 Flutter Web 中,嵌入 Html 元素的较为昂贵。' - '内部基于 PlatformViewLink 和 PlatformViewSurface 组件实现。'; - - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_de_DE.json deleted file mode 100644 index a4370c7c3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "Symbolkomponente", - "info": "Komponente zur Anzeige von Symbolen. Ermöglicht die Angabe von Symbolressourcen, Größe und Farbe. Sehr einfach, aber sehr nützlich", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Zum Anzeigen eines Symbols", - "desc": [ - "【Eingabeparameter】 : Symboldaten 【IconData】", - "【size】 : Größe 【double】", - "【color】: Farbe 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Verwendung von benutzerdefinierten Symbolen", - "desc": [ - "Symbolschriftarten können von der iconfont-Website heruntergeladen und verwendet werden" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_en_US.json deleted file mode 100644 index 8952d62b0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "Icon Component", - "info": "Component for displaying icons. Can specify icon resources, size, and color. Very simple, but very useful", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Used to display an icon", - "desc": [ - "【Input】 : Icon data 【IconData】", - "【size】 : Size 【double】", - "【color】: Color 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Use custom icons", - "desc": [ - "You can download icon fonts from the iconfont website for use" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_es_ES.json deleted file mode 100644 index 5fe3cb435..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "Componente de icono", - "info": "Componente para mostrar iconos. Puede especificar el recurso del icono, el tamaño y el color. Muy simple, pero muy útil", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Para mostrar un icono", - "desc": [ - "【Parámetro de entrada】: Datos del icono 【IconData】", - "【size】: Tamaño 【double】", - "【color】: Color 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Usar iconos personalizados", - "desc": [ - "Puede descargar fuentes de iconos desde el sitio web de iconfont para su uso" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_fr_FR.json deleted file mode 100644 index 280fb11ff..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "Composant d'icône", - "info": "Composant pour l'affichage d'icônes. Permet de spécifier la ressource d'icône, la taille, la couleur. Très simple, mais très utile", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Pour afficher une icône", - "desc": [ - "【Paramètre】 : Données de l'icône 【IconData】", - "【size】 : Taille 【double】", - "【color】: Couleur 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Utiliser des icônes personnalisées", - "desc": [ - "Vous pouvez télécharger des polices d'icônes sur le site iconfont pour les utiliser" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_it_IT.json deleted file mode 100644 index ede363f04..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "Componente Icona", - "info": "Componente per la visualizzazione delle icone. Puoi specificare la risorsa dell'icona, la dimensione e il colore. Molto semplice, ma molto utile", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Per visualizzare un'icona", - "desc": [ - "【Parametro】 : Dati dell'icona 【IconData】", - "【size】 : Dimensione 【double】", - "【color】: Colore 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Usa icone personalizzate", - "desc": [ - "Puoi scaricare i caratteri delle icone dal sito iconfont per usarli" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ja_JP.json deleted file mode 100644 index 74877e3df..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "アイコンコンポーネント", - "info": "アイコン表示用のコンポーネントです。アイコンリソース、サイズ、色を指定できます。非常にシンプルですが、非常に便利です。", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "アイコンを表示するために使用", - "desc": [ - "【引数】: アイコンデータ 【IconData】", - "【size】: サイズ 【double】", - "【color】: 色 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "カスタムアイコンを使用", - "desc": [ - "iconfontウェブサイトからアイコンフォントをダウンロードして使用できます" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ko_KR.json deleted file mode 100644 index f7e049a6f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "아이콘 컴포넌트", - "info": "아이콘 표시를 위한 컴포넌트입니다. 아이콘 리소스, 크기, 색상을 지정할 수 있습니다. 매우 간단하지만 매우 유용합니다.", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "아이콘을 표시하기 위해 사용", - "desc": [ - "【입력 매개변수】 : 아이콘 데이터 【IconData】", - "【size】 : 크기 【double】", - "【color】: 색상 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "사용자 정의 아이콘 사용", - "desc": [ - "iconfont 웹사이트에서 아이콘 폰트를 다운로드하여 사용할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_pt_PT.json deleted file mode 100644 index fb473652d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "Componente de Ícone", - "info": "Componente para exibição de ícones. Pode especificar o recurso do ícone, tamanho e cor. Muito simples, mas muito útil", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Usado para exibir um ícone", - "desc": [ - "【Parâmetro de entrada】: Dados do ícone 【IconData】", - "【size】: Tamanho 【double】", - "【color】: Cor 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Usar ícone personalizado", - "desc": [ - "Pode baixar fontes de ícones no site iconfont para uso" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ru_RU.json deleted file mode 100644 index 9cda5c090..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "Компонент иконки", - "info": "Компонент для отображения иконок. Можно указать ресурс иконки, размер, цвет. Очень просто, но очень полезно", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Для отображения иконки", - "desc": [ - "【Входные параметры】 : данные иконки 【IconData】", - "【size】 : размер 【double】", - "【color】: цвет 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "Использование пользовательской иконки", - "desc": [ - "Можно скачать шрифт иконки с сайта iconfont для использования" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_zh-CN.json deleted file mode 100644 index 6b2847df4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 6, - "name": "Icon", - "localName": "图标组件", - "info": "用于图标显示的组件。可指定图标资源、大小、颜色。非常简单,但是非常用", - "lever": 2, - "family": 0, - "linkIds": [ - 7, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "用于显示一个图标", - "desc": [ - "【入参】 :图标数据 【IconData】", - "【size】 : 大小 【double】", - "【color】: 颜色 【Color】" - ] - }, - { - "file": "node2_diy.dart", - "name": "使用自定义图标", - "desc": [ - "可在iconfont网站中下载图标字体进行使用" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Icon/node1_base.dart deleted file mode 100644 index 4a27ebe70..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/node1_base.dart +++ /dev/null @@ -1,23 +0,0 @@ - - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - - -class CustomIcon extends StatelessWidget { - const CustomIcon({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: const [ - Icon(Icons.send, color: Colors.orange, size: 60), - Icon(Icons.android, color: Colors.green, size: 100), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Icon/node2_diy.dart b/modules/widget_system/widgets/lib/StatelessWidget/Icon/node2_diy.dart deleted file mode 100644 index 0bbffd9c6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Icon/node2_diy.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:app/app.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - - -class MyIcon extends StatelessWidget { - const MyIcon({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - TolyIcon.icon_search, - TolyIcon.icon_star, - TolyIcon.icon_layout, - TolyIcon.icon_star_ok - ].map((e) => Icon( - e, - color: Colors.green, - size: 60, - ),).toList(), - ); - } -} - diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_de_DE.json deleted file mode 100644 index 095206db1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "Symbolschaltfläche", - "info": "Klickbare Symbolschaltfläche, die Symbolinformationen, Innenabstand, Größe, Farbe usw. angeben kann und Klickereignisse empfängt.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconButton-Eigenschaften", - "desc": [ - "【icon】: Symbolkomponente 【Widget】", - "【tooltip】: Langzeitdruck-Hinweistext 【String】", - "【highlightColor】: Langzeitdruck-Highlight-Farbe 【Color】", - "【splashColor】: Wasserwellenfarbe 【Color】", - "【onPressed】: Klickereignis 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_en_US.json deleted file mode 100644 index 8284e78a2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "Icon Button", - "info": "A clickable icon button that can specify icon information, padding, size, color, etc., and receives click events.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconButton Properties", - "desc": [ - "【icon】: Icon component 【Widget】", - "【tooltip】: Long press tooltip text 【String】", - "【highlightColor】: Long press highlight color 【Color】", - "【splashColor】: Ripple color 【Color】", - "【onPressed】: Click event 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_es_ES.json deleted file mode 100644 index 7432a0b41..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "Botón de icono", - "info": "Botón de icono clickeable, puede especificar información del icono, padding, tamaño, color, etc., y recibe eventos de clic.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propiedades de IconButton", - "desc": [ - "【icon】: Componente de icono 【Widget】", - "【tooltip】: Texto de sugerencia al mantener presionado 【String】", - "【highlightColor】: Color de resaltado al mantener presionado 【Color】", - "【splashColor】: Color de la onda 【Color】", - "【onPressed】: Evento de clic 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_fr_FR.json deleted file mode 100644 index 1cbaf9ebc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "Bouton d'icône", - "info": "Bouton d'icône cliquable, peut spécifier des informations d'icône, un remplissage, une taille, une couleur, etc., et reçoit des événements de clic.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propriétés d'IconButton", - "desc": [ - "【icon】: Composant d'icône 【Widget】", - "【tooltip】: Texte d'info-bulle lors d'un appui long 【String】", - "【highlightColor】: Couleur de surbrillance lors d'un appui long 【Color】", - "【splashColor】: Couleur de l'effet de vague 【Color】", - "【onPressed】: Événement de clic 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_it_IT.json deleted file mode 100644 index 317294485..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "Pulsante Icona", - "info": "Pulsante icona cliccabile, può specificare informazioni sull'icona, spaziatura interna, dimensione, colore, ecc., riceve eventi di clic.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Proprietà IconButton", - "desc": [ - "【icon】: Componente icona 【Widget】", - "【tooltip】: Testo di suggerimento per pressione prolungata 【String】", - "【highlightColor】: Colore evidenziato per pressione prolungata 【Color】", - "【splashColor】: Colore effetto ondulazione 【Color】", - "【onPressed】: Evento di clic 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ja_JP.json deleted file mode 100644 index 39425031c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "アイコンボタン", - "info": "クリック可能なアイコンボタンで、アイコン情報、パディング、サイズ、色などを指定でき、クリックイベントを受け取ります。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconButtonプロパティ", - "desc": [ - "【icon】: アイコンコンポーネント 【Widget】", - "【tooltip】: 長押し時のヒントテキスト 【String】", - "【highlightColor】: 長押し時のハイライト色 【Color】", - "【splashColor】: 波紋色 【Color】", - "【onPressed】: クリックイベント 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ko_KR.json deleted file mode 100644 index 69529b1e8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "아이콘 버튼", - "info": "클릭 가능한 아이콘 버튼으로, 아이콘 정보, 패딩, 크기, 색상 등을 지정할 수 있으며 클릭 이벤트를 수신합니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconButton 속성", - "desc": [ - "【icon】: 아이콘 컴포넌트 【Widget】", - "【tooltip】: 길게 누를 때 표시되는 텍스트 【String】", - "【highlightColor】: 길게 누를 때 강조 색상 【Color】", - "【splashColor】: 물결 효과 색상 【Color】", - "【onPressed】: 클릭 이벤트 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_pt_PT.json deleted file mode 100644 index 06ef0ae62..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "Botão de Ícone", - "info": "Botão de ícone clicável, pode especificar informações de ícone, preenchimento interno, tamanho, cor, etc., e recebe eventos de clique.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propriedades do IconButton", - "desc": [ - "【icon】: Componente de ícone 【Widget】", - "【tooltip】: Texto de dica ao pressionar 【String】", - "【highlightColor】: Cor de destaque ao pressionar 【Color】", - "【splashColor】: Cor do efeito de ondulação 【Color】", - "【onPressed】: Evento de clique 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ru_RU.json deleted file mode 100644 index cc27ab35b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "Кнопка с иконкой", - "info": "Кликабельная кнопка с иконкой, можно указать информацию об иконке, внутренние отступы, размер, цвет и т.д., принимает событие клика.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Свойства IconButton", - "desc": [ - "【icon】: Компонент иконки 【Widget】", - "【tooltip】: Текст подсказки при долгом нажатии 【String】", - "【highlightColor】: Цвет подсветки при долгом нажатии 【Color】", - "【splashColor】: Цвет эффекта волны 【Color】", - "【onPressed】: Событие клика 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_zh-CN.json deleted file mode 100644 index b8e6bf4de..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 30, - "name": "IconButton", - "localName": "图标按钮", - "info": "可点击的图标按钮,可指定图标信息、内边距、大小、颜色等,接收点击事件。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "IconButton属性", - "desc": [ - "【icon】: 图标组件 【Widget】", - "【tooltip】: 长按提示文字 【String】", - "【highlightColor】: 长按高亮色 【Color】", - "【splashColor】: 水波纹色 【Color】", - "【onPressed】: 点击事件 【Function】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/IconButton/node1_base.dart deleted file mode 100644 index a3fff8484..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/IconButton/node1_base.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - -class CustomIconButton extends StatelessWidget { - const CustomIconButton({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(8.0), - child: IconButton( - padding: const EdgeInsets.only(), - onPressed: () {}, - icon: const Icon(Icons.android, size: 40, color: Colors.green), - tooltip: "android", - highlightColor: Colors.orangeAccent, - splashColor: Colors.blue, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_de_DE.json deleted file mode 100644 index c9c0f95ae..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "Container", - "info": "Eine Komponente, die ein Bild in eine einfarbige Farbe umwandelt. Größe und Farbe können angegeben werden.", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Wird verwendet, um ein einfarbiges Bild anzuzeigen", - "desc": [ - "【Parameter】: Bildressource 【ImageProvider】", - "【size】: Größe 【double】", - "【color】: Farbe der Markierung 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_en_US.json deleted file mode 100644 index 90f16806e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "Container", - "info": "A component used to turn an image into a solid color. You can specify the size and color.", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Used to display a solid color image", - "desc": [ - "【Parameter】: Image resource 【ImageProvider】", - "【size】: Size 【double】", - "【color】: Badge color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_es_ES.json deleted file mode 100644 index 09e681c8c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "Contenedor", - "info": "Componente utilizado para convertir una imagen en un color sólido. Puede especificar el tamaño y el color.", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Se utiliza para mostrar una imagen de color sólido", - "desc": [ - "【Parámetro de entrada】: Recurso de imagen 【ImageProvider】", - "【size】: Tamaño 【double】", - "【color】: Color de la etiqueta 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_fr_FR.json deleted file mode 100644 index 36b48738e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "Conteneur", - "info": "Un composant pour transformer une image en une couleur unie. Peut spécifier la taille et la couleur.", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisé pour afficher une image en couleur unie", - "desc": [ - "【Paramètre】 : Ressource d'image 【ImageProvider】", - "【size】 : Taille 【double】", - "【color】: Couleur de l'étiquette 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_it_IT.json deleted file mode 100644 index f32ca86ab..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "Contenitore", - "info": "Componente utilizzato per trasformare un'immagine in un colore solido. È possibile specificare dimensioni e colore.", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilizzato per visualizzare un'immagine a tinta unita", - "desc": [ - "【Parametro】 : Risorsa immagine 【ImageProvider】", - "【size】 : Dimensione 【double】", - "【color】: Colore del badge 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ja_JP.json deleted file mode 100644 index f14e7c892..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "コンテナ", - "info": "画像を単色に変えるためのコンポーネントです。サイズや色を指定できます。", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "単色の画像を表示するために使用", - "desc": [ - "【入参】 : 画像リソース 【ImageProvider】", - "【size】 : サイズ 【double】", - "【color】: バッジの色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ko_KR.json deleted file mode 100644 index 11ec8ae0b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "컨테이너", - "info": "이미지를 단색으로 변경하는 컴포넌트입니다. 크기와 색상을 지정할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "단색 이미지를 표시하는 데 사용", - "desc": [ - "【입력 매개변수】 : 이미지 리소스 【ImageProvider】", - "【size】 : 크기 【double】", - "【color】: 배지 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_pt_PT.json deleted file mode 100644 index 7cf446f09..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "Recipiente", - "info": "Componente usado para transformar uma imagem em uma cor sólida. Pode especificar o tamanho e a cor.", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Usado para exibir uma imagem de cor sólida", - "desc": [ - "【Parâmetro de entrada】: Recurso de imagem 【ImageProvider】", - "【size】: Tamanho 【double】", - "【color】: Cor do ícone 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ru_RU.json deleted file mode 100644 index f560ccf04..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "Контейнер", - "info": "Компонент для преобразования изображения в однотонный цвет. Можно указать размер и цвет.", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Используется для отображения однотонного изображения", - "desc": [ - "【Параметр】 : Ресурс изображения 【ImageProvider】", - "【size】 : Размер 【double】", - "【color】: Цвет индикатора 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_zh-CN.json deleted file mode 100644 index f86199f6f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 7, - "name": "ImageIcon", - "localName": "容器", - "info": "用于将一个图片变为纯色的组件。可指定大小、颜色。", - "lever": 1, - "family": 0, - "linkIds": [ - 6, - 30, - 125 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "用于显示一个纯色图片", - "desc": [ - "【入参】 : 图片资源 【ImageProvider】", - "【size】 : 大小 【double】", - "【color】: 角标颜色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/node1_base.dart deleted file mode 100644 index c687766c6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ImageIcon/node1_base.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - -class CustomImageIcon extends StatelessWidget { - const CustomImageIcon({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Map data = { - Colors.blue: 50.0, - Colors.red: 60.0, - Colors.green: 70.0, - Colors.yellow: 80.0, - }; - return Wrap( - spacing: 10, - children: data.keys - .map((e) => ImageIcon( - const AssetImage("assets/images/leaf.webp"), - color: e, - size: data[e], - )) - .toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_de_DE.json deleted file mode 100644 index b6e32c703..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_de_DE.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "Kombinierter Chip", - "info": "Ähnlich wie die Chip-Komponente, integriert Klick-, Lösch- und Auswahlereignisse. Hinweis: Klick- und Auswahlereignisse können nicht gleichzeitig vorhanden sein.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Kann Klick- und Lösch-Ereignisse akzeptieren", - "desc": [ - "【onPressed】: Klick-Ereignis 【Function()】", - "【onDeleted】: Lösch-Ereignis 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Kann Auswahl-Ereignisse akzeptieren", - "desc": [ - "【selected】: Ob ausgewählt 【bool】", - "【onSelected】: Auswahl-Ereignis 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_en_US.json deleted file mode 100644 index 6c0ac259d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_en_US.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "Comprehensive Chip", - "info": "Similar in style to the Chip component, it integrates click, delete, and select events into one. Note: Click event and select event cannot coexist.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Can accept click and delete events", - "desc": [ - "【onPressed】: Click event 【Function()】", - "【onDeleted】: Delete event 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Can accept select event", - "desc": [ - "【selected】: Whether selected 【bool】", - "【onSelected】: Select event 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_es_ES.json deleted file mode 100644 index bf5a73a29..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_es_ES.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "Chip Integrado", - "info": "Estilo similar al componente Chip, integra eventos de clic, eliminación y selección en uno. Nota: Los eventos de clic y selección no pueden coexistir.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Puede aceptar eventos de clic y eliminación", - "desc": [ - "【onPressed】: Evento de clic 【Function()】", - "【onDeleted】: Evento de eliminación 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Puede aceptar eventos de selección", - "desc": [ - "【selected】: Si está seleccionado 【bool】", - "【onSelected】: Evento de selección 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_fr_FR.json deleted file mode 100644 index f4ffd569f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_fr_FR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "Puce Intégrée", - "info": "Un style similaire au composant Chip, intégrant les événements de clic, de suppression et de sélection en un seul. Remarque : les événements de clic et de sélection ne peuvent pas coexister.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Peut accepter les événements de clic et de suppression", - "desc": [ - "【onPressed】: Événement de clic 【Function()】", - "【onDeleted】: Événement de suppression 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Peut accepter l'événement de sélection", - "desc": [ - "【selected】: Est sélectionné 【bool】", - "【onSelected】: Événement de sélection 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_it_IT.json deleted file mode 100644 index dc95c4e49..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_it_IT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "Chip Integrato", - "info": "Stile simile al componente Chip, integrato con eventi di clic, eliminazione e selezione. Nota: gli eventi di clic e selezione non possono coesistere.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Può accettare eventi di clic ed eliminazione", - "desc": [ - "【onPressed】: Evento di clic 【Function()】", - "【onDeleted】: Evento di eliminazione 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Può accettare eventi di selezione", - "desc": [ - "【selected】: Se selezionato 【bool】", - "【onSelected】: Evento di selezione 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ja_JP.json deleted file mode 100644 index 314715264..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ja_JP.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "統合チップ", - "info": "Chipコンポーネントと同様のスタイルで、クリック、削除、選択イベントを統合しています。注意: クリックイベントと選択イベントは同時に存在できません。", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "クリック、削除イベントを受け取ることができます", - "desc": [ - "【onPressed】: クリックイベント 【Function()】", - "【onDeleted】: 削除イベント 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "選択イベントを受け取ることができます", - "desc": [ - "【selected】: 選択されているかどうか 【bool】", - "【onSelected】: 選択イベント 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ko_KR.json deleted file mode 100644 index 63de89c92..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ko_KR.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "종합 칩", - "info": "Chip 컴포넌트와 유사한 스타일로, 클릭, 삭제, 선택 이벤트를 하나로 통합했습니다. 주의: 클릭 이벤트와 선택 이벤트는 동시에 존재할 수 없습니다.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "클릭 및 삭제 이벤트를 수신할 수 있음", - "desc": [ - "【onPressed】: 클릭 이벤트 【Function()】", - "【onDeleted】: 삭제 이벤트 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "선택 이벤트를 수신할 수 있음", - "desc": [ - "【selected】: 선택 여부 【bool】", - "【onSelected】: 선택 이벤트 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_pt_PT.json deleted file mode 100644 index 41eaaf1ba..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_pt_PT.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "Chip Integrado", - "info": "Estilo semelhante ao componente Chip, integra eventos de clique, exclusão e seleção em um só. Nota: os eventos de clique e seleção não podem coexistir.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Pode aceitar eventos de clique e exclusão", - "desc": [ - "【onPressed】: Evento de clique 【Function()】", - "【onDeleted】: Evento de exclusão 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Pode aceitar eventos de seleção", - "desc": [ - "【selected】: Se está selecionado 【bool】", - "【onSelected】: Evento de seleção 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ru_RU.json deleted file mode 100644 index d1eb785ce..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_ru_RU.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "Комплексный чип", - "info": "Стиль, похожий на компонент Chip, объединяет события нажатия, удаления и выбора в одном элементе. Обратите внимание: события нажатия и выбора не могут существовать одновременно.", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Может принимать события нажатия и удаления", - "desc": [ - "【onPressed】: Событие нажатия 【Function()】", - "【onDeleted】: Событие удаления 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Может принимать событие выбора", - "desc": [ - "【selected】: Выбрано ли 【bool】", - "【onSelected】: Событие выбора 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_zh-CN.json deleted file mode 100644 index 9d99ecd40..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/desc_zh-CN.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "id": 14, - "name": "InputChip", - "localName": "综合小条", - "info": "和Chip组件类似的样式,集成了点击、删除、选择事件为一体。注意:点击事件和选择事件不能同时存在。", - "lever": 4, - "family": 0, - "linkIds": [ - 11, - 12, - 13, - 15, - 153 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "可以接受点击、删除事件", - "desc": [ - "【onPressed】: 点击事件 【Function()】", - "【onDeleted】: 删除事件 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "可以接受选中事件", - "desc": [ - "【selected】: 是否选中 【bool】", - "【onSelected】: 选中事件 【Function(bool)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/node1_base.dart deleted file mode 100644 index 3d1161beb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/node1_base.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - -class PressInputChip extends StatefulWidget { - const PressInputChip({Key? key}) : super(key: key); - - @override - _PressInputChipState createState() => _PressInputChipState(); -} - -class _PressInputChipState extends State { - bool _delete = false; - - @override - Widget build(BuildContext context) { - return InputChip( - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(3), - label: Text( - !_delete ? - "This is a InputChip." : - "You are clicked delete icon."), - backgroundColor: Colors.grey.withAlpha(66), - avatar: Image.asset("assets/images/icon_head.webp"), - selectedColor: Colors.orangeAccent.withAlpha(88), - selectedShadowColor: Colors.blue, - shadowColor: Colors.orangeAccent, - elevation: 3, - onPressed: () => Navigator.of(context).pushNamed('AboutMePage'), - onDeleted: () => setState(() => _delete = !_delete)); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/node2_select.dart b/modules/widget_system/widgets/lib/StatelessWidget/InputChip/node2_select.dart deleted file mode 100644 index f19dcb12e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/InputChip/node2_select.dart +++ /dev/null @@ -1,41 +0,0 @@ -import 'package:flutter/material.dart'; - - - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - -class SelectInputChip extends StatefulWidget { - const SelectInputChip({Key? key}) : super(key: key); - - @override - _SelectInputChipState createState() => _SelectInputChipState(); -} - -class _SelectInputChipState extends State { - bool _select = false; - - @override - Widget build(BuildContext context) { - return InputChip( - selected: _select, - padding: const EdgeInsets.all(5), - labelPadding: const EdgeInsets.all(3), - label: const Text("This is a InputChip."), - backgroundColor: Colors.grey.withAlpha(66), - avatar: Image.asset("assets/images/icon_head.webp"), - selectedColor: Colors.orangeAccent.withAlpha(88), - selectedShadowColor: Colors.blue, - shadowColor: Colors.orangeAccent, - elevation: 3, - onDeleted: () => Navigator.of(context).pushNamed('AboutMePage'), - onSelected: (bool value) { - setState(() { - _select = value; - }); - print("onSelected"); - }, - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_de_DE.json deleted file mode 100644 index 483c5b99e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_de_DE.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "Listenkachel", - "info": "Eine allgemeine Listenstruktur, die von Flutter bereitgestellt wird, mit einer Struktur von links, Mitte und rechts. An den entsprechenden Positionen können Komponenten eingefügt werden, was es sehr einfach macht, bestimmte Einträge zu verarbeiten.", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Darstellung von ListTile", - "desc": [ - "【leading】: Linke Komponente 【Widget】", - "【title】: Obere mittlere Komponente 【Widget】", - "【subtitle】: Untere mittlere Komponente 【Widget】", - "【trailing】: Rechte Komponente 【Widget】", - "【contentPadding】: Innenabstand 【EdgeInsetsGeometry】", - "【onLongPress】: Klick-Ereignis 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Auswahl-Effekt und Long-Press-Ereignis von ListTile", - "desc": [ - "【selected】: Ist ausgewählt 【bool】", - "【onTap】: Klick-Ereignis 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Dichte Eigenschaft von ListTile", - "desc": [ - "【dense】: Ist dicht 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_en_US.json deleted file mode 100644 index cb894918e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_en_US.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "List Tile", - "info": "A general list item structure provided by Flutter, which has a left-center-right structure. Components can be inserted at the corresponding positions, making it easy to handle specific items.", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "The basic representation of ListTile is as follows", - "desc": [ - "【leading】: Left component 【Widget】", - "【title】: Top middle component 【Widget】", - "【subtitle】: Bottom middle component 【Widget】", - "【trailing】: Trailing component 【Widget】", - "【contentPadding】: Inner padding 【EdgeInsetsGeometry】", - "【onLongPress】: Click event 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "ListTile selection effect and long press event", - "desc": [ - "【selected】: Whether selected 【bool】", - "【onTap】: Click event 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Dense property of ListTile", - "desc": [ - "【dense】: Whether dense 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_es_ES.json deleted file mode 100644 index 4437361ee..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_es_ES.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "Lista de fichas", - "info": "Una estructura de elementos de lista común proporcionada por Flutter, con una estructura de izquierda, centro y derecha. Se pueden insertar componentes en las posiciones correspondientes, lo que permite manejar elementos específicos de manera conveniente.", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La representación básica de ListTile es la siguiente", - "desc": [ - "【leading】: Componente izquierdo 【Widget】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【trailing】: Componente final 【Widget】", - "【contentPadding】: Relleno interno 【EdgeInsetsGeometry】", - "【onLongPress】: Evento de clic 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Efecto de selección y evento de pulsación prolongada de ListTile", - "desc": [ - "【selected】: Si está seleccionado 【bool】", - "【onTap】: Evento de clic 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propiedad de disposición densa de ListTile", - "desc": [ - "【dense】: Si está en disposición densa 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_fr_FR.json deleted file mode 100644 index dccc7dea7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_fr_FR.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "Tuile de liste", - "info": "Une structure d'élément de liste générique fournie par Flutter, avec une structure gauche-centre-droite. Des composants peuvent être insérés aux positions correspondantes, ce qui permet de répondre facilement à des éléments spécifiques.", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La performance de base de ListTile est la suivante", - "desc": [ - "【leading】: Composant de gauche 【Widget】", - "【title】: Composant du haut au centre 【Widget】", - "【subtitle】: Composant du bas au centre 【Widget】", - "【trailing】: Composant de fin 【Widget】", - "【contentPadding】: Marge intérieure 【EdgeInsetsGeometry】", - "【onLongPress】: Événement de clic 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Effet de sélection et événement de pression longue de ListTile", - "desc": [ - "【selected】: Est sélectionné 【bool】", - "【onTap】: Événement de clic 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propriété de densité de ListTile", - "desc": [ - "【dense】: Est dense 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_it_IT.json deleted file mode 100644 index 282eaca6e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_it_IT.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "Piastrella della lista", - "info": "Una struttura comune per gli elementi della lista fornita da Flutter, con una struttura sinistra-centro-destra. I componenti possono essere inseriti nelle posizioni corrispondenti, rendendo facile adattarsi a elementi specifici.", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La rappresentazione di base di ListTile è la seguente", - "desc": [ - "【leading】: Componente sinistro 【Widget】", - "【title】: Componente superiore centrale 【Widget】", - "【subtitle】: Componente inferiore centrale 【Widget】", - "【trailing】: Componente finale 【Widget】", - "【contentPadding】: Spaziatura interna 【EdgeInsetsGeometry】", - "【onLongPress】: Evento di clic 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Effetto di selezione e evento di pressione prolungata di ListTile", - "desc": [ - "【selected】: Selezionato 【bool】", - "【onTap】: Evento di clic 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Proprietà di disposizione compatta di ListTile", - "desc": [ - "【dense】: Disposizione compatta 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ja_JP.json deleted file mode 100644 index 86428b005..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ja_JP.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "リストタイル", - "info": "Flutterが提供する一般的なリスト項目構造で、左中右の構造を持っています。対応する位置にコンポーネントを挿入することができ、特定の項目に簡単に対応できます。", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListTileの基本的な表現は以下の通りです", - "desc": [ - "【leading】: 左側のコンポーネント 【Widget】", - "【title】: 中央上部のコンポーネント 【Widget】", - "【subtitle】: 中央下部のコンポーネント 【Widget】", - "【trailing】: 末尾のコンポーネント 【Widget】", - "【contentPadding】: 内側の余白 【EdgeInsetsGeometry】", - "【onLongPress】: クリックイベント 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "ListTileの選択効果と長押しイベント", - "desc": [ - "【selected】: 選択されているかどうか 【bool】", - "【onTap】: クリックイベント 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "ListTileの密排属性", - "desc": [ - "【dense】: 密排かどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ko_KR.json deleted file mode 100644 index 3b4aef742..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ko_KR.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "리스트 타일", - "info": "Flutter에서 제공하는 일반적인 리스트 항목 구조로, 왼쪽, 중앙, 오른쪽 구조를 가지고 있습니다. 해당 위치에 컴포넌트를 삽입할 수 있으며, 특정 항목에 쉽게 대응할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListTile의 기본적인 표현은 다음과 같습니다", - "desc": [ - "【leading】: 왼쪽 컴포넌트 【Widget】", - "【title】: 중앙 상단 컴포넌트 【Widget】", - "【subtitle】: 중앙 하단 컴포넌트 【Widget】", - "【trailing】: 오른쪽 컴포넌트 【Widget】", - "【contentPadding】: 내부 여백 【EdgeInsetsGeometry】", - "【onLongPress】: 클릭 이벤트 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "ListTile 선택 효과 및 길게 누르기 이벤트", - "desc": [ - "【selected】: 선택 여부 【bool】", - "【onTap】: 클릭 이벤트 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "ListTile의 밀집 속성", - "desc": [ - "【dense】: 밀집 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_pt_PT.json deleted file mode 100644 index f73b46a75..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_pt_PT.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "Azulejo de Lista", - "info": "Uma estrutura de item de lista genérica fornecida pelo Flutter, com uma estrutura de esquerda, centro e direita. Componentes podem ser inseridos nas posições correspondentes, o que pode lidar facilmente com itens específicos.", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "A apresentação básica do ListTile é a seguinte", - "desc": [ - "【leading】: Componente esquerdo 【Widget】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【trailing】: Componente final 【Widget】", - "【contentPadding】: Preenchimento interno 【EdgeInsetsGeometry】", - "【onLongPress】: Evento de clique 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Efeito de seleção e evento de pressionamento longo do ListTile", - "desc": [ - "【selected】: Se está selecionado 【bool】", - "【onTap】: Evento de clique 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propriedade de densidade do ListTile", - "desc": [ - "【dense】: Se é denso 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ru_RU.json deleted file mode 100644 index 1ae22bb01..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_ru_RU.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "Список плиток", - "info": "Универсальная структура элемента списка, предоставляемая Flutter, имеет структуру слева, по центру и справа. В соответствующие позиции можно вставлять компоненты, что позволяет легко адаптироваться к конкретным элементам.", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное представление ListTile выглядит следующим образом", - "desc": [ - "【leading】: Левый компонент 【Widget】", - "【title】: Верхний центральный компонент 【Widget】", - "【subtitle】: Нижний центральный компонент 【Widget】", - "【trailing】: Правый компонент 【Widget】", - "【contentPadding】: Внутренний отступ 【EdgeInsetsGeometry】", - "【onLongPress】: Событие нажатия 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "Эффект выбора и событие долгого нажатия ListTile", - "desc": [ - "【selected】: Выбрано ли 【bool】", - "【onTap】: Событие нажатия 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Свойство плотного расположения ListTile", - "desc": [ - "【dense】: Плотное ли расположение 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_zh-CN.json deleted file mode 100644 index aee1c8456..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/desc_zh-CN.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 16, - "name": "ListTile", - "localName": "列表瓦片", - "info": "Flutter提供的一个通用列表条目结构,为左中右结构。相应位置可插入组件,可以很方便地应对特定的条目。", - "lever": 3, - "family": 0, - "linkIds": [ - 162, - 334 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListTile的基本表现如下", - "desc": [ - "【leading】: 左侧组件 【Widget】", - "【title】: 中间上组件 【Widget】", - "【subtitle】: 中间下组件 【Widget】", - "【trailing】: 尾组件 【Widget】", - "【contentPadding】: 内边距 【EdgeInsetsGeometry】", - "【onLongPress】: 点击事件 【Function()】" - ] - }, - { - "file": "node2_select.dart", - "name": "ListTile选中效果和长按事件", - "desc": [ - "【selected】: 是否选中 【bool】", - "【onTap】: 点击事件 【Function()】" - ] - }, - { - "file": "node3_dense.dart", - "name": "ListTile的密排属性", - "desc": [ - "【dense】: 是否密排 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node1_base.dart deleted file mode 100644 index 7e7f533d8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node1_base.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomListTile extends StatelessWidget { - const CustomListTile({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: ListTile( - leading: Image.asset("assets/images/icon_head.webp"), - title: const Text("以梦为马"), - subtitle: const Text("海子"), - contentPadding: const EdgeInsets.all(5), - trailing: const Icon(Icons.more_vert), - onLongPress: () => Navigator.of(context).pushNamed('AboutMePage'), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node2_select.dart b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node2_select.dart deleted file mode 100644 index 5262e161b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node2_select.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class SelectListTile extends StatefulWidget { - const SelectListTile({Key? key}) : super(key: key); - - @override - _SelectListTileState createState() => _SelectListTileState(); -} - -class _SelectListTileState extends State { - bool _selected = false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: ListTile( - leading: Image.asset("assets/images/icon_head.webp"), - selected: _selected, - title: const Text("以梦为马"), - subtitle: const Text("海子"), - contentPadding: const EdgeInsets.all(5), - trailing: const Icon(Icons.more_vert), - onTap: () => setState(() => _selected = !_selected), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node3_dense.dart b/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node3_dense.dart deleted file mode 100644 index 347c420d1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListTile/node3_dense.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class DenseListTile extends StatefulWidget { - const DenseListTile({Key? key}) : super(key: key); - - @override - _DenseListTileState createState() => _DenseListTileState(); -} - -class _DenseListTileState extends State { - bool _dense = false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: ListTile( - leading: Image.asset("assets/images/icon_head.webp"), - title: const Text("以梦为马"), - subtitle: const Text("海子"), - selected: false, - contentPadding: const EdgeInsets.all(5), - trailing: const Icon(Icons.more_vert), - dense: _dense, - onTap: () => setState(() => _dense = !_dense), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_de_DE.json deleted file mode 100644 index 0d813b29f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_de_DE.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "Listenkomponente", - "info": "Führende Figur bei der Anzeige von Listen, die mehrere Unterkomponenten aufnehmen kann und über Builder, Separated, Custom usw. konstruiert werden kann. Verfügt über Eigenschaften wie Innenabstand, Umkehrung, Scroll-Controller usw.", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von ListView", - "desc": [ - "【children】 : Liste der Unterkomponenten 【List】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Horizontales Scrollen mit ListView", - "desc": [ - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【reverse】 : Umgekehrtes Scrollen 【bool】", - "【shrinkWrap】 : Bei fehlenden Grenzen einwickeln 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "ListView.builder Konstruktion", - "desc": [ - "【itemCount】 : Anzahl der Elemente 【int】", - "【itemBuilder】 : Elementkonstruktor 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "ListView.separated Konstruktion", - "desc": [ - "【separatorBuilder】 : Elementkonstruktor 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_en_US.json deleted file mode 100644 index df175a347..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_en_US.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "List Component", - "info": "The leader in list display, accommodating multiple sub-components, can be constructed through builder, separated, custom, etc. It has properties such as padding, whether to reverse, scroll controller, etc.", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of ListView", - "desc": [ - "【children】 : List of child components 【List】", - "【padding】 : Padding 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Horizontal Scrolling of ListView", - "desc": [ - "【scrollDirection】 : Scroll direction 【Axis】", - "【reverse】 : Whether to scroll in reverse 【bool】", - "【shrinkWrap】 : Whether to wrap when unbounded 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "ListView.builder Construction", - "desc": [ - "【itemCount】 : Number of items 【int】", - "【itemBuilder】 : Item builder 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "ListView.separated Construction", - "desc": [ - "【separatorBuilder】 : Item builder 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_es_ES.json deleted file mode 100644 index 77fe43fed..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_es_ES.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "Componente de lista", - "info": "El líder en la visualización de listas, capaz de contener múltiples componentes hijos, puede construirse mediante builder, separated, custom, etc. Tiene propiedades como el relleno interno, si es inverso, el controlador de desplazamiento, etc.", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de ListView", - "desc": [ - "【children】 : Lista de componentes hijos 【List】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Desplazamiento horizontal de ListView", - "desc": [ - "【scrollDirection】 : Dirección de desplazamiento 【Axis】", - "【reverse】 : Si el desplazamiento es inverso 【bool】", - "【shrinkWrap】 : Si se envuelve cuando no hay límites 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "Construcción de ListView.builder", - "desc": [ - "【itemCount】 : Número de elementos 【int】", - "【itemBuilder】 : Constructor de elementos 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "Construcción de ListView.separated", - "desc": [ - "【separatorBuilder】 : Constructor de elementos 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_fr_FR.json deleted file mode 100644 index c376522b0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_fr_FR.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "Composant de liste", - "info": "Le leader de l'affichage de listes, contenant plusieurs sous-composants, peut être construit via builder, separated, custom, etc. Possède des attributs tels que le padding, la direction inverse, le contrôleur de défilement, etc.", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de ListView", - "desc": [ - "【children】 : Liste des sous-composants 【List】", - "【padding】 : Padding 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Défilement horizontal de ListView", - "desc": [ - "【scrollDirection】 : Direction de défilement 【Axis】", - "【reverse】 : Défilement inverse 【bool】", - "【shrinkWrap】 : Enveloppe sans limite 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "Construction de ListView.builder", - "desc": [ - "【itemCount】 : Nombre d'éléments 【int】", - "【itemBuilder】 : Constructeur d'éléments 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "Construction de ListView.separated", - "desc": [ - "【separatorBuilder】 : Constructeur d'éléments 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_it_IT.json deleted file mode 100644 index 2e4d601aa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_it_IT.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "Componente Lista", - "info": "Leader nella visualizzazione delle liste, contiene più componenti figli, può essere costruito con builder, separated, custom, ecc. Ha proprietà come padding, reverse, controller di scorrimento, ecc.", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di ListView", - "desc": [ - "【children】 : Lista dei componenti figli 【List】", - "【padding】 : Padding interno 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Scorrimento orizzontale di ListView", - "desc": [ - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【reverse】 : Scorrimento inverso 【bool】", - "【shrinkWrap】 : Avvolgere quando non ci sono confini 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "Costruzione di ListView.builder", - "desc": [ - "【itemCount】 : Numero di elementi 【int】", - "【itemBuilder】 : Costruttore di elementi 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "Costruzione di ListView.separated", - "desc": [ - "【separatorBuilder】 : Costruttore di elementi 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ja_JP.json deleted file mode 100644 index 6b1e00e9b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ja_JP.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "リストコンポーネント", - "info": "リスト表示のリーダーであり、複数の子コンポーネントを収容し、builder、separated、customなどを介して構築できます。内側の余白、反転の有無、スクロールコントローラーなどの属性があります。", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListViewの基本使用", - "desc": [ - "【children】 : 子コンポーネントリスト 【List】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "ListViewの横方向スクロール", - "desc": [ - "【scrollDirection】 : スクロール方向 【Axis】", - "【reverse】 : 反転スクロールの有無 【bool】", - "【shrinkWrap】 : 境界がない場合にラップするかどうか 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "ListView.builderの構築", - "desc": [ - "【itemCount】 : アイテムの数 【int】", - "【itemBuilder】 : アイテムビルダー 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "ListView.separatedの構築", - "desc": [ - "【separatorBuilder】 : アイテムビルダー 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ko_KR.json deleted file mode 100644 index 3eea3377d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ko_KR.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "리스트 컴포넌트", - "info": "리스트 표시의 선두주자로, 여러 하위 컴포넌트를 수용할 수 있으며 builder, separated, custom 등을 통해 구성할 수 있습니다. 내부 여백, 반대 방향 여부, 스크롤 컨트롤러 등의 속성이 있습니다.", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListView 기본 사용", - "desc": [ - "【children】 : 하위 컴포넌트 리스트 【List】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "ListView 가로 스크롤", - "desc": [ - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【reverse】 : 반대 방향 스크롤 여부 【bool】", - "【shrinkWrap】 : 경계가 없을 때 감싸기 여부 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "ListView.builder 구성", - "desc": [ - "【itemCount】 : 항목 개수 【int】", - "【itemBuilder】 : 항목 빌더 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "ListView.separated 구성", - "desc": [ - "【separatorBuilder】 : 항목 빌더 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_pt_PT.json deleted file mode 100644 index 695d74854..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_pt_PT.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "Componente de Lista", - "info": "O líder na exibição de listas, acomoda vários subcomponentes, pode ser construído através de builder, separated, custom, etc. Possui atributos como padding, reversão, controlador de deslizamento, etc.", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do ListView", - "desc": [ - "【children】 : Lista de subcomponentes 【List】", - "【padding】 : Padding 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Deslizamento horizontal do ListView", - "desc": [ - "【scrollDirection】 : Direção de deslizamento 【Axis】", - "【reverse】 : Deslizamento reverso 【bool】", - "【shrinkWrap】 : Envolver quando sem limites 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "Construção do ListView.builder", - "desc": [ - "【itemCount】 : Número de itens 【int】", - "【itemBuilder】 : Construtor de itens 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "Construção do ListView.separated", - "desc": [ - "【separatorBuilder】 : Construtor de itens 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ru_RU.json deleted file mode 100644 index 5999aa8ef..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_ru_RU.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "Компонент списка", - "info": "Лидер в отображении списков, вмещает несколько дочерних компонентов, может быть построен с помощью builder, separated, custom и других. Имеет такие свойства, как внутренние отступы, обратное направление, контроллер прокрутки и другие.", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование ListView", - "desc": [ - "【children】 : Список дочерних компонентов 【List】", - "【padding】 : Внутренние отступы 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Горизонтальная прокрутка ListView", - "desc": [ - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【reverse】 : Обратное направление прокрутки 【bool】", - "【shrinkWrap】 : Обернуть ли при отсутствии границ 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "Конструкция ListView.builder", - "desc": [ - "【itemCount】 : Количество элементов 【int】", - "【itemBuilder】 : Конструктор элементов 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "Конструкция ListView.separated", - "desc": [ - "【separatorBuilder】 : Конструктор элементов 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_zh-CN.json deleted file mode 100644 index c3e9400b1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/desc_zh-CN.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "id": 162, - "name": "ListView", - "localName": "列表组件", - "info": "列表显示的领军人物,容纳多个子组件,可以通过builder、separated、custom等构造。有内边距、是否反向、滑动控制器等属性。", - "lever": 5, - "family": 0, - "linkIds": [ - 16, - 163 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ListView基本使用", - "desc": [ - "【children】 : 子组件列表 【List】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "ListView横向滑动", - "desc": [ - "【scrollDirection】 : 滑动方向 【Axis】", - "【reverse】 : 是否反向滑动 【bool】", - "【shrinkWrap】 : 无边界时是否包裹 【bool】" - ] - }, - { - "file": "node3_builder.dart", - "name": "ListView.builder构造", - "desc": [ - "【itemCount】 : 条目个数 【int】", - "【itemBuilder】 : 条目构造器 【IndexedWidgetBuilder】" - ] - }, - { - "file": "node4_separated.dart", - "name": "ListView.separated构造", - "desc": [ - "【separatorBuilder】 : 条目构造器 【IndexedWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/ListView/node1_base.dart deleted file mode 100644 index a6c2a115c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/node1_base.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-27 -/// contact me by email 1981462002@qq.com - -class CustomListView extends StatelessWidget { - const CustomListView({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - TextStyle get textStyle => const TextStyle( - color: Colors.white, - shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ], - ); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ListView( - padding: const EdgeInsets.symmetric(horizontal: 5), - children: data - .map((color) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - )) - .toList(), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/node2_direction.dart b/modules/widget_system/widgets/lib/StatelessWidget/ListView/node2_direction.dart deleted file mode 100644 index ff9458e07..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/node2_direction.dart +++ /dev/null @@ -1,55 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class HorizontalListView extends StatelessWidget { - const HorizontalListView({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - TextStyle get textStyle => const TextStyle( - color: Colors.white, - shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ], - ); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ListView( - reverse: true, - shrinkWrap: true, - scrollDirection: Axis.horizontal, - children: data - .map((color) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - )) - .toList(), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/node3_builder.dart b/modules/widget_system/widgets/lib/StatelessWidget/ListView/node3_builder.dart deleted file mode 100644 index b479f73fc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/node3_builder.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class BuilderListView extends StatelessWidget { - const BuilderListView({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ListView.builder( - itemCount: data.length, - itemBuilder: (context, index) => _buildItem(data[index]), - ), - ); - } - - TextStyle get textStyle => const TextStyle( - color: Colors.white, - shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ], - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - Widget _buildItem(Color color) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ListView/node4_separated.dart b/modules/widget_system/widgets/lib/StatelessWidget/ListView/node4_separated.dart deleted file mode 100644 index 8ccca75a9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ListView/node4_separated.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class SeparatedListView extends StatelessWidget { - const SeparatedListView({super.key}); - - List get data => [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: ListView.separated( - separatorBuilder: (context, index) => const Divider( - thickness: 1, - height: 1, - color: Colors.orange, - ), - itemCount: data.length, - itemBuilder: (context, index) => _buildItem(data[index]), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; - - TextStyle get textStyle => const TextStyle( - color: Colors.white, - shadows: [ - Shadow(color: Colors.black, offset: Offset(.5, .5), blurRadius: 2) - ], - ); - - Widget _buildItem(Color color) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - ); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_de_DE.json deleted file mode 100644 index 2ade155c9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "Ereignis-Listener", - "info": "Der Listener für Komponentenereignisse kann Ereignisse wie Drücken, Loslassen, Bewegen, Abbrechen usw. akzeptieren. Im Vergleich zu GestureDetector ist es primitiver und kann mehr Informationen liefern.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Listener-Ereignisse", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onPointerDown】 : Drücken-Ereignis 【Function(PointerDownEvent)】", - "【onPointerMove】 : Bewegen-Ereignis 【Function(PointerMoveEvent)】", - "【onPointerMove】 : Loslassen-Ereignis 【Function(PointerUpEvent)】", - "【onPointerCancel】 : Abbrechen-Ereignis 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_en_US.json deleted file mode 100644 index 143fa9e1a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "Event Listener", - "info": "A listener for component events, which can accept events such as press, release, move, cancel, etc. It is more primitive compared to GestureDetector and can obtain more information.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Events of Listener", - "desc": [ - "【child】 : Child component 【Widget】", - "【onPointerDown】 : Press event 【Function(PointerDownEvent)】", - "【onPointerMove】 : Move event 【Function(PointerMoveEvent)】", - "【onPointerMove】 : Release event 【Function(PointerUpEvent)】", - "【onPointerCancel】 : Cancel event 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_es_ES.json deleted file mode 100644 index a601b4c23..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "Escuchador de eventos", - "info": "Escuchador de eventos de componentes, puede aceptar eventos como presionar, soltar, mover, cancelar, etc. Es más primitivo en comparación con GestureDetector y puede obtener más información.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos básicos de Listener", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onPointerDown】 : Evento de presionar 【Function(PointerDownEvent)】", - "【onPointerMove】 : Evento de mover 【Function(PointerMoveEvent)】", - "【onPointerMove】 : Evento de soltar 【Function(PointerUpEvent)】", - "【onPointerCancel】 : Evento de cancelar 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_fr_FR.json deleted file mode 100644 index 9fc559376..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "Écouteur d'événements", - "info": "Un écouteur d'événements pour les composants, capable de recevoir des événements tels que l'appui, le relâchement, le déplacement et l'annulation. Plus primitif que GestureDetector, il permet d'obtenir plus d'informations.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événements de base de Listener", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onPointerDown】 : Événement d'appui 【Function(PointerDownEvent)】", - "【onPointerMove】 : Événement de déplacement 【Function(PointerMoveEvent)】", - "【onPointerMove】 : Événement de relâchement 【Function(PointerUpEvent)】", - "【onPointerCancel】 : Événement d'annulation 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_it_IT.json deleted file mode 100644 index 727234e7e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "Ascoltatore di eventi", - "info": "Un ascoltatore di eventi del componente, può accettare eventi come premere, rilasciare, muovere, annullare, ecc. Rispetto a GestureDetector è più primitivo e può ottenere più informazioni.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventi di base di Listener", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onPointerDown】 : Evento di pressione 【Function(PointerDownEvent)】", - "【onPointerMove】 : Evento di movimento 【Function(PointerMoveEvent)】", - "【onPointerMove】 : Evento di rilascio 【Function(PointerUpEvent)】", - "【onPointerCancel】 : Evento di annullamento 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ja_JP.json deleted file mode 100644 index bed58802a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "イベントリスナー", - "info": "コンポーネントイベントのリスナーで、押下、離す、移動、キャンセルなどのイベントを受け取ることができます。GestureDetectorと比較して原始的で、より多くの情報を取得できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Listener基本イベント", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onPointerDown】 : 押下イベント 【Function(PointerDownEvent)】", - "【onPointerMove】 : 移動イベント 【Function(PointerMoveEvent)】", - "【onPointerMove】 : 離すイベント 【Function(PointerUpEvent)】", - "【onPointerCancel】 : キャンセルイベント 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ko_KR.json deleted file mode 100644 index 51d4280fa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "이벤트 리스너", - "info": "컴포넌트 이벤트의 리스너로, 누름, 놓음, 이동, 취소 등의 이벤트를 수신할 수 있습니다. GestureDetector보다 원시적이며, 더 많은 정보를 얻을 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Listener 기본 이벤트", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【onPointerDown】 : 누름 이벤트 【Function(PointerDownEvent)】", - "【onPointerMove】 : 이동 이벤트 【Function(PointerMoveEvent)】", - "【onPointerMove】 : 놓음 이벤트 【Function(PointerUpEvent)】", - "【onPointerCancel】 : 취소 이벤트 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_pt_PT.json deleted file mode 100644 index 9902d2163..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "Ouvinte de Eventos", - "info": "Ouvinte de eventos do componente, pode aceitar eventos como pressionar, soltar, mover, cancelar, etc. Comparado ao GestureDetector, é mais primitivo e pode obter mais informações.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Eventos Básicos do Listener", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onPointerDown】 : Evento de pressionar 【Function(PointerDownEvent)】", - "【onPointerMove】 : Evento de mover 【Function(PointerMoveEvent)】", - "【onPointerMove】 : Evento de soltar 【Function(PointerUpEvent)】", - "【onPointerCancel】 : Evento de cancelar 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ru_RU.json deleted file mode 100644 index 2a43cf615..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "Слушатель событий", - "info": "Слушатель событий компонента, который может принимать события нажатия, отпускания, перемещения, отмены и т.д. Более примитивен, чем GestureDetector, но предоставляет больше информации.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основные события Listener", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onPointerDown】 : Событие нажатия 【Function(PointerDownEvent)】", - "【onPointerMove】 : Событие перемещения 【Function(PointerMoveEvent)】", - "【onPointerMove】 : Событие отпускания 【Function(PointerUpEvent)】", - "【onPointerCancel】 : Событие отмены 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_zh-CN.json deleted file mode 100644 index 8053c35af..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 147, - "name": "Listener", - "localName": "事件监听器", - "info": "组件事件的监听器,可接受按下、松开、移动、取消等事件。较GestureDetector比较原始,可获取的信息也更多。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Listener基本事件", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onPointerDown】 : 按下事件 【Function(PointerDownEvent)】", - "【onPointerMove】 : 移动事件 【Function(PointerMoveEvent)】", - "【onPointerMove】 : 抬起事件 【Function(PointerUpEvent)】", - "【onPointerCancel】 : 取消事件 【Function(PointerUpEvent)】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Listener/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Listener/node1_base.dart deleted file mode 100644 index f302a3eb0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Listener/node1_base.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class CustomListener extends StatefulWidget { - const CustomListener({Key? key}) : super(key: key); - - @override - _CustomListenerState createState() => _CustomListenerState(); -} - -class _CustomListenerState extends State { - String _info = ''; - - @override - Widget build(BuildContext context) { - return Listener( - onPointerDown: (detail) => setState(() => _info = detail.toString()), - onPointerMove: (detail) => setState(() => _info = detail.toString()), - onPointerUp: (detail) => setState(() => _info = detail.toString()), - onPointerCancel: (detail) => setState(() => _info = detail.toString()), - - child: Container( - alignment: Alignment.center, - width: 300, - height: 300 * 0.618, - color: Colors.grey.withAlpha(33), - child: Text( - _info, - style: const TextStyle(fontSize: 16, color: Colors.blue), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_de_DE.json deleted file mode 100644 index 30fb3fcb7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_de_DE.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "Banner-Komponente", - "info": "Materialstil Banner-Komponente, unterstützt links-mitte-rechts oder links-mitte-unten Struktur, kann Ränder, Hintergrundfarbe usw. angeben", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "Verwendung von MaterialBanner in einer Zeile", - "desc": [ - "【content】 : Mittlere Komponente 【Widget】", - "【leading】: Linke Komponente 【Widget】", - "【actions】: Liste der rechten Komponenten 【List】", - "【padding】: Innenabstand 【EdgeInsetsGeometry】", - "【forceActionsBelow】: Ob die Schaltflächen unten sind 【bool】", - "【backgroundColor】: Hintergrundfarbe 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "Verwendung von MaterialBanner in zwei Zeilen", - "desc": [ - "【contentTextStyle】: Stil der mittleren Position 【TextStyle】", - "【leadingPadding】: Rand der linken Komponente 【EdgeInsetsGeometry】", - "Wenn die Anzahl der Endkomponenten größer als 1 ist, ist die Struktur der Komponente links-mitte-unten." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_en_US.json deleted file mode 100644 index ceb877a36..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_en_US.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "Banner Component", - "info": "A Material-style banner component that supports left-center-right or left-center-bottom structures, and allows specifying margins, background colors, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "Usage of MaterialBanner in a Single Line", - "desc": [ - "【content】: Middle component 【Widget】", - "【leading】: Left component 【Widget】", - "【actions】: List of right components 【List】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【forceActionsBelow】: Whether buttons are below 【bool】", - "【backgroundColor】: Background color 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "Usage of MaterialBanner in Two Lines", - "desc": [ - "【contentTextStyle】: Style for the middle position 【TextStyle】", - "【leadingPadding】: Padding for the left component 【EdgeInsetsGeometry】", - "When the number of trailing components is greater than 1, the component structure is left-center-bottom." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_es_ES.json deleted file mode 100644 index e17431713..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_es_ES.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "Componente de banner", - "info": "Componente de banner de estilo Material, compatible con estructuras de izquierda, centro, derecha o izquierda, centro, abajo, y permite especificar márgenes, colores de fondo, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "Uso de MaterialBanner en una fila", - "desc": [ - "【content】 : Componente central 【Widget】", - "【leading】: Componente izquierdo 【Widget】", - "【actions】: Lista de componentes derechos 【List】", - "【padding】: Relleno interno 【EdgeInsetsGeometry】", - "【forceActionsBelow】: Si los botones están abajo 【bool】", - "【backgroundColor】: Color de fondo 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "Uso de MaterialBanner en dos filas", - "desc": [ - "【contentTextStyle】: Estilo de la posición central 【TextStyle】", - "【leadingPadding】: Márgenes del componente izquierdo 【EdgeInsetsGeometry】", - "Cuando el número de componentes en la cola es mayor que 1, la estructura del componente es izquierda, centro, abajo." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_fr_FR.json deleted file mode 100644 index 5a3856d3e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_fr_FR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "Composant de bannière", - "info": "Composant de bannière de style Material, prenant en charge les structures gauche-centre-droite ou gauche-centre-bas, peut spécifier les marges, la couleur de fond, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "Utilisation d'une ligne de MaterialBanner", - "desc": [ - "【content】 : Composant central 【Widget】", - "【leading】: Composant gauche 【Widget】", - "【actions】: Liste des composants droits 【List】", - "【padding】: Marge intérieure 【EdgeInsetsGeometry】", - "【forceActionsBelow】: Si les boutons sont en bas 【bool】", - "【backgroundColor】: Couleur de fond 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "Utilisation de deux lignes de MaterialBanner", - "desc": [ - "【contentTextStyle】: Style de la position centrale 【TextStyle】", - "【leadingPadding】: Marge du composant gauche 【EdgeInsetsGeometry】", - "Lorsque le nombre de composants de fin est supérieur à 1, la structure du composant est gauche-centre-bas." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_it_IT.json deleted file mode 100644 index 905bb35a1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_it_IT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "Componente Banner", - "info": "Componente banner in stile Material, supporta strutture sinistra-centro-destra o sinistra-centro-basso, può specificare margini, colore di sfondo, ecc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "Uso di MaterialBanner su una riga", - "desc": [ - "【content】 : Componente centrale 【Widget】", - "【leading】: Componente sinistro 【Widget】", - "【actions】: Lista dei componenti destri 【List】", - "【padding】: Spaziatura interna 【EdgeInsetsGeometry】", - "【forceActionsBelow】: Se i pulsanti sono in basso 【bool】", - "【backgroundColor】: Colore di sfondo 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "Uso di MaterialBanner su due righe", - "desc": [ - "【contentTextStyle】: Stile della posizione centrale 【TextStyle】", - "【leadingPadding】: Margine del componente sinistro 【EdgeInsetsGeometry】", - "Quando il numero di componenti di coda è maggiore di 1, la struttura del componente è sinistra-centro-basso." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ja_JP.json deleted file mode 100644 index 6757a59d4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ja_JP.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "バナーコンポーネント", - "info": "Materialスタイルのバナーコンポーネントで、左中右または左中下の構造をサポートし、余白や背景色などを指定できます", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "MaterialBanner一行の使用", - "desc": [ - "【content】 : 中間コンポーネント 【Widget】", - "【leading】: 左側コンポーネント 【Widget】", - "【actions】: 右側コンポーネントリスト 【List】", - "【padding】: 内側の余白 【EdgeInsetsGeometry】", - "【forceActionsBelow】: ボタンを下に配置するかどうか 【bool】", - "【backgroundColor】: 背景色 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "MaterialBanner二行の使用", - "desc": [ - "【contentTextStyle】: 中間位置のスタイル 【TextStyle】", - "【leadingPadding】: 左側コンポーネントの余白 【EdgeInsetsGeometry】", - "末尾のコンポーネント数が1より多い場合、このコンポーネントの構造は左中下になります。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ko_KR.json deleted file mode 100644 index 8451bdd41..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ko_KR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "배너 컴포넌트", - "info": "Material 스타일의 배너 컴포넌트, 좌중우 또는 좌중하 구조를 지원하며, 여백 및 배경색 등을 지정할 수 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "MaterialBanner 한 줄 사용", - "desc": [ - "【content】 : 중간 컴포넌트 【Widget】", - "【leading】: 왼쪽 컴포넌트 【Widget】", - "【actions】: 오른쪽 컴포넌트 리스트 【List】", - "【padding】: 안쪽 여백 【EdgeInsetsGeometry】", - "【forceActionsBelow】: 버튼이 아래에 있는지 여부 【bool】", - "【backgroundColor】: 배경색 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "MaterialBanner 두 줄 사용", - "desc": [ - "【contentTextStyle】: 중간 위치 스타일 【TextStyle】", - "【leadingPadding】: 왼쪽 컴포넌트 여백 【EdgeInsetsGeometry】", - "꼬리 컴포넌트 수가 1보다 크면, 이 컴포넌트 구조는 좌중하입니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_pt_PT.json deleted file mode 100644 index 6875665c1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_pt_PT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "Componente de Banner", - "info": "Componente de banner no estilo Material, suporta estruturas esquerda-centro-direita ou esquerda-centro-abaixo, pode especificar margens, cor de fundo, etc.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "Uso de uma linha do MaterialBanner", - "desc": [ - "【content】: Componente do meio 【Widget】", - "【leading】: Componente esquerdo 【Widget】", - "【actions】: Lista de componentes direitos 【List】", - "【padding】: Margem interna 【EdgeInsetsGeometry】", - "【forceActionsBelow】: Se os botões estão abaixo 【bool】", - "【backgroundColor】: Cor de fundo 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "Uso de duas linhas do MaterialBanner", - "desc": [ - "【contentTextStyle】: Estilo da posição central 【TextStyle】", - "【leadingPadding】: Margem do componente esquerdo 【EdgeInsetsGeometry】", - "Quando o número de componentes finais é maior que 1, a estrutura do componente é esquerda-centro-abaixo." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ru_RU.json deleted file mode 100644 index 9c6300b4e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_ru_RU.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "Компонент баннера", - "info": "Компонент баннера в стиле Material, поддерживает структуру слева-в центре-справа или слева-в центре-снизу, можно указать отступы, цвет фона и т.д.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "Использование MaterialBanner в одну строку", - "desc": [ - "【content】 : Центральный компонент 【Widget】", - "【leading】: Левый компонент 【Widget】", - "【actions】: Список правых компонентов 【List】", - "【padding】: Внутренние отступы 【EdgeInsetsGeometry】", - "【forceActionsBelow】: Кнопки внизу 【bool】", - "【backgroundColor】: Цвет фона 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "Использование MaterialBanner в две строки", - "desc": [ - "【contentTextStyle】: Стиль центральной позиции 【TextStyle】", - "【leadingPadding】: Отступ левого компонента 【EdgeInsetsGeometry】", - "Когда количество конечных компонентов больше 1, структура компонента становится слева-в центре-снизу." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_zh-CN.json deleted file mode 100644 index d4af77e03..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/desc_zh-CN.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 211, - "name": "MaterialBanner", - "localName": "横幅组件", - "info": "Material风格的横幅组件,支持左中右或左中下结构,可指定边距背景色等", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_one_btn.dart", - "name": "MaterialBanner一行的使用", - "desc": [ - "【content】 : 中间组件 【Widget】", - "【leading】: 左侧组件 【Widget】", - "【actions】: 右侧组件列表 【List】", - "【padding】: 内边距 【EdgeInsetsGeometry】", - "【forceActionsBelow】: 是否按钮在下方 【bool】", - "【backgroundColor】: 背景色 【Color】" - ] - }, - { - "file": "node2_two_btn.dart", - "name": "MaterialBanner两行的使用", - "desc": [ - "【contentTextStyle】: 中间位置样式 【TextStyle】", - "【leadingPadding】: 左侧组件边距 【EdgeInsetsGeometry】", - "当尾部组件数量大于1,该组件结构为左中下。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/node1_one_btn.dart b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/node1_one_btn.dart deleted file mode 100644 index 9d1223666..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/node1_one_btn.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/21 -/// contact me by email 1981462002@qq.com - -class MaterialBannerDemo extends StatelessWidget { - const MaterialBannerDemo({Key? key}) : super(key: key); - - final String info = 'Welcome to Flutter Unit!'; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - MaterialBanner( - content: Text( - info, - style: const TextStyle(color: Colors.white), - ), - backgroundColor: Colors.purple, - leading: const Icon(Icons.info, color: Colors.lightBlueAccent), - padding: const EdgeInsetsDirectional.only(start: 16.0, top: 2.0), - forceActionsBelow: false, - // 默认false - actions: const [ - Text( - 'I KNOW', - style: TextStyle( - color: Colors.orange, - fontWeight: FontWeight.bold, - fontSize: 14), - ) - ], - )], - ); - } - -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/node2_two_btn.dart b/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/node2_two_btn.dart deleted file mode 100644 index d2fe347e5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialBanner/node2_two_btn.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/21 -/// contact me by email 1981462002@qq.com - -class MaterialBannerDemoTwo extends StatelessWidget { - const MaterialBannerDemoTwo({Key? key}) : super(key: key); - - final String info = - 'A banner displays an important, succinct message, and provides actions for users to address. ' - 'A user action is required for itto be dismissed.'; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - MaterialBanner( - content: Text( - info, - style: const TextStyle(color: Colors.white), - ), - backgroundColor: Colors.purple, - leading: const Icon(Icons.warning, color: Colors.yellow), - padding: - const EdgeInsetsDirectional.only(start: 16.0, top: 2.0, end: 2), - leadingPadding: const EdgeInsetsDirectional.only(end: 16.0), - actions: [ - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.white, - ), - onPressed: () {}, - child: const Text( - 'I KNOW', - style: TextStyle( - color: Colors.purple, - fontWeight: FontWeight.bold, - fontSize: 14), - ), - ), - ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.white, - ), - onPressed: () {}, - child: const Text( - 'I IGNORE', - style: TextStyle( - color: Colors.purple, - fontWeight: FontWeight.bold, - fontSize: 14), - ), - ), - ], - )], - ); - } - -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_de_DE.json deleted file mode 100644 index 01da8b87c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_de_DE.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "Material-Schaltfläche", - "info": "Eine allgemeine Material-Schaltfläche, die auf RawMaterialButton basiert. Kann ein Unterelement enthalten, kann Farbe, Form usw. definieren und kann Klick- und Long-Press-Ereignisse empfangen.", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialButton Klick-Ereignis", - "desc": [ - "【color】: Farbe 【Color】", - "【splashColor】: Wasserwellenfarbe 【Color】", - "【height】: Höhe 【double】", - "【elevation】: Schattentiefe 【double】", - "【child】: Unterelement 【Widget】", - "【textColor】: Textfarbe des Unterelements 【Color】", - "【highlightColor】: Hervorhebungsfarbe bei langem Drücken 【Color】", - "【padding】: Innenabstand 【EdgeInsetsGeometry】", - "【onPressed】: Klick-Ereignis 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "MaterialButton Long-Press-Ereignis", - "desc": [ - "【highlightColor】: Hervorhebungsfarbe bei langem Drücken 【Color】", - "【onLongPress】: Long-Press-Ereignis 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Benutzerdefinierte Form der MaterialButton", - "desc": [ - "【shape】: Form 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_en_US.json deleted file mode 100644 index b9c3470ee..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_en_US.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "Material Button", - "info": "A general Material button implemented based on RawMaterialButton. It can contain a child component, define colors, shapes, etc., and can receive click and long press events.", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialButton Click Event", - "desc": [ - "【color】: Color 【Color】", - "【splashColor】: Ripple Color 【Color】", - "【height】: Height 【double】", - "【elevation】: Elevation 【double】", - "【child】: Child Component 【Widget】", - "【textColor】: Child Component Text Color 【Color】", - "【highlightColor】: Long Press Highlight Color 【Color】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【onPressed】: Click Event 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "MaterialButton Long Press Event", - "desc": [ - "【highlightColor】: Long Press Highlight Color 【Color】", - "【onLongPress】: Long Press Event 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "MaterialButton Custom Shape", - "desc": [ - "【shape】: Shape 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_es_ES.json deleted file mode 100644 index afd5833aa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_es_ES.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "Botón de Material", - "info": "Botón de Material genérico implementado basado en RawMaterialButton. Puede contener un componente hijo, puede definir colores, formas, etc., y puede recibir eventos de clic y pulsación prolongada.", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clic de MaterialButton", - "desc": [ - "【color】: Color 【Color】", - "【splashColor】: Color de efecto de ondas 【Color】", - "【height】: Altura 【double】", - "【elevation】: Profundidad de sombra 【double】", - "【child】: Componente hijo 【Widget】", - "【textColor】: Color del texto del componente hijo 【Color】", - "【highlightColor】: Color de resaltado al pulsar prolongadamente 【Color】", - "【padding】: Relleno interno 【EdgeInsetsGeometry】", - "【onPressed】: Evento de clic 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "Evento de pulsación prolongada de MaterialButton", - "desc": [ - "【highlightColor】: Color de resaltado al pulsar prolongadamente 【Color】", - "【onLongPress】: Evento de pulsación prolongada 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Forma personalizada de MaterialButton", - "desc": [ - "【shape】: Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_fr_FR.json deleted file mode 100644 index 3f348033d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_fr_FR.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "Bouton Matériel", - "info": "Bouton Matériel générique basé sur RawMaterialButton. Peut contenir un composant enfant, peut définir des couleurs, des formes, etc., et peut recevoir des événements de clic et de pression longue.", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événement de clic de MaterialButton", - "desc": [ - "【color】: Couleur 【Color】", - "【splashColor】: Couleur de l'effet de vague 【Color】", - "【height】: Hauteur 【double】", - "【elevation】: Profondeur de l'ombre 【double】", - "【child】: Composant enfant 【Widget】", - "【textColor】: Couleur du texte du composant enfant 【Color】", - "【highlightColor】: Couleur de surbrillance lors d'une pression longue 【Color】", - "【padding】: Marge intérieure 【EdgeInsetsGeometry】", - "【onPressed】: Événement de clic 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "Événement de pression longue de MaterialButton", - "desc": [ - "【highlightColor】: Couleur de surbrillance lors d'une pression longue 【Color】", - "【onLongPress】: Événement de pression longue 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Forme personnalisée de MaterialButton", - "desc": [ - "【shape】: Forme 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_it_IT.json deleted file mode 100644 index 598096884..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_it_IT.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "Pulsante Material", - "info": "Un pulsante Material generico implementato sulla base di RawMaterialButton. Può contenere un componente figlio, può definire colori, forme e altre rappresentazioni, e può ricevere eventi di clic e pressione prolungata.", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento di clic di MaterialButton", - "desc": [ - "【color】: Colore 【Color】", - "【splashColor】: Colore dell'effetto a increspatura 【Color】", - "【height】: Altezza 【double】", - "【elevation】: Profondità dell'ombra 【double】", - "【child】: Componente figlio 【Widget】", - "【textColor】: Colore del testo del componente figlio 【Color】", - "【highlightColor】: Colore di evidenziazione durante la pressione prolungata 【Color】", - "【padding】: Spaziatura interna 【EdgeInsetsGeometry】", - "【onPressed】: Evento di clic 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "Evento di pressione prolungata di MaterialButton", - "desc": [ - "【highlightColor】: Colore di evidenziazione durante la pressione prolungata 【Color】", - "【onLongPress】: Evento di pressione prolungata 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Forma personalizzata di MaterialButton", - "desc": [ - "【shape】: Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ja_JP.json deleted file mode 100644 index 2ced61863..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ja_JP.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "マテリアルボタン", - "info": "RawMaterialButtonをベースにした汎用Materialボタンです。子コンポーネントを保持でき、色や形状などの表現を定義でき、クリックや長押しイベントを受け取ることができます。", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialButtonクリックイベント", - "desc": [ - "【color】: 色 【Color】", - "【splashColor】: 波紋色 【Color】", - "【height】: 高さ 【double】", - "【elevation】: 影の深さ 【double】", - "【child】: 子コンポーネント 【Widget】", - "【textColor】: 子コンポーネントのテキスト色 【Color】", - "【highlightColor】: 長押しハイライト色 【Color】", - "【padding】: パディング 【EdgeInsetsGeometry】", - "【onPressed】: クリックイベント 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "MaterialButton長押しイベント", - "desc": [ - "【highlightColor】: 長押しハイライト色 【Color】", - "【onLongPress】: 長押しイベント 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "MaterialButtonのカスタム形状", - "desc": [ - "【shape】: 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ko_KR.json deleted file mode 100644 index a2ea29180..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ko_KR.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "재료 버튼", - "info": "RawMaterialButton를 기반으로 구현된 일반 Material 버튼입니다. 하나의 자식 위젯을 포함할 수 있으며, 색상, 모양 등을 정의할 수 있고, 클릭 및 길게 누르기 이벤트를 받을 수 있습니다.", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialButton 클릭 이벤트", - "desc": [ - "【color】: 색상 【Color】", - "【splashColor】: 물결 효과 색상 【Color】", - "【height】: 높이 【double】", - "【elevation】: 그림자 깊이 【double】", - "【child】: 자식 위젯 【Widget】", - "【textColor】: 자식 위젯 텍스트 색상 【Color】", - "【highlightColor】: 길게 누를 때 강조 색상 【Color】", - "【padding】: 안쪽 여백 【EdgeInsetsGeometry】", - "【onPressed】: 클릭 이벤트 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "MaterialButton 길게 누르기 이벤트", - "desc": [ - "【highlightColor】: 길게 누를 때 강조 색상 【Color】", - "【onLongPress】: 길게 누르기 이벤트 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "MaterialButton의 사용자 정의 모양", - "desc": [ - "【shape】: 모양 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_pt_PT.json deleted file mode 100644 index b6784cc2f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_pt_PT.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "Botão de Material", - "info": "Botão Material genérico implementado com base no RawMaterialButton. Pode conter um componente filho, permite definir cor, forma e outras aparências, e pode receber eventos de clique e pressão longa.", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clique do MaterialButton", - "desc": [ - "【color】: Cor 【Color】", - "【splashColor】: Cor do efeito de ondulação 【Color】", - "【height】: Altura 【double】", - "【elevation】: Profundidade da sombra 【double】", - "【child】: Componente filho 【Widget】", - "【textColor】: Cor do texto do componente filho 【Color】", - "【highlightColor】: Cor de destaque ao pressionar 【Color】", - "【padding】: Preenchimento interno 【EdgeInsetsGeometry】", - "【onPressed】: Evento de clique 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "Evento de pressão longa do MaterialButton", - "desc": [ - "【highlightColor】: Cor de destaque ao pressionar 【Color】", - "【onLongPress】: Evento de pressão longa 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Forma personalizada do MaterialButton", - "desc": [ - "【shape】: Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ru_RU.json deleted file mode 100644 index de0df3d5f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_ru_RU.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "Материальная кнопка", - "info": "Универсальная Material кнопка, реализованная на основе RawMaterialButton. Может содержать дочерний компонент, позволяет определять цвет, форму и другие характеристики, может принимать события нажатия и длительного нажатия.", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Событие нажатия MaterialButton", - "desc": [ - "【color】: Цвет 【Color】", - "【splashColor】: Цвет водяного эффекта 【Color】", - "【height】: Высота 【double】", - "【elevation】: Глубина тени 【double】", - "【child】: Дочерний компонент 【Widget】", - "【textColor】: Цвет текста дочернего компонента 【Color】", - "【highlightColor】: Цвет подсветки при длительном нажатии 【Color】", - "【padding】: Внутренний отступ 【EdgeInsetsGeometry】", - "【onPressed】: Событие нажатия 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "Событие длительного нажатия MaterialButton", - "desc": [ - "【highlightColor】: Цвет подсветки при длительном нажатии 【Color】", - "【onLongPress】: Событие длительного нажатия 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "Пользовательская форма MaterialButton", - "desc": [ - "【shape】: Форма 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_zh-CN.json deleted file mode 100644 index 649b27fec..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/desc_zh-CN.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "id": 23, - "name": "MaterialButton", - "localName": "材料按钮", - "info": "基于RawMaterialButton实现的通用Material按钮。可盛放一个子组件,能定义颜色、形状等表现,可接收点击和长按事件。", - "lever": 4, - "family": 0, - "linkIds": [ - 25, - 26, - 27, - 326, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "MaterialButton点击事件", - "desc": [ - "【color】: 颜色 【Color】", - "【splashColor】: 水波纹颜色 【Color】", - "【height】: 高 【double】", - "【elevation】: 影深 【double】", - "【child】: 子组件 【Widget】", - "【textColor】: 子组件文字颜色 【Color】", - "【highlightColor】: 长按高亮色 【Color】", - "【padding】: 内边距 【EdgeInsetsGeometry】", - "【onPressed】: 点击事件 【Function】" - ] - }, - { - "file": "node2_onLongPress.dart", - "name": "MaterialButton长按事件", - "desc": [ - "【highlightColor】: 长按高亮色 【Color】", - "【onLongPress】: 长按事件 【Function】" - ] - }, - { - "file": "node3_shape.dart", - "name": "MaterialButton的自定义形状", - "desc": [ - "【shape】: 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node1_base.dart deleted file mode 100644 index 40b063c6b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node1_base.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class CustomMaterialButton extends StatelessWidget { - const CustomMaterialButton({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return MaterialButton( - height: 40, - elevation: 5, - color: Colors.blue, - textColor: Colors.white, - splashColor: Colors.orangeAccent, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(6)), - child: const Text("MaterialButton"), - onPressed: () { - - // Navigator.of(context).pushNamed('AboutMePage'); - }); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node2_onLongPress.dart b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node2_onLongPress.dart deleted file mode 100644 index a0d3c2ca4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node2_onLongPress.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class LongPressMaterialButton extends StatelessWidget { - const LongPressMaterialButton({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return MaterialButton( - height: 40, - elevation: 5, - color: Colors.blue, - highlightColor: Colors.green, - textColor: Colors.white, - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(6)), - child: const Text("MaterialButton"), - onLongPress: () { - // Navigator.of(context).pushNamed('AboutMePage'); - }, - onPressed: () { - // Navigator.of(context).pushNamed('AboutMePage'); - }); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node3_shape.dart b/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node3_shape.dart deleted file mode 100644 index 5e497291c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/MaterialButton/node3_shape.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class ShapeMaterialButton extends StatelessWidget { - const ShapeMaterialButton({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 20, - children: [ - SizedBox( - width: 40, - height: 40, - child: MaterialButton( - padding: const EdgeInsets.all(0), - textColor: const Color(0xffFfffff), - elevation: 3, - color: Colors.blue, - highlightColor: const Color(0xffF88B0A), - splashColor: Colors.red, - child: const Icon( - Icons.add, - color: Colors.white, - ), - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - ), - onLongPress: () => Navigator.of(context).pushNamed('AboutMePage'), - onPressed: () => Navigator.of(context).pushNamed('AboutMePage')), - ), - SizedBox( - width: 100, - height: 40, - child: MaterialButton( - padding: const EdgeInsets.all(0), - textColor: const Color(0xffFfffff), - elevation: 3, - color: Colors.blue, - highlightColor: const Color(0xffF88B0A), - splashColor: Colors.red, - child: const Icon( - Icons.remove, - color: Colors.white, - ), - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(15))), - onLongPress: () => Navigator.of(context).pushNamed('AboutMePage'), - onPressed: () => Navigator.of(context).pushNamed('AboutMePage')), - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_de_DE.json deleted file mode 100644 index 68f51a75e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "Barriere Modul", - "info": "Entspricht einer Vorhangschicht, die verhindert, dass der Benutzer mit den dahinter liegenden Widgets interagiert. Es kann durch dismissible festgelegt werden, ob beim Klicken der Rückgabestapel ausgelöst wird. Im Quellcode wird es für Dialog-bezogene Komponenten verwendet.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ModalBarrier Einführung", - "desc": [ - "【dismissible】 : Klicken, um zurückzukehren 【bool】", - "【color】 : Farbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_en_US.json deleted file mode 100644 index 2a27ad7af..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "Modal Barrier", - "info": "Equivalent to a curtain layer, preventing users from interacting with the Widget behind it. It can be determined by dismissible whether to trigger the back stack when clicked. Used in the source code for Dialog related components.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to ModalBarrier", - "desc": [ - "【dismissible】: Whether to return when clicked 【bool】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_es_ES.json deleted file mode 100644 index 9756ab1de..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "Barrera Modal", - "info": "Equivale a una capa de cortina que evita que el usuario interactúe con los Widgets detrás de ella. Se puede decidir si se activa la pila de retorno al hacer clic a través de dismissible. En el código fuente, se utiliza para componentes relacionados con Dialog.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a ModalBarrier", - "desc": [ - "【dismissible】: Si se retorna al hacer clic 【bool】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_fr_FR.json deleted file mode 100644 index c81a6a940..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "Barrière modale", - "info": "Équivaut à une couche de rideau, empêchant l'utilisateur d'interagir avec les Widgets derrière. Peut être configuré pour déclencher ou non la pile de retour lors d'un clic via dismissible. Utilisé dans les composants liés à Dialog dans le code source.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à ModalBarrier", - "desc": [ - "【dismissible】 : Retour au clic 【bool】", - "【color】 : Couleur 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_it_IT.json deleted file mode 100644 index e6ffe7654..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "Barriera Modale", - "info": "Equivale a uno strato di tenda che impedisce all'utente di interagire con i widget dietro di esso. È possibile decidere se attivare lo stack di ritorno al clic tramite dismissible. Nel codice sorgente è utilizzato per i componenti relativi a Dialog.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a ModalBarrier", - "desc": [ - "【dismissible】 : Ritorna al clic 【bool】", - "【color】 : Colore 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ja_JP.json deleted file mode 100644 index 9993ed792..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "バリアモード", - "info": "これは一種のカーテン層に相当し、ユーザーがその背後にあるウィジェットとやり取りするのを防ぎます。dismissibleを介して、クリック時に戻るスタックをトリガーするかどうかを決定できます。ソースコードではDialog関連のコンポーネントに使用されています。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ModalBarrier 紹介", - "desc": [ - "【dismissible】 : クリック時に戻るかどうか 【bool】", - "【color】 : 色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ko_KR.json deleted file mode 100644 index 1ee2365eb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "배리어 모드", - "info": "막대기와 같은 역할을 하며, 사용자가 뒤에 있는 위젯과 상호 작용하지 못하도록 합니다. dismissible을 통해 클릭 시 반환 스택을 트리거할지 여부를 결정할 수 있습니다. 소스 코드에서는 Dialog 관련 컴포넌트에 사용됩니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ModalBarrier 소개", - "desc": [ - "【dismissible】 : 클릭 시 반환 여부 【bool】", - "【color】 : 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_pt_PT.json deleted file mode 100644 index 42c896a2e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "Barreira Modal", - "info": "Equivale a uma camada de cortina, impedindo que o usuário interaja com os Widgets por trás dela. Pode ser decidido através de dismissible se, ao clicar, deve-se acionar a pilha de retorno. No código-fonte, é usado para componentes relacionados ao Dialog.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao ModalBarrier", - "desc": [ - "【dismissible】 : Clicar retorna 【bool】", - "【color】 : Cor 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ru_RU.json deleted file mode 100644 index 3102cc565..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "Барьер", - "info": "Эквивалентно слою занавеса, который предотвращает взаимодействие пользователя с виджетами за ним. Можно определить, будет ли нажатие вызывать возврат в стек, с помощью dismissible. В исходном коде используется для компонентов, связанных с диалогами.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в ModalBarrier", - "desc": [ - "【dismissible】 : Возврат при нажатии 【bool】", - "【color】 : Цвет 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_zh-CN.json deleted file mode 100644 index 1cd6dd287..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 212, - "name": "ModalBarrier", - "localName": "屏障模", - "info": "相当于一块幕布层,防止用户与其背后的 Widget 交互,可以通过 dismissible 决定点击时,是否触发返回栈。源码中用于 Dialog 相关组件。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ModalBarrier 介绍", - "desc": [ - "【dismissible】 : 点击是否返回 【bool】", - "【color】 : 颜色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/node1_base.dart deleted file mode 100644 index 449fd8efb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ModalBarrier/node1_base.dart +++ /dev/null @@ -1,24 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-04-01 -/// contact me by email 1981462002@qq.com - -class ModalBarrierDemo extends StatelessWidget { - const ModalBarrierDemo({Key? key}) : super(key: key); - - - @override - Widget build(BuildContext context) { - return SizedBox( - width: 200, - height: 100, - child: Stack(alignment: Alignment.center, children: [ - ModalBarrier( - dismissible: true, - color: Colors.grey.withOpacity(0.3), - ), - const Text('点击背景返回') - ]), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_de_DE.json deleted file mode 100644 index 3cc6538bd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "Navigationsleiste", - "info": "Allgemeine Strukturkomponente mit links, mittig und rechts Modus, kann den Abstand der mittleren Komponente zum linken Rand und ob sie zentriert ist, festlegen. Der Quellcode wird in Strukturen wie der AppBar verwendet.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung der NavigationToolbar", - "desc": [ - "【leading】 : Linke Komponente 【Widget】", - "【middle】: Mittlere Komponente 【Widget】", - "【trailing】: Rechte Komponente 【Widget】", - "【centerMiddle】: Ob die mittlere Komponente zentriert ist 【bool】", - "【middleSpacing】: Abstand der mittleren Komponente zum linken Rand 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_en_US.json deleted file mode 100644 index b64752257..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "Navigation Toolbar", - "info": "A general structural component with left-center-right mode, which can specify the left margin of the middle component and whether it is centered. The source code is used in the structure of navigation bars such as AppBar.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of NavigationToolbar", - "desc": [ - "【leading】: Left component 【Widget】", - "【middle】: Middle component 【Widget】", - "【trailing】: Right component 【Widget】", - "【centerMiddle】: Whether the middle component is centered 【bool】", - "【middleSpacing】: Distance of the middle component from the left 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_es_ES.json deleted file mode 100644 index d168fd878..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "Barra de herramientas de navegación", - "info": "Componente de estructura común en modo izquierdo, central y derecho, se puede especificar el margen izquierdo del componente central y si está centrado. El código fuente lo utiliza en estructuras de barras de navegación como AppBar.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de NavigationToolbar", - "desc": [ - "【leading】: Componente izquierdo 【Widget】", - "【middle】: Componente central 【Widget】", - "【trailing】: Componente derecho 【Widget】", - "【centerMiddle】: Si el componente central está centrado 【bool】", - "【middleSpacing】: Distancia del componente central al margen izquierdo 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_fr_FR.json deleted file mode 100644 index ef615c108..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "Barre d'outils de navigation", - "info": "Un composant structurel universel avec un modèle gauche-centre-droit, qui permet de spécifier la marge gauche du composant central et s'il est centré. Le code source est utilisé dans des structures de barres de navigation comme AppBar.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de NavigationToolbar", - "desc": [ - "【leading】 : Composant gauche 【Widget】", - "【middle】: Composant central 【Widget】", - "【trailing】: Composant droit 【Widget】", - "【centerMiddle】: Si le composant central est centré 【bool】", - "【middleSpacing】: Distance du composant central par rapport à la gauche 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_it_IT.json deleted file mode 100644 index 378c44998..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "Barra degli strumenti di navigazione", - "info": "Componente strutturale generico con modalità sinistra, centrale e destra, può specificare la distanza del componente centrale dal margine sinistro e se è centrato. Il codice sorgente viene utilizzato in strutture come AppBar.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di NavigationToolbar", - "desc": [ - "【leading】 : Componente sinistro 【Widget】", - "【middle】: Componente centrale 【Widget】", - "【trailing】: Componente destro 【Widget】", - "【centerMiddle】: Se il componente centrale è centrato 【bool】", - "【middleSpacing】: Distanza del componente centrale dal lato sinistro 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ja_JP.json deleted file mode 100644 index ce590edab..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "ナビゲーションツールバー", - "info": "左中右モードの汎用構造コンポーネントで、中央コンポーネントの左側のマージンと中央揃えかどうかを指定できます。ソースコードはAppBarなどのナビゲーションバー構造で使用されています。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NavigationToolbarの基本的な使用", - "desc": [ - "【leading】 : 左側コンポーネント 【Widget】", - "【middle】: 中央コンポーネント 【Widget】", - "【trailing】: 右側コンポーネント 【Widget】", - "【centerMiddle】: 中央コンポーネントを中央揃えにするかどうか 【bool】", - "【middleSpacing】: 中央コンポーネントの左側からの距離 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ko_KR.json deleted file mode 100644 index 4c9cd2452..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "네비게이션 툴바", - "info": "좌중우 모드의 일반 구조 컴포넌트로, 중간 컴포넌트의 왼쪽 여백 및 중앙 정렬 여부를 지정할 수 있습니다. 소스 코드는 AppBar 등 네비게이션 바 구조에서 이를 사용합니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NavigationToolbar 기본 사용", - "desc": [ - "【leading】 : 왼쪽 컴포넌트 【Widget】", - "【middle】: 중간 컴포넌트 【Widget】", - "【trailing】: 오른쪽 컴포넌트 【Widget】", - "【centerMiddle】: 중간 컴포넌트 중앙 정렬 여부 【bool】", - "【middleSpacing】: 중간 컴포넌트의 왼쪽 여백 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_pt_PT.json deleted file mode 100644 index 8dec55cab..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "Barra de Ferramentas de Navegação", - "info": "Componente estrutural genérico no modo esquerdo-central-direito, pode especificar a margem esquerda do componente central e se está centralizado. O código-fonte é usado em estruturas de barras de navegação como AppBar.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do NavigationToolbar", - "desc": [ - "【leading】: Componente esquerdo 【Widget】", - "【middle】: Componente central 【Widget】", - "【trailing】: Componente direito 【Widget】", - "【centerMiddle】: Se o componente central está centralizado 【bool】", - "【middleSpacing】: Distância do componente central à esquerda 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ru_RU.json deleted file mode 100644 index 8a3988416..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "Панель навигации", - "info": "Универсальный структурный компонент с левым, центральным и правым режимами, можно указать отступ центрального компонента от левого края и выравнивание по центру. Исходный код используется в структурах навигационных панелей, таких как AppBar.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование NavigationToolbar", - "desc": [ - "【leading】 : Левый компонент 【Widget】", - "【middle】: Центральный компонент 【Widget】", - "【trailing】: Правый компонент 【Widget】", - "【centerMiddle】: Выравнивание центрального компонента по центру 【bool】", - "【middleSpacing】: Расстояние центрального компонента от левого края 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_zh-CN.json deleted file mode 100644 index 0fea6ef08..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 214, - "name": "NavigationToolbar", - "localName": "导航工具条", - "info": "左中右模式的通用结构组件,可指定中间组件距左侧边距及是否居中。源码在AppBar等导航条结构中有使用它。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "NavigationToolbar基本使用", - "desc": [ - "【leading】 : 左侧组件 【Widget】", - "【middle】: 中间组件 【Widget】", - "【trailing】: 右侧组件组件 【Widget】", - "【centerMiddle】: 中间组件是否居中 【bool】", - "【middleSpacing】: 中间组件距左距离 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/node1_base.dart deleted file mode 100644 index 37e89d969..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NavigationToolbar/node1_base.dart +++ /dev/null @@ -1,37 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/20 -/// contact me by email 1981462002@qq.com - -class NavigationToolbarDemo extends StatelessWidget { - const NavigationToolbarDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.min, - children: const [ - SizedBox( - height: 60, - child: NavigationToolbar( - leading: Icon(Icons.ac_unit), - middle: Text('middleSpacing#true'), - middleSpacing: 20, - centerMiddle: true, - trailing: Icon(Icons.more_vert), - ), - ), - SizedBox( - height: 60, - child: NavigationToolbar( - leading: Icon(Icons.ac_unit), - middle: Text('middleSpacing#false'), - middleSpacing: 20, - centerMiddle: false, - trailing: Icon(Icons.more_vert), - ), - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_de_DE.json deleted file mode 100644 index 7ed6f083d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "Benachrichtigungs-Listener", - "info": "Sie können den generischen Typ T von Notification angeben, um Änderungen dieses Typs zu überwachen. Flutter bietet viele integrierte Benachrichtigungen für das Scrollen, aber Sie können auch benutzerdefinierte Benachrichtigungen erstellen und überwachen.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Überwachung von OverscrollIndicatorNotification", - "desc": [ - "Diese Benachrichtigung wird nur dann zurückgerufen, wenn bis zum obersten oder untersten Rand gescrollt wird. Die Eigenschaft 'leading' bestimmt, ob es sich um den oberen oder unteren Rand handelt. Darüber hinaus kann die blaue Schattierung beim Scrollen am oberen und unteren Rand durch notification#disallowGlow() entfernt werden." - ] - }, - { - "file": "node2_update.dart", - "name": "Überwachung von ScrollUpdateNotification", - "desc": [ - "Während des Scrollvorgangs werden die Scroll-Daten zurückgerufen, sodass Sie eine Vielzahl von Daten für Operationen erhalten können." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_en_US.json deleted file mode 100644 index 798e2267a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "Notification Listener", - "info": "You can specify the sub-generic type T of Notification to listen for changes of that type. Flutter has many built-in sliding Notifications, and of course, you can also customize Notifications for listening.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Listen to OverscrollIndicatorNotification", - "desc": [ - "This notification is called back when sliding to the top and bottom, and it is judged whether it is the top or bottom by the leading property. In addition, you can remove the blue shadow at the top and bottom sliding through notification#disallowGlow()." - ] - }, - { - "file": "node2_update.dart", - "name": "Listen to ScrollUpdateNotification", - "desc": [ - "During the sliding process, the sliding data is called back, and you can obtain a large amount of data to operate." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_es_ES.json deleted file mode 100644 index f70e983b0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "Escuchador de notificaciones", - "info": "Puede especificar el subgenérico T de Notification para escuchar cambios en ese tipo. Flutter tiene muchas notificaciones de desplazamiento integradas, por supuesto, también puedes personalizar las notificaciones para escucharlas.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Escuchar OverscrollIndicatorNotification", - "desc": [ - "Esta notificación se devuelve de llamada después de deslizarse hasta la parte superior e inferior, y se juzga si es la parte superior o la inferior a través de la propiedad leading. Además, a través de notification#disallowGlow(), se puede eliminar la sombra azul de deslizamiento superior e inferior." - ] - }, - { - "file": "node2_update.dart", - "name": "Escuchar ScrollUpdateNotification", - "desc": [ - "Durante el proceso de desplazamiento, se devuelven los datos de desplazamiento, y puedes obtener una gran cantidad de datos para operar." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_fr_FR.json deleted file mode 100644 index 8ae278a82..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "Écouteur de notifications", - "info": "Vous pouvez spécifier le sous-générique T de Notification pour écouter les changements de ce type. Flutter intègre de nombreuses notifications de défilement, bien sûr, vous pouvez également personnaliser les notifications pour les écouter.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Écouter OverscrollIndicatorNotification", - "desc": [ - "Cette notification est rappelée uniquement lors du défilement vers le haut ou le bas, en utilisant la propriété leading pour déterminer si c'est le haut ou le bas. De plus, en utilisant notification#disallowGlow(), vous pouvez supprimer l'ombre bleue du défilement en haut et en bas." - ] - }, - { - "file": "node2_update.dart", - "name": "Écouter ScrollUpdateNotification", - "desc": [ - "Pendant le défilement, les données de défilement sont rappelées, vous pouvez obtenir de nombreuses données pour les manipuler." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_it_IT.json deleted file mode 100644 index a9a7e5c75..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "Ascoltatore di Notifiche", - "info": "È possibile specificare il sottotipo generico T di Notification per monitorare i cambiamenti di quel tipo. Flutter include molte notifiche di scorrimento integrate, ma puoi anche creare e monitorare notifiche personalizzate.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Monitorare OverscrollIndicatorNotification", - "desc": [ - "Questa notifica viene richiamata solo quando si scorre fino in cima o in fondo, e si può determinare se si tratta della cima o del fondo tramite la proprietà leading. Inoltre, è possibile rimuovere l'ombra blu dello scorrimento in cima e in fondo utilizzando notification#disallowGlow()." - ] - }, - { - "file": "node2_update.dart", - "name": "Monitorare ScrollUpdateNotification", - "desc": [ - "Durante lo scorrimento, i dati di scorrimento vengono richiamati, permettendoti di ottenere molti dati per operazioni successive." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ja_JP.json deleted file mode 100644 index 243419363..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "通知リスナー", - "info": "NotificationのサブジェネリックTを指定して、そのタイプの変更を監視できます。Flutterには多くのスライドNotificationが組み込まれており、もちろん独自のNotificationを監視することもできます。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OverscrollIndicatorNotificationを監視", - "desc": [ - "この通知は、最上部または最下部にスライドしたときにコールバックされ、leadingプロパティを使用して上部か下部かを判断します。また、notification#disallowGlow()を使用して、上部と下部のスライド時の青色の影を取り除くことができます。" - ] - }, - { - "file": "node2_update.dart", - "name": "ScrollUpdateNotificationを監視", - "desc": [ - "スライド中にスライドデータをコールバックし、大量のデータを取得して操作することができます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ko_KR.json deleted file mode 100644 index e514456f0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "알림 리스너", - "info": "Notification의 하위 제네릭 T를 지정하여 해당 유형의 변경 사항을 감지할 수 있습니다. Flutter에는 많은 스크롤 Notification이 내장되어 있으며, 물론 사용자 정의 Notification을 감지할 수도 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OverscrollIndicatorNotification 감지", - "desc": [ - "이 알림은 스크롤이 가장 위나 가장 아래에 도달했을 때 콜백되며, leading 속성을 통해 상단인지 하단인지 판단할 수 있습니다. 또한 notification#disallowGlow()를 통해 상하단 스크롤 시 파란색 그림자를 제거할 수 있습니다." - ] - }, - { - "file": "node2_update.dart", - "name": "ScrollUpdateNotification 감지", - "desc": [ - "스크롤 과정에서 스크롤 데이터를 콜백하며, 이를 통해 많은 데이터를 얻어 작업할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_pt_PT.json deleted file mode 100644 index debe830e7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "Ouvinte de Notificação", - "info": "Pode especificar o subgenérico T de Notification para monitorar alterações desse tipo. O Flutter possui muitas Notificações de deslizamento integradas, mas você também pode criar e monitorar suas próprias Notificações personalizadas.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Monitorar OverscrollIndicatorNotification", - "desc": [ - "Esta notificação é chamada de volta apenas quando o deslizamento atinge o topo ou o fundo, e o atributo leading determina se é o topo ou o fundo. Além disso, através de notification#disallowGlow(), é possível remover a sombra azul do deslizamento no topo e no fundo." - ] - }, - { - "file": "node2_update.dart", - "name": "Monitorar ScrollUpdateNotification", - "desc": [ - "Durante o processo de deslizamento, os dados de deslizamento são chamados de volta, permitindo que você obtenha uma grande quantidade de dados para operações." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ru_RU.json deleted file mode 100644 index 25132315f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "Слушатель уведомлений", - "info": "Можно указать подтип T для Notification, чтобы отслеживать изменения этого типа. В Flutter встроено множество уведомлений о прокрутке, конечно, вы также можете настроить свои собственные уведомления для отслеживания.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Отслеживание OverscrollIndicatorNotification", - "desc": [ - "Это уведомление вызывается только при прокрутке до самого верха или низа, и можно определить, верх это или низ, с помощью свойства leading. Кроме того, с помощью notification#disallowGlow() можно убрать синюю тень при прокрутке вверху и внизу." - ] - }, - { - "file": "node2_update.dart", - "name": "Отслеживание ScrollUpdateNotification", - "desc": [ - "В процессе прокрутки данные о прокрутке передаются обратно, и вы можете получить множество данных для работы." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_zh-CN.json deleted file mode 100644 index e659e4513..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 220, - "name": "NotificationListener", - "localName": "通知监听器", - "info": "可指定Notification子泛型T,监听该类型的变化。Flutter内置很多滑动的Notification,当然你也可以自定义Notification进行监听。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "监听OverscrollIndicatorNotification", - "desc": [ - "该通知之后在滑动到最顶和最底是回调,通过leading属性判断是顶部还是底部。另外通过notification#disallowGlow(),可以去除顶底滑动蓝色阴影" - ] - }, - { - "file": "node2_update.dart", - "name": "监听ScrollUpdateNotification", - "desc": [ - "在滑动过程中对滑动数据进行回调,你可以获取大量数据来进行操作。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/node1_base.dart deleted file mode 100644 index ed6f94563..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/node1_base.dart +++ /dev/null @@ -1,61 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/8/14 -/// contact me by email 1981462002@qq.com - - -class NotificationListenerDemo extends StatefulWidget { - const NotificationListenerDemo({Key? key}) : super(key: key); - - @override - _NotificationListenerDemoState createState() => _NotificationListenerDemoState(); -} - -class _NotificationListenerDemoState extends State { - final List data = List.generate(30, (i) => '第${i + 1}条'); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 250, - child: NotificationListener( - onNotification: _onNotification, - child: CupertinoScrollbar( - child: ListView.separated( - itemBuilder: _buildItem, - itemCount: data.length, - separatorBuilder: (_,__)=>const Divider(height: 5,), - ), - )), - ); - } - - bool _onNotification(OverscrollIndicatorNotification notification) { - if (notification.leading) { - notification.disallowIndicator(); - ScaffoldMessenger.of(context).showSnackBar(const SnackBar( - content: Text('已滑到顶部'), - backgroundColor: Colors.blue, - duration: Duration(milliseconds: 200), - )); - } else { - notification.disallowIndicator(); - ScaffoldMessenger.of(context).showSnackBar(const SnackBar( - content: Text('已滑到底部'), - duration: Duration(milliseconds: 200), - backgroundColor: Colors.blue, - )); - } - - return true; - } - - Widget _buildItem(BuildContext context, int index) { - return Container( - height: 50, - alignment: Alignment.center, - child: Text(data[index],style: TextStyle(color: Theme.of(context).primaryColor,fontSize: 18),), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/node2_update.dart b/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/node2_update.dart deleted file mode 100644 index b7195b1d5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/NotificationListener/node2_update.dart +++ /dev/null @@ -1,79 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/8/14 -/// contact me by email 1981462002@qq.com - - -class NotificationListenerUpdate extends StatefulWidget { - const NotificationListenerUpdate({Key? key}) : super(key: key); - - @override - _NotificationListenerUpdateState createState() => - _NotificationListenerUpdateState(); -} - -class _NotificationListenerUpdateState - extends State { - final List data = List.generate(30, (i) => '第${i + 1}条'); - - String _info = ''; - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: Stack( - children: [ - Positioned( - child: Padding( - padding: const EdgeInsets.only(left: 8.0), - child: Text(_info), - )), - NotificationListener( - onNotification: _onNotification, - child: CupertinoScrollbar( - child: ListView.separated( - itemBuilder: _buildItem, - itemCount: data.length, - separatorBuilder: (_, __) => const Divider(height: 5), - ), - )), - - ], - ), - ); - } - - bool _onNotification(ScrollUpdateNotification notification) { - setState(() { - _info = 'axis------【${notification.metrics.axis}】------\n' - 'pixels------【${notification.metrics.pixels}】------\n' - 'atEdge------【${notification.metrics.atEdge}】------\n' - 'axisDirection------【${notification.metrics.axisDirection}】------\n' - 'extentInside------【${notification.metrics.extentInside}】------\n' - 'outOfRange------【${notification.metrics.outOfRange}】------\n' - 'minScrollExtent------【${notification.metrics.minScrollExtent}】------\n' - 'maxScrollExtent------【${notification.metrics.maxScrollExtent}】------\n' - 'viewportDimension------【${notification.metrics.viewportDimension}】------\n' - 'delta------【${notification.dragDetails?.delta}】------\n' - 'globalPosition------【${notification.dragDetails?.globalPosition}】------\n' - 'localPosition------【${notification.dragDetails?.localPosition}】------\n' - 'scrollDelta------【${notification.scrollDelta}】------\n' - 'depth------【${notification.depth}】------'; - }); - return true; - } - - Widget _buildItem(BuildContext context, int index) { - return Container( - height: 50, - alignment: Alignment.centerRight, - padding: const EdgeInsets.only(right: 8), - child: Text( - data[index], - style: TextStyle(color: Theme.of(context).primaryColor, fontSize: 18), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_de_DE.json deleted file mode 100644 index a5091791d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_de_DE.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "Ausrichtungs-Builder", - "info": "Kann zurückmelden, ob das übergeordnete Element horizontal oder vertikal ist, und kann darauf basierend verschiedene untergeordnete Elemente erstellen.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von OrientationBuilder", - "desc": [ - "【builder】 : Ausrichtungskomponenten-Builder 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_en_US.json deleted file mode 100644 index 77d4311fe..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_en_US.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "Orientation Builder", - "info": "Can callback whether the parent component is horizontal or vertical, and can build different child components based on this.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of OrientationBuilder", - "desc": [ - "【builder】: Orientation component builder 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_es_ES.json deleted file mode 100644 index 79d4f460b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_es_ES.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "Constructor de Orientación", - "info": "Puede devolver una llamada para determinar si el componente padre es horizontal o vertical, y puede construir diferentes componentes secundarios en consecuencia.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de OrientationBuilder", - "desc": [ - "【builder】: Constructor de componentes de orientación 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_fr_FR.json deleted file mode 100644 index b026d8821..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_fr_FR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "Constructeur d'orientation", - "info": "Capable de rappeler si le composant parent est horizontal ou vertical, et peut construire différents composants enfants en conséquence.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base d'OrientationBuilder", - "desc": [ - "【builder】 : Constructeur de composant d'orientation 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_it_IT.json deleted file mode 100644 index 3ee33c719..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_it_IT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "Costruttore di Orientamento", - "info": "Può richiamare se il componente genitore è orizzontale o verticale, e può costruire diversi componenti figli in base a ciò.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di OrientationBuilder", - "desc": [ - "【builder】 : Costruttore del componente di orientamento 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ja_JP.json deleted file mode 100644 index 51eafbef3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ja_JP.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "方向ビルダー", - "info": "親コンポーネントが横向きか縦向きかをコールバックでき、それに応じて異なる子コンポーネントを構築できます。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OrientationBuilderの基本的な使用", - "desc": [ - "【builder】 : 方向コンポーネントビルダー 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ko_KR.json deleted file mode 100644 index acd5e42f7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ko_KR.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "방향 빌더", - "info": "부모 구성 요소가 가로 방향인지 세로 방향인지 콜백할 수 있으며, 이를 기반으로 다른 자식 구성 요소를 구축할 수 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OrientationBuilder 기본 사용", - "desc": [ - "【builder】 : 방향 구성 요소 빌더 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_pt_PT.json deleted file mode 100644 index db124afac..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_pt_PT.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "Construtor de Orientação", - "info": "Pode retornar se o componente pai é horizontal ou vertical, e pode construir diferentes componentes filhos com base nisso.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do OrientationBuilder", - "desc": [ - "【builder】 : Construtor de componentes de orientação 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ru_RU.json deleted file mode 100644 index 060e68fe1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_ru_RU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "Ориентация строителя", - "info": "Может обратно вызывать, является ли родительский компонент горизонтальным или вертикальным, и может создавать различные дочерние компоненты на основе этого.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование OrientationBuilder", - "desc": [ - "【builder】 : Строитель компонента ориентации 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_zh-CN.json deleted file mode 100644 index 3a25ec697..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/desc_zh-CN.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id": 203, - "name": "OrientationBuilder", - "localName": "方向构造器", - "info": "能够回调父组件是横向还是纵向,可以据此来构建不同的子组件。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OrientationBuilder基本使用", - "desc": [ - "【builder】 : 方向组件构造器 【OrientationWidgetBuilder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/node1_base.dart deleted file mode 100644 index 1f383a903..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OrientationBuilder/node1_base.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/21 -/// contact me by email 1981462002@qq.com - -class OrientationBuilderDemo extends StatefulWidget { - const OrientationBuilderDemo({Key? key}) : super(key: key); - - @override - _OrientationBuilderDemoState createState() => _OrientationBuilderDemoState(); -} - -class _OrientationBuilderDemoState extends State { - double _width = 200; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Container( - width: _width, - height: 200, - child: OrientationBuilder(builder: _builder), - color: Colors.orange, - ), - _buildSlider() - ], - ); - } - - //根据回调的orientation返回组件 - Widget _builder(BuildContext context, Orientation orientation) { - switch(orientation){ - case Orientation.portrait: - return const Icon(Icons.phone_android,size: 60,); - case Orientation.landscape: - return const RotatedBox( - quarterTurns: 1, - child: Icon(Icons.phone_android,size: 60,)); - default: return Container(); - } - } - - Widget _buildSlider() =>Slider( - value: _width, - max: 350.0, - min: 80.0, - divisions: 17, - onChanged: (v)=> setState(() => _width= v), - ); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_de_DE.json deleted file mode 100644 index 5b472ff85..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_de_DE.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "Umriss-Schaltfläche", - "info": "Schaltfläche mit Rahmenstil, basierend auf MaterialButton implementiert, alle Eigenschaften ähnlich wie MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OutlineButton Klickereignis", - "desc": [ - "【textColor】: Textfarbe der Unterkomponente 【Color】", - "【splashColor】: Wasserwellenfarbe 【Color】", - "【highlightColor】: Hervorhebungsfarbe bei langem Drücken 【Color】", - "【highlightedBorderColor】: Rahmenfarbe bei Hervorhebung 【Color】", - "【child】: Unterkomponente 【Widget】", - "【padding】: Innenabstand 【EdgeInsetsGeometry】", - "【borderSide】: Randlinie 【BorderSide】", - "【onPressed】: Klickereignis 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Die OutlineButton-Schaltfläche hat die Bühne in Flutter 3.0 verlassen. Der Ersatz ist die OutlinedButton-Schaltfläche.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(Umriss-Schaltfläche", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_en_US.json deleted file mode 100644 index d8fffcfbb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_en_US.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "Outline Button", - "info": "A button with a border style, implemented based on MaterialButton, with all properties similar to MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OutlineButton Click Event", - "desc": [ - "【textColor】: Text color of child component 【Color】", - "【splashColor】: Ripple color 【Color】", - "【highlightColor】: Long press highlight color 【Color】", - "【highlightedBorderColor】: Border color when highlighted 【Color】", - "【child】: Child component 【Widget】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【borderSide】: Border side 【BorderSide】", - "【onPressed】: Click event 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'The OutlineButton has been phased out in Flutter 3.0. It is replaced by the OutlinedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_es_ES.json deleted file mode 100644 index 48c34e9a7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_es_ES.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "Botón de contorno", - "info": "Botón con estilo de borde, implementado basado en MaterialButton, todas las propiedades son similares a MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clic de OutlineButton", - "desc": [ - "【textColor】: Color del texto del componente hijo 【Color】", - "【splashColor】: Color de la onda 【Color】", - "【highlightColor】: Color de resaltado al mantener presionado 【Color】", - "【highlightedBorderColor】: Color del borde al resaltar 【Color】", - "【child】: Componente hijo 【Widget】", - "【padding】: Relleno interno 【EdgeInsetsGeometry】", - "【borderSide】: Línea del borde 【BorderSide】", - "【onPressed】: Evento de clic 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'El botón OutlineButton dejó de estar disponible en Flutter 3.0. Su reemplazo es el botón OutlinedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(Botón de contorno", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_fr_FR.json deleted file mode 100644 index 5dfc02352..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_fr_FR.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "Bouton à contour", - "info": "Bouton de style à bordure, basé sur MaterialButton, toutes les propriétés sont similaires à MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événement de clic OutlineButton", - "desc": [ - "【textColor】: Couleur du texte des composants enfants 【Color】", - "【splashColor】: Couleur de l'effet de vague 【Color】", - "【highlightColor】: Couleur de surbrillance lors d'un appui long 【Color】", - "【highlightedBorderColor】: Couleur de la bordure en surbrillance 【Color】", - "【child】: Composant enfant 【Widget】", - "【padding】: Marge intérieure 【EdgeInsetsGeometry】", - "【borderSide】: Bordure 【BorderSide】", - "【onPressed】: Événement de clic 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Le bouton OutlineButton a quitté la scène historique dans Flutter 3.0. Il est remplacé par le bouton OutlinedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(Bouton à contour", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_it_IT.json deleted file mode 100644 index 0b312f10f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_it_IT.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "Pulsante a contorno", - "info": "Pulsante con stile bordo, implementato basandosi su MaterialButton, tutte le proprietà sono simili a MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento di clic di OutlineButton", - "desc": [ - "【textColor】: Colore del testo del componente figlio 【Color】", - "【splashColor】: Colore dell'effetto ripple 【Color】", - "【highlightColor】: Colore di evidenziazione durante la pressione prolungata 【Color】", - "【highlightedBorderColor】: Colore del bordo durante l'evidenziazione 【Color】", - "【child】: Componente figlio 【Widget】", - "【padding】: Spaziatura interna 【EdgeInsetsGeometry】", - "【borderSide】: Linea del bordo 【BorderSide】", - "【onPressed】: Evento di clic 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Il pulsante OutlineButton è stato ritirato in Flutter 3.0. Il suo sostituto è il pulsante OutlinedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(Pulsante a contorno", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ja_JP.json deleted file mode 100644 index 6ff6ea27a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ja_JP.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "アウトライン ボタン", - "info": "枠線スタイルのボタンで、MaterialButtonをベースに実装されており、すべてのプロパティはMaterialButtonと同様です。", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OutlineButtonクリックイベント", - "desc": [ - "【textColor】: 子コンポーネントのテキストカラー 【Color】", - "【splashColor】: 波紋カラー 【Color】", - "【highlightColor】: 長押し時のハイライトカラー 【Color】", - "【highlightedBorderColor】: ハイライト時の枠線カラー 【Color】", - "【child】: 子コンポーネント 【Widget】", - "【padding】: 内側の余白 【EdgeInsetsGeometry】", - "【borderSide】: 枠線 【BorderSide】", - "【onPressed】: クリックイベント 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'OutlineButton ボタンは Flutter3.0 で歴史の舞台から退場しました。代替として OutlinedButton ボタンがあります。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(枠線ボタン", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ko_KR.json deleted file mode 100644 index 8105312e7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ko_KR.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "아웃라인 버튼", - "info": "테두리 스타일 버튼, MaterialButton을 기반으로 구현되었으며, 모든 속성은 MaterialButton과 유사합니다.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OutlineButton 클릭 이벤트", - "desc": [ - "【textColor】: 자식 컴포넌트 텍스트 색상 【Color】", - "【splashColor】: 물결 효과 색상 【Color】", - "【highlightColor】: 길게 누를 때 강조 색상 【Color】", - "【highlightedBorderColor】: 강조 시 테두리 색상 【Color】", - "【child】: 자식 컴포넌트 【Widget】", - "【padding】: 안쪽 여백 【EdgeInsetsGeometry】", - "【borderSide】: 테두리 선 【BorderSide】", - "【onPressed】: 클릭 이벤트 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'OutlineButton 버튼은 Flutter3.0에서 역사의 무대에서 퇴장했습니다. 대체자는 OutlinedButton 버튼입니다.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(아웃라인 버튼", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_pt_PT.json deleted file mode 100644 index dedf8efff..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_pt_PT.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "Botão de Contorno", - "info": "Botão de estilo de borda, implementado com base no MaterialButton, todas as propriedades são semelhantes ao MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de Clique do OutlineButton", - "desc": [ - "【textColor】: Cor do texto do componente filho 【Color】", - "【splashColor】: Cor do efeito de ondulação 【Color】", - "【highlightColor】: Cor de destaque ao pressionar 【Color】", - "【highlightedBorderColor】: Cor da borda ao destacar 【Color】", - "【child】: Componente filho 【Widget】", - "【padding】: Preenchimento interno 【EdgeInsetsGeometry】", - "【borderSide】: Linha da borda 【BorderSide】", - "【onPressed】: Evento de clique 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'O botão OutlineButton saiu de cena no Flutter 3.0. O substituto é o botão OutlinedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(Botão de Contorno", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ru_RU.json deleted file mode 100644 index b4a9f8a42..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_ru_RU.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "Кнопка с контуром", - "info": "Кнопка с рамкой, реализованная на основе MaterialButton, все свойства аналогичны MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Событие нажатия OutlineButton", - "desc": [ - "【textColor】: Цвет текста дочернего компонента 【Color】", - "【splashColor】: Цвет водяного эффекта 【Color】", - "【highlightColor】: Цвет подсветки при длительном нажатии 【Color】", - "【highlightedBorderColor】: Цвет рамки при подсветке 【Color】", - "【child】: Дочерний компонент 【Widget】", - "【padding】: Внутренний отступ 【EdgeInsetsGeometry】", - "【borderSide】: Линия рамки 【BorderSide】", - "【onPressed】: Событие нажатия 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Кнопка OutlineButton ушла в историю с выходом Flutter 3.0. Ее заменила кнопка OutlinedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(Кнопка с контуром", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_zh-CN.json deleted file mode 100644 index ffaa5f472..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/desc_zh-CN.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 27, - "name": "OutlineButton", - "localName": "线框按钮", - "info": "边框样式按钮,基于MaterialButton实现,所有属性和MaterialButton类似。", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 23, - 24, - 25, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "OutlineButton点击事件", - "desc": [ - "【textColor】: 子组件文字颜色 【Color】", - "【splashColor】: 水波纹颜色 【Color】", - "【highlightColor】: 长按高亮色 【Color】", - "【highlightedBorderColor】: 高亮时框色 【Color】", - "【child】: 子组件 【Widget】", - "【padding】: 内边距 【EdgeInsetsGeometry】", - "【borderSide】: 边线 【BorderSide】", - "【onPressed】: 点击事件 【Function】", - " ", - "", - "class CustomOutlineButton extends StatelessWidget {", - " const CustomOutlineButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'OutlineButton 按钮于 Flutter3.0 退出历史舞台。取代者为 OutlinedButton 按钮。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return OutlineButton(边线按钮", - " onPressed: () {,", - " child: const Text(\"OutlineButton\"),", - " padding: const EdgeInsets.all(8),", - " splashColor: Colors.green,", - " highlightColor: Colors.orangeAccent,", - " highlightedBorderColor: Colors.grey,", - " textColor: const Color(0xff000000),", - " borderSide: const BorderSide(color: Color(0xff0A66F8), width: 2)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/node1_base.dart deleted file mode 100644 index 3c8df0345..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/OutlineButton/node1_base.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomOutlineButton extends StatelessWidget { - const CustomOutlineButton({Key? key}) : super(key: key); - - final String info = - 'OutlineButton 按钮于 Flutter3.0 退出历史舞台。取代者为 OutlinedButton 按钮。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_de_DE.json deleted file mode 100644 index a459a8b0c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_de_DE.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "Seitenspeicher", - "info": "Kann den Seitenstatus speichern und den Status beim Wechseln der Seite beibehalten. Im Quellcode wird es in ScrollView, PageView, ExpansionTile usw. verwendet.", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PageStorage", - "desc": [ - "【bucket】 : Speicherbereich 【PageStorageBucket】", - "【child】: Untergeordnete Komponente 【Widget】", - "Beim Initialisieren der Komponente beim Wechseln der Oberfläche wird der Status nicht zurückgesetzt. Wie bei CountWidget muss die untergeordnete Komponente beim Initialisieren den Status aus dem Speicher lesen und beim Ändern des Status den Status in den Speicher schreiben. Außerdem ist PageStorage bereits in MaterialApp integriert, aber Sie können auch ein PageStorage erstellen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_en_US.json deleted file mode 100644 index dd4ed4b19..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_en_US.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "Page Storage", - "info": "Can store the state of a page, maintaining the state when switching pages. It is used in ScrollView, PageView, ExpansionTile, etc. in the source code.", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PageStorage", - "desc": [ - "【bucket】: Storage Area 【PageStorageBucket】", - "【child】: Child Widget 【Widget】", - "When switching interfaces and initializing components, the state will not be reset. As in the CountWidget example, the child component needs to read the state from the storage during initialization and write the state to the storage when changing the state. Additionally, MaterialApp already has PageStorage built-in, but you can also create your own PageStorage." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_es_ES.json deleted file mode 100644 index ca743ed2e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_es_ES.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "Almacenamiento de Página", - "info": "Puede almacenar el estado de la página, manteniendo el estado al cambiar de página. En el código fuente, se utiliza en ScrollView, PageView, ExpansionTile, etc.", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PageStorage", - "desc": [ - "【bucket】: Área de almacenamiento 【PageStorageBucket】", - "【child】: Componente hijo 【Widget】", - "Al cambiar de interfaz y inicializar componentes, el estado no se restablecerá. Como en CountWidget, el componente hijo necesita leer el estado del almacenamiento durante la inicialización y escribir el estado en el almacenamiento al cambiar el estado. Además, si usas MaterialApp, ya tiene PageStorage incorporado, pero también puedes crear uno." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_fr_FR.json deleted file mode 100644 index 5c9131434..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_fr_FR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "Stockage de page", - "info": "Permet de stocker l'état de la page, ce qui permet de maintenir l'état lors du changement de page. Il est utilisé dans le code source de ScrollView, PageView, ExpansionTile, etc.", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PageStorage", - "desc": [ - "【bucket】 : Zone de stockage 【PageStorageBucket】", - "【child】: Composant enfant 【Widget】", - "Lors de l'initialisation des composants en changeant d'interface, l'état n'est pas réinitialisé. Comme dans CountWidget, le composant enfant doit lire l'état du stockage lors de l'initialisation et écrire l'état dans le stockage lors du changement d'état. De plus, si vous utilisez MaterialApp, PageStorage est déjà intégré, mais vous pouvez également créer un PageStorage." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_it_IT.json deleted file mode 100644 index 53e06b5aa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_it_IT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "Memoria di pagina", - "info": "Consente di memorizzare lo stato della pagina, mantenendo lo stato durante il cambio di pagina. Nel codice sorgente, viene utilizzato in ScrollView, PageView, ExpansionTile, ecc.", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di PageStorage", - "desc": [ - "【bucket】 : Area di archiviazione 【PageStorageBucket】", - "【child】: Componente figlio 【Widget】", - "Quando si inizializzano i componenti durante il cambio di interfaccia, lo stato non viene reimpostato. Ad esempio, nel caso di CountWidget, il componente figlio deve leggere lo stato dalla memoria durante l'inizializzazione e scrivere lo stato nella memoria quando lo stato cambia. Inoltre, se si utilizza MaterialApp, PageStorage è già integrato, ma è comunque possibile creare un PageStorage." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ja_JP.json deleted file mode 100644 index 14259a6b5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ja_JP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "ページストレージ", - "info": "ページの状態を保存することができ、ページを切り替える際に状態を保持することができます。ソースコードでは、ScrollView、PageView、ExpansionTileなどに適用されています。", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PageStorageの基本使用", - "desc": [ - "【bucket】 : ストレージエリア 【PageStorageBucket】", - "【child】: 子コンポーネント 【Widget】", - "上記のインターフェースを切り替える際、コンポーネントの初期化時に状態がリセットされることはありません。例えばCountWidgetでは、子コンポーネントは初期化時にストレージから状態を読み取り、状態を変更する際に状態をストレージに書き込む必要があります。また、MaterialAppを使用すると、すでにPageStorageが組み込まれていますが、自分でPageStorageを作成することもできます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ko_KR.json deleted file mode 100644 index 77bbbfac1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ko_KR.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "페이지 스토리지", - "info": "페이지 상태를 저장할 수 있으며, 페이지 전환 시 상태를 유지할 수 있습니다. 소스 코드에서 ScrollView, PageView, ExpansionTile 등에 적용되어 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PageStorage 기본 사용", - "desc": [ - "【bucket】 : 저장 영역 【PageStorageBucket】", - "【child】: 자식 위젯 【Widget】", - "위에서 인터페이스를 전환할 때 초기화 컴포넌트는 상태를 재설정하지 않습니다. 위의 CountWidget과 같이, 자식 컴포넌트는 초기화 시 스토리지에서 상태를 읽어야 하며, 상태를 변경할 때 상태를 스토리지에 기록해야 합니다. 또한, MaterialApp을 사용하면 이미 내장된 PageStorage가 있지만, PageStorage를 직접 생성할 수도 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_pt_PT.json deleted file mode 100644 index e440872ab..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_pt_PT.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "Armazenamento de Página", - "info": "Pode armazenar o estado da página, mantendo o estado ao alternar entre páginas. No código-fonte, é aplicado em ScrollView, PageView, ExpansionTile, etc.", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do PageStorage", - "desc": [ - "【bucket】: Área de armazenamento 【PageStorageBucket】", - "【child】: Componente filho 【Widget】", - "Ao alternar a interface e inicializar componentes, o estado não será redefinido. Como no CountWidget, o componente filho precisa ler o estado do armazenamento durante a inicialização e escrever o estado no armazenamento ao alterar o estado. Além disso, se usar o MaterialApp, o PageStorage já está embutido, mas você também pode criar um PageStorage." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ru_RU.json deleted file mode 100644 index 16b638c74..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_ru_RU.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "Хранилище страниц", - "info": "Позволяет сохранять состояние страницы, чтобы оно сохранялось при переключении страниц. Используется в исходном коде в ScrollView, PageView, ExpansionTile и других.", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PageStorage", - "desc": [ - "【bucket】 : Область хранения 【PageStorageBucket】", - "【child】: Дочерний компонент 【Widget】", - "При переключении интерфейса инициализация компонентов не сбрасывает состояние. Например, CountWidget, дочерний компонент должен читать состояние из хранилища при инициализации и записывать состояние в хранилище при изменении состояния. Кроме того, если вы используете MaterialApp, PageStorage уже встроен, но вы также можете создать PageStorage." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_zh-CN.json deleted file mode 100644 index f511ec008..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/desc_zh-CN.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "id": 210, - "name": "PageStorage", - "localName": "页面存储器", - "info": "可以将页面状态进行存储,在切页时可以保持状态。源码中在ScrollView、PageView、ExpansionTile等皆有应用。", - "lever": 3, - "family": 0, - "linkIds": [ - 52, - 165 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PageStorage基本使用", - "desc": [ - "【bucket】 : 存储区 【PageStorageBucket】", - "【child】: 子组件 【Widget】", - "上面切换界面初始化组件时并不会将状态重置。如上CountWidget,子组件需要在初始化时从存储器中读取状态,在改变状态时将状态量写入存储器。另外,如果使用MaterialApp已经内置了PageStorage,不过你也可以创建PageStorage。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/node1_base.dart deleted file mode 100644 index 5f7cf6a96..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PageStorage/node1_base.dart +++ /dev/null @@ -1,109 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/8/14 -/// contact me by email 1981462002@qq.com - - -class PageStorageDemo extends StatefulWidget { - const PageStorageDemo({Key? key}) : super(key: key); - - @override - _PageStorageDemoState createState() => _PageStorageDemoState(); -} - -class _PageStorageDemoState extends State { - int _pageIndex = 0; - final PageStorageBucket _bucket = PageStorageBucket(); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Scaffold( - body: PageStorage( - child: _buildContentByIndex(), - bucket: _bucket, - ), - bottomNavigationBar: BottomNavigationBar( - elevation: 0, - backgroundColor: Colors.blueAccent.withAlpha(55), - currentIndex: _pageIndex, - onTap: (int index) { - setState(() { - _pageIndex = index; - }); - }, - items: const [ - BottomNavigationBarItem( - icon: Icon(Icons.home), - label: 'Home', - ), - BottomNavigationBarItem( - icon: Icon(Icons.settings), - label: 'Setting', - ), - ], - ), - ), - ); - } - - Widget _buildContentByIndex() { - if (_pageIndex == 0) { - return const CountWidget(key: PageStorageKey('CountWidget1')); - } - - if (_pageIndex == 1) { - return const CountWidget(key: PageStorageKey('CountWidget2')); - } - - return ListView(); - } -} - -class CountWidget extends StatefulWidget { - const CountWidget({Key? key}) : super(key: key); - - @override - _CountWidgetState createState() => _CountWidgetState(); -} - -class _CountWidgetState extends State { - int _count = 0; - - @override - void initState() { - super.initState(); - _count = PageStorage.of(context)?.readState(context); - } - - @override - Widget build(BuildContext context) { - return Container( - alignment: Alignment.center, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text('点击了$_count次'), - MaterialButton( - onPressed: _addCount, - child: const Icon( - Icons.add, - color: Colors.white, - ), - color: Colors.green, - shape: const CircleBorder( - side: BorderSide(width: 2.0, color: Color(0xFFDFDFDF)), - )) - ], - ), - ); - } - - void _addCount() { - setState(() { - _count++; - PageStorage.of(context)?.writeState(context, _count); - }); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_de_DE.json deleted file mode 100644 index 68fa7dad6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_de_DE.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "Platzhalter-Komponente", - "info": "Eine Platzhalter-Komponente mit einem Rechteck und einem Kreuz, bei der Farbe, Linienstärke, Breite, Höhe usw. angegeben werden können.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Eigenschaften des Platzhalters", - "desc": [ - "【color】: Farbe 【Color】", - "【strokeWidth】: Linienstärke 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Fallback-Eigenschaften des Platzhalters", - "desc": [ - "Wenn der Bereich keine Breiten- und Höhenbeschränkungen hat, die Breite und Höhe der Platzhalter-Komponente.", - "【fallbackHeight】: Höhe 【double】", - "【fallbackWidth】: Breite 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_en_US.json deleted file mode 100644 index 2b9703837..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_en_US.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "Placeholder Component", - "info": "A placeholder component with a rectangle and a cross, which can specify properties such as color, stroke width, width, and height.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Placeholder Basic Properties", - "desc": [ - "【color】: Color 【Color】", - "【strokeWidth】: Stroke Width 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Placeholder Fallback Properties", - "desc": [ - "When there are no width and height constraints in the area, the width and height of the placeholder component.", - "【fallbackHeight】: Height 【double】", - "【fallbackWidth】: Width 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_es_ES.json deleted file mode 100644 index 95a7a9a55..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_es_ES.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "Componente de marcador de posición", - "info": "Un componente de marcador de posición con un rectángulo y una cruz, que puede especificar propiedades como color, grosor de línea, ancho y alto.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propiedades básicas de Placeholder", - "desc": [ - "【color】: Color 【Color】", - "【strokeWidth】: Grosor de línea 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Propiedades de fallback de Placeholder", - "desc": [ - "Cuando no hay restricciones de ancho y alto en el área, el ancho y alto del componente de marcador de posición.", - "【fallbackHeight】: Alto 【double】", - "【fallbackWidth】: Ancho 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_fr_FR.json deleted file mode 100644 index d9df0a99c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_fr_FR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "Composant d'espace réservé", - "info": "Un composant d'espace réservé avec un rectangle et une croix, pouvant spécifier des propriétés telles que la couleur, l'épaisseur de la ligne, la largeur et la hauteur.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propriétés de base de Placeholder", - "desc": [ - "【color】: Couleur 【Color】", - "【strokeWidth】: Épaisseur de la ligne 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Propriétés de fallback de Placeholder", - "desc": [ - "Lorsque la zone n'a pas de contraintes de largeur et de hauteur, la largeur et la hauteur du composant d'espace réservé.", - "【fallbackHeight】: Hauteur 【double】", - "【fallbackWidth】: Largeur 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_it_IT.json deleted file mode 100644 index 3b343b5d2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_it_IT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "Componente segnaposto", - "info": "Un componente segnaposto con un rettangolo e una croce, che può specificare proprietà come colore, larghezza della linea, larghezza e altezza.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Proprietà di base del Placeholder", - "desc": [ - "【color】: Colore 【Color】", - "【strokeWidth】: Larghezza della linea 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Proprietà fallback del Placeholder", - "desc": [ - "Quando non ci sono vincoli di larghezza e altezza nell'area, la larghezza e l'altezza del componente segnaposto.", - "【fallbackHeight】: Altezza 【double】", - "【fallbackWidth】: Larghezza 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ja_JP.json deleted file mode 100644 index 295dc30f4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ja_JP.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "プレースホルダーコンポーネント", - "info": "矩形とバツ印のプレースホルダーコンポーネントで、色、線の太さ、幅と高さなどの属性を指定できます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Placeholderの基本属性", - "desc": [ - "【color】: 色 【Color】", - "【strokeWidth】: 線の太さ 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Placeholderのfallback属性", - "desc": [ - "エリアに幅と高さの制約がない場合のプレースホルダーコンポーネントの幅と高さ。", - "【fallbackHeight】: 高さ 【double】", - "【fallbackWidth】: 幅 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ko_KR.json deleted file mode 100644 index fe00fc2dd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ko_KR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "플레이스홀더 컴포넌트", - "info": "사각형과 엑스 표시가 있는 플레이스홀더 컴포넌트로, 색상, 선 두께, 너비 및 높이 등의 속성을 지정할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Placeholder 기본 속성", - "desc": [ - "【color】: 색상 【Color】", - "【strokeWidth】: 선 두께 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Placeholder의 fallback 속성", - "desc": [ - "해당 영역에 너비와 높이 제약이 없을 때 플레이스홀더 컴포넌트의 너비와 높이.", - "【fallbackHeight】: 높이 【double】", - "【fallbackWidth】: 너비 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_pt_PT.json deleted file mode 100644 index a74137ffa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_pt_PT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "Componente de Espaço Reservado", - "info": "Um componente de espaço reservado com um retângulo e um X, que permite especificar propriedades como cor, largura da linha, altura e largura.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Propriedades Básicas do Placeholder", - "desc": [ - "【color】: Cor 【Color】", - "【strokeWidth】: Espessura da Linha 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Propriedades Fallback do Placeholder", - "desc": [ - "Quando a área não tem restrições de altura e largura, a altura e largura do componente de espaço reservado.", - "【fallbackHeight】: Altura 【double】", - "【fallbackWidth】: Largura 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ru_RU.json deleted file mode 100644 index 51a976029..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_ru_RU.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "Компонент-заглушка", - "info": "Прямоугольный компонент-заглушка с крестиком, можно указать цвет, толщину линии, ширину, высоту и другие свойства.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основные свойства Placeholder", - "desc": [ - "【color】: Цвет 【Color】", - "【strokeWidth】: Толщина линии 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Свойства fallback Placeholder", - "desc": [ - "Ширина и высота компонента-заглушки, если в области нет ограничений по ширине и высоте.\"", - "【fallbackHeight】: Высота 【double】", - "【fallbackWidth】: Ширина 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_zh-CN.json deleted file mode 100644 index 00869967e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/desc_zh-CN.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 36, - "name": "Placeholder", - "localName": "占位组件", - "info": "一个矩形和叉叉的占位组件,可指定颜色、线宽、宽高等属性。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Placeholder基础属性", - "desc": [ - "【color】: 颜色 【Color】", - "【strokeWidth】: 线粗 【double】" - ] - }, - { - "file": "node2_fallback.dart", - "name": "Placeholder的fallback属性", - "desc": [ - "当所在区域无宽高约束时,占位组件的宽高。\"", - "【fallbackHeight】: 高 【double】", - "【fallbackWidth】: 宽 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/node1_base.dart deleted file mode 100644 index 560a8a2e6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/node1_base.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomPlaceholder extends StatelessWidget { - const CustomPlaceholder({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const SizedBox( - width: 100, - height: 100*0.618, - child: Placeholder( - color: Colors.orangeAccent, - strokeWidth: 2, - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/node2_fallback.dart b/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/node2_fallback.dart deleted file mode 100644 index 680283b51..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Placeholder/node2_fallback.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class FallbackPlaceholder extends StatelessWidget { - const FallbackPlaceholder({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const UnconstrainedBox( - child: Placeholder( - color: Colors.blue, - strokeWidth: 2, - fallbackHeight: 100, - fallbackWidth: 150, - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_de_DE.json deleted file mode 100644 index 63de5e989..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "Richtungsbasierte Positionierung", - "info": "Funktioniert wie die Positioned-Komponente, aber mit unterschiedlichen Eigenschaftsnamen. Kann nur in einem Stack verwendet werden und ermöglicht die präzise Platzierung einer Komponente durch Angabe der Abstände von oben, links, rechts und unten.", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von PositionedDirectional", - "desc": [ - "【child】 : Komponente 【Widget】", - "【top】 : Abstand zum oberen Rand des Elternelements 【double】", - "【end】 : Abstand zum rechten Rand des Elternelements 【double】", - "【start】 : Abstand zum linken Rand des Elternelements 【double】", - "【bottom】 : Abstand zum unteren Rand des Elternelements 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_en_US.json deleted file mode 100644 index 950dd6978..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "Directional Positioning", - "info": "Same functionality as the Positioned component, but with different property names. It can only be used in a Stack, allowing precise placement of a component by specifying distances from the top, left, right, and bottom.", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of PositionedDirectional", - "desc": [ - "【child】 : Component 【Widget】", - "【top】 : Distance to the top of the parent 【double】", - "【end】 : Distance to the right of the parent 【double】", - "【start】 : Distance to the left of the parent 【double】", - "【bottom】 : Distance to the bottom of the parent 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_es_ES.json deleted file mode 100644 index 8796fef0d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "Posicionamiento direccional", - "info": "Funciona igual que el componente Positioned, pero con nombres de propiedades diferentes. Solo se puede usar en Stack, y permite colocar un componente con precisión especificando las distancias desde la parte superior, inferior, izquierda y derecha.", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de PositionedDirectional", - "desc": [ - "【child】 : Componente 【Widget】", - "【top】 : Distancia desde la parte superior del padre 【double】", - "【end】 : Distancia desde la derecha del padre 【double】", - "【start】 : Distancia desde la izquierda del padre 【double】", - "【bottom】 : Distancia desde la parte inferior del padre 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_fr_FR.json deleted file mode 100644 index cf354b507..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "Positionnement directionnel", - "info": "Fonctionne comme le composant Positioned, mais avec des noms de propriétés différents. Ne peut être utilisé que dans une Stack, permet de positionner précisément un composant en spécifiant les distances par rapport au haut, à gauche, à droite et au bas.", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de PositionedDirectional", - "desc": [ - "【child】 : Composant 【Widget】", - "【top】 : Distance par rapport au haut du parent 【double】", - "【end】 : Distance par rapport à la droite du parent 【double】", - "【start】 : Distance par rapport à la gauche du parent 【double】", - "【bottom】 : Distance par rapport au bas du parent 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_it_IT.json deleted file mode 100644 index 6fb07841b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "Posizionamento Direzionale", - "info": "Funziona come il componente Positioned, ma con nomi di attributi diversi. Può essere utilizzato solo in Stack e consente di posizionare con precisione un componente specificando le distanze da sinistra, destra, alto e basso.", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Base di PositionedDirectional", - "desc": [ - "【child】 : Componente 【Widget】", - "【top】 : Distanza dal bordo superiore del genitore 【double】", - "【end】 : Distanza dal bordo destro del genitore 【double】", - "【start】 : Distanza dal bordo sinistro del genitore 【double】", - "【bottom】 : Distanza dal bordo inferiore del genitore 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ja_JP.json deleted file mode 100644 index 63112a1ed..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "方向定位", - "info": "Positionedコンポーネントと同じ機能で、属性名が異なります。Stack内でのみ使用でき、左上右下の距離を指定してコンポーネントを正確に配置できます。", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PositionedDirectional基本使用", - "desc": [ - "【child】 : コンポーネント 【Widget】", - "【top】 : 親の上端までの距離 【double】", - "【end】 : 親の右端までの距離 【double】", - "【start】 : 親の左端までの距離 【double】", - "【bottom】 : 親の下端までの距離 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ko_KR.json deleted file mode 100644 index b807c3b11..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "방향 위치 지정", - "info": "Positioned 컴포넌트와 기능이 동일하며, 속성 이름이 다릅니다. Stack에서만 사용할 수 있으며, 상하좌우 거리를 지정하여 특정 컴포넌트를 정확하게 배치할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PositionedDirectional 기본 사용", - "desc": [ - "【child】 : 컴포넌트 【Widget】", - "【top】 : 부모 상단까지의 거리 【double】", - "【end】 : 부모 오른쪽까지의 거리 【double】", - "【start】 : 부모 왼쪽까지의 거리 【double】", - "【bottom】 : 부모 하단까지의 거리 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_pt_PT.json deleted file mode 100644 index b594afb36..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "Posicionamento Direcional", - "info": "Funciona da mesma forma que o componente Positioned, mas com nomes de propriedades diferentes. Só pode ser usado em Stack, e permite especificar distâncias de cima, esquerda, direita e baixo para posicionar um componente com precisão.", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de PositionedDirectional", - "desc": [ - "【child】 : Componente 【Widget】", - "【top】 : Distância até o topo do pai 【double】", - "【end】 : Distância até a direita do pai 【double】", - "【start】 : Distância até a esquerda do pai 【double】", - "【bottom】 : Distância até a base do pai 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ru_RU.json deleted file mode 100644 index e0978368e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "Направленное позиционирование", - "info": "Функциональность аналогична компоненту Positioned, но с разными именами свойств. Может использоваться только в Stack, позволяет точно разместить компонент, указав расстояния до верха, низа, левого и правого краев.", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование PositionedDirectional", - "desc": [ - "【child】 : Компонент 【Widget】", - "【top】 : Расстояние до верхнего края родителя 【double】", - "【end】 : Расстояние до правого края родителя 【double】", - "【start】 : Расстояние до левого края родителя 【double】", - "【bottom】 : Расстояние до нижнего края родителя 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_zh-CN.json deleted file mode 100644 index 225dc9998..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 159, - "name": "PositionedDirectional", - "localName": "方向定位", - "info": "和Positioned组件功能一样,属性名不同。只能用于Stack中,可以指定左上右下的距离对某个组件进行位置精确安放。", - "lever": 3, - "family": 0, - "linkIds": [ - 108, - 122 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PositionedDirectional基本使用", - "desc": [ - "【child】 : 组件 【Widget】", - "【top】 : 到父顶距离 【double】", - "【end】 : 到父右距离 【double】", - "【start】 : 到父左距离 【double】", - "【bottom】 : 到父底距离 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/node1_base.dart deleted file mode 100644 index d918c053e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PositionedDirectional/node1_base.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class CustomPositionedDirectional extends StatelessWidget { - const CustomPositionedDirectional({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - Widget yellowBox = Container( - color: Colors.yellow, - height: 100, - width: 100, - ); - - Widget redBox = Container( - color: Colors.red, - height: 90, - width: 90, - ); - - Widget greenBox = Container( - color: Colors.green, - height: 80, - width: 80, - ); - - Widget cyanBox = Container( - color: Colors.cyanAccent, - height: 70, - width: 70, - ); - - return Container( - width: 200, - height: 120, - color: Colors.grey.withAlpha(33), - child: Stack( - children: [ - yellowBox, - redBox, - PositionedDirectional(top: 20, start: 20, child: greenBox), - PositionedDirectional( - child: cyanBox, - bottom: 10, - end: 10, - ) - ], - )); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_de_DE.json deleted file mode 100644 index 462a98c79..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_de_DE.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "Bevorzugte Größe", - "info": "Implementiert das PreferredSizeWidget-Interface, kann ein Kind-Widget aufnehmen, bevorzugte Größe festlegen und übt keine Einschränkungen auf sein Kind-Widget aus.", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PreferredSize passt die Höhe der AppBar an", - "desc": [ - "【preferredSize】 : Größe 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "Umwandlung und Verwendung von PreferredSize", - "desc": [ - "【PreferredSize wandelt ein normales Widget in ein PreferredSizeWidget um" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_en_US.json deleted file mode 100644 index 9dfdf89e3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_en_US.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "Preferred Size", - "info": "Implements the PreferredSizeWidget interface, can contain a child component, sets the preferred size, and does not impose any constraints on its child component.", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Adjusting AppBar Height with PreferredSize", - "desc": [ - "【preferredSize】 : size 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "Conversion and Usage of PreferredSize", - "desc": [ - "【PreferredSize converts a regular component into a PreferredSizeWidget" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_es_ES.json deleted file mode 100644 index eaa44d85b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_es_ES.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "Tamaño preferido", - "info": "Implementa la interfaz PreferredSizeWidget, puede contener un componente hijo, establece un tamaño preferido y no impone ninguna restricción a su componente hijo.", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Ajustar la altura de AppBar con PreferredSize", - "desc": [ - "【preferredSize】 : tamaño 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "Uso de conversión de PreferredSize", - "desc": [ - "【PreferredSize convierte un componente normal en un PreferredSizeWidget" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_fr_FR.json deleted file mode 100644 index 24b4e2a25..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_fr_FR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "Taille préférée", - "info": "Implémente l'interface PreferredSizeWidget, peut contenir un composant enfant, définit une taille préférée et n'impose aucune contrainte à son composant enfant.", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Ajuster la hauteur de l'AppBar avec PreferredSize", - "desc": [ - "【preferredSize】 : taille 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "Conversion et utilisation de PreferredSize", - "desc": [ - "【PreferredSize convertit un composant ordinaire en PreferredSizeWidget" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_it_IT.json deleted file mode 100644 index 280de33e7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_it_IT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "Dimensione Preferita", - "info": "Implementa l'interfaccia PreferredSizeWidget, può contenere un componente figlio, imposta una dimensione preferita e non applica alcun vincolo al suo componente figlio.", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Regolazione dell'altezza dell'AppBar con PreferredSize", - "desc": [ - "【preferredSize】 : dimensione 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "Conversione e utilizzo di PreferredSize", - "desc": [ - "【PreferredSize converte un componente comune in un PreferredSizeWidget" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ja_JP.json deleted file mode 100644 index 7e8a00689..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ja_JP.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "優先サイズ", - "info": "PreferredSizeWidgetインターフェースを実装しており、子コンポーネントを収容し、優先サイズを設定しますが、子コンポーネントに制約を課しません。", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PreferredSizeでAppBarの高さを調整", - "desc": [ - "【preferredSize】 : サイズ 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "PreferredSizeの変換と使用", - "desc": [ - "【PreferredSizeは通常のコンポーネントをPreferredSizeWidgetに変換します" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ko_KR.json deleted file mode 100644 index 8d61e15ca..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ko_KR.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "우선 크기", - "info": "PreferredSizeWidget 인터페이스를 구현하여 하나의 자식 위젯을 수용하고 우선 크기를 설정하며, 자식 위젯에 어떠한 제약도 가하지 않습니다.", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PreferredSize로 AppBar 높이 조정", - "desc": [ - "【preferredSize】 : 크기 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "PreferredSize의 변환 사용", - "desc": [ - "【PreferredSize는 일반 위젯을 PreferredSizeWidget으로 변환합니다" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_pt_PT.json deleted file mode 100644 index 20c2181b8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_pt_PT.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "Tamanho Preferido", - "info": "Implementa a interface PreferredSizeWidget, pode acomodar um componente filho, define o tamanho preferido e não impõe quaisquer restrições ao seu componente filho.", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Ajustar a altura do AppBar com PreferredSize", - "desc": [ - "【preferredSize】 : tamanho 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "Conversão e uso do PreferredSize", - "desc": [ - "【PreferredSize converte um componente comum em PreferredSizeWidget" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ru_RU.json deleted file mode 100644 index ded165f2f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_ru_RU.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "Предпочтительный размер", - "info": "Реализует интерфейс PreferredSizeWidget, может содержать дочерний компонент, устанавливает предпочтительный размер и не накладывает никаких ограничений на свои дочерние компоненты.", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Настройка высоты AppBar с помощью PreferredSize", - "desc": [ - "【preferredSize】 : размер 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "Преобразование и использование PreferredSize", - "desc": [ - "【PreferredSize преобразует обычный компонент в PreferredSizeWidget" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_zh-CN.json deleted file mode 100644 index 77ca7e112..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/desc_zh-CN.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "id": 204, - "name": "PreferredSize", - "localName": "优先尺寸", - "info": "实现了PreferredSizeWidget接口,可容纳一个子组件,设置优先尺寸,不会对其子组件施加任何约束。", - "lever": 2, - "family": 0, - "linkIds": [ - 57, - 64 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "PreferredSize调整AppBar高度", - "desc": [ - "【preferredSize】 : 尺寸 【Size】" - ] - }, - { - "file": "node2_adapter.dart", - "name": "PreferredSize的转化使用", - "desc": [ - "【PreferredSize将普通组件转化为PreferredSizeWidget" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/node1_base.dart deleted file mode 100644 index 3879b6d30..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/node1_base.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/5/3 -/// contact me by email 1981462002@qq.com - -class CustomPreferredSize extends StatelessWidget { - const CustomPreferredSize({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Scaffold( - appBar: PreferredSize( - preferredSize: const Size.fromHeight(150), - child: AppBar( - title: const Text('PreferredSize'), - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/node2_adapter.dart b/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/node2_adapter.dart deleted file mode 100644 index b68bf26cd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/PreferredSize/node2_adapter.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/5/3 -/// contact me by email 1981462002@qq.com - -class AdapterPreferredSize extends StatelessWidget { - const AdapterPreferredSize({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Scaffold( - appBar: PreferredSize( - preferredSize: const Size.fromHeight(150), - child: AppBar( - title: const Text('PreferredSize'), - bottom: PreferredSize( - preferredSize: const Size.fromHeight(40), - child: Container( - height: 40, - color: Colors.orange, - ), - ), - ), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_de_DE.json deleted file mode 100644 index 191499f72..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_de_DE.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "Auswahlkachel", - "info": "Eine allgemeine Listenelementstruktur, die von Flutter bereitgestellt wird, mit einer mittel-rechten Struktur und einem Radio am Ende. Komponenten können an den entsprechenden Positionen eingefügt werden, wodurch spezifische Elemente leicht angepasst werden können.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile benötigt einen generischen Typ T", - "desc": [ - "【value】 : Elementobjekt 【T】", - "【groupValue】 : Ausgewähltes Objekt 【T】", - "【selected】: Ob ausgewählt 【bool】", - "【secondary】: Rechte Komponente 【Widget】", - "【title】: Obere mittlere Komponente 【Widget】", - "【subtitle】: Untere mittlere Komponente 【Widget】", - "【onChanged】: Wechselereignis 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "RadioListTile Auswahlfarbe und dichte Anordnung", - "desc": [ - "【activeColor】 : Farbe bei Auswahl 【Color】", - "【dense】: Ob dichte Anordnung 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_en_US.json deleted file mode 100644 index 5da2c4cd1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_en_US.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "Radio Tile", - "info": "A general list item structure provided by Flutter, with a middle-right structure, and a Radio at the end. Components can be inserted at corresponding positions, making it easy to handle specific items.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile requires a generic type T", - "desc": [ - "【value】 : Item object 【T】", - "【groupValue】 : Selected object 【T】", - "【selected】: Whether selected 【bool】", - "【secondary】: Right component 【Widget】", - "【title】: Middle top component 【Widget】", - "【subtitle】: Middle bottom component 【Widget】", - "【onChanged】: Switch event 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "RadioListTile selection color and dense layout", - "desc": [ - "【activeColor】 : Color when selected 【Color】", - "【dense】: Whether dense layout 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_es_ES.json deleted file mode 100644 index 4f1d55921..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_es_ES.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "Elemento de lista de radio", - "info": "Una estructura de elemento de lista genérica proporcionada por Flutter, con una estructura de centro-derecha y un Radio al final. Se pueden insertar componentes en las posiciones correspondientes, lo que permite manejar elementos específicos de manera conveniente.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile requiere un tipo genérico T", - "desc": [ - "【value】 : Objeto del elemento 【T】", - "【groupValue】 : Objeto seleccionado 【T】", - "【selected】: Si está seleccionado 【bool】", - "【secondary】: Componente derecho 【Widget】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【onChanged】: Evento de cambio 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "Color de selección y disposición densa de RadioListTile", - "desc": [ - "【activeColor】 : Color cuando está seleccionado 【Color】", - "【dense】: Si está en disposición densa 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_fr_FR.json deleted file mode 100644 index 80c5b656d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_fr_FR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "Tuile de bouton radio", - "info": "Une structure de liste générique fournie par Flutter, de structure centrale-droite, avec un bouton radio à la fin. Des composants peuvent être insérés aux positions appropriées, ce qui permet de répondre facilement à des entrées spécifiques.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile nécessite un type générique T", - "desc": [ - "【value】 : objet de l'entrée 【T】", - "【groupValue】 : objet sélectionné 【T】", - "【selected】: si sélectionné 【bool】", - "【secondary】: composant droit 【Widget】", - "【title】: composant supérieur central 【Widget】", - "【subtitle】: composant inférieur central 【Widget】", - "【onChanged】: événement de bascule 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "Couleur de sélection et alignement serré de RadioListTile", - "desc": [ - "【activeColor】 : couleur lors de la sélection 【Color】", - "【dense】: si alignement serré 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_it_IT.json deleted file mode 100644 index 7f1f85e33..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_it_IT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "Piastrella Radio", - "info": "Una struttura di elenco generica fornita da Flutter, con una struttura centrale-destra, e una Radio alla fine. I componenti possono essere inseriti nelle posizioni corrispondenti, rendendo facile adattarsi a voci specifiche.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile richiede un tipo generico T", - "desc": [ - "【value】 : oggetto voce 【T】", - "【groupValue】 : oggetto selezionato 【T】", - "【selected】: se selezionato 【bool】", - "【secondary】: componente a destra 【Widget】", - "【title】: componente superiore centrale 【Widget】", - "【subtitle】: componente inferiore centrale 【Widget】", - "【onChanged】: evento di cambio 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "Colore selezionato e disposizione compatta di RadioListTile", - "desc": [ - "【activeColor】 : colore quando selezionato 【Color】", - "【dense】: se disposto in modo compatto 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ja_JP.json deleted file mode 100644 index e37e7747d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ja_JP.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "ラジオタイル", - "info": "Flutterが提供する一般的なリストアイテム構造で、中央右構造で、末尾にラジオがあります。対応する位置にコンポーネントを挿入でき、特定のアイテムに簡単に対応できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTileはジェネリック型Tを必要とします", - "desc": [ - "【value】 : アイテムオブジェクト 【T】", - "【groupValue】 : 選択オブジェクト 【T】", - "【selected】: 選択されているかどうか 【bool】", - "【secondary】: 右側のコンポーネント 【Widget】", - "【title】: 中央上部のコンポーネント 【Widget】", - "【subtitle】: 中央下部のコンポーネント 【Widget】", - "【onChanged】: 切り替えイベント 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "RadioListTileの選択色と密排", - "desc": [ - "【activeColor】 : 選択時の色 【Color】", - "【dense】: 密排かどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ko_KR.json deleted file mode 100644 index 1deb0e6a0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ko_KR.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "라디오 타일", - "info": "Flutter에서 제공하는 일반적인 목록 항목 구조로, 중앙-오른쪽 구조이며 끝에 라디오 버튼이 있습니다. 해당 위치에 컴포넌트를 삽입할 수 있어 특정 항목에 쉽게 대응할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile은 제네릭 T가 필요합니다", - "desc": [ - "【value】 : 항목 객체 【T】", - "【groupValue】 : 선택된 객체 【T】", - "【selected】: 선택 여부 【bool】", - "【secondary】: 오른쪽 컴포넌트 【Widget】", - "【title】: 중앙 상단 컴포넌트 【Widget】", - "【subtitle】: 중앙 하단 컴포넌트 【Widget】", - "【onChanged】: 전환 이벤트 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "RadioListTile 선택 색상 및 밀집 배치", - "desc": [ - "【activeColor】 : 선택 시 색상 【Color】", - "【dense】: 밀집 배치 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_pt_PT.json deleted file mode 100644 index 708dd9bc0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_pt_PT.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "Azulejo de Rádio", - "info": "Uma estrutura de item de lista genérica fornecida pelo Flutter, com uma estrutura de centro-direita, e um Rádio na extremidade. Componentes podem ser inseridos nas posições correspondentes, o que permite lidar facilmente com itens específicos.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile requer um tipo genérico T", - "desc": [ - "【value】 : objeto do item 【T】", - "【groupValue】 : objeto selecionado 【T】", - "【selected】: está selecionado 【bool】", - "【secondary】: componente à direita 【Widget】", - "【title】: componente superior no centro 【Widget】", - "【subtitle】: componente inferior no centro 【Widget】", - "【onChanged】: evento de alternância 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "Cor de seleção e disposição densa do RadioListTile", - "desc": [ - "【activeColor】 : cor quando selecionado 【Color】", - "【dense】: disposição densa 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ru_RU.json deleted file mode 100644 index b4a2d170d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_ru_RU.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "Плитка с радиокнопкой", - "info": "Универсальная структура элемента списка, предоставляемая Flutter, имеет структуру с центром справа, в конце которой находится радиокнопка. В соответствующие позиции можно вставлять компоненты, что позволяет легко адаптироваться к определенным элементам.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile требует обобщенный тип T", - "desc": [ - "【value】 : объект элемента 【T】", - "【groupValue】 : выбранный объект 【T】", - "【selected】: выбран ли элемент 【bool】", - "【secondary】: правый компонент 【Widget】", - "【title】: верхний центральный компонент 【Widget】", - "【subtitle】: нижний центральный компонент 【Widget】", - "【onChanged】: событие переключения 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "Цвет выбора и плотное расположение RadioListTile", - "desc": [ - "【activeColor】 : цвет при выборе 【Color】", - "【dense】: плотное расположение 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_zh-CN.json deleted file mode 100644 index 814244243..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/desc_zh-CN.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "id": 19, - "name": "RadioListTile", - "localName": "选钮瓦片", - "info": "Flutter提供的一个通用列表条目结构,为中右结构,尾部是一个Radio。相应位置可插入组件,可以很方便地应对特定的条目。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RadioListTile需要一个泛型T", - "desc": [ - "【value】 : 条目对象 【T】", - "【groupValue】 : 选中对象 【T】", - "【selected】: 是否选中 【bool】", - "【secondary】: 右侧组件 【Widget】", - "【title】: 中间上组件 【Widget】", - "【subtitle】: 中间下组件 【Widget】", - "【onChanged】: 切换事件 【Function(T)】" - ] - }, - { - "file": "node2_dense.dart", - "name": "RadioListTile选中色和密排", - "desc": [ - "【activeColor】 : 选中时颜色 【Color】", - "【dense】: 是否密排 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/node1_base.dart deleted file mode 100644 index 9e32a0cf7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/node1_base.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - - -enum ItemType { - java, - kotlin, - dart, -} - -class ItemBean { - final String title; - final String subTitle; - final String imgUrl; - - ItemBean(this.title, this.subTitle, this.imgUrl); -} - -class CustomRadioListTile extends StatefulWidget { - const CustomRadioListTile({Key? key}) : super(key: key); - - @override - _CustomRadioListTileState createState() => _CustomRadioListTileState(); -} - -class _CustomRadioListTileState extends State { - final Map languages = { - ItemType.java: - ItemBean("Java", "曾经世界上最流行的语言", "assets/images/java.webp"), - ItemType.kotlin: - ItemBean("Kotlin", "未来世界上最流行的语言", "assets/images/kotlin.webp"), - ItemType.dart: - ItemBean("Dart", "世界上最优雅的语言", "assets/images/dart.webp"), - }; - ItemType _type = ItemType.java; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.grey.withAlpha(11), - child: Column( - mainAxisSize: MainAxisSize.min, - children: languages.keys - .map((type) => RadioListTile( - value: type, - groupValue: _type, - title: Text(languages[type]!.title), - subtitle: Text(languages[type]!.subTitle), - selected: _type == type, - secondary: CircleAvatar( - backgroundImage: AssetImage(languages[type]!.imgUrl), - ), - onChanged: (ItemType? type) => setState(() => _type = type?? _type), - )) - .toList()), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/node2_dense.dart b/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/node2_dense.dart deleted file mode 100644 index dcbd3e3c0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RadioListTile/node2_dense.dart +++ /dev/null @@ -1,61 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - - -enum ItemType { - java, - kotlin, - dart, -} - -class ItemBean { - final String title; - final String subTitle; - final String imgUrl; - - ItemBean(this.title, this.subTitle, this.imgUrl); -} - -class DenseRadioListTile extends StatefulWidget { - const DenseRadioListTile({Key? key}) : super(key: key); - - @override - _DenseRadioListTileState createState() => _DenseRadioListTileState(); -} - -class _DenseRadioListTileState extends State { - final Map languages = { - ItemType.java: ItemBean("Java", "曾经世界上最流行的语言", "assets/images/java.webp"), - ItemType.kotlin: - ItemBean("Kotlin", "未来世界上最流行的语言", "assets/images/kotlin.webp"), - ItemType.dart: ItemBean("Dart", "世界上最优雅的语言", "assets/images/dart.webp"), - }; - ItemType _type = ItemType.java; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.grey.withAlpha(11), - child: Column( - mainAxisSize: MainAxisSize.min, - children: languages.keys - .map((type) => RadioListTile( - value: type, - groupValue: _type, - title: Text(languages[type]!.title), - activeColor: Colors.orangeAccent, - dense: true, - subtitle: Text(languages[type]!.subTitle), - selected: _type == type, - secondary: CircleAvatar( - backgroundImage: AssetImage(languages[type]!.imgUrl), - ), - onChanged: (ItemType? type) => - setState(() => _type = type ?? _type), - )) - .toList()), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_de_DE.json deleted file mode 100644 index f18bf9939..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_de_DE.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "Erhobener Button", - "info": "Ein Button mit Schatten, basierend auf MaterialButton, alle Eigenschaften ähneln MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RaisedButton Klick-Ereignis", - "desc": [ - "【color】: Farbe 【Color】", - "【splashColor】: Wasserwellenfarbe 【Color】", - "【elevation】: Schattentiefe 【double】", - "【child】: Untergeordnete Komponente 【Widget】", - "【textColor】: Textfarbe der Untergeordneten Komponente 【Color】", - "【highlightColor】: Hervorhebungsfarbe bei langem Drücken 【Color】", - "【padding】: Innenabstand 【EdgeInsetsGeometry】", - "【onPressed】: Klick-Ereignis 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'RaisedButton wurde in Flutter 3.3 aus dem Verkehr gezogen. Der Ersatz ist der ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_en_US.json deleted file mode 100644 index 44af003d6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_en_US.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "Raised Button", - "info": "A raised button with shadow, implemented based on MaterialButton, with all properties similar to MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RaisedButton Click Event", - "desc": [ - "【color】: Color 【Color】", - "【splashColor】: Ripple Color 【Color】", - "【elevation】: Shadow Depth 【double】", - "【child】: Child Widget 【Widget】", - "【textColor】: Child Widget Text Color 【Color】", - "【highlightColor】: Long Press Highlight Color 【Color】", - "【padding】: Padding 【EdgeInsetsGeometry】", - "【onPressed】: Click Event 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'RaisedButton button has exited the stage in Flutter 3.3. The replacement is the ElevatedButton button.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_es_ES.json deleted file mode 100644 index ed720d07d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_es_ES.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "Botón elevado", - "info": "Un botón elevado con sombra, implementado basado en MaterialButton, todas las propiedades son similares a MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de clic de RaisedButton", - "desc": [ - "【color】: Color 【Color】", - "【splashColor】: Color de la onda 【Color】", - "【elevation】: Profundidad de la sombra 【double】", - "【child】: Widget hijo 【Widget】", - "【textColor】: Color del texto del widget hijo 【Color】", - "【highlightColor】: Color de resaltado al mantener presionado 【Color】", - "【padding】: Relleno interno 【EdgeInsetsGeometry】", - "【onPressed】: Evento de clic 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'El botón RaisedButton ha dejado de usarse a partir de Flutter 3.3. Su reemplazo es el botón ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_fr_FR.json deleted file mode 100644 index 27552483f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_fr_FR.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "Bouton surélevé", - "info": "Bouton surélevé avec ombre, basé sur MaterialButton, toutes les propriétés sont similaires à MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Événement de clic sur RaisedButton", - "desc": [ - "【color】: Couleur 【Color】", - "【splashColor】: Couleur de l'effet de vague 【Color】", - "【elevation】: Profondeur de l'ombre 【double】", - "【child】: Composant enfant 【Widget】", - "【textColor】: Couleur du texte du composant enfant 【Color】", - "【highlightColor】: Couleur de surbrillance lors d'un appui long 【Color】", - "【padding】: Marge intérieure 【EdgeInsetsGeometry】", - "【onPressed】: Événement de clic 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Le bouton RaisedButton a quitté la scène historique avec Flutter 3.3. Il est remplacé par le bouton ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_it_IT.json deleted file mode 100644 index c2a30a3ab..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_it_IT.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "Pulsante sollevato", - "info": "Un pulsante sollevato con ombre, basato su MaterialButton, con proprietà simili a MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento di clic di RaisedButton", - "desc": [ - "【color】: Colore 【Color】", - "【splashColor】: Colore dell'effetto splash 【Color】", - "【elevation】: Profondità dell'ombra 【double】", - "【child】: Widget figlio 【Widget】", - "【textColor】: Colore del testo del widget figlio 【Color】", - "【highlightColor】: Colore di evidenziazione durante il press lungo 【Color】", - "【padding】: Spaziatura interna 【EdgeInsetsGeometry】", - "【onPressed】: Evento di clic 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Il pulsante RaisedButton è uscito di scena in Flutter 3.3. Il suo sostituto è il pulsante ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ja_JP.json deleted file mode 100644 index 9e5f8b39a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ja_JP.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "浮き上がるボタン", - "info": "影付きの浮き上がるボタンで、MaterialButtonを基に実装されています。すべてのプロパティはMaterialButtonと同様です。", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RaisedButtonクリックイベント", - "desc": [ - "【color】: 色 【Color】", - "【splashColor】: 波紋の色 【Color】", - "【elevation】: 影の深さ 【double】", - "【child】: 子ウィジェット 【Widget】", - "【textColor】: 子ウィジェットのテキスト色 【Color】", - "【highlightColor】: 長押し時のハイライト色 【Color】", - "【padding】: パディング 【EdgeInsetsGeometry】", - "【onPressed】: クリックイベント 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'RaisedButton ボタンは Flutter3.3 で歴史の舞台から退きました。代替として ElevatedButton ボタンがあります。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ko_KR.json deleted file mode 100644 index a23105c74..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ko_KR.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "떠오르는 버튼", - "info": "그림자가 있는 떠오르는 버튼, MaterialButton을 기반으로 구현되었으며 모든 속성은 MaterialButton과 유사합니다.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RaisedButton 클릭 이벤트", - "desc": [ - "【color】: 색상 【Color】", - "【splashColor】: 물결 효과 색상 【Color】", - "【elevation】: 그림자 깊이 【double】", - "【child】: 자식 위젯 【Widget】", - "【textColor】: 자식 위젯 텍스트 색상 【Color】", - "【highlightColor】: 길게 누를 때 강조 색상 【Color】", - "【padding】: 안쪽 여백 【EdgeInsetsGeometry】", - "【onPressed】: 클릭 이벤트 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'RaisedButton 버튼은 Flutter3.3에서 역사의 뒤안길로 사라졌습니다. 대체 버튼은 ElevatedButton입니다.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_pt_PT.json deleted file mode 100644 index 40fb855cf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_pt_PT.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "Botão Elevado", - "info": "Um botão elevado com sombra, baseado no MaterialButton, com todas as propriedades semelhantes ao MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Evento de Clique do RaisedButton", - "desc": [ - "【color】: Cor 【Color】", - "【splashColor】: Cor do efeito de onda 【Color】", - "【elevation】: Profundidade da sombra 【double】", - "【child】: Widget filho 【Widget】", - "【textColor】: Cor do texto do widget filho 【Color】", - "【highlightColor】: Cor de destaque ao pressionar 【Color】", - "【padding】: Espaçamento interno 【EdgeInsetsGeometry】", - "【onPressed】: Evento de clique 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'O botão RaisedButton foi descontinuado no Flutter 3.3. O substituto é o botão ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ru_RU.json deleted file mode 100644 index fccd3d2ea..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_ru_RU.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "Кнопка с тенью", - "info": "Кнопка с тенью, реализованная на основе MaterialButton, все свойства аналогичны MaterialButton.", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Событие нажатия RaisedButton", - "desc": [ - "【color】: Цвет 【Color】", - "【splashColor】: Цвол водной ряби 【Color】", - "【elevation】: Глубина тени 【double】", - "【child】: Дочерний виджет 【Widget】", - "【textColor】: Цвет текста дочернего виджета 【Color】", - "【highlightColor】: Цвет подсветки при длительном нажатии 【Color】", - "【padding】: Внутренние отступы 【EdgeInsetsGeometry】", - "【onPressed】: Событие нажатия 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'Кнопка RaisedButton ушла с исторической сцены в Flutter 3.3. Её заменила кнопка ElevatedButton.';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_zh-CN.json deleted file mode 100644 index e1cac5feb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/desc_zh-CN.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "id": 26, - "name": "RaisedButton", - "localName": "浮起按钮", - "info": "有阴影的浮起按钮,基于MaterialButton实现,所有属性和MaterialButton类似。", - "lever": 3, - "family": 0, - "deprecated": -1, - "linkIds": [ - 24, - 25, - 27, - 175 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RaisedButton点击事件", - "desc": [ - "【color】: 颜色 【Color】", - "【splashColor】: 水波纹颜色 【Color】", - "【elevation】: 影深 【double】", - "【child】: 子组件 【Widget】", - "【textColor】: 子组件文字颜色 【Color】", - "【highlightColor】: 长按高亮色 【Color】", - "【padding】: 内边距 【EdgeInsetsGeometry】", - "【onPressed】: 点击事件 【Function】", - " ", - "", - "class CustomRaisedButton extends StatelessWidget {", - " const CustomRaisedButton({Key? key) : super(key: key);", - "", - " final String info =", - " 'RaisedButton 按钮于 Flutter3.3 退出历史舞台。取代者为 ElevatedButton 按钮。';", - "", - " @override", - " Widget build(BuildContext context) {", - " return Container(", - " color: Colors.blue.withOpacity(0.1),", - " padding: const EdgeInsets.all(10),", - " margin: const EdgeInsets.all(10),", - " child: Text(info),", - " );", - " ", - "", - " @override", - " Widget build(BuildContext context) {", - " return RaisedButton(", - " color: Colors.blue,", - " splashColor: Colors.green,", - " onPressed: () {,", - " child: const Text(\"RaisedButton\"),", - " textColor: const Color(0xffFfffff),", - " padding: const EdgeInsets.all(8),", - " elevation: 5,", - " highlightColor: const Color(0xffF88B0A)," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/node1_base.dart deleted file mode 100644 index f8123b6a3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RaisedButton/node1_base.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class CustomRaisedButton extends StatelessWidget { - const CustomRaisedButton({Key? key}) : super(key: key); - - final String info = - 'RaisedButton 按钮于 Flutter3.3 退出历史舞台。取代者为 ElevatedButton 按钮。'; - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_de_DE.json deleted file mode 100644 index 8ebab7344..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "Originalle Lupe", - "info": "Eine Lupe, die jede Komponente darunter vergrößern kann. Kann Eigenschaften wie Dekorationsform, Größe, Versatz usw. festlegen.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Einfache Verwendung von RawMagnifier", - "desc": [ - "【size】: Größe 【Size】", - "【magnificationScale】: Vergrößerungsmaßstab 【double】", - "【focalPointOffset】: Versatz des vergrößerten Inhalts 【Offset】", - "【decoration】: Dekoration entdecken 【MagnifierDecoration】", - "【child】: Untergeordnete Komponente 【Widget?】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Benutzerdefinierte Dekorationsform für RawMagnifier", - "desc": [ - "Hier wird eine benutzerdefinierte fünfzackige Dekorationsform erstellt" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_en_US.json deleted file mode 100644 index 0000d3448..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "Original Magnifier", - "info": "A magnifier that can magnify any component below it. Properties such as decoration shape, size, offset, etc., can be set.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Simple use of RawMagnifier", - "desc": [ - "【size】: Size 【Size】", - "【magnificationScale】: Magnification 【double】", - "【focalPointOffset】: Magnification content offset 【Offset】", - "【decoration】: Decoration 【MagnifierDecoration】", - "【child】: Child component 【Widget?】" - ] - }, - { - "file": "node2_shape.dart", - "name": "Custom decoration shape for RawMagnifier", - "desc": [ - "Customize the five-pointed star decoration shape here" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_es_ES.json deleted file mode 100644 index f9ddd7fa0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "Lupa original", - "info": "Una lupa que puede ampliar cualquier componente debajo, permite configurar propiedades como la forma de decoración, tamaño, desplazamiento, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de RawMagnifier", - "desc": [ - "【size】: Tamaño 【Size】", - "【magnificationScale】: Escala de ampliación 【double】", - "【focalPointOffset】: Desplazamiento del contenido ampliado 【Offset】", - "【decoration】: Decoración de la lupa 【MagnifierDecoration】", - "【child】: Componente hijo 【Widget?】," - ] - }, - { - "file": "node2_shape.dart", - "name": "Forma de decoración personalizada de RawMagnifier", - "desc": [ - "Aquí se personaliza la forma de decoración en estrella de cinco puntas" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_fr_FR.json deleted file mode 100644 index 7238b8f70..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "Loupe brute", - "info": "Une loupe qui peut agrandir n'importe quel composant en dessous, avec des propriétés réglables telles que la forme de décoration, la taille, le décalage, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation simple de RawMagnifier", - "desc": [ - "【size】 : Taille 【Size】", - "【magnificationScale】 : Échelle de grossissement 【double】", - "【focalPointOffset】: Décalage du point focal 【Offset】", - "【decoration】: Décoration de découverte 【MagnifierDecoration】", - "【child】: Composant enfant 【Widget?】," - ] - }, - { - "file": "node2_shape.dart", - "name": "Forme de décoration personnalisée de RawMagnifier", - "desc": [ - "Ici, une forme de décoration en étoile à cinq branches personnalisée" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_it_IT.json deleted file mode 100644 index d8de73b79..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "Lente d'ingrandimento originale", - "info": "Una lente d'ingrandimento che può ingrandire qualsiasi componente sottostante, con proprietà come forma decorativa, dimensioni, offset, ecc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso semplice di RawMagnifier", - "desc": [ - "【size】 : Dimensioni 【Size】", - "【magnificationScale】 : Fattore di ingrandimento 【double】", - "【focalPointOffset】: Offset del contenuto ingrandito 【Offset】", - "【decoration】: Decorazione scoperta 【MagnifierDecoration】", - "【child】: Componente figlio 【Widget?】," - ] - }, - { - "file": "node2_shape.dart", - "name": "Forma decorativa personalizzata di RawMagnifier", - "desc": [ - "Qui viene personalizzata la forma decorativa a stella a cinque punte" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ja_JP.json deleted file mode 100644 index 363187ab4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "原拡大鏡", - "info": "任意のコンポーネントを拡大する拡大鏡で、装飾形状、サイズ、オフセットなどのプロパティを設定できます。", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawMagnifier の簡単な使用", - "desc": [ - "【size】 : サイズ 【Size】", - "【magnificationScale】 : 倍率 【double】", - "【focalPointOffset】: 拡大内容のオフセット 【Offset】", - "【decoration】: 装飾を発見 【MagnifierDecoration】", - "【child】: 子コンポーネント 【Widget?】," - ] - }, - { - "file": "node2_shape.dart", - "name": "RawMagnifier カスタム装飾形状", - "desc": [ - "ここで五角形の装飾形状をカスタマイズします" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ko_KR.json deleted file mode 100644 index 3f6e40366..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "원 확대경", - "info": "아래의 임의의 컴포넌트를 확대할 수 있는 확대경으로, 장식 모양, 크기, 오프셋 등의 속성을 설정할 수 있습니다.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawMagnifier의 간단한 사용", - "desc": [ - "【size】 : 크기 【Size】", - "【magnificationScale】 : 확대 배율 【double】", - "【focalPointOffset】: 확대 내용 오프셋 【Offset】", - "【decoration】: 장식 발견 【MagnifierDecoration】", - "【child】: 자식 컴포넌트 【Widget?】," - ] - }, - { - "file": "node2_shape.dart", - "name": "RawMagnifier 사용자 정의 장식 모양", - "desc": [ - "여기서 사용자 정의 오각형 장식 모양" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_pt_PT.json deleted file mode 100644 index fab2680dc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "Lupa Original", - "info": "Uma lupa que pode ampliar qualquer componente abaixo, com propriedades configuráveis como forma de decoração, tamanho, deslocamento, etc.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso simples do RawMagnifier", - "desc": [ - "【size】 : Tamanho 【Size】", - "【magnificationScale】 : Escala de ampliação 【double】", - "【focalPointOffset】: Deslocamento do conteúdo ampliado 【Offset】", - "【decoration】: Decoração descoberta 【MagnifierDecoration】", - "【child】: Componente filho 【Widget?】," - ] - }, - { - "file": "node2_shape.dart", - "name": "Forma de decoração personalizada do RawMagnifier", - "desc": [ - "Aqui, personaliza-se a forma de decoração em estrela de cinco pontas" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ru_RU.json deleted file mode 100644 index 43de5b17c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "Исходная лупа", - "info": "Лупа, которая может увеличивать любой компонент под ней, можно настроить такие свойства, как форма декора, размер, смещение и т.д.", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Простое использование RawMagnifier", - "desc": [ - "【size】 : Размер 【Size】", - "【magnificationScale】 : Увеличение 【double】", - "【focalPointOffset】: Смещение увеличенного содержимого 【Offset】", - "【decoration】: Обнаружение декора 【MagnifierDecoration】", - "【child】: Дочерний компонент 【Widget?】," - ] - }, - { - "file": "node2_shape.dart", - "name": "Пользовательская форма декора RawMagnifier", - "desc": [ - "Здесь пользовательская форма декора в виде пятиконечной звезды" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_zh-CN.json deleted file mode 100644 index 0eb7cf711..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 360, - "name": "RawMagnifier", - "localName": "原放大镜", - "info": "一个可以放大下方任意组件的放大镜,可以设置装饰形状、尺寸、偏移量等属性。", - "lever": 4, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "RawMagnifier 的简单使用", - "desc": [ - "【size】 : 尺寸 【Size】", - "【magnificationScale】 : 放大倍率 【double】", - "【focalPointOffset】: 放大内容偏移量 【Offset】", - "【decoration】: 发现装饰 【MagnifierDecoration】", - "【child】: 子组件 【Widget?】," - ] - }, - { - "file": "node2_shape.dart", - "name": "RawMagnifier 自定义装饰形状", - "desc": [ - "这里自定义五角星装饰形状" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/node1_base.dart deleted file mode 100644 index a391e6224..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/node1_base.dart +++ /dev/null @@ -1,76 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class MagnifierCircleShape extends StatefulWidget{ - - const MagnifierCircleShape({super.key}); - - @override - State createState() => _MagnifierCircleShapeState(); -} - -class _MagnifierCircleShapeState extends State { - final Size magnifierSize = const Size(150, 150); - - @override - Widget build(BuildContext context) { - return Stack( - alignment: Alignment.center, - children: [ - GestureDetector( - onPanDown: _onPanDown, - onPanEnd: _onPanEnd, - onPanUpdate: _onPanUpdate, - onPanCancel: _onPanCancel, - child: Image.asset('assets/images/sabar_bar.webp')), - Text("张风捷特烈",style: TextStyle(color: Colors.white),), - if(_show) - Positioned( - left: _dragGesturePosition.dx, - top: _dragGesturePosition.dy, - child: _buildMagnifier()), - ], - ); - } - - Widget _buildMagnifier(){ - return RawMagnifier( - decoration: const MagnifierDecoration( - shape: CircleBorder( - side: BorderSide(color: Colors.blue, width: 2), - ), - ), - size: magnifierSize, - // focalPointOffset: Offset(-10, 0), - magnificationScale: 3, - ); - } - - Offset _dragGesturePosition = Offset.zero; - bool _show = false; - - void _onPanDown(DragDownDetails details) { - _dragGesturePosition = details.localPosition-Offset(magnifierSize.width/2,magnifierSize.height/2); - _show = true; - setState(() { - - }); - } - - void _onPanEnd(DragEndDetails details) { - setState(() => _show = false); - } - - void _onPanUpdate(DragUpdateDetails details) { - _dragGesturePosition = details.localPosition-Offset(magnifierSize.width/2,magnifierSize.height/2); - setState(() { - - }); - } - - void _onPanCancel() { - setState(() => _show = false); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/node2_shape.dart b/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/node2_shape.dart deleted file mode 100644 index 69fd15080..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/RawMagnifier/node2_shape.dart +++ /dev/null @@ -1,117 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class MagnifierStarShape extends StatefulWidget{ - - const MagnifierStarShape({super.key}); - - @override - State createState() => _MagnifierStarShapeState(); -} - -class _MagnifierStarShapeState extends State { - final Size magnifierSize = const Size(150, 150); - - @override - Widget build(BuildContext context) { - return Stack( - alignment: Alignment.center, - children: [ - GestureDetector( - onPanDown: _onPanDown, - onPanEnd: _onPanEnd, - onPanUpdate: _onPanUpdate, - onPanCancel: _onPanCancel, - child: Image.asset('assets/images/sabar_bar.webp')), - Text("张风捷特烈",style: TextStyle(color: Colors.white),), - if(_show) - Positioned( - left: _dragGesturePosition.dx, - top: _dragGesturePosition.dy, - child: _buildMagnifier()), - ], - ); - } - - Widget _buildMagnifier(){ - return RawMagnifier( - decoration: MagnifierDecoration( - shape: _StarShapeBorder(), - ), - size: magnifierSize, - // focalPointOffset: Offset(-10, 0), - magnificationScale: 3, - ); - } - - Offset _dragGesturePosition = Offset.zero; - bool _show = false; - - void _onPanDown(DragDownDetails details) { - _dragGesturePosition = details.localPosition-Offset(magnifierSize.width/2,magnifierSize.height/2); - _show = true; - setState(() { - - }); - } - - void _onPanEnd(DragEndDetails details) { - setState(() => _show = false); - } - - void _onPanUpdate(DragUpdateDetails details) { - _dragGesturePosition = details.localPosition-Offset(magnifierSize.width/2,magnifierSize.height/2); - setState(() { - - }); - } - - void _onPanCancel() { - setState(() => _show = false); - } -} - -class _StarShapeBorder extends ShapeBorder { - final Path _path = Path(); - - @override - EdgeInsetsGeometry get dimensions => EdgeInsets.zero; - - @override - Path getInnerPath(Rect rect, {TextDirection? textDirection}) { - return Path(); - } - - @override - Path getOuterPath(Rect rect, {TextDirection? textDirection}) => - nStarPath(5, rect.height / 2, rect.height / 2 * 0.5, - dx: rect.width / 2, dy: rect.height / 2); - - @override - void paint(Canvas canvas, Rect rect, {TextDirection? textDirection}) { - Paint paint = Paint()..style=PaintingStyle.stroke..color=Colors.blue..strokeWidth =2; - canvas.drawPath(getOuterPath(rect), paint); - } - - Path nStarPath(int num, double R, double r, {dx = 0, dy = 0}) { - double perRad = 2 * pi / num; - double radA = perRad / 2 / 2; - double radB = 2 * pi / (num - 1) / 2 - radA / 2 + radA; - _path.moveTo(cos(radA) * R + dx, -sin(radA) * R + dy); - for (int i = 0; i < num; i++) { - _path.lineTo( - cos(radA + perRad * i) * R + dx, -sin(radA + perRad * i) * R + dy); - _path.lineTo( - cos(radB + perRad * i) * r + dx, -sin(radB + perRad * i) * r + dy); - } - _path.close(); - return _path; - } - - @override - ShapeBorder scale(double t) => this; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_de_DE.json deleted file mode 100644 index 74eedc963..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_de_DE.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "Sicherheitsbereich", - "info": "Durch das Hinzufügen von Innenabständen werden Layoutprobleme angepasst, die durch die Besonderheiten einiger Handys (abgerundete Ecken, Notch-Display usw.) verursacht werden.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SafeArea Verwendungstest", - "desc": [ - "【left】 : Ob die linke Seite aktiviert ist 【bool】", - "【top】 : Ob die obere Seite aktiviert ist 【bool】", - "【bottom】 : Ob die untere Seite aktiviert ist 【bool】", - "【right】 : Ob die rechte Seite aktiviert ist 【bool】", - "【child】 : Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_en_US.json deleted file mode 100644 index e50a9b22a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_en_US.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "Safe Area", - "info": "Adapts layout issues caused by some phone-specific features (rounded corners, notches, etc.) by adding padding.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SafeArea Usage Test", - "desc": [ - "【left】: Whether to enable the left side 【bool】", - "【top】: Whether to enable the top 【bool】", - "【bottom】: Whether to enable the bottom 【bool】", - "【right】: Whether to enable the right side 【bool】", - "【child】: Child widget 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_es_ES.json deleted file mode 100644 index 0f677038b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_es_ES.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "Área segura", - "info": "Adapta los problemas de diseño causados por las características especiales de algunos teléfonos (esquinas redondeadas, muescas, etc.) mediante la adición de relleno.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Prueba de uso de SafeArea", - "desc": [ - "【left】 : Si está habilitado en el lado izquierdo 【bool】", - "【top】 : Si está habilitado en la parte superior 【bool】", - "【bottom】 : Si está habilitado en la parte inferior 【bool】", - "【right】 : Si está habilitado en el lado derecho 【bool】", - "【child】 : Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_fr_FR.json deleted file mode 100644 index dff12976f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_fr_FR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "Zone de sécurité", - "info": "Adapte les problèmes de mise en page causés par les particularités de certains téléphones (coins arrondis, encoche, etc.) en ajoutant des marges intérieures.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Test d'utilisation de SafeArea", - "desc": [ - "【left】 : Activer à gauche 【bool】", - "【top】 : Activer en haut 【bool】", - "【bottom】 : Activer en bas 【bool】", - "【right】 : Activer à droite 【bool】", - "【child】 : Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_it_IT.json deleted file mode 100644 index b53272198..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_it_IT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "Area Sicura", - "info": "Adatta i problemi di layout causati da alcune caratteristiche speciali dei telefoni (angoli arrotondati, notch, ecc.) aggiungendo un padding.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Test di utilizzo di SafeArea", - "desc": [ - "【left】 : Se abilitare il lato sinistro 【bool】", - "【top】 : Se abilitare la parte superiore 【bool】", - "【bottom】 : Se abilitare la parte inferiore 【bool】", - "【right】 : Se abilitare il lato destro 【bool】", - "【child】 : Widget figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ja_JP.json deleted file mode 100644 index f1b2021a3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ja_JP.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "セーフエリア", - "info": "パディングを追加することで、一部のスマートフォンの特殊性(角丸、ノッチスクリーンなど)によるレイアウトの問題に対応します。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SafeArea 使用テスト", - "desc": [ - "【left】 : 左側を有効にするか 【bool】", - "【top】 : 上部を有効にするか 【bool】", - "【bottom】 : 下部を有効にするか 【bool】", - "【right】 : 右側を有効にするか 【bool】", - "【child】 : 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ko_KR.json deleted file mode 100644 index c9cd66afa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ko_KR.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "안전 영역", - "info": "일부 휴대폰의 특수성(둥근 모서리, 노치 등)으로 인한 레이아웃 문제를 해결하기 위해 패딩을 추가합니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SafeArea 사용 테스트", - "desc": [ - "【left】 : 왼쪽 활성화 여부 【bool】", - "【top】 : 상단 활성화 여부 【bool】", - "【bottom】 : 하단 활성화 여부 【bool】", - "【right】 : 오른쪽 활성화 여부 【bool】", - "【child】 : 자식 위젯 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_pt_PT.json deleted file mode 100644 index 40f34adaf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_pt_PT.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "Área Segura", - "info": "Adapta problemas de layout causados por características especiais de alguns telemóveis (cantos arredondados, entalhes, etc.) através da adição de padding.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Teste de uso do SafeArea", - "desc": [ - "【left】 : Ativar à esquerda 【bool】", - "【top】 : Ativar no topo 【bool】", - "【bottom】 : Ativar na parte inferior 【bool】", - "【right】 : Ativar à direita 【bool】", - "【child】 : Componente filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ru_RU.json deleted file mode 100644 index 3b34bfc8c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_ru_RU.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "Безопасная зона", - "info": "Путём добавления внутренних отступов адаптирует проблемы макета, вызванные особенностями некоторых телефонов (скруглённые углы, вырез для камеры и т.д.).", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Тестирование использования SafeArea", - "desc": [ - "【left】 : Включено ли слева 【bool】", - "【top】 : Включено ли сверху 【bool】", - "【bottom】 : Включено ли снизу 【bool】", - "【right】 : Включено ли справа 【bool】", - "【child】 : Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_zh-CN.json deleted file mode 100644 index b0c52070a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/desc_zh-CN.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "id": 207, - "name": "SafeArea", - "localName": "安全区", - "info": "通过添加内边距,来适配一些手机本身特殊性(圆角、刘海屏等)而所造成的布局问题。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SafeArea 使用测试", - "desc": [ - "【left】 : 左侧是否启用 【bool】", - "【top】 : 上方是否启用 【bool】", - "【bottom】 : 下方是否启用 【bool】", - "【right】 : 右侧是否启用 【bool】", - "【child】 : 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/node1_base.dart deleted file mode 100644 index d32b2dc5b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SafeArea/node1_base.dart +++ /dev/null @@ -1,116 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class SafeAreaDemo extends StatelessWidget { - const SafeAreaDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.all(10), - child: ElevatedButton( - onPressed: () { - Navigator.push( - context, - MaterialPageRoute(builder: (context) => const SafeAreaPage()), - ); - }, - child: const Text("进入 SafeArea 测试页"), - ), - ); - } -} - -class SafeAreaPage extends StatefulWidget { - const SafeAreaPage({Key? key}) : super(key: key); - - @override - _SafeAreaPageState createState() => _SafeAreaPageState(); -} - -class _SafeAreaPageState extends State { - bool _top = true; - bool _left = true; - bool _right = true; - bool _bottom = true; - - @override - Widget build(BuildContext context) { - return SafeArea( - top: _top, - left: _left, - right: _right, - bottom: _bottom, - child: Scaffold( - appBar: AppBar( - title: const Text( - 'SafeArea 测试', - ), - ), - body: Column( - children: [ - ..._buildSlider(), - Expanded( - child: ListView.separated( - itemCount: 20, - separatorBuilder: (_, __) => const Divider( - height: 1, - ), - itemBuilder: (_, index) => Container( - color: Colors.blue, - // padding: EdgeInsets.only(left: 20), - alignment: Alignment.center, - height: 50, - child: Text( - "第$index个", - style: const TextStyle(fontSize: 24, color: Colors.white), - ), - ), - ), - ), - ], - ), - ), - ); - } - - List _buildSlider()=>[Row( - children: [ - Switch( - value: _top, - onChanged: (v) => setState(() => _top = v), - ), - Text("top: $_top") - ], - ), - Row( - children: [ - Switch( - value: _left, - onChanged: (v) => setState(() => _left = v), - ), - Text("left: $_left") - ], - ), - Row( - children: [ - Switch( - value: _right, - onChanged: (v) => setState(() => _right = v), - ), - Text("right: $_right") - ], - ), - Row( - children: [ - Switch( - value: _bottom, - onChanged: (v) => setState(() => _bottom = v), - ), - Text("bottom: $_bottom") - ], - ),]; -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_de_DE.json deleted file mode 100644 index 360fd9acb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "Bildlaufansicht", - "info": "Diese Komponente wird zur Unterstützung des Scrollens verwendet. Diese Klasse ist eine abstrakte Klasse und kann daher nicht direkt verwendet werden. Sie hat viele Implementierungsklassen wie CustomScrollView, BoxScrollView, ListView und GridView.", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScrollView Einführung", - "desc": [ - "【reverse】 : Ob umgekehrt 【bool】", - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【cacheExtent】 : Cache-Länge 【double】", - "【dragStartBehavior】 : Ziehverhalten 【DragStartBehavior】", - "【clipBehavior】 : Ausschneideverhalten 【ClipBehavior】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_en_US.json deleted file mode 100644 index ba557c9b1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "Scroll View", - "info": "This component is used to support scrolling. This class is an abstract class, so it cannot be used directly. It has many implementation classes, such as CustomScrollView, BoxScrollView, ListView, and GridView.", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction to ScrollView", - "desc": [ - "【reverse】: Whether to reverse 【bool】", - "【scrollDirection】: Scroll direction 【Axis】", - "【cacheExtent】: Cache length 【double】", - "【dragStartBehavior】: Drag behavior 【DragStartBehavior】", - "【clipBehavior】: Clip behavior 【ClipBehavior】", - "【controller】: Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_es_ES.json deleted file mode 100644 index 11607c3f3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "Vista de desplazamiento", - "info": "Este componente se utiliza para soportar el desplazamiento, esta clase es una clase abstracta, por lo que no se puede usar directamente, tiene muchas clases de implementación, como CustomScrollView, BoxScrollView, ListView, GridView.", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introducción a ScrollView", - "desc": [ - "【reverse】 : Si es inverso 【bool】", - "【scrollDirection】 : Dirección de desplazamiento 【Axis】", - "【cacheExtent】 : Extensión de caché 【double】", - "【dragStartBehavior】 : Comportamiento de arrastre 【DragStartBehavior】", - "【clipBehavior】 : Comportamiento de recorte 【ClipBehavior】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_fr_FR.json deleted file mode 100644 index 555f79b25..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "Vue de défilement", - "info": "Ce composant est utilisé pour prendre en charge le défilement, cette classe est une classe abstraite, donc elle ne peut pas être utilisée directement, elle a de nombreuses classes d'implémentation, telles que CustomScrollView, BoxScrollView, ListView, GridView.", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduction à ScrollView", - "desc": [ - "【reverse】 : Inverser ou non 【bool】", - "【scrollDirection】 : Direction de défilement 【Axis】", - "【cacheExtent】 : Longueur de cache 【double】", - "【dragStartBehavior】 : Comportement de glissement 【DragStartBehavior】", - "【clipBehavior】 : Comportement de découpage 【ClipBehavior】", - "【controller】 : Contrôleur 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_it_IT.json deleted file mode 100644 index 8a725f26e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "Scorrimento Vista", - "info": "Questo componente è utilizzato per supportare lo scorrimento, questa classe è una classe astratta, quindi non può essere utilizzata direttamente, ha molte classi di implementazione, come CustomScrollView, BoxScrollView, ListView, GridView.", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introduzione a ScrollView", - "desc": [ - "【reverse】 : Se inverso 【bool】", - "【scrollDirection】 : Direzione di scorrimento 【Axis】", - "【cacheExtent】 : Estensione della cache 【double】", - "【dragStartBehavior】 : Comportamento di trascinamento 【DragStartBehavior】", - "【clipBehavior】 : Comportamento di ritaglio 【ClipBehavior】", - "【controller】 : Controller 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ja_JP.json deleted file mode 100644 index cfdd5527b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "スクロールビュー", - "info": "このコンポーネントはスクロールをサポートするために使用されます。このクラスは抽象クラスであるため、直接使用することはできません。CustomScrollView、BoxScrollView、ListView、GridViewなどの多くの実装クラスがあります。", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScrollView 紹介", - "desc": [ - "【reverse】 : 逆方向かどうか 【bool】", - "【scrollDirection】 : スクロール方向 【Axis】", - "【cacheExtent】 : キャッシュ長 【double】", - "【dragStartBehavior】 : ドラッグ動作 【DragStartBehavior】", - "【clipBehavior】 : クリップ動作 【ClipBehavior】", - "【controller】 : コントローラー 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ko_KR.json deleted file mode 100644 index b9d218386..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "스크롤 뷰", - "info": "이 컴포넌트는 스크롤을 지원하기 위해 사용됩니다. 이 클래스는 추상 클래스이므로 직접 사용할 수 없으며, CustomScrollView, BoxScrollView, ListView, GridView와 같은 많은 구현 클래스가 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScrollView 소개", - "desc": [ - "【reverse】 : 역방향 여부 【bool】", - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【cacheExtent】 : 캐시 길이 【double】", - "【dragStartBehavior】 : 드래그 시작 동작 【DragStartBehavior】", - "【clipBehavior】 : 클리핑 동작 【ClipBehavior】", - "【controller】 : 컨트롤러 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_pt_PT.json deleted file mode 100644 index 93d6fbaf9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "Rolagem de Visualização", - "info": "Este componente é usado para suporte de rolagem, esta classe é uma classe abstrata, portanto, não pode ser usada diretamente, tem muitas classes de implementação, como CustomScrollView, BoxScrollView, ListView, GridView.", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Introdução ao ScrollView", - "desc": [ - "【reverse】 : Se é reverso 【bool】", - "【scrollDirection】 : Direção de rolagem 【Axis】", - "【cacheExtent】 : Extensão do cache 【double】", - "【dragStartBehavior】 : Comportamento de arrasto 【DragStartBehavior】", - "【clipBehavior】 : Comportamento de corte 【ClipBehavior】", - "【controller】 : Controlador 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ru_RU.json deleted file mode 100644 index 6b6a0c112..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "Прокрутка", - "info": "Этот компонент используется для поддержки прокрутки. Этот класс является абстрактным, поэтому его нельзя использовать напрямую. У него есть много реализаций, таких как CustomScrollView, BoxScrollView, ListView, GridView.", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Введение в ScrollView", - "desc": [ - "【reverse】 : Обратный ли 【bool】", - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【cacheExtent】 : Длина кэша 【double】", - "【dragStartBehavior】 : Поведение перетаскивания 【DragStartBehavior】", - "【clipBehavior】 : Поведение обрезки 【ClipBehavior】", - "【controller】 : Контроллер 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_zh-CN.json deleted file mode 100644 index 78028aa7a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 349, - "name": "ScrollView", - "localName": "视滑动图", - "info": "该组件用于滑动的支持,该类是一个抽象类,所以无法直接使用,它有很多实现类,如 CustomScrollView、BoxScrollView、ListView、GridView。", - "lever": 2, - "family": 0, - "linkIds": [ - 183, - 162, - 163, - 253, - 340 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "ScrollView 介绍", - "desc": [ - "【reverse】 : 是否反向 【bool】", - "【scrollDirection】 : 滑动方向 【Axis】", - "【cacheExtent】 : 缓存长 【double】", - "【dragStartBehavior】 : 拖动行为 【DragStartBehavior】", - "【clipBehavior】 : 裁剪行为 【ClipBehavior】", - "【controller】 : 控制器 【ScrollController】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/node1_base.dart deleted file mode 100644 index a17fee85f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ScrollView/node1_base.dart +++ /dev/null @@ -1,103 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/9/21 -/// contact me by email 1981462002@qq.com - - -class ScrollViewDemo extends StatelessWidget { - const ScrollViewDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 300, - child: MyScrollView(), - ); - } -} - -class MyScrollView extends ScrollView { - MyScrollView({Key? key}) : super(key: key); - - final String info = - 'ScrollView 其内部依靠 Viewport + Scrollable 实现滑动。它只有一个 buildSlivers 的抽象方法,返回 Sliver 家族 Widget 列表,' - '其子类最简单的是 CustomScrollView,将 slivers 交由用户传递,自身打个酱油。' - 'ListView 和 GridView 在底层源码中也是使用 Sliver 家族相关组件实现的。'; - - final List data = [ - Colors.purple[50]!, - Colors.purple[100]!, - Colors.purple[200]!, - Colors.purple[300]!, - Colors.purple[400]!, - Colors.purple[500]!, - Colors.purple[600]!, - Colors.purple[700]!, - Colors.purple[800]!, - Colors.purple[900]!, - ]; - - @override - List buildSlivers(BuildContext context) { - return [ - _buildSliverAppBar(), - SliverToBoxAdapter( - child: Container( - color: Colors.blue.withOpacity(0.1), - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.all(10), - child: Text(info), - ), - ), - _buildSliverFixedExtentList() - ]; - } - - _buildSliverAppBar() { - return SliverAppBar( - expandedHeight: 190.0, - leading: Container( - margin: const EdgeInsets.all(10), - child: Image.asset('assets/images/icon_head.webp')), - flexibleSpace: FlexibleSpaceBar(//伸展处布局 - titlePadding: const EdgeInsets.only(left: 55, bottom: 15), //标题边距 - collapseMode: CollapseMode.parallax, //视差效果 - title: const Text( - '张风捷特烈', - style: TextStyle(color: Colors.black, //标题 - shadows: [ - Shadow(color: Colors.blue, offset: Offset(1, 1), blurRadius: 2) - ]), - ), - background: Image.asset( - "assets/images/caver.webp", - fit: BoxFit.cover, - ), - ), - ); - } - - Widget _buildSliverFixedExtentList() => SliverFixedExtentList( - itemExtent: 60, - delegate: SliverChildBuilderDelegate( - (_, int index) => Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: data[index], - child: Text( - colorString(data[index]), - style: const TextStyle(color: Colors.white, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2) - ]), - ), - ), - childCount: data.length), - ); - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_de_DE.json deleted file mode 100644 index b8fc3b81b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "Einfacher Dialog", - "info": "Eine einfache Dialogstruktur, die Kopf- und Mittelkomponenten angeben kann. Verfügt über Textstile und Ränder für Titel und Inhalt sowie Eigenschaften wie Schattentiefe und Form. Wird oft mit SimpleDialogOption verwendet.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SimpleDialog", - "desc": [ - "【title】 : Oberste Komponente 【Widget】", - "【children】 : Liste der Unterkomponenten 【List】", - "【titlePadding】 : Oberer Innenabstand 【EdgeInsetsGeometry】", - "【contentPadding】 : Innenabstand des Inhalts 【EdgeInsetsGeometry】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【elevation】 : Schattentiefe 【double】", - "【shape】 : Form 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_en_US.json deleted file mode 100644 index 7ed1afdf4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "Simple Dialog", - "info": "A simple dialog structure that allows specifying components for the header and middle sections. It has properties such as text styles and margins for the title and content, as well as shadow depth and shape. Often used in conjunction with SimpleDialogOption.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SimpleDialog", - "desc": [ - "【title】 : Top component 【Widget】", - "【children】 : List of child components 【List】", - "【titlePadding】 : Top padding 【EdgeInsetsGeometry】", - "【contentPadding】 : Content padding 【EdgeInsetsGeometry】", - "【backgroundColor】 : Background color 【Color】", - "【elevation】 : Shadow depth 【double】", - "【shape】 : Shape 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_es_ES.json deleted file mode 100644 index 338649a36..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "Cuadro de diálogo simple", - "info": "Una estructura de cuadro de diálogo simple que permite especificar componentes en la parte superior y central. Tiene estilos de texto y márgenes para el título y el contenido, así como propiedades como profundidad de sombra, forma, etc. A menudo se usa junto con SimpleDialogOption.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SimpleDialog", - "desc": [ - "【title】 : Componente superior 【Widget】", - "【children】 : Lista de componentes hijos 【List】", - "【titlePadding】 : Relleno superior 【EdgeInsetsGeometry】", - "【contentPadding】 : Relleno del contenido 【EdgeInsetsGeometry】", - "【backgroundColor】 : Color de fondo 【Color】", - "【elevation】 : Profundidad de sombra 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_fr_FR.json deleted file mode 100644 index a72754b59..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "Boîte de dialogue simple", - "info": "Une structure de boîte de dialogue simple qui permet de spécifier des composants pour l'en-tête et le corps. Elle possède des styles de texte pour le titre et le contenu, ainsi que des propriétés telles que les marges, la profondeur d'ombre, la forme, etc. Elle est souvent utilisée avec SimpleDialogOption.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SimpleDialog", - "desc": [ - "【title】 : Composant supérieur 【Widget】", - "【children】 : Liste des composants enfants 【List】", - "【titlePadding】 : Marge intérieure supérieure 【EdgeInsetsGeometry】", - "【contentPadding】 : Marge intérieure du contenu 【EdgeInsetsGeometry】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【elevation】 : Profondeur d'ombre 【double】", - "【shape】 : Forme 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_it_IT.json deleted file mode 100644 index 773932ec6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "Finestra di dialogo semplice", - "info": "Una struttura di finestra di dialogo semplice che consente di specificare i componenti nella parte superiore e centrale. Possiede stili di testo e margini per titoli e contenuti, nonché proprietà come profondità dell'ombra, forma, ecc. Spesso utilizzato in combinazione con SimpleDialogOption.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SimpleDialog", - "desc": [ - "【title】 : Componente superiore 【Widget】", - "【children】 : Lista dei componenti figli 【List】", - "【titlePadding】 : Spaziatura interna superiore 【EdgeInsetsGeometry】", - "【contentPadding】 : Spaziatura interna del contenuto 【EdgeInsetsGeometry】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【elevation】 : Profondità dell'ombra 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ja_JP.json deleted file mode 100644 index a75dac7b7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "シンプルダイアログ", - "info": "シンプルなダイアログ構造で、ヘッダーと中央のコンポーネントを指定できます。タイトルと内容のテキストスタイルとマージン、影の深さ、形状などの属性を持っています。SimpleDialogOptionと一緒に使用されることが多いです。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SimpleDialogの基本使用", - "desc": [ - "【title】 : トップコンポーネント 【Widget】", - "【children】 : 子コンポーネントリスト 【List】", - "【titlePadding】 : トップパディング 【EdgeInsetsGeometry】", - "【contentPadding】 : コンテンツパディング 【EdgeInsetsGeometry】", - "【backgroundColor】 : 背景色 【Color】", - "【elevation】 : 影の深さ 【double】", - "【shape】 : 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ko_KR.json deleted file mode 100644 index ceef0b963..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "간단한 대화 상자", - "info": "간단한 대화 상자 구조로, 상단과 중간의 컴포넌트를 지정할 수 있습니다. 제목, 내용의 텍스트 스타일과 여백, 그림자 깊이, 모양 등의 속성을 가지고 있습니다. 주로 SimpleDialogOption과 함께 사용됩니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SimpleDialog 기본 사용법", - "desc": [ - "【title】 : 상단 컴포넌트 【Widget】", - "【children】 : 하위 컴포넌트 리스트 【List】", - "【titlePadding】 : 상단 내부 여백 【EdgeInsetsGeometry】", - "【contentPadding】 : 내용 내부 여백 【EdgeInsetsGeometry】", - "【backgroundColor】 : 배경색 【Color】", - "【elevation】 : 그림자 깊이 【double】", - "【shape】 : 모양 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_pt_PT.json deleted file mode 100644 index 46bf6ca2b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "Diálogo Simples", - "info": "Uma estrutura de diálogo simples que permite especificar componentes no topo e no meio. Possui estilos de texto e margens para o título e conteúdo, além de propriedades como sombra, forma, etc. Geralmente usado em conjunto com SimpleDialogOption.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SimpleDialog", - "desc": [ - "【title】 : Componente do topo 【Widget】", - "【children】 : Lista de componentes filhos 【List】", - "【titlePadding】 : Preenchimento interno do topo 【EdgeInsetsGeometry】", - "【contentPadding】 : Preenchimento interno do conteúdo 【EdgeInsetsGeometry】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【elevation】 : Profundidade da sombra 【double】", - "【shape】 : Forma 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ru_RU.json deleted file mode 100644 index f2e1b7fc5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "Простое диалоговое окно", - "info": "Простая структура диалогового окна, которая позволяет указать компоненты в верхней и средней частях. Имеет стили текста и отступы для заголовка и содержимого, а также свойства, такие как глубина тени и форма. Часто используется вместе с SimpleDialogOption.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SimpleDialog", - "desc": [ - "【title】 : Верхний компонент 【Widget】", - "【children】 : Список дочерних компонентов 【List】", - "【titlePadding】 : Верхний отступ 【EdgeInsetsGeometry】", - "【contentPadding】 : Отступ содержимого 【EdgeInsetsGeometry】", - "【backgroundColor】 : Цвет фона 【Color】", - "【elevation】 : Глубина тени 【double】", - "【shape】 : Форма 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_zh-CN.json deleted file mode 100644 index 5f5bbc27f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 128, - "name": "SimpleDialog", - "localName": "简单对话框", - "info": "一个简单的对话框结构,可指定头、中处的组件。拥有拥有标题、内容的文字样式和边距,影深、形状等属性。常与SimpleDialogOption联用。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SimpleDialog基本使用", - "desc": [ - "【title】 : 顶部组件 【Widget】", - "【children】 : 子组件列表 【List】", - "【titlePadding】 : 顶部内边距 【EdgeInsetsGeometry】", - "【contentPadding】 : 内容内边距 【EdgeInsetsGeometry】", - "【backgroundColor】 : 背景色 【Color】", - "【elevation】 : 影深 【double】", - "【shape】 : 形状 【ShapeBorder】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/node1_base.dart deleted file mode 100644 index 262eec587..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialog/node1_base.dart +++ /dev/null @@ -1,110 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-24 -/// contact me by email 1981462002@qq.com - -class CustomSimpleDialog extends StatelessWidget { - const CustomSimpleDialog({Key? key}) : super(key: key); - - final List info = const [ - '性别: 男 未婚', - '微信: zdl1994328', - "掘金: 张风捷特烈", - "github: toly1994328", - "邮箱: 1981462008@qq.com", - ]; - - @override - Widget build(BuildContext context) { - return Stack( - children: [ - _buildSimpleDialog(context), - Positioned( - top: 70, - right: 30, - child: _buildRaisedButton(context)), - - ], - ); - } - Widget _buildRaisedButton(BuildContext context) => ElevatedButton( - style: TextButton.styleFrom( - backgroundColor: Colors.blue, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10)), - ), - ), - onPressed: () { - showDialog(context: context, builder: (ctx) => _buildSimpleDialog(ctx)); - }, - child: const Text( - 'Just Show It', - style: TextStyle(color: Colors.white), - ), - ); - - SimpleDialog _buildSimpleDialog(BuildContext context) { - return SimpleDialog( - title: _buildTitle(), - titlePadding: const EdgeInsets.only( - top: 5, - left: 20, - ), - contentPadding: const EdgeInsets.symmetric(horizontal: 5), - children: _buildChild(context), - backgroundColor: Colors.white, - elevation: 4, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(10))), - ); - } - - List _buildChild(BuildContext context) { - return info - .map((str) => Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SimpleDialogOption( - onPressed: () => print(str), - child: SizedBox( - width: double.infinity, - child: Text( - str, - style: const TextStyle( - color: Color(0xff999999), fontSize: 16), - ), - ), - ), - Divider( - indent: 20, - height: 12, - color: info.indexOf(str) == info.length - 1 - ? Colors.transparent - : Theme.of(context).dividerColor, - ) - ], - )) - .toList(); - } - - Widget _buildTitle() { - return Row(//标题 - children: [ - Image.asset( - "assets/images/icon_head.webp", - width: 30, - height: 30, - ), - const SizedBox( - width: 10, - ), - const Expanded( - child: Text( - "张风捷特烈", - style: TextStyle(fontSize: 18), - )), - const CloseButton() - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_de_DE.json deleted file mode 100644 index 7af364aab..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_de_DE.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "Einfache Dialogoption", - "info": "Eine Schaltfläche, die selten verwendet wird und normalerweise in SimpleDialog verwendet wird, um Klickereignisse zu empfangen.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SimpleDialogOption", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【onPressed】 : Klickereignis 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_en_US.json deleted file mode 100644 index b7c0cbbe5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_en_US.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "Simple Dialog Option", - "info": "A button with limited use cases, typically used in SimpleDialog to receive click events.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SimpleDialogOption", - "desc": [ - "【child】 : Child widget 【Widget】", - "【onPressed】 : Click event 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_es_ES.json deleted file mode 100644 index b7330359f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_es_ES.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "Opción de diálogo simple", - "info": "Un botón que se usa en pocas ocasiones, generalmente en SimpleDialog, que recibe eventos de clic.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SimpleDialogOption", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【onPressed】 : Evento de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_fr_FR.json deleted file mode 100644 index 7c182ece8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_fr_FR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "Option de boîte de dialogue simple", - "info": "Un bouton, rarement utilisé, généralement utilisé dans SimpleDialog, reçoit les événements de clic.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SimpleDialogOption", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【onPressed】 : Événement de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_it_IT.json deleted file mode 100644 index 0bc86c9e6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_it_IT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "Opzione del Dialogo Semplice", - "info": "Un pulsante, utilizzato raramente, solitamente all'interno di SimpleDialog, che riceve eventi di clic.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SimpleDialogOption", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【onPressed】 : Evento di clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ja_JP.json deleted file mode 100644 index d8778257b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ja_JP.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "シンプルダイアログオプション", - "info": "ボタンで、使用シナリオが少なく、通常はSimpleDialogで使用され、クリックイベントを受け取ります。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SimpleDialogOptionの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【onPressed】 : クリックイベント 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ko_KR.json deleted file mode 100644 index 09b02aa2a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ko_KR.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "간단한 대화 상자 옵션", - "info": "버튼 하나, 사용 시나리오가 적으며 일반적으로 SimpleDialog에서 사용되며 클릭 이벤트를 수신합니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SimpleDialogOption 기본 사용", - "desc": [ - "【child】 : 자식 위젯 【Widget】", - "【onPressed】 : 클릭 이벤트 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_pt_PT.json deleted file mode 100644 index 2c814d6ac..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_pt_PT.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "Opção de Diálogo Simples", - "info": "Um botão, com poucos cenários de aplicação, geralmente usado em SimpleDialog, recebe eventos de clique.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico de SimpleDialogOption", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【onPressed】 : Evento de clique 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ru_RU.json deleted file mode 100644 index 29af17773..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_ru_RU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "Простая опция диалога", - "info": "Кнопка, которая редко используется, обычно используется в SimpleDialog, принимает событие нажатия.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SimpleDialogOption", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【onPressed】 : Событие нажатия 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_zh-CN.json deleted file mode 100644 index 54061f587..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/desc_zh-CN.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "id": 133, - "name": "SimpleDialogOption", - "localName": "简单对话框选项", - "info": "一个按钮,应用场景很少,通常用于SimpleDialog中,接收点击事件。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SimpleDialogOption基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【onPressed】 : 点击事件 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/node1_base.dart deleted file mode 100644 index 62f76cf51..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SimpleDialogOption/node1_base.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomSimpleDialogOption extends StatelessWidget { - const CustomSimpleDialogOption({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Column( - children: [ - Container( - alignment: Alignment.center, - width: double.infinity, - height: 50, - margin: const EdgeInsets.all(5), - color: Colors.grey.withAlpha(33), - child: SimpleDialogOption( - onPressed: () => Navigator.of(context).pushNamed('AboutMePage'), - child: const Text('张风捷特烈')), - ), - Container( - height: 50, - alignment: Alignment.center, - width: double.infinity, - color: Colors.grey.withAlpha(33), - margin: const EdgeInsets.all(5), - child: SimpleDialogOption( - onPressed: () => Navigator.of(context).pushNamed('AboutMePage'), - child: const Text('百里·巫缨')), - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_de_DE.json deleted file mode 100644 index 04b6d9d58..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "Einzelkind-Scrollen", - "info": "Ermöglicht einem Widget einen Scroll-Effekt, kann die Scroll-Richtung, ob umgekehrt, Scroll-Controller und andere Eigenschaften angeben.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SingleChildScrollView", - "desc": [ - "【child】 : Untergeordnetes Widget 【Widget】", - "【padding】 : Innenabstand 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Scrollrichtung von SingleChildScrollView", - "desc": [ - "【scrollDirection】 : Scrollrichtung 【Axis】", - "【reverse】 : Ob umgekehrt 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_en_US.json deleted file mode 100644 index ba8db73e6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "Single Child Scroll", - "info": "Makes a component scrollable, allowing you to specify properties such as the scroll direction, whether to reverse the direction, the scroll controller, etc.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SingleChildScrollView", - "desc": [ - "【child】: Child widget 【Widget】", - "【padding】: Padding 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Scroll Direction of SingleChildScrollView", - "desc": [ - "【scrollDirection】: Scroll direction 【Axis】", - "【reverse】: Whether to reverse 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_es_ES.json deleted file mode 100644 index 3a31ff533..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "Desplazamiento de un solo hijo", - "info": "Hace que un componente tenga un efecto de desplazamiento, y se pueden especificar propiedades como la dirección del desplazamiento, si es inverso, el controlador de desplazamiento, etc.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SingleChildScrollView", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【padding】 : Relleno interno 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Dirección de desplazamiento de SingleChildScrollView", - "desc": [ - "【scrollDirection】 : Dirección de desplazamiento 【Axis】", - "【reverse】 : Si es inverso 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_fr_FR.json deleted file mode 100644 index f38f78947..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "Défilement à un seul enfant", - "info": "Permet à un composant d'avoir un effet de défilement, avec des propriétés telles que la direction du défilement, l'inversion, le contrôleur de défilement, etc.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SingleChildScrollView", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【padding】 : Marge intérieure 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direction de défilement de SingleChildScrollView", - "desc": [ - "【scrollDirection】 : Direction de défilement 【Axis】", - "【reverse】 : Inversion 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_it_IT.json deleted file mode 100644 index 63f3993c5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "Scorrimento singolo figlio", - "info": "Rende un componente scorrevole, è possibile specificare la direzione di scorrimento, se invertire, il controller di scorrimento e altre proprietà.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SingleChildScrollView", - "desc": [ - "【child】 : componente figlio 【Widget】", - "【padding】 : spaziatura interna 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direzione di scorrimento di SingleChildScrollView", - "desc": [ - "【scrollDirection】 : direzione di scorrimento 【Axis】", - "【reverse】 : invertire 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ja_JP.json deleted file mode 100644 index cd62f691f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "シングルチャイルドスクロール", - "info": "コンポーネントにスクロール効果を持たせ、スクロールの方向、反転、スクロールコントローラーなどのプロパティを指定できます。", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SingleChildScrollViewの基本使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【padding】 : 内側の余白 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "SingleChildScrollViewのスクロール方向", - "desc": [ - "【scrollDirection】 : スクロール方向 【Axis】", - "【reverse】 : 反転するかどうか 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ko_KR.json deleted file mode 100644 index a88236ed0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "단일 자식 스크롤", - "info": "컴포넌트에 스크롤 효과를 부여하며, 스크롤 방향, 반대 방향 여부, 스크롤 컨트롤러 등의 속성을 지정할 수 있습니다.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SingleChildScrollView 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【padding】 : 내부 여백 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "SingleChildScrollView 스크롤 방향", - "desc": [ - "【scrollDirection】 : 스크롤 방향 【Axis】", - "【reverse】 : 반대 방향 여부 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_pt_PT.json deleted file mode 100644 index 2a8b62acf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "Deslizamento de Filho Único", - "info": "Torna um componente com efeito de deslizamento, podendo especificar a direção do deslizamento, se é reverso, controlador de deslizamento, entre outras propriedades.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SingleChildScrollView", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【padding】 : Preenchimento interno 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Direção de Deslizamento do SingleChildScrollView", - "desc": [ - "【scrollDirection】 : Direção de deslizamento 【Axis】", - "【reverse】 : Se é reverso 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ru_RU.json deleted file mode 100644 index 04e9dc278..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "Одиночный скролл", - "info": "Делает компонент прокручиваемым, позволяет указать направление прокрутки, обратное направление, контроллер прокрутки и другие свойства.", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SingleChildScrollView", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【padding】 : Внутренний отступ 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "Направление прокрутки SingleChildScrollView", - "desc": [ - "【scrollDirection】 : Направление прокрутки 【Axis】", - "【reverse】 : Обратное направление 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_zh-CN.json deleted file mode 100644 index 8dea51b5a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 164, - "name": "SingleChildScrollView", - "localName": "单子滑动", - "info": "使一个组件具有滑动的效果,可指定滑动的方向、是否反向、滑动控制器等属性。", - "lever": 5, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SingleChildScrollView基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【padding】 : 内边距 【EdgeInsetsGeometry】" - ] - }, - { - "file": "node2_direction.dart", - "name": "SingleChildScrollView滑动方向", - "desc": [ - "【scrollDirection】 : 滑动方向 【Axis】", - "【reverse】 : 是否反向 【Axis】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/node1_base.dart deleted file mode 100644 index 5c3d85b64..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/node1_base.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-28 -/// contact me by email 1981462002@qq.com - -class CustomSingleChildScrollView extends StatelessWidget { - const CustomSingleChildScrollView({super.key}); - - List get data => [ - Colors.blue[50]!, - Colors.blue[100]!, - Colors.blue[200]!, - Colors.blue[300]!, - Colors.blue[400]!, - Colors.blue[500]!, - Colors.blue[600]!, - Colors.blue[700]!, - Colors.blue[800]!, - Colors.blue[900]!, - ]; - - TextStyle get textStyle => const TextStyle( - color: Colors.white, - shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ], - ); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: SingleChildScrollView( - padding: const EdgeInsets.symmetric(horizontal: 10), - child: Column( - children: data - .map((color) => Container( - alignment: Alignment.center, - height: 50, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - )) - .toList(), - ), - - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/node2_direction.dart b/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/node2_direction.dart deleted file mode 100644 index 96b9351a4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SingleChildScrollView/node2_direction.dart +++ /dev/null @@ -1,60 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class DirectionSingleChildScrollView extends StatelessWidget { - const DirectionSingleChildScrollView({super.key}); - - List get data => [ - Colors.blue[50]!, - Colors.blue[100]!, - Colors.blue[200]!, - Colors.blue[300]!, - Colors.blue[400]!, - Colors.blue[500]!, - Colors.blue[600]!, - Colors.blue[700]!, - Colors.blue[800]!, - Colors.blue[900]!, - ]; - - TextStyle get textStyle => const TextStyle( - color: Colors.white, - shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ) - ], - ); - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: SingleChildScrollView( - scrollDirection: Axis.horizontal, - reverse: true, - padding: const EdgeInsets.symmetric(horizontal: 10), - child: Row( - children: data - .map((color) => Container( - alignment: Alignment.center, - width: 90, - color: color, - child: Text( - colorString(color), - style: textStyle, - ), - )) - .toList(), - ), - ), - ); - } - - String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_de_DE.json deleted file mode 100644 index bf007e818..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "Informationsleiste", - "info": "Als Komponente handelt es sich um eine einfache Strukturkomponente, die Form, Schattentiefe, Hintergrundfarbe usw. angeben kann. Wird normalerweise über die showSnackBar-Methode von ScaffoldState von unten eingeblendet.", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SnackBar", - "desc": [ - "【content】 : Mittleres Inhalts-Widget 【Widget】", - "【action】 : Rechte Schaltfläche 【SnackBarAction】", - "【duration】 : Dauer 【Widget】", - "【backgroundColor】 : Hintergrundfarbe 【Color】", - "【elevation】 : Schattentiefe 【double】", - "【shape】 : Form 【ShapeBorder】", - "【onVisible】 : Callback bei Anzeige 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_en_US.json deleted file mode 100644 index 5b195a359..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "SnackBar", - "info": "As a component, it is a simple structural component that can specify shape, shadow depth, background color, etc. It usually pops up from the bottom through the showSnackBar method of ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SnackBar", - "desc": [ - "【content】: Middle content component 【Widget】", - "【action】: Right side button 【SnackBarAction】", - "【duration】: Duration 【Widget】", - "【backgroundColor】: Background color 【Color】", - "【elevation】: Shadow depth 【double】", - "【shape】: Shape 【ShapeBorder】", - "【onVisible】: Callback when shown 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_es_ES.json deleted file mode 100644 index 27dd24e49..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "Barra de información", - "info": "Como componente, es una estructura simple que puede especificar forma, profundidad de sombra, color de fondo, etc. Generalmente aparece desde la parte inferior a través del método showSnackBar de ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SnackBar", - "desc": [ - "【content】 : Componente de contenido central 【Widget】", - "【action】 : Botón derecho 【SnackBarAction】", - "【duration】 : Duración 【Widget】", - "【backgroundColor】 : Color de fondo 【Color】", - "【elevation】 : Profundidad de sombra 【double】", - "【shape】 : Forma 【ShapeBorder】", - "【onVisible】 : Devolución de llamada al mostrar 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_fr_FR.json deleted file mode 100644 index 2c375ecd8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "Barre d'information", - "info": "En tant que composant, il s'agit d'une structure simple qui peut spécifier la forme, l'ombre, la couleur de fond, etc. Généralement, il apparaît depuis le bas via la méthode showSnackBar de ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SnackBar", - "desc": [ - "【content】 : Composant de contenu central 【Widget】", - "【action】 : Bouton de droite 【SnackBarAction】", - "【duration】 : Durée 【Widget】", - "【backgroundColor】 : Couleur de fond 【Color】", - "【elevation】 : Profondeur de l'ombre 【double】", - "【shape】 : Forme 【ShapeBorder】", - "【onVisible】 : Rappel lors de l'affichage 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_it_IT.json deleted file mode 100644 index 9bb71debd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "Barra di notifica", - "info": "Come componente, è una struttura semplice che può specificare forma, profondità dell'ombra, colore di sfondo, ecc. Generalmente viene visualizzato dal basso tramite il metodo showSnackBar di ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SnackBar", - "desc": [ - "【content】 : Componente del contenuto centrale 【Widget】", - "【action】 : Bottone a destra 【SnackBarAction】", - "【duration】 : Durata 【Widget】", - "【backgroundColor】 : Colore di sfondo 【Color】", - "【elevation】 : Profondità dell'ombra 【double】", - "【shape】 : Forma 【ShapeBorder】", - "【onVisible】 : Callback quando viene visualizzato 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ja_JP.json deleted file mode 100644 index 8ec32e385..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "情報提示バー", - "info": "コンポーネントとして簡単な構造コンポーネントで、形状、影の深さ、背景色などを指定できます。一般的にScaffoldStateのshowSnackBarメソッドを使用して下部から表示されます。", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SnackBarの基本使用", - "desc": [ - "【content】 : 中間内容コンポーネント 【Widget】", - "【action】 : 右側ボタン 【SnackBarAction】", - "【duration】 : 持続時間 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【elevation】 : 影の深さ 【double】", - "【shape】 : 形状 【ShapeBorder】", - "【onVisible】 : 表示時のコールバック 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ko_KR.json deleted file mode 100644 index 9d0848142..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "정보 알림 바", - "info": "컴포넌트로서는 간단한 구조 컴포넌트로, 모양, 그림자 깊이, 배경색 등을 지정할 수 있습니다. 일반적으로 ScaffoldState의 showSnackBar 메소드를 통해 하단에서 팝업됩니다.", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SnackBar 기본 사용", - "desc": [ - "【content】 : 중간 내용 컴포넌트 【Widget】", - "【action】 : 오른쪽 버튼 【SnackBarAction】", - "【duration】 : 지속 시간 【Widget】", - "【backgroundColor】 : 배경색 【Color】", - "【elevation】 : 그림자 깊이 【double】", - "【shape】 : 모양 【ShapeBorder】", - "【onVisible】 : 표시 시 콜백 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_pt_PT.json deleted file mode 100644 index 8a888dd71..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "Barra de Informação", - "info": "Como componente, é uma estrutura simples que pode especificar forma, profundidade de sombra, cor de fundo, etc. Geralmente é exibido a partir da parte inferior através do método showSnackBar do ScaffoldState.", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SnackBar", - "desc": [ - "【content】 : Componente de conteúdo central 【Widget】", - "【action】 : Botão do lado direito 【SnackBarAction】", - "【duration】 : Duração 【Widget】", - "【backgroundColor】 : Cor de fundo 【Color】", - "【elevation】 : Profundidade de sombra 【double】", - "【shape】 : Forma 【ShapeBorder】", - "【onVisible】 : Callback ao exibir 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ru_RU.json deleted file mode 100644 index cf0b478b9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "Информационная панель", - "info": "Как компонент, это простая структурная компонента, которая может указывать форму, глубину тени, цвет фона и т.д. Обычно вызывается методом showSnackBar из ScaffoldState, появляясь снизу.", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SnackBar", - "desc": [ - "【content】 : Промежуточный компонент содержимого 【Widget】", - "【action】 : Правая кнопка 【SnackBarAction】", - "【duration】 : Продолжительность 【Widget】", - "【backgroundColor】 : Цвет фона 【Color】", - "【elevation】 : Глубина тени 【double】", - "【shape】 : Форма 【ShapeBorder】", - "【onVisible】 : Обратный вызов при отображении 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_zh-CN.json deleted file mode 100644 index f199b3bf6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 140, - "name": "SnackBar", - "localName": "信息提示条", - "info": "作为组件来说是一个简单的结构组件,可指定形状、影深、背景色等。一般通过ScaffoldState的showSnackBar方法从底部弹出。", - "lever": 4, - "family": 1, - "linkIds": [ - 141, - 142 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SnackBar基本使用", - "desc": [ - "【content】 : 中间内容组件 【Widget】", - "【action】 : 右侧按钮 【SnackBarAction】", - "【duration】 : 持续时长 【Widget】", - "【backgroundColor】 : 背景色 【Color】", - "【elevation】 : 影深 【double】", - "【shape】 : 形状 【ShapeBorder】", - "【onVisible】 : 显示时回调 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/node1_base.dart deleted file mode 100644 index 36cac9c38..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBar/node1_base.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomSnackBar extends StatefulWidget { - const CustomSnackBar({Key? key}) : super(key: key); - - @override - _CustomSnackBarState createState() => _CustomSnackBarState(); -} - -class _CustomSnackBarState extends State { - @override - Widget build(BuildContext context) { - return ElevatedButton( - onPressed: () => - ScaffoldMessenger.of(context).showSnackBar(_buildSnackBar()), - child: const Text( - '点我弹出SnackBar', - style: TextStyle(color: Colors.white), - )); - } - - SnackBar _buildSnackBar() { - return SnackBar( - elevation: 3, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(10), topRight: Radius.circular(10))), - content: const Text('Wellcome to for join Flutter Unit!'), - duration: const Duration(seconds: 3), - //持续时间 - backgroundColor: Colors.red, - onVisible: () => print('onVisible'), - action: SnackBarAction( - textColor: Colors.white, label: '确定', onPressed: () {}), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_de_DE.json deleted file mode 100644 index 0d67865b4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "SnackBar-Schaltfläche", - "info": "Wird im Allgemeinen nur in SnackBar verwendet, akzeptiert Klick-Ereignisse. Nach einem Klick wird die Schaltfläche deaktiviert, es können Farbe und deaktivierte Farbe angegeben werden.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von SnackBarAction", - "desc": [ - "【label】 : Beschriftung 【String】", - "【textColor】 : Textfarbe 【Color】", - "【disabledTextColor】 : Deaktivierte Textfarbe 【Color】", - "【onPressed】 : Klick-Rückruf 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_en_US.json deleted file mode 100644 index c5bb4f653..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "Snack Bar Button", - "info": "Generally used only in SnackBar, accepts click events. The button will be disabled after one click, and the color and disabled color can be specified.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of SnackBarAction", - "desc": [ - "【label】 : Label 【String】", - "【textColor】 : Text Color 【Color】", - "【disabledTextColor】 : Disabled Text Color 【Color】", - "【onPressed】 : Click Callback 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_es_ES.json deleted file mode 100644 index 41e2e6d4b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "Botón de barra de información", - "info": "Generalmente se usa solo en SnackBar, acepta eventos de clic. Después de hacer clic una vez, el botón se deshabilitará, se puede especificar el color y el color cuando está deshabilitado.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de SnackBarAction", - "desc": [ - "【label】 : Etiqueta 【String】", - "【textColor】 : Color del texto 【Color】", - "【disabledTextColor】 : Color del texto deshabilitado 【Color】", - "【onPressed】 : Callback de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_fr_FR.json deleted file mode 100644 index d87e87390..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "Bouton de barre de message", - "info": "Généralement utilisé uniquement dans SnackBar, accepte les événements de clic. Après un clic, le bouton est désactivé, et vous pouvez spécifier la couleur et la couleur désactivée.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de SnackBarAction", - "desc": [ - "【label】 : Étiquette 【String】", - "【textColor】 : Couleur du texte 【Color】", - "【disabledTextColor】 : Couleur du texte désactivé 【Color】", - "【onPressed】 : Rappel de clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_it_IT.json deleted file mode 100644 index 1137e3470..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "Pulsante della barra di notifica", - "info": "Generalmente utilizzato solo in SnackBar, accetta eventi di clic. Dopo un clic, il pulsante viene disabilitato. È possibile specificare il colore e il colore quando è disabilitato.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di SnackBarAction", - "desc": [ - "【label】 : Etichetta 【String】", - "【textColor】 : Colore del testo 【Color】", - "【disabledTextColor】 : Colore del testo disabilitato 【Color】", - "【onPressed】 : Callback del clic 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ja_JP.json deleted file mode 100644 index e36d851c6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "スナックバーボタン", - "info": "一般的にSnackBarでのみ使用され、クリックイベントを受け取ります。一度クリックするとボタンは無効化され、色や無効時の色を指定できます。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SnackBarActionの基本使用", - "desc": [ - "【label】 : ラベル 【String】", - "【textColor】 : 文字色 【Color】", - "【disabledTextColor】 : 無効時の文字色 【Color】", - "【onPressed】 : クリックコールバック 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ko_KR.json deleted file mode 100644 index a20a19864..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "스낵바 버튼", - "info": "일반적으로 SnackBar에서만 사용되며, 클릭 이벤트를 수신합니다. 한 번 클릭하면 버튼이 비활성화되며, 색상과 비활성화 시 색상을 지정할 수 있습니다.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SnackBarAction 기본 사용법", - "desc": [ - "【label】 : 라벨 【String】", - "【textColor】 : 텍스트 색상 【Color】", - "【disabledTextColor】 : 텍스트 비활성화 색상 【Color】", - "【onPressed】 : 클릭 콜백 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_pt_PT.json deleted file mode 100644 index 1c34e086e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "Botão da Barra de Informações", - "info": "Geralmente usado apenas em SnackBar, aceita eventos de clique. Após um clique, o botão será desativado, e é possível especificar a cor e a cor quando desativado.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do SnackBarAction", - "desc": [ - "【label】 : Etiqueta 【String】", - "【textColor】 : Cor do texto 【Color】", - "【disabledTextColor】 : Cor do texto desativado 【Color】", - "【onPressed】 : Callback de clique 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ru_RU.json deleted file mode 100644 index 74e932e5b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "Кнопка информационной панели", - "info": "Обычно используется только в SnackBar, принимает события нажатия. После одного нажатия кнопка становится отключенной, можно указать цвет и цвет в отключенном состоянии.", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование SnackBarAction", - "desc": [ - "【label】 : Метка 【String】", - "【textColor】 : Цвет текста 【Color】", - "【disabledTextColor】 : Цвет текста в отключенном состоянии 【Color】", - "【onPressed】 : Обратный вызов при нажатии 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_zh-CN.json deleted file mode 100644 index a5e8dc226..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 141, - "name": "SnackBarAction", - "localName": "信息提示条按钮", - "info": "一般只用于SnackBar中,接受点击事件。点击一次后该按钮就会被禁用,可以指定颜色和禁用时颜色。", - "lever": 1, - "family": 1, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SnackBarAction基本使用", - "desc": [ - "【label】 : 标签 【String】", - "【textColor】 : 文字颜色 【Color】", - "【disabledTextColor】 : 文字失效色 【Color】", - "【onPressed】 : 点击回调 【Function()】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/node1_base.dart deleted file mode 100644 index 65cf6ac06..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SnackBarAction/node1_base.dart +++ /dev/null @@ -1,18 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomSnackBarAction extends StatelessWidget { - const CustomSnackBarAction({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SnackBarAction( - disabledTextColor: Colors.red, - textColor: Colors.blue, - label: '确定', - onPressed: () => print('onPressed'), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_de_DE.json deleted file mode 100644 index 0b33068d2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_de_DE.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "Raumkomponente", - "info": "Kann nur in Row-, Column- und Flex-Layouts verwendet werden. Nutzt den verbleibenden Platz als Platzhalter. Mit der flex-Eigenschaft kann der Platz für mehrere Spacer proportional zugeteilt werden.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Spacer", - "desc": [ - "Ein Spacer nimmt den erweiterbaren Bereich ein" - ] - }, - { - "file": "node2_flex.dart", - "name": "Raumzuweisung für mehrere Spacer", - "desc": [ - "【flex】 : Anteil der verbleibenden Raumzuweisung 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_en_US.json deleted file mode 100644 index 7bee2cc61..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_en_US.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "Space Component", - "info": "Can only be used in Row, Column, and Flex layouts. It can occupy the remaining space. The flex property can be used to allocate space proportionally among multiple Spacers.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Spacer", - "desc": [ - "A Spacer will occupy the extendable area" - ] - }, - { - "file": "node2_flex.dart", - "name": "Space Allocation with Multiple Spacers", - "desc": [ - "【flex】 : Proportion of remaining space allocation 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_es_ES.json deleted file mode 100644 index 11078f41d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_es_ES.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "Componente de espacio", - "info": "Solo se puede usar en diseños de Row, Column y Flex. Puede ocupar el espacio restante. La propiedad flex permite distribuir el espacio entre múltiples Spacer en proporción.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Spacer", - "desc": [ - "Un Spacer ocupará el área extensible" - ] - }, - { - "file": "node2_flex.dart", - "name": "Distribución de espacio entre múltiples Spacer", - "desc": [ - "【flex】 : Proporción de distribución del espacio restante 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_fr_FR.json deleted file mode 100644 index bc465c768..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_fr_FR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "Composant d'espace", - "info": "Ne peut être utilisé que dans les dispositions Row, Column et Flex, il occupe l'espace restant. La propriété flex permet de distribuer l'espace entre plusieurs Spacer proportionnellement.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Spacer", - "desc": [ - "Un Spacer occupe une zone extensible" - ] - }, - { - "file": "node2_flex.dart", - "name": "Répartition de l'espace entre plusieurs Spacer", - "desc": [ - "【flex】 : Proportion de répartition de l'espace restant 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_it_IT.json deleted file mode 100644 index a0e264305..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_it_IT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "Componente Spaziatore", - "info": "Può essere utilizzato solo nei layout Row, Column e Flex, occupa lo spazio rimanente e può distribuire lo spazio a più Spacer in proporzione utilizzando la proprietà flex.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Spacer", - "desc": [ - "Un Spacer occuperà l'area estensibile" - ] - }, - { - "file": "node2_flex.dart", - "name": "Distribuzione dello spazio con più Spacer", - "desc": [ - "【flex】 : percentuale di distribuzione dello spazio rimanente 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ja_JP.json deleted file mode 100644 index 2fc247f67..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ja_JP.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "スペーサー", - "info": "Row、Column、Flexレイアウトでのみ使用可能で、残りのスペースを占めるために使用されます。flexプロパティを使用して、複数のSpacerに比例してスペースを分配できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Spacerの基本使用", - "desc": [ - "1つのSpacerが拡張可能な領域を占めます" - ] - }, - { - "file": "node2_flex.dart", - "name": "複数のSpacerスペース分配", - "desc": [ - "【flex】 : 残りのスペースの分配比率 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ko_KR.json deleted file mode 100644 index a5c2cf176..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ko_KR.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "공간 컴포넌트", - "info": "Row, Column, Flex 레이아웃에서만 사용할 수 있으며, 남은 공간을 차지하는 데 사용됩니다. flex 속성을 사용하여 여러 Spacer에 비례적으로 공간을 배분할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Spacer 기본 사용", - "desc": [ - "하나의 Spacer가 확장 가능한 영역을 차지합니다" - ] - }, - { - "file": "node2_flex.dart", - "name": "여러 Spacer 공간 배분", - "desc": [ - "【flex】 : 남은 공간 배분 비율 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_pt_PT.json deleted file mode 100644 index e1bcb0829..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_pt_PT.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "Componente de Espaço", - "info": "Só pode ser usado em layouts Row, Column e Flex, pode ocupar espaço utilizando o espaço restante, e a propriedade flex pode distribuir espaço proporcionalmente para múltiplos Spacers.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Spacer", - "desc": [ - "Um Spacer ocupará a área extensível" - ] - }, - { - "file": "node2_flex.dart", - "name": "Distribuição de Espaço para Múltiplos Spacers", - "desc": [ - "【flex】 : Proporção de distribuição do espaço restante 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ru_RU.json deleted file mode 100644 index c75f90e54..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_ru_RU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "Пространственный компонент", - "info": "Может использоваться только в макетах Row, Column и Flex, занимает оставшееся пространство. Свойство flex позволяет распределять пространство между несколькими Spacer пропорционально.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Spacer", - "desc": [ - "Один Spacer занимает расширяемую область" - ] - }, - { - "file": "node2_flex.dart", - "name": "Распределение пространства между несколькими Spacer", - "desc": [ - "【flex】 : Доля распределения оставшегося пространства 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_zh-CN.json deleted file mode 100644 index 3e50a8236..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/desc_zh-CN.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "id": 107, - "name": "Spacer", - "localName": "空间组件", - "info": "只能用于Row、Column和Flex布局中,可利用剩余空间进行占位,使用flex属性可以给多个Spacer按比例分配空间。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Spacer基本使用", - "desc": [ - "一个Spacer会占据可延伸区域" - ] - }, - { - "file": "node2_flex.dart", - "name": "多个Spacer空间分配", - "desc": [ - "【flex】 : 剩余空间分配占比 【int】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/node1_base.dart deleted file mode 100644 index 2efb18a00..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/node1_base.dart +++ /dev/null @@ -1,31 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class OneSpacer extends StatelessWidget { - const OneSpacer({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return - Container( - color: Colors.grey.withAlpha(33), - child: Row(children: [ - Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: Colors.red, - ), - const Spacer(), - Container( - alignment: Alignment.center, - width: 60, - height: 50, - color: Colors.blue, - ), - ],), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/node2_flex.dart b/modules/widget_system/widgets/lib/StatelessWidget/Spacer/node2_flex.dart deleted file mode 100644 index dfc17ae76..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Spacer/node2_flex.dart +++ /dev/null @@ -1,67 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-22 -/// contact me by email 1981462002@qq.com - -class ManySpacer extends StatefulWidget { - const ManySpacer({Key? key}) : super(key: key); - - @override - _ManySpacerState createState() => _ManySpacerState(); -} - -class _ManySpacerState extends State { - int _flexA = 1; - int _flexB = 1; - - @override - Widget build(BuildContext context) { - return Column( - children: [ - _buildSliders(), - Container( - color: Colors.grey.withAlpha(33), - child: Row(children: [ - Spacer(flex: _flexA), - Container( - alignment: Alignment.center, - width: 100, - height: 50, - color: Colors.red, - ), - Spacer(flex: _flexB), - Container( - alignment: Alignment.center, - width: 60, - height: 50, - color: Colors.blue, - ), - ],), - ) - ], - ); - } - - Widget _buildSliders() { - return Column( - children: [ - Slider( - divisions: 20, - min: 1, - max: 10, - label: "左边flex: $_flexA", - value: _flexA.toDouble(), - onChanged: (v) => setState(() => _flexA = v.round()) - ), - Slider( - divisions: 20, - label: "右边flex: $_flexB", - min: 1, - max: 10, - value: _flexB.toDouble(), - onChanged: (v) => setState(() => _flexB = v.round()) - ), - ], - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_de_DE.json deleted file mode 100644 index 568dbf543..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_de_DE.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "Schalterkachel", - "info": "Eine allgemeine Listenstruktur, die von Flutter bereitgestellt wird, mit einer linken und mittleren Struktur und einem Schalter am Ende. Komponenten können an den entsprechenden Positionen eingefügt werden, um spezifische Einträge einfach zu handhaben.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Darstellung von SwitchListTile", - "desc": [ - "【secondary】: Linke Komponente 【Widget】", - "【title】: Obere mittlere Komponente 【Widget】", - "【subtitle】: Untere mittlere Komponente 【Widget】", - "【inactiveThumbColor】: Farbe des Kreises, wenn nicht ausgewählt 【Color】", - "【inactiveTrackColor】: Farbe der Schiene, wenn nicht ausgewählt 【Color】", - "【activeColor】: Farbe des Kreises, wenn ausgewählt 【Color】", - "【activeTrackColor】: Farbe der Schiene, wenn ausgewählt 【Color】", - "【onChanged】: Ereignis bei Auswahl 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Auswahleffekt von SwitchListTile", - "desc": [ - "【selected】: Ob ausgewählt 【bool】", - "【inactiveThumbImage】: Bild des Kreises, wenn nicht ausgewählt 【ImageProvider】", - "【activeThumbImage】: Bild des Kreises, wenn ausgewählt 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Dichte Eigenschaft von SwitchListTile", - "desc": [ - "【dense】: Ob dicht 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_en_US.json deleted file mode 100644 index b0a879fbf..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_en_US.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "Switch Tile", - "info": "A common list item structure provided by Flutter, with a left-center structure and a Switch at the end. Components can be inserted at the corresponding positions, making it easy to handle specific items.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic representation of SwitchListTile", - "desc": [ - "【secondary】: Left component 【Widget】", - "【title】: Top middle component 【Widget】", - "【subtitle】: Bottom middle component 【Widget】", - "【inactiveThumbColor】: Circle color when not selected 【Color】", - "【inactiveTrackColor】: Track color when not selected 【Color】", - "【activeColor】: Circle color when selected 【Color】", - "【activeTrackColor】: Track color when selected 【Color】", - "【onChanged】: Selection event 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Selection effect of SwitchListTile", - "desc": [ - "【selected】: Whether selected 【bool】", - "【inactiveThumbImage】: Circle image when not selected 【ImageProvider】", - "【activeThumbImage】: Circle image when selected 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Dense property of SwitchListTile", - "desc": [ - "【dense】: Whether dense 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_es_ES.json deleted file mode 100644 index 956f9c095..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_es_ES.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "Interruptor de Lista", - "info": "Estructura de elemento de lista genérica proporcionada por Flutter, con una estructura de izquierda a centro y un Switch en la cola. Se pueden insertar componentes en las posiciones correspondientes, lo que permite manejar elementos específicos de manera conveniente.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "El comportamiento básico de SwitchListTile es el siguiente", - "desc": [ - "【secondary】: Componente izquierdo 【Widget】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【inactiveThumbColor】: Color del círculo cuando no está seleccionado 【Color】", - "【inactiveTrackColor】: Color de la pista cuando no está seleccionado 【Color】", - "【activeColor】: Color del círculo cuando está seleccionado 【Color】", - "【activeTrackColor】: Color de la pista cuando está seleccionado 【Color】", - "【onChanged】: Evento de selección 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Efecto de selección de SwitchListTile", - "desc": [ - "【selected】: Si está seleccionado 【bool】", - "【inactiveThumbImage】: Imagen del círculo cuando no está seleccionado 【ImageProvider】", - "【activeThumbImage】: Imagen del círculo cuando está seleccionado 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propiedad de densidad de SwitchListTile", - "desc": [ - "【dense】: Si está en modo denso 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_fr_FR.json deleted file mode 100644 index 161512fc4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_fr_FR.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "Bouton de Commutation Tuile", - "info": "Une structure de liste générique fournie par Flutter, de structure gauche-centre, avec un Switch à la fin. Des composants peuvent être insérés aux positions correspondantes, ce qui permet de répondre facilement à des entrées spécifiques.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La performance de base de SwitchListTile est la suivante", - "desc": [ - "【secondary】: Composant gauche 【Widget】", - "【title】: Composant supérieur central 【Widget】", - "【subtitle】: Composant inférieur central 【Widget】", - "【inactiveThumbColor】: Couleur du cercle lorsqu'il n'est pas sélectionné 【Color】", - "【inactiveTrackColor】: Couleur de la piste lorsqu'elle n'est pas sélectionnée 【Color】", - "【activeColor】: Couleur du cercle lorsqu'il est sélectionné 【Color】", - "【activeTrackColor】: Couleur de la piste lorsqu'elle est sélectionnée 【Color】", - "【onChanged】: Événement de sélection 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Effet de sélection de SwitchListTile", - "desc": [ - "【selected】: Est sélectionné 【bool】", - "【inactiveThumbImage】: Image du cercle lorsqu'il n'est pas sélectionné 【ImageProvider】", - "【activeThumbImage】: Image du cercle lorsqu'il est sélectionné 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propriété de densité de SwitchListTile", - "desc": [ - "【dense】: Est dense 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_it_IT.json deleted file mode 100644 index 20b56b709..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_it_IT.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "Interruttore Piastrella", - "info": "Una struttura di elenco generica fornita da Flutter, con una struttura sinistra-centrale, e un interruttore alla fine. I componenti possono essere inseriti nelle posizioni appropriate, rendendo facile adattarsi a voci specifiche.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La rappresentazione di base di SwitchListTile è la seguente", - "desc": [ - "【secondary】: Componente sinistro 【Widget】", - "【title】: Componente superiore centrale 【Widget】", - "【subtitle】: Componente inferiore centrale 【Widget】", - "【inactiveThumbColor】: Colore del cerchio quando non selezionato 【Color】", - "【inactiveTrackColor】: Colore della scanalatura quando non selezionato 【Color】", - "【activeColor】: Colore del cerchio quando selezionato 【Color】", - "【activeTrackColor】: Colore della scanalatura quando selezionato 【Color】", - "【onChanged】: Evento di selezione 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Effetto di selezione di SwitchListTile", - "desc": [ - "【selected】: Se selezionato 【bool】", - "【inactiveThumbImage】: Immagine del cerchio quando non selezionato 【ImageProvider】", - "【activeThumbImage】: Immagine del cerchio quando selezionato 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Proprietà di densità di SwitchListTile", - "desc": [ - "【dense】: Se denso 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ja_JP.json deleted file mode 100644 index b7026233d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ja_JP.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "スイッチリストタイル", - "info": "Flutterが提供する汎用リスト項目構造で、左中構造で、末尾にSwitchがあります。対応する位置にコンポーネントを挿入でき、特定の項目に簡単に対応できます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SwitchListTileの基本表現は以下の通りです", - "desc": [ - "【secondary】: 左側コンポーネント 【Widget】", - "【title】: 中央上コンポーネント 【Widget】", - "【subtitle】: 中央下コンポーネント 【Widget】", - "【inactiveThumbColor】: 未選択時の円の色 【Color】", - "【inactiveTrackColor】: 未選択時のスロットの色 【Color】", - "【activeColor】: 選択時の円の色 【Color】", - "【activeTrackColor】: 選択時のスロットの色 【Color】", - "【onChanged】: 選択イベント 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "SwitchListTileの選択効果", - "desc": [ - "【selected】: 選択されているかどうか 【bool】", - "【inactiveThumbImage】: 未選択時の円の画像 【ImageProvider】", - "【activeThumbImage】: 選択時の円の画像 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "SwitchListTileの密排属性", - "desc": [ - "【dense】: 密排かどうか 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ko_KR.json deleted file mode 100644 index 743c75131..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ko_KR.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "스위치 리스트 타일", - "info": "Flutter에서 제공하는 일반적인 리스트 항목 구조로, 왼쪽과 중앙 구조이며, 끝에는 스위치가 있습니다. 해당 위치에 컴포넌트를 삽입할 수 있어 특정 항목에 쉽게 대응할 수 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SwitchListTile의 기본 표현은 다음과 같습니다", - "desc": [ - "【secondary】: 왼쪽 컴포넌트 【Widget】", - "【title】: 중앙 상단 컴포넌트 【Widget】", - "【subtitle】: 중앙 하단 컴포넌트 【Widget】", - "【inactiveThumbColor】: 선택되지 않았을 때 원 색상 【Color】", - "【inactiveTrackColor】: 선택되지 않았을 때 트랙 색상 【Color】", - "【activeColor】: 선택되었을 때 원 색상 【Color】", - "【activeTrackColor】: 선택되었을 때 트랙 색상 【Color】", - "【onChanged】: 선택 이벤트 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "SwitchListTile의 선택 효과", - "desc": [ - "【selected】: 선택 여부 【bool】", - "【inactiveThumbImage】: 선택되지 않았을 때 원 이미지 【ImageProvider】", - "【activeThumbImage】: 선택되었을 때 원 이미지 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "SwitchListTile의 밀집 속성", - "desc": [ - "【dense】: 밀집 여부 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_pt_PT.json deleted file mode 100644 index 6e3af4759..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_pt_PT.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "Azulejo de Interruptor", - "info": "Uma estrutura de item de lista genérica fornecida pelo Flutter, com uma estrutura de esquerda para o meio, e um Switch no final. Componentes podem ser inseridos nas posições correspondentes, facilitando a adaptação a itens específicos.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "A apresentação básica do SwitchListTile é a seguinte", - "desc": [ - "【secondary】: Componente esquerdo 【Widget】", - "【title】: Componente superior central 【Widget】", - "【subtitle】: Componente inferior central 【Widget】", - "【inactiveThumbColor】: Cor do círculo quando não selecionado 【Color】", - "【inactiveTrackColor】: Cor do trilho quando não selecionado 【Color】", - "【activeColor】: Cor do círculo quando selecionado 【Color】", - "【activeTrackColor】: Cor do trilho quando selecionado 【Color】", - "【onChanged】: Evento de seleção 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Efeito de seleção do SwitchListTile", - "desc": [ - "【selected】: Se está selecionado 【bool】", - "【inactiveThumbImage】: Imagem do círculo quando não selecionado 【ImageProvider】", - "【activeThumbImage】: Imagem do círculo quando selecionado 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Propriedade de densidade do SwitchListTile", - "desc": [ - "【dense】: Se é denso 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ru_RU.json deleted file mode 100644 index e4e3d0ce6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_ru_RU.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "Переключатель плитки", - "info": "Общая структура элемента списка, предоставляемая Flutter, имеет лево-центральную структуру, а в конце находится Switch. Компоненты могут быть вставлены в соответствующие позиции, что позволяет легко адаптироваться к конкретным элементам.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное поведение SwitchListTile", - "desc": [ - "【secondary】: Левый компонент 【Widget】", - "【title】: Верхний центральный компонент 【Widget】", - "【subtitle】: Нижний центральный компонент 【Widget】", - "【inactiveThumbColor】: Цвет кружка в невыбранном состоянии 【Color】", - "【inactiveTrackColor】: Цвет дорожки в невыбранном состоянии 【Color】", - "【activeColor】: Цвет кружка в выбранном состоянии 【Color】", - "【activeTrackColor】: Цвет дорожки в выбранном состоянии 【Color】", - "【onChanged】: Событие выбора 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "Эффект выбора SwitchListTile", - "desc": [ - "【selected】: Выбрано ли 【bool】", - "【inactiveThumbImage】: Изображение кружка в невыбранном состоянии 【ImageProvider】", - "【activeThumbImage】: Изображение кружка в выбранном состоянии 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "Свойство плотного расположения SwitchListTile", - "desc": [ - "【dense】: Плотное ли расположение 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_zh-CN.json deleted file mode 100644 index 1feece7fe..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/desc_zh-CN.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "id": 18, - "name": "SwitchListTile", - "localName": "切钮瓦片", - "info": "Flutter提供的一个通用列表条目结构,为左中结构,尾部是一个Switch。相应位置可插入组件,可以很方便地应对特定的条目。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "SwitchListTile的基本表现如下", - "desc": [ - "【secondary】: 左侧组件 【Widget】", - "【title】: 中间上组件 【Widget】", - "【subtitle】: 中间下组件 【Widget】", - "【inactiveThumbColor】: 未选中时圆圈颜色 【Color】", - "【inactiveTrackColor】: 未选中滑槽颜色 【Color】", - "【activeColor】: 选中时圆圈颜色 【Color】", - "【activeTrackColor】: 选中滑槽颜色 【Color】", - "【onChanged】: 选中事件 【Function(bool)】" - ] - }, - { - "file": "node2_select.dart", - "name": "SwitchListTile的选中效果", - "desc": [ - "【selected】: 是否选中 【bool】", - "【inactiveThumbImage】: 未选中时圆圈图片 【ImageProvider】", - "【activeThumbImage】: 选中时圆圈图片 【ImageProvider】" - ] - }, - { - "file": "node3_dense.dart", - "name": "SwitchListTile的密排属性", - "desc": [ - "【dense】: 是否密排 【bool】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node1_base.dart deleted file mode 100644 index 510988295..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node1_base.dart +++ /dev/null @@ -1,34 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class CustomSwitchListTile extends StatefulWidget { - const CustomSwitchListTile({Key? key}) : super(key: key); - - @override - _CustomSwitchListTileState createState() => _CustomSwitchListTileState(); -} - -class _CustomSwitchListTileState extends State { - var _value=false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: SwitchListTile( - value: _value, - inactiveThumbColor:Colors.cyanAccent , - inactiveTrackColor: Colors.blue.withAlpha(88), - activeColor: Colors.orangeAccent, - activeTrackColor: Colors.orange, - secondary: Image.asset("assets/images/icon_head.webp"), - title: const Text("张风捷特烈"), - subtitle: const Text("@万花过尽知无物"), - onChanged: (v) => setState(() => _value = !_value), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node2_select.dart b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node2_select.dart deleted file mode 100644 index bbdeaee30..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node2_select.dart +++ /dev/null @@ -1,35 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class SelectSwitchListTile extends StatefulWidget { - const SelectSwitchListTile({Key? key}) : super(key: key); - - @override - _SelectSwitchListTileState createState() => _SelectSwitchListTileState(); -} - -class _SelectSwitchListTileState extends State { - bool _value=false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: SwitchListTile( - value: _value, - selected: _value, - activeColor: Colors.orangeAccent, - secondary: Image.asset("assets/images/icon_head.webp"), - inactiveThumbImage: const AssetImage("assets/images/head_icon/icon_5.webp"), - activeThumbImage: const AssetImage("assets/images/icon_head.webp"), - title: const Text("张风捷特烈"), - subtitle: const Text("@万花过尽知无物"), - onChanged: (v) => setState(() => _value = !_value), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node3_dense.dart b/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node3_dense.dart deleted file mode 100644 index 06387d3c4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/SwitchListTile/node3_dense.dart +++ /dev/null @@ -1,34 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - -class DenseSwitchListTile extends StatefulWidget { - const DenseSwitchListTile({Key? key}) : super(key: key); - - @override - _DenseSwitchListTileState createState() => _DenseSwitchListTileState(); -} - -class _DenseSwitchListTileState extends State { - bool _value = false; - - @override - Widget build(BuildContext context) { - return Container( - margin: const EdgeInsets.all(10), - color: Colors.grey.withAlpha(22), - child: SwitchListTile( - value: _value, - dense: true, - selected: _value, - activeColor: Colors.orangeAccent, - secondary: Image.asset("assets/images/icon_head.webp"), - title: const Text("张风捷特烈"), - subtitle: const Text("@万花过尽知无物"), - onChanged: (v) => setState(() => _value = !_value), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_de_DE.json deleted file mode 100644 index ee33c758d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_de_DE.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "Tab", - "info": "Wird normalerweise für Items in der TabBar verwendet, hat eine obere und untere Struktur und kann ein Symbol und eine Inhaltskomponente angeben.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Tab", - "desc": [ - "【child】 : Untergeordnete Komponente 【Widget】", - "【text】 : Text 【String】", - "【icon】 : Untere Komponente 【Widgit】", - " text und child können nicht gleichzeitig existieren" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_en_US.json deleted file mode 100644 index f25740606..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_en_US.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "Tab", - "info": "Generally used as an item in the TabBar, with a top-bottom structure, allowing the specification of an icon and a content component.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Tab", - "desc": [ - "【child】: Child component 【Widget】", - "【text】: Text 【String】", - "【icon】: Bottom component 【Widget】", - " text and child cannot exist simultaneously" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_es_ES.json deleted file mode 100644 index 926b3d31d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_es_ES.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "Pestaña", - "info": "Generalmente se utiliza como un ítem en el TabBar, con una estructura de arriba hacia abajo, se puede especificar un ícono y un componente de contenido.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Tab", - "desc": [ - "【child】 : Componente hijo 【Widget】", - "【text】 : Texto 【String】", - "【icon】 : Componente inferior 【Widget】", - " text y child no pueden coexistir" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_fr_FR.json deleted file mode 100644 index 0b4fde058..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_fr_FR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "Onglet", - "info": "Généralement utilisé comme élément dans une TabBar, structure verticale, peut spécifier une icône et un composant de contenu.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Tab", - "desc": [ - "【child】 : Composant enfant 【Widget】", - "【text】 : Texte 【String】", - "【icon】 : Composant inférieur 【Widgit】", - " text et child ne peuvent pas coexister" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_it_IT.json deleted file mode 100644 index 964a9f73a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_it_IT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "Scheda", - "info": "Generalmente utilizzato per gli elementi in TabBar, struttura verticale, può specificare un'icona e un componente di contenuto.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di Tab", - "desc": [ - "【child】 : Componente figlio 【Widget】", - "【text】 : Testo 【String】", - "【icon】 : Componente inferiore 【Widgit】", - " text e child non possono esistere contemporaneamente" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ja_JP.json deleted file mode 100644 index 0b432a21e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ja_JP.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "タブ", - "info": "一般的にTabBarのアイテムとして使用され、上下構造で、アイコンとコンテンツコンポーネントを指定できます。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Tabの基本的な使用", - "desc": [ - "【child】 : 子コンポーネント 【Widget】", - "【text】 : テキスト 【String】", - "【icon】 : 下部コンポーネント 【Widgit】", - " textとchildは同時に存在できません" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ko_KR.json deleted file mode 100644 index 2a2307ed5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ko_KR.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "탭", - "info": "일반적으로 TabBar의 항목으로 사용되며, 상하 구조로 아이콘과 내용 컴포넌트를 지정할 수 있습니다.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "탭 기본 사용법", - "desc": [ - "【child】 : 자식 컴포넌트 【Widget】", - "【text】 : 텍스트 【String】", - "【icon】 : 하단 컴포넌트 【Widget】", - " text와 child는 동시에 존재할 수 없습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_pt_PT.json deleted file mode 100644 index 524a2d596..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_pt_PT.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "Separador", - "info": "Geralmente utilizado como item na TabBar, com uma estrutura de cima para baixo, pode especificar um ícone e um componente de conteúdo.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico do Tab", - "desc": [ - "【child】 : Componente filho 【Widget】", - "【text】 : Texto 【String】", - "【icon】 : Componente inferior 【Widgit】", - " text e child não podem coexistir" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ru_RU.json deleted file mode 100644 index c5eedc1c9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_ru_RU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "Вкладка", - "info": "Обычно используется как элемент в TabBar, имеет верхнюю и нижнюю структуру, может содержать иконку и компонент содержимого.", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Tab", - "desc": [ - "【child】 : Дочерний компонент 【Widget】", - "【text】 : Текст 【String】", - "【icon】 : Нижний компонент 【Widgit】", - " text и child не могут существовать одновременно" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_zh-CN.json deleted file mode 100644 index b3849f40c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/desc_zh-CN.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "id": 148, - "name": "Tab", - "localName": "标签", - "info": "一般用于TabBar中的item,上下结构,可指定图标和一个内容组件。", - "lever": 1, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Tab基本使用", - "desc": [ - "【child】 : 子组件 【Widget】", - "【text】 : 文字 【String】", - "【icon】 : 下方组件 【Widgit】", - " text和child不能同时存在" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Tab/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Tab/node1_base.dart deleted file mode 100644 index 932f2bc16..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Tab/node1_base.dart +++ /dev/null @@ -1,30 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-25 -/// contact me by email 1981462002@qq.com - - -class CustomTab extends StatelessWidget { - const CustomTab({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: const [ - Tab( - icon:Icon( Icons.add,color: Colors.blue,), - child: Text('添加'), - ), - Tab( - icon:Icon( Icons.close,color: Colors.red,), - text: '删除', - ), - Tab( - icon:Icon( Icons.refresh,color: Colors.green), - text: '更新', - ), - ], - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_de_DE.json deleted file mode 100644 index b6b2c857b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_de_DE.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "Tab-Leiste", - "info": "Eine schiebbare und klickbare Tab-Leiste, die normalerweise am unteren Rand der AppBar verwendet wird. Kann mit TabBarView kombiniert werden, um den Effekt des Seitenwechselns zu erzielen.", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von TabBar", - "desc": [ - "【controller】 : Controller 【TabController】", - "【indicatorColor】 : Indikatorfarbe 【Indikatorfarbe】", - "【indicatorWeight】 : Indikatorhöhe 【double】", - "【indicatorPadding】 : Indikatorrand 【EdgeInsetsGeometry】", - "【labelStyle】 : Textstil der Registerkarte 【TextStyle】", - "【unselectedLabelStyle】 : Textstil der nicht ausgewählten Registerkarte 【TextStyle】", - "【isScrollable】 : Ob scrollbar 【bool】", - "【onTap】 : Rückruf beim Klicken auf die Registerkarte 【Function(int)】", - "【tabs】 : Tab-Komponenten 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Durch das Setzen von Theme kann der Wasserwelleneffekt vermieden werden", - "desc": [ - "Setzen Sie die Farbe der Wasserwelle in Theme auf transparent." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_en_US.json deleted file mode 100644 index 88bd3cce8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_en_US.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "Tab Bar", - "info": "A slidable and clickable tab bar, usually used at the bottom of the AppBar, can be used in conjunction with TabBarView to achieve a sliding page effect.", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of TabBar", - "desc": [ - "【controller】 : Controller 【TabController】", - "【indicatorColor】 : Indicator Color 【Indicator Color】", - "【indicatorWeight】 : Indicator Height 【double】", - "【indicatorPadding】 : Indicator Margin 【EdgeInsetsGeometry】", - "【labelStyle】 : Tab Text Style 【TextStyle】", - "【unselectedLabelStyle】 : Unselected Text Style 【TextStyle】", - "【isScrollable】 : Whether Scrollable 【bool】", - "【onTap】 : Tab Click Callback 【Function(int)】", - "【tabs】 : Tab Components 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Achieve No Ripple Effect by Setting Theme", - "desc": [ - "Set the ripple color in the Theme to transparent." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_es_ES.json deleted file mode 100644 index 1844c1b3b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_es_ES.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "Barra de pestañas", - "info": "Barra de pestañas deslizante y clicable, generalmente utilizada en la parte inferior de AppBar, se puede usar junto con TabBarView para lograr un efecto de deslizamiento de página.", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de TabBar", - "desc": [ - "【controller】 : Controlador 【TabController】", - "【indicatorColor】 : Color del indicador 【Color del indicador】", - "【indicatorWeight】 : Altura del indicador 【double】", - "【indicatorPadding】 : Márgenes del indicador 【EdgeInsetsGeometry】", - "【labelStyle】 : Estilo del texto de la pestaña 【TextStyle】", - "【unselectedLabelStyle】 : Estilo del texto no seleccionado 【TextStyle】", - "【isScrollable】 : Deslizable 【bool】", - "【onTap】 : Callback al hacer clic en la pestaña 【Function(int)】", - "【tabs】 : Componentes de la pestaña 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Se puede lograr sin efecto de onda configurando Theme", - "desc": [ - "Simplemente configure el color de la onda en Theme como transparente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_fr_FR.json deleted file mode 100644 index 330c9071a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_fr_FR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "Barre d'onglets", - "info": "Barre d'onglets glissable et cliquable, généralement utilisée en bas de l'AppBar, peut être utilisée avec TabBarView pour réaliser un effet de glissement de page.", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de TabBar", - "desc": [ - "【controller】 : Contrôleur 【TabController】", - "【indicatorColor】 : Couleur de l'indicateur 【Couleur de l'indicateur】", - "【indicatorWeight】 : Hauteur de l'indicateur 【double】", - "【indicatorPadding】 : Marge de l'indicateur 【EdgeInsetsGeometry】", - "【labelStyle】 : Style de texte de l'onglet 【TextStyle】", - "【unselectedLabelStyle】 : Style de texte non sélectionné 【TextStyle】", - "【isScrollable】 : Peut être glissé 【bool】", - "【onTap】 : Rappel de clic sur l'onglet 【Function(int)】", - "【tabs】 : Composant d'onglet 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Réaliser sans ondulation en définissant Theme", - "desc": [ - "Définissez simplement la couleur de l'ondulation dans Theme comme transparente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_it_IT.json deleted file mode 100644 index 4245686a3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_it_IT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "Barra delle schede", - "info": "Barra delle schede scorrevole e cliccabile, solitamente utilizzata nella parte inferiore dell'AppBar, può essere utilizzata insieme a TabBarView per ottenere l'effetto di scorrimento delle pagine.", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di TabBar", - "desc": [ - "【controller】 : Controller 【TabController】", - "【indicatorColor】 : Colore dell'indicatore 【Colore dell'indicatore】", - "【indicatorWeight】 : Altezza dell'indicatore 【double】", - "【indicatorPadding】 : Margine dell'indicatore 【EdgeInsetsGeometry】", - "【labelStyle】 : Stile del testo della scheda 【TextStyle】", - "【unselectedLabelStyle】 : Stile del testo non selezionato 【TextStyle】", - "【isScrollable】 : Scorrevole 【bool】", - "【onTap】 : Callback del clic sulla scheda 【Function(int)】", - "【tabs】 : Componenti delle schede 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Impostando il tema è possibile ottenere l'effetto senza ondulazione", - "desc": [ - "Basta impostare il colore dell'ondulazione nel tema su trasparente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ja_JP.json deleted file mode 100644 index 47debc38b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ja_JP.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "タブバー", - "info": "スワイプやクリックが可能なタブバーで、通常はAppBarの下部に使用され、TabBarViewと連携してページをスワイプする効果を実現できます。", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBarの基本的な使用", - "desc": [ - "【controller】 : コントローラー 【TabController】", - "【indicatorColor】 : インジケーターの色 【インジケーターの色】", - "【indicatorWeight】 : インジケーターの高さ 【double】", - "【indicatorPadding】 : インジケーターの余白 【EdgeInsetsGeometry】", - "【labelStyle】 : タブのテキストスタイル 【TextStyle】", - "【unselectedLabelStyle】 : 未選択のテキストスタイル 【TextStyle】", - "【isScrollable】 : スワイプ可能かどうか 【bool】", - "【onTap】 : タブクリックのコールバック 【Function(int)】", - "【tabs】 : タブコンポーネント 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Themeを設定して水波紋を無効にする", - "desc": [ - "Themeの水波紋の色を透明に設定します。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ko_KR.json deleted file mode 100644 index 40400db9c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ko_KR.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "탭 바", - "info": "탭 바를 스와이프하고 클릭할 수 있으며, 일반적으로 AppBar의 하단에 사용됩니다. TabBarView와 함께 사용하여 페이지 슬라이딩 효과를 구현할 수 있습니다.", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBar 기본 사용", - "desc": [ - "【controller】 : 컨트롤러 【TabController】", - "【indicatorColor】 : 인디케이터 색상 【인디케이터 색상】", - "【indicatorWeight】 : 인디케이터 높이 【double】", - "【indicatorPadding】 : 인디케이터 여백 【EdgeInsetsGeometry】", - "【labelStyle】 : 탭 텍스트 스타일 【TextStyle】", - "【unselectedLabelStyle】 : 선택되지 않은 텍스트 스타일 【TextStyle】", - "【isScrollable】 : 스와이프 가능 여부 【bool】", - "【onTap】 : 탭 클릭 콜백 【Function(int)】", - "【tabs】 : 탭 위젯 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Theme 설정을 통해 물결 효과 없이 구현", - "desc": [ - "Theme에서 물결 효과 색상을 투명으로 설정하면 됩니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_pt_PT.json deleted file mode 100644 index 7105e7935..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_pt_PT.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "Barra de Etiquetas", - "info": "Barra de etiquetas deslizável e clicável, geralmente usada na parte inferior do AppBar, pode ser usada em conjunto com o TabBarView para alcançar o efeito de deslizar páginas.", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do TabBar", - "desc": [ - "【controller】 : Controlador 【TabController】", - "【indicatorColor】 : Cor do Indicador 【Cor do Indicador】", - "【indicatorWeight】 : Altura do Indicador 【double】", - "【indicatorPadding】 : Margem do Indicador 【EdgeInsetsGeometry】", - "【labelStyle】 : Estilo do Texto da Etiqueta 【TextStyle】", - "【unselectedLabelStyle】 : Estilo do Texto Não Selecionado 【TextStyle】", - "【isScrollable】 : Se é Deslizável 【bool】", - "【onTap】 : Callback de Clique na Etiqueta 【Function(int)】", - "【tabs】 : Componentes das Etiquetas 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Configuração do Theme para Eliminar Ondulações", - "desc": [ - "Defina a cor das ondulações no Theme como transparente." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ru_RU.json deleted file mode 100644 index d0fad2872..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_ru_RU.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "Панель вкладок", - "info": "Скользящая и кликабельная панель вкладок, обычно используется в нижней части AppBar, может использоваться вместе с TabBarView для создания эффекта скользящих страниц.", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование TabBar", - "desc": [ - "【controller】 : Контроллер 【TabController】", - "【indicatorColor】 : Цвет индикатора 【Цвет индикатора】", - "【indicatorWeight】 : Высота индикатора 【double】", - "【indicatorPadding】 : Отступы индикатора 【EdgeInsetsGeometry】", - "【labelStyle】 : Стиль текста вкладки 【TextStyle】", - "【unselectedLabelStyle】 : Стиль текста невыбранной вкладки 【TextStyle】", - "【isScrollable】 : Возможность прокрутки 【bool】", - "【onTap】 : Обратный вызов при нажатии на вкладку 【Function(int)】", - "【tabs】 : Компоненты вкладок 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "Реализация без водяных волн через настройку Theme", - "desc": [ - "Просто установите цвет водяных волн в Theme на прозрачный." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_zh-CN.json deleted file mode 100644 index b49dbb29f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/desc_zh-CN.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": 58, - "name": "TabBar", - "localName": "标签栏", - "info": "可滑动和点击标签栏,通常用于AppBar的底部,可与TabBarView联用,实现滑页的效果。", - "lever": 3, - "family": 1, - "linkIds": [ - 57, - 59, - 148 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabBar基本使用", - "desc": [ - "【controller】 : 控制器 【TabController】", - "【indicatorColor】 : 指示器颜色 【指示器颜色】", - "【indicatorWeight】 : 指示器高 【double】", - "【indicatorPadding】 : 指示器边距 【EdgeInsetsGeometry】", - "【labelStyle】 : 页签文字样式 【TextStyle】", - "【unselectedLabelStyle】 : 未选中文字样式 【TextStyle】", - "【isScrollable】 : 是否可滑动 【bool】", - "【onTap】 : 页签点击回调 【Function(int)】", - "【tabs】 : 标签组件 【List】" - ] - }, - { - "file": "node2_noShadow.dart", - "name": "通过设置Theme可实现无水波纹", - "desc": [ - "将Theme关于水波纹的颜色设置为透明即可。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/node1_base.dart deleted file mode 100644 index 747d93ea4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/node1_base.dart +++ /dev/null @@ -1,46 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-16 -/// contact me by email 1981462002@qq.com - -class CustomTabBar extends StatefulWidget { - const CustomTabBar({Key? key}) : super(key: key); - - @override - _CustomTabBarState createState() => _CustomTabBarState(); -} - -class _CustomTabBarState extends State - with SingleTickerProviderStateMixin { - final List tabs = ['风画庭', '雨韵舍', '雷鸣殿', '电疾堂', '霜寒阁', '雪月楼']; - late TabController _tabController; - - @override - void initState() { - super.initState(); - _tabController = TabController(vsync: this, length: tabs.length); - } - - @override - void dispose() { - _tabController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return TabBar( - onTap: (tab) => print(tab), - labelStyle: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold), - unselectedLabelStyle: const TextStyle(fontSize: 16), - isScrollable: true, - controller: _tabController, - labelColor: Colors.blue, - indicatorWeight: 3, - indicatorPadding: const EdgeInsets.symmetric(horizontal: 10), - unselectedLabelColor: Colors.grey, - indicatorColor: Colors.orangeAccent, - tabs: tabs.map((e) => Tab(text: e)).toList(), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/node2_noShadow.dart b/modules/widget_system/widgets/lib/StatelessWidget/TabBar/node2_noShadow.dart deleted file mode 100644 index 469933933..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabBar/node2_noShadow.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class NoShadowTabBarDemo extends StatefulWidget { - const NoShadowTabBarDemo({Key? key}) : super(key: key); - - @override - _NSTabBarState createState() => _NSTabBarState(); -} - -class _NSTabBarState extends State - with SingleTickerProviderStateMixin { - final List tabs = ['风画庭', '雨韵舍', '雷鸣殿', '电疾堂', '霜寒阁', '雪月楼']; - late TabController _tabController; - - @override - void initState() { - super.initState(); - _tabController = TabController(vsync: this, length: tabs.length); - } - - @override - void dispose() { - _tabController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return Theme( - data: Theme.of(context).copyWith( - splashColor: Colors.transparent, - highlightColor: Colors.transparent, - ), - child: TabBar( - onTap: (tab) => print(tab), - labelStyle: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold), - unselectedLabelStyle: const TextStyle(fontSize: 16), - isScrollable: true, - controller: _tabController, - labelColor: Colors.blue, - indicatorWeight: 3, - indicatorPadding: const EdgeInsets.symmetric(horizontal: 10), - unselectedLabelColor: Colors.grey, - indicatorColor: Colors.orangeAccent, - tabs: tabs.map((e) => Tab(text: e)).toList(), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_de_DE.json deleted file mode 100644 index 96f33fc05..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_de_DE.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "Tab-Seitenwähler", - "info": "Wird normalerweise als Indikator in Verbindung mit TabBarView verwendet und teilt sich einen gemeinsamen TabController. Farbe, Größe und ausgewählte Farbe können angegeben werden.", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von TabPageSelector", - "desc": [ - "【controller】 : Controller 【TabController】", - "【indicatorSize】: Indikatorgröße 【double】", - "【selectedColor】: Ausgewählte Farbe 【Color】", - "【color】: Farbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_en_US.json deleted file mode 100644 index b56c27475..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_en_US.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "Tab Sliding Selector", - "info": "Usually used as an indicator with TabBarView, sharing a common TabController. Can specify color, size, and selected color.", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of TabPageSelector", - "desc": [ - "【controller】 : Controller 【TabController】", - "【indicatorSize】: Indicator Size 【double】", - "【selectedColor】: Selected Color 【Color】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_es_ES.json deleted file mode 100644 index 734482d3b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_es_ES.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "Selector de pestañas deslizante", - "info": "Normalmente se utiliza como indicador junto con TabBarView, compartiendo un TabController. Se pueden especificar colores, tamaños y colores seleccionados.", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de TabPageSelector", - "desc": [ - "【controller】 : Controlador 【TabController】", - "【indicatorSize】: Tamaño del indicador 【double】", - "【selectedColor】: Color seleccionado 【Color】", - "【color】: Color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_fr_FR.json deleted file mode 100644 index 21bef59b7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_fr_FR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "Sélecteur de page à onglets", - "info": "Utilisé généralement comme indicateur avec TabBarView, partageant un TabController commun. Peut spécifier la couleur, la taille, la couleur sélectionnée.", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de TabPageSelector", - "desc": [ - "【controller】 : Contrôleur 【TabController】", - "【indicatorSize】: Taille de l'indicateur 【double】", - "【selectedColor】: Couleur sélectionnée 【Color】", - "【color】: Couleur 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_it_IT.json deleted file mode 100644 index ca2cb9293..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_it_IT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "Selettore di scorrimento delle schede", - "info": "Utilizzato solitamente come indicatore insieme a TabBarView, condividendo un TabController. È possibile specificare colore, dimensione e colore selezionato.", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso base di TabPageSelector", - "desc": [ - "【controller】 : Controller 【TabController】", - "【indicatorSize】: Dimensione dell'indicatore 【double】", - "【selectedColor】: Colore selezionato 【Color】", - "【color】: Colore 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ja_JP.json deleted file mode 100644 index 9457a660c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ja_JP.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "タブページセレクター", - "info": "通常、インジケーターとしてTabBarViewと連携して使用され、同じTabControllerを共有します。色、サイズ、選択色を指定できます。", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabPageSelectorの基本的な使用", - "desc": [ - "【controller】 : コントローラー 【TabController】", - "【indicatorSize】: インジケーターサイズ 【double】", - "【selectedColor】: 選択色 【Color】", - "【color】: 色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ko_KR.json deleted file mode 100644 index 0fe8b10b7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ko_KR.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "탭 페이지 선택기", - "info": "일반적으로 지시자로 사용되며 TabBarView와 함께 사용되며, 동일한 TabController를 공유합니다. 색상, 크기, 선택된 색상을 지정할 수 있습니다.", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabPageSelector 기본 사용", - "desc": [ - "【controller】 : 컨트롤러 【TabController】", - "【indicatorSize】: 지시자 크기 【double】", - "【selectedColor】: 선택된 색상 【Color】", - "【color】: 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_pt_PT.json deleted file mode 100644 index bc5a77ae3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_pt_PT.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "Seletor de Deslizamento de Abas", - "info": "Geralmente usado como um indicador em conjunto com o TabBarView, compartilhando um TabController. Pode especificar cor, tamanho e cor de seleção.", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do TabPageSelector", - "desc": [ - "【controller】 : Controlador 【TabController】", - "【indicatorSize】: Tamanho do Indicador 【double】", - "【selectedColor】: Cor de Seleção 【Color】", - "【color】: Cor 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ru_RU.json deleted file mode 100644 index 41d153360..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_ru_RU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "Выбор вкладок с прокруткой", - "info": "Обычно используется как индикатор вместе с TabBarView, используя общий TabController. Можно указать цвет, размер, цвет выбранного элемента.", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование TabPageSelector", - "desc": [ - "【controller】 : Контроллер 【TabController】", - "【indicatorSize】: Размер индикатора 【double】", - "【selectedColor】: Цвет выбранного элемента 【Color】", - "【color】: Цвет 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_zh-CN.json deleted file mode 100644 index 65dd3fd6d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/desc_zh-CN.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "id": 205, - "name": "TabPageSelector", - "localName": "页签滑动选择器", - "info": "通常作为指示器与TabBarView联用,共同使用一个TabController。可指定颜色、大小、选中色。", - "lever": 2, - "family": 0, - "linkIds": [ - 206, - 59 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabPageSelector基本使用", - "desc": [ - "【controller】 : 控制器 【TabController】", - "【indicatorSize】: 指示器大小 【double】", - "【selectedColor】: 选中色 【Color】", - "【color】: 颜色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/node1_base.dart deleted file mode 100644 index e061bc8b5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelector/node1_base.dart +++ /dev/null @@ -1,64 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class TabPageSelectorDemo extends StatefulWidget { - const TabPageSelectorDemo({Key? key}) : super(key: key); - - @override - _TabPageSelectorDemoState createState() => _TabPageSelectorDemoState(); -} - -class _TabPageSelectorDemoState extends State - with SingleTickerProviderStateMixin { - final List tabs = ['风画庭', '雨韵舍', '雷鸣殿', '电疾堂', '霜寒阁', '雪月楼']; - late TabController _tabController; - - @override - void initState() { - super.initState(); - _tabController = TabController(vsync: this, length: tabs.length); - } - - @override - void dispose() { - _tabController.dispose(); - super.dispose(); - } - - @override - Widget build(BuildContext context) { - return SizedBox( - height: 200, - child: Stack( - alignment: Alignment.center, - children: [ - Container(color: Colors.purple, child: _buildTableBarView()), - Positioned( - bottom: 10, - child: buildTabPageSelector(), - ), - ], - ), - ); - } - - Widget buildTabPageSelector() => TabPageSelector( - controller: _tabController, - color: Colors.white, - indicatorSize: 10, - selectedColor: Colors.orangeAccent, - ); - - Widget _buildTableBarView() => TabBarView( - controller: _tabController, - children: tabs - .map((e) => Center( - child: Text( - e, - style: const TextStyle(color: Colors.white, fontSize: 20), - ))) - .toList()); -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_de_DE.json deleted file mode 100644 index 4dcbc7e14..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "Tab-Indikator", - "info": "Eine runde Komponente mit Randlinie, bei der Größe, Farbe und Randfarbe angegeben werden können. Es ist Teil des TabPageSelector und wird in der Regel nicht allein verwendet.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von TabPageSelectorIndicator", - "desc": [ - "【size】: Größe 【double】", - "【backgroundColor】: Hintergrundfarbe 【Color】", - "【borderColor】: Randfarbe 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_en_US.json deleted file mode 100644 index 5394fb213..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "Tab Indicator", - "info": "A circular component with a border, which can specify size, color, and border color. It is part of the TabPageSelector and is generally not used alone.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of TabPageSelectorIndicator", - "desc": [ - "【size】: size 【double】", - "【backgroundColor】: background color 【Color】", - "【borderColor】: border color 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_es_ES.json deleted file mode 100644 index 660971761..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "Indicador de selección de pestañas", - "info": "Un componente circular con bordes que puede especificar tamaño, color y color del borde. Es parte de TabPageSelector y generalmente no se usa por separado.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de TabPageSelectorIndicator", - "desc": [ - "【size】: Tamaño 【double】", - "【backgroundColor】: Color de fondo 【Color】", - "【borderColor】: Color del borde 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_fr_FR.json deleted file mode 100644 index cecf95637..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "Indicateur d'onglet", - "info": "Un composant circulaire avec une bordure, pouvant spécifier la taille, la couleur et la couleur de la bordure. Fait partie du TabPageSelector, généralement non utilisé seul.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de TabPageSelectorIndicator", - "desc": [ - "【size】: Taille 【double】", - "【backgroundColor】: Couleur de fond 【Color】", - "【borderColor】: Couleur de la bordure 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_it_IT.json deleted file mode 100644 index a5f7ce13f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "Indicatore del selettore di pagine", - "info": "Un componente circolare con bordi, che può essere specificato per dimensioni, colore e colore del bordo. Fa parte del TabPageSelector e generalmente non viene utilizzato da solo.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di TabPageSelectorIndicator", - "desc": [ - "【size】: dimensione 【double】", - "【backgroundColor】: colore di sfondo 【Color】", - "【borderColor】: colore del bordo 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ja_JP.json deleted file mode 100644 index df8e573cd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "タブインジケーター", - "info": "枠線付きの円形コンポーネントで、サイズ、色、枠線の色を指定できます。TabPageSelectorの一部であり、通常は単独で使用しません。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabPageSelectorIndicatorの基本使用", - "desc": [ - "【size】: サイズ 【double】", - "【backgroundColor】: 背景色 【Color】", - "【borderColor】: 枠線の色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ko_KR.json deleted file mode 100644 index 482e05949..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "탭 페이지 선택기 표시기", - "info": "테두리가 있는 원형 컴포넌트로, 크기, 색상, 테두리 색상을 지정할 수 있습니다. TabPageSelector의 일부이며 일반적으로 단독으로 사용되지 않습니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabPageSelectorIndicator 기본 사용법", - "desc": [ - "【size】: 크기 【double】", - "【backgroundColor】: 배경색 【Color】", - "【borderColor】: 테두리 색상 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_pt_PT.json deleted file mode 100644 index f35b4ce92..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "Indicador de Seletor de Página", - "info": "Um componente circular com borda que pode especificar tamanho, cor e cor da borda. Faz parte do TabPageSelector e geralmente não é usado sozinho.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do TabPageSelectorIndicator", - "desc": [ - "【size】: Tamanho 【double】", - "【backgroundColor】: Cor de fundo 【Color】", - "【borderColor】: Cor da borda 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ru_RU.json deleted file mode 100644 index c8ff63b0b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "Индикатор вкладки", - "info": "Круглый компонент с границей, который можно настроить по размеру, цвету и цвету границы. Является частью TabPageSelector и обычно не используется отдельно.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование TabPageSelectorIndicator", - "desc": [ - "【size】: Размер 【double】", - "【backgroundColor】: Цвет фона 【Color】", - "【borderColor】: Цвет границы 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_zh-CN.json deleted file mode 100644 index e667b9a44..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 206, - "name": "TabPageSelectorIndicator", - "localName": "页签指示器", - "info": "一个有边线的圆形组件,可指定大小、颜色、边线色。是TabPageSelector的部分之一,一般不单独使用。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "TabPageSelectorIndicator基本使用", - "desc": [ - "【size】: 大小 【double】", - "【backgroundColor】: 背景色 【Color】", - "【borderColor】: 边线色 【Color】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/node1_base.dart deleted file mode 100644 index 089bb4aca..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/TabPageSelectorIndicator/node1_base.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter/material.dart'; - - - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - - -class TabPageSelectorIndicatorDemo extends StatelessWidget { - const TabPageSelectorIndicatorDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children:const [ - TabPageSelectorIndicator( - backgroundColor: Colors.greenAccent, - borderColor: Colors.deepPurpleAccent, - size: 15, - ), - TabPageSelectorIndicator( - backgroundColor: Colors.blue, - borderColor: Colors.grey, - size: 20, - ), - TabPageSelectorIndicator( - backgroundColor: Colors.green, - borderColor: Colors.red, - size: 25, - ), - TabPageSelectorIndicator( - backgroundColor: Colors.yellow, - borderColor: Colors.brown, - size: 30, - ), - TabPageSelectorIndicator( - backgroundColor: Colors.amber, - borderColor: Colors.purpleAccent, - size: 35, - ), - ], - ); - } - -} - diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_de_DE.json deleted file mode 100644 index 15ee33b2e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_de_DE.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "Textkomponente", - "info": "Eine Komponente zur Anzeige von Text. Verfügt über eine Vielzahl von Eigenschaften, die Ihren Anforderungen gerecht werden. Der Kernstil wird durch das style-Attribut gesteuert.", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Grundlegende Textstile", - "desc": [ - "【Parameter】 : Text 【String】", - "【style】: Textstil 【TextStyle】", - "【color】: Textfarbe 【Color】", - "【fontSize】: Textgröße 【double】", - "【fontWeight】: Schriftstärke 【FontWeight】", - "【fontStyle】: Schriftstil 【fontStyle】", - "【letterSpacing】: Zeichenabstand 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Textschatten", - "desc": [ - "【shadows】 : Text 【List】", - "【backgroundColor】: Hintergrundfarbe 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Textdekoration", - "desc": [ - "【fontFamily】 : Schriftart 【String】", - "【decoration】: Dekorationslinie 【TextDecoration】", - "【decorationColor】: Dekorationslinienfarbe 【Color】", - "【decorationThickness】: Dekorationsliniendicke 【double】", - "【decorationStyle】: Dekorationslinienstil 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "Textausrichtung", - "desc": [ - "【textAlign】: Ausrichtung 【TextAlign】", - "Unten sind in der Reihenfolge: left, right, center, justify, start, end." - ] - }, - { - "file": "node5_textDirection.dart", - "name": "Textrichtung und maximale Zeilenanzahl", - "desc": [ - "【maxLines】 : Maximale Zeilenanzahl 【int】", - "【textDirection】 : Textrichtung 【TextDirection】", - "Unten sind in der Reihenfolge: rtl, ltr." - ] - }, - { - "file": "node6_softWrap.dart", - "name": "Zeilenumbruch und Überlaufverhalten", - "desc": [ - "【softWrap】 : Zeilenumbruch 【bool】", - "【overflow】 : Überlaufverhalten 【TextOverflow】", - "Unten softWrap=false; overflow in der Reihenfolge: clip, fade, ellipsis, visible." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_en_US.json deleted file mode 100644 index cdfa68730..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_en_US.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "Text Component", - "info": "A component used to display text. It has a wide range of properties to meet your usage needs, with core styles controlled by the style attribute.", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Basic Text Styles", - "desc": [ - "【Parameter】 : Text 【String】", - "【style】: Text Style 【TextStyle】", - "【color】: Text Color 【Color】", - "【fontSize】: Font Size 【double】", - "【fontWeight】: Font Weight 【FontWeight】", - "【fontStyle】: Font Style 【fontStyle】", - "【letterSpacing】: Letter Spacing 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Text Shadow", - "desc": [ - "【shadows】 : Text Shadows 【List】", - "【backgroundColor】: Background Color 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Text Decoration", - "desc": [ - "【fontFamily】 : Font Family 【String】", - "【decoration】: Decoration Line 【TextDecoration】", - "【decorationColor】: Decoration Line Color 【Color】", - "【decorationThickness】: Decoration Line Thickness 【double】", - "【decorationStyle】: Decoration Line Style 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "Text Alignment", - "desc": [ - "【textAlign】: Alignment 【TextAlign】", - "The following are: left, right, center, justify, start, end." - ] - }, - { - "file": "node5_textDirection.dart", - "name": "Text Direction and Maximum Lines", - "desc": [ - "【maxLines】 : Maximum Lines 【int】", - "【textDirection】 : Text Direction 【TextDirection】", - "The following are: rtl, ltr." - ] - }, - { - "file": "node6_softWrap.dart", - "name": "Wrapping and Overflow Effects", - "desc": [ - "【softWrap】 : Whether to Wrap 【bool】", - "【overflow】 : Overflow Effect 【TextOverflow】", - "When softWrap=false; overflow options are: clip, fade, ellipsis, visible." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_es_ES.json deleted file mode 100644 index 57bfe77bb..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_es_ES.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "Componente de texto", - "info": "Componente utilizado para mostrar texto. Tiene una gran cantidad de propiedades, suficientes para satisfacer tus necesidades de uso. El estilo principal está controlado por la propiedad style.", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Estilo básico del texto", - "desc": [ - "【Parámetro de entrada】 : Texto 【String】", - "【style】: Estilo del texto 【TextStyle】", - "【color】: Color del texto 【Color】", - "【fontSize】: Tamaño del texto 【double】", - "【fontWeight】: Peso de la fuente 【FontWeight】", - "【fontStyle】: Estilo de la fuente 【fontStyle】", - "【letterSpacing】: Espaciado entre letras 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Sombra del texto", - "desc": [ - "【shadows】 : Sombra del texto 【List】", - "【backgroundColor】: Color de fondo 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Línea decorativa del texto", - "desc": [ - "【fontFamily】 : Fuente del texto 【String】", - "【decoration】: Línea decorativa 【TextDecoration】", - "【decorationColor】: Color de la línea decorativa 【Color】", - "【decorationThickness】: Grosor de la línea decorativa 【double】", - "【decorationStyle】: Estilo de la línea decorativa 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "Alineación del texto", - "desc": [ - "【textAlign】: Alineación del texto 【TextAlign】", - "A continuación se muestran en orden: izquierda, derecha, centro, justificado, inicio, final." - ] - }, - { - "file": "node5_textDirection.dart", - "name": "Dirección del texto y número máximo de líneas", - "desc": [ - "【maxLines】 : Número máximo de líneas 【int】", - "【textDirection】 : Dirección del texto 【TextDirection】", - "A continuación se muestran en orden: rtl, ltr." - ] - }, - { - "file": "node6_softWrap.dart", - "name": "Ajuste de línea y efecto de desbordamiento", - "desc": [ - "【softWrap】 : Ajuste de línea 【bool】", - "【overflow】 : Efecto de desbordamiento 【TextOverflow】", - "A continuación softWrap=false; overflow en orden: recortar, desvanecer, puntos suspensivos, visible." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_fr_FR.json deleted file mode 100644 index 650db5af9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_fr_FR.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "Composant de texte", - "info": "Un composant pour afficher du texte. Possède de nombreuses propriétés, suffisantes pour répondre à vos besoins d'utilisation. Les styles de base sont contrôlés par l'attribut style.", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Style de base du texte", - "desc": [ - "【Paramètre】 : Texte 【String】", - "【style】: Style du texte 【TextStyle】", - "【color】: Couleur du texte 【Color】", - "【fontSize】: Taille du texte 【double】", - "【fontWeight】: Poids de la police 【FontWeight】", - "【fontStyle】: Style de la police 【fontStyle】", - "【letterSpacing】: Espacement des lettres 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Ombre du texte", - "desc": [ - "【shadows】 : Texte 【List】", - "【backgroundColor】: Couleur de fond 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Ligne de décoration du texte", - "desc": [ - "【fontFamily】 : Police du texte 【String】", - "【decoration】: Ligne de décoration 【TextDecoration】", - "【decorationColor】: Couleur de la ligne de décoration 【Color】", - "【decorationThickness】: Épaisseur de la ligne de décoration 【double】", - "【decorationStyle】: Style de la ligne de décoration 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "Alignement du texte", - "desc": [ - "【textAlign】: Alignement 【TextAlign】", - "Les options suivantes sont : left, right, center, justify, start, end" - ] - }, - { - "file": "node5_textDirection.dart", - "name": "Direction du texte et nombre maximum de lignes", - "desc": [ - "【maxLines】 : Nombre maximum de lignes 【int】", - "【textDirection】 : Direction du texte 【TextDirection】", - "Les options suivantes sont : rtl, ltr" - ] - }, - { - "file": "node6_softWrap.dart", - "name": "Retour à la ligne et effet de débordement", - "desc": [ - "【softWrap】 : Retour à la ligne 【bool】", - "【overflow】 : Effet de débordement 【TextOverflow】", - "Si softWrap=false; les options overflow sont : clip, fade, ellipsis, visible" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_it_IT.json deleted file mode 100644 index 18a546bb7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_it_IT.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "Componente di testo", - "info": "Componente per visualizzare il testo. Possiede molte proprietà, sufficienti per soddisfare le tue esigenze di utilizzo. Lo stile principale è controllato dalla proprietà style.", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Stile di base del testo", - "desc": [ - "【Parametro】 : Testo 【String】", - "【style】: Stile del testo 【TextStyle】", - "【color】: Colore del testo 【Color】", - "【fontSize】: Dimensione del testo 【double】", - "【fontWeight】: Peso del carattere 【FontWeight】", - "【fontStyle】: Stile del carattere 【fontStyle】", - "【letterSpacing】: Spaziatura tra i caratteri 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Ombreggiatura del testo", - "desc": [ - "【shadows】 : Ombre del testo 【List】", - "【backgroundColor】: Colore di sfondo 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Linea decorativa del testo", - "desc": [ - "【fontFamily】 : Famiglia del carattere 【String】", - "【decoration】: Linea decorativa 【TextDecoration】", - "【decorationColor】: Colore della linea decorativa 【Color】", - "【decorationThickness】: Spessore della linea decorativa 【double】", - "【decorationStyle】: Stile della linea decorativa 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "Allineamento del testo", - "desc": [ - "【textAlign】: Allineamento 【TextAlign】", - "Di seguito in ordine: left, right, center, justify, start, end," - ] - }, - { - "file": "node5_textDirection.dart", - "name": "Direzione del testo e numero massimo di righe", - "desc": [ - "【maxLines】 : Numero massimo di righe 【int】", - "【textDirection】 : Direzione del testo 【TextDirection】", - "Di seguito in ordine: rtl, ltr," - ] - }, - { - "file": "node6_softWrap.dart", - "name": "A capo automatico ed effetto di overflow", - "desc": [ - "【softWrap】 : A capo automatico 【bool】", - "【overflow】 : Effetto di overflow 【TextOverflow】", - "Di seguito softWrap=false; overflow in ordine: clip, fade, ellipsis, visible," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ja_JP.json deleted file mode 100644 index 80209a30f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ja_JP.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "テキストコンポーネント", - "info": "テキストを表示するためのコンポーネントです。多くの属性を持っており、あなたの使用ニーズを十分に満たすことができます。コアのスタイルはstyle属性によって制御されます。", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "テキストの基本スタイル", - "desc": [ - "【入参】 : テキスト 【String】", - "【style】: テキストスタイル 【TextStyle】", - "【color】: テキストカラー 【Color】", - "【fontSize】: テキストサイズ 【double】", - "【fontWeight】: フォントの太さ 【FontWeight】", - "【fontStyle】: フォントスタイル 【fontStyle】", - "【letterSpacing】: 文字間隔 【double】" - ] - }, - { - "file": "node2.dart", - "name": "テキストシャドウ", - "desc": [ - "【shadows】 : テキスト 【List】", - "【backgroundColor】: 背景色 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "テキスト装飾線", - "desc": [ - "【fontFamily】 : テキストフォント 【String】", - "【decoration】: 装飾線 【TextDecoration】", - "【decorationColor】: 装飾線の色 【Color】", - "【decorationThickness】: 装飾線の太さ 【double】", - "【decorationStyle】: 装飾線のスタイル 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "テキストの配置", - "desc": [ - "【textAlign】: 配置 【TextAlign】", - "以下は順に:left、right、center、justify、start、end," - ] - }, - { - "file": "node5_textDirection.dart", - "name": "テキストの方向と最大行数", - "desc": [ - "【maxLines】 : 最大行数 【int】", - "【textDirection】 : テキストの方向 【TextDirection】", - "以下は順に:rtl、ltr," - ] - }, - { - "file": "node6_softWrap.dart", - "name": "折り返しとオーバーフロー効果", - "desc": [ - "【softWrap】 : 折り返し 【bool】", - "【overflow】 : オーバーフロー効果 【TextOverflow】", - "以下softWrap=false; overflowは順に:clip、fade、ellipsis、visible," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ko_KR.json deleted file mode 100644 index 875691c29..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ko_KR.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "텍스트 컴포넌트", - "info": "텍스트를 표시하는 데 사용되는 컴포넌트. 매우 많은 속성을 가지고 있어 사용자의 요구를 충족시킬 수 있으며, 핵심 스타일은 style 속성에 의해 제어됩니다.", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "텍스트의 기본 스타일", - "desc": [ - "【입력 매개변수】 : 텍스트 【String】", - "【style】: 텍스트 스타일 【TextStyle】", - "【color】: 텍스트 색상 【Color】", - "【fontSize】: 텍스트 크기 【double】", - "【fontWeight】: 글자 두께 【FontWeight】", - "【fontStyle】: 글자 스타일 【fontStyle】", - "【letterSpacing】: 글자 간격 【double】" - ] - }, - { - "file": "node2.dart", - "name": "텍스트 그림자", - "desc": [ - "【shadows】 : 텍스트 【List】", - "【backgroundColor】: 배경 색상 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "텍스트 장식선", - "desc": [ - "【fontFamily】 : 텍스트 글꼴 【String】", - "【decoration】: 장식선 【TextDecoration】", - "【decorationColor】: 장식선 색상 【Color】", - "【decorationThickness】: 장식선 두께 【double】", - "【decorationStyle】: 장식선 스타일 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "텍스트 정렬 방식", - "desc": [ - "【textAlign】: 정렬 방식 【TextAlign】", - "아래는 순서대로:left、right、center、justify、start、end," - ] - }, - { - "file": "node5_textDirection.dart", - "name": "텍스트 방향과 최대 줄 수", - "desc": [ - "【maxLines】 : 최대 줄 수 【int】", - "【textDirection】 : 텍스트 방향 【TextDirection】", - "아래는 순서대로:rtl、ltr," - ] - }, - { - "file": "node6_softWrap.dart", - "name": "줄바꿈 여부와 넘침 효과", - "desc": [ - "【softWrap】 : 줄바꿈 여부 【bool】", - "【overflow】 : 넘침 효과 【TextOverflow】", - "아래 softWrap=false; overflow는 순서대로:clip、fade、ellipsis、visible," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_pt_PT.json deleted file mode 100644 index 4a9489c81..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_pt_PT.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "Componente de Texto", - "info": "Componente utilizado para exibir texto. Possui uma grande quantidade de atributos, suficientes para atender às suas necessidades de uso. O estilo principal é controlado pelo atributo style.", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Estilo Básico do Texto", - "desc": [ - "【Parâmetro de Entrada】 : Texto 【String】", - "【style】: Estilo do Texto 【TextStyle】", - "【color】: Cor do Texto 【Color】", - "【fontSize】: Tamanho do Texto 【double】", - "【fontWeight】: Peso da Fonte 【FontWeight】", - "【fontStyle】: Estilo da Fonte 【fontStyle】", - "【letterSpacing】: Espaçamento entre Letras 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Sombra do Texto", - "desc": [ - "【shadows】 : Sombra do Texto 【List】", - "【backgroundColor】: Cor de Fundo 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Linha de Decoração do Texto", - "desc": [ - "【fontFamily】 : Fonte do Texto 【String】", - "【decoration】: Linha de Decoração 【TextDecoration】", - "【decorationColor】: Cor da Linha de Decoração 【Color】", - "【decorationThickness】: Espessura da Linha de Decoração 【double】", - "【decorationStyle】: Estilo da Linha de Decoração 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "Alinhamento do Texto", - "desc": [ - "【textAlign】: Alinhamento 【TextAlign】", - "A seguir estão: left, right, center, justify, start, end," - ] - }, - { - "file": "node5_textDirection.dart", - "name": "Direção do Texto e Número Máximo de Linhas", - "desc": [ - "【maxLines】 : Número Máximo de Linhas 【int】", - "【textDirection】 : Direção do Texto 【TextDirection】", - "A seguir estão: rtl, ltr," - ] - }, - { - "file": "node6_softWrap.dart", - "name": "Quebra de Linha e Efeito de Transbordamento", - "desc": [ - "【softWrap】 : Quebra de Linha 【bool】", - "【overflow】 : Efeito de Transbordamento 【TextOverflow】", - "A seguir, softWrap=false; overflow são: clip, fade, ellipsis, visible," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ru_RU.json deleted file mode 100644 index 492442103..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_ru_RU.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "Текстовый компонент", - "info": "Компонент для отображения текста. Имеет множество свойств, достаточных для удовлетворения ваших потребностей. Основные стили управляются свойством style.", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "Основные стили текста", - "desc": [ - "【Входные параметры】 : текст 【String】", - "【style】: стиль текста 【TextStyle】", - "【color】: цвет текста 【Color】", - "【fontSize】: размер текста 【double】", - "【fontWeight】: толщина шрифта 【FontWeight】", - "【fontStyle】: стиль шрифта 【fontStyle】", - "【letterSpacing】: межбуквенный интервал 【double】" - ] - }, - { - "file": "node2.dart", - "name": "Тень текста", - "desc": [ - "【shadows】 : тень текста 【List】", - "【backgroundColor】: цвет фона 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "Декоративные линии текста", - "desc": [ - "【fontFamily】 : шрифт текста 【String】", - "【decoration】: декоративная линия 【TextDecoration】", - "【decorationColor】: цвет декоративной линии 【Color】", - "【decorationThickness】: толщина декоративной линии 【double】", - "【decorationStyle】: стиль декоративной линии 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "Выравнивание текста", - "desc": [ - "【textAlign】: выравнивание 【TextAlign】", - "Ниже приведены: left, right, center, justify, start, end," - ] - }, - { - "file": "node5_textDirection.dart", - "name": "Направление текста и максимальное количество строк", - "desc": [ - "【maxLines】 : максимальное количество строк 【int】", - "【textDirection】 : направление текста 【TextDirection】", - "Ниже приведены: rtl, ltr," - ] - }, - { - "file": "node6_softWrap.dart", - "name": "Перенос строк и эффект переполнения", - "desc": [ - "【softWrap】 : перенос строк 【bool】", - "【overflow】 : эффект переполнения 【TextOverflow】", - "Ниже softWrap=false; overflow: clip, fade, ellipsis, visible," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_zh-CN.json deleted file mode 100644 index cd97d60ab..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/desc_zh-CN.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "id": 2, - "name": "Text", - "localName": "文字组件", - "info": "用于显示文字的组件。拥有的属性非常多,足够满足你的使用需求,核心样式由style属性控制。", - "lever": 5, - "family": 0, - "linkIds": [ - 101, - 324 - ], - "nodes": [ - { - "file": "node1.dart", - "name": "文字的基本样式", - "desc": [ - "【入参】 : 文字 【String】", - "【style】: 文字样式 【TextStyle】", - "【color】: 文字样式 【Color】", - "【fontSize】: 文字大小 【double】", - "【fontWeight】: 字重 【FontWeight】", - "【fontStyle】: 字体样式 【fontStyle】", - "【letterSpacing】: 字距 【double】" - ] - }, - { - "file": "node2.dart", - "name": "文字阴影", - "desc": [ - "【shadows】 : 文字 【List】", - "【backgroundColor】: 背景颜色 【Color】" - ] - }, - { - "file": "node3_decoration.dart", - "name": "文字装饰线", - "desc": [ - "【fontFamily】 : 文字字体 【String】", - "【decoration】: 装饰线 【TextDecoration】", - "【decorationColor】: 装饰线颜色 【Color】", - "【decorationThickness】: 装饰线粗 【double】", - "【decorationStyle】: 装饰线样式 【TextDecorationStyle】" - ] - }, - { - "file": "node4_textAlign.dart", - "name": "文字对齐方式", - "desc": [ - "【textAlign】: 对齐方式 【TextAlign】", - "下面依次是:left、right、center、justify、start、end," - ] - }, - { - "file": "node5_textDirection.dart", - "name": "文字方向与最大行数", - "desc": [ - "【maxLines】 : 最大行数 【int】", - "【textDirection】 : 文字方向 【TextDirection】", - "下面依次是:rtl、ltr," - ] - }, - { - "file": "node6_softWrap.dart", - "name": "是否包裹与越界效果", - "desc": [ - "【softWrap】 : 是否换行 【bool】", - "【overflow】 : 越界效果 【TextOverflow】", - "下面softWrap=false; overflow依次是:clip、fade、ellipsis、visible," - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/node1.dart b/modules/widget_system/widgets/lib/StatelessWidget/Text/node1.dart deleted file mode 100644 index b7a871960..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/node1.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class TextDemo1 extends StatelessWidget { - const TextDemo1({super.key}); - - @override - Widget build(BuildContext context) { - const TextStyle style = TextStyle( - color: Colors.blue, - fontSize: 20, - fontWeight: FontWeight.bold, - fontStyle: FontStyle.italic, - letterSpacing: 10, - ); - return Container( - width: 200, - color: Colors.cyanAccent.withAlpha(33), - height: 76, - child: const Text("toly-张风捷特烈-1994`", style: style), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/node2.dart b/modules/widget_system/widgets/lib/StatelessWidget/Text/node2.dart deleted file mode 100644 index 9f3d949f3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/node2.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class TextDemo2 extends StatelessWidget { - const TextDemo2({super.key}); - - @override - Widget build(BuildContext context) { - const TextStyle style = TextStyle( - fontSize: 50, - color: Colors.white, - backgroundColor: Colors.black, - shadows: [ - Shadow(color: Colors.cyanAccent, offset: Offset(1, 1), blurRadius: 10), - Shadow(color: Colors.blue, offset: Offset(-0.1, 0.1), blurRadius: 10), - ]); - return const Text("张风捷特烈", style: style); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/node3_decoration.dart b/modules/widget_system/widgets/lib/StatelessWidget/Text/node3_decoration.dart deleted file mode 100644 index 7a3716e30..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/node3_decoration.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class DecorationText extends StatelessWidget { - const DecorationText({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return const Text( - "19940328", - style: TextStyle( - fontSize: 50, - fontWeight: FontWeight.bold, - decoration: TextDecoration.underline, - decorationThickness: 3, - decorationStyle: TextDecorationStyle.wavy, - decorationColor: Colors.blue, - fontStyle: FontStyle.italic, - fontFamily: "DancingScript", - letterSpacing: 10), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/node4_textAlign.dart b/modules/widget_system/widgets/lib/StatelessWidget/Text/node4_textAlign.dart deleted file mode 100644 index de98a0340..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/node4_textAlign.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class TextAlignText extends StatelessWidget { - const TextAlignText({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - runSpacing: 10, - children: TextAlign.values - .map((TextAlign textAlign) => Container( - width: 120, - color: Colors.cyanAccent.withAlpha(33), - height: 120 * 0.618, - child: Text( - " 张风捷特烈 toly " * 3, - textAlign: textAlign, - ), - )) - .toList(), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/node5_textDirection.dart b/modules/widget_system/widgets/lib/StatelessWidget/Text/node5_textDirection.dart deleted file mode 100644 index 89d286abc..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/node5_textDirection.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class TextDirectionText extends StatelessWidget { - const TextDirectionText({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 40, - runSpacing: 10, - children: TextDirection.values - .map((TextDirection direction) => Container( - width: 120, - color: Colors.cyanAccent.withAlpha(33), - height: 120 * 0.618, - child: Text( - " 张风捷特烈 toly " * 10, - textDirection: direction, - maxLines: 3, - overflow: TextOverflow.ellipsis, - ), - )) - .toList(), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Text/node6_softWrap.dart b/modules/widget_system/widgets/lib/StatelessWidget/Text/node6_softWrap.dart deleted file mode 100644 index 9c1aba9a8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Text/node6_softWrap.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class SoftWrapText extends StatelessWidget { - const SoftWrapText({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - runSpacing: 10, - children: TextOverflow.values - .map((TextOverflow textOverflow) => Container( - width: 150, - color: Colors.cyanAccent.withAlpha(33), - height: 150 * 0.618 * 0.618, - child: Text( - " 张风捷特烈 toly " * 5, - overflow: textOverflow, - softWrap: false, - ), - )) - .toList(), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_de_DE.json deleted file mode 100644 index 20ae58b13..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_de_DE.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "Thema", - "info": "Sie können das ThemeData-Objekt über Theme.of abrufen. Sie können auch ein Thema angeben, das auf die Nachkommenkomponenten von Theme angewendet wird.", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Textstil-ThemeData#TextTheme", - "desc": [ - "Untergeordnete Komponenten können die Daten des Themas über ThemeData.of abrufen und verwenden." - ] - }, - { - "file": "node2_use.dart", - "name": "Verwendung von Theme", - "desc": [ - "Mit Theme können Sie sehr viele Attribute als Thema angeben, die auf alle Nachkommenkomponenten angewendet werden, wie z. B. Schriftarten, Schieberegler, Karten, Text, Trennlinien, Schaltflächen usw." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_en_US.json deleted file mode 100644 index f3fe2ebdd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_en_US.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "Theme", - "info": "You can obtain the ThemeData object through Theme.of. You can also specify a theme to be applied to the descendant components of Theme.", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Text Style-ThemeData#TextTheme", - "desc": [ - "Child components can use the theme data obtained through ThemeData.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Usage of Theme", - "desc": [ - "Using Theme, you can specify a wide range of properties as themes, which will be applied to all descendant components, such as specifying properties for fonts, sliders, cards, text, dividers, buttons, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_es_ES.json deleted file mode 100644 index 98494e70f..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_es_ES.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "Tema", - "info": "Puedes obtener el objeto ThemeData a través de Theme.of. También puedes especificar un tema para aplicarlo a los componentes descendientes de Theme.", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Estilo de texto-ThemeData#TextTheme", - "desc": [ - "Los componentes secundarios pueden obtener y utilizar los datos del tema a través de ThemeData.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Uso de Theme", - "desc": [ - "Usando Theme, puedes especificar una gran cantidad de atributos como tema, que se aplicarán a todos los componentes descendientes, como la fuente, el control deslizante, la tarjeta, el texto, el divisor, el botón, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_fr_FR.json deleted file mode 100644 index 251f16963..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_fr_FR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "Thème", - "info": "Vous pouvez obtenir l'objet ThemeData via Theme.of. Vous pouvez également spécifier un thème à appliquer aux composants descendants de Theme.", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Style de texte-ThemeData#TextTheme", - "desc": [ - "Les composants enfants peuvent obtenir les données du thème via ThemeData.of pour les utiliser." - ] - }, - { - "file": "node2_use.dart", - "name": "Utilisation de Theme", - "desc": [ - "En utilisant Theme, vous pouvez spécifier de nombreuses propriétés comme thème, ces propriétés seront appliquées à tous les composants descendants, comme la police, le curseur, la carte, le texte, la ligne de séparation, le bouton, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_it_IT.json deleted file mode 100644 index 6d2dc6e5a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_it_IT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "Tema", - "info": "Puoi ottenere l'oggetto ThemeData tramite Theme.of. Puoi anche specificare un tema da applicare ai componenti discendenti di Theme.", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Stile del testo-ThemeData#TextTheme", - "desc": [ - "I componenti figli possono ottenere i dati del tema tramite ThemeData.of e utilizzarli." - ] - }, - { - "file": "node2_use.dart", - "name": "Uso di Theme", - "desc": [ - "Utilizzando Theme, puoi specificare molte proprietà come tema, che verranno applicate a tutti i componenti discendenti, come font, slider, card, testo, linee divisorie, pulsanti, ecc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ja_JP.json deleted file mode 100644 index 07b34e756..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ja_JP.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "テーマ", - "info": "Theme.ofを使用してThemeDataオブジェクトを取得できます。また、テーマをThemeの子孫コンポーネントに適用することもできます。", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "テキストスタイル-ThemeData#TextTheme", - "desc": [ - "子コンポーネントはThemeData.ofを使用してテーマのデータを取得して使用できます。" - ] - }, - { - "file": "node2_use.dart", - "name": "Themeの使い方", - "desc": [ - "Themeを使用すると、フォント、スライダー、カード、テキスト、分割線、ボタンなどの属性をテーマとして指定でき、これらの属性はすべての子孫コンポーネントに適用されます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ko_KR.json deleted file mode 100644 index 376210652..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ko_KR.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "테마", - "info": "Theme.of를 통해 ThemeData 객체를 얻을 수 있습니다. 또한 테마를 지정하여 Theme의 하위 구성 요소에 적용할 수 있습니다.", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "텍스트 스타일-ThemeData#TextTheme", - "desc": [ - "하위 구성 요소는 ThemeData.of를 통해 테마 데이터를 얻어 사용할 수 있습니다." - ] - }, - { - "file": "node2_use.dart", - "name": "Theme 사용법", - "desc": [ - "Theme를 사용하면 매우 많은 속성을 테마로 지정할 수 있으며, 이러한 속성은 모든 하위 구성 요소에 적용됩니다. 예를 들어 글꼴, 슬라이더, 카드, 텍스트, 구분선, 버튼 등의 속성을 지정할 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_pt_PT.json deleted file mode 100644 index 60fcfb4af..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_pt_PT.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "Tema", - "info": "Pode obter o objeto ThemeData através de Theme.of. Também pode especificar um tema para ser aplicado aos componentes descendentes do Theme.", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Estilo de texto-ThemeData#TextTheme", - "desc": [ - "Os componentes filhos podem obter e usar os dados do tema através de ThemeData.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Uso do Theme", - "desc": [ - "Ao usar Theme, pode especificar uma grande variedade de propriedades como tema, que serão aplicadas a todos os componentes descendentes, como fonte, slider, cartão, texto, divisor, botão, etc." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ru_RU.json deleted file mode 100644 index 188d286f2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_ru_RU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "Тема", - "info": "Можно получить объект ThemeData через Theme.of. Также можно указать тему для применения к дочерним компонентам Theme.", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Текстовые стили - ThemeData#TextTheme", - "desc": [ - "Дочерние компоненты могут использовать данные темы, полученные через ThemeData.of." - ] - }, - { - "file": "node2_use.dart", - "name": "Использование Theme", - "desc": [ - "Используя Theme, можно указать множество свойств в качестве темы, которые будут применены ко всем дочерним компонентам, таким как шрифты, ползунки, карточки, текст, разделители, кнопки и т.д." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_zh-CN.json deleted file mode 100644 index 18c0dedb4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/desc_zh-CN.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "id": 168, - "name": "Theme", - "localName": "主题", - "info": "可通过Theme.of获取ThemeData对象。也可以指定主题应用于Theme的后代组件。", - "lever": 4, - "family": 0, - "linkIds": [ - 65, - 169, - 224 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "文字样式-ThemeData#TextTheme", - "desc": [ - "子组件可以通过ThemeData.of获取主题的数据进行使用。" - ] - }, - { - "file": "node2_use.dart", - "name": "Theme的用法", - "desc": [ - "使用Theme,可以指定非常多的属性作为主题,这些属性将应用于所有的后代组件,如指定字体、滑块、卡片、文字、分割线、按钮等属性。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Theme/node1_base.dart deleted file mode 100644 index 69e4d691e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/node1_base.dart +++ /dev/null @@ -1,54 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020-03-29 -/// contact me by email 1981462002@qq.com - -class TextThemeDemo extends StatelessWidget { - const TextThemeDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - TextTheme queryData = Theme.of(context).textTheme; - Map styles = { - "headlineSmall: ": queryData.headlineSmall!, - "headlineMedium: ": queryData.headlineMedium!, - "headlineLarge: ": queryData.headlineLarge!, - "bodySmall: ": queryData.bodySmall!, - "bodyMedium: ": queryData.bodyMedium!, - "bodyLarge: ": queryData.bodyLarge!, - "titleSmall: ": queryData.titleSmall!, - "titleMedium: ": queryData.titleMedium!, - "titleLarge: ": queryData.titleLarge!, - "labelMedium: ": queryData.labelMedium!, - "labelSmall: ": queryData.labelSmall!, - "labelLarge: ": queryData.labelLarge!, - }; - - return Column( - children: styles.keys - .map((String styleInfo) => buildItem(styleInfo, styles[styleInfo]!)) - .toList(), - ); - } - - TextStyle get textStyle => const TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, - ); - - Widget buildItem(String styleInfo, TextStyle style) => Column( - children: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text(styleInfo, style: textStyle), - Text("@toly", style: style) - ], - ), - ), - const Divider(height: 1) - ], - ); -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Theme/node2_use.dart b/modules/widget_system/widgets/lib/StatelessWidget/Theme/node2_use.dart deleted file mode 100644 index d2599ca41..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Theme/node2_use.dart +++ /dev/null @@ -1,43 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class CustomTheme extends StatelessWidget { - const CustomTheme({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Theme( - data: ThemeData( - cardTheme: const CardThemeData( - color: Colors.red, - elevation: 4, - ), - dividerTheme: const DividerThemeData( - color: Colors.blue, - thickness: 2, - ), - sliderTheme: const SliderThemeData( - thumbColor: Colors.red, - activeTrackColor: Colors.green, - inactiveTrackColor: Colors.grey, - )), - child: Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Card( - child: Container( - width: 50, - height: 50, - color: Colors.transparent, - ), - ), - const SizedBox( - width: 150, - child: Slider(value: 0.8, onChanged: null), - ), - const SizedBox(width: 150, child: Divider()) - ])); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_de_DE.json deleted file mode 100644 index 6f58c0b6b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_de_DE.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "Anwendungsname", - "info": "Diese Komponente wird verwendet, um den Namen der App im Betriebssystem zu beschreiben. Die Auswirkungen können in der Anwendungsleiste gesehen werden. Die Quelle des Effekts des title-Felds in MaterialApp ist diese Komponente.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Grundlegende Verwendung von Title", - "desc": [ - "【title】 : Name 【int】", - "【color】: Farbe 【Color】", - "【child】: Untergeordnete Komponente 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_en_US.json deleted file mode 100644 index 4ffca745a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_en_US.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "Application Title", - "info": "This component is used to describe the name of the app in the operating system, and the effect can be seen in the app bar list. The root of the title field effect in MaterialApp is this component.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Basic Usage of Title", - "desc": [ - "【title】: Name 【int】", - "【color】: Color 【Color】", - "【child】: Child Component 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_es_ES.json deleted file mode 100644 index 4804913b7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_es_ES.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "Título de la aplicación", - "info": "Este componente se utiliza para describir el nombre de la aplicación en el sistema operativo, y se puede ver el efecto en la lista de la barra de aplicaciones. El origen del efecto del campo title en MaterialApp es este componente.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso básico de Title", - "desc": [ - "【title】 : Nombre 【int】", - "【color】: Color 【Color】", - "【child】: Componente hijo 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_fr_FR.json deleted file mode 100644 index 1507f62a5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_fr_FR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "Titre de l'application", - "info": "Ce composant est utilisé pour décrire le nom de l'application dans le système d'exploitation, et son effet peut être vu dans la liste de la barre d'applications. La source de l'effet du champ title dans MaterialApp est ce composant.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Utilisation de base de Title", - "desc": [ - "【title】 : Nom 【int】", - "【color】: Couleur 【Color】", - "【child】: Composant enfant 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_it_IT.json deleted file mode 100644 index a7c3efba5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_it_IT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "Titolo dell'applicazione", - "info": "Questo componente è utilizzato per descrivere il nome dell'app nel sistema operativo, e l'effetto può essere visto nella lista della barra delle applicazioni. L'origine dell'effetto del campo title in MaterialApp è questo componente.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso di base di Title", - "desc": [ - "【title】 : Nome 【int】", - "【color】: Colore 【Color】", - "【child】: Componente figlio 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ja_JP.json deleted file mode 100644 index 742a027d2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ja_JP.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "アプリタイトル", - "info": "このコンポーネントは、アプリのオペレーティングシステムでの名前を記述するために使用され、アプリケーションバーのリストで効果を確認できます。MaterialAppのtitleフィールドの効果の根源はこのコンポーネントです。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Title基本使用", - "desc": [ - "【title】 : 名称 【int】", - "【color】: 色 【Color】", - "【child】: 子コンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ko_KR.json deleted file mode 100644 index ce0edf1f7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ko_KR.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "앱 제목", - "info": "이 컴포넌트는 앱이 운영 체제에서의 이름을 설명하는 데 사용되며, 앱 바 목록에서 효과를 볼 수 있습니다. MaterialApp의 title 필드 효과의 근원은 이 컴포넌트입니다.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Title 기본 사용", - "desc": [ - "【title】 : 이름 【int】", - "【color】: 색상 【Color】", - "【child】: 자식 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_pt_PT.json deleted file mode 100644 index de353c50b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_pt_PT.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "Título da Aplicação", - "info": "Este componente é usado para descrever o nome da aplicação no sistema operativo, e o efeito pode ser visto na lista da barra de aplicações. A origem do efeito do campo 'title' no MaterialApp é este componente.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Uso Básico do Title", - "desc": [ - "【title】 : Nome 【int】", - "【color】: Cor 【Color】", - "【child】: Componente Filho 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ru_RU.json deleted file mode 100644 index 56b3fb155..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_ru_RU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "Заголовок приложения", - "info": "Этот компонент используется для описания имени приложения в операционной системе, эффект можно увидеть в списке приложений. Источником эффекта поля title в MaterialApp является этот компонент.", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное использование Title", - "desc": [ - "【title】 : Название 【int】", - "【color】: Цвет 【Color】", - "【child】: Дочерний компонент 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_zh-CN.json deleted file mode 100644 index 0df024dbd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/desc_zh-CN.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "id": 208, - "name": "Title", - "localName": "应用标题", - "info": "该组件用于描述app在操作系统中的名称,可以在应用栏列表里看到效果。MaterialApp中的title字段效果的根源是该组件。", - "lever": 2, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Title基本使用", - "desc": [ - "【title】 : 名称 【int】", - "【color】: 颜色 【Color】", - "【child】: 子组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Title/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Title/node1_base.dart deleted file mode 100644 index 19bb988c1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Title/node1_base.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/7/22 -/// contact me by email 1981462002@qq.com - -class TitleDemo extends StatelessWidget { - const TitleDemo({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Title( - title: '张风捷特烈', - color: const Color(0xFF9C27B0), - child: const Center( - child: Text('应用菜单栏中该页的名称为: 张风捷特烈'), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_de_DE.json deleted file mode 100644 index 0e621b8ec..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_de_DE.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "Schaltflächengruppe umschalten", - "info": "Empfängt eine Liste von Komponenten und kann Eigenschaften wie Randlinie, abgerundete Ecken, Farbe usw. angeben. Basierend auf der spezifischen Logik kann es die Anforderungen für die Einzel- oder Mehrfachauswahl mehrerer Schaltflächen erfüllen.", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "ToggleButtons Einzelauswahl umschalten", - "desc": [ - "【children】: Untergeordnete Komponentensammlung 【List】", - "【borderWidth】: Randlinienbreite 【double】", - "【borderRadius】: Abgerundete Ecken 【BorderRadius】", - "【isSelected】: Auswahlstatus 【List】", - "【onPressed】: Klickereignis 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "ToggleButtons Farbeigenschaften", - "desc": [ - "【borderColor】: Randlinienfarbe 【Color】", - "【selectedBorderColor】: Ausgewählte Randlinienfarbe 【Color】", - "【selectedColor】: Farbe der ausgewählten Komponente 【Color】", - "【fillColor】: Füllfarbe bei Auswahl 【Color】", - "【splashColor】: Wasserwellenfarbe 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "ToggleButtons Mehrfachauswahl umschalten", - "desc": [ - "Kann die Logik der Zustandsänderung steuern, um unterschiedliche Effekte zu erzielen." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_en_US.json deleted file mode 100644 index 75e2c4cd8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_en_US.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "Toggle Buttons Group", - "info": "Receives a list of components, and can specify properties such as border, rounded corners, color, etc. According to specific logic, it can achieve the requirements of single or multiple selection of buttons.", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "ToggleButtons Single Selection", - "desc": [ - "【children】: Children components 【List】", - "【borderWidth】: Border width 【double】", - "【borderRadius】: Rounded corners 【BorderRadius】", - "【isSelected】: Selection status set 【List】", - "【onPressed】: Click event 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "ToggleButtons Color Properties", - "desc": [ - "【borderColor】: Border color 【Color】", - "【selectedBorderColor】: Selected border color 【Color】", - "【selectedColor】: Component color when selected 【Color】", - "【fillColor】: Fill color when selected 【Color】", - "【splashColor】: Ripple color 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "ToggleButtons Multiple Selection", - "desc": [ - "The logic of state transformation can be controlled to create different effects." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_es_ES.json deleted file mode 100644 index 17d5fb3c3..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_es_ES.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "Grupo de botones de conmutación", - "info": "Recibe una lista de componentes y permite especificar propiedades como el borde, el radio de las esquinas, el color, etc. Según la lógica específica, se puede implementar la necesidad de selección única o múltiple de varios botones.", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "Conmutación única de ToggleButtons", - "desc": [ - "【children】: Conjunto de componentes hijos 【List】", - "【borderWidth】: Ancho del borde 【double】", - "【borderRadius】: Radio de las esquinas 【BorderRadius】", - "【isSelected】: Conjunto de selección 【List】", - "【onPressed】: Evento de clic 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "Propiedades de color de ToggleButtons", - "desc": [ - "【borderColor】: Color del borde 【Color】", - "【selectedBorderColor】: Color del borde seleccionado 【Color】", - "【selectedColor】: Color del componente cuando está seleccionado 【Color】", - "【fillColor】: Color de relleno cuando está seleccionado 【Color】", - "【splashColor】: Color de la onda 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "Conmutación múltiple de ToggleButtons", - "desc": [ - "Puede controlar la lógica de transformación de estado para crear diferentes efectos." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_fr_FR.json deleted file mode 100644 index 1c28ef4dd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_fr_FR.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "Groupe de boutons de bascule", - "info": "Reçoit une liste de composants, peut spécifier des propriétés telles que la bordure, le rayon, la couleur, etc. Selon la logique spécifique, il peut répondre à la demande de sélection unique ou multiple de plusieurs boutons.", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "Basculement unique de ToggleButtons", - "desc": [ - "【children】: Ensemble de composants enfants 【List】", - "【borderWidth】: Largeur de la bordure 【double】", - "【borderRadius】: Rayon 【BorderRadius】", - "【isSelected】: Ensemble de sélection 【List】", - "【onPressed】: Événement de clic 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "Propriétés de couleur de ToggleButtons", - "desc": [ - "【borderColor】: Couleur de la bordure 【Color】", - "【selectedBorderColor】: Couleur de la bordure sélectionnée 【Color】", - "【selectedColor】: Couleur du composant sélectionné 【Color】", - "【fillColor】: Couleur de remplissage sélectionnée 【Color】", - "【splashColor】: Couleur de l'effet de vague 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "Basculement multiple de ToggleButtons", - "desc": [ - "Peut contrôler la logique de transformation d'état pour créer différents effets." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_it_IT.json deleted file mode 100644 index 8bed81226..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_it_IT.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "Gruppo di pulsanti di commutazione", - "info": "Riceve un elenco di componenti e può specificare proprietà come bordi, angoli arrotondati, colori, ecc. In base alla logica specifica, è possibile implementare la selezione singola o multipla di più pulsanti.", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "ToggleButtons selezione singola", - "desc": [ - "【children】: Insieme di componenti figli 【List】", - "【borderWidth】: Larghezza del bordo 【double】", - "【borderRadius】: Angoli arrotondati 【BorderRadius】", - "【isSelected】: Insieme di selezione 【List】", - "【onPressed】: Evento di clic 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "Proprietà del colore di ToggleButtons", - "desc": [ - "【borderColor】: Colore del bordo 【Color】", - "【selectedBorderColor】: Colore del bordo selezionato 【Color】", - "【selectedColor】: Colore del componente selezionato 【Color】", - "【fillColor】: Colore di riempimento selezionato 【Color】", - "【splashColor】: Colore dell'effetto ondulazione 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "ToggleButtons selezione multipla", - "desc": [ - "È possibile controllare la logica di trasformazione dello stato per creare effetti diversi." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ja_JP.json deleted file mode 100644 index 084ac4a66..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ja_JP.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "トグルボタングループ", - "info": "コンポーネントリストを受け取り、境界線、角丸、色などの属性を指定できます。特定のロジックに基づいて、複数のボタンの単一選択または複数選択の要件を実現できます。", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "ToggleButtons単一選択トグル", - "desc": [ - "【children】: 子コンポーネントセット 【List】", - "【borderWidth】: 境界線の幅 【double】", - "【borderRadius】: 角丸 【BorderRadius】", - "【isSelected】: 選択状態セット 【List】", - "【onPressed】: クリックイベント 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "ToggleButtonsカラープロパティ", - "desc": [ - "【borderColor】: 境界線の色 【Color】", - "【selectedBorderColor】: 選択時の境界線の色 【Color】", - "【selectedColor】: 選択時のコンポーネントの色 【Color】", - "【fillColor】: 選択時の塗りつぶし色 【Color】", - "【splashColor】: 波紋の色 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "ToggleButtons複数選択トグル", - "desc": [ - "状態変換のロジックを制御して、異なる効果を生み出すことができます。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ko_KR.json deleted file mode 100644 index c424bb2d8..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ko_KR.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "토글 버튼 그룹", - "info": "컴포넌트 리스트를 받아 테두리, 모서리 둥글기, 색상 등 속성을 지정할 수 있습니다. 특정 로직에 따라 여러 버튼의 단일 선택 또는 다중 선택 요구를 구현할 수 있습니다.", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "ToggleButtons 단일 선택 토글", - "desc": [ - "【children】: 자식 컴포넌트 집합 【List】", - "【borderWidth】: 테두리 두께 【double】", - "【borderRadius】: 모서리 둥글기 【BorderRadius】", - "【isSelected】: 선택 여부 집합 【List】", - "【onPressed】: 클릭 이벤트 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "ToggleButtons 색상 속성", - "desc": [ - "【borderColor】: 테두리 색상 【Color】", - "【selectedBorderColor】: 선택된 테두리 색상 【Color】", - "【selectedColor】: 선택된 컴포넌트 색상 【Color】", - "【fillColor】: 선택된 채우기 색상 【Color】", - "【splashColor】: 물결 효과 색상 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "ToggleButtons 다중 선택 토글", - "desc": [ - "상태 변환 로직을 제어하여 다양한 효과를 만들 수 있습니다." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_pt_PT.json deleted file mode 100644 index 507252ee9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_pt_PT.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "Grupo de Botões de Alternância", - "info": "Recebe uma lista de componentes, pode especificar atributos como borda, raio, cor, etc. De acordo com a lógica específica, pode atender à necessidade de seleção única ou múltipla de vários botões.", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "Alternância Única de ToggleButtons", - "desc": [ - "【children】: Conjunto de componentes filhos 【List】", - "【borderWidth】: Largura da borda 【double】", - "【borderRadius】: Raio da borda 【BorderRadius】", - "【isSelected】: Conjunto de seleção 【List】", - "【onPressed】: Evento de clique 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "Atributos de Cor de ToggleButtons", - "desc": [ - "【borderColor】: Cor da borda 【Color】", - "【selectedBorderColor】: Cor da borda selecionada 【Color】", - "【selectedColor】: Cor do componente quando selecionado 【Color】", - "【fillColor】: Cor de preenchimento quando selecionado 【Color】", - "【splashColor】: Cor do efeito de ondulação 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "Alternância Múltipla de ToggleButtons", - "desc": [ - "Pode controlar a lógica de transformação de estado para criar diferentes efeitos." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ru_RU.json deleted file mode 100644 index 3534d10aa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_ru_RU.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "Группа переключателей", - "info": "Принимает список компонентов, можно указать свойства границы, радиуса, цвета и т.д. В зависимости от конкретной логики, можно реализовать требования для одного или нескольких кнопок.", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "Одиночный переключатель ToggleButtons", - "desc": [ - "【children】: Набор дочерних компонентов 【List】", - "【borderWidth】: Ширина границы 【double】", - "【borderRadius】: Радиус угла 【BorderRadius】", - "【isSelected】: Набор выбранных 【List】", - "【onPressed】: Событие нажатия 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "Цветовые свойства ToggleButtons", - "desc": [ - "【borderColor】: Цвет границы 【Color】", - "【selectedBorderColor】: Цвет выбранной границы 【Color】", - "【selectedColor】: Цвет компонента при выборе 【Color】", - "【fillColor】: Цвет заполнения при выборе 【Color】", - "【splashColor】: Цвет водяного знака 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "Множественный переключатель ToggleButtons", - "desc": [ - "Можно управлять логикой преобразования состояния для создания различных эффектов." - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_zh-CN.json deleted file mode 100644 index 570997964..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/desc_zh-CN.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "id": 33, - "name": "ToggleButtons", - "localName": "切换按钮组", - "info": "接收组件列表,可指定边线、圆角、颜色等属性。根据具体逻辑,可以实现多个按钮单选或多选的需求。", - "lever": 4, - "family": 0, - "linkIds": [ - 332, - 262 - ], - "nodes": [ - { - "file": "node1_single.dart", - "name": "ToggleButtons单选切换", - "desc": [ - "【children】: 子组件集 【List】", - "【borderWidth】: 边线宽 【double】", - "【borderRadius】: 圆角 【BorderRadius】", - "【isSelected】: 是否选中集 【List】", - "【onPressed】: 点击事件 【Function(int)】" - ] - }, - { - "file": "node2_color.dart", - "name": "ToggleButtons颜色属性", - "desc": [ - "【borderColor】: 边线色 【Color】", - "【selectedBorderColor】: 选中边线色 【Color】", - "【selectedColor】: 选中时组件色 【Color】", - "【fillColor】: 选中时填充色 【Color】", - "【splashColor】: 水波纹色 【Color】" - ] - }, - { - "file": "node3_multi.dart", - "name": "ToggleButtons多选切换", - "desc": [ - "可以控制状态转化的逻辑来形成不同的效果。" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node1_single.dart b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node1_single.dart deleted file mode 100644 index 7ec287cc1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node1_single.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class CustomToggleButtons extends StatefulWidget { - const CustomToggleButtons({Key? key}) : super(key: key); - - @override - _CustomToggleButtonsState createState() => _CustomToggleButtonsState(); -} - -class _CustomToggleButtonsState extends State { - List _isSelected = [true, false, false]; - - @override - Widget build(BuildContext context) { - return ToggleButtons( - children: const [ - Icon(Icons.skip_previous), - Icon(Icons.pause), - Icon(Icons.skip_next), - ], - borderWidth: 1, - borderRadius: BorderRadius.circular(10), - isSelected: _isSelected, - onPressed: (value) => setState(() { - _isSelected = _isSelected.map((e) => false).toList(); - _isSelected[value] = true; - }), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node2_color.dart b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node2_color.dart deleted file mode 100644 index db779159b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node2_color.dart +++ /dev/null @@ -1,40 +0,0 @@ - - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class ColorToggleButtons extends StatefulWidget { - const ColorToggleButtons({Key? key}) : super(key: key); - - @override - _ColorToggleButtonsState createState() => _ColorToggleButtonsState(); -} - -class _ColorToggleButtonsState extends State { - List _isSelected = [true, false, false]; - - @override - Widget build(BuildContext context) { - return ToggleButtons( - children: const [ - Icon(Icons.skip_previous), - Icon(Icons.pause), - Icon(Icons.skip_next), - ], - borderWidth: 1, - borderColor: Colors.orangeAccent, - selectedBorderColor: Colors.blue, - splashColor: Colors.purple.withAlpha(66), - borderRadius: BorderRadius.circular(10), - selectedColor: Colors.red, - fillColor: Colors.green.withAlpha(11), - isSelected: _isSelected, - onPressed: (value) => setState(() { - _isSelected = _isSelected.map((e) => false).toList(); - _isSelected[value] = true; - }), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node3_multi.dart b/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node3_multi.dart deleted file mode 100644 index edb205b5a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/ToggleButtons/node3_multi.dart +++ /dev/null @@ -1,38 +0,0 @@ - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class ProToggleButtons extends StatefulWidget { - const ProToggleButtons({Key? key}) : super(key: key); - - @override - _ProToggleButtonsState createState() => _ProToggleButtonsState(); -} - -class _ProToggleButtonsState extends State { - final List _isSelected = [false, false, false]; - - @override - Widget build(BuildContext context) { - return ToggleButtons( - children: const [ - Icon(Icons.skip_previous), - Icon(Icons.pause), - Icon(Icons.skip_next), - ], - borderWidth: 1, - borderColor: Colors.blue, - selectedBorderColor: Colors.orangeAccent, - splashColor: Colors.purple.withAlpha(66), - borderRadius: BorderRadius.circular(10), - selectedColor: Colors.red, - fillColor: Colors.green.withAlpha(11), - isSelected: _isSelected, - onPressed: (value) => setState(() { - _isSelected[value] = !_isSelected[value]; - }), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_de_DE.json deleted file mode 100644 index 42b7931b1..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "Anzeigekopf", - "info": "Eine allgemeine Anzeigestruktur, die von Flutter bereitgestellt wird. Komponenten können an entsprechenden Positionen eingefügt werden, um spezifische Einträge einfach zu handhaben. Wird häufig in Drawern verwendet.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Die grundlegende Darstellung dieser Komponente ist wie folgt", - "desc": [ - "【currentAccountPicture】: Obere Komponente 【Widget】", - "【accountName】: Mittlere Komponente 【Widget】", - "【accountEmail】: Untere Komponente 【Widget】", - "【decoration】: Dekoration 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "Obere rechte Ecke und Unterseite", - "desc": [ - "【otherAccountsPictures】: Obere rechte Komponente 【List】", - "【onDetailsPressed】: Klickereignis in der unteren rechten Ecke 【Function()】", - "【arrowColor】: Farbe der Schaltfläche in der unteren rechten Ecke 【Color】", - "【margin】: Außenabstand 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_en_US.json deleted file mode 100644 index 93b0d2be0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "Display Header", - "info": "A common display structure provided by Flutter, where components can be inserted in corresponding positions, making it easy to handle specific items, commonly used in Drawers.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "The basic performance of this component is as follows", - "desc": [ - "【currentAccountPicture】: Top component 【Widget】", - "【accountName】: Middle component 【Widget】", - "【accountEmail】: Bottom component 【Widget】", - "【decoration】: Decoration 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "Top right corner and bottom", - "desc": [ - "【otherAccountsPictures】: Top right component 【List】", - "【onDetailsPressed】: Bottom right click event 【Function()】", - "【arrowColor】: Bottom right button color 【Color】", - "【margin】: Margin 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_es_ES.json deleted file mode 100644 index 5a180edc2..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "Encabezado de exhibición", - "info": "Una estructura de exhibición genérica proporcionada por Flutter, donde se pueden insertar componentes en las posiciones correspondientes, lo que permite manejar fácilmente elementos específicos, comúnmente utilizado en Drawer.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La presentación básica de este componente es la siguiente", - "desc": [ - "【currentAccountPicture】: componente superior 【Widget】", - "【accountName】: componente central 【Widget】", - "【accountEmail】: componente inferior 【Widget】", - "【decoration】: decoración 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "Esquina superior derecha y parte inferior", - "desc": [ - "【otherAccountsPictures】: componente superior derecho 【List】", - "【onDetailsPressed】: evento de clic en la esquina inferior derecha 【Function()】", - "【arrowColor】: color del botón en la esquina inferior derecha 【Color】", - "【margin】: margen exterior 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_fr_FR.json deleted file mode 100644 index 3382b7357..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "En-tête d'affichage", - "info": "Une structure d'affichage générique fournie par Flutter, où des composants peuvent être insérés à des positions spécifiques, permettant de répondre facilement à des éléments spécifiques, souvent utilisé dans les Drawer.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La présentation de base de ce composant est la suivante", - "desc": [ - "【currentAccountPicture】: Composant supérieur 【Widget】", - "【accountName】: Composant central 【Widget】", - "【accountEmail】: Composant inférieur 【Widget】", - "【decoration】: Décoration 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "Coin supérieur droit et bas", - "desc": [ - "【otherAccountsPictures】: Composant supérieur droit 【List】", - "【onDetailsPressed】: Événement de clic en bas à droite 【Function()】", - "【arrowColor】: Couleur du bouton en bas à droite 【Color】", - "【margin】: Marge extérieure 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_it_IT.json deleted file mode 100644 index 4f0b3b4c9..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "Intestazione del cassetto degli account utente", - "info": "Una struttura di visualizzazione generica fornita da Flutter, in cui è possibile inserire componenti nelle posizioni corrispondenti, utile per gestire voci specifiche, comunemente utilizzata nei cassetti.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "La rappresentazione di base di questo componente è la seguente", - "desc": [ - "【currentAccountPicture】: componente superiore 【Widget】", - "【accountName】: componente centrale 【Widget】", - "【accountEmail】: componente inferiore 【Widget】", - "【decoration】: decorazione 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "Angolo superiore destro e parte inferiore", - "desc": [ - "【otherAccountsPictures】: componente superiore destro 【List】", - "【onDetailsPressed】: evento di clic nell'angolo inferiore destro 【Function()】", - "【arrowColor】: colore del pulsante nell'angolo inferiore destro 【Color】", - "【margin】: margine esterno 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ja_JP.json deleted file mode 100644 index fc71dfa33..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "ヘッダーを表示", - "info": "Flutterが提供する汎用的な表示構造で、対応する位置にコンポーネントを挿入でき、特定の項目に簡単に対応できます。Drawerでよく使用されます。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "このコンポーネントの基本的な表現は以下の通りです", - "desc": [ - "【currentAccountPicture】: 上部コンポーネント 【Widget】", - "【accountName】: 中部コンポーネント 【Widget】", - "【accountEmail】: 下部コンポーネント 【Widget】", - "【decoration】: 装飾 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "右上と下部", - "desc": [ - "【otherAccountsPictures】: 右上コンポーネント 【List】", - "【onDetailsPressed】: 右下クリックイベント 【Function()】", - "【arrowColor】: 右下ボタンの色 【Color】", - "【margin】: マージン 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ko_KR.json deleted file mode 100644 index 50fa97540..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "디스플레이 헤더", - "info": "Flutter에서 제공하는 일반적인 디스플레이 구조로, 해당 위치에 컴포넌트를 삽입할 수 있으며 특정 항목에 쉽게 대응할 수 있습니다. 주로 Drawer에서 사용됩니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "이 컴포넌트의 기본적인 표현은 다음과 같습니다", - "desc": [ - "【currentAccountPicture】: 상단 컴포넌트 【Widget】", - "【accountName】: 중간 컴포넌트 【Widget】", - "【accountEmail】: 하단 컴포넌트 【Widget】", - "【decoration】: 장식 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "오른쪽 상단과 하단", - "desc": [ - "【otherAccountsPictures】: 오른쪽 상단 컴포넌트 【List】", - "【onDetailsPressed】: 오른쪽 하단 클릭 이벤트 【Function()】", - "【arrowColor】: 오른쪽 하단 버튼 색상 【Color】", - "【margin】: 외부 여백 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_pt_PT.json deleted file mode 100644 index 261f41add..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "Cabeçalho de Exibição", - "info": "Uma estrutura de exibição genérica fornecida pelo Flutter, onde componentes podem ser inseridos nas posições correspondentes, facilitando a adaptação a itens específicos, comumente usado em Drawers.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "A representação básica deste componente é a seguinte", - "desc": [ - "【currentAccountPicture】: Componente superior 【Widget】", - "【accountName】: Componente do meio 【Widget】", - "【accountEmail】: Componente inferior 【Widget】", - "【decoration】: Decoração 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "Canto superior direito e inferior", - "desc": [ - "【otherAccountsPictures】: Componente superior direito 【List】", - "【onDetailsPressed】: Evento de clique no canto inferior direito 【Function()】", - "【arrowColor】: Cor do botão no canto inferior direito 【Color】", - "【margin】: Margem externa 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ru_RU.json deleted file mode 100644 index f4512b44b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "Заголовок отображения", - "info": "Универсальная структура отображения, предоставляемая Flutter, в которую можно вставлять компоненты в соответствующие места, что позволяет легко адаптироваться к конкретным элементам, часто используется в Drawer.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Основное представление компонента", - "desc": [ - "【currentAccountPicture】: Верхний компонент 【Widget】", - "【accountName】: Средний компонент 【Widget】", - "【accountEmail】: Нижний компонент 【Widget】", - "【decoration】: Декорация 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "Верхний правый угол и нижняя часть", - "desc": [ - "【otherAccountsPictures】: Верхний правый компонент 【List】", - "【onDetailsPressed】: Событие нажатия в нижнем правом углу 【Function()】", - "【arrowColor】: Цвет кнопки в нижнем правом углу 【Color】", - "【margin】: Внешний отступ 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_zh-CN.json deleted file mode 100644 index efda05170..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 22, - "name": "UserAccountsDrawerHeader", - "localName": "展示头", - "info": "Flutter提供的一个通用展示结构,相应位置可插入组件,可以很方便地应对特定的条目,常用于Drawer中。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "该组件的基本表现如下", - "desc": [ - "【currentAccountPicture】: 上组件 【Widget】", - "【accountName】: 中组件 【Widget】", - "【accountEmail】: 下组件 【Widget】", - "【decoration】: 装饰 【Decoration】" - ] - }, - { - "file": "node2_pro.dart", - "name": "右上角和底部", - "desc": [ - "【otherAccountsPictures】: 右上组件 【List】", - "【onDetailsPressed】: 右下角点击事件 【Function()】", - "【arrowColor】: 右下角按钮颜色 【Color】", - "【margin】: 外边距 【EdgeInsetsGeometry】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/node1_base.dart deleted file mode 100644 index dc2eda1bd..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/node1_base.dart +++ /dev/null @@ -1,51 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - - -class CustomUAGHP extends StatelessWidget { - const CustomUAGHP({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width / 3 * 2, - child: UserAccountsDrawerHeader( - accountName: Container( - padding: const EdgeInsets.all(8.0), - child: const Text( - "张风捷特烈", - style: - TextStyle(color: Colors.orangeAccent, fontSize: 22, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ), - ]), - ), - ), - accountEmail: const Padding( - padding: EdgeInsets.all(8.0), - child: Text("1981462002@qq.com", - style: TextStyle(color: Colors.white, fontSize: 14, shadows: [ - Shadow( - color: Colors.orangeAccent, - offset: Offset(.5, .5), - blurRadius: 2), - ])), - ), - currentAccountPicture: Container( - padding: const EdgeInsets.all(15.0), - child: const CircleAvatar( - backgroundImage: AssetImage("assets/images/icon_head.webp"), - ), - ), - decoration: const BoxDecoration( - image: DecorationImage(image: AssetImage("assets/images/caver.webp")), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/node2_pro.dart b/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/node2_pro.dart deleted file mode 100644 index 3c8e7d544..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/UserAccountsDrawerHeader/node2_pro.dart +++ /dev/null @@ -1,59 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class ProUAGHP extends StatelessWidget { - const ProUAGHP({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: MediaQuery.of(context).size.width / 3 * 2, - child: UserAccountsDrawerHeader( - margin: const EdgeInsets.all(10), - accountName: Container( - padding: const EdgeInsets.all(8.0), - child: const Text( - "张风捷特烈", - style: - TextStyle(color: Colors.orangeAccent, fontSize: 22, shadows: [ - Shadow( - color: Colors.black, - offset: Offset(.5, .5), - blurRadius: 2, - ), - ]), - ), - ), - accountEmail: const Padding( - padding: EdgeInsets.all(8.0), - child: Text("1981462002@qq.com", - style: TextStyle(color: Colors.white, fontSize: 14, shadows: [ - Shadow( - color: Colors.orangeAccent, - offset: Offset(.5, .5), - blurRadius: 2, - ), - ])), - ), - currentAccountPicture: Container( - padding: const EdgeInsets.all(15.0), - child: const CircleAvatar( - backgroundImage: AssetImage("assets/images/icon_head.webp"), - ), - ), - otherAccountsPictures: const [ - FlutterLogo(textColor: Colors.green), - ], - onDetailsPressed: () { - - }, - arrowColor: Colors.white, - decoration: const BoxDecoration( - image: DecorationImage(image: AssetImage("assets/images/caver.webp")), - ), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_de_DE.json deleted file mode 100644 index 746f6a94b..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_de_DE.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "Vertikale Trennlinie", - "info": "Vertikale Trennlinie, kann Farbe, Breite, Dicke und Abstände oben und unten angeben, wird häufig als Trennlinie für Listenelemente verwendet.", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "VerticalDivider Farbe und Dicke", - "desc": [ - "【color】: Farbe 【Color】", - "【thickness】: Linienstärke 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "VerticalDivider Breite und Abstand", - "desc": [ - "【indent】: Abstand vorne 【double】", - "【endIndent】: Abstand hinten 【double】", - "【width】: Platzhalterbreite 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_en_US.json deleted file mode 100644 index 77b486897..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_en_US.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "Vertical Divider", - "info": "Vertical divider, which can specify color, width, thickness, top and bottom margin information, commonly used as the divider between list items.", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "VerticalDivider Color and Thickness", - "desc": [ - "【color】: Color 【Color】", - "【thickness】: Line thickness 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "VerticalDivider Width and Indent", - "desc": [ - "【indent】: Front indent length 【double】", - "【endIndent】: Back indent length 【double】", - "【width】: Placeholder width 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_es_ES.json deleted file mode 100644 index d8fe84857..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_es_ES.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "Divisor vertical", - "info": "Divisor vertical, se puede especificar el color, el ancho, el grosor, el margen superior e inferior, comúnmente utilizado como divisor de elementos en una lista.", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Color y grosor del VerticalDivider", - "desc": [ - "【color】: color 【Color】", - "【thickness】: grosor de la línea 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Ancho y espacio del VerticalDivider", - "desc": [ - "【indent】: longitud del espacio frontal 【double】", - "【endIndent】: longitud del espacio posterior 【double】", - "【width】: ancho de ocupación 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_fr_FR.json deleted file mode 100644 index 9ce751ace..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_fr_FR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "Ligne de séparation verticale", - "info": "Ligne de séparation verticale, peut spécifier la couleur, la largeur, l'épaisseur, les marges supérieure et inférieure, couramment utilisée pour les lignes de séparation des éléments de liste.", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Couleur et épaisseur de VerticalDivider", - "desc": [ - "【color】: Couleur 【Color】", - "【thickness】: Épaisseur de la ligne 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Largeur et espacement de VerticalDivider", - "desc": [ - "【indent】: Longueur de l'espacement avant 【double】", - "【endIndent】: Longueur de l'espacement arrière 【double】", - "【width】: Largeur occupée 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_it_IT.json deleted file mode 100644 index af0d6378a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_it_IT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "Divisore Verticale", - "info": "Divisore verticale, può specificare colore, larghezza, spessore, margini superiore e inferiore, comunemente usato come divisore per gli elementi di una lista.", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Colore e Spessore del VerticalDivider", - "desc": [ - "【color】: Colore 【Color】", - "【thickness】: Spessore della linea 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Larghezza e Spaziature del VerticalDivider", - "desc": [ - "【indent】: Lunghezza dello spazio anteriore 【double】", - "【endIndent】: Lunghezza dello spazio posteriore 【double】", - "【width】: Larghezza occupata 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ja_JP.json deleted file mode 100644 index e1d4653e5..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ja_JP.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "垂直分割線", - "info": "垂直分割線、色、幅、太さ、上下の余白情報を指定でき、リストのアイテム分割線としてよく使われます。", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "VerticalDividerの色と太さ", - "desc": [ - "【color】: 色 【Color】", - "【thickness】: 線の太さ 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "VerticalDividerの幅と空白", - "desc": [ - "【indent】: 前の空白の長さ 【double】", - "【endIndent】: 後の空白の長さ 【double】", - "【width】: 占める幅 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ko_KR.json deleted file mode 100644 index ad155b5a7..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ko_KR.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "수직 구분선", - "info": "수직 구분선, 색상, 너비, 두께, 상하 여백 정보를 지정할 수 있으며, 주로 리스트의 항목 구분선으로 사용됩니다.", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "VerticalDivider 색상 및 두께", - "desc": [ - "【color】: 색상 【Color】", - "【thickness】: 선 두께 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "VerticalDivider 너비 및 여백", - "desc": [ - "【indent】: 앞쪽 여백 길이 【double】", - "【endIndent】: 뒤쪽 여백 길이 【double】", - "【width】: 차지하는 너비 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_pt_PT.json deleted file mode 100644 index dafc51e13..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_pt_PT.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "Divisor Vertical", - "info": "Divisor vertical, pode especificar cor, largura, espessura, margens superior e inferior, comumente usado como divisor de itens de lista.", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Cor e Espessura do VerticalDivider", - "desc": [ - "【color】: cor 【Color】", - "【thickness】: espessura da linha 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Largura e Espaço do VerticalDivider", - "desc": [ - "【indent】: comprimento do espaço frontal 【double】", - "【endIndent】: comprimento do espaço traseiro 【double】", - "【width】: largura ocupada 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ru_RU.json deleted file mode 100644 index 39c05222d..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_ru_RU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "Вертикальный разделитель", - "info": "Вертикальный разделитель, можно указать цвет, ширину, толщину, отступы сверху и снизу, часто используется для разделения элементов списка.", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Цвет и толщина VerticalDivider", - "desc": [ - "【color】: цвет 【Color】", - "【thickness】: толщина линии 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "Ширина и отступы VerticalDivider", - "desc": [ - "【indent】: длина отступа спереди 【double】", - "【endIndent】: длина отступа сзади 【double】", - "【width】: ширина занимаемого места 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_zh-CN.json deleted file mode 100644 index 7fad0ce50..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/desc_zh-CN.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "id": 35, - "name": "VerticalDivider", - "localName": "竖直分割线", - "info": "竖直分割线,可指定颜色、宽度、粗细、上下边距信息,常用与列表的item分割线。", - "lever": 2, - "family": 0, - "linkIds": [ - 34, - 329 - ], - "nodes": [ - { - "file": "node1_base.dart", - "name": "VerticalDivider颜色和粗细", - "desc": [ - "【color】: 颜色 【Color】", - "【thickness】: 线粗细 【double】" - ] - }, - { - "file": "node2_height.dart", - "name": "VerticalDivider宽度和空缺", - "desc": [ - "【indent】: 前面空缺长度 【double】", - "【endIndent】: 后面空缺长度 【double】", - "【width】: 占位宽 【double】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/node1_base.dart deleted file mode 100644 index 36473ef20..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/node1_base.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class CustomVerticalDivider extends StatelessWidget { - const CustomVerticalDivider({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - List dataColor = [ - Colors.red, Colors.yellow, - Colors.blue, Colors.green]; - List dataThickness = [1.0, 2.0, 4.0, 6.0]; - Map data = Map.fromIterables(dataColor, dataThickness); - return SizedBox( - height: 150, - child: Row( - mainAxisSize: MainAxisSize.min, - children: dataColor - .map((e) => VerticalDivider( - color: e, - thickness: data[e], - )).toList(), - ), - ); - } -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/node2_height.dart b/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/node2_height.dart deleted file mode 100644 index 86610bcca..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/VerticalDivider/node2_height.dart +++ /dev/null @@ -1,34 +0,0 @@ - - -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class WidthVerticalDivider extends StatelessWidget { - const WidthVerticalDivider({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - List dataColor = [ - Colors.red, Colors.yellow, - Colors.blue, Colors.green]; - List dataThickness = [10.0, 20.0, 30.0, 40.0]; - Map data = Map.fromIterables(dataColor, dataThickness); - return SizedBox( - height: 150, - child: Row( - mainAxisSize: MainAxisSize.min, - children: dataColor - .map((e) => VerticalDivider( - color: e, - indent:data[e], - endIndent: data[e]!*2, - width: data[e], - thickness: data[e]!/10, - )) - .toList(), - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_de_DE.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_de_DE.json deleted file mode 100644 index d4836b21c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_de_DE.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "Sichtbarkeitskomponente", - "info": "Steuert die Anzeige oder Ausblendung einer Komponente und ermöglicht die Festlegung eines Platzhalterkomponente nach dem Ausblenden. Eine ähnliche Funktion bietet die OffStage-Komponente.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Steuert die Sichtbarkeit der internen Unterkomponenten basierend auf visible", - "desc": [ - "【visible】 : Gibt an, ob angezeigt wird 【bool】", - "【child】: Kind 【Widget】", - "Standardmäßig geht der ursprüngliche Bereich verloren, wenn das Kind ausgeblendet wird." - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement kann beim Ausblenden als Platzhalter verwendet werden", - "desc": [ - "【replacement】 : Platzhalterkomponente beim Ausblenden 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_en_US.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_en_US.json deleted file mode 100644 index 857330ac6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_en_US.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "Visibility Component", - "info": "Controls the display or hiding of a component, and can set a placeholder component when hidden. A similar function is provided by the OffStage component.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Control the visibility of internal child components based on visible", - "desc": [ - "【visible】: Whether to display 【bool】", - "【child】: Child 【Widget】", - "By default, the child will lose its original area when hidden." - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement can be used as a placeholder when hidden", - "desc": [ - "【replacement】: Placeholder component when hidden 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_es_ES.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_es_ES.json deleted file mode 100644 index ace7d1b88..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_es_ES.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "Componente de Visibilidad", - "info": "Controla si un componente se muestra o se oculta, y permite configurar un componente de marcador de posición cuando está oculto. Un componente similar en funcionalidad es el componente OffStage.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Controla la visibilidad de los componentes hijos internos según visible", - "desc": [ - "【visible】 : Si se muestra o no 【bool】", - "【child】: Hijo 【Widget】", - "Por defecto, cuando el hijo está oculto, pierde el área original donde estaba." - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement puede ocupar el lugar cuando está oculto", - "desc": [ - "【replacement】 : Componente de marcador de posición cuando está oculto 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_fr_FR.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_fr_FR.json deleted file mode 100644 index c6f8bc0c4..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_fr_FR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "Composant de visibilité", - "info": "Contrôle l'affichage ou la dissimulation d'un composant, peut définir un composant de remplacement lorsqu'il est caché. Le composant OffStage a une fonction similaire.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Contrôle l'affichage ou la dissimulation des composants enfants en fonction de visible", - "desc": [ - "【visible】 : Afficher ou non 【bool】", - "【child】: Enfant 【Widget】", - "Par défaut, l'enfant perd sa zone d'origine lorsqu'il est caché." - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement peut être utilisé comme espace réservé lors de la dissimulation", - "desc": [ - "【replacement】 : Composant de remplacement lors de la dissimulation 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_it_IT.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_it_IT.json deleted file mode 100644 index 5e05510aa..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_it_IT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "Componente di Visibilità", - "info": "Controlla la visualizzazione o l'occultamento di un componente, con la possibilità di impostare un componente segnaposto quando è nascosto. Una funzionalità simile è offerta dal componente OffStage.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Controlla la visibilità dei componenti figli interni in base a visible", - "desc": [ - "【visible】: Se visualizzare o meno 【bool】", - "【child】: Figlio 【Widget】", - "Per impostazione predefinita, quando il figlio è nascosto, perde l'area originale in cui si trovava." - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement può essere utilizzato come segnaposto quando è nascosto", - "desc": [ - "【replacement】: Componente segnaposto quando è nascosto 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ja_JP.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ja_JP.json deleted file mode 100644 index 9a43e083c..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ja_JP.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "表示/非表示コンポーネント", - "info": "コンポーネントの表示または非表示を制御し、非表示時のプレースホルダーコンポーネントを設定できます。類似の機能を持つコンポーネントとしてOffStageコンポーネントがあります。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "visibleに基づいて内部の子コンポーネントの表示/非表示を制御", - "desc": [ - "【visible】 : 表示するかどうか 【bool】", - "【child】: 子コンポーネント 【Widget】", - "デフォルトでは、子コンポーネントが非表示になると元の領域を失います。" - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacementを使用して非表示時のプレースホルダーを設定", - "desc": [ - "【replacement】 : 非表示時のプレースホルダーコンポーネント 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ko_KR.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ko_KR.json deleted file mode 100644 index 4cac94c9a..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ko_KR.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "표시/숨김 컴포넌트", - "info": "컴포넌트의 표시 또는 숨김을 제어하며, 숨김 후의 자리 표시 컴포넌트를 설정할 수 있습니다. 이와 유사한 기능을 가진 OffStage 컴포넌트가 있습니다.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "visible에 따라 내부 자식 컴포넌트의 표시/숨김 상태를 제어", - "desc": [ - "【visible】 : 표시 여부 【bool】", - "【child】: 자식 【Widget】", - "기본적으로 자식이 숨겨지면 원래 영역을 잃습니다." - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement는 숨김 시 자리 표시를 할 수 있습니다", - "desc": [ - "【replacement】 : 숨김 시의 자리 표시 컴포넌트 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_pt_PT.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_pt_PT.json deleted file mode 100644 index 18e4cbaf0..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_pt_PT.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "Componente de Visibilidade", - "info": "Controla a exibição ou ocultação de um componente, podendo definir um componente de espaço reservado após a ocultação. Um componente com funcionalidade semelhante é o OffStage.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Controla a visibilidade dos componentes internos com base no visível", - "desc": [ - "【visible】 : Se deve ser exibido 【bool】", - "【child】: Filho 【Widget】", - "Por padrão, o filho perde a área original quando oculto." - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement pode ser usado como espaço reservado ao ocultar", - "desc": [ - "【replacement】 : Componente de espaço reservado ao ocultar 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ru_RU.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ru_RU.json deleted file mode 100644 index 52e8b516e..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_ru_RU.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "Компонент видимости", - "info": "Управляет отображением или скрытием компонента, можно установить компонент-заполнитель при скрытии. Похожую функциональность имеет компонент OffStage.", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "Управление видимостью внутренних дочерних компонентов с помощью visible", - "desc": [ - "【visible】 : Отображать ли 【bool】", - "【child】: Дочерний элемент 【Widget】", - "По умолчанию при скрытии дочернего элемента он теряет свою исходную область." - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement может использоваться для заполнения при скрытии", - "desc": [ - "【replacement】 : Компонент-заполнитель при скрытии 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_zh-CN.json b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_zh-CN.json deleted file mode 100644 index 48f0b2d69..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/desc_zh-CN.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "id": 10, - "name": "Visibility", - "localName": "显隐组件", - "info": "控制一个组件显示或隐藏,可设置隐藏后的占位组件。与其功能相似的由OffStage组件。", - "lever": 3, - "family": 0, - "linkIds": [], - "nodes": [ - { - "file": "node1_base.dart", - "name": "根据visible控制内部子组件的显隐情况", - "desc": [ - "【visible】 : 是否显示 【bool】", - "【child】: 孩子 【Widget】", - "默认孩子隐藏时会失去原来所在区域。" - ] - }, - { - "file": "node2_replacement.dart", - "name": "replacement可在隐藏时进行占位", - "desc": [ - "【replacement】 : 隐藏时的占位组件 【Widget】" - ] - } - ] -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/node1_base.dart b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/node1_base.dart deleted file mode 100644 index e6c1de433..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/node1_base.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:flutter/material.dart'; -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class CustomVisibility extends StatelessWidget { - const CustomVisibility({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: [ - _buildVisibility(true), - _buildVisibility(false), - ], - ); - } - - Widget _buildVisibility(bool visible) { - Widget box = Container( - height: 30, - width: 30, - color: Colors.blue, - ); - return Container( - width: 150, - height: 150 * 0.618, - color: Colors.cyanAccent.withAlpha(33), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - box, - Visibility( - visible: visible, - child: Container( - alignment: Alignment.center, - height: 80 * 0.618, - width: 80, - color: Colors.red, - child: const Text( - "visible\ntrue", - style: TextStyle(fontSize: 20), - ), - )), - box, - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/node2_replacement.dart b/modules/widget_system/widgets/lib/StatelessWidget/Visibility/node2_replacement.dart deleted file mode 100644 index 9c96f49d6..000000000 --- a/modules/widget_system/widgets/lib/StatelessWidget/Visibility/node2_replacement.dart +++ /dev/null @@ -1,56 +0,0 @@ -import 'package:flutter/material.dart'; - -/// create by 张风捷特烈 on 2020/4/27 -/// contact me by email 1981462002@qq.com - -class ReplacementVisibility extends StatelessWidget { - const ReplacementVisibility({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Wrap( - spacing: 10, - children: [ - _buildVisibility(true), - _buildVisibility(false), - ], - ); - } - - Widget _buildVisibility(bool visible) { - Widget box = Container( - height: 30, - width: 30, - color: Colors.blue, - ); - return Container( - width: 150, - height: 150 * 0.618, - color: Colors.cyanAccent.withAlpha(33), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - box, - Visibility( - visible: visible, - replacement: Container( - alignment: Alignment.center, - height: 80 * 0.618, - width: 80, - ), - child: Container( - alignment: Alignment.center, - height: 80 * 0.618, - width: 80, - color: Colors.red, - child: const Text( - "visible\ntrue", - style: TextStyle(fontSize: 20), - ), - )), - box, - ], - ), - ); - } -} diff --git a/modules/widget_system/widgets/lib/exp/MultiChildRenderObjectWidget.dart b/modules/widget_system/widgets/lib/exp/MultiChildRenderObjectWidget.dart deleted file mode 100644 index 692ab3958..000000000 --- a/modules/widget_system/widgets/lib/exp/MultiChildRenderObjectWidget.dart +++ /dev/null @@ -1,28 +0,0 @@ -library render_object_widget; - - -export '../MultiChildRenderObjectWidget/Flex/node_01.dart'; -export '../MultiChildRenderObjectWidget/Flex/node_02.dart'; -export '../MultiChildRenderObjectWidget/Flex/node_03.dart'; -export '../MultiChildRenderObjectWidget/Flex/node_04.dart'; -export '../MultiChildRenderObjectWidget/Flex/node_05.dart'; - -export '../MultiChildRenderObjectWidget/Flow/node_01.dart'; -export '../MultiChildRenderObjectWidget/Flow/node_02.dart'; -export '../MultiChildRenderObjectWidget/RichText/node1_base.dart'; -export '../MultiChildRenderObjectWidget/RichText/node2_widget.dart'; -export '../MultiChildRenderObjectWidget/Stack/node1_base.dart'; -export '../MultiChildRenderObjectWidget/Stack/node2_positioned.dart'; -export '../MultiChildRenderObjectWidget/Wrap/node1_base.dart'; -export '../MultiChildRenderObjectWidget/Wrap/node2_alignment.dart'; -export '../MultiChildRenderObjectWidget/Wrap/node3_crossAxisAlignment.dart'; -export '../MultiChildRenderObjectWidget/Wrap/node4_textDirection.dart'; -export '../MultiChildRenderObjectWidget/Wrap/node5_verticalDirection.dart'; -export '../MultiChildRenderObjectWidget/Column/node_01.dart'; -export '../MultiChildRenderObjectWidget/IndexedStack/node1_base.dart'; -export '../MultiChildRenderObjectWidget/Row/node1_base.dart'; -export '../MultiChildRenderObjectWidget/CustomMultiChildLayout/node_01.dart'; -export '../MultiChildRenderObjectWidget/Viewport/node1_base.dart'; -export '../MultiChildRenderObjectWidget/ListBody/node1_base.dart'; -export '../MultiChildRenderObjectWidget/ShrinkWrappingViewport/node1_base.dart'; -export '../MultiChildRenderObjectWidget/NestedScrollViewViewport/node1_base.dart'; diff --git a/modules/widget_system/widgets/lib/exp/Other.dart b/modules/widget_system/widgets/lib/exp/Other.dart deleted file mode 100644 index 8309e77f3..000000000 --- a/modules/widget_system/widgets/lib/exp/Other.dart +++ /dev/null @@ -1,16 +0,0 @@ -/// create by 张风捷特烈 on 2020/4/28 -/// contact me by email 1981462002@qq.com -/// 说明: - -library other_unit.dart; - - -export '../Other/ErrorWidget/node1_base.dart'; -export '../Other/Table/node1_base.dart'; -export '../Other/RawImage/node1_base.dart'; -export '../Other/PerformanceOverlay/node1_base.dart'; -export '../Other/RenderObjectToWidgetAdapter/node1_base.dart'; -export '../Other/ListWheelViewport/node1_base.dart'; -export '../Other/ListWheelViewport/node2_perspective.dart'; -export '../Other/ListWheelViewport/node3_magnifier.dart'; -export '../Other/ListWheelViewport/node4_opacity.dart'; \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/exp/ProxyWidget.dart b/modules/widget_system/widgets/lib/exp/ProxyWidget.dart deleted file mode 100644 index 2b2e5cdda..000000000 --- a/modules/widget_system/widgets/lib/exp/ProxyWidget.dart +++ /dev/null @@ -1,38 +0,0 @@ -/// create by 张风捷特烈 on 2020/4/28 -/// contact me by email 1981462002@qq.com -/// 说明: - -library proxy_widget_unit.dart; - - -export '../ProxyWidget/DropdownButtonHideUnderline/node1_base.dart'; -export '../ProxyWidget/Flexible/node1_base.dart'; -export '../ProxyWidget/MediaQuery/node1_base.dart'; -export '../ProxyWidget/ButtonTheme/node1_base.dart'; -export '../ProxyWidget/DefaultTextStyle/node1_base.dart'; -export '../ProxyWidget/SliderTheme/node1_base.dart'; -export '../ProxyWidget/SliderTheme/node2_diy.dart'; -export '../ProxyWidget/DividerTheme/node1_base.dart'; -export '../ProxyWidget/IconTheme/node1_base.dart'; -export '../ProxyWidget/ScrollConfiguration/node1_base.dart'; -export '../ProxyWidget/Expanded/node1_base.dart'; -export '../ProxyWidget/Positioned/node1_base.dart'; -export '../ProxyWidget/LayoutId/node1_base.dart'; -export '../ProxyWidget/ChipTheme/node1_base.dart' hide CustomFilterChip; -export '../ProxyWidget/ListTileTheme/node1_base.dart'; -export '../ProxyWidget/MaterialBannerTheme/node1_base.dart'; -export '../ProxyWidget/PopupMenuTheme/node1_base.dart'; -export '../ProxyWidget/ToggleButtonsTheme/node1_base.dart'; -export '../ProxyWidget/ButtonBarTheme/node1_base.dart'; -export '../ProxyWidget/TooltipTheme/node1_base.dart'; -export '../ProxyWidget/Directionality/node1_base.dart'; -export '../ProxyWidget/TableCell/node1_base.dart'; -export '../ProxyWidget/KeepAlive/node1_base.dart'; -export '../ProxyWidget/CupertinoUserInterfaceLevel/node1_base.dart'; -export '../ProxyWidget/InheritedTheme/node1_base.dart'; -export '../ProxyWidget/DefaultAssetBundle/node1_base.dart'; -export '../ProxyWidget/InheritedWidget/node1_base.dart'; -export '../ProxyWidget/InheritedWidget/node2_use.dart'; -export '../ProxyWidget/ParentDataWidget/node1_base.dart'; -export '../ProxyWidget/InheritedModel/node1.dart'; -export '../ProxyWidget/PrimaryScrollController/node1_base.dart'; diff --git a/modules/widget_system/widgets/lib/exp/SingleChildRenderObjectWidget.dart b/modules/widget_system/widgets/lib/exp/SingleChildRenderObjectWidget.dart deleted file mode 100644 index 6b519dcb5..000000000 --- a/modules/widget_system/widgets/lib/exp/SingleChildRenderObjectWidget.dart +++ /dev/null @@ -1,76 +0,0 @@ -library render_object_widget; - -export '../SingleChildRenderObjectWidget/Align/node1_base.dart'; -export '../SingleChildRenderObjectWidget/Align/node2_other.dart'; -export '../SingleChildRenderObjectWidget/CustomSingleChildLayout/node1_base.dart'; -export '../SingleChildRenderObjectWidget/CustomSingleChildLayout/node2_offset.dart'; -export '../SingleChildRenderObjectWidget/RepaintBoundary/node1_base.dart'; -export '../SingleChildRenderObjectWidget/RepaintBoundary/node2_save.dart'; -export '../SingleChildRenderObjectWidget/CompositedTransformTarget/node1_base.dart'; -export '../SingleChildRenderObjectWidget/CompositedTransformFollower/node1_base.dart'; - -export '../SingleChildRenderObjectWidget/AnnotatedRegion/node1_base.dart'; -export '../SingleChildRenderObjectWidget/CupertinoTextSelectionToolbar/node1_base.dart'; -export '../SingleChildRenderObjectWidget/SizeChangedLayoutNotifier/node1_base.dart'; -export '../SingleChildRenderObjectWidget/ColoredBox/node1_base.dart'; - -export '../SingleChildRenderObjectWidget/ConstrainedBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/PhysicalModel/node1_base.dart'; -export '../SingleChildRenderObjectWidget/FractionalTranslation/node1_base.dart'; -export '../SingleChildRenderObjectWidget/ColorFiltered/node1_base.dart'; -export '../SingleChildRenderObjectWidget/Baseline/node1_base.dart'; -export '../SingleChildRenderObjectWidget/DecoratedBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/DecoratedBox/node2_image.dart'; -export '../SingleChildRenderObjectWidget/DecoratedBox/node3_border.dart'; -export '../SingleChildRenderObjectWidget/DecoratedBox/node4_shape.dart'; -export '../SingleChildRenderObjectWidget/DecoratedBox/node5_line.dart'; -export '../SingleChildRenderObjectWidget/DecoratedBox/node6_flutterLogo.dart'; -export '../SingleChildRenderObjectWidget/FadeTransition/node1_base.dart'; -export '../SingleChildRenderObjectWidget/FittedBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/FractionallySizedBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/LimitedBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/OffStage/node1_base.dart'; -export '../SingleChildRenderObjectWidget/Opacity/node1_base.dart'; -export '../SingleChildRenderObjectWidget/Padding/node1_all.dart'; -export '../SingleChildRenderObjectWidget/Padding/node2_only.dart'; -export '../SingleChildRenderObjectWidget/Padding/node3_symmetric.dart'; -export '../SingleChildRenderObjectWidget/RotatedBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/SizedBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/SizedOverflowBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/Transform/node1_skew.dart'; -export '../SingleChildRenderObjectWidget/Transform/node2_translation.dart'; -export '../SingleChildRenderObjectWidget/Transform/node3_scale.dart'; -export '../SingleChildRenderObjectWidget/Transform/node4_rotate.dart'; -export '../SingleChildRenderObjectWidget/Transform/node5_perspective.dart'; -export '../SingleChildRenderObjectWidget/UnConstrainedBox/node1_base.dart'; -export '../StatefulWidget/PositionedTransition/node1_base.dart'; -export '../StatefulWidget/RotationTransition/node1_base.dart'; -export '../StatefulWidget/ScaleTransition/node1_base.dart'; -export '../StatefulWidget/SizeTransition/node1_base.dart'; -export '../SingleChildRenderObjectWidget/ClipOval/node1_base.dart'; -export '../SingleChildRenderObjectWidget/ClipPath/node1_base.dart'; -export '../SingleChildRenderObjectWidget/ClipRRect/node1_base.dart'; -export '../SingleChildRenderObjectWidget/ClipRect/node1_base.dart'; -export '../SingleChildRenderObjectWidget/OverflowBox/node1_base.dart'; -export '../SingleChildRenderObjectWidget/AspectRatio/node1_base.dart'; -export '../SingleChildRenderObjectWidget/AnimatedSize/node1_base.dart'; -export '../SingleChildRenderObjectWidget/Center/node1_base.dart'; -export '../SingleChildRenderObjectWidget/CustomPaint/node2_bezier.dart'; -export '../SingleChildRenderObjectWidget/CustomPaint/node1_clock.dart'; -export '../SingleChildRenderObjectWidget/AbsorbPointer/node1_base.dart'; -export '../SingleChildRenderObjectWidget/BackdropFilter/node1_base.dart'; -export '../SingleChildRenderObjectWidget/IgnorePointer/node1_base.dart'; -export '../SingleChildRenderObjectWidget/LayoutBuilder/node1_base.dart'; -export '../SingleChildRenderObjectWidget/LayoutBuilder/node2_fit.dart'; -export '../SingleChildRenderObjectWidget/LayoutBuilder/node3_expend.dart'; -export '../SingleChildRenderObjectWidget/ShaderMask/node1_radial.dart'; -export '../SingleChildRenderObjectWidget/ShaderMask/node2_linear.dart'; -export '../SingleChildRenderObjectWidget/IntrinsicHeight/node1_base.dart'; -export '../SingleChildRenderObjectWidget/IntrinsicWidth/node1_base.dart'; -export '../SingleChildRenderObjectWidget/PhysicalShape/node1_base.dart'; -export '../SingleChildRenderObjectWidget/ImageFiltered/node1_blur.dart'; -export '../SingleChildRenderObjectWidget/ImageFiltered/node2_color.dart'; -export '../SingleChildRenderObjectWidget/ImageFiltered/node3_matrix.dart'; -export '../SingleChildRenderObjectWidget/TapRegion/node1.dart'; -export '../SingleChildRenderObjectWidget/TextFieldTapRegion/node1.dart'; -export '../SingleChildRenderObjectWidget/CallbackShortcuts/node1.dart'; diff --git a/modules/widget_system/widgets/lib/exp/Sliver.dart b/modules/widget_system/widgets/lib/exp/Sliver.dart deleted file mode 100644 index b7cbed9ff..000000000 --- a/modules/widget_system/widgets/lib/exp/Sliver.dart +++ /dev/null @@ -1,37 +0,0 @@ -/// create by 张风捷特烈 on 2020/4/28 -/// contact me by email 1981462002@qq.com -/// 说明: - -library sliver_unit.dart; - -export '../Sliver/CustomScrollView/node1_base.dart'; -export '../Sliver/FlexibleSpaceBar/node1_base.dart'; -export '../Sliver/SliverAppBar/node1_base.dart'; -export '../Sliver/SliverFillViewport/node1_base.dart'; -export '../Sliver/SliverFixedExtentList/node1_base.dart'; -export '../Sliver/SliverGrid/node1_base.dart'; -export '../Sliver/SliverList/node1_base.dart'; -export '../Sliver/SliverOpacity/node1_base.dart'; -export '../Sliver/SliverPadding/node1_base.dart'; -export '../Sliver/SliverPersistentHeader/node1_base.dart'; -export '../Sliver/SliverToBoxAdapter/node1_base.dart'; -export '../Sliver/SliverOverlapAbsorber/node1_base.dart'; -export '../Sliver/SliverOverlapInjector/node1_base.dart'; -export '../Sliver/SliverPrototypeExtentList/node1_base.dart'; -export '../Sliver/CupertinoSliverNavigationBar/node1_base.dart'; -export '../Sliver/CupertinoSliverRefreshControl/node1_base.dart'; -export '../Sliver/SliverFillRemaining/node1_base.dart'; -export '../Sliver/SliverIgnorePointer/node1_base.dart'; -export '../Sliver/SliverAnimatedList/node1_base.dart'; -export '../Sliver/SliverLayoutBuilder/node1_base.dart'; -export '../Sliver/SliverWithKeepAliveWidget/node1_base.dart'; -export '../Sliver/DecoratedSliver/node1.dart'; -export '../Sliver/SliverConstrainedCrossAxis/node1.dart'; -export '../Sliver/SliverCrossAxisExpanded/node1.dart'; -export '../Sliver/SliverCrossAxisGroup/node1.dart'; -export '../Sliver/SliverMainAxisGroup/node1.dart'; -export '../Sliver/PinnedHeaderSliver/node_01.dart'; -export '../Sliver/PinnedHeaderSliver/node_02.dart'; -export '../Sliver/PinnedHeaderSliver/node_03.dart'; -// export '../Sliver/SliverResizingHeader/node_01.dart'; -// export '../Sliver/SliverResizingHeader/node_02.dart'; diff --git a/modules/widget_system/widgets/lib/exp/StatefulWidget.dart b/modules/widget_system/widgets/lib/exp/StatefulWidget.dart deleted file mode 100644 index f90b2fa0c..000000000 --- a/modules/widget_system/widgets/lib/exp/StatefulWidget.dart +++ /dev/null @@ -1,204 +0,0 @@ -library stateful_unit; - -export '../StatefulWidget/CupertinoButton/node1_base.dart'; -export '../StatefulWidget/CupertinoContextMenu/node1_base.dart'; -export '../StatefulWidget/CupertinoContextMenuAction/node1_base.dart'; -export '../StatefulWidget/DateRangePickerDialog/node1_base.dart'; -export '../StatefulWidget/DateRangePickerDialog/node2_diy.dart'; - -export '../StatefulWidget/CupertinoDatePicker/node1_base.dart'; -export '../StatefulWidget/CupertinoPicker/node1_base.dart'; -export '../StatefulWidget/CupertinoTimerPicker/node1_base.dart'; -export '../StatefulWidget/SlideTransition/node1_base.dart'; -export '../StatefulWidget/MonthPicker/node1_base.dart'; -export '../StatefulWidget/YearPicker/node1_base.dart'; -export '../StatefulWidget/WillPopScope/node1_base.dart'; -export '../StatefulWidget/NestedScrollView/node1_base.dart'; -export '../StatefulWidget/AppBar/node1_base.dart'; -export '../StatefulWidget/AppBar/node2_tab.dart'; -export '../StatefulWidget/BottomAppBar/node1_base.dart'; -export '../StatefulWidget/BottomNavigationBar/node1_base.dart'; -export '../StatefulWidget/BottomNavigationBar/node2_page.dart'; -export '../StatefulWidget/Checkbox/node1_base.dart'; -export '../StatefulWidget/Checkbox/node2_tristate.dart'; -export '../StatefulWidget/ExpandIcon/node1_base.dart'; -export '../StatefulWidget/ExpansionTile/node1_base.dart'; -export '../StatefulWidget/Radio/node1_base.dart'; -export '../StatefulWidget/Tooltip/node1_base.dart'; -export '../StatefulWidget/Tooltip/node2_decoration.dart'; -export '../StatefulWidget/CircularProgressIndicator/node1_base.dart'; -export '../StatefulWidget/CupertinoActivityIndicator/node1_base.dart'; -export '../StatefulWidget/CupertinoSlider/node1_base.dart'; -export '../StatefulWidget/CupertinoSwitch/node1_base.dart'; -export '../StatefulWidget/CupertinoSegmentedControl/node1_base.dart'; -export '../StatefulWidget/CupertinoSegmentedControl/node2_color.dart'; -export '../StatefulWidget/Navigator/node1_base.dart'; -export '../StatefulWidget/InteractiveViewer/node1_base.dart'; -export '../StatefulWidget/InteractiveViewer/node2_constrained.dart'; -export '../StatefulWidget/InteractiveViewer/node3_controller.dart'; -export '../StatefulWidget/CarouselView/node1_base.dart'; -export '../StatefulWidget/CarouselView/node2.dart'; - -export '../StatefulWidget/Image/node1_base.dart'; -export '../StatefulWidget/Image/node2_fit.dart'; -export '../StatefulWidget/Image/node3_alignment.dart'; -export '../StatefulWidget/Image/node4_colorBlendMode.dart'; -export '../StatefulWidget/Image/node5_repeat.dart'; -export '../StatefulWidget/Image/node6_centerSlice.dart'; - -export '../StatefulWidget/RangeSlider/node1_base.dart'; -export '../StatefulWidget/Slider/node1_base.dart'; -export '../StatefulWidget/Slider/node2_lable.dart'; -export '../StatefulWidget/Switch/node1_base.dart'; -export '../StatefulWidget/Switch/node2_image.dart'; -export '../StatefulWidget/StatefulBuilder/node1_base.dart'; -export '../StatefulWidget/RefreshIndicator/node1_base.dart'; -export '../StatefulWidget/SelectableText/node1_base.dart'; -export '../StatefulWidget/SelectableText/node2_align.dart'; -export '../StatefulWidget/CupertinoNavigationBar/node1_base.dart'; -export '../StatefulWidget/CupertinoTabBar/node1_base.dart'; -export '../StatefulWidget/CupertinoTextField/node1_base.dart'; -export '../StatefulWidget/CupertinoTextField/node2_style.dart'; -export '../StatefulWidget/ValueListenableBuilder/node1_base.dart'; -export '../StatefulWidget/MouseRegion/node1_base.dart'; -export '../StatefulWidget/Scrollable/node1_base.dart'; - -export '../StatefulWidget/DropdownButton/node1_base.dart'; -export '../StatefulWidget/DropdownButton/node2_style.dart'; - -export '../StatefulWidget/AnimatedCrossFade/node1_base.dart'; -export '../StatefulWidget/AnimatedCrossFade/node2_curve.dart'; - -export '../StatefulWidget/AnimatedList/node1_base.dart'; -export '../StatefulWidget/AnimatedSwitcher/node1_base.dart'; -export '../StatefulWidget/AlignTransition/node1_base.dart'; -export '../StatefulWidget/DecoratedBoxTransition/node1_base.dart'; -export '../StatefulWidget/DefaultTextStyleTransition/node1_base.dart'; -export '../StatefulWidget/RelativePositionedTransition/node1_base.dart'; -export '../StatefulWidget/CupertinoScrollbar/node1_base.dart'; -export '../StatefulWidget/RawGestureDetector/node1_base.dart'; - -export '../StatefulWidget/Dismissible/node1_base.dart'; -export '../StatefulWidget/AutomaticKeepAlive/node1_base.dart'; -export '../StatefulWidget/AnimatedModalBarrier/node1_base.dart'; -export '../StatefulWidget/FormField/node1_base.dart'; -export '../StatefulWidget/AnimatedBuilder/node1_base.dart'; -export '../StatefulWidget/TweenAnimationBuilder/node1_base.dart'; -export '../StatefulWidget/PaginatedDataTable/node1_base.dart'; -export '../StatefulWidget/RawKeyboardListener/node1_base.dart'; -export '../StatefulWidget/Dismissible/node2_direction.dart'; - -export '../StatefulWidget/DragTarget/node1_base.dart'; -export '../StatefulWidget/Draggable/node1_base.dart'; -export '../StatefulWidget/Draggable/node2_data.dart'; -export '../StatefulWidget/Draggable/node3_use.dart'; - -export '../StatefulWidget/Form/node1_base.dart'; -export '../StatefulWidget/StatusTransitionWidget/node1_base.dart'; -export '../StatefulWidget/UniqueWidget/node1_base.dart'; -export '../StatefulWidget/FutureBuilder/node1_base.dart'; -export '../StatefulWidget/Hero/node1_base.dart'; -export '../StatefulWidget/AnimatedAlign/node1_base.dart'; -export '../StatefulWidget/AnimatedScale/node1.dart'; -export '../StatefulWidget/AnimatedSlide/node1.dart'; -export '../StatefulWidget/AnimatedRotation/node1.dart'; -export '../StatefulWidget/AnimatedFractionallySizedBox/node1.dart'; -export '../StatefulWidget/AnimatedContainer/node1_base.dart'; -export '../StatefulWidget/AnimatedDefaultTextStyle/node1_base.dart'; -export '../StatefulWidget/AnimatedOpacity/node1_base.dart'; -export '../StatefulWidget/AnimatedPadding/node1_base.dart'; -export '../StatefulWidget/AnimatedPositioned/node1_base.dart'; -export '../StatefulWidget/AnimatedPositionedDirectional/node1_base.dart'; - -export '../StatefulWidget/ExpansionPanelList/node1_base.dart'; -export '../StatefulWidget/DropdownButtonFormField/node1_base.dart'; - -export '../StatefulWidget/Ink/node1_base.dart'; -export '../StatefulWidget/Ink/node2_image.dart'; - -export '../StatefulWidget/InkResponse/node1_base.dart'; - -export '../StatefulWidget/InkResponse/node2_color.dart'; -export '../StatefulWidget/DropdownMenu/node1.dart'; -export '../StatefulWidget/DropdownMenu/node2.dart'; -export '../StatefulWidget/DropdownMenu/node3.dart'; -export '../StatefulWidget/InkWell/node1_base.dart'; -export '../StatefulWidget/InkWell/node2_color.dart'; - -export '../StatefulWidget/LicensePage/node1_base.dart'; -export '../StatefulWidget/ListWheelScrollView/node1_base.dart'; -export '../StatefulWidget/LongPressDraggable/node1_base.dart'; -export '../StatefulWidget/Material/node1_base.dart'; -export '../StatefulWidget/Material/node2_shape.dart'; -export '../StatefulWidget/Overlay/node1_base.dart'; -export '../StatefulWidget/PageView/node1_base.dart'; -export '../StatefulWidget/PageView/node2_direction.dart'; -export '../StatefulWidget/PageView/node3_controller.dart'; -export '../StatefulWidget/PopupMenuButton/node1_base.dart'; -export '../StatefulWidget/PopupMenuDivider/node1_base.dart'; -export '../StatefulWidget/RawChip/node1_press.dart'; -export '../StatefulWidget/RawChip/node2_select.dart'; - -export '../StatefulWidget/RawMaterialButton/node1_base.dart'; -export '../StatefulWidget/RawMaterialButton/node2_shape.dart'; -export '../StatefulWidget/ReorderableListView/node1_base.dart'; -export '../StatefulWidget/ReorderableListView/node2_direction.dart'; -export '../StatefulWidget/Scrollbar/node1_base.dart'; -export '../StatefulWidget/Stepper/node1_base.dart'; -export '../StatefulWidget/Stepper/node2_type.dart'; -export '../StatefulWidget/StreamBuilder/node1_base.dart'; -export '../StatefulWidget/TableRowInkWell/node1_base.dart'; -export '../StatefulWidget/TextField/node1_base.dart'; -export '../StatefulWidget/TextField/node2_cursor.dart'; -export '../StatefulWidget/TextField/node3_decoration.dart'; - -export '../StatefulWidget/TextFormField/node1_base.dart'; -export '../StatefulWidget/LinearProgressIndicator/node1_base.dart'; -export '../StatefulWidget/CupertinoApp/node1_base.dart'; -export '../StatefulWidget/CupertinoPageScaffold/node1_base.dart'; -export '../StatefulWidget/CupertinoTabScaffold/node1_base.dart'; -export '../StatefulWidget/MaterialApp/node1_base.dart'; -export '../StatefulWidget/Scaffold/node1_base.dart'; -export '../StatefulWidget/TabBarView/node1_base.dart'; -export '../StatefulWidget/InputDecorator/node1_base.dart'; -export '../StatefulWidget/EditableText/node1_base.dart'; -export '../StatefulWidget/CupertinoSlidingSegmentedControl/node1_base.dart'; -export '../StatefulWidget/WidgetsApp/node1_base.dart' hide HomePage; -export '../StatefulWidget/WidgetInspector/node1_base.dart' hide HomePage; -export '../StatefulWidget/AnimatedTheme/node1_base.dart'; -export '../StatefulWidget/AnimatedPhysicalModel/node1_base.dart'; -export '../StatefulWidget/DefaultTabController/node1_base.dart'; -export '../StatefulWidget/GlowingOverscrollIndicator/node1_base.dart'; -export '../StatefulWidget/DraggableScrollableSheet/node1_base.dart'; -export '../StatefulWidget/DrawerController/node1_base.dart'; -export '../StatefulWidget/MergeableMaterial/node1_base.dart'; -export '../StatefulWidget/CupertinoTabView/node1_base.dart'; - -export '../StatefulWidget/TextButton/node1_base.dart'; -export '../StatefulWidget/TextButton/node2_style.dart'; -export '../StatefulWidget/FilledButton/node1.dart'; -export '../StatefulWidget/FilledButton/node2.dart'; -export '../StatefulWidget/Localizations/node1.dart'; - -export '../StatefulWidget/ElevatedButton/node1_base.dart'; -export '../StatefulWidget/ElevatedButton/node2_style.dart'; - -export '../StatefulWidget/OutlinedButton//node1_base.dart'; -export '../StatefulWidget/OutlinedButton/node2_style.dart'; - -export '../StatefulWidget/NavigationRail/node1_base.dart'; -export '../StatefulWidget/NavigationRail/node2_extend.dart'; -export '../StatefulWidget/NavigationRail/node3_dark.dart'; -export '../StatefulWidget/CupertinoCheckbox/node1.dart'; -export '../StatefulWidget/CupertinoCheckbox/node2.dart'; -export '../StatefulWidget/CupertinoCheckbox/node3.dart'; - -export '../StatefulWidget/CupertinoRadio/node1.dart'; -export '../StatefulWidget/CupertinoRadio/node2.dart'; -export '../StatefulWidget/CupertinoRadio/node3.dart'; -export '../StatefulWidget/UndoHistory/node1.dart'; -export '../StatefulWidget/TickerMode/node1.dart'; -export '../StatefulWidget/KeyboardListener/node1.dart'; -export '../StatefulWidget/Focus/node1.dart'; -export '../StatefulWidget/Focus/node2.dart'; -export '../StatefulWidget/Focus/node3.dart'; \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/exp/StatelessWidget.dart b/modules/widget_system/widgets/lib/exp/StatelessWidget.dart deleted file mode 100644 index 9833ccaee..000000000 --- a/modules/widget_system/widgets/lib/exp/StatelessWidget.dart +++ /dev/null @@ -1,213 +0,0 @@ -library stateless_unit; - -export '../StatelessWidget/AboutDialog/node1_base.dart'; -export '../StatelessWidget/AboutListTile/node1_base.dart'; -export '../StatelessWidget/ActionChip/node1_base.dart'; -export '../StatelessWidget/AlertDialog/node1_base.dart'; -export '../StatelessWidget/AnimatedIcon/node1_base.dart'; -export '../StatelessWidget/CheckedModeBanner/node1_base.dart'; -export '../StatelessWidget/Card/node1_base.dart'; -export '../StatelessWidget/Card/node2_shape.dart'; -export '../StatelessWidget/PreferredSize/node1_base.dart'; -export '../StatelessWidget/PreferredSize/node2_adapter.dart'; -export '../StatelessWidget/Builder/node1_base.dart'; -export '../StatelessWidget/NavigationToolbar/node1_base.dart'; -export '../StatelessWidget/CupertinoDialogAction/node1_base.dart'; -export '../StatelessWidget/DraggableScrollableActuator/node1_base.dart'; - -export '../StatelessWidget/CheckboxListTile/node1_base.dart'; -export '../StatelessWidget/CheckboxListTile/node2_select.dart'; -export '../StatelessWidget/CheckboxListTile/node3_dense.dart'; - -export '../StatelessWidget/Chip/node1_base.dart'; -export '../StatelessWidget/Chip/node2_color.dart'; -export '../StatelessWidget/Chip/node3_delete.dart'; - -export '../StatelessWidget/Container/node1_base.dart'; -export '../StatelessWidget/Container/node2_child.dart'; -export '../StatelessWidget/Container/node3_alignment.dart'; -export '../StatelessWidget/Container/node4_decoration.dart'; -export '../StatelessWidget/Container/node5_transform.dart'; -export '../StatelessWidget/Container/node6_constraints.dart'; -export '../StatelessWidget/MaterialBanner/node1_one_btn.dart'; -export '../StatelessWidget/MaterialBanner/node2_two_btn.dart'; -export '../StatelessWidget/SafeArea/node1_base.dart'; - -export '../StatelessWidget/Badge/node_1.dart'; -export '../StatelessWidget/Badge/node_2.dart'; -export '../StatelessWidget/Badge/node_3.dart'; - -export '../StatelessWidget/BackButtonIcon/node1_base.dart'; -export '../StatelessWidget/DrawerButtonIcon/node1_base.dart'; -export '../StatelessWidget/CloseButtonIcon/node1_base.dart'; -export '../StatelessWidget/EndDrawerButtonIcon/node1_base.dart'; - -export '../StatelessWidget/EndDrawerButton/node1_base.dart'; -export '../StatelessWidget/DrawerButton/node1_base.dart'; -export '../StatelessWidget/CloseButton/node1_base.dart'; -export '../StatelessWidget/BackButton/node1_base.dart'; - - -export '../StatelessWidget/CupertinoFullscreenDialogTransition/node1_base.dart'; -export '../StatelessWidget/CupertinoPageTransition/node1_base.dart'; -export '../StatelessWidget/HtmlElementView/node1_base.dart'; - -export '../StatelessWidget/DataTable/node1_base.dart'; -export '../StatelessWidget/DataTable/node2_operation.dart'; -export '../StatelessWidget/OrientationBuilder/node1_base.dart'; -export '../StatelessWidget/Title/node1_base.dart'; -export '../StatelessWidget/TabPageSelector/node1_base.dart'; -export '../StatelessWidget/TabPageSelectorIndicator/node1_base.dart'; -export '../StatelessWidget/CupertinoNavigationBarBackButton/node1_base.dart'; - -export '../StatelessWidget/CupertinoTheme/node1_base.dart'; -export '../StatelessWidget/CupertinoTheme/node2_use.dart'; - -export '../StatelessWidget/CupertinoPopupSurface/node1_base.dart'; -export '../StatelessWidget/Divider/node1_base.dart'; -export '../StatelessWidget/Divider/node2_height.dart'; - -export '../StatelessWidget/ScrollView/node1_base.dart'; -export '../StatelessWidget/ModalBarrier/node1_base.dart'; -export '../StatelessWidget/BoxScrollView/node1_base.dart'; -export '../StatelessWidget/FloatingActionButton/node1_base.dart'; -export '../StatelessWidget/FloatingActionButton/node2_mini.dart'; -export '../StatelessWidget/FloatingActionButton/node3_shape.dart'; -export '../StatelessWidget/GestureDetector/node1_base.dart'; -export '../StatelessWidget/GestureDetector/node2_tap.dart'; -export '../StatelessWidget/GestureDetector/node3_pan.dart'; - -export '../StatelessWidget/Banner/node1_base.dart'; -export '../StatelessWidget/ImageIcon/node1_base.dart'; -export '../StatelessWidget/FadeInImage/node1_base.dart'; -export '../StatelessWidget/CircleAvatar/node1_base.dart'; - - -export '../StatelessWidget/InputChip/node1_base.dart'; -export '../StatelessWidget/InputChip/node2_select.dart'; - - -export '../StatelessWidget/Visibility/node1_base.dart'; -export '../StatelessWidget/Visibility/node2_replacement.dart'; - -export '../StatelessWidget/ChoiceChip/node1_base.dart'; - -export '../StatelessWidget/FilterChip/node1_base.dart'; - - -export '../StatelessWidget/ListTile/node1_base.dart'; -export '../StatelessWidget/ListTile/node2_select.dart'; -export '../StatelessWidget/ListTile/node3_dense.dart'; - - -export '../StatelessWidget/ListView/node1_base.dart'; -export '../StatelessWidget/ListView/node2_direction.dart'; -export '../StatelessWidget/ListView/node3_builder.dart'; -export '../StatelessWidget/ListView/node4_separated.dart'; - -export '../StatelessWidget/MaterialButton/node1_base.dart'; -export '../StatelessWidget/MaterialButton/node2_onLongPress.dart'; -export '../StatelessWidget/MaterialButton/node3_shape.dart'; - -export '../StatelessWidget/GridTileBar/node1_base.dart'; -export '../StatelessWidget/GridTile/node1_base.dart'; - -export '../StatelessWidget/Icon/node1_base.dart'; -export '../StatelessWidget/Icon/node2_diy.dart'; - -export '../StatelessWidget/Placeholder/node1_base.dart'; -export '../StatelessWidget/Placeholder/node2_fallback.dart'; - -export '../StatelessWidget/RadioListTile/node1_base.dart'; -export '../StatelessWidget/RadioListTile/node2_dense.dart' show DenseRadioListTile; - -export '../StatelessWidget/SingleChildScrollView/node1_base.dart'; -export '../StatelessWidget/SingleChildScrollView/node2_direction.dart'; - -export '../StatelessWidget/TabBar/node1_base.dart'; -export '../StatelessWidget/TabBar/node2_noShadow.dart'; - - - -export '../StatelessWidget/ButtonBar/node1_base.dart'; -export '../StatelessWidget/ButtonBar/node2_padding.dart'; - - -export '../StatelessWidget/FlatButton/node1_base.dart'; - -export '../StatelessWidget/FlutterLogo/node1_base.dart'; -export '../StatelessWidget/FlutterLogo/node2_style.dart'; - -export '../StatelessWidget/IconButton/node1_base.dart'; -export '../StatelessWidget/OutlineButton/node1_base.dart'; -export '../StatelessWidget/RaisedButton/node1_base.dart'; - -export '../StatelessWidget/Drawer/node1_base.dart'; -export '../StatelessWidget/DrawerHeader/node1_base.dart'; - -export '../StatelessWidget/UserAccountsDrawerHeader/node1_base.dart'; -export '../StatelessWidget/UserAccountsDrawerHeader/node2_pro.dart'; - - -export '../StatelessWidget/VerticalDivider/node1_base.dart'; -export '../StatelessWidget/VerticalDivider/node2_height.dart'; - - -export '../StatelessWidget/GridView/node1_base.dart'; -export '../StatelessWidget/GridView/node2_direction.dart'; -export '../StatelessWidget/GridView/node3_extend.dart'; -export '../StatelessWidget/GridView/node4_builder.dart'; - -export '../StatelessWidget/GridPaper/node1_base.dart'; -export '../StatelessWidget/GridPaper/node2_divisions.dart'; - -export '../StatelessWidget/Spacer/node1_base.dart'; -export '../StatelessWidget/Spacer/node2_flex.dart'; - -export '../StatelessWidget/SwitchListTile/node1_base.dart'; -export '../StatelessWidget/SwitchListTile/node2_select.dart'; -export '../StatelessWidget/SwitchListTile/node3_dense.dart'; - -export '../StatelessWidget/Listener/node1_base.dart'; -export '../StatelessWidget/PositionedDirectional/node1_base.dart'; - -export '../StatelessWidget/Tab/node1_base.dart'; -export '../StatelessWidget/Theme/node1_base.dart'; -export '../StatelessWidget/Theme/node2_use.dart'; - -export '../StatelessWidget/ToggleButtons/node1_single.dart'; -export '../StatelessWidget/ToggleButtons/node2_color.dart'; -export '../StatelessWidget/ToggleButtons/node3_multi.dart'; - - -export '../StatelessWidget/BottomSheet/node1_base.dart'; -export '../StatelessWidget/CupertinoActionSheet/node1_base.dart'; -export '../StatelessWidget/CupertinoActionSheetAction/node1_base.dart'; -export '../StatelessWidget/CupertinoAlertDialog/node1_base.dart'; - -export '../StatelessWidget/Text/node1.dart'; -export '../StatelessWidget/Text/node2.dart'; -export '../StatelessWidget/Text/node3_decoration.dart'; -export '../StatelessWidget/Text/node4_textAlign.dart'; -export '../StatelessWidget/Text/node5_textDirection.dart'; -export '../StatelessWidget/Text/node6_softWrap.dart'; - - -export '../StatelessWidget/DayPicker/node1_base.dart'; -export '../StatelessWidget/Dialog/node1_base.dart'; - -export '../StatelessWidget/SimpleDialog/node1_base.dart'; -export '../StatelessWidget/SimpleDialogOption/node1_base.dart'; -export '../StatelessWidget/SnackBar/node1_base.dart'; -export '../StatelessWidget/SnackBarAction/node1_base.dart'; - -export '../StatelessWidget/PageStorage/node1_base.dart'; -export '../StatelessWidget/NotificationListener/node1_base.dart'; -export '../StatelessWidget/NotificationListener/node2_update.dart'; - -export '../StatelessWidget/Autocomplete/node1_base.dart'; -export '../StatelessWidget/Autocomplete/node2_type.dart'; -export '../StatelessWidget/RawMagnifier/node1_base.dart'; -export '../StatelessWidget/RawMagnifier/node2_shape.dart'; - - diff --git a/modules/widget_system/widgets/lib/node_display_map.dart b/modules/widget_system/widgets/lib/node_display_map.dart deleted file mode 100644 index a6929b0b1..000000000 --- a/modules/widget_system/widgets/lib/node_display_map.dart +++ /dev/null @@ -1,516 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'exp/Other.dart'; -import 'exp/ProxyWidget.dart'; -import 'exp/MultiChildRenderObjectWidget.dart'; -import 'exp/SingleChildRenderObjectWidget.dart'; -import 'exp/Sliver.dart'; -import 'exp/StatefulWidget.dart'; -import 'exp/StatelessWidget.dart'; - - -Widget mapNodeDisplay(int widgetId, int nodePriority) { - String name = '$widgetId#$nodePriority'; - - return switch (name) { - '96#0' => const ColumnNode1(), - '341#0' => const CustomMultiChildLayoutNode1(), - '94#0' => const FlexNode1(), - '94#1' => const FlexNode2(), - '94#2' => const FlexNode3(), - '94#3' => const FlexNode4(), - '94#4' => const FlexNode5(), - '99#0' => const FlowNode1(), - '99#1' => const FlowNode02(), - '161#0' => const IndexedStackNode01(), - '342#0' => const ListBodyDemo(), - '344#0' => const NestedScrollViewViewportDemo(), - '101#0' => const CustomRichText(), - '101#1' => const RichTextWithWidget(), - '95#0' => const CustomRow(), - '343#0' => const ShrinkWrappingViewportDemo(), - '97#0' => const CustomStack(), - '97#1' => const PositionedStack(), - '340#0' => const ViewportDemo(), - '98#0' => const DirectionWrap(), - '98#1' => const WrapAlignmentWrap(), - '98#2' => const CrossAxisAlignmentWrap(), - '98#3' => const TextDirectionWrap(), - '98#4' => const VerticalDirectionWrap(), - '197#0' => const ErrorWidgetDemo(), - '291#0' => const ListWheelViewportDemo(), - '291#1' => const ListWheelViewportDemo2(), - '291#2' => const ListWheelViewportDemo3(), - '291#3' => const ListWheelViewportDemo4(), - '312#0' => const PerformanceOverlayDemo(), - '313#0' => const RawImageDemo(), - '289#0' => const RenderObjectToWidgetAdapterDemo(), - '110#0' => const CustomTable(), - '338#0' => const ButtonBarThemeDemo(), - '326#0' => const ButtonThemeDemo(), - '328#0' => const ChipThemeDemo(), - '337#0' => const CupertinoUserInterfaceLevelDemo(), - '320#0' => const DefaultAssetBundleDemo(), - '324#0' => const DefaultTextStyleDemo(), - '319#0' => const DirectionalityDemo(), - '329#0' => const DividerThemeDemo(), - '181#0' => const CustomDropDownButtonHideUnderline(), - '106#0' => const CustomExpended(), - '109#0' => const CustomFlexible(), - '325#0' => const IconThemeDemo(), - '336#0' => const InheritedModelDemo(), - '345#0' => const InheritedThemeDemo(), - '346#0' => const InheritedWidgetDemo(), - '346#1' => const InheritedWidgetDemo2(), - '316#0' => const KeepAliveDemo(), - '315#0' => const LayoutIdDemo(), - '334#0' => const ListTileThemeDemo(), - '327#0' => const MaterialBannerThemeDemo(), - '167#0' => const CustomMediaQuery(), - '347#0' => const ParentDataWidgetDemo(), - '330#0' => const PopupMenuThemeDemo(), - '108#0' => const CustomPositioned(), - '335#0' => const PrimaryScrollControllerDemo(), - '180#0' => const CustomScrollConfiguration(), - '331#0' => const SliderThemeDemo(), - '331#1' => const DIYSliderTheme(), - '317#0' => const TableCellDemo(), - '332#0' => const ToggleButtonsThemeDemo(), - '333#0' => const TooltipThemeDemo(), - '295#0' => const CustomAbsorbPointer(), - '85#0' => const CustomAlign(), - '85#1' => const Ball(), - '201#0' => const CustomAnimatedSize(), - '288#0' => const AnnotatedRegionDemo(), - '77#0' => const CustomAspectRatio(), - '278#0' => const CustomBackdropFilter(), - '75#0' => const CustomBaseline(), - '283#0' => const CallbackShortcutsDemo1(), - '86#0' => const CustomCenter(), - '66#0' => const CustomClipOval(), - '69#0' => const CustomClipPath(), - '67#0' => const CustomClipRect(), - '68#0' => const CustomClipRRect(), - '267#0' => const ColoredBoxDemo(), - '88#0' => const CustomColorFiltered(), - '265#0' => const CompositedTransformFollowerDemo(), - '266#0' => const CompositedTransformTargetDemo(), - '80#0' => const CustomConstrainedBox(), - '299#0' => const CupertinoTextSelectionToolbarDemo(), - '166#0' => const ClockPage(), - '166#1' => const PlayBezier3Page(), - '285#0' => const CustomSingleChildLayoutDemo(), - '285#1' => const OffSetWidgetDemo(), - '70#0' => const BoxDecorationDemo(), - '70#1' => const ShapeImageDemo(), - '70#2' => const BorderDemo(), - '70#3' => const ShapeDecorationDemo(), - '70#4' => const UnderlineTabIndicatorDemo(), - '70#5' => const FlutterLogoDecorationDemo(), - '89#0' => const CustomFadeTransition(), - '87#0' => const CustomFittedBox(), - '82#0' => const CustomFractionallySizedBox(), - '263#0' => const FractionalTranslationDemo(), - '292#0' => const CustomIgnorePointer(), - '357#0' => const ImageFilteredBlur(), - '357#1' => const ImageFilteredColor(), - '357#2' => const ImageFilteredMatrix(), - '298#0' => const IntrinsicHeightDemo(), - '297#0' => const IntrinsicWidthDemo(), - '287#0' => const CustomLayoutBuilder(), - '287#1' => const FitByLayoutBuilder(), - '287#2' => const SimpleExpandableText(), - '79#0' => const CustomLimitedBox(), - '71#0' => const CustomOffstage(), - '73#0' => const CustomOpacity(), - '83#0' => const CustomOverflowBox(), - '74#0' => const PaddingAll(), - '74#1' => const PaddingOnly(), - '74#2' => const PaddingSymmetric(), - '296#0' => const PhysicalModelDemo(), - '279#0' => const PhysicalShapeDemo(), - '264#0' => const RepaintBoundaryDemo(), - '264#1' => const RepaintBoundarySave(), - '72#0' => const CustomRotatedBox(), - '277#0' => const RadialShaderMask(), - '277#1' => const LinearShaderMask(), - '294#0' => const SizeChangedLayoutNotifierDemo(), - '76#0' => const CustomSizedBox(), - '84#0' => const CustomSizedOverflowBox(), - '280#0' => const TapRegionDemo1(), - '281#0' => const TextFieldTapRegionDemo1(), - '78#0' => const SkewTransform(), - '78#1' => const TranslationTransform(), - '78#2' => const ScaleTransform(), - '78#3' => const RotateTransform(), - '78#4' => const R3C2(), - '81#0' => const CustomUnConstrainedBox(), - '302#0' => const CupertinoSliverNavigationBarDemo(), - '303#0' => const CupertinoSliverRefreshControlDemo(), - '183#0' => const CustomScrollViewDemo(), - '209#0' => const DecorationSliverDemo(), - '196#0' => const FlexibleSpaceBarDemo(), - '309#0' => const PinnedHeaderSliverNode1(), - '309#1' => const PinnedHeaderSliverNode2(), - '309#2' => const PinnedHeaderSliverNode3(), - '301#0' => const SliverAnimatedListDemo(), - '184#0' => const SliverAppBarDemo(), - '270#0' => const SliverConstrainedCrossAxisDemo(), - '271#0' => const SliverCrossAxisExpandedDemo(), - '269#0' => const SliverCrossAxisGroupDemo(), - '306#0' => const SliverFillRemainingDemo(), - '187#0' => const SliverFillViewportDemo(), - '186#0' => const SliverFixedExtentListDemo(), - '188#0' => const SliverGirdDemo(), - '305#0' => const SliverIgnorePointerDemo(), - '304#0' => const SliverLayoutBuilderDemo(), - '185#0' => const SliverListDemo(), - '268#0' => const SliverMainAxisGroupDemo(), - '192#0' => const SliverOpacityDemo(), - '307#0' => const SliverOverlapAbsorberDemo(), - '308#0' => const SliverOverlapInjectorDemo(), - '191#0' => const SliverPaddingDemo(), - '190#0' => const SliverPersistentHeaderDemo(), - '314#0' => const SliverPrototypeExtentListDemo(), - '189#0' => const SliverToBoxAdapterDemo(), - '348#0' => const SliverWithKeepAliveWidgetDemo(), - '111#0' => const CustomAlignTransition(), - '120#0' => const CustomAnimatedAlign(), - '228#0' => const AnimatedBuilderDemo(), - '123#0' => const CustomAnimatedContainer(), - '100#0' => const CustomAnimatedCrossFade(), - '100#1' => const CurveAnimatedCrossFade(), - '124#0' => const CustomAnimatedDefaultTextStyle(), - '260#0' => const AnimatedFractionallySizedBoxDemo(), - '117#0' => const CustomAnimatedList(), - '227#0' => const AnimatedModalBarrierDemo(), - '118#0' => const CustomAnimatedOpacity(), - '119#0' => const CustomAnimatedPadding(), - '225#0' => const AnimatedPhysicalModelDemo(), - '121#0' => const CustomAnimatedPositioned(), - '122#0' => const CustomAnimatedPositionedDirectional(), - '259#0' => const AnimatedRotationDemo(), - '249#0' => const AnimatedScaleDemo(), - '247#0' => const AnimatedSlideDemo(), - '116#0' => const CustomAnimatedSwitcher(), - '224#0' => const AnimatedThemeDemo(), - '57#0' => const CustomAppBar(), - '57#1' => const TabAppBar(), - '239#0' => const AutomaticKeepAliveDemo(), - '61#0' => const CustomBottomAppBar(), - '60#0' => const CustomBottomNavigationBar(), - '60#1' => const BottomNavigationBarWithPageView(), - '237#0' => const CarouselNode1(), - '237#1' => const CarouselNode2(), - '39#0' => const CustomCheckbox(), - '39#1' => const TristateCheckBok(), - '46#0' => const CustomCircularProgressIndicator(), - '48#0' => const CustomCupertinoActivityIndicator(), - '156#0' => const CustomCupertinoApp(), - '24#0' => const CustomCupertinoButton(), - '238#0' => const CupertinoCheckboxDemo1(), - '238#1' => const CupertinoCheckboxDemo2(), - '238#2' => const CupertinoCheckboxDemo3(), - '143#0' => const CustomCupertinoContextMenu(), - '144#0' => const CustomCupertinoContextMenuAction(), - '137#0' => const CustomCupertinoDatePicker(), - '62#0' => const CustomCupertinoNavigationBar(), - '157#0' => const CustomCupertinoPageScaffold(), - '139#0' => const CustomCupertinoPicker(), - '240#0' => const CupertinoRadioDemo1(), - '240#1' => const CupertinoRadioDemo2(), - '240#2' => const CupertinoRadioDemo3(), - '195#0' => const CustomCupertinoScrollbar(), - '262#0' => const CupertinoSegmentedControlDemo(), - '262#1' => const CupertinoSegmentedControlColor(), - '43#0' => const CustomCupertinoSlider(), - '256#0' => const CupertinoSlidingSegmentedControlDemo(), - '41#0' => const CustomCupertinoSwitch(), - '63#0' => const CustomCupertinoTabBar(), - '158#0' => const CustomCupertinoTabScaffold(), - '229#0' => const CupertinoTabViewDemo(), - '245#0' => const CupertinoTextFieldDemo(), - '245#1' => const CupertinoTextFieldStyle(), - '138#0' => const CustomCupertinoTimerPicker(), - '339#0' => const DateRangePickerDialogDemo(), - '339#1' => const DiyDateRangePickerDialogDemo(), - '113#0' => const CustomDecoratedBoxTransition(), - '230#0' => const DefaultTabControllerDemo(), - '114#0' => const CustomDefaultTextStyleTransition(), - '176#0' => const CustomDismissible(), - '176#1' => const DirectionDismissible(), - '103#0' => const CustomDraggable(), - '103#1' => const DraggablePage(), - '103#2' => const DeleteDraggable(), - '252#0' => const DraggableScrollableSheetDemo(), - '104#0' => const CustomDragTarget(), - '257#0' => const DrawerControllerDemo(), - '55#0' => const CustomDropDownButton(), - '55#1' => const StyleDropDownButton(), - '223#0' => const DropdownButtonFormFieldDemo(), - '370#0' => const DropdownMenuNode1(), - '370#1' => const DropdownMenuNode2(), - '370#2' => const DropdownMenuNode3(), - '244#0' => const EditableTextDemo(), - '354#0' => const ElevatedButtonDemo(), - '354#1' => const ElevatedButtonStyleDemo(), - '51#0' => const CustomExpandIcon(), - '178#0' => const CustomExpansionPanelList(), - '52#0' => const CustomExpansionTile(), - '359#0' => const FilledButtonDemo1(), - '359#1' => const FilledButtonDemo2(), - '282#0' => const FocusDemo1(), - '282#1' => const FocusDemo2(), - '282#2' => const FocusDemo3(), - '198#0' => const CustomForm(), - '222#0' => const FormFieldDemo(), - '172#0' => const CustomFutureBuilder(), - '250#0' => const GlowingOverscrollIndicatorDemo(), - '171#0' => const CustomHero(), - '38#0' => const LoadImage(), - '38#1' => const FitImage(), - '38#2' => const AlignmentImage(), - '38#3' => const BlendModeImage(), - '38#4' => const RepeatImage(), - '38#5' => const CenterSliceImage(), - '152#0' => const CustomInk(), - '152#1' => const InkImage(), - '149#0' => const CustomInkResponse(), - '149#1' => const ColorInkResponse(), - '150#0' => const CustomInkWell(), - '150#1' => const ColorInkWell(), - '231#0' => const InputDecoratorDemo(), - '351#0' => const InteractiveViewerDemo(), - '351#1' => const InteractiveViewerDemo2(), - '351#2' => const InteractiveViewerDemo3(), - '284#0' => const KeyboardListenerDemo1(), - '145#0' => const CustomLicensePage(), - '47#0' => const CustomLinearProgressIndicator(), - '179#0' => const CustomListWheelScrollView(), - '290#0' => const LocalizationsDemo1(), - '105#0' => const CustomLongPressDraggable(), - '160#0' => const CustomMaterial(), - '160#1' => const ShapeMaterial(), - '65#0' => const MaterialAppDemo(), - '261#0' => const MergeableMaterialDemo(), - '135#0' => const CustomMonthPicker(), - '293#0' => const MouseRegionDemo(), - '358#0' => const CustomNavigationRail(), - '358#1' => const ExtendableNavigationRail(), - '358#2' => const DarkNavigationRail(), - '232#0' => const NavigatorDemo(), - '251#0' => const NestedScrollViewDemo(), - '355#0' => const OutlinedButtonDemo(), - '355#1' => const OutlinedButtonStyleDemo(), - '182#0' => const CustomOverlay(), - '165#0' => const CustomPageView(), - '165#1' => const DirectionPageView(), - '165#2' => const CtrlPageView(), - '235#0' => const PaginatedDataTableDemo(), - '56#0' => const CustomPopupMenuButton(), - '174#0' => const CustomPopupMenuDivider(), - '93#0' => const CustomPositionedTransition(), - '45#0' => const CustomRadio(), - '44#0' => const CustomRangeSlider(), - '153#0' => const PressRawChip(), - '153#1' => const SelectRawChip(), - '248#0' => const RawGestureDetectorDemo(), - '254#0' => const RawKeyboardListenerDemo(), - '175#0' => const CustomRawMaterialButton(), - '175#1' => const ShapeRawMaterialButton(), - '49#0' => const CustomRefreshIndicator(), - '115#0' => const CustomRelativePositionedTransition(), - '177#0' => const CustomReorderableListView(), - '177#1' => const DirectionReorderableListView(), - '90#0' => const CustomRotationTransition(), - '64#0' => const CustomScaffold(), - '91#0' => const CustomScaleTransition(), - '253#0' => const ScrollableDemo(), - '194#0' => const CustomScrollbar(), - '53#0' => const CustomSelectableText(), - '53#1' => const AlignSelectableText(), - '92#0' => const CustomSizeTransition(), - '42#0' => const CustomSlider(), - '42#1' => const DivisionsSlider(), - '112#0' => const CustomSlideTransition(), - '242#0' => const StatefulBuilderDemo(), - '233#0' => const StatusTransitionWidgetDemo(), - '200#0' => const StepperDemo(), - '200#1' => const VerticalStepper(), - '173#0' => const CustomStreamBuilder(), - '40#0' => const CustomSwitch(), - '40#1' => const ImageSwitch(), - '59#0' => const CustomTabBarView(), - '151#0' => const CustomTableRowInkWell(), - '353#0' => const TextButtonDemo(), - '353#1' => const TextButtonStyleDemo(), - '54#0' => const CustomTextField(), - '54#1' => const CursorTextField(), - '54#2' => const ComplexTextField(), - '199#0' => const CustomTextFormField(), - '246#0' => const TickerModeDemo1(), - '50#0' => const CustomTooltip(), - '50#1' => const DecorationTooltip(), - '226#0' => const TweenAnimationBuilderDemo(), - '241#0' => const UndoHistoryDemo1(), - '243#0' => const UniqueWidgetDemo(), - '255#0' => const ValueListenableBuilderDemo(), - '234#0' => const WidgetInspectorDemo(), - '236#0' => const WidgetsAppDemo(), - '170#0' => const CustomWillPopScope(), - '136#0' => const CustomYearPicker(), - '130#0' => const CustomAboutDialog(), - '193#0' => const AboutListTileDemo(), - '13#0' => const CustomActionChip(), - '127#0' => const CustomAlertDialog(), - '125#0' => const CustomAnimatedIcon(), - '356#0' => const AutocompleteDemo(), - '356#1' => const AutocompleteType(), - '31#0' => const CustomBackButton(), - '272#0' => const BackButtonIconDemo(), - '258#0' => const BadgeDemo(), - '258#1' => const BadgeLabelDemo(), - '258#2' => const BadgeAlignOffsetDemo(), - '5#0' => const CustomBanner(), - '142#0' => const CustomBottomSheet(), - '350#0' => const BoxScrollViewDemo(), - '202#0' => const BuilderDemo(), - '29#0' => const CustomButtonBar(), - '29#1' => const PaddingButtonBar(), - '3#0' => const CustomCard(), - '3#1' => const ShapeCard(), - '17#0' => const CustomCheckBoxListTile(), - '17#1' => const SelectCheckBoxListTile(), - '17#2' => const DenseCheckBoxListTile(), - '215#0' => const CheckedModeBannerDemo(), - '11#0' => const CustomChip(), - '11#1' => const ColorOfChip(), - '11#2' => const DeleteOfChip(), - '12#0' => const CustomChoiceChip(), - '9#0' => const CustomCircleAvatar(), - '32#0' => const CustomCloseButton(), - '274#0' => const CloseButtonIconDemo(), - '1#0' => const CustomContainer(), - '1#1' => const ContainerWithChild(), - '1#2' => const ContainerAlignment(), - '1#3' => const ContainerDecoration(), - '1#4' => const ContainerTransform(), - '1#5' => const ContainerConstraints(), - '131#0' => const CustomCupertinoActionSheet(), - '132#0' => const CustomCupertinoActionSheetAction(), - '129#0' => const CustomCupertinoAlertDialog(), - '352#0' => const CupertinoDialogActionDemo(), - '219#0' => const CupertinoFullscreenDialogTransitionDemo(), - '218#0' => const CupertinoNavigationBarBackButtonDemo(), - '216#0' => const CupertinoPageTransitionDemo(), - '217#0' => const CupertinoPopupSurfaceDemo(), - '169#0' => const TextCupertinoTheme(), - '169#1' => const CustomCupertinoTheme(), - '102#0' => const CustomDataTable(), - '102#1' => const SortDataTable(), - '134#0' => const CustomDayPicker(), - '126#0' => const CustomDialog(), - '34#0' => const CustomDivider(), - '34#1' => const HeightDivider(), - '221#0' => const DraggableScrollableActuatorDemo(), - '154#0' => const CustomDrawer(), - '276#0' => const DrawerButtonDemo(), - '273#0' => const DrawerButtonIconDemo(), - '155#0' => const CustomDrawerHeader(), - '361#0' => const EndDrawerButtonDemo(), - '275#0' => const EndDrawerButtonIconDemo(), - '8#0' => const CustomFadeInImage(), - '15#0' => const CustomFilterChip(), - '25#0' => const CustomFlatButton(), - '28#0' => const CustomFAB(), - '28#1' => const MiniFAB(), - '28#2' => const ShapeFAB(), - '4#0' => const CustomFlutterLogo(), - '4#1' => const FlutterLogoWithText(), - '146#0' => const CustomGestureDetector(), - '146#1' => const TapGestureDetector(), - '146#2' => const PanGestureDetector(), - '37#0' => const CustomGridPaper(), - '37#1' => const DivisionsGridPaper(), - '21#0' => const CustomGridTile(), - '20#0' => const CustomGridTileBar(), - '163#0' => const CustomGridView(), - '163#1' => const HorizontalGridView(), - '163#2' => const ExtentGridView(), - '163#3' => const BuilderGridView(), - '213#0' => const HtmlElementViewDemo(), - '6#0' => const CustomIcon(), - '6#1' => const MyIcon(), - '30#0' => const CustomIconButton(), - '7#0' => const CustomImageIcon(), - '14#0' => const PressInputChip(), - '14#1' => const SelectInputChip(), - '147#0' => const CustomListener(), - '16#0' => const CustomListTile(), - '16#1' => const SelectListTile(), - '16#2' => const DenseListTile(), - '162#0' => const CustomListView(), - '162#1' => const HorizontalListView(), - '162#2' => const BuilderListView(), - '162#3' => const SeparatedListView(), - '211#0' => const MaterialBannerDemo(), - '211#1' => const MaterialBannerDemoTwo(), - '23#0' => const CustomMaterialButton(), - '23#1' => const LongPressMaterialButton(), - '23#2' => const ShapeMaterialButton(), - '212#0' => const ModalBarrierDemo(), - '214#0' => const NavigationToolbarDemo(), - '220#0' => const NotificationListenerDemo(), - '220#1' => const NotificationListenerUpdate(), - '203#0' => const OrientationBuilderDemo(), - '27#0' => const CustomOutlineButton(), - '210#0' => const PageStorageDemo(), - '36#0' => const CustomPlaceholder(), - '36#1' => const FallbackPlaceholder(), - '159#0' => const CustomPositionedDirectional(), - '204#0' => const CustomPreferredSize(), - '204#1' => const AdapterPreferredSize(), - '19#0' => const CustomRadioListTile(), - '19#1' => const DenseRadioListTile(), - '26#0' => const CustomRaisedButton(), - '360#0' => const MagnifierCircleShape(), - '360#1' => const MagnifierStarShape(), - '207#0' => const SafeAreaDemo(), - '349#0' => const ScrollViewDemo(), - '128#0' => const CustomSimpleDialog(), - '133#0' => const CustomSimpleDialogOption(), - '164#0' => const CustomSingleChildScrollView(), - '164#1' => const DirectionSingleChildScrollView(), - '140#0' => const CustomSnackBar(), - '141#0' => const CustomSnackBarAction(), - '107#0' => const OneSpacer(), - '107#1' => const ManySpacer(), - '18#0' => const CustomSwitchListTile(), - '18#1' => const SelectSwitchListTile(), - '18#2' => const DenseSwitchListTile(), - '148#0' => const CustomTab(), - '58#0' => const CustomTabBar(), - '58#1' => const NoShadowTabBarDemo(), - '205#0' => const TabPageSelectorDemo(), - '206#0' => const TabPageSelectorIndicatorDemo(), - '2#0' => const TextDemo1(), - '2#1' => const TextDemo2(), - '2#2' => const DecorationText(), - '2#3' => const TextAlignText(), - '2#4' => const TextDirectionText(), - '2#5' => const SoftWrapText(), - '168#0' => const TextThemeDemo(), - '168#1' => const CustomTheme(), - '208#0' => const TitleDemo(), - '33#0' => const CustomToggleButtons(), - '33#1' => const ColorToggleButtons(), - '33#2' => const ProToggleButtons(), - '22#0' => const CustomUAGHP(), - '22#1' => const ProUAGHP(), - '35#0' => const CustomVerticalDivider(), - '35#1' => const WidthVerticalDivider(), - '10#0' => const CustomVisibility(), - '10#1' => const ReplacementVisibility(), - - _ => const SizedBox(), - }; -} \ No newline at end of file diff --git a/modules/widget_system/widgets/lib/utils/color_utils.dart b/modules/widget_system/widgets/lib/utils/color_utils.dart deleted file mode 100644 index e1a2b49ea..000000000 --- a/modules/widget_system/widgets/lib/utils/color_utils.dart +++ /dev/null @@ -1,75 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/material.dart'; - -class RandomProvider{ - RandomProvider._();//私有化构造 - static final _random= Random(); - static Random get random =>_random; -} - -class ColorUtils { - static Color randomColor({ - int limitA = 120, - int limitR = 0, - int limitG = 0, - int limitB = 0, - }) { - Random random = RandomProvider.random; - int a = limitA + random.nextInt(256 - limitA); //透明度值 - int r = limitR + random.nextInt(256 - limitR); //红值 - int g = limitG + random.nextInt(256 - limitG); //绿值 - int b = limitB + random.nextInt(256 - limitB); //蓝值 - return Color.fromARGB(a, r, g, b); //生成argb模式的颜色 - } - - - /// 使用方法: - /// var color1=ColorUtils.parse("#33428A43"); - /// var color2=ColorUtils.parse("33428A43"); - /// var color3=ColorUtils.parse("#428A43"); - ///var color4=ColorUtils.parse("428A43"); - /// - static Color parse(String code) { - Color result =Colors.red; - int value = 0 ; - if (code.contains("#")) { - try { - value = int.parse(code.substring(1), radix: 16); - } catch (e) { - print(e); - } - switch (code.length) { - case 7://6位 - result = Color(value + 0xFF000000); - break; - case 9://8位 - result = Color(value); - break; - default: - result =Colors.red; - } - }else { - try { - value = int.parse(code, radix: 16); - } catch (e) { - print(e); - } - switch (code.length) { - case 6: - result = Color(value + 0xFF000000); - break; - case 8: - result = Color(value); - break; - default: - result =Colors.red; - } - } - return result; - } - - static String colorString(Color color) => - "#${color.value.toRadixString(16).padLeft(8, '0').toUpperCase()}"; -} - diff --git a/modules/widget_system/widgets/lib/utils/dialog_about.dart b/modules/widget_system/widgets/lib/utils/dialog_about.dart deleted file mode 100644 index 81b3023eb..000000000 --- a/modules/widget_system/widgets/lib/utils/dialog_about.dart +++ /dev/null @@ -1,57 +0,0 @@ -import 'package:app/app.dart'; -import 'package:flutter/material.dart'; - -class DialogAbout extends StatelessWidget { - const DialogAbout({super.key}); - - static show(BuildContext context){ - showDialog(//内置方法,创建对话弹框 - context: context, - builder: (_) => const DialogAbout()); - } - @override - Widget build(BuildContext context) { - Widget title = Row( - //标题 - children: [ - Image.asset( - "assets/images/icon_head.webp", - width: 30, - height: 30, - ), - const SizedBox( - width: 10, - ), - const Expanded(child: Text("关于",style: TextStyle(fontSize: 18),)), - InkWell( - child: const Icon(Icons.close), - onTap: ()=>Navigator.of(context).pop(), - ) - ], - ); - Widget content = const Column( - //内容 - mainAxisSize: MainAxisSize.min, - children: [ - FlutterLogo(size: 50,), - SizedBox( - height: 20, - ), - Text( - "Flutter Unit ${StrUnit.version}", - ), - ]); - return AlertDialog(title: title, content: content, actions: const [ - Padding( - padding: EdgeInsets.only(right:15.0,bottom: 10,top: 10), - child: Column( - children: [ - Text( - "Power By GF·J·Toly\n张风捷特烈", - textAlign: TextAlign.center, - ), - ], - )) - ]); - } -} diff --git a/modules/widget_system/widgets/lib/utils/pather.dart b/modules/widget_system/widgets/lib/utils/pather.dart deleted file mode 100644 index 6953fdf34..000000000 --- a/modules/widget_system/widgets/lib/utils/pather.dart +++ /dev/null @@ -1,25 +0,0 @@ -import 'dart:math'; - -import 'package:flutter/cupertino.dart'; - -class Pather { - Pather._(); - - static Pather create = Pather._(); - - final Path _path = Path(); - - Path nStarPath(int num, double R, double r, {dx = 0, dy = 0}) { - _path.reset();//重置路径 - double perRad = 2 * pi / num;//每份的角度 - double radA = perRad / 2 / 2;//a角 - double radB = 2 * pi / (num - 1) / 2 - radA / 2 + radA;//起始b角 - _path.moveTo(cos(radA) * R + dx, -sin(radA) * R + dy);//移动到起点 - for (int i = 0; i < num; i++) {//循环生成点,路径连至 - _path.lineTo(cos(radA + perRad * i) * R + dx, -sin(radA + perRad * i) * R + dy); - _path.lineTo(cos(radB + perRad * i) * r + dx, -sin(radB + perRad * i) * r + dy); - } - _path.close(); - return _path; - } -} diff --git a/modules/widget_system/widgets/lib/widgets.dart b/modules/widget_system/widgets/lib/widgets.dart deleted file mode 100644 index 6454bac6c..000000000 --- a/modules/widget_system/widgets/lib/widgets.dart +++ /dev/null @@ -1,3 +0,0 @@ -library widgets; - -export 'node_display_map.dart'; diff --git a/modules/widget_system/widgets/test/widgets_test.dart b/modules/widget_system/widgets/test/widgets_test.dart deleted file mode 100644 index f286e7dcc..000000000 --- a/modules/widget_system/widgets/test/widgets_test.dart +++ /dev/null @@ -1,12 +0,0 @@ -// import 'package:flutter_test/flutter_test.dart'; -// -// import 'package:widgets/widgets.dart'; -// -// void main() { -// test('adds one to input values', () { -// final calculator = Calculator(); -// expect(calculator.addOne(2), 3); -// expect(calculator.addOne(-7), -6); -// expect(calculator.addOne(0), 1); -// }); -// } diff --git a/pubspec.lock b/pubspec.lock index fdaa62000..e16819a50 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1188,9 +1188,10 @@ packages: tolyui_refresh: dependency: "direct main" description: - path: "D:\\Projects\\Flutter\\Fx\\toly_ui\\modules\\tolyui_refresh" - relative: false - source: path + name: tolyui_refresh + sha256: "7249643bbe67e12af38841737c1968e27a21436070acd254097c8b279bc643a9" + url: "https://pub.flutter-io.cn" + source: hosted version: "0.0.1+1" tolyui_rx_layout: dependency: transitive @@ -1200,6 +1201,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" + tolyui_text: + dependency: transitive + description: + name: tolyui_text + sha256: "881c40567724ed059377d3a9c58bf4e840017ad3e7b5f5476df2bc7a147cb7d5" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.0.1+4" two_dimensional_scrollables: dependency: transitive description: @@ -1216,6 +1225,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.4.0" + unit_widgets_display: + dependency: transitive + description: + name: unit_widgets_display + sha256: bd1cfdef49c8a9cb56c9d60eb9007b35fd07228ecfd9cbc51397b00dc9efcad6 + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.0.1+2" url_launcher: dependency: "direct main" description: @@ -1375,6 +1392,13 @@ packages: relative: true source: path version: "0.0.1" + widget_ui: + dependency: transitive + description: + path: "modules/widget_system/widget_ui" + relative: true + source: path + version: "0.0.1" win32: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index c10551964..cec27c193 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: flutter_unit description: All Platform Flutter Experience App. publish_to: none -version: 3.1.0+2002 +version: 3.2.3+2006 author: 张风捷特烈 <1981462002@qq.com> homepage: https://juejin.cn/user/149189281194766/posts @@ -27,7 +27,6 @@ workspace: - modules/tools_system/treasure_tools - modules/widget_system/widget_module - - modules/widget_system/widgets - modules/knowledge_system/note dependencies: @@ -66,6 +65,7 @@ dependencies: # 视图展示 tolyui: 0.0.4+10 # tolyui tolyui_refresh: 0.0.1+1 # 下拉刷新 + dash_painter: ^1.0.2 # 虚线 flutter_star: ^1.0.2 # 星星组件 flutter_spinkit: ^5.2.0 # loading @@ -98,6 +98,7 @@ flutter: - assets/images/head_icon/ - assets/images/widgets/ - assets/flutter.db + - assets/article.db - assets/version.json fonts: # 配置字体,可配置多个,支持ttf和otf,ttc等字体资源 From 04329f9d66e5c528fe79a4ca60e9d59f77785857 Mon Sep 17 00:00:00 2001 From: unknown <1981462002@qq.com> Date: Sun, 14 Sep 2025 09:22:26 +0800 Subject: [PATCH 7/7] merge Flutter3.35.1 --- .../app/lib/app/theme/app_theme.dart | 12 +++++- .../lib/views/mobile/user/page_item.dart | 42 +++++++++++-------- 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/modules/basic_system/app/lib/app/theme/app_theme.dart b/modules/basic_system/app/lib/app/theme/app_theme.dart index 26ef5d10c..125bd7147 100644 --- a/modules/basic_system/app/lib/app/theme/app_theme.dart +++ b/modules/basic_system/app/lib/app/theme/app_theme.dart @@ -51,7 +51,7 @@ ThemeData darkTheme(AppConfig state) { dividerTheme: DividerThemeData( color: const Color(0xff2F2F2F), space: px1, - thickness: px1, + thickness: divHeight, ), bottomNavigationBarTheme: const BottomNavigationBarThemeData( backgroundColor: Color(0xff181818), @@ -59,6 +59,13 @@ ThemeData darkTheme(AppConfig state) { ); } +double get divHeight { + if (kAppEnv.isAndroid) { + return 0.2; + } + return px1; +} + ThemeData lightTheme(AppConfig state) { SystemUiOverlayStyle overlayStyle = const SystemUiOverlayStyle( statusBarColor: Colors.transparent, @@ -70,6 +77,7 @@ ThemeData lightTheme(AppConfig state) { if (kAppEnv.isWindows) { fontFamily = '宋体'; } + return ThemeData( fontFamily: fontFamily, primaryColor: state.themeColor.color, @@ -88,7 +96,7 @@ ThemeData lightTheme(AppConfig state) { dividerTheme: DividerThemeData( color: const Color(0xffDEE0E2), space: px1, - thickness: px1, + thickness: divHeight, ), pageTransitionsTheme: const PageTransitionsTheme(builders: { TargetPlatform.android: SlidePageTransitionsBuilder(), diff --git a/modules/basic_system/authentication/lib/views/mobile/user/page_item.dart b/modules/basic_system/authentication/lib/views/mobile/user/page_item.dart index 5e6131ebf..c01c44496 100644 --- a/modules/basic_system/authentication/lib/views/mobile/user/page_item.dart +++ b/modules/basic_system/authentication/lib/views/mobile/user/page_item.dart @@ -18,25 +18,31 @@ class MePageItem extends StatelessWidget { return _buildChild(context); } + Widget get divider { + return const Divider(); + } + Widget _buildChild(BuildContext context) { return ScrollConfiguration( behavior: NoScrollBehavior(), child: ListView( padding: EdgeInsets.zero, children: [ - const SizedBox( - height: 10, - ), + const SizedBox(height: 10), Gap.sfl10, - _buildItem(context, TolyIcon.icon_them, context.l10n.appSettings, AppRoute.settings.url), - const Divider(), - _buildItem( - context, TolyIcon.icon_layout, context.l10n.dataManagement, AppRoute.dataManage.url), - const Divider(), + _buildItem(context, TolyIcon.icon_them, context.l10n.appSettings, + AppRoute.settings.url), + divider, + _buildItem(context, TolyIcon.icon_layout, context.l10n.dataManagement, + AppRoute.dataManage.url), + divider, _buildItem( - context, TolyIcon.icon_collect, context.l10n.userCollection, AppRoute.collection.url,), + context, + TolyIcon.icon_collect, + context.l10n.userCollection, + AppRoute.collection.url, + ), Gap.sfl10, - Stack( children: [ _buildItem( @@ -48,13 +54,15 @@ class MePageItem extends StatelessWidget { const Positioned(left: 40, top: 10, child: UpdateRedPoint()) ], ), - const Divider(), - _buildItem(context, Icons.info, context.l10n.aboutApplications, AppRoute.aboutApp.url), - + divider, + _buildItem(context, Icons.info, context.l10n.aboutApplications, + AppRoute.aboutApp.url), Gap.sfl10, - _buildItem(context, TolyIcon.icon_kafei, context.l10n.contactThisKing, AppRoute.aboutMe.url), - const Divider(), - _buildItem(context, Icons.sanitizer, context.l10n.homeAccountSupport, AppRoute.supportMe.url), + _buildItem(context, TolyIcon.icon_kafei, context.l10n.contactThisKing, + AppRoute.aboutMe.url), + divider, + _buildItem(context, Icons.sanitizer, context.l10n.homeAccountSupport, + AppRoute.supportMe.url), ], ), ); @@ -68,7 +76,7 @@ class MePageItem extends StatelessWidget { icon, color: Theme.of(context).primaryColor, ), - title: Text(title, style: const TextStyle(fontSize: 16)), + title: Text(title, style: const TextStyle(fontSize: 16)), trailing: Icon(Icons.chevron_right, color: Theme.of(context).primaryColor), onTap: () {

    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�e9S7p^>=F!R{|U9x(g@vqiD2HGXttvQ6JvM zR|9+2Q@*cthH9Z~MErP%O{c>U0YV_Tv^mB&y5D&W7nKLVz+|D!FT z%3PP+AkHcuKZt=D`1l~ZApL`B_rkIF`%it)zx5pm9EGv#J*NlumvF!2R}v$oqs2+{ z3NoddVY_e)bjce+bzV5VHu9Q^=~DhQBn1@ez`k`T3)K&7ISgi<{+*l%7dP%kq2-S^ zX~L(AXJ5W>>J)^3@$3%VcJV-@eg3fZuUmuUjTcV76s#2<#EZLg13TB3Uq4gMZ$blE z{myj?f<JK6{);P<9c z!IOpe|8e8KJ7)4H*Sv%OT=}^ofh!WIRRY~lQY}03u~ExjzAa&OEu?!}j;r0ArFz$x z)dEj*dn(cFl&#;4s)am1NQa7R@JJaSO_D@DUXzk_nQ8NkNkDUWA%_}Nw0SgVK)r5v zn|g4YOV^uxUv_7+*=d6Ld7jl&KK@7C;PeGkA+q4qR$DM#j;-oW|CBN{xlbx8lI&r% zRi%l>qWubFqA``ZPbw;FSe0n4tu8(}x1j<42zM^o-hI2GckUCvLSvw*94phtU=}4? z@a$XslEXtfO!g#m(967a6GG2;hrKgbG#hAJ-`>&edgT#kF-P+Q-vhp(=C-zU(9jXE zjrazUjv(1^h$7|kZjLEP)iT!67 z`{Jz6kZd*{Ffvm5MoLU?&DGzpX(t*k)ogsxqe(Q2%Sr$NBq>ba%k{sxGk~bUhbMr| z%`hP<$TJmbR|Q6cN5IBuXq$HK0qBIV&yP=f)X<0v1d#7ufa1)rW>*HvRP*>s{hN@i z^@Z~O*PzDxIcUMZ8Ph6B|HwLbOWs)5IEz5USN;2T={1wj;O4O5MENbGpk0fe^dC5@ zgrj;J!u^QcQ~A^7lSeL`I>yTsZgSg-7tb6A@NfXP!Z+UHttH=8UV9j6Tv2%1hg2z* zD6T^ys&Lyky@y2fRV3!AJaNr~ORs->?&6`tD7gH35mGm;0~u)rPpQw8`uZ6(s@!v; z{1Kb1c8*BiJab6YZm6!@2g4iO7c%W@_hj)={EbmoHviG$ns<@UPg$`UtBsup9`>4* z6}aPT+8{1dRjGR9`B~%KLCNcynE|?|&ErjN+Re{>>sxnx>mK~ro0mMufbTgTo9`bR z!GlAK2>Bb3X)kiuwl_rUZoo^S;`I9kEUO-`E+$bF?VEu!&K5z)BD2@Vd=;M70531E zcqrI4Ezy|)0tt=90HD|YTW-TSsM-H+38XmIccZ1ve-567#+dYirr*4f$MpM#OFKGY zP`RO^wJ|2|z#Ti}28wS`w1KsZi;e=)qc3Sov^OpWI;8E{#Ug_6o!)q+ZjEV1Rhe2z z-WF|G_-|jo@Vx2N>pTx;Wt0DJLft}QYP!FTFha>T;oiO3t%V;nWv_Rw#Hw)wod&U6z z0I)`-#Px3-m1F{d;GnF>P$_^y93lOJq#;mOVYwqEfO{;as92tbb46(~IUA7^Ze)=g z-UTHDe5AM(b8Pn7lmygqjzxpWqtgh%ew-eHf)Bu8M>TO!1_mC`T#fM{ygv0D>AXWJ zSjs2{&kxN;}-$yR#vh!rBMT$N&WE zs9$TgGB5+Bynx>;Hp&9jbcI}i7$_GAZ$hV{IgH{1@)3KvXmkY478*)4IGUpu5(iKhrc1kp0*w@(6VbN0 z)`6^2EF&ARfngst0r8_4*!$Q{fRSymeKU4aroNF5*S;RPlPXXi4UuEkG^O@|z1v3o z5tu%b#LPNXcEFz%mtd6V1`o9-Gz2!0(^>7o7udr_5{^PPlj((^si%bK3 zf)Fr>T8C#;!;A*{=OtqAc%QzUQC7_QWsmYB8sLbNdss1<@l|@j9~Tp{4{Q2hs|W>Y z52EAxYtVyK4N97@N6g4bfa2(n&iE29TMI%Td-rkistSY#j$Q{+7085D*fAZ|j;tyW zqc}$pkr`1X1pI38=N!?lU%Gu63R{S)p>jm$S=I=IumXuXnk5=c51OzjNG)Mh>k>#& zA@oa-7BEs!t&35;6f$T$BSy6Z=XiEI4TO(~AnfPP8DcIyEpVZcpuk8!D2Oy8QbV)Y z4w2>mn>^;ZG1otH-Q>xqCM}ro-(RzQ{2yL*Zd^m%2l)7N`^n8Jwqt56?9?Osug3iP z*&sN2K{?^P9*L2m!4d&R-urFyIS5rl{#(UoAhM*P*QCgBtBugqAE=pPlcZ|6uhx=d zAV!k7k;mmtXQ-*A$LD+u$}wbH2!4TqsaD)bR)x4aLbMvc-P8bb!Ox|ND==C2W7C%WWkuMk(yxiV$ZN=px?{xH(GuMvVr+3Zd?$v~D!_4(AcX>h&mvQ+g-RDEkF4wEv z!s62+@|!9|J{rFDIo>x%y`kWa%exUb6`h`=6LRQ+RYM`ZN{2UvFx|O5Y9>s_o8(Jh z633S=RDQW7#gy#NPdafTW`1e!DG=>2dtGJDK#QY^64l|B26oHUdh4hE9md*jB{rSat#`6pXn0246iF1|e_Q7!`KR#dJhVAU##o@O9!Mjs+l4M9HOlz4e< z|CTe3eUad@%`aVC(^dYsi==#Oa{cSyMHo%Onv)c~$Hz8(gkYryP3F>Mqt4Qc*)3q) zQ=btY8aQxfptK)oJp`AbEWO8HTL5Kn-B-GvpOPSZ6v-ma?S#Mkvr|5S_yO7fa0TbR znSTF+>O!w6KOT?=!V|^jke3~0prn&%-XTF2948Mu%nfj(cb(6J5o)_oN*J1|Aj|t1 z-)I)(zd)OSN>Kib)5Io((s>()zffEq5Yq%nt4RJHrp^+M3p{)Z*`<**m+Wtij$xl9 zTAD(TL>wZ9qo`&rAOv9KGMpI7^Z`JDQefmJ7C@a`H#47{k}%vT^O0z`S@USaf}Ox& z1AZywb?+@9#k}z#DEBXzQb^b%8L`3smRaHsCgr39JxdGn&6@HO1pF}DcJGPijug1% zmm=FQ-vtG|*MMknriM+Yk#pDaDk6a``Gw#mpx+@th?NFqOC}BKJd{o-?bDKDNsIRz z5fqYe?SWqw-j5Vn^Nin0GkDu{+&2}#)?9aM=hvqsn4CKQh8H5Us+GjbB+s__-Xd)A zpBy+obWjp_E0dPb1n+(NdM93DuI(Wti33YL|8snM;0Y%TB-7hC)cG-~+420)?lqCj z-GTWLbgGm69US+coCJ%#;h|S%`{LG5cWfmGyjCgvS-aQ3`5nv7rB~(e79NDS=5=EC zkv!CANgT>-)S*<@7k9nTzZD$kRcYKqv{)eX1m|Zp!gpr7Hnr#u1~RQnT^o@R))0Z7 zLC)7MP=E@j=m$v6;dr*3|RZmsNbl**yb?!7F+;NIz;k<0jwst3oyp zy3=g`zIO)RJ^=<&YR#|&ot*x^3_;h6H z>5cVk1u$!4>3wNRBEkZO-6;8BGGmxCT1jFK{_<2ZgZ$W1pHR75p^%ZCR9^l!U=mx3 zPlY8DK$cYR9&|-ECFBA}o^84e+gnp;Bk9obdLlCuw=i&Vs*HN~Kt|*mQ;IXCKLwdQ zw>GSEGm6*TbcOo+ zj^7YrS=SCjeCCixgOzbTH?;tYbC7RNm(H&MhCottFGPEXr!1SHH=X6y!HDb0v&nW6 zi!!-m0wr}|UE$(}g@BXx*|sG~F!g~GwK>_b8eVk#4bI(EvZtwe0-`P_B=ioofPNZ2y)c1E=;fm(%NqOt8l*8-l?tP>F+K zEqX>E#QxH@L*=f6P;8;VR*$IBix#8Md-4D=DU~%tFLv!N_iTdReF*_0C$^OL=lS8j z%@<$Hfo6bu^srGR7Ja3vbM9XikYjsnOV>nn=v)aJ^D$_OJ?CG78w*%b(wc$ol-aML zw^9=%$Ev-6eTIFe z!W&F^eabt(QB-v$d1H>HQ&7D_3br;;WptKZXOmb7`fsW_CLf|#%pp#7`2}*up~B-P z?NVz2$*adcl&Aa+S-9bmUTMg}u?vz-T3lOm(`n`<#o>%Y)v#lVJ{yoUz6=WcfogF; z!kwLf>YPq0qcq`|pi7RxF-6BEku>SEvE?SP$Kwr~BbuzsLM08AIgys{S`3jiT6|b_ zcBRg)*A!1bE8L47e<$}mdJG>Ad`8~jn@~qz_6CpkFk8}#$Ncs)(NUmps-J#x@DxA) zSw?r?}GBHJy;RFU+qDFxN)pgRT(9z(yTjX-7-pg zKN~t{kGGK`Zf(46@cC)aBl}&ly&kbizp&BXVq28}w(mhNf}WBM?9Y%nNp#j;f}j-)Mx;9Vf&Z@_qJ zxew}>A=bD?WaWVl-VVlnO~eYUUG$@RXqV6^{cyjP2=!&wL19Hqf|+nyLkGgbt*$Fl zwc`}%$mqI)0Y~!E!#5$Z&EP5eUSllm2@=aRvQ zdk<+6mV)PSj%$CQrwF){T_>s3HHFzci9~Ba5EK8+9=!cH|Vmcfj zvb9XZ)-uP#Keqp&y1nUh&(Wjr3CsE`8wRQzi@?rk3^&FMW}L+ zm?LvlYYH5p+|e8xscwmZFHk3km!VM|)27bkkNcK?m|-#l14;~Rn<|Itzu@=gXKH93 zhnh0#2=o}*l$Jz$QwscrI#SWtTU^<}xaH4QcWW24vKp7`Nf3f7zjoJ=j{3YRe(3Y< z{;nYdJ_lw3zuT?^vn$i#6+dU8MHaW1e)3ELZr4?255Em17%n%in!s zcW`$Ge*yT1Tr0!cjqOd4gNSFC&!3mBABKepk19!n%;CV!WxfzPL8s2R*%ZU?W5vr2 z2_z2AVHqluUzrMxNCO)ozx0q4s-vT=g`9~MUl|5~if;njm*<5PEVp%;`2Xw1{A$eg zA78iU+SbW0O}c5~ZP)zm`2TSAnyWUA`})|wz*qm2esT+nzXbZ^&Q482`CtFw=VNrA z`gMop5(nZg8H$jx7M-3R_%lNxt<{24+#ziWC~h4re#kdz8B)ZRbqwE|1jTko`zkz1 z7>XsYGB0l5HF%)&(=8jAqv*9Bk7#O|0x=^KXo0v#l zl*@|0KsV=h)k!zqoI$AyTY^DboSkQpc%&lAG~S&$Vw`Zy{GrkOz3jjtq{7~>tqlT$ zYMevv#r}g^M>B=`a_>tDO5~zE)tBEYnZ5DL+nSeh_^HI_bMHt-&F;u6fhi@j&bAc) z6=c0Ax5`Z^M)J-xz7s^BA+Mw=7J=P#K{NJt=RWagR=nqyzF?#cfNH5liMJSO1xb=9 z6{J_d*G6Op9GP^Dl4_w9K~#WRAloheYKKn{@HY6F;UvXhp70Z(olNeu0-LL>@r${m;DYyXrgyG?g>sI zejUONRKtKqCl{{#?!==^&Fm6~CyTTg1SzkU35EhO!%$EFXfT>ROJBzOy?d7+6{R8& zr1sd^6{t>}N78V4JTS8~rG0zxIqp*VaiLvGXB6E_Xtd6#Re=dLzuGP(+ff)PfWbBs zX%+M0Duy8GZ%hQNn5iMjP}8W9U<8;MnN=3EFVzO$eQGsKGjMTZzk*#liJaZos(@*h zuQl@_m1694;k_xiarGW-Rn$Rlaq(I7`nJyJLt9lKK3kd`JE>}>s;M@qEF9m?D)%=* z9081d?ej`T3EP(iY>aYd$?KTboLPw$1!;^lx3o%40vw%KnzQz2#g!286S;@n#F{7D z6s&8Hra>qy8ENJG18gubw;sV>5IFbTDFb_MD-avas~ix6$P2-FnE8cmyX{$8Bpu*_ zIb&pRLiXE)e_)Y5R43pnKJIT!OWOfyBtQf@@t-%Rb7ds%iE3ICGB^{h1Oz!JX zks#iL@Di^T*sBx~KLGA85uiz0x1e+-9)$(teCs{Z)XZ=N%mr*w4wYgMG;9lDG3|kX z0Fo+14xl7U=Nc9WZu-!!1U-Y@;)y47p(gz)kR(yszmR@_b}gXB$>gV5OzU(q z_1B~@_3i}Rs2N!pF`s~HsJ`Q1*0wTfGs7_g&j#j|gk#YEKdElVm@j?#y5raWSCjtp z#E&NY@|yqd>LcU+H9oxZ^V^d^=S`)FnCIW=zE0-(|GY+N;R2_vbr529t34a{a>R1o z4K<-TvD%(Vsu--q^(N7p0P%Ehi8mXaIJN{egBuG#)B`A`K9X7?hZheC_!-RmQP*H) z3Gy;vi5*BT-$=D6TtH)62CiE3S~MmqL|TGZao9GeT)$-I$HhnCA%q{LwdOVhi^uEk zOoS?`&cLAF5VQEzK`P}uDA;-wg3p>0PjkWYlHxaCu%}RQpH4Pp2s^^H5HHa16_gKUW;(xWmya92xf~+A^YI;RF)*Cq@>t z1bE$aGKuWE&x&3o-YPnfJ%mh}p>OC&HqMZ5IpjLf7VPA5X%fEOWcy4g5s2YSC71B%mX6vN zN8TVFYs0D3n8Y;DH*1^)<~69B&}}2K9cB)UCcv>GzES5vKmlq^Ct6yXU8jfN3g)&h zPqwefv@Yjd2yX(5paw1PJpv_)8O4(@DPehY)5xSHij=wyK)eJT&&@1dlE{e8KkdA5@<@5p`=EM!L zOrWs84!m~~k(T{$ZAJ<$6ApLw^^2tq8V6!y;npGE&c?#!W|Xc*J7;zNnbYQ^w$C09 z8odnQc3k1{Rv%5zBlO!Hdegdv9qR zCSTiHy;IRzHX3$k85?X;0TUXCj6MUub9Bn0v^UUt+XqHsvi%5&6glXaL%N6?HL`%L zfI`Qg$91CBb|aBCGu9Kxc}$NuI%$laY<4xwc(l5R76>$-$alnx;!h1ol@#ijOT(>$ z@cTOaXVIx1iQ+t_?Fg(38Om&HX)K0v5n$T(dK~Z@&>{zzd4=EL0i3XLZi961K^*tk zxowOkb>G&Gc2R+`gG)(j)ea8lBK31wjk8kT#+GsKL!UJ(vZwY1i{SD7g>@hsu zKC3lOd8;5FW8yV`!x9(db*g3Zp+T_Hid+-8_FFdUTIX8e^)@KjOwu#_4(lq5H^M38 zKUEq7$v%+FxVa<)4jg}Q9}R_&26oM0s3`&X@~(pV2X}99A*V%h8w2IvJ!C>Qwi`^m>WgYSJzxlwS@JkSEN5!4 z*~sx$V!A<;BJ4`W60`*OqEt%@j5(6*TZk?at+1d%Wvch)r#&%6iGl>X5Uq!+pG`q0 z#q<17jV*}5Vvth@uT)Tuu#)fUs!E8NgUv%vdwl6wFmHe5F=; zOPiC=rIsX->Me;F%Iwby{}S;dH^OdL_lV}B)HYy}1N7mt5F_2e>)>_$A}J zz-=I3A%=<1^6-MP0zCpJqa_2-Z_b@ya26`o)Ch<99B2^`k97baLARiuATL6tV1@x| zD@K)JBo=C8p*YWaaEzTgzn&Zhrdl#1P%}X+6`nk7vkIu%f*>kHTm@f4BTTD7p0E=o zAHlJG#=}!gNdQ$x^&rRqEjxWa@5>>k5(bb_JJM>7qKISAm#VNbij0gTa(qf#A@-)xuc8>qp~EyY8bYzcnSs(M(}J$It9Lj_LFDfSRkGYEu#F~xa0gs z`6$|{tHGc&(|Blhr!ZnK8Fq%ng`Z)9-Ptt`6KtM;B;xe3bL+?CSZJopg2ATrzlp^K z)C;W$_2yX$Ly1A$>sR`T9)z$Lt%iXLI8t-nmIEEppshH(@jvmY!L)-#4I>tQp{aZC zOqjvi0WHTT43S1_f+_&f1ueh}vrTdq2Vap7XCRVILf3eT8p9SJhMLgPQ1A7wlba$= zR9_1~Q%rIOGB06QZCTMQj+%r$e?yXQ!Uko8(h98sk=;f(jnF>SZJyK^w_Kv|q=@($ zh}cE7MNXnqgFV}aidmjkB}Auz8Y27QU}+bl;3PWD2E)mrQ{4Hbkh>?g;LA=Yh1usuC{ zKP|lL4ZbS85Fmx9#@`SS7SGvFw;mo^{~@dVbUVW60)!Rb(5{#9_4dKsb~F-oy%CYc z?(9(UWp}V6VF9=+w!S#@;^APRUH+=VPa)(dyKaJz`|_{$<=++T%p3A=cPvau&j{?_ z0TTXo{<}am#gy}k9v^*%mf@|wT(&R!fyGV%iL(I(YWnWJ?2CQ5?!N57zWla6K$7zN z6wcF^mB(`HalDkf*AhOJJxgTO?)3v7ts~8Z1xQuAxc}1DqkKKwX30tLeqR=O1ROjo z1hn$cB7@b+yr)`%*LblZVL%Cz+LzTB%g^AydM zDLjF3xV7uH@P1-96TwTYUY(!~uMOZ9!IxmoV;|v$g0+JaKfyQ&h5i8fvNDyluv(TxrPvFaja?nDncc-?B0%e;0lE`mb7|n_(v2=q=MEu=@Tk9|Xh#?i zfK7yYeqgnrks1bOcNaMBu)PxBM0kzLPBt04%P76Y&k8?*;J@AZODlN6ykH}PtxLc( z_xA1u9)}gO6OKayB7kplDgGhx1z9NU3k)mf-zzg{V((sDK6E3;M|Lmo05FFrF5Smr zl=Bix;Q(0%+z+;L#QPJCvkWc`et?~v$R3Nq;V?qZZLLiiFl}(lbx%tRVX~JL0Nlc* zcJrz1;PaspHcy3F7`wY};=<9vQY;3ic`602Kp;uZ#xMPq0FX~uAgvIzh#15g7!sPm zrACAO`OCuNkne)7*;c+#sxbjkX4Lx=JTR%j%CHG~L}^gk+U+eAGd=pU2a(_y?QgHU9y;Wwin!|Gu#45}k!2{IDJ=Kv3d5!2K(Vjc}hdn$6 zfniS1`Scpgr7}wKVP~`)peW0q@vcCB0MOFNM5iOhN=pYow+91|nO=AdBQU%3s~7>h zpZMT~M^>%C`fLUkBa>#d6iGeWR;DmM0rdoX4E{_@7$ZF$)LWn{2!bPn@G^cztOal0 z;JrXOyd}Y_MlTHh;(mg8OgxDB5R;!#Xb6*Wh0?X6qQaOdNr%~7lDG;jK%5vNG>;I-v-MJ4Q<9`2YT1{Pc$Ji<6IQU0tUON5qu|raooKM@66ztN%GriF-zc|P z%xY$)X~O0J835WLw`GbSP75bJy`S>_KfdnBnCp&AZk^~|Gxn;#!XH&y~b8;AaHjf%94g#1RXv84vqqWK4ze4MC0A>UE zoYolU!|D89>3Xb$?{welRss$G4kpv)tOUWy4!bdNGDN1>8R%PL{sD4E z%>A8zTDlH1==(2ddJbYK?1m<^J;!2?#CQ{&7D6)^bLx~QmQr%J$nqxKRRpOIz=9Sl1=EqW?!Bia2j>@-^U@UvqG zhL)4N@ML&K2xZafEwBNJ1!?`RPYdf<-?k6^okPY$Y(nJx1X<_M8^?m&oW_%aDe+0q zPH~>(*TF9WGt(9lijvxM@Ibeis}R=q@@8XT8r)2qjW94(m~A?LRJs2HRQzmM30Uc;=7e3T-YMeHaLN2{ve6s$L5Ib># zmZ%_xVx*}9;DsJs@dll+D2AUveK|y(9qh|}0Ap3fH0sN~N()yGRw^Z1MUdJ$SeBaXqifsx1o}nFWO%78^3PhcI#YQG^a9J=w zuc3z}`vD)z9!JEXwULPhjjsodPn~y{Cd+B{{m^Lz^NQL8QdLhY-AHh+0K3hw#wS@; zwa+Czy;9~%ZtX{-nn`+enJ6$^I@Np?I08qQQarX?NLs*JrHvSAVlBYk4;LL=v9Q^j zTO+JhqGLf&K&Wdu!_O%L@I(}w9$8JPwu-6sV5SWQx^%LMY$r4;k$o0;Ke+70Jh&1> zviJh6pzV+LFtzuka2UGzhL{|8WSK@ID4mc$T<366Z-d>!zLxSjG9AirOOqpPh~ShF zTUzHmrAe4a3xiruAhZofoV798nGoHS?uOYb(aeYvJj^L&Y;YB}R{pZTrnWDD$4tXw9Ln(5303dO9AFogsk zidePQ2I@ShJ$%4D)&{&jS#p!B;Y@<~Gh|b3V6E&oZJc1F5tF0QT3n|Bvxf#WtMcGi zX>_KU=1I)AG!!pbfT-!9aECR8gB-R_`pAiB!P79Nf~iMB*?9l|<1v3R=K7nj{a>zK zKKbt_w@ezG_#Y-dGvQYg@)O37|2N|wzWT4Pe&DLV8@G1cbz@hLy{ayUhs{s!uF{Q| zg|~LjlilpoF$z%+>}G@uVCDr7QUL@?Xu*oGVg#IC0Xp5*CZMqK=Asp_uqVLTMw>TR zHW-|^&%nr?sg_ALGPe_8qlg!p*&Peh2ng8KPjJGiP-O0tZbVmO;Uhuny@;yY~v_fwrZ_5sw2 zQFts`6dsp3kS={4EqEZS#)MyC7=tYcq0$1ihdz(i+*px$*0svkn*CDg22}e*_S@3& z|25Kan6=Vr%E>{_0(Dn@sSS{4bq9i&)H;vxt0Dco2x4XFYiQBE*(o}o|0*m9xOkK& zDbNu2S@rte*z1PCv2$IrvdGOZd8m1w32Ks+6u+NWT~XY?LXL)-R@8j1FDtM#e8k2b z!Bhs=isCXHho*mYLDf=T#ejrLtXNQ%Vw_TsZID?^GJ?M-eHC(C6j@Bl&uv$On~8yO ztoTmHQyx{%fPJFsQj!49bm^a?{)Jf$+ObPX>kloMK;5CwE9#|lk55n^!6JSn!YiU- zqZ3PCLA8%&XN8uMR$IAN0(Dn@=_ay^i)9NC*aC94%xZ!wq#g4rmM316#&neaoKrcn zh_o$kxdfWvKC52y2unz+&D~l0Gt_%)=WJcP*u_GIAh&DAA4Yoii^r^bMyb$YBvW0; zjp-$YTR_huKsIpH8j(dB9-8Q}OJ{`gLPHQLt#a8^j9;WNX4#1FR+s)1vU|Xc8P6c@ zGgBq>Gjja!Xuv_T3Ukpe3Admyf}=}aETOHb(w~gSuB(7{E*VpIXkB=LdP84Gom>^T z0oZddex)$o@h?mN3>|$a`&GA4Ol6e|Ay{MOw^FSv0-+c6Q$`H8JlKM!(iF7d`&lKE z`4nf2X@Oe@!HV67QXdhuvDLANx%PO%qZ%@NZRwA>B9JP9m}nj{vt**cz0Vi`d5Y%$9zG+RS+A9Zpw(T>$xf*b7N1!E_7m`cTIJE{j*9tS zI0h*GAs#P01=TUb6B8y$T-Sd&K)ei<~O-Jbu(3k~T zjke&-cT=`n8-mk6rfR|CDhgNXjxGbKHus~_@1x%P1G?34v2vAb0u}rI=n(?O{bj-C z#$lM}BZ?5A^6-yK^cE!;?MC&bGKxYY!xAbpxOi$1t64-M&HR0(--9&2v-Sa*QbBtt zP{fh2tv2BW#%x3--&8zvIlF0K_ep1MtliMyA#o%kPCA5a z310fL?3)JN{rXxx2x6|ZfzZ-RTV6vF3_KY&6)?5j$#*ZF-3*iE#j`suoOu1h$#({d zS%9(o-+Fgo=Xz%lAaYyL;rXue+QWDN#sNg%U0ipd|BX`l_>oI*ya^j+|A(diHM`4Q zdjROu=WPHU@Bi11`MWXK|6kYbxb_>9{@aP`C)_yxZ?5|5asS8I|GVy2_~IYePwvkP z$U-}IUOqjguKq3tQd84x1v68VrsXk~!TC#ZMOK7RLIbX&&tZM09#}McHgGb{Fp#x3 zB_Bz3V5i4zzJ;bgl-vNH9rR&*l6-Cjeg%YBW3?j>z`WK>v=pDjC5?DvP&pwuh`D%D zOOQ=y5ltChOR5nx7BDe(^p?DpiH6>NgacR9P7q-Nar{(S+w4m)8Nt5e0dbdLN+fi8 zDS(E6f2{yJGqWTah|>7N(~!@%^NS!KW8?a9Vr2>(*|1@FkQk9ekeB@gG09$XDW%0I z4kHnQf&wBT9NEEGa=O3Oaa+m$9^{tJg$+% zOkWb|WGv!`X-ZJ-i%~q5CxgzfG7fO7r*#n8)8Oq zvZ6&q2DW?LAClhF$wqvkK%IK;aR#iIE;J|c5T0QkCLp0Am7x{O(NdDEEMh>*(hd+j z9O-=vP^RXzEyAIi6!DXNpnwFdNSL{5$`WJ)y7(ESuX4?;|3m zf8*Qq%Ge~ECRyt%8(hv+o+*-cm35!m#0~JHEf>$^2eOCz51q7|Sm)S66S_40g(s&h z5&Xx?h`k^RqvzL_R}+OvGzbc21PDVyY#0M-VVcdC98e(;(E%(2qbPtyiHpo�CRf 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≀)H?oy1<28Z{WP291AF2 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

  • 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�e9S7p^>=F!R{|U9x(g@vqiD2HGXttvQ6JvM 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�CRf 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≀)H?oy1<28Z{WP291AF2 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